/* ---- tokens ------------------------------------------------ */
:root{
  --bg:#0f1720; --bg-2:#16212d; --surface:#1a2735; --surface-2:#22303f;
  --line:#2c3d4f; --text:#e8eef4; --muted:#93a4b6;
  --accent:#4dd4c0; --accent-ink:#07231f;
  --good:#4ade80; --good-bg:#123324; --bad:#f87171; --bad-bg:#3a1a1c;
  --radius:16px; --radius-sm:10px;
  --pad:clamp(16px,4vw,24px);
  --font:-apple-system,BlinkMacSystemFont,"Segoe UI",Roboto,"Helvetica Neue",Arial,sans-serif;
  --mono:ui-monospace,SFMono-Regular,"SF Mono",Menlo,Consolas,"Liberation Mono",monospace;
}
:root[data-theme="light"]{
  --bg:#f4f7fa; --bg-2:#ffffff; --surface:#ffffff; --surface-2:#eef3f8;
  --line:#d8e2ec; --text:#12202e; --muted:#5b7085;
  --accent:#0f9e8b; --accent-ink:#ffffff;
  --good:#15803d; --good-bg:#e4f7ea; --bad:#c02626; --bad-bg:#fdeaea;
}

/* The hidden attribute must beat component display rules (.icon-btn is grid). */
[hidden]{display:none !important}

*{box-sizing:border-box;-webkit-tap-highlight-color:transparent}
html,body{height:100%}
body{
  margin:0;background:var(--bg);color:var(--text);font-family:var(--font);
  font-size:16px;line-height:1.5;overscroll-behavior-y:none;
  -webkit-font-smoothing:antialiased;
}
button{font:inherit;color:inherit;border:0;background:none;cursor:pointer}

#app{
  min-height:100dvh;display:flex;flex-direction:column;
  padding-bottom:env(safe-area-inset-bottom);
}

/* ---- topbar ------------------------------------------------ */
#topbar{
  position:sticky;top:0;z-index:20;display:flex;align-items:center;gap:10px;
  padding:10px var(--pad);background:var(--bg);
  border-bottom:1px solid var(--line);
  padding-top:calc(10px + env(safe-area-inset-top));
}
#topbar-title{font-weight:650;letter-spacing:-.01em;flex:1;min-width:0;
  overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
#topbar-meta{font-size:13px;color:var(--muted);font-variant-numeric:tabular-nums}
.icon-btn{
  width:40px;height:40px;flex:none;border-radius:12px;display:grid;place-items:center;
  font-size:18px;color:var(--muted);background:var(--surface);border:1px solid var(--line);
}
.icon-btn:active{background:var(--surface-2)}

/* ---- screens ----------------------------------------------- */
.screen{display:none;flex:1;min-height:0;flex-direction:column}
.screen.active{display:flex}
.wrap{
  width:100%;max-width:640px;margin:0 auto;padding:var(--pad);
  padding-bottom:calc(var(--pad) + 32px);flex:1;overflow-y:auto;
  -webkit-overflow-scrolling:touch;
}
.hero{font-size:clamp(28px,7vw,38px);line-height:1.15;letter-spacing:-.02em;
  font-weight:700;margin:12px 0 24px}
.h2{font-size:24px;letter-spacing:-.01em;margin:8px 0 4px}
.h3{font-size:15px;margin:28px 0 12px;color:var(--muted);font-weight:600;
  text-transform:uppercase;letter-spacing:.06em}
.muted{color:var(--muted);font-size:15px;margin:0 0 20px}
.foot-note{color:var(--muted);font-size:13px;margin-top:28px;text-align:center}

/* ---- pack cards -------------------------------------------- */
.pack-list{display:flex;flex-direction:column;gap:12px}
.pack-card{
  display:block;width:100%;text-align:left;background:var(--surface);
  border:1px solid var(--line);border-radius:var(--radius);padding:18px;
}
.pack-card:active{transform:scale(.985)}
.pack-card .pc-title{font-size:18px;font-weight:650;letter-spacing:-.01em}
.pack-card .pc-sub{color:var(--muted);font-size:14px;margin-top:4px}
.pack-card .pc-bar{height:6px;border-radius:99px;background:var(--surface-2);
  margin-top:14px;overflow:hidden}
.pack-card .pc-bar>i{display:block;height:100%;background:var(--accent);border-radius:99px}
.pack-card .pc-pct{font-size:12px;color:var(--muted);margin-top:6px;
  font-variant-numeric:tabular-nums}

