/* ============================================================
   TOKENS — every colour here is overridable at runtime
   ============================================================ */
:root{
  --bg:230,230,230;
  --ink:#16171a;
  --ok:#2f7d5e;
  --bad:#b0412c;
  --unk:#7b7f87;
  --warn:#96631f;

  --ink-2:color-mix(in srgb,var(--ink) 66%,rgb(var(--bg)));
  --ink-3:color-mix(in srgb,var(--ink) 45%,rgb(var(--bg)));

  --r-card:24px;
  --r-pill:999px;
  --r-sheet:34px;

  --ease-out:cubic-bezier(.22,1,.3,1);
  --ease-drawer:cubic-bezier(.3,.8,0,1);
  --ease-rubber:cubic-bezier(.2,1.08,.36,1);

  --safe-t:env(safe-area-inset-top,0px);
  --safe-b:env(safe-area-inset-bottom,0px);
}
@supports not (color:color-mix(in srgb,#000 50%,#fff)){
  :root{--ink-2:#5d6066;--ink-3:#8c8f96}
}

*{box-sizing:border-box;-webkit-tap-highlight-color:transparent}
html,body{height:100%}
body{
  margin:0;
  font-family:-apple-system,BlinkMacSystemFont,"SF Pro Text","Segoe UI",Inter,system-ui,sans-serif;
  color:var(--ink);background:rgb(var(--bg));
  -webkit-font-smoothing:antialiased;text-rendering:optimizeLegibility;
  overscroll-behavior-y:none;touch-action:manipulation;
  -webkit-user-select:none;user-select:none;
}
input,textarea,select,[contenteditable]{-webkit-user-select:text;user-select:text}
button,input,select,textarea{font:inherit;color:inherit}
button{border:0;background:none;padding:0;cursor:pointer}
input,textarea,select{-webkit-appearance:none;appearance:none}
img{-webkit-user-drag:none}

/* ============================================================
   STAGE
   ============================================================ */
.stage{position:fixed;inset:0;z-index:0;background:rgb(var(--bg))}
.stage::before{
  content:"";position:absolute;inset:-20%;
  background:
    radial-gradient(38% 28% at 22% 16%,rgba(255,255,255,.95),transparent 62%),
    radial-gradient(44% 34% at 84% 30%,rgba(255,255,255,.7),transparent 66%),
    radial-gradient(52% 40% at 50% 104%,rgba(0,0,0,.14),transparent 68%),
    radial-gradient(30% 22% at 8% 78%,rgba(0,0,0,.1),transparent 70%);
  filter:blur(6px);
}
.stage::after{
  content:"";position:absolute;inset:0;opacity:.3;mix-blend-mode:multiply;
  background-image:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='160' height='160'%3E%3Cfilter id='n'%3E%3CfeTurbulence type='fractalNoise' baseFrequency='.85' numOctaves='3'/%3E%3CfeColorMatrix type='saturate' values='0'/%3E%3C/filter%3E%3Crect width='160' height='160' filter='url(%23n)' opacity='.055'/%3E%3C/svg%3E");
}

/* ============================================================
   LIQUID GLASS
   ============================================================ */
.lg{
  position:relative;isolation:isolate;border-radius:var(--r-card);
  background:linear-gradient(177deg,rgba(255,255,255,.58) 0%,rgba(255,255,255,.26) 38%,rgba(255,255,255,.14) 62%,rgba(255,255,255,.40) 100%);
  backdrop-filter:blur(9px) saturate(1.5) brightness(1.05);
  -webkit-backdrop-filter:blur(9px) saturate(1.5) brightness(1.05);
  box-shadow:
    inset 0 1.2px .5px rgba(255,255,255,.95),
    inset 0 -1.4px 1px rgba(255,255,255,.55),
    inset 1.2px 0 1px rgba(255,255,255,.4),
    inset -1.2px 0 1px rgba(255,255,255,.4),
    inset 0 -14px 22px -18px rgba(0,0,0,.5),
    inset 0 16px 26px -20px rgba(255,255,255,.9),
    0 1px 1px rgba(0,0,0,.05),
    0 8px 18px -10px rgba(0,0,0,.22),
    0 22px 46px -26px rgba(0,0,0,.28);
}
.lg::before{
  content:"";position:absolute;inset:0;border-radius:inherit;pointer-events:none;z-index:-1;
  backdrop-filter:blur(.5px) url(#lgWarp);
  -webkit-backdrop-filter:blur(.5px);
  -webkit-mask:radial-gradient(130% 130% at 50% 0%,#000 0 42%,rgba(0,0,0,.35) 72%,rgba(0,0,0,.9) 100%);
          mask:radial-gradient(130% 130% at 50% 0%,#000 0 42%,rgba(0,0,0,.35) 72%,rgba(0,0,0,.9) 100%);
}
.lg::after{
  content:"";position:absolute;inset:0;border-radius:inherit;pointer-events:none;z-index:1;
  background-image:
    linear-gradient(142deg,rgba(255,255,255,.98) 0%,rgba(255,255,255,0) 22%,rgba(255,255,255,0) 74%,rgba(255,255,255,.72) 100%),
    linear-gradient(103deg,transparent 12%,rgba(255,255,255,.62) 26%,rgba(255,255,255,.06) 33%,transparent 46%),
    linear-gradient(120deg,rgba(150,205,255,.16),transparent 16%,transparent 84%,rgba(255,196,150,.14)),
    radial-gradient(circle at 35% 34%,rgba(255,255,255,.95),rgba(255,255,255,.28) 44%,rgba(0,0,0,.16) 62%,transparent 72%),
    radial-gradient(circle at 36% 33%,rgba(255,255,255,.9),rgba(255,255,255,.2) 46%,rgba(0,0,0,.13) 64%,transparent 74%),
    radial-gradient(circle at 38% 36%,rgba(255,255,255,.85),rgba(255,255,255,.18) 48%,rgba(0,0,0,.1) 66%,transparent 76%),
    repeating-linear-gradient(64deg,transparent 0 23px,rgba(255,255,255,.5) 23px 23.6px,transparent 23.6px 61px),
    repeating-linear-gradient(-51deg,transparent 0 37px,rgba(255,255,255,.34) 37px 37.5px,transparent 37.5px 96px);
  background-size:100% 100%,100% 100%,100% 100%,9px 9px,6px 6px,4px 4px,100% 100%,100% 100%;
  background-position:0 0,0 0,0 0,18% 64%,71% 27%,47% 82%,0 0,0 0;
  background-repeat:no-repeat,no-repeat,no-repeat,no-repeat,no-repeat,no-repeat,repeat,repeat;
  mix-blend-mode:screen;opacity:.92;
}
.lg-edge{
  position:absolute;inset:0;border-radius:inherit;pointer-events:none;z-index:2;
  border:.5px solid rgba(255,255,255,.75);
  -webkit-mask:linear-gradient(150deg,#000,rgba(0,0,0,.25) 45%,rgba(0,0,0,.65));
          mask:linear-gradient(150deg,#000,rgba(0,0,0,.25) 45%,rgba(0,0,0,.65));
}

/* ============================================================
   SHELL
   ============================================================ */
.app{position:relative;z-index:1;max-width:560px;margin:0 auto;min-height:100%;
  padding:calc(var(--safe-t) + 10px) 14px calc(var(--safe-b) + 128px);will-change:transform}
.topbar{position:sticky;top:calc(var(--safe-t) + 6px);z-index:40;padding-bottom:10px}
.head{padding:14px 16px 12px}
.head-row{display:flex;align-items:flex-end;justify-content:space-between;gap:12px;position:relative;z-index:3}
h1{margin:0;font-size:27px;line-height:1.05;letter-spacing:-.035em;font-weight:700;
  font-family:-apple-system,BlinkMacSystemFont,"SF Pro Display",system-ui,sans-serif}
.sub{margin:3px 0 0;font-size:12.5px;letter-spacing:-.01em;color:var(--ink-2)}
.sync{display:inline-flex;align-items:center;gap:6px;font-size:11.5px;color:var(--ink-2);letter-spacing:-.01em;white-space:nowrap;
  transition:transform 130ms var(--ease-out)}
.sync:active{transform:scale(.94)}
.dot{width:7px;height:7px;border-radius:50%;background:var(--unk);box-shadow:0 0 0 3px color-mix(in srgb,var(--unk) 18%,transparent)}
.dot.on{background:var(--ok);box-shadow:0 0 0 3px color-mix(in srgb,var(--ok) 18%,transparent)}
.dot.off{background:var(--ink-3)}
.dot.busy{animation:pulse 1s ease-in-out infinite}
@keyframes pulse{50%{opacity:.35}}

.stats{display:flex;gap:16px;margin-top:12px;position:relative;z-index:3;width:100%;text-align:left;
  transition:transform 140ms var(--ease-out)}
.stats:active{transform:scale(.982)}
.stat{flex:1;min-width:0}
.stat b{display:block;font-size:19px;font-weight:650;letter-spacing:-.03em;font-variant-numeric:tabular-nums}
.stat span{display:block;font-size:11px;color:var(--ink-2);margin-top:1px}
.stat.ok b{color:var(--ok)} .stat.bad b{color:var(--bad)}

.search{position:relative;z-index:3;margin-top:13px;display:flex;align-items:center;gap:9px;
  height:38px;padding:0 13px;border-radius:var(--r-pill);background:rgba(255,255,255,.42);
  box-shadow:inset 0 1px 0 rgba(255,255,255,.9),inset 0 -1px 0 rgba(255,255,255,.4),inset 0 2px 6px -4px rgba(0,0,0,.4);
  transition:background 180ms ease}
.search:focus-within{background:rgba(255,255,255,.62)}
.search input{border:0;background:none;outline:0;width:100%;font-size:15.5px;letter-spacing:-.015em}
.search input::placeholder{color:var(--ink-3)}
.search svg{flex:none;opacity:.5}
.clear{opacity:0;transform:scale(.8);pointer-events:none;transition:opacity 130ms ease,transform 150ms var(--ease-out)}
.clear.show{opacity:.45;transform:none;pointer-events:auto}

.filters{display:flex;gap:7px;overflow-x:auto;scrollbar-width:none;padding:11px 2px 2px;position:relative;z-index:3;margin:0 -2px}
.filters::-webkit-scrollbar{display:none}
.chip{flex:none;height:31px;padding:0 13px;border-radius:var(--r-pill);
  font-size:13px;font-weight:520;letter-spacing:-.012em;color:var(--ink-2);background:rgba(255,255,255,.34);
  box-shadow:inset 0 1px 0 rgba(255,255,255,.85),0 1px 2px rgba(0,0,0,.05);
  transition:transform 140ms var(--ease-out),background 160ms ease,color 160ms ease}
.chip:active{transform:scale(.94)}
.chip[aria-pressed="true"]{color:var(--ink);background:rgba(255,255,255,.82);font-weight:600;
  box-shadow:inset 0 1px 0 rgba(255,255,255,1),0 2px 6px -2px rgba(0,0,0,.25)}
.chip.alert{color:var(--warn)}

/* pull to sync */
.pull{position:fixed;top:calc(var(--safe-t) + 6px);left:50%;transform:translate(-50%,-14px) scale(.9);
  z-index:35;display:flex;align-items:center;gap:8px;height:34px;padding:0 15px;border-radius:var(--r-pill);
  font-size:12.5px;font-weight:580;letter-spacing:-.01em;color:var(--ink-2);opacity:0;pointer-events:none}
.pull.on{opacity:1}
.pull svg{transition:transform 260ms var(--ease-out)}
.pull.ready svg{transform:rotate(180deg)}
.pull.spin svg{animation:spin .8s linear infinite}
@keyframes spin{to{transform:rotate(360deg)}}

/* ============================================================
   LIST
   ============================================================ */
.list{margin-top:12px;display:flex;flex-direction:column;gap:10px}
.sec{margin:8px 4px -2px;font-size:12px;font-weight:640;color:var(--ink-2);display:flex;justify-content:space-between}
.sec b{font-weight:520;color:var(--ink-3);font-variant-numeric:tabular-nums}

.row{position:relative;border-radius:var(--r-card)}
.row-actions{position:absolute;inset:0;display:flex;justify-content:flex-end;align-items:stretch;
  gap:7px;padding:6px;border-radius:inherit;background:linear-gradient(90deg,transparent,color-mix(in srgb,var(--bad) 12%,transparent))}
.act{width:58px;border-radius:18px;display:grid;place-items:center;font-size:11px;font-weight:600;color:#fff;
  transition:transform 130ms var(--ease-out)}
.act:active{transform:scale(.94)}
.act.edit{background:linear-gradient(180deg,color-mix(in srgb,var(--ink) 55%,#fff),color-mix(in srgb,var(--ink) 70%,#fff))}
.act.copy{background:linear-gradient(180deg,color-mix(in srgb,var(--ink) 68%,#fff),color-mix(in srgb,var(--ink) 82%,#fff))}
.act.del{background:linear-gradient(180deg,var(--bad),color-mix(in srgb,var(--bad) 80%,#000))}
.act svg{display:block;margin:0 auto 3px}

.card{position:relative;padding:12px 13px;display:flex;gap:11px;align-items:flex-start;will-change:transform;touch-action:pan-y}
.card>*{position:relative;z-index:3}
.card.press{transform:scale(.985)}

.thumb{width:46px;height:46px;border-radius:15px;flex:none;object-fit:cover;background:rgba(255,255,255,.5);
  box-shadow:inset 0 0 0 .5px rgba(255,255,255,.9),0 2px 6px -3px rgba(0,0,0,.4);
  transition:transform 140ms var(--ease-out)}
.thumb:active{transform:scale(.95)}
.thumb.ph{display:grid;place-items:center;color:var(--ink-3)}

.main{flex:1;min-width:0}
.name{font-size:16px;font-weight:620;letter-spacing:-.022em;line-height:1.25;word-break:break-word}
.meta{margin-top:5px;font-size:12.5px;color:var(--ink-2);display:flex;flex-wrap:wrap;gap:5px 7px;align-items:center}
.meta em{font-style:normal;color:var(--ink-3)}
.note{margin-top:6px;font-size:12.5px;line-height:1.4;color:var(--ink-2)}
.pins{margin-top:6px;font-size:12px;line-height:1.45;color:var(--ink-2);
  font-family:ui-monospace,SFMono-Regular,Menlo,monospace;white-space:pre-wrap;
  padding:7px 9px;border-radius:12px;background:rgba(255,255,255,.4);box-shadow:inset 0 .5px 0 rgba(255,255,255,.9)}
.tag{display:inline-flex;align-items:center;gap:5px;height:20px;padding:0 8px;border-radius:var(--r-pill);
  font-size:11px;font-weight:560;color:var(--ink-2);background:rgba(255,255,255,.55);
  box-shadow:inset 0 .5px 0 rgba(255,255,255,.9),0 1px 1.5px rgba(0,0,0,.07)}
.tag.qty{font-variant-numeric:tabular-nums}
.tag.low{color:var(--warn);background:color-mix(in srgb,var(--warn) 13%,rgba(255,255,255,.5))}
.tag.lent{color:var(--ink);background:color-mix(in srgb,var(--ink) 9%,rgba(255,255,255,.55))}
.tag.link{color:var(--ink);transition:transform 130ms var(--ease-out)}
.tag.link:active{transform:scale(.95)}

.right{display:flex;flex-direction:column;align-items:flex-end;gap:7px;flex:none}
.status{height:29px;padding:0 12px;border-radius:var(--r-pill);display:inline-flex;align-items:center;gap:7px;
  font-size:12.5px;font-weight:600;letter-spacing:-.015em;background:rgba(255,255,255,.6);
  box-shadow:inset 0 1px 0 rgba(255,255,255,.95),0 2px 5px -2px rgba(0,0,0,.2);
  transition:transform 140ms var(--ease-out),color 160ms ease}
.status:active{transform:scale(.96)}
.status i{width:7px;height:7px;border-radius:50%;flex:none;transition:background 160ms ease,box-shadow 160ms ease}
.status.working{color:var(--ok)} .status.working i{background:var(--ok);box-shadow:0 0 0 3px color-mix(in srgb,var(--ok) 16%,transparent)}
.status.faulty{color:var(--bad)} .status.faulty i{background:var(--bad);box-shadow:0 0 0 3px color-mix(in srgb,var(--bad) 16%,transparent)}
.status.untested{color:var(--unk)} .status.untested i{background:var(--unk);box-shadow:0 0 0 3px color-mix(in srgb,var(--unk) 16%,transparent)}
.price{font-size:12.5px;color:var(--ink-2);font-variant-numeric:tabular-nums}

.row{opacity:0;transform:translateY(6px) scale(.99);animation:enter 260ms var(--ease-out) forwards}
@keyframes enter{to{opacity:1;transform:none}}

.empty{padding:34px 26px;text-align:center;margin-top:12px}
.empty h2{margin:0 0 6px;font-size:17px;font-weight:620;letter-spacing:-.025em;position:relative;z-index:3}
.empty p{margin:0 0 16px;font-size:13.5px;line-height:1.5;color:var(--ink-2);position:relative;z-index:3}
.empty .mini{position:relative;z-index:3;display:inline-flex;gap:8px;flex-wrap:wrap;justify-content:center}
.mini button{height:36px;padding:0 15px;border-radius:var(--r-pill);font-size:13.5px;font-weight:600;
  background:rgba(255,255,255,.7);box-shadow:inset 0 1px 0 #fff,0 2px 7px -3px rgba(0,0,0,.4);
  transition:transform 130ms var(--ease-out)}
.mini button:active{transform:scale(.95)}

/* ============================================================
   DOCK
   ============================================================ */
.dock{position:fixed;left:50%;bottom:calc(var(--safe-b) + 18px);transform:translateX(-50%);
  z-index:50;display:flex;align-items:center;gap:4px;padding:6px;border-radius:var(--r-pill);
  width:min(calc(100% - 28px),392px)}
.dock .lg-edge{border-radius:var(--r-pill)}
.dock-btn{position:relative;z-index:3;flex:1;height:46px;border-radius:var(--r-pill);
  display:flex;align-items:center;justify-content:center;gap:8px;
  font-size:14.5px;font-weight:600;letter-spacing:-.018em;color:var(--ink);
  transition:transform 130ms var(--ease-out),background 160ms ease}
.dock-btn:active{transform:scale(.955)}
.dock-btn.primary{background:rgba(255,255,255,.72);box-shadow:inset 0 1px 0 rgba(255,255,255,1),0 3px 10px -4px rgba(0,0,0,.35)}
.dock-btn.ghost{flex:0 0 52px;color:var(--ink-2)}

/* ============================================================
   SHEETS
   ============================================================ */
.scrim{position:fixed;inset:0;z-index:60;background:color-mix(in srgb,var(--ink) 26%,transparent);
  backdrop-filter:blur(2px);-webkit-backdrop-filter:blur(2px);
  opacity:0;pointer-events:none;transition:opacity 220ms var(--ease-drawer)}
.scrim.open{opacity:1;pointer-events:auto}
.sheet{position:fixed;left:50%;bottom:0;z-index:70;width:min(100%,560px);
  border-radius:var(--r-sheet) var(--r-sheet) 0 0;transform:translate(-50%,100%);will-change:transform;
  max-height:min(92vh,880px);display:flex;flex-direction:column;padding-bottom:calc(var(--safe-b) + 14px)}
.sheet.open{transform:translate(-50%,0)}
.sheet.anim{transition:transform 330ms var(--ease-drawer)}
.grip{width:38px;height:5px;border-radius:99px;background:color-mix(in srgb,var(--ink) 20%,transparent);margin:9px auto 2px;position:relative;z-index:3;flex:none}
.sheet-head{display:flex;align-items:center;justify-content:space-between;gap:10px;padding:6px 18px 10px;position:relative;z-index:3;flex:none}
.sheet-head h2{margin:0;font-size:18px;font-weight:660;letter-spacing:-.028em;white-space:nowrap}
.link{font-size:15px;font-weight:560;color:var(--ink-2);padding:6px 2px;white-space:nowrap;
  transition:transform 130ms var(--ease-out),opacity 130ms ease}
.link:active{transform:scale(.94);opacity:.6}
.link.go{color:var(--ink);font-weight:640}
.sheet-body{overflow-y:auto;-webkit-overflow-scrolling:touch;padding:2px 18px 6px;position:relative;z-index:3;overscroll-behavior:contain}

.field{margin-bottom:11px}
.field label{display:block;font-size:12px;font-weight:560;color:var(--ink-2);margin:0 0 5px 3px}
.field label em{font-style:normal;color:var(--ink-3)}
.input,textarea.input,select.input{width:100%;height:46px;padding:0 14px;border:0;outline:0;border-radius:15px;
  font-size:16px;letter-spacing:-.018em;color:var(--ink);background:rgba(255,255,255,.5);
  box-shadow:inset 0 1px 0 rgba(255,255,255,.95),inset 0 2px 7px -5px rgba(0,0,0,.55);
  transition:background 160ms ease,box-shadow 160ms ease}
.input:focus{background:rgba(255,255,255,.75);box-shadow:inset 0 0 0 1.5px color-mix(in srgb,var(--ink) 16%,transparent)}
textarea.input{height:78px;padding:13px 14px;line-height:1.4;resize:none}
textarea.mono,.input.mono{font-family:ui-monospace,SFMono-Regular,Menlo,monospace;font-size:13px}
select.input{background-image:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='12' height='8' viewBox='0 0 12 8'%3E%3Cpath d='M1 1.5 6 6.5l5-5' fill='none' stroke='%23888' stroke-width='1.6' stroke-linecap='round' stroke-linejoin='round'/%3E%3C/svg%3E");
  background-repeat:no-repeat;background-position:right 14px center;padding-right:36px}
.two{display:flex;gap:10px}
.two>*{flex:1;min-width:0}

.seg{display:flex;gap:5px;padding:5px;border-radius:var(--r-pill);background:rgba(255,255,255,.34);
  box-shadow:inset 0 1px 0 rgba(255,255,255,.85),inset 0 2px 6px -5px rgba(0,0,0,.5)}
.seg button{flex:1;height:36px;border-radius:var(--r-pill);font-size:13.5px;font-weight:580;color:var(--ink-2);
  transition:transform 140ms var(--ease-out),background 160ms ease,color 160ms ease}
.seg button:active{transform:scale(.95)}
.seg button[aria-pressed="true"]{background:rgba(255,255,255,.9);color:var(--ink);box-shadow:0 2px 6px -2px rgba(0,0,0,.3),inset 0 1px 0 #fff}
.seg button[aria-pressed="true"][data-v="working"]{color:var(--ok)}
.seg button[aria-pressed="true"][data-v="faulty"]{color:var(--bad)}

.stepper{display:flex;align-items:center;height:46px;border-radius:15px;overflow:hidden;background:rgba(255,255,255,.5);
  box-shadow:inset 0 1px 0 rgba(255,255,255,.95),inset 0 2px 7px -5px rgba(0,0,0,.55)}
.stepper button{width:44px;height:100%;font-size:20px;color:var(--ink-2);transition:transform 120ms var(--ease-out),background 140ms ease}
.stepper button:active{transform:scale(.88);background:rgba(255,255,255,.5)}
.stepper input{flex:1;min-width:0;text-align:center;border:0;background:none;outline:0;font-size:16px;font-variant-numeric:tabular-nums}

.photo-row{display:flex;gap:10px;align-items:center;margin:2px 0 14px}
.photo-box{width:76px;height:76px;border-radius:21px;flex:none;background:rgba(255,255,255,.45);
  display:grid;place-items:center;color:var(--ink-3);
  box-shadow:inset 0 0 0 .5px rgba(255,255,255,.9),0 2px 8px -4px rgba(0,0,0,.3);
  transition:transform 140ms var(--ease-out)}
.photo-box:active{transform:scale(.95)}
.photo-tools{display:flex;flex-direction:column;gap:7px;min-width:0}
.tiny{height:33px;padding:0 13px;border-radius:var(--r-pill);font-size:13px;font-weight:580;color:var(--ink-2);
  background:rgba(255,255,255,.5);box-shadow:inset 0 1px 0 rgba(255,255,255,.9),0 1px 3px rgba(0,0,0,.08);
  transition:transform 130ms var(--ease-out),background 160ms ease;align-self:flex-start}
.tiny:active{transform:scale(.94)}
.tiny.warn{color:var(--bad)}

.danger{width:100%;height:46px;border-radius:15px;margin:6px 0 4px;font-size:15px;font-weight:600;color:var(--bad);
  background:color-mix(in srgb,var(--bad) 10%,rgba(255,255,255,.35));box-shadow:inset 0 1px 0 rgba(255,255,255,.7);
  transition:transform 140ms var(--ease-out),background 160ms ease}
.danger:active{transform:scale(.975)}
.rowbtn{width:100%;min-height:48px;border-radius:15px;display:flex;align-items:center;justify-content:space-between;gap:10px;padding:0 14px;
  font-size:15px;font-weight:540;margin-bottom:8px;text-align:left;
  background:rgba(255,255,255,.44);box-shadow:inset 0 1px 0 rgba(255,255,255,.9),0 1px 3px rgba(0,0,0,.07);
  transition:transform 140ms var(--ease-out),background 160ms ease}
.rowbtn:active{transform:scale(.978);background:rgba(255,255,255,.66)}
.rowbtn span{color:var(--ink-3);font-size:13px;font-variant-numeric:tabular-nums;white-space:nowrap}
.hint{font-size:12.5px;line-height:1.5;color:var(--ink-2);margin:2px 3px 14px}
.hr{height:1px;background:color-mix(in srgb,var(--ink) 9%,transparent);margin:16px 2px 15px}

/* palette */
.swatches{display:flex;gap:8px;overflow-x:auto;scrollbar-width:none;padding:2px 2px 10px;margin:0 -2px}
.swatches::-webkit-scrollbar{display:none}
.sw{flex:none;width:52px;height:52px;border-radius:17px;position:relative;
  box-shadow:inset 0 0 0 .5px rgba(255,255,255,.85),0 2px 7px -3px rgba(0,0,0,.35);
  transition:transform 140ms var(--ease-out)}
.sw:active{transform:scale(.95)}
.sw::after{content:"";position:absolute;inset:-4px;border-radius:21px;border:2px solid var(--ink);
  opacity:0;transform:scale(.9);transition:opacity 160ms ease-out,transform 220ms var(--ease-out)}
.sw[aria-pressed="true"]::after{opacity:1;transform:scale(1)}
.sw i{position:absolute;right:7px;bottom:7px;width:11px;height:11px;border-radius:50%;box-shadow:0 0 0 1.5px rgba(255,255,255,.7)}
.colors{display:flex;flex-direction:column;gap:9px;margin-bottom:12px}
.colorrow{display:flex;align-items:center;justify-content:space-between;gap:12px;height:44px;padding:0 6px 0 14px;border-radius:15px;
  background:rgba(255,255,255,.4);box-shadow:inset 0 1px 0 rgba(255,255,255,.9);font-size:14.5px;font-weight:540}
.colorrow input[type=color]{width:52px;height:32px;border:0;border-radius:11px;background:none;padding:0;cursor:pointer}
.colorrow input[type=color]::-webkit-color-swatch{border:none;border-radius:11px;box-shadow:inset 0 0 0 1px rgba(0,0,0,.12)}
.colorrow input[type=color]::-moz-color-swatch{border:none;border-radius:11px}

.cats{display:flex;flex-wrap:wrap;gap:7px;margin-bottom:12px}
.cat{display:inline-flex;align-items:center;gap:7px;height:32px;padding:0 6px 0 12px;border-radius:var(--r-pill);
  font-size:13px;font-weight:540;background:rgba(255,255,255,.5);box-shadow:inset 0 1px 0 rgba(255,255,255,.9)}
.cat button{width:20px;height:20px;border-radius:50%;display:grid;place-items:center;color:var(--ink-3);
  background:color-mix(in srgb,var(--ink) 8%,transparent);font-size:14px;line-height:1;transition:transform 130ms var(--ease-out)}
.cat button:active{transform:scale(.85)}

/* stats */
.bignum{display:flex;gap:12px;margin-bottom:14px}
.bignum div{flex:1;padding:12px;border-radius:17px;background:rgba(255,255,255,.44);box-shadow:inset 0 1px 0 rgba(255,255,255,.9)}
.bignum b{display:block;font-size:21px;font-weight:660;letter-spacing:-.03em;font-variant-numeric:tabular-nums}
.bignum span{font-size:11.5px;color:var(--ink-2)}
.bars{display:flex;flex-direction:column;gap:9px;margin-bottom:6px}
.barrow{display:grid;grid-template-columns:86px 1fr 34px;align-items:center;gap:10px;font-size:12.5px}
.barrow em{font-style:normal;color:var(--ink-2);overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.bartrack{height:9px;border-radius:99px;background:rgba(255,255,255,.45);overflow:hidden;box-shadow:inset 0 1px 2px rgba(0,0,0,.14)}
.barfill{height:100%;border-radius:99px;background:linear-gradient(90deg,color-mix(in srgb,var(--ink) 55%,#fff),var(--ink));
  transform-origin:left;animation:grow 420ms var(--ease-out) both}
@keyframes grow{from{transform:scaleX(0)}}
.barrow b{text-align:right;font-weight:560;font-variant-numeric:tabular-nums;color:var(--ink-2)}

/* gate + dialog */
.gate{position:fixed;inset:0;z-index:95;display:grid;place-items:center;padding:22px;
  background:rgb(var(--bg));opacity:0;pointer-events:none;transition:opacity 260ms ease}
.gate.on{opacity:1;pointer-events:auto}
.gatecard{width:min(100%,380px);padding:26px 22px 20px;text-align:center;border-radius:30px}
.gatecard>*{position:relative;z-index:3}
.gatecard h2{margin:14px 0 6px;font-size:20px;font-weight:660;letter-spacing:-.03em}
.gatecard p{margin:0 0 18px;font-size:13.5px;line-height:1.5;color:var(--ink-2)}
.gatecard .input{text-align:center;margin-bottom:9px}
.gate-go{width:100%;height:48px;border-radius:16px;font-size:15.5px;font-weight:640;color:var(--ink);
  background:rgba(255,255,255,.75);box-shadow:inset 0 1px 0 #fff,0 4px 12px -5px rgba(0,0,0,.4);
  transition:transform 140ms var(--ease-out)}
.gate-go:active{transform:scale(.97)}
.gate .link{display:block;margin:14px auto 0}
.lockmark{width:52px;height:52px;margin:0 auto;border-radius:19px;display:grid;place-items:center;
  background:rgba(255,255,255,.55);box-shadow:inset 0 1px 0 #fff,0 3px 10px -5px rgba(0,0,0,.4)}

.dlg{position:fixed;inset:0;z-index:92;display:grid;place-items:center;padding:24px;
  background:color-mix(in srgb,var(--ink) 25%,transparent);backdrop-filter:blur(3px);
  opacity:0;pointer-events:none;transition:opacity 200ms ease}
.dlg.on{opacity:1;pointer-events:auto}
.dlgcard{width:min(100%,340px);padding:20px;border-radius:26px;transform:scale(.95);transition:transform 300ms var(--ease-rubber)}
.dlg.on .dlgcard{transform:scale(1)}
.dlgcard>*{position:relative;z-index:3}
.dlgcard h3{margin:0 0 12px;font-size:16px;font-weight:640;letter-spacing:-.025em}
.dlgbtns{display:flex;gap:8px;margin-top:12px}
.dlgbtns button{flex:1;height:42px;border-radius:14px;font-size:14.5px;font-weight:600;
  background:rgba(255,255,255,.5);box-shadow:inset 0 1px 0 rgba(255,255,255,.9);transition:transform 130ms var(--ease-out)}
.dlgbtns button:active{transform:scale(.96)}
.dlgbtns button.go{background:rgba(255,255,255,.85)}

.lightbox{position:fixed;inset:0;z-index:90;display:grid;place-items:center;padding:20px;
  background:color-mix(in srgb,var(--ink) 55%,transparent);backdrop-filter:blur(16px);-webkit-backdrop-filter:blur(16px);
  opacity:0;pointer-events:none;transition:opacity 200ms ease}
.lightbox.on{opacity:1;pointer-events:auto}
.lightbox img{max-width:100%;max-height:80vh;border-radius:26px;box-shadow:0 30px 70px -24px rgba(0,0,0,.6);
  transform:scale(.95);transition:transform 300ms var(--ease-rubber)}
.lightbox.on img{transform:scale(1)}

.toast{position:fixed;left:50%;bottom:calc(var(--safe-b) + 84px);z-index:80;width:min(calc(100% - 34px),372px);
  display:flex;align-items:center;justify-content:space-between;gap:12px;padding:12px 8px 12px 16px;border-radius:19px;
  transform:translate(-50%,calc(100% + 28px)) scale(.96);opacity:0;pointer-events:none;
  transition:transform 320ms var(--ease-rubber),opacity 200ms ease-out}
.toast.show{transform:translate(-50%,0) scale(1);opacity:1;pointer-events:auto}
.toast.out{transition:transform 180ms var(--ease-out),opacity 140ms ease-out}
.toast p{margin:0;font-size:13.5px;font-weight:540;position:relative;z-index:3}
.toast button{position:relative;z-index:3;height:32px;padding:0 13px;border-radius:var(--r-pill);
  font-size:13.5px;font-weight:640;background:rgba(255,255,255,.72);
  box-shadow:inset 0 1px 0 #fff,0 2px 6px -3px rgba(0,0,0,.4);transition:transform 130ms var(--ease-out)}
.toast button:active{transform:scale(.94)}

.hidden{display:none!important}
.sr{position:absolute;width:1px;height:1px;overflow:hidden;clip:rect(0 0 0 0);white-space:nowrap}
:focus-visible{outline:2px solid color-mix(in srgb,var(--ink) 55%,transparent);outline-offset:2px}
@media (hover:hover) and (pointer:fine){
  .chip:hover,.dock-btn:hover,.rowbtn:hover,.tiny:hover{background:rgba(255,255,255,.6)}
}
@media (prefers-reduced-motion:reduce){
  *{animation-duration:.01ms!important;animation-iteration-count:1!important}
  .row{transform:none!important;animation:fade-only 180ms ease both}
  .card.press,.chip:active,.dock-btn:active,.sw:active,.status:active,.thumb:active,
  .tag.link:active,.mini button:active,.tiny:active,.rowbtn:active,
  .gate-go:active,.dlgbtns button:active,.toast button:active,.link:active{transform:none!important}
}
@keyframes fade-only{from{opacity:0}to{opacity:1}}
