@font-face{font-family:PressStart;src:url('/press-start-2p.woff2') format('woff2');font-display:swap}
:root{--ink:#e8ffd7;--dim:#7f9f90;--cyan:#62f2ff;--pink:#ff5d8f;--yellow:#ffe66d;--panel:#111a27;--deep:#070b12;--line:#294052;font-family:PressStart,monospace;color:var(--ink);background:var(--deep);color-scheme:dark}
*{box-sizing:border-box}body{margin:0;background:radial-gradient(circle at 50% 20%,#172a36,#070b12 65%);min-height:100vh}button,input,select{font:inherit}button{background:#1a3441;border:2px solid var(--cyan);color:var(--ink);padding:11px 14px;cursor:pointer;box-shadow:3px 3px 0 #000;font-size:10px}button:hover{background:#265468}button.danger{border-color:var(--pink)}button.danger-solid{background:#43142b}.admin-page input,.admin-page select{background:#071019;border:1px solid #456277;color:var(--ink);padding:10px;min-width:0}a{color:var(--cyan)}h1,h2,p{margin-top:0}h1{font-size:24px;color:var(--cyan);text-shadow:3px 3px #000}h2{font-size:13px;color:var(--yellow);border-bottom:1px solid var(--line);padding-bottom:10px}.eyebrow{font-size:8px;color:var(--dim);letter-spacing:2px}
.projection{overflow:hidden;background:#000}.projection canvas{display:block;width:100vw;height:100vh;object-fit:contain;image-rendering:pixelated}.projection.crt:after{content:"";pointer-events:none;position:fixed;inset:0;background:repeating-linear-gradient(0deg,#0000 0,#0000 2px,#0005 3px);mix-blend-mode:multiply}.projection.crt:before{content:"";pointer-events:none;position:fixed;inset:0;box-shadow:inset 0 0 100px #000;z-index:2}
#join-card{position:fixed;left:16px;bottom:16px;display:flex;gap:12px;align-items:center;background:#071019e8;border:2px solid var(--cyan);padding:8px 12px;box-shadow:5px 5px #000;max-width:650px}#join-card img{width:72px;height:72px;image-rendering:pixelated}#join-card div{display:flex;flex-direction:column;gap:6px}#join-card small,#join-card span{font-size:7px;color:var(--dim)}#join-card strong{font-size:10px;color:var(--cyan);overflow-wrap:anywhere}#connection{position:fixed;right:16px;bottom:16px;background:#210b18;border:2px solid var(--pink);padding:10px;font-size:9px}
.score-page{padding:28px}.score-header,.admin-page>header{display:flex;align-items:center;justify-content:space-between;border-bottom:2px solid var(--cyan);margin-bottom:22px}.score-header #round-state,#admin-status{font-size:10px;color:var(--yellow)}.score-page main{position:relative;max-width:1400px;margin:auto}.score-page canvas{display:block;width:100%;height:auto;border:1px solid var(--line);background:#091019;image-rendering:pixelated}.score-page footer{text-align:center;font-size:8px;color:var(--dim);padding:20px}.podium{position:absolute;inset:20px;display:flex;align-items:end;justify-content:center;gap:12px;background:#070b12eF;padding:50px}.podium.hidden{display:none}.podium-place{width:25%;text-align:center;background:#152a36;border:2px solid var(--cyan);padding:20px 8px;animation:rise .8s both}.podium-place:nth-child(1){height:55%}.podium-place:nth-child(2){height:75%;border-color:var(--yellow)}.podium-place:nth-child(3){height:42%}.podium-place strong{display:block;color:var(--yellow);margin:15px 0}@keyframes rise{from{transform:translateY(100%);opacity:0}}
.admin-page{padding:22px;font-family:system-ui,sans-serif}.admin-page h1,.admin-page h2,.admin-page button,.admin-page .eyebrow,.big-value{font-family:PressStart,monospace}.admin-page>header{font-family:PressStart,monospace}.admin-grid{display:grid;grid-template-columns:repeat(12,1fr);gap:15px}.panel{grid-column:span 6;background:#101a25eF;border:1px solid var(--line);border-top:3px solid var(--cyan);padding:16px;box-shadow:4px 4px 0 #020408}.controls{grid-column:span 6}.test-launcher{grid-column:span 12;display:flex;align-items:center;justify-content:space-between;gap:20px}.test-launcher h2{border:0;margin-bottom:6px;padding:0}.test-launcher p{margin:0}.players-panel,.monitor-panel{grid-column:span 12}.button-row,.inline-form{display:flex;gap:8px;flex-wrap:wrap;margin-bottom:15px}.panel label,.admin-dialog label{display:flex;flex-direction:column;gap:6px;font-size:12px;color:#a9c1bd}.compact-form{display:grid;grid-template-columns:repeat(2,1fr);gap:10px}.compact-form button{grid-column:1/-1}.big-value{font-size:20px;color:var(--cyan);margin-top:16px}.hint{font-size:11px;color:var(--dim);line-height:1.7}.mini-log{font:11px monospace;color:#a9c1bd;max-height:130px;overflow:auto;background:#071019;padding:10px;margin-top:12px}.table-wrap{overflow:auto;max-height:430px}table{border-collapse:collapse;width:100%;font:12px monospace}th,td{text-align:left;padding:8px;border-bottom:1px solid #253746;white-space:nowrap}th{position:sticky;top:0;background:#111a27;color:var(--cyan)}.row-actions{display:flex;gap:5px}.row-actions button{padding:7px 8px;font-size:8px}.status-ok{color:#7dff72}.status-bad{color:var(--pink)}.status-warn{color:var(--yellow)}#message{position:fixed;z-index:20;top:12px;left:50%;transform:translateX(-50%);background:#241426;border:1px solid var(--pink);padding:10px;display:none;font-size:12px}
.admin-dialog{width:min(1050px,calc(100vw - 30px));max-height:calc(100vh - 30px);overflow:auto;background:#101a25;color:var(--ink);border:2px solid var(--cyan);box-shadow:10px 10px 0 #000;padding:20px}.admin-dialog::backdrop{background:#020408d9}.dialog-header{display:flex;align-items:start;justify-content:space-between;gap:20px;border-bottom:1px solid var(--line);margin-bottom:18px}.dialog-header h2{font-size:18px;border:0}.test-toolbar{display:flex;align-items:end;justify-content:space-between;gap:20px;flex-wrap:wrap}.test-toolbar label{min-width:260px}.test-workspace{display:grid;grid-template-columns:minmax(0,2fr) minmax(260px,1fr);gap:18px;margin-top:18px}.test-workspace canvas{display:block;width:100%;height:auto;background:#071019;border:1px solid var(--line);image-rendering:pixelated}.test-workspace pre{background:#071019;padding:12px;line-height:1.5;min-height:80px;overflow:auto}.dpad{display:grid;grid-template-columns:repeat(3,64px);grid-template-rows:repeat(3,64px);gap:6px;justify-content:center;margin:12px 0}.dpad .up{grid-area:1/2}.dpad .left{grid-area:2/1}.dpad .right{grid-area:2/3}.dpad .down{grid-area:3/2}.shoot{width:100%;margin-top:8px;cursor:pointer}.keycap{touch-action:none;user-select:none;cursor:pointer;font-size:16px;display:grid;place-items:center;min-height:52px;border:2px solid #456277;background:#071019;color:#a9c1bd;font:9px PressStart,monospace;box-shadow:3px 3px #000}.keycap.active{background:#ffe66d;color:#071019;border-color:#fff;transform:translate(2px,2px);box-shadow:1px 1px #000}.player-dialog{width:min(560px,calc(100vw - 30px))}.player-form{display:grid;grid-template-columns:1fr 1fr;gap:14px}.key-field,.player-form .button-row{grid-column:1/-1}.key-field>div{display:flex;gap:8px}.key-field input{flex:1}.key-field small{color:var(--dim)}
@media(max-width:900px){.admin-page{padding:10px}.panel,.controls{grid-column:span 12}.compact-form,.test-workspace,.player-form{grid-template-columns:1fr}.key-field,.player-form .button-row{grid-column:1}.score-page{padding:10px}.test-launcher{align-items:stretch;flex-direction:column}}

.picker{display:grid;grid-template-columns:repeat(auto-fill,minmax(72px,1fr));gap:6px;max-height:260px;overflow:auto;padding:4px}
.picker-compact{flex-basis:100%}.picker-compact .picker{grid-template-columns:repeat(auto-fill,minmax(60px,1fr));max-height:120px}
.char-option{display:grid;justify-items:center;gap:4px;padding:6px 2px;background:#071019;border:2px solid #263b4a;color:#a9c1bd;cursor:pointer}
.char-option small{font:7px PressStart,monospace;line-height:1.3;text-align:center}
.char-option:hover{border-color:#62f2ff}.char-option.selected{border-color:#ffe66d;background:#1b2a1e;color:#ffe66d}
.char{display:inline-block;flex:none}.char-inline{vertical-align:middle}
.field-wide{grid-column:1/-1}.field-label{display:block;margin-bottom:6px}
.theme-buttons{display:flex;gap:10px}.theme-buttons button{flex:1;cursor:pointer}.theme-buttons button.active{background:#ffe66d;color:#071019;border-color:#fff}
.gallery{display:grid;grid-template-columns:repeat(auto-fill,minmax(110px,1fr));gap:12px;padding:20px;max-width:1100px;margin:0 auto}
.gallery .char-option{cursor:default}
