/* 迭代 23 视觉收敛（QA 报告 V2/V3/V4）：
   改前 public/style.css 里 font-size 17 种取值、border-radius 15 种、硬编码色值 77 个，
   而 :root 里只有 3 个在用 —— 变量形同虚设，改一处样式得全文搜字面量。
   下面定死档位，把相邻值「就近吸收」。三条硬规矩：
   ① 换的是写法不是色号：#fafbfc 依然是 #fafbfc，只是写成了 var(--surface-1)；
   ② 变量定义行自己不参与替换（脚本命中定义行会产出 --ink:#0f172a 自引用）；
   ③ 注释里一旦出现 #xxxxxx，替换脚本同样会啃掉注释，注释只写变量名不写色号。 */
:root{
  --bg:#f5f7fa; --card:#ffffff; --line:#e3e8ef; --text:#1f2328; --muted:#6b7280;
  --blue:#2563eb; --blue-soft:#eff4ff; --green:#128a5a; --green-soft:#e8f7f0;
  --amber:#b45309; --amber-soft:#fdf3e3; --red:#c0392b; --red-soft:#fdeceb;

  /* ── 字号 5 档 ──
     12px / 12.5px / 11.5px 这种 0.5px 档肉眼分不出，却各占一个取值点（12.5 有 30 处、
     11.5 有 27 处），一屏之内混着看很吵。上面 5 档覆盖全部，16→15 是唯一缩水处
     （只出现在 720px 以下的汇总数字上）。 */
  --fs-xs:11px;   /* 徽标 / 标签 / 元信息 */
  --fs-sm:12px;   /* 辅助说明 / 表单小字 */
  --fs-md:13px;   /* 正文 / 表格 / 按钮 */
  --fs-lg:15px;   /* 卡片标题 / 小标题 */
  --fs-xl:19px;   /* 页标题 / 大数字 */
  --fs-base:14px; /* 根字号，只给 body 的 font 简写用（不放进上面 5 档，否则全局缩水） */

  /* ── 圆角 4 档 ──
     4~14px 几乎每 1px 一档，另加 999px / 50%。原来的 --radius:12px 与 --r-lg:10px
     是两套东西（--radius 给大容器，--r-lg 给小容器），这里并成一套，只保留语义。 */
  --r-sm:6px;     /* 徽标 / 复选框 / 小控件 */
  --r-md:8px;     /* 按钮 / 输入框 / 缩略图 */
  --r-lg:10px;    /* 卡片 / 面板 / 模态 */
  --r-full:999px; /* 胶囊 */

  /* ── 中性面：吸收 9 个近似灰，其中 3 个是近白、2 个是浅灰 ──
     #fafbfc / #fcfcfd / #fcfdff / #fafafa → surface-1（近白，面板浅底）
     #f1f3f6 / #eef1f5 → surface-2（浅灰，分隔与中性徽标）
     surface-1 和 surface-2 本身也不换肤，只是把 25 处散写收进变量。 */
  --surface-1:#fafbfc;  /* 极浅底：表头 / 统计块 / 说明块 */
  --surface-2:#f1f3f6;  /* 浅灰底：分隔 / 中性徽标 */
  --surface-3:#f4f6fa;  /* 禁用态底 */

  /* ── 文字层 ──
     #111827 / #0f172a / #374151 / #4b5563 各复制了 3~16 遍，渲染出来只是同一档灰，
     却要记两套写法。--ink 偏蓝黑，只给 logo / 序号块 / toast 这类实心块用。 */
  --ink:#0f172a;        /* 深墨：logo / 序号块 / toast */
  --text-2:#374151;     /* 次级正文 */
  --text-3:#4b5563;     /* 三级正文 / 标签字 */

  /* ── 语义深字：琥珀 / 绿 / 蓝 / 红的「深色版」──
     同色系但更深，专门用来写正文级文字（#7c4a03 / var(--good-ink) / var(--info-ink) / #8c2b21 各 4~8 遍）。
     注意别拿 --amber 这档当正文色：它对比度 4.6，只够徽标大字号。 */
  --amber-ink:#7c4a03;
  --good-ink:#0b5c3c;
  --info-ink:#1e40af;
  --danger-ink:#8c2b21;

  /* ── 边框系 ──
     这三个是「同族不同深浅」的描边，此前 var(--line-blue) / var(--line-blue) 混着写（都是淡蓝框），
     var(--line-amber) / #ecdcb0 混着写（都是淡琥珀框）。合并规则只有一条：同值才同变量，
     同族不同值的不硬凑 —— 例如 #e8d0a0（琥珀）和 #e8b4b4（红）差 20 个色阶，
     并成一个变量就等于改了颜色。 */
  --line-blue:#d5e3ff;   /* 淡蓝框：蓝底提示块 / 草稿模板条 */
  --line-amber:#f2ddbd;  /* 淡琥珀框 */
  --line-red:#f0c9c5;    /* 淡红框 */
  --line-green:#c9ead9;  /* 淡绿框：建议项 ok */
}
*{box-sizing:border-box}
/* V5 键盘可见焦点。改前 CSS 里 :focus-visible 一条都没有，而 input / textarea /
   .fillin 各自写了 outline:none —— 只用键鼠 Tab 走一圈完全看不出焦点在哪。
   这是可访问性硬项，不是审美：不补的话 WCAG 2.4.7 直接不通过。
   注意作用域收在 :focus-visible（不是 :focus），鼠标点击不该冒出一圈蓝框。 */
:focus-visible{outline:2px solid var(--blue);outline-offset:2px}
body{margin:0;background:var(--bg);color:var(--text);
  font:var(--fs-base)/1.6 -apple-system,BlinkMacSystemFont,"Segoe UI","Microsoft YaHei",sans-serif}
h1{margin:0;font-size:var(--fs-xl);font-weight:650}
h3{font-size:var(--fs-lg);margin:22px 0 10px;color:var(--ink)}
em{font-style:normal;color:var(--blue);font-weight:600}

header.top{display:flex;justify-content:space-between;align-items:center;gap:16px;
  padding:16px 22px;background:var(--card);border-bottom:1px solid var(--line);flex-wrap:wrap}
.brand{display:flex;align-items:center;gap:12px}
.logo{background:var(--ink);color:#fff;font-weight:700;font-size:var(--fs-md);letter-spacing:.5px;
  padding:7px 10px;border-radius:var(--r-md)}
