@font-face{font-family:IBM Plex Mono;font-style:normal;font-weight:400;font-display:swap;src:url(/_next/static/media/58f386aa6b1a2a92-s.woff2) format("woff2");unicode-range:u+0460-052f,u+1c80-1c8a,u+20b4,u+2de0-2dff,u+a640-a69f,u+fe2e-fe2f}@font-face{font-family:IBM Plex Mono;font-style:normal;font-weight:400;font-display:swap;src:url(/_next/static/media/011e180705008d6f-s.woff2) format("woff2");unicode-range:u+0301,u+0400-045f,u+0490-0491,u+04b0-04b1,u+2116}@font-face{font-family:IBM Plex Mono;font-style:normal;font-weight:400;font-display:swap;src:url(/_next/static/media/7ba5fb2a8c88521c-s.woff2) format("woff2");unicode-range:u+0102-0103,u+0110-0111,u+0128-0129,u+0168-0169,u+01a0-01a1,u+01af-01b0,u+0300-0301,u+0303-0304,u+0308-0309,u+0323,u+0329,u+1ea0-1ef9,u+20ab}@font-face{font-family:IBM Plex Mono;font-style:normal;font-weight:400;font-display:swap;src:url(/_next/static/media/92eeb95d069020cc-s.woff2) format("woff2");unicode-range:u+0100-02ba,u+02bd-02c5,u+02c7-02cc,u+02ce-02d7,u+02dd-02ff,u+0304,u+0308,u+0329,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:IBM Plex Mono;font-style:normal;font-weight:400;font-display:swap;src:url(/_next/static/media/d3ebbfd689654d3a-s.p.woff2) format("woff2");unicode-range:u+00??,u+0131,u+0152-0153,u+02bb-02bc,u+02c6,u+02da,u+02dc,u+0304,u+0308,u+0329,u+2000-206f,u+20ac,u+2122,u+2191,u+2193,u+2212,u+2215,u+feff,u+fffd}@font-face{font-family:IBM Plex Mono;font-style:normal;font-weight:500;font-display:swap;src:url(/_next/static/media/ef4d5661765d0e49-s.woff2) format("woff2");unicode-range:u+0460-052f,u+1c80-1c8a,u+20b4,u+2de0-2dff,u+a640-a69f,u+fe2e-fe2f}@font-face{font-family:IBM Plex Mono;font-style:normal;font-weight:500;font-display:swap;src:url(/_next/static/media/d29838c109ef09b4-s.woff2) format("woff2");unicode-range:u+0301,u+0400-045f,u+0490-0491,u+04b0-04b1,u+2116}@font-face{font-family:IBM Plex Mono;font-style:normal;font-weight:500;font-display:swap;src:url(/_next/static/media/e40af3453d7c920a-s.woff2) format("woff2");unicode-range:u+0102-0103,u+0110-0111,u+0128-0129,u+0168-0169,u+01a0-01a1,u+01af-01b0,u+0300-0301,u+0303-0304,u+0308-0309,u+0323,u+0329,u+1ea0-1ef9,u+20ab}@font-face{font-family:IBM Plex Mono;font-style:normal;font-weight:500;font-display:swap;src:url(/_next/static/media/99dcf268bda04fe5-s.woff2) format("woff2");unicode-range:u+0100-02ba,u+02bd-02c5,u+02c7-02cc,u+02ce-02d7,u+02dd-02ff,u+0304,u+0308,u+0329,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:IBM Plex Mono;font-style:normal;font-weight:500;font-display:swap;src:url(/_next/static/media/98e207f02528a563-s.p.woff2) format("woff2");unicode-range:u+00??,u+0131,u+0152-0153,u+02bb-02bc,u+02c6,u+02da,u+02dc,u+0304,u+0308,u+0329,u+2000-206f,u+20ac,u+2122,u+2191,u+2193,u+2212,u+2215,u+feff,u+fffd}@font-face{font-family:IBM Plex Mono;font-style:normal;font-weight:600;font-display:swap;src:url(/_next/static/media/73cb51aac9c97f90-s.woff2) format("woff2");unicode-range:u+0460-052f,u+1c80-1c8a,u+20b4,u+2de0-2dff,u+a640-a69f,u+fe2e-fe2f}@font-face{font-family:IBM Plex Mono;font-style:normal;font-weight:600;font-display:swap;src:url(/_next/static/media/d26bbd13d6b70f89-s.woff2) format("woff2");unicode-range:u+0301,u+0400-045f,u+0490-0491,u+04b0-04b1,u+2116}@font-face{font-family:IBM Plex Mono;font-style:normal;font-weight:600;font-display:swap;src:url(/_next/static/media/20535187d867b7b9-s.woff2) format("woff2");unicode-range:u+0102-0103,u+0110-0111,u+0128-0129,u+0168-0169,u+01a0-01a1,u+01af-01b0,u+0300-0301,u+0303-0304,u+0308-0309,u+0323,u+0329,u+1ea0-1ef9,u+20ab}@font-face{font-family:IBM Plex Mono;font-style:normal;font-weight:600;font-display:swap;src:url(/_next/static/media/5356a6a4f2c8c8d8-s.woff2) format("woff2");unicode-range:u+0100-02ba,u+02bd-02c5,u+02c7-02cc,u+02ce-02d7,u+02dd-02ff,u+0304,u+0308,u+0329,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:IBM Plex Mono;font-style:normal;font-weight:600;font-display:swap;src:url(/_next/static/media/db96af6b531dc71f-s.p.woff2) format("woff2");unicode-range:u+00??,u+0131,u+0152-0153,u+02bb-02bc,u+02c6,u+02da,u+02dc,u+0304,u+0308,u+0329,u+2000-206f,u+20ac,u+2122,u+2191,u+2193,u+2212,u+2215,u+feff,u+fffd}@font-face{font-family:IBM Plex Mono Fallback;src:local("Arial");ascent-override:76.16%;descent-override:20.43%;line-gap-override:0.00%;size-adjust:134.59%}.__className_595324{font-family:IBM Plex Mono,IBM Plex Mono Fallback;font-style:normal}.__variable_595324{--font-plex:"IBM Plex Mono","IBM Plex Mono Fallback"}:root{--paper:oklch(97.6% 0.013 92);--paper-2:oklch(96% 0.015 90);--paper-3:oklch(94% 0.017 88);--ink:oklch(28% 0.04 250);--ink-2:oklch(42% 0.032 245);--ink-3:oklch(52% 0.025 240);--line:oklch(89% 0.014 91);--line-strong:oklch(82% 0.016 89);--accent:oklch(40% 0.13 256);--accent-strong:oklch(31% 0.11 256);--accent-tint:oklch(94% 0.03 256);--on-accent:oklch(98.5% 0.008 256);--edu:oklch(58% 0.13 55);--edu-strong:oklch(48% 0.14 50);--spec-red:oklch(63% 0.21 28);--spec-orange:oklch(70% 0.18 45);--spec-amber:oklch(80% 0.15 78);--spec-green:oklch(68% 0.15 150);--spec-teal:oklch(66% 0.12 190);--spec-blue:oklch(58% 0.17 250);--spec-indigo:oklch(50% 0.19 275);--spectrum:linear-gradient(90deg,var(--spec-red),var(--spec-orange),var(--spec-amber),var(--spec-green),var(--spec-teal),var(--spec-blue),var(--spec-indigo));--font-mono:var(--font-plex),"IBM Plex Mono",ui-monospace,"SFMono-Regular",Menlo,monospace;--fs-display:clamp(1.5rem,1rem + 2.2vw,2.65rem);--fs-hero:clamp(1.6rem,1rem + 2.4vw,3rem);--fs-h2:clamp(1.35rem,1.05rem + 1.1vw,1.85rem);--fs-h3:clamp(1.05rem,0.98rem + 0.4vw,1.2rem);--fs-lead:clamp(1.05rem,1rem + 0.35vw,1.2rem);--fs-body:0.9375rem;--fs-sm:0.875rem;--fs-label:0.6875rem;--sp-1:0.25rem;--sp-2:0.5rem;--sp-3:0.75rem;--sp-4:1rem;--sp-6:1.5rem;--sp-8:2rem;--sp-12:3rem;--sp-16:4rem;--sp-24:6rem;--section-y:clamp(3rem,2.25rem + 3vw,5rem);--maxw:1080px;--radius:3px;--radius-lg:5px;--ease-out-expo:cubic-bezier(0.16,1,0.3,1);--ease-out-quart:cubic-bezier(0.25,1,0.5,1);--shadow-sm:0 1px 2px oklch(28% 0.04 250/0.04),0 6px 16px oklch(28% 0.04 250/0.05);--shadow-md:0 2px 4px oklch(28% 0.04 250/0.05),0 18px 40px oklch(28% 0.04 250/0.08)}*,:after,:before{box-sizing:border-box}html{scroll-behavior:smooth;-webkit-text-size-adjust:100%}#top,.section{scroll-margin-top:4.5rem}body{margin:0;color:var(--ink);font-family:var(--font-mono);font-size:var(--fs-body);line-height:1.65;font-variant-numeric:tabular-nums;font-feature-settings:"liga" 0,"calt" 0,"tnum";-webkit-font-smoothing:antialiased;text-rendering:optimizeLegibility}body,body.parchment{background-color:var(--paper)}body.parchment{position:relative;isolation:isolate;background-image:radial-gradient(ellipse 110% 75% at 12% 6%,oklch(99% .014 94/.55),transparent 58%),radial-gradient(ellipse 95% 70% at 92% 94%,oklch(95.5% .018 86/.4),transparent 52%),url("data:image/svg+xml,%3Csvg viewBox='0 0 256 256' xmlns='http://www.w3.org/2000/svg'%3E%3Cfilter id='n'%3E%3CfeTurbulence type='fractalNoise' baseFrequency='0.88' numOctaves='3' stitchTiles='stitch'/%3E%3C/filter%3E%3Crect width='100%25' height='100%25' filter='url(%23n)' opacity='0.22'/%3E%3C/svg%3E");background-size:auto,auto,200px 200px;background-attachment:fixed}body.parchment:after,body.parchment:before{content:"";position:fixed;inset:0;pointer-events:none;z-index:-1}body.parchment:before{--draft-inset:clamp(1.1rem,1.6vw,2rem);--draft-arm:1.75rem;--draft-edge:clamp(4.5rem,12vw,7.5rem);--draft-mark:oklch(76% 0.024 155/0.38);background:linear-gradient(var(--draft-mark),var(--draft-mark)) var(--draft-inset) var(--draft-inset) /var(--draft-arm) 1px no-repeat,linear-gradient(var(--draft-mark),var(--draft-mark)) var(--draft-inset) var(--draft-inset) /1px var(--draft-arm) no-repeat,linear-gradient(var(--draft-mark),var(--draft-mark)) calc(100% - var(--draft-inset) - var(--draft-arm)) var(--draft-inset) /var(--draft-arm) 1px no-repeat,linear-gradient(var(--draft-mark),var(--draft-mark)) calc(100% - var(--draft-inset)) var(--draft-inset) /1px var(--draft-arm) no-repeat,linear-gradient(var(--draft-mark),var(--draft-mark)) var(--draft-inset) calc(100% - var(--draft-inset)) /var(--draft-arm) 1px no-repeat,linear-gradient(var(--draft-mark),var(--draft-mark)) var(--draft-inset) calc(100% - var(--draft-inset) - var(--draft-arm)) /1px var(--draft-arm) no-repeat,linear-gradient(var(--draft-mark),var(--draft-mark)) calc(100% - var(--draft-inset) - var(--draft-arm)) calc(100% - var(--draft-inset)) /var(--draft-arm) 1px no-repeat,linear-gradient(var(--draft-mark),var(--draft-mark)) calc(100% - var(--draft-inset)) calc(100% - var(--draft-inset) - var(--draft-arm)) /1px var(--draft-arm) no-repeat,linear-gradient(var(--draft-mark),var(--draft-mark)) var(--draft-inset) var(--draft-inset) /var(--draft-edge) 1px no-repeat,linear-gradient(var(--draft-mark),var(--draft-mark)) calc(100% - var(--draft-inset) - var(--draft-edge)) var(--draft-inset) /var(--draft-edge) 1px no-repeat,linear-gradient(var(--draft-mark),var(--draft-mark)) var(--draft-inset) calc(100% - var(--draft-inset)) /var(--draft-edge) 1px no-repeat,linear-gradient(var(--draft-mark),var(--draft-mark)) calc(100% - var(--draft-inset) - var(--draft-edge)) calc(100% - var(--draft-inset)) /var(--draft-edge) 1px no-repeat,linear-gradient(var(--draft-mark),var(--draft-mark)) var(--draft-inset) var(--draft-inset) /1px var(--draft-edge) no-repeat,linear-gradient(var(--draft-mark),var(--draft-mark)) var(--draft-inset) calc(100% - var(--draft-inset) - var(--draft-edge)) /1px var(--draft-edge) no-repeat,linear-gradient(var(--draft-mark),var(--draft-mark)) calc(100% - var(--draft-inset)) var(--draft-inset) /1px var(--draft-edge) no-repeat,linear-gradient(var(--draft-mark),var(--draft-mark)) calc(100% - var(--draft-inset)) calc(100% - var(--draft-inset) - var(--draft-edge)) /1px var(--draft-edge) no-repeat}body.parchment:after{background-image:radial-gradient(circle,oklch(72% .022 155/.34) .55px,transparent 0);background-size:12px 12px;-webkit-mask-image:radial-gradient(ellipse 40% 40% at 0 100%,oklch(0 0 0) 0,transparent 74%),radial-gradient(ellipse 40% 40% at 100% 0,oklch(0 0 0) 0,transparent 74%);mask-image:radial-gradient(ellipse 40% 40% at 0 100%,oklch(0 0 0) 0,transparent 74%),radial-gradient(ellipse 40% 40% at 100% 0,oklch(0 0 0) 0,transparent 74%);mask-composite:add;-webkit-mask-composite:source-over;opacity:.92}h1,h2,h3{margin:0;font-weight:600;letter-spacing:0;text-wrap:balance}p{margin:0}a{color:var(--accent-strong);text-decoration:none}::selection{background:var(--accent-tint);color:var(--ink)}:focus-visible{outline:2px solid var(--accent);outline-offset:3px;border-radius:4px}.shell{width:100%;max-width:var(--maxw);margin-inline:auto;padding-inline:clamp(1.25rem,.5rem + 3vw,2.75rem)}.sr-only{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0,0,0,0);white-space:nowrap;border:0}.btn{--btn-bg:var(--accent);--btn-fg:var(--on-accent);display:inline-flex;align-items:center;gap:var(--sp-2);height:2.75rem;padding-inline:1.15rem;border-radius:var(--radius);border:1px solid var(--accent-strong);background:var(--btn-bg);color:var(--btn-fg);font-family:var(--font-mono);font-size:var(--fs-sm);font-weight:500;letter-spacing:.02em;text-transform:lowercase;cursor:pointer;transition:transform .18s var(--ease-out-quart),background .18s var(--ease-out-quart),box-shadow .18s var(--ease-out-quart),border-color .18s var(--ease-out-quart)}.btn--ghost{--btn-bg:var(--paper-2);--btn-fg:var(--ink);border-color:var(--line-strong)}.btn .arrow{transition:transform .24s var(--ease-out-expo)}.btn:hover{background:var(--accent-strong);box-shadow:0 0 0 1px var(--accent-strong),0 8px 20px oklch(31% .11 256/.2);transform:translateY(-1px)}.btn--ghost:hover{background:var(--paper-3);color:var(--ink);border-color:var(--accent-strong);box-shadow:0 0 0 1px var(--accent-strong)}.btn:hover .arrow{transform:translate(2px,-2px)}.btn:active{transform:translateY(0)}.nav{position:sticky;top:0;z-index:50;background:color-mix(in oklch,var(--paper) 92%,transparent);-webkit-backdrop-filter:saturate(1.2) blur(10px);backdrop-filter:saturate(1.2) blur(10px);border-bottom:1px solid var(--line);transition:border-color .3s var(--ease-out-quart)}.nav[data-scrolled=true]{border-bottom-color:var(--line-strong)}.nav__inner{display:flex;align-items:center;gap:var(--sp-6);height:4.5rem}.brand{display:inline-flex;align-items:center;gap:var(--sp-3);color:var(--ink);font-weight:600;letter-spacing:.02em;font-size:.9375rem}.brand__name{display:inline-flex;flex-direction:column;line-height:1}.brand__name small{display:inline-flex;align-items:center;gap:.4em;font-family:var(--font-mono);font-size:.6rem;font-weight:500;letter-spacing:.14em;text-transform:uppercase;color:var(--ink-3);margin-top:3px}.brand__pin{flex:none;color:var(--accent-strong)}.nav__links{display:flex;align-items:center;gap:var(--sp-6);margin-left:auto}.nav__link{color:var(--ink-2);font-size:var(--fs-sm);font-weight:500;letter-spacing:.02em;text-transform:lowercase;transition:color .18s var(--ease-out-quart)}.nav__link:hover{color:var(--accent-strong)}.nav__cta{display:inline-flex;align-items:center;gap:var(--sp-2);height:2.35rem;padding-inline:.85rem .75rem;border-radius:var(--radius);border:1px solid var(--line-strong);color:var(--ink);font-size:var(--fs-sm);font-weight:500;letter-spacing:.04em;text-transform:lowercase;background:var(--paper-2);transition:border-color .18s var(--ease-out-quart),box-shadow .18s var(--ease-out-quart),transform .18s var(--ease-out-quart)}.nav__cta .dot{width:7px;height:7px;border-radius:50%;background:var(--accent)}.nav__cta .arrow{color:var(--ink-3);transition:transform .22s var(--ease-out-expo)}.nav__cta:hover{border-color:var(--accent-strong);box-shadow:0 0 0 1px var(--accent-strong);transform:translateY(-1px)}.nav__cta:hover .arrow{transform:translate(2px,-2px);color:var(--accent)}.hero{position:relative;overflow:clip;padding-block:clamp(2.75rem,1.5rem + 5vw,5.5rem) var(--section-y)}.hero__layout{display:grid;grid-template-columns:1fr;row-gap:clamp(1.25rem,.75rem + 1.5vw,2rem);align-items:start}.hero__eyebrow{display:inline-flex;align-items:center;gap:var(--sp-2);font-size:var(--fs-label);font-weight:600;letter-spacing:.14em;text-transform:uppercase;color:var(--ink-3);margin-bottom:var(--sp-4)}.hero__eyebrow .dot{width:7px;height:7px;border-radius:50%;background:var(--accent)}.hero h1{font-size:var(--fs-hero);line-height:1.08;letter-spacing:0;max-width:none}.hero__role{display:block;font-size:clamp(.95rem,2.6vw,1.5rem);line-height:1.2;font-weight:600;color:var(--accent-strong);text-transform:lowercase;min-height:1.2em}.hero__typed{display:inline}@media (prefers-reduced-motion:no-preference){.hero__typed--static{display:none}}@media (prefers-reduced-motion:reduce){.hero__typed--animated{display:none}}.hero__typed-caret{display:inline-block;width:.58em;height:.92em;margin-left:.02em;vertical-align:-.06em;background:var(--accent-strong);animation:typedCaretBlink 1s step-end infinite}@keyframes typedCaretBlink{0%,to{opacity:1}50%{opacity:0}}.hero__lead-block{display:grid;gap:var(--sp-4);max-width:58ch}.hero__lead{margin:0;font-size:var(--fs-lead);line-height:1.55;color:var(--ink-2)}.hero__interests{margin:0;padding:0;list-style:none;display:grid;grid-template-columns:repeat(2,minmax(0,1fr));column-gap:var(--sp-4);row-gap:var(--sp-1)}.hero__interests li{display:flex;align-items:baseline;gap:.35em;min-width:0;font-size:var(--fs-sm);color:var(--ink-2)}.hero__interests li:before{content:"#";flex:0 0 1em;color:var(--accent-strong);font-weight:600}.hero__cta{margin-top:var(--sp-6);display:flex;flex-wrap:wrap;gap:var(--sp-3)}.section{padding-block:var(--section-y);border-top:1px solid var(--line)}.section__grid{display:grid;grid-template-columns:1fr;gap:clamp(1.5rem,1rem + 2vw,2.75rem)}.section__head{display:flex;flex-direction:column;gap:var(--sp-2)}.section__index{font-size:var(--fs-label);font-weight:600;letter-spacing:.14em;color:var(--accent-strong)}.section__title{font-size:var(--fs-h2);text-transform:lowercase;color:var(--ink)}.section__note{font-size:var(--fs-sm);color:var(--ink-3);max-width:42ch}.section__body{min-width:0}@media (min-width:860px){.section__grid{grid-template-columns:minmax(12rem,15rem) 1fr;align-items:start;gap:clamp(1.5rem,.5rem + 3vw,3.5rem)}.section__head{position:sticky;top:4.5rem}}.entries{display:grid;gap:0}.entry{display:grid;grid-template-columns:1fr;gap:var(--sp-1) var(--sp-4);padding-block:var(--sp-4);border-top:1px solid var(--line)}.entry:first-child{border-top:0;padding-top:0}.entry__date{font-size:var(--fs-sm);color:var(--accent-strong);font-weight:500;letter-spacing:.01em;white-space:nowrap}.entry__main{min-width:0}.entry__title{font-size:var(--fs-h3);font-weight:600;color:var(--ink);line-height:1.35}.entry__title a{color:var(--ink);border-bottom:1px solid transparent;transition:border-color .18s var(--ease-out-quart),color .18s var(--ease-out-quart)}.entry__title a:hover{color:var(--accent-strong);border-bottom-color:var(--accent-strong)}.entry__tag{font-size:var(--fs-sm);font-weight:400;color:var(--ink-3)}.entry__role{font-size:var(--fs-body);color:var(--ink-2);font-style:italic;margin-top:2px}.entry__collab{font-size:var(--fs-sm);color:var(--ink-3);margin-top:3px}.entry__desc{font-size:var(--fs-sm);color:var(--ink-2);margin-top:var(--sp-1);line-height:1.55}.entry__meta{font-size:var(--fs-sm);color:var(--ink-3)}.entry__thesis{font-size:var(--fs-sm);color:var(--ink-2);margin-top:var(--sp-1);line-height:1.5}.entry__thesis em{color:var(--ink);font-style:italic}@media (min-width:620px){.entry{grid-template-columns:7.5rem 1fr auto;align-items:baseline}.entry__date{grid-column:1}.entry__main{grid-column:2}.entry__meta{grid-column:3;text-align:right;white-space:nowrap}}.refs{gap:0;counter-reset:ref}.ref,.refs{display:grid}.ref{grid-template-columns:1fr;gap:var(--sp-1) var(--sp-4);padding-block:var(--sp-4);border-top:1px solid var(--line)}.ref:first-child{border-top:0;padding-top:0}.ref__date{font-size:var(--fs-sm);color:var(--accent-strong);font-weight:500;white-space:nowrap}.ref__body{line-height:1.55}.ref__body,.ref__content{min-width:0}.ref__poster{display:block;width:100%;aspect-ratio:11/8.5;min-height:18rem;margin-top:var(--sp-3);border:1px solid var(--line);border-radius:var(--radius);background:var(--paper-2)}.ref__title{color:var(--ink);font-weight:500}.ref__authors{color:var(--ink-2)}.ref__authors .me{color:var(--ink);font-weight:600}.ref__venue{color:var(--ink-3);font-style:italic}.ref__link{display:inline-flex;align-items:center;margin-left:.35em;vertical-align:baseline;color:var(--ink-3);text-decoration:none}.ref__link .arrow{transition:transform .22s var(--ease-out-expo)}.ref__link:hover{color:var(--accent-strong)}.ref__link:hover .arrow{transform:translate(2px,-2px)}.ref__badge{display:inline-block;margin-right:.5em;padding:.05rem .4rem;border:1px solid var(--accent-strong);border-radius:var(--radius);font-size:var(--fs-label);font-weight:600;letter-spacing:.08em;text-transform:uppercase;color:var(--accent-strong);vertical-align:.1em;white-space:nowrap}@media (min-width:620px){.ref{grid-template-columns:5rem 1fr;align-items:start}}.timeline{--tl-date:4rem;--tl-rail:1.5rem;--tl-gap:var(--sp-3);--tl-spine:var(--ink-2)}.timeline,.tl-era{position:relative}.tl-era--now{--tl-track:var(--accent-strong)}.tl-era--edu{--tl-track:var(--edu-strong)}.tl-era:before{content:"";position:absolute;inset-block:0;left:calc(var(--tl-date) + var(--tl-gap) + var(--tl-rail) / 2);width:2px;transform:translateX(-50%);background:var(--tl-spine);z-index:0}.timeline .tl-era:first-child:before{top:1.4em}.timeline .tl-era:last-child:before{bottom:2.6em}.tl{position:relative;display:grid;grid-template-columns:var(--tl-date) var(--tl-rail) minmax(0,1fr);column-gap:var(--tl-gap);align-items:start;padding-block:var(--sp-4)}.tl-era+.tl-era .tl:first-child{padding-top:var(--sp-8)}.tl__date{grid-column:1;justify-self:end;margin-top:.5em;font-size:var(--fs-sm);color:var(--ink-3);white-space:nowrap}.tl--branch .tl__date,.tl--milestone .tl__date{font-weight:500}.tl--branch .tl__date,.tl--milestone.tl--now .tl__date{color:var(--ink)}.tl--milestone.tl--degree .tl__date{color:var(--edu-strong)}.tl__node{grid-column:2;justify-self:center;align-self:start;margin-top:.5em;position:relative;z-index:1;width:13px;height:13px;border-radius:50%;box-shadow:0 0 0 4px var(--paper)}.tl--milestone.tl--now .tl__node{background:var(--ink)}.tl--milestone.tl--degree .tl__node{background:var(--edu-strong)}.tl__node--branch{width:9px;height:9px;background:var(--paper);border:2px solid var(--ink);box-shadow:0 0 0 3px var(--paper)}.tl-era--edu .tl--branch .tl__body{padding-inline-start:var(--sp-6)}.tl__body{grid-column:3;min-width:0}.tl__eyebrow{font-size:var(--fs-label);font-weight:600;letter-spacing:.14em;text-transform:uppercase;color:var(--tl-track);margin-bottom:3px}.tl__title{font-size:var(--fs-h3);font-weight:600;color:var(--ink);line-height:1.35}.tl__title a{color:inherit;text-decoration:none}.tl__title a:hover{color:var(--accent-strong);text-decoration:underline;text-underline-offset:2px}.tl--degree .tl__title{color:var(--edu-strong)}.tl__title--sm{font-size:var(--fs-body)}.tl__tag{font-size:var(--fs-sm);font-weight:400;color:var(--ink-3)}.tl__role{font-size:var(--fs-body);font-style:italic;color:var(--ink-2);margin-top:2px}.tl--branch .tl__role{font-size:var(--fs-sm)}.tl__collab{margin-top:3px}.tl__collab,.tl__meta-inline{font-size:var(--fs-sm);color:var(--ink-3)}.tl__meta-inline{margin-top:2px}.tl__thesis{font-size:var(--fs-sm);line-height:1.5;color:var(--ink-2);margin-top:var(--sp-2);max-width:60ch}.tl__thesis em{font-style:italic;color:var(--ink)}.tl__advisors{display:block;margin-top:2px}@media (max-width:520px){.timeline{--tl-date:3.25rem;--tl-rail:1.25rem}.tl__date{font-size:var(--fs-label)}}.projects{display:grid;gap:var(--sp-3);grid-template-columns:1fr}@media (min-width:680px){.projects{grid-template-columns:1fr 1fr}}.project{display:flex;flex-direction:column;gap:var(--sp-2);padding:var(--sp-4);border:1px solid var(--line);border-radius:var(--radius-lg);background:var(--paper-2);transition:border-color .18s var(--ease-out-quart),box-shadow .18s var(--ease-out-quart),transform .18s var(--ease-out-quart)}.project:hover{border-color:var(--accent-strong);box-shadow:var(--shadow-sm);transform:translateY(-2px)}.project__head{display:flex;align-items:baseline;justify-content:space-between;gap:var(--sp-3)}.project__name{font-size:var(--fs-h3);font-weight:600;color:var(--ink);display:inline-flex;align-items:center;gap:var(--sp-2)}.project:hover .project__name{color:var(--accent-strong)}.project__name .arrow{color:var(--ink-3);transition:transform .22s var(--ease-out-expo)}.project:hover .project__name .arrow{transform:translate(2px,-2px);color:var(--accent)}.project__stats{font-size:var(--fs-label);letter-spacing:.04em;text-transform:uppercase;color:var(--ink-3);white-space:nowrap}.project__desc{font-size:var(--fs-sm);color:var(--ink-2);line-height:1.55}.awards{display:grid;gap:0}.award{display:grid;grid-template-columns:1fr;gap:var(--sp-1) var(--sp-4);padding-block:var(--sp-3);border-top:1px solid var(--line)}.award:first-child{border-top:0;padding-top:0}.award__date{font-size:var(--fs-sm);color:var(--accent-strong);font-weight:500;white-space:nowrap}.award__name{color:var(--ink)}.award__grantor{display:block;margin-top:2px;color:var(--ink-3);font-style:italic}@media (min-width:620px){.award{grid-template-columns:6rem 1fr;align-items:baseline}}.skills{display:grid;gap:var(--sp-4)}.skill-row{display:grid;grid-template-columns:1fr;gap:var(--sp-1) var(--sp-4);padding-block:var(--sp-3);border-top:1px solid var(--line)}.skill-row:first-child{border-top:0;padding-top:0}.skill-row__label{font-size:var(--fs-label);font-weight:600;letter-spacing:.1em;text-transform:uppercase;color:var(--ink-3)}.skill-row__values{display:flex;flex-wrap:wrap;gap:var(--sp-2)}.chip{font-size:var(--fs-sm);color:var(--ink);padding:.15rem .6rem;border:1px solid var(--line-strong);border-radius:var(--radius);background:var(--paper)}@media (min-width:620px){.skill-row{grid-template-columns:8rem 1fr;align-items:baseline}}.contact__links{display:flex;flex-wrap:wrap;gap:var(--sp-3)}.tools__links{justify-content:center;margin-top:var(--sp-4)}.contact__link{display:inline-flex;align-items:center;gap:var(--sp-2);padding:var(--sp-2) var(--sp-4);border:1px solid var(--line-strong);border-radius:var(--radius);background:var(--paper-2);color:var(--ink);font-size:var(--fs-sm);text-transform:lowercase;transition:border-color .18s var(--ease-out-quart),box-shadow .18s var(--ease-out-quart),transform .18s var(--ease-out-quart)}.contact__link .arrow{color:var(--ink-3);transition:transform .22s var(--ease-out-expo)}.contact__link:hover{border-color:var(--accent-strong);box-shadow:0 0 0 1px var(--accent-strong);transform:translateY(-1px)}.contact__link:hover .arrow{transform:translate(2px,-2px);color:var(--accent)}.footer{border-top:1px solid var(--line);padding-block:var(--sp-12)}.footer__inner{display:flex;flex-wrap:wrap;align-items:center;justify-content:space-between;gap:var(--sp-4)}.footer__legal{margin:0;font-family:var(--font-mono)}.footer__legal,.footer__top{font-size:var(--fs-label);letter-spacing:.04em;color:var(--ink-3)}.footer__top{text-transform:uppercase}.footer__top:hover{color:var(--accent-strong)}.reveal{opacity:0;transform:translateY(18px);transition:opacity .7s var(--ease-out-expo),transform .7s var(--ease-out-expo);transition-delay:var(--reveal-delay,0s)}.reveal[data-in=true]{opacity:1;transform:none}@media (scripting:none){.reveal{opacity:1;transform:none}}@media (max-width:720px){.nav__links{gap:var(--sp-4)}.nav__link--hide-sm{display:none}}@media (prefers-reduced-motion:reduce){html{scroll-behavior:auto}.reveal{opacity:1;transform:none;transition:none}.hero__typed-caret{animation:none;opacity:1}*{transition-duration:.01ms!important}}