:root{color-scheme:dark;--bg:#101517;--panel:#191f22;--raised:#222b2f;--line:#364248;--ink:#e7e4dc;--muted:#a8b4b9;--cyan:#93d5d8;--gold:#dfbc7c;--green:#9ecab1;--red:#d3a4a0}
*{box-sizing:border-box}body{margin:0;background:var(--bg);color:var(--ink);font-family:"Microsoft YaHei","Noto Sans CJK SC",system-ui,sans-serif;font-size:15px;line-height:1.6}button,textarea{font:inherit}button{color:var(--ink);background:var(--raised);border:1px solid var(--line);border-radius:5px;padding:8px 13px;cursor:pointer;min-height:40px}button:hover{border-color:var(--cyan);background:#2b373c}button:focus-visible,canvas:focus-visible,textarea:focus-visible{outline:2px solid var(--cyan);outline-offset:3px}h1,h2,p{margin:0}h1{font-size:24px;font-weight:600;letter-spacing:.04em}h2{font-size:17px;font-weight:600}kbd{display:inline-block;background:#2b353a;border:1px solid #4a565b;border-radius:3px;min-width:21px;text-align:center;font:13px ui-monospace,monospace;padding:0 4px;margin-right:3px}
.app{max-width:1560px;padding:20px 28px 10px;margin:auto}.top{display:flex;justify-content:space-between;align-items:center;gap:20px;padding-bottom:18px;border-bottom:1px solid var(--line)}.eyebrow{font-size:11px;letter-spacing:.13em;color:var(--muted);margin-bottom:5px}.header-actions{display:flex;gap:12px;align-items:center}.badge{color:var(--gold);font-size:13px}.workspace{display:grid;grid-template-columns:minmax(0,1fr) 330px;gap:24px;padding-top:20px}.play-column{min-width:0}.room-heading{display:flex;justify-content:space-between;align-items:center;gap:12px;margin-bottom:12px}.room-heading h2{font-size:21px}.room-heading p{color:var(--muted);font-size:14px}.room-status{display:flex;gap:12px;flex-wrap:wrap;justify-content:flex-end;color:var(--muted);font-size:13px}.stage{position:relative;border:1px solid var(--line);border-radius:6px;background:#141e23;overflow:hidden;aspect-ratio:16/10;min-height:350px;max-height:640px}.stage canvas{display:block;width:100%;height:100%;touch-action:none}.stage-badges{position:absolute;left:14px;top:12px;display:flex;gap:8px;pointer-events:none}.stage-badges span{font-size:12px;color:#b7c3c7;background:#172226df;border:1px solid #34454e;padding:2px 8px;border-radius:3px}.transition{position:absolute;inset:0;background:#101719;opacity:0;pointer-events:none;transition:opacity .08s}.transition.active{opacity:.72}.context{display:flex;align-items:center;gap:10px;color:var(--cyan);min-height:62px;font-size:14px;padding:12px 0}.context-dot{width:6px;height:6px;background:var(--cyan);border-radius:50%;flex:none}.input-bar{display:flex;align-items:center;gap:22px;padding:14px 18px;background:var(--panel);border:1px solid var(--line);border-radius:6px}.dpad{display:grid;grid-template-columns:44px 44px 44px;grid-template-rows:40px 40px;gap:4px;flex:none}.dpad button{padding:0;font-size:22px;touch-action:none;user-select:none;-webkit-user-select:none}.dpad .up{grid-column:2}.dpad .left{grid-column:1;grid-row:2}.dpad .down{grid-column:2;grid-row:2}.dpad .right{grid-column:3;grid-row:2}.dpad button.pressed{background:#38505a;border-color:var(--cyan)}.key-guide{color:var(--muted);font-size:12px;flex:1}.key-guide p+p{margin-top:7px}.primary{background:#344a4d;border-color:#63878b;color:#edf8f7}.interact{min-height:54px}.help{background:var(--panel);padding:16px;border-left:2px solid var(--gold);margin-top:16px;color:var(--muted);font-size:14px}.help p+p{margin-top:10px}.toast{margin-top:14px;min-height:45px;padding:10px 13px;background:#202a2e;border-left:2px solid var(--gold);font-size:14px;color:#e4d9bd}.sidebar{display:flex;flex-direction:column;gap:17px}.sidebar section{background:var(--panel);border:1px solid var(--line);padding:15px;border-radius:6px}.panel-heading{display:flex;justify-content:space-between;gap:6px;align-items:baseline;margin-bottom:10px}.panel-heading span{font-size:11px;color:var(--muted);white-space:nowrap}.map-panel{padding-bottom:10px!important}#map svg{width:100%;display:block;height:auto;overflow:visible}#map .map-node{cursor:pointer}#map .map-node rect{fill:#263138;stroke:#677e87;stroke-width:1.5}#map .map-node.visited rect{fill:#304c4e;stroke:#85b6b4}#map .map-node.current rect{fill:#426c71;stroke:#a5e4e5;stroke-width:2.8}#map .map-node.selected rect{stroke:var(--gold);stroke-width:2.8}#map text{fill:#e5e6df;pointer-events:none}.map-legend{display:flex;gap:15px;font-size:11px;color:var(--muted);margin-top:7px}.map-legend i{display:inline-block;width:7px;height:7px;margin-right:5px}.legend-current{background:var(--cyan)}.legend-walked{background:var(--green)}.legend-locked{background:var(--gold)}.subtle{font-size:11px;color:var(--muted);margin-top:7px}.detail-panel>p{font-size:13px;color:var(--muted)}.door-list{padding:0;margin:10px 0;list-style:none;font-size:12px}.door-list li{padding:5px 0;border-bottom:1px solid #303b40}.door-list .locked{color:var(--gold)}.full{width:100%}.secondary{font-size:13px;background:transparent}.secondary span{font-size:11px;color:var(--muted);margin-left:6px}.flags h2,.review-panel h2{margin-bottom:10px}.flags p{display:flex;align-items:center;gap:8px;font-size:13px;padding:3px 0}.flags strong{font-size:12px;color:var(--gold);margin-left:auto;font-weight:400}.state-dot{width:6px;height:6px;background:#876c4c;border-radius:50%}.state-dot.open{background:var(--green)}textarea{display:block;width:100%;resize:vertical;background:#11191d;color:var(--ink);border:1px solid var(--line);border-radius:4px;padding:9px;font-size:12px}.review-actions{display:flex;justify-content:space-between;gap:9px;margin-top:10px}.review-actions button{font-size:12px;flex:1}.danger{color:#dab3af}.app footer{color:var(--muted);font-size:11px;padding:18px 0 8px}
@media(min-width:1450px){.stage{aspect-ratio:16/9}}
@media(max-width:1050px){.app{padding:16px}.workspace{grid-template-columns:minmax(0,1fr) 280px;gap:16px}.input-bar{gap:12px;padding:12px}.key-guide{display:none}.interact{margin-left:auto}.badge{display:none}.stage{min-height:330px}.room-status{font-size:11px;gap:5px;display:block}.room-status span{display:block}}
@media(max-width:760px){.workspace{grid-template-columns:1fr}.app{padding:12px}.top{gap:8px}h1{font-size:19px}.eyebrow{font-size:9px}.top button{font-size:12px;padding:6px 9px}.sidebar{display:grid;grid-template-columns:1fr 1fr;gap:12px}.map-panel,.detail-panel{grid-column:1/-1}.stage{min-height:350px;aspect-ratio:4/3}.room-heading h2{font-size:18px}.key-guide{display:block}.input-bar{padding:10px;gap:12px}.dpad{grid-template-columns:48px 48px 48px;grid-template-rows:43px 43px}.context{min-height:64px}.sidebar section{padding:12px}.flags,.review-panel{grid-column:1/-1}#map{max-width:520px;margin:auto}}
.stage{width:100%;max-width:100%;min-width:0}
@media(max-width:520px){.key-guide{display:none}.input-bar{justify-content:space-between}.interact{margin-left:auto}}
.inactive-key{display:grid;place-items:center;color:var(--muted)}.nearby-actions{display:flex;gap:6px;flex-wrap:wrap;margin:-6px 0 12px}.nearby-actions button{font-size:12px;min-height:32px;padding:4px 8px}.floor-panel{margin-top:16px;padding:14px;border:1px solid var(--line);background:var(--panel);border-radius:6px}#floorMap svg{display:block;width:100%;height:170px}#map svg,#mapLarge svg{background:#0c1428;border:1px solid #40506a;image-rendering:pixelated}#map .map-node rect,#mapLarge .map-node rect{fill:#1c3879;stroke:#cbd5f2;stroke-width:1.4}#map .map-node.current rect,#mapLarge .map-node.current rect{fill:#2c5aa2;stroke:#e9cf86}#map .map-node.visited rect,#mapLarge .map-node.visited rect{fill:#31599a}#map text,#mapLarge text{fill:#f0e5c3}.small-button{padding:3px 9px;min-height:30px;font-size:12px}.config-panel label{display:block;color:var(--muted);font-size:12px;margin:7px 0}.config-panel select,.config-panel input{width:100%;padding:7px 5px;min-height:36px;background:#10191e;color:var(--ink);border:1px solid var(--line);border-radius:4px;font:inherit}.config-grid{display:grid;grid-template-columns:1fr 1fr;gap:0 9px}.config-panel>p{font-size:11px;color:var(--muted);margin-top:8px}dialog{background:var(--bg);color:var(--ink);border:1px solid var(--line);border-radius:7px;width:min(1400px,95vw);max-height:94vh;padding:18px}dialog::backdrop{background:#080d14cc}.map-scroll{overflow:auto;max-height:75vh}#mapLarge{min-width:1050px}#mapLarge svg{display:block;width:100%;height:auto}
@media(prefers-reduced-motion:reduce){.transition{transition:none}}

.atlas-room{cursor:pointer}.atlas-room:focus{outline:none}.atlas-room:focus>rect:first-child{stroke:#fff4ae;stroke-width:.5}.config-panel{grid-column:1/-1}button:disabled{opacity:.45;cursor:default}
