@font-face{font-family:Bricolage Grotesque Variable;font-style:normal;font-display:swap;font-weight:200 800;src:url(/assets/bricolage-grotesque-vietnamese-wght-normal-BUzh504Q.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:Bricolage Grotesque Variable;font-style:normal;font-display:swap;font-weight:200 800;src:url(/assets/bricolage-grotesque-latin-ext-wght-normal-CcLUaPy7.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:Bricolage Grotesque Variable;font-style:normal;font-display:swap;font-weight:200 800;src:url(/assets/bricolage-grotesque-latin-wght-normal-DLoelf7F.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;font-style:normal;font-display:swap;font-weight:400;src:url(/assets/ibm-plex-sans-cyrillic-ext-400-normal-g30qAdWV.woff2)format("woff2"),url(/assets/ibm-plex-sans-cyrillic-ext-400-normal-Dsrv2Tcn.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 Sans;font-style:normal;font-display:swap;font-weight:400;src:url(/assets/ibm-plex-sans-cyrillic-400-normal-DZqxrq2p.woff2)format("woff2"),url(/assets/ibm-plex-sans-cyrillic-400-normal-BTotfTJu.woff)format("woff");unicode-range:U+301,U+400-45F,U+490-491,U+4B0-4B1,U+2116}@font-face{font-family:IBM Plex Sans;font-style:normal;font-display:swap;font-weight:400;src:url(/assets/ibm-plex-sans-greek-400-normal-_efipK4i.woff2)format("woff2"),url(/assets/ibm-plex-sans-greek-400-normal-D9ESIMu3.woff)format("woff");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;font-style:normal;font-display:swap;font-weight:400;src:url(/assets/ibm-plex-sans-vietnamese-400-normal-DG4YqDda.woff2)format("woff2"),url(/assets/ibm-plex-sans-vietnamese-400-normal-fK1oJ5dG.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 Sans;font-style:normal;font-display:swap;font-weight:400;src:url(/assets/ibm-plex-sans-latin-ext-400-normal-C5H60-Va.woff2)format("woff2"),url(/assets/ibm-plex-sans-latin-ext-400-normal-RBey6euL.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 Sans;font-style:normal;font-display:swap;font-weight:400;src:url(/assets/ibm-plex-sans-latin-400-normal-CDDApCn2.woff2)format("woff2"),url(/assets/ibm-plex-sans-latin-400-normal-CYLoc0-x.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 Sans;font-style:normal;font-display:swap;font-weight:500;src:url(/assets/ibm-plex-sans-cyrillic-ext-500-normal-Cs5J6C77.woff2)format("woff2"),url(/assets/ibm-plex-sans-cyrillic-ext-500-normal-DB5PtV2g.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 Sans;font-style:normal;font-display:swap;font-weight:500;src:url(/assets/ibm-plex-sans-cyrillic-500-normal-CocWQlwt.woff2)format("woff2"),url(/assets/ibm-plex-sans-cyrillic-500-normal-ByOcLdNv.woff)format("woff");unicode-range:U+301,U+400-45F,U+490-491,U+4B0-4B1,U+2116}@font-face{font-family:IBM Plex Sans;font-style:normal;font-display:swap;font-weight:500;src:url(/assets/ibm-plex-sans-greek-500-normal-JMMifIXV.woff2)format("woff2"),url(/assets/ibm-plex-sans-greek-500-normal-CuWXN6rf.woff)format("woff");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;font-style:normal;font-display:swap;font-weight:500;src:url(/assets/ibm-plex-sans-vietnamese-500-normal-e4dixQRQ.woff2)format("woff2"),url(/assets/ibm-plex-sans-vietnamese-500-normal-BEb3_waV.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 Sans;font-style:normal;font-display:swap;font-weight:500;src:url(/assets/ibm-plex-sans-latin-ext-500-normal-DakdToA3.woff2)format("woff2"),url(/assets/ibm-plex-sans-latin-ext-500-normal-D0aIdm-b.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 Sans;font-style:normal;font-display:swap;font-weight:500;src:url(/assets/ibm-plex-sans-latin-500-normal-6ng42L7E.woff2)format("woff2"),url(/assets/ibm-plex-sans-latin-500-normal-BgVn5rGT.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 Sans;font-style:normal;font-display:swap;font-weight:600;src:url(/assets/ibm-plex-sans-cyrillic-ext-600-normal-DUMzJB7m.woff2)format("woff2"),url(/assets/ibm-plex-sans-cyrillic-ext-600-normal-Bz0x94Yp.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 Sans;font-style:normal;font-display:swap;font-weight:600;src:url(/assets/ibm-plex-sans-cyrillic-600-normal-71GNu3SW.woff2)format("woff2"),url(/assets/ibm-plex-sans-cyrillic-600-normal-BGq0mW3O.woff)format("woff");unicode-range:U+301,U+400-45F,U+490-491,U+4B0-4B1,U+2116}@font-face{font-family:IBM Plex Sans;font-style:normal;font-display:swap;font-weight:600;src:url(/assets/ibm-plex-sans-greek-600-normal-DzTrcv_p.woff2)format("woff2"),url(/assets/ibm-plex-sans-greek-600-normal-D-CqTdkO.woff)format("woff");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;font-style:normal;font-display:swap;font-weight:600;src:url(/assets/ibm-plex-sans-vietnamese-600-normal-DpPYBSTl.woff2)format("woff2"),url(/assets/ibm-plex-sans-vietnamese-600-normal-DgdngZtN.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 Sans;font-style:normal;font-display:swap;font-weight:600;src:url(/assets/ibm-plex-sans-latin-ext-600-normal-DOrvGEcy.woff2)format("woff2"),url(/assets/ibm-plex-sans-latin-ext-600-normal-DIrixKbi.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 Sans;font-style:normal;font-display:swap;font-weight:600;src:url(/assets/ibm-plex-sans-latin-600-normal-CuJfVYMP.woff2)format("woff2"),url(/assets/ibm-plex-sans-latin-600-normal-Cu4Hd6ag.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:400;src:url(/assets/ibm-plex-mono-cyrillic-ext-400-normal-xuaO2J-f.woff2)format("woff2"),url(/assets/ibm-plex-mono-cyrillic-ext-400-normal-DMdlQ8Kv.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:400;src:url(/assets/ibm-plex-mono-cyrillic-400-normal-BSMlKf0J.woff2)format("woff2"),url(/assets/ibm-plex-mono-cyrillic-400-normal-CEL4l2ZJ.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:400;src:url(/assets/ibm-plex-mono-vietnamese-400-normal-BulugwFq.woff2)format("woff2"),url(/assets/ibm-plex-mono-vietnamese-400-normal-DDuiU_S-.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:400;src:url(/assets/ibm-plex-mono-latin-ext-400-normal-BmRBH3aV.woff2)format("woff2"),url(/assets/ibm-plex-mono-latin-ext-400-normal-D3D2R8hC.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:400;src:url(/assets/ibm-plex-mono-latin-400-normal-DMJ8VG8y.woff2)format("woff2"),url(/assets/ibm-plex-mono-latin-400-normal-CvHOgSBP.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:500;src:url(/assets/ibm-plex-mono-cyrillic-ext-500-normal-BqneJy0T.woff2)format("woff2"),url(/assets/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(/assets/ibm-plex-mono-cyrillic-500-normal-Bq9vWWag.woff2)format("woff2"),url(/assets/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(/assets/ibm-plex-mono-vietnamese-500-normal-DZ4AoWbu.woff2)format("woff2"),url(/assets/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(/assets/ibm-plex-mono-latin-ext-500-normal-CAhNIIs5.woff2)format("woff2"),url(/assets/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(/assets/ibm-plex-mono-latin-500-normal-DSY6xOcd.woff2)format("woff2"),url(/assets/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(/assets/ibm-plex-mono-cyrillic-ext-600-normal-V-xxqcpd.woff2)format("woff2"),url(/assets/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(/assets/ibm-plex-mono-cyrillic-600-normal-CTOM6hUh.woff2)format("woff2"),url(/assets/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(/assets/ibm-plex-mono-vietnamese-600-normal-D2EvbN8M.woff2)format("woff2"),url(/assets/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(/assets/ibm-plex-mono-latin-ext-600-normal-D38SheWl.woff2)format("woff2"),url(/assets/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(/assets/ibm-plex-mono-latin-600-normal-BgSNZQsw.woff2)format("woff2"),url(/assets/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{--bg:#0b0e14;--bg-elev:#10141d;--surface:#131826;--border:#1d2433;--border-strong:#2a3348;--text:#e8e4d9;--text-muted:#99a0b3;--text-faint:#6b7285;--accent:#ffb454;--accent-bright:#ffc36e;--accent-soft:#ffb4541a;--accent-line:#ffb45459;--ok:#7fd962;--blue:#59c2ff;--red:#f07178;--purple:#d2a6ff;--font-display:"Bricolage Grotesque Variable", "IBM Plex Sans", sans-serif;--font-body:"IBM Plex Sans", -apple-system, BlinkMacSystemFont, sans-serif;--font-mono:"IBM Plex Mono", ui-monospace, SFMono-Regular, monospace;--radius:10px;--container:1100px;--ease-out:cubic-bezier(.16, 1, .3, 1)}*,:before,:after{box-sizing:border-box;margin:0}html{scroll-behavior:smooth;scroll-padding-top:88px}body{background:var(--bg);color:var(--text);font-family:var(--font-body);-webkit-font-smoothing:antialiased;text-rendering:optimizelegibility;font-size:16px;line-height:1.65}img{max-width:100%;display:block}a{color:var(--accent);text-decoration:none}button{font:inherit;cursor:pointer}::selection{background:var(--accent);color:var(--bg)}::-webkit-scrollbar{width:8px}::-webkit-scrollbar-track{background:var(--bg)}::-webkit-scrollbar-thumb{background:var(--border-strong);border-radius:8px}::-webkit-scrollbar-thumb:hover{background:var(--accent)}:focus-visible{outline:2px solid var(--accent);outline-offset:3px;border-radius:2px}body:before{content:"";z-index:2000;pointer-events:none;opacity:.05;background-image:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='160' height='160'%3E%3Cfilter id='n'%3E%3CfeTurbulence type='fractalNoise' baseFrequency='0.9' numOctaves='2'/%3E%3C/filter%3E%3Crect width='100%25' height='100%25' filter='url(%23n)'/%3E%3C/svg%3E");position:fixed;inset:0}.container{max-width:var(--container);margin-inline:auto;padding-inline:clamp(20px,5vw,40px)}.section{padding-block:clamp(72px,10vw,128px);position:relative}.section+.section:before{content:"";background:linear-gradient(90deg, transparent, var(--border-strong) 18%, var(--border-strong) 82%, transparent);height:1px;position:absolute;top:0;left:0;right:0}.eyebrow{font-family:var(--font-mono);letter-spacing:.02em;color:var(--text-faint);margin-bottom:.9rem;font-size:.85rem}.eyebrow .method{color:var(--accent);font-weight:600}.eyebrow .method.m-get{color:var(--blue)}.eyebrow .method.m-exec{color:var(--purple)}.eyebrow .status{color:var(--ok)}.section-title{font-family:var(--font-display);letter-spacing:-.025em;margin-bottom:.75rem;font-size:clamp(1.9rem,4.5vw,2.75rem);font-weight:700;line-height:1.1}.section-sub{color:var(--text-muted);max-width:38rem;margin-bottom:clamp(2rem,5vw,3.5rem)}.accent{color:var(--accent)}.btn{font-family:var(--font-mono);border:1px solid #0000;border-radius:8px;align-items:center;gap:.5rem;padding:.7rem 1.4rem;font-size:.9rem;font-weight:600;transition:transform .15s ease-out,background-color .2s ease-out,border-color .2s ease-out,color .2s ease-out;display:inline-flex}.btn:active{transform:scale(.97)}.btn svg{transition:transform .2s var(--ease-out)}.btn:hover svg{transform:translateY(2px)}.btn-solid{background:var(--accent);color:var(--bg)}.btn-solid:hover{background:var(--accent-bright);transform:translateY(-2px);box-shadow:0 8px 32px #ffb45447}.btn-ghost{color:var(--text);border-color:var(--border-strong);background:0 0}.btn-ghost:hover{border-color:var(--accent);color:var(--accent);background:var(--accent-soft)}.reveal{opacity:0}.reveal.is-visible{opacity:1;animation:reveal-in .7s var(--ease-out) backwards;animation-delay:var(--reveal-delay,0s)}@keyframes reveal-in{0%{opacity:0;filter:blur(8px);transform:translateY(28px)}to{opacity:1;filter:none;transform:none}}.reveal.is-visible .skill-tile{animation:reveal-in .55s var(--ease-out) backwards;animation-delay:calc(45ms * var(--i,0))}.nav{z-index:100;transition:background-color .25s ease-out,box-shadow .25s ease-out;position:fixed;top:0;left:0;right:0}.scroll-progress{background:linear-gradient(90deg, var(--accent), var(--blue));transform-origin:0;height:2px;position:absolute;top:0;left:0;right:0;transform:scaleX(0)}.nav.scrolled{-webkit-backdrop-filter:blur(12px);box-shadow:0 1px 0 0 var(--border);background:#0b0e14d1}.nav-inner{justify-content:space-between;align-items:center;height:68px;display:flex}.nav-brand{font-family:var(--font-mono);color:var(--text);align-items:center;gap:.6rem;font-size:1.05rem;font-weight:600;display:inline-flex}.nav-brand .brand-mark{color:var(--accent);transition:transform .45s var(--ease-out);flex-shrink:0}.nav-brand:hover .brand-mark{transform:rotate(90deg)}.nav-brand .tilde{color:var(--accent)}.nav-links{align-items:center;gap:.25rem;padding:0;list-style:none;display:flex}.nav-links a{font-family:var(--font-mono);color:var(--text-muted);border-radius:6px;padding:.5rem .9rem;font-size:.88rem;transition:color .2s ease-out;position:relative}.nav-links a:hover,.nav-links a.active{color:var(--text)}.nav-links a:not(.resume-link):after{content:"";background:var(--accent);width:0;height:2px;transition:width .25s var(--ease-out);position:absolute;bottom:1px;left:.9rem}.nav-links a:not(.resume-link):hover:after,.nav-links a:not(.resume-link).active:after{width:calc(100% - 1.8rem)}.nav-links a.resume-link{color:var(--accent);border:1px solid var(--accent-line);margin-left:.5rem;transition:background-color .2s ease-out,color .2s ease-out}.nav-links a.resume-link:hover{background:var(--accent-soft)}.nav-toggle{color:var(--text);background:0 0;border:none;padding:.4rem;font-size:1.4rem;display:none}@media (width<=720px){.nav-toggle{display:block}.nav-links{-webkit-backdrop-filter:blur(12px);backdrop-filter:blur(12px);border-bottom:1px solid var(--border);background:#0b0e14f7;flex-direction:column;align-items:stretch;gap:0;padding:.5rem 1rem 1rem;display:none;position:absolute;top:68px;left:0;right:0}.nav-links.open{display:flex}.nav-links a{padding:.85rem .75rem}.nav-links a.resume-link{text-align:center;margin-top:.5rem;margin-left:0}}.hero{cursor:crosshair;align-items:center;min-height:100svh;display:flex;position:relative;overflow:hidden}.hero a,.hero .btn{cursor:pointer}.gol-canvas{z-index:0;width:100%;height:100%;position:absolute;inset:0;-webkit-mask-image:radial-gradient(115% 100% at 78% 38%,#000000f2 0%,#0006 52%,#0000 98%);mask-image:radial-gradient(115% 100% at 78% 38%,#000000f2 0%,#0006 52%,#0000 98%)}.hero:after{content:"";z-index:0;pointer-events:none;background:radial-gradient(620px 460px at 20% 34%, #ffb4540e, transparent 70%), linear-gradient(100deg, var(--bg) 0%, #0b0e14e0 28%, #0b0e1459 52%, #0b0e1426 72%, #0b0e148c 100%), linear-gradient(180deg, #0b0e1499 0%, transparent 22%, transparent 62%, var(--bg) 100%);position:absolute;inset:0}.hero-content{z-index:1;width:100%;padding-top:68px;position:relative}.hero-eyebrow{font-family:var(--font-mono);color:var(--text-muted);animation:rise .7s var(--ease-out) both;margin-bottom:1.6rem;font-size:.9rem}.hero-eyebrow .user{color:var(--ok)}.hero-name{font-family:var(--font-display);letter-spacing:-.035em;animation:rise .7s var(--ease-out) 80ms both;margin-bottom:1.6rem;font-size:clamp(3rem,10vw,6.75rem);font-weight:800;line-height:.98}.hero-name .dot{color:var(--accent)}.hero-roles{font-family:var(--font-mono);min-height:2rem;animation:rise .7s var(--ease-out) .16s both;align-items:baseline;gap:.6rem;margin-bottom:1.4rem;font-size:clamp(1rem,2.5vw,1.3rem);display:flex}.hero-roles .prompt{color:var(--accent);font-weight:600}.hero-roles .typed{color:var(--text)}.hero-roles .caret{background:var(--accent);width:.55em;height:1.15em;animation:1s steps(2,end) infinite blink;display:inline-block;transform:translateY(.18em)}.caret-sm{background:var(--text-muted);width:.5em;height:1em;margin-left:2px;animation:.9s steps(2,end) infinite blink;display:inline-block;transform:translateY(.15em)}.hero-lede{max-width:33rem;color:var(--text-muted);animation:rise .7s var(--ease-out) .24s both;margin-bottom:2.6rem;font-size:1.1rem}.hero-cta{animation:rise .7s var(--ease-out) .32s both;flex-wrap:wrap;gap:.9rem;display:flex}.hero-hint{font-family:var(--font-mono);color:var(--text-faint);animation:rise .7s var(--ease-out) .5s both;margin-top:clamp(3rem,8vh,5.5rem);font-size:.75rem}@keyframes rise{0%{opacity:0;transform:translateY(20px)}to{opacity:1;transform:none}}@keyframes blink{50%{opacity:0}}.work-grid{grid-template-columns:repeat(auto-fill,minmax(320px,1fr));gap:1.4rem;display:grid}.project-card{background:var(--surface);border:1px solid var(--border);border-radius:var(--radius);transition:transform .25s var(--ease-out), border-color .25s ease-out, box-shadow .25s ease-out;flex-direction:column;display:flex;position:relative;overflow:hidden}.project-card:hover{transform:perspective(900px) rotateX(var(--rx,0deg)) rotateY(var(--ry,0deg)) translateY(-6px);border-color:var(--accent-line);box-shadow:0 16px 40px #00000073}.project-card:after{content:"";z-index:1;pointer-events:none;opacity:0;background:radial-gradient(440px circle at var(--mx,50%) var(--my,50%), #ffb45412, transparent 65%);transition:opacity .35s ease-out;position:absolute;inset:0}.project-card:hover:after{opacity:1}@media (width>=920px){.project-card.featured{grid-column:span 2}.project-card.featured .project-image{aspect-ratio:21/9}}.ghost-card{border:1px dashed var(--border-strong);border-radius:var(--radius);min-height:220px;font-family:var(--font-mono);color:var(--text-muted);text-align:center;transition:border-color .25s ease-out, color .25s ease-out, background-color .25s ease-out, transform .25s var(--ease-out);flex-direction:column;justify-content:center;align-items:center;gap:.6rem;padding:1rem;font-size:.88rem;display:flex}.ghost-card:hover{border-color:var(--accent-line);color:var(--accent);background:var(--accent-soft);transform:translateY(-6px)}.ghost-card .ghost-plus{font-size:1.8rem;line-height:1}.repo-strip{font-family:var(--font-mono);color:var(--text-faint);background:var(--bg-elev);border-bottom:1px solid var(--border);align-items:center;gap:.55rem;padding:.6rem 1rem;font-size:.76rem;display:flex}.repo-strip .dot{background:var(--accent);opacity:.8;border-radius:50%;flex-shrink:0;width:8px;height:8px}.project-image{aspect-ratio:16/9;object-fit:cover;border-bottom:1px solid var(--border);filter:saturate(.92);width:100%;transition:filter .3s ease-out, transform .6s var(--ease-out)}.project-card:hover .project-image{filter:saturate();transform:scale(1.045)}.project-cover{aspect-ratio:16/9;border-bottom:1px solid var(--border);background:radial-gradient(95% 130% at 50% 0%, color-mix(in srgb, var(--cover-color,var(--accent)) 13%, transparent), transparent 72%), var(--bg-elev);place-items:center;display:grid;position:relative;overflow:hidden}.project-cover:before{content:"";background-image:linear-gradient(var(--border) 1px, transparent 1px), linear-gradient(90deg, var(--border) 1px, transparent 1px);opacity:.45;background-size:26px 26px;position:absolute;inset:0}.cover-glyph{font-family:var(--font-mono);color:var(--cover-color,var(--accent));text-shadow:0 0 34px var(--cover-color,var(--accent));transition:transform .6s var(--ease-out);font-size:clamp(1.5rem,2.6vw,2.2rem);font-weight:600;position:relative}.project-card:hover .cover-glyph{transform:scale(1.08)}.project-card.featured .project-cover{aspect-ratio:21/9}.project-body{flex-direction:column;flex:1;padding:1.2rem 1.2rem 1.3rem;display:flex}.project-title{font-family:var(--font-display);letter-spacing:-.015em;margin-bottom:.6rem;font-size:1.18rem;font-weight:700}.tag-row{flex-wrap:wrap;gap:.4rem;margin-bottom:.8rem;display:flex}.tag{font-family:var(--font-mono);color:var(--text);background:var(--bg-elev);border:1px solid var(--border-strong);white-space:nowrap;border-radius:999px;align-items:center;gap:.38rem;padding:.14rem .62rem;font-size:.72rem;display:inline-flex}.tag-dot{background:var(--tag-color,var(--accent));width:8px;height:8px;box-shadow:0 0 6px var(--tag-color,var(--accent));border-radius:50%;flex-shrink:0}.project-desc{color:var(--text-muted);margin-bottom:1.1rem;font-size:.94rem}.project-links{gap:1rem;margin-top:auto;display:flex}.project-links a{font-family:var(--font-mono);color:var(--text-muted);align-items:center;gap:.4rem;font-size:.84rem;transition:color .2s ease-out;display:inline-flex}.project-links a:hover{color:var(--accent)}.about-grid{grid-template-columns:1.1fr .9fr;align-items:start;gap:clamp(2rem,5vw,4rem);margin-bottom:clamp(3rem,6vw,4.5rem);display:grid}@media (width<=860px){.about-grid{grid-template-columns:1fr}}.terminal{background:var(--surface);border:1px solid var(--border);border-radius:var(--radius);overflow:hidden;box-shadow:0 20px 50px #00000059}.terminal-bar{background:var(--bg-elev);border-bottom:1px solid var(--border);align-items:center;padding:.6rem 1rem;display:flex}.terminal-bar .dots{gap:6px;display:flex}.terminal-bar .dots span{background:var(--border-strong);border-radius:50%;width:10px;height:10px}.terminal-bar .dots span:first-child{background:var(--accent);opacity:.75}.terminal-bar .title{font-family:var(--font-mono);color:var(--text-faint);margin-inline:auto;font-size:.75rem;transform:translate(-19px)}.terminal-body{padding:1.4rem 1.5rem 1.6rem}.terminal-cmd{font-family:var(--font-mono);color:var(--text-faint);margin-bottom:1.1rem;font-size:.85rem}.terminal-cmd .prompt{color:var(--ok)}.terminal-body p{color:var(--text-muted);margin-bottom:1rem;font-size:.97rem}.terminal-body p strong{color:var(--text);font-weight:600}.interests{flex-wrap:wrap;gap:.5rem;margin-top:1.2rem;padding:0;list-style:none;display:flex}.interests li{font-family:var(--font-mono);color:var(--text-muted);border:1px solid var(--border-strong);border-radius:999px;padding:.2rem .7rem;font-size:.78rem}.interests li:before{content:"▹ ";color:var(--accent)}.live-terminal{cursor:text}.terminal-screen{height:380px;font-family:var(--font-mono);color:var(--text-muted);scrollbar-width:thin;padding:1.1rem 1.3rem 1.2rem;font-size:.86rem;line-height:1.7;overflow-y:auto}.t-line{white-space:pre-wrap;word-break:break-word}.t-line a{color:var(--accent)}.t-line a:hover{text-decoration:underline}.t-cmd{color:var(--text);margin-top:.35rem}.t-prompt{color:var(--ok);font-weight:500}.c-text{color:var(--text)}.c-muted{color:var(--text-faint)}.c-amber{color:var(--accent)}.c-blue{color:var(--blue)}.c-green{color:var(--ok)}.c-red{color:var(--red)}.c-purple{color:var(--purple)}.t-input-row{align-items:baseline;gap:.55rem;margin-top:.35rem;display:flex}.t-input-row input{color:var(--text);font-family:var(--font-mono);caret-color:var(--accent);background:0 0;border:none;outline:none;flex:1;padding:0;font-size:.86rem}@media (width<=720px){.t-input-row input{font-size:16px}}.skills-heading{font-family:var(--font-mono);color:var(--text-faint);margin-bottom:1.1rem;font-size:.85rem}.skills-grid{grid-template-columns:repeat(auto-fill,minmax(104px,1fr));gap:.7rem;display:grid}.skill-tile{background:var(--surface);border:1px solid var(--border);border-radius:var(--radius);color:var(--text-muted);flex-direction:column;align-items:center;gap:.5rem;padding:1rem .5rem .8rem;font-size:1.9rem;transition:transform .2s ease-out,border-color .2s ease-out,color .2s ease-out;display:flex;position:relative;overflow:hidden}.skill-tile:after{content:"";pointer-events:none;opacity:0;background:radial-gradient(150px circle at var(--mx,50%) var(--my,50%), #ffb4541a, transparent 70%);transition:opacity .3s ease-out;position:absolute;inset:0}.skill-tile:hover:after{opacity:1}.skill-tile:hover .label{color:var(--text)}.skill-tile:hover{border-color:var(--accent-line);color:var(--accent);transform:translateY(-4px)}.skill-tile .label{font-family:var(--font-mono);color:var(--text-muted);text-align:center;font-size:.68rem;line-height:1.2}.calendar-wrap{margin-top:clamp(3rem,6vw,4.5rem)}.calendar-scroll{font-family:var(--font-mono);color:var(--text-muted);padding-bottom:.5rem;font-size:.8rem;overflow-x:auto}.contact{text-align:left}.contact-title{font-family:var(--font-display);letter-spacing:-.03em;margin-bottom:1.4rem;font-size:clamp(2.6rem,8vw,5.5rem);font-weight:800;line-height:1.02}.contact-body{color:var(--text-muted);max-width:34rem;margin-bottom:2.4rem}.contact-actions{flex-wrap:wrap;align-items:center;gap:1rem;display:flex}.contact-socials{gap:.7rem;margin-left:.4rem;display:flex}.contact-socials a{width:44px;height:44px;color:var(--text);background:var(--surface);border:1px solid var(--border-strong);border-radius:10px;justify-content:center;align-items:center;font-size:1.2rem;transition:transform .2s ease-out,border-color .2s ease-out,color .2s ease-out,background-color .2s ease-out;display:inline-flex}.contact-socials a:hover{color:var(--accent);border-color:var(--accent);background:var(--accent-soft);transform:translateY(-3px)}.footer{border-top:1px solid var(--border);padding-block:1.4rem}.footer-inner{font-family:var(--font-mono);color:var(--text-faint);flex-wrap:wrap;justify-content:space-between;align-items:center;gap:.75rem;font-size:.78rem;display:flex}.footer-inner a{color:var(--text-faint);transition:color .2s ease-out}.footer-inner a:hover{color:var(--accent)}.footer-status .ok{color:var(--ok);animation:2.4s ease-in-out infinite pulse-dot;display:inline-block}@keyframes pulse-dot{0%,to{opacity:1}50%{opacity:.35}}.has-cell-cursor,.has-cell-cursor *{cursor:none!important}.cursor-cell{z-index:4000;background:var(--accent);pointer-events:none;opacity:.9;width:12px;height:12px;transition:width .2s var(--ease-out), height .2s var(--ease-out), opacity .2s ease-out, border-radius .2s var(--ease-out), background-color .2s ease-out;border-radius:2px;position:fixed;top:0;left:0}.cursor-cell.hover{border:2px solid var(--accent);opacity:.85;background:0 0;border-radius:8px;width:34px;height:34px}.cursor-cell.down{width:9px;height:9px}.cursor-cell.gone{opacity:0}.marquee{border-top:1px solid var(--border);border-bottom:1px solid var(--border);background:var(--bg-elev);padding-block:.85rem;overflow:hidden}.marquee-track{width:max-content;animation:36s linear infinite marquee-scroll;display:flex}.marquee:hover .marquee-track{animation-play-state:paused}.marquee-row{flex-shrink:0;display:flex}.marquee-item{font-family:var(--font-mono);letter-spacing:.14em;text-transform:uppercase;color:var(--text-faint);white-space:nowrap;padding-inline:.9rem;font-size:.82rem}.marquee-dot{color:var(--accent);opacity:.6;margin-left:1.4rem}@keyframes marquee-scroll{to{transform:translate(-50%)}}.footer-giant{font-family:var(--font-display);letter-spacing:-.03em;text-align:center;color:#0000;-webkit-text-stroke:1px var(--border-strong);-webkit-user-select:none;user-select:none;white-space:nowrap;padding:clamp(2.5rem,6vw,5rem) 1rem 1.5rem;font-size:clamp(3rem,11vw,9.5rem);font-weight:800;line-height:1;transition:-webkit-text-stroke-color .4s ease-out;overflow:hidden}.footer-giant span{-webkit-text-stroke:0;color:var(--accent)}.footer-giant:hover{-webkit-text-stroke-color:var(--accent-line)}.intro{z-index:5000;background:var(--bg);cursor:pointer;transition:opacity .6s ease-out;position:fixed;inset:0}.intro.fading{opacity:0;pointer-events:none}.intro canvas{width:100%;height:100%;display:block}.intro-skip{font-family:var(--font-mono);color:var(--text-faint);font-size:.72rem;animation:1s ease-out 1.2s backwards skip-in;position:absolute;bottom:1.4rem;left:50%;transform:translate(-50%)}@keyframes skip-in{0%{opacity:0}}@media (prefers-reduced-motion:reduce){html{scroll-behavior:auto}*,:before,:after{transition-duration:.01ms!important;animation-duration:.01ms!important;animation-iteration-count:1!important}.reveal{opacity:1;transform:none}}
