/* ============================================================ TOKENS ============================================================ */
:root{
  --bg:#0b0f24; --bg2:#141a3a;
  --ink:#f2f5ff; --ink-soft:#aeb7de; --ink-faint:#727ba8;
  --line:rgba(255,255,255,.14); --line2:rgba(255,255,255,.28);
  --accent:#4d7bff; --accent2:#7aa0ff;
  --gold:#ffcf47; --good:#38d39a; --warn:#ffb43d; --bad:#ff5c72;
  --panel:#161d3e; --panel2:#0e1430;
  --box:#1a2247; --box-lite:#2a356b;
  --mono:"DejaVu Sans Mono",ui-monospace,"SF Mono","Cascadia Code",Menlo,Consolas,monospace;
  --sans:"Segoe UI",system-ui,-apple-system,Roboto,"Helvetica Neue",Arial,sans-serif;
  --hue:225;
}
:root[data-theme="light"]{
  --bg:#dfe6fb; --bg2:#eef2ff; --ink:#111634; --ink-soft:#48507a; --ink-faint:#828bb4;
  --line:rgba(20,28,60,.14); --line2:rgba(20,28,60,.3);
  --panel:#ffffff; --panel2:#eef1fb; --box:#ffffff; --box-lite:#dbe3ff;
}
*{margin:0;padding:0;box-sizing:border-box}
[hidden]{display:none!important}
html,body{height:100%}
body{font-family:var(--sans); background:#05070f; color:var(--ink); -webkit-font-smoothing:antialiased; overflow:hidden; user-select:none; -webkit-tap-highlight-color:transparent;}
button{font-family:inherit;color:inherit}
img,svg,canvas{display:block}

#app{position:fixed; inset:0; max-width:600px; margin:0 auto; display:flex; flex-direction:column; background:var(--bg); box-shadow:0 0 80px rgba(0,0,0,.6);}

/* -- HUD -- */
#hud{position:relative; z-index:6; flex:none; display:flex; align-items:center; gap:10px; padding:9px 12px; background:linear-gradient(180deg,rgba(0,0,0,.35),transparent);}
.hero-chip{display:flex; align-items:center; gap:8px; min-width:0}
.hero-chip .pic{width:30px;height:30px;border-radius:8px;overflow:hidden;background:var(--panel2);border:1px solid var(--line2);flex:none}
.hero-chip .pic svg{width:100%;height:auto;transform:translateY(2px) scale(1.35)}
.hero-meta{display:flex;flex-direction:column;line-height:1.1;min-width:0}
.hero-meta .n{font-size:12.5px;font-weight:700;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.hero-meta .r{font-size:9px;letter-spacing:.13em;text-transform:uppercase;color:var(--ink-faint);font-weight:700;font-family:var(--mono)}
.hud-right{margin-left:auto;display:flex;align-items:center;gap:8px}
.dots{display:flex;gap:5px}
.dot{width:8px;height:8px;background:var(--line2);transition:.3s;clip-path:polygon(50% 0,100% 50%,50% 100%,0 50%)}
.dot.done{background:var(--accent)} .dot.now{background:var(--gold);transform:scale(1.35);box-shadow:0 0 10px var(--gold)}
.iconbtn{width:30px;height:30px;border-radius:7px;background:var(--panel);border:1px solid var(--line);cursor:pointer;font-size:14px;display:grid;place-items:center;color:var(--ink-soft);transition:.15s}
.iconbtn:hover{color:var(--ink);border-color:var(--line2)}

/* -- SCENE shell -- */
#scene{position:relative; z-index:1; flex:1 1 auto; min-height:0; overflow:hidden; background:#0a0e22}
#world{position:absolute;inset:0;width:100%;height:100%;touch-action:none}

/* objective banner */
#objective{position:absolute;top:10px;left:50%;transform:translateX(-50%);z-index:4;
  display:flex;align-items:center;gap:8px;max-width:90%;
  background:var(--panel2);border:2px solid var(--line2);border-radius:10px;padding:7px 13px;
  box-shadow:0 8px 22px -8px rgba(0,0,0,.6);animation:objIn .4s both}
@keyframes objIn{from{opacity:0;transform:translate(-50%,-8px)}to{opacity:1;transform:translate(-50%,0)}}
#objective .go{font-size:14px}
#objective .txt{font-size:12px;line-height:1.2}
#objective .txt b{display:block;font-size:8.5px;letter-spacing:.16em;text-transform:uppercase;color:var(--gold);font-family:var(--mono);font-weight:800}
#objective .txt span{font-weight:700}

/* on-screen controls */
#controls{position:absolute;inset:0;z-index:5;pointer-events:none}
.dpad{position:absolute;left:14px;bottom:16px;width:132px;height:132px;pointer-events:auto;opacity:.9}
.dbtn{position:absolute;width:44px;height:44px;background:rgba(30,40,80,.82);border:2px solid var(--line2);border-radius:10px;
  display:grid;place-items:center;color:var(--ink);font-size:16px;box-shadow:0 4px 10px rgba(0,0,0,.4);transition:.08s}
.dbtn:active{background:var(--accent);transform:scale(.92)}
.dbtn.up{left:44px;top:0}.dbtn.down{left:44px;top:88px}.dbtn.left{left:0;top:44px}.dbtn.right{left:88px;top:44px}
.abtn{position:absolute;right:18px;bottom:34px;width:74px;height:74px;pointer-events:auto;border-radius:50%;
  background:radial-gradient(circle at 38% 34%,var(--accent2),var(--accent));border:3px solid #05070f;color:#fff;
  font-weight:900;font-size:22px;box-shadow:0 8px 20px -6px var(--accent);transition:.08s;font-family:var(--mono)}
.abtn:active{transform:scale(.92);filter:brightness(1.1)}
.abtn small{position:absolute;left:50%;top:-15px;transform:translateX(-50%);font-size:8px;letter-spacing:.1em;color:var(--gold);font-family:var(--mono);font-weight:800;white-space:nowrap}
.hint-key{position:absolute;left:50%;bottom:8px;transform:translateX(-50%);z-index:5;font-family:var(--mono);font-size:9px;
  letter-spacing:.1em;color:var(--ink-faint);background:rgba(5,7,15,.5);padding:4px 10px;border-radius:20px}

/* ============================================================ ENCOUNTER OVERLAY ============================================================ */
#encounter{position:absolute;inset:0;z-index:8;display:none;flex-direction:column}
#encounter.on{display:flex;animation:encIn .35s ease both}
@keyframes encIn{from{opacity:0}to{opacity:1}}
#encBg{position:absolute;inset:0;transition:background .8s ease;
  background:radial-gradient(120% 80% at 80% -10%,hsla(var(--hue),70%,52%,.42),transparent 55%),radial-gradient(120% 90% at 10% 110%,hsla(calc(var(--hue) - 25),60%,38%,.5),transparent 60%),linear-gradient(180deg,hsl(var(--hue),42%,20%),hsl(calc(var(--hue) + 8),50%,9%));}
