:root{--color-canvas:#eef1ed;--color-surface:#fbfcf9;--color-surface-muted:#e5e9e4;--color-ink:#151917;--color-ink-soft:#39423d;--color-muted:#68736d;--color-faint:#8d9791;--color-line:#c9d0cb;--color-line-strong:#9ea9a2;--color-vermilion:#b83d32;--color-vermilion-dark:#8f2e27;--color-jade:#2f6f5e;--color-jade-dark:#245648;--color-amber:#b47a20;--color-code:#121816;--color-code-soft:#1d2723;--color-white:#fff;--color-bg:var(--color-canvas);--color-bg-alt:var(--color-surface-muted);--color-text:var(--color-ink);--color-text-secondary:var(--color-ink-soft);--color-text-muted:var(--color-muted);--color-border:var(--color-line);--color-border-light:#dce1dd;--color-accent:var(--color-vermilion);--color-accent-dark:var(--color-vermilion-dark);--color-paper:var(--color-surface);--color-cloud-light:var(--color-surface-muted);--space-2xs:.25rem;--space-xs:.5rem;--space-sm:.75rem;--space-md:1rem;--space-lg:1.5rem;--space-xl:2rem;--space-2xl:3rem;--space-3xl:4.5rem;--space-4xl:6rem;--text-xs:.75rem;--text-sm:.875rem;--text-base:1rem;--text-lg:1.125rem;--text-xl:1.25rem;--text-2xl:1.5rem;--text-3xl:2rem;--text-4xl:2.75rem;--text-5xl:4rem;--leading-tight:1.2;--leading-normal:1.55;--leading-relaxed:1.85;--font-normal:400;--font-medium:500;--font-semibold:600;--font-bold:700;--radius-sm:2px;--radius-md:4px;--radius-lg:8px;--shadow-sm:0 1px 2px #15191712;--shadow-md:0 12px 30px #15191717;--shadow-lg:0 24px 60px #15191721;--transition-fast:.15s ease;--transition-base:.24s ease;--transition-slow:.42s cubic-bezier(.2, .7, .2, 1);--container-reading:720px;--container-content:960px;--container-wide:1180px;--header-height:68px}@media (width<=720px){:root{--header-height:60px;--space-3xl:3.5rem;--space-4xl:4.5rem;--text-4xl:2.25rem;--text-5xl:3rem}}@font-face{font-family:LXGW Neo ZhiSong;src:url(/fonts/LXGWNeoZhiSong.ttf)format("truetype");font-style:normal;font-weight:400 700;font-display:swap}@font-face{font-family:LXGW WenKai;src:url(/fonts/LXGWWenKai-Regular.ttf)format("truetype");font-style:normal;font-weight:400;font-display:swap}@font-face{font-family:LXGW WenKai;src:url(/fonts/LXGWWenKai-Medium.ttf)format("truetype");font-style:normal;font-weight:500 700;font-display:swap}:root{--font-serif:"LXGW Neo ZhiSong", "霞鹜新致宋", "Noto Serif SC", serif;--font-body:"LXGW Neo ZhiSong", "霞鹜新致宋", "Noto Serif SC", serif;--font-mono:"Cascadia Code", "JetBrains Mono", "SFMono-Regular", Consolas, monospace}body{color:var(--color-text);font-family:var(--font-body);font-size:var(--text-base);line-height:var(--leading-relaxed);-webkit-font-smoothing:antialiased;text-rendering:optimizelegibility}h1,h2,h3,h4,h5,h6{color:var(--color-ink);font-family:var(--font-serif);font-weight:var(--font-bold);line-height:var(--leading-tight);letter-spacing:0;text-wrap:balance;margin:0}p{margin:0 0 var(--space-md)}a{color:inherit;text-underline-offset:.2em;text-decoration-thickness:1px}img{max-width:100%;height:auto;display:block}code,kbd,samp{font-family:var(--font-mono)}.prose{min-width:0;color:var(--color-text-secondary);overflow-wrap:anywhere;font-size:1.0625rem;line-height:1.9}.prose>:first-child{margin-top:0}.prose h2,.prose h3,.prose h4{scroll-margin-top:calc(var(--header-height) + var(--space-lg));color:var(--color-ink)}.prose h2{margin:var(--space-3xl) 0 var(--space-lg);padding-bottom:var(--space-sm);border-bottom:1px solid var(--color-line);font-size:var(--text-2xl)}.prose h2:before{width:.55rem;height:.55rem;margin-right:var(--space-sm);background:var(--color-vermilion);content:"";display:inline-block}.prose h3{margin:var(--space-2xl) 0 var(--space-md);font-size:var(--text-xl)}.prose p,.prose ul,.prose ol,.prose blockquote,.prose table,.prose pre{margin-block:0 var(--space-lg)}.prose ul,.prose ol{padding-left:1.4em}.prose li{margin-bottom:var(--space-xs);padding-left:var(--space-2xs)}.prose a{color:var(--color-jade-dark);transition:color var(--transition-fast), text-decoration-color var(--transition-fast);text-decoration:underline #2f6f5e66}.prose a:hover{color:var(--color-vermilion-dark);text-decoration-color:currentColor}.prose :not(pre)>code{border:1px solid var(--color-border-light);border-radius:var(--radius-sm);color:var(--color-vermilion-dark);background:var(--color-surface-muted);padding:.12em .36em;font-size:.86em}.prose pre{max-width:100%;padding:var(--space-xl);border-radius:var(--radius-md);color:#d8e4dc;background:var(--color-code);font-family:var(--font-mono);overscroll-behavior-inline:contain;tab-size:2;border:1px solid #2f3b36;font-size:.875rem;line-height:1.7;position:relative;overflow-x:auto}.prose pre code{color:inherit;font-size:inherit;background:0 0;padding:0}.prose blockquote{padding:var(--space-md) var(--space-lg);border-left:4px solid var(--color-jade);color:var(--color-ink-soft);background:#2f6f5e12}.prose blockquote>:last-child{margin-bottom:0}.prose table{border-collapse:collapse;width:max-content;max-width:100%;font-size:var(--text-sm);font-variant-numeric:tabular-nums;display:block;overflow-x:auto}.prose th,.prose td{padding:var(--space-sm) var(--space-md);border:1px solid var(--color-line);text-align:left}.prose th{color:var(--color-ink);background:var(--color-surface-muted)}.prose hr{margin:var(--space-3xl) 0;border:0;border-top:1px solid var(--color-line)}@media (width<=720px){.prose{font-size:1rem;line-height:1.85}.prose h2{margin-top:var(--space-2xl);font-size:var(--text-xl)}.prose pre{padding:var(--space-lg);font-size:.8125rem}}.btn{justify-content:center;align-items:center;gap:var(--space-xs);border-radius:var(--radius-md);min-height:42px;font-size:var(--text-sm);font-weight:var(--font-semibold);cursor:pointer;transition:color var(--transition-fast), background-color var(--transition-fast), border-color var(--transition-fast), transform var(--transition-fast);border:1px solid #0000;padding:.65rem 1rem;line-height:1;text-decoration:none;display:inline-flex}.btn:hover{transform:translateY(-1px)}.btn-primary{border-color:var(--color-ink);color:var(--color-white);background:var(--color-ink)}.btn-primary:hover{border-color:var(--color-jade-dark);color:var(--color-white);background:var(--color-jade-dark)}.btn-outline{border-color:var(--color-line-strong);color:var(--color-ink);background:#fbfcf9bf}.btn-outline:hover{border-color:var(--color-vermilion);color:var(--color-vermilion-dark);background:var(--color-surface)}.btn-ghost{color:var(--color-ink-soft);background:0 0}.btn-ghost:hover{color:var(--color-jade-dark);background:#2f6f5e14}.tag,.filter-chip{border:1px solid var(--color-line);border-radius:var(--radius-sm);min-height:30px;color:var(--color-muted);font-family:var(--font-mono);font-size:var(--text-xs);letter-spacing:0;background:#fbfcf9b3;align-items:center;padding:.3rem .65rem;line-height:1;display:inline-flex}.section-heading{align-items:center;gap:var(--space-md);margin-bottom:var(--space-xl);grid-template-columns:auto 1fr auto;display:grid}.section-heading:after{background:var(--color-line);content:"";height:1px}.section-heading h2{font-size:var(--text-lg);font-weight:var(--font-semibold)}.section-heading a,.section-heading span{color:var(--color-muted);font-family:var(--font-mono);font-size:var(--text-xs);grid-column:3;text-decoration:none}.eyebrow{align-items:center;gap:var(--space-xs);margin:0 0 var(--space-md);color:var(--color-jade-dark);font-family:var(--font-mono);font-size:var(--text-xs);font-weight:var(--font-semibold);text-transform:uppercase;line-height:1.4;display:flex}.eyebrow:before{background:var(--color-vermilion);content:"";width:1.5rem;height:2px}.status-dot{background:var(--color-jade);border-radius:50%;width:.5rem;height:.5rem;display:inline-block;box-shadow:0 0 0 4px #2f6f5e1f}.page-intro{padding:var(--space-3xl) 0 var(--space-2xl);border-bottom:1px solid var(--color-line)}.page-intro h1{max-width:15ch;font-size:var(--text-4xl)}.page-intro p:last-child{max-width:54ch;margin:var(--space-md) 0 0;color:var(--color-muted)}@media (width<=720px){.section-heading{grid-template-columns:auto 1fr}.section-heading a,.section-heading span{grid-column:auto}.page-intro{padding-top:var(--space-2xl)}}*,:before,:after{box-sizing:border-box}html{scroll-behavior:smooth;background:var(--color-canvas)}body{background-color:var(--color-canvas);background-image:linear-gradient(#15191706 1px,#0000 1px),linear-gradient(90deg,#15191705 1px,#0000 1px);background-size:32px 32px;min-width:320px;min-height:100vh;margin:0;overflow-x:clip}main{min-height:calc(100vh - var(--header-height))}button,input,textarea,select{font:inherit}button,a{-webkit-tap-highlight-color:#b83d3229;touch-action:manipulation}:focus-visible{outline-offset:3px;outline:3px solid #2f6f5e8c}::selection{color:var(--color-white);background:var(--color-jade)}.skip-link{top:var(--space-sm);left:var(--space-sm);z-index:1000;padding:var(--space-sm) var(--space-md);color:var(--color-white);background:var(--color-ink);transition:transform var(--transition-fast);position:fixed;transform:translateY(-160%)}.skip-link:focus{transform:translateY(0)}.shell{width:min(calc(100% - 2rem), var(--container-wide));margin-inline:auto}.content-shell{width:min(calc(100% - 2rem), var(--container-content));margin-inline:auto}.reading-shell{width:min(calc(100% - 2rem), var(--container-reading));margin-inline:auto}.visually-hidden{clip:rect(0, 0, 0, 0);white-space:nowrap;border:0;width:1px;height:1px;margin:-1px;padding:0;overflow:hidden;position:absolute!important}.page-enter{animation:page-enter .56s var(--transition-slow) both}@keyframes page-enter{0%{opacity:0;transform:translateY(14px)}to{opacity:1;transform:translateY(0)}}@media (width<=720px){body{background-size:24px 24px}.shell,.content-shell,.reading-shell{width:min(calc(100% - 1.5rem), var(--container-wide))}}@media (prefers-reduced-motion:reduce){html{scroll-behavior:auto}*,:before,:after{scroll-behavior:auto!important;transition-duration:.01ms!important;animation-duration:.01ms!important;animation-iteration-count:1!important}}.site-footer[data-astro-cid-oenwriqq]{margin-top:var(--space-4xl);border-top:1px solid var(--color-line-strong);color:#cad5ce;background:var(--color-code)}.footer-inner[data-astro-cid-oenwriqq]{align-items:center;gap:var(--space-xl);min-height:150px;padding-block:var(--space-xl);grid-template-columns:auto 1fr auto;display:grid}.footer-mark[data-astro-cid-oenwriqq]{padding:var(--space-sm);color:#91a69a;font-family:var(--font-mono);font-size:var(--text-xs);border:1px solid #3b4842}.footer-copy[data-astro-cid-oenwriqq]{gap:var(--space-2xs);flex-direction:column;display:flex}.footer-copy[data-astro-cid-oenwriqq] strong[data-astro-cid-oenwriqq]{color:var(--color-white);font-size:var(--text-lg)}.footer-copy[data-astro-cid-oenwriqq] span[data-astro-cid-oenwriqq],.copyright[data-astro-cid-oenwriqq]{color:#91a097;font-size:var(--text-xs)}.footer-nav[data-astro-cid-oenwriqq]{gap:var(--space-lg);display:flex}.footer-nav[data-astro-cid-oenwriqq] a[data-astro-cid-oenwriqq]{color:#c7d1cb;font-size:var(--text-sm);text-decoration:none}.footer-nav[data-astro-cid-oenwriqq] a[data-astro-cid-oenwriqq]:hover{color:var(--color-white)}.copyright[data-astro-cid-oenwriqq]{grid-column:2/-1;margin:0}@media (width<=720px){.footer-inner[data-astro-cid-oenwriqq]{gap:var(--space-lg);grid-template-columns:auto 1fr}.footer-nav[data-astro-cid-oenwriqq]{flex-wrap:wrap;grid-column:1/-1}.copyright[data-astro-cid-oenwriqq]{grid-column:1/-1}}.nav-link[data-astro-cid-iqduktfn]{height:100%;padding:0 var(--space-sm);color:var(--color-muted);font-size:var(--text-sm);font-weight:var(--font-semibold);transition:color var(--transition-fast);align-items:center;text-decoration:none;display:inline-flex;position:relative}.nav-link[data-astro-cid-iqduktfn]:after{bottom:0;left:var(--space-sm);right:var(--space-sm);background:var(--color-vermilion);transform-origin:0;height:3px;transition:transform var(--transition-base);content:"";position:absolute;transform:scaleX(0)}.nav-link[data-astro-cid-iqduktfn]:hover,.nav-link[data-astro-cid-iqduktfn].active{color:var(--color-ink)}.nav-link[data-astro-cid-iqduktfn]:hover:after,.nav-link[data-astro-cid-iqduktfn].active:after{transform:scaleX(1)}@media (width<=720px){.nav-link[data-astro-cid-iqduktfn]{width:100%;height:auto;padding:var(--space-md) 0;border-bottom:1px solid var(--color-line);font-size:var(--text-base)}.nav-link[data-astro-cid-iqduktfn]:after{display:none}}.site-header[data-astro-cid-isef26zo]{z-index:100;height:var(--header-height);backdrop-filter:blur(14px);background:#eef1edf0;border-bottom:1px solid #9ea9a2b3;position:sticky;top:0}.header-inner[data-astro-cid-isef26zo]{grid-template-columns:1fr auto 1fr;align-items:center;height:100%;display:grid}.brand[data-astro-cid-isef26zo]{justify-self:start;align-items:center;gap:var(--space-xs);color:var(--color-ink);text-decoration:none;display:inline-flex}.brand-name[data-astro-cid-isef26zo]{font-size:var(--text-lg);font-weight:var(--font-bold)}.brand-code[data-astro-cid-isef26zo],.rss-link[data-astro-cid-isef26zo]{color:var(--color-muted);font-family:var(--font-mono);font-size:var(--text-xs)}.desktop-nav[data-astro-cid-isef26zo]{align-self:stretch;display:flex}.header-tools[data-astro-cid-isef26zo]{justify-self:end;align-items:center;display:flex}.rss-link[data-astro-cid-isef26zo]{padding:var(--space-xs);transition:color var(--transition-fast);text-decoration:none}.rss-link[data-astro-cid-isef26zo]:hover{color:var(--color-vermilion)}.mobile-nav[data-astro-cid-isef26zo]{display:none}@media (width<=720px){.header-inner[data-astro-cid-isef26zo]{grid-template-columns:1fr auto}.brand-code[data-astro-cid-isef26zo],.desktop-nav[data-astro-cid-isef26zo],.rss-link[data-astro-cid-isef26zo]{display:none}.mobile-nav[data-astro-cid-isef26zo]{display:block}.mobile-nav[data-astro-cid-isef26zo] summary[data-astro-cid-isef26zo]{min-width:54px;padding:var(--space-xs) var(--space-sm);border:1px solid var(--color-line-strong);border-radius:var(--radius-md);font-size:var(--text-sm);font-weight:var(--font-semibold);cursor:pointer;list-style:none}.mobile-nav[data-astro-cid-isef26zo] summary[data-astro-cid-isef26zo]::-webkit-details-marker{display:none}.mobile-nav[data-astro-cid-isef26zo] nav[data-astro-cid-isef26zo]{top:var(--header-height);padding:var(--space-md) var(--space-lg) var(--space-xl);border-bottom:1px solid var(--color-line-strong);background:var(--color-surface);box-shadow:var(--shadow-md);flex-direction:column;display:flex;position:fixed;left:0;right:0}}
