@font-face{font-family:Archivo Variable;font-style:normal;font-display:swap;font-weight:100 900;font-stretch:62% 125%;src:url(/_astro/archivo-vietnamese-wdth-normal.rJmnGBSt.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:Archivo Variable;font-style:normal;font-display:swap;font-weight:100 900;font-stretch:62% 125%;src:url(/_astro/archivo-latin-ext-wdth-normal.7khWdh9v.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:Archivo Variable;font-style:normal;font-display:swap;font-weight:100 900;font-stretch:62% 125%;src:url(/_astro/archivo-latin-wdth-normal.DY7AcnAa.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 Mono;font-style:normal;font-display:swap;font-weight:400;src:url(/_astro/ibm-plex-mono-cyrillic-ext-400-normal.xuaO2J-f.woff2)format("woff2"),url(/_astro/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(/_astro/ibm-plex-mono-cyrillic-400-normal.BSMlKf0J.woff2)format("woff2"),url(/_astro/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(/_astro/ibm-plex-mono-vietnamese-400-normal.BulugwFq.woff2)format("woff2"),url(/_astro/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(/_astro/ibm-plex-mono-latin-ext-400-normal.BmRBH3aV.woff2)format("woff2"),url(/_astro/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(/_astro/ibm-plex-mono-latin-400-normal.DMJ8VG8y.woff2)format("woff2"),url(/_astro/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(/_astro/ibm-plex-mono-cyrillic-ext-500-normal.BqneJy0T.woff2)format("woff2"),url(/_astro/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(/_astro/ibm-plex-mono-cyrillic-500-normal.Bq9vWWag.woff2)format("woff2"),url(/_astro/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(/_astro/ibm-plex-mono-vietnamese-500-normal.DZ4AoWbu.woff2)format("woff2"),url(/_astro/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(/_astro/ibm-plex-mono-latin-ext-500-normal.CAhNIIs5.woff2)format("woff2"),url(/_astro/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(/_astro/ibm-plex-mono-latin-500-normal.DSY6xOcd.woff2)format("woff2"),url(/_astro/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}:root{--paper:#f1f3f2;--paper-2:#e7ebea;--white:#fbfcfc;--ink:#0d1417;--ink-2:#151e22;--ink-3:#1f2a2f;--text:#2a363c;--steel:#55626a;--steel-2:#87949b;--line:#0d141721;--line-2:#0d141712;--cobalt:#2a4be0;--cobalt-deep:#1d37b5;--cobalt-tint:#e3e8fc;--cobalt-light:#93a4ff;--marker:#ffd84d;--marker-deep:#f0c419;--ok:#13805a;--ok-tint:#dff2ea;--warn:#a8640f;--warn-tint:#f8ecd9;--d-fg:#e9eeef;--d-text:#b9c4c8;--d-dim:#8796a0;--d-line:#e9eeef1f;--font-sans:"Archivo Variable", "Archivo", ui-sans-serif, system-ui, -apple-system, "Segoe UI", sans-serif;--font-mono:"IBM Plex Mono", ui-monospace, "SF Mono", Menlo, monospace;--fs-display:clamp(2.6rem, 1.1rem + 4.1vw, 5.2rem);--fs-h1:clamp(2.4rem, 1.3rem + 3.6vw, 4.6rem);--fs-h2:clamp(2rem, 1.25rem + 2.5vw, 3.6rem);--fs-h3:clamp(1.3rem, 1.15rem + .55vw, 1.65rem);--fs-lead:clamp(1.1rem, 1.02rem + .35vw, 1.3rem);--fs-body:1.0625rem;--fs-small:.9rem;--fs-xs:.8125rem;--container:1320px;--gutter:clamp(20px, 4vw, 56px);--section:clamp(96px, 13vw, 184px);--header-h:68px;--r-xs:6px;--r-s:10px;--r-m:16px;--r-l:24px;--ease-out:cubic-bezier(.23, 1, .32, 1);--ease-in-out:cubic-bezier(.77, 0, .175, 1);--ease-drawer:cubic-bezier(.32, .72, 0, 1);--shadow-float:0 1px 0 #fff9 inset, 0 30px 60px -24px #0d141759, 0 12px 24px -12px #0d14172e;--shadow-panel:0 1px 2px #0d14170a, 0 24px 48px -28px #0d141738}*,:before,:after{box-sizing:border-box}html{background:var(--ink);-webkit-text-size-adjust:100%;text-size-adjust:100%;scroll-padding-top:calc(var(--header-h) + 16px)}body{background:var(--paper);min-height:100dvh;color:var(--text);font-family:var(--font-sans);font-size:var(--fs-body);-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;text-rendering:optimizelegibility;font-feature-settings:"ss01" 0;margin:0;font-stretch:100%;line-height:1.6;overflow-x:clip}h1,h2,h3,h4{color:var(--ink);text-wrap:balance;margin:0;font-weight:500}.display{font-size:var(--fs-display);letter-spacing:-.038em;font-weight:500;font-stretch:112%;line-height:.98}.h1{font-size:var(--fs-h1);letter-spacing:-.034em;font-weight:500;font-stretch:110%;line-height:1}.h2{font-size:var(--fs-h2);letter-spacing:-.032em;font-weight:500;font-stretch:110%;line-height:1.02}.h3{font-size:var(--fs-h3);letter-spacing:-.015em;font-weight:560;font-stretch:104%;line-height:1.2}.lead{font-size:var(--fs-lead);color:var(--text);text-wrap:pretty;max-width:60ch;line-height:1.55}.small{font-size:var(--fs-small)}.muted{color:var(--steel)}.code{font-family:var(--font-mono);letter-spacing:0;font-size:.86em}p{text-wrap:pretty;margin:0}a{color:inherit;text-decoration:none}strong{color:var(--ink);font-weight:600}img,svg,video,picture{max-width:100%;display:block}::selection{background:var(--cobalt);color:#fff}:focus-visible{outline:2px solid var(--cobalt);outline-offset:3px;border-radius:4px}.container{width:100%;max-width:calc(var(--container) + var(--gutter) * 2);padding-inline:var(--gutter);margin-inline:auto}.section{padding-block:var(--section);position:relative}.theme-dark{background:var(--ink);color:var(--d-text)}.theme-dark h1,.theme-dark h2,.theme-dark h3,.theme-dark h4,.theme-dark strong{color:var(--d-fg)}.theme-dark .muted{color:var(--d-dim)}.theme-dark .lead{color:var(--d-text)}.section-head{grid-template-columns:minmax(0,7fr) minmax(0,5fr);align-items:end;gap:clamp(24px,4vw,64px);margin-bottom:clamp(48px,6vw,88px);display:grid}.section-head .lead{padding-bottom:.35em}@media (width<=900px){.section-head{grid-template-columns:1fr;align-items:start}}.btn{--btn-h:48px;height:var(--btn-h);border-radius:var(--r-s);font:inherit;letter-spacing:-.005em;white-space:nowrap;cursor:pointer;user-select:none;transition:transform .16s var(--ease-out), background-color .2s ease, color .2s ease, border-color .2s ease, box-shadow .2s ease;border:1px solid #0000;justify-content:center;align-items:center;gap:10px;padding:0 22px;font-size:.97rem;font-weight:540;font-stretch:104%;display:inline-flex;position:relative}.btn:active{transform:scale(.97)}.btn-primary{background:var(--ink);color:var(--white)}.btn-primary .btn-icon{transition:transform .26s var(--ease-out)}.btn-secondary{color:var(--ink);border-color:var(--line);background:0 0}.btn-light{background:var(--white);color:var(--ink)}@media (hover:hover) and (pointer:fine){.btn-primary:hover{background:var(--cobalt)}.btn-primary:hover .btn-icon{transform:translate(3px)}.btn-secondary:hover{border-color:var(--ink)}.btn-light:hover{background:var(--cobalt-tint)}}.btn-sm{--btn-h:40px;padding:0 16px;font-size:.92rem}.link{color:var(--ink);align-items:center;gap:8px;font-weight:540;font-stretch:104%;display:inline-flex;position:relative}.link:after{content:"";transform-origin:0;height:1px;transition:transform .36s var(--ease-out);background:currentColor;position:absolute;bottom:-3px;left:0;right:0;transform:scaleX(.35)}.theme-dark .link{color:var(--d-fg)}@media (hover:hover) and (pointer:fine){.link:hover:after{transform:scaleX(1)}}.tag{border:1px solid var(--line);height:28px;font-size:var(--fs-xs);color:var(--steel);white-space:nowrap;border-radius:999px;align-items:center;padding:0 11px;font-weight:500;display:inline-flex}.theme-dark .tag{border-color:var(--d-line);color:var(--d-text)}.checklist{gap:12px;margin:0;padding:0;list-style:none;display:grid}.checklist li{grid-template-columns:20px 1fr;align-items:start;gap:12px;display:grid}.checklist li svg{color:var(--cobalt);margin-top:4px}.theme-dark .checklist li svg{color:var(--cobalt-light)}.js [data-reveal]{opacity:0;transition:opacity .9s var(--ease-out), transform .9s var(--ease-out), filter .9s var(--ease-out);transition-delay:var(--d,0s);transform:translateY(18px)}.js :is(h1,h2,h3,p)[data-reveal]{filter:blur(8px)}.js [data-reveal].in{opacity:1;filter:none;transform:none}.split-word{overflow-clip-margin:.12em;vertical-align:top;margin-bottom:-.06em;padding-bottom:.06em;display:inline-block;overflow:clip}.split-word>span{filter:blur(10px);transition:transform 1s var(--ease-out), filter 1.1s var(--ease-out);transition-delay:calc(var(--i,0) * 45ms + var(--base,0s));display:inline-block;transform:translateY(105%)}.split-ready.in .split-word>span{filter:none;transform:none}.sr-only{clip:rect(0 0 0 0);white-space:nowrap;border:0;width:1px;height:1px;margin:-1px;padding:0;position:absolute;overflow:hidden}.skip-link{z-index:1000;border-radius:var(--r-s);background:var(--ink);color:var(--white);transition:transform .2s var(--ease-out);padding:10px 16px;font-weight:540;position:fixed;top:12px;left:12px;transform:translateY(-200%)}.skip-link:focus{transform:none}#main:focus{outline:none}::view-transition-group(root){animation-duration:.82s}::view-transition-old(root),::view-transition-new(root){mix-blend-mode:normal;animation-duration:.82s;animation-timing-function:cubic-bezier(.65,0,.25,1);animation-fill-mode:both}::view-transition-old(root){animation-name:mk-recede}::view-transition-new(root){animation-name:mk-iris-open}html[data-astro-transition=back]::view-transition-old(root){z-index:2;animation-name:mk-iris-close}html[data-astro-transition=back]::view-transition-new(root){z-index:1;animation-name:mk-return}::view-transition-group(site-header){z-index:10}::view-transition-old(site-header){display:none}::view-transition-new(site-header){animation:none}@keyframes mk-recede{to{filter:brightness(.62)blur(3px);transform:scale(.94)}}@keyframes mk-iris-open{0%{clip-path:circle(0px at var(--vt-x,50%) var(--vt-y,50%))}to{clip-path:circle(var(--vt-r,150vmax) at var(--vt-x,50%) var(--vt-y,50%))}}@keyframes mk-iris-close{0%{clip-path:circle(var(--vt-r,150vmax) at var(--vt-x,50%) var(--vt-y,50%))}to{clip-path:circle(0px at var(--vt-x,50%) var(--vt-y,50%))}}@keyframes mk-return{0%{filter:brightness(.62)blur(3px);transform:scale(.94)}}[data-tilt]{transform-style:preserve-3d;transition:transform .6s var(--ease-out);will-change:transform}[data-tilt].is-tilting{transition:transform .14s linear}[data-tilt]:after{content:"";border-radius:inherit;background:radial-gradient(circle at var(--gx,50%) var(--gy,50%), #ffffff61, transparent 45%);opacity:0;pointer-events:none;z-index:5;transition:opacity .4s;position:absolute;inset:0}[data-tilt].is-tilting:after{opacity:1}html.has-cursor,html.has-cursor *{cursor:none!important}html.has-cursor :is(input:not([type=checkbox]):not([type=radio]):not([type=submit]):not([type=button]),textarea,[contenteditable=true]){cursor:text!important}html.has-cursor select{cursor:default!important}html.has-cursor :is(iframe,[data-cal-embed],[data-cal-embed] *){cursor:auto!important}.cursor-follow,.cursor-dot{will-change:transform;position:absolute;top:0;left:0}.cursor-dot{background:var(--ink);border-radius:50%;width:6px;height:6px;margin:-3px 0 0 -3px;transition:opacity .2s,background-color .2s}.cursor[data-tone=dark] .cursor-dot{background:var(--d-fg)}.cursor[data-state=label] .cursor-dot{opacity:0}.cursor{z-index:950;pointer-events:none;opacity:0;transition:opacity .25s;position:fixed;top:0;left:0}.cursor[data-on="1"]:not([data-state=hidden]){opacity:1}.cursor-ring{width:34px;height:34px;transition:width .32s var(--ease-out), height .32s var(--ease-out), margin .32s var(--ease-out), background-color .25s ease, border-color .25s ease, transform .16s var(--ease-out);border:1.5px solid #0d141759;border-radius:50%;place-items:center;margin:-17px 0 0 -17px;display:grid;position:absolute;top:0;left:0}.cursor[data-tone=dark] .cursor-ring{border-color:#e9eeef80}.cursor[data-state=link] .cursor-ring{mix-blend-mode:multiply;background:#ffd84d73;border-color:#0000;width:54px;height:54px;margin:-27px 0 0 -27px}.cursor[data-tone=dark][data-state=link] .cursor-ring{mix-blend-mode:screen;background:#ffd84d4d}.cursor[data-state=label] .cursor-ring{background:var(--cobalt);border-color:#0000;width:84px;height:84px;margin:-42px 0 0 -42px}.cursor-text{color:#fff;opacity:0;transition:opacity .2s ease, transform .3s var(--ease-out);font-size:.8rem;font-weight:600;transform:scale(.7)}.cursor[data-state=label] .cursor-text{opacity:1;transform:none}.cursor.is-down .cursor-ring{transform:scale(.82)}[data-magnetic]{transition:transform .5s cubic-bezier(.3,1.6,.5,1),background-color .2s,color .2s,border-color .2s}[data-magnetic].is-pulled{transition:transform .16s var(--ease-out), background-color .2s ease, color .2s ease, border-color .2s ease}@media (prefers-reduced-motion:reduce){::view-transition-group(*),::view-transition-old(*),::view-transition-new(*){animation:none!important}.js [data-reveal],.js :is(h1,h2,h3,p)[data-reveal]{opacity:1;filter:none;transition:none;transform:none}.split-word>span{filter:none;transition:none;transform:none}}
