:root{
  --ink:#080c12;
  --ink-2:#111823;
  --line:rgba(255,255,255,.10);
  --line-2:rgba(255,255,255,.18);
  --txt:#eef2f7;
  --dim:#8ea0b8;
  --amber:#ffb43a;
  --ok:#22b573;
  --ok-ink:#04231a;
  --no:#e5484d;
  --no-ink:#2a0508;
  --card:#eef2f7;
  --r:15px;
}

*{box-sizing:border-box}
html,body{height:100%}
body{
  margin:0;
  background:
    radial-gradient(120% 70% at 50% -10%, #1b2740 0%, rgba(27,39,64,0) 62%),
    radial-gradient(90% 60% at 50% 115%, #17202e 0%, rgba(23,32,46,0) 60%),
    var(--ink);
  color:var(--txt);
  font:400 16px/1.35 ui-sans-serif,system-ui,-apple-system,"Segoe UI",Roboto,"Helvetica Neue",Arial,sans-serif;
  overflow:hidden;
  overscroll-behavior:none;
  -webkit-tap-highlight-color:transparent;
  -webkit-text-size-adjust:100%;
  user-select:none;
}

#app{
  height:100vh; height:100dvh;
  display:grid;
  grid-template-rows:auto auto minmax(0,1fr);
  padding:calc(env(safe-area-inset-top,0px) + 8px) calc(env(safe-area-inset-right,0px) + 10px)
          calc(env(safe-area-inset-bottom,0px) + 10px) calc(env(safe-area-inset-left,0px) + 10px);
  gap:8px;
  max-width:1120px;
  margin:0 auto;
}

/* ---------- head-up display ---------- */
#hud{display:flex;align-items:center;gap:6px}
.stat{
  display:flex;flex-direction:column;justify-content:center;
  background:var(--ink-2);
  border:1px solid var(--line);
  border-radius:12px;
  padding:5px 12px 6px;
  min-width:0;
}
.stat.end{margin-left:auto}
.stat .k{
  font-size:9px;letter-spacing:.11em;text-transform:uppercase;
  color:var(--dim);font-weight:600;white-space:nowrap;
}
.stat .v{
  font-size:19px;font-weight:750;letter-spacing:-.01em;line-height:1.1;
  font-variant-numeric:tabular-nums;
}
#v-score{color:var(--amber)}
#s-streak .v{color:var(--txt)}
#s-streak.hot .v{color:var(--ok)}
#s-streak.hot{border-color:rgba(34,181,115,.45)}

#mute{
  flex:0 0 auto;width:42px;height:42px;padding:0;
  display:grid;place-items:center;
  background:var(--ink-2);border:1px solid var(--line);border-radius:12px;
  color:var(--dim);cursor:pointer;
}
#mute svg{width:22px;height:22px;fill:none;stroke:currentColor;stroke-width:1.9;stroke-linecap:round;stroke-linejoin:round}
#mute svg .sp{fill:currentColor;stroke:none}
#mute svg .off{display:none}
#mute[aria-pressed="true"] svg .wv{display:none}
#mute[aria-pressed="true"] svg .off{display:block}
#mute:hover{border-color:var(--line-2);color:var(--txt)}

#bar{height:4px;border-radius:99px;background:rgba(255,255,255,.07);overflow:hidden}
#fill{display:block;height:100%;width:0;border-radius:99px;background:var(--amber);transition:width .28s ease}

/* ---------- play area ---------- */
#play{display:grid;grid-template-rows:minmax(0,1fr) auto;gap:9px;min-height:0}

#stage{position:relative;min-height:0}
/* The card is sized in JS to hug whichever flag is showing, so the flag is the
   biggest thing on screen instead of being lost in a fixed panel. */
#frame{
  position:absolute;left:50%;top:50%;transform:translate(-50%,-50%);
  background:var(--card);
  border-radius:clamp(10px,2.6vmin,18px);
  display:flex;align-items:center;justify-content:center;
  padding:clamp(9px,2.6vmin,20px);
  box-shadow:inset 0 0 0 1px rgba(0,0,0,.10), 0 12px 30px rgba(0,0,0,.38);
  opacity:0;                 /* sized to the flag before it is shown at all */
}
#frame.ready{opacity:1;transition:opacity .1s ease}
#flag{
  display:block;
  max-width:100%;max-height:100%;
  border-radius:2px;
  box-shadow:0 0 0 1px rgba(6,10,16,.30), 0 3px 12px rgba(6,10,16,.30);
  opacity:0;transition:opacity .16s ease;
}
#flag.in{opacity:1}

#side{display:flex;flex-direction:column;gap:7px;min-height:0}

#verdict{
  margin:0;
  min-height:26px;
  font-size:14.5px;font-weight:650;letter-spacing:.005em;
  line-height:26px;
  color:var(--dim);
  text-align:center;
}
#verdict.ok{color:var(--ok)}
#verdict.no{color:var(--no)}
#verdict b{font-weight:800;color:var(--txt)}
#verdict.no b{color:#ff9a9d}

#opts{display:grid;grid-template-columns:1fr;gap:8px}

