/* 伊甸 · EDEN —— 西式神秘学设计系统
   两主题：Night = Midnight Cathedral（默认）/ Day = Parchment
   母题：雕版印刷、教堂铅字、炼金符号印记、细双线框、小型大写字母 */
:root {
  --ink-900: #0b0f16;
  --ink-800: #111823;
  --ink-700: #182231;
  --ink-600: #202c3d;
  --line: #24303f;
  --line-faint: #1a2432;
  --line-strong: #35485f;
  --gold-500: #c6a15b;
  --gold-300: #e2ca96;
  --gold-dim: rgba(198, 161, 91, .13);
  /* --gold-500 只用于描边与填充；金色文字一律走 --gold-ink，浅色主题下自动升到更深的 gold-300（羊皮纸上 4.0:1 → 5.8:1） */
  --gold-ink: var(--gold-500);
  --text-1: #ece6d8;
  --text-2: #a9b3c2;
  --text-3: #848ea0;
  --astral: #7d9fd8;
  --oriental: #4fa391;
  --verify: #d08a3c;
  --danger: #b4484f;
  --oxblood: #8e2c39;
  --neutral: #8b95a8;
  --bg-hover: rgba(236, 230, 216, .045);
  --shadow: 0 12px 34px rgba(0, 0, 0, .45);
  --r-card: 2px;
  --r-ctl: 2px;
  /* 字体栈：拉丁优先，中文必须显式指定，绝不能落到 SimSun（宋体小字发虚、无真粗体）
     本机实测：Cormorant/EB Garamond 未安装；Palatino Linotype / Book Antiqua / Century Schoolbook /
     Cambria / Constantia / Perpetua / Bodoni MT / Segoe UI / Cascadia Mono / Consolas /
     Noto Sans SC / Noto Serif SC / Microsoft YaHei 可用 */
  --serif: "Cormorant Garamond", "EB Garamond", "Palatino Linotype", "Book Antiqua", Palatino, "Century Schoolbook", Georgia, "Times New Roman", "Noto Serif SC", "Source Han Serif SC", "Microsoft YaHei", serif;
  --sans: "Segoe UI", "Helvetica Neue", "Noto Sans SC", "PingFang SC", "Hiragino Sans GB", "Microsoft YaHei", system-ui, sans-serif;
  --mono: "Cascadia Mono", Consolas, "Segoe UI Mono", ui-monospace, "Noto Sans SC", "Microsoft YaHei", monospace;
  /* 标签字号：含中文的标签统一走这组，最小 11.5px（中文低于此不可读） */
  --f-lbl: 600 11.5px/1.45 var(--sans);
  --f-latin: 400 11.5px/1.4 var(--serif);
}
[data-theme="light"] {
  --ink-900: #efe8d8;
  --ink-800: #faf5ea;
  --ink-700: #f2ead9;
  --ink-600: #e6dcc6;
  --line: #d3c7ac;
  --line-faint: #e2d8c2;
  --line-strong: #b3a482;
  --gold-500: #8a6a2f;
  --gold-300: #6d5222;
  --gold-dim: rgba(138, 106, 47, .12);
  --gold-ink: var(--gold-300);
  --text-1: #23262c;
  --text-2: #4d525c;
  --text-3: #565b6b;
  --astral: #3c5c96;
  --oriental: #2c7362;
  --verify: #995a15;
  --danger: #98303a;
  --oxblood: #7d232e;
  --neutral: #6d7280;
  --bg-hover: rgba(35, 38, 44, .05);
  --shadow: 0 8px 22px rgba(120, 100, 60, .16);
}
* { box-sizing: border-box; }
/* 只锁 html，body 用 min-height：顶栏是 body 的直接子元素，position:sticky 的包含块
   就是 body 本身。若把 body 高度也钉成 100%（= 一屏高），滚动过一屏后粘连区间就用尽，
   整条顶栏连同品牌印记会直接滚出视野、再不回来——rail 的包含块是 .shell，所以它不受影响。 */
html { height: 100%; scroll-padding-top: 58px; }
/* scroll-padding-top = 顶栏高度：顶栏常驻后，scrollIntoView({block:"start"}) / 地址栏锚点
   会把目标顶到视口最顶、正好被 58px 的顶栏吃掉（左栏「版块组」跳转、首页组索引都走这条路径）。
   给滚动容器（documentElement）预留顶栏高度，落点就停在顶栏下沿。 */
body { min-height: 100%; }
/* 锁定字号：本页是桌面 3 栏布局，只借用 viewport 的窄屏断点，
   不要让 Chromium 把重排（每次点击都会整块重建 DOM）当成「移动页」去重新估算字号，
   否则已写死的 px 字号会在交互后忽大忽小 */
html { -webkit-text-size-adjust: 100%; text-size-adjust: 100%; }
body {
  margin: 0;
  background: var(--ink-900);
  color: var(--text-1);
  font: 15px/1.75 var(--sans);
  letter-spacing: normal;
  font-variant-numeric: lining-nums;
  -webkit-font-smoothing: antialiased;
  text-rendering: optimizeLegibility;
}
/* 雕版纸纹 + 暗角 */
body::before {
  content: ""; position: fixed; inset: 0; pointer-events: none; z-index: 0;
  background:
    radial-gradient(1100px 620px at 50% -12%, rgba(125, 159, 216, .10), transparent 62%),
    radial-gradient(900px 500px at 100% 100%, rgba(142, 44, 57, .08), transparent 60%),
    repeating-linear-gradient(135deg, rgba(236, 230, 216, .022) 0 1px, transparent 1px 7px);
}
[data-theme="light"] body::before {
  background:
    radial-gradient(1100px 620px at 50% -12%, rgba(125, 159, 216, .12), transparent 62%),
    radial-gradient(900px 500px at 100% 100%, rgba(142, 44, 57, .07), transparent 60%),
    repeating-linear-gradient(135deg, rgba(35, 38, 44, .022) 0 1px, transparent 1px 7px);
}
::selection { background: var(--gold-dim); }
a { color: inherit; text-decoration: none; }
button, input, textarea, select { font: inherit; color: inherit; }
button { cursor: pointer; background: none; border: none; }
:focus-visible { outline: 1px solid var(--gold-500); outline-offset: 2px; }
::-webkit-scrollbar { width: 11px; height: 11px; }
::-webkit-scrollbar-thumb { background: var(--ink-600); border: 3px solid transparent; background-clip: content-box; }
.mono { font-family: var(--mono); font-variant-numeric: lining-nums tabular-nums; }
.serif { font-family: var(--serif); }
.muted { color: var(--text-3); }
/* 内联 SVG 功能图标 */
.ico { display: block; flex: none; }
.navitem .ic, .tabbar .ic { display: inline-flex; align-items: center; justify-content: center; width: 16px; flex: none; }
.small { font-size: 12px; }
.hide { display: none !important; }
/* 标签体系：含中文的标签只加大写、不加字距（中文被 letter-spacing 拉散是"字体难受"的主因）；
   宽字距小型大写只留给纯拉丁元素（.latin / .tl / .code / .lb / .rn / kbd） */
.cap, .navgroup > .cap, .ctx-block > .cap {
  font: var(--f-lbl); letter-spacing: .06em; text-transform: uppercase; color: var(--text-3);
}
.latin { font: var(--f-latin); letter-spacing: .08em; text-transform: uppercase; color: var(--text-3); }

/* ---------- 顶栏 ---------- */
.topbar {
  position: sticky; top: 0; z-index: 30; height: 58px; display: flex; align-items: center; gap: 14px; padding: 0 18px;
  /* 实色、不用 backdrop-filter：模糊层挂在 position:sticky 的导航条上会触发 Chromium 的重绘缺陷，
     滚动时整条顶栏（品牌印记与图标）会一起消失。雕版风格本就是实色面 + 细双线，实色更贴合。 */
  background: var(--ink-900);
  border-bottom: 1px solid var(--line);
  box-shadow: 0 1px 0 var(--line-faint);
}
.brand { display: flex; align-items: center; gap: 10px; cursor: pointer; flex: none; }
.brand .glyph {
  width: 26px; height: 26px; color: var(--gold-ink); font: 400 20px/1 var(--serif);
  display: inline-flex; align-items: center; justify-content: center;
  border: 1px solid var(--gold-500); border-radius: 50%;
  box-shadow: inset 0 0 0 2px var(--ink-900), inset 0 0 0 3px var(--gold-dim);
}
.brand .name { font: 600 21px/1 var(--serif); letter-spacing: .26em; text-transform: uppercase; color: var(--gold-300); }
.brand .sub { font: var(--f-lbl); letter-spacing: .04em; text-transform: none; color: var(--text-3); border-left: 1px solid var(--line); padding-left: 10px; }
.searchbtn {
  flex: 0 1 560px; max-width: 560px; height: 32px; min-width: 0;
  display: flex; align-items: center; gap: 9px; padding: 0 11px;
  border: 1px solid var(--line); border-radius: 0; background: var(--ink-800);
  color: var(--text-3); font: 400 12.5px/1 var(--sans); letter-spacing: normal;
  white-space: nowrap; overflow: hidden; transition: border-color .15s;
}
.searchbtn:hover { border-color: var(--gold-500); color: var(--text-2); }
.searchbtn .q { min-width: 0; overflow: hidden; text-overflow: ellipsis; }
.searchbtn kbd { margin-left: auto; font: 11px/1 var(--mono); letter-spacing: .02em; border: 1px solid var(--line); border-radius: 0; padding: 4px 6px; flex: none; }
/* 搜索框居中：brand | 撑开 | 搜索 | 撑开 | 操作区，避免右侧出现大片空白 */
.topbar .spacer { flex: 1 1 0; min-width: 10px; }
.tb-actions { display: flex; align-items: center; gap: 8px; flex: none; }
.iconbtn {
  width: 32px; height: 32px; border: 1px solid transparent; color: var(--text-2);
  display: inline-flex; align-items: center; justify-content: center; font-size: 15px; position: relative;
}
.iconbtn:hover { border-color: var(--line-strong); color: var(--gold-300); }
.iconbtn .dot { position: absolute; top: 5px; right: 5px; width: 6px; height: 6px; background: var(--verify); border: 1px solid var(--ink-900); }
.me-chip { display: flex; align-items: center; gap: 8px; padding: 3px 10px 3px 3px; border: 1px solid var(--line); }
.me-chip:hover { border-color: var(--gold-500); }
/* 未登录时的「注册 / 登录」：没有头像，图标要离边框远一点；窄屏也不许把字藏起来
   （它是空坛首屏唯一的入口，见 features/chrome.js topbar()）。 */
.me-chip.anon { padding-left: 9px; }
.me-chip.anon .small { display: inline; }

/* ---------- 三栏骨架 ---------- */
.shell { position: relative; z-index: 1; display: grid; grid-template-columns: 216px minmax(0, 1fr) 284px; align-items: start; }
.rail-left { position: sticky; top: 58px; height: calc(100vh - 58px); overflow-y: auto; padding: 18px 12px 48px; border-right: 1px solid var(--line); }
.main { min-height: calc(100vh - 58px); padding: 26px 30px 90px; }
.rail-right { position: sticky; top: 58px; height: calc(100vh - 58px); overflow-y: auto; padding: 22px 18px 48px; border-left: 1px solid var(--line); }
.tabbar { display: none; }

/* ---------- 左栏 ---------- */
.navgroup { margin-bottom: 22px; }
.navgroup > .cap { padding: 0 10px 8px; display: flex; align-items: center; gap: 8px; }
.navgroup > .cap::after { content: ""; flex: 1; height: 1px; background: var(--line); }
.navitem {
  display: flex; align-items: center; gap: 10px; width: 100%; padding: 6px 10px;
  color: var(--text-2); font-size: 13.5px; text-align: left; border-left: 2px solid transparent;
}
.navitem:hover { background: var(--bg-hover); color: var(--text-1); }
.navitem.on { color: var(--gold-300); font-weight: 600; border-left-color: var(--gold-500); background: linear-gradient(90deg, var(--gold-dim), transparent 70%); }
.navitem .tick { width: 5px; height: 5px; border-radius: 50%; flex: none; }
.navitem .count { margin-left: auto; font: 11.5px/1 var(--mono); color: var(--text-3); }
.section-row { display: flex; align-items: baseline; gap: 8px; width: 100%; padding: 8px 10px 6px; color: var(--text-1); }
.section-row .rn { font: 600 12px/1 var(--serif); letter-spacing: .16em; color: var(--gold-ink); }
.section-row .sn { min-width: 0; overflow: hidden; white-space: nowrap; text-overflow: ellipsis; font: 600 14px/1.3 var(--serif); letter-spacing: .02em; }
.section-row .count { margin-left: auto; font: 11.5px/1 var(--mono); color: var(--text-3); }
.section-row:hover { background: var(--bg-hover); }

