:root{--paper:#fdfcfa;--surface:#fff;--rail:#f2efe9;--ink:#1c1c1a;--ink-soft:#55534e;--ink-faint:#6e6b65;--line:#ddd8cf;--line-soft:#ebe7df;--accent:#14506e;--accent-soft:#e7eef3;--warn:#7a4a12;--warn-soft:#fbf2e4;--focus:#b45309;--rail-width:20.5rem;--utility-width:19.5rem;--ui:system-ui, -apple-system, "Segoe UI", Roboto, sans-serif;--read:Georgia, "Iowan Old Style", "Times New Roman", serif;--mono:ui-monospace, SFMono-Regular, "SF Mono", Menlo, Consolas, monospace}*,:before,:after{box-sizing:border-box}html{-webkit-text-size-adjust:100%}body{background:var(--paper);color:var(--ink);font-family:var(--ui);margin:0;font-size:1rem;line-height:1.55}a{color:var(--accent)}a:hover{text-decoration-thickness:2px}:focus-visible{outline:3px solid var(--focus);outline-offset:2px;border-radius:2px}.visually-hidden{clip-path:inset(50%);white-space:nowrap;width:1px;height:1px;margin:-1px;padding:0;position:absolute;overflow:hidden}.topbar{background:var(--surface);border-bottom:1px solid var(--line);z-index:30;flex-wrap:wrap;align-items:center;gap:.45rem 1rem;padding:.6rem 1rem;display:flex;position:sticky;top:0}.skip{background:var(--surface);border:1px solid var(--accent);padding:.5rem .75rem;position:absolute;left:-999px}.skip:focus{z-index:60;top:.5rem;left:.5rem}.brand{white-space:nowrap;color:var(--ink);letter-spacing:-.01em;flex:none;font-size:1.02rem;font-weight:650;text-decoration:none}.brand:hover{text-decoration:underline}.prototype-tag{color:var(--warn);background:var(--warn-soft);white-space:nowrap;border:1px solid #ecd9b8;border-radius:999px;flex:none;padding:.12rem .6rem;font-size:.78rem}.nav-toggle{font:inherit;background:var(--surface);border:1px solid var(--line);cursor:pointer;border-radius:5px;flex:none;order:3;margin-inline-start:auto;padding:.38rem .7rem;font-size:.9rem;display:none}.nav-toggle:hover{background:var(--rail)}.layout{grid-template-columns:var(--rail-width) minmax(0, 1fr);grid-template-rows:1fr auto;grid-template-areas:"nav main""nav footer";align-items:start;gap:0;min-height:calc(100vh - 3rem);display:grid}.nav{grid-area:nav}main{grid-area:main}.site-footer{grid-area:footer}.utility{grid-area:rail}.layout.has-rail{grid-template-columns:var(--rail-width) minmax(0, 1fr) var(--utility-width);grid-template-areas:"nav main rail""nav footer rail"}.nav{background:var(--rail);border-right:1px solid var(--line);overscroll-behavior:contain;align-self:stretch;height:calc(100vh - 3rem);padding:1rem .75rem 3rem;font-size:.92rem;position:sticky;top:3rem;overflow-y:auto}.nav-heading{text-transform:uppercase;letter-spacing:.09em;color:var(--ink-faint);margin:1.3rem 0 .4rem;padding-inline:.55rem;font-size:.73rem;font-weight:650}.nav ul{margin:0;padding:0;list-style:none}.nav-primary a{color:var(--ink);border-radius:5px;justify-content:space-between;gap:.5rem;padding:.4rem .55rem;text-decoration:none;display:flex}.nav-primary a:hover{background:#e8e4db}.nav-primary a[aria-current=page]{background:var(--accent-soft);color:var(--accent);box-shadow:inset 3px 0 0 var(--accent);font-weight:620}.pill{color:var(--ink-soft);font-variant-numeric:tabular-nums;background:#ddd8cf;border-radius:999px;padding:0 .42rem;font-size:.75rem}.row{align-items:stretch;gap:.15rem;display:flex}.row>a{min-width:0;color:var(--ink);border-radius:5px;flex:1;padding:.4rem .5rem;text-decoration:none}.row>a:hover{background:#e8e4db}.course-link{font-weight:620;line-height:1.3}.course-code{color:var(--ink-faint);font-size:.75rem;font-weight:500;display:block}.row>a[aria-current=page],.row>a[aria-current=true]{background:var(--accent-soft);color:var(--accent);box-shadow:inset 3px 0 0 var(--accent)}.disclosure{cursor:pointer;width:2rem;color:var(--ink-soft);background:0 0;border:1px solid #0000;border-radius:5px;flex:none;place-items:center;display:grid}.disclosure:hover{border-color:var(--line);background:#e2ded4}.disclosure svg{transition:transform .12s}.disclosure[aria-expanded=false] svg{transform:rotate(-90deg)}.outline{margin:.1rem 0 .5rem}.outline[hidden]{display:none}.group-title{color:var(--ink-faint);text-transform:uppercase;letter-spacing:.06em;flex:1;padding:.3rem .5rem;font-size:.78rem;font-weight:650}.group-items{border-left:1px solid var(--line);margin-inline-start:.85rem}.group-items a{color:var(--ink-soft);border-radius:0 5px 5px 0;padding:.3rem .5rem .3rem .6rem;line-height:1.35;text-decoration:none;display:block}.group-items a:hover{color:var(--ink);background:#e8e4db}.group-items a[aria-current=page]{background:var(--accent-soft);color:var(--accent);box-shadow:inset 3px 0 0 var(--accent);font-weight:620}.group-items .kind{color:var(--ink-faint);text-transform:uppercase;letter-spacing:.05em;font-size:.72rem}.nav-note{border-top:1px solid var(--line);color:var(--ink-faint);margin:1.5rem .55rem 0;padding-top:.8rem;font-size:.78rem;line-height:1.45}.backdrop{display:none}main{min-width:0;max-width:78rem;padding:1.75rem 2rem 4rem}h1{letter-spacing:-.015em;margin:0 0 .35rem;font-size:1.65rem;line-height:1.22}.crumbs{color:var(--ink-faint);margin:0 0 .5rem;font-size:.85rem}.crumbs a{color:var(--ink-soft)}.crumbs .sep{padding-inline:.35rem}.lede{color:var(--ink-soft);max-width:46rem;margin:0 0 1.4rem;font-size:1.02rem}.panel{background:var(--surface);border:1px solid var(--line);border-radius:7px;margin-block:1.1rem;padding:1rem 1.15rem}.panel>h2{margin-top:0}h2{letter-spacing:-.01em;margin:1.8rem 0 .6rem;font-size:1.14rem}h3{margin:1.3rem 0 .4rem;font-size:1rem}.stack{gap:.55rem;margin:0;padding:0;list-style:none;display:grid}.panel-pair{grid-template-columns:repeat(auto-fit,minmax(25rem,1fr));align-items:start;gap:1rem;margin-block:1.1rem;display:grid}.panel-pair>.panel{height:100%;margin-block:0}.card{border:1px solid var(--line-soft);background:var(--surface);border-radius:6px;padding:.7rem .85rem}.card .title{font-weight:620}.card .title a{text-decoration:none}.card .title a:hover{text-decoration:underline}.meta{color:var(--ink-faint);flex-wrap:wrap;gap:.15rem .6rem;margin-top:.15rem;font-size:.82rem;display:flex}.meta>:not(:last-child):after{content:"·";color:var(--line);margin-inline-start:.6rem}.card p{color:var(--ink-soft);margin:.45rem 0 0;font-size:.92rem}.score{font-variant-numeric:tabular-nums;color:var(--accent);white-space:nowrap;font-weight:650}.due-soon{color:var(--warn);font-weight:600}.empty{border:1px dashed var(--line);color:var(--ink-soft);background:var(--surface);border-radius:6px;padding:.9rem 1rem;font-size:.93rem}.flash{background:#eef7f0;border:1px solid #b6d4c0;border-radius:6px;margin-bottom:1rem;padding:.6rem .85rem;font-size:.93rem}.flash.bad{background:#fbeeee;border-color:#e0b4b4}.toolbar{border-bottom:1px solid var(--line);flex-wrap:wrap;align-items:center;gap:.5rem;margin-block:1rem;padding-bottom:.9rem;display:flex}.toolbar .count{color:var(--ink-faint);margin-inline-start:auto;font-size:.88rem}.btn{font:inherit;border:1px solid var(--line);background:var(--surface);color:var(--ink);cursor:pointer;border-radius:5px;padding:.35rem .7rem;font-size:.88rem;text-decoration:none;display:inline-block}.btn:hover{background:var(--rail)}.btn-primary{background:var(--accent);border-color:var(--accent);color:#fff}.btn-primary:hover{background:#10405a}.btn-danger{color:#8a2222;border-color:#e0c0c0}.btn-danger:hover{background:#fbeeee}.contents-group{margin-block:1.25rem;scroll-margin-top:4rem}.contents-group h2{flex-wrap:wrap;align-items:baseline;gap:0 .6rem;margin:0 0 .1rem;display:inline-flex}.contents-group .group-note{color:var(--ink-faint);font-size:.83rem;font-weight:400}.contents-group.is-current>h2{color:var(--accent)}.contents-list{border-top:1px solid var(--line-soft);margin:.5rem 0 0;padding:0;list-style:none}.contents-list li{border-bottom:1px solid var(--line-soft)}.contents-list a{color:var(--ink);padding:.55rem .4rem;text-decoration:none;display:block}.contents-list a:hover{background:var(--surface)}.contents-list .row-title{font-weight:570;display:block}.contents-list .row-summary{color:var(--ink-faint);margin-top:.1rem;font-size:.87rem;display:block}.tag{text-transform:uppercase;letter-spacing:.06em;color:var(--ink-faint);border:1px solid var(--line);vertical-align:.1em;border-radius:3px;margin-inline-start:.4rem;padding:0 .32rem;font-size:.7rem;font-weight:600;display:inline-block}.article{font-family:var(--read);max-width:46rem;font-size:1.035rem;line-height:1.68}.article h2{font-family:var(--ui);margin-top:2rem;scroll-margin-top:4rem;font-size:1.1rem}.article h3{font-family:var(--ui)}.article p{margin:0 0 1rem}.article ul,.article ol{padding-inline-start:1.3rem}.article li{margin-bottom:.35rem}.article blockquote{border-inline-start:3px solid var(--accent);color:var(--ink-soft);margin:1.2rem 0;padding:.1rem 0 .1rem 1rem}.article code{font-family:var(--mono);background:var(--rail);border-radius:3px;padding:.08em .3em;font-size:.86em}.article pre{font-family:var(--mono);border:1px solid var(--line);border-radius:6px;max-width:100%;padding:.75rem .9rem;font-size:.83rem;line-height:1.5;overflow-x:auto;background:#f7f6f3!important}.article pre code{font-size:inherit;background:0 0;padding:0}.article table{border-collapse:collapse;width:100%;font-family:var(--ui);margin-block:1.1rem;font-size:.88rem;display:block;overflow-x:auto}.article th,.article td{border:1px solid var(--line);text-align:left;vertical-align:top;padding:.4rem .6rem}.article th{background:var(--rail);font-weight:620}.article img{max-width:100%;height:auto}.on-this-page{border:1px solid var(--line);background:var(--surface);border-radius:6px;max-width:46rem;margin-block:1.2rem;padding:.6rem .9rem;font-size:.88rem}.on-this-page>strong{text-transform:uppercase;letter-spacing:.06em;color:var(--ink-faint);margin-bottom:.3rem;font-size:.8rem;display:block}.on-this-page ul{columns:2;column-gap:1.5rem;margin:0;padding:0;list-style:none}.on-this-page li{break-inside:avoid;margin-bottom:.15rem}.provenance{border-top:1px solid var(--line);color:var(--ink-faint);max-width:46rem;margin-top:2.5rem;padding-top:.9rem;font-size:.82rem}.pager{border-top:1px solid var(--line);flex-wrap:wrap;justify-content:space-between;gap:.75rem;max-width:46rem;margin-top:1.6rem;padding-top:1rem;font-size:.9rem;display:flex}.note-form{gap:.5rem;margin-top:.7rem;display:grid}textarea,input[type=search],input[type=text],select{font:inherit;border:1px solid var(--line);background:var(--surface);color:var(--ink);border-radius:5px;width:100%;max-width:100%;padding:.45rem .6rem;font-size:.94rem}textarea{resize:vertical;min-height:5.5rem;font-family:var(--ui)}.form-actions{flex-wrap:wrap;align-items:center;gap:.5rem;display:flex}.hint{color:var(--ink-faint);font-size:.8rem}.note-display{white-space:pre-wrap;overflow-wrap:anywhere;border:1px solid var(--line-soft);background:#fbf9f4;border-radius:5px;margin:.55rem 0 0;padding:.55rem .7rem;font-size:.92rem}.search-form{flex-wrap:wrap;align-items:flex-end;gap:.5rem;margin-bottom:1.2rem;display:flex}.field{gap:.2rem;display:grid}.field label{color:var(--ink-soft);font-size:.82rem;font-weight:600}.field.grow{flex:1;min-width:14rem}.field select{width:auto}mark{color:inherit;background:#fff0b3;padding:0 .1em}.utility{overscroll-behavior:contain;border-left:1px solid var(--line);align-self:stretch;max-height:calc(100vh - 3rem);padding:1.5rem 1.25rem 2.5rem;font-size:.88rem;position:sticky;top:3rem;overflow-y:auto}.utility-panel{margin-bottom:1.5rem}.utility-panel h2{text-transform:uppercase;letter-spacing:.09em;color:var(--ink-faint);margin:0 0 .5rem;font-size:.75rem;font-weight:650}.utility-list{gap:.7rem;margin:0;padding:0;list-style:none;display:grid}.utility-list li{background:var(--surface);border:1px solid var(--line-soft);border-radius:6px;gap:.1rem;padding:.55rem .7rem;line-height:1.35;display:grid}.utility-list a{font-weight:600;text-decoration:none}.utility-list a:hover{text-decoration:underline}.utility-meta{color:var(--ink-faint);font-size:.78rem}.utility-when{color:var(--warn);font-size:.78rem;font-weight:600}.utility-score{font-variant-numeric:tabular-nums;color:var(--accent);font-weight:650}.utility-empty{border:1px dashed var(--line);color:var(--ink-soft);border-radius:6px;margin:0;padding:.55rem .7rem;font-size:.83rem}.utility-foot{border-top:1px solid var(--line);gap:.25rem;margin:0;padding-top:.9rem;font-size:.82rem;display:grid}.site-footer{border-top:1px solid var(--line);max-width:56rem;color:var(--ink-faint);background:var(--surface);padding:1.1rem 2rem 2rem;font-size:.82rem}.site-footer p{max-width:52rem;margin:0 0 .4rem}@media (width<=78rem){.layout.has-rail{grid-template-columns:var(--rail-width) minmax(0, 1fr);grid-template-rows:1fr auto auto;grid-template-areas:"nav main""nav rail""nav footer"}.utility{border-left:0;border-top:1px solid var(--line);max-height:none;padding:1.25rem 2rem 1.5rem;position:static}.utility-panel{margin-bottom:1rem}.utility-list{grid-template-columns:repeat(auto-fit,minmax(15rem,1fr))}}@media (width<=62rem){.layout{grid-template:"nav""main"1fr"footer"/minmax(0,1fr)}.layout.has-rail{grid-template:"nav""main"1fr"rail""footer"/minmax(0,1fr)}.utility{padding-inline:1rem}main{padding:1.25rem 1rem 3rem}.site-footer{padding-inline:1rem}.nav-toggle{order:2;display:block}.topbar .prototype-tag{order:3}html:not(.no-js) .nav{z-index:50;visibility:hidden;border-right:1px solid var(--line);width:min(21rem,86vw);height:100%;padding-top:.75rem;transition:transform .18s,visibility 0s linear .18s;position:fixed;inset:0 auto 0 0;transform:translate(-100%);box-shadow:0 0 2rem #00000038}html:not(.no-js) body[data-nav-open] .nav{visibility:visible;transition:transform .18s,visibility;transform:none}html:not(.no-js) body[data-nav-open] .backdrop{z-index:45;background:#1c1c1a61;border:0;display:block;position:fixed;inset:0}html.no-js .nav{border-right:0;border-bottom:1px solid var(--line);height:auto;position:static}html.no-js .nav-toggle{display:none}.drawer-head{border-bottom:1px solid var(--line);justify-content:space-between;align-items:center;gap:.5rem;margin-bottom:.5rem;padding:0 .55rem .6rem;display:flex}.on-this-page ul{columns:1}}@media (width>=62.0625rem){.drawer-head{display:none}}@media (prefers-reduced-motion:reduce){*{transition:none!important}}