:root[data-theme="light"] #encBg{background:radial-gradient(120% 80% at 80% -10%,hsla(var(--hue),80%,72%,.6),transparent 55%),radial-gradient(120% 90% at 10% 110%,hsla(calc(var(--hue) - 25),70%,72%,.55),transparent 60%),linear-gradient(180deg,hsl(var(--hue),55%,88%),hsl(calc(var(--hue) + 8),60%,80%));}
#encBg::after{content:"";position:absolute;inset:0;opacity:.35;background-image:linear-gradient(var(--line) 1px,transparent 1px),linear-gradient(90deg,var(--line) 1px,transparent 1px);background-size:36px 36px;-webkit-mask-image:radial-gradient(80% 65% at 50% 25%,#000,transparent 90%);mask-image:radial-gradient(80% 65% at 50% 25%,#000,transparent 90%);}
#stage{position:absolute;inset:0;display:flex;align-items:flex-end;justify-content:center;padding:10px 12px 4px}
#surfaceWrap{position:relative;z-index:2;width:100%;max-width:380px;margin:0 auto;display:flex;align-items:center;justify-content:center;height:100%}
.actor{position:absolute;bottom:2%;right:2%;z-index:4;width:min(30%,116px);filter:drop-shadow(0 12px 14px rgba(0,0,0,.45));transform-origin:bottom center}
.actor.enter{animation:actorIn .55s cubic-bezier(.2,.9,.3,1.2) both}
@keyframes actorIn{from{opacity:0;transform:translateX(30px) translateY(6px)}to{opacity:1;transform:none}}
.actor .ci{animation:bob 3.4s ease-in-out infinite;transform-origin:bottom center}
@keyframes bob{0%,100%{transform:translateY(0) scale(1,1)}50%{transform:translateY(-3px) scale(1.008,.992)}}
.actor svg{width:100%;height:auto}
.actor .plate{position:absolute;top:-8px;left:50%;transform:translateX(-50%);font-family:var(--mono);font-size:8.5px;font-weight:700;letter-spacing:.08em;white-space:nowrap;background:var(--panel2);border:1px solid var(--line2);color:var(--ink-soft);padding:2px 7px;border-radius:4px}
.react-good{animation:rgood .6s ease}.react-bad{animation:rbad .5s ease}.react-pop{animation:rpop .45s ease}
@keyframes rgood{0%{transform:translateY(0)}30%{transform:translateY(-16px)}55%{transform:translateY(0)}72%{transform:translateY(-7px)}100%{transform:translateY(0)}}
@keyframes rbad{0%,100%{transform:translateX(0)}15%{transform:translateX(-6px) rotate(-2deg)}30%{transform:translateX(6px) rotate(2deg)}45%{transform:translateX(-5px)}60%{transform:translateX(5px)}75%{transform:translateX(-2px)}}
@keyframes rpop{0%{transform:scale(1)}40%{transform:scale(1.12,.92)}70%{transform:scale(.98,1.03)}100%{transform:scale(1)}}

