:root{--bg:#f6f8fc;--surface:#ffffff;--surface-2:#eef2f8;--ink:#0f2238;--muted:#536479;--line:#d9e1ec;--brand:#0b5fd9;--brand-strong:#0847a6;--brand-soft:#e4eefd;--dart:#0b5fd9;--dart-soft:#e4eefd;--flutter:#027a8c;--flutter-soft:#dff4f6;--accent:var(--dart);--accent-soft:var(--dart-soft);--amber:#b86e00;--amber-soft:#fff3d9;--green:#12805c;--code-bg:#0d1a2b;--code-ink:#e3ebf5;--code-line:#1f3149;--shadow:0 18px 40px -18px rgba(8, 25, 50, 0.28);--radius:0.625rem;--font-display:"Bricolage Grotesque", "Figtree", system-ui, sans-serif;--font-body:"Figtree", system-ui, -apple-system, "Segoe UI", Roboto, sans-serif;--font-mono:"JetBrains Mono", ui-monospace, SFMono-Regular, Menlo, Consolas, monospace;--top-h:3.75rem;--side-w:18rem;--toc-w:15rem;--page:90rem;--gutter:1.5rem;color-scheme:light}:root[data-theme=dark]{--bg:#0a1422;--surface:#101d2f;--surface-2:#15253b;--ink:#e6edf6;--muted:#97a8bc;--line:#22344c;--brand:#6db3ff;--brand-strong:#9ccbff;--brand-soft:#13294a;--dart:#6db3ff;--dart-soft:#13294a;--flutter:#4fd1dc;--flutter-soft:#0f2f36;--amber:#ffc457;--amber-soft:#33270c;--green:#4fd3a3;--code-bg:#070f1b;--code-line:#1b2a40;--shadow:0 18px 40px -18px rgba(0, 0, 0, 0.6);color-scheme:dark}.track-flutter,.t-flutter{--accent:var(--flutter);--accent-soft:var(--flutter-soft)}.t-dart{--accent:var(--dart);--accent-soft:var(--dart-soft)}*,*::before,*::after{box-sizing:border-box}html{font-size:100%;scroll-behavior:smooth;scroll-padding-top:calc(var(--top-h) + 1rem);-webkit-text-size-adjust:100%;text-size-adjust:100%}body{margin:0;min-width:17.5rem;background:var(--bg);color:var(--ink);font:1.0625rem/1.65 var(--font-body);-webkit-font-smoothing:antialiased;overflow-wrap:break-word}a{color:var(--brand);text-underline-offset:3px}a:hover{color:var(--brand-strong)}:focus-visible{outline:3px solid var(--brand);outline-offset:2px;border-radius:4px}h1,h2,h3{font-family:var(--font-display);line-height:1.15;letter-spacing:-.015em;text-wrap:balance}img,svg,video{max-width:100%}button{font-family:inherit}[hidden]{display:none!important}.skip{position:absolute;left:-999px;top:8px;background:var(--surface);padding:8px 14px;border-radius:6px;z-index:100}.skip:focus{left:8px}.top{position:sticky;top:0;z-index:40;background:var(--bg);background:color-mix(in srgb,var(--bg) 88%,transparent);-webkit-backdrop-filter:blur(10px);backdrop-filter:blur(10px);border-bottom:1px solid var(--line)}.top-in{height:var(--top-h);max-width:var(--page);margin:0 auto;padding:0 1.25rem;display:flex;align-items:center;gap:.875rem}.brand{display:inline-flex;align-items:center;gap:.625rem;color:var(--ink);text-decoration:none;font:700 1.125rem var(--font-display);white-space:nowrap;flex:none}.brand:hover{color:var(--ink)}.logo{flex:none;width:1.875rem;height:1.875rem}.top-nav{display:flex;gap:.25rem;margin-left:.625rem}.top-nav a{color:var(--muted);text-decoration:none;font-weight:600;font-size:.95rem;padding:.375rem .75rem;border-radius:999px}.top-nav a:hover{color:var(--ink);background:var(--surface-2)}.top-nav a.is-on{color:var(--accent);background:var(--accent-soft)}.icon-btn{flex:none;width:2.5rem;height:2.5rem;display:inline-grid;place-items:center;background:0 0;border:1px solid transparent;border-radius:.5rem;color:var(--muted);cursor:pointer}.icon-btn:hover{color:var(--ink);border-color:var(--line);background:var(--surface)}.menu-btn{display:none}[data-theme=dark] .sun,:root:not([data-theme=dark]) .moon{display:none}.search{position:relative;margin-left:auto;flex:0 1 21rem;min-width:0;display:flex;align-items:center;gap:.5rem;height:2.5rem;padding:0 .625rem;background:var(--surface);border:1px solid var(--line);border-radius:.5rem;color:var(--muted)}.search svg{flex:none}.search:focus-within{border-color:var(--brand);box-shadow:0 0 0 3px var(--brand-soft)}.search input{flex:1;min-width:0;width:100%;border:0;outline:0;background:0 0;color:var(--ink);font:inherit;font-size:.95rem;-webkit-appearance:none;appearance:none}.search input::-webkit-search-cancel-button,.search input::-webkit-search-decoration{-webkit-appearance:none;display:none}.search kbd{flex:none;font:600 .75rem var(--font-mono);border:1px solid var(--line);border-radius:4px;padding:1px 6px}.search-results{position:absolute;top:calc(100% + 6px);right:0;width:min(28rem,92vw);max-height:70vh;overflow:auto;margin:0;padding:6px;list-style:none;background:var(--surface);border:1px solid var(--line);border-radius:var(--radius);box-shadow:var(--shadow);-webkit-overflow-scrolling:touch}.search-results a{display:block;padding:.5625rem .75rem;border-radius:6px;text-decoration:none;color:var(--ink);line-height:1.35}.search-results a small{display:block;margin-top:2px;color:var(--muted);font-size:.8125rem}.search-results a mark{background:0 0;color:var(--brand);font-weight:700}.search-results li[aria-selected=true] a,.search-results a:hover{background:var(--brand-soft)}.search-results .empty{padding:.75rem;color:var(--muted);font-size:.95rem}.read-bar{height:3px;margin-top:-3px;pointer-events:none}.read-bar i{display:block;height:100%;width:0;background:var(--accent);border-radius:0 3px 3px 0}.btn{display:inline-flex;align-items:center;justify-content:center;gap:.5rem;padding:.6875rem 1.125rem;border-radius:.5rem;border:1px solid var(--line);background:var(--surface);color:var(--ink);font:600 1rem var(--font-body);text-decoration:none;cursor:pointer;text-align:center}.btn:hover{border-color:var(--brand);color:var(--ink)}.btn.primary{background:var(--brand);border-color:var(--brand);color:#fff}.btn.primary:hover{background:var(--brand-strong);border-color:var(--brand-strong);color:#fff}[data-theme=dark] .btn.primary,[data-theme=dark] .btn.primary:hover{color:#06162b}.hero{max-width:75rem;margin:0 auto;padding:clamp(2.5rem,6vw,4.75rem)var(--gutter)clamp(2rem,5vw,3.5rem);display:grid;grid-template-columns:minmax(0,1fr)minmax(0,1fr);gap:clamp(2rem,4vw,3.5rem);align-items:center}.hero h1{font-size:clamp(2.1rem,1.2rem + 3.6vw,3.75rem);font-weight:700;margin:0 0 1.25rem;letter-spacing:-.03em;line-height:1.04}.lede{font-size:1.1875rem;color:var(--muted);margin:0 0 1.5rem;max-width:34em}.hero-cta{display:flex;flex-wrap:wrap;gap:.75rem}.hero-note{color:var(--muted);font-size:.9375rem;margin:1.125rem 0 0}.hero-code{min-width:0;background:var(--code-bg);border-radius:.875rem;overflow:hidden;border:1px solid var(--code-line);box-shadow:0 30px 60px -30px rgba(6,24,54,.55)}.win-bar{display:flex;align-items:center;gap:.4375rem;padding:.5rem .875rem;border-bottom:1px solid var(--code-line);color:#8fa3bb;font:.8125rem var(--font-mono)}.win-bar>i{flex:none;width:10px;height:10px;border-radius:50%;background:#2b415e}.win-tabs{display:flex;gap:.25rem;margin-left:.5rem;min-width:0;overflow-x:auto;scrollbar-width:none}.win-tabs::-webkit-scrollbar{display:none}.win-tabs button{flex:none;font:500 .8125rem var(--font-mono);color:#8fa3bb;background:0 0;border:0;border-radius:6px;padding:.375rem .625rem;cursor:pointer;white-space:nowrap}.win-tabs button:hover{color:#e3ebf5}.win-tabs button[aria-selected=true]{color:#e3ebf5;background:#1a2c45}.hero-code .highlight pre{margin:0;padding:1.125rem 1.25rem;border:0;border-radius:0;font:.875rem/1.65 var(--font-mono);overflow-x:auto;color:var(--code-ink);-webkit-overflow-scrolling:touch}.win-out{border-top:1px solid var(--code-line);padding:.75rem 1.25rem 1rem;background:#091422}.win-out span{font:600 .75rem var(--font-body);color:#ffc457}.win-out pre{margin:.375rem 0 0;font:.875rem/1.6 var(--font-mono);color:#c9d6e6;white-space:pre-wrap}.tracks{max-width:75rem;margin:0 auto;padding:.5rem var(--gutter)1rem;display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:1rem}.track-card{display:grid;gap:.25rem;padding:1.25rem 1.375rem 1.375rem;border:1px solid var(--line);border-top:4px solid var(--accent);border-radius:var(--radius);background:var(--surface);color:var(--ink);text-decoration:none}.track-card:hover{color:var(--ink);border-color:var(--accent);box-shadow:var(--shadow)}.track-card strong{font:700 1.75rem/1.1 var(--font-display);letter-spacing:-.02em}.track-tag{font-size:.8125rem;font-weight:700;color:var(--accent)}.track-meta{font-weight:600;font-size:.95rem}.track-desc{color:var(--muted);font-size:.95rem;line-height:1.5;margin-top:.25rem}.path{max-width:75rem;margin:0 auto;padding:clamp(2rem,4vw,3rem)var(--gutter)1rem;scroll-margin-top:var(--top-h)}.path-head{max-width:46rem;margin-bottom:1.5rem}.path-head h2{font-size:clamp(1.6rem,1.2rem + 1.6vw,2.3rem);margin:0 0 .625rem}.path-head h2::before{content:"";display:inline-block;width:.75rem;height:.75rem;border-radius:3px;background:var(--accent);margin-right:.625rem;vertical-align:.08em}.path-head p{color:var(--muted);margin:0 0 .75rem}.chapters{list-style:none;margin:0;padding:0;display:grid;grid-template-columns:repeat(2,minmax(0,1fr));column-gap:3rem;border-top:1px solid var(--line)}.chapters>li{display:grid;grid-template-columns:3rem minmax(0,1fr);gap:.5rem;padding:1.25rem 0;border-bottom:1px solid var(--line);align-content:start}.ch-num{font:700 1.625rem/1.1 var(--font-display);color:var(--accent);font-variant-numeric:tabular-nums}.ch-body{min-width:0}.ch-body h3{margin:0 0 .25rem;font-size:1.25rem}.ch-body h3 a{color:var(--ink);text-decoration:none}.ch-body h3 a:hover{color:var(--accent);text-decoration:underline}.ch-body>p{margin:0 0 .625rem;color:var(--muted);font-size:.975rem;line-height:1.55}.ch-body details>summary{display:inline-flex;align-items:center;gap:.375rem;cursor:pointer;list-style:none;font-size:.875rem;font-weight:600;color:var(--accent);padding:.25rem .625rem;border-radius:999px;background:var(--accent-soft);-webkit-user-select:none;user-select:none}.ch-body details>summary::-webkit-details-marker{display:none}.ch-body details>summary::after{content:"+";font-weight:700}.ch-body details[open]>summary::after{content:"\2212"}.ch-lessons{list-style:none;margin:.75rem 0 0;padding:0;display:flex;flex-wrap:wrap;gap:.375rem .5rem}.ch-lessons a{display:inline-block;padding:.25rem .6875rem;border:1px solid var(--line);border-radius:999px;background:var(--surface);color:var(--ink);text-decoration:none;font-size:.9rem}.ch-lessons a:hover{border-color:var(--accent);color:var(--accent)}.ch-lessons a.is-done{border-color:var(--green);color:var(--green)}.ch-lessons a.is-done::before{content:"\2713\00a0"}.home-prose{max-width:46rem;margin:0 auto;padding:1.5rem var(--gutter)1rem}.faq details{border-bottom:1px solid var(--line);padding:.875rem 0}.faq summary{cursor:pointer;font-weight:600;font-size:1.0625rem}.faq p{margin:.625rem 0 0;color:var(--muted)}.author-strip{max-width:46rem;margin:1.5rem auto 4.5rem;padding:0 var(--gutter)}.author-strip p{margin:0;padding:1.25rem 1.375rem;background:var(--brand-soft);border-radius:var(--radius)}.home-progress,.side-progress{font-size:.875rem;color:var(--muted)}.home-progress{max-width:20rem}.side-progress{padding:.25rem .75rem .875rem}[data-progress-total] i{display:block;height:6px;margin-top:6px;background:var(--line);border-radius:3px;overflow:hidden}[data-progress-total] b{display:block;height:100%;width:0;background:var(--green);border-radius:3px}.layout{max-width:var(--page);margin:0 auto;display:grid;grid-template-columns:var(--side-w)minmax(0,1fr)var(--toc-w);align-items:start}.layout.no-toc{grid-template-columns:var(--side-w)minmax(0,1fr)}.side{position:sticky;top:var(--top-h);height:calc(100vh - var(--top-h));overflow-y:auto;padding:1.125rem .75rem 2.5rem 1rem;border-right:1px solid var(--line);overscroll-behavior:contain;-webkit-overflow-scrolling:touch;scrollbar-width:thin}.side-tracks{display:grid;grid-template-columns:1fr 1fr;gap:4px;padding:4px;margin:0 0 .875rem;background:var(--surface-2);border-radius:.625rem}.side-tracks a{text-align:center;padding:.4375rem .5rem;border-radius:.4375rem;color:var(--muted);text-decoration:none;font-weight:600;font-size:.925rem}.side-tracks a:hover{color:var(--ink)}.side-tracks a[aria-current=true]{background:var(--surface);color:var(--accent);box-shadow:0 1px 3px rgba(8,25,50,.14)}.side details{margin-bottom:2px}.side summary{list-style:none;display:flex;align-items:baseline;gap:.625rem;padding:.5rem .625rem;border-radius:.4375rem;cursor:pointer;font-weight:600;font-size:.95rem;line-height:1.35}.side summary::-webkit-details-marker{display:none}.side summary:hover{background:var(--surface-2)}.side .num{flex:none;width:1.5em;color:var(--accent);font:700 .85rem var(--font-display);font-variant-numeric:tabular-nums;text-align:right}.side ul{list-style:none;margin:2px 0 .625rem 1.375rem;padding:0 0 0 .875rem;border-left:1px solid var(--line)}.side li a{display:block;padding:.3125rem .625rem;border-radius:6px;color:var(--muted);text-decoration:none;font-size:.925rem;line-height:1.35}.side li a:hover{color:var(--ink);background:var(--surface-2)}.side li a[aria-current=page]{color:var(--accent);background:var(--accent-soft);font-weight:600}.side li a.is-done::after{content:"\00a0\2713";color:var(--green);font-weight:700}.scrim{position:fixed;top:0;right:0;bottom:0;left:0;z-index:44;background:rgba(5,15,30,.5)}.doc{min-width:0;padding:1.75rem clamp(1.25rem,4vw,3.5rem)4.5rem}.doc>*{max-width:46rem;margin-left:auto;margin-right:auto}.doc>.track-chapters,.doc>.track-wide{max-width:62rem}.track-wide>p,.track-wide>.lede{max-width:46rem}.track-chapters .chapters{margin-top:.5rem}.crumbs{display:flex;flex-wrap:wrap;gap:.25rem .5rem;font-size:.875rem;color:var(--muted);margin-bottom:1.375rem}.crumbs a{color:var(--muted);text-decoration:none}.crumbs a:hover{color:var(--brand);text-decoration:underline}.kicker{display:flex;flex-wrap:wrap;align-items:center;gap:.375rem .625rem;margin:0 0 .625rem;font-size:.9375rem;font-weight:600;color:var(--muted)}.kicker .read{font-weight:400}.kicker .read::before{content:"";display:inline-block;width:4px;height:4px;border-radius:50%;background:currentColor;margin-right:.625rem;vertical-align:middle}.badge{display:inline-block;padding:.125rem .625rem;border-radius:999px;background:var(--accent-soft);color:var(--accent);font-size:.8125rem;font-weight:700}.toc{position:sticky;top:var(--top-h);max-height:calc(100vh - var(--top-h));overflow-y:auto;padding:2rem 1.25rem 2.5rem 0;font-size:.875rem;scrollbar-width:thin}.toc h2{font:600 .875rem var(--font-body);letter-spacing:0;margin:0 0 .625rem;color:var(--ink)}.toc ul,.toc-inline ul{list-style:none;margin:0;padding:0}.toc ul ul,.toc-inline ul ul{padding-left:.75rem}.toc a{display:block;padding:.25rem 0 .25rem .75rem;border-left:2px solid var(--line);color:var(--muted);text-decoration:none;line-height:1.35}.toc a:hover{color:var(--ink)}.toc a.is-active{color:var(--accent);border-left-color:var(--accent);font-weight:600}.toc-inline{display:none;margin:0 0 1.5rem;border:1px solid var(--line);border-radius:var(--radius);background:var(--surface)}.toc-inline>summary{cursor:pointer;padding:.6875rem .875rem;font-weight:600;font-size:.95rem}.toc-inline nav{padding:0 .875rem .75rem}.toc-inline a{display:block;padding:.3125rem 0;color:var(--muted);text-decoration:none;font-size:.95rem;line-height:1.35}.toc-inline a:hover{color:var(--brand)}.prose h1{font-size:clamp(1.85rem,1.3rem + 2.2vw,2.75rem);margin:0 0 .875rem;letter-spacing:-.025em}.prose h2{font-size:clamp(1.375rem,1.2rem + .7vw,1.625rem);margin:2.4em 0 .6em;padding-top:.2em}.prose h3{font-size:1.25rem;margin:2em 0 .5em}.prose h4{font-size:1.0625rem;margin:1.6em 0 .4em}.prose p,.prose ul,.prose ol{margin:0 0 1.1em}.prose ul,.prose ol{padding-left:1.4em}.prose li{margin-bottom:.35em}.prose li>ul,.prose li>ol{margin:.35em 0 0}.prose li>input[type=checkbox]{margin-right:.4em}.prose strong{font-weight:700}.prose .anchor{opacity:0;text-decoration:none;font-weight:400;color:var(--muted);margin-left:4px}.prose h2:hover .anchor,.prose h3:hover .anchor,.prose .anchor:focus{opacity:1}.prose :not(pre)>code{font:500 .875em var(--font-mono);background:var(--brand-soft);color:var(--brand-strong);padding:.12em .4em;border-radius:5px;overflow-wrap:anywhere}.prose kbd{font:600 .8125em var(--font-mono);border:1px solid var(--line);border-bottom-width:2px;border-radius:5px;padding:.1em .4em;background:var(--surface)}.prose blockquote{margin:1.4em 0;padding:.875rem 1.125rem;background:var(--amber-soft);border-left:4px solid var(--amber);border-radius:0 var(--radius)var(--radius)0}.prose blockquote p:last-child{margin-bottom:0}.prose hr{border:0;border-top:1px solid var(--line);margin:2.4em 0}.table-wrap{overflow-x:auto;margin:0 0 1.4em;border:1px solid var(--line);border-radius:var(--radius);background:var(--surface);-webkit-overflow-scrolling:touch}.prose table{border-collapse:collapse;width:100%;font-size:.95rem}.prose th,.prose td{text-align:left;padding:.5625rem .875rem;border-bottom:1px solid var(--line);vertical-align:top}.prose th{font-weight:700;background:var(--surface-2);white-space:nowrap}.prose tr:last-child td{border-bottom:0}.code{margin:0 0 1.4em;border-radius:var(--radius);overflow:hidden;background:var(--code-bg);border:1px solid var(--code-line)}.code-bar{display:flex;align-items:center;gap:.375rem;padding:.375rem .5rem .375rem .875rem;border-bottom:1px solid var(--code-line);color:#8fa3bb;font:500 .8125rem var(--font-body)}.code-bar .lang{margin-right:auto}.code-bar button{font:600 .8125rem var(--font-body);color:#c9d6e6;background:0 0;border:1px solid #2b415e;border-radius:6px;padding:.25rem .625rem;cursor:pointer;min-height:1.875rem}.code-bar button:hover{border-color:#6db3ff;color:#fff}.code-bar .run{background:#ffc457;border-color:#ffc457;color:#2b1c00}.code-bar .run:hover{background:#ffd382;border-color:#ffd382;color:#2b1c00}.code pre,.prose pre{margin:0;padding:1rem 1.125rem;overflow-x:auto;background:var(--code-bg);color:var(--code-ink);font:.875rem/1.65 var(--font-mono);-moz-tab-size:2;tab-size:2;-webkit-overflow-scrolling:touch}.prose>pre{margin-bottom:1.4em;border-radius:var(--radius)}.code pre code,.prose pre code{font:inherit;background:0 0;padding:0;color:inherit}.code.is-output{background:var(--surface);border-color:var(--line)}.code.is-output .code-bar{border-color:var(--line);color:var(--amber);font-weight:700}.code.is-output pre{background:var(--surface);color:var(--ink)}.highlight,.chroma{background:0 0!important}.code-bar .edit{border-color:#6db3ff;color:#cfe5ff}.pad{border-top:1px solid var(--code-line);background:#0d1a2b}.pad iframe{display:block;width:100%;height:min(36rem,78vh);border:0;background:#0d1a2b}.pad-note{display:flex;flex-wrap:wrap;gap:.25rem 1rem;margin:0;padding:.5rem .875rem;border-top:1px solid var(--code-line);background:#091422;color:#8fa3bb;font:.8125rem/1.5 var(--font-body)}.pad-note span{flex:1 1 16rem}.pad-note a{color:#9ccbff;white-space:nowrap}.code.is-full{position:fixed;top:0;right:0;bottom:0;left:0;z-index:60;margin:0;border-radius:0;border:0;display:flex;flex-direction:column}.code.is-full>.highlight,.code.is-full>pre{display:none}.code.is-full .pad{flex:1;display:flex;flex-direction:column;min-height:0}.code.is-full .pad iframe{flex:1;height:auto;min-height:0}.pad-open{overflow:hidden}.pg{max-width:var(--page);margin:0 auto;padding:1.5rem var(--gutter)3rem}.pg-head{display:flex;flex-wrap:wrap;align-items:flex-end;justify-content:space-between;gap:1rem 2rem;margin-bottom:1.125rem}.pg-head>div:first-child{flex:1 1 24rem;min-width:0}.pg-head h1{font-size:clamp(1.6rem,1.2rem + 1.6vw,2.25rem);margin:0 0 .375rem;letter-spacing:-.02em}.pg-head p{margin:0;color:var(--muted);max-width:44rem}.pg-controls{display:flex;flex-wrap:wrap;align-items:flex-end;gap:.75rem}.pg-tracks{display:grid;grid-template-columns:1fr 1fr;gap:4px;padding:4px;background:var(--surface-2);border-radius:.625rem}.pg-tracks button{border:0;background:0 0;padding:.4375rem 1rem;border-radius:.4375rem;color:var(--muted);font:600 .95rem var(--font-body);cursor:pointer}.pg-tracks button[aria-pressed=true]{background:var(--surface);color:var(--accent);box-shadow:0 1px 3px rgba(8,25,50,.14)}.pg[data-track=flutter]{--accent:var(--flutter);--accent-soft:var(--flutter-soft)}.pg-select{display:grid;gap:2px;font-size:.8125rem;color:var(--muted);font-weight:600}.pg-select select{font:500 .95rem var(--font-body);color:var(--ink);background:var(--surface);border:1px solid var(--line);border-radius:.5rem;padding:.5625rem .75rem;max-width:100%;min-width:12rem}.pg-controls .btn{padding:.5625rem .875rem;font-size:.95rem}.pg-mount{border:1px solid var(--code-line);border-radius:var(--radius);overflow:hidden;background:#0d1a2b}.pg-mount .pad{border-top:0}.pg-mount .pad iframe{height:calc(100vh - var(--top-h) - 13rem);min-height:26rem}.pg-nojs{padding:1rem}.lesson-list{list-style:none;counter-reset:l;padding:0!important;border-top:1px solid var(--line)}.lesson-list li{counter-increment:l;margin:0;border-bottom:1px solid var(--line)}.lesson-list a{display:grid;grid-template-columns:2.2em minmax(0,1fr);padding:.875rem .25rem;text-decoration:none;color:var(--ink)}.lesson-list a::before{content:counter(l);grid-row:span 2;color:var(--accent);font:700 1.125rem var(--font-display)}.lesson-list a.is-done::before{content:"\2713";color:var(--green)}.lesson-list a span{grid-column:2;color:var(--muted);font-size:.95rem}.lesson-list a:hover strong{color:var(--accent);text-decoration:underline}.done-row{display:flex;flex-wrap:wrap;align-items:center;justify-content:space-between;gap:.75rem;margin-top:2.5rem;padding-top:1.5rem;border-top:1px solid var(--line)}.done-btn[aria-pressed=true]{background:var(--green);border-color:var(--green);color:#fff}[data-theme=dark] .done-btn[aria-pressed=true]{color:#04241a}.updated{color:var(--muted);font-size:.875rem}.pager{display:grid;grid-template-columns:minmax(0,1fr)minmax(0,1fr);gap:.875rem;margin-top:1.5rem}.pager a{display:block;padding:.875rem 1.125rem;border:1px solid var(--line);border-radius:var(--radius);background:var(--surface);text-decoration:none;color:var(--ink);font-weight:600;line-height:1.3}.pager a:hover{border-color:var(--accent);color:var(--accent)}.pager small{display:block;font-weight:400;color:var(--muted);font-size:.8125rem;margin-bottom:2px}.pager .next{text-align:right;grid-column:2}.simple{max-width:46rem;margin:0 auto;padding:4.5rem var(--gutter)}.plain-list{columns:2;padding-left:1.2em}.to-top{position:fixed;right:1.25rem;bottom:1.25rem;z-index:30;width:2.75rem;height:2.75rem;display:grid;place-items:center;border-radius:50%;border:1px solid var(--line);background:var(--surface);color:var(--ink);cursor:pointer;box-shadow:var(--shadow)}.to-top:hover{border-color:var(--brand);color:var(--brand)}.foot{border-top:1px solid var(--line);background:var(--surface)}.foot-in{max-width:75rem;margin:0 auto;padding:3rem var(--gutter)1.5rem;display:grid;grid-template-columns:1.3fr 1fr 1fr;gap:2.5rem}.foot h2{font:700 .95rem var(--font-body);letter-spacing:0;margin:0 0 .625rem}.foot ul{list-style:none;margin:0;padding:0}.foot li{margin-bottom:.375rem}.foot a{color:var(--muted);text-decoration:none;font-size:.95rem}.foot a:hover{color:var(--brand);text-decoration:underline}.foot-about p{color:var(--muted);font-size:.95rem;margin:.75rem 0 1rem;max-width:26em}.foot-about p a,.foot-legal a{color:var(--brand)}.foot .brand{color:var(--ink);font-size:1.125rem}.foot-legal{max-width:75rem;margin:0 auto;padding:1rem var(--gutter)2rem;color:var(--muted);font-size:.8125rem}@media(min-width:1700px){html{font-size:106.25%}}@media(min-width:2100px){html{font-size:118.75%}}@media(min-width:2800px){html{font-size:137.5%}}@media(min-width:3600px){html{font-size:162.5%}}@media(max-width:1180px){.layout{grid-template-columns:16.5rem minmax(0,1fr)}.toc{display:none}.toc-inline{display:block}}@media(max-width:1000px){.chapters{grid-template-columns:minmax(0,1fr)}}@media(max-width:900px){:root{--gutter:1.25rem}.hero{grid-template-columns:minmax(0,1fr)}.top-nav{display:none}.docs .menu-btn{display:inline-grid}.layout,.layout.no-toc{display:block}.side{position:fixed;top:0;left:0;z-index:45;width:min(20rem,86vw);height:100vh;height:100dvh;background:var(--bg);transform:translateX(-102%);transition:transform .2s ease;visibility:hidden;padding-top:1rem}.side.is-open{transform:none;visibility:visible;box-shadow:0 0 60px rgba(0,0,0,.35)}.foot-in{grid-template-columns:minmax(0,1fr)minmax(0,1fr);gap:2rem}.foot-about{grid-column:1/-1}.search kbd{display:none}.search{flex:auto}.search-results{position:fixed;top:calc(var(--top-h) + 4px);left:.75rem;right:.75rem;width:auto}}@media(max-width:640px){.tracks{grid-template-columns:minmax(0,1fr)}.top-in{padding:0 .75rem;gap:.5rem}.docs .brand span{display:none}.pager{grid-template-columns:minmax(0,1fr)}.pager .next{grid-column:1}.plain-list{columns:1}.code pre,.prose pre,.hero-code .highlight pre{font-size:.8125rem;padding:.875rem}.doc{padding-top:1.25rem;padding-bottom:3.5rem}.done-row{flex-direction:column;align-items:stretch}.done-row .btn{width:100%}.pg-controls{width:100%}.pg-select,.pg-select select{flex:auto;min-width:0;width:100%}.pg-mount .pad iframe{height:75vh}.hero-cta .btn{flex:1 1 10rem}.chapters>li{grid-template-columns:2.25rem minmax(0,1fr)}.ch-num{font-size:1.375rem}.to-top{right:.75rem;bottom:.75rem}}@media(max-width:420px){body{font-size:1rem}.brand span{display:none}.foot-in{grid-template-columns:minmax(0,1fr)}.lede{font-size:1.0625rem}.prose th,.prose td{padding:.5rem .625rem}}@media(max-height:480px) and (orientation:landscape){:root{--top-h:3.125rem}.hero{padding-top:1.5rem}}@media(hover:none){.prose .anchor{opacity:.5}}@media(prefers-reduced-motion:reduce){html{scroll-behavior:auto}.side{transition:none}}@media print{.top,.side,.toc,.toc-inline,.foot,.pager,.done-row,.code-bar button,.to-top,.scrim,.pad{display:none!important}.layout{display:block}body{background:#fff;color:#000}.code pre,.prose pre{white-space:pre-wrap}}.bg{color:#e6edf3;background-color:#0d1117}.chroma{color:#e6edf3;background-color:#0d1117}.chroma .err{color:#f85149}.chroma .lnlinks{outline:none;text-decoration:none;color:inherit}.chroma .lntd{vertical-align:top;padding:0;margin:0;border:0}.chroma .lntable{border-spacing:0;padding:0;margin:0;border:0}.chroma .hl{background-color:#6e7681}.chroma .lnt{white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#737679}.chroma .ln{white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#6e7681}.chroma .line{display:flex}.chroma .k{color:#ff7b72}.chroma .kc{color:#79c0ff}.chroma .kd{color:#ff7b72}.chroma .kn{color:#ff7b72}.chroma .kp{color:#79c0ff}.chroma .kr{color:#ff7b72}.chroma .kt{color:#ff7b72}.chroma .nc{color:#f0883e;font-weight:700}.chroma .no{color:#79c0ff;font-weight:700}.chroma .nd{color:#d2a8ff;font-weight:700}.chroma .ni{color:#ffa657}.chroma .ne{color:#f0883e;font-weight:700}.chroma .nl{color:#79c0ff;font-weight:700}.chroma .nn{color:#ff7b72}.chroma .py{color:#79c0ff}.chroma .nt{color:#7ee787}.chroma .nv{color:#79c0ff}.chroma .vc{color:#79c0ff}.chroma .vg{color:#79c0ff}.chroma .vi{color:#79c0ff}.chroma .vm{color:#79c0ff}.chroma .nf{color:#d2a8ff;font-weight:700}.chroma .fm{color:#d2a8ff;font-weight:700}.chroma .l{color:#a5d6ff}.chroma .ld{color:#79c0ff}.chroma .s{color:#a5d6ff}.chroma .sa{color:#79c0ff}.chroma .sb{color:#a5d6ff}.chroma .sc{color:#a5d6ff}.chroma .dl{color:#79c0ff}.chroma .sd{color:#a5d6ff}.chroma .s2{color:#a5d6ff}.chroma .se{color:#79c0ff}.chroma .sh{color:#79c0ff}.chroma .si{color:#a5d6ff}.chroma .sx{color:#a5d6ff}.chroma .sr{color:#79c0ff}.chroma .s1{color:#a5d6ff}.chroma .ss{color:#a5d6ff}.chroma .m{color:#a5d6ff}.chroma .mb{color:#a5d6ff}.chroma .mf{color:#a5d6ff}.chroma .mh{color:#a5d6ff}.chroma .mi{color:#a5d6ff}.chroma .il{color:#a5d6ff}.chroma .mo{color:#a5d6ff}.chroma .o{color:#ff7b72;font-weight:700}.chroma .ow{color:#ff7b72;font-weight:700}.chroma .c{color:#8b949e;font-style:italic}.chroma .ch{color:#8b949e;font-style:italic}.chroma .cm{color:#8b949e;font-style:italic}.chroma .c1{color:#8b949e;font-style:italic}.chroma .cs{color:#8b949e;font-weight:700;font-style:italic}.chroma .cp{color:#8b949e;font-weight:700;font-style:italic}.chroma .cpf{color:#8b949e;font-weight:700;font-style:italic}.chroma .gd{color:#ffa198;background-color:#490202}.chroma .ge{font-style:italic}.chroma .gr{color:#ffa198}.chroma .gh{color:#79c0ff;font-weight:700}.chroma .gi{color:#56d364;background-color:#0f5323}.chroma .go{color:#8b949e}.chroma .gp{color:#8b949e}.chroma .gs{font-weight:700}.chroma .gu{color:#79c0ff}.chroma .gt{color:#ff7b72}.chroma .gl{text-decoration:underline}.chroma .w{color:#6e7681}