:root{--bg:#f4f7fb;--card:#fff;--ink:#172033;--muted:#6c768b;--line:#dce3ef;--primary:#173f7a;--accent:#0f8d83;--danger:#c33846;--shadow:0 12px 35px rgba(25,47,82,.08)}*{box-sizing:border-box}body{margin:0;background:var(--bg);color:var(--ink);font:14px/1.45 Inter,Segoe UI,Arial,sans-serif}a{color:inherit}.topbar{display:flex;justify-content:space-between;align-items:center;padding:18px 28px;background:#fff;border-bottom:1px solid var(--line);position:sticky;top:0;z-index:20}.topbar h1{font-size:20px;margin:2px 0}.topbar nav{display:flex;gap:8px}.topbar nav a{text-decoration:none;padding:9px 12px;border-radius:9px;color:var(--muted)}.topbar nav a.active,.topbar nav a:hover{background:#eef4fb;color:var(--primary)}.eyebrow{text-transform:uppercase;letter-spacing:.12em;font-weight:700;font-size:10px;color:var(--muted)}.shell{max-width:1560px;margin:auto;padding:22px}.card{background:var(--card);border:1px solid var(--line);border-radius:16px;box-shadow:var(--shadow)}.kpis{display:grid;grid-template-columns:repeat(4,minmax(0,1fr));gap:12px;margin-bottom:14px}.kpi{padding:16px 18px}.kpi strong{display:block;font-size:25px}.kpi span{color:var(--muted)}.toolbar{padding:14px;margin-bottom:14px}.search-row,.availability-row,.button-row{display:flex;align-items:center;gap:9px;flex-wrap:wrap}.availability-row{border-top:1px solid var(--line);margin-top:12px;padding-top:12px}input,select{border:1px solid #cbd5e3;border-radius:9px;padding:10px 11px;background:#fff;color:var(--ink);min-height:40px}.search-row input{min-width:280px;flex:1}.btn{border:1px solid #cbd5e3;background:#fff;padding:9px 13px;border-radius:9px;cursor:pointer;font-weight:700;color:var(--ink)}.btn:hover{filter:brightness(.98)}.btn.primary{background:var(--primary);border-color:var(--primary);color:#fff}.btn.accent{background:var(--accent);border-color:var(--accent);color:#fff}.btn:disabled{opacity:.45;cursor:not-allowed}.workspace{display:grid;grid-template-columns:minmax(0,1.9fr) minmax(360px,.8fr);gap:14px;align-items:start}.map-panel,.results{min-height:650px}.panel-head{display:flex;justify-content:space-between;align-items:center;padding:16px 18px 12px}.panel-head h2{margin:2px 0;font-size:18px}.floor-tabs{display:flex;gap:6px;flex-wrap:wrap}.floor-tabs button{border:1px solid var(--line);background:#fff;border-radius:8px;padding:7px 10px;cursor:pointer}.floor-tabs button.active{background:#173f7a;color:#fff;border-color:#173f7a}.map-host{margin:0 16px 10px;border:1px solid var(--line);border-radius:12px;background:#fafcff;overflow:hidden;min-height:480px;display:grid;place-items:center}.map-host svg{width:100%;height:auto;max-height:650px;display:block}.room-hotspot{fill:rgba(23,63,122,.02);stroke:rgba(23,63,122,.12);stroke-width:4;vector-effect:non-scaling-stroke;cursor:pointer;transition:.15s}.room-hotspot:hover{fill:rgba(23,63,122,.2);stroke:#173f7a}.room-hotspot.is-selected{fill:rgba(223,77,107,.42);stroke:#bf3150}.room-hotspot.is-available{fill:rgba(21,181,150,.35);stroke:#0c8b75}.room-hotspot.is-lab:not(.is-selected):not(.is-available){stroke:#7758c9;stroke-dasharray:10 7}.legend{display:flex;gap:14px;padding:0 18px 16px;color:var(--muted);font-size:12px}.dot{display:inline-block;width:10px;height:10px;border-radius:50%;margin-right:5px}.dot.selected{background:#df4d6b}.dot.available{background:#15b596}.dot.lab{background:#7758c9}.result-body{padding:0 18px 18px;overflow:auto}.result-body.compact{max-height:460px}.empty-state{color:var(--muted);padding:24px 4px}.data-table{width:100%;border-collapse:collapse;font-size:12px}.data-table th,.data-table td{border-bottom:1px solid var(--line);padding:9px 7px;text-align:left;white-space:nowrap}.data-table th{position:sticky;top:0;background:#fff;color:var(--muted);font-size:10px;text-transform:uppercase;letter-spacing:.06em}.badge{display:inline-block;border-radius:999px;background:#eef4fb;padding:3px 7px}.login-body{min-height:100vh;display:grid;place-items:center;background:radial-gradient(circle at 10% 0,#e4eefc,transparent 36%),var(--bg)}.login-card{width:min(420px,92vw);background:#fff;border:1px solid var(--line);border-radius:20px;box-shadow:var(--shadow);padding:28px}.login-card h1{font-size:23px;margin:12px 0 5px}.login-card p{color:var(--muted)}.login-card label{display:grid;gap:6px;margin:18px 0}.login-card .btn{width:100%}.brand-mark{width:54px;height:54px;border-radius:16px;background:var(--primary);color:#fff;display:grid;place-items:center;font-weight:800}.subtle-link{display:block;text-align:center;margin-top:16px;color:var(--muted)}.alert{padding:10px 12px;border-radius:9px}.alert.error{background:#fff0f2;color:#a72a3a}.maintenance-grid{display:grid;grid-template-columns:minmax(0,1.3fr) minmax(380px,.7fr);gap:14px}.maintenance-grid>.card{padding-bottom:16px}.form-grid{padding:0 18px 12px;display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:10px}.form-grid label,label{display:grid;gap:5px;color:var(--muted);font-weight:600}.form-grid .check{display:flex;align-items:center;gap:7px}.button-row{padding:0 18px 12px}.hint,.maintenance-grid .card>p,.maintenance-grid form,.maintenance-grid .card>label,.status-box{margin-left:18px;margin-right:18px}.hint{color:var(--muted);font-size:12px}.map-host.editor{min-height:420px}.draw-rect{fill:rgba(223,77,107,.18);stroke:#bf3150;stroke-width:4;vector-effect:non-scaling-stroke}.status-box{margin-top:12px;padding:10px;border-radius:9px;background:#f5f8fc;color:var(--muted);min-height:38px}hr{border:0;border-top:1px solid var(--line);margin:20px 18px}.warning{color:#ad6a00}.error-text{color:var(--danger)}@media(max-width:980px){.workspace,.maintenance-grid{grid-template-columns:1fr}.kpis{grid-template-columns:repeat(2,1fr)}.results{min-height:auto}.map-panel{min-height:auto}}@media(max-width:620px){.topbar{padding:12px 14px;align-items:flex-start;gap:12px}.topbar h1{font-size:16px}.shell{padding:12px}.kpis{grid-template-columns:1fr 1fr}.form-grid{grid-template-columns:1fr}.availability-row>*{flex:1 1 auto}.map-host{margin:0 8px 10px}.panel-head{padding:12px}.legend{padding:0 12px 12px}}
.semester-bar{padding:12px 16px;margin-bottom:14px;display:flex;justify-content:space-between;align-items:end;gap:14px}.semester-bar label{min-width:320px}.semester-actions{display:flex;align-items:center;gap:12px;flex-wrap:wrap}.muted{color:var(--muted)}.modal{border:0;padding:0;border-radius:18px;box-shadow:0 25px 80px rgba(20,35,65,.25);max-width:760px;width:min(760px,94vw)}.modal::backdrop{background:rgba(18,28,48,.48)}.modal-card{padding:0 0 18px}.modal-head{display:flex;align-items:center;justify-content:space-between;padding:20px 22px 8px}.modal-head h2{margin:2px 0}.icon-btn{border:0;background:transparent;font-size:30px;cursor:pointer;color:var(--muted)}.form-grid.two{grid-template-columns:repeat(2,minmax(0,1fr));padding:8px 22px 12px}.export-columns{margin:0 22px 16px;padding:12px;border-radius:10px;background:#f5f8fc;color:var(--muted);line-height:1.7}.button-row.end{justify-content:flex-end}.dot.observed{background:#e0a21a}.room-hotspot.is-observed:not(.is-selected):not(.is-available){stroke:#e0a21a;stroke-dasharray:14 8;fill:rgba(224,162,26,.08)}.badge.warn{background:#fff3d6;color:#865700}.table-wrap{overflow:auto;max-height:560px}.upload-row{display:flex;gap:10px;align-items:center;flex-wrap:wrap}.upload-row input[type=file]{flex:1;min-width:250px}.panel-head.small{padding-bottom:4px}.panel-head.small h3{margin:2px 0}.wide-label{margin:0 18px 12px}.startup-error{padding:24px}.maintenance-grid{grid-template-columns:minmax(430px,.9fr) minmax(620px,1.1fr)}
@media(max-width:900px){.semester-bar{align-items:stretch;flex-direction:column}.semester-bar label{min-width:0}.form-grid.two{grid-template-columns:1fr}.maintenance-grid{grid-template-columns:1fr}}

/* Theme system */
:root{--surface-2:#fafcff;--surface-3:#f5f8fc;--nav-hover:#eef4fb;--input-border:#cbd5e3;--focus:#3b82f6;--danger-bg:#fff0f2;--warn-bg:#fff3d6;--map-line:#dce3ef}
:root[data-theme="dark"]{--bg:#0d121a;--card:#151c27;--ink:#edf3fb;--muted:#aab7ca;--line:#2b3749;--primary:#5d8fd8;--accent:#2cc7b6;--danger:#ff7a8a;--shadow:0 16px 40px rgba(0,0,0,.28);--surface-2:#101722;--surface-3:#1b2533;--nav-hover:#203047;--input-border:#3b4a60;--focus:#89b4ff;--danger-bg:#3a1d24;--warn-bg:#3a2e16;--map-line:#39485e}
:root[data-contrast="high"]{--muted:#4b5565;--line:#9aa8bb;--input-border:#7f8da0;--shadow:0 8px 24px rgba(0,0,0,.14)}
:root[data-theme="dark"][data-contrast="high"]{--muted:#d7e0ec;--line:#71819a;--input-border:#8797ae;--ink:#fff}
html[data-theme="dark"] body,html[data-theme="dark"] .topbar,html[data-theme="dark"] .login-card,html[data-theme="dark"] .modal,html[data-theme="dark"] .modal-card,html[data-theme="dark"] input,html[data-theme="dark"] select,html[data-theme="dark"] .btn,html[data-theme="dark"] .floor-tabs button,html[data-theme="dark"] .data-table th{background:var(--card);color:var(--ink)}
html[data-theme="dark"] .map-host{background:var(--surface-2)}
html[data-theme="dark"] .export-columns,html[data-theme="dark"] .status-box{background:var(--surface-3);color:var(--muted)}
html[data-theme="dark"] .badge{background:var(--nav-hover);color:var(--ink)}
html[data-theme="dark"] .badge.warn{background:var(--warn-bg);color:#ffd47a}
html[data-theme="dark"] .alert.error{background:var(--danger-bg);color:#ff9aa8}
html[data-theme="dark"] .login-body{background:radial-gradient(circle at 10% 0,#18263a,transparent 38%),var(--bg)}
html[data-theme="dark"] .topbar nav a:hover,html[data-theme="dark"] .topbar nav a.active{background:var(--nav-hover);color:var(--ink)}
html[data-theme="dark"] .floor-tabs button.active{background:var(--primary);border-color:var(--primary);color:#fff}
html[data-contrast="high"] .card,html[data-contrast="high"] input,html[data-contrast="high"] select,html[data-contrast="high"] .btn,html[data-contrast="high"] .floor-tabs button,html[data-contrast="high"] .map-host{border-width:2px}
html[data-contrast="high"] :focus-visible{outline:3px solid var(--focus);outline-offset:2px}
.topbar,.login-card,.modal,.modal-card,input,select,.btn,.floor-tabs button,.data-table th{background:var(--card);color:var(--ink)}
.map-host{background:var(--surface-2)}
.export-columns,.status-box{background:var(--surface-3)}
input,select,.btn{border-color:var(--input-border)}
.nav-button{border:0;background:transparent;padding:9px 12px;border-radius:9px;color:var(--muted);font:inherit;cursor:pointer}
.nav-button:hover{background:var(--nav-hover);color:var(--primary)}
/* Native SVG room targets. For best results, the SVG should use a rect/polygon/path with data-room or room-ROOMNO id. */
.room-vector{cursor:pointer;transition:filter .15s,opacity .15s}.room-vector:hover{filter:drop-shadow(0 0 4px rgba(23,63,122,.7))}.room-vector.is-selected{fill:rgba(223,77,107,.48)!important;stroke:#bf3150!important;stroke-width:4!important;vector-effect:non-scaling-stroke}.room-vector.is-available{fill:rgba(21,181,150,.42)!important;stroke:#0c8b75!important;stroke-width:4!important;vector-effect:non-scaling-stroke}.room-vector.is-observed:not(.is-selected):not(.is-available){stroke:#e0a21a!important;stroke-width:4!important;stroke-dasharray:14 8!important;vector-effect:non-scaling-stroke}.room-vector.is-lab:not(.is-selected):not(.is-available){stroke:#7758c9!important;stroke-width:4!important;stroke-dasharray:10 7!important;vector-effect:non-scaling-stroke}.map-host svg.inline-floor-svg{width:100%;height:auto;max-height:650px;display:block}.map-svg-missing{pointer-events:none;opacity:.45}

/* Advisor-style compact appearance control */
.theme-icon-btn{width:38px;height:38px;border:1px solid var(--line);border-radius:10px;background:var(--card);color:var(--muted);display:grid;place-items:center;cursor:pointer;padding:0;transition:border-color .15s,background .15s,color .15s,transform .15s}
.theme-icon-btn:hover{background:var(--nav-hover,#eef4fb);color:var(--primary);border-color:var(--input-border,#cbd5e3)}
.theme-icon-btn:active{transform:translateY(1px)}
.theme-icon-btn svg{width:19px;height:19px;fill:currentColor}
.theme-icon-btn[data-effective-theme="dark"] svg{transform:rotate(-8deg)}
.theme-popover{position:fixed;z-index:80;background:var(--card);color:var(--ink);border:1px solid var(--line);border-radius:14px;box-shadow:0 18px 50px rgba(13,25,45,.2);padding:12px}
.theme-popover[hidden]{display:none}
.theme-popover-head{display:flex;align-items:center;justify-content:space-between;padding:2px 2px 10px}
.theme-popover-head strong{font-size:13px}
.theme-popover-close{border:0;background:transparent;color:var(--muted);font-size:20px;line-height:1;cursor:pointer;width:28px;height:28px;border-radius:8px}
.theme-popover-close:hover{background:var(--nav-hover,#eef4fb);color:var(--ink)}
.theme-segment{display:grid;grid-template-columns:repeat(3,1fr);gap:5px;padding:4px;background:var(--surface-2,#f4f7fb);border-radius:10px}
.theme-segment button{border:0;background:transparent;color:var(--muted);border-radius:8px;padding:8px 7px;font-weight:700;cursor:pointer}
.theme-segment button.active{background:var(--card);color:var(--primary);box-shadow:0 1px 4px rgba(13,25,45,.12)}
.theme-contrast-row{margin-top:10px;padding:10px 4px 2px;display:flex;align-items:center;justify-content:space-between;gap:16px;color:var(--ink)}
.theme-contrast-row span{display:grid;gap:1px}
.theme-contrast-row small{font-weight:400;color:var(--muted)}
.theme-contrast-row input{width:19px;height:19px;min-height:0}
html[data-theme="dark"] .theme-icon-btn,html[data-theme="dark"] .theme-popover{background:var(--card);color:var(--ink)}
html[data-theme="dark"] .theme-segment{background:var(--surface-2)}
html[data-theme="dark"] .theme-segment button.active{background:var(--surface-3);color:#fff}
@media(max-width:620px){.theme-icon-btn{width:36px;height:36px;border-radius:9px}.theme-popover{max-width:calc(100vw - 24px)}}
