@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+460-52F,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+301,U+400-45F,U+490-491,U+4B0-4B1,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+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: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+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: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+??,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}:root{--font-sans:"Geist Variable", ui-sans-serif, system-ui, sans-serif;--ease-out:cubic-bezier(.23, 1, .32, 1);--ease-scroll:cubic-bezier(.3, .55, .4, 1);--linear:linear;--space-section:6.5rem;--radius-pill:999px;color-scheme:light;--bg:#f5f7fa;--surface:#fff;--ink:#0d1b2e;--ink-2:#33445c;--muted:#5a6b82;--line:#d9e0ea;--accent:#0a5fc2;--accent-hover:#0850a6;--accent-ink:#fff;--tag-bg:#e6edf7;--tag-ink:#1f3d66;--selection:#cfe2fb;--shadow:#0d1b2e52}:root[data-theme=dark]{color-scheme:dark;--bg:#0b1322;--surface:#111c2f;--ink:#e8eef7;--ink-2:#b8c5d8;--muted:#8a9bb4;--line:#1f2d45;--accent:#74b4ff;--accent-hover:#9cc9ff;--accent-ink:#061120;--tag-bg:#14223b;--tag-ink:#a9cbff;--selection:#1d3b66;--shadow:#000000b3}@media (prefers-color-scheme:dark){:root:not([data-theme=light]){color-scheme:dark;--bg:#0b1322;--surface:#111c2f;--ink:#e8eef7;--ink-2:#b8c5d8;--muted:#8a9bb4;--line:#1f2d45;--accent:#74b4ff;--accent-hover:#9cc9ff;--accent-ink:#061120;--tag-bg:#14223b;--tag-ink:#a9cbff;--selection:#1d3b66;--shadow:#000000b3}}*,:before,:after{box-sizing:border-box}html{-webkit-text-size-adjust:100%;text-size-adjust:100%;scrollbar-color:var(--line) transparent}@media (prefers-reduced-motion:no-preference){html{scroll-behavior:smooth}}body{background:var(--bg);color:var(--ink);font-family:var(--font-sans);font-feature-settings:"ss01", "cv11";-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;text-rendering:optimizelegibility;margin:0;font-size:1rem;line-height:1.65}::selection{background:var(--selection);color:var(--ink)}h1,h2,h3,p,ul,ol,dl,dd{margin:0}ul,ol{padding:0;list-style:none}h1,h2,h3{text-wrap:balance}p,li{text-wrap:pretty}a{color:inherit;text-decoration:none}button{font:inherit;color:inherit}:focus-visible{outline:2px solid var(--accent);outline-offset:3px;border-radius:4px}.icon{flex:none;width:1.25em;height:1.25em}.skip-link{z-index:10;border-radius:var(--radius-pill);background:var(--accent);color:var(--accent-ink);padding:.625rem 1rem;font-weight:600;position:absolute;top:1rem;left:1rem;transform:translateY(-200%)}.skip-link:focus{transform:none}.shell{max-width:76rem;margin-inline:auto;padding-inline:clamp(1.25rem,5vw,3rem)}.intro{flex-direction:column;gap:2.5rem;padding-block:4rem 3.5rem;display:flex}main{outline:none}@media (width>=64rem){.shell{grid-template-columns:minmax(0,.95fr) minmax(0,1.05fr);gap:4rem;display:grid}.intro{justify-content:space-between;height:100dvh;padding-block:6rem;position:sticky;top:0}main{padding-block:6rem}}.name{letter-spacing:-.035em;font-size:clamp(2.5rem,3.4vw + 1.25rem,3.75rem);font-weight:700;line-height:1.02}.tagline{letter-spacing:-.01em;color:var(--ink);margin-top:.875rem;font-size:1.125rem;font-weight:550}.pitch{max-width:34ch;color:var(--ink-2);margin-top:1.25rem;font-size:1.0625rem}.toc{display:none}@media (width>=64rem){.toc{margin-top:4rem;display:block}}.toc ul{justify-items:start;gap:.25rem;display:grid}.toc a{color:var(--muted);align-items:center;gap:1rem;padding-block:.5rem;font-size:.9375rem;font-weight:550;transition:color .2s;display:inline-flex}.toc-line{transform-origin:0;width:4rem;height:1px;transition:transform .26s var(--ease-out);background:currentColor;display:block;transform:scaleX(.5)}.toc a[aria-current=true]{color:var(--ink)}.toc a[aria-current=true] .toc-line{transform:scaleX(1)}@media (hover:hover) and (pointer:fine){.toc a:hover{color:var(--ink)}.toc a:hover .toc-line{transform:scaleX(1)}}@media (width<=63.99rem){.intro{gap:0;min-height:100svh;padding-block:1rem 2.5rem}.intro-foot{order:-1}.intro-main{flex-direction:column;flex:1;display:flex}.name{padding-top:clamp(2.5rem,12svh,7rem);font-size:clamp(3rem,12.5vw,4.5rem)}.tagline{margin-top:1rem;font-size:1.1875rem}.toc{margin-top:auto;padding-top:2.5rem;display:block}.toc ul{gap:0}.toc a{min-height:2.75rem;font-size:1rem}.toc-line{width:2.5rem}}.intro-foot{justify-content:space-between;align-items:center;gap:1.5rem;display:flex}.socials{gap:.25rem;margin-left:-.625rem;display:flex}.socials a,.control{border-radius:var(--radius-pill);min-width:2.75rem;height:2.75rem;color:var(--muted);transition:color .2s ease, background-color .2s ease, transform .16s var(--ease-out);place-items:center;font-size:1.125rem;display:inline-grid}.controls{gap:.25rem;display:flex}.control{border:1px solid var(--line);cursor:pointer;background:0 0}.lang{letter-spacing:.02em;padding-inline:.875rem;font-size:.8125rem;font-weight:650}.socials a:active,.control:active{transform:scale(.95)}@media (hover:hover) and (pointer:fine){.socials a:hover,.control:hover{color:var(--ink);background:var(--tag-bg)}}.theme-toggle .icon-sun{display:none}:root[data-theme=dark] .theme-toggle .icon-sun{display:block}:root[data-theme=dark] .theme-toggle .icon-moon{display:none}@media (prefers-color-scheme:dark){:root:not([data-theme=light]) .theme-toggle .icon-sun{display:block}:root:not([data-theme=light]) .theme-toggle .icon-moon{display:none}}.section{scroll-margin-top:2rem}.section+.section{margin-top:var(--space-section)}@media (width<=63.99rem){:root{--space-section:4.5rem}main{padding-top:1rem}}@media (width>=64rem){.section{scroll-margin-top:6rem}}.section-title{letter-spacing:-.02em;margin-bottom:1.5rem;font-size:1.375rem;font-weight:650;line-height:1.25}.section-title--sub{margin-top:4rem}.section-note{max-width:60ch;color:var(--muted);margin-top:-.75rem;margin-bottom:2rem;font-size:.9375rem}.prose{max-width:62ch;color:var(--ink-2);gap:1.125rem;display:grid}.roles{gap:3rem;padding-left:1.75rem;display:grid;position:relative}.roles:before,.roles:after{content:"";background:var(--line);width:1px;position:absolute;top:.5rem;bottom:.5rem;left:4px}.roles:after{background:var(--accent);transform-origin:top;transform:scaleY(0)}@supports (animation-timeline:view()){@media (prefers-reduced-motion:no-preference){.roles:after{animation:rail var(--linear) both;animation-timeline:view();animation-range:entry 10% cover 65%}}}@keyframes rail{to{transform:scaleY(1)}}.role{gap:.375rem;display:grid;position:relative}.role:before{content:"";background:var(--bg);border:2px solid var(--line);z-index:1;border-radius:50%;width:9px;height:9px;transition:border-color .4s .25s,background-color .4s .25s;position:absolute;top:.375rem;left:-1.75rem}.role.is-visible:before,html:not(.js) .role:before{border-color:var(--accent);background:var(--accent)}@media (width>=40rem){.role{grid-template-columns:9.5rem minmax(0,1fr);gap:1.5rem}}.role-period{color:var(--muted);font-variant-numeric:tabular-nums;white-space:nowrap;padding-top:.125rem;font-size:.875rem;font-weight:500}.role-title{letter-spacing:-.01em;font-size:1.0625rem;font-weight:650;line-height:1.35}.role-company{color:var(--accent);margin-top:.125rem;font-weight:500;display:block}.role-client{color:var(--ink-2)}.role-points{max-width:62ch;color:var(--ink-2);gap:.5rem;margin-top:.875rem;display:grid}.role-points li{padding-left:1.25rem;position:relative}.role-points li:before{content:"";background:var(--muted);width:.5rem;height:1px;position:absolute;top:.8em;left:0}.tags{flex-wrap:wrap;gap:.375rem;display:flex}.role .tags{margin-top:1.125rem}.tags li{border-radius:var(--radius-pill);background:var(--tag-bg);color:var(--tag-ink);white-space:nowrap;padding:.25rem .6875rem;font-size:.8125rem;font-weight:550;line-height:1.5}.skills{gap:1.125rem;display:grid}.skill-row{gap:.5rem;display:grid}@media (width>=40rem){.skill-row{grid-template-columns:9.5rem minmax(0,1fr);align-items:baseline;gap:1.5rem}}.skill-row dt{color:var(--muted);font-size:.875rem;font-weight:550}.credentials{grid-template-columns:repeat(auto-fit,minmax(15rem,1fr));gap:2.25rem 2.5rem;display:grid}.cred-title{color:var(--muted);margin-bottom:.875rem;font-size:.875rem;font-weight:550}.cred-list{gap:.875rem;display:grid}.cred-list li{gap:.0625rem;display:grid}.cred-name{font-weight:600;line-height:1.4}.cred-meta{color:var(--ink-2);font-size:.9375rem}.cred-note{color:var(--muted);margin-top:.25rem;font-size:.875rem}.contact{border-top:1px solid var(--line);padding-top:3rem}.contact-title{letter-spacing:-.03em;font-size:clamp(2rem,2.2vw + 1.25rem,2.75rem);font-weight:700;line-height:1.08}.contact-body{max-width:48ch;color:var(--ink-2);margin-top:1rem}.contact-email{letter-spacing:-.01em;overflow-wrap:anywhere;margin-top:1.5rem;font-size:clamp(1.125rem,1vw + .875rem,1.375rem);font-weight:600}.contact-email a{color:var(--accent);text-underline-offset:.25em;text-decoration:underline 1px;text-decoration-color:color-mix(in srgb, var(--accent) 40%, transparent);transition:text-decoration-color .2s}@media (hover:hover) and (pointer:fine){.contact-email a:hover{text-decoration-color:var(--accent)}}.actions{flex-wrap:wrap;gap:.625rem;margin-top:2rem;display:flex}.btn{border-radius:var(--radius-pill);white-space:nowrap;cursor:pointer;height:2.75rem;transition:background-color .2s ease, border-color .2s ease, color .2s ease, transform .16s var(--ease-out);border:1px solid #0000;align-items:center;gap:.5rem;padding-inline:1.125rem;font-size:.9375rem;font-weight:600;display:inline-flex}.btn:active{transform:scale(.97)}.btn .icon{width:1.125rem;height:1.125rem}.btn-primary{background:var(--accent);color:var(--accent-ink)}.btn-secondary{background:var(--surface);border-color:var(--line);color:var(--ink)}.btn-ghost{color:var(--ink-2);background:0 0;padding-inline:.875rem}@media (hover:hover) and (pointer:fine){.btn-primary:hover{background:var(--accent-hover)}.btn-secondary:hover{border-color:var(--muted)}.btn-ghost:hover{color:var(--ink);background:var(--tag-bg)}}.copy-email .icon-check{color:var(--accent);display:none}.copy-email[data-state=copied] .icon-copy{display:none}.copy-email[data-state=copied] .icon-check{display:block}.copy-status{min-height:1.5rem;color:var(--muted);margin-top:.75rem;font-size:.875rem}.footer{color:var(--muted);margin-top:4rem;padding-bottom:3rem;font-size:.8125rem}@media (width>=64rem){.footer{padding-bottom:0}}@media (prefers-reduced-motion:no-preference){[data-enter]{animation:enter .7s var(--ease-out) both;animation-delay:calc(var(--i,0) * 70ms + 60ms)}main{animation:enter-soft .8s var(--ease-out) .38s both}}@media (prefers-reduced-motion:reduce){[data-enter],main{animation:.3s both fade}}@keyframes enter{0%{opacity:0;filter:blur(4px);transform:translateY(12px)}}@keyframes enter-soft{0%{opacity:0;transform:translateY(8px)}}@keyframes fade{0%{opacity:0}}.visually-hidden{clip-path:inset(50%);white-space:nowrap;border:0;width:1px;height:1px;margin:-1px;padding:0;position:absolute;overflow:hidden}.project{gap:1.25rem;display:grid}.project-shot{background:var(--surface);box-shadow:0 16px 32px -20px var(--shadow);transition:box-shadow .5s var(--ease-out), transform .5s var(--ease-out);border-radius:14px;display:block;overflow:clip}.project-shot img{width:100%;height:auto;transition:transform .9s var(--ease-out);display:block}@media (hover:hover) and (pointer:fine){.project-shot:hover{box-shadow:0 24px 44px -24px var(--shadow);transform:translateY(-3px)}.project-shot:hover img{transform:scale(1.025)}}.project-head{flex-wrap:wrap;align-items:baseline;gap:.5rem 1rem;margin-top:.5rem;display:flex}.project-name{letter-spacing:-.025em;font-size:1.625rem;font-weight:700;line-height:1.15}.project-status{color:var(--muted);align-items:center;gap:.5rem;font-size:.875rem;font-weight:550;display:inline-flex}.live-dot{background:var(--accent);border-radius:50%;flex:none;width:8px;height:8px;position:relative}@media (prefers-reduced-motion:no-preference){.live-dot:after{content:"";background:var(--accent);animation:ping 2.4s var(--ease-out) infinite;border-radius:50%;position:absolute;inset:0}}@keyframes ping{0%{opacity:.55;transform:scale(1)}70%,to{opacity:0;transform:scale(2.8)}}.project-summary{max-width:62ch;color:var(--ink-2);font-size:1.0625rem}.project-cols{gap:1.75rem 2.5rem;display:grid}@media (width>=46rem){.project-cols{grid-template-columns:repeat(2,minmax(0,1fr))}}.project-sub{font-size:.9375rem;font-weight:650}.project-cols .role-points{margin-top:.75rem;font-size:.9375rem}.project-actions{margin-top:.5rem}@media (prefers-reduced-motion:no-preference){@supports (animation-timeline:view()){[data-reveal],.section-title,.section-note,.prose>p{animation:reveal-up var(--ease-scroll) both;animation-timeline:view();animation-range:entry 6vh entry 50vh}.section-title{animation-name:reveal-title;animation-range:entry 6vh entry 42vh}.contact-title{animation:reveal-title var(--ease-scroll) both;animation-timeline:view();animation-range:entry 6vh entry 46vh}.project-shot{animation:settle var(--ease-scroll) both;animation-timeline:view();animation-range:entry cover 45%}.project-shot img{animation:drift var(--linear) both;animation-timeline:view();animation-range:cover}.progress{animation:progress var(--linear) both;animation-timeline:scroll(root)}}@supports not (animation-timeline:view()){html.js [data-reveal]{opacity:0;transition:opacity .8s var(--ease-out), transform 1s var(--ease-out);transform:translateY(28px)}html.js [data-reveal].is-visible{opacity:1;transform:none}}html.js .tags li{opacity:0;transition:opacity .5s var(--ease-out), translate .6s var(--ease-out), scale .6s var(--ease-out);transition-delay:calc(var(--n,0) * 35ms + 80ms);translate:0 8px;scale:.96}html.js .tags.is-visible li{opacity:1;translate:0;scale:1}}.progress{z-index:5;background:var(--accent);transform-origin:0;pointer-events:none;height:2px;position:fixed;inset:0 0 auto;transform:scaleX(0)}@keyframes reveal-up{0%{opacity:0;transform:translateY(40px)}}@keyframes reveal-title{0%{opacity:0;clip-path:inset(0 0 100%);transform:translateY(18px)}to{clip-path:inset(0 0 -20%)}}@keyframes settle{0%{opacity:.4;scale:.9}}@keyframes drift{0%{translate:0 -3%;scale:1.08}to{translate:0 3%;scale:1.08}}@keyframes progress{0%{transform:scaleX(0)}to{transform:scaleX(1)}}@media print{*,:before,:after{animation:none!important}html.js [data-reveal],html.js .tags li{opacity:1;transform:translate(0,0)scale(1)}}.magnetic{transition:background-color .2s ease, transform .16s var(--ease-out), translate .45s var(--ease-out)}.magnetic.is-tracking{transition:background-color .2s ease, transform .16s var(--ease-out), translate .12s linear}
