:root{--bg: #0d1117;--panel: #161b22;--line: #30363d;--text: #e6edf3;--muted: #8b949e;--accent: #58a6ff;--unknown: #f0883e;--tagged: #3fb950}*{box-sizing:border-box}body{margin:0;background:var(--bg);color:var(--text);font-family:ui-sans-serif,system-ui,-apple-system,Segoe UI,Roboto,sans-serif}.app{display:flex;flex-direction:column;height:100vh}.topbar{display:flex;align-items:center;gap:12px;padding:12px 20px;border-bottom:1px solid var(--line)}.topbar h1{font-size:18px;margin:0;letter-spacing:.5px}.status{font-size:12px;padding:2px 8px;border-radius:999px;border:1px solid var(--line)}.status.on{color:var(--tagged);border-color:var(--tagged)}.status.off{color:var(--muted)}.layout{display:flex;flex:1;min-height:0}.map{flex:1;padding:16px;display:flex}.floor{width:100%;height:100%;background:var(--panel);border:1px solid var(--line);border-radius:8px}.floor-bg{fill:#0b0f14}.grid{stroke:var(--line);stroke-width:.05}.receiver{fill:var(--accent);opacity:.8}.receiver-label{fill:var(--muted);font-size:1.1px;text-anchor:middle}.entity .dot{stroke:#000;stroke-width:.08}.entity.unknown .dot{fill:var(--unknown)}.entity.tagged .dot{fill:var(--tagged)}.entity-label{fill:var(--text);font-size:.92px;font-weight:600;pointer-events:none}.panel{width:320px;border-left:1px solid var(--line);padding:16px;overflow-y:auto;background:var(--panel)}.panel h2{font-size:13px;text-transform:uppercase;letter-spacing:.6px;color:var(--muted);margin:16px 0 8px}.muted{color:var(--muted);font-size:13px}.row{display:flex;align-items:center;gap:8px;padding:8px;border:1px solid var(--line);border-radius:6px;margin-bottom:8px}.row .fp{font-family:ui-monospace,SFMono-Regular,Menlo,monospace;font-size:12px;color:var(--muted);white-space:nowrap}.row .name{font-weight:600;color:var(--tagged)}.row input{flex:1;min-width:0;background:var(--bg);border:1px solid var(--line);color:var(--text);border-radius:6px;padding:6px 8px;font-size:13px}.row button{background:var(--accent);color:#04101f;border:none;border-radius:6px;padding:6px 10px;font-weight:600;cursor:pointer}.row button:disabled{opacity:.5;cursor:default}.row.done{border-color:var(--tagged)}.modes{display:flex;gap:4px;margin-left:8px}.modes button,.speeds button{background:var(--bg);color:var(--muted);border:1px solid var(--line);border-radius:6px;padding:4px 10px;font-size:12px;cursor:pointer}.modes button.active,.speeds button.active{color:var(--text);border-color:var(--accent)}.history{flex:1;display:flex;flex-direction:column;min-height:0;padding:16px;gap:12px}.history .map{flex:1;padding:0}.centered{margin:auto}.controls{display:flex;align-items:center;gap:12px;padding:10px 12px;border:1px solid var(--line);border-radius:8px;background:var(--panel)}.controls .play{background:var(--accent);color:#04101f;border:none;border-radius:6px;padding:6px 14px;font-weight:600;cursor:pointer}.controls input[type=range]{flex:1;accent-color:var(--accent)}.controls .clock{font-family:ui-monospace,SFMono-Regular,Menlo,monospace;font-size:13px;color:var(--text);min-width:92px;text-align:right}.speeds{display:flex;gap:4px}.controls .count{font-size:12px;white-space:nowrap}.floor.clickable{cursor:crosshair}.field{display:flex;flex-direction:column;gap:4px;margin-bottom:8px}.field span{font-size:11px;color:var(--muted)}.field input{background:var(--bg);border:1px solid var(--line);color:var(--text);border-radius:6px;padding:6px 8px;font-size:13px}.dims{display:flex;gap:8px}.dims .field{flex:1}.grid2{display:grid;grid-template-columns:1fr 1fr;gap:8px;margin-bottom:8px}.grid2 input{background:var(--bg);border:1px solid var(--line);color:var(--text);border-radius:6px;padding:6px 8px;font-size:13px;min-width:0}button.primary{width:100%;background:var(--accent);color:#04101f;border:none;border-radius:6px;padding:8px 10px;font-weight:600;cursor:pointer}button.primary:disabled{opacity:.5;cursor:default}.row .num{width:56px;flex:none}button.danger{background:transparent;color:var(--unknown);border:1px solid var(--line);border-radius:6px;padding:6px 8px;cursor:pointer}.auth{margin-left:auto;display:flex;align-items:center;gap:6px}.auth input{background:var(--bg);border:1px solid var(--line);color:var(--text);border-radius:6px;padding:5px 8px;font-size:12px;width:140px}.auth input.error{border-color:var(--unknown)}.auth button{background:var(--bg);color:var(--text);border:1px solid var(--line);border-radius:6px;padding:5px 10px;font-size:12px;cursor:pointer}.admin-badge{font-size:12px;color:var(--tagged);border:1px solid var(--tagged);border-radius:999px;padding:2px 8px}.wall{stroke:#7d8590;stroke-width:.35;stroke-linecap:round}.furniture{fill:#262c36;stroke:#313a46;stroke-width:.05}.room-label{fill:#6e7681;font-size:1.1px;font-weight:500;text-anchor:middle;letter-spacing:.03px;pointer-events:none}
