/* =============================================================================
   SQB 社区 /bbs —— 论坛样式（薄层）
   -------------------------------------------------------------
   只叠在 pulse.css 之上：按钮 / .wrap / .nav / .brand / .sheet / .totop /
   .footer / .pager / .dyv 以及全部颜色变量都来自主站，主题切换即时生效。
   本文件只补论坛专属组件，且一律用 var(--*) 取色，保持跟主题皮肤打通。
   ========================================================================== */

/* 页头是 fixed（pulse.css，高 --nav-h），内容必须让位——此前 34px 不够导致重叠 */
.wrap.bbs { padding-top: calc(var(--nav-h) + 26px); padding-bottom: 24px; }

/* ---- 内容不足一屏时页脚贴底 ----
   站长截图：「这个区域空白太多，浪费版面」——首页只有两行版块，文档高被浏览器撑到
   一屏（html 高度），footer 却跟在内容后面漂在中间，下方空出三百多像素的纯底色。
   把 body 变成纵向 flex、main 吃掉剩余高度，footer 就稳稳压在视口底部。
   ⚠️ body 的其它子元素（cosmos / sheet / scanline / progress / ribbon）全是 fixed，
   脱离文档流，不参与这条 flex，不会被打乱。
   ⚠️ pointer-glow 2026-10-21 起包在 .pointer-glow-wrap（fixed + overflow:hidden）里
   ——光晕自身是 absolute 跟鼠标走，不套层会撑高文档（页脚下多出空白滚动区）。 */
body { display: flex; flex-direction: column; min-height: 100vh; min-height: 100svh; }
body > main { flex: 1 0 auto; display: flex; flex-direction: column; }
body > main > .wrap { flex: 1 1 auto; }
body > footer.footer { flex: none; }

/* 首页拉伸机关已退役（2026-10-16 站长截图五处删除之⑤：版表面板删掉后没有可拉伸的
   白卡片，.bbs--home 整组规则失去对象；body/main 的「页脚贴底」保留 —— 短页
   （登录/注册）仍然受益）。首页现在只剩账号动作按钮行，bbs--home 类不再输出。 */

/* ---- 页头右侧账号动作（原内容区「社区工具条」已并入主导航，此处只补增量样式） ---- */
.btn--mute {
  cursor: default; color: #c98a12; border: 1px solid rgba(201, 138, 18, .38);
  background: rgba(201, 138, 18, .08); font-size: 12.5px;
}
/* 未读角标。
   ⚠️ 字重必须 ≤600：站长 2026-10-16 定「论坛除正文帖子标题外不得有粗体」，
   而这个角标渲染在内容区的 .bbs-userbar（不在 header.nav 豁免区），
   只要有一条未读私信/通知，全站每一页都会被排版总闸点名（当日实测 28 页全红）。 */
.nav__dot {
  display: inline-flex; align-items: center; justify-content: center;
  min-width: 17px; height: 17px; margin-left: 5px; padding: 0 4px;
  background: var(--brand); color: #fff; font-size: 10.5px; font-weight: 400;
  border-radius: 999px;
}
/* 窄屏（≤1020px）页头只留「发帖 / 我的（或登录注册）」，其余动作进汉堡抽屉
   —— 821~1020px 档 4 颗按钮会把导航挤折行（2026-10-16 实测） */
@media (max-width: 1020px) {
  .nav__sm-hide { display: none; }
}

/* ---- 头像 ---- */
.bbs-ava { border-radius: 50%; object-fit: cover; display: inline-block; vertical-align: middle; flex: none; }

/* ---- Tab 切换（最新回复 / 最新发帖 / 精华） ---- */
.bbs-tabs { display: flex; gap: 6px; padding: 10px 14px 0; border-bottom: 1px solid var(--line); flex-wrap: wrap; }
.bbs-tab {
  font-size: 13px; color: var(--muted); text-decoration: none; padding: 7px 13px;
  border-radius: 10px 10px 0 0; border-bottom: 2px solid transparent;
}
.bbs-tab i { font-style: normal; font-size: 11.5px; color: var(--dim); margin-left: 3px; }
.bbs-tab:hover { color: var(--ink); }
.bbs-tab.is-on { color: var(--ink); font-weight: 400; border-bottom-color: var(--brand); }

/* ---- 帖子作者行 / 楼层 ---- */
.bbs-post__who {
  display: inline-flex; align-items: center; gap: 6px; color: var(--ink);
  text-decoration: none; font-size: 13px;
}
.bbs-post__who:hover b { color: var(--brand); }
.bbs-post__no { margin-left: auto; font-size: 12px; color: var(--dim); white-space: nowrap; }
.floor { font-size: 11.5px; color: var(--muted); margin-left: 4px; }
.floor--sofa { color: var(--brand); font-weight: 400; }

/* ---- 引用块 ---- */
.bbs-quote {
  margin: 2px 0 8px; padding: 8px 12px; font-size: 13px; color: var(--ink-2);
  background: var(--surface-3); border-left: 3px solid var(--brand); border-radius: 0 10px 10px 0;
}
.bbs-quote a { color: var(--brand); text-decoration: none; font-weight: 400; }
.bbs-quote__body { margin-top: 4px; color: var(--muted); }

/* ---- 个人主页 ---- */
.profile { display: flex; gap: 18px; align-items: flex-start; margin: 4px 0 18px; }
.profile__info { flex: 1 1 auto; min-width: 0; }
/* 昵称不算标题（站长：论坛除正文帖子标题外不要粗体大号字）→ 与普通标题同档 */
.profile__info h1 { font-size: 17px; font-weight: 400; margin: 0 0 6px; color: var(--ink); letter-spacing: 0; }
.profile__stats { display: flex; gap: 18px; margin: 10px 0 8px; font-size: 13px; color: var(--ink-2); }
.profile__stats b { font-size: 15px; color: var(--ink); }
.profile__bio { font-size: 13.5px; color: var(--ink-2); }
@media (max-width: 560px) { .profile { flex-direction: column; align-items: center; text-align: center; }
  .profile__stats { justify-content: center; } }

