@import"https://fonts.googleapis.com/css2?family=Instrument+Sans:ital,wght@0,400..700;1,400..700&family=JetBrains+Mono:wght@400;500&display=swap";:root{--bg-0: #0a0a0b;--bg-1: #111113;--bg-2: #18181b;--bg-3: #1f1f23;--fg-0: #f2f2f0;--fg-1: #a4a4ab;--fg-2: #67676f;--line-1: rgba(255,255,255,.08);--line-2: rgba(255,255,255,.16);--accent: oklch(.8 .125 75);--accent-strong: oklch(.86 .13 78);--accent-dim: oklch(.68 .11 72);--accent-tint: oklch(.8 .125 75 / .1);--accent-line: oklch(.8 .125 75 / .35);--surface-page: var(--bg-0);--surface-card: var(--bg-1);--surface-hover: var(--bg-2);--surface-active: var(--bg-3);--surface-code: #101012;--text-body: var(--fg-0);--text-secondary: var(--fg-1);--text-meta: var(--fg-2);--text-link: var(--accent);--text-link-hover: var(--accent-strong);--border-hairline: var(--line-1);--border-strong: var(--line-2);--focus-ring: var(--accent-line);--shadow-card: 0 0 0 1px var(--line-1);--shadow-pop: 0 0 0 1px var(--line-2), 0 16px 40px rgba(0,0,0,.5);--scrim-photo: linear-gradient(180deg, rgba(10,10,11,0) 40%, rgba(10,10,11,.78) 100%);color-scheme:dark}[data-theme=light]{--bg-0: #fafaf9;--bg-1: #ffffff;--bg-2: #f1f1ef;--bg-3: #e9e9e6;--fg-0: #17171a;--fg-1: #5b5b62;--fg-2: #8e8e95;--line-1: rgba(20,20,22,.09);--line-2: rgba(20,20,22,.18);--accent: oklch(.6 .125 70);--accent-strong: oklch(.52 .125 68);--accent-dim: oklch(.68 .11 72);--accent-tint: oklch(.6 .125 70 / .09);--accent-line: oklch(.6 .125 70 / .35);--surface-code: #131315;--shadow-card: 0 0 0 1px var(--line-1), 0 1px 2px rgba(20,20,22,.04);--shadow-pop: 0 0 0 1px var(--line-1), 0 16px 40px rgba(20,20,22,.12);--scrim-photo: linear-gradient(180deg, rgba(10,10,11,0) 40%, rgba(10,10,11,.65) 100%);color-scheme:light}:root{--font-sans: "Instrument Sans", -apple-system, "Segoe UI", sans-serif;--font-mono: "JetBrains Mono", ui-monospace, "SF Mono", monospace;--fs-caption: 13px;--fs-small: 14px;--fs-body: 16px;--fs-prose: 17px;--fs-h4: 20px;--fs-h3: 25px;--fs-h2: 31px;--fs-h1: 44px;--fs-display: 60px;--fs-hero: clamp(44px, 6.5vw, 76px);--fw-regular: 400;--fw-medium: 500;--fw-semibold: 600;--ls-hero: -.035em;--ls-heading: -.025em;--ls-subhead: -.015em;--ls-body: -.006em;--ls-caps: .08em;--lh-display: 1.02;--lh-heading: 1.15;--lh-tight: 1.35;--lh-body: 1.5;--lh-prose: 1.7;--lh-code: 1.65;--fs-code: 14px;--measure: 65ch}:root{--sp-1: 4px;--sp-2: 8px;--sp-3: 12px;--sp-4: 16px;--sp-5: 24px;--sp-6: 32px;--sp-7: 48px;--sp-8: 64px;--sp-9: 96px;--sp-10: 128px;--sp-11: 160px;--r-sm: 6px;--r-md: 10px;--r-lg: 14px;--r-full: 999px;--container: 1096px;--container-pad: 24px;--nav-h: 64px;--ease: cubic-bezier(.25, .1, .25, 1);--ease-out: cubic-bezier(.16, 1, .3, 1);--dur-fast: .14s;--dur-med: .24s;--dur-reveal: .6s}body{margin:0;background:var(--surface-page);color:var(--text-body);font-family:var(--font-sans);font-size:var(--fs-body);line-height:var(--lh-body);letter-spacing:var(--ls-body);-webkit-font-smoothing:antialiased}a{color:var(--text-link);text-decoration:none;transition:color var(--dur-fast) var(--ease)}a:hover{color:var(--text-link-hover)}::selection{background:var(--accent-tint);color:var(--text-body)}code,pre,kbd{font-family:var(--font-mono)}*{box-sizing:border-box}.page{min-height:100vh;display:flex;flex-direction:column;background:var(--surface-page)}main{flex:1;width:100%;max-width:var(--container);margin:0 auto;padding:0 var(--container-pad)}.nav{position:sticky;top:0;z-index:50;background:color-mix(in srgb,var(--bg-0) 84%,transparent);backdrop-filter:blur(12px);-webkit-backdrop-filter:blur(12px);border-bottom:1px solid var(--line-1)}.nav-inner{max-width:var(--container);margin:0 auto;padding:0 var(--container-pad);height:var(--nav-h);display:flex;align-items:center;justify-content:space-between}.nav-brand{font-weight:var(--fw-semibold);font-size:16px;letter-spacing:-.02em;color:var(--fg-0)}.nav-links{display:flex;gap:28px}.nav-links a{font-size:var(--fs-small);color:var(--fg-1);position:relative}.nav-links a:hover{color:var(--fg-0)}.nav-links a[aria-current=page]{color:var(--fg-0);font-weight:var(--fw-medium)}.nav-links a[aria-current=page]:after{content:"";position:absolute;left:50%;transform:translate(-50%);bottom:-9px;width:4px;height:4px;border-radius:var(--r-full);background:var(--accent)}.footer{border-top:1px solid var(--line-1);margin-top:var(--sp-9)}.footer-inner{max-width:var(--container);margin:0 auto;padding:var(--sp-6) var(--container-pad);display:flex;align-items:center;justify-content:space-between;flex-wrap:wrap;gap:var(--sp-4)}.footer-note{font-size:var(--fs-caption);color:var(--fg-2)}.footer-links{display:flex;gap:24px}.footer-links a{font-size:var(--fs-caption);color:var(--fg-1)}.footer-links a:hover{color:var(--fg-0)}.ext{margin-left:3px;color:var(--fg-2)}.section-label{display:flex;align-items:center;gap:var(--sp-4)}.section-label span:first-child{font-size:12px;font-weight:var(--fw-medium);text-transform:uppercase;letter-spacing:var(--ls-caps);color:var(--fg-2);white-space:nowrap}.section-label .rule{flex:1;height:1px;background:var(--line-1)}.tag{display:inline-flex;align-items:center;padding:3px 11px;border-radius:var(--r-full);font-size:var(--fs-caption);line-height:1.5;border:1px solid var(--line-1);color:var(--fg-1);transition:color var(--dur-fast) var(--ease),border-color var(--dur-fast) var(--ease)}a.tag:hover{color:var(--fg-0);border-color:var(--line-2)}.tag.active{border-color:var(--accent-line);color:var(--accent);background:var(--accent-tint)}.btn{display:inline-flex;align-items:center;gap:6px;padding:9px 18px;border-radius:var(--r-md);font:500 var(--fs-small)/1 var(--font-sans);letter-spacing:var(--ls-body);cursor:pointer;transition:background var(--dur-fast) var(--ease),color var(--dur-fast) var(--ease);border:1px solid transparent}.btn-sm{padding:6px 14px}.btn-primary{background:var(--fg-0);color:var(--bg-0)}.btn-primary:hover{background:var(--fg-1);color:var(--bg-0)}.btn-secondary{background:transparent;color:var(--fg-0);border-color:var(--line-2)}.btn-secondary:hover{background:var(--surface-hover);color:var(--fg-0)}.btn-ghost{background:transparent;color:var(--fg-1)}.btn-ghost:hover{background:var(--surface-hover);color:var(--fg-0)}.btn .ext{opacity:.6;margin:0;color:inherit}.post-row{display:flex;align-items:baseline;gap:var(--sp-5);padding:14px 0;border-bottom:1px solid var(--line-1);color:inherit}.post-row:last-child{border-bottom:none}.post-row .title{flex:1;font-size:var(--fs-prose);font-weight:var(--fw-medium);letter-spacing:var(--ls-subhead);color:var(--fg-0);transition:color var(--dur-fast) var(--ease)}.post-row:hover .title{color:var(--accent)}.post-row .tags{display:flex;gap:8px;flex-wrap:wrap;font-size:var(--fs-caption);color:var(--fg-2)}.post-row .date{font-size:var(--fs-caption);color:var(--fg-2);white-space:nowrap;font-variant-numeric:tabular-nums}.talk-row{position:relative;padding-left:34px;padding-bottom:var(--sp-8)}.talk-row:last-child{padding-bottom:var(--sp-2)}.talk-row .dot{position:absolute;left:0;top:5px;width:9px;height:9px;border-radius:var(--r-full);background:var(--fg-2);box-shadow:0 0 0 3px var(--bg-0);transition:background var(--dur-fast) var(--ease),box-shadow var(--dur-fast) var(--ease)}.talk-row:hover .dot{background:var(--accent);box-shadow:0 0 0 3px var(--bg-0),0 0 10px var(--accent-line)}.talk-row .line{position:absolute;left:4px;top:20px;bottom:2px;width:1px;background:var(--line-2)}.talk-row:last-child .line{display:none}.talk-inner{display:flex;gap:var(--sp-6);align-items:flex-start;color:inherit}.talk-meta{font-size:var(--fs-caption);color:var(--fg-2);margin-bottom:6px}.talk-title{font-size:var(--fs-h4);font-weight:var(--fw-medium);letter-spacing:var(--ls-subhead);line-height:var(--lh-tight);color:var(--fg-0);transition:color var(--dur-fast) var(--ease)}.talk-photo{position:relative;width:200px;aspect-ratio:3 / 2;flex-shrink:0;border-radius:var(--r-md);overflow:hidden;border:1px solid var(--line-1);background:var(--bg-1)}.talk-photo img{position:absolute;inset:0;width:100%;height:100%;object-fit:cover}@media(max-width:720px){.talk-inner{flex-direction:column;gap:var(--sp-4)}.talk-photo{width:100%;max-width:320px}}.hero{margin:0;font-size:var(--fs-hero);font-weight:var(--fw-semibold);letter-spacing:var(--ls-hero);line-height:var(--lh-display);max-width:16ch}.hero .accent-dot{color:var(--accent)}.h1{margin:0;font-size:var(--fs-h1);font-weight:var(--fw-semibold);letter-spacing:var(--ls-heading);line-height:var(--lh-heading)}.lede{color:var(--fg-1);max-width:52ch;line-height:var(--lh-body)}.meta-line{font-size:var(--fs-caption);color:var(--fg-2)}.year-grid{display:grid;grid-template-columns:120px 1fr;gap:var(--sp-6);padding-bottom:var(--sp-7)}.year-grid .year{font-size:var(--fs-h3);font-weight:var(--fw-semibold);letter-spacing:var(--ls-subhead);color:var(--fg-2);font-variant-numeric:tabular-nums}@media(max-width:720px){.year-grid{grid-template-columns:1fr;gap:var(--sp-2)}}.prose{max-width:var(--measure);font-size:var(--fs-prose);line-height:var(--lh-prose);color:var(--fg-0)}.prose p{margin:0 0 var(--sp-5)}.prose h2{margin:var(--sp-7) 0 var(--sp-4);font-size:var(--fs-h3);font-weight:var(--fw-semibold);letter-spacing:var(--ls-subhead);line-height:var(--lh-heading)}.prose h3{margin:var(--sp-6) 0 var(--sp-3);font-size:var(--fs-h4);font-weight:var(--fw-semibold);letter-spacing:var(--ls-subhead)}.prose a{text-decoration:underline;text-underline-offset:3px}.prose img{max-width:100%;height:auto;border-radius:var(--r-lg);border:1px solid var(--line-1);margin:var(--sp-2) 0}.prose code{font-size:.88em;background:var(--bg-2);border:1px solid var(--line-1);border-radius:var(--r-sm);padding:1px 6px}.prose pre{background:var(--surface-code)!important;border:1px solid var(--line-1);border-radius:var(--r-md);padding:14px 16px;overflow-x:auto;font-size:var(--fs-code);line-height:var(--lh-code);margin:0 0 var(--sp-5)}.prose pre code{background:none;border:none;padding:0;font-size:inherit}.prose blockquote{margin:0 0 var(--sp-5);padding-left:var(--sp-4);border-left:2px solid var(--line-2);color:var(--fg-1)}.prose ul,.prose ol{margin:0 0 var(--sp-5);padding-left:22px}.prose li{margin-bottom:6px}.resume-grid{display:grid;grid-template-columns:300px 1fr;gap:var(--sp-9);padding:var(--sp-9) 0 var(--sp-8);align-items:start}.resume-aside{position:sticky;top:calc(var(--nav-h) + var(--sp-6))}.resume-role{display:grid;grid-template-columns:1fr 150px;gap:var(--sp-5)}.resume-role h3{margin:0 0 4px;font-size:var(--fs-h4);font-weight:var(--fw-semibold);letter-spacing:var(--ls-subhead);line-height:var(--lh-tight)}.resume-role .org{font-size:var(--fs-small);color:var(--accent);margin-bottom:10px}.resume-role ul{margin:0;padding-left:18px;display:flex;flex-direction:column;gap:6px}.resume-role li{font-size:var(--fs-small);line-height:var(--lh-body);color:var(--fg-1)}.resume-when{text-align:right;font-size:var(--fs-caption);color:var(--fg-2)}.skill-row{display:grid;grid-template-columns:160px 1fr;gap:var(--sp-4);align-items:baseline}.skill-row .label{font-size:var(--fs-caption);color:var(--fg-2)}.skill-row .items{display:flex;gap:8px;flex-wrap:wrap}@media(max-width:880px){.resume-grid{grid-template-columns:1fr;gap:var(--sp-6)}.resume-aside{position:static}.resume-role,.skill-row{grid-template-columns:1fr;gap:var(--sp-2)}.resume-when{text-align:left}}.reveal{opacity:0;transform:translateY(12px);transition:opacity var(--dur-reveal) var(--ease-out),transform var(--dur-reveal) var(--ease-out);transition-delay:var(--reveal-delay, 0ms)}.reveal.on{opacity:1;transform:none}.reveal-lift{transform:translateY(24px) scale(.985)}.reveal .section-label .rule{transform:scaleX(0);transform-origin:left;transition:transform .9s var(--ease-out) .15s}.reveal.on .section-label .rule{transform:scaleX(1)}@media(prefers-reduced-motion:reduce){.reveal,.reveal-lift{opacity:1;transform:none;transition:none}.reveal .section-label .rule{transform:none;transition:none}}.post-list .post-row{border-bottom:1px solid var(--line-1)}.post-list>.reveal:last-child .post-row{border-bottom:none}.hero-wrap{position:relative;z-index:0}.hero-wrap:before{content:"";position:absolute;top:-30%;left:-14%;width:62%;height:130%;background:radial-gradient(closest-side,var(--accent-tint),transparent 72%);filter:blur(28px);pointer-events:none;z-index:-1}.tl{position:relative;margin-top:var(--sp-6)}.tl-spine{position:absolute;left:8px;top:4px;bottom:4px;width:2px;border-radius:1px;background:var(--line-1)}.tl-progress{position:absolute;left:8px;top:4px;bottom:4px;width:2px;border-radius:1px;background:linear-gradient(180deg,var(--accent),var(--accent-dim));transform:scaleY(0);transform-origin:top;will-change:transform}.tl-node{position:relative;padding:0 0 var(--sp-8) 44px}.tl-node:last-child{padding-bottom:var(--sp-2)}.tl-dot{position:absolute;left:2px;top:3px;width:14px;height:14px;border-radius:var(--r-full);border:2px solid var(--fg-2);background:var(--bg-0);transition:border-color var(--dur-fast) var(--ease),background var(--dur-fast) var(--ease),box-shadow .4s var(--ease-out)}.tl-node.lit .tl-dot{border-color:var(--accent);background:var(--accent-tint);box-shadow:0 0 14px var(--accent-line)}.tl-meta{display:flex;gap:var(--sp-3);align-items:baseline;flex-wrap:wrap;margin-bottom:6px}.tl-kind{font-size:11px;font-weight:var(--fw-medium);text-transform:uppercase;letter-spacing:var(--ls-caps);color:var(--fg-2);border:1px solid var(--line-1);border-radius:var(--r-full);padding:2px 9px;transition:color var(--dur-fast) var(--ease),border-color var(--dur-fast) var(--ease)}.tl-node.lit .tl-kind{color:var(--accent);border-color:var(--accent-line)}.tl-when{font-size:var(--fs-caption);color:var(--fg-2);font-variant-numeric:tabular-nums}.tl-node h3{margin:0 0 4px;font-size:var(--fs-h4);font-weight:var(--fw-semibold);letter-spacing:var(--ls-subhead);line-height:var(--lh-tight)}.tl-org{font-size:var(--fs-small);color:var(--accent);margin-bottom:10px}.tl-node ul{margin:0;padding-left:18px;display:flex;flex-direction:column;gap:6px}.tl-node li{font-size:var(--fs-small);line-height:var(--lh-body);color:var(--fg-1)}@media(prefers-reduced-motion:reduce){.tl-progress{transform:scaleY(1)}}.aside-skills{display:flex;flex-direction:column;gap:var(--sp-4);margin-top:var(--sp-6);padding-top:var(--sp-5);border-top:1px solid var(--line-1)}.aside-skill-label{font-size:var(--fs-caption);color:var(--fg-2);margin-bottom:8px}.aside-skill-tags{display:flex;gap:8px;flex-wrap:wrap}.about-grid{display:grid;grid-template-columns:1fr 300px;gap:var(--sp-9);align-items:start;padding:var(--sp-9) 0 var(--sp-8)}.about-photo-wrap{position:relative;z-index:0}.about-photo-wrap:before{content:"";position:absolute;inset:-16px;background:radial-gradient(closest-side,var(--accent-tint),transparent 74%);filter:blur(22px);z-index:-1;pointer-events:none}.about-photo{border-radius:var(--r-lg);overflow:hidden;border:1px solid var(--line-1)}.about-photo img{display:block;width:100%;height:auto;transform:scale(1.02);transition:transform .7s var(--ease-out)}.about-photo:hover img{transform:scale(1.06)}.stats{display:flex;gap:var(--sp-8);margin-top:var(--sp-7);flex-wrap:wrap}.stat .num{font-size:var(--fs-h1);font-weight:var(--fw-semibold);letter-spacing:var(--ls-heading);line-height:1;font-variant-numeric:tabular-nums}.stat .num .accent-dot{color:var(--accent)}.stat .cap{font-size:var(--fs-caption);color:var(--fg-2);margin-top:6px}.path{display:grid;grid-template-columns:repeat(3,1fr);gap:var(--sp-4);margin-top:var(--sp-5)}.path-step{position:relative;border:1px solid var(--line-1);border-radius:var(--r-md);padding:var(--sp-5);background:var(--bg-1);transition:border-color var(--dur-fast) var(--ease),transform var(--dur-fast) var(--ease)}.path-step:hover{border-color:var(--accent-line);transform:translateY(-2px)}.path-step .year{font-size:var(--fs-caption);color:var(--accent);font-variant-numeric:tabular-nums}.path-step h3{margin:6px 0;font-size:var(--fs-h4);font-weight:var(--fw-semibold);letter-spacing:var(--ls-subhead);line-height:var(--lh-tight)}.path-step p{margin:0;font-size:var(--fs-small);color:var(--fg-1);line-height:var(--lh-body)}.elsewhere{display:flex;gap:var(--sp-3);flex-wrap:wrap;margin-top:var(--sp-5)}@media(max-width:720px){.about-grid{grid-template-columns:1fr;gap:var(--sp-6)}.about-photo-wrap{max-width:380px}.path{grid-template-columns:1fr}}.talk-title-link{color:inherit}.talk-title-link:hover .talk-title{color:var(--accent)}.talk-summary{margin:8px 0 0;font-size:var(--fs-small);line-height:var(--lh-body);color:var(--fg-1);max-width:58ch}.talk-links{margin-top:10px;font-size:var(--fs-caption)}.talk-links a{color:var(--fg-1)}.talk-links a:hover{color:var(--accent)}
