/* 筑智通平台 — 设计系统（PC 端） */
:root {
  --brand: #1e5eff;
  --brand-dark: #1447cc;
  --brand-light: #eaf1ff;
  --accent: #00b578;
  --warn: #f59e0b;
  --danger: #e5484d;
  /* v1.17.0：--warn(#f59e0b) 白底对比度仅 2.13，只能用于填充/边框/图形，不能当文字色。
     此前 datasets 的「额度不足」提示、bigdata 的等级按钮文字都直接用了 --warn，
     实测 1.89~2.13，属"几乎看不清"。补一个同色系的文字色：
     #b45309 在纯白底是 4.99，但卡片底色非纯白时实测掉到 4.43，差 0.07 够不着 4.5；
     故取 #92400e（纯白 7.06、浅灰卡片底亦 >6.5），留足余量，与价格指数页警告色一致。 */
  --warn-ink: #92400e;

  --ink-1: #0f172a;
  --ink-2: #334155;
  /* v1.16.11 对比度：原 --ink-4 (#94a3b8) 在白底上仅 2.54，说明文字普遍看不清。
     整体下压一档：--ink-3 5.8、--ink-4 4.76，均满足 WCAG AA，同时保留层级差。 */
  --ink-3: #4b5b73;
  --ink-4: #5e6e86;

  --bg: #f4f6fb;
  --surface: #ffffff;
  --surface-2: #f8fafc;
  --border: #e2e8f0;
  --border-strong: #cbd5e1;

  /* v1.15.0 补齐：视图层大量使用 var(--muted)/var(--line)/var(--ok)，此前从未定义，
     导致辅助文字回退为正文色、边框颜色失效——页面视觉层级混乱的直接原因。 */
  --muted: #4b5b73;      /* 同 --ink-3，辅助文字 */
  --line: #e2e8f0;       /* 同 --border，分隔线/边框 */
  --ok: #00b578;         /* 同 --accent */
  --brand-soft: #eaf1ff; /* 同 --brand-light，选中态底色 */

  --radius: 10px;
  --radius-sm: 6px;
  --shadow: 0 1px 3px rgba(15, 23, 42, .06), 0 8px 24px rgba(15, 23, 42, .05);
  --shadow-lg: 0 12px 40px rgba(15, 23, 42, .12);
  --sidebar-w: 250px;
  --header-h: 60px;
}

* { box-sizing: border-box; margin: 0; padding: 0; }

body {
  font-family: "PingFang SC", "Microsoft YaHei", "Segoe UI", system-ui, sans-serif;
  background: var(--bg);
  color: var(--ink-1);
  font-size: 14px;
  line-height: 1.6;
  -webkit-font-smoothing: antialiased;
}

a { color: inherit; text-decoration: none; }
button { font-family: inherit; cursor: pointer; border: none; background: none; }
input, select, textarea { font-family: inherit; font-size: 14px; }
/* v1.20.2：下拉展开后选项文字不贴左（原生 option 默认无内边距） */
select option { padding: 7px 12px; font-size: 13.5px; }
table { border-collapse: collapse; width: 100%; }

/* ============ 布局 ============ */
.layout { display: flex; min-height: 100vh; }

