/* === 品牌 token（同 public/index.html；權威：school/DESIGN.md + brand-colors）=== */
:root {
  --sun: #FCC80E; --sun-hover: #F0B516; --sun-soft: #FFF6D5;
  --ink: #14314C;
  --bg: #FFFFFF;                  /* 頁面純白（align school 白底；軟化層次的最外層） */
  --cell-bg: #FAFAFA;             /* 月曆格微灰，浮在白 pane 上——柔化密集網格的硬線（school Airbnb soft DNA） */
  --cell-line: #F0F0F0;           /* 月曆格淡框（比主結構 --line 更輕，弱化格線存在感） */
  --line: #E5E5E5;                /* 主結構線（pane/topbar/input；school neutral-200） */
  --text-secondary: #737373;      /* 次要文字（school neutral-500，≥4.5:1） */
  --text-on-tint: #525252;        /* 淡色 pill / chip 上的次要文字（warm neutral-600） */
  --disabled: #A3A3A3;            /* 僅 disabled/placeholder */
  --danger: #EB615A;
  --ok: #1FA868; --ok-soft: #E1F7EB;   /* 品牌綠：green-deep / green-soft（school tailwind config） */
}
* { box-sizing: border-box; }
body { margin: 0; font-family: 'Funnel Sans', system-ui, sans-serif; color: var(--ink); background: var(--bg); }
h1, h2, h3 { font-family: 'Funnel Display', sans-serif; }
.mono { font-family: 'JetBrains Mono', monospace; }
button { font-family: inherit; cursor: pointer; }
/* 尺度分工：toolbar 按鈕 40px；表單 input／登入 CTA 48px（school 觸控尺寸）——刻意兩級 */
.btn { border: none; border-radius: 8px; height: 40px; padding: 0 16px; font-size: 14px; font-weight: 500; display: inline-flex; align-items: center; justify-content: center; gap: 6px; }
.btn-primary { background: var(--sun); color: var(--ink); }
.btn-primary:hover { background: var(--sun-hover); }
.btn-primary:disabled { opacity: .4; cursor: not-allowed; }
.btn-ghost { background: transparent; color: var(--text-secondary); border: 1px solid var(--line); }
.btn-ghost:hover { color: var(--ink); border-color: var(--ink); }  /* school 次要鈕：預設 mute、hover 文字＋邊框同步轉 ink */
.btn-danger { background: transparent; color: var(--danger); border: 1px solid var(--danger); }

