/* 各页的排版（UNFOLD["STYLES"] 全站挂载）：写帖、批量排期、MCP key、评论辅助、素材库、列表页手机段（审稿 rv-*、导览 ov-* 两段是原型留下的，现在没有页面用）。
   颜色一律用 theme.css 里的 --sm-* 名字，它们都指到 TG 监控中台的 --wb-* token（深浅色已在那边分好，这里不再写 .dark 两份）。
   卡片、表格、提示条的样子照中台 workboard.css：卡片 .wb-card（细环形描边 + 柔和阴影 + 圆角 18）、表头 .tbl th（36 高、--subtle 底）、.notice.warn。
   板块高度一律写死：切稿、挑素材、换浅深色时位置和高度不变。 */

.ops-ell { display: block; min-width: 0; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
.ops-line { border-top: 1px solid var(--sm-line); }
.ops-num { font-size: 28px; font-weight: 600; line-height: 32px; letter-spacing: -0.02em; font-variant-numeric: tabular-nums; color: var(--sm-ink); }
/* 卡片身子（Unfold card 组件里的 .grow）放不下时自己滚，不撑高卡片 */
.ops-card { min-width: 0; min-height: 0; height: 100%; }
.ops-card > .grow { min-height: 0; overflow-y: auto; }
.ops-empty { height: 100%; min-height: 160px; display: flex; flex-direction: column; align-items: center; justify-content: center; gap: 8px; padding: 16px; text-align: center; color: var(--sm-ink-2); }
.ops-empty .material-symbols-outlined { font-size: 32px; color: var(--sm-ink-2); }
/* 平台小方块（原型 .sm-plat：浅灰液态玻璃方块；Unfold 没有平台图标，用两个字母代替品牌图标） */
.ops-plat { flex: 0 0 auto; display: inline-grid; place-items: center; min-width: 22px; height: 22px; padding: 0 4px; border: 1px solid var(--sm-plat-edge); border-radius: 7px; background: var(--sm-plat-bg); box-shadow: var(--sm-plat-shadow); color: var(--sm-plat-ink); font-size: 12px; font-weight: 600; line-height: 1; }
/* 提交中的按钮 */
.ops-page button:disabled, .ops-page a[aria-disabled="true"] { pointer-events: none; }
/* 卡里的小格（原型 .sm-sub：比卡片亮一档的填充，不靠线框）；模板上 Unfold 的 bg-base-50 / dark:bg-white/[.02] 在这里换掉 */
.rv-caption, .rv-ruler, .rv-more { border-radius: 12px; background: var(--sm-glass-sub) !important; }

/* ======================= 审稿 ======================= */
.rv-top { display: flex; flex-wrap: wrap; align-items: center; gap: 8px 16px; margin-bottom: 16px; }
/* 页签：原型分段控件（灰轨道圆角 10，选中白块 + 轻阴影；计数是小胶囊） */
.rv-tabs { gap: 2px !important; padding: 2px !important; border-radius: 10px !important; background: var(--sm-dock-bg) !important; color: var(--sm-dock-ink) !important; }
.rv-tabs > a { min-height: 32px; gap: 6px !important; padding: 0 12px 0 14px !important; border-radius: 8px !important; color: var(--sm-dock-ink); transition: background-color 120ms cubic-bezier(.2, .8, .2, 1); }
.rv-tabs > a:hover { background: var(--sm-dock-hover) !important; }
.rv-tabs > a.active, .rv-tabs > a.active:hover { background: var(--sm-sel-bg) !important; box-shadow: var(--sm-sel-shadow) !important; }
/* 计数是 Unfold label：选择器要压过 theme.css 第 12 节的徽章规则 */
.rv-tabs > a > span, .ops-page .rv-tabs > a > span[class~="text-[11px]"][class~="uppercase"][class~="whitespace-nowrap"] { min-width: 20px; height: 18px !important; padding: 0 6px !important; border-radius: 999px !important; display: inline-grid !important; place-items: center; background: var(--sm-dock-count-bg) !important; color: inherit !important; font-weight: 600 !important; font-variant-numeric: tabular-nums; }
.rv-tabs > a > span::before { display: none !important; }
.rv-tabs > a.active > span, .ops-page .rv-tabs > a.active > span[class~="text-[11px]"][class~="uppercase"][class~="whitespace-nowrap"] { background: var(--sm-dock-count-on) !important; }
/* 页签右边固定一行高：平时放说明，操作后换成提示条，三栏不往下挪 */
.rv-msg { flex: 1 1 320px; min-width: 0; height: 40px; display: flex; align-items: center; }
.rv-msg > div { margin: 0 !important; max-width: 100%; min-height: 36px !important; padding-top: 6px !important; padding-bottom: 6px !important; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
.rv-msg > div:not(:last-child) { display: none; }
.rv-msg > p { color: var(--sm-head-ink-2); }

.rv-board { display: grid; grid-template-columns: minmax(0, 1fr); gap: 16px; }
.rv-side { display: flex; flex-direction: column; gap: 16px; min-width: 0; min-height: 0; }
/* ≥ 1280：三栏，一屏放下（板高 = 视口 − 窗边 12 − 顶栏 56 − 间距 20 − 页签行 56 − 底 16 − 窗边 12） */
@media (min-width: 1280px) {
  .rv-board { grid-template-columns: minmax(0, 300px) minmax(0, 1fr) minmax(0, 340px); height: max(600px, calc(100vh - 172px)); }
  .rv-machine { flex: 1 1 0; }
  .rv-act { flex: 0 0 360px; }
}
/* < 1280：一栏，从上到下 列表 → 稿件 → 机器审核 → 审这篇，每块定高 */
@media (max-width: 1279.98px) {
  .rv-list { height: 380px; }
  .rv-detail { height: 600px; }
  .rv-machine { height: 300px; }
  .rv-act { height: 360px; }
}

/* 左栏：稿件列表（原型 .rv-item：卡里小格，选中 = 白块 + 轻阴影） */
.rv-items { display: flex; flex-direction: column; gap: 8px; }
.rv-item { display: flex; flex-direction: column; gap: 4px; padding: 12px 14px; border-radius: 12px; background: var(--sm-glass-sub); color: var(--sm-ink); transition: background-color 200ms cubic-bezier(.2, .8, .2, 1); }
.rv-item:hover { background: var(--sm-glass-lift-hover); }
.rv-item.is-sel, .rv-item.is-sel:hover { background: var(--sm-sel-bg); box-shadow: var(--sm-sel-shadow); }
.rv-item-top { display: flex; align-items: center; gap: 8px; min-width: 0; font-size: 12px; line-height: 18px; }
.rv-item-top .ops-ell { flex: 1 1 auto; }
.rv-time { flex: 0 0 auto; font-variant-numeric: tabular-nums; }
.rv-tags { display: flex; flex-wrap: wrap; align-items: center; gap: 8px; min-width: 0; font-size: 12px; }

/* 中栏：稿件。标题行放不下时档位徽章换到第二行，不被卡片裁掉 */
.rv-detail > div:first-child { flex-wrap: wrap; gap: 6px 12px; }
.rv-dh { display: flex; align-items: center; gap: 8px; min-width: 0; }
.rv-detail .flex-col:has(> h2) { min-width: 0; }
.rv-post { display: flex; flex-direction: column; gap: 12px; }
/* 配图示意：原型 .sm-post-card（深色底、白字大标题） */
.rv-visual { flex: 0 0 auto; height: 148px; display: flex; flex-direction: column; align-items: center; justify-content: center; gap: 6px; padding: 12px 16px; text-align: center; border-radius: 12px; background: var(--sm-post-bg); }
.rv-visual p { color: var(--sm-post-ink) !important; }
.rv-visual p:first-child { padding: 2px 10px; border: 1px solid var(--sm-post-line); border-radius: 999px; font-weight: 500; }
.rv-visual .text-lg { font-size: 26px; line-height: 1.2; letter-spacing: -0.02em; }
.rv-caption { display: flex; flex-direction: column; gap: 8px; padding: 14px 16px; }
.rv-cap-head { display: flex; flex-wrap: wrap; align-items: center; gap: 8px; min-width: 0; }
.rv-cap-text { white-space: pre-line; line-height: 22px; }
.rv-edit textarea { max-width: none; min-height: 150px; }
.rv-edit-acts { display: flex; flex-wrap: wrap; gap: 8px; }

/* 展开区：写稿依据 / 审核明细（原生 details，不用脚本） */
.rv-more > summary { list-style: none; display: flex; align-items: center; gap: 8px; min-height: 44px; padding: 0 14px; border-radius: 12px; cursor: pointer; font-size: 13px; font-weight: 500 !important; }
.rv-more > summary::-webkit-details-marker { display: none; }
.rv-more > summary .material-symbols-outlined { font-size: 20px; color: var(--sm-ink-2); transition: transform 120ms cubic-bezier(.2, .8, .2, 1); }
.rv-more[open] > summary .material-symbols-outlined { transform: rotate(90deg); }
.rv-more-side { margin-left: auto; min-width: 0; font-size: 12px; font-weight: 500; }
.rv-more-body { display: flex; flex-direction: column; gap: 6px; padding: 0 14px 12px; }
.rv-refs li { display: flex; align-items: center; gap: 6px; line-height: 22px; }
.rv-refs .material-symbols-outlined { font-size: 18px; color: var(--sm-ink-2); }
.rv-r { display: flex; align-items: center; justify-content: space-between; gap: 10px; min-height: 36px; padding: 4px 0; }
.rv-r:first-of-type { border-top: 0; }
.rv-r > :first-child { min-width: 0; }
.rv-r > :last-child { flex: 0 0 auto; }
.rv-grp-h { padding-top: 6px; font-size: 12px; font-weight: 500; }

/* 右栏：机器审核（7 档刻度：格子是刻度不是按钮，当前档才填主按钮色） */
.rv-cur { display: flex; align-items: baseline; gap: 6px; white-space: nowrap; font-size: 13px; font-weight: 500; }
.rv-ruler { display: flex; flex-direction: column; gap: 8px; padding: 12px 14px; margin-bottom: 12px; }
.rv-scale { display: flex; align-items: flex-start; gap: 6px; }
.rv-grp { flex: 4 1 0; min-width: 0; display: flex; flex-direction: column; gap: 6px; }
.rv-grp-hi { flex: 3 1 0; }
.rv-cells { display: grid; gap: 4px; }
.rv-cells-4 { grid-template-columns: repeat(4, minmax(0, 1fr)); }
.rv-cells-3 { grid-template-columns: repeat(3, minmax(0, 1fr)); }
.rv-cell { height: 28px; display: grid; place-items: center; border-radius: 8px; font-size: 12px; font-weight: 500; font-variant-numeric: tabular-nums; color: var(--sm-ink-2); box-shadow: inset 0 0 0 1px var(--sm-line-2); }
.rv-grp-hi .rv-cell { background: var(--sm-mute-bg); box-shadow: none; }
.rv-cell.is-cur, .rv-grp-hi .rv-cell.is-cur { background: var(--sm-primary-bg); color: var(--sm-primary-ink); font-weight: 600; box-shadow: none; }
.rv-divider { flex: 0 0 2px; height: 36px; margin-top: -4px; border-radius: 1px; background: var(--sm-ink); }
.rv-grp-l { font-size: 12px; font-weight: 500; line-height: 18px; white-space: nowrap; color: var(--sm-ink-2); }
.rv-grp-ok { align-self: flex-end; color: var(--sm-ok-ink); }

/* 右栏：审这篇 */
.rv-act-body { display: flex; flex-direction: column; gap: 8px; }
.rv-hint { min-height: 20px; font-size: 12px; line-height: 20px; }
.rv-hint.is-block { color: var(--sm-bad-ink); }
.rv-btn { width: 100%; min-height: 44px; }
.rv-acts2 { display: grid; grid-template-columns: repeat(2, minmax(0, 1fr)); gap: 8px; margin-bottom: 12px; }
.rv-act label { display: block; margin-bottom: 6px; font-size: 13px; }
.rv-act input[type="text"] { max-width: none; min-height: 40px; }
.rv-done { display: flex; flex-direction: column; align-items: flex-start; gap: 8px; }

/* ======================= 导览 ======================= */
.ov-sub { margin-bottom: 16px; color: var(--sm-head-ink-2); }
.ov-grid { display: grid; grid-template-columns: minmax(0, 1fr); gap: 16px; grid-template-areas: "bal" "todo" "quad" "chart" "prog"; }
.ov-bal { grid-area: bal; } .ov-todo { grid-area: todo; } .ov-prog { grid-area: prog; } .ov-quad { grid-area: quad; } .ov-chart { grid-area: chart; }
/* ≥ 1280：三列两排（第一排 待审稿 · 今天要做的事占两列；第二排 发帖进度 · 4 个数字 · 近 7 天注册） */
@media (min-width: 1280px) {
  .ov-grid { grid-template-columns: repeat(3, minmax(0, 1fr)); grid-template-rows: 448px 384px; grid-template-areas: "bal todo todo" "prog quad chart"; }
}
@media (min-width: 900px) and (max-width: 1279.98px) {
  .ov-grid { grid-template-columns: repeat(2, minmax(0, 1fr)); grid-template-rows: 384px 448px 384px; grid-template-areas: "bal quad" "todo todo" "prog chart"; }
}
@media (max-width: 899.98px) {
  .ov-bal { height: 392px; } .ov-todo { height: 560px; } .ov-quad { height: 300px; } .ov-chart { height: 380px; } .ov-prog { height: 400px; }
}

/* 待审稿：重点块（原型 .ov-hero：--accent-grad 渐变 + 白字；浅色青绿、深色桃橙棕）里放「8 篇」+ 最早要发 + 两颗按钮；下面各产品三行 */
.ov-hero { display: flex; flex-direction: column; gap: 12px; padding: 14px 16px 16px; margin-bottom: 16px; border-radius: 12px !important; background: var(--sm-accent-grad) !important; color: var(--sm-accent-ink) !important; box-shadow: var(--sm-accent-edge); }
.ov-big-row { display: flex; flex-wrap: wrap; align-items: center; justify-content: space-between; gap: 8px; }
.ov-big { display: flex; align-items: baseline; gap: 6px; }
.ov-big .ops-num { color: inherit; }
/* 「最早要发」：白色实心小胶囊里放状态（原型 .ov-chip） */
.ov-big-row > span, .ov-page .ov-big-row > span[class~="text-[11px]"][class~="uppercase"][class~="whitespace-nowrap"] { min-height: 28px; padding: 0 12px !important; border-radius: 999px !important; background: var(--sm-solid-bg) !important; color: var(--sm-solid-ink) !important; }
.ov-acts { display: grid; grid-template-columns: repeat(2, minmax(0, 1fr)); gap: 8px; }
.ov-acts > * { min-height: 40px; }
/* 重点块上的次按钮：实心白（深色是实心暖棕），原型 .ov-btn-light */
.ov-page .ov-hero .ov-acts > :nth-child(2), .ov-page .ov-hero .ov-acts > :nth-child(2):hover { background: var(--sm-solid-bg); color: var(--sm-solid-ink); }
.ov-w-head { display: flex; align-items: baseline; gap: 8px; padding-bottom: 6px; font-size: 12px; }
.ov-w { display: grid; grid-template-columns: minmax(0, 1fr) auto minmax(64px, auto); align-items: center; gap: 12px; min-height: 36px; }
.ov-w > :last-child { justify-self: end; }

/* 今天要做的事：表格（原型 .sm-table：表头 36 高、表头底色、12/500 次要色；行间细线）；手机改成一行一张小卡 */
/* 表格贴满卡片左右（-mx-6），卡身不做滚动容器，否则负边距被裁；行数固定 5 行，放得下 */
.ov-todo > .grow { overflow: visible; }
.ov-todo > .grow > [class~="-mt-6"] { margin-top: 0; } /* 卡头已改成原型的无分隔线 + 下距 12，表格不再往上顶 */
.ov-tbl { width: 100%; table-layout: fixed; border-collapse: collapse; }
.ov-tbl thead tr { background: var(--sm-table-head) !important; }
.ov-tbl th { height: 36px; padding: 0 8px; text-align: left; font-size: 12px; font-weight: 500; white-space: nowrap; color: var(--sm-ink-2); }
.ov-tbl td { height: 50px; padding: 0 8px; vertical-align: middle; }
.ov-tbl th:first-child, .ov-tbl td:first-child { padding-left: 12px; }
.ov-tbl th:last-child, .ov-tbl td:last-child { padding-right: 24px; }
.ov-tbl tbody td { border-top: 1px solid var(--sm-line); }
.ov-tbl thead th { border-top: 0; }
.ov-c-check { width: 60px; }
.ov-c-time { width: 60px; }
.ov-c-src { width: 136px; }
.ov-c-st { width: 96px; }
.ov-c-act { width: 112px; text-align: right !important; }
/* 「做完」：点击区 44，看得见的是原型 .sm-check 的 20px 方框（模板里的图标字隐藏，方框和勾画在伪元素上） */
.ov-check { position: relative; display: grid; place-items: center; width: 44px; height: 44px; border-radius: 10px; color: transparent; cursor: pointer; }
.ov-check .material-symbols-outlined { font-size: 0; }
.ov-check::before { content: ""; position: absolute; left: 12px; top: 12px; width: 20px; height: 20px; border-radius: 6px; border: 1.5px solid var(--sm-input-line); background: var(--sm-glass-mini); box-sizing: border-box; transition: background-color 120ms cubic-bezier(.2, .8, .2, 1), border-color 120ms cubic-bezier(.2, .8, .2, 1); }
.ov-check:hover::before { border-color: var(--sm-ink-2); }
.ov-check[aria-checked="true"]::before { border-color: transparent; background: var(--sm-primary-bg); }
.ov-check[aria-checked="true"]::after { content: ""; position: absolute; left: 15px; top: 15px; width: 14px; height: 14px; background: var(--sm-primary-ink);
  -webkit-mask: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='%23000' stroke-width='3' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='M20 6 9 17l-5-5'/%3E%3C/svg%3E") center / 14px 14px no-repeat;
  mask: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='%23000' stroke-width='3' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='M20 6 9 17l-5-5'/%3E%3C/svg%3E") center / 14px 14px no-repeat; }
.ov-tr.is-done .ov-text { text-decoration: line-through; color: var(--sm-ink-2); }
.ov-st-done, .ov-tr.is-done .ov-st-open { display: none; }
.ov-tr.is-done .ov-st-done { display: inline-block; }
.ov-go-btn { min-height: 36px; }

/* 4 个数字：2×2 小卡（原型 .sm-stat：标签 14/500 次要色 + 右上 32 圆图标），能点的跳到对应页 */
.ov-quad { display: grid; grid-template-columns: repeat(2, minmax(0, 1fr)); grid-template-rows: repeat(2, minmax(0, 1fr)); gap: 16px; min-height: 0; }
.ov-quad > * { min-height: 0; }
.ov-stat { height: 100%; padding: 16px !important; }
.ov-stat > .grow { display: flex; flex-direction: column; min-height: 0; }
.ov-stat-top { display: flex; align-items: center; justify-content: space-between; gap: 6px; min-width: 0; height: 32px; }
.ov-stat-ic { flex: 0 0 auto; display: flex; align-items: center; gap: 2px; color: var(--sm-ink); }
.ov-stat-ic .material-symbols-outlined { font-size: 20px; }
.ov-stat-ic .material-symbols-outlined:first-child { width: 32px; height: 32px; display: grid; place-items: center; border-radius: 50%; background: var(--sm-glass-mini); box-shadow: var(--sm-shadow-ic); font-size: 18px; }
.ov-stat-v { margin-top: auto; display: flex; align-items: baseline; gap: 8px; }
.ov-delta { display: flex; align-items: center; gap: 4px; font-size: 12px; line-height: 18px; white-space: nowrap; overflow: hidden; }
.ov-up { color: var(--sm-ok-ink); font-weight: 600; }
.ov-down { color: var(--sm-bad-ink); font-weight: 600; }

/* 近 7 天注册：图例在图右上，图定高（柱色照原型 --chart-mint 注册 / --chart-ink 其中付费） */
.ov-chart-top { display: flex; flex-wrap: wrap; align-items: center; justify-content: space-between; gap: 4px 12px; margin-bottom: 8px; font-size: 12px; }
.ov-key { display: flex; gap: 12px; }
.ov-key > span { display: inline-flex; align-items: center; gap: 6px; }
.ov-key i { width: 10px; height: 10px; border-radius: 2px; }
.ov-sw-reg { background: var(--sm-chart-mint); }
.ov-sw-paid { background: var(--sm-chart-ink); }
.ov-canvas { height: 220px; }

/* 本周发帖进度 + 各号状态 */
.ov-prog-num { display: flex; flex-wrap: wrap; align-items: baseline; gap: 4px 8px; margin-bottom: 10px; }
.ov-prog-meta { margin-top: 10px; font-size: 12px; line-height: 18px; }
.ov-prog-today { margin: 2px 0 12px; line-height: 20px; }
.ov-acc { display: flex; align-items: center; justify-content: space-between; gap: 8px; min-height: 40px; }

/* ======================= 手机（< 768） ======================= */
@media (max-width: 767.98px) {
  /* 点击区不小于 44px */
  .ops-page .rv-tabs > a, .rv-btn, .ov-go-btn, .ov-acts > *, .rv-edit-acts > *, .rv-act input[type="text"] { min-height: 44px; }
  .rv-tabs { width: 100%; }
  .rv-tabs > a { flex: 1 1 0; justify-content: center; }
  .rv-msg { flex-basis: 100%; }
  .ov-tbl, .ov-tbl tbody { display: block; }
  .ov-tbl thead { display: none; }
  .ov-tr { display: grid; grid-template-columns: 44px auto minmax(0, 1fr) auto; grid-template-areas: "c tm sr a" "c tx tx a" "c st st a"; align-items: center; column-gap: 8px; padding: 8px 0; border-top: 1px solid var(--sm-line); }
  .ov-tr:first-child { border-top: 0; }
  .ov-tbl td, .ov-tbl tbody td, .ov-tbl td:first-child, .ov-tbl td:last-child { display: block; width: auto; height: auto; padding: 0; border: 0; }
  .ov-tbl tbody { padding: 0 16px; }
  .ov-c-check { grid-area: c; }
  .ov-c-time { grid-area: tm; font-size: 12px; }
  .ov-c-src { grid-area: sr; font-size: 12px; min-width: 0; }
  .ov-text-cell { grid-area: tx; min-width: 0; }
  .ov-c-st { grid-area: st; }
  .ov-c-act { grid-area: a; }
}

/* 后台列表页：格子不折行，表格在自己的框里左右滑（前端红线 §38）；长文字单行省略，悬停看全文（§40） */
#result_list th, #result_list td { white-space: nowrap; }
.xm-cell-ell { display: inline-block; max-width: 16rem; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; vertical-align: bottom; }

/* 详情页带输入框的按钮（通过并排期、退回）：输入框有最小宽度，时间值显示得全；手机上整行排，点击区 44px（前端红线 §38、§40） */
.xm-act-form { display: flex; flex-wrap: wrap; align-items: flex-end; gap: 8px; flex: 0 1 28rem; min-width: 0; }
.xm-act-field { display: flex; flex-direction: column; gap: 4px; flex: 1 1 14rem; min-width: 14rem; }
.xm-act-field > span:first-child { color: var(--wb-secondary); font-size: var(--wb-fs-aux); font-weight: 600; line-height: 1.5; } /* 中台 .field label（workboard.css:363） */
div:has(> .xm-act-form) { align-items: flex-end; } /* 没输入框的按钮和带输入框的按钮底边对齐 */
.xm-acts-note { flex-basis: 100%; margin: 0; font-size: 13px; line-height: 20px; color: var(--sm-ink-2); } /* 按钮那一行下面的说明，占满一行（OT key 详情页，Issue #146） */
@media (max-width: 767.98px) {
  .xm-act-form { flex-basis: 100%; }
  .xm-act-field { min-width: 0; flex-basis: 12rem; }
  .xm-act-form :is(input, textarea, button) { min-height: 44px; }
  .xm-acts button { min-height: 44px; } /* 不带输入框的按钮也一样，触控目标不小于 44px */
}

/* 详情页按钮的下拉框（号详情页「分到产品线」「分给人员」）：手机上触控高度同输入框 */
@media (max-width: 767.98px) {
  .xm-act-form select { min-height: 44px; }
}

/* ======================= 素材库（T5：xm/assets/admin.py） ======================= */
/* 列表页：图片缩略图 / 类型图标，固定 40px；「能不能发」能发绿字、不能发红字（单行省略，悬停看全文） */
.xm-thumb { width: 40px; height: 40px; border-radius: 8px; object-fit: cover; display: inline-grid; place-items: center; vertical-align: middle; background: var(--sm-mute-bg); }
.xm-thumb-ic { font-size: 22px; color: var(--sm-ink-2); }
.xm-ok { color: var(--sm-ok-ink); }
.xm-bad { color: var(--sm-bad-ink); }
/* 详情页预览：图片、视频不超过卡片宽，定最大高 */
.xm-asset-pv { display: block; max-width: min(100%, 480px); max-height: 360px; border-radius: 12px; background: var(--sm-mute-bg); }
.xm-asset-audio { display: block; width: min(100%, 480px); }

/* ======================= 写帖页三栏（T5，POST-1：templates/admin/xm/post_form.html、compose.js） ======================= */
/* DOM 顺序 中、左、右。< 768：一栏竖排 中 → 左 → 右；768–1279：中栏占一整行，左、右并排在下面；≥ 1280：左、中、右三栏。
   左、右两栏定高，里面自己滚：挑素材、筛选、换号、写正文时板块位置和高度不变（前端红线 §35） */
.xm-compose { display: grid; grid-template-columns: minmax(0, 1fr); grid-template-areas: "mid" "left" "right"; gap: 16px; align-items: start; }
.xm-cp-mid { grid-area: mid; min-width: 0; display: flex; flex-direction: column; gap: 24px; }
.xm-cp-mid :is(input, select, textarea) { max-width: none; }
.xm-cp-left { grid-area: left; height: 560px; }
.xm-cp-right { grid-area: right; height: 440px; }
@media (min-width: 768px) and (max-width: 1279.98px) {
  .xm-compose { grid-template-columns: repeat(2, minmax(0, 1fr)); grid-template-areas: "mid mid" "left right"; }
  .xm-cp-left, .xm-cp-right { height: 560px; }
}
@media (min-width: 1280px) {
  .xm-compose { grid-template-columns: minmax(0, 290px) minmax(0, 1fr) minmax(0, 310px); grid-template-areas: "left mid right"; }
  .xm-cp-left, .xm-cp-right { height: 640px; }
}
.xm-pane { min-width: 0; min-height: 0; display: flex; flex-direction: column; gap: 8px; padding: 16px; border: 1px solid transparent; border-radius: var(--wb-radius); background: var(--wb-surface); box-shadow: 0 0 0 1px var(--wb-ring), 0 1px 2px var(--wb-ring), 0 14px 28px -18px var(--wb-shadow-2); } /* 中台 .wb-card */
.xm-pane-head { flex: 0 0 auto; display: flex; align-items: baseline; justify-content: space-between; gap: 8px; min-height: 24px; }
.xm-pane-head h2 { font-size: 15px; line-height: 20px; font-weight: 600; color: var(--sm-ink); }
.xm-pane-side { font-size: 12px; line-height: 18px; white-space: nowrap; font-variant-numeric: tabular-nums; color: var(--sm-ink-2); }
.xm-sr { position: absolute; width: 1px; height: 1px; padding: 0; margin: -1px; overflow: hidden; clip: rect(0 0 0 0); white-space: nowrap; border: 0; }
/* 正文框下的加权字数：超了变红 */
.xm-count { font-variant-numeric: tabular-nums; color: var(--sm-ink-2); }
.xm-count.is-over { color: var(--sm-bad-ink); font-weight: 600; }

/* 左栏：类型、分组两个下拉框 + 搜索；提示一行定高；列表自己滚；底下「显示 N / 共 M」一行定高。
   工具条放得下（左栏内宽约 416px 以上）就排一行；放不下（三栏时左栏内宽约 256px、手机宽度）两个下拉框一行、搜索框换到第二行占满，
   「全部类型」「全部分组」和搜索框占位字不被截。控件高 44px（前端红线 §38） */
.xm-pick-tools { flex: 0 0 auto; display: flex; flex-wrap: wrap; gap: 8px; }
.xm-pick-kind { position: relative; display: block; flex: 1 1 7.5rem; min-width: 0; }
.xm-pick-tools > input { flex: 999 1 10rem; }
.xm-pick-caret { position: absolute; right: 10px; top: 50%; transform: translateY(-50%); pointer-events: none; font-size: 18px; color: var(--sm-ink-2); }
.xm-pick-tools :is(input, select) { min-width: 0; max-width: none; min-height: 44px; }
.xm-pick-msg { flex: 0 0 auto; height: 20px; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; font-size: 12px; line-height: 20px; color: var(--sm-bad-ink); }
.xm-pick-list { flex: 1 1 0; min-height: 0; overflow-y: auto; display: flex; flex-direction: column; gap: 6px; margin: 0 -4px; padding: 2px 4px; }
.xm-pick { flex: 0 0 auto; display: grid; grid-template-columns: 48px minmax(0, 1fr) 24px; align-items: center; gap: 10px; min-height: 60px; padding: 6px 8px; border-radius: 12px; background: var(--sm-glass-sub); color: var(--sm-ink); text-align: left; cursor: pointer; transition: background-color 120ms cubic-bezier(.2, .8, .2, 1); }
.xm-pick:hover { background: var(--sm-glass-lift-hover); }
.xm-pick:focus-visible { outline: 2px solid var(--sm-focus); outline-offset: 1px; }
.xm-pick.is-sel, .xm-pick.is-sel:hover { background: var(--sm-sel-bg); box-shadow: var(--sm-sel-shadow), inset 0 0 0 2px var(--sm-focus); }
.xm-pick[aria-disabled="true"] { cursor: not-allowed; opacity: 0.6; }
.xm-pick[aria-disabled="true"]:hover { background: var(--sm-glass-sub); }
.xm-pick[aria-disabled="true"] .xm-pick-meta { color: var(--sm-bad-ink); }
.xm-pick[hidden], .xm-pick-empty[hidden], .xm-link[hidden] { display: none; }
.xm-pick-thumb { width: 48px; height: 48px; display: grid; place-items: center; overflow: hidden; border-radius: 8px; background: var(--sm-mute-bg); }
.xm-pick-thumb img { width: 100%; height: 100%; object-fit: cover; }
.xm-pick-thumb .material-symbols-outlined { font-size: 24px; color: var(--sm-ink-2); }
.xm-pick-body { min-width: 0; display: flex; flex-direction: column; gap: 2px; }
.xm-pick-name { font-size: 13px; line-height: 18px; font-weight: 500; }
.xm-pick-meta { font-size: 12px; line-height: 16px; color: var(--sm-ink-2); }
.xm-pick-no { width: 24px; height: 24px; display: grid; place-items: center; border-radius: 50%; font-size: 12px; font-weight: 600; font-variant-numeric: tabular-nums; }
.xm-pick.is-sel .xm-pick-no { background: var(--sm-primary-bg); color: var(--sm-primary-ink); }
.xm-pick-empty { flex: 1 1 auto; display: flex; flex-direction: column; align-items: center; justify-content: center; gap: 4px; padding: 16px; text-align: center; font-size: 13px; line-height: 20px; color: var(--sm-ink-2); }
.xm-pick-empty .material-symbols-outlined { font-size: 32px; }
.xm-link { display: inline-flex; align-items: center; min-height: 44px; color: var(--sm-accent-solid); text-decoration: underline; }
/* 提示条里的操作链接（PostAdmin._write_again、_draft_saved）和提示词页句中的「本页下方」共用：
   上下各补 13px、负边距抵掉，点击区 ≥ 44px（前端红线 §38），不撑高所在的行 */
.xm-msg-link, .xm-pt-intro-jump { display: inline-block; padding: 13px 0; margin: -13px 0; color: var(--sm-accent-solid); text-decoration: underline; white-space: nowrap; }
.xm-pick-foot { flex: 0 0 auto; height: 18px; font-size: 12px; line-height: 18px; font-variant-numeric: tabular-nums; color: var(--sm-ink-2); }
/* 左栏提示行的普通提示（上传进度、「已上传并选上」）是灰字；出错、没选上照旧红字 */
.xm-pick-msg.is-note { color: var(--sm-ink-2); }
/* 左栏「上传」（交互优化清单第 11 条）在标题行右边：宽屏 36px 高、手机 44px（§38）。用负外边距收进标题行原来的 24px，
   标题行不变高、不折行，左右两栏的内容顶部照旧对齐 */
.xm-cp-left .xm-pane-head { align-items: center; }
.xm-cp-left .xm-pane-head h2 { margin-right: auto; }
.xm-pane-head .xm-pick-up { flex: 0 0 auto; height: 36px; margin: -6px 0; padding-top: 0; padding-bottom: 0; }
.xm-pick-up .material-symbols-outlined { font-size: 18px; }
.xm-pick-up:disabled { cursor: not-allowed; opacity: 0.5; }
@media (max-width: 767.98px) {
  .xm-pane-head .xm-pick-up { height: 44px; margin: -12px 0 -8px; }
}
/* 左栏上传说明（能上传的人员才有）：标题行下常驻一行写单个文件上限，不随状态出现、消失；占的是列表的高度，左栏总高不变（§35）。
   放不下单行省略（.ops-ell），悬停看全文（title，§40）；上限写在最前面，省略时也看得到 */
.xm-pick-hint { flex: 0 0 auto; height: 18px; font-size: 12px; line-height: 18px; color: var(--sm-ink-2); }
/* 把文件拖进左栏时：虚线框标出能松手的地方（只画轮廓，不占位置） */
.xm-cp-left.is-drop { outline: 2px dashed var(--sm-focus); outline-offset: -2px; }
/* 列表末尾：状态块（正在查 / 没查到 + 重试，样子同空状态）、「加载更多」（整行宽、44px 高）。几种状态都在列表区里，左栏高度不变（§35、§37） */
.xm-pick-state { flex: 1 1 auto; display: flex; flex-direction: column; align-items: center; justify-content: center; gap: 4px; padding: 16px; text-align: center; font-size: 13px; line-height: 20px; color: var(--sm-ink-2); }
.xm-pick-state .material-symbols-outlined { font-size: 32px; }
.xm-pick-state.is-bad { color: var(--sm-bad-ink); }
.xm-pick-empty p, .xm-pick-state p { max-width: 100%; overflow-wrap: anywhere; } /* 很长的搜索词也不撑出栏外 */
.xm-pick-retry { min-height: 44px; margin-top: 4px; }
.xm-pick-more { flex: 0 0 auto; width: 100%; min-height: 44px; }
.xm-pick-more[aria-disabled="true"] { cursor: not-allowed; opacity: 0.6; }
.xm-pick-state[hidden], .xm-pick-retry[hidden], .xm-pick-more[hidden] { display: none; }

/* 右栏：预览（正文保留换行；已选素材：多张图两列，视频、音频显示图标和文件名） */
.xm-pv-note { flex: 0 0 auto; font-size: 12px; line-height: 18px; color: var(--sm-ink-2); }
.xm-pv { flex: 1 1 0; min-height: 0; overflow-y: auto; display: flex; flex-direction: column; gap: 10px; padding: 14px; border-radius: 12px; background: var(--sm-glass-sub); }
.xm-pv-who { flex: 0 0 auto; font-size: 13px; line-height: 18px; font-weight: 600; color: var(--sm-ink); }
.xm-pv-text { white-space: pre-wrap; overflow-wrap: anywhere; font-size: 14px; line-height: 22px; color: var(--sm-ink); }
.xm-pv-text.is-empty { color: var(--sm-ink-2); }
.xm-pv-media { display: grid; grid-template-columns: minmax(0, 1fr); gap: 4px; }
.xm-pv-media.is-grid { grid-template-columns: repeat(2, minmax(0, 1fr)); }
.xm-pv-item { min-width: 0; overflow: hidden; border-radius: 10px; background: var(--sm-mute-bg); aspect-ratio: 16 / 9; }
.xm-pv-media.is-grid .xm-pv-item { aspect-ratio: 1 / 1; }
.xm-pv-item img { display: block; width: 100%; height: 100%; object-fit: cover; }
.xm-pv-item.is-file { aspect-ratio: auto; display: flex; align-items: center; gap: 8px; min-height: 44px; padding: 8px 10px; font-size: 13px; color: var(--sm-ink); }
.xm-pv-item.is-file .material-symbols-outlined { flex: 0 0 auto; font-size: 20px; color: var(--sm-ink-2); }
/* 串帖预览：每条一块，标「1/3」「2/3」…（只有一条时不标）；素材只挂第一条，第二条那块旁边写一次「第二条起不能带素材」 */
.xm-pv-part { display: flex; flex-direction: column; gap: 8px; min-width: 0; }
.xm-pv-part + .xm-pv-part { padding-top: 10px; border-top: 1px solid var(--sm-line); }
.xm-pv-no { display: flex; flex-wrap: wrap; align-items: baseline; gap: 2px 8px; font-size: 12px; line-height: 18px; font-weight: 600; font-variant-numeric: tabular-nums; color: var(--sm-ink-2); }
.xm-pv-nomedia { font-weight: 400; }
.xm-pv-no[hidden], .xm-pv-nomedia[hidden] { display: none; }

/* 新增页的号：勾选列表（admin/xm/post_accounts.html，一稿多号 POST-14）。「搜号」框和「已选 N 个号」一行；列表定高、自己滚，
   号多时不撑高页面，勾号、搜号时框的高度不变（前端红线 §35）；每行 44px，用户名、产品线名单行省略，悬停看全文（§38、§40）；下面提示一行定高 */
.xm-acc { display: flex; flex-direction: column; gap: 8px; min-width: 0; }
.xm-acc-tools { display: flex; align-items: center; gap: 8px; }
.xm-acc-tools > input { flex: 1 1 auto; min-width: 0; max-width: none; min-height: 44px; }
.xm-acc-list { height: 196px; overflow-y: auto; overscroll-behavior: contain; display: flex; flex-direction: column; gap: 2px; padding: 4px; border-radius: 12px; background: var(--sm-glass-sub); }
.xm-acc-item { flex: 0 0 auto; display: grid; grid-template-columns: 16px minmax(0, 1fr) auto; align-items: center; gap: 10px; min-height: 44px; padding: 0 10px; border-radius: 10px; color: var(--sm-ink); cursor: pointer; }
.xm-acc-item:hover { background: var(--sm-glass-lift-hover); }
.xm-acc-item:has(input:checked) { background: var(--sm-sel-bg); }
.xm-acc-item:has(input:focus-visible) { outline: 2px solid var(--sm-focus); outline-offset: -2px; }
.xm-acc-item[hidden], .xm-acc-empty[hidden] { display: none; }
.xm-acc-name { font-size: 13px; line-height: 18px; font-weight: 500; }
.xm-acc-line { max-width: 9rem; font-size: 12px; line-height: 16px; color: var(--sm-ink-2); }
.xm-acc-empty { margin: auto; padding: 16px; font-size: 13px; line-height: 20px; text-align: center; color: var(--sm-ink-2); }
.xm-acc-msg { height: 18px; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; font-size: 12px; line-height: 18px; color: var(--sm-bad-ink); }

/* 新增页「AI 改写」下面「这次按哪套提示词改写」（admin/xm/post_rewrite_prompts.html、rewrite-prompts.js，Issue #73）。
   不改写时整行（Unfold 的 .field-rewrite_prompts，含标签）不占位置：看骨架 data-xm-rp-box 的 hidden（服务端先藏着），只管写帖页中栏这一行。
   说明里「我的提示词」借 .xm-msg-link（点击区 44px）；每个勾的号一行 44px：号名 | 「用原文，不改写」/「默认写法」/ 下拉框，两列各一半（minmax(0, 1fr)），
   放不下时号名单行省略、悬停看全文（§40），下拉框不被挤窄；下拉框借左栏的外框和箭头（.xm-pick-kind、.xm-pick-caret），高 44px（§38）。
   列表定高、自己滚，号多时不撑高页面，勾号时框的高度不变（照 .xm-acc-list，§35） */
.xm-cp-mid .field-rewrite_prompts:has([data-xm-rp-box][hidden]) { display: none; }
.xm-rwp-box { display: flex; flex-direction: column; gap: 8px; min-width: 0; }
.xm-rwp-note { font-size: 13px; line-height: 18px; color: var(--sm-ink-2); }
.xm-rwp-note .material-symbols-outlined { margin-left: 2px; font-size: 14px; vertical-align: -2px; }
.xm-rwp-box > [data-xm-rp] { height: 196px; overflow-y: auto; overscroll-behavior: contain; display: flex; flex-direction: column; gap: 2px; padding: 4px; border-radius: 12px; background: var(--sm-glass-sub); }
.xm-rwp-row { flex: 0 0 auto; display: grid; grid-template-columns: minmax(0, 1fr) minmax(0, 1fr); align-items: center; gap: 10px; min-height: 44px; padding: 0 10px; border-radius: 10px; color: var(--sm-ink); }
.xm-rwp-name { font-size: 13px; line-height: 18px; font-weight: 500; }
.xm-rwp-fixed { font-size: 12px; line-height: 18px; color: var(--sm-ink-2); }
.xm-rwp-sel { width: 100%; min-width: 0; min-height: 44px; }
.xm-rwp-box[hidden], .xm-rwp-note[hidden], .xm-rwp-fixed[hidden], .xm-rwp-pick[hidden] { display: none; }
/* 目标帖详情页「写评论稿」号列表下面同一个骨架「这次按哪套提示词写」（Issue #74）：上面几条照用；框里多一行小标题，字同「帖子正文」那种表单标签 */
.xm-tp-write .xm-rwp-h { font-size: 14px; line-height: 20px; font-weight: 600; color: var(--sm-ink); }

/* 正文框下的串帖编辑区（admin/xm/post_thread.html，POST-18）：每条「第 n 条」+「删掉这一条」一行、文本框、加权字数（超了变红）；
   「加一条（串帖）」「删掉这一条」点击区 44px（§38）；到上限时「加一条」禁用，旁边写明上限 */
.xm-thread { display: flex; flex-direction: column; gap: 12px; min-width: 0; }
.xm-thread-list { display: flex; flex-direction: column; gap: 12px; }
.xm-thread-list:empty { display: none; }
.xm-thread-part { display: flex; flex-direction: column; gap: 6px; min-width: 0; }
.xm-thread-head { display: flex; align-items: center; justify-content: space-between; gap: 8px; }
.xm-thread-label { font-size: 13px; line-height: 18px; font-weight: 600; color: var(--sm-ink); }
.xm-thread-btn { min-height: 44px; }
.xm-thread-btn:disabled { cursor: not-allowed; opacity: 0.5; }
.xm-thread-btn .material-symbols-outlined { font-size: 18px; }
.xm-thread-del { color: var(--sm-ink-2); }
.xm-thread-foot { display: flex; flex-wrap: wrap; align-items: center; gap: 8px 12px; }
.xm-thread-note { font-size: 12px; line-height: 18px; color: var(--sm-ink-2); }
/* 时间框下的快捷按钮（共用片段 admin/xm/publish_time.html + publish-time.js；本文件全站挂载，审核弹窗、批量排期页引用片段也有样式）：
   一行放不下整齐换行，按钮不缩、字不折成竖排；点击区 44px、字号 14px（前端红线 §38） */
.xm-when-row { display: flex; flex-wrap: wrap; gap: 8px; min-width: 0; margin-top: 8px; }
.xm-when-btn { flex: 0 0 auto; min-height: 44px; font-size: 14px; line-height: 20px; }
/* 「AI 改写」：Unfold 的勾选框行是「标签在左、框在右」，离得远；这一行改成框在前、标签紧跟、说明在下（只动这一行）。
   标签整块可点，点击区 44px（§38）；少于 2 个号时禁用 */
.xm-cp-mid div:has(> div > label[for="id_rewrite"]) { display: grid; grid-template-columns: 16px minmax(0, 1fr); column-gap: 10px; row-gap: 0; align-items: center; }
.xm-cp-mid div:has(> label[for="id_rewrite"]), .xm-cp-mid div:has(> div > #id_rewrite), .xm-cp-mid div:has(> #id_rewrite) { display: contents; }
.xm-cp-mid #id_rewrite { grid-column: 1; grid-row: 1; }
.xm-cp-mid label[for="id_rewrite"] { grid-column: 2; grid-row: 1; display: flex; align-items: center; min-height: 44px; cursor: pointer; }
.xm-cp-mid div:has(> #id_rewrite) > div { grid-column: 2; grid-row: 2; margin: 0; }
.xm-cp-mid div:has(> #id_rewrite) > div > div { margin-top: 0; }
.xm-cp-mid #id_rewrite:disabled, .xm-cp-mid div:has(#id_rewrite:disabled) > div > label[for="id_rewrite"] { cursor: not-allowed; opacity: 0.5; }

/* 写帖页保存条（post_submit_line.html）旁的提示：手机在按钮上方整行；宽屏在按钮左边，最多两行 */
.xm-save-note { width: 100%; font-size: 13px; line-height: 18px; color: var(--sm-warn-ink); }
.xm-save-note:empty { display: none; }
@media (min-width: 1024px) {
  .xm-save-note { width: auto; flex: 1 1 0; min-width: 0; margin-right: auto; } /* 不限行数：提示要能看全（前端红线 §40） */
}

/* 非写帖页的帖子详情页「串帖后面几条」（posting/admin.py thread_rest）：一行一条，保留换行 */
.xm-thread-ro { white-space: pre-wrap; overflow-wrap: anywhere; }
.xm-thread-ro + .xm-thread-ro { margin-top: 4px; }
/* 帖子列表「正文」列：串帖在正文前标「串帖 N 条」（text_head），单行省略时也在最前面 */
.xm-thread-tag { display: inline-block; margin-right: 6px; padding: 0 6px; border-radius: 999px; background: var(--sm-mute-bg); color: var(--sm-ink-2); font-size: 12px; line-height: 18px; font-weight: 500; }

/* 写帖页中栏：fieldset 默认 min-width 是内容宽度，会撑出栏外；三栏（≥1280）时中栏约 450px，表单行改成标签在上、输入框在下 */
.xm-cp-mid fieldset { min-width: 0; }
@media (min-width: 1280px) {
  .xm-cp-mid .field-line { flex-direction: column; align-items: stretch; }
  .xm-cp-mid .field-line > div:first-child { width: auto; min-width: 0; height: auto; }
  .xm-compose .xm-cp-mid .datetime { flex-direction: column; align-items: stretch; } /* 日期、时间两个框各最少 224px，并排放不下 */
  .xm-compose .xm-cp-mid .datetime > * { flex-basis: auto; width: 100%; margin-left: 0; }
}

/* 手机宽度：表单控件、提交按钮触控高度不小于 44px（前端红线 §38；Unfold 默认 38px） */
@media (max-width: 767.98px) {
  :is(select, input:is([type=text], [type=search], [type=password], [type=number], [type=url], [type=email]), input.vDateField, input.vTimeField, button[type=submit]) { min-height: 44px; }
  /* 列表页（前端红线 §33）：顶栏「+」新增、筛选按钮、表头排序、排序切换和取消、行里进详情的链接，点击区 44px */
  main .head-actions a.addlink { min-height: 44px; }
  #content a.filter-open-button { min-height: 44px; }
  #result_list thead a, #result_list tbody :is(th, td) a { display: inline-flex; align-items: center; min-width: 44px; min-height: 44px; }
  #result_list thead .sortoptions a { justify-content: center; margin: 0; }
  /* 勾选框看得见的还是 16px 方框；::before 往外扩成 44px 的透明点击区（Unfold 的勾画在 ::after 上） */
  #result_list input[type=checkbox]::before { content: ""; position: absolute; inset: -14px; }
  #changelist-search #searchbar-submit { justify-content: center; min-width: 44px; min-height: 44px; margin-inline-start: -12px; }
  #content a[href$="/add/"] { min-height: 44px; }
}

/* ======================= 批量排期中间页（T6，POST-7：templates/admin/xm/batch_schedule.html） ======================= */
/* 宽屏是表格：编号、号、发布时间定宽，正文占剩下的、单行省略（悬停看全文，前端红线 §40）；出错那一行标红，原因写在输入框下。
   < 768：每行改成上下排的一块（编号 号 / 正文 / 发布时间），不横向溢出；输入框、按钮触控高度 44px（前端红线 §38） */
.xm-batch { display: flex; flex-direction: column; gap: 12px; min-width: 0; }
.xm-batch-note { font-size: 13px; line-height: 20px; color: var(--sm-ink-2); }
.xm-batch-table { width: 100%; table-layout: fixed; border-collapse: collapse; }
.xm-batch-table th { height: var(--wb-th-h); padding: 0 12px; text-align: left; font-size: 12px; line-height: 20px; font-weight: 500; color: var(--sm-ink-2); background: var(--sm-table-head); box-shadow: 0 1px 0 var(--wb-line); } /* 中台 .tbl th */
.xm-batch-table td { padding: 17px 12px 8px; border-top: 1px solid var(--sm-line); vertical-align: top; font-size: 14px; line-height: 20px; color: var(--sm-ink); }
.xm-batch-table td.xm-batch-at { padding-top: 8px; } /* 输入框 38px 高，旁边的文字往下错 9px 对齐 */
.xm-batch-no { width: 5rem; font-variant-numeric: tabular-nums; }
.xm-batch-acc { width: 11rem; }
.xm-batch-at { width: 16rem; }
.xm-batch-at input { width: 100%; min-width: 14rem; max-width: none; }
.xm-batch-table tr.is-bad td { background: var(--sm-bad-bg); }
.xm-batch-err { margin-top: 4px; font-size: 12px; line-height: 18px; color: var(--sm-bad-ink); }
.xm-batch-foot { display: flex; flex-wrap: wrap; align-items: center; gap: 8px 16px; }
@media (max-width: 767.98px) {
  .xm-batch-table, .xm-batch-table tbody { display: block; }
  .xm-batch-table thead { position: absolute; width: 1px; height: 1px; overflow: hidden; clip: rect(0 0 0 0); white-space: nowrap; }
  .xm-batch-table tr { display: grid; grid-template-columns: auto minmax(0, 1fr); grid-template-areas: "no acc" "text text" "at at"; gap: 4px 8px; padding: 12px 0; border-top: 1px solid var(--sm-line); }
  .xm-batch-table tr.is-bad { padding: 12px; border-radius: 12px; background: var(--sm-bad-bg); }
  .xm-batch-table td, .xm-batch-table td.xm-batch-at, .xm-batch-table tr.is-bad td { display: block; width: auto; min-width: 0; padding: 0; border-top: 0; background: none; }
  .xm-batch-table td.xm-batch-no { grid-area: no; }
  .xm-batch-table td.xm-batch-acc { grid-area: acc; }
  .xm-batch-table td.xm-batch-text { grid-area: text; color: var(--sm-ink-2); }
  .xm-batch-table td.xm-batch-at { grid-area: at; }
  .xm-batch-at::before { content: attr(data-label); display: block; margin-bottom: 4px; font-size: 12px; line-height: 18px; color: var(--sm-ink-2); }
  .xm-batch-at input { min-width: 0; min-height: 44px; }
  .xm-batch-foot button { min-height: 44px; }
  .xm-batch-foot .xm-link { display: inline-flex; align-items: center; min-height: 44px; }
}

/* ======================= 逐号对照页（Issue #53：templates/admin/xm/post_compare.html、post-compare.js） ======================= */
/* 宽屏各栏横排：每栏最少 300px，放得下就平分宽度；栏多放不下时在 .xm-cmp-cols 自己的框里横滑，页面不横向溢出（前端红线 §38）。
   没过检查的栏底色标红、加红框，原因写在号名下面（同批量排期 .is-bad）。< 768：各栏上下排，一栏占满宽。按钮、链接点击区 44px，字号不小于 12px */
.xm-cmp { display: flex; flex-direction: column; gap: 12px; min-width: 0; }
.xm-cmp-note { font-size: 13px; line-height: 20px; color: var(--sm-ink-2); }
.xm-cmp-cols { display: grid; grid-auto-flow: column; grid-auto-columns: minmax(300px, 1fr); gap: 16px; min-width: 0; overflow-x: auto; padding: 2px 2px 12px; }
.xm-cmp-col { min-width: 0; display: flex; flex-direction: column; gap: 8px; padding: 16px; border-radius: var(--wb-radius); background: var(--wb-surface); box-shadow: 0 0 0 1px var(--wb-ring), 0 1px 2px var(--wb-ring), 0 14px 28px -18px var(--wb-shadow-2); } /* 同写帖页 .xm-pane（中台 .wb-card） */
.xm-cmp-col.is-bad { background: var(--sm-bad-bg); box-shadow: 0 0 0 2px var(--sm-bad-ink); }
.xm-cmp-head { display: flex; align-items: baseline; justify-content: space-between; gap: 8px; min-width: 0; }
.xm-cmp-acc { min-width: 0; font-size: 15px; line-height: 20px; font-weight: 600; color: var(--sm-ink); }
.xm-cmp-no { flex: 0 0 auto; font-size: 12px; line-height: 18px; font-variant-numeric: tabular-nums; color: var(--sm-ink-2); }
.xm-cmp-err { font-size: 13px; line-height: 18px; font-weight: 600; color: var(--sm-bad-ink); overflow-wrap: anywhere; }
.xm-cmp-field { display: flex; flex-direction: column; gap: 4px; min-width: 0; }
.xm-cmp-label { font-size: 13px; line-height: 18px; font-weight: 600; color: var(--sm-ink); }
.xm-cmp-field textarea { width: 100%; max-width: none; }
.xm-cmp-field .xm-count { font-size: 12px; line-height: 18px; }
.xm-cmp-open { align-self: flex-start; font-size: 13px; }
.xm-cmp-foot { display: flex; flex-wrap: wrap; align-items: center; gap: 8px 16px; }
.xm-cmp-foot button { min-height: 44px; }
@media (max-width: 767.98px) {
  .xm-cmp-cols { grid-auto-flow: row; grid-auto-columns: auto; grid-template-columns: minmax(0, 1fr); overflow-x: visible; padding: 0; }
  .xm-cmp-foot button { width: 100%; }
}

/* ======================= MCP key 已生成（T8，MCP-1：templates/admin/xm/mcp_key_issued.html） ======================= */
/* 原文只读输入框 + 复制按钮一行；复制结果一行定高（出字不挪版面，前端红线 §35）；连接示例自动换行，不横向溢出。
   < 768：输入框、按钮上下排，触控高度 44px（前端红线 §38） */
.xm-key { display: flex; flex-direction: column; gap: 12px; min-width: 0; max-width: 48rem; }
.xm-key-warn { padding: 10px 12px; border: 1px solid var(--wb-warning-line); border-radius: 8px; background: var(--wb-notice-warn); color: var(--wb-warning-ink); font-size: 14px; line-height: 22px; font-weight: 600; } /* 中台 .notice.warn */
.xm-key-note { font-size: 13px; line-height: 20px; color: var(--sm-ink-2); overflow-wrap: anywhere; }
.xm-key-label { font-size: 14px; line-height: 20px; font-weight: 600; color: var(--sm-ink); }
.xm-key-row { display: flex; align-items: center; gap: 8px; min-width: 0; }
.xm-key-input { flex: 1 1 auto; min-width: 0; max-width: none; font-family: ui-monospace, SFMono-Regular, Menlo, monospace; }
.xm-key-copy { flex: 0 0 auto; }
.xm-key-msg { height: 20px; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; font-size: 12px; line-height: 20px; color: var(--sm-ink-2); }
.xm-key-h2 { margin-top: 8px; font-size: 15px; line-height: 20px; font-weight: 600; color: var(--sm-ink); }
.xm-key-code { margin: 0; padding: 12px 14px; border-radius: 12px; background: var(--sm-mute-bg); color: var(--sm-ink); font-family: ui-monospace, SFMono-Regular, Menlo, monospace; font-size: 13px; line-height: 20px; white-space: pre-wrap; overflow-wrap: anywhere; }
@media (max-width: 767.98px) {
  .xm-key-row { flex-direction: column; align-items: stretch; }
  .xm-key-row :is(input, button) { min-height: 44px; }
}

/* ======================= 评论辅助（T7） ======================= */
/* xm/replies/admin.py、templates/admin/xm/target_post_{forms,list,detail}.html、replies.js。
   列表页上方「贴链接」「按话题找」两块：≥ 1024 并排（贴链接宽些），放不下上下排；没有目标帖时一块空态。
   详情页：上部「目标帖」「写评论稿」两块 ≥ 1280 并排；评论稿卡片 ≥ 1024 两列；登记记录宽屏是表格，< 768 每条上下排。
   正文、号列表、评论稿输入框都定高、自己滚；「先保存」提示一行定高：打字、勾选、出提示时板块位置和高度不变（前端红线 §35）。
   < 768：全部单列，按钮、链接、复选框那一行触控高度 44px；长用户名单行省略（悬停看全文），正文折行，不横向溢出（§38、§40）。 */
.xm-tp-forms { display: grid; grid-template-columns: minmax(0, 1fr); gap: 16px; align-items: start; margin-bottom: 16px; }
@media (min-width: 1024px) {
  .xm-tp-forms { grid-template-columns: minmax(0, 3fr) minmax(0, 2fr); }
}
.xm-tp-form form, .xm-tp-fill, .xm-tp-write form { display: flex; flex-direction: column; gap: 12px; min-width: 0; }
.xm-tp-field { display: flex; flex-direction: column; gap: 4px; min-width: 0; }
.xm-tp-field :is(input, select, textarea) { max-width: none; }
.xm-tp-field textarea { height: 88px; resize: vertical; }
.xm-tp-fill .xm-tp-field textarea { height: 112px; }
.xm-tp-label { font-size: 14px; line-height: 20px; font-weight: 600; color: var(--sm-ink); }
.xm-tp-help { font-size: 12px; line-height: 18px; color: var(--sm-ink-2); overflow-wrap: anywhere; }
.xm-tp-warn { font-size: 13px; line-height: 20px; color: var(--sm-warn-ink); }
.xm-tp-foot { display: flex; flex-wrap: wrap; align-items: center; gap: 8px 16px; }
.xm-tp-foot > button { flex: 0 0 auto; }
.xm-tp-sel { position: relative; display: block; min-width: 0; }
.xm-tp-caret { position: absolute; right: 10px; top: 50%; transform: translateY(-50%); pointer-events: none; font-size: 18px; color: var(--sm-ink-2); }
.xm-tp-none { min-height: 200px; border: 1px solid var(--sm-line); border-radius: 16px; }

/* 详情页 */
.xm-tp { display: flex; flex-direction: column; gap: 16px; min-width: 0; }
.xm-tp-title { min-width: 0; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
.xm-tp-top { display: grid; grid-template-columns: minmax(0, 1fr); gap: 16px; align-items: start; }
@media (min-width: 1280px) {
  .xm-tp-top { grid-template-columns: minmax(0, 3fr) minmax(0, 2fr); }
}
.xm-tp-meta { display: grid; grid-template-columns: auto minmax(0, 1fr); gap: 4px 16px; font-size: 14px; line-height: 22px; }
.xm-tp-meta dt { color: var(--sm-ink-2); white-space: nowrap; }
.xm-tp-meta dd { min-width: 0; color: var(--sm-ink); overflow-wrap: anywhere; }
.xm-tp-text { max-height: 264px; overflow-y: auto; padding: 12px 14px; border-radius: 12px; background: var(--sm-glass-sub); white-space: pre-wrap; overflow-wrap: anywhere; font-size: 14px; line-height: 22px; color: var(--sm-ink); }
.xm-tp-accs { display: flex; flex-direction: column; max-height: 264px; overflow-y: auto; }
.xm-tp-acc { flex: 0 0 auto; display: flex; align-items: center; gap: 10px; min-width: 0; min-height: 44px; border-top: 1px solid var(--sm-line); cursor: pointer; font-size: 14px; line-height: 20px; color: var(--sm-ink); }
.xm-tp-acc:first-child { border-top: 0; }
.xm-tp-acc input { flex: 0 0 auto; }
/* 写评论稿按钮右边（Issue #70）：「已选 N 个号」、原因（没选号、超过上限时脚本写）各一行定高，放不下省略，出字不挪动板块；放不下整块折到按钮下面 */
.xm-tp-pick { flex: 1 1 8rem; min-width: 0; display: flex; flex-direction: column; }
.xm-tp-pick > span { overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
.xm-tp-picked { height: 20px; font-size: 14px; line-height: 20px; font-weight: 600; font-variant-numeric: tabular-nums; color: var(--sm-ink); }
.xm-tp-why { height: 18px; font-size: 12px; line-height: 18px; color: var(--sm-warn-ink); }
.xm-tp-empty { padding: 8px 0; font-size: 14px; line-height: 22px; color: var(--sm-ink-2); }
.xm-tp-h2 { font-size: 15px; line-height: 20px; font-weight: 600; color: var(--sm-ink); }

/* 评论稿卡片：输入框定高可滚、不给拖；按钮一行不折字；「先保存」一行定高；没写过的号占同样高度 */
.xm-rp { display: flex; flex-direction: column; gap: 8px; min-width: 0; }
.xm-rp-cards { display: grid; grid-template-columns: minmax(0, 1fr); gap: 16px; }
@media (min-width: 1024px) {
  .xm-rp-cards { grid-template-columns: repeat(2, minmax(0, 1fr)); }
}
.xm-rp-card h3 { flex: 1 1 auto; min-width: 0; font-size: 15px; line-height: 20px; font-weight: 600; color: var(--sm-ink); }
.xm-rp-body { display: flex; flex-direction: column; gap: 8px; min-width: 0; min-height: 204px; }
.xm-rp-text { flex: 0 0 auto; height: 132px; max-width: none; resize: none; overflow-y: auto; }
.xm-rp-acts { display: flex; flex-wrap: wrap; align-items: center; gap: 8px; }
.xm-rp-acts > * { flex: 0 0 auto; white-space: nowrap; }
.xm-rp-open[aria-disabled="true"] { opacity: 0.5; cursor: not-allowed; pointer-events: none; }
.xm-rp-hint { flex: 0 0 auto; height: 18px; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; font-size: 12px; line-height: 18px; color: var(--sm-warn-ink); }
.xm-rp-none { display: flex; align-items: center; justify-content: center; min-height: 204px; padding: 16px; border-radius: 12px; background: var(--sm-glass-sub); font-size: 14px; line-height: 22px; color: var(--sm-ink-2); }

/* 登记记录：时间、号、人员定宽，文字占剩下的、单行省略（悬停看全文） */
.xm-tp-logt { width: 100%; table-layout: fixed; border-collapse: collapse; }
.xm-tp-logt th { height: var(--wb-th-h); padding: 0 12px; text-align: left; font-size: 12px; line-height: 20px; font-weight: 500; color: var(--sm-ink-2); background: var(--sm-table-head); box-shadow: 0 1px 0 var(--wb-line); } /* 中台 .tbl th */
.xm-tp-logt td { padding: 10px 12px; border-top: 1px solid var(--sm-line); font-size: 14px; line-height: 20px; color: var(--sm-ink); }
.xm-tp-logt .is-tm { width: 10rem; white-space: nowrap; font-family: var(--mono); font-variant-numeric: tabular-nums; } /* 时间列等宽字（中台 .tbl td.mono） */
.xm-tp-logt .is-acc { width: 11rem; }
.xm-tp-logt .is-who { width: 8rem; }

/* 局部提交（replies.js，交互优化 AC-1～AC-6）：卡片「已登记」标签（.wb-badge 24px 高，不超过卡片标题行的 24px，出现时不跳）、
   提示一行的颜色（成功绿、进行中灰、其余照旧橙）；登记记录表没登记时藏着，「还没有登记」登记后藏着（手机段表格是 display:block，要显式藏）。
   列表「只显示这次搜到的 N 条」提示条、详情页最下面「返回目标帖列表」「下一条还没写稿的」一行：折行不溢出，链接和「没有了」都是 44px 高 */
.xm-rp-card .wb-badge[hidden], .xm-tp-logt[hidden], .xm-tp-empty[hidden] { display: none; }
.xm-rp-hint[data-tone="ok"] { color: var(--sm-ok-ink); }
.xm-rp-hint[data-tone="busy"] { color: var(--sm-ink-2); }
.xm-tp-only { display: flex; flex-wrap: wrap; align-items: center; gap: 0 16px; min-width: 0; margin: 0 0 12px; padding: 0 14px; border-radius: 12px; background: var(--sm-glass-sub); font-size: 14px; line-height: 20px; color: var(--sm-ink); }
.xm-tp-only > span { min-width: 0; overflow-wrap: anywhere; }
.xm-tp-nav { display: flex; flex-wrap: wrap; align-items: center; gap: 0 24px; min-width: 0; }
.xm-tp-nav-none { display: inline-flex; align-items: center; min-height: 44px; font-size: 14px; line-height: 20px; color: var(--sm-ink-2); }

@media (max-width: 767.98px) {
  .xm-tp-foot > button, .xm-tp-write .xm-tp-foot > button { width: 100%; min-height: 44px; }
  .xm-tp-sel select { min-height: 44px; }
  .xm-rp-acts > * { min-height: 44px; }
  .xm-rp-body { min-height: 210px; }
  .xm-rp-none { min-height: 210px; }
  .xm-tp-logt, .xm-tp-logt tbody { display: block; }
  .xm-tp-logt thead { position: absolute; width: 1px; height: 1px; overflow: hidden; clip: rect(0 0 0 0); white-space: nowrap; }
  .xm-tp-logt tr { display: grid; grid-template-columns: auto minmax(0, 1fr) minmax(0, auto); grid-template-areas: "tm acc who" "tx tx tx"; gap: 2px 8px; padding: 10px 0; border-top: 1px solid var(--sm-line); }
  /* :is() 带类名，优先级要压过宽屏的 .xm-tp-logt .is-acc 这类定宽，否则号那格还是 11rem，挤进人员那格 */
  .xm-tp-logt td:is(.is-tm, .is-acc, .is-who, .is-tx) { display: block; width: auto; min-width: 0; padding: 0; border-top: 0; }
  .xm-tp-logt td.is-tm { grid-area: tm; color: var(--sm-ink-2); }
  .xm-tp-logt td.is-acc { grid-area: acc; }
  .xm-tp-logt td.is-who { grid-area: who; color: var(--sm-ink-2); }
  .xm-tp-logt td.is-tx { grid-area: tx; }
}

/* ======================= 界面简化第 1 批（菜单、首页、X 号、目标帖：AC-1～AC-5） ======================= */
/* 照画版 x-matrix-mockup「优化后」。颜色只用 theme.css 已有的 --wb-* / --nav-* 变量（深浅色跟着变量走，不另写 .dark）。
   模板：templates/admin/nav_sidebar.html、unfold/helpers/{dashboard_default,xm_checklist,xm_today,xm_home_write}.html、
   admin/xm/account_list.html、admin/xm/target_post_forms.html。
   网格列一律 minmax(0,1fr)；≤ 760（中台手机断点）单列、按钮触控 44px、字号不小于 12px、不横向溢出（前端红线 §38）。
   「今天先做这几步」每步三种状态（有数 / 0 / 读取失败）的小字都是一行，行高一样（§35、§37）。 */

/* 侧栏：「首页」不在组里、放最上面；「团队」组名旁小字；「更多」在最下面、默认折叠 */
.nav-scroll { display:flex; flex-direction:column; }
.nav-solo { padding-top:var(--wb-sp-5); }
.nav-group > summary.side-label small { min-width:0; overflow:hidden; text-overflow:ellipsis; white-space:nowrap; font-size:var(--wb-fs-sub); font-weight:400; letter-spacing:0; text-transform:none; }
.nav-more { margin-top:auto; padding-top:var(--wb-sp-3); border-top:1px solid var(--nav-line); }
/* 「更多」收起时钉在侧栏可见区底部（Issue #232）：菜单项多、屏幕矮时不滚也看得到；点开后回原位（theme.js 先滚到底再展开）。手机抽屉不钉 */
@media(min-width:761px) {
  .nav-more:not([open]) { position:sticky; bottom:0; z-index:2; background:var(--nav); }
  /* 钉住时停在侧栏底部内边距（12px）上沿，下面补一条底色，免得露出被压住的项 */
  .nav-more:not([open])::after { content:""; position:absolute; left:0; right:0; top:100%; height:var(--wb-sp-5); background:var(--nav); }
  .nav-scroll:has(> .nav-more:not([open])) { scroll-padding-bottom:56px; }
}
.nav-group > summary.nav-more-sum { min-height:36px; gap:var(--wb-sp-4); margin:var(--wb-sp-1) 0; padding:var(--wb-sp-2) var(--wb-sp-4); border-radius:8px; font-size:var(--wb-fs-title); font-weight:400; letter-spacing:0; text-transform:none; }
.nav-more-sum .nav-ic { flex:none; width:18px; height:18px; font-size:18px; line-height:18px; }

/* 首页：顶上红色横幅（整条是链接） */
a.notice.xm-banner { align-items:center; text-decoration:none; }
a.notice.xm-banner:hover { border-color:var(--wb-danger); }
.xm-banner > .material-symbols-outlined { flex:none; font-size:18px; }
.xm-banner .xm-banner-go { white-space:nowrap; text-decoration:underline; text-underline-offset:2px; }
.xm-home-main { display:grid; grid-template-columns:minmax(0,1fr); gap:var(--wb-sp-6); min-width:0; }
.xm-num { flex:none; display:inline-grid; place-items:center; width:22px; height:22px; border-radius:50%; background:var(--subtle); color:var(--wb-secondary); font:600 var(--wb-fs-sub)/1 var(--mono); }

/* 首页：开始前 4 步（画版 .chk） */
.xm-chk { padding:0; overflow:hidden; }
.xm-chk-head { display:flex; align-items:flex-start; justify-content:space-between; flex-wrap:wrap; gap:var(--wb-sp-5) var(--wb-sp-7); padding:var(--wb-sp-6) var(--wb-sp-6) var(--wb-sp-5); }
.xm-chk-head > div { min-width:0; }
.xm-chk-head h2 { color:var(--wb-ink); font-size:var(--wb-fs-h2); font-weight:650; }
.xm-chk-head p { margin-top:2px; color:var(--wb-secondary); font-size:var(--wb-fs-aux); }
.xm-chk-prog { flex:none; display:grid; justify-items:end; gap:var(--wb-sp-2); color:var(--wb-secondary); font-size:var(--wb-fs-aux); white-space:nowrap; }
.xm-chk-prog b { color:var(--wb-ink); font-family:var(--mono); }
.xm-chk-prog .wb-progress { width:160px; height:6px; }
.xm-chk-prog .wb-progress > i { background:var(--wb-green); }
.xm-chk-list { list-style:none; margin:0; padding:0; }
.xm-chk-list li { display:grid; grid-template-columns:112px minmax(0,1fr) 150px; grid-template-areas:"st body act"; align-items:center; gap:var(--wb-sp-5); padding:var(--wb-sp-5) var(--wb-sp-6); border-top:1px solid var(--wb-line); }
.xm-chk-list li.is-cur { background:var(--wb-blue-soft); box-shadow:inset 3px 0 0 var(--wb-blue); }
.xm-chk-st { grid-area:st; display:grid; justify-items:start; gap:var(--wb-sp-1); min-width:0; }
.xm-chk-st small { max-width:100%; overflow:hidden; text-overflow:ellipsis; white-space:nowrap; color:var(--wb-secondary); font-size:var(--wb-fs-sub); }
.xm-chk-body { grid-area:body; min-width:0; }
.xm-chk-body b { display:flex; align-items:center; gap:var(--wb-sp-3); color:var(--wb-ink); font-size:var(--wb-fs-title); font-weight:650; }
.xm-chk-body p { margin:2px 0 0 30px; color:var(--wb-secondary); font-size:var(--wb-fs-aux); overflow-wrap:anywhere; }
.xm-chk-list li.is-done .xm-chk-body b { color:var(--wb-secondary); }
.xm-chk-list li.is-done .xm-num { background:var(--wb-success-soft); color:var(--wb-success); }
.xm-chk-list li.is-cur .xm-num { background:var(--wb-blue-fill); color:var(--wb-on-fill); }
.xm-chk-act { grid-area:act; display:flex; align-items:center; justify-content:flex-end; gap:var(--wb-sp-5); }
.xm-chk-act form { margin:0; }
.xm-chk-list li.is-done .xm-chk-act .wb-button { border-color:transparent; background:transparent; color:var(--wb-secondary); } /* 画版 .btn.ghost */
.xm-chk-list li.is-done .xm-chk-act .wb-button:hover { background:var(--subtle); }
.xm-chk-skip { min-height:var(--wb-control-height); padding:0 var(--wb-sp-1); border:0; background:transparent; color:var(--wb-blue); font-size:var(--wb-fs-aux); text-decoration:underline; text-underline-offset:2px; white-space:nowrap; cursor:pointer; }
.xm-chk-skip:disabled { cursor:not-allowed; opacity:.6; }
.xm-chk-err { padding:var(--wb-sp-5) var(--wb-sp-6); border-top:1px solid var(--wb-line); color:var(--wb-danger); font-size:var(--wb-fs-aux); }
.xm-chk-err a { color:var(--wb-blue); text-decoration:underline; }

/* 首页：今天先做这几步（新人上手第 2 批；模板 unfold/helpers/xm_today.html，排法同上面的 .xm-chk）。
   每行：左边序号 + 标题、一句说明、一行当前数（有数用醒目色，0 灰字带范围，读取失败红字；单行省略，title 放全文）；右边按钮 */
.xm-today { padding:0; overflow:hidden; }
.xm-today-head { padding:var(--wb-sp-6) var(--wb-sp-6) var(--wb-sp-5); min-width:0; }
.xm-today-head h2 { color:var(--wb-ink); font-size:var(--wb-fs-h2); font-weight:650; }
.xm-today-head p { margin-top:2px; color:var(--wb-secondary); font-size:var(--wb-fs-aux); overflow-wrap:anywhere; }
.xm-today-list { list-style:none; margin:0; padding:0; }
.xm-today-list li { display:grid; grid-template-columns:minmax(0,1fr) 120px; grid-template-areas:"body act"; align-items:center; gap:var(--wb-sp-5); padding:var(--wb-sp-5) var(--wb-sp-6); border-top:1px solid var(--wb-line); }
.xm-today-list li.is-todo { box-shadow:inset 3px 0 0 var(--wb-orange); }
.xm-today-list li.is-err { box-shadow:inset 3px 0 0 var(--wb-danger); }
.xm-today-body { grid-area:body; min-width:0; }
.xm-today-body b { display:flex; align-items:center; gap:var(--wb-sp-3); color:var(--wb-ink); font-size:var(--wb-fs-title); font-weight:650; }
.xm-today-body p { margin:2px 0 0 30px; color:var(--wb-secondary); font-size:var(--wb-fs-aux); overflow-wrap:anywhere; }
.xm-today-body p.xm-today-n { margin-top:var(--wb-sp-1); overflow:hidden; text-overflow:ellipsis; white-space:nowrap; }
.xm-today-n[data-tone="warn"] { color:var(--wb-warning); font-weight:650; }
.xm-today-n[data-tone="bad"] { color:var(--wb-danger); font-weight:650; }
.xm-today-n[data-tone="info"] { color:var(--wb-blue); font-weight:650; }
.xm-today-act { grid-area:act; display:flex; justify-content:flex-end; min-width:0; }

/* 首页：写新帖子 + 4 格流程（画版 .hero / .flow）；目标帖 4 格步骤卡（画版 .fsteps）共用 .xm-steps */
.xm-hero { display:grid; grid-template-columns:minmax(0,1fr); gap:14px; }
.xm-hero .notice { margin-bottom:0; }
.xm-hero .notice a { color:var(--wb-blue); }
.xm-hero-top { display:flex; flex-wrap:wrap; align-items:center; gap:var(--wb-sp-3) var(--wb-sp-6); }
.xm-hero-top p { color:var(--wb-secondary); font-size:var(--wb-fs-body); }
a.wb-button.xm-write { min-height:48px; padding:var(--wb-sp-4) var(--wb-sp-7); gap:var(--wb-sp-3); border-radius:8px; font-size:15px; font-weight:650; box-shadow:0 10px 20px -12px var(--wb-glow-fx); }
.xm-write .material-symbols-outlined { font-size:20px; }
.xm-steps { list-style:none; margin:0; padding:0; display:grid; grid-template-columns:repeat(4,minmax(0,1fr)); gap:22px; }
.xm-steps li { position:relative; min-width:0; padding:var(--wb-sp-5); border-radius:12px; background:var(--wb-surface-alt); box-shadow:inset 0 0 0 1px var(--wb-line); }
.xm-steps li:not(:last-child)::after { content:""; position:absolute; top:50%; right:-14px; width:7px; height:7px; border-top:2px solid var(--wb-line-strong); border-right:2px solid var(--wb-line-strong); transform:translateY(-50%) rotate(45deg); }
.xm-steps-t { display:flex; align-items:center; gap:var(--wb-sp-3); min-width:0; color:var(--wb-ink); font-size:var(--wb-fs-title); font-weight:650; }
.xm-steps p { margin-top:var(--wb-sp-2); color:var(--wb-secondary); font-size:var(--wb-fs-aux); overflow-wrap:anywhere; }
.xm-steps p b { color:var(--wb-ink); font-weight:650; }
.xm-steps .xm-steps-warn { padding:var(--wb-sp-1) var(--wb-sp-3); border-radius:6px; background:var(--wb-warning-soft); color:var(--wb-warning); font-weight:600; }
.xm-tp-steps { margin-bottom:var(--wb-sp-6); }
.xm-tp-steps li { padding:14px var(--wb-sp-6); border-radius:14px; background:var(--wb-surface); box-shadow:0 0 0 1px var(--wb-ring),0 1px 2px var(--wb-ring),0 14px 28px -18px var(--wb-shadow-2); }

/* 列表页标题下一句话（X 号、目标帖） */
.xm-lead { margin:0 0 var(--wb-sp-6); color:var(--wb-secondary); font-size:var(--wb-fs-body); overflow-wrap:anywhere; }

/* X 号：右上「从 OpenTweet 同步」；行尾「分给…」（小号描边按钮，同 .tbl .ops .wb-button） */
.xm-sync { margin:0; }
.xm-sync .wb-button { display:inline-flex; align-items:center; gap:var(--wb-sp-1); white-space:nowrap; }
#result_list thead th.column-assign_cell, #result_list td.field-assign_cell { text-align:right; }
#result_list td.field-assign_cell a.wb-button { min-height:28px; padding:var(--wb-sp-1) var(--wb-sp-3); color:var(--wb-ink); font-size:var(--wb-fs-sub); }

@media(max-width:1100px) {
  .xm-steps { grid-template-columns:repeat(2,minmax(0,1fr)); }
  .xm-steps li:nth-child(2n)::after { display:none; }
}
@media(max-width:760px) {
  .nav-group > summary.nav-more-sum { min-height:44px; }
  .xm-chk-head { padding:var(--wb-sp-5); }
  .xm-chk-prog { justify-items:start; }
  .xm-chk-list li { grid-template-columns:minmax(0,1fr) auto; grid-template-areas:"body body" "st act"; padding:var(--wb-sp-5); }
  .xm-chk-body p { margin-left:0; }
  .xm-chk-skip { min-height:44px; padding:0 var(--wb-sp-3); }
  .xm-today-head { padding:var(--wb-sp-5); }
  .xm-today-list li { grid-template-columns:minmax(0,1fr); grid-template-areas:"body" "act"; padding:var(--wb-sp-5); }
  .xm-today-body p { margin-left:0; }
  .xm-today-act a.wb-button { width:100%; min-height:44px; }
  .xm-steps { grid-template-columns:minmax(0,1fr); }
  /* 单列时箭头朝下，放在两格中间（不伸出卡片右边，免得撑出横向滚动） */
  .xm-steps li:not(:last-child)::after, .xm-steps li:nth-child(2n):not(:last-child)::after { display:block; top:auto; right:50%; bottom:-14px; transform:translateX(50%) rotate(135deg); }
  a.wb-button.xm-write { width:100%; }
  #result_list td.field-assign_cell a.wb-button { min-width:44px; min-height:44px; }
}

/* 素材上传页、详情页的「分组」勾选框：手机宽度下每行触控高度不小于 44px（前端红线 §38） */
@media (max-width: 767.98px) {
  .field-chosen_tags label:has(input[type="checkbox"]) { min-height: 44px; display: flex; align-items: center; }
}

/* 我的提示词（xm/ai/admin.py）：多行框下「从文件导入」+ 提示 + 字数；「用在这些号上」勾选列表；表单下方只读的 3 条机制、默认写法。
   网格列用 minmax(0, 1fr)，按钮字不折行，按钮和每行号的点击区不小于 44px（前端红线 §38） */
.xm-pt { display: flex; flex-direction: column; gap: 8px; min-width: 0; max-width: 56rem; }
.xm-pt-bar { display: flex; flex-wrap: wrap; align-items: center; gap: 8px 12px; min-width: 0; }
.xm-pt-import { flex: 0 0 auto; min-height: 44px; white-space: nowrap; }
.xm-pt-msg { flex: 1 1 10rem; min-width: 0; font-size: 12px; line-height: 18px; color: var(--sm-ink-2); overflow-wrap: anywhere; }
.xm-pt-msg.is-bad { color: var(--sm-bad-ink); }
.xm-pt-count { flex: 0 0 auto; margin-left: auto; font-size: 12px; line-height: 18px; white-space: nowrap; }
.xm-pt-accs { display: flex; flex-direction: column; gap: 6px; min-width: 0; max-width: 56rem; max-height: 22rem; overflow-y: auto; padding: 2px; }
.xm-pt-acc { display: grid; grid-template-columns: auto minmax(0, 1fr); grid-template-areas: "box name" ". note"; align-items: center; column-gap: 10px; row-gap: 2px; min-height: 44px; padding: 8px 12px; border-radius: 12px; background: var(--sm-glass-sub); color: var(--sm-ink); cursor: pointer; }
.xm-pt-acc > input { grid-area: box; }
.xm-pt-acc-name { grid-area: name; font-size: 14px; line-height: 20px; }
.xm-pt-acc-note { grid-area: note; min-width: 0; font-size: 12px; line-height: 18px; color: var(--sm-ink-2); overflow-wrap: anywhere; }
.xm-pt-acc-empty { font-size: 14px; color: var(--sm-ink-2); }
.xm-pt-none a .material-symbols-outlined { font-size: 16px; color: inherit; } /* 空态按钮里的图标：不吃 .ops-empty 的 32px 灰色（同 posts.css 的 .xm-posts-none） */
@media (min-width: 768px) {
  .xm-pt-acc { grid-template-columns: auto minmax(0, 16rem) minmax(0, 1fr); grid-template-areas: "box name note"; }
}
.xm-pt-rules { margin-top: 24px; min-width: 0; }
.xm-pt-rules-h { margin-bottom: 12px; font-size: 15px; line-height: 20px; font-weight: 600; color: var(--sm-ink); }
.xm-pt-rules-grid { display: grid; grid-template-columns: minmax(0, 1fr); gap: 16px; }
@media (min-width: 1024px) {
  .xm-pt-rules-grid { grid-template-columns: repeat(2, minmax(0, 1fr)); }
}
.xm-pt-rule h3 { font-size: 14px; line-height: 20px; font-weight: 600; color: var(--sm-ink); }
.xm-pt-rule h4 { margin-top: 4px; font-size: 13px; line-height: 18px; font-weight: 600; color: var(--sm-ink-2); }
.xm-pt-rule ol { margin: 0; padding-left: 1.4em; list-style: decimal; font-size: 13px; line-height: 20px; color: var(--sm-ink); }
.xm-pt-rule li { overflow-wrap: anywhere; }
.xm-pt-rule li + li { margin-top: 4px; }
.xm-pt-rules { scroll-margin-top: 80px; } /* 说明卡「本页下方」跳过来时不被吸顶的顶栏挡住（同 theme.css .rail 的 80px） */
/* 说明卡（templates/admin/xm/prompt_intro.html）：列表页、新增页、详情页顶部，卡片用 .xm-pane；≥ 1024 「在哪里生效」「怎么开始」并排，窄了上下排。
   文字写死、不随数据变，同一页内卡片高度不变（前端红线 §35） */
.xm-pt-intro { margin-bottom: 24px; }
.xm-pt-intro p, .xm-pt-intro li { font-size: 14px; line-height: 22px; color: var(--sm-ink); overflow-wrap: anywhere; }
.xm-pt-intro-grid { display: grid; grid-template-columns: minmax(0, 1fr); gap: 12px 24px; }
@media (min-width: 1024px) {
  .xm-pt-intro-grid { grid-template-columns: repeat(2, minmax(0, 1fr)); }
}
.xm-pt-intro-part { display: flex; flex-direction: column; gap: 4px; min-width: 0; }
.xm-pt-intro h3 { font-size: 13px; line-height: 18px; font-weight: 600; color: var(--sm-ink-2); }
.xm-pt-intro ul, .xm-pt-intro ol { margin: 0; padding-left: 1.4em; }
.xm-pt-intro ul { list-style: disc; }
.xm-pt-intro ol { list-style: decimal; }
.xm-pt-intro li + li { margin-top: 4px; }
.xm-pt-intro b { font-weight: 600; }
/* 删除确认页上方的白话说明（templates/admin/xm/prompt_delete_confirmation.html、prompt_delete_selected_confirmation.html），卡片用 .xm-pane：
   第一句「删掉后找不回来。」危险色加粗；号的 @用户名长了就折行，手机宽度不横向溢出（前端红线 §38） */
.xm-pt-del { margin-bottom: 16px; }
.xm-pt-del p { font-size: 14px; line-height: 22px; color: var(--sm-ink); overflow-wrap: anywhere; }
.xm-pt-del .xm-pt-del-lead { font-weight: 600; color: var(--sm-bad-ink); }
/* ======================= X 号弹窗（templates/admin/xm/account_assign_dialog.html、static/theme/accounts.js） ======================= */
/* 原生 <dialog>，沿用 theme.css .wb-dialog 的底色、圆角、阴影、遮罩和淡入。宽 min(28rem, 视口 − 32px)，最大高按视口；
   头尾不动、中间自己滚，外层不出滚动条（前端红线 §43）。下拉、按钮至少 44px 高（§38）。 */
.wb-dialog.xm-assign { width:min(28rem,calc(100vw - 32px)); max-width:none; max-height:min(36rem,calc(100dvh - 32px)); padding:0; overflow:hidden; }
.wb-dialog.xm-assign[open] { display:flex; flex-direction:column; }
.xm-assign [hidden] { display:none !important; }
.xm-assign-form { display:flex; flex-direction:column; flex:1 1 auto; min-height:0; margin:0; }
.xm-assign-head { flex:none; min-width:0; padding:var(--wb-sp-7) var(--wb-sp-7) var(--wb-sp-5); }
.xm-assign-title { margin:0; color:var(--wb-ink); font-size:var(--wb-fs-h2); font-weight:650; line-height:1.4; overflow:hidden; text-overflow:ellipsis; white-space:nowrap; }
.xm-assign-sub { margin:var(--wb-sp-1) 0 0; color:var(--wb-secondary); font-size:var(--wb-fs-aux); }
.xm-assign-body { flex:1 1 auto; min-height:0; overflow:auto; display:grid; grid-template-columns:minmax(0,1fr); align-content:start; gap:var(--wb-sp-6); padding:var(--wb-sp-1) var(--wb-sp-7) var(--wb-sp-6); }
.xm-assign-field { display:grid; gap:var(--wb-sp-2); min-width:0; }
.xm-assign-field > span:first-child { color:var(--wb-secondary); font-size:var(--wb-fs-aux); font-weight:600; line-height:1.5; } /* 同详情页 .xm-act-field */
.xm-assign-field select { min-width:0; max-width:none; min-height:44px; }
.xm-assign-noline, .xm-assign-err { margin:0; padding:var(--wb-sp-4) var(--wb-sp-5); border:1px solid; border-radius:8px; font-size:var(--wb-fs-aux); line-height:1.6; overflow-wrap:anywhere; }
.xm-assign-noline { border-color:var(--wb-warning-line); background:var(--wb-notice-warn); color:var(--wb-warning-ink); } /* 中台 .notice.warn */
.xm-assign-err { border-color:var(--wb-danger-line); background:var(--wb-danger-soft); color:var(--wb-danger-ink); } /* 中台 .notice.bad */
.xm-assign-foot { flex:none; display:flex; justify-content:flex-end; gap:var(--wb-sp-3); padding:var(--wb-sp-5) var(--wb-sp-7) var(--wb-sp-7); border-top:1px solid var(--wb-line); }
.xm-assign-foot .wb-button { display:inline-flex; align-items:center; justify-content:center; min-width:88px; min-height:44px; }
/* 列表上方一句结果：固定一行高，有字没字下面的列表都不挪（§35）；放不下省略，悬停看全文（§40） */
.xm-assign-note { height:20px; margin:calc(var(--wb-sp-6) * -1 + var(--wb-sp-2)) 0 var(--wb-sp-4); color:var(--wb-ink); font-size:var(--wb-fs-aux); line-height:20px; overflow:hidden; text-overflow:ellipsis; white-space:nowrap; }
.xm-assign-noline a { color:var(--wb-blue); text-decoration:underline; text-underline-offset:2px; }
/* 负责人列「名字（登录名）」（owner_cell、accounts.js ownerName）：宽屏限宽，长名字单行省略、悬停看全文，不把表格撑出外框（§40）；手机卡片里照格子宽省略 */
@media(min-width:768px) { td.field-owner_cell .ops-ell { max-width:12em; } }
/* 状态列「要重连」标签后面那句短的怎么办（status_label，同一行的样子用 stats.css .xm-stats-status）：宽屏限宽 7em（12px 字 84px，
   系统管理员那页 1440 宽下表格不超出外框；短句「去 OpenTweet」「找系统管理员」放得下），悬停看整句（§40）；手机卡片里照格子宽省略 */
@media(min-width:768px) { td.field-status_label .ops-ell { max-width:7em; } }
/* X 号列表没有号时的空态（.ops-empty + 卡片框，同帖子列表 .xm-posts-none；三种文案同一高度，§35、§37） */
.xm-acct-none { min-height:280px; padding:var(--wb-sp-7) var(--wb-sp-6); border-radius:var(--wb-radius); background:var(--wb-surface); box-shadow:0 0 0 1px var(--wb-ring),0 1px 2px var(--wb-ring),0 14px 28px -18px var(--wb-shadow-2); }
.xm-acct-none > .material-symbols-outlined { font-size:40px; }
.xm-acct-none p { color:var(--wb-secondary); font-size:var(--wb-fs-body); overflow-wrap:anywhere; }
.xm-acct-none a { color:var(--wb-blue); text-decoration:underline; text-underline-offset:2px; }
@media(max-width:760px) { .xm-acct-none a, .xm-assign-noline a { display:inline-flex; align-items:center; min-height:44px; } }
@media(max-width:480px) {
  .xm-assign-head, .xm-assign-body, .xm-assign-foot { padding-left:var(--wb-sp-6); padding-right:var(--wb-sp-6); }
  .xm-assign-foot .wb-button { flex:1 1 0; min-width:0; }
  .xm-assign-field select { font-size:var(--wb-fs-h2); } /* 16px：iOS 聚焦时不放大页面（同 theme.css 手机段的 .wb-field、搜索框） */
}

/* ======================= 素材库上传页（assets.js） ======================= */
/* templates/admin/xm/asset_upload.html、static/theme/assets.js（交互优化清单第 18 条）。样子照写帖页左栏 .xm-pick：卡里小格 --sm-glass-sub、圆角 12，
   图标格 --sm-mute-bg、圆角 8。文件列表每行定高，状态文字单行省略（悬停看全文），传的过程中换状态行高不变（前端红线 §35、§40）；
   能点的地方不小于 44px、字不小于 12px，网格列用 minmax(0, 1fr)，手机宽度不横向溢出（§38）。 */
.xm-up { display: flex; flex-direction: column; gap: 8px; min-width: 0; }
.xm-up-drop { position: relative; display: flex; flex-direction: column; align-items: center; justify-content: center; gap: 4px; min-height: 136px; padding: 16px; border: 1.5px dashed var(--sm-line-2); border-radius: 12px; background: var(--sm-glass-sub); color: var(--sm-ink); text-align: center; cursor: pointer; transition: background-color 120ms cubic-bezier(.2, .8, .2, 1), border-color 120ms cubic-bezier(.2, .8, .2, 1); }
.xm-up-drop:hover, .xm-up-drop.is-over { border-color: var(--sm-focus); background: var(--sm-glass-lift-hover); }
.xm-up-drop:has(.xm-up-input:focus-visible) { outline: 2px solid var(--sm-focus); outline-offset: 1px; }
.xm-up-drop.is-busy, .xm-up-drop.is-busy:hover { cursor: not-allowed; opacity: 0.6; border-color: var(--sm-line-2); background: var(--sm-glass-sub); }
.xm-up-drop-ic { font-size: 32px; color: var(--sm-ink-2); }
.xm-up-drop-t { font-size: 14px; line-height: 20px; font-weight: 500; }
.xm-up-hint { font-size: 12px; line-height: 18px; color: var(--sm-ink-2); }
/* 「（可以一次选多个）」：脚本好了（文件框打开了 multiple）才显示；没脚本时一次只能选一个 */
.xm-up-multi { display: none; }
.xm-up[data-state="ready"] .xm-up-multi { display: inline; }
/* 有脚本时原生文件框藏起来（还能用键盘聚焦，焦点框画在拖放区上），整块拖放区就是选文件的按钮；没脚本时原生文件框照常显示 */
.xm-up-input { max-width: 100%; margin-top: 8px; font-size: 13px; }
.xm-up[data-state="ready"] .xm-up-input { position: absolute; width: 1px; height: 1px; padding: 0; margin: -1px; overflow: hidden; clip: rect(0 0 0 0); white-space: nowrap; border: 0; }
.xm-up-err { font-size: 13px; line-height: 18px; color: var(--sm-bad-ink); }
.xm-up-err:empty { display: none; }
/* 文件列表：定高的框，宽屏露 5 行（5×64 + 4×6 行距 + 上下内边距 2×2 = 348px），手机露 4 行（4×80 + 3×6 + 2×2 = 342px），多了在框里滚。
   0 个、1 个、几个文件、删掉文件后框的高度和位置都不变，下面的分组、产品线和保存条不上下跳（前端红线 §35）。
   没选文件时框里写一句下一步。列表靠脚本填，没脚本时整个框不显示 */
.xm-up-box { display: none; position: relative; height: 348px; }
.xm-up[data-state="ready"] .xm-up-box { display: block; }
.xm-up-list { display: flex; flex-direction: column; gap: 6px; height: 100%; overflow-y: auto; overscroll-behavior: contain; margin: 0 -4px; padding: 2px 4px; list-style: none; }
.xm-up-empty { position: absolute; inset: 0; display: flex; align-items: center; justify-content: center; padding: 16px; text-align: center; font-size: 13px; line-height: 20px; color: var(--sm-ink-2); }
.xm-up-list:not(:empty) + .xm-up-empty { display: none; }
/* 一行：图标 | 文件名 / 大小 · 类型 / 状态 | 「音频 / 音效」下拉（只有音频那一行有）| 重试、删掉 */
.xm-up-row { flex: 0 0 auto; display: grid; grid-template-columns: 40px minmax(0, 1fr) auto auto; grid-template-rows: 18px 16px 16px; grid-template-areas: "ic name kind act" "ic meta kind act" "ic st kind act"; align-content: center; align-items: center; column-gap: 10px; height: 64px; padding: 0 8px; border-radius: 12px; background: var(--sm-glass-sub); color: var(--sm-ink); }
.xm-up-ic { grid-area: ic; width: 40px; height: 40px; display: grid; place-items: center; border-radius: 8px; background: var(--sm-mute-bg); font-size: 22px; color: var(--sm-ink-2); }
.xm-up-name { grid-area: name; font-size: 13px; line-height: 18px; font-weight: 500; }
.xm-up-link { color: var(--sm-accent-solid); text-decoration: underline; }
.xm-up-meta, .xm-up-st { font-size: 12px; line-height: 16px; font-variant-numeric: tabular-nums; color: var(--sm-ink-2); }
.xm-up-meta { grid-area: meta; }
.xm-up-st { grid-area: st; }
.xm-up-row[data-state="done"] .xm-up-st { color: var(--sm-ok-ink); }
.xm-up-row:is([data-state="failed"], [data-state="toobig"]) .xm-up-st { color: var(--sm-bad-ink); }
.xm-up-kind { grid-area: kind; position: relative; display: block; width: 6.5rem; }
.xm-up-kind select { min-width: 0; max-width: none; min-height: 44px; }
.xm-up-act { grid-area: act; display: flex; align-items: center; gap: 4px; }
.xm-up-btn { min-height: 44px; }
.xm-up-del { width: 44px; color: var(--sm-ink-2); }
.xm-up-del .material-symbols-outlined { font-size: 20px; }
.xm-up-kind[hidden], .xm-up-btn[hidden] { display: none; }
/* 保存条旁的汇总：手机在按钮上方整行；宽屏在按钮左边。「回素材库」点击区 44px（.xm-link） */
.xm-up-note { width: 100%; display: flex; flex-wrap: wrap; align-items: center; gap: 0 12px; font-size: 13px; line-height: 18px; color: var(--sm-ink); }
.xm-up-note.is-bad { color: var(--sm-warn-ink); }
.xm-up-note:empty { display: none; }
@media (min-width: 1024px) {
  .xm-up-note { width: auto; flex: 1 1 0; min-width: 0; margin-right: auto; }
}
/* 手机：状态换到最下面整行，长原因少被截；行高照样固定，列表框露 4 行 */
@media (max-width: 767.98px) {
  .xm-up-row { grid-template-rows: 22px 22px 18px; grid-template-areas: "ic name kind act" "ic meta kind act" "st st st st"; height: 80px; }
  .xm-up-box { height: 342px; }
}

/* ======================= 术语悬停（新人上手第 2 批：xm/accounts/templatetags/xm_guide.py 的 xm_term，首页用） ======================= */
/* 术语是链接里包 <abbr title>：虚线下划线表示能悬停看解释，点了跳到「使用说明」页术语表；abbr 自己的下划线去掉，免得画两道。
   首页「写新帖子」块最下面一行「第一次用？看「使用说明」」（xm_home_write.html）；手机上链接触控高度 44px（前端红线 §38）。 */
a.xm-term { color:inherit; text-decoration:underline dotted; text-decoration-color:var(--wb-secondary); text-underline-offset:3px; }
a.xm-term:hover { color:var(--wb-blue); text-decoration-color:var(--wb-blue); }
.xm-term abbr { text-decoration:none; cursor:help; }
.xm-hero-help { color:var(--wb-secondary); font-size:var(--wb-fs-aux); overflow-wrap:anywhere; }
.xm-hero-help a { color:var(--wb-blue); text-decoration:underline; text-underline-offset:2px; }
@media(max-width:760px) {
  .xm-hero-help a { display:inline-flex; align-items:center; min-height:44px; }
}
