*{box-sizing:border-box}html{scroll-behavior:smooth}body{margin:0;font-family:inter,sans-serif;-webkit-font-smoothing:antialiased}@keyframes ftfade{from{opacity:0;transform:translateY(6px)}to{opacity:1;transform:none}}#ftstd-root{--pink:#E96092;--pink-600:#D52454;--pink-700:#C0087F;--blue:#105DBA;--purple:#783171;--orange:#E9681A;--green:#1F8A5B;--red:#D52454;--bg:#FFFFFF;--surface:#FAFAFA;--surface-2:#F5F5F5;--fg-1:#232326;--fg-2:#555558;--fg-3:#8A8A8E;--border:#E7E7E9;--border-soft:#F0F0F1;--link:#105DBA;--link-hover:#0C4A96;--code-bg:#FAFAFA;--code-border:#ECECEE;--code-fg:#2C2C2C;--good-bg:#F0FAF4;--good-bd:#BDE6CE;--good-fg:#1F8A5B;--bad-bg:#FDF0F4;--bad-bd:#F3C5D4;--bad-fg:#D52454;--info-bg:#EEF4FC;--info-bd:#C6DCF5;--info-fg:#105DBA;--warn-bg:#FFF6EC;--warn-bd:#F6D9B8;--warn-fg:#C2620F;--quote-bg:#FBF2F6;--quote-bd:#E96092;--hx1:#E96092;--hx2:#F4A300;--hx3:#E54F35;--hx4:#FFDB14;--hx5:#832081;--hx6:#63B6E6;background:var(--bg);color:var(--fg-1)}#ftstd-root[data-theme=dark]{--bg:#131316;--surface:#1A1A1E;--surface-2:#212126;--fg-1:#ECECEE;--fg-2:#B0B0B6;--fg-3:#7C7C84;--border:#2C2C32;--border-soft:#242429;--link:#6FA8E8;--link-hover:#93C0F2;--code-bg:#0E0E11;--code-border:#26262C;--code-fg:#E3E3E6;--good-bg:#122019;--good-bd:#234C38;--good-fg:#5BC98A;--bad-bg:#251218;--bad-bd:#5A2638;--bad-fg:#F07399;--info-bg:#101D2E;--info-bd:#234063;--info-fg:#6FA8E8;--warn-bg:#261B0E;--warn-bd:#5A431F;--warn-fg:#E9A24A;--quote-bg:#1E141A;--quote-bd:#E96092}.ftstd-shell{display:grid;grid-template-columns:312px minmax(0,1fr);min-height:100vh;background:var(--bg);transition:grid-template-columns .2s ease}.sidebar{position:sticky;top:0;align-self:start;height:100vh;overflow-y:auto;border-right:1px solid var(--border);background:var(--surface);padding:24px 22px 32px}.sb-head{display:flex;align-items:flex-start;justify-content:space-between;gap:10px;margin-bottom:6px}.sb-collapse{flex:none;width:32px;height:32px;border-radius:9px;border:1px solid var(--border);background:var(--bg);color:var(--fg-2);cursor:pointer;display:flex;align-items:center;justify-content:center;transition:background .12s,color .12s}.sb-collapse:hover{background:var(--surface-2);color:var(--fg-1)}.sb-collapse svg{width:17px;height:17px}.sb-brand{display:flex;align-items:center;gap:11px;padding-top:3px;padding-left:4px;text-decoration:none}.nav-fab{position:fixed;top:16px;left:16px;z-index:50;width:44px;height:44px;border-radius:12px;border:1px solid var(--border);background:var(--bg);color:var(--fg-1);display:none;align-items:center;justify-content:center;cursor:pointer;box-shadow:0 2px 10px rgba(0,0,0,.1)}.nav-fab:hover{background:var(--surface-2)}.nav-fab svg{width:21px;height:21px}.nav-backdrop{display:none}.sb-brand .logo-mark{width:30px;height:34px;display:block}.sb-brand .logo-word{height:14px;display:block}.logo-word-dark{display:none}#ftstd-root[data-theme=dark] .logo-word-dark{display:block}#ftstd-root[data-theme=dark] .logo-word-light{display:none}.sb-tag{font-size:11px;letter-spacing:.14em;text-transform:uppercase;color:var(--fg-3);font-weight:700;margin:0 0 26px 45px}.toc{margin:0}.toc-group{margin-bottom:20px}.toc-group>.toc-cat{font-size:10.5px;letter-spacing:.16em;text-transform:uppercase;color:var(--fg-3);font-weight:700;padding:0 8px;margin:0 0 7px}#ftstd-toc ul{list-style:none;margin:0;padding:0}#ftstd-toc a{display:flex;align-items:baseline;gap:9px;text-decoration:none;color:var(--fg-2);font-size:13.5px;line-height:1.3;font-weight:500;padding:6px 8px;border-radius:7px;transition:background .12s ease,color .12s ease}#ftstd-toc a .toc-num{font-family:noto sans mono,monospace;font-size:11px;color:var(--fg-3);font-weight:500;flex:none;width:18px}#ftstd-toc a:hover{background:var(--surface-2);color:var(--fg-1)}#ftstd-toc a.is-active{background:var(--bg);color:var(--pink);font-weight:700;box-shadow:inset 0 0 0 1px var(--border)}#ftstd-toc a.is-active .toc-num{color:var(--pink)}#ftstd-root[data-theme=dark] #ftstd-toc a.is-active{background:rgba(233,96,146,.1);box-shadow:inset 0 0 0 1px rgba(233,96,146,.25)}.ctrl{position:fixed;top:18px;right:22px;z-index:40;display:flex;gap:8px;background:var(--bg);border:1px solid var(--border);border-radius:999px;padding:5px;box-shadow:0 2px 8px rgba(0,0,0,6%)}#ftstd-root[data-theme=dark] .ctrl{box-shadow:0 2px 12px rgba(0,0,0,.4)}.seg{display:flex;gap:2px}.seg button{font-family:inter,sans-serif;font-size:12px;font-weight:600;cursor:pointer;border:none;background:0 0;color:var(--fg-2);padding:6px 11px;border-radius:999px;transition:background .12s ease,color .12s ease;white-space:nowrap}.seg button:hover{color:var(--fg-1)}.ctrl-label{font-size:11px;font-weight:700;letter-spacing:.12em;text-transform:uppercase;color:var(--fg-3);align-self:center;padding:0 8px 0 6px}#ftstd-root[data-theme=light] [data-set-theme=light],#ftstd-root[data-theme=dark] [data-set-theme=dark]{background:var(--fg-1);color:var(--bg)}.main{max-width:920px;margin:0 auto;padding:0 56px 140px;width:100%}.hero{position:relative;padding:92px 0 30px;margin-bottom:22px;overflow:hidden}.hero-kicker{display:inline-block;font-size:12px;font-weight:700;letter-spacing:.16em;text-transform:uppercase;color:var(--pink);margin-bottom:20px}.hero-title{font-size:68px;line-height:.98;letter-spacing:-.035em;font-weight:700;margin:0 0 22px;color:var(--fg-1)}.hero-sub{font-size:19px;line-height:1.6;color:var(--fg-2);max-width:60ch;margin:0 0 28px}.hero-meta{display:flex;flex-wrap:wrap;gap:10px 14px;align-items:center}.hero-meta .chip{font-size:12.5px;font-weight:600;color:var(--fg-2);background:var(--surface);border:1px solid var(--border);padding:6px 13px;border-radius:999px}.hero-meta .chip b{color:var(--pink)}.hero-hex{position:absolute;right:16px;top:28px;width:232px;max-width:38%;opacity:.14;pointer-events:none}section[data-section]{padding-top:30px;scroll-margin-top:18px;animation:ftfade .4s ease both}.sec-head{margin-bottom:22px}.sec-kicker{display:inline-flex;align-items:center;gap:9px;font-size:11.5px;font-weight:700;letter-spacing:.14em;text-transform:uppercase;color:var(--pink);margin-bottom:12px}.sec-kicker .k-num{font-family:noto sans mono,monospace}.sec-kicker .k-dot{width:4px;height:4px;border-radius:50%;background:var(--pink);display:inline-block}.sec-title{font-size:34px;line-height:1.12;letter-spacing:-.022em;font-weight:700;margin:0;color:var(--fg-1);display:flex;align-items:center;gap:14px}.sec-title .sec-emoji{font-size:30px;line-height:1}.sec-rule{height:1px;background:var(--border);margin:22px 0 0;border:0}.prose{font-size:17px;line-height:1.75;color:var(--fg-1)}.prose>:first-child{margin-top:0}.prose p{margin:0 0 18px;color:var(--fg-1)}.prose h1{font-size:26px;line-height:1.2;font-weight:700;letter-spacing:-.012em;margin:44px 0 16px;color:var(--fg-1)}.prose h2{font-size:22px;line-height:1.25;font-weight:700;letter-spacing:-.01em;margin:40px 0 14px;color:var(--fg-1)}.prose h3{font-size:18.5px;line-height:1.3;font-weight:700;margin:32px 0 12px;color:var(--fg-1)}.prose h4{font-size:16.5px;font-weight:700;margin:28px 0 10px;color:var(--fg-1)}.prose h2 .e,.prose h3 .e,.prose h4 .e{margin-right:7px}.prose a{color:var(--link);text-decoration:none;border-bottom:1px solid color-mix(in srgb,var(--link) 35%,transparent);transition:color .12s,border-color .12s}.prose a:hover{color:var(--link-hover);border-bottom-color:var(--link-hover)}.prose strong{font-weight:700;color:var(--fg-1)}.prose em{font-style:italic}.prose ul,.prose ol{margin:0 0 18px;padding-left:24px}.prose li{margin:0 0 9px;padding-left:4px}.prose li::marker{color:var(--pink);font-weight:700}.prose ul li::marker{color:var(--fg-3)}.prose hr{border:0;height:1px;background:var(--border);margin:34px 0}.prose code{font-family:noto sans mono,monospace;font-size:.86em;background:var(--surface-2);border:1px solid var(--border-soft);color:var(--pink-700);padding:2px 6px;border-radius:5px}#ftstd-root[data-theme=dark] .prose code{color:#f2a6c4}.prose pre{margin:0 0 18px}.prose pre code{display:block;font-size:13.5px;line-height:1.62;background:var(--code-bg);border:1px solid var(--code-border);color:var(--code-fg);padding:16px 18px;border-radius:10px;overflow-x:auto;white-space:pre;font-family:noto sans mono,monospace}.hljs-comment,.hljs-quote{color:#8a8a8e;font-style:italic}.hljs-keyword,.hljs-selector-tag,.hljs-literal,.hljs-doctag,.hljs-meta .hljs-keyword{color:#c0087f}.hljs-string,.hljs-attr,.hljs-template-string,.hljs-addition,.hljs-regexp{color:#1b7f50}.hljs-number,.hljs-meta,.hljs-link{color:#c2620f}.hljs-title,.hljs-title.function_,.hljs-section,.hljs-name{color:#105dba}.hljs-built_in,.hljs-type,.hljs-class .hljs-title,.hljs-symbol{color:#783171}.hljs-tag{color:#8a8a8e}.hljs-attribute,.hljs-variable,.hljs-params,.hljs-property{color:var(--code-fg)}.hljs-deletion{color:#d52454}.hljs-emphasis{font-style:italic}.hljs-strong{font-weight:700}#ftstd-root[data-theme=dark] .hljs-comment,#ftstd-root[data-theme=dark] .hljs-quote{color:#6e6e78}#ftstd-root[data-theme=dark] .hljs-keyword,#ftstd-root[data-theme=dark] .hljs-selector-tag,#ftstd-root[data-theme=dark] .hljs-literal,#ftstd-root[data-theme=dark] .hljs-doctag{color:#f2a6c4}#ftstd-root[data-theme=dark] .hljs-string,#ftstd-root[data-theme=dark] .hljs-attr,#ftstd-root[data-theme=dark] .hljs-template-string,#ftstd-root[data-theme=dark] .hljs-addition,#ftstd-root[data-theme=dark] .hljs-regexp{color:#79d3a0}#ftstd-root[data-theme=dark] .hljs-number,#ftstd-root[data-theme=dark] .hljs-meta{color:#e9a24a}#ftstd-root[data-theme=dark] .hljs-title,#ftstd-root[data-theme=dark] .hljs-title.function_,#ftstd-root[data-theme=dark] .hljs-section,#ftstd-root[data-theme=dark] .hljs-name{color:#79aeec}#ftstd-root[data-theme=dark] .hljs-built_in,#ftstd-root[data-theme=dark] .hljs-type,#ftstd-root[data-theme=dark] .hljs-symbol{color:#c99be8}#ftstd-root[data-theme=dark] .hljs-tag{color:#8a8a94}#ftstd-root[data-theme=dark] .hljs-attribute,#ftstd-root[data-theme=dark] .hljs-variable,#ftstd-root[data-theme=dark] .hljs-params,#ftstd-root[data-theme=dark] .hljs-property{color:var(--code-fg)}.prose table{width:100%;border-collapse:collapse;margin:0 0 22px;font-size:14.5px;border:1px solid var(--border);border-radius:10px;overflow:hidden;display:table}.prose th{text-align:left;font-weight:700;font-size:12px;letter-spacing:.04em;text-transform:uppercase;color:var(--fg-2);background:var(--surface-2);padding:11px 14px;border-bottom:1px solid var(--border)}.prose td{padding:11px 14px;border-bottom:1px solid var(--border-soft);color:var(--fg-1);vertical-align:top}.prose tbody tr:nth-child(even){background:var(--surface)}.prose tbody tr:last-child td{border-bottom:0}.prose td code{font-size:.82em}.callout{display:flex;gap:13px;padding:14px 17px;border-radius:10px;margin:0 0 20px;font-size:15.5px;line-height:1.6;border:1px solid}.callout .ci{font-size:18px;line-height:1.5;flex:none}.callout p{margin:0}.callout p+p{margin-top:10px}.callout.info{background:var(--info-bg);border-color:var(--info-bd);color:var(--fg-1)}.callout.warn{background:var(--warn-bg);border-color:var(--warn-bd);color:var(--fg-1)}.callout.note{background:var(--quote-bg);border-color:color-mix(in srgb,var(--pink) 35%,transparent);color:var(--fg-1)}blockquote{margin:0 0 20px;padding:14px 20px;background:var(--quote-bg);border-left:3px solid var(--quote-bd);border-radius:0 10px 10px 0;color:var(--fg-1);font-size:16px;line-height:1.6}blockquote p{margin:0}blockquote p+p{margin-top:10px}blockquote strong{color:var(--pink-700)}#ftstd-root[data-theme=dark] blockquote strong{color:#f2a6c4}.prose .split{display:grid;grid-template-columns:1fr 1fr;column-gap:14px;row-gap:0;margin:0 0 22px}.prose .split>header,.prose .split>section{display:contents}.prose .split header aside{font-size:12.5px;font-weight:700;padding:9px 14px;border:1px solid;border-bottom:0;border-radius:11px 11px 0 0;display:flex;align-items:center;gap:7px}.prose .split header aside i{font-weight:400;font-style:italic;color:var(--fg-3)}.prose .split header aside:first-child{color:var(--bad-fg);background:var(--bad-bg);border-color:var(--bad-bd)}.prose .split header aside:last-child{color:var(--good-fg);background:var(--good-bg);border-color:var(--good-bd)}.prose .split section aside{border:1px solid;border-top:0;border-radius:0 0 11px 11px;overflow:hidden;display:flex}.prose .split section aside:first-child{border-color:var(--bad-bd)}.prose .split section aside:last-child{border-color:var(--good-bd)}.prose .split section aside pre{margin:0;flex:1;min-width:0}.prose .split section aside pre code{border:0;border-radius:0;height:100%}@media(max-width:860px){.prose .split{grid-template-columns:1fr}.prose .split header aside:first-child{order:1}.prose .split section aside:first-child{order:2;margin-bottom:14px}.prose .split header aside:last-child{order:3}.prose .split section aside:last-child{order:4}}.doc-foot{margin-top:80px;padding-top:28px;border-top:1px solid var(--border);display:flex;align-items:center;gap:14px;flex-wrap:wrap;justify-content:space-between;color:var(--fg-3);font-size:13.5px}.doc-foot .foot-brand{display:flex;align-items:center;gap:11px}.doc-foot img{height:16px;display:block}.doc-foot a{color:var(--link);text-decoration:none}.doc-foot a:hover{color:var(--link-hover)}@media(min-width:1041px){#ftstd-root[data-nav=closed] .ftstd-shell{grid-template-columns:minmax(0,1fr)}#ftstd-root[data-nav=closed] .sidebar{display:none}#ftstd-root[data-nav=closed] .nav-fab{display:flex}}@media(max-width:1040px){.ftstd-shell{grid-template-columns:minmax(0,1fr)}.sidebar{position:fixed;top:0;left:0;height:100dvh;width:min(86vw,320px);z-index:60;border-right:1px solid var(--border);transform:translateX(-105%);transition:transform .25s ease;box-shadow:0 0 50px rgba(0,0,0,.22)}#ftstd-root[data-nav=open] .sidebar{transform:translateX(0)}#ftstd-toc{columns:1}.nav-fab{display:flex}.nav-backdrop{display:block;position:fixed;inset:0;background:rgba(0,0,0,.45);z-index:55;opacity:0;pointer-events:none;transition:opacity .2s ease}#ftstd-root[data-nav=open] .nav-backdrop{opacity:1;pointer-events:auto}.main{padding:0 24px 104px}.ctrl{top:14px;right:14px}}@media(max-width:600px){.hero{padding-top:80px}.hero-title{font-size:42px}.hero-hex{width:150px;right:-14px;top:12px;opacity:.12}.main{padding:0 18px 88px}.ctrl-label{display:none}.sec-title{font-size:27px}.sec-title .sec-emoji{font-size:24px}}@media(prefers-reduced-motion:reduce){html{scroll-behavior:auto}section[data-section]{animation:none}.ftstd-shell,.sidebar,.nav-backdrop{transition:none}}