/* surfaces */
.surface{width:100%;max-width:340px;animation:surfIn .5s cubic-bezier(.2,.8,.3,1) both}
@keyframes surfIn{from{opacity:0;transform:translateY(14px) scale(.96)}to{opacity:1;transform:none}}
.monitor{background:#0a0e22;border:5px solid #050813;border-radius:12px;box-shadow:0 18px 40px -14px rgba(0,0,0,.7),inset 0 0 0 1px rgba(120,160,255,.18);position:relative}
.monitor::before{content:"";position:absolute;left:50%;bottom:-16px;transform:translateX(-50%);width:70px;height:12px;background:#050813;border-radius:0 0 8px 8px;box-shadow:0 8px 10px -6px rgba(0,0,0,.6)}
.monitor .screen{padding:12px 12px 13px;border-radius:8px;overflow:hidden;position:relative;background:radial-gradient(120% 100% at 50% 0,#12204d,#0a1230)}
.monitor .screen::after{content:"";position:absolute;inset:0;pointer-events:none;opacity:.5;background:repeating-linear-gradient(0deg,transparent 0 2px,rgba(0,0,0,.22) 2px 3px);animation:flick 5s steps(60) infinite}
@keyframes flick{0%,97%{opacity:.42}98%{opacity:.28}100%{opacity:.42}}
.led{position:absolute;right:8px;bottom:6px;width:6px;height:6px;border-radius:50%;background:var(--good);box-shadow:0 0 8px var(--good);z-index:3}
.scr-h{display:flex;align-items:center;gap:6px;font-family:var(--mono);font-size:9px;letter-spacing:.14em;text-transform:uppercase;color:#7fa0ff;font-weight:700;margin-bottom:9px}
.scr-h .b{margin-left:auto;color:#5566a0}
.kpis{display:grid;grid-template-columns:1fr 1fr;gap:7px}
.kpi{background:rgba(10,16,40,.72);border:1px solid rgba(120,150,255,.2);border-radius:7px;padding:8px 9px;animation:pop .4s both}
.kpi .k-l{font-size:9px;letter-spacing:.05em;text-transform:uppercase;color:#8fa0d8;font-weight:700;font-family:var(--mono);line-height:1.25}
.kpi .k-row{display:flex;align-items:baseline;gap:6px;margin-top:4px}
.kpi .k-v{font-size:19px;font-weight:800;font-variant-numeric:tabular-nums;color:#eaf0ff;letter-spacing:-.02em}
.kpi .k-t{font-size:10px;font-weight:800;font-family:var(--mono)}
.spark{margin-top:6px;height:16px;width:100%}
.t-dn{color:var(--bad)} .t-up{color:var(--good)} .t-fl{color:#8fa0d8}
@keyframes pop{from{opacity:0;transform:translateY(8px) scale(.96)}to{opacity:1;transform:none}}
.chartbox{padding:2px 2px 0}
.chart-cap{font-size:10.5px;color:#aeb7de;margin-top:9px;line-height:1.4;font-family:var(--mono)}
.chart-cap b{color:#fff}
.whiteboard{background:#f7f8f2;border:6px solid #c9b48a;border-radius:8px;padding:14px 12px 16px;box-shadow:0 18px 40px -14px rgba(0,0,0,.6);position:relative}
.whiteboard::after{content:"";position:absolute;left:12px;right:12px;bottom:-11px;height:8px;background:#b49a6a;border-radius:0 0 5px 5px}
.wb-title{font-family:var(--mono);font-weight:800;font-size:12px;color:#2b4bd0;letter-spacing:.02em;text-transform:uppercase;margin-bottom:11px;display:flex;align-items:center;gap:6px}
.wb-title::before{content:"✎";color:#e0453c}
.notes{display:flex;flex-wrap:wrap;gap:8px}
.note{font-size:11px;font-weight:600;color:#3a3320;line-height:1.35;padding:9px 10px;border-radius:2px;width:calc(50% - 4px);box-shadow:2px 3px 6px rgba(0,0,0,.18);animation:drop .5s cubic-bezier(.2,.9,.3,1.2) both}
.note:nth-child(4n+1){background:#ffe27a;transform:rotate(-2deg)}
.note:nth-child(4n+2){background:#a8e6a1;transform:rotate(1.5deg)}
.note:nth-child(4n+3){background:#ffb3c1;transform:rotate(1deg)}
.note:nth-child(4n){background:#a9d7ff;transform:rotate(-1.5deg)}
.note b{display:block;font-size:15px;color:#151515;margin-bottom:1px;font-variant-numeric:tabular-nums}
@keyframes drop{from{opacity:0;transform:translateY(-14px) rotate(-6deg)}}
.chatwin{background:#0d1430;border:1px solid var(--line2);border-radius:12px;overflow:hidden;box-shadow:0 18px 40px -14px rgba(0,0,0,.65);width:100%;max-width:320px}
.chat-bar{display:flex;align-items:center;gap:7px;padding:8px 11px;background:#161f45;border-bottom:1px solid var(--line)}
.chat-bar .who{font-size:11.5px;font-weight:700}
.chat-bar .dotg{width:7px;height:7px;border-radius:50%;background:var(--good);box-shadow:0 0 7px var(--good)}
.chat-bar .st{font-size:8.5px;color:var(--good);font-family:var(--mono);letter-spacing:.08em;text-transform:uppercase}
.chat-body{padding:11px;display:flex;flex-direction:column;gap:8px;min-height:120px}
.bub{max-width:82%;font-size:12px;line-height:1.4;padding:8px 11px;border-radius:13px;animation:bubin .35s both}
.bub.them{align-self:flex-start;background:#25306a;border-bottom-left-radius:4px}
.bub.me{align-self:flex-end;background:var(--accent);color:#fff;border-bottom-right-radius:4px}
@keyframes bubin{from{opacity:0;transform:translateY(8px) scale(.95)}to{opacity:1;transform:none}}
.vs{display:grid;grid-template-columns:1fr 1fr;gap:8px}
.vs .col{background:rgba(10,16,40,.7);border:1px solid rgba(120,150,255,.2);border-radius:8px;padding:9px}
.vs h5{font-family:var(--mono);font-size:9px;letter-spacing:.1em;text-transform:uppercase;margin-bottom:7px;color:#8fa0d8}
.vs ul{list-style:none;display:flex;flex-direction:column;gap:5px}
.vs li{font-size:10.5px;color:#cdd6f5;display:flex;gap:5px;line-height:1.3}
.vs li .m{flex:none;font-weight:800}
.vs .m.p{color:var(--good)} .vs .m.n{color:var(--bad)}

/* ============================================================ DIALOGUE ============================================================ */
#dialogue{position:relative;z-index:9;flex:none;padding:0 10px calc(10px + env(safe-area-inset-bottom))}
.dbox{position:relative;background:var(--box);border:3px solid #05070f;border-radius:12px;box-shadow:0 -6px 30px rgba(0,0,0,.4),inset 0 0 0 2px var(--box-lite);padding:16px 14px 13px}
.speaker{position:absolute;top:-15px;left:14px;display:flex;align-items:center;gap:8px;background:linear-gradient(180deg,var(--accent),#3a63e6);border:2px solid #05070f;border-radius:8px;padding:3px 11px 3px 5px;box-shadow:0 5px 14px -5px var(--accent)}
.speaker .face{width:26px;height:26px;border-radius:6px;overflow:hidden;background:var(--panel2);flex:none}
.speaker .face svg{width:100%;height:auto;transform:translateY(1px) scale(1.5)}
.speaker .sn{font-size:12px;font-weight:800;color:#fff;letter-spacing:.01em}
.speaker.narr{background:var(--panel2);box-shadow:none}
.speaker.narr .sn{color:var(--ink-faint);font-family:var(--mono);font-size:10px;letter-spacing:.14em;text-transform:uppercase}
#say{font-size:15.5px;line-height:1.55;min-height:3em;letter-spacing:-.003em;color:var(--ink);white-space:pre-wrap;margin-top:4px}
#say .cur{display:inline-block;width:9px;height:1.02em;transform:translateY(2px);background:var(--gold);margin-left:2px;animation:blink 1s steps(2) infinite}
@keyframes blink{50%{opacity:0}}
.tapon{margin-top:9px;text-align:right;font-family:var(--mono);font-size:9px;letter-spacing:.14em;text-transform:uppercase;color:var(--ink-faint);font-weight:700}
.tapon b{color:var(--gold);animation:nudge 1.2s ease-in-out infinite;display:inline-block}
@keyframes nudge{0%,100%{transform:translateX(0)}50%{transform:translateX(4px)}}
#choices{margin-top:12px;display:flex;flex-direction:column;gap:7px}
.choice{position:relative;text-align:left;cursor:pointer;background:var(--panel);color:var(--ink);border:2px solid var(--line2);border-radius:8px;padding:11px 12px 11px 30px;font-size:13.5px;line-height:1.35;font-weight:600;transition:transform .12s,border-color .15s,background .15s;animation:choin .3s both}
.choice[style*="--i"]{animation-delay:calc(var(--i)*.05s)}
@keyframes choin{from{opacity:0;transform:translateX(-8px)}to{opacity:1;transform:none}}
.choice::before{content:"▶";position:absolute;left:11px;top:50%;transform:translateY(-50%) scale(.4);opacity:0;color:var(--gold);font-size:11px;transition:.15s}
.choice:hover,.choice.sel{border-color:var(--gold);background:var(--box-lite)}
.choice:hover::before,.choice.sel::before{opacity:1;transform:translateY(-50%) scale(1)}
.choice:active{transform:scale(.99)}
.choice:focus-visible{outline:2px solid var(--gold);outline-offset:2px}
.choice[disabled]{opacity:.35;pointer-events:none}
.conseq{margin-top:12px;display:flex;gap:11px;align-items:stretch;animation:pop .4s both}
.conseq .body{flex:1;min-width:0}
.conseq .lead{font-family:var(--mono);font-size:8.5px;letter-spacing:.16em;text-transform:uppercase;font-weight:800;color:var(--accent2);margin-bottom:5px}
.conseq p{font-size:13px;line-height:1.5;color:var(--ink-soft)}
.conseq p b{color:var(--ink)}
.impact{flex:none;width:74px;background:var(--panel2);border:1px solid var(--line);border-radius:8px;padding:7px 6px;display:flex;flex-direction:column;align-items:center;gap:2px}
.impact .il{font-family:var(--mono);font-size:7px;letter-spacing:.06em;text-transform:uppercase;color:var(--ink-faint);text-align:center;line-height:1.2}
.impact svg{width:100%;height:30px}
.impact .iv{font-family:var(--mono);font-size:10px;font-weight:800}
.btn{cursor:pointer;border:2px solid #05070f;border-radius:9px;background:linear-gradient(180deg,var(--accent),#3a63e6);color:#fff;font-weight:800;font-size:14px;letter-spacing:.02em;padding:13px;width:100%;margin-top:11px;box-shadow:0 8px 20px -8px var(--accent);transition:transform .12s,filter .15s}
.btn:hover{filter:brightness(1.08);transform:translateY(-1px)}
.btn:active{transform:translateY(0)}
.btn.ghost{background:var(--panel);border-color:var(--line2);box-shadow:none}

/* ============================================================ TITLE / RESULT ============================================================ */
.screen{position:absolute;inset:0;z-index:10;display:flex;flex-direction:column;overflow-y:auto;-webkit-overflow-scrolling:touch;background:var(--bg)}
.title-s{justify-content:center;align-items:center;text-align:center;padding:24px 22px;
  background:radial-gradient(120% 80% at 80% 0,hsla(225,70%,45%,.4),transparent 55%),radial-gradient(120% 90% at 10% 110%,hsla(200,60%,35%,.5),transparent 60%),linear-gradient(180deg,#141d44,#080b1c)}
.hero-art{width:150px;margin:0 auto 6px;filter:drop-shadow(0 16px 20px rgba(0,0,0,.5))}
.hero-art .ci{animation:bob 3.4s ease-in-out infinite;transform-origin:bottom center}
.eyebrow{font-family:var(--mono);font-size:10px;letter-spacing:.28em;text-transform:uppercase;color:var(--accent2);font-weight:700}
.game-title{font-size:clamp(34px,11vw,52px);font-weight:900;letter-spacing:-.035em;line-height:.92;margin:12px 0 0;text-wrap:balance;color:#fff}
.game-title .g{color:var(--gold)}
.tag{margin:16px auto 0;font-size:14.5px;line-height:1.55;color:var(--ink-soft);max-width:32ch}
.chips{display:flex;flex-wrap:wrap;gap:7px;justify-content:center;margin-top:20px}
.chip{font-family:var(--mono);font-size:10px;font-weight:700;letter-spacing:.04em;padding:6px 10px;border-radius:20px;background:rgba(20,29,58,.7);border:1px solid var(--line);color:var(--ink-soft)}
.chip b{color:var(--ink)}
.press{margin-top:22px;font-family:var(--mono);font-size:11px;letter-spacing:.16em;text-transform:uppercase;color:var(--gold);font-weight:700;animation:blink2 1.3s steps(2) infinite}
@keyframes blink2{50%{opacity:.25}}
.result-s{padding:20px 20px 26px;justify-content:flex-start;text-align:center}
.rank-badge{width:118px;margin:6px auto 2px;animation:badgeIn .7s cubic-bezier(.2,.9,.3,1.3) both}
@keyframes badgeIn{from{opacity:0;transform:scale(.4) rotate(-12deg)}to{opacity:1;transform:none}}
.r-kick{font-family:var(--mono);font-size:10px;letter-spacing:.2em;text-transform:uppercase;color:var(--ink-faint);font-weight:700;margin-top:4px}
.r-title{font-size:clamp(28px,8.5vw,40px);font-weight:900;letter-spacing:-.02em;margin-top:8px;text-wrap:balance;line-height:1.02}
.t5{color:var(--gold)} .t4{color:var(--good)} .t3{color:var(--accent2)} .t2{color:var(--warn)} .t1{color:var(--bad)}
.r-sub{margin:12px auto 0;font-size:13.5px;line-height:1.55;color:var(--ink-soft);max-width:40ch}
.dims{margin:22px auto 0;max-width:400px;display:flex;flex-direction:column;gap:11px;text-align:left}
.dim .dt{display:flex;justify-content:space-between;align-items:baseline;margin-bottom:5px}
.dim .dn{font-size:12.5px;font-weight:700}
.dim .dv{font-family:var(--mono);font-size:10px;font-weight:800;letter-spacing:.05em;text-transform:uppercase}
.dim .bar{height:9px;border-radius:20px;background:var(--line);overflow:hidden}
.dim .fill{height:100%;width:0;border-radius:20px;transition:width 1.1s cubic-bezier(.2,.7,.2,1)}
.l4{color:var(--good)} .fill.l4{background:linear-gradient(90deg,var(--good),#7ff0c4)}
.l3{color:var(--accent2)} .fill.l3{background:linear-gradient(90deg,var(--accent),var(--accent2))}
.l2{color:var(--warn)} .fill.l2{background:linear-gradient(90deg,#cf8a1e,var(--warn))}
.l1{color:var(--bad)} .fill.l1{background:linear-gradient(90deg,#c23c52,var(--bad))}
.review{margin:22px auto 0;max-width:400px;display:flex;flex-direction:column;gap:8px;text-align:left}
.review h4{font-family:var(--mono);font-size:9px;letter-spacing:.16em;text-transform:uppercase;color:var(--ink-faint);font-weight:800}
.rv{display:flex;gap:9px;font-size:12.5px;line-height:1.45;color:var(--ink-soft)}
.rv .mk{flex:none;font-weight:900;font-family:var(--mono)}
.rv.g .mk{color:var(--good)} .rv.b .mk{color:var(--bad)} .rv.m .mk{color:var(--warn)}
.rv b{color:var(--ink)}
.disc{margin:18px auto 0;max-width:38ch;font-size:11px;line-height:1.5;color:var(--ink-faint);font-family:var(--mono)}
#confetti{position:absolute;inset:0;z-index:2;pointer-events:none}
.fade{animation:fadeIn .45s ease both}
@keyframes fadeIn{from{opacity:0}to{opacity:1}}
.shake{animation:scr .4s ease}
@keyframes scr{0%,100%{transform:translate(0,0)}20%{transform:translate(-4px,2px)}40%{transform:translate(4px,-2px)}60%{transform:translate(-3px,-1px)}80%{transform:translate(3px,1px)}}
.flash{position:absolute;inset:0;z-index:7;pointer-events:none;opacity:0}
.flash.go{animation:fl .5s ease}
@keyframes fl{0%{opacity:0}25%{opacity:.5}100%{opacity:0}}
@media (prefers-reduced-motion:reduce){*{animation-duration:.001ms !important;animation-iteration-count:1 !important;transition-duration:.001ms !important}}
@media (max-width:360px){.actor{width:26%} #say{font-size:15px}}