/* ===== 业腾SCRM · 探马风格浅色后台 ===== */
:root{
  --brand:#2563EB;        /* 主色蓝 */
  --brand-dark:#1D4ED8;   /* hover */
  --brand-light:#EFF6FF;  /* 选中浅蓝底 */
  --text:#1F2937;         /* 文字主色 */
  --text-2:#6B7280;       /* 次色 */
  --text-3:#9CA3AF;       /* 占位/辅助 */
  --border:#E5E7EB;       /* 描边灰 */
  --border-2:#F3F4F6;     /* 分割线 */
  --bg:#F9FAFB;           /* 背景灰 */
  --white:#fff;
  --green:#10B981;        /* 开关绿 */
  --danger:#EF4444;       /* 必填红星/错误 */
  --warn:#FF7D00;
  --shadow:0 2px 8px rgba(0,0,0,.06);
}
*{box-sizing:border-box;margin:0;padding:0}
html,body{height:100%}
body{
  font-family:-apple-system,BlinkMacSystemFont,"Segoe UI","PingFang SC","Microsoft YaHei",sans-serif;
  background:#F5F7FA;color:#1F2937;font-size:14px;line-height:1.5;
  -webkit-font-smoothing:antialiased;
}
a{color:inherit;text-decoration:none}
button{font-family:inherit;cursor:pointer}
input,select,textarea{font-family:inherit;font-size:14px;color:var(--text)}

