/* ========== 企业 CRM 全局样式 ========== */
* { margin: 0; padding: 0; box-sizing: border-box; }
:root {
  --green: #30c776;          /* 主绿 */
  --green-dark: #22b365;
  --green-light: #f0fff4;    /* 菜单选中浅绿 */
  --text: #181c25;           /* 主文字 */
  --text-2: #545861;         /* 次级文字/表头 */
  --text-3: #7b7e86;         /* 弱文字 */
  --border: #e6e8eb;
  --link: #0c6cff;           /* 表格链接蓝(原站实测 rgb(12,108,255)) */
  --orange: #ff8a00;         /* logo 橙 */
  --topbar-bg: #d7f0f4;      /* 顶栏浅青 */
  --page-bg: #eef1f6;
}
html, body { height: 100%; }
body {
  font-family: Arial, Tahoma, "PingFang SC", "Hiragino Sans GB", "Microsoft YaHei", SimSun, sans-serif;
  font-size: 12px; color: var(--text);
  overflow: hidden;
}
#app { display: flex; flex-direction: column; height: 100vh; }
a { text-decoration: none; color: inherit; cursor: pointer; }
ul { list-style: none; }
input, button { font-family: inherit; outline: none; }

/* ========== 顶栏 ========== */
.topbar {
  height: 48px; flex: none; display: flex; align-items: center;
  background: linear-gradient(90deg, #d9f1f5 0%, #ddf2f6 40%, #e3f4f8 100%);
  padding-right: 12px; position: relative; z-index: 30;
}
.topbar .logo-badge {
  width: 62px; height: 32px; margin: 0 12px 0 8px; border-radius: 5px;
  background: var(--orange); color: #fff; display: flex; align-items: center; justify-content: center;
  font-size: 11px; font-weight: 700; letter-spacing: 1px; flex: none;
}
.topbar .ent-name { font-size: 14px; color: var(--text); flex: none; }
.topbar .tb-space { flex: 1; }
/* 尺寸取自原站实测:容器 259×28、圆角 6px、半透明白底(不是纯白胶囊) */
.topbar .search-wrap {
  width: 259px; height: 28px; background: rgba(255,255,255,.5); border-radius: 6px;
  display: flex; align-items: center; padding: 0 10px; margin-right: 10px;
}
.topbar .search-wrap .search-go { color: #9aa0a6; display: flex; width: 16px; cursor: pointer; }
.topbar .search-wrap .scope { color: var(--text); font-size: 13px; display: flex; align-items: center; gap: 4px; padding-right: 8px; border-right: 1px solid var(--border); cursor: pointer; }
.topbar .search-wrap .scope .caret { border: 4px solid transparent; border-top-color: #9aa0a6; margin-top: 4px; }
.topbar .search-wrap input { border: 0; flex: 1; padding: 0 8px; font-size: 13px; color: var(--text); background: transparent; }
.topbar .search-wrap input::placeholder { color: #b8bcc2; }
/* 原站实测:图标 28px、间距 38px(margin-left 10),右端与头像对齐 */
.topbar .tb-icon {
  width: 28px; height: 28px; border-radius: 50%; display: flex; align-items: center; justify-content: center;
  cursor: pointer; color: #43474e; margin-left: 10px; flex: none;
}
.topbar .tb-icon:hover { background: rgba(255,255,255,.6); }
.topbar .tb-icon svg { width: 18px; height: 18px; }
.topbar .avatar {
  width: 32px; height: 32px; border-radius: 50%; margin-left: 10px; flex: none; cursor: pointer;
  background: linear-gradient(135deg,#b0b6c1,#8d94a1); display: flex; align-items: center; justify-content: center; color:#fff; font-size:13px;
}

/* ========== 主体三栏 ========== */
.main-wrap { flex: 1; display: flex; min-height: 0; }

/* 左侧图标栏 */
.side-rail {
  width: 64px; flex: none; background: #fff; border-right: 1px solid #f0f1f3;
  /* 原站:栏体自 y60 起、内边距 12(顶栏 48 + 12 偏移),首个导航项落在 y72 */
  display: flex; flex-direction: column; align-items: center;
  margin-top: 12px; padding-top: 12px; z-index: 20;
}
/* 原站实测:item 60×52 / radius 8 / 上下内边距 8 / 图标22 / 行距 60(margin 8) */
.rail-item {
  width: 60px; padding: 8px 0; border-radius: 8px; margin-bottom: 8px;
  display: flex; flex-direction: column; align-items: center; cursor: pointer; color: #181c25; position: relative;
}
.rail-item:hover { background: #f5f6f8; }
.rail-item svg { width: 22px; height: 22px; margin-bottom: 0; }
.rail-item .lbl { font-size: 12px; line-height: 14px; }
.rail-item.active { color: var(--green); }
.rail-item.active .lbl { color: var(--green); font-weight: 700; }
.rail-item .badge {
  position: absolute; top: 2px; right: 10px; min-width: 15px; height: 15px; padding: 0 4px;
  background: #f5222d; color: #fff; border-radius: 8px; font-size: 10px; line-height: 15px; text-align: center;
}

/* ========== CRM 菜单面板 ========== */
/* 原站实测:面板 x64 宽200(收起 58),右侧与正文之间固定 12px 间距;
   标题 y60 高24 fs15;搜索行 y84 高44,输入框 y92 高28 宽137;+ 按钮 29×28;
   首个菜单项落在 y128,条目 x76 宽174 高36。 */
.menu-panel {
  width: 200px; flex: none; background: #fff; margin-right: 12px;
  display: flex; flex-direction: column; padding: 12px 9px 0 12px; z-index: 10; position: relative;
  transition: width .18s ease, padding .18s ease;
}
.menu-panel h1 { font-size: 15px; font-weight: 700; height: 24px; line-height: 24px; margin: 0; }
.menu-search-row { display: flex; align-items: center; gap: 8px; height: 44px; margin: 0 5px 0 0; }
.menu-search-row .ms-input {
  flex: 1; height: 28px; border: 1px solid var(--border); border-radius: 6px; display: flex; align-items: center; padding: 0 8px; color: #b8bcc2;
}
.menu-search-row .ms-input svg { width: 14px; height: 14px; margin-right: 5px; flex: none; }
.menu-search-row .ms-input input { border: 0; width: 100%; font-size: 13px; }
.menu-search-row .ms-plus {
  width: 29px; height: 28px; flex: none; border: 1px solid var(--border); border-radius: 6px;
  display: flex; align-items: center; justify-content: center; cursor: pointer; color: #43474e; font-size: 16px;
}
.menu-list { flex: 1; overflow-y: auto; margin: 0; padding: 0 0 20px; }
.menu-list::-webkit-scrollbar { width: 5px; }
.menu-list::-webkit-scrollbar-thumb { background: #d9dbde; border-radius: 3px; }
.menu-list::-webkit-scrollbar-thumb:hover { background: #c4c6ca; }
.m-item {
  height: 36px; display: flex; align-items: center; padding: 0 8px; border-radius: 7px;
  font-size: 14px; line-height: 20px; color: var(--text); cursor: pointer; position: relative;
}
.m-item:hover { background: #f5f6f8; }
.m-item.cur { background: var(--green-light); }
.m-item.cur .m-ico { color: var(--green); }
.m-item .m-ico { width: 16px; height: 16px; margin-right: 8px; flex: none; color: #545861; display: flex; align-items: center; }
.m-item .m-ico svg { width: 16px; height: 16px; }
.m-item .m-lbl { flex: 1; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
.m-item .m-new { color: #ff5e2c; font-size: 11px; font-style: italic; margin-left: 4px; font-weight: 700; }
.m-item .m-num { color: #9aa0a6; margin-left: 4px; }
.m-group { height: 36px; display: flex; align-items: center; padding: 0 8px; font-size: 14px; color: var(--text); cursor: pointer; border-radius: 7px; }
.m-group:hover { background: #f5f6f8; }
.m-group .g-caret {
  width: 16px; height: 16px; margin-right: 8px; border-radius: 50%;
  display: flex; align-items: center; justify-content: center;
  color: #8792a2; background: #f0f2f6;
}
.m-group .g-caret svg { width: 7px; height: 7px; transition: transform .15s; }
.m-group.open .g-caret svg { transform: rotate(90deg); }
.m-sub { display: none; }
.m-group.open + .m-sub { display: block; }
.m-sub .m-item { padding-left: 14px; }
.menu-panel .panel-foot {
  height: 40px; border-top: 1px solid #f0f1f3; display: flex; align-items: center; justify-content: space-between; padding: 0 10px; color: #7b7e86;
}
.menu-panel .panel-foot svg { width: 16px; height: 16px; }
.panel-action {
  width: 28px; height: 28px; border: 0; border-radius: 4px; background: transparent; color: inherit;
  display: flex; align-items: center; justify-content: center; cursor: pointer;
}
.panel-action:hover { color: var(--blue); background: #eef4ff; }
.panel-action svg { transition: transform .18s ease; }
/* 收起态 58 + 右侧 12px 间距 = 70,正文起点保持 134 不变 */
.menu-panel.collapsed { width: 58px; margin-right: 0; padding-left: 8px; padding-right: 8px; }
.menu-panel.collapsed h1 { text-align: center; margin-left: 0; margin-right: 0; }
.menu-panel.collapsed .menu-search-row { justify-content: center; }
.menu-panel.collapsed .ms-input,
.menu-panel.collapsed .m-lbl,
.menu-panel.collapsed .m-new,
.menu-panel.collapsed .m-num { display: none; }
.menu-panel.collapsed .ms-plus { flex: 0 0 30px; }
.menu-panel.collapsed .m-item,
.menu-panel.collapsed .m-group,
.menu-panel.collapsed .m-sub .m-item { justify-content: center; padding-left: 0; padding-right: 0; }
.menu-panel.collapsed .m-ico,
.menu-panel.collapsed .g-caret { margin: 0; }
.menu-panel.collapsed .panel-settings { display: none; }
.menu-panel.collapsed .panel-foot { justify-content: center; }
.menu-panel.collapsed [data-menu-collapse] svg { transform: rotate(180deg); }

/* ========== 内容区 ========== */
.content {
  flex: 1; min-width: 0; overflow: hidden; display: flex; flex-direction: column;
  background: linear-gradient(180deg, #f2f5fa 0%, #f0f3f9 70%, #f6efee 100%);
  /* 原站实测:筛选条 x134 起、右边界 1893;卡片左侧再内缩 8 落到 x142 */
  padding: 0 27px 12px 8px; position: relative;
}

/* .global-filter / .gf-label / .gf-box / .gf-more 已随客户列表页那条假筛选条
   一起删除(2026-08-05)—— 标签文字是复刻原站截图时抄来的演示部门名。
   .gf-tag 保留:首页仪表盘的筛选块还在用。 */
.gf-tag { background: #f2f3f5; border-radius: 4px; height: 22px; line-height: 22px; padding: 0 8px; font-size: 12px; color: var(--text); flex: none; }

/* ========== 列表页 ========== */
.list-card {
  flex: 1; min-height: 0; background: #fff; border-radius: 8px; display: flex; flex-direction: column; overflow: hidden;
}
/* 原站实测:页签条 y97 高44,页签自身 28 高、无圆角 */
.lc-head { flex: none; display: flex; align-items: center; padding: 16px 8px 0 14px; gap: 4px; }
.lc-head .lc-title { font-size: 15px; font-weight: 700; flex: none; }
/* 标题→页签之间原站实测只有 10px */
.lc-head .lc-sep { width: 1px; height: 16px; background: var(--border); margin: 0 0 0 1px; flex: none; }
/* 原站页签之间无间距(靠各自 0 12 的内边距分隔) */
.view-tabs { display: flex; align-items: center; gap: 0; flex: 1; min-width: 0; overflow: hidden; }
.view-tab {
  height: 28px; line-height: 28px; padding: 0 12px; border: 0; border-radius: 0;
  font-size: 13px; color: var(--text); cursor: pointer; white-space: nowrap; flex: none;
  background: #fff;
}
.view-tab.cur { color: var(--green); border-color: var(--green); background: #fff; font-weight: 600; }
.view-tab:hover:not(.cur) { background: #f5f6f8; }
.view-tab.more { padding: 0 8px; color: #545861; letter-spacing: 2px; }
.lc-btns { display: flex; gap: 8px; flex: none; }
/* 原站实测:50×28、无描边、内边距 0 12、次级底色 #f2f4fb */
.crm-btn {
  height: 28px; line-height: 28px; padding: 0 12px; border-radius: 6px; font-size: 13px; cursor: pointer;
  border: 0; background: #f2f4fb; color: var(--text); white-space: nowrap;
}
.crm-btn:hover { background: #e8ebf5; }
.crm-btn.primary { background: var(--green); border-color: var(--green); color: #fff; }
.crm-btn.primary:hover { background: var(--green-dark); }
.crm-btn.icon-btn { padding: 0 12px; color: #545861; }

/* 筛选行 */
.lc-filter { flex: none; display: flex; align-items: center; padding: 4px 14px 10px; gap: 10px; }
.lc-filter .f-select {
  height: 30px; min-width: 150px; border: 1px solid var(--border); border-radius: 6px;
  display: flex; align-items: center; justify-content: space-between; padding: 0 10px; font-size: 13px; cursor: pointer;
}
.lc-filter .f-select .caret { border: 4px solid transparent; border-top-color: #9aa0a6; margin-top: 4px; }
.lc-filter .f-btn {
  height: 30px; border: 1px solid var(--border); border-radius: 6px; padding: 0 12px; font-size: 13px;
  display: flex; align-items: center; gap: 5px; cursor: pointer; color: var(--text); white-space: nowrap; flex: none;
}
.lc-filter .f-btn svg { width: 14px; height: 14px; }
.lc-filter .f-select { white-space: nowrap; flex: none; }
.lc-filter .f-search {
  height: 30px; flex: none; width: 300px; border: 1px solid var(--border); border-radius: 6px;
  display: flex; align-items: center; padding: 0 0 0 10px;
}
.lc-filter .f-search .fs-field { display: flex; align-items: center; gap: 5px; padding-right: 8px; border-right: 1px solid var(--border); font-size: 13px; color: var(--text); cursor: pointer; flex: none; }
.lc-filter .f-search input { border: 0; flex: 1; min-width: 0; padding: 0 8px; font-size: 13px; }
.lc-filter .f-search input::placeholder { color: #b8bcc2; }
.lc-filter .f-search .fs-ico { padding: 0 10px; color: #9aa0a6; }
.lc-filter .f-space { flex: 1; }
.view-icons { display: flex; align-items: center; gap: 2px; }
.view-icons .vi {
  width: 28px; height: 28px; border-radius: 6px; display: flex; align-items: center; justify-content: center;
  color: #545861; cursor: pointer;
}
.view-icons .vi:hover { background: #f5f6f8; }
.view-icons .vi.cur { color: var(--green); background: var(--green-light); }
.view-icons .vi svg { width: 16px; height: 16px; }
.lc-filter .f-tools { display: flex; align-items: center; gap: 2px; margin-left: 6px; }

/* 表格 */
.lc-table-wrap { flex: 1; min-height: 0; overflow: auto; position: relative; isolation: isolate; }
.crm-watermark {
  position: absolute; inset: 0; z-index: 3; pointer-events: none;
  background-repeat: repeat; background-position: 0 0;
}
.lc-table-wrap::-webkit-scrollbar { width: 8px; height: 8px; }
.lc-table-wrap::-webkit-scrollbar-thumb { background: #d9dbde; border-radius: 4px; }
.lc-table { border-collapse: separate; border-spacing: 0; min-width: 100%; }
/* 表头/单元格:数值取自原站计算样式实测(font-weight 700、line-height 19px、行高 30/36px) */
.lc-table th {
  position: sticky; top: 0; background: #fff; z-index: 2;
  height: 30px; padding: 0 12px; font-size: 13px; font-weight: 700; color: var(--text-2);
  line-height: 19px; text-align: left; white-space: nowrap; border-bottom: 1px solid var(--border);
}
.lc-table th .th-inner { display: flex; align-items: center; gap: 4px; }
.lc-table th svg { width: 12px; height: 12px; color: #b8bcc2; }
.lc-table td {
  height: 36px; padding: 0 12px; font-size: 13px; color: #2a304d; line-height: 19px;
  white-space: nowrap;
  border-bottom: 1px solid #f0f1f3; max-width: 235px; overflow: hidden; text-overflow: ellipsis;
}
/* 数据列宽区间对齐原站实测的 [101,235](原站列宽是前端自适应算出来的,
   接口里 visibleFieldsWidth 全为 null,拿不到逐列精确值,这里只对齐上下界) */
.lc-table th:not(.col-check):not(.col-pin):not(.col-op),
.lc-table td:not(.col-check):not(.col-pin):not(.col-op) { min-width: 101px; max-width: 235px; }
.lc-table tr:hover td { background: #f7f9fa; }
.lc-table .cell-link { color: var(--link); line-height: 19px; cursor: pointer; }
.lc-table .cell-link:hover { text-decoration: underline; }
/* 前置两列宽度取自原站实测(35 / 57) */
.lc-table .col-check { width: 35px; min-width: 35px; text-align: center; padding: 0 8px; }
.lc-table .col-pin { width: 57px; min-width: 57px; padding: 0 4px; color: #b8bcc2; text-align: center; }
/* 图标本身仍是 14px —— 列加宽到 57 后必须限死,否则 SVG 撑满单元格把行高顶到 55 */
.lc-table .col-pin svg { width: 14px; height: 14px; }
/* 操作列固定在右侧 —— 与原站一致(实测 x1801 不随横向滚动) */
.lc-table td.col-op, .lc-table th.col-op {
  position: sticky; right: 0; width: 84px; min-width: 84px; background: #fff; z-index: 3;
  box-shadow: -6px 0 8px -6px rgba(0,0,0,.08);
}
.lc-table th.col-op { z-index: 4; }
.lc-table tr:hover td.col-op { background: #f7f9fa; }
.lc-table input[type=checkbox] { width: 14px; height: 14px; accent-color: var(--green); cursor: pointer; }
.owner-cell { display: flex; align-items: center; gap: 6px; }
.owner-avatar {
  width: 22px; height: 22px; border-radius: 50%; flex: none; color: #fff; font-size: 11px;
  display: flex; align-items: center; justify-content: center;
}
.tag-pill { display: inline-block; height: 22px; line-height: 22px; padding: 0 10px; border-radius: 11px; font-size: 12px; }
.pill-orange { background: #fff1e3; color: #ff8a00; }
.pill-green-solid { background: #30c776; color: #fff; }
.pill-blue-solid { background: #368bff; color: #fff; }
.pill-red-solid { background: #eb2f96; color: #fff; }
.pill-gray { background: #f2f3f5; color: #545861; }
.pill-blue { background: #e8f2ff; color: #368bff; }
.pill-green { background: #e9f9f0; color: #22b365; }

/* 底部分页 */
.lc-foot {
  flex: none; border-top: 1px solid var(--border); display: flex; align-items: center;
  padding: 8px 14px; gap: 14px; font-size: 12px; color: var(--text-2); flex-wrap: nowrap; overflow: hidden;
}
.lc-foot b { color: var(--text); font-weight: 600; }
.lc-foot .sum-item { flex: none; }
.lc-foot .foot-space { flex: 1; }
.lc-foot .total-txt { flex: none; }
.lc-foot .exact { color: var(--link); cursor: pointer; flex: none; }
.pager { display: flex; align-items: center; gap: 6px; flex: none; }
.pager .pg-cur { color: var(--text); }
.pager .pg-btn {
  width: 26px; height: 26px; border: 1px solid var(--border); border-radius: 6px; background: #fff;
  display: flex; align-items: center; justify-content: center; cursor: pointer; color: #545861;
}
.pager .pg-btn:hover { border-color: var(--green); color: var(--green); }

/* ========== 首页仪表盘 ========== */
.home-scroll {
  flex: 1; min-height: 0; overflow-y: auto;
  margin: 0 -27px 0 -8px; padding-left: 12px;
}
.home-scroll::-webkit-scrollbar { width: 8px; }
.home-scroll::-webkit-scrollbar-thumb { background: #d9dbde; border-radius: 4px; }
.home-topfilter {
  background: #fff; border-radius: 8px; height: 52px; display: flex; align-items: center; padding: 0 16px; margin-bottom: 12px;
}
.home-topfilter .htf-item { display: flex; align-items: center; gap: 6px; font-size: 13px; color: var(--text); margin-right: 28px; cursor: pointer; }
.home-topfilter .htf-item svg { width: 15px; height: 15px; color: #545861; }
.home-topfilter .caret { border: 4px solid transparent; border-top-color: #9aa0a6; margin-top: 4px; }
.home-topfilter .htf-right { margin-left: auto; display: flex; align-items: center; gap: 4px; font-size: 13px; cursor: pointer; }
.home-card { background: #fff; border-radius: 8px; padding: 16px; margin-bottom: 12px; }
.home-card .hc-title { font-size: 15px; font-weight: 700; display: flex; align-items: center; gap: 6px; }
.crm-home-section { width: 100%; box-sizing: border-box; overflow: hidden; }
.home-tools-card { height: 190px; padding: 14px 12px 12px; }
.home-tools-card > .hc-title { height: 18px; line-height: 18px; }
.tools-row {
  height: 144px; display: flex; align-items: flex-start; justify-content: space-around;
  padding: 14px 0 0;
}
.tool-item { display: flex; flex-direction: column; align-items: center; cursor: pointer; }
.tool-item .t-ico { width: 60px; height: 60px; border-radius: 50%; display: flex; align-items: center; justify-content: center; margin-bottom: 10px; }
.tool-item .t-ico svg { width: 28px; height: 28px; }
.tool-item .t-lbl { font-size: 13px; color: var(--text); display: flex; align-items: center; gap: 4px; }
.tool-item .t-lbl .caret { border: 4px solid transparent; border-top-color: #9aa0a6; margin-top: 4px; }
.t-ico.blue { background: rgb(244, 240, 253); color: #7b56c9; }
.t-ico.green { background: rgb(240, 255, 244); color: #30c776; }
.t-ico.yellow { background: rgb(255, 247, 230); color: #f7a000; }
.stat-grid {
  width: 1262px; margin: 0; display: grid; grid-template-columns: 1fr 1fr;
  gap: 20px 19px; padding: 20px 10px 0; max-height: 216px; overflow: hidden;
}
.stat-card {
  height: 56px; border-radius: 16px; display: flex; align-items: center; padding: 0 8px 0 13px; color: #fff; font-size: 14px;
  white-space: nowrap; overflow: hidden;
}
.stat-card svg { width: 22px; height: 22px; flex: none; opacity: .9; }
.stat-card > span:not(.sc-num) { line-height: 21px; }
.stat-card .sc-num { margin-left: auto; font-size: 24px; line-height: 36px; font-weight: 700; padding-left: 12px; }
.sc-blue { background: rgb(45, 98, 255); }
.sc-purple { background: rgb(144, 104, 253); }
.sc-orange { background: rgb(255, 186, 105); }
.sc-green { background: rgb(101, 201, 123); }
.sc-teal { background: rgb(93, 218, 197); }
.sc-slate { background: rgb(124, 155, 233); }
.sc-red { background: rgb(241, 131, 131); }
.sc-cyan { background: rgb(104, 191, 212); }
.sc-violet { background: rgb(184, 154, 255); }
.sc-num-red { color: #ff3b30; }
/* 9 个统计卡:3列×3行(与原版一致) */
.stat-grid { grid-template-columns: repeat(3, 1fr); max-height: none; }
.stat-grid[hidden], .brief-table-wrap[hidden], .brief-pop[hidden] { display: none !important; }

/* 销售简报工具条 */
.brief-card { position: relative; overflow: visible; height: 296px; padding: 16px 12px; }
.brief-titlebar { min-height: 24px; position: relative; }
.brief-title { white-space: nowrap; align-self: flex-start; line-height: 22px; }
.brief-title-caret { color: #9aa0a6; display: flex; width: 10px; height: 12px; }
.brief-title-caret svg { width: 10px; height: 10px; }
.brief-tools {
  position: relative; margin-left: auto; display: flex; align-items: center; gap: 4px;
  color: #545861; height: 26px; z-index: 25;
}
.brief-tools-extra { display: none; align-items: center; gap: 4px; }
.brief-tools.brief-tools-open .brief-tools-extra { display: flex; }
.brief-tools button {
  appearance: none; font: inherit; color: inherit; background: transparent; border: 0;
  margin: 0; padding: 0; cursor: pointer;
}
.brief-pill {
  height: 24px; background: #f4f5f8 !important; border-radius: 4px !important;
  padding: 0 10px !important; font-size: 12px !important; font-weight: 400 !important;
  line-height: 24px; overflow: hidden; text-overflow: ellipsis; white-space: nowrap;
}
.brief-pill:hover { background: #eef0f4 !important; }
.brief-owner { width: 102px; }
.brief-period { width: 48px; }
.brief-icon {
  width: 24px; height: 24px; display: flex; align-items: center; justify-content: center;
  border-radius: 4px !important;
}
.brief-icon:hover { background: #f3f5f7 !important; color: #30c776; }
.brief-icon svg { width: 16px; height: 16px; display: block; }
.brief-filter { margin-left: 2px !important; }
.brief-close { display: none; }
.brief-icon.is-spinning svg { animation: brief-spin .65s linear infinite; }
@keyframes brief-spin { to { transform: rotate(360deg); } }

.brief-pop {
  position: absolute; top: 31px; background: #fff; border: 1px solid #e5e8ed;
  border-radius: 6px; box-shadow: 0 6px 20px rgba(29,39,55,.16); z-index: 80;
  padding: 6px; font-size: 12px; font-weight: 400; color: #30343b;
}
.brief-pop button {
  width: 100%; min-height: 32px; padding: 0 10px !important; display: flex; align-items: center;
  gap: 8px; border-radius: 4px !important; text-align: left;
}
.brief-pop button:hover, .brief-pop button.cur { background: #eefaf3 !important; color: #22b365; }
.brief-pop button svg { width: 15px; height: 15px; }
.brief-owner-pop { right: 142px; width: 170px; }
.brief-period-pop { right: 112px; width: 112px; }
.brief-more-pop { right: 24px; width: 128px; }
.brief-filter-pop { right: 0; width: 180px; padding: 0; overflow: hidden; }
.brief-filter-pop-title { height: 34px; padding: 0 12px; display: flex; align-items: center; color: #8a919a; }
.brief-filter-pop button {
  height: 40px; padding: 0 12px !important; border-top: 1px solid #edf0f3 !important;
  border-radius: 0 !important; color: #5c636c !important; justify-content: space-between;
}
.brief-filter-pop button:hover { background: #f7f8fa !important; }
.brief-filter-pop button em {
  max-width: 110px; overflow: hidden; text-overflow: ellipsis; white-space: nowrap;
  color: #90969e; font-style: normal;
}
.brief-pop-title { padding: 5px 10px; color: #8b929c; }
.brief-metric-pop { right: 74px; width: 370px; padding: 14px 16px; line-height: 1.65; }
.brief-metric-list { display: grid; grid-template-columns: 1fr 1fr; gap: 2px 18px; padding-bottom: 10px; border-bottom: 1px solid #eef0f3; }
.brief-metric-pop h4 { font-size: 13px; margin: 10px 0 2px; }
.brief-metric-pop p { margin: 0; color: #737a84; }

.brief-table-wrap { padding-top: 14px; }
.brief-table-wrap table { width: 100%; border-collapse: collapse; font-size: 13px; }
.brief-table-wrap th {
  background: #f6f7f9; color: #737a84; font-weight: 500; text-align: left;
  padding: 10px 14px; border: 1px solid #e7e9ed;
}
.brief-table-wrap td { padding: 10px 14px; border: 1px solid #e7e9ed; }
.brief-table-wrap td:nth-child(2) { font-weight: 700; color: #30343b; }

.brief-backdrop { position: fixed; inset: 0; background: rgba(28,36,44,.54); z-index: 1000; }
body.brief-modal-open { overflow: hidden; }
.brief-card.brief-fullscreen {
  position: fixed; inset: 40px 60px 42px; z-index: 1001; width: auto !important; margin: 0; padding: 0 40px 40px;
  border-radius: 4px; box-shadow: 0 4px 18px rgba(0,0,0,.18); overflow: auto;
}
.brief-fullscreen .brief-titlebar { height: 84px; min-height: 84px; }
.brief-fullscreen .brief-tools-extra { display: flex; }
.brief-fullscreen .brief-filter,
.brief-fullscreen [data-brief-metric],
.brief-fullscreen [data-brief-full] { display: none; }
.brief-fullscreen .brief-close { display: flex; }
.brief-fullscreen .stat-grid { padding: clamp(60px, 22vh, 180px) 16px 0; gap: 18px 20px; }
.brief-fullscreen .stat-card { height: 56px; }
.brief-fullscreen.brief-table-view .brief-table-wrap { padding: 70px 16px 0; }

@media (max-width: 900px) {
  .brief-card.brief-fullscreen { inset: 20px; padding: 0 24px 24px; }
  .brief-owner { width: 82px; }
  .brief-tools { gap: 1px; }
}

/* ========== 图表 ========== */
/* 原站仪表盘是 12 栅格,每个图表块自带 w(1~12),这里按 span 还原 */
.chart-grid { display: grid; grid-template-columns: repeat(12, 1fr); gap: 12px; padding-top: 14px; }
.ch-card { border: 1px solid var(--border); border-radius: 8px; padding: 12px 14px; background: #fff; }
.ch-tit {
  min-height: 22px; display: flex; align-items: center; gap: 5px; position: relative;
  font-size: 16px; line-height: 22px; font-weight: 700; margin-bottom: 8px;
}
.ch-ico {
  width: 20px; height: 20px; border: 1px solid currentColor; border-radius: 50%;
  position: absolute; left: -25px; top: 1px; background: #fff; color: var(--green);
  display: flex; align-items: center; justify-content: center; font-size: 12px; line-height: 20px;
}
.ch-more { margin-left: 0; color: #69727d; cursor: pointer; font-size: 19px; font-weight: 400; }
.ch-body { min-height: 120px; }
/* 新增图表类型:仪表盘 / 雷达 / 地区分布 / 指标卡组 / 数据表 */
.ch-gauge-num { font-size: 18px; font-weight: 700; fill: var(--text); }
.ch-map { width: 100%; }
.ch-map-lbl { font-size: 8px; fill: #4a5568; }
.ch-cards { display: flex; flex-wrap: wrap; gap: 10px; }
.ch-cardlet { flex: 1 1 120px; min-width: 110px; background: #f7f9fc; border-radius: 6px; padding: 12px 14px;
  display: flex; flex-direction: column; gap: 6px; }
.ch-cardlet .cl-lbl { font-size: 12px; color: var(--text-2); }
.ch-cardlet .cl-num { font-size: 20px; font-weight: 700; color: var(--text); }
.ch-tablewrap { overflow-x: auto; }
.ch-table { width: 100%; border-collapse: separate; border-spacing: 0; }
.ch-table th { height: 30px; font-size: 12px; font-weight: 700; color: var(--text-2); text-align: left;
  white-space: nowrap; border-bottom: 1px solid var(--border); }
.ch-table td { height: 32px; font-size: 12px; color: #2a304d; white-space: nowrap;
  border-bottom: 1px solid #f0f1f3; }
.ch-empty-td { color: var(--text-2); text-align: center; }
.ch-svg { width: 100%; height: 190px; display: block; }
.ch-axis { font-size: 10px; fill: #9aa0a6; }
.ch-val { font-size: 10px; fill: #545861; font-weight: 600; }
.ch-seg { font-size: 9px; fill: #fff; font-weight: 600; }
.ch-rate { font-size: 10px; fill: var(--green); }
.ch-legend { display: flex; flex-wrap: wrap; gap: 4px 14px; font-size: 11px; color: var(--text-2); margin-bottom: 6px; justify-content: center; }
.ch-legend span { display: flex; align-items: center; gap: 5px; }
.ch-legend i { width: 8px; height: 8px; border-radius: 2px; display: inline-block; }
.ch-legend-v { flex-direction: column; justify-content: flex-start; gap: 7px; margin: 0; flex: 1; }
.ch-legend-v b { color: var(--text); }
.ch-legend-v em { color: #9aa0a6; font-style: normal; }
.ch-donut-wrap { display: flex; align-items: center; gap: 14px; }
.ch-donut { width: 168px; height: 168px; flex: none; }
.ch-dnum { font-size: 20px; font-weight: 700; fill: var(--text); }
.ch-dlbl { font-size: 11px; fill: #9aa0a6; }
.ch-empty, .ch-loading { text-align: center; color: #9aa0a6; font-size: 12px; padding: 40px 0; }
.ch-loading { grid-column: 1 / -1; }

/* ========== 顶栏全局搜索 ========== */
.topbar .search-wrap { position: relative; }
.gs-panel {
  position: absolute; top: 36px; left: 0; width: 420px; background: #fff; border-radius: 8px;
  box-shadow: 0 6px 24px rgba(0,0,0,.14); z-index: 120; max-height: 440px; overflow-y: auto; padding: 6px 0;
}
.gs-group-tit { font-size: 12px; color: #9aa0a6; padding: 8px 14px 5px; display: flex; align-items: center; }
.gs-group-tit b { color: var(--text); margin-right: 6px; }
.gs-more { margin-left: auto; color: var(--link); cursor: pointer; }
.gs-item { display: flex; align-items: center; gap: 8px; padding: 8px 14px; cursor: pointer; font-size: 13px; }
.gs-item:hover { background: #f5f7fa; }
.gs-item .gs-name { flex: 1; min-width: 0; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; color: var(--link); }
.gs-item .gs-owner { color: var(--text-2); font-size: 12px; flex: none; }
.gs-empty { padding: 24px; text-align: center; color: #9aa0a6; font-size: 13px; }
.gs-hint { padding: 8px 14px; font-size: 12px; color: #9aa0a6; border-top: 1px solid #f2f4f7; }
mark { background: #fff3cd; color: inherit; padding: 0 1px; }
.crm-dashboard-section {
  height: 848px; padding: 8px 12px 20px; background: #fff; overflow: hidden;
}
.home-tabs-card .ht-tabs {
  height: 47px; display: flex; align-items: center; gap: 22px;
  border-bottom: 1px solid var(--border); padding: 0 24px; white-space: nowrap; position: relative;
}
.home-tabs-card .ht-tab { height: 47px; line-height: 47px; font-size: 14px; cursor: pointer; color: var(--text); position: relative; }
.home-tabs-card .ht-tab[hidden] { display: none; }
.home-tabs-card .ht-tab.cur { color: var(--link); font-weight: 600; }
.home-tabs-card .ht-tab.cur::after { content: ''; position: absolute; left: 0; right: 0; bottom: -1px; height: 2px; background: var(--link); }
.home-tabs-card .ht-more-wrap { height: 47px; display: flex; align-items: center; position: relative; }
.home-tabs-card .ht-more-wrap[hidden] { display: none; }
.home-tabs-card .ht-more {
  height: 47px; padding: 0; border: 0; background: transparent; color: #545861;
  font: inherit; font-size: 14px; cursor: pointer; display: flex; align-items: center; gap: 5px;
}
.home-tabs-card .ht-more.cur { color: var(--link); font-weight: 600; }
.home-tabs-card .ht-more .caret { border-top-color: currentColor; }
.home-tabs-card .ht-more-pop {
  position: absolute; z-index: 40; top: 42px; left: -14px; width: 176px; padding: 6px 0;
  background: #fff; border-radius: 6px; box-shadow: 0 5px 18px rgba(22,34,54,.16);
}
.home-tabs-card .ht-more-pop[hidden] { display: none; }
.home-tabs-card .ht-more-pop button {
  width: 100%; height: 34px; padding: 0 14px; border: 0; background: #fff;
  color: #3d424a; font-size: 13px; text-align: left; cursor: pointer;
}
.home-tabs-card .ht-more-pop button:hover { background: #f5f7fa; }
.home-tabs-card .ht-more-pop button.cur { color: var(--link); background: #f3f8ff; }
.home-tabs-card .ht-tab-icons {
  margin-left: auto; display: flex; align-items: center; gap: 4px; color: #545861;
}
.home-tabs-card .ht-icon-btn {
  width: 28px; height: 30px; padding: 5px; border: 1px solid #d4d8dd; border-radius: 5px;
  background: #fff; color: #535a63; cursor: pointer; display: inline-flex; align-items: center; justify-content: center;
}
.home-tabs-card .ht-icon-btn svg { width: 18px; height: 18px; }
.crm-dashboard-section.dashboard-fullscreen {
  position: fixed; inset: 0; z-index: 250; width: 100% !important; height: 100% !important;
  margin: 0 !important; border-radius: 0; background: #fff;
}
.crm-dashboard-section.dashboard-fullscreen #dashWrap { height: calc(100vh - 64px); }
.crm-dashboard-section.dashboard-fullscreen .dashboard-chart-scroll { height: calc(100vh - 111px); }
.crm-dashboard-section #dashWrap { height: 773px; overflow: hidden; padding: 0; }
.roi-banner {
  height: 47px; margin: 0; border-radius: 0; background: linear-gradient(135deg,#e8ecfb 0%,#dfe5f8 45%,#eef1fc 100%);
  padding: 0; text-align: center; position: relative; overflow: hidden;
  display: flex; align-items: center; justify-content: center;
}
.roi-banner h2 { font-size: 24px; color: #20242c; letter-spacing: 2px; position: relative; z-index: 1; }
.roi-banner .banner-art { position: absolute; inset: 0; width: 100%; height: 100%; }
.dashboard-chart-scroll {
  height: 726px; overflow-y: auto; overflow-x: hidden; background: #f0f1ff;
  scrollbar-width: thin; scrollbar-color: #cfd2d9 transparent;
}
.dashboard-chart-scroll::-webkit-scrollbar { width: 7px; }
.dashboard-chart-scroll::-webkit-scrollbar-thumb { background: #cfd2d9; border-radius: 4px; }
.roi-fields { display: flex; gap: 12px; padding: 14px 12px 4px; }
.roi-field { flex: 1; border: 1px solid var(--border); border-radius: 6px; height: 34px; display: flex; align-items: center; padding: 0 10px; font-size: 13px; color: var(--text-2); gap: 8px; background:#fff; }
.roi-field .gf-tag { font-size: 12px; }

/* 原版首页在仪表盘之后还有九个独立纵向区段。固定高度来自 1920×902 原站逐段测量。 */
.home-rank-section { height: 363px; padding: 12px; }
.home-lead-section { height: 350px; padding: 12px; position: relative; }
.home-funnel-section { height: 416px; padding: 12px; }
.home-payback-section { height: 416px; padding: 12px; }
.home-calendar-section { height: 321px; padding: 12px; }
.home-assistant-section { height: 357px; padding: 12px; }
.home-stat-section { height: 232px; padding: 12px; position: relative; }
.home-tools-footer { height: 190px; margin-bottom: 0; }

.home-widget-head {
  height: 30px; display: flex; align-items: flex-start; position: relative;
  color: #22262d;
}
.home-widget-title { font-size: 16px; line-height: 22px; font-weight: 700; display: flex; align-items: center; gap: 5px; }
.home-widget-arrow { color: #9aa0a6; font-size: 21px; font-weight: 400; line-height: 18px; }
.home-widget-help {
  width: 16px; height: 16px; border: 1px solid #a8adb5; border-radius: 50%;
  color: #7b818a; font-size: 11px; line-height: 15px; text-align: center; font-weight: 400;
}
.home-widget-actions { margin-left: auto; display: flex; align-items: center; gap: 7px; }
.home-widget-actions button,
.home-section-filter,
.calendar-head button,
.calendar-month button,
.lead-source {
  border: 0; background: transparent; color: #545861; cursor: pointer; font: inherit;
}
.home-link-btn { color: #4d99ec !important; margin-right: auto; }
.home-filter-btn {
  height: 25px; min-width: 74px; padding: 0 10px !important; border-radius: 3px !important;
  background: #f4f5f8 !important; color: #454a52 !important;
}
.home-icon-btn { width: 22px; height: 24px; font-size: 15px !important; color: #6b727b !important; }
.home-section-filter { position: absolute; right: 0; top: 0; font-size: 18px; color: #6d747e; }

.rank-table-head {
  height: 38px; display: grid; grid-template-columns: 20% 20% 60%; align-items: center;
  padding: 0 24px; border-bottom: 1px solid #e7e9ed; color: #545861; font-size: 13px;
}
.rank-table-head span:nth-child(2) { text-align: center; }
.rank-rows { height: 126px; }
.rank-row {
  height: 42px; display: grid; grid-template-columns: 20% 20% 60%; align-items: center;
  padding: 0 24px; border-bottom: 1px solid #eef0f3; font-size: 14px;
}
.rank-no b { font-size: 20px; margin-left: 5px; font-weight: 500; }
.rank-no b.up { color: #f24c4c; }
.rank-no b.down { color: #1dbb84; }
.rank-name { text-align: center; }
.rank-value { position: relative; height: 40px; padding-top: 4px; }
.rank-value em { display: block; height: 19px; font-style: normal; }
.rank-value i {
  display: block; height: 4px; border-radius: 2px; background: #33c486; max-width: 100%;
}
.rank-note {
  height: 140px; display: flex; align-items: center; justify-content: center;
  color: #666c75; font-size: 12px;
}

.lead-source {
  position: absolute; left: 98px; top: 12px; color: #438cd9; font-size: 13px;
}
.lead-conversion-list { padding-top: 8px; }
.lead-conversion-row {
  height: 57px; display: flex; align-items: center; padding: 0 12px;
}
.lead-conversion-icon {
  width: 28px; font-size: 21px; line-height: 1; font-weight: 700; flex: none;
}
.lead-conversion-label { font-size: 14px; color: #3e434b; display: flex; flex-direction: column; gap: 5px; }
.lead-conversion-label small { font-size: 12px; color: #545861; }
.lead-conversion-value { margin-left: auto; font-size: 18px; color: #3b4048; }

.home-funnel-visual { height: 330px; display: flex; align-items: center; padding: 8px 56px 0 55px; }
.funnel-stack { width: 72%; height: 304px; display: flex; flex-direction: column; align-items: center; }
.funnel-band {
  width: calc(100% - (var(--inset) * 2)); height: 44px; flex: none; background: var(--band);
  clip-path: polygon(0 0,100% 0,calc(100% - 42px) 100%,42px 100%);
  margin-top: -1px;
}
.funnel-labels {
  width: 28%; height: 304px; display: flex; flex-direction: column; justify-content: flex-start;
  padding-top: 2px; color: #3f444b; font-size: 12px;
}
.funnel-labels span { height: 44px; line-height: 44px; white-space: nowrap; }
.funnel-total { margin-top: -20px; color: #60656e; font-size: 12px; }

.payback-summary {
  height: 48px; display: flex; justify-content: center; gap: 30px; align-items: center;
  color: #565c65; font-size: 12px;
}
.payback-summary span { display: flex; flex-direction: column; align-items: center; }
.payback-summary b { font-size: 16px; color: #30343a; }
.payback-gauge { height: 310px; position: relative; display: flex; flex-direction: column; align-items: center; }
.payback-gauge svg { width: 360px; height: 230px; margin-top: -5px; }
.payback-gauge strong { position: absolute; top: 210px; font-size: 19px; }
.payback-gauge span { position: absolute; top: 246px; color: #5f6570; }

.calendar-head, .calendar-month { height: 28px; display: flex; align-items: center; }
.calendar-head strong { font-size: 16px; }
.calendar-head strong span { color: #7b828b; font-size: 22px; margin-left: 3px; }
.calendar-head button { margin-left: auto; font-size: 19px; }
.calendar-month { height: 32px; }
.calendar-month strong { font-size: 13px; }
.calendar-month strong span { font-size: 12px; }
.calendar-month div { margin-left: auto; display: flex; gap: 18px; }
.calendar-month button { font-size: 24px; color: #8b919a; }
.calendar-week, .calendar-grid { display: grid; grid-template-columns: repeat(7, 1fr); text-align: center; }
.calendar-week { height: 27px; color: #9297a0; }
.calendar-grid { height: 205px; grid-template-rows: repeat(6, 1fr); align-items: center; font-size: 13px; }
.calendar-grid span { justify-self: center; width: 26px; height: 26px; line-height: 26px; border-radius: 50%; }
.calendar-grid .muted { color: #d3d6db; }
.calendar-grid .today { color: #fff; background: #32c783; }
.calendar-grid .has-event { position: relative; box-shadow: inset 0 0 0 1px #32c783; cursor: pointer; }
.calendar-grid .has-event::after { content: attr(data-event-count); position: absolute; right: -7px; top: -7px;
  min-width: 14px; height: 14px; padding: 0 2px; border-radius: 8px; line-height: 14px; font-size: 9px;
  color: #fff; background: #32c783; }

.assistant-list { padding-top: 6px; }
.assistant-row { height: 55px; display: flex; align-items: center; padding: 0 12px; font-size: 14px; }
.assistant-row > span { width: 28px; font-size: 18px; }
.assistant-row em { font-style: normal; color: #4d525b; }
.assistant-row b { margin-left: auto; font-size: 18px; font-weight: 400; }
.assistant-row b i { font-style: normal; font-size: 20px; color: #454a52; }

.order-stat-center {
  position: absolute; inset: 52px 0 0; display: flex; flex-direction: column;
  align-items: center; color: #343941;
}
.order-stat-center > strong { font-size: 25px; line-height: 31px; }
.order-stat-center > span { font-size: 13px; }
.order-stat-center > div { display: flex; gap: 26px; margin-top: 15px; }
.order-stat-center em { display: flex; flex-direction: column; align-items: center; font-style: normal; font-size: 12px; }
.order-stat-center b { font-size: 13px; }

/* ========== 提醒/待办/信息等简单页 ========== */
.plain-card { flex: 1; min-height: 0; background: #fff; border-radius: 8px; display: flex; flex-direction: column; overflow: hidden; }
.plain-head { flex: none; padding: 14px 16px; font-size: 15px; font-weight: 700; border-bottom: 1px solid var(--border); display: flex; align-items: center; gap: 14px; }
.plain-tabs { display: flex; gap: 20px; font-weight: 400; font-size: 13px; }
.plain-tabs .pt { cursor: pointer; padding: 2px 0; color: var(--text-2); }
.plain-tabs .pt.cur { color: var(--green); font-weight: 600; border-bottom: 2px solid var(--green); }
.plain-body { flex: 1; overflow: auto; }
.empty-state { display: flex; flex-direction: column; align-items: center; justify-content: center; height: 100%; color: #9aa0a6; font-size: 13px; gap: 14px; }
.empty-state svg { width: 90px; height: 90px; color: #d9dde3; }

/* 对象不存在弹窗(1:1 还原) */
/* 弹窗层级高于详情抽屉(151)与全屏表单(180) */
.fx-modal-mask { position: fixed; inset: 0; background: rgba(0,0,0,.35); z-index: 200; display: flex; align-items: center; justify-content: center; }
.fx-modal { width: 480px; background: #fff; border-radius: 8px; padding: 20px 24px; box-shadow: 0 8px 30px rgba(0,0,0,.15);
  /* 弹窗最高不超过视口 8 成,内容区自己滚 —— 名单一长就把标题栏和
     底部按钮顶出屏幕、人被困在弹窗里(2026-08-05 实测) */
  max-height: 80vh; display: flex; flex-direction: column; }
.fx-modal .fm-head { display: flex; align-items: center; justify-content: space-between; font-size: 16px; font-weight: 700; margin-bottom: 16px; flex: none; }
.fx-modal .fm-close { cursor: pointer; color: #9aa0a6; font-size: 18px; font-weight: 400; }
.fx-modal .fm-body { font-size: 13px; color: var(--text); padding-bottom: 22px; flex: 1; min-height: 0; overflow-y: auto; }
.fx-modal .fm-foot { display: flex; justify-content: flex-end; flex: none; }

/* 报表树 / 深色大屏 KPI / 查重 / 询价 / 最近使用 */
.bi-arrow { color: #9aa0a6; cursor: pointer; display: inline-block; width: 14px; }
.bi-arrow:hover { color: var(--green); }
.bi-kid td { background: #fafbfc; }
.rp-box { min-height: 220px; }
.dash-kpis { display: grid; grid-template-columns: repeat(4, 1fr); gap: 12px; margin: 0 14px 14px; }
.dk { background: #131c30; border: 1px solid #23304d; border-radius: 4px; padding: 12px 14px; text-align: center; }
.dk-n { color: #35c7a4; font-size: 20px; font-weight: 700; }
.dk-n em { font-size: 11px; font-style: normal; color: #7d8ba5; margin-left: 3px; }
.dk-l { color: #8fa0bb; font-size: 12px; margin-top: 5px; }
.dp-chart { padding: 26px 12px 10px; }
.dp-chart .ch-axis { fill: #7d8ba5; }
.dp-chart .ch-val { fill: #cdd6e6; }
.dp-chart .ch-legend { color: #8fa0bb; }
.dp-chart .ch-dnum { fill: #fff; }
.dp-chart .ch-dlbl { fill: #7d8ba5; }
.dp-chart .ch-legend-v b { color: #fff; }
.quote-out { margin-top: 14px; }

/* 查价工具（首页工具区） */
.quote-page {
  position: fixed; inset: 0; z-index: 245; background: #fff; color: #30343b;
  display: flex; flex-direction: column;
}
.quote-page-head {
  height: 68px; flex: none; display: flex; align-items: center; padding: 0 50px;
  border-bottom: 1px solid #f0f1f3; box-shadow: 0 2px 8px rgba(31,39,50,.04);
}
.quote-page-head h2 { margin: 0; font-size: 27px; line-height: 1; font-weight: 400; flex: 1; }
.quote-page-head button {
  width: 54px; height: 30px; border: 1px solid #c9cdd2; border-radius: 3px;
  background: #fff; color: #4c5158; font-size: 13px; cursor: pointer;
}
.quote-page-body { flex: 1; min-height: 0; padding: 25px 50px 0; }
.quote-tabs {
  height: 33px; display: flex; align-items: flex-start; gap: 24px;
  border-bottom: 1px solid #dfe2e6;
}
.quote-tabs button {
  height: 33px; padding: 0; border: 0; border-bottom: 3px solid transparent;
  background: transparent; color: #4c5158; font-size: 14px; cursor: pointer;
}
.quote-tabs button.cur { color: var(--link); border-bottom-color: var(--link); }
.quote-filters {
  height: 56px; margin-top: 12px; display: flex; align-items: center; gap: 22px;
}
.quote-field { display: flex; align-items: center; gap: 10px; color: #30343b; font-size: 14px; }
.quote-field > span { flex: none; }
.quote-selector { width: 280px; height: 32px; position: relative; }
.quote-selector > input {
  width: 100%; height: 32px; border: 1px solid #d6d9dd; border-radius: 6px;
  padding: 0 38px 0 10px; color: #3e434a; font-size: 13px; background: #fff; outline: none;
}
.quote-selector > input:focus { border-color: var(--link); }
.quote-selector > input::placeholder { color: #b7bbc1; }
.quote-selector > button {
  position: absolute; top: 1px; right: 1px; width: 34px; height: 30px; border: 0;
  background: transparent; color: #646a72; font-size: 21px; line-height: 30px; cursor: pointer;
}
.quote-selector-menu {
  position: absolute; left: 0; top: 36px; z-index: 3; width: 100%; max-height: 210px;
  overflow-y: auto; border: 1px solid #d9dde2; border-radius: 5px; background: #fff;
  box-shadow: 0 4px 14px rgba(31,39,50,.14); padding: 4px 0;
}
.quote-selector-menu[hidden] { display: none; }
.quote-selector-menu button {
  width: 100%; height: 34px; padding: 0 10px; border: 0; background: #fff;
  color: #3f444b; font-size: 13px; text-align: left; cursor: pointer;
}
.quote-selector-menu button:hover { background: #f3f8ff; color: var(--link); }
.quote-query {
  width: 64px; height: 32px; border: 0; border-radius: 4px; background: var(--link);
  color: #fff; font-size: 14px; cursor: pointer;
}
.quote-results {
  height: 435px; display: grid; gap: 18px; margin-top: 13px;
}
.quote-results.both { grid-template-columns: 277px minmax(0, 1fr); }
.quote-results.product { grid-template-columns: repeat(2, minmax(0, 1fr)); gap: 24px; }
.quote-results.customer { grid-template-columns: minmax(0, 1fr); }
.quote-table-box { min-width: 0; height: 435px; border: 1px solid #aeb3b9; background: #fff; }
.quote-table-scroll { width: 100%; height: 100%; overflow: auto; position: relative; }
.quote-table-scroll table {
  border-collapse: collapse; table-layout: fixed; min-width: 100%; color: #20242a; font-size: 12px;
}
.quote-results.both .quote-table-0 table { min-width: 420px; }
.quote-results.both .quote-table-1 table { min-width: 1280px; }
.quote-results.product .quote-table-0 table { min-width: 1000px; }
.quote-results.product .quote-table-1 table { min-width: 680px; }
.quote-results.customer table { min-width: 1120px; }
.quote-table-scroll th, .quote-table-scroll td {
  height: 32px; padding: 0 10px; border-right: 1px solid #eef0f2;
  border-bottom: 1px solid #e4e6e9; text-align: left; white-space: nowrap;
  overflow: hidden; text-overflow: ellipsis;
}
.quote-table-scroll th { background: #fff; font-weight: 600; }
.quote-table-scroll th:first-child { width: 100px; }
.quote-results.both .quote-table-1 th:nth-child(2) { width: 150px; }
.quote-results.both .quote-table-1 th:nth-child(3) { width: 120px; }
.quote-results.both .quote-table-1 th:nth-child(4) { width: 100px; }
.quote-results.both .quote-table-1 th:nth-child(5) { width: 120px; }
.quote-results.both .quote-table-1 th:nth-child(6),
.quote-results.both .quote-table-1 th:nth-child(7) { width: 140px; }
.quote-empty {
  position: sticky; left: 0; width: 100%; height: 377px;
  display: flex; align-items: center; justify-content: center; color: #b2b5ba; font-size: 13px;
}

/* 查价工具“＋”数据选择器 */
.quote-picker-mask {
  position: fixed; inset: 0; z-index: 270; background: rgba(24,29,36,.36);
  display: flex; align-items: center; justify-content: center;
}
.quote-picker {
  width: calc(100% - 40px); height: calc(100% - 40px); min-height: 560px;
  background: #fff; border-radius: 7px; box-shadow: 0 10px 34px rgba(19,28,39,.22);
  overflow: hidden; display: flex; flex-direction: column;
}
.quote-picker-mask.customer .quote-picker {
  width: calc(100% - 4px); height: calc(100% - 96px);
}
.quote-picker-mask.fullscreen .quote-picker {
  width: calc(100% - 4px); height: calc(100% - 4px); border-radius: 3px;
}
.quote-picker-head {
  height: 56px; flex: none; padding: 0 16px; border-bottom: 1px solid #e5e7ea;
  display: flex; align-items: center;
}
.quote-picker-head strong { flex: 1; color: #252a30; font-size: 18px; font-weight: 500; }
.quote-picker-head > div { display: flex; align-items: center; gap: 17px; }
.quote-picker-head button {
  width: 20px; height: 24px; padding: 0; border: 0; background: transparent;
  color: #69717b; font-size: 25px; line-height: 22px; cursor: pointer;
}
.quote-picker-head button:first-child:not(:last-child) { font-size: 18px; }
.quote-picker-toolbar {
  height: 56px; flex: none; padding: 0 16px; display: flex; align-items: center; gap: 10px;
  color: #32373e; font-size: 13px;
}
.quote-picker-toolbar strong { font-size: 15px; }
.quote-picker-toolbar button { font: inherit; cursor: pointer; }
.quote-picker-scope {
  height: 28px; padding: 0 2px; border: 0; background: transparent; color: #343a42;
}
.quote-picker-filter {
  height: 32px; padding: 0 12px; margin-left: 12px; border: 1px solid #ccd1d7;
  border-radius: 5px; background: #fff; color: #343a42;
}
.quote-picker-search {
  width: 350px; height: 32px; border: 1px solid #cfd3d8; border-radius: 5px;
  display: flex; align-items: center; overflow: hidden; background: #fff;
}
.quote-picker-search button {
  width: 112px; height: 30px; padding: 0 10px; border: 0; background: #fff;
  color: #363c44; text-align: left;
}
.quote-picker-search input {
  flex: 1; min-width: 0; height: 30px; padding: 0 28px 0 10px; border: 0;
  border-left: 1px solid #e3e5e8; outline: none; color: #3c424a; font-size: 13px;
}
.quote-picker-search span { width: 30px; margin-left: -30px; color: #77808a; font-size: 18px; }
.quote-picker-category { margin-left: 12px; }
.quote-picker-category-btn {
  width: 160px; height: 32px; border: 1px solid #d5d9de; border-radius: 5px;
  background: #fff; color: #444a52; text-align: left; padding: 0 10px;
}
.quote-picker-cols {
  width: 34px; height: 32px; margin-left: auto; border: 0; background: transparent;
  color: #3b424a; font-size: 20px;
}
.quote-picker-new {
  width: 50px; height: 32px; border: 0; border-radius: 5px;
  background: var(--link); color: #fff;
}
.quote-picker-table-wrap { flex: 1; min-height: 0; overflow: auto; border-top: 1px solid #dfe2e6; }
.quote-picker-table-wrap table {
  width: 1160px; min-width: 100%; border-collapse: collapse; table-layout: fixed;
  color: #30363d; font-size: 12px;
}
.quote-picker-table-wrap th,
.quote-picker-table-wrap td {
  height: 36px; padding: 0 10px; border-bottom: 1px solid #e7e9ec;
  text-align: left; white-space: nowrap; overflow: hidden; text-overflow: ellipsis;
}
.quote-picker-table-wrap th { height: 28px; background: #fff; font-weight: 600; position: sticky; top: 0; z-index: 1; }
.quote-picker-mask.customer .quote-picker-table-wrap th:nth-child(2) { width: 220px; }
.quote-picker-mask.customer .quote-picker-table-wrap th:nth-child(3) { width: 100px; }
.quote-picker-mask.customer .quote-picker-table-wrap th:nth-child(4) { width: 150px; }
.quote-picker-mask.customer .quote-picker-table-wrap th:nth-child(5),
.quote-picker-mask.customer .quote-picker-table-wrap th:nth-child(6) { width: 100px; }
.quote-picker-mask.customer .quote-picker-table-wrap th:nth-child(7) { width: 160px; }
.quote-picker-mask.customer .quote-picker-table-wrap th:nth-child(8) { width: 110px; }
.quote-picker-mask.customer .quote-picker-table-wrap th:last-child { width: 60px; }
.quote-picker-mask.product .quote-picker-table-wrap table { width: 100%; min-width: 980px; }
.quote-picker-mask.product .quote-picker-table-wrap .quote-product-mark { width: 34px; padding: 0 5px; color: #8da0ae; }
.quote-picker-mask.product .quote-picker-table-wrap th:nth-child(3) { width: 220px; }
.quote-picker-mask.product .quote-picker-table-wrap th:nth-child(4) { width: 228px; }
.quote-picker-mask.product .quote-picker-table-wrap th:nth-child(5) { width: 124px; }
.quote-picker-mask.product .quote-picker-table-wrap th:nth-child(6) { width: 130px; }
.quote-picker-mask.product .quote-picker-table-wrap th:nth-child(7) { width: 100px; }
.quote-picker-mask.product .quote-picker-table-wrap th:last-child { width: 70px; }
.quote-picker-table-wrap tr { cursor: pointer; }
.quote-picker-table-wrap tbody tr:hover { background: #f4f9ff; }
.quote-picker-table-wrap tbody tr.selected { background: #e5f3ff; }
.quote-picker-table-wrap td a { color: #2383d8; cursor: pointer; }
.quote-picker-check { width: 30px; padding: 0 8px !important; }
.quote-picker-check span {
  display: inline-flex; width: 14px; height: 14px; align-items: center; justify-content: center;
  border: 1px solid #d6dbe0; border-radius: 3px; color: var(--link); font-size: 11px;
}
.quote-picker-table-wrap em {
  min-width: 52px; height: 20px; padding: 0 7px; border-radius: 10px;
  display: inline-flex; align-items: center; justify-content: center; color: #fff; font-style: normal;
}
.quote-picker-table-wrap em.orange { background: #ff951f; }
.quote-picker-table-wrap em.green { background: #24bea0; }
.quote-picker-table-wrap em.blue { min-width: 36px; background: #22a7e8; }
.quote-product-thumb {
  width: 42px; height: 24px; display: inline-flex; align-items: center; justify-content: center;
  background: #f3f5f7; color: #98a0a9; font-size: 18px;
}
.quote-picker-foot {
  height: 52px; flex: none; padding: 0 16px; border-top: 1px solid #dfe2e6;
  display: flex; align-items: center; justify-content: flex-end; gap: 10px;
  color: #535a63; font-size: 12px;
}
.quote-picker-foot button { height: 36px; border-radius: 5px; font-size: 14px; cursor: pointer; }
.quote-picker-page {
  width: 28px; border: 1px solid #d7dbe0; background: #fff; color: #4e555e; font-size: 20px !important;
}
.quote-picker-ok { width: 62px; margin-left: 8px; border: 0; background: var(--link); color: #fff; }
.quote-picker-cancel { width: 62px; border: 1px solid #cdd2d8; background: #fff; color: #444a52; }

/* ===== 查重工具(全屏)—— 数值取自原站实测 =====
   对话框铺满视口;标题 fs28 fw500 #212b36、头高 72、左内边距 50;
   页签行 y120;内容区 1024 宽居中(x208);输入 500×34、行距 73;
   「查询」按钮 62×32,右侧「简易查重」12px 蓝色文字链 #3e84e9。 */
.dup-page { position: fixed; inset: 0; background: #fff; z-index: 210; display: flex; flex-direction: column; overflow: auto; }
.dup-head { flex: none; height: 72px; display: flex; align-items: center; padding: 0 50px; }
.dup-head h2 { flex: 1; align-self: stretch; font-size: 28px; font-weight: 500; line-height: 72px; color: #212b36; margin: 0; }
.dup-close { font-size: 14px; line-height: 16px; color: var(--text); cursor: pointer; padding: 8px 17px; border-radius: 6px; }
.dup-close:hover { background: #f2f4fb; }
.dup-body { flex: 1; min-height: 0; width: 1024px; margin: 0 auto; padding-top: 48px; }
.dup-tabs { display: flex; align-items: center; gap: 0; height: 34px; border-bottom: 1px solid var(--border); }
.dup-tab { height: 34px; line-height: 32px; padding: 0 20px; font-size: 14px; color: var(--text);
  cursor: pointer; white-space: nowrap; border-bottom: 2px solid transparent; }
.dup-tab.cur { color: var(--green); border-bottom-color: var(--green); }
.dup-grid { display: grid; grid-template-columns: 500px 500px; gap: 18px 24px; padding-top: 26px; }
.dup-field label { display: flex; align-items: center; font-size: 14px; color: var(--text); height: 16px; }
.dup-field input { margin-top: 5px; width: 500px; height: 34px; border: 1px solid var(--border);
  border-radius: 4px; padding: 0 10px; font-size: 14px; color: var(--text); }
.dup-field input:focus { border-color: var(--green); outline: 0; }
.dup-q { width: 14px; height: 14px; margin-left: 4px; border: 1px solid #b8bcc2; border-radius: 50%;
  font-size: 10px; font-style: normal; line-height: 12px; text-align: center; color: #b8bcc2; cursor: help; }
.dup-cnt { margin-left: auto; font-size: 12px; color: #b8bcc2; }
.dup-acts { display: flex; align-items: flex-start; gap: 13px; padding-top: 64px; }
.dup-acts .crm-btn { width: 62px; height: 32px; line-height: 32px; font-size: 14px; padding: 0; }
.dup-simple { font-size: 12px; line-height: 14px; margin-top: 16px; color: #3e84e9; cursor: pointer; }
.dup-simple:hover { text-decoration: underline; }
.dup-result { padding: 24px 0 40px; }
.dup-loading { font-size: 13px; color: var(--text-2); }
.dup-ok { color: var(--text-2); font-size: 13px; }
.dup-warn { color: #ff8a00; font-size: 13px; margin-bottom: 10px; }
.dup-table { width: 100%; border-collapse: separate; border-spacing: 0; }
.dup-table th { height: 30px; font-size: 13px; font-weight: 700; color: var(--text-2);
  text-align: left; border-bottom: 1px solid var(--border); }
.dup-table td { height: 36px; font-size: 13px; color: #2a304d; border-bottom: 1px solid #f0f1f3; }
.q-row { display: flex; justify-content: space-between; font-size: 13px; padding: 8px 0; border-bottom: 1px solid #f5f6f8; }
.q-total { border-bottom: 0; padding-top: 12px; }
.q-total b { color: var(--green); font-size: 18px; }
.recent-row .rr-ago { color: #9aa0a6; font-size: 12px; margin-right: 14px; }

/* 「···」更多视图下拉 */
.tab-more-menu {
  position: fixed; z-index: 190; min-width: 168px; background: #fff; border-radius: 8px;
  box-shadow: 0 6px 24px rgba(0,0,0,.14); padding: 6px 0; font-size: 13px;
}
.tm-item { display: flex; align-items: center; padding: 8px 14px; cursor: pointer; color: var(--text); }
.tm-item:hover { background: #f5f7fa; }
.tm-item.cur { color: var(--green); font-weight: 600; }
.tm-cnt { margin-left: auto; color: #9aa0a6; font-size: 12px; }
.tm-sep { height: 1px; background: #f0f1f3; margin: 5px 0; }
.tm-act { color: var(--link); }

/* 列设置 */
.cs-tip { font-size: 12px; color: var(--text-2); margin-bottom: 12px; }
.cs-list { max-height: 320px; overflow-y: auto; border: 1px solid var(--border); border-radius: 6px; }
.cs-item { display: flex; align-items: center; gap: 8px; padding: 8px 12px; border-bottom: 1px solid #f5f6f8; cursor: move; font-size: 13px; background: #fff; }
.cs-item:hover { background: #f7f9fa; }
.cs-grip { color: #c9ced6; letter-spacing: -2px; }
.cs-item label { display: flex; align-items: center; gap: 6px; cursor: pointer; flex: 1; }
.cs-item input { accent-color: var(--green); }

/* 常用视图 */
.saved-views { display: flex; align-items: center; gap: 8px; padding: 0 14px 10px; font-size: 12px; color: var(--text-2); flex-wrap: wrap; }
.sv-chip, .sv-clear { padding: 3px 12px; border-radius: 12px; background: #f2f3f5; cursor: pointer; color: var(--text); }
.sv-chip.on { background: var(--green-light); color: var(--green); font-weight: 600; }
.sv-clear { background: transparent; color: var(--link); }

/* 智能表单 */
.sf-tip { font-size: 12px; color: var(--text-2); margin-bottom: 10px; }
.sf-input { width: 100%; border: 1px solid var(--border); border-radius: 6px; padding: 10px; font-size: 13px; font-family: inherit; resize: vertical; }
.sf-input:focus { border-color: var(--green); outline: none; }
.sf-result { margin-top: 12px; }
.sf-ok { font-size: 12px; color: var(--green); margin-bottom: 8px; }
.sf-none { font-size: 12px; color: #f5222d; }
.sf-f { display: flex; font-size: 12px; padding: 5px 0; border-bottom: 1px solid #f5f6f8; }
.sf-f span { width: 130px; color: var(--text-2); }

/* ========== 导入 / 批量 / 跟进 / 审批 ========== */
.imp-page {
  position: fixed; inset: 0; z-index: 230; background: #f1f3f6; color: #30343b;
  display: flex; flex-direction: column;
}
.imp-page-head {
  height: 48px; flex: none; display: flex; align-items: center; padding: 0 24px;
}
.imp-page-head h2 { flex: 1; margin: 0; font-size: 20px; font-weight: 600; }
.imp-head-actions { display: flex; align-items: center; gap: 10px; }
.imp-head-actions .crm-btn { height: 32px; line-height: 30px; font-size: 14px; }
.imp-page .crm-btn.primary {
  min-width: 82px;
  background: var(--link);
  border-color: var(--link);
}
.imp-page .crm-btn.primary:hover { background: #075bd3; }
.imp-head-actions [data-cancel] {
  width: 54px; height: 32px; padding: 0;
  border: 1px solid #cfd3d8; background: #fff;
}
.imp-page-scroll { flex: 1; min-height: 0; padding: 0 12px 12px; overflow: hidden; }
.imp-page-card {
  height: 100%; overflow-y: auto; background: #fff; border-radius: 7px; padding: 20px 24px 34px;
}
.imp-page-card::-webkit-scrollbar { width: 8px; }
.imp-page-card::-webkit-scrollbar-thumb { background: #bfc3c8; border-radius: 5px; }
.imp-section { margin-bottom: 28px; }
.imp-section:nth-child(3) { margin-bottom: 38px; }
.imp-section h5 {
  height: 22px; margin: 0 0 5px; font-size: 15px; font-weight: 700;
  display: flex; align-items: center; gap: 8px;
}
.imp-section h5 i { width: 4px; height: 20px; border-radius: 2px; background: var(--link); display: inline-block; }
.imp-section h5 a { color: var(--link); font-size: 12px; font-weight: 400; cursor: pointer; margin-left: 2px; }
.imp-help { margin: 0 0 22px; font-size: 12px; color: #8b9098; }
.imp-form-row { display: flex; align-items: center; gap: 12px; font-size: 14px; }
.imp-form-row label { color: #4d5158; }
.imp-form-row select {
  width: 181px; height: 32px; border: 1px solid #d9dde3; border-radius: 6px;
  padding: 0 10px; background: #fff; color: #30343b; font-size: 13px; outline: none;
}
.imp-form-row select:focus { border-color: var(--link); }
.imp-form-row select:disabled { color: #b8bcc2; background: #fafafa; }
.imp-form-row label:not(:first-child) { margin-left: 2px; }
.imp-child-object {
  width: max-content; display: flex; align-items: center; gap: 7px;
  color: #555b64; font-size: 13px; cursor: pointer;
}
.imp-child-object[hidden] { display: none; }
.imp-child-object input { width: 14px; height: 14px; margin: 0; accent-color: var(--link); }
.imp-mode-row { display: flex; gap: 26px; margin-top: 20px; }
.imp-mode {
  width: 158px; height: 52px; border: 1px solid #cfd3d8; border-radius: 8px; background: #fff;
  display: flex; align-items: center; justify-content: center; gap: 8px; color: #454a52;
  font-size: 14px; cursor: pointer; position: relative;
}
.imp-mode:hover:not(:disabled) { border-color: var(--link); }
.imp-mode.selected { border-color: var(--link); color: var(--link); box-shadow: 0 0 0 1px rgba(24,119,242,.08); }
.imp-mode[data-mode="update"] { width: 173px; }
.imp-mode.selected::after {
  content: ''; position: absolute; top: -1px; right: -1px; width: 22px; height: 22px;
  background: var(--link); clip-path: polygon(0 0, 100% 0, 100% 100%);
  border-radius: 0 7px 0 0;
}
.imp-mode.selected::before {
  content: '✓'; position: absolute; top: -1px; right: 2px; z-index: 1;
  color: #fff; font-size: 10px; line-height: 14px; font-weight: 400;
}
.imp-mode:disabled { color: #c2c6cb; border-color: #dfe2e6; background: #fff; cursor: not-allowed; }
.imp-mode-icon { font-size: 22px; font-weight: 300; line-height: 1; }
.imp-mode b {
  width: 14px; height: 14px; border: 1px solid currentColor; border-radius: 50%;
  font-size: 10px; font-weight: 400; line-height: 12px; opacity: .65;
}
.imp-mode-options { margin-top: 13px; color: #555b64; font-size: 14px; }
.imp-mode-options[hidden] { display: none; }
.imp-option-row { min-height: 38px; display: flex; align-items: center; gap: 10px; }
.imp-option-title { flex: none; line-height: 18px; }
.imp-radio-group { display: flex; align-items: center; gap: 20px; min-height: 32px; }
.imp-radio {
  display: inline-flex; align-items: center; gap: 7px; min-height: 28px;
  color: #454b53; cursor: pointer; white-space: nowrap;
}
.imp-radio input[type="radio"] {
  appearance: none; -webkit-appearance: none; width: 16px; height: 16px; flex: none;
  border: 1px solid #c7cdd5; border-radius: 50%; background: #fff; cursor: pointer;
}
.imp-radio input[type="radio"]:checked { border: 5px solid var(--link); }
.imp-radio input[type="radio"]:focus-visible { outline: 2px solid rgba(24,119,242,.25); outline-offset: 2px; }
.imp-q {
  width: 14px; height: 14px; border: 1px solid #87909c; border-radius: 50%;
  color: #7c8591; font-size: 10px; line-height: 12px; text-align: center;
  font-style: normal; cursor: help;
}
.imp-option-note { margin: 0 0 3px; color: #8b9098; font-size: 13px; line-height: 20px; }
.imp-option-rule { margin-left: 0; color: #6f757d; display: flex; align-items: center; gap: 6px; }
.imp-radio-other { gap: 7px; }
.imp-radio-other select {
  width: 180px; height: 30px; border: 1px solid #d9dde3; border-radius: 5px;
  padding: 0 8px; background: #fff; color: #555b64; font-size: 12px; outline: none;
}
.imp-radio-other select:disabled { color: #b8bcc2; background: #fafafa; }
.imp-template-line { height: 50px; display: flex; align-items: center; gap: 12px; font-size: 12px; color: #666c74; }
.imp-template-btn { color: var(--link); border-color: #72b2e9; background: #f5fbff; }
.imp-template-btn:disabled { color: #b7d7ee; border-color: #dcecf7; background: #f9fcff; cursor: not-allowed; }
.imp-upload-zone {
  width: 826px; max-width: calc(100% - 24px); height: 180px; border: 1px dashed #d8dce1;
  border-radius: 7px; display: flex; flex-direction: column; align-items: center; justify-content: center;
  color: #7d828a; cursor: pointer; outline: none; transition: border-color .15s, background .15s;
}
.imp-upload-zone:hover, .imp-upload-zone:focus, .imp-upload-zone.drag { border-color: var(--link); background: #fbfdff; }
.imp-upload-icon {
  width: 32px; height: 27px; margin-bottom: 3px; color: #59616c; position: relative;
}
.imp-upload-icon::before {
  content: ''; position: absolute; left: 5px; bottom: 1px; width: 20px; height: 12px;
  border: 2px solid currentColor; border-radius: 9px 9px 6px 6px; background: #fff;
}
.imp-upload-icon::after {
  content: '↑'; position: absolute; left: 10px; top: -5px; width: 12px; height: 20px;
  background: #fff; font-size: 21px; line-height: 20px; text-align: center; font-weight: 500;
}
.imp-upload-zone > b { font-size: 15px; color: #4e545c; margin: 3px 0 2px; font-weight: 500; }
.imp-upload-zone > span:not(.imp-upload-icon) { font-size: 12px; }
.imp-upload-zone em { color: var(--link); font-style: normal; }
.imp-upload-zone small { font-size: 11px; line-height: 18px; color: #a5a9af; }
.imp-result-panel {
  width: 826px; max-width: calc(100% - 24px); margin-top: 8px; padding: 9px 12px;
  border: 1px solid #edf0f2; border-radius: 5px; background: #fafbfc;
  color: var(--text-2); font-size: 12px;
}
.imp-notify-section { margin-bottom: 0; }
.imp-notify-row { display: flex; align-items: center; gap: 14px; margin-top: 20px; font-size: 14px; }
.imp-notify-row > label { color: #4d5158; }
.imp-notify-box {
  width: 480px; height: 32px; border: 1px solid #ccd1d7; border-radius: 6px;
  display: flex; align-items: center; padding: 3px 8px; background: #fff; position: relative;
}
.imp-notify-chips { display: flex; align-items: center; gap: 4px; min-width: 0; }
.imp-notify-chip {
  height: 24px; line-height: 22px; border: 1px solid #d9dde3; background: #f5f6f8;
  border-radius: 3px; padding: 0 5px 0 4px; font-size: 12px; color: #68707a;
  display: inline-flex; align-items: center; max-width: 160px;
}
.imp-notify-chip i {
  display: inline-flex; width: 16px; height: 16px; margin-right: 4px; border-radius: 50%;
  align-items: center; justify-content: center; background: #d7dade; color: #fff; font-size: 9px; font-style: normal;
}
.imp-notify-chip > span { overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
.imp-notify-chip button {
  width: 16px; height: 18px; margin-left: 3px; border: 0; background: transparent;
  color: #a1a6ad; font-size: 13px; line-height: 18px; cursor: pointer;
}
.imp-notify-add {
  flex: none; height: 24px; margin-left: 6px; padding: 0 3px; border: 0;
  background: transparent; color: var(--green); font-size: 12px; cursor: pointer;
}
.imp-bottom-start {
  width: 180px; height: 40px !important; line-height: 40px !important;
  margin-top: 26px; font-size: 14px !important;
}
.imp-notify-picker {
  position: absolute; left: -1px; bottom: calc(100% + 8px); width: 342px; height: 488px;
  z-index: 260; border: 1px solid #d9dde3; border-radius: 4px; background: #fff;
  box-shadow: 0 5px 18px rgba(26,35,48,.18); display: flex; flex-direction: column;
  color: #454b53; font-size: 13px;
}
.imp-notify-picker[hidden] { display: none; }
.imp-notify-search { height: 48px; flex: none; padding: 8px 12px; position: relative; }
.imp-notify-search input {
  width: 100%; height: 32px; border: 1px solid #bcc5d1; border-radius: 5px;
  padding: 0 34px 0 10px; color: #454b53; font-size: 13px; background: #fff;
}
.imp-notify-search input::placeholder { color: #b8bec7; }
.imp-notify-search input:focus { border-color: #9faabc; }
.imp-notify-search span {
  position: absolute; right: 21px; top: 14px; color: #9aa8ba; font-size: 18px; line-height: 20px;
}
.imp-notify-org {
  height: 40px; flex: none; padding: 0 14px; border-bottom: 1px solid #e7e9ed;
  display: flex; align-items: center; color: #4f555d; cursor: pointer;
}
.imp-notify-org b { margin-left: 5px; color: #858c96; font-size: 18px; font-weight: 400; }
.imp-notify-picker-body { flex: 1; min-height: 0; display: flex; position: relative; }
.imp-notify-people {
  flex: 1; min-width: 0; overflow-y: auto; padding-right: 22px; scrollbar-width: none;
}
.imp-notify-people::-webkit-scrollbar { display: none; }
.imp-person-group h6 {
  height: 20px; line-height: 20px; padding: 0 10px; color: #a8afb8;
  font-size: 12px; font-weight: 400; border-bottom: 1px solid #e7e9ed;
}
.imp-person-row {
  height: 46px; padding: 0 10px; display: flex; align-items: center; gap: 9px;
  border-bottom: 1px solid #e7e9ed; cursor: pointer;
}
.imp-person-row:hover { background: #f7faf8; }
.imp-person-row input {
  appearance: none; -webkit-appearance: none; width: 16px; height: 16px; flex: none;
  border: 1px solid #c6cdd6; border-radius: 4px; background: #fff;
}
.imp-person-row input:checked { border-color: var(--green); background: var(--green); position: relative; }
.imp-person-row input:checked::after {
  content: '✓'; display: block; color: #fff; font-size: 11px; line-height: 14px; text-align: center;
}
.imp-person-avatar {
  width: 30px; height: 30px; flex: none; border-radius: 50%; background: #e1e3e6;
  color: #c3c6ca; display: flex; align-items: center; justify-content: center; font-size: 13px;
}
.imp-person-name { overflow: hidden; text-overflow: ellipsis; white-space: nowrap; color: #343940; }
.imp-notify-index {
  position: absolute; top: 0; right: 4px; width: 16px; color: #9ea8b5;
  font-size: 11px; line-height: 13px; text-align: center; user-select: none;
}
.imp-person-empty { padding: 36px 12px; color: #a1a7af; text-align: center; }
.imp-notify-picker-foot {
  height: 34px; flex: none; padding: 0 10px; border-top: 1px solid #e7e9ed;
  background: #f5f6f8; display: flex; align-items: center; color: #737a84; cursor: pointer;
}
.imp-notify-picker-foot b { margin-left: 4px; font-weight: 400; }
.imp-notify-picker-foot span { margin-left: auto; color: #c4c9cf; font-size: 16px; }
}
.imp-ok { color: var(--green); }
.imp-err { color: #f5222d; }
.imp-badlist { margin-top: 8px; font-size: 12px; color: #f5222d; line-height: 1.8; }
.bulk-tip { font-size: 13px; margin-bottom: 16px; }
.bulk-row { display: flex; align-items: center; gap: 12px; margin-bottom: 14px; }
.bulk-row label { width: 76px; flex: none; font-size: 13px; color: var(--text-2); text-align: right; }
.bulk-row select, .bulk-row input { flex: 1; height: 32px; border: 1px solid var(--border); border-radius: 6px; padding: 0 10px; font-size: 13px; background: #fff; }
.fu-row { display: flex; gap: 12px; margin-bottom: 6px; }
.fu-row label { width: 76px; flex: none; font-size: 13px; color: var(--text-2); text-align: right; padding-top: 7px; }
.fu-row textarea { flex: 1; border: 1px solid var(--border); border-radius: 6px; padding: 8px 10px; font-size: 13px; font-family: inherit; resize: vertical; }
.fu-row textarea:focus, .bulk-row input:focus { border-color: var(--green); outline: none; }

/* 跟进时间轴 */
.fd-timeline { margin-top: 14px; max-height: 320px; overflow-y: auto; }
.tl-empty { font-size: 12px; color: #9aa0a6; text-align: center; padding: 20px 0; }
.timeline { position: relative; padding-left: 6px; }
.tl-item { position: relative; padding: 0 0 14px 18px; border-left: 2px solid #eef1f5; }
.tl-item:last-child { border-left-color: transparent; }
.tl-dot { position: absolute; left: -6px; top: 4px; width: 9px; height: 9px; border-radius: 50%; background: var(--green); border: 2px solid #fff; box-shadow: 0 0 0 1px #d9f2e4; }
.tl-head { display: flex; align-items: center; gap: 7px; font-size: 12px; margin-bottom: 5px; }
.tl-head .owner-avatar { width: 20px; height: 20px; font-size: 10px; }
.tl-kind { background: #eef4fe; color: #6a9df8; padding: 1px 7px; border-radius: 3px; }
.tl-time { margin-left: auto; color: #9aa0a6; }
.tl-content { font-size: 12px; color: var(--text); line-height: 1.7; background: #f8fafc; border-radius: 5px; padding: 8px 10px; }
.fd-act { cursor: pointer; }
.fd-act:hover { color: var(--green); }

/* ========== 多视图:看板 / 卡片 / 日历 / 地图 / 分屏 ========== */
/* 阶段看板 */
.kanban { display: flex; gap: 12px; padding: 12px; height: 100%; overflow-x: auto; align-items: flex-start; }
.kb-col { width: 260px; flex: none; background: #f5f7fa; border-radius: 8px; display: flex; flex-direction: column; max-height: 100%; }
.kb-head { flex: none; padding: 10px 12px; display: flex; align-items: center; gap: 8px; border-bottom: 1px solid #e9edf2; }
.kb-name { font-size: 13px; font-weight: 700; }
.kb-cnt { background: #e4e8ee; color: var(--text-2); font-size: 11px; padding: 1px 7px; border-radius: 9px; }
.kb-sum { margin-left: auto; font-size: 12px; color: var(--green); font-weight: 600; }
.kb-body { flex: 1; overflow-y: auto; padding: 10px; display: flex; flex-direction: column; gap: 8px; }
.kb-card { background: #fff; border-radius: 6px; padding: 10px 12px; cursor: pointer; box-shadow: 0 1px 3px rgba(0,0,0,.06); }
.kb-card:hover { box-shadow: 0 2px 8px rgba(0,0,0,.10); }
.kb-title { font-size: 13px; color: var(--link); margin-bottom: 6px; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
.kb-money { font-size: 13px; font-weight: 700; color: var(--text); margin-bottom: 8px; }
.kb-foot { display: flex; align-items: center; gap: 6px; font-size: 12px; color: var(--text-2); }
.kb-foot .owner-avatar { width: 20px; height: 20px; font-size: 10px; }

/* 卡片视图 */
.card-grid { display: grid; grid-template-columns: repeat(auto-fill, minmax(268px, 1fr)); gap: 12px; padding: 12px; }
.rec-card { background: #fff; border: 1px solid var(--border); border-radius: 8px; padding: 14px; cursor: pointer; }
.rec-card:hover { border-color: var(--green); box-shadow: 0 2px 10px rgba(48,199,118,.10); }
.rc-title { font-size: 14px; font-weight: 600; color: var(--link); display: block; margin-bottom: 12px;
  overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
.rc-fields { border-top: 1px solid #f2f4f7; padding-top: 10px; }
.rc-f { display: flex; font-size: 12px; padding: 4px 0; gap: 10px; }
.rc-f .k { color: var(--text-2); width: 78px; flex: none; }
.rc-f .v { flex: 1; min-width: 0; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
.rc-foot { display: flex; align-items: center; gap: 6px; font-size: 12px; color: var(--text-2);
  border-top: 1px solid #f2f4f7; margin-top: 10px; padding-top: 10px; }
.rc-foot .owner-avatar { width: 20px; height: 20px; font-size: 10px; }
.rc-money { margin-left: auto; color: var(--text); font-weight: 700; }

/* 日历视图 */
.cal-wrap { padding: 12px; height: 100%; display: flex; flex-direction: column; }
.cal-head { display: flex; align-items: baseline; gap: 12px; margin-bottom: 10px; }
.cal-title { font-size: 16px; font-weight: 700; }
.cal-sub { font-size: 12px; color: var(--text-2); }
.cal-grid { flex: 1; display: grid; grid-template-columns: repeat(7, 1fr); grid-auto-rows: minmax(84px, auto); gap: 1px; background: var(--border); border: 1px solid var(--border); border-radius: 6px; overflow: hidden; }
.cal-wd { background: #f7f9fb; text-align: center; padding: 8px 0; font-size: 12px; color: var(--text-2); grid-row: 1; }
.cal-cell { background: #fff; padding: 6px; overflow: hidden; }
.cal-cell.empty { background: #fafbfc; }
.cal-day { font-size: 12px; color: var(--text-2); margin-bottom: 4px; }
.cal-item { background: #e8f2ff; color: #368bff; font-size: 11px; padding: 2px 5px; border-radius: 3px;
  margin-bottom: 3px; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; cursor: pointer; }
.cal-more { font-size: 11px; color: #9aa0a6; }

/* 地图视图 */
.map-wrap { display: flex; height: 100%; gap: 10px; padding: 12px; }
.map-canvas { flex: 1; position: relative; background: linear-gradient(160deg,#eaf2fb,#dfeaf7); border-radius: 8px; overflow: hidden; }
.map-hint { position: absolute; top: 12px; left: 14px; font-size: 12px; color: #6b7a8d; }
.map-pin { position: absolute; border-radius: 50%; background: rgba(48,199,118,.75); color: #fff;
  display: flex; flex-direction: column; align-items: center; justify-content: center; cursor: pointer;
  box-shadow: 0 2px 10px rgba(48,199,118,.35); }
.map-pin .mp-n { font-size: 13px; font-weight: 700; line-height: 1; }
.map-pin .mp-p { font-size: 9px; opacity: .95; margin-top: 2px; white-space: nowrap; }
.map-side { width: 210px; flex: none; background: #fff; border: 1px solid var(--border); border-radius: 8px; padding: 12px; overflow-y: auto; }
.ms-tit { font-size: 13px; font-weight: 700; margin-bottom: 10px; }
.ms-row { display: flex; justify-content: space-between; font-size: 12px; padding: 6px 0; border-bottom: 1px solid #f5f6f8; }

/* 分屏视图 */
.split-wrap { display: flex; height: 100%; }
.split-list { width: 300px; flex: none; border-right: 1px solid var(--border); overflow-y: auto; }
.sp-item { padding: 11px 14px; border-bottom: 1px solid #f5f6f8; cursor: pointer; }
.sp-item:hover { background: #f7f9fa; }
.sp-item.cur { background: var(--green-light); border-left: 3px solid var(--green); padding-left: 11px; }
.sp-title { font-size: 13px; color: var(--link); margin-bottom: 4px; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
.sp-sub { font-size: 12px; color: var(--text-2); overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
.split-detail { flex: 1; min-width: 0; overflow-y: auto; padding: 16px 20px; }
.sp-dtit { font-size: 16px; font-weight: 700; margin-bottom: 16px; }
.sp-grid { display: grid; grid-template-columns: 1fr 1fr; gap: 0 40px; }
.sp-f { display: flex; font-size: 13px; padding: 9px 0; border-bottom: 1px solid #f5f6f8; gap: 12px; }
.sp-f .k { color: var(--text-2); width: 104px; flex: none; }
.sp-f .v { flex: 1; min-width: 0; overflow: hidden; text-overflow: ellipsis; }

/* ========== 新建表单(全屏多分组页面) ========== */
.fx-form-page { position: fixed; inset: 0; background: #fff; z-index: 180; display: flex; flex-direction: column; }
.ff-head { flex: none; height: 46px; border-bottom: 1px solid var(--border); display: flex; align-items: center; padding: 0 16px; }
.ff-title { font-size: 15px; font-weight: 700; }
.ff-actions { margin-left: auto; display: flex; align-items: center; gap: 8px; }
.ff-cols { color: #b8bcc2; font-size: 11px; letter-spacing: 1px; margin-right: 8px; cursor: pointer; }
.ff-body { flex: 1; min-height: 0; display: flex; }
.ff-nav { width: 150px; flex: none; border-right: 1px solid #f0f1f3; padding: 12px 0; overflow-y: auto; }
.ff-anchor { padding: 9px 14px; font-size: 13px; cursor: pointer; color: var(--text); text-align: right; }
.ff-anchor:hover { background: #f7f9fa; }
.ff-anchor.cur { background: var(--green-light); color: var(--green); font-weight: 600; }
.ff-main { flex: 1; min-width: 0; overflow-y: auto; padding: 14px 26px 60px; }
.ff-tools { display: flex; align-items: center; gap: 10px; font-size: 12px; color: var(--text-2); margin-bottom: 16px; }
.ff-only { display: flex; align-items: center; gap: 7px; cursor: pointer; }
.ff-gap { margin-left: 20px; }
.ff-den { padding: 2px 10px; border-radius: 4px; cursor: pointer; }
.ff-den.cur { background: var(--green-light); color: var(--green); font-weight: 600; }
.ff-group { margin-bottom: 26px; }
.ff-gtit { font-size: 14px; font-weight: 700; margin-bottom: 14px; }
.ff-grid { display: grid; grid-template-columns: 1fr 1fr; gap: 0 60px; }
.ff-item { display: flex; align-items: center; margin-bottom: 12px; gap: 12px; }
.ff-item label { width: 116px; flex: none; font-size: 13px; color: var(--text); text-align: right; }
.ff-item label i { color: #f5222d; font-style: normal; margin-right: 3px; }
.ff-ctl { flex: 1; min-width: 0; position: relative; }
.ff-ctl input { width: 100%; height: 32px; border: 1px solid var(--border); border-radius: 4px; padding: 0 52px 0 10px; font-size: 13px; }
.ff-ctl input:focus { border-color: var(--green); }
.ff-ctl input.err { border-color: #f5222d; }
/* promptModal 的输入框走同一套错误态 —— 批量操作留空时要看得见 */
.pm-input.err { border-color: #f5222d; }
.ff-count { position: absolute; right: 10px; top: 8px; font-size: 12px; color: #c9ced6; }

/* 列排序图标 */
.lc-table th.th-sort { cursor: pointer; user-select: none; }
.lc-table th.th-sort:hover { color: var(--green); }
.sort-ico { color: #ccd0d6; font-size: 10px; margin-left: 3px; }
.sort-on { color: var(--green); font-size: 10px; margin-left: 3px; }
.lc-filter .f-btn.on { border-color: var(--green); color: var(--green); }
.lc-filter .f-btn b { color: var(--green); margin-left: 2px; }

/* 筛选面板 */
.flt-box { border: 1px dashed var(--border); border-radius: 6px; padding: 14px; }
.flt-logic { display: flex; align-items: flex-start; gap: 8px; }
.flt-and { font-size: 13px; color: var(--text-2); padding-top: 6px; }
.flt-rows { flex: 1; min-width: 0; border-left: 1px solid var(--border); padding-left: 12px; }
.flt-row { display: flex; align-items: center; gap: 8px; margin-bottom: 8px; }
.flt-row select, .flt-row input { height: 30px; border: 1px solid var(--border); border-radius: 6px; padding: 0 8px; font-size: 13px; background: #fff; }
.flt-field { width: 130px; }
.flt-op { width: 100px; }
.flt-val { flex: 1; min-width: 0; }
.flt-del, .flt-del2, .flt-add-inline, .flt-addcond { color: #b8bcc2; cursor: pointer; font-size: 15px; }
.flt-addcond { color: var(--green); font-size: 13px; margin-top: 10px; }
.flt-add-inline { margin-top: 2px; }
.flt-out { font-size: 12px; color: var(--text-2); display: flex; align-items: center; gap: 4px; white-space: nowrap; }
.flt-or { text-align: center; color: #9aa0a6; font-size: 12px; margin: 10px 0; border-top: 1px dashed var(--border); padding-top: 10px; }
.fx-modal .fm-foot { display: flex; align-items: center; }

/* ========== 记录详情页(右侧抽屉) ========== */
.fx-detail-mask { position: fixed; inset: 0; background: rgba(0,0,0,.12); z-index: 150; }
.fx-detail {
  position: fixed; top: 0; right: 0; bottom: 0; width: calc(100% - 336px); min-width: 900px;
  background: #f2f5fa; z-index: 151; display: flex; flex-direction: column;
  box-shadow: -4px 0 24px rgba(0,0,0,.10);
}
.fd-head { flex: none; height: 52px; background: #fff; display: flex; align-items: center; padding: 0 14px; gap: 10px; }
.fd-obj { background: #368bff; color: #fff; font-size: 12px; padding: 3px 9px; border-radius: 4px; flex: none; }
.fd-name { font-size: 16px; font-weight: 700; flex: none; }
.fd-lock { width: 14px; height: 14px; color: #9aa0a6; display: flex; flex: none; }
.fd-lock svg { width: 14px; height: 14px; }
.fd-lock.active { color: #ff8b19; }
.fd-nav { display: flex; gap: 4px; flex: none; }
.fd-nav b { width: 20px; height: 20px; border-radius: 4px; display: flex; align-items: center;
  justify-content: center; color: #9aa0a6; font-weight: 400; cursor: pointer; font-size: 14px; }
.fd-nav b:hover { background: #f2f4f7; color: var(--green); }
.crm-btn.followed { color: var(--green); border: 1px solid var(--green); padding: 0 11px; background: var(--green-light); }
.crm-btn.locked { color: #ff8b19; border-color: #ffc078; background: #fff8ef; }

/* 生产登录与账号菜单 */
.login-page { position: fixed; inset: 0; z-index: 99999; display: flex; align-items: center;
  justify-content: center; background: linear-gradient(135deg, #f4fbf7 0%, #edf4ff 100%); }
.login-card { width: 390px; padding: 34px 38px 28px; border-radius: 14px; background: #fff;
  box-shadow: 0 20px 70px rgba(31, 54, 74, .15); border: 1px solid #edf0f3; }
.login-brand { display: flex; align-items: center; gap: 10px; margin-bottom: 26px; color: #18bd6b; }
.login-brand span { font-size: 20px; font-weight: 700; }
.login-brand small { padding-left: 10px; border-left: 1px solid #dfe5e9; color: #6e7781; }
.login-card h1 { margin: 0 0 8px; font-size: 24px; color: #20242a; }
.login-card > p { margin: 0 0 25px; color: #8a929c; font-size: 14px; }
.login-card label { display: block; margin: 0 0 16px; color: #48515b; font-size: 13px; }
.login-card input { display: block; width: 100%; height: 42px; margin-top: 7px; padding: 0 12px;
  border: 1px solid #d7dde3; border-radius: 6px; outline: none; font: inherit; box-sizing: border-box; }
.login-card input:focus { border-color: #21c875; box-shadow: 0 0 0 3px rgba(33, 200, 117, .1); }
.login-card button { width: 100%; height: 42px; border: 0; border-radius: 6px; background: #20c777;
  color: #fff; font-size: 15px; cursor: pointer; }
.login-card button:disabled { opacity: .65; cursor: wait; }
.login-error { min-height: 20px; margin: -4px 0 8px; color: #ef5350; font-size: 12px; }
.login-foot { margin-top: 18px; text-align: center; color: #a0a7af; font-size: 12px; }
.user-account-menu { position: fixed; z-index: 10020; width: 210px; padding: 14px; background: #fff;
  border: 1px solid #e3e7eb; border-radius: 8px; box-shadow: 0 12px 35px rgba(25, 42, 56, .16); }
.user-account-menu strong, .user-account-menu span { display: block; }
.user-account-menu strong { color: #242a31; font-size: 14px; }
.user-account-menu span { margin: 5px 0 13px; color: #8b939c; font-size: 12px; }
.user-account-menu button { width: 100%; height: 32px; border: 1px solid #e4e7eb; border-radius: 5px;
  color: #4d5660; background: #fff; cursor: pointer; }
.user-account-menu button + button { margin-top: 7px; }
.user-account-menu button:hover { color: #e14b4b; border-color: #f0b2b2; background: #fff8f8; }
.view-manage-list { border: 1px solid #edf0f2; border-radius: 6px; overflow: hidden; }
.view-manage-row { display: flex; align-items: center; gap: 15px; min-height: 56px; padding: 8px 12px;
  border-bottom: 1px solid #edf0f2; }
.view-manage-row:last-child { border-bottom: 0; }
.view-manage-row > div { min-width: 0; flex: 1; }
.view-manage-row b, .view-manage-row span { display: block; }
.view-manage-row b { color: #30363d; font-size: 14px; }
.view-manage-row span { margin-top: 3px; color: #939aa2; font-size: 12px; }
.fd-btns { margin-left: auto; display: flex; align-items: center; gap: 7px; }
.fd-btns .crm-btn { height: 28px; }
.fd-ico { color: #545861; cursor: pointer; font-size: 14px; display: flex; align-items: center; width: 18px; }
.fd-ico svg { width: 16px; height: 16px; }
.fd-close { font-size: 16px; }
.fd-chips { flex: none; background: #fff; padding: 0 14px 10px; display: flex; flex-wrap: wrap; gap: 7px; }
.fd-chip { font-size: 12px; padding: 2px 9px; border-radius: 3px; }
.fd-chip.c0 { background: #e8f2ff; color: #368bff; }
.fd-chip.c1 { background: #e9f9f0; color: #22b365; }
.fd-chip.c2 { background: #fff1e3; color: #ff8a00; }
.fd-chip.c3 { background: #f3ecff; color: #8b5cf6; }
.fd-chip.c4 { background: #fff0f6; color: #eb2f96; }
.fd-chip.c5 { background: #e6fffb; color: #13a8a8; }
.fd-body { flex: 1; min-height: 0; display: flex; gap: 10px; padding: 10px; overflow: hidden; }
.fd-main { flex: 1; min-width: 0; overflow-y: auto; }
.fd-side { width: 380px; flex: none; overflow-y: auto; }
.fd-main::-webkit-scrollbar, .fd-side::-webkit-scrollbar { width: 7px; }
.fd-main::-webkit-scrollbar-thumb, .fd-side::-webkit-scrollbar-thumb { background: #d9dbde; border-radius: 4px; }
.fd-card { background: #fff; border-radius: 8px; padding: 14px 16px; margin-bottom: 10px; }
.fd-card-tit { font-size: 14px; font-weight: 700; margin-bottom: 12px; }
.fd-key-name { display: flex; gap: 40px; font-size: 13px; margin-bottom: 14px; }
.fd-key-name .lbl { color: var(--text-2); width: 74px; flex: none; }
.fd-metrics { display: grid; grid-template-columns: repeat(3, 1fr); gap: 14px 30px;
  background: linear-gradient(180deg,#f7fbff,#f2f7fd); border-radius: 6px; padding: 14px 16px; }
.fd-metric { display: flex; align-items: center; font-size: 13px; gap: 10px; }
.fd-metric .mk { color: var(--text-2); width: 82px; flex: none; }
.fd-metric .mv { color: var(--text); font-weight: 600; }
.fd-tabs { display: flex; gap: 18px; border-bottom: 1px solid var(--border); overflow-x: auto; padding-bottom: 0; }
.fd-tabs::-webkit-scrollbar { height: 0; }
.fd-tab { font-size: 13px; padding: 2px 1px 10px; cursor: pointer; white-space: nowrap; position: relative; color: var(--text); }
.fd-tab.cur { color: var(--green); font-weight: 600; }
.fd-tab.cur::after { content: ''; position: absolute; left: 0; right: 0; bottom: -1px; height: 2px; background: var(--green); }
.fd-switch { display: flex; align-items: center; justify-content: flex-end; gap: 8px; font-size: 12px; color: var(--text-2); padding: 10px 0 4px; }
.fd-toggle { width: 30px; height: 16px; border-radius: 8px; background: #d9dde3; position: relative; cursor: pointer; }
.fd-toggle.on { background: var(--green); }
.fd-toggle::after { content: ''; position: absolute; width: 12px; height: 12px; border-radius: 50%; background: #fff; top: 2px; left: 2px; transition: left .15s; }
.fd-toggle.on::after { left: 16px; }
.fd-switch-n { margin-right: auto; color: var(--text-3, #9aa0a6); }
/* 关掉「显示全部信息」= 只留填了值的字段;整组皆空的组一起收,
   否则只剩一排光秃秃的组标题(2026-08-05) */
.fd-fields.hide-empty .fd-f.fd-empty,
.fd-fields.hide-empty .fd-group.fd-empty { display: none; }
.fd-group { margin-top: 16px; }
.fd-gtit { font-size: 13px; font-weight: 700; margin-bottom: 10px; color: var(--text); }
.fd-grid { display: grid; grid-template-columns: 1fr 1fr; gap: 0 40px; }
.fd-f { display: flex; font-size: 13px; padding: 9px 0; border-bottom: 1px solid #f5f6f8; gap: 12px; }
.fd-f .fk { color: var(--text-2); width: 110px; flex: none; }
.fd-f .fv { flex: 1; min-width: 0; overflow: hidden; text-overflow: ellipsis; }
/* 详情页关联记录列表 */
.fd-rel { padding-top: 12px; }
.rel-head { display: flex; align-items: center; font-size: 13px; font-weight: 600; margin-bottom: 10px; }
.rel-head .crm-btn { margin-left: auto; height: 26px; }
.rel-table { width: 100%; }
.rel-table th { height: 32px; font-size: 12px; }
.rel-table td { height: 38px; font-size: 12px; }

.fd-side-sub { font-size: 13px; font-weight: 600; display: flex; align-items: center; margin-bottom: 10px; }
.fd-side-act { margin-left: auto; color: #9aa0a6; cursor: pointer; letter-spacing: 6px; }
.fd-pills { display: flex; gap: 8px; margin-bottom: 10px; }
.fd-pill { font-size: 12px; padding: 3px 12px; border-radius: 11px; background: #f2f3f5; color: var(--text-2); cursor: pointer; }
.fd-pill.on { background: var(--green-light); color: var(--green); font-weight: 600; }
.fd-team { width: 100%; border-collapse: collapse; font-size: 12px; }
.fd-team th { text-align: left; color: var(--text-2); font-weight: 400; padding: 7px 6px; border-bottom: 1px solid var(--border); white-space: nowrap; }
.fd-team td { padding: 8px 6px; border-bottom: 1px solid #f5f6f8; }
.fd-team .owner-avatar { width: 20px; height: 20px; font-size: 10px; }
.fd-acts { display: flex; justify-content: space-between; padding: 4px 6px; }
.fd-act { display: flex; flex-direction: column; align-items: center; gap: 6px; font-size: 12px; color: var(--text-2); cursor: pointer; }
.fd-act i { width: 34px; height: 34px; border-radius: 50%; background: #f2f5fa; display: block; }

/* 后端在线标识 / 危险按钮 */
/* 绝对定位,不占布局(避免把页签行推偏) */
.live-dot { position: absolute; right: 12px; top: 6px; color: #30c776; font-size: 12px; font-weight: 600; pointer-events: none; }
.crm-btn.danger { background: #fff; border: 1px solid #f5c2c2; padding: 0 11px; color: #f5222d; }
.crm-btn.danger:hover { background: #fff1f0; border-color: #f5222d; }

/* 业务类型选择 / 新建表单 / toast */
.bt-option { border: 1px solid var(--border); border-radius: 6px; height: 40px; display: flex; align-items: center; gap: 6px; padding: 0 14px; font-size: 13px; margin-bottom: 12px; cursor: pointer; }
.bt-option:hover { border-color: #c9cdd2; }
.bt-option.hl { border-color: var(--green); color: var(--green); }
/* 选项超过 8 个时的搜索框(chooseValue)—— 57 人的负责人名单得能筛 */
.bt-search { width: 100%; box-sizing: border-box; border: 1px solid var(--border);
  border-radius: 6px; height: 34px; padding: 0 12px; font-size: 13px; margin-bottom: 12px; }
.bt-search:focus { outline: none; border-color: var(--green); }
.bt-none { color: var(--text-2); font-size: 13px; padding: 10px 2px; }
.cf-grid { display: grid; grid-template-columns: 1fr 1fr; gap: 12px 20px; }
.cf-item label { display: block; font-size: 12px; color: var(--text-2); margin-bottom: 5px; }
.cf-item input { width: 100%; height: 30px; border: 1px solid var(--border); border-radius: 6px; padding: 0 10px; font-size: 13px; }
.cf-item input:focus { border-color: var(--green); }
.fx-toast {
  position: fixed; top: 60px; left: 50%; transform: translateX(-50%); z-index: 200;
  background: #fff; border-radius: 6px; box-shadow: 0 4px 16px rgba(0,0,0,.12); border: 1px solid #e9f9f0;
  color: #22b365; font-size: 13px; padding: 9px 18px;
}

/* 最近使用面板 */
.recent-row { height: 40px; display: flex; align-items: center; padding: 0 18px; font-size: 13px; cursor: pointer; }
.recent-row:hover { background: #f7f9fa; }
.recent-row .m-ico { width: 16px; height: 16px; margin-right: 10px; display: flex; }
.recent-row .rr-lbl { flex: 1; }
.recent-row .rr-cnt { color: #9aa0a6; }

/* CRM提醒/待办 双栏 */
.remind-card { flex-direction: row; }
.remind-left { width: 170px; flex: none; border-right: 1px solid var(--border); padding: 12px 10px; }
.remind-back { font-size: 13px; color: var(--text-2); cursor: pointer; margin-bottom: 12px; }
.remind-nav { height: 34px; display: flex; align-items: center; padding: 0 12px; border-radius: 6px; font-size: 13px; cursor: pointer; }
.remind-nav:hover { background: #f5f6f8; }
.remind-nav.cur { background: var(--green-light); color: var(--green); font-weight: 600; }
.remind-main { flex: 1; min-width: 0; display: flex; flex-direction: column; }
.remind-head { flex: none; display: flex; align-items: center; padding: 14px 16px; }
.remind-head .rh-title { font-size: 15px; font-weight: 700; }
.notify-list { flex: 1; overflow: auto; padding: 0 16px; }
.notify-item { display: flex; padding: 16px 0; border-bottom: 1px solid #f0f1f3; }
.notify-item .ni-time { width: 70px; flex: none; text-align: center; }
.notify-item .ni-hm { font-size: 15px; font-weight: 700; }
.notify-item .ni-day { font-size: 12px; color: #9aa0a6; margin-top: 2px; }
.notify-item .ni-body { flex: 1; padding-left: 20px; }
.notify-item .ni-title { font-size: 14px; font-weight: 600; margin-bottom: 6px; }
.notify-item .ni-desc { font-size: 13px; color: var(--text-2); }

/* 流程运维监控 */
.mon-tabs { display: flex; gap: 24px; padding: 0 16px; border-bottom: 1px solid var(--border); }
.mon-tab { padding: 4px 2px 12px; font-size: 14px; cursor: pointer; position: relative; color: var(--text); }
.mon-tab.cur { color: var(--green); font-weight: 600; }
.mon-tab.cur::after { content: ''; position: absolute; left: 0; right: 0; bottom: -1px; height: 2px; background: var(--green); }
.mon-stats { display: flex; gap: 12px; padding: 16px; overflow-x: auto; }
.mon-stat { min-width: 130px; flex: 1; height: 66px; border: 1px solid var(--border); border-radius: 8px; padding: 10px 14px; }
.mon-stat.cur { background: var(--green); border-color: var(--green); }
.mon-stat.cur .ms-label, .mon-stat.cur .ms-num { color: #fff; }
.mon-stat .ms-label { font-size: 13px; color: var(--text-2); margin-bottom: 8px; }
.mon-stat .ms-num { font-size: 20px; font-weight: 700; color: var(--green); }

/* 找客户 */
.biz-scroll { flex: 1; overflow-y: auto; min-height: 0; }
.biz-card { background: #fff; border-radius: 8px; padding: 18px 20px; }
.biz-title { font-size: 16px; font-weight: 700; margin-bottom: 16px; }
.biz-search { display: flex; gap: 10px; margin-bottom: 18px; }
.biz-search input { flex: 1; height: 40px; border: 1px solid var(--border); border-radius: 6px; padding: 0 14px; font-size: 14px; }
.biz-search .crm-btn { height: 40px; padding: 0 28px; font-size: 14px; }
.biz-row, .biz-row2 { display: flex; align-items: center; padding: 9px 0; border-top: 1px solid #f5f6f8; gap: 12px; }
.biz-row .bl, .biz-half .bl { font-size: 13px; color: var(--text); display: flex; align-items: center; gap: 3px; min-width: 128px; flex: none; }
.biz-radios { display: flex; align-items: center; gap: 18px; flex-wrap: wrap; flex: 1; }
.biz-radio { display: flex; align-items: center; gap: 5px; font-size: 13px; color: var(--text); cursor: pointer; }
.biz-radio i { width: 14px; height: 14px; border: 1px solid #c9ced6; border-radius: 50%; flex: none; position: relative; }
.biz-radio.on i { border-color: var(--green); }
.biz-radio.on i::after { content: ''; position: absolute; inset: 3px; background: var(--green); border-radius: 50%; }
.biz-expand { color: var(--green); font-size: 13px; cursor: pointer; flex: none; }
.biz-row2 { gap: 40px; }
.biz-half { display: flex; align-items: center; gap: 10px; flex: 1; min-width: 0; }
.biz-foot { display: flex; align-items: center; gap: 12px; padding-top: 16px; }
.biz-collapse { color: var(--green); font-size: 13px; cursor: pointer; margin-left: auto; }

/* BI 报表深色驾驶舱 */
.bi-dash { flex: 1; min-height: 0; background: #fff; border-radius: 8px; display: flex; flex-direction: column; overflow: hidden; }
.bd-tabs { flex: none; display: flex; align-items: center; gap: 22px; padding: 12px 16px; border-bottom: 1px solid var(--border); }
.bd-tab { font-size: 14px; cursor: pointer; color: var(--text); white-space: nowrap; }
.bd-tab.cur { color: var(--green); font-weight: 600; border-bottom: 2px solid var(--green); padding-bottom: 10px; margin-bottom: -12px; }
.bd-tools { margin-left: auto; color: #545861; font-size: 15px; cursor: pointer; }
.dash-canvas { flex: 1; overflow: auto; background: #0d1524; padding: 0 0 16px; }
.dash-banner { background: linear-gradient(180deg,#152036,#0d1524); border-bottom: 2px solid #e8873a; padding: 20px 0; text-align: center; position: relative; box-shadow: 0 2px 20px rgba(232,135,58,.25) inset; }
.dash-banner h2 { color: #fff; font-size: 24px; letter-spacing: 3px; text-shadow: 0 0 12px rgba(232,135,58,.6); }
.dash-filter { display: flex; align-items: center; margin: 14px; padding: 12px 16px; background: #131c30; border: 1px solid #23304d; border-radius: 4px; color: #cdd6e6; font-size: 13px; }
.dash-filter b { color: #fff; font-weight: 600; margin-left: 4px; }
.dash-panel { margin: 0 14px 14px; background: #111a2d; border: 1px solid #23304d; border-radius: 4px; position: relative; }
.dash-panel.big { height: 240px; }
/* 装表格的面板要按人数长高。2026-08-07 客户报障:目标完成情况里
   「存量续费下面的人名被挡住了」—— 面板定高 240px 而 overflow 是 visible,
   人一多表格就溢出面板,又被**后面那块不透明面板**盖在下面(不是截断,
   是被压住)。当时页面上给 .dp-chart 写了 height:auto,但定高的是外层面板,
   改错了地方。
   ⚠ 不能直接把 .dash-panel.big 改成 auto —— 它还被数据驾驶舱用着,
   那边装的是定高 SVG 图表,放开会塌。所以加一个修饰类只作用于表格面板。 */
.dash-panel.auto { height: auto; min-height: 140px; padding-bottom: 10px; }
.dash-row { display: flex; gap: 0; }
.dash-row .dash-panel { flex: 1; height: 160px; }
.dp-title { position: absolute; top: 12px; left: 14px; color: #e8873a; font-size: 13px; font-weight: 600; }

/* BI 页面 */
.bi-layout { flex: 1; min-height: 0; display: flex; gap: 10px; }
.bi-side { width: 220px; flex: none; background: #fff; border-radius: 8px; padding: 12px; overflow-y: auto; }
.bi-side .bs-title { font-size: 14px; font-weight: 700; margin-bottom: 10px; }
.bi-side .bs-item { height: 32px; display: flex; align-items: center; padding: 0 10px; border-radius: 6px; font-size: 13px; cursor: pointer; color: var(--text); }
.bi-side .bs-item:hover { background: #f5f6f8; }
.bi-side .bs-item.cur { background: var(--green-light); color: var(--green); }
.bi-main { flex: 1; min-width: 0; background: #fff; border-radius: 8px; display: flex; flex-direction: column; overflow: hidden; }

/* ===== 登录态:顶栏用户菜单 ===== */
.topbar .user-box { position: relative; cursor: pointer; }
.topbar .user-menu {
  position: absolute; right: 0; top: 42px; width: 190px; background: #fff; z-index: 300;
  border: 1px solid var(--border); border-radius: 8px; padding: 12px 14px;
  box-shadow: 0 8px 24px rgba(16,42,80,.14);
}
.topbar .user-menu .um-name { font-size: 14px; font-weight: 700; color: var(--text); }
.topbar .user-menu .um-role { margin-top: 3px; font-size: 12px; color: var(--text-2); }
.topbar .user-menu button {
  width: 100%; margin-top: 12px; height: 30px; border: 1px solid var(--border);
  border-radius: 6px; background: #fff; color: #f5222d; font-size: 13px; cursor: pointer;
}
.topbar .user-menu button:hover { background: #fff1f0; border-color: #f5222d; }

/* ===== 仪表盘主题(原站 themeConfig 实测)=====
   002 浅色 #EAECFB / 004 深青 #10242B / 001 近黑 #05050F。
   通过 .dash-themed 上的 CSS 变量下发,图表卡片、文字、网格线全部跟着走。 */
.dash-themed { background: var(--dash-bg); border-radius: 8px; padding-bottom: 12px; }
.dash-themed .roi-banner {
  position: relative; height: 62px; display: flex; align-items: center; justify-content: center;
  background: var(--dash-bg); border-radius: 8px 8px 0 0; overflow: hidden; margin: 0;
}
.dash-themed .roi-banner h2 {
  position: relative; z-index: 2; margin: 0;
  font-size: 28px; font-weight: 700; letter-spacing: 3px; color: var(--dash-title);
}
.dash-themed .roi-banner .banner-art { position: absolute; inset: 0; z-index: 1; pointer-events: none; }
.dash-themed .roi-fields { padding: 12px 12px 4px; }
.dash-themed .roi-field {
  background: var(--dash-card); border: 1px solid var(--dash-border);
  color: var(--dash-text); border-radius: 6px;
}
.dash-themed .chart-grid { padding: 12px; }
.dash-themed .ch-card {
  background: var(--dash-card); border: 1px solid var(--dash-border); border-radius: 8px;
}
.dash-themed .ch-tit { color: var(--dash-text); }
.dash-themed .ch-more, .dash-themed .ch-ico { color: var(--dash-sub); }
.dash-themed .ch-axis, .dash-themed .ch-val, .dash-themed .ch-seg { fill: var(--dash-sub); }
.dash-themed .ch-dnum { fill: var(--dash-text); }
.dash-themed .ch-dlbl { fill: var(--dash-sub); }
.dash-themed .ch-legend { color: var(--dash-sub); }
.dash-themed .ch-empty, .dash-themed .ch-loading { color: var(--dash-sub); }
.dash-themed .ch-cardlet { background: var(--dash-card2); }
.dash-themed .ch-cardlet .cl-lbl { color: var(--dash-sub); }
.dash-themed .ch-cardlet .cl-num { color: var(--dash-text); }
.dash-themed .ch-table th { color: var(--dash-sub); border-bottom-color: var(--dash-border); }
.dash-themed .ch-table td { color: var(--dash-text); border-bottom-color: var(--dash-border); }
.dash-themed .ch-map rect:first-child { fill: var(--dash-card2); }
.dash-themed .ch-map-lbl { fill: var(--dash-sub); }
.dash-themed .ch-gauge-num { fill: var(--dash-text); }
/* 深色主题下网格线要提亮,否则看不见 */
.dash-themed.dash-dark .ch-svg line[stroke="#eef1f5"] { stroke: var(--dash-grid); }
.dash-themed.dash-dark .ch-svg .ch-grid { stroke: var(--dash-grid); }

/* ===== 双指标卡(原站交易看板:主指标 + 同比增长)===== */
.ch-card2 { padding: 2px 0; }
.ch-card2 .c2-sub { font-size: 12px; color: var(--text-2); margin-bottom: 12px; }
.dash-themed .ch-card2 .c2-sub { color: var(--dash-sub); }
.ch-card2 .c2-row { display: flex; align-items: center; gap: 12px; padding: 10px 0; }
.ch-card2 .c2-ico {
  width: 34px; height: 34px; flex: none; border-radius: 50%;
  display: flex; align-items: center; justify-content: center;
  background: rgba(46, 97, 246, .10); color: #2E61F6;
}
.ch-card2 .c2-ico svg { width: 19px; height: 19px; }
.ch-card2 .c2-ico2 { background: rgba(46, 97, 246, .10); color: #5AACFF; }
.dash-themed.dash-dark .ch-card2 .c2-ico { background: rgba(255,255,255,.08); color: var(--dash-accent); }
.dash-themed.dash-dark .ch-card2 .c2-ico2 { background: rgba(255,255,255,.08); color: var(--dash-accent); }
.ch-card2 .c2-txt { display: flex; flex-direction: column; gap: 3px; min-width: 0; }
.ch-card2 .c2-lbl { font-size: 12px; color: var(--text-2); }
.dash-themed .ch-card2 .c2-lbl { color: var(--dash-sub); }
.ch-card2 .c2-val { font-size: 19px; font-weight: 700; color: var(--text); white-space: nowrap; }
.dash-themed .ch-card2 .c2-val { color: var(--dash-text); }
.ch-card2 .c2-up   { color: #2ebd85 !important; }
.ch-card2 .c2-down { color: #f5222d !important; }
.ch-card2 .c2-flat { color: var(--text-2) !important; }

/* 表格:链接列 + 底部「查看总计」 */
.ch-td-link { color: var(--link); cursor: pointer; }
.ch-td-link:hover { text-decoration: underline; }
.ch-tfoot { padding: 8px 2px 0; font-size: 12px; color: var(--text-2); cursor: pointer; }
.ch-tfoot:hover { color: var(--link); }
.dash-themed .ch-tfoot { color: var(--dash-sub); }

/* ===== 收起态悬停自动展开(原站行为:fold ⇄ hover-unfold)=====
   关键:占位宽度仍是 58px 不变,展开面用伪元素浮到正文上层,
   所以鼠标划过时正文不会被挤动 —— 和原站 position:absolute 的效果一致。 */
.menu-panel.collapsed.hover-unfold { overflow: visible; z-index: 60; }
.menu-panel.collapsed.hover-unfold::before {
  content: ''; position: absolute; top: 0; bottom: 0; left: 0; right: -142px;
  background: #fff; border-radius: 0 8px 8px 0;
  box-shadow: 6px 0 18px rgba(16, 42, 80, .10); z-index: -1;
}
/* 展开面里把收起态藏起来的东西放出来 */
.menu-panel.collapsed.hover-unfold h1 { text-align: left; }
.menu-panel.collapsed.hover-unfold .menu-search-row { justify-content: flex-start; width: 174px; }
.menu-panel.collapsed.hover-unfold .ms-input,
.menu-panel.collapsed.hover-unfold .m-lbl,
.menu-panel.collapsed.hover-unfold .m-new,
.menu-panel.collapsed.hover-unfold .m-num { display: block; }
.menu-panel.collapsed.hover-unfold .menu-search-row { display: flex; }
.menu-panel.collapsed.hover-unfold .m-item,
.menu-panel.collapsed.hover-unfold .m-group {
  width: 174px;
  justify-content: flex-start;
  padding-left: 8px;
  padding-right: 8px;
}
.menu-panel.collapsed.hover-unfold .m-sub .m-item {
  justify-content: flex-start;
  padding-left: 14px;
  padding-right: 8px;
}
.menu-panel.collapsed.hover-unfold .m-ico,
.menu-panel.collapsed.hover-unfold .g-caret {
  margin-right: 8px;
}
.menu-panel.collapsed.hover-unfold .menu-list {
  width: 174px;
  min-height: 0;
  overflow-x: hidden;
  overflow-y: auto;
}
.menu-panel.collapsed.hover-unfold .panel-foot {
  width: 174px;
  justify-content: space-between;
  padding: 0 10px;
}
.menu-panel.collapsed.hover-unfold .panel-settings { display: flex; }

/* ===== BI 表格:原站是完整网格 + 表头灰底 + 数字右对齐 + 底部总计行 ===== */
.ch-table-card { overflow: hidden; }
.ch-table-card .ch-body { height: calc(100% - 30px); min-height: 0; }
.ch-tablewrap {
  width: 100%; height: 100%; min-height: 0; overflow: hidden;
  display: flex; flex-direction: column; position: relative;
}
.ch-table-scroll {
  flex: 1; min-height: 0; overflow-x: auto; overflow-y: scroll;
  scrollbar-color: #aeb7c8 transparent; scrollbar-width: thin;
}
.ch-table-scroll::-webkit-scrollbar { width: 8px; height: 8px; }
.ch-table-scroll::-webkit-scrollbar-thumb { background: #aeb7c8; border-radius: 5px; }
.ch-table-scroll::-webkit-scrollbar-track { background: transparent; }
.ch-table-grid { border-collapse: collapse; }
.ch-table-grid th,
.ch-table-grid td { border: 1px solid #d9e3f6; padding: 0 8px; }
.ch-table-grid th {
  height: 36px; font-size: 13px; font-weight: 400; color: #171b22;
  text-align: left; white-space: nowrap; position: sticky; top: 0; z-index: 1;
}
.ch-table-grid td { height: 35px; font-size: 13px; color: #171b22; }
.ch-table-grid .ch-num { text-align: right; }        /* 数值列右对齐 */
.dash-themed:not(.dash-dark) .ch-table-grid th { background: #e5ebfb; color: #171b22; }
.dash-themed:not(.dash-dark) .ch-table-grid tbody tr:nth-child(odd):not(.ch-total) td { background: #f3f6fd; }
.dash-themed:not(.dash-dark) .ch-table-grid tbody tr:nth-child(even):not(.ch-total) td { background: #fff; }
.ch-table-grid tbody tr:hover td { background: #edf3ff !important; }
.ch-table-grid .ch-total td { background: #edf2ff; font-weight: 600; }
.ch-table-grid .ch-total[hidden] { display: none; }
.ch-table-footbar {
  height: 28px; flex: none; display: flex; align-items: center;
  background: #fff; border-top: 1px solid #eef1f7;
}
.ch-tfoot {
  min-width: 0; padding: 0; border: 0; background: transparent;
  color: #9aa1ac; font-size: 12px; font-weight: 400; text-align: left; cursor: pointer;
}
.ch-table-tools {
  height: 24px; margin-left: auto; display: flex; align-items: center;
  background: #2f86ff; border-radius: 2px 0 0 0; overflow: hidden;
}
.ch-table-tools button {
  width: 23px; height: 24px; padding: 4px; border: 0; background: transparent;
  color: #fff; cursor: pointer; display: flex; align-items: center; justify-content: center;
}
.ch-table-tools button:hover { background: rgba(255,255,255,.18); }
.ch-table-tools svg {
  width: 15px; height: 15px; fill: none; stroke: currentColor;
  stroke-width: 1.7; stroke-linecap: round; stroke-linejoin: round;
}
.dash-themed .ch-ico { color: var(--dash-accent); border-color: var(--dash-accent); }
.dash-themed:not(.dash-dark) .ch-ico { color: #8b73ed; border-color: #c5baff; }
.dash-themed.dash-dark .ch-ico { background: var(--dash-bg); }
.ch-table-card-fullscreen {
  position: fixed !important; inset: 12px; z-index: 320; width: auto !important; height: auto !important;
  grid-column: auto !important; margin: 0; border-radius: 5px; box-shadow: 0 12px 40px rgba(0,0,0,.28);
}
/* 链接列必须压过主题的 td 颜色,否则显示成普通黑字 */
.ch-table-grid td.ch-td-link,
.dash-themed .ch-table-grid td.ch-td-link { color: var(--link); cursor: pointer; }
.ch-table-grid td.ch-td-link:hover { text-decoration: underline; }
/* 深色主题下的网格与表头 */
.dash-themed.dash-dark .ch-table-grid th,
.dash-themed.dash-dark .ch-table-grid td { border-color: var(--dash-border); }
.dash-themed.dash-dark .ch-table-grid th { background: rgba(255,255,255,.06); color: var(--dash-text); }
.dash-themed.dash-dark .ch-table-grid td { color: var(--dash-text); }
.dash-themed.dash-dark .ch-table-grid .ch-total td { background: rgba(255,255,255,.08); }
.dash-themed.dash-dark .ch-table-grid tbody tr:hover td { background: rgba(255,255,255,.05); }

/* 首页逐屏校准覆盖：原站外层滚动 4407px，仪表盘内层滚动 2805px。 */
.home-scroll { overflow-x: hidden; }
.home-scroll > .home-topfilter,
.home-scroll > .crm-home-section,
.home-scroll > .brief-card { width: calc(100% - 4px); }
.crm-dashboard-section .dash-themed { padding-bottom: 0; }
.crm-dashboard-section .dash-themed .roi-banner {
  height: 58px; min-height: 58px; padding: 0; border-radius: 0;
}
.crm-dashboard-section .dash-themed .roi-banner h2 {
  font-size: 24px; letter-spacing: 2px; color: #20242c;
}
.crm-dashboard-section #chartGrid > .ch-card { box-sizing: border-box; }

/* ===== 客户洞察 004 深青主题：按原版实页逐卡测量 ===== */
.dash-themed .dashboard-chart-scroll {
  background: var(--dash-bg);
}
.dash-themed.dash-dark .dashboard-chart-scroll {
  scrollbar-color: rgba(148, 166, 171, .55) transparent;
}
.dash-themed.dash-dark .dashboard-chart-scroll::-webkit-scrollbar-thumb {
  background: rgba(148, 166, 171, .55);
}
.crm-dashboard-section .dash-themed .roi-banner h2 {
  color: var(--dash-title);
}
.crm-dashboard-section .dash-themed .dashboard-chart-scroll {
  height: 715px;
}

.dash-customer-insight .roi-banner,
.crm-dashboard-section .dash-customer-insight .roi-banner {
  height: 56px;
  min-height: 56px;
}
.crm-dashboard-section .dash-customer-insight .dashboard-chart-scroll {
  height: 717px;
}
.dash-customer-insight .roi-fields {
  gap: 12px;
  padding: 12px 12px 0;
}
.dash-customer-insight .roi-field {
  height: 38px;
  padding: 0 16px;
  border: 0;
  border-radius: 10px;
  background: rgba(255, 255, 255, .055);
  color: var(--dash-text);
}
.dash-customer-insight .roi-field .gf-tag {
  padding: 2px 6px;
  border-radius: 2px;
  background: rgba(255, 255, 255, .09);
  color: var(--dash-text);
}
.dash-customer-insight .dashboard-calendar-icon {
  margin-left: 2px;
  color: var(--dash-sub);
  font-size: 11px;
}
.dash-customer-insight #chartGrid > .ch-card {
  margin: 0;
  padding: 12px 14px;
  overflow: hidden;
  border-color: rgba(4, 230, 232, .09);
  border-radius: 10px;
  background: rgba(255, 255, 255, .045);
}
.dash-customer-insight .ch-tit {
  height: 26px;
  margin-bottom: 4px;
  padding-left: 16px;
  color: var(--dash-text);
}
.dash-customer-insight .ch-ico {
  left: -14px;
}
.dash-customer-insight .ch-body {
  height: calc(100% - 30px);
  min-height: 0;
}
.dash-customer-insight .ch-body > .ch-svg {
  height: 100%;
}
.dash-customer-insight .ch-grid {
  stroke: var(--dash-grid);
}
.dash-customer-insight .ch-axis {
  fill: rgba(232, 246, 247, .54);
}
.dash-customer-insight .ch-val {
  fill: var(--dash-text);
}
.dash-customer-insight .ch-seg {
  fill: #fff;
}
.dash-customer-insight .ch-legend {
  color: rgba(232, 246, 247, .72);
}
.dash-customer-insight .customer-chart-legend {
  height: 24px;
  margin: 0;
  align-items: center;
}
.dash-customer-insight .customer-growth-chart {
  height: calc(100% - 48px);
}
.dash-customer-insight .customer-opportunity-chart {
  height: calc(100% - 48px);
}
.customer-chart-total {
  height: 22px;
  padding-left: 1px;
  color: var(--dash-sub);
  font-size: 12px;
}
.customer-kpis {
  height: 100%;
  display: grid;
  grid-template-columns: repeat(4, 1fr);
  align-items: center;
  padding: 0 62px 18px;
}
.customer-kpi {
  min-width: 0;
  text-align: center;
}
.customer-kpi strong {
  display: block;
  color: var(--dash-text);
  font-size: 24px;
  line-height: 34px;
}
.customer-kpi span {
  display: block;
  color: rgba(232, 246, 247, .86);
  font-size: 14px;
  line-height: 24px;
  white-space: nowrap;
}
.dash-customer-insight .ch-donut-wrap {
  height: 100%;
  justify-content: center;
}
.dash-customer-insight .ch-donut {
  width: 250px;
  height: 250px;
}
.dash-customer-insight .ch-map {
  height: 100%;
}
.ch-china-main,
.ch-china-island {
  fill: #fff;
  stroke: #6f7b82;
  stroke-width: 1;
  stroke-linejoin: round;
}
.ch-china-lines {
  fill: none;
  stroke: #7e898e;
  stroke-width: .8;
  stroke-linecap: round;
  stroke-linejoin: round;
}
.ch-map .ch-map-lbl,
.dash-themed .ch-map .ch-map-lbl {
  fill: #344149;
  font-size: 8px;
  font-weight: 500;
}
.ch-map-scale text {
  fill: var(--dash-text);
  font-size: 9px;
}

/* 原站 dashboardLayers 的 x/y/w/h 是真正的二维栅格，不是简单文档流。
   38px 行高 + 12px 间距对应原站 h6≈288、h7≈338、h8≈388、h9≈438。 */
.crm-dashboard-section .dashboard-spec-grid {
  display: grid;
  position: relative;
  height: auto;
  padding: 12px;
  grid-template-columns: repeat(12, minmax(0, 1fr));
  grid-auto-rows: 38px;
  gap: 12px;
  align-items: stretch;
}
.crm-dashboard-section .dashboard-spec-grid > .ch-card {
  position: relative;
  left: auto;
  top: auto;
  width: auto;
  height: auto;
  min-width: 0;
  min-height: 0;
  margin: 0;
  overflow: hidden;
}
.crm-dashboard-section .dashboard-spec-grid > .ch-card .ch-body {
  height: calc(100% - 30px);
  min-height: 0;
}
.crm-dashboard-section .dashboard-spec-grid > .ch-card .ch-body > .ch-svg {
  height: 100%;
}

/* 三套原版横幅：深色橙金框、详细报表蓝色框、销售分析双翼。 */
.dash-banner-angular .banner-wave,
.dash-banner-report .banner-wave,
.dash-banner-analysis .banner-wave {
  display: none;
}
.banner-angular,
.banner-report,
.banner-analysis {
  display: none;
}
.dash-banner-angular .banner-angular,
.dash-banner-report .banner-report,
.dash-banner-analysis .banner-analysis {
  display: block;
}
.dash-banner-report .roi-banner {
  background: #e9ecfb;
}
.dash-banner-analysis .roi-banner {
  background: linear-gradient(90deg, #fdf9fc 0%, #f7f4f6 50%, #fffdf7 100%);
}

/* 原站 titleConfig.material 为空的页签(市场ROI分析/交易看板/目标看板/订单洞察):
   横幅是纯色的,没有花纹装饰 */
.dash-themed.dash-banner-plain .banner-art { display: none; }

/* ============ 人员选择弹窗(首页顶部「员工」筛选) ============
   尺寸取自原站实测:700 宽,左侧列表 + 右侧已选面板,底部「保存为默认值」 */
.pp-modal .pp-body { display: flex; height: 400px; }
.pp-left { flex: 1; display: flex; flex-direction: column; border-right: 1px solid var(--border); min-width: 0; }
.pp-right { width: 280px; display: flex; flex-direction: column; }
.pp-search { position: relative; margin: 12px 16px 8px; }
.pp-search input {
  width: 100%; height: 30px; border: 1px solid var(--link); border-radius: 4px;
  padding: 0 28px 0 10px; font-size: 13px; outline: none; box-sizing: border-box;
}
.pp-search svg { position: absolute; right: 8px; top: 7px; width: 15px; height: 15px; color: #9aa0a6; }
.pp-tabs { display: flex; gap: 4px; padding: 0 16px; border-bottom: 1px solid var(--border); }
.pp-tab { padding: 8px 12px; font-size: 13px; color: var(--text-2); cursor: pointer; border-bottom: 2px solid transparent; }
.pp-tab.cur { color: var(--link); border-bottom-color: var(--link); font-weight: 500; }
.pp-list { flex: 1; overflow-y: auto; padding: 4px 0; }
.pp-group { padding: 8px 16px 4px; font-size: 12px; color: #9aa0a6; }
.pp-row { display: flex; align-items: center; gap: 8px; padding: 6px 16px; cursor: pointer; font-size: 13px; }
.pp-row:hover { background: #f5f7fa; }
.pp-avatar {
  width: 22px; height: 22px; border-radius: 50%; background: #c8ccd4; color: #fff;
  display: flex; align-items: center; justify-content: center; font-size: 11px; flex: none;
}
.pp-name { color: var(--text); }
.pp-badge { color: var(--link); font-size: 12px; }
.pp-dept { margin-left: auto; color: #9aa0a6; font-size: 12px; }
.pp-empty { padding: 40px 0; text-align: center; color: #9aa0a6; font-size: 13px; }
.pp-right-head {
  display: flex; align-items: center; padding: 14px 16px 10px;
  font-size: 13px; color: var(--text); border-bottom: 1px solid var(--border);
}
.pp-clear { margin-left: auto; color: var(--link); cursor: pointer; }
.pp-chips { flex: 1; overflow-y: auto; padding: 6px 0; }
.pp-chip { display: flex; align-items: center; gap: 8px; padding: 6px 16px; font-size: 13px; }
.pp-chip:hover { background: #f5f7fa; }
.pp-x { margin-left: auto; color: #9aa0a6; cursor: pointer; }
.pp-x:hover { color: var(--text); }
.pp-foot { display: flex; align-items: center; }
.pp-default { margin-right: auto; display: flex; align-items: center; gap: 6px; font-size: 13px; color: var(--text); cursor: pointer; }

/* ============ 场景管理弹窗(CRM信息) ============ */
.sm-tip { font-size: 13px; color: var(--text); margin-bottom: 14px; }
.sm-cols { display: grid; grid-template-columns: 1fr 1fr; gap: 28px; }
.sm-cap { font-size: 12px; color: #9aa0a6; margin-bottom: 6px; }
.sm-box { height: 300px; border: 1px solid var(--border); border-radius: 4px; overflow-y: auto; padding: 8px 0; }
.sm-item { display: flex; align-items: center; gap: 8px; padding: 7px 16px; font-size: 13px; color: var(--text-2); cursor: pointer; }
.sm-item:hover { background: #f5f7fa; }
.sm-dot { width: 6px; height: 6px; border-radius: 50%; background: var(--link); flex: none; }

/* ============ 批量操作栏(勾选记录后出现) ============
   原站是独立一行,20 个操作横排;复刻版原来只有 3 个挤在标题行里 */
.bulk-bar {
  display: flex; align-items: center; flex-wrap: wrap; gap: 2px;
  padding: 7px 12px; background: #eef4ff; border-bottom: 1px solid var(--border);
  font-size: 13px;
}
.bb-count { color: var(--text); margin-right: 2px; }
.bb-count b { color: var(--link); }
.bb-clear { color: #9aa0a6; cursor: pointer; margin-right: 10px; padding: 0 4px; }
.bb-clear:hover { color: var(--text); }
.bb-act { color: var(--link); cursor: pointer; padding: 3px 8px; border-radius: 4px; white-space: nowrap; }
.bb-act:hover { background: rgba(46,97,246,.10); }
.bb-danger { color: var(--red, #e64545); }
.bb-more { color: #545861; font-weight: 700; letter-spacing: 1px; }
.pm-input {
  width: 100%; height: 32px; border: 1px solid var(--border); border-radius: 4px;
  padding: 0 10px; font-size: 13px; outline: none; box-sizing: border-box;
}
.pm-input:focus { border-color: var(--link); }

/* ============ 图表卡片的「AI解读」 ============
   原站是折叠成一个小图标,悬停展开成渐变紫色药丸 */
.ch-ai {
  display: inline-flex; align-items: center; gap: 3px; vertical-align: middle;
  height: 18px; margin-right: 5px; padding: 0 3px; border-radius: 9px;
  background: linear-gradient(90deg, #e9e2ff, #f3e8ff);
  overflow: hidden; max-width: 20px; cursor: pointer;
  transition: max-width .18s ease, padding .18s ease;
}
.ch-ai i { font-style: normal; font-size: 11px; line-height: 1; flex: none; }
.ch-ai b {
  font-size: 11px; font-weight: 500; color: #7c3aed; white-space: nowrap;
  opacity: 0; transition: opacity .18s ease;
}
.ch-card:hover .ch-ai, .ch-ai:hover { max-width: 66px; padding: 0 7px 0 4px; }
.ch-card:hover .ch-ai b, .ch-ai:hover b { opacity: 1; }

/* 右侧 AI 对话面板 */
.ai-panel {
  position: fixed; top: 0; right: 0; bottom: 0; width: 380px; z-index: 220;
  background: #fff; box-shadow: -6px 0 24px rgba(16,42,80,.14);
  display: flex; flex-direction: column; font-size: 13px;
}
.aip-head {
  height: 44px; flex: none; display: flex; align-items: center; justify-content: center;
  position: relative; font-size: 15px; font-weight: 600; color: var(--text);
  border-bottom: 1px solid var(--border);
}
.aip-close { position: absolute; right: 14px; color: #9aa0a6; cursor: pointer; font-size: 14px; }
.aip-close:hover { color: var(--text); }
.aip-body { flex: 1; overflow-y: auto; padding: 16px 16px 8px; }
.aip-ask {
  margin: 0 0 14px auto; max-width: 78%; width: fit-content;
  background: #eef2f7; border-radius: 10px; padding: 8px 12px; color: var(--text);
}
.aip-reply { color: var(--text); line-height: 1.75; margin-bottom: 16px; }
.aip-spin { color: #9aa0a6; }
.aip-item { display: flex; gap: 6px; margin-bottom: 10px; }
.aip-n { color: #9aa0a6; flex: none; }
.aip-item b { color: var(--text); }
.aip-sub { font-weight: 600; margin: 14px 0 8px; }
.aip-bullet { position: relative; padding-left: 14px; margin-bottom: 8px; color: var(--text-2); }
.aip-bullet::before { content: '•'; position: absolute; left: 2px; color: #9aa0a6; }
.aip-polish { margin-top: 12px; padding: 10px 12px; background: #f7f8fa; border-radius: 8px; color: var(--text-2); }
.aip-acts { display: flex; align-items: center; gap: 14px; margin-top: 16px; color: #9aa0a6; font-size: 13px; }
.aip-acts span { cursor: pointer; }
.aip-acts span:hover { color: var(--text); }
.aip-cost { margin-left: auto; cursor: default !important; font-size: 12px; }
.aip-input { flex: none; margin: 0 14px 8px; border: 1px solid var(--border); border-radius: 10px; padding: 8px 10px; }
.aip-input textarea {
  width: 100%; border: 0; outline: none; resize: none; height: 46px;
  font-size: 13px; font-family: inherit; color: var(--text);
}
.aip-tools { display: flex; align-items: center; }
.aip-plus { color: #9aa0a6; cursor: pointer; font-size: 16px; }
.aip-send {
  margin-left: auto; width: 24px; height: 24px; border-radius: 50%;
  background: var(--text); color: #fff; display: flex; align-items: center;
  justify-content: center; font-size: 11px; cursor: pointer;
}
.aip-foot { flex: none; text-align: center; color: #9aa0a6; font-size: 12px; padding: 0 0 12px; }

/* ============ 作战地图(客户详情页签)============ */
.bm-tools { display: flex; justify-content: flex-end; gap: 8px; padding: 10px 14px 0; }
.bm-t {
  width: 30px; height: 26px; border: 1px solid var(--border); border-radius: 5px;
  display: flex; align-items: center; justify-content: center;
  color: #545861; cursor: pointer; font-size: 13px; background: #fff;
}
.bm-t:hover { border-color: var(--link); color: var(--link); }
.bm-canvas { min-height: 320px; padding: 20px; overflow: auto; }
.bm-stage { transform-origin: top left; transition: transform .15s ease; display: inline-block; }
.bm-node {
  width: 270px; min-height: 84px; background: #fff; border: 1px solid var(--border);
  border-radius: 6px; padding: 12px 14px; box-shadow: 0 1px 4px rgba(16,42,80,.06);
}
.bm-root { border-top: 3px solid var(--link); }
.bm-name { font-size: 14px; font-weight: 600; color: var(--text); }
.bm-sub { margin-top: 6px; font-size: 12px; color: var(--text-2); }
.bm-children { display: flex; flex-wrap: wrap; gap: 14px; margin-top: 18px; padding-left: 40px; }
.bm-children .bm-node { width: 210px; min-height: 62px; }
.bm-contact { border-left: 3px solid #7cd78b; }
.bm-opp { border-left: 3px solid #efa550; }
.bm-empty { color: #9aa0a6; font-size: 13px; padding: 20px 0; }
.bm-only-contact .bm-opp { display: none; }
.bm-fullscreen {
  position: fixed; inset: 0; z-index: 200; background: #fff; overflow: auto;
}

/* 相关团队面板:操作列与添加/换人弹窗 */
.fd-team-ops a { color: var(--blue, #2f7fe8); cursor: pointer; margin-right: 8px; font-size: 12px; }
.fd-team-ops a:hover { text-decoration: underline; }
.fd-team-empty { color: #98a2b3; font-size: 12px; padding: 14px 4px; text-align: center; }
.fd-side-act { cursor: pointer; float: right; color: var(--blue, #2f7fe8); font-weight: 700; padding: 0 6px; }
.td-row { display: flex; align-items: center; margin-bottom: 12px; }
.td-row label { width: 72px; font-size: 13px; color: #4a5568; flex: none; }
.td-row input, .td-row select { flex: 1; height: 32px; padding: 0 8px; border: 1px solid #d9dde3; border-radius: 4px; font-size: 13px; }
.td-row input:disabled { background: #f5f6f8; color: #98a2b3; }

/* 客户档案(客户知识库) */
.ckb-wrap { padding: 4px 2px; }
.ckb-head { background: #f7f9fc; border: 1px solid #e8ecf2; border-radius: 8px; padding: 14px 16px; margin-bottom: 14px; }
.ckb-tit { font-size: 13px; color: #6b7280; margin-bottom: 10px; }
.ckb-chips { display: flex; flex-wrap: wrap; gap: 10px; margin-bottom: 10px; }
.ckb-chip { background: #fff; border: 1px solid #e3e8ef; border-radius: 6px; padding: 5px 12px; font-size: 13px; color: #4a5568; }
.ckb-chip b { color: #2f7fe8; font-size: 15px; margin-left: 2px; }
.ckb-sums { font-size: 13px; color: #4a5568; } .ckb-sums b { color: #16a34a; }
.ckb-team { font-size: 13px; color: #4a5568; margin-top: 8px; padding-top: 8px; border-top: 1px dashed #e3e8ef; }
.ckb-bar { display: flex; align-items: center; justify-content: space-between; margin-bottom: 12px; gap: 12px; }
.ckb-cats { display: flex; flex-wrap: wrap; gap: 6px; }
.ckb-cat { padding: 4px 12px; border-radius: 14px; font-size: 13px; color: #6b7280; cursor: pointer; background: #f2f5fa; }
.ckb-cat.on { background: #2f7fe8; color: #fff; }
.ckb-empty { color: #98a2b3; font-size: 13px; padding: 26px; text-align: center; background: #fafbfc; border-radius: 8px; }
.ckb-item { border: 1px solid #e8ecf2; border-radius: 8px; padding: 12px 14px; margin-bottom: 10px; }
.ckb-item-head { display: flex; align-items: center; gap: 8px; margin-bottom: 8px; flex-wrap: wrap; }
.ckb-badge { background: #eef4ff; color: #2f7fe8; border-radius: 4px; padding: 2px 8px; font-size: 12px; }
.ckb-period { background: #f2f5fa; color: #6b7280; border-radius: 4px; padding: 2px 8px; font-size: 12px; }
.ckb-item-tit { font-weight: 600; font-size: 14px; color: #1f2937; flex: 1; }
.ckb-vis { font-size: 11px; color: #98a2b3; border: 1px solid #e3e8ef; border-radius: 4px; padding: 1px 7px; }
.ckb-vis.pub { color: #16a34a; border-color: #bbf7d0; background: #f0fdf4; }
.ckb-ops a { color: #2f7fe8; cursor: pointer; margin-left: 8px; font-size: 12px; }
.ckb-item-body { font-size: 13px; color: #374151; line-height: 1.6; white-space: pre-wrap; }
.ckb-item-foot { font-size: 12px; color: #9ca3af; margin-top: 8px; }
.ckb-vis-hint { font-size: 11px; color: #9ca3af; margin-left: 8px; }

/* 待办事项 */
.todo-wrap { padding: 4px 2px; }
.todo-bar { display: flex; align-items: center; gap: 8px; margin-bottom: 12px; }
.todo-tab { padding: 5px 14px; border-radius: 14px; font-size: 13px; color: #6b7280; cursor: pointer; background: #f2f5fa; }
.todo-tab.cur { background: #2f7fe8; color: #fff; }
.todo-table td { vertical-align: middle; }
.todo-table tr.td-overdue td { background: #fff7f7; }
.td-pill { font-size: 12px; border-radius: 10px; padding: 2px 9px; }
.td-pill.open { background: #eef4ff; color: #2f7fe8; }
.td-pill.over { background: #fee2e2; color: #dc2626; }
.td-pill.done { background: #f0fdf4; color: #16a34a; }
.td-pill.miss { background: #fef3c7; color: #d97706; }
.td-place { color: #9ca3af; font-size: 12px; margin-left: 6px; }
.td-result { color: #4b5563; font-size: 12px; max-width: 240px; }
.todo-table a { color: #2f7fe8; cursor: pointer; margin-right: 8px; font-size: 12px; }
.td-tip { background: #f7f9fc; border-radius: 6px; padding: 9px 12px; font-size: 13px; color: #4b5563; margin-bottom: 12px; }
.td-by { font-size: 12px; color: #9ca3af; margin-top: 8px; }
.td-hint { font-size: 12px; color: #d97706; margin-top: 6px; }

/* 菜单分割线:线以下是本行业未启用的模块(2026-08-05)——不删只归拢,换行业能拿回来 */
.m-divider { padding: 14px 12px 6px; }
.m-divider span { display: block; font-size: 11px; color: #9aa5b5; line-height: 1.5;
  border-top: 1px solid #eceff3; padding-top: 10px; }
.m-group.m-off .m-lbl { color: #9aa5b5; }

/* ================================================================
   移动端适配(≤768px)—— 2026-08-07 客户反馈「手机上打不开像样的页面」
   思路:桌面结构一律不动,只在窄屏下把三栏改成「顶栏 + 抽屉」:
     · side-rail(64px 图标栏)+ menu-panel(200px 菜单)收进左侧抽屉,
       顶栏加汉堡钮开合(.m-nav-btn,桌面 display:none)
     · 列表表格本来就在 .lc-table-wrap 里 overflow:auto,窄屏横向滑就行
     · 详情抽屉 min-width:900px、AI 面板 380px、弹窗 480px → 全宽/限宽
     · 输入框 16px:iOS 上小于 16px 聚焦会强制放大整页
   ================================================================ */
.m-nav-btn { display: none; }
.m-nav-backdrop { display: none; }

@media (max-width: 768px) {
  /* ---- 顶栏:汉堡 + 搜索 + 头像,其余藏掉 ---- */
  .m-nav-btn {
    display: flex; flex-direction: column; justify-content: center; gap: 4px;
    width: 40px; height: 48px; padding: 0 10px; flex: none; cursor: pointer;
  }
  .m-nav-btn span { display: block; height: 2px; border-radius: 1px; background: #43474e; }
  .topbar { padding-right: 8px; }
  .topbar .logo-badge { margin: 0 8px 0 0; }
  .topbar .ent-name { display: none; }
  .topbar .tb-icon { display: none; }
  .topbar .search-wrap { width: auto; flex: 1; min-width: 0; margin-right: 6px; }
  /* 「全部」两个字被 flex 压得折成上下两行(实测 375px 屏)。
     它是搜索范围选择器,不该被压 —— 固定不换行、不参与收缩。 */
  .topbar .scope { white-space: nowrap; flex: 0 0 auto; }
  .topbar .tb-space { display: none; }
  .topbar .avatar { margin-left: 6px; }

  /* ---- 左侧两栏 → 抽屉(图标栏横排在上,菜单在下) ---- */
  .side-rail {
    position: fixed; top: 48px; left: 0; width: min(300px, 84vw); height: 68px;
    flex-direction: row; align-items: center; gap: 2px;
    margin: 0; padding: 8px 8px 6px; overflow-x: auto; overflow-y: hidden;
    border-right: 0; border-bottom: 1px solid #f0f1f3; box-shadow: 4px 0 24px rgba(16,42,80,.14);
    z-index: 302; transform: translateX(-105%); transition: transform .2s ease;
  }
  .side-rail .rail-item { flex: none; }
  .menu-panel {
    position: fixed; top: 116px; bottom: 0; left: 0; margin: 0;
    width: min(300px, 84vw) !important;                 /* 压过桌面的悬停收起态 */
    padding: 12px 9px 0 12px !important;
    box-shadow: 4px 0 24px rgba(16,42,80,.14);
    z-index: 302; transform: translateX(-105%); transition: transform .2s ease;
  }
  body.m-nav-open .side-rail, body.m-nav-open .menu-panel { transform: none; }
  .m-nav-backdrop { position: fixed; inset: 0; z-index: 301; background: rgba(0,0,0,.35); }
  body.m-nav-open .m-nav-backdrop { display: block; }

  /* ---- 列表页:筛选行换行,搜索框吃满剩余宽度,页签可横滑 ---- */
  .lc-head { flex-wrap: wrap; row-gap: 6px; padding: 12px 8px 0 12px; }
  .view-tabs { overflow-x: auto; }
  .lc-filter { flex-wrap: wrap; row-gap: 8px; padding: 4px 10px 10px; }
  .lc-filter .f-search { width: auto; flex: 1 1 180px; min-width: 150px; }

  /* ---- 详情抽屉 / 全屏表单 / 弹窗 / AI 面板 ---- */
  .fx-detail { width: 100%; min-width: 0; }
  /* 客户名普遍很长(「山西xx有限公司xx分公司」),flex:none 会把右侧
     上一条/下一条和操作按钮全顶出屏 —— 窄屏让名字可收缩截断 */
  .fx-detail .fd-name { flex: 1 1 auto; min-width: 80px; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
  /* 操作按钮一排十来个,窄屏挤不下 —— 头部整条横滑,名字保底 80px */
  .fx-detail .fd-head { gap: 6px; padding: 0 10px; overflow-x: auto; }
  .ff-nav { display: none; }                            /* 锚点导航栏,窄屏让位 */
  /* 表单字段网格有两套(cf-grid 弹窗版 / ff-grid 全屏建单版)——都得改单列。
     又是「同一能力多个入口」:只改一套,另一套在手机上还是被切一半。 */
  .cf-grid { grid-template-columns: 1fr; }
  .ff-grid { grid-template-columns: 1fr; gap: 0; }
  .ff-item label { width: 92px; }
  /* 表单头:标题别被挤成竖排,按钮多就整条横滑 */
  .ff-head { overflow-x: auto; gap: 8px; }
  .ff-title { white-space: nowrap; flex: none; }
  .ff-actions { flex: none; }
  .fx-modal { max-width: 94vw; }                        /* max-width 能压住行内 width */
  .ai-panel { width: 100%; }
  /* AI 挂件的浮层样式是 ai-widget.js 运行时注入的(width:400px),
     声明比本文件晚、同特异性会赢 —— 用双类把它压回视口内 */
  .ai-panel.aiw-panel { width: auto; left: 8px; right: 8px; }

  /* ---- 首页/驾驶舱图表 ---- */
  .chart-grid { grid-template-columns: 1fr; }
  .chart-grid > * { grid-column: auto !important; }     /* 图表块自带 span 1~12,压掉 */
  /* 销售简报统计卡:桌面写死 width:1262px(像素级复刻原站)+ 卡片容器定高
     296px 且 overflow:visible —— 手机上卡片横着捅出屏幕、竖着叠进下一个区块。
     窄屏下放开成流式:2 列、容器自适应高。 */
  .stat-grid { width: 100%; grid-template-columns: repeat(2, 1fr); gap: 10px; padding: 12px 0 0; }
  .stat-card { font-size: 13px; border-radius: 12px; padding: 0 8px 0 10px; }
  .stat-card .sc-num { font-size: 18px; padding-left: 8px; }
  .brief-card { height: auto; }
  /* 查重页与询价工具的宽表:定宽让位,横向滚动 */
  .dup-body { width: auto; padding: 24px 12px 0; }
  .quote-results { overflow-x: auto; }

  /* ---- 登录页 ---- */
  .login-card { width: min(390px, calc(100vw - 28px)); padding: 28px 22px 22px; }

  /* ---- iOS:输入框小于 16px 聚焦会整页放大 ---- */
  input, select, textarea { font-size: 16px; }
}
