﻿/* ============================================================
   上榜GEO · 统一视觉设计语言 (theme.css)
   —— 浅色 SaaS 主题（index/pricing/app/console/admin）
   —— 深色报告主题（report.html 自行定义 --geo-*，本文件仅做全局基线）
   约束：仅样式覆盖，不改功能/JS/id。
   主色 var(--primary) 与图表（canvas/SVG）既有色一致，无需改 JS。
   ============================================================ */

:root {
  /* 品牌色 */
  --primary: #6229ff;
  --primary-dark: #5400e5;
  --primary-soft: #EFEEFF;
  --accent: #7a52ff;
  --accent-soft: #EFEEFF;

  /* 背景与卡片 */
  --bg: #fafafa;
  --bg-deep: var(--bg-deep);
  --card: #ffffff;
  --card-soft: #f8fafc;

  /* 文字 */
  --text: #0f172a;
  --text-2: #7d7f82;
  --muted: #64748b;
  --muted-2: #94a3b8;

  /* 线条 */
  --border: #eaeaeb;
  --border-strong: #d5d6d7;

  /* 语义色（P0/P1/P2 与 成功/警告/危险 统一） */
  --danger: #dc2626;
  --danger-soft: #fef2f2;
  --warning: #FF9C00;
  --warning-soft: #fffbeb;
  --success: #00B37A;
  --success-soft: #f0fdf4;
  --info: #6229ff;
  --info-soft: #EFEEFF;
  --neutral-soft: var(--neutral-soft);

  /* 字体与形态 */
  --font: "Inter", "Microsoft YaHei", "PingFang SC", system-ui, -apple-system, sans-serif;
  --radius: 14px;
  --radius-sm: 10px;
  --radius-lg: 18px;
  --shadow-sm: 0 1px 3px rgba(15, 23, 42, .06), 0 1px 2px rgba(15, 23, 42, .04);
  --shadow-md: 0 6px 20px rgba(15, 23, 42, .08), 0 2px 6px rgba(15, 23, 42, .05);
  --shadow-lg: 0 16px 40px rgba(15, 23, 42, .14), 0 4px 12px rgba(15, 23, 42, .08);
  --transition: .18s ease;

  /* 图表色（与既有 canvas/SVG 用色一致） */
  --chart-1: #6229ff;
  --chart-2: #00B37A;
  --chart-3: #dc2626;
  --chart-4: #FF9C00;
  --chart-5: #7a52ff;
  --chart-6: #0891b2;
  --chart-7: #db2777;
  --chart-8: #65a30d;
}

/* ---------- 全局基线 ---------- */
html { -webkit-text-size-adjust: 100%; }
body {
  font-family: var(--font);
  background: var(--bg);
  color: var(--text);
  line-height: 1.6;
  -webkit-font-smoothing: antialiased;
  text-rendering: optimizeLegibility;
}

a { transition: color var(--transition); }
h1, h2, h3, h4 { color: var(--text); letter-spacing: .01em; }

::selection { background: rgba(98, 41, 255, .18); }

