/* ==========================================================================
   PACKING BENCH — operator terminal + review

   TONE. The camera films this person all day. If the page feels like a
   supervisor, she will resent it and tap carelessly. So the whole thing is
   framed as HER receipt: it saves proof that she did the job right. Copy is
   plain, second person, and never blames her for a fault. Calm, not clinical.

   LOOK. Linear-style: a dark chrome sidebar carrying identity + status, a
   light work surface carrying the job, Inter, small crisp icons, restrained
   motion. Kiosk sizes are NOT negotiable — 64px targets, a 104px Start
   button — the Linear finish is applied at kiosk scale, never the reverse.

   MODEL. Recording never stops. A "package" is just a NAMED TIME RANGE over
   one continuous tape. Forgetting to press a button loses nothing.

   FONT. Inter variable, BUNDLED — /fonts/InterVariable.woff2. The box has no
   internet by design, so a CDN font would silently fall back.
   ========================================================================== */

@font-face{
  font-family:"InterVariable";
  src:url("/fonts/InterVariable.woff2?v=1") format("woff2");
  font-weight:100 900;
  font-style:normal;
  font-display:swap;
}

:root{
  --font:"InterVariable","Inter","Segoe UI Variable Text","Segoe UI",
         Roboto,system-ui,sans-serif;

  /* light work surface */
  --paper:#ffffff;
  --shell:#f7f7f8;
  --sunk:#ececef;
  --ink:#18181b;
  --ink-2:#51535a;          /* 7.4:1 on paper */
  --ink-3:#84868e;          /* large text and icons only */
  --rule:#e6e6e9;
  --rule-2:#d2d3d8;

  /* dark chrome (sidebar / top bar) */
  --bar:#151619;
  --bar-2:#1e1f24;          /* raised surfaces on the bar */
  --bar-ink:#ecedee;
  --bar-ink2:#a5a8af;
  --bar-ink3:#6d7078;
  --bar-line:rgba(255,255,255,.08);
  --bar-go:#41cd82;         /* status colours tuned for the dark surface */
  --bar-sig:#ff6a42;
  --bar-warn:#e5b455;

  /* meaning colours — one colour per meaning, both surfaces */
  --signal:#ee4623;         /* live / recording — blocks and dots */
  --signal-ink:#c1341a;     /* 4.9:1 — the same signal, safe for text */
  --signal-wash:#fdf0ec;
  --go:#0f6b3d;
  --go-wash:#ecf5f0;
  --warn-ink:#8a5a00;
  --warn-wash:#fdf6e6;
  --warn-rule:#eddfb4;

  --tap:64px;
  --r:10px;
  --r-sm:8px;
  --band:7px;
  --shadow:0 1px 2px rgba(16,17,20,.04),0 4px 16px rgba(16,17,20,.05);

  /* Emil: the built-in curves are too weak to feel intentional. */
  --out:cubic-bezier(.23,1,.32,1);
  --drawer:cubic-bezier(.32,.72,0,1);
}

*{box-sizing:border-box;margin:0;padding:0}
html{color-scheme:light}
html,body{height:100%}
body{
  font-family:var(--font);background:var(--shell);color:var(--ink);
  font-size:16px;line-height:1.5;letter-spacing:-.008em;
  font-optical-sizing:auto;
  -webkit-text-size-adjust:100%;-webkit-tap-highlight-color:transparent;
  user-select:none;touch-action:manipulation;overscroll-behavior:none;overflow:hidden;
}
button{font:inherit;color:inherit;border:0;background:none;cursor:pointer}
input{font:inherit;color:inherit}
:focus-visible{outline:3px solid var(--ink);outline-offset:2px}
.bar :focus-visible{outline-color:var(--bar-ink)}
.num{font-variant-numeric:tabular-nums;font-feature-settings:"tnum" 1}
.sr{position:absolute;width:1px;height:1px;overflow:hidden;clip:rect(0 0 0 0);white-space:nowrap}
.ic{flex:0 0 auto;display:inline-block;vertical-align:-3.5px}

/* Every pressable thing answers the finger. 140ms, ease-out. */
.press{transition:transform 140ms var(--out)}
.press:active{transform:scale(.975)}

/* ---------- shell: band on top, alerts, then chrome + work surface -------- */
.app,.rev{height:100dvh;display:grid;grid-template-rows:var(--band) auto minmax(0,1fr)}

