:root{color-scheme:light;--bg:#fbfaf7;--fg:#17171b;--mut:#6a6a72;--card:#fff;--line:#e6e3dc;--acc:#c8102e;--link:#1d5fa8;--tw:#fff4e2;--twb:#e08a00;--callout:#f1f5fa;--calloutb:#3b72b0;--act:#fdf1ec;--actb:#c8102e;--chip:#f0eee8;--stack:#1d5fa8;--stackbg:#e8f0fa}
:root[data-theme=dark]{color-scheme:dark;--bg:#0f0f12;--fg:#ececf0;--mut:#9a9aa3;--card:#18181c;--line:#2a2a31;--acc:#ff4d5e;--link:#82b6ff;--tw:#2f220e;--twb:#f0a020;--callout:#152030;--calloutb:#6aa3e8;--act:#2b1416;--actb:#ff6b78;--chip:#24242a;--stack:#9cc6ff;--stackbg:#16263b}
@media(prefers-color-scheme:dark){:root:not([data-theme=light]){color-scheme:dark;--bg:#0f0f12;--fg:#ececf0;--mut:#9a9aa3;--card:#18181c;--line:#2a2a31;--acc:#ff4d5e;--link:#82b6ff;--tw:#2f220e;--twb:#f0a020;--callout:#152030;--calloutb:#6aa3e8;--act:#2b1416;--actb:#ff6b78;--chip:#24242a;--stack:#9cc6ff;--stackbg:#16263b}}
.mast{padding:calc(14px + env(safe-area-inset-top)) 0 14px;margin-bottom:22px;border-bottom:1px solid var(--line)}
.mast-row{display:flex;align-items:center;justify-content:space-between;gap:12px}
.wordmark{display:flex;align-items:center;gap:8px;text-decoration:none;color:var(--fg);overflow-wrap:normal}
.wm-mark{width:22px;height:22px;border-radius:50%;border:2px solid var(--acc);position:relative;flex:none}
.wm-mark::before{content:"";position:absolute;inset:4px;border-radius:50%;border:1.5px solid var(--acc);opacity:.55}
.wm-mark::after{content:"";position:absolute;left:50%;top:50%;width:9px;height:2px;background:var(--acc);transform-origin:0 50%;transform:rotate(-40deg)}
.wm-zh{font-family:"Songti TC","Noto Serif TC","Source Han Serif TC",serif;font-weight:900;font-size:21px;letter-spacing:.08em}
.wm-en{font-size:11px;font-weight:600;letter-spacing:.22em;text-transform:uppercase;color:var(--mut);padding-left:8px;border-left:1px solid var(--line)}
.mast-nav{display:flex;align-items:center;gap:14px;font-size:14px}
.mast-nav a{color:var(--fg);text-decoration:none;font-weight:600;overflow-wrap:normal}
.mast-nav a:hover{color:var(--acc)}
.theme-toggle{font:inherit;font-size:12px;display:inline-flex;align-items:center;gap:4px;height:32px;padding:0 10px;border-radius:999px;border:1px solid var(--line);background:var(--card);color:var(--fg);cursor:pointer}
.theme-toggle svg{display:none}.theme-toggle[data-mode=auto] .i-auto,.theme-toggle[data-mode=light] .i-light,.theme-toggle[data-mode=dark] .i-dark{display:block}
.ed-line{display:flex;align-items:baseline;gap:10px;margin-top:16px;flex-wrap:wrap}
.ed-date{font-size:26px;font-weight:800;letter-spacing:-.01em;font-variant-numeric:tabular-nums;line-height:1.1}
.ed-date small{font-size:13px;font-weight:600;color:var(--mut);margin-left:6px;letter-spacing:.05em}
.ed-half{font-size:13px;font-weight:800;color:var(--acc);letter-spacing:.15em;padding:0 0 1px;border-bottom:2px solid var(--acc)}
.ed-half.pm{color:var(--fg);border-color:var(--fg)}
.ed-line .copy.big{margin-left:auto;align-self:center}
.ed-title{font-size:14px;font-weight:500;color:var(--mut);margin:6px 0 0;line-height:1.5}
.page-title{font-size:26px;font-weight:800;margin:16px 0 0}
.kick-sm{font-size:12px;font-weight:700;color:var(--mut);letter-spacing:.12em}
.more{font-size:14px;font-weight:700;color:var(--acc);text-decoration:none}
.ed-line .more{margin-left:auto}
.ico{flex:none}
@media(max-width:480px){.wm-en{display:none}.mast-nav{gap:10px}.theme-label{display:none}.theme-toggle{width:34px;padding:0;justify-content:center}.ed-date{font-size:23px}}
/* tags */
a.tag{text-decoration:none;overflow-wrap:normal}
.tag.stack{background:var(--stackbg);color:var(--stack);box-shadow:inset 0 0 0 1px var(--stack)}
.tag span{opacity:.6;font-weight:600;margin-left:2px}
.tag-cloud{display:flex;flex-wrap:wrap;gap:8px}.tag-cloud.big .tag{font-size:15px;padding:4px 12px}
.hint{color:var(--mut);font-size:14px}
/* home */
.home{display:grid;gap:26px}
.hero{border-bottom:1px solid var(--line);padding-bottom:22px}
.hero a{color:var(--fg);text-decoration:none}
.hero-head{font-size:28px;line-height:1.3;font-weight:850;margin:2px 0 10px;letter-spacing:-.005em}
.hero a:hover .hero-head{color:var(--acc)}
.hero-lead{font-size:16.5px;color:var(--fg);opacity:.85;margin:0 0 10px}
.sl-list{list-style:none;margin:0;padding:0}
.sl-list.numbered{counter-reset:n}
.sl{padding:11px 0;border-bottom:1px solid var(--line)}
.sl-list.numbered .sl{counter-increment:n;display:grid;grid-template-columns:28px 1fr}
.sl-list.numbered .sl::before{content:counter(n,decimal-leading-zero);font-weight:800;color:var(--acc);font-size:14px;padding-top:3px;grid-row:span 2}
.sl-head{font-size:17px;font-weight:700;line-height:1.45;color:var(--fg);text-decoration:none;display:block}
.sl-head:hover{color:var(--acc)}
.sl-lead{margin:4px 0;color:var(--mut);font-size:14.5px;line-height:1.65}
.sl-meta{display:flex;flex-wrap:wrap;gap:6px;align-items:center;margin-top:6px}
.ed-mini{font-size:12px;font-weight:700;color:var(--mut);font-variant-numeric:tabular-nums;margin-right:4px}
.ed-mini b{margin-left:4px;color:var(--acc);font-weight:800}.ed-mini b.pm{color:var(--fg)}
.h-tw{background:var(--tw);border-radius:14px;padding:12px 16px;border:1px solid var(--twb)}
.h-tw .sl:last-child,.h-stack .sl:last-child{border-bottom:0}
.ed-list{list-style:none;margin:0 0 8px;padding:0}.ed-list li{border-bottom:1px solid var(--line)}
.ed-list a{display:flex;gap:10px;padding:9px 0;color:var(--fg);text-decoration:none;font-size:15px;align-items:baseline}
.empty{color:var(--mut);font-size:14px}
@media(min-width:1024px){
 .home{grid-template-columns:minmax(0,1.6fr) minmax(0,1fr);column-gap:40px;align-items:start}
 .hero{grid-column:1/-1;display:grid}.hero-head{font-size:38px}.hero-lead{font-size:18px;max-width:46em}
 .h-latest{grid-row:span 3}
}
*{box-sizing:border-box}html{-webkit-text-size-adjust:100%;scroll-behavior:smooth}
body{margin:0;background:var(--bg);color:var(--fg);font-family:-apple-system,BlinkMacSystemFont,"PingFang TC","Noto Sans TC","Microsoft JhengHei",sans-serif;font-size:17px;line-height:1.8;letter-spacing:.02em;padding:0 env(safe-area-inset-right) env(safe-area-inset-bottom) env(safe-area-inset-left)}
main{max-width:740px;margin:0 auto;padding:0 16px 56px}
a{color:var(--link);overflow-wrap:anywhere}
button.copy{font:inherit;font-size:13px;display:inline-flex;align-items:center;gap:4px;border:1px solid var(--line);background:var(--card);color:var(--fg);border-radius:999px;padding:4px 11px;cursor:pointer;-webkit-tap-highlight-color:transparent;min-height:32px}
button.copy.big{margin-left:auto;font-size:14px;padding:6px 14px;min-height:38px}
button.copy:active{transform:scale(.96)}
.intro{color:var(--mut);font-size:15px}.intro p{margin:.4em 0}
.kicker{display:inline-block;font-size:13px;font-weight:800;letter-spacing:.18em;color:var(--acc);border-top:3px solid var(--acc);padding-top:4px;margin:6px 0 10px;text-transform:uppercase}
.toc{background:var(--card);border:1px solid var(--line);border-radius:12px;padding:12px 16px;margin:16px 0 28px}
.toc ol{margin:0;padding-left:1.4em;font-size:15px;line-height:1.6}.toc li{margin:.35em 0}.toc a{color:var(--fg);text-decoration:none}
.sec-block{margin:30px 0}
.sec-block.security>.kicker{font-size:15px}
.story{background:var(--card);border:1px solid var(--line);border-radius:14px;padding:16px 18px 14px;margin:0 0 22px;scroll-margin-top:12px}
.story.tw{border:2px solid var(--twb);background:linear-gradient(var(--tw),var(--card) 140px)}
.story-top{display:flex;justify-content:space-between;align-items:center}
.num{font-size:13px;font-weight:800;color:var(--acc);font-variant-numeric:tabular-nums}
.num:not(:empty)::before{content:"No. "}
.headline{font-size:1.4em;line-height:1.4;font-weight:800;margin:.25em 0 .35em;letter-spacing:.01em}
.headline strong{font-weight:800}
.tags{display:flex;flex-wrap:wrap;gap:6px;margin:0 0 10px}
.tag{font-size:12px;font-weight:700;border-radius:4px;padding:1px 8px;background:var(--chip);color:var(--mut)}
.tw-tag{background:var(--twb);color:#fff}
.lead p{font-size:1.04em;font-weight:500;margin:.3em 0 .6em}
.body p{margin:.6em 0}.body ul{padding-left:1.2em}
.callout{border-left:4px solid var(--calloutb);background:var(--callout);border-radius:0 10px 10px 0;padding:8px 12px;margin:12px 0;font-size:.96em}
.callout.act{border-color:var(--actb);background:var(--act)}
.callout strong:first-child{display:block;font-size:13px;letter-spacing:.1em}
.callout p{margin:.2em 0}
.chips{display:flex;flex-wrap:wrap;gap:6px;align-items:center;border-top:1px dashed var(--line);margin-top:12px;padding-top:10px}
.chips-label{font-size:12px;color:var(--mut);margin-right:2px}
.chip{font-size:12.5px;text-decoration:none;background:var(--chip);border-radius:999px;padding:3px 10px;color:var(--link);overflow-wrap:normal;white-space:nowrap;max-width:100%;overflow:hidden;text-overflow:ellipsis}
.muted{font-size:14.5px;color:var(--mut);line-height:1.7}
.muted>.kicker{color:var(--mut);border-color:var(--mut)}
.muted .story{background:transparent;border:0;border-left:2px solid var(--line);border-radius:0;padding:4px 0 4px 12px;margin-bottom:10px}
.muted .headline{font-size:1.05em}
.muted ul{padding-left:1.2em}.muted li{margin:.3em 0}
.note p{margin:.5em 0}
.archive{list-style:none;padding:0;margin:0}
.arch-item{border-bottom:1px solid var(--line)}
.arch-item>a{display:block;padding:16px 0;color:var(--fg);text-decoration:none}
.arch-meta{display:flex;gap:10px;align-items:center}
.arch-meta .ed-date{font-size:18px}
.arch-title{font-size:19px;font-weight:800;line-height:1.45;margin:6px 0}
.arch-heads{margin:0;padding-left:1.2em;color:var(--mut);font-size:14.5px;line-height:1.6}
#toast{position:fixed;left:50%;bottom:calc(24px + env(safe-area-inset-bottom));transform:translate(-50%,20px);opacity:0;pointer-events:none;background:var(--fg);color:var(--bg);padding:10px 18px;border-radius:999px;font-size:15px;transition:.2s;z-index:9;max-width:92vw}
#toast.show{opacity:1;transform:translate(-50%,0)}
#toast.manual{pointer-events:auto;border-radius:12px}
#toast input{display:block;width:80vw;max-width:520px;margin-top:6px;font-size:16px;padding:6px;border-radius:6px;border:0}
footer{color:var(--mut);font-size:13px;margin-top:40px;text-align:center}
@media(min-width:700px){.headline{font-size:1.55em}}
.layout{display:block}
.toc{position:fixed;left:0;right:0;bottom:0;z-index:20;max-height:72vh;overflow:auto;background:var(--card);border-radius:18px 18px 0 0;box-shadow:0 -8px 30px rgba(0,0,0,.25);padding:14px 18px calc(18px + env(safe-area-inset-bottom));transform:translateY(105%);transition:transform .25s;visibility:hidden;-webkit-overflow-scrolling:touch;overscroll-behavior:contain}
body.toc-open .toc{transform:none;visibility:visible}
.toc-head{display:flex;justify-content:space-between;align-items:center}
.toc-close{font:inherit;font-size:18px;border:0;background:var(--chip);color:var(--fg);width:36px;height:36px;border-radius:50%;cursor:pointer}
.toc-group{margin:6px 0 12px}
.toc-sec{font-size:12px;font-weight:800;color:var(--mut);letter-spacing:.12em;margin-bottom:2px}
.toc ol{margin:0;padding-left:1.3em;font-size:15px;line-height:1.55}.toc li{margin:.4em 0}
.toc a{color:var(--fg);text-decoration:none;display:block}.toc a.cur{color:var(--acc);font-weight:700}
.toc-backdrop{position:fixed;inset:0;background:rgba(0,0,0,.4);z-index:19}
.toc-fab{position:fixed;right:calc(16px + env(safe-area-inset-right));bottom:calc(18px + env(safe-area-inset-bottom));z-index:18;width:54px;height:54px;border-radius:50%;border:0;background:var(--acc);color:#fff;box-shadow:0 4px 16px rgba(0,0,0,.3);display:flex;align-items:center;justify-content:center;cursor:pointer;-webkit-tap-highlight-color:transparent}
body.toc-open .toc-fab{display:none}
main{padding-bottom:110px}
@media(min-width:1024px){
  main{max-width:1160px}
  .layout{display:grid;grid-template-columns:minmax(0,1fr) 300px;gap:36px;align-items:start}
  .toc{position:sticky;top:16px;transform:none;visibility:visible;max-height:calc(100vh - 32px);border-radius:14px;box-shadow:none;border:1px solid var(--line);padding:14px 16px;z-index:1}
  .toc-close,.toc-fab,.toc-backdrop{display:none!important}
  main{padding-bottom:56px}
}
.tw-note{font-size:14.5px;margin:0 0 6px}
