@font-face{font-family:martian mono;src:url(/fonts/martian-mono.woff2)format("woff2");font-weight:100 800;font-display:swap}@font-face{font-family:hanken grotesk;src:url(/fonts/hanken-grotesk.woff2)format("woff2");font-weight:100 900;font-display:swap}@font-face{font-family:hanken grotesk;src:url(/fonts/hanken-grotesk-italic.woff2)format("woff2");font-weight:100 900;font-style:italic;font-display:swap}:root{--paper:#EDEFF3;--paper-2:#E1E5EC;--ink:#14161C;--ink-2:#4A5163;--night:#0F1116;--night-2:#171A21;--night-3:#232733;--text:#D9DEE6;--muted:#9AA3B2;--fn:#FF8A3D;--fn-deep:#C2520F;--kw:#6CB8FF;--kw-deep:#1F62C4;--str:#5ED3A5;--str-deep:#137A55;--num:#F2CC60;--mono:"Martian Mono",ui-monospace,SFMono-Regular,Menlo,monospace;--sans:"Hanken Grotesk",system-ui,sans-serif;--ease:cubic-bezier(.16,1,.3,1);--gut:clamp(1.25rem,4vw,4rem);--pad:max(var(--gut),calc((100% - 80rem)/2))}*,*::before,*::after{box-sizing:border-box}html{scroll-behavior:smooth;scroll-padding-top:4.5rem;-webkit-text-size-adjust:100%}@media(prefers-reduced-motion:reduce){html{scroll-behavior:auto}}body{margin:0;background:var(--night);color:var(--text);font:1.0625rem/1.6 var(--sans);font-kerning:normal;text-rendering:optimizeLegibility}::selection{background:var(--fn);color:var(--night)}html{scrollbar-color:var(--night-3)var(--night)}::-webkit-scrollbar{width:10px}::-webkit-scrollbar-track{background:var(--night)}::-webkit-scrollbar-thumb{background:var(--night-3);border-radius:10px;border:2px solid var(--night)}a{color:inherit;text-underline-offset:.22em;text-decoration-thickness:1px}:focus-visible{outline:2px solid var(--fn);outline-offset:3px;border-radius:4px}.icon{flex:none}[hidden]{display:none!important}.sr{position:absolute;width:1px;height:1px;overflow:hidden;clip-path:inset(50%);white-space:nowrap}.skip{position:fixed;left:1rem;top:-4rem;z-index:20;background:var(--fn);color:var(--night);padding:.6rem 1rem;font:600 .9rem var(--mono);border-radius:6px}.skip:focus{top:1rem}.bar{position:fixed;inset:0 0 auto;z-index:10;display:flex;align-items:center;gap:2rem;height:3.75rem;padding:0 var(--pad);font:500 .8125rem var(--mono);color:var(--ink);background:color-mix(in oklab,var(--paper) 82%,transparent);backdrop-filter:saturate(1.4)blur(10px);transition:background .4s var(--ease),color .4s var(--ease),box-shadow .4s}.bar.dark{color:var(--text);background:color-mix(in oklab,var(--night) 86%,transparent);box-shadow:0 1px 0 var(--night-3)}.bar-home{font-weight:700;text-decoration:none}.bar-home::after{content:"_";color:var(--fn);animation:blink 1.1s steps(1)infinite}.bar nav{display:flex;gap:1.5rem;margin-left:auto;overflow-x:auto;scrollbar-width:none}.bar nav a{text-decoration:none;opacity:.72;white-space:nowrap;padding:.4rem 0;transition:opacity .2s}.bar nav a:hover,.bar nav a[aria-current]{opacity:1}.bar nav a[aria-current]{color:var(--ink);text-decoration:underline 2px var(--fn)}.bar.dark nav a[aria-current]{color:var(--fn)}.bar-cv{display:inline-flex;align-items:center;gap:.45rem;text-decoration:none;border:1px solid;border-radius:999px;padding:.4rem .85rem;white-space:nowrap}.bar-cv:hover{background:var(--ink);color:var(--paper)}.bar.dark .bar-cv:hover{background:var(--text);color:var(--night)}@media(max-width:860px){.bar nav{display:none}.bar{justify-content:space-between}}.hero{position:relative;display:grid;grid-template-columns:minmax(0,.92fr)minmax(0,1.08fr);align-items:center;gap:clamp(1rem,3vw,3rem);min-height:calc(100svh - 4.5rem);padding:5.5rem var(--pad)2.5rem;background:var(--paper);color:var(--ink);overflow:hidden}.hero-copy{max-width:36rem}.hello{margin:0 0 .4rem;font:500 clamp(1rem,1.4vw,1.25rem)var(--mono);color:var(--ink-2)}h1{margin:0;font:700 clamp(2.4rem,4.9vw,4.75rem)/1.02 var(--mono);letter-spacing:-.035em;text-wrap:balance}.roles{margin:1.4rem 0 0;font:500 clamp(1.05rem,1.6vw,1.375rem)var(--mono);color:var(--ink-2);min-height:1.6em}.role{color:var(--kw-deep)}.caret{display:inline-block;width:.6ch;height:1.15em;margin-left:2px;vertical-align:-.18em;background:var(--fn);animation:blink 1.1s steps(1)infinite}@keyframes blink{50%{opacity:0}}.lede{margin:1.25rem 0 0;max-width:34rem;font-size:clamp(1.0625rem,1.3vw,1.25rem);line-height:1.55;color:var(--ink-2);text-wrap:pretty}.actions{display:flex;flex-wrap:wrap;gap:.75rem;margin-top:2rem}.btn{display:inline-flex;align-items:center;gap:.55rem;min-height:3rem;padding:0 1.35rem;border-radius:.65rem;font:600 .875rem var(--mono);text-decoration:none;transition:transform .25s var(--ease),box-shadow .25s var(--ease),background .2s,color .2s}.btn-primary,.body .btn-primary{background:var(--fn);color:#1a0e05;box-shadow:0 2px 4px rgb(0 0 0/.18),0 8px 18px -10px rgb(0 0 0/.45)}.btn-primary:hover,.body .btn-primary:hover{transform:translateY(-2px);color:#1a0e05;box-shadow:0 3px 6px rgb(0 0 0/.2),0 14px 26px -12px rgb(0 0 0/.55)}.btn-ghost{border:1.5px solid var(--ink);color:var(--ink)}.btn-ghost:hover{background:var(--ink);color:var(--paper)}.btn-ghost.on-dark{border-color:var(--night-3);color:var(--text)}.btn-ghost.on-dark:hover{background:var(--text);color:var(--night)}.meta{margin:1.5rem 0 0;font:500 .8125rem var(--mono);color:var(--ink-2)}.meta a{color:var(--str-deep);white-space:nowrap}.portrait{margin:0;position:relative;justify-self:end;width:min(100%,82svh)}.portrait svg{display:block;width:100%;height:auto;font:500 15px var(--mono);white-space:pre;cursor:crosshair;touch-action:pan-y}.portrait text{white-space:pre}.l1{fill:#9aa1b1}.l2{fill:var(--fn-deep)}.l3{fill:var(--kw-deep)}.l4{fill:var(--ink)}#lens-ring{fill:none;stroke:var(--fn);stroke-width:3}.portrait figcaption{margin-top:.5rem;text-align:right;font:500 .75rem var(--mono);color:var(--ink-2)}@media(hover:none){.portrait figcaption{visibility:hidden}}@media(max-width:860px){.hero{grid-template-columns:1fr;padding-top:5.75rem;min-height:auto}.portrait{justify-self:center;width:min(100%,30rem);order:-1;margin-bottom:-.5rem}.portrait figcaption{display:none}}.body{background:var(--night);position:relative}.sec{padding:clamp(4rem,9vw,7.5rem)var(--pad)0}.sec:first-child{padding-top:clamp(2.5rem,5vw,4rem)}.prompt{margin:0 0 2.25rem;font:600 clamp(1.125rem,2.2vw,1.75rem)var(--mono);letter-spacing:-.02em;color:var(--text);display:flex;flex-wrap:wrap;gap:0 .7ch;align-items:baseline}.ps{color:var(--fn)}.cmd{white-space:nowrap}.cm{color:var(--muted);font-weight:400;font-size:max(.62em,.8125rem);letter-spacing:0}h3{margin:0;font-family:var(--sans);font-weight:650;line-height:1.3;text-wrap:balance}.body a{color:var(--kw)}.body a:hover{color:var(--text)}.who{display:grid;grid-template-columns:minmax(0,1.15fr)minmax(0,.85fr);gap:clamp(2rem,5vw,5rem);align-items:start}.prose{margin:0;max-width:68ch;font-size:clamp(1.0625rem,1.35vw,1.25rem);line-height:1.65;text-wrap:pretty}.kv{margin:0;padding:1.5rem 1.6rem;background:var(--night-2);border-radius:.9rem;font:.8125rem/1.5 var(--mono);display:grid;gap:.7rem}.kv div{display:grid;grid-template-columns:6.5ch 1fr;gap:1ch}.kv dt{color:var(--kw)}.kv dt::after{content:":";color:var(--muted)}.kv dd{margin:0;color:var(--str);overflow-wrap:anywhere}.kv dd a{color:var(--str)}@media(max-width:860px){.who{grid-template-columns:1fr}}.legend{display:flex;gap:1.5rem;margin:-1rem 0 1.75rem;font:500 .8125rem var(--mono)}.lg.work{color:var(--fn)}.lg.edu{color:var(--str)}.graph{list-style:none;margin:0;padding:0;position:relative;--lane-w:1.75rem}.graph::before{content:"";position:absolute;top:.6rem;bottom:.6rem;width:2px;border-radius:2px;transform-origin:top}.graph::before{left:calc(var(--lane-w)*.5 - 1px);background:var(--fn)}.commit.edu::before,.commit.edu::after{content:"";position:absolute;left:calc(var(--lane-w)*.5 - 1px);width:calc(var(--lane-w) + 2px);border:0 solid var(--str)}.commit.edu::before{top:-1.2rem;height:1.5rem;border-width:2px 2px 0 0;border-top-right-radius:.8rem}.commit.edu::after{top:1.25rem;height:1.4rem;border-width:0 2px 2px 0;border-bottom-right-radius:.8rem}.commit.edu.current::before,.commit.edu:last-child::after{display:none}.commit{position:relative;padding:0 0 2.25rem calc(var(--lane-w)*2 + 1.5rem);max-width:58rem}.commit:last-child{padding-bottom:0}@media(min-width:1000px){.commit{display:grid;grid-template-columns:13rem minmax(0,1fr);column-gap:2.5rem;max-width:none}.c-meta{grid-row:1/span 3;flex-direction:column;align-items:flex-end;text-align:right;gap:.4rem;padding-top:.2rem}.commit>:not(.c-meta):not(.dot){grid-column:2}}.dot{position:absolute;top:.3rem;width:.95rem;height:.95rem;border-radius:50%;background:var(--night);border:2.5px solid var(--fn);left:calc(var(--lane-w)*.5 - .475rem)}.commit.edu .dot{border-color:var(--str);left:calc(var(--lane-w)*1.5 - .475rem)}.commit.current .dot{background:var(--fn)}.commit.edu.current .dot{background:var(--str)}.c-meta{margin:0 0 .35rem;font:500 .75rem var(--mono);color:var(--muted);display:flex;flex-wrap:wrap;gap:.35rem 1rem;align-items:center}.hash{color:var(--num)}.head{color:var(--night);background:var(--fn);padding:.1rem .45rem;border-radius:.3rem;font-weight:700}.head.tip{background:0 0;color:var(--str);box-shadow:inset 0 0 0 1.5px var(--str)}time,.yr{font-variant-numeric:tabular-nums}@media(max-width:999px){.c-meta time{flex-basis:100%}}.commit h3{font-size:clamp(1.0625rem,1.5vw,1.25rem);color:#f2f4f8}.org{margin:.15rem 0 0;color:var(--muted);font-size:.9375rem}.desc{margin:.5rem 0 0;max-width:68ch;color:var(--text);font-size:.9688rem}.papers{list-style:none;margin:0;padding:0;display:grid;gap:0}.paper{display:grid;grid-template-columns:5.5rem minmax(0,1fr);gap:1.5rem;padding:1.6rem 0;border-top:1px solid var(--night-3)}.paper:last-child{border-bottom:1px solid var(--night-3)}.paper .yr{font:700 1.375rem var(--mono);color:var(--num);letter-spacing:-.02em}.paper h3{font-size:clamp(1.0625rem,1.45vw,1.25rem);max-width:60ch}.paper h3 a{color:#f2f4f8;text-decoration:none;background:linear-gradient(var(--kw),var(--kw))0 100%/0 1px no-repeat;transition:background-size .35s var(--ease)}.paper h3 a:hover{background-size:100% 1px}.authors{margin:.45rem 0 0;color:var(--muted);font-size:.9375rem;max-width:75ch}.authors strong{color:var(--text);font-weight:650}.venue{margin:.3rem 0 0;font-size:.9375rem}.tag{font:600 .6875rem var(--mono);color:var(--num);border:1px solid;border-radius:999px;padding:.15rem .55rem;text-transform:uppercase;letter-spacing:.06em}.p-actions{display:flex;flex-wrap:wrap;gap:.5rem;margin-top:.9rem;align-items:flex-start}.chip{display:inline-flex;align-items:center;gap:.4rem;min-height:2.25rem;padding:0 .8rem;border-radius:.5rem;border:1px solid var(--night-3);background:var(--night-2);color:var(--text);font:500 .75rem var(--mono);text-decoration:none;cursor:pointer;transition:border-color .2s,color .2s}.body a.chip{color:var(--text)}.chip:hover{border-color:var(--kw);color:var(--kw)}.chip .icon{width:14px;height:14px}.chip.done{border-color:var(--str);color:var(--str)}.bib{flex-basis:100%}.bib summary{display:inline-flex;font:500 .75rem var(--mono);color:var(--muted);cursor:pointer;padding:.35rem 0}.bib summary:hover{color:var(--text)}.bib pre{margin:.5rem 0 0;padding:1rem 1.2rem;background:var(--night-2);border-radius:.6rem;font:.75rem/1.6 var(--mono);color:var(--str);overflow-x:auto;white-space:pre}.js .bib{display:none}.js .bib.open{display:block}@media(max-width:640px){.paper{grid-template-columns:1fr;gap:.4rem}}.dirs{columns:3 15rem;column-gap:3rem}.dir{break-inside:avoid;margin-bottom:2.25rem;--role:var(--str)}.dir:nth-child(1){--role:var(--fn)}.dir:nth-child(2){--role:var(--kw)}.dir:nth-child(3){--role:var(--num)}.dir:nth-child(4){--role:var(--str)}.dir h3{font:600 .9375rem var(--mono);color:var(--role);margin-bottom:.8rem}.dir ul{list-style:none;margin:0;padding:0;font:.8125rem/1.5 var(--mono);color:color-mix(in oklab,var(--role) 55%,var(--text));display:grid;gap:.45rem}.dir li{padding-left:3ch;text-indent:-3ch}.dir li::before{content:"├─ ";color:color-mix(in oklab,var(--role) 35%,var(--night-3))}.dir li:last-child::before{content:"└─ "}.hist{display:grid;gap:3rem}.hgroup h3{font:600 .9375rem var(--mono);color:var(--kw);margin-bottom:.9rem}.hgroup ol{list-style:none;margin:0;padding:0}.hgroup li{display:grid;grid-template-columns:4.5rem minmax(0,1.3fr)minmax(0,1fr);gap:1.25rem;padding:.75rem 0;border-top:1px solid var(--night-2);align-items:baseline}.hgroup .yr{font:600 .8125rem var(--mono);color:var(--num)}.h-t{font-weight:550}.h-o{color:var(--muted);font-size:.9375rem}@media(max-width:760px){.hgroup li{grid-template-columns:3.5rem 1fr}.h-o{grid-column:2}}.ping{padding-bottom:clamp(4rem,8vw,7rem)}.out{margin:0;font:.8125rem var(--mono);color:var(--muted);white-space:pre-wrap}.foot{border-top:1px solid var(--night-3);padding:1.5rem var(--gut);font:.75rem var(--mono);color:var(--muted);text-align:center}.foot p{margin:0}@media(prefers-reduced-motion:no-preference){.js .prompt .cmd{clip-path:inset(0 100% 0 0)}.js .prompt.in .cmd{clip-path:inset(0 0 0 0);transition:clip-path calc(var(--n)*55ms)steps(var(--n))}.js .prompt .cm{opacity:0}.js .prompt.in .cm{opacity:1;transition:opacity .5s var(--ease)calc(var(--n)*55ms + 120ms)}.js .graph::before{transform:scaleY(0)}.js .graph.in::before{transform:scaleY(1);transition:transform 1.6s var(--ease)}.js .graph .commit.edu::before,.js .graph .commit.edu::after{opacity:0}.js .graph.in .commit.edu::before,.js .graph.in .commit.edu::after{opacity:1;transition:opacity .6s var(--ease)calc(var(--i,0)*90ms + 300ms)}.js .graph .dot{transform:scale(0)}.js .graph.in .dot{transform:scale(1);transition:transform .45s var(--ease)calc(var(--i,0)*90ms + 150ms)}}@media(prefers-reduced-motion:reduce){.caret,.bar-home::after{animation:none}}