/* 顶栏：纯白 + 微底边阴影（与主内容分层） */
.topbar{
  height:56px;background:#fff;border-bottom:1px solid #E5E7EB;
  display:flex;align-items:center;padding:0 16px;position:sticky;top:0;z-index:50;
  box-shadow:0 1px 0 rgba(15,23,42,.04);
}
.topbar-left{display:flex;align-items:center;gap:12px}
.topbar-toggle{
  width:32px;height:32px;border:1px solid var(--border);border-radius:6px;background:var(--white);
  color:var(--text-2);font-size:14px;display:flex;align-items:center;justify-content:center;
  transition:.15s;
}
.topbar-toggle:hover{color:var(--brand);border-color:var(--brand)}
.logo{font-size:18px;font-weight:700;color:var(--brand);white-space:nowrap}
.logo span{color:var(--text)}
.topbar-title{flex:1;text-align:center;font-size:15px;font-weight:600;color:var(--text);white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.topbar-right{display:flex;align-items:center;gap:10px}
.topbar-icon{
  width:32px;height:32px;border-radius:50%;border:1px solid var(--border);background:var(--white);
  display:flex;align-items:center;justify-content:center;font-size:14px;cursor:pointer;transition:.15s;
}
.topbar-icon:hover{border-color:var(--brand)}
.topbar-search input{
  width:200px;height:32px;border:1px solid var(--border);border-radius:16px;padding:0 14px;background:var(--white);outline:none;font-size:13px;
}
.topbar-search input:focus{border-color:var(--brand);box-shadow:0 0 0 2px var(--brand-light)}
/* 侧栏收起态：隐藏二级菜单列 */
body.side-collapsed .sidebar-list{display:none}
body.side-collapsed .layout{height:calc(100vh - 56px)}
.avatar{
  width:34px;height:34px;border-radius:50%;background:var(--brand);color:#fff;
  display:flex;align-items:center;justify-content:center;font-size:13px;font-weight:600;
}

/* 布局（按探马后台：左侧大分类图标 + 二级菜单 + 内容，侧栏固定、内容独立滚动）*/
html,body{height:100%;overflow:hidden}
.layout{display:flex;height:calc(100vh - 56px);align-items:stretch;overflow:hidden}
.left-icons{
  width:60px;background:#1f2329;color:#c9d1d9;
  display:flex;flex-direction:column;align-items:stretch;padding:8px 0;
  flex-shrink:0;height:100%;overflow-y:auto;
}
.left-icons::-webkit-scrollbar{width:4px}
.left-icons::-webkit-scrollbar-thumb{background:#3a3f47;border-radius:2px}
.topicon{
  display:flex;flex-direction:column;align-items:center;gap:2px;
  padding:10px 4px;color:#9aa1ad;font-size:12px;cursor:pointer;
  border-left:3px solid transparent;transition:.15s;
}
.topicon:hover{color:#fff;background:rgba(255,255,255,.04)}
.topicon.active{color:var(--brand);background:rgba(0,194,179,.08);border-left-color:var(--brand)}
.topicon-glyph{
  width:36px;height:36px;border-radius:8px;background:#2a2f37;color:#c9d1d9;
  display:flex;align-items:center;justify-content:center;
  font-size:16px;font-weight:600;
}
.topicon.active .topicon-glyph{background:var(--brand);color:#fff}
.topicon-label{font-size:11px;white-space:nowrap}

.sidebar-list{
  width:220px;background:var(--white);border-right:1px solid var(--border);
  padding:12px 0;flex-shrink:0;height:100%;overflow:auto;
}
.sideitem{
  display:flex;align-items:center;gap:10px;padding:10px 18px;color:var(--text-2);
  font-size:14px;border-left:3px solid transparent;transition:.15s;cursor:pointer;
}
.sideitem:hover{background:var(--bg);color:var(--text)}
.sideitem.active{background:var(--brand-light);color:var(--brand);border-left-color:var(--brand);font-weight:600}
.sidegroup-title{padding:8px 18px 4px;font-size:12px;color:var(--text-3);font-weight:500}
.sideicon{width:18px;text-align:center;font-size:14px;flex-shrink:0}
.sidegroup-title{padding:16px 18px 6px;font-size:12px;font-weight:600;color:var(--text-3);letter-spacing:.5px}

.content{flex:1;min-width:0;padding:20px;overflow-x:hidden}
}
.sidebar a:hover{background:var(--bg);color:var(--text)}
.sidebar a.active{color:var(--brand);background:var(--brand-light);border-left-color:var(--brand);font-weight:600}
.content{flex:1;min-width:0;padding:20px;height:100%;overflow:auto}

/* 页面头 */
.page-head{display:flex;align-items:center;justify-content:space-between;margin-bottom:16px}
.page-title{font-size:18px;font-weight:600}
.page-head .actions{display:flex;gap:10px}

/* 筛选栏 */
.filter-bar{
  background:var(--white);border:1px solid var(--border);border-radius:8px;padding:14px 16px;
  display:flex;flex-wrap:wrap;gap:12px;align-items:center;margin-bottom:14px;
}
.filter-bar .field{display:flex;align-items:center;gap:6px}
.filter-bar label{color:var(--text-3);font-size:13px;white-space:nowrap}
.filter-bar input,.filter-bar select{
  height:34px;border:1px solid var(--border);border-radius:6px;padding:0 10px;background:#fff;outline:none;min-width:140px;
}
.filter-bar input:focus,.filter-bar select:focus{border-color:var(--brand)}

/* 按钮 */
.btn{
  height:34px;padding:0 16px;border-radius:6px;border:1px solid var(--border);background:#fff;color:var(--text);
  font-size:14px;display:inline-flex;align-items:center;gap:6px;transition:.15s;
}
.btn:hover{border-color:var(--brand);color:var(--brand)}
.btn.primary{background:var(--brand);border-color:var(--brand);color:#fff}
.btn.primary:hover{background:var(--brand-dark);border-color:var(--brand-dark);color:#fff}
.btn.danger{color:var(--danger);border-color:#ffd6d6}
.btn.danger:hover{background:#fff1f0}
.btn.sm{height:28px;padding:0 10px;font-size:13px}
.btn.ghost{background:transparent;border-color:transparent;color:var(--brand)}
.btn:disabled{opacity:.5;cursor:not-allowed}

/* 表格 */
.card{background:var(--white);border:1px solid var(--border);border-radius:8px;overflow:hidden}
table{width:100%;border-collapse:collapse;font-size:14px}
thead th{
  background:#fafbfc;text-align:left;font-weight:600;color:var(--text-2);font-size:13px;
  padding:12px 14px;border-bottom:1px solid var(--border);white-space:nowrap;
}
tbody td{padding:12px 14px;border-bottom:1px solid var(--border-2);color:var(--text);vertical-align:middle}
tbody tr:hover{background:#fafbfc}
tbody tr:last-child td{border-bottom:none}
.check{width:34px;text-align:center}
.empty{padding:48px;text-align:center;color:var(--text-3)}

/* 标签 */
.tag{display:inline-block;padding:2px 8px;border-radius:4px;font-size:12px;margin:2px 4px 2px 0;background:var(--brand-light);color:var(--brand-dark)}
.tag.gray{background:var(--bg);color:var(--text-2)}
.pill{display:inline-block;padding:2px 10px;border-radius:12px;font-size:12px}
.pill.on{background:#e8ffea;color:#00a854}
.pill.off{background:#fff1f0;color:var(--danger)}

/* 分页 */
.pager{display:flex;align-items:center;justify-content:flex-end;gap:10px;padding:14px 16px;color:var(--text-2);font-size:13px}
.pager button{height:30px;min-width:30px;padding:0 8px;border:1px solid var(--border);background:#fff;border-radius:6px}
.pager button:hover:not(:disabled){border-color:var(--brand);color:var(--brand)}
.pager button:disabled{opacity:.4;cursor:not-allowed}

/* 抽屉 */
.drawer-mask{position:fixed;inset:0;background:rgba(0,0,0,.35);z-index:100;display:flex;justify-content:flex-end;animation:fade .2s}
.drawer{width:520px;max-width:92vw;background:#fff;height:100%;overflow:auto;animation:slide .25s;box-shadow:-4px 0 16px rgba(0,0,0,.1)}
@keyframes fade{from{opacity:0}to{opacity:1}}
@keyframes slide{from{transform:translateX(40px)}to{transform:translateX(0)}}
.drawer-head{display:flex;align-items:center;justify-content:space-between;padding:18px 22px;border-bottom:1px solid var(--border);position:sticky;top:0;background:#fff;z-index:2}
.drawer-head h3{font-size:17px}
.drawer-body{padding:22px}
.close-x{cursor:pointer;color:var(--text-3);font-size:22px;line-height:1}
.close-x:hover{color:var(--text)}

/* 弹窗 */
.modal-mask{position:fixed;inset:0;background:rgba(0,0,0,.4);z-index:120;display:flex;align-items:center;justify-content:center;animation:fade .2s}
.modal{background:#fff;border-radius:10px;width:480px;max-width:94vw;max-height:90vh;overflow:auto;box-shadow:0 8px 32px rgba(0,0,0,.2)}
.modal-head{display:flex;align-items:center;justify-content:space-between;padding:18px 22px;border-bottom:1px solid var(--border)}
.modal-head h3{font-size:17px}
.modal-body{padding:22px}
.modal-foot{padding:14px 22px;border-top:1px solid var(--border);display:flex;justify-content:flex-end;gap:10px}

/* 表单 */
.form-row{margin-bottom:16px}
.form-row label{display:block;margin-bottom:6px;color:var(--text-2);font-size:13px}
.form-row label .req{color:var(--danger);margin-left:2px}
.form-row input,.form-row select,.form-row textarea{
  width:100%;border:1px solid var(--border);border-radius:6px;padding:9px 11px;outline:none;background:#fff;
}
.form-row input:focus,.form-row select:focus,.form-row textarea:focus{border-color:var(--brand)}
.form-row textarea{resize:vertical;min-height:80px}
.form-tip{font-size:12px;color:var(--text-3);margin-top:4px}
.perm-grid{display:grid;grid-template-columns:1fr 1fr;gap:8px;margin-top:6px}
.perm-item{display:flex;align-items:center;gap:8px;padding:8px 10px;border:1px solid var(--border);border-radius:6px;font-size:13px}
.perm-item input{width:auto}

/* 区块 */
.section{margin-bottom:22px}
.section-title{font-size:14px;font-weight:600;color:var(--text-2);margin-bottom:10px;padding-left:10px;border-left:3px solid var(--brand)}
.kv{display:grid;grid-template-columns:90px 1fr;gap:10px 14px;font-size:14px}
.kv dt{color:var(--text-3)}
.kv dd{color:var(--text)}

/* toast */
#toastRoot{position:fixed;top:70px;left:50%;transform:translateX(-50%);z-index:200;display:flex;flex-direction:column;gap:8px;align-items:center}
.toast{background:rgba(0,0,0,.8);color:#fff;padding:9px 18px;border-radius:6px;font-size:14px;animation:fade .2s}
.toast.ok{background:rgba(0,168,84,.92)}
.toast.err{background:rgba(245,63,63,.92)}

/* 重复客户 */
.dup-cluster{border:1px solid var(--border);border-radius:8px;margin-bottom:14px;overflow:hidden}
.dup-cluster .dc-head{background:var(--brand-light);padding:10px 16px;font-size:13px;color:var(--brand-dark);display:flex;justify-content:space-between;align-items:center}
.dc-merge{display:flex;gap:8px;align-items:center;padding:10px 16px;background:#fffdf6;border-top:1px dashed var(--border)}
.mono{font-family:ui-monospace,SFMono-Regular,Menlo,Consolas,monospace;font-size:13px}

/* 统计小卡 */
.stat-row{display:flex;gap:14px;margin-bottom:16px;flex-wrap:wrap}
.stat-card{flex:1;min-width:160px;background:#fff;border:1px solid var(--border);border-radius:8px;padding:16px 18px}
.stat-card .n{font-size:26px;font-weight:700;color:var(--brand)}
.stat-card .l{color:var(--text-3);font-size:13px;margin-top:4px}

/* 客户单元格 */
.cust-cell{display:flex;align-items:center;gap:10px}
.avatar-sm{width:34px;height:34px;border-radius:50%;background:var(--brand);color:#fff;display:flex;align-items:center;justify-content:center;font-size:14px;font-weight:600;flex-shrink:0}
.muted{color:var(--text-3);font-size:12px}

/* 顶部筛选 tabs */
.tabbar{display:flex;gap:4px;margin-bottom:14px;border-bottom:1px solid var(--border);padding-bottom:0}
.tabbar a{padding:8px 14px;color:var(--text-2);font-size:14px;border-bottom:2px solid transparent;cursor:pointer}
.tabbar a:hover{color:var(--text)}
.tabbar a.active{color:var(--brand);border-bottom-color:var(--brand);font-weight:600}

/* 标签类型 */
.tag.alt{background:#fff3e8;color:#d4690a}

/* 数据看板 */
.dash-grid{display:grid;grid-template-columns:repeat(auto-fit,minmax(300px,1fr));gap:14px}
.dash-block{padding:18px}
.block-title{font-size:15px;font-weight:600;margin-bottom:14px}
.bars{display:flex;flex-direction:column;gap:10px}
.bar-row{display:flex;align-items:center;gap:10px;font-size:13px}
.bar-label{width:90px;flex-shrink:0;color:var(--text-2);text-align:right;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.bar-track{flex:1;background:var(--border-2);border-radius:6px;height:18px;overflow:hidden}
.bar-fill{height:100%;background:var(--brand);border-radius:6px;min-width:4px;transition:width .3s}
.bar-fill.alt{background:#ff9a3d}
.bar-num{width:40px;text-align:right;color:var(--text-2)}
.rfm-row{display:flex;align-items:center;gap:10px;font-size:13px}
.rfm-name{width:64px;flex-shrink:0;font-weight:600}
.trend{display:flex;align-items:flex-end;gap:10px;height:130px;padding-top:10px}
.trend-col{flex:1;display:flex;flex-direction:column;align-items:center;justify-content:flex-end;height:100%}
.trend-bar{width:24px;background:linear-gradient(180deg,var(--brand),var(--brand-dark));border-radius:4px 4px 0 0;position:relative;display:flex;justify-content:center;align-items:flex-start;color:#fff;font-size:11px;min-height:18px}
.trend-bar span{padding-top:2px}
.trend-day{font-size:11px;color:var(--text-3);margin-top:6px}

/* 员工布局 + 部门树 */
.emp-layout{display:flex;gap:14px;align-items:flex-start}
.dept-tree{width:200px;flex-shrink:0;background:#fff;border:1px solid var(--border);border-radius:8px;padding:10px 0;max-height:calc(100vh - 200px);overflow:auto}
.dept-node{font-size:14px}
.dept-link{display:block;padding:7px 10px;color:var(--text-2);cursor:pointer;border-left:3px solid transparent}
.dept-link:hover{background:var(--bg);color:var(--text)}
.dept-link.active{color:var(--brand);background:var(--brand-light);border-left-color:var(--brand);font-weight:600}
.emp-main{flex:1;min-width:0}

/* 跟进时间线 */
.timeline{list-style:none;padding:0;margin:0}
.timeline li{border-left:2px solid var(--border);padding:0 0 16px 16px;position:relative}
.timeline li::before{content:"";position:absolute;left:-5px;top:4px;width:8px;height:8px;border-radius:50%;background:var(--brand)}
.tl-head{font-size:13px;margin-bottom:4px}
.tl-body{font-size:14px;color:var(--text-2);background:var(--bg);padding:8px 10px;border-radius:6px}

/* ===== CRM 三栏布局（成员架构 + 客户表格） ===== */
.cust-layout{display:flex;gap:14px;align-items:stretch;height:calc(100vh - 56px - 40px)}
.members-col{
  width:260px;flex-shrink:0;background:var(--white);border:1px solid var(--border);
  border-radius:8px;padding:14px;overflow:auto;
}
.members-tree{font-size:13px}
.members-tree .tree-row{
  display:flex;align-items:center;gap:5px;padding:4px 6px;border-radius:4px;cursor:pointer;
  font-size:13px;color:var(--text-2);line-height:1.4;
}
.members-tree .tree-row:hover{background:var(--bg);color:var(--text)}
.members-tree .dept-row{font-weight:600;color:var(--text)}
.members-tree .dept-num{margin-left:auto;color:var(--text-3);font-size:12px}
.members-tree .caret{width:14px;color:var(--text-3);font-size:11px}
.members-tree .tree-body{padding-left:12px;border-left:1px dashed var(--border);margin:1px 0 1px 8px}
.members-tree .emp-row{cursor:pointer}
.members-tree .emp-row.active{background:var(--brand-light);color:var(--brand)}
.members-tree .emp-avatar{
  width:20px;height:20px;border-radius:50%;background:#e6faf8;color:var(--brand);
  display:flex;align-items:center;justify-content:center;font-size:11px;font-weight:600;
  flex-shrink:0;
}
.members-tree .emp-name{flex:1;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.members-tree .emp-alias{font-size:11px;color:var(--text-3)}
.cust-col{flex:1;min-width:0;overflow:auto}

/* ===== 客户详情 11 字段 + 头像大图 ===== */
.cust-head{display:flex;align-items:center;gap:14px;padding:4px 0 14px;border-bottom:1px solid var(--border);margin-bottom:14px}
.cust-avatar-lg{
  width:64px;height:64px;border-radius:50%;background:var(--brand-light);color:var(--brand);
  display:flex;align-items:center;justify-content:center;font-size:24px;font-weight:700;
  flex-shrink:0;overflow:hidden;
}
.cust-avatar-lg img{width:100%;height:100%;object-fit:cover}
.cust-name{font-size:18px;font-weight:700}
.cust-sub{font-size:12px;color:var(--text-3);margin-top:2px}
.kv-2col{display:grid;grid-template-columns:repeat(2,1fr);gap:6px 18px}
.kv-2col dt{color:var(--text-3);font-weight:500;font-size:12px}
.kv-2col dd{color:var(--text);font-size:13px;padding-bottom:6px;border-bottom:1px dashed var(--border-2)}

/* ===== 登录页 ===== */
.login-mask{
  position:fixed;inset:0;z-index:999;background:linear-gradient(135deg,#0f172a,#1e293b);
  display:flex;align-items:center;justify-content:center;
}
.login-card{
  width:360px;background:#fff;border-radius:12px;padding:36px 32px;box-shadow:0 20px 60px rgba(0,0,0,.35);
}
.login-logo{font-size:26px;font-weight:800;color:var(--brand);text-align:center}
.login-logo span{color:var(--text)}
.login-sub{text-align:center;color:var(--text-3);font-size:13px;margin:6px 0 24px}
.login-err{color:var(--danger);font-size:13px;min-height:20px;margin-bottom:6px;text-align:center}
.login-btn{width:100%;height:40px;font-size:15px;margin-top:8px}
.login-tip{text-align:center;color:var(--text-3);font-size:12px;margin-top:18px;line-height:1.6}

/* ===== CRM 客户页（探马风格细节）===== */
.cust-table{font-size:13px;table-layout:fixed}
.cust-table th{background:#f0f4f7;color:var(--text-2);font-weight:600;padding:8px 6px;white-space:nowrap}
.cust-table td{padding:8px 6px;vertical-align:middle}
.cust-table .check{width:28px;text-align:center}
.cust-table .cust-cell{display:flex;align-items:center;gap:8px}
.cust-cell-main{line-height:1.4}
.cust-cell .avatar-sm{
  width:32px;height:32px;border-radius:50%;background:#e6faf8;color:var(--brand);
  display:flex;align-items:center;justify-content:center;font-size:13px;font-weight:600;
  flex-shrink:0;overflow:hidden;
}
.cust-cell .avatar-sm img{width:100%;height:100%;object-fit:cover;border-radius:50%}
.avatar-xs{
  display:inline-flex;width:20px;height:20px;border-radius:50%;background:#e6faf8;color:var(--brand);
  align-items:center;justify-content:center;font-size:11px;font-weight:600;
  margin-right:4px;
}
.tabbar{display:flex;align-items:center;gap:4px;border-bottom:1px solid var(--border);padding-bottom:8px;margin-bottom:14px;flex-wrap:wrap}
.tabbar a{padding:8px 14px;border-radius:6px;font-size:14px;color:var(--text-2);cursor:pointer}
.tabbar a.active{color:var(--brand);background:var(--brand-light);font-weight:600}
.tabbar .tab-spacer{flex:1}
.tabbar .stage-tab-sel{padding:6px 10px;border:1px solid var(--border);border-radius:6px;background:#fff;font-size:13px}
.tabbar .btn.icon{padding:6px 10px}
.filter-bar .field.grow{flex:1;min-width:200px}

/* ===== CRM 客户行紧凑布局 ===== */
.cust-cell-main{line-height:1.35;font-size:13px}
.cust-cell-main .line-1{display:flex;align-items:center;gap:8px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.cust-cell-main .line-1 b{font-weight:600;color:var(--text);max-width:120px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.cust-cell-main .wxid{color:var(--text-3);font-size:12px}
.cust-cell-main .line-2{display:flex;align-items:center;gap:4px;color:var(--text-3);font-size:12px;margin-top:2px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.cust-cell-main .wx-icon{display:inline-flex;width:14px;height:14px;background:#07c160;color:#fff;border-radius:3px;align-items:center;justify-content:center;font-size:10px;flex-shrink:0}
.cust-cell-main .wx-icon::before{content:"\1F4AC"}  /* 💬 兼容 */
.cust-cell-main .wx-name{overflow:hidden;text-overflow:ellipsis;white-space:nowrap;max-width:140px}

/* 标签 +N 多余提示 */
.tag.more{background:#f0f0f0;color:var(--text-3);cursor:pointer;font-size:11px}
.tag.more:hover{background:#e0e0e0}

/* 标签 popover */
.tag-popover{
  display:flex;flex-wrap:wrap;gap:4px;max-width:280px;padding:8px 10px;
  background:#fff;border:1px solid var(--border);border-radius:6px;box-shadow:0 6px 18px rgba(0,0,0,.15);z-index:1000;
}
.tag-popover .tag{font-size:12px}

/* ===== 宽表横向滚动 + 冻结首列 ===== */
.table-scroll-wrap{overflow-x:hidden;overflow-y:auto;position:relative}
.card>.table-scroll-wrap{border-bottom:1px solid var(--border-2)}
.cust-table.wide{min-width:1800px;table-layout:auto;border-collapse:separate;border-spacing:0}
.cust-table.wide th,.cust-table.wide td{border-bottom:1px solid var(--border-2);white-space:nowrap;min-width:90px}
.cust-table.wide td{max-width:220px;overflow:hidden;text-overflow:ellipsis}
.cust-table.wide th.sticky-col,.cust-table.wide td.sticky-col{
  position:sticky;left:28px;z-index:2;background:#fff;
}
.cust-table.wide thead th.sticky-col{z-index:3;background:#f0f4f7}
.cust-table.wide td.check{position:sticky;left:0;z-index:2;background:#fff}
.cust-table.wide thead th.check{position:sticky;left:0;z-index:3;background:#f0f4f7}
/* 横向滚动出现后（JS 加 scrolled class），冻结列右侧竖线才显示 */
.table-scroll-wrap.scrolled .cust-table.wide th.sticky-col,
.table-scroll-wrap.scrolled .cust-table.wide td.sticky-col{box-shadow:1px 0 0 var(--border)}
.table-scroll-wrap.scrolled .cust-table.wide td.check{box-shadow:1px 0 0 var(--border)}
.cust-table.wide tr:hover td{background:#fafbfc}
.cust-table.wide tr:hover td.sticky-col,.cust-table.wide tr:hover td.check{background:#fafbfc}
.warn-text{color:var(--warn);font-weight:600}
.pill.warn{background:#fff3e6;color:var(--warn);font-weight:600;padding:2px 8px;border-radius:10px;font-size:12px}

/* ===== 客户详情 ID 信息 ===== */
.id-info{background:#f7f8fa;border-radius:6px;padding:12px 14px;font-size:13px}
.id-row{display:flex;align-items:center;gap:6px;padding:3px 0}
.id-label{color:var(--text-3);width:130px;flex-shrink:0}
.id-val{flex:1;min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.id-val.mono{font-family:Consolas,Menlo,monospace;font-size:12px;color:var(--text-2)}
.id-copy{color:var(--brand);font-size:12px;padding:0 6px;flex-shrink:0}

/* ===== 视口底部 fixed 横向滚动条（仅 CRM 客户页显示） ===== */
.hscroll-bottom{
  position:fixed;left:0;right:0;bottom:0;z-index:50;
  height:14px;overflow-x:auto;overflow-y:hidden;
  background:#f7f8fa;border-top:1px solid var(--border-2);cursor:pointer;
}
.hscroll-bottom::-webkit-scrollbar{height:8px}
.hscroll-bottom::-webkit-scrollbar-thumb{background:#c3ccd4;border-radius:4px}
.hscroll-bottom::-webkit-scrollbar-track{background:transparent}
.hscroll-bottom.hidden{display:none}
.hscroll-inner{height:1px;min-width:100%}

/* ===== 右上角全局同步进度 ===== */
.sync-progress{display:flex;align-items:center;gap:8px;margin-right:14px;min-width:200px}
.sp-label{font-size:12px;color:var(--text-2);white-space:nowrap}
.sp-track{flex:1;height:6px;background:rgba(255,255,255,.25);border-radius:3px;overflow:hidden}
.sp-bar{height:100%;background:#07c160;border-radius:3px;transition:width .4s}
.sp-pct{font-size:12px;color:#fff;min-width:34px;text-align:right}

/* ===== 渠道活码 ===== */
.modal.wide{width:680px}
.ch-tabs{display:flex;gap:6px;margin:6px 0 14px;flex-wrap:wrap}
.ch-tabs a{padding:5px 14px;border-radius:16px;background:var(--bg);color:var(--text-2);font-size:13px;cursor:pointer;border:1px solid transparent}
.ch-tabs a:hover{color:var(--text-1)}
.ch-tabs a.active{background:var(--brand);color:#fff;border-color:var(--brand)}
.badge{display:inline-block;padding:2px 9px;border-radius:10px;font-size:12px;background:var(--bg);color:var(--text)}
.badge.random{background:#e8f3ff;color:#1677ff}
.badge.normal{background:#f0f0f0;color:#666}
.badge.sequential{background:#fff3e0;color:#d46b08}
.badge.quantitative{background:#e8f9ee;color:#07a050}
.row-acts{display:flex;gap:4px;flex-wrap:wrap}
.emp-list{display:flex;flex-wrap:wrap;gap:8px 16px;max-height:180px;overflow:auto;padding:8px 0}
.chk{display:flex;align-items:center;gap:6px;font-size:13px;cursor:pointer;color:var(--text)}
.chk.sm{padding:2px 0}
.chk input{accent-color:var(--brand);width:14px;height:14px;cursor:pointer;flex-shrink:0;margin:0}
.chk.inline-hint{display:block;margin-top:8px;font-size:13px;color:var(--text-2);font-weight:400}
.chk.inline-hint input{width:auto;height:auto;margin-right:5px;vertical-align:middle}
.form-grid{display:grid;grid-template-columns:1fr 1fr;gap:0 20px}
.form-block{margin-top:18px;border-top:1px dashed var(--border);padding-top:14px}
.block-title{font-size:13px;color:var(--text-2);margin-bottom:10px;font-weight:600}
.wrows{display:flex;flex-wrap:wrap;gap:10px}
.wrow{display:flex;align-items:center;gap:6px;font-size:13px;color:var(--text)}
.wrow input{width:64px}
.qr-wrap{display:flex;flex-direction:column;align-items:center;padding:10px}
@media(max-width:560px){.form-grid{grid-template-columns:1fr}}

/* ============ 渠道活码子页面（探马式） ============ */
.sub{color:var(--text-2);font-size:12px}
.ch-subpage{margin:0}
.ch-head{display:flex;align-items:center;gap:14px;padding:10px 0 14px;border-bottom:1px solid var(--border);margin-bottom:18px}
.ch-head .actions{margin-left:auto}
.ch-crumb{font-size:14px;color:var(--text-2)}
.ch-crumb b{color:var(--text);font-weight:600}
.ch-form{display:flex;flex-direction:column;gap:16px;padding-bottom:60px}
.field-block{background:var(--bg);border:1px solid var(--border);border-radius:10px;padding:16px 18px}
.field-block .block-title{font-size:15px;font-weight:600;color:var(--text);margin-bottom:14px;padding-bottom:8px;border-bottom:1px solid var(--border)}
.field-block .form-row{margin-bottom:14px}
.field-block .form-row:last-child{margin-bottom:0}
.block-sub{display:block;margin:6px 0 10px;color:var(--text-2);font-size:12px}
.cnt{color:var(--text-2);font-size:12px;margin-left:8px}
/* 规则卡片 */
.rule-cards{display:grid;grid-template-columns:1fr 1fr;gap:10px;width:100%}
.rule-card{border:1px solid var(--border);border-radius:8px;padding:10px 12px;cursor:pointer;background:var(--bg);transition:all .15s}
.rule-card:hover{border-color:var(--brand)}
.rule-card.active{border-color:var(--brand);background:rgba(22,119,255,.06);box-shadow:0 0 0 1px var(--brand)}
.rule-card .rc-head{display:flex;align-items:center;justify-content:space-between;margin-bottom:4px}
.rule-card .rc-head b{font-size:14px;color:var(--text)}
.rc-dot{width:14px;height:14px;border-radius:50%;border:1px solid var(--border);position:relative;flex-shrink:0}
.rule-card.active .rc-dot{border-color:var(--brand)}
.rule-card.active .rc-dot::after{content:"";position:absolute;inset:3px;border-radius:50%;background:var(--brand)}
.rule-card p{font-size:12px;color:var(--text-2);margin:0;line-height:1.5}
/* 分段单选 */
.seg{display:inline-flex;background:var(--bg);border:1px solid var(--border);border-radius:6px;overflow:hidden}
.seg-item{padding:5px 14px;font-size:13px;color:var(--text-2);cursor:pointer;display:flex;align-items:center;gap:5px}
.seg-item input{margin:0}
.seg-item:has(input:checked){background:var(--brand);color:#fff}
.seg-item:has(input:checked){color:#fff}
/* 开关 */
.switch{position:relative;display:inline-block;width:36px;height:20px;flex-shrink:0}
.switch input{opacity:0;width:0;height:0}
.switch span{position:absolute;inset:0;background:var(--border);border-radius:10px;transition:.2s;cursor:pointer}
.switch span::after{content:"";position:absolute;width:16px;height:16px;border-radius:50%;background:#fff;top:2px;left:2px;transition:.2s}
.switch input:checked+span{background:var(--brand)}
.switch input:checked+span::after{transform:translateX(16px)}
/* 行内小控件 */
.trig-days{display:inline-flex;align-items:center;gap:6px;margin-left:12px}
.trig-days input{width:90px}
.work-days{margin-top:8px}
.form-row input[type=number]{width:110px}
@media(max-width:560px){.rule-cards{grid-template-columns:1fr}.ch-head{flex-wrap:wrap}}
/* 已选员工 chip（子页内） */
.emp-picked{display:flex;align-items:center;gap:10px;flex-wrap:wrap}
.emp-picked-tags{display:flex;flex-wrap:wrap;gap:6px}
.emp-tag{display:inline-flex;align-items:center;gap:4px;padding:3px 10px;background:var(--bg);border:1px solid var(--border);border-radius:14px;font-size:13px;color:var(--text)}
.emp-tag a{cursor:pointer;color:var(--text-2);font-size:14px;padding:0 2px}
.emp-tag a:hover{color:var(--danger)}
/* 员工选择弹窗 */
.select-emps{display:flex;flex-direction:column;gap:10px;min-height:420px}
.sel-search input{flex:1}
.sel-body{display:flex;gap:14px;min-height:0;flex:1}
.sel-tree{flex:1;border:1px solid var(--border);border-radius:6px;padding:8px;overflow:auto;max-height:440px;min-width:0}
.sel-dept{margin-bottom:2px}
.sel-dept-head{display:flex;align-items:center;gap:6px;padding:4px 8px;border-radius:4px;cursor:pointer;user-select:none;font-size:13px}
.sel-dept-head:hover{background:var(--bg)}
.sel-dept-head input{margin:0}
.sel-dept-head .caret{font-size:10px;color:var(--text-2);width:10px;display:inline-block}
.sel-dept-head b{font-weight:600}
.sel-tree-body{padding-left:22px}
.sel-emp{display:flex;align-items:center;gap:6px;padding:3px 8px;border-radius:4px;cursor:pointer;font-size:13px}
.sel-emp:hover{background:var(--bg)}
.sel-emp input{margin:0}
.sel-emp .sub{margin-left:auto;font-size:11px}
.sel-picked-wrap{width:240px;display:flex;flex-direction:column;border:1px solid var(--border);border-radius:6px;background:var(--bg)}
.sel-picked-title{padding:8px 12px;font-size:13px;color:var(--text-2);border-bottom:1px solid var(--border);font-weight:600}
.sel-picked-list{flex:1;overflow:auto;padding:8px;max-height:380px}
.sel-picked{display:flex;align-items:center;justify-content:space-between;padding:5px 10px;background:var(--white);border:1px solid var(--border);border-radius:4px;margin-bottom:5px;font-size:13px}
.sel-remove{cursor:pointer;color:var(--text-2);padding:0 4px;font-size:16px;line-height:1}
.sel-remove:hover{color:var(--danger)}

/* 标签选择弹窗（探马式：左分组导航 + 右标签主体） */
.select-tags{display:flex;flex-direction:column;gap:10px;min-height:420px}
.tag-body{display:flex;gap:12px;flex:1;min-height:0}
.tag-nav{width:160px;display:flex;flex-direction:column;border:1px solid var(--border);border-radius:6px;background:var(--bg);overflow:auto;max-height:440px;flex-shrink:0}
.tag-nav-item{padding:10px 14px;font-size:13px;color:var(--text-2);cursor:pointer;border-left:3px solid transparent;border-bottom:1px solid var(--bg)}
.tag-nav-item:hover{background:var(--white)}
.tag-nav-item.active{color:var(--brand);background:var(--white);border-left-color:var(--brand);font-weight:600}
.tag-main{flex:1;border:1px solid var(--border);border-radius:6px;padding:12px 16px;overflow:auto;max-height:440px;min-width:0}
.tag-group{margin-bottom:18px}
.tag-group-head{font-size:13px;font-weight:600;color:var(--text);margin-bottom:10px;padding-bottom:6px;border-bottom:1px solid var(--border);position:sticky;top:0;background:var(--white)}
.tag-group-body{display:flex;flex-wrap:wrap;gap:6px}
.tag-chip{display:inline-flex;align-items:center;gap:5px;padding:5px 10px;background:var(--white);border:1px solid var(--border);border-radius:4px;font-size:13px;color:var(--text);cursor:pointer;user-select:none}
.tag-chip:hover{border-color:var(--brand)}
.tag-chip.active{border-color:var(--brand);background:rgba(22,119,255,.08);color:var(--brand)}
.tag-chip .tc-tick{width:14px;height:14px;display:inline-flex;align-items:center;justify-content:center;font-size:11px;color:var(--brand)}
.tag-foot-tip{padding:8px 4px 0;font-size:12px;color:var(--text-3);border-top:1px solid var(--border);margin-top:6px}
.tag-foot-tip a{color:var(--brand);text-decoration:none;margin:0 4px}

/* ============ 渠道活码表单（探马风格：块标题/红星/灰色问号/计数/卡片勾选） ============ */
.ch-subpage{margin:-12px -12px 0}
.ch-form{display:flex;flex-direction:column;gap:12px;padding:0 0 80px}
/* 子页头部：静态（不遮挡下方），顶端紧贴顶栏底部，左右各留 24px 空隙与字段块对齐 */
.ch-sub-head{display:flex;align-items:center;gap:14px;padding:14px 24px;border:1px solid var(--border);border-radius:8px;background:#fff;margin:0;box-shadow:0 1px 2px rgba(15,23,42,.04)}
.ch-sub-head .actions{margin-left:auto}
.ch-crumb{font-size:14px;color:var(--text-2)}
.ch-crumb b{color:var(--text);font-weight:600}
.ch-back{color:var(--brand);text-decoration:none;font-size:14px;padding:6px 10px;border-radius:4px;transition:.15s}
.ch-back:hover{background:var(--brand-light)}
.btn.primary{background:var(--brand);color:#fff;border-color:var(--brand);font-weight:500;box-shadow:0 1px 2px rgba(37,99,235,.2);transition:.15s}
.btn.primary:hover{background:var(--brand-dark);border-color:var(--brand-dark);box-shadow:0 2px 6px rgba(37,99,235,.3);transform:translateY(-1px)}
.btn.primary:disabled{opacity:.5;cursor:not-allowed;pointer-events:none;transform:none;box-shadow:none}
.btn.sm{padding:3px 12px;font-size:12px;border-radius:4px}
/* 字段块：拉满主内容宽度 + 块间 gap 由 ch-form 16px 提供（去掉自身 margin） */
.field-block{background:#fff;border:1px solid var(--border);border-radius:8px;padding:20px 24px;box-shadow:0 1px 3px rgba(15,23,42,.04), 0 1px 2px rgba(15,23,42,.04);margin:0}
.field-block + .field-block{margin-top:0}
/* 块标题：与内容分隔 */
.block-title{font-size:15px;font-weight:600;color:#1F2937;margin-bottom:14px;padding-bottom:10px;border-bottom:1px solid #F3F4F6}
.block-tip{font-size:12px;color:var(--text-3);margin-bottom:14px}
/* 表单行：横排——左侧加粗 label + "："，右侧填写内容；字符计数浮在输入框内部右下角 */
.form-row{display:flex;align-items:flex-start;gap:16px;margin-bottom:16px}
.form-row:last-child{margin-bottom:0}
.form-row .label{flex-shrink:0;width:88px;padding-top:8px;color:#374151;font-size:14px;font-weight:600;text-align:left;display:flex;align-items:center;gap:4px}
.form-row .label::after{content:"：";font-weight:600;margin-left:-2px;color:var(--text)}
.form-row .label .req{color:var(--danger);font-weight:700;margin-right:2px}
.form-row .label .req::after{content:""}
/* ctrl：column 内部，input/textarea/select 内部右下角放计数（padding-right 留位） */
.form-row .ctrl{flex:1;min-width:0;max-width:640px;display:flex;flex-direction:column;gap:6px;align-items:flex-start}
.form-row .ctrl .input-row{position:relative;display:inline-flex;align-items:flex-start;width:auto;max-width:100%}
.form-row .ctrl .input-row > input,.form-row .ctrl .input-row > select,.form-row .ctrl .input-row > textarea{
  flex:1;min-width:0;width:auto;max-width:420px;height:36px;border:1px solid #D1D5DB;border-radius:6px;
  padding:0 36px 0 12px;background:#fff;outline:none;color:var(--text);
  transition:border-color .15s, box-shadow .15s;
}
.form-row .ctrl .input-row > textarea{width:100%;max-width:720px;height:140px;padding:10px 36px 10px 12px;line-height:1.5}
.form-row .ctrl .input-row > input:focus,.form-row .ctrl .input-row > select:focus,.form-row .ctrl .input-row > textarea:focus{
  border-color:var(--brand);box-shadow:0 0 0 3px rgba(37,99,235,.12)
}
.form-row .ctrl .input-row .cnt{position:absolute;right:8px;bottom:6px;font-size:12px;color:var(--text-3);line-height:1;pointer-events:none;background:rgba(255,255,255,.85);padding:1px 4px;border-radius:3px}
.form-row .ctrl > input,.form-row .ctrl > select,.form-row .ctrl > textarea{
  width:100%;max-width:420px;height:36px;border:1px solid #D1D5DB;border-radius:6px;
  padding:0 36px 0 12px;background:#fff;outline:none;color:var(--text);
  transition:border-color .15s, box-shadow .15s;
}
.form-row .ctrl > textarea{max-width:720px;height:120px;padding:10px 36px 10px 12px;line-height:1.5;resize:vertical}
.form-row .ctrl > input:focus,.form-row .ctrl > select:focus,.form-row .ctrl > textarea:focus{
  border-color:var(--brand);box-shadow:0 0 0 3px rgba(37,99,235,.12)
}
.form-row.flat{display:block}
.field-with-tip{display:flex;align-items:center;gap:8px}
.field-tip{color:var(--text-2);font-size:12px;line-height:1.5}
.field-tip.info{display:none}
.cnt{color:var(--text-3);font-size:12px;white-space:nowrap;align-self:flex-end;margin-top:4px}
.input-row .cnt{margin-top:0;margin-left:auto}
.cnt.over{color:var(--danger)}
.rule-cards{display:grid;grid-template-columns:repeat(4,1fr);gap:10px;max-width:760px}
.rule-card{position:relative;border:1px solid var(--border);border-radius:8px;padding:12px 14px;cursor:pointer;background:var(--white);transition:border-color .15s, box-shadow .15s, background .15s;min-height:88px}
.rule-card:hover{border-color:var(--brand)}
.rule-card.active{border-color:var(--brand);box-shadow:0 0 0 2px var(--brand);background:var(--brand-light)}
.rule-card::before{content:"";position:absolute;top:10px;right:10px;width:14px;height:14px;border-radius:50%;border:1px solid var(--border);background:var(--white);flex-shrink:0}
.rule-card.active::before{border-color:var(--brand)}
.rule-card.active::after{content:"";position:absolute;top:14px;right:14px;width:6px;height:6px;border-radius:50%;background:var(--brand)}
.rule-card b{font-size:14px;color:var(--text);display:block;margin-bottom:4px}
.rule-card p{font-size:12px;color:var(--text-3);margin:0;line-height:1.5;display:-webkit-box;-webkit-line-clamp:2;-webkit-box-orient:vertical;overflow:hidden}
.dl-cards{display:grid;grid-template-columns:1fr 1fr;gap:10px;max-width:440px}
.dl-card{position:relative;border:1px solid var(--border);border-radius:6px;padding:14px 16px;cursor:pointer;background:var(--white);transition:all .15s;display:flex;flex-direction:column;align-items:center;gap:8px}
.dl-card:hover{border-color:var(--brand)}
.dl-card.active{border-color:var(--brand);box-shadow:0 0 0 1px var(--brand)}
.dl-card.active::after{content:"✓";position:absolute;right:8px;bottom:6px;color:var(--brand);font-weight:700;font-size:16px}
.dl-card .dl-img{width:96px;height:96px;background:var(--bg);border:1px dashed var(--border);border-radius:4px;display:flex;align-items:center;justify-content:center;color:var(--text-3);font-size:11px}
.dl-card .dl-name{font-size:13px;color:var(--text)}
.dl-card .dl-sub{font-size:11px;color:var(--text-3)}
.seg{display:inline-flex;background:#fff;border:1px solid var(--border);border-radius:6px;overflow:hidden;width:auto;line-height:1;align-self:flex-start}
.seg-item{position:relative;padding:5px 14px;font-size:13px;line-height:1;color:var(--text-2);cursor:pointer;display:inline-flex;align-items:center;gap:0;border-right:1px solid var(--border);transition:.15s}
.seg-item:last-child{border-right:none}
.seg-item input{position:absolute;opacity:0;pointer-events:none;width:0;height:0}
.seg-item:has(input:checked){color:var(--brand);background:var(--brand-light);font-weight:500}
.switch{position:relative;display:inline-block;width:36px;height:20px;flex-shrink:0}
.switch input{opacity:0;width:0;height:0;position:absolute}
.switch span{position:absolute;inset:0;background:var(--border);border-radius:10px;transition:.2s;cursor:pointer}
.switch span::after{content:"";position:absolute;width:16px;height:16px;border-radius:50%;background:#fff;top:2px;left:2px;transition:.2s}
.switch input:checked+span{background:var(--green)}
.switch input:checked+span::after{transform:translateX(16px)}
.trig-days{display:inline-flex;align-items:center;gap:6px}
.trig-days input{width:100px}
.work-days{margin-top:6px}
.emp-picked{display:flex;align-items:center;gap:10px;flex-wrap:wrap}
.emp-picked-tags{display:flex;flex-wrap:wrap;gap:6px;margin-top:6px}
.emp-tag{display:inline-flex;align-items:center;gap:4px;padding:3px 10px;background:var(--white);border:1px solid var(--border);border-radius:14px;font-size:12px;color:var(--text)}
.emp-tag a{cursor:pointer;color:var(--text-3);font-size:14px;padding:0 2px}
.emp-tag a:hover{color:var(--danger)}
.ins-bar{display:flex;align-items:center;gap:6px;margin-bottom:6px;font-size:12px;flex-wrap:wrap}
.ins-tip{color:var(--text-3)}
.media-types{display:flex;gap:8px;flex-wrap:wrap;margin-bottom:6px}
.media-dropzone{border:1px dashed var(--border);border-radius:6px;padding:18px;text-align:center;color:var(--text-3);font-size:13px;background:var(--white)}
.qr-preview{display:flex;flex-direction:column;align-items:flex-start;gap:6px}
.qr-placeholder{width:128px;height:128px;background:var(--bg);border:1px dashed var(--border);border-radius:6px;display:flex;align-items:center;justify-content:center;color:var(--text-3);font-size:12px;overflow:hidden}
.qr-placeholder img{width:100%;height:100%;object-fit:contain}
.qr-tip{color:var(--danger);font-size:12px}
@media(max-width:560px){.rule-cards{grid-template-columns:1fr 1fr}.dl-cards{grid-template-columns:1fr}.form-row .label{font-size:13px}}

/* ============ 渠道活码列表页（探马风格：左侧分组树 + 右侧表格 + 操作下拉） ============ */
.ch-page{display:flex;gap:0;min-height:600px}
.ch-side{width:200px;flex-shrink:0;border-right:1px solid var(--border);background:var(--white);padding:14px 0}
.ch-side-toggle{padding:6px 14px;color:var(--text-2);font-size:13px;cursor:pointer;display:flex;align-items:center;gap:4px}
.ch-side-toggle:hover{color:var(--brand)}
.ch-side-tree-head{display:flex;align-items:center;justify-content:space-between;padding:8px 14px;background:var(--white);position:sticky;top:0;z-index:2}
.ch-side-tree-title{display:flex;align-items:center;gap:6px;font-size:14px;font-weight:600;color:var(--text);cursor:pointer;user-select:none}
.ch-side-tree-title .caret{font-size:10px;color:var(--text-2)}
.ch-side-add{font-size:12px;color:var(--brand);cursor:pointer;padding:2px 8px;border-radius:4px}
.ch-side-add:hover{background:var(--brand-light)}
.tree-list{padding:4px 0 8px}
.tree-node{display:flex;align-items:center;gap:6px;padding:7px 14px;font-size:13px;color:var(--text-2);cursor:pointer;border-radius:0;border-left:3px solid transparent;transition:.12s}
.tree-node:hover{background:var(--bg);color:var(--text)}
.tree-node.active{background:var(--brand-light);color:var(--brand);border-left-color:var(--brand);font-weight:600}
.tree-node .tree-icon{color:var(--brand);font-size:13px;width:14px}
.ch-main{flex:1;min-width:0;background:var(--white);border-radius:6px;border:1px solid var(--border);padding:0}
.ch-main-head{display:flex;align-items:center;gap:16px;padding:14px 20px;border-bottom:1px solid var(--border)}
.ch-main-title{font-size:16px;font-weight:600;color:var(--text)}
.ch-member-tip{color:var(--text-3);font-size:12px;flex:1;min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.ch-main-actions{display:flex;gap:8px;align-items:center}
.ch-tool-links{display:flex;gap:14px;color:var(--brand);font-size:13px;margin-right:6px}
.ch-tool-links a{color:var(--brand);text-decoration:none;cursor:pointer}
.ch-tool-links a:hover{text-decoration:underline}
.ch-filter-row{display:flex;gap:12px;align-items:center;padding:12px 20px;border-bottom:1px solid var(--border);background:var(--white)}
.ch-filter-item{display:flex;align-items:center;gap:6px;font-size:13px;color:var(--text-2)}
.ch-filter-item .ipt{padding:4px 10px;border:1px solid var(--border);border-radius:4px;font-size:13px;width:140px}
.ch-filter-item .ipt:focus{border-color:var(--brand)}
.ch-filter-item select{padding:4px 10px;border:1px solid var(--border);border-radius:4px;font-size:13px}
.ch-table{width:100%;border-collapse:collapse;font-size:13px}
.ch-table th{background:var(--bg);color:var(--text-2);font-weight:500;padding:10px 12px;text-align:left;border-bottom:1px solid var(--border);font-size:12px}
.ch-table td{padding:12px;border-bottom:1px solid var(--border);color:var(--text);vertical-align:middle}
.ch-table tbody tr:hover{background:var(--bg)}
.ch-table .col-check{width:36px;text-align:center}
.ch-table .col-name{font-weight:500;color:var(--text);max-width:200px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.ch-table .col-desc{color:var(--text-3);font-size:12px;max-width:200px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.ch-table .col-type{font-size:13px;color:var(--text)}
.ch-table .col-tags{min-width:90px}
.ch-tag{display:inline-block;color:var(--brand);background:var(--brand-light);padding:1px 7px;border-radius:3px;font-size:12px;margin:1px 2px 1px 0}
.ch-table .col-time{color:var(--text-2);font-size:12px;white-space:nowrap}
.ch-table .col-qr{width:52px}
.ch-qr-thumb{width:30px;height:30px;border:1px solid var(--border);border-radius:4px;cursor:pointer;object-fit:contain;background:#fff;vertical-align:middle;transition:.15s}
.ch-qr-thumb:hover{border-color:var(--brand);box-shadow:0 0 0 2px var(--brand-light)}
.badge.st-active{background:var(--brand-light);color:var(--brand)}
.badge.st-void{background:var(--bg);color:var(--text-3)}
.ch-table .col-actions{text-align:right;white-space:nowrap}
.op-link{color:var(--brand);font-size:13px;text-decoration:none;cursor:pointer;margin-right:14px;background:none;border:none;padding:0}
.op-link:hover{text-decoration:underline}
.op-link.danger{color:var(--danger)}
.op-more{position:relative;display:inline-block}
.op-more-btn{color:var(--brand);font-size:13px;cursor:pointer;background:none;border:none;padding:0}
.op-more-btn:hover{text-decoration:underline}
.op-more-btn::after{content:" ▾";font-size:10px}
.op-dropdown{position:absolute;top:100%;right:0;background:var(--white);border:1px solid var(--border);border-radius:4px;box-shadow:0 4px 12px rgba(0,0,0,.08);min-width:100px;z-index:10;padding:4px 0;display:none}
.op-dropdown.open{display:block}
.op-dropdown a{display:block;padding:6px 14px;font-size:13px;color:var(--text);cursor:pointer;text-decoration:none}
.op-dropdown a:hover{background:var(--bg);color:var(--brand)}
.op-dropdown a.danger{color:var(--danger)}
.op-dropdown a.danger:hover{background:var(--danger-light)}
.ch-pager{display:flex;align-items:center;justify-content:space-between;padding:10px 20px;color:var(--text-2);font-size:13px;border-top:1px solid var(--border)}
.ch-pager .pg-pages button{padding:2px 8px;border:1px solid var(--border);background:var(--white);cursor:pointer;border-radius:3px;font-size:12px;margin-left:4px}
.ch-pager .pg-pages button.active{background:var(--brand);color:#fff;border-color:var(--brand)}
.empty-line{text-align:center;color:var(--text-3);padding:60px 0;font-size:13px}
