@font-face{font-family:geist;font-style:normal;font-weight:100 900;font-display:swap;src:url(/fonts/geist-latin-wght-normal.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;font-style:italic;font-weight:100 900;font-display:swap;src:url(/fonts/geist-latin-wght-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:geist;font-style:normal;font-weight:100 900;font-display:swap;src:url(/fonts/geist-latin-ext-wght-normal.woff2)format('woff2');unicode-range:U+100-2BA,U+2BD-2C5,U+2C7-2CC,U+2CE-2D7,U+2DD-2FF,U+304,U+308,U+329,U+1D00-1DBF,U+1E00-1E9F,U+1EF2-1EFF,U+2020,U+20A0-20AB,U+20AD-20C0,U+2113,U+2C60-2C7F,U+A720-A7FF}@font-face{font-family:geist;font-style:italic;font-weight:100 900;font-display:swap;src:url(/fonts/geist-latin-ext-wght-italic.woff2)format('woff2');unicode-range:U+100-2BA,U+2BD-2C5,U+2C7-2CC,U+2CE-2D7,U+2DD-2FF,U+304,U+308,U+329,U+1D00-1DBF,U+1E00-1E9F,U+1EF2-1EFF,U+2020,U+20A0-20AB,U+20AD-20C0,U+2113,U+2C60-2C7F,U+A720-A7FF}@font-face{font-family:geist mono;font-style:normal;font-weight:100 900;font-display:swap;src:url(/fonts/geist-mono-latin-wght-normal.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:100 900;font-display:swap;src:url(/fonts/geist-mono-latin-ext-wght-normal.woff2)format('woff2');unicode-range:U+100-2BA,U+2BD-2C5,U+2C7-2CC,U+2CE-2D7,U+2DD-2FF,U+304,U+308,U+329,U+1D00-1DBF,U+1E00-1E9F,U+1EF2-1EFF,U+2020,U+20A0-20AB,U+20AD-20C0,U+2113,U+2C60-2C7F,U+A720-A7FF}@font-face{font-family:geist mono;font-style:normal;font-weight:100 900;font-display:swap;src:url(/fonts/geist-mono-symbols2-wght-normal.woff2)format('woff2');unicode-range:U+2000-2001,U+2004-2008,U+200A,U+23B8-23BD,U+2500-259F}:root{color-scheme:dark;--bg:#101010;--surface:#17161a;--surface-raised:#1d1c21;--border:#26252b;--border-hover:#3a3745;--text:#f1f1f1;--text-secondary:#b0b0b0;--text-muted:#616161;--violet:#9d7cff;--violet-light:#bea9ff;--violet-mid:#8174c9;--violet-deep:#402dad;--green:#5bcd84;--green-light:#93deae;--tag-fill:rgba(157, 124, 255, .1);--tag-fill-alt:rgba(91, 205, 132, .1);--spotlight-glow:rgba(64, 45, 173, .16);--label-veil:rgba(16, 16, 16, .85);--code-highlight:rgba(157, 124, 255, .1);--font-sans:'Geist', system-ui, -apple-system, sans-serif;--font-mono:'Geist Mono', ui-monospace, monospace;--measure:34rem;--measure-article:42rem;--container:72rem;--radius:10px;--radius-sm:4px;--transition:.2s}*,*::before,*::after{box-sizing:border-box;margin:0;padding:0}html{scroll-behavior:smooth}ul,ol{list-style:none}img,svg{display:block;max-width:100%}button,input,select,textarea{font:inherit;color:inherit}body{background:var(--bg);color:var(--text-secondary);font-family:var(--font-sans);font-size:1rem;line-height:1.7;overflow-x:hidden;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}h1,h2,h3,h4,h5,h6{color:var(--text);font-weight:600;line-height:1.2;text-wrap:balance}a{color:var(--violet);text-decoration:none}strong,b{color:var(--text);font-weight:600}code,kbd,pre,samp{font-family:var(--font-mono)}::selection{background:var(--violet-deep);color:var(--text)}:focus-visible{outline:2px solid var(--violet);outline-offset:3px;border-radius:var(--radius-sm)}.spotlight{--spotlight-size:1200px;position:fixed;top:0;left:0;z-index:0;width:var(--spotlight-size);height:var(--spotlight-size);pointer-events:none;background:radial-gradient( closest-side,var(--spotlight-glow),transparent 80% );transform:translate3d( calc(var(--mx,50vw) - var(--spotlight-size)/2),calc(var(--my,0px) - var(--spotlight-size)/2),0 );will-change:transform}.layout{position:relative;z-index:1;max-width:var(--container);margin:0 auto;padding:0 1.5rem}.pane-left{padding:4rem 0 2rem}.pane-right{padding-bottom:4rem}@media(min-width:1024px){.layout{display:flex;gap:3rem;padding:0 3rem}.pane-left{position:sticky;top:0;display:flex;flex-direction:column;justify-content:space-between;width:44%;height:100vh;padding:6rem 0}.pane-right{width:56%;padding:6rem 0}}.visually-hidden{position:absolute;width:1px;height:1px;margin:-1px;padding:0;overflow:hidden;white-space:nowrap;border:0;clip-path:inset(50%)}.skip-link{position:absolute;top:.5rem;left:.5rem;z-index:10;padding:.5rem .875rem;background:var(--surface-raised);border:1px solid var(--border);border-radius:var(--radius-sm);color:var(--text);font-family:var(--font-mono);font-size:.75rem;letter-spacing:.12em;text-transform:uppercase;transform:translateY(-200%)}.skip-link:focus{transform:translateY(0)}@media(prefers-reduced-motion:reduce){*,*::before,*::after{transition:none!important;animation:none!important;scroll-behavior:auto!important}.spotlight{display:none}}.wordmark{margin-bottom:1.25rem;color:var(--violet);font-family:var(--font-mono);font-size:.75rem;letter-spacing:.12em;text-transform:uppercase}.site-name{color:var(--text);font-size:clamp(2.25rem,6vw,3rem);font-weight:600;line-height:1.05;letter-spacing:-.03em}.role{margin-top:.75rem;color:var(--text);font-size:1.125rem;font-weight:500}.bio{margin-top:1rem;max-width:22rem;font-size:.9375rem}.stack{margin-top:1.75rem;color:var(--text-muted);font-family:var(--font-mono);font-size:.75rem;line-height:2;letter-spacing:.12em;text-transform:uppercase}.stack li::before{content:"/ ";color:var(--green)}.site-nav{margin-top:3rem}.site-nav ul{display:flex;flex-direction:column;gap:.25rem;align-items:flex-start}.site-nav a{display:inline-flex;align-items:center;gap:.75rem;padding:.375rem 0;color:var(--text-muted);font-family:var(--font-mono);font-size:.75rem;letter-spacing:.12em;text-transform:uppercase;transition:color var(--transition)}.nav-rule{display:block;flex:none;width:2rem;height:1px;background:var(--text-muted);transition:width var(--transition),background var(--transition)}.site-nav a:hover,.site-nav a:focus-visible,.site-nav a.is-active{color:var(--text)}.site-nav a:hover .nav-rule,.site-nav a:focus-visible .nav-rule,.site-nav a.is-active .nav-rule{width:3.5rem;background:var(--violet)}.socials,.legal{display:flex;flex-wrap:wrap;gap:1.25rem;font-size:.8125rem}.socials{margin-top:2.5rem}.legal{gap:.625rem;margin-top:.75rem}.legal li+li::before{content:"\00b7";margin-right:.625rem;color:var(--border-hover)}.socials a,.legal a{color:var(--text-muted);transition:color var(--transition)}.socials a:hover,.socials a:focus-visible,.legal a:hover,.legal a:focus-visible{color:var(--violet)}@media(min-width:1024px){.socials{margin-top:0}}.site-footer{max-width:var(--measure);margin-top:5rem;color:var(--text-muted);font-size:.8125rem}.site-footer a{color:var(--text-secondary);border-bottom:1px solid var(--border);transition:color var(--transition),border-color var(--transition)}.site-footer a:hover,.site-footer a:focus-visible{color:var(--violet);border-color:var(--violet)}.intro{max-width:var(--measure);margin-bottom:4rem;font-size:.9375rem}.intro p+p{margin-top:1rem}.intro a{color:var(--text);border-bottom:1px solid var(--violet-deep);transition:border-color var(--transition)}.intro a:hover,.intro a:focus-visible{border-color:var(--violet)}.section-label{position:sticky;top:0;z-index:2;padding:.75rem 0;margin-bottom:1rem;background:var(--label-veil);backdrop-filter:blur(8px);color:var(--text-muted);font-family:var(--font-mono);font-size:.6875rem;letter-spacing:.12em;text-transform:uppercase}@media(min-width:1024px){.section-label{display:none}}.posts{display:flex;flex-direction:column;gap:.5rem}.post{position:relative;display:grid;gap:.25rem 1.5rem;padding:1.25rem;margin:0 -1.25rem;border:1px solid transparent;border-radius:var(--radius);transition:background var(--transition),border-color var(--transition)}@media(min-width:640px){.post{grid-template-columns:7rem 1fr}}.post:hover,.post:focus-within{background:var(--surface);border-color:var(--border)}.post-date{padding-top:.3rem;color:var(--text-muted);font-family:var(--font-mono);font-size:.6875rem;letter-spacing:.12em;text-transform:uppercase}.post-readingtime{display:block;margin-top:.5rem;color:var(--text-muted)}.post-title{color:var(--text);font-size:1rem;font-weight:500;line-height:1.4;letter-spacing:normal}.post-title a{color:inherit}.post-title a::after{content:'';position:absolute;inset:0;border-radius:var(--radius)}.post:hover .post-title,.post:focus-within .post-title{color:var(--violet-light)}.post:has(.post-title a:focus-visible){outline:2px solid var(--violet);outline-offset:3px}.post:has(.post-title a:focus-visible) .post-title a:focus-visible{outline:none}.arrow{display:inline-block;vertical-align:-.05em;margin-left:.4rem;transition:transform var(--transition)}.post:hover .arrow{transform:translate(2px,-2px)}.post-summary{margin-top:.375rem;color:var(--text-secondary);font-size:.875rem;line-height:1.6}.tags{display:flex;flex-wrap:wrap;gap:.375rem;margin-top:.75rem}.tags li{padding:.2rem .55rem;border-radius:999px;background:var(--tag-fill);color:var(--violet-light);font-family:var(--font-mono);font-size:.6875rem}.tags li.is-accent{background:var(--tag-fill-alt);color:var(--green-light)}.posts-empty{color:var(--text-muted);font-size:.9375rem}.article{max-width:var(--measure-article)}.article-meta{display:flex;flex-wrap:wrap;gap:.5rem;margin-top:.75rem;color:var(--text-muted);font-family:var(--font-mono);font-size:.6875rem;letter-spacing:.1em;text-transform:uppercase}.meta-sep{color:var(--green);letter-spacing:0}.article-title{margin-top:0}.article-summary{margin-top:1rem;color:var(--text-secondary);font-size:.9375rem;line-height:1.6}.article-header{padding-bottom:2.5rem;margin-bottom:2.5rem;border-bottom:1px solid var(--border)}.article-footer{margin-top:4rem;padding-top:2rem;border-top:1px solid var(--border)}.article-footer .tags{margin-top:0}.article-footer .tags a{color:inherit}.back-link{display:inline-flex;align-items:center;gap:.75rem;margin-top:2rem;color:var(--text-muted);font-family:var(--font-mono);font-size:.75rem;letter-spacing:.12em;text-transform:uppercase;transition:color var(--transition)}.back-link:hover,.back-link:focus-visible{color:var(--text)}.back-link:hover .nav-rule,.back-link:focus-visible .nav-rule{width:3.5rem;background:var(--violet)}.prose{max-width:var(--measure-article);color:var(--text-secondary);font-size:1.0625rem;line-height:1.75}.prose>*+*{margin-top:1.375rem}.prose h2{margin-top:3.5rem;font-size:1.5rem;font-weight:600;letter-spacing:-.02em}.prose h3{margin-top:2.5rem;font-size:1.125rem;font-weight:600;letter-spacing:-.01em}.prose h2+*,.prose h3+*{margin-top:1rem}.prose>:first-child{margin-top:0}.prose a{color:var(--violet);border-bottom:1px solid var(--violet-deep);transition:border-color var(--transition)}.prose a:hover,.prose a:focus-visible{border-color:var(--violet)}.prose ul,.prose ol{padding-left:1.25rem}.prose ul{list-style:disc}.prose ol{list-style:decimal}.prose li::marker{color:var(--text-muted)}.prose li+li{margin-top:.5rem}.prose li>ul,.prose li>ol{margin-top:.5rem}.prose blockquote{padding-left:1.25rem;border-left:2px solid var(--violet-mid);color:var(--text-secondary);font-style:italic}.prose blockquote p+p{margin-top:1rem}.prose hr{height:1px;margin:3rem 0;border:0;background:var(--border)}.prose img{display:block;max-width:100%;height:auto;border-radius:var(--radius)}.prose figure{margin:2rem 0}.prose figure img{border:1px solid var(--border)}.prose figcaption{margin-top:.75rem;color:var(--text-secondary);font-size:.875rem;line-height:1.6}.prose table{display:block;width:max-content;max-width:100%;overflow-x:auto;border-collapse:collapse;font-size:.9375rem}.prose th,.prose td{padding:.625rem 1rem;border-bottom:1px solid var(--border);text-align:left;vertical-align:top}.prose th{color:var(--text-muted);font-family:var(--font-mono);font-size:.6875rem;font-weight:400;letter-spacing:.12em;text-transform:uppercase;white-space:nowrap}.prose td{color:var(--text-secondary)}.prose tbody tr:last-child td{border-bottom:0}.prose code{padding:.125em .375em;border-radius:var(--radius-sm);background:var(--surface);color:var(--text);font-size:.875em}.prose pre{overflow-x:auto;padding:1.125rem 1.25rem;border:1px solid var(--border);border-radius:var(--radius);background:var(--surface-raised);font-size:.875rem;line-height:1.65;tab-size:2}.prose pre code{padding:0;border-radius:0;background:0 0;font-size:inherit}.code-block{position:relative}.code-block .highlight{background:0 0}.code-block .highlight,.code-block pre{margin:0}.code-block pre{padding-right:3rem}.copy-button{position:absolute;top:.5rem;right:.5rem;display:flex;align-items:center;justify-content:center;width:1.75rem;height:1.75rem;padding:0;border:0;border-radius:var(--radius-sm);background:var(--surface-raised);color:var(--text-muted);cursor:pointer;transition:color var(--transition)}.copy-button:hover,.copy-button:focus-visible{color:var(--text)}.copy-button .icon-check{display:none}.copy-button.is-copied{color:var(--text)}.copy-button.is-copied .icon-copy{display:none}.copy-button.is-copied .icon-check{display:block}.chroma{color:var(--text)}.chroma .c,.chroma .ch,.chroma .cm,.chroma .c1,.chroma .cs{color:var(--text-muted)}.chroma .cp,.chroma .cpf{color:var(--violet-mid)}.chroma .k,.chroma .kc,.chroma .kd,.chroma .kn,.chroma .kp,.chroma .kr,.chroma .kt{color:var(--violet)}.chroma .n,.chroma .nx,.chroma .nv,.chroma .vc,.chroma .vg,.chroma .vi,.chroma .vm,.chroma .py,.chroma .nl{color:var(--text)}.chroma .nf,.chroma .fm,.chroma .nc,.chroma .no,.chroma .nd,.chroma .ne,.chroma .nn,.chroma .ni{color:var(--violet-light)}.chroma .nt{color:var(--violet)}.chroma .na{color:var(--green-light)}.chroma .nb,.chroma .bp{color:var(--violet-mid)}.chroma .l,.chroma .ld,.chroma .s,.chroma .sa,.chroma .sb,.chroma .sc,.chroma .sd,.chroma .s2,.chroma .sh,.chroma .sx,.chroma .s1,.chroma .ss,.chroma .dl,.chroma .sr{color:var(--green-light)}.chroma .se,.chroma .si{color:var(--green)}.chroma .m,.chroma .mb,.chroma .mf,.chroma .mh,.chroma .mi,.chroma .il,.chroma .mo{color:var(--violet-light)}.chroma .o,.chroma .ow,.chroma .p{color:var(--text-secondary)}.chroma .gd{color:var(--text-muted)}.chroma .gi{color:var(--green-light)}.chroma .gh,.chroma .gu{color:var(--violet);font-weight:600}.chroma .gp{color:var(--text-muted)}.chroma .go,.chroma .ge{color:var(--text-secondary)}.chroma .gs{color:var(--text);font-weight:600}.chroma .gr,.chroma .gt{color:var(--text)}.chroma .err{color:var(--text);text-decoration:underline wavy var(--violet);text-underline-offset:.2em}.chroma .ln,.chroma .lnt{padding-right:1rem;color:var(--text-muted);user-select:none}.chroma .hl{display:block;margin:0 -1.25rem;padding:0 1.25rem;background:var(--code-highlight)}.prose sup{line-height:0;font-size:.75em}.prose .footnotes{margin-top:3rem;color:var(--text-muted);font-size:.9375rem}.prose .footnotes hr{margin:0 0 1.5rem}.prose .footnotes ol{padding-left:1.125rem}.prose .footnotes p{margin-top:0}.prose .footnote-backref{border-bottom:0}.list-header{margin-bottom:3rem}.list-title,.article-title{font-size:clamp(1.75rem,4vw,2.25rem);font-weight:600;line-height:1.15;letter-spacing:-.025em}.list-meta{margin-top:.875rem;color:var(--text-muted);font-family:var(--font-mono);font-size:.6875rem;letter-spacing:.12em;text-transform:uppercase}.list-lead{max-width:var(--measure);margin-top:1rem;color:var(--text-secondary);font-size:.9375rem;line-height:1.6}.list-header+.posts{margin-bottom:2rem}.tag-index{display:flex;flex-wrap:wrap;gap:.5rem}.tag-index a{display:inline-flex;align-items:baseline;gap:.5rem;padding:.375rem .75rem;border:1px solid transparent;border-radius:999px;background:var(--tag-fill);color:var(--violet-light);font-family:var(--font-mono);font-size:.75rem;transition:border-color var(--transition)}.tag-index a:hover,.tag-index a:focus-visible{border-color:var(--border-hover)}.tag-count{color:var(--text-muted);font-size:.6875rem}