/* ====================================================================
 * NASA 经营看板 · 公共样式（v2.12 深蓝主题）
 * 适用页面: index.html / sector.html / bu.html / admin / login / mobile
 * 主色: 经典深蓝 #003366
 * 注: 各页特有的样式（.page-tabs / .module-kpi-grid / .bu-* 等）仍留在页面内联
 * ==================================================================== */
:root {
  /* === 品牌色（5 级蓝阶 + 半透明工具变量） === */
  --accent: #003366;
  --accent-dark: #002244;
  --accent-mid: #3660a0;
  --accent-soft: #cfe0ed;
  --accent-weak: #e7eff7;
  --accent-08: rgba(0,51,102,0.08);   /* 半透明品牌色（目标条等浅底） */
  --accent-10: rgba(0,51,102,0.10);   /* 表单 :focus 阴影 */
  --accent-12: rgba(0,51,102,0.12);
  --accent-25: rgba(0,51,102,0.25);

  /* === 中性色（slate 系；--ink-faint 调暗保证 WCAG AA 4.5:1） === */
  --ink: #0f172a;
  --ink-soft: #1e293b;
  --ink-muted: #475569;
  --ink-faint: #64748b;                 /* was #94a3b8 — 在 --paper-alt 上对比度 3.8→5.7 */
  --paper: #fafafa;
  --paper-card: #ffffff;
  --paper-alt: #f1f5f9;
  --line: #e2e8f0;
  --line-strong: #cbd5e1;

  /* === 语义色（保留：财务涨跌/目标识别） === */
  --ok: #2d6a4f; --ok-soft: #d4e4db;
  --warn: #c77700; --warn-soft: #f5e3c7;
  --bad: #a62121; --bad-soft: #f0d4d4;

  /* === 设计 token === */
  --r: 4px;
  --pad-page-x: 24px; --pad-page-y: 16px;
  --gap-card: 12px; --gap-section: 20px; --pad-card: 14px;
  --nav-w-expanded: 180px;
  --nav-w-collapsed: 48px;
  --nav-transition: width 180ms ease, margin-left 180ms ease, transform 180ms ease;
  --header-h: 44px;
  --shadow-sm: 0 1px 2px rgba(15, 23, 42, 0.04);
  --shadow-md: 0 2px 8px rgba(15, 23, 42, 0.06);
  --shadow-lg: 0 8px 24px rgba(15, 23, 42, 0.08);
}
* { box-sizing: border-box; margin: 0; padding: 0; }
html, body { background: var(--paper); color: var(--ink); font-family: 'Inter', -apple-system, sans-serif; font-size: 13px; }
body { min-height: 100vh; }

/* ===== 顶栏（深蓝主题） ===== */
.topbar { background: var(--accent); color: #ffffff; padding: 8px 24px; display: flex; align-items: center; justify-content: space-between; border-bottom: 2px solid var(--accent-dark); height: 44px; position: sticky; top: 0; z-index: 1000; }
.brand { display: flex; align-items: center; gap: 8px; }
.brand-mark { font-family: 'Noto Serif SC', serif; font-weight: 900; font-size: 17px; letter-spacing: 0.5px; color: #ffffff; }
.brand-mark .dot { color: #ffffff; }
.brand-sub { font-size: 10px; letter-spacing: 2px; color: rgba(255,255,255,0.65); text-transform: uppercase; }

/* 顶栏左侧：折叠导航按钮 */
.topbar-collapse-btn { background:transparent; border:1px solid rgba(255,255,255,0.2); color:#f4f2ec; width:26px; height:26px; border-radius:var(--r); cursor:pointer; font-size:13px; line-height:1; padding:0; display:inline-flex; align-items:center; justify-content:center; flex-shrink:0; transition:background 0.12s, border-color 0.12s; }
.topbar-collapse-btn:hover { background:rgba(255,255,255,0.08); border-color:rgba(255,255,255,0.35); }

.topbar-right { display: flex; align-items: center; gap: 14px; font-size: 12px; }
.topbar-right .dateline { font-family: 'JetBrains Mono', monospace; color: rgba(255,255,255,0.7); font-size: 11px; }
/* v2.23.x: 日期筛选 — 默认 display:none（在 HTML 内联），JS relocate 后通过 .df-ready 显示，避免 FOUC
   设计：分段控件风格（同 [万|M] 切换器），‹/› 合并、年/月合并、查询独立 */
.topbar-right #dateFilter.df-ready { display: inline-flex !important; align-items: center; gap: 6px; height: 26px; }
.topbar-right #dateFilter button,
.topbar-right #dateFilter select {
  background: transparent; color: #fff; border: none; outline: none;
  height: 24px; padding: 0 10px; line-height: 24px;
  font: 700 11px 'JetBrains Mono', monospace; letter-spacing: 0.3px;
  cursor: pointer; appearance: none; -webkit-appearance: none; -moz-appearance: none;
  transition: background .12s;
}
.topbar-right #dateFilter button:hover,
.topbar-right #dateFilter select:hover { background: rgba(255,255,255,0.15); }

/* 分段 pill 容器 —— 用包裹元素让多个 button/select 共享一圈边框
   不用 overflow:hidden（旧浏览器会裁剪原生 select 下拉），改用子元素 border-radius 自适配 */
.topbar-right #dateFilter .df-pill {
  display: inline-flex; align-items: stretch;
  background: rgba(255,255,255,0.06);
  border: 1px solid rgba(255,255,255,0.22);
  border-radius: 4px;
  height: 24px;
}
.topbar-right #dateFilter .df-pill > * + * { border-left: 1px solid rgba(255,255,255,0.18); }
.topbar-right #dateFilter .df-pill > *:only-child { border-radius: 3px; }
.topbar-right #dateFilter .df-pill > *:first-child:not(:only-child) { border-radius: 3px 0 0 3px; }
.topbar-right #dateFilter .df-pill > *:last-child:not(:only-child) { border-radius: 0 3px 3px 0; }

/* ‹ › 翻月按钮 — 紧凑 */
.topbar-right #dateFilter #prevMonthBtn,
.topbar-right #dateFilter #nextMonthBtn { width: 22px; padding: 0; font-size: 13px; }

/* ymLabel: 可点击的「2026.04」文本按钮（点击弹 popover） */
.topbar-right #dateFilter #ymLabel {
  min-width: 78px; padding: 0 12px;
  font: 700 12px 'JetBrains Mono', monospace; letter-spacing: 0.5px;
}
.topbar-right #dateFilter #ymLabel::after {
  content: ' ▾'; font-size: 9px; opacity: 0.65; margin-left: 2px; font-weight: 400;
}
.topbar-right #dateFilter #ymLabel.open { background: rgba(255,255,255,0.22); }

