:root{color-scheme:light;--bg: #F6F3ED;--bg-subtle: #EFEBE3;--surface: #FBFAF7;--surface-raised: #FFFFFF;--surface-hover: #F1EDE6;--code-bg: #F1EDE5;--selection: #EBD3C3;--overlay: rgba(33, 29, 24, .32);--line: #E2DCD1;--line-strong: #CFC7B9;--line-control: #8F8679;--rule: #211D18;--text: #211D18;--text-2: #514A41;--text-3: #6B6358;--text-disabled: #A79F93;--brand: #A94C24;--brand-hover: #983F1D;--brand-active: #8F3E1C;--brand-soft: #F3E6DC;--brand-faint: #F8EFE8;--link: #A94C24;--brand-solid: #A94C24;--brand-solid-hover: #983F1D;--brand-solid-active: #8F3E1C;--on-brand: #FFFFFF;--success: #3D6A34;--success-soft: #E5ECDD;--warning: #875C10;--warning-soft: #F2E8D2;--danger: #A3292F;--danger-soft: #F5E1DF;--danger-solid: #A3292F;--danger-solid-hover: #8E2329;--danger-solid-active: #7F1F25;--on-danger: #FFFFFF;--on-status: #FFFFFF;--info: #3D5B71;--info-soft: #E1E8ED;--shadow-pop: 0 1px 2px rgba(33, 29, 24, .06), 0 6px 20px -6px rgba(33, 29, 24, .18);--shadow-modal: 0 2px 4px rgba(33, 29, 24, .06), 0 16px 40px -12px rgba(33, 29, 24, .28);--brand-mix-3: #C28063;--brand-mix-5: #D2A38E;--brand-mix-7: #E2C6B8;--brand-mix-8: #EBD7CD;--success-mix-3: #76956E;--success-mix-5: #9CB296;--success-mix-7: #C2CFBC;--success-mix-8: #D5DDD0;--warning-mix-3: #AA8B55;--warning-mix-5: #C1AB84;--warning-mix-7: #D8CBB2;--warning-mix-8: #E4DAC9;--danger-mix-3: #BD686B;--danger-mix-5: #CF9293;--danger-mix-7: #E1BBBB;--danger-mix-8: #E9D0CF;--info-mix-3: #969088;--info-mix-5: #B3AEA8;--success-deep: #375B2E;--warning-deep: #734F12;--danger-deep: #89272A;--brand-halo: rgba(169, 76, 36, .18);--danger-halo: rgba(163, 41, 47, .18);--brand-line: rgba(169, 76, 36, .4);--warning-line: rgba(135, 92, 16, .4);--danger-line: rgba(163, 41, 47, .4);--link-underline: rgba(169, 76, 36, .4);--focus-color: #A94C24;--chart-area: rgba(81, 74, 65, .07);--mask: rgba(246, 243, 237, .8);--mask-light: rgba(246, 243, 237, .3);--callout-tip-bg: #F0F1EB;--callout-tip-line: #BAC1AB;--callout-info-bg: #F0F0EF;--callout-info-line: #BABDBA;--callout-warning-bg: #F4F1E9;--callout-warning-line: #CCBDA3;--callout-danger-bg: #F6EDEB;--callout-danger-line: #D3B1AA;--callout-note-bg: #F2F1ED;--callout-note-line: #C5BFB4;--callout-success-bg: #F0F1EB;--callout-success-line: #BAC1AB;--focus-ring: 0 0 0 2px var(--bg), 0 0 0 4px var(--focus-color);--chart-1: var(--text);--chart-2: var(--danger);--chart-grid: var(--line);--font-sans: "Segoe UI", -apple-system, BlinkMacSystemFont, "PingFang SC", "Microsoft YaHei UI", "Microsoft YaHei", "HarmonyOS Sans SC", "Noto Sans CJK SC", "Source Han Sans SC", sans-serif;--font-mono: "Cascadia Code", "JetBrains Mono", Consolas, "SFMono-Regular", Menlo, "Microsoft YaHei UI", "Microsoft YaHei", monospace;--fs-11: 11px;--fs-12: 12px;--fs-13: 13px;--fs-14: 14px;--fs-15: 15px;--fs-16: 16px;--fs-17: 17px;--fs-18: 18px;--fs-20: 20px;--fs-22: 22px;--fs-24: 24px;--fs-26: 26px;--fs-30: 30px;--fs-36: 36px;--lh-tight: 1.25;--lh-snug: 1.45;--lh-normal: 1.65;--lh-relaxed: 1.85;--fw-regular: 400;--fw-medium: 500;--fw-semibold: 600;--sp-1: 4px;--sp-2: 8px;--sp-3: 12px;--sp-4: 16px;--sp-5: 20px;--sp-6: 24px;--sp-8: 32px;--sp-10: 40px;--sp-12: 48px;--sp-16: 64px;--sp-20: 80px;--sp-24: 96px;--r-xs: 2px;--r-sm: 4px;--r-md: 6px;--r-lg: 8px;--r-full: 999px;--bw: 1px;--border: var(--bw) solid var(--line);--border-strong: var(--bw) solid var(--line-strong);--dur-fast: .12s;--dur: .16s;--dur-slow: .2s;--ease: cubic-bezier(.2, 0, 0, 1);--z-base: 1;--z-sticky: 100;--z-dropdown: 200;--z-drawer: 300;--z-modal: 400;--z-toast: 500;--z-tooltip: 600;--topbar-h: 56px;--admin-topbar-h: 48px;--sidebar-w: 224px;--sidebar-w-collapsed: 56px;--content-max: 1200px;--prose-max: 700px;--safe-top: env(safe-area-inset-top, 0px);--safe-right: env(safe-area-inset-right, 0px);--safe-bottom: env(safe-area-inset-bottom, 0px);--safe-left: env(safe-area-inset-left, 0px)}@media(prefers-color-scheme:dark){:root:not([data-theme=light]){color-scheme:dark;--bg: #171513;--bg-subtle: #12100E;--surface: #1F1C19;--surface-raised: #282420;--surface-hover: #26221E;--code-bg: #13110F;--selection: #4A2C1E;--overlay: rgba(0, 0, 0, .55);--line: #322D28;--line-strong: #443E37;--line-control: #716A5E;--rule: #7A7266;--text: #EDE7DD;--text-2: #BDB3A5;--text-3: #948B7E;--text-disabled: #5E574E;--brand: #D9825A;--brand-hover: #E3926C;--brand-active: #C8744E;--brand-soft: #3A271D;--brand-faint: #2A1F19;--link: #D9825A;--brand-solid: #A05736;--brand-solid-hover: #A65C3A;--brand-solid-active: #974F31;--on-brand: #FFF4EC;--success: #8DBA7E;--success-soft: #1F2A1C;--warning: #D6A64A;--warning-soft: #2D2416;--danger: #E0737A;--danger-soft: #33191B;--danger-solid: #A8434A;--danger-solid-hover: #B04A50;--danger-solid-active: #9E3D44;--on-danger: #FFF4EC;--on-status: #1A1310;--info: #8FADC4;--info-soft: #1A242C;--shadow-pop: 0 1px 2px rgba(0, 0, 0, .3), 0 8px 24px -6px rgba(0, 0, 0, .55);--shadow-modal: 0 2px 4px rgba(0, 0, 0, .3), 0 20px 48px -12px rgba(0, 0, 0, .65);--brand-mix-3: #A16346;--brand-mix-5: #7C4F3A;--brand-mix-7: #573B2C;--brand-mix-8: #443026;--success-mix-3: #6C8B60;--success-mix-5: #566B4C;--success-mix-7: #404B37;--success-mix-8: #353C2D;--warning-mix-3: #9F7D3B;--warning-mix-5: #7A6132;--warning-mix-7: #564528;--warning-mix-8: #443823;--danger-mix-3: #A6595D;--danger-mix-5: #80484A;--danger-mix-7: #593636;--danger-mix-8: #462D2C;--info-mix-3: #716A60;--info-mix-5: #5A544C;--success-deep: #A0C391;--warning-deep: #DBB367;--danger-deep: #E38A8E;--brand-halo: rgba(217, 130, 90, .18);--danger-halo: rgba(224, 115, 122, .18);--brand-line: rgba(217, 130, 90, .4);--warning-line: rgba(214, 166, 74, .4);--danger-line: rgba(224, 115, 122, .4);--link-underline: rgba(217, 130, 90, .4);--focus-color: #D9825A;--chart-area: rgba(189, 179, 165, .07);--mask: rgba(23, 21, 19, .8);--mask-light: rgba(23, 21, 19, .3);--callout-tip-bg: #26251F;--callout-tip-line: #484F3D;--callout-info-bg: #262523;--callout-info-line: #484C4D;--callout-warning-bg: #2A241C;--callout-warning-line: #594A30;--callout-danger-bg: #2B211F;--callout-danger-line: #5C3E3C;--callout-note-bg: #26231F;--callout-note-line: #4A443D;--callout-success-bg: #26251F;--callout-success-line: #484F3D;--focus-ring: 0 0 0 2px var(--bg), 0 0 0 4px var(--focus-color);--chart-1: var(--text);--chart-2: var(--danger);--chart-grid: var(--line)}}:root[data-theme=dark],:root.dark{color-scheme:dark;--bg: #171513;--bg-subtle: #12100E;--surface: #1F1C19;--surface-raised: #282420;--surface-hover: #26221E;--code-bg: #13110F;--selection: #4A2C1E;--overlay: rgba(0, 0, 0, .55);--line: #322D28;--line-strong: #443E37;--line-control: #716A5E;--rule: #7A7266;--text: #EDE7DD;--text-2: #BDB3A5;--text-3: #948B7E;--text-disabled: #5E574E;--brand: #D9825A;--brand-hover: #E3926C;--brand-active: #C8744E;--brand-soft: #3A271D;--brand-faint: #2A1F19;--link: #D9825A;--brand-solid: #A05736;--brand-solid-hover: #A65C3A;--brand-solid-active: #974F31;--on-brand: #FFF4EC;--success: #8DBA7E;--success-soft: #1F2A1C;--warning: #D6A64A;--warning-soft: #2D2416;--danger: #E0737A;--danger-soft: #33191B;--danger-solid: #A8434A;--danger-solid-hover: #B04A50;--danger-solid-active: #9E3D44;--on-danger: #FFF4EC;--on-status: #1A1310;--info: #8FADC4;--info-soft: #1A242C;--shadow-pop: 0 1px 2px rgba(0, 0, 0, .3), 0 8px 24px -6px rgba(0, 0, 0, .55);--shadow-modal: 0 2px 4px rgba(0, 0, 0, .3), 0 20px 48px -12px rgba(0, 0, 0, .65);--brand-mix-3: #A16346;--brand-mix-5: #7C4F3A;--brand-mix-7: #573B2C;--brand-mix-8: #443026;--success-mix-3: #6C8B60;--success-mix-5: #566B4C;--success-mix-7: #404B37;--success-mix-8: #353C2D;--warning-mix-3: #9F7D3B;--warning-mix-5: #7A6132;--warning-mix-7: #564528;--warning-mix-8: #443823;--danger-mix-3: #A6595D;--danger-mix-5: #80484A;--danger-mix-7: #593636;--danger-mix-8: #462D2C;--info-mix-3: #716A60;--info-mix-5: #5A544C;--success-deep: #A0C391;--warning-deep: #DBB367;--danger-deep: #E38A8E;--brand-halo: rgba(217, 130, 90, .18);--danger-halo: rgba(224, 115, 122, .18);--brand-line: rgba(217, 130, 90, .4);--warning-line: rgba(214, 166, 74, .4);--danger-line: rgba(224, 115, 122, .4);--link-underline: rgba(217, 130, 90, .4);--focus-color: #D9825A;--chart-area: rgba(189, 179, 165, .07);--mask: rgba(23, 21, 19, .8);--mask-light: rgba(23, 21, 19, .3);--callout-tip-bg: #26251F;--callout-tip-line: #484F3D;--callout-info-bg: #262523;--callout-info-line: #484C4D;--callout-warning-bg: #2A241C;--callout-warning-line: #594A30;--callout-danger-bg: #2B211F;--callout-danger-line: #5C3E3C;--callout-note-bg: #26231F;--callout-note-line: #4A443D;--callout-success-bg: #26251F;--callout-success-line: #484F3D;--focus-ring: 0 0 0 2px var(--bg), 0 0 0 4px var(--focus-color);--chart-1: var(--text);--chart-2: var(--danger);--chart-grid: var(--line)}:root[data-theme=light]{color-scheme:light}@media(prefers-reduced-motion:reduce){:root{--dur-fast: 0ms;--dur: 0ms;--dur-slow: 0ms}}*,*:before,*:after{box-sizing:border-box}html{-webkit-text-size-adjust:100%;text-size-adjust:100%;-webkit-tap-highlight-color:transparent;scrollbar-color:var(--line-strong) transparent}body{margin:0;background:var(--bg);color:var(--text);font-family:var(--font-sans);font-size:var(--fs-15);line-height:var(--lh-normal);font-variant-numeric:tabular-nums;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}:where(h1,h2,h3,h4,h5,h6,p,ul,ol,dl,dd,figure,blockquote,pre){margin:0}:where(h1,h2,h3,h4,h5,h6){font-size:inherit;font-weight:var(--fw-semibold)}:where(ul,ol){padding:0;list-style:none}:where(p,li,dd,figcaption){text-wrap:pretty}:where(a){color:inherit;text-decoration:none}:where(button){font:inherit;color:inherit;background:none;border:0;padding:0;cursor:pointer}:where(button:disabled){cursor:not-allowed}:where(input,select,textarea){font:inherit;color:inherit}:where(img,video){max-width:100%;height:auto}:where(table){border-collapse:collapse}:where(svg){flex:none}:where(code,kbd,samp,pre){font-family:var(--font-mono)}:where(b,strong){font-weight:var(--fw-semibold)}:where(hr){height:0;margin:0;border:0;border-top:var(--border)}[hidden]{display:none!important}::selection{background:var(--selection);color:var(--text)}:where(:focus){outline:2px solid var(--focus-color);outline-offset:2px}:where(:focus:not(:focus-visible)){outline:none}:where([tabindex="-1"]:focus,main:focus){outline:none}@media(hover:hover)and (pointer:fine){::-webkit-scrollbar{width:10px;height:10px}::-webkit-scrollbar-track,::-webkit-scrollbar-corner{background:transparent}::-webkit-scrollbar-thumb{background-color:var(--line-strong);border:2px solid transparent;border-radius:10px;background-clip:content-box}::-webkit-scrollbar-thumb:hover{background-color:var(--line-control)}}@media(prefers-reduced-motion:reduce){*,*:before,*:after{animation-duration:.01ms!important;animation-iteration-count:1!important;transition-duration:.01ms!important;scroll-behavior:auto!important}.ff-spin,.el-icon.is-loading,.el-loading-spinner .circular{animation-duration:2.4s!important;animation-iteration-count:infinite!important}}.ff-theme-switching,.ff-theme-switching *,.ff-theme-switching *:before,.ff-theme-switching *:after{transition:none!important}@media print{.ff-site-header,.ff-site-footer,.ff-adm-sidebar,.ff-adm-topbar,.ff-adm-mask,.ff-skip-link,.ff-no-print,.ff-dd-menu,.ff-sheet-mask,.el-message,.el-overlay,.el-popper{display:none!important}html,body{background:#fff!important;color:#000!important}.ff-adm{display:block!important}.ff-adm-main{margin:0!important}a{color:inherit!important;text-decoration:underline}}.mono,.ff-mono{font-family:var(--font-mono);font-size:.92em;letter-spacing:0}.ff-muted{color:var(--text-3)}@media(max-width:640px){.ff-hide-phone{display:none!important}}@media(min-width:641px){.ff-only-phone{display:none!important}}.ff-sr-only{position:absolute!important;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0 0 0 0);white-space:nowrap;border:0}.ff-skip-link{position:fixed;left:12px;top:8px;z-index:calc(var(--z-tooltip) + 1);padding:8px 12px;border-radius:var(--r-sm);background:var(--surface-raised);color:var(--text);box-shadow:var(--shadow-pop);border:var(--border);font-size:var(--fs-14);transform:translateY(-200%)}.ff-skip-link:focus{transform:none}.ff-icon{display:inline-block;vertical-align:-.2em;flex:none}.ff-btn{position:relative;display:inline-flex;align-items:center;justify-content:center;gap:6px;height:34px;padding:0 14px;border-radius:var(--r-sm);font-size:var(--fs-14);font-weight:var(--fw-medium);line-height:1;white-space:nowrap;text-decoration:none;cursor:pointer;user-select:none;-webkit-user-select:none;transition:background-color var(--dur) var(--ease),color var(--dur) var(--ease),box-shadow var(--dur) var(--ease)}.ff-btn--primary{background:var(--brand-solid);color:var(--on-brand)}.ff-btn--primary:active{background:var(--brand-solid-active)}.ff-btn--secondary{background:var(--surface);color:var(--text);box-shadow:inset 0 0 0 1px var(--line-control)}.ff-btn--ghost{color:var(--text-2)}.ff-btn--danger{background:var(--danger-solid);color:var(--on-danger)}.ff-btn--danger:active{background:var(--danger-solid-active)}@media(hover:hover){.ff-btn--primary:hover{background:var(--brand-solid-hover)}.ff-btn--secondary:hover{background:var(--surface-hover)}.ff-btn--ghost:hover{background:var(--surface-hover);color:var(--text)}.ff-btn--danger:hover{background:var(--danger-solid-hover)}}.ff-btn--sm{height:28px;padding:0 10px;font-size:var(--fs-13)}.ff-btn--lg{height:40px;padding:0 18px;font-size:var(--fs-15)}.ff-btn--block{display:flex;width:100%}.ff-btn:disabled,.ff-btn.is-disabled{opacity:.45;cursor:not-allowed;pointer-events:none}.ff-btn.is-loading{cursor:progress}.ff-spin{display:inline-block;flex:none;width:14px;height:14px;border-radius:50%;border:1.5px solid currentColor;border-right-color:transparent;animation:ff-spin .7s linear infinite}@keyframes ff-spin{to{transform:rotate(360deg)}}.ff-ib{position:relative;width:32px;height:32px;flex:none;display:inline-flex;align-items:center;justify-content:center;border-radius:var(--r-sm);color:var(--text-2);transition:background-color var(--dur) var(--ease),color var(--dur) var(--ease)}.ff-ib[aria-expanded=true]{background:var(--surface-hover);color:var(--text)}@media(hover:hover){.ff-ib:hover{background:var(--surface-hover);color:var(--text)}}.ff-ib--sm{width:28px;height:28px}.ff-link{color:var(--link);text-decoration:underline;text-decoration-thickness:1px;text-underline-offset:3px;text-decoration-color:var(--link-underline);transition:text-decoration-color var(--dur) var(--ease)}.ff-textlink{display:inline-flex;align-items:center;gap:4px;color:var(--text-2);font-size:var(--fs-14);transition:color var(--dur) var(--ease)}.ff-textlink--brand{color:var(--link)}@media(hover:hover){.ff-link:hover{text-decoration-color:currentColor}.ff-textlink:hover{color:var(--text)}.ff-textlink--brand:hover{color:var(--brand-hover)}}.ff-kbd,kbd.ff-kbd{display:inline-block;font-family:var(--font-mono);font-size:11px;line-height:1;padding:3px 5px;border-radius:var(--r-xs);color:var(--text-3);background:var(--bg);box-shadow:inset 0 0 0 1px var(--line)}.ff-tag{display:inline-flex;align-items:center;gap:4px;height:20px;padding:0 6px;font-size:var(--fs-12);line-height:1;white-space:nowrap;color:var(--text-2);border-radius:var(--r-xs);box-shadow:inset 0 0 0 1px var(--line-strong)}.ff-tag--brand{color:var(--brand);box-shadow:inset 0 0 0 1px var(--brand-line)}.ff-tag--warn{color:var(--warning);box-shadow:inset 0 0 0 1px var(--warning-line)}.ff-tag--danger{color:var(--danger);box-shadow:inset 0 0 0 1px var(--danger-line)}.ff-avatar{width:24px;height:24px;flex:none;display:inline-grid;place-items:center;border-radius:var(--r-full);font-size:12px;font-weight:var(--fw-semibold);line-height:1;background:var(--bg-subtle);color:var(--text);box-shadow:inset 0 0 0 1px var(--line-strong)}.ff-field{display:grid;gap:6px}.ff-field-label{font-size:var(--fs-13);font-weight:var(--fw-medium);color:var(--text)}.ff-field-hint{font-size:var(--fs-12);line-height:var(--lh-snug);color:var(--text-3)}.ff-field-hint code{font-family:var(--font-mono);font-size:12px;color:var(--text-2)}.ff-field-error{display:flex;gap:6px;align-items:flex-start;font-size:var(--fs-13);line-height:var(--lh-snug);color:var(--danger)}.ff-field-error .ff-icon{margin-top:2px}.ff-input{width:100%;height:36px;padding:0 10px;background:var(--surface);color:var(--text);border:1px solid var(--line-control);border-radius:var(--r-sm);font-size:var(--fs-14);outline:none;-webkit-appearance:none;appearance:none;transition:border-color var(--dur) var(--ease),box-shadow var(--dur) var(--ease)}.ff-input::placeholder{color:var(--text-3);opacity:1}@media(hover:hover){.ff-input:hover{border-color:var(--text-3)}}.ff-input:focus{border-color:var(--brand);box-shadow:0 0 0 3px var(--brand-halo)}.ff-input.is-error,.ff-input[aria-invalid=true]{border-color:var(--danger)}.ff-input.is-error:focus,.ff-input[aria-invalid=true]:focus{box-shadow:0 0 0 3px var(--danger-halo)}.ff-input--lg{height:40px;font-size:var(--fs-15)}.ff-input-wrap{position:relative;display:flex;align-items:center}.ff-input-wrap>.ff-input{padding-right:40px}.ff-input-wrap>.ff-ib{position:absolute;right:4px}.ff-check{display:inline-flex;align-items:center;gap:8px;font-size:var(--fs-14);color:var(--text-2);cursor:pointer;user-select:none;-webkit-user-select:none}.ff-check input{-webkit-appearance:none;appearance:none;margin:0;flex:none;width:16px;height:16px;border-radius:var(--r-xs);border:1px solid var(--line-control);background:var(--surface);display:inline-grid;place-content:center;cursor:pointer;transition:background-color var(--dur-fast) var(--ease),border-color var(--dur-fast) var(--ease)}.ff-check input:after{content:"";width:9px;height:5px;border:solid var(--on-brand);border-width:0 0 1.5px 1.5px;transform:translateY(-1px) rotate(-45deg);opacity:0}.ff-check input:checked{background:var(--brand-solid);border-color:var(--brand-solid)}.ff-check input:checked:after{opacity:1}.ff-skel{display:block;height:10px;border-radius:var(--r-xs);background:var(--bg-subtle)}.ff-panel{background:var(--surface);border:var(--border);border-radius:var(--r-md);min-width:0}.ff-panel-h{display:flex;align-items:center;flex-wrap:wrap;gap:8px 12px;min-height:48px;padding:10px 16px;border-bottom:var(--border)}.ff-panel-t{font-size:var(--fs-14);font-weight:var(--fw-semibold);line-height:1.4}.ff-panel-sub{font-size:var(--fs-12);color:var(--text-3)}.ff-panel-b{padding:16px}.ff-notice{display:flex;gap:10px;padding:12px 14px;border-radius:var(--r-md);font-size:var(--fs-14);line-height:var(--lh-snug);background:var(--bg-subtle);color:var(--text)}.ff-notice>.ff-icon{margin-top:2px;color:var(--text-3)}.ff-notice--ok{background:var(--success-soft)}.ff-notice--ok>.ff-icon{color:var(--success)}.ff-notice--err{background:var(--danger-soft)}.ff-notice--err>.ff-icon{color:var(--danger)}.ff-notice--warn{background:var(--warning-soft)}.ff-notice--warn>.ff-icon{color:var(--warning)}.ff-notice b{font-weight:var(--fw-semibold)}.ff-notice p+p{margin-top:2px}@media(max-width:640px),(pointer:coarse){.ff-input,.ff-input--lg{font-size:16px}}@media(pointer:coarse){.ff-ib,.ff-ib--sm{width:44px;height:44px}.ff-btn,.ff-btn--lg{min-height:44px}.ff-btn--sm{min-height:36px}.ff-btn--sm:before{content:"";position:absolute;inset:-4px 0}.ff-input{height:44px}.ff-check{min-height:44px}.ff-check input{width:20px;height:20px}.ff-check input:after{width:11px;height:6px}}.ff-prose{--prose-fs: 16px;font-size:var(--prose-fs);line-height:var(--lh-relaxed);color:var(--text);word-wrap:break-word;overflow-wrap:break-word}.ff-prose>:first-child{margin-top:0}.ff-prose>:last-child{margin-bottom:0}.ff-prose h1,.ff-prose h2,.ff-prose h3,.ff-prose h4,.ff-prose h5,.ff-prose h6{position:relative;font-weight:var(--fw-semibold);color:var(--text);scroll-margin-top:calc(var(--topbar-h) + 24px)}.ff-prose h1{margin:2.5em 0 .6em;font-size:1.625em;line-height:1.35}.ff-prose h2{margin:3.25em 0 .875em;font-size:1.375em;line-height:1.4}.ff-prose h3{margin:2em 0 .5em;font-size:1.0625em;line-height:1.5}.ff-prose h4{margin:1.75em 0 .5em;font-size:1em;line-height:1.6}.ff-prose h5,.ff-prose h6{margin:1.5em 0 .4em;font-size:.9375em;line-height:1.6;color:var(--text-2)}.ff-prose h1>a[href^="#"],.ff-prose h2>a[href^="#"],.ff-prose h3>a[href^="#"],.ff-prose h4>a[href^="#"],.ff-prose h5>a[href^="#"],.ff-prose h6>a[href^="#"]{color:inherit;text-decoration:none;border-radius:var(--r-xs)}.ff-prose h1>a[href^="#"]:after,.ff-prose h2>a[href^="#"]:after,.ff-prose h3>a[href^="#"]:after,.ff-prose h4>a[href^="#"]:after{content:"";display:inline-block;width:.8em;height:.8em;margin-left:.4em;vertical-align:-.06em;color:var(--text-3);background:currentColor;-webkit-mask:var(--ff-mask-hash) center / contain no-repeat;mask:var(--ff-mask-hash) center / contain no-repeat;opacity:0;transition:opacity var(--dur) var(--ease),color var(--dur) var(--ease)}.ff-prose h1>a[href^="#"]:focus:after,.ff-prose h2>a[href^="#"]:focus:after,.ff-prose h3>a[href^="#"]:focus:after,.ff-prose h4>a[href^="#"]:focus:after{opacity:1}.ff-prose h1>a[href^="#"].is-copied:after,.ff-prose h2>a[href^="#"].is-copied:after,.ff-prose h3>a[href^="#"].is-copied:after,.ff-prose h4>a[href^="#"].is-copied:after{opacity:1;color:var(--success)}.ff-prose .ff-anchor-tip{margin-left:6px;font-size:var(--fs-12);font-weight:var(--fw-regular);line-height:1;color:var(--success);white-space:nowrap}.ff-prose .header-anchor,.ff-prose .ff-anchor,.ff-prose .anchor{margin-left:8px;color:var(--text-3);font-weight:var(--fw-regular);text-decoration:none;opacity:0;transition:opacity var(--dur) var(--ease)}.ff-prose .header-anchor:focus,.ff-prose .ff-anchor:focus,.ff-prose .anchor:focus,.ff-prose .header-anchor.is-copied,.ff-prose .ff-anchor.is-copied{opacity:1}.ff-prose .header-anchor.is-copied,.ff-prose .ff-anchor.is-copied{color:var(--success)}@media(hover:hover){.ff-prose h1:hover>a[href^="#"]:after,.ff-prose h2:hover>a[href^="#"]:after,.ff-prose h3:hover>a[href^="#"]:after,.ff-prose h4:hover>a[href^="#"]:after,.ff-prose h1:hover .header-anchor,.ff-prose h2:hover .header-anchor,.ff-prose h3:hover .header-anchor,.ff-prose h4:hover .header-anchor,.ff-prose h1:hover .ff-anchor,.ff-prose h2:hover .ff-anchor,.ff-prose h3:hover .ff-anchor,.ff-prose h4:hover .ff-anchor,.ff-prose h1:hover .anchor,.ff-prose h2:hover .anchor,.ff-prose h3:hover .anchor,.ff-prose h4:hover .anchor{opacity:1}.ff-prose h1>a[href^="#"]:not(.is-copied):hover:after,.ff-prose h2>a[href^="#"]:not(.is-copied):hover:after,.ff-prose h3>a[href^="#"]:not(.is-copied):hover:after,.ff-prose h4>a[href^="#"]:not(.is-copied):hover:after{color:var(--text-2)}}@media(hover:none){.ff-prose h1>a[href^="#"]:after,.ff-prose h2>a[href^="#"]:after,.ff-prose h3>a[href^="#"]:after,.ff-prose h4>a[href^="#"]:after,.ff-prose .header-anchor,.ff-prose .ff-anchor,.ff-prose .anchor{opacity:.5}}.ff-prose p{margin:.75em 0}.ff-prose ul,.ff-prose ol{margin:.75em 0;padding-left:1.4em}.ff-prose ul{list-style:disc}.ff-prose ol{list-style:decimal}.ff-prose ul ul{list-style:circle}.ff-prose li{margin:.375em 0;padding-left:2px}.ff-prose li::marker{color:var(--text-3)}.ff-prose li>ul,.ff-prose li>ol{margin:.25em 0}.ff-prose li>p{margin:.375em 0}.ff-prose li.task-list-item,.ff-prose .contains-task-list>li{list-style:none;margin-left:-1.4em}.ff-prose .task-list-item input[type=checkbox]{margin:0 8px 0 0;width:14px;height:14px;vertical-align:-2px;accent-color:var(--brand-solid)}.ff-prose strong,.ff-prose b{font-weight:var(--fw-semibold);color:var(--text)}.ff-prose em{font-style:italic}.ff-prose del,.ff-prose s{color:var(--text-3)}.ff-prose mark{background:var(--warning-soft);color:var(--text);padding:0 2px;border-radius:var(--r-xs)}.ff-prose small{font-size:.8125em;color:var(--text-3)}.ff-prose sup,.ff-prose sub{font-size:.75em;line-height:0}.ff-prose abbr[title]{text-decoration:underline dotted;cursor:help}.ff-prose a{color:var(--link);text-decoration:underline;text-decoration-thickness:1px;text-underline-offset:3px;text-decoration-color:var(--link-underline);transition:text-decoration-color var(--dur) var(--ease)}.ff-prose a:not([href]){color:inherit;text-decoration:none}@media(hover:hover){.ff-prose a:hover{text-decoration-color:currentColor}}.ff-prose hr{margin:2.5em 0;border:0;border-top:var(--border)}.ff-prose :not(pre)>code{font-family:var(--font-mono);font-size:.86em;padding:.12em .32em;border-radius:var(--r-xs);background:var(--code-bg);box-shadow:inset 0 0 0 1px var(--line);color:var(--text);word-break:break-word;overflow-wrap:anywhere}.ff-prose a>code{color:inherit}.ff-prose pre{margin:1.25em 0;padding:14px 16px 16px;border:var(--border);border-radius:var(--r-md);background:var(--code-bg);overflow-x:auto;-webkit-overflow-scrolling:touch;font-family:var(--font-mono);font-size:.844em;line-height:1.75;color:var(--text);tab-size:2;-moz-tab-size:2}.ff-prose pre code{display:block;padding:0;background:none;box-shadow:none;font-size:inherit;white-space:pre;word-break:normal;overflow-wrap:normal;color:inherit}.ff-prose .ff-code{margin:1.25em 0;border:var(--border);border-radius:var(--r-md);background:var(--code-bg);overflow:hidden}.ff-prose .ff-code>pre{margin:0;border:0;border-radius:0}.ff-prose .ff-code-h{display:flex;align-items:center;justify-content:space-between;gap:8px;min-height:36px;padding:0 6px 0 14px;border-bottom:var(--border);font-family:var(--font-mono);font-size:12px;color:var(--text-3)}.ff-prose .ff-code-h .ff-btn{font-family:var(--font-sans);color:var(--text-3)}@media(hover:hover){.ff-prose .ff-code-h .ff-btn:hover{color:var(--text)}}.ff-prose .hljs{color:var(--text);background:transparent}.ff-prose .hljs-comment,.ff-prose .hljs-quote,.ff-prose .hljs-meta,.ff-prose .hljs-punctuation,.ff-prose .hljs-operator{color:var(--text-3)}.ff-prose .hljs-comment,.ff-prose .hljs-quote{font-style:normal}.ff-prose .hljs-keyword,.ff-prose .hljs-selector-tag,.ff-prose .hljs-built_in,.ff-prose .hljs-type,.ff-prose .hljs-doctag,.ff-prose .hljs-selector-pseudo{color:var(--warning)}.ff-prose .hljs-string,.ff-prose .hljs-regexp,.ff-prose .hljs-symbol,.ff-prose .hljs-template-tag,.ff-prose .hljs-char.escape_,.ff-prose .hljs-meta .hljs-string{color:var(--success)}.ff-prose .hljs-number,.ff-prose .hljs-literal,.ff-prose .hljs-bullet,.ff-prose .hljs-tag,.ff-prose .hljs-name,.ff-prose .hljs-selector-id,.ff-prose .hljs-selector-class{color:var(--info)}.ff-prose .hljs-title,.ff-prose .hljs-title.function_,.ff-prose .hljs-title.class_,.ff-prose .hljs-section{color:var(--text);font-weight:var(--fw-medium)}.ff-prose .hljs-attr,.ff-prose .hljs-attribute,.ff-prose .hljs-property{color:var(--text)}.ff-prose .hljs-variable,.ff-prose .hljs-params,.ff-prose .hljs-template-variable,.ff-prose .hljs-subst{color:var(--text-2)}.ff-prose .hljs-link{color:var(--link);text-decoration:underline}.ff-prose .hljs-emphasis{font-style:italic}.ff-prose .hljs-strong{font-weight:var(--fw-semibold)}.ff-prose .hljs-addition{color:var(--success);background:var(--success-soft)}.ff-prose .hljs-deletion{color:var(--danger);background:var(--danger-soft)}.ff-prose table{width:100%;margin:1.25em 0;border-collapse:collapse;font-size:.875em;line-height:1.65}.ff-prose th{padding:0 16px 8px 0;text-align:left;font-size:.857em;font-weight:var(--fw-medium);color:var(--text-3);border-bottom:1px solid var(--line-strong);white-space:nowrap;vertical-align:bottom}.ff-prose td{padding:10px 16px 10px 0;vertical-align:top;border-bottom:var(--border)}.ff-prose th:last-child,.ff-prose td:last-child{padding-right:0}.ff-prose td>code:only-child{white-space:nowrap;word-break:normal;overflow-wrap:normal}.ff-prose th[align=center],.ff-prose td[align=center]{text-align:center}.ff-prose th[align=right],.ff-prose td[align=right]{text-align:right}.ff-prose .ff-table-wrap{margin:1.25em 0;overflow-x:auto;-webkit-overflow-scrolling:touch}.ff-prose .ff-table-wrap>table{margin:0}.ff-prose blockquote{margin:1.25em 0;padding:2px 0 2px 16px;border-left:2px solid var(--line-strong);color:var(--text-2)}.ff-prose blockquote>:first-child{margin-top:0}.ff-prose blockquote>:last-child{margin-bottom:0}.ff-prose img,.ff-prose video{max-width:100%;height:auto;border-radius:var(--r-sm)}.ff-prose p>img:only-child,.ff-prose figure img{display:block;margin:0 auto}.ff-prose figure{margin:1.5em 0}.ff-prose figcaption{margin-top:8px;font-size:.8125em;color:var(--text-3);text-align:center}.ff-prose kbd{display:inline-block;min-width:1.6em;padding:1px 6px;border-radius:var(--r-xs);font-family:var(--font-mono);font-size:.75em;line-height:1.6;text-align:center;color:var(--text-2);background:var(--surface);box-shadow:inset 0 0 0 1px var(--line-strong),inset 0 -1px 0 var(--line-strong)}.ff-prose details{margin:1.25em 0;border:var(--border);border-radius:var(--r-md);background:var(--surface)}.ff-prose summary{display:list-item;padding:10px 14px;font-size:.9375em;font-weight:var(--fw-medium);cursor:pointer;list-style-position:inside}.ff-prose summary::marker,.ff-prose summary::-webkit-details-marker{color:var(--text-3)}.ff-prose details[open]>summary{border-bottom:var(--border)}.ff-prose details>:not(summary){margin-left:14px;margin-right:14px}.ff-prose details>:last-child{margin-bottom:12px}.ff-prose .footnotes,.ff-prose .footnotes-sep+.footnotes{margin-top:3em;padding-top:1em;border-top:var(--border);font-size:.875em;color:var(--text-2)}.ff-prose .ff-callout,.ff-prose .ff-container{--c: var(--text-3);--c-bg: var(--callout-note-bg);--c-line: var(--callout-note-line);margin:1.375em 0;padding:14px 16px 15px;border-radius:var(--r-md);background:var(--c-bg);border:1px solid var(--c-line)}.ff-prose .ff-callout--tip,.ff-prose .ff-container.ff-tip{--c: var(--success);--c-bg: var(--callout-tip-bg);--c-line: var(--callout-tip-line)}.ff-prose .ff-callout--success,.ff-prose .ff-container.ff-success{--c: var(--success);--c-bg: var(--callout-success-bg);--c-line: var(--callout-success-line)}.ff-prose .ff-callout--info,.ff-prose .ff-container.ff-info{--c: var(--info);--c-bg: var(--callout-info-bg);--c-line: var(--callout-info-line)}.ff-prose .ff-callout--warning,.ff-prose .ff-container.ff-warning{--c: var(--warning);--c-bg: var(--callout-warning-bg);--c-line: var(--callout-warning-line)}.ff-prose .ff-callout--danger,.ff-prose .ff-container.ff-danger{--c: var(--danger);--c-bg: var(--callout-danger-bg);--c-line: var(--callout-danger-line)}.ff-prose .ff-callout-t,.ff-prose .ff-c-head{display:flex;align-items:center;gap:8px;font-size:.875em;font-weight:var(--fw-semibold);line-height:1.5;color:var(--c)}.ff-prose .ff-c-title{min-width:0}.ff-prose .ff-c-title code{color:var(--text)}.ff-prose .ff-callout>p,.ff-prose .ff-container>p,.ff-prose .ff-callout>ul,.ff-prose .ff-container>ul,.ff-prose .ff-callout>ol,.ff-prose .ff-container>ol{margin:.4em 0 0;font-size:.9375em;line-height:1.8}.ff-prose .ff-callout>pre,.ff-prose .ff-container>pre{margin:.75em 0 0;background:var(--surface)}.ff-prose .ff-callout-t+p,.ff-prose .ff-c-head+p{margin-top:6px}.ff-prose .ff-container.ff-quote>p{color:var(--text-2)}.ff-prose .ff-c-icon,.ff-prose .ff-callout-i,.ff-prose .ff-config-icon{flex:none;display:inline-block;width:16px;height:16px;font-size:0;line-height:0;color:transparent;overflow:hidden;background-color:var(--c, var(--text-3));-webkit-mask:var(--ff-mask-info) center / 16px 16px no-repeat;mask:var(--ff-mask-info) center / 16px 16px no-repeat}.ff-prose .ff-tip .ff-c-icon,.ff-prose .ff-callout--tip .ff-callout-i{-webkit-mask-image:var(--ff-mask-bulb);mask-image:var(--ff-mask-bulb)}.ff-prose .ff-warning .ff-c-icon,.ff-prose .ff-callout--warning .ff-callout-i{-webkit-mask-image:var(--ff-mask-alert);mask-image:var(--ff-mask-alert)}.ff-prose .ff-danger .ff-c-icon,.ff-prose .ff-callout--danger .ff-callout-i{-webkit-mask-image:var(--ff-mask-alert-circle);mask-image:var(--ff-mask-alert-circle)}.ff-prose .ff-success .ff-c-icon,.ff-prose .ff-callout--success .ff-callout-i{-webkit-mask-image:var(--ff-mask-check-circle);mask-image:var(--ff-mask-check-circle)}.ff-prose .ff-note .ff-c-icon,.ff-prose .ff-callout--note .ff-callout-i{-webkit-mask-image:var(--ff-mask-edit);mask-image:var(--ff-mask-edit)}.ff-prose .ff-changelog .ff-c-icon{-webkit-mask-image:var(--ff-mask-calendar);mask-image:var(--ff-mask-calendar)}.ff-prose .ff-quote .ff-c-icon{-webkit-mask-image:var(--ff-mask-chat);mask-image:var(--ff-mask-chat)}.ff-prose .ff-keyboard .ff-c-icon{-webkit-mask-image:var(--ff-mask-type);mask-image:var(--ff-mask-type)}.ff-prose .ff-config-icon{-webkit-mask-image:var(--ff-mask-sliders);mask-image:var(--ff-mask-sliders)}.ff-prose .ff-container.ff-api,.ff-prose .ff-container.ff-config{--c: var(--text-3);background:var(--surface);border-color:var(--line);padding:0;overflow:hidden}.ff-prose .ff-api-head,.ff-prose .ff-config-head{display:flex;align-items:center;flex-wrap:wrap;gap:8px;min-height:40px;padding:8px 14px;background:var(--bg-subtle);border-bottom:var(--border)}.ff-prose .ff-api>:not(.ff-api-head),.ff-prose .ff-config>:not(.ff-config-head){margin-left:14px;margin-right:14px}.ff-prose .ff-api>:last-child,.ff-prose .ff-config>:last-child{margin-bottom:12px}.ff-prose .ff-api-path,.ff-prose .ff-config-key{font-family:var(--font-mono);font-size:.8125em;color:var(--text);background:none;box-shadow:none;padding:0}.ff-prose .ff-api-method{display:inline-flex;align-items:center;height:20px;padding:0 6px;border-radius:var(--r-xs);font-family:var(--font-mono);font-size:11px;font-weight:var(--fw-semibold);color:var(--text-2);box-shadow:inset 0 0 0 1px var(--line-strong)}.ff-prose .ff-m-get{color:var(--info)}.ff-prose .ff-m-post{color:var(--success)}.ff-prose .ff-m-put,.ff-prose .ff-m-patch{color:var(--warning);box-shadow:inset 0 0 0 1px var(--warning-line)}.ff-prose .ff-m-delete{color:var(--danger);box-shadow:inset 0 0 0 1px var(--danger-line)}.ff-prose .ff-api-dep{display:inline-flex;align-items:center;height:20px;padding:0 6px;border-radius:var(--r-xs);font-size:11px;color:var(--warning);box-shadow:inset 0 0 0 1px var(--warning-line)}.ff-prose .ff-api.ff-deprecated .ff-api-path{text-decoration:line-through;color:var(--text-3)}.ff-prose .ff-video{margin:1.5em 0}.ff-prose .ff-video-frame-wrap{position:relative;width:100%;padding-top:56.25%;border-radius:var(--r-md);overflow:hidden;background:#000}.ff-prose .ff-video-frame-wrap>iframe,.ff-prose .ff-video-frame-wrap>video{position:absolute;inset:0;width:100%;height:100%;border:0}.ff-prose .ff-video-caption{display:flex;flex-wrap:wrap;justify-content:space-between;gap:4px 12px;margin-top:8px;font-size:.8125em;color:var(--text-3)}.ff-prose .ff-video-error{padding:12px 14px;border-radius:var(--r-md);background:var(--danger-soft);color:var(--text);font-size:.875em}.ff-prose .ff-hl,.ff-hl{background:var(--warning-soft);color:inherit;border-radius:var(--r-xs);padding:0 1px}@media(max-width:640px){.ff-prose h1{font-size:1.5em}.ff-prose h2{margin-top:2.5em;font-size:1.25em}.ff-prose pre{margin-left:-16px;margin-right:-16px;border-left:0;border-right:0;border-radius:0;padding-left:16px;padding-right:16px}.ff-prose .ff-code{margin-left:-16px;margin-right:-16px;border-left:0;border-right:0;border-radius:0}.ff-prose .ff-code>pre{margin:0}.ff-prose table{display:block;overflow-x:auto;-webkit-overflow-scrolling:touch}.ff-prose .ff-table-wrap>table{display:table;overflow:visible}.ff-prose .ff-callout,.ff-prose .ff-container{padding:12px 14px 13px}}@media print{.ff-prose a[href^=http]:after{content:" (" attr(href) ")";font-size:.8em;color:#555}.ff-prose pre,.ff-prose .ff-callout,.ff-prose .ff-container{break-inside:avoid}.ff-prose .header-anchor,.ff-prose .ff-anchor,.ff-prose .ff-anchor-tip{display:none}.ff-prose h1>a[href^="#"]:after,.ff-prose h2>a[href^="#"]:after,.ff-prose h3>a[href^="#"]:after,.ff-prose h4>a[href^="#"]:after{content:none}}.ff-prose{--ff-mask-info: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='%23000' stroke-width='2.25' stroke-linecap='round' stroke-linejoin='round'%3E%3Ccircle cx='12' cy='12' r='8.75'/%3E%3Cpath d='M12 11v5.25M12 7.75v.01'/%3E%3C/svg%3E");--ff-mask-bulb: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='%23000' stroke-width='2.25' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='M9.25 18h5.5M10.25 21h3.5M12 3.25a5.75 5.75 0 0 0-3.4 10.4c.6.45.9 1.2.9 1.95V16h5v-.4c0-.75.3-1.5.9-1.95A5.75 5.75 0 0 0 12 3.25Z'/%3E%3C/svg%3E");--ff-mask-alert: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='%23000' stroke-width='2.25' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='M10.4 4.6L3.1 17.4a1.85 1.85 0 0 0 1.6 2.75h14.6a1.85 1.85 0 0 0 1.6-2.75L13.6 4.6a1.85 1.85 0 0 0-3.2 0Z'/%3E%3Cpath d='M12 9.5v4.25M12 16.75v.01'/%3E%3C/svg%3E");--ff-mask-alert-circle: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='%23000' stroke-width='2.25' stroke-linecap='round' stroke-linejoin='round'%3E%3Ccircle cx='12' cy='12' r='8.75'/%3E%3Cpath d='M12 7.75V13M12 16.25v.01'/%3E%3C/svg%3E");--ff-mask-check-circle: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='%23000' stroke-width='2.25' stroke-linecap='round' stroke-linejoin='round'%3E%3Ccircle cx='12' cy='12' r='8.75'/%3E%3Cpath d='M8.25 12.25l2.6 2.6 4.9-5.1'/%3E%3C/svg%3E");--ff-mask-edit: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='%23000' stroke-width='2.25' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='M4.75 19.25h3.5L18.6 8.9a1.75 1.75 0 0 0 0-2.5l-1-1a1.75 1.75 0 0 0-2.5 0L4.75 15.75Z'/%3E%3Cpath d='M13.75 6.75l3.5 3.5'/%3E%3C/svg%3E");--ff-mask-calendar: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='%23000' stroke-width='2.25' stroke-linecap='round' stroke-linejoin='round'%3E%3Crect x='4' y='5.5' width='16' height='14.25' rx='1.5'/%3E%3Cpath d='M4 10h16M8.5 3.75v3.5M15.5 3.75v3.5'/%3E%3C/svg%3E");--ff-mask-chat: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='%23000' stroke-width='2.25' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='M19.75 11.5c0 3.85-3.45 6.75-7.75 6.75a8.6 8.6 0 0 1-3.2-.6L4.75 19l1.1-3.3a6.3 6.3 0 0 1-1.6-4.2c0-3.85 3.45-6.75 7.75-6.75s7.75 2.9 7.75 6.75Z'/%3E%3C/svg%3E");--ff-mask-type: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='%23000' stroke-width='2.25' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='M4 7.5V5.5h9v2M8.5 5.5v13M7 18.5h3M14.5 11.5v-1.25h5.5v1.25M17.25 10.25v8.25M16 18.5h2.5'/%3E%3C/svg%3E");--ff-mask-sliders: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='%23000' stroke-width='2.25' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='M4 7.5h9.5M18.5 7.5H20M4 16.5h2.5M11.5 16.5H20'/%3E%3Ccircle cx='16' cy='7.5' r='2.25'/%3E%3Ccircle cx='9' cy='16.5' r='2.25'/%3E%3C/svg%3E");--ff-mask-hash: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='%23000' stroke-width='2.25' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='M9.5 4.5l-2 15M16.5 4.5l-2 15M5 9h14.5M4.5 15H19'/%3E%3C/svg%3E")}:root{--bg-deep: var(--bg-subtle);--bg-base: var(--bg);--bg-surface: var(--surface);--bg-card: var(--surface);--bg-hover: var(--surface-hover);--bg-elev: var(--surface-raised);--border-subtle: var(--line);--border-default: var(--line);--border-glow: var(--line-strong);--accent-primary: var(--brand);--accent-cyan: var(--info);--accent-green: var(--success);--accent-amber: var(--warning);--accent-red: var(--danger);--accent-pink: var(--text-2);--accent-purple: var(--text-2);--accent-blue: var(--info);--text-primary: var(--text);--text-secondary: var(--text-2);--text-muted: var(--text-3);--glow-primary: none;--glow-cyan: none;--shadow-card: none;--shadow-elev: var(--shadow-pop)}.ff-text-muted{color:var(--text-3)}.ff-text-secondary{color:var(--text-2)}.ff-flex{display:flex}.ff-flex-between{display:flex;align-items:center;justify-content:space-between}.ff-gap-sm{gap:8px}.ff-gap-md{gap:16px}.page{padding:20px 24px}.page-head{display:flex;flex-wrap:wrap;align-items:center;justify-content:space-between;gap:12px;margin-bottom:20px}.page-head h2{font-size:var(--fs-20);line-height:1.25;font-weight:var(--fw-semibold)}.page-head .head-actions{display:flex;flex-wrap:wrap;align-items:center;gap:8px}.m-card{display:flex;flex-direction:column;min-width:0;background:var(--surface);border:var(--border);border-radius:var(--r-md);overflow:hidden}.m-card__head{display:flex;align-items:center;justify-content:space-between;gap:8px;padding:12px 16px;border-bottom:var(--border);font-size:var(--fs-14);font-weight:var(--fw-semibold)}.m-card__body{flex:1;min-width:0;padding:16px}.m-card__foot{padding:12px 16px;border-top:var(--border);background:var(--bg-subtle)}html{scroll-padding-top:calc(var(--topbar-h) + 24px)}.pg{max-width:1200px;margin:0 auto;padding:40px max(24px,var(--safe-right)) 88px max(24px,var(--safe-left))}.pg--narrow{max-width:880px}.crumb{display:flex;flex-wrap:wrap;align-items:center;gap:4px 8px;min-width:0;font-size:var(--fs-13);line-height:1.6;color:var(--text-3)}.crumb a{transition:color var(--dur-fast) var(--ease)}.crumb .sep{color:var(--line-strong)}.crumb [aria-current]{color:var(--text)}@media(hover:hover){.crumb a:hover{color:var(--text)}}.pg-title{font-size:var(--fs-30);line-height:1.3;font-weight:var(--fw-semibold);letter-spacing:-.005em;overflow-wrap:anywhere}.pg-crumb+.pg-title{margin-top:18px}.pg-lede{margin-top:16px;max-width:40em;font-size:var(--fs-17);line-height:1.85;color:var(--text-2);overflow-wrap:anywhere}.pg-meta{display:flex;flex-wrap:wrap;align-items:center;gap:6px 16px;margin-top:14px;font-size:var(--fs-13);color:var(--text-3)}.pg-meta>span{display:inline-flex;align-items:center;gap:6px}.pg-meta .tags{display:inline-flex;flex-wrap:wrap;gap:6px}.sec{display:grid;grid-template-columns:240px minmax(0,1fr);gap:24px 64px;padding:56px 0 64px;border-top:var(--border)}.sec-h{align-self:start;position:-webkit-sticky;position:sticky;top:calc(var(--topbar-h) + 32px)}.sec-no{font-family:var(--font-mono);font-size:var(--fs-12);color:var(--text-3)}.sec-t{margin-top:10px;font-size:var(--fs-22);line-height:1.4;font-weight:var(--fw-semibold);overflow-wrap:anywhere}.sec-t a{transition:color var(--dur-fast) var(--ease)}.sec-d{margin-top:12px;font-size:var(--fs-14);line-height:1.8;color:var(--text-2)}.sec-more{margin-top:14px}@media(hover:hover){.sec-t a:hover{color:var(--brand)}}.grp-t{display:flex;align-items:baseline;justify-content:space-between;gap:12px;padding-bottom:10px;border-bottom:1px solid var(--rule);font-size:var(--fs-13);font-weight:var(--fw-medium);color:var(--text-2)}.grp-t a{transition:color var(--dur-fast) var(--ease)}.grp-t .n{font-weight:var(--fw-regular);color:var(--text-3);white-space:nowrap}.grp+.grp{margin-top:36px}@media(hover:hover){.grp-t a:hover{color:var(--brand)}}.rows{display:block}.row{display:grid;grid-template-columns:minmax(0,1fr) auto;gap:4px 24px;padding:16px 0 17px;border-bottom:var(--border);color:inherit}.row-t{display:flex;flex-wrap:wrap;align-items:baseline;gap:2px 10px;min-width:0;font-size:var(--fs-15);font-weight:var(--fw-semibold);line-height:1.55;transition:color var(--dur-fast) var(--ease)}.row-t .id{font-family:var(--font-mono);font-size:var(--fs-12);font-weight:var(--fw-regular);color:var(--text-3);overflow-wrap:anywhere}.row-d{grid-column:1;font-size:var(--fs-14);line-height:1.75;color:var(--text-2);overflow-wrap:anywhere}.row-m{grid-column:2;grid-row:1 / span 2;align-self:start;padding-top:3px;font-size:var(--fs-13);color:var(--text-3);white-space:nowrap;text-align:right}.row-sub{grid-column:1;margin-top:2px;font-size:var(--fs-12);color:var(--text-3);overflow-wrap:anywhere}.row .no{font-family:var(--font-mono);font-size:var(--fs-12);font-weight:var(--fw-regular);color:var(--text-3)}.row--compact{padding:11px 0 12px}.row--compact .row-t{font-size:var(--fs-14);font-weight:var(--fw-medium)}@media(hover:hover){a.row:hover .row-t{color:var(--brand)}}a.row:focus-visible{outline-offset:-2px}.pin{display:inline-flex;align-items:center;gap:3px;font-size:var(--fs-12);font-weight:var(--fw-regular);color:var(--brand)}.dl{display:grid;grid-template-columns:264px minmax(0,1fr) 224px;max-width:1440px;margin:0 auto}.dl--two{grid-template-columns:264px minmax(0,1fr)}.dnav{position:-webkit-sticky;position:sticky;top:var(--topbar-h);align-self:start;height:calc(100vh - var(--topbar-h));overflow-y:auto;overscroll-behavior:contain;padding:28px 16px 40px max(24px,var(--safe-left));border-right:var(--border);scrollbar-width:thin}.dnav-proj{padding:0 8px 18px;border-bottom:var(--border)}.dnav-cat{display:inline-flex;align-items:center;gap:6px;max-width:100%;font-size:var(--fs-12);color:var(--text-3);transition:color var(--dur-fast) var(--ease)}.dnav-cat span{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.dnav-name{display:block;margin-top:10px;font-size:var(--fs-16);font-weight:var(--fw-semibold);line-height:1.4;overflow-wrap:anywhere}.dnav-id{font-family:var(--font-mono);font-size:var(--fs-12);color:var(--text-3);overflow-wrap:anywhere}.dnav-ver{display:inline-flex;align-items:center;height:24px;margin-top:12px;padding:0 8px;border-radius:var(--r-sm);box-shadow:inset 0 0 0 1px var(--line-strong);background:var(--surface);font-family:var(--font-mono);font-size:var(--fs-12);color:var(--text-2)}.dnav-sec{margin:22px 0 6px;padding:0 8px;font-size:var(--fs-12);color:var(--text-3)}.dlist a,.dlist button{display:flex;align-items:center;gap:8px;width:100%;padding:6px 8px;border-radius:var(--r-sm);font-size:var(--fs-14);line-height:1.5;text-align:left;color:var(--text-2);transition:background-color var(--dur-fast) var(--ease),color var(--dur-fast) var(--ease)}.dlist a>span:first-child{min-width:0;overflow-wrap:anywhere}.dlist a[aria-current]{background:var(--brand-faint);color:var(--brand);font-weight:var(--fw-medium)}.dlist .id{margin-left:auto;max-width:45%;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;font-family:var(--font-mono);font-size:11px;color:var(--text-3)}.dlist .more{font-size:var(--fs-13);color:var(--text-3)}.dlist .lv1{padding-left:20px}.dlist .lv2{padding-left:32px}.dlist .lv3{padding-left:44px}.dlist .lv4{padding-left:56px}.dlist .cnt{margin-left:auto;font-size:var(--fs-12);color:var(--text-3)}@media(hover:hover){.dnav-cat:hover{color:var(--text)}.dlist a:hover,.dlist button:hover{background:var(--surface-hover);color:var(--text)}.dlist a[aria-current]:hover{background:var(--brand-faint);color:var(--brand)}}.dmain{min-width:0;padding:28px 56px 88px}.dmain-in{max-width:var(--prose-max);margin:0 auto}.dmain-in--wide{max-width:880px}.dtoc{position:-webkit-sticky;position:sticky;top:var(--topbar-h);align-self:start;height:calc(100vh - var(--topbar-h));overflow-y:auto;padding:36px max(24px,var(--safe-right)) 24px 4px;scrollbar-width:thin}.toc-t{margin-bottom:10px;font-size:var(--fs-12);color:var(--text-3)}.toc a{display:block;padding:5px 0 5px 12px;border-left:1px solid var(--line);font-size:var(--fs-13);line-height:1.5;color:var(--text-2);overflow-wrap:anywhere;transition:color var(--dur-fast) var(--ease),border-color var(--dur-fast) var(--ease)}.toc a.l3{padding-left:24px}.toc a[aria-current]{color:var(--brand);border-left-color:var(--brand)}@media(hover:hover){.toc a:hover{color:var(--text)}.toc a[aria-current]:hover{color:var(--brand)}}.toc-tools{display:flex;align-items:center;justify-content:space-between;gap:8px;margin-top:24px;padding-top:16px;border-top:var(--border);font-size:var(--fs-12);color:var(--text-3)}.fs-ctl{display:inline-flex;border-radius:var(--r-sm);box-shadow:inset 0 0 0 1px var(--line-strong)}.fs-ctl button{width:30px;height:26px;font-size:var(--fs-12);color:var(--text-2);transition:color var(--dur-fast) var(--ease),background-color var(--dur-fast) var(--ease)}.fs-ctl button+button{box-shadow:-1px 0 0 var(--line-strong)}.fs-ctl button:disabled{color:var(--text-disabled);cursor:not-allowed}@media(hover:hover){.fs-ctl button:not(:disabled):hover{color:var(--text);background:var(--surface-hover)}}@media(pointer:coarse){.fs-ctl button{width:44px;height:44px;font-size:var(--fs-14)}}.toc-links{display:grid;gap:2px;margin-top:12px;justify-items:start}.toc-links button,.toc-links a{display:inline-flex;align-items:center;gap:4px;min-height:28px;font-size:var(--fs-12);color:var(--text-3);transition:color var(--dur-fast) var(--ease)}@media(hover:hover){.toc-links button:hover,.toc-links a:hover{color:var(--text)}}.mbar{display:none}@media(max-width:1240px){.dl{grid-template-columns:248px minmax(0,1fr)}.dtoc{display:none}.dmain{padding:28px 40px 88px}}@media(max-width:900px){.dl,.dl--two{grid-template-columns:minmax(0,1fr)}.dnav{display:none}.dmain{padding:20px max(16px,var(--safe-right)) 64px max(16px,var(--safe-left))}.mbar{position:-webkit-sticky;position:sticky;top:var(--topbar-h);z-index:calc(var(--z-sticky) - 2);display:flex;align-items:center;gap:8px;height:44px;padding:0 max(4px,var(--safe-right)) 0 max(16px,var(--safe-left));background:var(--bg);border-bottom:var(--border);font-size:var(--fs-13);color:var(--text-3)}.mbar-here{min-width:0;flex:1;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.mbar-here b{color:var(--text);font-weight:var(--fw-medium)}.mbar-btn{display:inline-flex;align-items:center;gap:6px;height:44px;padding:0 12px;color:var(--text-2);font-size:var(--fs-13)}}@media(min-width:901px)and (max-width:1240px){.mbar{position:-webkit-sticky;position:sticky;top:var(--topbar-h);z-index:calc(var(--z-sticky) - 2);display:flex;justify-content:flex-end;height:0;overflow:visible}.mbar-here{display:none}.mbar-btn{display:inline-flex;align-items:center;gap:6px;height:32px;margin:8px 16px 0 0;padding:0 10px;border-radius:var(--r-sm);background:var(--surface-raised);color:var(--text-2);box-shadow:inset 0 0 0 1px var(--line-strong),var(--shadow-pop);font-size:var(--fs-13)}}.sheet-mask{position:fixed;inset:0;z-index:var(--z-drawer);background:var(--overlay)}.sheet{position:fixed;z-index:calc(var(--z-drawer) + 1);display:flex;flex-direction:column;background:var(--surface-raised);box-shadow:var(--shadow-modal)}.sheet-h{display:flex;align-items:center;justify-content:space-between;gap:8px;flex:none;height:52px;padding:0 8px 0 20px;border-bottom:var(--border);font-size:var(--fs-15);font-weight:var(--fw-semibold)}.sheet-b{flex:1 1 auto;min-height:0;overflow-y:auto;overscroll-behavior:contain;-webkit-overflow-scrolling:touch;padding:16px 20px max(24px,var(--safe-bottom))}@media(max-width:640px){.sheet{left:0;right:0;bottom:0;max-height:82vh;border-radius:var(--r-lg) var(--r-lg) 0 0;padding-left:var(--safe-left);padding-right:var(--safe-right)}}@media(min-width:641px){.sheet{top:0;right:0;bottom:0;width:340px;max-width:86vw;padding-right:var(--safe-right)}}.sheet-enter-active,.sheet-leave-active{transition:transform var(--dur-slow) var(--ease),opacity var(--dur-slow) var(--ease)}.sheet-mask-enter-active,.sheet-mask-leave-active{transition:opacity var(--dur-slow) var(--ease)}.sheet-mask-enter-from,.sheet-mask-leave-to{opacity:0}@media(max-width:640px){.sheet-enter-from,.sheet-leave-to{transform:translateY(100%)}}@media(min-width:641px){.sheet-enter-from,.sheet-leave-to{transform:translate(100%)}}.ff-prose .ff-code-h .lang{min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.ff-prose .ff-code-h .copy{display:inline-flex;align-items:center;gap:4px;height:28px;padding:0 8px;border-radius:var(--r-sm);font-family:var(--font-sans);font-size:var(--fs-12);color:var(--text-3);transition:color var(--dur-fast) var(--ease),background-color var(--dur-fast) var(--ease)}.ff-prose .ff-code-h .copy.is-ok{color:var(--success)}.ff-prose .ff-code-h .copy.is-err{color:var(--danger)}@media(hover:hover){.ff-prose .ff-code-h .copy:hover{color:var(--text);background:var(--surface-hover)}}@media(pointer:coarse){.ff-prose .ff-code-h .copy{height:36px;padding:0 10px}}.ff-prose .ff-mermaid{margin:1.25em 0;padding:16px;border:var(--border);border-radius:var(--r-md);background:var(--surface);overflow-x:auto;text-align:center;line-height:1.4}.ff-prose .ff-mermaid svg{max-width:100%;height:auto}.ff-prose .ff-mermaid.is-loading{min-height:96px}.ff-prose .ff-mermaid-err{margin-top:8px;font-size:var(--fs-12);color:var(--text-3);text-align:left}.ff-prose .ff-math-block{margin:1.25em 0;overflow-x:auto;overflow-y:hidden;padding:4px 0;text-align:center}.ff-prose .katex{font-size:1.08em}.ff-prose .katex-display{margin:0}.ff-prose img.is-zoomable{cursor:zoom-in}.ff-prose img.is-broken{display:inline-block;min-width:160px;min-height:48px;padding:12px;border:1px dashed var(--line-strong);color:var(--text-3);font-size:var(--fs-13)}.lightbox{position:fixed;inset:0;z-index:var(--z-modal);display:flex;align-items:center;justify-content:center;padding:max(56px,var(--safe-top)) max(16px,var(--safe-right)) max(24px,var(--safe-bottom)) max(16px,var(--safe-left));background:#12100edb;cursor:zoom-out}.lightbox img{max-width:100%;max-height:100%;object-fit:contain;border-radius:var(--r-sm);background:var(--surface);cursor:default}.lightbox-x{position:absolute;top:max(12px,var(--safe-top));right:max(12px,var(--safe-right));width:40px;height:40px;display:inline-flex;align-items:center;justify-content:center;border-radius:var(--r-md);color:#ede7dd;background:#ffffff14}.lightbox-cap{position:absolute;left:0;right:0;bottom:max(12px,var(--safe-bottom));text-align:center;font-size:var(--fs-13);color:#bdb3a5;padding:0 16px}@media(hover:hover){.lightbox-x:hover{background:#ffffff29}}.fade-enter-active,.fade-leave-active{transition:opacity var(--dur) var(--ease)}.fade-enter-from,.fade-leave-to{opacity:0}.read-progress{position:fixed;top:calc(var(--topbar-h) - 1px);left:0;z-index:calc(var(--z-sticky) + 1);height:2px;width:100%;background:var(--brand);transform-origin:0 50%;transform:scaleX(0);pointer-events:none}@media(max-width:1080px){.sec{grid-template-columns:200px minmax(0,1fr);gap:24px 40px}}@media(max-width:900px){.pg{padding-top:28px;padding-bottom:64px}.sec{grid-template-columns:minmax(0,1fr);gap:20px;padding:40px 0 48px}.sec-h{position:static}.sec-t{margin-top:6px;font-size:var(--fs-20)}}@media(max-width:640px){.pg{padding:24px max(16px,var(--safe-right)) 56px max(16px,var(--safe-left))}.pg-title{font-size:25px}.pg-lede{font-size:var(--fs-16)}.row{grid-template-columns:minmax(0,1fr);padding:14px 0 15px}.row-m{grid-column:1;grid-row:auto;padding-top:0;text-align:left;white-space:normal}}@media print{.dnav,.dtoc,.mbar,.read-progress,.ff-site-header,.ff-site-footer{display:none!important}.dl{display:block}.dmain{padding:0}}.ff-offline{position:-webkit-sticky;position:sticky;top:0;z-index:calc(var(--z-sticky) + 1)}.ff-offline-in{display:flex;align-items:center;justify-content:center;gap:8px;min-height:36px;padding:6px max(16px,var(--safe-right)) 6px max(16px,var(--safe-left));background:var(--warning-soft);color:var(--text);border-bottom:1px solid var(--warning-line);font-size:var(--fs-13);line-height:1.5}.ff-offline-in>.ff-icon{flex:none;color:var(--warning)}.ff-offline-t{min-width:0}.ff-offline-x{flex:none;margin:-4px -8px -4px 4px;color:var(--text-2)}@media(max-width:640px){.ff-offline-in{justify-content:flex-start;font-size:var(--fs-12)}}@media print{.ff-offline{display:none}}html.is-offline .ff-site-header,html.is-offline .ff-adm-topbar{top:var(--ff-offline-h, 36px)}@media(min-width:901px){html.is-offline .ff-adm-sidebar{top:var(--ff-offline-h, 36px);height:calc(100vh - var(--ff-offline-h, 36px));height:calc(100dvh - var(--ff-offline-h, 36px))}}
