@font-face{font-family:Article Box Drawing;src:local(SFMono-Regular),local(SF Mono),local(Menlo-Regular),local(Menlo),local(Consolas),local(DejaVu Sans Mono);unicode-range:U+2500-259F}@layer components{.article-root{--article-display:var(--font-space-grotesk), "PingFang SC", "Hiragino Sans GB", "Microsoft YaHei", "Noto Sans SC", ui-sans-serif, system-ui, sans-serif;--article-sans:var(--font-geist-sans), "PingFang SC", "Hiragino Sans GB", "Microsoft YaHei", "Noto Sans SC", ui-sans-serif, system-ui, sans-serif;--article-mono:"Article Box Drawing", var(--font-geist-mono), ui-monospace, SFMono-Regular, Menlo, Consolas, "PingFang SC", monospace;--article-ease:cubic-bezier(.2, .8, .2, 1);--article-rule:var(--home-rule);--article-rule-strong:var(--home-rule-strong);--article-body:color-mix(in oklch, var(--foreground) 80%, var(--background));--article-tint:color-mix(in oklch, var(--foreground) 3.5%, transparent);--article-accent:var(--primary);isolation:isolate;font-family:var(--article-sans);position:relative}.article-backdrop{z-index:-1;pointer-events:none;background-image:linear-gradient(to right, var(--article-rule) 1px, transparent 1px), linear-gradient(to bottom, var(--article-rule) 1px, transparent 1px), radial-gradient(60% 70% at 70% 0%, color-mix(in oklch, var(--primary) 7%, transparent), transparent 70%);background-size:72px 72px,72px 72px,100% 100%;height:38rem;position:absolute;inset:-4rem calc(-1*clamp(1rem,2.5vw,3rem)) auto;-webkit-mask-image:radial-gradient(65% 75% at 30% 0,#000 10%,#0000 72%);mask-image:radial-gradient(65% 75% at 30% 0,#000 10%,#0000 72%)}.article-root a:focus-visible,.article-root button:focus-visible,.article-root summary:focus-visible,.article-table:focus-visible{outline:2px solid var(--ring);outline-offset:3px;border-radius:4px}.article-grid{grid-template-columns:minmax(0,46rem);justify-content:center;column-gap:clamp(2.5rem,5vw,5rem);display:grid}.article-grid>.article-main{grid-column:1;min-width:0}.article-grid>.article-rail{display:none}.article-grid>.article-head{grid-column:1/-1;min-width:0}.article-grid>.article-span{grid-column:1/-1;justify-self:center;width:100%;max-width:72rem}@media (min-width:64rem){.article-grid{grid-template-columns:minmax(0,46rem) 13.5rem}.article-grid>.article-rail{grid-column:2;display:block}}@media (min-width:96rem){.article-grid{grid-template-columns:minmax(0,1fr) minmax(0,46rem) minmax(0,1fr)}.article-grid>.article-main{grid-column:2}.article-grid>.article-head{grid-column:2/-1}.article-grid>.article-rail{grid-column:3;max-width:15rem}}.article-eyebrow{font-family:var(--article-mono);letter-spacing:.16em;text-transform:uppercase;color:var(--muted-foreground);font-size:11px;font-weight:500;line-height:1.4}.article-title{font-family:var(--article-display);letter-spacing:-.035em;text-wrap:balance;color:var(--foreground);max-width:24ch;font-size:clamp(2.25rem,1.35rem + 3.2vw,3.9rem);font-weight:600;line-height:1.04}.article-lede{color:var(--muted-foreground);text-wrap:pretty;font-size:clamp(1.125rem,1.05rem + .35vw,1.3rem);line-height:1.6}[data-locale=zh-CN] .article-title{letter-spacing:-.01em;word-break:keep-all;overflow-wrap:anywhere;max-width:19em;font-size:clamp(2rem,1.3rem + 2.5vw,3.4rem);line-height:1.22}[data-locale=zh-CN] .article-eyebrow{letter-spacing:.08em}.article-enter{animation:article-rise .8s var(--article-ease) both;animation-delay:calc(var(--i,0) * 70ms)}.article-progress{display:none}@supports (animation-timeline:scroll()){.article-progress{z-index:60;pointer-events:none;transform-origin:0;background:linear-gradient(90deg, color-mix(in oklch, var(--primary) 55%, transparent), var(--primary));height:2px;animation:linear both article-progress;animation-timeline:scroll(root);display:block;position:fixed;inset:0 0 auto}}.article-prose{counter-reset:article-h2 article-figure;color:var(--article-body);overflow-wrap:break-word;font-feature-settings:"kern", "liga", "calt";font-size:1.0625rem;line-height:1.8}@media (min-width:48rem){.article-prose{font-size:1.125rem}}[data-locale=zh-CN] .article-prose{letter-spacing:.012em;line-height:1.9}.article-prose>:first-child{margin-top:0}.article-prose>:last-child{margin-bottom:0}.article-prose p,.article-prose .article-p{text-wrap:pretty;margin-block:1.3em}.article-prose strong{color:var(--foreground);font-weight:600}.article-prose em{font-style:italic}[data-locale=zh-CN] .article-prose em{font-style:normal;text-emphasis:dot;text-emphasis-position:under}.article-prose del{color:var(--muted-foreground)}.article-prose h2,.article-prose h3,.article-prose h4{color:var(--foreground);font-family:var(--article-display);text-wrap:balance;scroll-margin-top:6rem;font-weight:600;position:relative}.article-prose h2{counter-increment:article-h2;letter-spacing:-.025em;margin-top:3.6em;margin-bottom:.9em;font-size:clamp(1.6rem,1.35rem + .9vw,2.05rem);line-height:1.18}.article-prose h2:before{content:counter(article-h2, decimal-leading-zero) / "";font-family:var(--article-mono);letter-spacing:.16em;color:var(--article-accent);margin-bottom:.9rem;font-size:.75rem;font-weight:500;line-height:1;display:block}.article-prose h3{letter-spacing:-.015em;margin-top:2.6em;margin-bottom:.7em;font-size:clamp(1.2rem,1.12rem + .35vw,1.38rem);line-height:1.35}.article-prose h4{letter-spacing:-.005em;margin-top:2.2em;margin-bottom:.6em;font-size:1.05rem;line-height:1.45}[data-locale=zh-CN] .article-prose h2{letter-spacing:-.005em;line-height:1.32}[data-locale=zh-CN] .article-prose h3,[data-locale=zh-CN] .article-prose h4{letter-spacing:0}.article-prose h2.sr-only{counter-increment:none}.article-prose h2.sr-only:before{content:none}.article-prose h2+h3{margin-top:1.4em}.article-anchor{color:var(--muted-foreground);opacity:0;transition:opacity .2s var(--article-ease), color .2s var(--article-ease);margin-left:.35em;font-weight:400;text-decoration:none}.article-prose :is(h2,h3,h4):hover .article-anchor,.article-anchor:focus-visible{opacity:1}.article-anchor:hover{color:var(--article-accent)}.article-prose hr{background:var(--article-rule-strong);border:0;height:1px;margin-block:3.4em}.article-prose hr+h2{margin-top:0}.article-prose a:not(.article-anchor){color:var(--foreground);text-decoration-line:underline;text-decoration-thickness:1px;-webkit-text-decoration-color:color-mix(in oklch, var(--article-accent) 55%, transparent);text-decoration-color:color-mix(in oklch, var(--article-accent) 55%, transparent);text-underline-offset:.22em;transition:color .2s var(--article-ease), text-decoration-color .2s var(--article-ease);font-weight:500}.article-prose a:not(.article-anchor):hover{color:var(--article-accent);text-decoration-color:currentColor}.article-prose ul,.article-prose ol{margin-block:1.3em;padding-left:1.5em}.article-prose li{margin-block:.55em;padding-left:.3em}.article-prose li>p{margin-block:.5em}.article-prose ul>li{list-style:none;position:relative}.article-prose ol{list-style:decimal}.article-prose ul>li:before{content:"";background:color-mix(in oklch, var(--article-accent) 75%, transparent);border-radius:999px;width:.38em;height:.38em;position:absolute;top:.71em;left:-1.05em}.article-prose ul>li[data-emoji]:before{display:none}.article-prose ul ul>li:before{box-shadow:inset 0 0 0 1.5px color-mix(in oklch, var(--article-accent) 60%, transparent);background:0 0}.article-prose ol>li::marker{font-family:var(--article-mono);font-variant-numeric:tabular-nums;color:var(--article-accent);font-size:.85em;font-weight:500}.article-prose :is(ul,ol) :is(ul,ol){margin-block:.4em}.article-prose ul.contains-task-list{padding-left:.2em}.article-prose li.task-list-item{padding-left:1.9em}.article-prose li.task-list-item:before{display:none}.article-prose li.task-list-item>input[type=checkbox]{appearance:none;border:1.5px solid var(--article-rule-strong);background:var(--background);border-radius:.3em;width:1.1em;height:1.1em;margin:0;position:absolute;top:.35em;left:0}.article-prose li.task-list-item>input[type=checkbox]:checked{border-color:var(--article-accent);background:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16' fill='none' stroke='white' stroke-width='2.4' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='M3.5 8.5l3 3 6-7'/%3E%3C/svg%3E") center / 75% no-repeat, var(--article-accent)}.article-prose blockquote{border-left:2px solid var(--article-accent);background:color-mix(in oklch, var(--article-accent) 5%, transparent);color:color-mix(in oklch, var(--foreground) 86%, var(--background));border-radius:0 .75rem .75rem 0;margin-block:2em;padding:1.05em 1.35em}.article-prose blockquote>:first-child{margin-top:0}.article-prose blockquote>:last-child{margin-bottom:0}.article-prose :not(pre)>code{border:1px solid var(--article-rule);background:var(--article-tint);font-family:var(--article-mono);letter-spacing:0;color:var(--foreground);overflow-wrap:anywhere;border-radius:.38em;padding:.14em .42em;font-size:.84em;font-weight:500}.article-prose a>code{color:inherit}.article-table{border:1px solid var(--article-rule-strong);-webkit-overflow-scrolling:touch;border-radius:.875rem;margin-block:2em;overflow-x:auto}.article-table table{border-collapse:collapse;font-variant-numeric:tabular-nums;width:100%;font-size:.875em;line-height:1.6}.article-table thead th{border-bottom:1px solid var(--article-rule-strong);background:var(--article-tint);font-family:var(--article-mono);letter-spacing:.1em;text-transform:uppercase;text-align:left;white-space:nowrap;color:var(--muted-foreground);padding:.8rem 1.1rem;font-size:.72rem;font-weight:500}.article-table td{border-top:1px solid var(--article-rule);vertical-align:top;min-width:7rem;padding:.8rem 1.1rem}.article-table tbody tr:first-child td{border-top:0}.article-table td:first-child{color:var(--foreground);font-weight:500}.article-table tbody tr{transition:background-color .2s var(--article-ease)}.article-table tbody tr:hover{background:var(--article-tint)}.article-table td code{white-space:nowrap}.article-inline-img{vertical-align:middle;max-width:100%;height:auto;display:inline-block}.article-prose .footnotes{border-top:1px solid var(--article-rule);color:var(--muted-foreground);margin-top:4em;padding-top:1.5em;font-size:.875em}.article-prose [data-footnote-ref]{font-family:var(--article-mono);font-size:.75em;text-decoration:none}.article-figure{counter-increment:article-figure;margin-block:2.6em}@media (min-width:80rem){.article-figure{margin-inline:-2.5rem}}.article-figure-frame{border:1px solid var(--article-rule);background:var(--article-tint);cursor:zoom-in;border-radius:.875rem;width:100%;display:block;overflow:hidden}.article-figure-frame img{width:100%;height:auto;transition:transform .7s var(--article-ease);display:block}@media (hover:hover) and (pointer:fine){.article-figure-frame:hover img{transform:scale(1.015)}}.article-figure figcaption{color:var(--muted-foreground);align-items:baseline;gap:.9em;margin-top:.9rem;padding-inline:.15rem;font-size:.875rem;line-height:1.55;display:flex}@media (min-width:80rem){.article-figure figcaption{padding-inline:2.5rem}}.article-figure figcaption:before{content:"FIG. " counter(article-figure, decimal-leading-zero) / "";font-family:var(--article-mono);letter-spacing:.14em;color:var(--article-accent);flex:none;font-size:.68rem;font-weight:500}.article-code{--code-fg:#dddde6;--code-dim:#8a8b98;--code-violet:#c3afff;--code-mint:#7ddeb6;--code-amber:#fdbc6f;--code-sky:#81cffc;--code-rose:#f799be;background-color:var(--stage);background-image:radial-gradient(90% 120% at 100% 0%, color-mix(in oklch, var(--stage-accent) 9%, transparent), transparent 60%);color:var(--code-fg);border:1px solid #ffffff14;border:1px solid lab(100% 0 0/.08);border-radius:.875rem;margin-block:2em;overflow:hidden;box-shadow:0 24px 48px -32px #16112b8c;box-shadow:0 24px 48px -32px lab(6.61231% 8.15005 -16.7716/.55)}@supports (color:lab(0% 0 0)){.article-code{--code-fg:lab(88.297% 1.13392 -4.37624);--code-dim:lab(58.0624% 1.9756 -7.24324);--code-violet:lab(75.1579% 23.0165 -42.7367);--code-mint:lab(81.7467% -37.1298 10.6223);--code-amber:lab(81.2808% 17.8387 48.0418);--code-sky:lab(79.2622% -16.0483 -30.1184);--code-rose:lab(74.0786% 39.4446 -3.53944)}}.dark .article-code{box-shadow:none;border-color:#ffffff1a;border-color:lab(100% 0 0/.1)}.article-code-bar{border-bottom:1px solid #ffffff14;border-bottom:1px solid lab(100% 0 0/.08);justify-content:space-between;align-items:center;gap:1rem;height:2.6rem;padding-inline:1.1rem .45rem;display:flex}.article-code-lang{font-family:var(--article-mono);letter-spacing:.14em;text-transform:uppercase;color:var(--code-dim);align-items:center;gap:.6rem;font-size:11px;font-weight:500;display:inline-flex}.article-code-lang:before{content:"";background:var(--stage-accent);border-radius:999px;width:6px;height:6px}.article-code-copy{height:1.9rem;font-family:var(--article-mono);letter-spacing:.06em;color:var(--code-dim);transition:color .2s var(--article-ease), background-color .2s var(--article-ease);border-radius:.5rem;align-items:center;gap:.4rem;padding-inline:.65rem;font-size:11px;display:inline-flex}.article-code-copy:hover{color:var(--code-fg);background:#ffffff12;background:lab(100% 0 0/.07)}.article-code-copy:focus-visible{outline:2px solid var(--stage-accent);outline-offset:1px}.article-code-copy[data-copied=true]{color:var(--code-mint)}.article-code pre{font-family:var(--article-mono);tab-size:2;scrollbar-width:thin;scrollbar-color:oklch(100% 0 0/.18) transparent;font-size:.8125rem;line-height:1.75;overflow-x:auto;background:0 0!important;margin:0!important;padding:1.1rem 1.25rem 1.3rem!important}@media (min-width:48rem){.article-code pre{font-size:.84rem}}.article-code code{white-space:pre;font-family:inherit}.article-code[data-wrap] code{white-space:pre-wrap;overflow-wrap:anywhere}.article-code .linenumber{-webkit-user-select:none;user-select:none;color:#ffffff3d!important;color:lab(100% 0 0/.24)!important;min-width:2.25em!important;padding-right:1.25em!important;font-style:normal!important}.article-code .token.comment,.article-code .token.prolog,.article-code .token.doctype,.article-code .token.cdata{color:var(--code-dim)}.article-code .token.punctuation,.article-code .token.operator{color:#a9a9b7;color:lab(69.6639% 1.95536 -7.25468)}.article-code .token.keyword,.article-code .token.selector,.article-code .token.important,.article-code .token.atrule,.article-code .token.table{color:var(--code-violet)}.article-code .token.string,.article-code .token.char,.article-code .token.attr-value,.article-code .token.regex,.article-code .token.inserted{color:var(--code-mint)}.article-code .token.number,.article-code .token.boolean,.article-code .token.constant,.article-code .token.symbol,.article-code .token.date{color:var(--code-amber)}.article-code .token.function,.article-code .token.class-name,.article-code .token.property,.article-code .token.key,.article-code .token.attr-name,.article-code .token.tag{color:var(--code-sky)}.article-code .token.builtin,.article-code .token.variable,.article-code .token.parameter,.article-code .token.deleted,.article-code .token.shebang{color:var(--code-rose)}.article-code .token.bold,.article-code .token.table{font-weight:600}.article-diagram{border:1px solid var(--article-rule-strong);background:radial-gradient(circle at 1px 1px, var(--article-rule-strong) 1px, transparent 0) 0 0 / 18px 18px, var(--background);border-radius:.875rem;margin-block:2.4em;overflow:hidden}.article-diagram-bar{border-bottom:1px solid var(--article-rule);background:var(--background);align-items:center;height:2.6rem;padding-inline:1.1rem;display:flex}.article-diagram-bar .article-code-lang{color:var(--muted-foreground)}.article-diagram-bar .article-code-lang:before{background:var(--article-accent)}.article-diagram-canvas{letter-spacing:normal;word-spacing:normal;font-feature-settings:normal;text-wrap:initial;justify-content:center;min-height:14rem;padding:1.75rem 1.25rem 2rem;line-height:normal;display:flex;overflow-x:auto}.article-diagram-canvas svg{max-width:min(100%,34rem);height:auto}.article-diagram-canvas[data-loading]{align-items:center}.article-diagram-pulse{background:linear-gradient(90deg, var(--article-tint), var(--article-rule-strong), var(--article-tint));background-size:200% 100%;border-radius:999px;width:40%;height:.5rem;animation:1.4s ease-in-out infinite article-shimmer}.article-toc-link{color:var(--muted-foreground);transition:color .2s var(--article-ease);gap:.7rem;padding:.38rem 0 .38rem .95rem;font-size:.8125rem;line-height:1.45;display:flex;position:relative}.article-toc-link:before{content:"";background:var(--article-accent);width:2px;transition:transform .3s var(--article-ease);border-radius:2px;position:absolute;top:.35rem;bottom:.35rem;left:-1px;transform:scaleY(0)}.article-toc-link:hover,.article-toc-link[data-active=true]{color:var(--foreground)}.article-toc-link[data-active=true]:before{transform:scaleY(1)}.article-toc-link[data-depth="3"]{padding-left:1.85rem;font-size:.78rem}.article-toc-num{font-family:var(--article-mono);letter-spacing:.08em;color:color-mix(in oklch, var(--muted-foreground) 75%, transparent);flex:none;font-size:.68rem;line-height:1.45rem}.article-toc-link[data-active=true] .article-toc-num{color:var(--article-accent)}.article-toc-scroll{overscroll-behavior:contain;scrollbar-width:none;min-height:0;overflow-y:auto;-webkit-mask-image:linear-gradient(#0000 0,#000 .75rem calc(100% - 2.5rem),#0000 100%);mask-image:linear-gradient(#0000 0,#000 .75rem calc(100% - 2.5rem),#0000 100%)}.article-toc-scroll::-webkit-scrollbar{display:none}.article-toc-details>summary{list-style:none}.article-toc-details>summary::-webkit-details-marker{display:none}.article-toc-details[open] .article-toc-chevron{transform:rotate(180deg)}}@keyframes article-rise{0%{opacity:0;transform:translateY(14px)}to{opacity:1;transform:translateY(0)}}@keyframes article-shimmer{0%{background-position:100% 0}to{background-position:-100% 0}}@keyframes article-progress{0%{transform:scaleX(0)}to{transform:scaleX(1)}}@media (prefers-reduced-motion:reduce){.article-root *,.article-root :before,.article-root :after{transition-duration:.01ms!important;animation-duration:.01ms!important}.article-progress{animation-duration:auto!important}}
