:root{--brand:#17365c;--brand-dark:#0f2440;--brand-tint:#eef2f8;--brand-soft:#7d93b2;--accent:#a1741c;--accent-light:#d69e2e;--accent-dark:#7a570f;--accent-tint:#fdf6e7;--accent-ink:#7a570f;--bg:#eef2f8;--card:#fff;--ink:#1a1a2e;--muted:#5b6472;--light:#9ca3af;--border:#e5e7eb;--ok:#00a544;--ok-tint:#dcfce7;--ok-ink:#166534;--danger:#e40014;--danger-tint:#fee2e2;--danger-ink:#991b1b;--warn:#f05100;--warn-tint:#fff1e5;--warn-ink:#92400e;--info:#155dfc;--info-tint:#dbeafe;--info-ink:#1e3a8a;--r-sm:6px;--r-md:8px;--r-lg:12px;--r-xl:16px;--r-pill:9999px;--shadow-card:0 10px 30px -10px rgba(23,54,92,.1);--shadow-raise:0 8px 32px rgba(23,54,92,.2);--shadow-accent:0 10px 30px rgba(161,116,28,.35);--glow-live:0 0 8px rgba(0,165,68,.55);--font-body:var(--font-roboto),-apple-system,BlinkMacSystemFont,"Segoe UI",sans-serif;--font-heading:var(--font-bitter),Georgia,serif}*{box-sizing:border-box}body,html{margin:0;padding:0}body{background:var(--bg);color:var(--ink);font:15px/1.5 var(--font-body)}.metric .value,.stat .value,h1,h2,h3{font-family:var(--font-heading)}a{color:var(--brand)}.container{max-width:960px;margin:0 auto;padding:24px 20px}.card{background:var(--card);border:1px solid var(--border);border-radius:var(--r-lg);padding:24px;box-shadow:var(--shadow-card)}.center{min-height:100vh;display:grid;place-items:center;padding:20px}.stack>*+*{margin-top:12px}label{display:block;font-size:13px;color:var(--muted);margin-bottom:4px}input{width:100%;padding:10px 12px;border:1px solid var(--border);border-radius:var(--r-md);background:var(--card)}button,input{font-size:15px}button{background:var(--brand);color:#fff;border:0;border-radius:var(--r-pill);padding:10px 24px;font-weight:700;cursor:pointer;transition:background .15s ease,box-shadow .15s ease}button:hover:not(:disabled){background:var(--brand-dark)}:where(button,.chip,a.metric-link,input,select,textarea):focus-visible{outline:none;box-shadow:0 0 0 3px rgba(23,54,92,.28)}svg{vertical-align:-.15em}button:disabled{opacity:.6;cursor:default}.ghost{background:transparent;color:var(--brand);border:1px solid var(--border);border-radius:var(--r-md);font-weight:600;display:inline-flex;align-items:center;justify-content:center;gap:6px}.ghost:hover:not(:disabled){background:var(--brand-tint)}.error{color:var(--danger);font-size:14px}h1{font-size:22px;margin:0 0 4px}.sub{color:var(--muted);margin:0 0 20px}.grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(220px,1fr));grid-gap:14px;gap:14px}.metric{border:1px solid var(--border);border-radius:var(--r-lg);padding:16px;background:var(--card);box-shadow:var(--shadow-card);container-type:inline-size}.metric .value{font-size:clamp(20px,13cqi,28px);font-weight:800;color:var(--brand);line-height:1.15;white-space:nowrap;font-feature-settings:"tnum";font-variant-numeric:tabular-nums}.metric .label{font-size:13px;color:var(--muted)}.section-title{font-family:var(--font-body);font-size:12px;font-weight:700;letter-spacing:.06em;text-transform:uppercase;color:var(--muted);margin:4px 0 10px;line-height:1.3}.metric-link{display:block;text-align:left;text-decoration:none;color:var(--ink);background:var(--card);transition:box-shadow .15s ease,transform .15s ease,border-color .15s ease}.metric.metric-link:hover{transform:translateY(-2px);box-shadow:var(--shadow-raise);border-color:var(--brand)}.stat.metric-link{background:transparent}.stat.metric-link:hover{background:var(--brand-tint);border-color:var(--brand)}.metric-link .metric-go{font-size:12px;color:var(--brand);margin-top:8px;opacity:0;transition:opacity .15s ease}.metric-link:hover .metric-go{opacity:1}button.metric-link{width:100%;font:inherit;cursor:pointer}button.metric-link[aria-pressed=true]{border-color:var(--brand);box-shadow:inset 0 0 0 1px var(--brand)}.metric-alert{border-left:4px solid var(--accent)}.metric-alert .value{color:var(--accent-ink)}a.metric-link.pipeline-card .metric-go{opacity:1;margin-top:0}.row{justify-content:space-between;gap:12px}.chips,.row{display:flex;align-items:center}.chips{flex-wrap:wrap;gap:8px}.panel{background:var(--card);border:1px solid var(--border);border-radius:var(--r-lg);box-shadow:var(--shadow-card);overflow:hidden}.panel>header{display:flex;align-items:center;gap:8px;background:var(--brand);color:#fff;padding:12px 16px;font-weight:700;font-size:14px;line-height:1.3}.panel>header .ico{flex:none;display:inline-flex;align-items:center}.panel>header .spacer{margin-left:auto}.panel>header a{color:#fff;text-decoration:underline;text-underline-offset:2px}.panel>header a:hover{color:var(--brand-tint)}.panel>header>.badge:last-child,.panel>header>.dot-live:last-child{margin-left:auto}.panel{padding:0}.panel>.body{padding:16px}.panel>.body>table:only-child{border:0;border-radius:0}.panel--accent>header{background:var(--accent-dark);font-size:15px;font-weight:800}.stat{display:flex;align-items:center;gap:12px;container-type:inline-size;padding:10px 12px;border-radius:var(--r-md);border:1px solid transparent}.stat .stat-text{display:flex;flex-direction:column;min-width:0;gap:1px}.stat .ico{flex:none;width:40px;height:40px;border-radius:var(--r-pill);display:grid;place-items:center;font-size:18px;line-height:1;background:var(--brand-tint);color:var(--brand)}.stat .ico.is-info{background:var(--info-tint);color:var(--info-ink)}.stat .ico.is-ok{background:var(--ok-tint);color:var(--ok-ink)}.stat .ico.is-warn{background:var(--warn-tint);color:var(--warn-ink)}.stat .ico.is-danger{background:var(--danger-tint);color:var(--danger-ink)}.stat .value{font-size:clamp(18px,13cqi,26px);font-weight:800;color:var(--brand);line-height:1.15;white-space:nowrap;font-feature-settings:"tnum";font-variant-numeric:tabular-nums}.stat--money .value{font-size:clamp(15px,9cqi,20px)}.stat .caption{font-size:11px;text-transform:uppercase;letter-spacing:.04em;color:var(--muted);line-height:1.3}.stat.is-ok .value{color:var(--ok)}.stat.is-warn .value{color:var(--warn)}.stat.is-danger .value{color:var(--danger)}.stat.is-info .value{color:var(--info)}.stat--money.is-ok .value{color:var(--ok-ink)}.stat--money.is-warn .value{color:var(--warn-ink)}.stat--money.is-danger .value{color:var(--danger-ink)}.stat--money.is-info .value{color:var(--info-ink)}.money{font-feature-settings:"tnum";font-variant-numeric:tabular-nums;white-space:nowrap;text-align:right}.statline{display:flex;align-items:baseline;justify-content:space-between;gap:12px;padding:8px 0;border-top:1px solid var(--border);color:var(--muted);font-size:13px}.statline:first-child{border-top:0}.statline .v{color:var(--ink);font-weight:700;font-size:14px;text-align:right;white-space:nowrap;font-feature-settings:"tnum";font-variant-numeric:tabular-nums}.statline .v.is-ok{color:var(--ok-ink)}.statline .v.is-warn{color:var(--warn-ink)}.statline .v.is-danger{color:var(--danger-ink)}.statline .v.is-info{color:var(--info-ink)}.dot-live{display:inline-block;flex:none;width:8px;height:8px;border-radius:var(--r-pill);background:var(--ok);box-shadow:var(--glow-live)}.shell{display:grid;grid-template-columns:220px 1fr;min-height:100vh}.sidebar{background:var(--brand-dark);color:#cbd5e1;padding:20px 12px}.sidebar .brand{color:#fff;font-weight:700;padding:8px 12px 16px;font-size:16px;display:flex;align-items:center;gap:8px}.sidebar .nav-group{margin-bottom:14px}.sidebar .group-label{color:#94a3b8;font-size:11px;font-weight:700;letter-spacing:.06em;text-transform:uppercase;padding:6px 12px 4px}.sidebar a{display:flex;align-items:center;gap:10px;color:#cbd5e1;text-decoration:none;padding:9px 12px;border-radius:8px;font-size:14px;margin-bottom:2px}.sidebar a .nav-icon{display:inline-flex;align-items:center;justify-content:center;width:18px;height:18px;flex:none}.sidebar a .nav-icon svg{display:block}.sidebar a:hover{background:hsla(0,0%,100%,.08);color:#fff}.sidebar a.active{background:var(--brand);color:#fff}.content{padding:24px 28px;overflow:auto;min-width:0}.content>*{max-width:1180px;margin-left:auto;margin-right:auto}.topbar{display:flex;align-items:center;justify-content:space-between;gap:12px;margin-bottom:20px}.topbar .who{color:var(--muted);font-size:13px}.campus-lens{display:inline-flex;align-items:center;gap:6px;color:var(--muted)}.campus-lens select{border:1px solid var(--border);border-radius:8px;padding:4px 8px;font-size:13px;background:var(--card);color:var(--ink);max-width:180px}.campus-lens select:hover{border-color:var(--brand)}.nav-toggle{background:transparent;color:var(--ink);border:1px solid var(--border);padding:8px 12px;font-size:18px;line-height:1}.nav-overlay,.nav-toggle{display:none}.toolbar{display:flex;gap:10px;align-items:flex-end;flex-wrap:wrap;margin-bottom:16px}.toolbar>div{min-width:140px}.field-inline{display:inline-block;margin-right:10px}select{padding:10px 12px;border:1px solid var(--border);border-radius:var(--r-md);font-size:15px}select,table{width:100%;background:var(--card)}table{border-collapse:collapse;border:1px solid var(--border);border-radius:var(--r-lg);overflow:hidden}td,th{text-align:left;padding:10px 12px;border-bottom:1px solid var(--border);font-size:14px}th{background:var(--brand-tint);color:var(--muted);font-size:12px;font-weight:700;text-transform:uppercase;letter-spacing:.04em}tr:last-child td{border-bottom:0}.chip{display:inline-flex;align-items:center;gap:6px;padding:6px 12px;border-radius:var(--r-pill);font-size:13px;border:1px solid var(--border);background:var(--card);color:var(--ink);cursor:pointer}.chip:hover{background:var(--brand-tint)}.chip.active{background:var(--brand);color:#fff;border-color:var(--brand)}.chip.active .badge{background:hsla(0,0%,100%,.25);color:#fff}.badge{display:inline-block;padding:2px 8px;border-radius:var(--r-pill);font-size:12px;background:var(--info-tint);color:var(--info-ink)}.badge.ok{background:var(--ok-tint);color:var(--ok-ink)}.badge.warn{background:var(--warn-tint);color:var(--warn-ink)}.badge.bad{background:var(--danger-tint);color:var(--danger-ink)}.muted{color:var(--muted)}.toast{padding:10px 12px;border-radius:var(--r-md);font-size:14px;margin-bottom:14px}.toast.ok{background:var(--ok-tint);color:var(--ok-ink)}.toast.err{background:var(--danger-tint);color:var(--danger-ink)}.small{padding:6px 10px;font-size:13px}.inline-form{display:flex;gap:8px;flex-wrap:wrap;align-items:flex-end}.form-grid{display:grid;grid-template-columns:repeat(12,1fr);grid-gap:14px;gap:14px;align-items:start}.f-full{grid-column:span 12}.f-half{grid-column:span 6}.f-third{grid-column:span 4}.f-quarter{grid-column:span 3}.field-hint{color:var(--muted)}.field-error,.field-hint{font-size:12px;margin-top:4px}.field-error{color:var(--danger)}input.invalid,select.invalid{border-color:var(--danger)}.steps{display:flex;gap:8px;flex-wrap:wrap}.step-pill{display:inline-flex;align-items:center;gap:8px;padding:8px 14px;border-radius:var(--r-pill);border:1px solid var(--border);background:var(--card);color:var(--ink);font-size:14px;cursor:pointer}.step-pill .n{width:22px;height:22px;border-radius:var(--r-pill);display:grid;place-items:center;font-size:12px;font-weight:700;background:var(--border);color:var(--muted)}.step-pill.active{border-color:var(--brand);box-shadow:0 0 0 1px var(--brand) inset}.step-pill.active .n{background:var(--brand);color:#fff}.step-pill.done .n{background:var(--ok-ink);color:#fff}.form-actions{position:-webkit-sticky;position:sticky;bottom:0;z-index:5;display:flex;align-items:center;gap:12px;flex-wrap:wrap;padding:12px 0;margin-top:8px;background:var(--card);border-top:1px solid var(--border)}@media (max-width:1024px){.shell{grid-template-columns:190px 1fr}.content{padding:20px 18px}.grid{grid-template-columns:repeat(auto-fill,minmax(180px,1fr))}.f-quarter,.f-third{grid-column:span 6}}@media (max-width:720px){.shell{grid-template-columns:1fr}.sidebar{position:fixed;top:0;bottom:0;left:0;width:264px;z-index:50;overflow-y:auto;transform:translateX(-100%);transition:transform .2s ease;box-shadow:2px 0 16px rgba(15,23,42,.18)}.sidebar.open{transform:none}.nav-overlay{display:block;position:fixed;inset:0;background:rgba(15,23,42,.45);z-index:40;border:0;padding:0}.nav-toggle{display:inline-flex;align-items:center}.content{padding:16px 14px}.card{padding:16px;border-radius:10px}.container{padding:16px 14px}.row,.topbar{flex-wrap:wrap}.topbar{align-items:flex-start}.topbar .who{width:100%;order:2}.grid{grid-template-columns:1fr}.inline-form{flex-direction:column;align-items:stretch}.inline-form>div{width:100%;min-width:0!important}.toolbar{flex-direction:column;align-items:stretch}.toolbar>div{min-width:0;width:100%}.chip,button{min-height:44px}input,select,textarea{font-size:16px}table{display:block;overflow-x:auto;white-space:nowrap;-webkit-overflow-scrolling:touch}h1{font-size:20px}.form-grid>*{grid-column:span 12!important}.form-actions{padding:12px 14px;margin:8px -14px 0}.form-actions button{flex:1 1 auto}}.tabbar{display:none}@media (max-width:720px){.tabbar{display:grid;grid-auto-flow:column;grid-auto-columns:1fr;position:fixed;left:0;right:0;bottom:0;z-index:45;background:var(--card);border-top:1px solid var(--border);padding-bottom:env(safe-area-inset-bottom,0)}.tabbar .tab{display:flex;flex-direction:column;align-items:center;justify-content:center;gap:2px;padding:8px 4px;min-height:56px;text-decoration:none;color:var(--muted);font-size:11px}.tabbar .tab.active{color:var(--brand);font-weight:600}.tabbar .tab-icon{display:inline-flex;align-items:center;justify-content:center;height:22px}.has-tabbar .content{padding-bottom:calc(76px + env(safe-area-inset-bottom, 0px))}.has-tabbar .nav-overlay,.has-tabbar .nav-toggle,.has-tabbar .sidebar{display:none}}.home-grid{display:grid;grid-gap:14px;gap:14px;align-items:start}.home-grid>*{min-width:0}.home-main,.home-side{display:grid;grid-gap:14px;gap:14px;align-content:start}@media (min-width:1024px){.home-grid{grid-template-columns:minmax(0,640px) minmax(260px,1fr)}}.now{background:var(--ink);color:#fff;border-radius:14px;padding:18px 18px 16px;border:1px solid var(--ink)}.now .eyebrow{font-size:11px;letter-spacing:.1em;text-transform:uppercase;color:#9aa3b2;margin:0 0 6px}.now .headline{font-size:26px;font-weight:650;line-height:1.15;margin:0}.now .detail{color:#c3cad6;font-size:14px;margin:4px 0 0}.now .cta{display:block;width:100%;text-align:center;margin-top:14px;background:#fff;color:var(--ink);font-weight:600;font-size:15px;border-radius:10px;padding:13px 16px;text-decoration:none;min-height:48px}.now .cta:active{transform:translateY(1px)}.day-rail{list-style:none;margin:0;padding:0}.day-rail li{display:grid;grid-template-columns:34px 1fr;grid-gap:12px;gap:12px;align-items:baseline;padding:10px 0;border-top:1px solid var(--border)}.day-rail li:first-child{border-top:0}.day-rail .p{color:var(--muted);font-size:12px;font-feature-settings:"tnum";font-variant-numeric:tabular-nums}.day-rail .what{font-size:14px}.day-rail .where{color:var(--muted);font-size:12px}@media (prefers-reduced-motion:reduce){.now .cta:active{transform:none}}@media (max-width:720px){.has-tabbar .topbar-desktop{display:none}}.marks{display:flex;gap:6px}.marks .mark{flex:1 1;min-width:44px;min-height:44px;background:#fff;color:var(--muted);border:1px solid var(--border);border-radius:8px;font-size:15px;font-weight:600;padding:0}.marks .mark.on{color:#fff;border-color:transparent}.marks .mark.present.on{background:#15803d}.marks .mark.absent.on{background:#b91c1c}.marks .mark.late.on{background:#b45309}.marks .mark.half_day.on{background:#6b7280}.marks .mark:focus-visible{outline:2px solid var(--brand);outline-offset:2px}.save-bar{display:flex;align-items:center;justify-content:space-between;gap:12px}.save-bar .tally{color:var(--muted);font-size:13px}@media (max-width:720px){.register,.register tbody,.register td,.register tr{display:block;width:100%}.register thead{display:none}.register tr{border-bottom:1px solid var(--border);padding:12px 14px;display:grid;grid-template-columns:1fr auto;grid-gap:6px 10px;gap:6px 10px;align-items:center}.register tr:last-child{border-bottom:0}.register td{border:0;padding:0}.register td[data-label=GR]{grid-row:2;color:var(--muted);font-size:12px}.register td[data-label=GR]:before{content:"GR "}.register td[data-label=Student]{grid-row:1;font-weight:600}.register td:last-child{grid-column:1/-1;grid-row:3;margin-top:4px}.has-tabbar .save-bar{position:fixed;left:0;right:0;bottom:calc(57px + env(safe-area-inset-bottom, 0px));background:var(--card);border-top:1px solid var(--border);padding:10px 16px;z-index:44}.has-tabbar .save-bar button{min-height:44px}.has-tabbar .content:has(.save-bar){padding-bottom:calc(140px + env(safe-area-inset-bottom, 0px))}}@media (max-width:720px){.stacked,.stacked tbody,.stacked td,.stacked tr{display:block;width:100%}.stacked thead{display:none}.stacked tr{border:1px solid var(--border);border-radius:10px;padding:10px 12px;margin-bottom:10px;background:var(--card)}.stacked td{border:0;padding:4px 0;display:flex;justify-content:space-between;align-items:baseline;gap:12px}.stacked td:before{content:attr(data-label);color:var(--muted);font-size:12px;flex:0 0 auto}.stacked td[data-label=""]:before{content:none}.stacked td[data-label=""]{justify-content:flex-start}}.chart{margin:0;display:flex;flex-direction:column;gap:10px}.bar-stack{display:flex;gap:2px;height:22px;border-radius:var(--r-sm);overflow:hidden}.bar-stack .seg{flex-basis:0;min-width:3px}.chart-legend{list-style:none;margin:0;padding:0;display:flex;flex-wrap:wrap;gap:6px 16px}.chart-legend li{display:flex;align-items:center;gap:6px;font-size:13px}.chart-legend .sw{width:10px;height:10px;border-radius:3px;flex:none}.chart-legend .k{color:var(--muted)}.chart-legend .v{color:var(--ink);font-weight:700;font-feature-settings:"tnum";font-variant-numeric:tabular-nums}.columns{display:flex;align-items:flex-end;gap:4px}.columns .col{flex:1 1;display:flex;flex-direction:column;align-items:center;gap:4px;min-width:0}.columns .peak{font-size:12px;font-weight:700;color:var(--ink);font-feature-settings:"tnum";font-variant-numeric:tabular-nums;white-space:nowrap;line-height:1.2;min-height:15px}.columns .track{width:100%;height:96px;display:flex;align-items:flex-end}.columns .fill{width:100%;max-width:44px;margin:0 auto;background:var(--brand-soft);border-radius:4px 4px 0 0}.columns .fill.is-peak{background:var(--brand)}.columns .tick{font-size:11px;color:var(--muted);border-top:1px solid var(--border);width:100%;text-align:center;padding-top:4px}.day-chips{display:flex;gap:6px;overflow-x:auto;padding-bottom:2px}.day-chips .chip{min-height:40px;min-width:44px;justify-content:center}