/* v2 样式（第十八轮三 tab 分流版）：复用 style.css 变量，补充素材卡/筛选/笔记样式 */
body.auth-pending > *:not(#v2Lock) { visibility: hidden; }
body.auth-pending #v2Lock { display: flex !important; visibility: visible; background: var(--bg, #f7f7f7); }
.v2-sec-title {
  display:flex; align-items:baseline; gap:8px;
  font-weight:600; font-size:14px; color:var(--red,#9E0B22);
  margin:14px 16px 8px;
}
.v2-sec-note { font-weight:400; font-size:12px; color:var(--gray,#888); }

.v2-sel {
  flex:1; min-width:0; padding:8px 6px; font-size:13px;
  background:var(--card,#fff); color:var(--text,#222);
  border:1px solid var(--border,#ddd); border-radius:8px;
}

/* 素材卡（金句/案例/对策） */
.mcard {
  background:var(--card,#fff); border:1px solid var(--border,#e5e5e5);
  border-radius:10px; padding:12px 14px; margin:8px 16px;
  box-shadow:0 1px 3px rgba(0,0,0,.04);
}
.mcard .mtype {
  display:inline-block; font-size:11px; padding:2px 8px; border-radius:20px;
  color:#fff; margin-bottom:6px;
}
.mtype.golden { background:#c9a227; }
.mtype.case { background:#3a7bc8; }
.mtype.countermeasure { background:#3c8c5a; }
.mcard .mcontent { font-size:14.5px; line-height:1.6; color:var(--text,#222); white-space:pre-wrap; }
.mcard .mcontent.jinju { font-weight:500; }

/* 素材状态条 */
.mstatus-row { display:flex; flex-wrap:wrap; gap:6px; margin-top:10px; }
.mstatus { font-size:11.5px; padding:4px 10px; border-radius:20px; cursor:pointer;
  border:1px solid var(--border,#ddd); color:var(--gray,#666); background:var(--card,#fff); }
.mstatus.on { background:var(--red,#9E0B22); color:#fff; border-color:var(--red,#9E0B22); }

/* 素材笔记 */
.mnote { margin-top:8px; font-size:12.5px; color:var(--gray,#555); background:rgba(0,0,0,.03); border-radius:8px; padding:8px 10px; }
.mnote b { color:var(--text,#222); }
.note-edit { margin-top:8px; display:flex; gap:6px; }
.note-edit textarea { flex:1; font-size:13px; border:1px solid var(--border,#ddd); border-radius:8px; padding:8px; min-height:52px; background:var(--card,#fff); color:var(--text,#222); }
.note-edit button { font-size:12px; padding:6px 10px; border:0; border-radius:8px; background:var(--red,#9E0B22); color:#fff; cursor:pointer; align-self:flex-end; }
.note-edit .ne-ops { display:flex; flex-direction:column; gap:5px; align-self:flex-end; }
.note-edit .ne-cancel { background:#eee; color:#555; }
.note-edit button:disabled { opacity:.55; cursor:default; }
button:disabled { opacity:.6; cursor:default; }

/* 专题包详情筛选态：命中项目的上下文行 */
.pkg-item .pi-hit { font-size:11px; color:var(--gray,#888); margin-bottom:4px; }

/* 完成度进度条（C-2c：动态百分比由内联 style 改为语义化 <progress max=100
   value=N>——value 是数值属性、非样式通道，CSP 不再阻止；外观在此收敛，
   不再需要插入后的 CSSOM 回填） */
.progress { height:4px; background:rgba(0,0,0,.08); border-radius:4px; overflow:hidden; margin-top:6px; }
.progress > progress { display:block; width:100%; height:100%; border:0; padding:0;
  background:transparent; -webkit-appearance:none; appearance:none; }
.progress > progress::-webkit-progress-bar { background:transparent; }
.progress > progress::-webkit-progress-value { background:var(--red,#9E0B22); }
.progress > progress::-moz-progress-bar { background:var(--red,#9E0B22); }

/* 文章卡（v2 列表） */
.v2-card { background:var(--card,#fff); border:1px solid var(--border,#e5e5e5);
  border-radius:10px; padding:12px 14px; margin:8px 16px; cursor:pointer; }
.v2-card .tt { font-size:15px; font-weight:600; line-height:1.4; color:var(--text,#222); }
.v2-card .meta { display:flex; flex-wrap:wrap; gap:6px; align-items:center; margin-top:6px; font-size:11.5px; color:var(--gray,#888); }
.v2-card .meta .lv { padding:1px 7px; border-radius:10px; font-size:10.5px; }
.lv.featured { background:#c9a227; color:#fff; }
.lv.qualified { background:#3a7bc8; color:#fff; }
.lv.supplementary { background:#7b7b7b; color:#fff; }

/* 3 Tab 底部栏（第十八轮：精选 | 专题 | 文章库，三项平均分配宽度） */
.tabbar3 .tab { font-size:12px; padding:9px 0 7px; }
.tabbar3 .tab svg { width:24px; height:24px; }

/* 文章库分段切换：文章 | 金句本（第十八轮） */
#libSeg { display:flex; gap:0; border:1px solid var(--border,#ddd);
  border-radius:10px; overflow:hidden; margin:12px 16px 0; margin-bottom:10px; }
#libSeg button { flex:1; padding:9px 0; font-size:13px; border:0;
  background:var(--card,#fff); color:var(--gray,#666); cursor:pointer; }
#libSeg button.active { background:var(--red,#9E0B22); color:#fff; }

/* 顶部栏精读专题包入口 */
.study-entry {
  display:flex; align-items:center; gap:4px; cursor:pointer;
  padding:4px 10px; border-radius:16px; font-size:12px; color:var(--red,#9E0B22);
  background:rgba(158,11,34,.08); border:1px solid rgba(158,11,34,.25);
  margin-left:auto;
}
.study-entry i { font-style:normal; font-weight:500; }
.study-entry:active { background:rgba(158,11,34,.18); }

/* 阅读页文章头 */
.v2-article-head { padding:6px 4px 10px; border-bottom:1px solid var(--border,#eee); margin-bottom:12px; }
.v2-article-head h2 { font-size:18px; line-height:1.5; margin:0 0 8px; color:var(--text,#222); }
.v2-article-head .meta { font-size:12px; color:var(--gray,#888); }
/* 文章阅读层需叠于专题包详情之上（包内条目"查看全文"时两层同开，.reader 同 z-index 靠 DOM 顺序会反之） */
#v2Reader { z-index: 120; }

/* ===== 专题包升级 UI（2026-08-28 审计修复轮） ===== */

/* 离线同步状态条（C-2c：初始隐藏交由 .is-hidden 类表达——原为内联
   display:none 与 el.style.display 切换；此处不再声明 display:none，
   否则移除 .is-hidden 后仍不可见） */
.sync-bar { margin:8px 16px 0; padding:8px 12px; font-size:12px;
  background:rgba(201,162,39,.12); border:1px solid rgba(201,162,39,.4);
  border-radius:8px; color:#8a6d0d; cursor:pointer; }

/* 原生按钮语义化（RC21-I）：设置图标按钮与阅读页返回按钮 */
.icon-btn { background:none; border:0; padding:2px; margin:0; cursor:pointer;
  color:inherit; display:inline-flex; align-items:center; border-radius:8px; }
.reader-top .back { background:none; border:0; padding:4px 6px; margin:0;
  font:inherit; color:inherit; cursor:pointer; display:inline-flex;
  align-items:center; gap:4px; border-radius:8px; }
.tabbar .tab { background:none; border:0; padding:0; margin:0; font:inherit;
  color:inherit; cursor:pointer; }
/* 键盘焦点可见（RC21-I）：不只依赖颜色 */
:focus-visible { outline:2px solid var(--red,#9E0B22); outline-offset:2px; }

/* 链接样式按钮（第二十轮 RC20-J）：原先 href="javascript:void(0)" 的动作
   锚点全部改为 <button class="lnk">，减少脚本协议面；视觉与原链接一致 */
.lnk { background:none; border:0; padding:0; margin:0; font:inherit; line-height:inherit;
  color:inherit; cursor:pointer; text-decoration:underline; }

/* 模块头：重生成入口 */
.pkg-mod .mod-regen { margin-left:auto; font-size:11px; font-weight:400;
  color:var(--gray,#888); text-decoration:underline; cursor:pointer; }

/* 金句"改写"角标 */
.qm { display:inline-block; font-size:10.5px; padding:1px 6px; border-radius:8px;
  background:#eee4c8; color:#8a6d0d; margin-left:4px; vertical-align:middle; }

/* 项目内搜索行（关键词 + 模块 + 清空） */
.pkg-search { display:flex; gap:6px; margin-top:10px; }
.pkg-search input { flex:1; min-width:0; padding:8px 8px; font-size:13px;
  border:1px solid var(--border,#ddd); border-radius:8px; background:var(--card,#fff); color:var(--text,#222); }
.pkg-search .v2-sel { flex:0 0 108px; }
.pkg-search .mini-btn { flex:0 0 auto; }

/* 版本 / 已删除 面板 */
.ver-panel { margin-top:10px; border:1px solid var(--border,#e5e5e5);  border-radius:10px; background:var(--card,#fff); padding:10px 12px; font-size:12.5px; }
.ver-title { font-weight:600; margin-bottom:8px; color:var(--text,#222); }
.ver-row { padding:6px 0; border-bottom:1px dashed var(--border,#eee); line-height:1.5; }
.ver-row:last-child { border-bottom:0; }
.ver-ops { float:right; }
.ver-ops a, .ver-ops .lnk { color:var(--red,#9E0B22); margin-left:8px; text-decoration:underline; }

/* blocked 旧操作人工处理面板（第四轮 §4.3）：全屏居中浮层 */
.blocked-panel { position:fixed; inset:auto 16px 80px; z-index:60; max-width:520px;
  box-shadow:0 8px 30px rgba(0,0,0,.18); max-height:60vh; overflow:auto; }
.ver-art { margin:8px 0; }
.ver-mod { font-weight:600; color:var(--red,#9E0B22); font-size:12px; margin:6px 0 2px; }
.ver-item { color:var(--text,#222); padding:2px 0 2px 10px; line-height:1.5; }

.v2-abox { background:rgba(158,11,34,.05); border-left:3px solid var(--red,#9E0B22);
  padding:10px 12px; border-radius:0 8px 8px 0; margin:10px 0; font-size:13.5px; line-height:1.6; color:var(--text,#222); }
.v2-abox.arg { background:rgba(58,123,200,.07); border-left-color:#3a7bc8; }
.v2-notes { margin:12px 0; }
.v2-notes .ntitle { font-size:12px; font-weight:600; color:var(--gray,#666); margin-bottom:6px; }
/* 第十四轮 §6.1：加载骨架与采集来源三态 */
.skeleton{height:64px;border-radius:10px;margin:10px 0;
  background:linear-gradient(90deg,#eee 25%,#f5f5f5 37%,#eee 63%);
  background-size:400% 100%;animation:sk 1.2s ease infinite}
@keyframes sk{0%{background-position:100% 50%}100%{background-position:0 50%}}
.src-badge{display:inline-block;padding:2px 8px;border-radius:10px;font-size:12px;margin:2px}
.src-ok{background:#e6f4e6;color:#1a6b1a}
.src-empty{background:#fff6e0;color:#8a6100}
.src-failed{background:#fdeaea;color:#9e0b22}

/* ===== 第十七轮 C/D：结构化拆解 + 重点句分类高亮 ===== */
/* 五色方案（参照申论拆解法：金句红/论点橙/案例绿/对策蓝/可复用紫），
   用半透明底色+彩色下划线，浅色/夜间主题都可读 */
mark.hl-golden{background:rgba(192,57,43,.13);color:inherit;
  border-bottom:2px solid #c0392b;padding:0 1px;border-radius:2px}
mark.hl-argument{background:rgba(217,119,6,.14);color:inherit;
  border-bottom:2px solid #d97706;padding:0 1px;border-radius:2px}
mark.hl-case{background:rgba(46,125,50,.13);color:inherit;
  border-bottom:2px solid #2e7d32;padding:0 1px;border-radius:2px}
mark.hl-countermeasure{background:rgba(29,111,184,.13);color:inherit;
  border-bottom:2px solid #1d6fb8;padding:0 1px;border-radius:2px}
mark.hl-reusable{background:rgba(123,63,160,.13);color:inherit;
  border-bottom:2px solid #7b3fa0;padding:0 1px;border-radius:2px}
.bd-off mark[class^="hl-"]{background:transparent!important;border-bottom:0;padding:0}

/* 拆解图例 + 开关 */
.bd-bar{display:flex;flex-wrap:wrap;align-items:center;gap:6px;margin:0 16px 10px;
  padding:8px 12px;border:1px solid var(--border,#eee);border-radius:10px;
  background:var(--card,#fff);font-size:11.5px}
.bd-bar.bd-pending{background:var(--chip,#f2f2f2);color:var(--muted,#666);font-size:12px;padding:8px 12px;border-radius:8px;}
.bd-chip{display:inline-flex;align-items:center;gap:4px;color:var(--gray,#666)}
.bd-dot{width:9px;height:9px;border-radius:3px;display:inline-block}
.bd-dot.golden{background:#c0392b}.bd-dot.argument{background:#d97706}
.bd-dot.case{background:#2e7d32}.bd-dot.countermeasure{background:#1d6fb8}
.bd-dot.reusable{background:#7b3fa0}
.bd-toggle{margin-left:auto;cursor:pointer;text-decoration:underline;color:var(--red,#9E0B22)}

/* 段落角色徽标 + 拆解解析行 */
.v2-para{position:relative;margin:0 16px 14px}
.para-role{display:inline-block;font-size:10px;line-height:1;padding:3px 7px;
  border-radius:8px;color:#fff;margin-right:6px;vertical-align:2px;white-space:nowrap}
.para-role.r-opening{background:#8a8f98}.para-role.r-central{background:#d97706}
.para-role.r-sub{background:#b45309}.para-role.r-argument{background:#5b6bb5}
.para-role.r-case{background:#2e7d32}.para-role.r-countermeasure{background:#1d6fb8}
.para-role.r-ending{background:#7b3fa0}
.para-note{font-size:11.5px;color:var(--gray,#888);margin-top:5px;
  padding-left:2px;line-height:1.5}
.bd-off .para-role,.bd-off .para-note{display:none}
.bd-kw{margin:0 16px 12px;font-size:12px;color:var(--gray,#666)}
.bd-kw .chip{margin-right:4px}

/* ===== 第十七轮 E：划词摘抄 + 金句本 ===== */
.v2-selbar{position:absolute;z-index:130;transform:translateY(-120%);
  background:var(--red,#9E0B22);color:#fff;border-radius:8px;padding:6px 12px;
  font-size:12.5px;cursor:pointer;box-shadow:0 4px 14px rgba(0,0,0,.25);
  user-select:none;-webkit-user-select:none}
.v2-selbar:active{opacity:.85}
.gn-card{background:var(--card,#fff);border:1px solid var(--border,#e5e5e5);
  border-radius:10px;padding:12px 14px;margin:8px 16px}
.gn-card .gn-quote{font-size:14.5px;line-height:1.7;color:var(--text,#222);
  white-space:pre-wrap;font-weight:500}
.gn-card .gn-src{font-size:11px;color:var(--gray,#888);margin-top:6px;cursor:pointer}
.gn-card .gn-src u{color:var(--red,#9E0B22)}
.gn-card .gn-note{font-size:12.5px;color:var(--gray,#555);margin-top:6px;
  background:rgba(0,0,0,.03);border-radius:8px;padding:8px 10px}
.gn-empty{margin:14px 16px;font-size:12.5px;color:var(--gray,#888);line-height:1.7}

/* ===== 第十七轮 F：搜索框标签联想 ===== */
.searchbar{position:relative}
.v2-tagsug{position:absolute;left:12px;right:12px;top:100%;z-index:50;
  background:var(--card,#fff);border:1px solid var(--border,#ddd);
  border-radius:0 0 10px 10px;box-shadow:0 6px 18px rgba(0,0,0,.12);
  max-height:240px;overflow:auto}
.v2-tagsug .ts-item{padding:9px 14px;font-size:13px;color:var(--text,#222);
  cursor:pointer;display:flex;justify-content:space-between;gap:8px}
.v2-tagsug .ts-item:active,.v2-tagsug .ts-item:hover{background:rgba(158,11,34,.06)}
.v2-tagsug .ts-count{font-size:11px;color:var(--gray,#888);flex-shrink:0}
.v2-tagsug .ts-head{padding:6px 14px 2px;font-size:10.5px;color:var(--gray,#888)}

/* ===== RC26 阶段 C-2c：内联样式迁移的语义/工具类（CSP 强制化前置） =====
   原 104 处内联 style（静态 HTML 属性 + JS 动态模板拼接）在此收敛为有限
   类集：style-src 阻止 style 属性字符串（含 innerHTML 内的 style=），类名
   则是普通属性通道。命名即文档。**本节必须位于文件末尾**——工具类与组件
   类同特异性时（.v2-sel 与 .grow-2）由后声明者胜出，移动本节会改变层叠。 */

/* 运行时显隐：取代 el.style.display = "none"/"" 与初始内联 display:none */
.is-hidden { display: none !important; }

/* 管理员专属元素：默认隐藏、body.is-admin 时揭示。原为内联 display:none +
   JS 逐元素清空 style.display；四处元素的可见态均为 display:block（来自
   .btn-main/.btn-ghost/.hint 自身规则），故揭示规则用 block。 */
.admin-only { display: none; }
body.is-admin .admin-only { display: block; }

/* 间距 / 尺寸 */
.mt-4 { margin-top:4px; } .mt-6 { margin-top:6px; } .mt-8 { margin-top:8px; }
.mt-10 { margin-top:10px; } .mt-12 { margin-top:12px; } .mt-14 { margin-top:14px; }
.mt-18 { margin-top:18px; }
.ml-6 { margin-left:6px; } .mr-8 { margin-right:8px; } .mr-10 { margin-right:10px; }
.w-full { width:100%; }

/* 浮动动作（笔记操作 / 版本面板 / blocked 面板表头） */
.fr { float:right; }
.fr-muted { float:right; color:var(--gray,#888); }
.fr-danger { float:right; color:var(--red,#9E0B22); }
.fr-pointer { float:right; cursor:pointer; }
.pointer { cursor:pointer; }

/* 文本色（品牌红 / 错误红 / 信息蓝 / 两级灰） */
.text-brand { color:var(--red,#9E0B22); }
.text-danger { color:#c0392b; }
.text-info { color:#3a7bc8; }
.text-muted { color:var(--gray,#888); }
.text-muted-soft { color:#999; }

/* 弹性 */
.grow { flex:1; } .grow-2 { flex:2; }

/* 语义容器 */
.btn-row { display:flex; gap:8px; margin-top:10px; }
.para-flush { margin:0; }
.empty-inline { margin:20px 16px; }
.empty-inline.lg { margin:24px 16px; }
.tail-spacer { height:80px; }
.lock-hint { margin:8px 0 12px; }
.sep-text { color:var(--gray,#888); font-size:12px; }
.center-block { margin:60px auto; text-align:center; }
#v2DateRow { gap:6px; align-items:center; flex-wrap:wrap; }
#v2SelDate { min-width:120px; }

/* 文章"已下架"徽标（原 v2.js 模板内联色） */
.chip-off { background:var(--warn-bg,#f6e6c8); color:#8a5b00; }

/* 链接形态的 ghost 按钮（设置页"管理后台"入口：<a> 需要去掉下划线、
   居中并沿用按钮观感；原为一整串内联样式） */
.btn-ghost.as-link { text-align:center; text-decoration:none; color:var(--text,#222);
  border-color:var(--border,#ddd); border-radius:8px; padding:9px 0; font-size:13.5px; }
/* 链接形态的 mini 按钮（文章详情"原文"外链：同为 <a> 需按钮观感） */
.mini-btn.as-link { flex:1; display:block; text-align:center; text-decoration:none;
  color:var(--text,#222); border-color:var(--border,#ddd); border-radius:8px;
  padding:7px 0; font-size:12.5px; }

/* 原文容器（原 v2.js 模板内 style 常量字符串） */
.raw-content { font-size:15px; line-height:1.9; color:var(--text,#222); padding:0 16px 30px; }
.raw-content-pre { white-space:pre-wrap; }

/* 提示条配色：原为 JS 直写 el.style.background/color 的三元表达式——有限
   状态改用类表达；真值一律落到"错误"态，不存在任意颜色/字符串通道 */
#v2Toast { background:#333; }
#v2Toast.toast-err { background:#c0392b; }
#pkgTaskBadge.text-danger { color:#c0392b; }
#pkgTaskBadge.text-info { color:#3a7bc8; }

/* ===== 管理后台页样式（原 admin.html 内联 <style> 块，按页作用域收敛：
   .panel/.hint/.grid/.tag/table 等通用名此前会外溢到其它页面） ===== */
body.admin-page { margin:0; padding:16px 14px 60px; max-width:860px; margin-inline:auto; }
body.admin-page h1 { font-size:20px; margin:4px 0 12px; }
body.admin-page table { width:100%; border-collapse:collapse; font-size:13.5px; background:#fff;
  border:1px solid var(--border,#e5e5e5); border-radius:10px; overflow:hidden; }
body.admin-page th, body.admin-page td { padding:8px 10px; text-align:left;
  border-bottom:1px solid var(--border,#eee); }
body.admin-page th { background:#f7f7f8; font-weight:600; }
body.admin-page td .ops a { color:#9E0B22; margin-right:8px; cursor:pointer; }
body.admin-page .tag { display:inline-block; padding:1px 8px; border-radius:10px; font-size:12px; }
body.admin-page .tag.admin { background:#fdecea; color:#9E0B22; }
body.admin-page .tag.user { background:#eef4fd; color:#2a5aa8; }
body.admin-page .tag.on { background:#e8f6ec; color:#1d7a3d; }
body.admin-page .tag.off { background:#f4f4f4; color:#888; }
body.admin-page .grid { display:flex; gap:8px; flex-wrap:wrap; }
body.admin-page .grid > * { flex:1; min-width:140px; }
body.admin-page input, body.admin-page select { padding:9px 10px;
  border:1px solid var(--border,#ddd); border-radius:8px; font-size:14px;
  width:100%; box-sizing:border-box; }
body.admin-page .panel { background:#fff; border:1px solid var(--border,#e5e5e5);
  border-radius:12px; padding:14px; margin-bottom:16px; }
body.admin-page .panel h4 { margin:0 0 10px; }
body.admin-page .hint { color:#888; font-size:12.5px; line-height:1.6; }

/* 管理后台即时提示条（原 admin.js 的 el.style.cssText 样式串——cssText 属
   style 属性字符串通道、被 CSP 阻止；成功/失败配色改由类切换） */
.toast-plain { position:fixed; left:50%; transform:translateX(-50%); bottom:70px;
  padding:10px 16px; border-radius:8px; color:#fff; z-index:99; max-width:80%;
  font-size:13px; background:#333; }
.toast-plain.toast-err { background:#c0392b; }

/* ===== 初始化页样式（原 setup.html 内联 <style> 块，按页作用域收敛） ===== */
body.setup-page { display:flex; align-items:center; justify-content:center;
  min-height:100vh; margin:0; }
body.setup-page .lock-screen { position:static; background:transparent; }
body.setup-page .lock-box { width:min(360px,90vw); }
body.setup-page .lock-box h3 { margin:0 0 4px; }
body.setup-page input { width:100%; box-sizing:border-box; padding:10px 12px;
  border:1px solid var(--border,#ddd); border-radius:8px; font-size:15px; }
body.setup-page .lock-hint { margin:8px 0 14px; }
