@keyframes astroFadeInOut{0%{opacity:1}to{opacity:0}}@keyframes astroFadeIn{0%{opacity:0;mix-blend-mode:plus-lighter}to{opacity:1;mix-blend-mode:plus-lighter}}@keyframes astroFadeOut{0%{opacity:1;mix-blend-mode:plus-lighter}to{opacity:0;mix-blend-mode:plus-lighter}}@keyframes astroSlideFromRight{0%{transform:translate(100%)}}@keyframes astroSlideFromLeft{0%{transform:translate(-100%)}}@keyframes astroSlideToRight{to{transform:translate(100%)}}@keyframes astroSlideToLeft{to{transform:translate(-100%)}}@media (prefers-reduced-motion){::view-transition-group(*),::view-transition-old(*),::view-transition-new(*),[data-astro-transition-scope]{animation:none!important}}.astro-route-announcer{clip:rect(0 0 0 0);clip-path:inset(50%);white-space:nowrap;width:1px;height:1px;position:absolute;top:0;left:0;overflow:hidden}:root{--bg:#f6f6f9;--surface:#fff;--surface-2:#eeeef3;--border:#dcdce5;--fg:#16161c;--fg-2:#4a4a58;--fg-muted:#7a7a88;--accent:#5b4bd6;--accent-soft:#ebe8ff;--client:#1f7ae0;--client-soft:#e3f0ff;--server:#c2410c;--server-soft:#fed;--shared:#0f8a5f;--shared-soft:#dcf6ea;--warn:#9a6400;--warn-soft:#fff3d6;--hl:#ffe58a;--code-bg:#24292e;--code-fg:#e1e4e8;--code-kw:#f97583;--code-num:#79b8ff;--code-muted:#6a737d;--font:"Archivo", system-ui, -apple-system, "Segoe UI", sans-serif;--mono:"JetBrains Mono", ui-monospace, "Cascadia Mono", Consolas, monospace;color-scheme:light}@media (prefers-color-scheme:dark){:root{--bg:#141419;--surface:#18181f;--surface-2:#1f1f28;--border:#2a2a35;--fg:#f5f5f7;--fg-2:#b2b2bf;--fg-muted:#777784;--accent:#b3a7ff;--accent-soft:#26223f;--client:#6cb2ff;--client-soft:#142a44;--server:#ff9357;--server-soft:#3a2014;--shared:#2ee59d;--shared-soft:#0f3326;--warn:#ffb020;--warn-soft:#3a2c0c;--hl:#5a4a10;color-scheme:dark}}*{box-sizing:border-box}html,body{height:100%;margin:0}body{background:var(--bg);color:var(--fg);font-family:var(--font);font-size:15px;line-height:1.6}code,pre,kbd,input{font-family:var(--mono)}:not(pre)>code{background:var(--surface-2);border:1px solid var(--border);border-radius:4px;padding:1px 5px;font-size:.86em}a{color:var(--accent)}button{font:inherit;color:inherit}:focus-visible{outline:2px solid var(--accent);outline-offset:2px}.app{grid-template-rows:auto minmax(0,1fr);height:100%;display:grid}.bar{height:54px;padding:0 max(16px, env(safe-area-inset-right,0px)) 0 max(16px, env(safe-area-inset-left,0px));border-bottom:1px solid var(--border);background:var(--surface);align-items:center;gap:20px;display:flex}.bar .spacer{flex:1}.bar>.tabs{align-self:stretch;gap:4px;display:flex}.tabs a{color:var(--fg-2);border-bottom:2px solid #0000;align-items:center;margin-bottom:-1px;padding:0 12px;font-size:.92rem;font-weight:500;text-decoration:none;display:flex}.tabs a:hover{color:var(--fg)}.tabs a[aria-current=true]{color:var(--fg);border-bottom-color:var(--accent);font-weight:600}.menu-btn{all:unset;cursor:pointer;border-radius:7px;padding:6px;display:none}.menu-btn:hover{background:var(--surface-2)}.menu-btn svg{width:20px;height:20px;display:block}.brand{color:var(--fg);align-items:center;gap:10px;font-weight:700;text-decoration:none;display:flex}.mark{background:var(--fg);width:26px;height:26px;color:var(--bg);border-radius:7px;place-items:center;font-size:.9rem;font-weight:800;display:grid}.langs{position:relative}.lang-btn{all:unset;cursor:pointer;color:var(--fg-2);border-radius:7px;align-items:center;gap:7px;padding:5px 8px;font-size:.86rem;display:flex}.lang-btn:hover,.lang-btn[aria-expanded=true]{background:var(--surface-2);color:var(--fg)}.lang-btn svg{flex:none;width:16px;height:16px}.lang-btn .chev{opacity:.6;width:12px;height:12px}.lang-menu{z-index:20;background:var(--surface);border:1px solid var(--border);border-radius:9px;min-width:170px;margin:0;padding:4px;list-style:none;position:absolute;top:calc(100% + 6px);right:0;box-shadow:0 8px 24px #00000024}.lang-menu a{color:var(--fg-2);border-radius:6px;justify-content:space-between;align-items:center;gap:12px;padding:6px 10px;font-size:.88rem;text-decoration:none;display:flex}.lang-menu a:hover,.lang-menu a:focus-visible{background:var(--surface-2);color:var(--fg);outline:none}.lang-menu a[aria-current=true]{color:var(--fg);font-weight:600}.lang-menu a[aria-current=true]:after{content:"✓";color:var(--accent)}.main{grid-template-columns:minmax(0,40%) minmax(0,1fr);min-height:0;display:grid}.list{background:var(--surface);border-left:1px solid var(--border);grid-template-rows:minmax(0,1fr);min-height:0;display:grid}.filters{flex:1;align-items:center;gap:12px;min-width:0;display:flex}.find{border:1.5px solid var(--border);background:var(--bg);border-radius:8px;flex:auto;align-items:center;gap:8px;min-width:160px;max-width:440px;padding:6px 10px;display:flex}.find:focus-within{border-color:var(--accent)}.find input{all:unset;min-width:0;color:var(--fg);flex:1;font-size:.92rem}.find input::placeholder{color:var(--fg-muted)}kbd{border:1px solid var(--border);color:var(--fg-muted);background:var(--surface);border-bottom-width:2px;border-radius:4px;padding:0 5px;font-size:.72rem}.seg{border:1px solid var(--border);border-radius:7px;display:inline-flex;overflow:hidden}.seg button{all:unset;cursor:pointer;text-align:center;white-space:nowrap;color:var(--fg-2);padding:5px 12px;font-size:.8rem}.seg button+button{border-left:1px solid var(--border)}.seg button[aria-pressed=true]{background:var(--fg);color:var(--bg);font-weight:600}.seg button:focus-visible{outline-offset:-2px}.items{padding:0 6px 24px;position:relative;overflow-y:auto}.grp{letter-spacing:.1em;text-transform:uppercase;color:var(--fg-muted);background:var(--surface);width:100%;font-size:.7rem;font-weight:700;font-family:var(--font);z-index:1;border:0;justify-content:space-between;align-items:center;padding:12px 8px 4px;display:flex;position:sticky;top:0}.it{font-family:var(--mono);color:var(--fg-2);white-space:nowrap;text-overflow:ellipsis;border-radius:5px;align-items:center;gap:8px;padding:3px 8px;font-size:.84rem;text-decoration:none;display:flex;overflow:hidden}.it:hover{background:var(--surface-2);color:var(--fg)}.it.kb{background:var(--surface-2);color:var(--fg);box-shadow:inset 0 0 0 1px var(--border)}.it[aria-current=page]{background:var(--accent-soft);color:var(--accent);font-weight:500}.it.todo{opacity:.55}.it .ev{font-family:var(--font);color:var(--fg-muted);border:1px solid var(--border);border-radius:3px;padding:0 3px;font-size:.66rem;font-weight:700;line-height:1.4}.it mark{background:var(--hl);color:inherit;border-radius:2px}.dot{width:14px;height:14px;mask:var(--icon) center / contain no-repeat;flex:none;display:inline-block}.d-client{--icon:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='black' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath fill='black' stroke='none' d='M12 2l3.5 4.5h-7zM12 22l-3.5-4.5h7zM2 12l4.5-3.5v7zM22 12l-4.5 3.5v-7z'/%3E%3C/svg%3E");background:var(--client)}.d-server{--icon:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='black' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Crect x='3' y='3' width='18' height='7' rx='2'/%3E%3Crect x='3' y='14' width='18' height='7' rx='2'/%3E%3Cpath d='M7 6.5h.01M7 17.5h.01'/%3E%3C/svg%3E");background:var(--server)}.d-shared{--icon:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='black' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='M20 11a8 8 0 0 0-14.4-4.6L4 8M4 3.5V8h4.5M4 13a8 8 0 0 0 14.4 4.6L20 16M20 20.5V16h-4.5'/%3E%3C/svg%3E");background:var(--shared)}.none{color:var(--fg-muted);padding:20px 10px;font-size:.88rem}.page{min-width:0;overflow-y:auto}.doc{align-content:start;gap:14px;padding:20px clamp(14px,2.4vw,28px) 48px;font-size:.9rem;display:grid}.crumb{color:var(--fg-muted);font-size:.74rem}.crumb a{color:inherit;text-decoration:none}.crumb a:hover{color:var(--accent);text-decoration:underline}.code-link{text-decoration:none}.code-link:hover>code{border-color:var(--accent);color:var(--accent)}.cat-sec{gap:8px;scroll-margin-top:16px;display:grid}.cat-fn{align-items:center;gap:6px;text-decoration:none;display:inline-flex}.cat-fn:hover{text-decoration:underline}.head{gap:8px;display:grid}.head .row{flex-wrap:wrap;align-items:center;gap:8px;display:flex}.doc h1{font-family:var(--mono);letter-spacing:-.02em;overflow-wrap:anywhere;margin:0;font-size:clamp(1.1rem,1.9vw,1.4rem);font-weight:500;line-height:1.2}.doc h1.prose{font-family:var(--font);font-weight:800}.doc h2{margin:6px 0 0;font-size:.86rem;font-weight:700}.doc p{color:var(--fg-2);max-width:70ch;margin:0}.prose-body{color:var(--fg-2);gap:10px;display:grid}.prose-body h3{color:var(--fg);margin:4px 0 0;font-size:.82rem;font-weight:700}.prose-body ul{gap:4px;margin:0;padding-left:20px;display:grid}.pill{letter-spacing:.04em;text-transform:uppercase;white-space:nowrap;border-radius:99px;align-items:center;gap:6px;padding:2px 8px;font-size:.7rem;font-weight:700;display:inline-flex}.p-client{color:var(--client);background:var(--client-soft)}.p-server{color:var(--server);background:var(--server-soft)}.p-shared{color:var(--shared);background:var(--shared-soft)}.p-n{color:var(--fg-2);background:var(--surface-2)}.sig{font-family:var(--mono);background:var(--surface-2);border:1px solid var(--border);white-space:pre-wrap;overflow-wrap:anywhere;border-radius:8px;padding:10px 12px;font-size:.78rem}.sig .t{color:var(--accent)}.sig .o{color:var(--fg-muted)}.sig .s{color:var(--shared)}.tbl{border:1px solid var(--border);border-radius:8px;overflow-x:auto}table{border-collapse:collapse;width:100%;font-size:.8rem}th{text-align:left;text-transform:uppercase;letter-spacing:.08em;color:var(--fg-muted);background:var(--surface-2);padding:6px 10px;font-size:.64rem;font-weight:600}td{border-top:1px solid var(--border);vertical-align:top;color:var(--fg-2);padding:7px 10px}td:first-child{font-family:var(--mono);color:var(--fg);white-space:nowrap}td.ty{font-family:var(--mono);color:var(--accent);white-space:nowrap}.def{font-family:var(--mono);color:var(--fg-muted);font-size:.7rem;display:block}.code{border-radius:8px;overflow:hidden}.code pre{margin:0;padding:10px 12px;font-size:.76rem;line-height:1.65;overflow-x:auto}.callout{border:1px solid var(--border);border-left:3px solid var(--accent);background:var(--surface);color:var(--fg-2);border-radius:0 8px 8px 0;padding:10px 14px;font-size:.82rem}.callout b{text-transform:uppercase;letter-spacing:.08em;color:var(--accent);font-size:.72rem;display:block}.callout.warn{border-left-color:var(--warn);background:var(--warn-soft)}.callout.warn b{color:var(--warn)}.links{flex-wrap:wrap;gap:6px;display:flex}.links a{font-family:var(--mono);border:1px solid var(--border);color:var(--fg);border-radius:6px;align-items:center;gap:6px;padding:3px 10px;font-size:.76rem;text-decoration:none;display:inline-flex}.links a:hover{border-color:var(--accent);color:var(--accent)}.pager{border-top:1px solid var(--border);grid-template-columns:1fr 1fr;gap:12px;margin-top:8px;padding-top:16px;display:grid}.pager a{border:1px solid var(--border);min-width:0;color:var(--fg);border-radius:8px;gap:2px;padding:8px 12px;text-decoration:none;display:grid}.pager a:hover{border-color:var(--accent)}.pager .lbl{color:var(--fg-muted);font-size:.72rem}.pager .nm{font-family:var(--mono);text-overflow:ellipsis;white-space:nowrap;font-size:.78rem;overflow:hidden}.pager .nx{text-align:right;grid-column:2}@media (width<=760px){.main{grid-template-columns:1fr}.list{border-left:0;display:none}.main.listing .list{display:grid}.main.listing .page{display:none}.list-toggle{display:inline-flex}.bar>.tabs{display:none}.menu-btn{display:block}.docs{grid-template-columns:1fr}.docs>.tree{display:none}}button.grp{cursor:pointer}button.grp:hover{color:var(--fg)}.grp .chev{border-top:4px solid #0000;border-bottom:4px solid #0000;border-left:4px solid;width:0;height:0;margin-right:8px;transition:transform .15s;display:inline-block;transform:rotate(90deg)}.grp[aria-expanded=false] .chev{transform:none}.sub{letter-spacing:.06em;text-transform:uppercase;color:var(--accent);padding:8px 8px 3px 22px;font-size:.66rem;font-weight:600}.sig-line{text-overflow:ellipsis;color:var(--fg-muted);font-size:.8rem;overflow:hidden}.sig-line b{color:var(--fg);font-weight:600}.it[aria-current=page] .sig-line b{color:var(--accent)}@media (prefers-reduced-motion:reduce){.grp .chev{transition:none}}.flt{letter-spacing:.08em;text-transform:uppercase;color:var(--fg-muted);align-items:center;gap:8px;font-size:.68rem;font-weight:700;display:flex}.grp>span:first-child{align-items:center;display:inline-flex}.filters .seg,.filters .flt{flex:none}@media (width<=1200px){.flt>span{display:none}}@media (width<=1000px){.filters{flex-wrap:wrap}.find{flex-basis:100%;max-width:none}}.reference{grid-template-rows:auto minmax(0,1fr);height:100%;min-height:0;display:grid}.subbar{padding:9px max(16px, env(safe-area-inset-right,0px)) 9px max(16px, env(safe-area-inset-left,0px));border-bottom:1px solid var(--border);background:var(--bg);align-items:center;gap:10px 16px;display:flex}.list-toggle{all:unset;cursor:pointer;border:1px solid var(--border);border-radius:7px;flex:none;padding:5px 11px;font-size:.82rem;display:none}.drawer{z-index:30;grid-template-columns:min(320px,86vw) 1fr;display:grid;position:fixed;inset:0}.drawer-panel{background:var(--surface);border-right:1px solid var(--border);padding:calc(14px + env(safe-area-inset-top,0px)) 10px calc(24px + env(safe-area-inset-bottom,0px)) max(10px, env(safe-area-inset-left,0px));overflow-y:auto}.drawer-shade{background:#0a0a0e73}.drawer-tabs{gap:2px;margin-bottom:12px;display:grid}.drawer-tabs a{border-bottom:0;border-radius:7px;margin:0;padding:8px 10px}.drawer-tabs a[aria-current=true]{background:var(--accent-soft);color:var(--accent)}.drawer .tree{background:0 0;border:0;padding:0;overflow:visible}.docs{grid-template-columns:270px minmax(0,1fr);height:100%;min-height:0;display:grid}.tree{border-right:1px solid var(--border);background:var(--surface);padding:14px 10px 32px;overflow-y:auto}.tree h4{letter-spacing:.04em;text-transform:uppercase;color:var(--fg);margin:14px 10px 4px;font-size:.74rem;font-weight:800}.tree h4:first-child{margin-top:0}.node{all:unset;box-sizing:border-box;cursor:pointer;width:100%;color:var(--fg-2);border-radius:7px;justify-content:space-between;align-items:center;gap:8px;padding:6px 10px;font-size:.92rem;display:flex}.node:hover{background:var(--surface-2);color:var(--fg)}.node[aria-current=true]{background:var(--accent-soft);color:var(--accent);font-weight:600}.node .arrow{opacity:.7;border-bottom:1.6px solid;border-right:1.6px solid;flex:none;width:7px;height:7px;transition:transform .15s;transform:rotate(-45deg)}.node[aria-expanded=true] .arrow{transform:rotate(45deg)}.node.ext:after{content:"→";opacity:.7}.children{border-left:1px solid var(--border);margin:2px 0 4px 12px;padding-left:8px;display:grid}.children[hidden]{display:none}.children .node{padding:4px 10px;font-size:.86rem}.article{min-width:0;overflow-y:auto}.article-inner{gap:14px;max-width:760px;padding:30px clamp(16px,4vw,48px) 64px;display:grid}.article-inner>h1{letter-spacing:-.01em;text-wrap:balance;margin:0;font-size:clamp(1.5rem,3vw,2rem);font-weight:800}.article-inner>.lead{color:var(--fg-2);margin:0;font-size:1.05rem}.prose{color:var(--fg-2);gap:12px;display:grid}.prose h2{color:var(--fg);margin:18px 0 0;font-size:1.15rem}.prose h3{color:var(--fg);margin:10px 0 0;font-size:1rem}.prose p,.prose ul{margin:0}.prose ul{gap:4px;padding-left:20px;display:grid}.prose pre{border-radius:8px;margin:0;padding:12px 14px;font-size:.82rem;line-height:1.65;overflow-x:auto}.prose pre.cfg{background:var(--code-bg);color:var(--code-fg)}.prose pre code{font-size:inherit;background:0 0;border:0;padding:0}.cfg .k{color:var(--code-kw)}.cfg .w{color:#7dd3e6}.cfg .n{color:var(--code-num)}.cfg .v{color:#ffab70}.cfg .c{color:var(--code-muted);font-style:italic}.table-wrap{border:1px solid var(--border);border-radius:8px;overflow-x:auto}.prose table{border-collapse:collapse;width:100%;font-size:.88rem}.prose th{padding:7px 12px;font-size:.7rem}.prose td{padding:8px 12px}.prose tbody tr:first-child td{border-top:0}.ftree{border:1px solid var(--border);background:var(--surface);font-family:var(--mono);border-radius:8px;padding:8px 0;font-size:.84rem;position:relative;overflow-x:auto}.ftree-all{all:unset;cursor:pointer;z-index:1;border:1px solid var(--border);font-family:var(--font);color:var(--fg-2);background:var(--surface);border-radius:6px;padding:2px 9px;font-size:.72rem;position:absolute;top:8px;right:10px}.ftree-all:hover{border-color:var(--accent);color:var(--accent)}.frow{padding:3px 14px 3px calc(14px + var(--depth) * 20px);white-space:nowrap;align-items:center;gap:8px;display:flex;position:relative}.frow:hover{background:var(--surface-2)}.frow:before{content:"";left:calc(14px + var(--depth) * 20px - 12px);border-left:1px dashed var(--border);position:absolute;top:0;bottom:0}.frow[style=--depth\:0]:before{display:none}.fdir{color:inherit;font:inherit;text-align:left;box-sizing:border-box;cursor:pointer;background:0 0;border:0;width:100%}.fdir:focus-visible{outline:2px solid var(--accent);outline-offset:-2px}.fkids[hidden]{display:none}.ftwist{flex:none;place-items:center;width:10px;display:grid}.fdir .ftwist:before{content:"";border-left:4px solid var(--fg-muted);border-top:4px solid #0000;border-bottom:4px solid #0000;transition:transform .15s}.fdir[aria-expanded=true] .ftwist:before{transform:rotate(90deg)}.ficon{flex:none;place-items:center;width:18px;height:18px;display:grid}.ficon svg{fill:none;stroke:currentColor;stroke-width:1.6px;stroke-linejoin:round;width:18px;height:18px}.f-dir{color:var(--accent)}.f-dir svg{fill:var(--accent-soft)}.f-lua{color:var(--client)}.f-xml{color:var(--server)}.fname{color:var(--fg)}.fnote{font-family:var(--font);color:var(--fg-muted);margin-left:8px;font-size:.78rem}.docpager{border-top:1px solid var(--border);grid-template-columns:1fr 1fr;gap:12px;margin-top:10px;padding-top:16px;display:grid}.docpager a{border:1px solid var(--border);color:var(--fg);border-radius:8px;gap:2px;padding:9px 13px;text-decoration:none;display:grid}.docpager a:hover{border-color:var(--accent)}.docpager .lbl{color:var(--fg-muted);font-size:.72rem}.docpager .nm{font-size:.92rem;font-weight:600}.docpager .nx{text-align:right;grid-column:2}@media (prefers-reduced-motion:reduce){.node .arrow,.fdir .ftwist:before{transition:none}}.drawer[hidden]{display:none}.code,.copy-holder{position:relative}.copy-btn{all:unset;cursor:pointer;color:#a0a7b4;opacity:0;background:#ffffff0f;border:1px solid #ffffff1a;border-radius:6px;place-items:center;width:30px;height:30px;transition:opacity .15s;display:grid;position:absolute;top:8px;right:8px}.code:hover .copy-btn,.copy-holder:hover .copy-btn,.copy-btn:focus-visible,.copy-btn.done{opacity:1}.copy-btn:hover{color:#e8e8ef;background:#ffffff1f}.copy-btn:focus-visible{outline:2px solid var(--accent);outline-offset:2px}.copy-btn.done{color:var(--shared)}.copy-btn svg{fill:none;stroke:currentColor;stroke-width:2px;stroke-linecap:round;stroke-linejoin:round;width:16px;height:16px}@media (hover:none){.copy-btn{opacity:1}}@media (prefers-reduced-motion:reduce){.copy-btn{transition:none}}.api-link{color:inherit;border-radius:4px;margin:0 -2px;padding:1px 2px;text-decoration:none;transition:background-color .12s,color .12s}.api-link:hover,.api-link:focus-visible{background:#b3a7ff29;outline:none}.api-link:hover>span,.api-link:focus-visible>span{color:#c9bdff!important}@media (prefers-reduced-motion:reduce){.api-link{transition:none}}.filters .find{order:1;margin-left:auto}
