/* 決賽簡報網站樣式。所有數值來自 design-brief.md，之後的樣式只准引用這裡的 token。 */
:root {
  /* 色票：象牙紙為底、深綠為重點 */
  --paper: #F4EFE4;
  --paper-2: #EBE4D4;        /* 凹陷區、表格底（與紙面對比約 1.15） */
  --card: #FBF8F1;
  --line: #CFC6B0;           /* 卡片邊（裝飾邊框，約 1.5:1） */
  --forest: #17362C;
  --forest-2: #224A3C;       /* 深綠面板上的次一階 */
  --accent: #17362C;         /* 深綠當「文字／線條」用；暗場改淺綠，避免和底色融在一起 */
  --ink: #14281C;
  --ink-2: #4B6156;          /* 次要字，紙面上約 5.9:1 */
  --grid: #8FA89A;           /* 格線與刻度，不承載文字 */
  --gold: #CDA963;           /* 只在深綠底當線或字；紙面上只當面積 */
  --gold-soft: #E6D3A3;      /* 80% 區間帶 */
  --gold-mid: #D9BE7C;       /* 50% 區間帶 */
  --gold-deep: #8A6A22;      /* 紙面上的預測中線、強調字 */
  --alert: #A63A2B;          /* 語意色：只用在缺蛋風險 */
  --night: #0F241D;          /* 第 1 章冷開場的底（熄燈） */
  --on-forest: #F4EFE4;
  --on-forest-2: #C9D6CD;
  --shadow: 0 1px 2px 0 rgba(15, 36, 29, .30), 0 1px 3px 1px rgba(15, 36, 29, .15);

  /* 字級（設計座標 1920×1080） */
  --fs-1: 20px;  /* 刻度、標籤、狀態 */
  --fs-2: 24px;  /* 圖說、出處、標題牆 */
  --fs-3: 28px;  /* 次要內文 */
  --fs-4: 34px;  /* 內文 */
  --fs-5: 44px;  /* 小標 */
  --fs-6: 64px;  /* 章節標 */
  --fs-7: 96px;  /* 關鍵字 */
  --fs-8: 112px; /* 大數字、大標 */
  --fs-9: 156px; /* 問題句（全站唯一 h1） */

  /* 間距 */
  --s1: 8px; --s2: 16px; --s3: 24px; --s4: 32px; --s5: 48px; --s6: 64px; --s7: 96px; --s8: 120px;

  --font-zh: "Microsoft JhengHei", "Noto Sans TC", "PingFang TC", sans-serif;
  --font-num: Bahnschrift, "Segoe UI", Arial, sans-serif;
  --letterbox: #E3DBC9;
  /* 圖 4 三條線：實際、模型通過配色檢查（亮度帶、彩度、色弱分辨、對比）；照抄是參考基準，用中性灰＋虛線 */
  --s-actual: #18764F;
  --s-model: #A8781A;
  --s-base: #6F6A60;
}

/* 暗場：現場燈光不適合時按 D 切換。不是反轉，是換階。 */
:root[data-theme="dark"] {
  --paper: #0F241D;
  --paper-2: #17362C;
  --card: #1B3F33;
  --line: rgba(244, 239, 228, .14);
  --forest: #224A3C;
  --forest-2: #2B5A49;
  --accent: #9CC9B4;
  --ink: #F4EFE4;
  --ink-2: #A9BDB1;
  --grid: #3E5A4D;
  --gold-soft: #4A4527;
  --gold-mid: #6B5E2E;
  --gold-deep: #E0C489;
  --alert: #E07A5F;
  --shadow: inset 0 1px 0 rgba(255, 255, 255, .10);
  --letterbox: #081812;
  --s-actual: #3A9670;
  --s-model: #B3801C;
  --s-base: #A39E92;
}

* { box-sizing: border-box; }
html, body { margin: 0; height: 100%; background: var(--letterbox); overflow: hidden; }
body { font-family: var(--font-zh); color: var(--ink); -webkit-font-smoothing: antialiased; }
:lang(zh-Hant) { line-break: strict; word-break: normal; overflow-wrap: anywhere; }

