@font-face{font-family:barlow;font-style:normal;font-weight:400;font-display:swap;src:url(/fonts/barlow-400.woff2)format("woff2");unicode-range:U+??,U+131,U+152-153,U+2BB-2BC,U+2C6,U+2DA,U+2DC,U+304,U+308,U+329,U+2000-206F,U+20AC,U+2122,U+2191,U+2193,U+2212,U+2215,U+FEFF,U+FFFD}@font-face{font-family:barlow;font-style:normal;font-weight:600;font-display:swap;src:url(/fonts/barlow-600.woff2)format("woff2");unicode-range:U+??,U+131,U+152-153,U+2BB-2BC,U+2C6,U+2DA,U+2DC,U+304,U+308,U+329,U+2000-206F,U+20AC,U+2122,U+2191,U+2193,U+2212,U+2215,U+FEFF,U+FFFD}@font-face{font-family:barlow;font-style:normal;font-weight:700;font-display:swap;src:url(/fonts/barlow-700.woff2)format("woff2");unicode-range:U+??,U+131,U+152-153,U+2BB-2BC,U+2C6,U+2DA,U+2DC,U+304,U+308,U+329,U+2000-206F,U+20AC,U+2122,U+2191,U+2193,U+2212,U+2215,U+FEFF,U+FFFD}@font-face{font-family:barlow;font-style:normal;font-weight:800;font-display:swap;src:url(/fonts/barlow-800.woff2)format("woff2");unicode-range:U+??,U+131,U+152-153,U+2BB-2BC,U+2C6,U+2DA,U+2DC,U+304,U+308,U+329,U+2000-206F,U+20AC,U+2122,U+2191,U+2193,U+2212,U+2215,U+FEFF,U+FFFD}@font-face{font-family:hanken grotesk;font-style:normal;font-weight:400;font-display:swap;src:url(/fonts/hanken-grotesk-400.woff2)format("woff2");unicode-range:U+??,U+131,U+152-153,U+2BB-2BC,U+2C6,U+2DA,U+2DC,U+304,U+308,U+329,U+2000-206F,U+20AC,U+2122,U+2191,U+2193,U+2212,U+2215,U+FEFF,U+FFFD}@font-face{font-family:hanken grotesk;font-style:italic;font-weight:400;font-display:swap;src:url(/fonts/hanken-grotesk-400-italic.woff2)format("woff2");unicode-range:U+??,U+131,U+152-153,U+2BB-2BC,U+2C6,U+2DA,U+2DC,U+304,U+308,U+329,U+2000-206F,U+20AC,U+2122,U+2191,U+2193,U+2212,U+2215,U+FEFF,U+FFFD}@font-face{font-family:hanken grotesk;font-style:normal;font-weight:500;font-display:swap;src:url(/fonts/hanken-grotesk-500.woff2)format("woff2");unicode-range:U+??,U+131,U+152-153,U+2BB-2BC,U+2C6,U+2DA,U+2DC,U+304,U+308,U+329,U+2000-206F,U+20AC,U+2122,U+2191,U+2193,U+2212,U+2215,U+FEFF,U+FFFD}@font-face{font-family:hanken grotesk;font-style:normal;font-weight:600;font-display:swap;src:url(/fonts/hanken-grotesk-600.woff2)format("woff2");unicode-range:U+??,U+131,U+152-153,U+2BB-2BC,U+2C6,U+2DA,U+2DC,U+304,U+308,U+329,U+2000-206F,U+20AC,U+2122,U+2191,U+2193,U+2212,U+2215,U+FEFF,U+FFFD}@font-face{font-family:geist mono;font-style:normal;font-weight:400;font-display:swap;src:url(/fonts/geist-mono-400.woff2)format("woff2");unicode-range:U+??,U+131,U+152-153,U+2BB-2BC,U+2C6,U+2DA,U+2DC,U+304,U+308,U+329,U+2000-206F,U+20AC,U+2122,U+2191,U+2193,U+2212,U+2215,U+FEFF,U+FFFD}@font-face{font-family:geist mono;font-style:normal;font-weight:500;font-display:swap;src:url(/fonts/geist-mono-500.woff2)format("woff2");unicode-range:U+??,U+131,U+152-153,U+2BB-2BC,U+2C6,U+2DA,U+2DC,U+304,U+308,U+329,U+2000-206F,U+20AC,U+2122,U+2191,U+2193,U+2212,U+2215,U+FEFF,U+FFFD}:root{--paper:#faf9f5;--paper-soft:#f1efe8;--card:#ffffff;--navy:#13202f;--navy-soft:#1c2d40;--ink:#1b2531;--ink-soft:#5d6673;--copper:#c2702e;--copper-bright:#e08a4e;--copper-soft:#f6e8da;--hairline:#e6e2d9;--display:"Barlow", sans-serif;--body:"Hanken Grotesk", sans-serif;--mono:"Geist Mono", monospace}*{margin:0;padding:0;box-sizing:border-box}html{font-size:17px;scroll-behavior:smooth}body{background:var(--paper);color:var(--ink);font-family:var(--body);line-height:1.65;background-image:radial-gradient(circle at 50% -20%,#fffefc 0%,var(--paper) 55%);min-height:100vh;display:flex;flex-direction:column}body>main{flex:1}a{color:inherit}img{max-width:100%}.frame{max-width:960px;margin:0 auto;padding:0 1.6rem}.prose-frame{max-width:740px;margin:0 auto;padding:0 1.6rem}body.searching .feature,body.searching .books-strip{display:none}@keyframes fadeUp{from{opacity:0;transform:translateY(14px)}to{opacity:1;transform:none}}@keyframes blink{50%{opacity:0}}header.top{position:sticky;top:0;z-index:20;background:rgba(250,247,241,.9);backdrop-filter:blur(8px);border-bottom:1px solid var(--hairline)}.top-inner{display:flex;align-items:center;justify-content:space-between;padding-block:1.05rem;gap:1rem;flex-wrap:wrap}.wordmark{font-family:var(--display);font-weight:700;font-size:1.12rem;letter-spacing:-.02em;text-decoration:none;display:flex;align-items:center;gap:.6rem}.wordmark::before{content:"";width:12px;height:12px;background:var(--copper);border-radius:3px;transform:rotate(45deg)}nav.primary{display:flex;gap:.9rem 1.5rem;flex-wrap:wrap}nav.primary a{font-weight:500;font-size:.9rem;color:var(--ink-soft);text-decoration:none;padding-bottom:2px;border-bottom:2px solid transparent;transition:color .15s ease,border-color .15s ease}nav.primary a:hover{color:var(--ink)}nav.primary a.active{color:var(--ink);border-bottom-color:var(--copper)}.progress{position:fixed;top:0;left:0;height:3px;background:var(--copper);width:0;z-index:30;transition:width .1s linear}.hero{padding-block:4.2rem 2.6rem}.hero .kicker{font-family:var(--mono);font-size:.72rem;letter-spacing:.18em;text-transform:uppercase;color:var(--copper);animation:fadeUp .6s ease both}.hero h1{margin-top:1.1rem;font-family:var(--display);font-weight:800;font-size:clamp(2.2rem,5.2vw,3.4rem);line-height:1.08;letter-spacing:-.035em;color:var(--navy);max-width:19ch;animation:fadeUp .6s .1s ease both}.hero h1 em{font-style:normal;color:var(--copper)}.hero p.standfirst{margin-top:1.4rem;max-width:54ch;font-size:1.08rem;color:var(--ink-soft);animation:fadeUp .6s .2s ease both}.hero p.standfirst a{color:var(--ink);font-weight:500;text-decoration-color:var(--copper);text-decoration-thickness:1.5px;text-underline-offset:3px}.hero p.standfirst a:hover{color:var(--copper)}.search-wrap{padding-block:0 .6rem;animation:fadeUp .6s .4s ease both}.search-box{display:flex;align-items:center;gap:.65rem;background:var(--card);border:1px solid var(--hairline);border-radius:14px;padding:1rem 1.3rem;box-shadow:0 1px 2px rgba(19,32,47,4%),0 8px 24px -18px rgba(19,32,47,.25);transition:border-color .15s ease,box-shadow .15s ease;cursor:text}.search-box:focus-within{border-color:var(--copper);box-shadow:0 0 0 3px var(--copper-soft),0 8px 24px -18px rgba(19,32,47,.25)}.search-box .chevron{font-family:var(--mono);color:var(--copper);font-weight:500;font-size:1rem}.search-box .block-cursor{width:.58em;height:1.2em;flex-shrink:0;background:var(--copper);animation:blink 1.1s steps(1)infinite}.search-box:focus-within .block-cursor,.search-box.has-value .block-cursor{display:none}.search-box input{flex:1;border:none;background:0 0;outline:none;font-family:var(--mono);font-size:.95rem;color:var(--ink);caret-color:var(--copper)}.search-box input::placeholder{color:#b3aca0}.search-hint{margin-top:.6rem;font-family:var(--mono);font-size:.7rem;color:var(--ink-soft);padding-left:.4rem;min-height:1.2em}.search-hint b{color:var(--copper);font-weight:500}.no-results{display:none;padding:2.5rem .6rem;font-family:var(--mono);font-size:.85rem;color:var(--ink-soft)}.no-results b{color:var(--copper);font-weight:500}#search-results mark{background:var(--copper-soft);color:var(--copper);font-weight:500;border-radius:2px;padding:0 1px}.feature{padding-block:2.2rem}.feature-card{position:relative;display:grid;grid-template-columns:1fr auto;gap:2.5rem;align-items:center;background:linear-gradient(115deg,var(--navy) 0%,var(--navy-soft) 70%,#27405a 100%);color:#f0ece5;border-radius:20px;padding:2.4rem 2.8rem;overflow:hidden;box-shadow:0 24px 50px -30px rgba(19,32,47,.6)}.feature-card::before{content:"";position:absolute;inset:0;pointer-events:none;background:radial-gradient(ellipse 70% 110% at 85% 10%,rgba(224,138,78,.18),transparent 60%)}.feature-card .badge{position:absolute;top:1.4rem;left:2.8rem;font-family:var(--mono);font-size:.64rem;letter-spacing:.16em;text-transform:uppercase;background:var(--copper);color:#fff;border-radius:99px;padding:.3rem .9rem;transform:rotate(-1.5deg)}.feature-card h2{margin-top:1.6rem;font-family:var(--display);font-weight:800;font-size:clamp(1.5rem,3.4vw,2.2rem);line-height:1.12;letter-spacing:-.025em;max-width:16ch}.feature-card p.sub{margin-top:.8rem;font-size:.98rem;color:#b8c2cd;max-width:46ch}.feature-card p.sub b{color:var(--copper-bright);font-weight:600}.feature-card .cta-row{margin-top:1.5rem;display:flex;gap:.8rem;flex-wrap:wrap}.feature-card .cta{font-family:var(--display);font-weight:700;font-size:.88rem;text-decoration:none;background:var(--copper);color:#fff;border-radius:10px;padding:.65rem 1.4rem;transition:all .15s ease}.feature-card .cta:hover{background:var(--copper-bright);transform:translateY(-2px)}.feature-card .cta.ghost{background:0 0;color:#d8dee5;border:1px solid rgba(216,222,229,.35)}.feature-card .cta.ghost:hover{border-color:var(--copper-bright);color:var(--copper-bright);background:0 0}.feature-card .cover{position:relative;z-index:1}.feature-card .cover img{width:190px;display:block;border-radius:8px;box-shadow:0 20px 40px -16px rgba(0,0,0,.7);transform:rotate(2deg);transition:transform .25s ease}.feature-card .cover:hover img{transform:rotate(0)scale(1.03)}.books-strip{padding-block:.4rem 1.6rem;display:grid;grid-template-columns:1fr 1fr;gap:1.3rem}.book-card{display:flex;gap:1.2rem;align-items:center;background:var(--card);border:1px solid var(--hairline);border-radius:14px;padding:1.2rem 1.4rem;text-decoration:none;transition:all .18s ease}.book-card:hover{border-color:var(--copper);transform:translateY(-3px);box-shadow:0 14px 30px -20px rgba(194,112,46,.5)}.book-card img{width:66px;flex-shrink:0;filter:drop-shadow(0 6px 12px rgba(19,32,47,.2))}.book-card h3{font-family:var(--display);font-weight:700;font-size:1rem;letter-spacing:-.01em;color:var(--navy)}.book-card p{font-size:.85rem;color:var(--ink-soft);margin-top:.25rem}.posts{padding-block:1.6rem 4.5rem}.section-head{display:flex;align-items:baseline;justify-content:space-between;gap:1rem;margin-bottom:1.2rem}.section-head h1,.section-head h2{font-family:var(--display);font-weight:800;font-size:1.55rem;letter-spacing:-.025em;color:var(--navy)}.section-head .count{font-family:var(--mono);font-size:.74rem;color:var(--ink-soft)}.post-list{list-style:none}.post-list li{border-bottom:1px solid var(--hairline)}.post-list li.hidden{display:none}.post-list a{display:grid;grid-template-columns:7.2rem 1fr auto;gap:1.4rem;align-items:baseline;padding:1.45rem .6rem;text-decoration:none;border-radius:12px;transition:background .15s ease}.post-list a:hover{background:var(--card)}.post-list .date{font-family:var(--mono);font-size:.74rem;color:var(--ink-soft);white-space:nowrap}.post-list .title{font-family:var(--display);font-weight:700;font-size:1.15rem;line-height:1.3;letter-spacing:-.02em;color:var(--navy);transition:color .15s ease}.post-list a:hover .title{color:var(--copper)}.post-list .summary{grid-column:2;color:var(--ink-soft);font-size:.94rem;max-width:62ch;margin-top:.15rem}.post-list .tags{display:flex;flex-wrap:wrap;gap:.4rem}.post-list .tags span{font-family:var(--mono);font-size:.66rem;color:var(--ink-soft);background:var(--paper-soft);border-radius:99px;padding:.14rem .6rem;white-space:nowrap}.post-list a:hover .tags span{background:var(--copper-soft);color:var(--copper)}.all-posts{margin-top:1.8rem}.all-posts a{font-family:var(--mono);font-size:.78rem;color:var(--copper);text-decoration:none}.all-posts a:hover{text-decoration:underline;text-underline-offset:3px}.article-head{padding-block:3.8rem 0}.breadcrumb{font-family:var(--mono);font-size:.72rem;color:var(--ink-soft);animation:fadeUp .5s ease both}.breadcrumb .chevron{color:var(--copper)}.breadcrumb a{color:inherit;text-decoration:none}.breadcrumb a:hover{color:var(--copper);text-decoration:underline;text-underline-offset:3px}.article-head h1{margin-top:1.1rem;font-family:var(--display);font-weight:800;font-size:clamp(1.9rem,4.6vw,2.9rem);line-height:1.1;letter-spacing:-.03em;color:var(--navy);max-width:22ch;animation:fadeUp .5s .08s ease both}.meta-row{margin-top:1.3rem;display:flex;align-items:center;gap:1.2rem;flex-wrap:wrap;animation:fadeUp .5s .16s ease both}.meta-row .date{font-family:var(--mono);font-size:.76rem;color:var(--ink-soft)}.meta-row .tags{display:flex;gap:.45rem;flex-wrap:wrap}.meta-row .tags a{font-family:var(--mono);font-size:.68rem;text-decoration:none;color:var(--copper);background:var(--copper-soft);border-radius:99px;padding:.2rem .7rem;transition:all .15s ease}.meta-row .tags a:hover{background:var(--copper);color:#fff}.book-ad{margin:2.4rem 0 0;position:relative;background:linear-gradient(115deg,var(--navy) 0%,var(--navy-soft) 75%,#27405a 100%);color:#e8e4dc;border-radius:16px;box-shadow:0 20px 44px -28px rgba(19,32,47,.65);padding:1.6rem 1.8rem;display:flex;gap:1.6rem;align-items:center;overflow:visible;animation:fadeUp .5s .24s ease both}.book-ad::before{content:"";position:absolute;inset:0;border-radius:16px;pointer-events:none;background:radial-gradient(ellipse 70% 120% at 85% 0%,rgba(224,138,78,.16),transparent 60%)}.book-ad .badge{position:absolute;top:-.85rem;left:1.5rem;font-family:var(--mono);font-size:.64rem;letter-spacing:.14em;text-transform:uppercase;background:var(--copper);color:#fff;border-radius:99px;padding:.3rem .9rem;transform:rotate(-1.5deg);box-shadow:0 4px 10px -4px rgba(194,112,46,.6)}.book-ad img{width:92px;flex-shrink:0;border-radius:5px;box-shadow:0 14px 28px -10px rgba(0,0,0,.7);transition:transform .25s ease;position:relative;z-index:1}.book-ad:hover img{transform:translateY(-4px)rotate(-2deg)}.book-ad.course-ad img{background:#fff;padding:.5rem}.book-ad .copy{position:relative;z-index:1}.book-ad .copy h3{font-family:var(--display);font-weight:700;font-size:1.12rem;letter-spacing:-.01em;color:#fff}.book-ad .copy p{margin-top:.3rem;font-size:.9rem;color:#b8c2cd;max-width:52ch}.book-ad .copy p b{color:var(--copper-bright);font-weight:600}.book-ad .copy a.cta{display:inline-block;margin-top:.75rem;font-family:var(--display);font-weight:700;font-size:.82rem;text-decoration:none;background:var(--copper);color:#fff;border-radius:9px;padding:.5rem 1.2rem;transition:all .15s ease}.book-ad .copy a.cta:hover{background:var(--copper-bright);transform:translateY(-1px)}article.prose{padding-block:2.8rem 1rem;font-size:1.05rem}article.prose>*+*{margin-top:1.35rem}article.prose p a,article.prose li a{font-weight:500;text-decoration-color:var(--copper);text-decoration-thickness:1.5px;text-underline-offset:3px}article.prose p a:hover,article.prose li a:hover{color:var(--copper)}article.prose h2{font-family:var(--display);font-weight:800;font-size:1.45rem;letter-spacing:-.025em;line-height:1.2;color:var(--navy);margin-top:2.7rem;scroll-margin-top:5rem;position:relative}article.prose h3{font-family:var(--display);font-weight:700;font-size:1.15rem;letter-spacing:-.02em;line-height:1.25;color:var(--navy);margin-top:2rem;scroll-margin-top:5rem}article.prose h4{font-family:var(--display);font-weight:700;font-size:1rem;color:var(--navy);margin-top:1.6rem;scroll-margin-top:5rem}article.prose h2 a.anchor{position:absolute;left:-1.6rem;top:0;width:1.6rem;height:100%;display:flex;align-items:center;font-size:0;text-decoration:none;opacity:0;transition:opacity .15s ease}article.prose h2 a.anchor::before{content:"";width:10px;height:10px;background:var(--copper);border-radius:2px;transform:rotate(45deg);transition:background .15s ease,box-shadow .15s ease,transform .15s ease}article.prose h2:hover a.anchor{opacity:1}article.prose h2 a.anchor:hover::before{background:var(--copper-bright);transform:rotate(45deg)scale(1.2);box-shadow:0 0 0 4px var(--copper-soft)}article.prose h3 a.anchor,article.prose h4 a.anchor,article.prose h5 a.anchor,article.prose h6 a.anchor{display:none}article.prose code{font-family:var(--mono);font-size:.84em;background:var(--paper-soft);border:1px solid var(--hairline);border-radius:6px;padding:.08em .35em;overflow-wrap:anywhere;color:#9a5a24}article.prose ul,article.prose ol{padding-left:1.4rem}article.prose li+li{margin-top:.4rem}article.prose .sectionbody>*+*,article.prose #preamble>.sectionbody>*+*,article.prose .sect2>*+*,article.prose .sect3>*+*,article.prose .sect4>*+*,article.prose .content>*+*{margin-top:1.35rem}article.prose .sect1+.sect1,article.prose .sect2+.sect2{margin-top:0}article.prose #preamble>.sectionbody>.paragraph:first-of-type p{font-size:1.13rem;line-height:1.6}.listingblock,.literalblock{border:1px solid var(--hairline);border-radius:14px;background:#fdfdfb;box-shadow:0 14px 34px -28px rgba(19,32,47,.4);overflow:hidden;border-top:3px solid var(--navy)}article.prose .sectionbody>*+.listingblock,article.prose .content>*+.listingblock,article.prose .sectionbody>*+.literalblock,article.prose .content>*+.literalblock,article.prose .sect2>*+.listingblock,article.prose .sect3>*+.listingblock,article.prose .sect4>*+.listingblock,article.prose .sect2>*+.literalblock,article.prose .sect3>*+.literalblock,article.prose .sect4>*+.literalblock,article.prose>*+.listingblock,article.prose>*+.literalblock{margin-top:1.5rem}.listingblock>.title{display:flex;justify-content:space-between;align-items:center;background:var(--navy-soft);padding:.55rem 1.2rem;font-family:var(--mono);font-size:.68rem;color:#c9d2dc;font-style:normal}.listingblock pre,.literalblock pre{padding:1.25rem 1.4rem;overflow-x:auto;font-family:var(--mono);font-size:.85rem;line-height:1.7;color:var(--ink);background:0 0}.listingblock pre code,.literalblock pre code{background:0 0;border:none;padding:0;color:inherit;font-size:1em;font-family:var(--mono)}.conum[data-value]{display:inline-block;color:#fff!important;background:var(--copper);border-radius:100px;text-align:center;font-size:.75em;width:1.67em;height:1.67em;line-height:1.67em;font-family:var(--body);font-style:normal;font-weight:600}.conum[data-value] *{color:#fff!important}.conum[data-value]+b{display:none}.conum[data-value]::after{content:attr(data-value)}pre .conum[data-value]{position:relative;top:-.125em}b.conum *{color:inherit!important}.conum:not([data-value]):empty{display:none}.colist td:not([class]):first-child{padding:.4em .75em 0;line-height:1;vertical-align:top}.colist td:not([class]):first-child img{max-width:none}.colist td:not([class]):last-child{padding:.25em 0}table.linenotable td.code{padding-left:.75em}table.linenotable td.linenos{border-right:1px solid var(--hairline);opacity:.4;padding-right:.5em}article.prose blockquote,.quoteblock blockquote{border-left:3px solid var(--copper);background:var(--copper-soft);border-radius:0 12px 12px 0;padding:1rem 1.4rem;color:#6e4521;font-style:italic}.quoteblock blockquote .paragraph p{margin:0}.quoteblock .attribution{margin-top:.5rem;font-size:.85rem;color:var(--ink-soft);font-style:normal}.admonitionblock>table{border-collapse:separate;border:0;background:0 0;width:100%;table-layout:fixed}.admonitionblock{background:#eef1f5;border-radius:12px;padding:.9rem 1.1rem}.admonitionblock.tip{background:var(--copper-soft)}.admonitionblock.warning,.admonitionblock.caution,.admonitionblock.important{background:#f9ebe9}.admonitionblock>table td.icon{text-align:left;width:92px;vertical-align:top;padding-top:.2rem}.admonitionblock>table td.icon img{max-width:none}.admonitionblock>table td.icon i{font-style:normal}.admonitionblock>table td.icon i::after{content:attr(title);display:inline-block;font-family:var(--mono);font-size:.6rem;letter-spacing:.1em;text-transform:uppercase;background:var(--navy);color:#fff;border-radius:99px;padding:.18rem .6rem}.admonitionblock.tip>table td.icon i::after{background:var(--copper)}.admonitionblock.warning>table td.icon i::after,.admonitionblock.caution>table td.icon i::after,.admonitionblock.important>table td.icon i::after{background:#b3261e}.admonitionblock>table td.content{padding-left:1.1em;padding-right:.5em;border-left:1px solid rgba(19,32,47,.12);color:var(--ink-soft);font-size:.95rem}.admonitionblock.tip>table td.content{border-left-color:rgba(194,112,46,.25);color:#5d564c}.admonitionblock.warning>table td.content,.admonitionblock.caution>table td.content,.admonitionblock.important>table td.content{border-left-color:rgba(179,38,30,.18)}.admonitionblock>table td.content>:last-child>:last-child{margin-bottom:0}@media(max-width:480px){.admonitionblock>table,.admonitionblock>table>tbody,.admonitionblock>table>tbody>tr,.admonitionblock>table td.icon,.admonitionblock>table td.content{display:block;width:100%}.admonitionblock>table td.content{border-left:0;padding-left:0;padding-right:0;margin-top:.6rem}}table{border-collapse:collapse;border-spacing:0}.colist table td,.admonitionblock table td{border:0}p.tableblock{margin-block-start:0;margin-block-end:0}table.tableblock{width:100%;font-size:.95rem;display:block;overflow-x:auto}table.tableblock th,table.tableblock td{border:1px solid var(--hairline);padding:.5rem .8rem;text-align:left}table.tableblock thead th{font-family:var(--display);font-weight:700;font-size:.85rem;background:var(--paper-soft);color:var(--navy)}table.tableblock.fit-content>caption.title{white-space:nowrap;width:0}.admonitionblock td.content>.title,.audioblock>.title,.exampleblock>.title,.imageblock>.title,.literalblock>.title,.stemblock>.title,.openblock>.title,.paragraph>.title,.quoteblock>.title,table.tableblock>.title,.verseblock>.title,.videoblock>.title,.dlist>.title,.olist>.title,.ulist>.title,.qlist>.title,.hdlist>.title{text-rendering:optimizeLegibility;text-align:left;font-family:var(--body);font-size:.85rem;font-style:italic;color:var(--ink-soft);margin-top:.4rem}.imageblock{text-align:center}.imageblock img{border-radius:10px}.image-border>div>img,.imageblock.image-border img{box-shadow:0 10px 30px -18px rgba(19,32,47,.5);border:1px solid var(--hairline)}img.align-left,.imageblock.text-left>div>img{margin:10px auto 10px 10px}#toc{background:var(--card);border:1px solid var(--hairline);border-radius:14px;padding:1.1rem 1.4rem;font-size:.92rem}#toctitle{font-family:var(--mono);font-size:.68rem;letter-spacing:.14em;text-transform:uppercase;color:var(--copper);font-style:normal;margin-bottom:.5rem;display:block}.toc ul{list-style:none;padding-left:0}.toc ul ul{padding-left:1.1rem}.toc ul li{margin:.25rem 0}.toc a{text-decoration:none;color:var(--ink-soft)}.toc a:hover{color:var(--copper)}.pagination{margin-top:3.5rem;display:grid;grid-template-columns:1fr 1fr;gap:1.1rem}.pagination a{background:var(--card);border:1px solid var(--hairline);border-radius:14px;padding:1.15rem 1.3rem;text-decoration:none;display:flex;flex-direction:column;gap:.35rem;transition:all .18s ease}.pagination a:hover{border-color:var(--copper);transform:translateY(-3px);box-shadow:0 14px 30px -22px rgba(194,112,46,.55)}.pagination a.next{text-align:right}.pagination .dir{font-family:var(--mono);font-size:.66rem;letter-spacing:.12em;text-transform:uppercase;color:var(--copper)}.pagination .title{font-family:var(--display);font-weight:700;font-size:.95rem;line-height:1.3;letter-spacing:-.015em;color:var(--navy)}.paginator{margin:2.5rem 0 0;display:flex;justify-content:center;gap:.5rem;flex-wrap:wrap;font-family:var(--mono);font-size:.8rem}.paginator[hidden]{display:none}.paginator a,.paginator span{border:1px solid var(--hairline);border-radius:9px;padding:.4rem .85rem;text-decoration:none;color:var(--ink-soft);background:var(--card)}.paginator a:hover{border-color:var(--copper);color:var(--copper)}.paginator .current{background:var(--copper);border-color:var(--copper);color:#fff}.tag-cloud{display:flex;flex-wrap:wrap;gap:.6rem;padding-block:.4rem 2rem}.tag-cloud a{font-family:var(--mono);font-size:.78rem;text-decoration:none;color:var(--ink-soft);background:var(--card);border:1px solid var(--hairline);border-radius:99px;padding:.3rem .9rem;transition:all .15s ease}.tag-cloud a:hover{border-color:var(--copper);color:var(--copper);background:var(--copper-soft)}.tag-cloud a .count{color:var(--copper);margin-left:.45rem}.newsletter{margin:3rem 0 4rem;background:var(--card);border:1px solid var(--hairline);border-radius:16px;box-shadow:0 1px 2px rgba(19,32,47,4%),0 16px 40px -30px rgba(19,32,47,.3);padding:2.2rem;text-align:center;position:relative}.newsletter .badge{position:absolute;top:-.85rem;left:50%;transform:translateX(-50%)rotate(-1deg);font-family:var(--mono);font-size:.64rem;letter-spacing:.14em;text-transform:uppercase;background:var(--copper);color:#fff;border-radius:99px;padding:.3rem .9rem;white-space:nowrap}.newsletter h3{font-family:var(--display);font-weight:800;font-size:1.4rem;letter-spacing:-.025em;color:var(--navy)}.newsletter p{margin-top:.5rem;color:var(--ink-soft);font-size:.94rem}.newsletter form{margin-top:1.4rem;display:flex;gap:.6rem;justify-content:center;flex-wrap:wrap}.newsletter input[type=email]{font-family:var(--mono);font-size:.88rem;border:1px solid var(--hairline);border-radius:10px;padding:.7rem 1.1rem;width:min(300px,100%);background:var(--paper);color:var(--ink)}.newsletter input[type=email]:focus{outline:none;border-color:var(--copper);box-shadow:0 0 0 3px var(--copper-soft)}.newsletter button,.newsletter input[type=submit]{font-family:var(--display);font-weight:700;font-size:.9rem;background:var(--copper);color:#fff;border:none;border-radius:10px;padding:.7rem 1.5rem;cursor:pointer;transition:all .15s ease}.newsletter button:hover,.newsletter input[type=submit]:hover{background:var(--copper-bright);transform:translateY(-1px)}.newsletter .small-note{font-size:.72rem;margin-top:.8rem;font-style:italic;color:var(--ink-soft)}footer.site-footer{background:var(--navy);color:#aeb9c5;margin-top:4rem}.footer-inner{padding-block:2.4rem 2.8rem;display:flex;justify-content:space-between;gap:1.4rem;flex-wrap:wrap;align-items:center;font-size:.88rem}.footer-inner .sig{font-family:var(--display);font-weight:700;color:#f0ece5}.footer-inner .sig span{color:var(--copper-bright)}.footer-inner .links{display:flex;flex-wrap:wrap;gap:1.3rem;font-family:var(--mono);font-size:.72rem}.footer-inner .links a{text-decoration:none}.footer-inner .links a:hover{color:var(--copper-bright)}.page-content{padding-block:2.5rem 4rem}.page-content h1{font-family:var(--display);font-weight:800;font-size:clamp(1.9rem,4.6vw,2.6rem);letter-spacing:-.03em;line-height:1.12;color:var(--navy)}.page-content h2{font-family:var(--display);font-weight:800;font-size:1.45rem;letter-spacing:-.025em;color:var(--navy);margin-top:2.4rem}.page-content h3{font-family:var(--display);font-weight:700;font-size:1.1rem;color:var(--navy);margin-top:1.6rem}.page-content p{margin-top:1rem}.page-content a{font-weight:500;text-decoration-color:var(--copper);text-decoration-thickness:1.5px;text-underline-offset:3px}.page-content a:hover{color:var(--copper)}.page-content ul,.page-content ol{padding-left:1.4rem;margin-top:1rem}.row{display:flex;align-items:center;flex-wrap:wrap}.row>div:nth-child(3){margin-left:auto}.header-image-container{padding-right:20px}.header-image{width:150px;height:150px;object-fit:cover;border-radius:50%}.pull-right{margin-left:auto}.fill{flex:1}img.book-cover{max-height:400px;display:inline}#rest-api-book-image-parent{display:flex;justify-content:flex-start}@media(max-width:767px){#rest-api-book-image-parent{flex-direction:column}}#rest-api-book-image-parent>img{margin:10px 1em;width:306px}.book-tagline{font-style:italic;margin-top:.4rem;font-size:1.1rem;color:var(--ink-soft)}.buy-book-links{display:flex;column-gap:1em}.small-note{font-size:.7em;margin-top:5px;font-style:italic}@media only screen and (min-width:768px){.books-overview-grid{display:grid;column-gap:2rem;grid-template-columns:[colum-left] 1fr [column-right] 1fr;grid-template-rows:auto auto auto auto auto;margin-bottom:5rem}.books-overview-grid>div{display:grid;grid-row:1/5;grid-template-rows:subgrid [title] [content] [image] [cta]}.books-overview-grid>div>h2{grid-area:title;margin-top:0;margin-bottom:0}.books-overview-grid>div>p{grid-area:content}.books-overview-grid>div>.book-cover-wrapper{grid-area:image}.books-overview-grid>div>.action-button-wrapper{grid-area:cta}}.book-cover-wrapper{display:flex;justify-content:center}@media only screen and (min-width:768px){.book-cover-wrapper{justify-content:left}}.books-overview-grid img{width:200px;height:auto}@media only screen and (min-width:768px){.books-overview-grid img{width:300px}}a.book-read-more-link{font-family:var(--display);font-weight:700;font-size:1rem;background:var(--copper);color:#fff;border-radius:10px;display:inline-flex;align-items:center;cursor:pointer;padding:.7rem 1.5rem;text-decoration:none;transition:all .15s ease}a.book-read-more-link:hover{background:var(--copper-bright);transform:translateY(-2px)}.book-read-more-link-arrow{width:1em;height:1em;margin-left:.5em}.bundle-announcement{margin-top:1rem;display:flex;gap:1rem;justify-content:center;align-items:center}.bundle-announcement svg{width:2rem;height:2rem;color:var(--copper)}.image-with-text-right{display:flex}.image-with-text-right-image{margin-right:2rem;flex-shrink:0;min-width:150px;max-width:250px}@media only screen and (max-width:425px){.image-with-text-right{flex-direction:column;align-items:center}}.testimonial{display:flex;align-items:center}.testimonial:not(first-child){margin-top:2rem}.testimonial-image{margin-left:1rem;margin-right:1rem;display:flex;flex-direction:column;flex-shrink:0;align-items:center}.testimonial-image>img{width:150px;height:150px;object-fit:cover;border-radius:50%}.testimonial-text{position:relative}.testimonial-text>p:first-of-type::before{content:"\201C";font-size:270px;height:82px;line-height:1;position:absolute;top:-60px;left:-40px;z-index:-1;font-family:var(--display);color:var(--copper-soft)}.testimonial-person{font-size:1.1rem;font-weight:600}.testimonial-person-title{font-size:.8rem;color:var(--ink-soft)}@media only screen and (max-width:768px){.testimonial{flex-direction:column}.testimonial-image{flex-direction:row}.testimonial-image>img{margin-right:2rem}}@media only screen and (max-width:425px){.testimonial-image>img{width:100px;height:100px}}.project{display:flex;gap:1.1rem;margin-top:2.2rem}.project>div{min-width:0}.project .project-description a{overflow-wrap:anywhere}.project-badge{width:2.5rem;height:2.5rem;border-radius:12px;flex-shrink:0;background:var(--copper-soft);color:var(--copper);display:grid;place-items:center;margin-top:.2rem}.project-badge svg{width:1.25rem;height:1.25rem}.page-content .project h2{margin-top:0;font-size:1.2rem}.page-content .project a.repo{display:inline-block;font-family:var(--mono);font-size:.75rem;color:var(--ink-soft);font-weight:400;text-decoration:none;margin-top:.3rem;overflow-wrap:anywhere}.page-content .project a.repo:hover{color:var(--copper)}.project .project-description{margin-top:.55rem}.page-content .projects-section-head{font-family:var(--display);font-weight:800;font-size:1.5rem;letter-spacing:-.025em;color:var(--navy);margin-top:2.8rem;margin-bottom:1.2rem;padding-bottom:.5rem;border-bottom:1px solid var(--hairline)}.featured-projects{display:grid;grid-template-columns:repeat(3,1fr);gap:1.2rem}.featured-project{position:relative;background:var(--card);border:1px solid var(--hairline);border-radius:14px;padding:1.6rem 1.4rem 1.3rem;display:flex;flex-direction:column;transition:border-color .18s ease,box-shadow .18s ease,transform .18s ease}.featured-project::before{content:"";position:absolute;top:0;left:1.2rem;right:1.2rem;height:3px;background:var(--copper);border-radius:0 0 3px 3px}.featured-project:hover{border-color:var(--copper);box-shadow:0 14px 30px -22px rgba(194,112,46,.45);transform:translateY(-2px)}.featured-flag{align-self:flex-start;font-family:var(--mono);font-size:.62rem;letter-spacing:.14em;text-transform:uppercase;color:var(--copper);background:var(--copper-soft);border-radius:99px;padding:.25rem .65rem;margin-bottom:.9rem}.page-content .featured-project h3{font-family:var(--display);font-weight:700;font-size:1.15rem;line-height:1.25;letter-spacing:-.015em;color:var(--navy);margin:0}.featured-project .project-description{margin-top:.9rem;font-size:.92rem;flex-grow:1}.page-content .featured-project a.repo{display:inline-flex;align-items:center;gap:.4rem;margin-top:1rem;font-family:var(--mono);font-size:.72rem;color:var(--ink-soft);text-decoration:none;overflow-wrap:anywhere}.featured-project a.repo svg{width:.9rem;height:.9rem;flex-shrink:0}.page-content .featured-project a.repo:hover{color:var(--copper)}.projects-grid{display:grid;grid-template-columns:1fr 1fr;gap:1.4rem 1.6rem}.project-compact{display:grid;grid-template-columns:2.5rem 1fr;grid-template-areas:"badge title" "badge desc" "badge repo";column-gap:1rem;row-gap:.35rem;padding:.2rem 0}.project-compact .project-badge{grid-area:badge;margin-top:0}.page-content .project-compact h3{grid-area:title;font-family:var(--display);font-weight:700;font-size:1.02rem;letter-spacing:-.01em;color:var(--navy);margin:0;align-self:center}.project-compact .project-description{grid-area:desc;margin:0;font-size:.88rem;color:var(--ink-soft)}.project-compact .project-description a{overflow-wrap:anywhere}.page-content .project-compact a.repo{grid-area:repo;display:inline-block;font-family:var(--mono);font-size:.72rem;color:var(--ink-soft);text-decoration:none;overflow-wrap:anywhere}.page-content .project-compact a.repo:hover{color:var(--copper)}@media only screen and (max-width:900px){.featured-projects{grid-template-columns:1fr}.projects-grid{grid-template-columns:1fr}}h3.summary{margin-top:.4rem;margin-bottom:.8rem}h3.summary a{color:var(--navy);text-decoration:none}h3.summary a:hover{color:var(--copper)}.conference-talk{margin-top:1rem}.talk-title{font-size:1.2rem;font-family:var(--display);font-weight:700;color:var(--navy)}.talk-date{font-size:.8rem;font-style:italic;font-family:var(--mono);color:var(--ink-soft)}.talk-description{margin-top:.5rem}.adr{background:var(--paper-soft);border:1px solid var(--hairline);border-radius:12px;margin:1em;padding:1em}#paypal-container{display:flex;align-items:center;justify-content:left}#paypal-text-link{margin-left:1rem}.screenshots-grid{display:grid;grid-template-columns:1fr}@media only screen and (min-width:768px){.screenshots-grid{grid-template-columns:1fr 1fr}}.screenshots-grid>div{display:grid;grid-template-rows:1fr 3rem;margin-bottom:.5rem}.screenshots-grid>div>img{margin-bottom:0}.screenshots-grid>div>i{margin-left:1.5rem}.chat-app-screenshot>img{margin-top:1.6rem;width:90%}.screenshot-image-wrapper{position:relative}.screenshot-image-wrapper:hover .play-gif-overlay{display:flex}.play-gif-overlay{position:absolute;display:none;justify-content:center;align-items:center;cursor:pointer;top:45%;margin:0 auto;left:4rem;right:4rem;z-index:100;color:#fff;background-color:var(--navy);border-radius:10px;padding:.5rem}.play-gif-overlay:hover{text-decoration-line:none;color:var(--copper-bright)}.play-gif-overlay svg{width:2rem;height:2rem}@media only screen and (max-width:670px){div.desktop{display:none}}@media only screen and (min-width:671px){div.mobile{display:none}}@media(max-width:800px){.feature-card{grid-template-columns:1fr;padding:2.2rem 1.8rem}.feature-card .badge{left:1.8rem}.feature-card .cover{justify-self:center}.books-strip{grid-template-columns:1fr}.post-list a{grid-template-columns:1fr;gap:.3rem}.post-list .summary{grid-column:1}}@media(max-width:680px){.pagination{grid-template-columns:1fr}.pagination a.next{text-align:left}.book-ad{flex-direction:column;text-align:center}.book-ad .badge{left:50%;transform:translateX(-50%)rotate(-1.5deg)}}