/* site.css —— 主站唯一的样式表。

   加载顺序：fonts/fonts.css → design-system.css → site.css（故事页、专栏页之后还有 story.css）。
   design-system.css（infra 同步的 --crm-* 与本仓库的 --reader-* 角色、Aa 外观组件）与原文库及 Python 包共用，
   所以单独一个文件；这里是主站（快讯、故事页、专栏、staff 各页）的全部组件与布局。

   变量两层：--crm-*（infra）→ --reader-*（角色）。颜色一律读 --reader-*（个别旧组件还直接读 --crm-*），字体读 --ui-font；
   design-system 没有的颜色与全站尺寸（状态色、分类色、热度色、左栏 / 顶栏 / 重点栏宽）只在第 0 节声明。
   另有两处组件内部的局部尺寸变量跟着组件走：快讯行的 --row-title / --row-line、看板 #insight 的 --ops-gap。

   来历（2026-10-03）：由 sd-ui-kit / app / nb / themes / system-dashboard / quality-scoring / events 七个文件
   按原层叠顺序合并，各节标题保留原文件名。合并后又做了四件不改变渲染的清理（#190）：
   去掉 --sd-* / --nb-* 别名层；删掉总被后面同一组件规则盖住的声明（规则选中的若不可能是 <html>/<body> 本身，
   `body.sd X`、`.sd X` 与 `X` 选中的是同一批元素，因为本文件只在 <body class="sd"> 的页面加载）；
   能证明不影响任何层叠结果的 `body.sd` 降为 `.sd`；同选择器同上下文的规则在可证明安全时并到后一条的位置
   （所以个别规则不在原来的节里）。逐元素 getComputedStyle 对比与逐条复核都没有发现渲染差异。
   同日的快讯改版（通讯社台：三栏、重点栏、家数条）是有意改变外观的，不在上面「不改变渲染」之列。

   改样式：找到组件所在的那一节改原规则，不要在文件末尾追加更高特异性的覆盖。 */

/* ==========================================================================
   0. 站内 token
   颜色角色一律直接用 design-system.css 的 --reader-*（再往下是 infra 同步的 --crm-*），这里只放
   design-system 没有的值：状态色、分类色、热度色与全站尺寸。改名前先查 JS 与服务端模板里的行内样式：
   --sd-data 由 page-dashboard.js、system-dashboard.js 读；--sd-warn 由 page-dashboard.js、system-dashboard.js、app-widgets.js 读；
   --cat-* 由 app.js、app-dom.js、page-dashboard.js、src/lib/story.js 读;后缀是和 src/lib/display-angles.js 的 COLORS
   白名单(角度配置里 color 能填的值)对好的,两边一起改。
   ========================================================================== */

.sd {
  /* 状态跟着视觉规范的角色：正常 / 观察 / 失败。深色由 --ok / --warn / --alert 反转。 */
  --sd-ok: var(--ok); --sd-warn: var(--warn); --sd-alert: var(--alert);
  /* 单系列数量条用链接蓝，不再另起一套序列色。 */
  --sd-data: var(--link);
  /* 分类色：角度 = 固定配色，条形、色块、表格里都是同一个色。配色经 CVD 校验（邻对 ΔE≥8）；
     三个浅色（aqua/yellow/magenta）对白底不足 3:1，出现的地方必须带文字标签。 */
  --cat-models: #2a78d6; --cat-chips: #eb6834; --cat-money: #1baf7a;
  --cat-apps: #eda100; --cat-research: #e87ba4; --cat-infra: #008300;
  --cat-policy: #4a3aa7; --cat-safety: #e34948; --cat-other: #6d7578;
  /* 重点数字用墨色；必读与当前入口的底色是 --signal，不另做热度色。 */
  --sd-heat: var(--ink);
  /* 布局：左栏宽、顶栏高、重点栏宽(宽屏右栏,随屏宽在 340–520 之间:1920 宽时约 520,快讯流的标题列不至于空出一大片)。 */
  --nb-side-w: 218px; --nb-top-h: 56px; --nb-lead-w: clamp(340px, 27vw, 520px);
}
/* 快讯内参(编辑模式)的左栏放五组筛选,宽些;读者只有一组精选角度,窄些,把宽度让给流与重点。 */
.sd[data-tab="timeline"] { --nb-side-w: 264px; }
.sd[data-tab="timeline"]:not([data-desk]) { --nb-side-w: clamp(204px, 12vw, 236px); }
@media (max-width: 800px) { .sd { --nb-top-h: 52px; } }


/* ==========================================================================
   1. 基础套件：.sd 作用域、box-sizing、徽章、看板网格（原「原样引入」的 Signal Desk 套件，2026-10-03 合并时只留被用到的部分）
   （原 web/sd-ui-kit.css）
   ========================================================================== */

/* Signal Desk / Editorial Console UI Kit
   Portable, dependency-free, and scoped under .sd. */

.sd {
  box-sizing: border-box;
  margin: 0;
  min-height: 100%;
}

.sd *, .sd *::before, .sd *::after { box-sizing: border-box; }
.sd button, .sd input, .sd select { border: 0; border-radius: 0; }