/* ---- 通知未读行 ---- */
.row.is-new .ti::after { content: ' ·'; color: var(--brand); }

/* ---- 排版总闸：全站不使用加粗（2026-10-17 站长指令）----
   2026-10-16 站长：「论坛除了正文处的帖子标题，全部不要弄那些粗字体、大号字。」
   2026-10-17 站长（更严的一版）：「全站的所有文本都不要使用加粗，正常字体是怎样就怎样。」
   → 字重上限从「论坛 ≤600」收紧为「**全站一律 400**」，字号 ≤17px 的约束继续有效。

   粗黑字的来源逐个收口：
     ① pulse.css 给 h1~h4 默认 800 字重、字号也大 —— 页面标题（登录 / 注册 /
        发表主题 / 通知 / 搜索…）全被顶成粗黑大字；
     ② 浏览器给 <b>/<strong> 默认 700 —— 论坛里到处都是它们当「轻强调」用
        （引用署名、通知里的对方昵称、后台 meta、媒体过期时间…），一漏就是黑体；
     ③ 各组件自己写的 500/600/700 —— 已在本文件与 pulse.css / admin.css 里逐条改 400。
   ⚠️ 2026-10-16 那版的「帖子标题 ≤600 / 页头 .brand 22px·800 豁免」两条例外，
      本版一并取消 —— 站长这次要的是全站零加粗，不再留任何粗体豁免。 */
.hd { display: flex; align-items: center; justify-content: space-between; gap: 12px; margin: 4px 0 16px; flex-wrap: wrap; }
.hd h1 { font-size: 17px; font-weight: 400; margin: 0; color: var(--ink); letter-spacing: 0; }
/* <b>/<strong> 降到 400，与周围正文完全同重 —— 这就是站长要的「正常字体」。 */
b, strong { font-weight: 400; }
.btn-top { flex: none; }

/* ---- 内容区第一行：面包屑（左） + 账号工具条（右）----
   站长手绘版式的第一行就是这个排法。没有面包屑的页面（首页 / 登录 / 通知…）工具条自己独占一行。
   合排时把「你好，xx」隐掉 —— 那一行右端按版式只放账号动作，问候语会把它挤开。 */
.bbs-topline {
  display: flex; align-items: center; justify-content: space-between;
  flex-wrap: wrap; gap: 8px 16px; margin: 0 0 12px;
}
.bbs-topline .bbs-crumb { margin: 0; flex: 1 1 auto; }
.bbs-topline .bbs-userbar { margin: 0; flex: 0 1 auto; }
.bbs-topline .bbs-userbar__hi { display: none; }

/* 站长要求「顶栏用主站同一套 CTA」，发帖 / 私信 / 通知 / 论坛管理 / 我的 / 退出 便落到这里 */
.bbs-userbar { display: flex; align-items: center; justify-content: space-between;
  flex-wrap: wrap; gap: 8px 12px; margin: 0 0 14px; }
.bbs-userbar__hi { font-size: 13px; color: var(--muted); }
.bbs-userbar__acts { display: flex; align-items: center; flex-wrap: wrap; gap: 8px; margin-left: auto; }
/* ⚠️ 站长 2026-10-16：这一排（私信 / 论坛管理 / 我的 / 退出）**文字不要粗体**。
   `.btn` 是 pulse.css 里的共享组件（字重 600，主站顶栏也在用），所以只收窄到论坛内容区这一排，
   别去动共享组件 —— 动了会破坏「整站顶栏统一」。 */
.bbs-userbar__acts .btn { font-weight: 400; }
@media (max-width: 520px) {
  .bbs-userbar__acts { width: 100%; margin-left: 0; gap: 6px; }
  .bbs-userbar__acts .btn--sm { height: 34px; padding: 0 11px; font-size: 12.5px; }
}

/* ---- 轻量私信 ---- */
.pm__list { display: flex; flex-direction: column; gap: 10px; padding-top: 12px; }
.pm { max-width: 78%; padding: 9px 12px; border-radius: 12px;
  background: var(--surface-3); border: 1px solid var(--line); }
.pm--me { align-self: flex-end; background: var(--grad-soft); border-color: transparent; }
.pm__meta { font-size: 11.5px; color: var(--muted); margin-bottom: 4px; }
.pm__body { font-size: 14px; line-height: 1.65; color: var(--ink); word-break: break-word; }
@media (max-width: 560px) { .pm { max-width: 92%; } }

.muted { color: var(--muted); font-size: 12.5px; }
.empty { color: var(--muted); font-size: 13.5px; padding: 22px 6px; text-align: center; }

/* ---- 卡片面板 ---- */
.panel {
  background: var(--surface); border: 1px solid var(--line); border-radius: 16px;
  box-shadow: var(--shadow-soft); margin-bottom: 18px; overflow: hidden;
  backdrop-filter: blur(8px);
}
.panel__head { display: flex; align-items: center; justify-content: space-between; gap: 12px; padding: 14px 18px; border-bottom: 1px solid var(--line); }
/* 面板小标题：只做分组标签，不要粗体（pulse.css 的 h2 默认 800） */
.panel__head h2 { font-size: 14.5px; font-weight: 400; margin: 0; color: var(--ink); }
.panel__body { padding: 6px 18px 14px; }

