* { box-sizing: border-box; margin: 0; padding: 0; }
:root {
  --bg: #f5f6f8; --panel: #ffffff; --line: #e3e6ea; --text: #24292f;
  --muted: #6a737d; --primary: #2f6fed; --primary-d: #2458c4; --danger: #d1242f;
}
html, body { height: 100%; }
body { font: 14px/1.6 "Segoe UI", "Microsoft YaHei", sans-serif; color: var(--text);
       background: var(--bg); }

/* 登录 */
.login-card { background: var(--panel); border-radius: 12px; padding: 40px 44px; width: 360px;
              box-shadow: 0 12px 40px rgba(0,0,0,.18); text-align: center; }
.login-card .input { margin-bottom: 12px; }
.brand-lg { font-size: 22px; margin-bottom: 4px; }
.login-sub { color: var(--muted); margin-bottom: 20px; }
.login-error { color: var(--danger); margin-bottom: 12px; font-size: 13px; }

/* 顶栏 */
.topbar { display: flex; align-items: center; gap: 16px; height: 52px; padding: 0 16px;
          background: var(--panel); border-bottom: 1px solid var(--line); }
.brand { font-weight: 700; font-size: 16px; color: var(--primary); }
.ctx { display: flex; gap: 8px; flex: 1; }
.ctx .select { width: 260px; }
.user-box { display: flex; align-items: center; gap: 10px; color: var(--muted); }

/* 三栏 */
.workbench { height: 100vh; width: 100vw; display: flex; flex-direction: column; }
.columns { flex: 1; display: flex; min-height: 0; width: 100%; }
.col-left { width: 300px; background: var(--panel); border-right: 1px solid var(--line);
            display: flex; flex-direction: column; min-height: 0; }
.col-center { flex: 1; display: flex; flex-direction: column; min-width: 0; position: relative;
              padding: 16px; overflow: auto; }
.col-right { width: 280px; background: var(--panel); border-left: 1px solid var(--line);
             display: flex; min-height: 0; transition: width .2s; overflow: hidden; }
.col-right.collapsed { width: 22px; }
.col-right.collapsed .rail-body { display: none; }
.rail-toggle { border: none; background: var(--panel); border-left: 1px solid var(--line);
               width: 22px; cursor: pointer; color: var(--muted); font-size: 14px; }
.rail-body { flex: 1; padding: 12px; overflow: auto; min-width: 240px; }

/* 左栏 tab */
.col-left { flex-direction: row !important; }
.tabs { display: flex; flex-direction: column; gap: 4px; padding: 10px 6px;
        border-right: 1px solid var(--line); background: var(--panel); width: 46px; flex-shrink: 0; }
.tab { padding: 9px 0; border: none; border-radius: 6px; background: none; cursor: pointer;
       color: var(--muted); font-size: 11px; text-align: center; line-height: 1.3; letter-spacing: 1px;
       transition: background .15s, color .15s; }
.tab:hover { background: rgba(47,111,237,.06); color: var(--text); }
.tab.active { color: var(--primary); background: rgba(47,111,237,.08); font-weight: 600; }
.tab-pages { flex: 1; display: flex; flex-direction: column; min-width: 0; min-height: 0; }
.tab-page { flex: 1; overflow: auto; padding: 12px; min-height: 0; }
.side-section { margin-bottom: 12px; }
.side-title { font-size: 13px; color: var(--muted); margin: 14px 0 8px; }

/* 列表卡片 */
.version-list, .rule-list { display: flex; flex-direction: column; gap: 8px; }
.ver-card, .rule-card { border: 1px solid var(--line); border-radius: 8px; padding: 10px 12px;
                        cursor: pointer; background: var(--panel); }
.ver-card:hover, .rule-card:hover { border-color: var(--primary); }
.ver-name { font-weight: 600; font-size: 13px; word-break: break-all; }
.ver-meta { color: var(--muted); font-size: 12px; margin-top: 2px; }
.list-empty { color: var(--muted); font-size: 13px; padding: 16px 4px; }

