@font-face{font-family:IBM Plex Sans;font-style:normal;font-weight:100 700;font-display:swap;src:url(/fonts/ibm-plex-sans-latin.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:IBM Plex Sans;font-style:normal;font-weight:100 700;font-display:swap;src:url(/fonts/ibm-plex-sans-latin-ext.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:100 800;font-display:swap;src:url(/fonts/jetbrains-mono-latin.woff2)format("woff2")}:root{color-scheme:dark;--nord-0:#1b1b1b;--nord-1:#262626;--nord-2:#303030;--nord-3:#444;--nord-4:#a1a1a1;--nord-5:#c4c4c4;--nord-6:#ececec;--nord-8:#5aa2ee;--nord-9:#4a88d0;--on-accent:#1b1b1b}@media (prefers-color-scheme:light){:root{color-scheme:light;--nord-0:#e7ecf2;--nord-1:#f8fafc;--nord-2:#edf1f6;--nord-3:#cbd5e1;--nord-4:#4a5870;--nord-5:#33415a;--nord-6:#1f2a3a;--nord-8:#0e7490;--nord-9:#155e75;--on-accent:#f8fafc}}*{box-sizing:border-box}html{scroll-behavior:smooth;scroll-padding-top:4rem}body{background:var(--nord-0);color:var(--nord-5);font-variant-numeric:tabular-nums;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;margin:0;font-family:IBM Plex Sans,system-ui,-apple-system,PingFang SC,Hiragino Sans GB,Microsoft YaHei,Noto Sans SC,sans-serif;font-size:15px;line-height:1.7}:lang(zh-CN) body{line-height:1.85}a{color:var(--nord-8);text-decoration:none}a:hover{color:var(--nord-6)}:focus-visible{outline:2px solid var(--nord-8);outline-offset:2px}.section-label{color:var(--nord-4);letter-spacing:.08em;text-transform:uppercase;margin:0;font-size:11px;font-weight:700}.site-header{z-index:10;background:var(--nord-1);border-bottom:1px solid var(--nord-3);justify-content:space-between;align-items:center;gap:.5rem;height:3rem;padding:0 .75rem;display:flex;position:sticky;top:0}.brand{min-width:0;color:var(--nord-6);align-items:center;gap:.625rem;display:flex}.brand:hover{color:var(--nord-6)}.brand-logo{aspect-ratio:414/80;flex-shrink:0;width:auto;height:2rem;display:block}.brand-tag{border-left:1px solid var(--nord-3);color:var(--nord-4);white-space:nowrap;padding-left:.625rem;font-size:13px;line-height:1.25rem}.header-actions{flex-shrink:0;align-items:center;gap:.375rem;display:flex}.segment{background:var(--nord-2);border-radius:3px;padding:2px;font-size:13px;display:flex}.segment-item{height:24px;color:var(--nord-4);border-radius:2px;align-items:center;padding:0 .625rem;line-height:1;display:flex}a.segment-item:hover{color:var(--nord-6)}.segment-item.is-active{background:var(--nord-3);color:var(--nord-6)}.btn{white-space:nowrap;border-radius:2px;align-items:center;height:28px;padding:0 .625rem;font-size:13px;transition:background-color .15s;display:inline-flex}.btn-primary{background:var(--nord-8);color:var(--on-accent)}.btn-primary:hover{background:var(--nord-9);color:var(--on-accent)}.narrow-only{display:none}.page{grid-template-columns:15rem minmax(0,46rem);justify-content:center;gap:3rem;padding:2.5rem 1.5rem 4rem;display:grid}.toc ol{margin:0;padding:0;list-style:none}.toc a{color:var(--nord-4);border-left:2px solid #0000;padding:.3rem .625rem;font-size:13px;line-height:1.4;display:block}.toc a:hover{border-left-color:var(--nord-8);background:var(--nord-2);color:var(--nord-6)}.toc-side{border:1px solid var(--nord-3);background:var(--nord-1);border-radius:2px;align-self:start;max-height:calc(100dvh - 7rem);padding:.75rem .5rem;position:sticky;top:5.5rem;overflow-y:auto}.toc-side .section-label{padding:0 .625rem .5rem}.toc-inline{border:1px solid var(--nord-3);background:var(--nord-1);border-radius:2px;margin-bottom:1.75rem;display:none}.toc-inline summary{cursor:pointer;justify-content:space-between;align-items:center;padding:.625rem .875rem;list-style:none;display:flex}.toc-inline summary::-webkit-details-marker{display:none}.toc-inline summary:after{content:"";border-bottom:1.5px solid;border-right:1.5px solid;width:.4rem;height:.4rem;transition:transform .15s;transform:translateY(-25%)rotate(45deg)}.toc-inline[open] summary:after{transform:translateY(25%)rotate(-135deg)}.toc-inline ol{padding:0 .5rem .625rem}.prose h1{color:var(--nord-6);letter-spacing:-.01em;margin:0;font-size:1.875rem;font-weight:700;line-height:1.25}.prose h1+p{border:1px solid var(--nord-3);background:var(--nord-1);color:var(--nord-4);border-radius:2px;margin:.875rem 0 .5rem;padding:.125rem .5rem;font-size:13px;display:inline-block}.prose h1+p strong{color:var(--nord-4);font-weight:400}.prose h2{border-bottom:1px solid var(--nord-3);color:var(--nord-6);margin:2.75rem 0 1rem;padding-bottom:.5rem;font-size:1.2rem;font-weight:700;line-height:1.4}.prose h3{color:var(--nord-6);margin:1.75rem 0 .5rem;font-size:1rem;font-weight:700}.prose p,.prose ul,.prose ol{margin:.875rem 0}.prose ul,.prose ol{padding-left:1.25rem}.prose li{margin:.375rem 0}.prose li::marker{color:var(--nord-4)}.prose strong{color:var(--nord-6);font-weight:700}.prose a{border-bottom:1px solid color-mix(in srgb, var(--nord-8) 40%, transparent);overflow-wrap:anywhere}.prose a:hover{border-bottom-color:currentColor}.prose code{background:var(--nord-2);color:var(--nord-6);border-radius:2px;padding:.0625rem .3rem;font-family:JetBrains Mono,ui-monospace,monospace;font-size:.85em}.prose blockquote{border-left:2px solid var(--nord-8);background:var(--nord-1);margin:1rem 0;padding:.25rem 1rem}.prose table{border-collapse:collapse;width:100%;font-size:14px}.prose th,.prose td{border-bottom:1px solid var(--nord-3);text-align:left;padding:.4rem .6rem}.prose hr{border:0;border-top:1px solid var(--nord-3);margin:2rem 0}.site-footer{border-top:1px solid var(--nord-3);background:var(--nord-1)}.footer-inner{max-width:64rem;color:var(--nord-4);flex-wrap:wrap;align-items:center;gap:.5rem 1.5rem;margin:0 auto;padding:1.25rem 1.5rem 2rem;font-size:13px;display:flex}.footer-inner p{margin:0}.powered-by{aspect-ratio:544/43;width:auto;height:1.25rem;color:var(--nord-4);margin-left:auto;display:block}@media (width<=960px){.page{max-width:46rem;margin:0 auto;padding:1.5rem 1rem 3rem;display:block}.toc-side{display:none}.toc-inline{display:block}}@media (width<=560px){.wide-only{display:none}.narrow-only{display:inline}.brand-tag{display:none}.prose h1{font-size:1.5rem}.powered-by{margin-left:0}}@media (width<=359px){.brand-logo{height:1.625rem}.btn{display:none}}
