/* ==================== 论坛（对象=群聊模型） ====================
   面板骨架 + T5-T7 渲染样式的全量类名登记（corrections 2026-08-27：
   动态生成的类名必须先在本文件有定义）。
   配色/圆角/字号对齐 tokens.css；气泡/头像渐变等聊天语言对齐设计稿
   design/forum_mockup.html（微信会话/聊天心智）。
   2026-09-10 P5-T5.1b 微信化：聊天气泡/输入栏/行情条/返回箭头按微信聊天
   界面规格重排（他人白泡/自己 #95ec69 浅绿泡、40px 方圆头像、居中时间分隔
   条、灰底胶囊输入框+绿发送、行情条链接蓝）；动态流改朋友圈式两栏卡片、
   筛选 tab 对齐 .wx-seg。（下方 2026-09-11 段落已把会话行/搜索/tab 三处一并重排）
   2026-09-12 两级 tab 合并：动态流 4 档筛选 tab 上移合并进工具条 #forum-view-tabs
   的单行 5 项，动态流专属 tab 样式随之删除（视觉由 .wx-seg-item 统一提供）。
   2026-09-11 外壳对齐排行页：顶部两行式头部（分段 tab 行 + 微信搜索胶囊）
   整块删除，改为页级单行工具条 #forum-toolbar
   （.wx-seg.wx-seg--page + 放大镜展开式 .tree-search-*）；容器由 860px 居中白卡
   改全宽通栏（overflow:visible 保 sticky）；会话行/动态卡/空态/聊天标题字号
   按排行紧凑口径收紧（聊天气泡正文保留 16px）；筛选 tab 状态类 .on → .active
   （该 tab 行本身已于 2026-09-12 上移合并进 #forum-view-tabs，样式随之删除）。
   规范：spec/plan docs/superpowers/{specs,plans}/2026-09-11-forum-shell-align-ranking.md */

/* 论坛面板：全宽通栏（2026-09-11 D3，对齐排行页 .content-panels 通栏口径）。
   原先的 860px 居中白卡取消——面板内每个区块（工具条/会话列表/聊天区/动态流）
   都自带白底 + hairline，外层再套一张卡片只会在其外多一圈边框与留白；
   改透明通栏后内层白底直接贴住滚动容器边缘，与排行页/微信原生页同观感 */
#panel-forum .panel-inner {
  max-width: none;
  margin: 0;
  padding: 0;
  min-height: 0;
  background: transparent;
  border: none;
  border-radius: 0;
  box-shadow: none;
  /* overflow 必须 visible，不能 hidden：面板头部工具条 #forum-toolbar 是
     .wx-seg--page，≤768px 靠 position:sticky 吸附在滚动容器顶部；祖先链上
     任一层 overflow:hidden 都会成为粘性包含块并切断停靠（排序页同款口径），
     本容器是工具条的祖先链一环，必须放行溢出 */
  overflow: visible;
}

/* ---- 页级单行工具条（2026-09-11 D2：对齐排行页 #rank-seg-* 口径）----
   `#forum-toolbar{display:flex}` 用 id 特异性 (1,0,0) 压过 components.css 的
   `.wx-seg--page{display:none}` (0,1,0)（该规则桌面上隐藏页级分段条；≤768px 由
   responsive.css 的同名规则放开为 display:flex + sticky 吸附）；
   本块是 results.css #rank-seg-* 的平行实现，不改排行 id 规则以免排行回归。
   白底 + 底部 hairline 由基类 .wx-seg 提供，激活色/指示条由 .wx-seg-item.active 提供，
   本块只补「单行不换行 + 内容宽不分段 + 紧凑 40px/13px」与展开态显隐。
   展开态：JS 在工具条加 .is-searching —— 分段项/放大镜隐藏，搜索框占满整行 +
   行尾关闭 ✕ 显示（清空 ✕ 的显隐由 JS 置 hidden 属性，[hidden] 兜底规则已在
   results.css 为 .tree-search-clear 定义，此处不重复）。
   字号一律绝对 px（coding-standards #29：本项目 html font-size 随断点 15/14/13px
   变化，rem 会被层层缩小至不可读）；本块禁止 animation/transform
   （coding-standards #31：切页不做整页淡入/位移动画） */
/* .forum-toolbar 与 #forum-toolbar 并列写：class 作语义钩子（coding-standards #25②
   要求新增 class 必须在 CSS 有定义），display 覆盖的可靠性仍由 id 特异性保证
   ——不依赖 .forum-toolbar 与 .wx-seg--page 的文件加载顺序 */
