/* 数据看板、帖子数据、号健康（xm/stats/admin.py；模板 templates/admin/xm/stats_{dashboard,health,poststat_list}.html）。
   复用 theme.css 的 .wb-stat 数字卡、.tbl 表格、.wb-field / .wb-button 控件，pages.css 的 .xm-pane 卡片、.xm-lead、.ops-ell、.ops-empty、.xm-link。
   颜色只用 theme.css 已有的 --wb-* / --surface-2 变量（深浅色跟着变量走，不另写 .dark）。
   网格列一律 minmax(0,1fr)；≤ 760（中台手机断点）数字卡两列、表格在自己的框里横滑、可点的不小于 44px、字号不小于 12px，页面不横向溢出（前端红线 §38）。
   板块高度写死：切筛选、三态（有数据 / 没数据 / 读取失败）之间每块的位置和高度不变（§35、§37）；会变长的字只占一行，超出省略，悬停看全文（§40）。 */

.xm-stats { display:grid; grid-template-columns:minmax(0,1fr); gap:var(--wb-sp-6); min-width:0; }
.xm-stats > .xm-lead { margin:0; }

/* ---------- 筛选条：下拉、日期快捷、自选日期、查看；最下面一行定高的说明 / 提示 ---------- */
.xm-stats-filter { display:flex; flex-wrap:wrap; align-items:flex-end; gap:var(--wb-sp-4) var(--wb-sp-5); min-width:0; margin:0; }
.xm-stats-field { display:flex; flex-direction:column; gap:var(--wb-sp-1); flex:1 1 10rem; min-width:0; max-width:16rem; }
.xm-stats-field > span { color:var(--wb-secondary); font-size:var(--wb-fs-aux); font-weight:600; line-height:1.5; } /* 同 pages.css .xm-act-field 的标签 */
.xm-stats-field .wb-field { width:100%; }
.xm-stats-date { flex:0 1 10rem; }
.xm-stats-date .wb-field { min-width:9.5rem; } /* 「2026-11-11」显示得全（§40） */
.xm-stats-filter-err { display:flex; align-items:center; flex:1 1 20rem; min-height:var(--wb-control-height); color:var(--wb-danger); font-size:var(--wb-fs-aux); }
.xm-stats-seg { display:inline-flex; flex:none; gap:2px; padding:var(--wb-sp-1); border-radius:8px; background:var(--surface-2); } /* 同 theme.css .seg */
.xm-stats-seg a { display:inline-flex; align-items:center; justify-content:center; min-height:28px; padding:0 var(--wb-sp-5); border-radius:6px; color:var(--wb-secondary); font-size:var(--wb-fs-aux); font-weight:500; white-space:nowrap; text-decoration:none; }
.xm-stats-seg a:hover { color:var(--wb-ink); }
.xm-stats-seg a[aria-current] { background:var(--wb-surface); color:var(--wb-blue); font-weight:600; box-shadow:0 1px 3px var(--wb-ring-2); }
.xm-stats-note { flex:1 0 100%; min-width:0; height:18px; margin:0; line-height:18px; color:var(--wb-secondary); font-size:var(--wb-fs-aux); white-space:nowrap; overflow:hidden; text-overflow:ellipsis; }
.xm-stats-note.is-bad { color:var(--wb-warning); font-weight:600; }

/* ---------- 「这段时间（MM-DD 到 MM-DD）」+ 右上「数据最近更新」：宽屏一行，手机两行（不随字长短折行跳动） ---------- */
.xm-stats-head { display:flex; align-items:baseline; justify-content:space-between; gap:var(--wb-sp-3) var(--wb-sp-6); min-width:0; }
.xm-stats-head h2 { flex:0 1 auto; min-width:0; color:var(--wb-ink); font-size:var(--wb-fs-h2); font-weight:650; line-height:24px; white-space:nowrap; overflow:hidden; text-overflow:ellipsis; }
.xm-stats-fresh { flex:0 1 auto; min-width:0; margin:0; color:var(--wb-secondary); font-size:var(--wb-fs-aux); line-height:18px; white-space:nowrap; overflow:hidden; text-overflow:ellipsis; }

