:root { --bg: #f5f5f5; --bg2: #fafafa; --card: #fff; --border: #e5e5e5; --primary: #1677ff; --primary-bg: #e6f4ff; --text: #1f1f1f; --text2: #666; --text3: #999; --success: #52c41a; --warn: #faad14; --warning: #faad14; --danger: #ff4d4f; --radius: 6px; }

        /* === 差异语义色板（新增/删除/修改）==========
           三色分工固定：绿=新增、红=删除、琥珀=修改，全站一致。
           每色三档用途：bg 卡片底 / border 描边 / fg 文字与图标。
           刻意压低饱和度，只做"提示"不做"抢戏"——正文始终是主角。
           底色透明化 + 纯浅色兜底，为后续暗色沿用同一套变量留好接口。 */
        :root {
            --diff-add-bg: #f2fbf4; --diff-add-bg-soft: #f7fdf9; --diff-add-border: #d8ebdc;
            --diff-add-fg: #166534; --diff-add-hl: #8fd5a6;  --diff-add-hl-strong: #3fae69;
            --diff-del-bg: #fff6f6; --diff-del-bg-soft: #fffafa; --diff-del-border: #f6dcdc;
            --diff-del-fg: #a81c47; --diff-del-hl: #eea8b8;  --diff-del-hl-strong: #d1517a;
            --diff-mod-bg: #fffaef; --diff-mod-bg-soft: #fffdf7; --diff-mod-border: #f0e2c2;
            --diff-mod-fg: #a34a09; --diff-mod-hl: #f0cd80;  --diff-mod-hl-strong: #c88a13;
        }
        * { margin: 0; padding: 0; box-sizing: border-box; }
        body { font-family: -apple-system, "Microsoft YaHei", sans-serif; background: var(--bg); color: var(--text); height: 100vh; overflow: hidden; font-size: 13px; }

        /* === 顶栏 === */
        .topbar { height: 42px; background: var(--card); border-bottom: 1px solid var(--border); display: flex; align-items: center; padding: 0 16px; gap: 10px; }
        .topbar h1 { font-size: 14px; font-weight: 600; color: var(--primary); }
        .tab-btn { padding: 5px 14px; border: none; background: none; cursor: pointer; font-size: 12px; color: var(--text2); border-radius: 4px; }
        .tab-btn.active { background: var(--primary); color: #fff; }
        .tab-btn:hover:not(.active) { background: #f0f0f0; }
        .topbar-right { margin-left: auto; display: flex; gap: 6px; }
        .top-btn { padding: 3px 8px; border: 1px solid var(--border); border-radius: 4px; background: none; cursor: pointer; font-size: 11px; color: var(--text3); }
        .top-btn:hover { border-color: var(--primary); color: var(--primary); }
        .top-btn.active { background: #1e1e1e; color: #4ec9b0; border-color: #333; }

        /* === 主区域 === */
        .main { height: calc(100vh - 42px); min-height: 0; display: flex; overflow: hidden; }

        /* === 页面容器 === */
        .page { display: none; flex: 1; min-width: 0; min-height: 0; }
        .page.active { display: flex; }

        /* ==================== 知识库管理页 ==================== */
        .kb-page.active { flex-direction: row; }
.kb-left { width: 320px; min-width: 200px; max-width: 500px; background: var(--card); border-right: 1px solid var(--border); display: flex; flex-direction: column; overflow: hidden; position: relative; transition: width .28s cubic-bezier(.4,0,.2,1), padding .28s cubic-bezier(.4,0,.2,1), border-right-width .28s cubic-bezier(.4,0,.2,1); }
.kb-left.collapsed { width: 0; min-width: 0; padding: 0; border-right: none; overflow: hidden; }
/* 滑动收缩时内容不换行、不挤压变形：内容定宽跟随外层裁剪，形成「推入/拉出」观感 */
.kb-left > * { flex: 0 0 auto; }
.kb-left .doc-list-area { flex: 1 1 auto; min-height: 0; }
@media (prefers-reduced-motion: reduce) { .kb-left { transition: none; } }
.kb-left .resize-handle { position: absolute; top: 0; right: -4px; bottom: 0; width: 8px; cursor: col-resize; z-index: 10; }
.kb-left .resize-handle:hover, .kb-left .resize-handle.dragging { background: var(--primary); opacity: 0.3; }
        .kb-toggle { width: 16px; min-width: 16px; height: 40px; background: var(--card); border: 1px solid var(--border); border-left: none; border-radius: 0 4px 4px 0; cursor: pointer; display: flex; align-items: center; justify-content: center; font-size: 10px; color: var(--text3); align-self: center; margin-left: -1px; }
        .kb-toggle:hover { color: var(--primary); }
        .kb-right { flex: 1; min-width: 0; display: flex; flex-direction: column; background: var(--bg); }
        /* 预审核模式：审核结果贴左，预览区域占据右侧剩余空间。 */
        .kb-right.review-mode { position: relative; display: grid; grid-template-columns: minmax(240px, var(--review-panel-width, 32%)) minmax(420px, 1fr); grid-template-rows: 28px minmax(0, 1fr); min-width: 0; }
        .kb-right.review-mode .kb-tabs { grid-column: 1 / -1; grid-row: 1; }
        .kb-right.review-mode .review-panel { grid-column: 1; grid-row: 2; min-width: 0; min-height: 0; border-right: 1px solid var(--border); }
        .kb-right.review-mode .preview-panel { grid-column: 2; grid-row: 2; min-width: 0; min-height: 0; border-left: 1px solid var(--border); }
        .kb-right.review-mode[data-review-layout="side-by-side"] { grid-template-columns: minmax(240px, var(--review-panel-width, 32%)) minmax(420px, 1fr); grid-template-rows: 28px minmax(0, 1fr); }
        .kb-right.review-mode[data-review-layout="stacked"] { grid-template-columns: minmax(0, 1fr); grid-template-rows: 28px minmax(260px, 1fr) minmax(240px, var(--review-stack-height, 48vh)); }
        .kb-right.review-mode[data-review-layout="stacked"] .review-panel { grid-column: 1; grid-row: 2; border-right: none; border-bottom: 1px solid var(--border); }
        .kb-right.review-mode[data-review-layout="stacked"] .preview-panel { grid-column: 1; grid-row: 3; border-left: none; }
        .kb-right.review-mode[data-review-layout="single"] { grid-template-columns: minmax(0, 1fr); grid-template-rows: 28px minmax(0, 1fr); }
        .kb-right.review-mode[data-review-layout="single"] .review-panel { display: none; }
        .kb-right.review-mode[data-review-layout="single"] .preview-panel { grid-column: 1; grid-row: 2; border-left: none; }
        .kb-right.review-mode[data-review-preview="closed"] { grid-template-columns: minmax(0, 1fr); grid-template-rows: 28px minmax(0, 1fr); }
        .kb-right.review-mode[data-review-preview="closed"] .review-panel { display: flex; grid-column: 1; grid-row: 2; border-right: none; border-bottom: none; }
        .kb-right.review-mode[data-review-preview="closed"] .preview-panel { display: none; }
        .review-resize-handle { display: none; position: absolute; top: 28px; bottom: 0; left: var(--review-panel-width, 32%); width: 9px; transform: translateX(-50%); cursor: col-resize; z-index: 20; }
        .review-resize-handle::after { content: ''; position: absolute; top: 0; bottom: 0; left: 4px; width: 1px; background: var(--border); }
        .kb-right.review-mode[data-review-layout="side-by-side"]:not([data-review-preview="closed"]) .review-resize-handle { display: block; }
        .review-stack-resize-handle { display: none; position: absolute; left: 0; right: 0; bottom: var(--review-stack-height, 48vh); height: 9px; transform: translateY(50%); cursor: row-resize; z-index: 20; }
        .review-stack-resize-handle::after { content: ''; position: absolute; left: 0; right: 0; top: 4px; height: 1px; background: var(--border); }
        .kb-right.review-mode[data-review-layout="stacked"]:not([data-review-preview="closed"]) .review-stack-resize-handle { display: block; }
        .review-resize-handle:hover, .review-resize-handle.dragging, .review-stack-resize-handle:hover, .review-stack-resize-handle.dragging { background: rgba(22,119,255,.12); }
        .review-resize-handle:hover::after, .review-resize-handle.dragging::after, .review-stack-resize-handle:hover::after, .review-stack-resize-handle.dragging::after { background: var(--primary); width: 2px; }
        .kb-right.review-mode[data-review-preview="closed"] #reviewPreviewContent { display: none !important; }
        /* 审核区内的旧比较图片不再占用空间，真实预览统一由 N/B 双窗格承载。 */
        .kb-right.review-mode #cmpPdfArea, .kb-right.review-mode #vcPagesContainer { display: none !important; }

        /* 左侧：上传区 */
        .upload-box { padding: 10px; border-bottom: 1px solid var(--border); }
        .upload-zone { border: 2px dashed #d9d9d9; border-radius: var(--radius); padding: 8px 12px; cursor: pointer; display: flex; align-items: center; gap: 6px; font-size: 12px; color: var(--text2); transition: all 0.2s; }
        .upload-zone:hover { border-color: var(--primary); background: var(--primary-bg); }
        .upload-zone.disabled { opacity: 0.4; pointer-events: none; }
        .upload-zone input { display: none; }
        .doc-label-input { width: 100%; box-sizing: border-box; margin-top: 6px; padding: 6px 10px; border: 1px solid var(--border); border-radius: var(--radius); font-size: 12px; background: var(--bg2); color: var(--text); outline: none; }
        .doc-label-input:focus { border-color: var(--primary); }
        .doc-label-tag { display: inline-block; margin-left: 4px; padding: 1px 6px; border-radius: 3px; background: var(--primary); color: #fff; font-size: 11px; font-weight: 600; }
        .doc-label-placeholder { background: #eaf3ff; color: var(--primary); font-weight: 500; }

        /* 左侧：步骤进度 */
        .step-area { padding: 8px 10px; border-bottom: 1px solid var(--border); display: none; font-size: 11px; background: #fff8f0; border-left: 3px solid var(--warn); }
        .step-area.show { display: block; }
        .step-title { font-weight: 500; margin-bottom: 4px; display: flex; justify-content: space-between; }
        .step-cancel { color: var(--danger); cursor: pointer; }
        .step-item { padding: 4px 0; display: flex; align-items: center; gap: 6px; flex-wrap: wrap; }
        .step-item .dot { width: 12px; height: 12px; border-radius: 50%; display: flex; align-items: center; justify-content: center; font-size: 8px; flex: 0 0 12px; }
        .step-item .dot.done { background: var(--success); color: #fff; }
        .step-item .dot.active { background: var(--primary); color: #fff; animation: pulse 1.5s infinite; }
        .step-item .dot.pending { background: #e8e8e8; color: #bbb; }
        .step-item .step-label { min-width: 78px; }
        .step-item .step-pct { color: var(--primary); font-size: 10px; min-width: 28px; text-align: right; }
        .step-item .time { margin-left: auto; color: var(--text3); font-size: 10px; }
        .step-item .step-bar { flex: 1 1 72px; min-width: 60px; margin-left: 18px; }

        /* 左侧：审核完成提示 */
        .review-btn { display: none; margin: 8px 10px; padding: 8px; background: #fff7e6; border: 1px solid var(--warn); border-radius: var(--radius); cursor: pointer; font-size: 11px; color: #d46b08; text-align: center; }
        .review-btn:hover { background: #fff1b8; }
        .review-btn.show { display: block; }

        /* 左侧：文档列表 */
        .doc-list-area { flex: 1; overflow-y: auto; padding: 6px 8px; }
        .doc-list-title { font-size: 11px; color: var(--text3); font-weight: 600; padding: 4px 6px; display: flex; align-items: center; justify-content: space-between; }
.doc-list-title .reset-btn { font-size: 10px; color: #fff; background: var(--danger); padding: 2px 8px; border-radius: 3px; cursor: pointer; opacity: 0.7; transition: opacity 0.15s; }
.doc-list-title .reset-btn:hover { opacity: 1; }
        .doc-item { padding: 6px 8px; border-radius: 4px; cursor: pointer; display: flex; align-items: flex-start; gap: 6px; font-size: 12px; transition: background 0.15s; border-left: 3px solid transparent; }
        .doc-item:hover { background: #f5f5f5; }
        .doc-item.active { background: var(--primary-bg); border-left-color: var(--primary); }
        .doc-item .id { color: var(--primary); font-weight: 700; min-width: 20px; font-size: 11px; margin-top: 2px; }
        .doc-item .info { flex: 1; overflow: hidden; }
        .doc-item .name { font-size: 12px; line-height: 1.4; word-break: break-all; }
        .doc-item .stats { font-size: 10px; color: var(--text3); margin-top: 2px; }
        .doc-item.pending { opacity: 0.6; font-style: italic; }
        .doc-item.inactive { opacity: 0.58; filter: grayscale(0.25); }
        .doc-item.inactive:hover { opacity: 0.82; }
        .doc-status-tag { display: inline-block; margin-left: 4px; padding: 1px 5px; border-radius: 3px; background: #f0f0f0; color: var(--text3); font-size: 10px; font-weight: 500; }
        .doc-status-tag.primary { background: #e8f7ee; color: #27824b; }
        .history-title { margin-top: 8px; border-top: 1px solid var(--border); padding-top: 10px; }
        .primary-doc-btn { border: 1px solid var(--border); border-radius: 3px; background: var(--card); color: var(--primary); padding: 2px 5px; font-size: 10px; cursor: pointer; white-space: nowrap; }
        .primary-doc-btn:hover { border-color: var(--primary); background: var(--primary-bg); }
        .doc-item .del-btn { opacity: 0; color: var(--danger); cursor: pointer; font-size: 10px; }
        .doc-item:hover .del-btn { opacity: 1; }

        /* 右侧：Tab 栏 */
        .kb-tabs { height: 36px; background: var(--card); border-bottom: 1px solid var(--border); display: flex; align-items: center; padding: 0 12px; gap: 4px; }
        .kb-tab { padding: 4px 12px; font-size: 12px; border: none; background: none; cursor: pointer; color: var(--text2); border-radius: 4px; }
        .kb-tab.active { background: var(--primary-bg); color: var(--primary); font-weight: 500; }
        .kb-tab:hover:not(.active) { background: #f5f5f5; }

        /* 右侧：文档预览面板 */
        .preview-panel { flex: 1; display: none; overflow: hidden; }
        .preview-panel.active { display: flex; flex-direction: column; }
        .preview-empty { flex: 1; display: flex; flex-direction: column; align-items: center; justify-content: center; gap: 10px; color: #ccc; text-align: center; padding: 24px; }
        .preview-empty .pe-icon { font-size: 44px; line-height: 1; opacity: 0.55; }
        .preview-empty .pe-title { font-size: 15px; color: var(--text3); font-weight: 500; }
        .preview-empty .pe-hint { font-size: 12px; color: var(--text3); max-width: 340px; line-height: 1.6; opacity: 0.8; }
        .preview-content { flex: 1; overflow: hidden; display: flex; flex-direction: column; }
        .preview-content img { width: 100%; }
        .preview-header { padding: 8px 12px; font-size: 12px; color: var(--text2); background: var(--card); border-bottom: 1px solid var(--border); display: flex; align-items: center; gap: 8px; }
        .preview-header .page-nav { margin-left: auto; display: flex; align-items: center; gap: 4px; }
        .preview-header .page-nav .nav-btn { padding: 2px 8px; border: 1px solid var(--border); border-radius: 3px; cursor: pointer; font-size: 11px; background: var(--card); user-select: none; }
        .preview-header .page-nav .nav-btn:hover { border-color: var(--primary); color: var(--primary); }
        .preview-header .page-nav input { width: 40px; text-align: center; border: 1px solid var(--border); border-radius: 3px; font-size: 11px; padding: 2px; }
        .preview-header .page-nav span { font-size: 11px; color: var(--text3); }
        .preview-body { flex: 1; overflow-y: auto; padding: 12px; background: #e8e8e8; display: flex; flex-direction: column; align-items: center; gap: 8px; }
        .preview-body .page-slot canvas { box-shadow: 0 2px 8px rgba(0,0,0,0.15); border-radius: 2px; display: block; }
        /* 预审核 N/B 双文档预览。每个窗格拥有自己的页码、PDF.js 文档和滚动状态。 */
        .review-preview-content { flex: 1; min-height: 0; display: none; flex-direction: column; overflow: hidden; background: var(--bg); }
        .review-preview-toolbar { min-height: 30px; padding: 4px 8px; display: flex; align-items: center; gap: 8px; background: var(--card); border-bottom: 1px solid var(--border); }
        .review-preview-caption { font-size: 11px; font-weight: 600; color: var(--text2); white-space: nowrap; }
        .review-preview-hint { min-width: 0; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; color: var(--text3); font-size: 10px; }
        .review-preview-toggle, .review-preview-restore { border: 1px solid var(--border); background: var(--card); color: var(--text2); border-radius: 4px; padding: 3px 9px; font-size: 10px; cursor: pointer; white-space: nowrap; }
        .review-preview-toggle { margin-left: auto; }
        .review-preview-toggle:hover, .review-preview-restore:hover { border-color: var(--primary); color: var(--primary); }
        .review-focus-actions { display: none; margin-left: 0; gap: 4px; }
        .review-focus-btn { border: 1px solid var(--border); background: var(--card); color: var(--text3); border-radius: 3px; padding: 2px 8px; font-size: 10px; cursor: pointer; }
        .review-focus-btn.active { color: #fff; background: var(--primary); border-color: var(--primary); }
        .review-preview-grid { flex: 1; min-height: 0; display: grid; grid-template-columns: minmax(0, 1fr) minmax(0, 1fr); gap: 6px; padding: 6px; overflow: hidden; }
        .kb-right.review-mode[data-review-pane-mode="single"] .review-preview-grid { grid-template-columns: minmax(0, 1fr); }
        .kb-right.review-mode[data-review-pane-mode="single"] .review-preview-pane[data-review-side="b"] { display: none; }
        .kb-right.review-mode[data-review-pane-mode="single"] .review-focus-actions { display: none !important; }
        /* 版本差异预览固定「左=老版（B），右=新版（N）」：DOM 顺序为 N/B，
           用 order 把老版窗格排到左侧，新版排到右侧（阅读顺序 = 时间顺序）。 */
        .review-preview-pane[data-review-side="b"] { order: 1; }
        .review-preview-pane[data-review-side="n"] { order: 2; }
        .kb-right.review-mode[data-review-layout="single"] .review-preview-pane[data-review-side="b"],
        .kb-right.review-mode[data-review-layout="single"] .review-preview-pane[data-review-side="n"] { order: 0; }
        .review-preview-pane { min-width: 0; min-height: 0; display: flex; flex-direction: column; overflow: hidden; border: 1px solid var(--border); border-radius: 4px; background: var(--card); }
        .review-pane-header { min-height: 30px; padding: 4px 7px; display: flex; align-items: center; gap: 6px; border-bottom: 1px solid var(--border); background: var(--card); }
        .review-pane-title { min-width: 0; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; font-size: 11px; font-weight: 600; color: var(--text2); }
        .review-pane-pager { margin-left: auto; display: flex; align-items: center; gap: 3px; flex: 0 0 auto; }
        .review-pane-pager .nav-btn { padding: 1px 5px; border: 1px solid var(--border); border-radius: 3px; background: var(--card); cursor: pointer; font-size: 9px; }
        .review-pane-pager .nav-btn:hover { color: var(--primary); border-color: var(--primary); }
        .review-pane-pager input { width: 34px; padding: 1px; border: 1px solid var(--border); border-radius: 3px; text-align: center; font-size: 10px; }
        .review-pane-pager span { color: var(--text3); font-size: 10px; }
        .review-pane-body { flex: 1; min-height: 0; overflow-y: auto; padding: 8px; display: flex; flex-direction: column; align-items: center; gap: 6px; background: #e8e8e8; }
        .review-pane-body .page-slot { width: 100%; position: relative; }
        .review-pane-body .page-slot canvas { width: 100%; height: auto; max-width: 100%; box-shadow: 0 2px 8px rgba(0,0,0,.15); border-radius: 2px; display: block; }
        /* 差异定位高亮：bbox 框选 / 文本搜索矩形叠加在页面画布上 */
        .review-hl-layer { position: absolute; inset: 0; pointer-events: none; z-index: 2; }
        .review-hl-box { position: absolute; background: var(--diff-mod-hl); opacity: .3; border: none; border-radius: 2px; box-shadow: 0 0 0 1px var(--diff-mod-hl-strong) inset; }
        /* 修改卡字符级子高亮：在段落黄框内标出实际改动的文字，
           配色与左侧卡片一致——B 侧红=被删文字，N 侧蓝=新增文字 */
        /* 子高亮不遮挡文字：极淡底色 + 底部粗色条（下划线式），原文字清晰可读 */
        /* 子高亮=荧光笔：multiply 混合让白底着色、黑字保持全黑清晰，
           底部色条强化位置感；无描边、不形成"方框" */
        /* 子高亮：淡底 + 饱和描边 + 底部色条 + 一次性闪光，缩放下仍醒目且不遮字 */
        /* 子高亮=荧光笔：multiply 混合下黑字永远全黑清晰，白底着色。
   无描边/无色条/无阴影——单字片段高度只有几个像素，任何装饰
   都会糊成实心块遮住文字 */
        .review-hl-sub-del { position: absolute; background: color-mix(in srgb, var(--diff-del-hl) 38%, transparent); mix-blend-mode: multiply; border: none; border-radius: 1px; box-shadow: none; }
        .review-hl-sub-del::before { content: '↙'; position: absolute; right: -4px; top: -10px; font-size: 11px; line-height: 1; color: var(--diff-del-fg); font-weight: 700; }
                        .review-hl-sub-ins { position: absolute; background: color-mix(in srgb, var(--diff-add-hl) 38%, transparent); mix-blend-mode: multiply; border: none; border-radius: 1px; box-shadow: none; }
        .review-hl-sub-ins::before { content: '↙'; position: absolute; right: -4px; top: -10px; font-size: 11px; line-height: 1; color: var(--diff-add-fg); font-weight: 700; }
        /* 删除内容（老文档侧）：红色荧光，与新增的黄色一眼区分 */
        .review-hl-box.review-hl-removed { background: var(--diff-del-hl); opacity: .35; box-shadow: 0 0 0 1px var(--diff-del-hl-strong) inset; }
        /* 表格新增行/新增单元格：绿色荧光（新增=绿 / 修改=黄 / 删除=红），
           低透明度底色 + 内描边，原文字清晰可读 */
        .review-hl-box.review-hl-added { background: var(--diff-add-hl); opacity: .35; box-shadow: 0 0 0 1px var(--diff-add-hl-strong) inset; }
        /* 来源条目持久选中态 */
        .src-item.selected { background: rgba(255,196,0,.16) !important; border-left-color:#f77f00 !important; }
        .src-item.selected .src-ref { color:#e87d00; font-weight:700; }
        /* 折叠隐藏需 !important：原有 .msg.bot .sources .src-item{display:block} 特异性更高会压住 */
        .src-doc-block.collapsed .src-item { display: none !important; }
        /* QA 预览：引用段落整块黄框 */
        .review-hl-box.qa-hl-frame { background: rgba(255, 196, 0, .28); border: 2px solid rgba(240, 150, 0, .9); border-radius: 3px; }
        .review-hl-box.qa-hl-bar { width: 10px; border: none; border-radius: 2px; background: linear-gradient(180deg, #ffb703, #f77f00); box-shadow: 0 0 5px rgba(247, 127, 0, .5); }
        .review-hl-box.qa-hl-bar.qa-hl-bar-other { background: rgba(64, 128, 255, .45); box-shadow: none; }
        /* 插入位置标记（老文档侧）：透明框 + 虚线缝，整体下移半行高，
           虚线落在上下两行之间的行间空隙；左端箭头垂直居中于虚线
           （尖部与虚线平齐）——不框住原有文字、不带文字徽章。 */
        .review-hl-box.review-hl-insert { background: transparent; border: none; border-bottom: 2px dashed var(--diff-add-hl-strong); border-radius: 0; box-shadow: none; animation: hl-ins-pulse 1.6s ease-in-out infinite; transform: translateY(50%); }
        .review-hl-box.review-hl-insert::before { content: '▶'; position: absolute; right: 100%; top: 100%; transform: translateY(-50%); margin-right: 2px; color: var(--diff-add-fg); font-size: 10px; line-height: 1; }
        /* 删除缝（新文档侧）：与插入缝对称的红色虚线 + 箭头，表示"此处内容已删除" */
        .review-hl-box.review-hl-delmark { background: transparent; border: none; border-bottom: 2px dashed var(--diff-del-hl-strong); border-radius: 0; box-shadow: none; animation: hl-ins-pulse 1.6s ease-in-out infinite; transform: translateY(50%); }
        .review-hl-box.review-hl-delmark::before { content: '▶'; position: absolute; right: 100%; top: 100%; transform: translateY(-50%); margin-right: 2px; color: var(--diff-del-fg); font-size: 10px; line-height: 1; }
        /* 表格差异卡片：行分组小标题 */
        .vc-row-group-title { font-size: 11px; font-weight: 700; color: var(--text2); margin: 8px 0 3px; }
        @keyframes hl-ins-pulse { 0%, 100% { opacity: 1; } 50% { opacity: .65; } }
        .src-count { color: var(--text3); font-size: 10px; }
        /* 答案层次化排版：小标题/列表/段落间距 */
        .msg.bot strong { color: var(--text2); }
        /* 答案淡入动画（LLM 流式等待的体验优化） */
        .msg.bot.ans-reveal { animation: ansFadeIn .8s ease-out; }
        @keyframes ansFadeIn { from { opacity: 0; transform: translateY(8px); } to { opacity: 1; transform: none; } }
        /* 小标题独立成行（LLM 单换行时 marked 不分段，CSS 强制层级） */
        .msg.bot p > strong:first-child:last-child { display: block; margin: 10px 0 3px; font-size: 13px; }
        .msg.bot p:first-child > strong:first-child { margin-top: 0; }
        .msg.bot h3, .msg.bot h4 { margin: 10px 0 4px; font-size: 13px; color: var(--text2); }
        .msg.bot ul, .msg.bot ol { margin: 4px 0 6px; padding-left: 20px; }
        .msg.bot li { margin: 3px 0; }
        .msg.bot p { margin: 6px 0; }
        /* 问答答案结构：总述头 / 冲突标记 / 空结果 */
        .ans-coverage { background: rgba(64,128,255,.07); border-left: 3px solid var(--primary); padding: 6px 10px; border-radius: 4px; font-size: 12px; margin-bottom: 6px; }
        .ans-conflict { background: rgba(250,173,20,.12); border-left: 3px solid var(--warn); padding: 6px 10px; border-radius: 4px; }
        .ans-conflict-banner { background: rgba(250,173,20,.15); border: 1px solid var(--warn); color: var(--warn); padding: 5px 10px; border-radius: 4px; font-size: 12px; margin-bottom: 6px; }
        .ans-empty { background: #f5f5f5; border-left: 3px solid #999; padding: 6px 10px; border-radius: 4px; font-size: 12px; color: var(--text3); }
        /* 引用来源按文档折叠 */
        .src-doc-block { border: 1px solid var(--border); border-radius: 6px; margin-bottom: 6px; overflow: hidden; }
        .src-doc-block .src-doc-title { cursor: pointer; user-select: none; background: var(--card); }
        .src-doc-block .src-doc-title:hover { background: rgba(64,128,255,.06); }
        .src-doc-block .cg-caret { display: inline-block; transition: transform .18s; color: var(--text3); margin-right: 4px; font-size: 10px; }
        .src-doc-block.collapsed .cg-caret { transform: rotate(-90deg); }
        .src-doc-block.collapsed .src-item { display: none; }
        .src-doc-block .src-item { margin-left: 18px; border-left: 2px solid var(--border); padding-left: 8px; }
        /* QA 预览高亮：主证据（强橙精确框）/ bbox 竖条兜底（橙条=主证据附近，蓝条=其他来源） */
        .review-hl-box.qa-hl-hit { background: rgba(255, 170, 0, .38); border: 2px solid rgba(235, 130, 0, .95); }
        .review-hl-box.qa-hl-other { background: rgba(64, 128, 255, .12); border: 1.5px solid rgba(64, 128, 255, .55); }
        .review-hl-box.qa-hl-bar { background: linear-gradient(180deg, #ffb703, #f77f00); border: none; border-radius: 3px; box-shadow: 0 0 6px rgba(247, 127, 0, .55); }
        .review-hl-box.qa-hl-bar.qa-hl-bar-other { background: rgba(64, 128, 255, .45); box-shadow: 0 0 4px rgba(64, 128, 255, .35); }
        #qaPdfContainer .page-slot { position: relative; }
        .review-pane-placeholder { width: 100%; padding: 28px 12px; text-align: center; color: var(--text3); font-size: 11px; }
        .kb-right.review-mode #previewContent, .kb-right.review-mode #previewEmpty { display: none !important; }
        .kb-right.review-mode #reviewPreviewContent { display: flex !important; }
        .kb-right.review-mode[data-review-layout="single"] .review-focus-actions { display: flex; }
        .kb-right.review-mode[data-review-layout="single"] .review-preview-grid { grid-template-columns: minmax(0, 1fr); }
        .kb-right.review-mode[data-review-layout="single"] .review-preview-pane { display: none; }
        .kb-right.review-mode[data-review-layout="single"] .review-preview-pane[data-review-side="n"],
        .kb-right.review-mode[data-review-layout="single"] .review-preview-pane[data-review-side="b"] { display: none; }
        .kb-right.review-mode[data-review-layout="single"][data-review-focus="n"] .review-preview-pane[data-review-side="n"],
        .kb-right.review-mode[data-review-layout="single"][data-review-focus="b"] .review-preview-pane[data-review-side="b"] { display: flex; }
        /* 右侧：预审核结果面板 */
        .review-panel { flex: 1; display: none; flex-direction: column; overflow: hidden; position: relative; }
        .review-panel.active { display: flex; }
        .review-actions { padding: 8px 12px; background: var(--card); border-bottom: 1px solid var(--border); display: flex; flex-wrap: wrap; gap: 8px; align-items: center; }
        /* 结论文字独占一行，避免窄栏（review split 模式 min 240px）下被按钮挤成一字一行 */
        .review-actions .info { flex: 1 1 100%; font-size: 12px; color: var(--text2); line-height: 1.5; }
        .btn { padding: 5px 14px; border: none; border-radius: 4px; cursor: pointer; font-size: 12px; }
.btn:disabled { opacity: 0.48; cursor: not-allowed; filter: grayscale(0.35); }
.btn-ok { background: var(--success); color: #fff; }
.btn-no { background: var(--danger); color: #fff; }
.btn-warn { background: var(--warn); color: #fff; }
.btn-warn:hover { opacity: 0.85; }
.btn-rerun { background: #1677ff; color: #fff; font-weight: 600; }
.btn-rerun:hover { background: #0958d9; }

        /* 冲突列表 */
        .conflict-list { flex: 1; min-height: 0; overflow-y: auto; transition: max-height 0.3s; }
        .conflict-list.collapsed { max-height: 100px; }
        .conflict-item { padding: 8px 12px; border-bottom: 1px solid #f0f0f0; cursor: pointer; font-size: 12px; transition: background 0.15s; }
        .conflict-item:hover { background: #fafafa; }
        .conflict-item.selected { background: var(--primary-bg); border-left: 3px solid var(--primary); }
        .conflict-item .title { font-weight: 500; }
        .conflict-item .desc { color: var(--text2); margin-top: 4px; font-size: 11px; line-height: 1.5; white-space: pre-wrap; }

        /* 对比面板 */
        .compare-panel { flex: 1; display: none; flex-direction: column; border-top: 1px solid var(--border); min-height: 200px; }
        .compare-panel.show { display: flex; }
        .compare-tabs { height: 32px; background: var(--card); border-bottom: 1px solid var(--border); display: flex; align-items: center; padding: 0 12px; gap: 4px; }
        .compare-tab { padding: 3px 10px; font-size: 11px; border: 1px solid var(--border); background: var(--card); border-radius: 3px; cursor: pointer; }
        .compare-tab.active { background: var(--primary-bg); border-color: var(--primary); color: var(--primary); }
        .compare-close { margin-left: auto; font-size: 11px; color: var(--text3); cursor: pointer; }
        .compare-close:hover { color: var(--danger); }
        .compare-body { flex: 1; overflow-y: auto; padding: 8px; background: #e8e8e8; display: flex; justify-content: center; }
        .compare-body img { max-width: 100%; height: auto; box-shadow: 0 2px 8px rgba(0,0,0,0.1); }
        .compare-body .highlight-text { background: #fff; padding: 10px; border-radius: var(--radius); border-left: 3px solid var(--warn); font-size: 12px; line-height: 1.6; max-width: 700px; }
        .compare-body .diff-compare { background: #fff; border-radius: var(--radius); border: 1px solid var(--border); overflow: hidden; margin-bottom: 6px; position: sticky; top: 0; z-index: 2; box-shadow: 0 2px 6px rgba(0,0,0,0.06); }
        .compare-body .diff-row { display: flex; align-items: baseline; padding: 6px 10px; border-bottom: 1px solid #f0f0f0; }
        .compare-body .diff-row:last-child { border-bottom: none; }
        .compare-body .diff-label { flex-shrink: 0; width: 28px; font-weight: 700; font-size: 12px; color: var(--text3); }
        .compare-body .diff-label { cursor: pointer; text-decoration: underline; text-underline-offset: 2px; }
        .compare-body .diff-label:hover { color: var(--primary); }
        .compare-body .cmp-page-wrap { margin-bottom: 10px; background: #fff; box-shadow: 0 2px 8px rgba(0,0,0,0.1); }
        .compare-body .cmp-page-num { padding: 4px 8px; color: var(--text3); font-size: 10px; border-bottom: 1px solid #eee; }
        .compare-body .cmp-page-active { outline: 2px solid var(--primary); outline-offset: -2px; }
        .vc-diff-jump { cursor: pointer; text-decoration: underline; text-underline-offset: 2px; }
        .vc-diff-jump:hover { color: var(--primary); background: var(--primary-bg); }
        .compare-body .diff-row:first-child .diff-label { color: var(--diff-add-fg); }
        .compare-body .diff-row:last-child .diff-label { color: var(--diff-del-fg); }
        .compare-body .diff-text { font-size: 12px; line-height: 1.7; color: var(--text); word-break: break-all; }
        .compare-body .diff-mark { background: var(--diff-mod-hl); border-radius: 3px; padding: 1px 4px; font-weight: 600; color: var(--diff-mod-fg); }
        .compare-body .diff-row:first-child .diff-mark { background: var(--diff-add-hl); color: var(--diff-add-fg); }
        .compare-body .diff-row:last-child .diff-mark { background: var(--diff-del-hl); color: var(--diff-del-fg); }

#cmpTabs button.active { background: var(--primary); color: #fff; }

        /* === 版本差异预览浮层（tab 切换单栏 PDF） === */
        .version-compare-panel { position: absolute; top: 44px; right: 0; bottom: 0; left: 0; background: var(--bg); z-index: 5; display: none; flex-direction: column; overflow: hidden; }
        .version-compare-panel.show { display: flex; }
        .vc-scroll-area { flex: 1; overflow-y: auto; padding: 0; background: #f5f5f5; }
        .vc-scroll-area img { box-shadow: 0 2px 8px rgba(0,0,0,0.12); }
        /* 定位警示栏 — sticky 固定在滚动区域顶部 */
        .vc-sticky-header { position: sticky; top: 0; z-index: 10; flex-shrink: 0; background: var(--bg); }
        .vc-loc-bar { display: flex; align-items: stretch; padding: 0; border-bottom: 1px solid var(--border); min-height: 56px; }
        .vc-loc-side { flex: 1; display: flex; flex-direction: column; justify-content: center; padding: 8px 14px; gap: 2px; }
        .vc-loc-old { background: var(--diff-del-bg-soft); border-right: 1px solid var(--diff-del-border); }
        .vc-loc-new { background: var(--diff-add-bg-soft); }
        .vc-loc-tag { font-size: 10px; font-weight: 700; text-transform: uppercase; letter-spacing: 0.5px; }
        .vc-loc-old .vc-loc-tag { color: var(--diff-del-fg); }
        .vc-loc-new .vc-loc-tag { color: var(--diff-add-fg); }
        .vc-loc-page { font-size: 15px; font-weight: 700; color: var(--text); }
        .vc-loc-section { font-size: 11px; color: var(--text3); overflow: hidden; text-overflow: ellipsis; white-space: nowrap; max-width: 100%; }
        .vc-loc-arrow { display: flex; align-items: center; padding: 0 6px; font-size: 16px; color: var(--text3); background: #fafafa; flex-shrink: 0; }
        .vc-summary-bar { padding: 8px 14px; background: var(--card); border-bottom: 1px solid var(--border); font-size: 12px; line-height: 1.5; color: var(--text2); }
        .vc-summary-line { display: flex; align-items: flex-start; gap: 6px; margin: 2px 0; }
        .vc-summary-label { flex: 0 0 auto; font-weight: 600; color: var(--text3); }
        .vc-summary-value { min-width: 0; word-break: break-word; }
        /* 文字差异对比区 */
        .vc-text-diff { padding: 10px 14px; background: #fff; border-bottom: 1px solid var(--border); flex-shrink: 0; max-height: 38vh; overflow-y: auto; }
        .vc-diff-row { padding: 8px 10px 8px 12px; border-radius: 5px; margin-bottom: 6px; border: 1px solid transparent; }
        .vc-diff-old-row { background: var(--diff-del-bg); border-color: var(--diff-del-border); }
        .vc-diff-new-row { background: var(--diff-add-bg); border-color: var(--diff-add-border); }
        .vc-diff-tag { display: inline-block; width: 22px; font-size: 10px; font-weight: 700; margin-right: 6px; vertical-align: top; }
        .vc-diff-old-row .vc-diff-tag { color: var(--diff-del-fg); }
        .vc-diff-new-row .vc-diff-tag { color: var(--diff-add-fg); }
        .vc-diff-text { font-size: 12px; line-height: 1.7; word-break: break-word; }
        .vc-diff-text .diff-mark { background: var(--diff-mod-hl); border-radius: 3px; padding: 1px 5px; font-weight: 600; color: var(--diff-mod-fg); }
        .vc-diff-old-row .vc-diff-text .diff-mark { background: var(--diff-del-hl); color: var(--diff-del-fg); }
        .vc-diff-new-row .vc-diff-text .diff-mark { background: var(--diff-add-hl); color: var(--diff-add-fg); }
        .vc-diff-empty { padding: 6px 14px; color: var(--text3); font-size: 11px; font-style: italic; }
        .vc-diff-empty-add { color: var(--diff-add-fg); }
        .vc-diff-empty-del { color: var(--diff-del-fg); }
        .vc-page-num { font-size: 11px; color: var(--text3); padding: 4px 0; text-align: center; background: #fafafa; }
        .vc-page-wrap { margin-bottom: 2px; overflow: hidden; border-radius: 0; }
        .vc-page-wrap img { width: 100%; display: block; }
        .vc-page-active { outline: 3px solid var(--warning); outline-offset: -2px; }
        .vc-tabs { border-bottom: 2px solid var(--border); }
        .vc-tab { padding: 8px 16px; border: none; background: none; cursor: pointer; font-size: 12px; font-weight: 500; color: var(--text3); border-bottom: 2px solid transparent; margin-bottom: -2px; }
        .vc-tab.active { color: var(--primary); border-bottom-color: var(--primary); }
        .vc-tab.active { color: var(--primary); border-bottom-color: var(--primary); font-weight: 600; }
        .vc-tab:hover:not(.active) { color: var(--text2); }
        .vc-page-wrap { margin: 0 auto 10px; max-width: 700px; background: #fff; border: 1px solid var(--border); border-radius: 4px; overflow: hidden; }
        .vc-page-wrap.vc-page-active { border-color: var(--warn); box-shadow: 0 0 0 2px rgba(255,170,0,0.2); }
        .vc-page-num { font-size: 10px; color: var(--text3); padding: 4px 8px; background: #fafafa; border-bottom: 1px solid #eee; }
        .vc-back-btn { padding: 5px 14px; border: 1px solid var(--border); background: var(--card); border-radius: 4px; cursor: pointer; font-size: 12px; color: var(--text2); white-space: nowrap; flex-shrink: 0; }
        .vc-back-btn:hover { border-color: var(--primary); color: var(--primary); }
        .vc-bottom-actions { padding: 8px 14px; border-top: 1px solid var(--border); background: var(--card); display: flex; justify-content: center; align-items: center; gap: 8px; flex-wrap: wrap; flex-shrink: 0; }
        .vc-nav-btn { padding: 5px 12px; border: 1px solid var(--border); background: var(--card); border-radius: 4px; cursor: pointer; font-size: 12px; color: var(--text2); white-space: nowrap; flex-shrink: 0; }
        .vc-nav-btn:hover { border-color: var(--primary); color: var(--primary); }
        .vc-nav-btn.vc-nav-unseen { border-color: var(--primary); color: var(--primary); }

        /* === 版本差异列表条目 === */
        .version-diff-item { padding: 10px 12px; border: 1px solid #eee; border-radius: var(--radius); margin-bottom: 6px; background: var(--card); cursor: pointer; transition: all 0.15s; }
        .version-diff-item:hover { border-color: var(--primary); background: var(--primary-bg); }
        .compare-group { margin-bottom: 8px; border: 1px solid var(--border); border-radius: var(--radius); overflow: hidden; }
        .compare-summary { margin: 8px 10px; padding: 8px; background: #f7fbff; border: 1px solid #d6eaff; border-radius: var(--radius); }
        .compare-summary-title { font-size: 11px; color: var(--text2); font-weight: 700; margin-bottom: 6px; }
        .summary-hint { margin-left: 6px; color: var(--text3); font-size: 10px; font-weight: 400; }
        .compare-summary-list { display: flex; flex-direction: column; gap: 4px; }
        .compare-summary-card { width: 100%; display: grid; grid-template-columns: 34px minmax(140px, 1fr) auto; grid-template-rows: auto auto; align-items: center; gap: 2px 8px; padding: 7px 9px; background: #fff; border: 1px solid #e8f1fb; border-radius: 4px; font: inherit; text-align: left; cursor: pointer; }
        .compare-summary-card:hover { border-color: var(--primary); background: var(--primary-bg); }
        .compare-summary-card:focus-visible { outline: 2px solid var(--primary); outline-offset: 1px; }
        .compare-summary-card .src-id { grid-row: 1 / span 2; align-self: start; }
        .summary-doc { overflow: hidden; text-overflow: ellipsis; white-space: nowrap; font-weight: 600; }
        .summary-kind { color: var(--text3); font-size: 10px; white-space: nowrap; }
        .summary-detail { grid-column: 2 / -1; min-width: 0; color: var(--text2); font-size: 11px; line-height: 1.5; }
        .summary-detail .vc-summary-line { margin: 1px 0; }
        .summary-detail .vc-summary-label { font-size: 10px; }
        .compare-summary-card { align-items: start; }
        .compare-group-back { padding: 5px 2px 1px; text-align: right; }
        .compare-group-back button { border: 0; background: none; color: var(--primary); cursor: pointer; font-size: 10px; padding: 3px 5px; }
        .compare-group-back button:hover { text-decoration: underline; }
        @keyframes compareGroupJump { 0%,100% { box-shadow: 0 0 0 0 rgba(22,119,255,0); } 20% { box-shadow: 0 0 0 3px rgba(22,119,255,.24); } }
        .compare-group-title { display: flex; align-items: center; gap: 6px; padding: 8px 10px; background: var(--bg2); cursor: pointer; font-size: 12px; font-weight: 600; }
        .compare-group-title:hover { background: var(--primary-bg); }
        .compare-group-body { padding: 6px 8px; background: var(--card); }
        .compare-group-body .version-diff-item, .compare-group-body .conflict-item { margin-bottom: 4px; }
        .version-diff-item.selected { border-color: var(--primary); background: var(--primary-bg); box-shadow: 0 0 0 2px rgba(22,119,255,0.15); border-left: 3px solid var(--primary); }
        .version-diff-item.selected .vd-type { font-weight: 700; }
        .version-diff-item .vd-header { display: flex; align-items: flex-start; flex-wrap: wrap; gap: 6px; font-size: 12px; margin-bottom: 4px; }
        .vd-type { font-weight: 600; min-width: 56px; }
        .vd-loc { color: var(--text3); font-size: 11px; }
        .vd-summary { flex: 1 1 100%; margin-left: 0; color: var(--text2); font-size: 11px; font-style: italic; line-height: 1.5; word-break: break-word; }
        .version-diff-item .vd-body { font-size: 12px; line-height: 1.5; }
.vd-old .vd-label { color: var(--diff-del-fg); font-weight: 600; margin-right: 4px; }
.vd-new .vd-label { color: var(--diff-add-fg); font-weight: 600; margin-right: 4px; }
.vd-old .vd-text { background: var(--diff-del-bg); padding: 2px 6px; border-radius: 2px; color: var(--text2); }
.vd-new .vd-text { background: var(--diff-add-bg); padding: 2px 6px; border-radius: 2px; color: var(--text2); }
.vd-text .diff-mark { background: var(--diff-mod-hl); border-radius: 3px; padding: 1px 4px; font-weight: 600; color: var(--diff-mod-fg); }
.vd-old .vd-text .diff-mark { background: var(--diff-del-hl); color: var(--diff-del-fg); }
.vd-new .vd-text .diff-mark { background: var(--diff-add-hl); color: var(--diff-add-fg); }

        /* === 差异类型标签（新增/删除/修改）===
           全站统一的类型语义色入口：左侧差异卡、跨文档矛盾卡共用。
           形态=小色点 + 着色文字，无底色块——色点负责"一眼分类"，
           文字保留正文对比度，不喧宾夺主。 */
        .diff-chip { display: inline-flex; align-items: center; gap: 4px; font-size: 11px; font-weight: 600; white-space: nowrap; }
        .diff-chip::before { content: ''; width: 6px; height: 6px; border-radius: 50%; background: currentColor; flex-shrink: 0; }
        .diff-chip-add { color: var(--diff-add-fg); }
        .diff-chip-del { color: var(--diff-del-fg); }
        .diff-chip-mod { color: var(--diff-mod-fg); }
        /* 表格单元格变化表：旧值红底、新值绿底，与文字差异区同色 */
        .vc-cell-change-table td.cell-old { background: var(--diff-del-bg); color: var(--diff-del-fg); }
        .vc-cell-change-table td.cell-new { background: var(--diff-add-bg); color: var(--diff-add-fg); }
        .vd-hint { font-size: 11px; color: var(--text3); padding: 6px 4px; }
        .text-para:hover { background: #f0f0f0; }

        /* ==================== 问答页 ==================== */
        .qa-page { flex-direction: row; min-height: 0; overflow: hidden; }
        .qa-sidebar { width: 220px; min-width: 180px; background: var(--card); border-right: 1px solid var(--border); display: flex; flex-direction: column; overflow: hidden; transition: width 0.2s, min-width 0.2s, padding 0.2s; }
        .qa-sidebar.collapsed { width: 0; min-width: 0; border-right: none; overflow: hidden; }
        .qa-sidebar-toggle { width: 16px; min-width: 16px; height: 40px; background: var(--card); border: 1px solid var(--border); border-left: none; border-radius: 0 4px 4px 0; cursor: pointer; display: flex; align-items: center; justify-content: center; font-size: 10px; color: var(--text3); align-self: center; margin-left: -1px; }
        .qa-sidebar-toggle:hover { color: var(--primary); }
        .qa-main { flex: 1; display: flex; flex-direction: column; min-width: 0; min-height: 0; overflow: hidden; }
        .qa-messages { flex: 1; overflow-y: auto; padding: 16px; }
        .msg { margin-bottom: 12px; max-width: 80%; }
        .msg.user { margin-left: auto; background: var(--primary); color: #fff; padding: 8px 12px; border-radius: 12px 12px 2px 12px; max-width: fit-content; }
        .msg.bot { background: var(--card); border: 1px solid var(--border); padding: 10px 14px; border-radius: 12px 12px 12px 2px; line-height: 1.7; max-width: 720px; }
        .msg.bot p { margin: 4px 0; }
        .msg.bot ul,.msg.bot ol { margin: 4px 0; padding-left: 18px; }
        .msg.bot li { margin: 2px 0; }
        .msg.bot strong { color: var(--primary); }
        .msg.bot code { background: #f0f0f0; padding: 1px 4px; border-radius: 2px; font-size: 11px; }
        .msg.bot pre { background: #f5f5f5; padding: 8px; border-radius: 4px; overflow-x: auto; margin: 4px 0; }
        .msg.bot blockquote { border-left: 3px solid var(--warn); background: #fffbe6; padding: 6px 10px; margin: 6px 0; border-radius: 0 4px 4px 0; color: var(--text2); font-size: 12px; }
        .msg.bot .sources { margin-top: 8px; border-top: 1px solid var(--border); padding-top: 6px; }
        .msg.bot .sources .src-title { font-size: 11px; color: var(--text3); margin-bottom: 4px; }
        .msg.bot .sources .src-item { display: block; padding: 6px 8px; margin-bottom: 4px; background: #f9f9f9; border: 1px solid #eee; border-radius: 4px; cursor: pointer; transition: all 0.15s; }
        .msg.bot .sources .src-item:hover { background: var(--primary-bg); border-color: var(--primary); }
        .msg.bot .sources .src-id { display: inline-block; min-width: 22px; padding: 0 4px; background: var(--primary); color: #fff; border-radius: 3px; font-size: 10px; font-weight: 700; text-align: center; margin-right: 4px; }
        .msg.bot .sources .src-file { font-size: 12px; color: var(--text); font-weight: 500; }
        .msg.bot .sources .src-file-hash { font-size: 11px; color: #888; font-weight: 400; font-family: ui-monospace, "SF Mono", Menlo, Consolas, monospace; }
        .msg.bot .sources .src-loc { font-size: 11px; color: var(--text2); margin-top: 2px; }
        .msg.bot .sources .src-text { font-size: 11px; color: var(--text3); margin-top: 2px; line-height: 1.5; overflow: hidden; text-overflow: ellipsis; display: -webkit-box; -webkit-line-clamp: 2; -webkit-box-orient: vertical; }
        .msg.bot .sources .src-doc-block { margin-bottom: 6px; }
        .msg.bot .sources .src-doc-title { display: flex; align-items: center; gap: 4px; padding: 4px 8px; background: var(--primary-bg); border-left: 3px solid var(--primary); border-radius: 3px; font-size: 12px; font-weight: 600; margin-bottom: 4px; }
        .msg.bot .sources .src-doc-title .src-id { background: var(--warn); color: #fff; border-radius: 3px; font-size: 10px; font-weight: 700; padding: 0 5px; min-width: 22px; text-align: center; }
        .msg.bot .sources .src-ref { display: inline-block; min-width: 24px; padding: 0 4px; background: var(--primary); color: #fff; border-radius: 3px; font-size: 10px; font-weight: 700; text-align: center; margin-right: 4px; }
        .msg.bot .sources .src-doc-block .src-item { margin-left: 4px; }

        /* === 答案中的引用编号标记 === */
        .msg.bot .ref-link { display: inline-block; padding: 1px 6px; margin: 0 1px; background: var(--primary-bg); color: var(--primary); border-radius: 3px; font-size: 11px; font-weight: 600; text-decoration: none; cursor: pointer; transition: all 0.15s; vertical-align: baseline; }
        .msg.bot .ref-link:hover { background: var(--primary); color: #fff; }
        .msg.bot .ref-doc { display: inline-block; padding: 0 3px; margin-left: 2px; background: var(--warn); color: #fff; border-radius: 3px; font-size: 10px; font-weight: 700; vertical-align: baseline; cursor: default; }
        .msg.bot .answer-note { display: block; margin: 6px 0; padding: 6px 10px; background: #fffbe6; border-left: 3px solid var(--warn); border-radius: 4px; font-size: 11px; color: var(--text2); }
        .msg.bot .old-ref-warn { background: #fff1f0; color: var(--danger); font-size: 10px; padding: 1px 4px; border-radius: 3px; text-decoration: line-through; }
        .msg.bot .sources .src-item.ref-flash { animation: refFlash 1.5s ease-out; }
        @keyframes refFlash { 0%,100%{background:#f9f9f9}20%{background:#fff7e6;border-color:var(--warn);box-shadow:0 0 0 3px rgba(250,173,20,0.25)} }
        .qa-input { padding: 12px 16px; background: var(--card); border-top: 1px solid var(--border); display: flex; gap: 8px; max-width: 760px; margin: 0 auto; width: 100%; box-sizing: border-box; }
        .qa-input input { flex: 1; padding: 8px 14px; border: 1px solid var(--border); border-radius: 18px; font-size: 13px; outline: none; }
        .qa-input input:focus { border-color: var(--primary); }
        .qa-input button { padding: 8px 18px; border: none; border-radius: 18px; background: var(--primary); color: #fff; cursor: pointer; font-size: 13px; }

        /* QA 右侧预览 */
        .qa-sidebar { width: 220px; min-width: 180px; background: var(--card); border-right: 1px solid var(--border); display: flex; flex-direction: column; overflow: hidden; }
        .qa-sidebar-header { padding: 8px 10px; border-bottom: 1px solid var(--border); display: flex; align-items: center; gap: 6px; }
        .qa-sidebar-header .title { font-size: 12px; font-weight: 600; color: var(--text2); }
        .qa-sidebar-header .new-btn { margin-left: auto; padding: 2px 8px; border: 1px solid var(--border); border-radius: 4px; background: none; cursor: pointer; font-size: 11px; color: var(--primary); }
        .qa-sidebar-header .new-btn:hover { background: var(--primary-bg); }
        .qa-sidebar-list { flex: 1; overflow-y: auto; padding: 4px 0; }
        .qa-danger-zone { margin-top: 12px; padding: 12px 10px; border-top: 2px dashed var(--border); text-align: center; }
        .qa-session-item { padding: 8px 10px; cursor: pointer; border-bottom: 1px solid #f0f0f0; transition: background 0.15s; }
        .qa-session-item:hover { background: #f5f5f5; }
        .qa-session-item.active { background: var(--primary-bg); border-left: 3px solid var(--primary); }
        .qa-session-item .s-title { font-size: 12px; color: var(--text); overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
        .qa-session-item .s-meta { font-size: 10px; color: var(--text3); margin-top: 2px; display: flex; gap: 6px; }
        .qa-session-item .s-del { opacity: 0; color: var(--danger); cursor: pointer; font-size: 10px; }
        .qa-session-item:hover .s-del { opacity: 1; }
        .qa-sidebar-empty { padding: 20px; text-align: center; color: #ccc; font-size: 11px; }
        .qa-preview { width: 50%; max-width: 600px; min-width: 380px; min-height: 0; background: var(--card); border-left: 1px solid var(--border); display: none; flex-direction: column; overflow: hidden; }
        .qa-preview.show { display: flex; }
        .qa-preview-header { height: 36px; display: flex; align-items: center; padding: 0 12px; border-bottom: 1px solid var(--border); font-size: 12px; color: var(--text2); }
        .qa-preview-header .title { flex: 1; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
        .qa-preview-header .close-btn { width: 24px; height: 24px; border: none; background: none; cursor: pointer; font-size: 14px; color: var(--text3); border-radius: 4px; display: flex; align-items: center; justify-content: center; }
        .qa-preview-header .close-btn:hover { background: #f0f0f0; color: var(--danger); }
        .qa-preview-body { flex: 1 1 auto; min-height: 0; overflow-y: auto; overflow-x: hidden; padding: 12px; background: #e8e8e8; display: flex; flex-direction: column; align-items: center; gap: 8px; }
        .qa-preview-body > * { flex-shrink: 0; }
        .qa-preview-body canvas, .qa-preview-body img { flex: 0 0 auto; max-width: 100%; height: auto !important; box-shadow: 0 2px 8px rgba(0,0,0,0.15); border-radius: 2px; }
        .qa-preview-nav { display: flex; align-items: center; gap: 8px; padding: 4px 0; }
        .qa-preview-nav button { padding: 3px 10px; border: 1px solid var(--border); border-radius: 4px; background: var(--card); cursor: pointer; font-size: 12px; color: var(--text2); }
        .qa-preview-nav button:hover { border-color: var(--primary); color: var(--primary); }
        .qa-preview-nav .page-info { font-size: 12px; color: var(--text3); min-width: 60px; text-align: center; }

        /* === Debug面板 === */
        #debugPanel { position: fixed; bottom: 0; left: 0; right: 0; height: 180px; background: #1e1e1e; color: #d4d4d4; font-family: 'Cascadia Code', Consolas, monospace; font-size: 10px; overflow-y: auto; padding: 6px 10px; display: none; z-index: 100; border-top: 2px solid #444; }
        #debugPanel.show { display: block; }
        #debugPanel .line { line-height: 1.5; border-bottom: 1px solid #2a2a2a; white-space: pre-wrap; word-break: break-all; }
        .badge { display: inline-block; padding: 0 5px; border-radius: 3px; font-size: 10px; font-weight: 700; }
        .badge-primary { background: var(--primary-bg); color: var(--primary); }
        .badge-warn { background: #fff7e6; color: #d46b08; }

/* === 设置页 === */
.settings-page.active { display: flex; }
.settings-nav { width: 160px; border-right: 1px solid var(--border); display: flex; flex-direction: column; padding: 10px 8px; gap: 2px; background: var(--card); flex-shrink: 0; }
.settings-nav .sn { padding: 8px 12px; border: none; background: none; cursor: pointer; font-size: 12px; color: var(--text2); border-radius: 4px; text-align: left; }
.settings-nav .sn:hover { background: #f0f0f0; }
.settings-nav .sn.active { background: var(--primary-bg); color: var(--primary); font-weight: 600; }
.settings-nav-spacer { flex: 1; }
.settings-content { flex: 1; overflow-y: auto; padding: 16px 20px; }
.sp { display: none; }
.sp.active { display: block; }
.setting-row { display: flex; align-items: center; gap: 8px; margin-bottom: 8px; }
.setting-row label { width: 110px; text-align: right; color: var(--text2); font-size: 12px; flex-shrink: 0; }
.setting-row input, .setting-row select { padding: 4px 8px; border: 1px solid var(--border); border-radius: 4px; font-size: 12px; }
.setting-row .long { flex: 1; }
.setting-section-title { margin: 14px 0 6px; font-size: 12px; font-weight: 600; color: var(--text); border-left: 3px solid var(--primary); padding-left: 6px; }
/* LLM Profile 概览列表（表格风格，与设置页统一） */
.profile-overview { border: 1px solid var(--border); border-radius: 6px; overflow: hidden; }
.profile-overview .po-head,
.profile-overview .po-row { display: flex; align-items: center; gap: 10px; padding: 7px 12px; }
.profile-overview .po-head { background: var(--card, rgba(128,128,128,.06)); color: var(--text2); font-size: 11px; font-weight: 600; border-bottom: 1px solid var(--border); }
.profile-overview .po-row { cursor: pointer; border-bottom: 1px solid var(--border); }
.profile-overview .po-row:last-child { border-bottom: none; }
.profile-overview .po-row:hover { background: var(--primary-bg, rgba(0,120,255,.06)); }
.profile-overview .po-col { overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
.profile-overview .po-name { flex: 0 0 180px; font-weight: 600; color: var(--text); }
.profile-overview .po-provider { flex: 0 0 90px; font-size: 12px; color: var(--text2); }
.profile-overview .po-model { flex: 1; font-size: 12px; color: var(--text2); }
.profile-overview .po-action { flex: 0 0 auto; text-align: right; }
.profile-overview .po-action .mini-btn { visibility: hidden; }
.profile-overview .po-row:hover .po-action .mini-btn { visibility: visible; }
.prompt-area { width: 100%; padding: 6px 8px; border: 1px solid var(--border); border-radius: 4px; font-size: 12px; font-family: inherit; resize: vertical; box-sizing: border-box; margin-bottom: 6px; }
.mini-btn { padding: 3px 10px; border: 1px solid var(--border); border-radius: 4px; background: none; cursor: pointer; font-size: 11px; color: var(--text2); }
.mini-btn:hover { border-color: var(--primary); color: var(--primary); }
.mini-btn.primary { background: var(--primary); color: #fff; border-color: var(--primary); }
.mini-btn.primary:hover { opacity: .85; }
        .mini-btn.danger { color: var(--danger); }
        .text-btn { background: none; border: none; cursor: pointer; font-size: 12px; padding: 4px 8px; border-radius: 4px; transition: all 0.15s; }
        .text-btn:hover { background: #f0f0f0; }
        .text-btn.danger { color: var(--danger); }
        .text-btn.danger:hover { background: #fff1f0; }
        .kb-danger-zone { text-align: center; }
.kb-danger-zone .text-btn.danger { background: var(--danger); color: #fff; border-radius: 4px; padding: 4px 12px; font-size: 11px; }
.kb-danger-zone .text-btn.danger:hover { background: #ff7875; color: #fff; }
.hint { font-size: 11px; color: var(--text3); }

/* === 自定义确认对话框 === */
.modal-overlay { position: fixed; inset: 0; background: rgba(0,0,0,0.45); display: none; align-items: center; justify-content: center; z-index: 9999; }
.modal-overlay.show { display: flex; }
.modal-box { background: #fff; border-radius: 8px; padding: 22px 24px 18px; min-width: 320px; max-width: 420px; box-shadow: 0 8px 32px rgba(0,0,0,0.18); }
.modal-msg { font-size: 13px; line-height: 1.7; color: var(--text); white-space: pre-wrap; margin-bottom: 18px; }
.modal-btns { display: flex; justify-content: flex-end; gap: 10px; }
.modal-btn { padding: 6px 22px; border: none; border-radius: 5px; font-size: 13px; cursor: pointer; font-weight: 500; transition: all 0.15s; }
.modal-btn-yes { background: var(--primary); color: #fff; }
.modal-btn-yes:hover { opacity: 0.85; }
.modal-btn-no { background: #f0f0f0; color: var(--text2); }
.modal-btn-no:hover { background: #e0e0e0; }
/* 进度列表步骤进度条 */
.step-bar{height:4px;background:rgba(128,128,128,.15);border-radius:2px;margin-top:4px;overflow:hidden}
.step-bar-fill{height:100%;background:linear-gradient(90deg,#4a90d9,#6bc9ff);border-radius:2px;transition:width .4s ease}

/* 进行中步骤：流动不确定进度条 */
.step-bar-fill.indeterminate{width:40% !important;animation:stepIndeterminate 1.2s ease-in-out infinite}
@keyframes stepIndeterminate{0%{margin-left:-40%}100%{margin-left:100%}}
.judging-banner{padding:8px 10px;margin-bottom:8px;border-radius:4px;font-size:12px;background:rgba(114,46,209,.06)}
.judging-title{display:flex;align-items:center;gap:8px;margin-bottom:6px;min-height:20px}
.judging-title-main{display:flex;align-items:center;gap:8px;min-width:0}
.judging-count{color:var(--text3);white-space:nowrap;font-size:11px}
.judging-current-group{display:flex;align-items:center;gap:6px;margin:2px 0 5px;min-width:0;font-size:11px;line-height:1.4;color:var(--text2)}
.judging-group-index{color:var(--text3);white-space:nowrap}
.judging-group-kind{color:#722ed1;font-weight:600;white-space:nowrap}
.judging-group-name{min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;font-weight:600}
.judging-progress-meta{display:flex;justify-content:space-between;align-items:center;margin:0 0 3px;color:var(--text3);font-size:10px;line-height:1.3}
.judging-progress-meta span:first-child{color:#722ed1;font-weight:600}
.review-paused-tag{color:var(--warn);font-weight:700;white-space:nowrap}
.judging-progress-row{display:flex;align-items:center;gap:8px;min-width:0}
.judging-progress-track{height:6px;flex:1 1 auto;min-width:80px;background:#eee;border-radius:3px;overflow:hidden}
.judging-progress-fill{height:100%;border-radius:3px;transition:width .4s ease}
.judging-progress-fill.indeterminate{width:40% !important;animation:stepIndeterminate 1.2s ease-in-out infinite}
.review-controls{display:flex;align-items:center;gap:6px;flex:0 0 auto}
.review-control-btn{padding:4px 10px;border-radius:4px;font-size:11px;cursor:pointer;white-space:nowrap}
.review-control-btn.pause{border:1px solid var(--warn);background:none;color:var(--warn)}
.review-control-btn.resume{border:1px solid var(--primary);background:var(--primary);color:#fff}
.review-control-btn.cancel{border:1px solid var(--danger);background:none;color:var(--danger)}
.review-control-btn:hover{filter:brightness(.96)}
.review-error-banner{padding:10px;border:1px solid var(--danger);border-radius:4px;background:#fff1f0;margin-bottom:8px}
.review-error-title{font-weight:700;color:#cf1322}
.review-error-message{margin-top:5px;color:#820014;font-size:11px;line-height:1.5;word-break:break-word}
.review-error-actions{display:flex;gap:6px;margin-top:8px}
.review-error-actions .review-control-btn{background:#fff}
/* P1 暂停横幅：组边界真中断后的「继续 / 跳过剩余组」入口 */
.review-paused-banner{padding:10px;border:1px solid var(--warn);border-radius:4px;background:#fffbe6;margin-bottom:8px}
.review-paused-title{font-weight:700;color:#ad6800}
.review-paused-message{margin-top:5px;color:#8c6d00;font-size:11px;line-height:1.5;word-break:break-word}
.review-paused-actions{display:flex;gap:6px;margin-top:8px}
.review-paused-actions .review-control-btn{background:#fff}
/* P0 基线选择器：同族版本列表，默认最新，可显式切换对比基线 */
.baseline-picker{margin:0 12px 8px;padding:8px 10px;border:1px solid var(--border);border-radius:4px;background:var(--card)}
.baseline-picker-title{font-size:11px;font-weight:700;color:var(--text2);margin-bottom:6px}
.baseline-picker-note{font-weight:400;color:var(--text3);font-size:10px;margin-left:4px}
.baseline-picker-list{display:flex;flex-direction:column;gap:2px}
.baseline-row{display:flex;align-items:center;gap:6px;padding:4px 6px;border-radius:4px;font-size:11px;cursor:pointer;line-height:1.4}
.baseline-row:hover{background:var(--bg2)}
.baseline-row.selected{background:var(--primary-bg)}
.baseline-row.inactive{opacity:.62}
.baseline-radio{color:var(--primary);flex:none}
.baseline-name{font-weight:600;color:var(--text);white-space:nowrap;overflow:hidden;text-overflow:ellipsis;max-width:46%}
.baseline-meta{color:var(--text3);font-size:10px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.baseline-flag{margin-left:auto;flex:none;color:var(--text3);font-size:10px;border:1px solid var(--border);border-radius:3px;padding:0 4px}
.baseline-tag{flex:none;font-size:10px;color:var(--primary);border:1px solid var(--primary);border-radius:3px;padding:0 4px}
.baseline-tag.primary{color:#fff;background:var(--primary);border-color:var(--primary)}
@media(max-width:1000px){.kb-right.review-mode{grid-template-columns:minmax(0,1fr);grid-template-rows:36px minmax(260px,1fr) minmax(240px,var(--review-stack-height,42vh))}.kb-right.review-mode .review-panel{grid-column:1;grid-row:2;border-right:none;border-bottom:1px solid var(--border)}.kb-right.review-mode .preview-panel{grid-column:1;grid-row:3;border-left:none}.kb-right.review-mode .review-resize-handle{display:none!important}.kb-right.review-mode[data-review-preview="closed"]{grid-template-rows:36px minmax(0,1fr)}}
@media(max-width:640px){.judging-progress-row{align-items:stretch;flex-direction:column}.review-controls{width:100%;justify-content:flex-end}.judging-progress-track{width:100%;flex-basis:6px}}
.vc-table-details{margin:0 14px 10px;padding:9px 10px;background:var(--bg);border:1px solid var(--border);border-radius:4px;font-size:11px}.vc-table-context{margin-bottom:7px;color:var(--text2)}.vc-cell-change-table{width:100%;border-collapse:collapse;background:var(--card)}.vc-cell-change-table th,.vc-cell-change-table td{padding:5px 7px;border:1px solid var(--border);text-align:left;vertical-align:top;word-break:break-word}.vc-cell-change-table th{color:var(--text3);font-weight:600;background:var(--bg)}
        /* AI 差异摘要卡片（预审核总览顶部） */
        .ai-summary-box { margin: 10px 12px; padding: 10px 12px; background: linear-gradient(135deg, rgba(22,119,255,.06), rgba(77,143,255,.10)); border: 1px solid rgba(22,119,255,.35); border-left: 3px solid var(--primary); border-radius: var(--radius); font-size: 12.5px; line-height: 1.7; color: var(--text2); }

/* ============ 用户体系：登录遮罩 / 身份徽标 / 权限提示 ============ */
.login-overlay{position:fixed;inset:0;z-index:9999;display:none;align-items:center;justify-content:center;background:rgba(20,26,36,.55);backdrop-filter:blur(3px);}
.login-overlay.show{display:flex;}
.login-box{width:340px;background:var(--card);border:1px solid var(--border);border-radius:8px;padding:22px 24px;box-shadow:0 12px 40px rgba(0,0,0,.25);}
.login-title{font-size:16px;font-weight:600;color:var(--primary);margin-bottom:4px;}
.login-sub{font-size:12px;color:var(--text3);margin-bottom:16px;}
.login-row{display:flex;align-items:center;gap:8px;margin-bottom:10px;}
.login-row label{width:48px;font-size:12px;color:var(--text2);}
.login-row input{flex:1;padding:6px 8px;border:1px solid var(--border);border-radius:4px;font-size:13px;background:var(--bg);color:var(--text);}
.login-row input:focus{outline:none;border-color:var(--primary);}
.login-error{min-height:16px;font-size:12px;color:#d9534f;margin-bottom:8px;}
.login-btn{width:100%;padding:8px;border:none;border-radius:4px;background:var(--primary);color:#fff;font-size:13px;cursor:pointer;}
.login-btn:hover{opacity:.9;}
.login-btn:disabled{opacity:.6;cursor:default;}
.login-hint{margin-top:12px;font-size:11px;line-height:1.6;color:var(--text3);}
.user-badge{display:flex;align-items:center;gap:6px;font-size:12px;color:var(--text2);}
.user-badge .user-name{max-width:140px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;}
.user-badge .user-role{padding:1px 6px;border-radius:8px;font-size:11px;background:var(--bg);border:1px solid var(--border);color:var(--text3);}
.user-badge .role-admin{color:#b8860b;border-color:#e0c070;background:#fdf6e3;}
.doc-scope-hint{margin:6px 8px;padding:6px 8px;font-size:11px;color:var(--text3);background:var(--bg);border:1px dashed var(--border);border-radius:4px;}
/* ============================================================
   国际化企业风 UI 组件层
   目标：状态前置、动作唯一、层级收敛；正常态低噪音，异常态才展开。
   ============================================================ */

/* --- 顶栏状态徽标 --- */
.system-status { display: inline-flex; align-items: center; gap: 6px; height: 24px; padding: 0 10px; border: 1px solid var(--border); border-radius: 999px; background: var(--card); cursor: pointer; font: inherit; font-size: 11px; color: var(--text2); }
.system-status:hover { border-color: var(--primary); color: var(--primary); }
.system-status .dot { width: 6px; height: 6px; border-radius: 50%; background: var(--success); flex: 0 0 auto; }
.system-status.warn { border-color: #ffd591; background: #fffbe6; color: #ad6800; }
.system-status.warn .dot { background: var(--warn); }
.system-status.warn:hover { border-color: var(--warn); color: #ad6800; }
.system-status .cta { text-decoration: underline; text-underline-offset: 2px; }

/* --- 使用流程浮层 --- */
.usage-guide { display: none; position: fixed; top: 48px; right: 12px; z-index: 200; width: 380px; max-height: calc(100vh - 80px); overflow-y: auto; background: var(--card); border: 1px solid var(--border); border-radius: 8px; box-shadow: 0 12px 32px rgba(0,0,0,.14); padding: 14px 16px; }
.usage-guide.show { display: block; }
.guide-step { display: flex; gap: 10px; padding: 9px 0; border-bottom: 1px solid #f2f2f2; }
.guide-step:last-of-type { border-bottom: none; }
.guide-step .idx { flex: 0 0 22px; width: 22px; height: 22px; border-radius: 50%; background: var(--primary-bg); color: var(--primary); font-size: 11px; font-weight: 700; display: flex; align-items: center; justify-content: center; }
.guide-step b { font-size: 12.5px; color: var(--text); }
.guide-step p { margin: 2px 0 0; font-size: 11.5px; line-height: 1.65; color: var(--text2); }
.guide-warn { margin-top: 10px; padding: 8px 10px; background: #fffbe6; border: 1px solid #ffe58f; border-radius: 5px; font-size: 11.5px; line-height: 1.6; color: #ad6800; }

/* --- 通用内联提示条：原因 + 下一步动作 --- */
.status-notice { display: flex; align-items: flex-start; gap: 10px; padding: 9px 11px; border-radius: 6px; border: 1px solid var(--border); background: var(--bg2); font-size: 12px; line-height: 1.6; }
.status-notice + .status-notice { margin-top: 6px; }
.status-notice .notice-body { flex: 1 1 auto; min-width: 0; }
.status-notice .notice-title { font-weight: 600; color: var(--text); }
.status-notice .notice-text { color: var(--text2); margin-top: 2px; }
.status-notice .notice-actions { flex: 0 0 auto; display: flex; gap: 6px; align-items: center; }
.status-notice .notice-action { padding: 3px 10px; border-radius: 4px; border: 1px solid var(--border); background: var(--card); font: inherit; font-size: 11px; color: var(--text2); cursor: pointer; white-space: nowrap; }
.status-notice .notice-action:hover { border-color: var(--primary); color: var(--primary); }
.status-notice .notice-action.primary { background: var(--primary); border-color: var(--primary); color: #fff; }
.status-notice .notice-action.primary:hover { opacity: .88; color: #fff; }
.status-notice.warn { background: #fffbe6; border-color: #ffe58f; }
.status-notice.warn .notice-title { color: #ad6800; }
.status-notice.warn .notice-text { color: #8c5a00; }
.status-notice.error { background: #fff1f0; border-color: #ffccc7; }
.status-notice.error .notice-title { color: #cf1322; }
.status-notice.error .notice-text { color: #820014; }
.status-notice.ok { background: #f6ffed; border-color: #b7eb8f; }
.status-notice.ok .notice-title { color: #237804; }
#uploadStatus:not(:empty), #qaStatus:not(:empty), #llmRouteStatus:not(:empty) { display: block; }
#uploadStatus:not(:empty) { margin-bottom: 8px; }
#qaStatus:not(:empty) { padding: 10px 16px 0; }
#llmRouteStatus:not(:empty) { margin-bottom: 12px; }

/* --- 预审核面板：结构化流程头 --- */
.review-actions { padding: 0; display: block; }
.review-brief { display: flex; align-items: center; gap: 8px; padding: 9px 12px; border-bottom: 1px solid var(--border); flex-wrap: wrap; }
.review-brief .brief-title { font-size: 12.5px; font-weight: 600; color: var(--text); }
.review-brief .brief-doc { font-size: 11px; color: var(--text3); overflow: hidden; text-overflow: ellipsis; white-space: nowrap; min-width: 0; flex: 1 1 120px; }
.review-brief .brief-chip { display: inline-flex; align-items: center; gap: 4px; padding: 1px 7px; border-radius: 999px; font-size: 10.5px; font-weight: 600; border: 1px solid transparent; white-space: nowrap; }
.review-brief .brief-chip .n { font-variant-numeric: tabular-nums; }
.chip-conflict { background: #fff1f0; color: #cf1322; border-color: #ffccc7; }
.chip-suspect { background: #fffbe6; color: #ad6800; border-color: #ffe58f; }
.chip-change { background: var(--primary-bg); color: var(--primary); border-color: #91caff; }
.chip-ok { background: #f6ffed; color: #237804; border-color: #b7eb8f; }
.chip-error { background: #fff1f0; color: #cf1322; border-color: #ffccc7; }
.chip-muted { background: var(--bg2); color: var(--text3); border-color: var(--border); }
.review-next { display: flex; align-items: center; gap: 8px; padding: 8px 12px; background: var(--primary-bg); border-bottom: 1px solid var(--border); font-size: 12px; color: var(--primary); flex-wrap: wrap; }
.review-next.error { background: #fff1f0; color: #cf1322; }
.review-next.ok { background: #f6ffed; color: #237804; }
.review-next .next-step { font-weight: 600; }
.review-next .next-hint { color: var(--text2); font-weight: 400; }
.review-buttons { display: flex; flex-wrap: wrap; gap: 8px; padding: 9px 12px; align-items: center; }
.review-buttons .spacer { flex: 1 1 auto; }
.review-buttons .btn { display: inline-flex; align-items: center; gap: 5px; }
.review-buttons .btn-ok { order: 1; }
.review-buttons .btn-no { order: 2; }
.review-buttons #reviewExportBtn { order: 0; }
.review-buttons #reviewPreviewRestoreBtn { order: 0; }
.review-buttons #reviewRerunBtn { order: 0; }

/* --- 差异列表：单一卡片流（替代「总览 + 分组」两套重复 UI） --- */
.diff-toolbar { display: flex; align-items: center; gap: 6px; padding: 7px 10px; border-bottom: 1px solid var(--border); background: var(--card); flex-wrap: wrap; position: sticky; top: 0; z-index: 4; }
.diff-toolbar .filter-chip { padding: 2px 10px; border: 1px solid var(--border); border-radius: 999px; background: var(--card); font: inherit; font-size: 11px; color: var(--text2); cursor: pointer; }
.diff-toolbar .filter-chip:hover { border-color: var(--primary); color: var(--primary); }
.diff-toolbar .filter-chip.active { background: var(--primary); border-color: var(--primary); color: #fff; }
.diff-toolbar .filter-group { display: flex; gap: 5px; flex-wrap: wrap; }
.diff-toolbar .toolbar-right { margin-left: auto; display: flex; align-items: center; gap: 6px; }
.diff-toolbar .progress-count { font-size: 11px; color: var(--text3); font-variant-numeric: tabular-nums; }
.diff-toolbar .toolbar-btn { padding: 2px 9px; border: 1px solid var(--border); border-radius: 4px; background: var(--card); font: inherit; font-size: 11px; color: var(--text2); cursor: pointer; }
.diff-toolbar .toolbar-btn:hover { border-color: var(--primary); color: var(--primary); }

.diff-doc-card { margin: 8px 10px; border: 1px solid var(--border); border-radius: 6px; background: var(--card); overflow: hidden; }
.diff-doc-head { display: flex; align-items: center; gap: 8px; padding: 8px 10px; background: var(--bg2); cursor: pointer; flex-wrap: wrap; }
.diff-doc-head:hover { background: var(--primary-bg); }
.diff-doc-head .caret { flex: 0 0 auto; color: var(--text3); font-size: 10px; transition: transform .18s; }
.diff-doc-card.open .diff-doc-head .caret { transform: rotate(90deg); }
.diff-doc-head .doc-tag { flex: 0 0 auto; min-width: 24px; padding: 0 5px; height: 18px; line-height: 18px; text-align: center; border-radius: 3px; background: var(--primary); color: #fff; font-size: 10px; font-weight: 700; }
.diff-doc-head .doc-name { min-width: 0; flex: 1 1 140px; font-size: 12px; font-weight: 600; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
.diff-doc-head .doc-kind { font-size: 10.5px; color: var(--text3); white-space: nowrap; }
.diff-doc-cards { padding: 6px 8px 8px; display: flex; flex-direction: column; gap: 4px; }
.diff-doc-card:not(.open) .diff-doc-cards { display: none; }
.diff-doc-note { padding: 8px 10px; font-size: 11px; color: var(--text3); }

/* 单条差异卡：左侧色条 + 单行标题 + 单行摘要，单击进入详情 */
.diff-card { display: grid; grid-template-columns: 3px 1fr auto; align-items: center; gap: 0; border: 1px solid #eef0f2; border-radius: 5px; background: var(--card); cursor: pointer; transition: border-color .15s, background .15s; overflow: hidden; }
.diff-card:hover { border-color: var(--primary); background: var(--primary-bg); }
.diff-card.selected { border-color: var(--primary); box-shadow: inset 2px 0 0 var(--primary); background: var(--primary-bg); }
.diff-card .bar { width: 3px; align-self: stretch; background: var(--text3); }
.diff-card.k-modified .bar { background: var(--primary); }
.diff-card.k-added .bar { background: var(--success); }
.diff-card.k-removed .bar { background: var(--danger); }
.diff-card.k-conflict .bar { background: var(--danger); }
.diff-card.k-suspect .bar { background: var(--warn); }
.diff-card .body { padding: 7px 10px; min-width: 0; }
.diff-card .line1 { display: flex; align-items: baseline; gap: 6px; min-width: 0; }
.diff-card .kind { flex: 0 0 auto; font-size: 11px; font-weight: 700; }
.diff-card.k-modified .kind { color: var(--primary); }
.diff-card.k-added .kind { color: #2b8a3e; }
.diff-card.k-removed .kind { color: var(--danger); }
.diff-card.k-conflict .kind { color: var(--danger); }
.diff-card.k-suspect .kind { color: #ad6800; }
.diff-card .loc { flex: 0 0 auto; font-size: 10.5px; color: var(--text3); white-space: nowrap; }
.diff-card .text { flex: 1 1 auto; min-width: 0; font-size: 11.5px; color: var(--text2); overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
.diff-card .side { padding: 0 9px; font-size: 10px; color: var(--text3); white-space: nowrap; }
.diff-card.viewed .body { opacity: .72; }
.diff-card.viewed .side::after { content: '已看'; }
.diff-card:not(.viewed) .side::after { content: '查看'; }
@media (max-width: 720px) {
  .diff-card { grid-template-columns: 3px 1fr; }
  .diff-card .side { display: none; }
  .diff-card .text { white-space: normal; }
}

/* --- 进度列表「下一步」指引行 --- */
.step-next { margin-top: 6px; padding-top: 6px; border-top: 1px dashed var(--border); color: var(--primary); font-size: 10.5px; line-height: 1.5; }
.judging-next-hint { margin-top: 5px; font-size: 10px; color: var(--text3); line-height: 1.4; }
.pulse-dot { display: inline-block; width: 7px; height: 7px; border-radius: 50%; margin-right: 2px; animation: pulse 1.4s ease-in-out infinite; }
@keyframes pulse { 0%,100% { opacity: 1; } 50% { opacity: .35; } }
.msg.bot .qa-welcome-hint { margin-top: 6px; padding-top: 6px; border-top: 1px dashed var(--border); font-size: 11.5px; color: var(--text3); }

/* --- 差异详情顶部工具条（窄栏自适应换行） --- */
.vc-toolbar { display: flex; align-items: center; gap: 8px; padding: 8px 12px; border-bottom: 1px solid var(--border); background: var(--card); flex-shrink: 0; flex-wrap: wrap; }
.vc-toolbar .vc-back-btn { flex: 0 0 auto; padding: 4px 12px; border: 1px solid var(--border); background: var(--card); border-radius: 4px; cursor: pointer; font-size: 11px; color: var(--text2); }
.vc-toolbar .vc-back-btn:hover { border-color: var(--primary); color: var(--primary); }
.vc-toolbar .vc-toolbar-title { flex: 1 1 120px; min-width: 0; font-weight: 600; font-size: 12px; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
.vc-toolbar .vc-toolbar-nav { flex: 0 0 auto; display: flex; gap: 6px; align-items: center; }
.vc-nav-btn { padding: 3px 10px; border: 1px solid var(--border); border-radius: 4px; background: var(--card); cursor: pointer; font-size: 11px; color: var(--text2); white-space: nowrap; }
.vc-nav-btn:hover { border-color: var(--primary); color: var(--primary); }
.vc-nav-btn.vc-nav-unseen { border-color: var(--primary); color: var(--primary); }
.vc-nav-toast { position: fixed; left: 50%; bottom: 56px; transform: translateX(-50%); z-index: 9998; padding: 8px 18px; background: rgba(0,0,0,.78); color: #fff; border-radius: 18px; font-size: 12px; }

/* 面板内提示条：紧凑单行，避免挤占差异列表高度 */
.review-panel .status-notice { padding: 6px 10px; font-size: 11.5px; align-items: center; }
.review-panel .status-notice .notice-title { font-size: 11.5px; }
.review-panel .status-notice .notice-text { margin-top: 0; }
.review-panel .status-notice .notice-body { display: flex; gap: 8px; align-items: baseline; flex-wrap: wrap; }
.diff-toolbar { position: sticky; top: 0; }
/* 管理页：用户/用户组表格与表单（设置页「用户与权限」） */
.admin-table{width:100%;border-collapse:collapse;background:var(--card);font-size:11.5px;margin-bottom:8px}
.admin-table th,.admin-table td{border:1px solid var(--border);padding:5px 8px;text-align:left;vertical-align:middle;word-break:break-word}
.admin-table th{background:var(--bg2);color:var(--text2);font-weight:600;white-space:nowrap}
.admin-form{background:var(--bg2);border:1px solid var(--border);border-radius:4px;padding:8px 10px;margin-bottom:8px}
/* 矛盾详情 N|B 双栏对照 */
.cmp-col-head{font-size:11px;font-weight:600;color:var(--text2);padding:4px 8px;background:var(--bg2);border-radius:4px;margin-bottom:4px}
/* 用户行所属组只读标签 */
.user-group-chip{display:inline-block;font-size:10.5px;color:var(--text2);border:1px solid var(--border);border-radius:3px;padding:1px 6px;margin:1px 2px 1px 0;white-space:nowrap}
/* Word/Markdown 富文档预览（doc-render.js 渲染产物）：仿文档页面样式 */
.doc-render{background:#fff;color:#222;max-width:860px;margin:0 auto;padding:48px 56px;min-height:80%;box-shadow:0 2px 12px rgba(0,0,0,.12);border-radius:4px;font-family:"Calibri","DengXian","等线","Microsoft YaHei","PingFang SC",sans-serif;font-size:14px;line-height:1.75;}
.doc-render h1{font-size:26px;color:#1f3864;text-align:center;margin:18px 0 22px;font-weight:700}
.doc-render h2{font-size:20px;color:#2e5395;border-bottom:2px solid #2e5395;padding-bottom:4px;margin:26px 0 12px}
.doc-render h3{font-size:16px;color:#2e5395;margin:18px 0 8px}
.doc-render p{margin:0 0 10px;text-indent:2em}
.doc-render table{border-collapse:collapse;width:100%;margin:12px 0}
.doc-render table td,.doc-render table th{border:1px solid #7f7f7f;padding:5px 9px;font-size:13px}
.doc-render table th{background:#edf2f9;font-weight:700}
.doc-render ul,.doc-render ol{margin:6px 0 10px;padding-left:2.2em}
.doc-render li{margin-bottom:4px}
.doc-render img{max-width:100%}
.doc-render.md-render p{text-indent:0}
.doc-render pre{background:var(--bg2);padding:10px;border-radius:4px;overflow-x:auto}
.doc-render pre.doc-plain{white-space:pre-wrap;font-family:inherit;font-size:13px}
mark.doc-hl{background:#ffe58f;color:inherit;padding:0 1px;border-radius:1px}
/* 矛盾对比双栏内的文档渲染：半宽窄栏用紧凑排版 */
#cmpPagesN .doc-render,#cmpPagesB .doc-render{padding:18px 22px;font-size:12px;box-shadow:none;border:1px solid var(--border);border-radius:4px}
#cmpPagesN .doc-render h1,#cmpPagesB .doc-render h1{font-size:16px;margin:10px 0 12px}
#cmpPagesN .doc-render h2,#cmpPagesB .doc-render h2{font-size:13.5px;margin:14px 0 8px}
#cmpPagesN .doc-render h3,#cmpPagesB .doc-render h3{font-size:12.5px;margin:10px 0 6px}
#cmpPagesN .doc-render p,#cmpPagesB .doc-render p{margin-bottom:7px}
#cmpPagesN .doc-render table td,#cmpPagesN .doc-render table th,#cmpPagesB .doc-render table td,#cmpPagesB .doc-render table th{padding:3px 6px;font-size:11px}

/* QA 引用卡：图片块内嵌原图缩略图 */
.src-image{display:block;max-width:280px;max-height:160px;margin:6px 0 2px;border:1px solid var(--border,#dde3ea);border-radius:6px;cursor:zoom-in;object-fit:contain;background:#fff;}
.src-image:hover{border-color:var(--primary,#2563eb);}

/* 答案内联图片画廊：引用中的图片证据自动附在答案尾部 */
.ans-images{margin:10px 0 4px;padding-top:8px;border-top:1px dashed var(--border,#dde3ea);}
.ans-images-title{font-size:12px;color:var(--text3,#6b7280);margin-bottom:6px;}
.ans-images-grid{display:flex;flex-wrap:wrap;gap:10px;}
.ans-image-fig{margin:0;max-width:240px;}
.ans-image-fig img{display:block;width:100%;max-height:150px;object-fit:contain;border:1px solid var(--border,#dde3ea);border-radius:6px;background:#fff;cursor:zoom-in;}
.ans-image-fig img:hover{border-color:var(--primary,#2563eb);}
.ans-image-fig figcaption{font-size:11px;color:var(--text3,#6b7280);margin-top:3px;line-height:1.35;}

/* ── 待审核入口（static/pending-review.js）────────────────────────
   顶栏「⏳ 待审核 N」+ 下拉清单：让待决策任务在换浏览器/清 sessionStorage 后仍可打开。 */
.pending-wrap{position:relative;display:inline-flex;align-items:center}
.pending-btn{white-space:nowrap}
.pending-panel{position:absolute;top:calc(100% + 6px);right:0;z-index:60;min-width:320px;max-width:520px;
  max-height:60vh;overflow:auto;background:var(--card,#fff);border:1px solid var(--border,#ddd);
  border-radius:8px;box-shadow:0 8px 24px rgba(0,0,0,.18);padding:6px}
.pending-head{padding:6px 10px;font-size:12px;font-weight:600;color:var(--text2,#666);
  border-bottom:1px solid var(--border,#eee);margin-bottom:4px}
.pending-row{display:flex;flex-direction:column;gap:2px;width:100%;text-align:left;background:none;
  border:none;border-radius:6px;padding:8px 10px;cursor:pointer}
.pending-row:hover{background:var(--primary-bg,rgba(0,120,255,.08))}
.pending-row-main{font-size:13px;color:var(--text,#222);overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.pending-row-meta{font-size:11px;color:var(--text2,#777)}

/* 会话来源开关（static/qa-core.js）：测试会话默认隐藏，标记 🧪 便于识别 */
.qa-origin-toggle{display:flex;align-items:center;gap:6px;font-size:11px;color:var(--text3,#6b7280);cursor:pointer;padding:4px 2px}
.qa-origin-toggle input{cursor:pointer}
.qa-session-item .s-test{margin-right:4px}
