@font-face{font-family:"Instrument Serif";font-style:normal;font-display:swap;font-weight:400;src:url(/_astro/instrument-serif-latin-400-normal.DnYpCC2O.woff2) format("woff2"),url(/_astro/instrument-serif-latin-400-normal.BVbkICAY.woff) format("woff")}@font-face{font-family:"Instrument Serif";font-style:italic;font-display:swap;font-weight:400;src:url(/_astro/instrument-serif-latin-400-italic.DKMiL14s.woff2) format("woff2"),url(/_astro/instrument-serif-latin-400-italic.u__WvvIK.woff) format("woff")}@font-face{font-family:Inter Variable;font-style:normal;font-display:swap;font-weight:100 900;src:url(/_astro/inter-cyrillic-ext-wght-normal.BOeWTOD4.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:Inter Variable;font-style:normal;font-display:swap;font-weight:100 900;src:url(/_astro/inter-cyrillic-wght-normal.DqGufNeO.woff2) format("woff2-variations");unicode-range:U+0301,U+0400-045F,U+0490-0491,U+04B0-04B1,U+2116}@font-face{font-family:Inter Variable;font-style:normal;font-display:swap;font-weight:100 900;src:url(/_astro/inter-greek-ext-wght-normal.DlzME5K_.woff2) format("woff2-variations");unicode-range:U+1F00-1FFF}@font-face{font-family:Inter Variable;font-style:normal;font-display:swap;font-weight:100 900;src:url(/_astro/inter-greek-wght-normal.CkhJZR-_.woff2) format("woff2-variations");unicode-range:U+0370-0377,U+037A-037F,U+0384-038A,U+038C,U+038E-03A1,U+03A3-03FF}@font-face{font-family:Inter Variable;font-style:normal;font-display:swap;font-weight:100 900;src:url(/_astro/inter-vietnamese-wght-normal.CBcvBZtf.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:Inter Variable;font-style:normal;font-display:swap;font-weight:100 900;src:url(/_astro/inter-latin-ext-wght-normal.DO1Apj_S.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:Inter Variable;font-style:normal;font-display:swap;font-weight:100 900;src:url(/_astro/inter-latin-wght-normal.Dx4kXJAl.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:IBM Plex Mono;font-style:normal;font-display:swap;font-weight:400;src:url(/_astro/ibm-plex-mono-latin-400-normal.DMJ8VG8y.woff2) format("woff2"),url(/_astro/ibm-plex-mono-latin-400-normal.CvHOgSBP.woff) format("woff")}:root{color-scheme:dark;--bg: #111613;--surface: #181f1a;--panel: #1b2720;--ink: #f0ede2;--muted: #b7c2b7;--line: #3a493e;--accent: #a8c6a9;--gold: #dbb589;--button: #b7cfb1;--serif: "Instrument Serif", Georgia, serif;--sans: "Inter Variable", system-ui, sans-serif;--mono: "IBM Plex Mono", monospace;--gutter: clamp(18px, 5vw, 72px);--header: 72px}*{box-sizing:border-box}[hidden]{display:none!important}html{scroll-padding-top:calc(var(--header) + 18px)}body{margin:0;background:var(--bg);color:var(--ink);font:400 1rem/1.65 var(--sans)}a{color:inherit;text-decoration:none}button,input,select{font:inherit}button{cursor:pointer}img{max-width:100%;height:auto}figure{margin:0}h1,h2,h3,p{margin:0}h1,h2,h3{font:400 2rem/1.05 var(--serif)}h2{font-size:clamp(2.3rem,4.5vw,4rem)}h3{font-size:clamp(1.75rem,3vw,2.6rem)}p+p{margin-top:1em}:focus-visible{outline:2px solid var(--gold);outline-offset:4px}::selection{background:var(--button);color:var(--bg)}svg[data-icon]{display:inline-block;width:1em;height:1em;flex:none}.container{width:min(1240px,calc(100% - var(--gutter) * 2));margin-inline:auto}.section{padding-block:clamp(55px,8vw,108px)}.section-soft{background:#151d17;border-block:1px solid var(--line)}.skip-link{position:fixed;z-index:10;top:10px;left:10px;padding:10px 14px;color:var(--bg);background:var(--button);transform:translateY(-160%)}.skip-link:focus{transform:none}.site-header{position:sticky;top:0;z-index:5;border-bottom:1px solid var(--line);background:#111613f0;backdrop-filter:blur(14px)}.header-inner{min-height:var(--header);display:grid;grid-template-columns:1fr auto 1fr;align-items:center;gap:24px}.wordmark,.footer-wordmark{width:fit-content;color:var(--ink);font:2.15rem/.95 var(--serif)}.wordmark span,.footer-wordmark span{color:var(--gold)}.nav-links{display:flex;gap:clamp(10px,1.5vw,22px)}.nav-links a,.mobile-nav nav a{color:var(--muted);font-size:.86rem}.nav-links a:hover,.mobile-nav nav a:hover,[aria-current=page],[aria-current=location]{color:var(--ink)!important;text-decoration:underline;text-underline-offset:.45em}.header-resume{justify-self:end}.mobile-nav{display:none}.mobile-nav summary{display:flex;align-items:center;gap:9px;min-height:44px;cursor:pointer;list-style:none;color:var(--accent);font:.85rem var(--mono)}summary::-webkit-details-marker{display:none}.mobile-nav nav{position:absolute;inset:100% 0 auto;max-height:calc(100dvh - var(--header));overflow:auto;padding:14px var(--gutter);background:var(--surface);border-bottom:1px solid var(--line)}.mobile-nav nav a{display:block;padding:10px 0}.eyebrow{color:var(--gold);font:.72rem/1.5 var(--mono);letter-spacing:.09em;text-transform:uppercase}.eyebrow span{color:var(--muted);padding-inline:.35em}.hero{min-height:min(680px,78svh);display:grid;grid-template-columns:1.02fr 1fr;gap:clamp(26px,6vw,96px);align-items:center;padding-block:clamp(34px,6vw,76px)}.hero h1{margin-top:22px;font-size:clamp(4.1rem,8vw,8.3rem);letter-spacing:-.045em;line-height:.88}.hero h1 em,.hero-accent{color:var(--accent);font-style:italic}.hero h1 em{display:block}.hero-tagline{margin-top:24px;color:var(--ink);font:italic clamp(1.55rem,2.7vw,2.2rem)/1.1 var(--serif)}.hero-description,.lead{max-width:62ch;margin-top:18px;color:var(--muted)}.hero-actions{display:flex;flex-wrap:wrap;align-items:center;gap:10px;margin-top:24px}.hero-actions>.text-link{padding:10px}.hero-socials{display:flex;flex-wrap:wrap;gap:18px;margin-top:22px}.hero-socials a{display:inline-flex;gap:7px;align-items:center;color:var(--muted);font:.8rem var(--mono)}.hero-socials a:hover{color:var(--ink)}.hero-art{position:relative;border:1px solid var(--line);background:var(--panel);box-shadow:14px 14px 0 -1px var(--bg),14px 14px 0 var(--line)}.hero-art img{display:block;width:100%;aspect-ratio:1 / 1.04;object-fit:cover;object-position:center 48%}.hero-art:after{content:"";position:absolute;inset:10px;border:1px solid rgb(239 236 221 / .25);pointer-events:none}.about-art{padding:8px;border:1px solid var(--line)}.about-art img{display:block;width:100%}.button,.text-link{display:inline-flex;align-items:center;justify-content:center;gap:8px;font:.8rem/1.3 var(--mono)}.button{min-height:44px;padding:11px 15px;border:1px solid transparent;border-radius:2px;transition:background .2s ease,color .2s ease,border-color .2s ease}.button-primary{background:var(--button);color:#111a13}.button-primary:hover{background:#d3e4ca}.button-secondary{background:transparent;color:var(--ink);border-color:var(--line)}.button-secondary:hover{background:var(--panel);border-color:var(--accent)}.text-link{color:var(--accent)}.text-link:hover{color:var(--gold);text-decoration:underline;text-underline-offset:4px}.quiet{color:var(--muted)}.credential-strip{border-block:1px solid var(--line);background:#151d17}.credential-strip>div{display:flex;align-items:center;gap:clamp(16px,5vw,74px);flex-wrap:wrap;padding-block:18px}.credential-strip a{display:inline-flex;align-items:center;gap:12px;color:var(--muted);font-size:.85rem}.credential-strip a:hover{color:var(--ink)}.credential-strip strong{font:1.7rem/1 var(--serif);color:var(--ink)}.section-heading{display:flex;align-items:end;justify-content:space-between;gap:26px;margin-bottom:28px}.section-title{margin-bottom:24px}.section-heading h2,.split-section h2,.contact-banner h2{margin-top:9px}.section-description{color:var(--muted);max-width:40ch}.section-end-link{margin-top:22px}.expertise-grid,.contact-grid{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:1px;background:var(--line);border:1px solid var(--line)}.expertise-grid article,.contact-card{padding:clamp(18px,3vw,34px);background:var(--surface)}.expertise-grid p,.split-section p,.project-card p,.writeup-card p{margin-top:10px;color:var(--muted)}.split-section{display:grid;grid-template-columns:1fr 1fr;gap:clamp(24px,6vw,90px);align-items:start}.split-section p{max-width:55ch}.split-section .text-link{margin-top:15px}.contact-banner{display:flex;justify-content:space-between;align-items:center;gap:22px;flex-wrap:wrap}.field-note{background:#121914;border:1px solid var(--line)}.field-note summary{list-style:none;padding:17px 20px;color:var(--accent);cursor:pointer;font:.85rem var(--mono)}.field-note summary:after{content:"+";float:right}.field-note[open] summary:after{content:"−"}.field-note dl{margin:0;padding:0 20px 16px}.field-note dl div{border-top:1px solid var(--line);padding-block:10px}.field-note dt{color:var(--gold);font:.78rem var(--mono)}.field-note dd{margin:3px 0 0;color:var(--muted);font-size:.9rem}.project-grid,.writeup-grid{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:14px}.project-card,.writeup-card,.github-repo{padding:clamp(20px,3.3vw,40px);background:var(--surface);border:1px solid var(--line);transition:background .2s ease,border-color .2s ease,transform .2s ease}.project-card:hover,.project-card:focus-within,.writeup-card:hover,.writeup-card:focus-within{background:var(--panel);border-color:var(--accent);transform:translateY(-2px)}.project-featured{grid-column:1 / -1;background:linear-gradient(115deg,#1d3225,#19221c 80%);border-left:3px solid var(--accent)}.project-featured h3{font-size:clamp(3rem,7vw,5.7rem)}.project-meta,.article-meta{display:flex;gap:10px 18px;justify-content:space-between;flex-wrap:wrap;color:var(--accent);font:.73rem/1.5 var(--mono)}.project-card h3,.writeup-card h2,.github-repo h2{margin-top:15px}.project-card p{max-width:65ch}.project-card-links{display:flex;flex-wrap:wrap;gap:12px 22px;margin-top:22px}.tag-list{display:flex;flex-wrap:wrap;gap:7px;margin-top:14px}.tag{border:1px solid var(--line);color:var(--muted);padding:4px 8px;font:.7rem/1.3 var(--mono)}.editorial-list{margin:0;padding:0;list-style:none;border-top:1px solid var(--line)}.editorial-list li{border-bottom:1px solid var(--line)}.editorial-list a{display:flex;align-items:center;justify-content:space-between;gap:16px;padding-block:17px;font:clamp(1.4rem,3vw,2.3rem)/1.1 var(--serif)}.editorial-list a:hover{color:var(--accent)}.editorial-list small,.article-pagination small{display:block;margin-bottom:5px;color:var(--accent);font:.72rem var(--mono)}.page-hero,.article-header{padding-top:clamp(52px,8vw,106px);padding-bottom:clamp(28px,4vw,54px);border-bottom:1px solid var(--line)}.page-hero h1,.article-header h1{max-width:20ch;margin-top:14px;font-size:clamp(3.3rem,7.5vw,7rem);letter-spacing:-.03em;line-height:.98;overflow-wrap:anywhere}.hero-accent{display:block;margin-top:10px;font-size:.56em;letter-spacing:-.015em}.content-layout{display:grid;grid-template-columns:minmax(0,.8fr) minmax(0,1.2fr);align-items:start;gap:clamp(25px,7vw,92px)}.prose{max-width:68ch}.prose h2,.timeline h2{font-size:clamp(2rem,4vw,3rem);margin-bottom:12px}.prose h2:not(:first-child){margin-top:30px}.prose p,.prose li,.timeline p,.small-note{color:var(--muted)}.prose a:not(.text-link),.article-prose a,.empty-state a{color:var(--accent);text-decoration:underline;text-underline-offset:.2em}.side-note,.note-panel{padding:clamp(18px,3vw,30px);background:var(--surface);border:1px solid var(--line);border-left:3px solid var(--gold)}.side-note span,.timeline-number{color:var(--gold);font:.75rem var(--mono)}.side-note strong,.note-panel strong{display:block;margin-top:8px;color:var(--ink);font:1.8rem/1.15 var(--serif)}.note-panel p{color:var(--muted);margin-top:9px}.note-panel{margin-top:20px}.timeline{max-width:950px}.timeline-item{padding:0 0 34px 26px;border-left:1px solid var(--line)}.timeline-item h2{margin-top:8px}.timeline-item .text-link{margin-top:12px}.small-note{font-size:.86rem;margin-top:12px}.skill-groups,.cert-list{display:grid;gap:12px}.skill-group,.cert-detail-card{padding:clamp(18px,3vw,34px);border:1px solid var(--line);background:var(--surface)}.skill-group h2,.cert-body h2,.contact-card{display:flex;flex-direction:column;gap:10px}.contact-card span{color:var(--gold);font:.75rem var(--mono)}.contact-card strong{font:clamp(1.7rem,3vw,2.4rem)/1.1 var(--serif);overflow-wrap:anywhere}.contact-card small{color:var(--muted);overflow-wrap:anywhere}.contact-card:hover{background:var(--panel)}.resume-frame{border:1px solid var(--line)}.resume-frame iframe{display:block;width:100%;min-height:420px;height:min(76vh,920px);border:0;background:var(--surface)}.github-repo p{margin-block:8px 14px;color:var(--muted)}.compact-heading{margin-top:32px}.github-stats-grid{display:grid;grid-template-columns:1fr 1fr;gap:14px}.github-stat-image{min-height:135px;display:grid;place-items:center;padding:14px;border:1px solid var(--line);background:var(--surface)}.github-streak{grid-column:1 / -1}.github-stat-image a,.small-note a{text-decoration:underline;text-underline-offset:3px}.lab-topology,.project-flow{padding:clamp(18px,4vw,40px);border:1px solid var(--line);background:var(--surface)}.lab-topology{margin-bottom:36px}.lab-topology figcaption,.project-flow figcaption{color:var(--muted);margin-top:15px;font-size:.85rem}.topology-node{display:flex;flex-direction:column;align-items:center;justify-content:center;min-height:96px;padding:10px;border:1px solid var(--line);text-align:center}.topology-node span,.topology-users{color:var(--gold);font:.72rem var(--mono)}.topology-node strong{font:clamp(1.4rem,3vw,2.1rem) var(--serif)}.topology-node small{color:var(--muted)}.dc-node{max-width:420px;margin-inline:auto;border-color:var(--accent);background:var(--panel)}.topology-branches{position:relative;display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:14px;padding-top:24px}.topology-branches:before{content:"";position:absolute;top:0;left:50%;height:24px;border-left:1px solid var(--line)}.topology-branches:after{content:"";position:absolute;top:23px;left:25%;right:25%;border-top:1px solid var(--line)}.topology-users{margin-top:12px}.project-flow ol{padding-left:1.5rem;margin:0}.project-flow li{padding:9px;color:var(--muted)}.project-flow li::marker{color:var(--gold);font-family:var(--mono)}.writeup-filters{display:grid;grid-template-columns:1.5fr 1fr 1fr;gap:13px}.writeup-filters label{display:grid;gap:5px;color:var(--muted);font:.82rem var(--mono);min-width:0}.writeup-filters :is(input,select){width:100%;padding:9px 10px;min-height:42px;border:1px solid var(--line);background:var(--surface);color:var(--ink)}.writeup-grid{margin-top:14px}.writeup-card h2{font-size:clamp(1.9rem,4vw,3.3rem)}.writeup-card .text-link{margin-top:15px}[data-no-results]{margin-top:20px}.empty-state{padding:clamp(22px,5vw,48px);border:1px solid var(--line);background:var(--surface)}.empty-state p{margin-top:10px;color:var(--muted)}.article-header>.text-link{margin-bottom:18px}.article-meta{justify-content:flex-start;margin-top:14px}.article-layout{display:grid;grid-template-columns:minmax(0,18rem) minmax(0,47rem);justify-content:start;gap:clamp(22px,5vw,75px);padding-block:36px}.article-layout:not(:has(.article-sidebar)){grid-template-columns:minmax(0,47rem)}.article-sidebar{position:sticky;top:calc(var(--header) + 22px);max-height:calc(100svh - var(--header) - 44px);overflow:auto;padding:16px;border-left:1px solid var(--line);color:var(--muted)}.article-sidebar strong{color:var(--ink)}.article-sidebar ul{list-style:none;margin:10px 0 0;padding:0}.article-sidebar li{margin-top:8px;font-size:.84rem;line-height:1.45}.article-sidebar .indent{padding-left:12px}.article-sidebar a:hover{color:var(--ink);text-decoration:underline}.article-prose{min-width:0;overflow-wrap:anywhere;font-size:clamp(.99rem,1.5vw,1.08rem);line-height:1.75}.article-prose :is(h1,h2,h3,h4){margin:1.2em 0 .45em}.article-prose>:first-child{margin-top:0}.article-prose h1{font-size:2.55rem}.article-prose h2{font-size:clamp(2.05rem,4vw,3rem)}.article-prose h3{font-size:clamp(1.65rem,3vw,2.3rem)}.article-prose :is(blockquote,.writeup-callout){margin:20px 0;padding:14px 18px;border-left:3px solid var(--gold);background:var(--surface)}.article-prose :not(pre)>code{padding:.15em .25em;background:var(--panel);color:var(--accent);font:.9em var(--mono)}.article-prose .expressive-code{margin-block:18px}.article-prose pre{max-width:100%;overflow-x:auto}.article-prose table{display:block;overflow-x:auto;border-collapse:collapse;margin-block:18px}.article-prose :is(th,td){border:1px solid var(--line);padding:7px 11px;text-align:left}.article-prose th{background:var(--panel)}.article-prose img{display:block;margin-block:20px}.reading-progress{position:fixed;z-index:6;top:var(--header);left:0;width:100%;height:3px;border:0;appearance:none;accent-color:var(--accent);background:transparent}.reading-progress::-webkit-progress-bar{background:transparent}.reading-progress::-webkit-progress-value{background:var(--accent)}.reading-progress::-moz-progress-bar{background:var(--accent)}.article-end{padding-top:20px}.article-end h2{margin-bottom:15px}.article-pagination{display:flex;flex-wrap:wrap;gap:15px;margin-top:22px}.article-pagination a{flex:1 1 220px;padding:14px;border:1px solid var(--line)}.article-pagination a:hover{border-color:var(--accent)}.site-footer{border-top:1px solid var(--line);background:#101511;padding-block:33px}.footer-inner{display:grid;grid-template-columns:1fr 1fr 1fr;gap:24px}.footer-links{display:flex;flex-wrap:wrap;align-content:start;gap:10px 16px;color:var(--muted);font-size:.8rem}.footer-links a:hover{color:var(--ink);text-decoration:underline}.footer-note,.footer-copy{color:var(--muted);font-size:.75rem;margin-top:8px}@media(prefers-reduced-motion:no-preference){@keyframes enter{0%{opacity:.45;transform:translateY(9px)}}.hero-copy>*{animation:enter .45s ease-out both}.hero-copy>:nth-child(2){animation-delay:35ms}.hero-copy>:nth-child(3){animation-delay:70ms}.hero-copy>:nth-child(4){animation-delay:105ms}::view-transition-old(root),::view-transition-new(root){animation-duration:.22s}}@media(max-width:1000px){.header-inner{grid-template-columns:1fr auto}.nav-links,.header-resume{display:none}.mobile-nav{display:block}}@media(max-width:900px){.contact-grid{grid-template-columns:1fr}}@media(max-width:760px){:root{--header: 62px}.hero{grid-template-columns:1fr;padding-bottom:44px}.hero h1 em{display:inline}.hero-art{max-width:540px;margin-right:12px}.hero-art img{aspect-ratio:4 / 3}.split-section,.content-layout,.article-layout,.writeup-filters{grid-template-columns:minmax(0,1fr)}.article-sidebar{position:static;max-height:none}.about-art{max-width:500px}.section-heading{display:block}.section-description{margin-top:10px}}@media(max-width:520px){.hero h1{font-size:clamp(3.6rem,15vw,5.2rem)}.project-grid,.writeup-grid,.expertise-grid,.github-stats-grid,.footer-inner{grid-template-columns:minmax(0,1fr)}.credential-strip .eyebrow{width:100%}.cert-monogram{padding:5px 6px}}@media(prefers-reduced-motion:reduce){*,*:before,*:after{animation:none!important;transition:none!important}::view-transition-group(*),::view-transition-old(*),::view-transition-new(*){animation:none!important}.project-card:hover,.project-card:focus-within,.writeup-card:hover,.writeup-card:focus-within{transform:none}}.hero-proof{color:var(--ink);font-weight:600;margin:1.25rem 0 .5rem}.hero-proof a{text-decoration:underline;text-underline-offset:.2em}.hero-availability{color:var(--muted);margin:.5rem 0 1.25rem}.table-scroll{max-width:100%;overflow-x:auto}.results-table{width:100%;border-collapse:collapse;text-align:left}.results-table caption{text-align:left;color:var(--muted);padding-block:.5rem}.results-table :is(th,td){border-bottom:1px solid var(--line);padding:.6rem .75rem}.results-table th:first-child{padding-left:0}.cert-detail-card{display:grid;grid-template-columns:minmax(0,1fr) auto;gap:1rem}.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}
