@font-face{font-family:Inter Variable;font-style:normal;font-display:swap;font-weight:100 900;src:url(/portfolio/_astro/inter-cyrillic-ext-wght-normal.BOeWTOD4.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:Inter Variable;font-style:normal;font-display:swap;font-weight:100 900;src:url(/portfolio/_astro/inter-cyrillic-wght-normal.DqGufNeO.woff2)format("woff2-variations");unicode-range:U+301,U+400-45F,U+490-491,U+4B0-4B1,U+2116}@font-face{font-family:Inter Variable;font-style:normal;font-display:swap;font-weight:100 900;src:url(/portfolio/_astro/inter-greek-ext-wght-normal.DlzME5K_.woff2)format("woff2-variations");unicode-range:U+1F??}@font-face{font-family:Inter Variable;font-style:normal;font-display:swap;font-weight:100 900;src:url(/portfolio/_astro/inter-greek-wght-normal.CkhJZR-_.woff2)format("woff2-variations");unicode-range:U+370-377,U+37A-37F,U+384-38A,U+38C,U+38E-3A1,U+3A3-3FF}@font-face{font-family:Inter Variable;font-style:normal;font-display:swap;font-weight:100 900;src:url(/portfolio/_astro/inter-vietnamese-wght-normal.CBcvBZtf.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:Inter Variable;font-style:normal;font-display:swap;font-weight:100 900;src:url(/portfolio/_astro/inter-latin-ext-wght-normal.DO1Apj_S.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:Inter Variable;font-style:normal;font-display:swap;font-weight:100 900;src:url(/portfolio/_astro/inter-latin-wght-normal.Dx4kXJAl.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:Space Grotesk Variable;font-style:normal;font-display:swap;font-weight:300 700;src:url(/portfolio/_astro/space-grotesk-vietnamese-wght-normal.D0rl6rjA.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(/portfolio/_astro/space-grotesk-latin-ext-wght-normal.D9tNdqV9.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(/portfolio/_astro/space-grotesk-latin-wght-normal.BhU9QXUp.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:JetBrains Mono Variable;font-style:normal;font-display:swap;font-weight:100 800;src:url(data:font/woff2;base64,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)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:JetBrains Mono Variable;font-style:normal;font-display:swap;font-weight:100 800;src:url(/portfolio/_astro/jetbrains-mono-cyrillic-wght-normal.D73BlboJ.woff2)format("woff2-variations");unicode-range:U+301,U+400-45F,U+490-491,U+4B0-4B1,U+2116}@font-face{font-family:JetBrains Mono Variable;font-style:normal;font-display:swap;font-weight:100 800;src:url(/portfolio/_astro/jetbrains-mono-greek-wght-normal.Bw9x6K1M.woff2)format("woff2-variations");unicode-range:U+370-377,U+37A-37F,U+384-38A,U+38C,U+38E-3A1,U+3A3-3FF}@font-face{font-family:JetBrains Mono Variable;font-style:normal;font-display:swap;font-weight:100 800;src:url(/portfolio/_astro/jetbrains-mono-vietnamese-wght-normal.Bt-aOZkq.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:JetBrains Mono Variable;font-style:normal;font-display:swap;font-weight:100 800;src:url(/portfolio/_astro/jetbrains-mono-latin-ext-wght-normal.DBQx-q_a.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:JetBrains Mono Variable;font-style:normal;font-display:swap;font-weight:100 800;src:url(/portfolio/_astro/jetbrains-mono-latin-wght-normal.B9CIFXIH.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}:root{--font-display:"Space Grotesk Variable", ui-sans-serif, system-ui, sans-serif;--font-body:"Inter Variable", ui-sans-serif, system-ui, -apple-system, "Segoe UI", sans-serif;--font-mono:"JetBrains Mono Variable", ui-monospace, "SF Mono", Menlo, Consolas, monospace;--step--1:clamp(.83rem, .8rem + .15vw, .9rem);--step-0:clamp(1rem, .96rem + .2vw, 1.125rem);--step-1:clamp(1.2rem, 1.12rem + .4vw, 1.45rem);--step-2:clamp(1.44rem, 1.28rem + .75vw, 1.9rem);--step-3:clamp(1.73rem, 1.45rem + 1.3vw, 2.6rem);--step-4:clamp(2.07rem, 1.6rem + 2.2vw, 3.6rem);--step-5:clamp(2.5rem, 1.7rem + 3.6vw, 5rem);--leading-tight:1.08;--leading-snug:1.3;--leading-body:1.65;--tracking-display:-.025em;--tracking-label:.08em;--space-3xs:.25rem;--space-2xs:.5rem;--space-xs:.75rem;--space-s:1rem;--space-m:1.5rem;--space-l:2rem;--space-xl:3rem;--space-2xl:clamp(3.5rem, 2.5rem + 4vw, 6rem);--space-3xl:clamp(5rem, 3rem + 8vw, 9rem);--page-max:72rem;--measure:68ch;--gutter:clamp(1rem, .5rem + 2.5vw, 2.5rem);--radius-s:4px;--radius-m:10px;--radius-l:18px;--border:1px;--ease-out:cubic-bezier(.2, .7, .2, 1);--dur-fast:.14s;--dur-med:.32s;--dur-slow:.7s;color-scheme:light;--bg:#f6f4ef;--surface:#fff;--surface-2:#eeebe3;--ink:#14181b;--ink-2:#353d42;--muted:#565f65;--line:#dcd7cc;--accent:#0a7a6b;--accent-strong:#065f53;--accent-fill:#14c9ad;--accent-ink:#04211d;--danger:#b42318;--accent-soft:color-mix(in oklab, var(--accent-fill) 14%, transparent);--grid-line:color-mix(in oklab, var(--ink) 6%, transparent);--focus:#0a7a6b;--plate:#fff;--shadow:0 1px 2px #14181b0f, 0 8px 24px -12px #14181b2e}@media (prefers-color-scheme:dark){:root:not([data-theme=light]){color-scheme:dark;--bg:#0c0f12;--surface:#13181c;--surface-2:#1a2126;--ink:#e8eef0;--ink-2:#c3ccd0;--muted:#93a1a8;--line:#253038;--accent:#3be8cc;--accent-strong:#7ff2df;--accent-fill:#2ee6c9;--accent-ink:#04211d;--danger:#ff8f80;--grid-line:color-mix(in oklab, var(--ink) 5%, transparent);--focus:#3be8cc;--plate:#f4f2ec;--shadow:0 1px 2px #0006, 0 10px 30px -14px #000000b3}}:root[data-theme=dark]{color-scheme:dark;--bg:#0c0f12;--surface:#13181c;--surface-2:#1a2126;--ink:#e8eef0;--ink-2:#c3ccd0;--muted:#93a1a8;--line:#253038;--accent:#3be8cc;--accent-strong:#7ff2df;--accent-fill:#2ee6c9;--accent-ink:#04211d;--danger:#ff8f80;--grid-line:color-mix(in oklab, var(--ink) 5%, transparent);--focus:#3be8cc;--plate:#f4f2ec;--shadow:0 1px 2px #0006, 0 10px 30px -14px #000000b3}*,:before,:after{box-sizing:border-box}*{margin:0}html{-webkit-text-size-adjust:100%;text-size-adjust:100%;scroll-padding-top:8rem}@media (width>=48rem){html{scroll-padding-top:5.5rem}}@media (prefers-reduced-motion:no-preference){html{scroll-behavior:smooth}}body{background:var(--bg);min-height:100dvh;color:var(--ink);font-family:var(--font-body);font-size:var(--step-0);line-height:var(--leading-body);font-optical-sizing:auto;-webkit-font-smoothing:antialiased;text-rendering:optimizelegibility;flex-direction:column;display:flex;overflow-x:clip}img,svg,picture{max-width:100%;height:auto;display:block}h1,h2,h3,h4{font-family:var(--font-display);font-weight:650;line-height:var(--leading-tight);letter-spacing:var(--tracking-display);text-wrap:balance}h1{font-size:var(--step-5)}h2{font-size:var(--step-3)}h3{font-size:var(--step-1);line-height:var(--leading-snug)}p,li{text-wrap:pretty}strong{color:var(--ink);font-weight:650}a{color:var(--accent);text-underline-offset:.2em;transition:color var(--dur-fast) var(--ease-out), text-decoration-color var(--dur-fast);text-decoration-thickness:1px}a:hover{color:var(--accent-strong);text-decoration-thickness:2px}code,kbd,.mono{font-family:var(--font-mono);font-feature-settings:"calt" 0;font-size:.9em}:focus-visible{outline:2px solid var(--focus);outline-offset:3px;border-radius:var(--radius-s)}::selection{background:var(--accent-fill);color:var(--accent-ink)}.wrap{width:100%;max-width:var(--page-max);padding-inline:var(--gutter);margin-inline:auto}.prose{max-width:var(--measure)}.prose>*+*{margin-top:var(--space-s)}.visually-hidden{clip:rect(0 0 0 0);white-space:nowrap;border:0;width:1px;height:1px;margin:-1px;padding:0;overflow:hidden;position:absolute!important}.label{font-family:var(--font-mono);font-size:var(--step--1);letter-spacing:var(--tracking-label);text-transform:lowercase;color:var(--muted)}.tag{border:var(--border) solid var(--line);border-radius:var(--radius-s);background:var(--surface);font-family:var(--font-mono);font-size:var(--step--1);color:var(--ink-2);white-space:nowrap;padding:.1em .55em;display:inline-block}.tag-list{gap:var(--space-2xs);flex-wrap:wrap;padding:0;list-style:none;display:flex}@media (prefers-reduced-motion:no-preference){@supports (animation-timeline:view()){.reveal{animation:linear both reveal view();animation-range:entry entry 40%}}}@keyframes reveal{0%{opacity:0;translate:0 1.25rem}to{opacity:1;translate:0}}.theme-toggle[data-astro-cid-l6lhmie6]{border:var(--border) solid var(--line);background:var(--surface);width:2.5rem;height:2.5rem;color:var(--ink-2);cursor:pointer;transition:color var(--dur-fast), border-color var(--dur-fast), rotate var(--dur-med) var(--ease-out);border-radius:999px;place-items:center;display:inline-grid}.theme-toggle[data-astro-cid-l6lhmie6]:hover{color:var(--accent);border-color:var(--accent)}.theme-toggle[data-astro-cid-l6lhmie6]>svg[data-astro-cid-l6lhmie6]{grid-area:1/1}.sun[data-astro-cid-l6lhmie6]{display:none}[data-theme=dark] .sun[data-astro-cid-l6lhmie6]{display:block}[data-theme=dark] .moon[data-astro-cid-l6lhmie6]{display:none}@media (prefers-color-scheme:dark){:root:not([data-theme=light]) .sun[data-astro-cid-l6lhmie6]{display:block}:root:not([data-theme=light]) .moon[data-astro-cid-l6lhmie6]{display:none}}.site-header[data-astro-cid-nen7h5rs]{z-index:50;background:color-mix(in oklab, var(--bg) 92%, transparent);-webkit-backdrop-filter:blur(12px)saturate(1.4);border-bottom:var(--border) solid var(--line);position:sticky;top:0}.bar[data-astro-cid-nen7h5rs]{align-items:center;column-gap:var(--space-m);padding-block:var(--space-2xs);grid-template-columns:1fr auto;grid-template-areas:"brand toggle""nav nav";display:grid}.brand[data-astro-cid-nen7h5rs]{font-family:var(--font-mono);font-weight:600;font-size:var(--step-0);color:var(--ink);letter-spacing:-.01em;padding-block:var(--space-2xs);grid-area:brand;align-items:center;width:fit-content;text-decoration:none;display:inline-flex}.prompt[data-astro-cid-nen7h5rs]{color:var(--accent)}.caret[data-astro-cid-nen7h5rs]{background:var(--accent-fill);width:.55em;height:1.1em;margin-left:.15em;display:inline-block;translate:0 .08em}@media (prefers-reduced-motion:no-preference){.caret[data-astro-cid-nen7h5rs]{animation:1.1s step-end infinite blink}}@keyframes blink{50%{opacity:0}}nav[data-astro-cid-nen7h5rs]{scrollbar-width:none;grid-area:nav;overflow-x:auto}ul[data-astro-cid-nen7h5rs]{gap:var(--space-3xs);padding:0;list-style:none;display:flex}nav[data-astro-cid-nen7h5rs] a[data-astro-cid-nen7h5rs]{padding:var(--space-2xs) var(--space-xs);border-radius:var(--radius-s);color:var(--ink-2);font-size:var(--step--1);white-space:nowrap;font-weight:500;text-decoration:none;display:block}nav[data-astro-cid-nen7h5rs] li[data-astro-cid-nen7h5rs]:first-child a[data-astro-cid-nen7h5rs]{padding-left:0}nav[data-astro-cid-nen7h5rs] a[data-astro-cid-nen7h5rs]:hover{color:var(--ink)}nav[data-astro-cid-nen7h5rs] a[data-astro-cid-nen7h5rs][aria-current=page]{color:var(--ink);box-shadow:inset 0 -2px 0 var(--accent-fill);border-radius:0}.theme-toggle{grid-area:toggle}@media (width>=48rem){.bar[data-astro-cid-nen7h5rs]{padding-block:var(--space-xs);grid-template-columns:auto 1fr auto;grid-template-areas:"brand nav toggle"}nav[data-astro-cid-nen7h5rs]{justify-self:end}nav[data-astro-cid-nen7h5rs] li[data-astro-cid-nen7h5rs]:first-child a[data-astro-cid-nen7h5rs]{padding-left:var(--space-xs)}nav[data-astro-cid-nen7h5rs] a[data-astro-cid-nen7h5rs]{font-size:var(--step-0)}}.site-footer[data-astro-cid-jo6i4kqk]{margin-top:var(--space-3xl);border-top:var(--border) solid var(--line);padding-block:var(--space-l)}.row[data-astro-cid-jo6i4kqk]{gap:var(--space-xs) var(--space-l);flex-wrap:wrap;justify-content:space-between;align-items:center;display:flex}ul[data-astro-cid-jo6i4kqk]{gap:var(--space-m);padding:0;list-style:none;display:flex}.note[data-astro-cid-jo6i4kqk]{flex-basis:100%}.skip-link[data-astro-cid-hkbrpulz]{left:var(--gutter);z-index:100;padding:var(--space-2xs) var(--space-s);background:var(--accent-fill);color:var(--accent-ink);border-radius:var(--radius-s);font-weight:600;position:absolute;top:-100%}.skip-link[data-astro-cid-hkbrpulz]:focus{top:var(--space-2xs)}main[data-astro-cid-hkbrpulz]{flex:1}main[data-astro-cid-hkbrpulz]:focus{outline:none}
