:root{--bg:#ffffff;--fg:#1f2328;--muted:#59636e;--link:#0757ba;--border:#d1d9e0;--code-bg:#f6f8fa}@media(prefers-color-scheme:dark){:root{--bg:#0d1117;--fg:#e6edf3;--muted:#9198a1;--link:#58a6ff;--border:#30363d;--code-bg:#161b22}}*{box-sizing:border-box}body{margin:0;background:var(--bg);color:var(--fg);font-family:system-ui,-apple-system,segoe ui,sans-serif;font-size:1.0625rem;line-height:1.6}header{border-bottom:1px solid var(--border)}header nav{max-width:56rem;margin:0 auto;padding:.75rem 1rem;display:flex;flex-wrap:wrap;gap:.35rem 1rem;align-items:baseline}header nav a{color:var(--fg);text-decoration:none}header nav a:hover{text-decoration:underline}header nav .brand{font-weight:700;margin-right:.5rem}header nav .sponsor{color:#bf3989}@media(prefers-color-scheme:dark){header nav .sponsor{color:#f778ba}}.logo{text-align:center}.logo img{max-width:min(400px,100%);border-radius:8px}.hero{text-align:center;margin:.5rem 0 1.5rem}.hero-logo{max-width:min(360px,90%);height:auto;border-radius:8px}.hero h1{margin:.75rem 0 0;font-size:1.6rem;line-height:1.25}main img{max-width:100%;height:auto}main{max-width:56rem;margin:0 auto;padding:1.5rem 1rem 3rem}footer{border-top:1px solid var(--border);color:var(--muted);font-size:.875rem}footer p{max-width:56rem;margin:0 auto;padding:1rem}footer a{color:var(--muted)}h1,h2,h3,h4{line-height:1.25;margin:1.75em 0 .5em}h1{margin-top:.5em;font-size:1.75rem}h2{font-size:1.35rem;border-bottom:1px solid var(--border);padding-bottom:.25rem}h3{font-size:1.1rem}a{color:var(--link)}img{max-width:100%;height:auto}code,pre{font-family:ui-monospace,sfmono-regular,Menlo,Consolas,monospace;font-size:.875em}code{background:var(--code-bg);border-radius:4px;padding:.15em .35em}pre{background:var(--code-bg);border-radius:6px;padding:.9rem 1rem;overflow-x:auto;line-height:1.5}pre code{background:0 0;padding:0;font-size:1em}.highlight pre{background:var(--code-bg)!important}table{display:table;width:100%;border-collapse:collapse;margin:1rem 0}.table-wrap{overflow-x:auto;margin:1rem 0}th,td{border:1px solid var(--border);padding:.4rem .7rem;text-align:left;vertical-align:top}th{background:var(--code-bg)}blockquote{margin:1rem 0;padding:0 1rem;color:var(--muted);border-left:3px solid var(--border)}hr{border:0;border-top:1px solid var(--border);margin:2rem 0}header nav a.active{font-weight:600;text-decoration:underline;text-underline-offset:.35em}.hlink{text-decoration:none;opacity:0;font-weight:400;transition:opacity .1s}h1:hover .hlink,h2:hover .hlink,h3:hover .hlink,h4:hover .hlink{opacity:.7}details.toc{border:1px solid var(--border);border-radius:6px;padding:.5rem 1rem;margin:1rem 0;font-size:.95rem}details.toc summary{cursor:pointer;color:var(--muted)}details.toc ul{margin:.5rem 0;padding-left:1.25rem}details.toc a{text-decoration:none}details.toc a:hover{text-decoration:underline}pre{position:relative}pre .copy{position:absolute;top:.4rem;right:.4rem;border:1px solid var(--border);border-radius:4px;background:var(--bg);color:var(--muted);font:.75rem ui-monospace,monospace;padding:.15rem .5rem;cursor:pointer;opacity:0;transition:opacity .1s}pre:hover .copy{opacity:1}pre .copy:hover{color:var(--fg)}tbody tr:nth-child(even){background:var(--code-bg)}#where-to-go+ul{list-style:none;padding:0;display:grid;grid-template-columns:repeat(auto-fill,minmax(21rem,1fr));gap:.75rem}#where-to-go+ul li{border:1px solid var(--border);border-radius:6px;padding:.75rem 1rem;margin:0}#where-to-go+ul li a:first-child{font-weight:600}main pre,main .table-wrap{content-visibility:auto;contain-intrinsic-size:auto 6rem}.skip-link{position:absolute;left:-9999px;top:0;z-index:10;padding:.5rem .85rem;background:var(--bg);color:var(--fg);border:1px solid var(--border);border-radius:0 0 6px 0}.skip-link:focus{left:0}pre:focus-within .copy,.copy:focus-visible{opacity:1}@media(hover:none){pre .copy{opacity:1}}header nav a:focus-visible,.hlink:focus-visible,.copy:focus-visible,main a:focus-visible{outline:2px solid var(--link);outline-offset:2px;border-radius:2px}main h2,main h3{scroll-margin-top:1rem}.sidebar{display:none}.toc-filter{width:100%;box-sizing:border-box;margin-bottom:.75rem;padding:.4rem .6rem;font:inherit;color:var(--fg);background:var(--bg);border:1px solid var(--border);border-radius:6px}@media(min-width:1200px){main:has(.page.has-toc){max-width:76rem}.page.has-toc{display:grid;grid-template-columns:15rem minmax(0,1fr);gap:2.5rem;align-items:start}.page.has-toc article{max-width:56rem;min-width:0}.sidebar{display:block}.sidebar-inner{position:sticky;top:1rem;max-height:calc(100vh - 2rem);overflow-y:auto;font-size:.9rem}.toc-nav ul{list-style:none;margin:0;padding:0}.toc-nav ul ul{padding-left:.9rem}.toc-nav li{margin:.15rem 0}.toc-nav a{text-decoration:none;color:var(--muted)}.toc-nav a:hover{color:var(--fg);text-decoration:underline}.toc-inline{display:none}}.search{position:relative;display:inline-flex}.search-box{font:inherit;font-size:.9rem;padding:.2rem .55rem;width:9rem;max-width:40vw;color:var(--fg);background:var(--bg);border:1px solid var(--border);border-radius:6px}.search-ui{position:absolute;top:100%;right:0;margin-top:.4rem;width:min(92vw,24rem);max-height:72vh;overflow-y:auto;padding:.6rem;background:var(--bg);border:1px solid var(--border);border-radius:8px;box-shadow:0 10px 30px rgba(0,0,0,.18);z-index:30;--pagefind-ui-primary:var(--link);--pagefind-ui-text:var(--fg);--pagefind-ui-background:var(--bg);--pagefind-ui-border:var(--border);--pagefind-ui-tag:var(--code-bg);--pagefind-ui-font:inherit}.bg{background-color:#f7f7f7}.chroma{background-color:#f7f7f7;-webkit-text-size-adjust:none}.chroma .err{color:#f6f8fa;background-color:#82071e}.chroma .lnlinks{outline:none;text-decoration:none;color:inherit}.chroma .lntd{vertical-align:top;padding:0;margin:0;border:0}.chroma .lntable{border-spacing:0;padding:0;margin:0;border:0}.chroma .hl{background-color:#dedede}.chroma .lnt{white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f}.chroma .ln{white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f}.chroma .line{display:flex}.chroma .k{color:#cf222e}.chroma .kc{color:#cf222e}.chroma .kd{color:#cf222e}.chroma .kn{color:#cf222e}.chroma .kp{color:#cf222e}.chroma .kr{color:#cf222e}.chroma .kt{color:#cf222e}.chroma .na{color:#1f2328}.chroma .nc{color:#1f2328}.chroma .no{color:#0550ae}.chroma .nd{color:#0550ae}.chroma .ni{color:#6639ba}.chroma .nl{color:#900;font-weight:700}.chroma .nn{color:#24292e}.chroma .nx{color:#1f2328}.chroma .nt{color:#0550ae}.chroma .nb{color:#6639ba}.chroma .bp{color:#6a737d}.chroma .nv{color:#953800}.chroma .vc{color:#953800}.chroma .vg{color:#953800}.chroma .vi{color:#953800}.chroma .vm{color:#953800}.chroma .nf{color:#6639ba}.chroma .fm{color:#6639ba}.chroma .s{color:#0a3069}.chroma .sa{color:#0a3069}.chroma .sb{color:#0a3069}.chroma .sc{color:#0a3069}.chroma .dl{color:#0a3069}.chroma .sd{color:#0a3069}.chroma .s2{color:#0a3069}.chroma .se{color:#0a3069}.chroma .sh{color:#0a3069}.chroma .si{color:#0a3069}.chroma .sx{color:#0a3069}.chroma .sr{color:#0a3069}.chroma .s1{color:#0a3069}.chroma .ss{color:#032f62}.chroma .m{color:#0550ae}.chroma .mb{color:#0550ae}.chroma .mf{color:#0550ae}.chroma .mh{color:#0550ae}.chroma .mi{color:#0550ae}.chroma .il{color:#0550ae}.chroma .mo{color:#0550ae}.chroma .o{color:#0550ae}.chroma .ow{color:#0550ae}.chroma .or{color:#0550ae}.chroma .p{color:#1f2328}.chroma .c{color:#57606a}.chroma .ch{color:#57606a}.chroma .cm{color:#57606a}.chroma .c1{color:#57606a}.chroma .cs{color:#57606a}.chroma .cp{color:#57606a}.chroma .cpf{color:#57606a}.chroma .gd{color:#82071e;background-color:#ffebe9}.chroma .ge{color:#1f2328}.chroma .gi{color:#116329;background-color:#dafbe1}.chroma .go{color:#1f2328}.chroma .gl{text-decoration:underline}.chroma .w{color:#fff}@media(prefers-color-scheme:dark){.bg{color:#e6edf3;background-color:#0d1117}.chroma{color:#e6edf3;background-color:#0d1117;-webkit-text-size-adjust:none}.chroma .err{color:#f85149}.chroma .lnlinks{outline:none;text-decoration:none;color:inherit}.chroma .lntd{vertical-align:top;padding:0;margin:0;border:0}.chroma .lntable{border-spacing:0;padding:0;margin:0;border:0}.chroma .hl{background-color:#6e7681}.chroma .lnt{white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#737679}.chroma .ln{white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#6e7681}.chroma .line{display:flex}.chroma .k{color:#ff7b72}.chroma .kc{color:#79c0ff}.chroma .kd{color:#ff7b72}.chroma .kn{color:#ff7b72}.chroma .kp{color:#79c0ff}.chroma .kr{color:#ff7b72}.chroma .kt{color:#ff7b72}.chroma .nc{color:#f0883e;font-weight:700}.chroma .no{color:#79c0ff;font-weight:700}.chroma .nd{color:#d2a8ff;font-weight:700}.chroma .ni{color:#ffa657}.chroma .ne{color:#f0883e;font-weight:700}.chroma .nl{color:#79c0ff;font-weight:700}.chroma .nn{color:#ff7b72}.chroma .nx{color:#e6edf3}.chroma .py{color:#79c0ff}.chroma .nt{color:#7ee787}.chroma .nv{color:#79c0ff}.chroma .vc{color:#79c0ff}.chroma .vg{color:#79c0ff}.chroma .vi{color:#79c0ff}.chroma .vm{color:#79c0ff}.chroma .nf{color:#d2a8ff;font-weight:700}.chroma .fm{color:#d2a8ff;font-weight:700}.chroma .l{color:#a5d6ff}.chroma .ld{color:#79c0ff}.chroma .s{color:#a5d6ff}.chroma .sa{color:#79c0ff}.chroma .sb{color:#a5d6ff}.chroma .sc{color:#a5d6ff}.chroma .dl{color:#79c0ff}.chroma .sd{color:#a5d6ff}.chroma .s2{color:#a5d6ff}.chroma .se{color:#79c0ff}.chroma .sh{color:#79c0ff}.chroma .si{color:#a5d6ff}.chroma .sx{color:#a5d6ff}.chroma .sr{color:#79c0ff}.chroma .s1{color:#a5d6ff}.chroma .ss{color:#a5d6ff}.chroma .m{color:#a5d6ff}.chroma .mb{color:#a5d6ff}.chroma .mf{color:#a5d6ff}.chroma .mh{color:#a5d6ff}.chroma .mi{color:#a5d6ff}.chroma .il{color:#a5d6ff}.chroma .mo{color:#a5d6ff}.chroma .o{color:#ff7b72;font-weight:700}.chroma .ow{color:#ff7b72;font-weight:700}.chroma .or{color:#ff7b72;font-weight:700}.chroma .c{color:#8b949e;font-style:italic}.chroma .ch{color:#8b949e;font-style:italic}.chroma .cm{color:#8b949e;font-style:italic}.chroma .c1{color:#8b949e;font-style:italic}.chroma .cs{color:#8b949e;font-weight:700;font-style:italic}.chroma .cp{color:#8b949e;font-weight:700;font-style:italic}.chroma .cpf{color:#8b949e;font-weight:700;font-style:italic}.chroma .gd{color:#ffa198;background-color:#490202}.chroma .ge{font-style:italic}.chroma .gr{color:#ffa198}.chroma .gh{color:#79c0ff;font-weight:700}.chroma .gi{color:#56d364;background-color:#0f5323}.chroma .go{color:#8b949e}.chroma .gp{color:#8b949e}.chroma .gs{font-weight:700}.chroma .gu{color:#79c0ff}.chroma .gt{color:#ff7b72}.chroma .gl{text-decoration:underline}.chroma .w{color:#6e7681}}