/* 舞台：固定 1920×1080，整體等比縮放，四周留白 */
/* 10/27 修正：舊寫法用 grid 置中，視窗小於 1920×1080 時舞台先靠左上再縮放，整片偏到右下。
   改成舞台左上角放在視窗中心，再由 fit() 用 translate(-50%,-50%) scale(s) 把舞台中心對準視窗中心 */
#viewport { position: fixed; inset: 0; overflow: hidden; }
#stage { position: absolute; left: 50%; top: 50%; width: 1920px; height: 1080px; transform-origin: center center; transform: translate(-50%, -50%); background: var(--paper); overflow: hidden; }

.slide { position: absolute; inset: 0; padding: var(--s8); opacity: 0; visibility: hidden; transition: opacity .3s ease, visibility 0s linear .3s; background: var(--paper); }
.slide.on { opacity: 1; visibility: visible; transition: opacity .3s ease; }
.slide.forest { background: var(--forest); color: var(--on-forest); }
.slide.cinema { background: var(--night); color: var(--on-forest); }

/* 每頁共用：章節標籤、章節刻度環、頁碼、出處 */
.tag { position: absolute; left: var(--s8); top: 56px; font-size: var(--fs-1); font-weight: 700; letter-spacing: 0; color: var(--ink-2); line-height: 1.5; }
.forest .tag, .cinema .tag { color: var(--on-forest-2); }
.tag b { font-family: var(--font-num); color: var(--accent); margin-right: var(--s2); font-weight: 600; }
.forest .tag b, .cinema .tag b { color: var(--gold); }
.ring { position: absolute; right: var(--s8); top: 40px; width: 96px; height: 96px; }
.pageno { position: absolute; right: var(--s8); bottom: 48px; font-family: var(--font-num); font-size: var(--fs-2); color: var(--ink-2); font-variant-numeric: tabular-nums; line-height: 1.5; }
.forest .pageno, .cinema .pageno { color: var(--on-forest-2); }
.src { position: absolute; left: var(--s8); bottom: 48px; max-width: 36em; font-size: var(--fs-2); line-height: 1.6; color: var(--ink-2); text-wrap: balance; }   /* 出處換行時兩行等長，不留單獨一個字 */
.forest .src, .cinema .src { color: var(--on-forest-2); }

h1, h2, h3, p { margin: 0; }
.h1 { font-size: var(--fs-8); font-weight: 700; line-height: 1.15; letter-spacing: 0; }
.h2 { font-size: var(--fs-6); font-weight: 700; line-height: 1.25; }
.body { font-size: var(--fs-3); line-height: 1.6; }
.cap { font-size: var(--fs-2); line-height: 1.6; color: var(--ink-2); }
.num { font-family: var(--font-num); font-variant-numeric: tabular-nums; }
.main { position: absolute; left: var(--s8); right: var(--s8); top: 140px; bottom: 120px; }

