@font-face{font-family:__GeistMono_46451f;src:url(/_next/static/media/723e11e5093b8e80.p.woff2) format("woff2");font-display:swap;font-weight:100 900}.__className_46451f{font-family:__GeistMono_46451f,ui-monospace,SFMono-Regular,Roboto Mono,Menlo,Monaco,Liberation Mono,DejaVu Sans Mono,Courier New,monospace}.__variable_46451f{--font-geist-mono:"__GeistMono_46451f",ui-monospace,SFMono-Regular,Roboto Mono,Menlo,Monaco,Liberation Mono,DejaVu Sans Mono,Courier New,monospace}:root{color-scheme:light dark;--bg:light-dark(#f7f7f8,#070708);--text:light-dark(#16161a,#f0f0f2);--muted:light-dark(#54545c,#b4b4bd);--faint:light-dark(#9a9aa2,#57575f);--link:light-dark(#0a0ae0,#a99bff);--line:light-dark(rgba(0,0,0,.11),hsla(0,0%,100%,.12));--mono:var(--font-geist-mono),ui-monospace,"SF Mono","SFMono-Regular",Menlo,Monaco,"Cascadia Mono",Consolas,"Liberation Mono",monospace}*{box-sizing:border-box}body,html{margin:0}html{scroll-behavior:smooth;overflow-x:hidden}body{background:var(--bg);color:var(--text);font-family:var(--mono);font-size:clamp(12px,calc(9.8px + .62vw),14.5px);line-height:1.9;letter-spacing:0;padding:clamp(34px,7vw,64px) clamp(22px,6vw,44px) 0;-webkit-font-smoothing:antialiased;text-rendering:optimizeLegibility}::selection{background:var(--link);color:var(--bg)}a{color:var(--link);text-decoration:none}:focus-visible{outline:2px solid var(--link);outline-offset:3px;border-radius:2px}.hi{position:relative;color:var(--link);text-decoration:none;cursor:pointer;border-radius:3px;padding:0 .35ch;background:color-mix(in srgb,var(--link) 15%,transparent);transition:background .15s ease}.hi .wave{position:absolute;left:50%;bottom:100%;margin-bottom:6px;line-height:1;transform:translateX(-50%) scale(.25);transform-origin:bottom center;opacity:0;pointer-events:none;font-size:15em;transition:opacity .24s ease,transform .3s cubic-bezier(.34,1.56,.64,1)}.hi:focus-visible{background:color-mix(in srgb,var(--link) 28%,transparent)}.hi:focus-visible .wave{opacity:1;transform:translateX(-50%) scale(1);animation:wave-hand .6s ease-in-out infinite}@media (hover:hover){.hi:hover{background:color-mix(in srgb,var(--link) 28%,transparent)}.hi:hover .wave{opacity:1;transform:translateX(-50%) scale(1);animation:wave-hand .6s ease-in-out infinite}}@keyframes wave-hand{0%,to{rotate:-14deg}50%{rotate:16deg}}#contact{scroll-margin-top:24px}.doc{max-width:120ch;margin:0 auto;animation:fade .5s ease both}@keyframes fade{0%{opacity:0}to{opacity:1}}.bar{display:flex;align-items:baseline;justify-content:space-between;gap:1ch 2ch;margin-bottom:40px;flex-wrap:wrap}.bar .path{color:var(--faint)}.bar .ctrls{display:flex;gap:2ch}.tog{font:inherit;border:0;background:none;padding:0;cursor:pointer;color:var(--link)}.title{font-size:19px;font-weight:600;letter-spacing:.01em;text-transform:uppercase;margin:0;line-height:1.3}.title:before{content:"# ";color:var(--faint);font-weight:400}.cur{display:inline-block;width:.55ch;height:1em;margin-left:.2ch;vertical-align:-.12em;background:var(--text);animation:blink 1.15s steps(1) infinite}@keyframes blink{0%,52%{opacity:1}52.01%,to{opacity:0}}.lede{margin:14px 0 0;color:var(--muted)}.head,.lede{max-width:60ch}.head{margin:16px 0 0;color:var(--text);font-size:16.5px;line-height:1.6}.sub{margin:9px 0 0;color:var(--muted);max-width:64ch}.sub .text{color:var(--text)}.hr{color:var(--faint);margin:40px 0;-webkit-user-select:none;-moz-user-select:none;user-select:none;letter-spacing:.3em}.h{font-size:15px;font-weight:700;text-transform:uppercase;letter-spacing:.05em;margin:0 0 18px}.h:before{content:"## ";color:var(--faint);font-weight:400}.list{list-style:none;margin:0;padding:0}.list>li{position:relative;padding-left:2.4ch;color:var(--text)}.list>li:before{content:"-";position:absolute;left:0;color:var(--faint)}.list>li+li{margin-top:12px}.list .note{color:var(--muted)}.belief{margin:0 0 28px}.belief .claim{color:var(--text)}.belief .claim:before{content:"- ";color:var(--faint)}.belief ul{list-style:none;margin:8px 0 0;padding:0}.belief ul li{position:relative;padding-left:4ch;color:var(--muted);margin:7px 0}.belief ul li:before{content:"·";position:absolute;left:2ch;color:var(--faint)}.lk{white-space:nowrap}.lk:before{content:"[";color:var(--faint)}.lk:after{content:"]";color:var(--faint)}.lk:hover{background:var(--link)}.lk:hover,.lk:hover:after,.lk:hover:before{color:var(--bg)}.exp{display:grid;grid-template-columns:12ch 1fr;grid-gap:16px 1.6ch;gap:16px 1.6ch}.exp .yr{color:var(--muted)}.exp .role{line-height:1.55}.exp .role .at{color:var(--muted)}.proj{display:grid;grid-template-columns:max-content 1fr;grid-gap:16px 2.2ch;gap:16px 2.2ch;align-items:baseline}.proj .pn{white-space:nowrap}.proj .pd{color:var(--muted);line-height:1.55}.posts{list-style:none;margin:0;padding:0}.posts li{display:flex;align-items:baseline;gap:1.2ch}.posts li+li{margin-top:13px}.lead{flex:1 1;border-bottom:1px dotted var(--faint);transform:translateY(-3px)}.date{color:var(--muted);white-space:nowrap}.kv{display:grid;grid-template-columns:12ch 1fr;grid-gap:11px 1.6ch;gap:11px 1.6ch}.kv .k{text-transform:uppercase}.kv .k,.ps{color:var(--muted)}.ps{margin-top:4px;line-height:1.7;max-width:64ch}.ps .end{color:var(--link)}.foot{margin-top:34px;color:var(--muted)}.post{scroll-margin-top:24px}.postTitle{font-size:17px;font-weight:700;margin:0}.postTitle:before{content:"## ";color:var(--faint);font-weight:400}.postMeta{margin:7px 0 0;color:var(--muted);font-size:13px}.backTop{display:inline-block;margin-top:22px;color:var(--muted)}.backTop:hover{color:var(--link)}.postFoot{display:flex;align-items:center;justify-content:space-between;gap:12px 20px;margin-top:26px;flex-wrap:wrap}.postFoot .backTop{margin-top:0}.readWrap{display:inline-flex;align-items:center;gap:1.4ch;flex-wrap:wrap}.readBtn{font:inherit;border:0;background:none;padding:0;cursor:pointer;color:var(--muted);transition:color .15s ease}.readBtn:hover{color:var(--text)}.readBtn .rbox{display:inline-block;margin-right:.5ch}.readBtn .rbox:before{content:"[";color:var(--faint)}.readBtn .rbox:after{content:"]";color:var(--faint)}.readBtn[data-read=true],.readBtn[data-read=true] .rbox:after,.readBtn[data-read=true] .rbox:before{color:var(--link)}.readBtn[data-pop=true] .rbox{animation:read-pop .42s ease}@keyframes read-pop{0%{transform:scale(1)}35%{transform:scale(1.6) rotate(-10deg)}70%{transform:scale(.95) rotate(4deg)}to{transform:scale(1)}}.readMsg{color:var(--faint);font-size:.92em;animation:read-msg .3s ease both}@keyframes read-msg{0%{opacity:0;transform:translateX(-5px)}to{opacity:1;transform:none}}.prose{margin-top:18px}.prose p{margin:0 0 1.15em;color:var(--text);line-height:1.9}.prose p:last-child{margin-bottom:0}.prose em{font-style:italic}.prose strong{font-weight:700}.prose a{color:var(--link);text-decoration:underline;text-underline-offset:2px}.prose h2{margin:1.6em 0 .5em;font-size:16px;font-weight:700;text-transform:uppercase;letter-spacing:.04em}.prose h2:before{content:"## ";color:var(--faint);font-weight:400}.prose h3{margin:1.4em 0 .4em;font-size:15px;font-weight:700}.prose h3:before{content:"### ";color:var(--faint);font-weight:400}.prose ol,.prose ul{margin:0 0 1.15em;padding-left:2.6ch}.prose li{margin:.35em 0}.prose blockquote{margin:1.2em 0;padding:1px 0 1px 2ch;border-left:2px solid var(--faint);color:var(--muted)}.prose blockquote p{margin:0 0 .4em}.prose blockquote p:last-child{margin-bottom:0}.prose :not(pre)>code{padding:.1em .4em;border-radius:4px;background:color-mix(in srgb,var(--text) 10%,transparent);font-size:.9em}.prose pre{margin:1.3em 0;padding:14px 16px;overflow-x:auto;border:1px solid var(--line);border-radius:8px;background:color-mix(in srgb,var(--text) 5%,transparent);font-size:13px;line-height:1.6}.prose hr{margin:2em 0;border:0;border-top:1px solid var(--line)}.prose img{width:100%;margin:1.2em 0;border-radius:6px}@media (max-width:600px){body{line-height:1.8;padding:28px 20px 0}.doc{max-width:100%}.hr{margin:32px 0}.belief ul li{padding-left:2.6ch}.belief ul li:before{left:.7ch}.exp{grid-template-columns:1fr;gap:0}.exp .yr{margin-top:18px}.exp .yr:first-child{margin-top:0}.kv{grid-template-columns:1fr;gap:0}.kv .k{margin-top:14px}.kv .k:first-child{margin-top:0}.proj{grid-template-columns:1fr;gap:0}.proj .pn{margin-top:18px}.proj .pn:first-child{margin-top:0}.proj .pd{margin:3px 0 0 2.4ch}.posts li{flex-wrap:wrap;gap:0 1ch}.lead{display:none}}@media (prefers-reduced-motion:reduce){.cur,.doc{animation:none}.hi:focus-visible .wave,.hi:hover .wave{animation:none}.readBtn[data-pop=true] .rbox{animation:none}}