/* ---------- 5 张数字卡（theme.css 第 15 节 .wb-stat）：三种状态都是三行单行字，高度一样 ---------- */
.xm-stats-kpis { grid-template-columns:repeat(5,minmax(0,1fr)); }
.xm-stats-kpi { min-height:112px; }
.xm-stats-kpi .wb-stat-val { overflow:hidden; text-overflow:ellipsis; } /* 特别大的数不撑出卡片（悬停看全数） */
.xm-stats-kpi .xm-stats-retry { position:relative; overflow:visible; color:var(--wb-blue); text-decoration:underline; }
.xm-stats-kpi .xm-stats-retry::before { content:""; position:absolute; inset:-13px -8px; } /* 点击区补到 44px，不撑高卡片 */

/* ---------- 卡片：图卡、表卡（pages.css .xm-pane） ---------- */
.xm-stats-pane { gap:var(--wb-sp-4); }
.xm-stats-pane > .xm-link { align-self:flex-start; }
.xm-stats-pane .xm-pane-side { min-width:0; overflow:hidden; text-overflow:ellipsis; }
.xm-stats-err b { color:var(--wb-danger); font-weight:650; }

/* 趋势图：图区定高；加载中 / 画好了 / 加载不出来 / 没数据 / 读取失败 由 data-state 切，字压在图区里，高度不变 */
.xm-chart { position:relative; height:240px; min-width:0; }
.xm-chart-msg { display:none; position:absolute; inset:0; flex-direction:column; align-items:center; justify-content:center; gap:var(--wb-sp-2); margin:0; padding:var(--wb-sp-6); color:var(--wb-secondary); font-size:var(--wb-fs-body); text-align:center; overflow-wrap:anywhere; }
.xm-chart[data-state="loading"] .xm-chart-msg[data-for="loading"],
.xm-chart[data-state="fail"] .xm-chart-msg[data-for="fail"],
.xm-chart[data-state="empty"] .xm-chart-msg[data-for="empty"],
.xm-chart[data-state="error"] .xm-chart-msg[data-for="error"] { display:flex; }
.xm-chart[data-state="fail"] canvas { visibility:hidden; }
.xm-chart-note { height:18px; margin:0; line-height:18px; color:var(--wb-secondary); font-size:var(--wb-fs-aux); white-space:nowrap; overflow:hidden; text-overflow:ellipsis; }

/* 表格：在自己的框里横滑（§38），列宽固定（换数据不跳），长字单行省略；没数据 / 读取失败的字压在表身上 */
.xm-stats-tbl { position:relative; max-width:100%; overflow-x:auto; -webkit-overflow-scrolling:touch; overscroll-behavior-x:contain; border:1px solid var(--wb-line); border-radius:12px; }
.xm-stats-tbl .tbl { table-layout:fixed; }
.xm-stats-tbl .tbl td { max-width:none; }
.xm-stats-tbl .tbl .is-num { text-align:right; font-variant-numeric:tabular-nums; }
.xm-stats-tbl .tbl tr.is-blank:hover td { background:transparent; }
.xm-stats-tbl .tbl a { color:var(--wb-blue); }
.xm-stats-over { position:absolute; z-index:1; inset:var(--wb-th-h) 0 0; display:flex; flex-direction:column; align-items:center; justify-content:center; gap:var(--wb-sp-2); margin:0; padding:var(--wb-sp-6); background:var(--wb-surface); color:var(--wb-secondary); font-size:var(--wb-fs-body); text-align:center; overflow-wrap:anywhere; }
/* 号健康两张表：表框定高（含上下 1px 边框），行多了在框里滚、表头钉在顶上；号多号少、空态、出错态，板块高度都一样（§35） */
.xm-stats-tbl-min { height:calc(var(--wb-th-h) + 5 * 40px + 2px); overflow:auto; }
.xm-stats-tbl-min.is-tall { height:calc(var(--wb-th-h) + 10 * 40px + 2px); }
.xm-stats-line { height:18px; margin:0; line-height:18px; color:var(--wb-secondary); font-size:var(--wb-fs-aux); white-space:nowrap; overflow:hidden; text-overflow:ellipsis; }
.xm-stats-reason, .xm-stats-status { display:flex; align-items:center; gap:var(--wb-sp-3); min-width:0; }
.xm-stats-reason > .wb-badge, .xm-stats-status > .wb-badge { flex:none; }
.xm-stats-status > .ops-ell { color:var(--wb-secondary); } /* 「要重连」旁边那句怎么处理：同一行，单行省略、悬停看全文（§40），行高不变 */

