:root{--font-ui:system-ui, -apple-system, "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif;--font-mono:ui-monospace, "SF Mono", "Cascadia Code", Menlo, Consolas, monospace;--fs-xs:12px;--fs-sm:14px;--fs-md:16px;--fs-lg:20px;--fs-xl:28px;--fs-2xl:clamp(32px, 26px + 2.4vw, 44px);--fw-normal:400;--fw-bold:600;--bg:#fff;--surface:#f7f7f9;--surface-2:#eeeef2;--border:#e2e2e8;--text:#1d1d22;--text-muted:#5d5d6b;--accent:#4f46e5;--accent-soft:#c7c4fb;--accent-contrast:#fff;--selection:#dcdafc;--code-bg:#f4f4f7;--danger:#dc2626;--success:#16a34a;--warning:#b45309;--hl-keyword:#cf222e;--hl-string:#0a3069;--hl-number:#0550ae;--hl-comment:#656d76;--hl-function:#8250df;--hl-type:#953800;--alert-note:#0969da;--alert-tip:#1a7f37;--alert-important:#8250df;--alert-warning:#9a6700;--alert-caution:#cf222e;--lightningcss-light:initial;--lightningcss-dark: ;color-scheme:light;--text-faint:var(--text-muted);--md-heading:var(--text);--md-link:var(--accent);--md-code:var(--text);--md-mark:var(--text-muted);--quote-border:var(--accent-soft);--active-line:color-mix(in srgb, var(--accent) 6%, transparent);--match:#facc1559;--hl-attr:var(--hl-number);--hl-tag:var(--hl-type)}:root[data-theme=dark]{--bg:#16161b;--surface:#1d1d24;--surface-2:#26262f;--border:#30303b;--text:#e6e6ec;--text-muted:#a3a3b3;--accent:#8b85ff;--accent-soft:#3f3a8c;--accent-contrast:#0f0f14;--selection:#36347a;--code-bg:#1f1f27;--danger:#f87171;--success:#4ade80;--warning:#fbbf24;--hl-keyword:#ff7b72;--hl-string:#a5d6ff;--hl-number:#79c0ff;--hl-comment:#8b949e;--hl-function:#d2a8ff;--hl-type:#ffa657;--alert-note:#4493f8;--alert-tip:#3fb950;--alert-important:#ab7df8;--alert-warning:#d29922;--alert-caution:#f85149;--lightningcss-light: ;--lightningcss-dark:initial;color-scheme:dark}@media (prefers-color-scheme:dark){:root:not([data-theme]){--bg:#16161b;--surface:#1d1d24;--surface-2:#26262f;--border:#30303b;--text:#e6e6ec;--text-muted:#a3a3b3;--accent:#8b85ff;--accent-soft:#3f3a8c;--accent-contrast:#0f0f14;--selection:#36347a;--code-bg:#1f1f27;--danger:#f87171;--success:#4ade80;--warning:#fbbf24;--hl-keyword:#ff7b72;--hl-string:#a5d6ff;--hl-number:#79c0ff;--hl-comment:#8b949e;--hl-function:#d2a8ff;--hl-type:#ffa657;--alert-note:#4493f8;--alert-tip:#3fb950;--alert-important:#ab7df8;--alert-warning:#d29922;--alert-caution:#f85149;--lightningcss-light: ;--lightningcss-dark:initial;color-scheme:dark}}:root[data-theme=sepia]{--bg:#f6efe0;--surface:#efe5d0;--surface-2:#e6d9bf;--border:#dccdaf;--text:#3b2f22;--text-muted:#6b5a45;--accent:#843f10;--accent-soft:#e8c9a8;--accent-contrast:#fff;--selection:#ecd3b4;--code-bg:#efe5d0;--danger:#b42318;--success:#3f6f24;--warning:#8a5a00;--hl-keyword:#a3301f;--hl-string:#4a5d23;--hl-number:#1f5c7a;--hl-comment:#7a6a55;--hl-function:#6e3f8f;--hl-type:#8a4b0f;--alert-note:#1f5c7a;--alert-tip:#3f6f24;--alert-important:#6e3f8f;--alert-warning:#8a5a00;--alert-caution:#b42318;--lightningcss-light:initial;--lightningcss-dark: ;color-scheme:light}:root[data-theme=contrast]{--bg:#000;--surface:#0d0d0d;--surface-2:#1f1f1f;--border:#fff;--text:#fff;--text-muted:#e0e0e0;--accent:#ffd400;--accent-soft:#5c4d00;--accent-contrast:#000;--selection:#5c4d00;--code-bg:#111;--danger:#ff6b6b;--success:#5cff8a;--warning:#ffd400;--hl-keyword:#ff9e9e;--hl-string:#9ee2ff;--hl-number:#ffd400;--hl-comment:#cfcfcf;--hl-function:#e3b8ff;--hl-type:#ffc27a;--alert-note:#9ee2ff;--alert-tip:#5cff8a;--alert-important:#e3b8ff;--alert-warning:#ffd400;--alert-caution:#ff6b6b;--lightningcss-light: ;--lightningcss-dark:initial;color-scheme:dark}.markdown-body{font-family:var(--font-ui);font-size:var(--fs-md);color:var(--text);overflow-wrap:break-word;contain:paint;line-height:1.6;overflow:auto hidden}.markdown-body>:first-child{margin-top:0}.markdown-body>:last-child{margin-bottom:0}.markdown-body h1,.markdown-body h2,.markdown-body h3,.markdown-body h4,.markdown-body h5,.markdown-body h6{color:var(--md-heading);line-height:1.25;font-weight:var(--fw-bold);margin:1.6em 0 .6em;scroll-margin-top:16px}.markdown-body h1{font-size:var(--fs-xl);border-bottom:1px solid var(--border);padding-bottom:.3em}.markdown-body h2{font-size:var(--fs-lg);border-bottom:1px solid var(--border);padding-bottom:.25em}.markdown-body h3,.markdown-body h4{font-size:var(--fs-md)}.markdown-body h5,.markdown-body h6{font-size:var(--fs-md);color:var(--text-muted)}.markdown-body p,.markdown-body ul,.markdown-body ol,.markdown-body blockquote,.markdown-body .table-wrap,.markdown-body pre,.markdown-body dl,.markdown-body .katex-display{margin:0 0 1em}.markdown-body a{color:var(--md-link);text-underline-offset:2px;text-decoration:underline;text-decoration-thickness:1px}.markdown-body a:hover{text-decoration-thickness:2px}.markdown-body strong{font-weight:var(--fw-bold)}.markdown-body ul,.markdown-body ol{padding-left:1.6em}.markdown-body li+li,.markdown-body li>ul,.markdown-body li>ol{margin-top:.25em}.markdown-body li>p{margin:.25em 0}.markdown-body .task-list-item{list-style:none}.markdown-body .task-list-item-checkbox{vertical-align:middle;accent-color:var(--accent);cursor:pointer;width:1em;height:1em;margin:0 .5em 0 -1.4em}.markdown-body .task-list-item.enabled label{cursor:pointer}.markdown-body .task-list-item-checkbox:disabled{cursor:default}.markdown-body blockquote{color:var(--text-muted);border-left:4px solid var(--quote-border);background:color-mix(in srgb, var(--quote-border) 12%, transparent);border-radius:0 6px 6px 0;padding:.2em 1em}.markdown-body blockquote>:last-child{margin-bottom:0}.markdown-body hr{background:var(--border);border:0;height:1px;margin:2em 0}.markdown-body img{border-radius:6px;max-width:100%;height:auto}.markdown-body code{font-family:var(--font-mono);background:var(--code-bg);color:var(--md-code);border-radius:5px;padding:.15em .4em;font-size:.9em}.markdown-body pre{font-family:var(--font-mono);background:var(--code-bg);border:1px solid var(--border);border-radius:8px;padding:14px 16px;font-size:.9em;line-height:1.55;position:relative;overflow-x:auto}.markdown-body pre code{color:var(--text);background:0 0;border-radius:0;padding:0;font-size:1em}.markdown-body pre[data-lang]:after{content:attr(data-lang);font-size:var(--fs-xs);color:var(--text-faint);font-family:var(--font-ui);text-transform:lowercase;position:absolute;top:6px;right:10px}.markdown-body .table-wrap{overflow-x:auto}.markdown-body table{border-collapse:collapse}.markdown-body th,.markdown-body td{border:1px solid var(--border);padding:6px 13px}.markdown-body th{background:var(--surface);font-weight:var(--fw-bold)}.markdown-body tr:nth-child(2n) td{background:color-mix(in srgb, var(--surface) 55%, transparent)}.markdown-body kbd{font-family:var(--font-mono);border:1px solid var(--border);background:var(--surface);border-bottom-width:2px;border-radius:5px;padding:.1em .45em;font-size:.9em}.markdown-body mark{background:var(--match);color:inherit;border-radius:3px;padding:0 2px}.markdown-body .markdown-alert{--alert:var(--alert-note);border-left:4px solid var(--alert);background:color-mix(in srgb, var(--alert) 8%, transparent);border-radius:0 6px 6px 0;margin:0 0 1em;padding:.5em 1em}.markdown-body .markdown-alert>:last-child{margin-bottom:0}.markdown-body .markdown-alert-tip{--alert:var(--alert-tip)}.markdown-body .markdown-alert-important{--alert:var(--alert-important)}.markdown-body .markdown-alert-warning{--alert:var(--alert-warning)}.markdown-body .markdown-alert-caution{--alert:var(--alert-caution)}.markdown-body .markdown-alert-title{font-weight:var(--fw-bold);color:var(--alert);align-items:center;gap:.45em;margin:0 0 .35em;display:flex}.markdown-body .markdown-alert-title:before{content:"i";width:1.15em;height:1.15em;font-size:.9em;font-weight:var(--fw-bold);border:1.5px solid;border-radius:50%;place-items:center;line-height:1;display:inline-grid}.markdown-body .markdown-alert-tip .markdown-alert-title:before{content:"✓"}.markdown-body .markdown-alert-important .markdown-alert-title:before{content:"★";border-radius:4px}.markdown-body .markdown-alert-warning .markdown-alert-title:before{content:"!"}.markdown-body .markdown-alert-caution .markdown-alert-title:before{content:"!";border-radius:4px}.markdown-body .footnotes{color:var(--text-muted);font-size:.9em}.markdown-body .katex-display{padding:4px 0;overflow:auto hidden}.markdown-body .mermaid-block{text-align:center;margin:0 0 1em;overflow-x:auto}.markdown-body .mermaid-block svg{max-width:100%;height:auto}.markdown-body .mermaid-block:not(.rendered) .mermaid-src{text-align:left}.markdown-body .mermaid-block .mermaid-error{text-align:left;color:var(--danger);font-size:var(--fs-xs);white-space:pre-wrap;background:0 0;border:0;margin:0 0 6px;padding:0}.markdown-body details{border:1px solid var(--border);border-radius:8px;margin:0 0 1em;padding:8px 12px}.markdown-body summary{cursor:pointer;font-weight:var(--fw-bold)}.markdown-body details.front-matter{font-size:var(--fs-sm);color:var(--text-muted);padding:4px 12px}.markdown-body .front-matter summary{font-weight:var(--fw-normal)}.markdown-body .front-matter pre{font-size:var(--fs-xs);white-space:pre-wrap;background:0 0;border:0;margin:6px 0 4px;padding:0}@media print{.markdown-body{contain:none;overflow:visible}.markdown-body .table-wrap{overflow:visible}.markdown-body pre{white-space:pre-wrap}.markdown-body h1,.markdown-body h2,.markdown-body h3,.markdown-body h4,.markdown-body h5,.markdown-body h6{break-after:avoid}.markdown-body pre,.markdown-body blockquote,.markdown-body .markdown-alert,.markdown-body tr,.markdown-body img,.markdown-body .mermaid-block,.markdown-body .katex-display{break-inside:avoid}}.hljs-keyword,.hljs-selector-tag,.hljs-built_in,.hljs-doctag,.hljs-meta .hljs-keyword{color:var(--hl-keyword)}.hljs-string,.hljs-regexp,.hljs-addition,.hljs-template-string{color:var(--hl-string)}.hljs-number,.hljs-literal,.hljs-symbol,.hljs-bullet{color:var(--hl-number)}.hljs-comment,.hljs-quote{color:var(--hl-comment);font-style:italic}.hljs-title,.hljs-title.function_,.hljs-section{color:var(--hl-function)}.hljs-type,.hljs-title.class_,.hljs-class .hljs-title{color:var(--hl-type)}.hljs-attr,.hljs-attribute,.hljs-variable,.hljs-property,.hljs-params{color:var(--hl-attr)}.hljs-name,.hljs-selector-id,.hljs-selector-class,.hljs-tag{color:var(--hl-tag)}.hljs-deletion{color:var(--danger)}.hljs-emphasis{font-style:italic}.hljs-strong{font-weight:var(--fw-bold)}.hljs-meta{color:var(--hl-comment)}*,:before,:after{box-sizing:border-box}html{-webkit-text-size-adjust:100%;scroll-padding-top:16px}body{background:var(--bg);color:var(--text);font-family:var(--font-ui);font-size:var(--fs-md);font-weight:var(--fw-normal);margin:0;line-height:1.6}img{max-width:100%;height:auto}a{color:var(--accent);text-underline-offset:2px}a:hover{text-decoration-thickness:2px}:focus-visible{outline:3px solid var(--accent);outline-offset:2px;border-radius:4px}h1,h2,h3{color:var(--text);font-weight:var(--fw-bold);line-height:1.25}h1{font-size:var(--fs-2xl);text-wrap:balance;margin:0 0 .4em}h2{font-size:var(--fs-xl);margin:0 0 .6em}h3{font-size:var(--fs-lg);margin:0 0 .4em}p{margin:0 0 1em}code,kbd,pre{font-family:var(--font-mono)}.skip-link{z-index:10;background:var(--accent);color:var(--accent-contrast);font-weight:var(--fw-bold);border-radius:8px;padding:10px 16px;text-decoration:none;position:absolute;top:-60px;left:12px}.skip-link:focus{top:12px}.container{width:100%;max-width:1120px;margin:0 auto;padding:0 16px}@media (width>=640px){.container{padding:0 24px}}.narrow{max-width:780px}.site-header{border-bottom:1px solid var(--border);background:var(--bg)}.site-header .container{justify-content:space-between;align-items:center;gap:12px;min-height:64px;display:flex}.brand{font-weight:var(--fw-bold);font-size:var(--fs-lg);color:var(--text);flex-shrink:0;align-items:center;gap:10px;text-decoration:none;display:inline-flex}.brand img{width:32px;height:32px}.site-nav ul{align-items:center;gap:4px;margin:0;padding:0;list-style:none;display:flex}.site-nav a{white-space:nowrap;min-height:44px;color:var(--text);border-radius:8px;align-items:center;padding:0 12px;text-decoration:none;display:inline-flex}.site-nav a:hover{background:var(--surface-2)}.site-nav a[aria-current=page]{color:var(--accent)}.site-nav .nav-cta{background:var(--accent);color:var(--accent-contrast);font-weight:var(--fw-bold)}.site-nav .nav-cta:hover{background:var(--accent);filter:brightness(1.08)}@media (width<=479px){.site-nav a{padding:0 10px}}@media (width<=339px){.site-nav .hide-xs{display:none}}.btn{min-height:48px;font-weight:var(--fw-bold);font-size:var(--fs-md);border:1px solid #0000;border-radius:10px;justify-content:center;align-items:center;padding:0 24px;text-decoration:none;display:inline-flex}.btn-primary{background:var(--accent);color:var(--accent-contrast)}.btn-primary:hover{filter:brightness(1.08)}.btn-secondary{background:var(--bg);color:var(--text);border-color:var(--border)}.btn-secondary:hover{background:var(--surface)}.actions{flex-wrap:wrap;justify-content:center;gap:12px;display:flex}.hero{background:radial-gradient(800px 360px at 50% -80px, var(--accent-soft), transparent 70%);text-align:center;padding:48px 0 32px}@media (width>=900px){.hero{padding:72px 0 48px}}.hero h1{max-width:22ch;margin:0 auto .3em}.hero .tagline{font-size:var(--fs-lg);color:var(--text-muted);margin:0 auto 1.4em}.shot{border:1px solid var(--border);background:var(--surface);border-radius:14px;max-width:1080px;margin:40px auto 0;overflow:hidden}.shot img{width:100%;display:block}.section{padding:48px 0}@media (width>=900px){.section{padding:64px 0}}.section.alt{background:var(--surface);border-block:1px solid var(--border)}.lead{font-size:var(--fs-lg)}.intro{max-width:780px;margin:0 auto}.intro p:last-child{margin:0}.grid{grid-template-columns:1fr;gap:16px;margin:0;padding:0;list-style:none;display:grid}@media (width>=640px){.grid{grid-template-columns:repeat(2,1fr)}}@media (width>=960px){.grid{grid-template-columns:repeat(3,1fr)}}.card{background:var(--bg);border:1px solid var(--border);border-radius:12px;padding:20px}.card h3{font-size:var(--fs-md);margin:0 0 .25em}.card p{color:var(--text-muted);margin:0}@media (width<=639px){.card{grid-template-columns:40px 1fr;column-gap:14px;padding:16px;display:grid}.card .icon{grid-row:span 2;margin:0}}.icon{background:var(--accent-soft);width:40px;height:40px;color:var(--text);border-radius:10px;place-items:center;margin-bottom:12px;display:inline-grid}.icon svg{fill:none;stroke:currentColor;stroke-width:2px;stroke-linecap:round;stroke-linejoin:round;width:22px;height:22px}.faq{max-width:820px}.faq details{border:1px solid var(--border);background:var(--bg);border-radius:12px;margin-bottom:10px}.faq summary{cursor:pointer;min-height:48px;padding:12px 48px 12px 20px;list-style:none;position:relative}.faq summary::-webkit-details-marker{display:none}.faq summary:after{content:"+";font-size:var(--fs-lg);color:var(--text-muted);position:absolute;top:50%;right:20px;transform:translateY(-50%)}.faq details[open] summary:after{content:"−"}.faq summary h3{font-size:var(--fs-md);margin:0;display:inline}.faq .answer{color:var(--text-muted);padding:0 20px 16px}.faq .answer p{margin:0}.site-footer{border-top:1px solid var(--border);color:var(--text-muted);padding:24px 0 32px}.site-footer .container{flex-wrap:wrap;justify-content:space-between;align-items:center;gap:8px 24px;display:flex}.site-footer ul{flex-wrap:wrap;gap:4px 8px;margin:0;padding:0;list-style:none;display:flex}.site-footer a{min-height:44px;color:var(--text-muted);align-items:center;padding:0 8px;display:inline-flex}.site-footer a:hover{color:var(--text)}.site-footer p{margin:0}.page-head{padding:32px 0 8px}.page-head p{color:var(--text-muted);font-size:var(--fs-lg)}.prose{padding-bottom:48px}.prose h2{margin-top:1.6em}.prose h3{margin-top:1.4em}.prose ul,.prose ol{padding-left:1.3em}.prose li+li{margin-top:.35em}:where(.prose) :not(pre)>code{font-size:var(--fs-sm);background:var(--surface-2);border-radius:5px;padding:.1em .35em}.prose>pre,.prose section>pre{font-size:var(--fs-sm);background:var(--surface);border:1px solid var(--border);border-radius:10px;margin:0 0 1em;padding:12px 14px;line-height:1.6;overflow-x:auto}.prose .table-wrap{margin:0 0 1em;overflow-x:auto}.prose .table-wrap table{border-collapse:collapse;width:100%;font-size:var(--fs-sm)}.prose .table-wrap th,.prose .table-wrap td{border:1px solid var(--border);text-align:left;vertical-align:top;padding:8px 12px}.prose .table-wrap th{background:var(--surface)}.crumbs{font-size:var(--fs-sm);color:var(--text-muted);padding-top:20px}.crumbs ol{flex-wrap:wrap;gap:4px;margin:0;padding:0;list-style:none;display:flex}.crumbs li+li:before{content:"›";margin-right:4px}.crumbs a{color:var(--text-muted)}.try{border:1px solid var(--border);background:var(--surface);border-radius:12px;margin:32px 0;padding:16px 20px}.try p{margin:0}.related{margin-top:32px}.related h2{font-size:var(--fs-lg)}.hub{gap:12px;margin:0;padding:0;list-style:none;display:grid}.hub li{border:1px solid var(--border);border-radius:12px;padding:16px 20px}.hub a{font-weight:var(--fw-bold);font-size:var(--fs-lg);text-decoration:none}.hub a:hover{text-decoration:underline}.hub p{color:var(--text-muted);margin:4px 0 0}.toc{background:var(--surface);border:1px solid var(--border);border-radius:12px;margin:16px 0 32px;padding:16px 20px}.toc h2{font-size:var(--fs-sm);text-transform:uppercase;letter-spacing:.06em;color:var(--text-muted);margin:0 0 8px}.toc ol{columns:2 150px;column-gap:24px;margin:0;padding:0;list-style:none}.toc a{min-height:32px;padding:6px 0;display:block}.ex{border-top:1px solid var(--border);margin-top:28px;padding-top:28px;scroll-margin-top:12px}.ex h2{margin-top:0}.ex>p{color:var(--text-muted)}.pair{grid-template-columns:minmax(0,1fr);gap:12px;margin:12px 0 16px;display:grid}@media (width>=760px){.pair{grid-template-columns:minmax(0,1fr) minmax(0,1fr)}}.pair figure{border:1px solid var(--border);background:var(--bg);border-radius:10px;flex-direction:column;min-width:0;margin:0;display:flex;overflow:hidden}.pair figcaption{min-height:36px;font-size:var(--fs-xs);font-weight:var(--fw-bold);text-transform:uppercase;letter-spacing:.06em;color:var(--text-muted);background:var(--surface);border-bottom:1px solid var(--border);justify-content:space-between;align-items:center;gap:8px;padding:4px 6px 4px 12px;display:flex}.pair pre{font-size:var(--fs-sm);background:var(--surface);color:var(--text);flex:1;margin:0;padding:12px 14px;line-height:1.6;overflow-x:auto}.pair .markdown-body{padding:12px 16px}.copy{font:inherit;text-transform:none;letter-spacing:0;font-weight:var(--fw-normal);font-size:var(--fs-sm);color:var(--text);background:var(--bg);border:1px solid var(--border);cursor:pointer;border-radius:6px;min-height:30px;padding:0 10px}.copy:hover{background:var(--surface-2)}.tip{color:var(--text-muted)}.markdown-body .md-h{color:var(--text);font-weight:var(--fw-bold);margin:.6em 0 .4em;line-height:1.25}.markdown-body .md-h:first-child{margin-top:0}.markdown-body .md-h1{font-size:var(--fs-xl);border-bottom:1px solid var(--border);padding-bottom:.3em}.markdown-body .md-h2{font-size:var(--fs-lg);border-bottom:1px solid var(--border);padding-bottom:.25em}.markdown-body .md-h3,.markdown-body .md-h4{font-size:var(--fs-md)}.markdown-body math{font-size:1.1em}.markdown-body math[display=block]{margin:.5em 0}.markdown-body .footnotes-sep{margin-top:1em}.mock-diagram{flex-wrap:wrap;justify-content:center;align-items:center;gap:8px;padding:8px 0;display:flex}.mock-diagram span{border:1.5px solid var(--accent);background:var(--accent-soft);color:var(--text);font-size:var(--fs-sm);border-radius:6px;padding:6px 14px}.mock-diagram i{color:var(--text-muted);font-style:normal}.notfound{text-align:center;padding-block:72px}.big-code{font-size:var(--fs-2xl);font-weight:var(--fw-bold);color:var(--accent);margin:0;line-height:1}@media (prefers-reduced-motion:no-preference){html{scroll-behavior:smooth}}.share-page{max-width:860px;padding-top:48px;padding-bottom:48px}.share-foot{font-size:var(--fs-sm);margin-top:32px}
