/* ═══════════════════════════════════════
   九川智汇管理工作台 — 响应式样式
   移动端 (<768px) + 桌面端 (≥768px)
   ═══════════════════════════════════════ */

* { margin: 0; padding: 0; box-sizing: border-box; }

:root {
  --primary: #4A90D9;
  --primary-dark: #3A7BC8;
  --bg: #F5F6F8;
  --card-bg: #FFFFFF;
  --text: #333333;
  --text-secondary: #888888;
  --border: #E8E8E8;
  --busy: #4A90D9;
  --idle: #BFBFBF;
  --warning: #FF4D4F;
  --success: #52C41A;
  --shadow: 0 1px 4px rgba(0,0,0,0.08);
  --sidebar-bg: #1E2A3A;
  --sidebar-text: #A0B4C8;
  --sidebar-active: #2D4055;
  --sidebar-width: 220px;
}

body {
  font-family: -apple-system, "Microsoft YaHei", "PingFang SC", sans-serif;
  font-size: 14px;
  color: var(--text);
  background: var(--bg);
  -webkit-tap-highlight-color: transparent;
}

#app {
  max-width: 480px;
  margin: 0 auto;
  min-height: 100vh;
  display: flex;
  flex-direction: column;
  position: relative;
}

/* ─── 顶部栏（v12 驾驶舱改造：全局隐藏，信息下沉到各模块驾驶舱头部） ─── */
.top-bar { display: none !important; }
.top-title { font-size: 18px; font-weight: 600; }
.top-user { font-size: 13px; opacity: 0.9; }
.top-datetime { display: none; }

