@font-face{font-family:dm sans;src:url(../fonts/dm-sans.woff2)format('woff2');font-weight:400 700;font-style:normal;font-display:swap}@font-face{font-family:dm sans;src:url(../fonts/dm-sans-italic.woff2)format('woff2');font-weight:400 700;font-style:italic;font-display:swap}@font-face{font-family:sora;src:url(../fonts/sora.woff2)format('woff2');font-weight:300 700;font-display:swap}@font-face{font-family:fraunces;src:url(../fonts/fraunces.woff2)format('woff2');font-weight:400 700;font-display:swap}@font-face{font-family:jetbrains mono;src:url(../fonts/jetbrains-mono.woff2)format('woff2');font-weight:400 700;font-display:swap}:root{--cr-bg:#ede8df;--cr-surface:#f5f2ec;--cr-surface-2:#ffffff;--cr-border:#d5d0c8;--cr-border-hi:#b8b3aa;--cr-text:#2a2522;--cr-text-secondary:#6b6660;--cr-code-bg:#f7f7f7;--font-display:'Fraunces', Georgia, serif;--font-heading:'Sora', -apple-system, BlinkMacSystemFont, 'Segoe UI', sans-serif;--font-body:'DM Sans', -apple-system, BlinkMacSystemFont, 'Segoe UI', sans-serif;--font-mono:'JetBrains Mono', 'Fira Code', ui-monospace, monospace;--radius-md:0.5rem;--radius-lg:14px;--shadow-md:0 4px 6px -1px rgb(0 0 0 / 0.08);--gutter:16px;color-scheme:light}.dark{--cr-bg:#0e0e0c;--cr-surface:#1a1918;--cr-surface-2:#222120;--cr-border:#2c2a28;--cr-border-hi:#3d3a37;--cr-text:#e4e0d9;--cr-text-secondary:#8a8680;--cr-code-bg:#0d1117;color-scheme:dark}*,*::before,*::after{box-sizing:border-box}html{-webkit-text-size-adjust:100%}body{margin:0;background:var(--cr-bg);color:var(--cr-text);font:clamp(1rem,.95rem + .25vw,1.125rem)/1.7 var(--font-body);overflow-x:hidden}img{max-width:100%;height:auto;display:block}a{color:inherit}h1,h2,h3,h4{font-family:var(--font-heading);line-height:1.25;letter-spacing:-.01em}.skip-link{position:absolute;left:-9999px}.skip-link:focus{left:var(--gutter);top:var(--gutter);z-index:100;background:var(--cr-surface-2);padding:.5rem 1rem;border-radius:var(--radius-md)}:focus-visible{outline:2px solid var(--cr-text);outline-offset:2px}.container{width:100%;max-width:72rem;margin:0 auto;padding:0 var(--gutter)}.container.narrow{max-width:48rem}@media(min-width:640px){:root{--gutter:24px}}.muted{color:var(--cr-text-secondary)}.site-header{position:sticky;top:0;z-index:50;background:color-mix(in srgb,var(--cr-bg) 85%,transparent);backdrop-filter:blur(10px);border-bottom:1px solid var(--cr-border)}.header-inner{display:flex;align-items:center;gap:1rem;height:4.5rem}.logo{display:flex;align-items:center;gap:.75rem;text-decoration:none;margin-right:auto}.logo-mark{width:36px;height:36px}.logo-light{display:block}.logo-dark{display:none}.dark .logo-light{display:none}.dark .logo-dark{display:block}.logo-text{font-family:var(--font-heading);font-size:1.4rem;margin:0}.logo-text b{font-weight:700;letter-spacing:-.5px}.logo-text span{font-weight:300;letter-spacing:.5px}.site-nav ul{display:flex;gap:1.75rem;list-style:none;margin:0;padding:0;align-items:center}.site-nav a{text-decoration:none;color:var(--cr-text-secondary);font-size:.95rem;font-weight:500}.site-nav a:hover,.site-nav a[aria-current]{color:var(--cr-text)}.site-nav .nav-cta{color:var(--cr-bg);background:var(--cr-text);padding:.5rem 1rem;border-radius:999px}.site-nav .nav-cta:hover{color:var(--cr-bg);opacity:.85}.nav-toggle,.nav-burger{display:none}.theme-toggle{display:inline-grid;place-items:center;width:2.5rem;height:2.5rem;border-radius:999px;border:1px solid var(--cr-border);background:var(--cr-surface);color:var(--cr-text);cursor:pointer}.theme-toggle .icon-sun{display:none}.dark .theme-toggle .icon-sun{display:block}.dark .theme-toggle .icon-moon{display:none}@media(max-width:860px){.site-nav{order:3}.nav-burger{display:inline-grid;place-items:center;width:2.5rem;height:2.5rem;cursor:pointer}.nav-burger span,.nav-burger span::before,.nav-burger span::after{display:block;width:18px;height:2px;background:var(--cr-text);position:relative;content:''}.nav-burger span::before{position:absolute;top:-6px}.nav-burger span::after{position:absolute;top:6px}.site-nav ul{display:none;position:absolute;left:0;right:0;top:4.5rem;flex-direction:column;align-items:stretch;gap:0;background:var(--cr-bg);border-bottom:1px solid var(--cr-border);padding:.5rem var(--gutter)1rem}.site-nav li a{display:block;padding:.75rem 0}.site-nav .nav-cta{text-align:center;margin-top:.5rem}.nav-toggle:checked~ul{display:flex}}.hero{padding-top:4rem;padding-bottom:2.5rem}.eyebrow{font:500 .8rem/1 var(--font-mono);text-transform:uppercase;letter-spacing:.12em;color:var(--cr-text-secondary);margin:0 0 1rem}.hero h1{font-family:var(--font-display);font-weight:600;font-size:clamp(2.25rem,1.8rem + 2.25vw,3.5rem);margin:0 0 1rem}.lead{font-size:clamp(1.125rem,1rem + .6vw,1.3rem);color:var(--cr-text-secondary);margin:0 0 1.5rem;max-width:46rem}.back{display:inline-block;margin-bottom:1.5rem;color:var(--cr-text-secondary);text-decoration:none;font-size:.95rem}.back:hover{color:var(--cr-text)}.chips{display:flex;flex-wrap:wrap;gap:.5rem;list-style:none;padding:0;margin:0}.chip{display:inline-flex;gap:.4rem;align-items:center;padding:.35rem .85rem;border-radius:999px;border:1px solid var(--cr-border);background:var(--cr-surface);font-size:.9rem;text-decoration:none}.chip:hover{border-color:var(--cr-border-hi)}.chip span{color:var(--cr-text-secondary);font-size:.8rem}.grid{display:grid;gap:1.5rem;grid-template-columns:repeat(auto-fill,minmax(min(100%,20rem),1fr));padding-bottom:4rem}.featured{margin-bottom:1.5rem}.featured .card-link{display:grid}@media(min-width:860px){.featured .card-link:has(.card-image){grid-template-columns:1.1fr 1fr}.featured .card-title{font-size:1.75rem}}.card{background:var(--cr-surface);border:1px solid var(--cr-border);border-radius:var(--radius-lg);overflow:hidden;transition:border-color .2s,transform .2s}.card:hover{border-color:var(--cr-border-hi);transform:translateY(-2px)}.card-link{display:block;height:100%;text-decoration:none}.card-image{width:100%;aspect-ratio:9/5;object-fit:cover;height:100%}.card-body{padding:1.5rem}.card-title{font-size:1.25rem;margin:.5rem 0 .75rem}.card-summary{color:var(--cr-text-secondary);margin:0;font-size:.98rem}.meta{display:flex;flex-wrap:wrap;align-items:center;gap:.5rem;color:var(--cr-text-secondary);font-size:.88rem;margin:0}.pill{padding:.2rem .7rem;border-radius:999px;background:var(--cr-surface-2);border:1px solid var(--cr-border);color:var(--cr-text);font-weight:500;text-decoration:none}.post-header{padding-top:3.5rem}.post-header h1{font-family:var(--font-display);font-weight:600;font-size:clamp(2rem,1.6rem + 2vw,3rem);margin:1.25rem 0 1rem}.byline{color:var(--cr-text-secondary);margin:0 0 2rem}.byline strong{color:var(--cr-text);font-weight:600}.post-hero{margin:0 auto 1rem;max-width:60rem}.post-hero img{width:100%;border-radius:var(--radius-lg);box-shadow:0 20px 40px rgb(0 0 0/.25)}.prose{padding-top:2rem;padding-bottom:2rem;overflow-wrap:break-word}.prose>*+*{margin-top:1.25em}.prose p,.prose ul,.prose ol{margin-bottom:0}.prose h2{font-size:clamp(1.5rem,1.3rem + 1vw,1.875rem);margin:2.25em 0 .75em}.prose h3{font-size:clamp(1.2rem,1.1rem + .6vw,1.4rem);margin:1.75em 0 .5em}.prose h4{font-size:1.1rem;margin:1.5em 0 .5em}.prose a{text-decoration:underline;text-underline-offset:3px;text-decoration-color:var(--cr-border-hi)}.prose a:hover{text-decoration-color:initial}.prose strong{font-weight:700}.prose ul,.prose ol{padding-left:1.4em}.prose li+li{margin-top:.4em}.prose li::marker{color:var(--cr-text-secondary)}.prose blockquote{margin-left:0;padding:.25em 0 .25em 1.25em;border-left:3px solid var(--cr-border-hi);color:var(--cr-text-secondary);font-style:italic}.prose hr{border:0;border-top:1px solid var(--cr-border);margin:3em 0}.prose img{border-radius:var(--radius-md)}.prose code{font-family:var(--font-mono);font-size:.88em}.prose :not(pre)>code{background:var(--cr-surface-2);border:1px solid var(--cr-border);border-radius:4px;padding:.1em .35em}.prose pre{font-size:.88rem;line-height:1.6;padding:1.1rem 1.25rem;border-radius:var(--radius-md);border:1px solid var(--cr-border);overflow-x:auto;background:var(--cr-code-bg)}.prose .highlight pre{margin:0}.prose table{width:100%;border-collapse:collapse;font-size:.95rem;display:block;overflow-x:auto}.prose th,.prose td{border:1px solid var(--cr-border);padding:.55rem .75rem;text-align:left;vertical-align:top}.prose th{background:var(--cr-surface);font-family:var(--font-heading);font-weight:600}.post-footer{padding-bottom:3rem;border-top:1px solid var(--cr-border);padding-top:2rem}.small-heading{font-size:.95rem;margin:1.5rem 0 .75rem}.related{padding-left:1.2em;margin:0}.related li+li{margin-top:.4rem}.cta{border-top:1px solid var(--cr-border);padding:3rem 0}.cta h2{font-size:1.15rem;margin:0 0 .5rem}.cta p{margin:0 0 1.25rem;font-size:.95rem}.cta ul{display:flex;flex-wrap:wrap;gap:.5rem 1.5rem;list-style:none;padding:0;margin:0;font-size:.95rem}.cta a{text-underline-offset:3px}.site-footer{border-top:1px solid var(--cr-border);padding:3rem 0 2rem;font-size:.95rem}.footer-grid{display:grid;gap:2rem;grid-template-columns:1fr}@media(min-width:760px){.footer-grid{grid-template-columns:1.2fr 1fr}}.footer-grid nav{display:grid;grid-template-columns:1fr 1fr;gap:1rem}.site-footer ul{list-style:none;padding:0;margin:0}.site-footer li+li{margin-top:.5rem}.site-footer a{text-decoration:none;color:var(--cr-text-secondary)}.site-footer a:hover{color:var(--cr-text)}.footer-bottom{display:flex;flex-wrap:wrap;justify-content:space-between;gap:1rem;margin-top:2.5rem;padding-top:1.5rem;border-top:1px solid var(--cr-border)}.footer-bottom p{margin:0}.social{display:flex;gap:1.25rem}.social li+li{margin-top:0}@media(prefers-reduced-motion:reduce){*{transition:none!important}}:root:not(.dark) .bg{background-color:#f7f7f7}:root:not(.dark) .chroma{background-color:#f7f7f7;-webkit-text-size-adjust:none}:root:not(.dark) .chroma .err{color:#f6f8fa;background-color:#82071e}:root:not(.dark) .chroma .lnlinks{outline:none;text-decoration:none;color:inherit}:root:not(.dark) .chroma .lntd{vertical-align:top;padding:0;margin:0;border:0}:root:not(.dark) .chroma .lntable{border-spacing:0;padding:0;margin:0;border:0}:root:not(.dark) .chroma .hl{background-color:#dedede}:root:not(.dark) .chroma .lnt{white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f}:root:not(.dark) .chroma .ln{white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f}:root:not(.dark) .chroma .line{display:flex}:root:not(.dark) .chroma .k{color:#cf222e}:root:not(.dark) .chroma .kc{color:#cf222e}:root:not(.dark) .chroma .kd{color:#cf222e}:root:not(.dark) .chroma .kn{color:#cf222e}:root:not(.dark) .chroma .kp{color:#cf222e}:root:not(.dark) .chroma .kr{color:#cf222e}:root:not(.dark) .chroma .kt{color:#cf222e}:root:not(.dark) .chroma .na{color:#1f2328}:root:not(.dark) .chroma .nc{color:#1f2328}:root:not(.dark) .chroma .no{color:#0550ae}:root:not(.dark) .chroma .nd{color:#0550ae}:root:not(.dark) .chroma .ni{color:#6639ba}:root:not(.dark) .chroma .nl{color:#900;font-weight:700}:root:not(.dark) .chroma .nn{color:#24292e}:root:not(.dark) .chroma .nx{color:#1f2328}:root:not(.dark) .chroma .nt{color:#0550ae}:root:not(.dark) .chroma .nb{color:#6639ba}:root:not(.dark) .chroma .bp{color:#6a737d}:root:not(.dark) .chroma .nv{color:#953800}:root:not(.dark) .chroma .vc{color:#953800}:root:not(.dark) .chroma .vg{color:#953800}:root:not(.dark) .chroma .vi{color:#953800}:root:not(.dark) .chroma .vm{color:#953800}:root:not(.dark) .chroma .nf{color:#6639ba}:root:not(.dark) .chroma .fm{color:#6639ba}:root:not(.dark) .chroma .s{color:#0a3069}:root:not(.dark) .chroma .sa{color:#0a3069}:root:not(.dark) .chroma .sb{color:#0a3069}:root:not(.dark) .chroma .sc{color:#0a3069}:root:not(.dark) .chroma .dl{color:#0a3069}:root:not(.dark) .chroma .sd{color:#0a3069}:root:not(.dark) .chroma .s2{color:#0a3069}:root:not(.dark) .chroma .se{color:#0a3069}:root:not(.dark) .chroma .sh{color:#0a3069}:root:not(.dark) .chroma .si{color:#0a3069}:root:not(.dark) .chroma .sx{color:#0a3069}:root:not(.dark) .chroma .sr{color:#0a3069}:root:not(.dark) .chroma .s1{color:#0a3069}:root:not(.dark) .chroma .ss{color:#032f62}:root:not(.dark) .chroma .m{color:#0550ae}:root:not(.dark) .chroma .mb{color:#0550ae}:root:not(.dark) .chroma .mf{color:#0550ae}:root:not(.dark) .chroma .mh{color:#0550ae}:root:not(.dark) .chroma .mi{color:#0550ae}:root:not(.dark) .chroma .il{color:#0550ae}:root:not(.dark) .chroma .mo{color:#0550ae}:root:not(.dark) .chroma .o{color:#0550ae}:root:not(.dark) .chroma .ow{color:#0550ae}:root:not(.dark) .chroma .or{color:#0550ae}:root:not(.dark) .chroma .p{color:#1f2328}:root:not(.dark) .chroma .c{color:#57606a}:root:not(.dark) .chroma .ch{color:#57606a}:root:not(.dark) .chroma .cm{color:#57606a}:root:not(.dark) .chroma .c1{color:#57606a}:root:not(.dark) .chroma .cs{color:#57606a}:root:not(.dark) .chroma .cp{color:#57606a}:root:not(.dark) .chroma .cpf{color:#57606a}:root:not(.dark) .chroma .gd{color:#82071e;background-color:#ffebe9}:root:not(.dark) .chroma .ge{color:#1f2328}:root:not(.dark) .chroma .gi{color:#116329;background-color:#dafbe1}:root:not(.dark) .chroma .go{color:#1f2328}:root:not(.dark) .chroma .gl{text-decoration:underline}:root:not(.dark) .chroma .w{color:#fff}.dark .bg{color:#e6edf3;background-color:#0d1117}.dark .chroma{color:#e6edf3;background-color:#0d1117;-webkit-text-size-adjust:none}.dark .chroma .err{color:#f85149}.dark .chroma .lnlinks{outline:none;text-decoration:none;color:inherit}.dark .chroma .lntd{vertical-align:top;padding:0;margin:0;border:0}.dark .chroma .lntable{border-spacing:0;padding:0;margin:0;border:0}.dark .chroma .hl{background-color:#6e7681}.dark .chroma .lnt{white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#737679}.dark .chroma .ln{white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#6e7681}.dark .chroma .line{display:flex}.dark .chroma .k{color:#ff7b72}.dark .chroma .kc{color:#79c0ff}.dark .chroma .kd{color:#ff7b72}.dark .chroma .kn{color:#ff7b72}.dark .chroma .kp{color:#79c0ff}.dark .chroma .kr{color:#ff7b72}.dark .chroma .kt{color:#ff7b72}.dark .chroma .nc{color:#f0883e;font-weight:700}.dark .chroma .no{color:#79c0ff;font-weight:700}.dark .chroma .nd{color:#d2a8ff;font-weight:700}.dark .chroma .ni{color:#ffa657}.dark .chroma .ne{color:#f0883e;font-weight:700}.dark .chroma .nl{color:#79c0ff;font-weight:700}.dark .chroma .nn{color:#ff7b72}.dark .chroma .nx{color:#e6edf3}.dark .chroma .py{color:#79c0ff}.dark .chroma .nt{color:#7ee787}.dark .chroma .nv{color:#79c0ff}.dark .chroma .vc{color:#79c0ff}.dark .chroma .vg{color:#79c0ff}.dark .chroma .vi{color:#79c0ff}.dark .chroma .vm{color:#79c0ff}.dark .chroma .nf{color:#d2a8ff;font-weight:700}.dark .chroma .fm{color:#d2a8ff;font-weight:700}.dark .chroma .l{color:#a5d6ff}.dark .chroma .ld{color:#79c0ff}.dark .chroma .s{color:#a5d6ff}.dark .chroma .sa{color:#79c0ff}.dark .chroma .sb{color:#a5d6ff}.dark .chroma .sc{color:#a5d6ff}.dark .chroma .dl{color:#79c0ff}.dark .chroma .sd{color:#a5d6ff}.dark .chroma .s2{color:#a5d6ff}.dark .chroma .se{color:#79c0ff}.dark .chroma .sh{color:#79c0ff}.dark .chroma .si{color:#a5d6ff}.dark .chroma .sx{color:#a5d6ff}.dark .chroma .sr{color:#79c0ff}.dark .chroma .s1{color:#a5d6ff}.dark .chroma .ss{color:#a5d6ff}.dark .chroma .m{color:#a5d6ff}.dark .chroma .mb{color:#a5d6ff}.dark .chroma .mf{color:#a5d6ff}.dark .chroma .mh{color:#a5d6ff}.dark .chroma .mi{color:#a5d6ff}.dark .chroma .il{color:#a5d6ff}.dark .chroma .mo{color:#a5d6ff}.dark .chroma .o{color:#ff7b72;font-weight:700}.dark .chroma .ow{color:#ff7b72;font-weight:700}.dark .chroma .or{color:#ff7b72;font-weight:700}.dark .chroma .c{color:#8b949e;font-style:italic}.dark .chroma .ch{color:#8b949e;font-style:italic}.dark .chroma .cm{color:#8b949e;font-style:italic}.dark .chroma .c1{color:#8b949e;font-style:italic}.dark .chroma .cs{color:#8b949e;font-weight:700;font-style:italic}.dark .chroma .cp{color:#8b949e;font-weight:700;font-style:italic}.dark .chroma .cpf{color:#8b949e;font-weight:700;font-style:italic}.dark .chroma .gd{color:#ffa198;background-color:#490202}.dark .chroma .ge{font-style:italic}.dark .chroma .gr{color:#ffa198}.dark .chroma .gh{color:#79c0ff;font-weight:700}.dark .chroma .gi{color:#56d364;background-color:#0f5323}.dark .chroma .go{color:#8b949e}.dark .chroma .gp{color:#8b949e}.dark .chroma .gs{font-weight:700}.dark .chroma .gu{color:#79c0ff}.dark .chroma .gt{color:#ff7b72}.dark .chroma .gl{text-decoration:underline}.dark .chroma .w{color:#6e7681}