@font-face{font-family:Geist;src:url(../fonts/geist.woff2)format("woff2");font-weight:100 900;font-display:swap}@font-face{font-family:geist mono;src:url(../fonts/geist-mono.woff2)format("woff2");font-weight:100 900;font-display:swap}:root{color-scheme:dark;--bg:#0a0a0a;--fg:#ededed;--muted:#a1a1a1;--subtle:#808080;--accent:#4da3ff;--hairline:#262626;--mono:"Geist Mono", monospace}*{box-sizing:border-box}html{background:var(--bg);color:var(--fg);font-family:Geist,system-ui,sans-serif;-webkit-font-smoothing:antialiased;scrollbar-gutter:stable}body{margin:0;min-height:100svh;font-size:16px;line-height:1.75}a{color:var(--accent);text-decoration:none;transition:color .15s}a:hover{color:#80bdff}a:active{opacity:.7}:focus-visible{outline:2px solid var(--accent);outline-offset:4px}::selection{background:#4da3ff4d}.skip{position:fixed;top:8px;left:8px;transform:translateY(-150%);background:var(--bg);padding:12px;z-index:10}.skip:focus{transform:none}.shell{max-width:1200px;margin:auto;padding:0 max(24px,env(safe-area-inset-left))}.nav{display:flex;justify-content:space-between;align-items:center;gap:16px;padding:24px 0;font-size:14px}.nav a{color:var(--muted);display:inline-flex;align-items:center;min-height:44px}.nav a:hover,.nav a[aria-current]{color:var(--fg)}.nav nav{display:flex;gap:24px}.nav>a{white-space:nowrap}.nav>a span{margin-left:8px;color:var(--subtle)}main{min-height:65svh}.hero{position:relative;padding:clamp(40px,7vw,88px)0;margin-bottom:40px}.hero img{position:absolute;inset:0;width:100%;height:100%;object-fit:cover;pointer-events:none;mask-image:radial-gradient(70% 60% at 50% 50%,#000 20%,transparent 72%)}h1{font-size:clamp(30px,3.8vw,48px);line-height:1.2;letter-spacing:-.04em;font-weight:600;text-wrap:balance;margin:0}.hero h1{position:relative}.dot{color:var(--accent)}.footer{display:flex;justify-content:space-between;gap:24px;border-top:1px solid var(--hairline);padding:24px 0;margin-top:88px;font:13px/28px var(--mono)}.footer a{color:var(--subtle);display:inline-flex;min-height:44px;align-items:center}.footer a:hover{color:var(--accent)}.footer>nav{display:flex;gap:24px}.section-heading{display:flex;gap:24px;align-items:baseline;border-bottom:1px solid var(--hairline);padding-bottom:24px;margin-bottom:24px}.section-heading h2,.label{font:13px/1.75 var(--mono);color:var(--subtle);margin:0}.section-heading>span{color:var(--muted);font-size:14px}.writing-list{list-style:none;padding:0;margin:0;max-width:880px}.writing-list li{display:grid;grid-template-columns:144px minmax(0,1fr);gap:24px;padding:24px 0;border-bottom:1px solid var(--hairline)}.writing-list li:first-child{padding-top:0}.writing-list time,.reading,.meta,.back{font:13px/28px var(--mono);color:var(--subtle)}.writing-list .entry-title{font-size:16px;line-height:28px;font-weight:500;margin:0;overflow-wrap:anywhere}.writing-list .entry-title a{color:var(--fg)}.writing-list .entry-title a:hover{color:var(--accent)}.writing-list p{color:var(--muted);margin:4px 0 8px;line-height:1.75}.reading{font-size:12px}.article{max-width:720px;margin:40px auto 0}.back{display:inline-flex;min-height:44px}.article-header{margin:32px 0 40px}.article-header h1{font-size:clamp(30px,4vw,44px)}.meta{display:flex;flex-wrap:wrap;gap:24px;margin-top:24px}.dek{font-size:18px;color:var(--muted);margin:24px 0 0}.toc{padding:16px 0;border-block:1px solid var(--hairline);margin-bottom:32px;color:var(--muted)}summary{cursor:pointer}.toc a{font-size:14px}.tags{display:flex;flex-wrap:wrap;gap:16px;margin-top:40px;font:13px/28px var(--mono)}.post-nav{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:32px;border-top:1px solid var(--hairline);margin-top:40px;padding-top:24px}.post-nav a{overflow-wrap:anywhere}.post-nav span{display:block;font:13px/28px var(--mono);color:var(--subtle)}.prose{color:#d1d1d1;overflow-wrap:anywhere}.prose p{margin:0 0 24px}.prose h2{font-size:24px;letter-spacing:-.02em;line-height:1.4;margin:48px 0 16px;color:var(--fg)}.prose h3{font-size:19px;margin:32px 0 16px;color:var(--fg)}.prose a{text-decoration:underline;text-underline-offset:4px}.prose img{max-width:100%;height:auto;display:block;margin:32px auto}.prose ul,.prose ol{padding-left:24px;margin:0 0 24px}.prose li{margin:8px 0}.prose blockquote{border-left:2px solid var(--hairline);margin:24px 0;padding:8px 24px;color:var(--muted)}.prose blockquote p:last-child{margin:0}.prose code{font-family:var(--mono);font-size:.85em;background:#151515;padding:2px 5px;border-radius:4px}.prose pre{max-width:100%;overflow:auto;padding:24px;background:#111;border:1px solid var(--hairline);border-radius:6px;line-height:1.65}.prose pre code{padding:0;background:0 0;font-size:13px}.prose table{display:block;overflow:auto;border-collapse:collapse;max-width:100%;margin:24px 0}.prose th,.prose td{padding:12px;border:1px solid var(--hairline)}.prose hr{border:0;border-top:1px solid var(--hairline);margin:40px 0}.page-heading{padding:48px 0;margin-bottom:16px}.archive-year{margin-bottom:40px}.archive-year>.label{margin-bottom:24px}.term-list,.search-results{padding:0;list-style:none;max-width:720px}.term-list li,.search-results li{border-bottom:1px solid var(--hairline);padding:16px 0}.term-list a{display:flex;justify-content:space-between}.term-list span{color:var(--subtle);font-family:var(--mono)}input[type=search]{display:block;width:100%;max-width:720px;font:inherit;color:var(--fg);background:#111;border:1px solid var(--hairline);border-radius:6px;padding:16px;margin-top:8px}#search-status{font-size:14px;color:var(--muted)}.bg{color:#f8f8f2;background-color:#272822}.chroma{color:#f8f8f2;background-color:#272822;-webkit-text-size-adjust:none}.chroma .err{color:#960050;background-color:#1e0010}.chroma .lnlinks{outline:none;text-decoration:none;color:inherit}.chroma .lntd{vertical-align:top;padding:0;margin:0;border:0}.chroma .lntable{border-spacing:0;padding:0;margin:0;border:0}.chroma .hl{background-color:#3c3d38}.chroma .lnt{white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f}.chroma .ln{white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f}.chroma .line{display:flex}.chroma .k{color:#66d9ef}.chroma .kc{color:#66d9ef}.chroma .kd{color:#66d9ef}.chroma .kn{color:#f92672}.chroma .kp{color:#66d9ef}.chroma .kr{color:#66d9ef}.chroma .kt{color:#66d9ef}.chroma .na{color:#a6e22e}.chroma .nc{color:#a6e22e}.chroma .no{color:#66d9ef}.chroma .nd{color:#a6e22e}.chroma .ne{color:#a6e22e}.chroma .nx{color:#a6e22e}.chroma .nt{color:#f92672}.chroma .nf{color:#a6e22e}.chroma .fm{color:#a6e22e}.chroma .l{color:#ae81ff}.chroma .ld{color:#e6db74}.chroma .s{color:#e6db74}.chroma .sa{color:#e6db74}.chroma .sb{color:#e6db74}.chroma .sc{color:#e6db74}.chroma .dl{color:#e6db74}.chroma .sd{color:#e6db74}.chroma .s2{color:#e6db74}.chroma .se{color:#ae81ff}.chroma .sh{color:#e6db74}.chroma .si{color:#e6db74}.chroma .sx{color:#e6db74}.chroma .sr{color:#e6db74}.chroma .s1{color:#e6db74}.chroma .ss{color:#e6db74}.chroma .m{color:#ae81ff}.chroma .mb{color:#ae81ff}.chroma .mf{color:#ae81ff}.chroma .mh{color:#ae81ff}.chroma .mi{color:#ae81ff}.chroma .il{color:#ae81ff}.chroma .mo{color:#ae81ff}.chroma .o{color:#f92672}.chroma .ow{color:#f92672}.chroma .or{color:#f92672}.chroma .p{color:#f8f8f2}.chroma .c{color:#75715e}.chroma .ch{color:#75715e}.chroma .cm{color:#75715e}.chroma .c1{color:#75715e}.chroma .cs{color:#75715e}.chroma .cp{color:#75715e}.chroma .cpf{color:#75715e}.chroma .gd{color:#f92672}.chroma .ge{font-style:italic}.chroma .gi{color:#a6e22e}.chroma .gs{font-weight:700}.chroma .gu{color:#75715e}@media(min-width:1024px){.shell{padding-inline:48px}.hero{margin-top:16px}.section-heading h2{width:144px;flex-shrink:0}}@media(max-width:600px){.shell{padding-inline:20px}.nav{gap:8px;font-size:12px}.nav nav{gap:12px}.nav>a span{display:none}.hero{margin-bottom:24px}.section-heading{display:block}.section-heading>span{display:block;margin-top:8px}.writing-list li{grid-template-columns:1fr;gap:4px;padding:24px 0}.writing-list time{font-size:12px}.footer{margin-top:56px;gap:16px;font-size:12px}.footer>nav{gap:16px}.article{margin-top:24px}.article-header{margin-top:24px}.post-nav{gap:20px}}@media(prefers-reduced-motion:reduce){*{transition:none!important}}