:root{--lightningcss-light:initial;--lightningcss-dark: ;color-scheme:light;--bg:#f3f5f7;--surface:#fff;--surface-2:#e9edf1;--surface-3:#dde3e9;--line:#d6dce3;--line-strong:#b9c2cc;--ink:#151a21;--ink-2:#4a545f;--ink-3:#7b8590;--hi:#f5e663;--hi-soft:#fbf3b3;--hi-ink:#3a3400;--overdue:#b3261e;--overdue-soft:#f9dedc;--risk:#a15a00;--risk-soft:#fbe7cc;--soon:#1f4fb0;--soon-soft:#dbe5fb;--ok:#1d7a4a;--ok-soft:#d6f0e1;--shadow:0 1px 2px #151a210f, 0 8px 24px -12px #151a212e;--sheet-shadow:0 -8px 40px -8px #151a2159;--hatch:repeating-linear-gradient(135deg, transparent 0 3px, #151a2147 3px 5px);--font-display:"Bricolage Grotesque", "Helvetica Neue", Arial, sans-serif;--font-body:"IBM Plex Sans", system-ui, -apple-system, "Segoe UI", sans-serif;--font-mono:"IBM Plex Mono", ui-monospace, Menlo, Consolas, monospace;--r-sm:6px;--r-md:10px;--r-lg:16px;--s-1:4px;--s-2:8px;--s-3:12px;--s-4:16px;--s-5:24px;--s-6:32px;--s-7:48px;--tap:44px;--nav-h:60px;--content-max:1120px}:root[data-theme=dark]{--lightningcss-light: ;--lightningcss-dark:initial;color-scheme:dark;--bg:#0f1216;--surface:#171b21;--surface-2:#1f252d;--surface-3:#2a323c;--line:#2b333d;--line-strong:#3d4854;--ink:#e8ecf0;--ink-2:#aeb7c2;--ink-3:#7d8895;--hi:#e9d94a;--hi-soft:#4a4520;--hi-ink:#fff8c2;--overdue:#ff7b70;--overdue-soft:#4a1f1c;--risk:#f0a848;--risk-soft:#46300f;--soon:#8db0ff;--soon-soft:#1f2d4d;--ok:#5fcf8f;--ok-soft:#173826;--shadow:0 1px 2px #0006, 0 8px 24px -12px #0009;--sheet-shadow:0 -8px 40px -8px #000000b3;--hatch:repeating-linear-gradient(135deg, transparent 0 3px, #e8ecf04d 3px 5px)}*,:before,:after{box-sizing:border-box}html{background:var(--bg);-webkit-text-size-adjust:100%}body{font-family:var(--font-body);color:var(--ink);background:var(--bg);margin:0;font-size:15px;line-height:1.45;overflow-x:hidden}h1,h2,h3{font-family:var(--font-display);letter-spacing:-.01em;margin:0}p{margin:0}button,input,select,textarea{font:inherit;color:inherit}button{cursor:pointer;background:0 0;border:0;padding:0}:focus-visible{outline:2px solid var(--soon);outline-offset:2px}.mono{font-family:var(--font-mono);font-variant-numeric:tabular-nums}.muted{color:var(--ink-3)}.visually-hidden{clip:rect(0 0 0 0);white-space:nowrap;width:1px;height:1px;position:absolute;overflow:hidden}.app{flex-direction:column;min-height:100dvh;display:flex}.topbar{z-index:20;background:color-mix(in srgb, var(--bg) 88%, transparent);-webkit-backdrop-filter:blur(10px);border-bottom:1px solid var(--line);position:sticky;top:0}.topbar-inner{max-width:var(--content-max);padding:var(--s-3) var(--s-4);align-items:center;gap:var(--s-4);margin:0 auto;display:flex}.brand{font-family:var(--font-display);letter-spacing:-.02em;align-items:center;gap:var(--s-2);font-size:18px;font-weight:800;display:flex}.brand-mark{background:var(--ink);width:22px;height:22px;color:var(--hi);border-radius:5px;place-items:center;font-size:13px;font-weight:800;display:grid}.topbar-date{color:var(--ink-2);margin-left:auto;font-size:13px}.sync-dot{background:var(--ink-3);width:8px;height:8px;margin-left:var(--s-2);border-radius:50%;display:inline-block}.sync-dot[data-status=synced]{background:var(--ok)}.sync-dot[data-status=syncing]{background:var(--soon);animation:1s ease-in-out infinite pulse}.sync-dot[data-status=error]{background:var(--overdue)}.sync-dot[data-status=signed_out]{background:var(--risk)}@keyframes pulse{50%{opacity:.35}}.nav-top{gap:var(--s-1);display:none}.nav-link{min-height:36px;padding:0 var(--s-3);border-radius:var(--r-md);color:var(--ink-2);align-items:center;gap:6px;font-weight:500;text-decoration:none;display:inline-flex}.nav-link:hover{background:var(--surface-2)}.nav-link[aria-current=page]{color:var(--ink);background:var(--surface-2)}.main{width:100%;min-width:0;max-width:var(--content-max);padding:var(--s-4) var(--s-4) calc(var(--nav-h) + var(--s-6) + env(safe-area-inset-bottom));flex:1;margin:0 auto}.nav-bottom{z-index:20;height:calc(var(--nav-h) + env(safe-area-inset-bottom));padding-bottom:env(safe-area-inset-bottom);background:var(--surface);border-top:1px solid var(--line);grid-template-columns:repeat(6,1fr);display:grid;position:fixed;bottom:0;left:0;right:0}.topbar-gear{width:36px;height:36px;color:var(--ink-2);vertical-align:middle;border-radius:50%;place-items:center;margin-left:6px;display:inline-grid;position:relative}.topbar-gear:hover{background:var(--surface-2)}.topbar-gear svg{width:20px;height:20px}.topbar-gear .sync-dot{margin:0;position:absolute;top:4px;right:4px}.nav-bottom .nav-link{min-height:var(--nav-h);border-radius:0;flex-direction:column;justify-content:center;gap:2px;font-size:11px}.nav-bottom .nav-link[aria-current=page]{color:var(--ink);background:0 0}.nav-bottom .nav-link[aria-current=page] svg{color:var(--ink)}.nav-link svg{width:22px;height:22px;color:var(--ink-3)}@media (min-width:768px){.nav-top{display:flex}.nav-bottom{display:none}.main{padding:var(--s-5) var(--s-5) var(--s-7)}}.page-title{letter-spacing:-.03em;font-size:32px;font-weight:800;line-height:1.05}.page-title .light{color:var(--ink-3);font-weight:500}.section-title{text-transform:uppercase;letter-spacing:.08em;color:var(--ink-2);align-items:baseline;gap:var(--s-2);font-size:13px;font-weight:600;display:flex}.section-title .count{font-family:var(--font-mono);color:var(--ink-3);font-weight:500}.section{margin-top:28px}.card{background:var(--surface);border:1px solid var(--line);border-radius:var(--r-lg);padding:var(--s-4)}.chip{font-family:var(--font-mono);color:var(--ink-2);white-space:nowrap;align-items:center;gap:6px;font-size:12px;display:inline-flex}.chip .dot{background:var(--course,var(--ink-3));border-radius:2px;flex:none;width:9px;height:9px}.badge{letter-spacing:.02em;white-space:nowrap;border-radius:999px;align-items:center;gap:4px;padding:3px 8px;font-size:11px;font-weight:600;display:inline-flex}.badge[data-risk=overdue]{background:var(--overdue-soft);color:var(--overdue)}.badge[data-risk=at_risk]{background:var(--risk-soft);color:var(--risk)}.badge[data-risk=due_soon]{background:var(--soon-soft);color:var(--soon)}.badge[data-risk=start_today]{background:var(--hi);color:var(--hi-ink)}.badge[data-risk=done]{background:var(--ok-soft);color:var(--ok)}.flag{font-family:var(--font-mono);border:1px solid var(--line-strong);color:var(--ink-2);border-radius:4px;padding:1px 6px;font-size:11px}.btn{min-height:40px;padding:0 var(--s-4);border-radius:var(--r-md);border:1px solid var(--line-strong);background:var(--surface);white-space:nowrap;justify-content:center;align-items:center;gap:6px;font-weight:500;display:inline-flex}.btn:hover{background:var(--surface-2)}.btn.primary{background:var(--ink);color:var(--bg);border-color:var(--ink)}.btn.primary:hover{opacity:.9}.btn.danger{color:var(--overdue);border-color:color-mix(in srgb, var(--overdue) 40%, var(--line))}.btn.small{min-height:32px;padding:0 var(--s-3);font-size:13px}.btn:disabled{opacity:.5;cursor:not-allowed}.segmented{background:var(--surface-2);border-radius:var(--r-md);gap:2px;padding:3px;display:inline-flex}.segmented button{min-height:34px;padding:0 var(--s-3);color:var(--ink-2);border-radius:8px;font-size:13px;font-weight:500}.segmented button[aria-pressed=true]{background:var(--surface);color:var(--ink);box-shadow:var(--shadow)}.field{flex-direction:column;gap:4px;display:flex}.field>span{color:var(--ink-2);font-size:12px;font-weight:600}.field input,.field select,.field textarea{min-height:var(--tap);border:1px solid var(--line-strong);border-radius:var(--r-md);background:var(--surface);width:100%;padding:8px 10px}.field textarea{resize:vertical;min-height:80px}.field-row{gap:var(--s-3);grid-template-columns:1fr 1fr;display:grid}.hint{color:var(--ink-3);font-size:12px}.item-list{flex-direction:column;gap:6px;margin:0;padding:0;list-style:none;display:flex}.item-row{grid-template-columns:var(--tap) minmax(0, 1fr) auto;background:var(--surface);border:1px solid var(--line);border-left:4px solid var(--course,var(--ink-3));border-radius:var(--r-md);min-height:56px;padding-right:var(--s-3);align-items:center;gap:4px;transition:opacity .2s;display:grid}.item-row[data-done=true]{opacity:.55}.item-row[data-done=true] .item-title{text-decoration:line-through}.check{width:var(--tap);height:var(--tap);place-items:center;display:grid}.check span{border:2px solid var(--line-strong);width:22px;height:22px;color:var(--bg);border-radius:50%;place-items:center;transition:background .15s,border-color .15s;display:grid}.check:hover span{border-color:var(--ink)}.check[aria-checked=true] span{background:var(--ok);border-color:var(--ok)}.item-main{text-align:left;flex-direction:column;gap:2px;min-width:0;padding:8px 4px 8px 0;display:flex}.item-title{text-overflow:ellipsis;white-space:nowrap;font-weight:600;overflow:hidden}.item-sub{color:var(--ink-3);text-overflow:ellipsis;white-space:nowrap;font-size:12px;overflow:hidden}.item-row[data-state=overdue]{border-left-color:var(--overdue)}.item-row[data-state=overdue] .item-title{color:var(--overdue)}.item-row[data-state=today]{box-shadow:inset 0 0 0 1px var(--hi)}.item-row[data-compact=true]{min-height:50px}.item-meta{font-family:var(--font-mono);color:var(--ink-3);flex-wrap:wrap;align-items:center;gap:2px 8px;font-size:12px;display:flex}.item-meta .chip{color:var(--ink-2)}.item-side{flex-direction:column;align-items:flex-end;gap:4px;display:flex}.dash-grid{gap:var(--s-5);grid-template-columns:minmax(0,1fr);display:grid}@media (min-width:900px){.dash-grid{grid-template-columns:minmax(0,5fr) minmax(0,6fr);align-items:start}}.status-strip{gap:var(--s-2);margin-top:var(--s-3);flex-wrap:wrap;display:flex}.status-pill{border:1px solid var(--line);background:var(--surface);border-radius:999px;align-items:center;gap:6px;min-height:34px;padding:0 12px;font-size:13px;font-weight:500;display:inline-flex}.status-pill b{font-family:var(--font-mono);font-weight:500}.status-pill[data-risk=overdue]{border-color:var(--overdue);color:var(--overdue)}.status-pill[data-risk=at_risk]{border-color:var(--risk);color:var(--risk)}.status-pill[data-risk=start_today]{background:var(--hi);border-color:var(--hi);color:var(--hi-ink)}.status-pill[data-risk=overdue]{background:var(--overdue);color:#fff}.status-pill[data-risk=due_soon]{border-color:var(--soon);color:var(--soon)}.ledger{--ledger-h:132px}.ledger-head{margin-bottom:var(--s-3);justify-content:space-between;align-items:baseline;display:flex}.ledger-total{font-family:var(--font-mono);color:var(--ink-2);font-size:13px}.ledger-total b{color:var(--ink);font-weight:500}.ledger-total[data-over=true] b{color:var(--overdue)}.ledger-cols{grid-template-columns:repeat(7,minmax(0,1fr));align-items:end;gap:6px;display:grid}.ledger-col{border-radius:var(--r-md);flex-direction:column;align-items:stretch;gap:6px;padding:6px 4px 4px;display:flex}.ledger-col[data-today=true]{background:var(--hi-soft)}.ledger-bar{height:var(--ledger-h);border-bottom:1px solid var(--line-strong);flex-direction:column-reverse;display:flex;position:relative}.ledger-cap{border-top:2px dashed var(--line-strong);pointer-events:none;position:absolute;left:-2px;right:-2px}.ledger-seg{background:var(--course);border-radius:2px;min-height:2px;margin-top:2px;transition:height .4s cubic-bezier(.2,.8,.2,1)}.ledger-seg[data-over=true]{background-image:var(--hatch)}.ledger-day{text-align:center;font-family:var(--font-mono);color:var(--ink-3);font-size:11px;line-height:1.2}.ledger-day b{color:var(--ink);font-size:12px;font-weight:500;display:block}.ledger-hours{text-align:center;font-family:var(--font-mono);color:var(--ink-2);font-size:11px}.ledger-legend{margin-top:var(--s-3);flex-wrap:wrap;gap:4px 12px;display:flex}.course-load{grid-template-columns:auto 1fr auto;align-items:center;gap:6px 10px;font-size:13px;display:grid}.course-load .bar{background:var(--surface-2);border-radius:4px;height:8px;overflow:hidden}.course-load .bar>span{background:var(--course);border-radius:4px;height:100%;display:block}.day-group{margin-top:var(--s-3)}.day-group-head{font-family:var(--font-mono);color:var(--ink-2);align-items:baseline;gap:8px;margin-bottom:6px;font-size:12px;display:flex}.day-group-head[data-today=true] b{background:var(--hi);color:var(--hi-ink);border-radius:4px;padding:0 6px}.empty{padding:var(--s-4);border:1px dashed var(--line-strong);border-radius:var(--r-md);color:var(--ink-3);text-align:center;font-size:14px}.modal-backdrop{z-index:40;background:#00000073;justify-content:center;align-items:flex-end;display:flex;position:fixed;inset:0}.modal{background:var(--surface);border-radius:var(--r-lg) var(--r-lg) 0 0;width:100%;max-height:92dvh;box-shadow:var(--sheet-shadow);padding:var(--s-4) var(--s-4) calc(var(--s-5) + env(safe-area-inset-bottom));animation:.22s cubic-bezier(.2,.8,.2,1) sheet-up;overflow:auto}.modal-head{align-items:center;gap:var(--s-3);margin-bottom:var(--s-4);display:flex}.modal-head h2{flex:1;min-width:0;font-size:20px}.modal-close{width:40px;height:40px;color:var(--ink-2);border-radius:50%;place-items:center;display:grid}.modal-close:hover{background:var(--surface-2)}.modal-body{gap:var(--s-3);flex-direction:column;display:flex}.modal-actions{gap:var(--s-2);margin-top:var(--s-4);flex-wrap:wrap;display:flex}.modal-actions .spacer{flex:1}@media (min-width:640px){.modal-backdrop{padding:var(--s-5);align-items:center}.modal{border-radius:var(--r-lg);max-width:560px;animation:.18s fade-in}}@keyframes sheet-up{0%{opacity:0;transform:translateY(24px)}}@keyframes fade-in{0%{opacity:0;transform:scale(.98)}}@media (prefers-reduced-motion:reduce){*,:before,:after{transition:none!important;animation:none!important}}.cal-toolbar{align-items:center;gap:var(--s-3);flex-wrap:wrap;display:flex}.cal-title{flex:1;min-width:0;font-size:22px}@media (min-width:640px){.cal-title{font-size:26px}}.cal-nav{gap:4px;display:flex}.cal-nav .btn{min-width:40px;font-size:18px}.cal-nav .btn:nth-child(2){font-size:13px}.cal-controls{gap:var(--s-3);margin-top:var(--s-3);flex-wrap:wrap;align-items:center;display:flex}.cal-body{margin-top:var(--s-4)}.filter-chips{flex-wrap:wrap;gap:6px;display:flex}.filter-chip{border:1px solid var(--line);background:var(--surface);min-height:34px;font-family:var(--font-mono);color:var(--ink-3);border-radius:999px;align-items:center;gap:6px;padding:0 10px;font-size:12px;display:inline-flex}.filter-chip .dot{background:var(--line-strong);border-radius:2px;width:9px;height:9px}.filter-chip[aria-pressed=true]{color:var(--ink);border-color:var(--course)}.filter-chip[aria-pressed=true] .dot{background:var(--course)}.month-head{font-family:var(--font-mono);color:var(--ink-3);text-align:center;grid-template-columns:repeat(7,minmax(0,1fr));gap:6px;margin-bottom:6px;font-size:11px;display:grid}.month-grid{grid-template-columns:repeat(7,minmax(0,1fr));gap:6px;display:grid}.month-cell{background:var(--surface);border:1px solid var(--line);border-radius:var(--r-md);text-align:left;flex-direction:column;align-items:stretch;gap:5px;min-width:0;min-height:64px;padding:6px;display:flex;position:relative}.month-cell:hover{border-color:var(--line-strong)}.month-cell[data-other=true]{color:var(--ink-3);background:0 0;border-color:#0000}.month-cell[data-level="1"]{background:color-mix(in srgb, var(--risk) 5%, var(--surface))}.month-cell[data-level="2"]{background:color-mix(in srgb, var(--risk) 11%, var(--surface))}.month-cell[data-level="3"]{background:color-mix(in srgb, var(--risk) 19%, var(--surface));border-color:color-mix(in srgb, var(--risk) 40%, var(--line))}.month-cell[data-level="4"]{background:color-mix(in srgb, var(--overdue) 22%, var(--surface));border-color:color-mix(in srgb, var(--overdue) 45%, var(--line))}.month-count[data-big=true]{box-shadow:0 0 0 1.5px var(--hi)}.month-big{background:var(--hi);border-radius:50%;align-self:flex-start;width:8px;height:8px}.month-cell[data-today=true]{border-color:var(--hi);box-shadow:0 0 0 1px var(--hi)}.month-cell[data-marker=overdue]:after,.month-cell[data-marker=today]:after{content:"";background:var(--overdue);border-radius:50%;width:8px;height:8px;position:absolute;top:6px;right:6px}.month-cell[data-marker=today]:after{background:var(--hi);border:1px solid var(--hi-ink)}.month-grid[data-wide=true] .month-cell[data-marker]:after{display:none}.month-cell-top{justify-content:space-between;align-items:center;gap:4px;display:flex}.month-daynum{font-family:var(--font-mono);border-radius:50%;place-items:center;width:22px;height:22px;font-size:12px;display:grid}.month-cell[data-today=true] .month-daynum{background:var(--hi);color:var(--hi-ink);font-weight:500}.month-count{font-family:var(--font-mono);color:var(--ink-3);background:var(--surface-2);border-radius:999px;padding:0 5px;font-size:11px;line-height:18px}.month-count[data-bold=true]{color:var(--ink);background:var(--surface-3);font-weight:500}.month-cell[data-level="3"] .month-count,.month-cell[data-level="4"] .month-count{background:var(--risk);color:#fff;font-weight:500}.month-chips{flex-direction:column;gap:3px;min-width:0;display:flex}@media (min-width:640px){.month-cell{min-height:112px;padding:8px}.month-cell[data-marker]:after{display:none}}.chip-item{text-align:left;border:1px solid #0000;border-left:3px solid var(--course);background:color-mix(in srgb, var(--course) 12%, var(--surface));width:100%;min-width:0;color:var(--ink);border-radius:5px;align-items:flex-start;gap:4px;padding:3px 6px 3px 7px;font-size:12px;line-height:1.25;display:flex}.chip-item:hover{background:color-mix(in srgb, var(--course) 24%, var(--surface))}.chip-item .txt{-webkit-line-clamp:2;overflow-wrap:normal;word-break:normal;-webkit-box-orient:vertical;min-width:0;display:-webkit-box;overflow:hidden}.chip-item .glyph{font-family:var(--font-mono);flex:none;font-weight:700}.chip-item[data-state=today]{background:var(--course);border-color:var(--course);color:#fff;font-weight:600}.chip-item[data-state=today]:hover{filter:brightness(1.08)}.chip-item[data-state=overdue]{background:var(--overdue);border-color:var(--overdue);color:#fff;font-weight:600}.chip-item[data-state=soon]{border-color:var(--course);font-weight:600}.chip-item[data-state=at_risk]{border-left-color:var(--risk)}.chip-item[data-state=at_risk] .glyph{color:var(--risk)}.chip-item[data-state=done]{opacity:.45;text-decoration:line-through}.chip-item[data-plain=true]{background:var(--surface-2);border-left:1px solid #0000;padding-left:6px}.chip-item[data-plain=true]:hover{background:var(--surface-3)}.chip-item[data-plain=true][data-big=true]{background:var(--hi-soft);color:var(--ink);font-weight:600}.chip-item[data-plain=true][data-state=overdue]{background:var(--overdue);color:#fff}.chip-item[data-plain=true][data-state=today]{box-shadow:inset 0 0 0 1px var(--hi);font-weight:600}.chip-item[data-plain=true][data-state=soon]{border:1px solid var(--line-strong)}.chip-dot{background:var(--course);border-radius:50%;flex:none;width:7px;height:7px;margin-top:4px}:root[data-theme=dark] .chip-item[data-state=today],:root[data-theme=dark] .chip-item[data-state=overdue]{color:#0f1216}.daybar{align-items:center;gap:6px;min-width:0;display:flex}.daybar-track{border-radius:4px;flex:1;gap:2px;min-width:0;height:7px;display:flex;overflow:hidden}.daybar-track>span{min-width:4px}.daybar-count{font-family:var(--font-mono);color:var(--ink-2);flex:none;font-size:11px}.focus{margin-top:var(--s-4);padding:var(--s-4);background:var(--surface);border:1px solid var(--line);border-radius:var(--r-lg)}.focus-head{justify-content:space-between;align-items:center;gap:var(--s-3);margin:var(--s-4) 0 var(--s-2);display:flex}.meeting-row{border-left:3px solid var(--course);align-items:center;gap:10px;min-height:32px;margin:4px 0;padding-left:10px;font-size:13px;display:flex}.week-stack{gap:var(--s-3);flex-direction:column;display:flex}.week-day{background:var(--surface);border:1px solid var(--line);border-radius:var(--r-lg);padding:var(--s-3)}.week-day[data-today=true]{border-color:var(--hi);box-shadow:inset 4px 0 0 var(--hi)}.week-day-head{justify-content:space-between;align-items:baseline;margin-bottom:6px;display:flex}.week-day-head b{font-family:var(--font-display);font-size:16px}.week-grid{grid-template-columns:48px repeat(7,minmax(0,1fr));align-items:start;gap:0 4px;display:grid}.week-col-head{text-align:center;border-radius:var(--r-md) var(--r-md) 0 0;flex-direction:column;padding:6px 0;display:flex}.week-col-head[data-today=true]{background:var(--hi-soft)}.week-dayname{font-family:var(--font-mono);color:var(--ink-3);font-size:11px}.week-col-head b{font-family:var(--font-display);font-size:20px;line-height:1.1}.week-planned{color:var(--ink-2);font-size:11px}.week-due{border-bottom:1px solid var(--line-strong);flex-direction:column;gap:3px;min-height:28px;padding:6px 2px;display:flex}.week-due[data-today=true]{background:var(--hi-soft)}.week-hours{font-family:var(--font-mono);color:var(--ink-3);text-align:right;flex-direction:column;padding-right:6px;font-size:10px;display:flex}.week-hours span{display:block;transform:translateY(-6px)}.week-col{border-left:1px solid color-mix(in srgb, var(--line) 60%, transparent);position:relative}.week-col[data-today=true]{background:color-mix(in srgb, var(--hi) 10%, transparent)}.week-hourline{border-top:1px solid color-mix(in srgb, var(--line) 60%, transparent);position:absolute;left:0;right:0}.week-meeting{background:color-mix(in srgb, var(--course) 18%, var(--surface));border-left:3px solid var(--course);border-radius:4px;flex-direction:column;padding:3px 5px;font-size:11px;line-height:1.25;display:flex;position:absolute;left:3px;right:3px;overflow:hidden}.week-meeting b{font-family:var(--font-mono);font-weight:500}.week-meeting span{color:var(--ink-2)}.week-corner{min-height:1px}.agenda .day-group+.day-group{margin-top:var(--s-4)}.heat-wrap{margin-top:var(--s-4);-webkit-overflow-scrolling:touch;overflow-x:auto}.heat{border-collapse:separate;border-spacing:3px;font-family:var(--font-mono);min-width:100%;font-size:12px}.heat th{color:var(--ink-2);text-align:left;white-space:nowrap;vertical-align:middle;padding:2px 6px 2px 0;font-weight:500}.heat thead th{text-align:center;padding:0 2px 4px;font-size:11px}.heat thead th[data-today=true],.heat tbody tr[data-today=true]>th{color:var(--hi-ink);background:var(--hi);border-radius:4px}.heat td{padding:0}.heat-cell{background:var(--surface-2);width:100%;min-width:40px;height:36px;color:var(--ink-3);font-family:var(--font-mono);border-radius:6px;justify-content:center;align-items:center;gap:1px;font-size:12px;display:inline-flex}.heat-cell[data-level="1"]{background:color-mix(in srgb, var(--course) 18%, var(--surface));color:var(--ink)}.heat-cell[data-level="2"]{background:color-mix(in srgb, var(--course) 36%, var(--surface));color:var(--ink)}.heat-cell[data-level="3"]{background:color-mix(in srgb, var(--course) 56%, var(--surface));color:var(--ink)}.heat-cell[data-level="4"]{background:color-mix(in srgb, var(--course) 78%, var(--surface));color:#fff}.heat-cell[data-level="5"]{background:var(--course);color:#fff}.heat-total small{opacity:.7;font-size:9px}.heat-total[data-status=ok]{background:var(--ok-soft);color:var(--ok)}.heat-total[data-status=warn]{background:var(--risk-soft);color:var(--risk)}.heat-total[data-status=over]{background:var(--overdue-soft);color:var(--overdue);font-weight:500}.heat-total-row th{color:var(--ink)}.heat[data-wide=true]{table-layout:fixed}.heat[data-wide=true] .heat-corner{width:120px}.heat-marks td{vertical-align:top}.heat-marks td>span{display:inline-block}.heat-marks td{display:table-cell}.heat-marks-wrap{flex-wrap:wrap;justify-content:center;gap:2px;display:flex}.heat-mark{letter-spacing:.04em;background:var(--ink);color:var(--bg);border-radius:3px;margin:2px 1px 0;padding:1px 4px;font-size:9px;display:inline-block}.heat-mark-col{flex-wrap:wrap;gap:2px;margin-top:2px;display:flex}.heat[data-wide=false] th[scope=row]{min-width:56px}.heat[data-wide=false] thead th .chip{writing-mode:vertical-rl;padding:4px 0;transform:rotate(180deg)}.heat[data-wide=false] .heat-cell{min-width:36px}.grade-grid{gap:var(--s-3);margin-top:var(--s-4);display:grid}@media (min-width:720px){.grade-grid{grid-template-columns:repeat(2,minmax(0,1fr))}}.grade-card{border-top:4px solid var(--course)}.grade-head{justify-content:space-between;align-items:flex-start;gap:var(--s-3);display:flex}.grade-name{margin-top:4px;font-size:17px}.grade-pct{letter-spacing:-.02em;font-size:30px;font-weight:500}.grade-bar{background:var(--surface-2);height:8px;margin:var(--s-3) 0;border-radius:4px;display:flex;overflow:hidden}.grade-bar .earned{background:var(--course)}.grade-bar .lost{background:var(--line-strong)}.grade-stats{gap:var(--s-2);margin:0 0 var(--s-3);grid-template-columns:repeat(4,minmax(0,1fr));font-size:12px;display:grid}.grade-stats dt{color:var(--ink-3);text-transform:uppercase;letter-spacing:.06em;font-size:10px}.grade-stats dd{color:var(--ink);margin:2px 0 0}.score-list{margin:var(--s-3) 0 0;flex-direction:column;padding:0;list-style:none;display:flex}.score-list li{justify-content:space-between;align-items:center;gap:var(--s-3);border-top:1px solid var(--line);min-height:44px;font-size:13px;display:flex}.score-title{text-overflow:ellipsis;white-space:nowrap;min-width:0;overflow:hidden}.score-input{color:var(--ink-3);flex:none;align-items:center;gap:4px;font-size:12px;display:inline-flex}.score-input input{border:1px solid var(--line-strong);background:var(--surface);text-align:right;border-radius:6px;width:64px;min-height:36px;padding:4px 6px}.settings-grid{gap:var(--s-3);margin-top:var(--s-4);display:grid}@media (min-width:900px){.settings-grid{grid-template-columns:repeat(2,minmax(0,1fr));align-items:start}}.settings-card .hint{margin-top:6px}.settings-status{flex-wrap:wrap;align-items:center;gap:8px;margin-top:8px;font-size:14px;display:flex}.settings-details summary{cursor:pointer;align-items:center;min-height:36px;font-weight:500;display:flex}.settings-details{margin-top:8px}.settings-actions{flex-wrap:wrap;gap:8px;margin-top:10px;display:flex}.course-list{flex-direction:column;gap:4px;margin:10px 0 0;padding:0;list-style:none;display:flex}.course-row{text-align:left;border-radius:var(--r-md);border:1px solid var(--line);background:var(--surface);grid-template-columns:auto minmax(0,1fr);align-items:center;gap:2px 12px;width:100%;min-height:52px;padding:8px 10px;display:grid}.course-row:hover{background:var(--surface-2)}.course-row-name{text-overflow:ellipsis;white-space:nowrap;font-weight:500;overflow:hidden}.course-row .hint{grid-column:1/-1;margin:0}.swatches{flex-wrap:wrap;gap:8px;display:flex}.swatch{border:2px solid #0000;border-radius:8px;width:32px;height:32px}.swatch[aria-pressed=true]{border-color:var(--ink);box-shadow:0 0 0 2px var(--surface)}.meeting-edit{grid-template-columns:1fr 1fr 1fr auto;gap:6px;margin-bottom:6px;display:grid}.meeting-edit select,.meeting-edit input{border:1px solid var(--line-strong);background:var(--surface);border-radius:8px;min-width:0;min-height:40px;padding:4px 6px}.dropzone{padding:var(--s-6) var(--s-4);border:2px dashed var(--line-strong);border-radius:var(--r-lg);text-align:center;cursor:pointer;flex-direction:column;align-items:center;gap:6px;display:flex}.dropzone:hover{border-color:var(--ink)}.preview-wrap{border:1px solid var(--line);border-radius:var(--r-md);max-height:40vh;overflow:auto}.preview{border-collapse:collapse;width:100%;font-size:12px}.preview th,.preview td{border-bottom:1px solid var(--line);text-align:left;white-space:nowrap;padding:6px 8px}.preview th{background:var(--surface-2);font-size:11px;font-weight:600;position:sticky;top:0}.preview-title{min-width:160px;white-space:normal!important}.preview tr[data-excluded=true] td{opacity:.45}.levelbar{margin-top:var(--s-3);border-radius:var(--r-md);background:var(--surface);border:1px solid var(--line);color:inherit;align-items:center;gap:10px;padding:8px 12px;font-size:13px;text-decoration:none;display:flex}.levelbar:hover{border-color:var(--line-strong)}@media (min-width:768px){.levelbar{max-width:560px}}.levelbar-lv{font-family:var(--font-display);letter-spacing:-.01em;white-space:nowrap;font-size:15px;font-weight:800}.levelbar-track{background:var(--surface-2);border-radius:4px;flex:1;min-width:60px;height:8px;overflow:hidden}.levelbar-track.big{height:10px;margin-top:6px;display:block}.levelbar-fill{background:linear-gradient(90deg, var(--hi), color-mix(in srgb, var(--hi) 55%, var(--ink)));border-radius:4px;height:100%;transition:width .6s cubic-bezier(.2,.8,.2,1);display:block}.levelbar-xp{white-space:nowrap;font-size:12px}.levelbar-streak{white-space:nowrap;font-family:var(--font-mono);background:var(--hi-soft);color:var(--hi-ink);border-radius:999px;padding:2px 8px;font-size:12px}.progress-head{align-items:flex-end;gap:var(--s-4);display:flex}.progress-level{font-family:var(--font-display);letter-spacing:-.03em;font-size:44px;font-weight:800;line-height:1}.progress-xp{flex:1;font-size:13px}.streaks{gap:var(--s-3);margin:var(--s-4) 0 0;grid-template-columns:1fr 1fr;display:grid}.streaks dt{text-transform:uppercase;letter-spacing:.06em;color:var(--ink-3);font-size:10px}.streaks dd{margin:2px 0 0;font-weight:600}.streaks dd small{color:var(--ink-3);font-size:12px;font-weight:400;display:block}.badges{margin-top:var(--s-4);grid-template-columns:repeat(3,minmax(0,1fr));gap:8px;display:grid}.badge-tile{text-align:center;border:1px solid var(--line);border-radius:var(--r-md);opacity:.55;flex-direction:column;align-items:center;gap:2px;padding:10px 6px;font-size:12px;display:flex}.badge-tile[data-earned=true]{opacity:1;border-color:var(--hi);background:var(--hi-soft)}.badge-glyph{filter:grayscale();font-size:22px}.badge-tile[data-earned=true] .badge-glyph{filter:none}.badge-tile .hint{margin:0;font-size:11px}.recap-card{margin-top:var(--s-4);border-color:var(--hi)}.recap-stats{grid-template-columns:repeat(4,minmax(0,1fr));gap:8px;margin-top:10px;display:grid}.recap-stats div{flex-direction:column;display:flex}.recap-stats b{font-size:24px;font-weight:500;line-height:1.1}.recap-stats b[data-bad=true]{color:var(--overdue)}.recap-stats span{color:var(--ink-3);font-size:11px}.recap-line{margin-top:10px;font-size:14px}.recap-missed{margin:6px 0 0;padding:0;font-size:13px;list-style:none}.recap-missed li{border-top:1px solid var(--line);padding:4px 0}.check{position:relative}.check span.pop{animation:.45s cubic-bezier(.2,.8,.2,1) pop}@keyframes pop{0%{transform:scale(.8)}50%{transform:scale(1.3)}to{transform:scale(1)}}.xp-float{z-index:2;font-family:var(--font-mono);color:var(--hi-ink);background:var(--hi);pointer-events:none;white-space:nowrap;border-radius:999px;padding:1px 7px;font-size:14px;font-weight:500;animation:1s ease-out forwards xp-rise;position:absolute;top:8px;left:calc(100% - 10px);transform:translate(0)}@keyframes xp-rise{0%{opacity:0;transform:translateY(6px)scale(.8)}15%{opacity:1;transform:translateY(-4px)scale(1.05)}to{opacity:0;transform:translateY(-30px)scale(1)}}.item-row[data-flash=true]{animation:.7s ease-out row-flash}@keyframes row-flash{0%{background:var(--hi-soft)}to{background:var(--surface)}}@media (prefers-reduced-motion:reduce){.xp-float{animation:1s ease-out forwards xp-static;transform:translateY(-12px)}@keyframes xp-static{0%,70%{opacity:1}to{opacity:0}}}.now{gap:var(--s-5);flex-direction:column;max-width:640px;margin:0 auto;display:flex}.now-status{flex-direction:column;gap:4px;margin-top:4px;font-size:17px;font-weight:500;display:flex}.now-status .mono{font-size:13px;font-weight:400}.hero{background:var(--surface);border:1px solid var(--line);border-left:6px solid var(--course);border-radius:var(--r-lg);padding:var(--s-5) var(--s-5) var(--s-5) var(--s-5);box-shadow:var(--shadow)}.hero[data-state=overdue]{border-color:var(--overdue);border-left-color:var(--overdue)}.hero[data-state=now]{border-color:var(--hi);box-shadow:0 0 0 1px var(--hi), var(--shadow)}.hero[data-state=ahead]{border-left-color:var(--course)}.hero[data-state=done]{opacity:.7}.hero-eyebrow{font-family:var(--font-mono);text-transform:uppercase;letter-spacing:.1em;color:var(--ink-3);justify-content:space-between;align-items:center;font-size:12px;display:flex}.hero[data-state=overdue] .hero-eyebrow>span:first-child{color:var(--overdue);font-weight:700}.hero[data-state=now] .hero-eyebrow>span:first-child{color:var(--hi-ink);background:var(--hi);border-radius:999px;padding:1px 8px}.hero-title{letter-spacing:-.03em;margin-top:var(--s-3);overflow-wrap:normal;font-size:34px;line-height:1.05}.hero-sub{color:var(--ink-2);margin-top:6px;font-size:15px}.hero-meta{margin-top:var(--s-4);color:var(--ink-2);flex-wrap:wrap;gap:4px 14px;font-size:13px;display:flex}.hero-meta span[data-overdue=true]{color:var(--overdue);font-weight:500}.hero-actions{gap:var(--s-2);margin-top:var(--s-5);flex-wrap:wrap;display:flex}.hero-skip{text-align:left;color:var(--ink-3);text-underline-offset:3px;flex-basis:100%;padding:6px 0 0;font-size:13px;text-decoration:underline}.hero-skip:hover{color:var(--ink)}.hero-btn{min-height:48px;padding:0 22px;font-size:16px}.hero-btn.primary{flex:1;max-width:260px}@media (min-width:640px){.hero-title{font-size:44px}}.then .section-title{text-transform:none;letter-spacing:0;font-family:var(--font-display);color:var(--ink-3);font-size:15px;font-weight:500}.then-group+.then-group{margin-top:10px}.then-day{color:var(--ink-2);margin:10px 0 2px 10px;font-size:12px;font-weight:500}.then-list{flex-direction:column;gap:2px;margin:4px 0 0;padding:0;list-style:none;display:flex}.then-row{border-radius:var(--r-md)}.then-row[data-open=true]{background:var(--surface);border:1px solid var(--line)}.then-main{text-align:left;border-radius:var(--r-md);grid-template-columns:10px minmax(0,1fr) auto;align-items:center;gap:10px;width:100%;min-height:44px;padding:0 10px;font-size:15px;display:grid}.then-main:hover{background:var(--surface-2)}.then-dot{background:var(--course);border-radius:2px;width:8px;height:8px}.then-label{text-overflow:ellipsis;white-space:nowrap;overflow:hidden}.then-meta{color:var(--ink-3);white-space:nowrap;font-size:12px}.then-detail{flex-direction:column;align-items:flex-start;gap:6px;padding:4px 10px 12px 28px;display:flex}.then-detail .hint{margin:0}.pressure{border-left:3px solid var(--risk);background:var(--risk-soft);border-radius:0 var(--r-md) var(--r-md) 0;color:var(--ink);padding:12px 14px;font-size:15px;line-height:1.5}.term-progress{flex-direction:column;gap:6px;font-size:12px;display:flex}.term-progress-track{background:var(--surface-3);border-radius:2px;height:4px;display:block;position:relative}.term-progress-track .banked{background:var(--ink);border-radius:2px;height:100%;display:block}.term-progress-track .elapsed{background:var(--ink-3);border-radius:1px;width:2px;height:12px;margin-left:-1px;position:absolute;top:-4px}.chat{background:var(--surface);border:1px solid var(--line);border-radius:var(--r-lg);padding:var(--s-4);gap:var(--s-3);flex-direction:column;display:flex}.chat-head{flex-wrap:wrap;justify-content:space-between;align-items:center;gap:8px;display:flex}.chat-head-actions{gap:6px;display:flex}.chat-connect{flex-direction:column;gap:10px;display:flex}.chat-connect-row{gap:8px;display:flex}.chat-connect-row input,.chat-input input{border:1px solid var(--line-strong);border-radius:var(--r-md);background:var(--bg);min-width:0;min-height:44px;font-family:var(--font-mono);flex:1;padding:8px 12px;font-size:14px}.chat-input input{font-family:var(--font-body);font-size:15px}.chat-log{flex-direction:column;gap:8px;max-height:46vh;padding-right:2px;display:flex;overflow-y:auto}.chat-suggest{flex-wrap:wrap;gap:6px;display:flex}.chat-msg{white-space:pre-wrap;border-radius:14px;max-width:92%;padding:10px 12px;font-size:15px;line-height:1.45}.chat-msg[data-role=user]{background:var(--ink);color:var(--bg);border-bottom-right-radius:4px;align-self:flex-end}.chat-msg[data-role=assistant]{background:var(--surface-2);border-bottom-left-radius:4px;align-self:flex-start}.chat-dots{gap:4px;display:inline-flex}.chat-dots i{background:var(--ink-3);border-radius:50%;width:6px;height:6px;animation:1s ease-in-out infinite dot}.chat-dots i:nth-child(2){animation-delay:.15s}.chat-dots i:nth-child(3){animation-delay:.3s}@keyframes dot{0%,80%,to{opacity:.3}40%{opacity:1}}.chat-input{gap:8px;display:flex}.chat-notes{flex-direction:column;gap:4px;margin:0;padding:0;font-size:13px;list-style:none;display:flex}.chat-notes li{background:var(--hi-soft);border-radius:var(--r-sm);justify-content:space-between;gap:8px;padding:6px 10px;display:flex}@media (max-width:639px){.chat-input{bottom:calc(var(--nav-h) + env(safe-area-inset-bottom) + 8px);background:var(--surface);padding-top:6px;position:sticky}}.week-rows{flex-direction:column;gap:6px;display:flex}.week-row{background:var(--surface);border:1px solid var(--line);border-radius:var(--r-md);grid-template-columns:108px minmax(0,1fr);gap:12px;min-height:56px;padding:10px 12px;display:grid}.week-row[data-today=true]{border-color:var(--hi);box-shadow:inset 4px 0 0 var(--hi)}.week-row[data-past=true]{opacity:.6}.week-row-date{flex-direction:column;gap:3px;display:flex}.week-row-date b{font-family:var(--font-display);font-size:15px}.week-row-date .mono{font-size:12px}.week-load{background:var(--surface-3);border-radius:3px;width:80px;height:5px;margin-top:4px;display:block;overflow:hidden}.week-load>span{background:var(--ok);height:100%;display:block}.week-load[data-status=warn]>span{background:var(--risk)}.week-load[data-status=over]>span{background:var(--overdue)}.week-row-body{flex-direction:column;justify-content:center;gap:4px;min-width:0;display:flex}.week-item{align-items:center;gap:8px;min-width:0;display:flex}.week-item .chip-item{width:auto;max-width:100%}.week-time{white-space:nowrap;font-size:12px}.week-count{font-family:var(--font-mono);background:var(--surface-2);border:1px solid var(--line);color:var(--ink);border-radius:999px;align-self:flex-start;padding:4px 10px;font-size:13px}.week-count:hover{border-color:var(--line-strong)}.week-collapse{align-self:flex-start;font-size:12px;text-decoration:underline}.week-nudge{color:var(--ink-2);border-left:3px solid var(--hi);align-self:flex-start;padding:2px 8px;font-size:12px}@media (min-width:768px){.week-row{grid-template-columns:150px minmax(0,1fr)}.week-load{width:110px}}.load-list{margin:var(--s-4) 0 0;flex-direction:column;gap:4px;padding:0;list-style:none;display:flex}.load-week{border-radius:var(--r-md);border:1px solid #0000}.load-week[data-open=true]{background:var(--surface);border-color:var(--line)}.load-week[data-past=true]{opacity:.55}.load-bar-row{border-radius:var(--r-md);text-align:left;grid-template-columns:56px minmax(0,1fr) 96px 190px;align-items:center;gap:10px;width:100%;min-height:44px;padding:4px 8px;display:grid}.load-bar-row:hover{background:var(--surface-2)}.load-label{color:var(--ink-2);flex-direction:column;font-size:12px;line-height:1.1;display:flex}.load-label em{color:var(--hi-ink);background:var(--hi);border-radius:3px;align-self:flex-start;margin-top:2px;padding:0 4px;font-size:10px;font-style:normal}.load-track{background:var(--surface-3);border-radius:7px;height:14px;display:block;position:relative;overflow:hidden}.load-fill{background:var(--ok);border-radius:7px;height:100%;display:block}.load-week[data-status=warn] .load-fill{background:var(--risk)}.load-week[data-status=over] .load-fill{background:var(--overdue)}.load-cap{background:var(--ink);opacity:.6;width:2px;position:absolute;top:-2px;bottom:-2px}.load-value{white-space:nowrap;text-align:right;font-size:12px}.load-marks{gap:2px;min-width:0;display:flex}.load-detail{padding:6px 8px 12px}.load-courses{grid-template-columns:repeat(auto-fill,minmax(150px,1fr));gap:6px;display:grid}.load-course{border-radius:var(--r-sm);background:color-mix(in srgb, var(--course) 12%, var(--surface));justify-content:space-between;align-items:center;gap:8px;min-height:40px;padding:0 10px;font-size:13px;display:flex}.load-course:disabled{opacity:.45;cursor:default}@media (max-width:639px){.load-bar-row{grid-template-columns:48px minmax(0,1fr) 84px}.load-marks{display:none}}.nextclass{background:var(--surface);border:1px solid var(--line);border-radius:var(--r-lg);padding:14px var(--s-4)}.nextclass-eyebrow{text-transform:uppercase;letter-spacing:.1em;color:var(--ink-3);align-items:center;gap:10px;font-size:12px;display:flex}.nextclass-eyebrow .chip{text-transform:none;letter-spacing:0}.nextclass-text{flex-wrap:wrap;align-items:baseline;gap:8px;margin-top:8px;font-size:16px;line-height:1.4;display:flex}.nextclass-text[data-quiet=true]{color:var(--ink-2)}.nextclass-link{text-align:left;font:inherit;color:inherit;text-decoration:underline;-webkit-text-decoration-color:var(--line-strong);text-decoration-color:var(--line-strong);text-underline-offset:3px}.nextclass-link:hover{-webkit-text-decoration-color:var(--ink);text-decoration-color:var(--ink)}.tag-inferred,.tag-source{font-family:var(--font-mono);letter-spacing:.04em;white-space:nowrap;border-radius:4px;padding:1px 6px;font-size:10px}.tag-inferred{border:1px dashed var(--risk);color:var(--risk)}.tag-source{border:1px solid var(--line-strong);color:var(--ink-3)}.chip-item[data-type=participation]{opacity:.6;border-left-style:dashed;font-style:italic}.chip-item[data-type=participation][data-plain=true]{border:1px dashed var(--line-strong);background:0 0;border-left-width:1px}.item-row[data-type=participation]{opacity:.75;border-left-style:dashed}.item-row[data-type=participation] .item-title{font-style:italic;font-weight:400}.hero{animation:.28s cubic-bezier(.2,.8,.2,1) hero-in}@keyframes hero-in{0%{opacity:0;transform:translateY(14px)}}.hero-why{color:var(--ink-2);margin-top:10px;font-size:14px}.hero-chunk{color:var(--ink-2);flex-wrap:wrap;align-items:center;gap:10px;margin-top:10px;font-size:14px;display:flex}.hero-source{margin-top:12px}.hero-actions .hero-btn.primary{flex:1;max-width:200px}.calm{padding:var(--s-5);border-radius:var(--r-lg);border:1px solid var(--line);background:var(--surface)}.calm[data-tone=fine]{border-color:color-mix(in srgb, var(--ok) 45%, var(--line));box-shadow:inset 4px 0 0 var(--ok)}.calm[data-tone=enough]{border-color:var(--hi);box-shadow:inset 4px 0 0 var(--hi)}.calm-title{letter-spacing:-.03em;font-size:30px;line-height:1.05}.calm-text{margin-top:10px;font-size:16px;line-height:1.5}.calm-more{color:var(--ink-3);text-underline-offset:3px;margin-top:12px;font-size:13px;text-decoration:underline}.then-all{font-family:var(--font-mono);color:var(--ink-2);text-underline-offset:2px;margin-left:8px;font-size:11px;text-decoration:underline}.halo-steps{gap:8px;margin:10px 0;padding-left:20px;font-size:14px;display:grid}.halo-drag{cursor:grab;vertical-align:middle;text-decoration:none;display:inline-flex}.halo-paste{width:100%;font:12px/1.4 var(--font-mono);border:1px solid var(--line-strong);border-radius:var(--r-md);background:var(--surface-2);color:var(--ink);resize:vertical;padding:10px}.halo-banner{top:calc(var(--nav-h) + 8px);z-index:60;background:var(--hi-soft);color:var(--hi-ink);border:1px solid var(--line-strong);border-radius:var(--r-md);box-shadow:var(--shadow);max-width:min(92vw,520px);padding:8px 14px;font-size:13px;position:fixed;left:50%;transform:translate(-50%)}.diff-section{border-top:1px solid var(--line);padding:10px 0}.diff-section h3{align-items:center;gap:8px;margin:0 0 4px;font-size:14px;display:flex}.diff-section h3 .count{font-family:var(--font-mono);color:var(--ink-3);font-size:12px;font-weight:500}.diff-bulk{gap:10px;margin-left:auto;display:flex}.diff-toggle{color:var(--ink-2);font:inherit;cursor:pointer;background:0 0;border:0;padding:0;font-size:13px;-webkit-text-decoration:underline dotted;text-decoration:underline dotted}.diff-row{border-top:1px dashed var(--line);cursor:pointer;grid-template-columns:auto 1fr;align-items:start;gap:4px 10px;padding:8px 0;font-size:14px;display:grid}.diff-row:first-of-type{border-top:0}.diff-row input[type=checkbox]{width:18px;height:18px;accent-color:var(--ink);margin-top:2px}.diff-row .title{flex-wrap:wrap;align-items:center;gap:4px 8px;font-weight:600;display:flex}.diff-row .meta{color:var(--ink-2);flex-wrap:wrap;gap:2px 10px;font-size:13px;display:flex}.diff-change{color:var(--ink-2);font-size:13px}.diff-change .old{opacity:.75;text-decoration:line-through}.diff-change mark{background:var(--hi-soft);color:var(--hi-ink);border-radius:3px;padding:0 4px;font-weight:600}.diff-raw{font-family:var(--font-mono);color:var(--ink-3);font-size:11px}.diff-list{color:var(--ink-2);margin:4px 0 0;padding-left:18px;font-size:13px}.diff-zone{border:1px solid var(--line-strong);border-radius:var(--r-md);background:var(--surface-2);gap:10px;margin:8px 0 12px;padding:12px 14px;font-size:14px;display:grid}.diff-zone[data-warn=true]{border-color:var(--risk);background:var(--risk-soft)}.diff-zone-grid{grid-template-columns:auto 1fr;align-items:center;gap:6px 12px;display:grid}.diff-zone-k{color:var(--ink-2);text-transform:uppercase;letter-spacing:.06em;font-size:11px;font-weight:600}.diff-zone code{font-family:var(--font-mono);word-break:break-all;font-size:13px}.diff-zone b{font-size:17px}.diff-zone-toggle{flex-wrap:wrap;align-items:center;gap:10px;display:flex}.diff-zone-warn{color:var(--risk);margin:0;font-weight:600}.tag-zone{color:var(--risk);font-size:12px;font-weight:600}.rec-banner{border-radius:var(--r-md);flex-wrap:wrap;align-items:center;gap:8px 12px;margin:10px 0;padding:10px 14px;font-size:14px;display:flex}.rec-banner[data-level=warn]{background:var(--risk-soft);color:var(--risk);border:1px solid var(--risk)}.rec-banner[data-level=stop]{background:var(--overdue-soft);color:var(--overdue);border:1px solid var(--overdue)}.rec-banner-actions{gap:8px;margin-left:auto;display:flex}.rec-grid{gap:var(--s-4);margin-top:var(--s-4);display:grid}@media (min-width:900px){.rec-grid{grid-template-columns:minmax(0,5fr) minmax(0,7fr);align-items:start}}.rec-panel select,.rec-panel input{font:inherit}.rec-big{justify-content:center;align-items:center;gap:10px;width:100%;min-height:64px;margin-top:14px;font-size:20px;font-weight:700;display:inline-flex}.rec-stop{letter-spacing:.02em;min-height:88px;font-size:26px}.rec-dot{background:var(--overdue);border-radius:50%;width:12px;height:12px;display:inline-block}.rec-pill[data-state=on] .rec-dot{animation:1.2s ease-in-out infinite rec-blink}@keyframes rec-blink{50%{opacity:.25}}.rec-live-head{justify-content:space-between;align-items:center;gap:10px;display:flex}.rec-pill{color:var(--overdue);align-items:center;gap:8px;font-weight:700;display:inline-flex}.rec-clock{letter-spacing:.02em;font-size:28px;font-weight:600}.rec-live-title{flex-wrap:wrap;align-items:center;gap:8px;margin:6px 0 0;font-weight:600;display:flex}.rec-transcript{background:var(--surface-2);border-radius:var(--r-md);white-space:pre-wrap;max-height:220px;margin-top:10px;padding:10px 12px;font-size:14px;line-height:1.5;overflow:auto}.rec-transcript-live{min-height:120px;max-height:300px}.rec-error{color:var(--overdue)}.rec-search{font:inherit;border:1px solid var(--line-strong);border-radius:var(--r-md);background:var(--surface);color:var(--ink);max-width:220px;padding:6px 10px;font-size:14px}.rec-group{margin-top:12px}.rec-group h3{align-items:center;gap:8px;margin:0 0 6px;font-size:14px;display:flex}.rec-group h3 .count{font-family:var(--font-mono);color:var(--ink-3);font-size:12px;font-weight:500}.rec-list{gap:8px;margin:0;padding:0;list-style:none;display:grid}.rec-card{border:1px solid var(--line);border-radius:var(--r-md);background:var(--surface);padding:10px 12px}.rec-card[data-status=interrupted]{border-style:dashed}.rec-card-title{font-weight:600}.rec-card-actions{flex-wrap:wrap;gap:6px;margin-top:8px;display:flex}.rec-hits{color:var(--ink-2);margin:6px 0 0;padding-left:16px;font-size:13px}.rec-audio{width:100%;margin-top:8px}.rev section{margin-top:12px}.rev h3{align-items:center;gap:8px;margin:0 0 6px;font-size:14px;display:flex}.rev h3 .count{font-family:var(--font-mono);color:var(--ink-3);font-size:12px;font-weight:500}.rev-dry{background:var(--hi-soft);color:var(--hi-ink);border-radius:var(--r-md);margin:8px 0;padding:8px 12px;font-size:13px}.rev-summary{gap:4px;margin:0;padding-left:18px;font-size:14px;display:grid}.rev-concepts{flex-wrap:wrap;gap:6px;display:flex}.rev-mentions{gap:10px;margin:0;padding:0;list-style:none;display:grid}.rev-mention{border:1px solid var(--line);border-radius:var(--r-md);gap:6px;padding:10px 12px;font-size:14px;display:grid}.rev-mention[data-decided=approved]{border-color:var(--ok);background:var(--ok-soft)}.rev-mention[data-decided=dismissed]{opacity:.6}.rev-kind{flex-wrap:wrap;align-items:center;gap:8px;display:flex}.rev-badge{text-transform:uppercase;letter-spacing:.06em;background:var(--surface-3);color:var(--ink-2);border-radius:999px;padding:2px 8px;font-size:11px;font-weight:700}.rev-badge.kind-date_change{background:var(--soon-soft);color:var(--soon)}.rev-badge.kind-new{background:var(--ok-soft);color:var(--ok)}.rev-badge.kind-cancel{background:var(--overdue-soft);color:var(--overdue)}.rev-quote{border-left:3px solid var(--line-strong);color:var(--ink-2);margin:0;padding-left:10px;font-style:italic}.rev-proposal .old{opacity:.75;text-decoration:line-through}.rev-proposal mark{background:var(--hi-soft);color:var(--hi-ink);border-radius:3px;padding:0 4px;font-weight:600}.rev-edit{grid-template-columns:repeat(auto-fit,minmax(120px,1fr));gap:8px;display:grid}.rev-actions{gap:8px;display:flex}.rev-decided{color:var(--ok);margin:0;font-weight:600}.rev-mention[data-decided=dismissed] .rev-decided{color:var(--ink-3)}.rev-transcript{white-space:pre-wrap;font:13px/1.5 var(--font-body);background:var(--surface-2);border-radius:var(--r-md);max-height:260px;margin:8px 0 0;padding:10px 12px;overflow:auto}.topbar-sync{cursor:pointer;background:0 0;border:0;margin-right:2px}.drop-overlay{z-index:200;color:#fff;font-size:22px;font-weight:700;font-family:var(--font-display);pointer-events:none;background:#151a218c;border:6px dashed #ffffff80;place-items:center;display:grid;position:fixed;inset:0}.sync-drop{text-align:center;border:2px dashed var(--line-strong);border-radius:var(--r-lg);background:var(--surface-2);cursor:pointer;place-items:center;gap:4px;margin:10px 0;padding:36px 16px;font-size:16px;display:grid}.sync-drop[data-dragging=true],.sync-drop:hover{border-color:var(--ink);background:var(--surface-3)}.sync-map{border-collapse:collapse;width:100%;margin:8px 0;font-size:14px}.sync-map th{text-align:left;text-transform:uppercase;letter-spacing:.06em;color:var(--ink-3);padding:4px 0;font-size:11px}.sync-map td{border-top:1px solid var(--line);vertical-align:top;padding:8px 8px 8px 0}.sync-map select,.sync-code{font:inherit;border:1px solid var(--line-strong);border-radius:var(--r-sm);background:var(--surface);width:100%;color:var(--ink);padding:6px 8px}.sync-code{margin-top:6px}.stale{border-radius:var(--r-md);background:var(--surface-2);color:var(--ink-2);margin:6px 0 10px;padding:8px 12px;font-size:14px}.stale[data-level=loud]{background:var(--risk-soft);color:var(--risk);border:1px solid var(--risk);font-weight:600}.brand{white-space:nowrap}@media (max-width:480px){.topbar-day{display:none}}.hero-snooze{flex-wrap:wrap;flex-basis:100%;align-items:center;gap:6px 8px;padding-top:8px;font-size:13px;display:flex}.hero-snooze-date{font:inherit;border:1px solid var(--line-strong);border-radius:var(--r-sm);background:var(--surface);color:var(--ink);max-width:150px;padding:4px 6px;font-size:13px}.rec-import{margin:10px 0 4px;padding:26px 16px}.rec-import-form{margin-top:8px}.rec-paste{gap:8px;margin-top:8px;display:grid}.rec-paste textarea{width:100%;font:13px/1.5 var(--font-body);border:1px solid var(--line-strong);border-radius:var(--r-md);background:var(--surface-2);color:var(--ink);resize:vertical;padding:8px 10px}.syllabus-row{border-top:1px solid var(--line);flex-wrap:wrap;align-items:center;gap:6px 10px;padding:8px 0;display:flex}.syllabus-row:first-child{border-top:0}.syllabus-status{flex:200px}.syllabus-actions{gap:6px;display:flex}.time-ask{left:50%;bottom:calc(var(--nav-h) + env(safe-area-inset-bottom) + 12px);z-index:70;background:var(--surface);width:min(92vw,560px);color:var(--ink);border:1px solid var(--line-strong);border-radius:var(--r-lg);box-shadow:var(--shadow);flex-wrap:wrap;align-items:center;gap:8px 12px;padding:10px 14px;font-size:14px;animation:.2s ease-out hero-in;display:flex;position:fixed;transform:translate(-50%)}@media (min-width:700px){.time-ask{bottom:20px}}.time-ask-btns{flex-wrap:wrap;align-items:center;gap:6px;margin-left:auto;display:flex}.time-ask-other,.inline-num{font:inherit;border:1px solid var(--line-strong);border-radius:var(--r-sm);background:var(--surface-2);width:70px;color:var(--ink);padding:4px 6px}.capture-input{width:100%;font:18px/1.3 var(--font-body);border:1px solid var(--line-strong);border-radius:var(--r-md);background:var(--surface-2);color:var(--ink);padding:12px 14px}.capture-read{flex-wrap:wrap;align-items:center;gap:8px 12px;margin-top:10px;font-size:14px;display:flex}.capture-class select{font:inherit;border:1px solid var(--line-strong);border-radius:var(--r-sm);background:var(--surface);color:var(--ink);padding:4px 8px}.hero-exam{border-color:var(--soon);box-shadow:0 0 0 1px var(--soon) inset, var(--shadow)}.hero-framing[data-framing=exam]{color:var(--soon);font-weight:700}.exam-sessions{gap:6px;display:grid}.exam-session{border:1px solid var(--line);border-radius:var(--r-md);background:var(--surface);justify-content:space-between;align-items:center;gap:10px;padding:8px 12px;font-size:15px;display:flex}.exam-session[data-today=true]{border-color:var(--soon);background:var(--soon-soft)}.exam-session.muted{border-style:dashed;font-size:13px}.pressure-link{font:inherit;color:inherit;text-align:left;cursor:pointer;background:0 0;border:0;padding:0;-webkit-text-decoration:underline dotted;text-decoration:underline dotted}.whatif{gap:14px;margin-top:12px;display:grid}.whatif-block h3{text-transform:uppercase;letter-spacing:.06em;color:var(--ink-3);margin:0 0 6px;font-size:13px}.whatif-weights{gap:4px;margin:0;padding:0;list-style:none;display:grid}.whatif-weights li{border-radius:var(--r-sm);justify-content:space-between;gap:8px;padding:4px 8px;font-size:14px;display:flex;position:relative;overflow:hidden}.whatif-bar{background:var(--course,var(--surface-3));opacity:.16;position:absolute;inset:0 auto 0 0}.whatif-name{font-weight:600;position:relative}.whatif-row{flex-wrap:wrap;align-items:center;gap:6px 8px;font-size:14px;display:flex}.whatif-row select,.whatif-num{font:inherit;border:1px solid var(--line-strong);border-radius:var(--r-sm);background:var(--surface);color:var(--ink);padding:4px 8px}.whatif-num{width:72px}.whatif-targets{align-items:center;gap:4px;display:inline-flex}.whatif-targets .btn[data-on=true]{background:var(--ink);color:var(--surface)}.whatif-out{color:var(--ink-2);margin:6px 0 0;font-size:13px}.whatif-out[data-live=true]{color:var(--ink)}.class-admin{border-top:1px solid var(--line);margin-top:8px;padding-top:10px}.grade-empty{color:var(--ink-2);margin:8px 0 10px;font-size:13px}.lib-head{flex-wrap:wrap;justify-content:space-between;align-items:center;gap:8px 16px;display:flex}.deck-card[data-highlight=true]{border-color:var(--soon);box-shadow:0 0 0 1px var(--soon) inset}.deck-link,.deck-tag{font:inherit;border:1px solid var(--line-strong);border-radius:var(--r-sm);background:var(--surface);color:var(--ink);max-width:200px;padding:4px 8px;font-size:13px}.deck-text p{margin:0 0 10px}.search-panel{max-width:760px}.search-row{align-items:center;gap:8px;display:flex}.search-main{flex:1;max-width:none;padding:10px 12px;font-size:16px}.search-row select{font:inherit;border:1px solid var(--line-strong);border-radius:var(--r-md);background:var(--surface);color:var(--ink);padding:8px}.search-hits{gap:8px;margin:8px 0 0;padding:0;list-style:none;display:grid}.search-hit{border:1px solid var(--line);border-radius:var(--r-md);padding:8px 12px}.search-hit-head{flex-wrap:wrap;align-items:center;gap:6px 10px;font-size:14px;display:flex}.search-hit-title{font-weight:600}.search-snippet{color:var(--ink-2);margin:4px 0 0;font-size:14px}.rev-badge.src-slide{background:var(--soon-soft);color:var(--soon)}.rev-badge.src-transcript{background:var(--ok-soft);color:var(--ok)}.rev-badge.src-syllabus{background:var(--risk-soft);color:var(--risk)}.lib-rows{margin-top:12px}.lib-row{color:inherit;text-decoration:none}.lib-drop{margin-top:16px}.lib-notes{margin-top:8px}.lib-class-title{align-items:center;gap:10px;margin-top:4px;display:flex}.lib-section{margin-top:18px}.lib-section>.section-title{margin-bottom:8px}.rec-grid[data-single=true]{grid-template-columns:1fr}.rec-panel[data-slim=true]{padding:10px 14px}.inline-title{font:inherit;color:inherit;text-align:left;cursor:text;background:0 0;border:0;border-bottom:1px dashed #0000;padding:0;font-weight:600}.inline-title:hover{border-bottom-color:var(--line-strong)}.inline-title-input{font:inherit;border:1px solid var(--line-strong);border-radius:var(--r-sm);background:var(--surface);color:var(--ink);width:min(100%,360px);padding:2px 6px;font-weight:600}.syllabus-list[data-one=true] .syllabus-row{border-top:0;padding-top:0}@media (max-width:480px){.brand-text{display:none}.topbar-inner{flex-wrap:nowrap}.topbar-date{gap:2px}}.topbar-date{white-space:nowrap;flex-shrink:0;align-items:center;gap:2px;display:flex}.nav-top{scrollbar-width:none;min-width:0;overflow-x:auto}.nav-top::-webkit-scrollbar{display:none}.nav-top .nav-link{white-space:nowrap;flex-shrink:0}@media (max-width:1099px){.topbar-day{display:none}}@media (min-width:768px) and (max-width:999px){.brand-text{display:none}.nav-top .nav-link{padding:0 8px;font-size:13px}}
