:root{color-scheme:light;--font-interface:system-ui, -apple-system, BlinkMacSystemFont, "Segoe UI", Arial, sans-serif;--font-content:Georgia, "Times New Roman", serif;--font-code:ui-monospace, SFMono-Regular, Consolas, "Liberation Mono", monospace;--paper:#fbfaf7;--surface:#fff;--surface-muted:#f3f1ec;--ink:#202326;--ink-soft:#575b5f;--border:#d8d4cc;--border-strong:#aaa59b;--accent:#315f78;--accent-soft:#eaf1f4;--warning:#775925;--error:#7b3f3f;--header-background:#fbfaf7f7;--dialog-shadow:#20232629;--dialog-backdrop:#20232659;--field-placeholder:#73777b;--interactive-hover:#f7f9fa;--highlight-ink:#172f3c;--highlight-background:#f2d678;--highlight-ring:#b8881633;--ink-disabled:#737577;--ink-faint:#77746e;--practice-accent:#4f6d55;--practice-text:#38543d;--practice-tag-text:#48544a;--practice-surface:#f0f5f1;--practice-surface-soft:#eef3ef;--practice-border:#cbd9ce;--practice-border-soft:#d2ded4;--practice-response:#f7f9f7;--practice-response-border:#d6dfd8;--code-surface:#f7f7f5;--danger-text:#6f3d3d;--danger-border:#c9aaaa;--warning-surface:#f8f4ea;--warning-border:#9c7b35;--header-height:3.5rem}html[data-theme=dark]{color-scheme:dark;--paper:#111416;--surface:#181c1f;--surface-muted:#202529;--ink:#e8e6df;--ink-soft:#adb3b7;--border:#30363a;--border-strong:#4d565c;--accent:#80b8d2;--accent-soft:#19313c;--warning:#d4b46a;--error:#d89090;--header-background:#111416f0;--dialog-shadow:#00000075;--dialog-backdrop:#000000a8;--field-placeholder:#899197;--interactive-hover:#202a2f;--highlight-ink:#fff4c8;--highlight-background:#6f5a1f;--highlight-ring:#e5bf5638;--ink-disabled:#858d92;--ink-faint:#92999d;--practice-accent:#83ae8b;--practice-text:#a9d1b0;--practice-tag-text:#b9d2bd;--practice-surface:#19251d;--practice-surface-soft:#1d2921;--practice-border:#35503b;--practice-border-soft:#314638;--practice-response:#171f19;--practice-response-border:#33463a;--code-surface:#161a1d;--danger-text:#e2a0a0;--danger-border:#754f4f;--warning-surface:#292318;--warning-border:#8f743a}*{box-sizing:border-box}html{scroll-behavior:smooth;scroll-padding-top:calc(var(--header-height) + 1.5rem);background:var(--paper)}body{background:var(--paper);min-width:20rem;color:var(--ink);font-family:var(--font-interface);margin:0;line-height:1.55}a{color:var(--accent);text-underline-offset:.18em;text-decoration-thickness:.08em}a:hover{text-decoration-thickness:.13em}:focus-visible{outline:3px solid var(--accent);outline-offset:3px}button,input,summary{font:inherit}button,summary{cursor:pointer}.sr-only{clip:rect(0, 0, 0, 0);white-space:nowrap;border:0;width:1px;height:1px;margin:-1px;padding:0;position:absolute;overflow:hidden}.skip-link{z-index:100;background:var(--surface);border:2px solid var(--accent);padding:.65rem .8rem;position:fixed;top:.5rem;left:.5rem;transform:translateY(-150%)}.skip-link:focus{transform:translateY(0)}.site-header{z-index:50;min-height:var(--header-height);background:var(--header-background);backdrop-filter:blur(12px);border-bottom:1px solid var(--border);grid-template-columns:1fr auto auto auto;align-items:center;gap:1rem;padding:.55rem clamp(1rem,2.5vw,2rem);display:grid;position:sticky;top:0}.site-brand{width:fit-content;color:var(--ink);letter-spacing:-.01em;align-items:center;gap:.65rem;font-weight:720;text-decoration:none;display:inline-flex}.site-brand__mark{width:1.9rem;height:1.9rem;color:var(--surface);background:var(--ink);font-family:var(--font-content);border-radius:2px;place-items:center;font-size:1.12rem;display:inline-grid}.site-header nav a{color:var(--ink-soft);font-size:.92rem;font-weight:650;text-decoration:none}.site-header nav{gap:.85rem;display:flex}.search-trigger,.icon-button,.theme-toggle{min-height:2.35rem;color:var(--ink);background:var(--surface);border:1px solid var(--border-strong);border-radius:3px;align-items:center;gap:.7rem;padding:.42rem .7rem;display:inline-flex}.theme-toggle{justify-content:center;width:2.35rem;padding:.42rem}.theme-toggle svg{fill:none;stroke:currentColor;stroke-linecap:round;stroke-linejoin:round;stroke-width:1.8px;width:1rem;height:1rem}.theme-toggle__sun,html[data-theme=dark] .theme-toggle__moon{display:none}html[data-theme=dark] .theme-toggle__sun{display:block}.search-trigger kbd{color:var(--ink-soft);font-family:var(--font-code);font-size:.72rem}.search-trigger{justify-content:space-between;min-width:13.5rem}.search-trigger__label-short{display:none}.search-dialog{top:calc(var(--header-height) + .55rem);z-index:80;width:min(50rem,100vw - 2rem);max-height:calc(100dvh - var(--header-height) - 1.5rem);color:var(--ink);background:var(--surface);border:1px solid var(--border-strong);box-shadow:0 .75rem 2.2rem var(--dialog-shadow);border-radius:4px;margin:0;padding:0;position:fixed;left:auto;right:clamp(.8rem,2.5vw,2rem);overflow:hidden}.search-dialog__header{border-bottom:1px solid var(--border);align-items:center;gap:.65rem;padding:.8rem;display:flex}.eyebrow{color:var(--ink-soft);letter-spacing:.1em;text-transform:uppercase;margin:0;font-size:.72rem;font-weight:750}.search-field{flex:1;padding:0;display:block}.search-field input{width:100%;min-height:2.85rem;color:var(--ink);background:var(--paper);border:1px solid var(--border-strong);border-radius:3px;padding:.6rem .8rem;font-size:1.02rem}.search-field input::placeholder{color:var(--field-placeholder)}.search-dialog__close{flex:none;min-height:2.85rem}.search-status{color:var(--ink-soft);background:var(--surface-muted);border-bottom:1px solid var(--border);margin:0;padding:.55rem .9rem;font-size:.8rem}.search-results{max-height:min(34rem, calc(100dvh - var(--header-height) - 10rem));overscroll-behavior:contain;overflow-y:auto}.search-result{border-bottom:1px solid var(--border);padding:.9rem 1rem}.search-result:hover,.search-result:focus-within{background:var(--interactive-hover)}.search-result__heading{justify-content:space-between;align-items:baseline;gap:1rem;display:flex}.search-result__heading>a{font-weight:720}.search-result__heading>span{color:var(--ink-soft);letter-spacing:.04em;text-transform:uppercase;flex:none;font-size:.7rem;font-weight:700}.search-result__excerpt{color:var(--ink-soft);font-family:var(--font-content);margin:.25rem 0 0;font-size:.9rem}.search-result__sections{border-left:2px solid var(--accent-soft);gap:.35rem;margin-top:.65rem;padding-left:.7rem;display:grid}.search-result__section{color:var(--ink);border-radius:2px;grid-template-columns:minmax(9rem,.45fr) minmax(0,1fr);gap:.8rem;padding:.3rem .4rem;text-decoration:none;display:grid}.search-result__section:hover,.search-result__section:focus-visible{background:var(--accent-soft)}.search-result__section strong{color:var(--accent);font-size:.84rem}.search-result__section-excerpt{color:var(--ink-soft);font-family:var(--font-content);font-size:.82rem}.search-result mark{color:var(--highlight-ink);background:var(--highlight-background);border-radius:2px;padding:0 .08em}.page-search-highlight{color:var(--highlight-ink);background:var(--highlight-background);box-shadow:0 0 0 .16rem var(--highlight-ring);border-radius:2px;padding:.04em .12em}.search-dialog__hint{color:var(--ink-soft);background:var(--surface-muted);border-top:1px solid var(--border);text-align:right;margin:0;padding:.45rem .9rem;font-size:.72rem}.search-dialog__hint kbd{font-family:var(--font-code);font-size:.7rem}.site-footer{color:var(--ink-soft);border-top:1px solid var(--border);text-align:center;padding:1rem 2rem;font-size:.8rem}.course-shell{grid-template-columns:minmax(15.5rem,19rem) minmax(0,50rem) minmax(12rem,15rem);justify-content:center;gap:clamp(1rem,2vw,2.5rem);max-width:100rem;margin:0 auto;padding:0 clamp(1rem,2vw,2rem);display:grid}.course-shell--without-toc{grid-template-columns:minmax(15.5rem,19rem) minmax(0,62rem)}.course-shell--without-navigation{grid-template-columns:minmax(0,62rem)}.course-sidebar,.course-toc{top:var(--header-height);max-height:calc(100dvh - var(--header-height));scrollbar-width:thin;align-self:start;padding:1.25rem 0 2rem;position:sticky;overflow-y:auto}.course-main{min-width:0;padding:1.2rem 0 4rem}.course-navigation__map{color:var(--ink);margin-bottom:1rem;font-size:.82rem;font-weight:720;text-decoration:none;display:block}.course-navigation__block-link,.course-navigation__practice{color:var(--ink-soft);border-top:1px solid var(--border);padding:.55rem 0;font-size:.74rem;font-weight:700;text-decoration:none;display:block}.course-navigation__practice{color:var(--accent);border-bottom:1px solid var(--border);margin-top:.8rem}.course-navigation details{border-top:1px solid var(--border);padding:.25rem 0}.course-navigation summary{color:var(--ink);grid-template-columns:auto 1fr;gap:.55rem;padding:.45rem 0;font-size:.78rem;font-weight:760;list-style-position:outside;display:grid}.course-navigation__block-title{color:var(--ink-soft);font-weight:580}.course-navigation__block{border-left:1px solid var(--border);padding:.15rem 0 .75rem .55rem}.course-navigation section+section{margin-top:.8rem}.course-navigation h3{color:var(--ink-soft);letter-spacing:.02em;margin:.2rem 0 .35rem;font-size:.72rem;font-weight:710}.course-navigation ol{gap:.1rem;margin:0;padding:0;list-style:none;display:grid}.course-navigation__unit>a,.course-navigation__unit>span{color:var(--ink-soft);border-left:2px solid #0000;padding:.35rem .45rem;font-size:.76rem;line-height:1.35;text-decoration:none;display:block}.course-navigation__unit>a:hover{color:var(--ink);background:var(--surface-muted)}.course-navigation__unit.is-active>a{color:var(--ink);background:var(--accent-soft);border-left-color:var(--accent);font-weight:690}.course-navigation__unit.is-pending>span{color:var(--ink-disabled)}.course-navigation__unit small{color:var(--ink-faint);text-transform:uppercase;margin-left:.3rem;font-size:.62rem;display:inline-block}.breadcrumbs ol{color:var(--ink-soft);flex-wrap:wrap;gap:.35rem;margin:0 0 1.5rem;padding:0;font-size:.78rem;list-style:none;display:flex}.breadcrumbs li{gap:.35rem;display:inline-flex}.breadcrumbs a{color:var(--ink-soft)}.course-toc{padding-left:.25rem}.internal-toc h2{color:var(--ink-soft);font-family:var(--font-interface);letter-spacing:.08em;text-transform:uppercase;margin:0 0 .65rem;font-size:.72rem}.internal-toc ol{border-left:1px solid var(--border);gap:.2rem;margin:0;padding:0;list-style:none;display:grid}.internal-toc a{color:var(--ink-soft);border-left:2px solid #0000;padding:.28rem .55rem;font-size:.74rem;line-height:1.35;text-decoration:none;display:block}.internal-toc a:hover,.internal-toc a[aria-current=location]{color:var(--ink);border-left-color:var(--accent)}.internal-toc .is-nested a{padding-left:1rem}@media (width<=1180px){.course-shell{grid-template-columns:minmax(15rem,18rem) minmax(0,50rem)}.course-toc{display:none}}@media (width<=800px){:root{--header-height:3.3rem}.site-header{grid-template-columns:1fr auto auto;gap:.65rem;padding-inline:.8rem}.site-header>nav,.search-trigger kbd{display:none}.search-trigger{min-width:auto}.search-trigger__label-long{display:none}.search-trigger__label-short{display:inline}.search-dialog{top:calc(var(--header-height) + .35rem);width:calc(100% - 1rem);max-height:calc(100dvh - var(--header-height) - .85rem);right:.5rem}.search-result__section{display:block}.search-result__section-excerpt{margin-top:.12rem;display:block}.search-dialog__hint{display:none}.course-shell,.course-shell--without-toc{padding:0 1rem;display:block}.course-sidebar{max-height:none;padding:.7rem 0 0;display:block;position:static;overflow:visible}.course-navigation{gap:.4rem;padding-bottom:.55rem;display:flex;overflow-x:auto}.course-navigation__map,.course-navigation__block-link,.course-navigation__practice{background:var(--surface);border:1px solid var(--border);white-space:nowrap;flex:none;margin:0;padding:.4rem .55rem}.course-navigation ol{flex:none;gap:.4rem;display:flex}.course-navigation__unit>a{background:var(--surface);border:1px solid var(--border);width:12rem;min-height:100%;padding:.4rem .55rem}.course-main{width:100%;padding-top:1rem}.breadcrumbs{overflow-x:auto}.breadcrumbs ol{flex-wrap:nowrap;width:max-content}.site-footer{padding-inline:1rem}}@media (prefers-reduced-motion:reduce){html{scroll-behavior:auto}*,:before,:after{scroll-behavior:auto!important;transition-duration:.01ms!important}}.course-article,.course-overview{font-family:var(--font-content);font-size:1.04rem;line-height:1.72}.course-article__header,.course-overview__header{border-bottom:1px solid var(--border);margin-bottom:2.2rem;padding-bottom:1.25rem}.course-article__kicker,.course-overview__kicker{color:var(--accent);font-family:var(--font-interface);letter-spacing:.08em;text-transform:uppercase;margin:0 0 .45rem;font-size:.76rem;font-weight:760}.course-article h1,.course-overview h1{max-width:22ch;font-family:var(--font-content);letter-spacing:-.025em;margin:0;font-size:clamp(2.1rem,4.5vw,3.35rem);font-weight:620;line-height:1.08}.course-article__lead,.course-overview__lead{max-width:64ch;color:var(--ink-soft);margin:1.1rem 0 0;font-size:1.12rem;line-height:1.62}.course-article p,.course-article li,.course-overview p,.course-overview li{max-width:74ch}.course-article p,.course-overview p{margin:.75rem 0 1rem}.course-article ul,.course-article ol,.course-overview ul,.course-overview ol{padding-left:1.4rem}.course-article li+li,.course-overview li+li{margin-top:.32rem}.section-heading{max-width:31ch;scroll-margin-top:calc(var(--header-height) + 1.2rem);color:var(--ink);font-family:var(--font-content);align-items:baseline;gap:.5rem;font-weight:620;line-height:1.2;display:flex}h2.section-heading{letter-spacing:-.012em;margin:3.4rem 0 1.2rem;font-size:clamp(1.65rem,3vw,2.15rem)}h3.section-heading{margin:2.1rem 0 .8rem;font-size:1.32rem}.heading-anchor{opacity:0;color:var(--accent);font-family:var(--font-interface);font-size:.75em;text-decoration:none}.section-heading:hover .heading-anchor,.heading-anchor:focus-visible{opacity:1}.callout{background:var(--surface-muted);border:1px solid var(--border);border-left:4px solid var(--accent);break-inside:avoid;max-width:74ch;margin:1.4rem 0;padding:.85rem 1rem .9rem}.callout--warning{border-left-color:var(--warning)}.callout--error{border-left-color:var(--error)}.callout--definition{background:var(--surface);border-left-color:var(--ink-soft)}.callout--practice{border-left-color:var(--practice-accent)}.callout__label{color:var(--ink-soft);font-family:var(--font-interface);letter-spacing:.09em;text-transform:uppercase;margin:0 0 .3rem;font-size:.7rem;font-weight:790}.callout__body>:first-child{margin-top:0}.callout__body>:last-child{margin-bottom:0}.table-scroll{border:1px solid var(--border);scrollbar-width:thin;max-width:100%;margin:1.4rem 0 1.8rem;overflow-x:auto}.table-scroll table{border-collapse:collapse;width:100%;min-width:42rem;font-family:var(--font-interface);font-size:.78rem;line-height:1.45}.table-scroll th,.table-scroll td{border-bottom:1px solid var(--border);border-right:1px solid var(--border);text-align:left;vertical-align:top;padding:.65rem .7rem}.table-scroll th{color:var(--ink);background:var(--surface-muted);font-weight:760}.table-scroll tr:last-child td{border-bottom:0}.table-scroll th:last-child,.table-scroll td:last-child{border-right:0}.http-message{background:var(--surface);border:1px solid var(--border-strong);break-inside:avoid;max-width:74ch;margin:1.5rem 0}.http-message figcaption{color:var(--ink-soft);background:var(--surface-muted);border-bottom:1px solid var(--border);font-family:var(--font-interface);justify-content:space-between;align-items:center;gap:1rem;padding:.48rem .7rem;font-size:.72rem;font-weight:680;display:flex}.http-message__kind{font-family:var(--font-code);text-transform:uppercase;font-size:.66rem}.http-message__content>:first-child,.code-frame pre{margin:0}.code-frame{max-width:100%;position:relative}.code-frame pre{max-width:100%;font-family:var(--font-code);scrollbar-width:thin;border-radius:0;padding:1.05rem 1rem 1.15rem;font-size:.82rem;line-height:1.55;overflow-x:auto;background:var(--code-surface)!important}html[data-theme=dark] .astro-code,html[data-theme=dark] .astro-code span{color:var(--shiki-dark)!important;font-style:var(--shiki-dark-font-style)!important;font-weight:var(--shiki-dark-font-weight)!important;text-decoration:var(--shiki-dark-text-decoration)!important}.copy-button{min-height:1.8rem;color:var(--ink-soft);background:var(--surface);border:1px solid var(--border-strong);font-family:var(--font-interface);border-radius:2px;padding:.2rem .45rem;font-size:.68rem;position:absolute;top:.55rem;right:.55rem}.sequence-diagram{background:var(--surface);border:1px solid var(--border-strong);break-inside:avoid;max-width:100%;margin:2rem 0;padding:1rem;overflow-x:auto}.sequence-diagram figcaption{font-family:var(--font-interface);margin-bottom:1rem;font-size:.8rem;font-weight:750}.sequence-diagram__flow{align-items:stretch;min-width:58rem;display:flex}.sequence-node{border:1px solid var(--border-strong);min-width:8.8rem;font-family:var(--font-interface);grid-template-columns:auto 1fr;align-content:center;column-gap:.45rem;padding:.75rem;display:grid}.sequence-node strong{color:var(--accent);grid-row:span 2}.sequence-node span{font-size:.78rem;font-weight:760}.sequence-node small{color:var(--ink-soft);font-size:.66rem}.sequence-arrow{min-width:4.5rem;color:var(--ink-soft);font-family:var(--font-interface);place-items:center;font-size:.62rem;display:grid}.sequence-arrow b{color:var(--ink);font-size:1.2rem}.concurrency-timeline{max-width:74ch;scroll-margin-top:calc(var(--header-height) + 1rem);background:var(--surface);border:1px solid var(--border-strong);break-inside:avoid;margin:2rem 0;padding:1rem}.concurrency-timeline figcaption{font-family:var(--font-interface);font-size:.8rem;font-weight:750}.concurrency-timeline__legend{color:var(--ink-soft);font-family:var(--font-interface);flex-wrap:wrap;gap:1rem;margin:.75rem 0 1.2rem;font-size:.68rem;display:flex}.concurrency-timeline__legend span{align-items:center;gap:.35rem;display:inline-flex}.concurrency-timeline__legend i{border:1px solid var(--border-strong);width:1.2rem;height:.55rem}.concurrency-timeline__case+.concurrency-timeline__case{border-top:1px solid var(--border);margin-top:1.4rem;padding-top:1.2rem}.concurrency-timeline__case header{font-family:var(--font-interface);flex-wrap:wrap;justify-content:space-between;gap:.5rem 1rem;display:flex}.concurrency-timeline__case header strong{font-size:.76rem}.concurrency-timeline__case header span{color:var(--ink-soft);font-size:.66rem}.concurrency-timeline__axis{color:var(--ink-soft);font-family:var(--font-interface);justify-content:space-between;margin:.65rem 0 .3rem 5.4rem;font-size:.58rem;display:flex}.concurrency-timeline__lane{grid-template-columns:4.7rem minmax(28rem,1fr);align-items:center;gap:.7rem;display:grid;overflow-x:auto}.concurrency-timeline__lane+.concurrency-timeline__lane{margin-top:.35rem}.concurrency-timeline__lane b{font-family:var(--font-interface);font-size:.66rem}.concurrency-timeline__track{min-width:28rem;min-height:2rem;display:flex}.concurrency-timeline__track span{flex:var(--size);border:1px solid var(--border-strong);min-width:0;font-family:var(--font-interface);text-align:center;place-items:center;padding:.3rem;font-size:.58rem;display:grid}.concurrency-timeline .is-work{color:var(--surface);background:var(--accent)}.concurrency-timeline .is-wait{color:var(--ink-soft);background:var(--surface-muted)}.concurrency-timeline .is-empty{background:0 0;border-color:#0000}.cross-reference{border-top:1px solid var(--border);border-bottom:1px solid var(--border);max-width:74ch;font-family:var(--font-interface);grid-template-columns:auto 1fr;gap:.8rem;margin:1.4rem 0;padding:.8rem 0;font-size:.8rem;display:grid}.cross-reference>span{color:var(--ink-soft);font-weight:720}.source-list{gap:.8rem;margin:1rem 0;padding:0;list-style:none;display:grid}.source-reference{border-top:1px solid var(--border);max-width:74ch;padding:.85rem 0}.source-reference>a{font-family:var(--font-interface);font-size:.88rem;font-weight:720}.source-reference p{color:var(--ink-soft);margin:.25rem 0 0;font-size:.9rem}.unit-pagination{border-top:1px solid var(--border-strong);font-family:var(--font-interface);grid-template-columns:1fr 1fr;gap:1rem;margin-top:4rem;padding-top:1.25rem;font-size:.78rem;display:grid}.unit-pagination>div{gap:.3rem;display:grid}.unit-pagination__next{text-align:right}.unit-pagination__label{color:var(--ink-soft);letter-spacing:.07em;text-transform:uppercase;font-size:.68rem;font-weight:730}.course-map{gap:1.1rem;margin:2rem 0;display:grid}.course-map__block{border-top:1px solid var(--border-strong);padding:1.1rem 0}.course-map__block h2{font-family:var(--font-content);margin:0;font-size:1.45rem;font-weight:620}.course-map__objective{color:var(--ink-soft)}.course-map__module{margin-top:1.2rem}.course-map__module h3{font-family:var(--font-interface);margin:0 0 .5rem;font-size:.82rem}.unit-list{border-top:1px solid var(--border);margin:0;padding:0;list-style:none}.unit-list li{border-bottom:1px solid var(--border);font-family:var(--font-interface);grid-template-columns:3rem minmax(0,1fr) auto;align-items:baseline;gap:.65rem;padding:.55rem 0;font-size:.8rem;display:grid}.unit-list__id{color:var(--ink-soft);font-family:var(--font-code)}.status-label{color:var(--ink-soft);letter-spacing:.06em;text-transform:uppercase;font-size:.65rem;font-weight:740}.status-label--available{color:var(--accent)}code:not(pre code){background:var(--surface-muted);border:1px solid var(--border);font-family:var(--font-code);border-radius:2px;padding:.08em .26em;font-size:.86em}@media (width<=620px){.course-article,.course-overview{font-size:1rem}.course-article h1,.course-overview h1{font-size:2.05rem}.heading-anchor{opacity:1}.unit-pagination{grid-template-columns:1fr}.unit-pagination__next{text-align:left}.unit-list li{grid-template-columns:2.7rem 1fr}.concurrency-timeline{padding:.8rem;overflow-x:auto}.status-label{grid-column:2}}:root{--site-width:76rem;--site-gutter:clamp(1rem, 3vw, 2.5rem);--font-display:Inter, "Helvetica Neue", "Segoe UI", Arial, sans-serif;--paper:#f3f4f0;--surface:#fbfcf9;--surface-muted:#e9ebe6;--ink:#111614;--ink-soft:#58615d;--ink-faint:#737c77;--border:#d3d8d2;--border-strong:#9ba49f;--accent:#116b57;--accent-strong:#084f40;--accent-soft:#d9ebe5;--signal:#23a780;--organizing:#42638d;--planned:#766b55;--header-background:#f3f4f0eb;--interactive-hover:#e7eee9;--header-height:4.5rem}html[data-theme=dark]{--paper:#0c100e;--surface:#111714;--surface-muted:#18201c;--ink:#edf2ee;--ink-soft:#a7b2ac;--ink-faint:#849089;--border:#28332e;--border-strong:#526159;--accent:#67d5b3;--accent-strong:#91e3c9;--accent-soft:#173c31;--signal:#58dbb3;--organizing:#90b5e3;--planned:#c4b99e;--header-background:#0c100eeb;--interactive-hover:#192620}html{background:var(--paper)}body{background:var(--paper);font-family:var(--font-display)}::selection{color:#fff;background:var(--accent)}.site-header{min-height:var(--header-height);background:var(--header-background);border-bottom:1px solid var(--border);backdrop-filter:blur(16px)saturate(130%);padding:0;display:block}.site-header__inner{width:min(calc(100% - 2rem), var(--site-width));min-height:var(--header-height);grid-template-columns:minmax(14rem,1fr) auto auto;align-items:center;gap:clamp(1rem,2.5vw,2.5rem);margin-inline:auto;display:grid}.site-brand{gap:.7rem}.site-brand__mark{color:#f4f8f5;background:var(--accent-strong);width:2rem;height:2rem;font-family:var(--font-interface);letter-spacing:.08em;border-radius:2px;font-size:.67rem;font-weight:800}html[data-theme=dark] .site-brand__mark{color:#0c100e}.site-brand__copy{line-height:1.1;display:grid}.site-brand__copy strong{font-size:.84rem;font-weight:760}.site-brand__copy small{color:var(--ink-soft);letter-spacing:.045em;text-transform:uppercase;margin-top:.22rem;font-size:.58rem;font-weight:620}.site-nav{align-items:center;gap:1.1rem;display:flex}.site-header .site-nav a{color:var(--ink-soft);border-bottom:1px solid #0000;padding:.55rem 0;font-size:.76rem;font-weight:690;text-decoration:none}.site-header .site-nav a:hover,.site-header .site-nav a[aria-current=page]{color:var(--ink);border-color:var(--accent)}.site-tools{align-items:center;gap:.35rem;display:flex}.site-tools .theme-toggle,.site-tools .search-trigger{min-height:2.3rem;color:var(--ink);border-color:var(--border);background:0 0}.site-tools .search-trigger{min-width:7.7rem}.site-tools .theme-toggle:hover,.site-tools .search-trigger:hover{background:var(--surface);border-color:var(--border-strong)}.search-dialog{top:calc(var(--header-height) + .5rem);border-color:var(--border-strong);box-shadow:0 1.5rem 4rem #0000003d}.site-footer{color:var(--ink-soft);background:var(--surface);border-top:1px solid var(--border);text-align:left;padding:0}.site-footer__inner{width:min(calc(100% - 2rem), var(--site-width));justify-content:space-between;gap:2rem;margin-inline:auto;padding:1.2rem 0;display:flex}.site-footer__inner p{margin:0;font-size:.68rem}.site-footer__inner strong{color:var(--ink)}.portfolio-main{min-height:calc(100dvh - var(--header-height))}.shell{width:min(calc(100% - 2rem), var(--site-width));padding-inline:var(--site-gutter);margin-inline:auto}.signal-dot{background:var(--signal);width:.45rem;height:.45rem;box-shadow:0 0 0 .2rem color-mix(in srgb, var(--signal) 13%, transparent);border-radius:50%;display:inline-block}.status-marker{color:var(--planned);font-family:var(--font-code);letter-spacing:.07em;text-transform:uppercase;align-items:center;gap:.45rem;font-size:.58rem;font-weight:720;display:inline-flex}.status-marker:before{content:"";background:currentColor;border-radius:50%;width:.4rem;height:.4rem}.status-marker--active{color:var(--signal)}.status-text{color:var(--planned);font-family:var(--font-code);letter-spacing:.055em;text-transform:uppercase;white-space:nowrap;font-size:.57rem;font-weight:720}.status-text--published{color:var(--accent)}.status-text--organizing{color:var(--organizing)}.button{border:1px solid var(--border-strong);border-radius:2px;justify-content:center;align-items:center;min-height:2.75rem;padding:.65rem .95rem;font-size:.78rem;font-weight:730;text-decoration:none;transition:background .15s,border-color .15s,transform .15s;display:inline-flex}.button:hover{transform:translateY(-1px)}.button--primary{color:#fff;background:var(--accent-strong);border-color:var(--accent-strong)}html[data-theme=dark] .button--primary{color:#0c100e}.button--quiet{color:var(--ink);background:0 0}.button--quiet:hover{background:var(--surface)}.home-intro{border-right:1px solid var(--border);border-left:1px solid var(--border);grid-template-columns:minmax(0,1fr) minmax(15rem,.38fr);gap:2rem clamp(3rem,8vw,7rem);padding-top:clamp(4rem,9vw,7rem);padding-bottom:clamp(4rem,8vw,6rem);display:grid}.home-intro__status{color:var(--ink-soft);font-family:var(--font-code);letter-spacing:.045em;grid-column:1/-1;align-items:center;gap:.65rem;font-size:.62rem;display:flex}.home-intro__main>p:first-child{color:var(--accent);font-family:var(--font-code);letter-spacing:.075em;text-transform:uppercase;margin:0 0 .8rem;font-size:.7rem;font-weight:700}.home-intro h1{letter-spacing:-.055em;margin:0;font-size:clamp(3rem,7vw,5.2rem);font-weight:610;line-height:.96}.home-intro__summary{max-width:62ch;color:var(--ink-soft);margin:1.4rem 0 0;font-size:clamp(.95rem,1.4vw,1.08rem);line-height:1.65}.home-intro__actions{flex-wrap:wrap;gap:.65rem;margin-top:1.8rem;display:flex}.home-intro__focus{border-top:1px solid var(--border-strong);align-self:end;margin:0}.home-intro__focus div{border-bottom:1px solid var(--border);padding:.8rem .2rem}.home-intro__focus dt{color:var(--ink-faint);font-family:var(--font-code);letter-spacing:.06em;text-transform:uppercase;font-size:.54rem}.home-intro__focus dd{color:var(--ink);margin:.25rem 0 0;font-size:.72rem}.home-row{background:var(--surface);border:1px solid var(--border);border-bottom:0;grid-template-columns:8rem minmax(0,1fr) auto;align-items:center;gap:2rem;min-height:17rem;padding-top:2.2rem;padding-bottom:2.2rem;display:grid}.home-row__label{align-self:start}.home-row__label span,.home-about>span{color:var(--accent);font-family:var(--font-code);font-size:.6rem}.home-row__label p{color:var(--ink-soft);margin:.5rem 0 0;font-size:.66rem}.home-row__content{grid-template-columns:minmax(0,1.15fr) minmax(14rem,.85fr);gap:clamp(2rem,6vw,5rem);display:grid}.home-row h2{letter-spacing:-.035em;margin:.7rem 0 .55rem;font-size:clamp(1.55rem,3vw,2.4rem);font-weight:620;line-height:1.08}.home-row__content>div>p:last-child{max-width:56ch;color:var(--ink-soft);margin:0;font-size:.78rem}.compact-facts{border-top:1px solid var(--border);margin:0}.compact-facts div{border-bottom:1px solid var(--border);padding:.75rem 0}.compact-facts dt{color:var(--ink-faint);font-family:var(--font-code);text-transform:uppercase;font-size:.54rem}.compact-facts dd{color:var(--ink-soft);margin:.28rem 0 0;font-size:.66rem;line-height:1.5}.quick-links{border-top:1px solid var(--border);align-content:start;display:grid}.quick-links a{color:var(--ink);border-bottom:1px solid var(--border);padding:.7rem 0;font-size:.7rem;font-weight:680;text-decoration:none}.quick-links a:hover{color:var(--accent)}.row-action{color:var(--ink);white-space:nowrap;font-size:.72rem;font-weight:720;text-decoration:none}.row-action span{margin-left:.3rem;transition:transform .15s;display:inline-block}.row-action:hover span{transform:translate(.25rem)}.home-about{border:1px solid var(--border);grid-template-columns:8rem minmax(0,1fr) minmax(13rem,.45fr);align-items:start;gap:2rem clamp(2rem,6vw,5rem);padding-top:3rem;padding-bottom:3rem;display:grid}.home-about h2{letter-spacing:-.035em;max-width:19ch;margin:0;font-size:clamp(1.55rem,3vw,2.5rem);font-weight:610;line-height:1.08}.home-about div p,.home-about>p{color:var(--ink-soft);margin:.8rem 0 0;font-size:.75rem}.home-about>p{margin:0}.page-header{border-right:1px solid var(--border);border-bottom:1px solid var(--border-strong);border-left:1px solid var(--border);grid-template-columns:8rem minmax(0,1fr) minmax(16rem,.45fr);align-items:end;gap:2rem clamp(2rem,6vw,5rem);padding-top:clamp(4rem,9vw,7rem);padding-bottom:clamp(3.5rem,7vw,5.5rem);display:grid}.page-header>p:first-child{color:var(--accent);font-family:var(--font-code);letter-spacing:.07em;text-transform:uppercase;font-size:.62rem;font-weight:700}.page-header h1{letter-spacing:-.052em;max-width:15ch;margin:0;font-size:clamp(2.8rem,6vw,4.8rem);font-weight:610;line-height:.98}.page-header>p:last-child{color:var(--ink-soft);margin:0;font-size:.82rem;line-height:1.65}.project-list{border-right:1px solid var(--border);border-left:1px solid var(--border);padding-top:3rem;padding-bottom:3rem}.project-item{min-height:13rem;color:var(--ink);border-top:1px solid var(--border-strong);border-bottom:1px solid var(--border);grid-template-columns:3rem minmax(0,1fr) minmax(13rem,.38fr) 1.5rem;align-items:center;gap:1.5rem;padding:1.5rem .5rem;text-decoration:none;transition:background .15s,padding .15s;display:grid}.project-item:hover{background:var(--surface);padding-inline:.8rem .2rem}.project-item>span:first-child{color:var(--ink-faint);font-family:var(--font-code);font-size:.6rem}.project-item h2{letter-spacing:-.04em;margin:.55rem 0;font-size:clamp(1.7rem,3.5vw,2.8rem);font-weight:610}.project-item div>p:last-child{max-width:60ch;color:var(--ink-soft);margin:0;font-size:.76rem}.project-item dl{margin:0}.project-item dt{color:var(--ink-faint);font-family:var(--font-code);text-transform:uppercase;font-size:.54rem}.project-item dd{color:var(--ink-soft);margin:.4rem 0 0;font-size:.64rem;line-height:1.55}.upcoming-note{background:var(--surface-muted);border:1px solid var(--border);grid-template-columns:8rem minmax(0,1fr) minmax(14rem,.45fr);gap:2rem;padding-top:1.4rem;padding-bottom:1.4rem;display:grid}.upcoming-note p,.upcoming-note span{color:var(--ink-soft);margin:0;font-size:.66rem}.upcoming-note ul{color:var(--ink);margin:0;padding-left:1.1rem;font-size:.7rem}.case-header{border-right:1px solid var(--border);border-bottom:1px solid var(--border-strong);border-left:1px solid var(--border);grid-template-columns:minmax(0,1.2fr) minmax(17rem,.5fr);align-items:end;gap:2rem clamp(3rem,8vw,7rem);padding-top:2rem;padding-bottom:clamp(3.5rem,8vw,6rem);display:grid}.back-link{width:fit-content;color:var(--ink-soft);grid-column:1/-1;font-size:.7rem;font-weight:680;text-decoration:none}.case-header>div:nth-child(2) p{color:var(--accent);font-family:var(--font-code);letter-spacing:.06em;text-transform:uppercase;margin:2.5rem 0 .7rem;font-size:.62rem;font-weight:700}.case-header h1{letter-spacing:-.06em;max-width:12ch;margin:0;font-size:clamp(3rem,7vw,5.7rem);font-weight:600;line-height:.94}.case-header>div:last-child>p{color:var(--ink-soft);margin:1rem 0 0;font-size:.82rem;line-height:1.65}.case-summary{background:var(--surface);border-right:1px solid var(--border);border-bottom:1px solid var(--border-strong);border-left:1px solid var(--border);grid-template-columns:repeat(4,1fr);padding-block:0;display:grid}.case-summary dl{border-left:1px solid var(--border);margin:0;padding:1rem}.case-summary dl:first-child{border-left:0}.case-summary dt{color:var(--ink-soft);font-size:.58rem}.case-summary dd{font-family:var(--font-code);grid-row:1;margin:0 0 .3rem;font-size:1.45rem}.case-layout{border-right:1px solid var(--border);border-left:1px solid var(--border);grid-template-columns:13rem minmax(0,47rem);justify-content:center;gap:clamp(3rem,8vw,7rem);padding-top:clamp(3.5rem,7vw,6rem);padding-bottom:clamp(4rem,8vw,7rem);display:grid}.case-layout>aside{top:calc(var(--header-height) + 1.5rem);align-self:start;position:sticky}.case-layout>aside>p:first-child{color:var(--ink-faint);font-family:var(--font-code);letter-spacing:.06em;text-transform:uppercase;margin:0;font-size:.56rem}.case-layout>aside>p:nth-child(2){color:var(--ink-soft);margin:.5rem 0 1.4rem;font-size:.67rem;line-height:1.6}.case-layout aside nav{border-top:1px solid var(--border);display:grid}.case-layout aside nav a{color:var(--ink);border-bottom:1px solid var(--border);padding:.65rem 0;font-size:.67rem;font-weight:670;text-decoration:none}.case-layout aside nav a:hover{color:var(--accent)}.case-article>section{grid-template-columns:2rem minmax(0,1fr);gap:1.2rem;padding:0 0 3.5rem;display:grid}.case-article>section+section{border-top:1px solid var(--border-strong);padding-top:3.5rem}.case-article section>span{color:var(--accent);font-family:var(--font-code);font-size:.62rem}.case-article h2{letter-spacing:-.04em;margin:0 0 1rem;font-size:clamp(1.7rem,3vw,2.5rem);font-weight:610}.case-article p,.case-article li{color:var(--ink-soft);font-size:.86rem;line-height:1.7}.case-article p{max-width:67ch}.case-article ul{border-top:1px solid var(--border);margin:1rem 0 0;padding:0;list-style:none}.case-article li{border-bottom:1px solid var(--border);padding:.75rem 0}.page-header--learning{grid-template-columns:8rem minmax(0,.8fr) minmax(18rem,.5fr)}.study-actions{border-right:1px solid var(--border);border-left:1px solid var(--border);grid-template-columns:repeat(2,1fr);padding-top:2.5rem;padding-bottom:2.5rem;display:grid}.study-action{min-height:13rem;color:var(--ink);background:var(--surface);border:1px solid var(--border);align-content:start;padding:1.4rem;text-decoration:none;display:grid}.study-action:nth-child(2n){border-left:0}.study-action:nth-child(n+3){border-top:0}.study-action:hover{background:var(--interactive-hover)}.study-action>span{color:var(--ink-faint);font-family:var(--font-code);letter-spacing:.06em;text-transform:uppercase;font-size:.56rem}.study-action h2{margin:1.2rem 0 .5rem;font-size:1.15rem}.study-action p{max-width:50ch;color:var(--ink-soft);margin:0;font-size:.72rem}.study-action strong{align-self:end;margin-top:1.4rem;font-size:.68rem}.study-action--primary{color:#fff;background:var(--accent-strong);border-color:var(--accent-strong)}.study-action--primary:hover{background:color-mix(in srgb, var(--accent-strong) 88%, #000)}.study-action--primary>span,.study-action--primary p{color:color-mix(in srgb, #fff 72%, var(--accent-strong))}.published-topic{background:var(--surface);border:1px solid var(--border);grid-template-columns:minmax(13rem,.55fr) minmax(0,1fr);gap:2rem clamp(3rem,8vw,7rem);padding-top:3.5rem;padding-bottom:3.5rem;display:grid}.published-topic h2{letter-spacing:-.04em;margin:.6rem 0;font-size:clamp(1.8rem,4vw,3rem);font-weight:610}.published-topic>div:first-child>p{color:var(--ink-soft);margin:0;font-size:.75rem}.published-topic ol{border-top:1px solid var(--border-strong);margin:0;padding:0;list-style:none}.published-topic li{border-bottom:1px solid var(--border);grid-template-columns:2rem 1fr;gap:.8rem;padding:.8rem .2rem;display:grid}.published-topic li span{color:var(--accent);font-family:var(--font-code);font-size:.62rem}.published-topic li a{color:var(--ink);font-size:.76rem;font-weight:650;text-decoration:none}.published-topic li a:hover{color:var(--accent)}.published-topic__links{flex-wrap:wrap;grid-column:2;gap:.5rem;display:flex}.published-topic__links a,.published-topic__links button{min-height:2.3rem;color:var(--ink);border:1px solid var(--border-strong);background:0 0;border-radius:2px;padding:.5rem .7rem;font-size:.66rem;font-weight:680;text-decoration:none}.published-topic__links a:hover,.published-topic__links button:hover{background:var(--interactive-hover)}.topic-status{border-right:1px solid var(--border);border-bottom:1px solid var(--border);border-left:1px solid var(--border);grid-template-columns:minmax(13rem,.55fr) minmax(0,1fr);gap:1.5rem clamp(3rem,8vw,7rem);padding-top:3rem;padding-bottom:3rem;display:grid}.topic-status>div:first-child p{color:var(--accent);font-family:var(--font-code);text-transform:uppercase;margin:0;font-size:.58rem}.topic-status h2{margin:.6rem 0 0;font-size:1.5rem}.topic-status__list{border-top:1px solid var(--border-strong)}.topic-status__list div{border-bottom:1px solid var(--border);justify-content:space-between;gap:1rem;padding:.7rem .2rem;display:flex}.topic-status__list strong{font-size:.72rem}.topic-status>p{color:var(--ink-soft);grid-column:2;margin:0;font-size:.66rem}.course-overview__continue{font-family:var(--font-interface);font-size:.78rem;font-weight:720;margin-top:1.4rem!important}.course-overview__continue a{color:#fff;background:var(--accent-strong);border:1px solid var(--accent-strong);border-radius:2px;padding:.55rem .75rem;text-decoration:none;display:inline-block}html[data-theme=dark] .course-overview__continue a{color:#0c100e}.course-roadmap{border-top:1px solid var(--border-strong);border-bottom:1px solid var(--border-strong);margin-top:2rem}.course-roadmap>summary{color:var(--ink);font-family:var(--font-interface);padding:.9rem .2rem;font-size:.78rem;font-weight:720}.course-roadmap>div{padding:.5rem 0 1.5rem}.course-roadmap section{border-top:1px solid var(--border);padding:1rem 0}.course-roadmap h2{margin:0;font-size:1rem}.course-roadmap section p,.course-roadmap section li{color:var(--ink-soft);font-size:.72rem}.course-roadmap section ul{gap:.35rem;margin:.8rem 0 0;padding:0;list-style:none;display:grid}.course-roadmap section li span{width:2.2rem;color:var(--ink-faint);font-family:var(--font-code);font-size:.6rem;display:inline-block}@media (width<=900px){.home-intro,.page-header,.page-header--learning,.case-header{grid-template-columns:1fr}.home-intro__status,.back-link{grid-column:auto}.home-intro__focus{max-width:28rem}.page-header>p:first-child{margin-bottom:0}.page-header>p:last-child{max-width:55ch}.home-row{grid-template-columns:5rem minmax(0,1fr)}.home-row__content{grid-template-columns:1fr}.row-action{grid-column:2}.home-about{grid-template-columns:5rem minmax(0,1fr)}.home-about>p{grid-column:2}.project-item{grid-template-columns:2rem minmax(0,1fr) 1.5rem}.project-item dl{grid-column:2}.upcoming-note{grid-template-columns:7rem 1fr}.upcoming-note span{grid-column:2}.case-layout{grid-template-columns:10rem minmax(0,1fr);gap:3rem}}@media (width<=700px){:root{--header-height:6.8rem}.site-header__inner{grid-template-columns:1fr auto;gap:0 .5rem;width:calc(100% - 1rem);padding-top:.35rem}.site-brand__copy small,.search-trigger kbd{display:none}.site-nav{border-top:1px solid var(--border);grid-area:2/1/auto/-1;justify-content:center;align-self:stretch}.site-header .site-nav a{text-align:center;flex:1;padding:.65rem}.site-tools .search-trigger{min-width:auto}.search-dialog{top:calc(var(--header-height) + .35rem)}.shell{width:100%;padding-inline:1rem}.home-intro,.page-header,.case-header{border-left:0;border-right:0;padding-top:3.2rem;padding-bottom:3.2rem}.home-intro h1{font-size:clamp(2.8rem,14vw,4.1rem)}.home-row,.home-about,.published-topic,.topic-status{border-left:0;border-right:0}.home-row{grid-template-columns:1fr;gap:1.5rem}.home-row__label{align-items:center;gap:.7rem;display:flex}.home-row__label p{margin:0}.row-action{grid-column:auto}.home-about{grid-template-columns:1fr}.home-about>p{grid-column:auto}.page-header h1{font-size:clamp(2.65rem,13vw,4rem)}.project-list{border-left:0;border-right:0}.project-item{grid-template-columns:1.5rem 1fr}.project-item>span:last-child{display:none}.upcoming-note{grid-template-columns:1fr}.upcoming-note span{grid-column:auto}.case-header h1{font-size:clamp(2.8rem,15vw,4.5rem)}.case-summary{border-left:0;border-right:0;grid-template-columns:1fr 1fr}.case-summary dl:nth-child(3){border-top:1px solid var(--border);border-left:0}.case-summary dl:nth-child(4){border-top:1px solid var(--border)}.case-layout{border-left:0;border-right:0;display:block}.case-layout>aside{margin-bottom:3rem;position:static}.case-article>section{grid-template-columns:1.5rem 1fr}.study-actions{border-left:0;border-right:0;grid-template-columns:1fr}.study-action,.study-action:nth-child(2n),.study-action:nth-child(n+3){border:1px solid var(--border);border-top:0}.study-action:first-child{border-top:1px solid var(--accent-strong)}.published-topic,.topic-status{grid-template-columns:1fr}.published-topic__links,.topic-status>p{grid-column:auto}.site-footer__inner{gap:.4rem;display:grid}}@media (prefers-reduced-motion:reduce){.button,.row-action span,.project-item{transition:none}}@media print{@page{size:A4;margin:18mm 17mm 20mm}:root{--paper:#fff;--surface:#fff;--surface-muted:#f4f4f4;--ink:#000;--ink-soft:#333;--border:#b8b8b8;--border-strong:#777;--accent:#000}html,body{background:#fff;font-size:10.5pt}.site-header,.site-footer,.course-sidebar,.course-toc,.practice-sidebar,.practice-toc,.practice-filter,.practice-response__state button,.breadcrumbs,.unit-pagination,.copy-button,.skip-link{display:none!important}.course-shell,.course-shell--without-toc,.practice-shell,.practice-shell--without-toc{max-width:none;padding:0;display:block}.course-main,.practice-main{padding:0}.course-article,.course-overview,.practice-page{font-size:10.5pt;line-height:1.5}.practice-card,.practice-series,.practice-case-grid>section{break-inside:avoid}.practice-card__body>summary,.practice-series__body>summary,.practice-hints{display:none}.practice-card__body>.practice-card__content,.practice-series__body>.practice-card__content{display:block!important}.course-article h1{max-width:none;font-size:24pt}.section-heading{break-after:avoid;max-width:none}.heading-anchor{display:none}.callout,.http-message,.sequence-diagram,.code-frame,.table-scroll,table,pre{break-inside:avoid}.table-scroll,.sequence-diagram,.code-frame pre{overflow:visible}.sequence-diagram__flow{transform-origin:0 0;width:126%;min-width:0;margin-bottom:-.7rem;transform:scale(.79)}.source-reference a[href^=http]:after{content:" (" attr(href) ")";color:#333;font-family:var(--font-code);overflow-wrap:anywhere;font-size:7.5pt}}
