:root{--color-primary: #004890;--color-primary-deep: #012169;--color-primary-lifted: #4a7fd9;--color-primary-soft: rgba(0, 72, 144, .08);--color-primary-ring: rgba(0, 72, 144, .22);--bg-canvas: #f9fafb;--bg-elevated: #ffffff;--bg-sunken: #f1f3f7;--ink: #0a1530;--ink-soft: #5a6580;--ink-fade: #8a93a8;--border: #e4e8f0;--border-strong: #d2d8e3;--vote-up: var(--color-primary);--vote-down: var(--ink-soft);--font-serif: "Newsreader", "EB Garamond", Georgia, serif;--font-sans: "Inter Tight", "Inter", system-ui, -apple-system, sans-serif;--font-mono: "JetBrains Mono", "IBM Plex Mono", ui-monospace, monospace;--s-1: 4px;--s-2: 8px;--s-3: 12px;--s-4: 16px;--s-5: 24px;--s-6: 32px;--s-7: 48px;--s-8: 64px;--s-9: 96px;--r-1: 4px;--r-2: 8px;--r-3: 12px;--r-4: 16px;--shadow-1: 0 1px 2px rgba(10, 21, 48, .04);--shadow-2: 0 1px 3px rgba(10, 21, 48, .05), 0 4px 16px rgba(10, 21, 48, .04);--shadow-3: 0 6px 24px rgba(10, 21, 48, .08);--maxw: 1200px;--header-h: 64px}html[data-theme=dark]{--color-primary: #4a7fd9;--color-primary-deep: #012169;--color-primary-lifted: #6c95e0;--color-primary-soft: rgba(74, 127, 217, .12);--color-primary-ring: rgba(74, 127, 217, .3);--bg-canvas: #06091a;--bg-elevated: #0e1430;--bg-sunken: #090d22;--ink: rgba(245, 247, 252, .94);--ink-soft: #8a96b8;--ink-fade: #5a6788;--border: #1f2740;--border-strong: #2a3556;--vote-up: var(--color-primary-lifted);--vote-down: var(--ink-soft);--shadow-1: 0 1px 2px rgba(0, 0, 0, .2);--shadow-2: 0 1px 3px rgba(0, 0, 0, .25), 0 6px 24px rgba(0, 0, 0, .25);--shadow-3: 0 12px 40px rgba(0, 0, 0, .45)}*{box-sizing:border-box}html,body,#root{height:100%}html,body{margin:0;padding:0;background:var(--bg-canvas);color:var(--ink);font-family:var(--font-sans);font-feature-settings:"ss01","cv11";-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;transition:background-color .28s ease,color .28s ease}a{color:inherit;text-decoration:none}button{font-family:inherit}::view-transition-old(root),::view-transition-new(root){animation:none;mix-blend-mode:normal}::view-transition-old(root){z-index:1}::view-transition-new(root){z-index:2}html[data-theme=dark]::view-transition-old(root){z-index:2}html[data-theme=dark]::view-transition-new(root){z-index:1}@keyframes iris-in{0%{clip-path:circle(0% at var(--x, 50%) var(--y, 50%))}to{clip-path:circle(150% at var(--x, 50%) var(--y, 50%))}}::view-transition-new(root){animation:iris-in .54s cubic-bezier(.65,0,.35,1)}html[data-theme=dark]::view-transition-old(root){animation:iris-in .54s cubic-bezier(.65,0,.35,1) reverse}::-moz-selection{background:var(--color-primary-soft);color:var(--ink)}::selection{background:var(--color-primary-soft);color:var(--ink)}.cursor-spotlight{position:fixed;top:0;left:0;width:100vw;height:100vh;pointer-events:none;z-index:9999;background:radial-gradient(520px circle at var(--cursor-x, 50%) var(--cursor-y, 50%),rgba(255,255,255,.08) 0%,rgba(255,255,255,.04) 18%,rgba(255,255,255,0) 60%);mix-blend-mode:plus-lighter;opacity:0;transition:opacity .32s ease;will-change:background}.cursor-spotlight.is-on{opacity:1}html[data-theme=dark] .cursor-spotlight{background:radial-gradient(560px circle at var(--cursor-x, 50%) var(--cursor-y, 50%),rgba(180,200,240,.1) 0%,rgba(120,150,220,.05) 22%,rgba(0,0,0,0) 65%)}html[data-theme=light] .cursor-spotlight{background:radial-gradient(520px circle at var(--cursor-x, 50%) var(--cursor-y, 50%),rgba(0,72,144,.07) 0%,rgba(0,72,144,.025) 22%,rgba(0,0,0,0) 60%);mix-blend-mode:multiply}@media (hover: none),(pointer: coarse),(prefers-reduced-motion: reduce){.cursor-spotlight{display:none}}::-webkit-scrollbar{width:10px;height:10px}::-webkit-scrollbar-thumb{background:var(--border-strong);border-radius:8px}::-webkit-scrollbar-track{background:transparent}.mono{font-family:var(--font-mono);font-feature-settings:"tnum";letter-spacing:-.01em}.serif{font-family:var(--font-serif);font-weight:400;letter-spacing:-.01em}.italic{font-style:italic}.app-header{position:sticky;top:0;z-index:50;height:var(--header-h);display:flex;align-items:center;padding:0 var(--s-5);border-bottom:1px solid var(--border);background:color-mix(in oklab,var(--bg-canvas) 78%,transparent);backdrop-filter:saturate(180%) blur(14px);-webkit-backdrop-filter:saturate(180%) blur(14px)}.app-header-inner{width:100%;max-width:var(--maxw);margin:0 auto;display:grid;grid-template-columns:auto 1fr auto;gap:var(--s-5);align-items:center}.brand{font-family:var(--font-serif);font-size:26px;font-weight:500;letter-spacing:-.02em;display:flex;align-items:baseline;gap:var(--s-3);cursor:pointer;color:var(--ink)}.brand .accent{color:var(--color-primary);font-style:italic}.brand .tag{font-family:var(--font-sans);font-size:11px;letter-spacing:.08em;text-transform:uppercase;color:var(--ink-fade);font-weight:500}@media (max-width: 720px){.brand .tag{display:none}}.search-pill{display:flex;align-items:center;gap:var(--s-2);padding:8px 14px;background:var(--bg-sunken);border:1px solid var(--border);border-radius:999px;max-width:380px;margin:0 auto;width:100%;cursor:text;transition:border-color .16s ease,background .16s ease}.search-pill:hover{border-color:var(--border-strong)}.search-pill:focus-within{border-color:var(--color-primary);box-shadow:0 0 0 4px var(--color-primary-ring);background:var(--bg-elevated)}.search-pill input{border:0;outline:0;background:transparent;flex:1;font:inherit;font-size:14px;color:var(--ink);min-width:0}.search-pill input::-moz-placeholder{color:var(--ink-fade)}.search-pill input::placeholder{color:var(--ink-fade)}.search-pill .kbd{font-family:var(--font-mono);font-size:11px;padding:2px 6px;border-radius:4px;background:var(--bg-elevated);border:1px solid var(--border);color:var(--ink-soft)}.header-right{display:flex;align-items:center;gap:var(--s-3)}.icon-btn{width:34px;height:34px;border-radius:999px;display:inline-flex;align-items:center;justify-content:center;border:1px solid var(--border);background:var(--bg-elevated);color:var(--ink-soft);cursor:pointer;transition:color .15s ease,border-color .15s ease,transform .2s ease}.icon-btn:hover{color:var(--ink);border-color:var(--border-strong)}.icon-btn:active{transform:scale(.94)}.lang-toggle{display:inline-flex;border:1px solid var(--border);border-radius:999px;overflow:hidden;background:var(--bg-elevated);font-family:var(--font-mono);font-size:11px;letter-spacing:.06em}.lang-toggle button{border:0;background:transparent;padding:7px 10px;font:inherit;letter-spacing:inherit;color:var(--ink-soft);cursor:pointer;transition:background .15s ease,color .15s ease;text-transform:uppercase}.lang-toggle button.is-active{background:var(--ink);color:var(--bg-canvas)}html[data-theme=dark] .lang-toggle button.is-active{background:var(--color-primary-lifted);color:#06091a}.btn{font:inherit;font-size:13px;font-weight:500;padding:8px 16px;border-radius:var(--r-2);border:1px solid var(--border);background:var(--bg-elevated);color:var(--ink);cursor:pointer;transition:border-color .15s,background .15s,transform .15s,color .15s;display:inline-flex;align-items:center;justify-content:center;gap:var(--s-2);text-decoration:none}.btn:hover{border-color:var(--border-strong)}.btn:active{transform:translateY(1px)}.btn:disabled{opacity:.5;cursor:not-allowed}.btn-primary{background:var(--color-primary);border-color:var(--color-primary);color:#fff}html[data-theme=dark] .btn-primary{color:#06091a}.btn-primary:hover{filter:brightness(1.05);border-color:var(--color-primary)}.btn-ghost{border-color:transparent;background:transparent;color:var(--ink-soft)}.btn-ghost:hover{color:var(--ink);background:var(--bg-sunken)}.btn-block{width:100%}.user-chip{font-family:var(--font-mono);font-size:12px;padding:6px 10px;border-radius:999px;background:var(--color-primary-soft);color:var(--color-primary);display:inline-flex;align-items:center;gap:6px;cursor:pointer;border:0;transition:filter .15s}.user-chip:hover{filter:brightness(1.05)}.page{max-width:var(--maxw);margin:0 auto;padding:var(--s-7) var(--s-5);animation:page-in .28s cubic-bezier(.2,.8,.2,1) both}@keyframes page-in{0%{opacity:0;transform:translateY(8px)}to{opacity:1;transform:translateY(0)}}.hero{min-height:calc(100vh - var(--header-h));display:flex;flex-direction:column;align-items:center;justify-content:center;text-align:center;padding:var(--s-9) var(--s-5) var(--s-7);position:relative;overflow:hidden}.hero-bg{position:absolute;top:0;right:0;bottom:0;left:0;z-index:0;pointer-events:none;background:radial-gradient(60% 40% at 50% 0%,var(--color-primary-soft) 0%,transparent 70%),radial-gradient(40% 30% at 20% 80%,var(--color-primary-soft) 0%,transparent 70%);opacity:.7}.hero-bg:after{content:"";position:absolute;top:0;right:0;bottom:0;left:0;background-image:url("data:image/svg+xml;utf8,<svg xmlns='http://www.w3.org/2000/svg' width='200' height='200'><filter id='n'><feTurbulence type='fractalNoise' baseFrequency='0.9'/><feColorMatrix values='0 0 0 0 0   0 0 0 0 0   0 0 0 0 0   0 0 0 0.04 0'/></filter><rect width='100%25' height='100%25' filter='url(%23n)'/></svg>");opacity:.6}.hero-content{position:relative;z-index:1;max-width:880px}.hero-eyebrow{font-family:var(--font-mono);font-size:11px;letter-spacing:.18em;text-transform:uppercase;color:var(--ink-soft);margin-bottom:var(--s-5);display:inline-flex;align-items:center;gap:var(--s-3)}.hero-eyebrow .dot{width:6px;height:6px;border-radius:999px;background:var(--color-primary);box-shadow:0 0 0 4px var(--color-primary-soft)}.hero h1{font-family:var(--font-serif);font-weight:400;font-size:clamp(44px,7vw,88px);line-height:1.02;letter-spacing:-.025em;margin:0;text-wrap:balance}.hero h1 .ital{font-style:italic;color:var(--color-primary)}.hero-sub{font-family:var(--font-serif);font-style:italic;font-size:clamp(17px,1.6vw,22px);color:var(--ink-soft);margin-top:var(--s-5);text-wrap:balance}.hero-cta{margin-top:var(--s-6);display:inline-flex;gap:var(--s-3)}.line-reveal{display:inline-block;overflow:hidden;vertical-align:bottom}.line-reveal>span{display:inline-block;transform:translateY(110%);animation:line-up .9s cubic-bezier(.2,.8,.2,1) forwards;animation-delay:var(--d, 0ms)}@keyframes line-up{to{transform:translateY(0)}}.hero-fade-in{opacity:0;animation:fade-in .7s ease .8s forwards}@keyframes fade-in{to{opacity:1}}.scroll-indicator{position:absolute;bottom:var(--s-6);left:50%;transform:translate(-50%);font-family:var(--font-mono);font-size:10px;letter-spacing:.18em;text-transform:uppercase;color:var(--ink-fade);display:flex;flex-direction:column;align-items:center;gap:8px;z-index:1}.scroll-indicator:after{content:"";width:1px;height:28px;background:linear-gradient(to bottom,var(--ink-fade),transparent);animation:scroll-pulse 2.4s ease-in-out infinite}@keyframes scroll-pulse{0%{opacity:.2;transform:translateY(-6px)}50%{opacity:1}to{opacity:.2;transform:translateY(6px)}}.stats-strip{border-top:1px solid var(--border);border-bottom:1px solid var(--border);padding:var(--s-6) var(--s-5);display:grid;grid-template-columns:repeat(3,1fr);gap:var(--s-5);max-width:var(--maxw);margin:0 auto}.stats-strip.stats-2{grid-template-columns:repeat(2,max-content);justify-content:center;gap:220px;text-align:center}.stat-num{font-family:var(--font-mono);font-size:clamp(32px,4vw,56px);font-weight:500;letter-spacing:-.03em;color:var(--ink);font-variant-numeric:tabular-nums}.stat-label{font-family:var(--font-sans);font-size:12px;letter-spacing:.12em;text-transform:uppercase;color:var(--ink-fade);margin-top:4px}@media (max-width: 720px){.stats-strip{grid-template-columns:1fr;gap:var(--s-4)}.stats-strip.stats-2{gap:var(--s-5)}}.section-head{display:flex;align-items:end;justify-content:space-between;margin-bottom:var(--s-5);padding-bottom:var(--s-3)}.section-head h2{font-family:var(--font-serif);font-weight:400;font-size:clamp(28px,3.4vw,40px);letter-spacing:-.02em;margin:0}.section-head .subtle{font-family:var(--font-mono);font-size:12px;color:var(--ink-fade);text-transform:uppercase;letter-spacing:.1em}.fac-block{padding:var(--s-7) 0}.fac-head{display:flex;align-items:baseline;gap:var(--s-4);margin-bottom:var(--s-5)}.fac-head .code{font-family:var(--font-mono);font-size:13px;color:var(--color-primary);letter-spacing:.08em}.fac-head .name{font-family:var(--font-serif);font-size:24px;letter-spacing:-.01em}.fac-head .rule{flex:1;height:1px;background:var(--border)}.dep-grid{display:grid;grid-template-columns:repeat(3,1fr);gap:var(--s-5)}@media (max-width: 960px){.dep-grid{grid-template-columns:repeat(2,1fr)}}@media (max-width: 600px){.dep-grid{grid-template-columns:1fr}}.dep-card{background:var(--bg-elevated);border:1px solid var(--border);border-radius:var(--r-3);padding:var(--s-5);cursor:pointer;transition:transform .22s cubic-bezier(.2,.8,.2,1),border-color .22s,box-shadow .22s;position:relative;overflow:hidden;display:flex;flex-direction:column;gap:var(--s-3);min-height:150px;text-decoration:none;color:inherit}.dep-card:hover{transform:translateY(-2px);border-color:var(--color-primary);box-shadow:var(--shadow-2)}.dep-card .top-row{display:flex;justify-content:space-between;align-items:baseline;gap:var(--s-3)}.dep-card .code{font-family:var(--font-mono);font-size:22px;letter-spacing:-.02em;font-weight:500}.dep-card .count{font-family:var(--font-mono);font-size:12px;color:var(--ink-fade)}.dep-card .name{font-family:var(--font-serif);font-size:19px;line-height:1.25;letter-spacing:-.01em}.dep-card .preview{margin-top:auto;font-family:var(--font-serif);font-style:italic;font-size:13px;color:var(--ink-fade);border-top:1px dashed var(--border);padding-top:var(--s-3);opacity:0;transform:translateY(4px);transition:opacity .22s ease .12s,transform .22s ease .12s,color .22s;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.dep-card:hover .preview{opacity:1;transform:translateY(0);color:var(--ink-soft)}.reveal{opacity:0;transform:translateY(12px);filter:blur(4px);transition:opacity .6s cubic-bezier(.2,.8,.2,1),transform .6s cubic-bezier(.2,.8,.2,1),filter .5s ease}.reveal.is-in{opacity:1;transform:translateY(0);filter:blur(0)}.recent-grid{display:grid;grid-template-columns:repeat(2,1fr);gap:var(--s-4)}@media (max-width: 720px){.recent-grid{grid-template-columns:1fr}}.entry-card{background:var(--bg-elevated);border:1px solid var(--border);border-radius:var(--r-3);padding:var(--s-5);display:grid;grid-template-columns:56px 1fr;gap:var(--s-4);transition:transform .22s,box-shadow .22s,border-color .22s}.entry-card:hover{transform:scale(1.005);box-shadow:var(--shadow-2);border-color:var(--border-strong)}.vote-col{display:flex;flex-direction:column;align-items:center;gap:2px;padding-top:2px}.vote-btn{background:transparent;border:0;cursor:pointer;padding:4px;width:28px;height:24px;display:flex;align-items:center;justify-content:center;border-radius:6px;color:var(--ink-fade);transition:color .15s,background .15s,transform .2s}.vote-btn:hover{color:var(--ink);background:var(--bg-sunken)}.vote-btn.is-up.is-active{color:var(--vote-up)}.vote-btn.is-down.is-active{color:var(--vote-down);filter:contrast(1.2)}.vote-btn.is-bumped{animation:bump .24s ease}@keyframes bump{40%{transform:scale(1.18)}to{transform:scale(1)}}.vote-score{font-family:var(--font-mono);font-size:14px;font-variant-numeric:tabular-nums;font-weight:500;color:var(--ink);position:relative;height:18px;overflow:hidden;text-align:center;width:32px}.vote-score .num{display:block;transition:transform .28s cubic-bezier(.2,.8,.2,1)}.vote-score.flip-up .num{animation:flip-up .28s cubic-bezier(.2,.8,.2,1)}.vote-score.flip-down .num{animation:flip-down .28s cubic-bezier(.2,.8,.2,1)}@keyframes flip-up{0%{transform:translateY(80%);opacity:0}to{transform:translateY(0);opacity:1}}@keyframes flip-down{0%{transform:translateY(-80%);opacity:0}to{transform:translateY(0);opacity:1}}.entry-body{display:flex;flex-direction:column;gap:var(--s-3);min-width:0}.entry-meta{display:flex;align-items:center;gap:var(--s-3);flex-wrap:wrap;font-family:var(--font-mono);font-size:11px;color:var(--ink-fade)}.entry-meta .course-chip{font-family:var(--font-mono);font-size:11px;padding:3px 8px;border-radius:4px;background:var(--color-primary-soft);color:var(--color-primary);letter-spacing:.02em;cursor:pointer}.entry-meta .author{color:var(--ink-soft);cursor:pointer}.entry-meta .author:hover{color:var(--ink)}.entry-text{font-family:var(--font-serif);font-size:16px;line-height:1.55;color:var(--ink);letter-spacing:-.005em;text-wrap:pretty;white-space:pre-wrap;word-break:break-word}.dept-header{display:grid;grid-template-columns:1fr auto;align-items:end;gap:var(--s-5);padding:var(--s-7) 0 var(--s-5);border-bottom:1px solid var(--border);margin-bottom:var(--s-6)}.dept-back{font-family:var(--font-mono);font-size:12px;color:var(--ink-soft);letter-spacing:.04em;margin-bottom:var(--s-3);display:inline-block;cursor:pointer}.dept-back:hover{color:var(--ink)}.dept-header .code{font-family:var(--font-mono);font-size:clamp(54px,8vw,96px);font-weight:500;letter-spacing:-.04em;line-height:1;color:var(--ink)}.dept-header .name{font-family:var(--font-serif);font-size:clamp(24px,3vw,32px);letter-spacing:-.02em;margin-top:var(--s-3);color:var(--ink)}.dept-header .meta{font-family:var(--font-mono);font-size:12px;color:var(--ink-soft);margin-top:var(--s-2);letter-spacing:.04em}.dept-body{display:grid;grid-template-columns:240px 1fr;gap:var(--s-7);padding-bottom:var(--s-9)}@media (max-width: 900px){.dept-body{grid-template-columns:1fr;gap:var(--s-5)}}.filter-card{position:sticky;top:calc(var(--header-h) + var(--s-5));align-self:start;display:flex;flex-direction:column;gap:var(--s-5)}.filter-group label{display:block;font-family:var(--font-mono);font-size:11px;letter-spacing:.1em;text-transform:uppercase;color:var(--ink-fade);margin-bottom:8px}.filter-group select{width:100%;font:inherit;font-size:13px;background:var(--bg-elevated);color:var(--ink);border:1px solid var(--border);border-radius:var(--r-2);padding:9px 12px;cursor:pointer;transition:border-color .15s}.filter-group select:hover{border-color:var(--border-strong)}.filter-group select:focus{outline:none;border-color:var(--color-primary);box-shadow:0 0 0 4px var(--color-primary-ring)}.course-grid{display:grid;grid-template-columns:repeat(2,1fr);gap:var(--s-4)}@media (max-width: 760px){.course-grid{grid-template-columns:1fr}}.course-card{background:var(--bg-elevated);border:1px solid var(--border);border-radius:var(--r-3);padding:var(--s-5);cursor:pointer;display:flex;flex-direction:column;gap:var(--s-3);transition:transform .24s cubic-bezier(.2,.8,.2,1),border-color .22s,box-shadow .22s;position:relative;min-height:168px;text-decoration:none;color:inherit}.course-card:hover{border-color:var(--color-primary);box-shadow:var(--shadow-2)}.course-card .top{display:flex;justify-content:space-between;align-items:baseline;gap:var(--s-3)}.course-card .code{font-family:var(--font-mono);font-size:18px;letter-spacing:-.01em;font-weight:500}.course-card .level{font-family:var(--font-mono);font-size:11px;color:var(--ink-fade);padding:2px 8px;background:var(--bg-sunken);border-radius:999px}.course-card .name{font-family:var(--font-serif);font-size:18px;line-height:1.3;letter-spacing:-.01em}.course-card .profs{display:flex;flex-wrap:wrap;gap:6px;margin-top:auto;transition:opacity .18s}.course-card .prof{font-family:var(--font-mono);font-size:11px;color:var(--ink-soft);padding:3px 8px;border:1px solid var(--border);border-radius:999px}.course-card .preview{position:absolute;inset:auto var(--s-5) var(--s-5);font-family:var(--font-serif);font-style:italic;font-size:13px;color:var(--ink-soft);background:var(--bg-elevated);padding-top:var(--s-3);border-top:1px dashed var(--border);opacity:0;transform:translateY(4px);transition:opacity .22s ease .15s,transform .22s ease .15s;display:-webkit-box;-webkit-line-clamp:2;-webkit-box-orient:vertical;overflow:hidden}.course-card:hover .preview{opacity:1;transform:translateY(0)}.course-card:hover .profs{opacity:0}.course-card.is-entering{animation:card-enter .32s cubic-bezier(.2,.8,.2,1) both}@keyframes card-enter{0%{opacity:0;transform:translateY(8px) scale(.98)}to{opacity:1;transform:translateY(0) scale(1)}}.course-header-wrap{border-bottom:1px solid var(--border);padding-bottom:var(--s-6);margin-bottom:var(--s-7)}.course-header-wrap .crumbs{font-family:var(--font-mono);font-size:12px;color:var(--ink-soft);margin-bottom:var(--s-4);letter-spacing:.04em}.course-header-wrap .crumbs a{cursor:pointer}.course-header-wrap .crumbs a:hover{color:var(--ink)}.course-header-wrap .code{font-family:var(--font-mono);font-size:clamp(40px,6vw,72px);font-weight:500;letter-spacing:-.04em;color:var(--color-primary);line-height:1;margin-bottom:var(--s-4)}.course-header-wrap .title{font-family:var(--font-serif);font-weight:400;font-size:clamp(28px,4vw,44px);letter-spacing:-.02em;line-height:1.1;margin:0 0 var(--s-5);text-wrap:balance}.chip-row{display:flex;flex-wrap:wrap;gap:var(--s-2);margin-bottom:var(--s-4)}.chip{font-family:var(--font-mono);font-size:11px;letter-spacing:.05em;padding:4px 10px;border-radius:999px;background:var(--bg-sunken);color:var(--ink-soft);border:1px solid var(--border)}.chip.primary{background:var(--color-primary-soft);color:var(--color-primary);border-color:transparent}.chip.link{cursor:pointer;text-decoration:none}.chip.link:hover{background:var(--color-primary);color:#fff}html[data-theme=dark] .chip.link:hover{color:#06091a}.profs-line{display:flex;flex-wrap:wrap;gap:var(--s-2);margin-top:var(--s-3);font-family:var(--font-mono);font-size:12px;color:var(--ink-soft);letter-spacing:.02em}.sticky-mini{position:sticky;top:var(--header-h);z-index:30;background:color-mix(in oklab,var(--bg-canvas) 86%,transparent);-webkit-backdrop-filter:blur(12px);backdrop-filter:blur(12px);border-bottom:1px solid var(--border);padding:10px var(--s-5);display:flex;align-items:center;gap:var(--s-3);font-size:13px;margin:0 calc(-1 * var(--s-5)) var(--s-5);opacity:0;transform:translateY(-8px);pointer-events:none;transition:opacity .2s ease,transform .2s ease}.sticky-mini.is-on{opacity:1;transform:translateY(0);pointer-events:auto}.sticky-mini .code{font-family:var(--font-mono);font-weight:500;color:var(--color-primary)}.sticky-mini .title{font-family:var(--font-serif);color:var(--ink)}.course-body{display:grid;grid-template-columns:minmax(360px,1fr) 1fr;gap:var(--s-6);padding-bottom:var(--s-9)}@media (max-width: 1000px){.course-body{grid-template-columns:1fr}}.card-block{background:var(--bg-elevated);border:1px solid var(--border);border-radius:var(--r-3);padding:var(--s-5);overflow-x:auto}.card-block .h{font-family:var(--font-mono);font-size:11px;letter-spacing:.12em;text-transform:uppercase;color:var(--ink-fade);margin:0 0 var(--s-4)}.schedule{display:grid;grid-template-columns:60px repeat(5,1fr);gap:4px;font-family:var(--font-mono);font-size:10px}.schedule .col-head{text-align:center;color:var(--ink-fade);letter-spacing:.1em;text-transform:uppercase;padding:4px 0;font-size:10px}.schedule .row-time{color:var(--ink-fade);font-size:10px;text-align:right;padding-right:8px;align-self:center;letter-spacing:.02em}.schedule .cell{border:1px solid var(--border);border-radius:4px;min-height:26px;background:var(--bg-sunken);position:relative;transition:background .16s}.schedule .cell.filled{background:color-mix(in oklab,var(--color-primary) 18%,transparent);border-color:color-mix(in oklab,var(--color-primary) 30%,transparent);color:var(--color-primary);font-size:10px;display:flex;align-items:center;justify-content:center;font-weight:500;cursor:pointer}.schedule .cell.filled:hover{background:color-mix(in oklab,var(--color-primary) 30%,transparent)}.sections-table{width:100%;border-collapse:collapse;font-size:13px}.sections-table th{text-align:left;font-family:var(--font-mono);font-size:10px;text-transform:uppercase;letter-spacing:.12em;color:var(--ink-fade);font-weight:500;padding:8px 8px 8px 0;border-bottom:1px solid var(--border)}.sections-table td{padding:12px 8px 12px 0;border-bottom:1px solid var(--border);vertical-align:top}.sections-table tr:last-child td{border-bottom:0}.sections-table .crn{font-family:var(--font-mono);color:var(--color-primary);font-weight:500}.sections-table .grp{font-family:var(--font-mono);color:var(--ink-soft)}.sections-table .typ{font-family:var(--font-mono);font-size:10px;padding:2px 6px;border-radius:4px;background:var(--bg-sunken);color:var(--ink-soft);letter-spacing:.06em}.sections-table .prof{font-family:var(--font-sans);font-size:13px}.sections-table .sched{font-family:var(--font-mono);font-size:11px;color:var(--ink-soft)}.entries-block{margin-top:var(--s-7)}.entries-block h2{font-family:var(--font-serif);font-weight:400;font-size:32px;letter-spacing:-.02em;margin:0 0 var(--s-5)}.entries-block h2 .count{font-family:var(--font-mono);font-size:16px;color:var(--ink-fade);margin-left:var(--s-2)}.composer{background:var(--bg-elevated);border:1px solid var(--border);border-radius:var(--r-3);padding:var(--s-4);margin-bottom:var(--s-5);transition:border-color .2s,box-shadow .2s}.composer:focus-within{border-color:var(--color-primary);box-shadow:0 0 0 4px var(--color-primary-ring)}.composer textarea{width:100%;border:0;outline:0;resize:vertical;background:transparent;color:var(--ink);font:inherit;font-family:var(--font-serif);font-size:16px;line-height:1.5;min-height:84px}.composer textarea::-moz-placeholder{color:var(--ink-fade);font-style:italic}.composer textarea::placeholder{color:var(--ink-fade);font-style:italic}.composer-foot{display:flex;justify-content:space-between;align-items:center;margin-top:var(--s-3);padding-top:var(--s-3);border-top:1px solid var(--border)}.composer-foot .charc{font-family:var(--font-mono);font-size:11px;color:var(--ink-fade)}.composer.locked{display:flex;align-items:center;justify-content:space-between;gap:var(--s-3);padding:var(--s-4)}.composer.locked .msg{font-family:var(--font-serif);font-style:italic;color:var(--ink-soft)}.entry-list{display:flex;flex-direction:column;gap:var(--s-3)}.entry-list .entry-card.is-fresh{animation:fresh-in .5s cubic-bezier(.2,.8,.2,1) both}@keyframes fresh-in{0%{opacity:0;transform:translateY(-12px)}to{opacity:1;transform:translateY(0)}}.search-hero{padding:var(--s-7) 0 var(--s-5);border-bottom:1px solid var(--border);margin-bottom:var(--s-6)}.search-hero h1{font-family:var(--font-serif);font-weight:400;font-size:clamp(28px,4vw,44px);letter-spacing:-.02em;margin:0 0 var(--s-3)}.search-hero .meta{font-family:var(--font-mono);font-size:12px;color:var(--ink-soft)}.search-hero .meta .q{color:var(--color-primary)}.search-big{display:flex;align-items:center;gap:var(--s-3);padding:var(--s-4) var(--s-5);background:var(--bg-elevated);border:1px solid var(--border);border-radius:var(--r-3);margin-top:var(--s-5);transition:box-shadow .2s,border-color .2s}.search-big:focus-within{border-color:var(--color-primary);box-shadow:0 0 0 4px var(--color-primary-ring)}.search-big input{flex:1;background:transparent;border:0;outline:0;font:inherit;font-family:var(--font-serif);font-size:22px;color:var(--ink);min-width:0}.search-big input::-moz-placeholder{color:var(--ink-fade)}.search-big input::placeholder{color:var(--ink-fade)}.login-wrap{max-width:460px;margin:var(--s-9) auto;text-align:center}.login-wrap h1{font-family:var(--font-serif);font-weight:400;font-size:clamp(40px,5vw,56px);letter-spacing:-.02em;margin:0 0 var(--s-3)}.login-wrap .sub{font-family:var(--font-serif);font-style:italic;color:var(--ink-soft);margin-bottom:var(--s-6)}.login-card{background:var(--bg-elevated);border:1px solid var(--border);border-radius:var(--r-3);padding:var(--s-6);text-align:left;display:flex;flex-direction:column;gap:var(--s-4)}.login-card label{font-family:var(--font-mono);font-size:11px;letter-spacing:.12em;text-transform:uppercase;color:var(--ink-fade);display:block;margin-bottom:var(--s-2)}.login-card input{width:100%;padding:12px 14px;border:1px solid var(--border);border-radius:var(--r-2);background:var(--bg-canvas);color:var(--ink);font:inherit;font-family:var(--font-mono);font-size:15px;transition:border-color .2s,box-shadow .2s}.login-card input:focus{outline:0;border-color:var(--color-primary);box-shadow:0 0 0 4px var(--color-primary-ring)}.login-card input.success{border-color:var(--color-primary);animation:success-pulse .7s ease}@keyframes success-pulse{0%{box-shadow:0 0 0 0 var(--color-primary-ring)}60%{box-shadow:0 0 0 12px transparent}to{box-shadow:0 0 0 0 transparent}}.tabs{display:inline-flex;background:var(--bg-sunken);border:1px solid var(--border);border-radius:999px;padding:4px;gap:2px;margin-bottom:var(--s-5)}.tabs button{font:inherit;font-size:12px;font-family:var(--font-mono);letter-spacing:.06em;text-transform:uppercase;padding:6px 14px;border:0;border-radius:999px;background:transparent;color:var(--ink-soft);cursor:pointer;transition:background .15s,color .15s}.tabs button.is-active{background:var(--ink);color:var(--bg-canvas)}html[data-theme=dark] .tabs button.is-active{background:var(--color-primary-lifted);color:#06091a}.alert{font-size:13px;padding:10px 12px;border-radius:var(--r-2);border:1px solid var(--border);background:var(--bg-sunken);color:var(--ink-soft);line-height:1.5}.alert .ti{font-weight:600;color:var(--ink);display:block;margin-bottom:2px;font-family:var(--font-sans)}.alert.error{background:color-mix(in oklab,#d2334a 12%,transparent);border-color:color-mix(in oklab,#d2334a 30%,transparent);color:#d2334a}.alert.warn{background:color-mix(in oklab,#c98512 14%,transparent);border-color:color-mix(in oklab,#c98512 32%,transparent);color:#c98512}.alert.success{background:color-mix(in oklab,var(--color-primary) 12%,transparent);border-color:color-mix(in oklab,var(--color-primary) 30%,transparent);color:var(--color-primary)}.hint{font-family:var(--font-mono);font-size:11px;color:var(--ink-fade);letter-spacing:.02em}.hint a{color:var(--color-primary);cursor:pointer}.hint a:hover{filter:brightness(1.1)}.profile-head,.about-head,.nf-wrap{text-align:left;margin:var(--s-7) 0 var(--s-6)}.profile-head h1{font-family:var(--font-serif);font-weight:400;font-size:clamp(40px,5vw,56px);letter-spacing:-.02em;margin:0}.profile-head .meta{font-family:var(--font-mono);font-size:12px;color:var(--ink-soft);margin-top:var(--s-2)}.about-head h1{font-family:var(--font-serif);font-weight:400;font-size:clamp(40px,5vw,64px);letter-spacing:-.02em;margin:0 0 var(--s-5)}.about-body{max-width:640px;font-family:var(--font-serif);font-size:19px;line-height:1.65;color:var(--ink);text-wrap:pretty}.about-body p{margin-bottom:var(--s-5)}.about-body .credit{font-style:italic;color:var(--ink-soft);border-left:2px solid var(--color-primary);padding-left:var(--s-4);font-size:16px}.about-body h2{font-family:var(--font-mono);font-size:12px;letter-spacing:.14em;text-transform:uppercase;color:var(--ink-fade);margin:var(--s-7) 0 var(--s-3);font-weight:500}.nf-wrap{text-align:center;padding:var(--s-9) 0}.nf-wrap h1{font-family:var(--font-serif);font-weight:400;font-size:clamp(48px,6vw,80px);letter-spacing:-.02em;margin:0 0 var(--s-5)}.nf-wrap .num{font-family:var(--font-mono);font-size:14px;color:var(--color-primary);letter-spacing:.2em;margin-bottom:var(--s-4)}.empty{text-align:center;padding:var(--s-9) var(--s-5);font-family:var(--font-serif);font-style:italic;font-size:18px;color:var(--ink-soft)}.settings-section{margin-bottom:var(--s-7)}.settings-section .section-label{font-family:var(--font-mono);font-size:11px;letter-spacing:.14em;text-transform:uppercase;color:var(--ink-fade);margin:0 0 var(--s-4);font-weight:500}.settings-section .row{display:grid;grid-template-columns:140px 1fr;gap:var(--s-4);padding:var(--s-3) 0;border-top:1px solid var(--border);font-size:14px;align-items:baseline}.settings-section .row:last-child{border-bottom:1px solid var(--border)}.settings-section .row .k{font-family:var(--font-mono);font-size:11px;text-transform:uppercase;letter-spacing:.1em;color:var(--ink-fade)}.settings-section .row .v{color:var(--ink);font-family:var(--font-mono);font-size:13px}.settings-section .row .v.username{color:var(--color-primary);cursor:pointer}.app-footer{border-top:1px solid var(--border);padding:var(--s-6) var(--s-5);margin-top:var(--s-9);font-family:var(--font-mono);font-size:11px;letter-spacing:.04em;color:var(--ink-fade)}.app-footer-inner{max-width:var(--maxw);margin:0 auto;display:flex;justify-content:space-between;flex-wrap:wrap;gap:var(--s-3)}.app-footer a{cursor:pointer}.app-footer a:hover{color:var(--ink)}@media (prefers-reduced-motion: reduce){*,*:before,*:after{animation-duration:.01ms!important;transition-duration:.01ms!important}}
