@font-face{font-family:Besley Variable;font-style:normal;font-display:swap;font-weight:400 900;src:url(/assets/besley-latin-ext-wght-normal-Dt3OBXk7.woff2)format("woff2-variations");unicode-range:U+100-2BA,U+2BD-2C5,U+2C7-2CC,U+2CE-2D7,U+2DD-2FF,U+304,U+308,U+329,U+1D00-1DBF,U+1E00-1E9F,U+1EF2-1EFF,U+2020,U+20A0-20AB,U+20AD-20C0,U+2113,U+2C60-2C7F,U+A720-A7FF}@font-face{font-family:Besley Variable;font-style:normal;font-display:swap;font-weight:400 900;src:url(/assets/besley-latin-wght-normal-IX-hlgPH.woff2)format("woff2-variations");unicode-range:U+??,U+131,U+152-153,U+2BB-2BC,U+2C6,U+2DA,U+2DC,U+304,U+308,U+329,U+2000-206F,U+20AC,U+2122,U+2191,U+2193,U+2212,U+2215,U+FEFF,U+FFFD}@font-face{font-family:Atkinson Hyperlegible Next Variable;font-style:normal;font-display:swap;font-weight:200 800;src:url(/assets/atkinson-hyperlegible-next-latin-ext-wght-normal-C6vrW8VD.woff2)format("woff2-variations");unicode-range:U+100-2BA,U+2BD-2C5,U+2C7-2CC,U+2CE-2D7,U+2DD-2FF,U+304,U+308,U+329,U+1D00-1DBF,U+1E00-1E9F,U+1EF2-1EFF,U+2020,U+20A0-20AB,U+20AD-20C0,U+2113,U+2C60-2C7F,U+A720-A7FF}@font-face{font-family:Atkinson Hyperlegible Next Variable;font-style:normal;font-display:swap;font-weight:200 800;src:url(/assets/atkinson-hyperlegible-next-latin-wght-normal-BcXVPD7q.woff2)format("woff2-variations");unicode-range:U+??,U+131,U+152-153,U+2BB-2BC,U+2C6,U+2DA,U+2DC,U+304,U+308,U+329,U+2000-206F,U+20AC,U+2122,U+2191,U+2193,U+2212,U+2215,U+FEFF,U+FFFD}@font-face{font-family:Atkinson Hyperlegible Mono Variable;font-style:normal;font-display:swap;font-weight:200 800;src:url(/assets/atkinson-hyperlegible-mono-latin-ext-wght-normal-CXgNM06D.woff2)format("woff2-variations");unicode-range:U+100-2BA,U+2BD-2C5,U+2C7-2CC,U+2CE-2D7,U+2DD-2FF,U+304,U+308,U+329,U+1D00-1DBF,U+1E00-1E9F,U+1EF2-1EFF,U+2020,U+20A0-20AB,U+20AD-20C0,U+2113,U+2C60-2C7F,U+A720-A7FF}@font-face{font-family:Atkinson Hyperlegible Mono Variable;font-style:normal;font-display:swap;font-weight:200 800;src:url(/assets/atkinson-hyperlegible-mono-latin-wght-normal-CoA7y8X5.woff2)format("woff2-variations");unicode-range:U+??,U+131,U+152-153,U+2BB-2BC,U+2C6,U+2DA,U+2DC,U+304,U+308,U+329,U+2000-206F,U+20AC,U+2122,U+2191,U+2193,U+2212,U+2215,U+FEFF,U+FFFD}:root{--paper:#f3eee3;--paper-raised:#fbf8f2;--paper-sunk:#e9e2d3;--desk:#d6cebd;--ink:#1b242e;--ink-2:#414c57;--ink-3:#5d6772;--rule:#cdc3ae;--rule-strong:#9d937e;--stamp:#a8321f;--stamp-wash:#f4dcd3;--ledger:#27584a;--ledger-wash:#dbe8e1;--ochre:#7d5600;--ochre-wash:#f3e3bd;--serif:"Besley Variable", "Besley", "Iowan Old Style", "Palatino Linotype", Georgia, serif;--sans:"Atkinson Hyperlegible Next Variable", "Atkinson Hyperlegible Next", "Segoe UI", system-ui, sans-serif;--mono:"Atkinson Hyperlegible Mono Variable", "Atkinson Hyperlegible Mono", ui-monospace, "Cascadia Mono", Consolas, monospace;--radius:3px;--gutter:clamp(16px, 2.4vw, 32px)}*{box-sizing:border-box}html{-webkit-text-size-adjust:100%}body{background:var(--paper);color:var(--ink);font:16px/1.5 var(--sans);font-feature-settings:"tnum" 1;margin:0}h1,h2,h3{font-family:var(--serif);letter-spacing:-.005em;margin:0;font-weight:600;line-height:1.2}h1{font-size:clamp(1.6rem,2.6vw,2.15rem)}h2{font-size:1.25rem}h3{font-size:1.02rem}p{margin:0 0 .75em}a{color:var(--ink);text-underline-offset:3px;text-decoration-thickness:1px}a:hover{text-decoration-thickness:2px}small,.small{font-size:.85rem}.muted{color:var(--ink-3)}.mono{font-family:var(--mono)}.sr-only{clip:rect(0 0 0 0);white-space:nowrap;width:1px;height:1px;position:absolute;overflow:hidden}[lang]:not([lang=en]){font-family:var(--sans), "Noto Sans", "Noto Sans Arabic", "Noto Sans Devanagari", "Microsoft YaHei", "Malgun Gothic", "Nirmala UI", sans-serif}:focus-visible{outline:2px solid var(--ink);outline-offset:2px;border-radius:2px}.masthead :focus-visible{outline-color:var(--paper)}.skip{background:var(--ink);color:var(--paper);z-index:50;padding:8px 12px;position:absolute;top:-60px;left:8px}.skip:focus{top:8px}.masthead{background:var(--ink);color:var(--paper);border-bottom:3px double var(--rule-strong)}.masthead-in{padding:10px var(--gutter);flex-wrap:wrap;align-items:center;gap:28px;display:flex}.wordmark{color:var(--paper);font:600 1.45rem/1 var(--serif);letter-spacing:.01em;align-items:center;gap:10px;text-decoration:none;display:flex}.seal{border:1.5px solid var(--paper);border-radius:50%;flex:none;place-items:center;width:30px;height:30px;display:grid;position:relative}.seal:before{content:"";border:1px dashed #f3eee3b3;border-radius:50%;position:absolute;inset:3px}.seal span{font:700 11px/1 var(--serif);letter-spacing:.02em}.nav{flex-wrap:wrap;flex:1;gap:4px;display:flex}.nav a{color:#d9d3c6;border-radius:var(--radius);border-bottom:2px solid #0000;padding:7px 11px;font-size:.95rem;text-decoration:none}.nav a:hover{color:#fff;background:#ffffff12}.nav a[aria-current=page]{color:#fff;border-radius:var(--radius) var(--radius) 0 0;border-bottom-color:#e2543c}.local-note{color:#c9c2b3;align-items:center;gap:7px;font-size:.8rem;display:flex}.local-note:before{content:"";border:1.5px solid #9fd1bd;border-radius:50%;width:8px;height:8px}main{padding:26px var(--gutter) 64px;max-width:1500px;margin:0 auto}main.wide{max-width:none}.page-head{border-bottom:1px solid var(--rule);flex-wrap:wrap;justify-content:space-between;align-items:flex-end;gap:16px;margin-bottom:18px;padding-bottom:12px;display:flex}.kicker{font:600 .72rem/1 var(--mono);letter-spacing:.14em;text-transform:uppercase;color:var(--ink-3);margin-bottom:7px}.lede{max-width:68ch;color:var(--ink-2)}button,input,select,textarea{font:inherit;color:inherit}.btn{border-radius:var(--radius);border:1.5px solid var(--ink);background:var(--paper-raised);cursor:pointer;align-items:center;gap:8px;min-height:38px;padding:8px 14px;font-size:.92rem;font-weight:600;line-height:1.2;text-decoration:none;display:inline-flex}.btn:hover{background:var(--paper-sunk)}.btn.primary{background:var(--ink);color:var(--paper)}.btn.primary:hover{background:#2c3946}.btn.quiet{text-underline-offset:3px;background:0 0;border-color:#0000;padding-inline:6px;font-weight:500;text-decoration:underline}.btn.quiet:hover{background:var(--paper-sunk)}.btn.danger{border-color:var(--stamp);color:var(--stamp)}.btn.small{min-height:30px;padding:4px 9px;font-size:.84rem}.btn:disabled{opacity:.5;cursor:not-allowed}.btn svg{flex:none;width:16px;height:16px}input[type=text],input[type=number],input[type=url],input[type=date],select,textarea{background:var(--paper-raised);border:1px solid var(--rule-strong);border-radius:var(--radius);max-width:100%;min-height:34px;padding:6px 8px}textarea{resize:vertical;width:100%;min-height:84px;line-height:1.45}input:hover,select:hover,textarea:hover{border-color:var(--ink-2)}label.field{color:var(--ink-2);gap:4px;min-width:0;font-size:.86rem;font-weight:600;display:grid}label.field input,label.field select{color:var(--ink);width:100%;min-width:0;font-size:.95rem;font-weight:400}.row{flex-wrap:wrap;align-items:center;gap:10px;display:flex}.grid2{grid-template-columns:repeat(auto-fit,minmax(220px,1fr));gap:12px 18px;display:grid}.ledger{border-collapse:collapse;background:var(--paper-raised);border:1px solid var(--rule);width:100%}.ledger caption{text-align:left;padding:0 0 8px}.ledger th{text-align:left;font:600 .7rem/1.2 var(--mono);letter-spacing:.1em;text-transform:uppercase;color:var(--ink-2);border-bottom:3px double var(--rule-strong);background:var(--paper-sunk);vertical-align:bottom;white-space:nowrap;padding:9px 10px 8px}.ledger td{border-bottom:1px solid var(--rule);vertical-align:top;padding:8px 10px}.ledger tr:last-child td{border-bottom:none}.ledger td.num,.ledger th.num{text-align:right;font-family:var(--mono)}.ledger tbody tr:hover{background:#f6f1e6}.ledger tr.clickable{cursor:pointer}.ledger .rowlink{color:inherit;font-weight:600;text-decoration:none}.ledger .rowlink:hover{text-decoration:underline}.table-wrap{border-radius:var(--radius);overflow-x:auto}.stamp{font:700 .68rem/1 var(--mono);letter-spacing:.14em;text-transform:uppercase;white-space:nowrap;color:var(--ink-3);border:1.5px solid;border-radius:3px;padding:4px 8px 3px;display:inline-block;transform:rotate(-1.6deg)}.stamp.extracted{color:var(--ochre)}.stamp.reviewed{color:var(--ledger)}.stamp.finalised{color:var(--stamp);border-style:double;border-width:3px;padding:3px 8px 2px}.stamp.flat{transform:none}.conf{font:.78rem var(--mono);color:var(--ink-2);white-space:nowrap;align-items:center;gap:6px;display:inline-flex}.conf-bar{gap:2px;display:inline-flex}.conf-bar i{border:1px solid var(--ink-2);background:0 0;width:5px;height:12px}.conf-bar i.on{background:var(--ink-2)}.conf.low{color:var(--stamp);font-weight:700}.conf.low .conf-bar i{border-color:var(--stamp)}.conf.low .conf-bar i.on{background:repeating-linear-gradient(135deg, var(--stamp) 0 2px, transparent 2px 4px)}.conf.mid{color:var(--ochre)}.conf.mid .conf-bar i{border-color:var(--ochre)}.conf.mid .conf-bar i.on{background:var(--ochre)}.panel{background:var(--paper-raised);border:1px solid var(--rule);border-radius:var(--radius);padding:16px 18px}.panel+.panel{margin-top:16px}.panel>h2{border-bottom:1px solid var(--rule);align-items:baseline;gap:10px;margin-bottom:12px;padding-bottom:8px;display:flex}.panel>h2 .count{font:600 .78rem var(--mono);color:var(--ink-3);letter-spacing:.04em}.notice{border:1px solid var(--rule-strong);border-left:5px solid var(--ink-2);background:var(--paper-raised);border-radius:var(--radius);padding:12px 14px}.notice.error{border-left-color:var(--stamp)}.notice.ok{border-left-color:var(--ledger)}.notice.check{border-left-color:var(--ochre)}.notice h3{margin-bottom:4px}.tag{font:600 .7rem/1 var(--mono);letter-spacing:.06em;background:var(--paper-sunk);color:var(--ink-2);border:1px solid var(--rule);white-space:nowrap;border-radius:2px;padding:3px 6px;display:inline-block}.tag.check{background:var(--ochre-wash);color:var(--ochre);border-color:#d9c48b}.tag.important{background:var(--stamp-wash);color:var(--stamp);border-color:#e2b6aa}.tag.ok{background:var(--ledger-wash);color:var(--ledger);border-color:#b3cdc1}.source{color:var(--ink-3);font-size:.8rem}.source a{color:var(--ink-2)}.drop{border:2px dashed var(--rule-strong);background:var(--paper-raised);border-radius:6px;justify-items:start;gap:14px;padding:26px 24px;transition:background .15s,border-color .15s;display:grid}.drop.over{background:var(--ledger-wash);border-color:var(--ledger)}.drop h2{font-size:1.4rem}.drop-grid{grid-template-columns:minmax(0,1.3fr) minmax(0,1fr);align-items:start;gap:24px;width:100%;display:grid}.steps{counter-reset:s;gap:8px;margin:0;padding:0;list-style:none;display:grid}.steps li{counter-increment:s;color:var(--ink-2);grid-template-columns:28px 1fr;gap:10px;font-size:.92rem;display:grid}.steps li:before{content:counter(s, upper-roman) ".";font:600 .9rem var(--serif);color:var(--ink)}.empty{text-align:center;border:1px solid var(--rule);background:repeating-linear-gradient(var(--paper-raised) 0 31px, var(--rule) 31px 32px);border-radius:var(--radius);padding:44px 20px}.empty h2{background:var(--paper-raised);padding:4px 14px;display:inline-block}.empty p{background:var(--paper-raised);max-width:56ch;color:var(--ink-2);padding:2px 12px;display:inline-block}.case-head{border-bottom:1px solid var(--rule);flex-wrap:wrap;align-items:center;gap:14px 22px;margin-bottom:16px;padding:4px 0 14px;display:flex}.case-head h1{font-size:1.55rem}.case-no{font:600 .82rem var(--mono);letter-spacing:.1em;color:var(--ink-3)}.case-actions{flex-wrap:wrap;align-items:center;gap:8px;margin-left:auto;display:flex}.workspace{grid-template-columns:minmax(320px,.72fr) minmax(0,1.5fr);align-items:start;gap:20px;display:grid}.viewer{background:var(--desk);border:1px solid var(--rule-strong);border-radius:var(--radius);flex-direction:column;height:calc(100vh - 20px);min-height:420px;display:flex;position:sticky;top:10px}.viewer-bar{background:var(--paper-sunk);border-bottom:1px solid var(--rule-strong);align-items:center;gap:8px;padding:7px 10px;font-size:.84rem;display:flex}.viewer-scroll{flex:1;padding:14px;overflow:auto}.page{box-shadow:0 1px 0 var(--rule-strong), 0 6px 18px #1b242e2e;background:#fff;margin:0 auto 14px;position:relative}.page img{width:100%;height:auto;display:block}.page .hl{border:2px solid var(--stamp);pointer-events:none;background:#a8321f24;border-radius:2px;position:absolute;box-shadow:0 0 0 3px #f3eee3bf}.page .tok{white-space:nowrap;color:#111;line-height:1;font-family:var(--sans);position:absolute}.page-no{text-align:center;font:.72rem var(--mono);color:var(--ink-2);margin:-8px 0 12px}.subnav{background:var(--paper);z-index:5;border-bottom:1px solid var(--rule);flex-wrap:wrap;gap:4px;margin-bottom:12px;padding:8px 0;display:flex;position:sticky;top:0}.subnav a{border-radius:var(--radius);color:var(--ink-2);border:1px solid #0000;padding:5px 10px;font-size:.88rem;font-weight:600;text-decoration:none}.subnav a:hover{border-color:var(--rule-strong)}.kv{grid-template-columns:minmax(130px,.5fr) minmax(0,1.5fr) auto;align-items:center;gap:6px 12px;display:grid}.kv dt{color:var(--ink-2);font-size:.84rem;font-weight:600}.kv dd{min-width:0;margin:0}.kv input,.kv select{width:100%}.orig{color:var(--ink-3);margin-top:2px;font-size:.8rem;display:block}.locate{cursor:pointer;color:var(--ink-3);background:0 0;border:none;border-radius:2px;padding:3px}.locate:hover{color:var(--stamp);background:var(--paper-sunk)}.locate svg{width:16px;height:16px;display:block}.courses th.period{background:var(--ink);color:var(--paper);font:600 .86rem var(--sans);letter-spacing:0;text-transform:none;white-space:normal;vertical-align:middle;border-bottom:none;padding:4px 10px}.courses th.period .row{justify-content:space-between}.courses th.period select{color:var(--paper);background:#2c3946;border-color:#56626e;width:auto;min-height:26px;padding:1px 6px;font-size:.82rem}.courses th.period .locate{vertical-align:middle}.courses td{padding:6px 8px}.courses input,.courses select{width:100%;min-height:30px;padding:3px 6px;font-size:.9rem}.courses .name-en{font-weight:600}.courses input.grade,.courses input.cr{text-align:right;width:62px;font-family:var(--mono)}.courses select.letter{width:62px}.courses tr.review td:first-child{box-shadow:inset 4px 0 0 var(--ochre)}.courses tr.accepted td:first-child{box-shadow:inset 4px 0 0 var(--ledger)}.courses tr.excluded{opacity:.55}.courses tr.excluded .name-en,.courses tr.excluded .orig{text-decoration:line-through}.courses tr.why td{background:var(--paper);border-bottom:1px solid var(--rule-strong);padding:10px 14px 12px 22px}.why-list{gap:5px;margin:0;padding-left:18px;font-size:.9rem;display:grid}.rowbtns{flex-wrap:wrap;align-items:center;gap:4px;display:flex}.ledger td.mono,.ledger .nowrap{white-space:nowrap}.edited{border-left:3px solid var(--ledger)!important}.flags{gap:8px;margin:0;padding:0;list-style:none;display:grid}.flags li{border:1px solid var(--rule);border-radius:var(--radius);background:var(--paper);grid-template-columns:auto 1fr auto;align-items:start;gap:10px;padding:9px 10px;display:grid}.flags li.done{opacity:.6}.flags li.done strong{text-decoration:line-through}.flags strong{display:block}.req{grid-template-columns:minmax(150px,1.2fr) minmax(120px,2fr) auto;align-items:center;gap:6px 12px;font-size:.92rem;display:grid}.bar{border:1px solid var(--ink-2);background:repeating-linear-gradient(90deg, transparent 0 9px, var(--rule) 9px 10px);height:14px;position:relative}.bar i{background:var(--ledger);position:absolute;inset:0 auto 0 0}.bar.full i{background:var(--ink)}.req .nums{font-family:var(--mono);white-space:nowrap;font-size:.84rem}.reading{gap:12px;padding:22px;display:grid}.reading .lines{gap:9px;display:grid}.reading .lines i{background:linear-gradient(90deg, var(--rule) 0%, var(--paper-sunk) 50%, var(--rule) 100%);background-size:200% 100%;border-radius:2px;height:10px;animation:1.6s linear infinite sweep}.reading .lines i:nth-child(2){width:82%}.reading .lines i:nth-child(3){width:64%}.reading .lines i:nth-child(4){width:90%}.reading .lines i:nth-child(5){width:48%}@keyframes sweep{to{background-position:-200% 0}}.log{gap:5px;max-height:260px;margin:0;padding:0;font-size:.86rem;list-style:none;display:grid;overflow:auto}.log time{font-family:var(--mono);color:var(--ink-3);font-size:.78rem}.prose{max-width:72ch}.prose h2{margin:26px 0 8px}.prose ul{padding-left:20px}.prose li{margin-bottom:6px}.two-col{grid-template-columns:minmax(220px,300px) minmax(0,1fr);align-items:start;gap:22px;display:grid}.side-list{border:1px solid var(--rule);border-radius:var(--radius);background:var(--paper-raised);max-height:calc(100vh - 20px);margin:0;padding:0;list-style:none;position:sticky;top:10px;overflow:auto}.side-list a{border-bottom:1px solid var(--rule);padding:9px 12px;font-size:.92rem;text-decoration:none;display:block}.side-list li:last-child a{border-bottom:none}.side-list a:hover{background:var(--paper-sunk)}.side-list a[aria-current=true]{background:var(--ink);color:var(--paper)}.side-list .grp{font:600 .68rem var(--mono);letter-spacing:.12em;text-transform:uppercase;color:var(--ink-3);background:var(--paper-sunk);border-bottom:1px solid var(--rule);padding:8px 12px 5px}dialog{border:1.5px solid var(--ink);background:var(--paper-raised);color:var(--ink);border-radius:4px;max-width:min(560px,92vw);padding:20px 22px}dialog::backdrop{background:#1b242e80}@media (max-width:1080px){.workspace{grid-template-columns:1fr}.viewer{height:62vh;position:static}.drop-grid,.two-col{grid-template-columns:1fr}.side-list{max-height:260px;position:static}}@media (prefers-reduced-motion:reduce){*,:before,:after{scroll-behavior:auto!important;transition:none!important;animation:none!important}}.report{color:#111;background:#fff;max-width:8.5in;margin:0 auto;padding:.7in .75in;font-size:10.5pt;line-height:1.4;box-shadow:0 2px 22px #1b242e2e}.report h1{font-size:20pt}.report h2{border-bottom:1.5pt solid #111;margin:18pt 0 6pt;padding-bottom:3pt;font-size:12.5pt}.report .letterhead{border-bottom:3pt double #111;justify-content:space-between;align-items:flex-end;gap:16pt;margin-bottom:12pt;padding-bottom:8pt;display:flex}.report table{border-collapse:collapse;width:100%;margin-bottom:8pt;font-size:9pt}.report th{text-align:left;font:600 7.5pt var(--mono);letter-spacing:.06em;text-transform:uppercase;vertical-align:bottom;border-bottom:1pt solid #111;padding:3pt 4pt}.report td{vertical-align:top;border-bottom:.5pt solid #bbb;padding:3pt 4pt}.report td.num,.report th.num{text-align:right;font-family:var(--mono)}.report .meta{grid-template-columns:1fr 1fr;gap:2pt 24pt;display:grid}.report .meta div{gap:6pt;display:flex}.report .meta dt{min-width:92pt;font-weight:700}.report .meta dd{margin:0}.report .period-row td{background:#f0f0f0;border-bottom:1pt solid #111;font-weight:700}.report .fine{color:#333;font-size:8pt}.report .sig{grid-template-columns:1fr 1fr;gap:30pt;margin-top:34pt;display:grid}.report .sig div{border-top:1pt solid #111;padding-top:3pt;font-size:8.5pt}.report .mark{font:700 7pt var(--mono);border:.75pt solid #111;margin-left:3pt;padding:0 2pt}@page{size:letter;margin:.6in}@media print{.masthead,.no-print,.skip{display:none!important}body{background:#fff}main{max-width:none;padding:0}.report{box-shadow:none;max-width:none;padding:0}.report tr,.report .keep{break-inside:avoid}.report h2{break-after:avoid}}