/* ─── 用户切换器 + 权限标签 ─── */
.user-switcher {
  font-size: 12px;
  padding: 3px 8px;
  border: 1px solid rgba(255,255,255,0.3);
  border-radius: 6px;
  background: rgba(255,255,255,0.1);
  color: white;
  cursor: pointer;
  outline: none;
}
.user-switcher option { color: #333; }
.user-badge {
  font-size: 11px;
  padding: 2px 8px;
  border-radius: 10px;
  font-weight: 500;
  white-space: nowrap;
}
.user-badge.level-1 { background: #e74c3c; color: white; }
.user-badge.level-2 { background: #e67e22; color: white; }
.user-badge.level-3 { background: #3498db; color: white; }
.user-badge.level-4 { background: #2ecc71; color: white; }
.user-badge.level-5 { background: #95a5a6; color: white; }
.user-badge.level-99 { background: #7f8c8d; color: white; }

/* ─── 桌面端侧边栏（默认隐藏） ─── */
.sidebar { display: none; }
.filter-bar { display: none; }
.dashboard { display: none; }
.desktop-only { display: none; }

/* ─── 内容区 ─── */
.content {
  flex: 1;
  overflow-y: auto;
  -webkit-overflow-scrolling: touch;
  padding-bottom: 60px;
}
.page { padding: 12px; }
.hidden { display: none !important; }

/* ─── 下拉刷新 ─── */
.refresh-hint {
  text-align: center;
  font-size: 12px;
  color: var(--text-secondary);
  padding: 4px 0 8px;
  transition: opacity 0.3s;
}

/* ─── 孪生体卡片 ─── */
.twin-cards {
  display: flex;
  flex-direction: column;
  gap: 10px;
  margin-bottom: 16px;
}
.twin-card {
  background: var(--card-bg);
  border-radius: 12px;
  padding: 14px;
  box-shadow: var(--shadow);
  display: flex;
  align-items: center;
  gap: 12px;
  cursor: pointer;
  transition: transform 0.15s;
}
.twin-card:active { transform: scale(0.98); }
.twin-avatar {
  width: 44px; height: 44px;
  border-radius: 12px;
  display: flex; align-items: center; justify-content: center;
  font-size: 24px; flex-shrink: 0;
}
.twin-info { flex: 1; min-width: 0; }
.twin-name { font-size: 15px; font-weight: 600; }
.twin-role { font-size: 12px; color: var(--text-secondary); margin-top: 2px; }
.twin-stats {
  display: flex; gap: 12px;
  font-size: 11px; color: var(--text-secondary); margin-top: 4px;
}
.twin-stats span { white-space: nowrap; }
.status-dot { width: 8px; height: 8px; border-radius: 50%; flex-shrink: 0; }
.status-busy { background: var(--busy); }
.status-idle { background: var(--idle); }
.status-warning { background: var(--warning); }
.status-badge {
  font-size: 11px; padding: 2px 8px; border-radius: 10px; font-weight: 500;
}
.badge-busy { background: #E6F4FF; color: var(--busy); }
.badge-idle { background: #F5F5F5; color: var(--idle); }
.badge-warning { background: #FFF1F0; color: var(--warning); }

/* ─── 区块标题 ─── */
.section-header {
  display: flex; justify-content: space-between; align-items: center;
  margin: 16px 0 8px; font-size: 15px; font-weight: 600;
}
.section-time { font-size: 12px; color: var(--text-secondary); font-weight: 400; }

/* ─── 动态流 ─── */
.feed-list { display: flex; flex-direction: column; gap: 8px; }
.feed-item {
  background: var(--card-bg); border-radius: 10px; padding: 12px;
  box-shadow: var(--shadow); border-left: 3px solid var(--primary);
}
.feed-item .feed-time { font-size: 11px; color: var(--text-secondary); }
.feed-item .feed-title { font-size: 14px; margin-top: 2px; }
.feed-item .feed-desc { font-size: 12px; color: var(--text-secondary); margin-top: 4px; line-height: 1.5; }
.empty-hint { text-align: center; color: var(--text-secondary); padding: 40px 0; font-size: 13px; }

/* ─── 页面标题 ─── */
.page-header {
  display: flex; justify-content: space-between; align-items: center;
  margin-bottom: 12px; font-size: 17px; font-weight: 600;
}

/* ─── 按钮 ─── */
.btn-primary {
  background: var(--primary); color: #fff; border: none;
  border-radius: 8px; padding: 10px 16px; font-size: 14px;
  font-weight: 500; cursor: pointer;
}
.btn-primary:active { opacity: 0.85; }
.btn-sm { padding: 6px 12px; font-size: 13px; }
.btn-cancel {
  background: #F5F5F5; color: var(--text); border: none;
  border-radius: 8px; padding: 10px 16px; font-size: 14px; cursor: pointer;
}

/* ─── 输入框 ─── */
.input-field {
  width: 100%; padding: 10px 12px;
  border: 1px solid var(--border); border-radius: 8px;
  font-size: 14px; font-family: inherit; outline: none; background: #FAFAFA;
}
.input-field:focus { border-color: var(--primary); background: #fff; }
.form-row { display: flex; gap: 8px; margin-bottom: 8px; }
.form-row .input-field { flex: 1; }

/* ─── 任务表单 ─── */
.task-form {
  background: var(--card-bg); border-radius: 12px; padding: 14px;
  margin-bottom: 12px; box-shadow: var(--shadow);
  display: flex; flex-direction: column; gap: 8px;
}
.form-actions { display: flex; gap: 8px; justify-content: flex-end; }

/* ─── 任务列表 ─── */
.task-list { display: flex; flex-direction: column; gap: 8px; }
.task-card {
  background: var(--card-bg); border-radius: 10px; padding: 12px;
  box-shadow: var(--shadow); border-left: 3px solid transparent;
}
.task-card .task-title { font-size: 14px; font-weight: 500; }
.task-card .task-meta {
  display: flex; gap: 8px; margin-top: 6px;
  font-size: 11px; color: var(--text-secondary); flex-wrap: wrap;
}
.task-card .task-desc { font-size: 12px; color: var(--text-secondary); margin-top: 4px; }
.priority-high { color: var(--warning); }
.priority-medium { color: #FAAD14; }
.priority-low { color: var(--text-secondary); }
.task-card.priority-high { border-left-color: var(--warning); }
.task-card.priority-medium { border-left-color: #FAAD14; }
.task-card.priority-low { border-left-color: var(--border); }
.task-status { font-size: 11px; padding: 1px 6px; border-radius: 4px; }
.st-pending { background: #FFF7E6; color: #D48806; }
.st-in_progress { background: #E6F4FF; color: var(--primary); }
.st-completed { background: #F6FFED; color: var(--success); }
.st-cancelled { background: #F5F5F5; color: var(--text-secondary); }

/* ─── 审批列表 ─── */
.approval-list { display: flex; flex-direction: column; gap: 8px; }
.approval-card {
  background: var(--card-bg); border-radius: 10px; padding: 12px;
  box-shadow: var(--shadow); border-left: 3px solid var(--warning);
}
.approval-card .ap-header {
  display: flex; justify-content: space-between; align-items: center; margin-bottom: 6px;
}
.approval-card .ap-twin { font-size: 13px; font-weight: 600; }
.approval-card .ap-type { font-size: 11px; color: var(--text-secondary); }
.approval-card .ap-message { font-size: 13px; line-height: 1.5; margin: 6px 0; }
.approval-card .ap-target { font-size: 12px; color: var(--text-secondary); }
.approval-card .ap-actions {
  display: flex; gap: 8px; margin-top: 10px; justify-content: flex-end;
}
.btn-approve { background: var(--success); color: #fff; border: none; border-radius: 6px; padding: 6px 16px; font-size: 13px; cursor: pointer; }
.btn-reject { background: #FFF1F0; color: var(--warning); border: 1px solid var(--warning); border-radius: 6px; padding: 6px 16px; font-size: 13px; cursor: pointer; }

/* ─── 对话 ─── */
.chat-twin-select {
  padding: 4px 8px; border: 1px solid var(--border);
  border-radius: 6px; font-size: 13px; background: #fff;
}
.chat-messages { display: flex; flex-direction: column; gap: 8px; padding-bottom: 80px; }
.chat-bubble {
  max-width: 75%; padding: 10px 14px; border-radius: 12px;
  font-size: 14px; line-height: 1.6; word-break: break-word;
  white-space: pre-wrap;
}
.chat-bubble.user { align-self: flex-end; background: var(--primary); color: #fff; border-bottom-right-radius: 4px; }
.chat-bubble.assistant { align-self: flex-start; background: var(--card-bg); color: var(--text); border-bottom-left-radius: 4px; box-shadow: var(--shadow); white-space: normal; }
/* AI 回复富文本（renderMd 输出） */
.md-h { font-weight: 600; margin: 6px 0 4px; line-height: 1.4; }
.md-h1 { font-size: 15px; }
.md-h2 { font-size: 14px; }
.md-h3 { font-size: 14px; color: var(--primary); }
.md-h4 { font-size: 13px; color: var(--text-secondary); }
.md-p { margin: 3px 0; }
.md-hr { border: none; border-top: 1px solid var(--border); margin: 8px 0; }
.md-list { margin: 3px 0; }
.md-li { display: flex; gap: 6px; margin: 2px 0; padding-left: 2px; }
.md-bullet { color: var(--primary); flex-shrink: 0; }
.md-num { color: var(--primary); flex-shrink: 0; min-width: 18px; text-align: right; }
.md-li-text { flex: 1; }
.md-li-text strong, .md-p strong { color: var(--text); }
.chat-bubble.assistant code {
  background: #F0F2F5; border-radius: 4px; padding: 1px 5px;
  font-size: 12px; font-family: Consolas, Menlo, monospace; color: #C7254E;
}
.chat-input-bar {
  position: fixed; bottom: 56px; left: 0; right: 0;
  max-width: 480px; margin: 0 auto;
  display: flex; gap: 8px; padding: 8px 12px;
  background: #fff; border-top: 1px solid var(--border); z-index: 50;
}
.chat-input { flex: 1; }

/* ─── 知识库搜索 ─── */
.search-bar { display: flex; gap: 8px; margin-bottom: 12px; }
.search-bar .input-field { flex: 1; }
.kb-results { display: flex; flex-direction: column; gap: 8px; }
.kb-item { background: var(--card-bg); border-radius: 10px; padding: 12px; box-shadow: var(--shadow); }
.kb-item .kb-title { font-size: 14px; font-weight: 500; }
.kb-item .kb-meta { font-size: 11px; color: var(--text-secondary); margin-top: 4px; }
.kb-item .kb-snippet {
  font-size: 12px; color: var(--text-secondary); margin-top: 6px;
  line-height: 1.5; background: #F9F9F9; padding: 6px 8px; border-radius: 6px;
}
.kb-item .kb-snippet em { color: var(--warning); font-style: normal; }

/* ─── 底部导航（移动端） ─── */
.tab-bar {
  position: fixed; bottom: 0; left: 0; right: 0;
  max-width: 480px; margin: 0 auto;
  display: flex; background: #fff;
  border-top: 1px solid var(--border); z-index: 100;
  padding-bottom: env(safe-area-inset-bottom);
}
.tab-item {
  flex: 1; display: flex; flex-direction: column; align-items: center;
  padding: 6px 0 4px; cursor: pointer; color: var(--text-secondary); position: relative;
}
.tab-item.active { color: var(--primary); }
.tab-icon { font-size: 11px; text-transform: uppercase; letter-spacing: 0.5px; font-weight: 600; }
.tab-label { font-size: 10px; margin-top: 2px; }
.tab-badge {
  position: absolute; top: 2px; right: 50%; margin-right: -20px;
  background: var(--warning); color: #fff; font-size: 10px;
  min-width: 16px; height: 16px; border-radius: 8px;
  display: flex; align-items: center; justify-content: center; padding: 0 4px;
}

/* ─── 加载动画 / 骨架屏 / Toast / 错误重试 / 连接状态 ─── */
.loading { text-align: center; padding: 20px; color: var(--text-secondary); font-size: 13px; }
.loading::after {
  content: ''; display: inline-block; width: 14px; height: 14px;
  border: 2px solid var(--border); border-top-color: var(--primary);
  border-radius: 50%; animation: spin 0.8s linear infinite;
  margin-left: 6px; vertical-align: middle;
}
@keyframes spin { to { transform: rotate(360deg); } }

.skeleton {
  background: linear-gradient(90deg, #f0f0f0 25%, #e0e0e0 50%, #f0f0f0 75%);
  background-size: 200% 100%; animation: shimmer 1.5s infinite; border-radius: 6px;
}
@keyframes shimmer { 0% { background-position: 200% 0; } 100% { background-position: -200% 0; } }
.skeleton-card { background: var(--card-bg); border-radius: 12px; padding: 14px; margin-bottom: 10px; box-shadow: var(--shadow); }
.skeleton-line { height: 14px; margin-bottom: 8px; }
.skeleton-line.short { width: 60%; }

.toast {
  position: fixed; top: 60px; left: 50%; transform: translateX(-50%);
  background: rgba(0,0,0,0.8); color: #fff; padding: 10px 20px;
  border-radius: 8px; font-size: 13px; z-index: 2147483647;
  opacity: 0; transition: opacity 0.3s, top 0.3s;
  pointer-events: none; white-space: nowrap; max-width: 90%; overflow: hidden; text-overflow: ellipsis;
}
.toast.show { opacity: 1; top: 70px; }
.toast.success { background: rgba(82,196,26,0.9); }
.toast.error { background: rgba(255,77,79,0.9); }

.error-retry { text-align: center; padding: 30px 20px; color: var(--text-secondary); }
.error-retry .retry-btn {
  margin-top: 12px; background: var(--primary); color: #fff;
  border: none; border-radius: 8px; padding: 8px 20px; font-size: 13px; cursor: pointer;
}

.conn-status {
  position: fixed; top: 0; left: 0; right: 0; max-width: 480px; margin: 0 auto;
  background: var(--warning); color: #fff; text-align: center;
  font-size: 12px; padding: 4px 0; z-index: 200;
  transform: translateY(-100%); transition: transform 0.3s;
}
.conn-status.show { transform: translateY(0); }

.chat-time { font-size: 10px; color: var(--text-secondary); margin-top: 4px; text-align: center; }
.chat-bubble.user + .chat-time { text-align: right; }
.chat-bubble.assistant + .chat-time { text-align: left; }
.refresh-hint.refreshing { color: var(--primary); }
.refresh-hint.refreshing::before {
  content: ''; display: inline-block; width: 12px; height: 12px;
  border: 2px solid var(--border); border-top-color: var(--primary);
  border-radius: 50%; animation: spin 0.8s linear infinite;
  margin-right: 4px; vertical-align: middle;
}
.priority-dot { display: inline-block; width: 8px; height: 8px; border-radius: 50%; margin-right: 4px; vertical-align: middle; }
.priority-dot.high { background: var(--warning); }
.priority-dot.medium { background: #FAAD14; }
.priority-dot.low { background: var(--text-secondary); }


/* ═══════════════════════════════════════
   桌面端样式 (≥768px)
   ═══════════════════════════════════════ */
@media (min-width: 768px) {

  #app {
    max-width: none;
    display: grid;
    grid-template-columns: var(--sidebar-width) 1fr;
    grid-template-rows: 100vh;
    grid-template-areas: "sidebar main";
  }

  /* ─── 侧边栏 ─── */
  .sidebar {
    display: flex;
    flex-direction: column;
    grid-area: sidebar;
    background: var(--sidebar-bg);
    color: var(--sidebar-text);
    height: 100vh;
    position: sticky;
    top: 0;
    overflow-y: auto;
  }

  .sidebar-logo {
    display: flex;
    align-items: center;
    gap: 10px;
    padding: 20px 18px;
    border-bottom: 1px solid rgba(255,255,255,0.08);
  }
  .sidebar-logo-icon {
    width: 36px; height: 36px;
    background: var(--primary);
    border-radius: 8px;
    display: flex; align-items: center; justify-content: center;
    font-size: 14px; font-weight: 700; color: #fff;
  }
  .sidebar-logo-text { font-size: 16px; font-weight: 600; color: #fff; }

  .sidebar-nav { flex: 1; padding: 12px 8px; }

  .nav-item {
    display: flex;
    align-items: center;
    gap: 10px;
    padding: 10px 14px;
    border-radius: 8px;
    cursor: pointer;
    color: var(--sidebar-text);
    font-size: 14px;
    margin-bottom: 2px;
    transition: background 0.15s, color 0.15s;
    position: relative;
  }
  .nav-item:hover { background: rgba(255,255,255,0.06); color: #fff; }
  .nav-item.active { background: var(--sidebar-active); color: #fff; }
  .nav-icon { font-size: 16px; flex-shrink: 0; width: 20px; text-align: center; }
  .nav-label { flex: 1; }
  .nav-badge {
    background: var(--warning); color: #fff;
    font-size: 10px; min-width: 18px; height: 18px;
    border-radius: 9px; display: flex;
    align-items: center; justify-content: center; padding: 0 5px;
  }
  .nav-tag {
    font-size: 10px; color: var(--sidebar-text);
    background: rgba(255,255,255,0.1);
    padding: 1px 6px; border-radius: 4px;
  }
  .nav-item.nav-placeholder { opacity: 0.6; }
  .nav-divider { height: 1px; background: rgba(255,255,255,0.08); margin: 10px 8px; }

  /* 可展开二级菜单 */
  .nav-group { display: flex; flex-direction: column; margin-bottom: 2px; }
  .nav-group-header { justify-content: space-between; }
  .nav-arrow { font-size: 12px; margin-left: auto; transition: transform 0.15s; }
  .nav-group-body { display: flex; flex-direction: column; padding-left: 8px; border-left: 2px solid rgba(255,255,255,0.06); margin-left: 16px; }
  .nav-sub { font-size: 13px; padding: 8px 12px; }
  .nav-sub.active { background: var(--sidebar-active); color: #fff; }
  .nav-group-header.active { background: var(--sidebar-active); color: #fff; }

  .sidebar-user {
    display: flex;
    align-items: center;
    gap: 10px;
    padding: 14px 18px;
    border-top: 1px solid rgba(255,255,255,0.08);
  }
  .sidebar-user-avatar {
    width: 32px; height: 32px;
    background: var(--primary);
    border-radius: 50%;
    display: flex; align-items: center; justify-content: center;
    font-size: 13px; font-weight: 600; color: #fff;
  }
  .sidebar-user-name { font-size: 13px; color: #fff; }
  .sidebar-user-role { font-size: 11px; color: var(--sidebar-text); }
  .sidebar-user-version { font-size: 10px; color: var(--sidebar-text); opacity: 0.55; margin-top: 2px; }

  /* ─── 主区域 ─── */
  .main-area {
    grid-area: main;
    display: flex;
    flex-direction: column;
    height: 100vh;
    overflow: hidden;
  }

  /* ─── 顶部栏（v12：桌面端也隐藏） ─── */
  .top-bar { display: none !important; }

  /* ─── 筛选栏 ─── */
  .filter-bar {
    display: flex;
    align-items: center;
    gap: 16px;
    padding: 10px 24px;
    background: #fff;
    border-bottom: 1px solid var(--border);
    flex-shrink: 0;
  }
  .filter-item { display: flex; align-items: center; gap: 6px; }
  .filter-item label { font-size: 13px; color: var(--text-secondary); white-space: nowrap; }
  .filter-select {
    padding: 6px 10px;
    border: 1px solid var(--border);
    border-radius: 6px;
    font-size: 13px;
    background: #FAFAFA;
    outline: none;
    cursor: pointer;
  }
  .filter-select:focus { border-color: var(--primary); background: #fff; }

  /* ─── 内容区 ─── */
  .content {
    flex: 1;
    overflow-y: auto;
    padding: 20px 24px;
    padding-bottom: 24px;
  }
  .page { padding: 0; }

  /* ─── 桌面端独有元素 ─── */
  .desktop-only { display: flex; }
  .refresh-hint { display: none; }

  /* ─── 仪表盘 ─── */
  .dashboard { display: block; margin-bottom: 24px; }

  .stat-cards {
    display: grid;
    grid-template-columns: repeat(auto-fit, minmax(200px, 1fr));
    gap: 16px;
    margin-bottom: 24px;
  }
  .stat-card {
    background: var(--card-bg);
    border-radius: 12px;
    padding: 20px;
    box-shadow: var(--shadow);
    display: flex;
    align-items: center;
    gap: 16px;
    transition: transform 0.15s;
  }
  .stat-card:hover { transform: translateY(-2px); box-shadow: 0 4px 12px rgba(0,0,0,0.1); }
  .stat-icon {
    width: 48px; height: 48px;
    border-radius: 12px;
    display: flex; align-items: center; justify-content: center;
    font-size: 22px; flex-shrink: 0;
  }
  .stat-info { flex: 1; }
  .stat-value { font-size: 28px; font-weight: 700; line-height: 1.2; }
  .stat-label { font-size: 13px; color: var(--text-secondary); margin-top: 2px; }
  .stat-trend { font-size: 11px; margin-top: 4px; }
  .stat-trend.up { color: var(--success); }
  .stat-trend.down { color: var(--warning); }

  /* ─── 图表网格 ─── */
  .chart-grid {
    display: grid;
    grid-template-columns: 1fr 1fr;
    gap: 16px;
    margin-bottom: 24px;
  }
  .chart-card {
    background: var(--card-bg);
    border-radius: 12px;
    padding: 16px;
    box-shadow: var(--shadow);
  }
  .chart-card.chart-wide { grid-column: 1 / -1; }
  .chart-title { font-size: 14px; font-weight: 600; margin-bottom: 12px; }
  .chart-body { height: 260px; }

  /* ─── 孪生体卡片（桌面端横向排列） ─── */
  .twin-cards {
    flex-direction: row;
    flex-wrap: wrap;
    gap: 16px;
  }
  .twin-card {
    flex: 1;
    min-width: 280px;
    max-width: 400px;
  }
  .twin-card:hover { transform: translateY(-2px); box-shadow: 0 4px 12px rgba(0,0,0,0.1); }

  /* ─── 动态流（桌面端两列） ─── */
  .feed-list {
    display: grid;
    grid-template-columns: repeat(auto-fill, minmax(360px, 1fr));
    gap: 12px;
  }

  /* ─── 任务列表（桌面端网格） ─── */
  .task-list {
    display: grid;
    grid-template-columns: repeat(auto-fill, minmax(360px, 1fr));
    gap: 12px;
  }

  /* ─── 审批列表（桌面端网格） ─── */
  .approval-list {
    display: grid;
    grid-template-columns: repeat(auto-fill, minmax(400px, 1fr));
    gap: 12px;
  }

  /* ─── 知识库（桌面端网格） ─── */
  .kb-results {
    display: grid;
    grid-template-columns: repeat(auto-fill, minmax(400px, 1fr));
    gap: 12px;
  }

  /* ─── 对话页（桌面端居中+加宽） ─── */
  .chat-messages { max-width: 800px; margin: 0 auto; padding-bottom: 80px; }
  .chat-input-bar {
    position: sticky;
    bottom: 0;
    max-width: 800px;
    margin: 0 auto;
    left: auto;
    right: auto;
  }

  /* ─── 隐藏手机底部导航 ─── */
  .tab-bar { display: none; }

  /* ─── 搜索栏加宽 ─── */
  .search-bar { max-width: 600px; }

  /* ─── 任务表单加宽 ─── */
  .task-form { max-width: 600px; }
}


/* ═══════════════════════════════════════
   四大业务模块通用样式
   CRM / PM / Finance / Admin
   ═══════════════════════════════════════ */

/* ─── 统计卡片行 ─── */
.mod-stats {
  display: grid;
  grid-template-columns: repeat(2, 1fr);
  gap: 8px;
  margin-bottom: 12px;
}
.mod-stat-card {
  background: var(--card-bg);
  border-radius: 10px;
  padding: 12px;
  box-shadow: var(--shadow);
  text-align: center;
}
.mod-stat-value {
  font-size: 18px;
  font-weight: 700;
  line-height: 1.3;
}
.mod-stat-label {
  font-size: 12px;
  color: var(--text-secondary);
  margin-top: 2px;
}

/* ─── 子标签栏 ─── */
.sub-tabs {
  display: flex;
  gap: 0;
  overflow-x: auto;
  -webkit-overflow-scrolling: touch;
  background: #fff;
  border-radius: 10px;
  padding: 4px;
  margin-bottom: 12px;
  box-shadow: var(--shadow);
  scrollbar-width: none;
}
.sub-tabs::-webkit-scrollbar { display: none; }
.sub-tab {
  flex: 1;
  min-width: 56px;
  text-align: center;
  padding: 8px 12px;
  font-size: 13px;
  color: var(--text-secondary);
  cursor: pointer;
  border-radius: 8px;
  white-space: nowrap;
  transition: background 0.15s, color 0.15s;
}
.sub-tab.active {
  background: var(--primary);
  color: #fff;
  font-weight: 500;
}

/* ─── 模块表单 ─── */
.mod-form {
  background: var(--card-bg);
  border-radius: 12px;
  padding: 14px;
  margin-bottom: 12px;
  box-shadow: var(--shadow);
  display: flex;
  flex-direction: column;
  gap: 8px;
}
.form-title {
  font-size: 15px;
  font-weight: 600;
  margin-bottom: 4px;
}
.form-field {
  display: flex;
  flex-direction: column;
  gap: 4px;
}
.form-field label {
  font-size: 12px;
  color: var(--text-secondary);
}
.form-field-readonly .input-readonly {
  background: var(--bg-secondary, #F7F8FA);
  color: var(--text-secondary, #6B7280);
  cursor: not-allowed;
  min-height: 36px;
  display: flex;
  align-items: center;
}
.form-field .form-hint {
  font-size: 11px;
  color: var(--text-tertiary, #9CA3AF);
  line-height: 1.4;
}

/* ─── 商机表单：项目团队全宽模块 ─── */
.opp-form-grid {
  display: grid;
  grid-template-columns: repeat(auto-fill, minmax(260px, 1fr));
  gap: 12px;
  margin-bottom: 16px;
}
.opp-form-team-section {
  background: var(--bg-card, #fff);
  border: 1px solid var(--border, #E5E7EB);
  border-radius: 10px;
  padding: 14px;
  margin-bottom: 16px;
}
.opp-form-team-header {
  display: flex;
  align-items: center;
  justify-content: space-between;
  gap: 10px;
  margin-bottom: 10px;
  flex-wrap: wrap;
}
.opp-form-team-header h4 {
  margin: 0;
  font-size: 14px;
  color: #374151;
}
.opp-form-team-hint {
  font-size: 11px;
  color: #9CA3AF;
}
.opp-form-team-list {
  display: flex;
  flex-direction: column;
  gap: 6px;
  margin-bottom: 10px;
}
.opp-form-team-list .team-member-card {
  background: var(--bg-secondary, #F7F8FA);
}
.opp-form-meta {
  display: flex;
  gap: 12px;
  margin-bottom: 16px;
}
.opp-form-meta .form-field-readonly {
  flex: 0 0 240px;
}

/* ─── 商机详情：项目团队面板铺满 ─── */
.opp-team-panel {
  grid-column: 1 / -1;
  background: linear-gradient(180deg, var(--bg-card,#fff) 0%, var(--bg-secondary,#F7F8FA) 100%);
}
.opp-team-panel-header {
  display: flex;
  align-items: center;
  justify-content: space-between;
  gap: 10px;
  margin-bottom: 10px;
}
.opp-team-panel-header h4 { margin: 0; font-size: 14px; color: #374151; }
.opp-team-panel-hint { font-size: 11px; color: #9CA3AF; }
.opp-team-panel-body { margin-bottom: 8px; }

/* ─── 模块列表 ─── */
.mod-list {
  display: flex;
  flex-direction: column;
  gap: 8px;
}

/* ─── 模块卡片 ─── */
.mod-card {
  background: var(--card-bg);
  border-radius: 10px;
  padding: 12px;
  box-shadow: var(--shadow);
  display: flex;
  justify-content: space-between;
  align-items: flex-start;
  gap: 10px;
}
.mod-card-main {
  flex: 1;
  min-width: 0;
}
.mod-card-title {
  font-size: 14px;
  font-weight: 600;
  word-break: break-word;
}
.mod-card-sub {
  font-size: 12px;
  color: var(--text-secondary);
  margin-top: 4px;
  line-height: 1.4;
}
.mod-card-amount {
  font-size: 16px;
  font-weight: 700;
  color: var(--primary);
  margin-top: 4px;
}
.mod-card-side {
  display: flex;
  flex-direction: column;
  align-items: flex-end;
  gap: 8px;
  flex-shrink: 0;
}
.mod-card-actions {
  display: flex;
  gap: 8px;
}

/* ─── 通讯录 v7（企微唯一来源 · 只读）─── */
.org-sync-bar {
  display: flex;
  justify-content: space-between;
  align-items: center;
  gap: 10px;
  background: var(--card-bg);
  border-radius: 10px;
  padding: 12px;
  box-shadow: var(--shadow);
  flex-wrap: wrap;
}
.org-sync-info {
  display: flex;
  gap: 16px;
  flex-wrap: wrap;
}
.org-sync-item {
  display: flex;
  flex-direction: column;
  gap: 2px;
}
.org-sync-label {
  font-size: 11px;
  color: var(--text-secondary);
}
.org-sync-item b {
  font-size: 15px;
  color: var(--text);
}
.org-sync-item b.org-sync-time {
  font-size: 12px;
  font-weight: 500;
  color: var(--text-secondary);
}
.org-readonly-tip {
  font-size: 12px;
  color: var(--text-secondary);
  background: var(--card-bg);
  border-left: 3px solid var(--primary);
  border-radius: 6px;
  padding: 8px 10px;
  margin-top: 8px;
}
.org-panel {
  background: var(--card-bg);
  border-radius: 10px;
  padding: 12px;
  box-shadow: var(--shadow);
  margin-top: 8px;
}
.org-panel-title {
  font-size: 13px;
  font-weight: 600;
  margin-bottom: 10px;
  color: var(--text);
}
.org-delegates {
  display: flex;
  flex-direction: column;
  gap: 6px;
}
.org-delegate {
  display: flex;
  align-items: center;
  gap: 8px;
  background: var(--bg);
  border-radius: 8px;
  padding: 8px 10px;
}
.org-delegate-name { font-size: 13px; font-weight: 600; color: var(--text); }
.org-delegate-id { font-size: 11px; color: var(--text-secondary); flex: 1; }
.org-section-title {
  font-size: 14px;
  font-weight: 700;
  color: var(--text);
  margin: 14px 0 8px;
}
/* 层级式组织架构 */
.org-hierarchy {
  display: flex;
  flex-direction: column;
  align-items: stretch;
  width: 100%;
  min-width: 0;
  padding: 8px 4px 12px;
}
/* 通讯录看板不使用网格，确保组织架构可以横向撑满 */
.mod-list.org-list-mode {
  display: block;
}
.org-level { width: 100%; }
.org-level-ceo {
  display: flex;
  flex-direction: column;
  align-items: center;
  margin: 0 auto 0;
  width: 100%;
  max-width: 360px;
}
.org-hier-label {
  font-size: 12px;
  font-weight: 600;
  color: var(--text-secondary);
  margin-bottom: 8px;
  text-align: center;
}
.org-hier-connector {
  width: 2px;
  height: 24px;
  background: linear-gradient(to bottom, var(--primary), var(--border, #E5E7EB));
  margin: 0 auto;
}
.org-level-depts {
  display: flex;
  flex-direction: row;
  justify-content: center;
  align-items: flex-start;
  gap: 8px;
  width: 100%;
  min-width: 0;
  position: relative;
  padding-top: 16px;
  overflow-x: auto;
}
/* 三个部门上方的横向连线 */
.org-level-depts::before {
  content: '';
  position: absolute;
  top: 0;
  left: 50%;
  transform: translateX(-50%);
  width: calc(100% - 120px);
  min-width: 420px;
  max-width: 560px;
  height: 2px;
  background: var(--border, #E5E7EB);
}
.org-dept-col {
  flex: 1 0 200px;
  min-width: 200px;
  max-width: 260px;
  display: flex;
  flex-direction: column;
  align-items: center;
}
.org-dept-header {
  background: var(--card-bg);
  border: 1px solid var(--border, #E5E7EB);
  border-radius: 10px;
  padding: 10px 14px;
  box-shadow: var(--shadow);
  display: flex;
  align-items: center;
  gap: 8px;
  margin-bottom: 0;
  z-index: 1;
  flex-wrap: wrap;
  justify-content: center;
  text-align: center;
  min-width: 140px;
}
.org-dept-name {
  font-size: 13px;
  font-weight: 700;
  color: var(--text);
  line-height: 1.3;
}
.org-dept-count {
  background: var(--primary);
  color: #fff;
  font-size: 10px;
  border-radius: 8px;
  padding: 1px 7px;
  font-weight: 500;
}
.org-dept-leader {
  font-size: 11px;
  color: var(--text-secondary);
  background: var(--bg-secondary, #F1EFE8);
  border: 1px dashed var(--border, #E5E7EB);
  border-radius: 8px;
  padding: 2px 8px;
  font-weight: 500;
  white-space: nowrap;
}
.org-dept-connector {
  width: 2px;
  height: 16px;
  background: var(--border, #E5E7EB);
  margin: 0 auto;
}
.org-dept-members {
  width: 100%;
  display: flex;
  flex-direction: column;
  gap: 8px;
  padding-top: 8px;
}

/* 组织架构卡片 */
.org-card {
  width: 100%;
  background: var(--card-bg);
  border: 1px solid var(--border, #E5E7EB);
  border-radius: 10px;
  padding: 12px;
  box-shadow: var(--shadow);
  display: flex;
  justify-content: space-between;
  align-items: center;
  gap: 10px;
}
.org-card-ceo {
  max-width: 320px;
  border-color: var(--primary);
  background: linear-gradient(135deg, rgba(74,144,217,0.08) 0%, var(--card-bg) 100%);
}
.org-card-member { border-left: 3px solid var(--primary); }
.org-card-head {
  display: flex;
  align-items: center;
  gap: 10px;
  flex: 1;
  min-width: 0;
}
.org-card-avatar {
  width: 36px;
  height: 36px;
  border-radius: 50%;
  background: var(--primary);
  color: #fff;
  display: flex;
  align-items: center;
  justify-content: center;
  font-size: 14px;
  font-weight: 600;
  flex-shrink: 0;
}
.org-card-ceo .org-card-avatar {
  width: 44px;
  height: 44px;
  font-size: 16px;
  background: linear-gradient(135deg, #4A90D9, #7C3AED);
}
.org-card-main { min-width: 0; }
.org-card-title {
  font-size: 14px;
  font-weight: 700;
  color: var(--text);
  display: flex;
  align-items: center;
  gap: 6px;
  flex-wrap: wrap;
}
.org-card-sub {
  font-size: 12px;
  color: var(--text-secondary);
  margin-top: 3px;
}
.org-card-meta {
  font-size: 11px;
  color: var(--text-secondary);
  margin-top: 2px;
}
.org-card-side {
  display: flex;
  flex-direction: column;
  align-items: flex-end;
  gap: 4px;
  flex-shrink: 0;
}
.org-badge {
  font-size: 10px;
  font-weight: 500;
  color: var(--text-secondary);
  background: var(--bg);
  padding: 1px 6px;
  border-radius: 6px;
}
.org-badge-header {
  font-size: 10px;
  font-weight: 600;
  color: var(--primary);
  background: #E6F4FF;
  padding: 1px 6px;
  border-radius: 6px;
}
.org-badge-ceo {
  font-size: 10px;
  font-weight: 600;
  color: #fff;
  background: linear-gradient(135deg, #4A90D9, #7C3AED);
  padding: 1px 8px;
  border-radius: 6px;
}

@media (max-width: 768px) {
  .org-level-depts {
    flex-direction: column;
    align-items: center;
  }
  .org-level-depts::before {
    display: none;
  }
  .org-dept-col {
    width: 100%;
    max-width: 100%;
  }
  .org-dept-connector {
    height: 12px;
  }
}
.org-audit {
  display: flex;
  flex-direction: column;
  gap: 4px;
  background: var(--card-bg);
  border-radius: 10px;
  padding: 10px;
  box-shadow: var(--shadow);
}
.org-audit-row {
  display: flex;
  align-items: center;
  gap: 8px;
  font-size: 12px;
  padding: 6px 4px;
  border-bottom: 1px dashed var(--border, #EEF0F3);
}
.org-audit-row:last-child { border-bottom: none; }
.org-audit-action {
  background: #E6F4FF;
  color: var(--primary);
  font-size: 11px;
  border-radius: 8px;
  padding: 2px 8px;
  white-space: nowrap;
}
.org-audit-op { font-weight: 600; color: var(--text); white-space: nowrap; }
.org-audit-target { color: var(--text-secondary); flex: 1; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
.org-audit-time { color: var(--text-secondary); font-size: 11px; white-space: nowrap; }

/* ─── 状态标签 ─── */
.mod-tag {
  font-size: 11px;
  padding: 2px 8px;
  border-radius: 10px;
  font-weight: 500;
  white-space: nowrap;
  background: #F5F5F5;
  color: var(--text-secondary);
}
.mod-tag-lead, .mod-tag-draft, .mod-tag-pending, .mod-tag-scheduled, .mod-tag-planning, .mod-tag-normal { background: #FFF7E6; color: #D48806; }
.mod-tag-qualified, .mod-tag-sent, .mod-tag-active, .mod-tag-in_progress, .mod-tag-ordered, .mod-tag-ongoing { background: #E6F4FF; color: var(--primary); }
.mod-tag-proposal, .mod-tag-negotiation, .mod-tag-received, .mod-tag-delivered, .mod-tag-passed, .mod-tag-signed, .mod-tag-confirmed, .mod-tag-approved, .mod-tag-in_use, .mod-tag-completed { background: #F6FFED; color: var(--success); }
.mod-tag-won, .mod-tag-paid { background: #F6FFED; color: var(--success); }
.mod-tag-lost, .mod-tag-cancelled, .mod-tag-rejected, .mod-tag-absent, .mod_tag-failed, .mod-tag-scrapped { background: #FFF1F0; color: var(--warning); }
.mod-tag-warning, .mod-tag-overdue, .mod-tag-delayed, .mod-tag-late, .mod-tag-low { background: #FFF1F0; color: var(--warning); }
.mod-tag-idle, .mod-tag-paused, .mod-tag-repair { background: #F5F5F5; color: var(--text-secondary); }
.mod-tag-early_leave, .mod-tag-leave { background: #FFF7E6; color: #D48806; }

/* ─── 链接按钮 ─── */
.btn-link {
  background: none;
  border: none;
  color: var(--primary);
  font-size: 12px;
  cursor: pointer;
  padding: 2px 4px;
}
.btn-link:active { opacity: 0.7; }
.btn-link.btn-danger { color: var(--warning); }


/* ═══════════════════════════════════════
   四大模块 — 桌面端样式 (≥768px)
   ═══════════════════════════════════════ */
@media (min-width: 768px) {
  .mod-stats {
    grid-template-columns: repeat(4, 1fr);
    gap: 16px;
  }
  .mod-stat-card {
    padding: 20px;
  }
  .mod-stat-value {
    font-size: 24px;
  }
  .mod-stat-label {
    font-size: 13px;
  }

  .sub-tabs {
    border-radius: 12px;
    padding: 6px;
  }
  .sub-tab {
    font-size: 14px;
    padding: 10px 20px;
  }

  .mod-form {
    max-width: 700px;
    padding: 20px;
    border-radius: 12px;
  }

  /* 桌面端列表用网格布局 */
  .mod-list {
    display: grid;
    grid-template-columns: repeat(auto-fill, minmax(380px, 1fr));
    gap: 12px;
  }

  .mod-card {
    padding: 16px;
    border-radius: 12px;
    transition: transform 0.15s, box-shadow 0.15s;
  }
  .mod-card:hover {
    transform: translateY(-2px);
    box-shadow: 0 4px 12px rgba(0,0,0,0.1);
  }
  .mod-card-title {
    font-size: 15px;
  }
  .mod-card-amount {
    font-size: 20px;
  }
}

/* ═══════════════════════════════════════
   PMP 项目详情页
   ═══════════════════════════════════════ */
.pm-detail { padding: 4px 0 40px; }
.pm-detail-header { display: flex; align-items: center; gap: 10px; flex-wrap: wrap; margin-bottom: 10px; }
.pm-detail-title { font-size: 17px; font-weight: 600; flex: 1; min-width: 0; word-break: break-all; }
.pm-summary {
  display: grid; grid-template-columns: repeat(auto-fill, minmax(140px, 1fr));
  gap: 8px; background: var(--card-bg); border-radius: 10px; padding: 10px 12px; box-shadow: var(--shadow); margin-bottom: 10px;
}
.pm-summary-key { font-size: 11px; color: var(--text-secondary); }
.pm-summary-val { font-size: 13px; font-weight: 500; margin-top: 2px; word-break: break-all; }
.pm-overall-progress {
  display: flex; align-items: center; gap: 10px;
  background: var(--card-bg); border-radius: 10px; padding: 10px 12px; box-shadow: var(--shadow); margin-bottom: 10px;
}
.pm-overall-label { font-size: 12px; color: var(--text-secondary); white-space: nowrap; }
.progress-track { flex: 1; height: 8px; background: #EEF0F3; border-radius: 4px; overflow: hidden; }
.progress-bar { height: 100%; background: linear-gradient(90deg, var(--primary), #7EB8F0); border-radius: 4px; transition: width .4s; }
.pm-overall-num { font-size: 14px; font-weight: 600; color: var(--primary); white-space: nowrap; }
.pm-overall-sub { font-size: 11px; color: var(--text-secondary); font-weight: 400; }
.pm-phase-bar { display: flex; align-items: stretch; gap: 4px; overflow-x: auto; padding: 2px 0 10px; }
.pm-phase {
  flex: 1; min-width: 84px; border: 2px solid #ddd; border-radius: 10px; padding: 8px 6px;
  text-align: center; cursor: pointer; position: relative; background: var(--card-bg);
  transition: all .2s;
}
.pm-phase.active { background: #F0F7FF; box-shadow: 0 2px 8px rgba(74,144,217,.25); transform: translateY(-1px); }
.pm-phase.done { background: #F6FFED; }
.pm-phase-name { font-size: 13px; font-weight: 600; }
.pm-phase-progress { font-size: 11px; color: var(--text-secondary); margin-top: 2px; }
.pm-phase-done {
  position: absolute; top: -7px; right: -7px; width: 18px; height: 18px; border-radius: 50%;
  background: #52C41A; color: #fff; font-size: 11px; line-height: 18px; text-align: center;
}
.pm-phase-arrow { align-self: center; color: #ccc; font-size: 14px; flex-shrink: 0; }
.pm-detail-tabs { display: flex; gap: 6px; margin-bottom: 10px; flex-wrap: wrap; }
.pm-detail-tabs .sub-tab { padding: 7px 14px; }
.pm-block-title { font-size: 13px; font-weight: 600; color: var(--text); margin: 8px 0; padding-left: 8px; border-left: 3px solid var(--primary); }
.pm-phase-list, .pm-ms-list, .pm-doc-list, .pm-risk-list, .pm-issue-list, .pm-team-list { display: flex; flex-direction: column; gap: 8px; }
/* v9 项目团队（继承自商机团队） */
.pm-team-source { display: flex; flex-wrap: wrap; gap: 8px 16px; align-items: center; background: var(--card-bg); border-radius: 10px; padding: 10px 12px; box-shadow: var(--shadow); margin-bottom: 10px; font-size: 12px; }
.pm-team-source-label { color: var(--primary); font-weight: 600; }
.pm-team-source-opp { font-weight: 500; }
.pm-team-source-owner { color: var(--text-secondary); }
.pm-team-member { display: flex; flex-direction: column; gap: 4px; background: var(--card-bg); border-radius: 10px; padding: 10px 12px; box-shadow: var(--shadow); }
.pm-team-member-name { font-size: 14px; font-weight: 600; }
.pm-team-member-meta { display: flex; flex-wrap: wrap; gap: 4px 8px; }
.pm-team-tag { font-size: 11px; color: var(--text-secondary); background: #F0F4F8; border-radius: 8px; padding: 1px 8px; }
.pm-team-note { font-size: 12px; color: var(--text-secondary); }
.pm-team-hint { font-size: 12px; color: var(--text-secondary); margin-top: 10px; }
.pm-phase-item, .pm-ms-item, .pm-doc-item, .pm-risk-item, .pm-issue-item {
  display: flex; gap: 10px; align-items: flex-start;
  background: var(--card-bg); border-radius: 10px; padding: 10px 12px; box-shadow: var(--shadow);
}
.pm-ms-item.done { opacity: .72; }
.pm-ms-check {
  width: 20px; height: 20px; border-radius: 50%; border: 2px solid #ccc; flex-shrink: 0;
  cursor: pointer; display: flex; align-items: center; justify-content: center;
  font-size: 12px; color: #fff; margin-top: 1px; transition: all .2s;
}
.pm-ms-check.checked { background: #52C41A; border-color: #52C41A; }
.pm-phase-item-main, .pm-ms-main, .pm-doc-main, .pm-risk-main, .pm-issue-main { flex: 1; min-width: 0; }
.pm-phase-item-name, .pm-ms-name, .pm-doc-name { font-size: 14px; font-weight: 500; }
.pm-phase-item-weight { font-size: 11px; color: var(--primary); background: #E8F3FF; padding: 1px 6px; border-radius: 8px; margin-left: 6px; }
.pm-phase-item-desc { font-size: 12px; color: var(--text-secondary); margin-top: 3px; line-height: 1.5; }
.pm-phase-item-meta, .pm-ms-meta, .pm-doc-meta, .pm-risk-meta, .pm-issue-meta {
  display: flex; flex-wrap: wrap; gap: 4px 12px; font-size: 11px; color: var(--text-secondary); margin-top: 4px;
}
.pm-phase-item-criteria { color: #52C41A; }
.pm-phase-item-actions, .pm-ms-actions, .pm-doc-actions, .pm-risk-actions, .pm-issue-actions {
  display: flex; gap: 4px; flex-shrink: 0;
}
.pm-inline-form {
  display: flex; gap: 6px; flex-wrap: wrap; align-items: center;
  background: var(--card-bg); border-radius: 10px; padding: 10px 12px; box-shadow: var(--shadow); margin-top: 10px;
}
.pm-inline-form .input-field { flex: 1; min-width: 110px; }
.pm-upload-form {
  display: flex; gap: 6px; flex-wrap: wrap; align-items: center;
  background: var(--card-bg); border-radius: 10px; padding: 10px 12px; box-shadow: var(--shadow); margin-bottom: 10px;
}
.pm-upload-form .input-field { flex: 1; min-width: 110px; }
.pm-doc-icon { font-size: 20px; flex-shrink: 0; }
.pm-doc-cat, .pm-ms-phase { font-size: 11px; color: #fff; background: var(--primary); padding: 1px 8px; border-radius: 8px; margin-left: 4px; }
.pm-doc-cat { background: #8C8C8C; }
.pm-ms-deliverable { font-size: 12px; color: var(--warning); margin-top: 3px; }
.pm-risk-level, .pm-issue-sev {
  font-size: 11px; color: #fff; padding: 1px 8px; border-radius: 8px; margin-left: 4px;
}
.pm-issue-status { font-size: 11px; color: var(--warning); margin-left: 4px; }
.pm-issue-status.closed { color: #52C41A; }
.pm-risk-mitigation, .pm-issue-resolution {
  font-size: 12px; color: var(--text-secondary); margin-top: 4px;
  background: #F9FAFB; padding: 4px 8px; border-radius: 6px;
}
.mod-card-progress { height: 5px; background: #EEF0F3; border-radius: 3px; overflow: hidden; margin-top: 8px; }
.mod-card-progress-text { font-size: 11px; color: var(--text-secondary); margin-top: 3px; }

/* ═══════════════════════════════════════
   项目管理 — 全屏弹窗 + 子项详情页
   ═══════════════════════════════════════ */
.pm-fullscreen-modal {
  position: fixed;
  top: 0; left: 0; right: 0; bottom: 0;
  background: var(--bg, #F5F7FA);
  z-index: 2000;
  overflow-y: auto;
  -webkit-overflow-scrolling: touch;
}
.pm-modal-content {
  min-height: 100vh;
  padding: 12px;
  max-width: 1100px;
  margin: 0 auto;
}
/* v20260823i：PM 详情/子项详情恢复为全屏平铺，不再覆盖 .pm-modal-content 样式 */
/* v29 合同/表单融合弹窗 */
.cf-group {
  border: 1px solid #E4E7ED;
  border-radius: 8px;
  padding: 14px 16px 16px;
  margin-bottom: 14px;
  background: #fff;
}
.cf-group.collapsed .cf-body { display: none; }
.cf-legend {
  font-size: 14px;
  font-weight: 600;
  color: #374151;
  cursor: pointer;
  user-select: none;
  padding: 0 4px;
  display: inline-flex;
  align-items: center;
  gap: 6px;
}
.cf-toggle { display: inline-block; transition: transform .15s ease; }
.cf-body { margin-top: 12px; }
.cf-row {
  display: grid;
  grid-template-columns: 1fr 1fr;
  gap: 12px;
}
.cf-field { margin-bottom: 12px; }
.cf-field:last-child { margin-bottom: 0; }
.cf-label {
  display: block;
  font-size: 13px;
  color: #4B5563;
  margin-bottom: 6px;
}
.cf-req { color: #EF4444; }
.cf-input {
  width: 100%;
  box-sizing: border-box;
  padding: 8px 10px;
  border: 1px solid #D1D5DB;
  border-radius: 6px;
  font-size: 14px;
  outline: none;
  transition: border-color .15s ease, box-shadow .15s ease;
  background: #fff;
}
.cf-input:focus { border-color: #2563EB; box-shadow: 0 0 0 2px rgba(37,99,235,.15); }
.cf-input:invalid { border-color: #EF4444; }
.cf-error {
  font-size: 12px;
  color: #EF4444;
  margin-top: 4px;
  min-height: 14px;
}
.cf-hint {
  font-size: 12px;
  color: #8A94A3;
  margin-top: 4px;
}
.cf-summary {
  font-size: 13px;
  color: #6B7280;
  padding: 8px 12px;
  background: #F9FAFB;
  border-radius: 6px;
  margin-top: 6px;
}
/* v30: 弹窗内联错误反馈（红色背景） */
.cf-summary.cf-error-text {
  color: #B91C1C;
  background: #FEF2F2;
  border: 1px solid #FECACA;
  font-weight: 500;
}
/* v30: 合同弹窗专用遮罩层（替代 pm-fullscreen-modal 的全屏覆盖） */
.cf-modal-overlay {
  position: fixed;
  top: 0; left: 0; right: 0; bottom: 0;
  background: rgba(0, 0, 0, 0.45);
  z-index: 2100;
  display: flex;
  align-items: center;
  justify-content: center;
  padding: 20px;
  box-sizing: border-box;
}
.cf-modal-overlay .cf-modal-card {
  background: #fff;
  border-radius: 12px;
  box-shadow: 0 20px 60px rgba(0, 0, 0, 0.3);
  max-width: 560px;
  width: 100%;
  max-height: 90vh;
  overflow-y: auto;
  padding: 24px;
  box-sizing: border-box;
}
@media (max-width: 600px) {
  .cf-row { grid-template-columns: 1fr; }
  .cf-modal-overlay { padding: 12px; }
  .cf-modal-overlay .cf-modal-card { padding: 16px; max-height: 95vh; }
}
.pm-modal-header {
  position: sticky;
  top: 0;
  z-index: 10;
  background: var(--bg, #F5F7FA);
  padding: 8px 0 12px;
  border-bottom: 1px solid var(--border, #E8E8E8);
  margin-bottom: 12px;
}
.pm-modal-top {
  display: flex; align-items: center; gap: 10px; flex-wrap: wrap;
}
.pm-modal-back {
  display: inline-flex; align-items: center; gap: 4px;
  background: var(--card-bg); border: 1px solid var(--border); border-radius: 8px;
  padding: 6px 12px; font-size: 13px; color: var(--text); cursor: pointer;
}
.pm-modal-title { font-size: 17px; font-weight: 600; flex: 1; min-width: 0; word-break: break-all; }

/* 子项详情页 */
.pm-item-locked-bar {
  background: #FFF7E6; border: 1px solid #FFD591; border-radius: 8px;
  padding: 10px 12px; margin-bottom: 12px; display: flex; align-items: center; gap: 8px;
  font-size: 13px; color: #D46B08;
}
.pm-item-section {
  background: var(--card-bg); border-radius: 10px; padding: 12px; box-shadow: var(--shadow); margin-bottom: 12px;
}
.pm-item-section-title {
  font-size: 14px; font-weight: 600; margin-bottom: 10px;
  display: flex; align-items: center; justify-content: space-between;
}
.pm-item-section-sub { font-size: 12px; color: var(--text-secondary); font-weight: 400; }

/* 富文本编辑器 */
.pm-rich-editor {
  border: 1px solid var(--border); border-radius: 8px; min-height: 160px;
  padding: 10px; font-size: 14px; line-height: 1.6; background: var(--card-bg);
  outline: none;
}
.pm-rich-editor:empty:before { content: "在此输入详细内容…"; color: #BFBFBF; }
.pm-rich-editor p { margin: 0 0 8px; }
.pm-rich-editor ul, .pm-rich-editor ol { margin: 0 0 8px 18px; padding: 0; }
.pm-rich-editor h1, .pm-rich-editor h2, .pm-rich-editor h3 { margin: 8px 0; }
.pm-editor-toolbar {
  display: flex; gap: 6px; margin-bottom: 8px; flex-wrap: wrap;
}
.pm-editor-toolbar button {
  background: var(--card-bg); border: 1px solid var(--border); border-radius: 6px;
  padding: 5px 10px; font-size: 13px; cursor: pointer; color: var(--text);
}
.pm-editor-toolbar button.active { background: var(--primary); color: #fff; border-color: var(--primary); }

/* 项目经理必填字段 */
.pm-field-grid {
  display: grid; grid-template-columns: repeat(auto-fit, minmax(260px, 1fr)); gap: 10px;
}
.pm-field-box label {
  display: block; font-size: 12px; color: var(--text-secondary); margin-bottom: 4px;
}
.pm-field-box textarea {
  width: 100%; min-height: 70px; resize: vertical;
  border: 1px solid var(--border); border-radius: 8px; padding: 8px; font-size: 13px;
}
.pm-field-box input {
  width: 100%; border: 1px solid var(--border); border-radius: 8px; padding: 8px; font-size: 13px;
}
.pm-field-box-full { grid-column: 1 / -1; }
.pm-json-table {
  width: 100%; border-collapse: collapse; font-size: 12px;
  border: 1px solid var(--border); border-radius: 8px; overflow: hidden;
}
.pm-json-table th, .pm-json-table td {
  border: 1px solid var(--border); padding: 6px; text-align: left;
}
.pm-json-table th { background: #F9FAFB; font-weight: 500; }
.pm-json-table td input, .pm-json-table td select {
  width: 100%; border: 1px solid var(--border); border-radius: 4px; padding: 4px; font-size: 12px;
}

/* 变更时间线 */
.pm-timeline { position: relative; padding-left: 18px; }
.pm-timeline:before {
  content: ''; position: absolute; left: 5px; top: 4px; bottom: 4px;
  width: 2px; background: var(--border);
}
.pm-timeline-item { position: relative; margin-bottom: 12px; }
.pm-timeline-dot {
  position: absolute; left: -16px; top: 4px; width: 10px; height: 10px;
  border-radius: 50%; background: var(--primary); border: 2px solid var(--card-bg);
}
.pm-timeline-time { font-size: 11px; color: var(--text-secondary); }
.pm-timeline-user { font-size: 12px; font-weight: 500; }
.pm-timeline-summary { font-size: 12px; color: var(--text-secondary); margin-top: 2px; }
.pm-timeline-oldnew {
  margin-top: 4px; font-size: 11px; color: var(--text-secondary);
  background: #F9FAFB; padding: 6px 8px; border-radius: 6px;
}
.pm-timeline-actions { margin-top: 4px; }

/* 评价 */
.pm-review-item {
  background: #F9FAFB; border-radius: 8px; padding: 10px; margin-bottom: 8px;
}
.pm-review-stars { color: #FAAD14; font-size: 14px; letter-spacing: 2px; }
.pm-review-comment { font-size: 13px; margin-top: 4px; }
.pm-review-meta { font-size: 11px; color: var(--text-secondary); margin-top: 4px; }

/* 文件预览 */
.pm-preview-modal {
  position: fixed; top: 0; left: 0; right: 0; bottom: 0;
  background: rgba(0,0,0,0.85); z-index: 3000;
  display: flex; flex-direction: column;
}
.pm-preview-header {
  display: flex; align-items: center; justify-content: space-between;
  padding: 10px 12px; background: #1F1F1F; color: #fff;
}
.pm-preview-body {
  flex: 1; overflow: auto; display: flex; align-items: center; justify-content: center;
  padding: 12px;
}
.pm-preview-body iframe { width: 100%; height: 100%; border: none; }
.pm-preview-body img { max-width: 100%; max-height: 100%; object-fit: contain; }
.pm-preview-body table { background: #fff; color: #000; border-collapse: collapse; font-size: 12px; }
.pm-preview-body th, .pm-preview-body td { border: 1px solid #ddd; padding: 6px 8px; }
.pm-preview-body th { background: #F5F5F5; }

/* 子项文件列表 */
.pm-item-doc-list { display: flex; flex-direction: column; gap: 8px; }
.pm-item-doc-item {
  display: flex; gap: 10px; align-items: flex-start;
  background: #F9FAFB; border-radius: 8px; padding: 10px;
}
.pm-item-doc-icon { font-size: 22px; flex-shrink: 0; }
.pm-item-doc-main { flex: 1; min-width: 0; }
.pm-item-doc-name { font-size: 13px; font-weight: 500; word-break: break-all; }
.pm-item-doc-meta { font-size: 11px; color: var(--text-secondary); margin-top: 2px; }
.pm-item-doc-actions { display: flex; gap: 6px; flex-shrink: 0; }

/* 锁定标记 */
.pm-lock-badge {
  display: inline-flex; align-items: center; gap: 4px;
  font-size: 11px; color: #D46B08; background: #FFF7E6;
  padding: 2px 8px; border-radius: 8px; border: 1px solid #FFD591;
}

/* ═══════════════════════════════════════
   PM 四状态项目看板
   ═══════════════════════════════════════ */
.pm-header-actions { display: flex; gap: 10px; align-items: center; }
.pm-filter-select { width: auto; min-width: 120px; padding: 6px 10px; font-size: 13px; }

.pm-board-grid {
  display: grid;
  grid-template-columns: repeat(4, 1fr);
  gap: 14px;
  align-items: start;
}
@media (max-width: 1100px) { .pm-board-grid { grid-template-columns: repeat(2, 1fr); } }
@media (max-width: 640px)  { .pm-board-grid { grid-template-columns: 1fr; } }

.pm-board-col {
  background: var(--bg-secondary, #F7F8FA);
  border: 1px solid var(--border, #E5E7EB);
  border-radius: 12px;
  padding: 10px;
  min-height: 200px;
}
.pm-col-header {
  display: flex; align-items: baseline; gap: 8px;
  padding: 4px 6px 10px;
  border-bottom: 1px solid var(--border, #E5E7EB);
  margin-bottom: 10px;
  flex-wrap: wrap;
}
.pm-col-title { font-weight: 600; font-size: 14px; }
.pm-col-title-preparing   { color: #185FA5; }
.pm-col-title-executing   { color: #D46B08; }
.pm-col-title-accepting   { color: #993556; }
.pm-col-title-maintaining { color: #0F6E56; }
.pm-col-count {
  background: #E5E7EB; color: #444;
  font-size: 11px; padding: 1px 8px; border-radius: 10px;
}
.pm-col-hint { font-size: 11px; color: #9CA3AF; margin-left: auto; }
.pm-col-empty { text-align: center; color: #9CA3AF; font-size: 12px; padding: 24px 0; }

.pm-card {
  background: #fff; border: 1px solid #E5E7EB; border-radius: 10px;
  padding: 10px 12px; margin-bottom: 8px; cursor: pointer;
  transition: box-shadow .15s;
}
.pm-card:hover { box-shadow: 0 2px 8px rgba(0,0,0,.08); }
.pm-card-paused  { opacity: .65; background: #FFF7F7; }
.pm-card-rejected { opacity: .6; background: #FFF1F0; }

.pm-card-top { display: flex; align-items: flex-start; gap: 6px; justify-content: space-between; }
.pm-card-name { font-weight: 600; font-size: 13px; line-height: 1.4; flex: 1; word-break: break-all; }
.pm-tag { font-size: 10px; padding: 1px 6px; border-radius: 8px; white-space: nowrap; }
.pm-tag-paused     { background: #FFF1F0; color: #CF1322; border: 1px solid #FFA39E; }
.pm-tag-pending    { background: #FFF7E6; color: #D46B08; border: 1px solid #FFD591; }
.pm-tag-rejected   { background: #FFF1F0; color: #A32D2D; border: 1px solid #F09595; }
.pm-tag-unassigned { background: #F0F5FF; color: #185FA5; border: 1px solid #ADC6FF; }

.pm-card-sub { font-size: 11px; color: #6B7280; margin-top: 3px; }
.pm-card-meta { display: flex; gap: 10px; font-size: 11px; color: #6B7280; margin-top: 5px; flex-wrap: wrap; }
.pm-card-progress { height: 4px; background: #E5E7EB; border-radius: 2px; margin-top: 7px; overflow: hidden; }
.pm-card-progress-text { font-size: 10px; color: #9CA3AF; margin-top: 2px; }

.pm-card-moves { display: flex; gap: 5px; margin-top: 8px; flex-wrap: wrap; }
.pm-move-btn {
  font-size: 11px; padding: 3px 8px; border-radius: 6px;
  border: 1px solid #D1D5DB; background: #fff; color: #374151; cursor: pointer;
}
.pm-move-btn:hover { background: #F3F4F6; }
.pm-move-executing   { color: #D46B08; border-color: #FFD591; }
.pm-move-accepting   { color: #993556; border-color: #F4C0D1; }
.pm-move-maintaining { color: #0F6E56; border-color: #9FE1CB; }
.pm-move-closed      { color: #6B7280; }
.pm-move-appoint     { color: #185FA5; border-color: #ADC6FF; }
/* v20260824a：项目删除按钮（管理动作，红色警示） */
.pm-move-del { color: #e74c3c; border-color: #F5B7B1; }
.pm-move-del:hover { background: #FDECEA; }

.pm-appoint-form { display: flex; gap: 6px; margin-top: 8px; align-items: center; }
.pm-appoint-form select { flex: 1; min-width: 0; padding: 4px 6px; font-size: 12px; }

.pm-closed-area { margin-top: 16px; }
.pm-closed-toggle {
  font-size: 13px; color: #6B7280; cursor: pointer;
  padding: 8px 4px; border-top: 1px solid #E5E7EB;
}

.pm-mode-row { display: flex; gap: 18px; margin-bottom: 12px; }
.pm-mode-opt { font-size: 13px; display: flex; align-items: center; gap: 6px; cursor: pointer; }

/* ═══════════════════════════════════════
   CRM v2 — 客户分析 + 商机漏斗 + 投标保证金
   ═══════════════════════════════════════ */

/* ── 客户卡片 ── */
.crm-cust-card { cursor: pointer; }
.crm-cust-card:hover { box-shadow: 0 2px 8px rgba(0,0,0,.08); }
.grade-badge {
  display: inline-block; font-size: 11px; font-weight: 700;
  padding: 1px 8px; border-radius: 8px; color: #fff; margin-left: 6px;
  vertical-align: middle;
}
.health-bar-wrap { display: flex; align-items: center; gap: 8px; margin-top: 6px; }
.health-bar-wrap.big { margin: 8px 0; }
.health-label { font-size: 11px; color: #6B7280; white-space: nowrap; }
.health-bar { flex: 1; height: 8px; background: #E5E7EB; border-radius: 4px; overflow: hidden; }
.health-fill { height: 100%; border-radius: 4px; transition: width .3s; }
.health-val { font-size: 12px; font-weight: 600; min-width: 28px; text-align: right; }

/* ── 客户360详情 ── */
.crm-detail-view { background: var(--bg-secondary, #F7F8FA); border-radius: 12px; padding: 16px; }
.detail-header { display: flex; align-items: center; gap: 16px; margin-bottom: 14px; flex-wrap: wrap; }
.detail-header h3 { margin: 0; font-size: 18px; }
.detail-grid {
  display: grid; grid-template-columns: repeat(auto-fill, minmax(320px, 1fr));
  gap: 14px;
}
.detail-section {
  background: var(--bg-card, #fff); border: 1px solid var(--border, #E5E7EB);
  border-radius: 10px; padding: 12px 14px;
}
.detail-section h4 { margin: 0 0 8px; font-size: 14px; color: #374151; }
.detail-row { display: flex; justify-content: space-between; font-size: 12px; padding: 4px 0; border-bottom: 1px solid #F3F4F6; }
.detail-row span:first-child { color: #6B7280; }
.detail-row span:last-child { color: #1F2937; font-weight: 500; text-align: right; }
.detail-remark { font-size: 12px; color: #4B5563; line-height: 1.6; padding: 6px 0; }

/* ── 决策链 ── */
.chain-item { display: flex; align-items: center; gap: 8px; padding: 6px 0; border-bottom: 1px solid #F3F4F6; font-size: 12px; }
.chain-role { font-size: 10px; font-weight: 700; padding: 1px 6px; border-radius: 6px; color: #fff; }
.chain-role.tag-red { background: #e74c3c; }
.chain-role.tag-blue { background: #3498db; }
.chain-role.tag-green { background: #27ae60; }
.chain-role.tag-gray { background: #95a5a6; }
.chain-name { font-weight: 600; color: #1F2937; }
.chain-title { color: #6B7280; flex: 1; }
.chain-attitude { font-size: 11px; }

/* ── mini-card ── */
.mini-card {
  display: flex; align-items: center; gap: 8px; padding: 6px 8px;
  background: var(--bg-secondary, #F7F8FA); border-radius: 8px; margin-bottom: 4px;
  font-size: 12px; cursor: pointer;
}
.mini-card:hover { background: #E5E7EB; }
.mini-card .amount { margin-left: auto; font-weight: 600; color: #1F2937; }

.team-member-card { flex-wrap: wrap; cursor: default; }
.team-member-card:hover { background: var(--bg-secondary, #F7F8FA); }
.team-member-card .team-note { color: #6B7280; font-size: 11px; width: 100%; margin-top: 4px; }
.team-member-card .team-actions { margin-left: auto; display: flex; gap: 6px; }

.empty-hint-sm { font-size: 12px; color: #9CA3AF; padding: 8px 0; }

/* ── 商机漏斗看板 ── */
.crm-funnel-board {
  display: grid; grid-template-columns: repeat(6, 1fr); gap: 10px; align-items: start;
}
@media (max-width: 1300px) { .crm-funnel-board { grid-template-columns: repeat(3, 1fr); } }
@media (max-width: 768px)  { .crm-funnel-board { grid-template-columns: repeat(2, 1fr); } }

.funnel-col {
  background: var(--bg-secondary, #F7F8FA); border: 1px solid var(--border, #E5E7EB);
  border-radius: 10px; padding: 10px; min-height: 220px; display: flex; flex-direction: column;
}
.funnel-col-header {
  padding: 4px 4px 8px; border-bottom: 1px solid #E5E7EB; margin-bottom: 8px;
}
.funnel-col-title-row { display: flex; align-items: baseline; gap: 6px; }
.funnel-col-title { font-weight: 700; font-size: 13px; color: #374151; }
.funnel-col-count { background: #E5E7EB; color: #444; font-size: 11px; padding: 1px 7px; border-radius: 8px; font-weight: 600; }
.funnel-col-conversion { font-size: 10px; color: #9CA3AF; margin-top: 3px; }
.funnel-col-amount { font-size: 12px; font-weight: 600; color: #6B7280; padding: 0 4px 6px; }
.funnel-col-hint { font-size: 10px; color: #B0B8C4; padding: 0 4px 8px; }
.funnel-col-body { display: flex; flex-direction: column; gap: 8px; flex: 1; }
.funnel-empty { text-align: center; padding: 20px 8px; color: #9CA3AF; font-size: 11px; }
.funnel-empty button { margin-top: 6px; }

/* v15: lead 列顶部「快速新建商机」inline 卡片 —— 替代 page-header 弹窗/表单 */
.quick-create-card {
  background: linear-gradient(135deg, #EFF6FF 0%, #F5F8FF 100%);
  border: 1px solid #BFDBFE; border-radius: 10px;
  padding: 12px 14px; margin-bottom: 6px;
  display: flex; flex-direction: column; gap: 8px;
  box-shadow: 0 2px 10px rgba(37,99,235,0.08);
  animation: qc-slide-in 0.25s ease-out;
}
@keyframes qc-slide-in {
  from { opacity: 0; transform: translateY(-6px); }
  to   { opacity: 1; transform: translateY(0); }
}
.quick-create-card .qc-header {
  display: flex; align-items: center; justify-content: space-between;
  font-size: 13px; font-weight: 600; color: #1E40AF;
}
.quick-create-card .qc-close {
  background: transparent; border: none; cursor: pointer;
  font-size: 14px; color: #6B7280; padding: 2px 6px; border-radius: 4px;
}
.quick-create-card .qc-close:hover { background: #F3F4F6; color: #1F2937; }
.quick-create-card .qc-row { display: flex; flex-direction: column; gap: 4px; }
.quick-create-card .qc-row label {
  font-size: 11px; color: #6B7280; font-weight: 500;
}
.quick-create-card .qc-row .required { color: #e74c3c; }
.quick-create-card .qc-input {
  width: 100%; padding: 7px 10px; font-size: 13px;
  border: 1px solid #D1D5DB; border-radius: 6px;
  background: #fff; box-sizing: border-box;
}
.quick-create-card .qc-input:focus {
  outline: none; border-color: var(--primary, #2563EB);
  box-shadow: 0 0 0 3px rgba(37,99,235,0.1);
}
.quick-create-card .qc-summary {
  font-size: 11px; color: #6B7280;
  padding: 6px 10px; background: rgba(255,255,255,0.6); border-radius: 6px;
}
.quick-create-card .qc-error {
  font-size: 12px; color: #B91C1C;
  padding: 6px 10px; background: #FEF2F2; border-radius: 6px;
  border-left: 3px solid #e74c3c;
}
.quick-create-card .qc-actions {
  display: flex; gap: 8px; justify-content: flex-end; margin-top: 2px;
}
.quick-create-card .qc-actions .btn-cancel { font-size: 12px; padding: 6px 14px; }
.quick-create-card .qc-actions .btn-primary { font-size: 12px; padding: 6px 14px; }
@media (max-width: 640px) {
  .quick-create-card { padding: 10px 12px; }
}

/* ════════════════════════════════════════════════════════════════
   v31: 新建商机独立弹窗详情页（IMDP 模式 · 1080px · 三段结构）
   遵循 independent-modal-detail-page Skill 规范：
   遮罩层 / 居中卡片 / header-tabs-body-footer / 内联异常 / 响应式
   ════════════════════════════════════════════════════════════════ */
/* ① 遮罩层 */
.ofm-overlay {
  position: fixed;
  inset: 0;
  background: rgba(15, 23, 42, 0.5);
  backdrop-filter: blur(2px);
  z-index: 2100;
  display: flex;
  align-items: center;
  justify-content: center;
  padding: 24px;
  box-sizing: border-box;
  animation: ofmFadeIn .15s ease;
}
/* ② 居中卡片：1080px × 90vh，独立三段 flex 布局 */
.ofm-card {
  background: #fff;
  border-radius: 14px;
  box-shadow: 0 24px 70px rgba(0, 0, 0, 0.35);
  width: 1080px;
  max-width: 100%;
  max-height: 90vh;
  display: flex;
  flex-direction: column;
  overflow: hidden;
  animation: ofmSlideUp .18s ease;
}
/* ③ header（固定，不滚动） */
.ofm-header {
  display: flex; align-items: center; gap: 12px;
  padding: 16px 24px;
  border-bottom: 1px solid #E5E7EB;
  flex-shrink: 0;
}
.ofm-header .ofm-icon {
  width: 38px; height: 38px; border-radius: 10px;
  background: linear-gradient(135deg, #3B82F6, #2563EB);
  color: #fff; font-size: 18px;
  display: flex; align-items: center; justify-content: center;
  flex-shrink: 0;
}
.ofm-title-wrap { flex: 1; min-width: 0; }
.ofm-title {
  font-size: 17px; font-weight: 700; color: #111827;
  display: flex; align-items: center; gap: 10px;
}
.ofm-stage-badge {
  font-size: 12px; font-weight: 600; color: #1D4ED8;
  background: #DBEAFE; border-radius: 20px; padding: 2px 10px;
  white-space: nowrap;
}
.ofm-subtitle { font-size: 12px; color: #8A94A3; margin-top: 2px; }
.ofm-close {
  width: 32px; height: 32px; border-radius: 8px; border: none;
  background: transparent; color: #6B7280; font-size: 16px;
  cursor: pointer; flex-shrink: 0;
  display: flex; align-items: center; justify-content: center;
  transition: background .12s;
}
.ofm-close:hover { background: #F3F4F6; color: #1F2937; }

/* Tab 导航（紧随 header，固定） */
.ofm-tabs {
  display: flex; gap: 4px;
  padding: 0 24px;
  border-bottom: 1px solid #E5E7EB;
  background: #FAFBFC;
  flex-shrink: 0;
  overflow-x: auto;
}
.ofm-tab-btn {
  border: none; background: transparent; cursor: pointer;
  font-size: 13px; font-weight: 500; color: #6B7280;
  padding: 11px 14px;
  border-bottom: 2px solid transparent;
  white-space: nowrap;
  display: flex; align-items: center; gap: 6px;
}
.ofm-tab-btn:hover { color: #2563EB; }
.ofm-tab-btn.active { color: #2563EB; border-bottom-color: #2563EB; font-weight: 600; }
.ofm-tab-dot {
  width: 6px; height: 6px; border-radius: 50%;
  background: #EF4444; display: none;
}
.ofm-tab-btn.has-required .ofm-tab-dot { display: inline-block; }

/* body（唯一滚动区） */
.ofm-body { flex: 1; overflow-y: auto; padding: 20px 24px; }
.ofm-pane { display: none; }
.ofm-pane.active { display: block; animation: ofmPaneIn .15s ease; }

/* 分组标题 */
.ofm-section-title {
  font-size: 13px; font-weight: 700; color: #374151;
  margin: 18px 0 12px; display: flex; align-items: center; gap: 8px;
}
.ofm-section-title:first-child { margin-top: 0; }
.ofm-section-title::before {
  content: ''; width: 3px; height: 14px; border-radius: 2px;
  background: #2563EB; display: inline-block;
}
.ofm-section-hint { font-size: 12px; color: #8A94A3; font-weight: 400; }

/* 三闸门进度指引条 */
.ofm-gate-guide {
  display: flex; align-items: center; gap: 0;
  background: #F8FAFF; border: 1px solid #DBEAFE; border-radius: 10px;
  padding: 10px 16px; margin-bottom: 4px;
}
.ofm-gate-step {
  flex: 1; text-align: center; font-size: 12px; color: #6B7280;
  position: relative; padding: 2px 0;
}
.ofm-gate-step .gi { font-size: 14px; display: block; margin-bottom: 2px; }
.ofm-gate-step.cur { color: #1D4ED8; font-weight: 600; }
.ofm-gate-arrow { color: #C7D2E8; font-size: 14px; padding: 0 4px; }

/* BANT 维度行 */
.ofm-bant-row {
  display: flex; align-items: flex-start; gap: 12px;
  padding: 12px 14px; border: 1px solid #E5E7EB; border-radius: 10px;
  margin-bottom: 10px; background: #fff;
  transition: border-color .12s;
}
.ofm-bant-row:hover { border-color: #BFDBFE; }
.ofm-bant-row.checked { border-color: #93C5FD; background: #F0F7FF; }
.ofm-bant-check {
  display: flex; align-items: center; gap: 8px; flex-shrink: 0;
  width: 200px; cursor: pointer; user-select: none;
}
.ofm-bant-check input[type="checkbox"] {
  width: 18px; height: 18px; accent-color: #2563EB; cursor: pointer;
}
.ofm-bant-check .bl { font-size: 13px; font-weight: 600; color: #1F2937; }
.ofm-bant-check .bs { font-size: 11px; color: #8A94A3; display: block; }
.ofm-bant-desc {
  font-size: 12px; color: #6B7280; line-height: 1.5; flex: 1;
  padding-top: 2px;
}
.ofm-bant-score {
  font-size: 12px; font-weight: 700; color: #1D4ED8;
  background: #DBEAFE; border-radius: 14px; padding: 2px 10px;
  flex-shrink: 0; margin-top: 2px;
}

/* MEDDPICC 字段块 */
.ofm-meddpicc-item { margin-bottom: 14px; }
.ofm-meddpicc-item label {
  font-size: 13px; font-weight: 600; color: #374151;
  display: flex; align-items: center; gap: 6px; margin-bottom: 6px;
}
.ofm-meddpicc-item label .abbr {
  font-size: 11px; font-weight: 700; color: #7C3AED;
  background: #EDE9FE; border-radius: 6px; padding: 1px 7px;
}
.ofm-meddpicc-item textarea {
  width: 100%; box-sizing: border-box;
  font-size: 13px; padding: 9px 11px; border-radius: 8px;
  border: 1px solid #D1D5DB; background: #FAFBFC;
  min-height: 64px; resize: vertical; font-family: inherit;
  transition: border-color .12s, background .12s;
}
.ofm-meddpicc-item textarea:focus {
  outline: none; border-color: #2563EB; background: #fff;
  box-shadow: 0 0 0 3px rgba(37,99,235,0.08);
}
.ofm-filled-count {
  font-size: 12px; color: #6B7280; margin-left: auto; font-weight: 400;
}

/* 系统信息只读字段 */
.ofm-readonly-grid {
  display: grid; grid-template-columns: repeat(3, 1fr); gap: 12px 20px;
}
.ofm-readonly-item {
  background: #F9FAFB; border-radius: 8px; padding: 10px 12px;
}
.ofm-readonly-item .k { font-size: 11px; color: #8A94A3; margin-bottom: 3px; }
.ofm-readonly-item .v { font-size: 13px; color: #1F2937; font-weight: 500; word-break: break-all; }

/* ④ footer（固定，不滚动） */
.ofm-footer {
  display: flex; align-items: center; gap: 10px;
  padding: 14px 24px;
  border-top: 1px solid #E5E7EB;
  background: #FAFBFC;
  flex-shrink: 0;
}
.ofm-footer .ofm-footer-left { display: flex; gap: 10px; }
.ofm-footer .ofm-footer-right { display: flex; gap: 10px; margin-left: auto; }
.ofm-btn {
  border-radius: 8px; cursor: pointer; font-size: 13px; font-weight: 500;
  padding: 9px 18px; border: 1px solid transparent;
  transition: all .12s; font-family: inherit;
}
.ofm-btn:disabled { opacity: .55; cursor: not-allowed; }
.ofm-btn-ghost { background: transparent; border-color: #D1D5DB; color: #6B7280; }
.ofm-btn-ghost:hover:not(:disabled) { background: #F3F4F6; color: #1F2937; }
.ofm-btn-secondary { background: #fff; border-color: #2563EB; color: #2563EB; }
.ofm-btn-secondary:hover:not(:disabled) { background: #EFF6FF; }
.ofm-btn-primary { background: #2563EB; color: #fff; }
.ofm-btn-primary:hover:not(:disabled) { background: #1D4ED8; }
.ofm-btn-primary:disabled { background: #93C5FD; }

/* ⑤ 内联异常反馈：顶部 banner + 字段级红框 */
.ofm-error-banner {
  display: none;
  align-items: center; gap: 8px;
  background: #FEF2F2; border: 1px solid #FECACA; border-left: 4px solid #EF4444;
  color: #B91C1C; font-size: 13px; font-weight: 500;
  border-radius: 8px; padding: 10px 14px; margin-bottom: 14px;
}
.ofm-error-banner.show { display: flex; }
.ofm-field-error .input-field,
.ofm-field-error textarea,
.ofm-field-error select {
  border-color: #EF4444 !important;
  background: #FEF2F2 !important;
}
.ofm-field-errtext { font-size: 12px; color: #EF4444; margin-top: 3px; display: none; }
.ofm-field-error .ofm-field-errtext { display: block; }

/* 弹窗内字段网格复用 opp-form-grid，但 1080 宽弹窗用 3 列 */
.ofm-pane .opp-form-grid { grid-template-columns: repeat(3, 1fr); }
@media (max-width: 900px) {
  .ofm-pane .opp-form-grid { grid-template-columns: repeat(2, 1fr); }
}

/* ⑦ 响应式 */
@media (max-width: 1150px) {
  .ofm-card { width: 95vw; }
}
@media (max-width: 768px) {
  .ofm-overlay { padding: 0; }
  .ofm-card { width: 100vw; max-height: 100vh; height: 100vh; border-radius: 0; }
  .ofm-pane .opp-form-grid { grid-template-columns: 1fr; }
  .ofm-readonly-grid { grid-template-columns: 1fr; }
  .ofm-footer { flex-wrap: wrap; }
  .ofm-footer .ofm-footer-right { margin-left: 0; width: 100%; justify-content: stretch; }
  .ofm-footer .ofm-btn { flex: 1; }
  .ofm-bant-check { width: 130px; }
}

/* ═══════════════════════════════════════
   v30: 客户归属标签 + 权限 UI
   ═══════════════════════════════════════ */
.cust-owner-tag {
  display: inline-block;
  font-size: 11px;
  padding: 1px 7px;
  border-radius: 10px;
  margin-left: 4px;
  background: #e8ecf1;
  color: #6c757d;
  white-space: nowrap;
}
.cust-owner-tag.mine {
  background: #d4edda;
  color: #155724;
}
.cust-owner-tag.pool {
  background: #fff3cd;
  color: #856404;
}
.nav-group.hidden {
  display: none !important;
}

@keyframes ofmFadeIn { from { opacity: 0; } to { opacity: 1; } }
@keyframes ofmSlideUp { from { transform: translateY(14px) scale(.985); opacity: 0; } to { transform: none; opacity: 1; } }
@keyframes ofmPaneIn { from { opacity: 0; transform: translateY(4px); } to { opacity: 1; transform: none; } }

/* 过滤器 */
.funnel-filter-bar {
  display: flex; gap: 8px; flex-wrap: wrap; align-items: center;
  background: var(--bg-secondary, #F7F8FA); border: 1px solid var(--border, #E5E7EB);
  border-radius: 10px; padding: 10px 12px; margin-bottom: 8px;
}
.funnel-filter-bar .input-field { min-width: 120px; flex: 1; font-size: 12px; padding: 6px 8px; }
.funnel-summary-inline { display: flex; gap: 6px; margin-left: auto; }
.funnel-summary-pill {
  font-size: 11px; background: #EEF0F3; color: #4B5563;
  padding: 3px 10px; border-radius: 12px; font-weight: 500;
}

/* ── 商机卡片 v2（销售漏斗看板） ── */
.opp-card {
  background: var(--bg-card, #fff); border: 1px solid #E5E7EB; border-radius: 8px;
  cursor: pointer; transition: box-shadow .15s, transform .1s; overflow: hidden;
  display: flex; position: relative;
}
.opp-card:hover { box-shadow: 0 4px 12px rgba(0,0,0,.1); transform: translateY(-1px); }
.opp-card.opp-won { border-color: #27ae60; background: #F0FFF4; }
.opp-card.opp-lost { border-color: #e74c3c; background: #FFF5F5; opacity: .7; }
.opp-card-priority-bar { width: 4px; flex-shrink: 0; }
.opp-card-priority-bar.priority-high { background: #e74c3c; }
.opp-card-priority-bar.priority-medium { background: #f39c12; }
.opp-card-priority-bar.priority-low { background: #27ae60; }
.opp-card-body { flex: 1; padding: 8px 10px; min-width: 0; }
.opp-card-title { font-weight: 700; font-size: 12px; line-height: 1.3; color: #1F2937; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
.opp-card-sub { font-size: 10px; color: #6B7280; margin-top: 3px; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
.opp-card-amount-row { display: flex; align-items: baseline; justify-content: space-between; margin-top: 6px; }
.opp-card-amount { font-size: 14px; font-weight: 700; color: #1F2937; }
.opp-card-prob { font-size: 11px; font-weight: 700; }
.opp-card-prob-bar { height: 4px; background: #E5E7EB; border-radius: 2px; margin-top: 4px; overflow: hidden; }
.opp-card-prob-bar > div { height: 100%; border-radius: 2px; transition: width .3s; }
.opp-card-meta-row { display: flex; justify-content: space-between; font-size: 10px; color: #6B7280; margin-top: 6px; }
.opp-card-next { font-size: 10px; color: #4B5563; margin-top: 5px; padding: 4px 6px; background: #F3F4F6; border-radius: 4px; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
.opp-card-footer { display: flex; align-items: center; justify-content: space-between; margin-top: 6px; min-height: 18px; }
.opp-card-gate { font-size: 9px; padding: 1px 4px; border-radius: 4px; border: 1px solid; margin-right: 3px; }
.opp-card-actions { display: none; gap: 4px; }
.opp-card:hover .opp-card-actions { display: flex; }
.opp-card-action {
  font-size: 10px; padding: 2px 6px; border-radius: 4px; border: 1px solid #D1D5DB;
  background: #fff; color: #374151; cursor: pointer;
}
.opp-card-action:hover { background: #F3F4F6; }

/* ── 闸门面板 ── */
.gate-row { padding: 8px 0; border-bottom: 1px solid #F3F4F6; }
.gate-info { display: flex; align-items: center; justify-content: space-between; }
.gate-name { font-weight: 600; font-size: 13px; color: #1F2937; }
.gate-status { font-size: 12px; font-weight: 600; }
.gate-desc { font-size: 11px; color: #6B7280; margin: 4px 0; }
.gate-pending { font-size: 11px; color: #f39c12; }

/* ── 评审记录 ── */
.review-item { display: flex; align-items: center; gap: 8px; padding: 5px 0; border-bottom: 1px solid #F3F4F6; font-size: 12px; }
.review-gate { font-weight: 600; color: #374151; }
.review-note { color: #6B7280; flex: 1; }

/* ── BANT ── */
.bant-total { font-size: 20px; font-weight: 700; margin-bottom: 6px; }

/* ── 阶段流转按钮 ── */
.move-row { display: flex; gap: 6px; flex-wrap: wrap; margin-top: 8px; }

/* ── 状态标签 ── */
.tag-red { background: #e74c3c22; color: #e74c3c; }
.tag-blue { background: #3498db22; color: #3498db; }
.tag-green { background: #27ae6022; color: #27ae60; }
.tag-orange { background: #f39c1222; color: #f39c12; }
.tag-gray { background: #95a5a622; color: #95a5a6; }

/* ── 赢/输区 ── */
.won-lost-section { margin-top: 16px; padding-top: 12px; border-top: 2px solid #E5E7EB; }
.won-lost-section h4 { font-size: 14px; margin: 0 0 8px; color: #374151; }
.won-lost-list { display: grid; grid-template-columns: repeat(auto-fill, minmax(280px, 1fr)); gap: 8px; }

/* ═══════════════════════════════════════
   CRM v3 — 双子模块看板 / 360 详情 / 全生命周期
   ═══════════════════════════════════════ */

/* tab 提示条 */
.crm-sub-hint { font-size: 12px; color: var(--text-secondary); padding: 6px 2px 10px; display: flex; align-items: center; gap: 6px; }
.crm-hint-dot { width: 6px; height: 6px; border-radius: 50%; background: var(--primary); display: inline-block; }

/* 看板容器 */
.crm-dashboard { display: flex; flex-direction: column; gap: 12px; }
.crm-dash-row { display: grid; grid-template-columns: repeat(auto-fit, minmax(220px, 1fr)); gap: 10px; }
.crm-dash-panel { background: var(--bg-secondary, #F7F8FA); border: 1px solid var(--border, #E5E7EB); border-radius: 10px; padding: 12px; }
.crm-dash-title { font-size: 13px; font-weight: 600; color: #374151; margin-bottom: 8px; }
.crm-dash-sub { font-size: 12px; color: #6B7280; margin-top: 8px; }

/* 分级 chips */
.crm-dash-chips { display: flex; gap: 8px; flex-wrap: wrap; }
.crm-dash-chip { display: flex; flex-direction: column; align-items: center; min-width: 72px; border: 1px solid; border-radius: 8px; padding: 8px 6px; background: #fff; }
.crm-dash-chip-val { font-size: 20px; font-weight: 700; }
.crm-dash-chip-label { font-size: 11px; color: #6B7280; margin-top: 2px; }

/* 行业 tags */
.crm-dash-tags { display: flex; flex-wrap: wrap; gap: 6px; }
.crm-tag-chip { font-size: 11px; background: #EEF0F3; color: #4B5563; padding: 3px 8px; border-radius: 10px; }

/* 负责人盘面 */
.crm-owner-grid { display: grid; grid-template-columns: repeat(auto-fill, minmax(130px, 1fr)); gap: 6px; }
.crm-owner-mini { display: flex; flex-direction: column; background: #fff; border: 1px solid var(--border, #E5E7EB); border-radius: 8px; padding: 6px 8px; }
.crm-owner-name { font-size: 12px; font-weight: 600; color: #1F2937; }
.crm-owner-num { font-size: 11px; color: #6B7280; margin-top: 2px; }

/* 列表头 */
.crm-list-head { display: flex; align-items: center; gap: 8px; margin: 4px 0 8px; }
.crm-list-head h4 { margin: 0; font-size: 14px; color: #374151; }
.crm-list-count { font-size: 11px; background: #EEF0F3; color: #6B7280; padding: 2px 8px; border-radius: 10px; }

/* 客户卡片网格 */
.crm-cards { display: grid; grid-template-columns: repeat(auto-fill, minmax(320px, 1fr)); gap: 10px; }

/* 质量评分徽章 */
.quality-badge { font-size: 10px; font-weight: 600; padding: 2px 6px; border-radius: 6px; margin-left: 6px; }

/* 按钮小号 */
.btn-xs { font-size: 11px; padding: 1px 5px; }

/* mini-card 标题 */
.mini-card-title { font-weight: 600; color: #1F2937; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; max-width: 55%; }

/* 决策链操作 */
.chain-actions { margin-left: auto; display: flex; gap: 4px; }

/* ═══ v6 决策链地图：资料驱动 + 严格归属人 + 智能体 ═══ */
.chain-map-container { display: flex; flex-direction: column; gap: 12px; }

.chain-perm-bar { padding: 8px 12px; border-radius: 8px; background: #F0F7FF; }
.chain-perm-badge { font-size: 12px; font-weight: 600; }
.chain-perm-owner { color: #1F77B4; }
.chain-perm-chat { color: #17A2B8; }
.chain-perm-view { color: #95a5a6; }

.chain-section-header { display: flex; align-items: center; justify-content: space-between; margin-bottom: 8px; }

.chain-cards-grid { display: grid; grid-template-columns: repeat(auto-fill, minmax(240px, 1fr)); gap: 10px; }

.chain-card { background: #fff; border: 1px solid #E5E7EB; border-radius: 8px; padding: 10px 12px; position: relative; }
.chain-card-header { display: flex; align-items: center; gap: 6px; margin-bottom: 6px; flex-wrap: wrap; }
.chain-role-tag { font-size: 11px; font-weight: 700; padding: 2px 8px; border-radius: 6px; }
.chain-ai-tag { font-size: 10px; padding: 1px 6px; border-radius: 4px; background: #D4AF3722; color: #D4AF37; font-weight: 600; }
.chain-stage-tag { font-size: 11px; font-weight: 600; }
.chain-card-name { font-size: 14px; font-weight: 700; color: #1F2937; margin-bottom: 2px; }
.chain-card-title { font-size: 12px; color: #6B7280; margin-bottom: 6px; }
.chain-card-meta { display: flex; gap: 8px; flex-wrap: wrap; margin-bottom: 4px; }
.chain-meta-item { font-size: 11px; color: #4B5563; background: #F3F4F6; padding: 1px 6px; border-radius: 4px; }
.chain-card-contact { font-size: 11px; color: #6B7280; margin-bottom: 4px; }
.chain-card-remark { font-size: 12px; color: #4B5563; line-height: 1.4; margin-top: 4px; padding-top: 6px; border-top: 1px dashed #E5E7EB; }
.chain-card-actions { position: absolute; top: 8px; right: 8px; display: flex; gap: 4px; }

.chain-section-row { display: flex; gap: 12px; flex-wrap: wrap; }

.chain-artifact-list { margin-bottom: 8px; }
.chain-artifact-item { display: flex; align-items: center; gap: 6px; padding: 4px 0; border-bottom: 1px solid #F3F4F6; font-size: 12px; }
.chain-artifact-icon { font-size: 14px; }
.chain-artifact-name { flex: 1; color: #1F2937; font-weight: 500; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
.chain-artifact-uploader { font-size: 11px; color: #9CA3AF; }
.chain-artifact-processed { font-size: 10px; color: #27ae60; }

.chain-upload-area { display: flex; flex-direction: column; gap: 6px; margin-top: 8px; }
.chain-file-input { font-size: 12px; }
.chain-text-input { font-size: 12px; resize: vertical; }

.chain-ai-generate-box { text-align: center; padding: 12px; }
.chain-ai-desc { font-size: 12px; color: #6B7280; line-height: 1.5; margin-bottom: 10px; }
.chain-ai-locked { font-size: 12px; color: #9CA3AF; padding: 8px; background: #F9FAFB; border-radius: 6px; }

.chain-agent-info { display: flex; align-items: center; gap: 10px; margin-bottom: 10px; padding: 8px 12px; background: #FFFBE6; border-radius: 8px; }
.chain-agent-avatar { width: 36px; height: 36px; border-radius: 50%; display: flex; align-items: center; justify-content: center; font-size: 18px; }
.chain-agent-name { font-weight: 700; color: #1F2937; font-size: 14px; }
.chain-agent-desc { font-size: 12px; color: #6B7280; }

.chain-chat-panel { border: 1px solid #E5E7EB; border-radius: 8px; overflow: hidden; }
.chain-chat-history { max-height: 360px; overflow-y: auto; padding: 10px; background: #FAFAFA; }
.chain-chat-msg { margin-bottom: 10px; }
.chain-chat-user .chain-chat-sender { color: #3498db; }
.chain-chat-agent .chain-chat-sender { color: #D4AF37; }
.chain-chat-sender { font-size: 12px; font-weight: 600; margin-bottom: 2px; }
.chain-chat-text { font-size: 13px; color: #1F2937; line-height: 1.5; padding: 8px 12px; border-radius: 8px; background: #fff; border: 1px solid #E5E7EB; }
.chain-chat-agent .chain-chat-text { background: #FFFEF0; border-color: #D4AF3744; }
.chain-chat-input-area { display: flex; gap: 8px; padding: 8px; border-top: 1px solid #E5E7EB; background: #fff; }
.chain-chat-input { flex: 1; resize: none; }

.chain-chat-proposed { margin-top: 6px; padding: 8px; background: #F0F7FF; border-radius: 6px; border: 1px solid #3498db33; }
.chain-chat-proposed-title { font-size: 12px; font-weight: 600; color: #3498db; margin-bottom: 4px; }
.chain-chat-proposed-item { display: flex; align-items: center; gap: 6px; font-size: 12px; margin-bottom: 4px; }
.chain-proposed-op { font-size: 10px; font-weight: 700; padding: 1px 6px; border-radius: 4px; background: #3498db22; color: #3498db; }
.chain-proposed-name { font-weight: 600; color: #1F2937; }

/* AI 推送 */
.ai-push-item { border: 1px solid var(--border, #E5E7EB); border-radius: 8px; padding: 8px 10px; margin-bottom: 8px; background: #fff; }
.ai-push-head { display: flex; align-items: center; gap: 8px; margin-bottom: 4px; }
.ai-push-time { font-size: 11px; color: #9CA3AF; }
.ai-push-badge { font-size: 10px; font-weight: 600; padding: 2px 6px; border-radius: 6px; background: #E6F4FF; color: var(--primary); }
.ai-push-body { font-size: 12px; color: #4B5563; line-height: 1.6; white-space: pre-wrap; }

/* 全宽区块 */
.detail-section-full { grid-column: 1 / -1; }

/* LTC 阶段进度条 */
.stage-progress { display: flex; align-items: flex-start; gap: 0; margin: 10px 0 14px; overflow-x: auto; padding-bottom: 4px; }
.stage-step { display: flex; flex-direction: column; align-items: center; min-width: 86px; position: relative; flex: 1; }
.stage-step::before { content: ''; position: absolute; top: 7px; left: 0; right: 50%; height: 2px; background: #E5E7EB; }
.stage-step:first-child::before { display: none; }
.stage-dot { width: 14px; height: 14px; border-radius: 50%; background: #E5E7EB; border: 2px solid #fff; box-shadow: 0 0 0 2px #E5E7EB; z-index: 1; }
.stage-label { font-size: 11px; color: #9CA3AF; margin-top: 4px; white-space: nowrap; }
.stage-current .stage-dot { background: var(--primary); box-shadow: 0 0 0 2px var(--primary); }
.stage-current .stage-label { color: var(--primary); font-weight: 600; }
/* v10: 已通过的阶段 */
.stage-done .stage-dot { background: #27ae60; box-shadow: 0 0 0 2px #27ae60; }
.stage-done .stage-label { color: #27ae60; }

/* v10: 详情页精简 —— 折叠扩展区 / 放弃横幅 / 基础信息 */
.crm-collapse-wrap { display: flex; flex-direction: column; gap: 8px; margin-top: 12px; }
.crm-collapse { border: 1px solid var(--border, #E5E7EB); border-radius: 10px; background: #fff; overflow: hidden; }
.crm-collapse summary { cursor: pointer; padding: 10px 14px; font-size: 13px; font-weight: 600; color: #1F2937; list-style: none; display: flex; align-items: center; gap: 6px; }
.crm-collapse summary::-webkit-details-marker { display: none; }
.crm-collapse summary::after { content: '▾'; margin-left: auto; color: #9CA3AF; transition: transform .2s; }
.crm-collapse[open] summary::after { transform: rotate(180deg); }
.crm-collapse summary:hover { background: #F8FAFC; }
.collapse-body { padding: 0 14px 14px; }
.detail-meta { font-size: 11px; color: #6B7280; margin-top: 8px; padding-top: 8px; border-top: 1px dashed #EEF0F3; }
.detail-header-actions { display: flex; gap: 6px; align-items: center; margin-left: auto; }
.btn-abandon { color: #e67e22; border-color: #e67e22; }
.abandon-banner { border: 1px solid #f5c98a; background: #FFF8ED; border-radius: 10px; padding: 10px 14px; margin: 6px 0 2px; }
.abandon-title { font-size: 13px; font-weight: 700; color: #b45309; }
.abandon-meta { font-size: 12px; color: #92610d; margin: 4px 0 8px; }

/* v10: 放弃存档列表 */
.abandoned-list { display: flex; flex-direction: column; gap: 8px; margin-top: 10px; }
.abandoned-card { border: 1px solid var(--border, #E5E7EB); border-radius: 10px; background: #fff; padding: 10px 14px; cursor: pointer; }
.abandoned-card:hover { border-color: #e67e22; box-shadow: 0 1px 4px rgba(230,126,34,.15); }
.abandoned-card-head { display: flex; align-items: center; gap: 8px; }
.abandoned-card-title { font-size: 13px; font-weight: 600; color: #1F2937; flex: 1; }
.abandoned-card-amount { font-size: 13px; font-weight: 700; color: #e67e22; }
.abandoned-card-sub { font-size: 11px; color: #6B7280; margin-top: 4px; }
.abandoned-card-reason { font-size: 12px; color: #374151; margin-top: 6px; background: #FFF8ED; border-radius: 6px; padding: 6px 8px; }
.abandoned-card-meta { display: flex; align-items: center; gap: 10px; margin-top: 8px; font-size: 11px; color: #9CA3AF; }
.abandoned-head-actions { display: flex; align-items: center; gap: 8px; }


/* 里程碑 */
.ms-group { margin-bottom: 12px; }
.ms-group-head { display: flex; align-items: center; gap: 8px; margin-bottom: 4px; }
.ms-group-title { font-size: 12px; font-weight: 600; color: #374151; }
.ms-group-progress { font-size: 11px; color: #6B7280; }
.ms-bar { flex: 1; height: 4px; background: #EEF0F3; border-radius: 2px; overflow: hidden; }
.ms-bar-fill { height: 100%; background: var(--primary); border-radius: 2px; transition: width .3s; }
.ms-list { display: flex; flex-direction: column; gap: 4px; }
.ms-item { display: flex; align-items: center; gap: 8px; padding: 6px 8px; border: 1px solid var(--border, #E5E7EB); border-radius: 8px; cursor: pointer; background: #fff; font-size: 12px; }
.ms-item:hover { border-color: var(--primary); }
.ms-item.ms-done { background: #F6FFED; border-color: #B7EB8F; opacity: .85; }
.ms-check { font-size: 13px; }
.ms-name { font-weight: 600; color: #1F2937; }
.ms-item.ms-done .ms-name { text-decoration: line-through; color: #8c9a8c; }
.ms-desc { color: #6B7280; font-size: 11px; flex: 1; }
.ms-due { font-size: 11px; color: #9CA3AF; white-space: nowrap; }

/* ═══ v13 里程碑编辑增强（方案 V1.0 第四/五/六章）═══ */
.ms-toolbar { display: flex; align-items: center; justify-content: space-between; margin-bottom: 10px; }
.ms-toolbar-title { font-size: 12px; font-weight: 600; color: #374151; }
.ms-owner { font-size: 11px; color: #4B5563; white-space: nowrap; }
.ms-status { font-size: 10px; padding: 1px 6px; border-radius: 6px; white-space: nowrap; font-weight: 600; }
.ms-actions { margin-left: auto; display: flex; gap: 4px; align-items: center; }
.ms-item { cursor: default; }
.ms-item .ms-check { cursor: pointer; }
.ms-item.ms-overdue { border-color: #E74C3C; background: #FFF5F5; }
.ms-item.dragging { opacity: .5; border-style: dashed; }
/* 编辑卡片（4.2：蓝色边框 + #E6F1FB 底色） */
.ms-edit-card { border: 1px solid #4A90D9; background: #E6F1FB; border-radius: 8px; padding: 8px 10px; margin-bottom: 4px; }
.ms-new-card { border: 1px dashed #E67E22; background: #FAEEDA; }
.ms-edit-grid { display: flex; flex-wrap: wrap; gap: 8px; align-items: flex-end; }
.ms-edit-field { display: flex; flex-direction: column; gap: 2px; }
.ms-edit-field label { font-size: 10px; color: #6B7280; }
.ms-edit-field .required { color: #E74C3C; margin-left: 2px; }
.ms-edit-field .input-field { font-size: 12px; padding: 4px 6px; }
.ms-edit-actions { display: flex; gap: 6px; align-items: center; margin-top: 6px; flex-wrap: wrap; }
.ms-err { color: #E74C3C; font-size: 11px; }
.ms-del-confirm { color: #E74C3C; font-size: 11px; background: #FDECEC; border-radius: 6px; padding: 2px 8px; }
/* 必填配置菜单（5.2） */
.ms-required-toggle { position: relative; }
.ms-required-menu { display: none; position: absolute; z-index: 50; top: 22px; left: 0; background: #fff; border: 1px solid #E5E7EB; border-radius: 8px; box-shadow: 0 4px 12px rgba(0,0,0,.08); padding: 6px 8px; min-width: 130px; }
.ms-required-menu.open { display: block; }
.ms-required-opt { display: flex; align-items: center; gap: 4px; font-size: 11px; color: #374151; padding: 2px 0; cursor: pointer; }

/* 文档上传 */
.doc-item { display: flex; align-items: center; gap: 8px; }
.doc-cat { font-size: 10px; background: #EEF0F3; color: #4B5563; padding: 1px 6px; border-radius: 6px; }
.doc-size { font-size: 11px; color: #9CA3AF; }
.doc-actions { margin-left: auto; display: flex; gap: 6px; align-items: center; }
.doc-upload-row { display: flex; gap: 6px; margin-top: 8px; align-items: center; flex-wrap: wrap; }
.doc-file-input { font-size: 11px; flex: 1; min-width: 120px; }
.doc-cat-select { width: auto; font-size: 11px; padding: 4px 6px; }

/* 漏斗列提示 */
.funnel-col-hint { font-size: 10px; color: #B0B8C4; padding: 0 4px 6px; }

/* 高优先级商机 */
.crm-high-priority { margin-bottom: 4px; }
.crm-opp-high-sub { font-size: 11px; color: #6B7280; display: block; margin-top: 2px; }

/* 评审状态 */
.review-status { font-size: 11px; font-weight: 600; }

/* ═══ CRM v4 — 关系成熟度 + AI 自扫描 ═══ */
.detail-header-actions { display: flex; gap: 8px; align-items: center; margin-left: auto; }
.btn-outline { background: transparent; border: 1px solid var(--primary, #2563EB); color: var(--primary, #2563EB); border-radius: 8px; font-size: 12px; padding: 6px 12px; cursor: pointer; }
.btn-outline:hover { background: var(--primary, #2563EB); color: #fff; }

/* 扫描状态角标 */
.scan-badge { font-size: 10px; font-weight: 600; padding: 2px 6px; border-radius: 6px; margin-left: 6px; vertical-align: 2px; }
.scan-done { background: #27ae6022; color: #27ae60; }
.scan-todo { background: #8e44ad22; color: #8e44ad; }

/* 客户卡片：关系成熟度行 */
.rel-stage-line { display: flex; align-items: center; gap: 6px; margin-top: 6px; font-size: 11px; }
.rel-stage-dot { width: 8px; height: 8px; border-radius: 50%; display: inline-block; }
.rel-stage-text { font-weight: 600; }
.rel-stage-hint { color: #9CA3AF; font-size: 10px; }

/* 看板：AI 扫描覆盖 */
.crm-scan-coverage .health-bar { height: 8px; margin: 6px 0; }

/* 详情 360：关系成熟度大卡 */
.rel-stage-big { border: 2px dashed; border-radius: 10px; padding: 12px; text-align: center; margin-bottom: 10px; }
.rel-stage-ring { font-size: 22px; font-weight: 700; }
.rel-stage-desc { font-size: 12px; color: #6B7280; margin-top: 4px; }

/* 详情 360：三层关系 */
.rel3-grid { display: grid; grid-template-columns: repeat(3, 1fr); gap: 8px; margin-bottom: 6px; }
.rel3-item { display: flex; flex-direction: column; gap: 4px; }
.rel3-label { font-size: 11px; color: #6B7280; }
.rel3-note { font-size: 10px; color: #9CA3AF; margin-bottom: 8px; }

/* AI 情报中心 */
.scan-intro { font-size: 12px; color: #6B7280; background: #F3F0FA; border: 1px solid #E5DDF5; border-radius: 8px; padding: 8px 10px; margin-bottom: 10px; line-height: 1.6; }
.scan-source-row { display: flex; gap: 8px; align-items: center; flex-wrap: wrap; margin-bottom: 12px; }
.scan-source-row .input-field { flex: 1; min-width: 160px; }
.scan-list { display: flex; flex-direction: column; gap: 6px; margin-bottom: 14px; }
.scan-item { display: flex; align-items: center; gap: 8px; padding: 7px 10px; border: 1px solid var(--border, #E5E7EB); border-radius: 8px; background: #fff; font-size: 12px; flex-wrap: wrap; }
.scan-type { font-size: 10px; font-weight: 600; background: #EEF0F3; color: #4B5563; padding: 1px 6px; border-radius: 6px; }
.scan-status { font-size: 11px; font-weight: 600; padding: 1px 6px; border-radius: 6px; }
.scan-status.st-running { background: #f39c1222; color: #f39c12; }
.scan-status.st-success { background: #27ae6022; color: #27ae60; }
.scan-status.st-failed { background: #e74c3c22; color: #e74c3c; }
.scan-src { color: #6B7280; font-size: 11px; flex: 1; min-width: 80px; }
.scan-meta { color: #9CA3AF; font-size: 11px; white-space: nowrap; }
.scan-err { color: #e74c3c; font-size: 11px; width: 100%; }

/* 机会池 */
.scan-opp-list { display: grid; grid-template-columns: repeat(auto-fill, minmax(320px, 1fr)); gap: 10px; }
.scan-opp-card { border: 1px solid var(--border, #E5E7EB); border-radius: 10px; padding: 10px 12px; background: #fff; display: flex; flex-direction: column; gap: 6px; }
.scan-opp-card:hover { border-color: #C4B5FD; box-shadow: 0 2px 8px rgba(0,0,0,.05); }
.scan-opp-head { display: flex; align-items: center; gap: 8px; flex-wrap: wrap; }
.opp-cat-badge { font-size: 10px; font-weight: 600; padding: 2px 8px; border-radius: 6px; }
.opp-fit { font-size: 12px; color: #6B7280; }
.opp-fit b { font-size: 15px; color: #1F2937; }
.opp-conf { font-size: 11px; color: #9CA3AF; }
.scan-opp-st { font-size: 10px; font-weight: 600; padding: 2px 6px; border-radius: 6px; }
.scan-opp-st.st-converted { background: #27ae6022; color: #27ae60; }
.scan-opp-st.st-dismissed { background: #95a5a622; color: #95a5a6; }
.opp-title { font-size: 13px; font-weight: 600; color: #1F2937; }
.opp-evidence { font-size: 12px; color: #4B5563; line-height: 1.5; }
.opp-action { font-size: 12px; color: #7c3aed; line-height: 1.5; }
.opp-src { font-size: 11px; color: #9CA3AF; }
.opp-src a { color: var(--primary, #2563EB); }
.opp-btns { display: flex; gap: 8px; align-items: center; margin-top: 4px; }

/* ═══ CRM v11 — 商机详情平铺看板 ═══ */
.opp-detail-flat { display: flex; flex-direction: column; gap: 14px; }
.opp-detail-flat .detail-header { flex-direction: column; align-items: flex-start; gap: 8px; margin-bottom: 0; }
.opp-detail-flat .detail-header-main {
  display: flex; align-items: center; justify-content: space-between;
  width: 100%; gap: 16px;
}
.opp-detail-flat .detail-header-main h3 { margin: 0; font-size: 20px; }
.opp-detail-flat .detail-header-actions { margin-left: 0; }

.opp-stage-panel {
  background: #fff; border: 1px solid var(--border, #E5E7EB); border-radius: 12px; padding: 14px 16px;
}
.opp-stage-panel .stage-progress { margin: 0 0 12px; }
.opp-stage-panel .stage-actions { display: flex; gap: 8px; align-items: center; flex-wrap: wrap; }

.opp-section {
  background: #fff; border: 1px solid var(--border, #E5E7EB); border-radius: 12px; padding: 16px;
}
.opp-section-title {
  display: flex; align-items: center; justify-content: space-between;
  font-size: 15px; font-weight: 700; color: #1F2937; margin-bottom: 12px;
}
.opp-section-title .btn-link { font-weight: 500; }

.opp-form-grid {
  display: grid;
  grid-template-columns: repeat(4, 1fr);
  gap: 16px 20px;
}
.opp-form-field {
  display: flex; flex-direction: column; gap: 6px;
  min-width: 0;
}
.opp-form-field label {
  font-size: 13px; color: #6B7280; font-weight: 500;
}
.opp-form-field .required { color: #e74c3c; }
.opp-form-field .input-field {
  font-size: 14px; padding: 9px 11px; border-radius: 8px;
  border: 1px solid #D1D5DB; background: #FAFBFC; min-height: 38px;
}
.opp-form-field .input-field:focus {
  outline: none; border-color: var(--primary, #2563EB); background: #fff;
  box-shadow: 0 0 0 3px rgba(37,99,235,0.08);
}
.opp-form-field select.input-field { height: 38px; }

.opp-detail-flat .detail-meta {
  margin-top: 14px; font-size: 13px; color: #6B7280;
  padding-top: 12px; border-top: 1px dashed #E5E7EB;
}

.opp-team-flat { display: flex; flex-direction: column; gap: 8px; }
.opp-team-flat .team-member-card {
  display: grid;
  grid-template-columns: 140px 120px 110px 100px 1fr auto;
  align-items: center; gap: 12px;
  padding: 10px 12px; border-radius: 8px; border: 1px solid #E5E7EB;
}
.opp-team-flat .team-member-card .mini-card-title { font-weight: 600; color: #1F2937; }
.opp-team-flat .team-member-card .team-actions { display: flex; gap: 6px; }

/* 放弃跟进按钮 */
.btn-abandon { color: #e74c3c !important; border: 1px solid #e74c3c; border-radius: 8px; padding: 5px 12px; }
.btn-abandon:hover { background: #e74c3c22; }

@media (max-width: 1200px) {
  .opp-form-grid { grid-template-columns: repeat(3, 1fr); }
  .opp-team-flat .team-member-card { grid-template-columns: 130px 110px 100px 90px 1fr auto; }
}
@media (max-width: 900px) {
  .opp-form-grid { grid-template-columns: repeat(2, 1fr); }
  .opp-team-flat .team-member-card { grid-template-columns: 1fr; gap: 6px; }
}
@media (max-width: 640px) {
  .opp-form-grid { grid-template-columns: 1fr; }
  .opp-detail-flat .detail-header-main { flex-direction: column; align-items: flex-start; }
}

/* 移动端适配 */
@media (max-width: 768px) {
  .crm-cards { grid-template-columns: 1fr; }
  .crm-dash-row { grid-template-columns: 1fr; }
  .stage-step { min-width: 64px; }
  .mini-card-title { max-width: 45%; }
  .rel3-grid { grid-template-columns: 1fr; }
  .scan-opp-list { grid-template-columns: 1fr; }
}

/* ─── CRM 模块切换（移动端/无侧边栏场景）─── */
.crm-mobile-switch { display: flex; gap: 8px; margin-bottom: 12px; }
.crm-switch {
  flex: 1; text-align: center; padding: 8px 12px; font-size: 13px;
  color: var(--text-secondary); background: #fff; border-radius: 8px;
  cursor: pointer; box-shadow: var(--shadow);
}
.crm-switch.active { background: var(--primary); color: #fff; font-weight: 500; }

/* 销售漏斗方法论横幅 */
.crm-methodology-banner {
  background: linear-gradient(90deg, #E6F4FF, #F0F7FF);
  border: 1px solid #BDD7F7; border-radius: 8px;
  padding: 10px 12px; font-size: 12px; color: #374151;
  margin-bottom: 12px; line-height: 1.5;
}

/* CRM 看板占满右侧，不使用 mod-list 网格 */
.crm-page-list.mod-list { display: block; }
.crm-dashboard { width: 100%; }

/* 桌面端隐藏移动端 CRM 切换条 */
@media (min-width: 768px) {
  .crm-mobile-switch { display: none; }
}

/* ═══════════════════════════════════════
   登录覆盖层（企微 OAuth / 本地测试）
   ═══════════════════════════════════════ */
.login-overlay {
  position: fixed;
  inset: 0;
  z-index: 9999;
  background: linear-gradient(160deg, #1E2A3A 0%, #2D4055 55%, #3A7BC8 130%);
  display: flex;
  align-items: center;
  justify-content: center;
  padding: 20px;
}
.login-card {
  width: 100%;
  max-width: 360px;
  background: #fff;
  border-radius: 16px;
  padding: 32px 28px 24px;
  text-align: center;
  box-shadow: 0 16px 48px rgba(0,0,0,0.28);
}
.login-logo {
  width: 64px;
  height: 64px;
  margin: 0 auto 14px;
  border-radius: 16px;
  background: linear-gradient(135deg, #4A90D9, #3A7BC8);
  color: #fff;
  font-size: 26px;
  font-weight: 800;
  display: flex;
  align-items: center;
  justify-content: center;
  letter-spacing: 1px;
}
.login-title { font-size: 20px; font-weight: 700; color: #1F2937; }
.login-sub { font-size: 12px; color: #9CA3AF; margin: 6px 0 24px; }
.login-btn-wecom {
  width: 100%;
  display: flex;
  align-items: center;
  justify-content: center;
  gap: 8px;
  padding: 12px 0;
  border: none;
  border-radius: 10px;
  background: #0E9A4C;
  color: #fff;
  font-size: 15px;
  font-weight: 600;
  cursor: pointer;
  transition: opacity .2s;
}
.login-btn-wecom:hover { opacity: 0.9; }
.login-btn-wecom.disabled { opacity: 0.45; cursor: not-allowed; }
.wecom-icon {
  width: 22px; height: 22px;
  border-radius: 6px;
  background: #fff;
  color: #0E9A4C;
  font-size: 13px;
  font-weight: 800;
  display: flex;
  align-items: center;
  justify-content: center;
}
.login-divider { display: flex; align-items: center; gap: 10px; margin: 18px 0; color: #C0C8D0; font-size: 12px; }
.login-divider::before, .login-divider::after { content: ''; flex: 1; height: 1px; background: #EEF0F3; }
.login-btn-local {
  width: 100%;
  padding: 10px 0;
  border: 1px solid #D5DBE1;
  border-radius: 10px;
  background: #fff;
  color: #4B5563;
  font-size: 14px;
  cursor: pointer;
  transition: all .2s;
}
.login-btn-local:hover { border-color: #4A90D9; color: #4A90D9; }
.login-local-body { margin-top: 10px; }
.login-select-row { display: flex; gap: 8px; align-items: center; }
.login-select {
  flex: 1;
  padding: 8px 10px;
  border: 1px solid #D5DBE1;
  border-radius: 8px;
  font-size: 13px;
  color: #1F2937;
  background: #fff;
  outline: none;
}
.login-hint { font-size: 11px; color: #9CA3AF; margin-top: 16px; line-height: 1.5; }
.login-ver { font-size: 11px; color: #C0C8D0; margin-top: 8px; }

/* 退出按钮 */
.logout-btn {
  font-size: 12px;
  padding: 4px 10px;
  border: 1px solid rgba(255,255,255,0.4);
  border-radius: 6px;
  background: rgba(255,255,255,0.12);
  color: #fff;
  cursor: pointer;
  white-space: nowrap;
}
.logout-btn:hover { background: rgba(255,255,255,0.22); }

/* ═══════════════════════════════════════
   今日工作提醒弹窗（独立详情页样式：遮罩层 + 居中卡片 + 底部操作栏）
   ═══════════════════════════════════════ */

/* 遮罩层 */
.twin-remind-overlay {
  position: fixed;
  inset: 0;
  z-index: 9499;
  background: rgba(15, 23, 42, 0.45);
  backdrop-filter: blur(2px);
  animation: remindFade .2s ease-out;
}
@keyframes remindFade { from { opacity: 0; } to { opacity: 1; } }

/* 弹窗本体：等比例缩放，参考 1440 宽屏设计 */
.twin-remind-pop {
  position: fixed;
  top: 50%;
  left: 50%;
  transform: translate(-50%, -50%);
  z-index: 9500;
  /* 以 1440 宽屏为基准，主体宽度约屏幕 1/3（480px），最小 360、最大 560 */
  width: min(33vw, 480px);
  min-width: 360px;
  max-width: min(560px, calc(100vw - 32px));
  /* 高度按屏幕比例 */
  max-height: min(72vh, 640px);
  background: #fff;
  border-radius: 14px;
  box-shadow:
    0 24px 64px rgba(0, 0, 0, 0.25),
    0 2px 8px rgba(0, 0, 0, 0.08);
  display: flex;
  flex-direction: column;
  overflow: hidden;
  animation: remindIn .25s cubic-bezier(0.16, 1, 0.3, 1);
}
@keyframes remindIn {
  from { opacity: 0; transform: translate(-50%, -48%) scale(0.96); }
  to   { opacity: 1; transform: translate(-50%, -50%) scale(1); }
}

/* 头部：标题 + 副标题 + 关闭按钮 */
.remind-header {
  display: flex;
  align-items: flex-start;
  justify-content: space-between;
  gap: 12px;
  padding: 16px 18px 14px;
  background: linear-gradient(135deg, #4A90D9 0%, #3A7BC8 100%);
  color: #fff;
  flex-shrink: 0;
}
.remind-header-main { flex: 1; min-width: 0; }
.remind-title { font-size: 16px; font-weight: 700; line-height: 1.3; }
.remind-subtitle {
  font-size: 12px;
  color: rgba(255, 255, 255, 0.85);
  margin-top: 4px;
  line-height: 1.4;
}
.remind-close {
  flex-shrink: 0;
  width: 28px;
  height: 28px;
  border: none;
  border-radius: 50%;
  background: rgba(255, 255, 255, 0.2);
  color: #fff;
  font-size: 18px;
  line-height: 1;
  cursor: pointer;
  display: flex;
  align-items: center;
  justify-content: center;
  transition: background .15s;
}
.remind-close:hover { background: rgba(255, 255, 255, 0.35); }

/* 内容区：可滚动 */
.remind-body {
  flex: 1;
  min-height: 0;
  padding: 14px 16px;
  overflow-y: auto;
  -webkit-overflow-scrolling: touch;
}

/* 分组与卡片 */
.remind-group { margin-bottom: 14px; }
.remind-group:last-child { margin-bottom: 0; }
.remind-group-title {
  font-size: 12px;
  font-weight: 700;
  color: #374151;
  margin-bottom: 6px;
  display: flex;
  align-items: center;
  gap: 6px;
}
.remind-group-title .dot {
  display: inline-block;
  width: 6px; height: 6px; border-radius: 50%;
}
.remind-item {
  border: 1px solid #EEF0F3;
  border-radius: 8px;
  padding: 9px 11px;
  margin-bottom: 6px;
  cursor: pointer;
  background: #FAFBFC;
  transition: all .15s;
}
.remind-item:hover {
  border-color: #4A90D9;
  background: #fff;
  transform: translateX(2px);
}
.remind-item:last-child { margin-bottom: 0; }
.ri-title { font-size: 13px; font-weight: 600; color: #1F2937; line-height: 1.4; }
.ri-meta { font-size: 11.5px; color: #9CA3AF; margin-top: 3px; }

/* 空状态 */
.remind-empty {
  text-align: center;
  padding: 32px 16px;
  color: #9CA3AF;
  font-size: 13px;
}
.remind-empty-icon { font-size: 32px; margin-bottom: 8px; }

/* 底部操作栏 */
.remind-footer {
  flex-shrink: 0;
  display: flex;
  align-items: center;
  justify-content: space-between;
  gap: 12px;
  padding: 12px 16px;
  border-top: 1px solid #EEF0F3;
  background: #FAFBFC;
}
.remind-mute {
  display: flex;
  align-items: center;
  gap: 6px;
  font-size: 12px;
  color: #6B7280;
  cursor: pointer;
  user-select: none;
}
.remind-mute input { cursor: pointer; }
.remind-footer-actions { display: flex; gap: 8px; }
.remind-btn {
  border: none;
  border-radius: 6px;
  padding: 7px 14px;
  font-size: 12.5px;
  font-weight: 600;
  cursor: pointer;
  transition: all .15s;
}
.remind-btn-secondary {
  background: #fff;
  color: #4B5563;
  border: 1px solid #D5DBE1;
}
.remind-btn-secondary:hover { background: #F3F5F7; }
.remind-btn-primary {
  background: #4A90D9;
  color: #fff;
}
.remind-btn-primary:hover { background: #3A7BC8; }

/* 响应式：移动端占满屏幕 */
@media (max-width: 600px) {
  .twin-remind-pop {
    width: calc(100vw - 24px);
    min-width: 0;
    max-height: calc(100vh - 48px);
    border-radius: 12px;
  }
  .remind-header { padding: 14px 14px 12px; }
  .remind-body { padding: 12px 14px; }
  .remind-footer {
    flex-direction: column;
    align-items: stretch;
    gap: 10px;
    padding: 12px 14px;
  }
  .remind-mute { justify-content: center; }
  .remind-footer-actions { justify-content: stretch; }
  .remind-footer-actions .remind-btn { flex: 1; }
}

/* ═══════════════════════════════════════
   账号申请弹窗
   ═══════════════════════════════════════ */
.auth-modal {
  position: fixed;
  inset: 0;
  z-index: 9600;
  background: rgba(0,0,0,0.45);
  display: flex;
  align-items: center;
  justify-content: center;
  padding: 20px;
}
.auth-modal-card {
  width: 100%;
  max-width: 400px;
  max-height: 88vh;
  overflow-y: auto;
  background: #fff;
  border-radius: 14px;
  padding: 22px;
  box-shadow: 0 12px 40px rgba(0,0,0,0.25);
}
.auth-modal-title { font-size: 17px; font-weight: 700; color: #1F2937; }
.auth-modal-sub { font-size: 12px; color: #9CA3AF; margin: 6px 0 16px; line-height: 1.5; }
.auth-form { display: flex; flex-direction: column; gap: 10px; }
.auth-field { display: flex; flex-direction: column; gap: 4px; }
.auth-field label { font-size: 12px; color: #6B7280; font-weight: 600; }
.auth-field input, .auth-field textarea {
  padding: 9px 10px;
  border: 1px solid #D5DBE1;
  border-radius: 8px;
  font-size: 13px;
  color: #1F2937;
  outline: none;
  background: #fff;
  font-family: inherit;
  resize: vertical;
}
.auth-field input:focus, .auth-field textarea:focus { border-color: #4A90D9; }
.auth-field input[readonly] { background: #F3F5F7; color: #6B7280; }
.auth-modal-actions { display: flex; gap: 10px; margin-top: 18px; }

/* ═══════════════════════════════════════
   账号申请审批区块（审批中心页）
   ═══════════════════════════════════════ */
.auth-request-section { margin-bottom: 16px; }
.auth-req-title {
  font-size: 13px;
  font-weight: 700;
  color: #374151;
  padding: 6px 2px 4px;
  display: flex;
  align-items: center;
  gap: 6px;
}
.auth-req-title::before { content: ''; width: 4px; height: 14px; border-radius: 2px; background: #4A90D9; }
.ap-time { font-size: 11px; color: #9CA3AF; margin-top: 4px; }

/* 移动端：提醒弹窗铺满底部 */
@media (max-width: 768px) {
  .twin-remind-pop {
    top: auto;
    bottom: 68px;
    right: 12px;
    left: 12px;
    width: auto;
    max-width: none;
  }
}

/* ═══════════════════════════════════════
   v5 关键客户计划 + 集团组织 + AI 情报智能体
   ═══════════════════════════════════════ */
.kam-tabs {
  display: flex;
  gap: 8px;
  margin: 0 0 16px;
  padding-bottom: 8px;
  border-bottom: 1px solid #E5E7EB;
  flex-wrap: wrap;
}
.kam-tab {
  padding: 7px 14px;
  border: 1px solid #D5DBE1;
  border-radius: 20px;
  background: #fff;
  color: #4B5563;
  font-size: 13px;
  cursor: pointer;
  transition: all .15s;
}
.kam-tab:hover { border-color: #4A90D9; color: #4A90D9; }
.kam-tab.active { background: #4A90D9; color: #fff; border-color: #4A90D9; }

.kam-plan-section { padding: 0 4px; }
.kam-section-head {
  display: flex;
  align-items: center;
  justify-content: space-between;
  margin-bottom: 14px;
}
.kam-section-head h4 { margin: 0; font-size: 16px; }
.kam-plan-grid {
  display: grid;
  grid-template-columns: repeat(2, 1fr);
  gap: 16px;
  margin-bottom: 20px;
}
.kam-plan-field { display: flex; flex-direction: column; gap: 5px; }
.kam-plan-field label { font-size: 13px; font-weight: 600; color: #374151; }
.kam-hint {
  font-size: 12px;
  color: #6B7280;
  line-height: 1.45;
  background: #F3F4F6;
  padding: 6px 10px;
  border-radius: 6px;
}
.kam-textarea { min-height: 100px; font-family: inherit; }

.kam-ms-block { background: #F9FAFB; border-radius: 10px; padding: 14px; }
.kam-ms-row {
  display: flex;
  gap: 8px;
  align-items: center;
  margin-bottom: 8px;
}
.kam-ms-row input { flex: 1; }

/* 集团组织架构 */
.org-tree { padding: 4px; }
.org-level { margin-top: 10px; }
.org-card {
  background: #fff;
  border: 1px solid #E5E7EB;
  border-radius: 10px;
  padding: 12px 14px;
  margin-bottom: 10px;
  box-shadow: 0 1px 2px rgba(0,0,0,0.04);
}
.org-head {
  display: flex;
  align-items: center;
  gap: 10px;
  margin-bottom: 8px;
  flex-wrap: wrap;
}
.org-type {
  background: #EEF2FF;
  color: #4F46E5;
  font-size: 11px;
  font-weight: 600;
  padding: 3px 8px;
  border-radius: 12px;
}
.org-name { font-weight: 700; color: #1F2937; }
.org-loc { font-size: 12px; color: #6B7280; }
.org-body { margin-bottom: 8px; }
.org-row {
  display: flex;
  justify-content: space-between;
  font-size: 12px;
  padding: 3px 0;
  border-bottom: 1px dashed #F3F4F6;
}
.org-row span:first-child { color: #6B7280; }
.org-row span:last-child { color: #374151; }
.org-actions { display: flex; gap: 10px; }

/* AI 情报智能体 */
.intel-badge {
  background: #EDE9FE;
  color: #7C3AED;
  font-size: 11px;
  font-weight: 600;
  padding: 3px 8px;
  border-radius: 12px;
  margin-left: 8px;
}
.intel-intro {
  font-size: 12px;
  color: #4B5563;
  background: #F5F3FF;
  border-left: 3px solid #8B5CF6;
  padding: 10px 12px;
  border-radius: 6px;
  margin-bottom: 12px;
}

@media (max-width: 768px) {
  .kam-plan-grid { grid-template-columns: 1fr; }
  .kam-tabs { overflow-x: auto; flex-wrap: nowrap; }
}

/* ═══════════════════════════════════════
   v12 驾驶舱风格（2026-08-17 硕哥确认 mockup）
   顶部关键字段卡 + 阶段进度条 + Tab 导航 + 平铺可操作
   仅界面呈现，不改任何业务逻辑
   ═══════════════════════════════════════ */

/* ─── 方法论横幅：弱化为一行细条 ─── */
.crm-methodology-banner {
  background: #F3F7FC;
  border: 1px solid #DCE8F5;
  color: #5A7FA6;
  font-size: 12px;
  padding: 5px 14px;
  border-radius: 6px;
}

/* ─── 顶部关键字段卡行 ─── */
.ck-kpi-strip {
  display: grid;
  grid-template-columns: repeat(auto-fit, minmax(140px, 1fr));
  gap: 10px;
  margin-bottom: 14px;
}
.ck-kpi-card {
  background: #fff;
  border-radius: 8px;
  padding: 10px 14px;
  border: 1px solid #E8ECF1;
  box-shadow: 0 1px 3px rgba(30,42,58,.06);
  display: flex;
  flex-direction: column;
  gap: 2px;
  min-width: 0;
}
.ck-kpi-card .k { font-size: 12px; color: #8A94A3; white-space: nowrap; }
.ck-kpi-card .v { font-size: 17px; font-weight: 700; color: #2C3E50; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
.ck-kpi-card .v small { font-size: 12px; font-weight: 400; color: #8A94A3; }
.ck-kpi-card .s { font-size: 11px; color: #B0B8C4; }
.ck-kpi-card.hl { border-top: 3px solid #4A90D9; }
.ck-kpi-card .ck-mini-bar { height: 4px; border-radius: 2px; background: #EDF0F4; margin-top: 4px; position: relative; overflow: hidden; }
.ck-kpi-card .ck-mini-bar i { position: absolute; left: 0; top: 0; bottom: 0; border-radius: 2px; background: #8e44ad; }

/* ─── 阶段进度条（驾驶舱） ─── */
.ck-stage-bar {
  background: #fff;
  border: 1px solid #E8ECF1;
  border-radius: 8px;
  padding: 14px 18px 10px;
  margin-bottom: 14px;
  box-shadow: 0 1px 3px rgba(30,42,58,.06);
}
.ck-stage-bar .sb-title {
  font-size: 12px;
  color: #8A94A3;
  margin-bottom: 10px;
  display: flex;
  justify-content: space-between;
  gap: 8px;
  flex-wrap: wrap;
}
.ck-stage-track { display: flex; }
.ck-node { flex: 1; text-align: center; min-width: 0; }
.ck-node .seg { height: 8px; border-radius: 4px; background: #E4E9F0; }
.ck-node.done .seg { background: #4A90D9; }
.ck-node.cur .seg {
  background: linear-gradient(90deg, #4A90D9, #7AB3E8);
  box-shadow: 0 0 0 3px rgba(74,144,217,.18);
}
.ck-node .nm { margin-top: 8px; font-size: 12px; color: #8A94A3; }
.ck-node.done .nm { color: #4A90D9; }
.ck-node.cur .nm { color: #2C6FB5; font-weight: 700; }
.ck-node .sub { font-size: 11px; color: #B0B8C4; margin-top: 1px; }
.ck-node.cur .sub { color: #E67E22; font-weight: 600; }

/* ─── Tab 导航（驾驶舱） ─── */
.ck-tabs {
  display: flex;
  gap: 2px;
  border-bottom: 2px solid #E4E9F0;
  flex-wrap: wrap;
  overflow-x: auto;
}
.ck-tab {
  padding: 9px 18px;
  font-size: 13px;
  color: #7A8694;
  cursor: pointer;
  border-radius: 8px 8px 0 0;
  border: none;
  background: transparent;
  border-bottom: 2px solid transparent;
  margin-bottom: -2px;
  white-space: nowrap;
  font-family: inherit;
}
.ck-tab:hover { color: #4A90D9; background: #F7FAFD; }
.ck-tab.on { color: #2C6FB5; font-weight: 700; border-bottom-color: #4A90D9; background: #fff; }
.ck-panel {
  background: #fff;
  border: 1px solid #E8ECF1;
  border-top: none;
  border-radius: 0 0 8px 8px;
  padding: 16px;
  box-shadow: 0 1px 3px rgba(30,42,58,.06);
}

/* ─── 平铺可操作行卡片 ─── */
.ck-row {
  display: flex;
  align-items: center;
  gap: 10px;
  padding: 9px 12px;
  border: 1px solid #EDF0F4;
  border-radius: 6px;
  margin-bottom: 8px;
  background: #FAFBFD;
}
.ck-row .ri-main { flex: 1; min-width: 0; }
.ck-row .ri-t { font-weight: 600; font-size: 13px; color: #2C3E50; }
.ck-row .ri-s { font-size: 12px; color: #8A94A3; margin-top: 1px; }
.ck-row:hover { border-color: #B9D3EE; }
.ck-row-head { font-size: 13px; font-weight: 700; color: #2C3E50; margin: 14px 0 8px; }
.ck-row-head:first-child { margin-top: 0; }

/* ─── 客户卡：关系成熟度六格点条 ─── */
.rel-dots { display: inline-flex; gap: 3px; vertical-align: middle; margin-left: 6px; }
.rel-dots i { width: 8px; height: 8px; border-radius: 2px; background: #E4E9F0; }

/* ─── 详情页头 badges ─── */
.ck-head-badges { display: inline-flex; gap: 6px; align-items: center; flex-wrap: wrap; }
.ck-badge { font-size: 12px; padding: 2px 10px; border-radius: 10px; font-weight: 600; white-space: nowrap; }
.ck-badge.blue { background: #E8F1FB; color: #1F77B4; }
.ck-badge.green { background: #E9F7E9; color: #27AE60; }
.ck-badge.red { background: #FDECEC; color: #C0392B; }
.ck-badge.gray { background: #EDF0F4; color: #8A94A3; }
.ck-badge.orange { background: #FDF3E3; color: #E67E22; }

/* ─── 客户详情：kam-tabs 覆写为驾驶舱 Tab 样式 ─── */
.kam-tabs {
  display: flex;
  gap: 2px;
  border-bottom: 2px solid #E4E9F0;
  background: transparent;
  flex-wrap: wrap;
  overflow-x: auto;
}
.kam-tab {
  padding: 9px 18px;
  font-size: 13px;
  color: #7A8694;
  cursor: pointer;
  border-radius: 8px 8px 0 0;
  border: none;
  background: transparent;
  border-bottom: 2px solid transparent;
  margin-bottom: -2px;
  white-space: nowrap;
  font-family: inherit;
}
.kam-tab:hover { color: #4A90D9; background: #F7FAFD; }
.kam-tab.active {
  color: #2C6FB5;
  font-weight: 700;
  border-bottom-color: #4A90D9;
  background: #fff;
}
#kamTabContent {
  background: #fff;
  border: 1px solid #E8ECF1;
  border-top: none;
  border-radius: 0 0 8px 8px;
  padding: 16px;
  box-shadow: 0 1px 3px rgba(30,42,58,.06);
}

/* ─── 漏斗看板细节统一 ─── */
.crm-funnel-board .funnel-col {
  background: #F4F6F9;
  border-radius: 8px;
}
.opp-card { box-shadow: 0 1px 2px rgba(30,42,58,.05); }
.opp-card:hover { border-color: #4A90D9; }
.crm-list-head h4 { letter-spacing: .5px; }

/* ─── 商机详情：基础信息编辑区（默认折叠） ─── */
.opp-basic-wrap { margin-bottom: 14px; }

@media (max-width: 768px) {
  .ck-kpi-strip { grid-template-columns: repeat(2, 1fr); }
  .ck-node .nm { font-size: 11px; }
  .ck-stage-track { flex-wrap: wrap; gap: 8px 0; }
  .ck-node { flex: 1 1 32%; }
  .ck-tabs, .kam-tabs { flex-wrap: nowrap; }
  .ck-panel, #kamTabContent { padding: 12px; }
}

/* ═══════════════════════════════════════
   v12 统一驾驶舱布局（2026-08-17 三模块统一）
   工作台 / 客户管理 / 销售漏斗 共用
   ═══════════════════════════════════════ */

/* ─── 驾驶舱头部（替代原 top-bar） ─── */
.ck-header {
  display: flex;
  justify-content: space-between;
  align-items: center;
  padding: 14px 20px 10px;
  gap: 12px;
  flex-wrap: wrap;
}
.ck-header-left { display: flex; flex-direction: column; gap: 2px; }
.ck-header-title { font-size: 20px; font-weight: 700; color: #2C3E50; }
.ck-header-sub { font-size: 12px; color: #8A94A3; }
.ck-header-right { display: flex; align-items: center; gap: 8px; flex-wrap: wrap; }
.ck-user-pill {
  display: inline-flex; align-items: center; gap: 6px;
  background: #F0F4F8; border-radius: 16px; padding: 4px 12px;
  font-size: 12px; color: #5A7FA6; font-weight: 600;
}
.ck-user-pill .avatar { width: 20px; height: 20px; border-radius: 50%; background: #4A90D9; color: #fff; display: flex; align-items: center; justify-content: center; font-size: 11px; }

/* ─── 统一 KPI 卡行（三模块共用） ─── */
.ck-kpi-strip {
  display: grid;
  grid-template-columns: repeat(auto-fit, minmax(150px, 1fr));
  gap: 10px;
  padding: 0 20px 14px;
}
.ck-kpi-card {
  background: #fff;
  border-radius: 8px;
  padding: 12px 14px;
  border: 1px solid #E8ECF1;
  box-shadow: 0 1px 3px rgba(30,42,58,.06);
  display: flex;
  flex-direction: column;
  gap: 3px;
  min-width: 0;
  transition: box-shadow .15s;
}
.ck-kpi-card:hover { box-shadow: 0 2px 8px rgba(30,42,58,.1); }
.ck-kpi-card .k { font-size: 12px; color: #8A94A3; white-space: nowrap; }
.ck-kpi-card .v { font-size: 18px; font-weight: 700; color: #2C3E50; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
.ck-kpi-card .v small { font-size: 12px; font-weight: 400; color: #8A94A3; }
.ck-kpi-card .s { font-size: 11px; color: #B0B8C4; }
.ck-kpi-card.hl { border-top: 3px solid #4A90D9; }
.ck-kpi-card.hl-green { border-top: 3px solid #27AE60; }
.ck-kpi-card.hl-orange { border-top: 3px solid #E67E22; }
.ck-kpi-card.hl-purple { border-top: 3px solid #8e44ad; }
.ck-kpi-card .ck-mini-bar { height: 4px; border-radius: 2px; background: #EDF0F4; margin-top: 4px; position: relative; overflow: hidden; }
.ck-kpi-card .ck-mini-bar i { position: absolute; left: 0; top: 0; bottom: 0; border-radius: 2px; background: #8e44ad; }

/* ─── 驾驶舱信息网格（2~3列） ─── */
.ck-grid {
  display: grid;
  grid-template-columns: repeat(auto-fit, minmax(340px, 1fr));
  gap: 12px;
  padding: 0 20px 14px;
}
.ck-grid .span-2 { grid-column: span 2; }
.ck-grid .span-3 { grid-column: span 3; }
.ck-panel-box {
  background: #fff;
  border: 1px solid #E8ECF1;
  border-radius: 8px;
  padding: 14px 16px;
  box-shadow: 0 1px 3px rgba(30,42,58,.06);
}
.ck-panel-title {
  font-size: 13px; font-weight: 700; color: #2C3E50;
  margin-bottom: 10px; display: flex; justify-content: space-between; align-items: center;
}
.ck-panel-title .more { font-size: 12px; color: #4A90D9; cursor: pointer; font-weight: 400; }

/* ─── 驾驶舱行列表（高优先级商机 / 今日待办 等） ─── */
.ck-list-item {
  display: flex; align-items: center; gap: 10px;
  padding: 8px 10px; border-radius: 6px; margin-bottom: 4px;
  cursor: pointer; transition: background .12s;
}
.ck-list-item:hover { background: #F7FAFD; }
.ck-list-item .li-pri { width: 3px; height: 28px; border-radius: 2px; flex-shrink: 0; }
.ck-list-item .li-main { flex: 1; min-width: 0; }
.ck-list-item .li-t { font-size: 13px; font-weight: 600; color: #2C3E50; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
.ck-list-item .li-s { font-size: 12px; color: #8A94A3; margin-top: 1px; }
.ck-list-item .li-val { font-size: 13px; font-weight: 700; color: #2C3E50; white-space: nowrap; }
.ck-list-item .li-tag { font-size: 11px; padding: 1px 7px; border-radius: 8px; white-space: nowrap; }

/* ─── 迷你图表容器 ─── */
.ck-chart-box { height: 120px; }
.ck-chart-box.sm { height: 80px; }

/* ─── 漏斗阶段指标条 ─── */
.ck-funnel-stats {
  display: flex; gap: 0; padding: 0 20px 14px;
}
.ck-funnel-stat {
  flex: 1; text-align: center; padding: 8px 4px;
  border-right: 1px solid #EDF0F4;
}
.ck-funnel-stat:last-child { border-right: none; }
.ck-funnel-stat .fs-num { font-size: 20px; font-weight: 700; color: #2C3E50; }
.ck-funnel-stat .fs-label { font-size: 11px; color: #8A94A3; margin-top: 2px; }
.ck-funnel-stat .fs-sub { font-size: 11px; color: #B0B8C4; }

/* ─── 客户分布迷你面板 ─── */
.ck-dist-row { display: flex; align-items: center; gap: 12px; margin-bottom: 6px; }
.ck-dist-label { font-size: 12px; color: #5A6878; width: 80px; flex-shrink: 0; }
.ck-dist-bar { flex: 1; height: 18px; border-radius: 4px; background: #EDF0F4; overflow: hidden; display: flex; }
.ck-dist-bar i { height: 100%; display: block; }
.ck-dist-val { font-size: 12px; font-weight: 600; color: #2C3E50; width: 40px; text-align: right; flex-shrink: 0; }

/* ─── 快捷入口 ─── */
.ck-quick-grid { display: grid; grid-template-columns: repeat(4, 1fr); gap: 8px; }
.ck-quick-btn {
  display: flex; flex-direction: column; align-items: center; gap: 4px;
  padding: 10px 6px; border-radius: 8px; border: 1px solid #E8ECF1;
  cursor: pointer; transition: all .12s; background: #FAFBFD;
}
.ck-quick-btn:hover { border-color: #4A90D9; background: #F0F6FC; }
.ck-quick-btn .qb-icon { font-size: 20px; }
.ck-quick-btn .qb-label { font-size: 12px; color: #5A6878; }

/* ─── 团队状态行 ─── */
.ck-team-row { display: flex; align-items: center; gap: 8px; padding: 6px 0; border-bottom: 1px solid #F0F2F5; }
.ck-team-row:last-child { border-bottom: none; }
.ck-team-row .avatar { width: 28px; height: 28px; border-radius: 50%; display: flex; align-items: center; justify-content: center; font-size: 12px; color: #fff; flex-shrink: 0; }
.ck-team-row .tr-name { font-size: 13px; font-weight: 600; color: #2C3E50; }
.ck-team-row .tr-stat { font-size: 12px; color: #8A94A3; }
.ck-team-row .tr-status { font-size: 11px; padding: 1px 7px; border-radius: 8px; margin-left: auto; }

/* ─── 漏斗看板 KPI 行间距修正 ─── */
.crm-dashboard > .ck-kpi-strip { padding: 0 0 14px; }

@media (max-width: 768px) {
  .ck-kpi-strip { grid-template-columns: repeat(2, 1fr); padding: 0 12px 10px; }
  .ck-grid { grid-template-columns: 1fr; padding: 0 12px 10px; }
  .ck-grid .span-2, .ck-grid .span-3 { grid-column: span 1; }
  .ck-header { padding: 10px 12px 8px; }
  .ck-funnel-stats { padding: 0 12px 10px; flex-wrap: wrap; }
  .ck-funnel-stat { flex: 1 1 30%; }
  .ck-quick-grid { grid-template-columns: repeat(3, 1fr); }
  .crm-dashboard > .ck-kpi-strip { padding: 0 0 10px; }
}

/* ═══════════════ 智能体侧边栏（漏斗教练 / 交付管家） ═══════════════ */
.ck-agent-layout { display: grid; grid-template-columns: 1fr 320px; gap: 14px; align-items: start; }
.ck-agent-main { min-width: 0; }
.ck-agent-side { position: sticky; top: 12px; display: flex; flex-direction: column; gap: 12px; }

.ck-agent-card { background: #fff; border: 1px solid #E8ECF1; border-radius: 10px; box-shadow: 0 1px 3px rgba(44,62,80,.06); overflow: hidden; }
.ck-agent-head { display: flex; align-items: center; gap: 10px; padding: 12px 14px; border-bottom: 1px solid #F0F2F5; }
.ck-agent-avatar { width: 38px; height: 38px; border-radius: 10px; display: flex; align-items: center; justify-content: center; font-size: 20px; color: #fff; flex-shrink: 0; }
.ck-agent-id { min-width: 0; }
.ck-agent-name { font-size: 14px; font-weight: 700; color: #2C3E50; }
.ck-agent-desc { font-size: 11px; color: #8A94A3; white-space: nowrap; overflow: hidden; text-overflow: ellipsis; }

.ck-agent-chat { height: 300px; overflow-y: auto; padding: 12px; display: flex; flex-direction: column; gap: 8px; background: #FAFBFD; }
.ck-agent-msg { max-width: 88%; padding: 8px 10px; border-radius: 10px; font-size: 12px; line-height: 1.6; word-break: break-word; white-space: pre-wrap; }
.ck-agent-msg-user { align-self: flex-end; background: #4A90D9; color: #fff; border-bottom-right-radius: 3px; }
.ck-agent-msg-ai { align-self: flex-start; background: #fff; color: #2C3E50; border: 1px solid #E8ECF1; border-bottom-left-radius: 3px; }
.ck-agent-msg-empty { align-self: center; text-align: center; color: #A0AAB8; font-size: 12px; padding: 22px 10px; line-height: 1.8; }
.ck-agent-msg-empty .em-emoji { font-size: 26px; display: block; }
.ck-agent-msg-typing { align-self: flex-start; color: #8A94A3; font-size: 12px; padding: 4px 2px; }

.ck-agent-quick { display: flex; flex-wrap: wrap; gap: 6px; padding: 8px 12px; border-top: 1px solid #F0F2F5; }
.ck-agent-quick-btn { font-size: 11px; padding: 4px 9px; border-radius: 12px; border: 1px solid #DDE3EA; background: #FAFBFD; color: #5A6878; cursor: pointer; transition: all .12s; }
.ck-agent-quick-btn:hover { border-color: #4A90D9; color: #2C6EC4; background: #F0F6FC; }

.ck-agent-input-row { display: flex; gap: 8px; padding: 10px 12px 12px; }
.ck-agent-input { flex: 1; border: 1px solid #DDE3EA; border-radius: 8px; padding: 8px 10px; font-size: 12px; outline: none; resize: none; min-height: 36px; max-height: 90px; font-family: inherit; }
.ck-agent-input:focus { border-color: #4A90D9; }
.ck-agent-send { padding: 0 14px; border: none; border-radius: 8px; background: #4A90D9; color: #fff; font-size: 12px; cursor: pointer; }
.ck-agent-send:disabled { background: #B8C6D9; cursor: not-allowed; }

.ck-agent-sug { border-top: 1px solid #F0F2F5; padding: 10px 12px 12px; }
.ck-agent-sug-title { font-size: 12px; font-weight: 700; color: #5A6878; margin-bottom: 8px; display: flex; justify-content: space-between; align-items: center; }
.ck-agent-sug-title .more { cursor: pointer; font-size: 11px; font-weight: 400; color: #4A90D9; }
.ck-agent-sug-item { display: flex; align-items: flex-start; gap: 8px; padding: 8px; border: 1px solid #EEF1F5; border-radius: 8px; margin-bottom: 6px; background: #fff; }
.ck-agent-sug-item .si-txt { flex: 1; font-size: 11px; color: #5A6878; line-height: 1.55; display: -webkit-box; -webkit-line-clamp: 3; -webkit-box-orient: vertical; overflow: hidden; }
.ck-agent-sug-item .si-time { font-size: 10px; color: #A0AAB8; flex-shrink: 0; }
.ck-agent-sug-acts { display: flex; gap: 6px; flex-shrink: 0; }
.ck-agent-sug-btn { font-size: 11px; padding: 2px 8px; border-radius: 6px; cursor: pointer; border: 1px solid #DDE3EA; background: #fff; color: #5A6878; }
.ck-agent-sug-btn.adopt { border-color: #27AE60; color: #27AE60; }
.ck-agent-sug-btn.dismiss { border-color: #E74C3C; color: #E74C3C; }
.ck-agent-sug-item.is-adopted { border-color: #D4EFDF; background: #F4FBF6; }
.ck-agent-sug-item.is-dismissed { opacity: .5; }
.ck-agent-sug-empty { font-size: 11px; color: #A0AAB8; text-align: center; padding: 8px; }

/* ─── 工作台智能体入口卡 ─── */
.ck-agent-entry { display: flex; align-items: center; gap: 10px; padding: 10px; border: 1px solid #E8ECF1; border-radius: 8px; cursor: pointer; transition: all .12s; margin-bottom: 8px; }
.ck-agent-entry:last-child { margin-bottom: 0; }
.ck-agent-entry:hover { border-color: #4A90D9; background: #F0F6FC; }
.ck-agent-entry .ae-avatar { width: 34px; height: 34px; border-radius: 8px; display: flex; align-items: center; justify-content: center; font-size: 18px; color: #fff; flex-shrink: 0; }
.ck-agent-entry .ae-main { flex: 1; min-width: 0; }
.ck-agent-entry .ae-name { font-size: 13px; font-weight: 600; color: #2C3E50; }
.ck-agent-entry .ae-desc { font-size: 11px; color: #8A94A3; }
.ck-agent-entry .ae-arrow { font-size: 14px; color: #B8C6D9; }

/* ─── 登录口令框 ─── */
#loginLocalPwd.login-input { width: 100%; margin-top: 8px; }
.login-pwd-hint { font-size: 11px; color: #A0AAB8; margin-top: 6px; line-height: 1.5; }

/* ─── 响应式：窄屏侧栏堆叠到下方 ─── */
@media (max-width: 1100px) {
  .ck-agent-layout { grid-template-columns: 1fr; }
  .ck-agent-side { position: static; }
  .ck-agent-card { display: grid; grid-template-columns: 1fr 1fr; gap: 0; }
  .ck-agent-card > .ck-agent-head { grid-column: span 2; }
}
@media (max-width: 768px) {
  .ck-agent-card { grid-template-columns: 1fr; }
  .ck-agent-card > .ck-agent-head { grid-column: span 1; }
  .ck-agent-chat { height: 240px; }
}

/* ═══ v14 已关闭项目模块（方案 V1.0 第二章）+ 停止跟进（第三/四章）═══ */
.closed-stage-tabs { display: flex; gap: 6px; flex-wrap: wrap; }
.closed-stage-tab { padding: 4px 12px; font-size: 12px; border: 1px solid #E5E7EB; border-radius: 14px; cursor: pointer; color: #6B7280; background: #fff; transition: all .15s; }
.closed-stage-tab:hover { border-color: #4A90D9; color: #4A90D9; }
.closed-stage-tab.on { background: #4A90D9; border-color: #4A90D9; color: #fff; font-weight: 500; }
.closed-filter-bar { display: flex; flex-wrap: wrap; align-items: center; justify-content: space-between; gap: 10px; margin: 12px 0 14px; }
.closed-filter-ops { display: flex; gap: 8px; flex-wrap: wrap; align-items: center; }
.closed-filter-ops .input-field { min-width: 140px; }
.closed-list { display: flex; flex-direction: column; gap: 8px; }
.closed-row { border: 1px solid var(--border, #E5E7EB); border-radius: 10px; background: #fff; padding: 10px 14px; display: flex; justify-content: space-between; align-items: center; gap: 12px; }
.closed-row:hover { border-color: #4A90D9; box-shadow: 0 1px 4px rgba(74,144,217,.15); }
.closed-row-main { flex: 1; min-width: 0; }
.closed-row-title { font-size: 13px; font-weight: 600; color: #1F2937; }
.closed-row-sub { display: flex; flex-wrap: wrap; gap: 4px 12px; font-size: 11px; color: #6B7280; margin-top: 5px; align-items: center; }
.closed-type { font-size: 11px; font-weight: 600; border: 1px solid; border-radius: 4px; padding: 1px 6px; background: #fff; }
.closed-row-reason { font-size: 12px; color: #374151; margin-top: 6px; background: #F7F8FA; border-radius: 6px; padding: 5px 8px; word-break: break-all; }
.closed-row-side { display: flex; flex-direction: column; align-items: flex-end; gap: 6px; flex-shrink: 0; }
.closed-time { font-size: 11px; color: #9CA3AF; white-space: nowrap; }
.closed-row-actions { display: flex; gap: 8px; flex-wrap: wrap; justify-content: flex-end; }
.closed-pager { display: flex; justify-content: center; align-items: center; gap: 14px; margin-top: 14px; font-size: 12px; color: #6B7280; }
.closed-pager button[disabled] { opacity: .4; cursor: not-allowed; }
/* 停止跟进：原因快捷选项 + 卡片按钮 */
.stop-chip { padding: 3px 10px; font-size: 12px; border: 1px solid #E5E7EB; border-radius: 12px; background: #fff; color: #4B5563; cursor: pointer; transition: all .15s; }
.stop-chip:hover { border-color: #E67E22; color: #C96F0A; }
.stop-chip.on { background: #FFF3E0; border-color: #E67E22; color: #C96F0A; font-weight: 500; }
.opp-stop-btn { color: #E67E22 !important; border-color: #E67E22 !important; }
.opp-stop-btn:hover { background: #FFF3E0 !important; }

/* ═══════════════════════════════════════
   统一用户菜单系统（v3.0 · 2026-08-21）
   双入口：左下角侧边栏用户区 + 右上角顶部用户条
   移动端补充：底部 Tab "我的"
   ═══════════════════════════════════════ */

/* ─── 顶部用户条（替代被隐藏的 .top-bar，入口2） ─── */
.user-menu-bar {
  display: flex;
  justify-content: space-between;
  align-items: center;
  height: 44px;
  padding: 0 20px;
  background: #fff;
  border-bottom: 1px solid #E8E8E8;
  flex-shrink: 0;
}
.umb-left { display: flex; align-items: center; gap: 8px; }
.umb-title { font-size: 15px; font-weight: 600; color: #2C3E50; }

/* ─── 用户菜单触发器（顶部条右侧） ─── */
.user-menu-trigger {
  display: flex;
  align-items: center;
  gap: 6px;
  padding: 4px 10px 4px 6px;
  border-radius: 20px;
  cursor: pointer;
  transition: background 0.15s;
  user-select: none;
}
.user-menu-trigger:hover { background: #F0F4F8; }
.umt-avatar {
  width: 28px; height: 28px;
  border-radius: 50%;
  background: var(--primary);
  color: #fff;
  display: flex; align-items: center; justify-content: center;
  font-size: 12px; font-weight: 600;
}
.umt-name { font-size: 13px; color: #2C3E50; font-weight: 500; }
.umt-arrow { font-size: 10px; color: #8A94A3; margin-left: 2px; }

/* ─── 侧边栏用户区可点击化（入口1） ─── */
.sidebar-user {
  cursor: pointer;
  transition: background 0.15s;
}
.sidebar-user:hover { background: rgba(255,255,255,0.06); }

/* ─── 菜单面板（三入口共用，默认隐藏，.open 时显示） ─── */
.user-menu-panel {
  position: fixed;
  width: 260px;
  background: #fff;
  border: 1px solid #E8E8E8;
  border-radius: 12px;
  box-shadow: 0 6px 28px rgba(0,0,0,0.12);
  z-index: 10000;
  display: none;
  overflow: hidden;
}
.user-menu-panel.open { display: block; }

/* 用户信息头（固定在面板顶部） */
.um-user-header {
  display: flex;
  align-items: center;
  gap: 10px;
  padding: 14px 16px 12px;
  background: #FAFBFC;
  border-bottom: 1px solid #F0F0F0;
}
.um-user-header .um-avatar {
  width: 36px; height: 36px;
  border-radius: 50%;
  background: var(--primary);
  color: #fff;
  display: flex; align-items: center; justify-content: center;
  font-size: 15px; font-weight: 600;
  flex-shrink: 0;
}
.um-user-header .um-name { font-size: 14px; font-weight: 600; color: #2C3E50; }
.um-user-header .um-meta { font-size: 11px; color: #8A94A3; margin-top: 2px; }

/* 分组标签 */
.um-group-label {
  font-size: 11px;
  color: #8A94A3;
  padding: 10px 16px 4px;
  font-weight: 500;
  text-transform: uppercase;
  letter-spacing: 0.3px;
}

/* 分割线 */
.um-divider { height: 1px; background: #F0F0F0; margin: 4px 0; }

/* 菜单项 */
.um-item {
  padding: 9px 16px;
  display: flex;
  justify-content: space-between;
  align-items: center;
  cursor: pointer;
  transition: background 0.12s;
  font-size: 13px;
  color: #2C3E50;
}
.um-item:hover { background: #F5F6F8; }
.um-item .um-desc { font-size: 11px; color: #B0B8C4; }

/* 退出登录项（红色强调） */
.um-item.danger { color: #C7000B; }
.um-item.danger:hover { background: #FCEBEB; }
.um-item.danger .um-desc { color: #F0A0A8; }

/* 面板底部 */
.um-footer {
  padding: 8px 16px;
  font-size: 10px;
  color: #C0C8D0;
  text-align: center;
  border-top: 1px solid #F0F0F0;
  background: #FAFBFC;
}

/* ─── 退出确认弹窗 ─── */
.um-confirm-overlay {
  position: fixed;
  inset: 0;
  background: rgba(0,0,0,0.35);
  z-index: 10001;
  display: flex;
  align-items: center;
  justify-content: center;
}
.um-confirm-overlay.hidden { display: none; }
.um-confirm-card {
  position: fixed;
  top: 50%; left: 50%;
  transform: translate(-50%, -50%);
  width: 320px;
  max-width: calc(100% - 32px);
  background: #fff;
  border-radius: 16px;
  box-shadow: 0 8px 40px rgba(0,0,0,0.18);
  z-index: 10002;
  padding: 28px 24px 20px;
  text-align: center;
}
.um-confirm-card.hidden { display: none; }
.um-confirm-icon { font-size: 36px; margin-bottom: 12px; }
.um-confirm-title { font-size: 17px; font-weight: 600; color: #2C3E50; margin-bottom: 8px; }
.um-confirm-msg { font-size: 13px; color: #6B7280; line-height: 1.6; margin-bottom: 20px; }
.um-confirm-actions { display: flex; gap: 12px; }
.um-btn-cancel {
  flex: 1;
  padding: 10px;
  border: 1px solid #E8E8E8;
  border-radius: 10px;
  background: #fff;
  font-size: 14px;
  color: #6B7280;
  cursor: pointer;
  transition: background 0.15s;
}
.um-btn-cancel:hover { background: #F5F6F8; }
.um-btn-danger {
  flex: 1;
  padding: 10px;
  border: none;
  border-radius: 10px;
  background: #C7000B;
  font-size: 14px;
  color: #fff;
  font-weight: 500;
  cursor: pointer;
  transition: background 0.15s;
}
.um-btn-danger:hover { background: #A80009; }

/* ─── 子功能弹窗（个人资料/账号设置/偏好设置/系统信息） ─── */
.um-sub-overlay {
  position: fixed;
  inset: 0;
  background: rgba(0,0,0,0.35);
  z-index: 10001;
}
.um-sub-overlay.hidden { display: none; }
.um-sub-card {
  position: fixed;
  top: 50%; left: 50%;
  transform: translate(-50%, -50%);
  width: 460px;
  max-width: calc(100% - 32px);
  max-height: 80vh;
  background: #fff;
  border-radius: 16px;
  box-shadow: 0 8px 40px rgba(0,0,0,0.18);
  z-index: 10002;
  display: flex;
  flex-direction: column;
  overflow: hidden;
}
.um-sub-card.hidden { display: none; }
.um-sub-header {
  display: flex;
  justify-content: space-between;
  align-items: center;
  padding: 16px 20px;
  border-bottom: 1px solid #F0F0F0;
  flex-shrink: 0;
}
.um-sub-title { font-size: 16px; font-weight: 600; color: #2C3E50; }
.um-sub-close {
  width: 28px; height: 28px;
  border: none;
  background: #F5F6F8;
  border-radius: 50%;
  font-size: 18px;
  color: #8A94A3;
  cursor: pointer;
  display: flex; align-items: center; justify-content: center;
  transition: background 0.15s;
}
.um-sub-close:hover { background: #E8E8E8; }
.um-sub-body { padding: 20px; overflow-y: auto; flex: 1; }

/* 子功能弹窗内部表单 */
.um-field { margin-bottom: 16px; }
.um-field label { display: block; font-size: 12px; color: #8A94A3; margin-bottom: 4px; font-weight: 500; }
.um-field input, .um-field select, .um-field textarea {
  width: 100%;
  padding: 8px 12px;
  border: 1px solid #E8E8E8;
  border-radius: 8px;
  font-size: 13px;
  color: #2C3E50;
  background: #fff;
  outline: none;
  transition: border-color 0.15s;
}
.um-field input:focus, .um-field select:focus, .um-field textarea:focus { border-color: var(--primary); }
.um-field input:read-only { background: #FAFBFC; color: #8A94A3; }
.um-field-row { display: flex; gap: 12px; }
.um-field-row .um-field { flex: 1; }
.um-sub-actions { display: flex; justify-content: flex-end; gap: 10px; margin-top: 20px; }
.um-sub-actions button { padding: 8px 20px; border-radius: 8px; font-size: 13px; cursor: pointer; border: none; }

/* 系统信息列表 */
.um-sysinfo-row {
  display: flex;
  justify-content: space-between;
  padding: 8px 0;
  border-bottom: 1px solid #F5F5F5;
  font-size: 13px;
}
.um-sysinfo-row:last-child { border-bottom: none; }
.um-sysinfo-key { color: #8A94A3; }
.um-sysinfo-val { color: #2C3E50; font-weight: 500; }

/* 偏好开关 */
.um-pref-row {
  display: flex;
  justify-content: space-between;
  align-items: center;
  padding: 10px 0;
  border-bottom: 1px solid #F5F5F5;
}
.um-pref-row:last-child { border-bottom: none; }
.um-pref-label { font-size: 13px; color: #2C3E50; }
.um-pref-desc { font-size: 11px; color: #8A94A3; }
.um-toggle {
  position: relative;
  width: 40px; height: 22px;
  background: #E8E8E8;
  border-radius: 11px;
  cursor: pointer;
  transition: background 0.2s;
  flex-shrink: 0;
}
.um-toggle.on { background: var(--primary); }
.um-toggle::after {
  content: '';
  position: absolute;
  top: 2px; left: 2px;
  width: 18px; height: 18px;
  background: #fff;
  border-radius: 50%;
  transition: transform 0.2s;
  box-shadow: 0 1px 3px rgba(0,0,0,0.2);
}
.um-toggle.on::after { transform: translateX(18px); }

/* ─── 移动端适配 ─── */
@media (max-width: 767px) {
  .user-menu-bar { height: 40px; padding: 0 12px; }
  .umt-name { display: none; }
  .umb-title { font-size: 14px; }

  /* 移动端菜单面板（从底部弹出） */
  #userMenuPanel_mobile {
    position: fixed;
    bottom: 64px;
    left: 50%;
    transform: translateX(-50%);
    width: calc(100% - 24px);
    max-width: 380px;
  }
  #userMenuPanel_mobile.open { transform: translateX(-50%); }

  .um-sub-card { width: calc(100% - 24px); max-height: 75vh; }
}

/* ─── 报销审批 + 预算管控（v20260822c）─── */
.reimb-filter { display: flex; gap: 10px; align-items: center; padding: 12px; flex-wrap: wrap; }
.reimb-filter select { padding: 6px 10px; border: 1px solid var(--border); border-radius: 6px; font-size: 13px; background: var(--card-bg); color: var(--text); }
.reimb-count { font-size: 12px; color: var(--text-secondary); margin-left: auto; }
.reimb-card.reimb-over { border-left: 3px solid var(--warning); }
.reimb-reject-reason { color: var(--warning); }
.c-red { color: #E02020; } .c-orange { color: #FF8C42; } .c-green { color: var(--success); }

/* 预算看板卡片 */
.budget-toolbar { display: flex; gap: 10px; align-items: center; padding: 12px; flex-wrap: wrap; }
.budget-toolbar select, .budget-toolbar .btn-link { padding: 6px 10px; border: 1px solid var(--border); border-radius: 6px; font-size: 13px; background: var(--card-bg); color: var(--text); }
.budget-cards { display: grid; grid-template-columns: repeat(auto-fill, minmax(280px, 1fr)); gap: 12px; padding: 0 12px 12px; }
.budget-card { background: var(--card-bg); border: 1px solid var(--border); border-radius: 10px; padding: 14px; box-shadow: var(--shadow); }
.budget-card-head { display: flex; justify-content: space-between; align-items: baseline; margin-bottom: 10px; flex-wrap: wrap; gap: 6px; }
.budget-card-head b { font-size: 14px; }
.budget-owner { font-size: 12px; color: var(--text-secondary); }
.budget-nums { display: grid; grid-template-columns: 1fr 1fr; gap: 8px; margin-bottom: 10px; }
.budget-nums > div { display: flex; justify-content: space-between; font-size: 13px; padding: 4px 8px; background: var(--bg); border-radius: 6px; }
.budget-nums span { color: var(--text-secondary); font-size: 12px; }
.budget-bar { height: 8px; background: var(--bg); border-radius: 4px; overflow: hidden; margin-bottom: 10px; }
.budget-bar-fill { height: 100%; border-radius: 4px; transition: width .3s ease; }
.budget-bar-fill.ok { background: var(--success); }
.budget-bar-fill.warn { background: #FF8C42; }
.budget-bar-fill.danger { background: var(--warning); }

/* 预算期间分解表 */
.budget-table-wrap { padding: 0 12px 20px; }
.budget-table-title { font-size: 13px; font-weight: 600; color: var(--text); margin: 4px 0 10px; }
.budget-table { width: 100%; border-collapse: collapse; background: var(--card-bg); border-radius: 10px; overflow: hidden; box-shadow: var(--shadow); }
.budget-table th, .budget-table td { padding: 8px 12px; font-size: 13px; text-align: left; border-bottom: 1px solid var(--border); }
.budget-table th { background: var(--bg); color: var(--text-secondary); font-weight: 600; }
.budget-table tr:last-child td { border-bottom: none; }
.budget-over-row td { background: #FFF1F0; }
.budget-over-row td:first-child { color: var(--warning); font-weight: 600; }
.budget-edit-input { width: 120px; padding: 4px 8px; border: 1px solid var(--border); border-radius: 5px; font-size: 13px; color: var(--text); background: var(--card-bg); }
.budget-edit-input:focus { border-color: var(--primary); outline: none; }
.budget-edit-input:disabled { background: var(--bg); color: var(--text-secondary); }
.budget-norow { color: var(--text-secondary); font-size: 12px; }

/* 报销详情弹窗（VTModal html 模式） */
.reimb-detail-table { width: 100%; border-collapse: collapse; font-size: 13px; margin-bottom: 14px; }
.reimb-detail-table td { padding: 6px 8px; border-bottom: 1px dashed var(--border); }
.reimb-detail-table td:first-child { color: var(--text-secondary); width: 110px; white-space: nowrap; }
.reimb-tl-title { font-weight: 600; font-size: 13px; margin: 10px 0 8px; }
.reimb-tl-item { display: flex; gap: 10px; padding: 6px 0; font-size: 13px; }
.reimb-tl-dot { width: 8px; height: 8px; border-radius: 50%; margin-top: 6px; flex-shrink: 0; background: var(--idle); }
.reimb-tl-dot.approve { background: var(--success); }
.reimb-tl-dot.reject { background: var(--warning); }
.reimb-tl-dot.skip { background: #FF8C42; }
.reimb-tl-action { margin-left: 6px; font-size: 12px; color: var(--text-secondary); }
.reimb-tl-action.approve { color: var(--success); }
.reimb-tl-action.reject { color: var(--warning); }
.reimb-tl-comment { color: var(--text-secondary); margin-top: 2px; }
.reimb-tl-time { font-size: 11px; color: var(--idle); margin-top: 2px; }

@media (max-width: 767px) {
  .budget-nums { grid-template-columns: 1fr; }
  .budget-table { display: block; overflow-x: auto; }
}