.sidebar {
  width: var(--sidebar-w);
  background: #0f1c3d;
  color: #cbd5e1;
  display: flex; flex-direction: column;
  position: fixed; top: 0; bottom: 0; left: 0; z-index: 50;
}
/* v1.20.2：侧边栏滚动条与深蓝底融合（此前默认亮灰滚动条很突兀） */
.sidebar::-webkit-scrollbar { width: 6px; }
.sidebar::-webkit-scrollbar-track { background: transparent; }
.sidebar::-webkit-scrollbar-thumb { background: rgba(255,255,255,.14); border-radius: 999px; }
.sidebar::-webkit-scrollbar-thumb:hover { background: rgba(255,255,255,.26); }
.sidebar { scrollbar-width: thin; scrollbar-color: rgba(255,255,255,.14) transparent; }
.sidebar-brand {
  height: var(--header-h); display: flex; align-items: center; gap: 10px;
  padding: 0 18px; border-bottom: 1px solid rgba(255,255,255,.08);
}
/* v1.38.2：品牌区比例调优——盾徽放大、中文加重、英文小字弱化衬底 */
.sidebar-logo-img {
  width: 42px; height: 42px; border-radius: 11px; flex-shrink: 0;
  object-fit: cover; background: #071f43; display: block;
}
.sidebar-brand b { color: #fff; font-size: 19px; letter-spacing: 1px; line-height: 1.2; }
.sidebar-brand small { display: block; font-size: 9.5px; color: #7f97c4; letter-spacing: 3.5px; margin-top: 2px; }

.nav { flex: 1; overflow-y: auto; padding: 12px 10px 20px; }
.nav-group { margin-bottom: 16px; }
.nav-group-title {
  font-size: 12px; color: #475569; padding: 0 10px 6px;
  letter-spacing: 1.2px; font-weight: 600;
}
.nav-item {
  display: flex; align-items: center; gap: 10px;
  padding: 9px 10px; border-radius: 8px; font-size: 13.5px;
  color: #cbd5e1; margin-bottom: 2px; transition: .15s; cursor: pointer;
}
.nav-item:hover { background: rgba(255,255,255,.06); color: #fff; }
.nav-item.active { background: var(--brand); color: #fff; font-weight: 500; }
/* v1.19.1 修复侧栏"串行"：长菜单名 + NEW/角标并存时文本被挤换行。
 * 文本占满剩余宽度、禁止换行、放不下省略；右侧胶囊不可压缩。 */
.nav-item .nav-label {
  flex: 1; min-width: 0;
  white-space: nowrap; overflow: hidden; text-overflow: ellipsis;
}
.nav-item .tag { flex-shrink: 0; padding: 1px 7px; }
.nav-item .ico { width: 18px; text-align: center; font-size: 15px; flex-shrink: 0; }
.nav-item .badge {
  margin-left: auto; background: #c8323a; color: #fff;
  /* v1.17.0：10px 是全站最后一个低于 12px 的文本，审计每页都会命中。提到 12px。 */
  font-size: 12px; padding: 1px 7px; border-radius: 9px; font-weight: 600;
}

.main { flex: 1; margin-left: var(--sidebar-w); display: flex; flex-direction: column; }

.header {
  height: var(--header-h); background: var(--surface);
  border-bottom: 1px solid var(--border);
  display: flex; align-items: center; padding: 0 24px; gap: 16px;
  position: sticky; top: 0; z-index: 40;
}
.header h1 { font-size: 17px; font-weight: 600; }
.header-sub { font-size: 12px; color: var(--ink-3); font-weight: 400; margin-left: 8px; }
.header-spacer { flex: 1; }

.search-box {
  display: flex; align-items: center; gap: 8px;
  background: var(--surface-2); border: 1px solid var(--border);
  border-radius: 20px; padding: 6px 14px; width: 300px;
}
.search-box input { border: none; background: none; outline: none; flex: 1; font-size: 13px; }

.user-chip {
  display: flex; align-items: center; gap: 9px; padding: 5px 10px 5px 5px;
  border-radius: 20px; cursor: pointer; transition: .15s;
}
.user-chip:hover { background: var(--surface-2); }
.avatar {
  width: 30px; height: 30px; border-radius: 50%; color: #fff;
  /* v1.16.9 兜底底色：此前依赖调用处传 inline background，一旦缺失就是"白字白底"看不见 */
  background: var(--brand);
  display: grid; place-items: center; font-size: 12px; font-weight: 600; flex-shrink: 0;
}
/* v1.16.9 侧栏分组标题：原 #475569 深灰在深色侧栏上对比度仅 2.21，几乎不可见 */
.sidebar .nav-group-title { color: #93a9cc; font-size: 12px; letter-spacing: 1px; }
.user-chip-name { font-size: 13px; font-weight: 500; }
.user-chip-role { font-size: 12px; color: var(--ink-3); }

.content { padding: 22px 24px 40px; flex: 1; }

/* ============ 通用组件 ============ */
.card {
  background: var(--surface); border: 1px solid var(--border);
  border-radius: var(--radius); box-shadow: var(--shadow);
}
.card-head {
  padding: 14px 18px; border-bottom: 1px solid var(--border);
  display: flex; align-items: center; gap: 10px;
}
.card-head h3 { font-size: 15px; font-weight: 600; }
/* v1.16.5 图标彩色化：卡片标题里的线性图标统一品牌蓝，与墨色标题形成层次 */
.card-head h3 svg { stroke: var(--brand); }
.card-head .sub { font-size: 12px; color: var(--ink-3); }
.card-body { padding: 18px; }
/* v1.26.1：card() 只把构造参数放进 .card-body，此后视图对卡片根的追加
   （筛选芯片行、搜索框等）会成为 .card 的直接子节点 —— 无任何内边距，
   筛选行贴死卡片左右与底边（用户反馈「下面没有空间」）。
   这里统一给这类游离在 .card-body 之后的子元素补上与 card-body 一致的边距；
   只匹配「后面跟着 .card-body 兄弟」的节点，手工拼的卡片（无 .card-body）不受影响。 */
.card > .card-body ~ * { margin-left: 18px; margin-right: 18px; }
.card > .card-body ~ :last-child { margin-bottom: 18px; }

.btn {
  display: inline-flex; align-items: center; gap: 6px; justify-content: center;
  padding: 8px 16px; border-radius: var(--radius-sm);
  font-size: 13.5px; font-weight: 500; transition: .15s;
  border: 1px solid var(--border-strong); background: var(--surface); color: var(--ink-2);
}
.btn:hover { border-color: var(--brand); color: var(--brand); }
.btn-primary { background: var(--brand); border-color: var(--brand); color: #fff; }
.btn-primary:hover { background: var(--brand-dark); border-color: var(--brand-dark); color: #fff; }
.btn-lg { padding: 11px 24px; font-size: 15px; }
.btn-sm { padding: 5px 11px; font-size: 12.5px; }
.btn-block { width: 100%; }
.btn:disabled { opacity: .5; cursor: not-allowed; }

.field { margin-bottom: 14px; }
.field label { display: block; font-size: 13px; color: var(--ink-2); margin-bottom: 6px; font-weight: 500; }
.field input, .field select, .field textarea {
  width: 100%; padding: 9px 12px; border: 1px solid var(--border);
  border-radius: var(--radius-sm); outline: none; transition: .15s; background: var(--surface);
}
.field input:focus, .field select:focus, .field textarea:focus {
  border-color: var(--brand); box-shadow: 0 0 0 3px rgba(30,94,255,.1);
}
.field textarea { resize: vertical; min-height: 84px; }

.tag {
  display: inline-flex; align-items: center; gap: 4px;
  padding: 2px 9px; border-radius: 11px; font-size: 12px;
  background: var(--surface-2); color: var(--ink-3); border: 1px solid var(--border);
}
.tag-brand { background: var(--brand-light); color: var(--brand); border-color: #c7d9ff; }
.tag-ok { background: #e6f9f1; color: #067a52; border-color: #b9ebd6; }
/* v1.16.17：「已入驻企业库」此前与「已核验」同为绿色，两个不同语义无法区分（用户反馈）。
   语义约定：绿 = 资质可信（核验态）；紫 = 平台身份（入驻态）。 */
.tag-violet { background: #f3efff; color: #6d28d9; border-color: #ddd0ff; }
/* v1.16.17：信用等级 chips——原生 <option> 无法着色，S/A/B/C 的语义色在卡片徽章上
   已建立，筛选器沿用同一套颜色（激活态由内联样式填充对应色）。 */
.lv-chip {
  border: 1px solid var(--border); background: var(--surface); color: var(--ink-2);
  font-size: 12px; padding: 2.5px 9px; border-radius: 999px; cursor: pointer;
  font-weight: 600; line-height: 1.5; transition: .15s;
}
.lv-chip:hover { border-color: var(--brand); color: var(--brand); }
.tag-warn { background: #fef3e2; color: #92400e; border-color: #fde3b3; }
.tag-danger { background: #fdecec; color: #b91c1c; border-color: #f8cfd0; }
.tag-dot::before { content: ''; width: 5px; height: 5px; border-radius: 50%; background: currentColor; }

.grid { display: grid; gap: 16px; }
.g2 { grid-template-columns: repeat(2, 1fr); }
.g3 { grid-template-columns: repeat(3, 1fr); }
.g4 { grid-template-columns: repeat(4, 1fr); }
.g5 { grid-template-columns: repeat(5, 1fr); }
.row { display: flex; gap: 12px; align-items: center; }
.row-wrap { display: flex; gap: 10px; flex-wrap: wrap; align-items: center; }
.spacer { flex: 1; }

.stat-card { padding: 16px 18px; display: flex; align-items: center; gap: 14px; }
.stat-ico {
  width: 42px; height: 42px; border-radius: 10px; display: grid; place-items: center;
  font-size: 20px; flex-shrink: 0;
}
.stat-num { font-size: 23px; font-weight: 700; line-height: 1.2; }
.stat-label { font-size: 12.5px; color: var(--ink-3); }

table.tbl th {
  text-align: left; padding: 10px 12px; background: var(--surface-2);
  font-size: 12.5px; color: var(--ink-3); font-weight: 600; border-bottom: 1px solid var(--border);
  white-space: nowrap;
}
table.tbl td { padding: 11px 12px; border-bottom: 1px solid var(--border); font-size: 13px; vertical-align: middle; }
table.tbl tr:last-child td { border-bottom: none; }
table.tbl tbody tr:hover { background: var(--surface-2); }
.diff-cell { background: #fff8e6 !important; font-weight: 600; color: #b45309; }

.empty { text-align: center; padding: 44px 20px; color: var(--ink-4); }
.empty-ico { font-size: 40px; margin-bottom: 10px; opacity: .5; }

.bar { height: 7px; background: var(--surface-2); border-radius: 4px; overflow: hidden; }
.bar > i { display: block; height: 100%; background: var(--brand); border-radius: 4px; transition: width .4s; }
.bar.ok > i { background: var(--accent); }
.bar.warn > i { background: var(--warn); }
.bar.danger > i { background: var(--danger); }

.spinner {
  width: 34px; height: 34px; border: 3px solid var(--border);
  border-top-color: var(--brand); border-radius: 50%; animation: spin .7s linear infinite;
}
@keyframes spin { to { transform: rotate(360deg); } }
.loading-box { display: grid; place-items: center; padding: 54px; }

.modal-mask {
  position: fixed; inset: 0; background: rgba(15,23,42,.5);
  display: grid; place-items: center; z-index: 100; padding: 20px;
}
.modal {
  background: var(--surface); border-radius: 12px; box-shadow: var(--shadow-lg);
  width: 100%; max-width: 640px; max-height: 86vh; overflow: auto;
}
.modal.wide { max-width: 940px; }
.modal-head { padding: 16px 20px; border-bottom: 1px solid var(--border); display: flex; align-items: center; }
.modal-head h3 { font-size: 16px; font-weight: 600; }
.modal-body { padding: 20px; }
.modal-foot { padding: 14px 20px; border-top: 1px solid var(--border); display: flex; gap: 10px; justify-content: flex-end; }
.close-x { margin-left: auto; font-size: 20px; color: var(--ink-4); line-height: 1; }
.close-x:hover { color: var(--ink-1); }

.toast-wrap { position: fixed; top: 18px; right: 18px; z-index: 200; display: flex; flex-direction: column; gap: 8px; }
.toast {
  background: var(--ink-1); color: #fff; padding: 11px 17px; border-radius: 8px;
  font-size: 13px; box-shadow: var(--shadow-lg); animation: slideIn .25s;
}
.toast.ok { background: var(--accent); }
.toast.err { background: var(--danger); }
/* v1.19.0：代码里实际传的是 'error' / 'warn'（共 25 处），而样式表只认 ok / err，
   结果报错与中性提示长得一模一样。这里补齐别名，不必去改 25 处调用点。 */
.toast.error { background: var(--danger); }
.toast.warn { background: var(--warn-ink, #92400e); }
@keyframes slideIn { from { transform: translateX(30px); opacity: 0; } }

.tabs { display: flex; gap: 6px; border-bottom: 1px solid var(--border); margin-bottom: 18px; }
.tab {
  padding: 12px 20px; font-size: 14.5px; color: var(--ink-3);
  border-bottom: 3px solid transparent; margin-bottom: -1px; transition: .15s;
  display: inline-flex; align-items: center; gap: 7px;
}
.tab:hover { color: var(--ink-1); background: rgba(30,94,255,.04); }
.tab.active {
  color: var(--brand); border-bottom-color: var(--brand); font-weight: 600;
  background: linear-gradient(180deg, rgba(30,94,255,.07), transparent);
}

/* v1.20.1 筛选条整体升级：胶囊更大更重，选中态实底+阴影，一眼可辨 */
.chip-row { display: flex; gap: 10px; flex-wrap: wrap; align-items: center; }
.chip {
  padding: 8px 19px; border-radius: 999px; font-size: 13.5px; line-height: 1.4;
  border: 1px solid var(--border); background: var(--surface); color: var(--ink-2);
  transition: .16s; cursor: pointer; white-space: nowrap;
}
.chip:hover { border-color: var(--brand); color: var(--brand); background: rgba(30,94,255,.05); transform: translateY(-1px); }
.chip:active { transform: translateY(0) scale(.97); }
.chip.on {
  background: var(--brand); border-color: var(--brand); color: #fff; font-weight: 600;
  box-shadow: 0 3px 12px rgba(30,94,255,.35);
}

/* v1.20.2 数据集在线预览表格：品牌化设计（此前原生灰边框表格与整体不协调） */
.pv-wrap {
  overflow-x: auto;
  border: 1px solid var(--border);
  border-radius: 10px;
  background: var(--surface);
}
.pv-table { width: 100%; border-collapse: collapse; font-size: 12.5px; }
.pv-table th {
  background: #eef4ff; color: #1e3a8a; font-weight: 600; text-align: left;
  padding: 9px 12px; border-bottom: 2px solid #d6e2ff; white-space: nowrap;
}
.pv-table td {
  padding: 8px 12px; border-bottom: 1px solid var(--border);
  vertical-align: top; word-break: break-all;
}
.pv-table tbody tr:last-child td { border-bottom: none; }
.pv-table tbody tr.zebra { background: #f8faff; }
.pv-table tbody tr:hover { background: #f0f6ff; }

/* v1.20.3 报告在线预览（前端渲染）：与服务端导出 HTML 同款品牌版式 */
.rpv-card { overflow: hidden; }
.rpv-head {
  background: linear-gradient(135deg, #0f1c3d 0%, #1e3a8a 58%, #1e5eff 130%);
  color: #fff; padding: 20px 22px 16px;
}
.rpv-head h3 { font-size: 19px; font-weight: 600; margin: 0 0 10px; letter-spacing: .5px; }
.rpv-chips { display: flex; flex-wrap: wrap; gap: 8px; }
.rpv-chip {
  background: rgba(255,255,255,.14); border: 1px solid rgba(255,255,255,.22);
  border-radius: 999px; padding: 3px 12px; font-size: 12px; color: #dbe7ff;
}
.rpv-h2 {
  font-size: 15.5px; font-weight: 600; margin: 24px 0 10px; padding: 7px 14px;
  background: #f0f5ff; border-left: 4px solid var(--brand);
  border-radius: 0 8px 8px 0; color: #0f1c3d;
}
.rpv-p { margin: 8px 0; font-size: 13.5px; line-height: 1.8; }
.rpv-wrap { overflow-x: auto; border: 1px solid var(--border); border-radius: 9px; margin: 12px 0; }
.rpv-tbl { border-collapse: collapse; width: 100%; font-size: 13px; margin: 0; }
.rpv-tbl th, .rpv-tbl td { padding: 8px 11px; text-align: left; vertical-align: top; word-break: break-all; }
.rpv-tbl thead th {
  background: #eef4ff; color: #1e3a8a; font-weight: 600;
  border-bottom: 2px solid #d6e2ff; white-space: nowrap;
}
.rpv-tbl tbody td { border-bottom: 1px solid #edf1f7; }
.rpv-tbl tbody tr:nth-child(even) { background: #f8faff; }
.rpv-tbl tbody tr:hover { background: #f0f6ff; }
.rpv-tbl tbody tr:last-child td { border-bottom: none; }
.rpv-kv {
  width: auto; min-width: 46%; margin: 12px 0; border: 1px solid var(--border);
  border-radius: 9px; border-collapse: separate; border-spacing: 0; overflow: hidden;
}
.rpv-kv th {
  background: #f6f9ff; color: #475569; font-weight: 600; white-space: nowrap;
  padding: 7px 16px 7px 13px; border-bottom: 1px solid #edf1f7;
}
.rpv-kv td { font-weight: 600; color: #0f1c3d; border-bottom: 1px solid #edf1f7; }
.rpv-kv tr:last-child th, .rpv-kv tr:last-child td { border-bottom: none; }
.rpv-ok { color: #0a8a4a; font-weight: 600; }
.rpv-bad { color: #dc2626; font-weight: 600; }
.rpv-warn { color: #b45309; font-weight: 600; }
.rpv-ls { margin: 8px 0; padding-left: 22px; font-size: 13.5px; }
.rpv-ls li { margin: 5px 0; line-height: 1.8; }
.rpv-note {
  background: #eff6ff; border-left: 3px solid var(--brand); padding: 10px 13px;
  margin: 12px 0; font-size: 13px; border-radius: 0 8px 8px 0; color: #1e3a5f; line-height: 1.7;
}
.rpv-note.warn { background: #fff7ed; border-left-color: #f59e0b; color: #7c4a03; }
.rpv-foot {
  margin-top: 18px; border-top: 1px solid var(--border);
  padding: 12px 2px 0; font-size: 12px; color: var(--ink-3); line-height: 1.8;
}

.kv { display: grid; grid-template-columns: 88px 1fr; gap: 8px 12px; font-size: 13px; }
.kv dt { color: var(--ink-3); }
.kv dd { color: var(--ink-1); }

.list-item {
  padding: 13px 0; border-bottom: 1px solid var(--border); cursor: pointer; transition: .15s;
}
.list-item:last-child { border-bottom: none; }
.list-item:hover { background: var(--surface-2); }
.list-item:first-child { padding-top: 0; }
.li-title { font-size: 14px; font-weight: 500; margin-bottom: 5px; }
.li-title:hover { color: var(--brand); }
.li-meta { font-size: 12px; color: var(--ink-3); display: flex; gap: 10px; flex-wrap: wrap; align-items: center; }

.score-ring {
  width: 52px; height: 52px; border-radius: 50%; display: grid; place-items: center;
  font-weight: 700; font-size: 15px; flex-shrink: 0;
}
.rank-badge {
  width: 22px; height: 22px; border-radius: 6px; display: grid; place-items: center;
  font-size: 12px; font-weight: 700; color: #fff; background: var(--ink-4); flex-shrink: 0;
}
.rank-1 { background: #f59e0b; }
.rank-2 { background: #94a3b8; }
.rank-3 { background: #c08457; }

.ai-panel { background: linear-gradient(135deg, #f0f5ff, #f6f9ff); border: 1px solid #d6e4ff; border-radius: var(--radius); padding: 16px; }
.ai-badge {
  /* v1.17.0：11.5px → 12px，与全站「不小于 12px」基线对齐 */
  display: inline-flex; align-items: center; gap: 5px; font-size: 12px;
  background: var(--brand); color: #fff; padding: 2px 9px; border-radius: 10px; font-weight: 500;
}
.answer-body { white-space: pre-wrap; line-height: 1.75; font-size: 13.5px; color: var(--ink-1); }
.source-item { padding: 9px 12px; background: var(--surface-2); border-radius: 7px; margin-bottom: 7px; font-size: 12.5px; }
.cite { font-size: 12px; color: var(--brand); background: var(--brand-light); padding: 1px 6px; border-radius: 4px; margin-right: 6px; }

.alert-item { display: flex; gap: 11px; padding: 11px 0; border-bottom: 1px solid var(--border); }
.alert-item:last-child { border-bottom: none; }
.alert-ico { width: 30px; height: 30px; border-radius: 8px; display: grid; place-items: center; font-size: 15px; flex-shrink: 0; }
.alert-high { background: #fdecec; color: var(--danger); }
.alert-normal { background: var(--brand-light); color: var(--brand); }

.clause-item { padding: 12px 14px; border: 1px solid var(--border); border-radius: 8px; margin-bottom: 9px; }
.clause-no { font-size: 12px; color: var(--brand); font-weight: 600; margin-bottom: 4px; }
.clause-text { font-size: 13px; color: var(--ink-2); line-height: 1.7; }

.match-bar { display: flex; align-items: center; gap: 8px; }
.match-bar .bar { flex: 1; }

.heatmap { display: grid; grid-template-columns: repeat(auto-fill, minmax(88px, 1fr)); gap: 8px; }
.heat-cell {
  padding: 11px 8px; border-radius: 8px; text-align: center; font-size: 12px;
  border: 1px solid var(--border);
}
.heat-cell b { display: block; font-size: 17px; margin-bottom: 2px; }

@media (max-width: 1280px) {
  .g5 { grid-template-columns: repeat(3, 1fr); }
}
@media (max-width: 1100px) {
  .g4 { grid-template-columns: repeat(2, 1fr); }
  .g3 { grid-template-columns: repeat(2, 1fr); }
  .g5 { grid-template-columns: repeat(2, 1fr); }
}
/* ============ P0-升级：U1 信用档案 / U2 属地筛选 / U4 看板图表 ============ */
.zt-filterbar { display: flex; flex-wrap: wrap; align-items: center; gap: 10px; margin-bottom: 14px; padding: 11px 13px; background: var(--bg-2, #f7f9fc); border: 1px solid var(--border); border-radius: 11px; }
.zt-flabel { font-size: 13px; color: var(--ink-2); font-weight: 600; }
.zt-select { appearance: none; padding: 9px 30px 9px 13px; font-size: 13.5px; border: 1px solid var(--border); border-radius: 9px; background: #fff url("data:image/svg+xml;utf8,<svg xmlns='http://www.w3.org/2000/svg' width='10' height='6'><path d='M0 0l5 6 5-6z' fill='%2394a3b8'/></svg>") no-repeat right 11px center; color: var(--ink-1); cursor: pointer; transition: .16s; }
.zt-select:hover { border-color: var(--brand); box-shadow: 0 0 0 3px rgba(30,94,255,.08); }
.zt-select:focus { border-color: var(--brand); box-shadow: 0 0 0 3px rgba(30,94,255,.1); outline: none; }
.zt-select:focus { outline: none; border-color: var(--brand); }

/* ============ v1.21.9 表单控件（.inp / 复选框 / 分组） ============
 * 起因：「提交已成交工程案例」弹窗的表控件写的是 class="inp"，而 .inp 此前在样式表里
 * 从未定义 —— 输入框、下拉、多行文本全部回落到浏览器默认样式：细黑边直角框、
 * 下拉带原生灰箭头、复选框是原生灰方块，和平台既有的 .field / .zt-select 完全两种语言。
 * 这里把 .inp 补成一等公民控件类（规格对齐 .field input + .zt-select），并补自定义
 * 复选框与表单分组，避免每处弹窗表单各写一套内联样式、各长一个样子。 */
.inp {
  width: 100%; padding: 9px 12px;
  border: 1px solid var(--border); border-radius: var(--radius-sm);
  background: var(--surface); color: var(--ink-1);
  font-size: 13.5px; line-height: 1.6;
  outline: none; transition: border-color .15s, box-shadow .15s;
}
.inp::placeholder { color: #94a3b8; }
.inp:hover { border-color: var(--border-strong); }
.inp:focus { border-color: var(--brand); box-shadow: 0 0 0 3px rgba(30,94,255,.1); }
.inp:disabled { background: var(--surface-2); color: var(--ink-4); cursor: not-allowed; }
textarea.inp { resize: vertical; min-height: 84px; }
/* 下拉：去掉原生箭头，换成与 .zt-select 同一枚细三角（灰阶改用 --ink-4 保证可见） */
select.inp {
  appearance: none; -webkit-appearance: none; -moz-appearance: none;
  padding-right: 32px; cursor: pointer;
  background-image: url("data:image/svg+xml;utf8,<svg xmlns='http://www.w3.org/2000/svg' width='10' height='6'><path d='M0 0l5 6 5-6z' fill='%235e6e86'/></svg>");
  background-repeat: no-repeat; background-position: right 12px center;
}
select.inp:hover { border-color: var(--brand); }

/* 自定义复选框：原生 checkbox 在白底上灰扑扑、尺寸不齐，且颜色不受主题控制 */
.zt-check {
  appearance: none; -webkit-appearance: none; -moz-appearance: none;
  flex: 0 0 auto; width: 16px; height: 16px; margin: 0;
  border: 1.5px solid var(--border-strong); border-radius: 4px;
  background: #fff; cursor: pointer; position: relative;
  transition: background .15s, border-color .15s, box-shadow .15s;
}
.zt-check:hover { border-color: var(--brand); }
.zt-check:focus-visible { box-shadow: 0 0 0 3px rgba(30,94,255,.14); }
.zt-check:checked { background: var(--brand); border-color: var(--brand); }
.zt-check:checked::after {
  content: ''; position: absolute; left: 4.5px; top: 1.5px;
  width: 4px; height: 8px; border: solid #fff;
  border-width: 0 2px 2px 0; transform: rotate(45deg);
}

/* 表单分组：长表单一条条平铺下去，填的人不知道填到哪一段了 */
.zt-fldset { margin-bottom: 18px; }
.zt-fldset:last-child { margin-bottom: 0; }
.zt-fldset-title {
  display: flex; align-items: center; gap: 8px;
  font-size: 12.5px; font-weight: 600; color: var(--ink-2);
  margin-bottom: 11px;
}
.zt-fldset-title::before {
  content: ''; width: 3px; height: 12px; border-radius: 2px;
  background: var(--brand); flex: 0 0 auto;
}
.zt-fld { margin-bottom: 12px; }
.zt-fld:last-child { margin-bottom: 0; }
.zt-fld-label { font-size: 13px; color: var(--ink-2); font-weight: 500; margin-bottom: 6px; }
.zt-fld-hint { font-size: 12px; color: var(--ink-4); margin-top: 5px; line-height: 1.6; }
.zt-fld-2 { display: grid; grid-template-columns: 1fr 1fr; gap: 12px; }
@media (max-width: 560px) { .zt-fld-2 { grid-template-columns: 1fr; } }

/* 声明区：与上方的填写字段区隔，说明"你在同意什么" */
.zt-consent {
  border: 1px solid var(--border); border-radius: 10px;
  background: var(--surface-2); padding: 12px 13px;
  display: grid; gap: 10px;
}
.zt-consent-row {
  display: flex; align-items: flex-start; gap: 9px;
  font-size: 12.5px; line-height: 1.7; color: var(--ink-2); cursor: pointer;
}
.zt-consent-row .zt-check { margin-top: 3px; }

.zt-chips { display: flex; flex-wrap: wrap; gap: 6px; margin: 4px 0 2px; }
.zt-chip { padding: 5px 11px; font-size: 12px; border: 1px solid var(--border); background: #fff; border-radius: 14px; color: var(--ink-2); cursor: pointer; transition: .15s; }
.zt-chip.on { background: var(--brand); color: #fff; border-color: var(--brand); }
.zt-chip:hover { border-color: var(--brand); }

.zt-radar svg text { font-family: inherit; }

.zt-donut { display: flex; flex-direction: column; align-items: center; gap: 8px; }
/* v1.18.2 环形图悬停：弧段平滑变淡/加粗，图例同步明暗 */
.zt-arc { transition: opacity .15s ease, stroke-width .15s ease; }
/* 悬停提示框挂 body（position:fixed），深蓝大屏作用域内同样可用 */
.zt-donut-tip {
  position: fixed; z-index: 9999; display: none; pointer-events: none;
  background: rgba(15, 23, 42, .94); color: #f1f5f9;
  font-size: 12.5px; line-height: 1.5; white-space: nowrap;
  padding: 6px 11px; border-radius: 8px;
  box-shadow: 0 8px 24px rgba(2, 8, 23, .35);
  border: 1px solid rgba(148, 163, 184, .25);
}
.zt-donut-tip b { font-weight: 600; }
.zt-legend { display: flex; flex-wrap: wrap; gap: 6px 14px; justify-content: center; font-size: 12.5px; color: var(--ink-2); }
.zt-leg { display: inline-flex; align-items: center; gap: 5px; }
.zt-leg i { width: 10px; height: 10px; border-radius: 3px; display: inline-block; }

.zt-barh { display: flex; flex-direction: column; gap: 9px; }
.zt-bar-row { display: grid; grid-template-columns: 64px 1fr 56px; align-items: center; gap: 9px; font-size: 12.5px; }
.zt-bar-lab { color: var(--ink-2); white-space: nowrap; overflow: hidden; text-overflow: ellipsis; }
.zt-bar-track { height: 9px; background: #eef2f8; border-radius: 6px; overflow: hidden; }
.zt-bar-track i { display: block; height: 100%; border-radius: 6px; }
.zt-bar-val { text-align: right; color: var(--ink-1); font-weight: 600; }

.zt-kpi { display: grid; grid-template-columns: repeat(3, 1fr); gap: 10px; margin-bottom: 4px; }
.zt-kpi .k { padding: 12px; border-radius: 10px; background: var(--bg-2, #f7f9fc); text-align: center; }
.zt-kpi .k b { display: block; font-size: 20px; font-weight: 800; }
.zt-kpi .k span { font-size: 12px; color: var(--ink-3); }

/* ===== U4 升级：联动穿透式产业大数据看板 ===== */
.zt-crumb { display: flex; align-items: center; gap: 6px; flex-wrap: wrap; }
.zt-crumb-item {
  border: 1px solid var(--border, #e2e8f0); background: #fff; border-radius: 8px;
  padding: 4px 11px; font-size: 12.5px; cursor: pointer; color: var(--ink-2, #475569);
}
.zt-crumb-item:hover { border-color: var(--brand, #1e5eff); color: var(--brand, #1e5eff); }
.zt-crumb-item.on { background: var(--brand, #1e5eff); border-color: var(--brand, #1e5eff); color: #fff; font-weight: 600; cursor: default; }
.zt-crumb-sep { color: var(--ink-3, #94a3b8); font-size: 13px; }

.zt-map-empty { display: grid; place-items: center; text-align: center; height: 100%; padding: 24px; }

.zt-drill-row {
  border: 1px solid var(--border, #e2e8f0); border-radius: 9px; padding: 9px 12px; cursor: pointer;
  background: #fff; transition: .15s;
}
.zt-drill-row:hover { border-color: var(--brand, #1e5eff); box-shadow: 0 2px 10px rgba(30, 94, 255, .08); }
.zt-drill-head { display: flex; align-items: center; gap: 8px; font-size: 13px; margin-bottom: 6px; }

.zt-row-item {
  display: flex; align-items: center; gap: 10px; border: 1px solid var(--border, #e2e8f0);
  border-radius: 10px; padding: 10px 13px; cursor: pointer; background: #fff; transition: .15s;
}
.zt-row-item:hover { border-color: var(--brand, #1e5eff); background: #f8fbff; }
.ellipsis { overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }

/* ============ 筛选工具栏（v1.16.3） ============
   此前各页面的「筛选/搜索栏」是裸 input + 小按钮挤成一行，
   反馈是「栏目设计不太明显和美观」。统一为带底色的工具栏容器：
   内嵌图标搜索框（focus 高亮）、统一下拉、chip 式开关。 */
.toolbar {
  display: flex; flex-wrap: wrap; align-items: center; gap: 8px;
  background: var(--surface-2); border: 1px solid var(--border);
  border-radius: 10px; padding: 10px 12px;
}
.toolbar-search {
  display: flex; align-items: center; gap: 7px;
  background: var(--surface); border: 1px solid var(--border);
  border-radius: 9px; padding: 0 12px; height: 38px;
  flex: 1 1 240px; min-width: 210px; transition: .15s;
}
.toolbar-search:focus-within { border-color: var(--brand); box-shadow: 0 0 0 3px rgba(30,94,255,.1); }
.toolbar-search input { border: none; background: none; outline: none; flex: 1; font-size: 13px; min-width: 0; height: 100%; color: var(--ink-1); }
.toolbar-search input::placeholder { color: var(--ink-4); }
.toolbar-search .t-ico { display: inline-flex; align-items: center; flex: 0 0 auto; }
/* v1.16.19：搜索框一键清空位——此前想换个关键词只能手动逐字删 */
.toolbar-search .ts-clear {
  display: none; width: 20px; height: 20px; border: none; border-radius: 50%;
  background: var(--surface-2); color: var(--ink-3); cursor: pointer;
  flex: 0 0 auto; place-items: center; padding: 0; transition: .15s;
}
.toolbar-search .ts-clear:hover { background: #e2e8f0; color: var(--ink-1); }
.toolbar .zt-select { height: 38px; }
.toolbar-toggle {
  display: inline-flex; align-items: center; gap: 6px; height: 36px; padding: 0 13px;
  border-radius: 8px; border: 1px solid var(--border); background: var(--surface);
  font-size: 13px; color: var(--ink-2); cursor: pointer; transition: .15s; user-select: none;
}
.toolbar-toggle:hover { border-color: var(--brand); color: var(--brand); }
.toolbar-toggle.on { border-color: #7fd8b0; background: #e6f7ef; color: #067a52; font-weight: 500; }
.toolbar .btn { height: 36px; padding: 0 15px; }
.toolbar-tip { font-size: 12px; color: var(--ink-4); }

/* .btn.ghost 此前从未定义——enterprise/suppliers/supplier 等页大量使用却一直
   回退到 .btn 默认白底样式。补上：透明底品牌色，hover 浅蓝底。 */
.btn.ghost { background: transparent; border-color: transparent; color: var(--brand); }
.btn.ghost:hover { background: var(--brand-light); border-color: transparent; }

/* ===== v1.16.15 供应商入驻申请：一体化主体搜索条 =====
   此前是「图标 + 裸 input + 搜索/重置 两个小字按钮」平铺一行，
   反馈是「不太方便」：按钮太靠右像文字链接、无法一键清空、没有快捷入口。
   改为：图标内嵌容器 + 右侧内嵌主色「搜索」按钮 + 有内容时的「×」清空，
   配合下方快捷品类 chips 一键筛选。 */
.apply-search {
  display: flex; align-items: center; gap: 7px;
  background: var(--surface); border: 1px solid var(--border);
  border-radius: 9px; padding: 0 6px 0 12px; height: 42px;
  flex: 1 1 320px; min-width: 250px; transition: .15s;
}
.apply-search:focus-within { border-color: var(--brand); box-shadow: 0 0 0 3px rgba(30, 94, 255, .1); }
.apply-search input { border: none; background: none; outline: none; flex: 1; font-size: 13px; min-width: 0; height: 100%; color: var(--ink-1); }
.apply-search input::placeholder { color: var(--ink-4); }
.apply-search .t-ico { display: inline-flex; align-items: center; flex: 0 0 auto; }
.apply-search .as-clear {
  display: none; width: 22px; height: 22px; border: none; border-radius: 50%;
  background: var(--surface-2); color: var(--ink-3); cursor: pointer;
  font-size: 13px; line-height: 1; flex: 0 0 auto; place-items: center; padding: 0;
}
.apply-search .as-clear:hover { background: #e2e8f0; color: var(--ink-1); }
.apply-search .as-btn {
  flex: 0 0 auto; padding: 7px 17px; font-size: 12.5px; font-weight: 600;
  color: #fff; border: none; border-radius: 7px; cursor: pointer;
  background: linear-gradient(135deg, #1e5eff, #4b82ff);
  box-shadow: 0 2px 8px rgba(30, 94, 255, .25); transition: .15s;
}
.apply-search .as-btn:hover { filter: brightness(1.07); }
.apply-search .as-btn:active { transform: translateY(1px); }
.apply-chip {
  padding: 4.5px 13px; border-radius: 999px; border: 1px solid var(--border);
  background: var(--surface); font-size: 12.5px; color: var(--ink-2);
  cursor: pointer; transition: .15s;
}
.apply-chip:hover { border-color: var(--brand); color: var(--brand); }
.apply-chip.on { border-color: var(--brand); background: var(--brand-light); color: var(--brand); font-weight: 600; }

/* ===== v1.16.19 企业库筛选分组升级 =====
   此前是「emoji + select」平铺五个白框：图标语言不统一、哪个筛选生效没有反馈、
   半径不选省份时 silently 不生效。升级：SVG 线性图标、选中分组品牌色高亮、
   未选省份时半径组弱化并给提示、有激活筛选时出现一键「重置」。 */
.zf-group .zf-ico { display: inline-flex; align-items: center; color: var(--ink-4); transition: .15s; }
.zf-group.on { border-color: var(--brand); background: var(--brand-light); box-shadow: 0 0 0 3px rgba(30, 94, 255, .08); }
.zf-group.on .zf-label, .zf-group.on .zf-ico { color: var(--brand); }
.zf-group.dim { opacity: .55; }
.zt-filterbar { display: flex; flex-wrap: wrap; align-items: center; gap: 8px; }
.zt-filterbar .zf-reset {
  display: none; align-items: center; gap: 5px; height: 30px; padding: 0 11px;
  border: none; border-radius: 8px; background: none; color: var(--ink-3);
  font-size: 12.5px; cursor: pointer; transition: .15s; margin-left: auto;
}
.zt-filterbar .zf-reset:hover { color: #b91c1c; background: #fdecec; }
.zt-filterbar.has-active .zf-reset { display: inline-flex; }
/* v1.16.19：名录筛选栏里的搜索框占主导（弹性的更长），让"搜索"与"下拉筛选"形成主次 */
.zt-filterbar .sup-search { flex: 1 1 300px; min-width: 230px; display: flex; }
.zt-filterbar .sup-search .toolbar-search { flex: 1; width: 100%; }

/* ===== v1.16.19 合规校验参数集行内编辑 =====
   此前是原生 input/select 直接铺在 table 行里：细边框、列宽不齐、删除是灰底小按钮。
   改为卡片式行 + 统一控件 + 圆形删除位，与全站视觉语言一致。 */
.cmp-row {
  display: grid; grid-template-columns: 1.5fr 1fr 1.3fr auto; gap: 10px;
  align-items: center; background: var(--surface-2);
  border: 1px solid var(--border); border-radius: 10px; padding: 10px 12px;
}
.cmp-row .ci {
  width: 100%; box-sizing: border-box; padding: 8px 11px;
  border: 1px solid var(--border); border-radius: 8px; font-size: 13px;
  background: var(--surface); color: var(--ink-1); outline: none; transition: .15s;
}
.cmp-row .ci:focus { border-color: var(--brand); box-shadow: 0 0 0 3px rgba(30, 94, 255, .1); }
.cmp-row .ci::placeholder { color: var(--ink-4); }
.cmp-row .ci.sel {
  appearance: none; padding-right: 28px; cursor: pointer;
  background-image: url("data:image/svg+xml;utf8,<svg xmlns='http://www.w3.org/2000/svg' width='10' height='6'><path d='M0 0l5 6 5-6z' fill='%2394a3b8'/></svg>");
  background-repeat: no-repeat; background-position: right 10px center;
}
.cmp-del {
  width: 30px; height: 30px; border: 1px solid var(--border); background: var(--surface);
  border-radius: 8px; color: var(--ink-3); cursor: pointer;
  display: grid; place-items: center; transition: .15s; flex: 0 0 auto; padding: 0;
}
.cmp-del:hover { border-color: #f8cfd0; background: #fdecec; color: #b91c1c; }
.cmp-add {
  width: 100%; border: 1.5px dashed var(--border-strong); background: none;
  border-radius: 10px; padding: 9px; font-size: 12.5px; color: var(--ink-3);
  cursor: pointer; transition: .15s; margin-top: 9px; display: flex; align-items: center; justify-content: center; gap: 5px;
}
.cmp-add:hover { border-color: var(--brand); color: var(--brand); background: var(--brand-light); }

/* ===== v1.16.5 智慧企业服务：筛选分组 + 卡片等级色条 ===== */
.zf-group { display: inline-flex; align-items: center; gap: 6px; background: var(--surface, #fff); border: 1px solid var(--border); border-radius: 10px; padding: 7px 11px 7px 13px; transition: border-color .15s; }
.zf-group:hover { border-color: var(--brand); }
.zf-label { font-size: 12.5px; color: var(--ink-3); font-weight: 600; white-space: nowrap; display: inline-flex; align-items: center; gap: 3px; }
.zf-group .zt-select { border: none !important; background: transparent !important; padding: 2px 0 !important; font-size: 13.5px !important; font-weight: 500; box-shadow: none !important; }
.ent-card { position: relative; overflow: hidden; transition: box-shadow .18s ease, transform .18s ease; }
.ent-card:hover { box-shadow: 0 10px 26px rgba(20,32,66,.13); transform: translateY(-2px); }
.ent-topline { position: absolute; top: 0; left: 0; right: 0; height: 3px; }

/* ===== v1.16.6 产业大数据看板 · 深蓝科技大屏皮肤 =====
 * 设计语言参考「中国京冶数智化企业大脑」大屏：深蓝渐变底、
 * 发光描边面板、荧光数字、顶部光带。仅作用于 /bigdata（.zt-screen 作用域），
 * 通过覆盖 ink/border/surface 变量让页内组件整体换肤，不影响浅色业务内页。 */
.zt-screen {
  --ink: #eaf4ff; --ink-1: #eaf4ff; --ink-2: #c6dcf7; --ink-3: #8fb4e0; --ink-4: #6b8fc0;
  --border: rgba(64,156,255,.32); --surface: rgba(13,42,92,.85); --surface-2: rgba(9,32,72,.85);
  position: relative; color: #c6dcf7;
  background: radial-gradient(1300px 620px at 50% -8%, #14417f 0%, #0b2c62 40%, #07204a 76%, #04122e 100%);
  border-radius: 16px; padding: 16px 16px 20px; margin-top: -4px;
  box-shadow: 0 10px 40px rgba(2,10,30,.5);
}
.zt-screen::before { content: ''; position: absolute; inset: 0 0 auto 0; height: 2px; border-radius: 16px 16px 0 0;
  background: linear-gradient(90deg, transparent, #35d0ff99 22%, #35d0ff33 50%, #35d0ff99 78%, transparent); pointer-events: none; }
.zt-screen .card { background: linear-gradient(180deg, rgba(15,46,98,.88), rgba(9,32,72,.92)); border: 1px solid rgba(64,156,255,.35);
  box-shadow: inset 0 0 0 1px rgba(53,208,255,.05), 0 6px 22px rgba(2,10,30,.45); }
.zt-screen .card-head h3, .zt-screen h3, .zt-screen b { color: #eaf4ff; }
/* v1.16.19：此前用一条 !important 把四张卡全部刷成同一个青色，指标之间完全不可区分
   （用户反馈「颜色体现太单一，不能明确区分」）。改为读取 statCard 写入的 --sc* 变量
   按卡着色：图标底衬、数字、左侧光条都跟随各指标自身的品牌色。 */
.zt-screen .stat-card { position: relative; }
.zt-screen .stat-card::before { content: ''; position: absolute; left: 0; top: 13px; bottom: 13px; width: 3px;
  border-radius: 0 3px 3px 0; background: var(--sc, #6ee7ff); box-shadow: 0 0 10px var(--sc-glow, rgba(53,208,255,.45)); }
.zt-screen .stat-num { color: var(--sc, #6ee7ff); text-shadow: 0 0 14px var(--sc-glow, rgba(53,208,255,.45)); }
.zt-screen .stat-ico { background: var(--sc-bg, rgba(64,156,255,.16)) !important; color: var(--sc, #7fd4ff) !important;
  box-shadow: inset 0 0 0 1px var(--sc-line, rgba(64,156,255,.32)); }
/* v1.16.16：此前只命中 .zt-select 类，而 ui.js 的通用 select() 不带类，
   导致大屏筛选条/地图工具栏里的下拉全是原生白底，与深蓝 HUD 严重不协调（用户反馈）。 */
.zt-screen .zt-select, .zt-screen select, .zt-screen input, .zt-screen textarea {
  background: rgba(8, 28, 64, .88); border-color: rgba(64, 156, 255, .4); color: #d7e9ff;
}
.zt-screen .zt-select option, .zt-screen select option { background: #0a2350; color: #d7e9ff; }
.zt-screen input::placeholder { color: #6f8fc0; }
.zt-screen select:disabled, .zt-screen input:disabled { opacity: .45; cursor: not-allowed; }
.zt-screen .zt-chip { background: rgba(8,28,64,.8); border-color: rgba(64,156,255,.4); color: #bcd8f7; }
.zt-screen .zt-chip.on { background: linear-gradient(135deg, #1170d4, #35d0ff); border-color: transparent; color: #fff; }
.zt-screen .btn { background: rgba(8,28,64,.8); border-color: rgba(64,156,255,.42); color: #d7e9ff; }
.zt-screen .btn-primary { background: linear-gradient(135deg, #1170d4, #35d0ff); border-color: transparent; color: #fff; }
.zt-screen .tag { background: rgba(64,156,255,.18) !important; color: #9fd0ff !important; }
.zt-screen .tag-ok { background: rgba(0,181,120,.22) !important; color: #5fe6b3 !important; }
/* v1.16.19：此前 .tag 一条 !important 让大屏上所有标签同色，语义标签失去区分度 */
.zt-screen .tag-violet { background: rgba(124,58,237,.26) !important; color: #c9b6ff !important; border-color: rgba(167,139,250,.42) !important; }
.zt-screen .tag-warn { background: rgba(245,158,11,.2) !important; color: #fcd34d !important; border-color: rgba(252,211,77,.4) !important; }
.zt-screen .tag-danger { background: rgba(229,72,77,.22) !important; color: #fda4a7 !important; border-color: rgba(251,113,133,.42) !important; }
.zt-screen .zt-crumb button { color: #9fd0ff; }
.zt-screen .zt-crumb button:hover { color: #6ee7ff; }
.zt-screen .zt-crumb-sep { color: #567cae; }
/* 大屏标题横幅 */
.zt-screen-hero { position: relative; display: flex; align-items: baseline; justify-content: center; flex-wrap: wrap; gap: 4px 14px;
  padding: 15px 150px 13px 12px; border-radius: 12px;
  background: linear-gradient(90deg, rgba(17,64,140,0), rgba(23,82,170,.5) 50%, rgba(17,64,140,0));
  border: 1px solid rgba(64,156,255,.28); }
.zt-screen-title { font-size: 21px; font-weight: 800; letter-spacing: 5px; color: #f2f9ff; text-shadow: 0 0 18px rgba(53,208,255,.55); }
.zt-screen-sub { font-size: 12px; color: #8fb4e0; letter-spacing: 1px; }
.zt-screen-time { position: absolute; right: 16px; top: 50%; transform: translateY(-50%);
  color: #6ee7ff; font-family: Consolas, monospace; font-size: 15px; letter-spacing: 1px; text-shadow: 0 0 12px rgba(53,208,255,.4); }
/* ===== v1.16.6 全局：卡片标题条（借鉴大屏面板标题左侧亮条） ===== */
.card-head { position: relative; padding-left: 10px; }
.card-head::before { content: ''; position: absolute; left: 0; top: 3px; bottom: 3px; width: 3px; border-radius: 2px;
  background: linear-gradient(180deg, var(--brand), #35d0ff); }

.zt-screen .zt-map { background: rgba(8,28,64,.85) !important; }
.zt-screen .zt-map-empty { color: #8fb4e0 !important; }

/* ===== v1.16.6b 大屏细节增强（参考大数据可视化模板库） =====
 * 1) 面板四角 HUD 亮角：大屏最标志性的元素，用 8 段 background 渐变实现；
 * 2) 标题横幅两侧装饰光带。 */
.zt-screen .card { position: relative; }
.zt-screen .card::after { content: ''; position: absolute; inset: 0; pointer-events: none; opacity: .65;
  background:
    linear-gradient(#35d0ff,#35d0ff) left 0 top 0/14px 2px,
    linear-gradient(#35d0ff,#35d0ff) left 0 top 0/2px 14px,
    linear-gradient(#35d0ff,#35d0ff) right 0 top 0/14px 2px,
    linear-gradient(#35d0ff,#35d0ff) right 0 top 0/2px 14px,
    linear-gradient(#35d0ff,#35d0ff) left 0 bottom 0/14px 2px,
    linear-gradient(#35d0ff,#35d0ff) left 0 bottom 0/2px 14px,
    linear-gradient(#35d0ff,#35d0ff) right 0 bottom 0/14px 2px,
    linear-gradient(#35d0ff,#35d0ff) right 0 bottom 0/2px 14px;
  background-repeat: no-repeat; }
.zt-screen-hero::before, .zt-screen-hero::after { content: ''; flex: 1 1 40px; height: 2px; align-self: center;
  background: linear-gradient(90deg, transparent, #35d0ff88); }
.zt-screen-hero::after { background: linear-gradient(90deg, #35d0ff88, transparent); }

/* ===== v1.16.7 侧栏图标炫彩化 ===== */
.nav-item { align-items: center; }
.nav-item .ico { width: 26px; display: inline-flex; align-items: center; justify-content: center; }
.nav-item.active .ico svg { filter: drop-shadow(0 0 4px rgba(255,255,255,.35)); }

/* ===== v1.16.8 大屏面板内条目深色化（修复白底行 + 提亮文字） =====
 * 排行行 .zt-drill-row 与明细行 .zt-row-item 原本是硬编码白底，叠加深色皮肤的
 * 浅蓝文字后出现"白块 + 灰字"，既不清晰也与其他面板风格冲突。改为半透明蓝色底 +
 * 高对比亮色文字，并让进度条发光，与深蓝大屏语言统一。 */
.zt-screen { --ink-3: #a9c8ec; --ink-4: #8aadd6; }
.zt-screen .zt-drill-row, .zt-screen .zt-row-item {
  background: rgba(64,156,255,.09); border-color: rgba(64,156,255,.26);
}
.zt-screen .zt-drill-row:hover, .zt-screen .zt-row-item:hover {
  background: rgba(64,156,255,.17); border-color: #35d0ff; box-shadow: 0 2px 14px rgba(53,208,255,.18);
}
.zt-screen .zt-drill-row, .zt-screen .zt-drill-row span,
.zt-screen .zt-row-item, .zt-screen .zt-row-item div, .zt-screen .zt-row-item span { color: #dcebff; }
.zt-screen .zt-drill-head { color: #eaf4ff; }
.zt-screen .zt-drill-row [style*="color: var(--ink-3)"],
.zt-screen .zt-row-item [style*="color: var(--ink-3)"] { color: #b8d4f2 !important; }
.zt-screen .bar { background: rgba(8,28,64,.75); box-shadow: inset 0 0 0 1px rgba(64,156,255,.18); }
.zt-screen .bar > i { background: linear-gradient(90deg, #1170d4, #35d0ff); box-shadow: 0 0 10px rgba(53,208,255,.45); }
.zt-screen .chip { background: rgba(8,28,64,.7); border-color: rgba(64,156,255,.38); color: #bcd8f7; font-size: 13.5px; padding: 8px 19px; border-radius: 999px; }
.zt-screen .chip:hover { color: #6ee7ff; border-color: #35d0ff; transform: translateY(-1px); }
.zt-screen .chip.on { background: linear-gradient(135deg, #1170d4, #35d0ff); border-color: transparent; color: #fff; font-weight: 600; box-shadow: 0 3px 14px rgba(53,208,255,.4); }
.zt-screen .zt-row-item [style*="#0e9f6e"] { color: #34d399 !important; }
.zt-screen .loading-box, .zt-screen .empty { color: #b8d4f2; }
/* v1.16.19：环形图中心数字原本硬编码深色 #1b2540 + 浅灰轨道环，落在深蓝面板上
   等于"最显眼的数字看不见、轨道反而是个白圈"。这里按大屏皮肤反转到发光亮色。 */
.zt-screen .zt-donut .donut-c { fill: #f2f9ff; }
.zt-screen .zt-donut .donut-s { fill: #a9c8ec; }
.zt-screen .zt-donut circle[stroke="#f1f5f9"] { stroke: rgba(64,156,255,.15); }

/* ===== v1.16.19 大屏企业明细：列对齐数据表（替换原有的卡片堆叠） =====
   问题：每行都带一枚重复的「查看 ›」蓝标签（12 行 12 个同款按钮 = 噪音），
   且名称 / 标签 / 评分 / 产能各自为政，纵向不成列，扫读时视线要来回跳。
   方案：表头与数据行共用一套栅格模板（模板写在 JS 的 ENT_COLS，保持单一来源），
   数值列右对齐 + 等宽数字便于纵向比对，"进入详情"收敛为末列箭头、hover 才点亮。 */
.zt-screen .zt-tb { display: grid; gap: 6px; }
.zt-screen .zt-tb-row {
  display: grid; align-items: center; gap: 12px; padding: 9px 12px;
  border-radius: 9px; border: 1px solid rgba(64,156,255,.22);
  background: rgba(64,156,255,.07); cursor: pointer; transition: background .15s, border-color .15s, box-shadow .15s;
}
.zt-screen .zt-tb-row > span { min-width: 0; }
.zt-screen .zt-tb-row.is-head {
  background: none; border: 1px solid transparent; padding: 0 12px 2px; cursor: default;
  font-size: 12px; color: #8fb4e0; letter-spacing: .5px;
}
.zt-screen .zt-tb-row:hover { background: rgba(64,156,255,.17); border-color: #35d0ff; box-shadow: 0 2px 14px rgba(53,208,255,.18); }
.zt-screen .ta-r { text-align: right; }
.zt-screen .zt-tb-ent { display: flex; align-items: center; gap: 10px; }
.zt-screen .zt-tb-lv {
  width: 32px; height: 32px; border-radius: 9px; display: grid; place-items: center; flex: 0 0 auto;
  font-size: 13px; font-weight: 700; font-style: normal; color: #fff;
  box-shadow: 0 0 0 1px rgba(255,255,255,.14) inset;
}
.zt-screen .zt-tb-txt { min-width: 0; display: grid; gap: 2px; }
.zt-screen .zt-tb-line { display: flex; align-items: center; gap: 6px; min-width: 0; }
.zt-screen .zt-tb-line b {
  font-size: 13.5px; font-weight: 600; color: #eaf4ff;
  flex: 0 1 auto; min-width: 0; overflow: hidden; text-overflow: ellipsis; white-space: nowrap;
}
.zt-screen .zt-tb-line .tag { flex: 0 0 auto; padding: 1px 7px; }
.zt-screen .zt-tb-sub { font-size: 12px; font-style: normal; color: #a9c8ec; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
.zt-screen .zt-tb-tag { font-size: 12.5px; color: #b8d4f2; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
.zt-screen .zt-tb-num { font-size: 13px; color: #dcebff; text-align: right; font-variant-numeric: tabular-nums; }
.zt-screen .zt-tb-score { font-size: 14.5px; font-weight: 700; }
.zt-screen .zt-tb-go { display: flex; justify-content: flex-end; }
.zt-screen .zt-tb-go svg { transition: stroke .15s, transform .15s; }
.zt-screen .zt-tb-row:hover .zt-tb-go svg { stroke: #35d0ff; transform: translateX(2px); }
/* 窄窗口优先舍弃"主营标签"列，保住名称与数值的可读性 */
@media (max-width: 1180px) {
  .zt-screen .zt-tb-row { grid-template-columns: minmax(0,1fr) 92px 150px 22px !important; }
  .zt-screen .zt-tb-row > .zt-tb-tag, .zt-screen .zt-tb-row > .h-tag { display: none; }
}
