.site-header[data-v-c0ab25c7]{z-index:40;background:var(--bg);border-bottom:1px solid var(--border);position:sticky;top:0}@supports ((-webkit-backdrop-filter:blur(1px)) or (backdrop-filter:blur(1px))){.site-header[data-v-c0ab25c7]{background:color-mix(in srgb, var(--bg) 88%, transparent);-webkit-backdrop-filter:blur(14px)saturate(140%);backdrop-filter:blur(14px)saturate(140%)}}.header-inner[data-v-c0ab25c7]{min-height:var(--header-h);align-items:center;gap:24px;min-width:0;display:flex}.brand[data-v-c0ab25c7]{color:var(--text);flex:0 auto;align-items:center;gap:8px;min-width:0;font-size:16px;font-weight:600;line-height:24px;text-decoration:none;display:inline-flex;overflow:hidden}.brand[data-v-c0ab25c7]:hover{text-decoration:none}.brand-mark[data-v-c0ab25c7]{color:var(--accent);display:inline-flex}.brand-text[data-v-c0ab25c7]{white-space:nowrap;text-overflow:ellipsis;overflow:hidden}.brand-sub[data-v-c0ab25c7]{color:var(--muted);font-weight:500}.nav-links[data-v-c0ab25c7]{flex:auto;gap:4px;min-width:0;display:flex}.nav-link[data-v-c0ab25c7]{border-radius:var(--r-md);min-height:36px;color:var(--muted);transition:background .3s var(--ease), color .3s var(--ease);align-items:center;gap:6px;padding:6px 12px;font-size:14px;font-weight:600;line-height:20px;display:inline-flex}.nav-link[data-v-c0ab25c7]:hover{background:var(--surface-inset);color:var(--text);text-decoration:none}.nav-link.router-link-active[data-v-c0ab25c7]{background:var(--accent-soft);color:var(--accent)}.header-actions[data-v-c0ab25c7]{flex:none;align-items:center;gap:4px;margin-left:auto;display:flex}.icon-btn[data-v-c0ab25c7]{border-radius:var(--r-md);width:36px;height:36px;color:var(--muted);cursor:pointer;transition:background .3s var(--ease), color .3s var(--ease);background:0 0;border:1px solid #0000;justify-content:center;align-items:center;display:inline-flex}.icon-btn[data-v-c0ab25c7]:hover{background:var(--surface-inset);color:var(--text)}.menu-btn[data-v-c0ab25c7]{display:none}.lang-wrap[data-v-c0ab25c7]{position:relative}.lang-btn[data-v-c0ab25c7]{border-radius:var(--r-md);min-height:36px;color:var(--muted);cursor:pointer;transition:background .3s var(--ease), color .3s var(--ease);background:0 0;border:1px solid #0000;align-items:center;gap:6px;padding:0 10px;font-size:14px;font-weight:600;line-height:20px;display:inline-flex}.lang-btn[data-v-c0ab25c7]:hover{background:var(--surface-inset);color:var(--text)}.caret[data-v-c0ab25c7]{border-bottom:1.5px solid;border-right:1.5px solid;width:6px;height:6px;transform:rotate(45deg)translateY(-1px)}.lang-menu[data-v-c0ab25c7]{background:var(--surface);border:1px solid var(--border);border-radius:var(--r-lg);min-width:152px;box-shadow:var(--shadow-md);z-index:50;flex-direction:column;gap:2px;padding:4px;display:flex;position:absolute;top:calc(100% + 8px);right:0}.lang-item[data-v-c0ab25c7]{border-radius:var(--r-sm);color:var(--text);cursor:pointer;text-align:left;background:0 0;border:0;justify-content:space-between;align-items:center;gap:12px;padding:8px 10px;font-size:14px;line-height:20px;display:flex}.lang-item[data-v-c0ab25c7]:hover{background:var(--surface-inset)}.lang-item[aria-checked=true][data-v-c0ab25c7]{color:var(--accent);font-weight:600}.pop-enter-active[data-v-c0ab25c7],.pop-leave-active[data-v-c0ab25c7]{transition:opacity .2s var(--ease), transform .2s var(--ease)}.pop-enter-from[data-v-c0ab25c7],.pop-leave-to[data-v-c0ab25c7]{opacity:0;transform:translateY(-4px)}.burger[data-v-c0ab25c7]{width:18px;height:12px;display:block;position:relative}.burger span[data-v-c0ab25c7]{width:18px;height:2px;transition:transform .5s var(--ease);background:currentColor;border-radius:2px;position:absolute;left:0}.burger span[data-v-c0ab25c7]:first-child{top:0}.burger span[data-v-c0ab25c7]:last-child{top:10px}.burger.open span[data-v-c0ab25c7]:first-child{transform:translateY(5px)rotate(45deg)}.burger.open span[data-v-c0ab25c7]:last-child{transform:translateY(-5px)rotate(-45deg)}.mobile-menu[data-v-c0ab25c7]{z-index:35;padding:calc(var(--header-h) + 32px) var(--gutter) 40px;background:var(--bg);flex-direction:column;gap:4px;display:flex;position:fixed;inset:0}.mobile-link[data-v-c0ab25c7]{color:var(--text);border-bottom:1px solid var(--border);animation:menu-item-in-c0ab25c7 .4s var(--ease) both;align-items:center;gap:12px;padding:16px 0;font-size:20px;font-weight:600;line-height:28px;display:flex}@keyframes menu-item-in-c0ab25c7{0%{opacity:0;transform:translateY(24px)}to{opacity:1;transform:none}}.mobile-link[data-v-c0ab25c7]:hover{color:var(--accent);text-decoration:none}.menu-enter-active[data-v-c0ab25c7],.menu-leave-active[data-v-c0ab25c7]{transition:opacity .3s var(--ease)}.menu-enter-from[data-v-c0ab25c7],.menu-leave-to[data-v-c0ab25c7]{opacity:0}.body-grid[data-v-c0ab25c7]{padding-top:32px}.rail[data-v-c0ab25c7]{top:calc(var(--header-h) + 24px);flex-direction:column;gap:4px;padding-bottom:24px;display:flex;position:sticky}.rail-title[data-v-c0ab25c7]{letter-spacing:.12em;text-transform:uppercase;color:var(--muted);padding:0 12px 8px;font-size:12px;font-weight:600;line-height:16px}.rail-link[data-v-c0ab25c7]{border-radius:var(--r-md);color:var(--text-soft);transition:background .3s var(--ease), color .3s var(--ease);align-items:center;gap:10px;padding:10px 12px;font-size:14px;font-weight:550;line-height:20px;display:flex}.rail-link[data-v-c0ab25c7]:hover{background:var(--surface);color:var(--text);text-decoration:none}.rail-link.router-link-active[data-v-c0ab25c7]{background:var(--surface);color:var(--accent);box-shadow:var(--shadow-sm)}.rail-index[data-v-c0ab25c7]{color:var(--muted);margin-left:auto;font-size:12px;line-height:16px}.rail-note[data-v-c0ab25c7]{border-radius:var(--r-lg);background:var(--surface-2);border:1px solid var(--border);color:var(--muted);margin-top:24px;padding:12px;font-size:12px;line-height:16px}.site-footer[data-v-c0ab25c7]{border-top:1px solid var(--border);background:var(--surface-2);margin-top:48px;padding:40px 0 24px}.footer-inner[data-v-c0ab25c7]{flex-wrap:wrap;justify-content:space-between;gap:24px;display:flex}.footer-brand[data-v-c0ab25c7]{flex-direction:column;gap:4px;max-width:340px;font-size:14px;line-height:20px;display:flex}.footer-links[data-v-c0ab25c7]{flex-wrap:wrap;gap:24px;font-size:14px;line-height:20px;display:flex}.footer-links a[data-v-c0ab25c7]{color:var(--muted)}.footer-links a[data-v-c0ab25c7]:hover{color:var(--text)}.footer-bottom[data-v-c0ab25c7]{border-top:1px solid var(--border);flex-wrap:wrap;justify-content:space-between;gap:16px;margin-top:24px;padding-top:16px;display:flex}@media (max-width:1023px){.rail[data-v-c0ab25c7]{display:none}.body-grid[data-v-c0ab25c7]{padding-top:24px}}@media (max-width:900px){.nav-links[data-v-c0ab25c7]{display:none}.menu-btn[data-v-c0ab25c7]{display:inline-flex}.header-inner[data-v-c0ab25c7]{gap:12px}}@media (min-width:901px){.mobile-menu[data-v-c0ab25c7]{display:none}}.view-enter-active,.view-leave-active{transition:opacity .3s cubic-bezier(.22,1,.36,1),transform .3s cubic-bezier(.22,1,.36,1)}.view-enter-from{opacity:0;transform:translateY(8px)}.view-leave-to{opacity:0}@font-face{font-family:Geist Variable;font-style:normal;font-display:swap;font-weight:100 900;src:url(/assets/geist-cyrillic-ext-wght-normal-DjL33-gN.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:Geist Variable;font-style:normal;font-display:swap;font-weight:100 900;src:url(/assets/geist-cyrillic-wght-normal-BEAKL7Jp.woff2)format("woff2-variations");unicode-range:U+301,U+400-45F,U+490-491,U+4B0-4B1,U+2116}@font-face{font-family:Geist Variable;font-style:normal;font-display:swap;font-weight:100 900;src:url(/assets/geist-vietnamese-wght-normal-6IgcOCM7.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:Geist Variable;font-style:normal;font-display:swap;font-weight:100 900;src:url(/assets/geist-latin-ext-wght-normal-DC-KSUi6.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:Geist Variable;font-style:normal;font-display:swap;font-weight:100 900;src:url(/assets/geist-latin-wght-normal-BgDaEnEv.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:Geist Mono Variable;font-style:normal;font-display:swap;font-weight:100 900;src:url(/assets/geist-mono-cyrillic-ext-wght-normal-X_5orZeX.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:Geist Mono Variable;font-style:normal;font-display:swap;font-weight:100 900;src:url(/assets/geist-mono-cyrillic-wght-normal-DiZS0aHC.woff2)format("woff2-variations");unicode-range:U+301,U+400-45F,U+490-491,U+4B0-4B1,U+2116}@font-face{font-family:Geist Mono Variable;font-style:normal;font-display:swap;font-weight:100 900;src:url(/assets/geist-mono-symbols2-wght-normal-CO5SzqOn.woff2)format("woff2-variations");unicode-range:U+2000-2001,U+2004-2008,U+200A,U+23B8-23BD,U+2500-259F}@font-face{font-family:Geist Mono Variable;font-style:normal;font-display:swap;font-weight:100 900;src:url(/assets/geist-mono-vietnamese-wght-normal-DadHysG0.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:Geist Mono Variable;font-style:normal;font-display:swap;font-weight:100 900;src:url(/assets/geist-mono-latin-ext-wght-normal-Bwz-egvJ.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:Geist Mono Variable;font-style:normal;font-display:swap;font-weight:100 900;src:url(/assets/geist-mono-latin-wght-normal-XN7g48iV.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{--bg:#f4f3ee;--surface:#fff;--surface-2:#fbfaf6;--surface-inset:#efeee7;--text:#000;--text-soft:#2a2f2c;--muted:#666;--border:#e2e1d8;--border-strong:#cbcabc;--accent:#2c6b4f;--accent-hover:#245941;--accent-soft:#e5efe9;--accent-text:#fff;--danger:#a8402a;--danger-soft:#f8e8e3;--warn:#7d5f18;--warn-soft:#f7efd9;--shadow-sm:0 1px 2px #0000000d;--shadow-md:0 12px 32px -24px #00000073;--r-xs:4px;--r-sm:6px;--r-md:8px;--r-lg:12px;--r-xl:16px;--r-2xl:24px;--ease:cubic-bezier(.22, 1, .36, 1);--font-sans:"Geist Variable", "PingFang SC", "Hiragino Sans GB", "Microsoft YaHei", sans-serif;--font-mono:"Geist Mono Variable", ui-monospace, SFMono-Regular, Menlo, monospace;--gutter:24px;--shell:1240px;--rail:232px;--rail-gap:32px;--header-h:64px;--lightningcss-light:initial;--lightningcss-dark: ;color-scheme:light}:root[data-theme=dark]{--bg:#181818;--surface:#1f1f1f;--surface-2:#272727;--surface-inset:#272727;--text:#fff;--text-soft:#d8d8d8;--muted:#9b9b9b;--border:#313131;--border-strong:#3d3d3d;--accent:#6fd3a3;--accent-hover:#8adfb5;--accent-soft:#21302a;--accent-text:#0d1210;--danger:#ef8a76;--danger-soft:#2f211d;--warn:#e0bc6c;--warn-soft:#2b261a;--shadow-sm:0 1px 2px #00000080;--shadow-md:0 16px 40px -28px #000000e6;--lightningcss-light: ;--lightningcss-dark:initial;color-scheme:dark}*,:before,:after{box-sizing:border-box}html{-webkit-text-size-adjust:100%;scroll-behavior:smooth}body{background:var(--bg);min-height:100vh;color:var(--text);font-family:var(--font-sans);-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;margin:0;font-size:16px;line-height:24px}h1,h2,h3,h4,p,figure{text-wrap:pretty;margin:0}h1,h2,h3{text-wrap:balance}a{color:var(--accent);transition:color .3s var(--ease);text-decoration:none}a:hover{text-decoration:underline}button,input,select,textarea{font:inherit;color:inherit}img,canvas{max-width:100%;display:block}::selection{background:var(--accent);color:var(--accent-text)}:focus-visible{outline:2px solid var(--accent);outline-offset:2px}.shell{width:100%;max-width:var(--shell);padding:0 var(--gutter);margin:0 auto}.with-rail{grid-template-columns:var(--rail) minmax(0, 1fr);gap:var(--rail-gap);align-items:start;display:grid}.with-rail>.rail-only{grid-column:1}.with-rail>.main-col{grid-column:2;min-width:0}@media (max-width:1023px){.with-rail{grid-template-columns:minmax(0,1fr)}.with-rail>.rail-only,.with-rail>.main-col{grid-column:1}}.page{flex-direction:column;gap:24px;padding:32px 0 80px;display:flex}.stack{flex-direction:column;gap:16px;display:flex}.stack-sm{flex-direction:column;gap:8px;display:flex}.row{flex-wrap:wrap;align-items:center;gap:8px;display:flex}@media (max-width:640px){:root{--gutter:16px}.page{gap:16px;padding:24px 0 64px}}.eyebrow{letter-spacing:.12em;text-transform:uppercase;color:var(--muted);font-size:12px;font-weight:600;line-height:16px}.page-title{letter-spacing:-.02em;font-size:30px;font-weight:600;line-height:36px}.page-desc{color:var(--muted);max-width:680px;font-size:16px;line-height:24px}.mono{font-family:var(--font-mono);font-variant-ligatures:none}.hint{color:var(--muted);font-size:12px;line-height:16px}.error-text{color:var(--danger);align-items:flex-start;gap:8px;font-size:14px;line-height:20px;display:flex}@media (max-width:640px){.page-title{font-size:24px;line-height:32px}}.card{background:var(--surface);border:1px solid var(--border);border-radius:var(--r-xl);box-shadow:var(--shadow-sm)}.card-pad{padding:24px}@media (max-width:640px){.card-pad{border-radius:var(--r-lg);padding:16px}}.panel-head{justify-content:space-between;align-items:flex-start;gap:16px;margin-bottom:16px;display:flex}.panel-title{letter-spacing:-.01em;font-size:16px;font-weight:600;line-height:24px}.panel-hint{color:var(--muted);font-size:12px;line-height:16px}.divider{background:var(--border);border:0;height:1px;margin:24px 0}.section-head{flex-direction:column;gap:8px;max-width:680px;margin-bottom:24px;display:flex}.section-title{letter-spacing:-.02em;font-size:24px;font-weight:600;line-height:32px}.btn{border-radius:var(--r-md);border:1px solid var(--border-strong);background:var(--surface);min-height:40px;color:var(--text);cursor:pointer;-webkit-user-select:none;user-select:none;white-space:nowrap;transition:background .3s var(--ease), border-color .3s var(--ease), color .3s var(--ease), transform .2s var(--ease);justify-content:center;align-items:center;gap:8px;padding:8px 12px;font-size:16px;font-weight:600;line-height:24px;display:inline-flex}.btn:hover{background:var(--surface-2);border-color:var(--muted)}.btn:active{transform:scale(.98)}.btn:disabled{opacity:.45;cursor:not-allowed;transform:none}.btn-primary{background:var(--accent);border-color:var(--accent);color:var(--accent-text)}.btn-primary:hover{background:var(--accent-hover);border-color:var(--accent-hover)}.btn-ghost{color:var(--muted);background:0 0;border-color:#0000}.btn-ghost:hover{background:var(--surface-inset);color:var(--text);border-color:#0000}.btn-danger-ghost{color:var(--danger);background:0 0;border-color:#0000}.btn-danger-ghost:hover{background:var(--danger-soft);border-color:#0000}.btn-sm{border-radius:var(--r-sm);gap:4px;min-height:32px;padding:4px 8px;font-size:14px;line-height:20px}.btn-block{width:100%}.btn-row{flex-wrap:wrap;gap:8px;display:flex}.field{flex-direction:column;gap:8px;min-width:0;display:flex}.field-label{color:var(--text-soft);justify-content:space-between;align-items:baseline;gap:8px;font-size:14px;font-weight:600;line-height:20px;display:flex}.label-note{font-family:var(--font-mono);color:var(--muted);font-size:12px;font-weight:400;line-height:16px}.input,.select,.textarea{background:var(--surface-2);border:1px solid var(--border-strong);border-radius:var(--r-md);width:100%;min-height:44px;transition:border-color .3s var(--ease), box-shadow .3s var(--ease);padding:8px 12px;font-size:16px;line-height:24px}.input::placeholder,.textarea::placeholder{color:var(--muted);opacity:.8}.input:focus,.select:focus,.textarea:focus{border-color:var(--accent);box-shadow:0 0 0 3px var(--accent-soft);outline:none}.textarea{resize:vertical;min-height:96px;font-family:var(--font-mono);font-size:14px;line-height:20px}.input.mono-input{font-family:var(--font-mono);font-size:18px;line-height:28px}.select{appearance:none;cursor:pointer;background-image:linear-gradient(45deg, transparent 50%, var(--muted) 50%), linear-gradient(135deg, var(--muted) 50%, transparent 50%);background-position:calc(100% - 17px) 19px,calc(100% - 12px) 19px;background-repeat:no-repeat;background-size:5px 5px,5px 5px;padding-right:32px}.grid-2{grid-template-columns:repeat(2,minmax(0,1fr));gap:16px;display:grid}.grid-3{grid-template-columns:repeat(3,minmax(0,1fr));gap:16px;display:grid}@media (max-width:720px){.grid-3{grid-template-columns:repeat(2,minmax(0,1fr))}}@media (max-width:520px){.grid-2,.grid-3{grid-template-columns:minmax(0,1fr)}}.segmented{background:var(--surface-inset);border-radius:var(--r-lg);flex-wrap:wrap;align-self:flex-start;gap:4px;max-width:100%;padding:4px;display:inline-flex}.segmented button{appearance:none;color:var(--muted);border-radius:var(--r-sm);cursor:pointer;min-height:32px;transition:background .3s var(--ease), color .3s var(--ease);background:0 0;border:0;padding:4px 12px;font-size:14px;font-weight:600;line-height:20px}.segmented button:hover{color:var(--text)}.segmented button[aria-pressed=true]{background:var(--surface);color:var(--text);box-shadow:var(--shadow-sm)}.badge{border-radius:var(--r-xs);background:var(--accent-soft);color:var(--accent);white-space:nowrap;align-items:center;gap:4px;padding:2px 8px;font-size:12px;font-weight:600;line-height:16px;display:inline-flex}.badge-neutral{background:var(--surface-inset);color:var(--muted)}.badge-warn{background:var(--warn-soft);color:var(--warn)}.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:100;background:var(--accent);color:var(--accent-text);border-radius:var(--r-md);transition:top .3s var(--ease);padding:8px 16px;font-weight:600;position:absolute;top:-100px;left:16px}.skip-link:focus{top:16px}.reveal{opacity:0;transition:opacity .6s var(--ease), transform .6s var(--ease);transform:translateY(24px)}.reveal.is-visible{opacity:1;transform:none}@media (prefers-reduced-motion:reduce){*,:before,:after{scroll-behavior:auto!important;transition-duration:.001ms!important;animation-duration:.001ms!important}.reveal{opacity:1;transform:none}}
