:root{color-scheme:light;--color-paper:oklch(96.5% .016 82);--color-paper-2:oklch(93.5% .02 80);--color-ink:oklch(17% .012 60);--color-ink-2:oklch(28% .014 60);--color-muted:oklch(49% .014 65);--color-rule:oklch(80% .018 75);--color-rule-2:oklch(66% .02 72);--color-accent:oklch(45% .15 264);--color-accent-ink:oklch(97% .012 82);--color-focus:oklch(50% .18 264);--color-accent-soft:color-mix(in oklab, var(--color-accent) 18%, transparent);--font-display:"Avenir Next", Avenir, "Segoe UI Variable", "Segoe UI", -apple-system, BlinkMacSystemFont, "PingFang SC", "Microsoft YaHei UI", "Microsoft YaHei", system-ui, sans-serif;--font-body:"Avenir Next", Avenir, "Segoe UI Variable", "Segoe UI", -apple-system, BlinkMacSystemFont, "PingFang SC", "Microsoft YaHei UI", "Microsoft YaHei", system-ui, sans-serif;--font-mono:ui-monospace, "SFMono-Regular", "Cascadia Code", "Segoe UI Mono", Consolas, "Liberation Mono", "Courier New", monospace;--text-display:clamp(3.25rem, 6.2vw, 5.5rem);--text-section:clamp(2rem, 3.2vw, 3rem);--text-title:clamp(1.25rem, 1.6vw, 1.5rem);--text-lede:clamp(1.15rem, 1.5vw, 1.375rem);--text-body:1.0625rem;--text-sm:.9375rem;--text-xs:.8125rem;--container:1180px;--gutter:clamp(20px, 5vw, 56px);--gap:clamp(16px, 2.4vw, 32px);--section-gap:clamp(56px, 7vw, 96px);--header-h:72px;--radius:0;--rule-hair:1px;--rule-strong:2px;--ease:cubic-bezier(.16, 1, .3, 1);--dur:.18s;--z-header:300;--z-skip:400}*,:before,:after{box-sizing:border-box}html,body{overflow-x:clip}html{scroll-padding-top:calc(var(--header-h) + 24px);scrollbar-color:var(--color-rule-2) var(--color-paper)}body{background:var(--color-paper);color:var(--color-ink);font-family:var(--font-body);font-size:var(--text-body);-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;margin:0;line-height:1.65}:lang(zh) body{line-height:1.85}::selection{background:var(--color-accent-soft);color:var(--color-ink)}h1,h2,h3{font-family:var(--font-display);letter-spacing:-.02em;text-wrap:balance;overflow-wrap:break-word;min-width:0;margin:0;font-weight:400;line-height:1.02}h1{max-width:15ch;font-size:var(--text-display)}h2{max-width:24ch;font-size:var(--text-section)}h3{max-width:40ch;font-size:var(--text-title);line-height:1.2}:lang(zh) h1,:lang(zh) h2,:lang(zh) h3{letter-spacing:0;line-height:1.14}p{text-wrap:pretty;margin:0}a{color:var(--color-accent);text-decoration:underline;text-decoration-thickness:var(--rule-hair);text-underline-offset:.16em}a:hover{text-decoration-thickness:var(--rule-strong)}a:focus-visible,button:focus-visible,summary:focus-visible{outline:2px solid var(--color-focus);outline-offset:3px}img,picture,svg{max-width:100%;display:block}figure{margin:0}img{height:auto}ul,ol{margin:0;padding:0}button,input,select,textarea{font:inherit}.container{width:100%;max-width:calc(var(--container) + 2 * var(--gutter));padding-inline:var(--gutter);margin-inline:auto}.section{padding-block:var(--section-gap);border-top:var(--rule-hair) solid var(--color-rule)}.section-head{gap:var(--gap);grid-template-columns:minmax(0,5fr) minmax(0,7fr);align-items:end;margin-bottom:clamp(32px,5vw,56px);display:grid}.section-head p{max-width:64ch;color:var(--color-ink-2)}@media (width<=900px){.section-head{grid-template-columns:minmax(0,1fr);gap:12px}}.lede{max-width:50ch;font-size:var(--text-lede);line-height:1.5}:lang(zh) .lede{line-height:1.75}.measure{max-width:62ch}.mono{font-family:var(--font-mono);font-variant-numeric:tabular-nums}.label{font-family:var(--font-body);font-size:var(--text-xs);color:var(--color-muted);line-height:1.4}.rule{border:0;border-top:var(--rule-hair) solid var(--color-rule);margin:0}.rule-strong{border:0;border-top:var(--rule-strong) solid var(--color-rule-2);margin:0}.visually-hidden{clip-path:inset(50%);white-space:nowrap;border:0;width:1px;height:1px;margin:-1px;padding:0;position:absolute;overflow:hidden}.skip-link{z-index:var(--z-skip);background:var(--color-ink);color:var(--color-paper);font-size:var(--text-sm);padding:10px 14px;text-decoration:none;position:fixed;top:8px;left:8px;transform:translateY(-200%)}.skip-link:focus-visible{outline-color:var(--color-focus);transform:translateY(0)}.prose{max-width:62ch}.prose p+p{margin-top:1em}.prose h2{margin-top:2.2em;margin-bottom:.6em;font-size:clamp(1.6rem,2.2vw,2rem)}.prose h3{margin-top:1.8em;margin-bottom:.4em}.prose ul,.prose ol{margin-top:.8em;padding-left:1.25em}.prose li+li{margin-top:.45em}.prose li::marker{color:var(--color-accent)}.prose strong{font-weight:500}.prose code{font-family:var(--font-mono);font-variant-numeric:tabular-nums;font-size:.9em}@media (prefers-reduced-motion:reduce){*,:before,:after{scroll-behavior:auto!important;transition-duration:.01ms!important;animation-duration:.01ms!important;animation-iteration-count:1!important}}.site-header[data-astro-cid-fzpbxy5g]{z-index:var(--z-header);background:var(--color-paper);border-bottom:var(--rule-hair) solid var(--color-rule);position:sticky;top:0}.header-inner[data-astro-cid-fzpbxy5g]{min-height:var(--header-h);justify-content:space-between;align-items:center;gap:24px;display:flex}.wordmark[data-astro-cid-fzpbxy5g]{color:var(--color-ink);align-items:baseline;gap:12px;min-width:0;text-decoration:none;display:flex}.wordmark-main[data-astro-cid-fzpbxy5g]{font-family:var(--font-display);letter-spacing:-.02em;white-space:nowrap;font-size:1.625rem;line-height:1}.wordmark-slash[data-astro-cid-fzpbxy5g]{color:var(--color-accent);padding-inline:2px}.wordmark-sub[data-astro-cid-fzpbxy5g]{color:var(--color-ink-2);white-space:nowrap;text-overflow:ellipsis;font-size:.875rem;line-height:1.3;overflow:hidden}.nav[data-astro-cid-fzpbxy5g]{flex:none;align-items:center;gap:clamp(14px,2vw,28px);display:flex}.nav[data-astro-cid-fzpbxy5g] a[data-astro-cid-fzpbxy5g]{color:var(--color-ink);white-space:nowrap;font-size:1rem;font-weight:500;text-decoration:none}.nav[data-astro-cid-fzpbxy5g] a[data-astro-cid-fzpbxy5g]:hover{color:var(--color-accent);text-decoration:underline;text-decoration-thickness:var(--rule-hair);text-underline-offset:.18em}.nav[data-astro-cid-fzpbxy5g] a[data-astro-cid-fzpbxy5g][aria-current=page],.nav[data-astro-cid-fzpbxy5g] .lang[data-astro-cid-fzpbxy5g]{color:var(--color-accent)}.github-link[data-astro-cid-fzpbxy5g]{color:var(--color-ink-2);justify-content:center;align-items:center;line-height:1;display:inline-flex}.github-link[data-astro-cid-fzpbxy5g]:hover{color:var(--color-accent)}.github-link[data-astro-cid-fzpbxy5g] svg[data-astro-cid-fzpbxy5g]{display:block}@media (width<=900px){.wordmark-sub[data-astro-cid-fzpbxy5g]{display:none}}@media (width<=720px){.site-header[data-astro-cid-fzpbxy5g]{position:static}.header-inner[data-astro-cid-fzpbxy5g]{flex-wrap:wrap;gap:8px;padding-block:12px 10px}.nav[data-astro-cid-fzpbxy5g]{border-top:var(--rule-hair) solid var(--color-rule);justify-content:space-between;width:100%;padding-top:8px}}.site-footer[data-astro-cid-nns7i3if]{margin-top:var(--section-gap);background:var(--color-paper-2);border-top:var(--rule-hair) solid var(--color-rule);padding-top:clamp(32px,5vw,56px);padding-bottom:32px}.footer-grid[data-astro-cid-nns7i3if]{grid-template-columns:minmax(0,1.4fr) minmax(0,1fr) minmax(0,1fr);gap:clamp(24px,4vw,64px);display:grid}.footer-head[data-astro-cid-nns7i3if]{color:var(--color-muted);font-size:var(--text-xs);margin-bottom:12px}.footer-copy[data-astro-cid-nns7i3if]{max-width:34ch;color:var(--color-ink-2);font-size:var(--text-sm);line-height:1.6}.footer-copy[data-astro-cid-nns7i3if]+.footer-copy[data-astro-cid-nns7i3if]{margin-top:10px}.footer-list[data-astro-cid-nns7i3if]{font-size:var(--text-sm);gap:6px;list-style:none;display:grid}.footer-list[data-astro-cid-nns7i3if] a[data-astro-cid-nns7i3if]{color:var(--color-ink-2);text-decoration:none}.footer-list[data-astro-cid-nns7i3if] a[data-astro-cid-nns7i3if]:hover{color:var(--color-accent);text-decoration:underline;text-decoration-thickness:var(--rule-hair);text-underline-offset:.18em}.footer-bottom[data-astro-cid-nns7i3if]{border-top:var(--rule-hair) solid var(--color-rule);color:var(--color-muted);font-size:var(--text-xs);flex-wrap:wrap;justify-content:space-between;gap:8px 24px;margin-top:clamp(32px,5vw,56px);padding-top:16px;display:flex}@media (width<=720px){.footer-grid[data-astro-cid-nns7i3if]{grid-template-columns:minmax(0,1fr);gap:28px}}