/* ---- 列表行（版块 / 主题 / 搜索结果） ---- */
.row {
  display: flex; align-items: center; gap: 14px; padding: 13px 4px;
  border-bottom: 1px solid var(--line); color: inherit; text-decoration: none;
}
.row:last-child { border-bottom: 0; }
.row:hover { background: var(--surface-3); }
.row .ti { flex: 1 1 auto; min-width: 0; font-size: 14.5px; color: var(--ink); font-weight: 400; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
.row .ti:hover { color: var(--brand); }
.row .tm { flex: 0 0 auto; font-size: 12.5px; color: var(--muted); white-space: nowrap; }
.row .tc { flex: 0 0 auto; font-size: 12.5px; color: var(--dim); white-space: nowrap; }
.row .actions { flex: 0 0 auto; display: flex; gap: 6px; align-items: center; }
.row .actions form { margin: 0; display: inline; }
@media (max-width: 640px) {
  .row { flex-wrap: wrap; }
  .row .ti { flex: 1 1 100%; white-space: normal; }
}

/* ---- 表单 ---- */
.field { margin: 12px 0; }
.field > label { display: block; font-size: 13px; color: var(--ink-2); margin-bottom: 6px; font-weight: 400; }
.inp, .tar, .field select {
  width: 100%; box-sizing: border-box; background: var(--bg-3); color: var(--ink);
  border: 1px solid var(--line-2); border-radius: 10px; padding: 10px 12px; font-size: 14px;
  font-family: inherit; transition: border-color .15s, box-shadow .15s;
}
.inp:focus, .tar:focus, .field select:focus { outline: none; border-color: var(--brand); box-shadow: 0 0 0 3px var(--grad-soft); }
.tar { min-height: 120px; resize: vertical; line-height: 1.6; }
.actions { display: flex; gap: 10px; align-items: center; flex-wrap: wrap; margin-top: 14px; }
.btn--danger { background: linear-gradient(100deg,#e0453a,#c22e24); color: #fff; border: 0; }
.btn--danger:hover { filter: brightness(1.06); }
.captcha-row { display: flex; align-items: center; gap: 10px; }
.captcha-row img { height: 42px; border: 1px solid var(--line); border-radius: 8px; cursor: pointer; }

/* ---- 提示条 ---- */
.flash { background: var(--grad-soft); border: 1px solid var(--line-2); color: var(--ink); padding: 10px 14px; border-radius: 10px; margin-bottom: 14px; font-size: 13.5px; }
.flash--warn { background: rgba(224,69,58,.1); border-color: rgba(224,69,58,.3); }

/* ---- 帖子 / 回复 ---- */
.post { background: var(--surface); border: 1px solid var(--line); border-radius: 14px; padding: 16px 18px; margin-bottom: 14px; box-shadow: var(--shadow-soft); }
.post .meta { font-size: 12.5px; color: var(--muted); margin-bottom: 8px; }
.post .body { font-size: 14.5px; line-height: 1.7; color: var(--ink); word-break: break-word; }

/* ---- 经典版式（Discuz 式）：面包屑 + 工具条 + 左作者卡 / 右正文楼层 ---- */
.bbs-crumb {
  display: flex; align-items: center; flex-wrap: wrap; gap: 8px;
  font-size: 13px; color: var(--muted); margin: 0 0 12px;
}
.bbs-crumb a { color: var(--ink-2); text-decoration: none; }
.bbs-crumb a:hover { color: var(--brand); }
.bbs-crumb .sep { color: var(--dim); }
.bbs-crumb .cur { color: var(--ink); }
/* .bbs-tools / .hd__count 随主题页标题区下线、.bbs-crumb__stat 随「统计移入楼层头」下线
   （均为 2026-10-16）——三个类都已无引用 */

/* ---- 顶栏：不自带挤压档，直接沿用主站 pulse.css 的 ----
   2026-10-16 页头右侧换成主站那套 CTA 之后，论坛页头与主站页头**同构同内容**
   （同一份 nav_menus、同一个 --maxw、同一组按钮、同样不显示「问一问」），
   主站的 861~1400 / 861~1120 两档压缩直接适用。
   论坛原先自己写的那三档（821~1400/1180/1080）比主站更宽松，在 1440 与 900 两档下
   会把内容顶出容器（实测总宽 1214 > 容器 1140）。
   这里只保留两条硬保证：链接/按钮不折行、CTA 不参与收缩。 */
.nav__links { flex-wrap: nowrap; }
.nav__links .nav__link, .nav__item > .nav__link { white-space: nowrap; }
.nav__cta .btn, .nav__ask { white-space: nowrap; }
/* CTA 不参与收缩只在桌面档生效：窄屏（≤860px）导航进汉堡，主轴空间全给 brand + CTA，
   这里若也 flex:none，CTA 会把整个页头撑出视口（实测 390 下「申请开通」被裁）。
   窄屏交回主站那套规则，两站表现保持一致。 */
@media (min-width: 861px) { .nav__cta { flex: none; } }

/* ---- 版块页工具行：只剩标签（Discuz forumdisplay 式，无大标题区）----
   2026-10-21：右侧「发新帖」按钮已删（与账号工具条的「发帖」重复，站长令），
   space-between 下单个 .bbs-tabs 自然占满整行，版式不变；
   `.bbslistbar > .btn` 规则保留——将来工具条里再放按钮时不至于挤压标签行。 */
.bbslistbar { display: flex; justify-content: space-between; align-items: center; gap: 12px; }
.bbslistbar .bbs-tabs { flex: 1 1 auto; }
.bbslistbar > .btn { flex: none; }

/* ---- 列表行：文字与边框留出呼吸距离 ---- */
.bbs .panel .row { padding-left: 16px; padding-right: 16px; }

/* ============================================================
   楼层版式（2026-10-17 六批定稿 —— 作者卡整体列 + 右内容列）
   ------------------------------------------------------------
   演进：手绘表格（四批前）→ 推翻真实单元格、自由 flex 行（五批）→
   **左栏作者卡是一个整体列**（六批批注：红框内的头像/主题·回帖/身份/积分/
   发消息/主页 是一个整体，其余元素向右移动、排列整齐）。
   每层 = 左卡 .fside（192px 整列）+ 右内容 .fcont（自由 flex 行）：
     右·行1 meta  查看 · 回复数 · 标题（占满余宽）· 楼层标（右端）
     右·行2 acts  作者名 · 编辑 · 删除 · 回复（回帖是 置顶回复·引用回复）
                 · 管理操作（主楼）· 发贴时间（右端不折行，+ #N 楼层标识）
     右·正文 fmain ＋ 楼层动作条 foot（有内容才渲染）
   主楼视觉突出 = **整个外边框改色**（.floorrow--main），正文不铺底纹。
   ============================================================ */
.floorrow {
  display: flex; align-items: stretch;
  background: var(--surface); border: 1px solid var(--line); border-radius: 14px;
  margin-bottom: 14px; box-shadow: var(--shadow-soft); overflow: hidden;
  /* 电梯直达 / 楼层号跳过来时，别让固定顶栏把这一层盖住 */
  scroll-margin-top: calc(var(--nav-h) + 12px);
}
.floorrow:target { border-color: var(--brand); box-shadow: 0 0 0 3px var(--grad-soft); }
/* 主楼与回帖一眼区分（2026-10-17 五批批注「只把整个外边框改色即可」） */
.floorrow--main { border-color: var(--brand); }

/* ---- 左栏作者卡 = 一个整体（2026-10-17 六批批注：红框内的头像/主题·回帖/身份/积分/
   发消息/主页 是一个整体，其余元素向右移动、排列整齐）----
   .fside 整列贴左，.fcont 从它右侧起排 —— 右侧各行的左缘天然对齐。 */
.fside {
  flex: 0 0 192px; min-width: 0; display: flex; flex-direction: column;
  background: var(--surface-3); border-right: 1px solid var(--line);
}
.fcard__ava {
  display: flex; align-items: flex-start; justify-content: center; padding: 16px 14px;
  border-bottom: 1px solid var(--line);
}
/* 头像贴顶 + sticky：长帖往下滚的时候头像还留在视野里 */
.fcard__ava > a { position: sticky; top: calc(var(--nav-h) + 16px); }
.fcard__ava img { border-radius: 12px; }
.fcard__stats {
  margin: 0; display: grid; grid-template-columns: 1fr 1fr;
  border-bottom: 1px solid var(--line);
}
.fcard__stats > div { display: flex; align-items: baseline; justify-content: center; gap: 4px; padding: 7px 4px; }
.fcard__stats > div:first-child { border-right: 1px solid var(--line); }
.fcard__stats dt { margin: 0; font-size: 11.5px; color: var(--muted); }
.fcard__stats dd { margin: 0; font-size: 13px; font-weight: 400; color: var(--ink); }
.fcard__row {
  display: flex; align-items: center; gap: 8px; padding: 7px 12px; font-size: 12px;
  border-bottom: 1px solid var(--line);
}
.fcard__k { flex: none; color: var(--muted); }
.fcard__v { color: var(--ink); min-width: 0; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
/* 卡片底部的操作区（发消息 / 主页）：贴着卡片底缘，跟卡片是一个整体 */
.fside__ops { margin-top: auto; display: flex; gap: 8px; justify-content: center; padding: 10px 12px; }

/* ---- 右列：标题行 / 作者行 / 正文 / 楼层动作条 ---- */
.fcont { flex: 1 1 auto; min-width: 0; display: flex; flex-direction: column; }

/* 楼层行：一条 flex 流。放不下才换行（窄屏），桌面上永远一行。 */
.tg-row {
  display: flex; align-items: center; flex-wrap: wrap; gap: 6px 12px;
  padding: 9px 14px; border-bottom: 1px solid var(--line);
  background: var(--surface); font-size: 12.5px; color: var(--muted);
}
.tg-row > * { display: flex; align-items: center; gap: 8px; min-width: 0; }
/* 右列楼层动作条：有内容才渲染（置顶徽标/举报/已关闭），贴着右列底缘 */
.tg-row--foot { border-bottom: 0; margin-top: auto; }

/* 行1：统计 + 标题 + 楼层标。标题占满余宽，把「楼主」推到右端 */
.tg-views, .tg-replies { flex: none; white-space: nowrap; }
.tg-title {
  flex: 1 1 auto; margin: 0; padding: 0; font-size: 17px; font-weight: 400;
  line-height: 1.45; letter-spacing: 0; color: var(--ink); word-break: break-word;
}
.tg-hide { margin-left: auto; }
.tg-hide .tg-floor {
  font-size: 12px; color: var(--dim); letter-spacing: .02em;
  text-decoration: none; white-space: nowrap;
}
.tg-hide .tg-floor:hover { color: var(--brand); }

/* 行2：操作按钮 · 管理操作 · 时间（右端，**不换行**——
   2026-10-17 五批批注「发贴时间不要换行」「楼层标识与时间在一行显示」。
   七批起作者名挪进左卡（.fcard__name），这行只剩操作与时间。 */
.tg-mods { gap: 10px; }
.tg-time { margin-left: auto; white-space: nowrap; text-align: right; }
/* 楼层标识（#2 沙发）：跟在时间右边、同一行（2026-10-17 四批），仍是锚点链接 */
.tg-floortag {
  font-size: 12px; color: var(--dim); letter-spacing: .02em;
  text-decoration: none; white-space: nowrap; margin-left: 4px;
}
.tg-floortag:hover { color: var(--brand); }
.tg-floortag .floor { margin-left: 3px; }

/* 标题补充：五批起标题是行1里的 flex 项（基础样式见上行1的 .tg-title），这里只补字号档 */
.tg-badges { margin-left: 6px; font-size: 11.5px; font-weight: 400; white-space: nowrap; }
.tg-badges .best { font-size: 11.5px; padding: 0 6px; }

/* 格内小控件：编辑 / 删除 / 引用 / 发消息 / 主页… */
.tg-op {
  display: inline-flex; align-items: center; gap: 4px; height: 26px; padding: 0 9px;
  border: 1px solid var(--line-2); border-radius: 8px; cursor: pointer;
  background: var(--surface); color: var(--ink-2); font-family: inherit; font-size: 12.5px;
  text-decoration: none; white-space: nowrap; transition: border-color .18s, color .18s;
}
.tg-op:hover { border-color: var(--brand); color: var(--brand); }
.tg-op--primary { background: var(--brand); border-color: var(--brand); color: #fff; }
.tg-op--primary:hover { color: #fff; }
.tg-op--danger:hover { border-color: #e05252; color: #e05252; }
/* 不可用的 .tg-op —— 「发消息」对自己 / 未登录时用它占位：
   按钮始终在，只是点不动，这样每层第 6 行长得一样，网格不缺角。 */
.tg-op.is-off { color: var(--dim); border-color: var(--line); cursor: not-allowed; background: var(--bg-3); }
.tg-op.is-off:hover { color: var(--dim); border-color: var(--line); }
.tg-opform { margin: 0; display: inline-flex; }
/* 「仅自己可见」状态标 —— 不公开是权限不是折叠，得让作者看得见当前状态 */
.tg-priv {
  font-size: 11.5px; color: var(--brand); padding: 1px 8px; white-space: nowrap;
  border: 1px solid var(--brand); border-radius: 999px;
}

/* 作者名（七批起在左卡里，.fcard__name）：可点名字，居中显示（三批批注）。
   二批批注「只显示作者名称，不要 UID」——UID 小字（.tg-uidn）已删。 */
.fcard__name {
  display: flex; justify-content: center; padding: 8px 12px;
  border-bottom: 1px solid var(--line); font-size: 13px;
}
.fcard__name .tg-name { white-space: nowrap; overflow: hidden; text-overflow: ellipsis; }
/* 卡片顶部的「查看 / 回复数」（七批批注：统计也是卡片整体的一部分，别移出红框） */
.fcard__count { display: flex; border-bottom: 1px solid var(--line); }
.fcard__count > span {
  flex: 1; display: flex; align-items: baseline; justify-content: center; gap: 4px;
  padding: 7px 4px; font-size: 12px; color: var(--muted);
}
.fcard__count > span:first-child { border-right: 1px solid var(--line); }
/* 「楼主」标记挂在标题行右端（2026-10-17 站长批注：从第 3 行作者格后移到这） */
.tg-hide .tg-floor {
  font-size: 12px; color: var(--dim); letter-spacing: .02em;
  text-decoration: none; white-space: nowrap;
}
.tg-hide .tg-floor:hover { color: var(--brand); }
/* 楼层标识（#2 沙发）样式并入上行2的 .tg-floortag 定义（见上）；
   主楼视觉突出 2026-10-17 五批定稿 = 整个外边框改色（.floorrow--main），
   四批的点阵底纹/内描边按批注撤销 —— 正文区不再特殊铺底。 */

/* 搜索 + 电梯直达：2026-10-17 三批上移到顶栏（.bbs-topsearch），搜索框做短 */
.bbs-topsearch { display: flex; align-items: center; gap: 8px; margin-right: 4px; }
.bbs-topsearch .tg-search { flex: 0 1 170px; width: 170px; min-width: 0; }
.tg-search { display: flex; margin: 0; }
.tg-search__inp {
  width: 100%; height: 28px; padding: 0 10px; border-radius: 8px;
  border: 1px solid var(--line-2); background: var(--bg-3); color: var(--ink);
  font-family: inherit; font-size: 12.5px;
}
.tg-search__inp:focus { outline: none; border-color: var(--brand); box-shadow: 0 0 0 3px var(--grad-soft); }
.fop { display: inline-flex; align-items: center; gap: 6px; margin: 0; font-size: 12.5px; color: var(--muted); }
.fop--copy, .fop__go {
  display: inline-flex; align-items: center; gap: 5px; height: 28px; padding: 0 10px;
  border: 1px solid var(--line-2); border-radius: 8px; cursor: pointer;
  background: var(--surface); color: var(--ink-2); font-family: inherit; font-size: 12.5px;
  transition: border-color .18s, color .18s;
}
.fop--copy:hover, .fop__go:hover { border-color: var(--brand); color: var(--brand); }
.fop--copy svg { width: 13px; height: 13px; fill: none; stroke: currentColor; stroke-width: 1.7; stroke-linecap: round; }
.fop--copy.is-ok { border-color: var(--brand); color: var(--brand); }
.fop__lab { display: inline-flex; align-items: center; gap: 6px; white-space: nowrap; }
.fop__floor {
  width: 62px; height: 28px; padding: 0 8px; border-radius: 8px;
  border: 1px solid var(--line-2); background: var(--surface); color: var(--ink);
  font-family: inherit; font-size: 12.5px;
}
.fop__floor:focus { outline: none; border-color: var(--brand); box-shadow: 0 0 0 3px var(--grad-soft); }
/* 数字框的上下箭头要吃掉 62px 里一半宽度，去掉；min/max 校验与键入都不受影响 */
.fop__floor::-webkit-outer-spin-button, .fop__floor::-webkit-inner-spin-button { -webkit-appearance: none; margin: 0; }
.fop__floor { appearance: textfield; -moz-appearance: textfield; }
/* 有 JS 时填完即跳，Go 收起来；脚本没加载 / 挂了，它就是唯一提交入口 —— 电梯始终能用 */
.fop--goto.is-js .fop__go { display: none; }

/* 正文区：右列里 flex:1 撑开，跟在作者行后面；是末元素时不画底线（免得与容器边框叠双线） */
.fmain {
  flex: 1 1 auto; min-width: 0; padding: 16px 18px;
  display: flex; flex-direction: column;
  border-bottom: 1px solid var(--line);
}
.fmain:last-child { border-bottom: 0; }
.fmain .body { font-size: 14.5px; line-height: 1.7; color: var(--ink); word-break: break-word; }

/* ---- 中档（≤900px）：行内 flex 自然换行，无需重排 ----
   五批起楼层不再是定宽网格，行本身就是 flex 流，窄屏放不下自动折行；
   只把左右内边距收一点，给内容让位。 */
@media (max-width: 900px) {
  .tg-row { padding-left: 12px; padding-right: 12px; }
}

/* ---- 窄屏（≤640px）：整层改竖排——作者卡横排置顶，内容在下 ---- */
@media (max-width: 640px) {
  .floorrow { flex-direction: column; }
  .fside { flex: 1 1 auto; flex-direction: row; flex-wrap: wrap; align-items: center;
    border-right: 0; border-bottom: 1px solid var(--line); }
  .fcard__ava { padding: 10px 12px; border-bottom: 0; }
  .fcard__ava > a { position: static; }
  .fcard__ava img { width: 56px; height: 56px; }
  .fcard__stats { border-bottom: 0; }
  .fcard__row { border-bottom: 0; }
  .fside__ops { margin: 0 0 0 auto; padding: 0 12px; }
  .fmain { border-bottom: 0; }
  .fop__lab { flex: 0 1 auto; }
}

/* 顶栏搜索：窄屏（≤900px）不藏（抽屉里没有搜索入口），改成自己占一行铺开 */
@media (max-width: 900px) {
  .bbs-userbar { flex-wrap: wrap; }
  .bbs-topsearch { flex: 1 1 100%; order: 3; margin-right: 0; }
  .bbs-topsearch .tg-search { flex: 1 1 auto; width: auto; }
  .bbs-topsearch .fop__lab { flex: 0 1 auto; }
}

/* 徽标 */
.pin { color: var(--brand); font-weight: 400; }
.closed { color: var(--dim); }
.best {
  color: #b8860b; font-weight: 400; font-size: 12px; padding: 1px 7px;
  border: 1px solid currentColor; border-radius: 999px; display: inline-block; line-height: 1.5;
}
.st-ok { color: #1f9d5b; font-weight: 400; }
.st-off { color: var(--dim); }
.bbs-edit { font-size: 12.5px; color: var(--brand); margin-left: 4px; text-decoration: none; }
.bbs-edit:hover { text-decoration: underline; }

/* ---- 分页（在 pulse.css .pager 基础上补色） ---- */
.pager { display: flex; gap: 6px; flex-wrap: wrap; margin: 16px 0; }
.pager a, .pager .cur {
  min-width: 34px; text-align: center; padding: 6px 10px; border-radius: 8px; font-size: 13px;
  border: 1px solid var(--line); color: var(--ink-2); text-decoration: none; background: var(--surface);
}
.pager a:hover { border-color: var(--brand); color: var(--brand); }
.pager .cur { background: var(--brand); border-color: var(--brand); color: #fff; }

/* ---- 页脚 ---- */
.bbs-foot { padding: 20px 0; font-size: 12.5px; color: var(--muted); text-align: center; }
.bbs-foot a { color: var(--brand); }

/* =============================================================================
   富文本正文渲染（.body 内的 HTML）
   ========================================================================== */
.body h2, .body h3, .body h4 { color: var(--ink); line-height: 1.4; margin: 18px 0 8px; }
.body h2 { font-size: 19px; }
.body h3 { font-size: 16.5px; }
.body h4 { font-size: 15px; }
.body p { margin: 0 0 10px; }
.body a { color: var(--brand); text-decoration: underline; text-underline-offset: 2px; }
.body ul, .body ol { margin: 0 0 12px; padding-left: 22px; }
.body li { margin: 4px 0; }
.body blockquote { margin: 12px 0; padding: 8px 14px; border-left: 3px solid var(--brand); background: var(--surface-3); border-radius: 0 8px 8px 0; color: var(--ink-2); }
.body pre { background: var(--bg-2); border: 1px solid var(--line); border-radius: 10px; padding: 12px 14px; overflow: auto; font-size: 13px; line-height: 1.55; }
.body code { font-family: ui-monospace, SFMono-Regular, Menlo, Consolas, monospace; font-size: .92em; background: var(--surface-3); padding: 1px 5px; border-radius: 5px; }
.body pre code { background: none; padding: 0; }
.body img { max-width: 100%; height: auto; border-radius: 10px; margin: 8px 0; }
.body figure { margin: 12px 0; }
.body figcaption { font-size: 12.5px; color: var(--muted); text-align: center; margin-top: 4px; }
.body table { border-collapse: collapse; width: 100%; margin: 12px 0; font-size: 13.5px; }
.body th, .body td { border: 1px solid var(--line); padding: 7px 10px; }
.body th { background: var(--surface-3); }
.body hr { border: 0; border-top: 1px solid var(--line); margin: 16px 0; }
.body video { max-width: 100%; border-radius: 10px; }

/* =============================================================================
   富文本编辑器（editor.js 配套）
   ========================================================================== */
.ed { border: 1px solid var(--line-2); border-radius: 12px; overflow: hidden; background: var(--bg-3); }
.ed:focus-within { border-color: var(--brand); box-shadow: 0 0 0 3px var(--grad-soft); }
.ed__bar { display: flex; flex-wrap: wrap; gap: 2px; padding: 6px; border-bottom: 1px solid var(--line); background: var(--surface); }
.ed__btn {
  min-width: 32px; height: 30px; padding: 0 7px; border: 0; border-radius: 7px; cursor: pointer;
  background: transparent; color: var(--ink-2); font-size: 13px; line-height: 1;
  display: inline-flex; align-items: center; justify-content: center;
}
.ed__btn:hover { background: var(--surface-3); color: var(--brand); }
.ed__btn.is-on { background: var(--grad-soft); color: var(--brand); }
.ed__sep { width: 1px; margin: 4px 3px; background: var(--line); align-self: stretch; }
.ed__area {
  min-height: 180px; max-height: 60vh; overflow-y: auto; padding: 14px 16px; outline: none;
  font-size: 14.5px; line-height: 1.7; color: var(--ink);
}
.ed__area:empty::before { content: attr(data-ph); color: var(--dim); }
.ed__area img { max-width: 100%; height: auto; border-radius: 8px; }
.ed__src {
  display: none; width: 100%; box-sizing: border-box; border: 0; border-top: 1px solid var(--line);
  padding: 14px 16px; min-height: 180px; font-family: ui-monospace, Menlo, Consolas, monospace;
  font-size: 13px; line-height: 1.55; background: var(--bg-3); color: var(--ink); resize: vertical;
}
.ed.is-src .ed__area { display: none; }
.ed.is-src .ed__src { display: block; }
.ed__hint { font-size: 12px; color: var(--muted); padding: 6px 16px 10px; }
.ed__hint.is-busy { color: var(--brand); }

/* =============================================================================
   列表缩略图（版块 / 首页 主题行）
   ========================================================================== */
.row__thumb {
  flex: none; width: 54px; height: 40px; object-fit: cover; border-radius: 8px;
  border: 1px solid var(--line); background: var(--surface-3);
}
.row--withthumb .ti { flex: 1 1 auto; }

/* =============================================================================
   管理后台
   ========================================================================== */
.admnav {
  display: flex; flex-wrap: wrap; gap: 4px; margin: 0 0 16px; padding: 6px;
  background: var(--surface); border: 1px solid var(--line); border-radius: 14px; box-shadow: var(--shadow-soft);
}
.admnav__i {
  display: inline-flex; align-items: center; gap: 5px; padding: 7px 13px; border-radius: 10px;
  font-size: 13px; color: var(--ink-2); text-decoration: none; white-space: nowrap;
}
.admnav__i:hover { background: var(--surface-3); color: var(--ink); }
.admnav__i.is-on { background: var(--grad-soft); color: var(--brand); font-weight: 400; }
.admnav__i i {
  font-style: normal; font-size: 11px; min-width: 17px; height: 17px; padding: 0 4px;
  display: inline-flex; align-items: center; justify-content: center;
  background: var(--brand); color: #fff; border-radius: 999px;
}

.statcards { display: grid; grid-template-columns: repeat(auto-fit, minmax(148px, 1fr)); gap: 12px; margin-bottom: 18px; }
@media (max-width: 720px) { .statcards { grid-template-columns: repeat(2, 1fr); } }
.statcard {
  display: flex; flex-direction: column; gap: 2px; padding: 14px 16px; text-decoration: none;
  background: var(--surface); border: 1px solid var(--line); border-radius: 14px; box-shadow: var(--shadow-soft);
}
.statcard:hover { border-color: var(--brand); }
.statcard__t { font-size: 12.5px; color: var(--muted); }
/* 统计数字原先 24px/700，比正文帖子标题还大——按「字号 ≤17px / 字重 ≤600」总闸压回同档 */
.statcard__v { font-size: 17px; font-weight: 400; color: var(--ink); line-height: 1.3; }
.statcard__s { font-size: 12px; color: var(--dim); }

/* 占用进度条 */
.meter { height: 9px; border-radius: 999px; background: var(--surface-3); overflow: hidden; margin: 4px 0 8px; }
.meter i { display: block; height: 100%; background: var(--grad); border-radius: 999px; }
.meter.is-warn i { background: linear-gradient(90deg, #e8a33d, #e0592f); }
.meter.is-full i { background: linear-gradient(90deg, #e0453a, #b3241b); }

/* 筛选 / 批量条 */
.adm-filter, .adm-bulkbar {
  display: flex; flex-wrap: wrap; gap: 8px; align-items: center;
  padding: 10px 0; border-bottom: 1px solid var(--line);
}
.adm-bulkbar { border-bottom: 0; border-top: 1px solid var(--line); margin-top: 10px; }
.adm-filter .inp, .adm-bulkbar .inp { width: auto; min-width: 116px; padding: 7px 10px; font-size: 13px; }
.adm-filter .inp[name=q] { min-width: 180px; }

/* 后台表格 */
.adm-table { width: 100%; border-collapse: collapse; font-size: 13px; }
.adm-table th {
  text-align: left; font-weight: 400; font-size: 12px; color: var(--muted);
  padding: 8px 8px; border-bottom: 1px solid var(--line-2); white-space: nowrap;
}
.adm-table td { padding: 9px 8px; border-bottom: 1px solid var(--line); vertical-align: middle; }
.adm-table tr:last-child td { border-bottom: 0; }
.adm-table .tit { color: var(--ink); font-size: 13.5px; font-weight: 400; }
.adm-table .sub { color: var(--muted); font-size: 12px; margin-top: 2px; }
.adm-table .sub a { color: var(--brand); text-decoration: none; }
.adm-table .nowrap { white-space: nowrap; }
.adm-ops { display: flex; flex-wrap: wrap; gap: 5px; align-items: center; }
.adm-table--boards td { vertical-align: top; }

.adm-inline { display: inline-flex; gap: 5px; align-items: center; flex-wrap: wrap; margin: 0; }
.adm-reset .inp { max-width: 140px; }
.adm-form { display: grid; grid-template-columns: repeat(auto-fit, minmax(240px, 1fr)); gap: 8px 18px; align-items: center; }
.adm-form label { display: flex; align-items: center; gap: 8px; font-size: 13px; color: var(--ink-2); white-space: nowrap; }
.adm-form label .inp { flex: 1 1 auto; min-width: 90px; padding: 7px 10px; }
.adm-form .muted { grid-column: 1 / -1; }

.inp--sm { padding: 6px 9px !important; font-size: 12.5px !important; width: auto !important; }
.inp--num { max-width: 84px; }
.inp--wide { min-width: 200px; }
.chk { display: inline-flex; align-items: center; gap: 5px; font-size: 12.5px; color: var(--ink-2); white-space: nowrap; }

/* 状态标签 */
.st-wait { color: #c98a12; font-weight: 400; }
.st-ok { color: #1f9d5b; font-weight: 400; }
.bbs-uco { display: inline-flex; align-items: center; gap: 7px; color: var(--ink); text-decoration: none; }

/* 媒体卡片网格 */
.mcards { display: grid; grid-template-columns: repeat(auto-fill, minmax(150px, 1fr)); gap: 12px; padding: 12px 0; }
.mcard {
  position: relative; display: flex; flex-direction: column; gap: 6px; padding: 8px;
  background: var(--surface-3); border: 1px solid var(--line); border-radius: 12px;
}
.mcard__pick { position: absolute; top: 10px; left: 10px; z-index: 2; }
.mcard__pick input { width: 15px; height: 15px; }
.mcard__img { width: 100%; height: 96px; object-fit: cover; border-radius: 8px; background: var(--bg-2); }
.mcard__vid {
  width: 100%; height: 96px; border-radius: 8px; display: flex; align-items: center; justify-content: center;
  background: var(--grad-soft); color: var(--brand); font-size: 13px; font-weight: 400;
}
.mcard__meta { font-size: 11.5px; color: var(--muted); display: flex; flex-direction: column; gap: 2px; }
.mcard__t { font-size: 12px; color: var(--ink-2); }
.mcard form { display: flex; gap: 5px; }
.pager .gap { color: var(--dim); padding: 6px 4px; }

/* ---- 社区治理（举报 / 禁言）新增样式 ---- */
.adm-form label.full { grid-column: 1 / -1; align-items: flex-start; }
.adm-form label.full textarea.inp { padding: 8px 10px; min-height: 64px; resize: vertical; line-height: 1.6; }
.bbs-report { display: inline-block; margin-left: 6px; }
.bbs-report > summary { cursor: pointer; color: var(--muted); font-size: 12.5px; list-style: none; }
.bbs-report > summary::-webkit-details-marker { display: none; }
.bbs-report > summary:hover { color: var(--brand); }
.bbs-report > form { display: flex; gap: 6px; align-items: center; margin-top: 6px; }
.bbs-report .inp { max-width: 220px; padding: 5px 9px; }
.adm-reset .inp, .adm-ops .inp--sm { max-width: 158px; }

/* ---- 用户组标签 / 批量操作 / 趋势图（2026-10-15） ---- */
.gtag {
  display: inline-block; padding: 1px 8px; border-radius: 999px; font-size: 11.5px; line-height: 1.7;
  color: var(--gtag, var(--brand)); border: 1px solid currentColor; background: rgba(127, 127, 127, .10);
  white-space: nowrap;
}
.gtag--type { color: var(--gtag, var(--ink-2)); }
/* 作者卡「身份」行的用户组名：纯文字，不做成按钮（2026-10-17 站长批注） */
.gtag--plain { border: 0; background: none; padding: 0; font-size: 12.5px; color: var(--ink-2); }
.tablewrap { overflow-x: auto; -webkit-overflow-scrolling: touch; }
.tablewrap .adm-table { min-width: 760px; }
.adm-bulkbar { flex-wrap: wrap; }
.adm-grp { display: flex; flex-wrap: wrap; gap: 6px; align-items: center; }
.adm-grp__sel { max-width: 208px; }
.adm-grp .inp--num { max-width: 92px; }
.adm-color { padding: 2px; width: 44px; min-width: 44px; height: 30px; }
.adm-cols { display: grid; grid-template-columns: 1fr 1fr; gap: 18px; }
@media (max-width: 900px) { .adm-cols { grid-template-columns: 1fr; } }
.trend { width: 100%; height: auto; display: block; }
.trend__grid { stroke: var(--line); stroke-width: 1; }
.trend__axis { fill: var(--muted); font-size: 10px; }
.trend__line { fill: none; stroke: var(--c, var(--brand)); stroke-width: 2; stroke-linejoin: round; }
.trend__dot { fill: var(--c, var(--brand)); }
.trend__legend { display: flex; gap: 16px; flex-wrap: wrap; font-size: 12.5px; color: var(--muted); margin-top: 6px; }
.trend__legend i { display: inline-block; width: 9px; height: 9px; border-radius: 2px; background: var(--c); margin-right: 5px; }
.rank { display: flex; flex-direction: column; }
.rank > .row { display: flex; align-items: center; gap: 10px; padding: 7px 0; border-bottom: 1px solid var(--line); }
.rank > .row:last-child { border-bottom: 0; }
.rank__n { width: 20px; color: var(--dim); font-size: 12px; text-align: center; }
.rank__t { flex: 1; min-width: 0; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; color: var(--ink); font-size: 13px; }
.rank__bar { width: 96px; height: 6px; border-radius: 3px; background: var(--surface-3); overflow: hidden; }
.rank__bar i { display: block; height: 100%; background: var(--grad); }
.rank__v { width: 46px; text-align: right; font-size: 12.5px; color: var(--muted); }
.bbs-tabs--type { border-bottom: 0; padding-top: 8px; }
.bbs-tabs--type .bbs-tab { font-size: 12.5px; }
.bbs-tabs--type + .panel { margin-top: 0; }

/* =============================================================================
   排版总闸兜底 —— 全站不使用加粗（2026-10-17 站长指令）
   论坛 style.css 夹在 pulse.css 与 fx/ui-flat.css 之间（见 bbs/lib.php 资源顺序），
   压不住「后面加载的表」和「富文本编辑器写进正文的行内 style="font-weight:700"」，
   所以必须 !important 收死。详见 pulse.css 同名段落的说明。
   ========================================================================== */
*, *::before, *::after { font-weight: 400 !important; }
