@charset "UTF-8";@font-face{font-family:Geist Variable;font-style:normal;font-display:swap;font-weight:100 900;src:url("./media/geist-cyrillic-ext-wght-normal-RO72NYA2.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:Geist Variable;font-style:normal;font-display:swap;font-weight:100 900;src:url("./media/geist-cyrillic-wght-normal-CK2XY27K.woff2") format("woff2-variations");unicode-range:U+0301,U+0400-045F,U+0490-0491,U+04B0-04B1,U+2116}@font-face{font-family:Geist Variable;font-style:normal;font-display:swap;font-weight:100 900;src:url("./media/geist-vietnamese-wght-normal-Y2R7JZKV.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:Geist Variable;font-style:normal;font-display:swap;font-weight:100 900;src:url("./media/geist-latin-ext-wght-normal-XEQ56JUF.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:Geist Variable;font-style:normal;font-display:swap;font-weight:100 900;src:url("./media/geist-latin-wght-normal-T72VVCUW.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:Fraunces Variable;font-style:normal;font-display:swap;font-weight:100 900;src:url("./media/fraunces-vietnamese-opsz-normal-ZVI2WK73.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:Fraunces Variable;font-style:normal;font-display:swap;font-weight:100 900;src:url("./media/fraunces-latin-ext-opsz-normal-KIF4LF64.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:Fraunces Variable;font-style:normal;font-display:swap;font-weight:100 900;src:url("./media/fraunces-latin-opsz-normal-5YJQ66G4.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:Fraunces Variable;font-style:italic;font-display:swap;font-weight:100 900;src:url("./media/fraunces-vietnamese-opsz-italic-EFFT36LB.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:Fraunces Variable;font-style:italic;font-display:swap;font-weight:100 900;src:url("./media/fraunces-latin-ext-opsz-italic-Y2VHKHDT.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:Fraunces Variable;font-style:italic;font-display:swap;font-weight:100 900;src:url("./media/fraunces-latin-opsz-italic-F5UUEVSC.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:JetBrains Mono Variable;font-style:normal;font-display:swap;font-weight:100 800;src:url("./media/jetbrains-mono-cyrillic-ext-wght-normal-BUWC6ZS3.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:JetBrains Mono Variable;font-style:normal;font-display:swap;font-weight:100 800;src:url("./media/jetbrains-mono-cyrillic-wght-normal-ENSFVLK4.woff2") format("woff2-variations");unicode-range:U+0301,U+0400-045F,U+0490-0491,U+04B0-04B1,U+2116}@font-face{font-family:JetBrains Mono Variable;font-style:normal;font-display:swap;font-weight:100 800;src:url("./media/jetbrains-mono-greek-wght-normal-Y3BRZMJV.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:JetBrains Mono Variable;font-style:normal;font-display:swap;font-weight:100 800;src:url("./media/jetbrains-mono-vietnamese-wght-normal-SP6EBKAH.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:JetBrains Mono Variable;font-style:normal;font-display:swap;font-weight:100 800;src:url("./media/jetbrains-mono-latin-ext-wght-normal-TSLVDSQR.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:JetBrains Mono Variable;font-style:normal;font-display:swap;font-weight:100 800;src:url("./media/jetbrains-mono-latin-wght-normal-VBS632QH.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}:root{--font-display: "Fraunces Variable", "Iowan Old Style", Georgia, serif;--font-sans: "Geist Variable", -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, Arial, sans-serif;--font-mono: "JetBrains Mono Variable", ui-monospace, SFMono-Regular, Menlo, Consolas, monospace;--radius-sm: 6px;--radius: 10px;--radius-lg: 14px;--topbar-h: 60px;--sidebar-w: 284px;--content-w: 780px;--bg: #f5f2ea;--surface: #fcfbf7;--surface-2: #efebe1;--surface-3: #e6e1d4;--text: #191814;--text-2: #3a3730;--muted: #6e695d;--border: #e1dbcd;--border-strong: #cbc3b1;--grid-dot: #d9d2c2;--accent: #2b45d4;--accent-soft: #e4e7fa;--accent-text: #2338b5;--accent-2: #e2512a;--accent-2-soft: #fbe6de;--gradient: linear-gradient(120deg, #2b45d4 0%, #5b3fd0 55%, #e2512a 100%);--highlight: #ffe27a;--ok: #1d7a4b;--ok-soft: #e1f1e7;--bad: #c2332b;--bad-soft: #f9e3e0;--warn: #a5630a;--warn-soft: #f8ecd6;--info: #23629f;--info-soft: #e1ecf6;--new: #c2441f;--new-soft: #fbe6de;--code-bg: #1c1b18;--code-bar: #23221e;--code-border: #2e2c27;--code-text: #ebe6da;--code-muted: #8d877a;--inline-code-bg: #ebe5d8;--inline-code-text: #9a3a17;--shadow-sm: 0 1px 2px rgb(60 50 30 / .06);--shadow: 0 10px 30px -10px rgb(60 50 30 / .18);--shadow-lg: 0 30px 80px -20px rgb(40 30 10 / .35);color-scheme:light}@media(prefers-color-scheme:dark){:root:not([data-theme=light]){--bg: #121210;--surface: #1a1916;--surface-2: #22211d;--surface-3: #2c2a25;--text: #eeeae0;--text-2: #cfc9bb;--muted: #979184;--border: #2d2b26;--border-strong: #423f37;--grid-dot: #2e2c27;--accent: #8d9eff;--accent-soft: #1d2142;--accent-text: #a6b3ff;--accent-2: #ff7c55;--accent-2-soft: #33190f;--gradient: linear-gradient(120deg, #8d9eff 0%, #b292ff 55%, #ff7c55 100%);--highlight: #6b5a12;--ok: #5fc78e;--ok-soft: #13261b;--bad: #ff8073;--bad-soft: #2d1513;--warn: #f0b14a;--warn-soft: #2b2010;--info: #7fb3ec;--info-soft: #13202f;--new: #ff936f;--new-soft: #33190f;--code-bg: #0d0d0b;--code-bar: #151513;--code-border: #2a2924;--inline-code-bg: #2a2824;--inline-code-text: #ffaa85;--shadow-sm: 0 1px 2px rgb(0 0 0 / .4);--shadow: 0 10px 30px -10px rgb(0 0 0 / .6);--shadow-lg: 0 30px 80px -20px rgb(0 0 0 / .8);color-scheme:dark}}:root[data-theme=dark]{--bg: #121210;--surface: #1a1916;--surface-2: #22211d;--surface-3: #2c2a25;--text: #eeeae0;--text-2: #cfc9bb;--muted: #979184;--border: #2d2b26;--border-strong: #423f37;--grid-dot: #2e2c27;--accent: #8d9eff;--accent-soft: #1d2142;--accent-text: #a6b3ff;--accent-2: #ff7c55;--accent-2-soft: #33190f;--gradient: linear-gradient(120deg, #8d9eff 0%, #b292ff 55%, #ff7c55 100%);--highlight: #6b5a12;--ok: #5fc78e;--ok-soft: #13261b;--bad: #ff8073;--bad-soft: #2d1513;--warn: #f0b14a;--warn-soft: #2b2010;--info: #7fb3ec;--info-soft: #13202f;--new: #ff936f;--new-soft: #33190f;--code-bg: #0d0d0b;--code-bar: #151513;--code-border: #2a2924;--inline-code-bg: #2a2824;--inline-code-text: #ffaa85;--shadow-sm: 0 1px 2px rgb(0 0 0 / .4);--shadow: 0 10px 30px -10px rgb(0 0 0 / .6);--shadow-lg: 0 30px 80px -20px rgb(0 0 0 / .8);color-scheme:dark}*,*:before,*:after{box-sizing:border-box}html{-webkit-text-size-adjust:100%;scroll-padding-top:calc(var(--topbar-h) + 20px)}body{margin:0;background:var(--bg);color:var(--text);font-family:var(--font-sans);font-size:16px;line-height:1.65;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;text-rendering:optimizeLegibility}::selection{background:var(--highlight);color:var(--text)}a{color:var(--accent-text);text-decoration:none}a:hover{text-decoration:underline;text-decoration-thickness:1px;text-underline-offset:3px}:focus-visible{outline:2px solid var(--accent);outline-offset:2px;border-radius:4px}*{scrollbar-width:thin;scrollbar-color:var(--border-strong) transparent}.prose{color:var(--text-2);font-size:1.02rem;line-height:1.75;counter-reset:section demo}.prose h1,.prose h2,.prose h3,.prose h4{color:var(--text);line-height:1.25}.prose h2{counter-increment:section;font-family:var(--font-display);font-size:1.75rem;font-weight:560;letter-spacing:-.015em;margin:4rem 0 1.1rem}.prose h2:before{content:counter(section,decimal-leading-zero);display:block;background:linear-gradient(var(--border-strong),var(--border-strong)) no-repeat right center/ calc(100% - 2.3rem) 1px;font:600 .72rem/1 var(--font-mono);letter-spacing:.08em;color:var(--accent-text);margin-bottom:.8rem}.prose h3{font-size:1.12rem;font-weight:650;letter-spacing:-.01em;margin:2.2rem 0 .6rem}.prose h4{font-size:.98rem;font-weight:650;margin:1.4rem 0 .4rem}.prose p{margin:0 0 1.05rem}.prose ul,.prose ol{padding-left:1.3rem;margin:0 0 1.1rem}.prose ul{list-style-type:"\2014   "}.prose li{margin:.35rem 0;padding-left:.2rem}.prose ul>li::marker{color:var(--border-strong)}.prose ol>li::marker{font:600 .85em var(--font-mono);color:var(--accent-text)}.prose strong{color:var(--text);font-weight:620}.prose em{font-style:italic}.prose mark{background:linear-gradient(transparent 55%,var(--highlight) 55%);color:inherit;padding:0 .1em}.prose hr{border:0;border-top:1px solid var(--border);margin:2.5rem 0}.prose blockquote{margin:1.4rem 0;padding:.2rem 0 .2rem 1.2rem;border-left:2px solid var(--text);font-family:var(--font-display);font-size:1.15rem;color:var(--text)}.prose>:first-child,.prose>*>:first-child{margin-top:0}code:not(.hljs){font-family:var(--font-mono);font-size:.84em;font-weight:500;background:var(--inline-code-bg);color:var(--inline-code-text);padding:.1em .38em;border-radius:4px;white-space:nowrap}.prose code:not(.hljs),.field-hint code,.small code{white-space:normal;overflow-wrap:anywhere}a code:not(.hljs){color:inherit}kbd{font-family:var(--font-mono);font-size:.74em;font-weight:600;padding:.12em .45em;border:1px solid var(--border-strong);border-bottom-width:2px;border-radius:5px;background:var(--surface);color:var(--text)}.table-wrap{overflow-x:auto;margin:1.2rem 0 1.8rem;border:1px solid var(--border);border-radius:var(--radius);background:var(--surface)}table{width:100%;border-collapse:collapse;font-size:.92rem;line-height:1.55}th,td{text-align:left;vertical-align:top;padding:.7rem .9rem;border-bottom:1px solid var(--border)}th{background:var(--surface-2);color:var(--muted);font:600 .7rem var(--font-mono);text-transform:uppercase;letter-spacing:.08em;white-space:nowrap}tr:last-child td{border-bottom:0}tbody tr:hover td{background:color-mix(in srgb,var(--surface-2) 50%,transparent)}.prose td code:not(.hljs){white-space:normal;overflow-wrap:break-word}.btn{display:inline-flex;align-items:center;justify-content:center;gap:.4rem;font:inherit;font-size:.88rem;font-weight:560;line-height:1.3;padding:.45rem .9rem;border-radius:8px;border:1px solid var(--border-strong);background:var(--surface);color:var(--text);cursor:pointer;box-shadow:var(--shadow-sm);transition:background .15s,border-color .15s,box-shadow .15s,transform .05s}.btn:hover{background:var(--surface-2);border-color:var(--muted);text-decoration:none}.btn:active{transform:translateY(1px)}.btn:disabled{opacity:.45;cursor:not-allowed}.btn-primary{background:var(--accent);border-color:var(--accent);color:#fff}.btn-primary:hover{background:var(--accent);border-color:var(--accent);filter:brightness(1.1)}:root[data-theme=dark] .btn-primary{color:#0d0f24}@media(prefers-color-scheme:dark){:root:not([data-theme=light]) .btn-primary{color:#0d0f24}}.btn-sm{font-size:.78rem;padding:.26rem .62rem;border-radius:6px}.input,select.input,textarea.input{font:inherit;font-size:.92rem;padding:.48rem .72rem;border-radius:8px;border:1px solid var(--border-strong);background:var(--surface);color:var(--text);min-width:0;transition:border-color .15s,box-shadow .15s}.input::placeholder{color:var(--muted);opacity:.8}.input:focus{outline:none;border-color:var(--accent);box-shadow:0 0 0 3px color-mix(in srgb,var(--accent) 22%,transparent)}.input.is-invalid{border-color:var(--bad)}.input.is-invalid:focus{box-shadow:0 0 0 3px color-mix(in srgb,var(--bad) 20%,transparent)}input[type=checkbox],input[type=radio],input[type=range]{accent-color:var(--accent)}.field{display:flex;flex-direction:column;gap:.3rem;margin-bottom:.95rem}.field>label{font-size:.84rem;font-weight:600;color:var(--text)}.field-error{font-size:.8rem;color:var(--bad)}.field-hint{font-size:.8rem;color:var(--muted)}.row{display:flex;flex-wrap:wrap;gap:.6rem;align-items:center}.stack{display:flex;flex-direction:column;gap:.6rem}.muted{color:var(--muted)}.small{font-size:.85rem}.mono{font-family:var(--font-mono);font-size:.84rem}.pill{display:inline-block;font:600 .7rem/1.5 var(--font-mono);letter-spacing:.02em;padding:.08rem .5rem;border-radius:999px;background:var(--surface-3);color:var(--text-2)}.pill.ok{background:var(--ok-soft);color:var(--ok)}.pill.bad{background:var(--bad-soft);color:var(--bad)}.pill.warn{background:var(--warn-soft);color:var(--warn)}.pill.info{background:var(--info-soft);color:var(--info)}.log{font-family:var(--font-mono);font-size:.78rem;line-height:1.6;background:var(--surface-2);border:1px solid var(--border);border-radius:8px;padding:.6rem .8rem;max-height:200px;overflow:auto;margin:0;list-style:none}.log li{margin:.1rem 0}.hljs{color:var(--code-text);background:transparent}.hljs-comment,.hljs-quote{color:var(--code-muted);font-style:italic}.hljs-keyword,.hljs-selector-tag,.hljs-literal,.hljs-ng-block{color:#9fb0ff}.hljs-built_in,.hljs-type,.hljs-class .hljs-title,.hljs-title.class_{color:#f2c879}.hljs-title,.hljs-title.function_,.hljs-section{color:#83d6c4}.hljs-string,.hljs-regexp,.hljs-template-tag{color:#b9d98a}.hljs-number,.hljs-symbol,.hljs-bullet{color:#ffa778}.hljs-attr,.hljs-attribute,.hljs-property{color:#e9b8ff}.hljs-name,.hljs-tag{color:#ff9a7a}.hljs-variable,.hljs-template-variable,.hljs-ng-interp{color:#7fd3ea}.hljs-meta,.hljs-decorator{color:#ffcf6e}.hljs-params,.hljs-subst{color:var(--code-text)}.hljs-deletion{color:#ff9a7a}.hljs-addition{color:#b9d98a}@media(prefers-reduced-motion:reduce){*,*:before,*:after{animation-duration:.001ms!important;transition-duration:.001ms!important;scroll-behavior:auto!important}}html:has(dialog.palette[open]){overflow:hidden}.btn-ink{background:var(--text);border-color:var(--text);color:var(--bg)}.btn-ink:hover{background:var(--text);border-color:var(--text);opacity:.88}.btn-lg{font-size:.98rem;padding:.7rem 1.2rem;border-radius:10px}.topo-map{background:var(--accent);-webkit-mask:url(/topo.svg) center/100% 100% no-repeat;mask:url(/topo.svg) center/100% 100% no-repeat}.ver{flex-shrink:0;font:600 .62rem/1.5 var(--font-mono);color:var(--accent-text);border:1px solid color-mix(in srgb,var(--accent) 35%,transparent);border-radius:4px;padding:0 .25rem}.ver.v22{color:var(--accent-2);border-color:color-mix(in srgb,var(--accent-2) 40%,transparent)}@media(max-width:640px){.input,select.input,textarea.input{font-size:16px}th{font-size:.74rem}.prose th code:not(.hljs),th code{font-size:.95em}app-demo table{display:block;max-width:100%;overflow-x:auto}app-demo th,app-demo td{padding:.55rem .6rem}}@media(pointer:coarse){.btn{min-height:40px}.btn-sm{min-height:34px;padding:.3rem .75rem}}