/* ---------- 导航（统一来源：结构由 shared-nav.js 输出，此处兜底外观/布局） ---------- */
.nav {
  position: sticky; top: 0; z-index: 100;
  display: flex; justify-content: space-between; align-items: center;
  padding: 14px 48px;
  background: rgba(15, 23, 42, .92);
  backdrop-filter: blur(12px);
  -webkit-backdrop-filter: blur(12px);
  box-shadow: 0 2px 12px rgba(15, 23, 42, .18);
  color: #fff;
  transition: box-shadow .25s, background .25s, border-color .25s;
}
/* 滚动离顶后强化导航（由 shared-nav.js 的 scroll 监听切换） */
.nav.scrolled {
  background: rgba(15, 23, 42, .97);
  box-shadow: 0 6px 22px rgba(15, 23, 42, .3);
  border-bottom: 1px solid rgba(98, 41, 255, .22);
}
.nav .logo, .nav .brand { display: flex; align-items: center; gap: 10px; font-weight: 800; font-size: 18px; letter-spacing: .2px; color: #fff; }
.nav .logo-dot { width: 9px; height: 9px; border-radius: 50%; background: linear-gradient(135deg, var(--primary), var(--primary-dark)); box-shadow: 0 0 12px rgba(98, 41, 255, .8); flex-shrink: 0; }
.nav .links { display: flex; align-items: center; gap: 26px; }
.nav .links a { color: #cbd5e1; font-size: 14px; text-decoration: none; transition: color .2s; }
.nav .links a:hover { color: #fff; }
.nav .links a.active { color: #fff; position: relative; }
.nav .links a.active::after { content: ""; position: absolute; left: 0; right: 0; bottom: -6px; height: 2px; border-radius: 2px; background: linear-gradient(90deg, var(--primary), var(--accent)); }
.nav .links .nav-sep { width: 1px; height: 16px; background: rgba(148,163,184,.3); margin: 0 4px; }
.nav .links .nav-anchor { color: #94a3b8; }
.nav .links .nav-anchor:hover { color: #fff; }
.nav .links .nav-anchor.active { color: #fff; }
.nav .cta-mini {
  background: linear-gradient(135deg, var(--primary), var(--accent)) !important;
  color: #fff !important; padding: 8px 18px; border-radius: 999px; font-size: 14px; font-weight: 600;
  box-shadow: 0 4px 14px rgba(98, 41, 255, .35);
}
.nav .cta-mini:hover { filter: brightness(1.1); }
/* 移动端汉堡按钮（桌面隐藏） */
.nav .burger {
  display: none;
  background: transparent; border: none; cursor: pointer;
  color: #fff; font-size: 24px; line-height: 1; padding: 4px 8px;
  border-radius: 8px;
}
.nav .burger:hover { background: rgba(255, 255, 255, .08); }
/* 移动端：链接转为吸顶下拉面板 */
@media (max-width: 768px) {
  .nav { padding: 12px 16px; }
  .nav .burger { display: block; }
  .nav .links {
    display: none;
    position: absolute; top: 100%; left: 0; right: 0;
    flex-direction: column; align-items: stretch; gap: 0;
    background: rgba(15, 23, 42, .98);
    padding: 8px 0;
    box-shadow: 0 12px 28px rgba(15, 23, 42, .35);
  }
  .nav.open .links { display: flex; }
  .nav .links a { padding: 12px 20px; font-size: 14px; }
  .nav .links a.active::after { display: none; }
  .nav .links a.active { background: rgba(98, 41, 255, .18); }
  .nav .links .cta-mini { margin: 8px 20px; text-align: center; }
  .nav .links .nav-sep { display: none; }
}

.topbar {
  background: linear-gradient(180deg, #0f172a, #16203a) !important;
  border-bottom: 1px solid rgba(255, 255, 255, .06);
  box-shadow: 0 2px 12px rgba(15, 23, 42, .2);
}
.topbar select, .topbar input, .topbar button { border-color: #334155 !important; }
.topbar a:hover { color: #fff !important; }
.topbar .brand::before { background: linear-gradient(135deg, var(--primary), var(--accent)) !important; box-shadow: 0 0 12px rgba(98, 41, 255, .75); }

/* ---------- 批次2b：页头体系（标题+副标题+右侧操作区右对齐） ---------- */
.page-head { padding: 2px 2px 20px; }
.page-head .page-title { margin: 0 0 4px !important; font-size: 20px !important; font-weight: 700 !important; letter-spacing: -.2px; color: var(--text, #0f172a); line-height: 1.3; }
.page-head .page-sub { margin: 0; font-size: 13px; line-height: 1.7; color: var(--text-2); }
/* 右侧操作区：存在 .page-actions 时标题区左、操作区右（flex 右对齐） */
.page-head:has(> .page-actions) { display: flex; align-items: flex-start; justify-content: space-between; gap: 16px; }
.page-head:has(> .page-actions) > *:first-child { flex: 1 1 auto; min-width: 0; }
.page-actions { display: inline-flex; align-items: center; gap: 8px; flex-shrink: 0; }

/* 顶栏图标按钮（通知 / 帮助） */
.topbar .tb-icon {
  display: inline-flex; align-items: center; justify-content: center;
  width: 30px; height: 30px; padding: 0; border: 1px solid transparent !important;
  background: transparent !important; color: #cbd5e1; cursor: pointer;
  border-radius: 8px; position: relative; transition: background .2s, color .2s, transform .15s;
}
.topbar .tb-icon:hover { background: rgba(255,255,255,.1) !important; color: #fff; transform: translateY(-1px); }
.topbar .tb-icon:active { transform: translateY(0); }

/* 顶栏用户区（头像 + 用户名） */
.topbar .tb-user { display: flex; align-items: center; gap: 8px; padding: 4px 8px; border-radius: 8px; cursor: pointer; transition: background .2s; }
.topbar .tb-user:hover { background: rgba(255,255,255,.1); }
.topbar .tb-avatar {
  width: 30px; height: 30px; border-radius: 50%; flex-shrink: 0;
  display: flex; align-items: center; justify-content: center;
  background: linear-gradient(135deg, var(--primary), var(--accent));
  color: #fff; font-size: 13px; font-weight: 700; letter-spacing: .3px;
  box-shadow: 0 2px 6px rgba(98, 41, 255, .35);
}
@media (max-width: 1100px) {
  .topbar .tb-user span#userLabel { display: none; }
}
@media (max-width: 900px) {
  .topbar .tb-date, .topbar .tb-ai { display: none; }
}

/* ---------- 卡片 / 面板 ---------- */
.card {
  background: var(--card);
  border: 1px solid rgba(226, 232, 240, .7);
  border-radius: var(--radius) !important;
  box-shadow: var(--shadow-sm);
  transition: box-shadow var(--transition), transform var(--transition), border-color var(--transition);
}
.card:hover { box-shadow: var(--shadow-md); border-color: #dbe4f0; }
.card h2 {
  font-size: 17px !important;
  font-weight: 700;
  display: flex;
  align-items: center;
  gap: 8px;
}
.card h2::before {
  content: "";
  width: 4px; height: 16px;
  border-radius: 2px;
  background: linear-gradient(180deg, var(--primary), var(--accent));
  flex-shrink: 0;
}
.card h3 { color: var(--text-2) !important; font-weight: 600; }

.plan {
  border: 1px solid var(--border) !important;
  border-radius: var(--radius-lg) !important;
  box-shadow: var(--shadow-sm);
  transition: transform var(--transition), box-shadow var(--transition);
}
.plan:hover { transform: translateY(-4px); box-shadow: var(--shadow-md); }
.plan.hot {
  border: 2px solid var(--primary) !important;
  box-shadow: 0 12px 30px rgba(98, 41, 255, .16) !important;
}
.plan.hot .tag {
  background: linear-gradient(135deg, var(--primary), var(--accent)) !important;
  box-shadow: 0 4px 10px rgba(98, 41, 255, .35);
  font-weight: 600;
}
.plan .price { color: var(--primary-dark) !important; letter-spacing: -.5px; }

.metric { background: var(--card-soft); border: 1px solid var(--border); border-radius: var(--radius-sm); }
.metric .num { color: var(--primary-dark) !important; letter-spacing: -.5px; }
.stat {
  background: var(--card-soft) !important;
  border: 1px solid var(--border);
  border-radius: var(--radius-sm);
  box-shadow: var(--shadow-sm);
  transition: transform var(--transition), box-shadow var(--transition);
}
.stat:hover { transform: translateY(-2px); box-shadow: var(--shadow-md); }
.stat .num { color: var(--primary-dark) !important; letter-spacing: -.5px; }

/* ---------- 表格 ---------- */
table { border-collapse: collapse; width: 100%; }
thead th {
  background: var(--card-soft) !important;
  color: var(--muted) !important;
  font-weight: 600 !important;
  letter-spacing: .02em;
  border-bottom: 1px solid var(--border-strong) !important;
  white-space: nowrap;
}
th, td { border-bottom-color: var(--border) !important; }
tbody tr { transition: background var(--transition); }
tbody tr:hover { background: rgba(98, 41, 255, .035); }
tbody tr:nth-child(even) { background: rgba(248, 250, 252, .6); }
tbody tr:nth-child(even):hover { background: rgba(98, 41, 255, .035); }

/* ---------- 表单控件 ---------- */
input, select, textarea {
  font-family: inherit;
  border: 1px solid var(--border-strong) !important;
  border-radius: 8px !important;
  background: #fff !important;
  color: var(--text) !important;
  transition: border-color var(--transition), box-shadow var(--transition);
}
input:focus, select:focus, textarea:focus {
  outline: none !important;
  border-color: var(--primary) !important;
  box-shadow: 0 0 0 3px rgba(98, 41, 255, .15);
}
input::placeholder, textarea::placeholder { color: var(--muted-2); }

/* ---------- 按钮 ---------- */
button, .btn, .buy {
  font-family: inherit;
  cursor: pointer;
  transition: all var(--transition);
}
.main button:not(.secondary):not(.danger):not(.buy), .main .buy {
  background: linear-gradient(135deg, var(--primary), var(--primary-dark)) !important;
  border-color: transparent !important;
  color: #fff !important;
  box-shadow: 0 4px 12px rgba(98, 41, 255, .25);
}
.main button:not(.secondary):not(.danger):not(.buy):hover, .main .buy:hover {
  filter: brightness(1.08);
  box-shadow: 0 6px 18px rgba(98, 41, 255, .35);
  transform: translateY(-1px);
}
button.secondary {
  background: var(--card-soft) !important;
  color: var(--text-2) !important;
  border-color: var(--border-strong) !important;
  box-shadow: var(--shadow-sm);
}
button.secondary:hover { border-color: var(--primary); color: var(--primary); background: var(--primary-soft) !important; }
button.danger {
  background: var(--danger-soft) !important;
  color: var(--danger) !important;
  border-color: #fecaca !important;
}
button.danger:hover { background: #fee2e2 !important; }

.btn-dark { background: linear-gradient(135deg, #0f172a, #1e293b) !important; box-shadow: 0 8px 24px rgba(15, 23, 42, .3) !important; }
.btn-dark:hover { transform: translateY(-2px); box-shadow: 0 12px 28px rgba(15, 23, 42, .4) !important; }
.btn-ghost { border-color: rgba(148, 163, 184, .6) !important; }
.btn-ghost:hover { border-color: #fff !important; background: rgba(255, 255, 255, .08) !important; }

/* ---------- 侧边栏导航 ---------- */
.side { background: var(--card) !important; border-right: 1px solid var(--border) !important; }
.side button {
  color: var(--text-2) !important;
  border-radius: 8px !important;
  font-weight: 500;
  transition: all var(--transition);
}
.side button:hover { background: #f1f5f9 !important; color: #334155 !important; }
.side button.active {
  background: #f1f5f9 !important;
  color: #1e293b !important;
  box-shadow: none;
}

/* ---------- 徽标 / 标签（语义统一） ---------- */
.tag, .badge { font-weight: 600; letter-spacing: .02em; }
.tag.pass, .tag.ok, .tag.success { background: var(--success-soft) !important; color: var(--success) !important; border: 1px solid #bbf7d0; }
.tag.warn, .tag.warning, .tag.hf { background: var(--warning-soft) !important; color: var(--warning) !important; border: 1px solid #fde68a; }
.tag.fail, .tag.failed, .tag.no, .tag.err { background: var(--danger-soft) !important; color: var(--danger) !important; border: 1px solid #fecaca; }
.tag.neutral, .tag.pending, .tag.muted { background: var(--neutral-soft) !important; color: var(--muted) !important; border: 1px solid var(--border); }
.tag.running, .tag.info { background: var(--info-soft) !important; color: var(--info) !important; border: 1px solid #bfdbfe; }

/* ---------- 消息提示 ---------- */
.msg { border-radius: 10px !important; border: 1px solid transparent; }
.msg.ok { background: var(--success-soft) !important; color: var(--success) !important; border-color: #bbf7d0; }
.msg.err { background: var(--danger-soft) !important; color: var(--danger) !important; border-color: #fecaca; }
.msg.info { background: var(--info-soft) !important; color: var(--info) !important; border-color: #bfdbfe; }

/* ---------- 评分与维度条 ---------- */
.score-num { color: var(--primary-dark) !important; letter-spacing: -1px; }
.score-grade, .grade-S, .grade-A, .grade-B, .grade-C { border-radius: 8px; font-weight: 700; }
.grade-S { background: var(--success-soft) !important; color: var(--success) !important; }
.grade-A { background: var(--info-soft) !important; color: var(--info) !important; }
.grade-B { background: var(--warning-soft) !important; color: var(--warning) !important; }
.grade-C { background: var(--danger-soft) !important; color: var(--danger) !important; }

.dim .bar { background: var(--bg-deep) !important; }
.dim .bar i {
  background: linear-gradient(90deg, var(--primary), #60a5fa) !important;
  box-shadow: 0 0 6px rgba(98, 41, 255, .35);
}
.dim span { color: var(--muted) !important; }

/* ---------- 代码块 / 原始输出 ---------- */
.raw {
  background: #0f172a !important;
  color: #cbd5e1 !important;
  border: 1px solid #1e293b;
  border-radius: 10px !important;
  box-shadow: inset 0 2px 6px rgba(0, 0, 0, .2);
}

/* ---------- 空态 ---------- */
.msg.ok:empty, .msg.info:empty { display: none; }

/* ---------- 深色报告页（report.html 覆盖在自身 style 中，此处只做外层协调） ---------- */
.geo-report { box-shadow: 0 10px 40px rgba(0, 0, 0, .35) !important; }

/* ---------- 统一页脚（shared-footer.js 渲染，唯一来源） ---------- */
.site-footer { margin-top: 72px; background: #0b1220; color: #cbd5e1; border-top: 1px solid rgba(98, 41, 255, .22); }
.site-footer .finner { max-width: 1200px; margin: 0 auto; padding: 48px 24px 28px; display: flex; gap: 48px; flex-wrap: wrap; }
.site-footer .fbrand { flex: 1 1 240px; }
.site-footer .flogo { display: flex; align-items: center; gap: 10px; font-weight: 800; font-size: 18px; color: #fff; }
.site-footer .flogo .logo-dot { width: 9px; height: 9px; border-radius: 50%; background: linear-gradient(135deg, var(--primary), var(--primary-dark)); box-shadow: 0 0 12px rgba(98, 41, 255, .8); flex-shrink: 0; }
.site-footer .fslogan { margin-top: 12px; color: #94a3b8; font-size: 13px; line-height: 1.7; }
.site-footer .fcta { display: inline-block; margin-top: 16px; color: #fff; text-decoration: none; font-weight: 600; font-size: 14px; padding: 9px 16px; border-radius: 999px; background: linear-gradient(135deg, var(--primary), var(--accent)); box-shadow: 0 4px 14px rgba(98, 41, 255, .35); transition: filter .2s, transform .2s; }
.site-footer .fcta:hover { filter: brightness(1.1); transform: translateY(-1px); }
.site-footer .fcols { flex: 2 1 480px; display: flex; gap: 40px; flex-wrap: wrap; }
.site-footer .fcol h4 { color: #fff; font-size: 14px; margin: 0 0 12px; }
.site-footer .fcol a { display: block; color: #94a3b8; font-size: 13px; text-decoration: none; padding: 5px 0; transition: color .2s; }
.site-footer .fcol a:hover { color: #fff; }
.site-footer .fbottom { max-width: 1200px; margin: 0 auto; padding: 16px 24px; border-top: 1px solid rgba(255, 255, 255, .06); display: flex; gap: 16px; flex-wrap: wrap; align-items: center; font-size: 12px; color: #64748b; }
.site-footer .fdisc { flex: 1; line-height: 1.6; }
@media (max-width: 768px) {
  .site-footer .finner { padding: 32px 18px 20px; gap: 28px; }
  .site-footer .fcols { gap: 24px; }
}

/* ---------- 移动端适配 ---------- */
@media (max-width: 768px) {
  body { font-size: 15px; }
  .nav { padding: 12px 16px !important; }
  .nav .links { gap: 10px !important; }
  .card { padding: 18px 16px !important; border-radius: 12px !important; }
  .main { padding: 16px !important; }
  .side { width: 56px !important; }
  .side button { font-size: 0 !important; padding: 12px 4px !important; text-align: center !important; }
  .side button::first-letter { font-size: 12px; }
  .topbar { padding: 10px 14px !important; }
  .topbar .brand { font-size: 14px; }
  table { font-size: 12px !important; }
  th, td { padding: 6px 8px !important; }
  .score-num { font-size: 40px !important; }
  /* 窄屏工具栏/表单堆叠，避免截断 */
  .row { flex-wrap: wrap !important; gap: 8px !important; }
  .row > input, .row > select, .row > textarea, .row > button { flex: 1 1 100% !important; min-width: 0 !important; }
  .toolbar, .geo-toolbar, .geo-bar { flex-wrap: wrap !important; gap: 8px !important; }
  .grid2, .grid3, .grid4, .geo-grid2, .geo-grid3, .geo-grid4 { grid-template-columns: 1fr !important; }
  .topbar select { max-width: 130px; }
  .main .page { padding: 0 !important; }
  .plans { padding: 0 16px 40px !important; }
  input, select, button { font-size: 14px !important; }
}

/* ============================================================
   增强层 v2 —— 控制台各视图 / 通用组件补齐
   原则：仅样式覆盖；不改功能/JS/id；:has() 仅作渐进增强，旧浏览器忽略
   ============================================================ */

/* ---------- 页面主区排版 ---------- */
.main { padding: 28px 30px; }
.page-title {
  font-size: 22px !important; font-weight: 800 !important;
  margin: 4px 0 18px !important; letter-spacing: .2px;
  display: flex; align-items: center; gap: 10px; flex-wrap: wrap;
}
.page-title small, .page-title .sub { font-size: 13px !important; color: var(--muted) !important; font-weight: 500 !important; }

/* 卡片内统一标题层级 */
.card h3 { margin: 18px 0 10px !important; }
.card > h3:first-child, .card h3:first-of-type { margin-top: 4px !important; }
.card .hint, .card .tip, .card .note {
  font-size: 13px; color: var(--muted);
  background: var(--card-soft); border: 1px solid var(--border);
  border-radius: 10px; padding: 10px 14px; margin: 10px 0;
}
.card .hint b, .card .tip b { color: var(--text-2); }

/* ---------- 栅格统一（grid2/3/4 与 geo-grid*） ---------- */
.grid2 { display: grid; grid-template-columns: repeat(2, 1fr); gap: 18px; }
.grid3 { display: grid; grid-template-columns: repeat(3, 1fr); gap: 18px; }
.grid4 { display: grid; grid-template-columns: repeat(4, 1fr); gap: 18px; }
@media (max-width: 1200px) { .grid4 { grid-template-columns: repeat(2, 1fr); } }
@media (max-width: 900px) {
  .grid2, .grid3, .grid4 { grid-template-columns: 1fr; }
}
@media (max-width: 600px) {
  .grid2, .grid3, .grid4 { gap: 12px; }
}

/* ---------- 统计卡（metric/stat/kpi） ---------- */
.metric, .stat, .kpi {
  background: var(--card-soft) !important;
  border: 1px solid var(--border) !important;
  border-radius: 12px !important;
  padding: 16px 18px !important;
  box-shadow: var(--shadow-sm);
  transition: transform var(--transition), box-shadow var(--transition), border-color var(--transition);
}
.metric:hover, .stat:hover, .kpi:hover { transform: translateY(-2px); box-shadow: var(--shadow-md); border-color: #dbe4f0; }
.metric .num, .stat .num { font-size: 28px !important; }
.kpi .num { font-size: 30px !important; font-weight: 800; letter-spacing: -.5px; color: var(--primary-dark) !important; }
.kpi .lab, .metric .lab, .stat .lab { font-size: 12px !important; color: var(--muted) !important; margin-top: 6px !important; }

/* 状态统计卡（成功/警告/危险 变体） */
.metric.ok, .stat.ok, .kpi.ok { background: var(--success-soft) !important; border-color: #bbf7d0 !important; }
.metric.ok .num, .stat.ok .num, .kpi.ok .num { color: var(--success) !important; }
.metric.warn, .stat.warn, .kpi.warn { background: var(--warning-soft) !important; border-color: #fde68a !important; }
.metric.warn .num, .stat.warn .num, .kpi.warn .num { color: var(--warning) !important; }
.metric.err, .stat.err, .kpi.err { background: var(--danger-soft) !important; border-color: #fecaca !important; }
.metric.err .num, .stat.err .num, .kpi.err .num { color: var(--danger) !important; }

/* ---------- 表格增强 ---------- */
thead th {
  position: relative;
  padding: 11px 14px !important;
  font-size: 13px !important;
  text-transform: none !important;
  letter-spacing: .03em;
}
tbody td { padding: 11px 14px !important; font-size: 13.5px; }
/* 大表横向滚动：仅含 table 的卡片在小屏开启滚动，避免挤压变形 */
@media (max-width: 900px) {
  .card:has(> table) { overflow-x: auto; -webkit-overflow-scrolling: touch; }
  .card:has(> table) table { min-width: 620px; }
  .card > table { display: block; overflow-x: auto; }
}
/* 空表格行（暂无数据） */
tbody tr:only-child td[colspan] {
  text-align: center !important;
  color: var(--muted-2) !important;
  padding: 28px 12px !important;
  font-size: 13px !important;
  letter-spacing: .02em;
}

/* ---------- 工具栏 / 操作条 ---------- */
.row, .toolbar, .geo-toolbar {
  display: flex; flex-wrap: wrap; gap: 10px; align-items: center;
}
.row { margin-bottom: 14px; }
.row > * { min-width: 0; }
.row input, .row select, .toolbar input, .toolbar select,
.geo-toolbar input, .geo-toolbar select,
.topbar select, .topbar input {
  height: 38px; padding: 0 12px !important; line-height: 38px;
}
.topbar select, .topbar input { height: 36px; padding: 0 10px !important; }

/* ---------- 表单控件统一 ---------- */
input, select, textarea { font-size: 14px !important; }
input, select { height: 40px; }
input[type="checkbox"], input[type="radio"] { height: auto; width: auto; }
textarea { padding: 10px 12px !important; line-height: 1.6; }
label { font-size: 13px; color: var(--text-2); font-weight: 500; }
.form-row { display: flex; gap: 12px; flex-wrap: wrap; align-items: flex-end; margin-bottom: 12px; }
.form-row .field { display: flex; flex-direction: column; gap: 6px; flex: 1 1 220px; min-width: 0; }

/* ---------- 按钮统一 ---------- */
button, .btn { font-size: 14px !important; font-weight: 600 !important; }
button:not(.secondary):not(.danger):not(.buy):not(.cta-mini),
.btn:not(.secondary):not(.danger) {
  border-radius: 8px !important;
  padding: 9px 18px !important;
  min-height: 38px;
  display: inline-flex; align-items: center; justify-content: center; gap: 6px;
}
button.secondary, button.danger, .btn.secondary, .btn.danger {
  border-radius: 8px !important;
  padding: 9px 18px !important;
  min-height: 38px;
  display: inline-flex; align-items: center; justify-content: center; gap: 6px;
}
button.danger:hover { transform: translateY(-1px); box-shadow: 0 4px 10px rgba(220, 38, 38, .18); }

/* ---------- 弹窗 / 遮罩（渐进增强，供自定义 modal 使用） ---------- */
.overlay {
  position: fixed; inset: 0; z-index: 200;
  background: rgba(15, 23, 42, .5);
  backdrop-filter: blur(3px);
  -webkit-backdrop-filter: blur(3px);
  display: flex; align-items: center; justify-content: center; padding: 20px;
}
.modal {
  background: var(--card); border-radius: var(--radius-lg) !important;
  box-shadow: var(--shadow-lg) !important;
  border: 1px solid var(--border);
  width: min(560px, 100%);
  max-height: 86vh; overflow: auto;
  padding: 26px 28px;
  animation: modal-pop .22s ease;
}
.modal h3 { margin-top: 0 !important; font-size: 18px !important; }
.modal .row { margin-top: 16px; }
@keyframes modal-pop {
  from { opacity: 0; transform: translateY(10px) scale(.98); }
  to { opacity: 1; transform: none; }
}

/* ---------- 空态占位 ---------- */
.empty, .empty-state, .no-data {
  text-align: center !important;
  color: var(--muted-2) !important;
  padding: 36px 16px !important;
  font-size: 14px !important;
  background: var(--card-soft) !important;
  border: 1px dashed var(--border-strong) !important;
  border-radius: 12px !important;
  margin: 12px 0;
}
.empty .empty-icon, .empty-state .empty-icon {
  display: block; font-size: 32px; margin-bottom: 8px; opacity: .6;
}

/* ---------- 图表容器 / 预览 ---------- */
.chart-box, .chart-wrap {
  background: var(--card-soft); border: 1px solid var(--border);
  border-radius: 12px; padding: 16px; margin: 12px 0;
  overflow-x: auto;
}
.chart-box canvas, .chart-wrap canvas, .chart-box svg, .chart-wrap svg {
  display: block; max-width: 100%; margin: 0 auto;
}

/* ---------- 滚动条美化 ---------- */
::-webkit-scrollbar { width: 10px; height: 10px; }
::-webkit-scrollbar-track { background: transparent; }
::-webkit-scrollbar-thumb { background: #cbd5e1; border-radius: 6px; border: 2px solid transparent; background-clip: content-box; }
::-webkit-scrollbar-thumb:hover { background: #94a3b8; border: 2px solid transparent; background-clip: content-box; }
.raw::-webkit-scrollbar-thumb { background: #334155; border: 2px solid transparent; background-clip: content-box; }

/* ---------- 页脚白标兼容（增强层不覆盖 .site-footer 布局） ---------- */
body > .site-footer { margin-top: 0; }

/* ---------- 打印（报告/导出友好） ---------- */
@media print {
  .nav, .side, .topbar, .toolbar, .site-footer, .overlay { display: none !important; }
  .main { padding: 0 !important; }
  .card { box-shadow: none !important; border: 1px solid #e2e8f0 !important; break-inside: avoid; }
  body { background: #fff !important; }
}

/* ---------- 深色报告页响应式（report.html 深色变量在页面内定义） ---------- */
@media (max-width: 768px) {
  .geo-report { padding: 20px 16px !important; }
  .geo-report .geo-grid2, .geo-report .geo-grid3 { grid-template-columns: 1fr !important; }
  .geo-report .geo-h1 { font-size: 20px !important; }
}

/* ---------- v3 增强：普通表格密度/表头/斑马纹（不触及 .geo-table 深色表与 .hm-table 热力表） ---------- */
.main table:not(.geo-table):not(.hm-table),
.card table:not(.geo-table):not(.hm-table) {
  width: 100%;
  border-collapse: collapse;
  font-size: 13px;
  margin: 12px 0;
  background: var(--card);
  border-radius: 10px;
  overflow: hidden;
  border: 1px solid var(--border);
}
.main table:not(.geo-table):not(.hm-table) th,
.card table:not(.geo-table):not(.hm-table) th {
  background: #e8f1ff !important;
  color: var(--text-1) !important;
  text-align: left;
  padding: 9px 12px !important;
  font-weight: 600 !important;
  font-size: 12px !important;
  border-bottom: 1px solid var(--border-strong) !important;
  white-space: nowrap;
  letter-spacing: .02em;
}
.main table:not(.geo-table):not(.hm-table) td,
.card table:not(.geo-table):not(.hm-table) td {
  padding: 8px 12px;
  border-bottom: 1px solid var(--border);
  vertical-align: middle;
  color: var(--text-1);
  line-height: 1.55;
}
.main table:not(.geo-table):not(.hm-table) tr:last-child td,
.card table:not(.geo-table):not(.hm-table) tr:last-child td { border-bottom: 0; }
.main table:not(.geo-table):not(.hm-table) tbody tr:nth-child(even) td,
.card table:not(.geo-table):not(.hm-table) tbody tr:nth-child(even) td { background: var(--card-soft); }
.main table:not(.geo-table):not(.hm-table) tbody tr:hover td,
.card table:not(.geo-table):not(.hm-table) tbody tr:hover td { background: var(--primary-soft); }

/* 表格操作列：按钮紧凑、禁止换行堆叠 */
.main table td:last-child,
.card table td:last-child { white-space: nowrap; }
.main table td button, .main table td .btn,
.card table td button, .card table td .btn {
  padding: 4px 10px !important;
  font-size: 12px !important;
  line-height: 1.4;
  margin: 2px 4px 2px 0;
  white-space: nowrap;
  border-radius: 6px !important;
  box-shadow: none !important;
}
.main table td button:hover, .card table td button:hover { transform: none; }

/* ---------- v3 增强：侧栏按钮紧凑（仅桌面宽度生效，768 断点窄条规则不受影响） ---------- */
.side button {
  padding: 9px 12px !important;
  font-size: 13px !important;
  margin-bottom: 3px;
}
.side-group { padding: 14px 14px 5px; }

/* 卡片标题层级与区块分组 */
.card h1, .card h2, .card h3 { margin-top: 0; }
.card h2 { font-size: 16px; letter-spacing: .01em; }
.card h2 + .row, .card h2 + div { margin-top: 4px; }

/* 弹窗遮罩与模态统一 */
.overlay, .modal-mask {
  background: rgba(15, 23, 42, .5) !important;
  backdrop-filter: blur(3px);
}
.overlay .modal, .modal-mask .modal, .overlay > div {
  border-radius: 14px !important;
  box-shadow: 0 24px 60px rgba(15, 23, 42, .28) !important;
  border: 1px solid var(--border) !important;
}
.overlay .modal h3, .modal-mask .modal h3 { margin-top: 0; }

/* 空态行（表格内） */
table td.empty-cell, table td .empty-row {
  text-align: center;
  padding: 28px 12px !important;
  color: var(--muted-2);
  font-style: normal;
}

/* ============================================================
   v4 溢出修复层 —— 全站横向溢出治理（console/report/admin/各浅色页）
   原则：仅样式覆盖；不改功能/JS/id；:has() 渐进增强，旧浏览器忽略
   ============================================================ */

/* ---------- 全局防溢出基线 ---------- */
img, svg { max-width: 100%; height: auto; }
pre, code, textarea, .raw { white-space: pre-wrap; word-break: break-word; }
th, td { overflow-wrap: anywhere; word-break: break-word; }
select { max-width: 100%; min-width: 0; }
option { max-width: 100%; overflow: hidden; text-overflow: ellipsis; }
.row > *, .toolbar > *, .geo-toolbar > *, .form-row > * { min-width: 0; }
h1, h2, h3, h4, h5, p, span, a, div, li, label { overflow-wrap: break-word; }

/* ---------- 表格横向滚动包裹（全尺寸启用，替换 v2 仅 900px 规则） ---------- */
/* 直接子表格：block + 横向滚动，min-width:100% 保证窄表仍填满容器 */
.card > table { display: block; overflow-x: auto; min-width: 100%; -webkit-overflow-scrolling: touch; }
/* 卡内任何直接含 table 的容器（div#xxxArea 等）：容器横向滚动，表保持内容宽度 */
.card :has(> table) { overflow-x: auto; -webkit-overflow-scrolling: touch; max-width: 100%; }
.card :has(> table) table { max-width: none; }
/* 窄屏大表保底最小宽度，避免列被挤压成竖条 */
@media (max-width: 900px) {
  .card > table:not(.geo-table) { min-width: 620px; }
  .card :has(> table) table:not(.geo-table) { min-width: 620px; }
}

/* ---------- 深色报告表（console 内嵌 / report 页，均含 .geo-report） ---------- */
.geo-report { max-width: 100%; }
.geo-report > table, .geo-report :has(> table) {
  display: block; overflow-x: auto; -webkit-overflow-scrolling: touch; max-width: 100%;
}
.geo-report > table { min-width: 100%; }
@media (max-width: 900px) {
  .geo-report > table.geo-table, .geo-report :has(> table) .geo-table { min-width: 620px; }
}

/* ---------- 窄屏顶栏（console topbar）防溢出 ---------- */
@media (max-width: 768px) {
  .topbar { flex-wrap: wrap; row-gap: 8px; }
  .topbar .spacer { display: none; }
  .topbar #userLabel { display: none; }
  .topbar .brand { font-size: 14px; }
  .topbar select { max-width: 150px; }
  .topbar a { font-size: 13px; }
}

/* ========== v5 溢出根修 ==========
 * 关键：console 的 .page 是 .layout 的直接 flex 子项，内部 min-width 表格会把
 * 其 min-content 撑成 620px+，导致 main 被 flex 收缩、页面横向溢出。
 * 修复：.page 允许收缩(min-width:0) + 横向裁剪；表格滚动下沉到 .card 内部。
 */
.page { min-width: 0; overflow-x: hidden; }
.card, .sub-card, .panel, .geo-card {
  max-width: 100%;
  min-width: 0;
  overflow-x: clip;
}
/* 卡片直接子表格：保留 table 布局（display:table 不破坏列对齐），按内容宽度展开，
 * 超出在卡片内横向滚动；窄表仍填满卡片 */
.card > table, .sub-card > table {
  display: table;
  width: max-content;
  min-width: 100%;
  max-width: 100%;
  overflow-x: visible;
}
@media (max-width: 900px) {
  .card > table:not(.geo-table),
  .card :has(> table) table:not(.geo-table),
  .sub-card table { min-width: 620px; }
}
/* 目录侧栏（console）与窄屏保护 */
.toc-rail { max-width: 100%; }
@media (max-width: 768px) {
  .toc-rail { display: none !important; }
}

/* ---------- 管理端（admin/index.html）排版统一 ---------- */
#loginCard {
  max-width: 440px; margin: 48px auto 24px;
  padding: 28px 30px !important;
  text-align: left;
}
#loginCard h2 { margin-bottom: 16px; }
#loginCard input { width: 100%; margin-bottom: 10px; height: 42px; }
#loginCard button { width: 100%; height: 42px; font-size: 15px !important; }
#loginCard .msg { margin: 12px 0 8px; }
.admin-wrap .stats { margin: 4px 0 8px; }
.admin-wrap h2 { display: flex; align-items: center; gap: 8px; }
.admin-wrap h2::before {
  content: ""; width: 4px; height: 16px; border-radius: 2px;
  background: linear-gradient(180deg, var(--primary), var(--accent));
}
.admin-wrap table td { vertical-align: middle; }
.admin-wrap table td:last-child { white-space: normal; }
@media (max-width: 768px) {
  body:has(.admin-wrap) > .nav { flex-wrap: wrap; row-gap: 6px; padding: 12px 16px !important; }
  body:has(.admin-wrap) > .nav a { margin-left: 0; margin-right: 12px; }
}

/* ---------- 操作台-订阅与账单：内容区铺满优化（page-billing 专属，不影响其它页签） ----------
 * .main 高度随侧栏菜单撑高，页面内容较短时下方易留大片空白；
 * 给 billing 页签设置 min-height，使卡片至少铺满一屏，缩小可见留白。 */
#page-billing { min-height: calc(100vh - 120px); }
#page-billing > .card { min-height: calc(100vh - 165px); }

/* ============================================================
   console 布局重构：对标腾讯企点 GEO 参考后台
   仅作用于 #consoleApp（操作台），不污染 index/pricing 等营销页
   ============================================================ */
#consoleApp { background: var(--bg); }

/* ---- ① 顶部操作栏：白底浅色、深灰文字（对齐参考后台顶部操作栏风格） ---- */
#consoleApp .topbar {
  background: #ffffff !important;
  border-bottom: 1px solid #e4e9f2 !important;
  box-shadow: 0 2px 10px rgba(15, 23, 42, .05) !important;
  color: #1f2937 !important;
  gap: 12px;
}
#consoleApp .topbar .brand { color: #0f172a; }
#consoleApp .topbar select,
#consoleApp .topbar input,
#consoleApp .topbar button {
  background: #ffffff !important;
  border: 1px solid #d7deeb !important;
  color: #1f2937 !important;
  border-radius: 8px !important;
  padding: 7px 11px !important;
  font-size: 13px !important;
}
#consoleApp .topbar select:focus,
#consoleApp .topbar input:focus {
  border-color: #334155 !important;
  outline: none;
  box-shadow: 0 0 0 3px rgba(15, 23, 42, .12);
}
#consoleApp .topbar a { color: #cbd5e1 !important; }
#consoleApp .topbar a:hover { color: #ffffff !important; }

/* 全局搜索框入口（占位，未接检索逻辑；批次2b：聚焦紫边/浅紫阴影由 topbar input:focus 生效，此处补过渡与悬停） */
#consoleApp .tb-search { position: relative; }
#consoleApp .tb-search input {
  width: 220px;
  padding-left: 34px !important;
  background: #f8fafc !important;
  transition: border-color .2s, box-shadow .2s, background .2s;
}
#consoleApp .tb-search input:hover { background: #fff !important; }
#consoleApp .tb-search input:focus { background: #fff !important; }
#consoleApp .tb-search::before {
  content: "";
  position: absolute; left: 12px; top: 50%;
  width: 12px; height: 12px; margin-top: -8px;
  border: 1.6px solid #94a3b8; border-radius: 50%;
}
#consoleApp .tb-search::after {
  content: "";
  position: absolute; left: 22px; top: 50%;
  width: 6px; height: 1.6px; margin-top: 4px;
  background: #94a3b8; transform: rotate(45deg);
}
/* 日期范围筛选占位 */
#consoleApp .tb-date { display: flex; align-items: center; gap: 6px; }
#consoleApp .tb-date input { width: 122px; color: var(--text-2) !important; font-size: 12.5px !important; }
#consoleApp .tb-date-sep { color: #94a3b8; font-size: 12px; }

/* ---- ② 侧栏分区：分组标题 + 子项缩进 ---- */
/* ---- ② 侧栏分区：分组标题 + 子项缩进（批次1/3：240px + 图标 + 浅紫高亮） ---- */
#consoleApp .side { width: 240px; padding: 12px 12px 24px; background: var(--card) !important; display: flex; flex-direction: column; transition: width var(--transition); }
#consoleApp .side-group {
  font-size: 11px; font-weight: 800; letter-spacing: .8px;
  color: var(--muted) !important; text-transform: uppercase;
  padding: 16px 12px 8px !important;
  margin-top: 4px;
  border-top: 1px solid var(--border);
}
#consoleApp .side-group:first-child { border-top: none; padding-top: 6px; }
#consoleApp .side button {
  padding: 9px 12px 9px 14px !important;
  border-radius: 8px !important;
  font-size: 13.5px !important;
  margin-bottom: 3px;
  color: var(--text-2) !important;
  display: flex; align-items: center; gap: 10px;
  position: relative; width: 100%; text-align: left;
  border: none; background: transparent;
}
#consoleApp .side button:hover { background: #f1f5f9 !important; color: #1e293b !important; }
#consoleApp .side button.active {
  background: #f1f5f9 !important;
  color: #1e293b !important;
  box-shadow: none !important;
  font-weight: 600;
}
#consoleApp .side button.active::before {
  content: ""; position: absolute; left: 0; top: 50%; transform: translateY(-50%);
  width: 3px; height: 16px; border-radius: 0 4px 4px 0;
  background: #334155;
}
#consoleApp .side .side-ico { width: 18px; height: 18px; flex-shrink: 0; opacity: .85; }
#consoleApp .side button:hover .side-ico, #consoleApp .side button.active .side-ico { opacity: 1; }

/* ---- ②-1 侧栏品牌区（对齐企点 GEO 后台：品牌名 + 企业名 + 套餐徽标） ---- */
#consoleApp .side-brand {
  display: flex; align-items: center; gap: 10px;
  padding: 6px 6px 14px; border-bottom: 1px solid var(--border);
  margin-bottom: 8px; flex-shrink: 0;
}
#consoleApp .sb-logo {
  width: 36px; height: 36px; border-radius: 10px; flex-shrink: 0;
  display: flex; align-items: center; justify-content: center;
  background: linear-gradient(135deg, #334155, #1e293b);
  color: #fff; font-weight: 800; font-size: 15px; letter-spacing: .5px;
  box-shadow: 0 4px 10px rgba(15, 23, 42, .18);
}
#consoleApp .sb-info { flex: 1; min-width: 0; }
#consoleApp .sb-name { font-size: 14px; font-weight: 800; color: #0F172A; white-space: nowrap; overflow: hidden; text-overflow: ellipsis; }
#consoleApp .sb-org { font-size: 11px; color: #8B96A8; white-space: nowrap; overflow: hidden; text-overflow: ellipsis; margin-top: 2px; }
#consoleApp .sb-plan {
  flex-shrink: 0; font-size: 10.5px; font-weight: 700;
  color: #00B37A; background: #E6FAF3;
  border: 1px solid rgba(0, 179, 122, .35);
  border-radius: 6px; padding: 2px 7px; letter-spacing: .3px;
}

/* ---- ②-2 侧栏底部用户区（用户标识 + 管理员徽标） ---- */
#consoleApp .side-user {
  display: flex; align-items: center; gap: 10px;
  margin-top: auto; padding: 12px 10px;
  background: #FFFFFF; border: 1px solid var(--border); border-radius: 10px;
  flex-shrink: 0;
}
#consoleApp .su-avatar {
  width: 32px; height: 32px; border-radius: 50%; flex-shrink: 0;
  display: flex; align-items: center; justify-content: center;
  background: #e2e8f0; color: #475569; font-weight: 800; font-size: 13px;
}
#consoleApp .su-meta { flex: 1; min-width: 0; }
#consoleApp .su-name { font-size: 13px; font-weight: 700; color: #0F172A; white-space: nowrap; overflow: hidden; text-overflow: ellipsis; }
#consoleApp .su-id { font-size: 11px; color: #8B96A8; white-space: nowrap; overflow: hidden; text-overflow: ellipsis; margin-top: 2px; }
#consoleApp .su-badge {
  flex-shrink: 0; font-size: 10.5px; font-weight: 700;
  color: #334155; background: #f1f5f9;
  border: 1px solid rgba(15, 23, 42, .12);
  border-radius: 6px; padding: 2px 7px; letter-spacing: .3px;
}

/* ---- ③ 内容区卡片：统一圆角/边框/阴影（对齐参考后台白底蓝紫扁平风格） ---- */
#consoleApp .card {
  border-radius: 14px !important;
  border: 1px solid #e6ebf3 !important;
  box-shadow: 0 1px 4px rgba(15, 23, 42, .05) !important;
}
#consoleApp .main { padding: 20px 24px; }
#consoleApp .main h2, #consoleApp .main h3 { color: #0f172a; }

/* ---- ④ 主操作按钮：紫色（对齐参考后台「创建提问」紫色主按钮） ---- */
#consoleApp .main button:not(.secondary):not(.danger):not(.ghost):not(.buy):not(.mini),
#consoleApp .main .btn-primary,
#consoleApp .main .primary {
  background: linear-gradient(135deg, var(--primary), var(--primary-dark)) !important;
  border-color: transparent !important;
  color: #ffffff !important;
  box-shadow: 0 4px 12px rgba(98, 41, 255, .28) !important;
}
#consoleApp .main button:not(.secondary):not(.danger):not(.ghost):not(.buy):not(.mini):hover {
  background: linear-gradient(135deg, #4A58E8, #3B49D6) !important;
}
/* 次级按钮保持浅色描边 */
#consoleApp .main button.secondary {
  background: #ffffff !important;
  border: 1px solid #d7deeb !important;
  color: #334155 !important;
}

/* ---- ⑤ 右侧本页目录锚点：对齐参考后台锚点导航 ---- */
#consoleApp .console-toc {
  width: 210px;
  background: #ffffff;
  border: 1px solid #e6ebf3;
  border-radius: 12px;
  box-shadow: 0 1px 4px rgba(15, 23, 42, .05);
  padding: 14px 12px;
}
#consoleApp .console-toc h4 { font-size: 12px; color: #94a3b8; margin: 0 0 10px; letter-spacing: .5px; }
#consoleApp .console-toc a { color: var(--text-2); }

/* 用量入口 / AI 助手：顶栏文字按钮 */
#consoleApp .topbar a.tb-link {
  display: inline-flex; align-items: center;
  padding: 6px 12px; border: 1px solid #d7deeb; border-radius: 8px;
  color: #334155 !important; font-size: 13px; text-decoration: none;
  background: #f8fafc;
}
#consoleApp .topbar a.tb-link:hover { border-color: #334155; background: #1e293b; }
#consoleApp .topbar a.tb-ai {
  display: inline-flex; align-items: center;
  padding: 6px 12px; border-radius: 8px;
  color: #ffffff !important; font-size: 13px; text-decoration: none;
  background: linear-gradient(135deg, #334155, #1e293b);
  box-shadow: 0 3px 8px rgba(15, 23, 42, .18);
}
#consoleApp .topbar a.tb-ai:hover { opacity: .92; }

/* ---- 窄屏适配：375 下隐藏日期占位、压缩搜索框，保证无横向溢出 ---- */
@media (max-width: 900px) {
  #consoleApp .topbar { flex-wrap: wrap; padding: 10px 14px !important; }
  #consoleApp .tb-date { display: none !important; }
  #consoleApp .tb-search input { width: 130px; }
  /* 窄条模式：取消子项缩进，按钮居中显示，避免文字重叠 */
  #consoleApp .side { width: 64px !important; padding: 10px 6px 24px; }
  #consoleApp .side button { padding: 10px 4px !important; text-align: center; font-size: 12px !important; }
  #consoleApp .side-group { display: none !important; }
  /* 窄条模式：品牌区/用户区只保留图形元素 */
  #consoleApp .side-brand { padding: 6px 0 12px; justify-content: center; border-bottom-color: var(--border); }
  #consoleApp .sb-info, #consoleApp .sb-plan { display: none !important; }
  #consoleApp .side-user { margin-top: auto; padding: 10px 0; justify-content: center; background: transparent; border: none; }
  #consoleApp .su-meta, #consoleApp .su-badge { display: none !important; }
}
@media (max-width: 480px) {
  #consoleApp .topbar { gap: 8px; }
  #consoleApp .tb-search { display: none !important; }
  #consoleApp .topbar .brand { font-size: 14px; margin-right: 0; }
  #consoleApp .topbar select { max-width: 90px; font-size: 12px !important; }
}

/* ---------- 概览 KPI 总览（对标腾讯企点 GEO 后台「概览」页） ---------- */
/* 批次3：概览筛选行（对标企点 GEO：下拉 combobox 行、白底、圆角 8px、间距 8px） */
/* 批次2b：控件统一 32px、输入框同规格、聚焦浅紫阴影、按钮统一高度 */
.ov-filters { display: flex; flex-wrap: wrap; gap: 10px; align-items: center; background: #fff; border: 1px solid var(--border); border-radius: 8px; padding: 10px 12px; margin-bottom: 14px; }
.ov-filters .ov-f-item { display: inline-flex; align-items: center; gap: 6px; }
.ov-filters .ov-f-item span { font-size: 12px; color: var(--muted); white-space: nowrap; }
.ov-filters select, .ov-filters input[type="date"], .ov-filters input[type="text"], .ov-filters input[type="search"], .ov-filters input:not([type]) { height: 32px; min-width: 120px; border: 1px solid var(--border); border-radius: 6px; background: #fff; color: var(--text); padding: 0 8px; font-size: 13px; outline: none; box-sizing: border-box; }
.ov-filters select:focus, .ov-filters input:focus { border-color: var(--primary); box-shadow: 0 0 0 3px rgba(98, 41, 255, .12); transition: border-color .2s, box-shadow .2s; }
.ov-filters select:disabled { color: #cbd5e1; background: #f8fafc; cursor: not-allowed; }
.ov-filters button { height: 32px; min-height: 32px; padding: 0 14px; border-radius: 6px; font-size: 13px; line-height: 1; }
.ov-filters button.secondary { height: 32px; line-height: 1; }

.ov-meta { display: flex; flex-wrap: wrap; gap: 10px; align-items: center; font-size: 12px; color: var(--muted); margin-bottom: 14px; }
.sample-badge { display: inline-flex; align-items: center; gap: 4px; padding: 2px 10px; border-radius: 999px; font-size: 11px; font-weight: 600; line-height: 1.6; }
.sample-badge.demo { background: #fef3c7; color: #b45309; }
.sample-badge.real { background: var(--success-soft); color: var(--success); }
/* 批次2a：KPI 卡组件化（白卡/10px圆角/细边框/等宽16px网格） */
.kpi-grid { display: grid; grid-template-columns: repeat(auto-fit, minmax(215px, 1fr)); gap: 16px; margin-bottom: 16px; }
.kpi-card { background: var(--card); border: 1px solid var(--border); border-radius: var(--radius-sm); box-shadow: var(--shadow-sm); padding: 18px 20px; }
.kpi-card .kpi-label { font-size: 13px; color: var(--muted); font-weight: 500; }
.kpi-card .kpi-value { font-size: 28px; font-weight: 800; letter-spacing: -.5px; color: var(--text, #0f172a); line-height: 1.2; margin: 8px 0 6px; }
.kpi-card .kpi-value.placeholder { color: #cbd5e1; font-weight: 600; }
.kpi-card .kpi-delta-row { font-size: 13px; min-height: 18px; }
.kpi-delta { display: inline-flex; align-items: center; gap: 3px; font-weight: 600; }
.kpi-delta.up { color: var(--success); }
.kpi-delta.down { color: var(--danger); }
.kpi-delta.flat { color: #94a3b8; font-weight: 400; }
/* 批次3/4：KPI 环比预警角标 + 波动预警条 */
.kpi-alert { display: inline-flex; align-items: center; gap: 3px; margin-top: 8px; padding: 2px 9px; border-radius: 999px; font-size: 11.5px; font-weight: 600; }
.kpi-alert.down { color: #b91c1c; background: #fee2e2; }
.kpi-alert.up { color: #047857; background: #d1fae5; }
.ov-alert-bar { margin: 0 0 16px; border: 1px solid var(--border); border-left: 4px solid var(--primary, var(--primary)); border-radius: var(--radius); background: var(--card-soft); padding: 12px 16px; }
.ov-alert-head { font-size: 13px; font-weight: 700; color: var(--text, #0f172a); margin-bottom: 8px; }
.ov-alert-list { display: flex; flex-direction: column; gap: 8px; }
.ov-alert-item { display: flex; flex-wrap: wrap; gap: 6px 14px; align-items: baseline; font-size: 12.5px; padding: 7px 10px; border-radius: 8px; background: #fff; }
.ov-alert-item.down { border-left: 3px solid var(--danger, #ef4444); }
.ov-alert-item.up { border-left: 3px solid var(--success, #10b981); }
.ov-alert-metric { font-weight: 700; color: var(--text, #0f172a); }
.ov-alert-dir.down { color: var(--danger, #ef4444); font-weight: 600; }
.ov-alert-dir.up { color: var(--success, #10b981); font-weight: 600; }
.ov-alert-entity { color: var(--muted); }
.ov-alert-advice { color: var(--muted); flex: 1 1 100%; margin-top: 2px; }
.ov-groups-wrap { display: grid; grid-template-columns: 1fr 1fr; gap: 18px; }
.ov-cites { display: flex; flex-direction: column; }
.cite-item { display: flex; align-items: flex-start; gap: 10px; padding: 9px 0; border-bottom: 1px dashed var(--border); }
.cite-item:last-child { border-bottom: none; }
.cite-idx { flex: 0 0 auto; width: 20px; height: 20px; margin-top: 1px; border-radius: 6px; background: var(--primary-soft); color: var(--primary); font-size: 11px; font-weight: 700; text-align: center; line-height: 20px; }
.cite-item .btn-link { flex: 0 0 auto; padding: 4px 10px; border: 1px solid var(--border-strong); border-radius: 6px; font-size: 12px; color: var(--primary); text-decoration: none; background: #fff; }
.cite-item .btn-link:hover { background: var(--primary-soft); }
/* 批次3a：分组表当前值/环比 + 引用排名 */
#ovGroupStats .ov-cur-val { font-weight: 600; color: #1e293b; }
#ovGroupStats .ov-trend { font-size: 12px; font-weight: 600; white-space: nowrap; }
#ovGroupStats .ov-trend.up { color: #16a34a; }
#ovGroupStats .ov-trend.down { color: #dc2626; }
#ovGroupStats .ov-trend.flat { color: #94a3b8; }
.cite-count { display: inline-block; margin-left: 8px; font-size: 11px; font-weight: 600; color: var(--primary); background: var(--primary-soft); border: 1px solid rgba(98, 41, 255, 0.18); border-radius: 999px; padding: 2px 8px; vertical-align: 1px; }
@media (max-width: 900px) {
  .kpi-grid { grid-template-columns: 1fr; gap: 12px; }
  .ov-groups-wrap { grid-template-columns: 1fr; }
}

/* ---------- 用户提问 · 分组展开表格（对标腾讯企点 GEO「用户提问/prompts」页） ---------- */
.q-board-header { display: flex; flex-wrap: wrap; gap: 12px; align-items: flex-start; justify-content: space-between; margin-bottom: 12px; }
.q-board-sub { font-size: 12px; color: var(--muted); margin-top: 2px; }
.q-board-toolbar { display: flex; flex-wrap: wrap; gap: 8px; align-items: center; }
.q-board-toolbar input { width: 220px; }
.q-board-toolbar select { max-width: 170px; }
.q-board-table { width: 100%; border-collapse: collapse; table-layout: fixed; }
.q-board-table th { font-size: 12px; color: var(--muted); font-weight: 600; text-align: center; padding: 8px 6px; border-bottom: 1px solid var(--border-strong); white-space: nowrap; }
.q-board-table td { padding: 7px 6px; border-bottom: 1px solid var(--border); vertical-align: middle; font-size: 13px; }
.q-center { text-align: center; }
.q-group-row td { background: var(--card-soft); cursor: pointer; }
.q-group-row.open td { border-bottom: none; }
.q-caret { width: 22px; height: 22px; padding: 0; background: transparent !important; border: none !important; box-shadow: none !important; color: var(--muted) !important; font-size: 11px; line-height: 1; transform: rotate(0deg); transition: transform .15s; }
.q-caret.open { transform: rotate(90deg); color: var(--primary) !important; }
.q-group-name { display: flex; flex-wrap: wrap; align-items: center; gap: 10px; min-height: 30px; }
.q-gname { font-weight: 700; color: var(--text); }
.q-gstat { font-size: 12px; color: var(--muted); }
.q-gtime { font-size: 11px; color: #94a3b8; margin-left: auto; }
.q-gops { display: inline-flex; gap: 6px; }
.q-q-row td { background: #fff; }
.q-qtext { font-weight: 600; color: var(--text); display: flex; align-items: center; gap: 6px; flex-wrap: wrap; }
.q-qqsub { font-size: 11px; color: var(--muted); margin-top: 2px; }
.q-empty { color: #cbd5e1; font-size: 13px; }
.q-sub { font-size: 11px; color: #94a3b8; display: block; font-weight: 400; }
.q-created { line-height: 1.35; }
.pchip { display: inline-flex; align-items: center; justify-content: center; width: 20px; height: 20px; margin: 0 1px; border-radius: 50%; background: var(--pc, #64748b); color: #fff; font-size: 10px; font-weight: 700; }
.pcount { font-size: 10px; color: var(--muted); margin-right: 5px; }
.pmore { font-size: 10px; color: var(--primary); margin-left: 2px; }
.spark { vertical-align: middle; }
.spark-txt { font-size: 10px; color: #94a3b8; margin-left: 4px; }
.q-switch { position: relative; display: inline-block; width: 40px; height: 22px; }
.q-switch input { opacity: 0; width: 0; height: 0; }
.q-switch span { position: absolute; inset: 0; background: #e2e8f0; border-radius: 999px; transition: .2s; cursor: pointer; }
.q-switch span::before { content: ""; position: absolute; width: 16px; height: 16px; left: 3px; top: 3px; background: #fff; border-radius: 50%; transition: .2s; box-shadow: 0 1px 3px rgba(0,0,0,.25); }
.q-switch input:checked + span { background: var(--primary, var(--primary)); }
.q-switch input:checked + span::before { transform: translateX(18px); }
/* 批次3/4：提问批量操作（复选框 + 工具条） */
.q-row-check { width: 15px; height: 15px; accent-color: var(--primary, var(--primary)); cursor: pointer; }
.q-batch-btn { white-space: nowrap; }
.q-batch-count { font-size: 12px; color: var(--muted); margin-left: 2px; }
.q-batch-btn:disabled { opacity: .55; cursor: not-allowed; }
.q-modal .q-modal-box .msg.info { color: var(--primary); background: var(--primary-soft); }
.q-ops { white-space: nowrap; }
.q-ops .mini { margin-right: 2px; }
.q-more { display: inline-flex; gap: 4px; margin-top: 4px; }
.q-pager { display: flex; align-items: center; gap: 10px; justify-content: flex-end; font-size: 12px; color: var(--muted); padding: 6px 0; }
.mini { padding: 3px 8px; font-size: 12px; border-radius: 6px; }
.q-modal { position: fixed; inset: 0; z-index: 1200; background: rgba(15, 23, 42, .45); display: flex; align-items: center; justify-content: center; padding: 16px; }
.q-modal-box { background: #fff; border-radius: 14px; box-shadow: 0 20px 60px rgba(15, 23, 42, .3); width: 100%; max-width: 480px; padding: 20px 22px; }
.q-modal-box h3 { margin: 0 0 10px; }
@media (max-width: 900px) {
  .q-board-toolbar { width: 100%; }
  .q-board-toolbar input { flex: 1 1 100%; width: 100%; }
  .q-gtime { display: none; }
}
@media (max-width: 480px) {
  .q-board-table th, .q-board-table td { padding: 6px 4px; }
  .q-board-toolbar input { width: 100%; }
  .q-board-toolbar select { flex: 1 1 auto; }
  .q-gstat { width: 100%; }
}

/* ---------- 大模型回答记录（对标腾讯企点 GEO「大模型回答记录」页） ---------- */
#consoleApp .ans-tabs { display: flex; flex-wrap: nowrap; gap: 8px; overflow-x: auto; padding: 2px 0 10px; border-bottom: 1px solid var(--border); margin-bottom: 12px; }
#consoleApp .ans-tab { display: inline-flex; align-items: center; gap: 6px; padding: 7px 14px; border: 1px solid var(--border-strong); border-radius: 999px; background: #fff; color: var(--text-2); font-size: 13px; cursor: pointer; white-space: nowrap; transition: all .15s; }
#consoleApp .ans-tab:hover { border-color: var(--primary); color: var(--primary); background: var(--primary-soft); }
#consoleApp .ans-tab.active { border-color: var(--primary); color: var(--primary); background: var(--primary-soft); font-weight: 700; box-shadow: inset 0 -2px 0 var(--primary); }
#consoleApp .ans-badge { display: inline-flex; align-items: center; justify-content: center; min-width: 20px; height: 20px; padding: 0 6px; border-radius: 999px; background: var(--primary); color: #fff; font-size: 11px; font-weight: 700; }
#consoleApp .ans-body .ans-split { display: grid; grid-template-columns: minmax(320px, 42%) 1fr; gap: 14px; align-items: start; }
#consoleApp .ans-list { display: flex; flex-direction: column; gap: 8px; max-height: 72vh; overflow-y: auto; padding-right: 4px; }
#consoleApp .ans-item { padding: 10px 12px; border: 1px solid var(--border); border-radius: 10px; background: #fff; cursor: pointer; transition: all .15s; }
#consoleApp .ans-item:hover { border-color: var(--primary); box-shadow: 0 2px 8px rgba(98, 41, 255, .08); }
#consoleApp .ans-item.active { border-color: var(--primary); background: var(--primary-soft); box-shadow: inset 3px 0 0 var(--primary); }
#consoleApp .ans-item-q { font-size: 13px; font-weight: 600; color: var(--text); line-height: 1.5; display: -webkit-box; -webkit-line-clamp: 2; -webkit-box-orient: vertical; overflow: hidden; }
#consoleApp .ans-item-meta { display: flex; flex-wrap: wrap; align-items: center; gap: 6px; margin-top: 6px; font-size: 12px; }
#consoleApp .ans-time { font-size: 11px; color: #94a3b8; }
#consoleApp .ans-ic { font-size: 11px; color: var(--primary); background: var(--primary-soft); padding: 1px 7px; border-radius: 999px; }
#consoleApp .ans-detail { border: 1px solid var(--border); border-radius: 12px; background: #fff; padding: 16px; box-shadow: 0 1px 4px rgba(15, 23, 42, .05); }
#consoleApp .ans-model-chip { display: inline-flex; align-items: center; padding: 3px 11px; border-radius: 999px; background: var(--ac, #64748b); color: #fff; font-size: 12px; font-weight: 700; }
#consoleApp .ans-question { font-size: 15px; font-weight: 700; color: var(--text); margin: 10px 0 8px; line-height: 1.55; }
#consoleApp .ans-intent-row { display: flex; flex-wrap: wrap; gap: 6px; margin-bottom: 10px; }
#consoleApp .ans-answer { border-top: 1px dashed var(--border); padding: 10px 0; }
#consoleApp .ans-answer h4, #consoleApp .ans-cites h4 { margin: 0 0 8px; font-size: 13px; color: #0f172a; }
#consoleApp .ans-answer p { margin: 0; font-size: 13.5px; line-height: 1.8; color: #334155; white-space: pre-wrap; word-break: break-word; }
#consoleApp .ans-cites { border-top: 1px dashed var(--border); padding-top: 10px; }
#consoleApp .ans-pager { justify-content: space-between; align-items: center; margin-top: 12px; font-size: 13px; color: var(--muted); }
/* ---- 批次4：详情面板对齐企点（分组列表 / 曝光分数 / 关键词 / 来源折叠 / 回答正文） ---- */
#consoleApp .ans-group { margin-bottom: 10px; }
#consoleApp .ans-group-head { display: flex; align-items: center; gap: 8px; padding: 4px 2px 6px; border-bottom: 1px solid var(--border); font-size: 12px; }
#consoleApp .ans-group-q { flex: 1; min-width: 0; font-weight: 700; color: #0f172a; font-size: 13px; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
#consoleApp .ans-group .ans-item { margin-left: 14px; padding: 7px 10px; }
#consoleApp .ans-group .ans-item-q { display: none; }
#consoleApp .ans-model-chip.mini { padding: 2px 9px; font-size: 11px; }
#consoleApp .ans-score { display: flex; align-items: center; gap: 14px; border: 1px solid var(--border); border-radius: 10px; padding: 12px 14px; margin: 10px 0; background: linear-gradient(135deg, var(--primary-soft), #fff); }
#consoleApp .ans-score.zero { background: #f8fafc; border-color: var(--border); }
#consoleApp .ans-score-num { display: flex; align-items: baseline; gap: 2px; flex: 0 0 auto; }
#consoleApp .ans-score-num b { font-size: 32px; line-height: 1; color: var(--primary); }
#consoleApp .ans-score-num span { font-size: 12px; color: #94a3b8; }
#consoleApp .ans-score.zero .ans-score-num b { color: #cbd5e1; }
#consoleApp .ans-score-bar-wrap { flex: 1; min-width: 0; }
#consoleApp .ans-score-bar { height: 8px; border-radius: 999px; background: #e2e8f0; overflow: hidden; }
#consoleApp .ans-score-bar > div { height: 100%; background: var(--primary); border-radius: 999px; transition: width .4s; }
#consoleApp .ans-score.zero .ans-score-bar > div { background: #e2e8f0; }
#consoleApp .ans-score-label { margin-top: 5px; font-size: 12px; color: #64748b; }
#consoleApp .ans-kw { border: 1px dashed var(--border-strong); border-radius: 10px; padding: 10px 12px; margin: 10px 0; }
#consoleApp .ans-kw-title { font-size: 13px; font-weight: 700; color: #0f172a; margin-bottom: 8px; }
#consoleApp .ans-kw-row { display: flex; flex-wrap: wrap; gap: 8px; margin-bottom: 6px; }
#consoleApp .ans-kw-stat { font-size: 12px; font-weight: 700; color: var(--primary); background: var(--primary-soft); padding: 3px 10px; border-radius: 999px; }
#consoleApp .kw-tag { display: inline-block; margin: 3px 6px 3px 0; padding: 3px 10px; border: 1px solid var(--border-strong); border-radius: 999px; font-size: 12px; color: #334155; background: #fff; }
#consoleApp .ans-block-title { font-size: 13px; font-weight: 700; color: #0f172a; margin: 0 0 6px; }
#consoleApp .cite-title { font-size: 13px; font-weight: 600; color: var(--text); overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
#consoleApp .cite-sub { font-size: 12px; color: #94a3b8; margin-top: 2px; }
#consoleApp .cite-item.collapsed .cite-sub { display: none; }
#consoleApp .cite-toggle { flex: 0 0 auto; padding: 3px 10px; border: 1px solid var(--border-strong); border-radius: 6px; background: #fff; color: #64748b; font-size: 12px; cursor: pointer; }
#consoleApp .cite-toggle:hover { border-color: var(--primary); color: var(--primary); background: var(--primary-soft); }
#consoleApp .ans-answer-head { background: #0f172a; color: #fff; padding: 10px 14px; font-size: 14px; font-weight: 700; border-radius: 8px 8px 0 0; }
#consoleApp .ans-answer-body { padding: 12px 14px; background: #f8fafc; border: 1px solid var(--border); border-top: none; border-radius: 0 0 8px 8px; }
#consoleApp .ans-ul { margin: 0; padding-left: 20px; }
#consoleApp .ans-ul li { font-size: 13.5px; line-height: 1.8; color: #334155; }
#consoleApp .ans-answer-body p { white-space: pre-wrap; word-break: break-word; }
#consoleApp .ans-compare { background: #fffbeb; border-color: #fcd34d; }
#consoleApp .ans-answer-body.more { max-height: 260px; overflow: hidden; position: relative; }
#consoleApp .ans-answer-body.more::after { content: ''; position: absolute; left: 0; right: 0; bottom: 0; height: 56px; background: linear-gradient(transparent, #f8fafc); pointer-events: none; }
#consoleApp .ans-answer-body.expanded { max-height: none; overflow: visible; }
#consoleApp .ans-answer-body.expanded::after { display: none; }
#consoleApp .ans-more { width: 100%; margin-top: 6px; padding: 8px; border: 1px solid var(--border-strong); border-radius: 8px; background: #fff; color: var(--primary); font-size: 13px; font-weight: 600; cursor: pointer; }
#consoleApp .ans-more:hover { background: var(--primary-soft); }
#consoleApp .ans-more .caret { font-size: 11px; }
@media (max-width: 900px) {
  #consoleApp .ans-body .ans-split { grid-template-columns: 1fr; }
  #consoleApp .ans-list { max-height: 42vh; }
  #consoleApp .ans-tabs { flex-wrap: nowrap; }
}
@media (max-width: 480px) {
  #consoleApp .ans-tab { padding: 6px 10px; font-size: 12px; }
  #consoleApp .ans-detail { padding: 12px; }
}

/* ---- 修复：q-modal 常驻遮罩拦截点击（.hidden 与 .q-modal 特异性相同、后者后加载覆盖前者）；高优先级强制隐藏，恢复「创建提问/新建分组/创建」按钮首次点击 ---- */
.q-modal.hidden { display: none !important; }

/* ---- 品牌管理聚合页（批次5/5） ---- */
.bmg-tabs { display:flex; gap:8px; margin:16px 0; background:#fff; border:1px solid #e2e8f0; border-radius:12px; padding:4px; width:fit-content; }
.bmg-tab { padding:8px 18px; border:none; background:transparent; border-radius:8px; font-size:14px; color:var(--text-2); cursor:pointer; }
.bmg-tab:hover { background:var(--neutral-soft); }
.bmg-tab.active { background:var(--primary); color:#fff; font-weight:600; }
.bmg-card .bmg-card-head { display:flex; align-items:center; justify-content:space-between; margin-bottom:14px; }
.bmg-card .bmg-card-head h2 { margin:0; }
.bmg-grid { display:grid; grid-template-columns:repeat(auto-fill,minmax(180px,1fr)); gap:14px; }
.bmg-field { background:#f8fafc; border:1px solid #e2e8f0; border-radius:10px; padding:10px 12px; }
.bmg-label { font-size:12px; color:#64748b; margin-bottom:4px; }
.bmg-value { font-size:15px; font-weight:600; color:#0f172a; }
.bmg-row { display:flex; align-items:center; justify-content:space-between; gap:12px; background:#f8fafc; border:1px solid #e2e8f0; border-radius:10px; padding:12px 14px; margin-top:14px; }
.bmg-switch { position:relative; display:inline-block; width:44px; height:24px; flex:none; }
.bmg-switch input { opacity:0; width:0; height:0; }
.bmg-slider { position:absolute; inset:0; background:#cbd5e1; border-radius:24px; transition:.2s; }
.bmg-slider:before { content:''; position:absolute; width:18px; height:18px; left:3px; top:3px; background:#fff; border-radius:50%; transition:.2s; }
.bmg-switch input:checked + .bmg-slider { background:var(--primary); }
.bmg-switch input:checked + .bmg-slider:before { transform:translateX(20px); }
.bmg-metric { display:flex; align-items:baseline; gap:6px; padding:10px 0 14px; border-bottom:1px solid #e2e8f0; margin-bottom:12px; }
.bmg-num { font-size:26px; font-weight:700; color:var(--primary); }
.bmg-sep { font-size:20px; color:#94a3b8; }
.bmg-mlab { font-size:13px; color:#64748b; margin-left:8px; }
.bmg-table { width:100%; border-collapse:collapse; font-size:14px; }
.bmg-table th { text-align:left; padding:9px 10px; border-bottom:1px solid #e2e8f0; color:#64748b; font-weight:600; font-size:12px; }
.bmg-table td { padding:9px 10px; border-bottom:1px solid var(--neutral-soft); }
.bmg-admin-badge { display:inline-block; background:var(--accent-soft); color:var(--primary); border-radius:999px; padding:2px 10px; font-size:12px; font-weight:600; }
.bmg-member-count { font-size:13px; color:#64748b; }
.bmg-tag { display:inline-block; background:#FFF7ED; color:#D97706; border-radius:999px; padding:2px 10px; font-size:12px; margin-left:8px; }
.bmg-freq { font-size:18px; font-weight:700; color:#0f172a; }
.bmg-editbox { display:flex; gap:8px; align-items:center; margin-top:10px; }

/* ===== 批次2/4：操作审计 + 计量中心 ===== */
.quota-grid { display: grid; grid-template-columns: repeat(auto-fill, minmax(240px, 1fr)); gap: 16px; margin-bottom: 16px; }
.qcard { display: flex; flex-direction: column; gap: 10px; padding: 18px 20px; }
.qcard-head { display: flex; justify-content: space-between; align-items: center; }
.qcard-label { font-size: 14px; font-weight: 600; color: var(--text, #0f172a); }
.qcard-level { font-size: 12px; font-weight: 600; padding: 2px 10px; border-radius: 999px; }
.qcard-nums { font-size: 14px; color: #64748b; }
.qcard-nums b { font-size: 26px; color: var(--text, #0f172a); margin-right: 3px; }
.qbar { height: 8px; border-radius: 999px; background: #eef2f7; overflow: hidden; }
.qbar-fill { height: 100%; border-radius: 999px; transition: width .3s; }
.qcard-foot { display: flex; justify-content: space-between; font-size: 12px; color: #94a3b8; }

/* ===== 批次4/4：三步极速上手引导 + AnswerBit Agent（BETA） ===== */
.side-beta { display:inline-block; margin-left:6px; font-size:10px; font-weight:700; color:#fff; background:linear-gradient(135deg,#334155,#475569); border-radius:999px; padding:1px 6px; vertical-align:2px; letter-spacing:.3px; }
.side-extra { width:100%; margin:4px 0 6px; padding:6px 10px; border:1px dashed #cbd5e1; border-radius:8px; background:transparent; color:#64748b; font-size:12px; cursor:pointer; text-align:left; }
.side-extra:hover { border-color:#334155; color:#334155; background:#f1f5f9; }
.beta-badge { display:inline-block; font-size:11px; font-weight:700; color:#fff; background:linear-gradient(135deg,var(--primary),#8b5cf6); border-radius:999px; padding:2px 8px; vertical-align:3px; letter-spacing:.4px; }

/* Onboarding 引导条 */
.ov-onboard { border:1px solid #e0e7ff; background:linear-gradient(180deg,#f8f9ff,#ffffff); padding:16px 18px; }
.ov-onb-head { display:flex; justify-content:space-between; align-items:flex-start; gap:12px; flex-wrap:wrap; }
.ov-onb-title { margin:0 0 4px; font-size:16px; font-weight:700; color:var(--text,#0f172a); }
.ov-onb-sub { font-size:12px; color:#64748b; }
.ov-onb-progress { color:#334155; font-size:13px; }
.ov-onb-actions { display:flex; gap:8px; }
#consoleApp .ov-onb-actions .mini:not(.secondary) { background:#1e293b !important; border-color:#1e293b !important; color:#fff !important; }
#consoleApp .ov-onb-actions .mini:not(.secondary):hover { background:#334155 !important; }
.ov-onb-steps { display:grid; grid-template-columns:repeat(3,1fr); gap:12px; margin-top:14px; }
.ov-onb-step { display:flex; align-items:flex-start; gap:10px; padding:12px; border:1px solid #e2e8f0; border-radius:10px; background:#fff; }
.ov-onb-step.done { border-color:#c7f9d9; background:#f2fef6; }
.ov-onb-idx { flex:none; width:24px; height:24px; border-radius:999px; background:#1e293b; color:#fff; font-size:13px; font-weight:700; display:flex; align-items:center; justify-content:center; }
.ov-onb-step.done .ov-onb-idx { background:#10b981; }
.ov-onb-body { flex:1; min-width:0; }
.ov-onb-body b { font-size:13px; color:var(--text,#0f172a); }
.ov-onb-body p { margin:4px 0 0; font-size:12px; line-height:1.6; color:#64748b; }
.ov-onb-step .mini { flex:none; margin-top:2px; }

/* Agent 六维诊断页 */
.agent-wrap { display:grid; grid-template-columns:minmax(300px,360px) 1fr; gap:16px; align-items:start; }
.agent-panel .ov-f-item { display:flex; flex-direction:column; gap:6px; margin:0; }
.agent-panel .ov-f-item span { font-size:12px; color:#64748b; }
.agent-result { min-height:320px; }
.agent-summary-row { display:flex; gap:16px; align-items:center; padding:12px 14px; border-radius:10px; background:#f8f9ff; border:1px solid #e0e7ff; margin-bottom:14px; }
.agent-summary-score { flex:none; text-align:center; }
.agent-summary-score b { font-size:28px; color:var(--primary); }
.agent-summary-score span { display:block; font-size:12px; color:#64748b; }
.agent-summary-text { flex:1; min-width:0; }
.agent-summary-text p { margin:6px 0 0; font-size:13px; line-height:1.7; color:#334155; }
.agent-grid { display:grid; grid-template-columns:repeat(2,1fr); gap:12px; }
.agent-dim { padding:14px; border:1px solid #e2e8f0; border-radius:10px; background:#fff; }
.agent-dim-head { display:flex; justify-content:space-between; align-items:center; margin-bottom:8px; }
.agent-dim-name { font-size:14px; font-weight:700; color:var(--text,#0f172a); }
.agent-dim-score { font-size:12px; color:#94a3b8; }
.agent-dim-score b { font-size:22px; color:var(--text,#0f172a); }
.agent-dim-bar { height:8px; border-radius:999px; background:#eef2f7; overflow:hidden; margin:6px 0 10px; }
.agent-dim-bar i { display:block; height:100%; border-radius:999px; background:linear-gradient(90deg,var(--primary),#8b5cf6); }
.agent-dim-concl { font-size:12px; line-height:1.7; color:var(--text-2); margin-bottom:8px; }
.agent-dim-sug { margin:0; padding-left:16px; }
.agent-dim-sug li { font-size:12px; line-height:1.7; color:#64748b; margin-bottom:2px; }
@media (max-width:1100px) {
  .ov-onb-steps { grid-template-columns:1fr; }
  .agent-wrap { grid-template-columns:1fr; }
  .agent-grid { grid-template-columns:1fr; }
}

/* 批次3b：概览页引用域名排行榜 */
.ov-rank-head { display:flex; justify-content:space-between; align-items:flex-start; gap:12px; margin-bottom:10px; }
.ov-rank-head h2 { margin:0; }
.ov-rank-sub { font-size:12px; color:var(--text-2,#7d7f82); margin-top:2px; }
.ov-rank-all { flex:none; font-size:13px; color:var(--primary,#6229ff); text-decoration:none; font-weight:600; padding-top:4px; }
.ov-rank-all:hover { text-decoration:underline; }
.ov-rank-bar { height:8px; border-radius:999px; background:#eef2ff; overflow:hidden; }
.ov-rank-bar-fill { height:100%; border-radius:999px; background:linear-gradient(90deg,var(--primary,#6229ff),#8b5cf6); }

/* ---------- 用户管理（批次2）：会员体系前端 ---------- */
.q-modal-box.wide { max-width: 760px; }
.ud-info { display: grid; grid-template-columns: 1fr 1fr; gap: 8px 18px; font-size: 13px; margin: 10px 0 4px; }
.ud-info > div { display: flex; align-items: baseline; gap: 8px; }
.ud-info .k { color: #64748b; min-width: 72px; flex: 0 0 auto; }
.ud-stats { display: grid; grid-template-columns: repeat(auto-fit, minmax(118px, 1fr)); gap: 10px; margin: 12px 0 6px; }
.ud-stat { background: #f8fafc; border: 1px solid #e2e8f0; border-radius: 10px; padding: 10px 12px; }
.ud-stat b { display: block; font-size: 18px; color: #0f172a; line-height: 1.3; }
.ud-stat span { font-size: 12px; color: #64748b; }
#userNewPwd { font-family: ui-monospace, Consolas, monospace; font-size: 14px; background: #f1f5f9; border: 1px dashed #cbd5e1; border-radius: 8px; padding: 10px 12px; word-break: break-all; }
.u-ops .mini { margin: 1px 2px 1px 0; }

/* 会员级别与权限/数据隔离前端（批次2） */
.lv-tags { display: flex; flex-wrap: wrap; gap: 6px; }
.lv-tag { font-size: 12px; padding: 2px 8px; border-radius: 10px; background: #eef1f6; color: #5b6472; }
.lv-tag.on { background: #e3f2e4; color: #2e7d32; }
.lv-tag.off { background: #fdecea; color: #b71c1c; }
.perm-box { max-height: 260px; overflow: auto; border: 1px solid #e2e6ee; border-radius: 8px; padding: 10px; margin: 6px 0 10px; }
.perm-block { border: 1px solid #e2e6ee; border-radius: 8px; padding: 10px 12px; margin-bottom: 10px; }
.perm-block-title { font-weight: 600; font-size: 13px; margin-bottom: 6px; color: #4a5363; }
.perm-grid { display: grid; grid-template-columns: repeat(auto-fill, minmax(180px, 1fr)); gap: 6px 12px; }
.perm-check { display: flex; align-items: center; gap: 6px; font-size: 13px; padding: 3px 0; cursor: pointer; }

/* ---------- 会员体系批次2：徽章变体 / 空提示 / 迷你操作 ---------- */
.badge.ok, .badge.success { background: var(--success-soft, #e3f2e4) !important; color: var(--success, #2e7d32) !important; }
.badge.err, .badge.fail { background: var(--danger-soft, #fdecea) !important; color: var(--danger, #b71c1c) !important; }
.badge.warn, .badge.hf { background: var(--warning-soft, #fef3c7) !important; color: var(--warning, #b45309) !important; }
.badge.info { background: var(--info-soft, #e0f2fe) !important; color: var(--info, #0369a1) !important; }
.badge.neutral { background: var(--neutral-soft, #eef1f6) !important; color: var(--text-2, #5b6472) !important; }
.badge { display: inline-block; padding: 2px 10px; border-radius: 999px; font-size: 12px; }
.empty-tip { display: block; text-align: center; padding: 22px 10px; color: #94a3b8; font-size: 13px; }
.u-ops { display: flex; flex-wrap: wrap; gap: 6px; align-items: center; }
button.mini { font-size: 12px; padding: 3px 10px; border-radius: 6px; border: 1px solid #d8dee8; background: #fff; color: #3c4a5e; cursor: pointer; }
button.mini:hover { border-color: var(--primary, #6229ff); color: var(--primary, #6229ff); }
button.mini.danger { color: #d03050; border-color: #f3c6d0; }
button.mini.danger:hover { background: #fdeef1; border-color: #d03050; }
button.mini.ok { color: #2e7d32; border-color: #bfe3c2; }
button.mini.ok:hover { background: #eef7ee; border-color: #2e7d32; }
