:root{color-scheme:light;--ink:#26313b;--muted:#677582;--line:#dfe5ea;--accent:#235c86;--paper:#fff;--nav:#f7f9fa;--code:#edf2f5}
*{box-sizing:border-box}html{scroll-padding-top:90px}body{margin:0;color:var(--ink);background:var(--paper);font:16px/1.7 "Segoe UI",Arial,sans-serif}a{color:var(--accent);text-underline-offset:3px}a:hover{color:#123d5c}button,input{font:inherit}button{cursor:pointer}button:focus-visible,a:focus-visible,input:focus-visible,[tabindex]:focus-visible{outline:3px solid #609dc5;outline-offset:3px}[hidden]{display:none!important}
.topbar{height:64px;border-bottom:1px solid var(--line);display:flex;align-items:center;justify-content:space-between;padding:0 28px;position:sticky;top:0;background:#ffffffed;z-index:5;backdrop-filter:blur(8px)}.brand{font-size:22px;font-weight:650;text-decoration:none;color:var(--ink);letter-spacing:-.4px}.brand span{margin-left:18px;font-size:14px;font-weight:400;letter-spacing:0;color:var(--muted)}#menu-toggle{display:none;border:1px solid var(--line);border-radius:5px;background:white;padding:4px 10px}.skip{position:fixed;top:-100px;left:20px;z-index:20;background:white;padding:10px}.skip:focus{top:10px}
.layout{display:grid;grid-template-columns:262px minmax(0,920px) 214px;max-width:1510px;margin:auto}.sidebar{position:sticky;top:64px;height:calc(100vh - 64px);overflow:auto;padding:25px 18px 36px 22px;border-right:1px solid var(--line);background:var(--nav);scrollbar-width:thin}.sidebar label{display:block;font-size:13px;font-weight:600;margin-bottom:7px;color:var(--muted)}.search-box{position:relative}.search-box input{width:100%;padding:9px 26px 9px 10px;font-size:13px;border:1px solid #cdd7df;border-radius:5px;background:white;color:var(--ink)}#clear-search{position:absolute;right:5px;top:4px;background:white;border:0;color:var(--muted);font-size:20px}#search::-webkit-search-cancel-button{display:none}#search-status{margin:8px 0;font-size:12px;color:var(--muted)}#search-status:empty{display:none}.index-link{display:block;margin:20px 0 16px;font-size:14px;text-decoration:none}.nav-group{margin:20px 0}.nav-group h2{font-size:12px;letter-spacing:.025em;color:var(--muted);margin:0 0 8px;font-weight:650}.nav-group a{display:block;text-decoration:none;color:#48545f;padding:5px 9px;font-size:13px;line-height:1.5;overflow-wrap:anywhere;border-left:2px solid transparent}.nav-group a:hover{background:#eaf0f4}.nav-group a[aria-current=page]{background:#e5edf3;border-left-color:var(--accent);color:#174c72;font-weight:600}.search-result{display:block;border-bottom:1px solid var(--line);padding:12px 2px;text-decoration:none}.search-result strong{font-size:13px;display:block;overflow-wrap:anywhere}.search-result span{font-size:12px;color:var(--muted);display:block;line-height:1.5;overflow-wrap:anywhere}.search-result mark{background:#fff0b8;color:inherit}
.content{min-width:0;padding:40px 44px 52px}.content article>h1{font-size:31px;line-height:1.28;letter-spacing:-.6px;font-weight:650;margin:0 0 24px;overflow-wrap:anywhere}.content h2{font-size:23px;line-height:1.4;letter-spacing:-.3px;font-weight:650;margin:44px 0 17px;padding-top:4px}.content h3{font-size:18px;line-height:1.45;font-weight:650;margin:30px 0 13px}.content p{margin:14px 0 18px}.content strong{font-weight:650}.content ul,.content ol{padding-left:26px;margin:14px 0 22px}.content li{margin:6px 0}.content blockquote{border-left:3px solid #afc6d6;color:#526473;padding-left:18px;margin-left:0}.content hr{border:0;border-top:1px solid var(--line);margin:34px 0}
code{font: .88em/1.5 Consolas,"Cascadia Code",monospace;color:#184f73;background:var(--code);border:1px solid #e1e8ed;border-radius:4px;padding:.12em .32em;overflow-wrap:anywhere;box-decoration-break:clone;-webkit-box-decoration-break:clone}a code{color:inherit}.table-scroll{width:100%;overflow-x:auto;margin:19px 0 27px;border:1px solid var(--line);border-radius:5px}table{border-collapse:collapse;width:100%;font-size:14px;line-height:1.55}th,td{padding:11px 13px;text-align:left;vertical-align:top;border-bottom:1px solid var(--line);min-width:95px}th{font-weight:650;background:#f3f6f8;color:#34434f}tr:last-child td{border-bottom:0}td code{font-size:12.5px;overflow-wrap:anywhere}tr:nth-child(even) td{background:#fcfdfe}td:first-child{min-width:150px}td p{margin:0}.code-block{position:relative;margin:22px 0;background:#f5f7f9;border:1px solid var(--line);border-radius:6px;overflow:hidden}pre{margin:0;padding:42px 20px 20px;overflow:auto;line-height:1.6;font-size:14px}pre code{border:0;background:none;padding:0;color:#273e4e;white-space:pre;overflow-wrap:normal}.copy-code{position:absolute;right:8px;top:7px;font-size:12px;padding:2px 8px;background:white;border:1px solid #d5dfe7;border-radius:4px;color:#52616e}.token-keyword{color:#8250a6;font-weight:600}.token-number{color:#0d7365}.token-string{color:#92622b}.token-comment{color:#657f6e;font-style:italic}
.page-toc{position:sticky;top:64px;height:calc(100vh - 64px);overflow:auto;padding:38px 20px 25px 12px;font-size:12px;line-height:1.5;scrollbar-width:thin}.page-toc>p{color:var(--muted);font-weight:600;margin:0 0 15px}.page-toc ul{padding:0;list-style:none;margin:0}.page-toc li{margin:9px 0}.page-toc li ul{padding-left:11px;border-left:1px solid var(--line);margin:7px 0 12px}.page-toc a{color:var(--muted);text-decoration:none}.page-toc a:hover{color:var(--accent)}footer{border-top:1px solid var(--line);margin-top:48px;padding-top:20px;display:flex;gap:16px;flex-wrap:wrap;font-size:12px;color:var(--muted)}footer a{text-decoration:none}
@media(min-width:1510px){.layout{border-left:1px solid var(--line);border-right:1px solid var(--line)}}
@media(max-width:1200px){.layout{grid-template-columns:244px minmax(0,1fr)}.page-toc{display:none}.content{padding:32px;max-width:960px}.sidebar{padding-left:17px}}
@media(max-width:760px){.topbar{height:58px;padding:0 16px}.brand{font-size:21px}.brand span{display:none}#menu-toggle{display:block}.layout{display:block}.sidebar{display:none;position:fixed;top:58px;left:0;bottom:0;height:auto;width:min(340px,92vw);z-index:6;box-shadow:8px 0 30px #26313b26}.sidebar.is-open{display:block}.content{padding:27px 18px 40px}.content article>h1{font-size:27px}.content h2{font-size:21px;margin-top:34px}.content h3{font-size:18px}body{font-size:15px}th,td{padding:9px 10px}td:first-child{min-width:135px}.table-scroll{border-radius:3px}table{font-size:13px}}
@media print{.topbar,.sidebar,.page-toc,footer,.copy-code,.skip{display:none!important}.layout{display:block;max-width:none;border:0}.content{padding:0;max-width:none}body{font-size:10pt;color:black}h1,h2,h3{break-after:avoid}tr,pre{break-inside:avoid}.table-scroll{overflow:visible}code{color:black}a{color:inherit;text-decoration:none}pre{white-space:pre-wrap;padding:12px}}

/* Static vector diagrams remain readable offline and can be opened full-size. */
.component-diagram{margin:24px 0 30px;border:1px solid var(--line);border-radius:8px;overflow:auto;background:#fff}
.component-diagram>a{display:block;padding:12px}
.component-diagram img,.component-diagram>svg{display:block;width:100%;min-width:650px;height:auto}
.component-diagram figcaption{padding:10px 16px;border-top:1px solid var(--line);font-size:12px;line-height:1.6;color:var(--muted)}
@media print{.component-diagram{overflow:visible;break-inside:avoid}.component-diagram img,.component-diagram>svg{min-width:0}}
