@font-face{font-family:Space Grotesk Variable;font-style:normal;font-display:swap;font-weight:300 700;src:url(../media/space-grotesk-vietnamese-wght-normal.3jl0_j8w0bekq.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(../media/space-grotesk-latin-ext-wght-normal.2c7zyf29vrghw.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(../media/space-grotesk-latin-wght-normal.0oxh562_148qc.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:Geist Mono Variable;font-style:normal;font-display:swap;font-weight:100 900;src:url(../media/geist-mono-cyrillic-ext-wght-normal.2j4htzlmj3gcc.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 Mono Variable;font-style:normal;font-display:swap;font-weight:100 900;src:url(../media/geist-mono-cyrillic-wght-normal.1zh-elm7yw814.woff2)format("woff2-variations");unicode-range:U+301,U+400-45F,U+490-491,U+4B0-4B1,U+2116}@font-face{font-family:Geist Mono Variable;font-style:normal;font-display:swap;font-weight:100 900;src:url(../media/geist-mono-symbols2-wght-normal.0j0zjzdqzpnyk.woff2)format("woff2-variations");unicode-range:U+2000-2001,U+2004-2008,U+200A,U+23B8-23BD,U+2500-259F}@font-face{font-family:Geist Mono Variable;font-style:normal;font-display:swap;font-weight:100 900;src:url(../media/geist-mono-vietnamese-wght-normal.1t_5gnvplukf1.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 Mono Variable;font-style:normal;font-display:swap;font-weight:100 900;src:url(../media/geist-mono-latin-ext-wght-normal.41xmsrsmrahbg.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 Mono Variable;font-style:normal;font-display:swap;font-weight:100 900;src:url(../media/geist-mono-latin-wght-normal.29txv0wq9-da0.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}
html body{-webkit-font-smoothing:antialiased;font-family:Space Grotesk Variable,sans-serif}.ff-m.ff-m{font-family:Geist Mono Variable,ui-monospace,monospace}:root{--surface-2:var(--lightningcss-light,#eef0fb)var(--lightningcss-dark,#1f2237)}.icon-link{padding-bottom:.1em;line-height:1}.icon-link svg{vertical-align:-.2em;width:1.05em;height:1.05em;display:inline-block}.tooltip-popup{transition:opacity .12s,transform .12s}.tooltip-popup[data-starting-style],.tooltip-popup[data-ending-style]{opacity:0;transform:translateY(2px)scale(.98)}.aurora{z-index:0;opacity:.6;filter:blur(30px);pointer-events:none;background:radial-gradient(60% 45% at 12% 0,var(--lightningcss-light,#c9d3f7)var(--lightningcss-dark,#2b3363) 0%,#0000 70%),radial-gradient(50% 40% at 48% -5%,var(--lightningcss-light,#d8cfef)var(--lightningcss-dark,#342a52) 0%,#0000 70%),radial-gradient(55% 45% at 85% 0,var(--lightningcss-light,#cfe6d9)var(--lightningcss-dark,#23433b) 0%,#0000 70%),radial-gradient(40% 35% at 68% 2%,var(--lightningcss-light,#f6dbe2)var(--lightningcss-dark,#452c3a) 0%,#0000 70%);height:460px;position:absolute;inset:0 0 auto}.work-tab-indicator{z-index:0;top:var(--active-tab-top);left:var(--active-tab-left);width:var(--active-tab-width);height:var(--active-tab-height);corner-shape:squircle;background-color:var(--surface-2);border-radius:9999px;transition:left .24s cubic-bezier(.4,0,.2,1),width .24s cubic-bezier(.4,0,.2,1);position:absolute}@media (prefers-reduced-motion:reduce){.work-tab-indicator{transition:none}}@media (hover:hover){.work-desc{opacity:0;grid-template-rows:0fr;transition:grid-template-rows .22s,opacity .22s}.work-row:hover .work-desc,.work-row:focus-visible .work-desc{opacity:1;grid-template-rows:1fr}}.prose .shiki,.prose .shiki span{color:var(--lightningcss-light,var(--s-light))var(--lightningcss-dark,var(--s-dark));background-color:var(--lightningcss-light,var(--s-light-bg))var(--lightningcss-dark,var(--s-dark-bg))}.prose pre{corner-shape:squircle;tab-size:2;border:1px solid var(--lightningcss-light,#e2e6f7)var(--lightningcss-dark,#232741);border-radius:.75rem;margin:0 0 1rem;padding:1rem 1.125rem;font-size:.8125rem;line-height:1.7;overflow-x:auto}.prose pre code{font-family:Geist Mono Variable,ui-monospace,monospace}.prose :not(pre)>code{corner-shape:squircle;color:var(--lightningcss-light,#5d68cc)var(--lightningcss-dark,#bec6f2);background-color:var(--lightningcss-light,#eef0fb)var(--lightningcss-dark,#1f2237);border-radius:.35rem;padding:.1em .35em;font-family:Geist Mono Variable,ui-monospace,monospace;font-size:.875em}.signature{--signature-duration:2.6s}.signature path{fill:none;stroke:currentColor;stroke-linecap:round;stroke-dasharray:var(--len);stroke-dashoffset:var(--len)}.signature[data-drawing=true] path{animation:signature-draw calc(var(--frac) * var(--signature-duration)) linear calc(var(--at) * var(--signature-duration)) forwards}@keyframes signature-draw{to{stroke-dashoffset:0}}@media (prefers-reduced-motion:reduce){.signature path{stroke-dashoffset:0}.signature[data-drawing=true] path{animation:none}}
*,:before,:after{box-sizing:border-box;border:0 solid}*{margin:0;padding:0}html{font-family:system-ui,-apple-system,Segoe UI,Roboto,Helvetica Neue,Noto Sans,Liberation Sans,Arial,sans-serif,Apple Color Emoji,Segoe UI Emoji,Segoe UI Symbol,Noto Color Emoji}body{-webkit-font-smoothing:antialiased;font-family:inherit;line-height:1.5}canvas,img,picture,svg,video{max-width:100%;display:block}button,input,optgroup,select,textarea{background-color:#0000;padding:.5rem;font-family:inherit}button:not([class]),input:not([class]),optgroup:not([class]),select:not([class]),textarea:not([class]){border:1px solid #bfc2c7}:is(a,button,input,select,summary,textarea):focus{outline:2px solid #0000}textarea:not([rows]){min-height:10em}button{cursor:pointer}button:disabled,input:disabled,select:disabled,textarea:disabled{cursor:not-allowed;opacity:.5}h1,h2,h3,h4,h5,h6,p{overflow-wrap:break-word}h1,h2,h3,h4,h5,h6{text-wrap:balance;font-size:1rem;font-weight:600}p{text-wrap:pretty}b,strong{font-weight:700}small{font-size:80%;line-height:1.4}pre,code,kbd,samp{font-family:monospace;font-size:1em}a{color:inherit;text-decoration:none}ol,ul{padding:0;list-style:none}th{font-size:1rem;font-weight:600}hr{border-top:1px solid #bfc2c7;height:0;margin:1em 0}details{display:block}summary{display:list-item}:root{--lightningcss-light:initial;--lightningcss-dark: ;color-scheme:light dark}@media (prefers-color-scheme:dark){:root{--lightningcss-light: ;--lightningcss-dark:initial}}.ai-c{align-items:center}.ai-fe{align-items:flex-end}.bbw-1{border-bottom-width:1px}.bc-accent\/40{border-color:var(--lightningcss-light,#5d68cc66)var(--lightningcss-dark,#bec6f266)}.bc-accent\/50{border-color:var(--lightningcss-light,#5d68cc80)var(--lightningcss-dark,#bec6f280)}.bc-border{border-color:var(--lightningcss-light,#e2e6f7)var(--lightningcss-dark,#232741)}.bg-accent\/10{background-color:var(--lightningcss-light,#5d68cc1a)var(--lightningcss-dark,#bec6f21a)}.bg-border{background-color:var(--lightningcss-light,#e2e6f7)var(--lightningcss-dark,#232741)}.bg-page{background-color:var(--lightningcss-light,#f8f9fe)var(--lightningcss-dark,#151724)}.bg-surface{background-color:var(--lightningcss-light,#fff)var(--lightningcss-dark,#1a1d2e)}.bg-transparent{background-color:#0000}.blw-2{border-left-width:2px}.br-50\%{border-radius:50%}.br-9999{border-radius:9999px}.br-lg{border-radius:.5rem}.br-md{border-radius:.375rem}.bs-d{border-style:dashed}.bs-s{border-style:solid}.btw-1{border-top-width:1px}.bw-0{border-width:0}.bw-1{border-width:1px}.c-accent{color:var(--lightningcss-light,#5d68cc)var(--lightningcss-dark,#bec6f2)}.c-current{color:currentColor}.c-p{cursor:pointer}.c-text{color:var(--lightningcss-light,#1b1e33)var(--lightningcss-dark,#e7e9f6)}.c-text-dim{color:var(--lightningcss-light,#6b7192)var(--lightningcss-dark,#949ac0)}.cs-d{--lightningcss-light: ;--lightningcss-dark:initial;color-scheme:dark}.cs-l{--lightningcss-light:initial;--lightningcss-dark: ;color-scheme:light}.cs-ld{--lightningcss-light:initial;--lightningcss-dark: ;color-scheme:light dark}@media (prefers-color-scheme:dark){.cs-ld{--lightningcss-light: ;--lightningcss-dark:initial}}.cs-s{corner-shape:squircle}.d-b{display:block}.d-f{display:flex}.d-g{display:grid}.d-if{display:inline-flex}.f-1{flex:1}.fd-c{flex-direction:column}.ff-d{font-family:system-ui,-apple-system,Segoe UI,Roboto,Helvetica Neue,Noto Sans,Liberation Sans,Arial,sans-serif,Apple Color Emoji,Segoe UI Emoji,Segoe UI Symbol,Noto Color Emoji}.ff-m{font-family:ui-monospace,Cascadia Code,Source Code Pro,Menlo,Roboto Mono,Ubuntu Mono,Consolas,Liberation Mono,Courier New,monospace}.fs-3xl{font-size:1.875rem}.fs-4xl{font-size:2.25rem}.fs-5xl{font-size:3rem}.fs-i{font-style:italic}.fs-lg{font-size:1.125rem}.fs-md{font-size:1rem}.fs-sm{font-size:.875rem}.fs-xl{font-size:1.25rem}.fs-xs{font-size:.75rem}.fv\:oc-accent:focus-visible{outline-color:var(--lightningcss-light,#5d68cc)var(--lightningcss-dark,#bec6f2)}.fv\:oo-2:focus-visible{outline-offset:2px}.fv\:os-s:focus-visible{outline-style:solid}.fw-500{font-weight:500}.fw-600{font-weight:600}.fw-w{flex-wrap:wrap}.g-1{gap:.25rem}.g-2{gap:.5rem}.g-3{gap:.75rem}.g-4{gap:1rem}.g-5{gap:1.25rem}.h-100\%{height:100%}.h-2{height:.5rem}.h-7{height:1.75rem}.h-8{height:2rem}.h-auto{height:auto}.h-px{height:1px}.h\:bc-accent:hover{border-color:var(--lightningcss-light,#5d68cc)var(--lightningcss-dark,#bec6f2)}.h\:bg-surface-2:hover{background-color:var(--lightningcss-light,#eef0fb)var(--lightningcss-dark,#1f2237)}.h\:c-accent:hover{color:var(--lightningcss-light,#5d68cc)var(--lightningcss-dark,#bec6f2)}.h\:c-text:hover{color:var(--lightningcss-light,#1b1e33)var(--lightningcss-dark,#e7e9f6)}.jc-c{justify-content:center}.lh-1{line-height:1}.lh-2{line-height:1.25}.lh-4{line-height:1.5}.lh-5{line-height:1.625}.ls-2{letter-spacing:-.025em}.m-0{margin:0}.max-w-140{max-width:35rem}.max-w-150{max-width:37.5rem}.max-w-160{max-width:40rem}.mb-0{margin-bottom:0}.mb-1{margin-bottom:.25rem}.mb-2{margin-bottom:.5rem}.mb-3{margin-bottom:.75rem}.mb-4{margin-bottom:1rem}.mb-5{margin-bottom:1.25rem}.min-h-dvh{min-height:100dvh}.mis-auto{margin-inline-start:auto}.mt-0{margin-top:0}.mt-1{margin-top:.25rem}.mt-10{margin-top:2.5rem}.mt-2{margin-top:.5rem}.mt-22{margin-top:5.5rem}.mt-3{margin-top:.75rem}.mt-4{margin-top:1rem}.mt-5{margin-top:1.25rem}.mt-6{margin-top:1.5rem}.mt-8{margin-top:2rem}.mx--2{margin-inline:-.5rem}.mx-0{margin-inline:0}.mx-auto{margin-inline:auto}.my-8{margin-block:2rem}.o-50{opacity:.5}.o-70{opacity:.7}.o-h{overflow:hidden}.of-c{object-fit:cover}.ox-auto{overflow-x:auto}.p-1{padding:.25rem}.p-a{position:absolute}.p-r{position:relative}.pb-24{padding-bottom:6rem}.pl-4{padding-left:1rem}.pl-5{padding-left:1.25rem}.pr-4{padding-right:1rem}.pt-18{padding-top:4.5rem}.pt-2{padding-top:.5rem}.pt-22{padding-top:5.5rem}.pt-7{padding-top:1.75rem}.px-2{padding-inline:.5rem}.px-3{padding-inline:.75rem}.px-6{padding-inline:1.5rem}.py-0{padding-block:0}.py-1{padding-block:.25rem}.py-2{padding-block:.5rem}.py-3{padding-block:.75rem}.s\:\:bg-accent\/25::selection{background-color:var(--lightningcss-light,#5d68cc40)var(--lightningcss-dark,#bec6f240)}.smt-8{scroll-margin-top:2rem}.ta-l{text-align:left}.td-none{text-decoration:none}.tdu-150{transition-duration:.15s}.tp-c{transition-property:color,background-color,border-color,text-decoration-color,fill,stroke}.tw-b{text-wrap:balance}.tw-p{text-wrap:pretty}.us-none{-webkit-user-select:none;user-select:none}.va-t{vertical-align:top}.w-100\%{width:100%}.w-50{width:12.5rem}.w-7{width:1.75rem}.w-8{width:2rem}.zi-10{z-index:10}.zi-90{z-index:90}