.sub{margin:2px 0 0;color:var(--muted);font-size:var(--fs-sm)}
.addbox{display:flex;gap:8px;flex-wrap:wrap}
input,select{padding:8px 10px;border:1px solid var(--line);border-radius:var(--r-md);font-size:var(--fs-md);
  background:#fff;color:var(--text);outline:none}
input:focus,select:focus{border-color:var(--blue)}
#urlInput{width:340px}
.searchwrap{position:relative}
#topicSearch{width:320px}
.results{position:absolute;top:calc(100% + 4px);left:0;min-width:420px;max-height:320px;overflow:auto;
  background:#fff;border:1px solid var(--line);border-radius:var(--r-lg);box-shadow:0 8px 24px rgba(15,23,42,.10);z-index:30}
.r-item{display:flex;justify-content:space-between;align-items:center;gap:14px;padding:9px 12px;
  font-size:var(--fs-md);cursor:pointer;border-bottom:1px solid var(--surface-2)}
.r-item:last-child{border-bottom:none}
.r-item:hover{background:var(--blue-soft)}
.r-item.dim{color:var(--muted);cursor:default}
.r-item.dim:hover{background:none}
.r-name{max-width:260px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.r-meta{color:var(--muted);font-size:var(--fs-xs);white-space:nowrap}
.r-meta .tracked{color:var(--green)}
.untrack{padding:2px 8px;font-size:var(--fs-xs);border-radius:var(--r-sm);color:var(--muted);margin-left:2px}
.untrack:hover{color:#dc2626;border-color:#fca5a5;background:var(--red-soft)}
/* V8 交互反馈：改前全站只有 .copybtn 一处 transition，其余控件 hover 是「硬跳变」。
   这里只给会变色/会动的高频控件上 150ms，比全站 *{} 可控（不误伤布局属性），
   并在下面 prefers-reduced-motion 下整批关掉。 */
button,.tab,.card,.tplcard,.altreco,.r-item,.tdrow,.untrack,.crule,.confb{
  transition:background .15s ease,border-color .15s ease,color .15s ease}
/* 尊重系统「减少动效」：晕动症用户会因为这类过渡不适 */
@media (prefers-reduced-motion:reduce){
  *,*::before,*::after{transition:none !important;animation:none !important;scroll-behavior:auto !important}
}

button{padding:8px 14px;border-radius:var(--r-md);border:1px solid var(--line);background:var(--card);
  color:var(--text);cursor:pointer;font-size:var(--fs-md)}
/* V7 hover 给底色，不只描边：描边变化在浅底上几乎看不出来 */
button:hover{border-color:#c7d2e3;background:var(--surface-1)}
button.primary{background:var(--blue);border-color:var(--blue);color:#fff}
button.primary:hover{background:#1d4fd8}
button.danger{background:#fff;border-color:var(--line-red);color:var(--red)}
/* 禁用态：迭代 20 起有多处「未确认就不许点」的门禁按钮（app.js 约 17 处 disabled=true），
   此前 CSS 里没有任何 :disabled 规则，禁用按钮跟可点的一模一样（实测 opacity=1 / cursor=pointer /
   白底），用户会以为软件坏了。必须写在 :hover 之后才能覆盖 hover 态。 */
button:disabled,button:disabled:hover{cursor:not-allowed;opacity:.45;filter:grayscale(.55);
  background:var(--surface-3);color:var(--muted);border-color:var(--line)}
button.primary:disabled,button.primary:disabled:hover{background:#a8bde8;border-color:#a8bde8;
  color:#fff;opacity:1;filter:none}
.mini:disabled,.mini:disabled:hover{opacity:.4;filter:grayscale(.55);cursor:not-allowed}

.redline{margin:12px 22px 0;padding:10px 14px;background:var(--amber-soft);
  border:1px solid var(--line-amber);border-radius:var(--r-lg);color:var(--amber-ink);font-size:var(--fs-sm)}
.redline strong{color:var(--amber)}

/* 后端未连上的降级横幅：复用 .redline 的琥珀配色，区别是它要覆盖整屏宽度、排在页面最顶 */
.bwarn{margin:0;padding:11px 22px;background:var(--amber-soft);border-bottom:1px solid var(--line-amber);
  color:var(--amber-ink);font-size:var(--fs-sm);line-height:1.7}
.bwarn b{color:var(--amber)}
.bwarn code{background:#fff;border:1px solid var(--line-amber);border-radius:5px;padding:1px 6px;
  font-family:ui-monospace,Consolas,monospace;font-size:var(--fs-xs)}

nav.tabs{display:flex;gap:6px;padding:14px 22px 0}
.tab{padding:8px 16px;border-radius:var(--r-md) var(--r-md) 0 0;border:1px solid transparent;background:transparent;
  color:var(--muted)}
.tab.active{background:var(--card);border-color:var(--line);border-bottom-color:var(--card);
  color:var(--blue);font-weight:600}

main{padding:0 22px 40px}
/* 上沿贴着 tab bar，两角留直角，只圆下面两个 */
.view{display:none;background:var(--card);border:1px solid var(--line);border-radius:0 0 var(--r-lg) var(--r-lg);padding:18px}
.view.active{display:block}

.toolbar{display:flex;align-items:center;gap:10px;flex-wrap:wrap;margin-bottom:14px}
.hint{color:var(--muted);font-size:var(--fs-sm)}
.chk{display:flex;align-items:center;gap:6px;font-size:var(--fs-sm);color:var(--muted)}

.grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(340px,1fr));gap:14px}
.card{border:1px solid var(--line);border-radius:var(--r-lg);padding:14px;background:var(--card);position:relative}
.card h4{margin:0 0 6px;font-size:var(--fs-lg);line-height:1.4}
.card .meta{color:var(--muted);font-size:var(--fs-sm);margin-bottom:10px}
.badges{display:flex;gap:6px;flex-wrap:wrap;margin-bottom:10px}
.badge{font-size:var(--fs-xs);padding:3px 8px;border-radius:var(--r-sm);background:var(--blue-soft);color:var(--blue)}
.badge.g{background:var(--green-soft);color:var(--green)}
.badge.a{background:var(--amber-soft);color:var(--amber)}
.badge.r{background:var(--red-soft);color:var(--red)}
.badge.n{background:var(--surface-2);color:var(--muted)}
.kv{display:grid;grid-template-columns:auto 1fr;gap:4px 12px;font-size:var(--fs-sm);margin-bottom:10px}
.kv dt{color:var(--muted)}
.kv dd{margin:0}
.awards{font-size:var(--fs-sm);color:var(--text-2);background:var(--surface-1);border:1px dashed var(--line);
  border-radius:var(--r-md);padding:8px 10px;margin-bottom:10px}
.acts{display:flex;gap:8px;flex-wrap:wrap}
.acts button{padding:6px 12px;font-size:var(--fs-sm)}
.dead{opacity:.55}

table.tbl{width:100%;border-collapse:collapse;font-size:var(--fs-md)}
table.tbl th,table.tbl td{border-bottom:1px solid var(--line);padding:9px 10px;text-align:left}
table.tbl th{background:var(--surface-1);color:var(--muted);font-weight:600;font-size:var(--fs-sm)}
table.tbl tr:hover td{background:var(--surface-1)}
.num{text-align:right;font-variant-numeric:tabular-nums}

.statbox{display:grid;grid-template-columns:repeat(auto-fill,minmax(150px,1fr));gap:10px;margin-bottom:16px}
.stat{border:1px solid var(--line);border-radius:var(--r-lg);padding:10px 12px;background:var(--surface-1)}
.stat b{display:block;font-size:var(--fs-xl);color:var(--blue);font-variant-numeric:tabular-nums}
.stat span{font-size:var(--fs-xs);color:var(--muted)}

.posts{display:flex;flex-direction:column;gap:10px}
.post{border:1px solid var(--line);border-radius:var(--r-lg);padding:12px;display:flex;gap:12px;align-items:flex-start}
.post .rank{flex:0 0 26px;height:26px;border-radius:var(--r-sm);background:var(--ink);color:#fff;
  display:flex;align-items:center;justify-content:center;font-size:var(--fs-sm);font-weight:600}
.post .main{flex:1;min-width:0}
.post .ttl{font-size:var(--fs-md);margin-bottom:4px;word-break:break-word}
.post .m{color:var(--muted);font-size:var(--fs-sm);display:flex;gap:12px;flex-wrap:wrap}
.tagpill{display:inline-block;padding:1px 7px;border-radius:var(--r-sm);background:var(--surface-2);color:var(--text-3);font-size:var(--fs-xs)}
.post .right{flex:0 0 auto;text-align:right}
.score{font-size:var(--fs-xl);font-weight:700;color:var(--blue);font-variant-numeric:tabular-nums}
.thumb{width:56px;height:56px;border-radius:var(--r-md);object-fit:cover;background:var(--surface-2)}

.advice{display:flex;flex-direction:column;gap:8px;margin-bottom:8px}
.adv{padding:9px 12px;border-radius:var(--r-md);font-size:var(--fs-sm);border:1px solid}
.adv.good{background:var(--green-soft);border-color:var(--line-green);color:var(--good-ink)}
.adv.warn{background:var(--amber-soft);border-color:var(--line-amber);color:var(--amber-ink)}
.adv.info{background:var(--blue-soft);border-color:var(--line-blue);color:var(--info-ink)}

.note-bar{background:var(--blue-soft);border:1px solid var(--line-blue);border-radius:var(--r-lg);
  padding:10px 14px;font-size:var(--fs-sm);color:var(--info-ink);margin-bottom:14px}
.note-bar b{color:#1d4fd8}
.studio{display:grid;grid-template-columns:repeat(auto-fit,minmax(320px,1fr));gap:14px}
.col.wide{grid-column:1/-1}
.panel{border:1px solid var(--line);border-radius:var(--r-lg);padding:14px;background:#fff}
.panel h4{margin:0 0 10px;font-size:var(--fs-md)}
.frow{display:flex;gap:10px;align-items:flex-start;margin-bottom:8px}
.frow label{flex:0 0 88px;font-size:var(--fs-sm);color:var(--muted);padding-top:7px}
.frow input,.frow textarea,.frow select{flex:1;min-width:0;width:100%}
textarea{padding:8px 10px;border:1px solid var(--line);border-radius:var(--r-md);font-size:var(--fs-md);
  font-family:inherit;color:var(--text);outline:none;resize:vertical;line-height:1.6}
textarea:focus{border-color:var(--blue)}
.bench{font-size:var(--fs-sm);color:var(--text-2);background:var(--surface-1);border:1px dashed var(--line);
  border-radius:var(--r-md);padding:8px 10px}
.checks{margin-top:10px;display:flex;flex-direction:column;gap:5px}
.chkline{font-size:var(--fs-sm);padding:6px 10px;border-radius:var(--r-sm);display:flex;gap:10px;align-items:center}
.chkline.ok{background:var(--green-soft);color:var(--good-ink)}
.chkline.no{background:var(--red-soft);color:var(--danger-ink)}
/* 建议项（机器感细节 / 话题相关）：琥珀＝提示，不是错误，不用红 */
.chkline.warn{background:var(--amber-soft);color:var(--amber-ink)}
.chkline b{flex:0 0 84px}

.pbwrap{margin-bottom:16px}
.pbcard{border:1px solid #cfe0fb;background:linear-gradient(180deg,var(--blue-soft),#fff);
  border-radius:var(--r-lg);padding:14px}
.pbcard.empty-pb{background:var(--surface-1);border-color:var(--line)}
.pbhead{display:flex;align-items:center;gap:12px;flex-wrap:wrap;margin-bottom:8px}
.pbhead b{font-size:var(--fs-lg)}
.pbmeta{font-size:var(--fs-xs);color:var(--muted)}
.pbhead button{padding:5px 12px;font-size:var(--fs-sm);margin-left:auto}
.pbbench{display:flex;gap:14px;flex-wrap:wrap;font-size:var(--fs-sm);color:var(--text-2);margin-bottom:10px}
.pbbench b{color:var(--blue);font-size:var(--fs-md)}
.pbtitle{font-size:var(--fs-sm);font-weight:600;color:var(--ink);margin:8px 0 5px}
.pbprin{margin:0 0 4px;padding-left:20px;font-size:var(--fs-sm);color:var(--text-2)}
.pbprin li{margin-bottom:3px}
.pbtpls{display:grid;grid-template-columns:repeat(auto-fill,minmax(250px,1fr));gap:10px}
.pbtpl{border:1px solid var(--line);border-radius:var(--r-md);padding:9px 11px;background:#fff}
.pbtpl .tt{display:flex;justify-content:space-between;align-items:baseline;gap:8px;margin-bottom:5px}
.pbtpl .tt b{font-size:var(--fs-sm)}
.pbtpl .tt span{font-size:var(--fs-xs);color:var(--muted);white-space:nowrap}
.pbtpl .ts{margin-bottom:4px}
.pbtpl .tw{font-size:var(--fs-xs);color:var(--text-3)}

.llmbadge{font-size:var(--fs-xs);padding:5px 9px;border-radius:var(--r-sm);background:var(--surface-2);color:var(--muted)}
/* V6 对比度：原来这里写 var(--green)（#128a5a）—— 在 --green-soft 底上实测对比度
   3.95:1，按 WCAG AA「小字 4.5:1」不合格（QA 报告第 2 章 V6 项）。
   换成 --good-ink（#0b5c3c）后 5.34:1，达标。徽标字号 11px 属小字，必须按 4.5 卡。 */
.llmbadge.on{background:var(--green-soft);color:var(--good-ink)}
.props{display:flex;flex-direction:column;gap:8px;margin-bottom:10px}
.prop{border:1px solid var(--line);border-radius:var(--r-md);padding:9px 11px;background:var(--surface-1)}
.ptitle{font-size:var(--fs-md);font-weight:600;margin-bottom:3px}
.pmeta{font-size:var(--fs-sm);color:var(--blue);margin-bottom:3px}
.pdet{font-size:var(--fs-sm);color:var(--text-3);margin-bottom:2px}
.prop button{margin-top:6px;padding:5px 10px;font-size:var(--fs-sm)}
.shots{margin-top:8px;font-size:var(--fs-sm);color:var(--text-2)}
.shotstitle{font-weight:600;margin-bottom:4px}
.drafttpl{margin:0 0 8px;font-size:var(--fs-sm);color:var(--blue);background:var(--blue-soft);border:1px solid var(--line-blue);padding:6px 10px;border-radius:var(--r-sm)}
.drafttpl b{color:#1d4ed8}

.insight h4{margin:16px 0 8px;font-size:var(--fs-md)}
.imeta{font-size:var(--fs-sm);color:var(--muted);background:var(--surface-1);border:1px dashed var(--line);
  border-radius:var(--r-md);padding:8px 10px}
.ilist{margin:0 0 8px;padding-left:20px;font-size:var(--fs-sm);color:var(--text-2)}
.ilist li{margin-bottom:4px}
.dim{color:var(--muted);font-size:var(--fs-xs)}
.bar{display:inline-block;width:120px;height:7px;background:var(--surface-2);border-radius:var(--r-sm);overflow:hidden;vertical-align:middle}
.bar i{display:block;height:100%;background:var(--blue);border-radius:var(--r-sm)}
.i2col{display:grid;grid-template-columns:repeat(auto-fit,minmax(260px,1fr));gap:18px;margin-top:6px}
.pt{display:flex;align-items:center;gap:10px;font-size:var(--fs-sm);margin-bottom:4px}
.pt>span:first-child{flex:0 0 76px;color:var(--text-2)}
.pt b{flex:0 0 34px;text-align:right;font-variant-numeric:tabular-nums}

.sched{display:grid;grid-template-columns:repeat(auto-fill,minmax(280px,1fr));gap:12px}
.sch{border:1px solid var(--line);border-radius:var(--r-lg);padding:12px}
.sch h5{margin:0 0 8px;font-size:var(--fs-md)}
.sch ol{margin:0;padding-left:18px;font-size:var(--fs-sm);color:var(--text-2)}
.sch li{margin-bottom:3px}


.modal{position:fixed;inset:0;background:rgba(15,23,42,.45);display:flex;
  align-items:flex-start;justify-content:center;padding:40px 16px;overflow:auto;z-index:50}
.hidden{display:none !important}
.modal-body{background:#fff;border-radius:var(--r-lg);padding:22px;max-width:760px;width:100%;position:relative}
.close{position:absolute;right:12px;top:8px;font-size:var(--fs-xl);border:none;background:none;color:var(--muted);cursor:pointer}
.bp h3{margin-top:0}
.bp .sect{margin-bottom:16px}
.bp .sect h4{margin:0 0 8px;font-size:var(--fs-md);color:var(--ink)}
.skel{border:1px solid var(--line);border-radius:var(--r-lg);overflow:hidden}
.skel div{padding:9px 12px;border-bottom:1px solid var(--line);font-size:var(--fs-sm);display:flex;gap:12px}
.skel div:last-child{border-bottom:none}
.skel .role{flex:0 0 92px;color:var(--blue);font-weight:600}
.skel .ch{flex:0 0 70px;color:var(--muted);font-variant-numeric:tabular-nums}
.comp{background:var(--red-soft);border:1px solid var(--line-red);border-radius:var(--r-lg);padding:10px 12px;
  font-size:var(--fs-sm);color:var(--danger-ink)}
.comp li{margin:3px 0}

.toast{position:fixed;left:50%;bottom:30px;transform:translateX(-50%);background:var(--ink);color:#fff;
  padding:10px 18px;border-radius:var(--r-md);font-size:var(--fs-md);z-index:99;box-shadow:0 6px 20px rgba(0,0,0,.18)}
.empty{padding:30px;text-align:center;color:var(--muted);font-size:var(--fs-md)}

/* ---------- ④ 真实度 / 防 AI 检测评分 ---------- */
.spec{margin-top:8px;border:1px solid var(--line);border-radius:var(--r-md);padding:9px 11px;background:var(--surface-1)}
.spechead{font-size:var(--fs-sm);display:flex;align-items:center;gap:8px;flex-wrap:wrap}
.spechead b{font-size:var(--fs-xl);font-variant-numeric:tabular-nums}
.spechead .good{color:var(--green)}
.spechead .warn{color:var(--amber)}
.spechead .bad{color:var(--red)}
.specmeta{font-size:var(--fs-xs);color:var(--muted)}
.spechint{font-size:var(--fs-sm);color:var(--amber-ink);margin-top:5px}
.spechint.good{color:var(--green)}
.speclist{margin:4px 0 0;padding-left:18px;font-size:var(--fs-sm);color:var(--text-3)}
.speclist li{margin-bottom:2px;word-break:break-word}


/* ---------- 我的发布：监控 + 互动维护 ---------- */
.myposts{display:flex;flex-direction:column;gap:12px}
.mptools{display:flex;align-items:center;gap:12px;margin-bottom:2px}
.mptools button{margin-left:auto;flex-shrink:0}
.mpcard{border:1px solid var(--line);border-radius:var(--r-lg);padding:12px;background:#fff}
.mphead{display:flex;justify-content:space-between;gap:12px;align-items:flex-start;margin-bottom:8px}
.mptitle{font-size:var(--fs-md);font-weight:600;line-height:1.5;word-break:break-word}
.mpacts{display:flex;gap:6px;flex-shrink:0}
.mpacts button{padding:5px 10px;font-size:var(--fs-sm)}
.mpmetrics{display:grid;grid-template-columns:repeat(auto-fit,minmax(160px,1fr));gap:10px;margin-bottom:6px}
.metric{border:1px solid var(--line);border-radius:var(--r-md);padding:8px 10px;background:var(--surface-1);display:flex;align-items:center;gap:10px}
.mlabel{flex:0 0 30px;font-size:var(--fs-xs);color:var(--muted)}
.mval{font-size:var(--fs-xl);font-weight:700;font-variant-numeric:tabular-nums}
.mval em{font-style:normal;font-size:var(--fs-xs);font-weight:600;margin-left:3px}
.mval em.up{color:var(--red)}
.mval em.down{color:var(--green)}
.mval em.flat{color:var(--muted)}
.spark{flex:0 0 96px;width:96px;height:22px;margin-left:auto}
.mpmeta{font-size:var(--fs-sm);color:var(--muted);margin-bottom:8px}

.tagpill.g{background:var(--green-soft);color:var(--green)}
.tagpill.r{background:var(--red-soft);color:var(--red)}

/* ---------- 手机发帖包 ---------- */
.packbox{margin-top:10px;border:1px solid var(--line-blue);background:var(--blue-soft);border-radius:var(--r-lg);padding:10px 12px}
.packhead{display:flex;align-items:center;gap:10px;flex-wrap:wrap;font-size:var(--fs-sm);color:var(--info-ink);margin-bottom:8px}
.packhead span{flex:1;min-width:200px}
.packhead button{padding:5px 10px;font-size:var(--fs-sm)}
.packbox textarea{width:100%;font-size:var(--fs-sm);line-height:1.7}
.calibnote{font-size:var(--fs-sm);color:var(--blue);cursor:help}

/* ---------- ① 首页：推荐卡 + 待办 ---------- */
.reco{margin-bottom:14px}
.recoload,.recoempty{font-size:var(--fs-md);color:var(--muted);padding:18px 0}
.recocard{border:1px solid #cddafc;background:linear-gradient(180deg,var(--blue-soft),#fff);
  border-radius:var(--r-lg);padding:18px 20px}
.recocard .rlabel{font-size:var(--fs-xs);color:var(--blue);font-weight:600;letter-spacing:.4px}
.recocard .rname{font-size:var(--fs-xl);font-weight:700;margin:4px 0 6px;line-height:1.35}
.recocard .rwhy{font-size:var(--fs-md);color:var(--text-2);margin-bottom:14px}
.recocard .rwhy b{color:var(--text)}
.recocard .racts{display:flex;gap:10px;flex-wrap:wrap}
button.big{padding:11px 22px;font-size:var(--fs-lg);font-weight:600;border-radius:var(--r-lg)}
.recocard .ralt{margin-top:14px;display:flex;gap:8px;align-items:center;flex-wrap:wrap}
.altreco{padding:6px 12px;font-size:var(--fs-sm);border-radius:var(--r-full);background:#fff}
.altreco .dim{margin-left:4px;font-size:var(--fs-xs)}

/* 待办清单：一行一件事，日期 + 类型 + 动作 + 为什么值 */
.todopanel{margin-bottom:16px;border:1px solid var(--line);border-radius:var(--r-lg);background:#fff;overflow:hidden}
.todohead{display:flex;align-items:baseline;gap:10px;padding:11px 14px;background:var(--surface-1);border-bottom:1px solid var(--line)}
.todohead b{font-size:var(--fs-md)}
.todolist{padding:6px 8px}
.tdrow{display:flex;align-items:center;gap:10px;padding:8px 8px;border-radius:var(--r-md)}
.tdrow + .tdrow{border-top:1px solid var(--surface-2)}
.tdrow:hover{background:var(--surface-1)}
.tdrow.urgent .tdday{color:var(--red);font-weight:700}
.tdrow.soon .tdday{color:var(--amber);font-weight:600}
.tdrow.later .tdday{color:var(--muted)}
.tdrow.done{opacity:.5}
.tdrow.done .tdact{text-decoration:line-through}
.tdchk{flex:0 0 20px;width:20px;height:20px;padding:0;border-radius:var(--r-sm);font-size:var(--fs-sm);line-height:1;
  display:flex;align-items:center;justify-content:center;color:var(--green)}
.tdday{flex:0 0 48px;font-size:var(--fs-sm)}
.tdtype{flex:0 0 auto;font-size:var(--fs-xs);padding:2px 8px;border-radius:var(--r-full);background:var(--surface-2);color:var(--text-3)}
.tdtype.pb{background:var(--blue-soft);color:var(--blue)}
.tdtype.eg{background:var(--green-soft);color:var(--green)}
.tdtype.pp{background:var(--amber-soft);color:var(--amber)}
.tdmain{flex:1;min-width:0}
.tdact{font-size:var(--fs-md)}
.tddet{font-size:var(--fs-xs);color:var(--muted);margin-top:1px}
.tdgo{padding:4px 10px;font-size:var(--fs-sm)}
.tdmore{margin-top:6px;border-top:1px dashed var(--line);padding-top:6px}
.tdmore summary{cursor:pointer;font-size:var(--fs-sm);color:var(--muted);padding:4px 8px;user-select:none}
.tdmore summary:hover{color:var(--blue)}
.tdmore[open] summary{margin-bottom:4px}
.homeall .toolbar{margin-top:18px;padding-top:14px;border-top:1px solid var(--line)}

/* ---------- ② 创作流 ---------- */
.flow{display:flex;flex-direction:column;gap:12px}
.fstep{display:none;border:1px solid var(--line);border-radius:var(--r-lg);padding:16px 18px;background:#fff}
.fstep.active{display:block}
.fhead{display:flex;align-items:center;gap:10px;margin-bottom:12px;flex-wrap:wrap}
.fnum{width:22px;height:22px;border-radius:50%;background:var(--blue);color:#fff;
  font-size:var(--fs-sm);font-weight:700;display:flex;align-items:center;justify-content:center;flex:0 0 22px}
.fhead b{font-size:var(--fs-lg)}
.fhint{font-size:var(--fs-sm);color:var(--muted)}
.crules{display:flex;gap:8px;flex-wrap:wrap;margin:10px 0 14px}
.crule{font-size:var(--fs-sm);padding:6px 12px;border-radius:var(--r-md);background:var(--blue-soft);color:var(--info-ink)}
.crule b{font-weight:700}
/* 视频独占话题的门槛提示：琥珀＝「规则另有要求，本工具不覆盖」，不是错误 */
.crule.warn{background:var(--amber-soft);color:var(--amber-ink)}
.crev{font-size:var(--fs-sm);padding:6px 12px;border-radius:var(--r-md);background:var(--green-soft);color:var(--good-ink)}
.crev b{font-weight:700}
.chint{font-size:var(--fs-sm);color:var(--muted);padding:6px 0;width:100%}
.fbtns{display:flex;gap:10px;margin-top:14px;flex-wrap:wrap}
.fstep textarea{width:100%;resize:vertical}

/* ---------- 第 4 步：确认提示词（迭代 20） ---------- */
/* 摘要行：把「这份提示词是按什么组装出来的」摊开，避免用户对着几千字找不到重点 */
.psum{display:flex;gap:8px;flex-wrap:wrap;align-items:center;margin:0 0 10px}
.psum .tagpill{font-size:var(--fs-sm)}
/* 指纹戳：如实标注「是否被手改过」，改了不拦，只提醒它和原始组装件不同 */
.pstamp{margin-top:8px;font-size:var(--fs-sm);color:var(--muted);display:flex;gap:8px;flex-wrap:wrap;align-items:center}
.pstamp .phash{font-family:ui-monospace,Consolas,monospace;background:var(--surface-2);color:var(--text-3);
  padding:1px 6px;border-radius:var(--r-sm);font-size:var(--fs-xs)}
.pstamp .pdirty{background:var(--amber-soft);color:var(--amber-ink);padding:2px 8px;border-radius:var(--r-sm)}
.pstamp .pok{background:var(--green-soft);color:var(--good-ink);padding:2px 8px;border-radius:var(--r-sm)}
/* 提示词编辑框：等宽 + 稍微降低视觉重量，让人愿意逐段读 */
#cPrompt{font-family:ui-monospace,Consolas,monospace;font-size:var(--fs-sm);line-height:1.65;background:var(--surface-1)}

/* ---------- ③ 收益：双栏 ---------- */
.earn2col{display:grid;grid-template-columns:1fr 1fr;gap:20px;align-items:start}
.ecol{min-width:0}
.ecol h3{margin:0 0 10px}
.sum{font-size:var(--fs-md);color:var(--muted)}
.sum b{color:var(--text)}

@media (max-width:960px){
  .earn2col{grid-template-columns:1fr}
}
@media (max-width:720px){
  header.top{padding:12px 14px}
  .redline{margin:10px 14px 0}
  nav.tabs{padding:10px 14px 0;overflow-x:auto}
  main{padding:0 14px 30px}
  .view{padding:14px}
  .grid{grid-template-columns:1fr}
  .recocard .rname{font-size:var(--fs-xl)}
  #urlInput,#topicSearch{width:100%}
  .results{min-width:0;left:0;right:0}
  #mypostInput{width:100% !important}
  table.tbl{display:block;overflow-x:auto;white-space:nowrap}
  .i2col{grid-template-columns:1fr}
  .tdrow{flex-wrap:wrap}
  .tdmain{flex:1 1 100%;order:3}
  .tdgo{margin-left:auto}
}

/* ---------- 创作流第2步：内容配方 ---------- */
.recipe{margin-bottom:4px}
.rcbase{font-size:var(--fs-sm);color:var(--text-2);background:var(--blue-soft);border:1px solid var(--line-blue);
  border-radius:var(--r-md);padding:8px 12px;margin-bottom:12px}
.rcgrid{display:grid;grid-template-columns:repeat(auto-fit,minmax(220px,1fr));gap:12px}
.rcitem{border:1px solid var(--line);border-radius:var(--r-lg);padding:10px 12px;background:#fff}
.rcitem > label{display:block;font-size:var(--fs-sm);color:var(--muted);font-weight:600;margin-bottom:6px}
.rcctl{display:flex;flex-direction:column;gap:5px}
.rcctl input,.rcctl select{width:100%}
.rchint{font-size:var(--fs-xs);color:var(--muted);line-height:1.5}
.rchk{display:flex;align-items:center;gap:6px;font-size:var(--fs-sm);color:var(--text);font-weight:400;padding-top:6px;cursor:pointer}
.rchk input{width:auto}
.rcdir{margin-top:12px;font-size:var(--fs-sm);color:var(--text-2);background:var(--surface-1);border:1px solid var(--line);
  border-radius:var(--r-md);padding:8px 12px}
.rctip{margin-top:10px;font-size:var(--fs-xs);color:var(--muted);line-height:1.6}

/* ---------- 创作流第3步：模板选择 ---------- */
.tplbox{display:flex;flex-direction:column;gap:8px}
.tplcard{border:1px solid var(--line);border-radius:var(--r-lg);padding:11px 13px;background:#fff;cursor:pointer}
.tplcard:hover{border-color:#bcd0f7;background:#fbfdff}
.tplcard.on{border-color:var(--blue);background:var(--blue-soft);box-shadow:0 0 0 2px rgba(37,99,235,.12)}
.tplcard .th{display:flex;gap:8px;align-items:baseline;flex-wrap:wrap}
.tplcard .th b{font-size:var(--fs-md)}
.tplcard .ts{margin-top:6px;display:flex;gap:5px;flex-wrap:wrap}
.tplcard .tw{margin-top:5px;font-size:var(--fs-xs);color:var(--muted)}

/* ---------- 创作流第4步：个性化具体事实 ---------- */
.facts{display:flex;flex-direction:column;gap:8px}
.fctip{font-size:var(--fs-sm);color:var(--muted);background:var(--surface-1);border:1px solid var(--line);
  border-radius:var(--r-md);padding:8px 10px}
.fcard{border:1px solid var(--line);border-radius:var(--r-lg);padding:11px 13px;background:#fff}
.fctitle{font-size:var(--fs-md);font-weight:650}
.fcmeta{font-size:var(--fs-xs);color:var(--muted);margin:3px 0 6px}
.fcdet{font-size:var(--fs-sm);color:var(--text-2);line-height:1.7}
.fcacts{display:flex;gap:8px;margin-top:9px;flex-wrap:wrap}
.fcacts button{padding:5px 12px;font-size:var(--fs-sm)}
.fcacts button.use{background:var(--blue);border-color:var(--blue);color:#fff}
.chint.warn{color:var(--amber)}

/* ---------- 创作流第5步：生成参数回显 ---------- */
.cmeta{margin-bottom:10px}
.cmrow{display:flex;gap:6px;flex-wrap:wrap}
.cmnote{margin-top:6px;font-size:var(--fs-xs);color:var(--muted)}
.cmnote button{padding:2px 8px;font-size:var(--fs-xs);margin-left:6px}

@media (max-width:720px){
  .rcgrid{grid-template-columns:1fr}
}

/* ---------- 收益页：顶部三项汇总 ---------- */
.mpsum{display:grid;grid-template-columns:repeat(3,1fr);gap:10px;margin-bottom:12px}
.mpsum .ps{border:1px solid var(--line);border-radius:var(--r-lg);padding:10px 12px;background:#fff;text-align:center}
.mpsum .ps b{display:block;font-size:var(--fs-xl);font-weight:700;font-variant-numeric:tabular-nums}
.mpsum .ps span{font-size:var(--fs-xs);color:var(--muted)}
@media (max-width:720px){
  .mpsum{grid-template-columns:repeat(3,1fr);gap:6px}
  .mpsum .ps{padding:8px 6px}
  .mpsum .ps b{font-size:var(--fs-lg)}
}

/* ---------- 积分台账：行内回填 ---------- */
.fillcell{white-space:nowrap}
.fillin{width:74px;padding:4px 6px;border:1px solid var(--line);border-radius:var(--r-sm);font-size:var(--fs-md);text-align:right;font-variant-numeric:tabular-nums}
.fillin:focus{outline:none;border-color:var(--blue);box-shadow:0 0 0 2px rgba(37,99,235,.12)}
.filled{font-weight:600;color:var(--green);font-variant-numeric:tabular-nums}
.mini{padding:2px 7px;font-size:var(--fs-xs);border-radius:var(--r-sm);margin-left:3px;vertical-align:middle}
.mini.primary{background:var(--blue);color:#fff;border-color:var(--blue)}
.tag{display:inline-block;padding:1px 7px;border-radius:var(--r-sm);font-size:var(--fs-xs)}
.tag.ok{background:var(--green-soft);color:var(--green)}
.tag.wait{background:var(--amber-soft);color:var(--amber)}
.ledgerempty{text-align:left;padding:6px 4px}
.ledgerempty .letitle{font-size:var(--fs-lg);font-weight:600;color:var(--text);margin-bottom:8px}
.lesteps{margin:0;padding-left:20px;font-size:var(--fs-md);line-height:1.85;color:var(--muted)}
.lesteps b{color:var(--blue)}

/* ---------- 收益页：一次链接 + 行内回填（合并已发布 & 积分到账） ---------- */
.pubhead{display:flex;align-items:center;gap:8px;flex-wrap:wrap;margin-bottom:12px}
.pubhead input{flex:1;min-width:280px}
.pubhead .hint{flex-basis:100%;margin:0}
.pubempty{background:var(--card);border:1px dashed var(--line);border-radius:var(--r-lg);padding:22px 20px;text-align:left}
.pubempty .letitle{font-size:var(--fs-lg);font-weight:600;color:var(--text);margin-bottom:10px}
.tagpill.warn{background:var(--amber-soft);color:var(--amber)}
.linkbtn{background:none;border:none;color:var(--blue);cursor:pointer;font-size:inherit;padding:0;text-decoration:underline}
.settlecell{border-left:1px solid var(--line);padding-left:14px;min-width:190px;display:flex;flex-direction:column;justify-content:center;gap:4px}
.settlecell .slabel{font-size:var(--fs-xs);color:var(--muted)}
.settlecell .srow{display:flex;align-items:center;gap:6px}
.sexp{font-weight:600;color:var(--text);font-variant-numeric:tabular-nums}
.sfilled{font-weight:600;color:var(--green);font-variant-numeric:tabular-nums}
.settlecell .mpmeta{font-size:var(--fs-xs)}
@media (max-width:960px){
  .settlecell{border-left:none;border-top:1px solid var(--line);padding-left:0;padding-top:10px;width:100%}
  .pubhead input{width:100%}
}

/* ── AI 规则风险提示（R0：只提示，不阻断）── */
.airisk { border-radius:var(--r-lg); padding: 12px 14px; margin: 10px 0; font-size:var(--fs-md); line-height: 1.7; }
.airisk.high { border: 1px solid #e8b4b4; background: var(--red-soft); }
.airisk.unknown { border: 1px solid #e8d0a0; background: var(--amber-soft); }
.airtitle { font-weight: 700; font-size:var(--fs-md); margin-bottom: 7px; }
.airisk.high .airtitle { color: var(--danger-ink); }
.airisk.unknown .airtitle { color: var(--amber-ink); }
.airsnip {
  font-size:var(--fs-sm); color: #6b5a4a; background: rgba(0,0,0,.035);
  border-left: 3px solid #d9b8b8; padding: 6px 10px; border-radius:var(--r-sm); margin-bottom: 8px;
}
.airbody { color: var(--text); margin-bottom: 9px; }
.airisk .mini { margin-top: 2px; }
.specnote { font-size:var(--fs-xs); color: #7a7a7a; margin-top: 4px; line-height: 1.6; }
.specnote b { color: var(--danger-ink); font-weight: 600; }

/* ── EV 可信度徽标 + 三段来源（开发计划迭代 10）── */
.confb {
  display: inline-block; font-size:var(--fs-xs); padding: 1px 7px; border-radius:var(--r-md);
  margin-left: 6px; font-weight: 500; cursor: help; vertical-align: middle;
  border: 1px solid transparent;
}
.confb.high { background: var(--green-soft); color: #1a7a45; border-color: #b8e0c8; }
.confb.medium { background: var(--amber-soft); color: var(--amber-ink); border-color: #ecdcb0; }
.confb.low { background: var(--red-soft); color: var(--danger-ink); border-color: #eec4c4; }
.evhint { font-size:var(--fs-xs); color: #7a7a7a; line-height: 1.6; margin-top: 4px; font-weight: 400; }
.evbox { margin-top: 8px; border: 1px solid #e4e4e4; border-radius:var(--r-md); padding: 10px 12px; background: var(--surface-1); }
.evhd { font-size:var(--fs-sm); font-weight: 600; color: #555; margin-bottom: 7px; }
.evp { display: flex; gap: 8px; align-items: baseline; font-size:var(--fs-sm); line-height: 1.65; margin-bottom: 4px; }
.evpk { flex-shrink: 0; width: 30px; font-size:var(--fs-xs); padding: 0 5px; border-radius:var(--r-sm); text-align: center; }
.evp.measured .evpk { background: var(--green-soft); color: #1a7a45; }
.evp.rule .evpk { background: var(--blue-soft); color: #1f5c9e; }
.evp.fallback .evpk { background: var(--red-soft); color: var(--danger-ink); }
.evpv { flex-shrink: 0; font-weight: 600; min-width: 46px; }
.evpn { color: #666; font-size:var(--fs-xs); }
.evft { margin-top: 8px; padding-top: 7px; border-top: 1px dashed #ddd; font-size:var(--fs-xs); color: #888; }

/* ── 复制文案按钮（第 5 步）── */
.copyrow { display: flex; align-items: center; gap: 10px; margin: -4px 0 10px; flex-wrap: wrap; }
.copybtn {
  padding: 6px 16px; font-size:var(--fs-md); border-radius:var(--r-sm); cursor: pointer;
  border: 1px solid #2f6fd0; background: #fff; color: #2f6fd0; transition: all .15s;
}
.copybtn:hover { background: var(--blue-soft); }
.copybtn.ok { background: var(--green); border-color: var(--green); color: #fff; }
.copyhint { font-size:var(--fs-xs); color: #888; }

/* ---- 地域与作者画像（P0 POI 提取 / P1 publisher 字段）---- */
.geobox{margin:10px 0 14px;padding:12px 14px;border:1px solid var(--line);border-radius:var(--r-lg);background:var(--card)}
.geohead{font-size:var(--fs-md);font-weight:500;margin-bottom:9px;color:var(--text)}
.geonote{font-size:var(--fs-xs);font-weight:400;color:var(--muted);margin-left:8px}
.georow{display:flex;align-items:baseline;gap:6px;flex-wrap:wrap;margin-top:7px;font-size:var(--fs-sm)}
.georow>b{font-weight:500;color:var(--muted);flex:0 0 auto}
.geopill{display:inline-block;padding:2px 8px;border-radius:var(--r-full);background:var(--bg);border:1px solid var(--line);font-size:var(--fs-xs);color:var(--text)}
.geopill.dim{color:var(--muted)}
.tagpill.geo{background:var(--green-soft);color:var(--green)}
.tagpill.ext{background:var(--amber-soft);color:var(--amber)}

/* V9 滚动条。改前是 Chrome 默认样式：又粗又方、亮白底配灰条，
   在灰底卡片里特别跳。这里收窄到 10px，滑块用 content-box 挖边（视觉上 6px 粗），
   并只在 hover 时才加深 —— 平时不抢内容注意力。
   注意：只写 ::-webkit-scrollbar 覆盖 Chrome/Edge，Firefox 会回落成默认窄条，
   这是已知代价（Firefox 的 scrollbar-width 细语法在 Chrome 不生效，两头兼顾要写两套）。 */
::-webkit-scrollbar{width:10px;height:10px}
::-webkit-scrollbar-track{background:transparent}
::-webkit-scrollbar-thumb{background:#c3cbd6;border-radius:var(--r-full);
  border:2px solid transparent;background-clip:content-box}
::-webkit-scrollbar-thumb:hover{background:#98a4b3;background-clip:content-box}

/* V10 首屏骨架屏：推荐卡是首屏第一屏，此前加载中只显示一行灰字「加载中…」，
   用户不知道是卡住还是在转。这里用占位块把「要来两块内容」画出来，
   结构先占位、内容后填，比 spinner 更让人确定「东西会来」。
   动画本身在 prefers-reduced-motion 下已由上面的规则整批关掉。 */
.reco-skel{display:flex;flex-direction:column;gap:12px;margin-bottom:14px}
.reco-skel .skrow{display:flex;gap:12px;align-items:center;border:1px solid var(--line);
  border-radius:var(--r-lg);padding:14px}
.reco-skel .skline{height:12px;border-radius:var(--r-sm);background:linear-gradient(90deg,
  #eceff3 25%,#f6f8fa 37%,#eceff3 63%);background-size:400% 100%;
  animation:skelrun 1.3s ease-in-out infinite}
.reco-skel .skline + .skline{margin-top:9px}
.reco-skel .skline.w40{width:40%}
.reco-skel .skline.w70{width:70%}
.reco-skel .skline.w55{width:55%}
.reco-skel .skblock{flex:0 0 44px;height:44px;border-radius:var(--r-md);
  background:linear-gradient(90deg,#eceff3 25%,#f6f8fa 37%,#eceff3 63%);background-size:400% 100%;
  animation:skelrun 1.3s ease-in-out infinite}
@keyframes skelrun{0%{background-position:100% 0}100%{background-position:0 0}}

/* ---------- 官方创作指引（迭代 24） ----------
   配色一律走 :root 变量（迭代 23 的收敛规矩：同值才同变量），
   这里不出现任何硬编码色值，qa-css-var.mjs 会对新样式一并体检。 */
.guidebox{margin:10px 0}
.guidebox .grow{border:1px solid var(--line-blue);background:var(--blue-soft);
  border-radius:var(--r-md);padding:10px 12px}
.guidebox .gh{font-size:var(--fs-md);font-weight:600;color:var(--info-ink);
  display:flex;gap:8px;align-items:center;flex-wrap:wrap;margin-bottom:8px}
.guidebox .gtag{font-style:normal;font-size:var(--fs-xs);color:var(--info-ink);
  background:var(--card);border:1px solid var(--line-blue);
  border-radius:var(--r-full);padding:1px 8px}
.guidebox .gtag.dim{color:var(--muted);border-color:var(--line)}
.guidebox .gforms{display:flex;gap:8px;flex-wrap:wrap;margin-bottom:8px}
.guidebox .gnote{font-size:var(--fs-sm);color:var(--text-2);margin-bottom:4px}
.guidebox .gchars{font-size:var(--fs-sm)}
.guidebox .gdim{color:var(--muted);font-style:normal}
.guidebox .gess,.guidebox .gsoft{font-size:var(--fs-sm);color:var(--text-2);margin-top:4px}
.guidebox .gsoft{color:var(--muted)}
.guidebox .gass{font-size:var(--fs-xs);color:var(--amber-ink);background:var(--amber-soft);
  border-radius:var(--r-sm);padding:4px 8px;margin-top:6px}
.guidebox .gsrc{font-size:var(--fs-xs);color:var(--muted);margin-top:6px}
.guidebox .gsrc a{color:var(--info-ink)}
/* 形态切换按钮：第 1 步与第 5 步共用一套样式 */
.gform{border:1px solid var(--line);background:var(--card);border-radius:var(--r-md);
  padding:6px 10px;cursor:pointer;display:flex;flex-direction:column;gap:2px;
  min-width:120px;text-align:left;line-height:1.35}
.gform b{font-size:var(--fs-md)}
.gform span{font-size:var(--fs-xs);color:var(--muted)}
.gform.on{border-color:var(--blue);box-shadow:0 0 0 1px var(--blue) inset}
.gform .grec{font-style:normal;font-size:var(--fs-xs);color:var(--good-ink);
  background:var(--green-soft);border-radius:var(--r-full);padding:0 6px;margin-left:4px}
.formswitch{display:flex;align-items:center;gap:8px;flex-wrap:wrap;margin:8px 0}
.formswitch .fslabel{font-size:var(--fs-sm);color:var(--muted)}

/* ---------- 车型事实与参与资格（迭代 25） ----------
   这一块刻意用「中性蓝底」而不是警示色：车型事实是**中性事实基线**，
   不是错误提示——每篇都要看，红色会让人以为哪里出了问题。
   真正需要警示的只有两处：资格不符（.eligwarn，红）与检出越界（.factfix，琥珀）。 */
.factbox{margin:10px 0}
.factbox .fbox{border:1px solid var(--line-blue);background:var(--blue-soft);
  border-radius:var(--r-md);padding:10px 12px}
.factbox .fbox.warn{border-color:var(--line-amber);background:var(--amber-soft)}
.factbox .fh{font-size:var(--fs-md);font-weight:600;color:var(--info-ink);
  display:flex;gap:8px;align-items:center;flex-wrap:wrap;margin-bottom:6px}
.factbox .fbox.warn .fh{color:var(--amber-ink)}
.factbox .ftag{font-style:normal;font-size:var(--fs-xs);color:var(--info-ink);
  background:var(--card);border:1px solid var(--line-blue);
  border-radius:var(--r-full);padding:1px 8px;font-weight:400}
.factbox .ftag.dim{color:var(--muted);border-color:var(--line)}
.factbox .fname{font-size:var(--fs-lg);font-weight:600;margin-bottom:6px}
.factbox .fnote{font-size:var(--fs-sm);color:var(--muted);font-weight:400;margin-left:8px}
.factbox .fparams{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:2px 14px;
  margin-bottom:6px}
.factbox .fp{display:flex;gap:6px;font-size:var(--fs-sm);align-items:baseline}
.factbox .fp label{color:var(--muted);flex:0 0 84px}
.factbox .fp span{color:var(--text-2)}
.factbox .fp.dim{color:var(--muted)}
.factbox .fhead2{font-size:var(--fs-sm);color:var(--text-2);margin:6px 0 2px}
.factbox .flist{margin:0;padding-left:18px;font-size:var(--fs-sm);color:var(--text-2)}
.factbox .flist s{color:var(--danger-ink);text-decoration-color:var(--line-red)}
/* 「这台车也有」清单：用绿系，和上面红色的禁写清单区分开（一个是别写，一个是可以写） */
.factbox .flist.ok{color:var(--text-2);list-style:none;padding-left:0}
.factbox .flist.ok li::first-letter{color:var(--good-ink)}
.factbox .fnote2{font-size:var(--fs-xs);color:var(--muted);margin-top:3px}
.factbox .fsrc{font-size:var(--fs-xs);color:var(--muted);margin-top:6px}
.factbox .fsrc a{color:var(--info-ink)}
.factbox .fbody{font-size:var(--fs-sm);color:var(--text-2)}

/* 参与资格：只有资格不符时才出现，且**不做阻断**（判据是正则解析规则原文，会误判） */
.eligbox:empty{display:none}
.eligwarn{border:1px solid var(--line-red);background:var(--red-soft);
  border-radius:var(--r-md);padding:9px 12px;margin:10px 0}
.eligwarn b{color:var(--danger-ink);font-size:var(--fs-md)}
.eligwarn .eligwhy{font-size:var(--fs-sm);color:var(--text-2);margin:3px 0}
.eligwarn .eligcars{font-size:var(--fs-sm);color:var(--muted);margin-bottom:3px}
.eligwarn .elighint{font-size:var(--fs-xs);color:var(--muted)}
.eligwarn .mini{margin-top:6px}

/* 自检里的「按车型事实重写」区 */
.factfix{border:1px solid var(--line-amber);background:var(--amber-soft);
  border-radius:var(--r-md);padding:9px 12px;margin-top:8px}
.factfix .ffhead{font-size:var(--fs-md);font-weight:600;color:var(--amber-ink);margin-bottom:4px}
.factfix .fflist{margin:0 0 8px;padding-left:18px;font-size:var(--fs-sm);color:var(--text-2)}
.factfix .fflist s{color:var(--danger-ink);text-decoration-color:var(--line-red);margin-right:4px}
.factfix .fflist .dim{color:var(--muted)}
.factfix .hint{margin-left:8px}