/* 2. Editorial hero */
.sd-kicker {
  display: flex; justify-content: space-between; align-items: center;
}
.sd-dashboard__head { display: flex; justify-content: space-between; }
.sd-dashboard__head em { color: var(--sd-ok); }
.sd-metrics { display: grid; grid-template-columns: repeat(4, 1fr); }
.sd-metric { border-right: 1px solid var(--reader-border); }
.sd-metric:last-child { border-right: 0; }
.sd-metric span { display: block; margin-top: 5px; color: var(--reader-muted); }
.sd-badge { display: inline-block; padding: 3px 8px; border-radius: 999px; font: 800 9px var(--ui-font); white-space: nowrap; }
.sd-badge--ok { background: #dff4ea; color: var(--sd-ok); }
.sd-badge--warn { background: #fff0d2; color: var(--sd-warn); }
.sd-badge--alert { background: #fee8e4; color: #a82016; }
.sd-badge--muted { background: #edf0f4; color: #555f70; }

/* 5. Dense timeline */
.sd-stream { margin-top: 20px; border-top: 4px solid var(--reader-body); }

@media (max-width: 800px) {
  .sd-metrics { grid-template-columns: repeat(2, 1fr); }
  .sd-metric:nth-child(2n) { border-right: 0; }
  .sd-metric:nth-child(n + 3) { border-top: 1px solid var(--reader-border); }
}


/* ==========================================================================
   2. 应用层：通用控件、表格、工具条、空状态等跨页组件
   （原 web/app.css）
   ========================================================================== */

/* 应用层：基础套件没有的跨页组件（表格、说明块、条形图、菜单、弹层、空状态等）。 */

/* 关掉 iOS 对小字的自动放大 —— 不关的话,手机上 8-9px 的小字会被系统
   膨胀回去,怎么调都"显得大"。 */

html { -webkit-text-size-adjust: 100%; text-size-adjust: 100%; }

/* 徽章补两个色:蓝=原创媒体(primary),紫=官方/通稿(wire) —— 每类标签一色 */

.sd-badge--info { background: #e2edfb; color: #1c5cab; }

.sd-badge--violet { background: #eae6f7; color: #4a3aa7; }

/* ---- 读者控件两行(2026-08-31 大改版) ----
   第一行 分类模块条:点击即筛,每格带今日条数 —— 它同时就是当日概览。
   第二行 站内搜索独占 + 地区。深底容器沿用原筛选条的視覺。 */

/* 快讯工具条与搜索框的样式移到 nb.css(2026-09-06 全站重设计)。 */

/* ---- 时间线：抓取延迟是本产品的核心指标,给它固定位置 ---- */

.sd-lag { color: var(--reader-muted); font: 700 9px var(--ui-font); letter-spacing: .06em; }

.sd-dup { cursor: pointer; border: 0; background: #edf0f4; }

/* ---- 表格：kit 没有表格组件,按硬边网格的原则新增 ---- */

.sd-table { border-collapse: collapse; }

.sd-table th, .sd-table td { text-align: left; }

/* ---- 说明块：解释每张表量什么、怎么读 ---- */

.sd-note {
  margin-top: 10px; padding: 9px 0 2px 12px;
  color: var(--reader-muted); line-height: 1.62;
}

.sd-note p { margin: 0 0 6px; }

.sd-note p:last-child { margin-bottom: 0; }

.sd-note b { color: var(--reader-body); }

.sd-note code { padding: 0 3px; border: 1px solid var(--reader-line); background: var(--reader-paper); font: 700 10.5px var(--ui-font); }

.sd-note .hl { border-left: 2px solid var(--reader-active); margin-left: -12px; padding-left: 10px; color: var(--reader-body); }

/* ---- 条形分布：数值 + 硬边条,零圆角 ---- */

.sd-bars { display: flex; flex-direction: column; gap: 4px; }

.sd-bars > div { display: grid; grid-template-columns: 84px 1fr 92px; gap: 10px; align-items: center; font: 700 11px var(--ui-font); }

.sd-bar { height: 13px; background: var(--reader-panel); border: 1px solid var(--reader-line); }

.sd-bar > i { display: block; height: 100%; background: var(--sd-data); }

.sd-bar > i.acid { background: var(--reader-active); }

.sd-bar > i.dim { background: var(--reader-border); }

.sd-bars .val { color: var(--reader-muted); text-align: right; font-size: 10px; }

/* ---- 小时柱图 ---- */

.sd-spark { display: flex; align-items: flex-end; gap: 2px; height: 68px; border-bottom: 1px solid var(--reader-body); }

.sd-spark > i { flex: 1 1 0; max-width: 44px; min-height: 1px; background: var(--sd-data); display: flex; align-items: flex-end; }

.sd-spark > i > b { display: block; width: 100%; background: var(--sd-alert); }

/* ---- 行内百分比条 ---- */

.sd-pct { display: inline-flex; gap: 6px; align-items: center; justify-content: flex-end; font-family: var(--ui-font); }

.sd-pct .sd-bar { width: 48px; height: 5px; }

/* ---- 样本列表：复核低分/边界条目 ---- */

.sd-samples > div { display: flex; gap: 9px; align-items: baseline; padding: 5px 0; border-bottom: 1px solid var(--reader-line); font-size: 12.5px; }

.sd-samples > div:last-child { border-bottom: 0; }

.sd-samples .t { flex: 1; min-width: 0; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }

.sd-hide { display: none !important; }


.sd-empty { font: 700 11px var(--ui-font); letter-spacing: .1em; }

.sd-cell { display: inline-block; max-width: 430px; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; vertical-align: middle; }

/* kit 的 .sd-metrics 是固定 4 列。总览有 6 张卡,4 列会折成 4+2 并且
   第二行没有上边框、最后一张的右边框也断了。按张数选列数,边框补齐。 */

.sd-metrics--3up { grid-template-columns: repeat(3, 1fr); }

.sd-metrics--3up .sd-metric:nth-child(3n) { border-right: 0; }

.sd-metrics--3up .sd-metric:nth-child(n + 4) { border-top: 1px solid var(--reader-border); }

@media (max-width: 800px) {
  .sd-metrics--3up .sd-metric:nth-child(3n) { border-right: 1px solid var(--reader-border); }
  .sd-metrics--3up .sd-metric:nth-child(2n) { border-right: 0; }
  .sd-metrics--3up .sd-metric:nth-child(n + 3) { border-top: 1px solid var(--reader-border); }
}

/* ---- 页眉右侧「管理处」----
   登录状态和所有分析/管理入口收在一个下拉里：时间线是公开页面,
   Dashboard / 规则演化 / 账号管理都要求管理员登录,散在页面各处会让
   未登录访客不断撞见 403。 */

.sd-menu { position: relative; }

.sd-menu__who {
  padding: 9px 12px; border-bottom: 1px solid var(--reader-body);
  color: var(--reader-muted); letter-spacing: .08em;
}

.sd-menu__who b { display: block; margin-bottom: 3px; color: var(--reader-body); letter-spacing: 0; }

.sd-menu__group { border-bottom: 1px solid var(--reader-line); }

.sd-menu__group:last-child { border-bottom: 0; }

.sd-menu__group button {
  display: block; width: 100%; border: 0; background: none; cursor: pointer; text-align: left;
}

/* 菜单里也有纯链接(原文库后台是另一份静态产出,只能用 a 跳):
   长相与 button 完全一致,点它的人不该被迫分辨「这条是面板还是页面」。
   不写 width:100% —— a 是 content-box,加了反而会被 padding 撑出横向滚动。 */

.sd-menu__group a {
  display: block; text-decoration: none;
  text-align: left;
}

/* display:block 会盖掉浏览器给 [hidden] 的 display:none —— 不补这条,
   登录后菜单里还会留着「登录 / 注册」。 */

.sd-menu__group button[hidden] { display: none; }

/* ---- 登录弹窗 ---- */

.sd-modal { position: fixed; inset: 0; z-index: 50; display: grid; place-items: center; background: #151c1fbb; }

.sd-modal__box { width: min(400px, calc(100vw - 32px)); background: var(--reader-paper); }

.sd-modal__head {
  display: flex; justify-content: space-between; align-items: center; border-bottom: 1px solid var(--reader-body); font: 800 11px var(--ui-font); letter-spacing: .1em;
}

.sd-modal__x { border: 0; background: none; cursor: pointer; font-size: 18px; line-height: 1; }

.sd-modal__body label { display: block; margin-bottom: 11px; }

.sd-modal__body span { display: block; margin-bottom: 4px; color: var(--reader-muted); }

.sd-modal__body input {
  width: 100%;
  background: #fff; font: 600 13px var(--ui-font);
}

.sd-modal__body input:focus { outline: 2px solid var(--reader-active); outline-offset: -2px; }

.sd-modal__row { display: grid; grid-template-columns: 1fr auto; gap: 8px; align-items: end; }

.sd-modal__row button {
  padding: 9px 11px; border: 1px solid var(--reader-body); background: var(--reader-panel);
  cursor: pointer; font: 800 10px var(--ui-font); white-space: nowrap;
}

.sd-modal__row button:disabled { opacity: .5; cursor: default; }

.sd-modal__msg { padding: 0 14px; color: var(--sd-alert); font-size: 11.5px; line-height: 1.5; min-height: 18px; }

.sd-modal__msg.ok { color: var(--sd-ok); }

.sd-modal__foot { display: flex; justify-content: space-between; align-items: center; gap: 10px; padding: 12px 14px; }

.sd-primary:disabled { opacity: .6; cursor: default; }

.sd-link-btn { border: 0; background: none; color: var(--reader-accent); cursor: pointer; font: 700 11px var(--ui-font); text-decoration: underline; }

/* ---- 需要登录时的占位 ---- */

.sd-gate h2 { margin: 0 0 8px; font-size: 20px; }

.sd-gate p { margin: 0 0 18px; color: var(--reader-muted); font-size: 13px; }

body[data-tab]:not([data-tab="timeline"]) .sd-kicker { margin-bottom: 18px; }

/* ================= 分析中心（单页 dashboard） =================
   角度配色在第 0 节（--cat-*）。 */

/* 超宽屏(2K+):分析页容器放宽、栅格升三栏 —— 1440 框在 2500px 屏上
   两侧大片空白、两栏被拉稀,是「桌面设计不行」的体感来源。 */

/* 两栏网格：信息密度翻倍;窄屏回落单栏。.sd-span2 让重要板块横贯整行 ——
   板块大小服务于信息量,不强求整齐。 */

.sd-grid2 { display: grid; grid-template-columns: 1fr 1fr; gap: 14px; align-items: stretch; margin-top: 14px; }

.sd-grid2 > .sd-dashboard { margin: 0; }

.sd-grid2 > .sd-span2 { grid-column: 1 / -1; }

/* 同一行的两块底边对齐:面板拉成弹性列,正文吃掉多余高度 —— 参差的底边
   是"排版不整洁"观感的第一来源。 */

.sd-grid2 .sd-dashboard { display: flex; flex-direction: column; }

.sd-grid2 .sd-dashboard > .sd-panelbody { flex: 1; }

@media (max-width: 960px) { .sd-grid2 { grid-template-columns: 1fr; } }

/* 每个板块脚下的两行说明:第一行讲"这是什么、怎么来",
   酸绿行讲"你要做的" —— 任务感,不是装饰。 */

.sd-note--tight { margin-top: 9px; padding: 5px 0 2px 10px; font-size: 11px; line-height: 1.55; }

.sd-note--tight p { margin: 0 0 3px; }

/* 角度色块：色 + 文字,颜色永远不单独承载身份 */

.sd-cat { display: inline-flex; align-items: center; gap: 5px; font: 700 11px var(--ui-font); white-space: nowrap; }

.sd-cat i { width: 9px; height: 9px; flex: none; background: var(--cat-other); }

/* 条形分布的宽标签变体：域名/角度名比 84px 长 */

.sd-bars--wide > div { grid-template-columns: 150px 1fr 110px; }

.sd-bars .sd-rankn { color: var(--reader-muted); font-size: 9px; margin-right: 4px; }

/* 紧凑内联统计行(面板头下的一行小数字) */

.sd-minirow { display: flex; flex-wrap: wrap; gap: 14px; padding: 8px 0 10px; font: 700 10px var(--ui-font); color: var(--reader-muted); }

.sd-minirow b { color: var(--reader-body); font-size: 12px; margin-right: 3px; }

/* 面板正文的统一内边距(panel() 里原来是行内样式,挪进类里) */

.sd-panelbody { padding: 12px 14px; }

/* 柱图下沿的首尾刻度：悬浮提示之外,轴上也得读得出时间范围 */

.sd-spark-x { display: flex; justify-content: space-between; margin-top: 3px; font: 700 9px var(--ui-font); color: var(--reader-muted); }

/* 柱图的数量级刻度线:虚线画在整数位(2,000/4,000…),数字标右端 ——
   悬停之外,一眼读得出柱子的绝对量级。 */

.sd-sparkwrap { position: relative; padding-top: 12px; }

.sd-sparkwrap .sd-spark { position: relative; z-index: 1; }

.sd-spark-gl { position: absolute; left: 0; right: 0; z-index: 0; border-top: 1px dashed var(--reader-border); }

.sd-spark-gl > span {
  position: absolute; right: 0; top: -12px; padding-left: 5px;
  font: 700 9px var(--ui-font); color: var(--reader-muted); background: var(--reader-paper);
}

/* ---- 快讯编辑页(2026-09-06):行尾编辑按钮 + 下架台账 ---- */

.sd-edit {
  cursor: pointer;
  color: var(--reader-body);
}

.sd-edit:hover { border-color: var(--reader-body); }

.sd-edit:disabled { opacity: .5; cursor: progress; }

.sd-edit--danger { border-color: #b8433a; }

.sd-edit--danger:hover { background: #9f2f22; color: #fff; border-color: #9f2f22; }

.sd-edit--ok { border-color: #2f7a4a; color: #2f7a4a; }

.sd-edit--ok:hover { background: #2f7a4a; color: #fff; }

.sd-terms { display: flex; flex-wrap: wrap; gap: 6px; }

.sd-term {
  display: inline-flex; align-items: baseline; gap: 5px; padding: 3px 9px; font: 700 11px var(--ui-font);
}

.sd-term em { font-style: normal; color: var(--reader-muted); font-size: 9px; }

/* ---- 已下架页 ---- */

.sd-patterns { display: grid; gap: 8px; }

.sd-pattern { display: grid; gap: 8px; align-items: start; border-bottom: 1px solid var(--reader-line); }

/* Analytics is a compact work queue, with readable quantitative bars. */

#insight .sd-grid2, #sources .sd-grid2 { align-items: start; }

#insight .sd-panelbody, #sources .sd-panelbody { flex: initial; }

#insight .sd-note, #sources .sd-note { font-size: 12px; line-height: 1.5; }

#insight .sd-table, #sources .sd-table { table-layout: auto; }

#insight .sd-table th, #insight .sd-table td, #sources .sd-table th, #sources .sd-table td { padding: 6px 8px; }

#insight .sd-table td.num, #insight .sd-table th, #sources .sd-table td.num, #sources .sd-table th { white-space: nowrap; }

#insight .sd-table td:first-child a, #sources .sd-table td:first-child a { overflow-wrap: normal; word-break: normal; }

#insight .sd-cell, #sources .sd-cell { max-width: 32em; }

#insight .sd-bar > i, #sources .sd-bar > i { min-width: 0; }

#insight .sd-span2 .sd-table, #sources .sd-span2 .sd-table { font-size: 12px; }

#insight .sd-source-grid .sd-panelbody, #sources .sd-source-grid .sd-panelbody { max-height: 360px; overflow: auto; }

/* 来源页下半是嵌入的标杆校准(/benchmark.html?embed=1),高度给够一屏。 */

#sources .sd-benchmark-frame { height: 90vh; min-height: 640px; border: 1px solid var(--reader-line); border-radius: 8px; }

.nb-editor-disclosure > summary { cursor: pointer; color: var(--reader-muted); padding: 6px 0; }

.sd-title-actions { display: flex; align-items: center; gap: 6px; min-width: 0; }

.sd-title-actions .sd-cell { flex: 1; min-width: 0; }

.sd-title-actions button, .sd-title-actions .sd-badge { flex: none; }


/* ==========================================================================
   3. 壳：顶栏、左栏、快讯列表行、同题展开（2026-09-06 NewsBlur 风格层）
   （原 web/nb.css）
   ========================================================================== */

/* 壳与快讯列表（2026-09-06 全站重设计第一期，NewsBlur 风格）：顶栏、左栏、列表行、同题展开。
   分析类面板（.sd-dashboard / .sd-table / …）沿用前两节的结构。 */

.sd {
  color: var(--reader-body);
}

.sd a { color: var(--reader-accent); }

/* ---- 顶栏 ---- */

.nb-brand { display: inline-flex; align-items: center; text-decoration: none; }


.nb-nav button { background: none;
  cursor: pointer; font: 500 13px/1.2 var(--ui-font);
}

.nb-nav a { padding: 6px 12px; border-radius: 4px; color: var(--reader-body); text-decoration: none; font: 500 13px/1.2 var(--ui-font); }

.nb-nav button:hover, .nb-nav a:hover { background: #e9edf2; }

.nb-nav button[hidden] { display: none; }

.nb-status { white-space: nowrap; }

.sd-menu__btn { cursor: pointer; }

.sd-menu__btn:hover, .sd-menu__btn[aria-expanded="true"] { color: var(--reader-body); }

.sd-menu__btn--in { border-color: var(--reader-accent); color: var(--reader-accent); }

.sd-menu__pop { position: absolute; right: 0; top: calc(100% + 7px); z-index: 20; min-width: 236px; border: 1px solid var(--reader-border); }

.sd-menu__group button, .sd-menu__group a { font: 500 12px var(--ui-font); color: var(--reader-body); }

.sd-menu__group button:hover, .sd-menu__group a:hover { background: var(--reader-active); }
.sd-menu__group button[aria-pressed="true"] { background:var(--reader-selected-bg); color:var(--reader-selected-ink); }

/* ---- 三栏壳:左栏 + 主区 ---- */

.nb-app { display: grid; grid-template-columns: var(--nb-side-w) minmax(0, 1fr); }

.nb-side {
  position: sticky; align-self: start; overflow-y: auto;
}

.nb-side__group { text-transform: uppercase; color: var(--reader-muted); }

.nb-side__group:first-child { margin-top: 2px; }

.nb-side__item {
  display: flex; align-items: center; width: 100%; box-sizing: border-box; background: none; color: var(--reader-body);
  cursor: pointer; text-align: left; font: 400 13px/1.3 var(--ui-font); text-decoration: none;
}

.nb-side__item span { flex: 1; min-width: 0; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }

.nb-side__item em { color: var(--reader-muted); }

.nb-side__item.is-on em { color: var(--reader-accent); }

.nb-main { min-width: 0; padding: 0 0 60px; }

/* ---- 快讯工具条 + 列表 ---- */

.nb-toolbar { display: flex; align-items: center; position: sticky; z-index: 10; }

.nb-toolbar input[type="search"] {
  flex: 1; font: 400 13px var(--ui-font);
}

.nb-toolbar__count { margin-left: auto; white-space: nowrap; }

#controls.sd-hide { display: none; }

.nb-list.sd-stream { margin-top: 0; border-top: 0; }

/* 「N 条新快讯」:后台刷新发现新故事而读者正在读时,不动页面,只在流的顶部留一个入口。 */

.nb-fresh {
  position: sticky; top: 96px; z-index: 9; display: block; margin: 8px auto 0; padding: 6px 14px;
  border: 1px solid var(--reader-accent); border-radius: 999px; background: var(--reader-active); color: var(--reader-accent);
  font: 600 12px/1.4 var(--ui-font); cursor: pointer; box-shadow: 0 4px 14px #2c66c922;
  animation: nb-fresh-in .18s ease-out;
}

.nb-fresh:hover { background: var(--reader-accent); color: #fff; }

.nb-fresh[hidden] { display: none; }

@keyframes nb-fresh-in { from { opacity: 0; transform: translateY(-6px); } to { opacity: 1; transform: none; } }

/* 快讯行的版式在第 4 节末「快讯:通讯社台版式」;这里只留各页共用的标题与标签基础。 */

.sd a.nb-title { text-decoration: none; }

.nb-title:hover { text-decoration: underline; }

.sd .nb-row--hidden a.nb-title { opacity: .5; text-decoration: line-through; }

.nb-permalink:hover { opacity: 1; }

.nb-meta { display: flex; flex-wrap: wrap; align-items: center; }

.nb-chip { border: 0; background: none; cursor: pointer; }

.sd-badge--acid { background: var(--signal); color: var(--signal-ink); }

.nb-dup { cursor: pointer; }

.nb-editbar { display: inline-flex; gap: 6px; margin-left: 4px; }

/* 编辑线:这条故事在不在精选里,置顶 / 撤下 / 交还 */

.nb-selectbar { display: inline-flex; align-items: center; gap: 6px; margin-left: 4px; }

.sd .nb-selectbar select { font-size: 12px; border: 1px solid var(--reader-line); border-radius: 5px; background: var(--reader-paper); color: var(--reader-muted); max-width: 150px; }

.nb-chip--lens { opacity: .75; }

/* ---- 精选角度(快讯左栏):分组 + 近 24 小时已选/配额 ---- */

.nb-angle-group { margin-top: 12px; }

.nb-display-list { display: grid; gap: 2px; }

.nb-display-list .nb-side__item em { font-variant-numeric: tabular-nums; }

.sd-edit { font: 600 11px var(--ui-font); letter-spacing: 0; }

/* ---- 嵌入页 iframe(来源页的标杆校准) ---- */

.nb-frame { display: block; width: 100%; border: 0; background: #fff; }

/* ---- 分析 / 系统:沿用旧面板,只把标题条改成白底 ---- */

body[data-tab] .sd-kicker { margin-bottom: 12px; }

.sd-table th { letter-spacing: 0; text-transform: none; }

.sd-genre-pill { border-color: var(--reader-border); color: var(--reader-body); }

.sd-genre-pill em { color: var(--reader-muted); }

.sd-genre-pill.is-on em { color: var(--reader-selected-ink); }

.sd-genre-pill:hover { border-color: var(--reader-accent); }

.sd-gate { padding: 60px 0; text-align: center; }

.sd-primary { letter-spacing: .1em; font: 600 13px var(--ui-font); cursor: pointer; }

.sd-modal__head { background: var(--reader-panel); }

@media (max-width: 800px) {
  .nb-toolbar__count { margin-left: 0; }
  .nb-side__item { width: auto; }
  .nb-status { display: none; }
}


/* ==========================================================================
   4. 各页布局：编辑模式、下架复盘、筛选面板、staff 表格，以及 2026-10-03 视觉整理
   （原 web/themes.css）
   ========================================================================== */

.sd {
  font-family: var(--ui-font); line-height: 1.5;
  background: var(--reader-paper); -webkit-font-smoothing: antialiased;
}

.sd button, .sd input, .sd select, .sd textarea { font: 400 14px/1.5 var(--ui-font); }

.sd button { cursor: pointer; }

.sd button:disabled { cursor: default; }

.sd :focus-visible { outline: 2px solid var(--reader-accent); outline-offset: 3px; }

.nb-top { z-index: 20; grid-template-columns: auto 1fr auto; border-color: var(--reader-line); background: var(--reader-paper); }


.sd .nb-nav button { padding: 7px 13px; border-radius: var(--reader-radius); font-weight: 500; color: var(--reader-muted); }

.sd .nb-nav button:hover { background: var(--reader-hover); color: var(--reader-body); }

.sd .sd-menu__group button, .sd .sd-menu__group a { padding: 10px 14px; font-size: 14px; }

.sd-menu__who, .sd-menu__who b { font: 400 13px/1.6 var(--ui-font); }

.nb-side__group { margin: 22px 10px 8px; font: 500 12px/1.5 var(--ui-font); letter-spacing: .04em; }

.sd .nb-side__item { min-height: 34px; padding: 6px 10px; font-size: 14px; font-weight: 400; line-height: 1.5; gap: 9px; }

.sd .nb-side__item:hover { background: var(--reader-active); }

.sd .nb-side__item.is-on { font-weight: 550; }

.nb-side__item i { flex: none; border-radius: 50%; }

.nb-side__item em { font: 400 12px/1.5 var(--ui-font); font-variant-numeric: tabular-nums; }

.nb-main > section { padding: 0 32px; }

.sd .nb-toolbar input[type="search"] { min-width: 0; }

.nb-toolbar__count { font: 400 13px/1.5 var(--ui-font); }

.nb-review-filter { display:flex; align-items:center; flex-wrap:wrap; gap:10px; padding:10px 0; }

.nb-review-filter[hidden] { display:none; }

.sd .nb-review-toggle { padding:7px 12px; border:1px solid var(--reader-border); border-radius:var(--reader-button-radius); background:var(--reader-paper); color:var(--reader-body); font:500 13px/1.5 var(--ui-font); cursor:pointer; }

.sd .nb-review-toggle[aria-pressed="true"] { background:var(--reader-selected-bg); border-color:var(--reader-selected-bg); color:var(--reader-selected-ink); }

.nb-review-toggle:focus-visible { outline:2px solid var(--reader-accent); outline-offset:2px; }

.nb-review-hint,.nb-recommendation { color:var(--reader-muted); font:400 12px/1.6 var(--ui-font); }

.nb-recommendation { margin:6px 0; }

.sd a.nb-title:hover { color: var(--reader-accent); text-decoration: underline; text-decoration-thickness: 1px; text-underline-offset: 3px; }

.sd .nb-chip { padding: 0; }

.nb-row .sd-badge { border: 0; }

.sd .sd-edit--danger { color: #a7473e; }

.sd .sd-edit:hover { background: var(--reader-panel); color: var(--reader-body); }

.sd-kicker { border-bottom: 1px solid var(--reader-border); letter-spacing: 0; margin: 10px 0 0; scroll-margin-top: 85px; font: 600 16px/1.6 var(--ui-font); padding: 24px 0 12px; border-color: var(--reader-line); }

.sd-dashboard { margin: 18px 0 24px; border-color: var(--reader-line); border: 1px solid var(--reader-line); border-radius: var(--reader-radius); background: var(--reader-paper); overflow: hidden; }

.sd-dashboard__head { border-color: var(--reader-line); letter-spacing: 0; padding: 16px; border-bottom: 1px solid var(--reader-line); font: 550 14px/1.5 var(--ui-font); }

.sd-dashboard__head em { font: 400 12px/1.5 var(--ui-font); }

.sd-metric { padding: 20px; border-color: var(--reader-line); }

.sd-metric strong { display: block; font: 550 30px/1.2 var(--ui-font); letter-spacing: -.04em; }

.sd-metric span { letter-spacing: 0; font: 400 12px/1.6 var(--ui-font); text-transform: none; }

.sd-table td, .sd-table th { padding: 12px; border-bottom: 1px solid var(--reader-line); }

.sd-table td { line-height: 1.6; }

.sd .sd-genre-pill { padding: 6px 12px; border: 1px solid var(--reader-line); border-radius: 6px; background: var(--reader-paper); font-size: 13px; font-weight: 400; }

.sd .sd-genre-pill.is-on { background: var(--reader-selected-bg); color: var(--reader-selected-ink); border-color: var(--reader-selected-bg); }

.sd-pattern { grid-template-columns: 48px 1fr; padding: 12px 0; }

.sd-pattern p { margin: 0; font-size: 14px; line-height: 1.7; }

.sd-pattern p.hl { margin-top: 3px; color: var(--reader-muted); font-size: 13px; }

.sd-term { background: var(--reader-panel); border: 0; border-radius: 5px; font-weight: 400; }

.sd-modal__box { border-color: var(--reader-border); border: 1px solid var(--reader-line); border-radius: 12px; box-shadow: 0 20px 80px #0002; }

.sd-modal__head { padding: 18px; }

.sd-modal__body { padding: 18px; }

.sd .sd-modal__body input { border: 1px solid var(--reader-border); border-radius: 6px; padding: 9px; font-size: 14px; }

.sd-modal__body span { font: 500 13px/1.5 var(--ui-font); letter-spacing: 0; }

.nb-frame { height: calc(100vh - 60px); }

/* Shared page headings for staff workspaces. */

.nb-page-head h1 { margin: 0 0 8px; font-weight: 600; letter-spacing: -.03em; }

.nb-page-head p { margin: 0; color: var(--reader-muted); font-size: 14px; }

.sd .nb-reason select { border: 1px solid var(--reader-line); background: var(--reader-paper); border-radius: 5px; padding: 5px; max-width: 100%; font-size: 13px; }

.nb-reason small { color: var(--reader-muted); font-size: 12px; }

.nb-record-tools { display: flex; flex-wrap: wrap; gap: 12px; align-items: center; justify-content: space-between; }

.sd .nb-record-tools input { padding: 8px 12px; border: 1px solid var(--reader-line); border-radius: 6px; background: var(--reader-paper); min-width: 220px; }

@media (max-width: 1100px) {
  .nb-main > section { padding: 0 22px; }
}

@media (max-width: 800px) {
  .nb-app { grid-template-columns: 1fr; grid-template-rows: auto 1fr; }
  .sd .nb-toolbar input[type="search"] { flex: 1 1 100%; }
  .nb-side { display: flex; flex-wrap: wrap; position: static; gap: 4px; border-bottom: 1px solid var(--reader-line); }
  .nb-side__group { width: 100%; margin: 10px 8px 4px; }
  .sd .nb-side__item { min-height: 32px; }
  .nb-toolbar { position: static; flex-wrap: wrap; }
  .nb-main > section { padding: 0 16px; }
  .sd-metrics--3up { grid-template-columns: 1fr; }
  .sd-metrics--3up .sd-metric { border-right: 0; border-bottom: 1px solid var(--reader-line); }
  .sd-kicker { scroll-margin-top: 115px; }
}

.nb-table-scroll { overflow-x: auto; max-width: 100%; }

.sd-table td.num, .sd-table th.num { text-align: right; font-family: var(--ui-font); font-variant-numeric: tabular-nums; }

#takedowns .sd-table th:nth-child(2), #takedowns .sd-table td:nth-child(2) { min-width: 260px; }

#takedowns .sd-table th { white-space: nowrap; }

.sd .nb-editbar select { font-size: 12px; border: 1px solid var(--reader-line); border-radius: 5px; background: var(--reader-paper); color: var(--reader-muted); max-width: 170px; }

.sd-note { border-left: 1px solid var(--reader-line); font-size: 13px; }

.nb-review-card { padding: 20px; border: 1px solid var(--reader-line); border-radius: 10px; }

.nb-review-card__head a { font-size: 16px; line-height: 1.6; color: var(--reader-body); font-weight: 550; text-decoration: none; }

.nb-review-label { display: grid; gap: 8px; margin-top: 18px; font-size: 14px; font-weight: 500; }

.sd .nb-review-label textarea { resize: vertical; width: 100%; min-height: 90px; padding: 12px; border: 1px solid var(--reader-border); border-radius: 7px; color: var(--reader-body); background: var(--reader-paper); font-size: 14px; line-height: 1.6; }

.sd .nb-review-actions .sd-edit { font-size: 14px; padding: 9px 16px; }

.sd .nb-review-close { display: block; margin: 0 0 14px auto; padding: 4px 8px; border-radius: 5px; background: var(--reader-panel); color: var(--reader-muted); }

.nb-review-dialog .nb-review-card { border: 0; padding: 0; }

.nb-reason select { text-overflow: ellipsis; }

@media (max-width: 420px) {
  .nb-review-card { padding: 12px; }
  .nb-review-actions > button { width: 100%; }
}

[data-appearance="dark"] .sd .sd-primary { color: var(--reader-paper); }

[data-appearance="dark"] .sd .sd-edit--danger { color: #f19b90; }

@media (max-width: 1300px) { .nb-status { display: none; } }

@media (min-width: 801px) and (max-width: 1050px) { .sd .nb-nav button { padding-inline: 7px; } }

@media (max-width: 800px) {
  .nb-top { grid-template-columns: minmax(0, 1fr); }
  .nb-brand { grid-row: 1; }
  .nb-right { grid-row: 2; grid-column: 1; justify-content: flex-end; padding-top: 8px; }
  .nb-nav { grid-row: 3; grid-column: 1; }
 }

.sd .sd-modal__head, .sd .sd-modal__x { color: var(--reader-body); }

[data-appearance="dark"] .sd :is(input, select, textarea) { background: var(--reader-paper); color: var(--reader-body); border-color: var(--reader-border); }

[data-appearance="dark"] .sd .sd-edit--ok { color: var(--sd-ok); }

/* Shared responsive layout: a compact header and legible data surfaces. */

.sd { font-size:14px; }

.sd .sd-table { font:400 13px/1.55 var(--ui-font); table-layout:auto; width:100%; }

.sd .sd-table td:first-child { min-width:86px; }

.sd .sd-table td:last-child button { white-space:nowrap; }

.sd .sd-table a { text-decoration:none; color:var(--reader-body); }

.sd .sd-table a:hover { text-decoration:underline; color:var(--reader-accent); }

.sd .sd-menu__pop { background: var(--reader-paper); max-height:calc(100dvh - 74px); overflow-y:auto; }

.nb-reason { display: grid; gap: 5px; min-width:190px; max-width:300px; font-size:13px; }

.nb-reason strong { font-weight:500; }

#takedowns .sd-table td:nth-child(2) { min-width:240px; max-width:460px; }

#takedowns .sd-table td:nth-child(3) { min-width:82px; }

.nb-page-head { padding:24px 0 16px; }

@media(max-width:1100px) { .sd .nb-nav button { padding-inline:8px; } .nb-top { padding-inline:16px; } }

@media(max-width:800px) {
 .nb-nav { border:0; }
 .sd .nb-nav button { padding:9px 12px; font-size:13px; }
 .nb-side { display:flex; overflow-x:auto; flex-wrap:nowrap; }
 .nb-side__group { display:none; }
 .sd .nb-side__item { flex-shrink:0; white-space:nowrap; font-size:12px; }
 .nb-main { min-width:0; }
 .nb-main > section { padding:0 16px; }
 .nb-page-head { padding:18px 0 12px; }
 .sd .sd-table { min-width:560px; }
 .sd .sd-table td:first-child { white-space:nowrap; }
 #takedowns .sd-table { min-width:0; }
 #takedowns .sd-table thead { display:none; }
 #takedowns .sd-table,#takedowns .sd-table tbody { display:block; }
 #takedowns .sd-table tr { display:flex; flex-wrap:wrap; padding:14px 0; gap:6px 12px; border-bottom:1px solid var(--reader-line); }
 #takedowns .sd-table td { display:block; min-width:0!important; max-width:none!important; padding:0; border:0; font-size:12px; }
 #takedowns .sd-table td:nth-child(2) { order:-1; width:100%; font-size:15px; font-weight:500; }
 #takedowns .sd-table td:nth-child(6) { width:100%; padding-top:6px; }
 #takedowns .sd-table td:nth-child(7)::before { content:'同题 '; color:var(--reader-muted); }
 #takedowns .sd-table td:nth-child(8)::before { content:'此后拦截 '; color:var(--reader-muted); }
 #takedowns .nb-reason { max-width:none; min-width:0; }
 .nb-record-tools { gap:8px; }
 .sd .nb-record-tools input { min-width:0; width:100%; }
}

@media(max-width:800px) {
 .sd-metrics--3up { grid-template-columns:1fr 1fr; }
 .sd-metrics--3up .sd-metric:last-child { grid-column:1/-1; }
}

@media(max-width:800px) { .nb-frame { height:calc(100dvh - 132px); min-height:520px; } }

@media(max-width:800px) { #takedowns .sd-edit { min-height:32px; padding:5px 10px; } }

.sd-metric { min-width:0; overflow-wrap:anywhere; }

@media(min-width:801px) {
 #takedowns .sd-table td:nth-child(3) { white-space:nowrap; min-width:94px; }
 #takedowns .sd-table td:nth-child(5) { min-width:135px; }
}

/* Component roles consume the shared design system; no per-page theme palettes. */

.sd :is(.nb-page-head h1,.sd-modal__head,.nb-review-dialog h2) { color:var(--reader-heading); font-weight:var(--reader-heading-weight); letter-spacing:var(--reader-tracking); }

.sd .nb-page-head h1 { font-size:var(--reader-heading-size); }

.sd :is(.sd-kicker,.sd-dashboard__head) { color:var(--reader-heading); font-weight:var(--reader-heading-weight); }

.sd .sd-primary { border: 0; padding: 9px 16px; font-weight: 500; background:var(--reader-primary); color:var(--reader-on-primary); border-radius:var(--reader-button-radius); }

.sd .nb-nav button[aria-current="page"],.sd .nb-side__item.is-on { background:var(--reader-nav-bg); color:var(--reader-nav-ink); }

.sd :is(.sd-table a,a.nb-title,.nb-row--must a.nb-title) { color:var(--reader-heading); font-weight:var(--reader-title-weight); }

.sd a.nb-title,.sd .nb-row--must a.nb-title { font-size:var(--reader-title-size); line-height:var(--reader-title-leading); }

.nb-excerpt { font-weight:400; }

.nb-meta { color:var(--reader-muted); }

.sd .sd-table th { white-space:nowrap; font:500 12px/1.5 var(--ui-font); color:var(--reader-secondary); background:var(--reader-panel); border-bottom:1px solid var(--reader-border); }

.sd .sd-table tbody tr:hover { background:var(--reader-hover); }

.sd .sd-metric strong { color:var(--reader-heading); font-weight:var(--reader-heading-weight); }

[data-theme="attio"] .sd .sd-table th+th { border-left:1px solid var(--reader-line); }

[data-theme="folk"] .sd .sd-dashboard { border-radius:var(--reader-radius); }

.timeline-pager { display:flex; flex-wrap:wrap; }

.timeline-page-label { margin-right:auto; font-variant-numeric:tabular-nums; }

.sd .timeline-page-button:not(:disabled):hover { background:var(--reader-active); }

.timeline-page-end { text-align:right; }

@media(max-width:800px) {
 .sd .timeline-page-button { padding-inline:9px; }
}

.sd .nb-row .sd-badge--info { background:var(--reader-info-bg); color:var(--reader-info-ink); }

/* Containers, controls and row dividers deliberately have different line roles. */

.sd :is(.sd-dashboard,.sd-modal__box){border-color:var(--reader-frame);border-radius:var(--reader-radius);box-shadow:var(--crm-shadow)}

.sd :is(input,textarea,select),.sd .nb-toolbar input[type="search"]{border-radius:var(--reader-input-radius);border-color:var(--reader-border)}

.sd .sd-edit{padding: 3px 8px;border: 1px solid var(--reader-border);background: var(--reader-paper);font-size: 12px;font-weight: 400;border-radius:var(--reader-button-radius)}

.sd .sd-table td{padding:12px;vertical-align:top;overflow-wrap:anywhere;color:var(--reader-body);border-color:var(--reader-line)}

[data-theme="folk"] .sd :is(.nb-top,.nb-side){border-color:var(--reader-frame)}

[data-theme="folk"] .sd .nb-nav button{border-radius:0;background:transparent;padding-block:10px;border-bottom:1px solid transparent}

[data-theme="folk"] .sd .nb-nav button[aria-current="page"]{background:var(--reader-selected-bg);color:var(--reader-selected-ink);border-bottom-color:transparent}

[data-theme="folk"] .sd .nb-side__item{border-radius:0}

[data-theme="folk"] .sd .sd-table th{background:transparent;border-bottom-color:var(--reader-frame)}

/* A contextual decision sheet retains the list behind it. Native dialog owns focus. */

.nb-review-dialog{position:fixed;inset:0 0 0 auto;margin:0;width:min(680px,100vw);height:100dvh;max-height:100dvh;max-width:100vw;box-sizing:border-box;padding:24px 28px;border:0;border-left:1px solid var(--reader-frame);border-radius:0;background:var(--reader-paper);color:var(--reader-body);overflow:auto;box-shadow:-8px 0 32px #0000000a}

.nb-review-dialog::backdrop{background:#11131824}

.nb-review-section{padding:20px 0;border-bottom:1px solid var(--reader-line)}

.nb-review-section h3{font-size:12px;font-weight:500;letter-spacing:0;color:var(--reader-secondary);margin:0 0 12px}

.nb-review-section p{font-size:14px;line-height:1.65;margin:8px 0;white-space:pre-wrap;overflow-wrap:anywhere}

.nb-review-card__head .nb-title{font-size:20px!important;line-height:1.5!important;display:block;margin:0 0 12px}

.nb-review-card__head .nb-meta{line-height:1.7}

.nb-review-log{list-style:none;margin:0;padding:0}

.nb-review-log li{padding:8px 0 8px 14px;border-left:1px solid var(--reader-line);font-size:13px;line-height:1.65}

.nb-review-log small{display:block;color:var(--reader-muted);font-size:11px}

.nb-review-log p{margin:4px 0}

.nb-review-next label{font-size:13px}

.nb-review-next textarea{box-sizing:border-box;width:100%;font-size:14px!important;line-height:1.6;padding:12px;min-height:110px}

.nb-review-actions{flex-wrap: wrap;position:sticky;bottom:-1px;margin:16px -1px -1px;padding:14px 0;background:var(--reader-paper);border-top:1px solid var(--reader-line);display:flex;justify-content:flex-end;gap:10px}

.sd .nb-review-actions button{min-height:40px;padding-inline:18px;font-size:14px}

.nb-review-feedback{font-size:12px;color:var(--reader-secondary);line-height:1.6}

@media(max-width:800px){.nb-review-dialog{padding:16px 20px}.nb-review-card__head .nb-title{font-size:18px!important}.nb-review-section{padding:16px 0}.nb-review-actions{position:sticky}.nb-review-actions>button{width:auto;flex:1}}

.nb-review-dialog > .nb-review-feedback:empty{display:none}

.nb-review-dialog .nb-review-card__head{padding-top:8px}

.nb-review-dialog .nb-review-label textarea{border-radius:var(--reader-input-radius)}

.nb-review-next{border-bottom:0;padding-bottom:20px}

.sd .sd-menu__btn{white-space: nowrap;letter-spacing:0}

/* Independent research angles and industry subjects retain their hierarchy. */

.nb-side--research { padding: 14px 12px 24px; }

.nb-filter-panel { margin: 0 0 12px; border: 1px solid var(--reader-border); overflow: hidden; background: var(--reader-paper); min-width: 0; }

.nb-filter-panel__summary { display: flex; align-items: center; flex-wrap: wrap; gap: 4px 8px; cursor: pointer; list-style: none; }

.nb-filter-panel__summary::-webkit-details-marker { display: none; }

.nb-filter-panel__summary::after { content: '+'; margin-left: auto; color: var(--reader-muted); font-size: 16px; line-height: 1; }

.nb-filter-panel[open] > .nb-filter-panel__summary::after { content: '−'; }

.nb-filter-panel__summary strong { color: var(--reader-heading); font-size: 13px; font-weight: 600; }

.nb-filter-panel__summary > span { color: var(--reader-muted); font-size: 12px; }

.nb-filter-panel[open] > .nb-filter-panel__summary > span { display: none; }

.nb-filter-panel[open] > .nb-filter-panel__summary { border-bottom: 1px solid var(--reader-line); }

[data-theme="folk"] .nb-filter-panel { border-color: var(--reader-frame); }

[data-theme="folk"] .nb-filter-panel[open] > .nb-filter-panel__summary, [data-theme="folk"] .nb-topic-family + .nb-topic-family, [data-theme="folk"] .nb-topic-children { border-color: var(--reader-frame); }

.nb-filter-panel__hint { margin: -2px 2px 10px; color: var(--reader-muted); font-size: 12px; line-height: 1.6; }

.nb-angle-list { display: grid; grid-template-columns: repeat(2, minmax(0, 1fr)); gap: 3px; }

.nb-angle-list > :first-child { grid-column: 1 / -1; }

.sd .nb-angle-list .nb-side__item { width: 100%; min-height: 32px; padding: 5px 6px; font-size: 12px; }

.nb-angle-list .nb-side__item i { display: none; }

.nb-topic-family { margin-top: 14px; }

.nb-topic-family + .nb-topic-family { padding-top: 12px; border-top: 1px solid var(--reader-line); }

.nb-topic-family h3 { margin: 0 2px 8px; font: 500 11px/1.5 var(--ui-font); color: var(--reader-muted); }

.nb-topic-tree { display: grid; gap: 5px; }

.nb-topic-tree > .nb-topic, .nb-topic-branch > .nb-topic { width: 100%; text-align: left; }

.nb-topic-children { display: flex; gap: 5px; flex-wrap: wrap; margin: 5px 0 4px 11px; padding-left: 9px; border-left: 1px solid var(--reader-border); }

.nb-topic-support { display: flex; flex-wrap: wrap; gap: 6px; margin-top: 8px; }

.sd .nb-topic { padding: 5px 8px; min-height: 30px; border: 1px solid var(--reader-line); border-radius: var(--reader-button-radius); background: var(--reader-paper); color: var(--reader-body); font: 400 12px/1.4 var(--ui-font); cursor: pointer; }

.sd .nb-topic:hover { border-color: var(--reader-border); background: var(--reader-hover); }

.sd .nb-topic.is-on { background: var(--reader-selected-bg); border-color: var(--reader-selected-bg); color: var(--reader-selected-ink); }

.nb-topic small { margin-left: 5px; padding-left: 5px; border-left: 1px solid currentColor; font-size: 10px; opacity: .7; }

.nb-active-filters { display: flex; align-items: center; flex-wrap: wrap; gap: 8px; padding: 12px 0; border-bottom: 1px solid var(--reader-line); }

.nb-active-filters[hidden] { display: none; }

.sd .nb-active-filter { border: 1px solid var(--reader-selected-bg); border-radius: var(--reader-button-radius); padding: 5px 9px; background: var(--reader-selected-bg); color: var(--reader-selected-ink); font-size: 12px; }

.sd .nb-clear-filters { padding: 5px; color: var(--reader-muted); background: transparent; font-size: 12px; }

@media (max-width: 800px) {
  .nb-side.nb-side--research { display: grid; grid-template-columns: minmax(0, 1fr); gap: 8px; overflow: visible; padding: 12px 16px; }
  .nb-side--research .nb-filter-panel { margin: 0; }
  .nb-side--research .nb-filter-panel__summary { padding: 10px 12px; }
  .nb-filter-panel__summary > span { margin-left: auto; }
  .nb-filter-panel__summary::after { margin-left: 2px; }
  .nb-filter-panel[open] > .nb-filter-panel__summary::after { margin-left: auto; }
  .nb-angle-list { grid-template-columns: repeat(2, minmax(0, 1fr)); gap: 4px; }
  .sd .nb-angle-list .nb-side__item { min-height: 36px; }
  .sd .nb-topic { min-height: 36px; }
  .nb-topic-tree { grid-template-columns: minmax(0, 1fr) minmax(0, 1fr); align-items: start; }
  .nb-topic-branch { grid-row: span 2; }
  .sd .nb-active-filter, .sd .nb-clear-filters { min-height: 36px; }
}

/* Related subjects stay directly beneath their parent; region choices share a compact grid. */

.nb-region-grid { display:grid; grid-template-columns:repeat(4,minmax(0,1fr)); gap:5px; }

.sd .nb-region-grid .nb-side__item { width:100%; min-width:0; padding:6px 2px; min-height:34px; justify-content:center; text-align:center; font-size:12px; border:1px solid var(--reader-line); border-radius:var(--reader-button-radius); }

.nb-region-grid .nb-side__item span { flex:0 1 auto; }

.nb-region-grid .nb-side__item:focus-visible { outline:2px solid var(--reader-primary); outline-offset:2px; }

@media(max-width:800px) { .sd .nb-region-grid .nb-side__item { min-height:36px; } .nb-topic-branch { grid-row:auto; } }

/* Staff-only review uses each article's own scores, timestamps and provenance. */

.nb-editor-mode { width:100%; font:600 13px/1.5 var(--ui-font); color:var(--reader-heading); }

.nb-editor-controls { display:flex; flex-wrap:wrap; align-items:end; gap:10px 16px; width:100%; }

.nb-editor-control { display:grid; gap:5px; color:var(--reader-secondary); font:400 12px/1.5 var(--ui-font); }

.sd .nb-editor-control select { min-height:36px; max-width:100%; padding:6px 26px 6px 10px; color:var(--reader-body); background:var(--reader-paper); border:1px solid var(--reader-border); border-radius:var(--reader-input-radius); font:400 13px/1.5 var(--ui-font); }

.nb-editor-control select:focus-visible { outline:2px solid var(--reader-primary); outline-offset:2px; }

.nb-editor-scope { width:100%; padding:6px 10px; background:var(--reader-panel); color:var(--reader-secondary); font-size:12px; }

.nb-editor-details { margin-top:14px; padding:12px; border:1px solid var(--reader-line); border-radius:var(--reader-radius); background:var(--reader-paper); }

.nb-editor-summary { display:flex; flex-wrap:wrap; align-items:center; gap:8px; color:var(--reader-secondary); font:400 12px/1.5 var(--ui-font); }

.nb-editor-grid { display:grid; grid-template-columns:repeat(auto-fit,minmax(240px,1fr)); gap:14px 22px; margin-top:12px; }

.nb-editor-section { min-width:0; }

.nb-editor-details h4 { margin:0 0 8px; font:600 12px/1.5 var(--ui-font); color:var(--reader-heading); }

.nb-editor-facts { margin:0; display:grid; grid-template-columns:96px minmax(0,1fr); gap:5px 8px; font:400 12px/1.65 var(--ui-font); }

.nb-editor-facts dt { color:var(--reader-muted); }

.nb-editor-facts dd { margin:0; color:var(--reader-body); overflow-wrap:anywhere; white-space:pre-wrap; font-variant-numeric:tabular-nums; }

.nb-editor-provenance, .nb-editor-history { margin:12px 0 0; padding-top:10px; border-top:1px solid var(--reader-line); color:var(--reader-secondary); font-size:12px; line-height:1.7; overflow-wrap:anywhere; }

.nb-editor-history p { margin:4px 0; }

.nb-editor-provenance a { color:inherit; text-decoration:underline; }

.nb-editor-raw { margin-top:12px; color:var(--reader-muted); font-size:12px; }

.nb-editor-raw summary { cursor:pointer; }

.nb-editor-raw pre { max-height:360px; overflow:auto; white-space:pre-wrap; overflow-wrap:anywhere; padding:10px; background:var(--reader-panel); color:var(--reader-body); font:12px/1.6 ui-monospace,monospace; }

@media(max-width:800px) {
  .nb-region-grid { width:100%; }
  .nb-editor-controls { gap:10px; }
  .nb-editor-control { flex:1 1 140px; }
  .nb-editor-grid { grid-template-columns:minmax(0,1fr); }
  .nb-editor-facts { grid-template-columns:88px minmax(0,1fr); }
}

.sd .nb-datacenter-reset { min-height:32px; padding:5px 10px; border:1px solid var(--reader-primary); border-radius:var(--reader-button-radius); background:var(--reader-primary); color:var(--reader-on-primary); font-size:12px; }

.nb-datacenter-scope { color:var(--reader-secondary); font-size:12px; line-height:1.6; }

/* Prefer a Simplified-Chinese UI face while retaining system Latin glyphs. */

/* Shared typography preferences apply after mobile/theme title overrides. */

:root[data-text-size] .sd :is(a.nb-title,.nb-subbody > a) { font-size:var(--reader-title-size); }

.nb-removal-status { position:fixed; bottom:16px; right:16px; z-index:1000; max-width:calc(100vw - 32px); padding:10px 14px; background:var(--reader-paper); color:var(--reader-heading); border:1px solid var(--reader-border); border-radius:8px; box-shadow:0 2px 12px #0002; display:flex; gap:12px; flex-wrap:wrap; font-size:14px; }

.nb-removal-status[hidden] { display:none; }

/* ===== 2026-10-03 视觉整理 =====
   One header row at every width (brand · tabs · status · Aa · 管理); a reading column
   instead of full-bleed titles; rows read source → title → original → meta, so the
   domain no longer sits truncated in its own column. The 2026-10-03 cleanup removed the earlier
   declarations it could prove these rules always override (a few dead ones may remain), and lowered
   `body.sd …` to `.sd …` wherever that was provably safe; the rest were kept, not proven necessary. */

body.sd { background:var(--reader-paper); }

.sd .nb-top { position:sticky; top:0; display:flex; flex-wrap:nowrap; align-items:center; gap:24px; height:var(--nb-top-h); min-height:0; padding:0 24px; background:color-mix(in srgb, var(--reader-paper) 90%, transparent); -webkit-backdrop-filter:saturate(1.5) blur(12px); backdrop-filter:saturate(1.5) blur(12px); border-bottom:1px solid var(--reader-line); }

body.sd .nb-brand { flex:none; gap:10px; font-size:17px; color:var(--reader-heading); }

.sd .nb-brand img { width:24px; height:24px; filter:none; opacity:1; }

.sd .nb-brand b { font-weight:700; letter-spacing:-.03em; }

.sd .nb-nav { align-self:stretch; display:flex; gap:4px; padding:0; overflow:visible; }

body.sd .nb-nav :is(button,a) { display:inline-flex; align-items:center; flex:none; white-space:nowrap; height:100%; padding:0 10px; border:0; border-bottom:2px solid transparent; border-radius:0; background:transparent; color:var(--reader-secondary); font:500 14px/1 var(--ui-font); text-decoration:none; }

body.sd .nb-nav [hidden] { display:none; }

body.sd .nb-nav :is(button,a):hover { background:transparent; color:var(--reader-heading); }

body.sd .nb-nav :is(button,a)[aria-current="page"] { align-self:center; height:auto; margin-block:10px; padding:0 10px; background:var(--reader-selected-bg); color:var(--reader-selected-ink); border-bottom-color:transparent; border-radius:2px; font-weight:600; }

.sd .nb-right { display:flex; flex-wrap:nowrap; align-items:center; gap:6px; margin-left:auto; }

.sd .nb-status { margin-right:8px; color:var(--reader-muted); font-size:12px; }

body.sd .sd-menu__btn { height:34px; padding:0 12px; border:1px solid var(--reader-line); border-radius:var(--reader-button-radius); background:var(--reader-paper); color:var(--reader-heading); font:500 13px/1 var(--ui-font); }

body.sd .sd-menu__btn:hover, body.sd .sd-menu__btn[aria-expanded="true"] { background:var(--reader-hover); border-color:var(--reader-border); }

body.sd .sd-menu__pop { border-radius:6px; border-color:var(--reader-line); box-shadow:0 8px 24px rgba(23,33,38,.12); }

[data-theme="folk"] .sd .sd-menu__pop { border-radius:2px; border-color:var(--reader-frame); }

.sd .nb-app { min-height:calc(100vh - var(--nb-top-h)); }

.sd .nb-side { top:var(--nb-top-h); min-height:calc(100vh - var(--nb-top-h)); box-sizing:border-box; max-height:calc(100vh - var(--nb-top-h)); padding:20px 16px 32px; background:var(--reader-paper); border-right:1px solid var(--reader-line); }

.sd .nb-filter-panel { border-color:var(--reader-line); border-radius:0; }

[data-theme="folk"] .sd .nb-filter-panel { border-radius:0; }

.sd .nb-filter-panel__summary { padding:12px 14px; background:transparent; }

.sd .nb-filter-panel__body { padding:6px 8px 10px; background:transparent; }

body.sd .nb-side__item { border-radius:2px; }
.sd .nb-side__item.is-on { box-shadow:inset 2px 0 0 var(--reader-selected-ink); }
.sd .nb-side__item.is-on em { color:var(--reader-selected-ink); }

.sd .nb-side__item i { width:7px; height:7px; opacity:1; }

body.sd .nb-angle-group h3 { margin:14px 8px 6px; color:var(--reader-muted); font:500 12px/1.4 var(--ui-font); letter-spacing:.04em; }

/* ===== 快讯:通讯社台版式(2026-10-03 改版) =====
   站长:「没有全屏，设计很粗糙，密度不够，没有重点」。读者页改成满屏三栏:
     左 精选角度(窄) | 中 快讯流(满宽,一行一个故事) | 右 重点(近 24 小时按报道家数 × 时效 × 价值排出的几件事 + 角度动态)。
   流里一行:时间 | 中文标题(译过才有灰色原文)| 来源与角度 | 报道家数(几家媒体,服务端 outlets;没有时写篇数)。角度是文字。必读和这一行的家数用酸绿底。
   家数分五档(timeline-lead.js 的 coverageLevel),档越高标题越重;1080 高的屏一屏约 18 条(原来 7 条)。
   行的子元素直接挂在 .nb-row 上,三种版式只换网格区域,按流本身的宽度(容器查询)切换:
     流宽 ≥ 760:来源与角度单独一列;560–759:来源跟在原文后面;< 560(手机):标题 / 原文 / 来源 … 家数 三行。
   重点栏:≥ 1280 是右栏(吸顶、自己滚);801–1279 在流的上方;≤ 800 单栏,排在最前。
   快讯内参(body[data-desk],编辑模式)没有重点栏,时间、标题和操作放在同一行。 */

/* ---- 三栏壳 ---- */

.sd .nb-app--lead { grid-template-columns:var(--nb-side-w) minmax(0,1fr) var(--nb-lead-w); grid-template-areas:"side main lead"; }

.nb-app--lead > .nb-side { grid-area:side; }

.nb-app--lead > .nb-main { grid-area:main; }

.nb-app--lead > .nb-lead { grid-area:lead; }

.nb-lead[hidden] { display:none; }

body.sd #timeline { padding:0 24px; }

body.sd[data-desk] #timeline { max-width:1240px; }

/* ---- 工具条:搜索 · 计数 · 翻页,一行吸顶 ---- */

body.sd .nb-toolbar { top:var(--nb-top-h); min-height:0; margin:0 -24px; padding:10px 24px; gap:14px; background:var(--reader-paper); border-bottom:1px solid var(--reader-line); }

body.sd .nb-toolbar input[type="search"] { flex:0 1 360px; max-width:none; height:34px; padding:0 12px 0 34px; border:1px solid var(--reader-line); border-radius:2px; background:var(--reader-paper) url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='16' height='16' fill='none' stroke='%235E686B' stroke-width='1.5' stroke-linecap='round'%3E%3Ccircle cx='7' cy='7' r='5'/%3E%3Cpath d='m11 11 3.5 3.5'/%3E%3C/svg%3E") no-repeat 11px 50%; color:var(--reader-heading); font-size:13px; }

[data-theme="folk"] body.sd .nb-toolbar input[type="search"] { border-radius:999px; }

.sd .nb-toolbar input[type="search"]::placeholder { color:var(--reader-muted); }

body.sd .nb-toolbar input[type="search"]:focus { outline:2px solid var(--link); outline-offset:2px; background-color:var(--reader-paper); border-color:var(--reader-line); box-shadow:none; }

.sd .nb-toolbar__count { flex:1 1 auto; min-width:0; margin:0; overflow:hidden; text-overflow:ellipsis; color:var(--reader-muted); font-size:12px; }

.sd .timeline-pager { align-items:center; gap:6px; padding:4px 0 8px; border-bottom:0; color:var(--reader-muted); font-size:12px; }

.sd .nb-toolbar .timeline-pager { flex:none; gap:4px; padding:0; }

.sd .nb-toolbar .timeline-page-label { display:none; }

/* 内参的说明很长(编辑线 · 阅读价值 · 排序 · 专题 · 角度 · 最新/历史):折行不截断,翻页处写第几页。 */
body.sd[data-desk] .nb-toolbar { flex-wrap:wrap; }

.sd[data-desk] .nb-toolbar__count { flex:1 1 260px; overflow:visible; white-space:normal; }

.sd[data-desk] .nb-toolbar .timeline-page-label { display:inline; margin-right:4px; }

/* 折成两三行的内参工具条不吸顶(中屏以下):吸顶的话滚动时要挡住两成屏幕;手机上翻页单独一行、可以折行。 */
@media (max-width:1279px) { body.sd[data-desk] .nb-toolbar { position:static; } }

@media (max-width:800px) { .sd[data-desk] .nb-toolbar .timeline-pager { flex:1 1 100%; flex-wrap:wrap; } }

.sd #timeline > .timeline-pager:last-child { padding:20px 0 0; border-top:1px solid var(--reader-line); }

body.sd .timeline-page-button { height:30px; min-height:0; padding:0 10px; border:1px solid var(--reader-line); border-radius:var(--reader-button-radius); background:var(--reader-paper); color:var(--reader-body); font-size:12px; }

.sd .timeline-page-button:disabled { opacity:.4; }

.sd .timeline-page-end { width:auto; margin-left:8px; font-size:12px; }
.sd .timeline-pager--foot { gap:8px 10px; }
.timeline-date-jump { display:flex; align-items:center; flex-wrap:wrap; gap:6px; margin-left:auto; }
.sd .timeline-date-jump select { min-height:32px; max-width:100%; padding:4px 8px; border:1px solid var(--reader-line); border-radius:2px; background:var(--reader-paper); color:var(--reader-body); font:400 12px/1.4 var(--ui-font); }
.sd .timeline-date-jump select[data-filter-active="true"] { background:var(--reader-selected-bg); color:var(--reader-selected-ink); border-color:var(--reader-selected-bg); }
.sd #controls { scroll-margin-top:var(--nb-top-h); }

.sd .nb-fresh { top:calc(var(--nb-top-h) + 62px); }

/* ---- 日期分隔:日期 + 当天条数 + 一条细线 ---- */

body.sd .nb-day { display:flex; align-items:baseline; gap:8px; margin:0; padding:18px 0 6px; color:var(--reader-heading); font:600 13px/1.4 var(--ui-font); letter-spacing:0; text-transform:none; border:0; }

.sd .nb-day::after { content:""; flex:1; align-self:center; height:1px; background:var(--reader-line); }

.sd .nb-day__n { color:var(--reader-muted); font-weight:400; font-size:12px; font-variant-numeric:tabular-nums; }

.sd #rows > .nb-day:first-child { padding-top:12px; }
.nb-day-group { padding:0 10px; scroll-margin-top:120px; }
.nb-day-group--even { background:var(--reader-paper); }
.nb-day-group--odd { background:color-mix(in srgb, var(--reader-paper) 96%, var(--ink)); }
.nb-day-group + .nb-day-group { margin-top:6px; }
.sd .nb-day-group .nb-day { padding-top:12px; }

[data-theme="folk"] .sd .nb-day::after { background:var(--reader-frame); }

/* ---- 标题 · 原文 · 元信息的基础样式(下架复盘的卡片也用);快讯行在下面按行重排 ---- */

body.sd a.nb-title { color:var(--reader-heading); font-weight:600; letter-spacing:-.01em; }

:root[data-font="fangsong"] .sd a.nb-title { font-weight:400; }

body.sd .nb-excerpt { margin-top:2px; color:var(--reader-muted); font-size:13px; line-height:1.5; }

.sd .nb-meta { margin-top:8px; gap:4px 14px; color:var(--reader-muted); font-size:12px; }

/* ---- 快讯行 ---- */

.sd .nb-list { container:stream / inline-size; }

/* 手机(流宽 < 560):时间 | 标题 / 原文 / 来源 … 家数。角度是文字,没有色条。 */
body.sd .nb-row {
  --row-title:var(--reader-title-size); --row-line:calc(var(--row-title) * 1.45);
  position:relative; display:grid; align-items:start;
  grid-template-columns:72px minmax(0,1fr) auto;
  grid-template-areas:"time head head" "time orig orig" "time src cov";
  column-gap:16px; margin:0; padding:12px 12px 12px 10px; border:0; border-left:2px solid transparent; border-radius:0;
}

/* 没译过的行没有原文那一行:网格也不留空行,否则内参的编辑工具会自动排进空行、跑到来源上面。 */
body.sd .nb-row--plain { grid-template-areas:"time head head" "time src cov"; }

.sd .nb-row + .nb-row { border-top:1px solid var(--reader-line); }

.sd .nb-row:hover { background:var(--reader-hover); }

.sd .nb-row.is-open { background:var(--reader-hover); border-left-color:var(--ink); }

/* 有底色的地方(展开的行与同题块、20 家以上的热度行、重点第一条、按下的家数)灰字换深一档:
   --reader-muted 在白纸上刚好 4.5:1,铺了底色就不够了。 */
.sd .nb-row:is(.is-open,[data-cov="4"]), .sd .nb-sub, .sd .nb-lead__item.is-first, .sd button.nb-cov:is(:hover,[aria-expanded="true"]), .sd .nb-pulse__row:hover { --reader-muted:var(--reader-secondary); }

.sd .nb-row > .nb-when { grid-area:time; display:flex; flex-direction:column; align-items:flex-start; gap:2px; }

.sd .nb-when > .nb-time { color:var(--ink); font:400 12px/1.4 var(--ui-mono); font-variant-numeric:tabular-nums; text-decoration:none; white-space:nowrap; }

.sd .nb-when > .nb-time:hover { color:var(--reader-accent); text-decoration:underline; text-underline-offset:3px; }

.sd .nb-row--hot .nb-when > .nb-time { color:var(--ink); }

/* 「必读」在时间下面:酸绿底、墨色字。 */
body.sd .nb-when > .sd-badge.sd-badge--acid { padding:1px 4px; border-radius:0; background:var(--signal); color:var(--signal-ink); font:400 12px/1.4 var(--ui-mono); }

/* 「重点 N」:酸绿小标签,不在行左缘另画色条。 */
.sd .nb-when > .nb-leadtag { padding:1px 4px; background:var(--signal); color:var(--signal-ink); font:400 12px/1.4 var(--ui-mono); white-space:nowrap; }

.sd .nb-row--lead { box-shadow:none; }

/* 从重点栏跳过来的那一行闪一下 */
.sd .nb-row.is-flash { animation:nb-flash 1.6s ease-out; }

@keyframes nb-flash { 0%, 30% { background:var(--hover); } 100% { background:transparent; } }

@media (prefers-reduced-motion: reduce) { .sd .nb-row.is-flash { animation:none; outline:2px solid var(--sd-heat); outline-offset:-2px; } }

.sd .nb-row > .nb-rail { display:none; }

.sd .nb-row > .nb-head { grid-area:head; min-width:0; }

/* 标题按报道家数与阅读价值分轻重:低分 400 · 一般 500 · 必读 600 · 10 家以上 650;20 家以上整行带一点热度底色。 */
:root body.sd .nb-row a.nb-title { color:var(--reader-heading); font-size:var(--row-title); font-weight:600; line-height:1.45; letter-spacing:-.01em; overflow-wrap:anywhere; }

:root body.sd .nb-row--low a.nb-title { color:var(--reader-body); font-weight:400; }

:root[data-font="fangsong"] body.sd .nb-row a.nb-title { font-weight:400; }

/* 行里的标签(必读、内参的 候选/已选、评分摘要)一律 12px;标题后面的(低分、已下架)与标题隔开一点。 */
body.sd .nb-row .sd-badge { padding:0 6px; border-radius:var(--crm-tag-radius, 4px); font:600 12px/18px var(--ui-font); }

body.sd .nb-row .nb-head > .sd-badge { margin-left:8px; vertical-align:2px; }

body.sd .nb-row .sd-badge--acid { background:var(--signal); color:var(--signal-ink); }

.sd .nb-row > .nb-excerpt { grid-area:orig; min-width:0; margin-top:1px; overflow:hidden; color:var(--reader-muted); font:400 12.5px/18px var(--ui-font); white-space:nowrap; text-overflow:ellipsis; }

.sd .nb-row > .nb-src { grid-area:src; display:flex; align-items:baseline; gap:2px 8px; min-width:0; margin-top:4px; color:var(--reader-muted); font:400 12px/1.4 var(--ui-mono); font-variant-numeric:tabular-nums; white-space:nowrap; }

body.sd .nb-src .nb-domain { min-width:0; overflow:hidden; color:var(--reader-muted); text-decoration:none; text-overflow:ellipsis; }

body.sd .nb-src .nb-domain:hover { color:var(--reader-accent); text-decoration:underline; }

body.sd .nb-src .nb-chip { flex:none; padding:0; color:var(--reader-muted); font:400 12px/1.4 var(--ui-mono); }

.sd .nb-src .nb-chip::before { content:"·"; margin-right:8px; color:var(--reader-muted); }

body.sd .nb-src .nb-chip:hover { color:var(--reader-heading); text-decoration:underline; }

/* 报道家数:家数条 +「12 家」(没有家数时写篇数),点开同题;只有一篇的只是灰字 */
.sd .nb-row > :is(.nb-cov,.nb-covcell) { grid-area:cov; justify-self:end; align-self:end; }

.sd .nb-covcell { display:flex; flex-direction:column; align-items:flex-end; }

.sd .nb-cov { display:inline-flex; align-items:center; gap:3px; height:auto; margin-right:0; padding:2px 4px; border:0; border-radius:0; background:transparent; color:var(--ink); font:600 12px/1.4 var(--ui-mono); font-variant-numeric:tabular-nums; white-space:nowrap; }

.sd .nb-row--must :is(.nb-cov,.nb-cov--one),
.sd .nb-row--must button.nb-cov:is(:hover,[aria-expanded="true"]) { background:var(--signal); color:var(--signal-ink); }

.sd .nb-row--must .nb-cov > :is(b,span) { color:var(--signal-ink); }

.sd .nb-cov > b { color:var(--reader-heading); font-weight:600; }

.sd .nb-cov > span { color:var(--reader-muted); font-size:12px; }

.sd .nb-row:is([data-cov="3"],[data-cov="4"]) .nb-cov > b { font-weight:700; }

.sd button.nb-cov { cursor:pointer; }

.sd button.nb-cov:hover, .sd .nb-cov[aria-expanded="true"] { background:var(--reader-active); }

.sd .nb-cov[aria-busy="true"] { opacity:.6; }

.sd .nb-cov--one { color:var(--reader-muted); font-weight:400; font-size:12px; }

/* 报道家数条:线性,40 家封顶(timeline-lead.js coverageWidth),单一暖色,不与角度色混。 */
.nb-covbar { display:none; }

.nb-covbar > b { display:block; height:100%; border-radius:3px; background:var(--sd-heat); }

/* 内参:行下一行编辑工具与评分详情,跨标题到家数 */
.sd .nb-row > :is(.nb-meta,.nb-recommendation,.nb-editor-details) { grid-column:head-start / cov-end; min-width:0; }

.sd .nb-row > .nb-meta { margin-top:8px; gap:6px 14px; color:var(--reader-muted); font-size:12px; }

body.sd .nb-meta .nb-chip { display:inline-flex; align-items:center; gap:6px; color:var(--reader-secondary); font:500 12px/1.5 var(--ui-font); }

body.sd .nb-meta .nb-chip:hover { color:var(--reader-heading); text-decoration:none; }

body.sd .nb-permalink { color:var(--reader-muted); opacity:1; text-decoration:none; }

body.sd .nb-permalink:hover { color:var(--reader-link, var(--reader-accent)); text-decoration:underline; }

.sd .nb-first { color:var(--reader-positive); font-weight:500; }

/* 流宽 560–759:来源跟在原文后面,家数单独一列 */
@container stream (min-width:560px) {
  /* 原文至少留 120px:来源先按自己的长度占位,域名特别长时截断域名,不把原文挤没。 */
  body.sd .nb-row { grid-template-columns:72px minmax(120px,1fr) auto auto; grid-template-areas:"time head head cov" "time orig src cov"; column-gap:16px; margin:0; padding:12px 12px 12px 10px; }
  body.sd .nb-row--plain { grid-template-areas:"time head head cov" "time src src cov"; }
  .sd .nb-row > .nb-src { margin-top:1px; margin-left:4px; }
  .sd .nb-row--plain > .nb-src { margin-left:0; }
  .sd .nb-row > :is(.nb-cov,.nb-covcell) { align-self:start; margin-top:calc((var(--row-line) - 24px) / 2); }
}

/* 流宽 ≥ 760:来源与角度单独一列(上下两行),家数一列 */
@container stream (min-width:760px) {
  body.sd .nb-row, body.sd .nb-row--plain { grid-template-columns:72px minmax(0,1fr) minmax(120px,168px) 76px; grid-template-areas:"time head src cov" "time orig src cov"; }
  .sd .nb-row > .nb-src { flex-direction:column; align-items:flex-start; gap:0; margin:calc((var(--row-line) - 18px) / 2) 0 0; }
  .sd .nb-src .nb-domain { max-width:100%; }
  .sd .nb-src .nb-chip::before { content:none; }
  body.sd .nb-src .nb-chip { overflow:hidden; max-width:100%; text-overflow:ellipsis; }
}

/* 读者快讯:时间、完整标题、单行原文、来源。不占用报道家数列。 */
body.sd .nb-row--reader { grid-template-columns:52px minmax(0,1fr); grid-template-areas:"time head" "time orig" "time src"; column-gap:12px; padding:8px 14px 8px 0; }
body.sd .nb-row-category { position:absolute; right:2px; top:50%; transform:translateY(-50%); width:3px; height:12px; border-radius:2px; pointer-events:none; }
body.sd .nb-row--reader.nb-row--plain { grid-template-areas:"time head" "time src"; }
body.sd .nb-row--reader > .nb-src { flex-direction:row; flex-wrap:wrap; gap:2px 8px; margin:2px 0 0; white-space:normal; }
body.sd .nb-row--reader .nb-domain { max-width:100%; }
body.sd .nb-row--reader .nb-chip::before { content:"·"; }
body.sd .nb-row--reader a.nb-title { font-weight:600; line-height:1.35; }
body.sd .nb-row--reader > .nb-excerpt { line-height:17px; }
@container stream (min-width:900px) {
  body.sd .nb-row--reader, body.sd .nb-row--reader.nb-row--plain { grid-template-columns:52px minmax(0,1fr) 156px; grid-template-areas:"time head src" "time orig src"; }
  body.sd .nb-row--reader > .nb-src { flex-direction:column; flex-wrap:nowrap; gap:0; margin:2px 0 0; white-space:nowrap; }
  body.sd .nb-row--reader .nb-chip::before { content:none; }
}

/* ---- 同题展开:行下一块,时间 · 媒体 · 标题;末尾通往故事页 ---- */

body.sd .nb-sub { margin:0; padding:2px 12px 10px 100px; border:0; background:var(--hover); }

/* 手机:媒体 · 时间一行,标题一行(可折两行);宽些时三列。 */
body.sd .nb-subrow { display:grid; grid-template-columns:minmax(0,1fr) auto; grid-template-areas:"src time" "body body"; align-items:baseline; gap:0 12px; padding:6px 0; border-top:1px solid var(--reader-line); }

.sd .nb-subrow > .nb-subtime { grid-area:time; }

.sd .nb-subrow > .nb-subsrc { grid-area:src; }

.sd .nb-subrow > .nb-subbody { grid-area:body; }

body.sd .nb-subrow:first-child { border-top:0; }

.sd .nb-subtime { color:var(--reader-muted); font:400 12px/1.5 var(--ui-font); font-variant-numeric:tabular-nums; white-space:nowrap; }

.sd .nb-subrow--first .nb-subtime { color:var(--sd-ok); }

.sd .nb-subsrc { overflow:hidden; color:var(--reader-secondary); font:500 12.5px/1.5 var(--ui-font); white-space:nowrap; text-overflow:ellipsis; }

.sd .nb-subbody { display:flex; align-items:baseline; gap:8px; min-width:0; }

.sd .nb-subbody > :not(a) { flex:none; white-space:nowrap; }

body.sd .nb-subrow .nb-subbody > a { flex:0 1 auto; display:-webkit-box; overflow:hidden; -webkit-line-clamp:2; -webkit-box-orient:vertical; color:var(--reader-body); font-size:14px; line-height:1.5; text-decoration:none; }

.sd .nb-subrow .nb-subbody > a:hover { color:var(--reader-accent); text-decoration:underline; }

body.sd .nb-subbody > .sd-edit { padding:0 8px; font-size:12px; }

body.sd .nb-sub__story { display:inline-block; margin-top:6px; color:var(--reader-accent); font-size:12.5px; text-decoration:none; }

.sd .nb-sub__story:hover { text-decoration:underline; }

.sd .nb-sub__empty { padding:6px 0 2px; color:var(--reader-muted); font-size:12.5px; }

/* 空状态与「正在读取…」(快讯、内参、各看板共用):居中、上下留白、灰字。快讯里的那句用正文字号。 */
body.sd .sd-empty { padding:64px 0; color:var(--reader-muted); text-align:center; }

body.sd #rows > .sd-empty { font:400 14px/1.6 var(--ui-font); letter-spacing:0; }

@container stream (min-width:560px) {
  body.sd .nb-sub { margin:0; padding:2px 12px 10px 100px; }
  body.sd .nb-subrow { grid-template-columns:64px minmax(0,150px) minmax(0,1fr); grid-template-areas:"time src body"; padding:5px 0; }
  body.sd .nb-subrow .nb-subbody > a { display:block; white-space:nowrap; text-overflow:ellipsis; }
}

/* ---- 重点栏 ---- */

.sd .nb-lead { position:sticky; top:var(--nb-top-h); align-self:start; box-sizing:border-box; max-height:calc(100vh - var(--nb-top-h)); overflow-y:auto; overscroll-behavior:contain; scrollbar-width:thin; padding:18px 24px 32px 22px; border-left:1px solid var(--reader-line); background:var(--reader-paper); }

[data-theme="folk"] .sd .nb-lead { border-color:var(--reader-frame); }

.nb-lead__head { display:flex; flex-wrap:wrap; align-items:baseline; gap:2px 10px; margin:0 0 6px; }

.sd .nb-lead__head h2 { margin:0; color:var(--reader-heading); font:700 18px/1.3 var(--ui-font); letter-spacing:-.01em; }

.nb-lead__head > span { color:var(--reader-muted); font-size:12px; }

.nb-lead__list { margin:0; padding:0; list-style:none; }

.nb-lead__item { display:grid; grid-template-columns:20px minmax(0,1fr); gap:0 10px; padding:12px 0; border-top:1px solid var(--reader-line); }

.nb-lead__item:first-child { border-top:0; }

/* 名次和标题同一字号、同一行高,首行基线对齐(标题跟着 Aa 字号走,名次也跟着)。 */
.sd .nb-lead__rank { align-self:start; padding:0; border:0; background:none; color:var(--reader-muted); font:600 calc(var(--reader-title-size) + .5px)/1.45 var(--ui-font); font-variant-numeric:tabular-nums; text-align:right; cursor:pointer; }

.sd .nb-lead__rank:hover { color:var(--ink); }

.nb-lead__main { min-width:0; }

/* 重点的标题跟着 Aa 的标题字号走(默认 15/16px),始终比流里的标题(字号 − 1px)大一点。 */
.sd a.nb-lead__title { display:block; color:var(--reader-heading); font:600 calc(var(--reader-title-size) + .5px)/1.45 var(--ui-font); letter-spacing:-.005em; text-decoration:none; overflow-wrap:anywhere; }

.sd a.nb-lead__title:hover { color:var(--reader-accent); text-decoration:underline; text-decoration-thickness:1px; text-underline-offset:3px; }

.nb-lead__orig { margin:2px 0 0; overflow:hidden; color:var(--reader-muted); font-size:12.5px; line-height:1.45; white-space:nowrap; text-overflow:ellipsis; }

.nb-lead__meta { display:flex; flex-wrap:wrap; align-items:center; gap:4px 12px; margin-top:6px; color:var(--reader-muted); font-size:12.5px; line-height:1.5; }

.sd a.nb-lead__cov { display:inline-flex; align-items:center; color:var(--reader-secondary); text-decoration:none; font-variant-numeric:tabular-nums; }

.sd a.nb-lead__cov:hover { color:var(--reader-accent); }

.nb-lead__cov > b { margin-right:2px; color:var(--reader-heading); font-weight:700; }

.nb-lead__merged { color:var(--reader-muted); font-variant-numeric:tabular-nums; }

.sd .nb-lead__angle { display:inline-flex; align-items:center; gap:5px; padding:0; border:0; background:none; color:var(--reader-secondary); font:inherit; cursor:pointer; }

.sd .nb-lead__angle::before { content:none; }

.sd .nb-lead__angle:hover { color:var(--reader-heading); text-decoration:underline; }

.nb-lead__outlets { display:flex; margin:4px 0 0; color:var(--reader-muted); font-size:12px; line-height:1.5; white-space:nowrap; }

.nb-lead__names { min-width:0; overflow:hidden; color:var(--reader-secondary); text-overflow:ellipsis; }

.nb-lead__more { flex:none; margin-left:.5em; }

.sd .nb-lead__toggle { display:none; margin:2px 0 8px; padding:6px 0; border:0; background:none; color:var(--reader-accent); font:500 13px/1.4 var(--ui-font); cursor:pointer; }

.sd .nb-lead__toggle:hover { text-decoration:underline; }

/* 第一条:大一号,底色成块,是整页的落点 */
.nb-lead__item.is-first { margin:4px -12px 6px; padding:14px 12px 14px; border:0; border-radius:var(--reader-radius); background:var(--reader-panel); }

.nb-lead__item.is-first + .nb-lead__item { border-top:0; }

.sd .is-first .nb-lead__rank { font-size:calc(var(--reader-title-size) + 5px); line-height:1.4; }

.sd .is-first a.nb-lead__title { font-size:calc(var(--reader-title-size) + 5px); line-height:1.4; font-weight:700; letter-spacing:-.015em; }

.sd .is-first .nb-lead__rank { padding:0 4px; background:var(--signal); color:var(--signal-ink); }

.is-first .nb-lead__orig { margin-top:4px; white-space:normal; display:-webkit-box; -webkit-line-clamp:2; -webkit-box-orient:vertical; }

.is-first .nb-lead__outlets { display:block; white-space:normal; }

.is-first .nb-lead__names { overflow:visible; }

.is-first .nb-lead__more { white-space:nowrap; }

:root[data-font="fangsong"] .sd :is(a.nb-lead__title, .is-first a.nb-lead__title) { font-weight:400; }

/* 屏够宽(右栏约 450–520)时重点再大一号 */
@media (min-width:1680px) {
  .sd :is(a.nb-lead__title, .nb-lead__rank) { font-size:calc(var(--reader-title-size) + 1.5px); }
  .sd .is-first a.nb-lead__title { font-size:calc(var(--reader-title-size) + 10px); line-height:1.35; }
  .sd .is-first .nb-lead__rank { font-size:calc(var(--reader-title-size) + 10px); line-height:1.35; }
  .sd .nb-lead { padding:20px 28px 32px 26px; }
}

/* 角度动态:每个展示角度近 24 小时的报道篇数,条形用角度色,文字用正文色 */
.nb-pulse { margin-top:18px; padding-top:16px; border-top:1px solid var(--reader-line); }

[data-theme="folk"] .nb-pulse { border-color:var(--reader-frame); }

.nb-pulse__list { display:grid; gap:1px; margin:6px 0 0; padding:0; list-style:none; }

.sd .nb-pulse__row { display:grid; grid-template-columns:minmax(0,8.6em) minmax(0,1fr) 4.6em; align-items:center; gap:10px; width:calc(100% + 12px); margin:0 -6px; padding:4px 6px; border:0; border-radius:var(--reader-button-radius); background:none; color:var(--reader-body); font:400 13px/1.4 var(--ui-font); text-align:left; cursor:pointer; }

.sd .nb-pulse__row:hover { background:var(--reader-hover); }

.nb-pulse__label { overflow:hidden; white-space:nowrap; text-overflow:ellipsis; }

.nb-pulse__bar { height:6px; overflow:hidden; border-radius:3px; background:var(--reader-panel); }

.nb-pulse__bar i { display:block; height:100%; border-radius:3px; }

.nb-pulse__num { color:var(--reader-muted); font-size:12px; font-variant-numeric:tabular-nums; text-align:right; white-space:nowrap; }

.nb-pulse__key { margin:8px 0 0; color:var(--reader-muted); font-size:12px; line-height:1.5; }

/* ---- 左栏(读者):精选角度,去掉外框,行更紧 ---- */
.sd .nb-display-list .nb-category-marker { flex:none; width:3px; height:12px; border-radius:2px; opacity:1; }
.nb-angle-group__summary { display:flex; align-items:center; gap:8px; padding:12px 8px 4px; color:var(--reader-muted); font:500 12px/1.4 var(--ui-font); cursor:pointer; list-style:none; }
.nb-angle-group__summary::-webkit-details-marker { display:none; }
.nb-angle-group__summary::after { content:'+'; margin-left:auto; font-size:16px; }
.nb-angle-group[open] > .nb-angle-group__summary::after { content:'−'; }
body.sd[data-tab="timeline"]:not([data-desk]) .nb-side__item:hover { background:var(--hover); color:var(--ink); }
body.sd[data-tab="timeline"]:not([data-desk]) .nb-side__item.is-on { background:var(--reader-selected-bg); color:var(--reader-selected-ink); }
body.sd[data-tab="timeline"]:not([data-desk]) .nb-side__item.is-on em { color:var(--reader-selected-ink); }

@media (min-width:801px) {
  .sd .nb-side--reader { padding:14px 10px 24px; }
  .sd .nb-side--reader .nb-filter-panel { margin:0; border:0; border-radius:0; overflow:visible; }
  .sd .nb-side--reader .nb-filter-panel__summary { padding:2px 8px 8px; }
  .sd .nb-side--reader .nb-filter-panel[open] > .nb-filter-panel__summary { border-bottom:0; }
  .sd .nb-side--reader .nb-filter-panel__summary strong { color:var(--reader-heading); font-size:13px; }
  .sd .nb-side--reader .nb-filter-panel__body { padding:0; }
  .sd .nb-side--reader .nb-filter-panel__hint { margin:0 8px 10px; }
  body.sd .nb-side--reader .nb-side__item { min-height:30px; padding:4px 8px; gap:8px; font-size:13.5px; line-height:1.4; border-radius:min(var(--reader-radius), 6px); }
  body.sd .nb-side--reader .nb-angle-group h3 { margin:14px 8px 4px; }
}

/* ---- 中屏(801–1279):重点在快讯流上方,横排两列,只放前五条 ---- */

@media (max-width:1279px) {
  .sd .nb-app--lead { grid-template-columns:var(--nb-side-w) minmax(0,1fr); grid-template-rows:auto 1fr; grid-template-areas:"side lead" "side main"; }
  .nb-app--lead > .nb-side { grid-row:1 / span 2; }
  .sd .nb-lead { position:static; max-height:none; overflow:visible; padding:16px 24px 6px; border-left:0; border-bottom:1px solid var(--reader-line); }
  .nb-lead__list { display:grid; grid-template-columns:repeat(2,minmax(0,1fr)); column-gap:28px; }
  .nb-lead__item.is-first { grid-column:1 / -1; margin:4px 0 4px; }
  .nb-lead__item:is(:nth-child(2),:nth-child(3)) { border-top:0; }
  .nb-lead__list:not(.is-all) > .nb-lead__item:nth-child(n+6), .nb-pulse { display:none; }
  .sd .nb-lead__toggle { display:block; }
}

/* 中屏露五条:四五条时全都露着,不放「展开全部」(手机只露三条,照样要)。 */
@media (min-width:801px) and (max-width:1279px) {
  .sd .nb-lead__list:is([data-n="4"],[data-n="5"]) ~ .nb-lead__toggle { display:none; }
}

@media (max-width:1100px) {
  body.sd #timeline { padding:0 20px; }
  body.sd .nb-toolbar { margin:0 -20px; padding:10px 20px; }
}

/* ---- 手机:页眉一行;重点最前,然后精选角度、搜索与快讯 ---- */

@media (max-width:800px) {
  body.sd .nb-top { padding:0 12px 0 16px; gap:12px; }
  body.sd .nb-brand { flex:none; font-size:16px; }
  .sd .nb-right { display:flex; }
  .sd .nb-right .sd-menu,.sd .nb-right inews-appearance { order:0; width:auto; }
  .sd .nb-nav { order:0; width:auto; gap:0; }
  body.sd .nb-nav :is(button,a) { padding:0 8px; font-size:14px; }
  body.sd .sd-menu__btn { height:32px; padding:0 10px; }
  .sd .sd-menu__pop { position:fixed; right:12px; width:min(300px,calc(100vw - 24px)); max-height:calc(100dvh - 68px); top:calc(var(--nb-top-h) + 4px); }
  body.sd .nb-side { position:static; min-height:0; max-height:none; padding:12px 16px; border-right:0; border-bottom:1px solid var(--reader-line); }
  .sd .nb-app--lead { grid-template-columns:minmax(0,1fr); grid-template-rows:auto auto 1fr; grid-template-areas:"lead" "side" "main"; }
  .nb-app--lead > .nb-side { grid-row:auto; }
  .sd .nb-lead { padding:14px 16px 4px; }
  .nb-lead__list { display:block; }
  .nb-lead__item.is-first { margin:2px -10px 2px; padding:10px 10px; }
  .sd .is-first a.nb-lead__title { font-size:calc(var(--reader-title-size) + 2px); line-height:1.4; }
  .sd .is-first .nb-lead__rank { font-size:calc(var(--reader-title-size) + 2px); line-height:1.4; }
  .nb-lead__outlets, .is-first .nb-lead__outlets { display:none; }
  .nb-lead__item { grid-template-columns:18px minmax(0,1fr); gap:0 8px; padding:10px 0; }
  .nb-lead__item:nth-child(2) { border-top:0; }
  .nb-lead__item:nth-child(n+3) { border-top:1px solid var(--reader-line); }
  .nb-lead__list:not(.is-all) > .nb-lead__item:nth-child(n+4) { display:none; }
  .sd :is(a.nb-lead__title, .nb-lead__rank) { font-size:var(--reader-title-size); }
  .nb-lead__orig, .is-first .nb-lead__orig { display:none; }
  .nb-lead__meta { margin-top:3px; gap:2px 10px; }
  body.sd #timeline { max-width:none; padding:0 16px; }
  body.sd .nb-toolbar { position:static; flex-wrap:wrap; margin:0; padding:12px 0 8px; gap:8px 10px; border-bottom:0; }
  body.sd .nb-toolbar input[type="search"] { flex:1 1 100%; height:38px; font-size:14px; }
  .sd:not([data-desk]) .nb-toolbar .timeline-pager { display:none; }
  body.sd .nb-day { padding-top:14px; }
  .sd .timeline-page-label { width:auto; }
  body.sd .timeline-page-button { height:32px; }
  .timeline-date-jump { flex-basis:100%; margin-left:0; }
  .nb-day-group { padding:0 6px; }
}

/* Live type keeps the editorial wordmark clear at every size and zoom level. */
.sd .nb-wordmark { display:inline-flex; flex:none; align-items:baseline; white-space:nowrap; line-height:1; color:var(--reader-heading); }
.sd .nb-wordmark__name { font:700 34px/1 Georgia,'Times New Roman',serif; letter-spacing:-.035em; }
.sd .nb-wordmark__today { font:750 29px/1 Inter,var(--ui-font); letter-spacing:-.045em; color:#FF442B; }
@media (max-width:1100px) { .sd .nb-wordmark__name { font-size:30px; } .sd .nb-wordmark__today { font-size:26px; } }
@media (max-width:380px) { .sd .nb-wordmark__name { font-size:28px; } .sd .nb-wordmark__today { font-size:24px; } }

/* Two named reading streams need their own navigation row on small screens. */
@media (max-width:800px) {
  body.sd { --nb-top-h:84px; }
  body.sd .nb-top { flex-wrap:wrap; height:var(--nb-top-h); gap:0 12px; padding:0 16px; }
  body.sd .nb-brand, body.sd .nb-right { height:44px; }
  body.sd .nb-nav { order:3; flex:1 1 100%; min-width:0; height:40px; overflow-x:auto; }
  body.sd .nb-nav :is(button,a) { padding-inline:8px; font-size:13px; }
}

/* Staff quick takedown in the reader view: quiet, under the coverage count in its own cell (the lower
   half of that column is empty), so it never sits on the title or the domain and never pushes the title
   onto another line; on pointer devices only shown for the row in hand (always once queued, sending,
   done or failed). */

body.sd .nb-covcell > .sd-edit--danger { margin:1px -6px 0 0; padding:0 6px; border:1px solid transparent; background:transparent; font-size:12px; line-height:1.5; }

body.sd .nb-covcell > .sd-edit--danger:hover { border-color:currentColor; background:transparent; color:var(--reader-danger); }

@media (hover:hover) {
  .sd .nb-row:not(:hover):not(:focus-within) .nb-covcell > .sd-edit--danger:not(.is-active) { opacity:0; }
}

/* 流宽 ≥ 560 时家数一列占两行、下半是空的:按钮浮在家数下面,不参与排版,员工看的行和读者一样高。 */
@container stream (min-width:560px) {
  .sd .nb-covcell { position:relative; }
  body.sd .nb-covcell > .sd-edit--danger { position:absolute; top:100%; right:-6px; margin:0; white-space:nowrap; }
}

:root[data-text-size] .sd .nb-subbody > a { font-size:14px; color:var(--reader-body); }


/* ==========================================================================
   5. 系统看板（staff）
   （原 web/system-dashboard.css）
   ========================================================================== */

/* Dense operational overview. Scoped to system; reader typography stays independent. */

#insight { --ops-gap: 12px; font-variant-numeric: tabular-nums; }

#insight .ops-heading { scroll-margin-top:80px; display:flex; flex-wrap:wrap; justify-content:space-between; align-items:baseline; gap:6px 16px; margin:0 0 12px; }

#insight .ops-heading h1 { margin:0; font:600 20px/1.4 var(--ui-font); color:var(--reader-body); }

#insight .ops-heading > span { color:var(--reader-muted); font-size:12px; }

#insight .ops-metrics { display:grid; grid-template-columns:repeat(4,minmax(0,1fr)); gap:1px; background:var(--reader-line); border:1px solid var(--reader-line); border-radius:var(--reader-radius); overflow:hidden; }

#insight .ops-metric { display:flex; flex-direction:column; gap:3px; padding:12px 16px; min-width:0; background:var(--reader-paper); }

#insight .ops-metric .ops-label { font-size:13px; color:var(--reader-muted); }

#insight .ops-metric strong { font:600 27px/1.25 var(--ui-font); letter-spacing:-.03em; color:var(--reader-body); }

#insight .ops-metric small { font-size:12px; color:var(--reader-muted); line-height:1.5; }

#insight .ops-metric--alert strong { color:var(--sd-warn); }

#insight .ops-activity { margin:8px 0 14px; padding:0 2px; }

#insight .ops-activity .ops-bullets { display:flex; gap:4px 24px; flex-wrap:wrap; margin:0; border:0; padding-top:0; }

#insight .sd-kicker { margin:20px 0 8px!important; padding:0 0 7px; font:600 14px/1.5 var(--ui-font); scroll-margin-top:80px; }

#insight .ops-grid { display:grid; grid-template-columns:repeat(3,minmax(0,1fr)); align-items:start; gap:var(--ops-gap); }

#insight .ops-grid--2 { grid-template-columns:repeat(2,minmax(0,1fr)); }

#insight .sd-dashboard { margin:0; min-width:0; box-shadow:none; }

#insight .sd-dashboard__head { padding:9px 12px; gap:8px; font-size:14px; }

#insight .sd-dashboard__head em { color:var(--reader-muted); font-size:12px; white-space:nowrap; }

#insight .sd-panelbody { padding:10px 12px; }

#insight .ops-bullets { margin:10px 0 0; padding:8px 0 0 16px; border-top:1px solid var(--reader-line); color:var(--reader-muted); font:400 12px/1.6 var(--ui-font); }

#insight .ops-bullets li { padding:0; margin:0; overflow-wrap:anywhere; }

#insight .ops-bullets li + li { margin-top:3px; }

#insight .ops-bullets li::marker { color:var(--sd-data); }

#insight .sd-minirow { gap:5px 14px; padding:6px 0; font:400 12px/1.5 var(--ui-font); }

#insight .sd-minirow b { font:600 13px/1.5 var(--ui-font); }

#insight .ops-ranking { list-style:none; margin:0; padding:0; display:grid; gap:8px; }

#insight .ops-ranking li { display:grid; grid-template-columns:minmax(0,1fr) auto; gap:3px 10px; align-items:center; }

#insight .ops-ranking__label { min-width:0; overflow:hidden; text-overflow:ellipsis; white-space:nowrap; color:var(--reader-body); font-size:12px; }

#insight .ops-ranking__value { font:500 12px/1.5 var(--ui-font); color:var(--reader-body); white-space:nowrap; }

#insight .ops-track { display:block; height:5px; background:var(--reader-panel); grid-column:1/-1; overflow:hidden; border-radius:2px; }

#insight .ops-track i { display:block; height:100%; border-radius:2px; }

#insight .ops-ranking--compact { gap:5px; }

#insight .ops-ranking--compact li { grid-template-columns:72px minmax(0,1fr) auto; gap:8px; }

#insight .ops-ranking--compact .ops-track { grid-column:2; grid-row:1; height:8px; }

#insight .ops-ranking--compact .ops-ranking__value { grid-column:3; grid-row:1; }

#insight .ops-breakdown { display:flex; gap:2px; height:9px; background:var(--reader-panel); margin:3px 0 10px; overflow:hidden; border-radius:3px; }

#insight .ops-breakdown > span { height:100%; }

#insight .sd-table { font-size:12px; min-width:0; }

#insight .sd-table :is(td,th) { padding:6px 8px; line-height:1.5; }

#insight .sd-table td:first-child { min-width:0; }

#insight .ops-empty { padding:20px 0; text-align:center; color:var(--reader-muted); font-size:13px; }

#insight .ops-control { margin-top:9px; padding-top:8px; border-top:1px solid var(--reader-line); font-size:12px; }

#insight .ops-control summary { cursor:pointer; color:var(--reader-accent); width:fit-content; }

#insight .ops-control summary:focus-visible { outline:2px solid var(--sd-data); outline-offset:3px; }

#insight .ops-pin-form { display:grid; grid-template-columns:minmax(0,1fr) 120px auto; gap:8px; margin-top:10px; align-items:end; }

#insight .ops-pin-form label { display:flex; flex-direction:column; gap:4px; color:var(--reader-muted); }

#insight :is(input,select) { min-width:0; max-width:100%; font:400 12px/1.5 var(--ui-font); color:var(--reader-body); background:var(--reader-paper); border:1px solid var(--reader-line); border-radius:3px; padding:4px 6px; }

#insight .ops-control-status { grid-column:1/-1; color:var(--reader-muted); }

#insight .ops-account-summary { display:flex; flex-direction:column; gap:8px; }

#insight .ops-account-summary .sd-minirow { padding:0; }

#insight .ops-users { margin-top:10px; }

#insight .ops-users > summary { cursor:pointer; font-size:13px; color:var(--reader-accent); }

#insight .ops-users[open] > summary { margin-bottom:8px; }

#insight .ops-users .sd-table { min-width:680px; }

#insight .sd-spark-x { font-size:11px; gap:12px; }

#insight .sd-spark-gl > span { font-size:11px; }

#insight .sd-spark i { min-width:0; }

@media (max-width:1200px) {
  #insight .ops-grid { grid-template-columns:repeat(2,minmax(0,1fr)); }
}

@media (max-width:700px) {
  #insight .ops-grid { grid-template-columns:minmax(0,1fr); }
  #insight .ops-metrics { grid-template-columns:repeat(2,minmax(0,1fr)); }
  #insight .ops-metric { padding:10px 12px; }
  #insight .ops-metric strong { font-size:24px; }
  #insight .ops-pin-form { grid-template-columns:minmax(0,1fr) auto; }
  #insight .ops-pin-form > label:first-child { grid-column:1/-1; }
  #insight .ops-ranking--compact li { grid-template-columns:64px minmax(0,1fr) auto; }
}

#insight .ops-drift .sd-spark { gap:1px; }

@media (max-width:700px) { #insight .ops-drift .sd-spark { gap:0; } }


/* ==========================================================================
   6. 质量评分 / 待评审（staff）
   （原 web/quality-scoring.css）
   ========================================================================== */

/* Quality Scoring Admin Interface */

/* 评分工作台画在新闻事件页的「待评审」里(page-events.js)。 */

.qs-header {
  padding: 20px;
  background: white;
  border-bottom: 1px solid #e0e0e0;
  box-shadow: 0 2px 4px rgba(0, 0, 0, 0.1);
}

.qs-header h2 {
  margin: 0 0 8px 0;
  font-size: 20px;
  font-weight: 600;
  color: #333;
}

.qs-header span {
  font-size: 13px;
  color: #666;
}

.qs-container {
  display: flex;
  gap: 20px;
  flex: 1;
  padding: 20px;
  overflow: hidden;
}

.qs-event-panel {
  flex: 1;
  background: white;
  border-radius: 8px;
  padding: 24px;
  box-shadow: 0 2px 8px rgba(0, 0, 0, 0.1);
  overflow-y: auto;
}

.qs-score-panel {
  width: 320px;
  background: white;
  border-radius: 8px;
  padding: 20px;
  box-shadow: 0 2px 8px rgba(0, 0, 0, 0.1);
  display: flex;
  flex-direction: column;
  gap: 16px;
}

.qs-empty,
.qs-error,
.qs-done {
  display: flex;
  align-items: center;
  justify-content: center;
  height: 100%;
  font-size: 16px;
  color: #666;
}

.qs-done {
  color: #10b981;
  font-weight: 600;
}

.qs-error {
  color: #ef4444;
}

.qs-title-section {
  margin-bottom: 24px;
  padding-bottom: 20px;
  border-bottom: 2px solid #f0f0f0;
}

.qs-label {
  font-size: 12px;
  font-weight: 600;
  color: #999;
  text-transform: uppercase;
  letter-spacing: 0.5px;
  margin-bottom: 8px;
  display: block;
}

.qs-title {
  font-size: 18px;
  font-weight: 600;
  color: #1a202c;
  line-height: 1.5;
}

.qs-metadata {
  display: grid;
  grid-template-columns: repeat(2, 1fr);
  gap: 16px;
  margin-bottom: 20px;
}

.qs-meta-item {
  display: flex;
  flex-direction: column;
}

.qs-meta-label {
  font-size: 12px;
  font-weight: 600;
  color: #666;
  margin-bottom: 4px;
}

.qs-meta-value {
  font-size: 16px;
  font-weight: 700;
  color: var(--ink);
}

.qs-progress {
  display: flex;
  flex-direction: column;
  gap: 8px;
}

.qs-progress-bar {
  width: 100%;
  height: 6px;
  background: #e0e0e0;
  border-radius: 3px;
  overflow: hidden;
}

.qs-progress-fill {
  height: 100%;
  background: var(--reader-link);
  transition: width 0.3s ease;
}

.qs-progress-text {
  font-size: 12px;
  color: #666;
  text-align: center;
}

.qs-buttons {
  display: flex;
  flex-direction: column;
  gap: 10px;
}

.qs-btn {
  padding: 12px 16px;
  border: none;
  border-radius: 6px;
  font-size: 14px;
  font-weight: 600;
  cursor: pointer;
  transition: all 0.3s ease;
  text-transform: uppercase;
  letter-spacing: 0.5px;
}

.qs-btn-approve {
  background: #10b981;
  color: white;
}

.qs-btn-approve:hover {
  background: #059669;
  transform: translateY(-2px);
  box-shadow: 0 4px 12px rgba(16, 185, 129, 0.3);
}

.qs-btn-reject {
  background: #ef4444;
  color: white;
}

.qs-btn-reject:hover {
  background: #dc2626;
  transform: translateY(-2px);
  box-shadow: 0 4px 12px rgba(239, 68, 68, 0.3);
}

.qs-btn-pending {
  background: #f59e0b;
  color: white;
}

.qs-btn-pending:hover {
  background: #d97706;
  transform: translateY(-2px);
  box-shadow: 0 4px 12px rgba(245, 158, 11, 0.3);
}

.qs-reason-section {
  display: flex;
  flex-direction: column;
  gap: 8px;
  margin-top: 8px;
  padding-top: 12px;
  border-top: 1px solid #e0e0e0;
}

.qs-reason-input {
  padding: 10px;
  border: 1px solid #d0d0d0;
  border-radius: 4px;
  font-family: inherit;
  font-size: 13px;
  color: #333;
  resize: vertical;
}

.qs-reason-input::placeholder {
  color: #999;
}

.qs-reason-input:focus {
  outline: none;
  border-color: var(--reader-link);
  box-shadow: 0 0 0 3px rgba(102, 126, 234, 0.1);
}

@media (max-width: 1200px) {
  .qs-container {
    flex-direction: column;
  }

  .qs-score-panel {
    width: 100%;
  }
}


/* ==========================================================================
   7. 新闻事件（staff）
   （原 web/events.css）
   ========================================================================== */

/* News Events Page */

#events {
  display: flex;
  flex-direction: column;
  height: 100%;
  background: #f5f5f5;
}

.events-header {
  padding: 20px;
  background: white;
  border-bottom: 1px solid #e0e0e0;
  box-shadow: 0 2px 4px rgba(0, 0, 0, 0.1);
}

.events-header h2 {
  margin: 0 0 8px 0;
  font-size: 20px;
  font-weight: 600;
  color: #333;
}

.events-header span {
  font-size: 13px;
  color: #666;
}

.events-controls {
  padding: 16px 20px;
  background: white;
  border-bottom: 1px solid #e0e0e0;
  display: flex;
  gap: 32px;
  flex-wrap: wrap;
  align-items: center;
}

.events-filter-group,
.events-sort-group {
  display: flex;
  gap: 12px;
  align-items: center;
}

.events-filter-label,
.events-sort-label {
  font-size: 12px;
  font-weight: 400;
  color: var(--meta);
  font-family: var(--ui-mono);
  white-space: nowrap;
}

.events-filter-btn,
.events-sort-btn {
  padding: 6px 12px;
  border: 1px solid var(--line);
  background: var(--paper);
  border-radius: 2px;
  font-size: 14px;
  font-weight: 500;
  color: var(--ink);
  cursor: pointer;
}

.events-filter-btn:hover,
.events-sort-btn:hover {
  background: var(--hover);
  color: var(--ink);
}

.events-filter-btn.active,
.events-sort-btn.active {
  background: var(--reader-selected-bg);
  color: var(--reader-selected-ink);
  border-color: var(--reader-selected-bg);
  box-shadow: inset 2px 0 0 var(--reader-selected-ink);
}

.events-stats {
  padding: 12px 20px;
  background: #f9f9f9;
  border-bottom: 1px solid #e0e0e0;
  font-size: 13px;
  color: #666;
  display: flex;
  gap: 16px;
}

.events-empty,
.events-error {
  display: flex;
  align-items: center;
  justify-content: center;
  flex: 1;
  font-size: 16px;
  color: #999;
  min-height: 300px;
}

.events-error {
  color: #ef4444;
}

.events-list {
  flex: 1;
  padding: 16px 20px;
  overflow-y: auto;
  display: flex;
  flex-direction: column;
  gap: 12px;
}

.event-card {
  background: white;
  border: 1px solid #e0e0e0;
  border-radius: 6px;
  padding: 16px;
  cursor: pointer;
  transition: all 0.2s ease;
}

.event-card:hover {
  border-color: var(--reader-link);
  box-shadow: 0 4px 12px rgba(102, 126, 234, 0.15);
  transform: translateY(-2px);
}

.event-card-head {
  display: flex;
  gap: 12px;
  align-items: flex-start;
  margin-bottom: 12px;
}

.event-num {
  flex-shrink: 0;
  font-weight: 600;
  color: #999;
  font-size: 13px;
  width: 30px;
  text-align: right;
}

.event-title {
  flex: 1;
  font-size: 15px;
  font-weight: 500;
  color: #1a202c;
  text-decoration: none;
  line-height: 1.4;
}

.event-title:hover {
  color: var(--reader-link);
}

.event-meta {
  display: flex;
  gap: 12px;
  flex-wrap: wrap;
  align-items: center;
  font-size: 12px;
  color: #666;
}

.event-meta span:not(.badge) {
  display: flex;
  align-items: center;
}

.event-status {
  font-size: 12px;
  padding: 4px 10px;
  border-radius: 3px;
  font-weight: 600;
  white-space: nowrap;
  margin-left: auto;
}

.badge-approve {
  background: #d1fae5;
  color: #059669;
}

.badge-reject {
  background: #fee2e2;
  color: #dc2626;
}

.badge-pending {
  background: #fef3c7;
  color: #d97706;
}

.events-pager {
  padding: 16px 20px;
  background: white;
  border-top: 1px solid #e0e0e0;
  display: flex;
  justify-content: center;
  gap: 12px;
  align-items: center;
}

.pager-btn {
  padding: 8px 16px;
  border: 1px solid #d0d0d0;
  background: white;
  border-radius: 4px;
  font-size: 13px;
  color: #666;
  cursor: pointer;
  transition: all 0.2s ease;
}

.pager-btn:hover:not(:disabled) {
  border-color: var(--reader-link);
  color: var(--reader-link);
}

.pager-btn:disabled {
  opacity: 0.5;
  cursor: not-allowed;
}

.pager-text {
  font-size: 13px;
  color: #666;
  min-width: 100px;
  text-align: center;
}

/* Event Detail View */

.event-detail-head {
  padding: 16px 20px;
  background: white;
  border-bottom: 1px solid #e0e0e0;
}

.back-btn {
  padding: 8px 14px;
  border: 1px solid #d0d0d0;
  background: white;
  border-radius: 4px;
  font-size: 13px;
  color: #666;
  cursor: pointer;
  transition: all 0.2s ease;
}

.back-btn:hover {
  border-color: var(--reader-link);
  color: var(--reader-link);
}

.event-detail-title-section {
  padding: 24px 20px 16px 20px;
  background: white;
  border-bottom: 1px solid #e0e0e0;
  overflow: auto;
}

.event-detail-title-section h2 {
  margin: 0;
  font-size: 22px;
  font-weight: 600;
  color: #1a202c;
  line-height: 1.4;
}

.event-detail-meta {
  padding: 20px;
  background: white;
  border-bottom: 1px solid #e0e0e0;
  display: grid;
  grid-template-columns: repeat(auto-fit, minmax(200px, 1fr));
  gap: 16px;
  overflow: auto;
}

.meta-item {
  display: flex;
  flex-direction: column;
}

.meta-label {
  font-size: 12px;
  font-weight: 600;
  color: #666;
  margin-bottom: 4px;
}

.meta-value {
  font-size: 16px;
  font-weight: 700;
  color: var(--reader-link);
}

.event-detail-articles {
  padding: 20px;
  background: white;
  overflow: auto;
  flex: 1;
}

.event-detail-articles h3 {
  margin: 0 0 16px 0;
  font-size: 16px;
  font-weight: 600;
  color: #1a202c;
}

.article-list {
  display: flex;
  flex-direction: column;
  gap: 12px;
}

.article-item {
  padding: 12px;
  border: 1px solid #e0e0e0;
  border-radius: 4px;
  display: flex;
  flex-direction: column;
  gap: 6px;
  transition: all 0.2s ease;
}

.article-item:hover {
  border-color: var(--reader-link);
  background: #f9f9ff;
}

.article-domain {
  font-size: 11px;
  font-weight: 600;
  color: #999;
  text-transform: uppercase;
  letter-spacing: 0.5px;
}

.article-title {
  font-size: 14px;
  font-weight: 500;
  color: #1a202c;
  text-decoration: none;
  line-height: 1.4;
}

.article-title:hover {
  color: var(--reader-link);
  text-decoration: underline;
}

.article-time {
  font-size: 12px;
  color: #999;
}

@media (max-width: 768px) {
  .events-controls {
    gap: 16px;
  }

  .event-card {
    padding: 12px;
  }

  .event-card-head {
    flex-direction: column;
    gap: 8px;
  }

  .event-num {
    width: auto;
    text-align: left;
  }

  .event-meta {
    flex-direction: column;
    align-items: flex-start;
  }

  .event-status {
    margin-left: 0;
  }

  .event-detail-meta {
    grid-template-columns: 1fr;
  }
}

/* 快讯内参单行：时间在左，标题、置顶和下架同行。 */
body.sd[data-desk] .nb-row--moderation{grid-template-columns:52px minmax(0,1fr) minmax(100px,170px) auto;grid-template-areas:"time head src actions";align-items:center;column-gap:14px;padding:8px 10px}
body.sd[data-desk] .nb-row--moderation>.nb-head{display:flex;align-items:center;gap:6px;overflow:hidden}
body.sd[data-desk] .nb-row--moderation a.nb-title{display:block;min-width:0;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
body.sd[data-desk] .nb-row--moderation>.nb-src{flex-direction:row;align-items:center;margin:0;gap:8px;overflow:hidden}
body.sd[data-desk] .nb-row--moderation .nb-src .nb-chip{min-width:0;max-width:90px;overflow:hidden;text-overflow:ellipsis}
body.sd[data-desk] .nb-row--moderation>.nb-meta{grid-area:actions;margin:0;flex-wrap:nowrap;gap:6px;white-space:nowrap}
body.sd[data-desk] .nb-row--moderation :is(.nb-columnbar,.nb-selectbar,.nb-editbar){display:inline-flex;margin:0;flex:none}
body.sd[data-desk] .nb-row--moderation .sd-edit{padding:3px 8px;font-size:12px;line-height:1.5;white-space:nowrap}
@media(max-width:1100px){body.sd[data-desk] .nb-row--moderation{grid-template-columns:44px minmax(0,1fr) auto;grid-template-areas:"time head actions";column-gap:8px}body.sd[data-desk] .nb-row--moderation>.nb-src{display:none}}

body.sd[data-desk] .nb-columnbar a.sd-edit{display:inline-block;text-decoration:none}

body.sd[data-desk] .nb-row--moderation .nb-head>.sd-badge{flex:none;white-space:nowrap}
