@font-face{font-family:Maple Mono;font-style:normal;font-display:swap;font-weight:400;src:url(/_astro/maple-mono-latin-400-normal.WIx2rg0p.woff2)format("woff2"),url(/_astro/maple-mono-latin-400-normal.OcfaEJ46.woff)format("woff")}@font-face{font-family:Maple Mono;font-style:normal;font-display:swap;font-weight:500;src:url(/_astro/maple-mono-latin-500-normal.DArLj6fy.woff2)format("woff2"),url(/_astro/maple-mono-latin-500-normal.CeaAlHyl.woff)format("woff")}@font-face{font-family:Maple Mono;font-style:normal;font-display:swap;font-weight:600;src:url(/_astro/maple-mono-latin-600-normal.BfjBt7Gd.woff2)format("woff2"),url(/_astro/maple-mono-latin-600-normal.Bl2EjP25.woff)format("woff")}@font-face{font-family:Maple Mono;font-style:normal;font-display:swap;font-weight:700;src:url(/_astro/maple-mono-latin-700-normal.B_sC0Ion.woff2)format("woff2"),url(/_astro/maple-mono-latin-700-normal.DeN56mtg.woff)format("woff")}:is(.article-content,.prose) .markdown-layout{color:var(--paper-ink);margin:38px 0 42px}:is(.article-content,.prose) .markdown-columns{grid-template-columns:var(--markdown-layout-column-template);border-top:1px solid var(--paper-line-strong);border-bottom:1px solid var(--paper-line-strong);align-items:stretch;gap:clamp(1.25rem,4vw,2.5rem);padding:24px 0;display:grid}:is(.article-content,.prose) .markdown-layout-column{min-width:0}:is(.article-content,.prose) .markdown-layout-column+.markdown-layout-column{border-left:1px solid var(--paper-line);padding-left:clamp(1.25rem,4vw,2.5rem)}:is(.article-content,.prose) .markdown-layout-column.is-media{background:0 0;border-left:0;border-radius:0;align-self:center;padding-left:0;overflow:visible}:is(.article-content,.prose) .markdown-layout-column.is-media>p:only-child{margin:0}:is(.article-content,.prose) .markdown-layout-column.is-media img{object-fit:contain;filter:none;border-radius:8px;width:100%;height:auto;max-height:none;display:block}:is(.article-content,.prose) .markdown-timeline{padding-bottom:10px}:is(.article-content,.prose) .markdown-timeline.is-horizontal{overscroll-behavior-x:contain;scrollbar-color:var(--paper-ink-faint) transparent;scrollbar-width:thin;padding-inline:6px;overflow-x:auto}:is(.article-content,.prose) .markdown-timeline-list{color:var(--paper-ink);margin:0;padding:0;list-style:none;display:grid}:is(.article-content,.prose) .markdown-timeline-event{color:var(--paper-ink)}:is(.article-content,.prose) .markdown-timeline-event:before{color:var(--paper-ink-faint);font-family:var(--font-meta);letter-spacing:.03em;content:attr(data-timeline-date);font-size:.74rem;font-weight:700;line-height:1.2;position:absolute}:is(.article-content,.prose) .markdown-timeline-event:after{border:2px solid var(--paper-surface);background:var(--paper-accent);width:8px;height:8px;box-shadow:0 0 0 1px color-mix(in srgb, var(--paper-accent) 45%, transparent);content:"";border-radius:999px;position:absolute}:is(.article-content,.prose) .markdown-timeline-event>:first-child{margin-top:0}:is(.article-content,.prose) .markdown-timeline-event>:last-child{margin-bottom:0}:is(.article-content,.prose) .markdown-timeline.is-vertical .markdown-timeline-list{--timeline-rail-inset:clamp(5.75rem, 11vw, 6.5rem);--timeline-content-gap:clamp(1.5rem, 3vw, 2rem)}:is(.article-content,.prose) .markdown-timeline.is-vertical .markdown-timeline-event{min-height:5.5rem;margin-left:var(--timeline-rail-inset);padding:0 0 1.5rem var(--timeline-content-gap);border-left:1px solid var(--paper-line-strong);position:relative}:is(.article-content,.prose) .markdown-timeline.is-vertical .markdown-timeline-event:before{top:1px;left:calc(0px - var(--timeline-rail-inset));width:calc(var(--timeline-rail-inset) - 1rem);text-align:right;white-space:nowrap}:is(.article-content,.prose) .markdown-timeline.is-vertical .markdown-timeline-event:after{top:2px;left:-5px}:is(.article-content,.prose) .markdown-timeline.is-horizontal .markdown-timeline-list{grid-auto-columns:minmax(13rem,1fr);grid-auto-flow:column;min-width:max-content;padding-top:8px}:is(.article-content,.prose) .markdown-timeline.is-horizontal .markdown-timeline-event{border-top:1px solid var(--paper-line-strong);min-width:13rem;padding:2.8rem 1.25rem 0 0;position:relative}:is(.article-content,.prose) .markdown-timeline.is-horizontal .markdown-timeline-event:before{top:.8rem;left:0}:is(.article-content,.prose) .markdown-timeline.is-horizontal .markdown-timeline-event:after{top:-5px;left:-5px}@media (width<=720px){:is(.article-content,.prose) .markdown-layout{margin:30px 0 34px}:is(.article-content,.prose) .markdown-columns{grid-template-columns:1fr;gap:1.25rem;padding:18px 0}:is(.article-content,.prose) .markdown-layout-column+.markdown-layout-column{border-top:1px solid var(--paper-line);border-left:0;padding:1.25rem 0 0}:is(.article-content,.prose) .markdown-layout-column.is-media{border-top:0;padding-top:0}:is(.article-content,.prose) .markdown-columns.is-media-first .markdown-layout-column.is-media{order:-1}:is(.article-content,.prose) .markdown-timeline.is-vertical .markdown-timeline-list{--timeline-rail-inset:4.75rem;--timeline-content-gap:1.25rem}}:root,:root[data-palette=green-soft]{--accent:#6b7d70;--accent-dark:#3f5348;--paper-accent:#667d6d;--paper-accent-soft:#edf3ed;--paper-fog:#dfe8e8;--paper-dust:#e9e2eb;--paper-rule:#49584b07;--paper-texture-ink:#49584b03}:root[data-theme=dark],:root[data-theme=dark][data-palette=green-soft]{--accent:#a8baa9;--accent-dark:#d3dfd2;--paper-accent:#a8baa9;--paper-accent-soft:#2b372d;--paper-fog:#293737;--paper-dust:#352d38;--paper-rule:#d9e5d507;--paper-texture-ink:#d9e5d508}:root[data-palette=green-vivid]{--accent:#4e8a61;--accent-dark:#2f6844;--paper-accent:#4f855f;--paper-accent-soft:#eaf4ec;--paper-fog:#dceade;--paper-dust:#e8eadb;--paper-rule:#33694207;--paper-texture-ink:#33694203}:root[data-theme=dark][data-palette=green-vivid]{--accent:#93c9a1;--accent-dark:#c5e7cc;--paper-accent:#93c9a1;--paper-accent-soft:#243b2c;--paper-fog:#243a2c;--paper-dust:#33382a;--paper-rule:#c2e7ca07;--paper-texture-ink:#c2e7ca08}:root[data-palette=rose-soft]{--accent:#9b6b70;--accent-dark:#74494f;--paper-accent:#95696d;--paper-accent-soft:#f5eded;--paper-fog:#eadfe0;--paper-dust:#ebe5dc;--paper-rule:#7a484d06;--paper-texture-ink:#7a484d03}:root[data-theme=dark][data-palette=rose-soft]{--accent:#d2a6ab;--accent-dark:#f1cdd0;--paper-accent:#d2a6ab;--paper-accent-soft:#422d31;--paper-fog:#3b2f32;--paper-dust:#393328;--paper-rule:#efc7cb07;--paper-texture-ink:#efc7cb08}:root[data-palette=pink-soft]{--accent:#a66d8a;--accent-dark:#7d4a66;--paper-accent:#9c6a83;--paper-accent-soft:#f6edf2;--paper-fog:#eadfea;--paper-dust:#e7e4dc;--paper-rule:#7e486606;--paper-texture-ink:#7e486603}:root[data-theme=dark][data-palette=pink-soft]{--accent:#d6a8c2;--accent-dark:#f2d1e2;--paper-accent:#d6a8c2;--paper-accent-soft:#432d3a;--paper-fog:#3b2f39;--paper-dust:#34352c;--paper-rule:#f4cde107;--paper-texture-ink:#f4cde108}:root[data-palette=purple-soft]{--accent:#7b6fa8;--accent-dark:#5a4d85;--paper-accent:#7b6fa8;--paper-accent-soft:#f0edf7;--paper-fog:#e6e1f1;--paper-dust:#efe3eb;--paper-rule:#68589107;--paper-texture-ink:#68589103}:root[data-theme=dark][data-palette=purple-soft]{--accent:#b9addd;--accent-dark:#ddd4ff;--paper-accent:#b9addd;--paper-accent-soft:#332b43;--paper-fog:#302d3e;--paper-dust:#3a2f3a;--paper-rule:#d2c6f507;--paper-texture-ink:#d2c6f508}:root[data-palette=blue-soft]{--accent:#637da3;--accent-dark:#405b80;--paper-accent:#637da3;--paper-accent-soft:#edf2f8;--paper-fog:#dde7f0;--paper-dust:#e5e5dc;--paper-rule:#3f587d07;--paper-texture-ink:#3f587d03}:root[data-theme=dark][data-palette=blue-soft]{--accent:#a8bddb;--accent-dark:#d2e1f6;--paper-accent:#a8bddb;--paper-accent-soft:#29364a;--paper-fog:#283541;--paper-dust:#33322a;--paper-rule:#ccdef607;--paper-texture-ink:#ccdef608}:root[data-palette=orange-soft]{--accent:#9a7650;--accent-dark:#73532f;--paper-accent:#987451;--paper-accent-soft:#f5f0e8;--paper-fog:#eee3d4;--paper-dust:#e5e7dc;--paper-rule:#7a542a06;--paper-texture-ink:#7a542a03}:root[data-theme=dark][data-palette=orange-soft]{--accent:#d0b18a;--accent-dark:#efd6b6;--paper-accent:#d0b18a;--paper-accent-soft:#403326;--paper-fog:#3b3429;--paper-dust:#2d3830;--paper-rule:#efd4b107;--paper-texture-ink:#efd4b108}:root[data-palette=brown-soft]{--accent:#836f5d;--accent-dark:#604f40;--paper-accent:#81705f;--paper-accent-soft:#f1eee9;--paper-fog:#e8e2d9;--paper-dust:#e2e6dc;--paper-rule:#5d4b3806;--paper-texture-ink:#5d4b3803}:root[data-theme=dark][data-palette=brown-soft]{--accent:#c3b09d;--accent-dark:#e5d5c4;--paper-accent:#c3b09d;--paper-accent-soft:#393128;--paper-fog:#363229;--paper-dust:#2c3831;--paper-rule:#e4d3bf07;--paper-texture-ink:#e4d3bf08}:root{--black:35, 39, 35;--gray:112, 119, 111;--gray-light:226, 231, 224;--gray-dark:48, 53, 49;--paper-bg:#fdfdf9;--paper-bg-deep:#f3f5ef;--paper-surface:#fffffc;--paper-surface-muted:#f7f8f3;--paper-surface-rgb:255, 255, 252;--paper-line:#1f232813;--paper-line-strong:#1f23281f;--paper-ink:#272d28;--paper-ink-soft:#667066;--paper-ink-faint:#90998f;--paper-control:#f6f8f5c2;--paper-control-hover:#eef3edeb;--paper-nav:#fffffceb;--paper-card-wash-top:#fffffcc7;--paper-card-wash-bottom:#f7f8f385;--paper-page-bg:#fdfdf9;--paper-detail-bg:#fdfdf9;--paper-texture-light:#ffffff2e;--paper-theme-color:#fdfdf9;--paper-shadow:0 1px 2px #1f232808, 0 4px 12px #1f232805;--paper-shadow-lift:0 1px 2px #1f23280a, 0 6px 14px #1f232806;--layout-shell-width:1168px;--layout-reading-width:760px;--layout-page-gutter:32px;--layout-page-top:126px;--layout-page-bottom:72px;--page-header-spacing:54px;--page-header-spacing-mobile:28px;--font-config-en:"Maple Mono";--font-config-code:"Monaco";--font-config-zh:"ChillRoundM";--font-config-zh-subset:"ChillRoundM UI Subset";--font-cjk-system:var(--font-config-en), "PingFang SC", "Microsoft YaHei", system-ui, sans-serif;--font-ui-cjk:var(--font-config-zh-subset), var(--font-config-zh), var(--font-cjk-system);--font-serif-cn:var(--font-ui-cjk);--font-mono:var(--font-config-en), var(--font-config-zh-subset), var(--font-config-zh), ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, monospace;--font-body:var(--font-mono);--font-display:var(--font-mono);--font-note:var(--font-mono);--font-article:var(--font-config-en), var(--font-config-zh), var(--font-cjk-system);--font-heading:var(--font-config-en), var(--font-config-zh), var(--font-cjk-system);--font-page-heading:var(--font-config-en), var(--font-config-zh-subset), var(--font-config-zh), var(--font-cjk-system);--font-meta:var(--font-mono);--font-code:var(--font-config-code), var(--font-mono);--font-ui-label:var(--font-mono);--gray-gradient:#e2e7e061, var(--paper-bg);--box-shadow:var(--paper-shadow-lift);color-scheme:light}:root[data-theme=dark]{--black:234, 235, 229;--gray:166, 175, 164;--gray-light:56, 64, 56;--gray-dark:225, 229, 221;--paper-bg:#171b18;--paper-bg-deep:#111411;--paper-surface:#202620;--paper-surface-muted:#273026;--paper-surface-rgb:32, 38, 32;--paper-line:#d9e5d514;--paper-line-strong:#d9e5d524;--paper-ink:#eaebe5;--paper-ink-soft:#b5beb1;--paper-ink-faint:#899487;--paper-control:#2a332bb8;--paper-control-hover:#344035e0;--paper-nav:#202620eb;--paper-card-wash-top:#272f27b8;--paper-card-wash-bottom:#1c211c85;--paper-page-bg:linear-gradient(180deg, #171b18fa 0%, #111411fa 100%);--paper-detail-bg:linear-gradient(180deg, #171b18fa 0%, #111411fa 100%);--paper-texture-light:#ffffff09;--paper-shadow:0 1px 2px #00000024, 0 4px 12px #00000014;--paper-shadow-lift:0 1px 2px #00000029, 0 6px 14px #0000001a;--paper-theme-color:#171b18;color-scheme:dark}body{font-family:var(--font-body);text-align:left;background:linear-gradient(var(--gray-gradient)) no-repeat;word-wrap:break-word;overflow-wrap:break-word;color:rgb(var(--gray-dark));background-size:100% 600px;margin:0;padding:0;font-size:20px;line-height:1.7}main{width:min(100%, var(--layout-shell-width));max-width:none;padding:var(--layout-page-top) var(--layout-page-gutter) var(--layout-page-bottom);margin:auto}h1,h2,h3,h4,h5,h6{color:rgb(var(--black));margin:0 0 .5rem;line-height:1.2}h1{font-size:3.052em}h2{font-size:2.441em}h3{font-size:1.953em}h4{font-size:1.563em}h5{font-size:1.25em}strong,b{font-weight:700}a,a:hover{color:var(--accent)}p{margin-bottom:1em}.prose p{margin-bottom:2em}textarea{width:100%;font-size:16px}input{font-size:16px}table{width:100%}.markdown-table-scroll{-webkit-overflow-scrolling:touch;max-width:100%;margin:28px 0 30px;overflow-x:auto}.markdown-table-scroll table{border-collapse:collapse;width:max-content;min-width:100%}.markdown-table-scroll th{white-space:nowrap}img{border-radius:8px;max-width:100%;height:auto}blockquote{border-left:4px solid var(--accent);margin:0;padding:0 0 0 20px;font-size:1.333em}hr{border:none;border-top:1px solid rgb(var(--gray-light))}@media (width<=720px){body{font-size:18px}main{padding:92px 18px 42px}}.sr-only{clip:rect(1px 1px 1px 1px);clip:rect(1px, 1px, 1px, 1px);clip-path:inset(50%);white-space:nowrap;border:0;width:1px;height:1px;margin:0;padding:0;overflow:hidden;position:absolute!important}*{box-sizing:border-box}html{background:var(--paper-bg);scrollbar-gutter:stable}body{background:var(--paper-page-bg);min-height:100vh;color:var(--paper-ink);font-family:var(--font-body);font-size:16px;line-height:1.8}body:before{content:"";z-index:-1;pointer-events:none;background-image:linear-gradient(var(--paper-rule) 1px, transparent 1px);opacity:.28;background-size:100% 32px;position:fixed;inset:0}.publication-bg{z-index:-2;background:linear-gradient(180deg, rgba(var(--paper-surface-rgb), .28), transparent 42%);position:fixed;inset:0}.glass-card{border:1px solid var(--paper-line);background:var(--paper-surface);box-shadow:var(--paper-shadow);border-radius:8px;transition:transform .18s,box-shadow .18s,border-color .18s,background .18s;animation:.42s both card-in;position:relative}.glass-card:after{content:none}.theme-icon-sun,:root[data-theme=dark] .theme-icon-moon{display:none}:root[data-theme=dark] .theme-icon-sun{display:block}.glass-card:hover{border-color:var(--paper-line-strong);box-shadow:var(--paper-shadow-lift);transform:translateY(-1px)}.glass-card:nth-of-type(2){animation-delay:80ms}.glass-card:nth-of-type(3){animation-delay:.14s}a{color:inherit}button,a{-webkit-tap-highlight-color:transparent}.site-icon{width:var(--icon-size);height:var(--icon-size);flex:0 0 var(--icon-size);vertical-align:middle;display:inline-block}h1,h2,h3,h4,h5,h6{font-family:var(--font-page-heading);letter-spacing:0;font-weight:400}.archive-header-shared{grid-template-columns:minmax(0,1fr) minmax(220px,300px);align-items:stretch;gap:32px;display:grid}.archive-header-main{flex-direction:column;justify-content:center;min-width:0;display:flex}.archive-header-shared .archive-kicker{color:var(--paper-accent);font-family:var(--font-ui-label);letter-spacing:.12em;text-transform:uppercase;margin:0;font-size:.78rem;font-weight:700}.archive-header-shared .archive-title{max-width:760px;color:var(--paper-ink);margin:8px 0 0;font-size:clamp(2.4rem,5.5vw,4rem);line-height:1.08}.archive-header-shared .archive-copy{text-align:center;flex-direction:column;justify-content:center;align-items:center;gap:14px;max-width:300px;margin:0;display:flex}.archive-header-shared .archive-subtitle{max-width:30ch;color:var(--paper-ink-soft);font-family:var(--font-ui-label);margin:0;font-size:1.03rem;line-height:1.76}.archive-header-shared .archive-note{max-width:42ch;color:var(--paper-ink-faint);font-family:var(--font-meta);text-align:center;margin:0;font-size:.7rem;line-height:1.75}.archive-header-shared>.archive-note{max-width:300px;color:var(--paper-ink-soft);font-family:var(--font-ui-label);place-self:center;margin:0;font-size:1.03rem;line-height:1.76}.page-header-spacing{margin-bottom:var(--page-header-spacing)}@keyframes card-in{0%{opacity:0;transform:translateY(12px)}to{opacity:1;transform:translateY(0)}}@media (prefers-reduced-motion:reduce){*,:before,:after{scroll-behavior:auto!important;transition-duration:1ms!important;animation-duration:1ms!important}}@media (width<=720px){.page-header-spacing{margin-bottom:var(--page-header-spacing-mobile)}.archive-header-shared{grid-template-columns:1fr;gap:14px}.archive-header-shared .archive-copy,.archive-header-shared .archive-note{text-align:left;max-width:none;display:block}.archive-header-shared .archive-title{font-size:2.08rem;line-height:1.1}}.astro-route-announcer{clip:rect(0 0 0 0);clip-path:inset(50%);white-space:nowrap;width:1px;height:1px;position:absolute;top:0;left:0;overflow:hidden}@font-face{font-family:Maple Mono;font-style:normal;font-display:swap;font-weight:400;src:url(/_astro/maple-mono-latin-400-normal.WIx2rg0p.woff2)format("woff2"),url(/_astro/maple-mono-latin-400-normal.OcfaEJ46.woff)format("woff")}@font-face{font-family:Maple Mono;font-style:normal;font-display:swap;font-weight:500;src:url(/_astro/maple-mono-latin-500-normal.DArLj6fy.woff2)format("woff2"),url(/_astro/maple-mono-latin-500-normal.CeaAlHyl.woff)format("woff")}@font-face{font-family:Maple Mono;font-style:normal;font-display:swap;font-weight:600;src:url(/_astro/maple-mono-latin-600-normal.BfjBt7Gd.woff2)format("woff2"),url(/_astro/maple-mono-latin-600-normal.Bl2EjP25.woff)format("woff")}@font-face{font-family:Maple Mono;font-style:normal;font-display:swap;font-weight:700;src:url(/_astro/maple-mono-latin-700-normal.B_sC0Ion.woff2)format("woff2"),url(/_astro/maple-mono-latin-700-normal.DeN56mtg.woff)format("woff")}:root:not([data-theme=dark]){--paper-ink-faint:#687168}:root[data-palette=blue-soft]:not([data-theme=dark]){--accent:#5b759e;--paper-accent:#5b759e}:root[data-theme-transition-capture=true] *,:root[data-theme-transition-capture=true] :before,:root[data-theme-transition-capture=true] :after{transition:none!important}:root[data-theme-transition=active]::view-transition-group(root),:root[data-theme-transition=active]::view-transition-old(root),:root[data-theme-transition=active]::view-transition-new(root){animation-duration:.22s;animation-timing-function:cubic-bezier(.6,0,.2,1);animation-fill-mode:both}:root[data-theme-transition=active]::view-transition-old(root),:root[data-theme-transition=active]::view-transition-new(root){mix-blend-mode:plus-lighter}html:root .theme-icon-moon,html:root .theme-icon-sun{pointer-events:none;transform-origin:50%;grid-area:1/1;display:block}html:root .theme-icon-moon{opacity:1;transform:rotate(0)scale(1)}html:root .theme-icon-sun{opacity:0;transform:rotate(-12deg)scale(.88)}html:root[data-theme=dark] .theme-icon-moon{opacity:0;display:block;transform:rotate(12deg)scale(.88)}html:root[data-theme=dark] .theme-icon-sun{opacity:1;display:block;transform:rotate(0)scale(1)}html:root[data-theme-transition=active] .theme-icon-moon{view-transition-name:theme-icon}html:root[data-theme-transition=active] .theme-icon-sun,html:root[data-theme-transition=active][data-theme=dark] .theme-icon-moon{view-transition-name:none}html:root[data-theme-transition=active][data-theme=dark] .theme-icon-sun{view-transition-name:theme-icon}:root[data-theme-transition=active]::view-transition-group(theme-icon){z-index:3;animation-duration:.22s;animation-timing-function:cubic-bezier(.6,0,.2,1)}:root[data-theme-transition=active]::view-transition-old(theme-icon),:root[data-theme-transition=active]::view-transition-new(theme-icon){mix-blend-mode:plus-lighter;transform-origin:50%}:root[data-theme-transition=active]::view-transition-old(theme-icon){animation:.18s cubic-bezier(.6,0,.2,1) both theme-icon-out}:root[data-theme-transition=active]::view-transition-new(theme-icon){animation:.22s cubic-bezier(.6,0,.2,1) both theme-icon-in}@keyframes theme-icon-out{to{opacity:0;transform:rotate(-10deg)scale(.88)}}@keyframes theme-icon-in{0%{opacity:0;transform:rotate(10deg)scale(.88)}}@media (prefers-reduced-motion:no-preference){html:root .theme-icon-moon,html:root .theme-icon-sun{transition:opacity .18s cubic-bezier(.6,0,.2,1),transform .22s cubic-bezier(.6,0,.2,1)}}@media (prefers-reduced-motion:reduce),(forced-colors:active){html:root .theme-icon-moon,html:root .theme-icon-sun{transition:none}:root[data-theme-transition=active]::view-transition-group(root),:root[data-theme-transition=active]::view-transition-old(root),:root[data-theme-transition=active]::view-transition-new(root),:root[data-theme-transition=active]::view-transition-group(theme-icon),:root[data-theme-transition=active]::view-transition-old(theme-icon),:root[data-theme-transition=active]::view-transition-new(theme-icon){mix-blend-mode:normal;animation:none}:root[data-theme-transition=active]::view-transition-old(root),:root[data-theme-transition=active]::view-transition-old(theme-icon){opacity:0}}
