@font-face{font-family:Geist Variable;src:url(/fonts/geist-variable.woff2)format("woff2");font-weight:100 900;font-display:swap}.ea-hero .ea-lab-compact .ea-figure svg{height:220px}.ea-hero .ea-lab-compact .ea-lab-heading{padding:1rem 1.4rem}.ea-hero .ea-lab-compact .ea-lab-readouts{padding:.65rem 1.5rem}.ea-hero .ea-lab-compact .ea-lab-readouts strong{font-size:1.5rem}.ea-hero .ea-lab-compact .ea-lab-foot{padding:.8rem 1.5rem}.ea-hero .ea-lab-compact .ea-lab-foot .ea-small{display:none}.ea-hero .ea-lab-compact details{padding:.75rem 1.5rem}@font-face{font-family:Newsreader Variable;src:url(/fonts/newsreader-variable.woff2)format("woff2");font-weight:200 800;font-display:swap}@font-face{font-family:Geist Mono Variable;src:url(/fonts/geist-mono-variable.woff2)format("woff2");font-weight:100 900;font-display:swap}@media (width<=800px){body.ea .ea-header nav{flex-wrap:wrap;justify-content:flex-start;column-gap:1.1rem}}.ea,body.ea[data-surface=course]{--surface-raised:var(--p-figure);--ink:var(--p-blue-17);--paper:var(--p-neutral-97);--blue:var(--p-blue-42b);--muted:var(--p-blue-41);--line:var(--p-blue-84);--orange:var(--p-red-43);--teal:var(--p-teal-41);background:var(--paper);color:var(--ink);-webkit-font-smoothing:antialiased;margin:0;font:17px/1.65 Geist Variable,Arial,sans-serif}.ea *{box-sizing:border-box}.ea [hidden]{display:none!important}.ea a{color:inherit;text-underline-offset:.2em;text-decoration-thickness:1px}.ea a:hover{color:var(--blue)}.ea :focus-visible{outline:3px solid var(--blue);outline-offset:4px}.ea button,.ea input,.ea textarea,.ea select{font:inherit}.ea button,.ea summary,.ea input[type=range]{cursor:pointer}.ea button{min-height:44px}.ea p{margin:0 0 1.2em}.ea h1,.ea h2,.ea h3{letter-spacing:-.045em;text-wrap:balance;font-weight:550;line-height:1.08}.ea h1{margin:.3em 0;font-size:clamp(3rem,6.6vw,6.6rem)}.ea h2{margin:0 0 .6em;font-size:clamp(2rem,3.8vw,3.5rem)}.ea h3{letter-spacing:-.025em;font-size:1.45rem}.ea svg{max-width:100%}.ea ::selection{background:var(--p-blue-88)}.ea-skip{z-index:100;background:var(--surface-raised);padding:1rem;position:fixed;top:-5rem;left:1rem}.ea-skip:focus{top:1rem}.ea-header{border-bottom:1px solid var(--line);background:var(--paper);justify-content:space-between;align-items:center;gap:2rem;padding:1.25rem clamp(1rem,4vw,4rem);display:flex}.ea-brand{letter-spacing:-.02em;align-items:center;gap:.8rem;font-size:.85rem;line-height:1.25;text-decoration:none;display:flex}.ea-brand strong{font-weight:650}.ea-mark{background:var(--ink);color:var(--surface-raised);border-radius:50%;place-items:center;width:2.8rem;height:2.8rem;font-size:2.1rem;display:grid}.ea-header nav{gap:1.8rem;font-size:.85rem;display:flex}.ea-header nav a{border-bottom:2px solid #0000;padding:.4rem 0;text-decoration:none}.ea-header nav a[aria-current]{border-color:var(--blue)}.ea-author{font-size:.8rem;font-weight:600;text-decoration:none}.ea-author span{color:var(--muted);font-weight:400}.ea-shell{width:min(1340px,100% - 8vw);margin-inline:auto}.ea-narrow{width:min(800px,100% - 2.5rem);margin-inline:auto}.ea-kicker{color:var(--muted);margin:0 0 1.5rem;font:500 .78rem/1.5 Geist Mono Variable,monospace}.ea-hero{grid-template-columns:1fr 1.05fr;align-items:center;gap:5%;padding-block:5rem 4rem;display:grid}.ea-hero h1{max-width:9ch}.ea-lead{max-width:43ch;font:400 clamp(1.2rem,1.8vw,1.6rem)/1.45 Newsreader Variable,Georgia,serif}.ea-actions{flex-wrap:wrap;gap:.8rem;margin:1.6rem 0;display:flex}.ea-button{background:var(--ink);border:1px solid var(--ink);border-radius:3px;justify-content:center;align-items:center;gap:1rem;min-height:46px;padding:.8rem 1.2rem;font:500 .88rem/1.3 Geist Variable,sans-serif;text-decoration:none;display:inline-flex;color:var(--surface-raised)!important}.ea-button:hover{background:var(--blue);border-color:var(--blue)}.ea-button.secondary{border-color:var(--line);background:0 0;color:var(--ink)!important}.ea-small{color:var(--muted);font-size:.78rem;line-height:1.6}.ea-band{border-top:1px solid var(--line);padding-block:4rem}.ea-split{grid-template-columns:1fr 1fr;gap:7%;display:grid}.ea-spine{border-top:1px solid var(--ink);grid-template-columns:repeat(6,1fr);margin-block:2rem;padding:0;list-style:none;display:grid}.ea-spine li{padding:1.2rem 1rem 0 0;font-size:.86rem;position:relative}.ea-spine li:before{content:"";background:var(--blue);border-radius:50%;width:7px;height:7px;display:block;position:absolute;top:-4px}.ea-spine strong{margin-bottom:.4rem;display:block}.ea-spine span{color:var(--muted);font-size:.8rem}.ea-route-picks{flex-wrap:wrap;gap:.6rem;margin:1.5rem 0;display:flex}.ea-route-picks button{border:1px solid var(--line);color:var(--ink);background:0 0;border-radius:100px;padding:.55rem 1.2rem;font-size:.82rem}.ea-route-picks button[aria-pressed=true]{color:var(--surface-raised);background:var(--ink);border-color:var(--ink)}.ea-contents-head{justify-content:space-between;align-items:end;gap:2rem;display:flex}.ea-chapters{grid-template-columns:1fr 1fr;gap:0 3rem;margin:2rem 0 0;padding:0;list-style:none;display:grid}.ea-chapters li{border-top:1px solid var(--line)}.ea-chapters a{grid-template-columns:3rem 1fr 1rem;gap:1rem;min-height:155px;padding:1.5rem 0;text-decoration:none;display:grid}.ea-chapters a:hover strong{color:var(--blue)}.ea-chapters .ea-number{color:var(--muted);padding-top:.25rem;font:400 .8rem Geist Mono Variable,monospace}.ea-chapters strong{letter-spacing:-.035em;font-size:1.2rem;font-weight:550;line-height:1.3;display:block}.ea-chapters p{color:var(--muted);margin:.65rem 0;font-size:.86rem}.ea-chapters small{color:var(--muted);font:400 .65rem Geist Mono Variable,monospace}.ea-chapters li[data-recommended=true] .ea-number{color:var(--blue);font-weight:700}.ea-chapters li[data-recommended=true] a{border-left:3px solid var(--blue);padding-left:1rem}.ea-dark{background:var(--ink);color:var(--p-neutral-96b);padding:4rem 4vw}.ea-dark p{color:var(--p-blue-84b)}.ea-dark h2{max-width:18ch}.ea-dark a{color:var(--surface-raised)}.ea-footer{border-top:1px solid var(--line);grid-template-columns:1.5fr 1fr;gap:1rem 3rem;padding:3rem 4vw;font-size:.9rem;display:grid}.ea-footer>div:nth-child(2){flex-wrap:wrap;align-items:start;gap:1rem;font-size:.8rem;display:flex}.ea-footer>p{grid-column:1/-1}.ea-page-intro{padding-block:4rem 2rem}.ea-page-intro h1{max-width:17ch;font-size:clamp(2.8rem,5.5vw,5.3rem)}.ea-reading-grid{grid-template-columns:220px minmax(0,760px) 180px;align-items:start;gap:4%;width:92%;max-width:1400px;margin:3rem auto 5rem;display:grid}.ea-book-nav,.ea-margin{max-height:calc(100vh - 3rem);font-size:.78rem;position:sticky;top:1.5rem;overflow:auto}.ea-book-nav ol{margin:1rem 0;padding:0;list-style:none}.ea-book-nav li{margin-bottom:.2rem}.ea-book-nav a{border-left:2px solid #0000;padding:.6rem .65rem;line-height:1.4;text-decoration:none;display:block}.ea-book-nav a[aria-current]{border-color:var(--blue);color:var(--blue);background:var(--p-neutral-94)}.ea-book-nav summary{padding:.5rem;font-weight:650}.ea-book-nav>details>summary,.ea-book-nav details:not([open])>:not(summary){display:none}.ea-margin a{color:var(--muted);margin:.8rem 0;line-height:1.45;text-decoration:none;display:block}.ea-margin p{font-weight:600}.ea-chapter-heading{border-bottom:1px solid var(--line);margin-bottom:2.5rem;padding-bottom:2rem}.ea-chapter-heading h1{font-size:clamp(2.7rem,4.7vw,4.6rem)}.ea-prereq{color:var(--muted);max-width:60ch;font-size:.8rem}.ea-prose{min-width:0;font:400 1.19rem/1.7 Newsreader Variable,Georgia,serif}.ea-prose h2{letter-spacing:-.035em;margin:2.6rem 0 1rem;scroll-margin-top:2rem;font:550 1.8rem/1.2 Geist Variable,sans-serif}.ea-prose h3{margin:2rem 0 .8rem;font:550 1.3rem/1.3 Geist Variable,sans-serif}.ea-prose a{color:var(--blue)}.ea-prose strong{font-weight:650}.ea-prose li{margin:.5rem 0}.ea-prose blockquote{border-left:3px solid var(--blue);color:var(--ink);margin:2rem 0;padding:.5rem 1.4rem}.ea-prose details{background:var(--p-neutral-95c);--scroll-cover:var(--p-neutral-95c);border:1px solid var(--line);border-radius:3px;margin:1.5rem 0;padding:1rem 1.2rem}.ea-prose summary{padding:.15rem 0;font:550 .9rem/1.5 Geist Variable,sans-serif}.ea-prose details[open] summary{margin-bottom:1rem}.ea-prose .solution{background:var(--p-neutral-96c);--scroll-cover:var(--p-neutral-96c);border-color:var(--p-teal-83b)}.ea-prose pre{border:1px solid var(--line);border-radius:3px;padding:1.2rem;font:400 .84rem/1.65 Geist Mono Variable,monospace;overflow:auto}.ea-prose code{font-family:Geist Mono Variable,monospace;font-size:.77em}.ea-prose pre code{font-size:inherit}.ea-prose .katex{font-size:1em}.ea-prose .katex-display{padding:.8rem 0;overflow:auto hidden}.ea-prose table{border-collapse:collapse;max-width:100%;margin:1.5rem 0;font:400 .83rem/1.5 Geist Variable,sans-serif;display:block;overflow:auto}.ea-prose td,.ea-prose th{border-bottom:1px solid var(--line);text-align:left;padding:.7rem 1rem}.ea-prose th{border-bottom-color:var(--ink)}.ea-prose hr{border:0;border-top:1px solid var(--line);margin:2rem 0}.ea-note{border-top:1px solid var(--line);margin-top:3rem;padding-top:1.5rem;font:.85rem/1.6 Geist Variable,sans-serif}.ea-note label{font-weight:600;display:block}.ea-note textarea{border:1px solid var(--line);width:100%;min-height:140px;color:var(--ink);background:var(--surface-raised);resize:vertical;margin:.6rem 0;padding:1rem;display:block}.ea-chapter-next{border-top:1px solid var(--line);justify-content:space-between;gap:2rem;padding:2rem 0;font:.85rem/1.5 Geist Variable,sans-serif;display:flex}.ea-lab{background:var(--surface-raised);border:1px solid var(--line);border-radius:5px;overflow:hidden}.ea-lab-heading{border-bottom:1px solid var(--line);justify-content:space-between;gap:1rem;padding:1.4rem 1.6rem;display:flex}.ea-lab-heading p{color:var(--muted);margin:0;font-size:.77rem}.ea-lab-heading h2,.ea-lab-heading h3{letter-spacing:-.02em;margin:0 0 .3rem;font:550 1.1rem/1.25 Geist Variable,sans-serif}.ea-live{color:var(--teal);white-space:nowrap;font:400 .68rem/1.5 Geist Mono Variable,monospace}.ea-live:before{content:"";background:var(--teal);border-radius:50%;width:6px;height:6px;margin-right:.4rem;display:inline-block}.ea-figure{margin:0;padding:1rem 1.4rem .3rem}.ea-figure svg{width:100%;height:auto;display:block;overflow:visible}.ea-figure figcaption{color:var(--muted);margin:.5rem 0;font-size:.72rem;line-height:1.55}.ea-controls{gap:.9rem;padding:1rem 1.5rem;display:grid}.ea-control{grid-template-columns:1fr auto;gap:.3rem 1rem;font-size:.78rem;display:grid}.ea-control input[type=range]{width:100%;accent-color:var(--blue);grid-column:1/-1;height:25px}.ea-control output{color:var(--blue);font-family:Geist Mono Variable,monospace}.ea-lab-readouts{background:var(--p-neutral-95c);border-block:1px solid var(--line);grid-template-columns:1fr 1fr;gap:1rem;padding:1rem 1.5rem;font-size:.73rem;display:grid}.ea-lab-readouts strong{font:500 1.8rem/1.5 Geist Mono Variable,monospace;display:block}.ea-lab-readouts>div:last-child strong{color:var(--orange)}.ea-lab-foot{padding:1.2rem 1.5rem;font-size:.8rem;line-height:1.6}.ea-lab-foot p{margin:0 0 .6rem}.ea-lab-foot a{color:var(--blue)}.ea-lab .ea-button{min-height:40px;padding:.5rem .8rem;font-size:.75rem}.ea-lab details{border-top:1px solid var(--line);padding:1rem 1.5rem;font-size:.76rem}.ea-lab summary{font-weight:550}.ea-lab details p{margin-top:.7rem}.ea-lab pre{white-space:pre-wrap;font:400 .69rem/1.65 Geist Mono Variable,monospace}.ea-experiments{gap:3rem;padding-bottom:5rem;display:grid}.ea-experiment{grid-template-columns:.7fr 1.3fr;align-items:start;gap:5%;scroll-margin-top:2rem;display:grid}.ea-experiment>div:first-child{padding-top:1.5rem}.ea-experiment h2{font-size:2.5rem}.ea-experiment .ea-lead{font-size:1.35rem}.ea-lab-buttons{flex-wrap:wrap;gap:.6rem;display:flex}.ea-alert{border-left:3px solid var(--orange);background:var(--p-neutral-97b);padding:1.2rem;font-size:.84rem;line-height:1.6}.ea-top-link{margin:2rem 0;font-size:.82rem;display:inline-block}.ea-reading-list article{border-top:1px solid var(--line);padding:1.6rem 0}.ea-reading-list h2{margin:.2rem 0 .7rem;font-size:1.5rem}.ea-reading-list p{max-width:65ch}.ea-reading-list small{color:var(--muted);font:400 .72rem Geist Mono Variable,monospace}.ea-outline{padding-left:1.3rem}.ea-outline li{margin:.7rem 0}.ea-print-only{display:none}@media (width<=1150px){.ea-reading-grid{grid-template-columns:190px minmax(0,760px);gap:4%}.ea-margin{display:none}.ea-header,.ea-header nav{gap:1rem}.ea-spine{grid-template-columns:repeat(3,1fr);gap:1rem}.ea-spine li:nth-child(n+4){border-top:1px solid var(--line)}.ea-author span{display:none}}@media (width<=800px){.ea-header{flex-wrap:wrap;padding:1rem 1.2rem}.ea-header nav{order:3;justify-content:space-between;gap:.4rem;width:100%;font-size:.75rem}.ea-hero{grid-template-columns:1fr;gap:2rem;padding-block:2.5rem}.ea-hero h1{max-width:12ch}.ea-hero .ea-lead{max-width:50ch}.ea-shell{width:calc(100% - 2.5rem)}.ea-split,.ea-experiment{grid-template-columns:1fr;gap:1.5rem}.ea-reading-grid{width:calc(100% - 2.5rem);margin-top:1.5rem;display:block}.ea-book-nav{border:1px solid var(--line);max-height:none;margin-bottom:2rem;padding:.4rem;position:static}.ea-book-nav>details>summary{display:list-item}.ea-chapters{grid-template-columns:1fr}.ea-chapters a{min-height:auto}.ea-band{padding-block:2.5rem}.ea-contents-head{display:block}.ea-footer{grid-template-columns:1fr}.ea-page-intro{padding-block:2rem}.ea-chapter-heading h1{font-size:3rem}.ea-prose{font-size:1.13rem}.ea-dark{padding:3rem 1.25rem}.ea-note .ea-actions{gap:.5rem}.ea-spine{font-size:.8rem}.ea-spine li{padding-right:.5rem}.ea-spine span{font-size:.73rem}.ea-lab-heading,.ea-controls,.ea-lab-foot{padding-inline:1rem}}@media (prefers-reduced-motion:reduce){.ea *{scroll-behavior:auto!important;transition:none!important;animation:none!important}}@media print{.ea{background:var(--surface-raised);color:var(--p-neutral-05);font-size:11pt}.ea-skip,.ea-header,.ea-footer,.ea-book-nav,.ea-margin,.ea-note,.ea-chapter-next,.ea-no-print,.ea-top-link{display:none!important}.ea-shell,.ea-narrow,.ea-reading-grid{width:100%;max-width:none;margin:0;display:block}.ea-prose{font-size:12pt}.ea-prose h2{break-after:avoid}.ea-prose pre,.ea-prose details{break-inside:avoid}.ea-chapter-heading h1{font-size:30pt}.ea-print-only{display:block}.ea-print-chapter{break-before:page}.ea-prose a{color:inherit}.ea-prose .katex-display{overflow:visible}.ea-prose details{background:var(--surface-raised)}.ea-prose details>*{display:block}.ea-prose details>summary{font-weight:700;display:block}.ea-figure{break-inside:avoid}}.ea-prose{--scroll-cover:var(--paper);--scroll-shadow:color-mix(in srgb,var(--ink) 24%,transparent)}.ea-prose .katex-display,.ea-prose .ea-scroll{background:linear-gradient(to right,var(--scroll-cover) 40%,transparent) left center/1.6rem 100% no-repeat local,linear-gradient(to left,var(--scroll-cover) 40%,transparent) right center/1.6rem 100% no-repeat local,radial-gradient(farthest-side at 0 50%,var(--scroll-shadow),transparent) left center/.8rem 100% no-repeat scroll,radial-gradient(farthest-side at 100% 50%,var(--scroll-shadow),transparent) right center/.8rem 100% no-repeat scroll}.ea-prose .ea-scroll{max-width:100%;margin:1.5rem 0;overflow-x:auto}.ea-prose .ea-scroll>table{max-width:none;margin:0;display:table;overflow:visible}.ea-prose [data-scrolls]:focus-visible{outline:2px solid var(--blue);outline-offset:2px}@media (width<=480px){.ea-prose .katex-display>.katex{font-size:.9em}.ea-prose ol,.ea-prose ul{padding-left:1.4em}.ea-prose details{padding-inline:.85rem}}@media (width<=340px){.ea-chapter-heading h1{overflow-wrap:break-word;font-size:2.6rem}}.ea-prose pre.astro-code{background-color:var(--surface-raised)!important;color:var(--ink)!important}.ea-prose pre.astro-code span[style]{color:inherit!important}.ea-prose pre.astro-code span[style*=F97583 i]{color:var(--orange)!important}.ea-prose pre.astro-code span[style*="79B8FF" i]{color:var(--blue)!important}.ea-prose pre.astro-code span[style*="9ECBFF" i],.ea-prose pre.astro-code span[style*=DBEDFF i]{color:var(--teal)!important}.ea-prose pre.astro-code span[style*=B392F0 i]{color:var(--p-violet-39b)!important}.ea-prose pre.astro-code span[style*=FFAB70 i]{color:var(--p-red-34)!important}.ea-prose pre.astro-code span[style*="6A737D" i]{color:var(--muted)!important}.ea-help-row{margin-top:0}.ea-reading-grid:has(+.ea-help-row){margin-bottom:0}.ea-help{border-top:1px solid var(--line);grid-column:2;padding:1.4rem 0 0;font:.9rem/1.6 Geist Variable,sans-serif}.ea-help p{max-width:62ch;margin:0}.ea-help a{color:var(--blue);text-decoration:underline}@media print{.ea-prose .katex-display,.ea-prose .ea-scroll{background:0 0;overflow:visible}.ea-help-row{display:none}.ea-prose a[href^=http]:after{content:" (" attr(href) ")";overflow-wrap:anywhere;font-size:.85em}}.ea-chapters li[data-recommended=optional] a{border-left:3px dashed var(--muted);padding-left:1rem}.ea-chapters li[data-recommended=optional] .ea-number{color:var(--blue)}.ea-chapters [data-path-mark]{color:var(--muted);font-weight:400}.ea-experiments>.ea-help{grid-column:1/-1}@media print{.ea-experiments>.ea-help{display:none}}