/* 任务列表（2026-09-13 按产品决策恢复直连时从 97bbbb5 恢复；M8-T24 改版时曾移除） */
.task-list { list-style: none; }
.task-item { border: 1px solid var(--line); border-radius: 8px; padding: 8px 10px;
             margin-bottom: 8px; cursor: pointer; }
.task-item:hover { border-color: var(--primary); }
.task-item .t-title { font-size: 13px; font-weight: 600; }
.task-item .t-meta { font-size: 12px; color: var(--muted); }

/* 结果历史折叠区（M8 保留面，降级为任务列表下方的次级折叠） */
.side-details summary { font-size: 13px; color: var(--muted); margin: 14px 0 8px; cursor: pointer; user-select: none; }
.side-details[open] summary { margin-bottom: 4px; }

/* ===== M8-T24：右侧「结果历史」（Spec 10.1～10.4：图标+应用名、状态徽标、一行摘要、
   资源名、首次调用时间、任务/图谱数量；多任务单父项可展开）===== */
.app-result-list { display: flex; flex-direction: column; }
.app-result-item { border: 1px solid var(--line); border-radius: 8px; padding: 8px 10px;
                   margin-bottom: 8px; cursor: pointer; }
.app-result-item:hover { border-color: var(--primary); }
.ar-head { display: flex; gap: 6px; align-items: center; min-width: 0; }
.ar-head .ar-icon { font-size: 15px; flex: 0 0 auto; }
.ar-name { font-weight: 600; font-size: 13px; flex: 1; min-width: 0;
           overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
.ar-badge { font-size: 11px; border-radius: 10px; padding: 0 7px; color: #fff;
            flex: 0 0 auto; line-height: 17px; }
.ar-badge.queued { background: var(--muted); }
.ar-badge.running { background: #9a6700; }
.ar-badge.waiting_input { background: #8250df; }
.ar-badge.completed { background: #1a7f37; }
.ar-badge.partial_failed { background: #bc4c00; }
.ar-badge.failed { background: var(--danger); }
.ar-badge.cancelled { background: #57606a; }
.ar-badge.interrupted { background: #9a6700; }
.ar-summary { font-size: 12px; margin-top: 3px; overflow: hidden;
              text-overflow: ellipsis; white-space: nowrap; }
.ar-meta { display: flex; gap: 4px; flex-wrap: wrap; font-size: 11px; color: var(--muted);
           margin-top: 2px; min-width: 0; }
.ar-meta span { overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
.ar-tasks { display: flex; flex-wrap: wrap; gap: 4px 10px; border-top: 1px dashed var(--line);
            margin-top: 6px; padding-top: 5px; }
.ar-expand { font-size: 12px; margin-top: 5px; }
.ar-task-link { font-size: 12px; }

/* M8-T25：历史定位原轮次高亮 */
.msg-row.turn-flash .bubble { box-shadow: 0 0 0 2px rgba(47,111,237,.55); border-radius: 10px; }

.badge { display: inline-block; padding: 0 8px; border-radius: 10px; font-size: 12px;
         color: #fff; background: var(--muted); }
.badge.done { background: #1a7f37; } .badge.failed { background: var(--danger); }
.badge.running { background: #9a6700; }

/* 应用图格 */
.app-grid { display: grid; grid-template-columns: 1fr 1fr; gap: 8px; margin-bottom: 8px; }
.app-tile { border: 1px solid var(--line); border-radius: 8px; padding: 14px 8px; background: none;
            cursor: pointer; display: flex; flex-direction: column; align-items: center; gap: 6px;
            font-size: 13px; }
.app-tile:hover:not(:disabled) { border-color: var(--primary); color: var(--primary); }
.app-tile:disabled { opacity: .45; cursor: not-allowed; }
.app-icon { font-size: 22px; }

/* 中间聊天占位与面板 */
.chat-empty { flex: 1; display: flex; flex-direction: column; align-items: center;
              justify-content: center; color: var(--muted); gap: 6px; }
.chat-icon { font-size: 40px; }
.chat-hint { font-size: 12px; }
.panel { position: absolute; inset: 16px; background: var(--panel); border: 1px solid var(--line);
         border-radius: 10px; display: flex; flex-direction: column; min-height: 0;
         box-shadow: 0 4px 18px rgba(0,0,0,.08); }
.panel.fullscreen { position: fixed; inset: 24px; z-index: 40; }
.panel-head { display: flex; justify-content: space-between; align-items: flex-start;
              padding: 14px 18px; border-bottom: 1px solid var(--line); }
.panel-head h2 { font-size: 17px; }
.panel-subtitle { color: var(--muted); font-size: 13px; margin-top: 2px; }
.panel-actions { display: flex; gap: 8px; }
.panel-body { flex: 1; overflow: auto; padding: 16px 18px; min-height: 0; }

/* 遮罩 */
.overlay-backdrop { position: fixed; inset: 0; background: rgba(0,0,0,.45); z-index: 30;
                    display: flex; align-items: center; justify-content: center; }
.overlay-backdrop[hidden], .workbench[hidden], .panel[hidden],
.chat-main[hidden], .chat-empty[hidden] { display: none; }

/* 表格与表单 */
table.data { width: 100%; border-collapse: collapse; margin-top: 8px; }
table.data th, table.data td { border-bottom: 1px solid var(--line); padding: 7px 10px;
                               text-align: left; font-size: 13px; }
table.data th { color: var(--muted); font-weight: 600; background: #fafbfc; }
td.num, th.num { text-align: right; font-variant-numeric: tabular-nums; }
.trace-box { background: #f6f8fa; border: 1px solid var(--line); border-radius: 8px;
             padding: 10px 12px; margin: 6px 0 12px; font-size: 13px; }
.trace-box code { background: #eff2f5; padding: 1px 6px; border-radius: 4px; }
.link-btn { border: none; background: none; color: var(--primary); cursor: pointer;
            font-size: 13px; padding: 0; }
.form-grid { display: grid; grid-template-columns: 90px 1fr; gap: 10px 12px; max-width: 720px;
             align-items: center; }
.form-grid label { color: var(--muted); font-size: 13px; text-align: right; }
.form-actions { grid-column: 2; display: flex; gap: 8px; margin-top: 4px; }
.err-list { color: var(--danger); margin: 10px 0; padding-left: 18px; }

/* 通用 */
.btn { border: 1px solid var(--line); background: var(--panel); color: var(--text);
       border-radius: 6px; padding: 6px 14px; cursor: pointer; font-size: 13px; }
.btn:hover { border-color: var(--primary); color: var(--primary); }
.btn.primary { background: var(--primary); border-color: var(--primary); color: #fff; }
.btn.primary:hover { background: var(--primary-d); color: #fff; }
.btn.block { width: 100%; }
.btn:disabled { opacity: .45; cursor: not-allowed; }
.input { border: 1px solid var(--line); border-radius: 6px; padding: 7px 10px; font-size: 13px;
         width: 100%; background: var(--panel); }
.input:focus, .btn:focus { outline: 2px solid rgba(47,111,237,.35); outline-offset: 1px; }
.bar-row { display: flex; align-items: center; gap: 8px; margin: 4px 0; font-size: 13px; }
.bar-track { flex: 1; background: #eff2f5; border-radius: 4px; height: 14px; overflow: hidden; }
.bar-fill { height: 100%; background: var(--primary); }
.toast { position: fixed; bottom: 24px; left: 50%; transform: translateX(-50%); z-index: 50;
         background: #24292f; color: #fff; border-radius: 8px; padding: 10px 20px; font-size: 13px; }

/* ===== 聊天（M4-T6）===== */
.chat-wrap { flex: 1; display: flex; flex-direction: column; min-height: 0; }
.chat-main { flex: 1; display: flex; flex-direction: column; min-height: 0;
             background: var(--panel); border: 1px solid var(--line); border-radius: 10px; }
.chat-tabs { display: flex; flex-wrap: wrap; gap: 6px; align-items: center;
             padding: 8px 10px; border-bottom: 1px solid var(--line); }
.chat-actions { display: flex; justify-content: flex-end; gap: 6px; padding: 5px 10px;
                border-bottom: 1px solid var(--line); }
.chat-actions .btn { padding: 3px 9px; font-size: 12px; }
.chat-tab { border: 1px solid var(--line); background: none; border-radius: 14px;
            padding: 3px 12px; font-size: 12px; cursor: pointer; color: var(--muted);
            white-space: nowrap; position: relative; }
.chat-tab .tab-x { position: absolute; top: -7px; right: -7px; width: 17px; height: 17px;
                   border-radius: 50%; background: #d93025; color: #fff; font-size: 12px;
                   line-height: 17px; text-align: center; display: none; cursor: pointer;
                   user-select: none; }
.chat-tab:hover .tab-x, .chat-tab.active .tab-x { display: block; }
.chat-tab .tab-x:hover { background: #a50e0e; }
.chat-tab:hover:not(.active) { border-color: var(--primary); color: var(--primary); }
.chat-tab.active { background: var(--primary); border-color: var(--primary); color: #fff; }
.chat-tab.new { border-style: dashed; }
.chat-scroll { flex: 1; overflow-y: auto; padding: 16px; display: flex;
               flex-direction: column; gap: 12px; }
.msg-row { display: flex; }
.msg-row.user { justify-content: flex-end; }
.bubble { max-width: 72%; padding: 8px 12px; border-radius: 10px; font-size: 13px;
          white-space: pre-wrap; word-break: break-word; line-height: 1.6; }
.bubble.user { background: var(--primary); color: #fff; border-bottom-right-radius: 2px; }
.bubble.assistant { background: #f6f8fa; border: 1px solid var(--line);
                    border-bottom-left-radius: 2px; }
.bubble.error { background: #ffebe9; border: 1px solid rgba(209, 36, 47, .4);
                color: var(--danger); max-width: 86%; }
/* 等待大模型回复占位：灰字呼吸闪烁，首个回复帧出现即移除 */
.bubble.pending { color: var(--muted); animation: pending-pulse 1.4s ease-in-out infinite; }
@keyframes pending-pulse { 0%, 100% { opacity: .45; } 50% { opacity: 1; } }
/* Markdown 气泡：覆盖 pre-wrap，块级间距收敛到聊天尺度 */
.bubble.md { white-space: normal; }
.bubble.md > :first-child { margin-top: 0; }
.bubble.md > :last-child { margin-bottom: 0; }
.bubble.md p { margin: 6px 0; }
.bubble.md ul, .bubble.md ol { margin: 6px 0; padding-left: 20px; }
.bubble.md li { margin: 2px 0; }
.bubble.md h1, .bubble.md h2, .bubble.md h3, .bubble.md h4 {
  margin: 10px 0 6px; line-height: 1.4; font-size: 13.5px; }
.bubble.md blockquote { margin: 6px 0; padding: 2px 10px; border-left: 3px solid var(--line);
                        color: var(--muted); }
.bubble.md code { background: rgba(175, 184, 193, .25); border-radius: 4px;
                  padding: 1px 5px; font-family: ui-monospace, Consolas, monospace;
                  font-size: 12px; }
.bubble.md pre { background: #fff; border: 1px solid var(--line); border-radius: 6px;
                 padding: 8px 10px; overflow-x: auto; margin: 6px 0; }
.bubble.md pre code { background: none; padding: 0; }
.bubble.md table { border-collapse: collapse; margin: 6px 0; display: block;
                   overflow-x: auto; max-width: 100%; }
.bubble.md th, .bubble.md td { border: 1px solid var(--line); padding: 4px 8px;
                               font-size: 12px; text-align: left; }
.bubble.md th { background: #eef1f4; }
.bubble.md a { color: var(--primary); }
.bubble.md hr { border: none; border-top: 1px solid var(--line); margin: 8px 0; }
/* 工具过程块：灰色可折叠 <details>，按流序插入消息之间 */
.tool-block { border: 1px solid var(--line); background: #f6f8fa; border-radius: 8px;
              font-size: 12px; color: var(--muted); }
.tool-block summary { cursor: pointer; padding: 6px 10px; display: flex; gap: 8px;
                      align-items: center; list-style: none; }
.tool-block summary::-webkit-details-marker { display: none; }
.tool-block summary::before { content: "▸"; font-size: 10px; color: var(--muted); }
.tool-block[open] summary::before { content: "▾"; }
.tool-block .tool-kind { font-size: 11px; }
.tool-block .tool-name { font-weight: 600; color: var(--text); font-family: Consolas, monospace; }
.tool-block pre { border-top: 1px dashed var(--line); margin: 0; padding: 8px 10px;
                  white-space: pre-wrap; word-break: break-all; font-size: 12px;
                  max-height: 220px; overflow-y: auto; }
/* M5-T8：算量结果卡片（聊天内，点击钻取任务详情） */
.task-card { display: block; width: 100%; text-align: left; border: 1px solid var(--line);
             background: #fff; border-left: 3px solid var(--primary); border-radius: 8px;
             padding: 8px 12px; cursor: pointer; font: inherit; color: var(--text); }
.task-card:hover { background: #f0f6ff; }
.task-card:disabled { cursor: default; border-left-color: var(--danger); opacity: .8; }
.task-card .tc-title { display: flex; gap: 8px; align-items: center; font-weight: 600;
                       font-size: 13px; }
.task-card .tc-meta { font-size: 12px; color: var(--muted); margin-top: 2px; }
.draft-card { border: 1px solid #d6e4ff; border-left: 3px solid var(--primary);
              border-radius: 8px; padding: 10px 12px; background: #f8fbff; }
.draft-hint { color: var(--muted); font-size: 12px; margin: 3px 0 10px; }
.draft-resource { border-top: 1px solid var(--line); padding-top: 8px; margin-top: 8px; }
.draft-resource-title { font-weight: 600; font-size: 12px; margin-bottom: 5px; }
.draft-field { display: grid; grid-template-columns: minmax(180px, 1fr) 150px;
               gap: 8px; align-items: center; margin: 5px 0; font-size: 12px; }
.draft-field .input { padding: 4px 7px; font-size: 12px; }
.trace-page-result { color: var(--muted); font-size: 12px; margin-top: 4px; word-break: break-all; }
.smart-report-scroll { max-height: 100%; overflow-y: auto; }
.smart-report-card { border: 1px solid var(--line); border-radius: 8px; padding: 10px 12px;
                     background: #fff; margin: 6px 0; }
.smart-report-head { font-weight: 600; margin-bottom: 6px; }
.smart-stage { border-top: 1px solid var(--line); padding: 5px 0; font-size: 12px; }
.smart-stage summary { cursor: pointer; color: var(--primary); }
.smart-stage > div { padding: 5px 0 2px; }
.smart-rule { padding: 4px 0; border-bottom: 1px dashed var(--line); }
.smart-rule code { display: block; margin: 2px 0; white-space: pre-wrap; word-break: break-word; }
.citation-list { display: inline-flex; flex-wrap: wrap; gap: 4px; margin-top: 3px; }
.citation-chip { border: 1px solid #b9d2ff; background: #f0f6ff; color: var(--primary);
                 border-radius: 10px; padding: 1px 6px; font-size: 11px; }
.citation-card { border: 1px solid #d6e4ff; border-left: 3px solid var(--primary);
                 border-radius: 8px; padding: 8px 10px; background: #f8fbff; margin: 6px 0; }
.citation-card > summary { cursor: pointer; font-size: 12px; }
.citation-card > summary small { color: var(--muted); margin-left: 6px; }
.citation-content { margin-top: 7px; }
.citation-answer { white-space: pre-wrap; font-size: 12px; margin-bottom: 5px; }
.citation-row { border-top: 1px solid var(--line); padding: 4px 0; font-size: 12px; }
.citation-row summary { cursor: pointer; }
.citation-row small { color: var(--muted); margin-left: 4px; }
.citation-excerpt { white-space: pre-wrap; color: var(--muted); padding: 5px 0 2px; }
.citation-unverified, .basis-status { color: var(--muted); font-size: 11px; }
.smart-warning { color: #9a6700; margin-top: 3px; }
.validation-row.failed, .validation-row.not_evaluated { color: var(--danger); }
.run-actions { display: flex; flex-wrap: wrap; gap: 6px; padding: 2px 0; }
.chat-input-row { display: flex; gap: 8px; padding: 10px; border-top: 1px solid var(--line);
                  align-items: flex-end; }
/* M5-T9：@资源 候选菜单（输入框上方弹出） */
.mention-box { position: relative; flex: 1; display: flex; }
.mention-menu { position: absolute; bottom: 100%; left: 0; width: min(560px, calc(100vw - 32px)); min-width: 240px;
                background: #fff; border: 1px solid var(--line); border-radius: 8px;
                box-shadow: 0 4px 14px rgba(0,0,0,.12); max-height: 220px;
                overflow-y: auto; z-index: 30; margin-bottom: 4px; }
.mention-item { padding: 7px 12px; cursor: pointer; font-size: 13px;
                display: flex; gap: 8px; align-items: center; min-width: 0; }
  .mention-item.active, .mention-item:hover { background: #f0f6ff; }
  .mention-group + .mention-group { border-top: 1px solid var(--line); }
  .mention-group-title { padding: 7px 12px 3px; color: var(--muted); font-size: 12px; font-weight: 600; }
  .mention-item .mention-type { font-size: 11px; color: var(--muted);
                              border: 1px solid var(--line); border-radius: 4px;
                              padding: 0 4px; }
.mention-item .mention-name { flex: 1; min-width: 0; overflow-wrap: anywhere; }
.mention-item .mention-id { flex: 0 0 auto; margin-left: auto; color: var(--muted); font-size: 11px; }
.mention-hint { padding: 6px 12px; font-size: 12px; color: var(--muted); }

/* ===== M8-T19：斜杠应用菜单（复用 mention-menu 视觉风格）===== */
.app-menu { position: absolute; bottom: 100%; left: 0; width: min(380px, calc(100vw - 32px));
            background: #fff; border: 1px solid var(--line); border-radius: 8px;
            box-shadow: 0 4px 14px rgba(0,0,0,.12); max-height: 220px;
            overflow-y: auto; z-index: 30; margin-bottom: 4px; }
.app-item { padding: 8px 12px; cursor: pointer; font-size: 13px;
            display: flex; gap: 8px; align-items: center; min-width: 0; }
  .app-item.active, .app-item:hover { background: #f0f6ff; }
  .app-item .app-icon { font-size: 16px; flex: 0 0 auto; }
  .app-item .app-name { flex: 1; min-width: 0; overflow-wrap: anywhere; }
  .app-item .app-command { flex: 0 0 auto; margin-left: auto; color: var(--muted); font-size: 11px; }
.app-empty { padding: 14px 12px; font-size: 13px; color: var(--muted); text-align: center; }
.chat-input-row textarea { flex: 1; width: auto; resize: none; font-family: inherit;
                           line-height: 1.5; max-height: 140px; }

/* ===== M8-T22：用户气泡应用标签（Spec 11.1：图标+中文名称，仅凭结构化 app_id 渲染）===== */
.app-chip { display: inline-flex; align-items: center; gap: 3px; margin-right: 6px;
            padding: 0 8px; border-radius: 9px; background: rgba(255,255,255,.24);
            font-weight: 600; line-height: 18px; vertical-align: -3px; }
.app-chip .app-chip-icon { font-size: 12px; }
.bubble.user .app-msg-body { white-space: pre-wrap; }

/* ===== M8-T23：知识图谱结果卡片（Spec 9.2 第 6～9 项、11.3）===== */
.kg-result-card { border: 1px solid #d6e4ff; border-left: 3px solid var(--primary);
                  border-radius: 8px; padding: 10px 12px; background: #f8fbff; margin: 6px 0;
                  font-size: 12px; }
.kg-result-card.kg-unavailable { border-color: #ffe1e3; border-left-color: var(--danger);
                                 background: #fff7f7; }
.kg-card-head { display: flex; flex-wrap: wrap; gap: 8px; align-items: center; }
.kg-card-title { font-weight: 600; font-size: 13px; }
.kg-card-badge { border: 1px solid #b9d2ff; background: #f0f6ff; color: var(--primary);
                 border-radius: 10px; padding: 0 8px; font-size: 11px; }
.kg-card-meta { color: var(--muted); margin-top: 3px; }
.kg-card-stats { display: flex; flex-wrap: wrap; gap: 4px 16px; margin: 6px 0 9px; }
.kg-card-stats b { font-variant-numeric: tabular-nums; }
.kg-card-error { color: var(--danger); margin-top: 5px; white-space: pre-wrap;
                 word-break: break-word; }
.kg-card-error-detail { color: var(--muted); margin-top: 2px; white-space: pre-wrap;
                        word-break: break-word; }
.kg-open-btn { padding: 3px 12px; font-size: 12px; }

/* ===== 规范库（M4-C5）===== */
.kb-list { display: flex; flex-direction: column; gap: 8px; }
.kb-card { border: 1px solid var(--line); border-radius: 8px; padding: 10px 12px;
           cursor: pointer; background: var(--panel); }
.kb-card:hover { border-color: var(--primary); }
.badge.kb-scan.elec { background: #0969da; }
.badge.kb-scan.scan { background: #8250df; }
.badge.kb-status.pending { background: var(--muted); }
.badge.kb-status.parsing { background: #9a6700; }
.badge.kb-status.indexed { background: #1a7f37; }
.badge.kb-status.failed { background: var(--danger); }
.kb-reparse { margin-left: 6px; font-size: 12px; }
.md-pre { white-space: pre-wrap; word-break: break-word;
          font: 12.5px/1.7 Consolas, "Microsoft YaHei", monospace; }

/* 公式编号牌（D05/C023/R03/F05） */
.fid {
  display: inline-block;
  font-family: Consolas, "Courier New", monospace;
  font-size: 11px;
  font-weight: 700;
  color: var(--primary, #0F3057);
  background: rgba(21, 101, 192, 0.10);
  border-radius: 4px;
  padding: 1px 5px;
  margin: 0 2px;
  vertical-align: 1px;
}

/* ===== 模态框（2026-09-14：替代原生 alert/confirm/prompt——客户演示观感） ===== */
.modal-backdrop { position: fixed; inset: 0; background: rgba(0,0,0,.45); z-index: 60;
                  display: flex; align-items: center; justify-content: center; }
.modal-card { background: var(--panel); border-radius: 12px; padding: 20px 22px 16px;
              width: min(440px, calc(100vw - 48px));
              box-shadow: 0 12px 40px rgba(0,0,0,.25); }
.modal-card h3 { font-size: 15px; margin: 0 0 10px; }
.modal-msg { font-size: 13px; line-height: 1.7; white-space: pre-line; margin: 0 0 6px; }
.modal-hint { font-size: 12px; color: var(--muted); margin: 4px 0 0; }
.modal-field { margin-top: 10px; }
.modal-field > label { display: block; font-size: 12px; color: var(--muted); margin-bottom: 4px; }
.modal-field .input { width: 100%; box-sizing: border-box; }
.modal-actions { display: flex; justify-content: flex-end; gap: 8px; margin-top: 16px; }

/* 定额 tab 筛选键 */
.qkind { font-size: 11px; padding: 3px 10px; }
.qkind.active { color: var(--primary); border-color: var(--primary); font-weight: 600; }
