*,:before,:after{box-sizing:border-box}:root{--paper:#fffdf8;--paper-deep:#f4efe6;--ink:#211b17;--muted:#665d55;--rule:#cfc3b7;--red:#7f1d1d;--red-soft:#f8e8e4;--teal:#0f766e;--code:#f1ece4;--serif:"Source Serif 4", "Iowan Old Style", "Palatino Linotype", Palatino, Georgia, serif;--mono:"JetBrains Mono", ui-monospace, SFMono-Regular, Consolas, monospace}html{scroll-behavior:smooth;background:#ded6ca;max-width:100vw;scroll-padding-top:76px;overflow-x:clip}body{max-width:100%;color:var(--ink);font-family:var(--serif);text-rendering:optimizelegibility;-webkit-font-smoothing:antialiased;background:radial-gradient(circle at 12% 8%,#7f1d1d0b,#0000 28rem),linear-gradient(90deg,#ffffff40,#0000 14% 86%,#ffffff40),#ded6ca;margin:0;font-size:17px;line-height:1.68;overflow-x:clip}.skip-link{z-index:100;color:#fff;background:var(--red);padding:10px 14px;position:fixed;top:8px;left:8px;transform:translateY(-160%)}.skip-link:focus{transform:none}a{color:var(--red);text-underline-offset:.18em}.workbook-content a{overflow-wrap:anywhere}a:hover{color:#4f1010}a:focus-visible,button:focus-visible,input:focus-visible,select:focus-visible,summary:focus-visible,audio:focus-visible{outline:3px solid var(--teal);outline-offset:3px}.book-site-header{z-index:20;border-bottom:2px solid var(--red);backdrop-filter:blur(8px);background:#fffdf8f5;justify-content:space-between;align-items:center;gap:28px;width:min(100%,980px);min-height:58px;margin:0 auto;padding:10px 24px;display:flex;position:sticky;top:0;box-shadow:0 5px 18px #2d22191f}.book-brand{color:var(--red);font:700 12px/1 var(--mono);letter-spacing:.15em;align-items:center;gap:10px;text-decoration:none;display:inline-flex}.book-brand img{filter:sepia()saturate(2.3)hue-rotate(315deg)brightness(.58)}.book-site-header nav{flex-wrap:wrap;justify-content:flex-end;gap:8px 18px;display:flex}.book-site-header nav a{min-height:24px;color:var(--muted);font:600 11px/1.3 var(--mono);align-items:center;text-decoration:none;display:inline-flex}.book-site-header nav a:hover{color:var(--red);text-decoration:underline}.book-page{background:var(--paper);width:min(100% - 32px,900px);margin:24px auto 0;padding:clamp(36px,7vw,76px) clamp(24px,8vw,84px) 90px;box-shadow:0 18px 60px #2d22192e}.book-hero{border-bottom:1px solid var(--rule);text-align:center;padding:20px 0 58px}.book-kicker{color:var(--teal);font:600 11px/1.4 var(--mono);letter-spacing:.18em;text-transform:uppercase;margin:0 0 14px}.book-hero h1{max-width:720px;color:var(--red);letter-spacing:-.035em;margin:0 auto;font-size:clamp(42px,8vw,72px);line-height:.98}.book-subtitle{color:#493f37;max-width:680px;margin:24px auto 0;font-size:clamp(18px,3vw,24px);line-height:1.42}.book-status{border:1px solid var(--rule);color:var(--muted);font:600 10px/1.3 var(--mono);letter-spacing:.1em;text-transform:uppercase;gap:10px;margin:25px auto 0;padding:7px 12px;display:inline-flex}.book-route{text-align:left;grid-template-columns:1fr 1fr;gap:14px;margin:30px 0 0;display:grid}.book-route a{border:1px solid var(--rule);background:#fbf7f0;padding:18px;text-decoration:none;display:block}.book-route small{color:var(--teal);font:600 10px/1.4 var(--mono);letter-spacing:.12em;margin-bottom:4px;display:block}.book-route strong{color:var(--red);font-size:18px;display:block}.book-route a>span{color:var(--muted);margin-top:8px;font-size:14px;line-height:1.4;display:block}.chapter-breadcrumb,.chapter-pager{color:var(--muted);font:600 12px/1.4 var(--mono);justify-content:space-between;align-items:center;gap:12px;display:flex}.chapter-breadcrumb{justify-content:flex-start;margin-bottom:34px}.chapter-breadcrumb+.workbook-content>h1:first-child{margin-top:1.8em}.chapter-pager{border-top:2px solid var(--red);margin-top:64px;padding-top:22px}.book-page>h1,.book-page article>h1{border-top:3px double var(--red);color:var(--red);letter-spacing:-.025em;margin:3.4em 0 .8em;padding-top:.4em;font-size:clamp(32px,6vw,50px);line-height:1.08}.book-page h1.unnumbered{font-size:clamp(28px,5vw,41px)}.book-page h2{color:var(--red);letter-spacing:-.015em;margin:2.7em 0 .6em;font-size:clamp(23px,4vw,30px);line-height:1.18}.book-page h3{color:#4c2924;margin:2em 0 .45em;font-size:20px;line-height:1.25}.book-page h4{color:#4c2924}.book-page p{margin:.75em 0}.book-page li+li{margin-top:.28em}.book-page ul,.book-page ol{padding-left:1.35em}.book-page hr{border:0;border-top:1px solid var(--rule);height:0;margin:3em 0}blockquote{border-left:4px solid var(--teal);color:#3f3731;margin:1.4em 0;padding:2px 0 2px 20px;font-size:1.08em;font-style:italic}figure{text-align:center;margin:1.7em auto .9em}figure img{width:auto;max-width:100%;height:auto;margin:0 auto;display:block}figcaption{max-width:680px;color:var(--muted);margin:.7em auto 0;font-size:14px;line-height:1.45}figure+p:has(>strong:first-child),figure+p+p:has(>strong:first-child){border-left:3px solid var(--teal);color:#4b504a;background:#f2f6f2;margin-top:.8em;padding:12px 15px;font-size:14px;line-height:1.55}.workbook-content p:has(>math[display=block]){max-width:100%;overflow:auto hidden}math[display=block]{width:max-content;min-width:100%;margin:1.25em auto;padding:.35em 0;font-size:1.08em;display:block}math[display=inline]{vertical-align:middle;max-width:100%;font-size:1em;display:inline-block;overflow:auto hidden}table{border-collapse:collapse;width:100%;margin:1.4em 0;font-size:15px;display:block;overflow-x:auto}th,td{border-bottom:1px solid var(--rule);text-align:left;vertical-align:top;padding:8px 12px}th{border-top:2px solid var(--red);color:var(--red);font-weight:700}tbody tr:last-child td{border-bottom:2px solid var(--red)}pre,code{font-family:var(--mono)}code{background:var(--code);border-radius:2px;padding:.08em .28em;font-size:.82em}pre{border:1px solid var(--rule);background:var(--code);max-width:100%;margin:1.3em 0;padding:16px 18px;font-size:13px;line-height:1.55;overflow:auto}pre code{font-size:inherit;background:0 0;padding:0}.listening-player{border:1px solid var(--rule);background:#faf6ef;margin:.8em 0 1.4em;padding:12px 14px}.listening-player audio{width:100%;height:42px;accent-color:var(--red);display:block}.interactive-lab{border:2px solid var(--red);background:#fbf7ef;margin:3.3em -28px;padding:clamp(22px,5vw,38px);box-shadow:9px 9px #e4dbd0}.lab-heading{margin-bottom:24px}.lab-heading h2{margin:0 0 10px}.lab-heading>p:last-child{max-width:680px;color:var(--muted)}.lab-kicker{font:600 10px/1.3 var(--mono);letter-spacing:.16em;color:var(--teal)!important;margin:0 0 7px!important}.lab-controls{grid-template-columns:repeat(2,minmax(0,1fr));gap:14px;margin:18px 0;display:grid}.lab-controls label,.harmonic-controls label{align-content:start;gap:6px;min-width:0;display:grid}.lab-controls label>span,.harmonic-controls label>span{color:#514840;font:600 11px/1.3 var(--mono);text-transform:uppercase;letter-spacing:.05em}.lab-controls output,.harmonic-controls output{color:var(--red);font:600 12px/1.3 var(--mono)}.lab-controls select{border:1px solid var(--rule);background:var(--paper);width:100%;min-height:38px;color:var(--ink);font:14px var(--serif);padding:5px 8px}input[type=range]{width:100%;max-width:100%;accent-color:var(--red)}.harmonic-controls{border:1px solid var(--rule);grid-template-columns:repeat(6,minmax(70px,1fr));gap:12px;margin:20px 0;padding:18px;display:grid}.harmonic-controls legend{color:var(--red);padding:0 8px;font-weight:600}.harmonic-controls label{min-width:0}.lab-plot{border:1px solid var(--rule);background:var(--paper);width:100%;height:auto;min-height:280px;margin:22px 0 8px;display:block}.lab-description{color:var(--muted);font-size:14px;margin-top:8px!important}.lab-actions{flex-wrap:wrap;align-items:center;gap:9px;margin:18px 0;display:flex}.lab-actions button{border:1px solid var(--red);background:var(--red);color:#fff;min-height:42px;font:600 12px/1.3 var(--mono);cursor:pointer;padding:9px 14px}.lab-actions button:hover{background:#5c1515}.lab-actions button.quiet{color:var(--red);background:0 0}.lab-actions button.quiet:hover{color:#fff;background:var(--red)}.lab-actions [role=status]{color:var(--teal);font:600 11px/1.4 var(--mono);margin-left:auto}.lab-prompts{border-left:3px solid var(--teal);background:#eef5f1;margin:22px 0;padding:16px 18px}.lab-prompts h3{margin-top:0}.source-disclosure{border-top:1px solid var(--rule);min-width:0;margin-top:22px}.source-disclosure summary{color:var(--red);font:600 13px/1.4 var(--mono);cursor:pointer;padding:15px 0}.source-disclosure pre{color:#f7efe5;background:#211d1a;max-height:520px}.heterodyne-panel{border:1px solid var(--rule);background:var(--paper);padding:4px 18px 12px}.equation-readout{color:var(--teal);font:600 13px/1.4 var(--mono);flex-wrap:wrap;gap:10px 28px;display:flex}.implementation-notebook{margin-top:5em}.implementation-heading{margin-bottom:2.2em}.implementation-heading h2{margin-top:0}.implementation-heading>p:last-child,.implementation-block>header>p:last-child{color:var(--muted)}.implementation-block{border:1px solid var(--rule);background:#fbf7ef;margin:3em -18px;padding:24px}.implementation-block>header h3{margin-top:0;font-size:24px}.implementation-output,.implementation-sources{margin-top:24px}.implementation-output>h4,.implementation-sources>h4{border-bottom:1px solid var(--rule);margin-bottom:12px;padding-bottom:7px;font-size:18px}.implementation-output audio{width:100%;accent-color:var(--red);margin-top:18px;display:block}.output-grid{grid-template-columns:repeat(2,minmax(0,1fr));gap:16px;display:grid}.output-grid figure{border:1px solid var(--rule);background:var(--paper);margin:0;padding:10px}.formula-output-grid{grid-template-columns:repeat(2,minmax(0,1fr))}.source-path{font:600 11px/1.4 var(--mono);flex-wrap:wrap;justify-content:space-between;gap:8px;display:flex}.source-path span{color:var(--teal);text-transform:uppercase}.program-output{color:#f7efe5;background:#211d1a}.theremin-control-schematic svg{border:1px solid var(--rule);background:#faf6ef;width:100%;max-width:760px;margin:0 auto;display:block}.theremin-control-schematic .schematic-wire,.theremin-control-schematic .schematic-loop{fill:none;stroke:var(--red);stroke-width:7px}.theremin-control-schematic .schematic-hand{fill:#d9c1ae;stroke:#6a4634;stroke-width:2px}.theremin-control-schematic .schematic-arrow{fill:none;stroke:var(--teal);stroke-width:3px;marker-end:none}.theremin-control-schematic text{fill:var(--ink);font:600 13px var(--mono)}#refs{border-top:3px double var(--red);margin-top:4em;padding-top:1em}.csl-entry{text-indent:-1.5em;margin:0 0 1em 1.5em;font-size:14px}.book-site-footer{border-top:2px solid var(--red);color:#f7efe5;text-align:center;background:#3d1717;width:min(100% - 32px,900px);margin:0 auto 36px;padding:26px 32px;font-size:14px}.book-site-footer p{margin:4px 0}.book-site-footer a{color:#f5d7c8}@media (width<=760px){body{font-size:16px}.book-site-header{flex-direction:column;align-items:flex-start;gap:10px;position:static}.book-site-header nav{justify-content:flex-start}.book-page{width:100%;box-shadow:none;margin:0;padding:32px 18px 64px}.book-route,.lab-controls{grid-template-columns:1fr}.interactive-lab{margin-left:-7px;margin-right:-7px;box-shadow:5px 5px #e4dbd0}.implementation-block{margin-left:-7px;margin-right:-7px;padding:18px}.output-grid,.formula-output-grid{grid-template-columns:1fr}.harmonic-controls{grid-template-columns:repeat(3,minmax(70px,1fr))}.lab-actions [role=status]{width:100%;margin-left:0}.lab-plot{min-height:240px}}@media (width<=420px){.harmonic-controls{grid-template-columns:repeat(2,minmax(70px,1fr))}.book-site-header nav{gap:8px 12px}}@media (prefers-reduced-motion:reduce){html{scroll-behavior:auto}}@media print{html,body{background:#fff}.book-site-header,.book-site-footer,.lab-actions,.skip-link{display:none}.book-page{width:100%;max-width:none;box-shadow:none;margin:0;padding:0}.interactive-lab,.implementation-block{break-inside:avoid;box-shadow:none}a{color:var(--red)}}.contents-hero progress{width:min(100%,520px);height:10px;accent-color:var(--teal)}.part-jump ul{border-top:1px solid var(--rule);flex-wrap:wrap;gap:10px 22px;margin:28px 0 0;padding:18px 0 0;list-style:none;display:flex}.part-jump a{font:600 13px var(--mono);text-transform:uppercase;letter-spacing:.05em}.book-contents{padding:18px clamp(24px,7vw,90px) 68px}.book-contents section{margin-top:48px;scroll-margin-top:20px}.book-contents section>header{border-bottom:2px solid var(--dark-red);grid-template-columns:1fr auto;padding-bottom:12px;display:grid}.book-contents section>header p{font:600 12px var(--mono);color:var(--teal);text-transform:uppercase;grid-column:1/-1;margin:0 0 5px}.book-contents section>header h2{margin:0;font-size:clamp(26px,3vw,38px)}.book-contents section>header small{font:12px var(--mono);align-self:end}.book-contents ol{margin:0;padding:0;list-style:none}.book-contents li{border-bottom:1px solid var(--rule);grid-template-columns:150px 1fr;gap:2px 24px;padding:18px 0;display:grid}.book-contents li h3{margin:0;font-size:22px}.book-contents li p{grid-column:2;margin:3px 0 0}.chapter-folio{font:600 11px var(--mono);color:var(--teal);text-transform:uppercase}.book-contents li:not(.published) h3{color:var(--ink)}.using-textbook{border-top:8px solid var(--paper-edge)}@media (width<=760px){.book-contents{padding-inline:20px}.book-contents section>header{display:block}.book-contents section>header small{margin-top:8px;display:block}.book-contents li{display:block}.book-contents li h3,.book-contents li p{margin-top:5px}.part-jump ul{gap:8px 16px}}
