/* ============================================================================
   渠道合伙人协同平台 · 设计系统 (Design System)
   风格：现代 · 克制 · 企业级 SaaS（充足留白 / 清晰层级 / 柔和多层阴影）
   规则：保留全部历史 class 名；新增 stat / avatar / tag / divider 等组件
   ========================================================================== */
:root{
  /* 角色语义色（沿用历史命名） */
  --a:#2563eb;        /* 蓝 · 超管/链接/主操作 */
  --b:#0d9488;        /* 青 · B 运营中台 */
  --c:#f59e0b;        /* 橙 · 合伙人/提醒 */
  --u:#8b5cf6;        /* 紫 · 终端用户端 */
  /* 语义别名 */
  --blue:var(--a); --teal:var(--b); --amber:var(--c); --violet:var(--u);
  /* 角色浅色调（图标盒 / 标签底） */
  --asoft:#eff6ff; --bsoft:#ecfdf9; --csoft:#fff7e8; --usoft:#f5f0ff;
  /* 中性 */
  --ink:#0f172a; --ink2:#334155; --muted:#64748b; --faint:#94a3b8;
  --line:#e7ebf1; --line2:#eef2f7;
  --bg:#f6f8fb; --surface:#ffffff;
  /* 状态色 */
  --ok:#16a34a; --warn:#dc2626; --info:var(--a); --amber2:#d97706;
  /* 圆角 */
  --r-sm:8px; --r:12px; --r-lg:16px; --r-xl:20px; --r-pill:999px;
  /* 阴影 三级 */
  --sh-sm:0 1px 2px rgba(15,23,42,.05), 0 1px 3px rgba(15,23,42,.04);
  --sh-md:0 6px 20px rgba(15,23,42,.08);
  --sh-lg:0 18px 48px rgba(15,23,42,.14);
  /* 间距尺度 */
  --s1:4px; --s2:8px; --s3:12px; --s4:16px; --s5:20px; --s6:24px; --s7:32px;
  /* 字号 */
  --fs-xs:12px; --fs-sm:13px; --fs:14px; --fs-md:15px; --fs-lg:18px;
  --fs-xl:22px; --fs-2xl:28px; --fs-3xl:34px;
  /* 动效 */
  --t:.18s cubic-bezier(.4,0,.2,1);
}
*{box-sizing:border-box;margin:0;padding:0}
html{-webkit-text-size-adjust:100%}
body{font-family:-apple-system,BlinkMacSystemFont,"Segoe UI","PingFang SC","Microsoft YaHei",sans-serif;
  color:var(--ink);background:var(--bg);font-size:var(--fs);line-height:1.65;
  -webkit-font-smoothing:antialiased;letter-spacing:.1px}
