:root{--bg:#f1f4f6;--surface:#fff;--surface-2:#f7f9fa;--border:#dfe4ea;--border-strong:#c4ccd6;--ink:#1c2530;--ink-muted:#66707e;--accent:#2b6e71;--accent-soft:#e1f0ef;--danger:#c4453a;--danger-soft:#fcebe9;--focus:#2b6e71;--lightningcss-light:initial;--lightningcss-dark: ;color-scheme:light}*{box-sizing:border-box}html,body{background:var(--bg);margin:0}body{color:var(--ink);min-height:100vh;padding-block:clamp(16px,3vw,28px);padding-inline:clamp(16px,3vw,32px);font-family:IBM Plex Sans,system-ui,-apple-system,Segoe UI,sans-serif}img{max-width:100%}[hidden]{display:none!important}.mono{font-family:IBM Plex Mono,ui-monospace,SFMono-Regular,Menlo,monospace}.page{flex-direction:column;gap:16px;display:flex}header.top{flex-wrap:wrap;justify-content:space-between;align-items:flex-end;gap:16px 24px;display:flex}header.top h1{letter-spacing:-.01em;text-wrap:balance;margin:0;font-size:clamp(20px,2.4vw,26px);font-weight:700}header.top p.sub{color:var(--ink-muted);max-width:56ch;margin:4px 0 0;font-size:13.5px}.stats{flex-wrap:wrap;gap:8px 18px;display:flex}.stat{flex-direction:column;gap:2px;min-width:64px;display:flex}.stat .n{font-variant-numeric:tabular-nums;font-family:IBM Plex Mono,monospace;font-size:19px;font-weight:600;line-height:1}.stat .n.danger{color:var(--danger)}.stat .l{letter-spacing:.05em;text-transform:uppercase;color:var(--ink-muted);font-size:10.5px}.toolbar{background:var(--surface);border:1px solid var(--border);border-radius:10px;flex-wrap:wrap;align-items:center;gap:10px 16px;padding:10px 14px;display:flex}.toggle{cursor:pointer;-webkit-user-select:none;user-select:none;align-items:center;gap:8px;font-size:13px;font-weight:500;display:inline-flex}.toggle input{opacity:0;width:1px;height:1px;position:absolute}.switch{background:#c4ccd6;border-radius:999px;flex:none;width:34px;height:20px;transition:background .15s;position:relative}.switch:after{content:"";background:#fff;border-radius:50%;width:16px;height:16px;transition:transform .15s;position:absolute;top:2px;left:2px;box-shadow:0 1px 2px #00000040}.toggle input:checked+.switch{background:var(--accent)}.toggle input:checked+.switch:after{transform:translate(14px)}.toggle input:focus-visible+.switch{outline:2px solid var(--focus);outline-offset:2px}.legend{flex-wrap:wrap;flex:1;gap:6px 10px;min-width:0;display:flex}.chip{color:var(--ink);background:var(--surface-2);border:1px solid var(--border);white-space:nowrap;border-radius:999px;align-items:center;gap:6px;padding:3px 10px 3px 6px;font-size:11.5px;font-weight:500;display:inline-flex}.swatch{border-radius:3px;flex:none;width:9px;height:9px}.savebar{color:var(--ink-muted);align-items:center;gap:8px;font-size:12px;display:flex}.savebar .dot{background:var(--border-strong);border-radius:50%;flex:none;width:8px;height:8px}.savebar.saved .dot{background:#3e9b6f}.savebar.saving .dot{background:#e2a33d}.savebar.error .dot{background:var(--danger)}.grid-wrap{background:var(--surface);border:1px solid var(--border);border-radius:12px;max-height:74vh;overflow:auto}table{border-collapse:separate;border-spacing:0;width:max-content;min-width:100%}thead th{background:var(--surface-2);z-index:2;letter-spacing:.03em;text-transform:uppercase;color:var(--ink-muted);border-bottom:1px solid var(--border);text-align:center;padding:6px 4px;font-size:11px;font-weight:600;position:sticky}thead tr.days th{border-left:2px solid var(--border-strong);top:0}thead tr.days th:first-child{border-left:none}thead tr.periods th{font-variant-numeric:tabular-nums;border-right:1px solid var(--border);font-family:IBM Plex Mono,monospace;font-weight:500;top:26px}thead tr.periods th.day-start{border-left:2px solid var(--border-strong)}th.corner{z-index:4;background:var(--surface-2);text-align:left;padding-left:12px;position:sticky;top:0;left:0}th.corner.row2{top:26px}tbody td.classname{z-index:1;background:var(--surface);border-right:2px solid var(--border-strong);border-bottom:1px solid var(--border);white-space:nowrap;padding:6px 12px;font-size:13px;font-weight:600;position:sticky;left:0}tbody tr:hover td.classname{background:var(--accent-soft)}tr.groupsep td{background:var(--bg);border-top:1px solid var(--border-strong);border-bottom:1px solid var(--border-strong);letter-spacing:.04em;text-transform:uppercase;color:var(--ink-muted);padding:5px 12px;font-size:11px;font-weight:600;position:sticky;left:0}td.cell{border-bottom:1px solid var(--border);border-right:1px solid #fff5;width:56px;height:40px;padding:0}td.cell.day-start{border-left:2px solid var(--border-strong)}.lesson{cursor:pointer;border:none;flex-direction:column;justify-content:center;align-items:center;gap:1px;width:100%;height:100%;padding:2px;font-family:inherit;display:flex;position:relative}.lesson:hover{filter:brightness(.96)}.lesson:focus-visible{outline:2px solid var(--focus);outline-offset:-2px}.lesson .code{font-family:IBM Plex Mono,monospace;font-size:11px;font-weight:600;line-height:1.1}.lesson .room{opacity:.85;font-size:8.5px;line-height:1}.lesson.conflict:after{content:"";border:2px solid var(--danger);pointer-events:none;border-radius:4px;position:absolute;inset:2px}.lesson.dimmed{opacity:.16}footer.note{color:var(--ink-muted);font-size:11.5px}.overlay{z-index:20;background:#141e2847;justify-content:center;align-items:center;padding:16px;display:flex;position:fixed;inset:0}.modal{background:var(--surface);border-radius:14px;width:min(380px,100%);padding:20px 22px;box-shadow:0 12px 32px #141e2838}.modal h3{margin:0 0 2px;font-size:16px}.modal .meta{color:var(--ink-muted);margin:0 0 14px;font-size:12px}.field{flex-direction:column;gap:4px;margin-bottom:12px;display:flex}.field label{letter-spacing:.02em;color:var(--ink-muted);text-transform:uppercase;font-size:11.5px;font-weight:600}.field select{font:inherit;border:1px solid var(--border-strong);background:var(--surface);color:var(--ink);border-radius:8px;padding:7px 8px;font-size:13.5px}.field select:focus-visible{outline:2px solid var(--focus);outline-offset:1px}.modal-actions{justify-content:flex-end;gap:8px;margin-top:16px;display:flex}button.btn{font:inherit;cursor:pointer;border:1px solid #0000;border-radius:8px;padding:8px 16px;font-size:13px;font-weight:600}button.btn.primary{background:var(--accent);color:#fff}button.btn.primary:disabled{opacity:.5;cursor:not-allowed}button.btn.ghost{border-color:var(--border-strong);color:var(--ink);background:0 0}.modal .conflict-note{background:var(--danger-soft);color:var(--danger);border-radius:6px;margin-top:2px;margin-bottom:12px;padding:6px 8px;font-size:11.5px;font-weight:500}@media (max-width:640px){.grid-wrap{max-height:64vh}.stats{gap:6px 14px}}
