/* JUNDA 外贸锂电池客户开发CRM系统 —— 全局样式 */
:root{
  /* ---- 品牌主色（用户指定 主色 #2886D4）---- */
  --brand:#14507e;          /* 主色深阶：标题、强调文字、卡片小标题 */
  --brand-deep:#103c60;     /* 深阶收尾色（备用） */
  --brand-2:#2886D4;        /* 主色：按钮、链接、选中态、聚焦环 */
  --brand-2-hover:#1f6aa8;  /* 主色悬停深阶 */
  --brand-2-soft:#e9f3fc;   /* 主色浅底（选中/悬停背景）*/
  --brand-2-line:#c3ddf6;   /* 主色浅边框 */

  --bg:#f3f7fb; --card:#ffffff;
  --line:#e2e9f2; --text:#1d2733; --muted:#7a8798;
  --login-bg:#ffffff;     /* 登录 / 找回 / 重置页背景 */

  /* ---- 语义配色（用户指定 配色 #7BB732 / #EEDC9B / #b9130a / #fd5e02）---- */
  --ok:#7BB732;      --ok-ink:#4d7a16;     --ok-bg:#f1f8e3;     --ok-line:#d7e9b4;
  --warn:#fd5e02;    --warn-ink:#b34302;   --warn-bg:#ffefe4;   --warn-line:#ffd0b0;
  --danger:#b9130a;  --danger-ink:#8f0f08; --danger-bg:#fdecea; --danger-line:#f6c9c5;
  --info:#2886D4;    --info-ink:#17548f;   --info-bg:#e9f3fc;   --info-line:#c3ddf6;
  --sand:#EEDC9B;    --sand-ink:#7d6420;   --sand-bg:#fdf8e8;   --sand-line:#f0e3bd;

  /* ---- 扩展标签色：区分不同标签用途（青 / 紫 / 玫红 / 灰）---- */
  --teal:#0E9AA7;     --teal-ink:#0a6f79;     --teal-bg:#e6f6f8;     --teal-line:#b8e5ea;
  --purple:#7C5CD6;   --purple-ink:#5a3fa8;   --purple-bg:#f1ecfc;   --purple-line:#d9cdf7;
  --magenta:#C2418E;  --magenta-ink:#8f2c67;  --magenta-bg:#fdecf5;  --magenta-line:#f6cbe2;
  --slate:#64748B;    --slate-ink:#475569;    --slate-bg:#eef1f5;    --slate-line:#d6dde6;

  /* ---- 侧边栏（白底浅色风格；主色只用于选中强调）---- */
  --nav-bg-1:#ffffff;  --nav-bg-2:#ffffff;
  --nav-ink:#1d2733;      /* 品牌名、悬停/选中文字 */
  --nav-ink-2:#41546c;    /* 分组标题、菜单项常规文字 */
  --nav-ink-3:#7a8798;    /* 副标题、页脚版本号 */
  --nav-hover:#f2f6fb;    /* 菜单项/分组标题悬停底 */
  --nav-active:#e9f3fc;   /* 当前页高亮底（主色浅底） */
  --nav-line:#e6ecf4;     /* 分隔线 */
  --nav-accent:#2886D4;   /* 选中态左侧竖条：保留品牌主色 */

  --shadow:0 1px 3px rgba(16,60,96,.06),0 6px 18px rgba(16,60,96,.05);

  /* ---- 圆角标尺（全站统一，不再各自硬编码）---- */
  --radius-xs:4px;      /* 行内小元素：code、图例色块 */
  --radius-sm:8px;      /* 控件：按钮、输入框、菜单项、提示条、分页按钮 */
  --radius:10px;        /* 容器：卡片、任务卡、模板卡 */
  --radius-lg:12px;     /* 浮层：弹窗、登录卡、403 页 */
  --radius-pill:999px;  /* 胶囊：徽标、产品标签 */

  /* ---- 间距标尺 ---- */
  --gap-1:4px; --gap-2:8px; --gap-3:12px; --gap-4:16px;

  /* 表单控件 / 按钮统一高度（筛选栏、工具栏、表单全站一致） */
  --ctl-h:34px;
}
*{box-sizing:border-box}
html,body{margin:0;padding:0}
body{
  font:14px/1.6 -apple-system,BlinkMacSystemFont,"Segoe UI","PingFang SC","Hiragino Sans GB",
  "Microsoft YaHei",sans-serif;
  color:var(--text); background:var(--bg);
}
a{color:var(--brand-2); text-decoration:none}
a:hover{text-decoration:underline}
code{background:#eef2f8;padding:1px 5px;border-radius:var(--radius-xs);font-size:12.5px}
.muted{color:var(--muted)}
.mono{font-family:ui-monospace,Menlo,Consolas,monospace}
.link{color:var(--brand-2);font-weight:500}
.link:hover{text-decoration:underline}
.rowcheck{cursor:pointer;width:14px;height:14px;vertical-align:middle}

/* ---------- 布局 ---------- */
.layout{display:flex;min-height:100vh}
.sidebar{
  width:238px;flex:0 0 238px;background:linear-gradient(180deg,var(--nav-bg-1),var(--nav-bg-2));
  border-right:1px solid var(--nav-line);
  color:var(--nav-ink);display:flex;flex-direction:column;position:sticky;top:0;height:100vh
}
/* 菜单顶部品牌区：高度约为原先的两倍，留出呼吸空间 */
.brand{display:flex;gap:14px;align-items:center;padding:22px 18px;min-height:132px;
  box-sizing:border-box;border-bottom:1px solid var(--nav-line)}
.brand-logo{width:64px;height:64px;flex:0 0 64px;display:block;border-radius:15px;
  object-fit:cover;box-shadow:0 3px 10px rgba(16,60,96,.18)}
.brand-text{min-width:0;overflow:hidden}
.brand-text b{display:block;color:var(--nav-ink);font-size:19px;letter-spacing:.6px;line-height:1.3}
.brand-text span{display:block;font-size:12.5px;color:var(--nav-ink-3);line-height:1.5;margin-top:2px}
.nav{flex:1;overflow-y:auto;padding:10px 8px}
.nav-group{margin-bottom:6px}

/* ---------- 一级菜单（分组标题 + 顶层直达项）----------
   字号比二级菜单大一号，加粗、深色，图标用主色，与二级菜单一眼可分 */
.nav-title{display:flex;align-items:center;gap:var(--gap-2);padding:11px 10px;
  font-size:15px;font-weight:600;color:var(--nav-ink);letter-spacing:.2px;
  border-radius:var(--radius-sm);cursor:pointer;user-select:none;-webkit-user-select:none}
.nav-title:hover{background:var(--nav-hover)}
.nav-title::after{content:"\25B8";margin-left:auto;font-size:10px;opacity:.55;
  transition:transform .15s ease}
.nav-group.open .nav-title::after{transform:rotate(90deg)}
.nav-title i{font-style:normal;font-size:15px;color:var(--brand-2)}

/* ---------- 二级菜单（分组内的子页面）----------
   字号小一号、常规字重、浅色；左侧缩进 + 竖向导引线 + 圆点，体现从属关系。
   选择器限定在 .nav-items 内，避免与顶层直达项（.nav-item-top）互相覆盖 */
.nav-items{display:none;margin:0 0 4px 16px;padding:2px 0 2px 10px;
  border-left:1px solid var(--nav-line)}
.nav-group.open .nav-items{display:block}
.nav-items .nav-item{display:block;position:relative;padding:7px 10px 7px 20px;margin:1px 0;
  border-radius:var(--radius-sm);color:var(--nav-ink-2);font-size:14px;font-weight:400}
.nav-items .nav-item:hover{background:var(--nav-hover);color:var(--nav-ink);text-decoration:none}
.nav-items .nav-item.active{background:var(--nav-active);color:var(--nav-ink);font-weight:600;
  box-shadow:inset 3px 0 0 var(--nav-accent)}
/* 二级菜单圆点标记：默认灰点，命中当前页变主色 */
.nav-items .nav-item::before{content:"";position:absolute;left:8px;top:50%;
  width:5px;height:5px;margin-top:-2.5px;border-radius:50%;background:#c6d3e0}
.nav-items .nav-item:hover::before{background:var(--nav-ink-3)}
.nav-items .nav-item.active::before{background:var(--nav-accent)}

/* ---------- 一级菜单（顶层直达项，放在二级样式之后以便覆盖）---------- */
.nav-item-top{display:flex;align-items:center;gap:var(--gap-2);
  font-size:15px;font-weight:600;color:var(--nav-ink);letter-spacing:.2px;
  margin:0 0 6px;padding:11px 10px}
.nav-item-top i{font-style:normal;font-size:15px;color:var(--brand-2)}
/* 左下角账号信息：头像 + 登录名 + 角色，底部一行放版本与退出 */
.sidefoot{padding:12px 14px;border-top:1px solid var(--nav-line);color:var(--nav-ink-3)}
.sf-user{display:flex;align-items:center;gap:var(--gap-2);min-width:0}
.sf-avatar{flex:0 0 34px;width:34px;height:34px;border-radius:50%;display:flex;
  align-items:center;justify-content:center;font-size:14px;font-weight:600;
  color:#fff;background:var(--brand-2);text-transform:uppercase;
  box-shadow:0 2px 6px rgba(16,60,96,.2)}
.sf-text{min-width:0;overflow:hidden}
.sf-text b{display:block;font-size:13.5px;font-weight:600;color:var(--nav-ink);line-height:1.4;
  white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.sf-text span{display:block;font-size:12px;color:var(--nav-ink-3);line-height:1.4}
.sf-bar{display:flex;justify-content:space-between;align-items:center;gap:var(--gap-2);
  font-size:12px;margin-top:10px;padding-top:8px;border-top:1px dashed var(--nav-line)}
.sf-bar a{color:var(--nav-ink-2)}
.main{flex:1;min-width:0;display:flex;flex-direction:column}
.topbar{display:flex;justify-content:space-between;align-items:flex-start;gap:var(--gap-4);
  padding:18px 26px 12px;background:#fff;border-bottom:1px solid var(--line)}
.topbar h1{margin:0;font-size:19px;letter-spacing:.2px}
.tb-left{flex:1;min-width:0}
.tb-desc{margin:4px 0 0;font-size:12.5px;color:var(--muted)}
.tb-right{display:flex;align-items:center;gap:var(--gap-3);white-space:nowrap;flex:0 0 auto}
.clock{font-size:13.5px;color:var(--muted);white-space:nowrap;padding-top:3px;
  font-variant-numeric:tabular-nums;letter-spacing:.3px}
.content{padding:18px 26px 30px;flex:1}
.footer{padding:14px 26px 24px;font-size:12px;color:var(--muted)}

/* ---------- 卡片 ---------- */
.card{background:var(--card);border:1px solid var(--line);border-radius:var(--radius);
  box-shadow:var(--shadow);margin-bottom:18px;padding:16px 18px}
.card-head{display:flex;justify-content:space-between;align-items:center;gap:var(--gap-3);margin-bottom:12px;
  flex-wrap:wrap}
.card-head h2{margin:0;font-size:15.5px}
.head-actions{display:flex;gap:var(--gap-2);flex-wrap:wrap}
.sec{margin:18px 0 8px;font-size:13.5px;color:var(--brand);border-left:3px solid var(--brand-2);
  padding-left:8px}
.cards{display:grid;grid-template-columns:repeat(auto-fit,minmax(190px,1fr));gap:var(--gap-3);margin-bottom:18px}
.cards.mini{grid-template-columns:repeat(auto-fit,minmax(150px,1fr))}
/* 仪表盘 8 张指标卡：auto-fit 在宽屏会排成 6+2 这种不对称的两行，
   这里钉成 4 列（8 张正好 4+4）；窗口收窄时逐级降到 2 列 / 1 列。 */
.cards.cards-4{grid-template-columns:repeat(4,minmax(0,1fr))}
@media (max-width:1100px){.cards.cards-4{grid-template-columns:repeat(2,minmax(0,1fr))}}
@media (max-width:620px){.cards.cards-4{grid-template-columns:1fr}}
.card.stat{padding:16px;border-left:4px solid var(--brand-2);margin:0}
.card.stat .stat-label{font-size:12.5px;color:var(--muted)}
.card.stat .stat-value{font-size:26px;font-weight:700;margin:4px 0 2px;letter-spacing:.5px}
.card.stat .stat-sub{font-size:12px;color:var(--muted)}
.card.stat.ok{border-left-color:var(--ok)}
.card.stat.warn{border-left-color:var(--warn)}
.card.stat.danger{border-left-color:var(--danger)}
.card.stat.info{border-left-color:var(--info)}
.grid-1,.grid-2{display:grid;gap:var(--gap-4)}
.grid-2{grid-template-columns:repeat(auto-fit,minmax(420px,1fr))}
.chart-wrap{overflow-x:auto}
.legend-wrap{margin-top:8px}

/* ---------- 按钮 ---------- */
.btn{display:inline-flex;align-items:center;justify-content:center;gap:var(--gap-2);
  height:var(--ctl-h);padding:0 14px;
  border:1px solid var(--line);border-radius:var(--radius-sm);background:#fff;color:var(--text);font-size:13px;
  cursor:pointer;line-height:1}
.btn:hover{border-color:#c9d5e5;text-decoration:none}
.btn.primary{background:var(--brand-2);border-color:var(--brand-2);color:#fff}
.btn.primary:hover{background:var(--brand-2-hover)}
.btn.ghost{background:transparent}
.btn.danger{background:var(--danger);border-color:var(--danger);color:#fff}
.btn.small{height:29px;padding:0 10px;font-size:12.5px}
.btn.block{width:100%;height:auto;padding:12px}
.op{border:0;background:none;color:var(--brand-2);cursor:pointer;font-size:12.5px;padding:2px 6px;
  border-radius:var(--radius-xs)}
.op:hover{background:var(--brand-2-soft);text-decoration:none}
.op.danger{color:var(--danger)}
form.inline{display:inline}

/* ---------- 表格 ---------- */
.table-wrap{overflow-x:auto}
.data-table{width:100%;border-collapse:collapse;font-size:13px}
.data-table th,.data-table td{border-bottom:1px solid var(--line);padding:9px 10px;text-align:left;
  vertical-align:middle}
.data-table thead th{background:#f7f9fc;color:#4a5a70;font-weight:600;font-size:12.5px;
  white-space:nowrap;position:sticky;top:0}
.data-table tbody tr:hover{background:#fafcff}
.data-table td.ck,.data-table th.ck{width:36px;text-align:center}
.data-table th.ops-h,.data-table td.ops{white-space:nowrap}
.thlink{color:#4a5a70}
/* 数值列右对齐 + 等宽数字，位数不同也能纵向比对 */
.data-table th.num,.data-table td.num{text-align:right;font-variant-numeric:tabular-nums}
.wrap-cell{max-width:420px;white-space:normal;word-break:break-word}
.ok-t{color:var(--ok);font-weight:600}
.no-t{color:var(--danger)}
.kv{width:100%;border-collapse:collapse;font-size:13px}
.kv th{width:170px;text-align:left;color:var(--muted);font-weight:500;padding:5px 10px 5px 0;
  vertical-align:top}
.kv td{padding:5px 0;word-break:break-word}
.grid-kv th{width:190px}
.param-table td input[type=text],.param-table td input[type=number]{width:100%;max-width:260px}
/* 全局参数配置：四列按比例分（不再写死 px 宽度），说明列必须折行。
   此前最后一列被全局规则 table.data-table td:last-child{white-space:nowrap} 强制不换行，
   长说明直接顶出卡片右侧（实测截图）。这里用更高优先级的选择器把它改回折行，长文案自动排成两行。 */
.param-table{table-layout:fixed}
.param-table th:nth-child(1),.param-table td:nth-child(1){width:22%}
.param-table th:nth-child(2),.param-table td:nth-child(2){width:16%}
.param-table th:nth-child(3),.param-table td:nth-child(3){width:26%}
.param-table th:nth-child(4),.param-table td:nth-child(4){width:36%}
table.data-table.param-table th:last-child,table.data-table.param-table td:last-child{
  white-space:normal;word-break:break-word}
/* 草稿池：一行一稿（正文只在【编辑】弹窗里看），操作列固定在右侧。
   两条教训（2026-09-30 实机截图，用户报的"乱码"）：
   1) 这张表**绝不能套 `param-table` 类** —— 那是全局参数页的 4 列宽度（22/16/26/36% = 100%），
      套到 7~8 列的草稿表上会把「主题/生成方/操作」三列挤成 0 宽，变成一列一个字；
   2) 用**自动表格布局**（不写 table-layout:fixed）：自动布局下任何列都不会窄于它的 min-content，
      从根上杜绝"整列被挤没"；操作列用 `width:1%` + nowrap 的经典写法取内容实宽，其余列按比例分。 */
.draft-table{width:100%}
.draft-table td,.draft-table th{vertical-align:top;word-break:break-word}
.draft-table th:nth-child(1),.draft-table td:nth-child(1){width:19%}
.draft-table th.ops-h,.draft-table td.ops{width:1%;white-space:nowrap}
.draft-table td.ops .inline{margin:0 0 4px 4px}

/* ---------- 品牌外观设置 / 行内小表单 ---------- */
.brand-preview{display:flex;align-items:center;gap:var(--gap-3);padding:14px;margin-bottom:14px;
  background:var(--brand-2-soft);border:1px solid var(--brand-2-line);border-radius:var(--radius)}
.brand-preview img{width:64px;height:64px;flex:0 0 64px;border-radius:15px;object-fit:cover;
  box-shadow:0 3px 10px rgba(16,60,96,.22)}
.brand-preview b{display:block;font-size:17px;color:var(--brand);line-height:1.35}
.brand-preview span{display:block;font-size:12.5px;color:var(--muted);margin-top:2px}
.brand-preview .hint{margin:6px 0 0}
.inline-form{display:flex;align-items:center;gap:var(--gap-1)}
.inline-form input[type=email]{flex:1;min-width:0;height:29px;font-size:12.5px}

/* ---------- 徽章 ---------- */
.badge{display:inline-block;padding:2px 8px;border-radius:var(--radius-pill);font-size:12px;background:#eef2f8;
  color:#4a5a70;white-space:nowrap;border:1px solid transparent}
.badge.ok{background:var(--ok-bg);color:var(--ok-ink);border-color:var(--ok-line)}
.badge.warn{background:var(--warn-bg);color:var(--warn-ink);border-color:var(--warn-line)}
.badge.danger{background:var(--danger-bg);color:var(--danger-ink);border-color:var(--danger-line)}
.badge.info{background:var(--info-bg);color:var(--info-ink);border-color:var(--info-line)}
.badge.sand{background:var(--sand-bg);color:var(--sand-ink);border-color:var(--sand-line)}
.badge.teal{background:var(--teal-bg);color:var(--teal-ink);border-color:var(--teal-line)}
.badge.purple{background:var(--purple-bg);color:var(--purple-ink);border-color:var(--purple-line)}
.badge.magenta{background:var(--magenta-bg);color:var(--magenta-ink);border-color:var(--magenta-line)}
.badge.slate{background:var(--slate-bg);color:var(--slate-ink);border-color:var(--slate-line)}

/* ---------- 提示 ---------- */
.alert{padding:10px 14px;border-radius:var(--radius-sm);margin:0 26px 14px;font-size:13px;border:1px solid transparent}
.alert.ok{background:var(--ok-bg);border-color:var(--ok-line);color:var(--ok-ink)}
.alert.err{background:var(--danger-bg);border-color:var(--danger-line);color:var(--danger-ink)}
.alert.warn{background:var(--warn-bg);border-color:var(--warn-line);color:var(--warn-ink)}
.alert.info{background:var(--info-bg);border-color:var(--info-line);color:var(--info-ink)}
.note{background:var(--sand-bg);border:1px solid var(--sand-line);color:var(--sand-ink);border-radius:var(--radius-sm);
  padding:10px 14px;font-size:12.5px;margin-bottom:16px}
.hint{font-size:12.5px;color:var(--muted);margin:6px 0}
/* 列表页级说明（页面配置的 hint）：交代这一页收录谁、怎么才会进来。
   带浅色底，避免被误当成一行空白忽略；下面就是筛选栏，故下边距给足。 */
.page-hint{background:var(--sand-bg);border:1px solid var(--sand-line);color:var(--sand-ink);
  border-radius:var(--radius-sm);padding:9px 13px;margin:0 0 14px;line-height:1.6}
.empty-state{padding:34px 10px;text-align:center;color:var(--muted)}
.forbidden{max-width:520px;margin:80px auto;background:#fff;border:1px solid var(--line);
  border-radius:var(--radius-lg);padding:28px;text-align:center}
.plain-list{margin:0;padding-left:20px;font-size:13px;color:#33465c}
.plain-list li{margin:6px 0}

/* ---------- 工具栏 / 筛选 ---------- */
.toolbar{display:flex;justify-content:space-between;gap:var(--gap-3);flex-wrap:wrap;margin-bottom:12px}
.searchbar{display:flex;gap:var(--gap-2);flex-wrap:wrap}
.searchbar input{width:300px}
.tools{display:flex;gap:var(--gap-2);flex-wrap:wrap}
.filterbar{display:flex;gap:var(--gap-3);flex-wrap:wrap;align-items:flex-end;background:#f8fafd;
  border:1px dashed var(--line);border-radius:var(--radius-sm);padding:10px 12px;margin-bottom:12px}
.filter{display:flex;flex-direction:column;gap:var(--gap-1)}
.filter label{font-size:12px;color:var(--muted);line-height:16px}
/* 起止日期固定在同一行，不参与外层纵向堆叠 */
.daterange{display:flex;align-items:center;gap:var(--gap-1)}
.daterange input[type=date]{width:146px}
.daterange .tilde{color:var(--muted);flex:0 0 auto}
.filter .tilde{align-self:center;color:var(--muted)}
.filter.actions{flex-direction:row;gap:var(--gap-2);align-items:flex-end}
/* 工具栏与筛选栏内的控件/按钮统一同高，视觉对齐 */
.toolbar .btn,.toolbar input,.toolbar select,
.filterbar .btn,.filterbar input,.filterbar select{height:var(--ctl-h)}
input[type=text],input[type=password],input[type=number],input[type=date],select{
  height:var(--ctl-h);padding:0 10px;border:1px solid #d5dde8;border-radius:var(--radius-sm);
  background:#fff;font-size:13px;font-family:inherit;color:var(--text);max-width:100%
}
textarea{
  padding:8px 10px;border:1px solid #d5dde8;border-radius:var(--radius-sm);background:#fff;font-size:13px;
  font-family:inherit;color:var(--text);max-width:100%
}
input:focus,select:focus,textarea:focus{outline:none;border-color:var(--brand-2);
  box-shadow:0 0 0 3px rgba(40,134,212,.16)}
.pager{display:flex;gap:var(--gap-2);align-items:center;padding:12px 2px 2px;flex-wrap:wrap}
.pg{padding:5px 10px;border:1px solid var(--line);border-radius:var(--radius-sm);font-size:12.5px;color:#41546c}
.pg.active{background:var(--brand-2);border-color:var(--brand-2);color:#fff}
.pg.disabled{opacity:.45;pointer-events:none}

/* ---------- 表单 ---------- */
.form-grid{display:grid;grid-template-columns:repeat(auto-fit,minmax(260px,1fr));gap:var(--gap-3)}
.field{display:flex;flex-direction:column;gap:var(--gap-1)}
.field.wide{grid-column:1/-1}
.field label{font-size:12.5px;color:#4a5a70}
.field .req{color:var(--danger);font-style:normal;margin-left:3px}
.field input,.field select,.field textarea{width:100%}
.form-actions{display:flex;gap:var(--gap-2);align-items:center;margin-top:16px}
.form-actions.wide{grid-column:1/-1}
.switch{display:inline-flex;align-items:center;gap:var(--gap-2);font-size:13px}
.switch input{width:auto}
.inline-edit{border-top:1px dashed var(--line);margin-top:14px;padding-top:14px}

/* ---------- 标签页 ---------- */
.tabs{display:flex;gap:var(--gap-2);border-bottom:1px solid var(--line);margin-bottom:14px;flex-wrap:wrap}
.tab{background:none;border:0;padding:9px 14px;font-size:13.5px;color:#5a6b81;cursor:pointer;
  border-bottom:2px solid transparent}
.tab:hover{color:var(--brand-2)}
.tab.active{color:var(--brand-2);border-bottom-color:var(--brand-2);font-weight:600}
.tab-panel{display:none}
.tab-panel.active{display:block}

/* ---------- 弹窗 ---------- */
.modal{position:fixed;inset:0;background:rgba(18,28,44,.45);display:flex;align-items:flex-start;
  justify-content:center;padding:48px 16px;z-index:60;overflow-y:auto}
.modal[hidden]{display:none}
.modal-box{background:#fff;border-radius:var(--radius-lg);width:100%;max-width:840px;box-shadow:0 18px 50px rgba(15,25,40,.3)}
.modal-box.small{max-width:520px}
.modal-head{display:flex;justify-content:space-between;align-items:center;padding:14px 18px;
  border-bottom:1px solid var(--line)}
.modal-head h3{margin:0;font-size:15px}
.modal-head .x{border:0;background:none;font-size:22px;line-height:1;color:var(--muted);cursor:pointer}
.modal-body{padding:16px 18px 6px}
.modal-body.form-grid{display:grid}
.modal-foot{display:flex;justify-content:flex-end;gap:var(--gap-2);padding:14px 0 16px;
  grid-column:1/-1;border-top:1px solid var(--line);margin-top:6px}
/* .modal-foot 的左右内边距原本由父级 .modal-body（16px 18px 6px）提供。
   若页脚直接挂在同样没有内边距的 .modal-box 下（页内确认弹窗、邮件详情弹窗），
   左右内边距就是 0 —— 按钮一路贴到卡片边缘，视觉上「出框」。
   这里让「直接挂在卡片下」的页脚自带左右内边距，两种结构都能正确排版。 */
.modal-box > .modal-foot{padding-left:18px;padding-right:18px}
/* 自定义任务卡底部的删除页脚：它是独立表单，与保存页脚同级 */
.modal-box > .modal-foot-danger{display:flex;justify-content:flex-start;align-items:center;
  gap:var(--gap-2);padding:12px 18px 16px;margin:0;border-top:1px solid var(--line)}
/* 页内确认/提示弹窗：盖在任何已打开的弹窗之上（原生 confirm 在 WKWebView 里不可用） */
.confirm-modal{z-index:80}
.confirm-modal .modal-body{padding:18px 18px 6px}
.confirm-modal .cf-msg{margin:0;font-size:13.5px;line-height:1.75;color:var(--text);
  white-space:pre-wrap;word-break:break-word}
.mail-body{background:#f7f9fc;border:1px solid var(--line);border-radius:var(--radius-sm);padding:12px;
  white-space:pre-wrap;word-break:break-word;font-size:12.5px;max-height:340px;overflow:auto}
/* 邮件正文阅读弹窗（客户/线索详情「邮件往来记录 › 查看正文」）：正文区更高、可上下拖动滑块阅读 */
.mail-body.tall{max-height:62vh;margin:0;font-size:13px;line-height:1.75}
.mail-read{padding-bottom:18px}
.mail-read-actions{display:flex;align-items:center;gap:8px}

/* ---------- 任务卡 ---------- */
.task-grid{display:grid;grid-template-columns:repeat(auto-fit,minmax(370px,1fr));gap:var(--gap-3)}
.task-card{border:1px solid var(--line);border-radius:var(--radius);padding:14px;background:#fff;
  border-top:3px solid #cbd8ea}
.task-card.ok{border-top-color:var(--ok)}
.task-card.danger{border-top-color:var(--danger)}
.task-card.warn{border-top-color:var(--warn)}
.task-head{display:flex;align-items:center;gap:var(--gap-2);margin-bottom:8px;flex-wrap:wrap}
.task-head b{font-size:15px;color:var(--brand)}
.task-name{font-size:13.5px;font-weight:600}
.flow{margin-top:8px;font-size:12.5px;color:#41546c}
.flow ol{margin:6px 0 0;padding-left:20px}
.task-ops{display:flex;gap:var(--gap-2);flex-wrap:wrap;margin-top:12px;padding-top:10px;
  border-top:1px dashed var(--line)}

/* ---------- 模板卡 ---------- */
.tpl-list{display:grid;grid-template-columns:repeat(auto-fit,minmax(400px,1fr));gap:var(--gap-3)}
.tpl-card{border:1px solid var(--line);border-radius:var(--radius);padding:14px;background:#fff}
.tpl-head{display:flex;justify-content:space-between;align-items:center;gap:var(--gap-2)}
.tpl-subject{font-size:13px;color:var(--brand-2);margin:6px 0}
.tpl-body{background:#f7f9fc;border:1px solid var(--line);border-radius:var(--radius-sm);padding:10px;
  white-space:pre-wrap;font-size:12.5px;max-height:230px;overflow:auto;margin:0}
.tpl-meta{display:flex;gap:var(--gap-3);flex-wrap:wrap;font-size:12px;margin-top:8px}
.tpl-ops{display:flex;gap:var(--gap-2);margin-top:10px}
.report-list{list-style:none;margin:0;padding:0}
.report-list li{display:flex;justify-content:space-between;align-items:center;gap:var(--gap-2);
  padding:9px 0;border-bottom:1px solid var(--line)}
pre.report{background:#f7f9fc;border:1px solid var(--line);border-radius:var(--radius-sm);padding:14px;
  white-space:pre-wrap;word-break:break-word;font-size:12.5px;max-height:640px;overflow:auto}

/* ---------- 图表 ----------
   max-width 与 charts.py 的 CHART_W 对齐：SVG 基本按 1:1 渲染，字号所见即所得
   （旧版画布 820px 被压到 ~480px，13px 实际只渲染出 ~7px，故肉眼偏小）。
   图表内所有文字统一 13px，与漏斗图阶段名「线索总量」同号。 */
.chart{width:100%;max-width:520px;height:auto;display:block;margin:0 auto}
/* 柱状图 / 漏斗图撑满所在卡片（2026-09-30「图表适配模块宽度」）：
   画布宽度由 charts.BAR_W(1200) 或 BAR_W_SIDE(580) 决定，`.chart{max-width:520px}` 会把它们
   压回 520px 并在卡内留出空档，下面两条解除上限 —— 画布宽度≈卡片宽度，缩放比≈1，字号不变形。 */
.chart.chart-bar{max-width:none;margin:0}
.chart.chart-fill{max-width:none;margin:0}
.chart .ax{font-size:13px;fill:#6b7c93}
.chart .vl{font-size:13px;fill:#33465c;font-weight:600}
.chart .fl{font-size:13px;fill:#33465c}
.chart .sub{font-size:13px;fill:#6b7c93}
.chart .dnum{font-size:22px;font-weight:700;fill:#1d2733}
.chart .dsub{font-size:13px;fill:#6b7c93}
/* 环形图扇区上的占比数字：黑字、不加粗（2026-09-30 用户口径：白字压色块看不清、加粗过重） */
.chart .dpct{font-size:12.5px;fill:#000}
.chart.donut{max-width:230px}
.legend{list-style:none;display:flex;gap:var(--gap-4);flex-wrap:wrap;margin:0;padding:0;font-size:13px}
.legend i{display:inline-block;width:11px;height:11px;border-radius:var(--radius-xs);margin-right:6px}
.legend b{font-weight:700;letter-spacing:.3px}
.legend .pct{margin-left:5px;color:var(--muted)}
.spark{vertical-align:middle}

/* ---------- 登录页（白底；卡片靠描边 + 浅投影与底色分离）---------- */
.login-page{background:var(--login-bg);min-height:100vh;
  display:flex;align-items:center;justify-content:center;padding:30px 16px}
.login-wrap{width:100%;max-width:430px}
.login-card{background:#fff;border:1px solid var(--line);border-radius:var(--radius-lg);
  padding:30px 28px 22px;box-shadow:0 10px 30px rgba(16,60,96,.10)}
.login-head{text-align:center;margin-bottom:18px}
.login-head h1{font-size:18px;margin:0 0 6px}
.login-head p{margin:0;font-size:12.5px;color:var(--muted)}
.login-logo{width:96px;height:96px;display:block;margin:0 auto 16px;border-radius:23px;
  box-shadow:0 8px 22px rgba(16,60,96,.22);object-fit:cover}
.login-form{display:flex;flex-direction:column;gap:var(--gap-3)}
.login-row{display:flex;align-items:center;justify-content:space-between;gap:var(--gap-2);
  margin-top:-2px;flex-wrap:wrap}
.check{display:flex;align-items:center;gap:6px;font-size:12.5px;color:var(--muted);cursor:pointer}
.check input{width:14px;height:14px;margin:0;cursor:pointer;accent-color:var(--brand-2)}
.login-link{color:var(--brand-2);font-size:12.5px}
.login-link:hover{text-decoration:underline}
.login-link.center{display:block;text-align:center;margin-top:12px}
.login-actions{display:flex;flex-direction:column;gap:var(--gap-2);margin-top:16px;text-align:center}
.login-foot{text-align:center;font-size:11.5px;color:var(--muted);margin:16px 0 0}

@media (max-width:960px){
  .layout{flex-direction:column}
  .sidebar{width:100%;flex:none;height:auto;position:static;border-right:0;
    border-bottom:1px solid var(--nav-line)}
  .nav-items{display:block}
  .nav-title{cursor:default}
  .nav-title::after{display:none}
  .content,.topbar,.footer,.alert{padding-left:14px;padding-right:14px}
  .alert{margin-left:14px;margin-right:14px}
}

/* ---------- AI知识库：知识条目 / 文档库 / 索引目录 ---------- */
.kb-groups{display:flex;flex-direction:column;gap:var(--gap-4)}
.kb-group-head{display:flex;align-items:center;gap:var(--gap-2);margin:0 0 10px;font-size:14px;
  color:var(--brand);font-weight:600}
.kb-list{display:grid;grid-template-columns:repeat(auto-fit,minmax(360px,1fr));gap:var(--gap-3)}
.kb-card{background:var(--bg);border:1px solid var(--line);border-left:3px solid var(--brand-2);
  border-radius:var(--radius-sm);padding:12px 14px;min-width:0}
.kb-card-head{display:flex;justify-content:space-between;align-items:baseline;gap:var(--gap-2)}
.kb-card-head b{font-size:14px;color:var(--text);line-height:1.5}
.kb-meta{flex:0 0 auto;font-size:12px;color:var(--muted)}
.kb-body{margin:8px 0;font:13px/1.7 -apple-system,BlinkMacSystemFont,"PingFang SC","Microsoft YaHei UI",sans-serif;
  color:var(--text);white-space:pre-wrap;word-break:break-word;max-height:220px;overflow:auto;
  background:#fff;border:1px solid var(--line);border-radius:var(--radius-xs);padding:10px 12px}
.kb-foot{display:flex;align-items:center;gap:var(--gap-2);flex-wrap:wrap}
.kb-src{font-size:12px;margin-left:auto;max-width:240px;overflow:hidden;text-overflow:ellipsis;
  white-space:nowrap}
.kb-ops{display:flex;align-items:center;gap:var(--gap-2);margin-left:auto}
.kb-foot .badge + .kb-src{margin-left:auto}
.kb-excerpt,.kb-note{font-size:12px;line-height:1.6;margin-top:3px;max-width:640px}
.kb-note{color:var(--warn)}
.kb-kw{font-size:13px;line-height:1.9;color:var(--text);margin:0 0 8px;word-break:break-word}
.upload-form{border:1px solid var(--line);border-radius:var(--radius-sm);padding:14px;background:var(--bg)}

/* 索引目录 */
.idx-stats{display:grid;grid-template-columns:repeat(auto-fit,minmax(150px,1fr));gap:var(--gap-3);margin:12px 0 10px}
.idx-stat{background:var(--bg);border:1px solid var(--line);border-radius:var(--radius-sm);padding:10px 12px}
.idx-stat span{display:block;font-size:12px;color:var(--muted);margin-bottom:4px}
.idx-stat b{font-size:22px;font-weight:700;color:var(--text);font-variant-numeric:tabular-nums}
.idx-stat b.idx-time{font-size:13px;font-weight:600;color:var(--brand)}
.search-form{display:flex;gap:var(--gap-2);align-items:center;margin-bottom:12px}
.search-form input[type=text]{flex:1;min-width:0}
.terms{display:flex;flex-wrap:wrap;gap:var(--gap-2)}
.term{display:inline-flex;align-items:center;gap:6px;background:var(--brand-2-soft);
  border:1px solid var(--brand-2-line);color:var(--brand-2);border-radius:var(--radius-pill);
  padding:3px 12px;font-size:13px}
.term i{font-style:normal;font-size:11px;background:#fff;border-radius:var(--radius-pill);
  padding:0 6px;color:var(--muted)}
.hit-list{display:flex;flex-direction:column;gap:var(--gap-2)}
.hit{border:1px solid var(--line);border-left:3px solid var(--info);border-radius:var(--radius-sm);
  padding:10px 12px;background:var(--bg)}
.hit-head{display:flex;align-items:baseline;gap:var(--gap-2);flex-wrap:wrap;margin-bottom:6px}
.hit-head b{font-size:13.5px}
.hit-head .muted{font-size:12px}
.hit-snippet{font-size:13px;line-height:1.7;color:var(--text);word-break:break-word}

/* ---------- 角色权限矩阵（管理员逐项分配）---------- */
.perm-toolbar{display:flex;align-items:center;gap:var(--gap-3);flex-wrap:wrap;
  margin:12px 0;padding:10px 12px;background:var(--bg);border:1px solid var(--line);
  border-radius:var(--radius-sm)}
.perm-bulk-group{display:flex;align-items:center;gap:var(--gap-1)}
.perm-bulk-group b{font-size:13px;color:var(--brand);margin-right:2px}
.perm-table td,.perm-table th{vertical-align:middle}
.perm-group td{background:var(--brand-2);color:#fff;font-weight:600;font-size:13.5px;
  letter-spacing:.4px;padding:7px 12px;border-radius:var(--radius-xs)}
.perm-sub td{background:var(--brand-2-soft);color:var(--brand);font-weight:600;font-size:13px;
  padding:6px 12px}
.perm-item{padding:8px 12px}
.perm-name{display:block;font-size:13.5px;color:var(--text);line-height:1.5}
.perm-cell{white-space:nowrap;padding:8px 10px}
.perm-opt{display:inline-flex;align-items:center;gap:4px;margin-right:10px;font-size:12.5px;
  color:var(--text);cursor:pointer;user-select:none;-webkit-user-select:none}
.perm-opt:last-child{margin-right:0}
.perm-opt{padding:2px 6px;border-radius:var(--radius-pill)}
.perm-opt input[type=radio]{width:14px;height:14px;margin:0;accent-color:var(--brand-2);cursor:pointer}
/* 命中项加深加底色（:has 不被支持时优雅降级为普通样式） */
.perm-opt:has(input[type=radio]:checked){color:var(--brand);font-weight:600;
  background:var(--brand-2-soft);outline:1px solid var(--brand-2-line)}
.perm-locked{display:inline-block;font-size:12.5px;font-weight:600;color:var(--brand);
  background:var(--brand-2-soft);border:1px solid var(--brand-2-line);
  border-radius:var(--radius-pill);padding:2px 12px}

/* ---------- 长正文悬浮预览（邮件正文 / 跟进内容）---------- */
.body-cell{white-space:nowrap;padding:6px 10px}
.body-btn,.mail-body-btn{font-size:12.5px;line-height:1.5;padding:3px 12px;cursor:pointer;
  color:var(--brand-2);background:var(--brand-2-soft);border:1px solid var(--brand-2-line);
  border-radius:var(--radius-pill)}
.body-btn:hover,.body-btn:focus,.mail-body-btn:hover,.mail-body-btn:focus{
  background:var(--brand-2);border-color:var(--brand-2);color:#fff;outline:none}
.body-pop{position:fixed;z-index:2147482000;max-width:560px;min-width:260px;max-height:52vh;
  overflow:auto;padding:12px 14px;background:#fff;border:1px solid var(--brand-2-line);
  border-radius:var(--radius-sm);box-shadow:0 12px 32px rgba(16,60,96,.22);
  font-size:13px;line-height:1.75;color:var(--text);
  white-space:pre-wrap;word-break:break-word;user-select:text}
.body-pop[hidden]{display:none}

/* 时间列拆两行：日期一行、时间一行；.nowrap 防止「发出」被拆成两行 */
.nowrap{white-space:nowrap}
.d-line{display:block;line-height:1.45}
.muted-2{color:var(--muted);font-size:12.5px}
.body-btn.tiny{font-size:11.5px;padding:1px 8px;margin-left:6px;vertical-align:middle}

/* ---------- 报价单 / PI 合同：弹窗表单与单据预览 ---------- */
.q-modal{max-width:1060px;width:96vw}
.q-form{max-height:80vh;overflow:auto}
.q-hint{display:flex;justify-content:space-between;gap:var(--gap-3);flex-wrap:wrap;
  background:var(--brand-2-soft);border:1px solid var(--brand-2-line);border-radius:var(--radius-sm);
  padding:8px 12px;margin-bottom:12px;font-size:13px;color:var(--text)}
.q-seller{border:1px solid var(--line);border-radius:var(--radius-sm);padding:10px 12px;
  margin-bottom:12px;background:var(--bg)}
.q-seller summary{cursor:pointer;font-size:13.5px;font-weight:600;color:var(--brand)}
.q-seller .q-grid{margin-top:10px}
.q-grid{display:grid;grid-template-columns:repeat(auto-fit,minmax(230px,1fr));
  gap:var(--gap-2) var(--gap-3)}
.q-grid .field.wide{grid-column:1/-1}
.q-grid input,.q-grid select,.q-grid textarea{font-size:13px}
.q-table-head{display:flex;align-items:center;justify-content:space-between;margin:14px 0 8px}
.q-table-head h4{margin:0;font-size:13.5px;color:var(--brand)}
table.q-table{width:100%;border-collapse:collapse;font-size:13px}
table.q-table th{background:var(--brand-2-soft);border:1px solid var(--brand-2-line);
  padding:6px 6px;color:var(--brand);font-weight:600;text-align:center;white-space:nowrap}
table.q-table td{border:1px solid var(--line);padding:5px 6px;vertical-align:middle}
table.q-table td.c{text-align:center}
table.q-table td.r{text-align:right;white-space:nowrap}
table.q-table input[type=text]{width:100%;font-size:12.5px;padding:5px 7px;
  border:1px solid var(--line);border-radius:var(--radius-xs);height:auto}
table.q-table input.q-num{text-align:right;font-variant-numeric:tabular-nums}
.q-img{display:flex;flex-direction:column;align-items:center;gap:3px;cursor:pointer}
.q-thumb{width:64px;height:64px;object-fit:cover;border-radius:var(--radius-xs);
  border:1px solid var(--line);display:block}
.q-thumb[hidden]{display:none}
.q-choose{font-size:11.5px;color:var(--brand-2);text-decoration:underline}
.q-clear{display:inline-flex;align-items:center;gap:3px;font-size:11.5px;color:var(--muted);
  margin-top:3px;cursor:pointer}
.q-total{margin:10px 0 4px;text-align:right;font-size:14px;color:var(--text)}
.q-total b{font-size:18px;color:var(--brand);font-variant-numeric:tabular-nums}
/* 金额口径拆成「产品小计 / 费用合计 / 合计」三段（2026-10-10 起含运费·税费·其他费用） */
.q-sum-line{margin-right:16px;font-size:12.5px;color:var(--muted)}
.q-sum-line b{font-size:14px;color:var(--text)}
/* 订单编辑弹窗里锁定的商务条款：只读输入框要一眼看出「不可改」 */
.q-grid input[readonly]{background:#f4f7fb;color:#5b6b7d;cursor:not-allowed}
.q-foot{flex-wrap:wrap;justify-content:flex-end;gap:var(--gap-2)}
.q-tip{flex:1;min-width:200px;text-align:left;font-size:12px}
.mono-2{font-size:11.5px;margin-top:2px}
.op[data-quote-edit],.op[data-quote-view]{background:none;border:0;padding:0;cursor:pointer;
  color:var(--brand-2);font-size:13px;text-decoration:underline;margin-right:10px;
  white-space:nowrap;display:inline-block}
.op[data-quote-edit]:hover,.op[data-quote-view]:hover{color:var(--brand)}
table.data-table td:last-child,table.data-table th:last-child{white-space:nowrap}
.doc-preview{max-height:74vh;overflow:auto;border:1px solid var(--line);
  border-radius:var(--radius-sm);background:#fff}
.doc-preview .doc{transform-origin:top left}

/* ---------- 客户档案：报价单 / PI 合同 可点击单元格 ---------- */
.op.quote-cell{display:flex;flex-direction:column;align-items:flex-start;gap:1px;
  text-align:left;line-height:1.45;white-space:nowrap}
.op.quote-cell .mono-2{font-size:11.5px;color:var(--muted)}
.op.quote-cell .badge{transform:scale(.94);transform-origin:left center}
.op.quote-cell:hover .mono-2{color:var(--brand-2)}
.op.quote-cell:hover{background:transparent;text-decoration:none}

/* ---------- 编辑页：报价单 / PI 合同 可点击条目 ---------- */
.doc-entries{border:1px solid var(--line);border-radius:var(--radius-2);padding:12px 14px;
  background:var(--brand-2-soft);display:flex;flex-direction:column;gap:8px}
.doc-entries .de-title{font-size:13px;font-weight:600;color:var(--brand)}
.doc-entries .doc-entry{display:flex;align-items:center;gap:12px;flex-wrap:wrap;
  background:#fff;border:1px solid var(--line);border-radius:var(--radius-2);
  padding:8px 12px}
.doc-entries .de-label{flex:0 0 88px;font-size:13px;font-weight:600;color:var(--text)}
.doc-entries .de-body{display:flex;align-items:center;gap:10px;flex-wrap:wrap;font-size:12.5px}
.doc-entries .hint{margin:2px 0 0}

/* ---------- 列表列宽与单元格排版（公司名 / 邮箱 / 时间 / 备注） ---------- */
/* 公司名：列宽 +1/3，避免长公司名被折成多行 */
.data-table th.col-company,.data-table td.col-company{width:150px;min-width:150px}
/* 邮箱：列宽 -1/3，单元格内按 @ 拆两行 */
.data-table th.col-email,.data-table td.col-email{width:168px;min-width:168px}
.data-table td.col-email{white-space:nowrap}
.email-cell{display:inline-block;width:100%;line-height:1.45;
  word-break:break-all;overflow-wrap:anywhere}
/* 时间：第一行年月日、第二行时间 */
.data-table td .d-line{display:block;line-height:1.45}
/* 备注列：只放【查看】按钮，悬浮/点击弹小窗口看全文 */
.data-table td .body-btn.solo{margin-left:0}
/* ---------- 客户档案编辑页：开发信附件区块 ---------- */
.attach-block{margin-top:14px;padding:12px 14px;border:1px solid var(--line);
  border-radius:var(--radius);background:var(--brand-2-soft)}
.attach-block .de-title{font-weight:600;color:var(--brand);margin-bottom:4px}
.attach-meta{margin-bottom:var(--gap-2);font-size:12px}
.attach-row{display:flex;align-items:center;gap:var(--gap-3);padding:6px 0;
  border-bottom:1px dashed var(--line)}
.attach-row:last-of-type{border-bottom:0}
.attach-row .an{flex:1;min-width:0;overflow-wrap:anywhere}
.attach-row .as{white-space:nowrap}
.attach-form{display:flex;align-items:center;gap:var(--gap-3);margin-top:var(--gap-2)}
.attach-warn{margin:var(--gap-2) 0;padding:6px 10px;border-radius:var(--radius-sm);
  background:var(--danger-bg);color:var(--danger-ink);border:1px solid var(--danger-line);
  font-size:12px}
.attach-note{margin-top:var(--gap-2);font-size:12px}

/* ---------- 详情页「邮件往来记录」表格（10 列） ---------- */
/* 收发件邮箱：按 @ 拆两行 → 列宽可收窄，省出的宽度留给主题列 */
.data-table.mail-table th.mail-addr,.data-table.mail-table td.mail-addr{
  width:132px;min-width:132px}
.data-table.mail-table td.mail-addr{line-height:1.45}
/* 主题：列宽约为原来的两倍，避免一句话被折成八九行 */
.data-table.mail-table th.mail-subject,.data-table.mail-table td.mail-subject{
  width:180px;min-width:180px}
.data-table.mail-table td.mail-subject{line-height:1.5;overflow-wrap:anywhere}

/* ---------- 顶栏站内通知（下拉） ---------- */
.notify{position:relative;display:inline-block;margin-left:14px}
/* 顶栏「站内通知」：文字按钮（原来是个 🔔 图标，2026-09-30 按用户要求换成文字） */
.notify-btn{position:relative;background:none;border:0;font-family:inherit;font-size:13px;
  line-height:1;color:inherit;cursor:pointer;padding:5px 8px;border-radius:6px}
.notify-btn:hover{background:rgba(40,134,212,.10)}
.notify-dot{position:absolute;top:-2px;right:-4px;background:#e2574c;color:#fff;font-size:11px;
  line-height:16px;min-width:16px;height:16px;border-radius:9px;padding:0 4px;text-align:center}
.notify-panel{position:absolute;right:0;top:34px;width:380px;max-height:420px;overflow:auto;z-index:60;
  background:#fff;border:1px solid var(--line,#e5e8ee);border-radius:10px;
  box-shadow:0 12px 30px rgba(20,30,50,.16);padding:10px 12px;text-align:left}
.notify-head{display:flex;align-items:center;justify-content:space-between;
  border-bottom:1px solid var(--line,#eef1f5);padding-bottom:6px;margin-bottom:6px}
.notify-list{list-style:none;margin:0;padding:0}
.notify-list li{border-bottom:1px dashed var(--line,#eef1f5);padding:8px 0}
.notify-list li.unread{background:rgba(40,134,212,.05);border-left:2px solid #2886D4;padding-left:8px}
.notify-list li b{display:block;font-size:13px}
.notify-list li span{font-size:12px}
.notify-list li p{margin:4px 0 2px;font-size:12.5px;color:#4a5568;white-space:pre-wrap;word-break:break-word}
.notify-empty{padding:14px 4px;text-align:center}

/* ---------- 列表页顶部「待转人工指派」卡片 ---------- */
.handoff-card{border:1px solid #f0d9a8;background:#fffaf0;border-radius:10px;padding:10px 14px;margin:0 0 14px}
.handoff-card .card-head{border:0;padding:0 0 6px}
.handoff-card .card-head h3{margin:0;font-size:14px}
.handoff-card table.kv th{color:#8a6d3b}
.mini-select{max-width:96px;font-size:12px;padding:2px 4px;margin-right:6px}

/* ---------- 设置页「API 令牌」卡片：一次性明文展示区 ---------- */
.token-once{border:1px solid #b7dcc0;background:#f2fbf4;border-radius:10px;
  padding:10px 14px;margin:0 0 14px}
.token-once b{display:block;font-size:13px;color:#1f6d3a;margin-bottom:6px}
.token-plain{display:block;font-size:13px;line-height:1.6;word-break:break-all;
  background:#fff;border:1px dashed #8cc79e;border-radius:6px;padding:8px 10px;
  margin-bottom:6px;color:#14532d;user-select:all}
