@font-face{font-family:Fraunces;font-style:normal;font-display:swap;font-weight:600;src:url(/assets/fraunces-latin-600-normal-BFCDtZfi.woff2)format("woff2"),url(/assets/fraunces-latin-600-normal-DL5QCzvS.woff)format("woff")}@font-face{font-family:Figtree;font-style:normal;font-display:swap;font-weight:400;src:url(/assets/figtree-latin-400-normal-g7Dtegnw.woff2)format("woff2"),url(/assets/figtree-latin-400-normal-BD4aNku5.woff)format("woff")}@font-face{font-family:Figtree;font-style:normal;font-display:swap;font-weight:500;src:url(/assets/figtree-latin-500-normal-BWnGEVsr.woff2)format("woff2"),url(/assets/figtree-latin-500-normal-B_yy1phn.woff)format("woff")}@font-face{font-family:Figtree;font-style:normal;font-display:swap;font-weight:600;src:url(/assets/figtree-latin-600-normal-Cv_xCTDl.woff2)format("woff2"),url(/assets/figtree-latin-600-normal-BM_oTo4n.woff)format("woff")}@font-face{font-family:Figtree;font-style:normal;font-display:swap;font-weight:700;src:url(/assets/figtree-latin-700-normal-th6qEP7c.woff2)format("woff2"),url(/assets/figtree-latin-700-normal-BCCt2T1q.woff)format("woff")}@font-face{font-family:Figtree;font-style:italic;font-display:swap;font-weight:400;src:url(/assets/figtree-latin-400-italic-BSc-2xHp.woff2)format("woff2"),url(/assets/figtree-latin-400-italic-B4hAvW4f.woff)format("woff")}@font-face{font-family:Figtree;font-style:italic;font-display:swap;font-weight:500;src:url(/assets/figtree-latin-500-italic-DOKQTGWU.woff2)format("woff2"),url(/assets/figtree-latin-500-italic--zjTmGgE.woff)format("woff")}@font-face{font-family:Figtree;font-style:italic;font-display:swap;font-weight:600;src:url(/assets/figtree-latin-600-italic-CUq9vNO9.woff2)format("woff2"),url(/assets/figtree-latin-600-italic-CoXhfiHO.woff)format("woff")}@font-face{font-family:Figtree;font-style:italic;font-display:swap;font-weight:700;src:url(/assets/figtree-latin-700-italic-Bk3jHuty.woff2)format("woff2"),url(/assets/figtree-latin-700-italic-BikS-vco.woff)format("woff")}@font-face{font-family:IBM Plex Mono;font-style:normal;font-display:swap;font-weight:400;src:url(/assets/ibm-plex-mono-latin-400-normal-DMJ8VG8y.woff2)format("woff2"),url(/assets/ibm-plex-mono-latin-400-normal-CvHOgSBP.woff)format("woff")}@font-face{font-family:IBM Plex Mono;font-style:normal;font-display:swap;font-weight:500;src:url(/assets/ibm-plex-mono-latin-500-normal-DSY6xOcd.woff2)format("woff2"),url(/assets/ibm-plex-mono-latin-500-normal-CB9ihrfo.woff)format("woff")}:root{--lightningcss-light:initial;--lightningcss-dark: ;color-scheme:light;--paper:#fbfbf7;--paper-sunken:#eef0ea;--grid:#e3e3dc;--rule:#c9c9c0;--ink:#000;--pen-blue:#1a3fa8;--pen-green:#2e8b3e;--pen-red:#c8281e;--font-display:"Fraunces", Georgia, serif;--font-sans:"Figtree", system-ui, sans-serif;--font-mono:"IBM Plex Mono", ui-monospace, monospace}@media (prefers-color-scheme:dark){:root:not([data-theme=light]){--lightningcss-light: ;--lightningcss-dark:initial;color-scheme:dark;--paper:#131418;--paper-sunken:#1d1f24;--grid:#2a2c33;--rule:#3d404a;--ink:#fff;--pen-blue:#94b2ff;--pen-green:#7fd18a;--pen-red:#ff7a6e}}:root[data-theme=dark]{--lightningcss-light: ;--lightningcss-dark:initial;color-scheme:dark;--paper:#131418;--paper-sunken:#1d1f24;--grid:#2a2c33;--rule:#3d404a;--ink:#fff;--pen-blue:#94b2ff;--pen-green:#7fd18a;--pen-red:#ff7a6e}*,:before,:after{box-sizing:border-box}html{background:var(--paper);color:var(--ink);font-family:var(--font-sans);-webkit-text-size-adjust:100%;font-size:17px;line-height:1.55}body{margin:0}.page{max-width:74rem;margin:0 auto;padding:2.5rem 1.25rem 2rem}.chapter{gap:2rem;display:grid}.chapter>*{min-width:0}.narrative{max-width:38rem}@media (width>=62rem){.chapter{grid-template-columns:minmax(0,5fr) minmax(0,7fr);align-items:start;gap:3.5rem}}.wordmark a{text-decoration:none}[data-view=landing] .chapter{grid-template-columns:minmax(0,1fr);gap:1.5rem;max-width:44rem;margin:0 auto}.landing-line{text-wrap:balance;font-size:1.2rem;line-height:1.45}.landing-line p{margin:0}[data-view=landing] #play{min-width:8rem;min-height:3.5rem;font-size:1.2rem}.landing-ways{flex-wrap:wrap;gap:.75rem;margin:0 0 1.25rem;display:flex}a.btn{align-items:center;text-decoration:none;display:inline-flex}.landing-chapters{gap:.15rem;margin:0;padding:0;list-style:none;display:grid}.landing-chapters a{padding:.3rem 0;text-decoration:none;display:inline-block}.landing-title{text-underline-offset:.15em;text-decoration:underline}.landing-chapters .num{min-width:1.5rem;display:inline-block}.chapter-kicker{letter-spacing:.08em;text-transform:uppercase;margin:0 0 .25rem;font-size:.8rem;font-weight:600}.chapter-title{text-wrap:balance;margin:0 0 1.25rem;font-size:1.9rem}.chapter-title:focus{outline:none}.maths{border-top:1px solid var(--rule);padding:.6rem 0}.maths:last-of-type{border-bottom:1px solid var(--rule)}.maths summary{cursor:pointer;font-weight:600}.maths[open] summary{margin-bottom:.75rem}.formula{text-align:center;white-space:nowrap;padding:.25rem 0;font-size:1.05rem;overflow-x:auto}.chapter-nav{justify-content:space-between;gap:1rem;margin-top:1.5rem;font-weight:600;display:flex}.contents{flex-wrap:wrap;flex:1;gap:.25rem 1.1rem;margin-left:1rem;font-size:.95rem;display:flex}.contents a{text-align:center;min-width:1.5rem;padding:.4rem 0;text-decoration:none}.contents a:hover{text-decoration:underline}.contents a[aria-current]{font-weight:700;text-decoration:underline;text-decoration-thickness:2px}@media (width<=30rem){.masthead{flex-wrap:wrap;row-gap:.25rem}.contents{flex-basis:100%;order:1;margin-left:0}}.wordmark,h1,h2,h3{font-family:var(--font-display);font-weight:600;line-height:1.15}.masthead{justify-content:space-between;align-items:center;gap:1rem;margin-bottom:1.5rem;display:flex}.wordmark{letter-spacing:-.01em;margin:0;font-size:2.1rem}p{margin:0 0 1rem}a{color:inherit;text-underline-offset:.15em;text-decoration:underline}:focus-visible{outline:2px solid var(--ink);outline-offset:2px}.num{font-family:var(--font-mono);font-variant-numeric:tabular-nums}.figure{border-top:1px solid var(--ink);border-bottom:1px solid var(--ink);margin:2rem 0;padding:1rem 0 .75rem}.figure figcaption{margin-top:.75rem;font-size:.9rem;font-style:italic}.plot{aspect-ratio:2;width:100%;min-height:13rem;display:block}.plot-short{aspect-ratio:5/2;min-height:11rem}.plot-drag{touch-action:none}.presets{flex-wrap:wrap;gap:.5rem;margin-bottom:.5rem;display:flex}.presets[hidden]{display:none}a.term{color:inherit;text-underline-offset:.2em;text-decoration-line:underline;text-decoration-style:dotted;text-decoration-thickness:1px}a.term:hover{text-decoration-style:solid}dfn{font-style:normal;font-weight:600}.term-tip{z-index:20;border:1px solid var(--ink);background:var(--paper);max-width:min(20rem,100vw - 1rem);color:var(--ink);pointer-events:none;border-radius:4px;padding:.5rem .7rem;font-size:.85rem;line-height:1.4;position:fixed}.term-tip[hidden]{display:none}[data-view=glossary] .chapter{grid-template-columns:minmax(0,1fr);max-width:44rem;margin:0 auto}[data-view=glossary] .lab{display:none}.glossary{margin:1.5rem 0 0}.glossary-entry{border-top:1px solid var(--rule);border-left:3px solid #0000;padding:.75rem 0 .75rem .9rem;scroll-margin:2rem}.glossary-entry:focus{outline:none}.glossary-entry.is-current{border-left-color:var(--ink)}.glossary dt{font-weight:600}.glossary dd{margin:.25rem 0 0}.glossary dd p{margin:.25rem 0}.glossary-from{font-size:.85rem}.footer-links{gap:1rem;display:flex}.pair-diagram{float:right;text-align:center;width:7.5rem;margin:.25rem 0 .5rem 1rem}.pair-diagram svg{margin:0 auto;display:block}.pair-diagram rect{fill:var(--paper);stroke-width:2.5px}.pair-diagram .pd-mod{stroke:var(--pen-green)}.pair-diagram .pd-car{stroke:var(--pen-blue)}.pair-diagram .wire{fill:none;stroke:var(--ink);stroke-width:1.5px}.pair-diagram text{fill:var(--ink);font-family:var(--font-mono);text-anchor:middle;dominant-baseline:middle;font-size:11px}.pair-diagram .pd-out{font-family:var(--font-sans);text-anchor:start;font-size:9px}.pair-diagram figcaption{font-size:.75rem;font-style:italic;line-height:1.3}.steps{flex-wrap:wrap;gap:.35rem;margin-bottom:.5rem;display:flex}.steps[hidden]{display:none}.step-option{border:1px solid var(--ink);background:var(--paper);min-height:1.9rem;color:var(--ink);font:inherit;cursor:pointer;border-radius:999px;padding:0 .7rem;font-size:.8rem}.step-option[aria-current=step]{background:var(--ink);color:var(--paper)}.step-title{margin:1.5rem 0 .5rem;font-size:1rem}.step-head{border:0;border-bottom:1px solid var(--ink);color:var(--ink);font:inherit;text-align:left;cursor:pointer;background:0 0;padding:0 0 .15rem;font-weight:600}.step-head[aria-current=step]{border-bottom-width:3px}.plot-control{cursor:ew-resize;touch-action:pan-y}.figure-tools{flex-wrap:wrap;justify-content:space-between;align-items:center;gap:.75rem;margin-top:.75rem;display:flex}.chips{flex-wrap:wrap;gap:.35rem;display:flex}.chip{border:1px solid var(--rule);background:var(--paper);min-width:2.25rem;min-height:2.25rem;color:var(--ink);font:inherit;cursor:pointer;border-radius:999px;padding:0 .4rem;font-size:.9rem}.chip:hover{border-color:var(--ink)}.chip[aria-pressed=true]{border-color:var(--ink);background:var(--ink);color:var(--paper)}.btn{border:1px solid var(--ink);background:var(--paper);min-height:2.75rem;color:var(--ink);font:inherit;white-space:nowrap;cursor:pointer;border-radius:999px;padding:0 1.1rem;font-weight:600}.btn-ink{background:var(--ink);color:var(--paper)}.btn-quiet{border-color:var(--rule);min-height:2.25rem;padding:0 .85rem;font-size:.85rem;font-weight:500}.btn:hover{border-color:var(--ink);box-shadow:0 0 0 1px var(--ink)}.controls{gap:.25rem;display:grid}.slider-row[hidden]{display:none}.lab .figure:first-of-type{margin-top:1.5rem}.lab .figure:last-of-type{margin-bottom:0}.transport{flex-wrap:wrap;align-items:center;gap:.25rem 1.25rem;margin-bottom:.75rem;display:flex}.check{cursor:pointer;align-items:center;gap:.5rem;min-height:2.75rem;display:inline-flex}.check input{width:1.15rem;height:1.15rem;accent-color:var(--ink);margin:0}.check[hidden]{display:none}@media (prefers-reduced-motion:reduce){#motion-toggle{display:none}}#play{min-width:5.5rem}.slider-row{grid-template-columns:4.5rem 1fr 9.5rem;grid-template-areas:"label slider value";align-items:center;gap:.75rem;display:grid}.slider-row label{grid-area:label;font-weight:600}.slider-row output{text-align:right;grid-area:value;font-size:.9rem}.slider{cursor:pointer;appearance:none;background:0 0;grid-area:slider;width:100%;height:2.75rem;margin:0}.slider::-webkit-slider-runnable-track{background:linear-gradient(to right, var(--ink) var(--filled,0%), var(--paper-sunken) var(--filled,0%));height:.375rem;box-shadow:0 0 0 1px var(--rule);border-radius:999px}.slider::-moz-range-track{background:linear-gradient(to right, var(--ink) var(--filled,0%), var(--paper-sunken) var(--filled,0%));height:.375rem;box-shadow:0 0 0 1px var(--rule);border-radius:999px}.slider::-webkit-slider-thumb{border:2px solid var(--paper);background:var(--ink);-webkit-appearance:none;border-radius:50%;width:1.25rem;height:1.25rem;margin-top:-.4375rem}.slider::-moz-range-thumb{box-sizing:border-box;border:2px solid var(--paper);background:var(--ink);border-radius:50%;width:1.25rem;height:1.25rem}.slider:focus-visible{outline-offset:-2px;border-radius:999px}@media (width<=30rem){.slider-row{grid-template-columns:1fr auto;grid-template-areas:"label value""slider slider";row-gap:0;margin-top:.5rem}}.footer{justify-content:space-between;gap:1rem;margin-top:3rem;font-size:.85rem;display:flex}.hint{font-size:.85rem}@media (hover:none){.hint{display:none}}.controls-toggle{display:none}.plot-frame{position:relative}@media (width>=62rem){[data-view=chapter] .page{flex-direction:column;height:100dvh;padding-top:1.25rem;padding-bottom:.5rem;display:flex}[data-view=chapter] .masthead{flex:none;margin-bottom:1rem}[data-view=chapter] .chapter{flex:auto;grid-template-rows:minmax(0,1fr);align-items:stretch;min-height:0}[data-view=chapter] .narrative{overscroll-behavior:contain;min-height:0;padding:0 1rem 2rem 0;overflow-y:auto}[data-view=chapter] .lab{flex-direction:column;min-height:0;display:flex;overflow-y:auto}[data-view=chapter] .lab .figure:not([hidden]){flex-direction:column;flex:1 1 0;min-height:0;margin:.75rem 0 0;padding:.5rem 0 .4rem;display:flex}[data-view=chapter] .plot-frame{flex:auto;min-height:6rem}[data-view=chapter] .slider{height:2rem}[data-view=chapter] .controls{gap:0}[data-view=chapter] .lab[data-many-sliders=true] .sliders{grid-template-columns:minmax(0,1fr) minmax(0,1fr);column-gap:1.5rem;display:grid}[data-view=chapter] .lab[data-many-sliders=true] .presets{grid-column:1/-1}[data-view=chapter] .lab[data-many-sliders=true] .presets .btn{min-height:1.9rem;padding:0 .8rem;font-size:.85rem}[data-view=chapter] .lab[data-many-sliders=true] .slider-row{grid-template-columns:4.5rem minmax(0,1fr) auto;gap:.5rem}[data-view=chapter] .lab[data-many-sliders=true] .slider-row output{white-space:nowrap}[data-view=chapter] .plot-frame .plot{aspect-ratio:auto;width:100%;height:100%;min-height:0;position:absolute;inset:0}[data-view=chapter] .lab .figure figcaption{margin-top:.4rem;font-size:.85rem}[data-view=chapter] .footer{flex:none;margin-top:.5rem}}@media (width<=61.99rem){[data-view=chapter] .lab{z-index:2;border-bottom:1px solid var(--ink);background:var(--paper);order:-1;margin:0 -1.25rem;padding:.5rem 1.25rem .25rem;position:sticky;top:0}[data-view=chapter] .transport{gap:.25rem .75rem;margin-bottom:.25rem}[data-view=chapter] .controls-toggle{margin-left:auto;display:inline-block}[data-view=chapter] .steps,[data-view=chapter] .lab:not([data-sliders=open]) .sliders{display:none}[data-view=chapter] .sliders{max-height:40dvh;overflow-y:auto}[data-view=chapter] .lab .figure{border-bottom:0;margin:.35rem 0 0;padding:.25rem 0 0}[data-view=chapter] .plot-frame{height:19dvh;min-height:7rem}[data-view=chapter] .plot-frame .plot{aspect-ratio:auto;width:100%;height:100%;min-height:0;position:absolute;inset:0}[data-view=chapter] .lab .figure figcaption{clip-path:inset(50%);white-space:nowrap;width:1px;height:1px;position:absolute;overflow:hidden}[data-view=chapter] .figure-tools{flex-wrap:nowrap;margin-top:.25rem}[data-view=chapter] .chips{flex-wrap:nowrap;overflow-x:auto}}.piano{align-items:center;gap:.5rem;margin-top:.75rem;display:flex}.piano[hidden]{display:none}.piano-octave{flex:none;min-width:2.25rem;padding:0}.piano-keys{touch-action:none;-webkit-user-select:none;user-select:none;flex:auto;min-width:0;height:6.5rem;display:flex}.piano-key{border:1px solid var(--ink);font:inherit;cursor:pointer;padding:0;position:relative}.piano-white{background:var(--paper);min-width:0;color:var(--ink);flex:1 1 0;margin-left:-1px}.piano-black{z-index:1;background:var(--ink);width:4.2%;height:62%;color:var(--paper);flex:none;margin:0 -2.1%}.piano-key[aria-pressed=true]{background:var(--ink);color:var(--paper)}.piano-black[aria-pressed=true]{outline:3px solid var(--paper);outline-offset:-5px}.piano-key:disabled{cursor:default;opacity:.35}.piano-letter{text-align:center;font-size:.7rem;position:absolute;bottom:.3rem;left:0;right:0}@media (hover:none){.piano-letter{display:none}}@media (width>=62rem){[data-view=chapter] .piano-keys{height:4.5rem}[data-view=chapter] .lab[data-many-sliders=true] .piano{grid-column:1/-1}}.switch[hidden]{display:none}.switch{vertical-align:middle;margin-left:.5rem;font-style:normal;display:inline-flex}.switch-option{border:1px solid var(--ink);background:var(--paper);min-height:1.9rem;color:var(--ink);font:inherit;cursor:pointer;padding:0 .7rem;font-size:.8rem}.switch-option:first-child{border-radius:999px 0 0 999px}.switch-option:last-child{border-radius:0 999px 999px 0;margin-left:-1px}.switch-option[aria-pressed=true]{background:var(--ink);color:var(--paper)}.visually-hidden{clip-path:inset(50%);white-space:nowrap;width:1px;height:1px;position:absolute;overflow:hidden}.operators{margin-top:.5rem}.operators[hidden],.op-algorithm[hidden]{display:none}.op-algorithm{align-items:center;gap:.6rem;margin-bottom:.25rem;font-weight:600;display:inline-flex}.op-algorithm .input{min-height:1.75rem}.input{border:1px solid var(--ink);background:var(--paper);min-height:2rem;color:var(--ink);font:inherit;border-radius:6px;padding:0 .4rem}.op-off{visibility:hidden}.op-table{border-collapse:collapse;width:100%;font-size:.8rem}.op-table th,.op-table td{text-align:left;padding:0 .2rem}.op-table thead th{border-bottom:1px solid var(--rule);font-weight:600}.op-role{font-style:italic}.op-table .op-second{border-left:1px solid var(--rule);padding-left:.4rem}.op-input{border:1px solid var(--rule);background:var(--paper);width:2.7rem;height:1.55rem;color:var(--ink);appearance:textfield;border-radius:4px;padding:0 .3rem;font-size:.85rem}.op-input::-webkit-inner-spin-button{appearance:none;margin:0}.op-input::-webkit-outer-spin-button{appearance:none;margin:0}.op-input:focus-visible{border-color:var(--ink)}@media (width>=62rem){[data-view=chapter] .lab[data-many-sliders=true] .operators{grid-column:1/-1}}