/* ---- menu -------------------------------------------------- */
.menu{display:flex;flex-direction:column;gap:10px;margin:20px 0}
.menu-item{
  text-align:left;background:var(--surface);border:1px solid var(--line);
  border-radius:var(--radius);padding:16px 18px;display:block;width:100%;
}
.menu-item:active{background:var(--surface-2)}
.menu-item.primary{border-color:var(--accent);
  background:color-mix(in srgb,var(--accent) 12%,var(--surface))}
.mi-title{display:block;font-weight:650;font-size:17px}
.mi-sub{display:block;color:var(--muted);font-size:13.5px;margin-top:2px}
.menu-item[disabled]{opacity:.45}

.linkbtn{color:var(--muted);font-size:14px;text-decoration:underline;
  padding:12px 0;display:block;margin:0 auto}
.linkbtn.danger{color:var(--bad)}

/* ---- stat row ---------------------------------------------- */
.statrow{display:grid;grid-template-columns:repeat(3,1fr);gap:8px;margin:16px 0}
.stat{background:var(--surface);border:1px solid var(--line);
  border-radius:var(--radius-sm);padding:12px 10px;text-align:center}
.stat b{display:block;font-size:21px;font-variant-numeric:tabular-nums;
  letter-spacing:-.02em}
.stat span{display:block;font-size:11px;color:var(--muted);margin-top:2px;
  text-transform:uppercase;letter-spacing:.05em}

/* ---- chips ------------------------------------------------- */
.chipset{display:flex;flex-wrap:wrap;gap:8px;margin:8px 0 24px}
.chip{padding:10px 16px;border-radius:99px;border:1px solid var(--line);
  background:var(--surface);font-size:15px;font-weight:550}
.chip[aria-pressed="true"]{background:var(--accent);color:var(--accent-ink);
  border-color:var(--accent)}

/* ---- card ---------------------------------------------------
   The card sits in normal flow and the .wrap scrolls, so a long
   question is always reachable on a short screen. The flip is a
   half-turn, content swap, half-turn back on a single face. */
.progressbar{height:3px;background:var(--surface-2);flex:none}
.progressbar>div{height:100%;background:var(--accent);width:0;
  transition:width .3s ease}
.stage{perspective:1400px}
.card{
  background:var(--surface);border:1px solid var(--line);
  border-radius:var(--radius);padding:20px 18px;
  transition:transform .2s ease;transform:rotateY(0deg);
  transform-origin:center;
}
.card.flipping{transform:rotateY(90deg)}
.stage .bigbtn{margin-top:16px}

.code{
  font-family:var(--mono);font-size:12.5px;line-height:1.55;background:var(--bg-2);
  border:1px solid var(--line);border-radius:var(--radius-sm);padding:12px;
  overflow-x:auto;white-space:pre;margin:0 0 14px;color:var(--text);
}
.q-text{font-size:17px;line-height:1.45;font-weight:550;letter-spacing:-.005em;
  margin-bottom:16px}

/* ---- choices ----------------------------------------------- */
.choices{display:flex;flex-direction:column;gap:8px}
.choice{
  display:flex;gap:11px;align-items:flex-start;text-align:left;width:100%;
  background:var(--bg-2);border:1.5px solid var(--line);border-radius:var(--radius-sm);
  padding:13px 14px;font-size:15px;line-height:1.4;transition:border-color .15s,background .15s;
}
.choice:active{background:var(--surface-2)}
.choice .ltr{
  flex:none;width:22px;height:22px;border-radius:6px;background:var(--surface-2);
  color:var(--muted);font-size:12px;font-weight:700;display:grid;place-items:center;
  margin-top:1px;
}
.choice[aria-pressed="true"]{border-color:var(--accent);
  background:color-mix(in srgb,var(--accent) 10%,var(--bg-2))}
