@font-face{font-family:Geist;font-style:normal;font-weight:400 700;font-display:swap;src:url(/fonts/geist-latin.woff2)format("woff2")}@font-face{font-family:Geist Mono;font-style:normal;font-weight:400 500;font-display:swap;src:url(/fonts/geist-mono-latin.woff2)format("woff2")}:root{--ink-0:#fff;--ink-25:#fcfbf9;--ink-50:#f7f5f2;--ink-100:#efebe6;--ink-200:#e5e0d9;--ink-300:#cfc7bd;--ink-500:#77706a;--ink-600:#58514c;--ink-700:#3e3643;--ink-800:#2a2430;--ink-900:#19151c;--ink-950:#100d12;--amber-50:#fffaf0;--amber-100:#fdf0d3;--amber-200:#fbe0a4;--amber-300:#f8c258;--amber-500:#d99a1e;--amber-700:#a35f0a;--amber-800:#7a4608;--sage-50:#f1f5ef;--sage-200:#cddcc7;--sage-700:#4a6843;--slate-50:#eff3f7;--slate-200:#cad6e4;--slate-700:#435a78;--clay-50:#fbf0eb;--clay-200:#efcdbf;--clay-700:#97492e;--bg:var(--ink-0);--outside:var(--ink-100);--rail:var(--ink-300);--border:var(--ink-200);--input:var(--ink-200);--muted:var(--ink-50);--muted-strong:var(--ink-25);--muted-fg:var(--ink-500);--fg:var(--ink-900);--fg-2:var(--ink-600);--primary:var(--ink-800);--primary-hover:var(--ink-700);--primary-fg:var(--ink-0);--accent:var(--amber-300);--accent-text:var(--amber-700);--accent-soft:var(--amber-100);--accent-subtle:var(--amber-50);--accent-ink:var(--ink-700);--rule-bg:var(--amber-50);--rule-bd:var(--amber-200);--rule-fg:var(--amber-800);--conv-bg:var(--sage-50);--conv-bd:var(--sage-200);--conv-fg:var(--sage-700);--pat-bg:var(--slate-50);--pat-bd:var(--slate-200);--pat-fg:var(--slate-700);--warn-bg:var(--clay-50);--warn-bd:var(--clay-200);--warn-fg:var(--clay-700);--code-bg:var(--ink-25);--stroke:var(--ink-700);--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;--space-24:96px;--gutter:var(--space-8);--gap-inline:var(--space-2);--gap-stack:var(--space-3);--gap-cards:var(--space-3);--pad-card-y:var(--space-4);--pad-card-x:var(--space-5);--pad-box-y:var(--space-3);--pad-box-x:var(--space-4);--space-block:var(--space-4);--space-heading:var(--space-4);--space-section:var(--space-12);--radius:8px;--radius-sm:6px;--radius-lg:12px;--frame:1280px;--top:56px;--sans:"Geist", ui-sans-serif, system-ui, "Segoe UI", sans-serif;--mono:"Geist Mono", ui-monospace, "SFMono-Regular", Consolas, monospace;color-scheme:light}@media (prefers-color-scheme:dark){:root:not([data-theme=light]){--bg:#151217;--outside:#0b090c;--rail:#4a424f;--border:#2c2630;--input:#2c2630;--muted:#1e1a21;--muted-strong:#1a161c;--muted-fg:#a49c94;--fg:#f4f0ea;--fg-2:#cfc8c0;--primary:#f4f0ea;--primary-hover:var(--ink-200);--primary-fg:#19151c;--accent-text:var(--amber-300);--accent-soft:#f8c25829;--accent-subtle:#f8c25814;--rule-bg:#f8c25814;--rule-bd:#f8c25840;--rule-fg:#f6cf80;--conv-bg:#8fb08414;--conv-bd:#8fb08440;--conv-fg:#adc9a3;--pat-bg:#8aa3c414;--pat-bd:#8aa3c440;--pat-fg:#adc0da;--warn-bg:#d0866814;--warn-bd:#d0866840;--warn-fg:#e2a58f;--code-bg:#1a161c;--stroke:#e4dfd8;color-scheme:dark}}:root[data-theme=dark]{--bg:#151217;--outside:#0b090c;--rail:#4a424f;--border:#2c2630;--input:#2c2630;--muted:#1e1a21;--muted-strong:#1a161c;--muted-fg:#a49c94;--fg:#f4f0ea;--fg-2:#cfc8c0;--primary:#f4f0ea;--primary-hover:var(--ink-200);--primary-fg:#19151c;--accent-text:var(--amber-300);--accent-soft:#f8c25829;--accent-subtle:#f8c25814;--rule-bg:#f8c25814;--rule-bd:#f8c25840;--rule-fg:#f6cf80;--conv-bg:#8fb08414;--conv-bd:#8fb08440;--conv-fg:#adc9a3;--pat-bg:#8aa3c414;--pat-bd:#8aa3c440;--pat-fg:#adc0da;--warn-bg:#d0866814;--warn-bd:#d0866840;--warn-fg:#e2a58f;--code-bg:#1a161c;--stroke:#e4dfd8;color-scheme:dark}*,:before,:after{box-sizing:border-box}html{scroll-padding-top:calc(var(--top) + var(--space-4));-webkit-text-size-adjust:100%}body{background:var(--outside);color:var(--fg);font-family:var(--sans);font-feature-settings:"ss01", "cv11";-webkit-font-smoothing:antialiased;margin:0;font-size:15px;line-height:1.65}h1,h2,h3,h4,h5,h6,p,figure{margin:0}h1,h2,h3,h4{text-wrap:balance}p{text-wrap:pretty}a{color:inherit;text-decoration:none}img,svg{display:block}button{font:inherit;color:inherit}code,kbd,pre,.mono{font-family:var(--mono)}::selection{background:var(--accent-soft)}:focus-visible{outline:2px solid var(--accent);outline-offset:2px;border-radius:var(--radius-sm)}a,button,summary,.btn{transition:color .12s,background-color .12s,border-color .12s}.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}.skip-link{left:var(--space-3);top:calc(var(--space-12) * -1);z-index:50;padding:var(--space-2) var(--space-3);background:var(--bg);border:1px solid var(--border);border-radius:var(--radius);position:absolute}.skip-link:focus{top:var(--space-3)}.frame{width:100%;max-width:var(--frame);background:var(--bg);border-left:1px solid var(--rail);border-right:1px solid var(--rail);flex-direction:column;min-height:100vh;margin:0 auto;display:flex}.frame-main{flex-direction:column;flex:1;min-width:0;display:flex}.wrap{padding:0 var(--gutter)}.site-top{z-index:20;height:var(--top);background:var(--bg);border-bottom:1px solid var(--border);position:sticky;top:0}.site-top .wrap{align-items:center;gap:var(--space-8);height:100%;display:flex}.logo{align-items:center;gap:var(--gap-inline);letter-spacing:-.01em;font-size:15px;font-weight:600;display:flex}.logo svg{width:22px;height:22px}.site-nav{gap:var(--space-6);color:var(--muted-fg);font-size:14px;display:flex}.site-nav a{height:var(--top);align-items:center;display:flex;position:relative}.site-nav a:hover{color:var(--fg)}.site-nav a[aria-current=page]{color:var(--fg);font-weight:500}.site-nav a[aria-current=page]:after{content:"";background:var(--accent);height:2px;position:absolute;bottom:-1px;left:0;right:0}.site-end{align-items:center;gap:var(--gap-inline);margin-left:auto;display:flex}.site-menu{display:none;position:relative}.site-menu>summary{list-style:none}.site-menu>summary::-webkit-details-marker{display:none}.site-menu-panel{right:0;top:var(--space-10);min-width:200px;padding:var(--space-2);background:var(--bg);border:1px solid var(--border);border-radius:var(--radius);display:grid;position:absolute}.site-menu-panel a{padding:var(--space-2) var(--space-3);border-radius:var(--radius-sm);font-size:14px}.site-menu-panel a:hover,.site-menu-panel a[aria-current=page]{background:var(--muted)}.site-foot{border-top:1px solid var(--border)}.site-foot .wrap{align-items:center;gap:var(--gap-stack) var(--space-6);min-height:64px;color:var(--muted-fg);flex-wrap:wrap;font-size:13px;display:flex}.site-foot .brand{align-items:center;gap:var(--gap-inline);display:flex}.site-foot .brand svg{width:16px;height:16px}.site-foot .spacer{margin-left:auto}.site-foot a:hover{color:var(--fg)}.icon{flex:none;width:16px;height:16px}.icon-sm{width:14px;height:14px}.btn{justify-content:center;align-items:center;gap:var(--gap-inline);height:40px;padding:0 var(--space-4);border-radius:var(--radius);cursor:pointer;border:1px solid var(--primary);background:var(--primary);color:var(--primary-fg);font:500 14px var(--sans);white-space:nowrap;display:inline-flex}.btn:hover{background:var(--primary-hover);border-color:var(--primary-hover)}.btn-outline{background:var(--bg);color:var(--fg);border-color:var(--border)}.btn-outline:hover{background:var(--muted);border-color:var(--border)}.btn-ghost{color:var(--fg);background:0 0;border-color:#0000}.btn-ghost:hover{background:var(--muted);border-color:#0000}.btn-sm{height:32px;padding:0 var(--space-3);font-size:13px}.btn-icon{width:32px;height:32px;padding:0}.badge{align-items:center;gap:var(--gap-inline);height:22px;padding:0 var(--space-2);border:1px solid var(--border);border-radius:var(--radius-sm);font:500 12px var(--sans);color:var(--muted-fg);white-space:nowrap;font-variant-numeric:tabular-nums;display:inline-flex}.badge-rule{background:var(--rule-bg);border-color:var(--rule-bd);color:var(--rule-fg)}.badge-convention{background:var(--conv-bg);border-color:var(--conv-bd);color:var(--conv-fg)}.badge-pattern{background:var(--pat-bg);border-color:var(--pat-bd);color:var(--pat-fg)}.badge-warn{background:var(--warn-bg);border-color:var(--warn-bd);color:var(--warn-fg)}.badge-rule:before,.badge-convention:before,.badge-pattern:before{content:"";opacity:.75;background:currentColor;border-radius:50%;width:6px;height:6px}.ver{align-items:center;gap:var(--gap-inline);height:22px;padding:0 var(--space-2);border:1px solid var(--rule-bd);background:var(--rule-bg);color:var(--rule-fg);border-radius:var(--radius-sm);font:500 12px var(--mono);font-variant-numeric:tabular-nums;display:inline-flex}.dot{background:var(--accent);width:6px;height:6px;box-shadow:0 0 0 1px var(--accent-ink);border-radius:50%}.kbd{font:500 11px var(--mono);border:1px solid var(--border);padding:0 var(--space-1);color:var(--muted-fg);background:var(--muted);border-radius:4px}.must{color:var(--accent-text);letter-spacing:.02em;font-weight:700}.muted{color:var(--muted-fg)}@media (width<=760px){:root{--gutter:var(--space-4)}.wrap{padding:0 var(--gutter)}.site-nav{display:none}.site-menu{display:block}}.search-trigger[data-astro-cid-ac66eqjo]{align-items:center;gap:var(--gap-inline);width:240px;height:32px;padding:0 var(--space-2);background:var(--muted);border-radius:var(--radius);color:var(--muted-fg);cursor:pointer;border:1px solid #0000;font-size:13px;display:flex}.search-trigger[data-astro-cid-ac66eqjo]:hover{border-color:var(--border)}.search-trigger-label[data-astro-cid-ac66eqjo]{text-overflow:ellipsis;white-space:nowrap;overflow:hidden}.search-trigger[data-astro-cid-ac66eqjo] .kbd[data-astro-cid-ac66eqjo]{margin-left:auto}.search-dialog[data-astro-cid-ac66eqjo]{background:var(--bg);width:min(640px,100vw - 32px);color:var(--fg);border:1px solid var(--border);border-radius:var(--radius-lg);box-shadow:none;margin:12vh auto 0;padding:0}.search-dialog[data-astro-cid-ac66eqjo]::backdrop{background:color-mix(in srgb, var(--outside) 70%, transparent)}.search-bar[data-astro-cid-ac66eqjo]{align-items:center;gap:var(--gap-inline);padding:var(--pad-box-y) var(--pad-box-x);border-bottom:1px solid var(--border);color:var(--muted-fg);display:flex}.search-bar[data-astro-cid-ac66eqjo] input[data-astro-cid-ac66eqjo]{min-width:0;box-shadow:none;color:var(--fg);font-size:15px;font-family:var(--sans);background:0 0;border:0;outline:none;flex:1;padding:0}.search-bar[data-astro-cid-ac66eqjo] input[data-astro-cid-ac66eqjo]:focus,.search-bar[data-astro-cid-ac66eqjo] input[data-astro-cid-ac66eqjo]:focus-visible{box-shadow:none;border:0;outline:none}.search-results[data-astro-cid-ac66eqjo]{max-height:60vh;padding:var(--space-2);overflow-y:auto}.search-dialog .search-hint{padding:var(--space-4) var(--space-3);color:var(--muted-fg);margin:0;font-size:13px}.search-dialog .search-item{display:grid}.search-dialog .search-item+.search-item{border-top:1px solid var(--border)}.search-dialog .search-result{gap:var(--space-1);padding:var(--pad-box-y) var(--pad-box-x);border-radius:var(--radius-sm);color:var(--fg);border-left:2px solid #0000;display:grid}.search-dialog .search-result-title{font-size:14px;font-weight:500;display:block}.search-dialog .search-result-excerpt{color:var(--muted-fg);font-size:13px;display:block}.search-dialog .search-result-excerpt mark{background:var(--accent-soft);color:var(--fg);border-radius:2px;padding:0 1px}.search-dialog .search-sub{padding:var(--pad-box-y) var(--pad-box-x) var(--pad-box-y) var(--space-8);color:var(--muted-fg);border-radius:var(--radius-sm);border-left:2px solid #0000;font-size:13px;display:block}.search-dialog .search-sub:hover{color:var(--fg)}.search-dialog a.is-selected{background:var(--accent-subtle);border-left-color:var(--accent)}@media (width<=760px){.search-trigger[data-astro-cid-ac66eqjo]{justify-content:center;width:32px;padding:0}.search-trigger-label[data-astro-cid-ac66eqjo],.search-trigger[data-astro-cid-ac66eqjo] .kbd[data-astro-cid-ac66eqjo]{display:none}}.theme-btn .theme-icon{display:none}.theme-btn[data-choice=auto] .icon-auto,.theme-btn[data-choice=light] .icon-light,.theme-btn[data-choice=dark] .icon-dark{display:block}:root[data-theme=light] .theme-btn[data-choice=auto] .icon-auto{display:none}:root[data-theme=light] .theme-btn[data-choice=auto] .icon-light{display:block}:root[data-theme=dark] .theme-btn[data-choice=auto] .icon-auto{display:none}:root[data-theme=dark] .theme-btn[data-choice=auto] .icon-dark{display:block}
