:root{--bg:#fff;--paper:#fff;--surface:#f5f8fc;--surface-strong:#edf4fb;--ink:#111827;--muted:#556171;--faint:#8792a2;--line:#d7e0eb;--accent:#1d4f91;--accent-strong:#123e73;--accent-soft:#e7f0fb;--bad:#9f1d1d;--good:#1d4f91;--code-bg:#0f172a;--code-line:#1e2d46;--code-text:#eef4fb;--code-muted:#98a6b8;--code-keyword:#8fc7ff;--code-string:#99e2bd;--code-number:#f4d37c;--code-comment:#8996a8;--max-text:820px;--max-page:1060px;--max-wide:1120px;color-scheme:light;font-family:Segoe UI,Arial,sans-serif}*{box-sizing:border-box}html{background:var(--bg);color:var(--ink)}body{background:var(--bg);text-rendering:optimizelegibility;min-width:320px;margin:0;overflow-x:hidden}a{color:inherit;text-decoration-color:var(--accent);text-underline-offset:.18em;text-decoration-thickness:1px}a:hover{color:var(--accent)}.site-header{background:var(--accent-strong);color:#fff}.site-header__inner{width:min(var(--max-page), calc(100% - 32px));justify-content:space-between;align-items:center;gap:24px;min-height:58px;margin:0 auto;display:flex}.brand{color:#fff;white-space:nowrap;font-weight:700;text-decoration:none}.top-nav{color:#ffffffc2;gap:18px;font-size:.96rem;display:flex}.site-header__tools{align-items:center;gap:22px;min-width:0;display:flex}.top-nav a{text-decoration:none}.top-nav a[aria-current=page]{color:#fff;font-weight:650}.site-header a:hover,.top-nav a:hover{color:#fff}.language-switcher{color:#ffffffb8;border:1px solid #ffffff38;align-items:center;gap:2px;padding:2px;display:inline-flex}.language-switcher__option{min-width:32px;color:inherit;font:inherit;letter-spacing:0;cursor:pointer;background:0 0;border:0;padding:4px 7px;font-size:.82rem;font-weight:700}.language-switcher__option:hover,.language-switcher__option:focus-visible,.language-switcher__option[data-active]{color:#fff;background:#ffffff24}.page{width:min(var(--max-page), calc(100% - 32px));margin:0 auto;padding:44px 0 72px}.text-page{max-width:var(--max-text)}h1,h2,h3,p{overflow-wrap:break-word;margin-top:0}h1{letter-spacing:0;margin-bottom:12px;font-size:3rem;line-height:1.06}h2{letter-spacing:0;margin:42px 0 12px;font-size:1.65rem;line-height:1.16}h3{margin-bottom:8px;font-size:1.05rem;line-height:1.25}p{color:var(--muted);font-size:1.05rem;line-height:1.65}.course-meta{color:var(--muted);margin:0 0 28px;line-height:1.55}.intro-links{border-top:1px solid var(--line);margin-top:34px}.intro-links a,.lecture-row,.simple-row{border-bottom:1px solid var(--line);grid-template-columns:72px minmax(0,1fr);gap:18px;padding:18px 0;text-decoration:none;display:grid}.intro-links a{grid-template-columns:minmax(0,1fr)}.intro-links strong,.lecture-row strong,.simple-row strong{color:var(--ink);font-size:1.05rem}.intro-links span,.lecture-row span,.simple-row span{color:var(--muted);line-height:1.5}.number{color:var(--accent);font-variant-numeric:tabular-nums;font-family:Consolas,SFMono-Regular,monospace;font-size:1.05rem;font-weight:700}.note{border-top:1px solid var(--line);color:var(--muted);margin-top:26px;padding-top:16px}.site-footer{text-align:center;width:min(720px,100% - 32px);margin:0 auto;padding:42px 0 48px}.site-footer p{color:var(--muted);margin:0;font-size:.88rem;line-height:1.65}.doc-section{border-top:1px solid var(--line);margin-top:42px;padding-top:22px}.guide-page{width:min(var(--max-wide), calc(100% - 40px));max-width:none;padding-top:58px}.guide-header{max-width:760px;margin-bottom:42px}.guide-header h1{margin-bottom:14px;font-size:3.7rem;line-height:1}.guide-header p{margin-bottom:0}.guide-layout{grid-template-columns:178px minmax(0,1fr);align-items:start;gap:54px;display:grid}.guide-toc{gap:8px;font-size:.92rem;display:grid;position:sticky;top:22px}.guide-toc a{color:var(--muted);text-decoration:none}.guide-toc a:hover{color:var(--accent);font-weight:650}.guide-content{min-width:0;max-width:800px}.guide-section{margin-top:54px;scroll-margin-top:22px}.guide-section:first-child{margin-top:0}.guide-section h2{margin:0 0 12px}.guide-section ul{color:var(--ink);font-size:1.02rem;line-height:1.58}.guide-section li+li{margin-top:.28em}.home-page{padding-top:58px}.home-opening{width:min(var(--max-page), calc(100% - 40px));grid-template-columns:minmax(0,1.34fr) minmax(280px,.66fr);align-items:end;gap:76px;margin:0 auto 82px;display:grid}.home-opening__text{min-width:0}.home-affiliation{color:var(--faint);margin:0 0 18px;font-size:.96rem;line-height:1.4}.home-opening h1{letter-spacing:0;max-width:760px;margin:0;font-size:4rem;line-height:.98}.home-lead{color:#303942;max-width:760px;margin:30px 0 0;font-size:1.13rem;line-height:1.68}.home-status-list{max-width:780px;color:var(--muted);flex-wrap:wrap;gap:10px 28px;margin:34px 0 0;padding-left:1.1em;font-size:.98rem;line-height:1.5;display:flex}.home-status-list li{max-width:230px;padding-left:2px}.next-lecture{border-left:1px solid color-mix(in srgb, var(--line) 78%, transparent);min-width:0;min-height:310px;padding:12px 0 4px 34px}.next-lecture__label,.section-kicker{color:var(--accent);letter-spacing:.02em;text-transform:uppercase;margin:0 0 18px;font-family:Consolas,SFMono-Regular,monospace;font-size:.82rem;font-weight:700;line-height:1.3}.next-lecture__date-row{margin-bottom:50px}.next-lecture__day,.next-lecture__time,.next-lecture__title,.next-lecture__number,.countdown-value,.next-lecture__empty{margin:0}.next-lecture__day{color:var(--ink);font-size:2.65rem;font-weight:750;line-height:.98}.next-lecture__time{color:var(--muted);margin-top:10px;font-family:Consolas,SFMono-Regular,monospace;font-size:1.1rem;font-weight:700}.next-lecture__topic{grid-template-columns:62px minmax(0,1fr);align-items:start;gap:18px;margin-bottom:30px;display:grid}.next-lecture__number{color:var(--accent);font-family:Consolas,SFMono-Regular,monospace;font-size:3.1rem;font-weight:700;line-height:.86}.next-lecture__title{color:var(--ink);font-size:1.28rem;font-weight:750;line-height:1.22}.countdown-value{color:var(--accent);font-family:Consolas,SFMono-Regular,monospace;font-size:1.25rem;font-weight:700}.next-lecture__empty{color:var(--muted);font-size:1rem}.course-announcement{width:min(var(--max-page), calc(100% - 40px));background:#fff7d6;border-left:4px solid #d5a300;margin:-34px auto 48px;padding:18px 22px}.course-announcement strong{color:#5f4800;margin-bottom:5px;font-size:.9rem;display:block}.course-announcement p{color:#443a1b;margin:0;font-size:1rem;line-height:1.55}.semester-band{background:var(--surface);padding:74px 0 82px}.semester-layout{width:min(var(--max-wide), calc(100% - 40px));grid-template-columns:250px minmax(0,1fr);align-items:start;gap:58px;margin:0 auto;display:grid}.semester-heading h2{margin:0;font-size:2.35rem;line-height:1.05}.semester-heading p:not(.section-kicker){color:var(--muted);margin:24px 0 0;font-size:.98rem;line-height:1.62}.semester-index{grid-template-rows:repeat(5,minmax(84px,auto));grid-template-columns:repeat(2,minmax(0,1fr));grid-auto-flow:column;gap:32px 62px;margin:2px 0 0;padding:0;list-style:none;display:grid}.semester-item{grid-template-columns:78px minmax(0,1fr);align-items:start;gap:18px;min-width:0;display:grid}.semester-item__number{color:#11182033;font-variant-numeric:tabular-nums;font-family:Consolas,SFMono-Regular,monospace;font-size:3.4rem;font-weight:700;line-height:.84}.semester-item__body{min-width:0}.semester-item__body a,.semester-item__body strong{color:var(--ink);font-size:1.12rem;font-weight:750;line-height:1.24}.semester-item__body small,.availability{color:var(--muted);margin-top:6px;font-size:.88rem;line-height:1.45;display:block}.semester-item.is-current .semester-item__number{color:var(--accent)}.semester-item.is-current .semester-item__body a,.semester-item.is-current .semester-item__body strong{font-weight:800}.semester-item.is-unreleased{opacity:.58}.availability{color:var(--faint)}.home-bottom{grid-template-columns:minmax(260px,.72fr) minmax(0,1.28fr);align-items:start;gap:88px;width:min(1040px,100% - 40px);margin:72px auto 0;padding-bottom:78px;display:grid}.home-facts{gap:18px;margin:0;display:grid}.home-facts div{grid-template-columns:112px minmax(0,1fr);gap:18px;display:grid}.home-facts dt,.academic-links__university{color:var(--ink);font-weight:750}.home-facts dd{color:var(--muted);margin:0;line-height:1.48}.academic-links{gap:18px;margin:0;padding:0;list-style:none;display:grid}.academic-links li{grid-template-columns:154px minmax(0,1fr);gap:24px;min-width:0;display:grid}.academic-links__course{min-width:0}.academic-links__course a{color:var(--ink);font-weight:750}.academic-links__course small{color:var(--muted);margin-top:4px;font-size:.9rem;line-height:1.42;display:block}@media (width<=960px){.home-opening,.semester-layout,.home-bottom{width:min(100% - 32px, var(--max-wide));grid-template-columns:minmax(0,1fr);gap:46px}.next-lecture{border-left:0;min-height:auto;padding:28px 0 0}.next-lecture__date-row{margin-bottom:32px}.semester-index{grid-template-rows:none;grid-template-columns:repeat(2,minmax(0,1fr));grid-auto-flow:row}.home-bottom{margin-top:60px}.project-page,.guide-page{width:min(100% - 32px, var(--max-wide))}.project-layout,.cheat-layout,.guide-layout{grid-template-columns:minmax(0,1fr);gap:34px}.project-toc,.cheat-toc,.guide-toc{background:var(--surface);flex-wrap:wrap;gap:8px 16px;padding:14px 16px;display:flex;position:static}.project-hero,.project-section__heading,.project-split,.project-topic-grid,.technology-list,.documentation-list,.project-reminders{grid-template-columns:minmax(0,1fr)}.project-hero{gap:36px}.project-inline-metrics{grid-template-columns:repeat(3,minmax(0,1fr))}.project-section__heading{gap:10px}.cheat-page{width:min(100% - 32px, var(--max-wide))}.cheat-grid{grid-template-columns:minmax(0,1fr)}}.admin-form{gap:10px;max-width:380px;margin-top:28px;display:grid}.admin-form label{color:var(--ink);font-weight:700}.admin-form input{border:1px solid var(--line);background:var(--paper);width:100%;color:var(--ink);font:inherit;padding:10px 12px}.admin-form button,.preview-active-message button,.preview-indicator button{border:1px solid var(--accent);background:var(--paper);width:fit-content;color:var(--accent);font:inherit;cursor:pointer}.admin-form button,.preview-active-message button{padding:9px 12px}.form-message,.preview-active-message{margin-top:12px;font-size:.96rem}.preview-indicator{z-index:20;border:1px solid var(--line);background:var(--paper);color:var(--muted);align-items:center;gap:7px;padding:6px 8px;font-size:.82rem;display:flex;position:fixed;top:10px;right:12px}.preview-indicator button{color:var(--accent);background:0 0;border:0;padding:0}.locked-material{min-height:45vh}.toc-list{border-top:1px solid var(--line);flex-wrap:wrap;gap:8px 16px;margin:30px 0 0;padding-top:18px;font-size:.96rem;display:flex}.cheat-page{width:min(var(--max-wide), calc(100% - 40px));max-width:none;padding-top:58px}.cheat-header{max-width:760px;margin-bottom:42px}.cheat-header h1{margin-bottom:14px;font-size:3.7rem;line-height:1}.cheat-header p{margin-bottom:0}.cheat-layout{grid-template-columns:178px minmax(0,1fr);align-items:start;gap:54px;display:grid}.cheat-toc{gap:8px;font-size:.92rem;display:grid;position:sticky;top:22px}.cheat-toc a{color:var(--muted);text-decoration:none}.cheat-toc a:hover{color:var(--accent);font-weight:650}.cheat-content{min-width:0}.cheat-grid{grid-template-columns:repeat(2,minmax(0,1fr));gap:34px;display:grid}.cheat-section{min-width:0;scroll-margin-top:22px}.cheat-section h2{color:var(--ink);margin:0 0 7px;font-size:1.12rem;line-height:1.2}.cheat-section p{color:var(--muted);margin:0 0 12px;font-size:.92rem;line-height:1.45}.copy-code{border:1px solid var(--code-line);background:var(--code-bg);border-radius:8px;position:relative;overflow:hidden}.copy-code__copy{z-index:1;color:#dce8f7;font:inherit;cursor:pointer;background:#ffffff0f;border:1px solid #eef4fb2e;border-radius:5px;padding:5px 8px;font-size:.78rem;position:absolute;top:10px;right:10px}.copy-code__copy:hover{color:#fff;background:#ffffff1f}.copy-code pre{color:var(--code-text);tab-size:4;margin:0;padding:48px 16px 18px;font-size:.88rem;line-height:1.52;overflow-x:auto}.copy-code code{counter-reset:copy-code-line;min-width:max-content;display:block}.copy-code .code-line{white-space:pre;min-height:1.52em;padding-left:3.45rem;display:block;position:relative}.copy-code .code-line:before{color:#dce8f76b;content:counter(copy-code-line);counter-increment:copy-code-line;font-variant-numeric:tabular-nums;text-align:right;user-select:none;width:2.2rem;position:absolute;left:0}.cheat-section--terms{align-self:start}.cheat-section--terms .inline-term-list{gap:8px}.cheat-section--terms .inline-term-list li{background:var(--surface);min-width:auto;padding:4px 7px}.lecture-list,.simple-list{border-top:0;gap:10px;margin-top:26px;display:grid}.lecture-list .lecture-row,.simple-list .simple-row{background:var(--surface);border-bottom:0;border-radius:6px;grid-template-columns:54px minmax(0,1fr);align-items:center;gap:16px;min-height:66px;padding:14px 16px}.lecture-list a.lecture-row:hover,.lecture-list a.lecture-row:focus-visible,.simple-list a.simple-row:hover,.simple-list a.simple-row:focus-visible{background:var(--surface-strong);color:inherit}.lecture-list .number,.simple-list .number{color:var(--accent-strong);font-size:.98rem}.lecture-list strong,.simple-list strong{font-size:1.06rem}.lecture-list small,.simple-list small{color:var(--muted);margin-top:4px;font-size:.88rem;line-height:1.35;display:inline-block}.lecture-list .availability,.simple-list .availability{display:block}.lecture-list .lecture-row.is-locked,.lecture-list .lecture-row[aria-disabled=true],.simple-list .simple-row.is-locked,.simple-list .simple-row[aria-disabled=true]{background:#f8fafc}.lecture-row[aria-disabled=true],.lecture-row.is-locked,.simple-row[aria-disabled=true],.simple-row.is-locked{pointer-events:none}.lecture-row[aria-disabled=true] strong,.lecture-row[aria-disabled=true] span,.simple-row[aria-disabled=true] strong,.simple-row[aria-disabled=true] span{color:var(--faint)}code,pre{font-family:Consolas,SFMono-Regular,monospace}.back-inline{color:var(--muted);margin-bottom:24px;font-size:.96rem;text-decoration:none;display:inline-block}.worksheet-page{max-width:900px}.worksheet-page>p,.worksheet-section p,.worksheet-task p{max-width:780px}.worksheet-section{border-top:1px solid var(--line);margin-top:42px;padding-top:22px}.worksheet-task{border-top:1px solid var(--line);margin-top:22px;padding-top:18px}.worksheet-page ul{color:var(--ink);font-size:1.02rem;line-height:1.58}.worksheet-page li+li{margin-top:.26em}.worksheet-task h2{margin-top:0}.exercise-progress{border-top:1px solid var(--line);color:var(--muted);justify-content:space-between;align-items:baseline;gap:18px;margin:30px 0 6px;padding-top:16px;font-size:.95rem;display:flex}.exercise-progress button{color:var(--accent);font:inherit;cursor:pointer;text-underline-offset:.18em;background:0 0;border:0;padding:0;text-decoration:underline 1px}.exercise-progress button:hover{color:var(--accent-strong)}.exercise-task__header{grid-template-columns:auto minmax(0,1fr);align-items:stretch;gap:14px;display:grid}.exercise-task__check{border:1px solid color-mix(in srgb, var(--accent) 42%, var(--line));background:var(--paper);min-height:46px;color:var(--accent-strong);white-space:nowrap;cursor:pointer;border-radius:6px;align-items:center;gap:8px;margin-top:5px;padding:0 12px;font-size:.9rem;font-weight:700;line-height:1;display:inline-flex}.exercise-task__check:hover{background:var(--accent-soft);border-color:var(--accent)}.exercise-task__check input{appearance:none;border:2px solid var(--accent);cursor:pointer;background:#fff;border-radius:4px;place-items:center;width:18px;height:18px;margin:0;display:grid}.exercise-task__check input:before{content:"";transform-origin:50%;border:2px solid #fff;border-width:0 2px 2px 0;width:5px;height:10px;transition:transform 90ms;transform:scale(0)rotate(45deg)}.exercise-task__check input:checked{background:var(--accent)}.exercise-task__check input:checked:before{transform:scale(1)rotate(45deg)}.exercise-task__check input:focus-visible{outline:3px solid color-mix(in srgb, var(--accent) 24%, transparent);outline-offset:2px}.exercise-task__toggle{width:100%;min-width:0;min-height:56px;color:var(--ink);font:inherit;text-align:left;cursor:pointer;background:0 0;border:0;grid-template-columns:44px minmax(0,1fr) auto 20px;align-items:center;gap:12px;padding:0;display:grid}.exercise-task__number{color:var(--accent-strong);font-variant-numeric:tabular-nums;font-family:Consolas,SFMono-Regular,monospace;font-size:.98rem;font-weight:800}.exercise-task__toggle:hover .exercise-task__title,.exercise-task__toggle:focus-visible .exercise-task__title{color:var(--accent)}.exercise-task__title{min-width:0;color:var(--ink);font-size:1.2rem;font-weight:750;line-height:1.25}.exercise-task__status{color:var(--accent);font-size:.86rem;font-weight:700}.exercise-task__chevron{color:var(--muted);justify-self:end;font-size:1.35rem;line-height:1;transition:transform .14s}.exercise-task__toggle[aria-expanded=false] .exercise-task__chevron{transform:rotate(-90deg)}.exercise-task__body{padding:10px 0 12px}.exercise-task.is-completed .exercise-task__title{color:var(--muted)}.exercise-task.is-completed .exercise-task__check{border-color:var(--accent);background:var(--accent-soft)}.exercise-task.is-bonus .exercise-task__title{color:var(--accent-strong)}.reset-dialog{color:var(--ink);background:0 0;border:0;padding:0}.reset-dialog[open]{place-items:center;width:100%;max-width:none;height:100%;max-height:none;margin:0;display:grid;position:fixed;inset:0}.reset-dialog::backdrop{background:#0f172a57}.reset-dialog__panel{border:1px solid var(--line);background:var(--paper);border-radius:8px;width:min(420px,100vw - 32px);padding:24px;box-shadow:0 18px 60px #0f172a2e}.reset-dialog__panel h2{margin:0 0 8px;font-size:1.28rem;line-height:1.2}.reset-dialog__panel p{margin:0;font-size:.98rem;line-height:1.55}.reset-dialog__actions{justify-content:flex-end;gap:10px;margin-top:22px;display:flex}.reset-dialog__actions button{border:1px solid var(--line);background:var(--surface);color:var(--ink);font:inherit;cursor:pointer;border-radius:6px;padding:9px 12px}.reset-dialog__actions button:hover,.reset-dialog__actions button:focus-visible{border-color:var(--accent)}.reset-dialog__actions [data-reset-confirm]{border-color:var(--accent);background:var(--accent);color:#fff}.worksheet-page .copy-code{margin:18px 0 22px}.worksheet-code,.expected-output{background:var(--code-bg);color:var(--code-text);tab-size:4;margin:18px 0 22px;padding:16px 18px;font-size:.95rem;line-height:1.5;overflow-x:auto}.expected-output{background:var(--surface);color:var(--ink)}.hint{border-left:3px solid var(--accent);color:var(--muted);margin-top:18px;padding-left:14px}.assignment-page{max-width:920px}.project-page{width:min(var(--max-wide), calc(100% - 40px));max-width:none;padding-top:58px}.project-hero{grid-template-columns:minmax(0,1.1fr) minmax(300px,.9fr);align-items:end;gap:72px;margin-bottom:34px;display:grid}.project-hero h1{margin:0;font-size:4rem;line-height:.98}.project-lead{color:#293544;max-width:720px;margin:28px 0 0;font-size:1.13rem;line-height:1.68}.project-summary{grid-template-columns:repeat(2,minmax(0,1fr));gap:22px 34px;margin:0;display:grid}.project-summary div{min-width:0}.project-summary dt{color:var(--accent);letter-spacing:.02em;text-transform:uppercase;margin-bottom:6px;font-family:Consolas,SFMono-Regular,monospace;font-size:.8rem;font-weight:700}.project-summary dd{color:var(--ink);margin:0;font-size:1.12rem;font-weight:750;line-height:1.28}.project-layout{grid-template-columns:172px minmax(0,1fr);align-items:start;gap:58px;display:grid}.project-content{min-width:0}.project-toc{gap:9px;margin:0;padding:3px 0 0;font-size:.95rem;display:grid;position:sticky;top:22px}.project-toc a{color:var(--muted);text-decoration:none}.project-toc a:hover{color:var(--accent);font-weight:650}.project-section{margin-top:86px;scroll-margin-top:22px}.project-section:first-of-type{margin-top:0}.project-section--surface{background:var(--surface);margin-inline:-32px;padding:56px 32px}.project-section__heading{margin-bottom:24px}.project-section__heading h2{margin:0;font-size:2.2rem;line-height:1.08}.project-prose{max-width:800px}.project-prose p,.project-section p{font-size:1.03rem;line-height:1.68}.project-meta{color:var(--accent);margin-bottom:10px;font-family:Consolas,SFMono-Regular,monospace;font-size:.96rem;font-weight:700}.project-inline-metrics{grid-template-columns:repeat(5,minmax(0,1fr));gap:22px;margin:40px 0 46px;display:grid}.project-inline-metrics div{min-width:0}.project-inline-metrics strong{color:var(--accent);font-family:Consolas,SFMono-Regular,monospace;font-size:2.1rem;line-height:1;display:block}.project-inline-metrics span{color:var(--muted);margin-top:7px;font-size:.92rem;line-height:1.35;display:block}.project-split{grid-template-columns:repeat(2,minmax(0,1fr));gap:58px;margin-top:34px;display:grid}.project-split--wide{gap:76px}.project-split h3,.project-plain-block h3,.project-topic-grid h3,.technology-list h3,.video-section h3{margin-top:0}.project-section ul,.project-section ol{color:var(--ink);font-size:1rem;line-height:1.58}.project-section li+li{margin-top:.26em}.project-topic-grid,.technology-list{grid-template-columns:repeat(2,minmax(0,1fr));gap:34px 64px;margin-top:34px;display:grid}.project-topic-grid article,.technology-list article{min-width:0}.project-topic-grid h3,.technology-list h3{color:var(--ink);font-size:1.05rem}.technology-list p{margin-bottom:0;font-size:.98rem;line-height:1.58}.project-note,.project-plain-block,.project-reminders{background:var(--surface);margin-top:34px;padding:22px 24px}.project-note{color:var(--muted)}.project-note p{margin-bottom:0}.project-note p+p{margin-top:12px}.project-note--strong{background:var(--accent-soft)}.project-plain-block{max-width:860px}.project-plain-block p:last-child{margin-bottom:0}.project-score-strip{color:var(--muted);flex-wrap:wrap;gap:14px 34px;margin:34px 0 38px;font-size:1rem;display:flex}.project-score-strip strong{color:var(--accent);margin-left:6px;font-family:Consolas,SFMono-Regular,monospace;font-size:1.28rem}.documentation-list{grid-template-columns:repeat(2,minmax(0,1fr));gap:18px 52px;margin:34px 0 0;padding-left:1.4em;display:grid}.documentation-list li{padding-left:4px}.documentation-list strong{color:var(--ink);display:block}.documentation-list span{color:var(--muted);margin-top:4px;display:block}.project-reminders{grid-template-columns:repeat(2,minmax(0,1fr));gap:18px 42px;display:grid}.project-reminders p{margin:0}.project-section--final{padding-bottom:8px}.assignment-toc{z-index:2;border-top:1px solid var(--line);border-bottom:1px solid var(--line);background:var(--bg);flex-wrap:wrap;gap:8px 16px;margin:30px 0 0;padding:14px 0;font-size:.95rem;display:flex;position:sticky;top:0}.assignment-toc a{color:var(--muted);text-decoration:none}.assignment-toc a:hover{color:var(--accent)}.assignment-section{border-top:1px solid var(--line);margin-top:46px;padding-top:22px}.assignment-section h2{margin-top:0}.assignment-section h3{margin-top:26px}.assignment-section ul,.assignment-section ol{color:var(--ink);font-size:1.02rem;line-height:1.58}.assignment-section li+li{margin-top:.25em}.assignment-note{border-left:3px solid var(--accent);margin-top:18px;padding-left:14px}.content-table{border-collapse:collapse;width:100%;margin:20px 0 26px;font-size:.97rem;line-height:1.45}.content-table th,.content-table td{border-bottom:1px solid var(--line);text-align:left;vertical-align:top;padding:13px 12px}.content-table th{background:var(--surface);color:var(--accent-strong);font-weight:700}.content-table td:nth-child(2),.score-table th:nth-child(2),.score-table td:nth-child(2){text-align:right;font-variant-numeric:tabular-nums;width:84px}.project-table{margin-top:26px}.project-table td:first-child{color:var(--ink);font-weight:700}.project-table .score-total td{background:var(--accent-soft);color:var(--accent-strong);font-weight:800}html.viewer-html,html.viewer-html body{background:#1b1b1b;width:100%;height:100%;overflow:hidden}.viewer{width:100vw;height:100vh;color:var(--ink);background:#1b1b1b;place-items:center;display:grid;overflow:hidden}.slide-frame{aspect-ratio:16/9;background:var(--paper);width:min(100vw,177.778vh);position:relative;overflow:hidden}.slide-stage{width:1280px;height:720px;transform:scale(var(--stage-scale,1));transform-origin:0 0;position:absolute;inset:0 auto auto 0}.slide{background:var(--paper);padding:72px 80px;display:none;position:absolute;inset:0}.slide.is-active{display:block}.pptx-slide{padding:0}.pptx-slide__image{object-fit:contain;width:100%;height:100%;display:block}.slide-section{color:var(--accent);letter-spacing:0;text-transform:uppercase;font-family:Consolas,monospace;font-size:14px;font-weight:700}.slide h1{letter-spacing:0;max-width:980px;margin:14px 0 0;font-size:58px;line-height:1.04}.slide h2{letter-spacing:0;max-width:980px;margin:0;font-size:42px;line-height:1.1}.slide p{max-width:850px;margin:28px 0 0;font-size:25px;line-height:1.45}.slide ul{max-width:900px;color:var(--ink);margin:30px 0 0;padding-left:1.1em;font-size:25px;line-height:1.42}.slide li+li{margin-top:9px}.slide.is-active.section-slide,.slide.is-active.title-slide,.slide.is-active.statement-slide{align-content:center;display:grid}.section-slide .slide-section{margin-bottom:18px}.section-slide h1{max-width:900px;font-size:64px}.title-slide p{max-width:760px}.statement-slide h2{max-width:900px;font-size:60px}.code-layout{grid-template-columns:minmax(0,1.15fr) minmax(240px,.75fr);align-items:start;gap:46px;margin-top:36px;display:grid}.code-layout:has(.code-block:only-child){display:block}.split-code{grid-template-columns:1fr 1fr;gap:34px;margin-top:36px;display:grid}.code-block{background:var(--code-bg);border:1px solid var(--code-line);color:var(--code-text);margin:0}.code-block[data-variant=bad]{border-color:color-mix(in srgb, var(--bad) 50%, var(--code-line))}.code-block[data-variant=good]{border-color:color-mix(in srgb, var(--good) 50%, var(--code-line))}.code-label{color:var(--code-muted);padding:12px 18px 0;font-size:13px;font-weight:700;display:block}.code-block pre{tab-size:4;margin:0;padding:14px 18px 18px;font-size:20px;line-height:1.36;overflow:hidden}.code-line{white-space:pre;min-height:1.36em;display:block}.code-line.is-highlighted{background:#173a63;margin:0 -6px;padding:0 6px}.tok-keyword{color:var(--code-keyword);font-weight:700}.tok-string{color:var(--code-string)}.tok-number{color:var(--code-number)}.tok-comment{color:var(--code-comment)}.columns{grid-template-columns:repeat(2,minmax(0,1fr));gap:58px;margin-top:54px;display:grid}.column{border-top:3px solid var(--accent);padding-top:18px}.column h3{font-size:25px}.column ul{max-width:100%;font-size:22px}.slide-table{border-collapse:collapse;width:100%;margin-top:42px;font-size:22px}.slide-table th,.slide-table td{border-bottom:1px solid var(--line);text-align:left;vertical-align:top;padding:15px 12px}.slide-table th{color:var(--accent);font-weight:700}.diagram{grid-auto-columns:1fr;grid-auto-flow:column;align-items:center;gap:14px;margin-top:70px;display:grid}.diagram-item{border:1px solid var(--line);text-align:center;padding:20px 10px;font-size:22px}.semester-map{grid-template-columns:repeat(2,minmax(0,1fr));gap:10px 44px;max-width:850px;margin-top:42px;padding:0;font-family:Consolas,monospace;font-size:22px;list-style:none;display:grid}.viewer-control{z-index:5;color:#f3f3f3;opacity:.16;font-size:.88rem;text-decoration:none;transition:opacity .16s;position:fixed}.viewer-control:hover,.viewer-control:focus-visible,.viewer.is-active-ui .viewer-control{opacity:1}.back-link{top:16px;left:18px}.fullscreen-button{font:inherit;cursor:pointer;background:0 0;border:0;top:12px;right:18px}.viewer-language{top:9px;left:50%;transform:translate(-50%)}.progress{font-family:Consolas,monospace;bottom:14px;right:18px}.progress-bar{z-index:4;background:#ffffff1f;width:100%;height:3px;position:fixed;bottom:0;left:0}.progress-bar span{height:100%;width:var(--progress,0%);background:var(--accent);display:block}@media (width<=720px){.site-header__inner{flex-direction:column;align-items:flex-start;gap:10px;min-height:auto;padding:14px 0}.brand{white-space:normal}.site-header__tools{flex-direction:column;align-items:flex-start;gap:10px;width:100%}.top-nav{width:100%;padding-bottom:2px;overflow-x:auto}.page{width:min(100% - 24px, var(--max-page));padding-top:32px}h1{font-size:1.85rem;line-height:1.14}h2{font-size:1.38rem}.intro-links a,.lecture-row,.simple-row{grid-template-columns:48px minmax(0,1fr)}.lecture-list .lecture-row,.simple-list .simple-row{grid-template-columns:42px minmax(0,1fr);min-height:58px;padding:13px 14px}.intro-links a{grid-template-columns:minmax(0,1fr)}.viewer-control{font-size:.8rem}.home-page{padding-top:34px}.home-opening{width:min(100% - 24px, var(--max-page));gap:36px;margin-bottom:56px}.course-announcement{width:min(100% - 24px, var(--max-page));margin:-18px auto 38px;padding:16px 18px}.home-opening h1{font-size:2.28rem;line-height:1.06}.home-lead{margin-top:22px;font-size:1.02rem;line-height:1.62}.home-status-list{margin-top:26px;font-size:.95rem;display:block}.home-status-list li{max-width:none}.home-status-list li+li{margin-top:8px}.next-lecture__day{font-size:2.05rem}.next-lecture__topic{grid-template-columns:46px minmax(0,1fr);gap:14px}.next-lecture__number{font-size:2.1rem}.next-lecture__title{font-size:1.12rem}.countdown-value{font-size:1.05rem}.semester-band{padding:52px 0 58px}.semester-layout{width:min(100% - 24px, var(--max-wide));gap:34px}.semester-heading h2{font-size:1.78rem}.semester-index{display:block}.semester-item{grid-template-columns:42px minmax(0,1fr);gap:14px}.semester-item+.semester-item{margin-top:18px}.semester-item__number{font-size:1.45rem;line-height:1.02}.semester-item__body a,.semester-item__body strong{font-size:1rem}.home-bottom{width:min(100% - 24px, var(--max-wide));gap:42px;margin-top:50px;padding-bottom:54px}.home-facts div,.academic-links li{grid-template-columns:minmax(0,1fr);gap:4px}.academic-links{gap:20px}.project-page{width:min(100% - 24px, var(--max-wide));padding-top:34px}.project-hero h1{font-size:2.4rem}.project-lead{margin-top:22px;font-size:1.02rem;line-height:1.62}.project-summary,.project-inline-metrics{grid-template-columns:minmax(0,1fr)}.project-toc{margin-bottom:52px;padding:14px}.project-section{margin-top:56px}.project-section--surface{margin-inline:-12px;padding:40px 12px}.project-section__heading h2{font-size:1.68rem}.project-inline-metrics{gap:18px;margin:32px 0 36px}.project-inline-metrics strong{font-size:1.65rem}.project-split,.project-topic-grid,.technology-list,.documentation-list,.project-reminders{gap:28px}.project-note,.project-plain-block,.project-reminders{padding:18px}.cheat-page,.guide-page{width:min(100% - 24px, var(--max-wide));padding-top:34px}.cheat-header h1,.guide-header h1{font-size:2.35rem}.cheat-toc,.guide-toc{flex-wrap:nowrap;padding:12px;overflow-x:auto}.cheat-toc a,.guide-toc a{flex:none}.copy-code pre{padding:46px 14px 16px;font-size:.86rem}.copy-code .code-line{padding-left:3.1rem}.exercise-progress{flex-direction:column;align-items:flex-start;gap:8px}.exercise-task__header{grid-template-columns:minmax(0,1fr);gap:8px}.exercise-task__check{width:fit-content;min-height:auto;padding:8px 10px}.exercise-task__toggle{grid-template-columns:36px minmax(0,1fr) 20px;gap:8px 12px;min-height:48px}.exercise-task__status{grid-area:2/2}.exercise-task__chevron{grid-area:1/3/span 2}.reset-dialog__panel{padding:20px}.reset-dialog__actions{justify-content:stretch}.reset-dialog__actions button{flex:1}.content-table{white-space:normal;display:block;overflow-x:auto}.assignment-toc{position:static}}html{scroll-padding-top:84px}.viewer-html{scroll-padding-top:0}:where(.worksheet-task,.project-section,.cheat-section,.guide-section,.assignment-section,h2[id],h3[id]){scroll-margin-top:84px}.top-nav a{border-bottom:2px solid #0000;padding-bottom:2px}.top-nav a[aria-current=page]{border-bottom-color:#ffffffd1}.exercise-list-progress{color:var(--muted);font-family:Consolas,SFMono-Regular,monospace}.exercise-list-progress[data-complete]{color:var(--accent);font-weight:700}.exercise-progress__actions{flex-wrap:wrap;justify-content:flex-end;gap:12px;display:inline-flex}.exercise-task__check{border-color:var(--accent);color:var(--accent-strong);background:#f9fbfe;font-weight:800}.exercise-task__check input{width:20px;height:20px}.exercise-task.is-completed .exercise-task__check{background:var(--accent);color:#fff}.exercise-task.is-completed .exercise-task__check input{border-color:#fff}.viewer-neighbors{pointer-events:none;grid-template-columns:minmax(0,1fr) minmax(0,1fr);gap:18px;display:grid;bottom:14px;left:18px;right:98px}.viewer-neighbor{color:#f3f3f3;pointer-events:auto;gap:3px;max-width:360px;text-decoration:none;display:grid}.viewer-neighbor--next{text-align:right;justify-self:end}.viewer-neighbor span{color:#f3f3f3b8;font-size:.78rem}.viewer-neighbor strong{color:#fff;text-overflow:ellipsis;white-space:nowrap;font-size:.88rem;font-weight:650;line-height:1.25;overflow:hidden}.adjacent-nav{grid-template-columns:minmax(0,1fr) minmax(0,1fr);gap:22px;margin-top:54px;padding-top:24px;display:grid}.adjacent-nav__link{min-width:0;color:var(--muted);gap:5px;padding:16px 0;text-decoration:none;display:grid}.adjacent-nav__link--next{text-align:right}.adjacent-nav__link strong{color:var(--ink);font-size:1.02rem;line-height:1.3}.adjacent-nav__link:hover strong,.adjacent-nav__link:focus-visible strong{color:var(--accent)}.not-found-page{min-height:50vh}@media (width<=720px){html{scroll-padding-top:118px}:where(.worksheet-task,.project-section,.cheat-section,.guide-section,.assignment-section,h2[id],h3[id]){scroll-margin-top:118px}.exercise-progress__actions{justify-content:flex-start}.viewer-neighbors{grid-template-columns:minmax(0,1fr);right:18px}.viewer-neighbor--next{text-align:left;justify-self:start}.viewer-neighbor strong{max-width:260px}.adjacent-nav{grid-template-columns:minmax(0,1fr);gap:8px}.adjacent-nav__link--next{text-align:left}}@media print{:root{--bg:#fff;--paper:#fff;--surface:#fff;--ink:#000;--muted:#333;--line:#bbb;--code-bg:#fff;--code-text:#000;--code-line:#bbb}html,body{color:#000!important;background:#fff!important}body{font-size:11pt}a{color:#000;text-decoration:underline}.site-header,.site-footer,.preview-indicator,.admin-form,.copy-code__copy,.exercise-progress,.exercise-task__check,.exercise-task__status,.exercise-task__chevron,.adjacent-nav,.project-toc,.cheat-toc,.guide-toc,.assignment-toc,.viewer-control,.progress-bar{display:none!important}.page,.text-page,.project-page,.cheat-page,.guide-page,.worksheet-page{width:100%!important;max-width:none!important;margin:0!important;padding:0!important}.project-layout,.cheat-layout,.guide-layout,.project-hero,.project-split,.project-topic-grid,.technology-list,.documentation-list,.project-reminders,.cheat-grid{display:block!important}.project-section,.guide-section,.cheat-section,.worksheet-section,.worksheet-task,.assignment-section{break-inside:avoid-page;border:0!important;margin-top:18pt!important;padding-top:0!important}.project-section--surface,.project-note,.project-plain-block,.project-reminders{background:0 0!important;margin-inline:0!important;padding:0!important}h1{font-size:24pt!important;line-height:1.15!important}h2{font-size:17pt!important}h3{font-size:12pt!important}p,li,.project-section p,.worksheet-page ul,.assignment-section ul,.assignment-section ol{color:#000!important;font-size:10.5pt!important;line-height:1.4!important}.exercise-task__body[hidden],.exercise-task__header{display:block!important}.exercise-task__toggle{color:#000!important;text-align:left!important;background:0 0!important;border:0!important;min-height:0!important;margin:0 0 8pt!important;padding:0!important;display:block!important}.exercise-task__number{margin-right:8pt;color:#000!important;display:inline!important}.exercise-task__title{color:#000!important;font-size:13pt!important;display:inline!important}.copy-code,.worksheet-code,.expected-output{break-inside:avoid-page;color:#000!important;background:#fff!important;border:1px solid #bbb!important;border-radius:0!important;overflow:visible!important}.copy-code pre,.worksheet-code,.expected-output{color:#000!important;white-space:pre-wrap!important;padding:8pt!important;font-size:8.5pt!important;line-height:1.32!important;overflow:visible!important}.copy-code code,.copy-code .code-line,.code-line{color:#000!important;white-space:pre-wrap!important;min-width:0!important;padding-left:0!important}.copy-code .code-line:before{content:none!important}.tok-keyword,.tok-string,.tok-number,.tok-comment{color:#000!important;font-weight:inherit!important}table,.content-table{border-collapse:collapse!important;width:100%!important;font-size:9.5pt!important;display:table!important}.content-table th,.content-table td{color:#000!important;background:0 0!important;border-bottom:1px solid #bbb!important}html.viewer-html,html.viewer-html body,.viewer{background:#fff!important;width:auto!important;height:auto!important;overflow:visible!important}.slide-frame,.slide-stage{width:100%!important;height:auto!important;position:static!important;transform:none!important}.slide{break-after:page;width:100%!important;min-height:0!important;padding:28pt 32pt!important;display:block!important;position:relative!important}}