a{color:var(--a);text-decoration:none;transition:color var(--t)}
a:hover{color:#1d4ed8}
::selection{background:rgba(37,99,235,.16)}
h1,h2,h3,h4{line-height:1.3;color:var(--ink)}
p{margin:var(--s2) 0;font-size:var(--fs)}
.muted{color:var(--muted);font-size:var(--fs-sm)}
.sub{color:var(--muted);font-size:var(--fs-sm);margin-top:2px}
.hint{font-size:var(--fs-xs);color:var(--faint)}

/* ---------- 布局 ---------- */
.wrap{max-width:1040px;margin:0 auto;padding:var(--s4);padding-bottom:64px}
.bar{position:sticky;top:0;z-index:30;background:rgba(255,255,255,.82);
  backdrop-filter:saturate(180%) blur(12px);-webkit-backdrop-filter:saturate(180%) blur(12px);
  border-bottom:1px solid var(--line);padding:11px var(--s4);
  display:flex;align-items:center;gap:10px;flex-wrap:wrap;box-shadow:0 1px 0 rgba(15,23,42,.02)}
.bar .brand{font-weight:800;font-size:15px;display:flex;align-items:center;gap:8px}
.bar .brand::before{content:"";width:9px;height:9px;border-radius:3px;background:linear-gradient(135deg,var(--a),var(--b))}
.bar .spacer{flex:1}
.bar select{padding:7px 11px;border:1px solid var(--line);border-radius:var(--r-sm);font-size:var(--fs-sm);background:#fff;color:var(--ink2);cursor:pointer;transition:border-color var(--t),box-shadow var(--t)}
.bar select:hover{border-color:var(--faint)}
.bar select:focus{outline:none;border-color:var(--a);box-shadow:0 0 0 3px rgba(37,99,235,.14)}
.bar .who{font-size:var(--fs-xs);color:var(--muted);font-weight:600}

/* ---------- 卡片 ---------- */
.card{background:var(--surface);border:1px solid var(--line);border-radius:var(--r-lg);
  padding:var(--s5);margin:var(--s4) 0;box-shadow:var(--sh-sm);transition:box-shadow var(--t),transform var(--t),border-color var(--t)}
.card.hover:hover{box-shadow:var(--sh-md);transform:translateY(-2px)}
.card-head{display:flex;align-items:center;gap:10px;margin:-4px 0 var(--s3)}
.card-title{font-size:var(--fs-lg);font-weight:800;color:var(--ink);display:flex;align-items:center;gap:8px}
.card-title .ico{width:26px;height:26px;border-radius:8px;display:grid;place-items:center;background:rgba(37,99,235,.1);color:var(--a);font-size:14px}
.card-actions{margin-left:auto;display:flex;gap:8px;align-items:center}
.card-desc{color:var(--muted);font-size:var(--fs-sm);margin-bottom:var(--s3)}

/* ---------- 统计卡 ---------- */
.stat-grid{display:grid;gap:var(--s3);grid-template-columns:repeat(auto-fit,minmax(160px,1fr))}
.stat{background:var(--surface);border:1px solid var(--line);border-radius:var(--r-lg);padding:var(--s4);box-shadow:var(--sh-sm);position:relative;overflow:hidden}
.stat::after{content:"";position:absolute;right:-20px;top:-20px;width:80px;height:80px;border-radius:50%;background:radial-gradient(circle,rgba(37,99,235,.08),transparent 70%)}
.stat .lbl{font-size:var(--fs-xs);color:var(--muted);font-weight:700;letter-spacing:.4px;display:flex;align-items:center;gap:6px}
.stat .num{font-size:var(--fs-2xl);font-weight:800;color:var(--ink);margin-top:6px;line-height:1.1;font-variant-numeric:tabular-nums}
.stat .sub{font-size:var(--fs-xs);color:var(--faint);margin-top:4px}
.stat.accent-a::after{background:radial-gradient(circle,rgba(37,99,235,.12),transparent 70%)}
.stat.accent-b::after{background:radial-gradient(circle,rgba(13,148,136,.12),transparent 70%)}
.stat.accent-c::after{background:radial-gradient(circle,rgba(245,158,11,.12),transparent 70%)}
.stat.accent-u::after{background:radial-gradient(circle,rgba(139,92,246,.12),transparent 70%)}

/* ---------- 网格 ---------- */
.grid{display:grid;gap:var(--s3)}
.g2{grid-template-columns:1fr 1fr}.g3{grid-template-columns:1fr 1fr 1fr}.g4{grid-template-columns:repeat(4,1fr)}
@media(max-width:760px){.g2,.g3,.g4{grid-template-columns:1fr}}

/* ---------- 标题层级 ---------- */
h2{font-size:var(--fs-xl);font-weight:800;margin:var(--s2) 0}
h3{font-size:var(--fs-lg);font-weight:800;margin:var(--s4) 0 var(--s2)}
.section-title{font-size:11px;font-weight:800;color:var(--faint);text-transform:uppercase;letter-spacing:1px;margin:var(--s5) 0 var(--s2);display:flex;align-items:center;gap:8px}
.section-title::after{content:"";flex:1;height:1px;background:var(--line)}

/* ---------- 按钮 ---------- */
.btn{display:inline-flex;align-items:center;justify-content:center;gap:6px;padding:10px 18px;border-radius:var(--r);border:1px solid transparent;font-size:var(--fs);font-weight:700;cursor:pointer;text-align:center;transition:all var(--t);user-select:none;white-space:nowrap;line-height:1.2}
.btn:hover{transform:translateY(-1px);box-shadow:var(--sh-md)}
.btn:active{transform:translateY(0)}
.btn.primary{background:var(--b);color:#fff;box-shadow:0 4px 14px rgba(13,148,136,.28)}
.btn.a{background:var(--a);color:#fff;box-shadow:0 4px 14px rgba(37,99,235,.28)}
.btn.u{background:var(--u);color:#fff;box-shadow:0 4px 14px rgba(139,92,246,.28)}
.btn.c{background:var(--c);color:#1f2937}
.btn.ghost{background:#fff;border-color:var(--line);color:var(--ink2)}
.btn.ghost:hover{border-color:var(--faint);box-shadow:var(--sh-sm)}
.btn.danger{background:#fff;border-color:#fecaca;color:var(--warn)}
.btn.danger:hover{border-color:var(--warn);box-shadow:0 4px 14px rgba(220,38,38,.18)}
.btn:disabled{opacity:.45;cursor:not-allowed;transform:none;box-shadow:none}
.btn.block{display:flex;width:100%}
.btn.sm{padding:7px 12px;font-size:var(--fs-sm);border-radius:var(--r-sm)}
.btn.lg{padding:13px 24px;font-size:var(--fs-md)}

/* ---------- 表单 ---------- */
label{display:block;font-size:var(--fs-sm);font-weight:700;margin:var(--s3) 0 var(--s1);color:var(--ink2)}
input,select,textarea{width:100%;padding:11px 13px;border:1px solid var(--line);border-radius:var(--r);font-size:var(--fs);background:#fff;font-family:inherit;color:var(--ink);transition:border-color var(--t),box-shadow var(--t)}
input::placeholder,textarea::placeholder{color:var(--faint)}
input:focus,select:focus,textarea:focus{outline:none;border-color:var(--a);box-shadow:0 0 0 3px rgba(37,99,235,.15)}
textarea{min-height:84px;resize:vertical}
.form-row{display:flex;gap:var(--s3)}
.form-row>*{flex:1}
@media(max-width:560px){.form-row{flex-direction:column;gap:0}}
.field-hint{font-size:var(--fs-xs);color:var(--faint);margin-top:4px}

/* ---------- 表格 ---------- */
.table-wrap{border:1px solid var(--line);border-radius:var(--r-lg);overflow:hidden;box-shadow:var(--sh-sm);background:#fff;margin:var(--s3) 0}
table{width:100%;border-collapse:collapse;font-size:var(--fs-sm);background:#fff}
th,td{padding:12px 14px;text-align:left;border-bottom:1px solid var(--line2);vertical-align:middle}
th{background:#f8fafc;font-weight:700;color:var(--ink2);font-size:var(--fs-xs);text-transform:uppercase;letter-spacing:.4px;position:sticky;top:0}
tbody tr{transition:background var(--t)}
tbody tr:hover{background:#f8fbff}
tbody tr:last-child td{border-bottom:none}
td.num,th.num{text-align:right;font-variant-numeric:tabular-nums}
td .row-actions{display:flex;gap:6px;justify-content:flex-end}

/* ---------- 标签 / 徽章 ---------- */
.badge{display:inline-flex;align-items:center;gap:5px;padding:3px 10px;border-radius:var(--r-pill);font-size:var(--fs-xs);font-weight:700;border:1px solid transparent;white-space:nowrap}
.badge::before{content:"";width:6px;height:6px;border-radius:50%;background:currentColor;opacity:.7}
.pill{padding:3px 10px;border-radius:var(--r-pill);font-size:var(--fs-xs);font-weight:700;display:inline-flex;align-items:center;gap:5px;white-space:nowrap}
.pill.ok{background:#dcfce7;color:var(--ok)}
.pill.warn{background:#fee2e2;color:var(--warn)}
.pill.amber{background:#fef3c7;color:var(--amber2)}
.pill.info{background:#dbeafe;color:var(--a)}
.tag{display:inline-flex;align-items:center;gap:4px;padding:2px 9px;border-radius:var(--r-sm);font-size:var(--fs-xs);font-weight:600;background:var(--line2);color:var(--ink2)}
.chip{display:inline-flex;align-items:center;gap:5px;padding:4px 11px;border-radius:var(--r-pill);font-size:var(--fs-xs);font-weight:700;background:#fff;border:1px solid var(--line);color:var(--ink2)}

/* ---------- 键值 / 列表 ---------- */
.kv{display:flex;justify-content:space-between;align-items:center;gap:12px;padding:10px 0;border-bottom:1px dashed var(--line);font-size:var(--fs)}
.kv:last-child{border-bottom:none}
.kv .k{color:var(--muted);flex-shrink:0}
.kv .v{font-weight:700;text-align:right;color:var(--ink)}
.list{list-style:none;display:flex;flex-direction:column;gap:var(--s2)}
.list li{display:flex;align-items:center;gap:10px;padding:10px 12px;background:#fff;border:1px solid var(--line);border-radius:var(--r);font-size:var(--fs-sm)}

/* ---------- 头像 / 图标 / 分隔 ---------- */
.avatar{width:40px;height:40px;border-radius:50%;display:grid;place-items:center;font-weight:800;color:#fff;font-size:var(--fs-md);flex-shrink:0;background:linear-gradient(135deg,var(--a),var(--b))}
.avatar.a{background:linear-gradient(135deg,#3b82f6,#2563eb)}
.avatar.b{background:linear-gradient(135deg,#14b8a6,#0d9488)}
.avatar.c{background:linear-gradient(135deg,#fbbf24,#f59e0b)}
.avatar.u{background:linear-gradient(135deg,#a78bfa,#8b5cf6)}
.icon{width:34px;height:34px;border-radius:10px;display:grid;place-items:center;font-size:17px;background:var(--line2);color:var(--ink2);flex-shrink:0}
.icon.a{background:rgba(37,99,235,.1);color:var(--a)}
.icon.b{background:rgba(13,148,136,.1);color:var(--b)}
.icon.c{background:rgba(245,158,11,.12);color:var(--amber2)}
.icon.u{background:rgba(139,92,246,.12);color:var(--u)}
.icon.ok{background:rgba(22,163,74,.12);color:var(--ok)}
.icon.warn{background:rgba(220,38,38,.12);color:var(--warn)}
.divider{height:1px;background:var(--line);margin:var(--s4) 0}
.divider.dashed{background:none;border-top:1px dashed var(--line)}

/* ---------- 时间线 ---------- */
.timeline{position:relative;padding-left:22px;margin:var(--s3) 0}
.timeline:before{content:"";position:absolute;left:7px;top:6px;bottom:6px;width:2px;background:var(--line)}
.tl-item{position:relative;padding:8px 0}
.tl-item:before{content:"";position:absolute;left:-22px;top:13px;width:12px;height:12px;border-radius:50%;background:#fff;border:3px solid var(--line)}
.tl-item.done:before{border-color:var(--ok);background:var(--ok)}
.tl-item.cur:before{border-color:var(--a);background:var(--a);box-shadow:0 0 0 4px rgba(37,99,235,.18)}
.tl-item .t{font-size:var(--fs-xs);color:var(--muted)}
.tl-item .h{font-size:var(--fs-sm);font-weight:700;color:var(--ink)}

/* ---------- 提示框 / 要件 ---------- */
.flag{display:flex;gap:10px;align-items:flex-start;padding:11px 13px;border-radius:var(--r);font-size:var(--fs-sm);margin:var(--s2) 0;line-height:1.5}
.flag .fi{font-size:16px;line-height:1.4;flex-shrink:0}
.flag .dot{width:14px;height:14px;border-radius:50%;background:currentColor;flex-shrink:0;margin-top:3px}
.flag.ok{background:#f0fdf4;border:1px solid #bbf7d0;color:#15803d}
.flag.no{background:#fef2f2;border:1px solid #fecaca;color:#b91c1c}
.flag.info{background:#eff6ff;border:1px solid #bfdbfe;color:#1e40af}
.note{background:#fffbeb;border:1px solid #fde68a;border-radius:var(--r);padding:13px 15px;font-size:var(--fs-sm);color:#92400e;margin:var(--s3) 0;line-height:1.6}
.note.blue{background:#eff6ff;border-color:#bfdbfe;color:#1e40af}
.note.green{background:#f0fdf4;border-color:#bbf7d0;color:#166534}

/* ---------- 收款码 ---------- */
.qr{width:200px;height:200px;background:
  repeating-linear-gradient(0deg,#0f172a 0 6px,#fff 6px 12px),
  repeating-linear-gradient(90deg,#0f172a 0 6px,#fff 6px 12px);
  background-blend-mode:difference;border-radius:var(--r-lg);margin:10px auto;position:relative;box-shadow:var(--sh-sm)}
.qr::after{content:"支付宝收款码";position:absolute;inset:0;display:flex;align-items:center;justify-content:center;background:#fffcc;font-weight:800;color:#0f172a;font-size:13px;mix-blend-mode:screen}
.qrbox{text-align:center;padding:16px;border:2px dashed var(--a);border-radius:var(--r-lg);background:#eff6ff}
.pay-meta{display:flex;justify-content:space-between;padding:8px 0;font-size:var(--fs-sm);border-bottom:1px dashed var(--line)}
.pay-meta:last-child{border-bottom:none}

/* ---------- 空态 / 加载 ---------- */
.empty{text-align:center;color:var(--muted);padding:48px 20px;display:flex;flex-direction:column;align-items:center;gap:10px}
.empty .eico{font-size:38px;opacity:.5}
.skeleton{background:linear-gradient(90deg,#eef2f7 25%,#e2e8f0 37%,#eef2f7 63%);background-size:400% 100%;animation:sk 1.2s infinite;border-radius:var(--r-sm);height:14px;margin:8px 0}
@keyframes sk{0%{background-position:100% 0}100%{background-position:-100% 0}}

/* ---------- Toast ---------- */
.toast{position:fixed;left:50%;bottom:32px;transform:translateX(-50%) translateY(10px);background:rgba(15,23,42,.94);color:#fff;padding:11px 20px;border-radius:var(--r-pill);font-size:var(--fs-sm);z-index:99;opacity:0;transition:.22s;box-shadow:var(--sh-lg);backdrop-filter:blur(4px);max-width:88vw;text-align:center}
.toast.show{opacity:1;transform:translateX(-50%) translateY(0)}

/* 角色色文字工具类 */
.tc-a{color:var(--a)} .tc-b{color:var(--b)} .tc-c{color:var(--c)} .tc-u{color:var(--u)}
.bg-a{background:var(--a)} .bg-b{background:var(--b)} .bg-c{background:var(--c)} .bg-u{background:var(--u)}

/* ============================================================================
   补充组件（页面重构新增，向后兼容）
   ========================================================================== */

/* 行排列 / 弹性占位 */
.row{display:flex;align-items:center;gap:10px;flex-wrap:wrap}
.row > *{flex-shrink:0}
.spacer{flex:1}

/* 等宽数字 / 强调 */
.mono{font-family:"SF Mono",Menlo,Consolas,monospace;font-variant-numeric:tabular-nums;letter-spacing:.2px}
.strong{font-weight:800;color:var(--ink)}
.num.strong{color:var(--ink)}

/* 卡片头图标盒（按 --bg 注入主题色，缺省中性灰） */
.card-head-ico{width:38px;height:38px;border-radius:11px;display:grid;place-items:center;font-size:19px;
  background:var(--bg,var(--line2));color:var(--c,#334155);flex-shrink:0;box-shadow:inset 0 0 0 1px rgba(255,255,255,.4)}
.card-head-ico.accent{background:linear-gradient(135deg,rgba(37,99,235,.14),rgba(13,148,136,.14))}

/* 统计卡（新版结构：stat-row 容器 + stat-ico/label/val） */
.stat-row{display:grid;gap:var(--s3);grid-template-columns:repeat(auto-fit,minmax(150px,1fr));margin:var(--s4) 0}
.stat-ico{font-size:22px;line-height:1}
.stat-label{font-size:var(--fs-xs);color:var(--muted);font-weight:700;letter-spacing:.4px;margin-top:6px}
.stat-val{font-size:var(--fs-2xl);font-weight:800;color:var(--ink);margin-top:2px;line-height:1.1;font-variant-numeric:tabular-nums}
.stat.accent-ok::after{background:radial-gradient(circle,rgba(22,163,74,.14),transparent 70%)}
.stat.accent-warn::after{background:radial-gradient(circle,rgba(220,38,38,.12),transparent 70%)}
.stat.accent-muted::after{background:radial-gradient(circle,rgba(100,116,139,.12),transparent 70%)}
.stat.accent-ok .stat-ico{filter:none}
.accent-ok .stat-val{color:var(--ok)} .accent-warn .stat-val{color:var(--warn)} .accent-muted .stat-val{color:var(--muted)}

/* 键值网格 */
.kv-grid{display:grid;grid-template-columns:1fr 1fr;gap:2px var(--s5);margin:var(--s2) 0}
.kv-grid .kv{border-bottom:1px dashed var(--line);padding:9px 0}
@media(max-width:560px){.kv-grid{grid-template-columns:1fr}}

/* 操作台 / 卡点告警 */
.card.op{border-color:#d7f0ec;background:#f6fdfb}
.op-row{display:flex;gap:10px;align-items:flex-end;flex-wrap:wrap;margin:var(--s3) 0}
.op-row .row{flex:1;min-width:220px}
.card.alert{border-color:#fecaca;background:#fff5f5}
.alert-ico{width:38px;height:38px;border-radius:11px;display:grid;place-items:center;font-size:18px;background:#fee2e2;color:var(--warn);flex-shrink:0}
.missing-box{background:#fff;border:1px dashed #fca5a5;border-radius:var(--r);padding:12px 14px;margin:var(--s3) 0}
.missing-item{font-size:var(--fs-sm);color:#b91c1c;padding:3px 0;line-height:1.5}

/* 邀请成功顶栏 */
.success-top{font-size:var(--fs-lg);font-weight:800;color:var(--ok);display:flex;align-items:center;gap:8px}

/* 表单网格 */
.form-grid{display:grid;grid-template-columns:1fr 1fr;gap:0 var(--s4);margin-top:var(--s2)}
.form-item{margin:0}
.form-item label{margin-top:var(--s3)}
@media(max-width:560px){.form-grid{grid-template-columns:1fr}}

/* 按钮语义补充 */
.btn.ok{background:var(--ok);color:#fff;box-shadow:0 4px 14px rgba(22,163,74,.28)}
.btn.warn{background:var(--warn);color:#fff;box-shadow:0 4px 14px rgba(220,38,38,.28)}

/* 时间线节点增强（与顶设状态对齐） */
.tl-dot{position:absolute;left:-22px;top:13px;width:12px;height:12px;border-radius:50%;background:var(--a);box-shadow:0 0 0 4px rgba(37,99,235,.18)}
.tl-body{font-size:var(--fs-sm);color:var(--ink2);line-height:1.5}
.tl-now .tl-body{color:var(--ink);font-weight:700}

