#progress{z-index:20;background:linear-gradient(90deg,var(--moss) 0%,var(--moss) 58%,transparent 100%);transform-origin:0;height:2px;position:fixed;top:0;left:0;right:0;transform:scaleX(0)}#progress-marks{z-index:21;pointer-events:none;height:6px;position:fixed;top:0;left:0;right:0}#progress-marks.off{display:none}#progress-marks span{background:var(--moss);opacity:.42;width:1px;height:6px;position:absolute;top:0}#progress-marks span.on{opacity:.95}.post-tail{max-width:680px;margin:56px auto 0}.post-act{cursor:pointer;font:inherit;letter-spacing:.12em;color:var(--moss-ink);text-underline-offset:3px;text-decoration-line:underline;text-decoration-thickness:1px;text-decoration-color:color-mix(in srgb,currentColor 40%,transparent);background:0 0;border:0;padding:0;font-family:IBM Plex Mono,IBM Plex Mono-fallback,monospace;font-size:12px;transition:text-decoration-color .3s cubic-bezier(.22,1,.36,1),text-decoration-thickness .3s cubic-bezier(.22,1,.36,1),color .3s cubic-bezier(.22,1,.36,1)}.post-act:hover{color:var(--ink);text-decoration-color:currentColor;text-decoration-thickness:2px}.post-act:active{transition:transform .4s cubic-bezier(.24,1.32,.4,1);transform:scale(.98)}.post-act.miss{color:var(--ink-2);text-decoration-color:var(--ink-3)}.post-act.miss:after{content:" · 没能复制，地址在地址栏"}.stamp-note{letter-spacing:.12em;color:var(--ink-3);margin-top:14px;font-family:IBM Plex Mono,IBM Plex Mono-fallback,monospace;font-size:12px;animation:.4s cubic-bezier(.22,1,.36,1) both stamp-in}@keyframes stamp-in{0%{opacity:0;transform:translateY(-4px)}to{opacity:1;transform:none}}.post-focus{margin-left:14px}html[data-focus="1"] article.post-body{background-image:none;-webkit-mask-image:none;mask-image:none}html[data-focus="1"] .wrap:before{display:none}.post-head{max-width:680px;margin:0 auto;padding:24vh 0 56px}.post-meta{letter-spacing:.12em;color:var(--ink-3);margin-bottom:20px;font-family:IBM Plex Mono,IBM Plex Mono-fallback,monospace;font-size:12px}.post-title{letter-spacing:.02em;font-family:Noto Serif SC,Noto Serif SC-fallback,Songti SC,STSong,serif;font-size:clamp(32px,6vw,42px);font-weight:600;line-height:1.4}.post-sub{color:var(--ink-2);margin-top:18px;font-size:15px}.post-when{color:var(--ink-2);letter-spacing:.02em;margin-top:14px;font-size:14px}#toc{z-index:5;opacity:0;flex-direction:column;gap:12px;max-width:180px;animation:.8s cubic-bezier(.22,1,.36,1) 1s forwards toc-in;display:flex;position:fixed;top:34vh;right:max(4vw,24px)}@keyframes toc-in{to{opacity:1}}#toc a{letter-spacing:.08em;color:var(--ink-3);padding-left:14px;font-family:IBM Plex Mono,IBM Plex Mono-fallback,monospace;font-size:12px;transition:color .3s cubic-bezier(.22,1,.36,1);position:relative}#toc a:before{content:"";background:var(--ink-3);width:6px;height:1px;transition:background .3s cubic-bezier(.22,1,.36,1),width .3s cubic-bezier(.22,1,.36,1);position:absolute;top:50%;left:0}#toc a:hover{color:var(--ink)}#toc a.on{color:var(--moss-ink)}#toc a.on:before{background:var(--moss);width:10px}#toc a.sub{padding-left:26px}@media (width<=1240px){#toc{display:none}}:root{--ground:color-mix(in srgb, var(--lit) 30%, transparent)}.post-body{letter-spacing:.01em;background-image:radial-gradient(var(--lit-r) var(--lit-r) at 0 0, var(--ground), transparent 72%);--read-fog:-9999px;max-width:680px;-webkit-mask-image:linear-gradient(180deg,rgba(0,0,0,calc(1 - min(.44, .44 * var(--fog)))) calc(var(--read-fog) - 100vh),#000 var(--read-fog));mask-image:linear-gradient(180deg,rgba(0,0,0,calc(1 - min(.44, .44 * var(--fog)))) calc(var(--read-fog) - 100vh),#000 var(--read-fog));text-autospace:normal;font-variant-numeric:tabular-nums;margin:0 auto;font-family:Noto Serif SC,Noto Serif SC-fallback,Songti SC,STSong,serif;font-size:18px;line-height:1.9}.post-body p{margin-bottom:28px}.post-body h2{letter-spacing:.02em;margin:64px 0 24px;font-size:30px;font-weight:600}.post-body h2:before{content:"";background:var(--moss);width:32px;height:1px;margin-bottom:16px;display:block}.post-body em{letter-spacing:-.015em;color:var(--moss-ink)}.post-body strong{font-weight:600}.post-body code{background:var(--glass);border:1px solid var(--glass-border);border-radius:6px;padding:2px 7px;font-family:IBM Plex Mono,IBM Plex Mono-fallback,monospace;font-size:.85em}.post-body .codeblock{margin:40px 0;position:relative}.post-body .codeblock[data-lang]:before{content:attr(data-lang);letter-spacing:.12em;color:var(--ink-3);margin-bottom:8px;font-family:IBM Plex Mono,IBM Plex Mono-fallback,monospace;font-size:12px;display:block}.post-body .codeblock .code-copy{position:absolute;top:0;right:0}.post-body pre{background:var(--glass);border:1px solid var(--glass-border);border-radius:8px;padding:16px;font-family:IBM Plex Mono,IBM Plex Mono-fallback,monospace;font-size:.85em;line-height:1.75;overflow-x:auto}.post-body pre code{background:0 0;border:0;padding:0;font-size:1em}.post-body .tablewrap{margin:40px 0;overflow-x:auto}.post-body table{border-collapse:collapse;width:100%;font-size:14px}.post-body th,.post-body td{text-align:left;border-bottom:1px solid var(--line);padding:8px 12px}.post-body th{color:var(--ink-2);font-weight:600}.post-body .al-c{text-align:center}.post-body .al-r{text-align:right}.post-body h3{letter-spacing:.02em;margin:48px 0 18px;font-size:22px;font-weight:600}.post-body ul,.post-body ol{margin:0 0 28px;padding-left:1.7em}.post-body li{margin-bottom:10px}.post-body li::marker{color:var(--moss);font-family:IBM Plex Mono,IBM Plex Mono-fallback,monospace;font-size:.82em}.post-body blockquote{color:var(--ink-2);margin:40px 0;padding-left:28px;position:relative}.post-body blockquote:before{content:"";background:var(--moss);opacity:.55;width:1px;position:absolute;top:.5em;bottom:.5em;left:0}.post-body blockquote p{margin-bottom:14px}.post-body blockquote p:last-of-type{margin-bottom:0}.post-body blockquote footer{letter-spacing:.12em;color:var(--ink-2);margin-top:14px;font-family:IBM Plex Mono,IBM Plex Mono-fallback,monospace;font-size:12px}.post-body hr{text-align:center;background:0 0;border:0;height:auto;margin:56px auto;overflow:visible}.post-body hr:before{content:"· · ·";letter-spacing:.5em;color:var(--ink-3);font-family:IBM Plex Mono,IBM Plex Mono-fallback,monospace;font-size:13px}.post-body sup.fnref{margin-left:2px;font-family:IBM Plex Mono,IBM Plex Mono-fallback,monospace;font-size:.6em;line-height:0}.post-body sup.fnref a{color:var(--moss-ink);text-decoration:none}.post-body sup.fnref a:hover{text-decoration:underline}.post-body sup.fn-missing{color:var(--ink-3)}.footnotes{border-top:1px solid #0000;margin-top:72px;padding-top:28px;position:relative}.footnotes .fn-title{letter-spacing:.14em;color:var(--ink-3);margin:0 0 18px;font-family:IBM Plex Mono,IBM Plex Mono-fallback,monospace;font-size:12px;font-weight:500}.footnotes .fn-title:before{content:none}.footnotes ol{color:var(--ink-2);margin:0;padding-left:1.9em;font-size:14px;line-height:1.85}.footnotes li{margin-bottom:8px;scroll-margin-top:88px}.footnotes li::marker{color:var(--moss);font-size:.78em}.footnotes li:target{color:var(--ink)}.footnotes .backref{color:var(--moss-ink);margin-left:6px;text-decoration:none}.post-body .sidenote{color:var(--ink-2);font-size:.78em}.post-body .sn-mark{color:var(--moss-ink);vertical-align:super;margin:0 2px 0 5px;font-family:IBM Plex Mono,IBM Plex Mono-fallback,monospace;font-size:.72em}.post-body .sn-mark:before{content:"（";vertical-align:baseline;font-size:1.2em}.post-body .sidenote:after{content:"）"}@media (width>=1240px){.post-body .sidenote{float:left;clear:left;width:200px;color:var(--ink-2);text-align:left;margin:2px 0 20px -232px;font-size:14px;line-height:1.75}.post-body .sidenote:after{content:none}.post-body .sn-mark{float:left;vertical-align:baseline;margin:2px 8px 0 0}.post-body .sn-mark:before{content:none}}.post-body a{color:var(--moss-ink);text-underline-offset:3px;text-decoration-line:underline;text-decoration-thickness:1px;text-decoration-color:color-mix(in srgb,currentColor 40%,transparent);transition:text-decoration-color .3s cubic-bezier(.22,1,.36,1),text-decoration-thickness .3s cubic-bezier(.22,1,.36,1)}.post-body a:hover{text-decoration-color:currentColor;text-decoration-thickness:2px}article.post-body img{border-radius:8px;width:auto;max-width:100%;height:auto;position:static}.post-body figure.shot{margin:44px 0}.post-body figure.shot .frame{border:1px solid var(--glass-border);background:linear-gradient(150deg,var(--bg-top),var(--glass));border-radius:16px;display:block;position:relative;overflow:hidden}.post-body figure.shot img{border-radius:0;width:100%;height:auto;display:block}.post-body figcaption{letter-spacing:.12em;color:var(--ink-3);margin-top:14px;font-family:IBM Plex Mono,IBM Plex Mono-fallback,monospace;font-size:12px}.post-body figure.shot.zoomable{cursor:pointer}.lightbox{border:1px solid var(--glass-border);background:linear-gradient(150deg,var(--bg-top),var(--glass));width:min(92vw,1120px);max-height:88vh;color:var(--ink);border-radius:16px;flex-direction:column;align-items:center;gap:14px;margin:auto;padding:16px;display:flex;overflow:hidden}.lightbox::backdrop{background:var(--halo)}.lightbox img{object-fit:contain;border-radius:8px;max-width:100%;height:auto;max-height:66vh}.lightbox-cap{letter-spacing:.12em;color:var(--ink-3);text-align:center;font-family:IBM Plex Mono,IBM Plex Mono-fallback,monospace;font-size:12px}.lightbox-close{align-self:flex-end}.post-nav{border-top:1px solid #0000;justify-content:space-between;gap:32px;max-width:680px;margin:14vh auto 0;padding-top:48px;display:flex;position:relative}.post-nav a{font-family:Noto Serif SC,Noto Serif SC-fallback,Songti SC,STSong,serif;font-size:22px;font-weight:600;transition:color .3s cubic-bezier(.22,1,.36,1)}.post-nav a:hover{color:var(--moss-ink)}.post-nav a:active{transition:transform .4s cubic-bezier(.24,1.32,.4,1);transform:scale(.98)}.post-nav span{letter-spacing:.12em;color:var(--ink-3);margin-bottom:10px;font-family:IBM Plex Mono,IBM Plex Mono-fallback,monospace;font-size:12px;display:block}.post-nav .next{text-align:right}@media (width<=720px){.post-head{padding:18vh 0 40px}.post-nav{flex-direction:column}.post-nav .next{text-align:left}}@media (prefers-reduced-motion:reduce){#toc{opacity:1}.post-body{-webkit-mask-image:none;mask-image:none}}@media (prefers-reduced-transparency:reduce){.lightbox,.lightbox::backdrop{background:var(--surface)!important}}
