:root{--bg:#121418;--bg-2:#171a20;--surface:#1c2027;--surface-2:#232832;--border:#2e3440;--border-2:#3a4150;--text:#eef1f6;--muted:#98a1b2;--cyan:#2ee6f0;--cyan-deep:#0f7f88;--orange:#ff8a2a;--orange-deep:#9a4a0e;--token:#fff3a0;--go:#b9ff5c;--danger:#ff5a6a;--radius:18px;--radius-sm:12px;--font:ui-rounded, "SF Pro Rounded", "Segoe UI Variable Display", "Segoe UI", system-ui, -apple-system, Roboto, "Helvetica Neue", Arial, sans-serif;--mono:ui-monospace, "SF Mono", "Cascadia Mono", Menlo, Consolas, monospace;--safe-b:env(safe-area-inset-bottom,0px);--safe-l:env(safe-area-inset-left,0px);--safe-r:env(safe-area-inset-right,0px)}*{box-sizing:border-box}html,body{background:var(--bg);height:100%;color:var(--text);font-family:var(--font);-webkit-font-smoothing:antialiased;-webkit-tap-highlight-color:transparent;margin:0}body{background:radial-gradient(1200px 600px at 15% -10%, #2ee6f012, transparent 60%), radial-gradient(1000px 600px at 110% 110%, #ff8a2a12, transparent 60%), var(--bg);min-height:100dvh}body[data-screen=game]{overscroll-behavior:none;touch-action:none;-webkit-user-select:none;user-select:none;position:fixed;inset:0;overflow:hidden}button,input{font:inherit;color:inherit}[hidden]{display:none!important}.screen{min-height:100dvh;padding:24px 16px;display:none}body[data-screen=menu] #screen-menu,body[data-screen=connecting] #screen-connecting,body[data-screen=lobby] #screen-lobby{place-items:center;display:grid}body[data-screen=game] #screen-game{display:flex}.card{background:linear-gradient(180deg, var(--surface) 0%, var(--bg-2) 100%);border:1px solid var(--border);border-radius:var(--radius);padding:28px;box-shadow:0 24px 60px #00000073,inset 0 1px #ffffff0a}.muted{color:var(--muted)}.small{font-size:.86rem}.center{text-align:center}.logo{letter-spacing:-.04em;text-align:center;-webkit-user-select:none;user-select:none;margin:0;font-size:clamp(3.2rem,11vw,5.2rem);font-style:italic;font-weight:900;line-height:.9;transform:skew(-6deg)}.logo-s{color:var(--text);text-shadow:-4px 0 0 var(--cyan), 4px 0 0 var(--orange)}.logo-bang{color:var(--token);text-shadow:0 0 22px #fff3a08c;animation:1.6s ease-in-out infinite bang;display:inline-block}@keyframes bang{0%,to{transform:translateY(0)rotate(0)}50%{transform:translateY(-4px)rotate(8deg)}}.tagline{text-align:center;color:var(--muted);letter-spacing:.02em;margin:12px 0 22px;font-weight:700}.menu-wrap{grid-template-columns:minmax(0,1.15fr) minmax(0,1fr);align-items:stretch;gap:18px;width:min(920px,100%);display:grid}@media (max-width:760px){.menu-wrap{grid-template-columns:1fr}}.menu-card{flex-direction:column;gap:12px;display:flex}.field{flex-direction:column;gap:6px;display:flex}.field-label,.eyebrow{text-transform:uppercase;letter-spacing:.14em;color:var(--muted);font-size:.74rem;font-weight:800}input[type=text]{background:var(--bg);border:1px solid var(--border-2);border-radius:var(--radius-sm);outline:none;width:100%;padding:13px 14px;font-size:1.05rem;font-weight:700;transition:border-color .15s,box-shadow .15s}input[type=text]:focus{border-color:var(--cyan);box-shadow:0 0 0 3px #2ee6f02e}.code-input{text-transform:uppercase;letter-spacing:.3em;text-align:center;font-family:var(--mono)!important}.code-input::placeholder{letter-spacing:.18em}.join-row{grid-template-columns:1fr auto;gap:10px;display:grid}.form-error{min-height:1.2em;color:var(--danger);margin:0;font-size:.88rem;font-weight:700}.divider{color:var(--muted);text-transform:uppercase;letter-spacing:.12em;align-items:center;gap:12px;margin:6px 0 0;font-size:.8rem;font-weight:800;display:flex}.divider:before,.divider:after{content:"";background:var(--border);flex:1;height:1px}.explainer{color:var(--muted);margin:4px 0 0;font-size:.92rem;line-height:1.5}.explainer strong{color:var(--text)}.howto-card h2{text-transform:uppercase;letter-spacing:.12em;color:var(--muted);margin:0 0 14px;font-size:1.05rem}.howto{gap:12px;margin:0;padding:0;list-style:none;display:grid}.howto li{align-items:center;gap:12px;font-weight:650;line-height:1.35;display:flex}.howto li>span:last-child{flex:1}.howto em{color:var(--token);font-style:normal}.chip{border:1px solid var(--border-2);background:var(--surface-2);border-radius:9px;flex:0 0 30px;height:30px;position:relative}.chip:after{content:"";margin:auto;position:absolute;inset:0}.chip-token:after{background:var(--token);width:12px;height:12px;box-shadow:0 0 12px var(--token);border-radius:50%}.chip-home:after{border:3px solid var(--cyan);border-left:0;border-radius:0 6px 6px 0;width:14px;height:18px}.chip-dash:after{background:linear-gradient(90deg, transparent, var(--orange));width:18px;height:4px;box-shadow:0 -6px 0 -1px #ff8a2a80,0 6px 0 -1px #ff8a2a80}.chip-win:after{content:"3";color:var(--go);place-items:center;font-weight:900;display:grid}.keys{color:var(--muted);flex-wrap:wrap;gap:8px 16px;margin-top:18px;font-size:.85rem;display:flex}kbd{font-family:var(--mono);background:var(--bg);border:1px solid var(--border-2);color:var(--text);border-bottom-width:3px;border-radius:6px;padding:2px 6px;font-size:.78rem;font-weight:700}.local-stats{color:var(--muted);margin:18px 0 0;font-size:.82rem}@media (hover:none) and (pointer:coarse){.keys{display:none}}.btn{appearance:none;border:1px solid var(--border-2);background:var(--surface-2);border-radius:var(--radius-sm);letter-spacing:.01em;cursor:pointer;touch-action:manipulation;white-space:nowrap;padding:12px 18px;font-weight:800;transition:transform 80ms,background .15s,border-color .15s,box-shadow .15s,opacity .15s}.btn:hover:not(:disabled){background:#2a303b;border-color:#4b5466}.btn:active:not(:disabled){transform:translateY(1px)scale(.99)}.btn:focus-visible{outline-offset:2px;outline:3px solid #2ee6f080}.btn:disabled{opacity:.4;cursor:not-allowed}.btn-primary{background:var(--cyan);border-color:var(--cyan);color:#04282b;box-shadow:0 8px 24px #2ee6f038}.btn-primary:hover:not(:disabled){background:#5ff0f7;border-color:#5ff0f7}.btn-secondary{background:0 0}.btn-go{background:var(--go);border-color:var(--go);color:#1a2a04;box-shadow:0 8px 24px #b9ff5c33}.btn-go:hover:not(:disabled){background:#cdff8a;border-color:#cdff8a}.btn-ghost{color:var(--muted);background:0 0;border-color:#0000}.btn-ghost:hover:not(:disabled){color:var(--text);background:#ffffff0a;border-color:#0000}.btn-big{padding:16px 20px;font-size:1.12rem}.btn-sm{padding:8px 12px;font-size:.86rem}.btn.is-ready,.btn.is-ready:hover:not(:disabled){color:var(--go);border-color:var(--go);box-shadow:none;background:0 0}.icon-btn{z-index:40;border:1px solid var(--border-2);cursor:pointer;-webkit-backdrop-filter:blur(6px);backdrop-filter:blur(6px);background:#1c2027d9;border-radius:12px;place-items:center;width:44px;height:44px;font-size:1rem;display:grid;position:fixed}.icon-btn svg{width:20px;height:20px}.mute-btn{top:12px;right:calc(12px + var(--safe-r))}.pause-btn{top:12px;left:calc(12px + var(--safe-l));letter-spacing:-2px;font-size:.8rem}body:not([data-screen=game]) .pause-btn{display:none}.voice-dock{z-index:40;top:12px;right:calc(64px + var(--safe-r));gap:8px;display:flex;position:fixed}.voice-dock .icon-btn{color:var(--muted);position:relative;top:auto;left:auto;right:auto}.voice-btn:after{content:"";pointer-events:none;box-shadow:0 0 0 calc(var(--lvl,0) * 5px) #b9ff5c8c;border-radius:14px;transition:box-shadow 80ms linear;position:absolute;inset:-3px}.mic-btn[data-state=live]{color:#1a2a04;background:var(--go);border-color:var(--go)}.mic-btn[data-state=muted]{color:var(--danger);border-color:#ff5a6a99}.mic-btn[data-state=requesting]{color:var(--token);animation:.9s ease-in-out infinite pulse}.mic-btn[data-state=error]{color:var(--danger)}.opp-voice[data-state=off]{opacity:.45}.opp-voice[data-state=live]{color:var(--text);border-color:#b9ff5c99}.opp-voice[data-state=muted]{color:var(--muted)}.opp-voice[data-state=silenced]{color:var(--danger)}.opp-voice[data-state=gesture]{color:var(--token);border-color:var(--token);animation:.9s ease-in-out infinite pulse}body.voice-ui .hud{padding-right:calc(166px + var(--safe-r))}.voice-hint{margin:-8px 0 0}body:not(.voice-ui) .voice-hint{display:none}@media (max-height:520px){.voice-dock{top:8px;right:calc(56px + var(--safe-r))}body.voice-ui .hud{padding-right:calc(148px + var(--safe-r))}}@media (max-width:560px){body.voice-ui .hud{padding-right:calc(150px + var(--safe-r))}body.voice-ui .hud-name{display:none}}.status-card{text-align:center;justify-items:center;gap:10px;width:min(440px,100%);display:grid}.status-card h2{margin:6px 0 0}.status-card p{margin:0;line-height:1.5}.spinner{border:4px solid var(--border-2);border-top-color:var(--cyan);border-right-color:var(--orange);border-radius:50%;width:46px;height:46px;animation:.9s linear infinite spin}@keyframes spin{to{transform:rotate(360deg)}}.progress{background:var(--border);border-radius:4px;width:100%;height:4px;margin:8px 0;overflow:hidden}.progress-bar{background:linear-gradient(90deg, var(--cyan), var(--orange));width:0;height:100%;transition:width .25s linear}.lobby-card{gap:18px;width:min(620px,100%);display:grid}.lobby-head{flex-wrap:wrap;justify-content:space-between;align-items:flex-end;gap:16px;display:flex}.room-code{font-family:var(--mono);letter-spacing:.22em;color:var(--token);text-shadow:0 0 24px #fff3a040;-webkit-user-select:all;user-select:all;font-size:clamp(2.2rem,9vw,3.1rem);font-weight:900;line-height:1.05}.lobby-share{flex-wrap:wrap;gap:8px;display:flex}.lobby-status{background:var(--bg);border:1px solid var(--border);border-radius:999px;align-items:center;gap:10px;width:-moz-fit-content;width:fit-content;padding:10px 14px;font-weight:800;display:flex}.lobby-status .dot{background:var(--muted);border-radius:50%;width:10px;height:10px}.lobby-status[data-kind=waiting] .dot{background:var(--token);animation:1.2s ease-in-out infinite pulse}.lobby-status[data-kind=connected] .dot{background:var(--cyan)}.lobby-status[data-kind=ready] .dot{background:var(--go)}.lobby-status[data-kind=starting] .dot{background:var(--go);animation:.5s ease-in-out infinite pulse}.lobby-status[data-kind=lost] .dot{background:var(--danger)}@keyframes pulse{50%{opacity:.3;transform:scale(.8)}}.slots{grid-template-columns:1fr auto 1fr;align-items:center;gap:12px;display:grid}@media (max-width:520px){.slots{grid-template-columns:1fr}.vs{justify-self:center}}.vs{color:var(--muted);font-style:italic;font-weight:900}.slot{background:var(--bg);border:2px solid var(--border);border-radius:14px;grid-template-rows:auto auto;grid-template-columns:auto 1fr;gap:6px 12px;padding:14px;transition:border-color .2s,box-shadow .2s;display:grid}.slot-badge{background:var(--surface-2);border-radius:12px;grid-row:span 2;place-items:center;width:44px;height:44px;display:grid}.slot-name{text-overflow:ellipsis;white-space:nowrap;font-size:1.1rem;font-weight:900;overflow:hidden}.slot-meta{color:var(--muted);align-items:center;gap:6px;font-size:.78rem;font-weight:700;display:flex}.slot-meta .conn{background:var(--border-2);border-radius:50%;width:8px;height:8px}.slot.connected .conn{background:var(--go);box-shadow:0 0 8px var(--go)}.slot-ready{text-align:center;text-transform:uppercase;letter-spacing:.12em;color:var(--muted);background:var(--surface);border-radius:8px;grid-column:1/-1;padding:6px;font-size:.8rem;font-weight:900}.slot.ready .slot-ready{color:#1a2a04;background:var(--go)}.slot-cyan.connected{border-color:#2ee6f073}.slot-orange.connected{border-color:#ff8a2a73}.slot.empty .slot-name{color:var(--muted)}.slot.me .slot-name:after{content:" (you)";color:var(--muted);font-size:.8rem;font-weight:700}.lobby-actions{grid-template-columns:1fr 1fr;gap:10px;display:grid}.lobby-card>.btn-ghost{justify-self:center}#lobby-hint{min-height:1.2em;margin:-6px 0 0}.toggle{cursor:pointer;color:var(--muted);align-items:center;gap:12px;font-size:.92rem;display:flex}.toggle strong{color:var(--text)}.toggle input{opacity:0;pointer-events:none;position:absolute}.toggle-ui{background:var(--border-2);border-radius:999px;flex:0 0 42px;height:24px;transition:background .15s;position:relative}.toggle-ui:after{content:"";background:var(--text);border-radius:50%;width:18px;height:18px;transition:transform .15s;position:absolute;top:3px;left:3px}.toggle input:checked+.toggle-ui{background:var(--go)}.toggle input:checked+.toggle-ui:after{background:#1a2a04;transform:translate(18px)}.toggle input:focus-visible+.toggle-ui{outline-offset:2px;outline:3px solid #2ee6f080}.toggle input:disabled~*{opacity:.6}.toggle.locked{cursor:default}.shape{flex:none;width:18px;height:18px;display:inline-block}.shape-circle{border:3px solid var(--cyan);border-radius:50%;box-shadow:0 0 10px #2ee6f073}.shape-diamond{border:3px solid var(--orange);border-radius:4px;transform:rotate(45deg)scale(.86);box-shadow:0 0 10px #ff8a2a73}#screen-game{flex-direction:column;align-items:stretch;padding:0;position:fixed;inset:0}.hud{padding:10px calc(68px + var(--safe-r)) 6px calc(68px + var(--safe-l));flex:none;grid-template-columns:1fr auto 1fr;align-items:center;gap:12px;font-weight:900;display:grid}.hud-side{align-items:center;gap:10px;min-width:0;display:flex}.hud-right{justify-content:flex-end}.hud-name{color:var(--muted);text-overflow:ellipsis;white-space:nowrap;font-size:clamp(.8rem,2.2vw,1rem);overflow:hidden}.hud-name.me{color:var(--text)}.hud-score{font-variant-numeric:tabular-nums;text-align:center;min-width:1.2ch;font-size:clamp(1.7rem,5vw,2.6rem);line-height:1}.hud-left .hud-score{color:var(--cyan);text-shadow:0 0 18px #2ee6f059}.hud-right .hud-score{color:var(--orange);text-shadow:0 0 18px #ff8a2a59}.hud-score.bump{animation:.5s cubic-bezier(.2,1.6,.4,1) scorebump}@keyframes scorebump{0%{transform:scale(1)}30%{transform:scale(1.6)}to{transform:scale(1)}}.hud-center{text-align:center}.hud-timer{font-family:var(--mono);font-variant-numeric:tabular-nums;background:var(--surface);border:1px solid var(--border);border-radius:10px;padding:4px 14px;font-size:clamp(1.3rem,4vw,1.9rem);font-weight:900}.hud-timer.low{color:var(--danger);border-color:#ff5a6a66}.hud-timer.sudden{color:var(--token);font-family:var(--font);letter-spacing:.08em;border-color:#fff3a073;font-size:clamp(.85rem,2.6vw,1.15rem);animation:1s ease-in-out infinite pulse}.hud-event{letter-spacing:.14em;text-transform:uppercase;min-height:1.2em;color:var(--go);margin-top:4px;font-size:.74rem}#game-stage{flex:auto;min-height:0;position:relative}#game-root{position:absolute;inset:0}#game-root canvas{display:block}.center-banner{pointer-events:none;text-align:center;z-index:5;place-items:center;font-style:italic;font-weight:900;display:grid;position:absolute;inset:0}.center-banner .big{letter-spacing:-.03em;text-shadow:0 6px 30px #0009;font-size:clamp(3rem,14vw,8rem);line-height:1;animation:.9s cubic-bezier(.2,1.4,.4,1) both popin}.center-banner .mid{text-shadow:0 6px 30px #0009;font-size:clamp(1.6rem,6vw,3.4rem);line-height:1.05;animation:.6s cubic-bezier(.2,1.4,.4,1) both popin}.center-banner .sub{color:var(--text);opacity:.85;letter-spacing:.04em;margin-top:8px;font-size:.42em;font-style:normal;display:block}.center-banner .cyan{color:var(--cyan)}.center-banner .orange{color:var(--orange)}.center-banner .token{color:var(--token)}.center-banner .go{color:var(--go)}.center-banner .warn{border:1px solid var(--border-2);background:#121418e0;border-radius:12px;padding:12px 20px;font-size:clamp(1rem,3.5vw,1.4rem);font-style:normal}@keyframes popin{0%{opacity:0;transform:scale(2.2)}35%{opacity:1;transform:scale(.94)}70%{transform:scale(1.02)}to{opacity:1;transform:scale(1)}}.net-pill{right:calc(12px + var(--safe-r));z-index:6;color:var(--muted);letter-spacing:.06em;border:1px solid var(--border);pointer-events:none;background:#121418b3;border-radius:999px;padding:4px 9px;font-size:.72rem;font-weight:800;position:absolute;bottom:10px}.net-pill.bad{color:var(--danger);border-color:#ff5a6a80}.net-pill:empty{display:none}@media (max-height:520px){.hud{padding-top:6px;padding-bottom:2px}.hud-score{font-size:1.6rem}.hud-timer{padding:2px 10px;font-size:1.15rem}.hud-event{margin-top:2px;font-size:.66rem}.icon-btn{width:38px;height:38px;top:8px}}body.touch .net-pill{left:50%;right:auto;bottom:calc(4px + var(--safe-b));opacity:.8;transform:translate(-50%)}.touch-controls{display:none}body.touch .touch-controls{z-index:20;pointer-events:none;height:0;display:block;position:absolute;inset:auto 0 0}.joystick,.dash-btn{pointer-events:auto;touch-action:none;position:fixed}.joystick{left:calc(18px + var(--safe-l));bottom:calc(18px + var(--safe-b));aspect-ratio:1;width:clamp(120px,30vmin,170px)}.joy-ring{background:#1c202759;border:2px solid #eef1f62e;border-radius:50%;position:absolute;inset:0}.joystick.active .joy-ring{border-color:#2ee6f080}.joy-knob{aspect-ratio:1;background:#eef1f638;border:2px solid #eef1f673;border-radius:50%;width:42%;position:absolute;top:50%;left:50%;transform:translate(-50%,-50%)}.dash-btn{right:calc(22px + var(--safe-r));bottom:calc(26px + var(--safe-b));aspect-ratio:1;letter-spacing:.08em;color:#fff;background:conic-gradient(var(--btn-color,var(--cyan)) calc(var(--ready,1) * 360deg), #ffffff0f 0) border-box;-webkit-user-select:none;user-select:none;border:4px solid #0000;border-radius:50%;place-items:center;width:clamp(92px,24vmin,128px);font-weight:900;display:grid;box-shadow:0 8px 26px #0006}.dash-btn span{background:#1c2027eb;border-radius:50%;place-items:center;width:100%;height:100%;display:grid}.dash-btn.pressed{transform:scale(.93)}.dash-btn.cooling span{color:var(--muted)}.rotate-hint{display:none}@media (orientation:portrait){body.touch .rotate-hint{color:var(--muted);border:1px solid var(--border);white-space:nowrap;z-index:7;background:#121418cc;border-radius:999px;padding:6px 12px;font-size:.78rem;font-weight:800;display:block;position:absolute;top:64px;left:50%;transform:translate(-50%)}}.overlay{z-index:50;-webkit-backdrop-filter:blur(6px);backdrop-filter:blur(6px);background:#0a0b0ea8;place-items:center;padding:16px;animation:.18s both fade;display:grid;position:fixed;inset:0}@keyframes fade{0%{opacity:0}}.overlay-card{text-align:center;gap:14px;width:min(440px,100%);animation:.28s cubic-bezier(.2,1.2,.4,1) both rise;display:grid}@keyframes rise{0%{opacity:0;transform:translateY(20px)scale(.97)}}.overlay-card h2{margin:0}.overlay-card p{margin:0;line-height:1.5}.overlay-card .toggle{text-align:left}.overlay-actions{gap:10px;margin-top:6px;display:grid}.overlay-actions .row{grid-template-columns:1fr 1fr;gap:10px;display:grid}.alert-icon{color:#2a0a0f;background:var(--danger);border-radius:50%;justify-self:center;place-items:center;width:52px;height:52px;font-size:1.5rem;font-weight:900;display:grid}.alert-icon.info{background:var(--token);color:#2a2507}.results-card{width:min(480px,100%)}.res-outcome{letter-spacing:-.03em;font-size:clamp(2.4rem,10vw,3.6rem);font-style:italic;font-weight:900;line-height:1}.res-outcome.win{color:var(--go);text-shadow:0 0 30px #b9ff5c59}.res-outcome.lose{color:var(--muted)}.res-score{background:var(--bg);border:1px solid var(--border);border-radius:14px;grid-template-columns:1fr auto 1fr;align-items:center;gap:12px;padding:14px;display:grid}.res-side{align-items:center;gap:8px;min-width:0;font-weight:800;display:flex}.res-side span:not(.shape){text-overflow:ellipsis;white-space:nowrap;color:var(--muted);font-size:.9rem;overflow:hidden}.res-side strong{font-size:2.2rem;line-height:1}.res-cyan strong{color:var(--cyan);margin-left:auto}.res-orange{justify-content:flex-start}.res-orange strong{color:var(--orange);margin-right:auto}.res-cyan.winner,.res-orange.winner{text-shadow:0 0 16px}.res-dash{color:var(--muted);font-weight:900}.res-meta{color:var(--muted);justify-content:center;gap:18px;font-size:.86rem;font-weight:700;display:flex}.res-rematch{min-height:1.4em;color:var(--token);font-weight:800}.toast{left:50%;bottom:calc(22px + var(--safe-b));z-index:60;opacity:0;pointer-events:none;background:var(--surface-2);border:1px solid var(--border-2);text-align:center;border-radius:999px;max-width:calc(100vw - 32px);padding:10px 18px;font-size:.9rem;font-weight:800;transition:opacity .2s,transform .2s;position:fixed;transform:translate(-50%,20px)}.toast.show{opacity:1;transform:translate(-50%)}@media (prefers-reduced-motion:reduce){*,:before,:after{transition-duration:.01ms!important;animation-duration:.01ms!important;animation-iteration-count:1!important}}body.reduce-motion *,body.reduce-motion :before,body.reduce-motion :after{transition-duration:.01ms!important;animation-duration:.01ms!important;animation-iteration-count:1!important}
