@font-face{font-family:Space Grotesk Variable;font-style:normal;font-display:swap;font-weight:300 700;src:url(/_astro/space-grotesk-vietnamese-wght-normal.D0rl6rjA.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:Space Grotesk Variable;font-style:normal;font-display:swap;font-weight:300 700;src:url(/_astro/space-grotesk-latin-ext-wght-normal.D9tNdqV9.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:Space Grotesk Variable;font-style:normal;font-display:swap;font-weight:300 700;src:url(/_astro/space-grotesk-latin-wght-normal.BhU9QXUp.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 Mono;font-style:normal;font-display:swap;font-weight:500;src:url(/_astro/ibm-plex-mono-cyrillic-ext-500-normal.BqneJy0T.woff2)format("woff2"),url(/_astro/ibm-plex-mono-cyrillic-ext-500-normal.BIfNGwUT.woff)format("woff");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 Mono;font-style:normal;font-display:swap;font-weight:500;src:url(/_astro/ibm-plex-mono-cyrillic-500-normal.Bq9vWWag.woff2)format("woff2"),url(/_astro/ibm-plex-mono-cyrillic-500-normal.Ael50iVv.woff)format("woff");unicode-range:U+301,U+400-45F,U+490-491,U+4B0-4B1,U+2116}@font-face{font-family:IBM Plex Mono;font-style:normal;font-display:swap;font-weight:500;src:url(/_astro/ibm-plex-mono-vietnamese-500-normal.DZ4AoWbu.woff2)format("woff2"),url(/_astro/ibm-plex-mono-vietnamese-500-normal.C8zxqsMH.woff)format("woff");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 Mono;font-style:normal;font-display:swap;font-weight:500;src:url(/_astro/ibm-plex-mono-latin-ext-500-normal.CAhNIIs5.woff2)format("woff2"),url(/_astro/ibm-plex-mono-latin-ext-500-normal.CZ70TYgx.woff)format("woff");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 Mono;font-style:normal;font-display:swap;font-weight:500;src:url(/_astro/ibm-plex-mono-latin-500-normal.DSY6xOcd.woff2)format("woff2"),url(/_astro/ibm-plex-mono-latin-500-normal.CB9ihrfo.woff)format("woff");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 Mono;font-style:normal;font-display:swap;font-weight:600;src:url(/_astro/ibm-plex-mono-cyrillic-ext-600-normal.V-xxqcpd.woff2)format("woff2"),url(/_astro/ibm-plex-mono-cyrillic-ext-600-normal.9HEixskS.woff)format("woff");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 Mono;font-style:normal;font-display:swap;font-weight:600;src:url(/_astro/ibm-plex-mono-cyrillic-600-normal.CTOM6hUh.woff2)format("woff2"),url(/_astro/ibm-plex-mono-cyrillic-600-normal.fLZuRloM.woff)format("woff");unicode-range:U+301,U+400-45F,U+490-491,U+4B0-4B1,U+2116}@font-face{font-family:IBM Plex Mono;font-style:normal;font-display:swap;font-weight:600;src:url(/_astro/ibm-plex-mono-vietnamese-600-normal.D2EvbN8M.woff2)format("woff2"),url(/_astro/ibm-plex-mono-vietnamese-600-normal.iLQfcSjf.woff)format("woff");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 Mono;font-style:normal;font-display:swap;font-weight:600;src:url(/_astro/ibm-plex-mono-latin-ext-600-normal.D38SheWl.woff2)format("woff2"),url(/_astro/ibm-plex-mono-latin-ext-600-normal.DmB0ttJJ.woff)format("woff");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 Mono;font-style:normal;font-display:swap;font-weight:600;src:url(/_astro/ibm-plex-mono-latin-600-normal.BgSNZQsw.woff2)format("woff2"),url(/_astro/ibm-plex-mono-latin-600-normal.DWFSQ4vo.woff)format("woff");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{color-scheme:dark;--bg:#0a0b10;--bg-alt:#0f111a;--ink:#f5f5f8;--ink-soft:#a8abb8;--ink-faint:#6c6f7c;--glass-bg:#ffffff0b;--glass-border:#ffffff1a;--glass-border-hover:#ffffff38;--blob-1:#3c52fb;--blob-2:#fb923c;--blob-3:#2cc421;--grad-1:#fff;--grad-2:#493cf6;--btn:#fff;--btn-ink:#0a0b10;--kicker:#fff;--c-bubble:#ff7a52;--c-piclo:#34d399;--c-ito:#38bdf8;--c-eden:#f5b942;--focus:#fff;--blob-opacity:.47;--shadow:0 20px 60px #00000073;--display:"Space Grotesk Variable", "Inter Variable", sans-serif;--sans:"Inter Variable", -apple-system, BlinkMacSystemFont, sans-serif;--mono:"IBM Plex Mono", ui-monospace, SFMono-Regular, Menlo, monospace;--container:1100px;--gutter:max(6vw, calc((100% - var(--container)) / 2));--reading:820px}*{box-sizing:border-box}html{scroll-behavior:smooth;-webkit-text-size-adjust:100%}body{background:var(--bg);color:var(--ink);font-family:var(--sans);-webkit-font-smoothing:antialiased;margin:0;font-size:16px;line-height:1.65;overflow-x:hidden}.display{font-family:var(--display)}.mono{font-family:var(--mono)}h1,h2,h3{margin:0}a{color:inherit}a:focus-visible,button:focus-visible{outline:2px solid var(--focus);outline-offset:3px}.skip-link{position:absolute;left:-9999px}.skip-link:focus{z-index:30;background:var(--bg-alt);border-radius:8px;padding:10px 14px;top:1rem;left:1rem}.blobs{z-index:0;pointer-events:none;position:fixed;inset:0;overflow:hidden}.blob{opacity:var(--blob-opacity);border-radius:50%;position:absolute}.blob-1{background:radial-gradient(circle, var(--blob-1), transparent 70%);width:560px;height:560px;top:-160px;left:-120px}.blob-2{background:radial-gradient(circle, var(--blob-2), transparent 70%);width:520px;height:520px;animation-delay:-7s;top:20%;right:-180px}.blob-3{background:radial-gradient(circle, var(--blob-3), transparent 70%);width:480px;height:480px;animation-delay:-14s;bottom:-140px;left:10%}.page{z-index:1;position:relative}.nav{z-index:20;padding:16px var(--gutter);background:color-mix(in srgb, var(--bg) 65%, transparent);-webkit-backdrop-filter:blur(16px);border-bottom:1px solid var(--glass-border);justify-content:space-between;align-items:center;gap:16px;display:flex;position:sticky;top:0}.nav .name{letter-spacing:-.01em;font-size:15px;font-weight:600}.nav .name .dot{color:var(--grad-2)}.nav-right{align-items:center;gap:22px;display:flex}.navlinks{flex-wrap:wrap;gap:26px;display:flex}.navlinks a{color:var(--ink-soft);font-size:14px;text-decoration:none;transition:color .2s}.navlinks a:hover{color:var(--ink)}.hero{min-height:92vh;padding:80px var(--gutter) 60px;flex-direction:column;justify-content:center;display:flex}.hero-inner{grid-template-columns:minmax(0,1fr) auto;grid-template-areas:"pill photo""text photo";align-items:center;column-gap:clamp(20px,4vw,56px);display:grid}.hero-inner>.pill{grid-area:pill;place-self:end start}.hero-text{grid-area:text;min-width:0}.hero-photo{grid-area:photo}.pill{color:var(--ink-soft);background:var(--glass-bg);border:1px solid var(--glass-border);backdrop-filter:blur(6px);border-radius:999px;align-items:center;gap:9px;margin-bottom:28px;padding:8px 15px;font-size:12.5px;display:inline-flex}.pulse-dot{background:var(--kicker);width:7px;height:7px;box-shadow:0 0 0 0 color-mix(in srgb, var(--kicker) 60%, transparent);border-radius:50%;flex-shrink:0;animation:2.2s ease-in-out infinite pulse}@keyframes pulse{0%{box-shadow:0 0 0 0 color-mix(in srgb, var(--kicker) 45%, transparent)}70%{box-shadow:0 0 0 9px #0000}to{box-shadow:0 0 #0000}}.hero h1{letter-spacing:-.03em;background:linear-gradient(100deg in oklab, var(--grad-1) 10%, var(--grad-2) 75%);-webkit-text-fill-color:transparent;-webkit-background-clip:text;background-clip:text;margin:0 0 18px;font-size:clamp(46px,8vw,92px);font-weight:700;line-height:.98}.hero .role{color:var(--ink-soft);max-width:52ch;margin:0 0 34px;font-size:clamp(17px,2.2vw,21px)}.stack-row{flex-wrap:wrap;gap:10px;margin-bottom:38px;display:flex}.stack-chip{backdrop-filter:blur(6px);border:1px solid;border-radius:999px;padding:7px 14px;font-size:12.5px;font-weight:500}.stack-backend{color:var(--c-bubble);border-color:color-mix(in srgb, var(--c-bubble) 45%, transparent);background:color-mix(in srgb, var(--c-bubble) 12%, transparent)}.stack-cloud{color:var(--c-ito);border-color:color-mix(in srgb, var(--c-ito) 45%, transparent);background:color-mix(in srgb, var(--c-ito) 12%, transparent)}.stack-frontend{color:var(--c-eden);border-color:color-mix(in srgb, var(--c-eden) 45%, transparent);background:color-mix(in srgb, var(--c-eden) 12%, transparent)}.stack-ai{color:var(--c-piclo);border-color:color-mix(in srgb, var(--c-piclo) 45%, transparent);background:color-mix(in srgb, var(--c-piclo) 12%, transparent)}.cta-row{flex-wrap:wrap;gap:14px;display:flex}.btn{border-radius:10px;align-items:center;gap:8px;padding:13px 24px;font-size:14.5px;font-weight:600;text-decoration:none;transition:transform .2s,box-shadow .2s,border-color .2s;display:inline-flex}.btn-primary{color:var(--btn-ink);background:var(--btn)}.btn-primary:hover{filter:brightness(1.06);transform:translateY(-2px)}.btn-ghost{color:var(--ink);background:color-mix(in srgb, #fff 6%, var(--bg));border:1px solid var(--glass-border)}.btn-ghost:hover{border-color:var(--glass-border-hover);transform:translateY(-2px)}@property --ring-angle{syntax:"<angle>";inherits:false;initial-value:0deg}.avatar-frame{--ring-angle:0deg;background:var(--glass-border);border-radius:29px;width:clamp(110px,17vw,240px);height:clamp(110px,17vw,240px);padding:3px;position:relative;overflow:hidden}.avatar-frame:before{content:"";background:conic-gradient(from var(--ring-angle), transparent 0deg, var(--grad-2) 30deg, var(--grad-1) 70deg, var(--grad-1) 90deg, var(--grad-2) 130deg, transparent 170deg, transparent 360deg);z-index:0;animation:3.5s linear infinite ring-chase;position:absolute;inset:0}@keyframes ring-chase{to{--ring-angle:360deg}}.avatar-inner{z-index:1;background:var(--bg-alt);width:100%;height:100%;box-shadow:var(--shadow);border-radius:26px;place-items:center;display:grid;position:relative;overflow:hidden}.avatar-img{object-fit:cover;width:100%;height:100%}section{padding:110px var(--gutter)}.section-head{margin-bottom:54px}.kicker{color:var(--kicker);margin-bottom:10px;font-size:13px;display:block}h2{letter-spacing:-.02em;font-size:clamp(30px,4vw,44px);font-weight:700}:root[data-anim=on] .reveal{opacity:0;transition:opacity .75s cubic-bezier(.2,.7,.3,1),transform .75s cubic-bezier(.2,.7,.3,1);transition-delay:var(--reveal-delay,0s);transform:translateY(32px)}:root[data-anim=on] .reveal[data-side=left]{transform:translate(-44px)}:root[data-anim=on] .reveal[data-side=right]{transform:translate(44px)}:root[data-anim=on] .reveal.is-visible{opacity:1;transform:none}.exp-grid{flex-direction:column;gap:22px;display:flex}.exp-card[data-side]{width:clamp(320px, 76%, var(--reading))}.exp-card[data-side=right]{margin-left:auto}.exp-card{background:var(--glass-bg);border:1px solid var(--glass-border);-webkit-backdrop-filter:blur(10px);border-radius:18px;padding:32px 34px;transition:border-color .25s,transform .25s,box-shadow .25s;position:relative;overflow:hidden}.exp-card:before{content:"";background:var(--card-accent);width:3px;position:absolute;top:0;bottom:0;left:0}.exp-card:hover{border-color:var(--glass-border-hover);box-shadow:var(--shadow);transform:translateY(-3px)}.exp-head{flex-wrap:wrap;justify-content:space-between;align-items:flex-start;gap:16px;margin-bottom:18px;display:flex}.exp-company{letter-spacing:-.01em;font-size:22px;font-weight:600}.exp-when{color:var(--card-accent);background:color-mix(in srgb, var(--card-accent) 15%, transparent);white-space:nowrap;border-radius:999px;padding:5px 12px;font-size:12px;font-weight:600}ul.points{flex-direction:column;gap:10px;margin:0;padding:0;list-style:none;display:flex}ul.points li{max-width:78ch;color:var(--ink-soft);gap:12px;font-size:14.5px;line-height:1.6;display:flex}ul.points li:before{content:"";background:var(--card-accent);border-radius:50%;flex-shrink:0;width:6px;height:6px;margin-top:8px}.skills-grid{grid-template-columns:repeat(2,1fr);gap:20px;display:grid}.skill-card{background:var(--glass-bg);border:1px solid var(--glass-border);backdrop-filter:blur(10px);border-radius:16px;padding:26px 28px;transition:border-color .25s,transform .25s}.skill-card:hover{border-color:var(--glass-border-hover);transform:translateY(-3px)}.skill-card .label{align-items:center;gap:9px;margin-bottom:14px;font-size:15.5px;font-weight:600;display:flex}.skill-card .label .sq{background:var(--card-accent);border-radius:3px;flex-shrink:0;width:9px;height:9px}.skill-tags{flex-wrap:wrap;gap:8px;display:flex}.skill-tag{color:var(--ink-soft);background:color-mix(in srgb, var(--bg-alt) 60%, transparent);border:1px solid var(--glass-border);border-radius:8px;padding:6px 11px;font-size:12.5px}.edu-grid{grid-template-columns:1fr 1fr;gap:20px;margin-bottom:24px;display:grid}.edu-card,.cert-card{background:var(--glass-bg);border:1px solid var(--glass-border);backdrop-filter:blur(10px);border-radius:16px;padding:26px 28px}.edu-school{margin-bottom:4px;font-size:17px;font-weight:600}.edu-detail{color:var(--ink-soft);margin:0;font-size:14px}.edu-when{color:var(--ink-faint);margin:10px 0 0;font-size:12px}.cert-label{margin-bottom:14px;font-size:15.5px;font-weight:600}ul.certs{flex-direction:column;gap:10px;margin:0;padding:0;list-style:none;display:flex}ul.certs li{color:var(--ink-soft);gap:10px;font-size:14.5px;display:flex}ul.certs li:before{content:"✓";color:var(--kicker);font-family:var(--mono);flex-shrink:0}.contact-card{text-align:center;background:linear-gradient(135deg in oklab, color-mix(in srgb, var(--grad-1) 20%, var(--glass-bg)), color-mix(in srgb, var(--grad-2) 16%, var(--glass-bg)));border:1px solid var(--glass-border);border-radius:24px;padding:70px 6vw}.contact-card h2{margin-bottom:16px}.contact-card p{color:var(--ink-soft);max-width:46ch;margin:0 auto 34px;font-size:16px}.contact-card .cta-row{justify-content:center}footer{text-align:center;padding:40px var(--gutter) 60px;color:var(--ink-faint);font-size:12px}@media (width<=760px){:root{--gutter:5vw}.nav{padding:14px var(--gutter)}.navlinks{display:none}.hero{padding:64px var(--gutter) 50px;min-height:auto}.hero-inner{grid-template-areas:"pill photo""text text";align-items:start;row-gap:22px}.hero-inner>.pill{align-self:center}section{padding:70px var(--gutter)}.skills-grid,.edu-grid{grid-template-columns:1fr}.exp-card{padding:26px 22px}.exp-card[data-side],.exp-card[data-side=right]{width:100%;margin-left:0}:root[data-anim=on] .reveal[data-side=left],:root[data-anim=on] .reveal[data-side=right]{transform:translateY(32px)}.contact-card{padding:50px 6vw}}@media (width<=480px){.hero-inner{column-gap:14px}.avatar-frame{width:clamp(70px,20vw,110px);height:clamp(70px,20vw,110px)}.pill{padding:6px 11px;font-size:11px}.stack-row{gap:6px}.stack-chip{padding:5px 10px;font-size:11px}}@media (prefers-reduced-motion:reduce){html{scroll-behavior:auto}.blob,.pulse-dot,.avatar-frame:before{animation:none}.reveal{opacity:1!important;transition:none!important;transform:none!important}.btn,.exp-card,.skill-card{transition:none}}
