:root{--canvas:#efece4;--surface:#faf8f3;--text:#171814;--muted:#65675f;--line:#d9d5c9;--accent:#3f6335;--accent-soft:#eff2e8;--code-surface:#eeebe3;--callout-note:#526f91;--callout-summary:#735c8e;--callout-tip:#7a6840;--callout-success:#4f745c;--callout-warning:#94682d;--callout-danger:#9a5147;--callout-quote:#6e675d;--shadow:0 18px 60px #302d231a;--font-serif:"Noto Serif SC", "Source Han Serif SC", "Songti SC", STSong, serif;--font-ui:var(--font-atkinson), "Noto Sans SC", sans-serif;--page-gutter:clamp(1.25rem, 4vw, 4rem);--header-height:72px}:root[data-theme=dark]{--canvas:#101211;--surface:#191c1a;--text:#ecede8;--muted:#a5aaa2;--line:#363a36;--accent:#b1c778;--accent-soft:#22281f;--code-surface:#222523;--callout-note:#89a9dc;--callout-summary:#b49ad5;--callout-tip:#d5ba73;--callout-success:#89bd98;--callout-warning:#dfad62;--callout-danger:#dc847b;--callout-quote:#aca89f;--shadow:none}*{box-sizing:border-box}@view-transition{navigation:auto}::view-transition-old(root){animation:.12s ease-in both page-leave}::view-transition-new(root){animation:.18s ease-out both page-enter}:where(body,body *){transition:background-color .16s,border-color .16s,color .16s}@keyframes page-leave{to{opacity:0}}@keyframes page-enter{0%{opacity:0}}[hidden]{display:none!important}html{background:var(--canvas);scroll-behavior:smooth}body{background:var(--canvas);color:var(--text);font-family:var(--font-ui);text-rendering:optimizelegibility;margin:0;font-size:17px;line-height:1.75}button,input{font:inherit}a{color:var(--accent);text-underline-offset:.22em}a,button,input,summary{outline-color:var(--accent);outline-offset:3px}:focus-visible{outline:2px solid var(--accent)}::selection{background:var(--accent);color:var(--surface)}.site-shell{background:var(--surface);min-height:100vh}@media (width<=720px){:root{--header-height:64px}}.page-content{width:min(100%,1080px);padding:0 var(--page-gutter);margin:0 auto}.visually-hidden{clip:rect(0, 0, 0, 0);white-space:nowrap;border:0;width:1px;height:1px;margin:-1px;padding:0;position:absolute;overflow:hidden}.section-heading{font-family:var(--font-serif);letter-spacing:.08em;grid-template-columns:1fr auto 1fr;align-items:center;gap:1.75rem;margin:0;font-size:.95rem;font-weight:600;display:grid}.section-heading:before,.section-heading:after{content:"";background:var(--line);height:1px}.text-link{align-items:center;gap:.45rem;font-size:.875rem;font-weight:700;text-decoration:none;display:inline-flex}.text-link:after{content:"→";transition:transform .16s}.text-link:hover:after{transform:translate(3px)}.article-page{max-width:920px;padding-top:clamp(4rem,8vw,7rem);padding-bottom:clamp(5rem,10vw,9rem)}.article-header{border-bottom:1px solid var(--line);max-width:760px;margin-bottom:4rem;padding-bottom:2.5rem}.article-kicker{color:var(--accent);letter-spacing:.08em;margin:0 0 1rem;font-size:.78rem;font-weight:700}.article-header h1{font-family:var(--font-serif);letter-spacing:-.035em;text-wrap:balance;margin:0;font-size:clamp(2.25rem,5vw,4.25rem);font-weight:600;line-height:1.22}.article-description{max-width:42rem;color:var(--muted);font-family:var(--font-serif);margin:1.5rem 0 0;font-size:1.08rem}.article-meta{color:var(--muted);font-variant-numeric:tabular-nums;flex-wrap:wrap;gap:.5rem 1rem;margin:1.5rem 0 0;font-size:.78rem;display:flex}.prose{font-family:var(--font-serif);font-size:1.0625rem;line-height:1.9}.prose>*{max-width:760px}.prose>:first-child{margin-top:0}.prose h2,.prose h3,.prose h4{color:var(--text);text-wrap:balance;font-weight:600;line-height:1.35}.prose h2{margin:3em 0 .8em;font-size:1.75rem}.prose h3{margin:2.25em 0 .7em;font-size:1.35rem}.prose p,.prose ul,.prose ol{margin:1.15em 0}.prose a{text-decoration-thickness:1px}.prose strong{font-weight:600}.prose img,.prose video{border:1px solid var(--line);max-width:100%;height:auto;margin:2.5rem 0;display:block}.prose pre{border:1px solid var(--line);background:var(--code-surface);max-width:100%;margin:2rem 0;padding:1.25rem;font-size:.875rem;line-height:1.65;overflow-x:auto}.prose code{font-family:ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;font-size:.9em}.prose .katex-display{max-width:100%;padding-bottom:.25rem;overflow:auto hidden}.prose :not(pre)>code{background:var(--code-surface);overflow-wrap:anywhere;padding:.12em .32em}.prose blockquote{border-left:2px solid var(--accent);color:var(--muted);margin:2rem 0;padding:.25rem 0 .25rem 1.25rem}.prose .callout{--callout-tone:var(--callout-note);border:1px solid color-mix(in srgb, var(--callout-tone) 32%, var(--line));background:color-mix(in srgb, var(--callout-tone) 9%, var(--surface));color:var(--text);border-radius:6px;margin:2rem 0;padding:1rem 1.25rem;overflow:clip}.prose blockquote>:first-child,.prose .callout>:first-child{margin-top:0}.prose blockquote>:last-child,.prose .callout>:last-child{margin-bottom:0}.prose table{border-collapse:collapse;width:max-content;max-width:100%;font-family:var(--font-ui);margin:2rem 0;font-size:.9rem;display:block;overflow-x:auto}.prose th,.prose td{border:1px solid var(--line);text-align:left;padding:.65rem .8rem}.prose th{background:var(--accent-soft);font-weight:700}.callout-title{color:var(--callout-tone);font-family:var(--font-ui);align-items:center;gap:.5em;font-weight:700;line-height:1.5;display:flex}.callout-title:before{content:"✎";font-family:var(--font-ui);text-align:center;flex:0 0 1em}.callout:is([data-callout=abstract],[data-callout=summary],[data-callout=tldr]) .callout-title:before{content:"☷"}.callout:is([data-callout=abstract],[data-callout=summary],[data-callout=tldr]){--callout-tone:var(--callout-summary)}.callout[data-callout=info] .callout-title:before{content:"ⓘ"}.callout[data-callout=todo] .callout-title:before{content:"☑"}.callout:is([data-callout=tip],[data-callout=hint],[data-callout=important]) .callout-title:before{content:"✦"}.callout:is([data-callout=tip],[data-callout=hint],[data-callout=important]){--callout-tone:var(--callout-tip)}.callout:is([data-callout=success],[data-callout=check],[data-callout=done]) .callout-title:before{content:"✓"}.callout:is([data-callout=success],[data-callout=check],[data-callout=done]){--callout-tone:var(--callout-success)}.callout:is([data-callout=question],[data-callout=help],[data-callout=faq]) .callout-title:before{content:"?"}.callout:is([data-callout=question],[data-callout=help],[data-callout=faq]),.callout:is([data-callout=warning],[data-callout=caution],[data-callout=attention]){--callout-tone:var(--callout-warning)}.callout:is([data-callout=warning],[data-callout=caution],[data-callout=attention]) .callout-title:before{content:"△"}.callout:is([data-callout=failure],[data-callout=fail],[data-callout=missing]) .callout-title:before{content:"×"}.callout:is([data-callout=danger],[data-callout=error]) .callout-title:before{content:"ϟ"}.callout:is([data-callout=failure],[data-callout=fail],[data-callout=missing],[data-callout=danger],[data-callout=error],[data-callout=bug]){--callout-tone:var(--callout-danger)}.callout[data-callout=bug] .callout-title:before{content:"⊗"}.callout[data-callout=example] .callout-title:before{content:"≡"}.callout[data-callout=example]{--callout-tone:var(--callout-summary)}.callout:is([data-callout=quote],[data-callout=cite]) .callout-title:before{content:"❝"}.callout:is([data-callout=quote],[data-callout=cite]){--callout-tone:var(--callout-quote)}.callout strong,.callout a{color:var(--callout-tone)}summary.callout-title{cursor:pointer;list-style:none}summary.callout-title:focus-visible{outline:none}details.callout:has(>summary.callout-title:focus-visible){border-color:var(--callout-tone);box-shadow:0 0 0 1px var(--callout-tone)}summary.callout-title::-webkit-details-marker{display:none}summary.callout-title:after{content:"";transform-origin:50%;width:.45rem;height:.45rem;transition:transform .16s var(--callout-easing);border-bottom:1.5px solid;border-right:1.5px solid;margin-left:auto;transform:rotate(45deg)}details.callout[open]>summary.callout-title:after{transform:rotate(225deg)}details.callout{--callout-easing:ease-in;interpolate-size:allow-keywords}details.callout[open]{--callout-easing:ease-out}details.callout::details-content{block-size:0;transition:content-visibility .16s allow-discrete, block-size .16s var(--callout-easing);overflow-y:clip}details.callout[open]::details-content{block-size:auto}@media (width<=720px){body{font-size:16px}.section-heading{gap:1rem}.article-page{padding-top:3.5rem;padding-bottom:5rem}.article-header{margin-bottom:3rem}.prose{font-size:1rem}.prose h2{font-size:1.5rem}}@media (prefers-reduced-motion:reduce){html{scroll-behavior:auto}*,:before,:after,::details-content{scroll-behavior:auto!important;transition-duration:.01ms!important;animation-duration:.01ms!important;animation-iteration-count:1!important}}.site-footer[data-astro-cid-jo6i4kqk]{min-height:72px;padding:1rem var(--page-gutter);border-top:1px solid var(--line);color:var(--muted);grid-template-columns:1fr auto 1fr;align-items:center;font-size:.75rem;display:grid}.site-footer[data-astro-cid-jo6i4kqk] p[data-astro-cid-jo6i4kqk]{margin:0}.footer-note[data-astro-cid-jo6i4kqk]{font-family:var(--font-serif);letter-spacing:.02em;font-size:.875rem;font-style:italic}.site-footer[data-astro-cid-jo6i4kqk] nav[data-astro-cid-jo6i4kqk]{justify-content:flex-end;gap:1rem;display:flex}.site-footer[data-astro-cid-jo6i4kqk] a[data-astro-cid-jo6i4kqk]{color:inherit;text-underline-offset:.2em}.site-footer[data-astro-cid-jo6i4kqk] a[data-astro-cid-jo6i4kqk]:hover{color:var(--accent)}@media (width<=720px){.site-footer[data-astro-cid-jo6i4kqk]{grid-template-columns:1fr auto;gap:.5rem 1rem}.footer-note[data-astro-cid-jo6i4kqk]{text-align:center;grid-area:2/1/auto/-1}}.site-header[data-astro-cid-nen7h5rs]{z-index:50;border-bottom:1px solid var(--line);background:color-mix(in srgb, var(--surface) 92%, transparent);backdrop-filter:blur(12px);position:sticky;top:0}.nav-bar[data-astro-cid-nen7h5rs]{width:min(100%,1280px);height:var(--header-height);padding:0 var(--page-gutter);grid-template-columns:1fr auto 1fr;align-items:center;margin:0 auto;display:grid}.brand[data-astro-cid-nen7h5rs]{width:max-content;color:var(--accent);font-family:var(--font-serif);letter-spacing:.32em;font-size:1.125rem;font-weight:600;text-decoration:none}.desktop-nav[data-astro-cid-nen7h5rs]{align-self:stretch;align-items:center;gap:2.75rem;display:flex}.desktop-nav[data-astro-cid-nen7h5rs] a[data-astro-cid-nen7h5rs],.menu-panel[data-astro-cid-nen7h5rs] a[data-astro-cid-nen7h5rs],.menu-panel[data-astro-cid-nen7h5rs] button[data-astro-cid-nen7h5rs]{color:var(--text);font-size:.875rem;text-decoration:none}.desktop-nav[data-astro-cid-nen7h5rs] a[data-astro-cid-nen7h5rs]{border-bottom:2px solid #0000;align-items:center;padding:0;display:flex}.desktop-nav[data-astro-cid-nen7h5rs] a[data-astro-cid-nen7h5rs]:hover,.desktop-nav[data-astro-cid-nen7h5rs] a[data-astro-cid-nen7h5rs][aria-current=page]{color:var(--accent);border-bottom-color:var(--accent)}.nav-actions[data-astro-cid-nen7h5rs]{justify-content:flex-end;gap:.25rem;display:flex}.icon-button[data-astro-cid-nen7h5rs]{width:44px;height:44px;color:var(--text);cursor:pointer;background:0 0;border:0;place-items:center;padding:0;display:inline-grid}.icon-button[data-astro-cid-nen7h5rs]:hover{color:var(--accent)}.icon-button[data-astro-cid-nen7h5rs] svg[data-astro-cid-nen7h5rs]{fill:none;stroke:currentColor;stroke-linecap:round;stroke-linejoin:round;stroke-width:1.75px;width:20px;height:20px}.moon[data-astro-cid-nen7h5rs],html[data-theme=dark] .sun[data-astro-cid-nen7h5rs]{display:none}html[data-theme=dark] .moon[data-astro-cid-nen7h5rs]{display:block}.mobile-menu[data-astro-cid-nen7h5rs]{display:none;position:relative}.mobile-menu[data-astro-cid-nen7h5rs] summary[data-astro-cid-nen7h5rs]{list-style:none}.mobile-menu[data-astro-cid-nen7h5rs] summary[data-astro-cid-nen7h5rs]::-webkit-details-marker{display:none}.menu-panel[data-astro-cid-nen7h5rs]{border:1px solid var(--line);background:var(--surface);width:min(16rem,100vw - 40px);box-shadow:var(--shadow);padding:.5rem;display:grid;position:absolute;top:52px;right:0}.menu-panel[data-astro-cid-nen7h5rs] a[data-astro-cid-nen7h5rs],.menu-panel[data-astro-cid-nen7h5rs] button[data-astro-cid-nen7h5rs]{text-align:left;background:0 0;border:0;padding:.8rem 1rem}.menu-panel[data-astro-cid-nen7h5rs] a[data-astro-cid-nen7h5rs]:hover,.menu-panel[data-astro-cid-nen7h5rs] button[data-astro-cid-nen7h5rs]:hover,.menu-panel[data-astro-cid-nen7h5rs] a[data-astro-cid-nen7h5rs][aria-current=page]{background:var(--accent-soft);color:var(--accent)}.search-dialog[data-astro-cid-nen7h5rs]{border:1px solid var(--line);background:var(--surface);width:min(42rem,100vw - 40px);max-height:min(44rem,100vh - 40px);color:var(--text);box-shadow:var(--shadow);border-radius:12px;padding:0}.search-dialog[data-astro-cid-nen7h5rs]::backdrop{background:color-mix(in srgb, var(--canvas) 72%, transparent);backdrop-filter:blur(3px)}.search-head[data-astro-cid-nen7h5rs]{border-bottom:1px solid var(--line);justify-content:space-between;align-items:center;padding:1.5rem;display:flex}.search-head[data-astro-cid-nen7h5rs] h2[data-astro-cid-nen7h5rs],.search-head[data-astro-cid-nen7h5rs] p[data-astro-cid-nen7h5rs]{margin:0}.search-head[data-astro-cid-nen7h5rs] h2[data-astro-cid-nen7h5rs]{font-family:var(--font-serif);font-size:1.5rem}.search-label[data-astro-cid-nen7h5rs]{color:var(--accent);font-size:.75rem}.search-field[data-astro-cid-nen7h5rs]{padding:1rem 1.5rem;display:block}.search-field[data-astro-cid-nen7h5rs] input[data-astro-cid-nen7h5rs]{border:1px solid var(--line);background:var(--canvas);width:100%;min-height:48px;color:var(--text);font:inherit;border-radius:4px;padding:0 1rem}.search-results[data-astro-cid-nen7h5rs]{max-height:24rem;margin:0;padding:0 1.5rem 1.5rem;list-style:none;overflow-y:auto}.search-results[data-astro-cid-nen7h5rs] li[data-astro-cid-nen7h5rs]{border-bottom:1px solid var(--line)}.search-results[data-astro-cid-nen7h5rs] a[data-astro-cid-nen7h5rs]{color:var(--text);justify-content:space-between;align-items:baseline;gap:1rem;padding:.9rem 0;text-decoration:none;display:flex}.search-results[data-astro-cid-nen7h5rs] a[data-astro-cid-nen7h5rs]:hover span[data-astro-cid-nen7h5rs]{color:var(--accent)}.search-results[data-astro-cid-nen7h5rs] time[data-astro-cid-nen7h5rs]{color:var(--muted);flex:none;font-size:.75rem}.search-empty[data-astro-cid-nen7h5rs]{color:var(--muted);margin:0;padding:1rem 1.5rem 2rem}@media (width<=720px){.nav-bar[data-astro-cid-nen7h5rs]{grid-template-columns:1fr auto}.desktop-nav[data-astro-cid-nen7h5rs]{display:none}.mobile-menu[data-astro-cid-nen7h5rs]{display:block}.search-head[data-astro-cid-nen7h5rs],.search-field[data-astro-cid-nen7h5rs],.search-results[data-astro-cid-nen7h5rs]{padding-left:1rem;padding-right:1rem}}