.forum-toolbar,
#forum-toolbar {
  display: flex;
  align-items: center;
  gap: 4px;
  padding: 0 12px;
}
/* 视图 tab 组：内容宽、不参与拉伸（.forum-view-tabs 为本文件新增 class） */
#forum-toolbar .forum-view-tabs {
  display: flex;
  align-items: center;
  gap: 4px;
  min-width: 0;
}
/* 分段项：覆盖 .wx-seg-item 的 flex:1 等分与 15px/44px，收紧为工具栏紧凑口径 */
#forum-toolbar .wx-seg-item {
  flex: 0 0 auto;
  height: 40px;
  padding: 0 10px;
  font-size: 13px;
  font-weight: 500;
}
/* 放大镜推到行尾；`.tree-search-box{display:none}` 基础来自 results.css，此处只补展开态显示 */
#forum-toolbar .tree-search-btn { margin-left: auto; flex: 0 0 auto; }
#forum-toolbar .tree-search-close { display: none; flex: 0 0 auto; }
#forum-toolbar.is-searching .tree-search-close { display: inline-flex; }
#forum-toolbar.is-searching .wx-seg-item,
#forum-toolbar.is-searching .tree-search-btn { display: none; }
#forum-toolbar.is-searching .tree-search-box { display: flex; }

/* min-height 由 400px 改 0：会话态要用 dvh 定高撑满可视区（见 .forum-state-chat），
   若保留 400px 下限，矮视口（如横屏 ~375px 高）下会把容器顶到 400 → 输入条下方又留白 */
.forum-view { display: flex; flex-direction: column; min-height: 0; }

/* 搜索结果面板：白卡浮层（搜索激活时三态已隐藏、面板独占工具条下方；
   分组灰条标题 + 40px 行，命中字 .forum-search-hl 品牌绿高亮） */
.forum-search-panel {
  background: var(--color-surface);
  border-bottom: 1px solid var(--color-border);
  box-shadow: 0 8px 24px rgba(0, 0, 0, 0.06);
  max-height: 60vh;
  overflow-y: auto;
  position: relative;
  z-index: 5;
}
.forum-search-sec {
  padding: 8px 16px 4px;
  font-size: 12px;
  color: var(--color-text-muted);
  background: var(--color-surface-sunken);
}
.forum-search-row {
  display: flex;
  align-items: center;
  gap: 10px;
  height: 40px;
  padding: 0 16px;
  cursor: pointer;
  -webkit-tap-highlight-color: transparent;
}
.forum-search-row:hover, .forum-search-row.active { background: var(--color-surface-sunken); }
.forum-search-row:active { background: var(--wx-pressed); }
.forum-search-row-icon {
  width: 30px; height: 30px;
  border-radius: 4px;
  display: flex; align-items: center; justify-content: center;
  font-size: 10px; color: #fff; font-weight: 600; flex-shrink: 0;
}
.forum-search-row-main { flex: 1; min-width: 0; }
.forum-search-row-title {
  font-size: 13px;
  color: var(--color-text-primary);
  white-space: nowrap; overflow: hidden; text-overflow: ellipsis;
}
.forum-search-row-code { font-size: 12px; color: var(--color-text-muted); margin-top: 1px; }
.forum-search-row-count { margin-left: auto; font-size: 12px; color: var(--color-text-secondary); flex-shrink: 0; }
.forum-search-hl { color: var(--color-brand); font-weight: 700; }

/* ---- 三态容器（显隐由 ForumUI 三态管理控制，骨架期 chat/feed 默认 display:none） ---- */
.forum-state { display: flex; flex-direction: column; }
.forum-state-list { /* 对象列表态：占满面板宽 */ }
/* 会话态：**撑满可视高度**（微信口径）——头部/行情条固定，消息区 flex:1 内部滚动，
   输入条贴容器底部（否则内容少时输入条跟着内容浮在上方、下方留一大片空，TabBar 悬空）。
   高度口径与 results-layout 一致（dvh 减容器上下内边距）；≤768 / ≤480 的容器内边距不同，
   断点覆盖写在 responsive.css */
.forum-state-chat { height: calc(100dvh - var(--content-pad) * 2); }
.forum-state-feed { /* 动态流态：占满面板宽 */ }

/* ---- 态①：对象列表（微信会话列表式） ---- */

/* 置顶公告行（可折叠）：微信「订阅号消息」置顶条风格——浅灰底通栏 +
   右侧「置顶」小标（::after 生成，不改骨架 DOM） */
.forum-pin {
  display: flex;
  align-items: center;
  gap: 10px;
  padding: 10px 16px;
  background: var(--color-surface-sunken);
  border-bottom: 1px solid var(--color-border);
  color: var(--color-text-secondary);
  font-size: 13px;
  cursor: pointer;
  overflow: hidden;
}
.forum-pin::after {
  content: '置顶';
  flex-shrink: 0;
  margin-left: auto;
  font-size: 11px;
  color: var(--color-warning);
  background: var(--color-warning-subtle);
  border-radius: var(--radius-sm);
  padding: 1px 6px;
}

