/* ============================================================
 * 数据 AI（语音问数）· 后台页签与独立窗口共用样式
 *
 * 浅色主题，配色对齐 xd-diy-admin.css：主色 #1B4B5A / 金 #B08D3F /
 * 边框 #E5E8EE / 文字 #2A2724。所有类名统一 db- 前缀，变量只挂在
 * .db-root 作用域内，不写进 :root，不污染后台全局样式。
 * ============================================================ */

.db-root{
  --db-main:#1B4B5A; --db-main-soft:#E8EFEF; --db-gold:#B08D3F;
  --db-line:#E5E8EE; --db-ink:#2A2724; --db-ink2:#6B655E; --db-ink3:#9A938A;
  --db-bg:#F7F5F1; --db-card:#FFFFFF; --db-ok:#3D6B4F; --db-warn:#B8860B; --db-bad:#A6402C;
  color:var(--db-ink); font-size:14px; line-height:1.7;
}
.db-root [data-ico]{ display:inline-flex; align-items:center; justify-content:center; }

/* ---------- 通用按钮 ---------- */
.db-btn{
  display:inline-flex; align-items:center; justify-content:center; gap:6px;
  height:34px; padding:0 14px; border:1px solid var(--db-line); background:#fff;
  color:var(--db-ink); border-radius:8px; font-size:13px; cursor:pointer;
  font-family:inherit; line-height:1; white-space:nowrap; text-decoration:none;
}
.db-btn:hover{ border-color:var(--db-main); color:var(--db-main); }
.db-btn.primary{ background:var(--db-main); border-color:var(--db-main); color:#fff; }
.db-btn.primary:hover{ background:#164049; color:#fff; }
.db-btn.ghost{ background:#fff; color:var(--db-main); border-color:var(--db-main); }
.db-btn.sm{ height:28px; padding:0 10px; font-size:12px; }
.db-btn.danger{ color:var(--db-bad); border-color:#E8C9C2; }
.db-btn.danger:hover{ background:#FBF0ED; border-color:var(--db-bad); color:var(--db-bad); }
.db-btn:disabled{ opacity:.45; cursor:default; }

/* ---------- 页面头 / 子页切换 ---------- */
.db-head{ display:flex; align-items:flex-end; justify-content:space-between; gap:14px; flex-wrap:wrap; margin-bottom:12px; }
.db-head-l h2{ font-family:"Songti SC","SimSun",serif; font-size:19px; color:var(--db-main); font-weight:600; letter-spacing:.02em; }
.db-sub{ font-size:12.5px; color:var(--db-ink3); margin-top:2px; }
.db-head-r{ display:flex; gap:8px; align-items:center; }
.db-subtabs{ display:flex; gap:4px; border-bottom:1px solid var(--db-line); margin-bottom:14px; flex-wrap:wrap; }
.db-subtab{
  display:inline-flex; align-items:center; gap:6px; border:none; background:none;
  padding:9px 14px; font-size:13px; color:var(--db-ink2); cursor:pointer;
  font-family:inherit; border-bottom:2px solid transparent;
}
.db-subtab:hover{ color:var(--db-main); }
.db-subtab.on{ color:var(--db-main); font-weight:600; border-bottom-color:var(--db-gold); }
.db-body{ min-height:0; }

/* ---------- 通用容器 ---------- */
.db-panel{ background:#fff; border:1px solid var(--db-line); border-radius:12px; margin-bottom:12px; }
.db-panel-h{
  display:flex; align-items:center; gap:8px; flex-wrap:wrap;
  padding:11px 14px; border-bottom:1px solid var(--db-line);
  font-size:13.5px; font-weight:600; color:var(--db-main);
}
.db-panel-h .db-key{ font-weight:400; }
.db-panel-danger{ border-color:#E8C9C2; }
.db-ml{ margin-left:6px; }
.db-mla{ margin-left:auto; }
.db-actions{ display:flex; gap:8px; margin:0 0 12px; flex-wrap:wrap; }
.db-note{
  display:flex; align-items:flex-start; gap:8px; background:var(--db-main-soft);
  border:1px solid #CFE0E2; color:var(--db-main); border-radius:10px;
  padding:10px 14px; font-size:12.5px; line-height:1.8; margin-bottom:12px;
}
.db-note-warn{ background:#FBF6EA; border-color:#EFE0BC; color:#8A6A1F; }
.db-empty{ text-align:center; padding:48px 20px; color:var(--db-ink3); font-size:13px; line-height:1.9; }
.db-empty-ic{ font-size:34px; color:#C9D6DA; margin-bottom:8px; }
.db-empty-t{ font-size:15px; color:var(--db-ink2); font-weight:600; }
.db-empty-s{ max-width:440px; margin:6px auto 0; }
.db-loading{ padding:40px; text-align:center; color:var(--db-ink3); font-size:13px; }
.db-muted{ color:var(--db-ink3); font-size:12.5px; }
.db-wrap{ white-space:normal; word-break:break-word; max-width:320px; }
.db-nowrap{ white-space:nowrap; }
.db-mono{ font-family:ui-monospace,Menlo,Consolas,monospace; font-size:11.5px; }
.db-key{ font-size:11px; color:var(--db-ink3); font-family:ui-monospace,Menlo,Consolas,monospace; font-weight:400; }

/* ---------- 表单控件 ---------- */
.db-form{ display:grid; grid-template-columns:repeat(auto-fill,minmax(280px,1fr)); gap:14px; padding:14px; }
.db-field{ min-width:0; }
.db-label{ display:flex; align-items:center; gap:8px; flex-wrap:wrap; font-size:12.5px; font-weight:600; color:var(--db-ink); margin-bottom:6px; }
.db-root .db-ctl{
  width:100%; margin:0; border:1px solid var(--db-line); border-radius:8px;
  padding:8px 10px; font-size:13px; color:var(--db-ink); background:#fff;
  font-family:inherit; line-height:1.6;
}
.db-root .db-ctl:focus{ outline:none; border-color:var(--db-main); box-shadow:0 0 0 2px rgba(27,75,90,.10); }
textarea.db-ctl{ resize:vertical; }
.db-hint{ font-size:11.5px; color:var(--db-ink3); margin-top:5px; line-height:1.6; }
/* 开关：input 视觉隐藏，靠 :checked + 相邻块画轨道 */
.db-switch{ display:inline-flex; align-items:center; gap:8px; cursor:pointer; }
.db-switch input{ position:absolute; opacity:0; width:0; height:0; }
.db-switch-ui{ position:relative; flex:0 0 38px; width:38px; height:22px; border-radius:999px; background:#CBD5E1; transition:background .15s; }
.db-switch-ui:after{ content:""; position:absolute; top:3px; left:3px; width:16px; height:16px; border-radius:50%; background:#fff; transition:left .15s; }
.db-switch input:checked + .db-switch-ui{ background:var(--db-main); }
.db-switch input:checked + .db-switch-ui:after{ left:19px; }
.db-switch-t{ font-size:12.5px; color:var(--db-ink2); }
.db-switch.sm .db-switch-ui{ flex-basis:34px; width:34px; height:20px; }
.db-switch.sm .db-switch-ui:after{ width:14px; height:14px; }
.db-switch.sm input:checked + .db-switch-ui:after{ left:17px; }

/* ---------- 表格 ---------- */
.db-tbl-wrap{ border:1px solid var(--db-line); border-radius:10px; overflow:auto; background:#fff; }
.db-tbl{ width:100%; border-collapse:collapse; font-size:12.5px; }
.db-tbl th{ background:#F5F3EF; color:var(--db-ink2); font-weight:600; text-align:left; padding:9px 12px; border-bottom:1px solid var(--db-line); white-space:nowrap; }
.db-tbl td{ padding:9px 12px; border-bottom:1px solid #F0F1F4; color:var(--db-ink); vertical-align:top; }
.db-tbl tr:last-child td{ border-bottom:none; }
.db-tbl tbody tr:hover{ background:#FAFBFC; }

/* ---------- 状态徽标 ---------- */
.db-badge{ display:inline-block; font-size:11px; padding:2px 9px; border-radius:999px; background:#EEF1F4; color:var(--db-ink2); border:1px solid var(--db-line); line-height:1.5; }
.db-badge.ok{ background:#EAF3EC; color:var(--db-ok); border-color:#CFE3D4; }
.db-badge.off{ background:#F1EEE9; color:var(--db-ink3); }
.db-badge.warn{ background:#FBF3E2; color:#8A6A1F; border-color:#EFE0BC; }
.db-badge.bad{ background:#F7EDEA; color:var(--db-bad); border-color:#EBCFC8; }

/* ---------- 问数布局：左会话列表 + 右对话 ---------- */
.db-ask{ display:grid; grid-template-columns:230px minmax(0,1fr); gap:12px; min-height:0; }
.db-body>.db-ask{ height:calc(100vh - 250px); min-height:480px; }
.db-ask.solo{ grid-template-columns:minmax(0,1fr); }
.db-ask.solo .db-conv{ display:none; }
.db-conv{ display:flex; flex-direction:column; min-height:0; background:#fff; border:1px solid var(--db-line); border-radius:12px; }
.db-conv-hd{ display:flex; align-items:center; justify-content:space-between; gap:6px; padding:10px 12px; border-bottom:1px solid var(--db-line); font-size:12.5px; font-weight:600; color:var(--db-ink2); }
.db-conv-list{ flex:1; min-height:0; overflow-y:auto; padding:8px; }
.db-conv-item{ display:flex; align-items:center; gap:8px; width:100%; border:none; background:none; padding:9px 10px; border-radius:8px; cursor:pointer; text-align:left; font-size:12.5px; color:var(--db-ink2); font-family:inherit; }
.db-conv-item:hover{ background:#F5F7F8; }
.db-conv-item.on{ background:var(--db-main-soft); color:var(--db-main); font-weight:600; }
.db-conv-item span{ flex:1; min-width:0; overflow:hidden; text-overflow:ellipsis; white-space:nowrap; }
.db-conv-item em{ font-style:normal; font-size:10.5px; color:var(--db-ink3); }
.db-conv-tip{ padding:10px 12px; border-top:1px solid var(--db-line); font-size:11px; color:var(--db-ink3); line-height:1.6; }
.db-chat{ display:flex; flex-direction:column; min-height:0; background:#fff; border:1px solid var(--db-line); border-radius:12px; overflow:hidden; }
.db-msgs{ flex:1; min-height:0; overflow-y:auto; padding:18px; background:#FBFAF8; }

/* ---------- 气泡 ---------- */
.db-msg{ display:flex; gap:8px; margin-bottom:16px; align-items:flex-start; }
.db-msg.user{ justify-content:flex-end; }
.db-msg.ai{ justify-content:flex-start; }
.db-avatar{ flex:0 0 28px; width:28px; height:28px; border-radius:8px; background:var(--db-main-soft); color:var(--db-main); display:flex; align-items:center; justify-content:center; }
.db-bubble{ max-width:min(760px,86%); padding:12px 14px; border-radius:12px; font-size:13px; line-height:1.8; }
.db-msg.user .db-bubble{ background:var(--db-main); color:#fff; border-top-right-radius:4px; white-space:pre-wrap; word-break:break-word; }
.db-msg.ai .db-bubble{ background:#fff; border:1px solid var(--db-line); border-top-left-radius:4px; color:var(--db-ink); }
.db-typing{ color:var(--db-ink3); font-size:12.5px; display:flex; align-items:center; gap:6px; }

/* ---------- 输入区 ---------- */
.db-inputbar{ border-top:1px solid var(--db-line); padding:12px 14px; background:#fff; }
.db-inputrow{ display:flex; gap:10px; align-items:flex-end; }
.db-root .db-input{
  flex:1 1 auto; width:auto; min-width:0; min-height:40px; max-height:130px;
  resize:vertical; margin:0; border:1px solid var(--db-line); border-radius:9px;
  padding:9px 11px; font-size:13px; font-family:inherit; line-height:1.6;
  color:var(--db-ink); background:#fff;
}
.db-root .db-input:focus{ outline:none; border-color:var(--db-main); }
.db-inputrow>.db-btn.primary{ height:40px; align-self:flex-end; }
.db-mic{
  display:inline-flex; align-items:center; gap:6px; height:40px; padding:0 14px;
  border:1px solid var(--db-line); background:#fff; color:var(--db-main);
  border-radius:9px; cursor:pointer; font-size:13px; font-family:inherit;
  white-space:nowrap; align-self:flex-end;
}
.db-mic:hover{ border-color:var(--db-main); }
.db-mic.rec{ background:#FBEAE7; border-color:var(--db-bad); color:var(--db-bad); animation:db-pulse 1.2s infinite; }
@keyframes db-pulse{
  0%{ box-shadow:0 0 0 0 rgba(166,64,44,.45); }
  70%{ box-shadow:0 0 0 10px rgba(166,64,44,0); }
  100%{ box-shadow:0 0 0 0 rgba(166,64,44,0); }
}
.db-rec-tip{ margin-top:8px; font-size:12px; color:var(--db-bad); }
.db-meta{ margin-top:6px; font-size:11px; color:var(--db-ink3); min-height:16px; }

/* ---------- chips ---------- */
.db-chips{ display:flex; gap:6px; flex-wrap:wrap; align-items:center; margin-bottom:8px; }
.db-chips-lb{ font-size:11.5px; color:var(--db-ink3); margin-right:2px; }
.db-chip{
  display:inline-flex; align-items:center; gap:4px; font-size:12px; padding:4px 11px;
  border:1px solid var(--db-line); background:#fff; color:var(--db-ink2);
  border-radius:999px; cursor:pointer; font-family:inherit; line-height:1.5;
}
.db-chip:hover{ border-color:var(--db-main); color:var(--db-main); background:var(--db-main-soft); }
.db-chip.muted{ cursor:default; background:transparent; border-style:dashed; }
.db-followups{ margin:12px 0 0; padding-top:10px; border-top:1px dashed var(--db-line); }

/* ---------- 一轮回复：结论 / 指标 / 明细 / 折叠 / 追问 ---------- */
.db-headline{ font-size:16px; font-weight:700; color:var(--db-main); line-height:1.6; margin-bottom:6px; }
.db-answer{ font-size:13px; color:var(--db-ink); line-height:1.8; white-space:pre-wrap; }
.db-err{ color:var(--db-bad); font-size:13px; }
.db-nodata{ display:flex; align-items:flex-start; gap:6px; background:#FBF3E2; border:1px solid #EFE0BC; color:#8A6A1F; border-radius:9px; padding:10px 12px; font-size:12.5px; margin-bottom:10px; }
.db-clarify{ background:var(--db-main-soft); border:1px solid #CFE0E2; border-radius:10px; padding:12px 14px; margin-bottom:10px; }
.db-clarify-q{ font-size:13px; color:var(--db-main); margin-bottom:8px; }
.db-round-meta{ margin-top:10px; font-size:11px; color:var(--db-ink3); border-top:1px dashed var(--db-line); padding-top:8px; }
.db-metrics{ display:grid; grid-template-columns:repeat(auto-fill,minmax(150px,1fr)); gap:10px; margin:12px 0; }
.db-metric{ background:#fff; border:1px solid var(--db-line); border-radius:10px; padding:12px 14px; }
.db-m-n{ font-size:12px; color:var(--db-ink3); }
.db-m-v{ font-size:24px; font-weight:700; color:var(--db-main); line-height:1.4; font-variant-numeric:tabular-nums; word-break:break-all; }
.db-m-u{ font-size:12px; font-weight:400; color:var(--db-ink2); margin-left:4px; }
.db-m-cmp-row{ display:flex; gap:8px; flex-wrap:wrap; margin-top:4px; }
.db-m-cmp{ font-size:11.5px; color:var(--db-ink2); }
.db-m-cmp.up{ color:var(--db-ok); }
.db-m-cmp.down{ color:var(--db-bad); }
.db-fold{ border:1px solid var(--db-line); border-radius:10px; margin:12px 0; background:#FCFBF9; overflow:hidden; }
.db-fold>summary{ cursor:pointer; list-style:none; padding:9px 14px; font-size:12.5px; color:var(--db-main); display:flex; align-items:center; gap:6px; user-select:none; }
.db-fold>summary::-webkit-details-marker{ display:none; }
.db-fold[open]>summary{ border-bottom:1px solid var(--db-line); }
.db-fold[open]>summary [data-ico]{ transform:rotate(90deg); }
.db-fold-body{ padding:12px 14px; }
.db-fold-sec{ margin-bottom:14px; }
.db-fold-sec:last-child{ margin-bottom:0; }
.db-fold-t{ font-size:12px; font-weight:600; color:var(--db-ink2); margin-bottom:6px; }
.db-src{ background:#fff; border:1px solid var(--db-line); border-radius:8px; padding:8px 10px; margin-bottom:6px; font-size:12px; }
.db-caliber{ margin:0; padding-left:18px; font-size:12px; color:var(--db-ink2); line-height:1.9; }
.db-pre{ margin:0; padding:10px 12px; background:#1E2A31; color:#D7E3E8; border-radius:8px; overflow:auto; font-family:ui-monospace,Menlo,Consolas,monospace; font-size:11.5px; line-height:1.7; white-space:pre-wrap; word-break:break-word; }
.db-pre-sm{ background:#F3F5F6; color:var(--db-ink); }

/* ---------- 能力自检 / 熔断 ---------- */
.db-health{ display:grid; grid-template-columns:repeat(auto-fill,minmax(210px,1fr)); gap:10px; padding:12px 14px; }
.db-health-item{ border:1px solid var(--db-line); border-left:3px solid var(--db-line); border-radius:10px; padding:10px 12px; background:#fff; }
.db-health-item.ok{ border-left-color:var(--db-ok); }
.db-health-item.warn{ border-left-color:var(--db-warn); }
.db-health-item.off{ border-left-color:var(--db-ink3); }
.db-health-item.bad{ border-left-color:var(--db-bad); }
.db-hi-top{ display:flex; align-items:center; gap:8px; margin-bottom:4px; }
.db-hi-note{ font-size:12px; color:var(--db-ink2); line-height:1.6; }
.db-hi-fix{ font-size:11.5px; color:var(--db-warn); margin-top:4px; }
.db-health-sum{ font-size:11.5px; padding:2px 9px; border-radius:999px; }
.db-health-sum.ok{ background:#EAF3EC; color:var(--db-ok); }
.db-health-sum.bad{ background:#F7EDEA; color:var(--db-bad); }
.db-circuit{ padding:12px 14px; }
.db-circ-desc{ font-size:12.5px; color:var(--db-ink2); margin-bottom:10px; line-height:1.8; }
.db-circ-row{ display:flex; gap:8px; align-items:center; flex-wrap:wrap; }
.db-circ-row .db-ctl{ flex:1; min-width:220px; }

/* ---------- 弹窗表单 ---------- */
.db-modal{ display:none; position:fixed; inset:0; background:rgba(42,39,36,.45); align-items:center; justify-content:center; z-index:60; }
.db-modal.on{ display:flex; }
.db-modal-box{ background:#fff; width:560px; max-width:92vw; max-height:86vh; overflow-y:auto; border-radius:12px; padding:20px 22px; box-shadow:0 18px 50px rgba(27,75,90,.22); }
.db-modal-h{ display:flex; align-items:center; justify-content:space-between; margin-bottom:14px; }
.db-modal-h h3{ font-size:16px; color:var(--db-main); }
.db-modal-x{ border:none; background:none; cursor:pointer; color:var(--db-ink3); font-size:18px; line-height:1; padding:4px; }
.db-modal-box .db-form{ padding:0; }
.db-modal-f{ display:flex; justify-content:flex-end; gap:8px; margin-top:16px; border-top:1px solid var(--db-line); padding-top:14px; }

/* ---------- 独立窗口骨架 ---------- */
.db-stage{ flex:1; min-height:0; display:flex; }
.db-stage>.db-ask{ flex:1; min-height:0; height:100%; }
.db-boot{ display:flex; align-items:center; justify-content:center; width:100%; height:100%; color:var(--db-ink3); font-size:13px; }
.db-boot.err{ color:var(--db-bad); }
.db-boot a{ color:var(--db-main); text-decoration:underline; }

/* ---------- 窄屏 ---------- */
@media (max-width:900px){
  .db-ask{ grid-template-columns:minmax(0,1fr); }
  .db-ask .db-conv{ display:none; }
  .db-body>.db-ask{ height:auto; min-height:520px; }
}

/* ============================================================
 * 12.52 新增：运行记录筛选、统计洞察、自我学习、历史会话
 * 全部沿用同一套变量与圆角，不引入新色板。
 * ============================================================ */

/* ---------- 面板内部留白（原来各块自己写 padding，统一到这里） ---------- */
.db-panel-body{ padding:12px 14px; }
.db-two{ display:grid; grid-template-columns:1fr 1fr; gap:12px; }
@media (max-width:1100px){ .db-two{ grid-template-columns:1fr; } }

/* ---------- 筛选栏 ---------- */
.db-filter{ display:flex; flex-direction:column; gap:8px; }
.db-filter-row{ display:flex; align-items:center; gap:8px; flex-wrap:wrap; }
.db-fitem{ display:inline-flex; align-items:center; gap:6px; font-size:12.5px; color:var(--db-ink2); }
.db-fitem>span{ white-space:nowrap; }
.db-root .db-ctl.sm{ width:auto; height:32px; padding:5px 9px; font-size:12.5px; }
.db-fitem-kw .db-ctl{ min-width:220px; }
.db-filter-quick{ font-size:12px; }
.db-filter-quick .db-chip{ padding:3px 10px; }
.db-filter-tip{ font-size:11.5px; color:var(--db-ink3); margin-left:4px; }
.db-pager{ display:flex; align-items:center; justify-content:flex-end; gap:8px; padding:10px 2px 2px; }

/* ---------- 统计卡 ---------- */
.db-cards{ display:grid; grid-template-columns:repeat(auto-fit,minmax(150px,1fr)); gap:12px; margin-bottom:12px; }
.db-card{ background:#fff; border:1px solid var(--db-line); border-left:3px solid var(--db-main); border-radius:10px; padding:12px 14px; }
.db-card.ok{ border-left-color:var(--db-ok); }
.db-card.warn{ border-left-color:var(--db-warn); }
.db-card.bad{ border-left-color:var(--db-bad); }
.db-card-l{ font-size:12px; color:var(--db-ink3); }
.db-card-v{ font-size:26px; font-weight:700; color:var(--db-main); line-height:1.3; font-variant-numeric:tabular-nums; }
.db-card.bad .db-card-v{ color:var(--db-bad); }
.db-card.warn .db-card-v{ color:var(--db-warn); }
.db-card.ok .db-card-v{ color:var(--db-ok); }
.db-card-s{ font-size:11px; color:var(--db-ink3); margin-top:2px; line-height:1.5; }

/* ---------- 按天趋势条 ---------- */
.db-legend{ display:inline-flex; align-items:center; gap:6px; font-size:11px; font-weight:400; color:var(--db-ink3); margin-left:auto; }
.db-legend i{ display:inline-block; width:8px; height:8px; border-radius:2px; }
.db-legend i.lg-hit{ background:#5C8C6B; }
.db-legend i.lg-nomatch{ background:var(--db-warn); }
.db-legend i.lg-fail{ background:var(--db-bad); }
.db-legend i.lg-other{ background:#C9D6DA; }
.db-bars{ display:flex; align-items:flex-end; justify-content:flex-start; gap:8px; overflow-x:auto; padding:6px 2px 0; }
.db-bar-i{ flex:1 1 26px; min-width:26px; max-width:56px; display:flex; flex-direction:column; align-items:center; gap:2px; }
.db-bar-n{ font-size:10.5px; color:var(--db-ink3); font-variant-numeric:tabular-nums; }
.db-bar-stack{ display:flex; flex-direction:column-reverse; justify-content:flex-start; width:100%; max-width:34px; min-height:2px; border-radius:3px; overflow:hidden; background:#F1EEE9; }
.db-bar-stack span{ display:block; width:100%; }
.db-bar-stack .s-hit{ background:#5C8C6B; }
.db-bar-stack .s-nomatch{ background:var(--db-warn); }
.db-bar-stack .s-fail{ background:var(--db-bad); }
.db-bar-stack .s-other{ background:#C9D6DA; }
.db-bar-x{ font-size:10px; color:var(--db-ink3); white-space:nowrap; }

/* ---------- 热门问句排行 ---------- */
.db-rank{ margin:0; padding-left:20px; font-size:12.5px; color:var(--db-ink); line-height:2; }
.db-rank li{ border-bottom:1px dashed var(--db-line); }
.db-rank li:last-child{ border-bottom:none; }
.db-rank em{ float:right; font-style:normal; color:var(--db-ink3); font-variant-numeric:tabular-nums; }

/* ---------- 失败原因归并 ---------- */
.db-reasons{ display:flex; flex-direction:column; gap:6px; }
.db-reason{ display:flex; gap:10px; align-items:flex-start; background:#FBF0ED; border:1px solid #EBCFC8; border-radius:8px; padding:7px 10px; font-size:12px; }
.db-reason b{ color:var(--db-bad); white-space:nowrap; }
.db-reason span{ color:var(--db-ink2); word-break:break-word; }
.db-t-bad{ color:var(--db-bad); font-weight:600; }

/* ---------- 自我学习 ---------- */
.db-learn-tabs{ display:flex; gap:4px; border-bottom:1px solid var(--db-line); margin-bottom:10px; }
.db-learn-tabs .db-subtab{ padding:7px 12px; font-size:12.5px; }
.db-learn-list{ display:flex; flex-direction:column; gap:10px; }
.db-learn-i{ border:1px solid var(--db-line); border-radius:10px; padding:10px 12px; background:#FCFBF9; }
.db-learn-h{ display:flex; align-items:center; gap:8px; flex-wrap:wrap; margin-bottom:4px; }
.db-learn-h b{ font-size:13px; color:var(--db-ink); }
.db-learn-n{ margin-left:auto; font-style:normal; font-size:11px; color:var(--db-ink3); }
.db-learn-r{ font-size:12px; color:var(--db-ink2); line-height:1.8; }
.db-learn-s{ margin-top:4px; font-size:11.5px; color:var(--db-ink3); display:flex; gap:6px; flex-wrap:wrap; }
.db-learn-s span{ background:#fff; border:1px dashed var(--db-line); border-radius:6px; padding:1px 8px; }
.db-learn-a{ display:flex; gap:8px; margin-top:8px; align-items:center; }

/* ---------- 运行记录详情弹窗 ---------- */
.db-detail{ padding:0 16px; }
.db-detail-row{ display:flex; gap:10px; padding:7px 0; border-bottom:1px dashed var(--db-line); font-size:12.5px; }
.db-detail-row b{ flex:0 0 78px; color:var(--db-ink3); font-weight:400; }
.db-detail-row span{ flex:1; min-width:0; word-break:break-word; }

/* ---------- 历史会话侧栏 ---------- */
.db-conv-main{ flex:1; min-width:0; display:flex; flex-direction:column; gap:1px; }
.db-conv-main b{ font-weight:400; overflow:hidden; text-overflow:ellipsis; white-space:nowrap; font-size:12.5px; }
.db-conv-item.on .db-conv-main b{ font-weight:600; }
.db-conv-who{ font-style:normal; font-size:10.5px; color:var(--db-ink3); overflow:hidden; text-overflow:ellipsis; white-space:nowrap; }
.db-conv-empty{ padding:18px 12px; font-size:12px; color:var(--db-ink3); text-align:center; line-height:1.8; }
.db-restored{ display:flex; align-items:center; gap:8px; flex-wrap:wrap; background:#F5F3EF; border:1px dashed var(--db-line); border-radius:8px; padding:7px 10px; font-size:11.5px; color:var(--db-ink3); margin-bottom:10px; }
.db-restored .db-link{ margin-left:auto; border:none; background:none; color:var(--db-main); cursor:pointer; font-size:12px; font-family:inherit; text-decoration:underline; padding:0; }

/* ============================================================
 * 12.90 新增：指标口径生成器 / 工具清单分页 / 自我学习独立菜单
 * 依然只用同一套变量（--db-main / --db-line / --db-ink*），不引入新色板。
 * ============================================================ */

/* ---------- 弹窗：向导要两栏，普通表单仍用一个窄框 ---------- */
.db-modal-box.wide{ width:1040px; max-width:96vw; display:flex; flex-direction:column; }
/* 向导内容有 1300px 高，「保存为指标」被推到框外，打开时等于没有按钮。
   抬头与页脚固定、只让中间步骤区滚，右栏 SQL 用 sticky 跟着，任何时候都点得到保存。 */
.db-modal-box.wide > .db-modal-h,
.db-modal-box.wide > .db-modal-f{ flex:0 0 auto; }
.db-modal-box.wide > .db-wiz{ flex:1 1 auto; min-height:0; overflow-y:auto; overscroll-behavior:contain; padding-right:4px; }
.db-modal-body{ padding:2px 0; }
.db-link{ border:none; background:none; color:var(--db-main); cursor:pointer; font-size:12px; font-family:inherit; text-decoration:underline; padding:0; }

/* ---------- 指标口径生成器 ---------- */
.db-wiz{ display:grid; grid-template-columns:minmax(0,1fr) minmax(0,420px); gap:16px; align-items:start; }
@media (max-width:980px){ .db-wiz{ grid-template-columns:minmax(0,1fr); } }
.db-wiz-l{ display:flex; flex-direction:column; gap:12px; min-width:0; }
.db-wiz-r{ display:flex; flex-direction:column; gap:8px; min-width:0; position:sticky; top:0; }
.db-wiz-sec{ border:1px solid var(--db-line); border-radius:10px; padding:11px 13px; background:#FDFCFA; }
.db-wiz-sec .db-hint{ margin-top:6px; }
.db-wiz-t{ font-size:12.5px; color:var(--db-ink2); margin-bottom:8px; display:flex; align-items:center; gap:6px; }
.db-wiz-t b{ display:inline-flex; align-items:center; justify-content:center; width:18px; height:18px; border-radius:50%;
  background:var(--db-main-soft); color:var(--db-main); font-size:11px; font-weight:600; flex:0 0 auto; }
.db-wiz .db-ctl{ width:100%; }
.db-wiz-sec-meta .db-field{ margin-top:8px; }
.db-wiz-two{ display:grid; grid-template-columns:1fr 1fr; gap:10px; }
.db-wiz-cond{ display:grid; grid-template-columns:minmax(0,1.2fr) minmax(0,.9fr) minmax(0,1.2fr) auto; gap:6px; margin-bottom:6px; align-items:center; }
.db-wiz-cond .db-ctl.sm{ width:100%; min-width:0; }
.db-wiz-sql{ margin:0; max-height:280px; overflow:auto; background:#20282A; color:#E6EDEC; border-radius:8px;
  padding:10px 12px; font-size:11.5px; line-height:1.65; white-space:pre-wrap; word-break:break-word; }
.db-wiz-runbar{ display:flex; align-items:center; gap:10px; flex-wrap:wrap; }
.db-wiz-run{ min-width:0; }
.db-wiz-run .db-tbl-wrap{ max-height:280px; }

/* ---------- 自我学习：机制步骤 ---------- */
.db-steps{ margin:0 0 14px; padding-left:0; list-style:none; counter-reset:dbstep; display:flex; flex-direction:column; gap:7px; }
.db-steps li{ position:relative; padding-left:30px; font-size:12.5px; color:var(--db-ink2); line-height:1.7; }
.db-steps li::before{ counter-increment:dbstep; content:counter(dbstep); position:absolute; left:0; top:3px;
  width:20px; height:20px; border-radius:50%; background:var(--db-main); color:#fff;
  font-size:11px; display:flex; align-items:center; justify-content:center; }
.db-steps li b{ color:var(--db-ink); }

/* ---------- 自我学习：能力卡 ---------- */
.db-ability{ border:1px solid var(--db-line); border-left:3px solid var(--db-main); border-radius:9px;
  padding:10px 12px; margin-bottom:9px; cursor:pointer; background:#fff; transition:border-color .15s, box-shadow .15s; }
.db-ability:hover{ border-color:var(--db-main); box-shadow:0 2px 10px rgba(27,75,90,.08); }
.db-ability:last-child{ margin-bottom:0; }
.db-ability-h{ display:flex; align-items:baseline; gap:8px; }
.db-ability-h b{ font-size:13px; color:var(--db-ink); }
.db-ability-h em{ margin-left:auto; font-style:normal; font-size:19px; font-weight:700; color:var(--db-main); font-variant-numeric:tabular-nums; }
.db-ability-h em span{ font-size:11px; font-weight:400; color:var(--db-ink3); margin-left:2px; }
.db-ability-d{ font-size:11.5px; color:var(--db-ink3); line-height:1.6; margin-top:2px; }
.db-ability-t{ font-size:11px; color:var(--db-main); margin-top:3px; }

/* ---------- 自我学习：成长时间线 ---------- */
.db-timeline{ max-height:320px; overflow:auto; }
.db-tl-i{ display:flex; gap:10px; padding:7px 0; border-bottom:1px dashed var(--db-line); font-size:12.5px; }
.db-tl-i:last-child{ border-bottom:none; }
.db-tl-time{ flex:0 0 92px; color:var(--db-ink3); font-size:11.5px; white-space:nowrap; }
.db-tl-body{ flex:1; min-width:0; display:flex; align-items:center; gap:6px; flex-wrap:wrap; }
.db-tl-body b{ font-weight:400; color:var(--db-ink); }

/* ---------- 双色趋势条（学到 / 用上） ---------- */
.db-bars-2 .db-bar-stack{ justify-content:center; }
.db-bars-2 .db-bar-n{ font-size:10px; }
/* 0 值不画底座：留一条灰底会让人误以为「那天有数据只是很小」 */
.db-bar-stack.empty{ background:transparent; min-height:0; }


/* ---------- AI 录入：模式切换 / 图片 / 草稿卡 ---------- */
/* 三个小按钮组成的模式组。放在输入框左边而不是藏在菜单里：
 * 「这个框还能录人」这件事，只有摆在眼前才有人用。 */
.db-modes{ display:inline-flex; align-self:flex-end; height:40px; padding:3px; gap:2px;
  border:1px solid var(--db-line); border-radius:9px; background:#fff; flex:0 0 auto; }
.db-mode{ padding:0 9px; height:32px; border:0; background:transparent; color:var(--db-ink2);
  font-size:12.5px; font-family:inherit; border-radius:7px; cursor:pointer; white-space:nowrap; }
.db-mode:hover{ color:var(--db-main); }
.db-mode.on{ background:var(--db-main); color:#fff; }
.db-photo{ display:inline-flex; align-items:center; justify-content:center; width:40px; height:40px;
  border:1px solid var(--db-line); background:#fff; color:var(--db-main); border-radius:9px;
  cursor:pointer; align-self:flex-end; flex:0 0 auto; }
.db-photo:hover{ border-color:var(--db-main); }
.db-intake-bar{ display:flex; align-items:center; gap:8px; flex-wrap:wrap; margin-top:8px;
  font-size:12px; color:var(--db-ink2); }
.db-intake-bar select{ height:28px; padding:0 8px; border:1px solid var(--db-line);
  border-radius:6px; background:#fff; font-family:inherit; font-size:12px; color:var(--db-ink); }
.db-intake-img{ color:var(--db-ok); }

/* 草稿卡：一眼能看出「这是识别结果、还没进库」 */
.db-draft{ border:1px solid var(--db-line); border-radius:10px; background:#fff; padding:12px 13px; }
.db-draft.done{ background:#F4F8F5; border-color:#CFE0D4; }
.db-draft-hd{ display:flex; align-items:center; gap:8px; margin-bottom:10px; }
.db-draft-tag{ display:inline-block; padding:1px 8px; border-radius:20px; font-size:11.5px;
  background:var(--db-main-soft); color:var(--db-main); }
.db-draft-note{ font-size:11.5px; color:var(--db-ink3); }
.db-draft-ok{ font-size:13px; color:var(--db-ok); display:flex; align-items:center; gap:6px; }
.db-warn-line{ font-size:12px; color:var(--db-warn); background:#FDF8EA; border-radius:6px;
  padding:4px 8px; margin-bottom:6px; display:flex; gap:5px; align-items:flex-start; }
.db-draft-grid{ display:grid; grid-template-columns:1fr 1fr; gap:8px 12px; }
.db-draft-row{ display:flex; align-items:center; gap:8px; margin-bottom:7px; }
.db-draft-row>label{ flex:0 0 64px; font-size:12px; color:var(--db-ink2); text-align:right; }
.db-draft-row>input,.db-draft-row>select{ flex:1 1 auto; min-width:0; height:30px; padding:0 8px;
  border:1px solid var(--db-line); border-radius:6px; background:#fff; font-family:inherit;
  font-size:12.5px; color:var(--db-ink); }
.db-draft-row>input:focus,.db-draft-row>select:focus{ outline:none; border-color:var(--db-main); }
.db-draft-sub{ font-size:11px; color:var(--db-ink3); }
.db-draft-miss{ font-size:12px; color:var(--db-bad); }
.db-draft-fixed{ font-size:12.5px; color:var(--db-ink2); }
.db-draft-tags{ display:flex; gap:6px; flex-wrap:wrap; flex:1 1 auto; }
.db-tag{ padding:2px 9px; border:1px solid var(--db-line); background:#fff; color:var(--db-ink2);
  border-radius:20px; font-size:11.5px; font-family:inherit; cursor:pointer; }
.db-tag.on{ background:var(--db-main-soft); border-color:var(--db-main); color:var(--db-main); }
.db-draft-tbl{ width:100%; border-collapse:collapse; margin:4px 0 10px; font-size:12.5px; }
.db-draft-tbl th{ text-align:left; font-weight:500; color:var(--db-ink3); font-size:11.5px;
  padding:4px 6px; border-bottom:1px solid var(--db-line); }
.db-draft-tbl td{ padding:6px; border-bottom:1px solid #F2F4F7; vertical-align:top; }
.db-draft-tbl td input[type=number]{ height:28px; padding:0 6px; border:1px solid var(--db-line);
  border-radius:6px; font-family:inherit; font-size:12.5px; }
.db-draft-tbl select{ height:28px; max-width:190px; padding:0 6px; border:1px solid var(--db-line);
  border-radius:6px; background:#fff; font-family:inherit; font-size:12px; }
.db-draft-amt{ white-space:nowrap; color:var(--db-ink); }
.db-draft-del{ border:0; background:transparent; color:var(--db-ink3); font-size:16px;
  line-height:1; cursor:pointer; padding:0 4px; }
.db-draft-del:hover{ color:var(--db-bad); }
.db-draft-foot{ display:flex; align-items:center; gap:8px; flex-wrap:wrap;
  margin-top:10px; padding-top:10px; border-top:1px solid #F2F4F7; }
.db-draft-total{ margin-left:auto; font-size:12.5px; color:var(--db-ink2); }
.db-draft-total b{ color:var(--db-bad); font-size:15px; }

/* ============================================================
 * 12.153 — 全局问数悬浮球
 * 后台任何页签都能随手问一句，不占侧栏位置。
 * z-index 取 60：高于普通弹窗（50），低于 AI 录入抽屉（70）与
 * 人群弹窗宿主（75）—— 弹窗开着的时候球被盖住，不会挡在按钮上面。
 * ============================================================ */
.db-fab{
  position:fixed; right:18px; bottom:18px; z-index:60; opacity:.92;
  display:none; align-items:center; gap:7px;
  padding:10px 16px 10px 13px; border:0; border-radius:999px;
  background:linear-gradient(135deg,#1B4B5A,#2C6E7F); color:#fff;
  font-size:13px; font-family:inherit; cursor:pointer;
  box-shadow:0 10px 24px rgba(27,75,90,.26), 0 2px 6px rgba(27,75,90,.18);
  transition:transform .15s ease, box-shadow .15s ease;
}
.db-fab:hover{ opacity:1; transform:translateY(-1px); box-shadow:0 14px 30px rgba(27,75,90,.3); }
.db-fab:active{ transform:translateY(0); }
.db-fab svg{ width:16px; height:16px; }
.db-fab span{ letter-spacing:.5px; }
@media (max-width: 900px){ .db-fab{ right:14px; bottom:14px; padding:9px 13px 9px 11px; } }
