/* 蜂客业务管理系统 · 电脑版样式
   设计语言与小程序保持一致：品牌蓝 #3b82f6/#2563eb、浅蓝底 #eef4ff、白卡片 + 圆角 + 轻阴影 */
:root{
  --blue:#3b82f6; --blue-d:#2563eb; --blue-l:#60a5fa; --blue-x:#bfdbfe; --blue-bg:#eef4ff;
  --ink:#0f172a; --ink2:#334155; --muted:#64748b; --muted2:#94a3b8; --line:#e8eef7;
  --ok:#059669; --warn:#d97706; --danger:#e11d48; --gray:#94a3b8;
  --radius:12px; --shadow:0 2px 10px rgba(30,64,175,.06); --shadow-lg:0 12px 36px rgba(15,23,42,.18);
}
*{box-sizing:border-box}
html,body{height:100%}
body{margin:0;font:14px/1.6 -apple-system,BlinkMacSystemFont,"Segoe UI","Microsoft YaHei",sans-serif;color:var(--ink);background:var(--blue-bg)}
a{color:var(--blue-d);text-decoration:none}
h1,h2,h3{margin:0}
button{font-family:inherit}
[hidden]{display:none !important}

/* ===== 登录页 ===== */
.login-wrap{display:flex;align-items:center;justify-content:center;min-height:100vh;
  background:linear-gradient(135deg,#3b82f6 0%,#60a5fa 45%,#eef4ff 100%)}
.login-card{width:380px;background:#fff;border-radius:20px;padding:44px 40px 36px;box-shadow:var(--shadow-lg)}
.login-logo{font-size:44px;text-align:center}
.login-title{font-size:22px;text-align:center;margin-top:6px;color:var(--blue-d)}
.login-sub{text-align:center;color:var(--muted2);font-size:13px;margin:2px 0 26px}
.login-field{display:block;margin-bottom:16px}
.login-field span{display:block;font-size:13px;color:var(--muted);margin-bottom:6px}
.login-field input{width:100%;height:44px;padding:0 14px;font-size:15px;border:1px solid var(--line);
  border-radius:10px;outline:none;background:#f8fafc;transition:.15s}
.login-field input:focus{border-color:var(--blue);background:#fff;box-shadow:0 0 0 3px rgba(59,130,246,.12)}
.login-err{color:var(--danger);font-size:13px;min-height:20px;margin-bottom:6px}

/* ===== 主框架 ===== */
.app{display:flex;height:100vh;overflow:hidden}
.side{width:228px;flex:0 0 228px;background:linear-gradient(180deg,#1e3a8a,#2563eb);color:#fff;
  display:flex;flex-direction:column;padding:20px 0}
.side-brand{display:flex;align-items:center;gap:10px;padding:0 20px 16px;border-bottom:1px solid rgba(255,255,255,.14)}
.side-logo{font-size:26px}
.side-name{font-size:15px;font-weight:700}
.side-sub{font-size:11px;opacity:.65}
.side-user{padding:14px 20px 6px;font-size:13px;opacity:.9}
.side-user b{display:block;font-size:15px;font-weight:600;margin-bottom:2px}
.side-user .role{display:inline-block;font-size:11px;background:rgba(255,255,255,.18);border-radius:20px;padding:1px 9px;margin-top:4px}
.side-nav{flex:1;overflow-y:auto;padding:8px 12px}
.side-nav .grp{font-size:11px;letter-spacing:1px;opacity:.5;padding:14px 8px 6px}
.side-nav a{display:flex;align-items:center;gap:9px;padding:9px 12px;border-radius:9px;color:#fff;
  font-size:14px;opacity:.88;cursor:pointer;margin-bottom:2px}
.side-nav a:hover{background:rgba(255,255,255,.12);opacity:1}
.side-nav a.on{background:#fff;color:var(--blue-d);font-weight:600;opacity:1}
.side-nav a .ic{width:18px;text-align:center;font-size:15px}
.side-foot{display:flex;gap:8px;padding:12px 20px 4px;border-top:1px solid rgba(255,255,255,.14)}
.side-foot a{flex:1;text-align:center;font-size:12px;color:#fff;opacity:.75;border:1px solid rgba(255,255,255,.35);
  border-radius:20px;padding:6px 0}
.side-foot a:hover{opacity:1;background:rgba(255,255,255,.12)}

.main{flex:1;display:flex;flex-direction:column;overflow:hidden}
.topbar{display:flex;align-items:center;justify-content:space-between;padding:16px 28px;background:#fff;
  border-bottom:1px solid var(--line);flex:0 0 auto}
.page-title{font-size:19px;font-weight:700;color:var(--ink)}
.top-actions{display:flex;gap:10px;align-items:center}
.view{flex:1;overflow-y:auto;padding:22px 28px 40px}

/* ===== 通用块 ===== */
.card{background:#fff;border-radius:var(--radius);box-shadow:var(--shadow);padding:18px 20px;margin-bottom:16px}
.card-hd{display:flex;align-items:center;justify-content:space-between;font-size:15px;font-weight:700;color:var(--ink);margin-bottom:14px}
.card-hd .sub{font-size:12px;color:var(--muted2);font-weight:400}
.row{display:flex;gap:16px;flex-wrap:wrap;align-items:flex-start}
.row>.card{flex:1 1 320px;min-width:0;margin-bottom:16px}
.grid{display:grid;gap:14px}
.g2{grid-template-columns:repeat(2,1fr)} .g3{grid-template-columns:repeat(3,1fr)} .g4{grid-template-columns:repeat(4,1fr)}

/* ===== 卡片网格 =====
   ⚠️⚠️ 铁律（2026-09-15 用户："大的大 小的小 也不对称"）：**列数必须整除卡数，每行都要填满**。
   之前的坑：写死 6 列却只放 2~3 张卡 → 卡片各占 1/6 宽、右边空一大片 = 用户眼里的"乱"。
   宽度只允许三档，且同一组内只用一种：
     整行(1) ／ 一行的 1/2 ／ 一行的 1/3
   卡数 → 列数（唯一解）：
     1 张 → 1 列（整行）      2 张 → 2 列（各 1/2）     3 张 → 3 列（各 1/3）
     4 张 → 2 列 × 2 行（各 1/2，不用 1/4：跟 1/3 差太多）  6 张 → 3 列 × 2 行（各 1/3）
   用法：<div class="gc" style="--c:3;--c2:3">…</div>（宽屏 --c 列、窄屏 --c2 列、手机 1 列） */
.gc{display:grid;gap:14px;grid-template-columns:repeat(var(--c,3),minmax(0,1fr))}
.gc>.card{margin-bottom:0}   /* 网格自己用 gap 控制间距，卡片别再叠 margin（否则行距忽大忽小） */
.gc.eq{grid-auto-rows:1fr}  /* 多行的组（环形图）：**每一行也等高**，卡框上下沿完全对齐 */
@media (max-width:1560px){ .gc{grid-template-columns:repeat(var(--c2,2),minmax(0,1fr))} }
@media (max-width:1000px){ .gc{grid-template-columns:1fr} }

/* 整屏表格页（客户列表/公海这类"一屏就是一张表"）：表格铺满可视区，表头吸顶 */
.fill{display:flex;flex-direction:column;gap:12px;height:calc(100vh - 132px);min-height:420px}
.fill .tbl-box{flex:1 1 auto;min-height:0;overflow:auto;background:#fff;border-radius:var(--radius);box-shadow:var(--shadow)}
.fill .tbl thead th{position:sticky;top:0;z-index:2;box-shadow:inset 0 -1px 0 var(--line)}
/* 卡片里的长表格：也给吸顶，滚动页面时表头不跑掉（用户反馈"滑动时名次/销售那行不变"） */
.card .tbl thead th{position:sticky;top:0;z-index:2;box-shadow:inset 0 -1px 0 var(--line)}
.empty{text-align:center;color:var(--muted2);padding:36px 0;font-size:13px}
.muted{color:var(--muted2)} .small{font-size:12px}

.btn{border:none;border-radius:9px;padding:8px 16px;font-size:13px;cursor:pointer;transition:.15s;white-space:nowrap}
.btn-primary{background:linear-gradient(135deg,var(--blue),var(--blue-d));color:#fff;font-weight:600}
.btn-primary:hover{filter:brightness(1.06)}
.btn-ghost{background:#fff;border:1px solid var(--line);color:var(--ink2)}
.btn-ghost:hover{border-color:var(--blue-l);color:var(--blue-d)}
.btn-danger{background:#fff;border:1px solid #fecaca;color:var(--danger)}
.btn-danger:hover{background:#fef2f2}
.btn-sm{padding:5px 11px;font-size:12px;border-radius:7px}
.btn-block{width:100%;padding:12px 0;font-size:15px;border-radius:10px}
.btn:disabled{opacity:.5;cursor:not-allowed}

.tag{display:inline-block;font-size:11px;padding:1px 8px;border-radius:20px;background:#f1f5f9;color:var(--muted);white-space:nowrap}
.tag.t1{background:rgba(59,130,246,.12);color:#2563eb}.tag.t2{background:rgba(6,182,212,.14);color:#0891b2}
.tag.t3{background:rgba(16,185,129,.14);color:#059669}.tag.t4{background:rgba(15,23,42,.06);color:var(--muted2)}
.tag.t5{background:rgba(244,63,94,.12);color:#e11d48}.tag.t6{background:rgba(245,158,11,.16);color:#d97706}
.tag.blue{background:rgba(59,130,246,.12);color:#2563eb}

/* ===== 表格 ===== */
.tbl{width:100%;border-collapse:collapse;font-size:13px}
.tbl th{background:#f6f9ff;color:var(--blue-d);font-weight:600;font-size:12px;text-align:left;
  padding:10px 12px;border-bottom:1px solid var(--line);position:sticky;top:0;z-index:1}
.tbl td{padding:10px 12px;border-bottom:1px solid #f1f5f9;color:var(--ink2)}
.tbl tbody tr:hover{background:#f8fbff}
.tbl tr:last-child td{border-bottom:none}
.tbl .num{text-align:right;font-variant-numeric:tabular-nums}
.tbl-scroll{overflow:auto;max-height:calc(100vh - 260px);border-radius:var(--radius);background:#fff;box-shadow:var(--shadow)}
.tbl-scroll .tbl th{position:sticky;top:0}

/* ===== 表单 ===== */
.form-grid{display:grid;grid-template-columns:repeat(3,1fr);gap:14px 18px}
.fld{display:flex;flex-direction:column;gap:5px}
.fld.full{grid-column:1/-1}
.fld>label{font-size:12px;color:var(--muted)}
.fld>label .req{color:var(--danger);margin-left:2px}
.fld input,.fld select,.fld textarea{height:38px;padding:0 11px;font-size:14px;font-family:inherit;
  border:1px solid var(--line);border-radius:8px;outline:none;background:#f8fafc;color:var(--ink)}
.fld textarea{height:auto;min-height:76px;padding:9px 11px;resize:vertical;line-height:1.6}
.fld input:focus,.fld select:focus,.fld textarea:focus{border-color:var(--blue);background:#fff;box-shadow:0 0 0 3px rgba(59,130,246,.1)}
.fld .hint{font-size:11px;color:var(--muted2)}

/* 多选/单选块 */
.op-list{display:flex;flex-wrap:wrap;gap:8px}
.op{display:flex;align-items:center;gap:6px;border:1px solid var(--line);border-radius:8px;padding:6px 11px;
  font-size:13px;background:#fff;cursor:pointer;user-select:none}
.op:hover{border-color:var(--blue-l)}
.op.on{background:#eff6ff;border-color:var(--blue);color:var(--blue-d);font-weight:600}

/* 搜索/筛选条 */
.bar{display:flex;align-items:center;gap:10px;flex-wrap:wrap;margin-bottom:14px}
.bar input[type=text],.bar input[type=search],.bar input[type=date],.bar select{
  height:36px;padding:0 12px;border:1px solid var(--line);border-radius:18px;background:#fff;outline:none;font-size:13px;color:var(--ink)}
.bar input[type=text]:focus,.bar input[type=search]:focus{border-color:var(--blue);box-shadow:0 0 0 3px rgba(59,130,246,.1)}
.chips{display:flex;gap:8px;flex-wrap:wrap}
.chip{padding:6px 14px;border-radius:18px;background:#fff;border:1px solid var(--line);font-size:13px;color:var(--muted);cursor:pointer}
.chip:hover{border-color:var(--blue-l);color:var(--blue-d)}
.chip.on{background:var(--blue);border-color:var(--blue);color:#fff;font-weight:600}
.chip .n{opacity:.75;margin-left:4px}
.spacer{flex:1}

/* ===== 分析页 / 报告页：分组标题、环形图、柱状图、排名榜（对齐小程序观感） ===== */
.matrix-hd{font-size:15px;font-weight:800;color:var(--blue-d);letter-spacing:1px;margin:20px 0 12px;padding-left:11px;
  border-left:4px solid var(--blue);line-height:1.2}
.matrix-hd:first-child{margin-top:0}
.card.full{grid-column:1/-1}
.rc-hd{font-size:13px;font-weight:700;color:var(--ink);margin-bottom:12px}
/* 环形图 + 右侧图例 */
.chart-row{display:flex;gap:14px;align-items:center}
.chart-row svg{flex:0 0 140px}
.chart-lg{flex:1;min-width:0}
.chart-lg .pbar{margin:5px 0}
.chart-lg .nm{width:auto;flex:1 1 auto;font-size:12px}
.chart-lg .dot{flex:0 0 9px;height:9px;border-radius:50%;margin:0 8px}
/* 柱状图 */
.bar-chart{display:flex;align-items:flex-end;gap:8px;padding:10px 4px 0;overflow-x:auto}
.bar-col{flex:1 0 62px;display:flex;flex-direction:column;align-items:center;justify-content:flex-end;min-width:0}
.bar-val{font-size:12px;font-weight:700;color:var(--blue-d);text-align:center;line-height:1.25;margin-bottom:5px}
.bar-pct{font-size:11px;color:var(--muted2);font-weight:400}
.bar-stick{width:100%;max-width:52px;border-radius:6px 6px 0 0;transition:.2s}
.bar-name{font-size:11px;color:var(--muted);margin-top:6px;text-align:center;width:100%;
  overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
/* 榜 / 列表卡：**固定高度 + 内部滚动**。
   条数不同的榜（有的 5 条、有的 22 条）卡片高度会参差不齐 = 用户说的"不对称"。
   固定高度后每张卡一模一样高，数据一条不少（滚轮看，**不截断** —— 用户明确说过"数据不全"）。*/
.scroll-card{display:flex;flex-direction:column}
.scroll-box{flex:1 1 auto;min-height:0;overflow-y:auto;padding-right:4px}
.scroll-box .empty{height:100%;display:flex;align-items:center;justify-content:center;padding:0}

/* 排名榜 */
.rank-card{background:#fff;border-radius:var(--radius);box-shadow:var(--shadow);padding:16px 18px;display:flex;flex-direction:column}
.rank-hd{display:flex;align-items:center;justify-content:space-between;gap:8px;margin-bottom:10px;flex:0 0 auto}
.rank-tt{font-size:13px;font-weight:700;color:var(--ink)}
.rank-row{display:flex;align-items:center;gap:10px;padding:7px 0;border-bottom:1px solid #f4f7fb;font-size:13px}
.rank-row:last-child{border-bottom:none}
.rank-no{flex:0 0 26px;height:24px;border-radius:7px;background:#f1f5f9;color:var(--muted);font-weight:700;font-size:12px;
  display:flex;align-items:center;justify-content:center}
.rank-no.top{background:linear-gradient(135deg,#fbbf24,#f59e0b);color:#fff}
.rank-name{flex:1;color:var(--ink2);overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.rank-val{text-align:right;font-weight:700;color:var(--blue-d);font-variant-numeric:tabular-nums;display:flex;flex-direction:column;align-items:flex-end}
.rank-sub{font-size:11px;color:var(--muted2);font-weight:400;white-space:nowrap}

/* ===== 目标设定 · 分组标题（与小程序 targets.wxss 的 .rg-hd 同款：**只有标题、没有副标题**）
   人员比例 / 区域汇总 / 人员分析 三块共用同一个类，三个标题自然对齐。
   2026-09-15 用户反馈"目标设定下方三个标题没对齐"：根因是原来混用 .card-hd + 长短不一的 .sub，
   副标题被 space-between 推到最右并折行，三个标题的高低和位置就参差了 ===== */
.rg-hd{font-size:15px;font-weight:800;color:#1e3a8a;margin-bottom:14px}
/* 测算表：手填格的输入框 + 表头徽标 */
.tg-in{width:100%;height:30px;text-align:center;font-size:13px;color:#1d4ed8;font-weight:600;
  border:1px solid #dbeafe;border-radius:6px;background:#f6faff;outline:none}
.tg-in:focus{border-color:var(--blue);background:#fff;box-shadow:0 0 0 3px rgba(59,130,246,.12)}
/* U 基础新签目标：数字绿色（2026-09-16 用户要求） */
.tg-in.green{color:#059669}
/* ZR 岗位比例：下拉（2026-09-16 用户要求，不再手打 7:3） */
.tg-sel{appearance:auto;cursor:pointer;padding:0 4px}
.th-badge{display:inline-block;font-size:10px;padding:0 5px;border-radius:4px;margin-left:4px;vertical-align:middle;font-weight:500}
.th-badge.hand{background:rgba(255,255,255,.28);color:#fff}
.th-badge.auto{background:rgba(255,255,255,.13);color:rgba(255,255,255,.75)}

/* 首页两栏：**等高**（2026-09-15 用户反馈"最近录入的客户和右边今日提醒不一样高"）。
   原来用 .row（flex + align-items:flex-start），两张卡各按自己的内容高、底部一定参差；
   改成 grid 后默认 align-items:stretch，两张卡自动拉成一样高。 */
.home-cols{display:grid;gap:16px;grid-template-columns:minmax(0,1fr) 400px;align-items:stretch;margin-bottom:16px}
.home-cols>.card{margin-bottom:0}
@media (max-width:1280px){ .home-cols{grid-template-columns:1fr} }

/* ===== 首页 Hero（渐变问候区）===== */
.hero{display:flex;align-items:center;justify-content:space-between;gap:20px;padding:26px 30px;margin-bottom:18px;
  border-radius:18px;color:#fff;background:linear-gradient(120deg,#1e3a8a 0%,#2563eb 45%,#60a5fa 100%);
  box-shadow:0 10px 30px rgba(37,99,235,.28);position:relative;overflow:hidden}
.hero::after{content:'';position:absolute;right:-60px;top:-70px;width:260px;height:260px;border-radius:50%;
  background:rgba(255,255,255,.09)}
.hero::before{content:'';position:absolute;right:70px;bottom:-90px;width:180px;height:180px;border-radius:50%;
  background:rgba(255,255,255,.07)}
.hero-l{position:relative;z-index:1}
.hero-hi{font-size:26px;font-weight:800;letter-spacing:.5px}
.hero-sub{font-size:13px;opacity:.85;margin-top:6px}
.hero-r{position:relative;z-index:1;display:flex;gap:10px;flex-wrap:wrap;justify-content:flex-end}
.hero-btn{background:rgba(255,255,255,.16);border:1px solid rgba(255,255,255,.35);color:#fff;border-radius:10px;
  padding:9px 16px;font-size:13px;cursor:pointer;transition:.15s;white-space:nowrap}
.hero-btn:hover{background:rgba(255,255,255,.28)}
.hero-btn.solid{background:#fff;color:var(--blue-d);border-color:#fff;font-weight:700}
.hero-btn.solid:hover{background:#f0f7ff}

/* 快捷入口大卡 */
.quick-grid{display:grid;grid-template-columns:repeat(2,1fr);gap:12px}
.quick{display:flex;flex-direction:column;align-items:center;gap:8px;padding:18px 10px;border-radius:12px;
  background:#f8fbff;border:1px solid #e6eefb;cursor:pointer;transition:.15s;text-align:center}
.quick:hover{background:#eff6ff;border-color:var(--blue-l);transform:translateY(-2px);box-shadow:0 6px 18px rgba(37,99,235,.12)}
.quick .qi{font-size:24px;line-height:1}
.quick .qt{font-size:13px;color:var(--ink2);font-weight:600}

/* 小统计条（首页/报告的小分布） */
.mini-dist{display:grid;grid-template-columns:repeat(var(--mc,2),1fr);gap:10px 22px}

/* ===== KPI：左侧色条 + 大数字 =====
   列数规则同 .gc（**必须整除卡数**）。字号**全站唯一**：以前同一种卡有 28px 和 21px 两个档
   （.vl.sm），同一行里数字一大一小 = 用户说的"大的大 小的小"，已统一。 */
.kpis{display:grid;gap:14px;margin-bottom:18px;grid-template-columns:repeat(var(--kc,3),minmax(0,1fr))}
@media (max-width:1560px){ .kpis{grid-template-columns:repeat(var(--kc2,3),minmax(0,1fr))} }
@media (max-width:1000px){ .kpis{grid-template-columns:repeat(2,minmax(0,1fr))} }
.kpi{position:relative;background:#fff;border-radius:14px;box-shadow:var(--shadow);padding:15px 18px 13px 22px;overflow:hidden;transition:.15s;
  display:flex;flex-direction:column;justify-content:center}
.kpi:hover{box-shadow:0 6px 20px rgba(30,64,175,.12);transform:translateY(-1px)}
.kpi::before{content:'';position:absolute;left:0;top:0;bottom:0;width:5px;background:linear-gradient(180deg,var(--blue-l),var(--blue-d))}
.kpi .lb{font-size:12px;color:var(--muted);letter-spacing:.4px}
.kpi .vl{font-size:26px;font-weight:800;color:var(--blue-d);line-height:1.25;font-variant-numeric:tabular-nums;margin-top:2px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.kpi .vl.good{color:var(--ok)} .kpi .vl.low{color:var(--danger)} .kpi .vl.mid{color:var(--warn)}
.kpi .ft{font-size:11px;color:var(--muted2);margin-top:2px}
/* 图例/排名里的小进度条 */
.lg-bar{display:block;height:8px;border-radius:4px;background:linear-gradient(90deg,var(--blue-l),var(--blue-d))}

/* 进度条（⚠️ .tk/.fi 是 span，必须 display:block —— 行内元素的 width/height 不生效，
   2026-09-15 就是这里导致"成交意见反馈 TOP"的进度图整条画不出来、看着像数据缺失） */
.pbar{display:flex;align-items:center;gap:10px;margin:8px 0;font-size:12px}
.pbar .nm{width:130px;color:var(--ink2);overflow:hidden;text-overflow:ellipsis;white-space:nowrap;flex:0 0 130px}
.pbar .tk{display:block;flex:1 1 auto;min-width:40px;height:18px;background:#eef2f7;border-radius:9px;overflow:hidden}
.pbar .fi{display:block;height:100%;min-width:2px;background:linear-gradient(90deg,var(--blue-l),var(--blue-d));border-radius:9px;transition:width .3s}
.pbar .fi.g{background:linear-gradient(90deg,#34d399,#059669)}
.pbar .fi.w{background:linear-gradient(90deg,#fbbf24,#d97706)}
.pbar .vl{width:56px;text-align:right;color:var(--ink2);font-weight:600;font-variant-numeric:tabular-nums;flex:0 0 56px}
.pbar .pn{width:56px;text-align:right;color:var(--muted2);font-variant-numeric:tabular-nums;flex:0 0 56px}

/* 进度 / 完成度配色 */
.good{color:var(--ok)} .mid{color:var(--warn)} .low{color:var(--danger)} .eq{color:var(--muted2)}

/* ===== 弹层 ===== */
.modal-mask{position:fixed;inset:0;background:rgba(15,23,42,.45);z-index:900}
.modal{position:fixed;left:50%;top:50%;transform:translate(-50%,-50%);z-index:901;background:#fff;
  border-radius:16px;box-shadow:var(--shadow-lg);width:min(880px,92vw);max-height:88vh;display:flex;flex-direction:column}
.modal.wide{width:min(1200px,95vw)}
.modal.slim{width:min(560px,92vw)}
.modal-hd{display:flex;align-items:center;justify-content:space-between;padding:16px 22px;border-bottom:1px solid var(--line)}
.modal-hd h3{font-size:16px}
.modal-x{border:none;background:#f1f5f9;width:30px;height:30px;border-radius:50%;cursor:pointer;color:var(--muted);font-size:14px}
.modal-x:hover{background:#e2e8f0;color:var(--ink)}
.modal-bd{padding:20px 22px;overflow-y:auto;flex:1}
.modal-ft{display:flex;justify-content:flex-end;gap:10px;padding:14px 22px;border-top:1px solid var(--line);background:#fafcff;border-radius:0 0 16px 16px}

/* ===== 提示 ===== */
.toast{position:fixed;left:50%;top:76px;transform:translateX(-50%);z-index:999;background:rgba(15,23,42,.9);
  color:#fff;font-size:14px;padding:10px 22px;border-radius:24px;box-shadow:var(--shadow-lg);max-width:70vw}
.toast.ok{background:rgba(5,150,105,.95)} .toast.err{background:rgba(225,29,72,.95)}

/* 详情描述列表 */
.desc{display:grid;grid-template-columns:repeat(3,1fr);gap:12px 20px}
.desc .it{border-bottom:1px dashed #eef2f7;padding-bottom:8px}
.desc .it .k{font-size:12px;color:var(--muted2);margin-bottom:2px}
.desc .it .v{font-size:14px;color:var(--ink);word-break:break-all}
.desc .it.full{grid-column:1/-1}

/* 公告 */
.notice{background:linear-gradient(135deg,#eff6ff,#fff);border:1px solid #dbeafe;border-radius:var(--radius);padding:14px 18px;margin-bottom:16px}
.notice .nt-main{font-weight:700;color:var(--blue-d)}
.notice .nt-region{color:var(--blue-d)}
.notice .nt-line{color:var(--ink2);font-size:13px}

/* 颁奖台 */
.podium{display:flex;align-items:flex-end;justify-content:center;gap:14px;padding:12px 0 0}
.podium .seat{text-align:center;flex:0 0 33%}
.podium .av{width:52px;height:52px;border-radius:50%;margin:0 auto 6px;background:linear-gradient(135deg,var(--blue-l),var(--blue-d));
  color:#fff;font-weight:700;display:flex;align-items:center;justify-content:center;font-size:17px;overflow:hidden}
.podium .av img{width:100%;height:100%;object-fit:cover}
.podium .nm{font-size:13px;color:var(--ink);font-weight:600;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.podium .sc{font-size:12px;color:var(--blue-d);font-weight:700}
.podium .base{margin-top:8px;border-radius:8px 8px 0 0;background:linear-gradient(180deg,#dbeafe,#eff6ff);
  display:flex;align-items:flex-start;justify-content:center;padding-top:6px;font-size:13px;font-weight:800;color:var(--blue-d)}
.podium .s1 .base{height:76px;background:linear-gradient(180deg,#fde68a,#fef3c7)}
.podium .s2 .base{height:58px;background:linear-gradient(180deg,#e2e8f0,#f1f5f9)}
.podium .s3 .base{height:46px;background:linear-gradient(180deg,#fed7aa,#ffedd5)}

/* 左右分栏（客户页：列表 + 详情） */
.split{display:flex;gap:16px;align-items:flex-start}
.split .left{flex:1;min-width:0}
.split .right{flex:0 0 460px;position:sticky;top:0}
@media (max-width:1280px){ .split{flex-direction:column} .split .right{flex:1;width:100%;position:static} }

/* 滚动条瘦一点 */
::-webkit-scrollbar{width:9px;height:9px}
::-webkit-scrollbar-thumb{background:#cbd5e1;border-radius:5px}
::-webkit-scrollbar-thumb:hover{background:#94a3b8}
::-webkit-scrollbar-track{background:transparent}
