:root{color-scheme:light dark;--bg: light-dark(#f6f8fd, #15171d);--glow: light-dark(#e6edff, #1c2440);--bg-glass: light-dark(rgba(255,255,255,.86), rgba(29,31,38,.86));--fg: light-dark(#1c1c1e, #ececf0);--fg2: light-dark(#3a3a3c, #c9c9d0);--muted: light-dark(#6e6e73, #9a9aa3);--muted2: light-dark(#8e8e93, #80808a);--faint: light-dark(#a1a1a6, #62626b);--border: light-dark(#e1e5ee, #2a2d36);--border2: light-dark(#d6dbe7, #33363f);--border3: light-dark(#c3c9d6, #444852);--hair: light-dark(#e8ebf3, #23262e);--panel: light-dark(#fff, #1d1f26);--soft: light-dark(#edf0f7, #262932);--soft2: light-dark(#f0f3f9, #22252d);--hover: light-dark(#e6eaf3, #2c2f39);--nav: light-dark(#f1f3f9, #191b21);--link: light-dark(#0a58ca, #7fb0ff);--accent-bg: light-dark(#e4ecfb, #1f2c47);--accent: light-dark(#0a3d91, #a9c4ff);--mark: light-dark(#fff3b0, #5a4a00);--focus: light-dark(#8fb0f0, #3b5a8a);--ok-bg: light-dark(#e6f4ea, #16301f);--ok: light-dark(#1f6f3d, #8fd3a3);--warn-bg: light-dark(#fdf1d6, #3a2a10);--warn: light-dark(#8a5a00, #e6b86a);--bad-bg: light-dark(#fbe3e8, #3a1a24);--bad: light-dark(#a03050, #f0a0b3);--violet-bg: light-dark(#eee7fb, #2a2040);--violet: light-dark(#5e3ea8, #c4aef5);--bar-s: light-dark(#4c9a63, #3f8a58);--bar-h: light-dark(#d1a24a, #b98b3a);--bar-m: light-dark(#c46a84, #a8506a);--bar-u: light-dark(#d8dbe4, #3a3d47)}:root[data-theme=light]{color-scheme:light}:root[data-theme=dark]{color-scheme:dark}:root[data-palette=sage]{--bg: light-dark(#f5f9f6, #131914);--glow: light-dark(#e4f1e6, #162c1b);--bg-glass: light-dark(rgba(255,255,255,.86), rgba(27,33,28,.86));--border: light-dark(#dfe8e1, #273029);--border2: light-dark(#d4dfd5, #313932);--border3: light-dark(#c1cdc2, #424b43);--hair: light-dark(#e6ede7, #212822);--panel: light-dark(#fff, #1b211c);--soft: light-dark(#ecf2ed, #232c25);--soft2: light-dark(#eff5f0, #202721);--hover: light-dark(#e4ede6, #29322b);--nav: light-dark(#eff5f0, #171d18);--link: light-dark(#22714b, #8dbda0);--accent-bg: light-dark(#e6eee9, #213127);--accent: light-dark(#165034, #adceb9);--focus: light-dark(#95bba4, #446250)}:root[data-palette=lavender]{--bg: light-dark(#f8f7fc, #17161c);--glow: light-dark(#eeebfb, #28213b);--bg-glass: light-dark(rgba(255,255,255,.86), rgba(32,30,37,.86));--border: light-dark(#e5e3ed, #2e2c35);--border2: light-dark(#dcd9e6, #37353e);--border3: light-dark(#c9c7d5, #494651);--hair: light-dark(#ebeaf2, #27252d);--panel: light-dark(#fff, #201e25);--soft: light-dark(#f0eff6, #2a2831);--soft2: light-dark(#f3f2f8, #26242c);--hover: light-dark(#eae8f2, #302e38);--nav: light-dark(#f3f2f8, #1b1a20);--link: light-dark(#6a47b1, #b4a2ec);--accent-bg: light-dark(#ece9f7, #2e2841);--accent: light-dark(#4a317f, #c7bbf1);--focus: light-dark(#b4a6e1, #5d517f)}:root[data-palette=sand]{--bg: light-dark(#fbf8f2, #1a1711);--glow: light-dark(#f8ebdd, #302314);--bg-glass: light-dark(rgba(255,255,255,.86), rgba(35,31,24,.86));--border: light-dark(#ebe4d9, #322c24);--border2: light-dark(#e3dacc, #3b362d);--border3: light-dark(#d1c8b8, #4d473e);--hair: light-dark(#f0eae1, #2a251e);--panel: light-dark(#fff, #231f18);--soft: light-dark(#f4efe7, #2e2820);--soft2: light-dark(#f7f2eb, #29241d);--hover: light-dark(#f0e9de, #342f25);--nav: light-dark(#f7f3ec, #1e1b15);--link: light-dark(#9a431e, #dd9e86);--accent-bg: light-dark(#f5e9e4, #3c271f);--accent: light-dark(#6d2e13, #e7b9a7);--focus: light-dark(#d5a390, #754f40)}:root[data-palette=slate]{--bg: light-dark(#f6f8f9, #151819);--glow: light-dark(#e5eff2, #18292d);--bg-glass: light-dark(rgba(255,255,255,.86), rgba(29,32,33,.86));--border: light-dark(#e2e6e7, #2a2e2f);--border2: light-dark(#d7dcde, #333738);--border3: light-dark(#c4cacc, #45494a);--hair: light-dark(#e8eced, #232728);--panel: light-dark(#fff, #1d2021);--soft: light-dark(#eef1f2, #262a2b);--soft2: light-dark(#f1f3f4, #222627);--hover: light-dark(#e7ebec, #2c3032);--nav: light-dark(#f1f4f4, #191c1d);--link: light-dark(#086e77, #79bdc4);--accent-bg: light-dark(#e3eeef, #1a3134);--accent: light-dark(#004e55, #a0ced4);--focus: light-dark(#87bbc1, #386266)}*{box-sizing:border-box}body{margin:0;font:15px/1.6 -apple-system,system-ui,Helvetica,Arial,sans-serif;color:var(--fg);background:var(--bg)}body:before{content:"";position:fixed;top:0;right:0;bottom:0;left:0;z-index:-1;pointer-events:none;background:radial-gradient(1100px 420px at 18% -12%,var(--glow) 0%,transparent 72%)}a{color:var(--link)}button{font:inherit}.topbar{position:sticky;top:0;z-index:20;display:flex;align-items:center;gap:12px;height:48px;padding:0 14px;background:var(--bg-glass);-webkit-backdrop-filter:blur(8px);backdrop-filter:blur(8px);border-bottom:1px solid var(--hair)}.menu{border:0;background:none;font-size:18px;line-height:1;padding:6px 8px;border-radius:8px;cursor:pointer;color:var(--fg2)}.menu:hover,.menu.on{background:var(--soft)}.crumbs{flex:1;min-width:0;font-size:14px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.crumbs a{color:var(--fg2);text-decoration:none}.crumbs a:hover{text-decoration:underline}.crumbs .sep{color:var(--faint);margin:0 6px}.crumbs .here{font-weight:600}.crumbs .tone{background:var(--tint);color:var(--ink);padding:1px 9px;border-radius:999px;font-weight:600;font-size:12.5px}.crumbs a.tone:hover{text-decoration:none;filter:brightness(.97)}.search{margin-left:auto;display:flex;align-items:center}.search input{-webkit-appearance:none;-moz-appearance:none;appearance:none;width:330px;max-width:48vw;height:32px;margin:0;padding:0 14px;border:1px solid var(--border2);border-radius:999px;font:inherit;font-size:14px;line-height:30px;color:var(--fg);background:var(--soft2);outline:none}.search input:focus{border-color:var(--focus);background:var(--panel)}.search input::placeholder{color:var(--muted2)}.search input::-webkit-search-decoration,.search input::-webkit-search-results-button{-webkit-appearance:none;display:none}.search input::-webkit-search-cancel-button{-webkit-appearance:none;height:14px;width:14px;margin-left:4px;cursor:pointer;background:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 14 14'%3E%3Ccircle cx='7' cy='7' r='7' fill='%23c7c7cc'/%3E%3Cpath d='M4.5 4.5l5 5m0-5l-5 5' stroke='%23fff' stroke-width='1.6' stroke-linecap='round'/%3E%3C/svg%3E") center/contain no-repeat}@media (max-width: 640px){.topbar{gap:8px}.search input{width:150px}}.edge{position:fixed;left:0;top:0;bottom:0;width:14px;z-index:40}nav{position:fixed;left:0;top:0;bottom:0;width:260px;z-index:41;padding:14px 10px 30px;overflow:auto;font-size:13.5px;background:var(--nav);border-right:1px solid var(--border);box-shadow:4px 0 18px #0000000f;transform:translate(-100%);transition:transform .22s cubic-bezier(.2,.7,.2,1),visibility 0s .22s;visibility:hidden}nav.pinned{transform:none;visibility:visible;transition-delay:0s}@media (hover: hover){.edge:hover~nav,nav:hover{transform:none;visibility:visible;transition-delay:0s}}.wrap{padding-left:0;transition:padding-left .22s cubic-bezier(.2,.7,.2,1)}.wrap.pinned{padding-left:260px}nav a{display:block;padding:3px 8px;border-radius:6px;color:var(--fg);text-decoration:none;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}nav a:hover{background:var(--hover)}nav a.cur{background:var(--accent-bg);color:var(--accent);font-weight:600}nav .nav-head{display:flex;align-items:center;gap:8px;margin-bottom:6px}nav a.home{display:flex;align-items:center;gap:8px;flex:1;min-width:0;font-weight:700;font-size:15px}.theme-toggle{display:inline-flex;flex:none;margin-left:auto;height:26px;border:1px solid var(--border2);border-radius:8px;overflow:hidden;background:var(--panel)}.theme-toggle button{border:0;border-right:1px solid var(--border);background:none;min-width:26px;padding:0 7px;font-size:12.5px;line-height:24px;color:var(--muted);cursor:pointer}.theme-toggle button:last-child{border-right:0}.theme-toggle button:hover{background:var(--soft2);color:var(--fg)}.theme-toggle button.on{background:var(--accent-bg);color:var(--accent)}.theme-toggle button:focus-visible{outline-offset:-2px;border-radius:6px}nav section{margin-top:10px}nav h3{margin:0 0 1px;font-size:11px;letter-spacing:.06em;text-transform:uppercase}nav h3>*{display:flex;align-items:center;gap:7px;color:var(--muted);padding:2px 8px}nav h3 .pct{margin-left:auto;font-size:10.5px;font-weight:600;color:var(--muted2);letter-spacing:0}nav section.course h3 a:before{content:"";width:7px;height:7px;border-radius:50%;background:var(--ink);opacity:.55;flex:none}nav section>a{padding-left:22px}nav .lec{margin-left:24px;border-left:2px solid var(--line, var(--border));padding-left:2px}nav .lec a{padding-left:8px;font-size:12.5px;color:var(--fg2)}nav section.course a.cur{background:var(--tint);color:var(--ink)}nav .built{margin:18px 8px 0;font-size:11px;color:var(--faint)}@media (max-width: 640px){.wrap.pinned{padding-left:0}nav{top:48px}}@media (prefers-reduced-motion: reduce){.wrap,nav{transition:none}}main{max-width:800px;margin:0 auto;padding:22px 28px 90px}[id^=sec-],.toolbar{scroll-margin-top:60px}h1{font-size:24px;margin:.2em 0 .7em}h1.brand{display:flex;align-items:center;gap:10px}h2{font-size:18px;margin:1.5em 0 .5em;padding-bottom:.2em;border-bottom:1px solid var(--hair)}h3{font-size:15.5px;margin:1.2em 0 .4em}.section-title{margin-top:1.8em}.muted{color:var(--muted2)}.light{font-weight:400;font-size:.8em}.small{font-size:13px}.ink{color:var(--ink)}.updated{margin-top:28px}@media (max-width: 640px){main{padding:16px 16px 70px}}article{max-width:800px;overflow-wrap:break-word}article p{margin:.8em 0}article ul,article ol{margin:.5em 0;padding-left:1.5em}article li{margin:.35em 0}article li li{margin:.2em 0}article li>p{margin:.2em 0}article table{border-collapse:collapse;margin:.8em 0;font-size:14px;display:block;overflow-x:auto;max-width:100%}article th,article td{border:1px solid var(--border2);padding:6px 10px;text-align:left;vertical-align:top}article th{background:var(--soft2)}article code{background:var(--soft);padding:1px 5px;border-radius:4px;font-size:.9em;overflow-wrap:anywhere}article pre{background:var(--soft2);padding:12px;border-radius:8px;overflow:auto}article pre code{background:none;padding:0}article blockquote{margin:.8em 0;padding:.3em 1em;border-left:3px solid var(--border3);color:var(--fg2);background:var(--panel)}article hr{border:0;border-top:1px solid var(--hair);margin:1.6em 0}article input[type=checkbox]{margin-right:6px}details{border:1px solid var(--border);border-radius:10px;padding:8px 14px;margin:14px 0;background:var(--panel)}summary{cursor:pointer;font-weight:600;color:var(--fg2)}details[open] summary{margin-bottom:6px}.panel{border:1px solid var(--border);border-radius:12px;padding:10px 16px;margin:0 0 18px;background:var(--panel)}.panel-head{display:flex;justify-content:space-between;font-size:12px;text-transform:uppercase;letter-spacing:.05em;color:var(--muted);margin-bottom:4px}.panel-head a{text-transform:none;letter-spacing:0}.panel-head .sub{text-transform:none;letter-spacing:0;color:var(--muted);font-weight:400}.panel p{margin:.3em 0}.grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(220px,1fr));gap:12px;margin:6px 0 22px}.list{display:flex;flex-direction:column;gap:10px}.card{display:block;border:1px solid var(--border);border-radius:12px;padding:13px 16px;text-decoration:none;color:inherit;background:var(--panel)}.card:hover{border-color:var(--focus);background:var(--soft2)}.card .code{font-weight:700;font-size:15px}.card .name{font-weight:500}.card .sub{color:var(--muted);font-size:13px;margin-top:2px}.card.course{background:var(--tint);border-color:var(--line)}.card.course .code{color:var(--ink)}.card.course:hover{border-color:var(--ink);box-shadow:0 1px 8px #0000000d}.card.lecture{border-left:3px solid var(--line)}.card.lecture:hover{background:var(--tint);border-color:var(--line)}.card.hit .snippet{font-size:13.5px;color:var(--fg2);margin-top:4px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}mark{background:var(--mark);padding:0 2px;border-radius:3px}.row{display:flex;flex-wrap:wrap;gap:8px;align-items:center;margin:8px 0}.btn{display:inline-block;padding:6px 13px;border:1px solid var(--border2);border-radius:999px;font-size:13.5px;text-decoration:none;color:var(--fg);background:var(--panel);cursor:pointer}.btn:hover{background:var(--soft);border-color:var(--border3)}.btn.on{background:var(--accent-bg);color:var(--accent);border-color:transparent}.link{border:0;background:none;color:var(--link);padding:0 4px;cursor:pointer;font-size:13px}.chip{display:inline-block;font-size:11.5px;padding:2px 9px;border-radius:999px;background:var(--soft);color:var(--fg2);border:0;cursor:default}a.chip{text-decoration:none}a.chip,button.chip{cursor:pointer}a .chip{cursor:inherit}a.chip:hover,button.chip:hover{background:var(--hover)}a.chip.tone:hover,button.chip.tone:hover{background:var(--tint);box-shadow:inset 0 0 0 1px var(--ink)}.chip.on{background:var(--accent-bg);color:var(--accent)}.chip.tone{background:var(--tint);color:var(--ink);border:1px solid var(--line)}.chip.type-apply{background:var(--ok-bg);color:var(--ok)}.chip.type-derive{background:var(--warn-bg);color:var(--warn)}.chip.type-critique{background:var(--violet-bg);color:var(--violet)}.chip.type-recall{background:var(--soft);color:var(--fg2)}.g{display:inline-block;min-width:20px;text-align:center;font-size:11px;font-weight:700;padding:1px 6px;border-radius:999px;line-height:1.5}.g-O{background:var(--ok-bg);color:var(--ok)}.g-shaky{background:var(--warn-bg);color:var(--warn)}.g-X{background:var(--bad-bg);color:var(--bad)}.g-none{background:var(--soft);color:var(--faint)}.stat{margin-top:8px}.bar{display:flex;height:6px;border-radius:999px;overflow:hidden;background:var(--hair);margin-bottom:5px}.bar i{display:block;height:100%}.bar .s{background:var(--bar-s)}.bar .h{background:var(--bar-h)}.bar .m{background:var(--bar-m)}.bar .u{background:var(--bar-u)}.legend{font-size:12.5px;color:var(--muted)}.legend b{color:var(--fg2);font-weight:600}.card .legend{font-size:12px}.toolbar{display:flex;flex-wrap:wrap;gap:10px;align-items:center;margin:10px 0 16px}.seg{display:inline-flex;border:1px solid var(--border2);border-radius:9px;overflow:hidden;background:var(--panel)}.seg button{border:0;border-right:1px solid var(--border);background:none;padding:5px 12px;font-size:13px;color:var(--fg2);cursor:pointer}.seg button:last-child{border-right:0}.seg button:hover{background:var(--soft2)}.seg button.on{background:var(--accent-bg);color:var(--accent);font-weight:600}.seg button .k{color:var(--muted2);margin-left:6px;font-weight:400}.toolbar select{font:inherit;font-size:13px;padding:5px 30px 5px 10px;border:1px solid var(--border2);border-radius:9px;background:var(--panel);max-width:280px}.toolbar .spacer{flex:1}.toolbar .chip.on{font-size:12.5px;padding:4px 10px;max-width:100%;text-align:left}.toolbar .chip.on .x{display:inline-block;margin-left:4px;font-size:14px;line-height:1;font-weight:600;opacity:.75}.toolbar .chip.on:hover{background:var(--accent);color:var(--panel)}.toolbar .chip.on:hover .x{opacity:1}.q{border:1px solid var(--border);border-radius:12px;padding:12px 16px;margin:10px 0;background:var(--panel)}.q .text{font-weight:500}.q .n{color:var(--muted2);font-weight:400;margin-right:2px}.q .text>.n+p{display:inline}.q .text p{margin:.3em 0}.q .text :is(pre,table){margin:.5em 0;font-weight:400}.q .meta{display:flex;flex-wrap:wrap;gap:6px;align-items:center;margin-top:7px}.q .meta button.chip:hover{background:var(--accent-bg);color:var(--accent)}.hist{font-size:11px;color:var(--muted2);letter-spacing:.12em}.q .ans{margin-top:9px;padding-top:9px;border-top:1px dashed var(--border);color:var(--fg2)}.q .ans p,.q .ans li{margin:.3em 0}.q .ans ul,.q .ans ol{margin:.3em 0;padding-left:1.4em}.q .src{margin-top:8px;font-size:12.5px}.q .src a{color:var(--muted);text-decoration-color:var(--border3);text-underline-offset:3px}.q .src a:hover{color:var(--link);text-decoration-color:currentColor}table.topics{width:100%;border-collapse:collapse;font-size:13.5px;margin-top:8px}.topics td{padding:4px 6px;border-top:1px solid var(--hair);vertical-align:top}.topics td:first-child{width:30px;padding-left:0}.topics td:last-child{padding-right:0}a.topic-link{color:inherit;text-decoration:none}a.topic-link:hover{color:var(--link);text-decoration:underline;text-underline-offset:3px}article table.topics{display:table}article .topics td{border:0;border-top:1px solid var(--hair);padding:5px 6px}article .topics tr:first-child td{border-top:0}.outcomes td.id{color:var(--muted2);font-size:12px;width:44px;white-space:nowrap}.outcomes tr.later td{color:var(--muted)}.legend.key{display:flex;flex-wrap:wrap;gap:14px;align-items:center;margin:2px 0 6px}.legend.key .right{margin-left:auto}.hint{background:var(--mark);color:var(--warn);padding:1px 9px;border-radius:999px;font-size:11.5px;cursor:help}@media (max-width: 640px){.topics td{overflow-wrap:anywhere}}.due-note{margin:.45em 0 .3em;font-size:13px;color:var(--muted)}.readiness{margin:10px 0 4px}.due-label{font-size:11px;font-weight:600;letter-spacing:.05em;text-transform:uppercase;color:var(--muted)}.readiness ul{list-style:none;margin:2px 0 0;padding:0;font-size:13.5px}.readiness li{margin:3px 0;line-height:1.5}.readiness b{font-weight:600}.due-error{margin:6px 0;padding:8px 12px;border-radius:9px;background:var(--bad-bg);color:var(--bad);font-size:13.5px}.due-error p{margin:.25em 0}.stale{color:var(--muted);font-weight:400;text-transform:none;letter-spacing:0}.calibration{display:grid;grid-template-columns:repeat(auto-fill,minmax(190px,1fr));gap:10px;margin:4px 0 12px}.calibration .panel{margin:0;padding:8px 12px 7px;background:var(--tint);border-color:var(--line)}.calibration .panel-head{align-items:center}.calibration .cal-row{display:grid;grid-template-columns:minmax(0,1fr) auto auto;gap:10px;font-size:12.5px;line-height:1.7}.calibration .cal-row .n{color:var(--muted)}.calibration .cal-row .o{min-width:44px;text-align:right;font-weight:600;font-variant-numeric:tabular-nums}main.wide{max-width:1080px}.course-head h1{margin-bottom:.35em}.tabs{display:flex;flex-wrap:wrap;gap:2px;border-bottom:1px solid var(--border2);margin:0 0 20px}.tab{display:inline-flex;align-items:center;padding:7px 14px;margin-bottom:-1px;border:1px solid transparent;border-bottom:0;border-radius:9px 9px 0 0;color:var(--fg2);text-decoration:none;font-size:14px;font-weight:500}.tab:hover{background:var(--soft2);color:var(--fg)}.tab.cur{background:var(--panel);border-color:var(--border2);color:var(--ink);box-shadow:inset 0 3px 0 var(--ink)}.tab .count{margin-left:7px;font-size:11.5px;font-weight:600;background:var(--tint);color:var(--ink);padding:0 7px;border-radius:999px}.course-grid{display:grid;grid-template-columns:minmax(0,1fr) 240px;gap:28px;align-items:start}@media (max-width: 900px){.course-grid{grid-template-columns:1fr}}.panel.side{padding:8px 14px 10px}.panel.side ul{margin:.3em 0;padding-left:1.2em;font-size:13.5px}.panel.side li{margin:.25em 0}.whatif-warn{color:var(--warn)}.whatif-inputs{display:flex;flex-wrap:wrap;gap:8px 20px;margin:8px 0 12px;font-size:13.5px;color:var(--fg2)}.whatif-inputs label{display:inline-flex;align-items:center;gap:6px}.whatif-inputs input{width:62px;height:30px;margin:0;padding:0 8px;border:1px solid var(--border2);border-radius:8px;font:inherit;color:var(--fg);background:var(--soft2);font-variant-numeric:tabular-nums}.whatif-inputs input:focus{border-color:var(--focus);background:var(--panel)}.whatif-stats{display:grid;grid-template-columns:repeat(auto-fit,minmax(210px,1fr));gap:10px 24px;margin:0 0 8px}.whatif-stats .num{font-size:24px;font-weight:650;line-height:1.2;color:var(--fg);font-variant-numeric:tabular-nums}.whatif-stats .say{font-size:13px;color:var(--muted)}.whatif-stats p.verdict{margin:0;align-self:center;font-size:14px;color:var(--fg)}table.whatif-table{width:100%;border-collapse:collapse;font-size:13.5px;line-height:1.45;margin:8px 0 4px}.whatif-table th{padding:0 8px 4px;border-bottom:1px solid var(--border2);font-size:11px;font-weight:600;letter-spacing:.05em;text-transform:uppercase;color:var(--muted);text-align:left}.whatif-table td{padding:6px 8px;border-top:1px solid var(--hair);vertical-align:top;overflow-wrap:anywhere}.whatif-table tbody tr:first-child td{border-top:0}.whatif-table th:nth-child(2){width:34%}.whatif-table :is(th,td):first-child{padding-left:0}.whatif-table :is(th,td).open{padding-right:0;text-align:right;overflow-wrap:normal;font-variant-numeric:tabular-nums}.whatif-table .w{color:var(--muted);font-size:12.5px;white-space:nowrap}.whatif-table .items{display:flex;flex-wrap:wrap;align-items:center;gap:4px 6px}.whatif-table .chip b{font-weight:600}.whatif-table tr.quiet td{color:var(--muted)}.linklist{list-style:none;margin:4px 0 2px;padding:0;font-size:13.5px}.linklist li{display:flex;align-items:baseline;gap:8px;padding:3px 0}.linklist li:before{content:"";width:6px;height:6px;border-radius:50%;background:var(--ink);opacity:.5;flex:none;position:relative;top:-1px}.linklist a{color:var(--link);text-decoration:underline;text-decoration-color:var(--border3);text-underline-offset:3px}.linklist a:after{content:"↗";font-size:11px;margin-left:4px;opacity:.55}.linklist a:hover{color:var(--ink);text-decoration-color:currentColor}.linkgroups{column-count:1;column-gap:14px;margin:14px 0 8px}.linkgroups+*{margin-top:0}@media (min-width: 700px){.linkgroups{column-count:2}}.linkgroups .panel{display:inline-block;width:100%;vertical-align:top;break-inside:avoid;margin:0 0 14px;padding:10px 16px 12px;--ink: var(--muted)}.linkgroups .panel-head{align-items:center;min-height:24px;margin-bottom:2px}.linkgroups .panel-head .chip{font-size:12px;font-weight:600;letter-spacing:0;text-transform:none}.home-links{margin:0 0 18px}.home-links>.panel-head{margin:0 2px 6px}.home-links .linkgroups{columns:2 150px;margin:0}.home-links .linkgroups .panel{margin-bottom:10px;padding:6px 12px 8px}.home-links .linkgroups .panel-head{min-height:22px}.home-links .linklist{font-size:13px}.home-links .linklist li{padding:1px 0}:focus-visible{outline:2px solid var(--focus);outline-offset:2px;border-radius:6px}.settings{position:relative;display:flex;align-items:center;margin-left:auto}.gear{border:0;background:none;font-size:17px;line-height:1;padding:6px 8px;border-radius:8px;cursor:pointer;color:var(--fg2)}.gear:hover,.gear.on{background:var(--soft);color:var(--fg)}.pop{position:absolute;top:calc(100% + 8px);right:0;z-index:30;min-width:340px;padding:8px 14px 10px;background:var(--panel);border:1px solid var(--border2);border-radius:12px;box-shadow:0 12px 34px #00000024;font-size:13.5px}.pop .row{display:flex;align-items:center;justify-content:space-between;gap:16px;padding:8px 0}.pop .row+.row{border-top:1px solid var(--hair)}.pop .lbl{color:var(--fg2);font-weight:500}.pop .val{font-size:12.5px;color:var(--muted);white-space:nowrap}.pop .btn.secret{font-size:13px;padding:4px 12px}.pop .hintline{margin:2px 0;font-size:12.5px;color:var(--muted)}.pop .hintline .link{font-size:12.5px}.pop .swatches{display:flex;align-items:center;gap:14px;padding-right:6px}.swatch{flex:none;width:18px;height:18px;padding:0;border:1px solid var(--border3);border-radius:50%;cursor:pointer;background:linear-gradient(135deg,var(--sw-page) 50%,var(--sw-accent) 50%)}.swatch:hover{border-color:var(--muted2)}.swatch[aria-pressed=true]{box-shadow:0 0 0 2px var(--panel),0 0 0 4px var(--focus)}.swatch:focus-visible{border-radius:50%;outline-offset:5px}@media (max-width: 640px){.pop{position:fixed;left:12px;right:12px;top:56px;min-width:0}}.toast{position:fixed;right:16px;bottom:16px;z-index:50;display:flex;align-items:center;gap:10px;max-width:calc(100vw - 32px);padding:10px 12px 10px 14px;background:var(--panel);border:1px solid var(--border2);border-radius:12px;box-shadow:0 12px 34px #00000024;font-size:13.5px;color:var(--fg);animation:toast-in .25s ease-out}.toast .actions{display:flex;align-items:center;gap:10px;flex:none}.toast .btn{padding:4px 12px;font-size:13px}@keyframes toast-in{0%{opacity:0;transform:translateY(8px)}to{opacity:1;transform:none}}@media (max-width: 640px){.toast{left:12px;right:12px;bottom:12px;max-width:none;flex-wrap:wrap}.toast .msg{flex:1 1 100%}.wrap:has(.toast) main{padding-bottom:120px}}@media (prefers-reduced-motion: reduce){.toast{animation:none}}[data-visual=abstract] :where(main,nav,.crumbs,.search,.rail) :is(h1,h2,h3,h4,p,li,td,th,a,span,button,summary,label,em,strong,b,i,code,small,div,input,mark,select){color:transparent!important;-webkit-text-fill-color:transparent;text-decoration:line-through!important;text-decoration-thickness:.66em!important;text-decoration-skip-ink:none!important;text-decoration-color:var(--border3)!important}[data-visual=abstract] :is(main,nav,.rail) a,[data-visual=abstract] :is(main,nav,.rail) a *{text-decoration-color:var(--link)!important;text-decoration-color:color-mix(in srgb,var(--link) 55%,var(--bg))!important}[data-visual=abstract] :is(main,nav) a:hover,[data-visual=abstract] :is(main,nav) a:hover *{text-decoration-color:var(--link)!important}[data-visual=abstract] .search input::placeholder{color:transparent}[data-visual=abstract] .search input{caret-color:var(--fg)}[data-visual=abstract] :is(main,nav) svg{opacity:.35}[data-visual=abstract] :is(main,nav) input[type=checkbox]{opacity:.35}[data-visual=blobs] :is(main,nav){filter:blur(3px) contrast(1.35) saturate(1.5)}[data-visual=blobs] :is(.crumbs,.search){filter:blur(3px)}[data-visual=wireframe] :is(main,nav,.crumbs,.rail) *{background:transparent!important;box-shadow:none!important;color:transparent!important;-webkit-text-fill-color:transparent;text-decoration:none!important;border-color:var(--border3)!important;outline:1px solid var(--border3);outline:1px solid color-mix(in srgb,var(--fg) 22%,transparent);outline-offset:-1px}[data-visual=wireframe] :is(main,nav) svg{opacity:.25}[data-visual=wireframe] :is(main,nav,.crumbs) *:focus-visible{outline:2px solid var(--focus)}.katex{font-size:1.08em}.katex-display{margin:.7em 0;padding:2px 0;overflow-x:auto;overflow-y:hidden}.katex-display>.katex{white-space:nowrap}@media (max-width: 520px){.katex-display>.katex{font-size:.92em}}article pre code.hljs{display:block;font-size:13px;line-height:1.55;color:var(--fg)}:root{--hl-kw: light-dark(#8a3fa0, #d7a6ff);--hl-str: light-dark(#1f7a4d, #8fd9a8);--hl-num: light-dark(#b25e09, #f0b06a);--hl-cmt: light-dark(#7a8190, #8a919e);--hl-fn: light-dark(#2456b3, #8ab4ff);--hl-type: light-dark(#0e7490, #6fd3e0);--hl-attr: light-dark(#9a3b3b, #f29c9c);--hl-lit: light-dark(#b25e09, #f0b06a);--hl-meta: light-dark(#6b7280, #9aa1ad);--hl-punct: light-dark(#5b6170, #a6adbb)}.hljs-keyword,.hljs-selector-tag,.hljs-doctag,.hljs-tag{color:var(--hl-kw)}.hljs-string,.hljs-regexp,.hljs-template-tag,.hljs-addition{color:var(--hl-str)}.hljs-number,.hljs-symbol,.hljs-bullet{color:var(--hl-num)}.hljs-literal,.hljs-built_in{color:var(--hl-lit)}.hljs-comment,.hljs-quote,.hljs-deletion{color:var(--hl-cmt);font-style:italic}.hljs-title,.hljs-title.function_,.hljs-title.class_,.hljs-section,.hljs-name{color:var(--hl-fn)}.hljs-type,.hljs-class,.hljs-selector-class,.hljs-selector-id{color:var(--hl-type)}.hljs-attr,.hljs-attribute,.hljs-variable,.hljs-property,.hljs-template-variable,.hljs-params{color:var(--hl-attr)}.hljs-meta,.hljs-meta .hljs-keyword,.hljs-link{color:var(--hl-meta)}.hljs-punctuation,.hljs-operator{color:var(--hl-punct)}.hljs-emphasis{font-style:italic}.hljs-strong{font-weight:700}.pager{display:flex;align-items:center;gap:8px;margin:8px 0 2px;font-size:12.5px;color:var(--muted);font-variant-numeric:tabular-nums}.pager .range{margin-right:auto}.pager .count{min-width:44px;text-align:center}.pager button{display:inline-flex;align-items:center;justify-content:center;width:26px;height:26px;padding:0 0 2px;border:1px solid var(--border2);border-radius:50%;background:var(--soft2);color:var(--fg2);font-size:17px;line-height:1;cursor:pointer}.pager button:hover:not(:disabled){background:var(--hover);border-color:var(--border3)}.pager button:disabled{opacity:.35;cursor:default}.pager button:focus-visible{outline:2px solid var(--focus);outline-offset:1px;border-radius:50%}tr.pager-row td{border:0;padding:2px 0 0;background:none}tr.pager-row .pager{margin:4px 0 0}table.due,table.ledger{width:100%;border-collapse:collapse;font-size:13.5px;margin:6px 0 0;line-height:1.45}article table.due,article table.ledger{display:table}table.due td,table.ledger td,table.ledger th{padding:6px 8px;border:0;border-top:1px solid var(--hair);vertical-align:top;text-align:left;background:none}table.ledger th{border-top:0;border-bottom:1px solid var(--border2);padding-top:0;font-size:11px;font-weight:600;letter-spacing:.05em;text-transform:uppercase;color:var(--muted)}table.due tr:first-child td,table.ledger tbody tr:first-child td{border-top:0}table.due td:first-child,table.ledger td:first-child,table.ledger th:first-child{padding-left:0}table.due td:last-child,table.ledger td:last-child,table.ledger th:last-child{padding-right:0}.panel table.due{margin-top:2px}td.nowrap{white-space:nowrap}.detail{color:var(--muted);font-size:12.5px;margin-left:5px}table.due td.when{white-space:nowrap;text-align:right;color:var(--muted);font-size:12.5px;width:76px}td.standing{white-space:nowrap;text-align:right;font-size:12.5px;color:var(--muted)}:is(td.standing,table.due td.when).late{color:var(--bad);font-weight:600}:is(td.standing,table.due td.when).sweep{color:var(--warn);font-weight:600}table.due td.grade,table.ledger td.grade{width:40px;text-align:center}table.ledger th.grade{text-align:center}table.ledger td.lec,table.ledger td.last{color:var(--muted);white-space:nowrap;font-size:12.5px}table.ledger th.next,table.ledger th.weight{text-align:right}table.ledger td.date{white-space:nowrap;color:var(--fg2)}table.ledger td.weight{white-space:nowrap;text-align:right;color:var(--muted);font-size:12.5px}table.ledger tr.exam td.what{font-weight:600}table.ledger td.what code{font-size:.88em}.past{color:var(--muted)}.past .chip{opacity:.8}table.ledger.recurring td.series{font-weight:500}table.ledger.recurring td.when{white-space:nowrap;color:var(--fg2)}table.ledger.recurring td.note{color:var(--muted);font-size:13px}table.ledger.recurring td.note code,table.ledger.recurring td.series code{font-size:.88em}table.ledger:is(.calendar,.recurring) .chip-inline{display:none;margin-right:6px}table.upcoming{width:100%;border-collapse:collapse;font-size:13.5px;margin-top:4px}.upcoming td{padding:5px 6px;border-top:1px solid var(--hair);vertical-align:top}.upcoming tr:first-child td{border-top:0}.upcoming td.when{white-space:nowrap;width:84px;padding-left:0;color:var(--muted)}.upcoming td.when.soon{color:var(--bad);font-weight:600}.upcoming td.date{white-space:nowrap;width:150px;color:var(--fg2)}.upcoming td.weight{white-space:nowrap;text-align:right;color:var(--muted2);font-size:12.5px;padding-right:0}.upcoming tr.exam td:nth-child(3){font-weight:600}.upcoming .chip{margin-right:4px}.filter{display:flex;flex-wrap:wrap;gap:6px;margin:4px 0 6px}.filter button.chip.tone:hover{background:var(--tint);filter:brightness(.96)}.filter .chip.tone.on{box-shadow:inset 0 0 0 1.5px var(--ink);font-weight:600}.ledger-page h2 .count{font-size:13px;font-weight:500;color:var(--muted);margin-left:4px}.ledger-page section{margin-bottom:6px}.ledger-page p.small{margin:-.2em 0 .6em}.ledger-page blockquote{margin:1em 0;padding:.55em 1em;border-left:3px solid var(--warn, var(--border3));border-radius:0 9px 9px 0;background:var(--panel);color:var(--fg)}.ledger-page blockquote p{margin:.3em 0}.ledger-page h3{margin-top:1.4em}.ledger-page table:not(.ledger):not(.due){display:table;width:100%;font-size:13.5px}.ledger-page table:not(.ledger):not(.due) td,.ledger-page table:not(.ledger):not(.due) th{border:0;border-top:1px solid var(--hair);padding:6px 8px;background:none}.ledger-page table:not(.ledger):not(.due) th{border-top:0;border-bottom:1px solid var(--border2);font-size:11px;font-weight:600;letter-spacing:.05em;text-transform:uppercase;color:var(--muted)}.ledger-page table:not(.ledger):not(.due) td:first-child,.ledger-page table:not(.ledger):not(.due) th:first-child{padding-left:0}table.ledger td.asof{white-space:nowrap;text-align:right;color:var(--muted);font-size:12.5px;width:72px}table.ledger th.asof{text-align:right}table.ledger.grades td.score{line-height:1.4}.grades .total{font-size:15px;font-weight:600;color:var(--fg)}.grades .total.none{font-size:13.5px;font-weight:400;color:var(--muted)}.grades .items{display:flex;flex-wrap:wrap;align-items:center;gap:4px 6px;margin-top:4px}.grades .items .chip{white-space:nowrap}.grades .items .chip b{font-weight:600}.grades .note{margin-top:3px;font-size:12.5px;color:var(--muted)}.grades .asof-inline{display:none;font-size:12px;color:var(--muted)}.ledger-page .log{margin-top:6px;font-size:13.5px;line-height:1.45}.ledger-page .log-day{display:grid;grid-template-columns:72px minmax(0,1fr);column-gap:10px;padding:7px 0;border-top:1px solid var(--hair)}.ledger-page .log-day:first-child{border-top:0;padding-top:2px}.ledger-page .log-date{color:var(--muted);font-size:12.5px;white-space:nowrap;padding-top:1px}.ledger-page ul.log-entries{list-style:none;margin:0;padding:0;min-width:0}.ledger-page li.log-entry{position:relative;margin:0 0 5px;padding-left:14px;overflow-wrap:anywhere}.ledger-page li.log-entry:last-child{margin-bottom:0}.ledger-page li.log-entry:before{content:"";position:absolute;left:0;top:.6em;width:5px;height:5px;border-radius:50%;background:var(--border3)}.log-title{font-weight:500}.log-title code,.log-more code{font-size:.88em}.log-title .link{font-size:12px;margin-left:2px;padding:0 4px}.ledger-page ul.log-more{list-style:none;margin:3px 0 1px;padding:0;font-size:13px;font-weight:400;line-height:1.42;color:var(--fg2)}.ledger-page ul.log-more li{position:relative;margin:2px 0 0;padding-left:12px}.ledger-page ul.log-more li:before{content:"";position:absolute;left:1px;top:.6em;width:4px;height:4px;border-radius:50%;background:var(--border3)}@media (max-width: 640px){.upcoming td.date,table.ledger td.lec,table.ledger th.lec,table.ledger td.last,table.ledger th.last,table.due td.grade,table.ledger td.grade,table.ledger th.grade{display:none}table.due td.when{width:auto;font-size:12px;padding-right:0}table.due td,table.ledger td{padding-left:5px;padding-right:5px}table.due td.topic,table.ledger td.topic,table.ledger td.what{overflow-wrap:anywhere}table.ledger.grades td.asof,table.ledger.grades th.asof{display:none}.grades .asof-inline{display:inline}.ledger-page .log-day{grid-template-columns:minmax(0,1fr);row-gap:2px}table.ledger:is(.calendar,.recurring) :is(td,th).course{display:none}table.ledger:is(.calendar,.recurring) .chip-inline{display:inline}table.ledger.calendar td.date,table.ledger.calendar td.weight{white-space:normal}table.ledger.calendar td.date{width:72px}table.ledger.recurring td.series,table.ledger.recurring td.note{overflow-wrap:anywhere}table.ledger.recurring td.when{white-space:normal;width:76px}}.rail{position:fixed;right:14px;top:50%;transform:translateY(-50%);z-index:15;display:none;flex-direction:column;align-items:stretch;gap:7px;max-height:calc(100vh - 96px);overflow:hidden;box-sizing:border-box;padding:8px 12px 8px 20px;border-radius:14px;background:transparent;box-shadow:0 0 24px 18px transparent;transition:background-color .15s,box-shadow .15s}.rail:hover,.rail:has(:focus-visible){overflow-y:auto;scrollbar-width:thin}.rail:not(.roomy):is(:hover,:has(:focus-visible)){background:var(--bg);box-shadow:0 0 24px 18px var(--bg)}.rail a{display:flex;flex-direction:row-reverse;flex:none;align-items:center;gap:8px;min-height:12px;color:var(--muted2);font-size:13px;line-height:20px;text-decoration:none;border-radius:6px;transition:color .15s}.rail a.on{color:var(--muted);font-weight:600}.rail:is(:hover,:has(:focus-visible)) a{color:var(--muted)}.rail:is(:hover,:has(:focus-visible)) a:is(:hover,:focus-visible,.on){color:var(--fg2)}.rail .bar{display:block;flex:none;width:16px;height:2px;margin-left:8px;border-radius:1px;background:var(--border3);opacity:.7;transition:width .15s,margin-left .15s,background-color .15s,opacity .15s}.rail a.on .bar{width:24px;margin-left:0;background:var(--fg2);opacity:1}.rail:is(:hover,:has(:focus-visible)) .bar{opacity:1}.rail:is(:hover,:has(:focus-visible)) .on .bar{background:var(--muted)}.rail .lbl{display:block;max-width:0;opacity:0;overflow:hidden;white-space:nowrap;text-overflow:ellipsis;text-align:right;transition:max-width .15s,opacity .15s}.rail.roomy .lbl{max-width:var(--rail-label, 0px);opacity:.5}.rail.roomy :where(.on) .lbl{opacity:.9}.rail:is(:hover,:has(:focus-visible)) .lbl{opacity:1}.rail:not(.roomy):is(:hover,:has(:focus-visible)) .lbl{max-width:220px}.contents{display:flex;flex-wrap:wrap;gap:6px;margin:6px 0 18px}.ledger-page .contents{margin:2px 0 14px}@media (min-width: 1000px){.rail{display:flex}.contents{display:none}}@media (min-width: 1000px) and (max-width: 1259.98px){body:has(.wrap.pinned) .rail{display:none}body:has(.wrap.pinned) .contents{display:flex}}@media (prefers-reduced-motion: reduce){.rail,.rail a,.rail .bar,.rail .lbl{transition:none}}
