@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+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(/_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(/_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(/_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(/_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(/_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(/_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: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+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: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+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: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+??,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,[data-theme=light]{--background:#fafafa;--foreground:#0d0d0d;--surface-secondary:#fff;--surface-tertiary:#f3f3f3;--surface-elevated:#fff;--card:#fff;--card-foreground:var(--foreground);--popover:var(--surface-elevated);--popover-foreground:var(--foreground);--primary:#181818;--primary-hover:#303030;--primary-foreground:#fff;--secondary:#0d0d0d14;--secondary-hover:#0d0d0d1f;--secondary-foreground:var(--foreground);--muted:#ededed;--muted-foreground:#5d5d5d;--well:#ededed;--track:#dfdfdf;--subtle-foreground:#8f8f8f;--accent:#0d0d0d14;--accent-foreground:var(--foreground);--hover:#0d0d0d0d;--selected:#0d0d0d14;--border:#0d0d0d1a;--border-subtle:#0d0d0d0d;--border-strong:#0d0d0d26;--input:#0d0d0d29;--input-hover:#0d0d0d40;--ring:#6d3ae0;--brand:#6d3ae0;--brand-hover:#5b2bc9;--brand-strong:#6d3ae0;--brand-strong-hover:#5b2bc9;--brand-foreground:#fff;--brand-soft:#f1ecfd;--brand-text:#6d3ae0;--destructive:#e02e2a;--destructive-hover:#ba2623;--destructive-foreground:#fff;--destructive-soft:#fa423e14;--destructive-text:#ba2623;--success:#008635;--success-foreground:#fff;--success-soft:#04b84c14;--success-text:#00692a;--warning:#ffc300;--warning-foreground:#0d0d0d;--warning-soft:#ffc30026;--warning-text:#6e5400;--info:#0169cc;--info-foreground:#fff;--info-soft:#0285ff14;--info-text:#0169cc;--link:#6d3ae0;--overlay:#0000004d;--tooltip:#303030;--tooltip-foreground:#fff;--tile-gray:#85827c;--tile-brown:#a8714a;--tile-orange:#ea7a2c;--tile-yellow:#dba51a;--tile-green:#2f9e6b;--tile-blue:#3478e0;--tile-purple:#8a5ce0;--tile-pink:#d9539a;--tile-red:#dc4a40;--tile-foreground:#fff;--chart-1:var(--brand);--chart-2:#0285ff;--chart-3:#00a240;--chart-4:#924ff7;--chart-5:#e0ac00;--sidebar:var(--surface-secondary);--sidebar-icon:var(--muted-foreground);--sidebar-foreground:var(--foreground);--sidebar-primary:var(--primary);--sidebar-primary-foreground:var(--primary-foreground);--sidebar-accent:var(--selected);--sidebar-accent-foreground:var(--foreground);--sidebar-border:var(--border);--sidebar-ring:var(--ring);--shadow-hairline:0 0 0 1px #00000014;--shadow-100:0 1px 2px -1px #00000014;--shadow-200:0 2px 4px -1px #00000014;--shadow-300:0 4px 8px -2px #0000001a;--shadow-400:0 8px 16px -4px #0000001f;--shadow-menu:0 4px 8px -2px #0000001a, 0 0 0 1px #00000014;--shadow-float:0 8px 16px -4px #0000001f, 0 0 0 1px #00000014;--shadow-card:0 0 #0000;--shadow-card-hover:0 0 #0000;--shadow-brand:0 10px 30px #6d3ae038, 0 2px 6px #00000014;--shadow-thumb:0 1px 2px #0003}[data-theme=dark],.dark{--background:#212121;--foreground:#fff;--surface-secondary:#181818;--surface-tertiary:#131313;--surface-elevated:#303030;--card:#212121;--card-foreground:var(--foreground);--popover:var(--surface-elevated);--popover-foreground:var(--foreground);--primary:#f3f3f3;--primary-hover:#ededed;--primary-foreground:#0d0d0d;--secondary:#ffffff1f;--secondary-hover:#ffffff29;--secondary-foreground:var(--foreground);--muted:#303030;--muted-foreground:#afafaf;--well:#0d0d0d;--track:#414141;--accent:#ffffff1a;--accent-foreground:var(--foreground);--hover:#ffffff14;--selected:#ffffff1f;--border:#ffffff1f;--border-subtle:#ffffff0f;--border-strong:#fff3;--input:#ffffff40;--input-hover:#ffffff4d;--ring:#9c85ff;--brand:#8a5cf5;--brand-hover:#9d76f7;--brand-soft:#302647;--brand-text:#9c85ff;--destructive-soft:#fa423e29;--destructive-text:#ff8583;--success-soft:#04b84c26;--success-text:#40c977;--warning-text:#ffd240;--info-soft:#0285ff21;--info-text:#66b5ff;--link:#9c85ff;--overlay:#00000080;--tooltip:#afafaf;--tooltip-foreground:#0d0d0d;--chart-1:var(--brand);--chart-2:#339cff;--chart-3:#04b84c;--chart-4:#ad7bf9;--chart-5:#ffc300;--sidebar:var(--surface-secondary);--sidebar-icon:var(--muted-foreground);--sidebar-foreground:var(--foreground);--sidebar-primary:var(--primary);--sidebar-primary-foreground:var(--primary-foreground);--sidebar-accent:var(--selected);--sidebar-accent-foreground:var(--foreground);--sidebar-border:var(--border);--sidebar-ring:var(--ring);--shadow-hairline:0 0 0 1px #ffffff1a;--shadow-100:0 1px 2px -1px #0003;--shadow-200:0 2px 4px -1px #0003;--shadow-300:0 4px 8px -2px #0000005c;--shadow-400:0 8px 16px -4px #0000004d;--shadow-menu:0 4px 8px -2px #0000005c, 0 0 0 1px #ffffff1a;--shadow-float:0 8px 16px -4px #0000004d, 0 0 0 1px #ffffff1a;--shadow-brand:0 10px 30px #6d3ae033, 0 2px 6px #0000004d;--shadow-thumb:0 1px 2px #0006;color-scheme:dark}:root{--spacing:4px;--space-1:4px;--space-2:8px;--space-3:12px;--space-4:16px;--space-5:20px;--space-6:24px;--space-8:32px;--space-10:40px;--space-12:48px;--space-16:64px;--radius-xs:4px;--radius-sm:6px;--radius-md:8px;--radius-lg:10px;--radius-xl:12px;--radius-2xl:16px;--radius-3xl:20px;--radius-4xl:24px;--radius-full:9999px;--radius-button:9999px;--radius-control:10px;--radius-menu:12px;--radius-card:16px;--radius-dialog:20px;--radius-badge:9999px;--control-xs:24px;--control-sm:32px;--control-md:36px;--control-lg:40px;--control-xl:52px;--control-touch:44px;--icon-stroke:1.75;--tile-fill:100%;--tile-glyph:100%;--tile-glyph-size:78%;--sidebar-width:260px;--content-width:720px;--duration-fast:.15s;--duration-enter:.2s;--duration-exit:.15s;--ease-enter:cubic-bezier(.19, 1, .22, 1);--ease-exit:cubic-bezier(.8, 0, .4, 1);--ease-move:cubic-bezier(.65, 0, .35, 1);--font-sans:"Inter Variable", Inter, system-ui, -apple-system, sans-serif;--font-mono:ui-monospace, "SF Mono", SFMono-Regular, Menlo, Monaco, Consolas, "Liberation Mono", monospace;--font-display:"Bricolage Grotesque Variable", "Inter Variable", system-ui, sans-serif;--type-heading-3xl-size:48px;--type-heading-3xl-line-height:48px;--type-heading-3xl-weight:700;--type-heading-3xl-tracking:-.02em;--type-heading-2xl-size:36px;--type-heading-2xl-line-height:42px;--type-heading-2xl-weight:700;--type-heading-2xl-tracking:-.01em;--type-heading-xl-size:32px;--type-heading-xl-line-height:38px;--type-heading-xl-weight:700;--type-heading-xl-tracking:-.01em;--type-heading-lg-size:24px;--type-heading-lg-line-height:28px;--type-heading-lg-weight:700;--type-heading-lg-tracking:-.01em;--type-heading-md-size:20px;--type-heading-md-line-height:26px;--type-heading-md-weight:700;--type-heading-sm-size:18px;--type-heading-sm-line-height:26px;--type-heading-sm-weight:700;--type-heading-xs-size:16px;--type-heading-xs-line-height:24px;--type-heading-xs-weight:700;--type-reading-size:16px;--type-reading-line-height:28px;--type-reading-weight:400;--type-body-lg-size:18px;--type-body-lg-line-height:29px;--type-body-lg-weight:400;--type-body-size:16px;--type-body-line-height:24px;--type-body-weight:400;--type-body-sm-size:14px;--type-body-sm-line-height:20px;--type-body-sm-weight:400;--type-label-size:14px;--type-label-line-height:20px;--type-label-weight:500;--type-caption-size:12px;--type-caption-line-height:18px;--type-caption-weight:400;--type-caption-sm-size:10px;--type-caption-sm-line-height:14px;--type-caption-sm-weight:400;--type-code-size:13px;--type-code-line-height:20px;--type-code-weight:400;--type-wordmark-weight:700;--type-wordmark-tracking:-.02em;--type-wordmark-mark-scale:1.2;--type-wordmark-gap:.35;--font-heading:var(--font-display)}*,:before,:after{box-sizing:border-box}html{color-scheme:light;-webkit-text-size-adjust:100%}html[data-theme=dark]{color-scheme:dark}body{background:var(--background);min-height:100dvh;color:var(--foreground);font-family:var(--font-sans);font-size:var(--type-body-size);line-height:var(--type-body-line-height);font-feature-settings:"cv11", "ss01";-webkit-font-smoothing:antialiased;flex-direction:column;margin:0;display:flex}h1,h2,h3,h4{font-family:var(--font-heading);font-weight:var(--type-heading-lg-weight);text-wrap:balance;margin:0}p{text-wrap:pretty;margin:0}a{color:var(--link);text-underline-offset:.2em}a:hover{text-decoration-thickness:2px}:focus-visible{outline:2px solid var(--ring);outline-offset:2px;border-radius:var(--radius-xs)}.num{font-variant-numeric:tabular-nums}.container{width:100%;max-width:960px;margin:0 auto;padding:0 24px}.lockup{color:var(--foreground);font-family:var(--font-display);font-weight:var(--type-wordmark-weight);letter-spacing:var(--type-wordmark-tracking);align-items:center;gap:10px;font-size:20px;text-decoration:none;display:inline-flex}.lockup img{width:28px;height:28px;display:block}.site-header{padding-top:24px}.site-main{flex-direction:column;flex:1;padding-top:48px;padding-bottom:64px;display:flex}.site-footer{border-top:1px solid var(--border-subtle);color:var(--subtle-foreground);flex-direction:column;gap:4px;padding-top:24px;padding-bottom:32px;display:flex}.site-footer nav{flex-wrap:wrap;gap:4px 20px;margin-bottom:8px;display:flex}.site-footer nav a{color:var(--muted-foreground);font-size:var(--type-body-sm-size);font-weight:500;text-decoration:none}.site-footer nav a:hover{color:var(--foreground)}.prose{max-width:var(--content-width)}.prose h1{font-size:var(--type-heading-xl-size);line-height:var(--type-heading-xl-line-height);letter-spacing:-.02em;margin-bottom:24px}.prose h2{font-size:var(--type-heading-md-size);line-height:var(--type-heading-md-line-height);margin:32px 0 8px}.prose p,.prose ul,.prose ol{font-size:var(--type-reading-size);line-height:var(--type-reading-line-height);margin:0 0 16px}.prose ul,.prose ol{padding-left:1.25em}.prose small{color:var(--subtle-foreground)}
