/* =========================================================
   目标达成及量化系统 · 设计系统 v2.0
   风格：现代专业 SaaS / 轻量商务
   ========================================================= */

/* 品牌字体：优先 Outfit（若网络可达），否则回退 PingFang SC / 微软雅黑 等系统无衬线，避免外部字体在国内部署时阻塞渲染 */

:root {
  /* 色彩 · 品牌蓝 */
  --brand-50:  #eef5fd;
  --brand-100: #dbe9f8;
  --brand-200: #bcd6f1;
  --brand-300: #8fbce8;
  --brand-400: #5a9bdb;
  --brand-500: #2f7fd1;
  --brand-600: #1f63ad;
  --brand-700: #185388;
  --brand-800: #134068;
  --brand-900: #0e2d4a;

  /* 语义色 */
  --primary:   #1f6fb2;
  --primary-d: #185a93;
  --accent:    #38bdf8;
  --success:   #16a34a;
  --success-bg:#e8f6ee;
  --warning:   #d99a0b;
  --warning-bg:#fdf3e0;
  --danger:    #e0523f;
  --danger-bg: #fdecea;
  --purple:    #7c5cd6;
  --purple-bg: #f1ebfd;

  /* 中性 / 表面 */
  --bg:        #f4f7fb;
  --surface:   #ffffff;
  --surface-2: #f8fafc;
  --border:    #e7ecf2;
  --border-2:  #eef2f7;
  --text:      #1f2a37;
  --text-2:    #5b6776;
  --text-3:    #8a96a3;

  /* 圆角 */
  --r-xs: 6px;
  --r-sm: 8px;
  --r:    12px;
  --r-lg: 16px;
  --r-xl: 20px;
  --r-full: 999px;

  /* 阴影 */
  --sh-sm: 0 1px 2px rgba(16,24,40,.06);
  --sh:    0 4px 16px rgba(16,24,40,.08);
  --sh-md: 0 8px 28px rgba(16,24,40,.10);
  --sh-lg: 0 18px 50px rgba(16,24,40,.14);

  /* 侧边栏字体 */
  --font-display: "Outfit", "Noto Sans SC", "PingFang SC", "Microsoft YaHei", sans-serif;

  /* 间距 */
  --sp-1: 4px; --sp-2: 8px; --sp-3: 12px; --sp-4: 16px;
  --sp-5: 20px; --sp-6: 24px; --sp-8: 32px;
}

* { box-sizing: border-box; }
.hidden { display: none !important; }
body {
  margin: 0;
  font-family: "PingFang SC", "Microsoft YaHei", system-ui, -apple-system, "Segoe UI", sans-serif;
  background: var(--bg);
  color: var(--text);
  font-size: 14px;
  line-height: 1.6;
  -webkit-font-smoothing: antialiased;
}

/* ===================== 登录 / 注册（Hero 落地页 + 弹窗登录） ===================== */
.auth-screen {
  --accent-cyan: #22d3ee;
  --accent-blue: #3b82f6;
  --accent-purple: #a855f7;
  position: fixed; inset: 0; z-index: 50;
  overflow: hidden;
  background: rgb(10, 10, 14);
  color: #fff;
  display: flex; align-items: center; justify-content: center;
  font-family: system-ui, -apple-system, BlinkMacSystemFont, "Segoe UI", "PingFang SC", "Microsoft YaHei", sans-serif;
}

/* ===== 深空背景 ===== */
.auth-screen .universe {
  position: absolute; inset: 0; z-index: 0;
  background:
    radial-gradient(ellipse at 20% 20%, rgba(59,130,246,0.12) 0%, transparent 45%),
    radial-gradient(ellipse at 80% 80%, rgba(168,85,247,0.10) 0%, transparent 45%),
    radial-gradient(ellipse at 50% 50%, rgba(34,211,238,0.06) 0%, transparent 60%),
    rgb(10,10,14);
}
.auth-screen .stars { position:absolute; inset:0; z-index:0; pointer-events:none; }
.auth-screen .stars::before, .auth-screen .stars::after {
  content:''; position:absolute; inset:0;
  background-image:
    radial-gradient(2px 2px at 20px 30px, rgba(255,255,255,0.9), transparent),
    radial-gradient(1.5px 1.5px at 60px 90px, rgba(255,255,255,0.7), transparent),
    radial-gradient(1px 1px at 140px 50px, rgba(255,255,255,0.6), transparent),
    radial-gradient(2px 2px at 200px 160px, rgba(255,255,255,0.8), transparent),
    radial-gradient(1.5px 1.5px at 260px 30px, rgba(255,255,255,0.7), transparent),
    radial-gradient(1px 1px at 320px 110px, rgba(255,255,255,0.6), transparent),
    radial-gradient(2px 2px at 380px 70px, rgba(255,255,255,0.9), transparent),
    radial-gradient(1px 1px at 440px 180px, rgba(255,255,255,0.6), transparent),
    radial-gradient(1.5px 1.5px at 500px 40px, rgba(255,255,255,0.8), transparent),
    radial-gradient(2px 2px at 560px 130px, rgba(255,255,255,0.7), transparent);
  background-size: 600px 220px;
  opacity: .45;
}
.auth-screen .stars::after {
  transform: translate(300px, 110px) scale(.8);
  opacity: .3;
}
.auth-screen .nebula { position:absolute; inset:0; z-index:0; pointer-events:none; filter: blur(80px); }
.auth-screen .nebula span {
  position:absolute; border-radius:50%;
  background: radial-gradient(circle, rgba(59,130,246,0.22) 0%, transparent 70%);
  animation: nebulaDrift 18s ease-in-out infinite alternate;
}
.auth-screen .nebula span:nth-child(1) { width:420px; height:420px; left:-120px; top:-80px; }
.auth-screen .nebula span:nth-child(2) { width:360px; height:360px; right:-100px; bottom:-60px; background: radial-gradient(circle, rgba(168,85,247,0.20) 0%, transparent 70%); animation-delay:-6s; }
.auth-screen .nebula span:nth-child(3) { width:300px; height:300px; left:50%; top:40%; transform:translate(-50%,-50%); background: radial-gradient(circle, rgba(34,211,238,0.14) 0%, transparent 70%); animation-delay:-12s; }
@keyframes nebulaDrift { from { transform: translate(0,0) scale(1); } to { transform: translate(30px,20px) scale(1.05); } }

/* ===== Hero 主视觉 ===== */
.auth-screen .hero {
  position: relative; z-index: 1;
  display: flex; align-items: center; justify-content: center;
  width: 100%; height: 100%;
  padding: 24px;
}
.hero-content {
  display: flex; flex-direction: column; align-items: center; text-align: center;
  max-width: 720px;
  animation: heroFadeIn .8s ease-out both;
}
@keyframes heroFadeIn { from { opacity:0; transform: translateY(18px); } to { opacity:1; transform: translateY(0); } }

.hero-badge {
  display: inline-flex; align-items: center; gap: 8px;
  padding: 9px 20px; border-radius: 999px;
  background: rgba(255,255,255,0.08);
  border: 1px solid rgba(255,255,255,0.14);
  font-size: 14px; color: rgba(255,255,255,0.88); font-weight: 500;
  margin-bottom: 34px;
  letter-spacing: 0.04em;
  backdrop-filter: blur(8px);
}
.hero-badge .badge-dot {
  width: 7px; height: 7px; border-radius: 50%;
  background: #22d3ee;
  box-shadow: 0 0 8px #22d3ee;
}

