@font-face{font-family:Spectral;font-style:normal;font-display:swap;font-weight:400;src:url(/_astro/spectral-latin-400-normal.CTVgUekv.woff2)format("woff2"),url(/_astro/spectral-latin-400-normal.D34IWA1h.woff)format("woff")}@font-face{font-family:Spectral;font-style:italic;font-display:swap;font-weight:400;src:url(/_astro/spectral-latin-400-italic.CDO25mTW.woff2)format("woff2"),url(/_astro/spectral-latin-400-italic.Ds-NcNVC.woff)format("woff")}@font-face{font-family:Spectral;font-style:normal;font-display:swap;font-weight:600;src:url(/_astro/spectral-latin-600-normal.DE3OxvnQ.woff2)format("woff2"),url(/_astro/spectral-latin-600-normal.DXnQJnYb.woff)format("woff")}@font-face{font-family:Hanken Grotesk;font-style:normal;font-display:swap;font-weight:400;src:url(/_astro/hanken-grotesk-latin-400-normal.BG6hkEXj.woff2)format("woff2"),url(/_astro/hanken-grotesk-latin-400-normal.CjyVwvJV.woff)format("woff")}@font-face{font-family:Hanken Grotesk;font-style:normal;font-display:swap;font-weight:600;src:url(/_astro/hanken-grotesk-latin-600-normal.CIXX6EOa.woff2)format("woff2"),url(/_astro/hanken-grotesk-latin-600-normal.NEn2C4Q3.woff)format("woff")}@font-face{font-family:Spline Sans Mono;font-style:normal;font-display:swap;font-weight:400;src:url(/_astro/spline-sans-mono-latin-400-normal.mUpA6Mve.woff2)format("woff2"),url(/_astro/spline-sans-mono-latin-400-normal.739QRW1l.woff)format("woff")}:root{--font-sans:"Hanken Grotesk", "Noto Sans TC", "PingFang TC", "PingFang SC", "Hiragino Sans GB", system-ui, sans-serif;--font-serif:Spectral, "Noto Serif TC", "Songti SC", Georgia, Cambria, serif;--font-mono:"Spline Sans Mono", ui-monospace, Menlo, "SF Mono", Consolas, monospace;--measure:624px}.kicker{font-family:var(--font-mono);text-transform:uppercase;letter-spacing:.12em;color:var(--fg-faint);margin:0;font-size:.66rem}.kicker-row{align-items:center;gap:.75rem;display:flex}.chip{background:color-mix(in srgb, var(--fg) 6%, transparent);color:var(--fg);border-radius:3px;padding:.125rem .375rem}.post-header{border-bottom:1px solid var(--rule);margin-top:1.5rem;padding-bottom:2rem}.post-title{font-family:var(--font-sans);letter-spacing:-.025em;margin:1rem 0 0;font-size:1.75rem;font-weight:600;line-height:1.375}@media (width>=640px){.post-title{font-size:2.1rem}}.standfirst{font-family:var(--font-sans);color:var(--fg-muted);margin:.75rem 0 0;font-size:1rem;line-height:1.625}.byline-row{justify-content:space-between;align-items:center;gap:1rem;margin-top:1rem;display:flex}.prose{font-family:var(--font-serif);margin-top:2rem;font-size:1.1875rem;line-height:1.6}.prose:lang(zh),[lang=zh] .prose{font-size:1.0625rem;line-height:1.95}.prose h2,.prose h3,.prose h4{font-family:var(--font-sans);letter-spacing:-.025em;color:var(--fg);font-weight:600;line-height:1.3}.prose h2{margin:2.5rem 0 1rem;font-size:1.5rem}.prose h3{margin:2rem 0 .75rem;font-size:1.25rem}.prose h4{margin:1.75rem 0 .5rem;font-size:1.05rem}.prose p,.prose ul,.prose ol,.prose pre,.prose table{margin:0 0 1.25em}.prose ul,.prose ol{padding-left:1.4em}.prose li{margin-bottom:.4em}.prose li::marker{color:var(--fg-muted)}.prose strong{color:var(--fg);font-weight:600}.prose a{color:var(--accent);text-underline-offset:2px;text-decoration-color:color-mix(in srgb, var(--accent) 70%, transparent)}:root[data-theme=dark] .prose a,.prose a:where(:root:not([data-theme=light]) *){text-decoration-color:color-mix(in srgb, var(--accent) 55%, transparent)}.prose a:hover{text-decoration-color:var(--accent)}.prose blockquote{color:var(--fg-muted);border-inline-start:.25rem solid color-mix(in srgb, var(--accent) 40%, transparent);quotes:"“" "”" "‘" "’";margin:1.66667em 0;padding-inline-start:1em;font-style:italic;font-weight:500}.prose blockquote:lang(zh),[lang=zh] .prose blockquote{quotes:"「" "」" "『" "』";font-style:normal}.prose blockquote p:first-of-type:before{content:open-quote}.prose blockquote p:last-of-type:after{content:close-quote}.prose blockquote strong,.prose blockquote code,.prose blockquote a{color:inherit}.prose hr{border:0;border-top:1px solid var(--rule);margin:2.5rem 0}.prose code{font-family:var(--font-mono);background:var(--code-bg);border-radius:3px;padding:.15em .35em;font-size:.85em}.prose pre{font-family:var(--font-mono);border-radius:5px;padding:1rem 1.1rem;font-size:.86rem;line-height:1.6;overflow-x:auto}.prose pre code{font-size:inherit;background:0 0;padding:0}.prose img{max-width:100%;height:auto;display:block}.prose table{border-collapse:collapse;width:100%;font-family:var(--font-sans);font-size:.92rem;display:block;overflow-x:auto}.prose th,.prose td{text-align:left;border-bottom:1px solid var(--rule);padding:.5em .7em}.prose th{font-weight:600}.heading-anchor{color:var(--fg-faint);opacity:0;margin-left:.4em;text-decoration:none;transition:opacity .12s}.prose h2:hover .heading-anchor,.prose h3:hover .heading-anchor,.prose h4:hover .heading-anchor,.heading-anchor:focus-visible{opacity:1}.heading-anchor:hover{color:var(--accent)}@media (hover:none){.heading-anchor{opacity:.45}}:root{--measure:680px;--frame:672px;--step:1.55rem;--bg:#faf6ee;--fg:#3a3530;--fg-muted:#6b6259;--fg-faint:#796e63;--rule:#ede4d3;--rule-strong:#796e63;--accent:#9a4329;--mark-fold:#f2e3c9;--code-bg:#f2ece0}@media (prefers-color-scheme:dark){:root:not([data-theme=light]){--bg:#151311;--fg:#f4efe6;--fg-muted:#a89c8e;--fg-faint:#8a7d6f;--rule:#2d2925;--rule-strong:#8a7d6f;--accent:#e8916f;--code-bg:#201d1a}}:root[data-theme=dark]{--bg:#151311;--fg:#f4efe6;--fg-muted:#a89c8e;--fg-faint:#8a7d6f;--rule:#2d2925;--rule-strong:#8a7d6f;--accent:#e8916f;--mark-fold:#f4efe6;--code-bg:#201d1a}*,:before,:after{box-sizing:border-box}html{-webkit-text-size-adjust:100%}body{background:var(--bg);color:var(--fg);font-family:var(--font-sans);text-rendering:optimizelegibility;-webkit-font-smoothing:antialiased;margin:0;font-size:1rem;line-height:1.65}a{color:inherit;text-underline-offset:.16em;text-decoration:underline 1px;text-decoration-color:color-mix(in srgb, currentColor 45%, transparent)}a:hover{text-decoration-color:currentColor}.site-header nav a:has(svg),.share a,.share button{text-decoration:none}:lang(zh) body,[lang=zh] .prose{line-height:1.95}.frame{max-width:var(--frame);margin:0 auto;padding:0 1.5rem}.site-header{font-family:var(--font-mono);flex-wrap:wrap;justify-content:space-between;align-items:center;gap:1rem;padding:3rem 0 0;display:flex}.site-header .name{font-family:var(--font-sans);letter-spacing:.02em;color:var(--fg);align-items:center;gap:.525rem;font-size:1.05rem;font-weight:500;text-decoration:none;display:inline-flex}.site-mark{flex:none;width:1.75rem;height:1.75rem;display:block}.mark-disc{fill:var(--accent)}.mark-fold{fill:var(--mark-fold)}.site-header nav{align-items:center;gap:1.1rem;margin-left:auto;font-size:.82rem;display:flex}.site-header nav a{color:var(--fg-muted);align-items:center;display:inline-flex}.site-header nav svg{fill:currentColor;width:15px;height:15px;display:block}.site-header nav a[aria-label=RSS\ feed] svg{width:13px;height:13px}.site-header nav a:hover{color:var(--accent)}#theme-toggle{cursor:pointer;color:var(--fg-muted);background:0 0;border:0;align-items:center;padding:0;line-height:1;display:inline-flex}#theme-toggle svg{fill:currentColor;width:17px;height:17px;display:block}#theme-toggle .theme-auto,#theme-toggle .theme-moon{display:none}#theme-toggle .theme-sun{display:block}:root[data-theme=light] #theme-toggle .theme-sun{display:none}:root[data-theme=light] #theme-toggle .theme-moon{display:block}:root[data-theme=dark] #theme-toggle .theme-sun{display:none}:root[data-theme=dark] #theme-toggle .theme-auto{display:block}#theme-toggle:hover{color:var(--accent)}.site-footer{border-top:1px solid var(--rule);font-family:var(--font-mono);color:var(--fg-faint);flex-wrap:wrap;gap:1.2rem;margin:5rem 0 3rem;padding-top:1.4rem;font-size:.82rem;display:flex}main{padding-top:3rem;padding-bottom:6rem}.bio a{color:var(--accent);text-underline-offset:.18em}.bio{max-width:var(--measure);color:var(--fg);margin:0 0 4rem;font-size:1rem;line-height:1.625}.section-label{font-family:var(--font-mono);letter-spacing:.12em;text-transform:uppercase;color:var(--fg-faint);margin:0 0 1.4rem;font-size:.78rem}.empty{color:var(--fg-muted);margin:0;font-size:1rem}.archive{margin:0;padding:0;list-style:none}.archive li{border-bottom:1px solid #0000;align-items:baseline;gap:1.5rem;padding:.5rem 0;display:flex}.archive time{font-family:var(--font-mono);color:var(--fg-faint);font-variant-numeric:tabular-nums;flex:none;font-size:.82rem}.archive a{font-family:var(--font-sans);font-size:1rem;font-weight:500;line-height:1.45}.archive a:hover{color:var(--accent)}.archive .draft-tag{font-family:var(--font-mono);letter-spacing:.08em;color:var(--accent);border:1px solid var(--accent);border-radius:3px;padding:0 .3em;font-size:.68rem}@media (width<=560px){.archive li{flex-direction:column;gap:.1rem;padding:.55rem 0}}.share{position:relative}.share .share-native{display:none}@media (width<=639px){.share .share-native{display:inline-flex}.share .share-menu{display:none}}.share-pill{border:1px solid var(--rule-strong);cursor:pointer;height:2.25rem;font-family:var(--font-mono);text-transform:uppercase;letter-spacing:.14em;color:var(--fg-muted);background:0 0;align-items:center;gap:.5rem;padding:0 .875rem;font-size:.66rem;text-decoration:none;list-style:none;transition:border-color .12s,color .12s;display:inline-flex}.share-pill::-webkit-details-marker{display:none}.share-pill:hover{border-color:var(--accent);color:var(--accent)}.share-pill svg{fill:currentColor;flex:none;width:.95rem;height:.95rem}.share-popover{z-index:40;border:1px solid var(--rule-strong);background:var(--bg);min-width:12rem;margin-top:.5rem;padding:.25rem 0;position:absolute;right:0;box-shadow:0 10px 30px -12px #0006}.share-row{cursor:pointer;text-align:left;width:100%;font-family:var(--font-sans);color:var(--fg);background:0 0;border:0;align-items:center;gap:.75rem;padding:.5rem 1rem;font-size:.9rem;text-decoration:none;transition:background-color .12s;display:flex}.share-row:hover{background:color-mix(in srgb, var(--accent) 10%, transparent);color:var(--fg)}.share-row svg{width:1rem;height:1rem;fill:var(--fg-muted);flex:none}@media (prefers-reduced-motion:reduce){*{transition:none!important}}