/* ymPopover: 点击 ymLabel 后弹出的年/月选择面板 */
#ymPopover {
  position: fixed; z-index: 2000;
  background: #fff; color: var(--ink);
  border: 1px solid var(--line-strong);
  border-radius: 6px; box-shadow: 0 8px 24px rgba(0,0,0,0.18);
  padding: 10px 12px; min-width: 220px;
  font: 12px 'Inter', sans-serif;
  display: none;
}
#ymPopover.open { display: block; }
#ymPopover .ymp-year-row {
  display: flex; align-items: center; justify-content: space-between;
  padding-bottom: 8px; margin-bottom: 8px;
  border-bottom: 1px solid var(--line);
}
#ymPopover .ymp-year-row .ymp-year {
  font: 700 14px 'JetBrains Mono', monospace; color: var(--accent);
}
#ymPopover .ymp-year-row button {
  width: 22px; height: 22px; padding: 0;
  background: var(--paper-alt); border: 1px solid var(--line);
  border-radius: 4px; cursor: pointer; font-size: 12px; color: var(--ink);
  display: inline-flex; align-items: center; justify-content: center;
}
#ymPopover .ymp-year-row button:hover { background: var(--accent-soft); border-color: var(--accent); }
#ymPopover .ymp-month-grid {
  display: grid; grid-template-columns: repeat(4, 1fr); gap: 4px;
}
#ymPopover .ymp-month {
  padding: 6px 0; text-align: center;
  background: var(--paper-alt); border: 1px solid transparent;
  border-radius: 4px; cursor: pointer;
  font: 600 11px 'JetBrains Mono', monospace; color: var(--ink-soft);
  transition: background .12s;
}
#ymPopover .ymp-month:hover { background: var(--accent-soft); color: var(--accent); }
#ymPopover .ymp-month.active { background: var(--accent); color: #fff; border-color: var(--accent); }

/* 查询按钮 — 反白主按钮 */
.topbar-right #dateFilter #loadBtn {
  background: #ffffff; color: var(--accent);
  border-radius: 4px; padding: 0 14px;
  font: 700 11px 'Inter', sans-serif; letter-spacing: 1px;
}
.topbar-right #dateFilter #loadBtn:hover { background: rgba(255,255,255,0.88); }

/* 副标题区的空 .masthead-meta（日期迁出后）直接折叠 */
.masthead-meta:empty { display: none !important; }
/* sector/bu 第二行 .mh-row-controls：dateFilter 迁走 + pageTabs 未渲染时整行隐藏，避免孤儿 border-top
   现代浏览器：用 :has() 选择器（Safari 15.4+ / FF 121+ / Chrome 105+）
   旧浏览器：fallback 通过 JS 加 .is-empty-row class（见 board-common.js） */
