:root{--bg:#f7f8fa;--surface:#fff;--ink:#182943;--muted:#63748a;--line:#dbe3ec;--navy:#233e61;--soft:#f0f4f8;--focus:#567eab;--map-corridor:#fafbfd;--map-muted:#e8edf3;--map-room:#e8effa;--map-office:#e7f0ed;--map-community:#f4eddc;--map-border:#9cabbc;--map-hover:#c7d9f2;font-family:Inter,-apple-system,BlinkMacSystemFont,"Segoe UI",sans-serif;color-scheme:light dark;color:var(--ink);background:var(--bg);font-size:16px;line-height:1.5}
*{box-sizing:border-box}body{margin:0}button,input,select{font:inherit;color:inherit}button,a,input,select{-webkit-tap-highlight-color:transparent}button{cursor:pointer;border:1px solid var(--navy);border-radius:10px;background:var(--navy);color:var(--surface);padding:10px 16px;min-height:46px;font-weight:600}button:hover{filter:brightness(1.08)}button:disabled{cursor:default;opacity:.45}a{color:var(--navy);text-decoration-thickness:1px;text-underline-offset:4px}a:focus-visible,button:focus-visible,input:focus-visible,select:focus-visible{outline:3px solid var(--focus);outline-offset:3px}[hidden]{display:none!important}p,h1,h2,h3{margin:0}h1{font-size:30px;line-height:1.2;letter-spacing:-.6px}h2{font-size:21px;line-height:1.4}h3{font-size:18px;line-height:1.5}p{overflow-wrap:anywhere}input,select{width:100%;padding:11px 12px;border:1px solid var(--line);border-radius:9px;background:var(--surface);min-height:46px}label{display:flex;flex-direction:column;gap:7px;font-weight:550}label input,label select{font-weight:400}.header{display:flex;align-items:center;justify-content:space-between;gap:16px;border-bottom:1px solid var(--line);padding:18px max(24px,calc((100vw - 1100px)/2));background:var(--surface)}.brand{display:flex;gap:12px;align-items:center;color:var(--ink);font-size:21px;font-weight:700;text-decoration:none}.brand-mark{width:42px;height:42px;display:grid;place-items:center;border-radius:11px;background:var(--navy);color:var(--surface);font-size:25px}.main-link{font-weight:550;font-size:16px;white-space:nowrap}.shell{max-width:1100px;margin:auto;padding:30px 24px}.mode-note{display:flex;gap:13px;align-items:flex-start;background:var(--soft);border:1px solid var(--line);border-radius:14px;padding:18px 20px}.mode-note p{color:var(--muted);margin-top:4px}.status-dot{width:9px;height:9px;flex-shrink:0;margin-top:8px;border-radius:50%;background:#7995af}.snapshot-date{color:var(--muted);margin:14px 0 22px;font-size:16px}.tabs{display:flex;gap:10px;border-bottom:1px solid var(--line);padding-bottom:14px;margin-bottom:28px}.tab{background:var(--surface);color:var(--muted);border-color:var(--line);font-weight:550}.tab.active{background:var(--navy);border-color:var(--navy);color:var(--surface)}.section-heading{display:flex;align-items:center;justify-content:space-between;gap:16px;margin:0 0 20px}.eyebrow{font-size:16px;color:var(--muted);margin-bottom:5px}.card{border:1px solid var(--line);border-radius:15px;background:var(--surface)}.selection{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:16px;padding:22px}.wide{grid-column:1/-1}.muted{color:var(--muted);font-size:16px}.day-controls{display:flex;align-items:center;gap:12px;max-width:500px;margin:24px auto 14px}.day-controls>button{width:48px;flex-shrink:0;font-size:25px;padding:3px}.day-controls label{flex:1;text-align:center}.day-controls input{text-align:center}.day-controls span{text-transform:capitalize}#group-date{margin:14px 0}.lessons{display:grid;gap:12px}.lesson{display:grid;grid-template-columns:100px minmax(0,1fr);padding:22px;gap:18px}.lesson-time{color:var(--navy);font-weight:650;display:flex;flex-direction:column;font-variant-numeric:tabular-nums}.lesson-time span:last-child{color:var(--muted);font-weight:450}.lesson-info h3{margin-bottom:8px}.lesson-info p{margin-top:5px}.lesson-kind{display:inline-block;background:var(--soft);border-radius:6px;padding:3px 8px;margin-bottom:8px;color:var(--muted)}.empty{text-align:center;padding:36px 24px}.empty p{margin-top:10px;color:var(--muted)}.load-error{border:1px solid var(--line);border-radius:14px;background:var(--surface);padding:30px}.load-error h1{font-size:25px}.load-error p{margin:14px 0 20px;color:var(--muted)}.secondary{background:var(--surface);border-color:var(--line);color:var(--navy)}.map-shell{padding:16px}.map-toolbar{display:flex;align-items:flex-end;gap:12px;flex-wrap:wrap;padding-bottom:14px}.map-toolbar label{flex:1;min-width:160px}.map-toolbar>button{flex-shrink:0}.map-toolbar+#map-status{margin-bottom:12px}.map-canvas{position:relative;overflow:hidden;touch-action:none;user-select:none;border:1px solid var(--line);border-radius:11px;min-height:420px;height:65dvh;max-height:780px;background:var(--map-corridor);cursor:grab}.map-canvas:active{cursor:grabbing}.map-canvas>svg{position:absolute;inset:0;width:100%;height:100%;overflow:visible}.zoom-controls{position:absolute;right:12px;top:12px;display:flex;flex-direction:column;gap:8px;z-index:3}.zoom-controls button{width:46px;min-height:46px;padding:5px;background:var(--surface);color:var(--navy);border-color:var(--line);font-size:25px;box-shadow:0 3px 10px #172b4014}.map-help{font-size:16px;color:var(--muted);margin:12px 2px 0}.room-card{border-top:1px solid var(--line);margin-top:14px;padding:16px 4px 2px}.room-card p{margin-top:6px}.room-card h2{font-size:21px}.campus-owned-layer .map-space{fill:var(--map-muted);stroke:var(--map-border);stroke-width:1;vector-effect:non-scaling-stroke;cursor:pointer}.campus-owned-layer .map-space-learning{fill:var(--map-room)}.campus-owned-layer .map-space-office{fill:var(--map-office)}.campus-owned-layer .map-space-community{fill:var(--map-community)}.campus-owned-layer .map-space:hover,.campus-owned-layer .map-space.is-selected{fill:var(--map-hover);stroke:var(--navy);stroke-width:2}.campus-redrawn-geometry{overflow:visible}.room-label{font-weight:650;fill:var(--ink);stroke:var(--surface);paint-order:stroke fill;text-anchor:middle;dominant-baseline:central;cursor:pointer}.room-label-group:focus-visible{outline:none}.room-label-group:focus-visible .room-label{stroke:var(--focus)}.scene-label{fill:var(--muted);font-size:18px;font-weight:550;paint-order:stroke fill;stroke:var(--map-corridor);stroke-width:3}.room-hit{fill:transparent;pointer-events:all}.selected-label .room-label{fill:var(--navy)}.map-shell.fullscreen{position:fixed;inset:0;z-index:10;border:0;border-radius:0;display:flex;flex-direction:column;background:var(--surface);padding:max(12px,env(safe-area-inset-top)) max(14px,env(safe-area-inset-right)) max(12px,env(safe-area-inset-bottom)) max(14px,env(safe-area-inset-left))}.map-shell.fullscreen .map-canvas{flex:1;min-height:0;max-height:none;height:auto}.map-shell.fullscreen .room-card{max-height:24dvh;overflow:auto}.map-shell.fullscreen .map-help{flex-shrink:0}.map-shell.fullscreen .map-toolbar label{min-width:130px}.map-shell.fullscreen .map-toolbar{flex-shrink:0}body.map-open{overflow:hidden}footer{display:flex;flex-wrap:wrap;gap:20px;padding:26px 0 4px;margin-top:30px;border-top:1px solid var(--line);color:var(--muted)}footer span{margin-left:auto}button:focus-visible svg{outline:none}
@media(max-width:650px){.header{padding:14px 18px;align-items:flex-start}.brand{font-size:19px}.brand-mark{width:36px;height:36px;font-size:22px}.main-link{white-space:normal;text-align:right;max-width:145px}.shell{padding:22px 16px}.mode-note{padding:16px;gap:10px}.tabs{gap:8px}.tab{flex:1;padding:11px 8px}.selection{padding:17px;grid-template-columns:1fr;gap:15px}.wide{grid-column:auto}h1{font-size:27px}.lesson{padding:18px 15px;grid-template-columns:72px minmax(0,1fr);gap:10px}.lesson-time{font-size:16px}.section-heading{align-items:flex-start;flex-wrap:wrap}.map-shell{padding:12px}.map-toolbar{gap:10px}.map-toolbar label{min-width:calc(50% - 10px)}.map-toolbar>button{flex:1}.map-canvas{min-height:420px;height:66dvh}.map-shell.fullscreen .map-toolbar label{min-width:calc(50% - 10px)}.map-shell.fullscreen .map-toolbar #exit-fullscreen{flex-basis:100%}.room-card h2{font-size:20px}footer{gap:15px}footer span{margin-left:0;width:100%}}
@media(prefers-color-scheme:dark){:root{--bg:#121c29;--surface:#192635;--ink:#dfe8f2;--muted:#a6b8c9;--line:#34495f;--navy:#91b5db;--soft:#23364d;--focus:#a8c9ec;--map-corridor:#1b2b3a;--map-muted:#2b3a48;--map-room:#2c405a;--map-office:#2b443f;--map-community:#4a4433;--map-border:#718399;--map-hover:#3c5d80}.brand-mark,.tab.active,button:not(.secondary):not(.tab):not(.zoom-controls button){color:#14283e}.load-error button{color:#14283e}}