/* 会话列表：通栏白底（微信消息列表无卡片圆角） */
.forum-conv-list { display: flex; flex-direction: column; background: var(--color-surface); }

/* 会话行：2026-09-12 用户拍板「紧凑对齐共享排序树叶子」——行高 56→46px、
   左方块 44→26px、对象名 15→14px、活跃徽章由橙底改为灰底小 pill 10px
   （对齐排行 .tree-node-runid/.tree-node-hot 口径）。
   **刻意保留**：最新消息摘要与未读红点（排行叶子无摘要字段，而它是会话列表的
   核心信息）、类目渐变底色（论坛的类目色码，非排版问题）、右上时间。
   通栏白底 + hairline 分隔、按压 #ececec（--wx-pressed）；中列上行对象名 14px
   + 代码/时间 12px，下行摘要 13px muted 单行截断 + 右下未读红点 */
.forum-conv-row {
  display: flex;
  align-items: center;
  gap: 10px;
  min-height: 46px;
  /* 纵向内边距 8→5px：行高是**内容撑的**（两行 20+18px），min-height 只是地板——
     只改 min-height 不会让行变矮（2026-09-12 实测：改前 ~59px、只调 min-height 后仍 59px） */
  padding: 5px 16px;
  border-bottom: 1px solid var(--color-border);
  background: var(--color-surface);
  cursor: pointer;
  -webkit-tap-highlight-color: transparent;
}
.forum-conv-row:hover { background: var(--color-surface-sunken); }
.forum-conv-row:active { background: var(--wx-pressed); }
.forum-conv-icon {
  width: 26px; height: 26px;
  border-radius: 4px; /* 微圆角方块（尺度对齐排行叶子名次方块 20px 的观感） */
  display: flex; align-items: center; justify-content: center;
  font-size: 12px; color: #fff; font-weight: 600; flex-shrink: 0;
}
/* 类目渐变（行业/ETF/指数，对齐设计稿 ci-ind/ci-etf/ci-idx；无头像时首字占位同款） */
.forum-conv-icon-sec { background: linear-gradient(135deg, #5b8ff9, #2b5fd9); }
.forum-conv-icon-etf { background: linear-gradient(135deg, #ffb86b, #e8873d); }
.forum-conv-icon-idx { background: linear-gradient(135deg, #6bd6a8, #2ba471); }
.forum-conv-main { flex: 1; min-width: 0; }
/* 显式行高：行高由内容行盒决定，不给 line-height 就吃浏览器默认（~1.4 倍），
   两行加起来把行撑到 ~59px；锁定 20/18px 后总高 = 20 + 2 + 18 + 10(内边距) ≈ 50px
   （比改前 ~59px 矮 9px，比参考的排行叶子 63px 矮 13px） */
.forum-conv-line1 { display: flex; align-items: baseline; gap: 6px; line-height: 20px; }
/* 对象名 15→14px（对齐叶子 .tree-node.leaf 的 14px）。字重刻意留 500（叶子是
   400）：树靠缩进层级区分父子，而这里是平铺列表，标题需要一点重量才不会与
   下行摘要糊在一起——若要与叶子严格一致改 400 即可 */
.forum-conv-name {
  font-size: 14px; font-weight: 500; color: var(--color-text-primary);
  min-width: 0; white-space: nowrap; overflow: hidden; text-overflow: ellipsis;
}
.forum-conv-code { font-size: 12px; color: var(--color-text-muted); flex-shrink: 0; }
.forum-conv-time { margin-left: auto; font-size: 12px; color: var(--color-text-muted); flex-shrink: 0; }
/* 下行：2026-09-12 用户拍板「活跃徽章挪到评论前面」——本行现为
   「活跃胶囊 + 摘要 span（含 .forum-conv-who 发言人前缀）+ .forum-conv-extra」
   三段，gap 6px 保证胶囊与摘要不贴死。
   字号在本级统一给（13px，2026-09-11 由 14px 收紧），rem/total-count/unread
   等子项均有显式字号不受影响；改父级可让摘要与其内嵌的发言人前缀同步缩放 */
.forum-conv-line2 {
  display: flex; align-items: center; gap: 6px;
  margin-top: 2px;
  font-size: 13px; line-height: 18px; color: var(--color-text-muted);
}
.forum-conv-preview { flex: 1; min-width: 0; white-space: nowrap; overflow: hidden; text-overflow: ellipsis; }
.forum-conv-who { color: var(--color-text-muted); } /* 微信摘要整行灰（含发言人前缀） */
.forum-conv-extra { margin-left: 12px; flex-shrink: 0; display: flex; align-items: center; gap: 8px; }
/* 未读红点徽章：16px 红圆白数字（--color-danger，WeUI 红口径）。
   2026-09-12 随会话行紧凑化 18→16px / 字 12→10px，与工具条 pill 尺度一致 */
.forum-unread-pill {
  background: var(--color-danger);
  color: #fff;
  font-size: 10px;
  font-weight: 500;
  border-radius: 8px;
  height: 16px;
  line-height: 16px;
  min-width: 16px;
  box-sizing: border-box;
  padding: 0 4px;
  text-align: center;
}
/* 累计消息总数（灰色安静态） */
.forum-total-count { color: var(--color-text-muted); font-size: 12px; }

/* ---- 会话列表分页（2026-09-09 sec_code 化：security 全量标的 offset 分页） ---- */

/* 活跃分徽章（综合活跃分 >0 才渲染）。2026-09-12 用户拍板「紧凑对齐排行叶子」：
   由橙底（--color-warning-subtle + warning 字）改为**灰底小 pill**，与排行
   互动徽章 .tree-node-runid/.tree-node-hot 同口径（10px + --color-surface-sunken
   + padding 2px 6px）——视觉分量让位给对象名，不再抢眼 */
.forum-act-pill {
  flex-shrink: 0;
  font-size: 10px;
  /* 必须独立声明 line-height：除非显式覆盖，pill 会继承所在行（.forum-conv-line2，
     18px）的行高，自身高度变成 18+4=22px 反过来把整行撑高（2026-09-12 实测踩到：
     当时它在 line1，继承 20px → pill 24px → 行高 55px 的元凶） */
  line-height: 14px;
  color: var(--color-text-secondary);
  background: var(--color-surface-sunken);
  border-radius: var(--radius-sm);
  padding: 2px 6px;
  white-space: nowrap;
}

/* 「加载更多」行（列表尾部；滚动到底自动翻页的显式兜底入口）：
   微信「更多」弱按钮口径——灰字、44px 触达高、按压反馈 */
.forum-conv-more {
  display: flex;
  align-items: center;
  justify-content: center;
  min-height: 44px;
  padding: 0 16px;
  font-size: 14px;
  color: var(--color-text-secondary);
  cursor: pointer;
  -webkit-tap-highlight-color: transparent;
}
.forum-conv-more:hover { background: var(--color-surface-sunken); }
.forum-conv-more:active { background: var(--wx-pressed); }

/* 「已全部加载」尾行（灰色安静态，不可点） */
.forum-conv-done {
  padding: 14px 16px;
  text-align: center;
  font-size: 12px;
  color: var(--color-text-muted);
}

/* 空态占位（三态共用）：居中灰字，13px / 上下 48px 对齐排行页 .empty-state 口径 */
.forum-empty {
  padding: 48px 20px;
  text-align: center;
  font-size: 13px;
  color: var(--color-text-muted);
}

/* ≤768px：列表通栏贴边（微信消息列表无左右页边距，cell 水平内边距 16px）；
   桌面端同为全宽通栏（见上方 #panel-forum .panel-inner 口径）。
   聊天区/动态流贴边通栏；输入栏不 fixed（文档流内），TabBar 避让由
   responsive.css 的 content 底部 padding + 本行 safe-area 补底共同兜底 */
@media (max-width: 768px) {
  /* 顶部间距归零：responsive.css:213 有
     `.panel > .panel-inner:first-child { margin-top: var(--content-pad) }`
     （给「无分段条」面板补回滚动容器顶部内边距），但论坛现在头部是粘性工具条
     .wx-seg--page，这段 margin 会把粘性停靠线下推、吸附时上方露出缝隙；
     id 特异性 (1,1,0) 压过该规则 (0,3,0) 的 id 列，必须显式归零 */
  #panel-forum .panel-inner { margin-top: 0; }
  .forum-pin { padding-left: var(--wx-cell-pad-h); padding-right: var(--wx-cell-pad-h); }
  .forum-conv-row { padding-left: var(--wx-cell-pad-h); padding-right: var(--wx-cell-pad-h); }
  .forum-conv-code { display: none; } /* 窄屏代码让位对象名（title/会话内仍可读） */
  .forum-search-row { padding: 0 12px; }
  /* 聊天区：贴边通栏（左右内边距收窄），气泡列上限保持 70% */
  .forum-chat-body { padding: 12px; } /* min-height 交由会话态的 dvh 定高 + flex:1 决定 */
  .forum-chat-replybar { padding: 6px 12px; }
  /* 窄屏图标多（🔊/🎤/😊/➕），水平内边距收到 10px 与基础值一致，给输入框留宽度 */
  .forum-chat-input { padding-left: 10px; padding-right: 10px; }
  /* 动态流卡片：窄屏内边距收窄（紧凑化 2026-09-12，与桌面口径一致） */
  .forum-feed-card { padding: 8px 10px; gap: 8px; }
  .forum-feed-more { padding: 12px; }
}

/* ---- 态②：对象会话（聊天室，2026-09-10 P5-T5.1b 微信聊天界面规格） ---- */

/* 头部：微信导航栏——白底、44px 高、底部 hairline */
.forum-chat-head {
  display: flex;
  align-items: center;
  gap: 4px;
  min-height: var(--wx-nav-height);
  padding: 0 12px 0 0;
  background: var(--color-surface);
  border-bottom: 1px solid var(--color-border);
}
/* 返回「‹」：44px 方形触摸区（对齐全站 mobile-back 触达口径），箭头加大加粗 */
/* 返回：44px 方形触摸区 + **纯 chevron 图标**（2026-09-12 用户拍板）。
   原「‹ 返回」文字在 44px 里装不下会折行、并把标题挤得与上方 tab 对不齐 */
.forum-chat-back {
  display: flex;
  align-items: center;
  justify-content: center;
  width: var(--wx-nav-height);
  height: var(--wx-nav-height);
  flex-shrink: 0;
  color: var(--color-text-primary);
  cursor: pointer;
  user-select: none;
  -webkit-tap-highlight-color: transparent;
}
.forum-chat-back svg { width: 24px; height: 24px; }
.forum-chat-back:active { opacity: 0.4; }
/* 标题 = 「查看数据详情」入口（2026-09-12 用户拍板「行情条退役、点标题跳详情」）：
   微信链接蓝高亮示可点（原「查看数据详情 ›」独立入口已退役，点击委托见
   forum_chat.js bindEvents 的 .forum-chat-title 分支） */
.forum-chat-title {
  font-weight: 600;
  font-size: 15px;
  color: var(--color-link);
  cursor: pointer;
  min-width: 0;
  white-space: nowrap;
  overflow: hidden;
  text-overflow: ellipsis;
}
.forum-chat-title:active { opacity: 0.6; }
.forum-chat-sub { color: var(--color-text-muted); font-size: 12px; flex-shrink: 0; }
/* 标题行涨幅 chip（原行情条的涨跌并入，红涨绿跌；无分由 JS 置空不占位） */
.forum-chg { font-weight: 700; flex-shrink: 0; }
.forum-chg-up { color: var(--color-danger); }   /* A股口径：红涨 */
.forum-chg-down { color: var(--color-success); } /* 绿跌 */

/* 消息体：正序气泡流（背景 = 页面底色微信 #ededed） */
/* 消息区：弹性撑满剩余高度、内部滚动（原 min-height:320px / max-height:60vh 是
   「整页滚动」时代的写法，会让输入条跟着内容走、下方留白） */
.forum-chat-body {
  background: var(--color-bg);
  padding: 14px 16px;
  flex: 1;
  min-height: 0;
  overflow-y: auto;
  display: flex;
  flex-direction: column;
  gap: 14px;
}
.forum-msg-row { display: flex; gap: 10px; align-items: flex-start; }
.forum-msg-row-mine { flex-direction: row-reverse; }
/* 消息行不带头像（2026-10-31 用户拍板「这个图标不要了」）：昵称小字已能识别
   发送者，头像方块纯装饰且占横向空间；保留 row-reverse 供自己的消息贴右 */
.forum-msg-col { max-width: 70%; min-width: 0; }
.forum-msg-row-mine .forum-msg-col { text-align: right; }
/* 群聊昵称：气泡上方小字 13px 灰；自己的消息同样显示（2026-10-31 用户拍板：
   头像移除后昵称是唯一身份标识，原「微信自己消息不显昵称」口径退役） */
.forum-msg-name { font-size: 13px; color: var(--color-text-secondary); margin-bottom: 4px; }
/* 气泡：他人左白 / 自己右浅绿；8px 圆角、16px 字、无阴影（微信扁平） */
.forum-msg-bubble {
  display: inline-block;
  padding: 10px 14px;
  border-radius: var(--radius-md);
  font-size: 16px;
  line-height: 1.5;
  text-align: left;
  background: var(--color-surface);
  color: var(--color-text-primary);
  word-break: break-word;
  cursor: pointer;
  -webkit-tap-highlight-color: transparent;
}
/* 自己的气泡：微信专属浅绿 #95ec69（非品牌绿 #07c160），文字仍 #191919
   （微信允许的局部字面量） */
.forum-msg-row-mine .forum-msg-bubble { background: #95ec69; }
.forum-msg-bubble:active { opacity: 0.85; }
/* 评论配图缩略图（2026-10-28 评论带图，计划 quote-share-to-forum §1.5）：
   气泡/动态卡（forum-feed-text 内）/详情评论区（results.css .comment-item）三处
   共用同一类名——forum.css 与 results.css 均为 ranking.html 全页加载，单份定义
   三处生效。src 由前端 parseInt 归一后的整数拼出（无用户可控字符）。
   2026-10-30 用户拍板「图片支持点击放大查看」：cursor 改 zoom-in（点击放大由
   forum_lightbox.js 的 document 级委托承接，三处零接线自动生效）。 */
.forum-msg-img {
  display: block;
  max-width: 140px; /* 2026-10-28 按窗分享计划 §2.6：220→140（用户「缩略图再小点」） */
  width: 100%;
  max-height: 160px;
  object-fit: cover;
  border-radius: var(--radius-md);
  margin-top: 6px;
  cursor: zoom-in;
}

/* 遮罩弹层（2026-10-30 论坛 lightbox，forum_lightbox.js 惰性创建挂 body）：
   图片放大 / 公式源码两视图互斥；点遮罩/Esc 关闭，代码卡片内点击不关
   （forum_lightbox.js 委托侧判 closest('.forum-lightbox-card')）。z-index 用
   --z-overlay（200）之下无更高业务层，压过论坛面板全部 z 值（forum.css 最高 5）。 */
.forum-lightbox {
  position: fixed;
  top: 0;
  left: 0;
  right: 0;
  bottom: 0;
  z-index: var(--z-overlay);
  background: rgba(0, 0, 0, 0.8);
  display: flex;
  align-items: center;
  justify-content: center;
  padding: 16px;
}
.forum-lightbox[hidden] { display: none !important; }
.forum-lightbox-img {
  max-width: 92vw;
  max-height: 92vh;
  border-radius: var(--radius-sm, 4px);
}
.forum-lightbox-card {
  display: flex;
  flex-direction: column;
  width: min(92vw, 640px);
  max-height: 80vh;
  background: var(--color-surface);
  border-radius: var(--radius-lg);
  overflow: hidden;
}
.forum-lightbox-title {
  flex: none;
  padding: 12px 16px;
  font-size: 14px;
  font-weight: 500;
  color: var(--color-text-primary);
  border-bottom: 1px solid var(--color-border);
}
.forum-lightbox-code {
  margin: 0;
  padding: 12px 16px;
  overflow: auto;
  font-family: ui-monospace, SFMono-Regular, Consolas, 'Courier New', monospace;
  font-size: 12px;
  line-height: 1.6;
  color: var(--color-text-primary);
  white-space: pre-wrap;
  word-break: break-all;
  user-select: text;
}
/* 「保存公式」小按钮（2026-10-28 按窗分享计划 Task 4/5）：论坛气泡（气泡外、
   消息列内）、动态卡（forum-feed-text 内）、详情评论区（comment-item 内）三处
   共用。低调描边 pill，点击才拉公式全文（渲染零请求）。 */
.forum-msg-save {
  display: inline-block;
  margin-top: 6px;
  padding: 2px 10px;
  font-size: 12px;
  line-height: 18px;
  color: var(--color-brand);
  background: transparent;
  border: 1px solid currentColor;
  border-radius: 999px;
  cursor: pointer;
}
.forum-msg-save:hover { opacity: 0.8; }
/* 引用回复（气泡内灰色引用块） */
.forum-msg-quote-ref {
  display: block;
  font-size: 13px;
  color: var(--color-text-secondary);
  background: rgba(0, 0, 0, 0.05);
  border-left: 3px solid var(--color-border-strong);
  padding: 4px 8px;
  border-radius: var(--radius-sm);
  margin-bottom: 5px;
}
/* 居中时间分隔条（forum_chat.js 按相邻消息间隔 >5min 插入，微信群聊口径） */
.forum-msg-time-sep { text-align: center; font-size: 12px; color: var(--color-text-muted); }
/* 系统灰条（对象事件：更新预测分/新数据上传，居中） */
.forum-msg-sys { text-align: center; font-size: 12px; color: var(--color-text-secondary); }
.forum-msg-sys span {
  background: var(--color-border);
  border-radius: var(--radius-sm);
  padding: 2px 10px;
}

/* 引用回复条（输入框上方，ForumChat 动态插入 #forum-chat-replybar）：
   微信长按引用样式——浅灰条 + 被引内容截断 + 右侧关闭 ✕ */
.forum-chat-replybar {
  display: flex;
  align-items: center;
  gap: 8px;
  padding: 6px 16px;
  background: var(--color-surface-sunken);
  border-top: 1px solid var(--color-border);
  font-size: 12px;
  color: var(--color-text-secondary);
}
.forum-chat-replybar-text {
  flex: 1;
  overflow: hidden;
  text-overflow: ellipsis;
  white-space: nowrap;
}
.forum-chat-replybar-x {
  cursor: pointer;
  font-size: 14px;
  flex-shrink: 0;
  width: 28px;
  height: 28px;
  line-height: 28px;
  text-align: center;
  color: var(--color-text-secondary);
  -webkit-tap-highlight-color: transparent;
}
.forum-chat-replybar-x:active { color: var(--color-text-primary); }

/* 底部输入区（2026-09-12 用户拍板「聊天页上下都清，只留纯粹的输入框+发送」）：
   贴底条 + safe-area 补底，文档流内不 fixed——TabBar 避让由 responsive.css 的
   content 底部 padding 兜底。
   **单行 flex**：多行输入框占左、发送文字按钮占右。
   ⚠️ 底色**必须是页面灰**（--color-bg），不能是白：输入框是白底无边框的，
   条底若也白 → 框与条同色 → 整个框"消失"（2026-09-12 用户反馈「整个框的感觉不对」
   的根因，实测框/条同为 rgb(255,255,255)）。微信手机版正是「灰底条 + 白框」，
   框靠灰底衬托才立得住。底部**不设 border-top**：与微信一致，靠白框自身分界。
   align-items:flex-end：输入框长高时发送键贴底。
   历史（勿回退）：曾放过微信手机版那套 🔊/🎤/😊/➕（含表情面板），
   用户最终选择只要纯输入框——需要时看 git 历史（提交 message 带「输入栏按微信手机版布局重排」）。 */
.forum-chat-input {
  display: flex;
  align-items: flex-end;
  gap: 8px;
  padding: 8px 10px;
  /* 不再加 env(safe-area-inset-bottom)：会话态底边已落在 TabBar 上沿，安全区由
     TabBar 自己吃（Chat 态高度已扣 safe-area，见 responsive.css）——两边都加会叠出双份留白 */
  background: var(--color-bg);
}
/* 输入框：白底、**无边框**（靠页面灰底衬托才看得见，聚焦时才亮品牌色描边）。
   多行自增高由 JS 写 style.height，上限 MAX_INPUT_H=120（**须与 forum_chat.js
   常量一致，改一处必须改另一处**），到顶后由这里 overflow-y:auto 内部滚动。
   字号 15px；≤768 升 16px 防 iOS 聚焦缩放（responsive.css）。行高约束：
   本断点 1.4×15px=21px 恰为整数；**≤768 断点必须写整数 line-height（22px）
   勿写 1.4**（16×1.4=22.4px 分数行高 → JS 像素公式错位 → 底部留白文字贴顶，
   2026-09-12 用户截图报障，详见 responsive.css 同名规则注释）。
   resize:none 去掉 textarea 原生右下角拖拽柄 */
.forum-chat-input-field {
  flex: 1;
  min-width: 0;
  box-sizing: border-box;
  border: 1px solid transparent;
  border-radius: var(--radius-md);
  padding: 7px 12px;
  font-size: 15px;
  line-height: 1.4;
  min-height: 34px;
  max-height: 120px;
  overflow-y: auto;
  resize: none;
  font-family: inherit;
  background: var(--color-surface);
  color: var(--color-text-primary);
  outline: none;
  -webkit-appearance: none;
  appearance: none;
}
.forum-chat-input-field::placeholder { color: var(--color-text-muted); }
.forum-chat-input-field:focus {
  border-color: var(--color-brand);
  box-shadow: 0 0 0 2px var(--color-focus-ring);
}
/* 匿名禁言/发送中置灰（forum_chat.js disabled 驱动） */
.forum-chat-input-field:disabled {
  background: var(--wx-seg-bg);
  color: var(--color-text-muted);
}
/* 发送：文字按钮（无填充绿字）；**空内容 / 发送中 / 匿名时置灰禁用**
   （forum_chat.js _syncSendState() 单出口驱动，别处不要直接写 disabled） */
.forum-chat-send {
  background: none;
  border: none;
  color: var(--color-brand);
  padding: 8px 6px;
  cursor: pointer;
  font-size: 15px;
  font-family: inherit;
  font-weight: 500;
  flex-shrink: 0;
  border-radius: var(--radius-sm);
  -webkit-tap-highlight-color: transparent;
}
.forum-chat-send:hover:not(:disabled) { background: var(--color-brand-subtle); }
.forum-chat-send:disabled {
  color: var(--color-text-muted);
  cursor: not-allowed;
  background: none;
}

/* ---- 态③：汇总动态流（2026-09-10 P5-T5.1b 朋友圈式） ---- */
/* 注：原「筛选 tab 行（全部/我关注的/官方标的/我的评论）」的 4 档 tab 专属样式
   已于 2026-09-12 随其容器一起删除——4 档筛选上移合并进工具条 #forum-view-tabs
   的单行 5 项，视觉由 .wx-seg-item / .wx-seg-item.active（components.css）统一提供，
   激活态归 ForumUI._syncForumTabs() 单出口，本文件不再有动态流专属 tab 样式。 */

.forum-feed-list { display: flex; flex-direction: column; background: var(--color-surface); }

/* 动态卡片：单栏——昵称行 / 内容 / 对象 chip / 元信息行（时间+互动，13px）。
   不带头像（2026-10-31 用户拍板「这个图标不要了」，与群聊消息行一致，见
   .forum-msg-row 注释）：昵称已能识别发送者。 */
.forum-feed-card {
  display: flex;
  gap: 8px;
  padding: 8px 12px;
  border-bottom: 1px solid var(--color-border);
  background: var(--color-surface);
}
/* 紧凑化（2026-09-12 用户拍板「紧凑型显示」）：内边距 12/16→8/12、正文 15→14；
   对象 chip 上移并入首行（省一整行） */
.forum-feed-main { flex: 1; min-width: 0; }
/* 紧凑行（corrections 2026-09-12：行高由内容行盒决定，必须显式 line-height，
   且行内小元素自带 line-height 防继承反向撑高行）；nowrap：chip 在首行内，
   允许换行会在窄面板把 chip 挤成第二行、行高不可控——溢出由昵称省略号吸收 */
.forum-feed-line1 {
  display: flex; align-items: center; gap: 6px;
  flex-wrap: nowrap; line-height: 20px;
}
/* 昵称：朋友圈链接蓝 #576b95 口径 */
.forum-feed-name {
  font-weight: 600;
  font-size: 14px;
  color: var(--color-link);
  min-width: 0;
  white-space: nowrap;
  overflow: hidden;
  text-overflow: ellipsis;
}
.forum-feed-action { color: var(--color-text-secondary); font-size: 13px; line-height: 20px; white-space: nowrap; flex-shrink: 0; }
/* 论坛用户徽章（2026-10-31）：昵称后的 vip1-4 / 管理员小标签。
   四档用不同底色便于一眼区分等级；管理员用正文色独立于 VIP 色阶。 */
.user-vip-badge {
  display: inline-block;
  margin-left: 4px;
  padding: 0 5px;
  border-radius: 8px;
  font-size: 10px;
  line-height: 16px;
  font-weight: 600;
  vertical-align: middle;
  white-space: nowrap;
  color: #fff;
  background: var(--color-text-muted);
}
.user-vip-badge.vip1 { background: #8aa4b8; }
.user-vip-badge.vip2 { background: #5b8def; }
.user-vip-badge.vip3 { background: #f0a020; }
.user-vip-badge.vip4 { background: var(--color-danger); }
.user-vip-badge.admin { background: var(--color-text-primary); }
/* 「官方标的」筛选档及其官方徽章 2026-09-12 下架（用户拍板：官方数据来源维度
   不做独立展示），.forum-feed-badge-official 样式随之退役删除 */
/* 内容：14px 正文（紧凑化 15→14；聊天气泡正文仍保留 16px） */
.forum-feed-text {
  font-size: 14px;
  line-height: 1.5;
  color: var(--color-text-primary);
  word-break: break-word;
  margin-top: 1px;
}
/* 对象 chip（可点进会话；紧凑化并入首行：自带 line-height + flex-shrink:0，
   昵称省略号吸收溢出；超长 chip 自身裁剪防溢出） */
.forum-obj-chip {
  display: inline-flex;
  align-items: center;
  gap: 4px;
  padding: 0 8px;
  background: var(--color-brand-subtle);
  border-radius: var(--radius-sm);
  font-size: 12px;
  line-height: 18px;
  color: var(--color-brand);
  cursor: pointer;
  font-weight: 500;
  white-space: nowrap;
  flex-shrink: 0;
  max-width: 55%;
  overflow: hidden;
  -webkit-tap-highlight-color: transparent;
}
.forum-obj-chip:active { background: var(--color-brand-glow); }
.forum-feed-quote { color: var(--color-text-muted); }
/* 元信息行（时间 + 互动 ops；紧凑化 13→12px、margin 8→3、gap 16→10） */
.forum-feed-foot {
  display: flex;
  align-items: center;
  gap: 10px;
  margin-top: 3px;
  color: var(--color-text-muted);
  font-size: 12px;
  line-height: 16px;
}
.forum-feed-time { color: var(--color-text-muted); font-size: 12px; line-height: 16px; }
.forum-feed-op { cursor: pointer; -webkit-tap-highlight-color: transparent; }
.forum-feed-op:active { opacity: 0.6; }
/* 点赞已赞态（forum_feed.js 乐观更新切换 .liked）：朋友圈蓝心口径 → 链接蓝 #576b95 */
.forum-feed-op.liked { color: var(--color-link); font-weight: 600; }
.forum-feed-goto { margin-left: auto; color: var(--color-text-muted); cursor: pointer; -webkit-tap-highlight-color: transparent; }
.forum-feed-goto:active { color: var(--color-link); }

/* 加载更多 */
.forum-feed-more {
  padding: 12px 20px;
  text-align: center;
  font-size: 13px;
  color: var(--color-link);
  cursor: pointer;
  background: var(--color-surface);
  -webkit-tap-highlight-color: transparent;
}
.forum-feed-more:active { background: var(--wx-pressed); }