.masthead .masthead-row.mh-row-controls:not(:has(.page-tabs.visible)) { display: none !important; }
.masthead .masthead-row.mh-row-controls.is-empty-row { display: none !important; }
.user-chip { display: flex; align-items: center; gap: 6px; padding: 4px 10px; background: rgba(255,255,255,0.12); border: 1px solid rgba(255,255,255,0.2); border-radius: var(--r); font-size: 11px; position: relative; }
.user-chip.has-admin { cursor: pointer; }
.user-chip.has-admin:hover { background: rgba(255,255,255,0.18); border-color: rgba(255,255,255,0.35); }
.user-chip .avatar { width: 18px; height: 18px; border-radius: 50%; background: #ffffff; color: var(--accent); font-weight: 700; display: flex; align-items: center; justify-content: center; font-size: 9px; }
.user-chip .uc-name { font-weight: 600; font-size: 11px; color: #ffffff; line-height: 1; }
.user-chip .uc-role { color: rgba(255,255,255,0.55); font-size: 10px; line-height: 1; padding-left: 6px; border-left: 1px solid rgba(255,255,255,0.18); }
/* v2.20.7: 后台入口悬浮卡（管理类角色 hover 时弹出）
   v2.20.3: 加隐形桥（::before）+ 收回延迟 250ms，避免鼠标从 chip 移到菜单时空隙导致瞬间收起 */
.user-chip .uc-pop { position: absolute; top: 100%; right: 0; margin-top: 6px; min-width: 180px;
  background: var(--paper-card); color: var(--ink); border: 1px solid var(--line); border-radius: var(--r);
  box-shadow: 0 8px 24px rgba(15,15,14,0.18); padding: 8px; z-index: 2000;
  opacity: 0; visibility: hidden; transform: translateY(-4px);
  /* 出现快，隐藏慢：visibility 用 0s 切换但加 250ms delay；opacity/transform 用 transition 平滑 */
  transition: opacity 0.15s ease, transform 0.15s ease, visibility 0s linear 0.25s;
  pointer-events: none; }
/* 隐形桥：填充 chip 与菜单间 6px 空隙，避免鼠标穿过时 :hover 中断 */
.user-chip .uc-pop::before {
  content: ''; position: absolute; left: 0; right: 0; top: -8px; height: 8px;
  /* 透明，仅占 hover 命中区域 */
}
.user-chip:hover .uc-pop,
.user-chip .uc-pop:hover { opacity: 1; visibility: visible; transform: translateY(0); pointer-events: auto;
  transition: opacity 0.12s ease, transform 0.12s ease, visibility 0s linear 0s; }
.user-chip .uc-pop a { display: flex; align-items: center; gap: 8px; padding: 6px 10px; border-radius: var(--r);
  text-decoration: none; color: var(--ink); font-size: 12px; font-weight: 500; transition: background 0.1s; }
.user-chip .uc-pop a:hover { background: var(--accent-weak); color: var(--accent); }
.user-chip .uc-pop a .uc-icon { font-size: 14px; }
.user-chip .uc-pop .uc-hint { font-size: 10px; color: var(--ink-faint); padding: 4px 10px 2px; letter-spacing: 0.3px; text-transform: uppercase; }
/* v2.20.3: 弹出框顶部账号 + 岗位（chip 里只剩账号名） */
.user-chip .uc-pop .uc-pop-head { padding: 6px 10px 8px; margin-bottom: 4px; border-bottom: 1px solid var(--line); }
.user-chip .uc-pop .uc-pop-name { font-size: 13px; font-weight: 700; color: var(--ink); line-height: 1.2; }
.user-chip .uc-pop .uc-pop-role { font-size: 11px; color: var(--ink-muted); margin-top: 2px; }

/* ===== 副标题栏 ===== */
.masthead { background: var(--paper); padding: 14px 24px 0; border-bottom: 1px solid var(--line); display: flex; flex-direction: column; position: sticky; top: var(--header-h); z-index: 950; }
.masthead-row { display: flex; align-items: flex-end; justify-content: space-between; gap: 20px; padding-bottom: 12px; }
.masthead-title { font-family: 'Noto Serif SC', serif; font-weight: 900; font-size: 22px; line-height: 1.15; letter-spacing: -0.3px; }
.masthead-title .period { color: var(--accent); font-family: 'JetBrains Mono', monospace; font-weight: 700; }
/* v2.20: 标题副信息（简介 · 负责人） — 浅灰 13px Inter，与衬线主标题区分 */
.masthead-title .t-meta { font-family: 'Inter', sans-serif; font-weight: 400; font-size: 13px; color: var(--ink-muted); letter-spacing: 0.2px; margin: 0 6px; }
.masthead-title .t-meta .t-name { color: var(--ink-soft); font-weight: 500; }
.masthead-title .t-meta .t-mgr { color: var(--ink-muted); }
.masthead-kicker { font-size: 10px; letter-spacing: 3px; color: var(--ink-muted); text-transform: uppercase; margin-bottom: 4px; }
.masthead-meta { text-align: right; font-size: 11px; color: var(--ink-muted); }

/* ===== 内容栅格 ===== */
.wrap { padding: 8px var(--pad-page-x) 36px; max-width: 1600px; margin: 0 auto; }
/* 最后一个 masthead-row 不需要底间距，让 .wrap 紧贴 */
.masthead .masthead-row:last-child { padding-bottom: 4px; }
.grid { display: grid; gap: var(--gap-card); }
.grid-4 { grid-template-columns: repeat(4, 1fr); }
.grid-2 { grid-template-columns: 2fr 1fr; }
.grid-3 { grid-template-columns: repeat(3, 1fr); }

/* ===== 区块标题 ===== */
.section { margin-top: var(--gap-section); }
.section:first-child { margin-top: 0; }
.section-head { display: flex; align-items: baseline; justify-content: space-between; border-bottom: 1px solid var(--accent); padding-bottom: 5px; margin-bottom: 10px; }
.section-title { font-family: 'Noto Serif SC', serif; font-weight: 700; font-size: 15px; letter-spacing: 0.3px; }
.section-title .num { font-family: 'JetBrains Mono', monospace; color: var(--accent); margin-right: 6px; font-size: 12px; vertical-align: middle; }
.section-note { font-size: 10px; color: var(--ink-muted); letter-spacing: 0.8px; text-transform: uppercase; }

/* ===== 通用卡片 ===== */
.card { background: var(--paper-card); border: 1px solid var(--line); border-radius: var(--r); padding: var(--pad-card); position: relative; transition: border-color .15s; }
.card:hover { border-color: var(--line-strong); }
.card-title { font-size: 10px; letter-spacing: 1.5px; color: var(--ink-muted); text-transform: uppercase; font-weight: 600; margin-bottom: 8px; display: flex; align-items: center; justify-content: space-between; }
.card-title .hint { font-size: 9px; color: var(--ink-faint); font-weight: 400; letter-spacing: 0.8px; }

/* ===== KPI 卡 ===== */
.kpi { padding: 12px 14px 12px; }
.kpi .kpi-val { font-family: 'Noto Serif SC', serif; font-weight: 900; font-size: 26px; line-height: 1.05; color: var(--ink); margin-bottom: 2px; letter-spacing: -0.3px; }
/* v2.20: 单位标签基样式（被各种 *-val 使用），各处只覆盖 font-size */
.unit { color: var(--ink-muted); font-weight: 500; margin-left: 3px; font-family: 'Inter', sans-serif; font-size: 11px; }
.kpi .kpi-val .unit { font-size: 11px; }
.kpi .kpi-sub { font-size: 11px; color: var(--ink-muted); }
.kpi .kpi-delta { display: flex; gap: 10px; margin-top: 8px; padding-top: 6px; border-top: 1px dashed var(--line-strong); flex-wrap: wrap; }
.kpi .kpi-delta .d { font-size: 10px; display: flex; align-items: baseline; gap: 4px; }
.kpi .kpi-delta .d .lbl { color: var(--ink-faint); letter-spacing: 0.5px; text-transform: uppercase; font-size: 9px; }
.kpi .kpi-delta .d .v { font-family: 'JetBrains Mono', monospace; font-weight: 700; font-size: 11px; }
.pos { color: var(--ok); }
.neg { color: var(--bad); }
.warn { color: var(--warn); }

/* ===== 图表 ===== */
.chart-box { height: 260px; }
.chart-sm { height: 48px; }
.chart-md { height: 220px; }

/* ===== 组织报表 ===== */
.org-table { width: 100%; border-collapse: collapse; font-size: 11px; }
.org-table thead th { font-size: 9px; letter-spacing: 0.8px; color: var(--ink-muted); text-transform: uppercase; font-weight: 700; padding: 6px 10px; text-align: right; border-bottom: 1px solid var(--accent); background: var(--paper-alt); white-space: nowrap; }
.org-table thead th.l { text-align: left; }
.org-table tbody td { padding: 5px 10px; text-align: right; border-bottom: 1px solid var(--line); font-family: 'JetBrains Mono', monospace; font-weight: 500; vertical-align: middle; }
.org-table tbody td.l { text-align: left; font-family: 'Inter', sans-serif; font-weight: 500; }
.org-table tbody tr { cursor: pointer; }
.org-table tbody tr:hover td { background: var(--paper-alt); }
.org-sector>td { font-weight: 700; font-size: 12px; background: var(--paper-alt); border-top: 1px solid var(--line-strong); }
.org-bu>td { font-size: 11px; }
.org-mod td:first-child { padding-left: 24px !important; font-size: 10px; color: var(--ink-muted); }
.org-tfoot td { font-weight: 700; font-size: 11px; background: var(--accent-weak); border-top: 1px solid var(--accent); text-align: right; padding: 6px 10px; font-family: 'JetBrains Mono', monospace; }

/* 目标徽章（表格内） */
.tg { display: inline-flex; align-items: center; gap: 3px; padding: 1px 6px; font-size: 9px; font-weight: 600; border-radius: var(--r); }
.tg.a { background: var(--ok-soft); color: var(--ok); }
.tg.w { background: var(--warn-soft); color: var(--warn); }
.tg.f { background: var(--bad-soft); color: var(--bad); }
.tg.n { background: var(--paper-alt); color: var(--ink-faint); }

/* ===== 查询工具栏（副标题右侧） ===== */
.toolbar { display: flex; gap: 8px; align-items: center; }
.toolbar .sep { color: var(--line-strong); font-size: 12px; font-weight: 200; }
.toolbar select, .toolbar button { font: 11px 'Inter', sans-serif; height: 26px; border-radius: var(--r); border: 1px solid var(--line); background: var(--paper-card); padding: 0 8px; cursor: pointer; }
.toolbar select { font-family: 'JetBrains Mono', monospace; font-weight: 600; color: var(--ink); }
.toolbar .tb-label { font-size: 11px; color: var(--ink-muted); }
.toolbar .btn-q { background: var(--accent); color: #fff; border-color: var(--accent); padding: 0 14px; font-weight: 600; letter-spacing: 0.5px; transition: opacity .15s; }
.toolbar .btn-q:hover { opacity: .85; }
.toolbar .btn-nav { background: var(--paper-card); color: var(--ink); border-color: var(--line); padding: 0 8px; font-weight: 500; transition: background .15s, border-color .15s; }
.toolbar .btn-nav:hover { background: var(--paper-alt); border-color: var(--line-strong); }

/* ===== 左侧导航栏（v2.2 替代 qnav） ===== */
.nav-toggle { display:none; background:transparent; border:1px solid rgba(255,255,255,0.2); color:#f4f2ec; width:28px; height:28px; border-radius:var(--r); cursor:pointer; font-size:16px; line-height:1; margin-right:10px; padding:0; }
.nav-toggle:hover { background:rgba(255,255,255,0.08); }
/* v2.20: 初始无 transition，避免新页面加载时 nav 从 180px→48px 的抖动；
   board-common.js 在 DOMContentLoaded 后给 body 加 .nav-init-done 类启用过渡 */
.left-nav { position:fixed; top:var(--header-h); left:0; bottom:0; width:var(--nav-w-expanded); background:var(--paper-card); border-right:1px solid var(--line); z-index:900; display:flex; flex-direction:column; overflow:hidden; }
body.nav-init-done .left-nav { transition:var(--nav-transition); }
.left-nav .nav-scroll { flex:1; overflow-y:auto; padding:10px 0; }
.left-nav .nav-home, .left-nav .nav-item { display:flex; align-items:center; gap:9px; padding:7px 12px 7px 13px; text-decoration:none; color:var(--ink); cursor:pointer; border-left:3px solid transparent; transition:background .12s; white-space:nowrap; overflow:hidden; }
.left-nav .nav-home { font-size:13px; font-weight:700; }
.left-nav .nav-home .ico { width:16px; text-align:center; font-size:14px; }
.left-nav .nav-home:hover, .left-nav .nav-item:hover { background:var(--paper-alt); }
.left-nav .nav-home.active, .left-nav .nav-item.active { background:var(--accent-soft); border-left-color:var(--accent); font-weight:700; }
.left-nav .nav-section-title { padding:10px 13px 4px; font-size:9px; text-transform:uppercase; letter-spacing:1.5px; color:var(--ink-faint); font-weight:700; }
.left-nav .nav-sec { padding:7px 12px 7px 13px; font-size:13px; font-weight:700; color:var(--ink); border-left:3px solid transparent; }
.left-nav .nav-sec.active { background:var(--accent-soft); border-left-color:var(--accent); }
.left-nav .nav-sec.active-parent { color:var(--accent); }
.left-nav .nav-bu { padding:5px 12px 5px 26px; font-size:12px; font-weight:600; color:var(--ink-soft); border-left:3px solid transparent; }
.left-nav .nav-bu.active { background:var(--accent-soft); border-left-color:var(--accent); }
.left-nav .nav-mod { padding:4px 12px 4px 38px; font-size:11px; color:var(--ink-muted); border-left:3px solid transparent; }
.left-nav .nav-mod.active { background:var(--accent-soft); border-left-color:var(--accent); color:var(--ink); font-weight:600; }
.nav-backdrop { display:none; position:fixed; top:var(--header-h); left:0; right:0; bottom:0; background:rgba(0,0,0,0.35); z-index:890; }

/* 收起态 */
body[data-nav-collapsed="true"] .left-nav { width:var(--nav-w-collapsed); }
body[data-nav-collapsed="true"] .left-nav .nav-home .label,
body[data-nav-collapsed="true"] .left-nav .nav-bu,
body[data-nav-collapsed="true"] .left-nav .nav-mod,
body[data-nav-collapsed="true"] .left-nav .nav-section-title { display:none; }
body[data-nav-collapsed="true"] .left-nav .nav-sec { justify-content:center; padding:6px 4px; font-family:'JetBrains Mono', monospace; font-size:11px; text-align:center; }
body[data-nav-collapsed="true"] .left-nav .nav-home { justify-content:center; padding:6px 4px; }

/* 主内容区随导航宽度偏移（同上：初始无 transition） */
.app-main { margin-left:var(--nav-w-expanded); }
body.nav-init-done .app-main { transition:var(--nav-transition); }
body[data-nav-collapsed="true"] .app-main { margin-left:var(--nav-w-collapsed); }

@keyframes pulse { 0%,100%{opacity:1} 50%{opacity:0.4} }

/* ===== 响应式 ===== */
@media (max-width: 1200px) { .grid-4 { grid-template-columns: repeat(2, 1fr); } .grid-3 { grid-template-columns: 1fr 1fr; } }
@media (max-width: 768px) {
  .grid-2 { grid-template-columns: 1fr; } .grid-3 { grid-template-columns: 1fr; }
  .wrap { padding: 12px; }
  .topbar { padding: 6px 10px; height: 44px; gap: 6px; flex-wrap: nowrap; overflow: hidden; }
  .topbar .brand { gap: 4px; min-width: 0; flex-shrink: 1; overflow: hidden; }
  .topbar .brand-mark { font-size: 14px; flex-shrink: 0; }
  /* 移动端隐藏装饰/非必需元素，让顶栏空间留给筛选 + 用户 */
  .topbar .brand-sub,
  .topbar .topbar-collapse-btn,
  .topbar-right .user-chip .uc-role { display: none !important; }
  .topbar-right { gap: 6px; flex-shrink: 0; }
  .topbar-right .user-chip { padding: 3px 6px; }
  .topbar-right .user-chip .uc-name { max-width: 60px; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
  .topbar-right a[onclick] { font-size: 10px !important; margin-left: 4px !important; }
  /* 日期筛选 + 单位切换 在小屏更紧凑 */
  .topbar-right #dateFilter.df-ready { gap: 4px; }
  .topbar-right #dateFilter button,
  .topbar-right #dateFilter select { padding: 0 6px; font-size: 10px; }
  .topbar-right #dateFilter #loadBtn { padding: 0 8px; font-size: 10px; letter-spacing: 0; }
  .topbar-right #dateFilter #prevMonthBtn,
  .topbar-right #dateFilter #nextMonthBtn { width: 20px; }
  #nasaUnitToggle { margin-right: 0 !important; }
  #nasaUnitToggle button { padding: 0 6px !important; }
  .masthead { padding: 12px 12px 0; }
  .masthead-row { flex-direction: column; align-items: flex-start; gap: 8px; padding-bottom: 8px; }
  .masthead-title { font-size: 18px; }
  .nav-toggle { display:inline-flex; align-items:center; justify-content:center; }
  .left-nav { width:var(--nav-w-expanded); transform:translateX(-100%); }
  body[data-nav-open="true"] .left-nav { transform:translateX(0); }
  body[data-nav-open="true"] .nav-backdrop { display:block; }
  .app-main { margin-left:0 !important; }
  body[data-nav-collapsed="true"] .left-nav { width:var(--nav-w-expanded); } /* 移动端忽略 collapsed */
}
/* 极窄屏（< 400px，常见手机竖屏靠近底部）— 进一步压缩 */
@media (max-width: 400px) {
  .topbar-right .user-chip .avatar { width: 16px; height: 16px; font-size: 8px; }
  .topbar-right .user-chip .uc-name { max-width: 50px; font-size: 10px; }
}

/* ===== v2.14 AI 月度关注事项（紧凑版） ===== */
.ai-focus { border:1px solid var(--line); border-left:3px solid var(--accent); border-radius:var(--r); background:var(--paper-card); padding:8px 12px; margin-bottom:12px; }
.ai-focus-head { display:flex; align-items:center; justify-content:space-between; gap:8px; margin-bottom:6px; padding-bottom:5px; border-bottom:1px dashed var(--line); }
.ai-focus-head .ttl { font-family:'Noto Serif SC', serif; font-size:12px; font-weight:700; color:var(--ink); display:flex; align-items:center; gap:5px; }
/* 顶部 AI 标识：统一使用站内 .tg 风格（浅底深字 + 4px 圆角 + 9px/600） */
.ai-focus-head .ttl .tag { display:inline-flex; align-items:center; gap:3px; padding:1px 6px; font-size:9px; font-weight:600; border-radius:var(--r); background:var(--accent-weak); color:var(--accent); letter-spacing:normal; text-transform:none; }
.ai-focus-head .meta { font-size:9px; color:var(--ink-faint); display:flex; align-items:center; gap:8px; }
.ai-focus-head .regen { background:var(--paper-alt); border:1px solid var(--line); color:var(--ink); font-size:9px; font-weight:600; padding:3px 8px; border-radius:var(--r); cursor:pointer; letter-spacing:0.2px; transition:all .15s; }
.ai-focus-head .regen:hover:not(:disabled) { background:var(--accent); color:#fff; border-color:var(--accent); }
.ai-focus-head .regen:disabled { opacity:0.5; cursor:not-allowed; }
/* AI 分析列表：单卡片内 5 条，每条一行（紧凑版） */
.ai-focus-list { display:flex; flex-direction:column; }
.ai-focus-item { padding:4px 0; border-bottom:1px dashed var(--line); display:flex; align-items:center; gap:8px; font-size:11px; line-height:1.4; white-space:nowrap; overflow:hidden; }
.ai-focus-item:last-child { border-bottom:none; }
.ai-focus-item:first-child { padding-top:2px; }

/* 严重度徽章 */
.ai-focus-item .sev-badge { display:inline-flex; align-items:center; padding:1px 6px; font-size:9px; font-weight:600; border-radius:var(--r); flex-shrink:0; }
.ai-focus-item.sev-critical .sev-badge { background:var(--bad-soft); color:var(--bad); }
.ai-focus-item.sev-warning  .sev-badge { background:var(--warn-soft); color:var(--warn); }
.ai-focus-item.sev-info     .sev-badge { background:var(--accent-weak); color:var(--accent); }

.ai-focus-item .f-ttl { font-weight:700; color:var(--ink); flex-shrink:0; max-width:180px; overflow:hidden; text-overflow:ellipsis; }
.ai-focus-item .f-dtl { color:var(--ink-muted); flex:1; min-width:0; overflow:hidden; text-overflow:ellipsis; font-size:10px; }
.ai-focus-item .f-sug { color:var(--ink-soft); display:inline-flex; align-items:center; gap:4px; flex-shrink:0; max-width:200px; overflow:hidden; font-size:10px; }
.ai-focus-item .f-sug .lb { display:inline-flex; align-items:center; padding:1px 5px; font-size:8px; font-weight:600; border-radius:var(--r); background:#f1f5f9; color:var(--ink-muted); flex-shrink:0; }
.ai-focus-item .f-sug > span:last-child { overflow:hidden; text-overflow:ellipsis; }

/* 整条 hover 显示完整内容 */
.ai-focus-item:hover { background:var(--paper-alt); border-radius:var(--r); padding-left:4px; padding-right:4px; margin-left:-4px; margin-right:-4px; }
.ai-focus-item[title] { cursor:help; }
.ai-focus-empty { padding:14px; text-align:center; color:var(--ink-faint); font-size:10px; }
.ai-focus-loading { padding:14px; text-align:center; color:var(--ink-muted); font-size:10px; }
.ai-focus-loading::before { content:""; display:inline-block; width:10px; height:10px; margin-right:6px; border:2px solid var(--accent-weak); border-top-color:var(--accent); border-radius:50%; vertical-align:middle; animation:aiSpin 0.8s linear infinite; }
@keyframes aiSpin { to { transform:rotate(360deg); } }

/* ====================================================================
 * v2.23.x: 缺数据提醒横幅 — 首页 / 板块 / BU 三页共用
 *   单行布局；溢出横向滚动；按 BU 分组列出当期无数据的模块
 * ==================================================================== */
.mdb { margin:0 0 10px; padding:8px 12px; background:var(--warn-soft); border:1px solid var(--warn); border-radius:var(--r); font-size:12px; color:var(--ink); display:flex; align-items:center; gap:10px; overflow-x:auto; white-space:nowrap; }
.mdb .mdb-icon { font-size:14px; line-height:1; flex-shrink:0; }
.mdb .mdb-body { flex:1; line-height:1.5; display:flex; align-items:center; gap:10px; min-width:0; }
.mdb .mdb-title { font-weight:700; color:var(--warn); flex-shrink:0; }
.mdb .mdb-group { display:inline-flex; align-items:center; gap:4px; padding-left:8px; border-left:1px dashed var(--warn); }
.mdb .mdb-group strong { font-weight:600; color:var(--ink-soft); font-size:11px; }
.mdb .mdb-tag { display:inline-block; padding:1px 7px; background:#fff; border:1px solid var(--warn); border-radius:var(--r); font-family:'JetBrains Mono', monospace; font-size:10px; color:var(--warn); font-weight:600; letter-spacing:0.3px; }

/* v2.20.3: 板块级 chip — 全齐绿色 / 缺交琥珀 */
.mdb .mdb-summary { font-size:10px; color:var(--ink-muted); flex-shrink:0; padding-right:8px; border-right:1px dashed var(--warn); }
.mdb .mdb-sec-chip { display:inline-flex; align-items:center; gap:4px; padding:2px 8px; border-radius:var(--r); font-family:'JetBrains Mono', monospace; font-size:11px; font-weight:700; letter-spacing:0.3px; flex-shrink:0; }
.mdb .mdb-sec-chip em { font-style:normal; font-weight:600; opacity:0.75; font-size:10px; }
.mdb .mdb-sec-chip.ok { background:var(--ok-soft, #e7f4ec); color:var(--ok, #15803d); border:1px solid var(--ok, #15803d); }
.mdb .mdb-sec-chip.miss { background:#fff; color:var(--warn); border:1px solid var(--warn); cursor:pointer; transition:background .12s; }
.mdb .mdb-sec-chip.miss:hover { background:var(--warn-soft); }
.mdb .mdb-sec-chip.miss.expanded { background:var(--warn-soft); }
.mdb .mdb-sec-chip .mdb-sec-detail { display:inline-flex; align-items:center; gap:4px; margin-left:6px; padding-left:6px; border-left:1px solid var(--warn); }

/* ====================================================================
 * v2.19: 板块/BU 页公共组件（原页面内联，迁入此处去重）
 * ==================================================================== */

/* 副标题栏 sector-code 着色（sector.html 显示板块码；bu.html 显示 BU/模块码）*/
.masthead-title .sector-code { color: var(--accent); }

/* 面包屑 */
.bread-top { font-size: 11px; color: var(--ink-muted); margin-bottom: 4px; }
.bread-top a { color: var(--ink-muted); text-decoration: none; cursor: pointer; }
.bread-top a:hover { color: var(--accent); }
.bread-top .sep { color: var(--ink-faint); margin: 0 4px; }
.bread-top .current { color: var(--ink); font-weight: 600; }

/* live-dot */
.live-dot { display: inline-block; width: 5px; height: 5px; border-radius: 50%; background: var(--ok); animation: pulse 2s infinite; vertical-align: middle; margin-right: 4px; }

/* 额外栅格与图表 */
.grid-5 { grid-template-columns: repeat(5, 1fr); }

/* BU 分组容器与卡片（02 区块） */
#buGroupContainer { display: grid; grid-template-columns: repeat(2, 1fr); gap: var(--gap-card); }
.bu-group { background: var(--paper-card); border: 1px solid var(--line); border-radius: var(--r); padding: 12px; }
.bu-group-header { display: flex; align-items: center; gap: 6px; margin-bottom: 8px; padding-bottom: 6px; border-bottom: 1px solid var(--line-strong); }
.bu-group-header .bu-code { font-weight: 700; font-size: 13px; color: var(--ink); }
.bu-group-header .bu-tag { font-size: 9px; padding: 1px 6px; background: var(--accent-weak); color: var(--accent); letter-spacing: 0.8px; font-weight: 600; border-radius: var(--r); }
.bu-group-header .bu-count { font-size: 10px; color: var(--ink-muted); }

/* BU 卡片内容（.bu-panel-*）*/
.bu-panel-val { font-family:'Noto Serif SC', serif; font-weight:900; font-size:20px; color:var(--ink); line-height:1.1; }
.bu-panel-val .unit { font-size:10px; }
.bu-panel-delta { display:flex; gap:10px; font-size:10px; margin-top:4px; }
.bu-panel-foot { display:flex; align-items:flex-end; justify-content:space-between; margin-top:6px; gap:8px; }
.bu-panel-spark { height:32px; flex:1; min-width:60px; max-width:140px; }
.bu-panel-profit { font-size:11px; color:var(--ink-soft); font-family:'JetBrains Mono', monospace; }
.bu-panel-bs { margin-top:8px; padding-top:6px; border-top:1px dashed var(--line); font-size:10px; color:var(--ink-muted); font-family:'JetBrains Mono', monospace; letter-spacing:0.3px; }
/* v2.20: BU 卡片 — 主信息（左） + YTD/EOY（右）双栏布局 */
.bu-panel-row { display:flex; gap:12px; align-items:stretch; }
.bu-panel-main { flex:1; min-width:0; }
.bu-panel-side { flex:0 0 auto; min-width:120px; padding-left:10px; border-left:1px dashed var(--line); display:flex; flex-direction:column; gap:6px; }
.bu-panel-side .yt-block { display:flex; flex-direction:column; gap:1px; }
.bu-panel-side .yt-tag { font-weight:700; color:var(--accent); font-size:9px; letter-spacing:0.8px; margin-bottom:2px; }
.bu-panel-side .yt-tag.eoy { color:var(--accent-mid); }
.bu-panel-side .yt-line { display:flex; justify-content:space-between; gap:6px; font-size:10px; font-family:'JetBrains Mono', monospace; color:var(--ink-soft); line-height:1.3; }
.bu-panel-side .yt-line .lbl { color:var(--ink-faint); font-weight:500; }

/* 01 板块经营快照：两行 (当月 / YTD) 之间的小分隔标签 */
.kpi-row-label {
  font-size:10px; color:var(--ink-muted); letter-spacing:1px; text-transform:uppercase;
  font-weight:700; margin-bottom:6px;
}

/* ===== 02 BU 经营总览 · 一行 2 张 BU 卡片（合并趋势 + 完成情况）· 紧凑版 ===== */
body[data-page="sector"] #buGroupContainer { display:grid; grid-template-columns:repeat(2, 1fr); gap:10px; }
body[data-page="sector"] #buGroupContainer .bu-row-card { padding:10px 12px; min-width:0; }
.bu-row-card { display:flex; flex-direction:column; gap:8px; }

/* 顶部头 */
.bu-row-card .bu-row-head { display:flex; align-items:center; gap:8px; padding-bottom:5px; border-bottom:1px solid var(--line-strong); }
.bu-row-card .bu-row-head .bu-tag { font-size:8px; padding:1px 5px; background:var(--accent-weak); color:var(--accent); letter-spacing:0.6px; font-weight:700; border-radius:var(--r); }
.bu-row-card .bu-row-head .bu-code { font-weight:700; font-size:13px; color:var(--ink); cursor:pointer; font-family:'JetBrains Mono', monospace; }
.bu-row-card .bu-row-head .bu-code:hover { color:var(--accent); }
.bu-row-card .bu-row-head .bu-count { font-size:9px; color:var(--ink-muted); }
.bu-row-card .bu-row-head .bu-row-mgr { font-size:9px; color:var(--ink-muted); padding-left:6px; border-left:1px dashed var(--line); }
.bu-row-card .bu-row-head .bu-row-link { margin-left:auto; font-size:10px; color:var(--accent); cursor:pointer; font-weight:600; letter-spacing:0.3px; }
.bu-row-card .bu-row-head .bu-row-link:hover { text-decoration:underline; }

/* 关键指标行：5 格 */
.bu-row-stats { display:grid; grid-template-columns:repeat(5, 1fr); gap:6px; padding:2px 0; }
.bu-row-stats .brs-cell { display:flex; flex-direction:column; gap:1px; padding:4px 8px; background:var(--paper-alt); border-radius:var(--r); }
.bu-row-stats .brs-lbl { font-size:8px; color:var(--ink-faint); letter-spacing:0.5px; font-weight:600; text-transform:uppercase; }
.bu-row-stats .brs-val { font-family:'Noto Serif SC', serif; font-weight:900; font-size:14px; color:var(--ink); line-height:1.1; }
.bu-row-stats .brs-val.pos { color:var(--ok); }
.bu-row-stats .brs-val.neg { color:var(--bad); }
.bu-row-stats .brs-val .unit { font-size:8px; color:var(--ink-muted); font-weight:500; margin-left:2px; font-family:'Inter', sans-serif; }

/* 主体：左 趋势（2/3） | 右 完成情况（1/3） */
.bu-row-card .bu-row-body { display:grid; grid-template-columns: 2fr 1fr; gap:14px; align-items:start; }
.bu-row-card .bu-row-section { display:flex; flex-direction:column; gap:4px; min-width:0; }
.bu-row-card .bu-row-sec-head { font-size:9px; color:var(--ink-muted); letter-spacing:1.2px; text-transform:uppercase; font-weight:600; padding-bottom:2px; border-bottom:1px dashed var(--line); }
.bu-trend-spark { height:160px; margin-top:2px; }
.bu-row-card .bu-comp-stack { display:flex; flex-direction:column; gap:8px; }

/* ≤1400px：每张卡片变得窄，body 内 trend/comp 上下堆叠避免拥挤 */
@media (max-width: 1400px) {
  .bu-row-card .bu-row-body { grid-template-columns:1fr; gap:10px; }
}
/* ≤1100px：stats 5 格变 3 格；BU 容器仍保持 2 列 */
@media (max-width: 1100px) {
  .bu-row-stats { grid-template-columns:repeat(3, 1fr); }
}
/* ≤800px：BU 容器回落到 1 列，每张卡占满整行 */
@media (max-width: 800px) {
  body[data-page="sector"] #buGroupContainer { grid-template-columns:1fr; }
  .bu-row-stats { grid-template-columns:repeat(2, 1fr); }
  .bu-row-card .bu-row-body { grid-template-columns:2fr 1fr; gap:14px; }
}
@media (max-width: 500px) {
  .bu-row-card .bu-row-body { grid-template-columns:1fr; }
}

/* 卡底说明 */
.bu-row-card .bu-row-desc { font-size:9px; color:var(--ink-muted); padding-top:4px; border-top:1px dashed var(--line); }
/* 完成情况：2 个指标块（收入 / 利润），每块 3 条紧靠的横条（YTD / EOY / 目标），同一刻度对比 */
/* 完成情况：每指标 3 条横条（YTD 实心 / EOY 虚框 / 目标 实框），同刻度对比 · 紧凑 */
.bc-metric-block { display:flex; flex-direction:column; gap:2px; font-size:10px; }
.bc-metric-head { display:flex; align-items:baseline; justify-content:space-between; gap:6px; font-size:10px; color:var(--ink); font-weight:700; letter-spacing:0.3px; margin-bottom:3px; padding-bottom:2px; border-bottom:1px solid var(--line); }
.bc-gap { font-family:'JetBrains Mono', monospace; font-size:9px; font-weight:600; letter-spacing:0.2px; }
.bc-gap.pos { color:var(--ok); }
.bc-gap.neg { color:var(--bad); }
.bc-bar-row { display:grid; grid-template-columns: 28px 1fr 100px; align-items:center; gap:6px; }
.bc-bar-label { font-size:8px; color:var(--ink-faint); letter-spacing:0.5px; font-weight:700; text-transform:uppercase; }
.bc-bar-track { height:8px; position:relative; }
.bc-bar { height:100%; border-radius:2px; transition:width .3s ease; box-sizing:border-box; }
/* YTD：实心填充（已实现）— 统一蓝色 */
.bc-bar-ytd,
.bc-bar-ytd.ok,
.bc-bar-ytd.warn,
.bc-bar-ytd.bad,
.bc-bar-ytd.neutral { background:var(--accent); }
/* EOY：虚框（预测/未确定） */
.bc-bar-eoy { background:transparent; border:1.5px dashed currentColor; }
.bc-bar-eoy.ok { color:var(--ok); }
.bc-bar-eoy.warn { color:var(--warn); }
.bc-bar-eoy.bad { color:var(--bad); }
.bc-bar-eoy.neutral { color:var(--ink-faint); }
/* 目标：实框（基准对比线） */
.bc-bar-tgt { background:var(--accent-08); border:1.5px solid var(--accent); }
.bc-bar-val { font-family:'JetBrains Mono', monospace; font-size:9px; color:var(--ink-soft); text-align:right; white-space:nowrap; }
.bc-bar-val .bc-u { font-size:7px; color:var(--ink-faint); margin-left:2px; font-weight:500; }
.bc-bar-val .bc-pct { margin-right:5px; font-weight:700; font-size:9px; }
.bc-pct.ok { color:var(--ok); }
.bc-pct.warn { color:var(--warn); }
.bc-pct.bad { color:var(--bad); }
.bu-comp-empty { padding:18px 8px; text-align:center; color:var(--ink-faint); font-size:11px; }

/* 整页 Tab 栏（BU 多模块 / MODULE 多父 模式显示，统一 sector 版样式）*/
.page-tabs { display:none; padding:10px 24px; background:var(--paper); border-bottom:1px solid var(--line); gap:8px; flex-wrap:wrap; align-items:center; }
.page-tabs.visible { display:flex; }
.page-tabs .pt-label { font-size:10px; color:var(--ink-faint); letter-spacing:1.5px; text-transform:uppercase; font-weight:700; margin-right:6px; }
.page-tab { height:28px; padding:4px 14px; font:600 12px 'Inter', sans-serif; color:var(--ink-muted); background:var(--paper-card); border:1px solid var(--line); border-radius:var(--r); cursor:pointer; letter-spacing:0.3px; white-space:nowrap; transition:background .12s, color .12s, border-color .12s; }
.page-tab:hover { background:var(--paper-alt); color:var(--ink); }
.page-tab.active { background:var(--accent-soft); color:var(--accent); border-color:var(--accent); font-weight:700; }
.page-tab.overview { letter-spacing:0.5px; }

/* 三视图切换（概览 / 详情 / 目标）*/
.view-switch { display:flex; gap:6px; padding:8px 24px; background:var(--paper); border-bottom:1px solid var(--line); }
.view-switch .vs-btn, #viewSwitch .vs-btn { height:30px; padding:4px 18px; font:600 12px 'Inter', sans-serif; color:var(--ink-muted); background:var(--paper-card); border:1px solid var(--line); border-radius:var(--r); cursor:pointer; letter-spacing:0.5px; transition:background .12s, color .12s, border-color .12s; }
.view-switch .vs-btn:hover, #viewSwitch .vs-btn:hover { background:var(--paper-alt); color:var(--ink); }
.view-switch .vs-btn.active, #viewSwitch .vs-btn.active { background:var(--ink); color:#fff; border-color:var(--ink); font-weight:700; }

/* 单模块关键指标网格（v2.9：替代 05 表格）*/
.module-kpi-grid { display:none; grid-template-columns:repeat(4, 1fr); gap:var(--gap-card); }
.module-kpi-grid.visible { display:grid; }
.module-kpi-card { padding:14px; border:1px solid var(--line); border-radius:var(--r); background:var(--paper-card); }
.module-kpi-card .mk-label { font-size:10px; text-transform:uppercase; color:var(--ink-muted); letter-spacing:1px; font-weight:600; margin-bottom:6px; }
.module-kpi-card .mk-val { font-family:'Noto Serif SC', serif; font-size:20px; font-weight:900; color:var(--ink); line-height:1.1; }
.module-kpi-card .mk-val .unit { font-size:10px; }
.module-kpi-card .mk-delta { display:flex; gap:10px; font-size:10px; margin-top:6px; }

/* 数据表（BU 分组）*/
.data-table { width: 100%; border-collapse: collapse; font-size: 11px; }
.data-table thead th { font-size: 9px; letter-spacing: 0.8px; color: var(--ink-muted); text-transform: uppercase; font-weight: 700; padding: 6px 10px; text-align: right; border-bottom: 1px solid var(--accent); background: var(--paper-alt); white-space: nowrap; cursor: pointer; user-select: none; }
.data-table thead th.l { text-align: left; }
.data-table tbody td { padding: 5px 10px; text-align: right; border-bottom: 1px solid var(--line); font-family: 'JetBrains Mono', monospace; font-weight: 500; vertical-align: middle; }
.data-table tbody td.l { text-align: left; font-family: 'Inter', sans-serif; font-weight: 500; }
.data-table tbody tr { cursor: pointer; }
.data-table tbody tr:hover td { background: var(--paper-alt); }
.data-table tbody tr.bu-subtotal td { font-weight: 700; font-size: 10px; background: var(--paper-alt); border-top: 1px solid var(--line-strong); cursor: default; }
.data-table tbody tr.bu-subtotal td:first-child { padding-left: 10px; }
.data-table tfoot td { font-weight: 700; font-size: 11px; background: var(--accent-weak); border-top: 1px solid var(--accent); text-align: right; padding: 6px 10px; font-family: 'JetBrains Mono', monospace; }

/* 工具按钮 */
.btn-export { font: 11px 'Inter', sans-serif; font-weight: 600; padding: 0 12px; background: var(--accent); color: white; border: none; border-radius: var(--r); height: 26px; cursor: pointer; letter-spacing: 0.5px; }

/* v2.9：BU/module 模式下，02 区块只显示当前 BU 卡片 */
body[data-page-mode="bu"] .bu-group:not([data-bu]),
body[data-page-mode="module"] .bu-group:not([data-bu]) { display:none; }
body[data-page-mode="bu"] #buGroupContainer,
body[data-page-mode="bu-single"] #buGroupContainer,
body[data-page-mode="module"] #buGroupContainer { grid-template-columns:1fr; }

/* 板块/BU 页的响应式 */
@media (max-width: 1199px) {
  .module-kpi-grid { grid-template-columns:repeat(2,1fr); }
}
@media (max-width: 768px) {
  .grid-4 { grid-template-columns: 1fr; }
  #buGroupContainer { grid-template-columns: 1fr; }
  .page-tabs { overflow-x:auto; flex-wrap:nowrap; padding:8px 12px; }
  .module-kpi-grid { grid-template-columns: 1fr; }
}

/* ===== 无障碍 + 减弱动效（v2.22） ===== */
/* 键盘焦点：用品牌色描边代替默认浏览器轮廓，覆盖按钮 / 链接 / 表单 / 卡片可点击区 */
button:focus-visible,
a:focus-visible,
select:focus-visible,
input:focus-visible,
textarea:focus-visible,
[tabindex]:focus-visible,
.card:focus-within {
  outline: 2px solid var(--accent);
  outline-offset: 2px;
  border-radius: var(--r);
}

/* 用户开启「减弱动效」时，关闭所有装饰性动画与过渡 */
@media (prefers-reduced-motion: reduce) {
  *, *::before, *::after {
    animation-duration: 0.001ms !important;
    animation-iteration-count: 1 !important;
    transition-duration: 0.001ms !important;
    scroll-behavior: auto !important;
  }
}
