/* Story page, arcade edition (Oct 23): the real arcade, drawn live by its own engine, fills the screen behind the
   story; the text rides on the arcade's approved Liquid Glass (ui-intro-r001: clear glass, light rim, rainbow wave);
   an arcade HUD (1UP, HI, level, date, tokens) in a pixel face sits on top. No flashing faster than once a second;
   reduced motion (system or the arcade's own toggle) stills every animation and the camera only cuts. */
:root{
  --ink:#16121f;--ink2:#1d1729;--ink3:#271f36;--text:#f3eadf;--body:#ebe1d5;--dim:#c3b4a6;--faint:#94877c;
  --amber:#ffbe73;--rose:#f08aa0;--teal:#7fd6c4;--lav:#b8a8f0;--mint:#9fe0c8;--gold:#ffd23f;
  --line:rgba(255,236,214,.13);--line2:rgba(255,236,214,.24);
  --ui:ui-rounded,"SF Pro Rounded","Nunito","Segoe UI",system-ui,-apple-system,sans-serif;
  --mono:ui-monospace,"SF Mono","Cascadia Mono",Consolas,monospace;
  --pix:"Press Start 2P",ui-monospace,"Cascadia Mono",Consolas,monospace;
  --r:16px;--hud:78px;
  --glass:linear-gradient(155deg,rgba(255,255,255,.13),rgba(255,255,255,.045) 38%,rgba(255,255,255,.025) 62%,rgba(255,255,255,.07)),rgba(13,11,21,.66);
  --wave:linear-gradient(90deg,#b9aedb 0 38%,#ff3d8b 42%,#ffd23f 45.5%,#5dffc8 49%,#23e5ff 52.5%,#b48cff 56%,#b9aedb 60% 100%);
  color-scheme:dark;
}
*{box-sizing:border-box}
/* the glow halos behind the titles may reach past the screen edge: the page clips sideways at the viewport (on the
   root only; clipping inside the page stopped some lazy pictures from loading) */
html{-webkit-text-size-adjust:100%;scroll-padding-top:calc(var(--hud) + 12px);overflow-x:hidden}
body{margin:0;background:#0d0a14;color:var(--text);font:400 17px/1.6 var(--ui)}
img{max-width:100%;height:auto;display:block}
a{color:var(--amber)}
button{font:inherit;color:inherit}
:focus-visible{outline:3px solid var(--teal);outline-offset:3px}
.skip{position:absolute;left:-999px;top:8px;z-index:100;background:var(--amber);color:#2a1a10;padding:10px 14px;border-radius:10px;font-weight:800}
.skip:focus{left:12px}
.sr-only{position:absolute;width:1px;height:1px;overflow:hidden;clip:rect(0 0 0 0);white-space:nowrap}
html.nojs .js-only{display:none!important}

/* --------------------------------------------------------------- the stage: the arcade behind everything */
.stage{position:fixed;inset:0;z-index:0;background:#0d0a14;overflow:hidden}
.poster{position:absolute;inset:0;width:100%;height:100%;object-fit:cover;filter:saturate(1.05) brightness(.82);transition:opacity 1s ease}
#arcade{position:absolute;inset:0;width:100%;height:100%;display:block;opacity:0;transition:opacity .9s ease}
.stage.live #arcade{opacity:1}
.stage.live .poster{opacity:0}
.vignette{position:absolute;inset:0;pointer-events:none;background:
  radial-gradient(ellipse 120% 90% at 50% 46%,transparent 52%,rgba(7,5,13,.5) 100%),
  linear-gradient(180deg,rgba(7,5,13,.55) 0,rgba(7,5,13,0) 18%,rgba(7,5,13,0) 82%,rgba(7,5,13,.45) 100%)}
.scan{position:absolute;inset:0;pointer-events:none;opacity:.18;background:repeating-linear-gradient(180deg,rgba(0,0,0,.35) 0 1px,transparent 1px 3px);mix-blend-mode:multiply}
html.calm .scan{display:none}

/* --------------------------------------------------------------- HUD */
.hud{position:fixed;left:0;right:0;top:0;z-index:30;padding-top:env(safe-area-inset-top,0px);
  background:linear-gradient(180deg,rgba(9,7,16,.86),rgba(9,7,16,.62));-webkit-backdrop-filter:blur(10px) saturate(130%);backdrop-filter:blur(10px) saturate(130%);
  border-bottom:1px solid rgba(255,236,214,.08);box-shadow:0 8px 30px rgba(0,0,0,.25)}
.hud-in{display:flex;align-items:center;gap:12px;padding:8px max(14px,env(safe-area-inset-right,0px)) 6px max(14px,env(safe-area-inset-left,0px))}
.mark{font:900 17px/1 var(--mono);letter-spacing:.02em;text-decoration:none;display:flex;align-items:baseline;gap:2px;flex:none;min-height:40px;align-items:center}
.mark .k,.logo .k{color:#14c4b8;text-shadow:0 0 1px #d2fffb,0 0 5px #049e96,0 0 12px #06b3a9,0 0 26px #049e96}
.mark .v,.logo .v{color:#ffab73;text-shadow:0 0 1px #fff0e4,0 0 5px #f59a5e,0 0 12px #f08a4b,0 0 26px rgba(240,138,75,.8)}
.mark .p,.logo .plus{color:transparent;-webkit-background-clip:text;background-clip:text;background-size:200% 100%;animation:rainbowPass 3s linear infinite;
  background-image:linear-gradient(90deg,#ff3d6e,#ff8a2a 8.3%,#ffd23f 16.6%,#5dffc8 25%,#23e5ff 33.3%,#b48cff 41.6%,#ff3d6e 50%,#ff8a2a 58.3%,#ffd23f 66.6%,#5dffc8 75%,#23e5ff 83.3%,#b48cff 91.6%,#ff3d6e 100%)}
.hud-score{flex:1;display:flex;justify-content:center;align-items:baseline;gap:10px;font:11px/1 var(--pix);white-space:nowrap}
.hud-score .up{color:var(--rose);animation:blink 1s steps(1) infinite}
.hud-score .hi{color:var(--teal);margin-left:10px}
.hud-score b{font-weight:400;color:#fff;letter-spacing:.06em;text-shadow:0 0 10px rgba(255,255,255,.35)}
.hud-score #hi{color:var(--gold)}
.hud-r{display:flex;align-items:center;gap:8px;flex:none}
.hud-lvl{font:9px/1.3 var(--pix);color:var(--teal);text-shadow:0 0 10px rgba(127,214,196,.6);white-space:nowrap;max-width:28vw;overflow:hidden;text-overflow:ellipsis}
.pix-btn{font:9px/1 var(--pix);letter-spacing:.04em;min-height:36px;padding:0 10px;border-radius:9px;cursor:pointer;color:#f3eadf;white-space:nowrap;
  background:linear-gradient(180deg,rgba(255,255,255,.12),rgba(255,255,255,.04));border:0;box-shadow:inset 0 1px .5px rgba(255,255,255,.35),0 0 0 1px rgba(255,255,255,.12),0 2px 8px rgba(0,0,0,.3)}
.pix-btn[aria-pressed="true"]{color:var(--amber);box-shadow:inset 0 1px .5px rgba(255,255,255,.35),0 0 0 1px rgba(255,190,115,.7),0 0 16px rgba(255,190,115,.35)}
.pix-btn:disabled{opacity:.45;cursor:default}
@media (hover:hover){.pix-btn:not(:disabled):hover{background:linear-gradient(180deg,rgba(255,255,255,.2),rgba(255,255,255,.07))}}
.hud-bar{display:flex;align-items:center;gap:10px;padding:0 max(14px,env(safe-area-inset-right,0px)) 8px max(14px,env(safe-area-inset-left,0px));font:8px/1 var(--pix);color:var(--dim)}
.hud-date{color:var(--amber);min-width:72px}
.track{position:relative;flex:1;height:4px;border-radius:4px;background:rgba(255,255,255,.08);overflow:visible}
.track i{position:absolute;left:0;top:0;bottom:0;width:100%;border-radius:4px;transform-origin:0 50%;transform:scaleX(var(--p,0));
  background:linear-gradient(90deg,var(--lav),var(--amber) 30%,var(--rose) 50%,var(--teal) 72%,var(--gold));box-shadow:0 0 10px rgba(255,190,115,.45)}
.track .coin{position:absolute;top:50%;left:calc(var(--p,0) * 100%);width:12px;height:12px;margin:-6px 0 0 -6px;border-radius:50%;
  background:radial-gradient(circle at 35% 35%,#fff6c8,#ffd23f 45%,#c98a1c);box-shadow:0 0 0 1px #6b4a12,0 0 12px rgba(255,210,63,.8)}
.hud-tok{white-space:nowrap;min-width:110px;text-align:right}
.hud-tok b{font-weight:400;color:#fff}
@keyframes blink{50%{opacity:0}}
@keyframes rainbowPass{0%{background-position:100% 0}100%{background-position:0 0}}

/* --------------------------------------------------------------- scenes and glass panels */
main{position:relative;z-index:2}
.scene{position:relative;min-height:100vh;min-height:100svh;display:flex;align-items:center;padding:calc(var(--hud) + 34px) max(4vw,16px) 48px}
.scene.l{justify-content:flex-start}
.scene.r{justify-content:flex-end}
.scene.wide{justify-content:center}
.panel{position:relative;isolation:isolate;width:min(470px,100%);padding:26px 26px 22px;border-radius:28px;background:var(--glass);color:var(--body);
  -webkit-backdrop-filter:blur(20px) saturate(125%);backdrop-filter:blur(20px) saturate(125%);
  box-shadow:inset 0 1px .5px rgba(255,255,255,.45),inset 0 -1px .5px rgba(255,255,255,.1),inset 0 0 32px rgba(255,255,255,.04),0 26px 70px rgba(0,0,0,.45),0 2px 10px rgba(0,0,0,.2)}
.wide .panel{width:min(1100px,100%);padding:clamp(22px,3vw,40px)}
.panel::before{content:"";position:absolute;inset:0;z-index:-1;border-radius:inherit;padding:1.5px;pointer-events:none;
  background:linear-gradient(140deg,rgba(255,255,255,.7),rgba(255,226,190,.25) 16%,rgba(255,255,255,.06) 42%,rgba(255,255,255,.03) 62%,rgba(170,245,228,.24) 86%,rgba(255,255,255,.45));
  -webkit-mask:linear-gradient(#000 0 0) content-box,linear-gradient(#000 0 0);-webkit-mask-composite:xor;mask-composite:exclude}
@property --rim{syntax:'<angle>';inherits:false;initial-value:0deg}
.panel.on::before{background:conic-gradient(from var(--rim),rgba(185,174,219,.5) 0 70%,#ff3d8b 75%,#ffd23f 79%,#5dffc8 83%,#23e5ff 87%,#b48cff 91%,rgba(185,174,219,.5) 96% 100%);
  animation:rimRun 6s linear infinite;filter:drop-shadow(0 0 4px rgba(255,255,255,.25))}
@keyframes rimRun{to{--rim:360deg}}
.panel::after{content:"";position:absolute;inset:0;z-index:-1;border-radius:inherit;pointer-events:none;
  background:radial-gradient(130% 50% at 18% 0%,rgba(255,255,255,.1),transparent 60%),radial-gradient(90% 40% at 100% 100%,rgba(170,245,228,.05),transparent 70%)}
@supports not ((backdrop-filter:blur(1px)) or (-webkit-backdrop-filter:blur(1px))){.panel{background:rgba(20,17,30,.94)}}
.panel>*:first-child{margin-top:0}
.panel>*:last-child{margin-bottom:0}
.lvl{font:9.5px/1.6 var(--pix);letter-spacing:.06em;color:var(--c,var(--amber));text-shadow:0 0 12px color-mix(in srgb,var(--c,var(--amber)) 55%,transparent);margin:0 0 14px;text-transform:uppercase}
.lvl time{color:inherit}
h1,h2,h3,h4{color:var(--text);text-wrap:balance}
h2{font:900 clamp(28px,3.3vw,44px)/1.04 var(--mono);letter-spacing:-.015em;margin:0 0 14px}
h3{font:900 clamp(22px,2.2vw,29px)/1.1 var(--mono);letter-spacing:-.01em;margin:0 0 12px}
h4{font:900 19px/1.15 var(--mono);margin:0}
.panel p{margin:0 0 12px}
.lede{font-size:18.5px;color:var(--text)}
.aside{font:700 14px/1.5 var(--mono);color:var(--teal);border-left:2px solid var(--teal);padding-left:10px}
/* the Deep Sea note keeps its line while the room is live and fades in and out, so the story below it never jumps */
.world-note{display:none}
.stage.live~main .world-note{display:block;opacity:0;visibility:hidden;transition:opacity .5s ease,visibility .5s}
.stage.live~main .world-note.on{opacity:1;visibility:visible}
/* lines that talk about the live room show only while it is drawn (not without WebGL, JavaScript or with Save-Data) */
.live-only{display:none}
.stage.live~main .live-only{display:revert}
.hint{font:9px/1.7 var(--pix);color:var(--dim);margin-top:16px!important}
.hint .pix{color:var(--amber);display:inline-block;animation:bob 1.6s ease-in-out infinite}
@keyframes bob{50%{transform:translateY(3px)}}
.ask{font:600 14.5px/1.5 var(--mono);color:var(--amber)}
.note{color:var(--faint);font-size:14.5px}
.panel figure{margin:14px 0}
.panel figure>img{border-radius:12px;border:1px solid var(--line);width:100%}
.panel figcaption{color:var(--dim);font-size:13.5px;margin-top:6px}
.who{display:flex;flex-wrap:wrap;gap:6px;margin-top:14px!important}
.chip{font:700 11.5px/1 var(--mono);padding:6px 9px;border-radius:999px;color:var(--text);background:rgba(255,255,255,.07);box-shadow:inset 0 0 0 1px rgba(255,255,255,.13);white-space:nowrap}
.chip.fan{color:var(--rose)}
.chip.new{color:#2a1a10;background:var(--amber);box-shadow:none}
.fan-mini{font-size:13px;color:var(--faint)}
.btn{display:inline-flex;align-items:center;justify-content:center;gap:8px;min-height:46px;padding:0 20px;border-radius:999px;font:800 15.5px/1 var(--ui);text-decoration:none;cursor:pointer;border:0}
.btn.primary{color:#2a1608;background:linear-gradient(180deg,rgba(255,255,255,.38),rgba(255,255,255,0) 52%),linear-gradient(180deg,#ffd7a3,#ffb469 58%,#f7a052);
  box-shadow:inset 0 1px 1px rgba(255,255,255,.9),inset 0 -3px 8px rgba(190,90,20,.22),0 8px 24px rgba(255,160,80,.3),0 1px 3px rgba(120,60,10,.3)}
.btn.ghost{color:#f1e6da;background:linear-gradient(180deg,rgba(255,255,255,.12),rgba(255,255,255,.04));box-shadow:inset 0 1px .5px rgba(255,255,255,.32),0 0 0 1px rgba(255,255,255,.12)}
@media (hover:hover){.btn.primary:hover{filter:brightness(1.05)}.btn.ghost:hover{background:linear-gradient(180deg,rgba(255,255,255,.18),rgba(255,255,255,.07))}}
.btn:active{transform:scale(.98)}

/* --------------------------------------------------------------- title: attract mode */
.scene.title{flex-direction:column;justify-content:center;text-align:center;padding-top:calc(var(--hud) + 20px)}
.title-wrap{position:relative;display:flex;flex-direction:column;align-items:center;max-width:860px}
.title-wrap::before{content:"";position:absolute;z-index:-1;inset:-12% 0;pointer-events:none;
  background:radial-gradient(farthest-side,rgba(8,7,13,.82),rgba(8,7,13,.66) 52%,rgba(8,7,13,.2) 80%,transparent);
  -webkit-backdrop-filter:blur(8px);backdrop-filter:blur(8px);-webkit-mask-image:radial-gradient(farthest-side,#000 60%,transparent);mask-image:radial-gradient(farthest-side,#000 60%,transparent)}
.eyebrow{display:inline-flex;flex-wrap:wrap;justify-content:center;align-items:center;gap:.6em;margin:0 0 22px;padding:.5em 1em;border-radius:999px;
  font:800 12px/1.2 var(--ui);letter-spacing:.14em;text-transform:uppercase;color:#f2ece4;
  background:linear-gradient(180deg,rgba(255,255,255,.14),rgba(255,255,255,.03)),rgba(10,10,16,.3);box-shadow:inset 0 1px .5px rgba(255,255,255,.5),0 4px 14px rgba(0,0,0,.25)}
.eyebrow .dot{width:7px;height:7px;border-radius:50%;background:var(--teal);box-shadow:0 0 10px var(--teal)}
.eyebrow .upd{color:var(--dim);letter-spacing:.1em}
.wave{color:transparent;background:var(--wave);background-size:300% 100%;-webkit-background-clip:text;background-clip:text;animation:rainbowPass 3.6s linear infinite;
  filter:drop-shadow(0 0 1px rgba(0,0,0,.6)) drop-shadow(0 1px 1.5px rgba(0,0,0,.6));will-change:transform;transform:translateZ(0)}
.logo{margin:0;font:900 clamp(58px,12vw,128px)/.92 var(--mono);letter-spacing:.03em;display:flex;flex-wrap:wrap;justify-content:center;align-items:baseline;gap:.04em}
.logo .plus{font-size:1.08em;margin:0 .05em;filter:drop-shadow(0 0 2px rgba(0,0,0,.6)) drop-shadow(0 0 6px rgba(255,255,255,.35)) drop-shadow(0 0 14px rgba(255,120,200,.45))}
.logo small{flex-basis:100%;font:900 .24em/1 var(--mono);letter-spacing:.42em;padding-left:.42em;color:#f6ece0;margin-top:.7em;text-shadow:0 0 12px rgba(20,8,30,.95)}
.title h1{font:900 clamp(26px,3.6vw,46px)/1.12 var(--mono);margin:26px 0 30px;max-width:22ch}
.title h1 .wave{display:inline-block}
.coin-door{display:flex;flex-direction:column;align-items:center;gap:10px}
.coin-slot{display:inline-flex;align-items:center;gap:18px;min-height:64px;padding:12px 26px 12px 16px;border-radius:18px;cursor:pointer;border:0;color:#ffe9a8;
  background:linear-gradient(180deg,#3a3446,#211c2b 60%,#191520);box-shadow:inset 0 1px 0 rgba(255,255,255,.25),inset 0 -2px 0 rgba(0,0,0,.5),0 0 0 2px #0d0a12,0 0 0 3px #6b5a78,0 14px 34px rgba(0,0,0,.55),0 0 40px rgba(255,170,60,.18)}
.coin-slot .slot{position:relative;width:20px;height:44px;border-radius:6px;background:linear-gradient(90deg,#120e18,#2a2333 45%,#120e18);box-shadow:inset 0 0 0 2px #6b5a78,0 0 16px rgba(255,150,40,.55)}
.coin-slot .slot::after{content:"";position:absolute;left:8px;right:8px;top:7px;bottom:7px;border-radius:2px;background:#ff9a2a;box-shadow:0 0 10px #ff9a2a,0 0 22px #ff7a1a;animation:slotGlow 2s ease-in-out infinite}
.coin-slot .slot i{position:absolute;left:50%;top:-34px;width:26px;height:26px;margin-left:-13px;border-radius:50%;opacity:0;
  background:radial-gradient(circle at 35% 35%,#fff6c8,#ffd23f 45%,#c98a1c);box-shadow:0 0 0 2px #6b4a12,0 0 14px rgba(255,210,63,.8)}
/* the label never blanks out (it is the first thing to press): it breathes, while the slot glows */
.coin-label{font:15px/1 var(--pix);letter-spacing:.06em;text-shadow:0 0 12px rgba(255,190,90,.8);animation:coinPulse 1.6s ease-in-out infinite}
@keyframes coinPulse{50%{opacity:.62;text-shadow:0 0 4px rgba(255,190,90,.5)}}
@media (hover:hover){.coin-slot:hover{box-shadow:inset 0 1px 0 rgba(255,255,255,.25),inset 0 -2px 0 rgba(0,0,0,.5),0 0 0 2px #0d0a12,0 0 0 3px #ffbe73,0 14px 34px rgba(0,0,0,.55),0 0 50px rgba(255,170,60,.35)}}
.coin-slot.dropping .slot i{animation:coinDrop .7s cubic-bezier(.5,0,.8,.4) forwards}
.coin-slot.done .coin-label{animation:none;color:#fff}
@keyframes coinDrop{0%{opacity:1;transform:translateY(-24px) rotateY(0)}60%{opacity:1;transform:translateY(22px) rotateY(80deg) scaleX(.2)}100%{opacity:0;transform:translateY(40px) scaleX(.1)}}
@keyframes slotGlow{50%{opacity:.6}}
.coin-note{margin:0;color:var(--dim);font-size:14.5px}
.credit{margin:0;font:10px/1 var(--pix);color:var(--faint);letter-spacing:.08em}
.credit b{font-weight:400;color:#fff}
.scroll-cue{position:absolute;bottom:22px;left:50%;transform:translateX(-50%);margin:0;font:8px/1 var(--pix);color:var(--dim);letter-spacing:.2em}
.scroll-cue span::after{content:"";display:block;width:2px;height:26px;margin:10px auto 0;background:linear-gradient(var(--amber),transparent);animation:bob 1.6s ease-in-out infinite}

/* --------------------------------------------------------------- level cards */
.scene.act{justify-content:center;text-align:center;min-height:90vh;min-height:90svh}
.act-card{position:relative;padding:28px 34px 30px;max-width:min(1100px,92vw)}
/* (blurred as well as darkened behind the words, so a sign in the room never reads as part of the title) */
.act-card::before{content:"";position:absolute;z-index:-1;inset:-30% 0;pointer-events:none;
  background:radial-gradient(farthest-side,rgba(8,7,13,.84),rgba(8,7,13,.66) 52%,rgba(8,7,13,.2) 80%,transparent);
  -webkit-backdrop-filter:blur(7px);backdrop-filter:blur(7px);
  -webkit-mask-image:radial-gradient(farthest-side,#000 60%,transparent);mask-image:radial-gradient(farthest-side,#000 60%,transparent)}
.act-no{margin:0 0 18px;font:clamp(15px,2vw,22px)/1 var(--pix);letter-spacing:.08em;color:var(--c);text-shadow:0 0 14px var(--c),2px 2px 0 rgba(0,0,0,.6)}
.act h2{font:900 clamp(40px,7.4vw,96px)/.98 var(--mono);margin:0 0 14px;text-shadow:0 0 30px rgba(0,0,0,.6),0 0 60px color-mix(in srgb,var(--c) 35%,transparent)}
.act-dates{margin:0;font:700 15px/1.3 var(--mono);color:var(--dim);letter-spacing:.06em}
.ready{margin:22px 0 0;font:13px/1 var(--pix);color:#ffe365;text-shadow:2px 2px 0 #ae152c,0 0 14px #f28d18}
html.reveal .ready{opacity:0}
.act.in .ready{animation:readyIn 2.4s steps(1) forwards}
@keyframes readyIn{0%{opacity:1}20%{opacity:0}40%{opacity:1}60%{opacity:0}80%,100%{opacity:1}}

/* --------------------------------------------------------------- callouts: labels pinned to things in the room */
/* the labels live between the room and the story: a panel covers them, and the empty parts of a scene let taps
   through to them (a scene only catches pointer events on its panel) */
.callouts,.secrets{position:fixed;inset:0;z-index:1;pointer-events:none}
main,.scene{pointer-events:none}
.scene .panel,.act-card,.title-wrap,.final-card,.scroll-cue{pointer-events:auto}
.callout{position:absolute;left:0;top:0;transform:translate3d(-999px,-999px,0);padding:7px 10px;border-radius:9px;font:8.5px/1.25 var(--pix);letter-spacing:.04em;color:#fff;white-space:nowrap;
  background:rgba(10,8,18,.74);box-shadow:inset 0 1px .5px rgba(255,255,255,.4),0 0 0 1px rgba(255,255,255,.18),0 0 22px rgba(255,190,115,.28);opacity:0;transition:opacity .35s ease;will-change:transform}
.callout::after{content:"";position:absolute;left:50%;bottom:-6px;width:10px;height:10px;margin-left:-5px;transform:rotate(45deg);background:rgba(10,8,18,.74);box-shadow:1px 1px 0 rgba(255,255,255,.18)}
.callout.on{opacity:1}
.callout.secret{pointer-events:auto;cursor:pointer;color:#ffe365;font-size:9px;padding:9px 12px;min-height:34px;border:0;box-shadow:inset 0 1px .5px rgba(255,255,255,.4),0 0 0 1px rgba(255,210,63,.7),0 0 22px rgba(255,210,63,.45)}
.callout.secret.below::after{bottom:auto;top:-6px;box-shadow:-1px -1px 0 rgba(255,255,255,.18)}

/* --------------------------------------------------------------- level-clear banner and score pops */
.lvl-banner{position:fixed;left:50%;top:calc(var(--hud) + 9vh);z-index:40;transform:translate(-50%,-50%);pointer-events:none;text-align:center;opacity:0;
  font:clamp(13px,2vw,20px)/1.5 var(--pix);color:#ffe365;text-shadow:3px 3px 0 #ae152c,0 0 18px #f28d18;white-space:nowrap}
.lvl-banner small{display:block;font-size:.55em;color:#fff;text-shadow:2px 2px 0 #222,0 0 12px rgba(255,255,255,.4)}
.lvl-banner.show{animation:bannerIn 2s ease forwards}
@keyframes bannerIn{0%{opacity:0;transform:translate(-50%,-50%) scale(.6)}12%{opacity:1;transform:translate(-50%,-50%) scale(1.06)}20%{transform:translate(-50%,-50%) scale(1)}80%{opacity:1}100%{opacity:0;transform:translate(-50%,-62%)}}
.pops{position:fixed;inset:0;z-index:35;pointer-events:none}
.pop{position:absolute;font:10px/1 var(--pix);color:#ffe365;text-shadow:2px 2px 0 #ae152c;animation:popUp 1.1s ease-out forwards}
@keyframes popUp{0%{opacity:0;transform:translateY(8px)}15%{opacity:1}100%{opacity:0;transform:translateY(-34px)}}

/* --------------------------------------------------------------- scoreboard */
.score{display:grid;grid-template-columns:repeat(4,1fr);gap:12px;margin:18px 0 0}
.sc{position:relative;border-radius:var(--r);padding:18px 16px 16px;background:rgba(255,255,255,.04);box-shadow:inset 0 0 0 1px rgba(255,255,255,.1);
  overflow:hidden;display:flex;flex-direction:column;gap:4px;min-height:150px;isolation:isolate}
.sc::before{content:"";position:absolute;inset:0 0 auto;height:3px;background:var(--c);box-shadow:0 0 18px var(--c)}
.sc::after{content:"";position:absolute;right:-24%;bottom:-48%;width:72%;aspect-ratio:1;background:radial-gradient(closest-side,var(--c),transparent);opacity:.1;z-index:-1}
.sc b{font:900 clamp(28px,3vw,42px)/1 var(--mono);color:var(--c);letter-spacing:-.02em;white-space:nowrap;font-variant-numeric:tabular-nums}
.sc em{font:800 12px/1.25 var(--mono);letter-spacing:.12em;text-transform:uppercase;color:var(--text);font-style:normal;margin-top:6px}
.sc span{color:var(--dim);font-size:14.5px;line-height:1.42}
.sc.big{grid-column:span 2}
.sc.big b{font-size:clamp(44px,5.8vw,82px);text-shadow:0 0 34px color-mix(in srgb,var(--c) 40%,transparent)}

/* --------------------------------------------------------------- chart + model mix */
.chart{border-radius:var(--r);background:rgba(8,6,14,.5);box-shadow:inset 0 0 0 1px rgba(255,255,255,.09);padding:16px 16px 14px;margin-top:16px}
.chart-top{display:flex;justify-content:space-between;gap:12px;flex-wrap:wrap;align-items:center;margin-bottom:12px}
.seg{display:inline-flex;border-radius:999px;padding:3px;gap:3px;background:rgba(255,255,255,.05);box-shadow:inset 0 0 0 1px rgba(255,255,255,.12)}
.seg button{font:800 13px/1 var(--ui);color:var(--dim);background:none;border:0;border-radius:999px;padding:0 14px;min-height:40px;cursor:pointer}
.seg button[aria-pressed="true"]{background:var(--amber);color:#2a1a10}
.legend{display:flex;gap:14px;flex-wrap:wrap}
.lg{font:700 11px/1 var(--mono);color:var(--dim);display:inline-flex;align-items:center;gap:6px;text-transform:uppercase;letter-spacing:.08em;white-space:nowrap}
.lg::before{content:"";width:10px;height:10px;border-radius:3px;background:var(--lc);box-shadow:0 0 8px color-mix(in srgb,var(--lc) 60%,transparent)}
.lg-c{--lc:var(--teal)}.lg-x{--lc:var(--rose)}.lg-r{--lc:var(--amber)}.lg-r::before{border-radius:50%}.lg-g{--lc:var(--lav)}.lg-m{--lc:#ffd166}.lg-s{--lc:#6d6380}.lg-n{--lc:#ffd2a0}.lg-n::before{transform:rotate(45deg) scale(.8)}
.chart-plot{position:relative;height:clamp(220px,26vw,300px);outline:none;border-radius:10px;touch-action:pan-y;cursor:crosshair}
.chart-plot:focus-visible{outline:3px solid var(--teal);outline-offset:3px}
.chart-plot svg{display:block;width:100%;height:100%;overflow:visible}
.chart-plot .gl{stroke:#ffffff14;stroke-width:1}
.chart-plot .yl,.chart-plot .xl{fill:var(--faint);font:700 10.5px var(--mono);letter-spacing:.04em}
.chart-plot .bc{fill:var(--teal)}.chart-plot .bx{fill:var(--rose)}
.chart-plot .day{transform-box:fill-box;transform-origin:50% 100%;transition:opacity .2s}
.chart-plot.grow .day{animation:barup .9s cubic-bezier(.2,.8,.2,1) backwards;animation-delay:calc(var(--i) * 14ms)}
@keyframes barup{from{transform:scaleY(0)}}
.chart-plot .rd{fill:var(--amber);stroke:#16121f;stroke-width:2}
.chart-plot .rn{fill:var(--amber);font:800 10.5px var(--mono);text-anchor:middle}
.chart-plot .ms{fill:#ffd2a0}
.chart-plot .sel{fill:#ffffff10;stroke:#ffffff55;stroke-width:1}
.chart-plot.has-sel .day{opacity:.42}.chart-plot.has-sel .day.on{opacity:1}
.chart-plot .split{stroke:var(--amber);stroke-dasharray:3 4;stroke-width:1.2;opacity:.7}
.chart-plot .split-l{fill:var(--amber);font:800 10.5px var(--mono);letter-spacing:.06em}
.chart-info{min-height:90px;margin-top:12px;padding:12px 14px;border-radius:12px;background:rgba(255,255,255,.04);box-shadow:inset 0 0 0 1px rgba(255,255,255,.08)}
.chart-info p{margin:0;color:var(--dim);font-size:15px}
.chart-info .ci-d{font:800 12px/1 var(--mono);letter-spacing:.14em;text-transform:uppercase;color:var(--amber);margin-bottom:6px}
.chart-info .ci-m{color:var(--text);font-weight:800;font-size:16.5px;margin-bottom:6px}
.chart-info .ci-n{display:flex;flex-wrap:wrap;gap:4px 16px;font:700 13.5px/1.4 var(--mono);color:var(--dim)}
.chart-info .ci-n b{color:var(--text)}
.chart-all{margin:12px 0 0;color:var(--dim);font-size:15px}
.chart-all b{color:var(--text)}
.mix{margin-top:16px;border-radius:var(--r);padding:16px 18px;background:rgba(8,6,14,.45);box-shadow:inset 0 0 0 1px rgba(255,255,255,.09)}
.mix h3{font-size:19px;margin:0}
.mix h3 small{font:700 12px/1 var(--mono);color:var(--dim);margin-left:6px}
.mix-bar{display:flex;height:28px;border-radius:9px;overflow:hidden;margin:12px 0 14px;background:#ffffff08;gap:2px}
.mix-bar span{width:var(--w);background:var(--c);display:flex;align-items:center;padding-left:8px;transform-origin:0 50%;transition:transform 1.1s cubic-bezier(.2,.8,.2,1)}
.mix-bar b{font:800 12px/1 var(--mono);color:#16121f;white-space:nowrap}
.mix-bar b.nofit{visibility:hidden}
html.reveal .mix:not(.in) .mix-bar span{transform:scaleX(0)}
html.calm .mix .mix-bar span{transform:none}
.mix-legend{list-style:none;margin:0;padding:0;display:grid;grid-template-columns:repeat(auto-fit,minmax(min(100%,210px),1fr));gap:10px 18px}
.mix-legend li{display:grid;grid-template-columns:12px 1fr;column-gap:10px;align-items:baseline}
.mix-legend li::before{content:"";width:12px;height:12px;border-radius:3px;background:var(--c);grid-row:span 2;align-self:center}
.mix-legend b{font-weight:800;font-size:15px}
.mix-legend span{color:var(--dim);font-size:13.5px}
.juke{display:flex;align-items:center;gap:12px;flex-wrap:wrap;margin:16px 0 0!important;color:var(--dim);font-size:14.5px}

/* --------------------------------------------------------------- chapter pieces */
.tabgrid{display:grid;grid-template-columns:repeat(auto-fill,minmax(14px,1fr));gap:4px;padding:12px;border-radius:12px;background:rgba(8,6,14,.45)}
.tabgrid i{aspect-ratio:1;border-radius:3px;background:var(--tc);box-shadow:0 0 6px color-mix(in srgb,var(--tc) 50%,transparent);opacity:0;animation:tabIn .4s ease forwards;animation-delay:calc(var(--i) * 12ms)}
.tabgrid i.tc{--tc:var(--teal)}.tabgrid i.tx{--tc:var(--rose)}.tabgrid i.tg{--tc:var(--lav)}.tabgrid i.tm{--tc:#ffd166}.tabgrid i.ts{--tc:#6d6380}
@keyframes tabIn{to{opacity:1}}
.tabs-fig figcaption{display:flex;flex-wrap:wrap;gap:8px 14px;margin-top:10px}
.chat{display:flex;flex-direction:column;gap:6px}
.bub{margin:0!important;padding:10px 12px;border-radius:14px;font-size:14.5px;line-height:1.45;max-width:92%}
.bub span{display:block;font:800 10px/1 var(--mono);letter-spacing:.12em;text-transform:uppercase;margin-bottom:5px;opacity:.8}
.bub.me{align-self:flex-end;background:#ffbe731f;box-shadow:inset 0 0 0 1px #ffbe7350;color:#ffe2c0;border-bottom-right-radius:4px;font-family:var(--mono);font-size:13.5px}
.bub.ai{align-self:flex-start;background:rgba(127,214,196,.1);box-shadow:inset 0 0 0 1px rgba(127,214,196,.3);color:var(--text);border-bottom-left-radius:4px}
.bars{display:grid;gap:10px;padding:14px;border-radius:12px;background:rgba(8,6,14,.45)}
.bar-row{display:grid;grid-template-columns:62px 1fr 52px;align-items:center;gap:10px;font:800 13.5px/1 var(--mono)}
.bar-row i{height:12px;border-radius:6px;background:linear-gradient(90deg,var(--rose),#ff8c6a);width:var(--v)}
.bar-row.after i{background:linear-gradient(90deg,var(--teal),var(--mint))}
.bar-row i.robots{background:repeating-linear-gradient(90deg,var(--lav) 0 6px,#8a7cd0 6px 12px)}
.bars-note{margin:0!important;color:var(--faint);font-size:12.5px}
.phone img{max-height:52vh;width:auto!important;margin:0 auto;border-radius:22px!important}
.shots{display:grid;grid-template-columns:1fr 1fr;gap:10px;margin:14px 0}
.shots figure{margin:0}
.shots img{border-radius:10px;border:1px solid var(--line);aspect-ratio:4/3;object-fit:cover;width:100%}
.shots figcaption{font:800 12px/1.35 var(--mono);color:#ddd1c4;text-transform:uppercase;letter-spacing:.08em;margin-top:6px}

/* before/after sliders */
.cmp{margin:14px 0}
.cmp-frame{position:relative;border-radius:12px;overflow:hidden;box-shadow:inset 0 0 0 1px var(--line);background:var(--ink3);aspect-ratio:16/10;touch-action:pan-y;user-select:none;-webkit-user-select:none;cursor:ew-resize}
.cmp-frame img{position:absolute;inset:0;width:100%;height:100%;object-fit:cover;pointer-events:none}
.cmp-frame .after{clip-path:inset(0 0 0 var(--p,50%))}
.cmp-frame.pix img{image-rendering:pixelated}
.cmp-frame:has(.cmp-range:focus-visible){outline:3px solid var(--teal);outline-offset:3px}
.cmp-line{position:absolute;top:0;bottom:0;left:var(--p,50%);width:2px;margin-left:-1px;background:var(--text);box-shadow:0 0 12px #000a;pointer-events:none}
.cmp-knob{position:absolute;top:50%;left:var(--p,50%);width:42px;height:42px;margin:-21px 0 0 -21px;border-radius:50%;background:var(--text);color:var(--ink);display:grid;place-items:center;font:900 16px/1 var(--mono);box-shadow:0 4px 18px #000a;pointer-events:none}
.cmp-range{position:absolute;inset:0;width:100%;height:100%;opacity:0;cursor:ew-resize;margin:0}
.cmp-tag{position:absolute;top:10px;font:800 10.5px/1 var(--mono);letter-spacing:.12em;text-transform:uppercase;padding:6px 8px;border-radius:6px;background:#16121fcc;pointer-events:none}
.cmp-tag.b{left:10px;color:var(--dim)}.cmp-tag.a{right:10px;color:var(--teal)}
.cmp figcaption{padding-top:8px}
.cmp figcaption b{display:block;color:var(--text);font-weight:800;margin-bottom:3px}
.cmp figcaption span{display:block;color:var(--dim);font-size:14.5px}
.cmp figcaption .ask{margin-top:6px;font-size:13px}
.then-now{display:grid;grid-template-columns:1fr 1fr;gap:12px;margin:16px 0 22px}
.then-now figure{margin:0!important;border-radius:12px;overflow:hidden;background:rgba(8,6,14,.45)}
.then-now img{width:100%;aspect-ratio:1000/498;object-fit:cover}
.then-now figcaption{padding:10px 12px;font-size:14px;margin:0}
.then-now figcaption b{font:800 11px/1 var(--mono);letter-spacing:.14em;text-transform:uppercase;color:var(--amber);margin-right:8px}
.gallery{display:grid;grid-template-columns:repeat(auto-fit,minmax(min(100%,320px),1fr));gap:18px}
.gallery .cmp{margin:0}

/* the What if? remote */
.remote{display:grid;grid-template-columns:1fr 1fr;gap:8px;margin:16px 0 8px}
.remote button{display:grid;grid-template-columns:auto 1fr;grid-template-rows:auto auto;column-gap:10px;text-align:left;align-items:center;min-height:56px;padding:10px 12px;border-radius:14px;border:0;cursor:pointer;color:var(--text);
  background:linear-gradient(180deg,rgba(255,255,255,.1),rgba(255,255,255,.035));box-shadow:inset 0 1px .5px rgba(255,255,255,.3),0 0 0 1px rgba(255,255,255,.1);transition:box-shadow .2s ease,background .2s ease}
.remote .ch{grid-row:span 2;font:10px/1 var(--pix);color:var(--c)}
.remote b{font:800 14.5px/1.15 var(--ui)}
.remote small{color:var(--dim);font-size:12px;line-height:1.3}
.remote button[aria-checked="true"]{background:linear-gradient(180deg,color-mix(in srgb,var(--c) 30%,transparent),rgba(255,255,255,.04));box-shadow:inset 0 1px .5px rgba(255,255,255,.4),0 0 0 1.5px var(--c),0 0 22px color-mix(in srgb,var(--c) 45%,transparent)}
.remote button[aria-busy="true"] .ch::after{content:" …"}
.tune{min-height:1.6em;margin:0!important;font:9px/1.6 var(--pix);color:var(--amber)}

/* prompts wall */
.wall{list-style:none;margin:16px 0 0;padding:0;columns:3 260px;column-gap:14px}
.q{break-inside:avoid;margin:0 0 14px;padding:16px 16px 14px;border-radius:16px;background:rgba(8,6,14,.5);box-shadow:inset 0 0 0 1px rgba(255,255,255,.09);position:relative;overflow:hidden}
.q::before{content:"";position:absolute;left:0;top:0;bottom:0;width:3px;background:var(--c);box-shadow:0 0 14px var(--c)}
.q q{display:block;font:700 16px/1.45 var(--mono);color:var(--text);quotes:"“" "”"}
.q span{display:block;margin-top:8px;color:var(--faint);font-size:13px}

/* how to play */
.loop{list-style:none;margin:18px 0 0;padding:0;display:grid;grid-template-columns:repeat(4,1fr);gap:12px;counter-reset:step}
.node{position:relative;border-radius:var(--r);padding:20px 16px 16px;background:rgba(8,6,14,.5);box-shadow:inset 0 0 0 1px rgba(255,255,255,.09);counter-increment:step}
.node::before{content:counter(step,decimal-leading-zero);position:absolute;right:12px;top:12px;font:10px/1 var(--pix);color:var(--faint)}
.node h3{font-size:18px;margin:0 0 8px}
.node p{margin:0;color:var(--dim);font-size:14.5px;line-height:1.5}
.node.owner{background:linear-gradient(180deg,rgba(255,190,115,.14),rgba(8,6,14,.5));box-shadow:inset 0 0 0 1px rgba(255,190,115,.4)}
.node.owner h3{color:var(--amber)}
.node .tag{display:inline-block;margin-top:10px;font:800 10.5px/1 var(--mono);letter-spacing:.12em;text-transform:uppercase;color:var(--c,var(--teal))}
.loop-back{margin-top:16px!important;color:var(--dim)}
.loop-back b{color:var(--text)}

/* select your game */
.games-h{font:12px/1 var(--pix)!important;color:var(--amber);margin:24px 0 12px!important;letter-spacing:.06em}
.games{display:grid;grid-template-columns:repeat(3,1fr);gap:14px}
.game{display:flex;flex-direction:column;border-radius:var(--r);overflow:hidden;background:rgba(8,6,14,.55);box-shadow:inset 0 0 0 1px rgba(255,255,255,.1);transition:transform .2s ease,box-shadow .2s ease;cursor:default}
.game.on,.game:focus-within{transform:translateY(-3px);box-shadow:inset 0 0 0 1.5px var(--c),0 0 26px color-mix(in srgb,var(--c) 40%,transparent)}
.game .art{aspect-ratio:16/9;background:var(--ink3)}
.game .art img{width:100%;height:100%;object-fit:cover;image-rendering:pixelated}
.game .body{padding:14px 14px 16px;display:flex;flex-direction:column;gap:7px;flex:1}
.game h4 small{vertical-align:middle;margin-left:4px}
.game p{margin:0!important;color:var(--dim);font-size:14.5px}
.game .how{font:600 12.5px/1.5 var(--mono);color:#d8cbbd;border-left:2px solid var(--c,var(--amber));padding-left:9px}
.game .btn{margin-top:auto;align-self:flex-start;min-height:44px;padding:0 18px;font-size:15px}
.fan-note{margin:0 0 12px!important;padding:12px 14px;border:1px dashed var(--line2);border-radius:12px;color:var(--dim);font-size:14px}
/* resting on a card: the rest of the panel clears, so its machine shows in the room behind */
.select-scene .panel{transition:background .35s ease,box-shadow .35s ease}
.select-scene .panel>*,.select-scene .game{transition:opacity .35s ease,transform .2s ease,box-shadow .2s ease}
.select-scene .panel.peek{background:transparent;-webkit-backdrop-filter:none;backdrop-filter:none;box-shadow:none}
.select-scene .panel.peek::before,.select-scene .panel.peek::after{opacity:0}
.select-scene .panel.peek>:not(.games),.select-scene .panel.peek .game:not(.on){opacity:.06}
.select-scene .panel.peek .game.on{background:rgba(8,6,14,.82)}

/* the city */
.lots{display:grid;grid-template-columns:repeat(3,1fr);gap:12px;margin-top:16px}
.lot{margin:0;border-radius:var(--r);overflow:hidden;background:rgba(8,6,14,.55);box-shadow:inset 0 0 0 1px rgba(255,255,255,.1);display:flex;flex-direction:column}
.lot img{width:100%;aspect-ratio:16/10;object-fit:cover}
.lot figcaption{padding:12px 14px 14px;display:grid;gap:4px;margin:0!important}
.lot b{font:800 14px/1.2 var(--mono);color:var(--teal)}
.lot span{color:var(--dim);font-size:14px;line-height:1.45}
.lot.banner{grid-column:span 3;display:grid;grid-template-columns:1.5fr 1fr}
.lot.banner img{aspect-ratio:auto;height:100%;min-height:260px}
.lot.banner figcaption{align-content:center;gap:10px;padding:22px}
.lot.banner b{font-size:clamp(17px,1.4vw + 6px,22px)}
.lot.banner.zero{background:linear-gradient(135deg,rgba(255,201,60,.12),rgba(8,6,14,.6) 60%)}
.lot.banner.zero .btn{justify-self:start}
.lot.cta{display:flex;flex-direction:column;justify-content:center;gap:14px;padding:20px}
.lot.cta p{margin:0!important;color:var(--dim)}
.lot.cta .btn{align-self:flex-start}
.beyond2{margin-top:16px}
.card{border-radius:var(--r);padding:18px;background:rgba(8,6,14,.5);box-shadow:inset 0 0 0 1px rgba(255,255,255,.09)}
.card h3{margin:0 0 6px}
.card .shots{grid-template-columns:repeat(3,1fr)}
.card figcaption b{display:block;color:var(--text);font-size:13px}
.card figcaption span{text-transform:none;letter-spacing:0;font:600 12.5px/1.4 var(--ui);color:var(--dim)}

/* the crew: a high-score table */
.crew{list-style:none;margin:18px 0 0;padding:0;display:grid;gap:8px}
.mate{display:grid;grid-template-columns:56px 1fr auto;gap:14px;align-items:center;padding:14px 16px;border-radius:14px;background:rgba(8,6,14,.5);box-shadow:inset 0 0 0 1px rgba(255,255,255,.08);position:relative;overflow:hidden}
.mate::before{content:"";position:absolute;left:0;top:0;bottom:0;width:3px;background:var(--c);box-shadow:0 0 14px var(--c)}
.mate .rank{font:12px/1 var(--pix);color:var(--c);text-align:center}
.mate .org{margin:0 0 2px!important;font:800 10.5px/1 var(--mono);letter-spacing:.14em;text-transform:uppercase;color:var(--faint)}
.mate h3{font-size:18px;margin:0 0 4px}
.mate h3 small{display:block;font:700 12px/1.35 var(--mono);color:var(--dim);margin-top:4px}
/* the crew sits to one side, so the High Scores board in the room shows beside it */
.crew-scene .panel{width:min(560px,100%)}
.mate p{margin:0!important;color:var(--dim);font-size:14px;line-height:1.5}
.mate .pts{font:12px/1.3 var(--pix);color:var(--gold);text-align:right;white-space:nowrap}
.mate .pts small{display:block;font:700 11px/1 var(--mono);color:var(--faint);margin-top:6px}
.mate .pts.none{color:var(--faint);font-size:9px}
.mate.me{background:linear-gradient(90deg,rgba(255,190,115,.14),rgba(8,6,14,.5) 60%)}
.nw{white-space:nowrap}

/* credits: how I counted */
.method{display:grid;gap:8px;margin-top:16px}
.method details{border-radius:14px;background:rgba(8,6,14,.5);box-shadow:inset 0 0 0 1px rgba(255,255,255,.09);padding:0 16px}
.method summary{cursor:pointer;min-height:48px;display:flex;align-items:center;font:800 15.5px/1.2 var(--mono);color:var(--text);list-style:none}
.method summary::-webkit-details-marker{display:none}
.method summary::before{content:"▶";font:9px/1 var(--pix);color:var(--amber);margin-right:12px;transition:transform .2s}
.method details[open] summary::before{transform:rotate(90deg)}
.method p{color:var(--dim);font-size:15px;margin:0 0 14px!important}
.made{margin-top:18px!important;color:var(--faint);font-size:14px}

/* --------------------------------------------------------------- finale */
.scene.final{justify-content:flex-start;text-align:center}
.final-card{position:relative;isolation:isolate;width:min(520px,100%);padding:26px 24px 24px;border-radius:28px;background:var(--glass);
  -webkit-backdrop-filter:blur(20px) saturate(125%);backdrop-filter:blur(20px) saturate(125%);
  box-shadow:inset 0 1px .5px rgba(255,255,255,.45),inset 0 -1px .5px rgba(255,255,255,.1),0 26px 70px rgba(0,0,0,.45)}
.final-card::before{content:"";position:absolute;inset:0;z-index:-1;border-radius:inherit;padding:2px;pointer-events:none;
  background:conic-gradient(from var(--rim),rgba(185,174,219,.5) 0 70%,#ff3d8b 75%,#ffd23f 79%,#5dffc8 83%,#23e5ff 87%,#b48cff 91%,rgba(185,174,219,.5) 96% 100%);
  animation:rimRun 6s linear infinite;-webkit-mask:linear-gradient(#000 0 0) content-box,linear-gradient(#000 0 0);-webkit-mask-composite:xor;mask-composite:exclude}
.final .result{background:rgba(8,6,14,.45);box-shadow:inset 0 0 0 1px rgba(255,255,255,.1);-webkit-backdrop-filter:none;backdrop-filter:none}
.final-card .lvl{font-size:12px;color:#ffe365;text-shadow:2px 2px 0 #ae152c,0 0 14px #f28d18}
.blink{animation:blink 1s steps(1) infinite}
.final h2{font-size:clamp(30px,3.6vw,46px);margin:0 auto 12px;max-width:16ch}
.final-card>p{color:var(--dim);margin:0 auto 22px;max-width:46ch}
.result{margin:0 auto 24px;padding:18px;border-radius:20px;background:var(--glass);box-shadow:inset 0 1px .5px rgba(255,255,255,.4),0 0 0 1px rgba(255,255,255,.1),0 20px 50px rgba(0,0,0,.4);-webkit-backdrop-filter:blur(16px);backdrop-filter:blur(16px);max-width:420px}
.result p{margin:0 0 10px;font:10px/1.6 var(--pix);color:var(--dim)}
.result b{font-weight:400;font-size:20px;color:#fff;display:block;margin-top:6px;letter-spacing:.06em}
.result .best b{color:var(--gold)}
.result .new-hi{color:#ffe365}
.initials{display:flex;gap:8px;justify-content:center;align-items:center;flex-wrap:wrap;margin:12px 0 6px}
.initials label{width:100%;font:9px/1 var(--pix);color:var(--amber)}
.initials input{width:110px;min-height:44px;text-align:center;font:18px/1 var(--pix);letter-spacing:.3em;text-transform:uppercase;color:#fff;background:rgba(0,0,0,.4);border:0;border-radius:10px;box-shadow:inset 0 0 0 1.5px rgba(255,210,63,.6)}
.tiny{font-size:12.5px!important;color:var(--faint)!important;font-family:var(--ui)!important;margin:6px 0 0!important}
.final .actions{display:flex;gap:12px;justify-content:center;flex-wrap:wrap}
.btn.cta{position:relative;isolation:isolate;min-height:58px;padding:0 30px;font-size:18px;color:#b9aedb;
  background:linear-gradient(180deg,rgba(255,255,255,.16),rgba(255,255,255,.03) 55%),linear-gradient(90deg,rgba(255,61,139,.16),rgba(120,90,220,.2) 50%,rgba(35,229,255,.14)),rgba(14,10,30,.66);
  box-shadow:inset 0 1px .5px rgba(255,255,255,.5),0 8px 26px rgba(0,0,0,.35),0 0 24px rgba(255,61,139,.18),0 0 24px rgba(35,229,255,.16)}
.btn.cta::before{content:"";position:absolute;inset:0;z-index:-1;border-radius:inherit;padding:1.5px;pointer-events:none;background:linear-gradient(90deg,#ff3d8b,#ffd23f,#5dffc8,#23e5ff,#b48cff,#ff3d8b);opacity:.8;
  -webkit-mask:linear-gradient(#000 0 0) content-box,linear-gradient(#000 0 0);-webkit-mask-composite:xor;mask-composite:exclude}
.btn.cta::after{content:"→";color:#b9aedb;font-weight:900}
.cta-label{font-weight:900;color:transparent;background:var(--wave);background-size:300% 100%;-webkit-background-clip:text;background-clip:text;animation:rainbowPass 3.6s linear infinite;filter:drop-shadow(0 1px 1px rgba(0,0,0,.55))}
.wipe{position:fixed;inset:0;z-index:90;pointer-events:none;background:#06050b;opacity:0;transition:opacity .45s ease;display:grid;place-items:center;font:14px/1 var(--pix);color:#ffe365}
.wipe.on{opacity:1}

footer{position:relative;z-index:2;margin-top:18vh;padding:26px max(4vw,16px) calc(26px + env(safe-area-inset-bottom,0px));background:linear-gradient(180deg,rgba(9,7,16,.7),rgba(9,7,16,.94));color:var(--faint);font-size:14px}
footer .wrap{display:flex;gap:16px;justify-content:space-between;flex-wrap:wrap;max-width:1100px;margin:0 auto}
footer a{color:var(--dim)}

/* --------------------------------------------------------------- reveal: panels rise in as they arrive */
/* (the page's head adds .reveal, and takes it away again if the story script never runs) */
html.reveal .scene .panel,html.reveal .act-card,html.reveal .final-card{opacity:0;transform:translateY(26px) scale(.985);transition:opacity .7s ease,transform .8s cubic-bezier(.2,.8,.2,1)}
html.reveal .scene.in .panel,html.reveal .act.in .act-card,html.reveal .final.in .final-card{opacity:1;transform:none}

/* --------------------------------------------------------------- calm: reduced motion stills everything */
html.calm *,html.calm *::before,html.calm *::after{animation:none!important;transition:none!important}
html.calm .scene .panel,html.calm .act-card,html.calm .final-card{opacity:1!important;transform:none!important}
html.calm .ready{opacity:1}
html.calm .tabgrid i{opacity:1}
@media (prefers-reduced-motion:reduce){
  *,*::before,*::after{animation:none!important;transition:none!important}
  html.reveal .scene .panel,html.reveal .act-card,html.reveal .final-card{opacity:1;transform:none}
  .ready,.tabgrid i{opacity:1}
}

/* --------------------------------------------------------------- touch screens: lighter glass work */
/* (no scanlines, a still rainbow rim, a softer blur: less to repaint over the moving room) */
@media (pointer:coarse){
  .scan{display:none}
  .panel.on::before{animation:none}
  .panel{-webkit-backdrop-filter:blur(14px) saturate(120%);backdrop-filter:blur(14px) saturate(120%)}
}

/* --------------------------------------------------------------- sizes */
@media (max-width:1100px){.score{grid-template-columns:1fr 1fr}.loop{grid-template-columns:repeat(2,1fr)}.games{grid-template-columns:repeat(2,1fr)}.lots{grid-template-columns:repeat(2,1fr)}.lot.banner{grid-column:span 2}}
/* phones upright: the room shows in the top part of the screen; the story slides up from the bottom */
@media (max-width:700px){
  :root{--hud:74px}
  body{font-size:16px}
  .hud-in{gap:8px;padding-left:10px;padding-right:10px}
  .mark{font-size:13px}
  .hud-score{gap:5px;font-size:8.5px}
  .hud-score .up{display:none}
  .hud-score .hi{margin-left:4px}
  .hud-lvl{display:none}
  .pix-btn{min-height:40px;font-size:8px;padding:0 8px}
  .hud-bar{gap:8px}
  .hud-date{min-width:58px}
  .hud-tok{min-width:0}
  .hud-tok span{display:none}
  .scene{align-items:flex-end;padding:calc(var(--hud) + 40vh) 10px 20px;padding-top:calc(var(--hud) + 40svh)}
  .scene.l,.scene.r{justify-content:center}
  .scene.wide{padding-top:calc(var(--hud) + 22svh)}
  .scene.title{padding-top:calc(var(--hud) + 10px);align-items:center}
  .panel{border-radius:24px;padding:20px 16px 16px;-webkit-backdrop-filter:blur(12px) saturate(120%);backdrop-filter:blur(12px) saturate(120%)}
  .score{grid-template-columns:1fr 1fr;gap:8px}
  .sc{min-height:0;padding:14px 12px 12px}.sc span{font-size:13px}.sc b{font-size:clamp(24px,7.4vw,32px)}.sc.big b{font-size:clamp(36px,11vw,52px)}
  .then-now,.remote,.shots,.card .shots{grid-template-columns:1fr}
  .loop,.games,.lots{grid-template-columns:1fr}
  .lot.banner{grid-column:auto;grid-template-columns:1fr}
  .lot.banner img{min-height:0;aspect-ratio:16/10}
  .mate{grid-template-columns:40px 1fr;padding:12px}
  .mate .pts{grid-column:2;text-align:left}
  .wall{columns:1}
  .coin-slot{padding:12px 18px 12px 14px}
  .coin-label{font-size:13px}
  .act h2{font-size:clamp(38px,12vw,60px)}
  .callout{font-size:7.5px;padding:6px 8px}
  /* the finale keeps the High Scores board (with your score) in view above it */
  .scene.final{padding-top:calc(var(--hud) + 36svh);padding-bottom:28px}
  .final-card{padding:18px 16px 16px}
  .final-card>p{font-size:15px;margin-bottom:14px}
  .final h2{font-size:clamp(26px,7.4vw,34px)}
  .result{padding:12px;margin-bottom:16px;display:grid;grid-template-columns:1fr 1fr;column-gap:8px}
  .result .initials,.result .tiny{grid-column:span 2}
  .result b{font-size:16px}
}
/* phones sideways and other short screens: the story sits to one side, narrower */
@media (max-height:520px) and (orientation:landscape){
  :root{--hud:64px}
  .hud-bar{padding-bottom:5px}
  .hud-in{padding-top:5px;padding-bottom:4px}
  .scene{padding:calc(var(--hud) + 14px) 16px 16px;min-height:100vh}
  .panel{width:min(400px,52vw);padding:16px 18px;border-radius:20px}
  .wide .panel{width:100%}
  .scene.title{padding-top:var(--hud)}
  .logo{font-size:clamp(40px,9vw,64px)}
  .title h1{margin:12px 0 14px;font-size:clamp(20px,3.4vw,30px)}
  .eyebrow{margin-bottom:10px}
  .act h2{font-size:clamp(34px,7vw,54px)}
}