.hero-title {
  font-size: clamp(44px, 7vw, 74px);
  font-weight: 800;
  line-height: 1.18;
  letter-spacing: -0.01em;
  margin: 0 0 30px;
}
.hero-title .line1 { color: #fff; }
.hero-title .line2 {
  background: linear-gradient(135deg, #22d3ee 0%, #3b82f6 50%, #a855f7 100%);
  -webkit-background-clip: text; -webkit-text-fill-color: transparent;
  background-clip: text;
}

.hero-subtitle {
  font-size: 17px; line-height: 1.95;
  letter-spacing: 0.02em;
  color: rgba(255,255,255,0.65);
  margin: 0 0 44px;
  max-width: 580px;
}

.hero-cta {
  display: inline-flex; align-items: center; justify-content: center; gap: 10px;
  padding: 16px 42px; border-radius: 999px; border: none;
  font-size: 17px; font-weight: 600; color: #fff; cursor: pointer;
  background: linear-gradient(135deg, #3b82f6 0%, #7c5cfc 55%, #a855f7 100%);
  box-shadow: 0 10px 30px -8px rgba(124,92,252,0.45), inset 0 1px 0 rgba(255,255,255,0.18);
  transition: transform .18s, box-shadow .18s, filter .18s;
}
.hero-cta:hover { transform: translateY(-2px); box-shadow: 0 14px 36px -6px rgba(124,92,252,0.55); filter: brightness(1.06); }
.hero-cta:active { transform: translateY(0); }
.hero-cta svg { width: 20px; height: 20px; }

/* ===== 登录弹窗 ===== */
.login-modal {
  position: fixed; inset: 0; z-index: 60;
  display: flex; align-items: center; justify-content: center;
  padding: 24px;
  background: rgba(0,0,0,0.45);
  backdrop-filter: blur(10px);
  animation: modalFade .25s ease;
}
@keyframes modalFade { from { opacity:0; } to { opacity:1; } }

.login-modal-card {
  position: relative;
  width: 100%; max-width: 420px;
  padding: 34px 32px 32px;
  border-radius: 22px;
  background: rgba(20, 22, 32, 0.72);
  border: 1px solid rgba(255,255,255,0.12);
  box-shadow: 0 28px 70px rgba(0,0,0,0.45), inset 0 1px 0 rgba(255,255,255,0.08);
  backdrop-filter: blur(22px);
  animation: modalSlide .3s cubic-bezier(.2,.8,.2,1) both;
}
@keyframes modalSlide { from { opacity:0; transform: translateY(16px) scale(.98); } to { opacity:1; transform: translateY(0) scale(1); } }

.modal-close {
  position: absolute; top: 16px; right: 18px;
  width: 32px; height: 32px; border-radius: 50%;
  border: none; background: rgba(255,255,255,0.08);
  color: rgba(255,255,255,0.65); font-size: 24px; line-height: 1;
  cursor: pointer; display: flex; align-items: center; justify-content: center;
  transition: background .15s, color .15s;
}
.modal-close:hover { background: rgba(255,255,255,0.16); color: #fff; }

.login-card-header { text-align: center; margin-bottom: 26px; }
.login-badge {
  width: 52px; height: 52px; border-radius: 14px; margin: 0 auto 14px;
  display: flex; align-items: center; justify-content: center;
  background: linear-gradient(135deg, rgba(59,130,246,0.25), rgba(168,85,247,0.25));
  border: 1px solid rgba(255,255,255,0.12);
}
.login-badge svg { width: 26px; height: 26px; color: #fff; }
.login-card-header h1 { font-size: 22px; font-weight: 700; margin: 0 0 6px; color: #fff; }
.login-card-header p { font-size: 13px; color: rgba(255,255,255,0.55); margin: 0; }

.auth-tabs {
  display: flex; gap: 8px; padding: 5px; margin-bottom: 22px;
  background: rgba(255,255,255,0.06); border-radius: 12px;
}
.auth-tab {
  flex: 1; padding: 10px; border: none; border-radius: 10px;
  background: transparent; color: rgba(255,255,255,0.55); font-size: 14px; font-weight: 600;
  cursor: pointer; transition: .18s;
}
.auth-tab.active { background: rgba(255,255,255,0.12); color: #fff; }
.auth-tab:hover:not(.active) { color: rgba(255,255,255,0.85); }

.field-label { display:block; font-size:12px; color:rgba(255,255,255,0.55); margin-bottom:6px; margin-top:14px; }
.dark-input {
  width:100%; padding:12px 14px; border-radius:12px;
  background: rgba(255,255,255,0.06); border:1px solid rgba(255,255,255,0.10);
  color:#fff; font-size:14px; outline:none;
  transition: border-color .18s, background .18s, box-shadow .18s;
}
.dark-input::placeholder { color: rgba(255,255,255,0.32); }
.dark-input:focus { border-color: rgba(124,92,252,0.65); background: rgba(255,255,255,0.08); box-shadow: 0 0 0 3px rgba(124,92,252,0.12); }
select.dark-input { appearance: none; cursor: pointer; }

.login-btn {
  width:100%; margin-top:22px; padding:13px; border:none; border-radius:12px;
  background: linear-gradient(135deg, #3b82f6 0%, #7c5cfc 100%);
  color:#fff; font-size:15px; font-weight:600; cursor:pointer;
  box-shadow: 0 8px 22px -6px rgba(124,92,252,0.35);
  transition: transform .15s, filter .15s, box-shadow .15s;
}
.login-btn:hover { transform: translateY(-1px); filter: brightness(1.06); box-shadow: 0 10px 28px -5px rgba(124,92,252,0.45); }
.auth-msg { min-height:20px; margin-top:10px; font-size:12px; text-align:center; color:#f87171; }

/* 减少动画（尊重用户偏好） */
@media (prefers-reduced-motion: reduce) {
  .hero-content, .login-modal, .login-modal-card { animation:none; }
}





/* ===================== 布局 ===================== */
#appScreen { display: flex; height: 100vh; overflow: hidden; }

/* 侧栏：固定不随主内容滚动 */
/* 侧栏：企业级 SaaS · 亮色白底（纯平涂、发丝灰线、黑条激活态） */
.sidebar {
  width: 240px; flex-shrink: 0;
  background: #ffffff;
  color: var(--text);
  display: flex; flex-direction: column;
  border-right: 1px solid var(--border);
  position: sticky; top: 0; align-self: flex-start; z-index: 2;
  height: 100vh;
  overflow: hidden;
  font-family: var(--font-display);
}

/* 品牌区：克制玻璃感卡片 */
.sidebar .brand {
  margin: 16px 14px 8px;
  padding: 13px 14px;
  display: flex; align-items: center; gap: 12px;
  border-radius: 14px;
  background: rgba(17,17,18,.03);
  border: 1px solid rgba(17,17,18,.06);
}
.brand-logo {
  width: 36px; height: 36px; flex-shrink: 0; border-radius: 10px;
  display: flex; align-items: center; justify-content: center;
  background: rgba(17,17,18,.05);
  border: 1px solid rgba(17,17,18,.10);
}
.brand-logo svg { width: 20px; height: 20px; }
.brand-logo img { width: 100%; height: 100%; object-fit: contain; display: block; }
.brand-text { line-height: 1.25; }
.brand-text small { display: block; font-size: 11px; font-weight: 400; color: var(--text-3); letter-spacing: .08em; }

.nav { display: flex; flex-direction: column; padding: 8px 12px; flex: 1; gap: 2px; overflow-y: auto; }
.nav button {
  background: none; border: none; padding: 10px 12px; font-size: 14px; cursor: pointer;
  color: #52525b; text-align: left; border-radius: 10px; width: 100%;
  display: flex; align-items: center; gap: 11px;
  transition: background .16s, color .16s;
}
.nav button:hover { background: rgba(17,17,18,.035); color: #18181b; }
.nav button.active {
  background: rgba(17,17,18,.06); color: #18181b; font-weight: 600;
  box-shadow: inset 3px 0 0 #18181b;
}
.nav-ico { width: 18px; height: 18px; flex-shrink: 0; display: inline-flex; color: inherit; }
.nav-ico svg { width: 18px; height: 18px; }

.nav .nav-parent { width: 100%; }
.nav .nav-parent > button { justify-content: flex-start; }
.nav .nav-parent .nav-caret { margin-left: auto; font-size: 11px; color: #a0a0a8; transition: transform .2s; }
.nav .nav-parent.open .nav-caret { transform: rotate(90deg); }
.nav .nav-sub {
  display: none; margin: 2px 0 2px 17px; padding-left: 14px;
  border-left: 1px solid var(--border);
}
.nav .nav-sub.open { display: block; }
.nav .nav-parent.open .nav-sub { display: block; }
.nav .nav-sub button {
  padding: 9px 12px; font-size: 13px; gap: 9px; color: #6b6b73;
  position: relative; border-radius: 8px;
}
.nav .nav-sub button::before {
  content: ""; position: absolute; left: -15px; top: 50%; width: 5px; height: 5px;
  border-radius: 50%; background: #d4d4d8; transform: translateY(-50%);
}
.nav .nav-sub button:hover { background: rgba(17,17,18,.03); color: #18181b; }
.nav .nav-sub button.active {
  background: rgba(17,17,18,.06); color: #18181b; font-weight: 600;
  box-shadow: none;
}
.nav .nav-sub button.active::before { background: #18181b; }

.sidebar-foot {
  padding: 14px 16px; border-top: 1px solid var(--border);
  font-size: 12px; color: var(--text-3);
  display: flex; align-items: center; gap: 8px;
}
.sidebar-foot::before {
  content: ""; width: 14px; height: 14px; border-radius: 4px; flex-shrink: 0;
  background: #18181b;
}

/* 主区：独立滚动 */
.main {
  flex: 1; min-width: 0; display: flex; flex-direction: column;
  height: 100vh;
  overflow-y: auto;
  overflow-x: hidden;
}

/* 顶部页眉 */
.page-head {
  display: flex; align-items: center; justify-content: space-between;
  padding: 16px 26px; background: var(--surface);
  border-bottom: 1px solid var(--border);
  position: sticky; top: 0; z-index: 5;
}
.page-head h1 { margin: 0; font-size: 19px; color: var(--text); font-weight: 700; letter-spacing: .3px; }
.ph-sub { font-size: 12px; color: var(--text-3); margin-top: 2px; }
.ph-right { display: flex; align-items: center; gap: 14px; }
.page-head .user-pill {
  display: flex; align-items: center; gap: 9px; padding: 5px 12px 5px 6px;
  background: var(--surface-2); border: 1px solid var(--border); border-radius: var(--r-full);
}
.page-head .user-avatar {
  width: 30px; height: 30px; border-radius: 50%;
  background: linear-gradient(135deg, var(--brand-400), var(--brand-700));
  color: #fff; font-size: 13px; font-weight: 700;
  display: flex; align-items: center; justify-content: center;
}
.page-head .user-meta { line-height: 1.25; }
.page-head .user-meta .un { font-size: 13px; font-weight: 600; color: var(--text); }
.page-head .user-meta .ur { font-size: 11px; color: var(--text-3); }
.logout-btn {
  background: var(--surface-2); color: var(--text-2); border: 1px solid var(--border);
  padding: 8px 16px; border-radius: var(--r-sm); cursor: pointer; font-size: 13px; transition: all .16s;
}
.logout-btn:hover { background: var(--danger-bg); color: var(--danger); border-color: #f3c9c3; }

.content { flex: 1; padding: 22px 26px 30px; max-width: none; width: 100%; display: flex; flex-direction: column; min-width: 0; }
/* 工作台展开后：保持撑满（max-width 已默认 none） */
.content:has(.wb-host) { /* 详见 wb-host 区块 */ }

.ctx-bar {
  background: linear-gradient(0deg, var(--warning-bg), #fff);
  border: 1px solid #f3dca6; color: #8a6d3b; padding: 10px 16px;
  border-radius: var(--r-sm); margin: 0 26px 18px; font-size: 13px;
  display: flex; align-items: center; gap: 10px;
}

/* ===================== 销售工作台（原生嵌入） ===================== */

/* 销售工作台——主区容器与 iframe 自适应高度（撑满 .content 主区域） */
.content:has(.wb-host) { display: flex; flex-direction: column; flex: 1; min-height: 0; max-width: none; padding-left: 14px; padding-right: 14px; }
.wb-host { display: flex; flex-direction: column; flex: 1; min-height: 0; width: 100%; }
.wb-tabs { display: flex; gap: 4px; border-bottom: 1px solid var(--border-2); flex: 0 0 auto; background: transparent; padding-left: 4px; }
.wb-tab { display: inline-flex; align-items: center; gap: 6px; padding: 11px 18px; background: transparent; border: none; border-bottom: 2px solid transparent; cursor: pointer; color: var(--text-2); font-size: 14px; font-family: inherit; margin-bottom: -1px; transition: all .15s; }
.wb-tab:hover { color: var(--brand-600); }
.wb-tab.active { color: var(--brand-700); border-bottom-color: var(--brand-500); font-weight: 600; }
.wb-tab-ico { font-size: 16px; }
.wb-frame-wrap { flex: 1 1 auto; min-height: 600px; width: 100%; display: flex; }
.wb-frame-wrap iframe { width: 100%; flex: 1 1 auto; border: 0; min-height: 600px; background: transparent; }
.wb-frame-err {
  display: flex; flex-direction: column; align-items: center; justify-content: center;
  gap: 10px; padding: 50px 30px; text-align: center; color: var(--text-2);
  background: var(--bg-soft); border: 2px dashed var(--border); border-radius: var(--r);
  margin: 20px 0;
}
.wb-frame-err.hidden { display: none; }
.wb-frame-err-title { font-size: 16px; font-weight: 700; color: var(--danger); }
.wb-frame-err-desc { font-size: 13px; line-height: 1.7; max-width: 520px; }

<omitted>
.wb-back-btn {
  display: inline-flex; align-items: center; gap: 5px; padding: 6px 14px;
  background: var(--brand-600); color: #fff; border: none; border-radius: var(--r-sm);
  cursor: pointer; font-size: 13px; transition: all .16s;
}
.wb-back-btn:hover { background: var(--brand-700); }

/* ===================== 卡片 / 网格 ===================== */
<omitted>

/* ===================== 卡片 / 网格 ===================== */
.card {
  background: var(--surface); border-radius: var(--r); padding: 18px;
  margin-bottom: 16px; box-shadow: var(--sh); border: 1px solid var(--border-2);
  transition: box-shadow .2s, transform .2s;
}
.card:hover { box-shadow: var(--sh-md); }
.card h2 {
  margin: 0 0 14px; font-size: 15px; color: var(--brand-800); font-weight: 700;
  display: flex; align-items: center; gap: 8px;
}
.card h2::before {
  content: ""; width: 4px; height: 14px; border-radius: 2px;
  background: linear-gradient(180deg, var(--accent), var(--brand-600));
}
.grid { display: grid; gap: 16px; }
.g2 { grid-template-columns: 1fr 1fr; }
.g3 { grid-template-columns: repeat(3,1fr); }
.g4 { grid-template-columns: repeat(4,1fr); }
@media (max-width: 980px){ .g4 { grid-template-columns: repeat(2,1fr); } }
@media (max-width: 720px){ .g2,.g3,.g4 { grid-template-columns: 1fr; } }

/* KPI */
.kpi {
  background: var(--surface); border-radius: var(--r); padding: 16px 14px; text-align: center;
  box-shadow: var(--sh); border: 1px solid var(--border-2); position: relative; overflow: hidden;
}
.kpi::before {
  content: ""; position: absolute; left: 0; top: 0; right: 0; height: 3px;
  background: linear-gradient(90deg, var(--brand-400), var(--accent));
}
.kpi .v { font-size: 26px; font-weight: 800; color: var(--brand-700); letter-spacing: .5px; line-height: 1.2; }
.kpi .l { font-size: 12px; color: var(--text-3); margin-top: 6px; }
.kpi.blue .v { color: var(--brand-500); }
.kpi.blue::before { background: linear-gradient(90deg, #38bdf8, #2563eb); }

/* ===================== 表单 / 输入 ===================== */
.row { display: flex; flex-wrap: wrap; gap: 12px; }
.row > div { flex: 1; min-width: 130px; }
label { display: block; margin: 10px 0 5px; font-size: 13px; color: var(--text-2); font-weight: 500; }
input, textarea, select {
  width: 100%; padding: 9px 11px; border: 1px solid var(--border);
  border-radius: var(--r-sm); font-size: 13px; font-family: inherit; background: #fff;
  color: var(--text); outline: none; transition: border-color .16s, box-shadow .16s;
}
input:focus, textarea:focus, select:focus { border-color: var(--brand-400); box-shadow: 0 0 0 3px var(--brand-100); }
input:disabled { background: var(--surface-2); color: var(--brand-700); font-weight: 700; }
textarea { resize: vertical; min-height: 52px; max-height: 600px; overflow-y: auto; box-sizing: border-box; }
button.act {
  background: linear-gradient(135deg, var(--brand-500), var(--brand-700)); color: #fff; border: none;
  padding: 9px 16px; border-radius: var(--r-sm); cursor: pointer; font-size: 13px; font-weight: 500;
  transition: all .16s; box-shadow: 0 4px 12px rgba(31,111,178,.25);
}
button.act:hover { transform: translateY(-1px); box-shadow: 0 7px 18px rgba(31,111,178,.35); }
button.act.sec { background: linear-gradient(135deg, #6c8bbf, #4f6f9e); box-shadow: none; }
button.act.sec:hover { box-shadow: 0 6px 14px rgba(79,111,158,.3); }
button.del, button.del-sm {
  background: var(--danger-bg); color: var(--danger); border: 1px solid #f1c7c1;
  border-radius: var(--r-xs); cursor: pointer; padding: 6px 11px; font-size: 12px; transition: all .16s;
}
button.del:hover, button.del-sm:hover { background: #fbdcd7; }
button.del-sm { padding: 3px 9px; }

/* ===================== 表格 ===================== */
table { width: 100%; border-collapse: separate; border-spacing: 0; margin-top: 10px; font-size: 13px; }
th, td { border-bottom: 1px solid var(--border-2); padding: 9px 10px; text-align: left; vertical-align: top; }
th {
  background: var(--surface-2); color: var(--text-2); font-weight: 600; font-size: 12px;
  border-bottom: 1px solid var(--border); position: sticky; top: 0;
}
th:first-child { border-top-left-radius: var(--r-sm); }
th:last-child { border-top-right-radius: var(--r-sm); }
tbody tr { transition: background .14s; }
tbody tr:hover { background: var(--brand-50); }
td textarea { min-height: 80px; }
td input, td select { padding: 5px 7px; }

/* ===================== 标签 / 进度 ===================== */
.seg { display: flex; align-items: center; gap: 10px; flex-wrap: wrap; }
.muted { color: var(--text-3); font-size: 12px; }
.pill { display: inline-block; padding: 3px 10px; border-radius: var(--r-full); font-size: 12px; font-weight: 500; }
.u-ij { background: var(--danger-bg); color: var(--danger); }
.u-in { background: var(--brand-50); color: var(--brand-700); }
.u-nj { background: var(--warning-bg); color: var(--warning); }
.u-nn { background: var(--surface-2); color: var(--text-3); }
.u-sp { background: var(--purple-bg); color: var(--purple); }
.tag { display: inline-block; padding: 3px 11px; border-radius: var(--r-full); font-size: 12px; font-weight: 500; }
.t-done { background: var(--success-bg); color: var(--success); }
.t-none { background: var(--danger-bg); color: var(--danger); }
.t-part { background: var(--warning-bg); color: var(--warning); }
.t-rev  { background: var(--purple-bg); color: var(--purple); }

/* =========================================================
   系统设置 → 操作日志 / 公告 / 更新日志 / 备份 共用样式
   ========================================================= */

/* --- 操作日志 --- */
.audit-toolbar {
  display: flex; flex-wrap: wrap; gap: 10px; align-items: center;
  margin-bottom: 12px; padding: 12px; background: var(--surface-2);
  border-radius: var(--r-sm); border: 1px solid var(--border-2);
}
.audit-toolbar input, .audit-toolbar select { width: auto; min-width: 140px; }
.audit-tbl { width: 100%; border-collapse: separate; border-spacing: 0; font-size: 13px; }
.audit-tbl th, .audit-tbl td { border-bottom: 1px solid var(--border-2); padding: 9px 10px; vertical-align: top; }
.audit-tbl th { background: var(--surface-2); color: var(--text-2); font-weight: 600; font-size: 12px; }
.audit-tbl tbody tr:hover { background: var(--brand-50); }
.tag-act {
  background: linear-gradient(135deg, var(--accent), var(--brand-500));
  color: #fff; padding: 2px 10px; border-radius: var(--r-full);
  font-size: 12px; font-weight: 500;
}
.tag-new { background: var(--success-bg); color: var(--success); }
.tag-fix { background: var(--danger-bg); color: var(--danger); }
.tag-improve { background: var(--warning-bg); color: var(--warning); }
.pager {
  display: flex; align-items: center; gap: 10px; margin-top: 12px;
  justify-content: flex-end;
}
.pager button {
  background: var(--surface); border: 1px solid var(--border);
  border-radius: var(--r-sm); padding: 5px 12px; cursor: pointer;
  font-size: 13px; color: var(--brand-700);
}
.pager button:hover:not([disabled]) { border-color: var(--brand-400); }
.pager button[disabled] { opacity: .45; cursor: not-allowed; }

/* --- 公告通知 --- */
.ann-toolbar { display: flex; gap: 10px; align-items: center; margin-bottom: 14px; }
.ann-list { display: flex; flex-direction: column; gap: 12px; }
.ann-card {
  background: var(--surface); border: 1px solid var(--border-2);
  border-radius: var(--r); padding: 14px 16px;
  border-left: 3px solid var(--border); transition: border-color .2s, box-shadow .2s;
}
.ann-card:hover { box-shadow: var(--sh); }
.ann-card.pinned {
  border-left-color: var(--warning);
  background: linear-gradient(180deg, #fffbe9 0%, var(--surface) 60%);
}
.ann-head { display: flex; justify-content: space-between; align-items: baseline; margin-bottom: 8px; gap: 12px; }
.ann-title { font-size: 14px; }
.ann-pin {
  display: inline-block; padding: 1px 8px; border-radius: var(--r-full);
  background: var(--warning); color: #fff; font-size: 11px; font-weight: 600;
  margin-right: 6px;
}
.ann-meta { font-size: 12px; color: var(--text-3); }
.ann-body { line-height: 1.7; color: var(--text); white-space: pre-wrap; word-break: break-word; }
.ann-actions { display: flex; gap: 8px; margin-top: 12px; }

/* --- 更新日志 --- */
.cl-wrap { display: flex; flex-direction: column; gap: 14px; }
.cl-block {
  border: 1px solid var(--border-2); border-radius: var(--r);
  padding: 14px 18px; position: relative;
  border-left: 3px solid var(--brand-500);
  background: linear-gradient(180deg, #f8fbff 0%, var(--surface) 70%);
}
.cl-head { display: flex; align-items: center; gap: 12px; margin-bottom: 10px; }
.cl-version {
  background: linear-gradient(135deg, var(--brand-500), var(--brand-700));
  color: #fff; padding: 2px 12px; border-radius: var(--r-full);
  font-weight: 700; font-size: 13px;
}
.cl-date { color: var(--text-3); font-size: 12px; font-family: ui-monospace, monospace; }
.cl-flag {
  padding: 1px 8px; border-radius: var(--r-full);
  background: var(--success-bg); color: var(--success); font-size: 11px;
}
.cl-list { list-style: none; margin: 0; padding: 0; display: flex; flex-direction: column; gap: 8px; }
.cl-list li { display: flex; gap: 8px; align-items: flex-start; line-height: 1.6; font-size: 13px; }
.cl-list li .tag { flex-shrink: 0; margin-top: 4px; }
.cl-item-row { display: flex; gap: 8px; margin-top: 8px; align-items: center; }
.cl-item-row select { width: auto; min-width: 90px; flex: none; }
.cl-item-row input { flex: 1; }
.cl-item-row .del-sm { padding: 4px 10px; }

/* --- 备份与恢复 --- */
.bk-grid { display: grid; grid-template-columns: 1fr 1fr; gap: 16px; }
@media (max-width: 980px) { .bk-grid { grid-template-columns: 1fr; } }
.bk-card {
  border: 1px solid var(--border-2); border-radius: var(--r);
  padding: 18px; background: var(--surface);
}
.bk-card-h {
  font-size: 15px; font-weight: 700; color: var(--brand-800);
  margin-bottom: 10px; display: flex; align-items: center; gap: 8px;
}
.bk-card-h::before {
  content: ""; width: 4px; height: 14px; border-radius: 2px;
  background: linear-gradient(180deg, var(--accent), var(--brand-600));
}
.bk-stat { list-style: none; margin: 12px 0; padding: 0; display: grid; grid-template-columns: 1fr 1fr; gap: 6px 16px; font-size: 13px; }
.bk-stat li { color: var(--text-2); }
.bk-stat b { color: var(--brand-700); font-weight: 700; }
.bk-card-actions {
  display: flex; align-items: center; gap: 12px; margin-top: 12px; flex-wrap: wrap;
}
.bk-card-actions .act, .bk-card-actions a.act { text-decoration: none; }
.bk-card-actions input[type="file"] {
  flex: 1; min-width: 200px;
  border: 1px dashed var(--border); padding: 8px 10px; border-radius: var(--r-sm);
  background: var(--surface-2);
}
.warn-line {
  margin-top: 12px; padding: 8px 12px; border-radius: var(--r-sm);
  background: #fff7ed; border: 1px solid #fbcf9a; color: #b45309;
  font-size: 13px;
}
.bk-meta { margin-top: 12px; font-size: 12px; color: var(--text-2); }
.bk-tip code {
  background: var(--surface-2); padding: 1px 6px; border-radius: 4px;
  font-family: ui-monospace, monospace; font-size: 12px;
}
.bar { background: var(--surface-2); border-radius: var(--r-full); overflow: hidden; height: 14px; box-shadow: inset 0 1px 2px rgba(16,24,40,.06); }
.bar > i { display: block; height: 100%; border-radius: var(--r-full); background: linear-gradient(90deg, var(--brand-400), var(--accent)); transition: width .5s ease; }
.done-i > i { background: linear-gradient(90deg, #34c773, #16a34a); }
.part-i > i { background: linear-gradient(90deg, #f6c453, #e6a008); }
.fail-i > i { background: linear-gradient(90deg, #f0856a, #e0523f); }
.empty { color: var(--text-3); padding: 18px; text-align: center; font-size: 13px; }
.chart-box { position: relative; height: 200px; }

/* ===================== 管理员 ===================== */
.user-row { display: flex; align-items: center; gap: 12px; padding: 12px 4px; border-bottom: 1px dashed var(--border); }
.user-row .nm { font-weight: 600; color: var(--text); }
.st-pending { color: var(--warning); font-weight: 600; }
.st-approved { color: var(--success); font-weight: 600; }
.st-rejected { color: var(--danger); font-weight: 600; }
.st-disabled { color: var(--text-3); font-weight: 600; }

/* ===================== 用户管理表格 ===================== */
.usr-search {
  display: flex; align-items: center; gap: 10px; flex-wrap: wrap;
  padding: 10px 14px; margin-bottom: 14px;
  background: var(--surface-2); border: 1px solid var(--border); border-radius: var(--r-sm);
}
.usr-search input {
  flex: 1; min-width: 220px; padding: 8px 12px; border: 1px solid var(--border);
  border-radius: var(--r-sm); background: #fff; font-size: 13px;
}
.usr-search input:focus { outline: none; border-color: var(--brand-500); box-shadow: 0 0 0 3px rgba(56,125,255,.12); }
.usr-tbl { width: 100%; border-collapse: collapse; font-size: 13px; }
.usr-tbl th, .usr-tbl td {
  text-align: left; padding: 10px 12px; border-bottom: 1px solid var(--border-2);
}
.usr-tbl th {
  background: var(--surface-2); color: var(--text-2); font-weight: 600;
  font-size: 12px; letter-spacing: .3px; white-space: nowrap;
}
.usr-tbl tbody tr:hover { background: var(--surface-2); }
.usr-tbl td .nm { font-weight: 600; color: var(--text); }
.usr-tbl td .ph { color: var(--text-3); font-size: 12px; font-family: ui-monospace, monospace; }
.usr-tbl .col-act { white-space: nowrap; }
.usr-tbl .col-act a {
  display: inline-block; margin-right: 8px; color: var(--brand-600); cursor: pointer;
  text-decoration: none; font-weight: 500;
}
.usr-tbl .col-act a:hover { color: var(--brand-800); text-decoration: underline; }
.usr-tbl .col-act a.danger { color: var(--danger); }
.usr-tbl .col-act a.danger:hover { color: #b03030; }
.usr-tbl .col-act a.disabled { color: var(--text-3); cursor: not-allowed; }
.role-tag {
  display: inline-block; padding: 2px 8px; border-radius: var(--r-full);
  font-size: 11px; font-weight: 600; line-height: 1.5;
}
.role-tag.admin { background: var(--purple-bg); color: var(--purple); }
.role-tag.user { background: var(--brand-50); color: var(--brand-700); }

/* ===================== 模态对话框 ===================== */
.modal-mask {
  position: fixed; inset: 0; background: rgba(16,24,40,.45);
  display: flex; align-items: center; justify-content: center; z-index: 9999;
  animation: maskIn .15s ease;
}
@keyframes maskIn { from{opacity:0} to{opacity:1} }
.modal {
  background: #fff; border-radius: var(--r-lg); box-shadow: var(--sh-xl);
  width: 460px; max-width: 92vw; max-height: 90vh; overflow: auto;
  animation: modalIn .2s cubic-bezier(.2,.8,.3,1);
}
@keyframes modalIn { from{opacity:0;transform:translateY(12px) scale(.97)} to{opacity:1;transform:none} }
.modal-h {
  padding: 16px 20px; border-bottom: 1px solid var(--border-2);
  font-weight: 700; font-size: 15px; color: var(--brand-800);
  display: flex; align-items: center; justify-content: space-between;
}
.modal-h .close {
  width: 28px; height: 28px; border-radius: 6px; cursor: pointer;
  background: transparent; border: none; font-size: 18px; color: var(--text-3);
  display: flex; align-items: center; justify-content: center;
}
.modal-h .close:hover { background: var(--surface-2); color: var(--text); }
.modal-b { padding: 18px 20px; }
.modal-f {
  padding: 14px 20px; border-top: 1px solid var(--border-2);
  display: flex; justify-content: flex-end; gap: 10px;
}
.modal-f button {
  padding: 7px 16px; border-radius: var(--r-sm); border: 1px solid var(--border);
  background: #fff; color: var(--text-2); font-size: 13px; font-weight: 500; cursor: pointer;
  transition: all .15s;
}
.modal-f button:hover { border-color: var(--brand-400); color: var(--brand-700); }
.modal-f button.primary {
  background: linear-gradient(135deg, var(--brand-500), var(--brand-700));
  color: #fff; border-color: var(--brand-600); box-shadow: 0 4px 12px rgba(31,111,178,.3);
}
.modal-f button.primary:hover { transform: translateY(-1px); box-shadow: 0 7px 18px rgba(31,111,178,.4); }
.modal-f button.primary:disabled { opacity: .55; cursor: not-allowed; transform: none; box-shadow: none; }
.modal-f button.danger { color: var(--danger); border-color: #f3c9c3; }
.modal-f button.danger:hover { background: var(--danger-bg); border-color: var(--danger); }
.modal label { display: block; margin: 12px 0 5px; font-size: 13px; color: var(--text-2); font-weight: 500; }
.modal label .req { color: var(--danger); margin-left: 2px; }
.modal input, .modal select {
  width: 100%; padding: 8px 12px; border: 1px solid var(--border);
  border-radius: var(--r-sm); font-size: 13px; background: #fff; transition: all .15s;
}
.modal input:focus, .modal select:focus {
  outline: none; border-color: var(--brand-500);
  box-shadow: 0 0 0 3px rgba(56,125,255,.12);
}
.modal .hint { font-size: 12px; color: var(--text-3); margin-top: 5px; }
.modal .err { font-size: 12px; color: var(--danger); margin-top: 8px; min-height: 16px; }
.modal .row2 { display: grid; grid-template-columns: 1fr 1fr; gap: 12px; }

/* ===================== 筛选 chips ===================== */
.filter-box { padding: 12px 14px; margin: 10px 0; background: var(--surface-2); border: 1px solid var(--border); border-radius: var(--r-sm); }
.filter-box .seg { margin: 0; }
.chip {
  background: #fff; border: 1px solid var(--border); color: var(--text-2);
  padding: 5px 13px; margin: 3px 6px 3px 0; border-radius: var(--r-full); font-size: 12px;
  cursor: pointer; transition: all .16s; user-select: none;
}
.chip:hover { border-color: var(--brand-400); color: var(--brand-600); }
.chip.on { background: var(--brand-600); border-color: var(--brand-600); color: #fff; box-shadow: 0 3px 10px rgba(31,111,178,.3); }

/* ===================== 业务员切换 + 日量化时间范围 ===================== */
.ctx-sel { padding: 12px 16px; background: var(--warning-bg); border: 1px solid #f3dca6; border-radius: var(--r-sm); }
.ctx-sel label { color: #8a6d3b; font-weight: 600; margin: 0; }
.time-range { display: inline-flex; align-items: center; gap: 4px; white-space: nowrap; }
.time-range select { width: 56px; padding: 4px 5px; font-size: 12px; min-width: 0; }
.time-range i { font-style: normal; color: var(--text-3); font-size: 12px; padding: 0 1px; }

/* 滚动条美化 */
::-webkit-scrollbar { width: 10px; height: 10px; }
::-webkit-scrollbar-thumb { background: #cdd7e2; border-radius: var(--r-full); border: 2px solid transparent; background-clip: padding-box; }
::-webkit-scrollbar-thumb:hover { background: #b3c0cf; background-clip: padding-box; }

/* ===================== 周次 Tabs ===================== */
.wk-head {
  display: flex; flex-wrap: wrap; gap: 10px; align-items: center;
  background: var(--bg); border: 1px solid var(--border); border-radius: var(--r);
  padding: 12px 14px; margin-bottom: 12px;
}
.wk-head .grow { flex: 1; min-width: 220px; }
.wk-tabs-wrap {
  display: flex; align-items: center; gap: 8px;
  background: var(--bg-soft); border: 1px solid var(--border);
  border-radius: var(--r); padding: 8px 10px; margin-bottom: 14px;
}
.wk-tabs {
  display: flex; gap: 8px; overflow-x: auto; flex: 1;
  padding: 2px 2px 6px; scroll-behavior: smooth;
}
.wk-tabs::-webkit-scrollbar { height: 6px; }
.wk-tabs::-webkit-scrollbar-thumb { background: var(--border); border-radius: 3px; }
.wk-tab {
  flex: 0 0 auto; min-width: 132px; cursor: pointer; user-select: none;
  background: #fff; border: 1px solid var(--border); border-radius: var(--r-sm);
  padding: 10px 12px; transition: all .15s;
  display: flex; flex-direction: column; gap: 4px;
  position: relative;
}
.wk-tab:hover { border-color: var(--brand); background: var(--brand-50); transform: translateY(-1px); }
.wk-tab.active {
  border-color: var(--brand);
  background: linear-gradient(135deg, rgba(24,95,165,.08), rgba(54,144,206,.06));
  box-shadow: 0 0 0 2px rgba(24,95,165,.12), var(--sh-sm);
}
.wk-tab.active::after {
  content: ''; position: absolute; left: 12px; right: 12px; bottom: -1px;
  height: 3px; background: var(--brand-500);
  border-radius: 2px 2px 0 0;
}
.wk-tab-num { font-size: 11px; color: var(--muted); font-weight: 600; letter-spacing: .5px; }
.wk-tab-label { font-weight: 600; color: var(--text); font-size: 13px; }
.wk-tab-meta { display: flex; gap: 4px; flex-wrap: wrap; }
.wk-tab-date { font-size: 11px; color: var(--muted); }
.wk-nav-btn {
  flex: 0 0 auto; width: 32px; height: 32px; padding: 0;
  display: flex; align-items: center; justify-content: center;
  background: #fff; border: 1px solid var(--border); border-radius: var(--r-sm);
  cursor: pointer; color: var(--text-2); font-size: 14px;
}
.wk-nav-btn:hover:not(:disabled) { background: var(--brand-50); border-color: var(--brand); color: var(--brand); }
.wk-nav-btn:disabled { opacity: .35; cursor: not-allowed; }
.wk-foot {
  display: flex; gap: 10px; justify-content: space-between; align-items: center;
  margin-top: 14px; padding-top: 14px; border-top: 1px dashed var(--border);
}
.wk-empty-card {
  background: var(--bg-soft); border: 2px dashed var(--border);
  border-radius: var(--r); padding: 50px 20px; text-align: center; color: var(--muted);
}
.wk-count-pill {
  display: inline-flex; align-items: center; gap: 4px;
  padding: 2px 8px; border-radius: var(--r-full);
  background: var(--brand-50); color: var(--brand-700); font-size: 11px; font-weight: 600;
}

/* ===================== 周详情卡片（横向布局） ===================== */
.wk-detail-card { padding: 18px; }
.wk-detail-head {
  display: flex; justify-content: space-between; align-items: center;
  flex-wrap: wrap; gap: 10px; padding-bottom: 14px;
  border-bottom: 1px solid var(--border); margin-bottom: 4px;
}
.wk-detail-title {
  display: flex; align-items: center; gap: 10px; flex-wrap: wrap;
}
.wk-detail-actions {
  display: flex; align-items: center; gap: 10px; margin-left: auto;
}
.form-row-4 {
  display: grid; grid-template-columns: repeat(4, 1fr); gap: 14px; margin-top: 14px;
}
.form-row-2 {
  display: grid; grid-template-columns: repeat(2, 1fr); gap: 14px; margin-top: 14px;
}
.form-row-4 > div label,
.form-row-2 > div label { display: block; margin: 0 0 7px; font-size: 13px; color: var(--text-2); font-weight: 600; }
/* ===================== 横向工作流看板 ===================== */
.wk-board {
  display: flex; gap: 16px;
  align-items: stretch;      /* 六张卡统一拉伸到最高那一张，内容高度对齐 */
  overflow-x: auto; overflow-y: hidden;
  padding: 8px 4px 16px;
  scroll-behavior: smooth;
  scrollbar-width: thin;
  scrollbar-color: var(--brand-300) transparent;
}
.wk-board::-webkit-scrollbar { height: 8px; }
.wk-board::-webkit-scrollbar-track { background: transparent; }
.wk-board::-webkit-scrollbar-thumb { background: var(--brand-300); border-radius: 999px; }
.wk-board-card {
  flex: 0 0 340px; width: 340px;
  min-height: 0;
  display: flex; flex-direction: column;
  background: #fff;
  border: 1px solid var(--border);
  border-radius: var(--r);
  box-shadow: 0 2px 6px rgba(16,24,40,.06);
  padding: 16px;
  position: relative; overflow: hidden;
  transition: flex-basis .15s, width .15s, transform .15s, box-shadow .15s, border-color .15s;
}
.wk-board-card:hover {
  box-shadow: 0 6px 16px rgba(16,24,40,.08);
  border-color: var(--brand-300);
}
.wk-board-card.collapsed {
  display: none;
}
.wk-board-card.collapsed .wk-board-header { padding-left: 0; flex-direction: column; gap: 6px; }
.wk-board-card.collapsed .wk-board-num { width: 22px; height: 22px; font-size: 11px; }
.wk-board-card.collapsed .wk-board-title {
  writing-mode: vertical-rl; text-orientation: mixed;
  font-size: 12px; letter-spacing: 1px; flex: 0;
  transform: rotate(180deg); margin: 4px 0;
}
.wk-board-card.collapsed textarea,
.wk-board-card.collapsed .wk-card-resizer,
.wk-board-card.collapsed .hide-btn { display: none; }
.wk-board-card.collapsed::before { width: 4px; }
.wk-board-card::before {
  content: ''; position: absolute; left: 0; top: 0; bottom: 0; width: 5px;
}
.wk-board-step-1::before { background: #3b82f6; }
.wk-board-step-2::before { background: #0ea5e9; }
.wk-board-step-3::before { background: #ef4444; }
.wk-board-step-4::before { background: #f59e0b; }
.wk-board-step-5::before { background: #10b981; }
.wk-board-step-6::before { background: #6366f1; }
.wk-board-header {
  display: flex; align-items: center; gap: 10px;
  margin-bottom: 12px; padding-left: 6px;
}
.wk-board-num {
  display: inline-flex; align-items: center; justify-content: center;
  width: 26px; height: 26px; border-radius: 50%;
  background: var(--brand-100); color: var(--brand-700);
  font-size: 13px; font-weight: 700; flex-shrink: 0;
}
.wk-board-step-1 .wk-board-num { background: #dbeafe; color: #1d4ed8; }
.wk-board-step-2 .wk-board-num { background: #e0f2fe; color: #0369a1; }
.wk-board-step-3 .wk-board-num { background: #fee2e2; color: #b91c1c; }
.wk-board-step-4 .wk-board-num { background: #fef3c7; color: #b45309; }
.wk-board-step-5 .wk-board-num { background: #d1fae5; color: #047857; }
.wk-board-step-6 .wk-board-num { background: #e0e7ff; color: #4338ca; }
.wk-board-title {
  flex: 1; font-size: 15px; font-weight: 700; color: var(--text);
}
.hide-btn {
  margin-left: auto; font-size: 11px; line-height: 1; padding: 3px 9px;
  border: 1px solid #e2e8f0; border-radius: 999px;
  background: #f8fafc; color: #64748b; cursor: pointer;
  font-weight: 600; white-space: nowrap;
  transition: all .15s;
}
.hide-btn:hover { background: #fee2e2; color: #dc2626; border-color: #fecaca; }
.wk-board-tools {
  display: inline-flex; align-items: center; gap: 8px;
  margin-left: auto;
}
.wk-hidden-pill {
  display: inline-flex; align-items: center; gap: 4px;
  padding: 3px 10px; border-radius: 999px;
  background: #f1f5f9; color: #475569; font-size: 12px; font-weight: 600;
}
.wk-hidden-pill b { color: var(--brand-600); }
.wk-tool-btn {
  display: inline-flex; align-items: center; gap: 4px;
  font-size: 12px; font-weight: 600; padding: 4px 10px;
  border: 1px solid var(--brand-200); border-radius: var(--r-sm);
  background: var(--brand-50); color: var(--brand-700); cursor: pointer;
}
.wk-tool-btn:hover { background: var(--brand-100); }
.wk-card-resizer {
  position: absolute; right: 0; top: 0; bottom: 0; width: 8px;
  cursor: col-resize; z-index: 2; background: transparent;
  transition: background .15s;
}
.wk-card-resizer:hover { background: rgba(31, 111, 178, 0.18); }
.wk-card-resizer::after {
  content: ''; position: absolute; right: 3px; top: 50%; transform: translateY(-50%);
  width: 2px; height: 24px; border-radius: 2px; background: #cbd5e1;
}
.wk-board-card.collapsed .wk-card-resizer::after { display: none; }
.wk-status-bar {
  display: flex; align-items: center; gap: 12px; margin-top: 16px;
  padding: 12px 14px; background: var(--bg-soft); border-radius: var(--r);
  border: 1px solid var(--border);
}
.wk-review-section { margin-top: 18px; }
.wk-review-section .section-title {
  font-size: 14px; font-weight: 700; color: var(--text); margin-bottom: 12px;
}
.review-grid { display: grid; grid-template-columns: repeat(2, 1fr); gap: 14px; }
@media (max-width: 980px) {
  .form-row-4 { grid-template-columns: repeat(2, 1fr); }
}
@media (max-width: 640px) {
  .form-row-4, .form-row-2, .review-grid { grid-template-columns: 1fr; }
  .wk-detail-head { flex-direction: column; align-items: flex-start; }
  .wk-detail-actions { margin-left: 0; }
}

/* ===== 新版周详情：更舒展的复盘页 ===== */
.wk-detail-card { padding: 22px; }
.wk-detail-hero {
  display: flex; justify-content: space-between; align-items: flex-start; gap: 16px;
  flex-wrap: wrap;
  padding: 16px 18px; margin: -6px -6px 18px;
  background: var(--bg-soft); border: 1px solid var(--border); border-radius: var(--r);
}
.wk-hero-main { flex: 1; min-width: 280px; }
.wk-hero-title { display: flex; align-items: center; gap: 12px; flex-wrap: wrap; margin-bottom: 14px; }
.wk-hero-label { font-size: 18px; font-weight: 700; color: var(--text); }
.wk-hero-range { font-size: 13px; color: var(--muted); font-weight: 500; }
.wk-hero-kpis { display: flex; gap: 24px; flex-wrap: wrap; }
.wk-hero-kpi { display: flex; flex-direction: column; gap: 6px; min-width: 90px; }
.wk-hero-kpi-label { font-size: 12px; color: var(--text-2); font-weight: 600; }
.wk-hero-kpi-value .tag { font-size: 18px; padding: 5px 10px; border-radius: var(--r-sm); }
.wk-hero-actions { display: flex; align-items: center; gap: 10px; flex-wrap: wrap; margin-left: auto; }
.wk-section { margin-top: 22px; }
.wk-section-title {
  display: flex; align-items: center; gap: 10px;
  font-size: 13px; font-weight: 700; color: var(--text-2); text-transform: uppercase;
  letter-spacing: .04em; margin-bottom: 12px;
}
.wk-field { display: flex; flex-direction: column; }
.wk-field label { font-weight: 600; font-size: 13px; color: var(--text-2); margin-bottom: 7px; }
.form-row-3 { display: grid; grid-template-columns: repeat(3, 1fr); gap: 14px; margin-top: 14px; }
.wk-biz-row .wk-field input { text-align: right; font-weight: 600; }

@media (max-width: 980px) {
  .form-row-3 { grid-template-columns: repeat(3, 1fr); }
  .wk-detail-hero { flex-direction: column; }
  .wk-hero-actions { margin-left: 0; }
  .wk-board-card { width: 320px; flex: 0 0 320px; }
  .wk-board-card textarea { min-height: 360px; }
}
@media (max-width: 640px) {
  .form-row-3 { grid-template-columns: 1fr; }
  .wk-detail-hero { flex-direction: column; gap: 12px; }
  .wk-hero-kpis { gap: 16px; }
  .wk-board-card { width: 300px; flex: 0 0 300px; padding: 14px; }
  .wk-board-card textarea { min-height: 280px; }
}

/* ===================== 日量化任务清单（金蝶表格风） ===================== */
.days-toolbar {
  display: flex; align-items: center; justify-content: space-between;
  padding: 6px 2px 8px; margin-top: 4px;
}
.days-toolbar .muted { font-size: 12px; }
.days-toolbar .act { padding: 6px 14px; }
.days-toolbar .act i { font-style: normal; font-weight: 700; margin-right: 4px; }

.days-tbl-wrap {
  border: 1px solid var(--border);
  border-radius: var(--r-sm);
  background: #fff;
  box-shadow: 0 1px 2px rgba(16,24,40,.04);
  overflow: auto;
}
table.days-tbl { min-width: 100%; border-collapse: separate; border-spacing: 0; table-layout: fixed; }
table.days-tbl thead th {
  background: linear-gradient(180deg, #eef5ff 0%, #dfeaff 100%);
  color: #1f4e79;
  font-weight: 600;
  font-size: 13px;
  text-align: center;
  padding: 9px 22px 9px 10px;
  border-bottom: 1px solid #9dc3f0;
  border-right: 1px solid #cfe0f5;
  white-space: nowrap;
  position: sticky; top: 0; z-index: 1;
  position: relative;
  user-select: none;
}
table.days-tbl thead th:last-child { border-right: none; }
/* 列宽拖拽把手 */
table.days-tbl thead th .col-resizer {
  position: absolute; right: 0; top: 0; bottom: 0; width: 6px;
  cursor: col-resize; z-index: 2;
  transition: background .15s;
}
table.days-tbl thead th .col-resizer:hover,
table.days-tbl thead th .col-resizer.resizing {
  background: rgba(64,158,255,.55);
}
table.days-tbl thead th.no-resize { padding-right: 10px; }
table.days-tbl thead th.no-resize .col-resizer { display: none; }
table.days-tbl thead th .req { color: #f56c6c; margin-right: 2px; font-weight: 700; }
table.days-tbl thead th .th-ico {
  display: inline-block; margin-left: 4px;
  width: 14px; height: 14px; line-height: 12px; text-align: center;
  border: 1px solid #67c23a; border-radius: 3px;
  font-size: 0; vertical-align: middle; background: #fff;
  position: relative;
}
table.days-tbl thead th .th-ico::after {
  content: ''; position: absolute;
  left: 3px; top: 1px; width: 5px; height: 8px;
  border-right: 1.5px solid #67c23a; border-bottom: 1.5px solid #67c23a;
  transform: rotate(45deg);
}
table.days-tbl tbody td {
  padding: 6px 8px;
  border-bottom: 1px solid #eaedf2;
  border-right: 1px solid #f2f4f7;
  vertical-align: middle;
  background: #fff;
  font-size: 13px;
}
table.days-tbl tbody td:last-child { border-right: none; }
table.days-tbl tbody tr:nth-child(even) td { background: #fbfcfd; }
table.days-tbl tbody td.td-target { vertical-align: middle; background: #f6f8fc; }
table.days-tbl tbody tr:nth-child(even) td.td-target { background: #f1f4fa; }
table.days-tbl tbody td.cell-auto { background: #eef9f1; }
table.days-tbl tbody tr:nth-child(even) td.cell-auto { background: #ebf7ef; }
table.days-tbl tbody tr:hover td { background: var(--brand-50); }
table.days-tbl tbody tr.row-done td { background: #f6fbf2; }
table.days-tbl tbody tr.row-done:hover td { background: #eaf6e2; }
table.days-tbl tbody tr.row-undone td { background: #fff8f8; }
table.days-tbl tbody tr.row-undone:hover td { background: #fdeeee; }
table.days-tbl tbody tr:last-child td { border-bottom: 1px solid #eaedf2; }

/* 合并的「时间（日）」列 */
table.days-tbl tbody td.cell-date {
  text-align: center; vertical-align: middle;
  background: linear-gradient(180deg, #f7faff 0%, #eef3fb 100%);
  border-right: 1px solid #dfe6f0;
}
table.days-tbl tbody td.cell-date .date-main {
  font-size: 13px; font-weight: 700; color: #1f4e79; letter-spacing: .2px;
}
table.days-tbl tbody td.cell-date .date-sub {
  font-size: 11px; color: #7b8794; margin-top: 2px;
}
/* 彩色标签下拉（紧急程度 / 完成情况） */
table.days-tbl .cell-sel.tag-sel {
  font-weight: 600; text-align: center; text-align-last: center;
  border-radius: 999px; padding: 4px 18px 4px 8px; min-height: 26px;
}
table.days-tbl tbody td:has(.tag-sel) { text-align: center; }
/* 空状态行 */
table.days-tbl tbody td.empty-row {
  text-align: center; color: #a8b3c1; padding: 34px 10px; font-size: 13px;
}

table.days-tbl .cell-inp,
table.days-tbl .cell-sel {
  width: 100%;
  padding: 5px 7px;
  border: 1px solid transparent;
  border-radius: 4px;
  background: transparent;
  font-size: 13px;
  font-family: inherit;
  color: #303133;
  resize: vertical;
  outline: none;
  transition: border-color .14s, background .14s, box-shadow .14s;
  box-sizing: border-box;
  min-height: 30px;
  max-height: 120px;
  line-height: 1.45;
}
table.days-tbl textarea.cell-inp { min-height: 34px; max-height: 110px; line-height: 1.5; }
table.days-tbl .cell-inp:hover,
table.days-tbl .cell-sel:hover { border-color: #c0c4cc; background: #fff; }
table.days-tbl .cell-inp:focus,
table.days-tbl .cell-sel:focus { border-color: #409eff; background: #fff; box-shadow: 0 0 0 2px rgba(64,158,255,.15); }
table.days-tbl .cell-inp::placeholder { color: #c0c4cc; font-size: 12px; }
table.days-tbl .cell-sel { appearance: none; -webkit-appearance: none; padding-right: 18px;
  background-image: url("data:image/svg+xml;utf8,<svg xmlns='http://www.w3.org/2000/svg' width='10' height='6' viewBox='0 0 10 6'><path fill='%2390a4ae' d='M5 6L0 0h10z'/></svg>");
  background-repeat: no-repeat; background-position: right 6px center;
}
table.days-tbl .cell-num { text-align: center; font-variant-numeric: tabular-nums; }
table.days-tbl .cell-inp:disabled { background: transparent; color: #606266; font-weight: 600; cursor: default; }

table.days-tbl .row-del {
  width: 22px; height: 22px; border-radius: 50%;
  border: 1px solid transparent; background: transparent;
  color: #c0c4cc; font-size: 16px; line-height: 18px;
  cursor: pointer; transition: all .14s;
  padding: 0;
}
table.days-tbl .row-del:hover { background: #f56c6c; color: #fff; border-color: #f56c6c; }

table.days-tbl tfoot td {
  background: #fdf6ec;
  color: #8a6d3b;
  font-size: 13px;
  padding: 9px 10px;
  border-top: 1px solid #f3dca6;
  border-bottom: none;
  font-weight: 500;
}
table.days-tbl tfoot .ft-lbl { text-align: left; font-weight: 600; color: #8a6d3b; }
table.days-tbl tfoot .ft-num { text-align: center; font-variant-numeric: tabular-nums; font-weight: 700; color: #d9822b; }
table.days-tbl tfoot .ft-pct { text-align: center; color: #d9822b; }
table.days-tbl tfoot .ft-pct b { font-size: 15px; margin-left: 2px; }
table.days-tbl tfoot .ft-remark { color: #8a6d3b; font-size: 12px; }

.days-tbl .time-range { gap: 1px; flex-wrap: nowrap; }
.days-tbl .time-range select { width: 40px; padding: 3px 2px; font-size: 12px; min-width: 0; }
.days-tbl .time-range i { font-size: 11px; padding: 0; }

/* ===== 当日复盘（问题 & 优化方案）—— 折叠区，保持主表清爽 ===== */
.day-review {
  margin-top: 14px;
  border: 1px solid var(--border);
  border-radius: var(--r-sm);
  background: #fff;
  overflow: hidden;
}
.day-review > summary {
  cursor: pointer; user-select: none;
  padding: 10px 14px;
  font-size: 13px; font-weight: 600; color: var(--text-2);
  background: var(--surface-2, #f7f9fc);
  display: flex; align-items: center; gap: 8px;
  list-style: none;
}
.day-review > summary::-webkit-details-marker { display: none; }
.day-review > summary::before {
  content: '▸'; color: #9aa7b6; font-size: 12px;
  transition: transform .18s; display: inline-block;
}
.day-review[open] > summary::before { transform: rotate(90deg); }
.day-review > summary:hover { background: #eef4ff; color: var(--brand-700, #1f6fd0); }
.day-review .rv-count {
  margin-left: auto; padding: 1px 9px; border-radius: 999px;
  background: #eef4ff; color: #2f6bff; font-size: 11px; font-weight: 600;
}
.day-review-body { padding: 4px 14px 14px; }
.day-review .rv-item {
  padding: 12px 0; border-bottom: 1px dashed #e8ecf2;
}
.day-review .rv-item:last-child { border-bottom: none; }
.day-review .rv-head {
  font-size: 13px; color: var(--text, #2a3543); margin-bottom: 8px;
  display: flex; align-items: baseline; gap: 6px; flex-wrap: wrap;
}
.day-review .rv-head b { color: var(--brand-600, #2f6bff); }
.day-review .rv-time {
  font-size: 11px; color: #98a3b1; background: #f5f7fa;
  padding: 1px 7px; border-radius: 4px; font-variant-numeric: tabular-nums;
}
.day-review .rv-grid { display: grid; grid-template-columns: 1fr 1fr; gap: 12px; }
.day-review .rv-field label {
  display: block; font-size: 12px; color: var(--text-3, #7b8794);
  margin-bottom: 4px; font-weight: 600;
}
.day-review .rv-field textarea {
  width: 100%; box-sizing: border-box; padding: 7px 9px;
  border: 1px solid var(--border); border-radius: 6px;
  font-size: 13px; font-family: inherit; line-height: 1.5;
  resize: vertical; background: #fff; outline: none;
  transition: border-color .14s, box-shadow .14s;
}
.day-review .rv-field textarea:focus {
  border-color: #409eff; box-shadow: 0 0 0 2px rgba(64,158,255,.15);
}
table.days-tbl tfoot tr.ft-sub td { border-top: none; padding-top: 0; }

/* ===== 日量化：图标 / 工具栏 / 原生时间框 / 弹窗 ===== */
.bi { width: 15px; height: 15px; stroke: currentColor; fill: none; stroke-width: 2; stroke-linecap: round; stroke-linejoin: round; flex: 0 0 auto; }
.kpi-ico { width: 30px; height: 30px; border-radius: 8px; display: grid; place-items: center; margin: 0 auto 8px; }
.kpi-ico .bi { width: 17px; height: 17px; }
.days-toolbar .acts { display: flex; gap: 8px; flex-wrap: wrap; }
.days-toolbar .act { display: inline-flex; align-items: center; gap: 5px; }
.days-tbl .time-range input.cell-time {
  width: 84px; padding: 3px 5px; font-size: 12px; min-width: 0;
  border: 1px solid var(--border); border-radius: 6px; background: #fff;
  font-variant-numeric: tabular-nums; font-family: inherit; color: var(--text);
}
.days-tbl .time-range input.cell-time:hover { border-color: #c0c4cc; }
.days-tbl .time-range input.cell-time:focus { border-color: #409eff; box-shadow: 0 0 0 2px rgba(64,158,255,.15); outline: none; }

.dm-overlay { position: fixed; inset: 0; background: rgba(0,0,0,.35); display: none; align-items: center; justify-content: center; z-index: 1000; }
.dm-overlay.show { display: flex; }
.dm-modal { background: #fff; border-radius: 12px; width: 560px; max-width: 92vw; box-shadow: 0 20px 60px rgba(0,0,0,.25); overflow: hidden; }
.dm-head { display: flex; align-items: center; justify-content: space-between; padding: 16px 18px; border-bottom: 1px solid var(--border); }
.dm-head h3 { margin: 0; font-size: 15px; font-weight: 700; }
.dm-close { border: none; background: transparent; font-size: 20px; color: var(--text-secondary, #6b7280); cursor: pointer; line-height: 1; }
.dm-body { padding: 18px; }
.dm-foot { display: flex; gap: 10px; justify-content: flex-end; padding: 0 18px 18px; }
.template-text { background: #f9fafb; border: 1px solid var(--border); border-radius: 8px; padding: 14px; font-size: 13px; line-height: 1.7; white-space: pre-wrap; min-height: 140px; max-height: 260px; overflow: auto; }
.share-link { display: flex; gap: 8px; margin-top: 6px; }
.share-link input { font-size: 12px; background: #f9fafb; }
.wxapp-row { margin-top: 14px; padding-top: 12px; border-top: 1px dashed var(--border); }
.wxapp-grid { display: grid; grid-template-columns: 1fr 1fr; gap: 8px; margin: 6px 0 10px; }
.wxapp-grid input { font-size: 12px; background: #f9fafb; padding: 7px 10px; border: 1px solid var(--border); border-radius: var(--r-sm); outline: none; box-sizing: border-box; width: 100%; }
.wxapp-tip { font-size: 12px; color: var(--text-secondary, #6b7280); line-height: 1.6; margin: 8px 0 0; }
.wxapp-tip b { color: var(--text, #111); }
.hint { font-size: 12px; color: var(--text-secondary, #6b7280); margin: 12px 0 0; line-height: 1.6; }
.hint strong { color: var(--text, #111); }
.lbl { font-size: 12px; color: var(--text-secondary, #6b7280); display: block; margin-bottom: 6px; }
.day-apply-row { display: flex; align-items: center; gap: 10px; margin-top: 14px; padding-top: 14px; border-top: 1px dashed var(--border); }
.day-apply-row label { font-size: 13px; color: var(--text-secondary, #6b7280); white-space: nowrap; }
.day-apply-row input[type="date"] { width: 150px; padding: 7px 10px; border: 1px solid var(--border); border-radius: var(--r-sm); font-size: 13px; }
.paste-area { width: 100%; min-height: 220px; border: 1px solid var(--border); border-radius: var(--r-sm); padding: 12px; font-size: 13px; line-height: 1.7; resize: vertical; box-sizing: border-box; outline: none; }
@media (max-width: 760px) {
  .day-apply-row { flex-wrap: wrap; }
  .day-apply-row input[type="date"] { width: 130px; }
  .day-review .rv-grid { grid-template-columns: 1fr; }
}

/* ===== 商务工作台 · 排班表 ===== */
.sc-loading{color:#6b7686;padding:24px 4px;font-size:14px}
.sc-wrap{max-width:100%}
.sc-toolbar{display:flex;flex-wrap:wrap;gap:14px;align-items:center;justify-content:space-between;margin-bottom:12px}
.sc-ym{display:flex;align-items:center;gap:8px;font-size:14px;color:#2a3543}
.sc-ym select{height:38px;border:1px solid #d7dde6;border-radius:9px;padding:0 10px;font-size:14px;background:#fff;outline:none}
.sc-ym select:focus{border-color:#2f6bff;box-shadow:0 0 0 3px rgba(47,107,255,.12)}
.sc-actions{display:flex;gap:10px}
.sc-save{height:38px;padding:0 22px;border:none;border-radius:9px;background:#2f6bff;color:#fff;font-size:14px;font-weight:600;cursor:pointer}
.sc-save:disabled{opacity:.6;cursor:default}
.sc-add-dept{height:38px;padding:0 16px;border:1px solid #d7dde6;border-radius:9px;background:#fff;color:#2a3543;font-size:14px;cursor:pointer}
.sc-add-dept:hover{border-color:#2f6bff;color:#2f6bff}
.sc-legend{display:flex;align-items:center;flex-wrap:wrap;gap:10px;margin-bottom:12px;font-size:13px;color:#5a6675;background:#f8fafc;border:1px solid #e7ebf1;border-radius:10px;padding:10px 14px}
.sc-legend-title{font-weight:700;color:#2a3543;margin-right:4px}
.sc-lg{display:inline-flex;align-items:center;justify-content:center;min-width:32px;height:26px;padding:0 9px;border-radius:7px;font-size:12px;font-weight:600;border:1px solid #e3e8ef;box-shadow:0 1px 2px rgba(15,23,42,.04)}
.sc-hint{color:#9aa4b2;margin-left:auto;font-size:12px}
.sc-legend-btn{height:38px;padding:0 16px;border:1px solid #d7dde6;border-radius:9px;background:#fff;color:#2a3543;font-size:14px;cursor:pointer}
.sc-legend-btn:hover{border-color:#2f6bff;color:#2f6bff}
.sc-table-scroll{overflow-x:auto;border:1px solid #e7ebf1;border-radius:12px;background:#fff}
.sc-table{border-collapse:collapse;font-size:12.5px;min-width:100%}
.sc-table th,.sc-table td{border:1px solid #eef1f6;padding:0;text-align:center;height:34px;min-width:30px}
.sc-table thead th{background:#f5f7fb;color:#5a6675;font-weight:600;position:sticky;top:0;z-index:2}
.sc-table th small{display:block;font-size:10px;color:#9aa4b2;font-weight:400;line-height:1}
.sc-name{position:sticky;left:0;background:#f5f7fb;z-index:1;text-align:left!important;padding:0 10px!important;white-space:nowrap;min-width:120px!important;font-weight:600;color:#2a3543}
.sc-day.wk{background:#fbf3f2;color:#c0504d}
.sc-cell{padding:0;background:transparent}
.sc-cell.wk{background:#fdf5f4}
.sc-sel{width:100%;height:34px;border:0;outline:0;background:transparent;font:600 12.5px/1 inherit;color:inherit;cursor:pointer;padding:0 6px;text-align:center;text-align-last:center;appearance:none;-webkit-appearance:none;-moz-appearance:none}
.sc-sel::-ms-expand{display:none}
.sc-sel:focus{box-shadow:inset 0 0 0 2px rgba(47,107,255,.55);position:relative;z-index:3}
.sc-sel.st-empty{color:#9aa4b2}
.sc-sel.st-work{background:#e8f7ee;color:#1f9d55}
.sc-sel.st-rest{background:#fff8e1;color:#b8860b}
.sc-sel.st-leave{background:#fdeceb;color:#e0533d}
.sc-sel.st-makeup{background:#fdeaf6;color:#d63384}
.sc-sel.st-out{background:#eaf1ff;color:#2f6bff}
.sc-sel.st-team{background:#f3e8ff;color:#8a4bd6}
.sc-lg.st-work{background:#e8f7ee;color:#1f9d55;border-color:#bfe6cd}
.sc-lg.st-rest{background:#fff8e1;color:#b8860b;border-color:#f0e0a8}
.sc-lg.st-leave{background:#fdeceb;color:#e0533d;border-color:#f5c2ba}
.sc-lg.st-makeup{background:#fdeaf6;color:#d63384;border-color:#f3c2dd}
.sc-lg.st-out{background:#eaf1ff;color:#2f6bff;border-color:#bcd2fb}
.sc-lg.st-team{background:#f3e8ff;color:#8a4bd6;border-color:#dcc7f3}
.sc-sel.st-raw{background:#f0f0f0;color:#555;font-size:10px}
.sc-dept td{background:#eef2f8!important;text-align:left!important;padding:6px 10px!important;font-weight:700;color:#2a3543}
.sc-leave{background:#f5f7fb;font-weight:700;color:#e0533d;min-width:54px!important}
.sc-remark{background:#f5f7fb;color:#5a6675;font-weight:600;min-width:170px!important;position:sticky;right:0;z-index:1}
.sc-remark-input{width:100%;box-sizing:border-box;border:0;outline:0;background:transparent;font:500 12.5px/1.4 inherit;color:#2a3543;padding:6px 8px}
.sc-remark-input:focus{box-shadow:inset 0 0 0 2px rgba(47,107,255,.45);border-radius:4px}
.sc-pname{cursor:pointer;border-bottom:1px dashed #b9c2d0}
.sc-pname:hover{color:#2f6bff}
.sc-mini{margin-left:6px;border:1px solid #e3e8ef;background:#fff;border-radius:6px;font-size:11px;line-height:1;padding:3px 7px;cursor:pointer;color:#6b7686}
.sc-mini:hover{border-color:#e0533d;color:#e0533d}
.sc-add{border:1px dashed #c9d3e0;background:#fbfdff;color:#2f6bff;width:100%;padding:8px;cursor:pointer;font-size:13px;border-radius:8px;margin:4px}
.sc-add:hover{background:#eef4ff}
/* ===== 细粒度权限配置面板 ===== */
.perm-admin-note{ display:none; margin-top:14px; padding:9px 12px; background:var(--brand-50); border:1px solid var(--brand-200); border-radius:var(--r-sm); color:var(--brand-700); font-size:12.5px; }
.perm-section{ background:var(--surface); border:1px solid var(--border-2); border-radius:var(--r); padding:14px 16px; margin-top:14px; }
.perm-h{ font-size:13.5px; font-weight:600; color:var(--text); margin-bottom:10px; display:flex; align-items:baseline; gap:8px; flex-wrap:wrap; }
.perm-tip{ font-weight:400; font-size:12px; color:var(--text-3); }
.perm-groups{ display:grid; grid-template-columns:repeat(auto-fill,minmax(190px,1fr)); gap:12px; }
.perm-g{ background:var(--surface-2); border:1px solid var(--border-2); border-radius:var(--r-sm); padding:10px 12px; }
.perm-gt{ font-size:12.5px; font-weight:600; color:var(--primary); margin-bottom:8px; padding-left:8px; border-left:3px solid var(--brand-300); }
.perm-gc{ display:flex; flex-wrap:wrap; gap:6px 12px; }
.perm-chk{ display:inline-flex; align-items:center; gap:5px; font-size:12.5px; color:var(--text-2); cursor:pointer; user-select:none; }
.perm-chk input{ width:14px; height:14px; accent-color:var(--primary); cursor:pointer; }
.perm-chk input:disabled{ cursor:not-allowed; }
.perm-scope{ display:flex; flex-wrap:wrap; gap:16px; }
.perm-scope label{ display:inline-flex; align-items:center; gap:6px; margin:0; font-size:13px; color:var(--text-2); font-weight:500; cursor:pointer; }
.perm-scope input{ width:15px; height:15px; accent-color:var(--primary); cursor:pointer; }

/* ===== 月度目标 · 图表卡片 ===== */
.monthly-charts{ display:grid; grid-template-columns:1.45fr 1fr; gap:16px; margin-top:18px; }
.chart-card{ background:linear-gradient(180deg,#fff 0%,#f8fafc 100%); border:1px solid var(--border); border-radius:var(--r-lg); padding:16px; box-shadow:0 1px 2px rgba(15,23,42,.04); display:flex; flex-direction:column; min-height:320px; }
.chart-card.wide{ min-height:340px; }
.chart-head{ display:flex; align-items:center; justify-content:space-between; margin-bottom:12px; gap:10px; }
.chart-head h3{ font-size:15px; font-weight:600; color:var(--text); margin:0; }
.chart-sub{ font-size:12px; color:var(--text-3); white-space:nowrap; }
.chart-wrap{ flex:1; position:relative; min-height:220px; }
.donut-wrap{ display:flex; align-items:center; justify-content:center; }
#monthDonutCv{ max-height:220px; }
.donut-center{ position:absolute; left:50%; top:50%; transform:translate(-50%,-50%); text-align:center; pointer-events:none; }
.donut-total{ font-size:22px; font-weight:700; color:var(--text); line-height:1.2; }
.donut-label{ font-size:12px; color:var(--text-3); margin-top:2px; }
.donut-legend{ margin-top:14px; display:flex; flex-direction:column; gap:10px; }
.legend-row{ display:grid; grid-template-columns:14px 1fr auto auto; gap:8px; align-items:center; font-size:13px; color:var(--text-2); }
.legend-dot{ width:10px; height:10px; border-radius:999px; }
.legend-name{ font-weight:500; color:var(--text); }
.legend-value{ font-weight:600; color:var(--text); text-align:right; }
.legend-pct{ width:44px; text-align:right; color:var(--text-3); font-size:12px; }
.legend-bar{ grid-column:2 / -1; height:5px; background:var(--border-2); border-radius:999px; overflow:hidden; }
.legend-bar i{ display:block; height:100%; border-radius:999px; }
.chart-empty{ position:absolute; inset:0; display:flex; align-items:center; justify-content:center; color:var(--text-3); font-size:14px; text-align:center; padding:20px; }
@media (max-width:900px){
  .monthly-charts{ grid-template-columns:1fr; }
  .chart-card,.chart-card.wide{ min-height:300px; }
  .chart-wrap{ min-height:200px; }
}

/* ===================== 周复盘快照（全屏预览） ===================== */
.snap-overlay {
  position: fixed; inset: 0; z-index: 9999;
  overflow: auto; background: #eef2f7;
}
.snapshot-page {
  min-height: 100vh; display: flex; flex-direction: column; background: #fff;
}
.snap-header {
  background: linear-gradient(135deg, #1f6fb2 0%, #3b82f6 100%);
  color: #fff; padding: 22px 32px;
  display: flex; justify-content: space-between; align-items: center; gap: 16px;
  flex-shrink: 0;
}
.snap-header h1 { font-size: 22px; font-weight: 700; }
.snap-header .snap-sub { font-size: 14px; opacity: .9; margin-top: 4px; }
.snap-brand {
  display: flex; align-items: center; gap: 10px;
  background: rgba(255,255,255,.12); padding: 8px 16px; border-radius: 999px;
  font-size: 13px; font-weight: 600;
}
.snap-brand::before { content: ''; width: 8px; height: 8px; border-radius: 50%; background: #fff; }
.snap-body {
  flex: 1; padding: 24px 32px 32px; display: flex; flex-direction: column; gap: 20px; width: 100%;
}
.snap-meta-bar { display: flex; gap: 28px; flex-wrap: wrap; font-size: 14px; color: #5b6776; }
.snap-meta-bar b { color: #1f2a37; margin-left: 6px; }
.snap-metrics { display: flex; gap: 16px; flex-wrap: wrap; }
.snap-kpi {
  flex: 1 1 0; min-width: 140px; background: #f8fafc; border: 1px solid #e7ecf2;
  border-radius: 12px; padding: 18px; text-align: center;
}
.snap-kpi-label { font-size: 13px; color: #5b6776; margin-bottom: 8px; font-weight: 600; }
.snap-kpi-value { font-size: 26px; font-weight: 700; color: #1f2a37; }
.snap-kpi-value.done { color: #16a34a; }
.snap-kpi-value.warn { color: #d97706; }
.snap-biz-item {
  flex: 1 1 0; min-width: 140px; background: #fff; border: 1px solid #e7ecf2;
  border-radius: 12px; padding: 16px;
}
.snap-biz-title { font-size: 12px; color: #8a96a3; margin-bottom: 6px; font-weight: 600; }
.snap-biz-value { font-size: 18px; font-weight: 700; color: #1f2a37; text-align: right; }
.snap-board {
  flex: 0 0 auto; display: flex; gap: 16px; flex-wrap: nowrap; align-items: flex-start; min-height: 0;
  overflow-x: auto; overflow-y: hidden; padding-bottom: 8px;
}
.snap-board::-webkit-scrollbar { height: 8px; }
.snap-board::-webkit-scrollbar-thumb { background: #c9d4e2; border-radius: 4px; }
.snap-board::-webkit-scrollbar-track { background: transparent; }
.snap-block {
  position: relative;
  flex: 1 1 0; min-width: 240px; width: auto; border: 1px solid #e7ecf2; border-radius: 14px;
  background: #fff; overflow: hidden; display: flex; flex-direction: column;
  box-shadow: 0 2px 8px rgba(16,24,40,.04);
  height: var(--snap-h, 430px);
}
.snap-block.step-1, .snap-block.step-2 { flex: 1.5 1 0; min-width: 300px; width: auto; }
.snap-block-head {
  display: flex; align-items: center; gap: 10px; padding: 14px 16px;
  border-bottom: 1px solid #f1f5f9; font-size: 15px; font-weight: 700; background: #fafbfc;
}
.snap-num {
  display: inline-flex; align-items: center; justify-content: center;
  width: 26px; height: 26px; border-radius: 50%; font-size: 13px; color: #fff; font-weight: 700; flex-shrink: 0;
}
.snap-block.step-1 .snap-num { background: #3b82f6; }
.snap-block.step-2 .snap-num { background: #0ea5e9; }
.snap-block.step-3 .snap-num { background: #ef4444; }
.snap-block.step-4 .snap-num { background: #f59e0b; }
.snap-block.step-5 .snap-num { background: #10b981; }
.snap-block.step-6 .snap-num { background: #6366f1; }
.snap-block.step-1 { border-top: 4px solid #3b82f6; }
.snap-block.step-2 { border-top: 4px solid #0ea5e9; }
.snap-block.step-3 { border-top: 4px solid #ef4444; }
.snap-block.step-4 { border-top: 4px solid #f59e0b; }
.snap-block.step-5 { border-top: 4px solid #10b981; }
.snap-block.step-6 { border-top: 4px solid #6366f1; }
.snap-block-body {
  flex: 1; min-height: 0; padding: 16px; font-size: 14px; color: #1f2a37;
  white-space: pre-wrap; overflow-wrap: break-word; overflow-y: auto; line-height: 1.75;
}
.snap-block.empty { display: none; }
.snap-next-section {
  margin-top: 8px;
  padding-top: 24px;
  border-top: 1px dashed #d1d9e3;
}
.snap-next-title {
  display: flex; align-items: center; gap: 14px;
  font-size: 16px; font-weight: 700; color: #1f2a37;
  margin-bottom: 18px;
}
.snap-next-tag {
  display: inline-flex; align-items: center;
  background: linear-gradient(135deg, #6366f1 0%, #7c5cfc 100%);
  color: #fff; font-size: 13px; font-weight: 600;
  padding: 5px 14px; border-radius: 999px;
}
.snap-next-grid {
  display: flex; gap: 16px; flex-wrap: nowrap; align-items: flex-start;
  overflow-x: auto; overflow-y: hidden; padding-bottom: 8px;
}
.snap-next-grid::-webkit-scrollbar { height: 8px; }
.snap-next-grid::-webkit-scrollbar-thumb { background: #c9d4e2; border-radius: 4px; }
.snap-next-grid::-webkit-scrollbar-track { background: transparent; }
.snap-next-card {
  position: relative;
  flex: 1 1 0; min-width: 240px; width: auto; border: 1px solid #e7ecf2; border-radius: 14px;
  background: #fff; overflow: hidden; display: flex; flex-direction: column;
  box-shadow: 0 2px 8px rgba(16,24,40,.04);
  /* 下周卡片用独立高度变量：拖「本周」不会影响「下周」，两者完全隔离 */
  border-top: 4px solid #7c5cfc; height: var(--snap-h-next, 430px);
}
.snap-resizer {
  position: absolute; right: 0; top: 0; bottom: 0; width: 8px;
  cursor: col-resize; z-index: 2; background: transparent;
  transition: background .15s;
}
.snap-resizer:hover {
  background: rgba(31, 111, 178, 0.2);
}
.snap-resizer::after {
  content: ''; position: absolute; right: 3px; top: 50%; transform: translateY(-50%);
  width: 2px; height: 24px; border-radius: 2px; background: #cbd5e1;
}
/* 底边手柄：上下拖动统一压缩/放大所有卡片高度 */
.snap-resizer-b {
  position: absolute; left: 0; right: 0; bottom: 0; height: 9px;
  cursor: row-resize; z-index: 3; background: transparent;
  transition: background .15s;
}
.snap-resizer-b:hover { background: rgba(31, 111, 178, 0.16); }
.snap-resizer-b::after {
  content: ''; position: absolute; left: 50%; bottom: 3px; transform: translateX(-50%);
  width: 28px; height: 2px; border-radius: 2px; background: #cbd5e1;
}
.snap-resizer-b:hover::after { background: #1f6fb2; }
.snap-next-head {
  display: flex; align-items: center; gap: 10px; padding: 14px 16px;
  border-bottom: 1px solid #f1f5f9; font-size: 15px; font-weight: 700;
  background: #fafbfc;
}
.snap-next-head .snap-num { background: #7c5cfc; }
.snap-next-body {
  flex: 1; padding: 16px; font-size: 14px; color: #1f2a37;
  white-space: pre-wrap; overflow-wrap: break-word; overflow-y: auto;
  line-height: 1.75; min-height: 160px;
}

/* ---------- 快照富文本（L2 渲染器输出） ---------- */
.rt-line {
  display: flex; align-items: flex-start; gap: 8px;
  padding: 5px 8px; border-radius: 7px; margin: 1px 0;
  transition: background .14s;
}
.rt-line:hover { background: #f8fafc; }
.rt-line.rt-sub { margin-left: 18px; }
.rt-txt { flex: 1; min-width: 0; }
.rt-bullet {
  width: 5px; height: 5px; border-radius: 50%; background: #94a3b8;
  margin-top: 9px; flex-shrink: 0;
}
.rt-idx {
  display: inline-flex; align-items: center; justify-content: center;
  min-width: 19px; height: 19px; padding: 0 4px; border-radius: 6px;
  flex-shrink: 0; margin-top: 3px;
  background: #eaf2fe; color: #1f6fb2; font-size: 11.5px; font-weight: 700;
}
.snap-block.step-3 .rt-idx { background: #fee2e2; color: #b91c1c; }
.snap-block.step-5 .rt-idx { background: #d1fae5; color: #047857; }
.rt-label {
  display: flex; align-items: center; gap: 8px;
  margin: 12px 0 5px; padding: 0 8px;
  font-size: 12px; font-weight: 700; color: #64748b; letter-spacing: .06em;
}
.rt-label:first-child { margin-top: 2px; }
.rt-label-bar { width: 3px; height: 12px; border-radius: 2px; background: #3b82f6; flex-shrink: 0; }
.snap-block.step-3 .rt-label-bar { background: #ef4444; }
.snap-block.step-5 .rt-label-bar { background: #10b981; }
.rt-label-line { flex: 1; height: 1px; background: linear-gradient(90deg, #eef2f7, transparent); }
.rt-gap { height: 9px; }
.rt-time {
  display: inline-flex; align-items: center; gap: 4px;
  padding: 1px 7px 1px 6px; margin: 0 2px; border-radius: 6px;
  background: #eff6ff; border: 1px solid #dbeafe; color: #1d4ed8;
  font-size: 12px; font-weight: 600; vertical-align: 1px; white-space: nowrap;
}
.rt-time svg { width: 11px; height: 11px; stroke: #3b82f6; flex-shrink: 0; }
.rt-tag {
  display: inline-flex; align-items: center; gap: 4px;
  padding: 1px 8px; margin: 0 2px; border-radius: 999px;
  font-size: 11.5px; font-weight: 700; vertical-align: 1px;
  white-space: nowrap; border: 1px solid transparent;
}
.rt-tag::before { content: ''; width: 5px; height: 5px; border-radius: 50%; background: currentColor; }
.rt-tag.done { background: #dcfce7; color: #15803d; border-color: #bbf7d0; }
.rt-tag.part { background: #fef3c7; color: #b45309; border-color: #fde68a; }
.rt-tag.none { background: #fee2e2; color: #b91c1c; border-color: #fecaca; }
.rt-tag.info { background: #e0e7ff; color: #4338ca; border-color: #c7d2fe; }
.rt-money {
  font-weight: 700; color: #1d4ed8;
  background: linear-gradient(180deg, transparent 62%, #dbeafe 62%);
  padding: 0 1px; border-radius: 2px;
}
.rt-b { font-weight: 700; color: #0f172a; }

/* ---------- 快照 AI 点评 ---------- */
.snap-ai {
  border: 1px solid #e2e8f0; border-radius: 14px; background: #fff;
  box-shadow: 0 2px 8px rgba(16,24,40,.04); overflow: hidden;
}
.snap-ai-head {
  display: flex; align-items: center; gap: 10px;
  padding: 13px 18px; background: #f8fafc; border-bottom: 1px solid #f1f5f9;
}
.snap-ai-badge {
  display: inline-flex; align-items: center; justify-content: center;
  height: 22px; padding: 0 9px; border-radius: 7px;
  background: #1f2a37; color: #fff; font-size: 12px; font-weight: 800; letter-spacing: .04em;
}
.snap-ai-title { font-size: 15px; font-weight: 700; color: #1f2a37; }
.snap-ai-status {
  margin-left: auto; font-size: 12px; font-weight: 600; color: #8a96a3;
}
.snap-ai-status.ok { color: #16a34a; }
.snap-ai-status.err { color: #d97706; }
.snap-ai-regen {
  display: inline-flex; align-items: center; gap: 5px; margin-left: 10px;
  padding: 5px 11px; border: 1px solid #dbe3ec; border-radius: 8px; background: #fff;
  color: #475569; font-size: 12px; font-weight: 600; cursor: pointer;
  font-family: inherit; transition: all .14s; flex-shrink: 0;
}
.snap-ai-regen:hover { border-color: #1f6fb2; color: #1f6fb2; background: #f5f9ff; }
.snap-ai-regen:disabled { opacity: .55; cursor: default; }
.snap-ai-regen svg { width: 13px; height: 13px; }
.snap-ai-regen.loading svg { animation: snapSpin .9s linear infinite; }
@keyframes snapSpin { to { transform: rotate(360deg); } }
.snap-ai-body { padding: 16px 18px 18px; }
.snap-ai-block + .snap-ai-block { margin-top: 14px; padding-top: 14px; border-top: 1px dashed #eef2f7; }
.snap-ai-label {
  font-size: 12px; font-weight: 700; color: #64748b; letter-spacing: .06em; margin-bottom: 7px;
}
.snap-ai-text { font-size: 14px; line-height: 1.75; color: #1f2a37; }
.snap-ai-list { margin: 0; padding-left: 18px; }
.snap-ai-list li { font-size: 14px; line-height: 1.8; color: #1f2a37; }
.snap-ai-list li::marker { color: #1f6fb2; font-weight: 700; }
.snap-ai-err { font-size: 13px; color: #b45309; }
.snap-ai-skeleton { display: flex; flex-direction: column; gap: 9px; }
.snap-ai-skeleton i {
  display: block; height: 12px; border-radius: 6px;
  background: linear-gradient(90deg, #f1f5f9 25%, #e8eef5 37%, #f1f5f9 63%);
  background-size: 400% 100%; animation: snapSk 1.3s ease infinite;
}
.snap-ai-skeleton i:nth-child(1) { width: 92%; }
.snap-ai-skeleton i:nth-child(2) { width: 78%; }
.snap-ai-skeleton i:nth-child(3) { width: 64%; }
@keyframes snapSk { 0% { background-position: 100% 50%; } 100% { background-position: 0 50%; } }

/* 周管理输入提示 */
.wk-hint { font-size: 12px; color: #94a3b8; margin-right: 4px; }
.wk-hint code {
  font-family: ui-monospace, Menlo, Consolas, monospace; font-size: 11.5px;
  background: #f1f5f9; border: 1px solid #e2e8f0; border-radius: 4px; padding: 0 4px; color: #475569;
}
@media (max-width: 760px) { .wk-hint { display: none; } }
.snap-footer {
  padding: 14px 32px; background: #f8fafc; border-top: 1px solid #e7ecf2;
  font-size: 12px; color: #8a96a3; text-align: right; flex-shrink: 0;
}
.snap-actions { position: fixed; bottom: 24px; right: 24px; display: flex; gap: 10px; z-index: 10000; }
.snap-actions button {
  padding: 10px 18px; border: none; border-radius: 8px; font-size: 14px; font-weight: 600;
  cursor: pointer; box-shadow: 0 4px 12px rgba(0,0,0,.12);
}
.snap-actions .btn-copy { background: #1f6fb2; color: #fff; }
.snap-actions .btn-copy:disabled { opacity: .7; cursor: default; }
.snap-actions .btn-close { background: #fff; color: #1f2a37; border: 1px solid #e7ecf2; }
.snap-actions button { display: inline-flex; align-items: center; gap: 7px; }
.snap-actions .btn-copy svg { width: 15px; height: 15px; }
/* 分享弹窗要盖在快照预览层（z-index 9999）之上 */
.dm-overlay.snap-share-modal { z-index: 10001; }
@media print {
  body > *:not(.snap-overlay) { display: none !important; }
  .snap-overlay { position: static; inset: auto; overflow: visible; background: #fff; }
  .snap-actions { display: none; }
  body { background: #fff; }
  /* 打印时不做高度裁剪，卡片按内容自然展开 */
  .snap-block, .snap-next-card { height: auto !important; }
  .snap-block-body, .snap-next-body { overflow: visible !important; max-height: none !important; }
  .snap-resizer, .snap-resizer-b { display: none !important; }
}

/* ===================================================================
   周管理 + 复盘 · SaaS 视觉重构（2026-09-13）
   目标：顶部操作栏 / 卡片式周次 Tab / Hero KPI / 业务指标 / 横向工作流看板
   =================================================================== */
.wk-page { display: flex; flex-direction: column; gap: 20px; }

/* ---- 顶部操作栏 ---- */
.wk-topbar { display: flex; align-items: center; justify-content: space-between; gap: 16px; flex-wrap: wrap; }
.wk-topbar-title h1 { margin: 0; font-size: 20px; font-weight: 700; color: var(--text); }
.wk-topbar-title p { margin: 5px 0 0; font-size: 13px; color: var(--text-2); }
.wk-topbar-actions { display: flex; align-items: center; gap: 10px; flex-wrap: wrap; }
.wk-topbar-actions select {
  padding: 8px 12px; border: 1px solid var(--border); border-radius: var(--r-sm);
  background: #fff; font-size: 13px; color: var(--text); min-width: 130px;
  font-family: inherit; outline: none; cursor: pointer;
}
.wk-topbar-actions select:focus { border-color: var(--brand-400); box-shadow: 0 0 0 3px var(--brand-100); }

/* ---- 通用按钮 ---- */
.wk-btn {
  display: inline-flex; align-items: center; justify-content: center; gap: 6px;
  padding: 8px 14px; border-radius: var(--r-sm); font-size: 13px; font-weight: 600;
  border: 1px solid var(--border); background: #fff; color: var(--text); cursor: pointer;
  font-family: inherit; transition: all .15s; box-shadow: 0 1px 2px rgba(16,24,40,.04);
  white-space: nowrap;
}
.wk-btn:hover { border-color: var(--brand-300); background: var(--brand-50); color: var(--brand-700); }
.wk-btn:disabled { opacity: .4; cursor: not-allowed; }
.wk-btn:disabled:hover { border-color: var(--border); background: #fff; color: var(--text); }
.wk-btn-primary { background: var(--brand-500); color: #fff; border-color: var(--brand-500); }
.wk-btn-primary:hover { background: var(--brand-600); border-color: var(--brand-600); color: #fff; }
.wk-btn-danger { background: #fff; color: #dc2626; border-color: #fecaca; }
.wk-btn-danger:hover { background: #fee2e2; border-color: #fecaca; color: #dc2626; }
.wk-btn-ghost { border-color: transparent; background: transparent; box-shadow: none; }
.wk-btn-ghost:hover { background: var(--brand-50); }

/* ---- 周次选择面板 ---- */
.wk-tabs-panel {
  background: #fff; border: 1px solid var(--border); border-radius: var(--r);
  padding: 16px; box-shadow: 0 1px 3px rgba(16,24,40,.05);
}
.wk-tabs-toolbar { display: flex; align-items: center; gap: 10px; margin-bottom: 14px; }
.wk-tabs-toolbar h2 { margin: 0; font-size: 15px; font-weight: 700; color: var(--text); flex: 1; }
.wk-tabs-nav { display: flex; gap: 6px; }
.wk-tabs-nav .wk-btn { padding: 5px 12px; font-size: 16px; line-height: 1; }

.wk-tabs { display: flex; gap: 10px; overflow-x: auto; padding-bottom: 6px; }
.wk-tabs::-webkit-scrollbar { height: 6px; }
.wk-tabs::-webkit-scrollbar-thumb { background: var(--border); border-radius: 3px; }
.wk-tabs::-webkit-scrollbar-track { background: transparent; }

.wk-tab-card {
  flex: 0 0 180px; cursor: pointer; user-select: none;
  background: #fff; border: 1px solid var(--border); border-radius: var(--r-sm);
  padding: 14px; transition: all .15s; position: relative;
  display: flex; flex-direction: column; gap: 8px;
}
.wk-tab-card:hover { transform: translateY(-1px); box-shadow: 0 4px 12px rgba(16,24,40,.08); border-color: var(--brand-200); }
.wk-tab-card.active { border-color: var(--brand-500); background: linear-gradient(135deg, var(--brand-50), #f8fbff); box-shadow: 0 0 0 2px rgba(37,99,235,.12); }
.wk-tab-card.active::after {
  content: ''; position: absolute; left: 14px; right: 14px; bottom: -1px;
  height: 3px; background: var(--brand-500); border-radius: 2px 2px 0 0;
}
.wk-tab-head { display: flex; align-items: center; justify-content: space-between; }
.wk-tab-name { font-weight: 700; font-size: 14px; color: var(--text); }
.wk-tab-rate { font-size: 12px; font-weight: 700; padding: 2px 8px; border-radius: 999px; }
.wk-tab-rate.done { background: #dcfce7; color: #166534; }
.wk-tab-rate.part { background: #dbeafe; color: #1e40af; }
.wk-tab-rate.warn { background: #fef3c7; color: #92400e; }
.wk-tab-date { font-size: 12px; color: var(--text-2); }
.wk-tab-status { display: inline-flex; align-items: center; gap: 4px; font-size: 11px; color: var(--muted); }
.wk-tab-dot { width: 6px; height: 6px; border-radius: 50%; background: var(--muted); flex-shrink: 0; }
.wk-tab-dot.active { background: #22c55e; }
.wk-empty-tabs { padding: 12px; color: var(--muted); font-size: 13px; }

/* ---- 周详情面板 ---- */
.wk-detail-panel { display: flex; flex-direction: column; gap: 20px; }

/* Hero KPI */
.wk-hero { background: #fff; border: 1px solid var(--border); border-radius: var(--r); padding: 20px; box-shadow: 0 1px 3px rgba(16,24,40,.05); }
.wk-hero-grid { display: grid; grid-template-columns: 1fr auto; gap: 20px; align-items: start; }
.wk-hero-main { display: flex; flex-direction: column; gap: 16px; }
.wk-hero-title-row { display: flex; align-items: center; gap: 12px; flex-wrap: wrap; }
.wk-hero-badge { display: inline-flex; align-items: center; gap: 6px; background: var(--brand-50); color: var(--brand-700); font-size: 12px; font-weight: 700; padding: 4px 10px; border-radius: 999px; }
.wk-hero-range { font-size: 13px; color: var(--text-2); }
.wk-hero-kpis { display: flex; gap: 12px; flex-wrap: wrap; }
.wk-kpi-pill { display: flex; flex-direction: column; gap: 4px; min-width: 112px; padding: 12px 16px; border-radius: var(--r-sm); background: #f8fafc; border: 1px solid var(--border); }
.wk-kpi-label { font-size: 12px; color: var(--text-2); font-weight: 600; }
.wk-kpi-value { font-size: 18px; font-weight: 700; color: var(--text); }
.wk-kpi-value.warn { color: #d97706; }
.wk-kpi-value.done { color: #059669; }
.wk-hero-actions { display: flex; flex-direction: column; gap: 10px; align-items: flex-end; }
.wk-status-chip { display: inline-flex; align-items: center; gap: 6px; padding: 5px 12px; border-radius: 999px; font-size: 12px; font-weight: 700; white-space: nowrap; }
.wk-status-chip.done { background: #dcfce7; color: #166534; }
.wk-status-chip.part { background: #fef3c7; color: #92400e; }
.wk-status-chip.warn { background: #fee2e2; color: #b91c1c; }

/* 详情区块 */
.wk-detail-section { background: #fff; border: 1px solid var(--border); border-radius: var(--r); padding: 20px; box-shadow: 0 1px 3px rgba(16,24,40,.05); }
.wk-section-head { display: flex; align-items: center; gap: 12px; margin-bottom: 16px; }
.wk-section-head h3 { margin: 0; font-size: 13px; font-weight: 700; color: var(--text-2); letter-spacing: .04em; }
.wk-section-tools { margin-left: auto; display: flex; align-items: center; gap: 8px; }
.wk-pill { padding: 3px 10px; border-radius: 999px; font-size: 12px; font-weight: 600; background: #f1f5f9; color: #475569; }
.wk-pill b { color: var(--brand-600); }

.wk-form-grid-4 { display: grid; grid-template-columns: repeat(4, 1fr); gap: 16px; }
.wk-form-field { display: flex; flex-direction: column; gap: 6px; }
.wk-form-field label { font-size: 12px; font-weight: 700; color: var(--text-2); }
.wk-form-field input {
  padding: 10px 12px; border: 1px solid var(--border); border-radius: var(--r-sm);
  font-size: 14px; color: var(--text); outline: none; font-family: inherit;
  box-sizing: border-box; width: 100%; background: #fff;
}
.wk-form-field input:focus { border-color: var(--brand-400); box-shadow: 0 0 0 3px var(--brand-100); }

.wk-biz-grid { display: grid; grid-template-columns: repeat(3, 1fr); gap: 16px; }
.wk-biz-field { display: flex; flex-direction: column; gap: 6px; }
.wk-biz-field label { font-size: 12px; font-weight: 700; color: var(--text-2); }
.wk-biz-field input {
  padding: 10px 12px; border: 1px solid var(--border); border-radius: var(--r-sm);
  font-size: 14px; color: var(--text); background: #fafafa; outline: none;
  font-family: inherit; box-sizing: border-box; width: 100%;
}
.wk-biz-field input:focus { border-color: var(--brand-400); box-shadow: 0 0 0 3px var(--brand-100); background: #fff; }

/* ---- 横向工作流看板 ---- */
.wk-board { display: flex; gap: 14px; overflow-x: auto; padding-bottom: 12px; align-items: stretch; }
.wk-board::-webkit-scrollbar { height: 8px; }
.wk-board::-webkit-scrollbar-track { background: transparent; }
.wk-board::-webkit-scrollbar-thumb { background: #cbd5e1; border-radius: 4px; }

.wk-board-card {
  background: #fff; border: 1px solid var(--border); border-radius: var(--r);
  box-shadow: 0 1px 3px rgba(16,24,40,.05); display: flex; flex-direction: column;
  overflow: hidden; position: relative; transition: box-shadow .15s, border-color .15s;
  padding: 0;
}
.wk-board-card:hover { box-shadow: 0 4px 12px rgba(16,24,40,.08); border-color: var(--brand-200); transform: none; }
/* 顶部色条 */
.wk-board-card::before { content: ''; position: absolute; left: 0; top: 0; right: 0; bottom: auto; height: 3px; width: auto; }
.wk-board-step-1::before { background: #3b82f6; }
.wk-board-step-2::before { background: #0ea5e9; }
.wk-board-step-3::before { background: #ef4444; }
.wk-board-step-4::before { background: #f59e0b; }
.wk-board-step-5::before { background: #10b981; }
.wk-board-step-6::before { background: #6366f1; }

.wk-board-header {
  display: flex; align-items: center; gap: 10px;
  padding: 14px 16px; margin-bottom: 0; border-bottom: 1px solid #f1f5f9; background: #fafbfc;
}
.wk-board-num {
  display: inline-flex; align-items: center; justify-content: center;
  width: 26px; height: 26px; border-radius: 50%; font-size: 12px; font-weight: 700;
  color: #fff; flex-shrink: 0;
}
.wk-board-step-1 .wk-board-num { background: #3b82f6; color: #fff; }
.wk-board-step-2 .wk-board-num { background: #0ea5e9; color: #fff; }
.wk-board-step-3 .wk-board-num { background: #ef4444; color: #fff; }
.wk-board-step-4 .wk-board-num { background: #f59e0b; color: #fff; }
.wk-board-step-5 .wk-board-num { background: #10b981; color: #fff; }
.wk-board-step-6 .wk-board-num { background: #6366f1; color: #fff; }
.wk-board-title { flex: 1; font-size: 15px; font-weight: 700; color: var(--text); }

/* 六张卡片内容区：高度由 wkSyncBoardHeights() 统一算好后写死（取最高那一格）
   —— 内容全量展示、不出滚动条，六张卡永远齐平。
   max-height 必须放开：全局 textarea 有 max-height:600px，会截断长内容并顶出滚动条。 */
.wk-board-card textarea {
  flex: 0 0 auto;
  width: calc(100% - 28px); min-height: 430px; max-height: none; height: auto;
  margin: 14px;
  resize: none; overflow-y: hidden;
  border: 1px solid var(--border); border-radius: var(--r-sm);
  padding: 12px; font-size: 14px; line-height: 1.6; box-sizing: border-box;
  outline: none; font-family: inherit; transition: border-color .16s, box-shadow .16s;
}
.wk-board-card textarea:focus { border-color: var(--brand-400); box-shadow: 0 0 0 3px var(--brand-100); }
.wk-board-card textarea::placeholder { color: #adb5bd; font-size: 13px; }

/* 隐藏按钮 */
.hide-btn {
  margin-left: auto; font-size: 11px; line-height: 1; padding: 4px 10px;
  border: 1px solid #e2e8f0; border-radius: 999px;
  background: #f8fafc; color: #64748b; cursor: pointer; font-weight: 600;
  white-space: nowrap; font-family: inherit; transition: all .15s;
}
.hide-btn:hover { background: #fee2e2; color: #dc2626; border-color: #fecaca; }

/* 拖拽调宽手柄 */
.wk-card-resizer { position: absolute; right: 0; top: 0; bottom: 0; width: 8px; cursor: col-resize; z-index: 2; background: transparent; transition: background .15s; }
.wk-card-resizer:hover { background: rgba(31,111,178,.16); }
.wk-card-resizer::after { content: ''; position: absolute; right: 3px; top: 50%; transform: translateY(-50%); width: 2px; height: 24px; border-radius: 2px; background: #cbd5e1; }

/* 隐藏的卡片：完全移除，不占位（点击「展开全部」恢复） */
.wk-board-card.collapsed { display: none; }

/* ---- 底部翻页 ---- */
.wk-foot { display: flex; align-items: center; justify-content: space-between; gap: 12px; padding: 4px 2px; }
.wk-foot-meta { font-size: 13px; color: var(--muted); }

/* ---- 空状态 ---- */
.wk-empty-card {
  background: #fff; border: 1px dashed var(--border); border-radius: var(--r);
  padding: 48px 20px; text-align: center; display: flex; flex-direction: column; align-items: center; gap: 8px;
}
.wk-empty-icon { width: 48px; height: 48px; color: var(--brand-300); }
.wk-empty-icon svg { width: 100%; height: 100%; }
.wk-empty-title { font-size: 15px; font-weight: 600; color: var(--text-2); }
.wk-empty-sub { font-size: 13px; color: var(--muted); }

/* ---- 响应式 ---- */
@media (max-width: 1100px) {
  .wk-hero-grid { grid-template-columns: 1fr; }
  .wk-hero-actions { flex-direction: row; align-items: center; flex-wrap: wrap; }
  .wk-form-grid-4 { grid-template-columns: repeat(2, 1fr); }
  .wk-biz-grid { grid-template-columns: 1fr; }
}
@media (max-width: 640px) {
  .wk-form-grid-4 { grid-template-columns: 1fr; }
  .wk-topbar-actions { width: 100%; }
  .wk-tab-card { flex: 0 0 150px; }
  .wk-board-card textarea { min-height: 300px; }
}

/* ============================================================
   仪表盘 v2 · 白色极简 + 蓝紫渐变（现代 SaaS）
   作用域：.dash-page 内部，类名统一 dp- 前缀，避免污染全局
   ============================================================ */
.dash-page{
  --d-blue-700:#1d50e0; --d-blue-600:#2f6bff; --d-blue-500:#5b8dff; --d-blue-50:#eaf1ff; --d-blue-100:#dbe7ff;
  --d-purple-700:#6538f0; --d-purple-600:#7c5cfc; --d-purple-500:#9b7dff; --d-purple-50:#f1edfe;
  --d-green-700:#0f9a5b; --d-green-600:#18b26b; --d-green-50:#e7f8f0;
  --d-orange-700:#d97706; --d-orange-600:#f08c1f; --d-orange-50:#fef4e6;
  --d-pink-600:#e8478f; --d-pink-50:#fdeaf3;
  --d-cyan-600:#0ea5b7; --d-cyan-50:#e4f7fa;
  --d-red-600:#e8483f; --d-red-50:#feecea;
  --d-t1:#1a2036; --d-t2:#5b6478; --d-t3:#98a0b3;
  --d-card:#ffffff; --d-line:#ebeff7; --d-line-2:#f2f5fa;
  --d-sd1:0 1px 2px rgba(50,80,160,.04), 0 6px 20px rgba(50,80,160,.055);
  --d-sd2:0 2px 4px rgba(50,80,160,.05), 0 14px 34px rgba(50,80,160,.09);
  color:var(--d-t1); font-size:14px; line-height:22px;
  background:
    radial-gradient(780px 430px at 6% -8%, rgba(91,141,255,.20) 0%, rgba(255,255,255,0) 62%),
    radial-gradient(720px 420px at 97% 0%, rgba(155,125,255,.19) 0%, rgba(255,255,255,0) 60%),
    radial-gradient(900px 520px at 50% 104%, rgba(46,207,135,.10) 0%, rgba(255,255,255,0) 64%),
    linear-gradient(163deg,#f2f6ff 0%,#fbf8fe 46%,#f1f6ff 100%);
  border-radius: 22px;
  padding: 22px 24px 28px;
}
.dash-page *{ box-sizing: border-box; }
/* 直接挂在主内容区时整页铺满（抵消 .content 的内边距），渐变背景顶到边 */
.content > .dash-page:first-child{
  margin: -22px -26px -30px;
  border-radius: 0;
  padding: 24px 26px 36px;
  min-height: calc(100vh - 58px);
}

/* 顶栏 */
.dash-page .dp-topbar{
  display:flex; align-items:center; gap:12px; flex-wrap:wrap;
  background:var(--d-card); border:1px solid var(--d-line);
  border-radius:20px; padding:14px 20px; box-shadow:var(--d-sd1); margin-bottom:18px;
}
.dash-page .dp-topbar .dp-spacer{ flex:1; }
.dash-page .dp-seg{
  display:inline-flex; align-items:center; gap:8px; background:var(--d-line-2);
  border:1px solid var(--d-line); border-radius:999px; padding:5px 8px 5px 14px;
}
.dash-page .dp-seg label{ font-size:12px; color:var(--d-t3); margin:0; white-space:nowrap; flex-shrink:0; }
.dash-page .dp-seg select{
  border:none; background:transparent; font-family:inherit;
  font-size:13px; font-weight:600; color:var(--d-t1); outline:none; cursor:pointer;
  font-variant-numeric:tabular-nums; padding:2px 4px;
}
.dash-page .dp-btn{
  border:1px solid var(--d-line); background:#fff; color:var(--d-t2);
  padding:8px 18px; border-radius:999px; font-size:13px; font-weight:600; cursor:pointer;
  transition:.18s; font-family:inherit;
}
.dash-page .dp-btn:hover{ border-color:var(--d-blue-500); color:var(--d-blue-600); background:var(--d-blue-50); }
.dash-page .dp-btn-primary{
  border:none; color:#fff;
  background:linear-gradient(135deg,#5b8dff 0%,#2f6bff 55%,#6b5cfc 100%);
  box-shadow:0 6px 16px rgba(60,110,255,.30);
}
.dash-page .dp-btn-primary:hover{
  color:#fff; transform:translateY(-1px); box-shadow:0 10px 22px rgba(60,110,255,.36);
  background:linear-gradient(135deg,#5b8dff 0%,#2f6bff 55%,#6b5cfc 100%);
}
.dash-page .dp-title{ display:flex; flex-direction:column; }
.dash-page .dp-title .t{ font-weight:700; font-size:16.5px; letter-spacing:.2px; color:var(--d-t1); }
.dash-page .dp-title .s{ font-weight:500; color:var(--d-t3); font-size:11.5px; letter-spacing:1.6px; margin-top:1px; }

/* 卡片 */
.dash-page .dp-card{
  background:var(--d-card); border:1px solid var(--d-line);
  border-radius:20px; padding:20px 22px; box-shadow:var(--d-sd1);
}
.dash-page .dp-card-h{ display:flex; align-items:center; gap:11px; margin:0 0 18px; }
.dash-page .dp-card-h h2{ margin:0; font-size:15px; font-weight:700; color:var(--d-t1); letter-spacing:.1px; }
.dash-page .dp-card-h .dp-hint{ margin-left:auto; font-size:12px; color:var(--d-t3); font-weight:500; }
.dash-page .dp-grid{ display:grid; gap:18px; }
.dash-page .dp-g4{ grid-template-columns:repeat(4,1fr); }
.dash-page .dp-g2{ grid-template-columns:1fr 1fr; }
.dash-page .dp-g2u{ grid-template-columns:1.06fr 1fr; }
.dash-page .dp-mb{ margin-bottom:18px; }

/* 实心渐变图标块 */
.dash-page .dp-ico{
  display:grid; place-items:center; color:#fff; flex-shrink:0;
  width:32px; height:32px; border-radius:9px;
}
.dash-page .dp-ico svg{ width:17px; height:17px; display:block; }
.dash-page .dp-ico.dp-blue{ background:linear-gradient(140deg,#6d9bff,#2f6bff); box-shadow:0 5px 12px rgba(47,107,255,.30); }
.dash-page .dp-ico.dp-purple{ background:linear-gradient(140deg,#a98cff,#7c5cfc); box-shadow:0 5px 12px rgba(124,92,252,.30); }
.dash-page .dp-ico.dp-green{ background:linear-gradient(140deg,#4ddb98,#18b26b); box-shadow:0 5px 12px rgba(24,178,107,.28); }
.dash-page .dp-ico.dp-orange{ background:linear-gradient(140deg,#ffbe5c,#f08c1f); box-shadow:0 5px 12px rgba(240,140,31,.28); }
.dash-page .dp-ico.dp-pink{ background:linear-gradient(140deg,#ff89bd,#e8478f); box-shadow:0 5px 12px rgba(232,71,143,.26); }
.dash-page .dp-ico.dp-cyan{ background:linear-gradient(140deg,#4fd0e0,#0ea5b7); box-shadow:0 5px 12px rgba(14,165,183,.26); }

/* KPI */
.dash-page .dp-kpi{
  background:var(--d-card); border:1px solid var(--d-line); border-radius:20px;
  padding:20px 22px 18px; box-shadow:var(--d-sd1); transition:.2s; position:relative; overflow:hidden;
}
.dash-page .dp-kpi::after{
  content:""; position:absolute; right:-40px; top:-46px; width:140px; height:140px; border-radius:50%;
  background:radial-gradient(circle,rgba(91,141,255,.10),rgba(255,255,255,0) 70%); pointer-events:none;
}
.dash-page .dp-kpi:hover{ transform:translateY(-2px); box-shadow:var(--d-sd2); }
.dash-page .dp-k-top .dp-ico.dp-ico-lg{ width:38px; height:38px; border-radius:12px; }
.dash-page .dp-k-top .dp-ico.dp-ico-lg svg{ width:20px; height:20px; }
.dash-page .dp-k-top{ display:flex; align-items:center; gap:11px; }
.dash-page .dp-k-lab{ font-size:13px; color:var(--d-t2); font-weight:600; }
.dash-page .dp-k-cap{ font-size:11.5px; color:var(--d-t3); margin-top:2px; font-weight:500; }
.dash-page .dp-k-val{
  font-size:27px; font-weight:700; letter-spacing:-.6px; line-height:36px; margin:16px 0 4px;
  font-variant-numeric:tabular-nums;
}
.dash-page .dp-k-val small{ font-size:14px; font-weight:600; color:var(--d-t3); margin-left:3px; }
.dash-page .dp-k-bar{ height:6px; border-radius:999px; background:var(--d-line-2); overflow:hidden; margin-top:14px; }
.dash-page .dp-k-bar i{ display:block; height:100%; border-radius:999px; }
.dash-page .dp-k-foot{ display:flex; align-items:center; gap:8px; margin-top:10px; }
.dash-page .dp-k-foot .txt{ font-size:11.5px; color:var(--d-t3); font-weight:500; }
.dash-page .dp-kpi.dp-blue .dp-k-bar i{ background:linear-gradient(90deg,#5b8dff,#2f6bff); }
.dash-page .dp-kpi.dp-purple .dp-k-bar i{ background:linear-gradient(90deg,#9b7dff,#7c5cfc); }
.dash-page .dp-kpi.dp-green .dp-k-bar i{ background:linear-gradient(90deg,#4ddb98,#18b26b); }
.dash-page .dp-kpi.dp-orange .dp-k-bar i{ background:linear-gradient(90deg,#ffbe5c,#f08c1f); }
.dash-page .dp-kpi.dp-blue .dp-k-val{ color:var(--d-blue-700); }
.dash-page .dp-kpi.dp-purple .dp-k-val{ color:var(--d-purple-700); }
.dash-page .dp-kpi.dp-green .dp-k-val{ color:var(--d-green-700); }
.dash-page .dp-kpi.dp-orange .dp-k-val{ color:var(--d-orange-700); }
.dash-page .dp-kpi.dp-hero{ background:linear-gradient(150deg,#f4f7ff 0%,#ffffff 52%,#f4f7ff 100%); border-color:#e2e9ff; }

/* 胶囊标签 */
.dash-page .dp-tag{ font-size:11.5px; font-weight:600; padding:2px 9px; border-radius:9px; white-space:nowrap; }
.dash-page .dp-tag.dp-blue{ background:var(--d-blue-50); color:var(--d-blue-700); }
.dash-page .dp-tag.dp-purple{ background:var(--d-purple-50); color:var(--d-purple-700); }
.dash-page .dp-tag.dp-green{ background:var(--d-green-50); color:var(--d-green-700); }
.dash-page .dp-tag.dp-orange{ background:var(--d-orange-50); color:var(--d-orange-700); }

/* 环图 */
.dash-page .dp-chart-row{ display:grid; grid-template-columns:310px minmax(0,1fr) minmax(0,1fr); gap:18px; align-items:stretch; }
/* 三卡等高（stretch）时让主体撑满并垂直居中，避免卡片下半截空一大片 */
.dash-page .dp-chart-row > .dp-card{ display:flex; flex-direction:column; }
.dash-page .dp-chart-row > .dp-card > .dp-biz,
.dash-page .dp-chart-row > .dp-card > .dp-donut-wrap,
.dash-page .dp-chart-row > .dp-card > .fortune-body{ flex:1 1 auto; }
.dash-page .dp-donut-wrap{ display:flex; flex-direction:column; align-items:center; justify-content:center; padding:4px 0 0; }
.dash-page .dp-donut{ position:relative; width:180px; height:180px; }
.dash-page .dp-donut svg{ transform:rotate(-90deg); display:block; }
.dash-page .dp-donut .center{ position:absolute; inset:0; display:grid; place-content:center; text-align:center; }
.dash-page .dp-donut .center .p{ font-size:30px; font-weight:700; letter-spacing:-1.2px; color:var(--d-blue-700); font-variant-numeric:tabular-nums; }
.dash-page .dp-donut .center .t{ font-size:12px; color:var(--d-t3); margin-top:3px; font-weight:500; }
.dash-page .dp-donut-legend{ display:flex; gap:18px; margin-top:18px; font-size:12.5px; color:var(--d-t2); font-weight:500; }
.dash-page .dp-donut-legend i{ width:9px; height:9px; border-radius:3px; display:inline-block; margin-right:6px; vertical-align:middle; }

/* 饼图 + 业务线 */
.dash-page .dp-biz{ display:flex; align-items:center; gap:24px; }
.dash-page .dp-pie{
  position:relative; width:146px; height:146px; border-radius:50%; flex-shrink:0;
  box-shadow:0 0 0 6px #fff, 0 10px 26px rgba(50,80,160,.14);
}
.dash-page .dp-pie::after{ content:""; position:absolute; inset:32px; border-radius:50%; background:#fff; box-shadow:inset 0 2px 6px rgba(50,80,160,.06); }
.dash-page .dp-pie .pc{ position:absolute; inset:0; display:grid; place-content:center; text-align:center; z-index:2; }
.dash-page .dp-pie .pc b{ font-size:16px; font-weight:700; color:var(--d-t1); display:block; letter-spacing:-.4px; font-variant-numeric:tabular-nums; }
.dash-page .dp-pie .pc span{ font-size:11px; color:var(--d-t3); font-weight:500; }
.dash-page .dp-biz-list{ flex:1; display:flex; flex-direction:column; gap:16px; min-width:0; }
.dash-page .dp-biz-item{ display:flex; align-items:center; gap:11px; }
.dash-page .dp-biz-item .swatch{ width:9px; height:9px; border-radius:3px; flex-shrink:0; }
.dash-page .dp-biz-item .nm{ font-size:13px; color:var(--d-t2); font-weight:500; min-width:84px; }
.dash-page .dp-biz-item .tr{ width:68px; height:6px; border-radius:999px; background:var(--d-line-2); overflow:hidden; flex-shrink:0; }
.dash-page .dp-biz-item .tr i{ display:block; height:100%; border-radius:999px; }
.dash-page .dp-biz-item .amt{ margin-left:auto; font-size:14px; font-weight:700; color:var(--d-t1); font-variant-numeric:tabular-nums; }
.dash-page .dp-biz-item .pc2{ font-size:12px; color:var(--d-t3); min-width:48px; text-align:right; font-weight:500; font-variant-numeric:tabular-nums; }

/* 图表行改为三列后：业务线卡只占半栏，收紧尺寸（隐藏进度条，保留色块/名称/金额/占比） */
.dash-page .dp-chart-row .dp-biz{ gap:16px; }
.dash-page .dp-chart-row .dp-pie{ width:112px; height:112px; }
.dash-page .dp-chart-row .dp-pie::after{ inset:25px; }
.dash-page .dp-chart-row .dp-pie .pc b{ font-size:14px; letter-spacing:-.2px; }
.dash-page .dp-chart-row .dp-pie .pc span{ font-size:10px; }
.dash-page .dp-chart-row .dp-biz-list{ gap:13px; }
.dash-page .dp-chart-row .dp-biz-item{ gap:8px; }
.dash-page .dp-chart-row .dp-biz-item .nm{ min-width:0; font-size:12.5px; overflow:hidden; text-overflow:ellipsis; white-space:nowrap; }
.dash-page .dp-chart-row .dp-biz-item .tr{ display:none; }
.dash-page .dp-chart-row .dp-biz-item .amt{ font-size:13.5px; }
.dash-page .dp-chart-row .dp-biz-item .pc2{ min-width:40px; font-size:11.5px; }

/* 表格 */
.dash-page table{ width:100%; border-collapse:separate; border-spacing:0; font-size:13px; }
.dash-page thead th{
  text-align:left; font-size:12px; font-weight:600; color:var(--d-t2);
  padding:11px 14px; background:#f6f8fe; border-bottom:1px solid var(--d-line); white-space:nowrap;
}
.dash-page thead th:first-child{ border-radius:12px 0 0 12px; }
.dash-page thead th:last-child{ border-radius:0 12px 12px 0; }
.dash-page tbody td{ padding:13px 14px; border-bottom:1px solid var(--d-line-2); color:var(--d-t2); vertical-align:middle; }
.dash-page tbody tr:last-child td{ border-bottom:none; }
.dash-page tbody tr:hover td{ background:#fafbff; }
.dash-page tbody tr.sum td{ background:#f6f8fe; font-weight:700; color:var(--d-t1); border-top:1px solid var(--d-line); }
.dash-page td .wk{ font-weight:600; color:var(--d-t1); }
.dash-page td .sub{ font-size:11.5px; color:var(--d-t3); margin-top:2px; font-variant-numeric:tabular-nums; font-weight:500; }
.dash-page td.num{ font-variant-numeric:tabular-nums; font-weight:600; color:var(--d-t1); }
.dash-page .dp-rate-cell{ display:flex; align-items:center; gap:10px; min-width:118px; }
.dash-page .dp-track{ flex:1; height:6px; border-radius:999px; background:var(--d-line-2); overflow:hidden; min-width:54px; }
.dash-page .dp-track i{ display:block; height:100%; border-radius:999px; }
.dash-page .dp-fill-done{ background:linear-gradient(90deg,#4ddb98,#18b26b); }
.dash-page .dp-fill-part{ background:linear-gradient(90deg,#ffbe5c,#f08c1f); }
.dash-page .dp-fill-fail{ background:linear-gradient(90deg,#ff8a80,#e8483f); }
.dash-page .dp-rate-cell .rp{ font-size:12.5px; font-weight:700; color:var(--d-t2); min-width:36px; text-align:right; font-variant-numeric:tabular-nums; }
.dash-page .dp-flag{ display:inline-grid; place-items:center; width:22px; height:22px; border-radius:999px; font-size:11px; font-weight:700; color:#fff; }
.dash-page .dp-flag.ok{ background:linear-gradient(140deg,#4ddb98,#18b26b); box-shadow:0 3px 8px rgba(24,178,107,.28); }
.dash-page .dp-flag.no{ background:var(--d-line-2); color:var(--d-t3); }

/* 横向条形 */
.dash-page .dp-hbars{ display:flex; flex-direction:column; gap:16px; padding:2px 0; }
.dash-page .dp-hbar{ display:flex; align-items:center; gap:13px; }
.dash-page .dp-hbar .lab{ width:54px; font-size:12.5px; color:var(--d-t2); font-weight:500; flex-shrink:0; }
.dash-page .dp-hbar .tr{ flex:1; height:10px; border-radius:999px; background:var(--d-line-2); overflow:hidden; }
.dash-page .dp-hbar .tr i{ display:block; height:100%; border-radius:999px; background:linear-gradient(90deg,#4ddb98,#18b26b); }
.dash-page .dp-hbar .tr i.part{ background:linear-gradient(90deg,#ffbe5c,#f08c1f); }
.dash-page .dp-hbar .tr i.fail{ background:linear-gradient(90deg,#ff8a80,#e8483f); }
.dash-page .dp-hbar .pct{ width:52px; text-align:right; font-size:12.5px; font-weight:700; color:var(--d-t1); font-variant-numeric:tabular-nums; flex-shrink:0; }

/* 紧急程度 */
.dash-page .dp-urg{ display:flex; flex-direction:column; gap:15px; }
.dash-page .dp-urg-row{ display:flex; align-items:center; gap:12px; }
.dash-page .dp-pill{
  font-size:12px; font-weight:600; padding:4px 11px; border-radius:9px;
  white-space:nowrap; min-width:96px; text-align:center;
}
.dash-page .dp-u-ij{ background:var(--d-red-50); color:#c0392b; }
.dash-page .dp-u-in{ background:var(--d-orange-50); color:var(--d-orange-700); }
.dash-page .dp-u-nj{ background:var(--d-blue-50); color:var(--d-blue-700); }
.dash-page .dp-u-nn{ background:var(--d-line-2); color:var(--d-t2); }
.dash-page .dp-u-sp{ background:var(--d-cyan-50); color:#0b7f8d; }
.dash-page .dp-urg-row .tr{ flex:1; height:10px; border-radius:999px; background:var(--d-line-2); overflow:hidden; }
.dash-page .dp-urg-row .tr i{ display:block; height:100%; border-radius:999px; }
.dash-page .dp-urg-row .n{ font-size:14px; font-weight:700; color:var(--d-t1); min-width:40px; text-align:right; font-variant-numeric:tabular-nums; }
.dash-page .dp-urg-row .n small{ font-size:11.5px; color:var(--d-t3); font-weight:500; margin-left:2px; }

/* 今日计划 */
.dash-page .dp-task{
  display:flex; align-items:flex-start; gap:12px; padding:12px 14px; border-radius:12px;
  background:#fafbff; border:1px solid var(--d-line-2); margin-bottom:9px; transition:.16s;
}
.dash-page .dp-task:hover{ background:#f6f8ff; border-color:var(--d-blue-100); }
.dash-page .dp-task:last-child{ margin-bottom:0; }
.dash-page .dp-task .tg{ font-size:11.5px; font-weight:600; padding:3px 9px; border-radius:9px; white-space:nowrap; flex-shrink:0; }
.dash-page .dp-t-done{ background:var(--d-green-50); color:var(--d-green-700); }
.dash-page .dp-t-part{ background:var(--d-orange-50); color:var(--d-orange-700); }
.dash-page .dp-t-none{ background:var(--d-red-50); color:#c0392b; }
.dash-page .dp-task .tx{ font-size:13.5px; font-weight:600; color:var(--d-t1); line-height:20px; }
.dash-page .dp-task .mt{ font-size:11.5px; color:var(--d-t3); margin-top:3px; font-variant-numeric:tabular-nums; font-weight:500; }

/* 近期问题 */
.dash-page .dp-prob{ display:flex; gap:12px; padding:13px 0; border-bottom:1px solid var(--d-line-2); }
.dash-page .dp-prob:last-child{ border-bottom:none; padding-bottom:2px; }
.dash-page .dp-prob .dt{
  font-size:11.5px; font-weight:600; color:var(--d-purple-700); background:var(--d-purple-50);
  border-radius:9px; padding:3px 9px; height:fit-content; white-space:nowrap; flex-shrink:0;
  font-variant-numeric:tabular-nums;
}
.dash-page .dp-prob .bd{ font-size:13px; color:var(--d-t1); font-weight:600; line-height:20px; min-width:0; }
.dash-page .dp-prob .bd .txt{ color:var(--d-t2); font-weight:400; margin-top:4px; line-height:20px; }
.dash-page .dp-empty{ padding:26px 0; text-align:center; color:var(--d-t3); font-size:13px; }

/* 图表行三列在中等屏宽下会过窄：完成率卡跨整行，业务线卡与抽签卡各占一半 */
@media (max-width:1280px){
  .dash-page .dp-chart-row{ grid-template-columns:1fr 1fr; }
  .dash-page .dp-chart-row > .dp-card:first-child{ grid-column:1 / -1; }
  .dash-page .dp-chart-row > .dp-card:first-child .dp-donut-wrap{ flex-direction:row; gap:30px; }
  .dash-page .dp-chart-row > .dp-card:first-child .dp-donut-legend{ margin-top:0; }
}
@media (max-width:1180px){
  .dash-page .dp-g4{ grid-template-columns:1fr 1fr; }
  .dash-page .dp-chart-row{ grid-template-columns:1fr; }
  .dash-page .dp-chart-row > .dp-card:first-child{ grid-column:auto; }
}
@media (max-width:820px){
  .dash-page{ padding:16px 14px 22px; border-radius:16px; }
  .dash-page .dp-g4, .dash-page .dp-g2, .dash-page .dp-g2u{ grid-template-columns:1fr; }
  .dash-page .dp-biz{ flex-direction:column; align-items:flex-start; gap:18px; }
  .dash-page .dp-topbar{ padding:12px 14px; }
}

/* ============================================================
   周管理 · 自动排周日期相关小件（v28）
   ============================================================ */
.wk-tab-head { gap: 6px; }
.wk-tab-head .wk-tab-name { flex: 1; min-width: 0; }
.wk-tab-now {
  font-size: 10.5px; font-weight: 700; padding: 2px 7px; border-radius: 999px;
  background: linear-gradient(135deg, #5b8dff, #2f6bff); color: #fff; flex-shrink: 0;
  box-shadow: 0 2px 6px rgba(47, 107, 255, .28); letter-spacing: .3px;
}
.wk-tab-card.active .wk-tab-now { background: linear-gradient(135deg, #fff, #eef3ff); color: #2f6bff; }
.wk-auto-badge {
  display: inline-block; margin-left: 6px; font-size: 10.5px; font-weight: 700;
  padding: 1px 6px; border-radius: 999px; background: #eaf1ff; color: #2f6bff;
  border: 1px solid #dbe7ff; vertical-align: 1px; letter-spacing: .2px;
}


/* ============================================================
   配色体系 v4 · 原版蓝紫色系（淡白背景 + 蓝紫渐变）
   作用域：.dash-page（仪表盘 / 月度目标 / 日量化）
   ============================================================ */
.dash-page{
  --d-blue-700:#1e4fd6; --d-blue-600:#2f6bff; --d-blue-500:#5b8dff; --d-blue-50:#eef4ff; --d-blue-100:#dbe7ff;
  --d-purple-700:#4a3ed9; --d-purple-600:#6b5cfc; --d-purple-500:#7c5cfc; --d-purple-50:#f3f0ff;
  --d-sd1:0 1px 2px rgba(47,107,255,.04), 0 10px 26px rgba(91,141,255,.07);
  --d-sd2:0 2px 6px rgba(47,107,255,.07), 0 18px 42px rgba(108,92,252,.11);
  background:
    radial-gradient(900px 520px at 88% -12%, rgba(124,92,252,.09) 0%, rgba(255,255,255,0) 60%),
    radial-gradient(820px 460px at 4% -6%, rgba(91,141,255,.10) 0%, rgba(255,255,255,0) 58%),
    radial-gradient(720px 420px at 50% 108%, rgba(56,189,248,.06) 0%, rgba(255,255,255,0) 60%),
    linear-gradient(175deg,#fbfcff 0%,#fdfdff 46%,#fafcff 100%);
}
.dash-page .dp-topbar,
.dash-page .dp-card{ border-color:#e8edf8; }
.dash-page .dp-card{ transition:box-shadow .22s ease; }
.dash-page .dp-card:hover{ box-shadow:var(--d-sd2); }

/* 页面主标题：蓝紫渐变文字 */
.dash-page .dp-title .t{
  background:linear-gradient(115deg,#1e3a8a 0%,#2f6bff 40%,#6b5cfc 75%,#7c5cfc 100%);
  -webkit-background-clip:text; background-clip:text;
  -webkit-text-fill-color:transparent; color:transparent;
}

/* 图标块：彩色渐变 + 同色柔光 */
.dash-page .dp-ico.dp-blue  { background:linear-gradient(140deg,#5b8dff,#2f6bff 52%,#4a3ed9); box-shadow:0 6px 14px rgba(47,107,255,.30); }
.dash-page .dp-ico.dp-purple{ background:linear-gradient(140deg,#a98cff,#7c5cfc 52%,#6b5cfc); box-shadow:0 6px 14px rgba(124,92,252,.30); }
.dash-page .dp-ico.dp-cyan  { background:linear-gradient(140deg,#22d3ee,#06b6d4 52%,#0891b2); box-shadow:0 6px 14px rgba(6,182,212,.28); }
.dash-page .dp-ico.dp-green { background:linear-gradient(140deg,#34d399,#10b981); box-shadow:0 6px 14px rgba(16,185,129,.30); }
.dash-page .dp-ico.dp-orange{ background:linear-gradient(140deg,#fbbf24,#f59e0b); box-shadow:0 6px 14px rgba(245,158,11,.30); }
.dash-page .dp-ico.dp-pink  { background:linear-gradient(140deg,#a98cff,#5b8dff); box-shadow:0 6px 14px rgba(91,141,255,.26); }

/* 按钮 */
.dash-page .dp-btn-primary,
.dash-page .dp-btn-primary:hover{
  background:linear-gradient(135deg,#2f6bff 0%,#6b5cfc 55%,#7c5cfc 100%);
  box-shadow:0 8px 20px rgba(47,107,255,.30);
}
.dash-page .dp-btn:hover{ border-color:#5b8dff; color:#2f6bff; background:#eef4ff; }

/* 输入聚焦 */
.dash-page .dp-field input:focus,
.dash-page .dp-field select:focus,
.dash-page .dp-field textarea:focus{ border-color:#5b8dff; box-shadow:0 0 0 3px rgba(91,141,255,.16); }

/* KPI */
.dash-page .dp-kpi.dp-blue .dp-k-val{
  background:linear-gradient(120deg,#1e4fd6 0%,#5b8dff 48%,#7c5cfc 100%);
  -webkit-background-clip:text; background-clip:text; -webkit-text-fill-color:transparent; color:transparent;
}
.dash-page .dp-kpi.dp-blue .dp-k-bar i  { background:linear-gradient(90deg,#5b8dff,#2f6bff); }
.dash-page .dp-kpi.dp-purple .dp-k-bar i{ background:linear-gradient(90deg,#a98cff,#7c5cfc); }
.dash-page .dp-kpi.dp-blue{ background:linear-gradient(135deg,#f4f7ff 0%,#ffffff 48%,#f5f4ff 100%); border-color:#e2e9ff; }

/* ============================================================
   月度目标页 · 专属样式（配合 .dash-page 设计语言）
   ============================================================ */
.dash-page .dp-form-grid{ display:grid; grid-template-columns:1fr 1fr 1.2fr; gap:14px 16px; }
.dash-page .dp-field{ display:flex; flex-direction:column; gap:6px; min-width:0; }
.dash-page .dp-field-full{ grid-column:1 / -1; }
.dash-page .dp-field label{ font-size:12px; font-weight:600; color:var(--d-t3); letter-spacing:.2px; }
.dash-page .dp-field select,
.dash-page .dp-field input,
.dash-page .dp-field textarea{
  width:100%; box-sizing:border-box; font-family:inherit; font-size:13.5px; color:var(--d-t1);
  background:#faf9ff; border:1px solid var(--d-line); border-radius:11px;
  padding:10px 12px; outline:none; transition:.16s; font-variant-numeric:tabular-nums;
  resize:vertical; line-height:20px;
}
.dash-page .dp-field select:focus,
.dash-page .dp-field input:focus,
.dash-page .dp-field textarea:focus{ background:#fff; }

/* 时间进度：双进度对比 */
.dash-page .dp-cmp{ display:flex; flex-direction:column; gap:14px; }
.dash-page .dp-cmp-row{ display:flex; align-items:center; gap:12px; }
.dash-page .dp-cmp-row .lb{ font-size:12.5px; color:var(--d-t2); font-weight:600; width:66px; flex-shrink:0; }
.dash-page .dp-cmp-row .tr{ flex:1; height:10px; border-radius:999px; background:var(--d-line-2); overflow:hidden; }
.dash-page .dp-cmp-row .tr i{ display:block; height:100%; border-radius:999px; }
.dash-page .dp-cmp-row .pc{ width:52px; text-align:right; font-size:13px; font-weight:700; color:var(--d-t1); font-variant-numeric:tabular-nums; flex-shrink:0; }

.dash-page .dp-stats{ display:grid; grid-template-columns:repeat(3,1fr); gap:10px; margin-top:18px; }
.dash-page .dp-stats > div{
  background:#faf9ff; border:1px solid var(--d-line-2); border-radius:13px;
  padding:12px 12px 11px; display:flex; flex-direction:column; gap:3px; min-width:0;
}
.dash-page .dp-stats b{ font-size:17px; font-weight:700; color:var(--d-t1); letter-spacing:-.3px; font-variant-numeric:tabular-nums; }
.dash-page .dp-stats span{ font-size:11.5px; color:var(--d-t3); font-weight:500; white-space:nowrap; overflow:hidden; text-overflow:ellipsis; }

.dash-page .dp-verdict{
  display:flex; align-items:center; gap:8px; margin-top:16px;
  padding:11px 14px; border-radius:12px; font-size:12.5px; font-weight:500; line-height:18px;
}
.dash-page .dp-verdict svg{ width:16px; height:16px; flex-shrink:0; }
.dash-page .dp-verdict b{ font-weight:800; }
.dash-page .dp-verdict.ok{ background:linear-gradient(135deg,#eefaf3,#f6fdf9); color:#0f8a52; border:1px solid #d6f2e3; }
.dash-page .dp-verdict.warn{ background:linear-gradient(135deg,#fff8ec,#fffdf8); color:#b57209; border:1px solid #fbe7c6; }

/* 折线图容器 */
.dash-page .dp-line-wrap{ position:relative; height:250px; margin-top:2px; }
.dash-page .dp-line-wrap canvas{ display:block; width:100% !important; height:250px !important; }
.dash-page .dp-legend{ display:flex; gap:20px; padding:10px 4px 0; font-size:12.5px; color:var(--d-t2); font-weight:500; }
.dash-page .dp-legend span{ display:inline-flex; align-items:center; gap:7px; }
.dash-page .dp-legend i{ width:14px; height:4px; border-radius:999px; display:inline-block; }
.dash-page .dp-legend i.dash{ height:0; width:16px; border-top:2px dashed #94a3b8; }
.dash-page .dp-empty{
  display:grid; place-items:center; height:250px; color:var(--d-t3); font-size:13px;
  background:#fafbfe; border:1px dashed var(--d-line); border-radius:14px;
}

/* 环形图（SVG） */
.dash-page .dp-donut-svg{ position:relative; width:150px; height:150px; flex-shrink:0; }
.dash-page .dp-donut-svg svg{ display:block; }
.dash-page .dp-donut-svg-c{ position:absolute; inset:0; display:grid; place-content:center; text-align:center; }
.dash-page .dp-donut-svg-c b{ font-size:18px; font-weight:700; color:var(--d-t1); letter-spacing:-.5px; font-variant-numeric:tabular-nums; display:block; }
.dash-page .dp-donut-svg-c span{ font-size:11px; color:var(--d-t3); font-weight:500; }
.dash-page.dp-monthly .dp-biz-item .nm{ min-width:96px; }

@media (max-width:1180px){
  .dash-page .dp-form-grid{ grid-template-columns:1fr 1fr; }
}
@media (max-width:820px){
  .dash-page .dp-form-grid{ grid-template-columns:1fr; }
  .dash-page .dp-stats{ grid-template-columns:1fr; }
  .dash-page .dp-biz-item .nm{ min-width:auto; }
}


/* ============================================================
   日量化页 · 专属样式（沿用商派紫设计语言）
   表格结构 / 列宽拖拽沿用原 .days-tbl，仅换配色与容器
   ============================================================ */
.dash-page .dp-g3{ grid-template-columns:repeat(3,1fr); }

/* 卡头右侧按钮组 */
.dash-page .dp-card-h .dp-acts{ margin-left:auto; display:flex; align-items:center; gap:8px; flex-wrap:wrap; }
.dash-page.dp-daily .dp-card-h .dp-hint{ margin-left:0; }
.dash-page .dp-acts .dp-btn{ padding:7px 13px; font-size:12.5px; }

/* 商机 mini 卡 */
.dash-page .dp-mini{
  display:flex; align-items:center; gap:12px;
  background:var(--d-card); border:1px solid var(--d-line); border-radius:18px;
  padding:15px 18px; box-shadow:var(--d-sd1); transition:box-shadow .22s ease;
}
.dash-page .dp-mini:hover{ box-shadow:var(--d-sd2); }
.dash-page .dp-mini .dp-mini-t{ flex:1; min-width:0; }
.dash-page .dp-mini .dp-k-lab{ font-size:12.5px; }
.dash-page .dp-mini .dp-k-cap{ font-size:11px; color:var(--d-t3); margin-top:2px; }
.dash-page .dp-mini > b{
  font-size:21px; font-weight:700; color:var(--d-t1); letter-spacing:-.5px;
  font-variant-numeric:tabular-nums; flex-shrink:0;
}

/* ---------- 表格：紫调 ---------- */
.dash-page.dp-daily .days-tbl-wrap{ border:1px solid var(--d-line); border-radius:16px; overflow:auto; }
.dash-page.dp-daily table.days-tbl thead th{
  background:linear-gradient(135deg,#f5f8ff 0%,#f3f7ff 100%);
  color:var(--d-t2); font-weight:600; font-size:12.5px;
  border-bottom:1px solid #e8edf8; border-right:1px solid #eef2fb;
  padding:11px 10px;
}
.dash-page.dp-daily table.days-tbl tbody tr:nth-child(even) td{ background:#fafcff; }
.dash-page.dp-daily table.days-tbl tbody tr:hover td{ background:#f3f7fe; }
.dash-page.dp-daily table.days-tbl tbody tr.row-done td{ background:#f4fbf7; }
.dash-page.dp-daily table.days-tbl tbody tr.row-done:hover td{ background:#eaf7f0; }
.dash-page.dp-daily table.days-tbl tbody tr.row-undone td{ background:#fff8f8; }
.dash-page.dp-daily table.days-tbl tbody tr.row-undone:hover td{ background:#fdeef0; }
.dash-page.dp-daily table.days-tbl tbody td{ border-bottom:1px solid #eef2fb; border-right:1px solid #f2f5fc; }
.dash-page.dp-daily table.days-tbl tbody td.cell-date{ background:#f8fafd; }
.dash-page.dp-daily table.days-tbl tbody td.cell-date .date-main{ color:var(--d-t1); font-weight:700; }
.dash-page.dp-daily table.days-tbl tbody td.cell-date .date-sub{ color:var(--d-purple-600); font-weight:600; }
.dash-page.dp-daily table.days-tbl .cell-inp,
.dash-page.dp-daily table.days-tbl .cell-sel{
  border:1px solid transparent; background:transparent; border-radius:9px;
  transition:.15s; font-size:13px;
}
.dash-page.dp-daily table.days-tbl .cell-inp:hover,
.dash-page.dp-daily table.days-tbl .cell-sel:hover{ border-color:#d8e3f8; background:#fff; }
.dash-page.dp-daily table.days-tbl .cell-inp:focus,
.dash-page.dp-daily table.days-tbl .cell-sel:focus{
  border-color:#7c5cfc; background:#fff; box-shadow:0 0 0 3px rgba(124,92,252,.15);
}
.dash-page.dp-daily table.days-tbl .row-del{
  border:1px solid var(--d-line); background:#fff; color:var(--d-t3);
}
.dash-page.dp-daily table.days-tbl .row-del:hover{ background:#f56c6c; color:#fff; border-color:#f56c6c; }
.dash-page.dp-daily table.days-tbl tfoot td{
  background:linear-gradient(135deg,#f5f8ff 0%,#f3f7ff 100%);
  border-top:1px solid #e8edf8; border-right:1px solid #eef2fb;
}
.dash-page.dp-daily table.days-tbl tfoot .ft-lbl{ color:var(--d-blue-700); }
.dash-page.dp-daily table.days-tbl tfoot .ft-num{ color:var(--d-purple-700); }
.dash-page.dp-daily table.days-tbl tfoot .ft-pct{ color:var(--d-purple-700); }
.dash-page.dp-daily table.days-tbl tfoot .ft-remark{ color:var(--d-t2); }
.dash-page.dp-daily table.days-tbl tbody td.empty-row{ padding:34px 0; color:var(--d-t3); }
.dash-page.dp-daily table.days-tbl .time-range input.cell-time{
  border:1px solid transparent; background:transparent; border-radius:7px;
  font-size:12.5px; color:var(--d-t1); padding:3px 4px; font-variant-numeric:tabular-nums;
}
.dash-page.dp-daily table.days-tbl .time-range input.cell-time:hover{ border-color:#d8e3f8; background:#fff; }
.dash-page.dp-daily table.days-tbl .time-range input.cell-time:focus{
  border-color:#7c5cfc; background:#fff; box-shadow:0 0 0 3px rgba(124,92,252,.15); outline:none;
}
.dash-page.dp-daily table.days-tbl .time-range i{ color:var(--d-t3); }

/* ---------- 当日复盘（折叠） ---------- */
.dash-page .day-review{
  margin-top:16px; border:1px solid var(--d-line); border-radius:16px;
  background:#fafbfe; overflow:hidden;
}
.dash-page .day-review > summary{
  display:flex; align-items:center; gap:10px; cursor:pointer; list-style:none;
  padding:13px 18px; font-size:13.5px; font-weight:600; color:var(--d-t2);
  background:linear-gradient(135deg,#f5f8ff 0%,#f3f7ff 100%);
  transition:.16s; user-select:none;
}
.dash-page .day-review > summary::-webkit-details-marker{ display:none; }
.dash-page .day-review > summary::before{
  content:''; width:7px; height:7px; border-right:2px solid var(--d-purple-600);
  border-bottom:2px solid var(--d-purple-600); transform:rotate(-45deg);
  transition:transform .18s ease; flex-shrink:0;
}
.dash-page .day-review[open] > summary::before{ transform:rotate(45deg); }
.dash-page .day-review > summary:hover{ color:var(--d-purple-700); }
.dash-page .day-review .rv-ttl{ flex:1; }
.dash-page .day-review .rv-count{
  font-size:11.5px; font-weight:600; color:var(--d-purple-700);
  background:#fff; border:1px solid #e0e8f8; border-radius:999px; padding:2px 9px;
}
.dash-page .day-review-body{ padding:14px 18px 18px; display:flex; flex-direction:column; gap:12px; }
.dash-page .day-review .rv-item{
  background:#fff; border:1px solid var(--d-line); border-radius:14px; padding:13px 15px;
}
.dash-page .day-review .rv-head{
  display:flex; align-items:center; gap:7px; font-size:13px;
  color:var(--d-t1); font-weight:600; margin-bottom:10px; line-height:19px;
}
.dash-page .day-review .rv-head b{ color:var(--d-purple-600); }
.dash-page .day-review .rv-head .rv-time{
  margin-left:auto; font-size:11.5px; font-weight:500; color:var(--d-t3);
  background:var(--d-line-2); border-radius:999px; padding:2px 9px; flex-shrink:0;
}
.dash-page .day-review .rv-grid{ display:grid; grid-template-columns:1fr 1fr; gap:12px; }
.dash-page .day-review .rv-field{ display:flex; flex-direction:column; gap:6px; min-width:0; }
.dash-page .day-review .rv-field label{ font-size:11.5px; font-weight:600; color:var(--d-t3); }
.dash-page .day-review .rv-field textarea{
  width:100%; box-sizing:border-box; font-family:inherit; font-size:13px; color:var(--d-t1);
  background:#fafbfe; border:1px solid var(--d-line); border-radius:11px;
  padding:9px 11px; outline:none; resize:vertical; line-height:20px; transition:.16s;
}
.dash-page .day-review .rv-field textarea:hover{ background:#fff; border-color:#d8e3f8; }
.dash-page .day-review .rv-field textarea:focus{
  background:#fff; border-color:#7c5cfc; box-shadow:0 0 0 3px rgba(124,92,252,.15);
}

@media (max-width:1180px){
  .dash-page .dp-g4{ grid-template-columns:repeat(2,1fr); }
  .dash-page .dp-g3{ grid-template-columns:1fr; }
}
@media (max-width:820px){
  .dash-page .dp-g4{ grid-template-columns:1fr; }
  .dash-page .day-review .rv-grid{ grid-template-columns:1fr; }
  .dash-page .dp-card-h .dp-acts{ width:100%; margin-left:0; }
}


/* ============================================================
   今日好运签 · 叠层抽卡（仪表盘整行卡 · 每日 1 签 · 次日自动重置）
   牌堆/卡面作用域：.dash-page；全屏层 #fsOverlay 走全局
   ============================================================ */
.dash-page .fortune-body{
  display:grid; grid-template-columns:158px minmax(0,1fr); gap:16px; align-items:center; min-height:0;
}
.dash-page .deck{ position:relative; width:158px; height:214px; perspective:1100px; }
.dash-page .fcard{
  position:absolute; inset:0; border-radius:16px; cursor:pointer;
  transform-style:preserve-3d;
  transition:transform .55s cubic-bezier(.22,1.1,.36,1), box-shadow .4s ease, opacity .4s ease;
  box-shadow:0 0 0 1.5px rgba(255,255,255,.92), 0 2px 6px rgba(47,107,255,.08), 0 14px 30px rgba(108,92,252,.13);
  will-change:transform;
}
.dash-page .fc-face{
  position:absolute; inset:0; border-radius:16px; backface-visibility:hidden; overflow:hidden;
  display:flex; flex-direction:column;
}
.dash-page .fc-back{
  background:
    radial-gradient(120px 90px at 50% 0%, rgba(255,255,255,.28) 0%, rgba(255,255,255,0) 70%),
    linear-gradient(150deg,#6b5cfc 0%,#7c5cfc 45%,#5b8dff 100%);
  border:1px solid rgba(255,255,255,.35);
  align-items:center; justify-content:center; gap:10px;
}
.dash-page .fc-back::before{
  content:''; position:absolute; inset:9px; border:1.5px solid rgba(255,255,255,.45);
  border-radius:11px; pointer-events:none;
}
.dash-page .fc-back .fm{ color:#fff; font-size:25px; font-weight:700; letter-spacing:6px; text-indent:6px;
  text-shadow:0 2px 10px rgba(30,40,120,.35); font-family:"PingFang SC","Microsoft YaHei",serif; }
.dash-page .fc-back .fs{ color:rgba(255,255,255,.85); font-size:10.5px; letter-spacing:3px; text-indent:3px; }
.dash-page .fc-front{
  transform:rotateY(180deg);
  background:linear-gradient(165deg,#fffdf6 0%,#fff 55%,#f8f6ff 100%);
  border:1px solid #eee7d8; padding:13px 14px 11px;
}
.dash-page .ff-top{ display:flex; align-items:center; justify-content:space-between; }
.dash-page .ff-grade{ font-size:11.5px; font-weight:800; letter-spacing:1.5px; padding:2px 10px 2px 12px; border-radius:999px; }
.dash-page .ff-grade.g1{ background:#fdeeda; color:#b45309; border:1px solid #f8e3bd; }
.dash-page .ff-grade.g2{ background:#eef4ff; color:#2f6bff; border:1px solid #dbe7ff; }
.dash-page .ff-grade.g3{ background:#eefaf3; color:#0f8a52; border:1px solid #d6f2e3; }
.dash-page .ff-grade.g4{ background:#f3f0fa; color:#6b6a86; border:1px solid #e6e3f2; }
.dash-page .ff-grade.g5{ background:#fdeef0; color:#c25562; border:1px solid #f8dbe0; }
.dash-page .ff-no{ font-size:10.5px; color:#98a0b3; font-weight:600; letter-spacing:1px; }
.dash-page .ff-title{ margin-top:11px; font-size:15px; font-weight:800; letter-spacing:1px; color:#2b2f45;
  font-family:"PingFang SC","Microsoft YaHei",serif; }
.dash-page .ff-text{ margin-top:8px; font-size:12px; line-height:19px; color:#4a5165;
  font-family:"PingFang SC","Microsoft YaHei",serif; }
.dash-page .ff-tip{ margin-top:auto; padding-top:8px; border-top:1px dashed #eee7d8;
  font-size:11px; color:#8a8f9f; line-height:16px; }
.dash-page .ff-tip b{ color:#6b5cfc; font-weight:700; }
/* 叠牌：后面的牌逐张向左上错开、等比缩小，只在左上角露出窄边（不用向下堆叠） */
.dash-page .fcard[data-pos="0"]{ transform:translate(0,0) scale(1); z-index:5; }
.dash-page .fcard[data-pos="1"]{ transform:translate(-4px,-6px) scale(.976); z-index:4; filter:brightness(.995); }
.dash-page .fcard[data-pos="2"]{ transform:translate(-7px,-11px) scale(.952); z-index:3; filter:brightness(.99); }
.dash-page .fcard[data-pos="3"]{ transform:translate(-10px,-16px) scale(.928); z-index:2; filter:brightness(.985); }
.dash-page .fcard[data-pos="4"]{ transform:translate(-12px,-20px) scale(.904); z-index:1; filter:brightness(.98); }
.dash-page .fcard[data-pos="0"].pinned{
  transform:translateY(0) scale(1) rotateY(180deg);
  box-shadow:0 4px 12px rgba(47,107,255,.10), 0 18px 40px rgba(108,92,252,.18);
}
.dash-page .fcard[data-pos="0"].pinned:hover{ transform:translateY(-3px) scale(1.012) rotateY(180deg); }
.dash-page .fcard.drawing{ z-index:9; }
.dash-page .fcard.draw-lift{ transform:translateY(-26px) scale(1.06) rotate(-3deg); z-index:9;
  box-shadow:0 22px 52px rgba(64,50,180,.32), 0 0 0 4px rgba(124,92,252,.16); }
.dash-page .fcard.draw-out{ transform:translateY(-90px) scale(.8) rotate(-6deg); opacity:0; z-index:9; }
.dash-page .fortune-side{ display:flex; flex-direction:column; gap:12px; padding-left:6px; }
.dash-page .fs-btns{ display:flex; gap:9px; flex-wrap:wrap; }
.dash-page .fs-log{ display:flex; flex-direction:column; gap:7px; margin-top:2px; max-height:150px; overflow:auto; }
.dash-page .fs-log-item{
  display:flex; align-items:center; gap:8px; font-size:12px; color:#5b6478;
  background:#f8faff; border:1px solid #e8edf8; border-radius:10px; padding:6px 11px;
}
.dash-page .fs-log-item .lg{ font-weight:800; font-size:11px; }
.dash-page .fs-log-item .lg.g1{ color:#b45309; } .dash-page .fs-log-item .lg.g2{ color:#2f6bff; }
.dash-page .fs-log-item .lg.g3{ color:#0f8a52; } .dash-page .fs-log-item .lg.g4{ color:#6b6a86; }
.dash-page .fs-log-item .lg.g5{ color:#c25562; }
.dash-page .fs-log-item .lt{ flex:1; min-width:0; white-space:nowrap; overflow:hidden; text-overflow:ellipsis; }
.dash-page .fs-log-item .ld{ color:#98a0b3; font-size:11px; flex-shrink:0; }

/* —— 每日一签：整行卡内布局 / 状态条 / CTA / 说明 —— */
.dash-page .dp-fortune .fortune-body{ max-width:none; margin:0; }
.dash-page .dp-fortune .dp-card-h h2{ flex-shrink:0; white-space:nowrap; }
.dash-page .dp-fortune .dp-card-h .dp-hint{ overflow:hidden; text-overflow:ellipsis; white-space:nowrap; }
.dash-page .dp-fortune .fs-state{ max-width:none; padding:10px 13px; font-size:12px; gap:8px; flex-wrap:wrap; }
.dash-page .dp-fortune .fs-state-tip{ font-size:11.5px; padding:2px 9px; }
.dash-page .fs-state{
  display:flex; align-items:center; gap:10px; padding:12px 15px; border-radius:12px;
  font-size:13.5px; color:#4a5165; background:#f8faff; border:1px solid #e8edf8;
}
.dash-page .dp-fortune .fs-state-tx{ flex:1 1 auto; white-space:normal; line-height:19px;
  display:-webkit-box; -webkit-line-clamp:2; -webkit-box-orient:vertical; }
.dash-page .dp-fortune .fs-state-tx em{ margin-left:6px; font-size:11.5px; }
.dash-page .fs-state .fs-dot{ width:7px; height:7px; border-radius:50%; background:#c2c8d6; flex-shrink:0; }
.dash-page .fs-state.ready .fs-dot{ background:#2f6bff; box-shadow:0 0 0 4px rgba(47,107,255,.12); }
.dash-page .fs-state.done{ background:#f5fbf7; border-color:#d9f0e4; }
.dash-page .fs-state.done .fs-dot{ background:#0f8a52; box-shadow:0 0 0 4px rgba(15,138,82,.12); }
.dash-page .fs-state-tx{ flex:1; min-width:0; overflow:hidden; text-overflow:ellipsis; white-space:nowrap; }
.dash-page .fs-state-tx b{ font-weight:800; }
.dash-page .fs-state-tx b.g1{ color:#b45309; } .dash-page .fs-state-tx b.g2{ color:#2f6bff; }
.dash-page .fs-state-tx b.g3{ color:#0f8a52; } .dash-page .fs-state-tx b.g4{ color:#6b6a86; }
.dash-page .fs-state-tx b.g5{ color:#c25562; }
.dash-page .fs-state-tx em{ font-style:normal; margin-left:8px; font-size:12px; color:#98a0b3; }
.dash-page .fs-state-tip{
  flex-shrink:0; font-size:12px; font-weight:600; color:#6b5cfc;
  background:#f1eeff; border-radius:999px; padding:3px 11px;
}
.dash-page .fs-state.done .fs-state-tip{ color:#0f8a52; background:#e9f7f0; }
.dash-page .fs-foot{ display:flex; align-items:center; justify-content:space-between; gap:22px; flex-wrap:wrap; }
.dash-page .dp-fortune .fs-foot{ flex-direction:column; align-items:stretch; gap:11px; }
.dash-page .fs-cta{ display:flex; align-items:center; gap:12px; }
.dash-page .dp-fortune .fs-cta{ justify-content:space-between; gap:10px; }
.dash-page .fs-draw{ min-width:116px; }
.dash-page .dp-fortune .fs-draw{ min-width:108px; flex:0 0 auto; }
.dash-page .fs-draw-done, .dash-page .fs-draw:disabled{
  opacity:.6; cursor:not-allowed; background:#eef2fa !important; border:1px solid #e3e9f5;
  color:#8a93a8 !important; box-shadow:none !important;
}
.dash-page .fs-note{ font-size:12px; color:#98a0b3; }
.dash-page .fs-meta{ display:flex; align-items:center; gap:24px; }
.dash-page .fs-meta-i{ text-align:right; line-height:1.3; }
.dash-page .fs-meta-i b{ display:block; font-size:15px; font-weight:800; color:#2b2f45; font-variant-numeric:tabular-nums; }
.dash-page .fs-meta-i span{ font-size:11.5px; color:#98a0b3; }
/* 半栏卡内：指标行铺满、左对齐、字号降一档 */
.dash-page .dp-fortune .fs-meta{ justify-content:space-between; gap:10px; padding-top:2px; }
.dash-page .dp-fortune .fs-meta-i{ text-align:left; }
.dash-page .dp-fortune .fs-meta-i b{ font-size:14px; }
.dash-page .dp-fortune .fs-meta-i span{ font-size:11px; }
.dash-page .dp-fortune .fs-note{ font-size:11.5px; }

/* —— 今日评语（抽中后右侧展示：档位/签题/时间 + 一段大白话点评） —— */
.dash-page .fs-review{ display:none; }
.dash-page .fs-review.on{ display:block; }
.dash-page .dp-fortune .fs-review{ padding-left:10px; border-left:2px solid #e6e3f2; }
.dash-page .fs-review .rv-h{ display:flex; align-items:center; flex-wrap:wrap; gap:5px; font-size:12.5px; font-weight:600; color:#3c4356; }
.dash-page .fs-review .rv-h b{ font-weight:800; flex-shrink:0; }
.dash-page .fs-review .rv-h b.g1{ color:#b45309; } .dash-page .fs-review .rv-h b.g2{ color:#2f6bff; }
.dash-page .fs-review .rv-h b.g3{ color:#0f8a52; } .dash-page .fs-review .rv-h b.g4{ color:#6b6a86; }
.dash-page .fs-review .rv-h b.g5{ color:#c25562; }
.dash-page .fs-review .rv-h em{ font-style:normal; margin-left:auto; font-size:11px; font-weight:500; color:#98a0b3; }
.dash-page .fs-review .rv-tx{ margin:8px 0 0; font-size:12.5px; line-height:20px; color:#4a5165; }
.dash-page .fs-review .rv-tx b{ color:#6b5cfc; font-weight:700; }

/* 图表行并排（≥1181px 时抽签卡只占半栏）：牌堆再收一档，指标行让位给状态条与按钮 */
@media (min-width:1181px){
  .dash-page .dp-fortune .fortune-body{ grid-template-columns:150px minmax(0,1fr); gap:12px 14px; }
  .dash-page .dp-fortune .deck{ width:150px; height:200px; }
  .dash-page .dp-fortune .fc-back .fm{ font-size:23px; letter-spacing:5px; text-indent:5px; }
  /* 正签：窄牌堆内做行数/字号收敛，避免签文溢出卡面（点卡可看全屏完整版） */
  .dash-page .dp-fortune .fc-front{ padding:11px 12px 9px; }
  .dash-page .dp-fortune .ff-title{ margin-top:9px; font-size:14px; }
  .dash-page .dp-fortune .ff-text{ margin-top:7px; font-size:11px; line-height:16px;
    display:-webkit-box; -webkit-line-clamp:4; -webkit-box-orient:vertical; overflow:hidden; }
  .dash-page .dp-fortune .ff-tip{ display:none; }   /* 窄牌堆内略去宜忌，点卡进全屏看完整版 */
  .dash-page .dp-fortune .fs-meta{ display:none; }
  .dash-page .dp-fortune .fs-cta{ flex-direction:column; align-items:stretch; gap:7px; }
  .dash-page .dp-fortune .fs-draw{ width:100%; min-width:0; text-align:center; }
  .dash-page .dp-fortune .fs-note{ text-align:center; }
}

/* ---------- 全屏抽卡层：背景虚化 + 大卡飞入翻面 + 彩花 ---------- */
#fsOverlay{
  position:fixed; inset:0; z-index:20000; display:none; align-items:center; justify-content:center;
  background:rgba(16,20,46,.46);
  backdrop-filter:blur(18px) saturate(1.3); -webkit-backdrop-filter:blur(18px) saturate(1.3);
  opacity:0; transition:opacity .34s ease;
}
#fsOverlay.on{ display:flex; opacity:1; }
#fsCanvas{ position:fixed; inset:0; z-index:20005; pointer-events:none; }
#fsStage{ position:relative; z-index:20010; perspective:1500px;
  display:flex; flex-direction:column; align-items:center; gap:26px; }
.fs-tipbar{
  position:fixed; top:26px; left:0; right:0; z-index:20012; text-align:center;
  color:rgba(255,255,255,.82); font-size:13px; font-weight:600; letter-spacing:3px;
  text-shadow:0 2px 12px rgba(10,14,40,.5); opacity:0; transition:opacity .5s ease .3s;
}
#fsOverlay.on .fs-tipbar{ opacity:1; }
.fs-tipbar small{ display:block; margin-top:5px; font-size:11px; font-weight:500; letter-spacing:1px; color:rgba(255,255,255,.55); }
.fs-big{
  position:relative; width:330px; height:460px; transform-style:preserve-3d;
  transition:transform .8s cubic-bezier(.2,1.12,.34,1), opacity .4s ease;
  will-change:transform;
}
.fs-big.init{ transform:translateY(110px) scale(.52) rotateX(22deg); opacity:0; }
.fs-big.in{ transform:translateY(0) scale(1) rotateX(0deg); opacity:1; }
.fs-big.flip{ transform:rotateY(180deg) scale(1.02); }
.fs-big.leave{ transform:translateY(70px) scale(.6) rotateX(14deg); opacity:0; }
.fs-face{ position:absolute; inset:0; border-radius:24px; backface-visibility:hidden; overflow:hidden;
  display:flex; flex-direction:column; }
.fs-face.back{
  background:
    radial-gradient(220px 160px at 50% 0%, rgba(255,255,255,.30) 0%, rgba(255,255,255,0) 70%),
    linear-gradient(150deg,#6b5cfc 0%,#7c5cfc 45%,#5b8dff 100%);
  border:1px solid rgba(255,255,255,.38);
  align-items:center; justify-content:center; gap:16px;
  box-shadow:0 30px 70px rgba(30,20,90,.42), 0 0 0 1px rgba(255,255,255,.10) inset;
}
.fs-face.back::before{ content:''; position:absolute; inset:16px; border:2px solid rgba(255,255,255,.42); border-radius:16px; }
.fs-face.back::after{
  content:'吉'; position:absolute; font-size:190px; font-weight:700; color:rgba(255,255,255,.08);
  font-family:"PingFang SC","Microsoft YaHei",serif; bottom:-28px; right:-14px; line-height:1;
}
.fs-face.back .bm{ color:#fff; font-size:46px; font-weight:700; letter-spacing:12px; text-indent:12px;
  text-shadow:0 4px 18px rgba(25,35,110,.4); font-family:"PingFang SC","Microsoft YaHei",serif; z-index:1; }
.fs-face.back .bs{ color:rgba(255,255,255,.86); font-size:12px; letter-spacing:5px; text-indent:5px; z-index:1; }
.fs-face.back .bd{ margin-top:12px; width:56px; height:3px; border-radius:999px; background:rgba(255,255,255,.5); z-index:1; }
.fs-face.front{
  transform:rotateY(180deg);
  background:linear-gradient(168deg,#fffdf5 0%,#ffffff 52%,#f8f6ff 100%);
  border:1px solid #f0e8d5; padding:30px 28px 24px;
  box-shadow:0 30px 70px rgba(30,20,90,.32);
}
.fs-face.front::after{ content:''; position:absolute; inset:11px; border:1px solid rgba(196,170,110,.30); border-radius:16px; pointer-events:none; }
.fs-f-top{ display:flex; align-items:center; justify-content:space-between; }
.fs-f-grade{ font-size:14px; font-weight:800; letter-spacing:3px; padding:6px 18px 6px 21px; border-radius:999px; }
.fs-f-grade.g1{ background:#fdeeda; color:#b45309; border:1px solid #f6dfb4; }
.fs-f-grade.g2{ background:#eef4ff; color:#2f6bff; border:1px solid #d5e3ff; }
.fs-f-grade.g3{ background:#eefaf3; color:#0f8a52; border:1px solid #d2f0e0; }
.fs-f-grade.g4{ background:#f3f0fa; color:#6b6a86; border:1px solid #e5e2f1; }
.fs-f-grade.g5{ background:#fdeef0; color:#c25562; border:1px solid #f7d8de; }
.fs-f-no{ font-size:12px; color:#a8b0c2; font-weight:600; letter-spacing:1.5px; }
.fs-f-title{ margin-top:26px; font-size:32px; font-weight:800; letter-spacing:3px; color:#262a40;
  font-family:"PingFang SC","Microsoft YaHei",serif; line-height:44px; }
.fs-f-rule{ margin-top:16px; width:44px; height:3px; border-radius:999px;
  background:linear-gradient(90deg,#7c5cfc,#5b8dff); }
.fs-f-text{ margin-top:20px; font-size:15.5px; line-height:32px; color:#4a5165;
  font-family:"PingFang SC","Microsoft YaHei",serif; }
.fs-f-tip{ margin-top:auto; padding-top:18px; border-top:1px dashed #ece3d0;
  font-size:13px; color:#8a8f9f; line-height:24px; }
.fs-f-tip b{ color:#6b5cfc; font-weight:700; }
.fs-acts{ display:flex; align-items:center; gap:14px; flex-wrap:wrap; justify-content:center;
  opacity:0; transform:translateY(14px);
  transition:opacity .45s ease .55s, transform .45s ease .55s; }
.fs-next{ font-size:12.5px; font-weight:500; letter-spacing:.5px; color:rgba(255,255,255,.72); }
#fsOverlay.on .fs-acts{ opacity:1; transform:translateY(0); }
#fsOverlay .dp-btn{
  border:1px solid rgba(255,255,255,.6); background:rgba(255,255,255,.94); color:#5b6478; cursor:pointer;
  font-family:inherit; font-size:13.5px; font-weight:600; padding:11px 24px; border-radius:14px; transition:.16s;
}
#fsOverlay .dp-btn:hover{ background:#fff; color:#2f6bff; }
#fsOverlay .dp-btn-primary, #fsOverlay .dp-btn-primary:hover{
  border:none; color:#fff;
  background:linear-gradient(135deg,#2f6bff 0%,#6b5cfc 55%,#7c5cfc 100%);
  box-shadow:0 8px 20px rgba(47,107,255,.30);
}
#fsOverlay .dp-btn:disabled{ opacity:.55; cursor:default; }
.fs-close{
  position:fixed; top:24px; right:30px; z-index:20015; width:38px; height:38px; border-radius:50%;
  border:1px solid rgba(255,255,255,.35); background:rgba(255,255,255,.14); color:#fff;
  font-size:19px; line-height:1; cursor:pointer; display:grid; place-items:center; transition:.18s;
}
.fs-close:hover{ background:rgba(255,255,255,.28); }
.fs-halo{
  position:absolute; left:50%; top:50%; width:340px; height:340px; border-radius:50%;
  transform:translate(-50%,-50%) scale(.3); opacity:0; pointer-events:none; z-index:-1;
  background:radial-gradient(circle, rgba(167,139,250,.55) 0%, rgba(124,92,252,.22) 40%, rgba(124,92,252,0) 70%);
}
.fs-halo.on{ animation:haloA 1.5s cubic-bezier(.2,.7,.3,1) forwards; }
@keyframes haloA{
  0%{ transform:translate(-50%,-50%) scale(.3); opacity:0; }
  22%{ opacity:1; }
  100%{ transform:translate(-50%,-50%) scale(2.4); opacity:0; }
}
@media (max-width:1180px){
  .dash-page .fortune-body{ grid-template-columns:minmax(0,1fr); }
  .dash-page .deck{ margin:0 auto; }
}


/* =========================================================
   商机 CRM 重设计（2026-09-15）
   作用域 .ops-page + crm- 前缀：不污染全局 .card / .kpi / .pill / .empty / .chip
   设计基调：克制留白 / 单一强调色 / 无 emoji / 无渐变（主按钮除外）
   ========================================================= */
.ops-page { display: block; }
.ops-page .crm-num { font-variant-numeric: tabular-nums; font-feature-settings: "tnum"; }

/* ---------------- KPI 概览 ---------------- */
.ops-page .crm-kpis { display: grid; grid-template-columns: repeat(4, 1fr); gap: 14px; margin-bottom: 16px; }
.ops-page .crm-kpi {
  background: var(--surface); border: 1px solid var(--border); border-radius: var(--r-lg);
  padding: 16px 18px; display: flex; gap: 14px; align-items: flex-start; box-shadow: var(--sh-sm);
  position: relative; overflow: hidden; transition: box-shadow .18s, transform .18s;
}
.ops-page .crm-kpi::before { content: ""; position: absolute; left: 0; top: 0; bottom: 0; width: 3px; background: var(--kc); opacity: .85; }
.ops-page .crm-kpi:hover { box-shadow: var(--sh); transform: translateY(-1px); }
.ops-page .crm-kpi .ico { width: 42px; height: 42px; border-radius: 11px; flex: none; display: grid; place-items: center; background: var(--kbg); color: var(--kc); }
.ops-page .crm-kpi .ico svg { width: 20px; height: 20px; }
.ops-page .crm-kpi .bd { min-width: 0; flex: 1; }
.ops-page .crm-kpi .lb { font-size: 12.5px; color: var(--text-2); font-weight: 500; }
.ops-page .crm-kpi .vl { font-size: 26px; font-weight: 700; letter-spacing: -.5px; margin-top: 2px; line-height: 1.2; color: var(--text); }
.ops-page .crm-kpi .ht { font-size: 11.5px; color: var(--text-3); margin-top: 5px; display: flex; align-items: center; gap: 5px; }
.ops-page .crm-kpi .ht b { color: var(--kc); font-weight: 600; }
.ops-page .crm-kpi.k-blue   { --kc: var(--brand-600); --kbg: var(--brand-50); }
.ops-page .crm-kpi.k-purple { --kc: var(--purple);    --kbg: var(--purple-bg); }
.ops-page .crm-kpi.k-green  { --kc: var(--success);   --kbg: var(--success-bg); }
.ops-page .crm-kpi.k-amber  { --kc: var(--warning);   --kbg: var(--warning-bg); }

/* ---------------- 主卡片 ---------------- */
/* 注意：不能 overflow:hidden —— 工具栏里的下拉菜单需要溢出显示 */
.ops-page .crm-card { background: var(--surface); border: 1px solid var(--border); border-radius: var(--r-lg); box-shadow: var(--sh-sm); }
.ops-page .crm-card + .crm-card { margin-top: 16px; }
.ops-page .crm-card > .crm-tools:first-child { border-radius: var(--r-lg) var(--r-lg) 0 0; }
.ops-page .crm-card > .crm-card-ft:last-child { border-radius: 0 0 var(--r-lg) var(--r-lg); }

/* ---------------- 工具栏 ---------------- */
.ops-page .crm-tools { display: flex; align-items: center; justify-content: space-between; gap: 14px; padding: 13px 18px; border-bottom: 1px solid var(--border-2); background: var(--surface-2); flex-wrap: wrap; }
.ops-page .crm-tools-l { display: flex; align-items: center; gap: 9px; flex-wrap: wrap; }
.ops-page .crm-tools-r { display: flex; align-items: center; gap: 9px; }

.ops-page .crm-btn {
  display: inline-flex; align-items: center; gap: 7px; height: 36px; padding: 0 14px; border-radius: 9px;
  border: 1px solid var(--border); background: #fff; color: var(--text); font-size: 13px; font-weight: 500;
  cursor: pointer; transition: all .16s; white-space: nowrap; font-family: inherit; box-sizing: border-box;
}
.ops-page .crm-btn svg { width: 15px; height: 15px; flex: none; }
.ops-page .crm-btn:hover { border-color: var(--brand-200); color: var(--brand-600); background: #fbfdff; }
.ops-page .crm-btn.primary { background: var(--brand-600); border-color: var(--brand-600); color: #fff; box-shadow: 0 1px 2px rgba(31,111,178,.35); }
.ops-page .crm-btn.primary:hover { background: var(--brand-700); border-color: var(--brand-700); color: #fff; }
.ops-page .crm-btn.icon { width: 36px; padding: 0; justify-content: center; }
.ops-page .crm-btn.ghost { border-color: transparent; background: transparent; color: var(--text-2); padding: 0 10px; }
.ops-page .crm-btn.ghost:hover { background: #eef2f7; border-color: transparent; color: var(--text); }
.ops-page .crm-btn[disabled] { opacity: .45; cursor: not-allowed; }
.ops-page .crm-btn[disabled]:hover { border-color: var(--border); color: var(--text); background: #fff; }

.ops-page .crm-count {
  display: inline-flex; align-items: center; gap: 6px; font-size: 12.5px; color: var(--text-2);
  background: #fff; border: 1px solid var(--border); border-radius: var(--r-full); padding: 6px 13px; box-shadow: var(--sh-sm);
}
.ops-page .crm-count b { color: var(--text); font-weight: 600; }
.ops-page .crm-count .sep { width: 1px; height: 11px; background: var(--border); display: inline-block; }

/* 下拉菜单（用原生 details，无需额外 JS 状态） */
.ops-page .crm-dd { position: relative; }
.ops-page .crm-dd > summary { list-style: none; }
.ops-page .crm-dd > summary::-webkit-details-marker { display: none; }
.ops-page .crm-dd[open] > summary { border-color: var(--brand-300); color: var(--brand-600); }
.ops-page .crm-menu {
  position: absolute; top: calc(100% + 6px); left: 0; z-index: 60; min-width: 178px; background: #fff;
  border: 1px solid var(--border); border-radius: 10px; box-shadow: var(--sh-md); padding: 6px;
  display: flex; flex-direction: column; gap: 2px;
}
.ops-page .crm-menu.r { left: auto; right: 0; }
.ops-page .crm-menu button {
  display: flex; align-items: center; gap: 8px; width: 100%; text-align: left; border: 0; background: transparent;
  color: var(--text); font-size: 13px; font-family: inherit; padding: 8px 11px; border-radius: 7px; cursor: pointer; transition: background .14s;
}
.ops-page .crm-menu button:hover { background: var(--brand-50); color: var(--brand-700); }
.ops-page .crm-menu button.danger { color: var(--danger); }
.ops-page .crm-menu button.danger:hover { background: var(--danger-bg); color: var(--danger); }
.ops-page .crm-menu .msep { height: 1px; background: var(--border-2); margin: 4px 2px; }

/* ---------------- 筛选 ---------------- */
.ops-page .crm-filter { background: var(--surface-2); border-bottom: 1px solid var(--border-2); }
.ops-page .crm-fbar { display: flex; align-items: center; gap: 10px; padding: 12px 18px; flex-wrap: wrap; }
.ops-page .crm-ftoggle {
  display: inline-flex; align-items: center; gap: 7px; height: 34px; padding: 0 13px; border-radius: 9px;
  border: 1px solid var(--border); background: #fff; color: var(--text); font-size: 13px; font-weight: 500;
  cursor: pointer; transition: all .16s; font-family: inherit;
}
.ops-page .crm-ftoggle svg { width: 15px; height: 15px; color: var(--text-2); }
.ops-page .crm-ftoggle:hover { border-color: var(--brand-200); color: var(--brand-600); }
.ops-page .crm-ftoggle.on { border-color: var(--brand-300); color: var(--brand-600); box-shadow: 0 0 0 3px rgba(47,127,209,.10); }
.ops-page .crm-ftoggle .nb {
  min-width: 18px; height: 18px; padding: 0 5px; border-radius: var(--r-full); background: var(--brand-600);
  color: #fff; font-size: 10.5px; font-weight: 700; display: grid; place-items: center; line-height: 1;
}
.ops-page .crm-factive { display: flex; align-items: center; gap: 7px; flex-wrap: wrap; flex: 1; min-width: 0; }
.ops-page .crm-fchip {
  display: inline-flex; align-items: center; gap: 6px; height: 28px; padding: 0 6px 0 10px; border-radius: var(--r-full);
  background: var(--brand-50); border: 1px solid var(--brand-100); color: var(--brand-700); font-size: 12px; font-weight: 500;
}
.ops-page .crm-fchip button {
  border: 0; background: transparent; color: var(--brand-500); cursor: pointer; padding: 0; width: 16px; height: 16px;
  border-radius: 50%; display: grid; place-items: center; font-size: 14px; line-height: 1; font-family: inherit;
}
.ops-page .crm-fchip button:hover { background: var(--brand-100); color: var(--brand-700); }
.ops-page .crm-fnone { font-size: 12.5px; color: var(--text-3); }
.ops-page .crm-freset { margin-left: auto; }
.ops-page .crm-fpanel { max-height: 560px; overflow: hidden; transition: max-height .3s cubic-bezier(.4,0,.2,1), opacity .2s; opacity: 1; }
.ops-page .crm-fpanel.closed { max-height: 0; opacity: 0; }
.ops-page .crm-finner { padding: 4px 18px 16px; display: grid; gap: 13px; }
.ops-page .crm-frow { display: grid; grid-template-columns: 104px 1fr; gap: 14px; align-items: start; }
.ops-page .crm-frow > label { display: block; margin: 0; font-size: 12.5px; color: var(--text-2); font-weight: 500; padding-top: 8px; white-space: nowrap; }
.ops-page .crm-frow .well { display: flex; align-items: center; gap: 7px; flex-wrap: wrap; }
.ops-page .crm-frow.cols { grid-template-columns: 104px minmax(0,1.32fr) 104px minmax(0,1fr); }

/* 选项胶囊 */
.ops-page .crm-opt {
  display: inline-flex; align-items: center; gap: 6px; height: 32px; padding: 0 13px; border-radius: 8px;
  border: 1px solid var(--border); background: #fff; color: var(--text-2); font-size: 12.5px; font-weight: 500;
  cursor: pointer; transition: all .15s; font-family: inherit;
}
.ops-page .crm-opt:hover { border-color: var(--brand-200); color: var(--brand-600); }
.ops-page .crm-opt.on { background: var(--brand-600); border-color: var(--brand-600); color: #fff; box-shadow: 0 1px 2px rgba(31,111,178,.3); }
.ops-page .crm-opt.on:hover { background: var(--brand-700); border-color: var(--brand-700); color: #fff; }
.ops-page .crm-opt.more { color: var(--brand-600); border-style: dashed; border-color: var(--brand-200); background: #fbfdff; }
.ops-page .crm-lvopt { min-width: 38px; justify-content: center; font-weight: 700; }
.ops-page .crm-lvopt[data-lv="A"] { --lv: var(--danger); }
.ops-page .crm-lvopt[data-lv="B"] { --lv: var(--warning); }
.ops-page .crm-lvopt[data-lv="C"] { --lv: var(--text-2); }
.ops-page .crm-lvopt[data-lv="S"] { --lv: #a8791a; }
.ops-page .crm-lvopt.on { background: var(--lv); border-color: var(--lv); color: #fff; }

/* 输入框 / 日期 / 搜索 */
.ops-page .crm-inp {
  height: 34px; border: 1px solid var(--border); border-radius: 9px; background: #fff; padding: 0 11px;
  font-size: 12.5px; color: var(--text); font-family: inherit; outline: none; transition: all .15s; width: auto;
}
.ops-page .crm-inp:hover { border-color: #d3dde8; }
.ops-page .crm-inp:focus { border-color: var(--brand-500); box-shadow: 0 0 0 3px rgba(47,127,209,.12); }
.ops-page .crm-inp[type=date] { width: 134px; }
.ops-page .crm-tilde { color: var(--text-3); font-size: 13px; }
.ops-page .crm-quick { display: inline-flex; gap: 5px; margin-left: 8px; }
.ops-page .crm-quick button {
  height: 28px; padding: 0 9px; border-radius: var(--r-full); border: 1px solid var(--border); background: #fff;
  font-size: 11px; color: var(--text-2); cursor: pointer; transition: all .15s; white-space: nowrap; font-family: inherit;
}
.ops-page .crm-quick button:hover { border-color: var(--brand-200); color: var(--brand-600); background: #fbfdff; }
.ops-page .crm-search { position: relative; flex: 1; min-width: 200px; max-width: 460px; }
.ops-page .crm-search > svg { position: absolute; left: 11px; top: 50%; transform: translateY(-50%); width: 15px; height: 15px; color: var(--text-3); pointer-events: none; }
.ops-page .crm-search .crm-inp { width: 100%; padding-left: 33px; }

/* ---------------- 表格 ---------------- */
.ops-page .crm-tblwrap { overflow-x: auto; }
.ops-page table.crm-tbl { width: 100%; border-collapse: separate; border-spacing: 0; font-size: 13px; margin-top: 0; }
.ops-page .crm-tbl thead th {
  position: sticky; top: 0; z-index: 2; background: #f7f9fc; text-align: left; font-size: 11.5px; font-weight: 600;
  color: var(--text-3); letter-spacing: .3px; padding: 11px 12px; border-bottom: 1px solid var(--border);
  white-space: nowrap; border-radius: 0;
}
.ops-page .crm-tbl thead th.ta-r { text-align: right; }
.ops-page .crm-tbl tbody td { padding: 7px 12px; border-bottom: 1px solid var(--border-2); vertical-align: middle; transition: background .15s; }
.ops-page .crm-tbl tbody tr:nth-child(even) { background: #fcfdfe; }
.ops-page .crm-tbl tbody tr:hover { background: var(--brand-50); }
.ops-page .crm-tbl tbody tr:hover td:first-child { box-shadow: inset 3px 0 0 var(--brand-600); }
.ops-page .crm-tbl tbody tr:last-child td { border-bottom: 0; }
.ops-page .crm-tbl tbody td.tc { text-align: center; }

/* 单元格控件：默认"隐形"，hover 才显形 —— 既像表格又好编辑 */
.ops-page .crm-cell {
  width: 100%; height: 34px; border: 1px solid transparent; border-radius: 8px; background: transparent;
  padding: 0 9px; font-size: 13px; color: var(--text); font-family: inherit; outline: none; transition: all .15s; box-sizing: border-box;
}
.ops-page .crm-cell:hover { background: #fff; border-color: var(--border); }
.ops-page .crm-cell:focus { background: #fff; border-color: var(--brand-500); box-shadow: 0 0 0 3px rgba(47,127,209,.12); }
.ops-page .crm-cell.crm-num-cell { text-align: right; font-variant-numeric: tabular-nums; }
.ops-page select.crm-cell {
  appearance: none; -webkit-appearance: none; cursor: pointer;
  background-image: url("data:image/svg+xml;utf8,<svg xmlns='http://www.w3.org/2000/svg' width='12' height='12' viewBox='0 0 24 24' fill='none' stroke='%238a96a3' stroke-width='2.6' stroke-linecap='round' stroke-linejoin='round'><path d='M6 9l6 6 6-6'/></svg>");
  background-repeat: no-repeat; background-position: right 9px center; padding-right: 26px;
}
.ops-page .crm-cell.crm-strong { font-weight: 600; }
.ops-page .crm-cell.crm-money { font-weight: 600; font-variant-numeric: tabular-nums; }
/* 只读（全员视图） */
.ops-page .crm-cell:disabled { background: transparent; border-color: transparent; color: var(--text); font-weight: inherit; opacity: 1; cursor: default; }
.ops-page select.crm-cell:disabled { color: var(--text-2); background-image: none; padding-right: 9px; }

/* 状态胶囊 —— 直接改值：外层包裹 + ::after 画与文字同色的箭头 */
.ops-page .crm-pickwrap { position: relative; display: inline-flex; align-items: center; border-radius: var(--r-full); max-width: 100%; }
.ops-page .crm-pickwrap::after {
  content: ""; position: absolute; right: 9px; top: 50%; width: 6px; height: 6px; pointer-events: none;
  border-right: 1.9px solid currentColor; border-bottom: 1.9px solid currentColor;
  transform: translateY(-68%) rotate(45deg); opacity: .55;
}
.ops-page .crm-pickwrap > select.crm-cell {
  width: auto; max-width: 100%; min-width: 0; height: 26px; border-radius: var(--r-full); border-color: transparent;
  background: transparent; color: inherit; font-size: 12px; font-weight: 500; padding: 0 22px 0 12px; cursor: pointer; background-image: none;
}
.ops-page .crm-pickwrap:hover > select.crm-cell { border-color: currentColor; background: #fff; }
.ops-page .crm-pickwrap:focus-within > select.crm-cell { border-color: var(--brand-500); background: #fff; box-shadow: 0 0 0 3px rgba(47,127,209,.12); }
.ops-page .crm-lvwrap { border-radius: 8px; }
.ops-page .crm-lvwrap::after { right: 8px; }
.ops-page .crm-lvwrap.lv-A { background: var(--danger-bg); color: var(--danger); }
.ops-page .crm-lvwrap.lv-B { background: var(--warning-bg); color: var(--warning); }
.ops-page .crm-lvwrap.lv-C { background: #eef2f7; color: var(--text-2); }
.ops-page .crm-lvwrap.lv-S { background: #fbf1da; color: #a8791a; }
.ops-page .crm-lvwrap.lv-none { background: transparent; color: var(--text-3); }
.ops-page .crm-lvwrap > select.crm-cell { border-radius: 8px; text-align: center; font-weight: 700; font-size: 12.5px; padding: 0 20px 0 10px; }

/* 状态胶囊配色（业务字典关键词映射，见 opStatusCls） */
.ops-page .crm-pill { display: inline-flex; align-items: center; gap: 6px; height: 26px; padding: 0 11px; border-radius: var(--r-full); font-size: 12px; font-weight: 500; white-space: nowrap; }
.ops-page .crm-pill .d { width: 5px; height: 5px; border-radius: 50%; background: currentColor; opacity: .9; flex: none; }
.ops-page .p-green  { background: var(--success-bg); color: #0f7c3f; }
.ops-page .p-blue   { background: var(--brand-50);   color: var(--brand-700); }
.ops-page .p-purple { background: var(--purple-bg);  color: #6446bb; }
.ops-page .p-amber  { background: var(--warning-bg); color: #a8791a; }
.ops-page .p-gray   { background: #eef2f7;           color: #6b7683; }

/* 删除按钮：hover 行才出现 */
.ops-page .crm-row-del {
  width: 30px; height: 30px; border-radius: 8px; border: 1px solid transparent; background: transparent;
  color: var(--text-3); cursor: pointer; display: grid; place-items: center; opacity: 0; transition: all .15s;
}
.ops-page .crm-tbl tbody tr:hover .crm-row-del { opacity: 1; }
.ops-page .crm-row-del:hover { background: var(--danger-bg); border-color: #f3c5bd; color: var(--danger); }
.ops-page .crm-row-del svg { width: 15px; height: 15px; }
.ops-page .crm-row-del[disabled] { display: none; }

/* 空状态 */
.ops-page .crm-empty { padding: 60px 20px; text-align: center; color: var(--text-3); }
.ops-page .crm-empty .ei { width: 56px; height: 56px; border-radius: 16px; background: var(--brand-50); color: var(--brand-500); display: grid; place-items: center; margin: 0 auto 14px; }
.ops-page .crm-empty .ei svg { width: 26px; height: 26px; }
.ops-page .crm-empty h3 { margin: 0 0 6px; font-size: 14.5px; color: var(--text); font-weight: 600; }
.ops-page .crm-empty p { margin: 0; font-size: 12.5px; }

/* 底部条 */
.ops-page .crm-card-ft { display: flex; align-items: center; justify-content: space-between; gap: 12px; padding: 11px 18px; border-top: 1px solid var(--border-2); background: var(--surface-2); font-size: 12.5px; color: var(--text-3); flex-wrap: wrap; }
.ops-page .crm-hint { display: flex; align-items: center; gap: 7px; }
.ops-page .crm-hint kbd {
  font-family: inherit; font-size: 11px; background: #fff; border: 1px solid var(--border); border-bottom-width: 2px;
  border-radius: 5px; padding: 1px 6px; color: var(--text-2);
}

/* 只读（全员视图）：纯文本报表 */
.ops-page .crm-owner { color: var(--brand-700); font-weight: 600; }
.ops-page .crm-txt { font-size: 13px; color: var(--text); line-height: 1.45; padding: 0 9px; min-height: 34px; display: flex; align-items: center; white-space: nowrap; overflow: hidden; text-overflow: ellipsis; }
.ops-page .crm-txt.strong { font-weight: 600; }
.ops-page .crm-txt.num { justify-content: flex-end; font-variant-numeric: tabular-nums; font-weight: 600; }
.ops-page .crm-txt.wrap { display: block; padding: 8px 9px; white-space: normal; word-break: break-word; }
.ops-page .crm-txt .dim { color: var(--text-3); }
.ops-page .crm-lvbadge { display: inline-flex; align-items: center; justify-content: center; min-width: 34px; height: 26px; padding: 0 9px; border-radius: 7px; font-size: 12px; font-weight: 700; }
.ops-page .crm-lvbadge.lv-A { background: var(--danger-bg); color: var(--danger); }
.ops-page .crm-lvbadge.lv-B { background: var(--warning-bg); color: var(--warning); }
.ops-page .crm-lvbadge.lv-C { background: #eef2f7; color: var(--text-2); }
.ops-page .crm-lvbadge.lv-S { background: #fbf1da; color: #a8791a; }
.ops-page .crm-lvbadge.lv-none { background: transparent; color: var(--text-3); }

@media (max-width: 1240px) {
  .ops-page .crm-kpis { grid-template-columns: repeat(2, 1fr); }
  .ops-page .crm-frow, .ops-page .crm-frow.cols { grid-template-columns: 1fr; gap: 6px; }
  .ops-page .crm-frow > label { padding-top: 0; }
}
@media (max-width: 720px) {
  .ops-page .crm-kpis { grid-template-columns: 1fr; }
  .ops-page .crm-tools { padding: 11px 13px; }
  .ops-page .crm-fbar { padding: 11px 13px; }
  .ops-page .crm-finner { padding: 4px 13px 14px; }
}
@media (hover: none) {
  .ops-page .crm-tbl tbody tr .crm-row-del { opacity: 1; }
}

/* =========================================================
   商机 CRM 二期（2026-09-15）：跟进弹窗 + 到期时间
   「进度」列移入跟进弹窗；表格新增「到期时间」「跟进」两列
   ========================================================= */

/* 空值：不要出现"骨架屏"似的灰胶囊，统一做成弱化的破折号 */
.ops-page .crm-pickwrap.p-none { background: transparent; color: var(--text-3); }
.ops-page .crm-pill.p-none { background: transparent; border: 1px dashed var(--border); color: var(--text-3); }
.ops-page .crm-pill.p-none .d { display: none; }

/* 到期时间：逾期红 / 7 天内临期琥珀 */
.ops-page .crm-cell.crm-date { padding: 0 7px; font-size: 12.5px; }
.ops-page .crm-cell.due-over { color: var(--danger); font-weight: 600; }
.ops-page .crm-cell.due-soon { color: #a8791a; font-weight: 600; }
.ops-page .crm-txt.due-over { color: var(--danger); font-weight: 600; }
.ops-page .crm-txt.due-soon { color: #a8791a; font-weight: 600; }

/* 行内操作：跟进按钮 + 删除 */
.ops-page .crm-rowact { display: flex; align-items: center; justify-content: flex-end; gap: 3px; }
.ops-page .crm-follow {
  display: inline-flex; align-items: center; gap: 5px; height: 28px; padding: 0 10px; border-radius: 8px;
  border: 1px solid var(--border); background: #fff; color: var(--brand-600); font-size: 12px; font-weight: 500;
  cursor: pointer; transition: all .15s; font-family: inherit; white-space: nowrap;
}
.ops-page .crm-follow svg { width: 13px; height: 13px; flex: none; }
.ops-page .crm-follow:hover { background: var(--brand-600); border-color: var(--brand-600); color: #fff; }
.ops-page .crm-follow .nb {
  min-width: 15px; height: 15px; padding: 0 4px; border-radius: var(--r-full); background: var(--brand-50);
  color: var(--brand-700); font-size: 10px; font-weight: 700; display: grid; place-items: center; line-height: 1;
}
.ops-page .crm-follow:hover .nb { background: rgba(255,255,255,.24); color: #fff; }
.ops-page .crm-row-del { width: 28px; height: 28px; }

/* ---------------- 跟进弹窗 ---------------- */
.ops-page .crm-mask {
  position: fixed; inset: 0; z-index: 400; background: rgba(17,28,42,.42);
  display: flex; align-items: flex-start; justify-content: center; padding: 44px 20px 28px;
  overflow-y: auto; animation: crmFade .16s ease-out;
}
@keyframes crmFade { from { opacity: 0 } to { opacity: 1 } }
.ops-page .crm-modal {
  width: 100%; max-width: 720px; background: #fff; border-radius: 14px;
  box-shadow: 0 18px 52px rgba(16,30,48,.26); display: flex; flex-direction: column;
  animation: crmPop .2s cubic-bezier(.2,.8,.3,1);
}
@keyframes crmPop { from { opacity: 0; transform: translateY(-10px) } to { opacity: 1; transform: none } }
.ops-page .crm-mhd { display: flex; align-items: center; justify-content: space-between; padding: 15px 20px; border-bottom: 1px solid var(--border-2); }
.ops-page .crm-mhd h3 { margin: 0; font-size: 15px; font-weight: 600; color: var(--text); letter-spacing: -.2px; }
.ops-page .crm-mx {
  width: 30px; height: 30px; border-radius: 8px; border: 0; background: transparent; color: var(--text-3);
  font-size: 20px; line-height: 1; cursor: pointer; display: grid; place-items: center; font-family: inherit; transition: all .15s;
}
.ops-page .crm-mx:hover { background: #eef2f7; color: var(--text); }
.ops-page .crm-mbd { padding: 18px 20px; display: grid; gap: 18px; max-height: calc(100vh - 200px); overflow-y: auto; }

/* 信息栅格 */
.ops-page .crm-info { display: grid; grid-template-columns: 86px minmax(0,1fr) 86px minmax(0,1fr); border: 1px solid var(--border); border-radius: 10px; overflow: hidden; }
.ops-page .crm-info .k {
  background: var(--surface-2); color: var(--text-2); font-size: 12.5px; font-weight: 500;
  padding: 10px 12px; border-bottom: 1px solid var(--border-2); display: flex; align-items: center;
}
.ops-page .crm-info .v {
  font-size: 13px; color: var(--text); padding: 10px 12px; border-bottom: 1px solid var(--border-2);
  border-left: 1px solid var(--border-2); display: flex; align-items: center; gap: 8px; min-width: 0; word-break: break-all;
}
.ops-page .crm-info > .k:nth-last-child(-n+2),
.ops-page .crm-info > .v:nth-last-child(-n+2) { border-bottom: 0; }
.ops-page .crm-info .v .dim { color: var(--text-3); }
.ops-page .crm-due-tag { font-size: 11px; font-weight: 600; padding: 2px 7px; border-radius: var(--r-full); background: #eef2f7; color: var(--text-2); white-space: nowrap; }
.ops-page .crm-due-tag.due-over { background: var(--danger-bg); color: var(--danger); }
.ops-page .crm-due-tag.due-soon { background: var(--warning-bg); color: #a8791a; }

/* 小节 */
.ops-page .crm-ms { display: grid; gap: 10px; }
.ops-page .crm-ms-h { display: flex; align-items: center; gap: 9px; font-size: 13px; font-weight: 600; color: var(--text); }
.ops-page .crm-ms-n { font-size: 11.5px; color: var(--text-3); font-weight: 500; }
.ops-page .crm-prog {
  width: 100%; box-sizing: border-box; border: 1px solid var(--border); border-radius: 10px; background: var(--surface-2);
  padding: 10px 12px; font-family: inherit; font-size: 13px; line-height: 1.6; color: var(--text);
  outline: none; resize: vertical; min-height: 52px; transition: all .15s;
}
.ops-page .crm-prog:focus { background: #fff; border-color: var(--brand-500); box-shadow: 0 0 0 3px rgba(47,127,209,.12); }
.ops-page .crm-prog[readonly] { color: var(--text-2); resize: none; }

/* 时间轴 */
.ops-page .crm-tl { display: block; }
.ops-page .crm-tl-item { display: grid; grid-template-columns: 14px minmax(0,1fr) 24px; gap: 10px; position: relative; padding-bottom: 15px; }
.ops-page .crm-tl-item:last-child { padding-bottom: 0; }
.ops-page .crm-tl-item::before { content: ""; position: absolute; left: 6px; top: 15px; bottom: 0; width: 1px; background: var(--border); }
.ops-page .crm-tl-item:last-child::before { display: none; }
.ops-page .crm-tl-dot { width: 9px; height: 9px; border-radius: 50%; background: var(--brand-600); margin: 5px 0 0 2px; box-shadow: 0 0 0 3px rgba(47,127,209,.13); }
.ops-page .crm-tl-item:first-child .crm-tl-dot { background: var(--success); box-shadow: 0 0 0 3px rgba(22,145,84,.14); }
.ops-page .crm-tl-t { font-size: 11.5px; color: var(--text-3); margin-bottom: 3px; display: flex; align-items: center; gap: 8px; font-variant-numeric: tabular-nums; }
.ops-page .crm-tl-by { color: var(--brand-700); font-weight: 600; }
.ops-page .crm-tl-x { font-size: 13px; color: var(--text); line-height: 1.62; white-space: pre-wrap; word-break: break-word; }
.ops-page .crm-tl-del {
  width: 24px; height: 24px; border-radius: 6px; border: 0; background: transparent; color: var(--text-3);
  font-size: 15px; line-height: 1; cursor: pointer; font-family: inherit; opacity: 0; transition: all .15s;
}
.ops-page .crm-tl-item:hover .crm-tl-del { opacity: 1; }
.ops-page .crm-tl-del:hover { background: var(--danger-bg); color: var(--danger); }
.ops-page .crm-tl-empty { text-align: center; color: var(--text-3); font-size: 12.5px; padding: 22px 0; border: 1px dashed var(--border); border-radius: 10px; background: var(--surface-2); }

/* 新增跟进 */
.ops-page .crm-compose { border: 1px solid var(--border); border-radius: 10px; overflow: hidden; margin-top: 4px; }
.ops-page .crm-compose-hd { padding: 9px 13px; background: var(--surface-2); border-bottom: 1px solid var(--border-2); font-size: 12.5px; font-weight: 600; color: var(--text-2); }
.ops-page .crm-ta {
  display: block; width: 100%; box-sizing: border-box; min-height: 88px; max-height: 200px; overflow-y: auto;
  border: 0; outline: none; resize: none; padding: 11px 13px; font-family: inherit; font-size: 13px; line-height: 1.62; color: var(--text);
}
.ops-page .crm-ta::placeholder { color: var(--text-3); }
.ops-page .crm-compose-ft { display: flex; align-items: center; gap: 12px; padding: 10px 13px; border-top: 1px solid var(--border-2); background: var(--surface-2); flex-wrap: wrap; }
.ops-page .crm-cc { font-size: 11.5px; color: var(--text-3); font-variant-numeric: tabular-nums; }
.ops-page .crm-cc b { color: var(--text-2); font-weight: 600; }
.ops-page .crm-compose-hint { font-size: 11.5px; color: var(--text-3); flex: 1; min-width: 130px; }

/* 弹窗底部 */
.ops-page .crm-mft { display: flex; align-items: center; justify-content: space-between; gap: 12px; padding: 12px 20px; border-top: 1px solid var(--border-2); background: var(--surface-2); border-radius: 0 0 14px 14px; flex-wrap: wrap; }
.ops-page .crm-mft-hint { font-size: 11.5px; color: var(--text-3); }

@media (max-width: 720px) {
  .ops-page .crm-mask { padding: 16px 12px 20px; }
  .ops-page .crm-info { grid-template-columns: 78px minmax(0,1fr); }
  .ops-page .crm-mbd { padding: 14px 14px; max-height: calc(100vh - 140px); }
}

/* =========================================================
   商机 CRM 二期 · 收尾（表格宽度收敛 + 行内降噪）
   ========================================================= */
/* 原生 <input type=date> 的 intrinsic 最小宽约 147px，会把两列日期撑爆表格；
   用 max-width 强制封顶（th + td 都要写，auto 布局下才生效） */
.ops-page .crm-tbl thead th.crm-col-date,
.ops-page .crm-tbl tbody td.crm-col-date { max-width: 124px; }
.ops-page .crm-tbl tbody td.crm-col-date { padding-left: 6px; padding-right: 6px; }
.ops-page .crm-tbl tbody td.crm-col-date .crm-cell { padding: 0 4px; font-size: 12.5px; }

/* 行内只剩「跟进」一个动作 */
.ops-page .crm-rowact { justify-content: center; }
.ops-page .crm-follow { padding: 0 9px; gap: 4px; }

/* 弹窗底部：删除商机（弱化处理，靠左） */
.ops-page .crm-mft-l { display: flex; align-items: center; gap: 12px; flex-wrap: wrap; }
.ops-page .crm-btn.ghost.danger { color: var(--danger); }
.ops-page .crm-btn.ghost.danger:hover { background: var(--danger-bg); color: var(--danger); }

/* 金额列：内部左右内边距收窄，避免 ¥88,000 被裁成 88,00 */
.ops-page .crm-tbl tbody td .crm-cell.crm-money { padding: 0 6px; }
/* 表格内下拉：箭头贴边一点，给选项文字让出宽度 */
.ops-page .crm-tbl tbody select.crm-cell { background-position: right 6px center; padding-right: 22px; }

/* =========================================================
   商机 CRM 三期 + 仪表板客户预警
   ========================================================= */

/* ---------- 1. 表格列宽：auto → fixed + 百分比 ----------
   原方案用「固定 px 宽 + 仅客户名称给 min-width」，auto 布局下剩余空间
   会被唯一可伸缩的那列全部吃掉 —— 表现就是「客户名称超宽、后面几列被挤扁」。
   改成 table-layout:fixed + 百分比，列宽由表头一次定死，各列按内容权重
   均匀分配，不再随内容抖动。窄屏（<900px 容器）整体横向滚动，避免压成一团。 */
/* min-width 取 860 —— 1180 视口下卡片内宽约 870，仍不出现滚动条（与二期验证口径一致）；
   再窄就横向滚动，好过把 9 列压成一团。 */
.ops-page table.crm-tbl { table-layout: fixed; min-width: 860px; }
.ops-page .crm-tbl thead th { overflow: hidden; text-overflow: ellipsis; padding: 11px 9px; }
.ops-page .crm-tbl tbody td { padding: 7px 9px; overflow: hidden; }
/* 单元格控件必须能被列宽压住（原生 <input type=date> 的 intrinsic 最小宽约 147px） */
.ops-page .crm-tbl .crm-cell,
.ops-page .crm-tbl input.crm-cell,
.ops-page .crm-tbl select.crm-cell { max-width: 100%; min-width: 0; box-sizing: border-box; }
/* fixed 布局下这两个 max-width 已无意义，留着反而会让 td 与列宽错位 */
.ops-page .crm-tbl thead th.crm-col-date,
.ops-page .crm-tbl tbody td.crm-col-date { max-width: none; }
.ops-page .crm-tbl tbody td .crm-cell.crm-date { padding: 0 6px; font-size: 12.5px; }
/* 客户名称是唯一会超长的文本列，超出用省略号而不是撑破布局 */
.ops-page .crm-tbl tbody td .crm-cell.crm-strong { text-overflow: ellipsis; }

/* ---------- 2. 弹窗「当前进度」改为只读展示 ---------- */
.ops-page .crm-prog-ro {
  border: 1px solid var(--border); border-radius: 10px; background: var(--surface-2);
  padding: 10px 12px; font-size: 13px; line-height: 1.65; color: var(--text);
  min-height: 52px; white-space: pre-wrap; word-break: break-word; box-sizing: border-box;
}
.ops-page .crm-prog-ro.empty { color: var(--text-3); }
.ops-page .crm-ms-n.readonly-tag { color: var(--brand-600); }

/* ---------- 3. 顶栏预警铃铛 ---------- */
.alert-bell {
  position: relative; width: 36px; height: 36px; border-radius: 11px;
  border: 1px solid var(--border); background: var(--surface); color: var(--text-2);
  display: inline-flex; align-items: center; justify-content: center; cursor: pointer; transition: .15s;
}
.alert-bell:hover { color: var(--brand-600); border-color: var(--brand-500); background: var(--brand-50); }
.alert-bell svg { width: 18px; height: 18px; display: block; }
.alert-bell.hot { color: #d93a30; border-color: #f6c7c3; background: #fdeceb; }
.alert-bell.hot svg { animation: abSwing 2.6s ease-in-out infinite; transform-origin: top center; }
@keyframes abSwing {
  0%, 84%, 100% { transform: rotate(0); }
  87% { transform: rotate(11deg); } 90% { transform: rotate(-9deg); }
  93% { transform: rotate(6deg); }  96% { transform: rotate(-4deg); }
}
.alert-bell .ab-nb {
  position: absolute; top: -5px; right: -5px; min-width: 17px; height: 17px; padding: 0 4px;
  border-radius: 999px; background: #e8483f; color: #fff; font-size: 10.5px; font-weight: 700;
  line-height: 17px; text-align: center; box-shadow: 0 2px 6px rgba(232,72,63,.4);
  font-variant-numeric: tabular-nums; box-sizing: border-box;
}

/* ---------- 4. 仪表板「客户预警」卡 ---------- */
.dash-page .dp-ico.dp-red { background: linear-gradient(140deg, #ff8a80, #e8483f); box-shadow: 0 5px 12px rgba(232,72,63,.28); }
.dash-page .dp-alertcard { display: flex; flex-direction: column; }

/* 分级统计（可点筛选） */
.dash-page .dp-asegs { display: grid; grid-template-columns: repeat(4, 1fr); gap: 8px; margin: -4px 0 14px; }
.dash-page .dp-aseg {
  display: flex; flex-direction: column; gap: 1px; align-items: flex-start;
  padding: 8px 11px; border-radius: 12px; border: 1px solid var(--d-line);
  background: #fff; cursor: pointer; transition: .15s; font-family: inherit; text-align: left;
}
.dash-page .dp-aseg:hover { border-color: #cfd9ea; }
.dash-page .dp-aseg .vl { font-size: 17px; font-weight: 700; line-height: 1.15; color: var(--d-t1); font-variant-numeric: tabular-nums; }
.dash-page .dp-aseg .lb { font-size: 11.5px; font-weight: 500; color: var(--d-t3); white-space: nowrap; }
.dash-page .dp-aseg.s-over .vl { color: #d93a30; }
.dash-page .dp-aseg.s-d7 .vl { color: #c8790a; }
.dash-page .dp-aseg.s-d30 .vl { color: #2f6bff; }
.dash-page .dp-aseg.on { background: var(--d-blue-50); border-color: #bfd3ff; }
.dash-page .dp-aseg.s-over.on { background: #fdeceb; border-color: #f6c7c3; }
.dash-page .dp-aseg.s-d7.on { background: #fdf3e2; border-color: #f4ddb4; }
.dash-page .dp-aseg.s-all.on { background: var(--d-line-2); border-color: var(--d-line); }

/* 预警明细表 */
.dash-page .dp-awrap { overflow-x: auto; }
.dash-page table.dp-atbl { width: 100%; table-layout: fixed; border-collapse: separate; border-spacing: 0; margin: 0; font-size: 12.5px; }
.dash-page .dp-atbl thead th {
  text-align: left; font-size: 11px; font-weight: 600; color: var(--d-t3); letter-spacing: .3px;
  padding: 0 8px 8px; border-bottom: 1px solid var(--d-line); white-space: nowrap; background: none;
}
.dash-page .dp-atbl thead th.ta-r { text-align: right; }
.dash-page .dp-atbl tbody td { padding: 9px 8px; border-bottom: 1px solid var(--d-line-2); vertical-align: middle; overflow: hidden; }
.dash-page .dp-atbl tbody tr:last-child td { border-bottom: none; }
.dash-page .dp-atbl tbody tr td:first-child { box-shadow: inset 3px 0 0 transparent; }
.dash-page .dp-atbl tbody tr.t-over td:first-child { box-shadow: inset 3px 0 0 #e8483f; }
.dash-page .dp-atbl tbody tr.t-d7 td:first-child { box-shadow: inset 3px 0 0 #f0a020; }
.dash-page .dp-atbl tbody tr.t-d30 td:first-child { box-shadow: inset 3px 0 0 #7c5cfc; }
.dash-page .dp-atbl tbody tr:hover { background: #fafcff; }
.dash-page .dp-atbl .cn { font-size: 13px; font-weight: 600; color: var(--d-t1); white-space: nowrap; overflow: hidden; text-overflow: ellipsis; }
.dash-page .dp-atbl .sub { font-size: 11px; color: var(--d-t3); margin-top: 2px; white-space: nowrap; overflow: hidden; text-overflow: ellipsis; }
.dash-page .dp-atbl .sub .lv { display: inline-block; margin-left: 5px; padding: 0 5px; border-radius: 6px; background: var(--d-line-2); color: var(--d-t2); font-weight: 700; font-size: 10.5px; }
.dash-page .dp-atbl .dt { color: var(--d-t2); white-space: nowrap; font-variant-numeric: tabular-nums; }
.dash-page .dp-atbl .num { font-weight: 600; color: var(--d-t1); font-variant-numeric: tabular-nums; white-space: nowrap; }
.dash-page .dp-atbl .dim { color: var(--d-t3); font-weight: 400; }
.dash-page .dp-atbl .day { display: inline-block; padding: 2px 8px; border-radius: 999px; font-size: 11.5px; font-weight: 600; white-space: nowrap; }
.dash-page .dp-atbl .day.over { background: #fdeceb; color: #d93a30; }
.dash-page .dp-atbl .day.d7 { background: #fdf3e2; color: #b8760c; }
.dash-page .dp-atbl .day.d30 { background: #eef3ff; color: #2a5fd6; }
.dash-page .dp-ago {
  height: 26px; padding: 0 11px; border-radius: 999px; border: 1px solid var(--d-line);
  background: #fff; color: var(--d-t2); font-size: 11.5px; font-weight: 600;
  cursor: pointer; font-family: inherit; transition: .15s;
  white-space: nowrap; flex-shrink: 0;   /* 窄栏下「跟进」两个字不能被折成两行 */
}
.dash-page .dp-ago:hover { border-color: #bfd3ff; background: var(--d-blue-50); color: #2a5fd6; }
.dash-page .dp-amore { padding-top: 12px; font-size: 12px; color: var(--d-t3); }
.dash-page .dp-amore b { color: var(--d-t1); }
.dash-page .dp-amore a { color: #2f6bff; font-weight: 600; cursor: pointer; }

/* 底部：连接状态 + 浏览器提醒开关 */
.dash-page .dp-aft {
  display: flex; align-items: center; gap: 10px; padding-top: 12px; margin-top: auto;
  border-top: 1px solid var(--d-line-2);
}
.dash-page .dp-alive { display: inline-flex; align-items: center; gap: 6px; font-size: 11.5px; color: var(--d-t3); }
.dash-page .dp-alive i { width: 6px; height: 6px; border-radius: 50%; background: #c2c8d6; flex-shrink: 0; }
.dash-page .dp-alive.m-sse { color: #0f8a52; }
.dash-page .dp-alive.m-sse i { background: #18b26b; box-shadow: 0 0 0 3px rgba(24,178,107,.16); }
.dash-page .dp-alive.m-connecting i,
.dash-page .dp-alive.m-retry i { background: #f0a020; animation: alPulse 1.2s ease-in-out infinite; }
.dash-page .dp-alive.m-poll i { background: #7c5cfc; }
@keyframes alPulse { 0%, 100% { opacity: 1; } 50% { opacity: .25; } }
.dash-page .dp-anotice {
  margin-left: auto; height: 28px; padding: 0 12px; border-radius: 999px;
  border: 1px solid var(--d-line); background: #fff; color: var(--d-t2);
  font-size: 11.5px; font-weight: 600; cursor: pointer; font-family: inherit; transition: .15s;
}
.dash-page .dp-anotice:hover { border-color: #bfd3ff; background: var(--d-blue-50); color: #2a5fd6; }
.dash-page .dp-anotice.on { background: #eaf7ef; border-color: #bfe6cf; color: #0f8a52; }

@media (max-width: 820px) {
  .dash-page .dp-asegs { grid-template-columns: repeat(2, 1fr); }
}

/* =========================================================
   岗位 SOP · 重设计 (v2.74)
   目标：把"裸表单"变成有层级的清单卡片
   - 类别 → 彩色胶囊（按类别分配语义色，形成识别度）
   - 紧急程度 → 彩色 pill 下拉（红/蓝/灰三级语义）
   - 输入 → "静默输入"（无边框，hover/focus 才显形，降低视觉噪音）
   - 操作 → 圆形矢量图标按钮（行 hover 才高亮）
   ========================================================= */
.sop-card { padding: 18px 18px 12px; }

/* —— 卡片头：左标题+副标题 / 右主按钮 —— */
.sop-head { display: flex; align-items: flex-start; justify-content: space-between; gap: 16px; flex-wrap: wrap; margin-bottom: 6px; }
.sop-head-l { min-width: 0; }
.sop-head .sop-title { margin: 0 0 6px; font-size: 16px; letter-spacing: .2px; }
.sop-sub { margin: 0; font-size: 12px; color: var(--text-3); line-height: 1.5; }
.sop-sub b { color: var(--brand-600); font-weight: 700; }
.sop-sub-hot { color: var(--danger); font-weight: 600; }

.sop-add {
  display: inline-flex; align-items: center; gap: 6px; flex: 0 0 auto;
  padding: 9px 16px; border: none; border-radius: var(--r-full); cursor: pointer;
  font-size: 13px; font-weight: 600; color: #fff; font-family: inherit;
  background: linear-gradient(135deg, var(--brand-500), var(--brand-700));
  box-shadow: 0 4px 12px rgba(31,111,178,.26); transition: transform .16s, box-shadow .16s, background .16s;
}
.sop-add svg { width: 15px; height: 15px; flex: 0 0 auto; }
.sop-add:hover { transform: translateY(-1px); box-shadow: 0 8px 20px rgba(31,111,178,.34); }
.sop-add:active { transform: translateY(0); }
.sop-add.ghost { background: var(--brand-50); color: var(--brand-700); box-shadow: none; border: 1px solid var(--brand-200); }
.sop-add.ghost:hover { background: var(--brand-100); transform: none; }

/* —— 表格骨架 —— */
table.sop-tbl { margin-top: 4px; }
table.sop-tbl thead th {
  background: transparent; border-bottom: 1px solid var(--border);
  padding: 9px 10px; font-size: 11px; font-weight: 600; letter-spacing: .06em; color: var(--text-3);
}
table.sop-tbl tbody tr { position: relative; }
table.sop-tbl tbody td { padding: 5px 10px; border-bottom: 1px solid var(--border-2); vertical-align: middle; }
table.sop-tbl tbody tr:hover td { background: var(--brand-50); }
table.sop-tbl tbody tr:hover td:first-child { box-shadow: inset 3px 0 0 var(--brand-400); }
table.sop-tbl tbody tr:last-child td { border-bottom: none; }
table.sop-tbl tbody tr:first-child td { border-top: 1px solid var(--border-2); }

/* —— 静默输入：默认像文本，hover/focus 才出现输入框 —— */
.sop-inp, .sop-sel {
  width: 100%; box-sizing: border-box; border: 1px solid transparent; background: transparent;
  border-radius: var(--r-sm); padding: 8px 10px; font-size: 13px; color: var(--text); font-family: inherit;
  outline: none; transition: border-color .15s, background .15s, box-shadow .15s;
}
.sop-inp::placeholder { color: var(--text-3); opacity: .7; }
.sop-inp:hover, .sop-sel:hover { border-color: var(--border); background: #fff; }
.sop-inp:focus, .sop-sel:focus { border-color: var(--brand-400); background: #fff; box-shadow: 0 0 0 3px var(--brand-100); }
.sop-c-item .sop-inp { font-weight: 500; }

/* —— 类别胶囊 —— */
.sop-chip-inp {
  font-weight: 700; text-align: center; font-size: 12px; padding: 6px 9px;
  border-radius: var(--r-full); letter-spacing: .3px;
}
.tone-blue   { background-color: #eef5fd; color: #1b5fa8; border-color: #dbe9f8; }
.tone-green  { background-color: #e8f6ee; color: #15803d; border-color: #cdead9; }
.tone-purple { background-color: #f1ebfd; color: #6d4bc4; border-color: #e2d6fa; }
.tone-amber  { background-color: #fdf3e0; color: #b06a09; border-color: #f6e3c2; }
.tone-rose   { background-color: #fdeceb; color: #c0392b; border-color: #f8d8d4; }
.tone-cyan   { background-color: #e6f6fa; color: #0e7490; border-color: #cdeaf2; }
.tone-slate  { background-color: #f1f4f8; color: #5b6776; border-color: #e3e8ef; }

/* —— 紧急程度：彩色 pill 下拉（自绘箭头） —— */
.sop-urg {
  font-weight: 700; font-size: 12px; text-align: center; padding: 6px 26px 6px 12px; border-radius: var(--r-full);
  appearance: none; -webkit-appearance: none; cursor: pointer;
  background-image: url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='%236b7787' stroke-width='2.6' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='M6 9l6 6 6-6'/%3E%3C/svg%3E");
  background-repeat: no-repeat; background-position: right 9px center; background-size: 11px 11px;
}
.t-urgent { background-color: #fdecea; color: #c0392b; border-color: #f6d5d1; }
.t-normal { background-color: #eef5fd; color: #1b5fa8; border-color: #dbe9f8; }
.t-minor  { background-color: #f1f4f8; color: #7a8694; border-color: #e3e8ef; }

/* —— 频率：中性 pill（弱化，避免与紧急程度抢焦点） —— */
.sop-freq-inp { text-align: center; font-size: 12px; font-weight: 600; color: var(--text-2); border-radius: var(--r-full); }

/* —— 操作：圆形矢量图标按钮 —— */
.sop-col-op { text-align: right; }
.sop-del {
  display: inline-flex; align-items: center; justify-content: center; width: 30px; height: 30px;
  border-radius: 50%; border: 1px solid transparent; background: transparent; color: var(--text-3);
  cursor: pointer; opacity: .38; transition: opacity .15s, background .15s, color .15s, border-color .15s;
}
.sop-del svg { width: 15px; height: 15px; }
table.sop-tbl tbody tr:hover .sop-del { opacity: 1; }
.sop-del:hover { background: var(--danger-bg); color: var(--danger); border-color: #f1c7c1; }
.sop-del:focus-visible { opacity: 1; outline: 2px solid var(--brand-300); outline-offset: 1px; }

/* —— 空状态 —— */
.sop-empty { text-align: center; padding: 44px 20px 38px; }
.sop-empty-ico {
  width: 62px; height: 62px; margin: 0 auto 14px; border-radius: 50%;
  display: flex; align-items: center; justify-content: center;
  background: linear-gradient(180deg, var(--brand-50), #fff); border: 1px solid var(--brand-100); color: var(--brand-400);
}
.sop-empty-ico svg { width: 30px; height: 30px; }
.sop-empty-t { font-size: 14px; font-weight: 700; color: var(--text); margin-bottom: 6px; }
.sop-empty-d { font-size: 12px; color: var(--text-3); line-height: 1.6; margin-bottom: 16px; }

/* —— 响应式：窄屏转卡片式 —— */
@media (max-width: 760px) {
  .sop-head { flex-direction: column; align-items: stretch; }
  .sop-add { justify-content: center; }
  table.sop-tbl colgroup, table.sop-tbl thead { display: none; }
  table.sop-tbl tbody tr {
    display: block; background: #fff; border: 1px solid var(--border); border-radius: var(--r);
    padding: 10px 12px; margin-bottom: 10px; box-shadow: var(--sh-sm);
  }
  table.sop-tbl tbody tr:hover td { background: transparent; }
  table.sop-tbl tbody tr:hover td:first-child { box-shadow: none; }
  table.sop-tbl tbody td { display: block; border: none; padding: 3px 0; }
  table.sop-tbl tbody td[data-label]:not([data-label=""])::before {
    content: attr(data-label); display: block; font-size: 11px; color: var(--text-3); margin-bottom: 2px; padding-left: 2px;
  }
  .sop-chip-inp, .sop-freq-inp { text-align: left; }
  .sop-urg { text-align: left; }
  .sop-col-op { position: absolute; right: 10px; top: 10px; padding: 0; }
  .sop-del { opacity: 1; }
}