.choice[aria-pressed="true"] .ltr{background:var(--accent);color:var(--accent-ink)}
.choice.is-correct{border-color:var(--good);background:var(--good-bg)}
.choice.is-correct .ltr{background:var(--good);color:#fff}
.choice.is-wrong{border-color:var(--bad);background:var(--bad-bg)}
.choice.is-wrong .ltr{background:var(--bad);color:#fff}
.choices.locked .choice{pointer-events:none}

/* ---- back of card ------------------------------------------ */
.verdict{font-size:19px;font-weight:700;margin-bottom:16px;letter-spacing:-.01em}
.verdict.good{color:var(--good)}
.verdict.bad{color:var(--bad)}
.answer-label{font-size:11px;text-transform:uppercase;letter-spacing:.08em;
  color:var(--muted);font-weight:650;margin:16px 0 6px}
.answer-label:first-of-type{margin-top:0}
.a-text{font-size:16px;font-weight:600;line-height:1.4;
  padding:12px 14px;border-radius:var(--radius-sm);
  background:var(--good-bg);border:1px solid color-mix(in srgb,var(--good) 40%,transparent)}
.a-text div+div{margin-top:6px}
.a-explain{font-size:15px;line-height:1.55;color:var(--text)}
.a-yours{font-size:14px;color:var(--muted);margin-top:16px;padding-top:14px;
  border-top:1px solid var(--line)}

/* ---- buttons ----------------------------------------------- */
.bigbtn{
  width:100%;background:var(--accent);color:var(--accent-ink);font-weight:700;
  font-size:16.5px;padding:16px;border-radius:14px;letter-spacing:-.01em;
}
.bigbtn:active{filter:brightness(.92)}
.bigbtn[disabled]{opacity:.35;pointer-events:none}
.counter{text-align:center;font-size:13px;color:var(--muted);
  margin-top:12px;font-variant-numeric:tabular-nums}

/* ---- scope bar ---------------------------------------------- */
.scopebar{
  display:flex;align-items:center;gap:10px;width:100%;text-align:left;
  background:var(--surface);border:1px solid var(--line);
  border-radius:var(--radius);padding:14px 16px;margin-top:4px;
}
.scopebar:active{background:var(--surface-2)}
.sb-label{font-size:11px;text-transform:uppercase;letter-spacing:.07em;
  color:var(--muted);font-weight:650;flex:none}
.sb-value{flex:1;min-width:0;font-weight:600;font-size:15px;
  overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.sb-chev{color:var(--muted);font-size:20px;flex:none;line-height:1}
.scopenote{font-size:14px;color:var(--muted);margin-bottom:16px}
.scopenote b{color:var(--text);font-weight:600}

/* ---- results ----------------------------------------------- */
.scorewrap{text-align:center;margin:20px 0 28px}
.ring{
  width:150px;height:150px;border-radius:50%;margin:0 auto 16px;display:grid;
  place-items:center;font-size:36px;font-weight:700;letter-spacing:-.03em;
  font-variant-numeric:tabular-nums;
  background:conic-gradient(var(--accent) calc(var(--pct) * 1%),var(--surface-2) 0);
  position:relative;
}
.ring::after{content:"";position:absolute;inset:12px;border-radius:50%;background:var(--bg)}
.ring>span{position:relative;z-index:1}

.breakdown{display:flex;flex-direction:column;gap:8px}
.brow{display:flex;align-items:center;gap:12px;background:var(--surface);
  border:1px solid var(--line);border-radius:var(--radius-sm);padding:12px 14px}
.brow .bn{flex:1;min-width:0;font-size:14.5px;overflow:hidden;
  text-overflow:ellipsis;white-space:nowrap}
.brow .bbar{flex:none;width:64px;height:6px;border-radius:99px;
  background:var(--surface-2);overflow:hidden}
.brow .bbar>i{display:block;height:100%;background:var(--accent)}
.brow .bv{flex:none;font-size:13px;color:var(--muted);width:60px;text-align:right;
  font-variant-numeric:tabular-nums}

.review{display:flex;flex-direction:column;gap:8px}
.rev{background:var(--surface);border:1px solid var(--line);
  border-radius:var(--radius-sm);overflow:hidden}
.rev>summary{padding:13px 14px;font-size:14.5px;line-height:1.4;cursor:pointer;
  display:flex;gap:10px;align-items:flex-start;list-style:none}
.rev>summary::-webkit-details-marker{display:none}
.rev .mark{flex:none;width:20px;height:20px;border-radius:6px;display:grid;
  place-items:center;font-size:12px;font-weight:700;color:#fff;margin-top:1px}
.rev.ok .mark{background:var(--good)}
.rev.no .mark{background:var(--bad)}
.rev .body{padding:12px 14px 14px;font-size:14px;line-height:1.55;color:var(--muted);
  border-top:1px solid var(--line)}
.rev .body b{color:var(--text);font-weight:600}
.rev-why{margin-top:8px}
.rev .body .code{font-size:11.5px;margin-bottom:10px}

.loading{position:fixed;inset:0;display:grid;place-items:center;background:var(--bg);
  color:var(--muted);z-index:50}
.loading.hidden{display:none}
.empty{text-align:center;color:var(--muted);padding:40px 20px;font-size:15px}

@media (min-width:700px){
  .card{padding:26px 24px}
}
@media (prefers-reduced-motion:reduce){
  .card{transition:none}
}