.opt{
  position:relative;
  min-height:56px;
  padding:9px 14px;
  display:flex;align-items:center;justify-content:center;gap:9px;
  background:var(--ink-2);
  border:1px solid var(--line-2);
  border-radius:var(--r);
  color:var(--txt);
  font:inherit;font-size:16.5px;font-weight:600;letter-spacing:-.005em;
  text-align:center;
  cursor:pointer;
  transition:background .12s ease,border-color .12s ease,transform .08s ease,color .12s ease;
  touch-action:manipulation;
}
.opt:hover:not(:disabled){background:#18202e;border-color:rgba(255,255,255,.30)}
.opt:active:not(:disabled){transform:scale(.985)}
.opt:focus-visible{outline:2px solid var(--amber);outline-offset:2px}
.opt:disabled{cursor:default}

.opt .tick{
  position:absolute;left:12px;top:50%;transform:translateY(-50%);
  font-size:16px;font-weight:800;opacity:0;transition:opacity .1s ease;
}
.opt.is-right{
  background:var(--ok);border-color:var(--ok);color:var(--ok-ink);
  animation:pop .22s ease;
}
.opt.is-right .tick{opacity:1}
.opt.is-wrong{
  background:var(--no);border-color:var(--no);color:var(--no-ink);
  animation:shake .26s ease;
}
.opt.is-wrong .tick{opacity:1}
.opt.mute{opacity:.42}
@keyframes pop{0%{transform:scale(.97)}60%{transform:scale(1.022)}100%{transform:scale(1)}}
@keyframes shake{0%,100%{transform:translateX(0)}22%{transform:translateX(-5px)}55%{transform:translateX(4px)}80%{transform:translateX(-2px)}}

/* ---------- end of run ---------- */
#over{
  position:fixed;inset:0;z-index:9;
  display:grid;place-items:center;
  padding:16px;
  background:rgba(5,8,13,.80);
  backdrop-filter:blur(7px);
  animation:fade .22s ease;
  overflow:auto;
}
@keyframes fade{from{opacity:0}to{opacity:1}}
#over[hidden]{display:none}
#card{
  width:100%;max-width:380px;
  background:linear-gradient(#161f2d,#111823);
  border:1px solid var(--line-2);
  border-radius:22px;
  padding:22px 20px 20px;
  text-align:center;
  box-shadow:0 22px 60px rgba(0,0,0,.55);
  animation:rise .26s cubic-bezier(.2,.9,.3,1.2);
}
@keyframes rise{from{transform:translateY(14px) scale(.97);opacity:0}to{transform:none;opacity:1}}
.eyebrow{
  margin:0 0 6px;font-size:10px;font-weight:700;letter-spacing:.16em;
  text-transform:uppercase;color:var(--dim);
}
#over h1{
  margin:0 0 14px;font-size:27px;line-height:1.15;font-weight:800;letter-spacing:-.02em;
}
#over h1 .hi{color:var(--amber)}
.tally{display:grid;grid-template-columns:1fr 1fr;gap:9px;margin-bottom:14px}
.tally .cell{
  background:rgba(255,255,255,.045);border:1px solid var(--line);
  border-radius:13px;padding:9px 6px 10px;
}
.tally .n{display:block;font-size:22px;font-weight:750;font-variant-numeric:tabular-nums}
.tally .l{display:block;font-size:10px;letter-spacing:.1em;text-transform:uppercase;color:var(--dim);font-weight:600;margin-top:2px}
#over-note{margin:0 0 15px;font-size:13.5px;color:var(--dim);min-height:19px}
#again{
  width:100%;min-height:56px;
  background:var(--amber);border:0;border-radius:var(--r);
  color:#241503;font:inherit;font-size:17.5px;font-weight:800;letter-spacing:-.01em;
  cursor:pointer;
  transition:filter .12s ease,transform .08s ease;
  touch-action:manipulation;
}
#again:hover{filter:brightness(1.07)}
#again:active{transform:scale(.985)}
#board{margin-top:16px;text-align:left}
#board-list{
  margin:0;padding:0;list-style:none;
  display:flex;flex-direction:column;gap:3px;
}
#board-list li{
  display:flex;justify-content:space-between;gap:10px;
  font-size:13.5px;padding:5px 9px;border-radius:8px;
  font-variant-numeric:tabular-nums;
}
#board-list li.me{background:rgba(255,180,58,.12);color:var(--amber);font-weight:700}
#board-list .who{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}

/* ---------- landscape and desktop ---------- */
@media (min-aspect-ratio:5/4) and (min-width:560px){
  #play{grid-template-rows:minmax(0,1fr);grid-template-columns:minmax(0,1fr) minmax(280px,42%)}
  #side{justify-content:center}
  /* the answers share the column, but stop growing once they are already
     comfortably large, so a tall window does not get four skyscraper buttons */
  #opts{flex:1 1 auto;grid-auto-rows:1fr;max-height:340px}
  .opt{min-height:44px;font-size:16px}
  #verdict{min-height:22px;line-height:22px}
  #app{gap:10px}
  #over{place-items:center}
}

@media (min-width:900px){
  .opt{font-size:17.5px}
  #over h1{font-size:30px}
  /* a number key answers, so say which one */
  .opt::after{
    content:attr(data-i);
    position:absolute;right:15px;top:50%;transform:translateY(-50%);
    font-size:12px;font-weight:700;color:var(--dim);
    border:1px solid var(--line);border-radius:5px;padding:1px 6px;
  }
  .opt.is-right{color:var(--ok-ink)}
  .opt.is-right::after,.opt.is-wrong::after{color:inherit;border-color:rgba(0,0,0,.25)}
}

@media (max-height:430px){
  #hud .stat{padding:3px 10px 4px}
  #hud .stat .v{font-size:16px}
  #verdict{min-height:20px;line-height:20px;font-size:13px}
  .opt{min-height:40px;font-size:14.5px}
}

@media (prefers-reduced-motion:reduce){
  *{animation-duration:.01ms !important;transition-duration:.01ms !important}
}