/* === 殼（topbar：logo＋標題＋步驟指示器＋動作鈕）=== */
.topbar { display: grid; grid-template-columns: 1fr auto 1fr; align-items: center; gap: 14px; padding: 10px 20px; background: #fff; border-bottom: 1px solid var(--line); }
.topbar img.logo { height: 30px; }
.topbar-left { display: flex; align-items: center; gap: 14px; min-width: 0; }
.topbar h1 { font-size: 17px; margin: 0; min-width: 0; white-space: nowrap; overflow: hidden; text-overflow: ellipsis; }
.topbar-actions { display: flex; align-items: center; gap: 14px; justify-self: end; }
.topbar-muted { color: var(--text-secondary); font-weight: 500; font-size: 13px; margin-left: 6px; }
.steps { display: flex; gap: 8px; align-items: center; font-size: 13px; color: var(--text-secondary); }
.steps .step { display: flex; align-items: center; gap: 6px; }
.step-no { width: 20px; height: 20px; border-radius: 50%; border: 1.5px solid var(--line); display: grid; place-items: center; font-size: 11.5px; font-family: 'JetBrains Mono', monospace; background: #fff; flex: none; }
.steps .step.active { color: var(--ink); font-weight: 600; }
.steps .step.active .step-no { background: var(--sun); border-color: var(--sun); }
.steps .step.done { color: var(--ok); }
.steps .step.done .step-no { border-color: var(--ok); color: var(--ok); background: var(--ok-soft); }
.step-line { width: 14px; height: 1.5px; background: var(--line); flex: none; }
/* 原檔對照 toggle：與 topbar 其餘鈕同高 40px、同 school 次要鈕 hover；icon 用 inline SVG（非 emoji） */
.btn-src { height: 40px; padding: 0 14px; border: 1px solid var(--line); background: #fff; border-radius: 8px; font-size: 14px; font-weight: 500; color: var(--text-secondary); display: inline-flex; align-items: center; gap: 6px; }
.btn-src:hover { color: var(--ink); border-color: var(--ink); }
.btn-src[aria-pressed="true"] { background: var(--sun-soft); border-color: var(--sun); color: var(--ink); }
.btn-cta { padding: 0 20px; }  /* CTA：承 .btn 40px、稍寬；靠色彩凸顯非尺寸（與 topbar 其餘鈕同高） */
/* === 上傳階段 === */
.upload-wrap { max-width: 560px; margin: 48px auto; padding: 0 20px; }
.dropzone { border: 2px dashed var(--line); border-radius: 16px; background: #fff; padding: 48px 24px; text-align: center; }
.dropzone.dragover { border-color: var(--sun); background: var(--sun-soft); }
.dropzone p.sub { color: var(--text-secondary); font-size: 13px; }
.spinner { width: 28px; height: 28px; border: 3px solid var(--line); border-top-color: var(--sun); border-radius: 50%; animation: spin 0.9s linear infinite; margin: 0 auto 12px; }
.elapsed { color: var(--text-secondary); font-size: 13px; margin-left: 8px; }
@keyframes spin { to { transform: rotate(360deg); } }
.err-box { color: var(--danger); font-size: 14px; margin-top: 16px; }
.ab-select { margin-top: 16px; font-size: 13px; color: var(--text-secondary); }

/* === 校稿階段（三欄：可收合原檔｜月曆主角｜docked 面板）=== */
.proofread { display: grid; grid-template-columns: minmax(620px, 1fr) 360px; gap: 16px; padding: 16px; align-items: start; }
.proofread .source-pane { display: none; }
.proofread.src-open { grid-template-columns: minmax(260px, 320px) minmax(560px, 1fr) 360px; }
.proofread.src-open .source-pane { display: block; }
/* 三欄塞不下：面板掉到月曆下方，月曆寬度永不犧牲（spec §2） */
@media (max-width: 1280px) {
  .proofread.src-open { grid-template-columns: minmax(260px, 320px) minmax(560px, 1fr); }
  .proofread.src-open .day-panel { grid-column: 2; }
}
/* 窄螢幕維持原上下堆疊策略 */
@media (max-width: 900px) {
  .proofread, .proofread.src-open { grid-template-columns: 1fr; }
  .proofread.src-open .day-panel { grid-column: auto; }
}
.pane { background: #fff; border: 1px solid var(--line); border-radius: 16px; box-shadow: 0 8px 24px rgba(20, 49, 76, .06); } /* 單層 shadow-card：邊框做工 > 陰影（school/Airbnb soft elevation） */

/* 原檔對照（隱藏時元件保持掛載 → 縮放狀態跨開合保留） */
.source-pane { position: sticky; top: 16px; overflow: hidden; }
.source-toolbar { display: flex; gap: 8px; padding: 8px 12px; border-bottom: 1px solid var(--line); align-items: center; }
.source-toolbar .zoom-label { font-size: 12px; color: var(--text-secondary); }
.source-body { height: 72vh; overflow: auto; overscroll-behavior: contain; display: grid; place-items: center; background: var(--bg); }
.source-body img { transform-origin: 0 0; cursor: grab; user-select: none; }
.source-body.pannable { touch-action: none; } /* touch 拖曳交給 pointer handler，不讓 UA 原生 pan 搶走 stream */
.source-body.dragging, .source-body.dragging img { cursor: grabbing; }
.source-body object { width: 100%; height: 100%; }
.source-body pre { white-space: pre-wrap; font-size: 13px; padding: 16px; margin: 0; width: 100%; }

/* 月曆 */
.cal-head { display: flex; align-items: center; gap: 8px; padding: 12px 16px; }
.cal-head .month-label { font-weight: 600; font-size: 16px; flex: 1; text-align: center; }
.unplaced-banner { margin: 0 16px 8px; padding: 8px 12px; background: var(--sun-soft); color: var(--text-on-tint); border-radius: 8px; font-size: 13px; cursor: pointer; border: none; width: calc(100% - 32px); text-align: left; }
.cal-grid { display: grid; grid-template-columns: repeat(7, 1fr); gap: 7px; padding: 0 16px 16px; }
.cal-dow { font-size: 12px; color: var(--text-secondary); text-align: center; padding: 4px 0; }
/* 月曆格＝微灰圓角卡片浮在白 pane（淡框＋大圓角＋間距，柔化密集網格——換白底後 school soft DNA） */
.cal-cell { border: 1px solid var(--cell-line); border-radius: 12px; min-height: 96px; padding: 6px; background: var(--cell-bg); cursor: pointer; text-align: left; display: flex; flex-direction: column; gap: 3px; }
.cal-cell:hover { background: #F5F5F5; border-color: var(--sun); }
.cal-cell.selected { border: 2px solid var(--sun); box-shadow: 0 4px 12px rgba(20, 49, 76, .08); padding: 5px; }  /* 選取＝sun 邊框（單一強調）＋中性柔影，不用黃光暈 */
.cal-cell.selected .dnum { color: var(--ink); }
.cal-cell.empty { background: transparent; border-color: transparent; cursor: default; }
.cal-cell .dnum { font-family: 'JetBrains Mono', monospace; font-size: 12.5px; font-weight: 600; color: var(--text-secondary); display: flex; align-items: center; gap: 5px; }
.dot-unviewed { width: 8px; height: 8px; border-radius: 50%; background: var(--sun); display: inline-block; }
/* 統一 chip：sun-soft 暖黃底＋sun 左條（single accent，保留 Airbnb 暖度）；上/下午靠時間文字區分，不用顏色（JS 仍標 .am/.pm，無視覺差） */
.chip { background: var(--sun-soft); border-left: 3px solid var(--sun); border-radius: 8px; padding: 3px 7px 4px; font-size: 12px; line-height: 1.35; overflow: hidden; }
.chip .nm { font-weight: 600; white-space: nowrap; overflow: hidden; text-overflow: ellipsis; display: block; }
.chip .tm { font-family: 'JetBrains Mono', monospace; color: var(--text-on-tint); font-size: 10.5px; }
.chip.dup { outline: 1px solid var(--danger); }
.chip .rep { color: var(--text-on-tint); font-weight: 400; } /* ↻ 重複課 icon（weekly 或內容相同多筆） */
.chip-more { font-size: 11px; color: var(--text-secondary); }

/* 點日面板（docked 右欄） */
.day-panel { padding: 16px 18px; display: flex; flex-direction: column; }  /* 不自捲、不 sticky：整頁單一捲動，消除「編輯區 vs 整頁」雙捲衝突（JT 2026-06-08） */
.panel-body h2 { margin: 0 0 12px; font-size: 17px; }
.panel-empty { color: var(--text-secondary); font-size: 14px; text-align: center; padding: 36px 12px; }
.cal-foot { font-size: 12px; color: var(--text-secondary); text-align: center; padding: 0 16px 12px; display: flex; align-items: center; justify-content: center; gap: 5px; }
.course-card { border: 1px solid var(--line); border-radius: 12px; padding: 12px; margin-bottom: 12px; }
.course-card.editing { border-color: var(--ink); box-shadow: 0 8px 24px rgba(20, 49, 76, .06); } /* ink stamp ＋ shadow-card：編輯中錨點（取代黃光暈，多卡相似時的視覺定位） */
.course-card .badge { display: inline-block; background: var(--sun-soft); color: var(--text-on-tint); border-radius: 999px; padding: 2px 10px; font-size: 12px; margin-bottom: 8px; }
.course-card .dup-note { color: var(--danger); font-size: 12px; margin-bottom: 8px; }
.fld { display: grid; grid-template-columns: 84px 1fr; gap: 8px; align-items: center; margin-bottom: 8px; font-size: 14px; }
.fld label { color: var(--text-secondary); font-size: 13px; }
.fld input, .fld select, .fld textarea { border: 1px solid var(--line); border-radius: 8px; padding: 8px 12px; font-size: 14px; font-family: inherit; width: 100%; }
.fld input, .fld select { height: 48px; }  /* school h-12 觸控尺寸 */
.fld input:hover, .fld select:hover, .fld textarea:hover { border-color: rgba(20, 49, 76, .4); }  /* hover ink@40% */
.fld input:focus, .fld select:focus, .fld textarea:focus { outline: none; border-color: var(--ink); box-shadow: none; }  /* focus 切 ink、無 ring（school 規範） */
.fld input::placeholder, .fld textarea::placeholder { font-style: italic; color: var(--disabled); }
.row-actions { display: flex; gap: 8px; margin-top: 8px; }
.panel-foot { display: flex; gap: 8px; justify-content: space-between; margin-top: 12px; }

/* === 翻譯與匯出（Plan 3）=== */
.translate-wrap { max-width: 1080px; margin: 0 auto; padding: 16px; display: flex; flex-direction: column; gap: 14px; }
.lang-bar { padding: 14px 18px; }
.lang-bar-label { font-weight: 600; font-size: 14px; margin-bottom: 10px; }
.lang-chips { display: flex; gap: 10px; flex-wrap: wrap; align-items: center; }
.lang-chip { border: 1.5px solid var(--line); border-radius: 999px; padding: 7px 18px; font-size: 14px; background: #fff; color: var(--ink); cursor: pointer; }
.lang-chip.on { border-color: var(--sun); background: var(--sun-soft); font-weight: 600; }
.lang-chip.on::before { content: "✓ "; }
.lang-go { margin-left: auto; }
.lang-status { display: flex; gap: 16px; flex-wrap: wrap; align-items: center; margin-top: 10px; font-size: 13px; }
.ls { display: inline-flex; align-items: center; gap: 6px; color: var(--text-secondary); }
.ls-ok { color: var(--ok); }
.ls-err { color: var(--danger); }
.spinner-s { width: 14px; height: 14px; border-width: 2px; margin: 0; }
.view-tabs { display: inline-flex; gap: 4px; background: #F5F5F5; border-radius: 999px; padding: 4px; align-self: flex-start; }
.view-tab { border: none; background: transparent; border-radius: 999px; padding: 6px 16px; font-family: inherit; font-size: 14px; color: var(--text-on-tint); cursor: pointer; }
.view-tab.on { background: #fff; color: var(--ink); font-weight: 600; box-shadow: 0 1px 2px rgba(20, 49, 76, .10); }

/* 輸出預覽：雙語月曆＋說明卡（print-ready 結構；譯文不截斷——那正是移工要讀的） */
.out-title { text-align: center; padding: 14px 16px 4px; }
.out-title .zh { font-weight: 600; font-size: 17px; display: block; }
/* 安全閘提示（想隱藏週末卻因有課保留）：給操作者看的、列印時隱藏（非貼出物的一部分） */
.cal-note { text-align: center; font-size: 12px; color: var(--text-secondary); margin: 0 16px 6px; }
.nv { color: var(--text-on-tint); }
.out-cal { padding-bottom: 16px; }
.out-cal .cal-grid { padding: 10px 16px 0; }
.out-cal .cal-dow .dow-nv { display: block; font-size: 10.5px; }
.out-cal .dow-slim .dow-nv { display: none; } /* 整月無課的縮窄欄：螢幕只留中文；列印時被表頭併行規則（specificity 較高）覆蓋回 inline——實測窄欄放得下，保留譯文 */
.out-cal .out-cell { min-height: 84px; cursor: default; }
.out-cal .chip .nm { white-space: normal; }
.out-cal .chip .nv { display: block; font-size: 11px; line-height: 1.3; }
.cat-wrap { padding-bottom: 16px; }
.cat-grid { display: grid; grid-template-columns: repeat(auto-fill, minmax(300px, 1fr)); gap: 12px; padding: 10px 16px 0; }
.cat-grid .out-title { grid-column: 1 / -1; padding: 4px 0 0; } /* 標題是 grid 首 item（span 全欄）——孤標題頁防治，見 course-catalog.js */
.cat-card { border: 1px solid var(--line); border-radius: 12px; padding: 14px 16px; }
.cc-name { font-size: 16px; font-weight: 600; }
.cc-name-nv { color: var(--text-on-tint); font-size: 14px; margin-bottom: 4px; }
.cc-when { font-size: 13px; margin-top: 6px; }
.cc-dates { font-size: 12px; color: var(--text-secondary); }
.cc-desc { font-size: 13px; margin-top: 8px; border-top: 1px dashed var(--line); padding-top: 6px; line-height: 1.55; }
.cc-label { font-weight: 600; margin-right: 6px; }
.cc-tags { margin-top: 8px; display: flex; gap: 6px; flex-wrap: wrap; }
.tag-pill { background: var(--sun-soft); border-radius: 999px; padding: 2px 10px; font-size: 12px; color: var(--text-on-tint); }

/* === 列印（Plan 4）：print-root 螢幕上隱藏，@media print 時唯一可見 === */
.print-root { display: none; }

/* 主鈕/caret 需 positioned z-51 浮在 backdrop(z-49) 之上——.print-split 必須維持 z-auto（若建立 stacking context，子孫 backdrop 的 z-49 仍會蓋過 context 內 static 按鈕） */
/* 列印 split button（topbar）：主鈕＋▾ 選單 */
.print-split { display: inline-flex; position: relative; }
.print-split .print-main { border-top-right-radius: 0; border-bottom-right-radius: 0; position: relative; z-index: 51; }
.print-split .print-caret { border-top-left-radius: 0; border-bottom-left-radius: 0; padding: 10px 10px; border-left: 1px solid rgba(20, 49, 76, .15); position: relative; z-index: 51; }
.print-backdrop { position: fixed; inset: 0; z-index: 49; }
.print-menu { position: absolute; top: calc(100% + 8px); right: 0; z-index: 50; background: #fff; border: 1px solid var(--line); border-radius: 12px; box-shadow: 0 8px 24px rgba(20, 49, 76, .15); padding: 14px 16px; min-width: 240px; text-align: left; }
.print-menu .pm-label { font-size: 12px; font-weight: 600; color: var(--text-secondary); margin: 8px 0 4px; }
.print-menu .pm-label:first-child { margin-top: 0; }
.print-menu .pm-row { display: flex; align-items: center; gap: 8px; font-size: 14px; padding: 4px 0; cursor: pointer; }
.print-menu .pm-print { width: 100%; margin-top: 10px; }
.print-menu .pm-hint { font-size: 12px; color: var(--text-secondary); margin-top: 10px; line-height: 1.5; }
.print-menu .pm-fs { display: flex; gap: 6px; margin-top: 2px; }
.print-menu .pm-fs-btn { flex: 1; height: 32px; border: 1px solid var(--line); background: #fff; border-radius: 8px; font-size: 13px; font-family: inherit; color: var(--text-secondary); cursor: pointer; transition: background .15s, border-color .15s, color .15s; }
.print-menu .pm-fs-btn:hover { border-color: var(--ink); color: var(--ink); }
.print-menu .pm-fs-btn.on { background: var(--sun-soft); border-color: var(--sun); color: var(--ink); font-weight: 600; }
.print-menu .pm-fs-hint { font-size: 11px; color: var(--text-secondary); margin-top: 6px; line-height: 1.4; }

/* === 行動裝置收斂（上傳堪用＋不破版底線；校稿手機範式留待真實使用證據）=== */
/* screen 限定：列印時 width 對「頁面框」求值（A4 直式 ≈718px 會誤觸發此區塊），print 永遠只吃 @media print */
@media screen and (max-width: 720px) {
  .topbar { display: flex; flex-wrap: wrap; gap: 10px; padding: 10px 12px; }
  .topbar-left { gap: 10px; flex: 1 1 auto; }
  .topbar-actions { gap: 8px; }
  .topbar h1 { font-size: 15px; }
  .steps { display: none; } /* 步驟指示器讓位給標題與動作鈕 */
  .topbar button { padding: 8px 10px; font-size: 13px; }
  .upload-wrap { margin: 24px auto; }
  .dropzone { padding: 32px 16px; }
  .proofread { padding: 10px; gap: 10px; }
  /* 堆疊模式下 source-pane sticky 取消，避免重疊怪異（day-panel 已非 sticky/自捲） */
  .source-pane { position: static; }
  .source-toolbar { flex-wrap: wrap; }
  /* 月曆：縮格、chip 只留課名 */
  .cal-grid { gap: 3px; padding: 0 10px 12px; }
  .cal-cell { min-height: 64px; padding: 4px; border-radius: 8px; }
  .cal-cell.selected { padding: 3px; }
  .chip { font-size: 10.5px; padding: 2px 5px 3px; }
  .chip .tm { display: none; }
  .translate-wrap { padding: 10px; }
  .lang-go { margin-left: 0; width: 100%; }
  .print-menu { right: auto; left: 0; } /* 手機：選單靠左展開，避免出界 */
  /* 輸出月曆手機上保留時間——對移工是核心資訊（「chip 只留課名」僅適用校稿月曆） */
  .out-cal .chip .tm { display: inline; }
}

/* === 列印版面（Plan 4 spec §2）：A4 橫式合訂；Chromium 系為支援目標 === */
/* margin ≤8mm 時 Chromium 不印瀏覽器頁首頁尾（日期/URL/頁碼）——6mm 一舉雙得：
   邊界收窄＋header/footer 自動消失（不依賴使用者關 checkbox）；仍高於印表機物理不可印區（~3–5mm） */
@page { size: A4 landscape; margin: 6mm; }

@media print {
  body.print-mode { background: #fff; }
  /* 螢幕 UI 全藏；print-root 唯一可見 */
  body.print-mode .topbar,
  body.print-mode .translate-wrap { display: none !important; }
  body.print-mode .print-root { display: block; }

  /* chip sun-soft 底色是版面語意，強制帶進列印 */
  body.print-mode .print-root * { -webkit-print-color-adjust: exact; print-color-adjust: exact; }

  /* 每區段（語言×內容）各起新頁；首區段除外（避免開頭空白頁） */
  .print-section { break-before: page; }
  .print-section:first-child { break-before: auto; }

  /* 列印抬頭（每區段＝每頁起始）：One-Forty logo ＋ 據點名稱（JT 2026-06-08） */
  .print-letterhead { display: flex; align-items: center; gap: 10px; padding-bottom: 8px; margin-bottom: 10px; border-bottom: 1.5px solid var(--ink); }
  .print-letterhead .ph-logo { height: 26px; width: auto; }
  .print-letterhead .ph-center { font-weight: 600; font-size: 13px; color: var(--ink); }

  /* 紙上去卡片皮：pane 的圓角陰影邊框是螢幕語彙；尾端 padding 歸零（會把最後一頁推出整頁空白） */
  .print-root .pane { border: none; box-shadow: none; border-radius: 0; padding-bottom: 0; }

  /* 孤標題頁防治：break-after: avoid 在 Chromium 不支援——改以「標題併入 cat-grid 首 item」
     解（course-catalog.js）；grid 整體推次頁時標題隨之，不再孤立 */

  /* 表頭併行省高（mockup 實測兩招共省 ~86px）：標題中文＋譯文一行、星期中文＋譯文一行 */
  .print-root .out-title .zh { display: inline; font-size: 15px; }
  .print-root .out-title .zh::after { content: " · "; color: var(--text-secondary); font-weight: 400; }
  .print-root .out-cal .cal-dow .dow-nv { display: inline; margin-left: 3px; }

  /* 5/6 週月：階梯 zoom 塞單頁（mockup 實測起始值，依列印預覽調；分開寫＝6 週可單獨降，
     越/菲譯文偏長時優先調 weeks-6。zoom 在 Chromium 是 layout-affecting，縮小後佔位同縮 */
  .print-root .out-cal.weeks-5 { zoom: 0.9; }
  .print-root .out-cal.weeks-6 { zoom: 0.9; }

  /* 列印字級倍率：使用者於列印選單選 縮小/標準/放大/特大（--pfs 0.9 / 1 / 1.12 / 1.25）。
     縮放範圍＝課程內容（月曆 chip 名稱/譯名/時間 ＋ 說明卡內文）；頁面 chrome（月標題／
     星期標頭／頁首 logo+據點名）維持固定＝這些是一次性導覽標頭、放大效益低且增版面風險。
     weeks-N zoom 仍負責單頁；放大可能溢頁、縮小用來把高密度課表塞回單頁＝使用者於列印
     預覽自行取捨（所見即所得）。字重維持 500（去糊 baseline，不隨倍率變）。 */
  .print-root { --pfs: 1; }
  .print-root.fs-small { --pfs: 0.9; }
  .print-root.fs-large { --pfs: 1.12; }
  .print-root.fs-xlarge { --pfs: 1.25; }

  /* 月曆緊湊（目標單頁；起始值，依列印預覽實機調整） */
  .print-root .out-cal .cal-grid { padding: 6px 0 0; gap: 3px; }
  .print-root .out-cal .out-cell { min-height: 0; padding: 3px 4px; border-radius: 4px; break-inside: avoid; }
  .print-root .out-cal .chip { font-size: calc(9.5px * var(--pfs)); padding: 2px 4px 3px; border-radius: 4px; }
  /* 中文課名列印降字重 600→500：粗體小字在 A4 點陣化下會糊（相瑜回饋 2026-06-09），
     500 仍與 400 譯文有層級差但更銳利、且不隨字級倍率變。 */
  .print-root .out-cal .chip .nm { font-weight: 500; }
  .print-root .out-cal .chip .nv { font-size: calc(9px * var(--pfs)); }
  .print-root .out-cal .chip .tm { font-size: calc(8.5px * var(--pfs)); display: inline; }
  .print-root .out-title { padding: 0 0 4px; }
  .print-root .cal-note { display: none; } /* 操作者提示，不入列印輸出 */

  /* 說明卡：橫式固定 3 欄、卡片不腰斬 */
  .print-root .cat-grid { grid-template-columns: repeat(3, 1fr); gap: 8px; padding: 6px 0 0; }
  .print-root .cat-card { break-inside: avoid; border-radius: 8px; padding: 10px 12px; }
  .print-root .cc-name { font-size: calc(14px * var(--pfs)); font-weight: 500; }
  /* 說明卡內文同步隨字級縮放（標準時值同螢幕、放大/縮小才變）——避免卡片只有標題
     縮放、其餘固定的內部不一致（codex review 2026-06-09） */
  .print-root .cc-name-nv { font-size: calc(14px * var(--pfs)); }
  .print-root .cc-dates { font-size: calc(12px * var(--pfs)); }
  .print-root .cc-desc { font-size: calc(13px * var(--pfs)); }
}
