
:root{--bg:#070b14;--bg1:#0c1220;--bg2:#121a2b;--line:rgba(255,255,255,.08);--line2:rgba(255,255,255,.14);--text:#e8edf5;--text2:#a8b3c4;--text3:#6f7c90;
--acc:#4f8fd0;--acc2:#0b4e7c;--accsoft:rgba(79,143,208,.14);--ok:#33c97a;--warn:#e8b135;--bad:#f0524b;--code:#0a101c;
--font:"Geist","Inter",-apple-system,"Segoe UI",system-ui,sans-serif;--mono:"Geist Mono",ui-monospace,"SF Mono",Menlo,Consolas,monospace;--top:62px}
:root[data-theme=light]{--bg:#ffffff;--bg1:#f6f8fb;--bg2:#eef2f7;--line:#e4e9f0;--line2:#d3dbe6;--text:#0f1a2b;--text2:#3f4e63;--text3:#7b889b;--acc:#1f6fb8;--accsoft:rgba(31,111,184,.10);--code:#0d1422}
*{box-sizing:border-box}html{scroll-padding-top:calc(var(--top) + 18px)}
body{margin:0;background:var(--bg);color:var(--text);font:15.5px/1.7 var(--font);-webkit-font-smoothing:antialiased}
a{color:var(--acc);text-decoration:none}a:hover{text-decoration:underline}
svg{width:18px;height:18px;fill:none;stroke:currentColor;stroke-width:2;stroke-linecap:round;stroke-linejoin:round;flex:none}
.top{position:sticky;top:0;z-index:50;height:var(--top);display:flex;align-items:center;gap:14px;padding:0 20px;background:color-mix(in srgb,var(--bg) 82%,transparent);border-bottom:1px solid var(--line);-webkit-backdrop-filter:blur(14px);backdrop-filter:blur(14px)}
.brand{display:flex;align-items:center;gap:9px;color:var(--text);font-weight:700;font-size:16px}.brand:hover{text-decoration:none}
.brand img{width:28px;height:28px;border-radius:8px}.brand span{color:var(--text3);font-weight:500;padding-left:9px;border-left:1px solid var(--line2)}
.search{margin-left:18px;flex:0 1 340px;display:flex;align-items:center;gap:10px;height:38px;padding:0 10px 0 12px;border-radius:10px;border:1px solid var(--line);background:var(--bg1);color:var(--text3);font:14px var(--font);cursor:pointer;text-align:left}
.search span{flex:1}.search:hover{border-color:var(--line2)}
kbd{font:600 11px var(--mono);padding:3px 6px;border-radius:6px;border:1px solid var(--line2);color:var(--text3);background:var(--bg2)}
.links{margin-left:auto;display:flex;gap:4px;align-items:center}
.links a{color:var(--text2);font-size:14px;font-weight:500;padding:7px 11px;border-radius:8px}.links a:hover{color:var(--text);background:var(--bg2);text-decoration:none}
.links a.cta{color:#fff;background:linear-gradient(135deg,rgba(11,78,124,.55),rgba(11,78,124,.9));border:1px solid rgba(79,143,208,.45)}
.theme,.menu{width:38px;height:38px;border-radius:10px;border:1px solid var(--line);background:transparent;color:var(--text2);display:grid;place-items:center;cursor:pointer}
.menu{display:none}
.shell{display:grid;grid-template-columns:280px minmax(0,1fr);max-width:1480px;margin:0 auto}
.side{position:sticky;top:var(--top);height:calc(100vh - var(--top));overflow-y:auto;padding:22px 14px 40px 22px;border-right:1px solid var(--line);scrollbar-width:thin}
.nav-sec{margin-bottom:20px}
.nav-h{display:flex;align-items:center;gap:8px;font-size:12px;font-weight:700;letter-spacing:.06em;text-transform:uppercase;color:var(--text);margin:0 0 6px 8px}
.nav-h svg{width:15px;height:15px;color:var(--acc)}
.side a{display:block;padding:6px 10px 6px 31px;border-radius:8px;color:var(--text2);font-size:14.2px;line-height:1.45}
.side a:hover{color:var(--text);background:var(--bg1);text-decoration:none}
.side a.on{color:var(--text);background:var(--accsoft);box-shadow:inset 2px 0 0 var(--acc);font-weight:600}
.main{display:grid;grid-template-columns:minmax(0,1fr) 230px;gap:40px;padding:0 32px}
.doc{min-width:0;max-width:820px;padding:38px 0 60px}
.toc{position:sticky;top:calc(var(--top) + 30px);align-self:start;max-height:calc(100vh - var(--top) - 60px);overflow-y:auto;padding:38px 0 0;font-size:13.3px}
.toc-h{font-size:12px;font-weight:700;letter-spacing:.06em;text-transform:uppercase;color:var(--text);margin-bottom:10px}
.toc a{display:block;color:var(--text3);padding:4px 0 4px 12px;border-left:1px solid var(--line);line-height:1.45}
.toc a.l3{padding-left:24px}.toc a:hover{color:var(--text);text-decoration:none}.toc a.on{color:var(--acc);border-left-color:var(--acc)}
.crumb{font-size:13px;font-weight:600;color:var(--acc);margin-bottom:8px}
h1{font-size:36px;line-height:1.15;letter-spacing:-.025em;margin:0 0 10px;overflow-wrap:anywhere}
.lead{font-size:17.5px;color:var(--text2);margin:0 0 28px}
h2{font-size:24px;letter-spacing:-.015em;margin:46px 0 12px;padding-top:18px;border-top:1px solid var(--line)}
h3{font-size:18px;margin:30px 0 8px}h4{font-size:15.5px;margin:22px 0 6px}
.anchor{opacity:0;margin-left:8px;color:var(--text3);font-weight:400}h2:hover .anchor,h3:hover .anchor{opacity:1}
p,ul,ol{margin:0 0 16px}li{margin:4px 0}li>ul,li>ol{margin:4px 0}
strong{color:var(--text);font-weight:650}
hr{border:0;border-top:1px solid var(--line);margin:32px 0}
:not(pre)>code{font:500 .86em var(--mono);padding:2px 6px;border-radius:6px;background:var(--bg2);border:1px solid var(--line);color:var(--text);word-break:break-word}
.code{margin:18px 0;border:1px solid var(--line);border-radius:12px;overflow:hidden;background:var(--code)}
.code-h{display:flex;justify-content:space-between;align-items:center;padding:6px 8px 6px 14px;border-bottom:1px solid rgba(255,255,255,.07);font:600 11.5px var(--mono);color:#7d8aa0;text-transform:lowercase}
.copy{display:inline-flex;align-items:center;gap:6px;padding:5px 9px;border-radius:7px;border:1px solid rgba(255,255,255,.1);background:transparent;color:#a9b5c8;font:600 12px var(--font);cursor:pointer}
.copy svg{width:13px;height:13px}.copy:hover{color:#fff;border-color:rgba(255,255,255,.22)}.copy.ok{color:var(--ok);border-color:rgba(51,201,122,.5)}
.code pre,.hl pre{margin:0;padding:14px 16px;overflow-x:auto;font:13.2px/1.65 var(--mono);color:#d8e3f2;background:transparent}
.hl{background:transparent!important}
table{width:100%;border-collapse:collapse;margin:18px 0;font-size:14px;display:block;overflow-x:auto}
th,td{text-align:left;padding:9px 12px;border-bottom:1px solid var(--line);vertical-align:top}
th{font-weight:650;color:var(--text);background:var(--bg1);white-space:nowrap}
tr:hover td{background:color-mix(in srgb,var(--bg1) 60%,transparent)}
td code{white-space:nowrap}
.callout{margin:20px 0;padding:14px 16px 4px;border-radius:12px;border:1px solid var(--line);border-left:3px solid var(--acc);background:var(--accsoft)}
.callout-title{font-weight:700;margin:0 0 6px!important;color:var(--text)}
.callout.warning{border-left-color:var(--warn);background:rgba(232,177,53,.09)}
.callout.danger{border-left-color:var(--bad);background:rgba(240,82,75,.09)}
.callout.tip,.callout.success{border-left-color:var(--ok);background:rgba(51,201,122,.08)}
.badge{display:inline-block;font:700 11px/1 var(--font);padding:4px 7px;border-radius:999px;vertical-align:middle;border:1px solid var(--line2);color:var(--text2)}
.b-ban{color:#ff8a84;border-color:rgba(240,82,75,.45);background:rgba(240,82,75,.1)}
.b-kick{color:#f6b06a;border-color:rgba(249,115,22,.45);background:rgba(249,115,22,.1)}
.b-warn{color:#f2cd6b;border-color:rgba(232,177,53,.45);background:rgba(232,177,53,.1)}
.b-off{color:var(--text3)}
.b-soon{color:#9cc6f2;border-color:rgba(79,143,208,.45);background:var(--accsoft)}
.cards{display:grid;grid-template-columns:repeat(auto-fill,minmax(230px,1fr));gap:12px;margin:22px 0}
.cards a{display:block;padding:16px;border-radius:14px;border:1px solid var(--line);background:var(--bg1);color:var(--text)}
.cards a:hover{border-color:rgba(79,143,208,.5);text-decoration:none;transform:translateY(-1px)}
.cards b{display:block;margin-bottom:4px}.cards span{font-size:13.5px;color:var(--text2);line-height:1.5}
.steps{counter-reset:s;list-style:none;padding:0}
.steps>li{counter-increment:s;position:relative;padding-left:44px;margin:0 0 20px}
.steps>li:before{content:counter(s);position:absolute;left:0;top:0;width:28px;height:28px;border-radius:50%;display:grid;place-items:center;font:700 13px var(--font);color:#fff;background:linear-gradient(135deg,#1679b8,#0b4e7c)}
.pn{display:grid;grid-template-columns:1fr 1fr;gap:12px;margin:56px 0 0}
.pn a{display:block;padding:14px 16px;border:1px solid var(--line);border-radius:12px;color:var(--text)}.pn a:hover{border-color:rgba(79,143,208,.5);text-decoration:none}
.pn small{display:block;font-size:12px;color:var(--text3)}.pn b{font-weight:600}.pn .next{text-align:right}
.foot{margin-top:40px;padding-top:20px;border-top:1px solid var(--line);font-size:13px;color:var(--text3)}
.sk{position:fixed;inset:0;z-index:100;background:rgba(2,5,12,.6);-webkit-backdrop-filter:blur(4px);backdrop-filter:blur(4px);display:flex;justify-content:center;align-items:flex-start;padding:10vh 16px}
.sk[hidden]{display:none}
.sk-box{width:min(640px,100%);border-radius:16px;border:1px solid var(--line2);background:var(--bg1);box-shadow:0 30px 80px -20px rgba(0,0,0,.7);overflow:hidden}
.sk-in{display:flex;align-items:center;gap:10px;padding:0 14px;border-bottom:1px solid var(--line)}
.sk-in svg{color:var(--text3)}.sk-in input{flex:1;height:54px;border:0;outline:0;background:transparent;color:var(--text);font:16px var(--font)}
.sk-res{max-height:60vh;overflow-y:auto;padding:8px}
.sk-res a{display:block;padding:10px 12px;border-radius:10px;color:var(--text)}
.sk-res a:hover,.sk-res a.on{background:var(--accsoft);text-decoration:none}
.sk-res small{display:block;color:var(--text3);font-size:12px}.sk-res em{font-style:normal;display:block;color:var(--text2);font-size:13px;margin-top:2px}
.sk-res mark{background:rgba(79,143,208,.3);color:inherit;border-radius:3px}
.sk-empty{padding:26px;text-align:center;color:var(--text3)}
@media (max-width:1180px){.main{grid-template-columns:minmax(0,1fr)}.toc{display:none}}
@media (max-width:860px){.shell{grid-template-columns:1fr}.menu{display:grid}.links{display:none}
 .side{position:fixed;left:0;top:var(--top);bottom:0;width:290px;height:auto;z-index:40;background:var(--bg);transform:translateX(-100%);transition:transform .25s}
 body.nav-open .side{transform:none;box-shadow:20px 0 60px rgba(0,0,0,.5)}
 .main{padding:0 18px}.search{margin-left:auto;flex:0 0 auto}.search span,.search kbd{display:none}h1{font-size:29px}}
pre { line-height: 125%; }
td.linenos .normal { color: #6e7681; background-color: #0d1117; padding-left: 5px; padding-right: 5px; }
span.linenos { color: #6e7681; background-color: #0d1117; padding-left: 5px; padding-right: 5px; }
td.linenos .special { color: #e6edf3; background-color: #6e7681; padding-left: 5px; padding-right: 5px; }
span.linenos.special { color: #e6edf3; background-color: #6e7681; padding-left: 5px; padding-right: 5px; }
.hl .hll { background-color: #6e7681 }
.hl { background: #0d1117; color: #E6EDF3 }
.hl .c { color: #8B949E; font-style: italic } /* Comment */
.hl .err { color: #F85149 } /* Error */
.hl .esc { color: #E6EDF3 } /* Escape */
.hl .g { color: #E6EDF3 } /* Generic */
.hl .k { color: #FF7B72 } /* Keyword */
.hl .l { color: #A5D6FF } /* Literal */
.hl .n { color: #E6EDF3 } /* Name */
.hl .o { color: #FF7B72; font-weight: bold } /* Operator */
.hl .x { color: #E6EDF3 } /* Other */
.hl .p { color: #E6EDF3 } /* Punctuation */
.hl .ch { color: #8B949E; font-style: italic } /* Comment.Hashbang */
.hl .cm { color: #8B949E; font-style: italic } /* Comment.Multiline */
.hl .cp { color: #8B949E; font-weight: bold; font-style: italic } /* Comment.Preproc */
.hl .cpf { color: #8B949E; font-style: italic } /* Comment.PreprocFile */
.hl .c1 { color: #8B949E; font-style: italic } /* Comment.Single */
.hl .cs { color: #8B949E; font-weight: bold; font-style: italic } /* Comment.Special */
.hl .gd { color: #FFA198; background-color: #490202 } /* Generic.Deleted */
.hl .ge { color: #E6EDF3; font-style: italic } /* Generic.Emph */
.hl .ges { color: #E6EDF3; font-weight: bold; font-style: italic } /* Generic.EmphStrong */
.hl .gr { color: #FFA198 } /* Generic.Error */
.hl .gh { color: #79C0FF; font-weight: bold } /* Generic.Heading */
.hl .gi { color: #56D364; background-color: #0F5323 } /* Generic.Inserted */
.hl .go { color: #8B949E } /* Generic.Output */
.hl .gp { color: #8B949E } /* Generic.Prompt */
.hl .gs { color: #E6EDF3; font-weight: bold } /* Generic.Strong */
.hl .gu { color: #79C0FF } /* Generic.Subheading */
.hl .gt { color: #FF7B72 } /* Generic.Traceback */
.hl .g-Underline { color: #E6EDF3; text-decoration: underline } /* Generic.Underline */
.hl .kc { color: #79C0FF } /* Keyword.Constant */
.hl .kd { color: #FF7B72 } /* Keyword.Declaration */
.hl .kn { color: #FF7B72 } /* Keyword.Namespace */
.hl .kp { color: #79C0FF } /* Keyword.Pseudo */
.hl .kr { color: #FF7B72 } /* Keyword.Reserved */
.hl .kt { color: #FF7B72 } /* Keyword.Type */
.hl .ld { color: #79C0FF } /* Literal.Date */
.hl .m { color: #A5D6FF } /* Literal.Number */
.hl .s { color: #A5D6FF } /* Literal.String */
.hl .na { color: #E6EDF3 } /* Name.Attribute */
.hl .nb { color: #E6EDF3 } /* Name.Builtin */
.hl .nc { color: #F0883E; font-weight: bold } /* Name.Class */
.hl .no { color: #79C0FF; font-weight: bold } /* Name.Constant */
.hl .nd { color: #D2A8FF; font-weight: bold } /* Name.Decorator */
.hl .ni { color: #FFA657 } /* Name.Entity */
.hl .ne { color: #F0883E; font-weight: bold } /* Name.Exception */
.hl .nf { color: #D2A8FF; font-weight: bold } /* Name.Function */
.hl .nl { color: #79C0FF; font-weight: bold } /* Name.Label */
.hl .nn { color: #FF7B72 } /* Name.Namespace */
.hl .nx { color: #E6EDF3 } /* Name.Other */
.hl .py { color: #79C0FF } /* Name.Property */
.hl .nt { color: #7EE787 } /* Name.Tag */
.hl .nv { color: #79C0FF } /* Name.Variable */
.hl .ow { color: #FF7B72; font-weight: bold } /* Operator.Word */
.hl .pm { color: #E6EDF3 } /* Punctuation.Marker */
.hl .w { color: #6E7681 } /* Text.Whitespace */
.hl .mb { color: #A5D6FF } /* Literal.Number.Bin */
.hl .mf { color: #A5D6FF } /* Literal.Number.Float */
.hl .mh { color: #A5D6FF } /* Literal.Number.Hex */
.hl .mi { color: #A5D6FF } /* Literal.Number.Integer */
.hl .mo { color: #A5D6FF } /* Literal.Number.Oct */
.hl .sa { color: #79C0FF } /* Literal.String.Affix */
.hl .sb { color: #A5D6FF } /* Literal.String.Backtick */
.hl .sc { color: #A5D6FF } /* Literal.String.Char */
.hl .dl { color: #79C0FF } /* Literal.String.Delimiter */
.hl .sd { color: #A5D6FF } /* Literal.String.Doc */
.hl .s2 { color: #A5D6FF } /* Literal.String.Double */
.hl .se { color: #79C0FF } /* Literal.String.Escape */
.hl .sh { color: #79C0FF } /* Literal.String.Heredoc */
.hl .si { color: #A5D6FF } /* Literal.String.Interpol */
.hl .sx { color: #A5D6FF } /* Literal.String.Other */
.hl .sr { color: #79C0FF } /* Literal.String.Regex */
.hl .s1 { color: #A5D6FF } /* Literal.String.Single */
.hl .ss { color: #A5D6FF } /* Literal.String.Symbol */
.hl .bp { color: #E6EDF3 } /* Name.Builtin.Pseudo */
.hl .fm { color: #D2A8FF; font-weight: bold } /* Name.Function.Magic */
.hl .vc { color: #79C0FF } /* Name.Variable.Class */
.hl .vg { color: #79C0FF } /* Name.Variable.Global */
.hl .vi { color: #79C0FF } /* Name.Variable.Instance */
.hl .vm { color: #79C0FF } /* Name.Variable.Magic */
.hl .il { color: #A5D6FF } /* Literal.Number.Integer.Long */.hl,.hl pre{background:transparent!important}
