:root{color-scheme:light;--paper:#fbfcfd;--ink:#262a2f;--muted:#626b75;--line:#dce1e6;--soft:#f0f3f6;--accent:#a3322c;--rail:#191b1d;--rail-line:#34383c;--rail-text:#f1f3f4;--mono:"SFMono-Regular",Consolas,"Liberation Mono",monospace;--sans:-apple-system,BlinkMacSystemFont,"Segoe UI","PingFang SC","Microsoft YaHei",sans-serif}
*{box-sizing:border-box}html{scroll-behavior:smooth;scroll-padding-top:100px}body{margin:0;color:var(--ink);background:var(--paper);font:1rem/1.8 var(--sans);-webkit-font-smoothing:antialiased}::selection{background:#edc9c5;color:#242729}a{color:inherit;text-underline-offset:.25em;text-decoration-thickness:1px;text-decoration-color:#9aa3ad}a:hover{color:var(--accent);text-decoration-color:currentColor}button{font:inherit}a,button,summary{-webkit-tap-highlight-color:transparent}a:focus-visible,button:focus-visible,summary:focus-visible,[tabindex="0"]:focus-visible{outline:2px solid var(--accent);outline-offset:4px}p{margin:1em 0}img{max-width:100%}.skip{position:fixed;top:12px;left:12px;transform:translateY(-180%);background:var(--ink);color:#fff;padding:8px 14px;z-index:100}.skip:focus{transform:none}.sr-only{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0,0,0,0);white-space:nowrap;border:0}
.sidebar{position:fixed;inset:0 auto 0 0;width:238px;background:var(--rail);color:var(--rail-text);display:flex;flex-direction:column;border-right:1px solid #151719;z-index:30;padding:0 21px}.brand{display:flex;gap:12px;align-items:center;padding:30px 0 29px;text-decoration:none;font:600 .9375rem/1.4 var(--mono);white-space:nowrap}.brand:hover{color:#fff}.brand small{display:block;font:400 .75rem/1.8 var(--sans);color:#a4adb5;margin-top:5px;letter-spacing:.08em}.brand-mark{position:relative;display:flex;align-items:center;justify-content:center;width:35px;height:35px;border:1px solid #84909a;font:600 23px/1 var(--mono);flex-shrink:0}.brand-mark>span{position:absolute;bottom:-4px;right:-4px;font-size:12px;background:var(--rail);padding:1px 3px;color:#e59783}.sitenav{overflow:auto;padding-bottom:16px}.nav-label{font-size:.75rem;letter-spacing:.06em;color:#939da6;margin:28px 10px 9px}.nav-group:first-child .nav-label{margin-top:10px}.sitenav a{display:flex;align-items:center;gap:14px;min-height:44px;font-size:.875rem;padding:8px 10px;text-decoration:none;color:#bbc2c9;border-left:2px solid transparent;margin:2px 0}.nav-number{font:.75rem/1 var(--mono);color:#8c969f}.sitenav a:hover{background:#24282b;color:#fff}.sitenav a[aria-current=page]{background:#2a2d30;color:#fff;border-color:#dc7b68}.sitenav a[aria-current=page] .nav-number{color:#e59783}.sidebar-bottom{margin-top:auto;padding:22px 10px 28px;border-top:1px solid var(--rail-line);font-size:.75rem;color:#939da6}.sidebar-bottom>a{font-size:.875rem;color:#e7ebee;display:inline-block;padding:4px 0}.sidebar-bottom p{font:.75rem/1.8 var(--mono);letter-spacing:-.015em;margin:12px 0 4px}
.workspace{margin-left:238px;min-height:100vh}.topbar{height:66px;position:sticky;top:0;background:var(--paper);border-bottom:1px solid var(--line);display:flex;align-items:center;justify-content:space-between;padding:0 44px;gap:18px;z-index:20}.breadcrumbs{font-size:.8125rem;color:var(--muted);margin:0;display:flex;gap:12px;align-items:center;flex-wrap:wrap;line-height:1.5}.breadcrumbs a{text-decoration:none}.crumb-sep{color:#a3acb5}.github-link{font:.8125rem/1 var(--mono);text-decoration:none;white-space:nowrap;padding:12px 0}.github-link span{color:var(--accent);font-size:18px}.mobile-brand,.mobile-menu{display:none}.reading-layout{display:grid;grid-template-columns:minmax(0,780px) 170px;gap:54px;max-width:1160px;padding:43px 44px 0;margin:0 auto}.document{min-width:0;outline:0}.document-meta{display:flex;justify-content:space-between;align-items:center;color:var(--muted);font-size:.75rem;line-height:1.5;margin-bottom:20px}.document-meta>span{font-family:var(--mono);letter-spacing:.04em}.document-meta>a{font-size:.8125rem;text-decoration:none}.pagehead{padding-bottom:28px;border-bottom:1px solid var(--line);margin-bottom:36px}.pagehead h1{font-size:2.25rem;line-height:1.35;letter-spacing:-.025em;font-weight:650;margin:0 0 18px}.pagehead>p{font-size:1rem;color:var(--muted);margin:0;max-width:42em}.pagehead>p:empty{display:none}.source-note{color:var(--muted);font-size:.8125rem;margin:-12px 0 30px;overflow-wrap:anywhere}.source-note code{font-size:inherit}.article{min-width:0}.article section{margin:36px 0 44px}.article h2{font-size:1.3125rem;line-height:1.6;letter-spacing:-.012em;font-weight:650;margin:38px 0 17px;scroll-margin-top:98px}.article section:first-child h2{margin-top:0}.article h3{font-size:1.0625rem;line-height:1.6;font-weight:650;margin:24px 0 12px}.article p,.article li{overflow-wrap:anywhere}.article li{margin:7px 0}.article strong{font-weight:650}.article blockquote{margin:26px 0;padding:4px 20px;border-left:3px solid #a3adb7;color:var(--muted);background:var(--soft)}.article code{font:.875rem/1.7 var(--mono)}p code,li code,td code{background:#edf0f3;padding:2px 4px;border:1px solid #e1e5e9;font-size:.86em;overflow-wrap:anywhere}.heading-anchor{margin-left:10px;font:400 1rem/1 var(--mono);opacity:0;text-decoration:none;color:#979fa8}.article h2:hover .heading-anchor,.heading-anchor:focus{opacity:1}.text-link{font-size:.9375rem}.reading-link{display:inline-block;color:var(--accent);font-size:.75rem;padding:2px 4px;white-space:nowrap;text-decoration:none;border-bottom:1px solid #d6b5b1;margin-left:4px}
.codeblock{border:1px solid #303941;background:#20262d;color:#e9edf2;margin:21px 0 24px;max-width:100%;border-radius:3px;overflow:hidden}.codebar{display:flex;align-items:center;justify-content:space-between;background:#282f37;border-bottom:1px solid #3a424b;min-height:39px;padding:0 15px;gap:12px}.codebar>span{font:.75rem/1.4 var(--mono);letter-spacing:.08em;color:#aeb8c3}.copy-code{cursor:pointer;border:0;background:none;color:#d3dbe4;min-height:38px;min-width:50px;padding:4px 3px;font-size:.875rem}.copy-code:hover{color:#fff}.copy-code:focus-visible{outline-color:#e59783}.codeblock pre{margin:0;padding:20px;overflow:auto;max-width:100%;line-height:1.75;tab-size:4}.codeblock code{font-size:.875rem;line-height:1.75;white-space:pre;overflow-wrap:normal}.copy-fallback{position:fixed;top:0;left:-9999px}.tablewrap{width:100%;overflow:auto;margin:22px 0;border:1px solid var(--line);border-radius:3px}table{width:100%;border-collapse:collapse;min-width:570px;font-size:.875rem;line-height:1.8}th,td{text-align:left;padding:13px 15px;vertical-align:top;border-bottom:1px solid var(--line)}th{font-size:.875rem;font-weight:600;color:#5b6570;background:var(--soft);white-space:nowrap}tr:last-child td{border-bottom:0}tbody tr:hover{background:#f3f5f7}table code{font-size:.875rem!important}td .reading-link{display:block;width:max-content;margin:8px 0 0}td:first-child{color:var(--ink)}
.hero{padding-bottom:38px;border-bottom:1px solid var(--line);margin-top:0!important}.hero .eyebrow{font:.75rem/1.4 var(--mono);letter-spacing:.08em;color:var(--accent);margin:0 0 20px}.hero h1{font-size:2.5rem;line-height:1.25;font-weight:650;letter-spacing:-.025em;margin:0 0 22px}.hero .lead{font-size:1rem;color:var(--muted);max-width:42em;margin:0}.actions{display:flex;gap:12px;margin:25px 0 28px;flex-wrap:wrap}.button{display:inline-flex;justify-content:center;align-items:center;min-height:42px;padding:9px 18px;font-size:.875rem;font-weight:550;line-height:1.6;text-decoration:none;background:var(--rail);color:#fff;border:1px solid var(--rail);border-radius:2px}.button:hover{background:#353b41;color:#fff}.button.secondary{color:var(--ink);background:none;border-color:#b8c0c7}.button.secondary:hover{background:var(--soft)}.button>span{display:none}.quick-install>span{color:var(--muted);font-size:.8125rem}.quick-install .codeblock{margin:8px 0 0}.quick-install .codeblock pre{padding:17px 20px}.grid{display:block;border-top:1px solid var(--line)}.card{display:grid;grid-template-columns:130px minmax(0,1fr);column-gap:18px;padding:22px 0;border-bottom:1px solid var(--line);text-decoration:none;position:relative}.card .tag{grid-row:1/4;font:.75rem/1.5 var(--mono);letter-spacing:.05em;color:var(--muted);padding-top:7px}.card h2,.card h3{font-size:1.0625rem;margin:0 0 5px;line-height:1.7}.card p{color:var(--muted);margin:0;font-size:.9375rem;line-height:1.8}.card a{font-size:.8125rem;display:inline-block;margin-top:12px;width:max-content}.card .tutorial-link{color:var(--accent);grid-column:2;margin-bottom:0}.card:hover h3{color:var(--accent)}.card:hover{color:var(--ink)}.callout{border-left:2px solid var(--accent);background:#f2f4f6;padding:19px 22px!important}.callout h2{font-size:1.0625rem;margin:0 0 9px!important}.callout p{font-size:.9375rem;color:var(--muted);margin:0}.steps{counter-reset:step;padding:0;list-style:none;border-top:1px solid var(--line)}.steps li{counter-increment:step;padding:19px 0 19px 42px;border-bottom:1px solid var(--line);position:relative;margin:0}.steps li:before{content:counter(step,decimal-leading-zero);position:absolute;left:0;top:23px;color:var(--accent);font:.75rem/1.4 var(--mono)}.linklist{list-style:none;margin:20px 0;padding:0;border-top:1px solid var(--line)}.linklist li{margin:0;padding:14px 0;border-bottom:1px solid var(--line)}.linklist li>a:first-child{font-size:.9375rem}.qa{border-top:1px solid var(--line)}.qa details{border-bottom:1px solid var(--line);padding:0}.qa summary{font-size:1rem;font-weight:550;padding:18px 28px 18px 0;cursor:pointer;list-style:none;position:relative;scroll-margin-top:98px}.qa summary:after{content:'+';position:absolute;right:3px;top:18px;font:400 20px/1.5 var(--mono);color:var(--muted)}.qa summary::-webkit-details-marker{display:none}.qa details[open]>summary:after{content:'−'}.qa details>p{margin:0;padding:0 24px 23px 0;font-size:.9375rem;color:var(--muted)}
.toc{position:sticky;top:107px;height:fit-content;max-height:calc(100vh - 130px);overflow:auto;border-left:1px solid var(--line);padding-left:18px;font-size:.875rem;line-height:1.7}.toc>p{font-size:.75rem;letter-spacing:.04em;margin:0 0 16px;color:var(--muted)}.toc ol,.inline-toc ol{list-style:none;padding:0;margin:0}.toc li{margin:0 0 12px}.toc a{color:var(--muted);text-decoration:none;display:block;overflow-wrap:anywhere}.toc a:hover,.toc a[aria-current=location]{color:var(--accent)}.toc-source{margin:25px 0 0;padding-top:16px;border-top:1px solid var(--line)}.inline-toc{display:none}.chapter-nav{display:grid;grid-template-columns:1fr 1fr;gap:24px;border-top:1px solid var(--line);margin-top:58px;padding:24px 0}.chapter-nav>a{display:block;text-decoration:none;min-height:64px;padding:5px 0}.chapter-nav>a:last-child:not(:first-child){text-align:right}.chapter-nav span{display:block;font-size:.75rem;color:var(--muted);margin-bottom:5px}.chapter-nav strong{font-weight:550;font-size:.9375rem}.document-footer{border-top:1px solid var(--line);padding:24px 0 40px;font-size:.75rem;line-height:1.8;color:var(--muted)}.document-footer p{margin:0 0 6px}.document-footer>div{display:flex;flex-wrap:wrap;gap:18px;margin-top:17px}.document-footer a{text-decoration:none}
@media(min-width:1680px){.reading-layout{padding-top:56px}.topbar{padding-left:max(44px,calc((100vw - 1398px)/2 + 44px))}}
@media(max-width:1250px){.reading-layout{grid-template-columns:minmax(0,1fr);max-width:900px;padding:38px 38px 0}.toc{display:none}.inline-toc{display:block;border:1px solid var(--line);background:var(--soft);margin:22px 0 30px;border-radius:2px;font-size:.875rem}.inline-toc summary{padding:12px 15px;cursor:pointer;font-size:.875rem}.inline-toc ol{padding:0 16px 14px}.inline-toc li a{display:block;padding:7px 0;text-decoration:none;color:var(--muted)}}
@media(max-width:850px){html{scroll-padding-top:120px}.sidebar{display:none}.workspace{margin-left:0}.topbar{height:58px;padding:0 22px}.breadcrumbs{display:none}.mobile-brand{display:block;text-decoration:none;font:600 .875rem/1.5 var(--mono)}.mobile-brand>span{margin-left:13px;font:400 .75rem/1.5 var(--sans);color:var(--muted)}.github-link{font-size:.75rem}.mobile-menu{display:block;position:sticky;top:58px;z-index:20;border-bottom:1px solid var(--line);background:var(--paper)}.mobile-menu>summary{cursor:pointer;list-style:none;font-size:.8125rem;display:flex;align-items:center;padding:10px 22px;min-height:43px;gap:15px}.mobile-menu>summary::-webkit-details-marker{display:none}.mobile-menu>summary:after{content:'+';margin-left:auto;font:18px/1 var(--mono);color:var(--muted)}.mobile-menu[open]>summary:after{content:'−'}.mobile-menu>summary>span{font-size:.75rem;color:var(--muted)}.mobile-menu>.sitenav{max-height:calc(100dvh - 150px);padding:18px 22px 22px;display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:12px 20px;background:var(--rail);color:#fff}.mobile-menu:not([open])>.sitenav{display:none}.mobile-menu .nav-label{margin-top:5px}.reading-layout{max-width:810px;padding:30px 26px 0}.document-meta{font-size:.75rem}.pagehead{margin-bottom:28px}.pagehead h1{font-size:1.875rem;line-height:1.45;letter-spacing:-.02em}.hero h1{font-size:2.125rem}.article h2,.qa summary{scroll-margin-top:124px}.article section{margin:30px 0 36px}.codeblock pre{padding:18px 16px}.document-footer{padding-bottom:32px}}
@media(max-width:480px){.reading-layout{padding:26px 20px 0}.topbar{padding:0 20px}.mobile-menu>summary{padding:10px 20px}.pagehead h1{font-size:1.75rem}.hero h1{font-size:1.875rem}.hero .lead{line-height:1.85}.card{grid-template-columns:1fr;gap:0;padding:21px 0}.card .tag{grid-row:auto;font-size:.75rem;padding:0;margin-bottom:7px}.card .tutorial-link{grid-column:1}.actions{gap:9px}.button{padding:9px 14px}.codeblock code{font-size:.8125rem}.callout{padding:16px!important}.article h2{font-size:1.1875rem}.mobile-menu>.sitenav{gap:8px 10px;padding:18px 16px}.sitenav a{gap:10px;font-size:.875rem;padding:8px 8px}.chapter-nav{gap:15px;margin-top:38px}.document-meta{gap:12px}.document-footer>div{gap:12px 18px}}
@media(prefers-reduced-motion:reduce){html{scroll-behavior:auto}}
