.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}:root{--bg:#fbfaf8;--ink:#1a1a1a;--sub:#8c8a83;--line:#e8e6e1;--line-strong:#d6d2ca;--muted:#d5d2cb;--tint:#1a1a1a09;--serif:Georgia, "Times New Roman", "Songti SC", STSong, SimSun, "Noto Serif CJK SC", "Source Han Serif SC", serif;--mono:"SF Mono", SFMono-Regular, Menlo, Consolas, "Liberation Mono", "Noto Sans Mono CJK SC", monospace}:root[data-theme=dark]{--bg:#171717;--ink:#e6e4df;--sub:#8f8d86;--line:#333330;--line-strong:#45423d;--muted:#44423d;--tint:#ffffff0d}@media (prefers-color-scheme:dark){:root:not([data-theme=light]){--bg:#171717;--ink:#e6e4df;--sub:#8f8d86;--line:#333330;--line-strong:#45423d;--muted:#44423d;--tint:#ffffff0d}}@font-face{font-family:Brand Kai;src:url(/fonts/brand-mashanzheng.woff2)format("woff2");font-weight:400;font-display:swap;unicode-range:U+7EB8,U+4E0A,U+5F97,U+6765}*,:before,:after{box-sizing:border-box}html,body{margin:0;padding:0}body{background:var(--bg);color:var(--ink);font-family:var(--serif);-webkit-font-smoothing:antialiased;transition:background .4s,color .4s}a{color:inherit;text-decoration:none}a:hover{opacity:.75}::selection{color:#1a1a1a;background:#eae8e2}.shell{max-width:880px;min-height:100vh;margin:0 auto;padding:56px 40px 96px}.masthead{border-bottom:1px solid var(--line);justify-content:space-between;align-items:baseline;gap:24px;padding-bottom:20px;display:flex}.brand{letter-spacing:.18em;align-items:center;gap:9px;font-size:17px;font-weight:700;display:inline-flex}.brand span{font-family:"Brand Kai", var(--serif);letter-spacing:.1em;font-size:22px;font-weight:400}.brand-mark{width:auto;height:21px;display:block;transform:translateY(-1px)}@media (prefers-color-scheme:dark){:root:not([data-theme=light]) .brand-mark{filter:invert()}}:root[data-theme=dark] .brand-mark{filter:invert()}.masthead nav{font-family:var(--mono);letter-spacing:.16em;text-transform:uppercase;gap:28px;font-size:12.5px;display:flex}.masthead nav a{color:var(--sub)}.masthead nav a[aria-current=page]{color:var(--ink)}.intro{justify-content:space-between;align-items:baseline;gap:20px;margin:44px 0 40px;display:flex}.intro p{text-wrap:pretty;margin:0;font-size:22px;font-weight:600;line-height:1.7}.intro .count{font-family:var(--mono);letter-spacing:.1em;color:var(--sub);white-space:nowrap;font-size:12px}.entries{flex-direction:column;display:flex}.entry{border-top:1px solid var(--line);grid-template-columns:96px 1fr auto;align-items:baseline;gap:6px 20px;padding:18px 0;display:grid}.entry:hover{opacity:.72}.entry .date{font-family:var(--mono);color:var(--sub);letter-spacing:.03em;white-space:nowrap;font-size:12px}.entry .title{font-size:17.5px;font-weight:600;line-height:1.5}.entry .meta{font-family:var(--mono);color:var(--sub);letter-spacing:.06em;white-space:nowrap;font-size:11.5px}.entry .excerpt{color:var(--sub);text-wrap:pretty;grid-column:2/4;margin:0;font-size:14px;line-height:1.85}.pager{border-top:1px solid var(--line);letter-spacing:.3em;justify-content:center;align-items:center;gap:34px;padding-top:40px;scroll-margin-top:28px;font-size:14px;display:flex}.pager .step{text-indent:.3em;color:var(--ink)}.pager .step.off{color:var(--muted);pointer-events:none}.pager .nums{align-items:center;gap:24px;display:flex}.pager .num{color:var(--sub)}.pager .num[aria-current=page]{color:var(--ink)}.pager .num[aria-current=page] .dot{background:var(--ink)}.article{max-width:720px;margin-top:56px}.back{font-family:var(--mono);letter-spacing:.14em;color:var(--sub);font-size:12.5px}.article .stamp{font-family:var(--mono);color:var(--sub);letter-spacing:.05em;margin-top:40px;font-size:13px}.article h1{letter-spacing:.01em;text-wrap:pretty;margin:14px 0 0;font-size:34px;font-weight:700;line-height:1.45}.rule{background:var(--ink);width:36px;height:3px;margin:30px 0 40px}.prose>*{margin:20px 0 0}.prose>:first-child{margin-top:0}.prose p{text-wrap:pretty;font-size:16.5px;line-height:1.9}.prose{overflow-wrap:break-word}.prose h2{margin-top:38px;font-size:22px;font-weight:700;line-height:1.5}.prose h1{margin-top:42px;font-size:26px;font-weight:700;line-height:1.45}.prose h3{margin-top:30px;font-size:18.5px;font-weight:700;line-height:1.55}.prose h4{margin-top:26px;font-size:16.5px;font-weight:700;line-height:1.6}.prose h5,.prose h6{color:var(--sub);margin-top:24px;font-size:15px;font-weight:700;line-height:1.6}.prose :is(h1,h2,h3,h4,h5,h6)+*{margin-top:12px}.prose :is(ul,ol){margin:16px 0 0;padding-left:1.6em}.prose li{font-size:16.5px;line-height:1.85}.prose li+li,.prose li>:is(ul,ol){margin-top:6px}.prose li p{font-size:inherit;line-height:inherit;margin:0}.prose table{border-collapse:collapse;width:max-content;max-width:100%;margin:22px 0 0;font-size:14.5px;line-height:1.7;display:block;overflow-x:auto}.prose :is(th,td){border:1px solid var(--line);text-align:left;vertical-align:top;padding:9px 14px}.prose th{background:color-mix(in srgb, var(--line) 35%, transparent);font-weight:700}.prose hr{border:0;border-top:1px solid var(--line);margin:36px 0 0}.prose strong{font-weight:700}.prose em{font-style:italic}.prose font{color:inherit!important;font-size:inherit!important}.prose blockquote{border-left:2px solid var(--ink);color:var(--sub);margin:26px 0 0;padding:4px 0 4px 22px;font-size:16px;line-height:2}.prose blockquote p{font-size:inherit;line-height:inherit;margin:0}.prose a{text-underline-offset:3px;text-decoration:underline}.prose figure.code{border:1px solid var(--line-strong);border-radius:6px;margin:24px 0 0;overflow:hidden}.prose .code-lang{border-bottom:1px solid var(--line-strong);font-family:var(--mono);letter-spacing:.12em;color:var(--sub);text-transform:uppercase;padding:8px 16px;font-size:11px}.prose pre{font-family:var(--mono);margin:0;padding:18px 16px;font-size:13.5px;line-height:1.8;overflow-x:auto;background:0 0!important}.prose figure.code .code-body{position:relative}.prose .code-expand{display:none}@supports selector(:has(*)){.prose figure.code.is-long .code-body{max-height:400px;overflow:hidden}.prose figure.code.is-long .code-body:after{content:"";background:linear-gradient(to bottom, transparent, var(--bg));pointer-events:none;height:96px;position:absolute;bottom:0;left:0;right:0}.prose figure.code.is-long:has(.code-expand[open]) .code-body{max-height:none;overflow:visible}.prose figure.code.is-long:has(.code-expand[open]) .code-body:after{display:none}.prose figure.code.is-long .code-expand{border-top:1px solid var(--line-strong);display:block}.prose .code-expand summary{font-family:var(--mono);letter-spacing:.1em;color:var(--sub);cursor:pointer;user-select:none;padding:9px 16px;font-size:11.5px;list-style:none}.prose .code-expand summary::-webkit-details-marker{display:none}.prose .code-expand summary:hover{color:var(--ink)}.prose .code-expand summary:after{content:"▾  展开全部 · " attr(data-lines) " 行"}.prose .code-expand[open] summary:after{content:"▴  收起"}}.astro-code,.astro-code span{color:var(--shiki-light)}@media (prefers-color-scheme:dark){:root:not([data-theme=light]) .astro-code,:root:not([data-theme=light]) .astro-code span{color:var(--shiki-dark)}}:root[data-theme=dark] .astro-code,:root[data-theme=dark] .astro-code span{color:var(--shiki-dark)}.prose :not(pre)>code{font-family:var(--mono);border:1px solid var(--line);border-radius:4px;padding:2px 5px;font-size:.9em}.prose img{border:1px solid var(--line);border-radius:6px;max-width:100%;height:auto;max-height:640px;margin:8px 0 26px;display:block}.prose p>img:first-child{margin-top:0}.img-missing{border:1px dashed var(--line-strong);min-height:132px;color:var(--sub);font-family:var(--mono);letter-spacing:.05em;text-align:center;text-wrap:balance;border-radius:6px;justify-content:center;align-items:center;gap:10px;margin:8px 0 26px;padding:22px 24px;font-size:12.5px;display:flex}.img-missing:before{content:"";opacity:.55;border:1.5px solid;border-radius:2px;flex:none;width:16px;height:13px}.prose figure{margin:26px 0 0}.prose figure img{border-radius:6px;width:100%;height:auto;margin:0;display:block}.prose figcaption{font-family:var(--mono);color:var(--sub);letter-spacing:.05em;text-align:center;margin-top:10px;font-size:12px}.prose figure.diagram{background:var(--tint);border-radius:6px;margin:30px 0 0;padding:22px 20px 18px}.prose figure.diagram svg{width:100%;height:auto;display:block}.prose figure.diagram figcaption{font-family:var(--mono);letter-spacing:.06em;color:var(--sub);text-align:center;margin-top:12px;font-size:11.5px}.prose figure.mermaid svg{max-width:100%;height:auto}.prose figure.mermaid{display:block}.prose figure.mermaid .node rect,.prose figure.mermaid .node polygon,.prose figure.mermaid .node circle,.prose figure.mermaid .label-container{fill:#0000!important;stroke:var(--sub)!important;stroke-width:1px!important}.prose figure.mermaid .nodeLabel,.prose figure.mermaid .edgeLabel,.prose figure.mermaid .label,.prose figure.mermaid foreignObject div,.prose figure.mermaid foreignObject span,.prose figure.mermaid foreignObject p{color:var(--ink)!important;fill:var(--ink)!important;font-family:var(--serif)!important;background:0 0!important}.prose figure.mermaid .edgeLabel,.prose figure.mermaid .edgeLabel foreignObject div{color:var(--sub)!important;fill:var(--sub)!important}.prose figure.mermaid .labelBkg,.prose figure.mermaid .edgeLabel rect{fill:var(--bg)!important;background:var(--bg)!important}.prose figure.mermaid .edgePath path,.prose figure.mermaid .flowchart-link{stroke:var(--sub)!important}.prose figure.mermaid .arrowMarkerPath,.prose figure.mermaid marker path{fill:var(--sub)!important;stroke:var(--sub)!important}.prose figure.mermaid rect.actor,.prose figure.mermaid .actor-box,.prose figure.mermaid .note{fill:#0000!important;stroke:var(--sub)!important}.prose figure.mermaid text.actor,.prose figure.mermaid .actor>tspan,.prose figure.mermaid .noteText,.prose figure.mermaid .noteText>tspan,.prose figure.mermaid .messageText,.prose figure.mermaid .loopText,.prose figure.mermaid .labelText{fill:var(--ink)!important;stroke:none!important}.prose figure.mermaid .actor-line,.prose figure.mermaid .messageLine0,.prose figure.mermaid .messageLine1,.prose figure.mermaid .transition,.prose figure.mermaid .stateGroup line{stroke:var(--sub)!important}.prose figure.mermaid .stateGroup circle,.prose figure.mermaid .node circle.state-start{fill:var(--ink)!important;stroke:var(--ink)!important}.prose figure.mermaid .node circle.state-end{fill:#0000!important;stroke:var(--ink)!important}.prose figure.mermaid .statediagram-state rect,.prose figure.mermaid .statediagram-cluster rect{fill:#0000!important;stroke:var(--sub)!important}.prose figure.mermaid svg>g path:not([class]){stroke:var(--sub)!important}.prose figure.mermaid marker path{fill:var(--sub)!important;stroke:none!important}.progress{display:none}@supports (animation-timeline:scroll()){.progress{z-index:10;background:var(--ink);transform-origin:0;height:2px;animation-name:read-progress;animation-duration:auto;animation-timing-function:linear;animation-fill-mode:both;display:block;position:fixed;inset:0 0 auto;transform:scaleX(0)}html .progress{animation-timeline:scroll(root)}}@keyframes read-progress{0%{transform:scaleX(0)}to{transform:scaleX(1)}}@media (prefers-reduced-motion:reduce){.progress{display:none}}.post-end{border-top:1px solid var(--line);margin-top:56px;padding-top:24px}.post-end-label{letter-spacing:.04em;font-size:14px;font-weight:600}.post-end-label span{font-family:var(--mono);letter-spacing:.18em;color:var(--sub);text-transform:uppercase;margin-left:9px;font-size:10.5px;font-weight:400}.post-end p{color:var(--sub);text-wrap:pretty;margin:10px 0 0;font-size:14.5px;line-height:1.95}.post-end a{color:var(--ink);font-family:var(--mono);letter-spacing:.01em;text-underline-offset:4px;text-decoration:underline 1px;text-decoration-color:var(--line-strong);font-size:13.5px}.post-end a:hover{text-decoration-color:var(--ink);opacity:1}.recent{border-top:1px solid var(--line);margin-top:52px;padding-top:26px}.recent-label{font-family:var(--mono);letter-spacing:.16em;color:var(--sub);text-transform:uppercase;font-size:11.5px}.recent ul{margin:16px 0 26px;padding:0;list-style:none}.recent li+li{margin-top:10px}.recent li a{align-items:baseline;gap:18px;display:flex}.recent .date{font-family:var(--mono);color:var(--sub);flex:none;font-size:12px}.recent .title{font-size:16px;font-weight:700;line-height:1.5}@media (width<=640px){.recent li a{flex-direction:column;gap:2px}}.page-head{margin:0;font-size:30px;font-weight:700}.page-head .en{font-family:var(--mono);letter-spacing:.16em;color:var(--sub);font-size:14px;font-weight:400}.page-body{flex-direction:column;gap:24px;font-size:16px;line-height:2.05;display:flex}.page-body p{margin:0}.footer{color:var(--sub);font-size:12.5px;font-family:var(--mono);letter-spacing:.05em;flex-wrap:wrap;justify-content:space-between;gap:6px 20px;margin-top:64px;display:flex}.footer .icp{letter-spacing:0}@media (width<=640px){.footer{text-align:center;justify-content:center;gap:4px 16px}.shell{padding:36px 22px 72px}.intro{flex-direction:column;gap:12px}.intro p{font-size:19px}.entry{grid-template-columns:1fr;gap:4px}.entry .excerpt{grid-column:1}.entry .meta{order:3}.article h1{font-size:27px}.pager{letter-spacing:.16em;flex-wrap:wrap;justify-content:space-between;gap:16px 12px}.pager .nums{flex-wrap:wrap;order:3;justify-content:center;gap:8px 15px;width:100%}}.stamp .revised{border-left:1px solid var(--line);opacity:.72;margin-left:.6rem;padding-left:.6rem}@media (width<=560px){.stamp .revised{border:0;margin:.35rem 0 0;padding:0;display:block}}
