:root{--bg:#0b0c0f;--bg-2:#111318;--panel:#161920;--panel-2:#1c2029;--line:#2a2f3a;--text:#ece6da;--muted:#9a9ca5;--accent:#e3462f;--accent-2:#ff7a3d;--ok:#5fcf7a;--warn:#f2b84b;--error:#ff5a52;--focus:#ffd166;--radius:10px;--shadow:0 10px 30px #00000073;color:var(--text);background:var(--bg);--buncss-light: ;--buncss-dark:initial;color-scheme:dark;font-family:Segoe UI,system-ui,-apple-system,BlinkMacSystemFont,Roboto,Noto Sans,Ubuntu,Cantarell,Helvetica Neue,sans-serif;font-size:16px}*{box-sizing:border-box}html,body{min-height:100%;margin:0}body{background:radial-gradient(1200px 600px at 80% -10%,#e3462f21,transparent 60%),radial-gradient(900px 500px at -10% 110%,#5fcf7a0f,transparent 60%),var(--bg);min-height:100vh;line-height:1.45}#app{display:flex;flex-direction:column;min-height:100vh}.boot,.fatal{color:var(--muted);white-space:pre-wrap;padding:3rem}.fatal{color:var(--error)}h1,h2,h3{letter-spacing:.02em;margin:0 0 .6rem;font-weight:700}h1{text-transform:uppercase;font-size:2rem}h2{text-transform:uppercase;color:#f5efe4;font-size:1.15rem}h3{color:var(--muted);text-transform:uppercase;margin-top:1rem;font-size:.95rem}p{margin:.4rem 0}code,pre,kbd{font-family:ui-monospace,Cascadia Mono,Menlo,Consolas,monospace;font-size:.85em}code{background:#ffffff0f;border-radius:4px;padding:.05em .35em}.muted{color:var(--muted)}.small{font-size:.85rem}.ok{color:var(--ok)}.warn{color:var(--warn)}.spacer{flex:1}[hidden]{display:none!important}.icon{vertical-align:-.18em;fill:none;stroke:currentColor;stroke-width:2;stroke-linecap:round;stroke-linejoin:round;flex:none;width:1.1em;height:1.1em;margin-right:.35em}.icon-crown{fill:currentColor;stroke:none}.topbar{display:flex;border-bottom:1px solid var(--line);position:sticky;z-index:10;backdrop-filter:blur(8px);background:#0b0c0fd9;align-items: center;gap:1rem;padding:.7rem 1.4rem;top:0}.brand{display:flex;text-transform:uppercase;letter-spacing:.08em;align-items:baseline;gap:.4rem;font-weight:800}.brand-mark{color:var(--bg);background:var(--accent);border-radius:4px;padding:.05rem .4rem}.tabs{display:flex;gap:.25rem;margin-left:1rem}.tab{color:var(--muted);font:inherit;cursor:pointer;text-transform:uppercase;letter-spacing:.05em;background:0 0;border:0;border-radius:8px;padding:.5rem .9rem;font-size:.9rem;font-weight:600}.tab:hover{color:var(--text);background:#ffffff0d}.tab[aria-current=page]{color:var(--text);box-shadow:inset 0 -3px 0 var(--accent)}.screen-host{flex:1;width:100%;max-width:1280px;margin:0 auto;padding:1.5rem 1.4rem 5rem}.screen>h1{margin-bottom:1rem}.hero{margin:1rem 0 1.5rem}.hero h1{letter-spacing:.06em;background:linear-gradient(#fff3e3,#e3462f 140%);color:#0000;-webkit-background-clip:text;background-clip:text;margin:0;font-size:clamp(2.2rem,5vw,3.6rem)}.tagline{color:var(--muted);font-size:1.1rem}.grid{display:grid;gap:1rem}.grid.two{grid-template-columns:repeat(2,minmax(0,1fr))}.grid.tight{gap:.6rem}.col{display:flex;flex-direction:column;gap:1rem}.row{display:flex;flex-wrap:wrap;align-items: center;gap:.6rem;margin:.6rem 0}.row.end{justify-content:flex-end}.card{background:linear-gradient(180deg,var(--panel),var(--bg-2));border:1px solid var(--line);border-radius:var(--radius);box-shadow:var(--shadow);min-width:0;margin-bottom:1rem;padding:1.1rem 1.2rem}.grid>.card,.col>.card{margin-bottom:0}.card-head{display:flex;justify-content:space-between;align-items: center;gap:.6rem;margin-bottom:.4rem}.card-head h2,.card-head h3{margin:0}.banner{border-radius:var(--radius);border:1px solid var(--line);background:var(--panel);display:flex;flex-wrap:wrap;align-items: center;gap:.6rem;margin:0 0 1rem;padding:.8rem 1rem}.banner-ok{color:var(--ok);border-color:#5fcf7a66}.banner-error{background:#ff5a5214;border-color:#ff5a5280}.banner-privacy{background:#5fcf7a0f;border-color:#5fcf7a59;flex-wrap:nowrap;align-items: flex-start}.banner-privacy .icon{color:var(--ok);width:2rem;height:2rem}.conn-note:empty{display:none}.conn-note{color:var(--warn);margin-bottom:1rem}label{display:block;color:var(--muted);text-transform:uppercase;letter-spacing:.04em;margin:.8rem 0 .3rem;font-size:.85rem}input[type=text],select{font:inherit;color:var(--text);border:1px solid var(--line);background:#0e1014;border-radius:8px;width:100%;min-height:2.6rem;padding:.6rem .75rem}select:disabled,input:disabled{opacity:.65}.row input[type=text]{flex:1;width:auto;min-width:8rem}#code-input{text-transform:uppercase;letter-spacing:.2em;font-weight:700}input[type=checkbox]{accent-color:var(--accent);flex:none;width:1.2rem;height:1.2rem}.btn{font:inherit;color:var(--text);background:var(--panel-2);cursor:pointer;display:inline-flex;border:1px solid #343a48;border-radius:8px;justify-content:center;align-items: center;gap:.2rem;min-height:2.6rem;padding:.6rem 1.1rem;transition:background .12s,transform 60ms,border-color .12s;font-weight:650}.btn:hover:not(:disabled){background:#252a35;border-color:#4a5163}.btn:active:not(:disabled){transform:translateY(1px)}.btn:disabled{opacity:.45;cursor:not-allowed}.btn.primary{background:linear-gradient(180deg,var(--accent-2),var(--accent));color:#fff;text-shadow:0 1px 1px #00000059;border-color:#ff8f66}.btn.primary:hover:not(:disabled){background:linear-gradient(#ff8b55,#f0533a)}.btn.danger{color:#ffb3ad;border-color:#ff5a5280}.btn.big{text-transform:uppercase;letter-spacing:.06em;min-height:3.2rem;padding:.85rem 1.6rem;font-size:1.1rem}.btn.small{min-height:2rem;padding:.35rem .75rem;font-size:.85rem}.btn.ready-on{color:#08210f;background:linear-gradient(#6fe08a,#3fae5c);border-color:#8cf0a5}#create-btn{width:100%;margin-top:.4rem}:focus{outline:none}body.input-keyboard :focus,body.input-pad :focus{outline:3px solid var(--focus);outline-offset:2px;box-shadow:0 0 0 6px #ffd1662e}body.input-keyboard :focus-visible{outline:3px solid var(--focus);outline-offset:2px;box-shadow:0 0 0 6px #ffd1662e}body.input-mouse :focus-visible{outline:2px solid #ffd16699;outline-offset:2px}body.input-pad .btn:focus,body.input-pad .room-item:focus,body.input-pad .char-option:focus{transform:scale(1.03)}.chip{display:inline-flex;border:1px solid var(--line);color:var(--muted);white-space:nowrap;background:#ffffff0a;border-radius:999px;align-items: center;gap:.1rem;padding:.15rem .55rem;font-size:.78rem;font-weight:650}.chip.small{margin-left:.4rem;font-size:.7rem}.chip-ok{color:var(--ok);border-color:#5fcf7a73}.chip-warn{color:var(--warn);border-color:#f2b84b73}.chip-error{color:var(--error);border-color:#ff5a5273}.badge{display:inline-flex;text-transform:uppercase;color:var(--muted);background:#ffffff14;border-radius:4px;align-items: center;margin-left:.4rem;padding:.05rem .4rem;font-size:.7rem;font-weight:700}.badge-host{color:var(--focus);background:#ffd16626}.files-box{margin-top:1rem}.room-list{display:flex;flex-direction:column;gap:.5rem}.room-item{display:grid;grid-template-columns:1.2fr 1.2fr 1.5fr auto;text-align:left;font:inherit;color:var(--text);background:var(--panel-2);border:1px solid var(--line);cursor:pointer;border-radius:8px;align-items: center;gap:.8rem;padding:.7rem .9rem}.room-item:hover:not(:disabled){border-color:var(--accent)}.room-item:disabled{opacity:.5}.room-host{font-weight:700}.lobby-head{display:flex;flex-wrap:wrap;align-items: center;gap:.8rem;margin-bottom:1rem}.room-code-box{display:flex;flex-direction:column}.room-code-box .label{text-transform:uppercase;color:var(--muted);letter-spacing:.08em;font-size:.75rem}.room-code{letter-spacing:.25em;color:#fff;font-family:ui-monospace,Menlo,Consolas,monospace;font-size:2.2rem;font-weight:800}.lobby-grid{display:grid;grid-template-columns:minmax(0,1fr)minmax(0,1.25fr);gap:1rem}.lobby-col{display:flex;flex-direction:column;gap:1rem}.lobby-col>.card{margin-bottom:0}.net-card{margin-top:1rem}.map-info{margin:.4rem 0 .2rem}details summary{cursor:pointer;color:var(--muted);padding:.2rem 0;font-size:.85rem}ul.plain,.map-list,.missing-list,.caps-list,.slot-list,.blockers{list-style:none;margin:.4rem 0;padding:0}ul.plain li,.map-list li{display:flex;align-items: center;padding:.15rem 0}.missing-list li{padding:.1rem 0;font-size:.85rem}.ignored-files ul{overflow:auto;max-height:14rem}.blockers li{color:var(--warn);padding:.15rem 0;font-size:.9rem}.blockers li:before{content:"• "}.mod-list{display:flex;flex-direction:column;gap:.4rem}.mod,.toggle{display:flex;text-transform:none;letter-spacing:0;color:var(--text);border:1px solid var(--line);cursor:pointer;background:#ffffff05;border-radius:8px;align-items: flex-start;gap:.7rem;margin:.3rem 0;padding:.55rem .7rem;font-size:.95rem}.mod.disabled,.toggle.disabled{opacity:.55;cursor:default}.mod-text{display:flex;flex-direction:column}.mod-name{font-weight:650}.mod-desc,.mod-where{color:var(--muted);font-size:.82rem}.char-grid{display:grid;grid-template-columns:repeat(4,minmax(0,1fr));gap:.6rem}.char-option{display:flex;font:inherit;color:var(--text);background:var(--panel-2);border:2px solid var(--line);cursor:pointer;text-align:center;border-radius:10px;flex-direction:column;align-items: center;gap:.35rem;padding:.8rem .4rem}.char-option:hover:not(:disabled){border-color:#4a5163}.char-option.selected{border-color:var(--accent);background:linear-gradient(180deg,#e3462f38,var(--panel-2))}.char-option:disabled{opacity:.4;cursor:not-allowed}.char-name{font-size:.9rem;font-weight:700;line-height:1.2}.portrait{--hue:20;display:inline-flex;color:#fff;letter-spacing:.04em;background:radial-gradient(circle at 35% 30%,hsla(var(--hue),80%,70%,.9),transparent 60%),linear-gradient(160deg,hsl(var(--hue),55%,38%),hsl(var(--hue),60%,16%));border:2px solid hsla(var(--hue),70%,70%,.6);text-shadow:0 1px 2px #0009;border-radius:50%;flex:none;justify-content:center;align-items: center;font-weight:800}.portrait-sm{width:2.4rem;height:2.4rem;font-size:.85rem}.portrait-md{width:3.4rem;height:3.4rem;font-size:1.1rem}.portrait-lg{width:5rem;height:5rem;font-size:1.6rem}.portrait-empty{border:2px dashed var(--line);color:var(--muted);background:#ffffff0a}.slot{display:flex;border-bottom:1px solid var(--line);align-items: center;gap:.8rem;padding:.6rem .4rem}.slot:last-child{border-bottom:0}.slot.me .slot-name{color:#fff}.slot.dropped,.slot.empty{opacity:.6}.slot-main{flex:1;min-width:0}.slot-name{overflow:hidden;text-overflow:ellipsis;white-space:nowrap;font-weight:700}.slot-chips{display:flex;flex-wrap:wrap;justify-content:flex-end;gap:.35rem}.start-box .btn.big{width:100%}.net-table{border-collapse:collapse;width:100%;font-size:.9rem}.net-table th,.net-table td{text-align:left;border-bottom:1px solid var(--line);padding:.35rem .5rem}.net-table th{color:var(--muted);text-transform:uppercase;font-size:.8rem;font-weight:600}.net-log,.engine-log,.cmdline pre{border:1px solid var(--line);overflow:auto;white-space:pre-wrap;word-break:break-all;color:#c9c3b8;background:#08090b;border-radius:8px;max-height:14rem;padding:.6rem .8rem;font-size:.78rem}.net-log:empty{display:none}.kv{display:grid;grid-template-columns:auto 1fr;gap:.35rem 1rem;margin:0}.kv dt{color:var(--muted)}.kv dd{margin:0}.steps{color:var(--muted);padding-left:1.2rem}.steps li{margin:.3rem 0}.scan-result{border-top:1px solid var(--line);margin-top:1rem;padding-top:.6rem}.packages{border-top:1px solid var(--line);margin-top:1rem;padding-top:.2rem}.package-list{list-style:none;margin:.4rem 0;padding:0}.package-list li{overflow-wrap:anywhere;padding:.15rem 0}.map-choices{margin:.8rem 0}.map-list li>span{white-space:pre-wrap}.map-list .map-remove{margin-left:auto}a.btn{text-decoration:none}.inline-select{display:inline-block;width:auto;min-height:2rem;padding:.25rem .5rem}.card.drop-target{outline:2px dashed var(--accent);outline-offset:-6px}.availability .icon-check{color:var(--ok)}.availability .icon-cross{color:var(--muted)}.bar{border:1px solid var(--line);overflow:hidden;background:#0b0d11;border-radius:999px;height:.7rem;margin:.4rem 0 .6rem}.bar-fill{background:linear-gradient(90deg,var(--accent),var(--accent-2));height:100%;transition:width .2s}.progress-box{margin:.6rem 0}.cap{display:flex;border-bottom:1px solid var(--line);gap:.7rem;padding:.55rem 0}.cap:last-child{border-bottom:0}.cap-icon .icon{width:1.3rem;height:1.3rem;margin-top:.1rem}.cap-ok .cap-icon{color:var(--ok)}.cap-missing.cap-required .cap-icon{color:var(--error)}.cap-missing.cap-recommended .cap-icon,.cap-missing.cap-optional .cap-icon{color:var(--warn)}.cap-label{font-weight:650}.cap-need{text-transform:uppercase;color:var(--muted);border:1px solid var(--line);border-radius:4px;margin-left:.5rem;padding:0 .3rem;font-size:.7rem}.cap-detail{color:var(--muted);font-size:.88rem}.cap-missing.cap-required .cap-detail{color:#ffb3ad}.game-head{display:flex;flex-wrap:wrap;align-items: center;gap:.6rem}.game-head h1{margin:0 .6rem 0 0}.game-status{color:var(--muted)}.engine-stage{position:relative;aspect-ratio:16/9;overflow:hidden;border:1px solid var(--line);background:#000;border-radius:8px;width:100%}.engine-stage canvas{display:block;width:100%;height:100%}.engine-overlay{position:absolute;overflow:auto;background:#000000bf;padding:1rem;inset:0}.error-card h2{color:var(--error)}body.engine-running .topbar,body.engine-running .hints{display:none}body.engine-running .screen-host{max-width:none;padding:.6rem}.hints{position:fixed;display:flex;border-top:1px solid var(--line);color:var(--muted);z-index:20;backdrop-filter:blur(6px);background:#0b0c0feb;flex-wrap:wrap;align-items: center;gap:1.2rem;padding:.55rem 1.4rem;font-size:.85rem;bottom:0;left:0;right:0}.hint{display:inline-flex;align-items: center;gap:.4rem}.hint-pad{margin-left:auto}.glyph{display:inline-flex;color:#fff;background:#3a3f4b;border-radius:50%;justify-content:center;align-items: center;min-width:1.6rem;height:1.6rem;padding:0 .3rem;font-size:.78rem;font-weight:800}.glyph-a{background:#3f9a3a}.glyph-b{background:#c53b32}.glyph-x{background:#2f6fd0}.glyph-y{color:#1a1400;background:#d1a21d}.glyph-lb,.glyph-rb,.glyph-start,.glyph-back{border-radius:6px;min-width:2rem}.key{display:inline-block;color:var(--text);text-align:center;background:#1b1f27;border:1px solid #4a5163;border-bottom-width:3px;border-radius:6px;min-width:1.6rem;padding:.1rem .45rem;font-size:.78rem}.dialog-backdrop{position:fixed;display:flex;z-index:50;animation:.12s ease-out fade;background:#000000a6;justify-content:center;align-items: center;padding:1rem;inset:0}.dialog{background:var(--panel);box-shadow:var(--shadow);overflow:auto;border:1px solid #3a4150;border-radius:12px;width:min(520px,100%);max-height:90vh;padding:1.2rem 1.4rem}.dialog-osk{width:min(760px,100%)}.choose-list{display:flex;flex-direction:column;gap:.4rem}.choose-item{text-align:left;justify-content:space-between;width:100%}.choose-item.selected{border-color:var(--accent)}.choose-detail{color:var(--muted);font-size:.8rem;font-weight:500}.osk-display{border:1px solid var(--line);letter-spacing:.06em;word-break:break-all;background:#0b0d11;border-radius:8px;min-height:3rem;margin-bottom:.8rem;padding:.5rem .8rem;font-size:1.6rem;font-weight:700}.osk-caret{display:inline-block;background:var(--focus);vertical-align:-.2rem;animation:1s step-end infinite blink;width:2px;height:1.4rem;margin-left:2px}.osk-keys{display:flex;flex-direction:column;gap:.35rem}.osk-row{display:flex;justify-content:center;gap:.35rem}.osk-key{font:inherit;background:var(--panel-2);color:var(--text);cursor:pointer;border:1px solid #343a48;border-radius:8px;min-width:3rem;height:3rem;font-weight:700}.osk-key.wide{min-width:6rem}.osk-key.wider{min-width:12rem}.osk-key.primary{background:linear-gradient(180deg,var(--accent-2),var(--accent));color:#fff}.osk-controls{margin-top:.3rem}#toasts{position:fixed;display:flex;z-index:60;flex-direction:column;gap:.5rem;max-width:min(420px,100vw - 2rem);bottom:3.6rem;right:1rem}.toast{background:var(--panel-2);border:1px solid var(--line);border-left:4px solid var(--muted);box-shadow:var(--shadow);cursor:pointer;animation:.18s ease-out slide;border-radius:8px;padding:.7rem .9rem}.toast-success{border-left-color:var(--ok)}.toast-error{border-left-color:var(--error)}.toast-warn{border-left-color:var(--warn)}.toast-out{opacity:0;transition:all .25s;transform:translate(20px)}@keyframes fade{0%{opacity:0}}@keyframes slide{0%{opacity:0;transform:translateY(10px)}}@keyframes blink{50%{opacity:0}}@media (max-width:900px){.grid.two,.lobby-grid{grid-template-columns:1fr}.char-grid{grid-template-columns:repeat(2,minmax(0,1fr))}.room-item{grid-template-columns:1fr 1fr}.tabs{margin-left:0}.topbar{flex-wrap:wrap}}@media (prefers-reduced-motion:reduce){*{animation:none!important;transition:none!important}}