/* The band. Read the bench state from across the room, no words needed. */
.band{background:var(--rule-2);transition:background 200ms ease}
body[data-rec="1"] .band{background:var(--signal)}
body[data-fault="1"] .band{background:repeating-linear-gradient(90deg,var(--signal) 0 22px,#b5301a 22px 44px)}

/* connection to the server itself — distinct from a camera fault */
.offline-bar{
  display:none;align-items:center;gap:10px;
  background:var(--warn-wash);border-bottom:1px solid var(--warn-rule);
  color:var(--warn-ink);font-size:15px;font-weight:600;
  padding:11px calc(22px + env(safe-area-inset-right)) 11px calc(22px + env(safe-area-inset-left));
}
body[data-conn="0"] .offline-bar{display:flex}

.trouble{
  display:none;align-items:flex-start;gap:14px;
  background:var(--signal);color:#fff;overflow-wrap:anywhere;
  padding:15px calc(22px + env(safe-area-inset-right)) 15px calc(22px + env(safe-area-inset-left));
}
body[data-fault="1"] .trouble{display:flex}
.trouble .ic{margin-top:3px}
.trouble .t{font-size:19px;font-weight:700;letter-spacing:-.015em;text-wrap:balance}
.trouble .s{font-size:15px;font-weight:500;opacity:.94;margin-top:2px}

/* ---------- frame: dark sidebar + light work surface --------------------- */
.frame{display:grid;grid-template-columns:236px minmax(0,1fr);min-height:0}

.bar{
  background:var(--bar);color:var(--bar-ink2);min-height:0;
  display:flex;flex-direction:column;gap:20px;overflow-y:auto;overscroll-behavior:contain;
  padding:20px calc(18px + env(safe-area-inset-left)/2) 18px calc(18px + env(safe-area-inset-left));
}
.brand{display:flex;align-items:flex-start;gap:11px;color:var(--bar-ink)}
.brand .ic{color:var(--bar-ink3);margin-top:3px}
.brand h1{font-size:16.5px;font-weight:650;letter-spacing:-.015em;line-height:1.3;overflow-wrap:anywhere}
.brand .brand-sub{display:block;font-size:13px;font-weight:500;color:var(--bar-ink3);margin-top:1px}

/* status stack — written by JS into #facts */
.facts{display:flex;flex-direction:column;gap:2px}
.fact{
  display:flex;align-items:center;gap:11px;min-height:36px;
  font-size:14px;font-weight:550;color:var(--bar-ink2);
  padding:0 10px;margin:0 -10px;border-radius:var(--r-sm);
}
.fact .ic{color:var(--bar-ink3)}
.fact .lbl{flex:1 1 auto;min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.fact.good{color:var(--bar-ink)}
.fact.good .ic{color:var(--bar-go)}
.fact.bad{color:var(--bar-sig);background:rgba(255,106,66,.08)}
.fact.bad .ic{color:var(--bar-sig)}
.fact.warn{color:var(--bar-warn)}
.fact.warn .ic{color:var(--bar-warn)}
.dot{width:9px;height:9px;border-radius:50%;background:var(--bar-go);flex:0 0 auto;margin:0 4.5px}
.dot.sig{background:var(--bar-sig)}
.dot.off{background:var(--bar-ink3)}
.dot.pulse{animation:pulse 2.4s ease-in-out infinite}
@keyframes pulse{0%,100%{opacity:1}50%{opacity:.4}}

/* day progress — written by JS into #dayprog (bench) / #facts (review) */
.dayprog{display:flex;flex-direction:column;gap:9px}
.dp-head{display:flex;align-items:baseline;gap:6px;font-size:13.5px;font-weight:550;color:var(--bar-ink3)}
.dp-head b{font-size:16px;font-weight:650;color:var(--bar-ink);margin-left:auto}
.dp-head .dp-of{font-size:13.5px;font-weight:500;color:var(--bar-ink3)}
.dp-bar{height:6px;border-radius:99px;background:var(--bar-2);overflow:hidden}
.dp-bar i{display:block;height:100%;border-radius:99px;background:var(--bar-go);
  transition:width 300ms var(--out)}

.bar-foot{margin-top:auto;display:flex;flex-direction:column;gap:16px}
.clockbox{border-top:1px solid var(--bar-line);padding-top:16px}
.clock{font-size:27px;font-weight:600;letter-spacing:-.02em;color:var(--bar-ink);line-height:1.15}
.clock small{font-size:17px;font-weight:550;color:var(--bar-ink3)}
.date{font-size:13.5px;font-weight:500;color:var(--bar-ink3);margin-top:2px}
.hint{font-size:12.5px;font-weight:500;color:var(--bar-ink3);line-height:1.6}
kbd{
  display:inline-block;padding:1px 7px;border-radius:5px;margin-right:2px;
  background:var(--bar-2);border:1px solid var(--bar-line);border-bottom-width:2px;
  font:inherit;font-size:11.5px;font-weight:600;color:var(--bar-ink2);
}

/* ---------- work surface layout ------------------------------------------ */
.main{display:grid;grid-template-columns:minmax(0,1fr) 372px;min-height:0;background:var(--shell)}
.left{display:grid;grid-template-rows:minmax(0,1fr) auto;min-height:0}

/* ---------- camera ---------- */
.live{position:relative;margin:16px;margin-bottom:0;min-height:0;
  background:#0c0d0f;border:1px solid var(--rule);border-radius:var(--r);
  box-shadow:var(--shadow);overflow:hidden;
  display:flex;align-items:center;justify-content:center;text-align:center}
.live .ph{color:#9a9da5;font-size:15px;font-weight:500;max-width:36ch;padding:24px}
.live .tag,.live .stamp{
  position:absolute;background:rgba(14,15,17,.72);color:#ecedee;
  border:1px solid rgba(255,255,255,.12);backdrop-filter:none;
  border-radius:7px;padding:6px 11px;font-size:13.5px;font-weight:600;
}
.live .tag{top:12px;left:12px;display:flex;align-items:center;gap:9px}
.live .tag .dot{margin:0}
.live .stamp{bottom:12px;right:12px}
.live.dead{background:var(--signal-wash);border-color:#f3c9be}
.live.dead .ph{color:var(--signal-ink);font-size:20px;font-weight:700;max-width:32ch;letter-spacing:-.015em}
.live.dead .ph span{display:block;font-size:15px;font-weight:500;margin-top:8px;color:#9c4a33}

/* Hidden until a track actually arrives — an empty <video> paints a black box
   at its intrinsic size and shoves the "connecting" message aside. */
.live video{width:100%;height:100%;object-fit:contain;background:#000;display:none}
.live[data-play="1"] video{display:block}
.live.dead video{display:none}

/* ---------- action zone: fixed rows. Nothing ever moves under a finger. --- */
.act{
  padding:16px 16px calc(16px + env(safe-area-inset-bottom));
  display:grid;grid-template-rows:104px 52px;gap:12px;
}
/* The start/recording swap happens ~64x a shift. Emil: reduce animation on
   frequent actions. A 110ms opacity crossfade only — no movement, no delay. */
.slot>*{animation:swap 110ms ease-out}
@keyframes swap{from{opacity:.35}to{opacity:1}}

.start{
  width:100%;height:104px;background:var(--ink);color:var(--paper);border-radius:var(--r);
  display:flex;align-items:center;justify-content:center;gap:14px;
  font-size:27px;font-weight:650;letter-spacing:-.02em;box-shadow:var(--shadow);
  transition:transform 140ms var(--out),background 140ms ease;
}
.start .ic{opacity:.55}
@media (hover:hover) and (pointer:fine){.start:hover{background:#000}}
.start:active{transform:scale(.988);background:#000}
.start .tk{font-size:31px;opacity:.55;font-weight:600}
.start[disabled]{background:var(--sunk);color:var(--ink-3);box-shadow:none;cursor:not-allowed}
.start[disabled]:active{transform:none}

.rec{
  height:104px;border:2px solid var(--signal);border-radius:var(--r);background:var(--paper);
  box-shadow:var(--shadow);display:flex;align-items:stretch;overflow:hidden;
}
.rec .meta{flex:1 1 auto;min-width:0;padding:0 22px;display:flex;flex-direction:column;justify-content:center;gap:2px}
.rec .k{font-size:13.5px;font-weight:650;color:var(--signal-ink);letter-spacing:.02em;text-transform:uppercase}
.rec .who{display:flex;align-items:baseline;gap:14px;flex-wrap:wrap;min-width:0}
.rec .who b{font-size:26px;font-weight:650;letter-spacing:-.02em;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.rec .el{font-size:30px;font-weight:650;color:var(--signal-ink)}
.rec .fin{
  flex:0 0 auto;width:216px;background:var(--go);color:#fff;
  display:inline-flex;align-items:center;justify-content:center;gap:11px;
  font-size:23px;font-weight:650;letter-spacing:-.015em;
  transition:filter 140ms ease,transform 140ms var(--out);
}
@media (hover:hover) and (pointer:fine){.rec .fin:hover{filter:brightness(.94)}}
.rec .fin:active{filter:brightness(.9);transform:scale(.985)}
.rec.broke{border-color:var(--warn-rule);background:var(--warn-wash)}
.rec.broke .k{color:var(--warn-ink)}
.rec.broke .el{color:var(--ink-3)}
.rec.broke .fin{background:var(--ink-2)}

/* helper row — contextual, fixed height, never grows. Content fades in only:
   nothing in this zone is allowed to move. */
.help{display:flex;align-items:center;gap:12px;min-width:0;overflow:hidden}
.help>*{animation:swap 140ms ease-out}
.help .msg{
  flex:1 1 auto;min-width:0;font-size:15px;color:var(--ink-2);font-weight:500;
  overflow:hidden;text-overflow:ellipsis;white-space:nowrap;
}
.help .msg.calm{color:var(--ink-3)}
.help .msg.good{color:var(--go);font-weight:600}
.help .msg.soft{color:var(--warn-ink);font-weight:600}
.grab{display:flex;align-items:center;gap:8px;flex:0 0 auto}
.grab .chip{
  height:44px;padding:0 16px;border-radius:var(--r-sm);border:1px solid var(--rule-2);
  background:var(--paper);font-size:15px;font-weight:600;color:var(--ink);
  transition:transform 140ms var(--out),background 140ms ease,border-color 140ms ease;
}
@media (hover:hover) and (pointer:fine){.grab .chip:hover{background:var(--shell);border-color:var(--ink-3)}}
.grab .chip:active{transform:scale(.97);background:var(--sunk)}
.step{display:flex;align-items:center;border:1px solid var(--rule-2);border-radius:var(--r-sm);
  background:var(--paper);overflow:hidden;height:44px;flex:0 0 auto}
.step button{width:48px;height:100%;font-size:21px;font-weight:700}
.step button:active{background:var(--sunk)}
.step .n{min-width:50px;text-align:center;font-size:17px;font-weight:650;height:100%;
  display:flex;align-items:center;justify-content:center;
  border-left:1px solid var(--rule);border-right:1px solid var(--rule)}
.undo{
  flex:0 0 auto;height:44px;padding:0 18px;border-radius:var(--r-sm);
  display:inline-flex;align-items:center;gap:8px;
  border:1.5px solid var(--go);color:var(--go);font-size:15px;font-weight:650;
  transition:transform 140ms var(--out),background 140ms ease;
}
@media (hover:hover) and (pointer:fine){.undo:hover{background:var(--go-wash)}}
.undo:active{transform:scale(.97);background:var(--go-wash)}

/* ---------- the package list (bench: today · review: everything) --------- */
.side{background:var(--paper);border-left:1px solid var(--rule);
  display:grid;grid-template-rows:auto minmax(0,1fr);min-height:0}
.side .head{padding:15px 20px;border-bottom:1px solid var(--rule);
  display:flex;align-items:baseline;justify-content:space-between;gap:12px}
.side .head h2{font-size:15.5px;font-weight:650;letter-spacing:-.01em}
.side .head .c{font-size:13.5px;font-weight:600;color:var(--ink-3)}
.rows{overflow-y:auto;-webkit-overflow-scrolling:touch;overscroll-behavior:contain}
.row{
  display:flex;align-items:center;gap:13px;width:100%;text-align:left;
  padding:0 20px;min-height:var(--tap);border-bottom:1px solid #f0f0f2;
  transition:background 120ms ease;
}
@media (hover:hover) and (pointer:fine){.row:hover{background:#f7f7f9}}
.row:active{background:var(--sunk)}
.row .tk{flex:0 0 auto;min-width:40px;height:34px;padding:0 8px;border-radius:7px;
  background:var(--shell);border:1px solid var(--rule);color:var(--ink-2);
  display:flex;align-items:center;justify-content:center;font-size:14.5px;font-weight:650}
.row .nm{flex:1 1 auto;min-width:0}
.row .nm b{display:block;font-size:15.5px;font-weight:600;letter-spacing:-.01em;
  overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.row .nm small{
  display:block;font-size:13px;font-weight:500;color:var(--ink-3);
  overflow:hidden;text-overflow:ellipsis;white-space:nowrap;
}

/* status pills — one colour per meaning */
.row .st{flex:0 0 auto;max-width:38%;padding:4px 10px;border-radius:99px;
  font-size:12.5px;font-weight:650;letter-spacing:0;white-space:nowrap}
.st.ok{color:var(--go);background:var(--go-wash)}
.st.cut{color:var(--ink-2);background:var(--sunk)}
.st.gap{color:var(--warn-ink);background:var(--warn-wash)}
.st.fail{color:var(--signal-ink);background:var(--signal-wash)}

.row.now{background:var(--signal-wash)}
.row.now .tk{background:var(--signal);border-color:var(--signal);color:#fff}
.row.now .st{color:var(--signal-ink);background:rgba(238,70,35,.12)}
.row.now.broke{background:var(--warn-wash)}
.row.now.broke .tk{background:var(--warn-ink);border-color:var(--warn-ink);color:#fff}
.row.now.broke .st{color:var(--warn-ink);background:rgba(138,90,0,.1)}
.blank{padding:46px 26px;text-align:center;color:var(--ink-3);font-size:15px;font-weight:500}
.blank b{display:block;color:var(--ink-2);font-size:17px;font-weight:650;margin-bottom:6px;letter-spacing:-.015em}

/* ---------- editor sheet ---------- */
.scrim{
  position:fixed;inset:0;background:rgba(16,17,20,.44);z-index:40;
  opacity:0;pointer-events:none;transition:opacity 200ms ease;
}
.scrim[data-on="1"]{opacity:1;pointer-events:auto}
.sheet{
  position:fixed;left:0;right:0;bottom:0;z-index:41;background:var(--paper);
  border-top:1px solid var(--rule);border-radius:14px 14px 0 0;
  box-shadow:0 -8px 40px rgba(16,17,20,.14);
  padding:22px calc(24px + env(safe-area-inset-right)) calc(22px + env(safe-area-inset-bottom))
          calc(24px + env(safe-area-inset-left));
  max-height:88dvh;overflow-y:auto;overscroll-behavior:contain;
  transform:translateY(100%);transition:transform 180ms var(--drawer);
  visibility:hidden;
}
.sheet[data-on="1"]{transform:translateY(0);visibility:visible;transition-duration:260ms}
@media (min-width:920px){
  .sheet{left:auto;right:0;top:0;bottom:0;width:520px;max-height:none;
    border-radius:0;border-left:1px solid var(--rule);border-top:0;
    box-shadow:-8px 0 40px rgba(16,17,20,.12);
    transform:translateX(100%)}
  .sheet[data-on="1"]{transform:translateX(0)}
}
.sheet h3{font-size:22px;font-weight:650;letter-spacing:-.02em;margin-bottom:3px}
.sheet .lede{font-size:15px;color:var(--ink-3);font-weight:500;margin-bottom:20px}
.fld{margin-bottom:20px}
.fld label{display:block;font-size:13.5px;font-weight:650;color:var(--ink-2);margin-bottom:7px}
.fld input[type=text]{
  width:100%;height:56px;padding:0 15px;border:1px solid var(--rule-2);border-radius:var(--r-sm);
  background:var(--paper);font-size:17px;font-weight:600;user-select:text;
  transition:border-color 140ms ease,box-shadow 140ms ease;
}
.fld input[type=text]:focus{border-color:var(--ink);outline:none;box-shadow:0 0 0 3px rgba(24,24,27,.08)}
.fld .note{font-size:13.5px;color:var(--ink-3);font-weight:500;margin-top:7px}

.trim{border:1px solid var(--rule);border-radius:var(--r-sm);overflow:hidden}
.trim .r{display:flex;align-items:center;gap:10px;padding:12px 14px;border-bottom:1px solid var(--rule)}
.trim .r:last-child{border-bottom:0;background:var(--shell)}
.trim .k{flex:0 0 62px;font-size:13.5px;font-weight:650;color:var(--ink-2)}
.trim .v{flex:1 1 auto;text-align:center;font-size:19px;font-weight:650}
.nudge{display:flex;gap:6px;flex:0 0 auto}
.nudge button{
  min-width:52px;height:44px;padding:0 10px;border-radius:7px;
  border:1px solid var(--rule-2);background:var(--paper);
  font-size:14px;font-weight:650;transition:transform 140ms var(--out),background 140ms ease;
}
.nudge button:active{transform:scale(.96);background:var(--sunk)}

.sheet .acts{display:flex;gap:12px;margin-top:24px;flex-wrap:wrap}
.sheet .save{
  flex:1 1 200px;min-height:var(--tap);border-radius:var(--r-sm);background:var(--ink);color:#fff;
  font-size:18px;font-weight:650;transition:transform 140ms var(--out),background 140ms ease;
}
.sheet .save:active{transform:scale(.985);background:#000}
.sheet .kill{
  flex:0 0 auto;min-height:var(--tap);padding:0 22px;border-radius:var(--r-sm);
  border:1.5px solid var(--rule-2);color:var(--signal-ink);font-size:16px;font-weight:650;
  transition:transform 140ms var(--out),background 140ms ease,border-color 140ms ease;
}
.sheet .kill:active{transform:scale(.97);background:var(--signal-wash);border-color:var(--signal)}

/* ---------- a clip playing back ---------- */
.player{width:100%;background:#000;border-radius:var(--r-sm);display:block;aspect-ratio:16/9}
.player-wrap{margin-bottom:20px}
.player-none{
  aspect-ratio:16/9;border-radius:var(--r-sm);background:var(--sunk);
  display:flex;align-items:center;justify-content:center;text-align:center;padding:20px;
  color:var(--ink-3);font-size:15px;font-weight:500;
}

/* ---------- sharing ---------- */
.sharerow{display:flex;flex-wrap:wrap;gap:10px;margin-top:16px}
.sharerow button,.sharerow a{
  flex:0 0 auto;min-height:56px;padding:0 20px;border-radius:var(--r-sm);
  border:1px solid var(--rule-2);background:var(--paper);color:var(--ink);
  font-size:15.5px;font-weight:650;display:inline-flex;align-items:center;gap:9px;
  text-decoration:none;cursor:pointer;
  transition:transform 140ms var(--out),background 140ms ease;
}
.sharerow .ic{color:var(--ink-3)}
.sharerow .primary{background:var(--ink);color:#fff;border-color:var(--ink);flex:1 1 190px;justify-content:center}
.sharerow .primary .ic{color:rgba(255,255,255,.6)}
.sharerow button:active,.sharerow a:active{transform:scale(.975);background:var(--sunk)}
.sharerow .primary:active{background:#000}
.sharemsg{margin-top:10px;font-size:14.5px;font-weight:600;color:var(--ink-2);
  overflow-wrap:anywhere;min-height:20px}
.qrbox{
  margin-top:14px;padding:16px;border:1px solid var(--rule);border-radius:var(--r-sm);
  background:var(--paper);display:none;text-align:center;
}
.qrbox[data-on="1"]{display:block;animation:qrin 200ms var(--out)}
@keyframes qrin{from{opacity:0;transform:translateY(4px)}to{opacity:1;transform:none}}
.qrbox img{width:190px;height:190px;display:block;margin:0 auto 10px}
.qrbox p{font-size:14px;color:var(--ink-3);font-weight:500;max-width:34ch;margin:0 auto}

/* ==========================================================================
   REVIEW — the supervisor. Same chrome, master-detail work surface:
   dark sidebar (status, progress, benches, export) · list · detail pane.
   ========================================================================== */
.rev-main{display:grid;grid-template-columns:340px minmax(0,1fr);grid-template-rows:minmax(0,1fr);min-height:0;background:var(--shell)}
.rev-main .side{grid-column:1;grid-row:1;border-left:0;border-right:1px solid var(--rule)}
.pane{grid-column:2;grid-row:1;background:var(--shell);min-height:0;overflow-y:auto;overscroll-behavior:contain;
  padding:22px calc(24px + env(safe-area-inset-right)) calc(24px + env(safe-area-inset-bottom)) 24px}
.pane h3{font-size:21px;font-weight:650;letter-spacing:-.02em}
.pane .sub{font-size:14.5px;color:var(--ink-3);font-weight:500;margin-bottom:18px}
.meta-grid{display:flex;flex-wrap:wrap;gap:10px;margin-bottom:20px}
.meta-grid div{
  font-size:14.5px;font-weight:600;color:var(--ink-2);
  background:var(--paper);border:1px solid var(--rule);border-radius:var(--r-sm);
  padding:9px 14px;min-width:96px;
}
.meta-grid span{display:block;font-size:11.5px;font-weight:650;color:var(--ink-3);
  letter-spacing:.04em;text-transform:uppercase;margin-bottom:1px}

.gapwarn{
  display:flex;gap:10px;align-items:flex-start;
  background:var(--warn-wash);border:1px solid var(--warn-rule);color:var(--warn-ink);
  border-radius:var(--r-sm);padding:13px 15px;font-size:15px;font-weight:600;margin-bottom:20px;
}
.gapwarn .ic{margin-top:2px}

textarea.note{
  width:100%;min-height:92px;padding:13px 15px;border:1px solid var(--rule-2);
  border-radius:var(--r-sm);font:inherit;font-size:16px;font-weight:500;resize:vertical;
  user-select:text;background:var(--paper);transition:border-color 140ms ease,box-shadow 140ms ease;
}
textarea.note:focus{border-color:var(--ink);outline:none;box-shadow:0 0 0 3px rgba(24,24,27,.08)}

.tickbar{display:flex;gap:12px;margin-top:20px;flex-wrap:wrap}
.tick{
  flex:1 1 220px;min-height:var(--tap);border-radius:var(--r-sm);background:var(--go);color:#fff;
  display:inline-flex;align-items:center;justify-content:center;gap:10px;
  font-size:17px;font-weight:650;transition:transform 140ms var(--out),filter 140ms ease;
}
.tick:active{transform:scale(.985);filter:brightness(.93)}
.tick.undo-check{background:var(--paper);color:var(--ink-2);border:1.5px solid var(--rule-2)}
.tick.undo-check:active{background:var(--sunk)}

.row .chk{flex:0 0 auto;width:24px;height:24px;border-radius:50%;
  border:1.5px solid var(--rule-2);display:flex;align-items:center;justify-content:center;
  color:transparent;transition:background 140ms ease,border-color 140ms ease}
.row.done-chk .chk{background:var(--go);border-color:var(--go);color:#fff}
.row.sel{background:var(--sunk);box-shadow:inset 3px 0 0 var(--ink)}
@media (hover:hover) and (pointer:fine){.row.sel:hover{background:var(--sunk)}}

/* sidebar extras on review — export + inline note (unsaved-note nudge) */
.facts .dayprog{margin:14px 0 4px}
.facts .bulk{margin-top:10px}
#noteHint{min-height:20px}   /* appearing text must never shift the pane */
.bulk{
  min-height:48px;padding:0 16px;border-radius:var(--r-sm);
  border:1px solid var(--bar-line);background:var(--bar-2);color:var(--bar-ink);
  font-size:14px;font-weight:650;
  display:inline-flex;align-items:center;justify-content:center;gap:9px;text-decoration:none;
  transition:transform 140ms var(--out),background 140ms ease;
}
.bulk .ic{color:var(--bar-ink3)}
.bulk:active{transform:scale(.975);background:#26272d}

/* bench filter — vertical in the sidebar, horizontal scroll when the bar is a
   top strip on a phone */
.benchbar{display:flex;flex-direction:column;gap:6px}
.benchbar:empty{display:none}
.bchip{
  min-height:44px;padding:0 14px;border-radius:var(--r-sm);text-align:left;
  border:1px solid transparent;background:none;color:var(--bar-ink2);
  font-size:14px;font-weight:550;
  display:flex;align-items:center;gap:9px;
  transition:transform 140ms var(--out),background 140ms ease,color 140ms ease;
}
.bchip:active{transform:scale(.98)}
.bchip.on{background:var(--bar-2);border-color:var(--bar-line);color:var(--bar-ink)}
.bchip.bad{color:var(--bar-sig)}
.bchip.bad.on{background:rgba(255,106,66,.1);border-color:rgba(255,106,66,.25)}

/* ---------- responsive: the bar folds into a dark top strip --------------- */
@media (max-width:920px){
  .frame{grid-template-columns:minmax(0,1fr);grid-template-rows:auto minmax(0,1fr)}
  .bar{flex-direction:row;align-items:center;gap:14px 22px;flex-wrap:wrap;overflow:visible;
    padding:12px calc(18px + env(safe-area-inset-right)) 12px calc(18px + env(safe-area-inset-left))}
  .brand{align-items:center}
  .brand .ic{margin-top:0}
  .facts{flex-direction:row;flex-wrap:wrap;gap:2px 14px;margin-left:auto}
  .fact{min-height:32px}
  .dayprog{flex-direction:row;align-items:center;gap:10px;flex:0 0 auto}
  .dp-bar{width:88px}
  .bar-foot{display:none}
  .benchbar{flex-direction:row;flex-wrap:nowrap;overflow-x:auto;width:100%;
    -webkit-overflow-scrolling:touch}
  .bchip{flex:0 0 auto;background:var(--bar-2);border-color:transparent}

  .main{grid-template-columns:minmax(0,1fr);grid-template-rows:minmax(0,1fr) auto}
  .side{grid-row:2;max-height:36dvh;border-left:0;border-top:1px solid var(--rule)}
  .rec .fin{width:170px;font-size:20px}
  .start{font-size:23px}

  .rev-main{grid-template-columns:minmax(0,1fr);grid-template-rows:auto minmax(0,1fr)}
  .pane{grid-column:1;grid-row:1;max-height:62dvh;border-bottom:1px solid var(--rule)}
  .rev-main .side{grid-column:1;grid-row:2;max-height:none;border-right:0;border-top:0}
}
@media (max-width:640px){
  .live{margin:10px;margin-bottom:0}
  .act{padding:10px 10px calc(12px + env(safe-area-inset-bottom));grid-template-rows:104px auto}
  .help{flex-wrap:wrap}
  .rec{flex-direction:column;height:auto}
  .rec .fin{width:100%;min-height:var(--tap);padding:15px}
  .pane{padding:16px}
}

/* ---------- gate pages (welcome / expired join / shared clip) — PUBLIC ----- */
.gate{min-height:100dvh;display:flex;align-items:center;justify-content:center;
  background:var(--bar);padding:24px;font-family:var(--font)}
.gatecard{background:var(--paper);border-radius:14px;box-shadow:0 8px 40px rgba(0,0,0,.35);
  padding:34px 32px;max-width:430px}
.gatecard .ic{color:var(--signal);margin-bottom:12px}
.gatecard h1{font-size:22px;font-weight:650;letter-spacing:-.02em;margin-bottom:10px}
.gatecard p{font-size:15px;color:var(--ink-2);font-weight:500;margin-bottom:10px;line-height:1.55}
.gatecard p:last-child{margin-bottom:0}
.gatecard .sub{color:var(--ink-3);font-size:14px}
.gatecard.wide{max-width:760px;width:100%}
.gatecard.wide .player{margin-top:16px}

/* ---------- people page ---------- */
.inviterow{display:flex;gap:10px;flex-wrap:wrap;margin-bottom:14px}
.inviterow input[type=text]{flex:1 1 220px;height:52px;padding:0 14px;
  border:1px solid var(--rule-2);border-radius:var(--r-sm);background:var(--paper);
  font-size:16px;font-weight:550;user-select:text;transition:border-color 140ms ease}
.inviterow input[type=text]:focus{border-color:var(--ink);outline:none}
.inviterow select{height:52px;padding:0 12px;border:1px solid var(--rule-2);
  border-radius:var(--r-sm);background:var(--paper);font:inherit;font-size:15px;font-weight:600}
.inviterow .tick{flex:0 1 auto;min-height:52px;padding:0 22px}
.invitebox{display:none;background:var(--paper);border:1px solid var(--rule);
  border-radius:var(--r);box-shadow:var(--shadow);padding:18px;margin-bottom:8px}
.invitebox[data-on="1"]{display:block;animation:qrin 200ms var(--out)}
.invitebox b{font-size:15px}
.invurl{margin-top:8px;padding:10px 12px;background:var(--shell);border:1px solid var(--rule);
  border-radius:var(--r-sm);font-size:13.5px;color:var(--ink-2);overflow-wrap:anywhere;user-select:all}
.plist{background:var(--paper);border:1px solid var(--rule);border-radius:var(--r);
  overflow:hidden;max-width:760px}
.prow{cursor:default}
.prow .nm b{font-size:16px}
.prow.gone .nm{opacity:.5}
.prow-act{flex:0 0 auto;height:40px;padding:0 14px;border-radius:var(--r-sm);
  border:1px solid var(--rule-2);background:var(--paper);font-size:14px;font-weight:650;
  transition:transform 140ms var(--out),background 140ms ease}
.prow-act:active{transform:scale(.97);background:var(--sunk)}
.prow-act.warn{color:var(--signal-ink)}
.dangerrow{margin-top:26px;padding-top:18px;border-top:1px solid var(--rule);
  display:flex;align-items:center;gap:14px;flex-wrap:wrap;max-width:760px}
.dangerrow .sub{margin:0;flex:1 1 240px}
.killlinks{min-height:46px;padding:0 18px;border-radius:var(--r-sm);
  border:1.5px solid var(--signal);color:var(--signal-ink);font-size:14.5px;font-weight:650;
  transition:transform 140ms var(--out),background 140ms ease}
.killlinks:active{transform:scale(.975);background:var(--signal-wash)}

/* Reduced motion: keep the fades that explain state, drop everything that moves. */
@media (prefers-reduced-motion:reduce){
  .press:active,.start:active,.rec .fin:active,.grab .chip:active,
  .nudge button:active,.undo:active,.sheet .save:active,.sheet .kill:active,
  .tick:active,.bchip:active,.bulk:active,.sharerow button:active,.sharerow a:active{transform:none}
  .dot.pulse{animation:none}
  .qrbox[data-on="1"]{animation:none}
  .sheet{transition:opacity 160ms ease;transform:none;opacity:0}
  .sheet[data-on="1"]{transform:none;opacity:1}
}
