:root{--bg:#05060e;--panel-bg:#060a18db;--panel-border:#24406e;--neon:#4dd2ff;--neon-dim:#2a7ba6;--text:#cfe6ff;--text-dim:#7d94b8;--danger:#ff5c5c;--ok:#7dff6e;--warn:#ffd75c;--mono:"Courier New", ui-monospace, SFMono-Regular, Menlo, Consolas, monospace}*{box-sizing:border-box;margin:0;padding:0}html,body{height:100%;overflow:hidden}body{background:var(--bg);color:var(--text);font-family:var(--mono);letter-spacing:.06em}button,input{letter-spacing:inherit;font-family:inherit}:root{--pf-left:0px;--pf-top:0px;--pf-w:100vw;--pf-h:100vh;--tile:calc(var(--pf-h) / 36)}#gl,#hud,#banners,#touch,#flash,#crt{inset:auto;left:var(--pf-left);top:var(--pf-top);width:var(--pf-w);height:var(--pf-h);position:fixed}#gl{z-index:0;display:block}#hud[hidden],body:not(.in-game) #hud{display:none}#touch{z-index:5;touch-action:none;-webkit-user-select:none;user-select:none;display:none}body.in-game #touch{display:block}.touch-hint{bottom:max(9%, env(safe-area-inset-bottom,0px));letter-spacing:.3em;color:var(--text-dim);pointer-events:none;opacity:0;border:1px dashed #7d94b880;padding:14px 18px;font-size:13px;position:absolute}.touch-hint-move{left:7%}.touch-hint-fire{right:7%}#touch.hints .touch-hint{animation:5s ease-out forwards hint-fade}@keyframes hint-fade{0%{opacity:0}10%{opacity:.9}75%{opacity:.9}to{opacity:0}}#rotate{z-index:90;text-align:center;letter-spacing:.2em;color:var(--warn);pointer-events:none;background:#1e1804e6;border-top:1px solid #ffd75c80;padding:7px;font-size:12px;display:none;position:fixed;bottom:0;left:0;right:0}@media (pointer:coarse) and (orientation:landscape){body.in-game #rotate{display:block}}#hud{z-index:10;pointer-events:none;justify-content:space-between;align-items:flex-start;gap:12px;padding:10px 16px;display:flex}#hud .hud-players{flex:0 auto;min-width:0}#hud .hud-hi{flex:none}#banners{z-index:20;pointer-events:none;flex-direction:column;justify-content:center;align-items:center;display:flex}#ui{z-index:30;position:fixed;inset:0;overflow-y:auto}#ui:empty{display:none}#flash{z-index:40;opacity:0;pointer-events:none;background:#fff}#flash.on{animation:.28s ease-out flash-anim}@keyframes flash-anim{0%{opacity:.55}to{opacity:0}}#crt{z-index:80;pointer-events:none;background:repeating-linear-gradient(0deg,#00000021 0 1px,#0000 1px 3px)}#crt:after{content:"";background:radial-gradient(#0000 58%,#02040e80 100%);position:absolute;inset:0}#connbar{z-index:95;text-align:center;color:#ffb3bb;border-bottom:1px solid var(--danger);text-shadow:0 0 8px var(--danger);background:#400c16eb;padding:8px;font-size:13px;position:fixed;top:0;left:0;right:0}#toasts{z-index:96;pointer-events:none;flex-direction:column;align-items:center;gap:8px;display:flex;position:fixed;bottom:22px;left:50%;transform:translate(-50%)}.toast{border:1px solid var(--danger);color:#ffc4cb;background:#3c0a14eb;padding:8px 18px;font-size:13px;box-shadow:0 0 14px #ff5c5c59}.screen{justify-content:center;align-items:center;min-height:100%;padding:24px;display:flex}.panel{background:var(--panel-bg);border:2px solid var(--panel-border);text-align:center;width:100%;max-width:min(520px,92vw);padding:2.2rem 2.8rem;box-shadow:0 0 24px #4dd2ff1f,inset 0 0 40px #080e22b3}.title{flex-direction:column;gap:.1em;margin-bottom:.6rem;font-weight:700;line-height:1;display:flex}.title-a{color:#eaf7ff;text-shadow:0 0 6px var(--neon), 0 0 22px var(--neon), 3px 3px 0 #b0329a;font-size:clamp(2.6rem,9vw,4.2rem)}.title-b{color:var(--warn);letter-spacing:.55em;text-indent:.55em;text-shadow:0 0 12px #ffd75cb3;font-size:clamp(1.3rem,4.5vw,2rem)}.conn-status{color:var(--ok);text-shadow:0 0 8px #7dff6e99;margin-bottom:1.4rem;font-size:11px}.conn-status:after{content:"● ONLINE"}body.offline .conn-status{color:var(--warn);text-shadow:0 0 8px #ffd75c99}body.offline .conn-status:after{content:"◌ CONNECTING TO SERVER…";animation:1.2s ease-in-out infinite pulse}@keyframes pulse{50%{opacity:.45}}.notice{color:#ffc4cb;border:1px dashed var(--danger);margin-bottom:1.2rem;padding:8px 12px;font-size:13px}.home-body{flex-direction:column;align-items:stretch;gap:14px;display:flex}.menu-divider{letter-spacing:.3em;color:var(--text-dim);align-items:center;gap:12px;margin:2px 0;font-size:10px;display:flex}.menu-divider:before,.menu-divider:after{content:"";opacity:.35;background:currentColor;flex:1;height:1px}.stack{flex-direction:column;align-items:stretch;gap:14px;display:flex}.field-label{color:var(--text-dim);letter-spacing:.3em;font-size:12px}.form-error{color:var(--danger);text-shadow:0 0 8px #ff5c5c80;font-size:13px}.btn{text-transform:uppercase;letter-spacing:.18em;color:var(--text);border:2px solid var(--neon-dim);cursor:pointer;text-shadow:0 0 6px #4dd2ff66;background:#0a1226b3;padding:.75em 1.6em;font-size:15px;transition:box-shadow .15s,border-color .15s,background .15s}.btn:hover:not(:disabled),.btn:focus-visible{border-color:var(--neon);background:#4dd2ff1f;outline:none;box-shadow:0 0 18px #4dd2ff73}.btn:disabled{opacity:.5;cursor:default}.btn-primary{border-color:var(--neon);color:#eaf7ff}.btn-big{padding:.9em 1.6em;font-size:17px}.btn-small{padding:.55em 1.1em;font-size:12px}.btn-ghost{color:var(--text-dim);border-color:#0000}.btn-danger{color:#ffaab4;text-shadow:0 0 6px #ff5c5c66;border-color:#8a2a38}.btn-danger:hover:not(:disabled){border-color:var(--danger);background:#ff5c5c1a;box-shadow:0 0 18px #ff5c5c66}.text-input{text-align:center;color:#eaf7ff;border:2px solid var(--neon-dim);caret-color:var(--neon);background:#040814e6;padding:.7em 1em;font-size:17px}.text-input:focus{border-color:var(--neon);outline:none;box-shadow:0 0 14px #4dd2ff59}.code-input{letter-spacing:.45em;text-indent:.45em;text-transform:uppercase;font-size:26px}.room-code{letter-spacing:.3em;text-indent:.3em;color:#eaf7ff;text-shadow:0 0 8px var(--neon), 0 0 28px var(--neon);margin:.15em 0 .35em;font-size:clamp(2.6rem,10vw,4.4rem);font-weight:700}.lobby-panel .btn-small{margin-bottom:1.4rem}.player-list{flex-direction:column;gap:8px;margin:0 0 1.6rem;list-style:none;display:flex}.player-row{background:#080e2099;border:1px solid #4dd2ff2e;align-items:center;gap:12px;padding:9px 14px;font-size:15px;display:flex}.player-row-empty{color:#3a4a66;border-style:dashed;justify-content:center}.swatch{flex:none;width:14px;height:14px}.player-name{text-align:left;text-overflow:ellipsis;white-space:nowrap;flex:1;overflow:hidden}.tag{letter-spacing:.2em;border:1px solid;padding:2px 7px;font-size:10px}.tag-host{color:var(--warn)}.tag-you{color:var(--ok)}.waiting{color:var(--text-dim);margin-bottom:1.4rem;animation:1.6s ease-in-out infinite pulse}.lobby-panel .btn-danger{margin-top:1rem;margin-bottom:0}.hud-players{flex-wrap:wrap;gap:10px;display:flex}.hud-panel{text-align:left;background:#050916b8;border:1px solid;min-width:128px;padding:7px 12px}.hud-panel.hud-dead{opacity:.45}.hud-name{letter-spacing:.15em;white-space:nowrap;text-overflow:ellipsis;text-shadow:0 0 8px;max-width:150px;font-size:12px;overflow:hidden}.hud-score{color:#eaf7ff;text-shadow:0 0 8px #eaf7ff80;font-size:19px}.hud-lives{letter-spacing:.3em;text-shadow:0 0 6px;font-size:12px}.hud-hi{text-align:right;white-space:nowrap;padding-top:2px}.hud-hi-label{font-size:clamp(9px, calc(var(--tile) * .72), 15px);letter-spacing:.2em;color:#ff2c2c;text-shadow:0 0 10px #ff2c2cbf}.hud-hi-value{font-size:clamp(13px, calc(var(--tile) * 1), 24px);letter-spacing:.12em;color:#eaf7ff;text-shadow:0 0 10px #eaf7ff8c}.hud-dual-tag{letter-spacing:.2em;text-shadow:0 0 6px;border:1px solid;width:fit-content;margin-top:2px;padding:0 3px;font-size:9px;animation:1.4s ease-in-out infinite pulse}.hud-panel.hud-dual{box-shadow:0 0 10px}.hud-hi-value.hud-hi-new{animation:.9s steps(2,end) infinite hi-blink}@keyframes hi-blink{50%{opacity:.35}}@media (width<=560px){#hud{flex-direction:column;justify-content:flex-start;align-items:center;gap:4px;padding:6px 8px}.hud-hi{order:-1;align-items:baseline;gap:.7em;padding-top:0;display:flex}.hud-players{justify-content:center;gap:6px}.hud-panel{min-width:86px;padding:4px 8px}.hud-name{max-width:96px;font-size:10px}.hud-score{font-size:14px}.hud-lives{font-size:10px}}#hud.hud-crowded .hud-panel{min-width:74px;padding:3px 7px}#hud.hud-crowded .hud-name{max-width:84px;font-size:10px}#hud.hud-crowded .hud-score{font-size:14px}#hud.hud-crowded .hud-lives{letter-spacing:.15em;font-size:10px}.banner{letter-spacing:.35em;text-indent:.35em;color:#eaf7ff;text-shadow:0 0 10px var(--neon), 0 0 34px var(--neon);white-space:nowrap;font-size:clamp(2.2rem,8vw,4rem);font-weight:700;animation:2.4s ease-out forwards banner-anim}.banner-sub{letter-spacing:.3em;text-indent:.3em;color:var(--warn);text-shadow:0 0 12px #ffd75ccc;margin-top:.5em;font-size:.34em}@keyframes banner-anim{0%{opacity:0;transform:scale(1.7)}12%{opacity:1;transform:scale(1)}78%{opacity:1;transform:scale(1)}to{opacity:0;transform:scale(.92)}}.arc-line{left:0;right:0;top:calc(var(--tile) * (var(--row,0) + 2));height:var(--tile);line-height:1;position:absolute}.arc-line>*{left:calc(var(--tile) * var(--col,0));font-size:calc(var(--tile) * 1.2);letter-spacing:calc(var(--tile) * .28);white-space:nowrap;position:absolute}.ready{text-align:center;animation:.18s ease-out ready-in;position:absolute;inset:0}.ready.ready-out{animation:.2s ease-in forwards ready-fade}.ready-player,.ready-line{white-space:nowrap;line-height:1;font-size:calc(var(--tile) * 1.35);letter-spacing:calc(var(--tile) * .3);text-indent:calc(var(--tile) * .3);position:absolute;left:0;right:0}.ready-player{top:calc(var(--tile) * 16);color:#eaf7ff;text-shadow:0 0 12px}.ready-line{top:calc(var(--tile) * 18);color:#eaf7ff;text-shadow:0 0 10px var(--neon), 0 0 26px var(--neon)}.ready-word{color:#eaf7ff;animation:.5s steps(2,end) infinite ready-blink}.ready-challenge{color:var(--warn);text-shadow:0 0 10px #ffd75ccc,0 0 28px #ffd75c80}@keyframes ready-blink{50%{opacity:.25}}@keyframes ready-in{0%{opacity:0}}@keyframes ready-fade{to{opacity:0}}.challenge-results{position:absolute;inset:0}.challenge-results.challenge-out{animation:.3s ease-in forwards ready-fade}.captured-line>*{color:#ff2c2c;text-shadow:0 0 12px #ff2c2c,0 0 30px #ff2c2c80;animation:.8s ease-in-out infinite pulse}.captured-line.ready-out{animation:.22s ease-in forwards ready-fade}.challenge-hits>*{color:#eaf7ff;text-shadow:0 0 10px #eaf7ff99}.challenge-bonus>*{color:var(--warn);text-shadow:0 0 12px #ffd75cb3}.challenge-perfect>*{font-size:calc(var(--tile) * 1.6);color:#ff4d4d;text-shadow:0 0 12px #ff2c2c,0 0 30px #ff2c2c99}.challenge-special>*{color:var(--warn);text-shadow:0 0 12px #ffd75ccc,0 0 30px #ffd75c66}.score-popups{pointer-events:none;position:absolute;inset:0}.score-popup{font-size:calc(var(--tile) * 1.15);letter-spacing:calc(var(--tile) * .16);white-space:nowrap;text-shadow:0 0 10px;line-height:1;animation:.85s ease-out forwards popup;position:absolute;transform:translate(-50%,-50%)}@keyframes popup{0%{opacity:0;transform:translate(-50%,-50%)scale(.7)}15%{opacity:1;transform:translate(-50%,-50%)scale(1)}75%{opacity:1;transform:translate(-50%,-70%)scale(1)}to{opacity:0;transform:translate(-50%,-95%)scale(1)}}.stage-flags{right:calc(var(--tile) * .25);height:calc(var(--tile) * 2);pointer-events:none;align-items:flex-end;gap:0;display:flex;position:absolute;bottom:0}.flag-slot{align-items:flex-end;height:100%;transition:opacity 80ms linear;display:flex}.flag-slot .flag{width:auto;height:100%;display:block}.flag-slot.flag-pending{opacity:0}.flag-slot.flag-land{animation:.16s ease-out flag-land}@keyframes flag-land{0%{opacity:0;transform:translateY(-25%)scale(1.25)}}.flag-mult{font-size:calc(var(--tile) * .9);letter-spacing:.05em;color:#dedeff;text-shadow:0 0 6px #dedeff99;margin:0 calc(var(--tile) * .25) 0 calc(var(--tile) * .1);align-self:center}.results-screen{align-items:flex-start;padding:0}.results{width:min(var(--pf-w), 100vw);padding:calc(var(--tile) * 5) calc(var(--tile) * 1.5) calc(var(--tile) * 2);text-align:center;min-height:100%;font-size:calc(var(--tile) * 1.05);flex-direction:column;justify-content:center;align-items:center;margin:0 auto;line-height:1.15;display:flex}.res-gameover{font-size:calc(var(--tile) * 2.1);letter-spacing:calc(var(--tile) * .4);text-indent:calc(var(--tile) * .4);color:#ffdada;text-shadow:0 0 10px var(--danger), 0 0 34px var(--danger);margin-bottom:calc(var(--tile) * 1.2)}.res-body{opacity:0;pointer-events:none;width:100%;transition:opacity .35s ease-out,transform .35s ease-out;transform:translateY(6px)}.res-shown .res-body{opacity:1;pointer-events:auto;transform:none}.res-shown .res-gameover{font-size:calc(var(--tile) * 1.2);letter-spacing:calc(var(--tile) * .3);opacity:.75;margin-bottom:calc(var(--tile) * .6);transition:all .35s ease-out}.res-title{font-size:calc(var(--tile) * 1.5);letter-spacing:calc(var(--tile) * .35);text-indent:calc(var(--tile) * .35);color:#eaf7ff;text-shadow:0 0 10px var(--neon), 0 0 28px var(--neon);margin-bottom:calc(var(--tile) * 1.2)}.res-metrics{gap:calc(var(--tile) * .55);margin:0 auto calc(var(--tile) * 1.2);flex-direction:column;width:fit-content;max-width:100%;display:flex}.res-row{grid-template-columns:calc(var(--tile) * 15) calc(var(--tile) * 8);gap:calc(var(--tile) * 1);text-align:left;white-space:nowrap;align-items:baseline;display:grid}.res-label{color:var(--text-dim);letter-spacing:.08em}.res-value{color:#eaf7ff;text-shadow:0 0 8px #eaf7ff73}.res-suffix{color:var(--text-dim);text-shadow:none}.res-tail .res-value{color:var(--warn);text-shadow:0 0 10px #ffd75c80}.res-newhigh .res-value{animation:.9s steps(2,end) infinite hi-blink}.res-newtag{color:var(--ok);text-shadow:0 0 8px #7dff6eb3;margin-left:.6em;font-size:.8em}.res-players{width:100%;max-width:calc(var(--tile) * 26);margin:0 auto calc(var(--tile) * 1.4);gap:calc(var(--tile) * .35);font-size:calc(var(--tile) * .92);flex-direction:column;display:flex}.res-prow{gap:calc(var(--tile) * .45);padding:calc(var(--tile) * .22) calc(var(--tile) * .35);background:#080e208c;border:1px solid #4dd2ff29;grid-template-columns:minmax(0,1fr) 5.5ch 5ch 6.5ch 7ch;align-items:baseline;display:grid}.res-phead{color:var(--text-dim);letter-spacing:.08em;background:0 0;border-color:#0000;font-size:.85em}.res-pname{text-overflow:ellipsis;white-space:nowrap;text-align:left;text-shadow:0 0 8px;min-width:0;display:block;overflow:hidden}.res-pname .swatch{vertical-align:middle;width:.7em;height:.7em;margin-right:.5em;display:inline-block}.res-pcell{text-align:right;color:var(--text);font-variant-numeric:tabular-nums}.res-pscore{color:#eaf7ff;text-shadow:0 0 8px #eaf7ff66}.res-actions{align-items:center;gap:calc(var(--tile) * .6);margin-top:calc(var(--tile) * .4);flex-direction:column;display:flex}.res-actions .waiting{margin-bottom:0}
