@font-face{font-family:Overpass Variable;font-style:normal;font-display:swap;font-weight:100 900;src:url(/_astro/overpass-cyrillic-ext-wght-normal.B1PfurAb.woff2)format("woff2-variations");unicode-range:U+460-52F,U+1C80-1C8A,U+20B4,U+2DE0-2DFF,U+A640-A69F,U+FE2E-FE2F}@font-face{font-family:Overpass Variable;font-style:normal;font-display:swap;font-weight:100 900;src:url(/_astro/overpass-cyrillic-wght-normal.Bb0oHPsy.woff2)format("woff2-variations");unicode-range:U+301,U+400-45F,U+490-491,U+4B0-4B1,U+2116}@font-face{font-family:Overpass Variable;font-style:normal;font-display:swap;font-weight:100 900;src:url(/_astro/overpass-vietnamese-wght-normal.BfgOsjc9.woff2)format("woff2-variations");unicode-range:U+102-103,U+110-111,U+128-129,U+168-169,U+1A0-1A1,U+1AF-1B0,U+300-301,U+303-304,U+308-309,U+323,U+329,U+1EA0-1EF9,U+20AB}@font-face{font-family:Overpass Variable;font-style:normal;font-display:swap;font-weight:100 900;src:url(/_astro/overpass-latin-ext-wght-normal.DvafStyF.woff2)format("woff2-variations");unicode-range:U+100-2BA,U+2BD-2C5,U+2C7-2CC,U+2CE-2D7,U+2DD-2FF,U+304,U+308,U+329,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:Overpass Variable;font-style:normal;font-display:swap;font-weight:100 900;src:url(/_astro/overpass-latin-wght-normal.qAR8M_co.woff2)format("woff2-variations");unicode-range:U+??,U+131,U+152-153,U+2BB-2BC,U+2C6,U+2DA,U+2DC,U+304,U+308,U+329,U+2000-206F,U+20AC,U+2122,U+2191,U+2193,U+2212,U+2215,U+FEFF,U+FFFD}@font-face{font-family:Overpass Mono Variable;font-style:normal;font-display:swap;font-weight:300 700;src:url(/_astro/overpass-mono-cyrillic-ext-wght-normal.CM3vVNo5.woff2)format("woff2-variations");unicode-range:U+460-52F,U+1C80-1C8A,U+20B4,U+2DE0-2DFF,U+A640-A69F,U+FE2E-FE2F}@font-face{font-family:Overpass Mono Variable;font-style:normal;font-display:swap;font-weight:300 700;src:url(/_astro/overpass-mono-cyrillic-wght-normal.BV0qkOfe.woff2)format("woff2-variations");unicode-range:U+301,U+400-45F,U+490-491,U+4B0-4B1,U+2116}@font-face{font-family:Overpass Mono Variable;font-style:normal;font-display:swap;font-weight:300 700;src:url(/_astro/overpass-mono-vietnamese-wght-normal.B_p7sZEm.woff2)format("woff2-variations");unicode-range:U+102-103,U+110-111,U+128-129,U+168-169,U+1A0-1A1,U+1AF-1B0,U+300-301,U+303-304,U+308-309,U+323,U+329,U+1EA0-1EF9,U+20AB}@font-face{font-family:Overpass Mono Variable;font-style:normal;font-display:swap;font-weight:300 700;src:url(/_astro/overpass-mono-latin-ext-wght-normal.D14p1K_g.woff2)format("woff2-variations");unicode-range:U+100-2BA,U+2BD-2C5,U+2C7-2CC,U+2CE-2D7,U+2DD-2FF,U+304,U+308,U+329,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:Overpass Mono Variable;font-style:normal;font-display:swap;font-weight:300 700;src:url(/_astro/overpass-mono-latin-wght-normal.CujxpGkb.woff2)format("woff2-variations");unicode-range:U+??,U+131,U+152-153,U+2BB-2BC,U+2C6,U+2DA,U+2DC,U+304,U+308,U+329,U+2000-206F,U+20AC,U+2122,U+2191,U+2193,U+2212,U+2215,U+FEFF,U+FFFD}@font-face{font-family:Public Sans Variable;font-style:normal;font-display:swap;font-weight:100 900;src:url(/_astro/public-sans-vietnamese-wght-normal.CtlIRbEm.woff2)format("woff2-variations");unicode-range:U+102-103,U+110-111,U+128-129,U+168-169,U+1A0-1A1,U+1AF-1B0,U+300-301,U+303-304,U+308-309,U+323,U+329,U+1EA0-1EF9,U+20AB}@font-face{font-family:Public Sans Variable;font-style:normal;font-display:swap;font-weight:100 900;src:url(/_astro/public-sans-latin-ext-wght-normal.MQgHevqp.woff2)format("woff2-variations");unicode-range:U+100-2BA,U+2BD-2C5,U+2C7-2CC,U+2CE-2D7,U+2DD-2FF,U+304,U+308,U+329,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:Public Sans Variable;font-style:normal;font-display:swap;font-weight:100 900;src:url(/_astro/public-sans-latin-wght-normal.DdeTHZLK.woff2)format("woff2-variations");unicode-range:U+??,U+131,U+152-153,U+2BB-2BC,U+2C6,U+2DA,U+2DC,U+304,U+308,U+329,U+2000-206F,U+20AC,U+2122,U+2191,U+2193,U+2212,U+2215,U+FEFF,U+FFFD}@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+460-52F,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+301,U+400-45F,U+490-491,U+4B0-4B1,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+1F??}@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+370-377,U+37A-37F,U+384-38A,U+38C,U+38E-3A1,U+3A3-3FF}@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+102-103,U+110-111,U+128-129,U+168-169,U+1A0-1A1,U+1AF-1B0,U+300-301,U+303-304,U+308-309,U+323,U+329,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+100-2BA,U+2BD-2C5,U+2C7-2CC,U+2CE-2D7,U+2DD-2FF,U+304,U+308,U+329,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+??,U+131,U+152-153,U+2BB-2BC,U+2C6,U+2DA,U+2DC,U+304,U+308,U+329,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 Sans Variable;font-style:normal;font-display:swap;font-weight:100 700;src:url(/_astro/ibm-plex-sans-cyrillic-ext-wght-normal.d45eAU9y.woff2)format("woff2-variations");unicode-range:U+460-52F,U+1C80-1C8A,U+20B4,U+2DE0-2DFF,U+A640-A69F,U+FE2E-FE2F}@font-face{font-family:IBM Plex Sans Variable;font-style:normal;font-display:swap;font-weight:100 700;src:url(/_astro/ibm-plex-sans-cyrillic-wght-normal.BAAhND-U.woff2)format("woff2-variations");unicode-range:U+301,U+400-45F,U+490-491,U+4B0-4B1,U+2116}@font-face{font-family:IBM Plex Sans Variable;font-style:normal;font-display:swap;font-weight:100 700;src:url(/_astro/ibm-plex-sans-greek-wght-normal.CmyJS8uq.woff2)format("woff2-variations");unicode-range:U+370-377,U+37A-37F,U+384-38A,U+38C,U+38E-3A1,U+3A3-3FF}@font-face{font-family:IBM Plex Sans Variable;font-style:normal;font-display:swap;font-weight:100 700;src:url(/_astro/ibm-plex-sans-vietnamese-wght-normal.Dg1JeJN0.woff2)format("woff2-variations");unicode-range:U+102-103,U+110-111,U+128-129,U+168-169,U+1A0-1A1,U+1AF-1B0,U+300-301,U+303-304,U+308-309,U+323,U+329,U+1EA0-1EF9,U+20AB}@font-face{font-family:IBM Plex Sans Variable;font-style:normal;font-display:swap;font-weight:100 700;src:url(/_astro/ibm-plex-sans-latin-ext-wght-normal.CIII54If.woff2)format("woff2-variations");unicode-range:U+100-2BA,U+2BD-2C5,U+2C7-2CC,U+2CE-2D7,U+2DD-2FF,U+304,U+308,U+329,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 Sans Variable;font-style:normal;font-display:swap;font-weight:100 700;src:url(/_astro/ibm-plex-sans-latin-wght-normal.IvpUvPa2.woff2)format("woff2-variations");unicode-range:U+??,U+131,U+152-153,U+2BB-2BC,U+2C6,U+2DA,U+2DC,U+304,U+308,U+329,U+2000-206F,U+20AC,U+2122,U+2191,U+2193,U+2212,U+2215,U+FEFF,U+FFFD}*,:before,:after{box-sizing:border-box}*{margin:0}:root{--display:"Overpass Variable", "Overpass", system-ui, sans-serif;--mono:"Overpass Mono Variable", "Overpass Mono", ui-monospace, monospace;--on-band:#fff;--on-band-soft:color-mix(in srgb, #fff 76%, var(--band));--line-on-band:color-mix(in srgb, #fff 16%, var(--band));--radius:6px;--shadow:0 1px 2px #0c1d300f, 0 8px 24px #0c1d3012;--container:1200px;--gutter:clamp(1rem, 4vw, 2.25rem);color-scheme:light}html{-webkit-text-size-adjust:100%}@media (prefers-reduced-motion:no-preference){html{scroll-behavior:smooth}}body{font-family:var(--font);color:var(--ink);background:var(--bg);-webkit-font-smoothing:antialiased;font-size:1.0625rem;line-height:1.7}img,svg,video{max-width:100%;height:auto;display:block}h1,h2,h3{font-family:var(--display);color:var(--ink);text-wrap:balance;line-height:1.15}h1{letter-spacing:-.012em;font-size:clamp(2.3rem,5.5vw,3.9rem);font-weight:800;line-height:1.04}h2{letter-spacing:-.008em;font-size:clamp(1.6rem,3vw,2.15rem);font-weight:700}h3{font-size:1.2rem;font-weight:700}p+p{margin-top:.9em}a{color:var(--primary);text-underline-offset:.2em;text-decoration-thickness:1px}a:hover{text-decoration-thickness:2px}:focus-visible{outline:3px solid var(--primary);outline-offset:3px;border-radius:3px}.band :focus-visible{outline-color:var(--accent-on-band)}:where(ul[class],ol[class]){padding:0;list-style:none}.container{width:100%;max-width:var(--container);padding-inline:var(--gutter);margin-inline:auto}.muted{color:var(--muted)}.visually-hidden{clip-path:inset(50%);white-space:nowrap;width:1px;height:1px;position:absolute;overflow:hidden}.skip{z-index:100;background:var(--primary);color:#fff;border-radius:var(--radius);padding:.6rem 1rem;position:absolute;top:-100px;left:1rem}.skip:focus{top:1rem}.eyebrow{font-family:var(--mono);letter-spacing:.1em;text-transform:uppercase;color:var(--muted);font-size:.78rem;font-weight:500}.eyebrow a{color:inherit}.band{background:var(--band);color:var(--on-band)}.band h1,.band h2,.band h3,.band a{color:var(--on-band)}.band .eyebrow{color:var(--accent-on-band)}.band .lead{color:var(--on-band-soft)}.btn{border-radius:var(--radius);border:1.5px solid var(--primary);min-height:46px;font-family:var(--display);letter-spacing:.01em;justify-content:center;align-items:center;padding:.6rem 1.25rem;font-size:1rem;font-weight:700;line-height:1.1;text-decoration:none;transition:background-color .15s,color .15s,border-color .15s;display:inline-flex}.btn-sm{min-height:40px;padding:.45rem 1rem;font-size:.95rem}.btn-primary{background:var(--primary);color:#fff}.btn-primary:hover{background:color-mix(in srgb, var(--primary) 82%, black)}.btn-ghost{background:var(--bg);color:var(--primary)}.btn-ghost:hover{background:var(--surface)}.band .btn-sign,.btn-sign{background:var(--accent-on-band);border-color:var(--accent-on-band);color:var(--band)}.btn-sign:hover{background:color-mix(in srgb, var(--accent-on-band) 86%, white)}.band .btn-outline-light{border-color:color-mix(in srgb, #fff 55%, var(--band));color:var(--on-band);background:0 0}.band .btn-outline-light:hover{background:color-mix(in srgb, #fff 8%, var(--band));border-color:#fff}.btn-row{flex-wrap:wrap;gap:.75rem;margin-top:2rem;display:flex}.site-header{top:env(safe-area-inset-top,0px);z-index:50;background:var(--bg);border-bottom:1px solid var(--border);position:sticky}.header-inner{justify-content:space-between;align-items:center;gap:1rem;min-height:70px;display:flex}.brand{flex-direction:column;gap:.15rem;line-height:1.1;text-decoration:none;display:flex}.brand-name{font-family:var(--display);color:var(--ink);font-size:1.15rem;font-weight:800}.brand-role{font-family:var(--mono);letter-spacing:.1em;text-transform:uppercase;color:var(--muted);font-size:.7rem}.menu-btn{font-family:var(--display);color:var(--primary);background:var(--bg);border:1.5px solid var(--border);border-radius:var(--radius);cursor:pointer;min-height:44px;padding:0 1rem;font-size:.95rem;font-weight:700}#site-nav{inset:78px var(--gutter) auto var(--gutter);border:1px solid var(--border);border-radius:var(--radius);background:var(--bg);width:auto;color:var(--ink);margin:0;padding:.75rem;box-shadow:0 16px 40px #0c1d3033}#site-nav ul{flex-direction:column;padding:0;list-style:none;display:flex}#site-nav ul a{color:var(--ink);font-family:var(--display);border-radius:4px;padding:.75rem;font-weight:600;text-decoration:none;display:block}#site-nav ul a:hover{background:var(--surface)}#site-nav ul a[aria-current=page]{color:var(--primary);background:var(--surface)}#site-nav .btn{width:100%;margin-top:.5rem}@media (width>=960px){.menu-btn{display:none}#site-nav,#site-nav:not(:popover-open){box-shadow:none;background:0 0;border:0;align-items:center;gap:.5rem;padding:0;display:flex;position:static;inset:auto;overflow:visible}#site-nav ul{flex-direction:row;gap:.1rem}#site-nav ul a{padding:.5rem .75rem;font-size:.98rem}#site-nav ul a[aria-current=page]{box-shadow:inset 0 -3px 0 var(--accent);background:0 0;border-radius:0}#site-nav .btn{width:auto;margin:0 0 0 .75rem}}.hero{isolation:isolate;position:relative;overflow:hidden}.hero-lines{z-index:-1;width:100%;height:100%;position:absolute;inset:0;-webkit-mask-image:linear-gradient(90deg,#0000 0% 42%,#00000080 52%,#000 66%);mask-image:linear-gradient(90deg,#0000 0% 42%,#00000080 52%,#000 66%)}.hero-inner{align-items:center;gap:2.5rem;padding-block:clamp(3.5rem,9vw,6.5rem) clamp(5.5rem,11vw,8rem);display:grid}.hero-text{max-width:42rem}.hero h1{margin-top:.9rem}.hero-focus .sep{color:var(--accent-on-band);margin-inline:.5em}.hero-focus{font-family:var(--display);color:var(--on-band);margin-top:1rem;font-size:clamp(1.05rem,2.1vw,1.3rem);font-weight:600}.hero-intro{color:var(--on-band-soft);max-width:38rem;margin-top:1.1rem;font-size:1.08rem}.hero-photo{justify-self:end;position:relative}.hero-photo img,.photo-slot{aspect-ratio:4/5;object-fit:cover;border-radius:12px;width:320px;box-shadow:0 20px 50px #00000059}.hero-photo:after{content:"";pointer-events:none;border:2px solid #ffffffd9;border-radius:7px;position:absolute;inset:9px}.photo-slot{background:var(--line-on-band);color:var(--on-band);place-items:center;display:grid}@media (width<=859px){.hero-inner{gap:1.75rem}.hero-photo{order:-1;justify-self:start}.hero-photo img,.photo-slot{border-radius:8px;width:112px}.hero-photo:after{border-width:1.5px;border-radius:5px;inset:5px}.hero-lines{opacity:.45;-webkit-mask-image:linear-gradient(#000 0%,#0000 38%);mask-image:linear-gradient(#000 0%,#0000 38%)}}@media (width>=860px){.hero-inner.has-photo{grid-template-columns:1fr auto}}.stats{z-index:1;margin-top:clamp(-4rem,-7vw,-3rem);position:relative}.stats-panel{background:var(--bg);border:1px solid var(--border);border-radius:var(--radius);box-shadow:var(--shadow);display:grid}.stats-panel .metric{border-top:1px solid var(--border);padding:1.5rem 1.6rem}.stats-panel .metric:first-child{border-top:0}@media (width>=640px){.stats-panel{grid-template-columns:repeat(2,1fr)}.stats-panel .metric{border-top:0;border-left:1px solid var(--border)}.stats-panel .metric:nth-child(odd){border-left:0}.stats-panel .metric:nth-child(n+3){border-top:1px solid var(--border)}}@media (width>=1000px){.stats-panel{grid-template-columns:repeat(auto-fit,minmax(0,1fr))}.stats-panel .metric,.stats-panel .metric:nth-child(n){border-top:0;border-left:1px solid var(--border)}.stats-panel .metric:first-child{border-left:0}}.metric-value{font-family:var(--display);color:var(--primary);font-variant-numeric:tabular-nums;letter-spacing:-.01em;font-size:clamp(1.9rem,3.6vw,2.6rem);font-weight:800;line-height:1}.metric-label{color:var(--ink);margin-top:.55rem;font-size:.95rem;line-height:1.45}.metric-context{color:var(--muted);margin-top:.3rem;font-size:.85rem}.section{padding-block:clamp(3.5rem,8vw,5.5rem)}.section.tint{background:var(--surface);border-block:1px solid var(--border)}.section-title{margin-bottom:2.25rem}.section-title:before{content:"";background:repeating-linear-gradient(90deg, var(--accent) 0 14px, transparent 14px 24px);width:56px;height:4px;margin-bottom:1rem;display:block}.section-intro{color:var(--muted);max-width:44rem;margin:-1rem 0 2rem}.section-more{font-family:var(--display);margin-top:2.25rem;font-weight:700}.section-more a{text-decoration:none}.section-more a:hover{text-decoration:underline}.page-head{padding-block:clamp(3rem,7vw,4.75rem) clamp(2.75rem,6vw,4rem);position:relative}.page-head:after{content:"";background:repeating-linear-gradient(90deg, var(--line-on-band) 0 36px, transparent 36px 64px);height:3px;position:absolute;bottom:18px;left:0;right:0}.page-head h1{max-width:22em;margin-top:.6rem;font-size:clamp(2rem,4.6vw,3.1rem)}.page-head .eyebrow a{text-decoration:none}.page-head .eyebrow a:hover{text-decoration:underline}.lead{color:var(--muted);max-width:46rem;margin-top:1rem;font-size:1.15rem}.prose{max-width:44rem;font-size:1.1rem}.grid{gap:1.5rem;display:grid}@media (width>=640px){.grid-2,.grid-3{grid-template-columns:repeat(2,1fr)}}@media (width>=1000px){.grid-3{grid-template-columns:repeat(3,1fr)}}.card{background:var(--bg);border:1px solid var(--border);border-radius:var(--radius)}.expertise{border-top:1px solid var(--border);display:grid}@media (width>=640px){.expertise{grid-template-columns:repeat(2,1fr)}}@media (width>=1000px){.expertise{grid-template-columns:repeat(3,1fr)}}.expertise-item{border-bottom:1px solid var(--border);flex-direction:column;gap:.6rem;padding:1.75rem 1.5rem 1.75rem 0;display:flex}@media (width>=640px){.expertise-item{padding:1.9rem 1.75rem}.expertise-item:nth-child(odd){padding-left:0}}@media (width>=1000px){.expertise-item,.expertise-item:nth-child(odd){border-left:1px solid var(--border);padding:2rem 1.75rem}.expertise-item:nth-child(3n+1){border-left:0;padding-left:0}}.expertise-icon{border-radius:var(--radius);background:var(--band);width:48px;height:48px;color:var(--accent-on-band);place-items:center;margin-bottom:.35rem;display:inline-grid}.expertise-item p{color:var(--muted);flex:1;font-size:.98rem}.more{font-family:var(--display);font-size:.95rem;font-weight:700;text-decoration:none}.more:hover{text-decoration:underline}.project-card{flex-direction:column;transition:border-color .15s,box-shadow .15s;display:flex;position:relative;overflow:hidden}.project-card:hover{border-color:color-mix(in srgb, var(--primary) 40%, var(--border));box-shadow:var(--shadow)}.card-media{aspect-ratio:16/9;background:var(--band)}.card-media img{object-fit:cover;width:100%;height:100%}.card-media-fallback{height:100%;color:var(--on-band);background:repeating-linear-gradient(90deg, var(--line-on-band) 0 30px, transparent 30px 52px) left 36% / 100% 2px no-repeat, repeating-linear-gradient(90deg, var(--line-on-band) 0 30px, transparent 30px 52px) left 64% / 100% 2px no-repeat, var(--band);flex-direction:column;justify-content:flex-end;gap:.7rem;padding:1.25rem 1.4rem;display:flex;position:relative}.card-media-fallback .icon{color:var(--accent-on-band);position:absolute;top:1.25rem;left:1.4rem}.card-media-fallback span{font-family:var(--mono);letter-spacing:.1em;text-transform:uppercase;color:var(--on-band-soft);font-size:.75rem}.card-body{flex-direction:column;flex:1;gap:.55rem;padding:1.4rem 1.4rem 1.6rem;display:flex}.card-title{font-size:1.2rem;line-height:1.25}.card-title a{color:var(--ink);text-decoration:none}.card-title a:after{content:"";position:absolute;inset:0}.project-card:hover .card-title a{color:var(--primary)}.project-card:has(a:focus-visible){outline:3px solid var(--primary);outline-offset:3px}.project-card a:focus-visible{outline:none}.card-text{color:var(--muted);font-size:.97rem}.card-metric{border-top:1px solid var(--border);color:var(--muted);margin-top:auto;padding-top:.9rem;font-size:.92rem;line-height:1.4}.card-metric strong{font-family:var(--display);color:var(--primary);font-variant-numeric:tabular-nums;font-size:1.3rem;font-weight:800;display:block}.list-view{grid-template-columns:1fr}@media (width>=760px){.list-view .project-card{flex-direction:row}.list-view .card-media{aspect-ratio:auto;flex:0 0 300px}}.badges{flex-wrap:wrap;gap:.4rem;margin-top:.85rem;display:flex}.badges a{border:1px solid var(--border);background:var(--bg);font-family:var(--mono);color:var(--ink);letter-spacing:.02em;border-radius:4px;padding:.22rem .6rem;font-size:.78rem;text-decoration:none;display:inline-block}.badges a:hover{border-color:var(--primary);color:var(--primary)}.filters ul{flex-wrap:wrap;gap:.5rem;margin-bottom:2.25rem;display:flex}.filters a{border-radius:var(--radius);border:1px solid var(--border);background:var(--bg);min-height:40px;color:var(--ink);font-family:var(--display);align-items:center;padding:.35rem .95rem;font-size:.95rem;font-weight:600;text-decoration:none;display:inline-flex}.filters a:hover{border-color:var(--primary)}.filters a[aria-current=page]{background:var(--band);border-color:var(--band);color:#fff}.timeline{gap:2.25rem;display:grid;position:relative}.timeline:before{content:"";background:var(--primary);border-radius:2px;width:4px;position:absolute;top:.6rem;bottom:.6rem;left:7px}.timeline-item{gap:.2rem 2rem;max-width:60rem;padding-left:2.25rem;display:grid;position:relative}.timeline-item:before{content:"";background:var(--bg);border:4px solid var(--primary);border-radius:50%;width:18px;height:18px;position:absolute;top:.3rem;left:0}.timeline-item.current:before{background:var(--accent)}.timeline-dates{font-family:var(--mono);letter-spacing:.04em;color:var(--muted);padding-top:.15rem;font-size:.82rem}.timeline-title{font-size:1.2rem}.timeline-sub{color:var(--primary);margin-top:.15rem;font-weight:600}.timeline-note{color:var(--muted);font-size:.95rem}.timeline-lines{gap:.35rem;margin-top:.6rem;padding-left:1.1rem;list-style:outside;display:grid}.timeline-lines li::marker{color:var(--muted)}@media (width>=860px){.timeline-item{grid-template-columns:12.5rem 1fr}}.pubs{border-top:1px solid var(--border);display:grid}.pub{border-bottom:1px solid var(--border);gap:.2rem 1.5rem;padding-block:1.4rem;display:grid}@media (width>=720px){.pub{grid-template-columns:5rem 1fr}}.pub-year{font-family:var(--display);color:var(--primary);font-variant-numeric:tabular-nums;font-size:1.35rem;font-weight:800;line-height:1.3}.pub-title{font-family:var(--display);font-size:1.12rem;font-weight:700;line-height:1.35}.pub-title a{color:var(--ink);text-decoration:none}.pub-title a:hover{color:var(--primary);text-decoration:underline}.pub-authors,.pub-venue{color:var(--muted);margin-top:.35rem;font-size:.95rem}.pub-authors strong{color:var(--ink);font-weight:650}.pub-meta{flex-wrap:wrap;align-items:center;gap:.5rem 1.1rem;margin-top:.6rem;font-size:.9rem;display:flex}.pub-meta a{font-family:var(--display);font-weight:700}.pub-type{font-family:var(--mono);letter-spacing:.08em;text-transform:uppercase;color:var(--muted);font-size:.75rem}.pub-group+.pub-group{margin-top:3rem}.pub-group h3{margin-bottom:.75rem}.skill-group{padding:1.6rem 1.6rem 1.2rem}.skill-group h2{margin-bottom:.6rem;font-size:1.25rem}.skill-group ul{padding:0;list-style:none}.skill-group li{border-top:1px solid var(--border);padding-block:.65rem;scroll-margin-top:96px}.skill-group li:target{background:color-mix(in srgb, var(--accent) 16%, transparent)}.skill-name{font-weight:600;display:block}.skill-used{color:var(--muted);font-size:.9rem;display:block}.head-metrics{gap:1.5rem 2.5rem;margin-top:2.5rem;display:grid}@media (width>=640px){.head-metrics{grid-template-columns:repeat(auto-fit,minmax(200px,1fr))}}.head-metrics .metric{border-left:3px solid var(--accent-on-band);padding-left:1rem}.head-metrics .metric-value{white-space:nowrap;font-size:clamp(1.5rem,2.5vw,2rem)}.band .metric-value{color:var(--on-band)}.band .metric-label,.band .metric-context{color:var(--on-band-soft)}.project-layout{gap:2.75rem;padding-block:clamp(2.5rem,6vw,4rem);display:grid}.glance{background:var(--surface);border:1px solid var(--border);border-radius:var(--radius);align-self:start;padding:1.5rem}.glance h2{font-family:var(--mono);text-transform:uppercase;letter-spacing:.12em;color:var(--muted);margin-bottom:.75rem;font-size:.8rem;font-weight:500}.glance h3{font-family:var(--mono);text-transform:uppercase;letter-spacing:.1em;color:var(--muted);margin-top:1.25rem;font-size:.75rem;font-weight:500}.glance dl>div{border-top:1px solid var(--border);padding-block:.6rem}.glance dt{font-family:var(--mono);text-transform:uppercase;letter-spacing:.1em;color:var(--muted);font-size:.72rem}.glance dd{margin:.15rem 0 0;font-weight:600;line-height:1.45}.project-body{align-content:start;gap:2.75rem;min-width:0;display:grid}.project-section h2{align-items:baseline;gap:.75rem;margin-bottom:1rem;font-size:1.6rem;display:flex}.step-no{font-family:var(--mono);color:var(--muted);letter-spacing:.06em;font-size:.85rem;font-weight:500}.project-section p{max-width:46rem}.steps{counter-reset:step;gap:.9rem;max-width:46rem;display:grid}.steps li{counter-increment:step;padding-left:2.6rem;position:relative}.steps li:before{content:counter(step);background:var(--band);width:1.8rem;height:1.8rem;color:var(--accent-on-band);font-family:var(--display);border-radius:50%;place-items:center;font-size:.85rem;font-weight:800;display:grid;position:absolute;top:.1rem;left:0}@media (width>=960px){.project-layout{grid-template-columns:300px 1fr}.glance{position:sticky;top:96px}}.figure{margin:0}.figure img{border-radius:var(--radius);border:1px solid var(--border);width:100%}.figure figcaption{color:var(--muted);margin-top:.55rem;font-size:.9rem}.figure .source{font-style:italic}.gallery{gap:1.5rem;display:grid}@media (width>=720px){.gallery{grid-template-columns:repeat(2,1fr)}}.cta{gap:1.4rem;max-width:46rem;font-size:1.1rem;display:grid}.contact-links{flex-wrap:wrap;gap:.5rem 1.4rem;padding:0;list-style:none;display:flex}.contact-links.as-buttons{gap:.75rem}.plain-list{gap:.6rem;display:grid}.cert-list{border-top:1px solid var(--border);max-width:52rem;display:grid}.cert-list li{border-bottom:1px solid var(--border);gap:.1rem 1.5rem;padding-block:1rem;display:grid}@media (width>=720px){.cert-list li{grid-template-columns:5rem 1fr}}.cert-year{font-family:var(--display);color:var(--primary);font-size:1.15rem;font-weight:800}.cert-name{font-weight:650}.cert-issuer{color:var(--muted);font-size:.95rem}.site-footer{padding-block:3rem 1.25rem}.footer-inner{border-bottom:1px solid var(--line-on-band);gap:1.75rem;padding-bottom:2rem;display:grid}.footer-name{font-family:var(--display);font-size:1.2rem;font-weight:800}.footer-role{color:var(--on-band-soft);font-size:.95rem}.footer-nav{flex-wrap:wrap;gap:.4rem 1.4rem;padding:0;list-style:none;display:flex}.site-footer a{color:var(--on-band)}.footer-base{color:var(--on-band-soft);padding-top:1.25rem;font-size:.85rem}@media (width>=860px){.footer-inner{grid-template-columns:1.2fr 2fr 1.6fr;align-items:start}}.preview-banner{color:#3d2f00;text-align:center;padding:.5rem var(--gutter);background:#fff4cc;border-bottom:1px solid #e8d48a;font-size:.9rem}mark.need{color:#3d2f00;background:#ffe58a;border-radius:3px;padding:0 .2em;font-weight:500}.btn.need{border-style:dashed}a.need:not(.btn){text-decoration-style:dashed}