/* 数据看板「曝光最高的 10 条」：发帖时间、号、正文（占剩下的）、曝光、互动、来源、X 链接（「在 X 上看」） */
.xm-top-tbl { min-width:820px; }
.xm-top-tbl th:nth-child(1) { width:7.5rem; }
.xm-top-tbl th:nth-child(2) { width:10rem; }
.xm-top-tbl th:nth-child(4), .xm-top-tbl th:nth-child(5) { width:6.5rem; }
.xm-top-tbl th:nth-child(6) { width:8rem; }
.xm-top-tbl th:nth-child(7) { width:6.5rem; }
/* 数据看板「按号汇总」（Issue #67）：号（占剩下的，号名是链接；最小宽度下 16 个字的号名也放得下，§40）、曝光、互动、帖子数。
   曝光（排序依据）紧跟号名：390 宽下表框里不横滑也能看到号和曝光
   表框用 .xm-stats-tbl-min.is-tall（同前 10 条的 10 行高），号多了在框里滚，板块高度不随号数变（§35） */
.xm-by-account-tbl { min-width:480px; }
.xm-by-account-tbl th:nth-child(2) { width:8rem; }
.xm-by-account-tbl th:nth-child(3) { width:7rem; }
.xm-by-account-tbl th:nth-child(4) { width:6rem; }
/* 号健康：按失败原因（原因占剩下的）、每个号（号名是链接；「现在的状态」放得下标签 + 「要去 OpenTweet 重连」） */
.xm-reason-tbl { min-width:640px; }
.xm-reason-tbl th:nth-child(2) { width:6rem; }
.xm-reason-tbl th:nth-child(3) { width:22rem; }
.xm-account-tbl { min-width:1056px; }
.xm-account-tbl th:nth-child(1) { width:10rem; }
.xm-account-tbl th:nth-child(2), .xm-account-tbl th:nth-child(3) { width:8rem; }
.xm-account-tbl th:nth-child(4) { width:13rem; }
.xm-account-tbl th:nth-child(5), .xm-account-tbl th:nth-child(8) { width:7rem; }
.xm-account-tbl th:nth-child(6) { width:7.5rem; }

/* ---------- 帖子数据列表（Unfold 列表页 #result_list） ---------- */
#result_list :is(td, th).field-posted_at { font-family:var(--mono); font-variant-numeric:tabular-nums; }
#result_list :is(td, th):is(.field-impressions_n, .field-likes_n, .field-retweets_n, .field-replies_n) { font-variant-numeric:tabular-nums; }

/* ---------- 断点 ---------- */
@media(max-width:1100px) {
  .xm-stats-kpis { grid-template-columns:repeat(3,minmax(0,1fr)); }
}
@media(max-width:760px) {
  .xm-stats-field, .xm-stats-date { flex:1 1 calc(50% - var(--wb-sp-5)); max-width:none; }
  .xm-stats-date .wb-field { min-width:0; }
  .xm-stats-seg { flex:1 1 100%; }
  .xm-stats-seg a { flex:1 1 0; min-height:44px; }
  .xm-stats-filter > .wb-button { flex:1 1 100%; }
  .xm-stats-head { flex-direction:column; align-items:flex-start; gap:2px; }
  .xm-stats-head h2, .xm-stats-fresh { max-width:100%; }
  .xm-stats-kpis { grid-template-columns:repeat(2,minmax(0,1fr)); gap:var(--wb-sp-5); }
  .xm-stats-kpi { padding:var(--wb-sp-5); }
  .xm-stats-kpi .wb-stat-val { font-size:20px; }
  .xm-chart { height:220px; }
  .xm-stats-tbl .tbl a, #result_list td.field-source_cell a { display:inline-flex; align-items:center; min-height:44px; }
  .xm-top-tbl td { height:52px; padding-top:0; padding-bottom:0; } /* 每行都是 52：有 44 高链接的行和空行一样高，10 行的表高度不随数据变 */
  .xm-top-tbl a { vertical-align:middle; } /* 不按基线对齐，链接下面不多出几像素 */
  .xm-account-tbl a.ops-ell, .xm-by-account-tbl a.ops-ell { display:block; line-height:44px; } /* 号名链接 44 高、照旧单行省略；每行都有号名，表框定高，行高一样（§35） */
}
