@font-face{font-family:Fraunces Variable;font-style:normal;font-display:swap;font-weight:100 900;src:url(/_astro/fraunces-vietnamese-wght-normal.CnvboYUG.woff2) format("woff2-variations");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:Fraunces Variable;font-style:normal;font-display:swap;font-weight:100 900;src:url(/_astro/fraunces-latin-ext-wght-normal.Ca2vKHc0.woff2) format("woff2-variations");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:Fraunces Variable;font-style:normal;font-display:swap;font-weight:100 900;src:url(/_astro/fraunces-latin-wght-normal.ukD16Tqj.woff2) format("woff2-variations");unicode-range:U+0000-00FF,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:Geist Variable;font-style:normal;font-display:swap;font-weight:100 900;src:url(/_astro/geist-cyrillic-ext-wght-normal.DjL33-gN.woff2) format("woff2-variations");unicode-range:U+0460-052F,U+1C80-1C8A,U+20B4,U+2DE0-2DFF,U+A640-A69F,U+FE2E-FE2F}@font-face{font-family:Geist Variable;font-style:normal;font-display:swap;font-weight:100 900;src:url(/_astro/geist-cyrillic-wght-normal.BEAKL7Jp.woff2) format("woff2-variations");unicode-range:U+0301,U+0400-045F,U+0490-0491,U+04B0-04B1,U+2116}@font-face{font-family:Geist Variable;font-style:normal;font-display:swap;font-weight:100 900;src:url(/_astro/geist-vietnamese-wght-normal.6IgcOCM7.woff2) format("woff2-variations");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:Geist Variable;font-style:normal;font-display:swap;font-weight:100 900;src:url(/_astro/geist-latin-ext-wght-normal.DC-KSUi6.woff2) format("woff2-variations");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:Geist Variable;font-style:normal;font-display:swap;font-weight:100 900;src:url(/_astro/geist-latin-wght-normal.BgDaEnEv.woff2) format("woff2-variations");unicode-range:U+0000-00FF,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:Geist Mono Variable;font-style:normal;font-display:swap;font-weight:100 900;src:url(/_astro/geist-mono-cyrillic-ext-wght-normal.I4S5GZfc.woff2) format("woff2-variations");unicode-range:U+0460-052F,U+1C80-1C8A,U+20B4,U+2DE0-2DFF,U+A640-A69F,U+FE2E-FE2F}@font-face{font-family:Geist Mono Variable;font-style:normal;font-display:swap;font-weight:100 900;src:url(/_astro/geist-mono-cyrillic-wght-normal.BmXc_FBt.woff2) format("woff2-variations");unicode-range:U+0301,U+0400-045F,U+0490-0491,U+04B0-04B1,U+2116}@font-face{font-family:Geist Mono Variable;font-style:normal;font-display:swap;font-weight:100 900;src:url(/_astro/geist-mono-symbols2-wght-normal.GZpp1pK2.woff2) format("woff2-variations");unicode-range:U+2000-2001,U+2004-2008,U+200A,U+23B8-23BD,U+2500-259F}@font-face{font-family:Geist Mono Variable;font-style:normal;font-display:swap;font-weight:100 900;src:url(/_astro/geist-mono-vietnamese-wght-normal.D8KDMBhC.woff2) format("woff2-variations");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:Geist Mono Variable;font-style:normal;font-display:swap;font-weight:100 900;src:url(/_astro/geist-mono-latin-ext-wght-normal.DrnZ1wKl.woff2) format("woff2-variations");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:Geist Mono Variable;font-style:normal;font-display:swap;font-weight:100 900;src:url(/_astro/geist-mono-latin-wght-normal.B_7UjwxQ.woff2) format("woff2-variations");unicode-range:U+0000-00FF,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}:root{--font-display: "Fraunces Variable", ui-serif, Georgia, serif;--font-sans: "Geist Variable", -apple-system, BlinkMacSystemFont, "Segoe UI", system-ui, sans-serif;--font-mono: "Geist Mono Variable", ui-monospace, "SF Mono", Menlo, monospace;--step--1: clamp(.78rem, .74rem + .2vw, .85rem);--step-0: clamp(.95rem, .92rem + .15vw, 1.02rem);--step-1: clamp(1.1rem, 1.05rem + .3vw, 1.25rem);--step-2: clamp(1.35rem, 1.2rem + .6vw, 1.65rem);--step-3: clamp(1.85rem, 1.5rem + 1.5vw, 2.6rem);--step-4: clamp(2.2rem, 1.6rem + 2.6vw, 4.2rem);--step-5: clamp(2.6rem, 1.8rem + 3.6vw, 5.4rem);--s-1: .25rem;--s-2: .5rem;--s-3: .75rem;--s-4: 1rem;--s-5: 1.5rem;--s-6: 2rem;--s-7: 3rem;--s-8: 4.5rem;--s-9: 6.5rem;--radius-sm: 4px;--radius: 8px;--radius-lg: 14px;--hairline: 1px solid var(--border);--measure: 70ch;--container: 1240px;--gutter: clamp(1rem, 2vw + .5rem, 2.5rem);--mono-feat: "tnum" 1, "ss01" 1;--mono-track: .04em;--ease-out-snap: cubic-bezier(.65, 0, .35, 1)}:root,[data-theme=dark]{--bg: #0a0b0d;--bg-elevated: #121316;--bg-surface: #17181c;--border: #24262b;--border-strong: #3a3d44;--text: #e8e8ea;--text-muted: #9a9ba1;--text-dim: #6a6b71;--accent: #F2603C;--accent-soft: rgba(242, 96, 60, .12);--ring: rgba(242, 96, 60, .45);--live: #4ade80;color-scheme:dark}[data-theme=light]{--bg: #fafaf8;--bg-elevated: #ffffff;--bg-surface: #f1f0ec;--border: #e4e2dc;--border-strong: #c6c3bb;--text: #15151a;--text-muted: #545358;--text-dim: #84838a;--accent: #d44a26;--accent-soft: rgba(212, 74, 38, .12);--ring: rgba(212, 74, 38, .45);--live: #16a34a;color-scheme:light}*,*:before,*:after{box-sizing:border-box}html{-webkit-text-size-adjust:100%}body{margin:0;font-family:var(--font-sans);background:var(--bg);color:var(--text);font-size:var(--step-0);line-height:1.65;-webkit-font-smoothing:antialiased;text-rendering:optimizeLegibility;overflow-x:hidden}a{color:inherit;text-decoration:none}a:focus-visible,button:focus-visible,input:focus-visible{outline:2px solid var(--accent);outline-offset:3px;box-shadow:0 0 0 5px var(--accent-soft);border-radius:var(--radius-sm)}::selection{background:color-mix(in oklch,var(--accent) 30%,transparent);color:var(--text)}::marker{color:var(--accent);font-family:var(--font-mono)}main{min-height:60vh}img,svg{display:block;max-width:100%}h1,h2,h3,h4{font-family:var(--font-display);font-weight:500;letter-spacing:-.022em;line-height:1.15;margin:0;color:var(--text)}h1{font-size:var(--step-4)}h2{font-size:var(--step-2);letter-spacing:-.018em;line-height:1.2}h3{font-size:var(--step-1);letter-spacing:-.012em;line-height:1.25}p{margin:0}p+p{margin-top:var(--s-4)}ul,ol{margin:0}.container{width:100%;max-width:var(--container);margin:0 auto;padding-inline:var(--gutter)}.measure{max-width:var(--measure)}.eyebrow{font-family:var(--font-mono);font-size:var(--step--1);letter-spacing:.08em;text-transform:uppercase;color:var(--text-dim);font-weight:500;font-variant-numeric:tabular-nums;font-feature-settings:var(--mono-feat)}.mono,.pill,.labs-card-num,.labs-card-type,.labs-card-stack,.cv-job-meta,.blog-row-meta,.contact-list,.site-footer,.back-link,.eyebrow{font-variant-numeric:tabular-nums;font-feature-settings:var(--mono-feat)}.mono{font-family:var(--font-mono)}.scroll-progress{position:fixed;top:0;left:0;right:0;height:2px;background:var(--accent);transform:scaleX(0);transform-origin:left;z-index:100;pointer-events:none;opacity:.85}@supports (animation-timeline: scroll()){@media(prefers-reduced-motion:no-preference){.scroll-progress{animation:scroll-progress-fill linear both;animation-timeline:scroll(root)}}}@keyframes scroll-progress-fill{to{transform:scaleX(1)}}@media(prefers-reduced-motion:reduce){.scroll-progress{display:none}}.site-nav{position:sticky;top:0;z-index:50;background:color-mix(in srgb,var(--bg) 88%,transparent);backdrop-filter:saturate(140%) blur(10px);-webkit-backdrop-filter:saturate(140%) blur(10px);border-bottom:var(--hairline)}.site-nav-inner{display:flex;align-items:center;justify-content:space-between;gap:var(--s-5);height:56px}.site-nav-brand{display:inline-flex;align-items:center;gap:.5ch;font-family:var(--font-mono);font-size:.92rem;font-weight:500;letter-spacing:-.005em;color:var(--text);font-variant-numeric:tabular-nums;font-feature-settings:var(--mono-feat)}.site-nav-brand .mark{font-family:var(--font-mono);font-size:.78rem;color:var(--text-dim);letter-spacing:var(--mono-track)}.site-nav-links{display:none;gap:var(--s-5);align-items:center}.site-nav-link{font-size:.9rem;color:var(--text-muted);transition:color .12s ease;position:relative;padding-block:.25rem}.site-nav-link:after{content:"";position:absolute;inset:auto 0 -2px;height:1px;background:var(--accent);transform:scaleX(0);transform-origin:left;transition:transform .18s ease}.site-nav-link:hover{color:var(--text)}.site-nav-link:hover:after,.site-nav-link[aria-current=page]:after{transform:scaleX(1)}.site-nav-link[aria-current=page]{color:var(--text)}.site-nav-actions{display:flex;gap:var(--s-2);align-items:center}.icon-btn{background:transparent;border:1px solid var(--border);color:var(--text-muted);width:34px;height:34px;border-radius:var(--radius-sm);display:inline-flex;align-items:center;justify-content:center;cursor:pointer;transition:color .12s ease,border-color .12s ease}.icon-btn:hover{color:var(--text);border-color:var(--border-strong)}.icon-btn .icon-sun,.icon-btn .icon-moon{display:none}[data-theme=dark] .icon-btn .icon-sun,[data-theme=light] .icon-btn .icon-moon{display:block}:root:not([data-theme]) .icon-btn .icon-sun{display:block}.site-nav-toggle{display:inline-flex}@media(min-width:768px){.site-nav-links{display:flex}.site-nav-toggle{display:none}}.site-nav-mobile{display:none;flex-direction:column;gap:var(--s-2);padding:var(--s-3) 0 var(--s-5);border-top:var(--hairline)}.site-nav-mobile.open{display:flex}.site-nav-mobile a{padding:.6rem 0;color:var(--text-muted);font-size:.95rem;border-bottom:var(--hairline)}.site-nav-mobile a:last-child{border-bottom:none}.site-nav-mobile a[aria-current=page]{color:var(--text)}@media(min-width:768px){.site-nav-mobile{display:none!important}}.pill{display:inline-flex;align-items:center;gap:.45rem;font-family:var(--font-mono);font-size:var(--step--1);letter-spacing:.04em;padding:.22rem .55rem;border-radius:var(--radius-sm);border:1px solid var(--border);color:var(--text-muted);background:var(--bg-elevated);text-transform:lowercase;white-space:nowrap}.pill .dot{width:6px;height:6px;border-radius:50%;background:currentColor;box-shadow:0 0 0 0 currentColor}.pill[data-status=live]{color:var(--live);border-color:color-mix(in srgb,var(--live) 35%,var(--border))}.pill[data-status=live] .dot{animation:pulse 2.2s ease-in-out infinite}.pill[data-status=building]{color:var(--accent);background:var(--accent-soft);border-color:color-mix(in srgb,var(--accent) 35%,var(--border))}.pill[data-status=shipped]{color:var(--text)}.pill[data-status=archived]{color:var(--text-dim)}@keyframes pulse{0%,to{box-shadow:0 0 0 0 currentColor}50%{box-shadow:0 0 0 4px transparent}}.btn,.btn--ghost{display:inline-flex;align-items:center;gap:.5rem;padding:.65rem 1.1rem;border-radius:var(--radius);font-size:.92rem;font-weight:500;font-family:inherit;cursor:pointer;transition:background .14s ease,border-color .14s ease,color .14s ease,transform .14s ease;text-decoration:none;border:1px solid transparent}.btn{background:var(--accent);color:#fff}.btn:hover{background:color-mix(in srgb,var(--accent) 88%,#000)}.btn--ghost{background:transparent;color:var(--text);border-color:var(--border)}.btn--ghost:hover{border-color:var(--accent);color:var(--accent)}.prose a,.link{color:var(--text);text-decoration:underline;text-decoration-color:var(--accent);text-decoration-thickness:1px;text-underline-offset:.22em;transition:text-decoration-thickness .12s ease}.prose a:hover,.link:hover{text-decoration-thickness:2px}.prose{max-width:var(--measure);color:var(--text);font-size:var(--step-0);line-height:1.7}.prose p{color:var(--text-muted)}.prose strong{color:var(--text);font-weight:500}.prose ul{padding-left:1.1rem;color:var(--text-muted);display:grid;gap:var(--s-2)}.prose h2,.prose h3{margin-top:var(--s-7)}.prose h2+p,.prose h3+p{margin-top:var(--s-3)}.section{margin-block:var(--s-8)}.section-head{display:grid;gap:var(--s-2);margin-bottom:var(--s-6)}.section-head .eyebrow{color:var(--accent)}@supports (animation-timeline: view()){@media(prefers-reduced-motion:no-preference){.section-head h2,.section-head .hairline--marker,.term-env{animation:section-enter linear both;animation-timeline:view();animation-range:entry 0% cover 22%}}@keyframes section-enter{0%{opacity:0;transform:translateY(18px)}to{opacity:1;transform:none}}}.termhero{padding-block:clamp(var(--s-7),7vw,var(--s-9)) clamp(var(--s-6),6vw,var(--s-8));border-bottom:var(--hairline);position:relative;overflow:hidden}.termhero:before{content:"";position:absolute;inset:0;pointer-events:none;background-image:repeating-linear-gradient(to bottom,transparent 0,transparent 2px,rgba(255,255,255,.012) 3px,transparent 4px);mix-blend-mode:overlay;z-index:0}[data-theme=light] .termhero:before{display:none}.termhero:after{content:"";position:absolute;inset:0;pointer-events:none;background:radial-gradient(ellipse 70% 50% at 12% 30%,color-mix(in srgb,var(--accent) 8%,transparent) 0%,transparent 60%);z-index:0;opacity:.55}[data-theme=light] .termhero:after{opacity:.32}.term{position:relative;z-index:1}.term-meta{display:flex;align-items:center;gap:.7ch;font-family:var(--font-mono);font-size:var(--step--1);color:var(--text-dim);letter-spacing:var(--mono-track);font-variant-numeric:tabular-nums;font-feature-settings:var(--mono-feat);margin-bottom:var(--s-4)}.term-meta .dot-sep{color:var(--border-strong)}.term-meta .term-meta-host{color:var(--accent)}.term-screen{list-style:none;padding:0;margin:0;font-family:var(--font-mono);font-size:clamp(.95rem,.88rem + .4vw,1.08rem);line-height:1.6;color:var(--text);letter-spacing:-.005em;font-variant-numeric:tabular-nums;font-feature-settings:var(--mono-feat)}.term-line{display:block;min-height:1.6em}.term-cmd-row{display:block;white-space:pre-wrap;word-break:normal;overflow-wrap:anywhere}.term-prompt{color:var(--accent);font-weight:500;user-select:none;margin-right:.6ch}.term-cmd{color:var(--text);white-space:pre-wrap}.term-cmd.is-typing:after{content:"";display:inline-block;width:.55ch;height:1em;margin-left:.12ch;vertical-align:-.12em;background:var(--accent);animation:term-cursor-blink 1.05s steps(1,end) infinite}.term-out{display:block;padding:var(--s-2) 0 var(--s-4);color:var(--text-muted);max-width:64ch}.term-out p{margin:0}.term-out p+p{margin-top:var(--s-2)}.term-h1{font-family:var(--font-mono);font-size:clamp(1.5rem,1.05rem + 2.2vw,2.6rem);line-height:1.18;letter-spacing:-.022em;font-weight:500;color:var(--text);margin:0 0 var(--s-3);max-width:28ch;overflow-wrap:anywhere}.term-h1 .term-h1-accent{color:var(--accent);position:relative;display:inline-block}@media(prefers-reduced-motion:no-preference){.term-h1 .term-h1-accent{animation:accent-warmup 1.8s steps(1,end) 1 both}}@keyframes accent-warmup{0%{opacity:.15}8%{opacity:1}12%{opacity:.2}16%{opacity:1}34%{opacity:1;text-shadow:0 0 0 transparent}38%{opacity:.85;text-shadow:0 0 6px color-mix(in srgb,var(--accent) 55%,transparent)}42%{opacity:1;text-shadow:none}to{opacity:1}}.term-listing{font-family:var(--font-mono);font-size:var(--step--1);line-height:1.55;color:var(--text-muted);padding-block:var(--s-2) var(--s-4);overflow-x:auto;max-width:100%}.term-listing-table{display:grid;grid-template-columns:auto auto 1fr auto;gap:0 var(--s-3);font-family:var(--font-mono);font-size:var(--step--1);line-height:1.55;min-width:0}.term-listing-row{display:contents}.term-listing-row>*{min-width:0}.term-listing-perm{color:var(--text-dim);white-space:nowrap}.term-listing-name{color:var(--text);font-weight:500}.term-listing-name a{color:inherit;text-decoration:underline;text-decoration-color:var(--accent);text-underline-offset:.22em;text-decoration-thickness:1px;transition:text-decoration-thickness .12s ease}.term-listing-name a:hover{text-decoration-thickness:2px}.term-listing-status{color:var(--text-muted);font-variant-numeric:tabular-nums}.term-listing-status[data-status=live]{color:var(--live)}.term-listing-status[data-status=building]{color:var(--accent)}.term-listing-status[data-status=shipped]{color:var(--text)}.term-listing-status[data-status=archived]{color:var(--text-dim)}.term-listing-hint{color:var(--text-dim);text-align:right;white-space:nowrap}.term-listing-hint a{color:var(--text-muted);text-decoration:none}.term-listing-hint a:hover{color:var(--accent)}@media(max-width:640px){.term-listing-table{grid-template-columns:auto 1fr auto;font-size:.78rem}.term-listing-perm,.term-listing-hint{display:none}}.term-line--idle .term-caret{display:inline-block;width:.55ch;height:1em;margin-left:.12ch;vertical-align:-.12em;background:var(--accent);animation:term-cursor-blink 1.05s steps(1,end) infinite}html.hero-prep .term-cmd,html.hero-prep .term-line--idle .term-caret{visibility:hidden}.term-skip{display:inline-flex;align-items:center;gap:.4rem;margin-top:var(--s-4);padding:.32rem .7rem;font-family:var(--font-mono);font-size:var(--step--1);letter-spacing:var(--mono-track);color:var(--text-dim);background:transparent;border:1px solid var(--border);border-radius:var(--radius-sm);cursor:pointer;transition:color .12s ease,border-color .12s ease;opacity:0;pointer-events:none;font-variant-numeric:tabular-nums;font-feature-settings:var(--mono-feat)}.term-screen[data-running]~.term-skip{opacity:1;pointer-events:auto}.term-skip:hover{color:var(--text);border-color:var(--border-strong)}.term-env{margin-top:var(--s-7);padding-top:var(--s-5);border-top:var(--hairline);display:grid;gap:var(--s-3);grid-template-columns:1fr;font-family:var(--font-mono);font-size:var(--step--1);color:var(--text-dim);letter-spacing:var(--mono-track);font-variant-numeric:tabular-nums;font-feature-settings:var(--mono-feat)}@media(min-width:720px){.term-env{grid-template-columns:repeat(2,minmax(0,1fr));column-gap:var(--s-6)}}@media(min-width:1080px){.term-env{grid-template-columns:repeat(4,minmax(0,1fr))}}.term-env-row{display:grid;gap:.15rem}.term-env-key{color:var(--text-dim);text-transform:uppercase;letter-spacing:.08em}.term-env-val{color:var(--text);font-family:var(--font-sans);font-size:var(--step-0);letter-spacing:0}.term-env-val a{color:var(--text);text-decoration:underline;text-decoration-color:var(--accent);text-underline-offset:.22em;text-decoration-thickness:1px}.term-env-val a:hover{text-decoration-thickness:2px}@media(prefers-reduced-motion:reduce){.termhero:before{display:none}.term-line--idle .term-caret,.term-cmd.is-typing:after{animation:none!important;opacity:1!important}.term-out--in{animation:none!important}}.hero{padding-block:clamp(var(--s-7),8vw,var(--s-9));border-bottom:var(--hairline)}.hero-grid{display:grid;grid-template-columns:minmax(0,1fr);gap:var(--s-6);align-items:start}.hero-prompt{font-family:var(--font-mono);font-size:var(--step--1);color:var(--accent);letter-spacing:var(--mono-track);font-variant-numeric:tabular-nums;font-feature-settings:var(--mono-feat);margin-bottom:var(--s-2)}.hero-eyebrow{margin-bottom:var(--s-5);color:var(--text-muted);text-transform:none;letter-spacing:.01em;font-size:var(--step-0);font-family:var(--font-sans);font-weight:500}.hero h1,.hero-h1{font-size:var(--step-5);line-height:1.04;letter-spacing:-.03em;font-weight:400;max-width:18ch;display:block}.hero-line{display:block;text-wrap:balance}.hero-line--2{padding-left:clamp(.5ch,4vw,6ch)}@media(min-width:880px){.hero-line--2{padding-left:clamp(2ch,6vw,8ch)}}.hero h1 em,.hero-h1 em{font-style:italic;color:var(--accent);font-feature-settings:"ss01"}.term-cursor{display:inline-block;width:.55ch;height:.92em;margin-left:.18ch;vertical-align:-.06em;background:var(--accent);animation:term-cursor-blink 1.05s steps(1,end) infinite}@keyframes term-cursor-blink{0%,49%{opacity:1}50%,to{opacity:.15}}.build-stamp{font-size:var(--step--1);color:var(--text-muted);letter-spacing:var(--mono-track)}.hero-sub{font-size:var(--step-1);max-width:52ch;color:var(--text-muted);margin-top:var(--s-5);line-height:1.5}.hero-meta{display:grid;gap:var(--s-4);font-size:var(--step--1);font-family:var(--font-mono);color:var(--text-dim)}.hero-meta .key{display:block;color:var(--text-dim);text-transform:uppercase;letter-spacing:.08em;margin-bottom:.15rem}.hero-meta .val{color:var(--text);font-family:var(--font-sans);font-size:var(--step-0)}.hero-meta a{color:var(--text)}.hero-meta a:hover{color:var(--accent)}.hero-portrait{width:96px;height:96px;border-radius:50%;object-fit:cover;border:1px solid var(--border)}@media(min-width:880px){.hero-grid{grid-template-columns:minmax(0,8fr) minmax(0,4fr);gap:var(--s-8)}}.labs{display:grid;grid-template-columns:repeat(12,minmax(0,1fr));gap:var(--s-5);grid-auto-flow:row}.labs>*{grid-column:span 12;min-width:0}@media(min-width:720px){.labs>.labs-card--headline{grid-column:span 6}.labs>.labs-card--detail{grid-column:span 6}.labs>.labs-card--inline{grid-column:span 12}.labs>.labs-card--featured{grid-column:span 12}}@media(min-width:1024px){.labs>.labs-card--headline{grid-column:span 6}.labs>.labs-card--detail{grid-column:span 4}.labs>.labs-card--inline{grid-column:span 12}.labs>.labs-card--featured{grid-column:span 12}}.labs-card{display:grid;min-width:0;gap:var(--s-3);padding:var(--s-5);border:1px solid var(--border);border-radius:var(--radius);background:var(--bg-elevated);color:inherit;text-decoration:none;transition:border-color .16s var(--ease-out-snap),background .16s var(--ease-out-snap),transform .16s var(--ease-out-snap);position:relative;min-height:220px;grid-template-rows:auto 1fr auto;overflow:hidden}.labs-card:before{content:"";position:absolute;left:0;top:0;bottom:0;width:2px;background:var(--accent);transform:scaleY(0);transform-origin:bottom;transition:transform .22s var(--ease-out-snap)}.labs-card:hover{border-color:var(--border-strong);background:var(--bg-surface)}.labs-card:hover:before{transform:scaleY(1);transform-origin:top}a.labs-card:hover{transform:translateY(-1px)}.labs-card-top{display:flex;justify-content:space-between;align-items:baseline;gap:var(--s-3);font-family:var(--font-mono);font-size:var(--step--1);color:var(--text-dim);letter-spacing:var(--mono-track)}.labs-card-num{color:var(--text-muted)}.labs-card-type{text-transform:lowercase;letter-spacing:.06em}.labs-card h3{font-family:var(--font-display);font-size:var(--step-2);font-weight:500;letter-spacing:-.015em;color:var(--text);margin:0}.labs-card p{color:var(--text-muted);font-size:var(--step-0);line-height:1.55;margin:0}.labs-card-tagline{color:var(--text);font-size:var(--step-1);font-family:var(--font-display);font-weight:400;letter-spacing:-.01em}.labs-card-foot{display:flex;justify-content:space-between;align-items:center;gap:var(--s-3);margin-top:var(--s-2);padding-top:var(--s-3);border-top:var(--hairline)}.labs-card-stack{font-family:var(--font-mono);font-size:var(--step--1);color:var(--text-dim);letter-spacing:.02em;min-width:0;max-width:100%;overflow-wrap:anywhere;white-space:normal}.labs-card-arrow{color:var(--text-dim);transition:transform .16s var(--ease-out-snap),color .16s var(--ease-out-snap);flex-shrink:0;display:inline-flex}.labs-card:hover .labs-card-arrow{color:var(--accent);transform:translate(2px,-2px)}.labs-card--headline{min-height:280px}.labs-card--headline h3{font-size:var(--step-3)}.labs-card--featured.labs-card--headline{min-height:320px}.labs-card--featured h3{font-size:var(--step-4);line-height:1.05}.labs-card--detail{min-height:220px}.labs-card--inline{min-height:0;padding:var(--s-3) var(--s-5);grid-template-rows:auto;grid-template-columns:auto minmax(0,1fr) auto auto auto;gap:var(--s-4);align-items:center}.labs-card--inline .labs-card-num{font-size:var(--step--1);color:var(--text-muted);font-family:var(--font-mono)}.labs-card--inline .labs-card-title-inline{color:var(--text);font-family:var(--font-mono);font-size:var(--step-0);letter-spacing:-.01em;min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.labs-card--inline .labs-card-type{font-size:var(--step--1);color:var(--text-dim)}@media(max-width:720px){.labs-card--inline{grid-template-columns:auto minmax(0,1fr) auto;grid-template-rows:auto auto;row-gap:var(--s-2);padding:var(--s-4) var(--s-5)}.labs-card--inline .labs-card-type{grid-column:1 / 3;grid-row:2}.labs-card--inline .pill{grid-row:2}.labs-card--inline .labs-card-arrow{grid-column:3;grid-row:1 / 3;align-self:center}}.labs-card[data-tag-cat=public-data] .labs-card-type{color:var(--accent)}.cv-grid{display:grid;gap:var(--s-7)}.cv-section-head{display:grid;gap:var(--s-2)}.cv-section-head h2{font-size:var(--step-2)}.cv-timeline{display:grid;gap:0}.cv-job{display:grid;grid-template-columns:1fr;gap:var(--s-3);padding-block:var(--s-5);border-bottom:var(--hairline)}.cv-job:last-child{border-bottom:none}.cv-job-meta{font-family:var(--font-mono);font-size:var(--step--1);color:var(--text-dim);letter-spacing:.04em;display:grid;gap:.25rem}.cv-job-meta .period{color:var(--text-muted)}.cv-job-meta .here{color:var(--accent)}.cv-job h3{font-family:var(--font-display);font-size:var(--step-1);font-weight:500;letter-spacing:-.01em;margin-bottom:var(--s-2)}.cv-job h3 .company{color:var(--text-muted);font-style:italic}.cv-job ul{display:grid;gap:var(--s-2);padding-left:1.1rem;color:var(--text-muted);font-size:var(--step-0);line-height:1.55}@media(min-width:820px){.cv-job{grid-template-columns:200px minmax(0,1fr);gap:var(--s-6);align-items:start}.cv-job-meta{padding-top:.35rem}}.cv-actions{display:flex;gap:var(--s-3);flex-wrap:wrap;align-items:center}.tag-list{display:flex;flex-wrap:wrap;gap:var(--s-2);padding:0;margin:0;list-style:none}.tag-list li{padding:.25rem .7rem;font-family:var(--font-mono);font-size:var(--step--1);border:1px solid var(--border);border-radius:var(--radius-sm);color:var(--text-muted);text-transform:lowercase;letter-spacing:.04em;font-variant-numeric:tabular-nums;font-feature-settings:var(--mono-feat)}.contact-list{list-style:none;padding:0;margin:0;display:grid;gap:var(--s-3);font-family:var(--font-mono);font-size:var(--step--1);color:var(--text-dim)}.contact-list .label{display:inline-block;text-transform:uppercase;letter-spacing:.08em;margin-right:.6ch}.contact-list a{color:var(--text);text-decoration:underline;text-decoration-color:var(--accent);text-underline-offset:.22em}.blog-list{display:grid;gap:var(--s-6)}.blog-row{display:grid;grid-template-columns:1fr;gap:var(--s-3);padding-block:var(--s-5);border-bottom:var(--hairline)}.blog-row-meta{font-family:var(--font-mono);font-size:var(--step--1);color:var(--text-dim);letter-spacing:.04em;display:flex;gap:var(--s-4);flex-wrap:wrap}.blog-row h2{font-size:var(--step-1);font-weight:500;letter-spacing:-.01em}.blog-row p{color:var(--text-muted);max-width:var(--measure);font-size:var(--step-0);line-height:1.6}.blog-row a{color:inherit}.blog-row a:hover h2{color:var(--accent)}@media(min-width:820px){.blog-row{grid-template-columns:200px minmax(0,1fr);gap:var(--s-6);align-items:start}}.faq-list{display:grid;gap:var(--s-2)}.faq-item{border:1px solid var(--border);border-radius:var(--radius);background:var(--bg-elevated);padding:var(--s-4) var(--s-5)}.faq-item[open]{border-color:var(--border-strong)}.faq-item summary{cursor:pointer;list-style:none;display:flex;justify-content:space-between;align-items:center;gap:var(--s-3)}.faq-item summary::-webkit-details-marker{display:none}.faq-item summary h3{font-family:var(--font-display);font-size:var(--step-1);font-weight:500;letter-spacing:-.01em;margin:0;color:var(--text);display:inline}.faq-item summary:after{content:"+";font-family:var(--font-mono);color:var(--text-dim);transition:transform .2s ease;flex-shrink:0}.faq-item[open] summary:after{content:"−"}.faq-item p{margin-top:var(--s-3);color:var(--text-muted);max-width:var(--measure)}.site-footer{margin-top:var(--s-9);padding-block:var(--s-6);border-top:var(--hairline);font-family:var(--font-mono);font-size:var(--step--1);color:var(--text-dim);letter-spacing:.04em}.site-footer-inner{display:flex;justify-content:space-between;align-items:center;gap:var(--s-5);flex-wrap:wrap}.site-footer a{color:var(--text-muted)}.site-footer a:hover{color:var(--text)}.site-footer-now{display:flex;align-items:center;flex-wrap:wrap;gap:.55ch;color:var(--text-dim);font-family:var(--font-mono);font-size:var(--step--1);letter-spacing:var(--mono-track);font-variant-numeric:tabular-nums;font-feature-settings:var(--mono-feat);margin-bottom:var(--s-4);padding-bottom:var(--s-4);border-bottom:var(--hairline)}.site-footer-now .footer-prompt{color:var(--accent)}.site-footer-now .dot-sep{color:var(--border-strong)}.site-footer-now #now-clock{color:var(--text-muted)}.newsletter{display:grid;gap:var(--s-3);max-width:var(--measure)}.newsletter h2{font-size:var(--step-2)}.newsletter-form{display:flex;gap:var(--s-2);flex-wrap:wrap}.newsletter-form input[type=email]{flex:1 1 240px;min-width:0;padding:.65rem .9rem;border:1px solid var(--border);border-radius:var(--radius);background:var(--bg-elevated);color:var(--text);font-family:inherit;font-size:.95rem}.newsletter-form input[type=email]::placeholder{color:var(--text-dim)}.newsletter-form input[type=email]:focus{outline:none;border-color:var(--accent)}[data-reveal]{opacity:0;transform:translateY(8px);transition:opacity .32s var(--ease-out-snap),transform .32s var(--ease-out-snap)}[data-reveal].is-visible{opacity:1;transform:none}.labs>.labs-card[data-reveal]{transition-delay:calc(var(--i, 0) * 60ms)}.reveal-line{position:relative;display:inline-block;overflow:hidden}.reveal-line-text{display:inline-block;transform:translateY(.4em);opacity:0;transition:transform .52s var(--ease-out-snap) .12s,opacity .32s var(--ease-out-snap) .12s}.reveal-line-cover{position:absolute;inset:0;background:var(--accent);transform:scaleX(1);transform-origin:left;transition:transform .52s var(--ease-out-snap);pointer-events:none}.reveal-line.is-visible .reveal-line-cover{transform:scaleX(0);transform-origin:right}.reveal-line.is-visible .reveal-line-text{transform:none;opacity:1}@media(prefers-reduced-motion:reduce){*,*:before,*:after{animation-duration:.01ms!important;animation-iteration-count:1!important;transition-duration:.01ms!important}[data-reveal]{opacity:1;transform:none}.reveal-line-cover{display:none}.reveal-line-text{transform:none;opacity:1}}.back-link{display:inline-flex;align-items:center;gap:.4rem;font-family:var(--font-mono);font-size:var(--step--1);color:var(--text-dim);letter-spacing:.04em;margin-bottom:var(--s-5)}.back-link:hover{color:var(--text)}.page-header{padding-block:var(--s-7) var(--s-6);border-bottom:var(--hairline);margin-bottom:var(--s-7)}.page-header h1{font-size:var(--step-3);font-weight:500}.page-header .lead{margin-top:var(--s-3);color:var(--text-muted);max-width:var(--measure);font-size:var(--step-1);line-height:1.45}.stack-sm{display:grid;gap:var(--s-3)}.stack-md{display:grid;gap:var(--s-5)}.divider{border:none;border-top:var(--hairline);margin-block:var(--s-7)}.hairline{border:none;border-top:1px solid var(--border);margin:0}.hairline--accent{border:none;height:1px;background:linear-gradient(to right,var(--text-dim) 0%,var(--accent) 100%)}.hairline--marker{display:grid;grid-template-columns:1fr auto 1fr;align-items:center;gap:var(--s-4);border:none;margin:0}.hairline--marker:before,.hairline--marker:after{content:"";height:1px;background:var(--border)}.hairline--marker>span{font-family:var(--font-mono);font-size:var(--step--1);text-transform:lowercase;letter-spacing:.06em;color:var(--text-dim);font-variant-numeric:tabular-nums;font-feature-settings:var(--mono-feat)}.brand-mark{display:inline-block;vertical-align:-2px;color:var(--text-muted);transition:color .16s var(--ease-out-snap)}.site-nav-brand:hover .brand-mark{color:var(--text)}.brand-mark-cursor{animation:cursor-blink 1.4s steps(1,end) infinite}@keyframes cursor-blink{0%,49%{opacity:1}50%,to{opacity:.2}}.brand-mark-stroke{stroke-dasharray:100;stroke-dashoffset:100;animation:brand-stroke-draw .7s var(--ease-out-snap) 80ms forwards}.brand-mark-stroke--2{animation-delay:.26s}@keyframes brand-stroke-draw{to{stroke-dashoffset:0}}.site-nav-brand:hover .brand-mark-cursor{animation-duration:.65s}.grain{position:fixed;inset:0;width:100%;height:100%;pointer-events:none;opacity:.04;z-index:1000;mix-blend-mode:overlay}[data-theme=light] .grain{opacity:.025}@media(pointer:fine){html{scrollbar-color:var(--border-strong) transparent;scrollbar-width:thin}::-webkit-scrollbar{width:10px;height:10px}::-webkit-scrollbar-track{background:transparent}::-webkit-scrollbar-thumb{background:var(--border-strong);border-radius:0;border:3px solid var(--bg)}::-webkit-scrollbar-thumb:hover{background:var(--accent)}}.theme-sun,.theme-moon{display:none}[data-theme=light] .theme-moon{display:inline}:root:not([data-theme]) .theme-sun,[data-theme=dark] .theme-sun{display:inline}.faq-item[open] .expand-v{display:none}::view-transition-old(*),::view-transition-new(*){animation-duration:.32s;animation-timing-function:var(--ease-out-snap)}::view-transition-group(brand),::view-transition-group(page-headline),::view-transition-group(portrait){animation-duration:.36s}@media(prefers-reduced-motion:reduce){::view-transition-old(*),::view-transition-new(*),::view-transition-group(*){animation:none!important}}::view-transition-new(root){animation-name:theme-wipe-in;animation-duration:.48s;animation-timing-function:var(--ease-out-snap)}::view-transition-old(root){animation:none;mix-blend-mode:normal}@keyframes theme-wipe-in{0%{clip-path:circle(0% at var(--toggle-x, 100%) var(--toggle-y, 0))}to{clip-path:circle(160% at var(--toggle-x, 100%) var(--toggle-y, 0))}}@media(prefers-reduced-motion:reduce){.brand-mark-cursor,.term-cursor{animation:none!important;opacity:1!important}.grain{display:none}::view-transition-new(root){animation:none!important}}.astro-route-announcer{position:absolute;left:0;top:0;clip:rect(0 0 0 0);clip-path:inset(50%);overflow:hidden;white-space:nowrap;width:1px;height:1px}
