:root{--paper:#f5f3eb;--ink:#233b31;--muted:#687065;--line:#d6d8cc;--sage:#e7ebdf;--sage-deep:#d5dece;--accent:#9c4d35;--white:#fcfbf6;--code:#233b31;--code-ink:#eff0df;--serif:Georgia,'Times New Roman',serif;--sans:-apple-system,BlinkMacSystemFont,'Segoe UI',sans-serif;--mono:'SFMono-Regular',Consolas,'Liberation Mono',monospace;color-scheme:light}
:root[data-theme=dark]{--paper:#18251f;--ink:#edece1;--muted:#b0b9ac;--line:#3c4c40;--sage:#24372c;--sage-deep:#344938;--accent:#e4a088;--white:#1d2e24;--code:#111d17;--code-ink:#eff0df;color-scheme:dark}
@media(prefers-color-scheme:dark){:root[data-theme=auto]{--paper:#18251f;--ink:#edece1;--muted:#b0b9ac;--line:#3c4c40;--sage:#24372c;--sage-deep:#344938;--accent:#e4a088;--white:#1d2e24;--code:#111d17;--code-ink:#eff0df;color-scheme:dark}}
*{box-sizing:border-box}html{scroll-behavior:smooth;scroll-padding-top:30px}body{margin:0;background:var(--paper);color:var(--ink);font:17px/1.7 var(--sans);-webkit-font-smoothing:antialiased}a{color:inherit;text-decoration-thickness:1px;text-underline-offset:5px}button,input,textarea{font:inherit}button,a,input,textarea,summary{touch-action:manipulation}button,.button{cursor:pointer}a:hover{color:var(--accent)}:focus-visible{outline:2px solid var(--accent);outline-offset:5px}h1,h2,h3,p{margin-top:0}h1,h2,h3{font-family:var(--serif);font-weight:400;line-height:1.15;letter-spacing:-.035em}h1{font-size:clamp(42px,5.8vw,80px);max-width:1000px;margin-bottom:28px}h2{font-size:clamp(30px,3.2vw,43px);margin-bottom:24px}h3{font-size:27px}em{font-weight:400;color:var(--accent)}p{margin-bottom:22px}img{max-width:100%}.masthead,.main-nav,.container,.site-footer{max-width:1280px;margin:auto;padding-left:64px;padding-right:64px}.masthead{height:124px;display:flex;align-items:center;gap:28px;border-bottom:1px solid var(--line)}.brand{font-family:var(--serif);font-size:54px;font-weight:700;letter-spacing:-3px;text-decoration:none;line-height:1}.brand span{color:var(--accent)}.brand-caption,.eyebrow,.small-label,.mono,.unit-meta,.nav-index,.code-label{font-family:var(--mono);font-size:11px;letter-spacing:.08em;line-height:1.5}.brand-caption{font-size:10px;letter-spacing:.14em;color:var(--muted);margin-top:15px}.utilities{margin-left:auto;display:flex;align-items:center;gap:24px;font-size:13px}.theme-button{border:0;background:none;color:var(--muted);padding:10px 0;font:11px var(--mono)}.account{text-decoration:none}.main-nav{height:72px;display:flex;justify-content:space-between;align-items:center;border-bottom:1px solid var(--line)}.main-nav>div{display:flex;height:100%;gap:40px}.main-nav a{display:flex;align-items:center;gap:9px;text-decoration:none;font-size:14px;position:relative}.main-nav a[aria-current]{color:var(--accent)}.main-nav a[aria-current]:after{content:'';position:absolute;bottom:-1px;height:2px;left:0;right:0;background:var(--accent)}.nav-index{font-size:9px;color:var(--muted)}.nav-search{color:var(--muted)}.container{padding-top:58px;padding-bottom:96px;min-height:65vh}.page-heading{padding-bottom:42px;border-bottom:1px solid var(--ink);margin-bottom:52px}.page-heading>.eyebrow{display:flex;justify-content:space-between;margin-bottom:34px;color:var(--muted)}.page-heading h1{margin-bottom:30px}.heading-bottom{display:flex;justify-content:space-between;align-items:flex-end;gap:28px}.heading-bottom p{font-size:16px;color:var(--muted);margin:0}.edition-size{font:12px var(--mono);white-space:nowrap}.edition-size span{color:var(--accent);margin:0 8px}.editorial-layout{display:grid;grid-template-columns:240px minmax(0,1fr);gap:80px}.edition-index{position:sticky;top:35px;align-self:start}.eyebrow,.small-label{color:var(--muted)}.edition-index>p{margin-bottom:30px}.edition-index ol{padding:0;list-style:none;margin:0 0 38px}.edition-index li{margin:0;border-top:1px solid var(--line);padding:17px 0}.edition-index li a{display:flex;gap:15px;text-decoration:none;font:18px/1.45 var(--serif)}.edition-index li span{font:10px var(--mono);color:var(--accent);padding-top:6px}.index-note{background:var(--sage);padding:22px;margin-bottom:26px}.index-note p{font-size:13px;line-height:1.7;margin:14px 0}.index-note .progress-copy{font:11px var(--mono);padding-top:15px;border-top:1px solid var(--line)}.text-link{font-size:13px}.learning-flow{min-width:0}.learning-unit{padding-bottom:44px;margin-bottom:48px;border-bottom:1px solid var(--line);scroll-margin-top:30px}.unit-meta{display:flex;justify-content:space-between;color:var(--muted);margin:0 0 23px}.unit-meta b{padding:0 7px;color:var(--accent);font-weight:400}.learning-unit h2{max-width:670px;font-size:clamp(32px,3.9vw,49px);line-height:1.12;margin-bottom:24px}.unit-intro{font-size:17px;line-height:1.85;max-width:670px}.code-figure{margin:30px 0 36px;background:var(--sage)}.code-label{display:flex;justify-content:space-between;padding:13px 22px;border-bottom:1px solid var(--line);font-size:9px;color:var(--muted)}pre{background:var(--code);color:var(--code-ink);padding:24px 28px;overflow-x:auto;font:13px/1.85 var(--mono);tab-size:4;border-radius:2px;max-width:100%;white-space:pre}code{font-family:var(--mono);font-size:.84em;overflow-wrap:anywhere}pre code{font-size:inherit;overflow-wrap:normal}.code-figure pre{margin:0;border-radius:0;background:transparent;color:var(--ink);padding:24px}.code-figure figcaption{font-size:12px;color:var(--muted);padding:0 24px 20px}.decision{margin-top:28px;border-top:1px solid var(--line);padding-top:24px}.decision-heading{display:flex;align-items:center;justify-content:space-between;margin-bottom:16px}.decision-mark{font:italic 25px var(--serif);color:var(--accent)}.question-text{font-size:16px;line-height:1.7}.question-text p{margin-bottom:20px}fieldset{border:0;margin:0;padding:0;min-width:0}.answer-option,.option-row{display:flex;align-items:flex-start;gap:13px;padding:16px 18px;border:1px solid var(--line);margin:9px 0;cursor:pointer;font-size:14px;line-height:1.6;transition:background .15s,border-color .15s}.answer-option:hover,.option-row:hover{background:var(--sage)}.answer-option:has(input:checked),.option-row:has(input:checked){border-color:var(--ink);background:var(--sage)}input[type=radio],input[type=checkbox]{width:17px;height:17px;flex-shrink:0;margin:3px 0;accent-color:var(--ink)}.option-letter{font:10px/2 var(--mono);color:var(--muted)}.button,button:not(.theme-button):not(.text-button){display:inline-flex;justify-content:space-between;align-items:center;gap:22px;min-height:46px;padding:12px 22px;background:var(--ink);color:var(--paper);border:1px solid var(--ink);border-radius:2px;text-decoration:none;font:14px/1.5 var(--sans);transition:opacity .15s}.button:hover,button:hover{opacity:.88}.answer-form>.button{margin-top:15px;width:100%}.button:disabled,button:disabled{opacity:.55;cursor:default}.secondary,.ghost{background:transparent!important;color:var(--ink)!important}.text-button{padding:8px 0;min-height:44px;color:var(--ink);background:none;border:0;font-size:13px;text-align:left}.unit-actions{display:flex;align-items:center;justify-content:space-between;gap:15px;margin-top:20px}.unit-actions>a{font-size:12px}.save-form{margin:0}.answer-feedback{background:var(--sage);padding:25px 26px;border-left:2px solid var(--ink);margin-top:24px;font-size:15px}.answer-feedback.retry{border-left-color:var(--accent)}.answer-feedback .eyebrow{display:block;color:var(--ink);margin-bottom:13px}.answer-feedback p:last-child{margin-bottom:0}.transfer{padding-top:17px;border-top:1px solid var(--line)}.transfer strong{display:block;font-size:13px;margin-bottom:8px}.foundation{border-bottom:1px solid var(--line);padding:15px 0;font-size:13px}.foundation summary{cursor:pointer;min-height:24px}.foundation p{margin-top:16px;color:var(--muted)}.form-error:empty{display:none}.form-error{color:var(--accent);font-size:13px;margin-top:14px}.next-thread{margin-top:34px;display:flex;flex-direction:column;gap:8px}.next-thread>span{font:9px var(--mono);letter-spacing:.09em;color:var(--muted)}.next-thread>a{font:20px var(--serif);text-decoration:none}.edition-end{padding:30px 0;max-width:600px}.edition-end h2{margin-top:22px;font-size:48px}.edition-end p{font-size:15px;color:var(--muted)}.edition-end .small{font-size:12px;margin-top:20px}.continue-strip{display:flex;align-items:center;gap:30px;background:var(--sage);padding:26px 30px;text-decoration:none;margin:-15px 0 50px}.continue-strip strong{font:23px/1.3 var(--serif);flex:1}.continue-strip>span:last-child{font-size:23px}.path-layout{display:grid;grid-template-columns:230px minmax(0,1fr);gap:75px}.path-layout aside{font-size:14px;color:var(--muted)}.path-layout aside .eyebrow{margin-bottom:24px}.week-row{border-bottom:1px solid var(--line)}.week-row summary{display:flex;align-items:center;gap:24px;list-style:none;cursor:pointer;padding:25px 0}.week-row summary::-webkit-details-marker{display:none}.week-number{font:31px var(--serif);color:var(--muted);min-width:38px}.week-heading{flex:1}.week-heading strong{display:block;font:23px/1.3 var(--serif);margin-top:5px}.week-status{font:10px var(--mono);color:var(--muted)}.expand-sign{font-size:21px}.week-row[open] .expand-sign{transform:rotate(45deg)}.week-row[open] .week-number{color:var(--accent)}.week-content{padding:0 0 30px 63px}.week-content>p{font-size:14px;color:var(--muted)}.lesson-row{display:flex;justify-content:space-between;gap:18px;text-decoration:none;font-size:14px;padding:15px 0;border-top:1px solid var(--line)}.lesson-row>span:first-child{flex:1}.lesson-row .mono{margin-right:10px;color:var(--muted)}.workshop-feature{display:grid;grid-template-columns:1.5fr 1fr;background:var(--sage);padding:45px 48px;gap:50px}.workshop-feature h2{margin:22px 0}.workshop-feature p{font-size:15px}.workshop-diagram{border-left:1px solid var(--line);padding:15px 0 15px 45px;display:flex;flex-direction:column;justify-content:center;gap:18px;font:11px var(--mono);color:var(--muted)}.workshop-diagram strong{font:italic 28px var(--serif);color:var(--ink);margin-left:15px}.section-heading{display:flex;align-items:center;justify-content:space-between;gap:20px;border-bottom:1px solid var(--ink);padding-bottom:18px;margin:52px 0 0}.section-heading h2{font-size:32px;margin:0}.exercise-row{display:grid;grid-template-columns:80px 1fr 115px;align-items:center;gap:28px;padding:25px 0;border-bottom:1px solid var(--line);text-decoration:none}.exercise-row h3{margin:8px 0 0;font-size:25px}.notes-columns{display:grid;grid-template-columns:1fr 1fr;gap:70px}.notes-columns .section-heading{margin-top:0}.saved-note{padding:28px 0;border-bottom:1px solid var(--line)}.saved-note h3{margin:15px 0;font-size:28px}.saved-note h3 a{text-decoration:none}.saved-note p{font-size:14px;color:var(--muted)}.note-body{white-space:pre-wrap}.empty-state{padding:36px 0;color:var(--muted)}.empty-state h3{color:var(--ink)}.empty-state p,.empty-state a{font-size:14px}.empty-mark{font:80px/1 var(--serif);color:var(--accent)}.project-map{display:flex;align-items:center;justify-content:space-between;gap:16px;background:var(--sage);padding:32px;margin-bottom:50px;font:18px var(--serif)}.project-map b{color:var(--accent);font-weight:400}.milestone-row{padding:0 0 35px;margin-bottom:35px;border-bottom:1px solid var(--line)}.milestone-row h2{font-size:30px}.milestone-row h2 a{text-decoration:none}.milestone-row p{font-size:14px;color:var(--muted)}.site-footer{padding-top:38px;padding-bottom:38px;border-top:1px solid var(--ink);display:flex;align-items:flex-start;gap:50px}.footer-brand{font:bold 32px var(--serif);letter-spacing:-1.5px;text-decoration:none}.site-footer p{font:italic 18px/1.5 var(--serif);margin:0}.site-footer>div{display:flex;align-items:center;flex-wrap:wrap;justify-content:flex-end;gap:20px;margin-left:auto;font-size:11px}.site-footer form{margin:0}.site-footer .text-button{font-size:11px}.card{padding:28px 0;border-top:1px solid var(--line);margin:30px 0;background:transparent}.card h2{font-size:29px}.container>article{max-width:760px;line-height:1.9;margin-bottom:40px}.container>article h2{margin-top:40px}.container>h1{font-size:clamp(38px,5vw,62px);margin:30px 0}.container>form{max-width:850px}.container>form .card{margin-top:15px}.container>form>.button{margin-top:20px}.badge{display:inline-block;font:11px/1.65 var(--mono);color:var(--muted);padding:5px 8px;background:var(--sage);border-radius:2px}.badge.success,.success{color:var(--ink)}.warning,.danger{color:var(--accent)}input:not([type=checkbox]):not([type=radio]):not([type=hidden]),textarea{display:block;width:100%;color:var(--ink);background:var(--white);border:1px solid var(--line);padding:14px 16px;border-radius:2px;font-size:16px;margin:8px 0 20px}textarea{min-height:100px;resize:vertical}label{font-size:14px}.dim-grid{display:flex;gap:20px;flex-wrap:wrap;border-top:1px solid var(--line);border-bottom:1px solid var(--line);padding:18px 0;margin:30px 0;font:11px var(--mono);color:var(--muted)}.dim-grid .done{color:var(--accent)}.lesson-list,.week-list{list-style:none;padding:0}.lesson-list a,.week-list a{display:flex;justify-content:space-between;gap:20px;padding:20px 0;border-bottom:1px solid var(--line);text-decoration:none}.tutor-widget{border-top:1px solid var(--line);padding-top:30px;margin-top:40px}table{border-collapse:collapse;width:100%;font-size:14px;display:block;overflow:auto}th,td{text-align:left;padding:12px;border-bottom:1px solid var(--line)}blockquote{border-left:2px solid var(--accent);padding:8px 25px;margin:24px 0;font:italic 23px/1.6 var(--serif)}.skip-link{position:absolute;top:-100px;left:16px;padding:12px;background:var(--ink);color:var(--paper);z-index:30}.skip-link:focus{top:10px}.sr-only{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0,0,0,0);white-space:nowrap;border:0}.login-layout{display:grid;grid-template-columns:1.2fr 1fr;gap:100px;padding:50px 0 90px}.login-layout h1{font-size:70px}.login-form{max-width:380px;padding-top:20px}.login-form h2{font-size:30px}.login-form button{width:100%;margin-top:12px}.login-layout .eyebrow{display:block;margin-bottom:28px}.lab-header{border-bottom:1px solid var(--ink);padding-bottom:32px;margin-bottom:42px}.lab-header h1{font-size:clamp(38px,4.8vw,62px);margin-top:25px}.lab-layout{display:grid;grid-template-columns:minmax(0,1fr) 280px;gap:70px}.lab-layout article{min-width:0}.lab-layout aside{font-size:14px}.lab-layout aside h2{font-size:28px}.hint-step{border-top:1px solid var(--line);padding:18px 0}.hint-step p{font-size:14px;margin:12px 0 0}.lab-download{background:var(--sage);padding:26px;margin:30px 0}.lab-download h2{font-size:30px}.lab-download p{font-size:14px}.lab-layout article>h2{margin-top:35px}
@media(min-width:1500px){.masthead,.main-nav,.container,.site-footer{max-width:1400px}.editorial-layout{grid-template-columns:270px minmax(0,760px);justify-content:space-between;gap:100px}}
@media(max-width:1000px){.masthead,.main-nav,.container,.site-footer{padding-left:32px;padding-right:32px}.editorial-layout{gap:40px;grid-template-columns:200px minmax(0,1fr)}.main-nav>div{gap:24px}.path-layout{grid-template-columns:180px minmax(0,1fr);gap:35px}.notes-columns{gap:36px}.lab-layout{grid-template-columns:minmax(0,1fr) 230px;gap:35px}}
@media(max-width:720px){body{font-size:16px}.masthead,.container,.site-footer{padding-left:23px;padding-right:23px}.masthead{height:92px;gap:14px}.brand{font-size:44px}.brand-caption{display:none}.utilities{gap:17px}.theme-button{font-size:10px}.account{font-size:12px}.main-nav{position:fixed;bottom:0;left:0;right:0;z-index:20;height:calc(70px + env(safe-area-inset-bottom));padding:0 10px env(safe-area-inset-bottom);background:var(--paper);border-top:1px solid var(--line);border-bottom:0}.main-nav>div{width:100%;justify-content:space-around;gap:4px}.main-nav a{flex-direction:column;gap:4px;justify-content:center;font-size:12px;min-width:65px;padding:6px 4px}.main-nav a[aria-current]:after{bottom:auto;top:-1px}.nav-index{font-size:8px}.main-nav .nav-search{display:none}.container{padding-top:32px;padding-bottom:50px}.page-heading{margin-bottom:32px;padding-bottom:27px}.page-heading>.eyebrow{margin-bottom:25px;font-size:8px;letter-spacing:.055em;gap:20px}.page-heading>.eyebrow>span:last-child{display:none}h1{font-size:47px;letter-spacing:-.045em}.page-heading h1{margin-bottom:24px}.heading-bottom{display:block}.heading-bottom p{font-size:14px;line-height:1.7}.edition-size{display:block;font-size:10px;margin-top:22px}.desktop-only{display:none}.editorial-layout{display:block}.edition-index{position:static;display:none}.learning-unit{margin-bottom:34px;padding-bottom:30px;scroll-margin-top:20px}.unit-meta{font-size:9px;margin-bottom:20px}.learning-unit h2{font-size:36px;line-height:1.13;letter-spacing:-.035em}.unit-intro{font-size:16px;line-height:1.8}.code-figure{margin:24px 0 28px}.code-figure pre{padding:20px;font-size:12px}.code-label{padding:12px 20px;font-size:8px}.code-figure figcaption{padding:0 20px 18px;font-size:11px}.question-text{font-size:15px}.answer-option{padding:14px 12px;gap:10px;font-size:13px}.option-letter{display:none}.decision-heading .eyebrow{font-size:9px}.answer-feedback{padding:20px 18px;font-size:14px}.unit-actions{align-items:flex-start;gap:8px}.unit-actions>a{font-size:11px;min-height:44px;display:flex;align-items:center;white-space:nowrap}.text-button{font-size:12px}.next-thread>a{font-size:20px}.edition-end h2{font-size:41px}.path-layout{display:block}.path-layout aside{margin-bottom:32px;font-size:13px}.path-layout aside p:not(.eyebrow){max-width:440px}.continue-strip{padding:22px;gap:16px;flex-wrap:wrap;margin:0 0 32px}.continue-strip>.eyebrow{width:100%;font-size:9px}.continue-strip strong{font-size:24px}.week-row summary{gap:14px;padding:22px 0}.week-number{font-size:27px;min-width:29px}.week-heading strong{font-size:23px}.week-heading .small-label{font-size:8px}.week-status{display:none}.week-content{padding-left:0}.lesson-row{font-size:13px}.lesson-row .small-label{font-size:8px;min-width:50px}.lesson-row .mono{display:none}.workshop-feature{grid-template-columns:1fr;padding:26px;gap:28px}.workshop-feature h2{font-size:32px}.workshop-feature .eyebrow{font-size:9px}.workshop-diagram{border-left:0;border-top:1px solid var(--line);padding:24px 0 0;gap:12px}.workshop-diagram strong{font-size:24px}.section-heading{margin-top:36px}.section-heading h2{font-size:28px}.exercise-row{grid-template-columns:1fr;gap:8px;padding:23px 0}.exercise-row>div>.small-label{display:none}.exercise-row h3{font-size:27px;margin:0}.exercise-row .small-label{font-size:9px}.notes-columns{display:block}.notes-columns>section+section{margin-top:45px}.project-map{flex-direction:column;align-items:flex-start;padding:25px;gap:12px}.project-map b{transform:rotate(90deg)}.milestone-row h2{font-size:28px}.site-footer{display:flex;flex-wrap:wrap;gap:25px;padding-top:30px;padding-bottom:calc(105px + env(safe-area-inset-bottom))}.site-footer>div{margin:0;justify-content:flex-start;width:100%;gap:22px}.site-footer p{font-size:17px}.site-footer .footer-brand{font-size:30px}.container>h1{font-size:40px}.container>article{font-size:16px}.container>article h2{font-size:30px}.card{padding:22px 0;margin:22px 0}.card h2{font-size:29px}.dim-grid{gap:15px;font-size:9px}.option-row{padding:13px;font-size:14px}pre{font-size:12px;padding:20px}blockquote{font-size:21px;padding-left:18px}.login-layout{display:block;padding:15px 0 30px}.login-layout h1{font-size:49px}.login-form{max-width:none;margin-top:35px;border-top:1px solid var(--line);padding-top:30px}.lab-layout{display:block}.lab-layout aside{border-top:1px solid var(--ink);padding-top:30px;margin-top:35px}.lab-header h1{font-size:41px}.lab-download{padding:22px}.form-error{font-size:13px}}
@media(prefers-reduced-motion:reduce){html{scroll-behavior:auto}*,*:before,*:after{animation:none!important;transition:none!important}}
.resume-link{display:block;margin:-20px 0 35px;font-size:13px;color:var(--accent)}
.brand{font-size:48px;letter-spacing:-2.6px;white-space:nowrap}
@media(max-width:720px){.brand{font-size:34px;letter-spacing:-1.8px}}
