@font-face{font-family:Plex;src:url(fonts/IBMPlexSans-Regular.ttf);font-weight:400;font-display:swap}
@font-face{font-family:Plex;src:url(fonts/IBMPlexSans-SemiBold.ttf);font-weight:600;font-display:swap}
@font-face{font-family:Plex;src:url(fonts/IBMPlexSans-Italic.ttf);font-style:italic;font-display:swap}
@font-face{font-family:Oxanium;src:url(fonts/Oxanium-Regular.ttf);font-weight:400;font-display:swap}
@font-face{font-family:Oxanium;src:url(fonts/Oxanium-SemiBold.ttf);font-weight:600;font-display:swap}
@font-face{font-family:JetBrains;src:url(fonts/JetBrainsMono-Regular.ttf);font-weight:400;font-display:swap}
@font-face{font-family:JetBrains;src:url(fonts/JetBrainsMono-Bold.ttf);font-weight:700;font-display:swap}
:root{--cream:#f5efdf;--ink:#182b49;--muted:#4b5a70;--tan:#c7aa82;--brown:#6b4e27;--chip:#e6dbc0;--code:#ece3cc;--keyword:#7a5a30;--string:#2f5e46;--comment:#55657c;color-scheme:light}
*{box-sizing:border-box}html{scroll-padding-top:100px}body{margin:0;background:var(--cream);color:var(--ink);font:19px/1.75 Plex,sans-serif}a{color:inherit;text-underline-offset:4px}a:hover{color:var(--brown)}button,summary{font:inherit;color:inherit}button,summary,a{touch-action:manipulation}a:focus-visible,summary:focus-visible,button:focus-visible,[tabindex]:focus-visible{outline:3px solid currentColor;outline-offset:5px}h1,h2,h3,h4{font-family:Oxanium,sans-serif;font-weight:600;line-height:1.2}h1{font-size:clamp(34px,5vw,52px)}h2{font-size:32px}h3{font-size:25px}p{margin:0 0 22px}strong{font-weight:600}svg{display:block}code,pre{font-family:JetBrains,monospace;font-variant-ligatures:normal}code{font-size:.85em}p code,li code,td code,blockquote code{background:var(--chip);padding:1px 6px;border-radius:3px;overflow-wrap:anywhere}h1 code,h2 code,h3 code,h4 code{background:none;padding:0;border-radius:0;font-size:.88em}pre code{font-size:inherit;background:none;padding:0;border-radius:0;overflow-wrap:normal}.sr-only{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0,0,0,0);white-space:nowrap;border:0}.skip{position:fixed;left:16px;top:-100px;z-index:50;background:var(--cream);padding:12px 20px}.skip:focus{top:12px}.wide{max-width:1120px;margin:auto;padding-left:24px;padding-right:24px}.site-header{position:sticky;top:0;z-index:10;background:var(--cream);border-bottom:1px solid #d6c9a9}.header-inner{max-width:1120px;padding:14px 24px;margin:auto;display:flex;align-items:center;justify-content:space-between;gap:12px 24px;flex-wrap:wrap}.brand{font:600 18px/1.3 Oxanium,sans-serif;letter-spacing:.08em;text-decoration:none}.header-inner nav{display:flex;gap:12px 24px;flex-wrap:wrap;align-items:center;font-size:15px}.header-inner nav>a{text-decoration:none}.reading-progress{height:3px;background:#ddd2b8}.reading-progress>div{height:3px;background:var(--ink);width:0}.contents-menu summary{border:1px solid var(--ink);border-radius:4px;padding:6px 14px;cursor:pointer;list-style:revert}.contents-panel{position:absolute;top:100%;right:0;width:min(780px,100%);max-height:80vh;overflow:auto;padding:24px;background:var(--cream);border:1px solid var(--ink);box-shadow:0 10px 28px #182b4920}.contents-panel>h2{margin:0 0 24px}.drawer-close{float:right;border:1px solid var(--ink);background:none;padding:7px 13px;cursor:pointer;font-size:14px}.contents-panel .contents-grid{grid-template-columns:repeat(2,minmax(0,1fr));gap:24px}.contents-panel li{font-size:15px}.contents-panel h3{font-size:17px}.contents-panel> a{font-size:15px}.contents-panel a{display:block}.contents-grid{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:40px 48px}.contents-grid h3{font-size:20px;border-bottom:1px solid var(--ink);padding-bottom:12px;margin:0 0 15px}.contents-grid ol{padding:0;margin:0;list-style:none}.contents-grid li{font-size:16px;line-height:1.5;margin:0 0 10px}.contents-grid a{text-decoration:none}.contents-grid a:hover{text-decoration:underline}.book-body{max-width:708px;margin:0 auto;padding:0 24px 32px;overflow-wrap:break-word}.chapter-opener{padding:76px 0 56px;display:flex;flex-direction:column;align-items:center;gap:18px;text-align:center}.chapter-opener .eyebrow{font:600 13px/1.6 Oxanium,sans-serif;letter-spacing:.2em;color:var(--brown);text-transform:uppercase;margin:0}.numeral{font:600 220px/.95 Oxanium,sans-serif;color:transparent;-webkit-text-stroke:2px var(--ink);user-select:none}.chapter-opener h1{margin:0;max-width:100%}.title-rule{width:220px;height:2px;background:var(--ink);position:relative;margin:18px 0 0}.title-rule::after{content:'';position:absolute;right:0;top:-4px;width:10px;height:10px;border-radius:50%;background:var(--tan)}.book-body h2{font-size:14px;line-height:1.5;letter-spacing:.2em;text-transform:uppercase;display:flex;align-items:center;gap:14px;margin:48px 0 25px}.book-body h2::after{content:'';height:1px;background:var(--ink);flex:1;min-width:20px}.book-body h3{margin:32px 0 20px;scroll-margin-top:110px}.book-body h4{font-size:21px;margin:24px 0 16px}.book-body hr{border:0;border-top:1px solid #d6c9a9;margin:30px 0}.book-body ul,.book-body ol{padding-left:26px}.book-body li{margin-bottom:8px}blockquote{margin:26px 0;padding:2px 0 2px 22px;border-left:3px solid var(--ink)}blockquote p:last-child{margin-bottom:0}.assistant-transcript{background:var(--code);padding:22px;border-left:3px solid var(--brown);font-size:17px}.code-block{margin:28px 0;background:var(--code);border-top:1px solid #d6c9a9;border-bottom:1px solid #d6c9a9;max-width:100%;min-width:0}.code-block figcaption{font:12px/1.4 JetBrains,monospace;text-transform:uppercase;letter-spacing:.1em;color:var(--muted);padding:12px 22px 0}.code-block pre{font-size:15.5px;line-height:1.65;overflow-x:auto;white-space:pre;padding:16px 22px 22px;margin:0;max-width:100%;tab-size:2}.tok-k,.tok-kc,.tok-kd,.tok-kn,.tok-kp,.tok-kr,.tok-kt{color:var(--keyword)}.tok-s,.tok-s1,.tok-s2,.tok-sb,.tok-sc,.tok-sd,.tok-se,.tok-sh,.tok-si,.tok-sr,.tok-ss,.tok-sx{color:var(--string)}.tok-c,.tok-c1,.tok-cm,.tok-cp,.tok-cpf,.tok-cs,.tok-ch{color:var(--comment);font-style:italic}.table-scroll{overflow-x:auto;margin:26px 0;max-width:100%}table{width:100%;border-collapse:collapse;font-size:15px;line-height:1.6}th,td{text-align:left;vertical-align:top;padding:11px 12px;border-bottom:1px solid #c6bca7}th{font-weight:600;background:var(--code)}td p{margin:0}th:first-child,td:first-child{padding-left:8px}.reading-nav,.symbol-pointer{max-width:708px;margin:auto;padding:20px 24px 64px}.previous{font-size:15px}.next-card{display:flex;flex-direction:column;gap:8px;margin-top:28px;padding:28px;background:var(--ink);color:var(--cream);text-decoration:none;border-radius:6px;font:600 28px/1.25 Oxanium,sans-serif}.next-card:hover{color:var(--cream);text-decoration:underline}.next-label{font-size:12px;letter-spacing:.15em;text-transform:uppercase}.site-footer{max-width:1120px;margin:24px auto 0;padding:40px 24px 52px;border-top:1px solid #d6c9a9;color:var(--muted);font-size:14px}.site-footer p{margin:0 0 12px}.site-footer nav{display:flex;gap:24px}.signoff{font:600 18px/1.5 Oxanium,sans-serif;color:var(--ink)}.buy,.primary{display:inline-block;text-decoration:none;font-weight:600;border-radius:4px;padding:11px 18px}.buy{background:var(--tan);color:var(--ink)}.buy:hover{color:var(--ink);text-decoration:underline}.primary{background:var(--ink);color:var(--cream)}.primary:hover{color:var(--cream);text-decoration:underline}.home .site-header,.hero,.cast-section{background:var(--ink);color:var(--cream)}.home .site-header a:hover{color:var(--cream)}.home .contents-menu summary{border-color:var(--cream)}.home .contents-panel{color:var(--ink)}.home .contents-panel a:hover{color:var(--brown)}.home .reading-progress{display:none}.hero-inner{display:flex;gap:40px;align-items:center;justify-content:space-between;padding-top:56px;padding-bottom:72px}.hero-label{font:14px/1.6 JetBrains;letter-spacing:.15em;margin-bottom:24px}.hero pre{font-size:22px;line-height:1.75;margin:0;overflow-x:auto;max-width:100%}.hero-inner>div:first-child{min-width:0}.hero-mark{width:240px;height:240px;flex-shrink:0;background:var(--tan);border-radius:50%;display:grid;place-items:center}.hero-mark svg{width:96px;height:120px}.hero-mark path{stroke:var(--ink);stroke-width:14;fill:none}.home-intro{padding-top:65px;padding-bottom:64px}.home-intro h1{font-size:clamp(64px,11vw,136px);line-height:.92;margin:0 0 26px;letter-spacing:.01em}.subtitle{font-size:32px;line-height:1.25}.author{font-size:18px;font-weight:600;letter-spacing:.14em}.home-intro .title-rule{width:min(560px,100%);margin-bottom:28px}.hook{max-width:680px;font-size:22px;font-weight:600;line-height:1.55}.team{max-width:680px;font-size:18px;line-height:1.65;color:var(--muted)}.actions{display:flex;flex-wrap:wrap;gap:12px;margin:28px 0 18px}.small{font-size:14px;color:var(--muted)}.shape{background:var(--code);padding:56px 0}.shape h2{font-size:14px;letter-spacing:.15em;text-transform:uppercase;margin:0 0 30px}.steps{display:grid;grid-template-columns:repeat(5,minmax(0,1fr));gap:22px}.steps>div{border-top:2px solid var(--ink);padding-top:15px}.step-number{font:13px/1.5 JetBrains;color:var(--brown)}.steps h3{font-size:21px;margin:12px 0}.steps p{font-size:15px;line-height:1.5;color:var(--muted)}.home-contents{padding-top:64px;padding-bottom:64px}.home-contents>h2,.cast-section h2{font-size:40px;margin:0 0 32px}.cast-section{padding:64px 0}.cast-grid{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:25px 28px;margin-top:32px}.cast-card{display:flex;align-items:center;gap:12px;text-decoration:none;color:var(--cream);font-size:16px;line-height:1.5}.cast-card:hover{color:var(--cream);text-decoration:underline}.cast-card strong,.cast-card small{display:block}.cast-card small{font-size:13px}.avatar{width:44px;height:44px;flex-shrink:0;display:grid;place-items:center;border:1.5px solid var(--tan);border-radius:50%;font:600 15px Oxanium;color:var(--cream)}.symbol-key{padding-top:52px}.symbol-key h1{font-size:40px}.symbol-key table{margin-bottom:32px;table-layout:fixed}.symbol-key td{overflow-wrap:anywhere}.symbol-key td code{background:none;padding:0;white-space:normal}.symbol-key [data-key-literal]{font-variant-ligatures:none;font-feature-settings:'liga' 0,'calt' 0,'dlig' 0}.symbol-key [data-key-glyph]{font-size:20px;white-space:nowrap;font-variant-ligatures:normal}.not-found .book-body{padding-top:70px;min-height:55vh}
@media(max-width:850px){.steps{grid-template-columns:repeat(3,minmax(0,1fr))}.hero-mark{width:180px;height:180px}.hero pre{font-size:18px}.cast-grid{grid-template-columns:repeat(2,minmax(0,1fr))}}
@media(max-width:580px){.wide,.header-inner,.book-body,.reading-nav,.symbol-pointer,.site-footer{padding-left:16px;padding-right:16px}.header-inner{gap:12px}.header-inner nav{gap:10px 16px}.hero-inner{flex-direction:column;align-items:flex-start;padding-top:40px;padding-bottom:40px;gap:28px}.hero-mark{width:100px;height:100px;align-self:flex-end}.hero-mark svg{width:40px;height:54px}.hero pre{font-size:16px}.hero-label{font-size:11px}.subtitle{font-size:25px}.hook{font-size:21px}.home-intro{padding-top:44px}.contents-grid,.contents-panel .contents-grid{grid-template-columns:1fr}.contents-panel{padding:22px 16px}.steps{grid-template-columns:repeat(2,minmax(0,1fr))}.cast-grid{grid-template-columns:1fr}.numeral{font-size:145px}.chapter-opener{padding-top:45px;padding-bottom:38px}.chapter-opener .eyebrow{font-size:11px;letter-spacing:.15em}.book-body h2{letter-spacing:.13em}.code-block pre{padding:16px;font-size:14px}.code-block figcaption{padding-left:16px}.next-card{font-size:24px;padding:24px}.table-scroll table{min-width:480px}.symbol-key table{font-size:13px}.symbol-key th,.symbol-key td{padding:10px 5px}.symbol-key [data-key-glyph]{font-size:15px}.symbol-key h1{font-size:34px}}
@media(prefers-reduced-motion:no-preference){.reading-progress>div{transition:width .1s linear}}

/* Wide examples stay centred on the 660px prose column. Phone rules are untouched. */
@media (min-width:760px) {
  .book-body .code-block,
  .book-body .table-scroll,
  .symbol-key .symbol-group > table {
    --example-width:min(880px,calc(100vw - 48px));
    width:var(--example-width);
    max-width:none;
    margin-left:calc((660px - var(--example-width)) / 2);
    margin-right:calc((660px - var(--example-width)) / 2);
  }
}

.paperback-soon{font-size:15px;font-weight:400;color:var(--muted);cursor:auto;text-decoration:none}
.actions{align-items:center}
.paperback-invitation{max-width:708px;margin:-36px auto 0;padding:0 24px 48px;text-align:center}
