@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+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: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+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: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+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}@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+0460-052F,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+0301,U+0400-045F,U+0490-0491,U+04B0-04B1,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+1F00-1FFF}@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+0370-0377,U+037A-037F,U+0384-038A,U+038C,U+038E-03A1,U+03A3-03FF}@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+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: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+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: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+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}@font-face{font-family:Space Mono;font-style:normal;font-display:swap;font-weight:400;src:url(/_astro/space-mono-vietnamese-400-normal.BNOj0Qhp.woff2) format("woff2"),url(/_astro/space-mono-vietnamese-400-normal.B0PMp_xB.woff) format("woff");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:Space Mono;font-style:normal;font-display:swap;font-weight:400;src:url(/_astro/space-mono-latin-ext-400-normal.DTLbW2xa.woff2) format("woff2"),url(/_astro/space-mono-latin-ext-400-normal.D4cJI_B-.woff) format("woff");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:Space Mono;font-style:normal;font-display:swap;font-weight:400;src:url(/_astro/space-mono-latin-400-normal.Rg4St2Dn.woff2) format("woff2"),url(/_astro/space-mono-latin-400-normal._3DlpgIW.woff) format("woff");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}@font-face{font-family:Space Mono;font-style:normal;font-display:swap;font-weight:700;src:url(/_astro/space-mono-vietnamese-700-normal.DWQgDHuA.woff2) format("woff2"),url(/_astro/space-mono-vietnamese-700-normal.D-KrLuLr.woff) format("woff");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:Space Mono;font-style:normal;font-display:swap;font-weight:700;src:url(/_astro/space-mono-latin-ext-700-normal.B2s3bDs2.woff2) format("woff2"),url(/_astro/space-mono-latin-ext-700-normal.B_E7P90g.woff) format("woff");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:Space Mono;font-style:normal;font-display:swap;font-weight:700;src:url(/_astro/space-mono-latin-700-normal.mWgeinG7.woff2) format("woff2"),url(/_astro/space-mono-latin-700-normal.D7A851RN.woff) format("woff");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}:root{--color-text: #0a0a0b;--color-text-secondary: #4f4f57;--color-text-tertiary: #6a6a73;--color-text-quaternary: #767680;--color-border: #e2e2e7;--color-border-subtle: #ededf1;--color-line: #e9e9ef;--color-surface: #ffffff;--color-surface-muted: #fafafb;--color-surface-hover: #f3f3f6;--color-nav-hover: #eeeef2;--color-nav-bg: rgba(255, 255, 255, .72);--color-overlay: rgba(255, 255, 255, .72);--accent: #0a84ff;--accent-press: #0066d6;--accent-ink: #ffffff;--accent-2: #b6ef2e;--accent-2-ink: #0a0a0b;--accent-soft: rgba(10, 132, 255, .1);--color-stripe-a: #eaf3ff;--color-stripe-b: #d8e9ff;--cover-fallback: radial-gradient(120% 140% at 0% 0%, #3aa0ff 0%, #0a84ff 38%, #0a3a8f 100%);--shadow-card: 0 1px 2px rgba(10, 10, 20, .04), 0 18px 40px rgba(10, 10, 30, .07);--shadow-card-hover: 0 1px 2px rgba(10, 10, 20, .06), 0 30px 70px rgba(40, 25, 120, .16);--font-base: "Inter Variable", -apple-system, BlinkMacSystemFont, "Helvetica Neue", Arial, sans-serif;--font-display: "Space Grotesk Variable", "Inter Variable", -apple-system, BlinkMacSystemFont, sans-serif;--font-mono: "Space Mono", ui-monospace, "SF Mono", Menlo, monospace;--ease: cubic-bezier(.22, .61, .36, 1)}@media(prefers-color-scheme:dark){:root{--color-text: #f4f4f6;--color-text-secondary: #9a9aa3;--color-text-tertiary: #8a8a94;--color-text-quaternary: #7e7e88;--color-border: #26262c;--color-border-subtle: #19191e;--color-line: #1d1d23;--color-surface: #08080a;--color-surface-muted: #0e0e11;--color-surface-hover: #15151a;--color-nav-hover: #1b1b21;--color-nav-bg: rgba(8, 8, 10, .7);--color-overlay: rgba(8, 8, 10, .62);--accent: #4da3ff;--accent-press: #2d8cff;--accent-ink: #08080a;--accent-2: #d2ff4d;--accent-2-ink: #08080a;--accent-soft: rgba(77, 163, 255, .14);--color-stripe-a: #15131f;--color-stripe-b: #1c1830;--cover-fallback: radial-gradient(120% 140% at 0% 0%, #6b58ff 0%, #4733cc 42%, #161033 100%);--shadow-card: 0 1px 2px rgba(0, 0, 0, .4), 0 18px 44px rgba(0, 0, 0, .5);--shadow-card-hover: 0 1px 2px rgba(0, 0, 0, .5), 0 34px 80px rgba(80, 60, 200, .32)}}*{box-sizing:border-box}html{-webkit-text-size-adjust:100%}html,body{margin:0;padding:0}body{background:var(--color-surface);color:var(--color-text);font-family:var(--font-base);font-size:17px;line-height:1.6;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;text-rendering:optimizeLegibility;transition:background .3s var(--ease),color .3s var(--ease)}::selection{background:var(--accent);color:var(--accent-ink)}.wrap{max-width:1240px;margin:0 auto;padding:0 28px}.gridlines{position:relative}.gridlines:before,.gridlines:after{content:"";position:absolute;top:0;bottom:0;width:1px;background:var(--color-line);pointer-events:none;z-index:0}.gridlines:before{left:max(28px,calc(50% - 620px))}.gridlines:after{right:max(28px,calc(50% - 620px))}@media(max-width:720px){.gridlines:before,.gridlines:after{display:none}}.mono-label{display:inline-flex;align-items:center;gap:8px;font-family:var(--font-mono);font-size:11px;font-weight:700;letter-spacing:.14em;text-transform:uppercase;color:var(--color-text-tertiary)}.mono-label:before{content:"";width:14px;height:2px;background:var(--accent);flex:none}@keyframes fdcRise{0%{opacity:0;transform:translateY(16px)}to{opacity:1;transform:translateY(0)}}.reveal{opacity:0;transform:translateY(22px);transition:opacity .7s var(--ease),transform .7s var(--ease)}.reveal.is-in{opacity:1;transform:none}@media(prefers-reduced-motion:reduce){*,*:before,*:after{animation-duration:.001ms!important;transition-duration:.001ms!important}.reveal{opacity:1;transform:none}}.cover-pic{display:block;background-size:cover;background-position:center;background-repeat:no-repeat}.cover-img{opacity:0;transition:opacity .6s var(--ease)}.cover-img.is-loaded{opacity:1}@media(prefers-reduced-motion:reduce){.cover-img{transition:opacity .01ms}}.cover-grade{position:relative;isolation:isolate}.cover-grade:after{content:"";position:absolute;inset:0;z-index:1;pointer-events:none;background:linear-gradient(150deg,transparent 42%,var(--accent) 168%),radial-gradient(130% 130% at 28% 0%,transparent 55%,rgba(8,8,16,.22) 130%);mix-blend-mode:multiply;opacity:.85}@media(prefers-color-scheme:dark){.cover-grade:after{background:linear-gradient(150deg,transparent 30%,color-mix(in srgb,var(--accent) 70%,#0a0a18) 165%),radial-gradient(135% 135% at 28% 0%,transparent 42%,rgba(6,6,12,.62) 135%);mix-blend-mode:normal;opacity:.5}}.grain{position:fixed;inset:-50%;width:200%;height:200%;z-index:2;pointer-events:none;opacity:.04;background-image:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='180' height='180'%3E%3Cfilter id='n'%3E%3CfeTurbulence type='fractalNoise' baseFrequency='0.85' numOctaves='3' stitchTiles='stitch'/%3E%3C/filter%3E%3Crect width='100%25' height='100%25' filter='url(%23n)'/%3E%3C/svg%3E");mix-blend-mode:overlay}@media(prefers-color-scheme:dark){.grain{opacity:.07;mix-blend-mode:soft-light}}@media(prefers-reduced-motion:reduce){.grain{display:none}}[data-magnetic]{transition:transform .3s var(--ease)}.memoji-placeholder{border-radius:50%;background:var(--color-surface-hover);border:1px solid var(--color-border-subtle);flex:none}.skip-link{position:absolute;top:-48px;left:12px;z-index:200;padding:10px 16px;border-radius:8px;background:var(--accent);color:var(--accent-ink);font-size:14px;font-weight:600;text-decoration:none;transition:top .2s var(--ease)}.skip-link:focus{top:12px}:focus-visible{outline:2px solid var(--accent);outline-offset:3px;border-radius:4px}.astro-code,.astro-code span{color:var(--shiki-light)!important;background-color:var(--shiki-light-bg)!important}@media(prefers-color-scheme:dark){.astro-code,.astro-code span{color:var(--shiki-dark)!important;background-color:var(--shiki-dark-bg)!important}}.astro-code{padding:18px 20px;border-radius:14px;overflow-x:auto;font-size:14px;line-height:1.6;border:1px solid var(--color-border-subtle)}.astro-code code{font-family:var(--font-mono)}.astro-route-announcer{position:absolute;left:0;top:0;clip:rect(0 0 0 0);clip-path:inset(50%);overflow:hidden;white-space:nowrap;width:1px;height:1px}@keyframes astroFadeInOut{0%{opacity:1}to{opacity:0}}@keyframes astroFadeIn{0%{opacity:0;mix-blend-mode:plus-lighter}to{opacity:1;mix-blend-mode:plus-lighter}}@keyframes astroFadeOut{0%{opacity:1;mix-blend-mode:plus-lighter}to{opacity:0;mix-blend-mode:plus-lighter}}@keyframes astroSlideFromRight{0%{transform:translate(100%)}}@keyframes astroSlideFromLeft{0%{transform:translate(-100%)}}@keyframes astroSlideToRight{to{transform:translate(100%)}}@keyframes astroSlideToLeft{to{transform:translate(-100%)}}@media(prefers-reduced-motion){::view-transition-group(*),::view-transition-old(*),::view-transition-new(*){animation:none!important}[data-astro-transition-scope]{animation:none!important}}
