:root{--bg: #10131a;--panel: #171d27;--line: #242e3c;--ink: #dde4ef;--dim: #8d9aad;--mark: #e0b96f;--black: #0b0e14;--ring: #7f8ea3;--good: #59b18b;--bad: #d3666c;--ghost: #3e4d61}*{box-sizing:border-box}body{margin:0;background:var(--bg);color:var(--ink);font:15px/1.65 ui-sans-serif,system-ui,-apple-system,Segoe UI,sans-serif}main{max-width:1080px;margin:0 auto;padding:28px 20px 72px}header h1{font-size:30px;margin:0 0 8px;letter-spacing:-.01em}header h1 span{color:var(--mark)}.sub{color:var(--dim);max-width:68ch;margin:0 0 22px}.sub strong{color:var(--ink);font-weight:600}#wrap{display:flex;gap:22px;align-items:flex-start;flex-wrap:wrap}.stage{flex:0 0 auto}.side{flex:1 1 260px;min-width:240px}h3{font-size:12px;text-transform:uppercase;letter-spacing:.12em;color:var(--dim);margin:0 0 10px;font-weight:600}#board{position:relative;display:grid;gap:0;background:var(--panel);border:2px solid var(--line);border-radius:8px;touch-action:none;user-select:none;-webkit-user-select:none}#rooms{position:absolute;top:0;right:0;bottom:0;left:0;width:100%;height:100%;pointer-events:none;z-index:0}.cell{width:var(--cs);height:var(--cs);border:1px solid rgba(190,210,235,.055);position:relative;z-index:1;display:flex;align-items:center;justify-content:center;font-size:15px;font-variant-numeric:tabular-nums;color:transparent;cursor:crosshair}.cell.num{color:var(--ink);font-weight:700;font-size:17px}.cell.drawing{box-shadow:inset 0 0 0 2px var(--mark)}.cell.ghost{border-color:#2b3949}.legend{display:flex;flex-wrap:wrap;gap:8px 20px;margin:20px 0 6px;color:var(--dim);font-size:13px}.legend b{color:var(--ink);font-weight:600}.swatch{display:inline-block;width:13px;height:13px;border-radius:50%;margin-right:7px;vertical-align:-2px}.swatch{border-radius:3px}.swatch.room{background:#3f6f9a}.swatch.part{background:#7b6636}.swatch.wrong{background:#8c4249}.swatch.gh{background:#4b8fd0;opacity:.35}.hud{min-height:26px;margin:6px 0 14px;color:var(--dim);font-size:14px}.hud .ok{color:var(--good)}.hud .no{color:var(--bad)}.controls{display:flex;flex-wrap:wrap;gap:10px;align-items:center;margin-bottom:26px}.controls label{color:var(--dim);font-size:13px}.controls select,.controls button{background:var(--panel);color:var(--ink);border:1px solid var(--line);border-radius:7px;padding:7px 11px;font:inherit;font-size:13px;cursor:pointer}.controls button:hover{border-color:var(--mark)}.controls .chk{display:inline-flex;align-items:center;gap:6px}.budget{display:flex;flex-wrap:wrap;gap:6px}.chip{display:inline-flex;align-items:center;gap:5px;background:#11161e;border:1px solid var(--line);border-radius:6px;padding:3px 7px;font-size:12px;font-variant-numeric:tabular-nums}.chip b{color:var(--dim);font-weight:600}.chip i{font-style:normal;color:#303c4c}.chip i.on{color:var(--mark)}.chip i.bad{color:var(--bad)}.chip.done{border-color:#2c5d49}.chip.over{border-color:var(--bad)}.budget .row{display:flex;justify-content:space-between;gap:12px;font-size:13px;padding:3px 0;width:100%}.budget .row span:last-child{font-variant-numeric:tabular-nums;color:var(--ink)}.budget .row.good span:last-child{color:var(--good)}.asidenote{color:var(--dim);font-size:13px;margin-top:14px}.asidenote .row{display:flex;justify-content:space-between;gap:12px;padding:3px 0}.asidenote .row span:last-child{font-variant-numeric:tabular-nums;color:var(--ink)}.asidenote .row.good span:last-child{color:var(--good)}.asidenote b{color:var(--ink)}code{background:#11161e;border:1px solid var(--line);border-radius:4px;padding:1px 5px;font-size:12.5px}.notes{margin-top:42px;border-top:1px solid var(--line);padding-top:26px}.notes h2{font-size:19px;margin:30px 0 10px}.notes p{color:#b9c4d3;max-width:74ch}.notes table{border-collapse:collapse;font-size:13px;margin:14px 0;font-variant-numeric:tabular-nums}.notes th,.notes td{border:1px solid var(--line);padding:4px 9px;text-align:right}.notes th{color:var(--dim);font-weight:600}.notes ul{color:#b9c4d3;max-width:74ch}.notes a{color:var(--mark)}footer{margin-top:46px;color:var(--dim);font-size:13px}footer a{color:var(--mark)}@media (max-width: 820px){#wrap{flex-direction:column}}
