@font-face{font-family:Public Sans;font-style:normal;font-weight:400 600;font-display:swap;src:url(../media/public-sans-latin.3tasb8qs95n_v.woff2)format("woff2");unicode-range:U+??,U+131,U+152-153,U+2BB-2BC,U+2C6,U+2DA,U+2DC,U+304,U+308,U+329,U+2000-206F,U+20AC,U+2122,U+2191,U+2193,U+2212,U+2215,U+FEFF,U+FFFD}@font-face{font-family:Public Sans;font-style:normal;font-weight:400 600;font-display:swap;src:url(../media/public-sans-latin-ext.1svzn21vgh2j9.woff2)format("woff2");unicode-range:U+100-2BA,U+2BD-2C5,U+2C7-2CC,U+2CE-2D7,U+2DD-2FF,U+304,U+308,U+329,U+1D00-1DBF,U+1E00-1E9F,U+1EF2-1EFF,U+2020,U+20A0-20AB,U+20AD-20C4,U+2113,U+2C60-2C7F,U+A720-A7FF}@font-face{font-family:Public Sans;font-style:normal;font-weight:400 600;font-display:swap;src:url(../media/public-sans-vietnamese.0xa7br5mfity1.woff2)format("woff2");unicode-range:U+102-103,U+110-111,U+128-129,U+168-169,U+1A0-1A1,U+1AF-1B0,U+300-301,U+303-304,U+308-309,U+323,U+329,U+1EA0-1EF9,U+20AB}@font-face{font-family:JetBrains Mono;font-style:normal;font-weight:400 500;font-display:swap;src:url(../media/jetbrains-mono-latin.1wmoa0e_blxrz.woff2)format("woff2");unicode-range:U+??,U+131,U+152-153,U+2BB-2BC,U+2C6,U+2DA,U+2DC,U+304,U+308,U+329,U+2000-206F,U+20AC,U+2122,U+2191,U+2193,U+2212,U+2215,U+FEFF,U+FFFD}@font-face{font-family:JetBrains Mono;font-style:normal;font-weight:400 500;font-display:swap;src:url(../media/jetbrains-mono-latin-ext.3vf5yzuqk3fsd.woff2)format("woff2");unicode-range:U+100-2BA,U+2BD-2C5,U+2C7-2CC,U+2CE-2D7,U+2DD-2FF,U+304,U+308,U+329,U+1D00-1DBF,U+1E00-1E9F,U+1EF2-1EFF,U+2020,U+20A0-20AB,U+20AD-20C4,U+2113,U+2C60-2C7F,U+A720-A7FF}@font-face{font-family:JetBrains Mono;font-style:normal;font-weight:400 500;font-display:swap;src:url(../media/jetbrains-mono-vietnamese.3zhbgtelpa5ua.woff2)format("woff2");unicode-range:U+102-103,U+110-111,U+128-129,U+168-169,U+1A0-1A1,U+1AF-1B0,U+300-301,U+303-304,U+308-309,U+323,U+329,U+1EA0-1EF9,U+20AB}@font-face{font-family:JetBrains Mono;font-style:normal;font-weight:400 500;font-display:swap;src:url(../media/jetbrains-mono-greek.3skwie1wjplzh.woff2)format("woff2");unicode-range:U+370-377,U+37A-37F,U+384-38A,U+38C,U+38E-3A1,U+3A3-3FF}@font-face{font-family:JetBrains Mono;font-style:normal;font-weight:400 500;font-display:swap;src:url(../media/jetbrains-mono-cyrillic-ext.1zakzi6q17d4o.woff2)format("woff2");unicode-range:U+460-52F,U+1C80-1C8A,U+20B4,U+2DE0-2DFF,U+A640-A69F,U+FE2E-FE2F}@font-face{font-family:JetBrains Mono;font-style:normal;font-weight:400 500;font-display:swap;src:url(../media/jetbrains-mono-cyrillic.2htf8h-pf57mm.woff2)format("woff2");unicode-range:U+301,U+400-45F,U+490-491,U+4B0-4B1,U+2116}@font-face{font-family:Public Sans Fallback;src:local(Arial);ascent-override:90.59%;descent-override:21.46%;line-gap-override:0.0%;size-adjust:104.87%}@font-face{font-family:JetBrains Mono Fallback;src:local(Arial);ascent-override:75.79%;descent-override:22.29%;line-gap-override:0.0%;size-adjust:134.59%}:root{--font-public-sans:"Public Sans", "Public Sans Fallback";--font-jetbrains-mono:"JetBrains Mono", "JetBrains Mono Fallback"}
:root{--paper:#fafafa;--surface:#fff;--sunken:#f1f1f1;--line:#e4e4e4;--line-strong:#8c8c8c;--ink:#111;--ink-body:#2b2b2b;--ink-muted:#4d4d4d;--ink-subtle:#6e6e6e;--code-bg:#161616;--code-ink:#e8e8e8;--sans:var(--font-public-sans), "Public Sans", "Helvetica Neue", Arial, sans-serif;--mono:var(--font-jetbrains-mono), "JetBrains Mono", ui-monospace, Menlo, monospace}*{box-sizing:border-box}html{-webkit-text-size-adjust:100%;scroll-padding-top:72px}body{background:var(--paper);color:var(--ink);font-family:var(--sans);-webkit-font-smoothing:antialiased;font-variant-numeric:tabular-nums;margin:0}a{color:var(--ink)}:focus-visible{box-shadow:0 0 0 2px var(--paper), 0 0 0 4px var(--ink);border-radius:3px;outline:none}.skip{position:absolute;top:8px;left:-9999px}.skip:focus{z-index:10;background:var(--surface);padding:6px 10px;left:16px}.top{z-index:5;background:color-mix(in srgb, var(--paper) 92%, transparent);-webkit-backdrop-filter:saturate(1.4)blur(8px);backdrop-filter:saturate(1.4)blur(8px);border-bottom:1px solid var(--line);justify-content:space-between;align-items:center;gap:16px;height:56px;padding:0 24px;display:flex;position:sticky;top:0}.brand{color:var(--ink);align-items:baseline;gap:10px;text-decoration:none;display:inline-flex}.brand b{letter-spacing:-.02em;font-size:15px;font-weight:600}.brand span{color:var(--ink-subtle);font-size:13px;font-weight:500}.top nav{gap:18px;font-size:13.5px;display:flex}.top nav a{color:var(--ink-muted);font-weight:500;text-decoration:none}.top nav a:hover{color:var(--ink)}.frame{grid-template-columns:248px minmax(0,1fr) 220px;max-width:1360px;margin:0 auto;display:grid}.side{border-right:1px solid var(--line);align-self:start;height:calc(100vh - 56px);padding:20px 14px 32px;position:sticky;top:56px;overflow-y:auto}.narrow-nav{display:none}.group{margin-bottom:18px}.group .label{letter-spacing:.06em;text-transform:uppercase;color:var(--ink-subtle);padding:0 10px 6px;font-size:11px;font-weight:600;line-height:14px}.group a{color:var(--ink-muted);border-radius:5px;padding:6px 10px;font-size:13.5px;font-weight:500;line-height:18px;text-decoration:none;display:block}.group a:hover{background:var(--sunken);color:var(--ink)}.group a[aria-current=page]{background:var(--ink);color:#fff}main{min-width:0;padding:40px 48px 96px}.toc{align-self:start;max-height:calc(100vh - 56px);padding:40px 20px 32px 0;font-size:12.5px;line-height:17px;position:sticky;top:56px;overflow-y:auto}.toc .label{letter-spacing:.06em;text-transform:uppercase;color:var(--ink-subtle);margin-bottom:8px;font-size:11px;font-weight:600}.toc a{color:var(--ink-subtle);padding:4px 0;text-decoration:none;display:block}.toc a:hover{color:var(--ink)}.pager{grid-template-columns:1fr 1fr;gap:12px;max-width:72ch;margin-top:56px;display:grid}.pager a{border:1px solid var(--line);background:var(--surface);border-radius:8px;gap:2px;padding:12px 14px;text-decoration:none;display:grid}.pager a:hover{border-color:var(--line-strong)}.pager small{letter-spacing:.06em;text-transform:uppercase;color:var(--ink-subtle);font-size:11px;font-weight:600}.pager span{font-size:14px;font-weight:600}.pager .next{text-align:right;grid-column:2}.foot{border-top:1px solid var(--line);color:var(--ink-subtle);text-align:center;padding:20px 24px;font-size:12px}.prose{max-width:72ch;color:var(--ink-body);font-size:15.5px;line-height:1.65}.prose>:first-child{margin-top:0}.prose h1,.prose h2,.prose h3,.prose h4{color:var(--ink);text-wrap:balance;position:relative}.prose h1{letter-spacing:-.025em;margin:0 0 20px;font-size:30px;font-weight:650;line-height:36px}.prose h2{letter-spacing:-.015em;border-top:1px solid var(--line);margin:48px 0 12px;padding-top:20px;font-size:21px;font-weight:600;line-height:28px}.prose h3{margin:32px 0 8px;font-size:16.5px;font-weight:600;line-height:24px}.prose h4{margin:24px 0 6px;font-size:15px;font-weight:600}.prose .anchor{width:1em;color:var(--line-strong);opacity:0;font-weight:400;text-decoration:none;position:absolute;left:-1.1em}.prose h2 .anchor{top:20px}.prose :is(h1,h2,h3,h4):hover .anchor,.prose .anchor:focus-visible{opacity:1}.prose p{text-wrap:pretty;margin:0 0 16px}.prose a{border-bottom:1px solid var(--line-strong);font-weight:500;text-decoration:none}.prose a:hover{border-color:var(--ink)}.prose strong{color:var(--ink);font-weight:600}.prose ul,.prose ol{margin:0 0 16px;padding-left:1.4em}.prose li{margin:4px 0}.prose li>p{margin:0 0 8px}.prose hr{border:0;border-top:1px solid var(--line);margin:32px 0}.prose hr+h2{border-top:0;margin-top:0;padding-top:0}.prose blockquote{border-left:3px solid var(--line-strong);color:var(--ink-muted);margin:0 0 16px;padding:2px 0 2px 16px}.prose code{font-family:var(--mono);background:var(--sunken);overflow-wrap:anywhere;border-radius:4px;padding:.1em .35em;font-size:.86em}.prose a code{background:0 0;padding:0}.prose pre.code{background:var(--code-bg);color:var(--code-ink);font-family:var(--mono);tab-size:4;border-radius:8px;margin:0 0 20px;padding:14px 16px;font-size:13px;line-height:20px;position:relative;overflow-x:auto}.prose pre.code code{font-size:inherit;overflow-wrap:normal;white-space:pre;background:0 0;padding:0}.prose pre.code[data-lang]:before{content:attr(data-lang);letter-spacing:.06em;text-transform:uppercase;color:#8a8a8a;font-size:10.5px;position:absolute;top:8px;right:52px}.copy{color:#cfcfcf;height:24px;font:500 11px/1 var(--sans);cursor:pointer;background:#222;border:1px solid #3a3a3a;border-radius:5px;padding:0 8px;position:absolute;top:6px;right:6px}.copy:hover{color:#fff;background:#2c2c2c}.prose .table{border:1px solid var(--line);background:var(--surface);border-radius:8px;margin:0 0 20px;overflow-x:auto}.prose table{border-collapse:collapse;width:100%;font-size:13.5px;line-height:1.5}.prose th{text-align:left;letter-spacing:.06em;text-transform:uppercase;color:var(--ink-subtle);border-bottom:1px solid var(--line);background:var(--paper);padding:9px 12px;font-size:11px;font-weight:600}.prose td{border-bottom:1px solid var(--line);vertical-align:top;padding:9px 12px}.prose tr:last-child td{border-bottom:0}.prose td code{white-space:nowrap}.prose .status{border:1px solid var(--line-strong);background:var(--surface);border-radius:8px;padding:10px 14px;font-size:14px}@media (max-width:1180px){.frame{grid-template-columns:236px minmax(0,1fr)}.toc{display:none}}@media (max-width:860px){.top{padding:0 16px}.top nav a.wide{display:none}.frame{display:block}.side{border-right:0;border-bottom:1px solid var(--line);height:auto;padding:0 16px;position:static}.wide-nav{display:none}.narrow-nav{display:block}.side summary{cursor:pointer;justify-content:space-between;align-items:center;height:44px;font-size:13.5px;font-weight:600;list-style:none;display:flex}.side summary::-webkit-details-marker{display:none}.side summary:after{content:"Menu";color:var(--ink-subtle);font-size:12px;font-weight:500}.side details[open] summary:after{content:"Close"}.side details[open]{padding-bottom:12px}main{padding:28px 16px 72px}.prose{font-size:15px}.prose h1{font-size:25px;line-height:31px}.prose h2{font-size:19px}.prose .anchor{display:none}.pager{grid-template-columns:1fr}.pager .next{grid-column:1}}
