@font-face{font-family:Bricolage Grotesque Variable;font-style:normal;font-display:swap;font-weight:200 800;src:url(/_astro/bricolage-grotesque-vietnamese-wght-normal.BUzh504Q.woff2) format("woff2-variations");unicode-range:U+0102-0103,U+0110-0111,U+0128-0129,U+0168-0169,U+01A0-01A1,U+01AF-01B0,U+0300-0301,U+0303-0304,U+0308-0309,U+0323,U+0329,U+1EA0-1EF9,U+20AB}@font-face{font-family:Bricolage Grotesque Variable;font-style:normal;font-display:swap;font-weight:200 800;src:url(/_astro/bricolage-grotesque-latin-ext-wght-normal.CcLUaPy7.woff2) format("woff2-variations");unicode-range:U+0100-02BA,U+02BD-02C5,U+02C7-02CC,U+02CE-02D7,U+02DD-02FF,U+0304,U+0308,U+0329,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(/_astro/bricolage-grotesque-latin-wght-normal.DLoelf7F.woff2) format("woff2-variations");unicode-range:U+0000-00FF,U+0131,U+0152-0153,U+02BB-02BC,U+02C6,U+02DA,U+02DC,U+0304,U+0308,U+0329,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}:root{--display: "Bricolage Grotesque Variable", system-ui, -apple-system, sans-serif;--sans: ui-sans-serif, -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, Helvetica, Arial, sans-serif;--mono: ui-monospace, "SF Mono", "SFMono-Regular", "JetBrains Mono", "Cascadia Code", Menlo, Consolas, monospace;--bg: #0a0b0f;--bg-2: #10121a;--bg-3: #161925;--line: #20242f;--line-2: #2c3140;--fg: #e7eaf2;--fg-2: #aeb4c4;--dim: #767d90;--pink: #ff5c9d;--pink-2: #ff7ab0;--btn-fg: #0a0b0f;--mint: #56e0be;--cyan: #63b8ff;--violet: #b892ff;--green: #6fd88a;--grad: linear-gradient(100deg, var(--pink), var(--violet) 55%, var(--cyan));--shadow: 0 20px 50px -24px rgba(0,0,0,.7);--radius: 16px;--maxw: 1120px;--nav-h: 64px}@media(prefers-color-scheme:light){:root{--bg: #f6f5f1;--bg-2: #fffefb;--bg-3: #f0eee8;--line: #e2ded3;--line-2: #d2ccbd;--fg: #22242b;--fg-2: #55596a;--dim: #8a8776;--pink: #d63384;--pink-2: #b82a70;--btn-fg: #ffffff;--mint: #0f9e84;--cyan: #2170c6;--violet: #6f4fc4;--green: #2f9e44;--shadow: 0 20px 46px -26px rgba(60,50,30,.35)}}:root[data-theme=dark]{color-scheme:dark}:root[data-theme=light]{color-scheme:light;--bg: #f6f5f1;--bg-2: #fffefb;--bg-3: #f0eee8;--line: #e2ded3;--line-2: #d2ccbd;--fg: #22242b;--fg-2: #55596a;--dim: #8a8776;--pink: #d63384;--pink-2: #b82a70;--btn-fg: #ffffff;--mint: #0f9e84;--cyan: #2170c6;--violet: #6f4fc4;--green: #2f9e44;--shadow: 0 20px 46px -26px rgba(60,50,30,.35)}html{scroll-behavior:smooth}body{margin:0;background:var(--bg);color:var(--fg);font-family:var(--sans);font-size:16px;line-height:1.6;-webkit-font-smoothing:antialiased;background-image:radial-gradient(60% 42% at 82% -8%,color-mix(in srgb,var(--pink) 12%,transparent),transparent 70%),radial-gradient(50% 40% at 0% 6%,color-mix(in srgb,var(--cyan) 10%,transparent),transparent 70%);background-attachment:fixed}::selection{background:color-mix(in srgb,var(--pink) 35%,transparent)}a{color:inherit}img{max-width:100%;display:block}:focus-visible{outline:2px solid var(--pink);outline-offset:3px;border-radius:6px}.wrap{width:min(var(--maxw),100% - 2.5rem);margin-inline:auto}.eyebrow{font-family:var(--mono);font-size:.8rem;letter-spacing:.04em;color:var(--pink);margin:0 0 14px}.eyebrow .g{color:var(--dim)}.nav{position:sticky;top:0;z-index:50;height:var(--nav-h);display:flex;align-items:center;gap:18px;backdrop-filter:blur(12px);background:color-mix(in srgb,var(--bg) 72%,transparent);border-bottom:1px solid var(--line)}.nav .wrap{display:flex;align-items:center;gap:18px}.brand{font-family:var(--mono);font-size:.92rem;color:var(--fg);text-decoration:none;margin-right:auto}.brand .u{color:var(--pink)}.brand .at{color:var(--dim)}.brand .h{color:var(--cyan)}.brand .dr{color:var(--dim)}.navlinks{display:flex;gap:4px}.navlink{font-family:var(--mono);font-size:.84rem;color:var(--fg-2);text-decoration:none;padding:7px 12px;border-radius:9px;transition:color .18s,background .18s}.navlink:hover,.navlink.active{color:var(--fg);background:var(--bg-3)}.navlink.active{color:var(--pink)}.tbtn{font-family:var(--mono);font-size:.95rem;line-height:1;background:transparent;color:var(--fg-2);border:1px solid var(--line);border-radius:9px;width:34px;height:30px;cursor:pointer;transition:color .18s,border-color .18s,background .18s}.tbtn:hover{color:var(--pink);border-color:var(--line-2);background:var(--bg-3)}section{scroll-margin-top:calc(var(--nav-h) + 12px)}.section{padding-block:clamp(64px,9vw,120px)}.section-head{margin-bottom:clamp(28px,4vw,48px)}.h2{font-family:var(--display);font-weight:700;font-size:clamp(1.9rem,4.5vw,2.9rem);line-height:1.05;letter-spacing:-.02em;margin:0;color:var(--fg)}.lead{color:var(--fg-2);font-size:1.05rem;max-width:60ch;margin:12px 0 0}.hero{min-height:calc(100dvh - var(--nav-h));display:flex;align-items:center;padding-block:60px}.hero-inner{flex:0 1 auto}.hero-eyebrow{font-family:var(--mono);font-size:.9rem;color:var(--mint);margin:0 0 18px}.hero-eyebrow .p{color:var(--green)}.hero h1{font-family:var(--display);font-weight:800;letter-spacing:-.03em;line-height:.98;font-size:clamp(2.8rem,9vw,6rem);margin:0;color:var(--fg)}.hero h1 .grad{background:var(--grad);-webkit-background-clip:text;background-clip:text;color:transparent}.hero-role{font-family:var(--mono);font-size:clamp(1rem,2.6vw,1.5rem);color:var(--fg-2);margin:18px 0 0;min-height:1.5em}.hero-role .caret{color:var(--pink);animation:blink 1.05s steps(1) infinite}@keyframes blink{50%{opacity:0}}.hero-pitch{font-size:1.12rem;color:var(--fg-2);max-width:56ch;margin:24px 0 0;line-height:1.7}.hero-pitch strong{color:var(--fg);font-weight:600}.hero-cta{display:flex;flex-wrap:wrap;gap:12px;margin-top:32px}.hero-meta{display:flex;flex-wrap:wrap;gap:8px 22px;margin-top:34px;font-family:var(--mono);font-size:.82rem;color:var(--dim)}.hero-meta b{color:var(--fg-2);font-weight:500}.hero-meta .on{color:var(--green)}.btn{display:inline-flex;align-items:center;gap:8px;font-family:var(--mono);font-size:.9rem;padding:11px 18px;border-radius:11px;border:1px solid var(--line-2);background:var(--bg-2);color:var(--fg);text-decoration:none;cursor:pointer;transition:transform .16s,border-color .16s,background .16s,color .16s}.btn:hover{transform:translateY(-2px);border-color:var(--pink)}.btn-primary{background:var(--pink);color:var(--btn-fg);border:1px solid var(--pink);font-weight:600}.btn-primary:hover{background:var(--pink-2);border-color:var(--pink-2)}.btn .kk{font-size:.74rem;opacity:.7}.worklist{display:flex;flex-direction:column;gap:clamp(20px,3vw,34px)}.projcard{display:grid;grid-template-columns:minmax(0,1.1fr) minmax(0,1fr);gap:clamp(20px,3vw,40px);align-items:center;padding:clamp(18px,2.4vw,26px);border:1px solid var(--line);border-radius:var(--radius);background:color-mix(in srgb,var(--bg-2) 82%,transparent);transition:border-color .2s,transform .2s}.projcard:hover{border-color:var(--line-2);transform:translateY(-3px)}.projcard:nth-child(2n) .projvisual{order:2}.projvisual{border-radius:12px;overflow:hidden;border:1px solid var(--line);background:var(--bg)}.projvisual img{width:100%;display:block;aspect-ratio:16 / 10;object-fit:cover}.termbox{background:var(--bg)}.termbar{display:flex;align-items:center;gap:6px;padding:9px 12px;border-bottom:1px solid var(--line);background:var(--bg-3)}.tdot{width:9px;height:9px;border-radius:50%;background:var(--line-2)}.tdot:nth-child(1){background:#ff5f57}.tdot:nth-child(2){background:#febc2e}.tdot:nth-child(3){background:#28c840}.tname{margin-left:8px;font-family:var(--mono);font-size:.7rem;color:var(--dim)}.termbody{padding:14px 16px;font-family:var(--mono);font-size:.76rem;line-height:1.8;color:var(--fg-2);overflow-x:auto}.termline{white-space:pre}.termline.cmd{color:var(--green)}.projbody{min-width:0}.projtype{display:inline-block;font-family:var(--mono);font-size:.68rem;letter-spacing:.06em;text-transform:uppercase;color:var(--mint);border:1px solid color-mix(in srgb,var(--mint) 40%,transparent);border-radius:999px;padding:3px 10px;margin-bottom:12px}.projname{font-family:var(--display);font-weight:700;font-size:clamp(1.35rem,3vw,1.75rem);letter-spacing:-.01em;margin:0 0 4px;color:var(--fg)}.projmeta{font-family:var(--mono);font-size:.76rem;color:var(--dim)}.projtag{font-size:1.02rem;color:var(--fg);font-weight:600;margin:12px 0 8px}.projdesc{color:var(--fg-2);font-size:.96rem;line-height:1.65;margin:0 0 16px;max-width:56ch}.plogos{display:flex;flex-wrap:wrap;gap:8px;margin-bottom:18px}.plogo{display:inline-flex;align-items:center;justify-content:center;width:38px;height:38px;border:1px solid var(--line);border-radius:10px;background:var(--bg);text-decoration:none;transition:transform .15s,border-color .15s}.plogo:hover{transform:translateY(-2px);border-color:var(--pink)}.plogo svg{width:22px;height:22px;color:var(--fg)}.actions{display:flex;flex-wrap:wrap;gap:10px}.stackgrid{display:grid;grid-template-columns:repeat(auto-fill,minmax(280px,1fr));gap:14px}.scard{border:1px solid var(--line);border-radius:var(--radius);padding:18px 18px 20px;background:color-mix(in srgb,var(--bg-2) 80%,transparent)}.scard h3{font-family:var(--mono);font-size:.72rem;text-transform:uppercase;letter-spacing:.12em;color:var(--pink);margin:0 0 14px;font-weight:600}.scard h3:before{content:"▸ ";color:var(--dim)}.stechgrid{display:grid;grid-template-columns:repeat(auto-fill,minmax(80px,1fr));gap:8px}.stech{display:flex;flex-direction:column;align-items:center;gap:9px;padding:13px 6px;border-radius:11px;text-decoration:none;color:inherit;transition:background .16s,transform .16s}.stech:hover{background:var(--bg-3);transform:translateY(-2px)}.stech svg{width:30px;height:30px;color:var(--fg)}.stech span{font-family:var(--mono);font-size:.66rem;color:var(--dim);text-align:center}.contactcard{border:1px solid var(--line);border-radius:var(--radius);background:color-mix(in srgb,var(--bg-2) 82%,transparent);padding:clamp(24px,4vw,44px);max-width:720px}.ctermhead{font-family:var(--mono);font-size:.88rem;color:var(--dim);margin-bottom:18px}.ctermhead .p{color:var(--green)}.ctermhead .c{color:var(--cyan)}.clist{display:grid;gap:4px}.crow{display:grid;grid-template-columns:120px minmax(0,1fr);gap:16px;align-items:baseline;padding:9px 10px;border-radius:10px;transition:background .15s;font-family:var(--mono)}.crow:hover{background:var(--bg-3)}.crow dt{color:var(--pink);font-size:.86rem}.crow dd{margin:0;min-width:0;overflow-wrap:anywhere}.crow a{color:var(--cyan);text-decoration:none}.crow a:hover{text-decoration:underline}.crow .todo{color:var(--dim);font-style:italic}.foot{border-top:1px solid var(--line);padding-block:30px;margin-top:40px}.foot .wrap{display:flex;flex-wrap:wrap;gap:10px 20px;align-items:center;justify-content:space-between;font-family:var(--mono);font-size:.8rem;color:var(--dim)}.foot .p{color:var(--green)}.foot .c{color:var(--cyan)}.foot .curse{color:var(--pink);animation:blink 1.05s steps(1) infinite}.tip{position:relative}.tip:after{content:attr(data-tip);position:absolute;bottom:calc(100% + 8px);left:50%;transform:translate(-50%) translateY(4px);background:var(--bg-3);color:var(--fg);border:1px solid var(--line-2);border-radius:7px;padding:4px 9px;font-family:var(--mono);font-size:.7rem;white-space:nowrap;pointer-events:none;opacity:0;z-index:30;box-shadow:var(--shadow);transition:opacity .16s,transform .16s}.tip:hover:after,.tip:focus-visible:after{opacity:1;transform:translate(-50%)}.reveal{opacity:0;transform:translateY(22px);transition:opacity .6s cubic-bezier(.2,.7,.2,1),transform .6s cubic-bezier(.2,.7,.2,1)}.reveal.in{opacity:1;transform:none}@media(max-width:800px){.projcard{grid-template-columns:minmax(0,1fr)}.projcard:nth-child(2n) .projvisual{order:0}}@media(max-width:560px){.wrap{width:min(var(--maxw),100% - 2rem)}.nav .wrap{gap:10px}.brand .dr{display:none}.navlink{padding:7px;font-size:.78rem}.navlinks{gap:0}.hero{min-height:auto;padding-block:72px 56px}.hero-cta .btn{flex:1 1 auto;justify-content:center}.crow{grid-template-columns:1fr;gap:2px}.crow dt{font-size:.78rem}.contactcard{padding:20px 16px}.projcard{padding:16px}}@media(prefers-reduced-motion:reduce){html{scroll-behavior:auto}*,*:before,*:after{animation-duration:.001ms!important;transition-duration:.001ms!important}.reveal{opacity:1;transform:none}}
