@font-face{font-family:DM Serif Display;src:url(/fonts/dm-serif-display-v17-latin/dm-serif-display-v17-latin-regular.woff2)format("woff2");font-weight:400;font-style:normal;font-display:swap}@font-face{font-family:DM Serif Display;src:url(/fonts/dm-serif-display-v17-latin/dm-serif-display-v17-latin-italic.woff2)format("woff2");font-weight:400;font-style:italic;font-display:swap}@font-face{font-family:Inter;src:url(/fonts/inter-v20-latin/inter-v20-latin-300.woff2)format("woff2");font-weight:300;font-style:normal;font-display:swap}@font-face{font-family:Inter;src:url(/fonts/inter-v20-latin/inter-v20-latin-regular.woff2)format("woff2");font-weight:400;font-style:normal;font-display:swap}@font-face{font-family:Inter;src:url(/fonts/inter-v20-latin/inter-v20-latin-500.woff2)format("woff2");font-weight:500;font-style:normal;font-display:swap}@font-face{font-family:JetBrains Mono;src:url(/fonts/jetbrains-mono-v24-latin/jetbrains-mono-v24-latin-regular.woff2)format("woff2");font-weight:400;font-style:normal;font-display:swap}@font-face{font-family:JetBrains Mono;src:url(/fonts/jetbrains-mono-v24-latin/jetbrains-mono-v24-latin-500.woff2)format("woff2");font-weight:500;font-style:normal;font-display:swap}:root{--bg:#f5f5f3;--bg-surface:#eeeeec;--bg-subtle:#e8e8e6;--text:#444;--text-muted:#6b6b6b;--text-faint:#9a9a98;--border:#d8d8d6;--border-subtle:#e4e4e2;--font-display:"DM Serif Display", Georgia, serif;--font-body:"Inter", system-ui, sans-serif;--font-mono:"JetBrains Mono", "Fira Code", monospace;--text-xs:.75rem;--text-sm:.875rem;--text-base:1rem;--text-lg:1.125rem;--text-xl:1.25rem;--text-2xl:1.5rem;--text-3xl:1.875rem;--text-4xl:2.25rem;--text-5xl:3rem;--space-1:.25rem;--space-2:.5rem;--space-3:.75rem;--space-4:1rem;--space-6:1.5rem;--space-8:2rem;--space-12:3rem;--space-16:4rem;--space-24:6rem;--space-32:8rem;--max-width:720px;--max-width-wide:1024px;--transition:.15s ease;--transition-slow:.3s ease}[data-theme=dark]{--bg:#141414;--bg-surface:#1e1e1e;--bg-subtle:#252525;--text:#dddddb;--text-muted:#888886;--text-faint:#5a5a58;--border:#2e2e2c;--border-subtle:#242422}*,:before,:after{box-sizing:border-box;margin:0;padding:0}html{text-size-adjust:100%;scroll-behavior:smooth;font-size:16px}body{background-color:var(--bg);color:var(--text);font-family:var(--font-body);font-size:var(--text-base);min-height:100vh;transition:background-color var(--transition-slow), color var(--transition-slow);-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;flex-direction:column;font-weight:400;line-height:1.7;display:flex}h1,h2,h3,h4,h5,h6{font-family:var(--font-display);letter-spacing:-.01em;color:var(--text);font-weight:400;line-height:1.2}h1{font-size:var(--text-5xl)}h2{font-size:var(--text-3xl)}h3{font-size:var(--text-2xl)}h4{font-size:var(--text-xl)}h5{font-size:var(--text-lg)}h6{font-size:var(--text-base)}p{font-family:var(--font-body);font-size:var(--text-base);color:var(--text);line-height:1.8}p.lead{font-size:var(--text-lg);color:var(--text-muted);font-weight:300;line-height:1.7}.meta{font-family:var(--font-mono);font-size:var(--text-sm);color:var(--text-muted);letter-spacing:.05em;text-transform:uppercase}a{color:var(--text);text-decoration:underline;text-decoration-color:var(--border);text-underline-offset:3px;transition:text-decoration-color var(--transition)}a:hover{text-decoration-color:var(--text-muted)}a.nav-link{font-family:var(--font-mono);font-size:var(--text-sm);color:var(--text-faint);letter-spacing:.03em;transition:color var(--transition);text-decoration:none}a.nav-link:hover,a.nav-link[aria-current=page]{color:var(--text)}code{font-family:var(--font-mono);background-color:var(--bg-surface);border:1px solid var(--border-subtle);color:var(--text);border-radius:3px;padding:.15em .4em;font-size:.875em}pre{font-family:var(--font-mono);font-size:var(--text-sm);background-color:var(--bg-surface);border:1px solid var(--border);padding:var(--space-6);border-radius:6px;line-height:1.6;overflow-x:auto}pre code{font-size:inherit;background:0 0;border:none;padding:0}.code-block{position:relative}.prose .code-block{margin-top:var(--space-6);margin-bottom:var(--space-8)}.prose .code-block pre{margin-top:0;margin-bottom:0}.code-block .copy-btn{top:var(--space-3);right:var(--space-3);width:28px;height:28px;color:var(--text-faint);background:var(--bg-subtle);border:1px solid var(--border);cursor:pointer;transition:color var(--transition);border-radius:3px;justify-content:center;align-items:center;padding:0;display:flex;position:absolute}.code-block .copy-btn:hover{color:var(--text-muted)}.container{max-width:var(--max-width);padding:0 var(--space-6);margin:0 auto}.container--wide{max-width:var(--max-width-wide);padding:0 var(--space-6);margin:0 auto}main{flex:1}header{padding:var(--space-8) 0 var(--space-6);border-bottom:1px solid var(--border-subtle)}header nav{justify-content:space-between;align-items:center;gap:var(--space-8);min-width:0;display:flex}.nav-brand{font-family:var(--font-mono);font-size:var(--text-sm);color:var(--text);letter-spacing:.02em;flex-shrink:0;font-weight:500;text-decoration:none}.nav-links{align-items:center;gap:var(--space-6);flex-shrink:0;list-style:none;display:flex}footer{padding:var(--space-12) 0 var(--space-8);border-top:1px solid var(--border-subtle);margin-top:var(--space-12)}footer p{font-family:var(--font-mono);font-size:var(--text-xs);color:var(--text-faint);letter-spacing:.03em}.prose{max-width:var(--max-width)}.prose h2{font-size:var(--text-2xl);margin-top:var(--space-12);margin-bottom:var(--space-4)}.prose h3{font-size:var(--text-xl);margin-top:var(--space-8);margin-bottom:var(--space-3)}.prose p{margin-bottom:var(--space-6)}.prose ul,.prose ol{padding-left:var(--space-6);margin-bottom:var(--space-6)}.prose li{margin-bottom:var(--space-2);line-height:1.7}.prose blockquote{border-left:2px solid var(--border);padding-left:var(--space-6);margin:var(--space-8) 0;color:var(--text-muted);font-style:italic}.prose hr{border:none;border-top:1px solid var(--border-subtle);margin:var(--space-12) 0}.prose img{border:1px solid var(--border-subtle);border-radius:4px;max-width:100%}.prose pre{margin-top:var(--space-6);margin-bottom:var(--space-8)}.prose :not(pre)>code{color:var(--text-muted)}.prose pre span,pre span{color:var(--shiki-light)}[data-theme=dark] .prose pre span,[data-theme=dark] pre span{color:var(--shiki-dark)}pre.astro-code{background-color:var(--bg-surface)!important}.card{padding:var(--space-6);border:1px solid var(--border-subtle);background-color:var(--bg);transition:border-color var(--transition), background-color var(--transition);border-radius:6px}.card:hover{border-color:var(--border);background-color:var(--bg-surface)}.card-grid{gap:var(--space-4);grid-template-columns:repeat(auto-fill,minmax(300px,1fr));display:grid}.tag{font-family:var(--font-mono);font-size:var(--text-xs);color:var(--text-muted);border:1px solid var(--border);padding:var(--space-1) var(--space-2);letter-spacing:.04em;text-transform:lowercase;transition:color var(--transition), border-color var(--transition);border-radius:3px;text-decoration:none}.tag:hover{color:var(--text);border-color:var(--border)}.tags{gap:var(--space-2);flex-wrap:wrap;display:flex}.theme-toggle{border:1px solid var(--border-subtle);cursor:pointer;width:28px;height:28px;color:var(--text-faint);transition:color var(--transition), border-color var(--transition);background:0 0;border-radius:3px;justify-content:center;align-items:center;padding:0;display:flex}.theme-toggle:hover{color:var(--text-muted);border-color:var(--border)}.icon-sun,.icon-moon{justify-content:center;align-items:center;display:flex}[data-theme=dark] .icon-moon,[data-theme=light] .icon-sun{display:none}.sr-only{clip:rect(0, 0, 0, 0);white-space:nowrap;border-width:0;width:1px;height:1px;margin:-1px;padding:0;position:absolute;overflow:hidden}.text-muted{color:var(--text-muted)}.text-faint{color:var(--text-faint)}.font-mono{font-family:var(--font-mono)}.font-display{font-family:var(--font-display)}@media (width<=640px){h1{font-size:var(--text-4xl)}h2{font-size:var(--text-2xl)}.container,.container--wide{padding:0 var(--space-4)}header nav,.nav-links{gap:var(--space-3)}.card-grid{grid-template-columns:1fr}}
