:root{--accent-h: 22;--accent-c: .12;--accent-l: .48}html[data-roast=light][data-theme=paper]{--paper: oklch(.975 .012 80);--paper-2: oklch(.945 .016 80);--paper-3: oklch(.915 .02 80);--ink: oklch(.22 .022 50);--ink-2: oklch(.36 .018 50);--ink-soft:oklch(.52 .014 50);--rule: oklch(.86 .016 70);--rule-soft: oklch(.91 .013 70);--accent: oklch(var(--accent-l) var(--accent-c) var(--accent-h));--accent-soft: oklch(.92 .04 var(--accent-h));--selection: oklch(.88 .08 var(--accent-h))}html[data-roast=dark][data-theme=paper]{--paper: oklch(.18 .014 50);--paper-2: oklch(.22 .016 50);--paper-3: oklch(.26 .018 50);--ink: oklch(.93 .012 80);--ink-2: oklch(.8 .014 80);--ink-soft:oklch(.64 .014 70);--rule: oklch(.32 .016 60);--rule-soft: oklch(.27 .014 60);--accent: oklch(.78 .11 var(--accent-h));--accent-soft: oklch(.32 .04 var(--accent-h));--selection: oklch(.38 .1 var(--accent-h))}html[data-roast=light][data-theme=sepia]{--paper: oklch(.955 .028 80);--paper-2: oklch(.925 .034 78);--paper-3: oklch(.895 .04 76);--ink: oklch(.26 .03 48);--ink-2: oklch(.4 .024 48);--ink-soft:oklch(.56 .02 52);--rule: oklch(.84 .028 74);--rule-soft: oklch(.89 .022 74);--accent: oklch(.48 .12 28);--accent-soft: oklch(.9 .05 28);--selection: oklch(.86 .09 28)}*{box-sizing:border-box}html,body{margin:0;padding:0}body{font-family:Fraunces,Iowan Old Style,Georgia,serif;font-optical-sizing:auto;font-variation-settings:"SOFT" 30;background:var(--paper);color:var(--ink);font-size:var(--body-size, 19px);line-height:1.7;-webkit-font-smoothing:antialiased;text-rendering:optimizeLegibility;min-height:100vh;transition:background-color .2s ease,color .2s ease}::selection{background:var(--selection);color:var(--ink)}.ui{font-family:Inter Tight,system-ui,-apple-system,sans-serif}.mono{font-family:JetBrains Mono,ui-monospace,monospace}.noise{pointer-events:none;position:fixed;inset:0;z-index:100;opacity:.35;mix-blend-mode:multiply;background-image:url("data:image/svg+xml;utf8,<svg xmlns='http://www.w3.org/2000/svg' width='180' height='180'><filter id='n'><feTurbulence type='fractalNoise' baseFrequency='0.9' numOctaves='2' stitchTiles='stitch'/><feColorMatrix values='0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.06 0'/></filter><rect width='100%' height='100%' filter='url(%23n)'/></svg>")}html[data-roast=dark] .noise{mix-blend-mode:screen;opacity:.22}.page{max-width:980px;margin:0 auto;padding:28px 32px 120px;position:relative}@media(max-width:640px){.page{padding:18px 20px 80px}}header.site{display:flex;align-items:baseline;justify-content:space-between;padding-bottom:28px;border-bottom:1px solid var(--rule);margin-bottom:48px;gap:16px;flex-wrap:wrap}.wordmark{font-family:Fraunces,serif;font-weight:500;font-size:22px;letter-spacing:-.01em;color:var(--ink);text-decoration:none;display:inline-flex;align-items:baseline;gap:10px}.wordmark .dot{width:9px;height:9px;border-radius:50%;background:var(--accent);display:inline-block;transform:translateY(-1px);margin:0 2px}.wordmark .sub{font-family:Inter Tight,sans-serif;font-weight:400;font-size:13px;color:var(--ink-soft);letter-spacing:.02em;text-transform:lowercase}.header-right{display:flex;align-items:center;gap:20px;font-family:Inter Tight,sans-serif;font-size:13px}.header-right a{color:var(--ink-soft);text-decoration:none;border-bottom:1px solid transparent;padding-bottom:1px;transition:color .12s ease,border-color .12s ease}.header-right a:hover{color:var(--ink);border-bottom-color:var(--rule)}.header-right .external:after{content:" ↗";opacity:.7}.header-nav{display:flex;gap:22px}.header-nav a.active{color:var(--ink)}.roast-toggle{display:inline-flex;align-items:center;background:var(--paper-2);border:1px solid var(--rule);border-radius:999px;padding:3px;cursor:pointer;position:relative;gap:0}.roast-toggle button{appearance:none;border:0;background:transparent;padding:6px 10px;font-family:Inter Tight,sans-serif;font-size:11px;letter-spacing:.04em;text-transform:uppercase;color:var(--ink-soft);cursor:pointer;border-radius:999px;transition:color .16s ease}.roast-toggle button.on{color:var(--paper);background:var(--ink)}html[data-roast=dark] .roast-toggle button.on{background:var(--accent);color:#0e0a07}h1,h2,h3,h4{font-family:Fraunces,serif;font-weight:500;letter-spacing:-.015em;color:var(--ink);font-variation-settings:"SOFT" 30,"opsz" 144;margin:0;line-height:1.12}p{margin:0 0 1.1em}a{color:var(--ink)}.eyebrow{font-family:Inter Tight,sans-serif;font-size:12px;letter-spacing:.12em;text-transform:uppercase;color:var(--ink-soft);font-weight:500}.meta{font-family:Inter Tight,sans-serif;font-size:13.5px;color:var(--ink-soft);line-height:1.5}.meta .sep{margin:0 8px;opacity:.5}.hero{padding:8px 0 56px;border-bottom:1px solid var(--rule);margin-bottom:48px}.hero .eyebrow{margin-bottom:18px;display:block}.hero h1{font-size:clamp(40px,5.5vw,64px);max-width:22ch;margin-bottom:18px;font-weight:400}.hero .subtitle{font-family:Inter Tight,sans-serif;font-size:20px;color:var(--ink-2);max-width:56ch;line-height:1.5;margin-bottom:28px;font-weight:400}.hero .read-link{font-family:Inter Tight,sans-serif;font-size:14px;letter-spacing:.02em;color:var(--ink);text-decoration:none;border-bottom:1px solid var(--ink);padding-bottom:2px;font-weight:500}.hero .read-link:hover{color:var(--accent);border-bottom-color:var(--accent)}.list-eyebrow{display:flex;align-items:center;gap:14px;margin-bottom:28px}.list-eyebrow .line{flex:1;height:1px;background:var(--rule)}.card-list{display:flex;flex-direction:column}.card{display:grid;grid-template-columns:100px 1fr;gap:28px;padding:22px 0;border-bottom:1px solid var(--rule-soft);text-decoration:none;color:inherit;transition:background-color .12s ease}.card:hover{background:var(--paper-2);margin:0 -16px;padding:22px 16px}.card:hover h3{color:var(--accent)}.card .date{font-family:JetBrains Mono,monospace;font-size:12px;color:var(--ink-soft);padding-top:6px;letter-spacing:.02em}.card h3{font-size:24px;font-weight:500;margin-bottom:8px;letter-spacing:-.01em;transition:color .12s ease}.card .summary{font-family:Inter Tight,sans-serif;font-size:15px;color:var(--ink-2);line-height:1.55;max-width:62ch;margin-bottom:10px}.card .tags{display:flex;gap:10px}.tag{font-family:JetBrains Mono,monospace;font-size:11px;color:var(--ink-soft);text-decoration:none;padding:2px 8px;border-radius:2px;background:var(--paper-2);border:1px solid var(--rule-soft)}a.tag:hover{color:var(--accent);border-color:var(--accent)}@media(max-width:640px){.card{grid-template-columns:1fr;gap:6px}.card .date{padding-top:0}.card h3{font-size:20px}}.article-wrap{max-width:64ch;margin:0 auto}.article-header{margin-bottom:48px;padding-bottom:36px;border-bottom:1px solid var(--rule)}.article-header .back{font-family:Inter Tight,sans-serif;font-size:13px;color:var(--ink-soft);text-decoration:none;display:inline-block;margin-bottom:32px}.article-header .back:hover{color:var(--accent)}.article-header h1{font-size:clamp(32px,4.4vw,44px);font-weight:500;margin-bottom:14px;letter-spacing:-.02em;line-height:1.08}.article-header .subtitle{font-family:Inter Tight,sans-serif;font-weight:400;font-size:22px;color:var(--ink-soft);line-height:1.45;margin-bottom:28px;max-width:42ch}.article-header .meta-row{display:flex;align-items:center;gap:14px;flex-wrap:wrap}article.body{font-size:var(--body-size, 19px);line-height:1.7}article.body[data-justify=on]{text-align:justify;hyphens:auto}@media(max-width:1023px){article.body{text-align:left!important;hyphens:manual}}article.body>p:first-of-type:first-letter{font-family:Fraunces,serif;font-weight:400;font-size:5.4em;line-height:.86;float:left;padding:.08em .12em 0 0;color:var(--accent);font-variation-settings:"SOFT" 30,"opsz" 144}article.body[data-dropcap=off]>p:first-of-type:first-letter{font-size:inherit;float:none;padding:0;color:inherit;font-family:inherit}article.body h2{font-size:28px;font-weight:500;margin-top:2em;margin-bottom:.6em;letter-spacing:-.01em}article.body h3{font-family:Inter Tight,sans-serif;font-size:17px;font-weight:600;text-transform:uppercase;letter-spacing:.08em;margin-top:2em;margin-bottom:.8em;color:var(--ink-2)}article.body ul,article.body ol{padding-left:1.5em;margin:0 0 1.4em}article.body li{margin-bottom:.4em}article.body blockquote{margin:1.5em 0;padding-left:1.2em;border-left:2px solid var(--accent);color:var(--ink-2);font-style:italic}article.body figure.pull-quote{margin:2.2em 0;padding:1.8em 0;border-top:1px solid var(--rule);border-bottom:1px solid var(--rule);text-align:center}article.body figure.pull-quote blockquote{border:0;padding:0;margin:0;font-size:24px;line-height:1.4;color:var(--ink);font-style:italic;font-weight:300}article.body a{color:var(--ink);text-decoration:none;background-image:linear-gradient(var(--accent),var(--accent));background-size:100% 1px;background-position:0 100%;background-repeat:no-repeat;padding-bottom:1px;transition:color .12s ease}article.body a:hover{color:var(--accent)}article.body code{font-family:JetBrains Mono,monospace;font-size:.85em;background:var(--paper-2);border:1px solid var(--rule-soft);padding:1px 6px;border-radius:2px}article.body pre{font-family:JetBrains Mono,monospace;font-size:14px;line-height:1.55;background:var(--paper-2);border:1px solid var(--rule);border-radius:3px;padding:18px 20px;overflow-x:auto;margin:1.6em 0;text-align:left;hyphens:none}article.body pre code{background:transparent;border:0;padding:0;font-size:inherit}article.body pre.astro-code,article.body pre.astro-code code{background:var(--paper-2)!important}article.body hr{border:0;height:1px;background:var(--rule);margin:2.5em auto;width:40%}article.body figure.placeholder{margin:2em 0;background-image:repeating-linear-gradient(135deg,var(--paper-2),var(--paper-2) 10px,var(--paper-3) 10px,var(--paper-3) 20px);border:1px solid var(--rule);aspect-ratio:16/9;display:flex;align-items:center;justify-content:center;color:var(--ink-soft);font-family:JetBrains Mono,monospace;font-size:12px;letter-spacing:.04em}article.body img{max-width:100%;height:auto;margin:1.6em 0;border:1px solid var(--rule);border-radius:2px}.sources{margin:72px 0 0;padding-top:28px;border-top:1px solid var(--rule)}.sources h4{font-family:Inter Tight,sans-serif;font-size:12px;letter-spacing:.12em;text-transform:uppercase;color:var(--ink-soft);font-weight:500;margin-bottom:18px}.sources ol{list-style:none;padding:0;margin:0;font-family:Inter Tight,sans-serif;font-size:14px;counter-reset:src}.sources li{counter-increment:src;padding:8px 0 8px 32px;position:relative;color:var(--ink-2);border-bottom:1px solid var(--rule-soft)}.sources li:before{content:counter(src,decimal-leading-zero);position:absolute;left:0;top:8px;font-family:JetBrains Mono,monospace;font-size:11px;color:var(--ink-soft)}.sources a{color:var(--ink);text-decoration:none;border-bottom:1px solid var(--rule)}.sources a:hover{color:var(--accent);border-bottom-color:var(--accent)}.related{margin-top:56px;padding-top:28px;border-top:1px solid var(--rule)}.related h4{font-family:Inter Tight,sans-serif;font-size:12px;letter-spacing:.12em;text-transform:uppercase;color:var(--ink-soft);font-weight:500;margin-bottom:20px}.related ul{list-style:none;padding:0;margin:0;display:flex;flex-direction:column;gap:14px}.related a{display:flex;justify-content:space-between;gap:20px;text-decoration:none;color:var(--ink);font-family:Fraunces,serif;font-size:18px;padding:6px 0;border-bottom:1px solid var(--rule-soft)}.related a:hover{color:var(--accent)}.related a .arrow{font-family:Inter Tight,sans-serif;font-size:14px;color:var(--ink-soft);flex-shrink:0}.related a:hover .arrow{color:var(--accent)}.article-footer-nav{margin-top:64px;padding-top:24px;border-top:1px solid var(--rule);font-family:Inter Tight,sans-serif;font-size:13.5px;color:var(--ink-soft);display:flex;justify-content:space-between;gap:20px}.article-footer-nav a{color:var(--ink-soft);text-decoration:none}.article-footer-nav a:hover{color:var(--accent)}.archive-head{margin-bottom:48px}.archive-head h1{font-size:48px;font-weight:400;margin-bottom:10px}.archive-head p{font-family:Inter Tight,sans-serif;color:var(--ink-soft);font-size:15px;max-width:60ch}.archive-year{margin-bottom:48px}.archive-year .year-label{font-family:JetBrains Mono,monospace;font-size:13px;color:var(--ink-soft);padding-bottom:10px;margin-bottom:6px;border-bottom:1px solid var(--rule);display:flex;justify-content:space-between}.archive-row{display:grid;grid-template-columns:80px 1fr auto auto;gap:20px;padding:12px 0;border-bottom:1px solid var(--rule-soft);text-decoration:none;color:inherit;align-items:baseline;font-family:Inter Tight,sans-serif;font-size:14px}.archive-row:hover{background:var(--paper-2);margin:0 -12px;padding:12px}.archive-row .date{font-family:JetBrains Mono,monospace;font-size:12px;color:var(--ink-soft)}.archive-row .title{font-family:Fraunces,serif;font-size:18px;color:var(--ink)}.archive-row:hover .title{color:var(--accent)}.archive-row .minutes{font-family:JetBrains Mono,monospace;font-size:12px;color:var(--ink-soft)}.archive-row .tag-chips{display:flex;gap:6px;justify-self:end}.archive-row .tag-chips span{font-family:JetBrains Mono,monospace;font-size:10.5px;color:var(--ink-soft);padding:2px 6px;border:1px solid var(--rule-soft);border-radius:2px}@media(max-width:720px){.archive-row{grid-template-columns:60px 1fr}.archive-row .minutes,.archive-row .tag-chips{grid-column:2;justify-self:start}}.tag-head{margin-bottom:40px;padding-bottom:24px;border-bottom:1px solid var(--rule)}.tag-head .eyebrow{margin-bottom:10px;display:block}.tag-head h1{font-size:44px;font-weight:400;font-family:JetBrains Mono,monospace;letter-spacing:-.02em}.tag-head h1:before{content:"#";color:var(--accent);margin-right:4px}.tag-head p{font-family:Inter Tight,sans-serif;color:var(--ink-soft);font-size:14px;margin-top:12px}.about{max-width:56ch;margin:0 auto;padding-top:32px}.about h1{font-size:44px;font-weight:400;margin-bottom:32px}.about p{font-size:19px;line-height:1.7;color:var(--ink-2);margin-bottom:1.2em}.about .contact-row{margin-top:48px;padding-top:28px;border-top:1px solid var(--rule);display:grid;grid-template-columns:140px 1fr;gap:18px 28px;font-family:Inter Tight,sans-serif;font-size:14px}.about .contact-row dt{color:var(--ink-soft);text-transform:uppercase;letter-spacing:.1em;font-size:11.5px;padding-top:3px}.about .contact-row dd{margin:0;color:var(--ink)}.about .contact-row dd a{color:var(--accent);text-decoration:none;border-bottom:1px solid var(--accent)}.notfound{padding:120px 0;text-align:center}.notfound .code{font-family:JetBrains Mono,monospace;font-size:14px;color:var(--accent);letter-spacing:.12em;margin-bottom:16px}.notfound h1{font-size:56px;font-weight:400;margin-bottom:18px;font-style:italic}.notfound p{font-family:Inter Tight,sans-serif;font-size:16px;color:var(--ink-soft);max-width:44ch;margin:0 auto 32px}.notfound a{font-family:Inter Tight,sans-serif;font-size:14px;color:var(--ink);text-decoration:none;border-bottom:1px solid var(--ink);padding-bottom:2px}.notfound a:hover{color:var(--accent);border-bottom-color:var(--accent)}footer.site{max-width:980px;margin:120px auto 0;padding:32px 32px 40px;border-top:1px solid var(--rule);display:flex;justify-content:space-between;align-items:baseline;font-family:Inter Tight,sans-serif;font-size:13px;color:var(--ink-soft);flex-wrap:wrap;gap:20px}footer.site a{color:var(--ink-soft);text-decoration:none}footer.site a:hover{color:var(--accent)}footer.site .tagline{font-style:italic}footer.site .links{display:flex;gap:22px}.tweaks{position:fixed;bottom:20px;right:20px;background:var(--paper);border:1px solid var(--rule);border-radius:4px;padding:18px 20px;font-family:Inter Tight,sans-serif;font-size:13px;width:260px;z-index:200;box-shadow:0 8px 24px #00000014;display:none}.tweaks.open{display:block}.tweaks h5{font-family:Inter Tight,sans-serif;font-size:11px;text-transform:uppercase;letter-spacing:.1em;color:var(--ink-soft);font-weight:600;margin:0 0 14px;display:flex;justify-content:space-between}.tweak-row{display:flex;align-items:center;justify-content:space-between;padding:8px 0;border-top:1px solid var(--rule-soft)}.tweak-row:first-of-type{border-top:0}.tweak-row label{color:var(--ink-2);font-size:12.5px}.tweak-row select,.tweak-row input[type=range]{font-family:inherit;font-size:12px;background:var(--paper-2);color:var(--ink);border:1px solid var(--rule);padding:3px 6px;border-radius:2px}.tweak-row input[type=range]{width:110px;padding:0}.tweak-row .val{color:var(--ink-soft);font-family:JetBrains Mono,monospace;font-size:11px;min-width:32px;text-align:right}.tweaks-trigger{position:fixed;bottom:20px;right:20px;background:var(--paper);border:1px solid var(--rule);color:var(--ink-soft);font-family:Inter Tight,sans-serif;font-size:11px;text-transform:uppercase;letter-spacing:.08em;padding:8px 12px;border-radius:999px;cursor:pointer;z-index:199;transition:color .12s ease,border-color .12s ease}.tweaks-trigger:hover{color:var(--ink);border-color:var(--ink-soft)}.tweaks.open~.tweaks-trigger{display:none}.lang-switcher{display:inline-flex;align-items:center;background:var(--paper-2);border:1px solid var(--rule);border-radius:999px;padding:3px;gap:0;font-family:Inter Tight,sans-serif}.lang-switcher a{appearance:none;border:0;background:transparent;padding:6px 10px;font-size:11px;letter-spacing:.04em;text-transform:uppercase;color:var(--ink-soft);text-decoration:none;border-radius:999px;transition:color .16s ease}.lang-switcher a.on{color:var(--paper);background:var(--ink)}html[data-roast=dark] .lang-switcher a.on{background:var(--accent);color:#0e0a07}.lang-switcher a[lang=zh-Hant]{font-family:Noto Sans TC,PingFang TC,system-ui,sans-serif;text-transform:none;letter-spacing:0}html[lang^=zh] body{font-family:"Noto Serif TC","Source Han Serif TC",PingFang TC,Heiti TC,Iowan Old Style,Georgia,serif;font-variation-settings:normal}html[lang^=zh] h1,html[lang^=zh] h2,html[lang^=zh] h3,html[lang^=zh] h4,html[lang^=zh] .wordmark{font-family:"Noto Serif TC","Source Han Serif TC",PingFang TC,Heiti TC,serif;font-variation-settings:normal}html[lang^=zh] .ui,html[lang^=zh] header.site,html[lang^=zh] footer.site,html[lang^=zh] .meta,html[lang^=zh] .eyebrow,html[lang^=zh] .header-right,html[lang^=zh] .header-nav,html[lang^=zh] article.body h3,html[lang^=zh] .article-header .subtitle,html[lang^=zh] .card .summary,html[lang^=zh] .hero .subtitle,html[lang^=zh] .archive-row .title,html[lang^=zh] .related a,html[lang^=zh] .about p{font-family:Noto Sans TC,Source Han Sans TC,PingFang TC,Heiti TC,Inter Tight,system-ui,sans-serif}html[lang^=zh] .card h3,html[lang^=zh] .archive-row .title,html[lang^=zh] .related a{font-family:"Noto Serif TC","Source Han Serif TC",PingFang TC,serif}html[lang^=zh] article.body{word-break:keep-all;line-break:strict}html[lang^=zh] article.body[data-justify=on]{hyphens:manual}html[lang^=zh] article.body>p:first-of-type:first-letter{font-size:inherit;float:none;padding:0;color:inherit;font-family:inherit}html[lang^=zh] .tag-head h1{font-family:JetBrains Mono,ui-monospace,Noto Sans TC,monospace}
