/* base.css — the components, palette-agnostic. Reads tokens.css only.
   Screens: .bar (sticky top) > main > .screen[hidden] ... > .sheet, .pop.
   Lifted from belt-scanner-nasdaq/static/app.css 2026-09-02. */
*{box-sizing:border-box}
[hidden]{display:none!important}           /* attribute beats any display rule below */
html,body{margin:0;background:var(--paper);color:var(--ink)}
body{font-family:var(--ui);font-size:16px;line-height:1.5;
  -webkit-font-smoothing:antialiased;padding-bottom:env(safe-area-inset-bottom)}
button{font:inherit;color:inherit;background:none;border:0;cursor:pointer}
:focus-visible{outline:2px solid var(--accent);outline-offset:3px;border-radius:6px}
@media (prefers-reduced-motion:reduce){*{animation:none!important;transition:none!important}}

/* ── top bar: back · brand · crumb · freshness ───────────── */
.bar{position:sticky;top:0;z-index:20;display:flex;align-items:center;gap:10px;
  padding:calc(10px + env(safe-area-inset-top)) max(var(--pad),(100vw - var(--max))/2) 10px;
  background:color-mix(in srgb,var(--paper) 88%,transparent);
  backdrop-filter:saturate(1.6) blur(12px);border-bottom:1px solid var(--line)}
.back{display:grid;place-items:center;width:32px;height:32px;margin-left:-6px;
  border-radius:9px;color:var(--muted)}
.back:hover{background:var(--line-2);color:var(--ink)}
.brand{display:flex;align-items:center;gap:8px;font-family:var(--display);
  font-weight:700;letter-spacing:-.02em;font-size:17px}
