@font-face{font-family:Urbanist;font-style:normal;font-display:swap;font-weight:500;src:url(/assets/urbanist-latin-ext-500-normal-DjtxgPdH.woff2)format("woff2"),url(/assets/urbanist-latin-ext-500-normal-DU_MVRy-.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:Urbanist;font-style:normal;font-display:swap;font-weight:500;src:url(/assets/urbanist-latin-500-normal-CTXUkCRo.woff2)format("woff2"),url(/assets/urbanist-latin-500-normal-DpQ4Tjrd.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:Urbanist;font-style:normal;font-display:swap;font-weight:700;src:url(/assets/urbanist-latin-ext-700-normal-B8Y3NOrp.woff2)format("woff2"),url(/assets/urbanist-latin-ext-700-normal-LzPfOSk1.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:Urbanist;font-style:normal;font-display:swap;font-weight:700;src:url(/assets/urbanist-latin-700-normal-BtsT2zLv.woff2)format("woff2"),url(/assets/urbanist-latin-700-normal-Zdugn5sa.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:Urbanist;font-style:normal;font-display:swap;font-weight:800;src:url(/assets/urbanist-latin-ext-800-normal-CYewglmJ.woff2)format("woff2"),url(/assets/urbanist-latin-ext-800-normal-D5Aj31bZ.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:Urbanist;font-style:normal;font-display:swap;font-weight:800;src:url(/assets/urbanist-latin-800-normal-ga5fynFS.woff2)format("woff2"),url(/assets/urbanist-latin-800-normal-1m03Cp15.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:Urbanist;font-style:normal;font-display:swap;font-weight:900;src:url(/assets/urbanist-latin-ext-900-normal-B4bXDmcQ.woff2)format("woff2"),url(/assets/urbanist-latin-ext-900-normal-CEmEd6Fy.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:Urbanist;font-style:normal;font-display:swap;font-weight:900;src:url(/assets/urbanist-latin-900-normal-mR1swy3X.woff2)format("woff2"),url(/assets/urbanist-latin-900-normal-BE3VSv_D.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:VT323;font-style:normal;font-display:swap;font-weight:400;src:url(/assets/vt323-vietnamese-400-normal-D0VnvwZ9.woff2)format("woff2"),url(/assets/vt323-vietnamese-400-normal-D_5Q7Vcv.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:VT323;font-style:normal;font-display:swap;font-weight:400;src:url(/assets/vt323-latin-ext-400-normal-iUdYUaX4.woff2)format("woff2"),url(/assets/vt323-latin-ext-400-normal-DqOq58ri.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:VT323;font-style:normal;font-display:swap;font-weight:400;src:url(/assets/vt323-latin-400-normal-wDgJuOC9.woff2)format("woff2"),url(/assets/vt323-latin-400-normal-Dqn9ZSPj.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{--cream:#f5f0e8;--beige:#e6dbca;--pill:#ebe2d3;--ink:#2d2a24;--night:#0a1f6e;--navy:#1f3a7a;--orange:#ff8400;--cyan:#e1f5ff;--sans:"Urbanist", system-ui, sans-serif;--mono:"VT323", ui-monospace, monospace;--gutter:clamp(16px, 5vw, 72px);--surface:#f7f3ec;--lightningcss-light:initial;--lightningcss-dark: ;color-scheme:light}:root[data-mode=night]{--cream:#141a2e;--beige:#1b2238;--pill:#262e48;--ink:#eef0f6;--navy:#3a5fb0;--surface:#2a3352;--lightningcss-light: ;--lightningcss-dark:initial;color-scheme:dark}*{box-sizing:border-box;margin:0}.theme-changing,.theme-changing *{transition:background-color 1.6s,color 1.6s!important}.theme-changing .contact h2{animation:1.6s title-swap}@keyframes title-swap{50%{opacity:0}}html{scroll-behavior:smooth}body{background:var(--cream);color:var(--ink);font-family:var(--sans);-webkit-font-smoothing:antialiased;overflow-x:clip}a{color:inherit}ul{padding:0;list-style:none}:focus-visible{outline:3px solid var(--orange);outline-offset:3px}.sr-only{clip-path:inset(50%);width:1px;height:1px;position:absolute;overflow:hidden}#scene{width:100%;height:100%;display:block;position:fixed;inset:0}main{position:relative}.nav{z-index:10;--nav-height:42px;--nav-gap:10px;align-items:center;gap:var(--nav-gap);color:var(--ink);transition:color .3s;display:flex;position:fixed;inset:16px 20px auto}@media (width>=1100px){.nav{grid-template-columns:1fr auto 1fr;display:grid}.nav__logo{justify-self:start}.nav .nav__links{margin-left:0}}.nav__logo{width:var(--nav-height);height:var(--nav-height);background:var(--ink);border-radius:13px;justify-content:center;align-items:center;transition:background .3s;display:flex}.nav__logo svg{width:100%;height:100%}.nav__links{height:var(--nav-height);background:var(--pill);border-radius:999px;gap:2px;margin-left:auto;padding:4px;transition:background .3s;display:flex}.nav__links a{white-space:nowrap;letter-spacing:.03em;text-transform:uppercase;border-radius:999px;justify-content:center;align-items:center;padding-inline:clamp(14px,3vw,38px);font-size:15px;font-weight:700;text-decoration:none;transition:background .25s,color .25s;display:flex}.nav__links a:hover{background:color-mix(in srgb, var(--orange) 20%, transparent)}.nav__links a.is-active{background:var(--orange);color:#fff}.nav[data-theme=dark]{color:#fff}.nav[data-theme=dark] .nav__logo{background:#1b4aa6}.nav[data-theme=dark] .nav__links{background:#12307f}.nav[data-theme=dark] .nav__links a.is-active{background:#3f86c9}.nav__actions{justify-self:end;align-items:center;gap:var(--nav-gap);display:flex}.nav__cta{height:var(--nav-height);align-items:center;padding-block:0;display:flex}.nav__icon{width:var(--nav-height);height:var(--nav-height);background:var(--ink);color:var(--cream);cursor:pointer;border:0;border-radius:13px;place-items:center;padding:0;transition:background .3s,transform .2s;display:grid}.nav__icon:hover{transform:translateY(-2px)}.nav__icon svg{fill:none;stroke:currentColor;stroke-width:2px;stroke-linecap:round;stroke-linejoin:round;width:22px;height:22px}.theme-toggle__sun,:root[data-mode=night] .theme-toggle__moon{display:none}:root[data-mode=night] .theme-toggle__sun{display:block}.sound-toggle__waves,.sound-toggle[aria-pressed=true] .sound-toggle__muted{display:none}.sound-toggle[aria-pressed=true] .sound-toggle__waves{display:block}.nav[data-theme=dark] .nav__icon{color:#fff;background:#1b4aa6}.btn{background:var(--orange);color:#fff;letter-spacing:.04em;text-transform:uppercase;white-space:nowrap;border-radius:999px;padding:11px 26px;font-size:16px;font-weight:800;text-decoration:none;transition:transform .2s}.btn:hover{transform:translateY(-2px)}.btn--ghost{background:var(--pill);color:var(--ink)}button.btn{cursor:pointer;border:0;font-family:inherit}html:has(dialog[open]){overflow:hidden}.dialog{background:var(--cream);color:var(--ink);cursor:auto;border:0;border-radius:22px;margin:auto;padding:0}.dialog::backdrop{background:#050814b8}.dialog__body{padding:26px}.dialog h2{font-size:30px;font-weight:900;line-height:1.1}.dialog p{margin-top:10px;font-size:17px;font-weight:500}.dialog__actions{flex-wrap:wrap;gap:10px;margin-top:22px;display:flex}.dialog--game{width:min(94vw,1100px);max-width:none}.dialog--game .dialog__body{padding:14px 18px 18px}.dialog__bar{justify-content:space-between;align-items:center;gap:12px;margin-bottom:10px;display:flex}.dialog__bar p{margin:0}.dialog__close{background:var(--pill);width:38px;height:38px;color:var(--ink);cursor:pointer;border:0;border-radius:11px;flex:none;font-size:24px;line-height:1}#game-canvas{aspect-ratio:320/188;object-fit:contain;width:100%;max-height:calc(100svh - 120px);image-rendering:pixelated;touch-action:none;cursor:pointer;border-radius:10px;outline:none;display:block}.tag{background:var(--navy);color:#fff;font-family:var(--mono);letter-spacing:.05em;text-transform:uppercase;padding:3px 14px;font-size:clamp(22px,2.2vw,30px);line-height:1.15;display:inline-block;transform:rotate(-5deg)}.hero{pointer-events:none;align-items:center;min-height:100svh;padding:90px clamp(16px,8.5vw,140px) 40px;display:flex;position:relative}.hero a{pointer-events:auto}.hero__text{position:relative}.hero h1{letter-spacing:.005em;word-spacing:100vw;font-size:clamp(54px,6.2vw,112px);font-weight:900;line-height:1.02}.hero .tag{margin:8px 0 0 clamp(16px,5vw,90px);position:relative}.hero__scroll{padding:6px;transition:opacity .25s;position:absolute;bottom:24px;left:50%;translate:-50%}.is-scrolled .hero__scroll{opacity:0;pointer-events:none}.hero__mouse{border:2.5px solid var(--ink);border-radius:13px;width:24px;height:38px;display:block;position:relative}.hero__mouse:after{content:"";background:var(--ink);border-radius:2px;width:4px;height:8px;margin-left:-2px;animation:1.6s ease-in-out infinite wheel;position:absolute;top:7px;left:50%}@keyframes wheel{50%{opacity:.25;translate:0 9px}}.about{height:340vh;position:relative}.about__stage{height:100svh;color:var(--cyan);position:sticky;top:0;overflow:hidden}.card{width:min(300px,26vw);font-family:var(--mono);opacity:0;background:#1a4aa59e;border:1px solid #5f97d6;border-radius:8px;padding:12px 16px;font-size:20px;line-height:1.2;transition:opacity .45s,transform .45s;position:absolute;transform:translateY(14px)}.card.is-on{opacity:1;transform:none}.card h3{margin-bottom:4px;font-size:30px;font-weight:400;line-height:1}.card li:before{content:"• "}.about__links{width:100%;height:100%;position:absolute;inset:0}.about__links g{opacity:0;transition:opacity .45s}.about__links g.is-on{opacity:1}.about__links polyline{fill:none;stroke:#9fd0fa;stroke-width:1.2px}.about__links circle{fill:#e1f5ff}.card--identity,.card--bio{right:calc(50% + clamp(120px,13vw,190px))}.card--skills,.card--duck{left:calc(50% + clamp(120px,13vw,190px))}.card--skills{top:20%}.card--duck{top:62%}.card--identity{top:24%}.card--bio{top:58%}.about__counter{color:var(--cyan);font-family:var(--mono);letter-spacing:.1em;background:#0e2c78;border-radius:5px;padding:0 10px;font-size:34px;line-height:1.15;position:absolute;bottom:clamp(16px,5.5vh,50px);left:50%;translate:-50%}.projects{z-index:2;min-height:100vh;padding:clamp(90px, 12vh, 130px) var(--gutter) clamp(70px, 10vh, 110px);background:var(--cream);border-radius:34px 34px 0 0;position:relative}.projects__head{max-width:1160px;margin:0 auto 36px}.projects__head .tag{font-size:24px}.projects h2{font-size:clamp(44px,5.2vw,76px);font-weight:900;line-height:1}.projects__grid{grid-template-columns:repeat(auto-fit,minmax(min(100%,420px),1fr));gap:clamp(22px,3vw,38px);max-width:1160px;margin:0 auto;display:grid}.project{opacity:0;text-decoration:none;transition:opacity .6s,transform .6s;display:block;transform:translateY(30px)}.project.is-in{opacity:1;transform:none}.project__thumb{aspect-ratio:16/9;background:var(--thumb);border-radius:16px;transition:transform .35s cubic-bezier(.2,.9,.3,1.3);position:relative;overflow:hidden}.project:hover .project__thumb{transform:scale(1.02)}.project__thumb img{object-fit:cover;width:100%;height:100%;display:block}.project--soon{cursor:not-allowed}.project--soon:hover .project__thumb{transform:none}.project--soon .project__thumb{background:color-mix(in srgb, var(--thumb) 40%, var(--cream));place-items:center;display:grid}.project--soon h3,.project--soon p{opacity:.55}.project__badge{font-size:clamp(22px,2.4vw,30px)}.project h3{margin-top:12px;font-size:22px;font-weight:800}.project p{opacity:.72;margin-top:2px;font-weight:500}.contact{min-height:100svh;padding:130px var(--gutter) 24px;pointer-events:none;position:relative}.contact a{pointer-events:auto}.contact h2{max-width:6.5em;font-size:clamp(42px,5.2vw,76px);font-weight:900;line-height:1.05}.contact__text>p{max-width:19em;margin-top:16px;font-size:clamp(17px,1.4vw,20px);font-weight:500;line-height:1.4}.contact__links{flex-wrap:wrap;gap:8px;margin-top:20px;display:flex}.contact__links a{background:var(--surface);border-radius:999px;padding:9px 16px;font-weight:700;text-decoration:none;transition:transform .2s;display:block}.contact__links a:hover{transform:translateY(-2px)}.footer{padding:26px var(--gutter);background:var(--cream);text-align:center;border-radius:30px 30px 0 0;margin-top:-30px;font-size:14px;font-weight:600;position:relative}.no-webgl #scene{display:none}.no-webgl .about{background:var(--night);height:auto}.no-webgl .about__stage{height:auto;padding:100px var(--gutter);gap:16px;display:grid;position:static}.no-webgl .card{opacity:1;width:auto;position:static;transform:none}.no-webgl .about__links,.no-webgl .about__counter{display:none}.no-webgl .contact{background:var(--beige)}@media (width<=760px){.nav{--nav-height:40px;--nav-gap:8px;grid-template-columns:auto 1fr;grid-template-areas:"logo actions""links links";display:grid;inset-inline:12px}.nav__logo{grid-area:logo}.nav__actions{grid-area:actions}.nav__cta{display:none}.nav__links{grid-area:links;margin-left:0}.nav__links a{flex:1;padding-inline:4px;font-size:13px}.hero{align-items:flex-start;padding-top:max(116px,25svh - 24px)}.projects{padding-top:124px}.contact{padding-top:165px}.hero__text{text-align:center;width:100%}.hero .tag{margin-left:0}.card{width:auto;inset:auto 16px 96px}.about__links{display:none}.card.is-on:not(.is-current){opacity:0;transform:translateY(-14px)}.projects{border-radius:26px 26px 0 0}}@media (prefers-reduced-motion:reduce){html{scroll-behavior:auto}.hero__mouse:after{animation:none}.card,.project,.project__thumb{transition:none}}