/* ---------- 通用块 ---------- */
.pagehead { display: flex; align-items: flex-start; gap: 16px; margin-bottom: 22px; padding-bottom: 16px; border-bottom: 1px solid var(--line); position: relative; }
.pagehead::after { content: "❦"; position: absolute; left: 0; bottom: -8px; padding: 0 6px; background: var(--ink-900); color: var(--gold-ink); font: 400 12px/1 var(--serif); }
.pagehead h1 { margin: 0 0 6px; font: 500 27px/1.25 var(--serif); letter-spacing: .01em; }
.pagehead .lede { color: var(--text-2); font-size: 13px; max-width: 62ch; }
.pagehead .actions { margin-left: auto; display: flex; gap: 8px; flex: none; align-items: center; }
.card { background: var(--ink-800); border: 1px solid var(--line); border-radius: var(--r-card); }
.card + .card { margin-top: 14px; }
/* 网格容器自己用 gap 拉间距，竖排卡片堆的 14px 顶距在这里会把第二格起整体下移，第一格就显得「大一圈」 */
.board-grid > .card, .topic-grid > .card, .shopgrid > .card { margin-top: 0; }
/* 双线雕版框 */
.engraved { position: relative; }
.engraved::after { content: ""; position: absolute; inset: 4px; border: 1px solid var(--line-faint); pointer-events: none; }
.btn {
  display: inline-flex; align-items: center; justify-content: center; height: 30px;
  padding: 0 16px; border: 1px solid var(--line-strong); color: var(--text-1);
  background: var(--ink-700); font: var(--f-lbl); letter-spacing: .03em; text-transform: none;
  white-space: nowrap; flex: none;
}
.btn:hover { border-color: var(--gold-500); color: var(--gold-300); }
.btn.primary { background: var(--gold-500); color: #10151d; border-color: var(--gold-500); }
[data-theme="light"] .btn.primary { color: #faf5ea; }
.btn.primary:hover { background: var(--gold-300); border-color: var(--gold-300); color: #10151d; }
/* 赭红配色的 gold-500 偏暗，深底 + 近黑字只有 4.1:1：主按钮整体升到亮一档 */
[data-palette="horae"]:not([data-theme="light"]) .btn.primary { background: var(--gold-300); border-color: var(--gold-300); }
.btn.ghost { background: none; border-color: var(--line); color: var(--text-2); }
.btn.sm { height: 26px; padding: 0 10px; font-size: 11.5px; }
/* 印记（seal）：方形 + 符号 + 大字距，取代圆角胶囊 */
.badge {
  display: inline-flex; align-items: center; gap: 5px; height: 19px; padding: 0 6px;
  border: 1px solid var(--line-strong); border-radius: 0; background: var(--ink-700);
  font: 600 11.5px/1.4 var(--sans); letter-spacing: .02em; text-transform: none; color: var(--text-2); white-space: nowrap;
}
.badge .sig { font-size: 12px; letter-spacing: 0; color: var(--gold-ink); }
.badge.type { border-color: color-mix(in srgb, var(--gold-500) 45%, transparent); color: var(--gold-300); background: var(--gold-dim); }
.badge.tag { font-family: var(--sans); font-weight: 500; letter-spacing: .01em; text-transform: none; font-size: 11.5px; color: var(--text-3); }
.badge.verify { border-color: color-mix(in srgb, var(--verify) 55%, transparent); color: color-mix(in srgb, var(--verify) 78%, var(--text-1)); background: color-mix(in srgb, var(--verify) 10%, transparent); }
.badge.astral { border-color: color-mix(in srgb, var(--astral) 50%, transparent); color: var(--astral); }
.badge.oriental { border-color: color-mix(in srgb, var(--oriental) 50%, transparent); color: var(--oriental); }
.badge.pin { border-color: color-mix(in srgb, var(--gold-500) 55%, transparent); color: var(--gold-300); }
.badge.risk { border-color: color-mix(in srgb, var(--danger) 55%, transparent); color: color-mix(in srgb, var(--danger) 72%, var(--text-1)); }
/* 「@我」印记：与未读的绿（verify）、选中的金（on）都不同色，三件事一眼可分。 */
.badge.at { border-color: color-mix(in srgb, var(--danger) 60%, transparent); color: color-mix(in srgb, var(--danger) 80%, var(--text-1)); background: color-mix(in srgb, var(--danger) 12%, transparent); }

/* ---------- 板块墙 ---------- */
/* 板块墙的组头：整行可点，折叠时只露组名与子版方向 */
.sec-block { margin-bottom: 22px; }
.sec-head { display: flex; align-items: baseline; gap: 12px; width: 100%; padding: 10px 2px 8px; text-align: left; color: inherit; border-bottom: 3px double var(--line-strong); }
.sec-head:hover { border-bottom-color: var(--gold-500); }
.sec-head .code { flex: none; font: 600 13px/1 var(--serif); letter-spacing: .2em; color: var(--gold-ink); text-transform: uppercase; }
.sec-head .sn { flex: none; font: 500 19px/1.3 var(--serif); letter-spacing: .02em; }
.sec-head .sec-note { flex: 1; min-width: 0; overflow: hidden; white-space: nowrap; text-overflow: ellipsis; font: 400 11.5px/1.4 var(--sans); letter-spacing: .02em; color: var(--text-3); }
.sec-head .sec-n { flex: none; font: 500 11.5px/1 var(--mono); color: var(--text-3); }
.sec-head .caret { flex: none; font-size: 10px; color: var(--text-3); transition: transform .15s; }
.sec-block:not(.open) .sec-head .caret { transform: rotate(-90deg); }
.sec-block.open .sec-head { margin-bottom: 14px; }
.board-grid { display: grid; grid-template-columns: repeat(auto-fill, minmax(min(236px, 100%), 1fr)); gap: 12px; }
/* 子版小卡：106 个板块要能一眼扫完，所以帖型与守则留给板块页 */
.bmini { padding: 12px 13px; display: flex; flex-direction: column; gap: 7px; transition: border-color .15s, background .15s; }
.bmini:hover { border-color: var(--gold-500); background: color-mix(in srgb, var(--ink-800) 82%, var(--gold-dim)); }
.bmini .bt { display: flex; align-items: center; gap: 7px; }
.bmini .tick { width: 5px; height: 5px; border-radius: 50%; flex: none; }
.bmini h4 { margin: 0; font: 500 15px/1.3 var(--serif); letter-spacing: .02em; }
.bmini .blurb { font-size: 12px; color: var(--text-2); min-height: 2.9em; }
.bmini .foot { display: flex; align-items: center; gap: 8px; margin-top: auto; padding-top: 8px; border-top: 1px solid var(--line-faint); font: 400 11px/1.4 var(--sans); color: var(--text-3); white-space: nowrap; overflow: hidden; }
.bmini .foot .sub { margin-left: auto; flex: none; font: 400 11.5px/1 var(--serif); letter-spacing: .06em; color: var(--gold-ink); }

/* 首页的版块组索引：两列密排，只给「有哪些组 + 几个板块」，子版仍折叠在板块墙里 */
.gsec { margin: 22px 0 18px; }
.gsec .gh { display: flex; align-items: baseline; gap: 10px; margin-bottom: 10px; padding-bottom: 8px; border-bottom: 1px solid var(--line); }
.gsec .gh .cap-l { font: var(--f-lbl); letter-spacing: .16em; text-transform: uppercase; color: var(--gold-ink); }
.gsec .gh .lnk { margin-left: auto; font-size: 12px; }
.group-grid { display: grid; grid-template-columns: repeat(auto-fill, minmax(min(238px, 100%), 1fr)); gap: 0 20px; padding: 6px 14px; }
.grow { display: flex; align-items: baseline; gap: 9px; padding: 7px 4px; border-bottom: 1px solid var(--line-faint); transition: background .15s; }
.grow:hover { background: var(--bg-hover); }
.grow .code { flex: none; font: 600 11.5px/1 var(--serif); letter-spacing: .14em; text-transform: uppercase; color: var(--gold-ink); }
.grow .sn { min-width: 0; overflow: hidden; white-space: nowrap; text-overflow: ellipsis; font: 500 13.5px/1.35 var(--serif); letter-spacing: .02em; }
.grow .n { margin-left: auto; flex: none; font: 11.5px/1 var(--mono); color: var(--text-3); }
.star { color: var(--verify); font-size: 11.5px; }
.empty { padding: 34px; text-align: center; color: var(--text-3); font: 400 13.5px/1.75 var(--sans); letter-spacing: normal; }

/* ---------- 帖子列表 ---------- */
.filters { display: flex; align-items: center; gap: 6px; flex-wrap: wrap; margin-bottom: 16px; }
.chip {
  display: inline-flex; align-items: center; justify-content: center; height: 30px;
  padding: 0 12px; border: 1px solid var(--line); color: var(--text-2); background: var(--ink-800);
  font: var(--f-lbl); letter-spacing: .02em; text-transform: none;
}
.chip:hover { border-color: var(--line-strong); color: var(--text-1); }
.chip.on { border-color: var(--gold-500); color: var(--gold-300); background: var(--gold-dim); }
/* 排序条与翻页器（v0.16.7）。排序 chip 与筛选 chip 同一形态，只多一个行首的 Ordo 标签；
   翻页器是尺规式的方钮，当前页描金，两端到头的方向键禁用（灰掉而不是藏起来，位置不跳）。 */
.sortbar .cap { margin-right: 2px; }
.pgcount { font: 11.5px/1 var(--mono); color: var(--text-3); }
.pager { display: flex; align-items: center; gap: 4px; flex-wrap: wrap; margin-top: 16px; padding-top: 14px; border-top: 1px solid var(--line-faint); }
.pager .pg {
  display: inline-flex; align-items: center; justify-content: center; height: 30px; min-width: 30px;
  padding: 0 9px; border: 1px solid var(--line); background: var(--ink-800); color: var(--text-2);
  font: var(--f-lbl); letter-spacing: .02em;
}
.pager .pg:hover:not(:disabled) { border-color: var(--line-strong); color: var(--text-1); }
.pager .pg.on { border-color: var(--gold-500); color: var(--gold-300); background: var(--gold-dim); }
.pager .pg:disabled { cursor: default; opacity: .38; }
.pager .gap { padding: 0 2px; color: var(--text-3); }
.pager .pgcount { margin-left: 8px; }

/* ---------- 草稿箱（v0.17.2） ----------
   一张草稿一行卡：左边是「一眼认出是哪篇」的摘要（前缀用帖行的 rubric），右边两颗操作竖排。
   「正在编辑」的那份描金边加淡金底，与收藏 / 已关注同一套「当前态」写法。 */
.form-acts { display: flex; flex-wrap: wrap; align-items: center; gap: 10px; }
.form-acts .dlink { margin-left: auto; }
.hint.dstat { display: flex; align-items: center; gap: 6px; margin-top: 12px; font-size: 11.5px; color: var(--gold-ink); }
.draftcard { display: flex; gap: 14px; align-items: flex-start; }
.draftcard.on { border-color: var(--gold-500); background: var(--gold-dim); }
.dc-body { flex: 1; min-width: 0; }
.dc-title { font: 600 15px/1.5 var(--serif); letter-spacing: .02em; }
.dc-live { margin-left: 8px; font: var(--f-lbl); color: var(--gold-ink); }
.dc-meta { margin-top: 6px; font: 11.5px/1.5 var(--mono); color: var(--text-3); }
.dc-excerpt { margin-top: 8px; font-size: 13px; line-height: 1.7; color: var(--text-2); }
.dc-tags { margin-top: 8px; font-size: 12px; color: var(--text-3); letter-spacing: .02em; }
.dc-act { display: flex; flex-direction: column; gap: 8px; flex: none; }
.thread { display: flex; gap: 16px; padding: 17px 16px 17px 0; border-bottom: 1px solid var(--line-faint); cursor: pointer; }
.thread:hover { background: var(--bg-hover); }
.thread .gutter { flex: none; width: 52px; text-align: right; padding-top: 1px; border-right: 1px solid var(--line); padding-right: 12px; }
.thread .gutter .n { font: 500 17px/1 var(--serif); color: var(--gold-ink); }
.thread .gutter .lb { font: 400 10.5px/1.4 var(--serif); letter-spacing: .16em; text-transform: uppercase; color: var(--text-3); }
.thread.norank { padding-left: 16px; }
.thread .body { min-width: 0; flex: 1; }
.thread .ttl { font: 500 15.5px/1.6 var(--serif); letter-spacing: .01em; margin-bottom: 7px; display: flex; align-items: center; gap: 8px; }
.thread .ttl .t { overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
.thread .ex { font-size: 12.5px; line-height: 1.7; color: var(--text-2); display: -webkit-box; -webkit-line-clamp: 1; -webkit-box-orient: vertical; overflow: hidden; }
.thread .meta { display: flex; align-items: center; gap: 10px; margin-top: 11px; font: 400 11.5px/1.6 var(--sans); letter-spacing: normal; color: var(--text-3); }
.thread .stats { flex: none; width: 56px; text-align: right; padding-top: 2px; }
.thread .stats .v { font: 500 13.5px/1.35 var(--mono); color: var(--text-2); }
.thread .stats .lbl { font: 400 11.5px/1.5 var(--sans); letter-spacing: .02em; text-transform: none; color: var(--text-3); margin-bottom: 7px; }
.thread .stats .lbl:last-child { margin-bottom: 0; }
/* 标题的 [前缀] 是这一行的分类眼（传统／主题），跟正文同号同色就等于没有。
   按抄本的 rubric 处理：衬线、金色、略大于正文，方括号保留；line-height 压到 1，
   免得这枚大一点的衬线字把它所在的那一行撑高。 */
.pfx { font-family: var(--serif); font-weight: 600; font-size: 1.08em; line-height: 1; letter-spacing: .01em; color: var(--gold-ink); }

/* ---------- 帖详情 ---------- */
.post-head { padding: 24px 26px; }
.post-head h1 { margin: 0 0 12px; font: 500 27px/1.35 var(--serif); letter-spacing: .01em; }
.post-head .byline { display: flex; align-items: center; gap: 10px; font: 400 12.5px/1.6 var(--sans); letter-spacing: normal; color: var(--text-3); }
/* 正文渲染：标记在存档里是字面字符，渲染时才变块级。原来是 white-space: pre-wrap（一行就是一段），
   现在交给 P.rich 生成 p/ul/ol/blockquote/h4/hr 真元素——所以这里只负责这些块的间距与字形。
   容器写两个：.prose 是帖子正文，.md-preview 是发帖器的实时预览——同一套解析器，就不该有两套排版。 */
.prose { margin-top: 16px; color: var(--text-1); font-size: 15px; line-height: 1.85; }
.prose > p, .md-preview > p { margin: 0 0 10px; }
.prose > p:last-child, .md-preview > p:last-child { margin-bottom: 0; }
.prose > ul, .prose > ol, .md-preview > ul, .md-preview > ol { margin: 0 0 10px; padding-left: 22px; }
.prose > ul:last-child, .prose > ol:last-child,
.md-preview > ul:last-child, .md-preview > ol:last-child { margin-bottom: 0; }
.prose li, .md-preview li { margin: 3px 0; }
.prose li::marker, .md-preview li::marker { color: var(--gold-ink); }
.prose > blockquote, .md-preview > blockquote {
  margin: 0 0 10px; padding: 8px 14px; border-left: 3px double var(--line-strong);
  background: var(--ink-700); color: var(--text-2);
}
.prose > blockquote:last-child, .md-preview > blockquote:last-child { margin-bottom: 0; }
.prose > hr, .md-preview > hr { border: none; border-top: 1px solid var(--line); margin: 16px 0; }
.prose h4, .md-preview h4 { font: 600 15px/1.4 var(--serif); color: var(--gold-300); margin: 20px 0 6px; letter-spacing: .02em; }
.prose > h4:first-child, .md-preview > h4:first-child { margin-top: 0; }
.prose b, .md-preview b { font-weight: 600; }
.prose code, .md-preview code {
  font-family: var(--mono); font-size: .88em; background: var(--ink-700);
  border: 1px solid var(--line-faint); border-radius: 2px; padding: 1px 5px;
}
.prose a.ilink, .md-preview a.ilink { color: var(--gold-300); border-bottom: 1px solid var(--gold-dim); text-decoration: none; }
.prose a.ilink:hover, .md-preview a.ilink:hover { border-bottom-color: var(--gold-500); }
/* 首字下沉：只对拉丁首字母成立（中文下沉会把「目前」这类双字词劈开，破坏断行） */
.prose.drop > p:first-of-type::first-letter {
  float: left; font: 500 46px/0.82 var(--serif); color: var(--gold-ink);
  padding: 6px 10px 0 0; margin-right: 2px;
}
/* 中文正文改用行内花饰引导：有泥金感，不影响换行 */
.prose.lead > p:first-of-type::before {
  content: "❧"; font: 400 17px/1 var(--serif); color: var(--gold-ink); margin-right: 7px;
}
/* 图片锚点展开成图；文件锚点展开成一条可下载的行。两处都在正文与预览里出现，所以不挂在某个容器下。 */
.fig { margin: 12px 0; }
.fig img { display: block; max-width: 100%; height: auto; border: 1px solid var(--line-strong); background: var(--ink-900); }
.fig figcaption { margin-top: 6px; font: 400 11.5px/1.5 var(--sans); color: var(--text-3); }
.attfile {
  display: inline-flex; align-items: center; gap: 9px; max-width: 100%; margin: 4px 0;
  height: 40px; padding: 0 12px; border: 1px solid var(--line); background: var(--ink-700); color: var(--text-1);
  text-decoration: none;
}
.attfile:hover { border-color: var(--gold-500); }
.attfile .af-ico { display: inline-flex; color: var(--gold-ink); }
.attfile .af-name { min-width: 0; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; font: 500 13px/1 var(--sans); }
.attfile .af-size { flex: none; font: 400 11.5px/1 var(--mono); color: var(--text-3); }
.attfile .af-get { flex: none; font: 400 11.5px/1 var(--sans); letter-spacing: .02em; color: var(--gold-300); border-bottom: 1px solid var(--gold-dim); }
.avatar {
  width: 32px; height: 32px; flex: none; font: 500 14px/1 var(--serif);
  display: inline-flex; align-items: center; justify-content: center;
  background: var(--ink-600); color: var(--gold-300); border: 1px solid var(--line-strong); border-radius: 50%;
  box-shadow: inset 0 0 0 2px var(--ink-800);
}
.avatar.lg { width: 44px; height: 44px; font-size: 19px; }
.avatar.sm { width: 24px; height: 24px; font-size: 11.5px; }
.avatar.gk { border-color: var(--gold-500); box-shadow: inset 0 0 0 2px var(--ink-800), 0 0 0 1px var(--gold-dim); }
.who { display: flex; align-items: center; gap: 10px; }
.who .handle { font: 600 14px/1.3 var(--serif); letter-spacing: .02em; }
.who .title { font-size: 11.5px; color: var(--text-3); }
.who .karma { font: 500 11.5px/1.4 var(--serif); letter-spacing: .04em; text-transform: none; color: var(--verify); }
.outcome { margin-top: 18px; border: 1px solid color-mix(in srgb, var(--verify) 45%, transparent); border-left-width: 3px; background: color-mix(in srgb, var(--verify) 8%, transparent); padding: 12px 16px; }
.outcome .h { font: var(--f-lbl); letter-spacing: .02em; text-transform: none; color: var(--verify); }
.outcome .b { font-size: 13.5px; margin-top: 6px; }
.floor { display: flex; gap: 14px; padding: 18px 22px; border-top: 1px solid var(--line-faint); }
.floor .f-body { flex: 1; min-width: 0; }
.floor .quote { border-left: 3px double var(--line-strong); padding: 5px 12px; margin-bottom: 10px; color: var(--text-3); font-size: 12.5px; background: var(--ink-700); }
.floor .f-actions { display: flex; gap: 16px; margin-top: 10px; font: var(--f-lbl); letter-spacing: .02em; text-transform: none; color: var(--text-3); }
.floor .f-actions button:hover { color: var(--gold-300); }
.floor .f-actions button.on { color: var(--gold-300); }
.floor .no { font: 500 13px/1 var(--serif); color: var(--gold-ink); flex: none; padding-top: 8px; width: 30px; text-align: right; border-right: 1px solid var(--line); padding-right: 10px; }
/* ---------- 楼中楼：挂在楼层内，不另起楼层 ---------- */
.subs { margin: 14px 0 2px; padding: 4px 0 4px 16px; border-left: 3px double var(--line-strong); }
.sub { display: flex; gap: 10px; align-items: flex-start; padding: 9px 0; border-bottom: 1px solid var(--line-faint); }
.sub:last-of-type { border-bottom: none; }
.sub .avatar { margin-top: 2px; }
.sub .s-body { flex: 1; min-width: 0; }
.sub .s-meta { font-size: 12px; color: var(--text-2); }
.sub .s-meta b { color: var(--text-1); font-weight: 600; }
.sub .s-meta .to { font: 600 11.5px/1 var(--sans); letter-spacing: .02em; text-transform: none; color: var(--gold-ink); padding: 0 6px; }
.sub .s-text { font-size: 13.5px; line-height: 1.7; margin-top: 4px; color: var(--text-1); }
.sub .s-acts { align-self: center; flex: none; display: flex; gap: 12px; }
.sub .s-act { flex: none; display: inline-flex; align-items: center; gap: 4px; font: 600 11.5px/1 var(--sans); letter-spacing: .02em; text-transform: none; color: var(--text-3); white-space: nowrap; }
.sub .s-act:hover { color: var(--gold-300); }
.sub .s-act.on { color: var(--gold-300); }
.subs .more { margin: 8px 0 2px; font: 600 11.5px/1 var(--sans); letter-spacing: .02em; text-transform: none; color: var(--gold-ink); border-bottom: 1px solid var(--gold-dim); padding-bottom: 3px; }
.subs .more:hover { color: var(--gold-300); }
.reply-box { padding: 16px 22px; border-top: 3px double var(--line-strong); display: flex; gap: 12px; align-items: flex-start; }
.rb-col { flex: 1; min-width: 0; display: flex; flex-direction: column; gap: 8px; }
.rb-target { display: flex; align-items: center; gap: 10px; padding: 7px 12px; border-left: 3px solid var(--gold-500); background: var(--gold-dim); font-size: 12.5px; color: var(--text-2); }
.rb-target b { color: var(--text-1); }
.rb-target .x { margin-left: auto; flex: none; font: 400 11.5px/1 var(--sans); letter-spacing: .02em; text-transform: none; color: var(--text-3); border-bottom: 1px solid var(--line); white-space: nowrap; }
.rb-target .x:hover { color: var(--danger); border-bottom-color: var(--danger); }
textarea, input[type="text"] {
  background: var(--ink-700); border: 1px solid var(--line); border-radius: 0;
  padding: 10px 12px; width: 100%; min-width: 0; resize: vertical; color: var(--text-1); font-size: 14px;
}
.post-head .meta a { margin-left: 8px; }
.post-head .meta a:hover { color: var(--gold-300); }
textarea:focus, input:focus, select:focus { border-color: var(--gold-500); outline: none; }

/* ---------- 消息：气泡式聊天窗（近 QQ 群聊的排布） ---------- */
.msg-split { display: grid; grid-template-columns: 268px minmax(0, 1fr); gap: 18px; align-items: start; }
.conv { display: flex; gap: 11px; padding: 12px; cursor: pointer; align-items: center; border-left: 2px solid transparent; }
.conv:hover { background: var(--bg-hover); }
.conv.on { border-left-color: var(--gold-500); background: var(--gold-dim); }
.conv.on .c-last, .conv.on .c-time { color: var(--text-2); }
/* 「@我」的会话：行首描红，与「选中(金)」「未读(绿)」区分开——有人点名，比「有新消息」更该被看见。 */
.conv.at { border-left-color: var(--danger); background: color-mix(in srgb, var(--danger) 7%, transparent); }
.conv.at .c-last, .conv.at .c-time { color: var(--text-2); }
.conv .c-body { min-width: 0; flex: 1; }
.conv .c-name { font: 600 14px/1.3 var(--serif); letter-spacing: .02em; display: flex; align-items: center; gap: 7px; }
.conv .c-last { font-size: 11.5px; color: var(--text-3); overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
.conv .c-time { font: 400 11.5px/1.4 var(--mono); color: var(--text-3); flex: none; align-self: flex-start; padding-top: 3px; display: flex; flex-direction: column; align-items: flex-end; gap: 3px; }
/* 会话列表底部的注脚：黑名单只在这里报数。管理（看记录 / 解除）在设置页，一处一件 */
.conv-note { padding: 9px 12px 5px; border-top: 1px solid var(--line-faint); font: 400 11.5px/1.6 var(--sans); color: var(--text-3); }
.conv-note a { color: var(--gold-ink); }
.chat { display: flex; flex-direction: column; height: calc(100vh - 168px); }
/* 头部右侧的两颗开关：免打扰与拉黑是「开/关」，所以做成同一颗按钮的两种样子 */
.chat-act { margin-left: auto; display: flex; align-items: center; gap: 8px; }
.chat-act .iconbtn.on { border-color: var(--gold-500); color: var(--gold-ink); background: var(--gold-dim); }
.chat-head { padding: 14px 18px; border-bottom: 3px double var(--line-strong); display: flex; align-items: center; gap: 12px; background: var(--ink-800); }
.chat-head .nm { font: 500 19px/1.3 var(--serif); letter-spacing: .02em; }
.chat-head .ann { font-size: 11.5px; color: var(--text-3); }
.chat-body { flex: 1; overflow-y: auto; padding: 16px 18px 22px; display: flex; flex-direction: column; }
/* 时间分隔：居中一枚小胶囊，把一段连续发言括起来 */
.chat-time { align-self: center; margin: 16px 0 2px; font: var(--f-lbl); letter-spacing: .04em; color: var(--text-3); }
.chat-time span { padding: 1px 11px; border: 1px solid var(--line); border-radius: 999px; }
/* 一行发言 = 头像位 + 气泡；自己的行反向排列，头像落右 */
.crow { display: flex; gap: 9px; align-items: flex-start; margin-top: 4px; }
.crow.run { margin-top: 13px; }
.crow.me { flex-direction: row-reverse; }
.cav { width: 24px; flex: none; }   /* 头像位；同段第 2 句起留白，气泡左缘不抖动 */
.cmain { min-width: 0; max-width: 74%; display: flex; flex-direction: column; align-items: flex-start; gap: 4px; }
.crow.me .cmain { align-items: flex-end; }
.cwho { font: var(--f-lbl); letter-spacing: .02em; color: var(--text-2); }
.cbub { background: var(--ink-700); border: 1px solid var(--line); border-radius: 9px; padding: 8px 12px; font-size: 14px; line-height: 1.7; white-space: pre-wrap; overflow-wrap: anywhere; }
.crow.me .cbub { background: var(--gold-dim); border-color: color-mix(in srgb, var(--gold-500) 40%, transparent); }
.cref { font: 400 12px/1.5 var(--sans); color: var(--text-3); }
.chat-foot { border-top: 1px solid var(--line); padding: 12px 16px; display: flex; gap: 12px; align-items: flex-end; }
.sys-note { align-self: center; font: 400 12px/1.6 var(--sans); letter-spacing: normal; text-transform: none; color: var(--text-3); border-top: 1px solid var(--line); border-bottom: 1px solid var(--line); padding: 4px 16px; text-align: center; max-width: 92%; }
.sys-note.risk { color: color-mix(in srgb, var(--danger) 72%, var(--text-1)); border-color: color-mix(in srgb, var(--danger) 45%, transparent); align-self: flex-start; text-transform: none; letter-spacing: .02em; font-family: var(--sans); font-size: 12px; text-align: left; max-width: 100%; }
.tmpl { display: flex; gap: 6px; flex-wrap: wrap; padding: 0 16px 10px; }
/* 输入区被替换掉时的说明条（待处理 / 已拉黑）：与 .chat-foot 同位同高，
   所以「这里本来该有个输入框」一眼看得出来，不会以为是自己卡住了 */
.chat-note { border-top: 1px solid var(--line); padding: 13px 16px; display: flex; gap: 14px; align-items: center; }
.chat-note .cn-txt { min-width: 0; flex: 1; font: 400 12px/1.65 var(--sans); color: var(--text-3); }
.chat-note .cn-txt b { display: block; font: var(--f-lbl); font-size: 12px; letter-spacing: .02em; color: var(--text-2); margin-bottom: 3px; }
.chat-note .cn-act { flex: none; display: flex; flex-direction: column; gap: 6px; }
.chat-note.req { border-top-color: color-mix(in srgb, var(--gold-500) 42%, transparent); }
.chat-note.req .cn-txt b { color: var(--gold-ink); }

/* ---------- 发帖器 ---------- */
.form { padding: 22px 24px; display: grid; gap: 18px; }
.f-row { display: grid; gap: 7px; }
.f-row > label { font: var(--f-lbl); letter-spacing: .02em; text-transform: none; color: var(--gold-300); }
.f-row .hint { font-size: 11.5px; color: var(--text-3); }
.f-row .hint b.bad { color: color-mix(in srgb, var(--danger) 72%, var(--text-1)); font-weight: 600; }
.f-row .hint .tpv { color: var(--gold-ink); font-weight: 600; }
/* 标题前缀窄、正文标题宽：前缀是两三个字，等分两栏会浪费一半宽度 */
.title-row { display: grid; grid-template-columns: 118px 1fr; gap: 10px; }
.title-row .pre { text-align: center; }
/* 性质标签是封闭集合：按钮而不是输入框，「禁止自建」就成了结构性事实 */
.tagpicker { display: flex; flex-wrap: wrap; gap: 7px; }
.tagchip { height: 28px; padding: 0 12px; border: 1px solid var(--line); background: var(--ink-700); color: var(--text-2); font: var(--f-lbl); letter-spacing: .01em; text-transform: none; }
.tagchip:hover { border-color: var(--line-strong); color: var(--text-1); }
.tagchip.on { border-color: var(--gold-500); background: var(--gold-dim); color: var(--gold-ink); }
.type-picker { display: flex; gap: 8px; flex-wrap: wrap; }
.typepicker { padding: 11px 13px; border: 1px solid var(--line); background: var(--ink-700); text-align: left; min-width: 140px; }
.typepicker .tn { font: 500 16px/1.3 var(--serif); letter-spacing: .02em; color: var(--text-1); display: flex; align-items: center; gap: 7px; }
.typepicker .tn .sig { color: var(--gold-ink); font-size: 15px; }
.typepicker .tl { font: 400 10.5px/1.4 var(--serif); letter-spacing: .16em; text-transform: uppercase; color: var(--text-3); margin-top: 3px; }
.typepicker .td { font-size: 11.5px; color: var(--text-2); margin-top: 5px; }
.typepicker:hover { border-color: var(--line-strong); }
.typepicker.on { border-color: var(--gold-500); background: var(--gold-dim); }
.typepicker.on .tn { color: var(--gold-300); }
/* gold-dim 会把底色提亮，text-3 在上面只有 4.37:1，选中态必须升一级对比度 */
.typepicker.on .tl { color: var(--text-2); }
.radio-row { display: grid; gap: 6px; }
.radio { display: flex; gap: 12px; align-items: flex-start; padding: 11px 14px; border: 1px solid var(--line); cursor: pointer; background: var(--ink-700); }
.radio:hover { border-color: var(--line-strong); }
.radio.on { border-color: var(--gold-500); background: var(--gold-dim); }
.radio .rd { width: 13px; height: 13px; border: 1px solid var(--line-strong); flex: none; margin-top: 5px; border-radius: 50%; }
.radio.on .rd { border-color: var(--gold-500); background: var(--gold-500); box-shadow: inset 0 0 0 3px var(--ink-800); }
.radio .rl { font: 600 13.5px/1.5 var(--sans); letter-spacing: .01em; }
.radio .rh { font-size: 11.5px; color: var(--text-3); }

/* ---------- 右栏 ---------- */
.ctx-block { margin-bottom: 24px; }
.ctx-block > .cap { display: flex; align-items: center; gap: 8px; margin-bottom: 10px; }
.ctx-block > .cap::after { content: ""; flex: 1; height: 1px; background: var(--line); }
.ctx-item { display: block; padding: 8px 0; border-bottom: 1px solid var(--line-faint); font-size: 13px; cursor: pointer; }
.ctx-item:hover { color: var(--gold-300); }
.ctx-item .rk { font: 500 13px/1 var(--serif); color: var(--gold-ink); margin-right: 8px; }
/* 右栏榜单的正文只有 13px，1.08em 在这里约等于没变，所以单独给到位 */
.ctx-item .pfx { font-size: 14.5px; }
.rule-card { padding: 14px 16px; font-size: 12.5px; color: var(--text-2); }
.rule-card ol { margin: 6px 0 0; padding-left: 20px; font: 400 13px/1.85 var(--sans); }
.rule-card li { margin-bottom: 5px; }
/* 组内通则：板块细则之下再挂一层，视觉上要能看出「这一层是继承来的」 */
.rule-card .sec-rule { margin-top: 10px; padding-top: 9px; border-top: 1px solid var(--line-faint); }
.rule-card .sec-rule b { display: block; margin-bottom: 2px; font: var(--f-lbl); letter-spacing: .02em; text-transform: none; color: var(--gold-ink); }
.rep { padding: 14px 16px; display: grid; gap: 9px; }
.rep .r-row { display: flex; align-items: center; font: 400 12.5px/1.6 var(--sans); letter-spacing: normal; color: var(--text-2); }
.rep .r-row b { margin-left: auto; font: 500 12px/1 var(--mono); color: var(--verify); }
.bar { height: 3px; background: var(--ink-600); overflow: hidden; }
.bar > i { display: block; height: 100%; background: var(--gold-500); }

/* ---------- 命令面板 ---------- */
.overlay { position: fixed; inset: 0; z-index: 60; background: rgba(6, 9, 14, .74); backdrop-filter: blur(3px); display: flex; justify-content: center; padding-top: 11vh; }
.palette { width: min(640px, 92vw); background: var(--ink-800); border: 1px solid var(--gold-500); box-shadow: var(--shadow), 0 0 0 4px var(--ink-800), 0 0 0 5px var(--line-strong); height: fit-content; }
.palette input { border: none; border-bottom: 3px double var(--line-strong); padding: 16px 18px; font-size: 15.5px; background: none; font-family: var(--sans); }
.palette input:focus { border-color: var(--line-strong); }
.p-results { max-height: 52vh; overflow-y: auto; padding: 8px; }
.p-group { font: var(--f-lbl); letter-spacing: .04em; text-transform: none; color: var(--gold-ink); padding: 10px 10px 6px; }
.p-item { display: flex; gap: 10px; align-items: center; padding: 9px 10px; cursor: pointer; font-size: 13.5px; border-left: 2px solid transparent; }
.p-item.on { background: var(--gold-dim); color: var(--gold-300); border-left-color: var(--gold-500); }
.p-item .p-sub { margin-left: auto; font: 400 11.5px/1.4 var(--sans); letter-spacing: normal; color: var(--text-3); }
.p-foot { border-top: 1px solid var(--line); padding: 9px 16px; font: 400 11.5px/1.4 var(--sans); letter-spacing: .02em; text-transform: none; color: var(--text-3); display: flex; gap: 16px; }

/* ---------- 提示 ---------- */
@media (prefers-reduced-motion: reduce) {
  * { transition: none !important; animation: none !important; }
}

.toast { position: fixed; left: 50%; bottom: 28px; transform: translateX(-50%); z-index: 80; background: var(--ink-800); border: 1px solid var(--gold-500); color: var(--gold-300); padding: 10px 20px; font: 600 12.5px/1.5 var(--sans); letter-spacing: .02em; text-transform: none; box-shadow: var(--shadow); }
.note { font-size: 12px; color: var(--text-2); background: none; border: 1px dashed var(--line-strong); padding: 10px 14px; }

/* 异步动作的忙态（app.js 的委托层在动作返回 Promise 时把控件禁到 settle）：
   按钮走原生 disabled，整行控件（div）走 aria-busy。给两者同一个「按不动了」的样子。 */
[data-act][aria-busy="true"] { opacity: .55; cursor: progress; }
button[disabled] { opacity: .55; cursor: default; }

/* ---------- 响应式 ---------- */
@media (max-width: 1180px) { .shell { grid-template-columns: 196px minmax(0, 1fr); } .rail-right { display: none; } }
@media (max-width: 860px) {
  .shell { grid-template-columns: minmax(0, 1fr); }
  .rail-left { display: none; }
  .main { padding: 18px 14px 84px; }
  .brand .sub { display: none; }
  .brand .name { font-size: 18px; letter-spacing: .2em; }
  .searchbtn { flex: 1 1 auto; max-width: none; }
  .searchbtn kbd { display: none; }
  .msg-split { grid-template-columns: minmax(0, 1fr); }
  .chat { height: calc(100vh - 230px); }
  .title-row { grid-template-columns: 1fr; }
  /* 顶栏那枚同宽镜像是为了「搜索框居中」才存在的：窄屏搜索框已经 flex:1 自己撑开，
     留着它只会把档位 chip 的宽度算两遍，把顶栏推出去。 */
  .tierchip-mirror { display: none; }
  .sec-head { flex-wrap: wrap; }
  .sec-head .sec-note { flex-basis: 100%; order: 9; }
  .thread .gutter { width: 42px; }
  .post-head { padding: 18px; }
  .tabbar {
    display: grid; grid-auto-flow: column; position: fixed; bottom: 0; left: 0; right: 0; z-index: 40;
    background: var(--ink-800);
    border-top: 1px solid var(--line); padding: 7px 0 max(7px, env(safe-area-inset-bottom));
  }
  .tabbar button { display: grid; justify-items: center; gap: 3px; font: 600 11.5px/1.3 var(--sans); letter-spacing: .02em; text-transform: none; color: var(--text-3); }
  .tabbar button.on { color: var(--gold-300); }
  .tabbar .ic { font-size: 16px; }
  .rail-left.open { display: block; position: fixed; top: 58px; bottom: 0; left: 0; width: 232px; background: var(--ink-800); z-index: 50; border-right: 1px solid var(--gold-500); }
}

/* ---------- v0.4：分组导航 / FAB / 榜单 / 收件箱 / 个人主页 / 任务 ---------- */
.ico.sm { width: 13px; height: 13px; }
.ico.lg { width: 20px; height: 20px; }
.lnk, .pagehead .lede a, .who .handle a, .ulink { color: var(--gold-300); }
.lnk:hover, .pagehead .lede a:hover, .who .handle a:hover, .ulink:hover { color: var(--gold-ink); border-bottom: 1px solid var(--gold-dim); }
.who .handle a { font: inherit; }

/* 左栏：一级 + 可展开二级 */
.navrow { display: flex; align-items: stretch; }
.navrow .navitem { flex: 1; min-width: 0; }
.navitem .nl { min-width: 0; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
.chev { flex: none; width: 26px; display: inline-flex; align-items: center; justify-content: center; color: var(--text-3); border-left: 1px solid transparent; }
.chev:hover { color: var(--gold-300); border-left-color: var(--line); }
.chev .ico { transition: transform .16s; }
.chev.open .ico { transform: rotate(90deg); color: var(--gold-ink); }
.navsub { margin: 2px 0 6px 15px; padding-left: 4px; border-left: 1px solid var(--line-faint); }
.navsub .navitem { font-size: 13px; padding: 5px 8px; }
.ndot { margin-left: auto; flex: none; min-width: 17px; height: 15px; padding: 0 4px; border-radius: 8px; background: var(--verify); color: #12181f; font: 600 10.5px/15px var(--mono); text-align: center; }
[data-theme="light"] .ndot { color: #faf5ea; }
.navsub .ndot { min-width: 15px; height: 14px; font-size: 10px; line-height: 14px; }

/* 页内分页签（链接式，可分享） */
.tabs { display: flex; align-items: flex-end; gap: 2px; margin: 0 0 16px; border-bottom: 3px double var(--line-strong); flex-wrap: wrap; }
.tab { display: inline-flex; align-items: center; gap: 7px; height: 32px; padding: 0 14px; font: var(--f-lbl); letter-spacing: .02em; text-transform: none; color: var(--text-3); border-bottom: 2px solid transparent; margin-bottom: -3px; }
.tab:hover { color: var(--text-1); background: var(--bg-hover); }
.tab.on { color: var(--gold-300); border-bottom-color: var(--gold-500); background: linear-gradient(180deg, transparent, var(--gold-dim)); }

/* 资产条（签到 / 私信引导） */
.strip { display: flex; align-items: center; gap: 10px; padding: 10px 14px; margin-bottom: 16px; background: var(--ink-800); border: 1px solid var(--line); border-left: 3px solid var(--gold-500); }
.strip .s-txt { font-size: 13px; }
.strip .s-txt b { font-weight: 600; }

/* 发帖 FAB：核心动作独立出来，金色高亮 */
.fab { position: fixed; right: 26px; bottom: 26px; z-index: 45; display: inline-flex; align-items: center; gap: 9px; height: 44px; padding: 0 20px; background: var(--gold-500); color: #10151d; border: 1px solid var(--gold-300); box-shadow: var(--shadow), inset 0 0 0 3px rgba(255, 255, 255, .07); font: 600 13.5px/1 var(--sans); letter-spacing: .02em; }
.fab:hover { background: var(--gold-300); color: #10151d; }
.fab .ico { stroke-width: 1.6; }
body[data-view="new"] .fab { display: none; }

/* 顶栏未读：从纯色点改成带计数的胶囊 */
.iconbtn .dot { top: 1px; right: 0; width: auto; min-width: 15px; height: 15px; padding: 0 4px; border-radius: 8px; font: 600 10px/15px var(--mono); text-align: center; border-color: var(--ink-900); }
/* 数字压在 --verify 铜橙上：不单独指定文字色，它会继承 .iconbtn 的三级灰，只剩 1.34:1 */
.iconbtn .dot { color: #12181f; }
[data-theme="light"] .iconbtn .dot { color: #faf5ea; }

/* 标签广场：11 个性质标签是封闭集合，所以是卡片墙而不是云图 */
.topic-grid { display: grid; grid-template-columns: repeat(auto-fill, minmax(min(258px, 100%), 1fr)); gap: 14px; }
.tagcard { padding: 15px 16px; display: flex; flex-direction: column; gap: 9px; }
.tagcard .row1 { display: flex; align-items: baseline; gap: 10px; }
.tagcard h3 { margin: 0; font: 500 18px/1.3 var(--serif); letter-spacing: .01em; }
.tagcard .blurb { font-size: 12.5px; color: var(--text-2); min-height: 3.2em; }
.tagcard .foot { display: flex; align-items: center; gap: 10px; border-top: 1px solid var(--line-faint); padding-top: 10px; }
.tagcard .foot .btn { margin-left: auto; }
.prefix-cloud { display: flex; flex-wrap: wrap; gap: 8px; }
.pchip { padding: 5px 11px; border: 1px solid var(--line); background: var(--ink-800); font: 400 13px/1 var(--sans); color: var(--text-2); }

/* 帖子列表里的推荐理由 */
.thread .why { margin-left: auto; flex: none; font: 400 11.5px/1.6 var(--sans); letter-spacing: .01em; color: color-mix(in srgb, var(--gold-500) 80%, var(--text-1)); border: 1px solid var(--gold-dim); background: var(--gold-dim); padding: 0 7px; }

/* 用户行（本机账号 / 关注与粉丝） */
.userrow { display: flex; align-items: center; gap: 12px; padding: 13px 16px; border-bottom: 1px solid var(--line-faint); }
.userrow:last-child { border-bottom: none; }
.userrow .ur-main { flex: 1; min-width: 0; }
.userrow .ur-name { display: flex; align-items: center; gap: 8px; font: 500 15.5px/1.3 var(--serif); letter-spacing: .01em; }
.userrow .ur-sub { font-size: 12px; color: var(--text-3); margin-top: 2px; }
.userrow .ur-note { font-size: 11.5px; color: var(--text-3); margin-top: 3px; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
.userrow .ur-act { display: flex; align-items: center; gap: 6px; flex: none; }

/* 回复 / 动态行 */
.rrow { padding: 12px 16px; border-bottom: 1px solid var(--line-faint); cursor: pointer; }
.rrow:last-child { border-bottom: none; }
.rrow:hover { background: var(--bg-hover); }
.rr-body { font-size: 14px; line-height: 1.7; }
.rr-ctx { font-size: 11.5px; color: var(--text-3); margin-top: 4px; }

/* 收件箱 */
.inbox .irow { display: flex; align-items: flex-start; gap: 11px; padding: 13px 16px; border-bottom: 1px solid var(--line-faint); border-left: 2px solid transparent; cursor: pointer; }
.inbox .irow:last-child { border-bottom: none; }
.inbox .irow:hover { background: var(--bg-hover); }
.inbox .irow.unread { border-left-color: var(--gold-500); background: linear-gradient(90deg, var(--gold-dim), transparent 60%); }
/* 「@我」通知：有人点名，比「赞／关注」更该先被看见——整行描红，类别印记也从灰转红。 */
.inbox .irow.at { border-left-color: var(--danger); background: linear-gradient(90deg, color-mix(in srgb, var(--danger) 10%, transparent), transparent 60%); }
.inbox .i-kind.at { color: color-mix(in srgb, var(--danger) 80%, var(--text-1)); border-color: color-mix(in srgb, var(--danger) 55%, transparent); }
.inbox .i-main { flex: 1; min-width: 0; }
.inbox .irow .avatar { width: 28px; height: 28px; font-size: 13px; }   /* 名字前缀徽标比全局 .sm 再大一档 */
.inbox .i-text { font-size: 13.5px; line-height: 1.65; }
.inbox .i-text .ulink { font-size: 15px; font-weight: 600; }   /* @名字 跟着名字前缀一起放大 */
.inbox .i-sub { font-size: 11.5px; color: var(--text-3); margin-top: 3px; }
.inbox .i-kind { flex: none; align-self: center; font: 600 11.5px/1 var(--sans); letter-spacing: .02em; color: var(--text-3); border: 1px solid var(--line); padding: 4px 7px; }
.inbox .idot { flex: none; align-self: center; width: 6px; height: 6px; background: var(--verify); }

/* 个人主页 */
.profile { padding: 20px 24px 0; }
.profile .p-top { display: flex; align-items: flex-start; gap: 14px; }
.profile .p-id { min-width: 0; }
.profile .p-name { display: flex; align-items: center; gap: 9px; font: 500 23px/1.25 var(--serif); letter-spacing: .01em; }
.profile .p-title { font-size: 12.5px; color: var(--text-2); margin-top: 3px; }
.profile .p-badges { display: flex; flex-wrap: wrap; gap: 6px; margin-top: 8px; }
.profile .p-act { margin-left: auto; display: flex; gap: 8px; flex: none; }
/* 统计条就是这一页的页签：数字大、标签小，选中的那格压一条金线并染色，
   与下面的 .tabs 指向同一份内容，所以看一眼就知道这个数正在被哪张列表兑现。 */
.profile .p-stats { display: flex; margin: 20px -24px 0; border-top: 1px solid var(--line); }
.profile .p-stats a { position: relative; flex: 1; display: grid; justify-items: center; gap: 6px; padding: 15px 4px 13px; border-left: 1px solid var(--line-faint); }
.profile .p-stats a:first-child { border-left: none; }
.profile .p-stats a:hover { background: var(--bg-hover); }
.profile .p-stats a:hover b { color: var(--gold-300); }
.profile .p-stats a.on { background: linear-gradient(180deg, transparent 52%, var(--gold-dim)); }
.profile .p-stats a.on::after { content: ""; position: absolute; inset: auto 0 0; height: 2px; background: var(--gold-500); }
.profile .p-stats b { font: 500 21px/1 var(--serif); color: var(--gold-ink); transition: color .15s; }
.profile .p-stats span { font-size: 11.5px; letter-spacing: .04em; color: var(--text-3); }

/* 回填证实率：原来 .r-row 只挂在 .rep 下，这里没命中，标题与数字挤成「回填证实率31%」；
   进度条 3px 也太像一条发丝，分不出是条还是分隔线。 */
.profile .p-rep { padding: 15px 0 17px; }
.profile .p-rep .r-row { display: flex; align-items: baseline; gap: 10px; font: 400 12.5px/1.6 var(--sans); color: var(--text-2); }
.profile .p-rep .r-row b { margin-left: auto; font: 500 16px/1 var(--serif); font-variant-numeric: lining-nums; color: var(--gold-ink); }
.profile .p-rep .bar { margin-top: 9px; height: 6px; background: var(--ink-600); border: 1px solid var(--line-faint); }
.profile .p-rep .bar > i { background: linear-gradient(90deg, var(--gold-500), var(--gold-300)); }
/* 声望阈值阶梯：把换算表直接画出来——谁都能对着算，也就看得见「等级买不到」这件事。
   个人主页与帖子右栏的答主卡共用这一套。 */
.ladder { display: flex; flex-wrap: wrap; gap: 6px; margin-top: 10px; }
.ladder .rung { display: inline-flex; align-items: baseline; gap: 5px; padding: 3px 8px; border: 1px solid var(--line); background: var(--ink-800); font: 400 11.5px/1 var(--sans); color: var(--text-3); }
.ladder .rung b { font-weight: 500; font-variant-numeric: lining-nums; }
.ladder .rung.on { border-color: var(--gold-500); color: var(--gold-300); background: var(--gold-dim); }
.profile .p-rep .small { margin-top: 9px; }

/* 帖子操作行 */
.post-act { display: flex; flex-wrap: wrap; align-items: center; gap: 6px; margin-top: 20px; padding-top: 14px; border-top: 1px solid var(--line-faint); }
.pa { display: inline-flex; align-items: center; gap: 6px; height: 28px; padding: 0 11px; border: 1px solid var(--line); background: var(--ink-700); color: var(--text-3); font: var(--f-lbl); letter-spacing: .02em; text-transform: none; }
.pa:hover { color: var(--gold-300); border-color: var(--gold-500); }
.pa.on { color: var(--gold-300); background: var(--gold-dim); border-color: var(--gold-500); }
.floor.flash, .flash { animation: flash 2.4s ease-out 1; }
@keyframes flash { 0%, 40% { background: var(--gold-dim); } 100% { background: transparent; } }

/* 尚未回填：从「警告」降级为普通状态 */
.outcome.quiet { border-color: var(--line-strong); border-left-width: 3px; background: var(--ink-700); }
.outcome.quiet .h { color: var(--text-2); }
.outcome.quiet .b { color: var(--text-3); }

/* 发帖器：板块下拉 */
.sel { height: 34px; background: var(--ink-700); border: 1px solid var(--line); color: var(--text-1); padding: 0 10px; }
.vis-row { display: flex; align-items: center; gap: 6px; flex-wrap: wrap; }

/* 签到 / 任务 / 商城 */
.checkin { padding: 18px 20px; }
.checkin .ci-head { display: flex; align-items: flex-start; gap: 14px; }
.checkin .ci-streak { font: 500 19px/1.3 var(--serif); letter-spacing: .01em; }
.checkin .ci-streak b { color: var(--gold-ink); font-size: 24px; }
.checkin .ci-pts { margin-left: auto; display: flex; align-items: center; gap: 8px; color: var(--verify); flex: none; }
.checkin .ci-pts b { font: 500 19px/1 var(--mono); color: var(--text-1); }
.checkin .ci-pts > div { display: grid; }
.ci-days { display: flex; gap: 6px; margin: 16px 0; }
.ci-d { flex: 1; height: 34px; display: grid; place-items: center; border: 1px solid var(--line); background: var(--ink-700); color: var(--text-3); font: 500 13px/1 var(--mono); }
.ci-d.on { border-color: var(--gold-500); background: var(--gold-dim); color: var(--gold-300); }
.ci-d.next { border-style: dashed; border-color: var(--gold-500); color: var(--gold-ink); }
.ci-foot { display: flex; gap: 8px; align-items: center; }
.tasklist .trow { display: flex; align-items: center; gap: 16px; padding: 14px 16px; border-bottom: 1px solid var(--line-faint); }
.tasklist .trow:last-child { border-bottom: none; }
.tasklist .t-main { flex: 1; min-width: 0; }
.tasklist .t-name { display: flex; align-items: center; gap: 10px; font: 600 14px/1.4 var(--sans); letter-spacing: .01em; }
.tasklist .t-reward { display: inline-flex; align-items: center; gap: 4px; font: 500 11.5px/1 var(--mono); color: var(--verify); }
.tasklist .t-desc { font-size: 11.5px; color: var(--text-3); margin: 3px 0 7px; }
.tasklist .t-prog { margin-top: 4px; }
.tasklist .t-act { flex: none; width: 92px; display: flex; justify-content: flex-end; }
.shopgrid { display: grid; grid-template-columns: repeat(auto-fill, minmax(min(240px, 100%), 1fr)); gap: 14px; }
.shopcard { padding: 15px 16px; display: flex; flex-direction: column; gap: 9px; }
.shopcard .row1 { display: flex; align-items: baseline; gap: 10px; }
.shopcard h3 { margin: 0; font: 500 17px/1.3 var(--serif); letter-spacing: .01em; }
.shopcard .blurb { font-size: 12.5px; color: var(--text-2); min-height: 3.2em; }
.shopcard .foot { display: flex; align-items: center; gap: 10px; border-top: 1px solid var(--line-faint); padding-top: 10px; }
.shopcard .price { display: inline-flex; align-items: center; gap: 5px; margin-left: auto; font: 500 15px/1 var(--mono); color: var(--verify); }
.badgebox { display: flex; flex-wrap: wrap; gap: 8px; }
.badgechip { display: inline-flex; align-items: center; gap: 8px; padding: 7px 12px; border: 1px solid var(--line-strong); background: var(--ink-800); }
.badgechip .sig { color: var(--gold-ink); }
.badgechip b { font: 600 13.5px/1 var(--sans); letter-spacing: .01em; }

/* 设置页 */
.set-block { padding: 4px 18px 8px; }
.set-block > .cap { padding: 12px 0 6px; }
.srow { display: flex; align-items: center; gap: 16px; padding: 12px 0; border-top: 1px solid var(--line-faint); }
.srow > div:first-child { min-width: 0; }
.srow b { font: 600 13.5px/1.5 var(--sans); letter-spacing: .01em; }
.srow .sact { margin-left: auto; display: flex; align-items: center; gap: 6px; flex-wrap: wrap; justify-content: flex-end; }
/* 私信接收范围的三档并列说明：设置页不该只有当前选中的那一项看得懂 */
.dm-scope-list { border-top: 1px solid var(--line); }
.dm-scope-list .r { display: flex; gap: 10px; padding: 7px 0; border-bottom: 1px solid var(--line-faint); font: 400 12px/1.6 var(--sans); color: var(--text-3); }
.dm-scope-list .r b { flex: none; width: 76px; font-weight: 600; color: var(--text-2); }
.dm-scope-list .r.on { color: var(--text-2); }
.dm-scope-list .r.on b { color: var(--gold-ink); }
/* 黑名单：一行一个人，记录入口与解除动作都在行上，不另开一层页面 */
.bk-list { padding-bottom: 8px; }
.bk-row { display: flex; align-items: center; gap: 9px; padding: 8px 0; border-top: 1px solid var(--line-faint); }
.bk-row .muted { flex: 1; min-width: 0; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }

/* 数据体检：把断掉的 id 引用列成清单，删数据之前先看这里 */
.integrity { border-top: 1px solid var(--line-faint); padding: 6px 0 12px; }
.ig-row { display: flex; align-items: baseline; gap: 10px; padding: 5px 0; }
.ig-where { flex: none; max-width: 46%; font-size: 12.5px; color: var(--text-2); }
.ig-id { flex: none; font-size: 12px; color: var(--danger); }
.ig-row .muted { margin-left: auto; text-align: right; }

/* 右栏补充 */
.qlink { display: flex; align-items: center; gap: 8px; padding: 6px 0; font-size: 13px; color: var(--text-2); }
.qlink:hover { color: var(--gold-300); }
.ctx-block .more { display: inline-block; margin-top: 8px; font: 600 11.5px/1 var(--sans); letter-spacing: .02em; color: var(--gold-ink); }
.ctx-block .more:hover { color: var(--gold-300); }
.ctx-item .avatar { vertical-align: middle; }

/* 积分商城「羊皮日课」：把金色母题整体换成赭红，两套主题各给一组 */
[data-palette="horae"] {
  --gold-500: #c05a34;
  --gold-300: #e2875f;
  --gold-dim: rgba(192, 90, 52, .13);
  --gold-ink: var(--gold-300);
}
[data-theme="light"][data-palette="horae"] {
  --gold-500: #a24a28;
  --gold-300: #85381c;
  --gold-dim: rgba(162, 74, 40, .12);
}

/* 窄屏：发帖移到 tabbar 中间凸起按钮，FAB 让位 */
@media (max-width: 860px) {
  .fab { display: none; }
  .tabbar { position: relative; }
  .tabbar button { position: relative; }
  .tb-fab { width: 46px; height: 46px; border-radius: 50%; background: var(--gold-500); color: #10151d !important; border: 1px solid var(--gold-300); margin: -18px auto 0; box-shadow: var(--shadow); display: inline-flex !important; align-items: center; justify-content: center; gap: 0; }
  .tb-fab .ico { stroke-width: 1.8; }
  .tb-dot { position: absolute; top: 2px; right: 22%; width: 7px; height: 7px; background: var(--verify); }
  .profile .p-act { margin-left: 0; width: 100%; }
  .profile .p-top { flex-wrap: wrap; }
  .checkin .ci-pts { margin-left: 0; }
}
@media (max-width: 560px) {
  /* 顶栏在 360px 上装不下：品牌 + 搜索 + 四颗图标 + 我的。三处一起收——
     间距减半、图标缩一档、我的那颗只留头像。搜索框 flex:1 会自己让位，不必管。 */
  .topbar { gap: 6px; padding: 0 11px; }
  .topbar .spacer { min-width: 0; }
  .brand { gap: 8px; }
  .brand .glyph { width: 24px; height: 24px; font: 400 18px/1 var(--serif); }
  .brand .name { font-size: 16px; letter-spacing: .14em; }
  .iconbtn { width: 28px; height: 28px; }
  .tb-actions { gap: 3px; }
  .me-chip { padding: 3px; }
  .me-chip .small { display: none; }
  .profile .p-stats { flex-wrap: wrap; }
  .profile .p-stats a { flex: 1 0 33%; border-left: none; }
  .tasklist .t-act { width: 74px; }
  .strip { flex-wrap: wrap; }
}

/* ---------- v0.11：实名与分级（档位 chip / 受限卡 / 三档对照表 / 锁标） ---------- */
/* 档位 chip：三档三色，只在本人可见的地方出现（顶栏 / 账号页 / 设置页）。
   盾牌走 SVG 图标而不是 emoji；文字用 sans 而不是衬线，因为它要能被一眼读出来。 */
.tierchip { display: inline-flex; align-items: center; gap: 5px; height: 22px; padding: 0 8px; border: 1px solid var(--line); background: var(--ink-700); font: 600 11px/1 var(--sans); letter-spacing: .02em; white-space: nowrap; }
.tierchip .ico { width: 12px; height: 12px; stroke-width: 1.4; }
.tierchip.v-ok { border-color: color-mix(in srgb, var(--oriental) 50%, transparent); color: color-mix(in srgb, var(--oriental) 72%, var(--text-1)); background: color-mix(in srgb, var(--oriental) 9%, transparent); }
.tierchip.v-warn { border-color: color-mix(in srgb, var(--verify) 55%, transparent); color: color-mix(in srgb, var(--verify) 78%, var(--text-1)); background: color-mix(in srgb, var(--verify) 10%, transparent); }
.tierchip.v-off { border-style: dashed; border-color: var(--line-strong); color: var(--text-3); background: none; }
/* 顶栏那层壳：按钮只做点击与悬停，外观全交给里面的 chip */
.tierchip-btn { display: inline-flex; align-items: center; padding: 0; border: none; background: none; }
.tierchip-btn:hover .tierchip { border-color: var(--line-strong); color: var(--text-1); }
/* 左栏那枚同宽镜像：占位不显示，只为把右侧 chip 的宽度抵掉，
   让两条 spacer 仍然等分剩余空间（搜索框居中）。margin 抵掉的是顶栏 14px 与操作区 8px 的间距差。 */
.tierchip-mirror { visibility: hidden; pointer-events: none; margin-right: -6px; }

/* 受限卡：把「为什么关着」和「去哪办」放在版心，而不是给一颗点了没反应的按钮。
   虚线框是刻意的——它表示「这里本该有东西，暂时没有」。 */
.locked { display: flex; align-items: center; gap: 14px; padding: 18px; border-style: dashed; border-color: var(--line-strong); }
.locked .lk-main { flex: 1; min-width: 0; display: flex; align-items: center; flex-wrap: wrap; gap: 10px; }
.locked .lk-main > .ico { width: 18px; height: 18px; color: var(--gold-ink); }
.locked .lk-main b { font: 600 13.5px/1.6 var(--sans); letter-spacing: .01em; }
.locked .lk-main .small { flex-basis: 100%; }
.locked .lk-act { flex: none; }
@media (max-width: 620px) { .locked { flex-wrap: wrap; } .locked .lk-act { margin-left: 28px; } }

/* 核验状态词：核验中一颗呼吸的圆点，失败是赭红加粗 */
.busy { color: var(--gold-ink); }
.busy::after { content: ""; display: inline-block; width: 6px; height: 6px; margin-left: 8px; border-radius: 50%; background: currentColor; animation: lp-pulse 1.1s ease-in-out infinite; }
@keyframes lp-pulse { 0%, 100% { opacity: .2; } 50% { opacity: 1; } }
.bad { color: color-mix(in srgb, var(--danger) 78%, var(--text-1)); }

/* 三档对照表：一行一个档位，格子由 content.verify.caps 生成——
   「谁能做什么」要能横向比，散在三段话里等于没说。 */
.tier-table { border-top: 1px solid var(--line-faint); }
.tt-head, .tt-row { display: grid; grid-template-columns: minmax(210px, 1.15fr) 2fr; gap: 14px; align-items: start; padding: 12px 0; border-bottom: 1px solid var(--line-faint); }
.tt-head { padding: 8px 0; }
.tt-head span { font: 600 11.5px/1.4 var(--sans); letter-spacing: .08em; text-transform: uppercase; color: var(--text-3); }
.tt-row.on { background: var(--gold-dim); box-shadow: inset 2px 0 0 var(--gold-500); }
.tt-name { display: flex; align-items: baseline; flex-wrap: wrap; gap: 6px; }
.tt-name b { font: 600 13.5px/1.5 var(--sans); }
.tt-name i { font: var(--f-latin); font-style: italic; color: var(--text-3); }
.tt-name .small { flex-basis: 100%; font-weight: 400; }
.tt-caps { display: flex; flex-wrap: wrap; gap: 6px; }
.tcap { display: inline-flex; align-items: center; gap: 5px; height: 24px; padding: 0 9px; border: 1px solid var(--line); color: var(--text-3); font: 500 11.5px/1 var(--sans); }
.tcap b { font-weight: 600; }
.tcap.on { border-color: color-mix(in srgb, var(--oriental) 45%, transparent); color: color-mix(in srgb, var(--oriental) 74%, var(--text-1)); background: color-mix(in srgb, var(--oriental) 8%, transparent); }

/* 锁标：板块墙上那颗小盾牌。不抢视线，但点进去之前看得见。 */
.lockmark { display: inline-flex; align-items: center; flex: none; color: var(--text-3); }
.bmini .bt .lockmark { margin-left: auto; }
.bmini .foot .ico { width: 12px; height: 12px; }
.bmini.locked .blurb { opacity: .72; }
@media (max-width: 560px) { .tt-head, .tt-row { grid-template-columns: 1fr; gap: 8px; } }

/* ---------- v0.13：知识层（文献 / 词条 / 引用）· 人审 · 自建群 · 编辑留痕 ---------- */
/* 徽章补充：精选（金）、锁帖、已修订（灰虚线）、待处理（琥珀）。四枚都按 .badge 那套印记走。 */
.badge.gold { border-color: color-mix(in srgb, var(--gold-500) 60%, transparent); color: var(--gold-300); background: var(--gold-dim); }
.badge.lock { border-color: color-mix(in srgb, var(--danger) 45%, transparent); color: color-mix(in srgb, var(--danger) 70%, var(--text-1)); }
.badge.lock .ico { width: 11px; height: 11px; }
.badge.dim { border-style: dashed; border-color: var(--line-strong); color: var(--text-3); }
.badge.warn { border-color: color-mix(in srgb, var(--verify) 55%, transparent); color: color-mix(in srgb, var(--verify) 78%, var(--text-1)); background: color-mix(in srgb, var(--verify) 9%, transparent); }

/* 正文里的内联引用锚点：[[文献:id]] / [[词条:id]] 渲染成的链接，下压一条金线，与正文分得开 */
.inlink { color: var(--gold-300); border-bottom: 1px solid var(--gold-dim); }
.inlink:hover { color: var(--gold-ink); border-bottom-color: var(--gold-500); }
/* 术语自动链接：与显式 [[词条:id]] 分开——显式引用是「作者的选择」，金实线；
   自动链接是「平台的带路」，金虚线、字色随正文，安静一档，免得满屏金线喧宾夺主。 */
.inlink.auto { color: inherit; border-bottom: 1px dotted color-mix(in srgb, var(--gold-500) 60%, transparent); }
.inlink.auto:hover { color: var(--gold-ink); border-bottom: 1px solid var(--gold-500); }

/* 参考文献块：正文之后、动作行之前。UL + 定位小字，不抢正文 */
.refs { margin-top: 16px; border-top: 1px solid var(--line-faint); padding-top: 10px; }
.refs .cap { font: var(--f-lbl); letter-spacing: .02em; text-transform: none; color: var(--gold-ink); margin-bottom: 6px; }
.reflist { list-style: none; margin: 0; padding: 0; }
.reflist li { display: flex; gap: 10px; align-items: baseline; padding: 4px 0; font-size: 13px; }
.reflist .loc { color: var(--text-3); font-size: 12px; }

/* 修订记录：默认收起。展开后每一版一块，可对「当前版本」逐行对比（行级 diff） */
.revs { margin-top: 14px; }
.revs-head { display: flex; align-items: center; gap: 7px; font: var(--f-lbl); letter-spacing: .02em; text-transform: none; color: var(--gold-ink); background: none; border: none; padding: 4px 0; }
.revs-head:hover { color: var(--gold-300); }
.revlist { border-left: 2px solid var(--line-strong); margin: 6px 0 0 6px; padding-left: 14px; }
.revitem { padding: 8px 0; border-bottom: 1px solid var(--line-faint); }
.revmeta { display: flex; align-items: center; gap: 10px; font: 600 11.5px/1.5 var(--sans); letter-spacing: .02em; color: var(--text-3); margin-bottom: 6px; }
.revmeta .btn { margin-left: auto; flex: none; }
.revfield { display: flex; gap: 10px; padding: 3px 0; font-size: 12.5px; line-height: 1.7; }
.revfield .rl { flex: none; width: 52px; color: var(--text-3); }
.revfield .rv { min-width: 0; color: var(--text-2); word-break: break-word; }

/* 行级 diff：同 / 删 / 增三态；删用危险红、增用已验证的暖黄，不另立配色 */
.diff { font: 400 12px/1.7 var(--mono, monospace); border: 1px solid var(--line-faint); }
.diff-empty { padding: 6px 10px; color: var(--text-3); font-size: 11.5px; }
.diff .dl { display: flex; gap: 8px; padding: 0 10px; white-space: pre-wrap; word-break: break-word; }
.diff .ds { flex: none; width: 8px; color: var(--text-3); user-select: none; }
.diff .dl.del { background: rgba(200, 90, 90, .10); }
.diff .dl.del .ds { color: var(--danger); }
.diff .dl.add { background: rgba(120, 170, 120, .10); }
.diff .dl.add .ds { color: var(--verify); }
.difffield { margin-top: 6px; }
.difffield .dfl { font: 600 11.5px/1.6 var(--sans); color: var(--text-3); margin-bottom: 4px; }

/* 条目编辑浮层（文献 / 词条）：复用 .overlay 遮罩，一张窄卡里竖排若干栏 */
.entry-overlay { padding-top: 7vh; overflow-y: auto; }
.eb-box { width: min(560px, 92vw); height: fit-content; background: var(--ink-800); border: 1px solid var(--gold-500); box-shadow: var(--shadow), 0 0 0 4px var(--ink-800), 0 0 0 5px var(--line-strong); padding: 18px; }
.eb-head { display: flex; align-items: baseline; gap: 10px; margin-bottom: 12px; }
.eb-head b { font: 600 15px/1.4 var(--serif); letter-spacing: .04em; }
.eb-head .muted { min-width: 0; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; font-style: italic; }
.eb-fields { display: grid; gap: 10px; }
.eb-field { display: flex; gap: 12px; align-items: flex-start; }
.eb-field > span { flex: none; width: 108px; padding-top: 9px; font: 400 12.5px/1.5 var(--sans); color: var(--text-3); text-align: right; }
.eb-field input, .eb-field textarea { flex: 1; min-width: 0; border: 1px solid var(--line-strong); padding: 8px 10px; font-size: 13px; background: var(--ink-900); }
.eb-field textarea { resize: vertical; line-height: 1.7; }
.eb-foot { display: flex; align-items: center; gap: 10px; margin-top: 14px; }
.eb-foot .hint { flex: 1; min-width: 0; font-size: 11.5px; line-height: 1.6; color: var(--text-3); }

/* 锁帖条：告诉人「还能读、还能引用，只是不能再盖楼」 */
.lockbar { display: flex; align-items: center; flex-wrap: wrap; gap: 10px; margin-top: 14px; padding: 12px 16px; border: 1px dashed var(--line-strong); border-left: 3px solid var(--line-strong); }
.lockbar .ico { color: var(--gold-ink); }
.lockbar b { font: 600 13px/1.5 var(--sans); }

/* 自建群的管理条 */
.chat-note.grp { align-items: flex-start; }
.chat-note .cn-txt .small { margin-top: 4px; }

/* 文献 / 词条卡：自适应两栏网格，卡上只给「类型 + 著者 + 一句注」，细节留给条目页 */
.srcgrid { display: grid; grid-template-columns: repeat(auto-fill, minmax(min(280px, 100%), 1fr)); gap: 14px; }
.srcgrid .card + .card { margin-top: 0; }
.srccard .row1, .termcard .row1 { display: flex; align-items: baseline; gap: 10px; }
.srccard h3, .termcard h3 { flex: 1 1 auto; font: 500 15px/1.5 var(--serif); letter-spacing: .01em; min-width: 0; }
.srccard .latin, .termcard .latin { flex: none; font: var(--f-latin); font-style: italic; color: var(--text-3); }
.srckind { display: flex; align-items: center; gap: 6px; margin-top: 8px; font: 400 11.5px/1.6 var(--sans); color: var(--text-3); }
.srckind .ico { width: 12px; height: 12px; }
.srccard .blurb, .termcard .blurb { margin-top: 8px; font-size: 12.5px; line-height: 1.7; color: var(--text-2); overflow-wrap: anywhere; }
/* 发现层（DESIGN.md §3.8）：构建期补的封面 / 摘要 / 获取去处。有封面时卡片成两栏，无封面保持原样 */
.srccard.has-cover { display: flex; gap: 12px; align-items: flex-start; }
.srccard .scover { flex: none; width: 52px; aspect-ratio: 2/3; overflow: hidden; border: 1px solid var(--line); }
.srccard .scover img { display: block; width: 100%; height: 100%; object-fit: cover; }
.srccard .sbody { flex: 1 1 auto; min-width: 0; }
.srccard .blurb.abs { display: -webkit-box; -webkit-line-clamp: 3; -webkit-box-orient: vertical; overflow: hidden; color: var(--text-3); }
.sroutes { display: flex; flex-wrap: wrap; gap: 6px; margin-top: 10px; }
.rchip { display: inline-flex; align-items: center; height: 22px; padding: 0 8px; border: 1px solid var(--line-strong); font: 500 11.5px/1 var(--sans); color: var(--text-2); text-decoration: none; }
.rchip:hover { border-color: var(--gold-ink); color: var(--text-1); }
.rchip.read, .rchip.oa { border-color: var(--gold-ink); color: var(--gold-ink); }
.rchip.oa { border-style: dashed; }
.termcard .variants { display: flex; flex-wrap: wrap; gap: 6px; margin-top: 8px; }
.vchip { display: inline-flex; align-items: center; height: 22px; padding: 0 8px; border: 1px dashed var(--line-strong); font: 500 11.5px/1 var(--sans); color: var(--text-3); }
/* 权威等级（★1–4）：满星实金、空星压暗——层级一眼可见，不必读数字。
   每颗星的含义写在 title 里（content.sourceStars 是唯一出处），页面上不铺图例。 */
.stars { flex: none; font: 400 11.5px/1 var(--sans); letter-spacing: .1em; color: var(--gold-ink); white-space: nowrap; }
.stars .dim { color: var(--line-strong); }
/* 联网核验标记：只是一个诚实的出处说明，不是「可疑」的反面 */
.vmark { display: inline-flex; align-items: center; height: 16px; padding: 0 5px; border: 1px solid var(--gold-dim); color: var(--gold-ink); font: 500 11.5px/1 var(--sans); letter-spacing: .02em; }
/* 文献馆的分层：版块组 → 板块。七百条平铺是一堵墙，所以每板只露前几条，点板块名看全板。 */
.libsec { margin-top: 24px; }
.libsec > .cap { display: flex; align-items: baseline; gap: 10px; padding-bottom: 8px; border-bottom: 1px solid var(--line); }
.libsec > .cap b { font: 600 14px/1.4 var(--serif); letter-spacing: .06em; color: var(--gold-300); }
.libsec > .cap .muted { margin-left: auto; }
.libboard { margin-top: 14px; }
.libboard-cap { display: flex; align-items: baseline; gap: 10px; margin-bottom: 8px; }
.libboard-cap a { font: 500 12.5px/1.4 var(--sans); letter-spacing: .02em; }
.libboard-cap .muted { margin-left: auto; }
/* 条目详情的信息行 */
.srcdetail .r-row { display: flex; gap: 16px; padding: 9px 0; border-top: 1px solid var(--line-faint); font-size: 13px; }
.srcdetail .r-row span { flex: none; width: 72px; color: var(--text-3); }
.srcdetail .r-row b { font-weight: 500; min-width: 0; word-break: break-word; }
/* 条目页封面：右浮动缩略图，让下面的信息行自然环绕（见 DESIGN.md §3.8 发现层） */
.srcdetail .sdcover { float: right; width: 92px; margin: 0 0 10px 16px; border: 1px solid var(--line); }
.srcdetail .sdcover img { display: block; width: 100%; height: auto; }

/* 人审行与处理动作 */
.reportwrap { padding: 10px 0; border-bottom: 1px solid var(--line-faint); }
.reportwrap:last-child { border-bottom: none; }
.reportrow { border-bottom: none; padding: 4px 0; }
.modacts { display: flex; gap: 8px; flex-wrap: wrap; padding: 6px 0 2px; }
.featrow { display: flex; align-items: center; gap: 12px; }
.featrow .thread { flex: 1; min-width: 0; border-bottom: none; }
.featrow .modacts { flex: none; padding: 0; }

/* 举报浮层：复用 .overlay 遮罩，内容是一张窄卡 */
.report-overlay { padding-top: 8vh; }
.reportbox { width: min(520px, 92vw); height: fit-content; background: var(--ink-800); border: 1px solid var(--gold-500); box-shadow: var(--shadow), 0 0 0 4px var(--ink-800), 0 0 0 5px var(--line-strong); padding: 18px; }
.rb-head { display: flex; align-items: baseline; gap: 10px; margin-bottom: 12px; }
.rb-head b { font: 600 15px/1.4 var(--serif); letter-spacing: .04em; }
.rb-head .muted { min-width: 0; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
.rb-reasons { display: flex; flex-wrap: wrap; gap: 7px; }
.rb-rule { margin: 12px 0 0; font-size: 12px; line-height: 1.7; color: var(--text-3); border-left: 2px solid var(--line-strong); padding-left: 10px; }
.reportbox textarea { width: 100%; margin-top: 12px; }
.rb-foot { display: flex; align-items: center; gap: 10px; margin-top: 14px; }
.rb-foot .hint { flex: 1; min-width: 0; font-size: 11.5px; line-height: 1.6; color: var(--text-3); }

/* 选人浮层（建群 / 邀请）：复用 .palette 外壳，加一个标题与（建群时的）群名输入 */
.userpick { padding: 12px; }
.userpick .p-header { font: 600 14px/1.4 var(--serif); letter-spacing: .03em; padding: 4px 4px 10px; }
.userpick input { border: 1px solid var(--line-strong); padding: 9px 12px; font-size: 13.5px; width: 100%; margin-bottom: 10px; }
.userpick .p-foot { border-top: 1px solid var(--line); padding-top: 10px; margin-top: 6px; display: flex; align-items: center; gap: 10px; }
.userpick .p-foot .hint { flex: 1; min-width: 0; font-size: 11.5px; line-height: 1.6; color: var(--text-3); }

/* 编辑器：编辑态固定的板块／帖型一行 + 引用插入器 */
.fixline { display: flex; align-items: center; gap: 8px; flex-wrap: wrap; font: 400 13px/1.6 var(--sans); color: var(--text-2); }
.fixline .ico { color: var(--gold-ink); }
.fixline .small { flex-basis: 100%; }
.citepick { display: flex; flex-wrap: wrap; gap: 7px; }

/* 正文标记工具条：按钮只往光标处插字面标记，不做所见即所得（理由见 data/content.js 的 editor 注释）。
   .mdsep 是一条竖分隔，把「标记」与「附件」两组分开。 */
.mdbar { display: flex; align-items: center; gap: 6px; flex-wrap: wrap; margin-bottom: 8px; }
.mdbtn {
  display: inline-flex; align-items: center; justify-content: center; gap: 5px; height: 28px;
  padding: 0 10px; border: 1px solid var(--line); background: var(--ink-800); color: var(--text-2);
  font: var(--f-lbl); letter-spacing: .02em; text-transform: none; cursor: pointer;
}
.mdbtn:hover { border-color: var(--line-strong); color: var(--text-1); }
.mdbtn .ico { color: var(--gold-ink); }
.mdsep { width: 1px; align-self: stretch; margin: 3px 3px; background: var(--line); }
/* 实时预览：与帖子正文同一套块级排版，只是字号小一档、边缘虚线，提示「这是效果，不是正文」。 */
.md-preview {
  margin-top: 10px; padding: 12px 14px; min-height: 46px; max-height: 420px; overflow: auto;
  border: 1px dashed var(--line-faint); background: var(--ink-800);
  color: var(--text-1); font-size: 14px; line-height: 1.8;
}
.md-preview:empty::before { content: "正文预览"; color: var(--text-3); font-size: 12.5px; }
/* 已收下的附件：一行缩略图／图标 + 名字 + 两个动作（插入锚点 / 移除） */
.attbar { display: flex; flex-wrap: wrap; gap: 8px; margin-top: 10px; }
.atchip {
  display: inline-flex; align-items: center; gap: 9px; max-width: 320px;
  padding: 6px 9px; border: 1px solid var(--line); background: var(--ink-700);
}
.atchip .att-thumb { width: 34px; height: 34px; flex: none; object-fit: cover; border: 1px solid var(--line-strong); }
.atchip .att-ico { display: inline-flex; align-items: center; justify-content: center; width: 34px; height: 34px; flex: none; color: var(--gold-ink); border: 1px solid var(--line-strong); background: var(--ink-800); }
.atchip .att-meta { display: flex; flex-direction: column; gap: 2px; min-width: 0; }
.atchip .att-meta b { font: 500 12.5px/1.3 var(--sans); overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
.atchip .att-x {
  flex: none; border: none; background: none; cursor: pointer; padding: 0 2px;
  font: 400 11.5px/1 var(--sans); letter-spacing: .02em; color: var(--text-3); border-bottom: 1px solid var(--line);
}
.atchip .att-x:hover { color: var(--gold-300); border-bottom-color: var(--gold-dim); }

/* 新人引导清单：三步一张卡，做完的划掉；三步都完成时整卡消失（判断在视图层） */
.notes .nhead { display: flex; align-items: center; gap: 10px; }
.notes .nhead b { font: 600 14px/1.4 var(--serif); letter-spacing: .04em; }
.notes .nhead .iconbtn { margin-left: auto; }
.nsteps { list-style: none; margin: 12px 0 0; padding: 0; }
.nsteps li { display: flex; flex-wrap: wrap; gap: 4px 10px; align-items: baseline; padding: 8px 0; border-top: 1px solid var(--line-faint); }
.nsteps li a { display: inline-flex; gap: 8px; align-items: baseline; font: 500 13.5px/1.5 var(--sans); color: var(--text-1); }
.nsteps li .mark { color: var(--text-3); }
.nsteps li.on a { color: var(--text-3); }
.nsteps li.on .mark { color: var(--verify); }
.nsteps li .small { flex-basis: 100%; }

/* ---------- 兴趣画像条（v0.17.8）---------- */
.profile-strip .ph { display: flex; align-items: center; gap: 10px; margin-bottom: 10px; }
.profile-strip .ph .cap-l { font-family: var(--serif); letter-spacing: .12em; color: var(--gold-300); font-size: 12.5px; }
.profile-strip .ph .lnk { margin-left: auto; font-size: 12.5px; color: var(--text-3); }
.profile-strip .ph .lnk:hover { color: var(--gold-300); }
.pchips { display: flex; flex-wrap: wrap; gap: 8px; margin-bottom: 8px; }
.pchips .pchip { text-decoration: none; }
.pchips .pchip:hover { border-color: var(--gold-dim); color: var(--text-1); }

/* ---------- 批量处理工具条（v0.17.9）---------- */
.bulkbar { display: flex; align-items: center; gap: 10px; flex-wrap: wrap; padding: 10px 12px; margin-bottom: 10px;
  border: 1px solid var(--line); background: var(--ink-850, var(--ink-800)); }
.bulkbar .pick { display: inline-flex; align-items: center; gap: 6px; font-size: 12.5px; color: var(--text-2); cursor: pointer; }
.bulkbar .bulk-sp { flex: 1; }
.bulkbar .btn[disabled] { opacity: .4; pointer-events: none; }
.reportwrap.pickable { display: grid; grid-template-columns: 26px minmax(0, 1fr); align-items: start; }
.reportwrap.pickable .pick { grid-row: 1 / span 2; padding-top: 14px; text-align: center; }
.reportwrap.pickable .rrow { grid-column: 2; }
.reportwrap.pickable .modacts { grid-column: 2; }
.reportwrap.pickable.picked { background: color-mix(in srgb, var(--gold-300) 8%, transparent); }

/* ---------- 跨帖巡检（v0.17.9）---------- */
.patrol-head { display: flex; align-items: center; gap: 16px; flex-wrap: wrap; }
.patrol-head .ph-main { display: flex; align-items: center; gap: 12px; }
.patrol-head .ur-name { font-family: var(--serif); font-size: 16px; letter-spacing: .03em; }
.patrol-head .ur-sub { color: var(--text-3); font-size: 12.5px; margin-top: 3px; }
.pstats { display: flex; gap: 20px; margin-left: auto; }
.pstat { text-align: center; }
.pstat .v { font-family: var(--serif); font-size: 20px; color: var(--text-1); }
.pstat .lbl { font-size: 11.5px; color: var(--text-3); letter-spacing: .04em; }
.pstat.risk .v { color: var(--warn, #d68a3a); }
.patrol-post { padding: 10px 0; border-bottom: 1px solid var(--line-faint); }
.patrol-post:last-child { border-bottom: none; }
.patrol-post .thread { border-bottom: none; }
.patrol-post .modacts { padding-top: 4px; }
.reportwrap.dim { opacity: .72; }
.seph { height: 1px; background: var(--line-faint); margin: 10px 0; }

/* ---------- 摘录本（v0.17.11）---------- */
/* 摘录浮层：复用 .overlay，两栏（原文 / 批注）都宽，抠错了就地改 */
.clip-overlay { padding-top: 9vh; overflow-y: auto; }
.clipbox { width: min(600px, 94vw); height: fit-content; background: var(--ink-800); border: 1px solid var(--gold-500); box-shadow: var(--shadow), 0 0 0 4px var(--ink-800), 0 0 0 5px var(--line-strong); padding: 18px; }
.cb-head { display: flex; align-items: baseline; gap: 10px; margin-bottom: 12px; }
.cb-head b { display: inline-flex; align-items: center; gap: 6px; font: 600 15px/1.4 var(--serif); letter-spacing: .04em; }
.cb-head .muted { min-width: 0; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; font-style: italic; }
.cb-field { display: block; margin-top: 10px; }
.cb-field > span { display: block; margin-bottom: 6px; font: 400 12.5px/1.5 var(--sans); color: var(--text-3); }
.cb-field textarea { width: 100%; border: 1px solid var(--line-strong); padding: 9px 11px; font-size: 13px; line-height: 1.7; background: var(--ink-900); resize: vertical; }
.cb-rule { margin-top: 12px; padding: 10px 12px; border-left: 2px solid var(--gold-dim); font-size: 11.5px; line-height: 1.7; color: var(--text-3); }
.cb-foot { display: flex; align-items: center; gap: 10px; margin-top: 14px; }
.cb-foot .hint { flex: 1; min-width: 0; font-size: 11.5px; line-height: 1.6; color: var(--text-3); }
/* 本子里的条目：引文块 + 批注 + 出处行 */
.cliplist { display: grid; gap: 12px; }
.clipcard { border: 1px solid var(--line); border-left: 3px solid var(--gold-dim); background: var(--ink-850, var(--ink-800)); padding: 14px 16px; }
.clipcard .cq { margin: 0; font: 400 14px/1.85 var(--serif); color: var(--text-1); white-space: pre-wrap; overflow-wrap: anywhere; }
.clipcard .cq::before { content: "\201C"; color: var(--gold-dim); }
.clipcard .cq::after { content: "\201D"; color: var(--gold-dim); }
.clipcard .cnote { margin-top: 10px; font-size: 12.5px; line-height: 1.7; color: var(--text-2); }
.clipcard .cmeta { display: flex; align-items: center; gap: 8px; margin-top: 12px; padding-top: 10px; border-top: 1px solid var(--line-faint); font-size: 11.5px; }
.clipcard .cacts { display: flex; gap: 8px; margin-left: auto; }
.mini { border: 1px solid var(--line-strong); background: none; padding: 3px 9px; font: 500 11.5px/1.5 var(--sans); color: var(--text-2); cursor: pointer; }
.mini:hover { border-color: var(--gold-ink); color: var(--text-1); }
.mini.danger:hover { border-color: var(--danger); color: var(--danger); }

/* ---------- 术语工坊（v0.17.11）---------- */
.wslist { display: grid; gap: 0; }
.wsrow { display: grid; grid-template-columns: minmax(0, 1fr) auto; gap: 12px; align-items: start; padding: 13px 0; border-bottom: 1px solid var(--line-faint); }
.wsrow:last-child { border-bottom: none; }
.ws-main { min-width: 0; }
.ws-term { display: flex; align-items: baseline; gap: 10px; flex-wrap: wrap; }
.ws-term .wt { font: 500 15px/1.5 var(--serif); letter-spacing: .01em; color: var(--text-1); }
.ws-meta { margin-top: 6px; font-size: 11.5px; color: var(--text-3); }
.ws-gloss { margin-top: 8px; font-size: 12.5px; line-height: 1.7; color: var(--text-2); overflow-wrap: anywhere; }
.ws-acts { display: flex; flex-direction: column; gap: 6px; align-items: flex-end; }
.ws-acts .btn, .ws-acts .mini { white-space: nowrap; }
.wstatus { display: inline-flex; align-items: center; height: 18px; padding: 0 7px; border: 1px solid var(--line-strong); font: 500 11px/1 var(--sans); letter-spacing: .02em; color: var(--text-3); }
.wstatus.st-open { border-style: dashed; }
.wstatus.st-claimed { border-color: var(--gold-dim); color: var(--gold-ink); }
.wstatus.st-drafted { border-color: var(--gold-ink); color: var(--gold-ink); }
.wstatus.st-published { border-color: var(--ok, var(--gold-ink)); color: var(--ok, var(--gold-ink)); background: color-mix(in srgb, var(--gold-300) 10%, transparent); }

/* ---------- 板块导读（v0.17.11）---------- */
.guide { border: 1px solid var(--line-strong); border-left: 3px solid var(--gold-500); background: var(--ink-850, var(--ink-800)); padding: 16px 18px; margin: 14px 0; }
.guide.empty { display: flex; align-items: center; gap: 10px; border-left-color: var(--line-strong); background: none; padding: 10px 14px; }
.guide.empty .g-empty { font-size: 12.5px; color: var(--text-3); }
.guide.empty .btn { margin-left: auto; }
.guide .g-head { display: flex; align-items: baseline; gap: 10px; flex-wrap: wrap; }
.guide .gtag { display: inline-flex; align-items: center; gap: 6px; font: 600 12.5px/1.4 var(--serif); letter-spacing: .14em; color: var(--gold-300); }
.guide .g-head .btn { margin-left: auto; }
.guide .g-intro { margin-top: 10px; font: 400 13.5px/1.85 var(--serif); color: var(--text-1); overflow-wrap: anywhere; }
.guide .g-picks { margin-top: 14px; }
.guide .g-picks .thread:last-child { border-bottom: none; }
.guide .gl { margin-bottom: 6px; font: 500 11.5px/1.5 var(--sans); letter-spacing: .06em; color: var(--text-3); }
.guide .g-termrow { display: flex; flex-wrap: wrap; gap: 8px; margin-top: 12px; }
.guide .gterm { display: inline-flex; align-items: center; height: 24px; padding: 0 10px; border: 1px dashed var(--line-strong); font: 500 12px/1 var(--sans); color: var(--text-2); text-decoration: none; }
.guide .gterm:hover { border-color: var(--gold-ink); color: var(--text-1); }
/* 导读编辑器：复用 .overlay，勾选区可滚 */
.guide-overlay { padding-top: 7vh; overflow-y: auto; }
.guidebox { width: min(600px, 94vw); height: fit-content; background: var(--ink-800); border: 1px solid var(--gold-500); box-shadow: var(--shadow), 0 0 0 4px var(--ink-800), 0 0 0 5px var(--line-strong); padding: 18px; }
.gb-sec { margin-top: 14px; }
.gb-lb { margin-bottom: 6px; font: 400 12.5px/1.5 var(--sans); color: var(--text-3); }
.gb-checks { display: grid; gap: 2px; max-height: 180px; overflow-y: auto; border: 1px solid var(--line); padding: 6px; }
.gbchk { display: flex; align-items: flex-start; gap: 8px; padding: 5px 6px; font-size: 12.5px; color: var(--text-2); cursor: pointer; }
.gbchk:hover { background: var(--ink-850, var(--ink-900)); }
.gbchk input { margin-top: 2px; flex: none; }
.gbchk span { min-width: 0; overflow-wrap: anywhere; }

/* ---------- 站内阅读器（v0.17.17 重做）----------
   正文排版全部由 .rd-wrap 上的三个变量驱动：--rd-size（px）/ --rd-lead（倍数）/ --rd-meas（em）。
   字号用 px 不用 rem：正文有正文的尺度，不该跟 UI 字号联动（UI 缩到 11.5px 时正文不能跟着缩）。
   竖排（data-vert=1）不是「旋转一下」：竖排的栏是横着排的，所以宽高要互换，滚动方向改成左右。 */
.rd-bound, .rd-dmg { display: flex; align-items: baseline; gap: 8px; margin-bottom: 12px; font-size: 12px; line-height: 1.7; color: var(--text-2); }
.rd-bound .ico, .rd-dmg .ico { flex: none; color: var(--gold-dim); }
.rd-dmg { border-color: var(--warn, var(--gold-dim)); }

.rd-bar2 { display: flex; align-items: center; gap: 10px; margin-bottom: 12px; }

.rd-bar { position: sticky; top: 0; z-index: 12; margin: 0 0 16px; background: var(--ink-900); border-top: 1px solid var(--line-faint); border-bottom: 1px solid var(--line); }
.rd-bar-in { display: flex; flex-wrap: wrap; align-items: center; gap: 6px 12px; padding: 8px 0; }
.rd-grp { display: inline-flex; align-items: center; gap: 4px; }
.rd-grp .cap { margin: 0 2px 0 0; }
/* 工具条比 UI 的 30px 控件矮一档：它常驻在正文上方，读的时候不该抢版面。
   仍是定高 + 居中（与全站控件同一套规矩），只是这个高度是阅读器自己的。 */
.rd-bar .chip, .rd-bar .mini { height: 24px; padding: 0 8px; }
.rd-val { min-width: 34px; text-align: center; font: 400 11.5px/1 var(--sans); color: var(--text-3); font-variant-numeric: lining-nums; }
.rd-pct { margin-left: auto; font: 400 11.5px/1.4 var(--sans); color: var(--text-3); white-space: nowrap; }
.rd-kv { display: flex; align-items: baseline; gap: 8px; padding: 3px 0; font: 400 12px/1.6 var(--sans); }
.rd-kv span { color: var(--text-3); }
.rd-kv b { margin-left: auto; color: var(--text-1); font-weight: 500; overflow-wrap: anywhere; }

/* 续读条：位置是账号级的，换设备也认 */
.rd-resume { display: flex; align-items: center; gap: 8px; padding: 9px 12px; margin-bottom: 14px; border: 1px solid var(--line); background: var(--ink-800); font: 400 12.5px/1.5 var(--sans); color: var(--text-2); }
.rd-resume .ico { color: var(--gold-dim); }
.rd-resume b { color: var(--text-1); font-weight: 500; }
.rd-resume-acts { margin-left: auto; display: inline-flex; gap: 6px; }

.rd-wrap { max-width: calc(var(--rd-meas) * 1em + 0px); }
.rd-body { font-family: var(--serif); font-size: var(--rd-size); line-height: var(--rd-lead); color: var(--text-1); }
.rd-wrap[data-face="sans"] .rd-body { font-family: var(--sans); }
.rd-ch { padding: 0 0 10px; }
.rd-ch + .rd-ch { padding-top: 22px; border-top: 1px solid var(--line-faint); }
.rd-ch.flash .rd-h { color: var(--gold-300); }
.rd-h { margin: 26px 0 12px; font: 600 calc(var(--rd-size) * .95)/1.5 var(--serif); letter-spacing: .04em; color: var(--gold-300); }
.rd-wrap[data-face="sans"] .rd-h { font-family: var(--sans); }
/* 段落是独立节点：可划选、可按段摘录、可逐段键盘走。段距用 margin 不用空行，
   这样「段」在 DOM 里始终是一段，摘录锚点才不会指到半句。 */
.rd-p { margin: 0 0 .85em; text-indent: 0; overflow-wrap: anywhere; }
.rd-p.cur { background: color-mix(in srgb, var(--gold-300) 10%, transparent); outline: none; }
.rd-p:focus { outline: none; }

.rd-ends, .rd-more { display: flex; align-items: center; gap: 10px; padding: 18px 0; }
.rd-ends { justify-content: space-between; }
.rd-more { justify-content: center; }
.rd-shard.pend .rd-load { padding: 20px 0; font: 400 12px/1.6 var(--sans); color: var(--text-3); }
.rd-note { padding: 14px 0; font: 400 12.5px/1.7 var(--sans); color: var(--text-2); }

/* 右起文字（希伯来 / 阿拉伯）：段落方向按内容走，标点才不会跑到错的一头 */
.rd-body[dir="rtl"] .rd-p { text-align: right; }

/* 竖排：中文底本的阅读形态。writing-mode 竖排后，正文按「列」从右往左流，
   块宽必须钉在容器上再让内容横向溢出——不钉宽的话块会跟着内容长出去，
   从主栏漫到右侧栏底下（实测就是这个现象）。所以：宽给满 + 横向自己滚 + 高度封顶。 */
.rd-wrap[data-vert="1"] { max-width: none; }
.rd-wrap[data-vert="1"] .rd-body { writing-mode: vertical-rl; text-orientation: mixed; width: 100%; max-width: 100%; max-height: 78vh; overflow-x: auto; overflow-y: hidden; }
.rd-wrap[data-vert="1"] .rd-ch + .rd-ch { padding-top: 0; padding-right: 22px; border-top: none; border-right: 1px solid var(--line-faint); }
.rd-wrap[data-vert="1"] .rd-h { margin: 0 0 0 12px; }
.rd-wrap[data-vert="1"] .rd-p { margin: 0 0 0 .85em; }

/* 浮动摘录键：划选之后出现在选区上方 */
.rd-selbtn { position: fixed; z-index: 70; padding: 5px 10px; border: 1px solid var(--gold-dim); background: var(--ink-800); color: var(--gold-300); font: 400 12px/1 var(--sans); cursor: pointer; }

/* 目录 / 书内检索浮层：与举报、摘录同一套 overlay（挂 body、自管开关、焦点圈住）。
   overlay 是 align-items:stretch 的 flex，所以盒子得自己 align-self:flex-start
   才会「按内容长」，否则一律撑到 max-height——一个 24 条的目录会顶着一个空盒子。 */
.rd-tocbox, .rd-findbox { align-self: flex-start; width: min(560px, 92vw); max-height: 76vh; display: flex; flex-direction: column; background: var(--ink-900); border: 1px solid var(--line); }
.rd-head { display: flex; align-items: baseline; gap: 10px; padding: 12px 14px; border-bottom: 1px solid var(--line-faint); }
.rd-head b { display: inline-flex; align-items: center; gap: 6px; font: 500 14px/1.4 var(--serif); color: var(--text-1); }
.rd-head span { margin-left: auto; }
.rd-toclist, .rd-hits { overflow-y: auto; padding: 6px 0; }
.rd-tocitem { display: flex; align-items: baseline; gap: 10px; padding: 6px 14px; font: 400 13px/1.5 var(--sans); color: var(--text-2); text-decoration: none; }
.rd-tocitem:hover { color: var(--text-1); background: var(--ink-800); }
.rd-tocitem.on { color: var(--gold-300); }
.rd-tocitem .rd-n { flex: none; width: 26px; text-align: right; font: 400 11.5px/1.5 var(--sans); color: var(--gold-dim); font-variant-numeric: lining-nums; }
.rd-tocitem .rd-at { margin-left: auto; }
.rd-findbox input { margin: 10px 14px; padding: 8px 10px; background: var(--ink-800); border: 1px solid var(--line); color: var(--text-1); font: 400 13px/1.4 var(--sans); }
.rd-findbox input:focus { outline: 1px solid var(--gold-dim); }
.rd-hits { padding: 0 0 10px; }
.rd-hit { display: block; padding: 8px 14px; text-decoration: none; border-bottom: 1px solid var(--line-faint); }
.rd-hit:hover { background: var(--ink-800); }
.rd-hit-ch { display: block; font: 600 11.5px/1.5 var(--sans); color: var(--gold-ink); margin-bottom: 2px; }
.rd-hit-t { display: block; font: 400 12.5px/1.7 var(--serif); color: var(--text-2); }
.rd-hit-t b { color: var(--gold-300); font-weight: 500; }
.rd-hits .note { padding: 10px 14px; }


/* ================= v0.17.12 · 学术 / 社区 / 数据主权 ================= */

/* 条目类型标签（帖 / 文献 / 词条）：星座、合集、路径、编辑器共用一个小签。
   它不是徽章（不表状态），只表「这是什么东西」——所以描边、大写、压低对比。 */
.ck { display: inline-flex; align-items: center; height: 16px; padding: 0 5px; margin-right: 6px;
  border: 1px solid var(--line-strong); font: 500 10.5px/1 var(--sans); letter-spacing: .04em; color: var(--text-3); flex: none; }
.ck.center { border-color: var(--gold-dim); color: var(--gold-300); }

/* ---------- 引文导出（v0.17.12）---------- */
.citecard { padding: 14px 16px; }
.citebar { display: flex; align-items: center; gap: 8px; flex-wrap: wrap; margin-bottom: 10px; }
.citebar .chip { cursor: pointer; }
.citebar .hint { flex: 1; min-width: 0; text-align: right; font-size: 11.5px; line-height: 1.6; color: var(--text-3); }
.citepre { margin: 0; padding: 12px 14px; border: 1px solid var(--line); background: var(--ink-900);
  font: 400 12.5px/1.75 var(--mono); color: var(--text-1); white-space: pre-wrap; overflow-wrap: anywhere; }
.citefoot { display: flex; align-items: center; gap: 8px; margin-top: 10px; }
.citefoot .hint { flex: 1; min-width: 0; font-size: 11.5px; line-height: 1.6; color: var(--text-3); }

/* ---------- 概念关系（v0.17.12）---------- */
.relcard { padding: 14px 16px; }
.relrow { display: flex; align-items: baseline; gap: 12px; padding: 7px 0; border-bottom: 1px solid var(--line-faint); }
.relrow:last-child { border-bottom: none; }
.rellb { flex: none; width: 56px; font: 500 11.5px/1.6 var(--sans); letter-spacing: .04em; color: var(--text-3); cursor: help; }
.relchips { display: flex; flex-wrap: wrap; gap: 6px; min-width: 0; }
.relchip { display: inline-flex; align-items: center; height: 24px; padding: 0 10px; border: 1px solid var(--line-strong);
  font: 400 12px/1 var(--sans); color: var(--text-2); text-decoration: none; }
.relchip:hover { border-color: var(--gold-ink); color: var(--text-1); }
.relfoot { margin-top: 12px; padding-top: 10px; border-top: 1px solid var(--line-faint); }

/* ---------- 知识星座（v0.17.12）---------- */
.cstcard { padding: 14px 16px; }
.cstcenter { display: flex; align-items: center; gap: 8px; margin-bottom: 4px; font: 500 14px/1.6 var(--serif); color: var(--text-1); }
.cstwrap { display: flex; justify-content: center; padding: 6px 0; overflow-x: auto; }
.cstsvg { display: block; flex: none; }
.cstedge { stroke: var(--line-strong); stroke-width: 1; }
.cstnode { fill: var(--ink-800); stroke: var(--text-3); stroke-width: 1.5; }
.cstnode.post { stroke: var(--text-2); }
.cstnode.src { stroke: var(--gold-ink); }
.cstnode.term { stroke: var(--gold-300); }
.cstnode.center { fill: var(--gold-dim); stroke: var(--gold-500); stroke-width: 2; }
.cstlegend { display: flex; flex-wrap: wrap; gap: 6px; margin-top: 12px; padding-top: 12px; border-top: 1px solid var(--line-faint); }
.cstchip { display: inline-flex; align-items: center; max-width: 100%; height: 26px; padding: 0 10px; border: 1px solid var(--line-strong);
  font: 400 12px/1 var(--sans); color: var(--text-2); text-decoration: none; }
.cstchip:hover { border-color: var(--gold-ink); color: var(--text-1); }
.cstchip.post { border-left-color: var(--text-2); }
.cstchip.src { border-left-color: var(--gold-ink); }
.cstchip.term { border-left-color: var(--gold-300); }

/* ---------- 投票（v0.17.12）---------- */
.pollcard { padding: 14px 16px; }
.poll-head { display: flex; align-items: center; gap: 8px; margin-bottom: 10px; }
.poll-head b { font: 600 14px/1.4 var(--serif); letter-spacing: .04em; }
.poll-opts { display: grid; gap: 6px; }
.poll-opt { position: relative; display: flex; align-items: center; gap: 10px; min-height: 34px; padding: 0 12px;
  border: 1px solid var(--line-strong); background: none; font: 400 13px/1.5 var(--sans); color: var(--text-1); text-align: left; overflow: hidden; }
button.poll-opt.vote { cursor: pointer; }
button.poll-opt.vote:hover { border-color: var(--gold-ink); }
.poll-opt.idle { color: var(--text-3); }
.poll-opt.done { cursor: default; }
.poll-opt.mine { border-color: var(--gold-500); }
.poll-bar { position: absolute; left: 0; top: 0; bottom: 0; background: var(--gold-dim); z-index: 0; }
.poll-txt { position: relative; z-index: 1; min-width: 0; overflow-wrap: anywhere; }
.poll-num { position: relative; z-index: 1; margin-left: auto; flex: none; font: 500 12px/1 var(--mono); color: var(--text-2); }
.poll-mine { position: relative; z-index: 1; flex: none; font: 500 11px/1 var(--sans); letter-spacing: .04em; color: var(--gold-300); }
.poll-foot { display: flex; gap: 12px; margin-top: 10px; }
.poll-foot .hint { flex: 1; min-width: 0; font-size: 11.5px; line-height: 1.6; color: var(--text-3); }

/* ---------- 公开合集 · 卡片与页（v0.17.12）---------- */
.colcard { padding: 14px 16px; }
.col-head { display: flex; align-items: baseline; gap: 10px; flex-wrap: wrap; }
.col-head h3 { font: 500 15px/1.5 var(--serif); letter-spacing: .01em; }
.col-head h3 a { color: var(--text-1); text-decoration: none; }
.col-head h3 a:hover { color: var(--gold-300); }
.colcard .blurb { margin-top: 6px; font-size: 12.5px; line-height: 1.7; color: var(--text-2); }
.col-meta { margin-top: 10px; font-size: 11.5px; color: var(--text-3); }
.col-items { display: flex; flex-wrap: wrap; gap: 6px; margin-top: 10px; padding-top: 10px; border-top: 1px solid var(--line-faint); }
.colitem { display: inline-flex; align-items: center; max-width: 100%; height: 24px; padding: 0 10px; border: 1px solid var(--line-strong);
  font: 400 12px/1 var(--sans); color: var(--text-2); text-decoration: none; white-space: nowrap; overflow: hidden; text-overflow: ellipsis; }
.colitem:hover { border-color: var(--gold-ink); color: var(--text-1); }
.colmore { display: inline-flex; align-items: center; height: 24px; padding: 0 8px; font: 500 11.5px/1 var(--sans); color: var(--text-3); }
.colgrid { display: grid; grid-template-columns: repeat(auto-fill, minmax(min(300px, 100%), 1fr)); gap: 14px; }
.col-byline { margin: 12px 0 14px; font-size: 12px; color: var(--text-3); }
.colitems { padding: 6px 16px; }
.colitem-row { display: flex; align-items: baseline; gap: 10px; padding: 11px 0; border-bottom: 1px solid var(--line-faint); }
.colitem-row:last-child { border-bottom: none; }
.cino { flex: none; width: 22px; text-align: right; font: 400 12px/1.6 var(--mono); color: var(--gold-dim); }
.ci-lb { min-width: 0; font: 400 13px/1.6 var(--sans); color: var(--text-1); text-decoration: none; overflow-wrap: anywhere; }
a.ci-lb:hover { color: var(--gold-300); }
.ci-note { flex: none; max-width: 40%; margin-left: auto; font-size: 11.5px; line-height: 1.6; color: var(--text-3); text-align: right; }
.colinks { display: flex; flex-wrap: wrap; gap: 6px; }
.colink { display: inline-flex; align-items: center; height: 24px; padding: 0 10px; border: 1px solid var(--line-strong);
  font: 400 12px/1 var(--sans); color: var(--text-2); text-decoration: none; }
.colink:hover { border-color: var(--gold-ink); color: var(--text-1); }

/* ---------- 综述路径 · 卡片与页（v0.17.12）---------- */
.pathcard { padding: 14px 16px; }
.path-head { display: flex; align-items: flex-start; gap: 10px; }
.path-ico { flex: none; color: var(--gold-dim); }
.path-name { min-width: 0; }
.path-name h3 { font: 500 15px/1.5 var(--serif); letter-spacing: .01em; }
.path-name h3 a { color: var(--text-1); text-decoration: none; }
.path-name h3 a:hover { color: var(--gold-300); }
.pathcard .blurb { margin-top: 6px; font-size: 12.5px; line-height: 1.7; color: var(--text-2); }
.path-meta { margin-top: 10px; font-size: 11.5px; }
.pathgrid { display: grid; grid-template-columns: repeat(auto-fill, minmax(min(300px, 100%), 1fr)); gap: 14px; }
.steps { display: grid; gap: 0; }
.step { display: flex; gap: 14px; padding: 14px 0; border-bottom: 1px solid var(--line-faint); }
.step:last-child { border-bottom: none; }
.st-no { flex: none; width: 26px; height: 26px; display: flex; align-items: center; justify-content: center;
  border: 1px solid var(--gold-dim); font: 500 12px/1 var(--mono); color: var(--gold-300); }
.st-body { min-width: 0; }
.st-lb { font: 400 13.5px/1.7 var(--sans); color: var(--text-1); text-decoration: none; overflow-wrap: anywhere; }
a.st-lb:hover { color: var(--gold-300); }
.st-note { margin-top: 6px; font: 400 12.5px/1.7 var(--serif); color: var(--text-2); overflow-wrap: anywhere; }

/* ---------- 引用计量行（v0.17.12）---------- */
.citerow { display: flex; align-items: baseline; gap: 10px; padding: 10px 0; border-bottom: 1px solid var(--line-faint); }
.citerow:last-child { border-bottom: none; }
.citerow a { min-width: 0; font: 400 13px/1.6 var(--sans); color: var(--text-1); text-decoration: none; overflow-wrap: anywhere; }
.citerow a:hover { color: var(--gold-300); }
.cin { flex: none; margin-left: auto; font: 500 11.5px/1.6 var(--mono); color: var(--text-3); }

/* ---------- 列表编辑器浮层（路径 / 合集共用，v0.17.12）---------- */
.list-overlay { padding-top: 7vh; overflow-y: auto; }
.listbox { width: min(620px, 94vw); height: fit-content; background: var(--ink-800); border: 1px solid var(--gold-500);
  box-shadow: var(--shadow), 0 0 0 4px var(--ink-800), 0 0 0 5px var(--line-strong); padding: 18px; }
.cb-fields { display: grid; gap: 0; }
.lp-sec { margin-top: 14px; }
.lp-lb { display: flex; align-items: center; gap: 8px; margin-bottom: 6px; font: 400 12.5px/1.5 var(--sans); color: var(--text-3); }
.lp-filter { flex: 1; min-width: 0; border: 1px solid var(--line-strong); background: var(--ink-900); padding: 5px 9px; font-size: 12px; }
.lp-sel { display: grid; gap: 2px; border: 1px solid var(--line); padding: 6px; }
.lp-row { display: flex; align-items: center; gap: 6px; padding: 4px 6px; }
.lp-row:hover { background: var(--ink-850, var(--ink-900)); }
.lp-no { flex: none; width: 18px; text-align: right; font: 500 11.5px/1.5 var(--mono); color: var(--gold-dim); }
.lp-row .lp-lb { flex: 1; min-width: 0; margin: 0; color: var(--text-1); overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
.lp-note { flex: 1.1; min-width: 0; border: 1px solid var(--line-strong); background: var(--ink-900); padding: 4px 8px; font-size: 11.5px; }
.lp-cand { display: grid; gap: 2px; max-height: 200px; overflow-y: auto; border: 1px solid var(--line); padding: 6px; }
.lp-chk { display: flex; align-items: center; gap: 8px; padding: 5px 6px; font-size: 12.5px; color: var(--text-2); cursor: pointer; }
.lp-chk:hover { background: var(--ink-850, var(--ink-900)); }
.lp-chk input { flex: none; margin: 0; }
.lp-chk span:last-child { min-width: 0; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
.lp-chk.on { color: var(--text-1); }
.lp-chk.on .ck { border-color: var(--gold-dim); color: var(--gold-300); }

/* ---------- 加入合集浮层（v0.17.12）---------- */
.collect-overlay { padding-top: 9vh; overflow-y: auto; }
.collectbox { width: min(480px, 94vw); height: fit-content; background: var(--ink-800); border: 1px solid var(--gold-500);
  box-shadow: var(--shadow), 0 0 0 4px var(--ink-800), 0 0 0 5px var(--line-strong); padding: 18px; }
.cp-sec { margin-top: 12px; }

/* ---------- 申诉浮层（v0.17.12）---------- */
.appeal-overlay { padding-top: 9vh; overflow-y: auto; }
.appealbox { width: min(520px, 94vw); height: fit-content; background: var(--ink-800); border: 1px solid var(--gold-500);
  box-shadow: var(--shadow), 0 0 0 4px var(--ink-800), 0 0 0 5px var(--line-strong); padding: 18px; }
.appealbox textarea { width: 100%; border: 1px solid var(--line-strong); padding: 9px 11px; font-size: 13px; line-height: 1.7; background: var(--ink-900); resize: vertical; }

/* ---------- 词条关系浮层（v0.17.12）---------- */
.rel-overlay { padding-top: 7vh; overflow-y: auto; }
.relbox { width: min(620px, 94vw); height: fit-content; background: var(--ink-800); border: 1px solid var(--gold-500);
  box-shadow: var(--shadow), 0 0 0 4px var(--ink-800), 0 0 0 5px var(--line-strong); padding: 18px; }
.relseg { display: grid; gap: 0; }

/* ---------- 采纳答案（v0.17.12）---------- */
.floor.accepted { border-left: 3px solid var(--gold-500); background: color-mix(in srgb, var(--gold-300) 6%, transparent); }
.floor .badge.accepted { white-space: nowrap; }
.qa-hint { font-size: 11.5px; line-height: 1.6; color: var(--text-3); }

/* ---------- 设置：一键导出（v0.17.12）---------- */
.exp-chips { display: flex; flex-wrap: wrap; gap: 6px; margin-top: 8px; }
.exp-chips .chip.sm { cursor: default; }

/* ---------- 数字：显示体衬线默认是旧式数字（"1994" 会高低不齐），统一齐线 ----------
   必须放在最后：上面这些规则用的是 font: 简写，它会把 font-variant-* 重置回 normal，
   所以只有在同特异度、更靠后的位置声明才压得住。 */
.post-head h1, .pagehead h1, .sec-head .sn, .bmini h4, .thread .ttl, .thread .gutter .n,
.floor .no, .ctx-item .rk, .who .karma, .empty, .typepicker .tn, .conv .c-name, .chat-head .nm,
.chat-time,
.radio .rl, .section-row .sn, .profile .p-name, .profile .p-stats b,
.userrow .ur-name, .tagcard h3, .shopcard h3, .checkin .ci-streak,
.tabs, .strip .s-txt b,
.st-no, .cino, .cin, .poll-num, .lp-no, .colitem-row .cino, .citerow .cino { font-variant-numeric: lining-nums; }