.logo{color:var(--accent);fill:var(--accent);flex:none}
.crumb{font-size:13px;color:var(--muted);font-weight:500;
  overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.freshness{margin-left:auto;display:flex;align-items:center;gap:6px;flex:none;
  font-family:var(--mono);font-size:11px;color:var(--muted);
  padding:5px 9px;border:1px solid var(--line);border-radius:999px;background:var(--card)}
.freshness:hover{border-color:var(--faint)}
.dot{width:6px;height:6px;border-radius:50%;background:var(--faint);flex:none}
.dot.fresh{background:var(--rise)} .dot.stale{background:var(--warn)}
.dot.busy{background:var(--accent);animation:pulse 1.1s ease-in-out infinite}
@keyframes pulse{0%,100%{opacity:1}50%{opacity:.25}}

/* ── screens: one question each ──────────────────────────── */
main{max-width:var(--max);margin:0 auto;padding:8px var(--pad) 72px}
.screen{animation:rise .28s cubic-bezier(.2,.7,.3,1) both}
.screen.narrow{max-width:620px}            /* question screens: the choice is the whole view */
@keyframes rise{from{opacity:0;transform:translateY(10px)}to{opacity:1;transform:none}}
.ask{font-family:var(--display);font-weight:700;font-size:clamp(30px,7.5vw,44px);
  line-height:1.06;letter-spacing:-.032em;margin:28px 0 10px}
.sub{color:var(--muted);margin:0 0 26px;max-width:46ch;font-size:15px}

/* ── choice card: glyph · name+note · count ──────────────── */
.choices{display:grid;gap:14px}
.choice{position:relative;display:grid;
  grid-template-columns:auto 1fr auto;grid-template-areas:"g n c" "g s c";
  gap:2px 18px;align-items:center;padding:22px;background:var(--card);
  border:1px solid var(--line);border-radius:var(--radius-lg);box-shadow:var(--shadow);
  text-align:left;transition:transform .16s,border-color .16s}
.choice:hover{transform:translateY(-2px)} .choice:active{transform:translateY(0)}
.choice .glyph{grid-area:g;width:92px;height:52px;flex:none}
/* glyphs take the card's colour: strokes and dots are currentColor */
.glyph .beltline{stroke:currentColor;stroke-width:2.5;fill:none;stroke-linecap:round}
.glyph circle{fill:currentColor}
.glyph rect{fill:currentColor}
.choice.rise{color:var(--rise)} .choice.rise:hover{border-color:var(--rise)}
.choice.fall{color:var(--fall)} .choice.fall:hover{border-color:var(--fall)}
.choice.plain{color:var(--accent)} .choice.plain:hover{border-color:var(--accent)}
.choice-name{grid-area:n;font-family:var(--display);font-weight:700;font-size:23px;
  letter-spacing:-.02em;color:var(--ink);align-self:end}
.choice-note{grid-area:s;font-size:13.5px;color:var(--muted);align-self:start}
.choice-count{grid-area:c;font-family:var(--mono);font-size:22px;color:var(--ink);font-weight:500}

/* ── option row: name+hint · count · chevron ─────────────── */
.rows{display:grid;gap:8px}
.row{display:grid;grid-template-columns:1fr auto auto;align-items:center;gap:14px;
  padding:16px 18px;background:var(--card);border:1px solid var(--line);
  border-radius:var(--radius);text-align:left;transition:border-color .16s,transform .16s}
.row:hover{border-color:var(--accent);transform:translateX(3px)}
.row-name{font-weight:600;font-size:17px;letter-spacing:-.01em}
.row-hint{font-size:13px;color:var(--faint);font-weight:400}
.row-n{font-family:var(--mono);font-size:15px;color:var(--muted)}
.row-n.zero{color:var(--faint);opacity:.5}
.chev{color:var(--faint);width:16px;height:16px}

/* ── result card: glyph · id+price · chip+metric ─────────── */
.cards{display:grid;gap:10px}
@media (min-width:720px){.cards{grid-template-columns:1fr 1fr}}
.card{display:grid;grid-template-columns:auto 1fr auto;align-items:center;gap:16px;
  padding:15px 17px;background:var(--card);border:1px solid var(--line);
  border-radius:var(--radius);text-align:left;transition:border-color .16s,transform .16s}
.card:hover{border-color:var(--accent);transform:translateY(-2px)}
.card .glyph{width:64px;height:34px;flex:none}
.tick{font-family:var(--mono);font-weight:500;font-size:16px;letter-spacing:-.01em}
.price{font-family:var(--mono);font-size:13px;color:var(--muted)}
.shape{font-size:12px;color:var(--faint);margin-left:8px}
.card-right{text-align:right;display:grid;gap:4px;justify-items:end}
.chip{font-size:11px;font-weight:500;padding:2px 8px;border-radius:999px;
  letter-spacing:.01em;white-space:nowrap}
.chip.now{background:var(--accent-soft);color:var(--accent)}
.chip.done{background:var(--rise-soft);color:var(--rise)}
.chip.off{background:var(--fall-soft);color:var(--fall)}
.chip.quiet{background:var(--line-2);color:var(--muted)}
.metric{font-family:var(--mono);font-size:12px;color:var(--faint)}
.metric b{font-weight:500;color:var(--muted)}
.empty{color:var(--muted);text-align:center;padding:44px 0}
.more{display:grid;gap:10px;margin-top:26px;justify-items:start}
.link{font-size:14px;color:var(--muted);text-decoration:underline;
  text-underline-offset:3px;text-decoration-color:var(--line)}
.link:hover{color:var(--accent);text-decoration-color:currentColor}

/* ── notice: why it is loading and how long ──────────────── */
.notice{display:flex;align-items:center;gap:10px;margin:22px 0 -8px;padding:13px 16px;
  background:var(--accent-soft);color:var(--accent);border-radius:12px;font-size:14px}
.spin{width:14px;height:14px;border:2px solid currentColor;border-right-color:transparent;
  border-radius:50%;flex:none;animation:spin .8s linear infinite}
@keyframes spin{to{transform:rotate(360deg)}}
@media (prefers-reduced-motion:reduce){.spin{animation:none;opacity:.5}}

/* ── sheet: bottom on phone, centred on desktop ──────────── */
.sheet,.pop{position:fixed;inset:0;z-index:40}
.sheet-scrim,.pop-scrim{position:absolute;inset:0;background:var(--scrim);animation:fade .2s both}
@keyframes fade{from{opacity:0}to{opacity:1}}
.sheet-body{position:absolute;left:0;right:0;bottom:0;max-height:92vh;overflow:auto;
  background:var(--card);border-radius:22px 22px 0 0;
  padding:8px var(--pad) calc(24px + env(safe-area-inset-bottom));
  animation:up .3s cubic-bezier(.2,.8,.3,1) both}
@keyframes up{from{transform:translateY(24px);opacity:.4}to{transform:none;opacity:1}}
@media (min-width:720px){
  .sheet-body{left:50%;right:auto;bottom:auto;top:50%;width:min(680px,94vw);
    transform:translate(-50%,-50%);border-radius:20px;animation:pop .24s ease both}
  @keyframes pop{from{opacity:0;transform:translate(-50%,-48%) scale(.98)}
                 to{opacity:1;transform:translate(-50%,-50%) scale(1)}}
  .sheet-grip{display:none}
}
.sheet-grip{width:38px;height:4px;border-radius:2px;background:var(--line);margin:6px auto 10px}
.sheet-head{display:flex;align-items:flex-start;gap:12px;padding-bottom:12px}
.sheet-tick{font-family:var(--display);font-weight:700;font-size:26px;letter-spacing:-.025em}
.sheet-meta{font-size:13.5px;color:var(--muted);margin-top:2px}
.close{margin-left:auto;display:grid;place-items:center;width:34px;height:34px;
  border-radius:10px;color:var(--muted);flex:none}
.close:hover{background:var(--line-2);color:var(--ink)}
.chart{height:min(320px,42vh);border:1px solid var(--line);border-radius:12px;
  overflow:hidden;background:var(--card)}
.facts{display:grid;grid-template-columns:auto 1fr;gap:9px 18px;margin:18px 0 0;font-size:14px}
.facts dt{color:var(--faint);font-size:13px}
.facts dd{margin:0;font-family:var(--mono);font-size:13.5px}
.facts dd.plain{font-family:var(--ui);font-size:14px}

/* ── popover under the freshness pill ────────────────────── */
.pop-body{position:absolute;top:calc(56px + env(safe-area-inset-top));right:var(--pad);
  width:min(340px,calc(100vw - 2*var(--pad)));background:var(--card);
  border:1px solid var(--line);border-radius:16px;padding:18px;box-shadow:var(--shadow);
  animation:rise .2s both}
.pop-body h2{font-family:var(--display);font-size:17px;margin:0 0 12px;font-weight:700}
.primary{width:100%;margin-top:16px;padding:11px;background:var(--accent);color:#fff;
  border-radius:11px;font-weight:600;font-size:15px}
.primary:hover{filter:brightness(1.08)} .primary:disabled{opacity:.5;cursor:default}
.fineprint{font-size:12px;color:var(--faint);margin:12px 0 0;line-height:1.45}
.star{width:13px;height:13px;margin-left:5px;fill:var(--warn);vertical-align:-1px}
