:root{--bg:#1a1410;--panel:#241c15;--ink:#efe6d6;--muted:#a99a83;--accent:#c8902f;--accent-ink:#1a1410;--line:#3a2f24}*{box-sizing:border-box}html,body{background:radial-gradient(1200px 800px at 50% -10%, #2c2016, var(--bg));min-height:100%;color:var(--ink);margin:0;font:16px/1.5 system-ui,Segoe UI,Roboto,sans-serif}#app{place-items:center;min-height:100vh;padding:2rem;display:grid}#app:has(.screen.wide){align-items:start}.screen{background:var(--panel);border:1px solid var(--line);border-radius:14px;width:min(560px,100%);padding:2rem 2.25rem;box-shadow:0 20px 60px #00000073}h1{letter-spacing:.3px;margin:0 0 .5rem;font-size:1.9rem}h2{color:var(--muted);margin:1.5rem 0 .5rem;font-size:1.05rem;font-weight:600}.tag{vertical-align:middle;color:var(--accent-ink);background:var(--accent);letter-spacing:.5px;border-radius:999px;padding:.15em .5em;font-size:.7em}.muted{color:var(--muted)}.status{min-height:1.5em;margin-top:1rem}code{color:var(--ink);background:#0003;border-radius:5px;padding:.1em .4em}button.primary{font:inherit;color:var(--accent-ink);background:var(--accent);cursor:pointer;border:0;border-radius:10px;margin-top:1.25rem;padding:.7rem 1.2rem;font-weight:600;transition:transform 50ms,filter .15s}button.primary:hover{filter:brightness(1.08)}button.primary:active{transform:translateY(1px)}.screen.wide{flex-direction:column;width:min(1920px,100%);max-height:calc(100vh - 4rem);display:flex}.bar{align-items:center;gap:1rem;display:flex}.bar h1{flex:none;margin:0;font-size:1.4rem}.bar .muted{margin-left:auto}a.tab{text-decoration:none;display:inline-block}.tabs{flex-wrap:wrap;gap:.5rem;margin:1rem 0;display:flex}.tab{font:inherit;color:var(--ink);border:1px solid var(--line);cursor:pointer;background:0 0;border-radius:999px;padding:.35rem .9rem}.tab:hover{border-color:var(--accent)}.tab.active{background:var(--accent);color:var(--accent-ink);border-color:var(--accent);font-weight:600}.scroll{overflow-y:auto}#list-region{flex:auto;min-height:0}button.ghost{font:inherit;color:var(--muted);border:1px solid var(--line);cursor:pointer;background:0 0;border-radius:8px;padding:.3rem .7rem}button.ghost:hover{color:var(--ink);border-color:var(--accent)}.canvas-wrap{margin-top:1rem}.canvas-wrap canvas{width:100%;height:68vh;image-rendering:pixelated;border:1px solid var(--line);cursor:grab;touch-action:none;background:#0c0a08;border-radius:8px;display:block}.canvas-wrap canvas.dragging{cursor:grabbing}.hint{margin-top:.6rem}.menu-grid{flex:auto;grid-template-rows:minmax(0,1fr);grid-template-columns:minmax(0,1fr) clamp(340px,30%,560px);align-items:stretch;gap:1.25rem;min-height:0;margin-top:1rem;display:grid}.map-col{flex-direction:column;min-height:0;display:flex}@media (width<=760px){.menu-grid{grid-template-rows:none;grid-template-columns:1fr}.screen.wide{max-height:none;display:block}#list-region{max-height:60vh}}.list-controls{flex-wrap:wrap;align-items:center;gap:.5rem;margin-bottom:.5rem;display:flex}.filter{min-width:8rem;font:inherit;color:var(--ink);border:1px solid var(--line);background:#0003;border-radius:8px;flex:10rem;padding:.55rem .75rem}.filter::placeholder{color:var(--muted)}.sort-ctl{align-items:center;gap:.3rem;display:inline-flex}.sort-ctl.hidden{display:none}.sbtn{font:inherit;color:var(--ink);border:1px solid var(--line);cursor:pointer;background:0 0;border-radius:7px;align-items:center;gap:.2rem;padding:.3rem .55rem;font-size:.85rem;display:inline-flex}.sbtn:hover{border-color:var(--accent)}.sbtn.active{background:var(--accent);color:var(--accent-ink);border-color:var(--accent);font-weight:600}.sbtn .s-ind{min-width:.7em;font-size:.8em}.view-toggle{border:1px solid var(--line);border-radius:8px;display:inline-flex;overflow:hidden}.vbtn{font:inherit;color:var(--muted);cursor:pointer;background:0 0;border:0;padding:.35rem .6rem;font-size:1rem}.vbtn:hover{color:var(--ink)}.vbtn.active{background:var(--accent);color:var(--accent-ink)}.pad{padding:.8rem}.mapgrid{grid-template-columns:repeat(auto-fill,minmax(180px,1fr));gap:.75rem;padding:.25rem;display:grid}.mapcard{border:1px solid var(--line);cursor:pointer;background:#0002;border-radius:10px;transition:border-color .12s;overflow:hidden}.mapcard:hover{border-color:var(--accent)}.mapcard.active{border-color:var(--accent);box-shadow:0 0 0 1px var(--accent) inset}.mapcard.hidden{display:none}.mapcard-thumb{aspect-ratio:16/10;background:#0c0a08 radial-gradient(circle,#ffffff10,#0000 70%);place-items:center;display:grid}.mapcard-thumb img{object-fit:cover;width:100%;height:100%;display:block}.mapcard-thumb.spoiler:after{content:"?";color:var(--muted);font:700 2.4rem/1 system-ui,sans-serif}.mapcard-cap{padding:.45rem .6rem}.mapcard-name{white-space:nowrap;text-overflow:ellipsis;font-size:.9rem;font-weight:600;overflow:hidden}.mapcard.active .mapcard-name{color:var(--accent)}.mapcard-meta{color:var(--muted);margin-top:.1rem;font-size:.78rem}.table-wrap{border:1px solid var(--line);border-radius:8px}.maptable{border-collapse:collapse;width:100%;font-size:.95rem}.maptable thead th{z-index:1;text-align:left;color:var(--muted);background:var(--panel);border-bottom:1px solid var(--line);white-space:nowrap;-webkit-user-select:none;user-select:none;padding:.5rem .65rem;font-weight:600;position:sticky;top:0}.maptable th.num,.maptable td.num{text-align:right;width:6rem}.maptable th.sortable{cursor:pointer}.maptable th.sortable:hover{color:var(--ink)}.maptable th.sorted{color:var(--accent)}.maptable th .sort-ind{width:1em;margin-left:.25rem;font-size:.8em;display:inline-block}.maptable tbody td{border-bottom:1px solid var(--line);padding:.45rem .65rem}.maptable tbody tr:last-child td{border-bottom:0}.maprow{cursor:pointer}.maprow:hover td{background:#ffffff0d}.maprow.active td{background:var(--accent);color:var(--accent-ink)}.maprow.hidden{display:none}.maptable td.modes{white-space:nowrap;width:5.4rem}.mode{margin-left:.15rem;display:inline-block}.mode.off{opacity:.18;filter:grayscale()}.maprow.active .mode.off{opacity:.35}.mapcard-meta .mode{font-size:.9em}.preview-map{width:100%;height:100%;position:relative}.preview-map canvas{object-fit:contain;width:100%;height:100%;display:block}.startpos{color:#fff;text-shadow:0 0 2px #000,0 0 3px #000,0 1px 2px #000;pointer-events:none;-webkit-user-select:none;user-select:none;font:700 .85rem/1 system-ui,sans-serif;position:absolute;transform:translate(-50%,-50%)}.detail-actions{z-index:1;border-top:1px solid var(--line);background:#1f1812;gap:.5rem;margin:auto -1rem -1rem;padding:.6rem 1rem 1rem;display:flex;position:sticky;bottom:-1rem}.detail-actions #start{flex:1;margin-top:0}.briefing-backdrop{z-index:50;-webkit-backdrop-filter:blur(2px);backdrop-filter:blur(2px);background:#000a;place-items:center;padding:2rem;display:grid;position:fixed;inset:0}.briefing{background:var(--panel);border:1px solid var(--line);border-radius:10px;width:100%;max-width:40rem;max-height:85vh;padding:1.2rem 1.4rem;overflow-y:auto}.briefing h2{margin:0 0 .6rem;font-size:1.2rem}.briefing-audio:not(:empty){margin:-.2rem 0 .6rem}.briefing h3{color:var(--muted);margin:1rem 0 .3rem;font-size:.95rem}.briefing-objective{margin:.2rem 0 .6rem;font-weight:600}.briefing-story{white-space:pre-line;margin:.2rem 0;line-height:1.45}.briefing-setup{margin:.4rem 0 .6rem}.briefing-close{margin-top:1rem}.slots{margin:.35rem 0 .75rem}.slot-teams{flex-wrap:wrap;gap:.6rem;margin-top:.3rem;display:flex}.team-group{border:1px solid var(--line);border-radius:999px;align-items:center;gap:.25rem;padding:.15rem .5rem;display:inline-flex}.slot-dot{background:var(--slot-color,#888);color:#000;border:1px solid #0006;border-radius:50%;justify-content:center;align-items:center;width:1.15rem;height:1.15rem;font-size:.72rem;line-height:1;display:inline-flex}.slot-dot.c0{opacity:.65}.detail{border:1px solid var(--line);background:#0002;border-radius:10px;flex-direction:column;min-height:0;padding:1rem;display:flex;overflow-y:auto}.detail>*{flex:none}.detail h2{margin:.8rem 0 .2rem;font-size:1.15rem}.preview{border:1px solid var(--line);aspect-ratio:3;background:#0c0a08;border-radius:8px;place-items:center;display:grid;overflow:hidden}.preview canvas{object-fit:contain;width:100%;height:100%;display:block}.preview.revealable{cursor:pointer}.preview.spoiler{gap:.5rem}.preview.spoiler:hover{border-color:var(--accent)}.preview .spoiler-q{color:var(--muted);font:700 3rem/1 system-ui,sans-serif}.preview.spoiler:hover .spoiler-q{color:var(--accent)}.preview .spoiler-hint{color:var(--muted);text-align:center;padding:0 .6rem;font-size:.8rem}.options{margin:1rem 0}.options h3{color:var(--muted);text-transform:uppercase;letter-spacing:.5px;margin:0 0 .4rem;font-size:.9rem}.options .row{opacity:.55;justify-content:space-between;align-items:center;gap:1rem;padding:.3rem 0;display:flex}.options select{font:inherit;color:var(--ink);border:1px solid var(--line);background:#0003;border-radius:6px;padding:.2rem .4rem}.options .row.live{opacity:1}.options label.check{cursor:pointer;align-items:center;gap:.4rem;display:inline-flex}.options label.check input{cursor:pointer}.setup-slots{flex-direction:column;display:flex}.setup-slot-row span{flex:auto}.setup-slot-controls{gap:.5rem;display:flex}.small{font-size:.8rem}button.primary:disabled{opacity:.4;cursor:default}button.ghost.small{padding:.15rem .5rem;font-size:.8rem}.mp-room-list{flex-direction:column;gap:.5rem;margin:.5rem 0 0;padding:0;list-style:none;display:flex}.mp-room-row{border:1px solid var(--line);background:#0002;border-radius:8px;flex-wrap:wrap;align-items:center;gap:.5rem .8rem;padding:.5rem .7rem;display:flex}.mp-room-code code{font-weight:600}.mp-room-map{flex:auto;min-width:8rem}.mp-room-state{color:var(--muted);font-size:.85rem}.mp-room-players{color:var(--muted);flex-basis:100%;font-size:.85rem}.mp-room-players .mp-disconnected{opacity:.6;text-decoration:line-through}.mp-room-actions{gap:.4rem;margin-left:auto;display:flex}.mp-browser-status{margin:.5rem 0 0}.mp-rename-btn{margin-left:.4rem}.mp-rename-input{font:inherit;color:var(--ink);border:1px solid var(--line);background:#0003;border-radius:6px;max-width:12rem;padding:.15rem .4rem}.game-screen{background:#000;position:fixed;inset:0}.game-screen canvas{width:100%;height:100%;image-rendering:pixelated;cursor:default;touch-action:none;display:block}.game-screen canvas.dragging{cursor:grabbing}.fab{top:1rem;left:calc(var(--gui-dock-w,0px) + 1rem);z-index:10;transition:left .18s;position:fixed}.game-hint{z-index:10;color:var(--muted);background:#000a;border-radius:999px;padding:.4rem .9rem;font-size:.85rem;position:fixed;bottom:1rem;left:50%;transform:translate(-50%)}.game-badge{z-index:10;letter-spacing:.3px;background:#000a;border-radius:999px;padding:.35rem .8rem;font-size:.8rem;font-weight:600;position:fixed;top:1rem;right:1rem}.game-badge.gpu{color:#86e08a}.game-badge.sw{color:var(--accent)}.mp-catchup-overlay{z-index:60;pointer-events:all;color:#e8e4dc;background:#000c;justify-content:center;align-items:center;font:500 1rem/1.4 sans-serif;display:flex;position:fixed;inset:0}.mp-catchup-overlay .box{text-align:center;background:#14110dcc;border:1px solid #fff2;border-radius:10px;min-width:260px;padding:1.4rem 2rem}.mp-catchup-overlay .title{margin-bottom:.5rem;font-weight:700}.mp-catchup-overlay .progress{color:var(--accent);font:600 .9rem ui-monospace,monospace}.fps-hud{z-index:10;color:#86e08a;letter-spacing:.3px;background:#000a;border-radius:999px;padding:.25rem .7rem;font:600 .78rem ui-monospace,monospace;position:fixed;top:3rem;right:1rem}.debug-panel{z-index:20;color:#e8e4dc;-webkit-backdrop-filter:blur(4px);backdrop-filter:blur(4px);background:#000c;border:1px solid #fff2;border-radius:10px;flex-direction:column;gap:.5rem;width:350px;max-height:calc(100vh - 6rem);padding:.8rem 1rem;font-size:.85rem;display:flex;position:fixed;top:5.4rem;right:1rem;overflow:hidden auto}.debug-panel.hidden{display:none}.debug-panel h3{margin:0 0 .2rem;font-size:.9rem;font-weight:700}.debug-panel h3 .muted{font-weight:400}.debug-panel label{cursor:pointer;align-items:center;gap:.5rem;display:flex}.debug-panel label.muted{cursor:default}.debug-panel input[type=checkbox],.debug-panel input[type=radio]{accent-color:var(--accent)}.dbg-nodes-head{margin-top:.15rem;font-size:.82rem}.dbg-slider{flex-direction:column;gap:.25rem;font-size:.82rem;display:flex}.dbg-slider input[type=range]{width:100%;accent-color:var(--accent)}.dbg-labels{flex-direction:column;gap:.25rem;font-size:.82rem;display:flex}.dbg-labels label.muted{opacity:.5}.dbg-swatch{border:1px solid #0006;border-radius:2px;flex:none;width:.7rem;height:.7rem}.dbg-bits{flex-direction:column;gap:.25rem;font-size:.82rem;display:flex}.dbg-bit-btns{gap:.25rem;display:flex}.bit-btn{cursor:pointer;color:#e8e4dc;border:1px solid var(--bit,#888);background:#ffffff14;border-radius:5px;flex:1;padding:.2rem 0;font:600 .72rem ui-monospace,monospace}.bit-btn.active{background:var(--bit);color:#000}.debug-canvas{pointer-events:none;z-index:5;width:100%;height:100%;position:absolute;inset:0}.dbg-readout{max-width:100%;margin-top:.4rem;font-size:.74rem;line-height:1.35}.dbg-readout .rd-head{margin-bottom:.15rem;font-weight:700}.dbg-readout .rd-sub{color:var(--muted);margin-bottom:.3rem}.dbg-readout .tri{word-break:break-word;border:1px solid #fff2;border-radius:6px;margin-top:.3rem;padding:.3rem .45rem;font-family:ui-monospace,monospace}.dbg-readout .tri.hov{background:#ffe6500f;border-color:#ffe650}.dbg-readout .bad{color:#ff5bbf;font-weight:700}.dbg-readout .frozen{color:#5bc8ff}.dbg-slice{width:180px;height:180px;image-rendering:pixelated;background:#1e1e24;border:1px solid #fff3;border-radius:6px;margin-top:.2rem;display:none}.dbg-uv{flex-direction:column;gap:.25rem;margin-top:.4rem;display:flex}.dbg-uv.hidden{display:none}.dbg-uv-head{font-size:.78rem;font-weight:700}.uv-row{grid-template-columns:2.6rem 1fr 2.4rem;align-items:center;gap:.4rem;display:grid}.uv-row .uv-tag{color:var(--muted);font-family:ui-monospace,monospace;font-size:.72rem}.uv-row input[type=range]{width:100%;accent-color:var(--accent)}.uv-row .uv-val{text-align:right;font-family:ui-monospace,monospace;font-size:.72rem}.uv-btns{gap:.4rem;margin-top:.3rem;display:flex}.uv-btn{cursor:pointer;color:#e8e4dc;background:#ffffff14;border:1px solid #ffffff2a;border-radius:6px;flex:1;padding:.25rem .4rem;font-size:.74rem}.uv-btn:hover{background:#fff2}.uv-btn.active{background:var(--accent);color:var(--accent-ink);border-color:var(--accent);font-weight:600}.dbg-zoom{flex-direction:column;gap:.3rem;display:flex}.dbg-zoom-head{font-size:.8rem;font-weight:700}.dbg-cam{overflow-wrap:anywhere;font:.74rem/1.4 ui-monospace,monospace}#dbg-hover{flex:none;height:2.1rem;overflow:hidden}.dbg-zoom-btns{flex-wrap:wrap;gap:.25rem;display:flex}.zoom-btn{cursor:pointer;color:#e8e4dc;background:#ffffff14;border:1px solid #ffffff2a;border-radius:5px;min-width:2.1rem;padding:.2rem .35rem;font-family:ui-monospace,monospace;font-size:.74rem}.zoom-btn:hover{background:#fff2}.zoom-btn.active{background:var(--accent);color:#1a1410;border-color:var(--accent);font-weight:700}.linkback,.linkfwd{color:var(--muted);white-space:nowrap;border:1px solid var(--line);border-radius:999px;padding:.3rem .85rem;font-size:.9rem;text-decoration:none;transition:color .12s,border-color .12s}.linkback:hover,.linkfwd:hover{color:var(--ink);border-color:var(--accent)}.bar .linkback{margin-left:auto}.menu-foot{flex:none;justify-content:flex-end;margin-top:.9rem;display:flex}#app:has(.tools-hub){align-items:start}.tools-hub{width:min(920px,100%)}.asset-status{border:1px solid var(--line);background:#0002;border-radius:10px;flex-wrap:wrap;align-items:center;gap:.75rem;margin:1rem 0 .25rem;padding:.7rem .9rem;display:flex}.asset-status .as-state{flex:auto}.asset-status .as-state.ok strong{color:var(--ink)}.asset-status .as-actions{flex-wrap:wrap;gap:.5rem;display:flex}.asset-status button{margin-top:0}button.sm{border-radius:8px;padding:.3rem .7rem;font-size:.85rem}.tool-grid{grid-template-columns:repeat(auto-fill,minmax(260px,1fr));gap:.9rem;margin-top:1.25rem;display:grid}.tool-card{color:var(--ink);border:1px solid var(--line);background:#0002;border-radius:12px;align-items:flex-start;gap:.9rem;padding:1rem 1.1rem;text-decoration:none;transition:border-color .12s,transform 50ms;display:flex}.tool-card:hover{border-color:var(--accent)}.tool-card:active{transform:translateY(1px)}.tc-icon{flex:none;font-size:1.8rem;line-height:1}.tc-body{flex-direction:column;gap:.25rem;display:flex}.tc-title{font-size:1.05rem;font-weight:600}.tc-desc{font-size:.85rem;line-height:1.4}
