:root{--paper:#faf7f1;--surface:#fffdf8;--ink:#1c1a17;--muted:#5c554b;--line:#e3dccf;--line-strong:#cfc5b3;--gold:#be830e;--gold-ink:#7f5500;--gold-wash:#f5ead3;--ok:#2f6a3a;--ok-wash:#e6f0e4;--warn:#8a4a00;--warn-wash:#fbecd9;--bad:#a1301f;--bad-wash:#f8e3de;--info:#2c5a7a;--info-wash:#e2edf4;--focus:#be830e;--serif:"Fraunces", Georgia, "Times New Roman", serif;--sans:"Public Sans", system-ui, -apple-system, "Segoe UI", sans-serif;--s1:.25rem;--s2:.5rem;--s3:.75rem;--s4:1rem;--s5:1.5rem;--s6:2rem;--s7:3rem;--radius:10px;--gutter:clamp(1rem, 4vw, 2.5rem);--hue-0:#be830e;--hue-1:#2f7d74;--hue-2:#7a4d8c;--hue-3:#3d6aa8;--hue-4:#9a5a2c;--hue-5:#5d7a2e;color-scheme:light}@media (prefers-color-scheme:dark){:root{--paper:#16140f;--surface:#1e1b15;--ink:#f1ece2;--muted:#b3aa9a;--line:#342f26;--line-strong:#4a4336;--gold:#d9a441;--gold-ink:#e6b85c;--gold-wash:#2e2514;--ok:#8fcf98;--ok-wash:#1b2a1d;--warn:#f0b35e;--warn-wash:#2e2110;--bad:#f29a8a;--bad-wash:#321a16;--info:#9cc6e6;--info-wash:#16232d;--focus:#e6b85c;color-scheme:dark}}*,:before,:after{box-sizing:border-box}html{-webkit-text-size-adjust:100%}body{background:var(--paper);color:var(--ink);font:400 1rem/1.55 var(--sans);font-feature-settings:"tnum" 0;margin:0}h1,h2,h3{margin:0;line-height:1.2}h1{font:600 clamp(2rem, 4.5vw, 2.9rem) / 1.08 var(--serif);letter-spacing:-.015em;font-variation-settings:"opsz" 120}h2{font:600 1.35rem/1.2 var(--serif);font-variation-settings:"opsz" 36}h3{font-size:1rem;font-weight:600}p{margin:0}a{color:inherit;text-decoration-color:var(--gold);text-underline-offset:3px;text-decoration-thickness:1.5px}a:hover{color:var(--gold-ink)}:focus-visible{outline:2.5px solid var(--focus);outline-offset:2px;border-radius:4px}[hidden]{display:none!important}.visually-hidden{clip-path:inset(50%);white-space:nowrap;width:1px;height:1px;position:absolute;overflow:hidden}.skip{left:var(--s4);z-index:10;padding:var(--s2) var(--s4);background:var(--ink);color:var(--paper);border-radius:6px;position:absolute;top:-3rem}.skip:focus{top:var(--s3)}.code{font:600 .8rem/1 var(--sans);letter-spacing:.06em;font-variant-numeric:tabular-nums;color:var(--gold-ink)}.eyebrow{letter-spacing:.08em;text-transform:uppercase;color:var(--gold-ink);margin-bottom:var(--s2);font-size:.8rem;font-weight:600}.note{color:var(--muted);font-size:.85rem}.button{justify-content:center;align-items:center;gap:var(--s2);min-height:2.5rem;padding:0 var(--s5);border:1.5px solid var(--ink);background:var(--ink);color:var(--paper);font:600 .95rem/1 var(--sans);cursor:pointer;border-radius:999px;transition:background .15s,color .15s,border-color .15s;display:inline-flex}.button:hover{background:var(--gold-ink);border-color:var(--gold-ink);color:var(--paper)}.button--quiet{color:var(--ink);border-color:var(--line-strong);padding:0 var(--s4);background:0 0;min-height:2.25rem}.button--quiet:hover{background:var(--gold-wash);color:var(--ink);border-color:var(--gold)}.button--wide{width:100%;min-height:3rem;padding:var(--s2) var(--s4);text-align:center;line-height:1.25}html.js [data-no-js]{display:none}input,select{font:inherit;color:inherit}.masthead{border-bottom:1px solid var(--line);background:var(--surface)}.masthead__inner{max-width:82rem;padding:var(--s3) var(--gutter);justify-content:space-between;align-items:center;gap:var(--s3) var(--s5);flex-wrap:wrap;margin:0 auto;display:flex}.brand{align-items:center;gap:var(--s3);text-decoration:none;display:inline-flex}.brand__mark{background:var(--ink);height:2.1rem;color:var(--gold);font:600 .95rem/1 var(--serif);letter-spacing:.08em;border-radius:4px;place-items:center;padding:0 .55rem;display:inline-grid}.brand__name{font:600 1.1rem/1 var(--serif)}.masthead nav{gap:var(--s4);font-size:.92rem;display:flex}.masthead nav a{padding:var(--s2) 0;border-bottom:2px solid #0000;text-decoration:none}.masthead nav a[aria-current=page]{border-bottom-color:var(--gold);font-weight:600}.footer{max-width:82rem;margin:var(--s7) auto 0;padding:var(--s5) var(--gutter) var(--s6);border-top:1px solid var(--line);color:var(--muted);font-size:.85rem}.enrol,.course,.readme{max-width:82rem;padding:var(--s6) var(--gutter) 0;margin:0 auto}.page-head{justify-content:space-between;align-items:flex-end;gap:var(--s5);padding-bottom:var(--s5);margin-bottom:var(--s5);border-bottom:3px solid var(--gold);flex-wrap:wrap;display:flex}.lede{margin-top:var(--s3);max-width:38rem;color:var(--muted);font-size:1.05rem}.who{gap:var(--s1);font-size:.85rem;display:grid}.who label{color:var(--muted);font-weight:600}.who__row{gap:var(--s2);display:flex}.who select{min-height:2.5rem;padding:0 var(--s6) 0 var(--s3);border:1.5px solid var(--line-strong);background:var(--surface);border-radius:8px;max-width:100%;font-size:.95rem}.plan-summary{display:none}.banner{justify-content:space-between;align-items:center;gap:var(--s3);padding:var(--s3) var(--s4);margin-bottom:var(--s5);border-radius:var(--radius);border:1px solid var(--line-strong);background:var(--surface);flex-wrap:wrap;display:flex}.banner--ok{background:var(--ok-wash);border-color:color-mix(in srgb, var(--ok) 35%, transparent)}.banner--bad{background:var(--bad-wash);border-color:color-mix(in srgb, var(--bad) 35%, transparent)}.layout{gap:var(--s6);grid-template-columns:minmax(0,1fr) minmax(20rem,26rem);align-items:start;display:grid}.filters{align-items:flex-end;gap:var(--s3) var(--s4);margin-bottom:var(--s4);flex-wrap:wrap;display:flex}.search{gap:var(--s2);flex:100%;display:grid}.search label,.chips legend{color:var(--muted);font-size:.85rem;font-weight:600}.search input{width:100%;min-height:3rem;padding:0 var(--s4);border:1.5px solid var(--line-strong);border-radius:var(--radius);background:var(--surface);font-size:1.05rem}.search input:focus-visible{border-color:var(--gold)}.chips{gap:var(--s2);border:0;flex-wrap:wrap;margin:0;padding:0;display:flex}.chips legend{float:left;width:100%;margin-bottom:var(--s2)}.chip{display:inline-flex;position:relative}.chip input{opacity:0;cursor:pointer;margin:0;position:absolute;inset:0}.chip span{min-height:2.25rem;padding:0 var(--s4);border:1.5px solid var(--line-strong);background:var(--surface);border-radius:999px;align-items:center;font-size:.9rem;font-weight:500;display:inline-flex}.chip input:checked+span{background:var(--ink);border-color:var(--ink);color:var(--paper)}.chip input:focus-visible+span{outline:2.5px solid var(--focus);outline-offset:2px}.chip--toggle span:before{content:"";width:.85rem;height:.85rem;margin-right:var(--s2);border:1.5px solid;border-radius:3px}.chip--toggle input:checked+span:before{background:var(--gold);border-color:var(--gold);box-shadow:inset 0 0 0 2px var(--ink)}.count{color:var(--muted);margin-bottom:var(--s3);font-size:.85rem}.empty{padding:var(--s5);border:1px dashed var(--line-strong);border-radius:var(--radius);color:var(--muted)}.courses{gap:var(--s3);margin:0;padding:0;list-style:none;display:grid}.card article{gap:var(--s2);padding:var(--s4) var(--s5) var(--s4) calc(var(--s5) + 4px);background:var(--surface);border:1px solid var(--line);border-radius:var(--radius);display:grid;position:relative;overflow:hidden}.card article:before{content:"";background:var(--line-strong);width:4px;position:absolute;inset:0 auto 0 0}.card--ok article:before{background:var(--ok)}.card--warn article:before{background:var(--warn)}.card--done article:before{background:var(--gold)}.card--bad article:before{background:var(--bad)}.card--info article:before{background:var(--info)}.card--done article{background:color-mix(in srgb, var(--gold-wash) 55%, var(--surface))}.card__title a{align-items:baseline;gap:var(--s1) var(--s3);flex-wrap:wrap;text-decoration:none;display:flex}.card__title .name{font:600 1.2rem/1.25 var(--serif);font-variation-settings:"opsz" 30}.card__title a:hover .name{text-decoration:underline;text-decoration-color:var(--gold)}.card__meta{gap:0 var(--s3);color:var(--muted);flex-wrap:wrap;font-size:.85rem;display:flex}.card__meta span+span:before{content:"·";margin-right:var(--s3);color:var(--line-strong)}.card__summary{max-width:62ch;font-size:.95rem}.card__times{font-variant-numeric:tabular-nums;font-size:.85rem}.card__foot{justify-content:space-between;align-items:center;gap:var(--s3);margin-top:var(--s2);padding-top:var(--s3);border-top:1px solid var(--line);flex-wrap:wrap;display:flex}.card__foot form{margin-left:auto}.status{align-items:flex-start;gap:var(--s2);max-width:48ch;font-size:.9rem;font-weight:500;display:flex}.status__icon{width:1.3rem;height:1.3rem;font:700 .75rem/1 var(--sans);color:var(--paper);background:var(--muted);border-radius:50%;flex:none;place-items:center;margin-top:.05rem;display:inline-grid}.status--ok{color:var(--ok)}.status--ok .status__icon{background:var(--ok)}.status--warn{color:var(--warn)}.status--warn .status__icon{background:var(--warn)}.status--done{color:var(--gold-ink)}.status--done .status__icon{background:var(--gold)}.status--bad{color:var(--bad)}.status--bad .status__icon{background:var(--bad)}.status--info{color:var(--info)}.status--info .status__icon{background:var(--info);font-family:var(--serif);font-style:italic}.status--muted{color:var(--muted)}[data-refusal]{padding:var(--s2) var(--s3);background:var(--bad-wash);border-radius:8px}.plan{top:var(--s4);max-height:calc(100vh - 2rem);padding:var(--s5);background:var(--surface);border:1px solid var(--line);border-radius:calc(var(--radius) + 4px);gap:var(--s4);display:grid;position:sticky;overflow:auto}.plan__head{gap:var(--s3);display:grid}.plan__load{gap:var(--s2);color:var(--muted);font-variant-numeric:tabular-nums;font-size:.9rem;display:grid}.plan__units strong{font:600 1.6rem/1 var(--serif);color:var(--ink);margin-right:.15em}.meter{background:var(--line);border-radius:999px;height:6px;display:block;overflow:hidden}.meter span{background:var(--gold);border-radius:inherit;height:100%;transition:width .3s;display:block}.plan__empty{padding:var(--s4);border:1px dashed var(--line-strong);border-radius:var(--radius);color:var(--muted);font-size:.92rem}.plan__list{gap:var(--s2);margin:0;padding:0;list-style:none;display:grid}.plan__row{align-items:center;gap:var(--s3);padding:var(--s2) var(--s2) var(--s2) var(--s3);border:1px solid var(--line);border-radius:8px;grid-template-columns:auto 1fr auto;display:grid}.plan__row--new{animation:1.6s ease-out arrive}@keyframes arrive{0%{background:var(--gold-wash);border-color:var(--gold)}}.plan__swatch{background:var(--swatch);border-radius:3px;width:.7rem;height:.7rem}.plan__course{min-width:0;display:grid}.plan__course a{text-decoration:none;display:grid}.plan__course .name{font-size:.93rem;font-weight:600;line-height:1.3}.plan__units-small{color:var(--muted);font-size:.8rem}[data-hue="0"]{--swatch:var(--hue-0)}[data-hue="1"]{--swatch:var(--hue-1)}[data-hue="2"]{--swatch:var(--hue-2)}[data-hue="3"]{--swatch:var(--hue-3)}[data-hue="4"]{--swatch:var(--hue-4)}[data-hue="5"]{--swatch:var(--hue-5)}.week{gap:var(--s3);padding-top:var(--s4);border-top:1px solid var(--line);display:grid}.week h3{font:600 1.05rem/1.2 var(--serif);justify-content:space-between;align-items:center;display:flex}.week__clash-count{font:600 .75rem/1 var(--sans);background:var(--warn-wash);color:var(--warn);border-radius:999px;padding:.3rem .6rem}.week__grid{grid-template-columns:1.6rem repeat(10,minmax(0,1fr));grid-template-rows:1.5rem repeat(var(--rows), .95rem);background:repeating-linear-gradient(to bottom, var(--line) 0 1px, transparent 1px 1.9rem) 0 1.5rem / 100% calc(100% - 1.5rem) no-repeat;column-gap:3px;font-size:.7rem;display:grid}.week__day{text-align:center;color:var(--muted);grid-row:1;font-weight:600}.week__hour{color:var(--muted);font-variant-numeric:tabular-nums;grid-column:1;transform:translateY(-.45em)}.week__blocks{list-style:none;display:contents}.week__block{background:color-mix(in srgb, var(--swatch) 18%, var(--surface));border-left:3px solid var(--swatch);border-radius:5px;align-content:start;gap:1px;margin:1px 0;padding:3px 4px;line-height:1.15;display:grid;position:relative;overflow:hidden}.week__name{-webkit-line-clamp:3;-webkit-box-orient:vertical;font-size:.62rem;font-weight:600;display:-webkit-box;overflow:hidden}.week__when{clip-path:inset(50%);white-space:nowrap;width:1px;height:1px;position:absolute;overflow:hidden}.week__block--clash{outline:2px dashed var(--warn);outline-offset:-1px;z-index:1}.week__clashes{padding:var(--s2) var(--s3);background:var(--warn-wash);color:var(--warn);border-radius:8px;margin:0;font-size:.82rem;font-weight:500;list-style:none}.week__later{font-size:.82rem}.week__note{color:var(--muted);font-size:.78rem}.crumb{margin-bottom:var(--s5);font-size:.9rem}.course h1{max-width:40ch;padding-bottom:var(--s5);margin-bottom:var(--s6);border-bottom:3px solid var(--gold)}.course h1 .code{margin-bottom:var(--s2);font-size:.9rem;display:block}.course__layout{gap:var(--s7);grid-template-columns:minmax(0,1fr) minmax(17rem,22rem);align-items:start;display:grid}.course__body{gap:var(--s6);max-width:68ch;display:grid}.course__body section{gap:var(--s3);display:grid}.course__body h3{margin-top:var(--s2)}.times{gap:var(--s1);font-variant-numeric:tabular-nums;margin:0;padding:0;list-style:none;display:grid}.times--grid{gap:var(--s2);grid-template-columns:repeat(auto-fill,minmax(9.5rem,1fr));font-size:.9rem}.times--grid li{padding:var(--s2) var(--s3);border:1px solid var(--line);background:var(--surface);border-radius:6px}.course__side{top:var(--s4);gap:var(--s4);padding:var(--s5);background:var(--surface);border:1px solid var(--line);border-radius:calc(var(--radius) + 4px);display:grid;position:sticky}.facts{gap:var(--s2) var(--s4);padding-top:var(--s4);border-top:1px solid var(--line);grid-template-columns:auto 1fr;margin:0;font-size:.9rem;display:grid}.facts dt{color:var(--muted)}.facts dd{font-variant-numeric:tabular-nums;margin:0;font-weight:500}.readme{max-width:46rem}.readme h1{margin-bottom:var(--s5)}.readme h2{margin:var(--s6) 0 var(--s3)}.readme p,.readme ul,.readme ol{margin:0 0 var(--s4)}.readme img{border:1px solid var(--line);border-radius:var(--radius);max-width:100%;height:auto}@media (width<=60rem){.layout,.course__layout{grid-template-columns:1fr}.plan,.course__side{max-height:none;position:static}.plan-summary{z-index:5;margin:0 calc(var(--gutter) * -1) var(--s4);padding:var(--s3) var(--gutter);background:var(--ink);color:var(--paper);justify-content:space-between;font-size:.92rem;font-weight:600;text-decoration:none;display:flex;position:sticky;top:0}.plan-summary:hover{color:var(--gold)}}@media (width<=30rem){.who,.who__row,.who select{width:100%}.card article{padding-inline:calc(var(--s4) + 4px) var(--s4)}.card__foot form,.card__foot .button{width:100%}}@media (prefers-reduced-motion:reduce){*,:before,:after{transition:none!important;animation:none!important}}.home{max-width:46rem;padding:var(--s7) var(--gutter) 0;margin:0 auto}.home h1{padding-bottom:var(--s5);border-bottom:3px solid var(--gold);font-size:clamp(2.2rem,5.5vw,3.6rem)}.home .lede{margin-top:var(--s5);font-size:1.15rem}.home__actions{align-items:center;gap:var(--s5);margin-top:var(--s6);flex-wrap:wrap;display:flex}.home__actions .button{min-height:3rem;text-decoration:none}