/* 狀態標籤：事情真的發生後在 content.js 改成 done */
.st { display: inline-block; font-size: var(--fs-1); font-weight: 700; line-height: 1.5; padding: 6px 12px; border-radius: 4px; vertical-align: middle; white-space: nowrap; }
.st.done { background: var(--accent); color: var(--paper); }
.st.ongoing { background: var(--gold); color: var(--ink); }
:root[data-theme="dark"] .st.ongoing { color: #14281C; }
.st.pending, .st.planned { background: transparent; color: var(--gold-deep); box-shadow: inset 0 0 0 2px var(--gold-deep); }
.forest .st.pending { color: var(--gold); box-shadow: inset 0 0 0 2px var(--gold); }

/* 1：熄燈後的新聞冷開場。data-co＝standby（全黑待機）／play（影片滿版有聲）／end（影片淡出、標題浮出） */
.co { position: absolute; inset: 0; cursor: pointer; }
.co-video { position: absolute; inset: 0; background: var(--night); opacity: 0; pointer-events: none; transition: opacity .6s ease; }
.co-video iframe { position: absolute; inset: 0; width: 1920px; height: 1080px; border: 0; display: block; }
.slide[data-co="play"] .co-video { opacity: 1; transition: none; }   /* 熄燈到爆：不淡入 */
.co-standby { position: absolute; inset: 0; display: grid; place-items: center; }
.slide[data-co="play"] .co-standby, .slide[data-co="end"] .co-standby { opacity: 0; }
.co-dateline { font-size: var(--fs-3); font-weight: 700; line-height: 1.4; letter-spacing: .06em; color: var(--gold); }
.co-ready { position: absolute; right: var(--s8); bottom: 48px; display: flex; align-items: center; gap: var(--s1); font-size: var(--fs-1); line-height: 1.5; color: var(--on-forest-2); }
.co-ready .dot { width: 12px; height: 12px; border-radius: 50%; background: var(--grid); }
.co-ready.ok .dot { background: var(--gold); }
.co-end { position: absolute; left: var(--s8); right: var(--s5); bottom: var(--s8); }
.co-end > * { opacity: 0; transform: translateY(16px); }
.slide[data-co="end"] .co-end > * { opacity: 1; transform: none; transition: opacity .4s ease, transform .4s ease; }
/* 影片淡出 0.6 秒＋全黑 0.4 秒之後，電頭、標題、字幕、出處依序浮出 */
.slide[data-co="end"] .co-end > :nth-child(1) { transition-delay: 1s; }
.slide[data-co="end"] .co-end > :nth-child(2) { transition-delay: 1.15s; }
.slide[data-co="end"] .co-end > :nth-child(3) { transition-delay: 1.3s; }
.slide[data-co="end"] .co-end > :nth-child(4) { transition-delay: 1.45s; }
.co-head { margin: var(--s2) 0 var(--s3); font-size: var(--fs-8); font-weight: 700; line-height: 1.15; color: var(--on-forest); }
.co-cap { max-width: 40em; font-size: var(--fs-3); line-height: 1.6; color: var(--on-forest); text-wrap: balance; }   /* 一行放得下就一行，放不下兩行等長，避免「衝／突。」這種斷法 */
.co-src { margin-top: var(--s2); font-size: var(--fs-1); line-height: 1.5; color: var(--on-forest-2); }
/* 待機與播放時藏起章節標籤、刻度環、頁碼，標題出現時一起淡入 */
.slide[data-co] > .tag, .slide[data-co] > .ring, .slide[data-co] > .pageno { transition: opacity .4s ease 1s; }
.slide[data-co="standby"] > .tag, .slide[data-co="standby"] > .ring, .slide[data-co="standby"] > .pageno,
.slide[data-co="play"] > .tag, .slide[data-co="play"] > .ring, .slide[data-co="play"] > .pageno { opacity: 0; transition: none; }

/* 2-1：新聞標題牆 */
.wall { position: absolute; inset: 0; padding: 20px; display: grid; grid-template-columns: repeat(8, 1fr); grid-template-rows: repeat(6, 1fr); gap: 10px; background: var(--paper-2); }
.wall .hl { background: var(--card); box-shadow: var(--shadow); padding: 12px 14px; overflow: hidden; display: flex; flex-direction: column; justify-content: space-between; opacity: 0; transform: translateY(6px); transition: opacity .25s ease, transform .25s ease; min-width: 0; }
.wall .hl.in { opacity: 1; transform: none; }
.wall .hl .t { font-size: var(--fs-1); font-weight: 700; line-height: 1.5; color: var(--ink); }
.wall .hl.big { grid-column: span 2; }
.wall .hl.big .t { font-size: var(--fs-3); line-height: 1.5; }
.wall .hl .m { font-size: var(--fs-1); line-height: 1.5; color: var(--ink-2); margin-top: 6px; font-family: var(--font-num); }
.wall .hl.c-politic { border-top: 6px solid var(--alert); }
.wall .hl.c-import { border-top: 6px solid var(--gold-deep); }
.wall .hl.c-short, .wall .hl.c-price { border-top: 6px solid var(--accent); }
.wall .hl.c-trade { border-top: 6px solid var(--ink-2); }
.wall-band { position: absolute; left: 0; right: 0; top: 420px; height: 240px; background: var(--forest); color: var(--on-forest); display: grid; place-content: center; text-align: center; opacity: 0; transition: opacity .4s ease; box-shadow: 0 8px 24px rgba(15,36,29,.35); }
.wall-band.in { opacity: 1; }
.wall-band .h1 { color: var(--on-forest); }
.wall-band .cap { color: var(--on-forest-2); margin-top: var(--s2); }

/* 2-2：照片＋三個數字 */
.photo { position: absolute; left: 0; top: 0; bottom: 0; width: 1040px; background: #222 center / cover no-repeat; }
.photo-cap { position: absolute; left: var(--s4); bottom: var(--s4); max-width: 36em; font-size: var(--fs-1); line-height: 1.5; color: #F4EFE4; background: rgba(15,36,29,.72); padding: 8px 14px; }
.stats { position: absolute; left: 1120px; right: var(--s8); top: 150px; display: grid; gap: var(--s5); }
.stat .v { font-family: var(--font-num); font-size: var(--fs-8); font-weight: 600; line-height: 1; color: var(--accent); font-variant-numeric: tabular-nums; letter-spacing: -.01em; }
.stat .u { font-size: var(--fs-4); font-weight: 700; margin-left: var(--s2); color: var(--accent); line-height: 1.2; }
.stat .l { font-size: var(--fs-3); line-height: 1.5; margin-top: var(--s1); }
.stat .s { font-size: var(--fs-1); line-height: 1.5; color: var(--ink-2); margin-top: 4px; }
.crisis-head { position: absolute; left: 1120px; right: var(--s8); top: 70px; font-size: var(--fs-5); font-weight: 700; line-height: 1.2; }

/* 2-3：三級應變階梯 */
.ladder { position: absolute; left: var(--s8); top: 330px; width: 1080px; height: 520px; }
.ladder .stepbar { position: absolute; width: 780px; height: 120px; background: var(--forest); color: var(--on-forest); display: flex; align-items: center; gap: var(--s4); padding: 0 var(--s4); box-shadow: var(--shadow); }
.ladder .stepbar .lv { font-size: var(--fs-3); font-weight: 700; color: var(--gold); white-space: nowrap; line-height: 1.5; }
.ladder .stepbar .tr { font-family: var(--font-num); font-size: var(--fs-5); font-weight: 600; white-space: nowrap; line-height: 1.2; }
.ladder .stepbar .ac { font-size: var(--fs-2); line-height: 1.5; color: var(--on-forest-2); flex: 1; min-width: 0; }
.ladder .gap { position: absolute; left: 0; width: 230px; top: 0; bottom: 0; border: 3px dashed var(--gold-deep); display: grid; place-content: center; text-align: center; padding: var(--s3); color: var(--gold-deep); font-size: var(--fs-3); font-weight: 700; line-height: 1.5; }
.stake-side { position: absolute; left: 1260px; right: var(--s8); top: 330px; display: grid; gap: var(--s4); }
.quote { border-left: 6px solid var(--accent); padding: var(--s1) 0 var(--s1) var(--s3); }
.quote .q { font-size: var(--fs-4); font-weight: 700; line-height: 1.2; }
.quote .qs { font-size: var(--fs-1); color: var(--ink-2); margin-top: var(--s1); line-height: 1.5; }
.redlight { font-size: var(--fs-3); font-weight: 700; color: var(--alert); line-height: 1.5; }
.redlight b { font-size: var(--fs-4); line-height: 1.2; font-weight: 700; }
.takeaway { position: absolute; left: var(--s8); right: var(--s8); top: 884px; font-size: var(--fs-5); font-weight: 700; color: var(--accent); line-height: 1.2; }

/* 3-1：三個原因 */
.trio { position: absolute; left: var(--s8); right: var(--s8); top: 340px; display: grid; grid-template-columns: repeat(3, 1fr); gap: var(--s6); }
.trio .k { font-size: var(--fs-7); font-weight: 700; line-height: 1.1; color: var(--accent); padding-bottom: var(--s3); border-bottom: 3px solid var(--accent); margin-bottom: var(--s4); }
.trio .v { font-size: var(--fs-3); line-height: 1.6; }

/* 3-2：資料清單時間條 */
.inv-head { position: absolute; left: var(--s8); top: 150px; display: flex; gap: var(--s7); align-items: baseline; }
.inv-head .n { font-family: var(--font-num); font-size: var(--fs-8); font-weight: 600; line-height: 1; color: var(--accent); }
.inv-head .u { font-size: var(--fs-3); font-weight: 700; margin-left: var(--s1); line-height: 1.5; }
.inv-chart { position: absolute; left: var(--s8); right: var(--s8); top: 330px; height: 620px; }

/* 3-3：交互作用 */
.inter { position: absolute; left: var(--s8); right: var(--s8); top: 300px; display: grid; grid-template-columns: repeat(4, 1fr); gap: var(--s4); align-items: end; }
.inter .lvl { background: var(--card); box-shadow: var(--shadow); padding: var(--s4); display: flex; flex-direction: column; gap: var(--s3); }
.inter .dots { display: flex; gap: 10px; }
.inter .dots i { width: 28px; height: 28px; border-radius: 50%; background: var(--accent); display: block; }
.inter .lvl:nth-child(n+2) .dots i:nth-child(n+2) { background: var(--gold); }
.inter .n { font-size: var(--fs-5); font-weight: 700; line-height: 1.25; }
.inter .ex { font-size: var(--fs-3); line-height: 1.6; }

/* 3-4：相關網路 */
.net { position: absolute; left: var(--s8); top: 150px; width: 1060px; height: 820px; }
.net-side { position: absolute; left: 1260px; right: var(--s8); top: 200px; display: grid; gap: var(--s4); }
.lagread { font-family: var(--font-num); font-size: var(--fs-8); font-weight: 600; line-height: 1; color: var(--accent); }
.lagread small { font-family: var(--font-zh); font-size: var(--fs-4); font-weight: 700; margin-left: var(--s2); line-height: 1.2; }

/* 4-1：問題句（反轉屏） */
.q-title { position: absolute; left: var(--s8); right: var(--s8); top: 380px; font-size: var(--fs-9); font-weight: 700; line-height: 1.15; color: var(--gold); }
.q-sub { position: absolute; left: var(--s8); top: 600px; font-size: var(--fs-5); line-height: 1.2; color: var(--on-forest); }

/* 4-2：天時地利人和 */
.tsr { position: absolute; left: var(--s8); right: var(--s8); top: 300px; display: grid; grid-template-columns: repeat(3, 1fr); gap: var(--s6); }
.tsr .k { font-size: var(--fs-8); font-weight: 700; line-height: 1.1; color: var(--accent); margin-bottom: var(--s4); }
.tsr .v { font-size: var(--fs-3); line-height: 1.6; }

/* 4-3：方法流程 */
.flow { position: absolute; left: var(--s8); right: var(--s8); top: 320px; display: grid; grid-template-columns: repeat(4, 1fr); gap: var(--s6); }
.flow .box { position: relative; background: var(--card); box-shadow: var(--shadow); padding: var(--s4); min-height: 300px; }
.flow .box:nth-child(3) { background: var(--forest); color: var(--on-forest); }
.flow .box:nth-child(3) .bv { color: var(--on-forest-2); }
.flow .box + .box::before { content: ""; position: absolute; left: -52px; top: 50%; width: 40px; height: 3px; background: var(--accent); }
.flow .box + .box::after { content: ""; position: absolute; left: -20px; top: calc(50% - 8px); border-left: 14px solid var(--accent); border-top: 9px solid transparent; border-bottom: 9px solid transparent; }
.flow .bk { font-size: var(--fs-5); font-weight: 700; line-height: 1.2; margin-bottom: var(--s3); }
.flow .bv { font-size: var(--fs-3); line-height: 1.6; color: var(--ink-2); }
.origin { position: absolute; left: var(--s8); right: var(--s8); top: 740px; font-size: var(--fs-4); line-height: 1.4; display: grid; justify-items: start; gap: var(--s1); }   /* 句子較長會換行：出處放在句子下方 */

/* 4-4：扇形圖（招牌） */
.fan { position: absolute; left: var(--s8); right: var(--s8); top: 140px; height: 700px; }
.fan-notes { position: absolute; left: var(--s8); right: var(--s8); top: 856px; display: grid; gap: var(--s1); font-size: var(--fs-1); line-height: 1.5; color: var(--ink-2); }

/* 5-1：甘特圖 */
.gantt { position: absolute; left: var(--s8); right: var(--s8); top: 170px; height: 800px; }

/* 5-2：成果 */
.res { position: absolute; left: var(--s8); right: var(--s8); top: 300px; display: grid; grid-template-columns: repeat(3, 1fr); gap: var(--s4); }
.res .c { background: var(--card); box-shadow: var(--shadow); padding: var(--s4); min-height: 250px; display: flex; flex-direction: column; gap: var(--s2); }
.res .ck { font-size: var(--fs-5); font-weight: 700; line-height: 1.2; display: flex; justify-content: space-between; gap: var(--s2); align-items: center; }
.res .cv { font-size: var(--fs-3); line-height: 1.6; }
.res .cd { font-family: var(--font-num); font-size: var(--fs-1); color: var(--ink-2); margin-top: auto; line-height: 1.5; }

/* 6：上下兩端 */
.ends-row { position: absolute; left: var(--s8); right: var(--s8); display: grid; grid-template-columns: 340px 1fr; gap: var(--s5); align-items: start; }
.ends-row.top { top: 250px; }
.ends-row.bot { top: 650px; }   /* 左欄多一行去信說明，橫條與下排往下移 */
.ends-who { font-size: var(--fs-6); font-weight: 700; line-height: 1.2; color: var(--accent); }
.ends-who small { display: block; font-size: var(--fs-3); color: var(--ink-2); margin-top: var(--s1); font-weight: 700; line-height: 1.5; }
.ends-who > div { font-size: var(--fs-1); line-height: 1.5; }   /* 合作標籤與說明不要沿用大標題的行高 */
.ends-note { margin-top: var(--s1); font-size: var(--fs-1); font-weight: 400; line-height: 1.5; color: var(--ink-2); }
.levers { display: grid; grid-template-columns: repeat(3, 1fr); gap: var(--s2) var(--s4); }
.lever { border-top: 3px solid var(--accent); padding-top: var(--s2); }
.lever .lk { font-size: var(--fs-3); font-weight: 700; line-height: 1.5; display: flex; gap: var(--s2); align-items: center; flex-wrap: wrap; }
.lever .lv { font-size: var(--fs-1); line-height: 1.5; color: var(--ink-2); margin-top: 4px; }
.core { position: absolute; left: var(--s8); right: var(--s8); top: 510px; height: 100px; background: var(--forest); color: var(--on-forest); display: flex; align-items: center; justify-content: center; gap: var(--s4); font-size: var(--fs-4); font-weight: 700; box-shadow: var(--shadow); line-height: 1.2; }
.core .num { color: var(--gold); }

/* 7：豬肉 */
.pork-side { position: absolute; left: var(--s8); top: 300px; width: 640px; display: grid; gap: var(--s4); }
.pork-side li { font-size: var(--fs-3); line-height: 1.6; }
.pork-side ul { margin: 0; padding-left: 1.1em; display: grid; gap: var(--s2); }
.pork-chart { position: absolute; left: 860px; right: var(--s8); top: 260px; height: 640px; }
.acc { font-size: var(--fs-3); font-weight: 700; display: flex; flex-direction: column; align-items: flex-start; gap: var(--s1); line-height: 1.5; }   /* 標籤在上、數字在下：成績句很長，橫排會把標籤擠成一欄 */

/* 8：外交 */
.dip { position: absolute; left: var(--s8); right: var(--s8); top: 320px; display: grid; gap: var(--s4); }
.dip .p { display: grid; grid-template-columns: 520px 1fr 160px; gap: var(--s5); align-items: center; padding: var(--s3) 0; border-bottom: 2px solid var(--line); }
.dip .pc { font-size: var(--fs-6); font-weight: 700; line-height: 1.2; color: var(--accent); }
.dip .pw { font-size: var(--fs-3); line-height: 1.6; }

/* 9：收尾 */
.why { position: absolute; left: var(--s8); top: 300px; width: 760px; display: grid; gap: var(--s4); }
.why p { font-size: var(--fs-3); line-height: 1.6; font-weight: 700; padding-left: var(--s3); border-left: 6px solid var(--accent); }
.prog { position: absolute; left: 1000px; right: var(--s8); top: 300px; display: grid; gap: var(--s3); }
.prog .r { display: grid; grid-template-columns: 120px 1fr 130px; gap: var(--s3); align-items: center; background: var(--card); box-shadow: var(--shadow); padding: var(--s3); }
.prog .rk { font-size: var(--fs-5); font-weight: 700; color: var(--accent); line-height: 1.2; }
.prog .rd { font-size: var(--fs-3); line-height: 1.5; }
.prog .rn { font-size: var(--fs-1); line-height: 1.5; color: var(--ink-2); }
.final-ring { position: absolute; left: 50%; top: 150px; width: 520px; height: 520px; transform: translateX(-50%); }
.final-title { position: absolute; left: 0; right: 0; top: 720px; text-align: center; font-size: var(--fs-8); font-weight: 700; line-height: 1.15; color: var(--accent); }
.final-team { position: absolute; left: 0; right: 0; top: 880px; text-align: center; font-size: var(--fs-4); color: var(--ink-2); font-family: var(--font-num); letter-spacing: .08em; line-height: 1.2; }

/* 圖表共用 */
svg text { font-family: var(--font-num); }
svg .zh { font-family: var(--font-zh); }

/* 檢視全部（?all=1）：所有投影片直排，供校稿與整頁截圖 */
body.all { overflow: auto; }
body.all #viewport { position: static; display: block; }
body.all #stage { position: relative; left: auto; top: auto; transform: none; height: auto; background: transparent; overflow: visible; }   /* 直排校稿不置中、不位移 */
body.all .slide { position: relative; opacity: 1; visibility: visible; width: 1920px; height: 1080px; margin-bottom: 24px; transition: none; }

/* 焦點：鍵盤操作時看得見 */
:focus-visible { outline: 3px solid var(--gold-deep); outline-offset: 3px; }

@media (prefers-reduced-motion: reduce) {
  .slide, .slide.on, .wall .hl, .wall-band { transition: none !important; }
  .wall .hl { opacity: 1; transform: none; }
  .co-end > * { transform: none !important; }
}

/* SVG 文字的行高對畫面沒有影響，統一宣告以符合審計 */
svg text { line-height: 1.5; }
svg text.big, svg .big { line-height: 1.2; }
.tag { line-height: 1.5; }
.tag b { line-height: 1.5; }

.wall-band .cap { max-width: 36em; margin-inline: auto; }

/* 標題牆：標題最多三行（大卡兩行），日期與媒體單行，避免卡片底部被切 */
.wall .hl .t { display: -webkit-box; -webkit-line-clamp: 3; -webkit-box-orient: vertical; overflow: hidden; }
.wall .hl.big .t { -webkit-line-clamp: 2; }
.wall .hl .m { white-space: nowrap; overflow: hidden; text-overflow: ellipsis; }
