/* ===================== 飞书设计系统 Feishu Universe Design ===================== */
/* 品牌蓝 #1456F0 | 文字 #1F2329 | 辅助 #646A73 | 间距基准 4px */

:root {
  /* === 品牌色 Brand Blue === */
  --primary: #1456F0;
  --primary-dark: #0E42D2;
  --primary-active: #0A2DA6;
  --primary-light: rgba(20, 86, 240, 0.08);
  --primary-light-solid: #E8F2FF;
  --primary-bg: rgba(20, 86, 240, 0.04);
  --primary-bg-solid: #F0F5FF;

  /* === 功能色 === */
  --success: #00B42C;
  --success-dark: #009A29;
  --success-light: rgba(0, 180, 44, 0.10);
  --success-light-solid: #E8FFEA;
  --warning: #FF7D00;
  --warning-dark: #D25F00;
  --warning-light: rgba(255, 125, 0, 0.10);
  --warning-light-solid: #FFF7E8;
  --danger: #F53F3F;
  --danger-dark: #CB2634;
  --danger-light: rgba(245, 63, 63, 0.10);
  --danger-light-solid: #FFECE8;
  --info: #1456F0;

  /* === 中性色 N900→N50 (14色灰阶) === */
  --n900: #1F2329;  /* 一级标题/正文 */
  --n800: #2B2F36;  /* 一级图标 */
  --n700: rgba(31, 35, 41, 0.70);
  --n600: #646A73;  /* 二级标题/正文/图标 */
  --n500: #8F959E;  /* 三级图标/placeholder/提示 */
  --n400: #BBBFC4;  /* Disable */
  --n300: #D0D3D6;  /* 可交互控件描边 */
  --n200: #DEE0E3;  /* 卡片描边 */
  --n100: #E5E6EB;  /* 较浅分割 */
  --n50:  #EFF0F1;  /* disable填充/最浅底 */

  /* === 文字色（别名） === */
  --text-primary: var(--n900);
  --text-secondary: var(--n600);
  --text-tertiary: var(--n500);
  --text-disabled: var(--n400);
  --text-light: #646A73;     /* 兼容别名 = n600 */
  --gray-200: #DEE0E3;       /* 兼容别名 = n200 */
  --gray-500: #8F959E;       /* 兼容别名 = n500 */

  /* === 背景色（飞书规范） === */
  --bg-body: #F5F6F7;       /* Background 2 */
  --bg-white: #FFFFFF;
  --bg-hover: rgba(31, 35, 41, 0.08);  /* N900 8% */
  --bg-press: rgba(31, 35, 41, 0.12);  /* N900 12% */
  --bg-disabled: var(--n50);
  --bg-card-header: #F7F8FA;
  --bg-modal-section: #F8F9FA;  /* Background 3 */

  /* === 边框（飞书规范） === */
  --border-card: var(--n200);       /* 卡片描边 */
  --border-control: var(--n300);    /* 可交互控件描边 */
  --border-light: var(--n100);
  --border-divider: rgba(31, 35, 41, 0.15); /* N900 15% */

  /* === 圆角（飞书规范） === */
  --radius-xs: 4px;
  --radius-sm: 6px;
  --radius: 8px;
  --radius-lg: 12px;
  --radius-xl: 16px;

  /* === 阴影（飞书规范 - 基于N900透明度） === */
  --shadow-sm: 0 1px 4px rgba(31, 35, 41, 0.06);
  --shadow: 0 2px 8px rgba(31, 35, 41, 0.06);
  --shadow-md: 0 4px 16px rgba(31, 35, 41, 0.08);
  --shadow-lg: 0 6px 24px rgba(31, 35, 41, 0.10);
  --shadow-modal: 0 8px 40px rgba(31, 35, 41, 0.16);
  --shadow-hover: 0 4px 16px rgba(20, 86, 240, 0.15);
  --shadow-button: 0 2px 8px rgba(20, 86, 240, 0.25);

  /* === 布局 === */
  --sidebar-w: 240px;
  --topbar-h: 56px;

  /* === 动画 === */
  --transition-fast: 0.15s cubic-bezier(0.4, 0, 0.2, 1);
  --transition: 0.2s cubic-bezier(0.4, 0, 0.2, 1);
  --transition-slow: 0.3s cubic-bezier(0.4, 0, 0.2, 1);

  /* === 字体 === */
  --font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', 'PingFang SC', 'Hiragino Sans GB', 'Microsoft YaHei', 'Helvetica Neue', Arial, sans-serif;
  --font-size-xs: 12px;
  --font-size-sm: 13px;
  --font-size-base: 14px;
  --font-size-md: 16px;
  --font-size-lg: 18px;
  --font-size-xl: 20px;
  --font-size-2xl: 24px;
  --font-size-kpi: 36px;

  /* === 间距（4px基准） === */
  --sp-1: 4px;
  --sp-2: 8px;
  --sp-3: 12px;
  --sp-4: 16px;
  --sp-5: 20px;
  --sp-6: 24px;
  --sp-8: 32px;
  --sp-10: 40px;
}

/* ===================== 全局重置 ===================== */
*, *::before, *::after { box-sizing: border-box; margin: 0; padding: 0; }
html { -webkit-font-smoothing: antialiased; -moz-osx-font-smoothing: grayscale; }
body {
  font-family: var(--font-family);
  font-size: var(--font-size-base);
  color: var(--text-primary);
  background: var(--bg-body);
  line-height: 1.5715;
  overflow: hidden;
}
a { text-decoration: none; color: var(--primary); }
a:hover { color: var(--primary-dark); }
button {
  cursor: pointer; border: none; outline: none;
  font-family: inherit; font-size: inherit;
}
input, select, textarea { font-family: inherit; outline: none; }

/* 飞书风格滚动条 */
::-webkit-scrollbar { width: 6px; height: 6px; }
::-webkit-scrollbar-track { background: transparent; }
::-webkit-scrollbar-thumb { background: var(--n400); border-radius: 3px; }
::-webkit-scrollbar-thumb:hover { background: var(--n500); }

/* ===================== 登录页 ===================== */
.login-bg {
  min-height: 100vh;
  background: linear-gradient(135deg, #0A2DA6 0%, #1456F0 50%, #3D7BFF 100%);
  display: flex; align-items: center; justify-content: center;
  position: relative;
}
.login-bg::before {
  content: '';
  position: absolute; inset: 0;
  background: url("data:image/svg+xml,%3Csvg width='60' height='60' viewBox='0 0 60 60' xmlns='http://www.w3.org/2000/svg'%3E%3Cg fill='none' fill-rule='evenodd'%3E%3Cg fill='%23ffffff' fill-opacity='0.04'%3E%3Cpath d='M36 34v-4h-2v4h-4v2h4v4h2v-4h4v-2h-4zm0-30V0h-2v4h-4v2h4v4h2V6h4V4h-4zM6 34v-4H4v4H0v2h4v4h2v-4h4v-2H6zM6 4V0H4v4H0v2h4v4h2V6h4V4H6z'/%3E%3C/g%3E%3C/g%3E%3C/svg%3E");
  pointer-events: none;
}
.login-box {
  background: #fff; border-radius: var(--radius-xl); padding: 48px 40px;
  width: 400px; box-shadow: 0 8px 40px rgba(0,0,0,0.12);
  position: relative; z-index: 1;
}
.login-logo { text-align: center; margin-bottom: 32px; }
.login-logo .logo-icon { font-size: 40px; margin-bottom: 12px; display: inline-block; }
.login-logo h1 { font-size: var(--font-size-xl); color: var(--text-primary); font-weight: 600; }
.login-logo p { font-size: var(--font-size-sm); color: var(--text-tertiary); margin-top: 4px; }
.login-demo {
  margin-top: 20px; padding: 12px 16px;
  background: var(--bg-body); border-radius: var(--radius-sm);
  font-size: var(--font-size-sm); color: var(--text-tertiary); line-height: 1.8;
}
.login-demo strong { color: var(--text-secondary); }
.btn-demo {
  margin-top: 12px; padding: 12px 0; font-size: 15px; font-weight: 600;
  border-radius: var(--radius-md); cursor: pointer; border: 2px solid #d4a853;
  background: linear-gradient(135deg, #0a1630, #1a2d50);
  color: #d4a853; letter-spacing: 2px;
  transition: all 0.3s ease;
}
.btn-demo:hover {
  background: linear-gradient(135deg, #1a2d50, #2a4060);
  border-color: #f0c040; color: #f0c040;
  box-shadow: 0 4px 16px rgba(212,168,83,0.25);
}
.btn-demo.full-width { width: 100%; justify-content: center; display: flex; align-items: center; }

/* ===================== 布局 ===================== */
#app { display: none; flex-direction: row; height: 100vh; overflow: hidden; }

/* 侧边栏 - 飞书风格 */
.sidebar {
  width: var(--sidebar-w); min-width: var(--sidebar-w);
  background: var(--bg-white); display: flex; flex-direction: column;
  overflow-y: auto; border-right: 1px solid var(--border-card);
}
.sidebar-header {
  padding: 20px 20px 16px;
  border-bottom: 1px solid var(--border-light);
}
.sidebar-header .sys-name {
  color: var(--text-primary); font-size: 15px; font-weight: 600;
  letter-spacing: 0.2px; line-height: 1.4;
  display: flex; align-items: center; gap: 8px;
}
.sidebar-header .sys-sub {
  color: var(--text-tertiary); font-size: var(--font-size-xs); margin-top: 4px;
}

/* 导航 */
.sidebar-nav { padding: 8px 8px; flex: 1; }
.nav-section {
  padding: 16px 12px 8px;
  font-size: 11px;
  font-weight: 500;
  color: var(--text-tertiary);
  letter-spacing: 0.5px;
  margin-top: 4px;
}
.nav-item {
  display: flex; align-items: center; gap: 8px;
  padding: 8px 12px; color: var(--text-primary);
  font-size: var(--font-size-base); cursor: pointer;
  transition: all var(--transition-fast); border-radius: var(--radius-sm);
  margin: 1px 0; font-weight: 400; position: relative;
}
.nav-item:hover {
  background: var(--bg-hover); color: var(--text-primary);
}
.nav-item.active {
  background: var(--primary-light); color: var(--primary);
  font-weight: 500;
}
.nav-item .nav-icon { font-size: 16px; width: 20px; text-align: center; flex-shrink: 0; }
.nav-item.active .nav-icon { color: var(--primary); }

/* 导航徽章 — 预警中心未处理数量 */
.nav-badge {
  position: absolute; right: 10px; top: 50%; transform: translateY(-50%);
  min-width: 20px; height: 20px; line-height: 20px;
  padding: 0 5px; border-radius: 10px;
  background: #dc2626; color: #fff;
  font-size: 11px; font-weight: 700; text-align: center;
  white-space: nowrap; box-shadow: 0 1px 4px rgba(220,38,38,.4);
  z-index: 2;
}
.nav-badge.pulse { animation: badgePulse .6s ease-in-out; }
@keyframes badgePulse {
  0%,100% { transform: translateY(-50%) scale(1); }
  50% { transform: translateY(-50%) scale(1.25); }
}

/* 树形导航组（设置等可展开菜单） */
.nav-group { margin: 4px 0; }
.nav-group-title {
  display: flex; align-items: center; gap: 8px;
  padding: 14px 12px 10px 12px; color: var(--text-secondary);
  font-size: 13px; font-weight: 600;
  letter-spacing: 0.3px; cursor: pointer;
  transition: color var(--transition-fast);
  user-select: none;
  margin-bottom: 2px;
}
.nav-group-title:hover { color: var(--text-primary); }
.nav-group-icon {
  font-size: 15px; color: var(--primary);
  width: 20px; text-align: center; flex-shrink: 0;
}
.nav-group-arrow {
  font-size: 10px; width: 20px; text-align: center;
  line-height: 1; margin-left: auto;
  transition: transform var(--transition-fast);
  color: var(--text-tertiary); flex-shrink: 0;
}
.nav-group-arrow.collapsed { transform: rotate(-90deg); }
.nav-group-children { overflow: hidden; }
.nav-group-children.collapsed { display: none; }
.nav-sub-section {
  padding: 12px 12px 4px 24px;
  font-size: 11px; color: var(--text-tertiary);
  font-weight: 500; letter-spacing: 0.3px;
  text-transform: none; margin-top: 2px;
}
.nav-sub-item {
  padding-left: 36px !important;
}

/* 侧边栏底部 */
.sidebar-footer {
  padding: 12px 12px 16px;
  border-top: 1px solid var(--border-light);
}
.sidebar-footer button {
  width: 100%; text-align: left; background: transparent;
  color: var(--text-secondary); font-size: var(--font-size-sm);
  padding: 6px 10px; border-radius: var(--radius-sm);
  transition: all var(--transition-fast); font-weight: 400;
}
.sidebar-footer button:hover { background: var(--bg-hover); color: var(--text-primary); }

/* 领导视窗导航项 */
.nav-demo {
  border-left: 3px solid #d4a853; margin-left: 0;
  background: linear-gradient(90deg, rgba(212,168,83,0.08), transparent);
  font-weight: 500;
}
.nav-demo:hover {
  background: linear-gradient(90deg, rgba(212,168,83,0.15), rgba(212,168,83,0.03));
  border-left-color: #f0c040;
}
.nav-demo .nav-icon { color: #d4a853; }

/* 主区域 */
.main-area {
  flex: 1; display: flex; flex-direction: column;
  overflow-y: auto; background: var(--bg-body);
}

/* 顶栏 - 飞书风格 */
.topbar {
  height: var(--topbar-h);
  background: var(--bg-white);
  border-bottom: 1px solid var(--border-card);
  display: flex; align-items: center;
  padding: 0 24px; gap: 16px; flex-shrink: 0;
}
.topbar-title {
  font-size: var(--font-size-md); font-weight: 600;
  color: var(--text-primary); flex: 1; letter-spacing: 0.2px;
}
.topbar-user {
  display: flex; align-items: center; gap: 6px;
  padding: 5px 12px; border-radius: var(--radius-sm);
  cursor: pointer; font-size: var(--font-size-base);
  color: var(--text-secondary); position: relative;
  user-select: none; transition: all var(--transition-fast);
}
.topbar-user:hover {
  background: var(--bg-hover); color: var(--text-primary);
}
.topbar-avatar {
  width: 28px; height: 28px; border-radius: 50%;
  background: var(--primary); color: #fff;
  display: flex; align-items: center; justify-content: center;
  font-size: var(--font-size-xs); font-weight: 600; flex-shrink: 0;
}
.topbar-arrow { font-size: 8px; margin-left: 2px; color: var(--text-tertiary); }

/* 顶栏右侧区域 */
.topbar-right { display: flex; align-items: center; gap: 12px; }

/* 视窗大屏顶栏按钮 */
.topbar-leader-btn {
  background: linear-gradient(135deg, #0a1630, #1a2d50);
  color: #d4a853; border: 1px solid #d4a853;
  padding: 5px 14px; border-radius: 4px; cursor: pointer;
  font-size: 13px; font-weight: 500; letter-spacing: 1px;
  transition: all 0.3s ease; white-space: nowrap;
}
.topbar-leader-btn:hover {
  background: linear-gradient(135deg, #1a2d50, #2a4060);
  border-color: #f0c040; color: #f0c040;
  box-shadow: 0 2px 8px rgba(212,168,83,0.2);
}

/* 用户下拉菜单 */
.user-dropdown {
  position: absolute; top: 100%; right: 0; margin-top: 4px;
  background: var(--bg-white); border: 1px solid var(--border-card);
  border-radius: var(--radius); box-shadow: var(--shadow-lg);
  min-width: 140px; z-index: 1000; overflow: hidden;
}
.dropdown-item {
  padding: 10px 16px; font-size: var(--font-size-sm);
  cursor: pointer; transition: all var(--transition-fast);
  color: var(--text-primary);
}
.dropdown-item:hover { background: var(--bg-hover); }

/* 内容区 */
.content { flex: 1; overflow-y: auto; padding: 24px 28px; overflow-anchor: none; scroll-behavior: auto; }

/* ===================== 统计卡片 - 飞书Dashboard风格 ===================== */
.stats-grid {
  display: grid;
  grid-template-columns: repeat(auto-fit, minmax(200px, 1fr));
  gap: 16px; margin-bottom: 24px;
}
.stat-card {
  background: var(--bg-white);
  border-radius: var(--radius);
  padding: 20px 24px;
  box-shadow: var(--shadow-sm);
  border: 1px solid var(--border-card);
  position: relative; overflow: hidden;
  transition: all var(--transition);
  cursor: default;
}
.stat-card::before {
  content: '';
  position: absolute; left: 0; top: 12px; bottom: 12px;
  width: 3px; border-radius: 0 3px 3px 0;
  background: var(--primary);
  transition: all var(--transition);
}
.stat-card:hover {
  box-shadow: var(--shadow-hover);
  transform: translateY(-2px);
  border-color: var(--primary);
}
.stat-card:hover::before { width: 4px; }
.stat-card.danger::before, .stat-card.red::before { background: var(--danger); }
.stat-card.warning::before, .stat-card.orange::before { background: var(--warning); }
.stat-card.success::before, .stat-card.green::before { background: var(--success); }
.stat-card.primary::before, .stat-card.blue::before { background: var(--primary); }
.stat-card.purple::before { background: #722ED1; }
.stat-card.teal::before { background: #14C9C9; }

.stat-label {
  font-size: var(--font-size-xs);
  color: var(--text-tertiary);
  margin-bottom: 8px;
  font-weight: 400;
}
.stat-value {
  font-size: 32px;
  font-weight: 700;
  color: var(--text-primary);
  line-height: 1.1;
  margin-bottom: 2px;
}
.stat-sub {
  font-size: var(--font-size-xs);
  color: var(--text-tertiary);
  margin-top: 6px;
}

/* FS统计卡片别名 */
.fs-stat-card {
  background: var(--bg-white);
  border-radius: var(--radius);
  padding: 20px 24px;
  box-shadow: var(--shadow-sm);
  border: 1px solid var(--border-card);
  position: relative; overflow: hidden;
  transition: all var(--transition);
}
.fs-stat-card::before {
  content: '';
  position: absolute; left: 0; top: 12px; bottom: 12px;
  width: 3px; border-radius: 0 3px 3px 0;
  transition: width var(--transition);
  background: var(--primary);
}
.fs-stat-card:hover {
  box-shadow: var(--shadow-hover);
  transform: translateY(-2px);
}
.fs-stat-card:hover::before { width: 4px; }
.fs-stat-card.blue::before { background: var(--primary); }
.fs-stat-card.red::before { background: var(--danger); }
.fs-stat-card.orange::before { background: var(--warning); }
.fs-stat-card.green::before { background: var(--success); }
.fs-stat-card.purple::before { background: #722ED1; }
.fs-stat-card.teal::before { background: #14C9C9; }
.fs-stat-card.gold::before { background: #D4A017; }

.fs-stat-value {
  font-size: 32px;
  font-weight: 700;
  color: var(--text-primary);
  line-height: 1.1;
  margin-bottom: 2px;
}
.fs-stat-label {
  font-size: var(--font-size-xs);
  color: var(--text-tertiary);
  margin-top: 6px;
  font-weight: 400;
}

/* ========== 趋势预测专用样式 ========== */
.trend-breadcrumb {
  display: flex; align-items: center; flex-wrap: wrap; gap: 4px;
  padding: 10px 16px; margin-bottom: 20px;
  background: var(--bg-white); border-radius: var(--radius);
  border: 1px solid var(--border-card); box-shadow: var(--shadow-sm);
  font-size: 13px;
}
.trend-bread-item {
  color: var(--text-secondary); cursor: pointer; font-weight: 500;
  padding: 2px 6px; border-radius: 4px; transition: background .2s;
}
.trend-bread-item:hover { background: var(--primary-light); text-decoration: underline; }
.trend-bread-arrow { color: var(--text-tertiary); font-size: 11px; margin: 0 2px; }
.trend-bread-current { color: var(--text-primary); font-weight: 600; }

.trend-drill-btn {
  padding: 6px 14px; border: 1px solid var(--border-card); border-radius: 6px;
  background: #fff; cursor: pointer; font-size: 12px; color: var(--text-primary);
  transition: .2s; white-space: nowrap;
}
.trend-drill-btn:hover {
  border-color: var(--primary); color: var(--primary);
  background: var(--primary-light); box-shadow: 0 1px 4px rgba(0,0,0,.06);
}

/* AI指标卡片 */
.trend-ai-card {
  background: var(--bg-white); border-radius: var(--radius);
  padding: 18px 20px; box-shadow: var(--shadow-sm);
  border: 1px solid var(--border-card); transition: all var(--transition);
}
.trend-ai-card:hover { box-shadow: var(--shadow-hover); transform: translateY(-1px); }
.trend-ai-card.ai-prob { border-left-width: 3px; border-left-style: solid; }
.trend-ai-label { font-size: var(--font-size-xs); color: var(--text-tertiary); margin-bottom: 6px; }
.trend-ai-value { font-size: 28px; font-weight: 700; line-height: 1.1; margin-bottom: 4px; }
.trend-ai-sub { font-size: 11px; color: var(--text-tertiary); }
.trend-ai-card.ai-anomaly .trend-ai-value { color: #ef4444; }
.trend-ai-card.ai-impact .trend-ai-value { color: #8b5cf6; }
.trend-ai-card.ai-spread .trend-ai-value { color: #f59e0b; }

/* ========== 统计分析 - 维度分段控件（飞书紧凑风格） ========== */
.stat-dim-tab {
  font-family: var(--font-family);
  outline: none;
  user-select: none;
}
.stat-dim-tab:hover {
  background: #fff !important;
  color: #3370ff !important;
  box-shadow: 0 1px 3px rgba(0,0,0,.08) !important;
}
.stat-dim-tab.active:hover {
  box-shadow: 0 1px 4px rgba(0,0,0,.14) !important;
}
.stat-dim-tab:active {
  transform: scale(0.97);
}

/* 平台健康卡片 */
.platform-health-card {
  transition: all var(--transition);
}
.platform-health-card:hover {
  box-shadow: var(--shadow-hover);
  transform: translateY(-2px);
}

/* 四大核心分类卡片 */
.core-type-card {
  transition: all var(--transition);
}
.core-type-card:hover {
  transform: translateY(-3px);
  box-shadow: var(--shadow-md);
}

.trend-method-card {
  border: 1px solid var(--border-card); transition: box-shadow var(--transition);
}
.trend-method-card:hover { box-shadow: var(--shadow-hover); }

/* 省份选择按钮（国家级下钻） */
.trend-prov-btn {
  transition: all .2s ease;
}
.trend-prov-btn:hover {
  transform: translateY(-2px);
  box-shadow: 0 4px 12px rgba(0,0,0,.12);
}

/* ========== 情感分析专业版样式 ========== */

/* 页面包裹器 — 浅灰高级背景 */
.sent-wrap {
  background: #f5f7fa; border-radius: 8px; padding: 24px;
  min-height: 100%;
}

/* --- KPI 卡片 (目标风格：icon+label 顶 / 大数字 中 / 副标题 底) --- */
.sent-kpi-grid {
  display: grid; grid-template-columns: repeat(5, 1fr); gap: 16px;
  margin-bottom: 20px;
}
.sent-kpi-card {
  background: #fff; border-radius: 10px; padding: 16px 20px;
  box-shadow: 0 1px 3px rgba(0,0,0,.04);
  transition: box-shadow .2s;
}
.sent-kpi-card:hover { box-shadow: 0 4px 12px rgba(0,0,0,.08); }
.sent-kpi-header {
  display: flex; align-items: center; gap: 6px;
  font-size: 12px; color: #64748b; font-weight: 500; margin-bottom: 8px;
}
.sent-kpi-dot { width: 8px; height: 8px; border-radius: 50%; flex-shrink: 0; }
.sent-kpi-value {
  font-size: 32px; font-weight: 700; color: #1e293b; line-height: 1.1;
  letter-spacing: -0.5px; margin-bottom: 6px;
}
.sent-kpi-footer {
  font-size: 11px; color: #94a3b8; display: flex; align-items: center; gap: 6px;
}
.sent-kpi-change { font-weight: 600; }
.sent-kpi-change.up { color: #dc2626; }
.sent-kpi-change.down { color: #16a34a; }

/* --- AI 评分大卡片 --- */
.sent-ai-card {
  background: linear-gradient(135deg, #faf5ff, #f5f3ff);
  border-radius: 12px; padding: 20px 24px;
  display: flex; gap: 28px; align-items: stretch;
  box-shadow: 0 1px 3px rgba(0,0,0,.04);
  margin-bottom: 20px;
}
.sent-ai-left {
  display: flex; align-items: center; gap: 14px;
  min-width: 200px; border-right: 1px solid rgba(139,92,246,.15);
  padding-right: 28px;
}
.sent-ai-icon {
  width: 56px; height: 56px; border-radius: 14px;
  background: linear-gradient(135deg, #8b5cf6, #a78bfa);
  display: flex; align-items: center; justify-content: center;
  font-size: 26px; color: #fff; flex-shrink: 0;
}
.sent-ai-info { }
.sent-ai-label { font-size: 12px; color: #7c3aed; font-weight: 600; margin-bottom: 2px; }
.sent-ai-score { font-size: 38px; font-weight: 800; color: #6d28d9; line-height: 1; }
.sent-ai-total { font-size: 16px; color: #a78bfa; font-weight: 500; }
.sent-ai-right {
  flex: 1; display: flex; flex-direction: column; justify-content: center; gap: 8px;
}
.sent-ai-bar-row {
  display: flex; align-items: center; gap: 10px;
}
.sent-ai-bar-label {
  font-size: 11px; color: #64748b; width: 65px; text-align: right; flex-shrink: 0;
}
.sent-ai-bar-track {
  flex: 1; height: 10px; background: rgba(139,92,246,.12); border-radius: 5px;
  overflow: hidden;
}
.sent-ai-bar-fill {
  height: 100%; border-radius: 5px; transition: width .4s ease;
}
.sent-ai-bar-val {
  font-size: 11px; font-weight: 600; color: #6d28d9; width: 42px; text-align: right; flex-shrink: 0;
}

/* --- 省份药丸按钮 --- */
.sent-prov-pills {
  display: flex; flex-wrap: wrap; gap: 8px; margin-bottom: 20px;
}
.sent-prov-pill {
  display: inline-flex; align-items: center; gap: 6px;
  padding: 7px 14px; border-radius: 20px; font-size: 13px;
  border: none; cursor: pointer; transition: all .2s;
  font-weight: 500; white-space: nowrap;
}
.sent-prov-pill:hover {
  transform: translateY(-1px); box-shadow: 0 2px 8px rgba(0,0,0,.12);
}
.sent-prov-pill.high { background: #fef2f2; color: #dc2626; }
.sent-prov-pill.high:hover { background: #fee2e2; }
.sent-prov-pill.medium { background: #fffbeb; color: #d97706; }
.sent-prov-pill.medium:hover { background: #fef3c7; }
.sent-prov-pill.low { background: #f0fdf4; color: #16a34a; }
.sent-prov-pill.low:hover { background: #dcfce7; }
.sent-prov-pill .pill-count {
  font-size: 11px; opacity: .7;
}
.sent-prov-pill .pill-risk {
  font-size: 10px; padding: 1px 6px; border-radius: 8px;
}
.sent-prov-pill.high .pill-risk { background: #fecaca; color: #b91c1c; }
.sent-prov-pill.medium .pill-risk { background: #fde68a; color: #92400e; }
.sent-prov-pill.low .pill-risk { background: #bbf7d0; color: #15803d; }

/* --- 细粒度情绪宫格 (飞书风格 · 统一白色卡片 + 左侧色标) --- */
.sent-emotion-grid {
  display: grid; grid-template-columns: repeat(5, 1fr); gap: 10px;
  margin-bottom: 20px;
}
.sent-emotion-item {
  background: #fff; border-radius: 8px; padding: 12px 14px;
  border: 1px solid #f1f5f9; cursor: pointer;
  transition: all .15s ease; position: relative;
  display: flex; align-items: center; gap: 10px;
}
.sent-emotion-item:hover {
  border-color: var(--em-color, #3370ff);
  box-shadow: 0 2px 8px rgba(0,0,0,.06);
}
.sent-emotion-item.sent-em-active {
  border-color: var(--em-color, #3370ff);
  box-shadow: 0 0 0 1px var(--em-color, #3370ff);
}
.sent-emotion-left {
  width: 36px; height: 36px; border-radius: 8px;
  background: var(--em-bg, #f1f5f9);
  display: flex; align-items: center; justify-content: center;
  font-size: 18px; flex-shrink: 0; color: var(--em-color, #64748b);
}
.sent-emotion-right { flex: 1; min-width: 0; }
.sent-emotion-head2 {
  display: flex; align-items: center; justify-content: space-between;
  margin-bottom: 4px;
}
.sent-emotion-name2 {
  font-size: 13px; font-weight: 600; color: #1e293b;
  white-space: nowrap; overflow: hidden; text-overflow: ellipsis;
}
.sent-emotion-count {
  font-size: 20px; font-weight: 700; color: var(--em-color, #64748b);
  font-variant-numeric: tabular-nums; line-height: 1;
}
.sent-emotion-bar2 {
  height: 4px; background: #f1f5f9; border-radius: 2px; overflow: hidden;
}
.sent-emotion-bar-inner2 {
  height: 100%; background: var(--em-color, #64748b); border-radius: 2px; transition: width .5s ease;
}
.sent-emotion-pct {
  font-size: 11px; color: #94a3b8; margin-top: 2px;
}

/* --- 通用内容面板 --- */
.sent-panel {
  background: #fff; border-radius: 10px; padding: 20px 22px;
  box-shadow: 0 1px 3px rgba(0,0,0,.04); margin-bottom: 20px;
}
.sent-panel-title {
  font-size: 15px; font-weight: 600; color: #1e293b; margin-bottom: 14px;
  display: flex; align-items: center; gap: 8px;
}
.sent-panel-subtitle {
  font-size: 11px; color: #94a3b8; font-weight: 400;
}

/* 图表双栏布局 */
.sent-chart-row {
  display: grid; grid-template-columns: 1fr 1fr; gap: 20px; margin-bottom: 20px;
}

/* 地域热力条 */
.sent-heatmap-row {
  display: flex; align-items: center; gap: 10px; margin-bottom: 10px;
}
.sent-heatmap-label {
  width: 70px; text-align: right; font-size: 12px; color: #64748b; font-weight: 500;
  white-space: nowrap; overflow: hidden; text-overflow: ellipsis;
}
.sent-heatmap-track {
  flex: 1; height: 24px; background: #f1f5f9; border-radius: 4px; overflow: hidden;
}
.sent-heatmap-fill {
  height: 100%; border-radius: 4px; transition: width .4s;
}
.sent-heatmap-value {
  width: 135px; font-size: 11px; color: #94a3b8; flex-shrink: 0;
}

/* 关键词云 */
.sent-keyword-wrap {
  display: flex; flex-wrap: wrap; gap: 8px; align-items: center;
  justify-content: center; min-height: 80px; padding: 8px 0;
}
.sent-keyword-tag {
  cursor: pointer; transition: transform .15s; line-height: 1.4;
}
.sent-keyword-tag:hover {
  transform: scale(1.2); text-shadow: 0 0 8px currentColor;
}

/* ========== 多选下拉 ========== */
.sent-multi-trigger {
  display: inline-flex; align-items: center; gap: 6px;
  padding: 6px 12px; border: 1px solid #e2e8f0; border-radius: 6px;
  background: #fff; font-size: 12px; color: #64748b; cursor: pointer;
  white-space: nowrap; transition: .15s; position: relative; user-select: none;
  min-width: 110px;
}
.sent-multi-trigger:hover { border-color: #3370ff; color: #3370ff; }
.sent-multi-trigger:after {
  content: '▾'; font-size: 9px; margin-left: 2px; transition: transform .2s;
}
.sent-multi-trigger.open:after { transform: rotate(180deg); }
.sent-multi-trigger.has-selection {
  border-color: #3370ff; color: #3370ff; background: #eff6ff;
  font-weight: 600;
}

.sent-multi-dropdown {
  position: absolute; top: calc(100% + 4px); left: 0; z-index: 1000;
  background: #fff; border: 1px solid #e2e8f0; border-radius: 8px;
  box-shadow: 0 8px 24px rgba(0,0,0,.12); width: 320px; max-height: 420px;
  overflow-y: auto; padding: 8px 0; display: none;
}
.sent-multi-dropdown.show { display: block; }

.sent-multi-actions {
  display: flex; gap: 6px; padding: 0 12px 8px;
  border-bottom: 1px solid #f1f5f9; margin-bottom: 4px;
}
.sent-multi-act-btn {
  font-size: 11px; color: #3370ff; cursor: pointer; padding: 2px 6px;
  border-radius: 4px; background: none; border: none;
}
.sent-multi-act-btn:hover { background: #eff6ff; }

.sent-multi-group {
  padding: 0 12px;
}
.sent-multi-group-header {
  display: flex; align-items: center; gap: 8px; padding: 6px 0;
  cursor: pointer; font-size: 12px; border-bottom: 1px solid #f8fafc;
}
.sent-multi-group-name {
  font-weight: 600; color: #334155; flex: 1;
}
.sent-multi-group-arrow {
  font-size: 9px; color: #94a3b8; transition: transform .2s;
}
.sent-multi-group.collapsed .sent-multi-group-arrow { transform: rotate(-90deg); }
.sent-multi-group.collapsed .sent-multi-sub-list { display: none; }
.sent-multi-sub-list {
  padding: 2px 0 4px 24px;
}
.sent-multi-sub-item {
  display: flex; align-items: center; gap: 6px; padding: 4px 0;
  font-size: 12px; color: #64748b; cursor: pointer;
}
.sent-multi-sub-item:hover { color: #334155; }
.sent-multi-cb {
  width: 14px; height: 14px; border: 1.5px solid #cbd5e1; border-radius: 3px;
  flex-shrink: 0; display: flex; align-items: center; justify-content: center;
  transition: .15s;
}
.sent-multi-cb.checked {
  background: #3370ff; border-color: #3370ff;
}
.sent-multi-cb.checked:after {
  content: '✓'; color: #fff; font-size: 9px; font-weight: 700;
}

/* 医疗词库4宫格 */
.sent-dict-grid {
  display: grid; grid-template-columns: repeat(4, 1fr); gap: 12px;
}
.sent-dict-item {
  border-radius: 8px; padding: 14px;
}
.sent-dict-item-title {
  font-size: 11px; font-weight: 600; margin-bottom: 8px;
}
.sent-dict-item-words {
  font-size: 12px; line-height: 1.8; color: #64748b;
}

/* 响应式 */
@media (max-width: 1200px) { .sent-kpi-grid { grid-template-columns: repeat(3, 1fr); } .sent-emotion-grid { grid-template-columns: repeat(3, 1fr); } }
@media (max-width: 768px) { .sent-kpi-grid { grid-template-columns: repeat(2, 1fr); } .sent-emotion-grid { grid-template-columns: repeat(2, 1fr); } .sent-chart-row { grid-template-columns: 1fr; } .sent-ai-card { flex-direction: column; } .sent-ai-left { border-right: none; padding-right: 0; border-bottom: 1px solid rgba(139,92,246,.15); padding-bottom: 16px; } .sent-dict-grid { grid-template-columns: repeat(2, 1fr); } }

/* ===================== 通用卡片 ===================== */
.card {
  background: var(--bg-white);
  border-radius: var(--radius);
  padding: 24px;
  box-shadow: var(--shadow-sm);
  margin-bottom: 16px;
  border: 1px solid var(--border-card);
  transition: box-shadow var(--transition);
}
.card:hover { box-shadow: var(--shadow); }
.card-title {
  font-size: var(--font-size-md);
  font-weight: 600;
  margin-bottom: 16px;
  display: flex;
  align-items: center;
  gap: 8px;
  color: var(--text-primary);
}

/* 旧版 card 头/体 */
.card-header {
  padding: 14px 20px;
  border-bottom: 1px solid var(--border-light);
  display: flex;
  align-items: center;
  justify-content: space-between;
  background: var(--bg-card-header);
  border-radius: var(--radius) var(--radius) 0 0;
}
.card-header h3 { font-size: var(--font-size-base); font-weight: 600; color: var(--text-primary); }
.card-body { padding: 16px 20px; }

/* ===================== 表格 - 飞书风格 ===================== */
.table-wrap {
  overflow-x: auto;
  border-radius: var(--radius);
  border: 1px solid var(--border-card);
  box-shadow: var(--shadow-sm);
}
table { width: 100%; border-collapse: collapse; font-size: var(--font-size-base); }
th {
  background: var(--bg-card-header);
  color: var(--text-primary);
  padding: 10px 16px;
  text-align: left;
  font-weight: 600;
  border-bottom: 1px solid var(--border-card);
  white-space: nowrap;
  font-size: var(--font-size-sm);
  height: 44px;
}
td {
  padding: 12px 16px;
  border-bottom: 1px solid var(--border-light);
  vertical-align: middle;
  color: var(--text-primary);
  height: 48px;
}
tr:last-child td { border-bottom: none; }
tr:hover td { background: var(--bg-card-header); transition: background var(--transition-fast); }

/* ===================== 徽章 - 飞书Badge风格 ===================== */
.badge {
  display: inline-flex; align-items: center; gap: 2px;
  padding: 2px 8px; border-radius: 2px;
  font-size: var(--font-size-xs); font-weight: 400; line-height: 20px;
}
.badge-danger { background: var(--danger-light-solid); color: var(--danger); }
.badge-warning { background: var(--warning-light-solid); color: var(--warning-dark); }
.badge-success { background: var(--success-light-solid); color: var(--success-dark); }
.badge-primary { background: var(--primary-light-solid); color: var(--primary); }
.badge-gray { background: var(--bg-body); color: var(--text-tertiary); }

/* FS徽章别名 */
.fs-badge { display: inline-flex; align-items: center; padding: 2px 8px; border-radius: 2px; font-size: var(--font-size-xs); font-weight: 400; line-height: 20px; }
.fs-badge-blue { background: var(--primary-light-solid); color: var(--primary); }
.fs-badge-red { background: var(--danger-light-solid); color: var(--danger); }
.fs-badge-orange { background: var(--warning-light-solid); color: var(--warning-dark); }
.fs-badge-green { background: var(--success-light-solid); color: var(--success-dark); }
.fs-badge-gray { background: var(--bg-body); color: var(--text-tertiary); }
.fs-badge-xs { font-size: 10px; padding: 1px 6px; }

/* ===================== 按钮 - 飞书风格 ===================== */
.btn-primary {
  display: inline-flex; align-items: center; justify-content: center; gap: 6px;
  background: var(--primary); color: #fff;
  padding: 8px 20px; border-radius: var(--radius-sm);
  font-size: var(--font-size-base); font-weight: 500;
  transition: all var(--transition);
  letter-spacing: 0.2px; height: 36px; line-height: 1;
  white-space: nowrap;
}
.btn-primary:hover {
  background: var(--primary-dark);
  box-shadow: var(--shadow-button);
}
.btn-primary:active {
  background: var(--primary-active);
  transform: scale(0.98);
}
.btn-primary.full-width { width: 100%; padding: 8px; justify-content: center; }

.btn-secondary {
  display: inline-flex; align-items: center; justify-content: center; gap: 6px;
  background: var(--bg-white); color: var(--text-primary);
  padding: 8px 20px; border-radius: var(--radius-sm);
  font-size: var(--font-size-base); font-weight: 400;
  border: 1px solid var(--border-control);
  transition: all var(--transition); height: 36px; line-height: 1;
  white-space: nowrap;
}
.btn-secondary:hover {
  border-color: var(--primary); color: var(--primary);
  background: var(--primary-light);
}

.btn-danger {
  display: inline-flex; align-items: center; justify-content: center; gap: 6px;
  background: var(--danger); color: #fff;
  padding: 6px 16px; border-radius: var(--radius-sm);
  font-size: var(--font-size-sm); font-weight: 500;
  transition: all var(--transition); height: 32px; line-height: 1;
  white-space: nowrap;
}
.btn-danger:hover { background: var(--danger-dark); }
.btn-sm { padding: 4px 12px; font-size: var(--font-size-sm); height: 30px; }
.btn-xs { padding: 2px 8px; font-size: var(--font-size-xs); height: 24px; }

.btn-outline {
  display: inline-flex; align-items: center; justify-content: center; gap: 6px;
  background: transparent; border: 1px solid var(--border-control);
  color: var(--text-primary); padding: 6px 16px;
  border-radius: var(--radius-sm); font-size: var(--font-size-sm);
  font-weight: 400; transition: all var(--transition);
  height: 32px; line-height: 1; white-space: nowrap;
}
.btn-outline:hover {
  border-color: var(--primary); color: var(--primary);
  background: var(--primary-light);
}

.btn-text {
  display: inline-flex; align-items: center; gap: 4px;
  background: transparent; color: var(--primary);
  padding: 4px 8px; border-radius: var(--radius-xs);
  font-size: var(--font-size-sm); font-weight: 400;
  transition: all var(--transition-fast); border: none;
}
.btn-text:hover { background: var(--primary-light); }

/* FS按钮别名 */
.fs-btn {
  display: inline-flex; align-items: center; justify-content: center; gap: 6px;
  padding: 8px 20px; border-radius: var(--radius-sm);
  font-size: var(--font-size-base); font-weight: 500;
  cursor: pointer; border: none;
  transition: all var(--transition);
  font-family: inherit; letter-spacing: 0.2px;
  height: 36px; line-height: 1; white-space: nowrap;
}
.fs-btn-primary { background: var(--primary); color: #fff; }
.fs-btn-primary:hover { background: var(--primary-dark); box-shadow: var(--shadow-button); }
.fs-btn-primary:active { background: var(--primary-active); transform: scale(0.98); }
.fs-btn-secondary {
  background: var(--bg-body); color: var(--text-primary);
  border: 1px solid var(--border-control); font-weight: 400;
}
.fs-btn-secondary:hover {
  background: var(--bg-hover); border-color: var(--primary); color: var(--primary);
}
.fs-btn-danger { background: var(--danger); color: #fff; }
.fs-btn-danger:hover { background: var(--danger-dark); }
.fs-btn-sm { padding: 4px 12px; font-size: var(--font-size-sm); border-radius: var(--radius-sm); height: 30px; }
.fs-btn-xs { padding: 2px 8px; font-size: var(--font-size-xs); border-radius: var(--radius-xs); height: 24px; }

/* ===================== 搜索/过滤栏 ===================== */
.filter-bar {
  display: flex; flex-wrap: wrap; gap: 8px;
  margin-bottom: 16px; align-items: center;
}
.filter-bar input, .filter-bar select {
  padding: 7px 12px; border: 1px solid var(--border-control);
  border-radius: var(--radius-sm); font-size: var(--font-size-sm);
  background: var(--bg-white); color: var(--text-primary);
  transition: all var(--transition-fast); height: 36px;
}
.filter-bar input:focus, .filter-bar select:focus {
  border-color: var(--primary);
  box-shadow: 0 0 0 2px var(--primary-light);
}
.filter-bar input { min-width: 180px; flex: 1; }

/* ===================== 分页 - 飞书风格 ===================== */
.pagination {
  display: flex; gap: 4px; justify-content: center;
  margin-top: 20px; flex-wrap: wrap; align-items: center;
}
.pagination button, .page-btn {
  padding: 5px 12px;
  border: 1px solid var(--border-control);
  border-radius: var(--radius-xs);
  font-size: var(--font-size-sm);
  background: var(--bg-white);
  color: var(--text-primary);
  cursor: pointer;
  transition: all var(--transition-fast);
  height: 32px; min-width: 32px;
  display: inline-flex; align-items: center; justify-content: center;
}
.pagination button.active, .pagination button:hover:not(:disabled),
.page-btn.active, .page-btn:hover:not(:disabled) {
  background: var(--primary); color: #fff;
  border-color: var(--primary);
}
.page-btn:disabled { opacity: 0.4; cursor: not-allowed; }

/* ===================== 弹窗 - 飞书Modal风格 ===================== */
.modal-overlay {
  position: fixed; inset: 0;
  background: rgba(0, 0, 0, 0.5);
  z-index: 1000;
  display: flex; align-items: flex-start; justify-content: center;
  padding: 32px;
  overflow-y: auto;
  animation: modalFadeIn 0.2s ease;
}
.modal {
  background: var(--bg-white);
  border-radius: var(--radius-lg);
  width: 100%;
  max-height: 85vh;
  overflow: hidden;
  box-shadow: var(--shadow-modal);
  display: flex; flex-direction: column;
}
.modal-sm { max-width: 440px; }
.modal-md { max-width: 640px; }
.modal-lg { max-width: 860px; }
.modal-xl { max-width: 1080px; }

/* 弹窗头部 */
.modal-header {
  padding: 20px 24px;
  border-bottom: 1px solid var(--border-card);
  display: flex; align-items: center; justify-content: space-between;
  flex-shrink: 0;
  background: var(--bg-white);
}
.modal-header h3 {
  font-size: var(--font-size-md); font-weight: 600; color: var(--text-primary);
  line-height: 24px;
}
.modal-close {
  background: none; border: none;
  width: 32px; height: 32px;
  display: flex; align-items: center; justify-content: center;
  border-radius: var(--radius-sm);
  color: var(--text-tertiary); font-size: 18px;
  cursor: pointer; transition: all var(--transition-fast);
  flex-shrink: 0;
}
.modal-close:hover {
  background: var(--bg-hover);
  color: var(--text-primary);
}

/* 弹窗内容 */
.modal-body {
  padding: 24px;
  overflow-y: auto; flex: 1;
  min-height: 0;
  background: var(--bg-white);
}

/* 弹窗底部 */
.modal-footer {
  padding: 14px 24px;
  border-top: 1px solid var(--border-card);
  display: flex; justify-content: flex-end; gap: 8px;
  flex-shrink: 0;
  background: var(--bg-white);
}

/* 个人资料只读详情 */
.profile-detail-list {
  margin: -4px 0;
}
.profile-detail-row {
  display: grid;
  grid-template-columns: 104px minmax(0, 1fr);
  gap: 24px;
  align-items: start;
  padding: 17px 4px;
  border-bottom: 1px solid var(--border-light);
}
.profile-detail-row:last-child {
  border-bottom: 0;
}
.profile-detail-row dt {
  color: var(--text-secondary);
  font-size: var(--font-size-sm);
  line-height: 22px;
}
.profile-detail-row dd {
  min-width: 0;
  margin: 0;
  color: var(--text-primary);
  font-size: var(--font-size-base);
  font-weight: 500;
  line-height: 22px;
  overflow-wrap: anywhere;
}
.profile-role-tag {
  display: inline-flex;
  align-items: center;
  min-height: 22px;
  padding: 1px 9px;
  border-radius: 999px;
  background: var(--primary-light-solid);
  color: var(--primary);
  font-size: var(--font-size-sm);
  font-weight: 500;
}
@media (max-width: 520px) {
  .profile-detail-row {
    grid-template-columns: 80px minmax(0, 1fr);
    gap: 16px;
  }
}

/* FS弹窗样式 */
.fs-modal-overlay {
  position: fixed; inset: 0;
  background: rgba(0, 0, 0, 0.5);
  z-index: 1000;
  display: flex; align-items: flex-start; justify-content: center;
  padding: 32px;
  overflow-y: auto;
  animation: modalFadeIn 0.2s ease;
}
.fs-modal {
  background: var(--bg-white);
  border-radius: var(--radius-lg);
  width: 100%;
  max-height: 85vh;
  overflow: hidden;
  box-shadow: var(--shadow-modal);
  display: flex; flex-direction: column;
}
.fs-modal-header {
  padding: 20px 24px;
  border-bottom: 1px solid var(--border-card);
  display: flex; align-items: center; justify-content: space-between;
  flex-shrink: 0;
}
.fs-modal-header h3, .fs-modal-header h4 {
  font-size: var(--font-size-md); font-weight: 600; color: var(--text-primary);
}
.fs-modal-body { padding: 24px; overflow-y: auto; flex: 1; min-height: 0; }
.fs-modal-footer {
  padding: 14px 24px;
  border-top: 1px solid var(--border-card);
  display: flex; justify-content: flex-end; gap: 8px;
  flex-shrink: 0;
}

/* FS弹窗关闭按钮 */
.fs-modal-close {
  background: none; border: none;
  width: 32px; height: 32px;
  display: flex; align-items: center; justify-content: center;
  border-radius: var(--radius-sm);
  color: var(--text-tertiary); font-size: 18px;
  cursor: pointer; transition: all var(--transition-fast);
  flex-shrink: 0;
}
.fs-modal-close:hover {
  background: var(--bg-hover);
  color: var(--text-primary);
}

/* ===================== Toast 通知 ===================== */
.toast-container, #toast-container {
  position: fixed; top: 20px; right: 20px;
  z-index: 9999;
  display: flex; flex-direction: column; gap: 8px;
  pointer-events: none;
}
.toast {
  padding: 10px 20px; border-radius: var(--radius-sm);
  font-size: var(--font-size-sm); font-weight: 400;
  color: #fff;
  box-shadow: var(--shadow-lg);
  animation: toastSlideIn 0.25s ease;
  max-width: 360px; pointer-events: auto;
}
.toast-success, .toast.success { background: var(--success); }
.toast-error, .toast.error { background: var(--danger); }
.toast-warning, .toast.warning { background: var(--warning); }
.toast-info, .toast.info { background: var(--primary); }

/* ===================== 标签页 - 飞书风格 ===================== */
.tabs {
  display: flex; gap: 0;
  border-bottom: 1px solid var(--border-card);
  margin-bottom: 20px;
}
.tab-btn, .fs-tab {
  padding: 10px 16px;
  font-size: var(--font-size-sm);
  font-weight: 400;
  color: var(--text-secondary);
  border-bottom: 2px solid transparent;
  margin-bottom: -1px;
  background: none;
  cursor: pointer;
  transition: all var(--transition-fast);
}
.tab-btn.active, .fs-tab.active {
  color: var(--primary);
  border-bottom-color: var(--primary);
  font-weight: 500;
}
.tab-btn:hover, .fs-tab:hover { color: var(--primary); }

/* ===================== 标签列表/芯片 ===================== */
.tag, .tag-list {
  display: inline-flex; flex-wrap: wrap; gap: 4px;
}
.tag {
  background: var(--primary-light-solid); color: var(--primary);
  padding: 2px 8px; border-radius: 2px;
  font-size: var(--font-size-xs); font-weight: 400;
}
.tags-wrap { display: flex; gap: 4px; flex-wrap: wrap; }

/* ===================== 表单 - 飞书风格 ===================== */
.form-group { margin-bottom: 16px; }
.form-group label {
  display: block;
  font-size: var(--font-size-sm);
  font-weight: 400;
  color: var(--text-secondary);
  margin-bottom: 6px;
}
.form-group input, .form-group select, .form-group textarea {
  width: 100%; padding: 7px 12px;
  border: 1px solid var(--border-control);
  border-radius: var(--radius-sm);
  font-size: var(--font-size-base);
  background: var(--bg-white);
  color: var(--text-primary);
  transition: all var(--transition-fast);
}
.form-group input:focus, .form-group select:focus, .form-group textarea:focus {
  border-color: var(--primary);
  box-shadow: 0 0 0 2px var(--primary-light);
}
.form-group input::placeholder { color: var(--text-tertiary); }
.form-group textarea { min-height: 80px; resize: vertical; }

/* 表单行布局 */
.form-row { display: grid; grid-template-columns: 1fr 1fr; gap: 16px; }

/* FS输入组件别名 */
.fs-input {
  width: 100%; padding: 7px 12px;
  border: 1px solid var(--border-control);
  border-radius: var(--radius-sm);
  font-size: var(--font-size-base);
  background: var(--bg-white);
  color: var(--text-primary);
  transition: all var(--transition-fast);
  font-family: inherit; outline: none;
}
.fs-input:focus {
  border-color: var(--primary);
  box-shadow: 0 0 0 2px var(--primary-light);
}
.fs-input::placeholder { color: var(--text-tertiary); }
.fs-select {
  width: 100%; padding: 7px 12px;
  border: 1px solid var(--border-control);
  border-radius: var(--radius-sm);
  font-size: var(--font-size-sm);
  background: var(--bg-white);
  color: var(--text-primary);
  cursor: pointer;
  font-family: inherit; outline: none;
}
.fs-select:focus { border-color: var(--primary); box-shadow: 0 0 0 2px var(--primary-light); }
.evidence-picker { position: relative; }
.evidence-picker > .fs-input { padding-right: 34px; }
.evidence-picker::after {
  content: "⌄"; position: absolute; right: 12px; top: 8px;
  color: var(--text-tertiary); font-size: 14px; pointer-events: none;
}
.evidence-picker .search-select-dropdown {
  position: absolute; z-index: 1200; top: calc(100% + 4px); left: 0; right: 0;
  max-height: 220px; overflow-y: auto; padding: 4px 0;
  background: var(--bg-white); border: 1px solid var(--border-control);
  border-radius: var(--radius-sm); box-shadow: 0 6px 18px rgba(31,35,41,.14);
}
.evidence-picker .search-select-item,
.evidence-picker .search-select-empty {
  min-height: 34px; padding: 8px 12px; font-size: var(--font-size-sm);
  line-height: 18px; color: var(--text-primary);
}
.evidence-picker .search-select-item { cursor: pointer; }
.evidence-picker .search-select-item:hover { background: var(--primary-light); color: var(--primary); }
.evidence-picker .search-select-empty { color: var(--text-tertiary); }
.fs-input.is-invalid {
  border-color: #f54a45; box-shadow: 0 0 0 2px rgba(245,74,69,.12);
}
.evidence-field-error {
  display: none; margin-top: 5px; color: #d83931; font-size: 12px; line-height: 18px;
}
.evidence-field-error.visible { display: block; }
.fs-label {
  display: block;
  font-size: var(--font-size-sm);
  font-weight: 400;
  color: var(--text-secondary);
  margin-bottom: 6px;
}

/* 表单分段 */
.form-section {
  margin-bottom: 16px; border: 1px solid var(--border-card);
  border-radius: var(--radius-sm); overflow: hidden;
}
.form-section-title {
  font-size: var(--font-size-sm);
  font-weight: 600;
  padding: 10px 14px;
  background: var(--bg-card-header);
  color: var(--text-primary);
  border-bottom: 1px solid var(--border-card);
}

/* ===================== 图表面板 ===================== */
.chart-grid { display: grid; grid-template-columns: 1fr 1fr; gap: 16px; margin-bottom: 24px; }
.chart-card {
  background: var(--bg-white);
  border-radius: var(--radius);
  padding: 20px;
  box-shadow: var(--shadow-sm);
  border: 1px solid var(--border-card);
}
.chart-card h3, .chart-card h4 {
  font-size: var(--font-size-base);
  font-weight: 600;
  margin-bottom: 14px;
  color: var(--text-primary);
}
.chart-canvas-wrap { height: 220px; position: relative; }
@media (max-width: 768px) { .chart-grid { grid-template-columns: 1fr; } }

/* ===================== 大屏 (暗色仪表盘) ===================== */
.big-screen {
  padding: 20px;
  background: var(--n900);
  height: calc(100vh - 96px);
  overflow-y: auto;
  color: #C9CDD4;
}
.big-screen::-webkit-scrollbar { width: 6px; }
.big-screen::-webkit-scrollbar-track { background: #2B2F36; }
.big-screen::-webkit-scrollbar-thumb { background: var(--primary); border-radius: 3px; }
.bs-stats-grid {
  display: grid;
  grid-template-columns: repeat(8,1fr);
  gap: 10px; margin-bottom: 14px;
}
.bs-stat-card {
  border-radius: var(--radius-sm);
  padding: 12px 8px; text-align: center;
  position: relative; overflow: hidden;
}
.bs-stat-card.bs-blue { background: linear-gradient(135deg, #0A2DA6, #1456F0); color: #fff; }
.bs-stat-card.bs-red { background: linear-gradient(135deg, #CB2634, #F53F3F); color: #fff; }
.bs-stat-card.bs-orange { background: linear-gradient(135deg, #D25F00, #FF7D00); color: #fff; }
.bs-stat-card.bs-green { background: linear-gradient(135deg, #009A29, #00B42C); color: #fff; }
.bs-stat-card.bs-purple { background: linear-gradient(135deg, #531DAB, #722ED1); color: #fff; }
.bs-stat-card.bs-teal { background: linear-gradient(135deg, #008585, #14C9C9); color: #fff; }
.bs-stat-card.bs-indigo { background: linear-gradient(135deg, #1D39C4, #597EF7); color: #fff; }
.bs-stat-card.bs-gray { background: linear-gradient(135deg, #363940, #5A5E66); color: #fff; }
.bs-stat-icon { font-size: 18px; margin-bottom: 4px; display: inline-flex; align-items: center; justify-content: center; }
.bs-stat-icon .fi-icon, .bs-stat-icon .fi-replaced { color: rgba(255,255,255,0.9); }
.bs-stat-label { font-size: var(--font-size-xs); opacity: 0.75; }
.bs-stat-value { font-size: 22px; font-weight: 700; }
.bs-stat-sub { font-size: 10px; opacity: 0.65; margin-top: 3px; }
.bs-body { display: grid; grid-template-columns: 1fr 300px; gap: 14px; margin-bottom: 14px; }
.bs-map-panel { background: #2B2F36; border-radius: var(--radius-sm); padding: 14px; }
.bs-map-legend { display: flex; gap: 14px; padding: 8px; color: var(--text-tertiary); font-size: var(--font-size-xs); margin-top: 6px; }
.bs-legend-i { display: inline-block; width: 10px; height: 10px; border-radius: 2px; margin-right: 3px; vertical-align: middle; }
.bs-right-panel { display: flex; flex-direction: column; gap: 14px; }
.bs-chart-card { background: #2B2F36; border-radius: var(--radius-sm); padding: 12px; }
.bs-chart-card h4 { color: #C9CDD4; font-size: var(--font-size-sm); margin: 0 0 8px 0; }
.bs-bottom { display: grid; grid-template-columns: 1fr 1fr; gap: 14px; }
.bs-province-list, .bs-recent-reports { background: #2B2F36; border-radius: var(--radius-sm); padding: 14px; }
.bs-province-list h4, .bs-recent-reports h4 { color: #C9CDD4; font-size: var(--font-size-sm); margin: 0 0 10px 0; }
.bs-province-row { display: flex; justify-content: space-between; padding: 5px 0; border-bottom: 1px solid #363940; color: var(--text-tertiary); font-size: var(--font-size-xs); cursor: pointer; }
.bs-province-row:hover { color: var(--primary); }
.bs-recent-item { padding: 7px 0; border-bottom: 1px solid #363940; font-size: var(--font-size-xs); color: var(--text-tertiary); display: flex; justify-content: space-between; }

/* ===================== 违规报告卡片 ===================== */
.report-card {
  background: var(--bg-white);
  border-radius: var(--radius);
  padding: 16px 20px;
  box-shadow: var(--shadow-sm);
  margin-bottom: 10px;
  border: 1px solid var(--border-card);
  border-left: 3px solid var(--primary);
  transition: all var(--transition);
  cursor: pointer;
}
.report-card:hover {
  box-shadow: var(--shadow);
  border-left-color: var(--primary-dark);
  transform: translateX(2px);
}
.report-card.danger { border-left-color: var(--danger); }
.report-card.warning { border-left-color: var(--warning); }
.report-card .report-title {
  font-size: var(--font-size-base);
  font-weight: 600;
  margin-bottom: 6px;
  color: var(--text-primary);
}
.report-card .report-meta {
  font-size: var(--font-size-sm);
  color: var(--text-secondary);
  display: flex; gap: 12px; flex-wrap: wrap;
}

/* 风险等级徽章 */
.risk-badge-重大 { background: var(--danger-light-solid); color: var(--danger); padding: 2px 8px; border-radius: 2px; font-size: var(--font-size-xs); font-weight: 400; }
.risk-badge-较大 { background: var(--warning-light-solid); color: var(--warning-dark); padding: 2px 8px; border-radius: 2px; font-size: var(--font-size-xs); font-weight: 400; }
.risk-badge-一般 { background: var(--success-light-solid); color: var(--success-dark); padding: 2px 8px; border-radius: 2px; font-size: var(--font-size-xs); font-weight: 400; }
.risk-badge-轻微 { background: var(--primary-light-solid); color: var(--primary); padding: 2px 8px; border-radius: 2px; font-size: var(--font-size-xs); font-weight: 400; }

/* ===================== 特征库多模态标签 ===================== */
.media-tabs { display: flex; gap: 4px; margin-bottom: 10px; flex-wrap: wrap; }
.media-tab {
  padding: 5px 12px; border-radius: var(--radius-xs);
  font-size: var(--font-size-sm); font-weight: 400;
  background: var(--bg-body); color: var(--text-secondary);
  cursor: pointer; border: 1px solid transparent;
  transition: all var(--transition-fast);
}
.media-tab.active {
  background: var(--primary-light-solid); color: var(--primary);
  border-color: var(--primary); font-weight: 500;
}
.media-tab:hover:not(.active) { background: var(--bg-hover); }
.feature-grid { display: grid; grid-template-columns: repeat(auto-fill, minmax(320px, 1fr)); gap: 16px; }
.feature-card {
  background: var(--bg-white); border-radius: var(--radius);
  padding: 16px; box-shadow: var(--shadow-sm);
  border: 1px solid var(--border-card);
  transition: all var(--transition); cursor: pointer;
}
.feature-card:hover { box-shadow: var(--shadow); transform: translateY(-2px); }
.feature-card.risk-重大 { border-top: 3px solid var(--danger); }
.feature-card.risk-较大 { border-top: 3px solid var(--warning); }
.feature-card.risk-一般 { border-top: 3px solid var(--primary); }
.feature-card.risk-轻微 { border-top: 3px solid var(--success); }
.feature-card-header { display: flex; align-items: flex-start; justify-content: space-between; margin-bottom: 10px; }
.feature-card-title { font-weight: 600; font-size: var(--font-size-base); color: var(--text-primary); }
.feature-card-meta { font-size: var(--font-size-sm); color: var(--text-secondary); margin-bottom: 8px; display: flex; gap: 8px; flex-wrap: wrap; }
.feature-card-text { font-size: var(--font-size-sm); color: var(--text-secondary); line-height: 1.5; margin-bottom: 10px; display: -webkit-box; -webkit-line-clamp: 2; -webkit-box-orient: vertical; overflow: hidden; }
.feature-card-footer { display: flex; gap: 4px; flex-wrap: wrap; margin-top: 8px; }

/* ===================== 上传区域 ===================== */
.file-upload-area {
  border: 1px dashed var(--border-control);
  border-radius: var(--radius);
  padding: 28px 20px;
  text-align: center;
  cursor: pointer;
  transition: all var(--transition);
  background: var(--bg-body);
  position: relative;
}
.file-upload-area:hover, .file-upload-area.dragover {
  border-color: var(--primary);
  background: var(--primary-light);
}
.file-upload-area .upload-icon { font-size: 32px; margin-bottom: 8px; opacity: 0.4; }
.file-upload-area .upload-text { font-size: var(--font-size-base); color: var(--text-secondary); }
.file-upload-area .upload-hint { font-size: var(--font-size-sm); color: var(--text-tertiary); margin-top: 4px; }
.file-upload-area input[type="file"] { position: absolute; inset: 0; opacity: 0; cursor: pointer; }
.file-preview-list { display: flex; flex-wrap: wrap; gap: 6px; margin-top: 8px; }
.file-preview-item { display: flex; align-items: center; gap: 6px; background: var(--bg-body); padding: 5px 10px; border-radius: var(--radius-xs); font-size: var(--font-size-sm); color: var(--text-primary); }
.file-preview-item .remove-btn { background: none; color: var(--danger); cursor: pointer; font-size: 12px; padding: 0 2px; line-height: 1; }

/* ===================== 证据卡片 ===================== */
.evidence-card {
  background: var(--bg-white); border-radius: var(--radius);
  padding: 16px 20px; box-shadow: var(--shadow-sm);
  margin-bottom: 10px;
  display: flex; align-items: center; gap: 14px;
  transition: all var(--transition);
  cursor: pointer; border: 1px solid var(--border-card);
}
.evidence-card:hover {
  box-shadow: var(--shadow);
  border-color: var(--primary);
}
.evidence-icon {
  width: 44px; height: 44px; border-radius: var(--radius-sm);
  display: flex; align-items: center; justify-content: center;
  font-size: 20px; flex-shrink: 0;
}
.evidence-icon.video { background: var(--danger-light); color: var(--danger); }
.evidence-icon.image { background: var(--primary-light); color: var(--primary); }
.evidence-icon.pdf { background: var(--warning-light); color: var(--warning-dark); }
.evidence-icon.article { background: var(--success-light); color: var(--success-dark); }
.evidence-icon.other { background: var(--bg-body); color: var(--text-tertiary); }
.evidence-info { flex: 1; min-width: 0; }
.evidence-info .ev-title { font-size: var(--font-size-base); font-weight: 500; margin-bottom: 4px; color: var(--text-primary); }
.evidence-info .ev-meta { font-size: var(--font-size-sm); color: var(--text-secondary); display: flex; gap: 8px; flex-wrap: wrap; }
.evidence-actions { display: flex; gap: 6px; flex-shrink: 0; }

/* ===================== 配置面板 ===================== */
.config-panel { display: flex; gap: 14px; min-height: 400px; }
.config-sidebar { width: 190px; min-width: 190px; background: var(--bg-body); border-radius: var(--radius-sm); padding: 4px; border: 1px solid var(--border-card); }
.config-main { flex: 1; background: var(--bg-white); border-radius: var(--radius-sm); padding: 16px; border: 1px solid var(--border-card); }
.config-cat-item { padding: 8px 12px; border-radius: var(--radius-xs); font-size: var(--font-size-sm); cursor: pointer; transition: all var(--transition-fast); margin: 1px 0; color: var(--text-primary); }
.config-cat-item:hover { background: var(--bg-hover); }
.config-cat-item.active { background: var(--primary); color: #fff; font-weight: 500; }
.subtype-row { display: flex; align-items: center; justify-content: space-between; padding: 8px 12px; border-bottom: 1px solid var(--border-light); font-size: var(--font-size-sm); color: var(--text-primary); }
.subtype-row:last-child { border-bottom: none; }
.subtype-actions { display: flex; gap: 6px; }

/* ===================== 其他组件 ===================== */
/* 加载 */
.loading, .fs-loading { text-align: center; padding: 48px; color: var(--text-tertiary); font-size: var(--font-size-sm); }

/* 空状态 */
.empty-state, .fs-empty {
  text-align: center; padding: 64px 20px;
  color: var(--text-tertiary); font-size: var(--font-size-base);
}
.empty-state .empty-icon, .fs-empty-icon { font-size: 48px; margin-bottom: 12px; opacity: 0.3; }
.empty-state small { display: block; margin-top: 6px; font-size: var(--font-size-sm); color: var(--text-disabled); }

/* 头像 */
.avatar {
  width: 32px; height: 32px; border-radius: 50%;
  background: var(--primary); color: #fff;
  display: flex; align-items: center; justify-content: center;
  font-size: var(--font-size-sm); font-weight: 600; flex-shrink: 0;
}

/* 建议面板 */
.suggestion-panel { background: var(--primary-light-solid); border: 1px solid var(--border-card); border-radius: var(--radius); padding: 14px 18px; margin-bottom: 16px; }
.suggestion-panel .sug-title { font-size: var(--font-size-sm); font-weight: 600; color: var(--text-primary); margin-bottom: 8px; }
.suggestion-item { display: flex; align-items: center; justify-content: space-between; padding: 8px 10px; background: var(--bg-white); border-radius: var(--radius-xs); margin-bottom: 4px; font-size: var(--font-size-sm); color: var(--text-primary); border: 1px solid var(--border-light); }
.suggestion-item:last-child { margin-bottom: 0; }
.sug-badge { padding: 2px 8px; border-radius: 2px; font-size: var(--font-size-xs); font-weight: 400; }
.sug-badge.accept { background: var(--primary-light-solid); color: var(--primary); cursor: pointer; border: 1px solid transparent; transition: all var(--transition-fast); }
.sug-badge.accept:hover { background: var(--primary); color: #fff; }

/* 标签编辑器 */
.tag-editor { display: flex; flex-wrap: wrap; gap: 6px; padding: 8px 12px; border: 1px solid var(--border-control); border-radius: var(--radius-sm); min-height: 40px; align-items: center; background: var(--bg-white); transition: border-color var(--transition); }
.tag-editor:focus-within { border-color: var(--primary); box-shadow: 0 0 0 2px var(--primary-light); }
.tag-editor .tag-item { display: flex; align-items: center; gap: 4px; padding: 2px 8px; background: var(--primary-light-solid); border-radius: 2px; font-size: var(--font-size-xs); color: var(--primary); font-weight: 400; }
.tag-editor .tag-item .tag-remove { background: none; color: var(--primary); cursor: pointer; font-size: 12px; padding: 0 2px; line-height: 1; }
.tag-editor input.tag-input { flex: 1; min-width: 100px; border: none; padding: 4px; font-size: var(--font-size-sm); outline: none; background: transparent; color: var(--text-primary); }

/* 组织树 */
.org-tree { border: 1px solid var(--border-card); border-radius: var(--radius); overflow: hidden; background: var(--bg-white); box-shadow: var(--shadow-sm); }
.org-node { border-bottom: 1px solid var(--border-light); }
.org-node:last-child { border-bottom: none; }
.org-node-header { display: flex; align-items: center; gap: 8px; padding: 10px 12px; cursor: pointer; transition: background var(--transition-fast); }
.org-node-header:hover { background: var(--bg-hover); }
.org-inactive .org-node-header { opacity: 0.5; }
.org-expand-icon { font-size: 10px; width: 16px; color: var(--text-tertiary); flex-shrink: 0; text-align: center; }
.org-icon { font-size: 15px; flex-shrink: 0; }
.org-info { flex: 1; min-width: 0; }
.org-name { font-size: var(--font-size-sm); font-weight: 500; display: flex; align-items: center; gap: 6px; color: var(--text-primary); }
.org-meta { font-size: var(--font-size-xs); color: var(--text-tertiary); margin-top: 2px; }
.org-children { border-left: 1px solid var(--border-card); margin-left: 16px; }
.org-detail-grid { display: grid; grid-template-columns: 1fr 1fr; gap: 12px; }

/* 多模态 */
.feature-media-grid { display: grid; grid-template-columns: repeat(auto-fit, minmax(160px, 1fr)); gap: 10px; margin-top: 10px; }
.feature-media-card { background: var(--bg-body); border-radius: var(--radius-sm); padding: 12px; border: 1px solid var(--border-light); }
.feature-media-card .media-type-icon { font-size: 20px; margin-bottom: 4px; }
.feature-media-card .media-type-label { font-size: 10px; font-weight: 500; color: var(--text-secondary); margin-bottom: 4px; }
.feature-media-card .media-content { font-size: var(--font-size-sm); color: var(--text-primary); line-height: 1.5; }
.feature-media-card.has-content { border-color: var(--primary); background: var(--primary-light); }

/* 情感标签 */
.emotion-tags { display: flex; flex-wrap: wrap; gap: 6px; }
.emotion-tag { padding: 4px 10px; border-radius: var(--radius-xs); font-size: var(--font-size-sm); background: var(--warning-light-solid); color: var(--warning-dark); cursor: pointer; border: 1px solid #FFD591; transition: all var(--transition-fast); }
.emotion-tag.selected { background: var(--warning); color: #fff; border-color: var(--warning); }
.emotion-tag.custom { border-style: dashed; border-color: #1456F0; background: #eff6ff; color: #1456F0; }
.emotion-tag.custom.selected { background: #1456F0; color: #fff; border-color: #1456F0; border-style: solid; }

/* 复选框网格 */
.checkbox-grid { display: grid; grid-template-columns: repeat(auto-fill, minmax(150px, 1fr)); gap: 4px 14px; padding: 6px 0; }
.checkbox-label { display: inline-flex; align-items: center; gap: 6px; font-size: var(--font-size-sm); cursor: pointer; padding: 4px 6px; border-radius: var(--radius-xs); transition: all var(--transition-fast); white-space: nowrap; color: var(--text-primary); }
.checkbox-label:hover { background: var(--bg-hover); }
.checkbox-label input[type=checkbox] { accent-color: var(--primary); width: 14px; height: 14px; flex-shrink: 0; margin: 0; }

/* 子类型标签 */
.subtype-tags { display: flex; flex-wrap: wrap; gap: 4px; max-height: 160px; overflow-y: auto; padding: 4px 0; }
.subtype-tag { display: inline-flex; align-items: center; gap: 4px; padding: 4px 10px; border: 1px solid var(--border-control); border-radius: var(--radius-xs); font-size: var(--font-size-sm); cursor: pointer; transition: all var(--transition-fast); background: var(--bg-white); user-select: none; line-height: 1.4; color: var(--text-primary); }
.subtype-tag:hover { border-color: var(--primary); background: var(--primary-light); }
.subtype-tag.checked { border-color: var(--primary); background: var(--primary); color: #fff; }
.subtype-tag .tag-check { font-size: 10px; opacity: 0; transition: all var(--transition-fast); }
.subtype-tag.checked .tag-check { opacity: 1; }
.subtype-group-label { font-weight: 500; font-size: var(--font-size-xs); color: var(--text-secondary); padding: 4px 2px 0; margin-top: 2px; width: 100%; }
.checkbox-item { display: flex; align-items: center; gap: 6px; padding: 5px 8px; border-radius: var(--radius-xs); cursor: pointer; font-size: var(--font-size-sm); transition: all var(--transition-fast); border: 1px solid transparent; color: var(--text-primary); }
.checkbox-item:hover { background: var(--bg-hover); }
.checkbox-item.checked { background: var(--primary-light); border-color: var(--primary); color: var(--primary); }
.checkbox-item input[type="checkbox"] { display: none; }

/* 自动补全 */
.autocomplete-wrapper { position: relative; }
.autocomplete-wrapper input { width: 100%; padding: 7px 12px; border: 1px solid var(--border-control); border-radius: var(--radius-sm); font-size: var(--font-size-sm); background: var(--bg-white); }
.autocomplete-wrapper input:focus { border-color: var(--primary); outline: none; box-shadow: 0 0 0 2px var(--primary-light); }
.ac-dropdown { position: absolute; top: 100%; left: 0; right: 0; max-height: 200px; overflow-y: auto; background: var(--bg-white); border: 1px solid var(--primary); border-top: none; border-radius: 0 0 var(--radius-sm) var(--radius-sm); z-index: 1001; box-shadow: var(--shadow-lg); display: none; }
.ac-dropdown .ac-item { padding: 8px 12px; cursor: pointer; font-size: var(--font-size-sm); transition: all var(--transition-fast); display: flex; justify-content: space-between; align-items: center; color: var(--text-primary); }
.ac-dropdown .ac-item:hover, .ac-dropdown .ac-item.active { background: var(--primary-light); color: var(--primary); }
.ac-dropdown .ac-empty { padding: 8px 12px; font-size: var(--font-size-sm); color: var(--text-tertiary); }
.ac-dropdown .ac-loading { padding: 8px 12px; font-size: var(--font-size-sm); color: var(--primary); display: flex; align-items: center; gap: 6px; animation: pulse 1.4s infinite; }
.ac-dropdown .ac-item-dept { color: #8f959e; font-size: 11px; margin-left: 8px; white-space: nowrap; }
.ac-dropdown .ac-item .ac-item-dept { flex-shrink: 0; }

@keyframes pulse {
  0%, 100% { opacity: 1; }
  50% { opacity: 0.5; }
}

/* ========== 多选联想输入（科室/疾病 chip + input） ========== */
.multi-select-wrapper {
  position: relative;
  display: flex; flex-wrap: wrap; align-items: center; gap: 4px;
  min-height: 36px; padding: 4px 8px;
  border: 1px solid var(--border-control); border-radius: var(--radius-sm);
  background: var(--bg-white); cursor: text;
  transition: border-color var(--transition-fast), box-shadow var(--transition-fast);
}
.multi-select-wrapper:focus-within {
  border-color: var(--primary); box-shadow: 0 0 0 2px var(--primary-light);
}
.multi-select-wrapper .ms-chip {
  display: inline-flex; align-items: center; gap: 2px;
  padding: 2px 5px 2px 8px; border-radius: 4px;
  background: var(--primary-light); color: var(--primary);
  font-size: 12px; font-weight: 500; line-height: 20px;
  white-space: nowrap; user-select: none;
}
.multi-select-wrapper .ms-chip .ms-chip-x {
  cursor: pointer; font-size: 14px; line-height: 1;
  padding: 0 2px; opacity: .6; font-weight: 700;
}
.multi-select-wrapper .ms-chip .ms-chip-x:hover { opacity: 1; color: #ef4444; }
.multi-select-wrapper .ms-chip.dept-chip {
  background: #eff6ff; color: #1d4ed8;
}
.multi-select-wrapper .ms-chip.disease-chip {
  background: #f0fdf4; color: #15803d;
}
.multi-select-wrapper .ms-input {
  flex: 1; min-width: 100px; border: none !important;
  outline: none !important; box-shadow: none !important;
  padding: 2px 4px !important; font-size: var(--font-size-sm);
  background: transparent !important; line-height: 24px;
}
.multi-select-wrapper .ac-dropdown {
  position: fixed; /* 脱离 modal-body overflow 裁剪 */
  z-index: 9999;
  max-height: 220px;
  overflow-y: auto;
  background: var(--bg-white);
  border: 1px solid var(--primary);
  border-radius: 0 0 var(--radius-sm) var(--radius-sm);
  box-shadow: 0 8px 24px rgba(0,0,0,0.15);
  display: none;
}

/* feature tabs */
.ft-tab { padding: 10px 16px; cursor: pointer; border-bottom: 2px solid transparent; font-size: var(--font-size-base); font-weight: 400; color: var(--text-secondary); transition: all var(--transition-fast); }
.ft-tab:hover { color: var(--primary); }
.ft-tab.active { color: var(--primary); border-bottom-color: var(--primary); font-weight: 500; }

/* 搜索输入 */
.search-input { padding: 7px 12px; border: 1px solid var(--border-control); border-radius: var(--radius-sm); font-size: var(--font-size-sm); outline: none; transition: border-color var(--transition-fast); background: var(--bg-white); color: var(--text-primary); }
.search-input:focus { border-color: var(--primary); box-shadow: 0 0 0 2px var(--primary-light); }

/* 医院卡片 */
.hospital-card-grid { display: grid; grid-template-columns: repeat(auto-fill, minmax(300px, 1fr)); gap: 14px; padding: 4px 0; }
.hospital-card {
  background: var(--bg-white); border: 1px solid var(--border-card);
  border-radius: var(--radius); padding: 20px;
  box-shadow: var(--shadow-sm); transition: all var(--transition);
  cursor: default; position: relative;
}
.hospital-card:hover { box-shadow: var(--shadow); border-color: var(--primary); transform: translateY(-2px); }
.hospital-card.selected { border-color: var(--primary); background: var(--primary-bg-solid); }
.hospital-card-top { display: flex; align-items: flex-start; gap: 10px; margin-bottom: 10px; }
.hospital-checkbox { width: 15px; height: 15px; accent-color: var(--primary); flex-shrink: 0; margin-top: 2px; cursor: pointer; }
.hospital-avatar { width: 40px; height: 40px; border-radius: var(--radius-sm); background: var(--primary-light); display: flex; align-items: center; justify-content: center; font-size: 18px; flex-shrink: 0; color: var(--primary); }
.hospital-info { flex: 1; min-width: 0; }
.hospital-name { font-size: var(--font-size-base); font-weight: 600; color: var(--text-primary); margin-bottom: 3px; display: flex; align-items: center; gap: 6px; }
.hospital-desc { font-size: var(--font-size-sm); color: var(--text-secondary); line-height: 1.5; display: -webkit-box; -webkit-line-clamp: 2; -webkit-box-orient: vertical; overflow: hidden; }
.hospital-region { display: inline-flex; align-items: center; gap: 3px; font-size: var(--font-size-xs); color: var(--primary); background: var(--primary-light-solid); padding: 2px 8px; border-radius: 2px; margin-top: 6px; }
.hospital-stats { display: flex; gap: 14px; padding: 10px 0; border-top: 1px solid var(--border-light); border-bottom: 1px solid var(--border-light); margin-bottom: 10px; }
.hospital-stat { display: flex; flex-direction: column; align-items: center; flex: 1; }
.hospital-stat-value { font-size: var(--font-size-md); font-weight: 600; color: var(--text-primary); }
.hospital-stat-label { font-size: var(--font-size-xs); color: var(--text-secondary); margin-top: 2px; }
.hospital-stat-value.danger { color: var(--danger); }
.hospital-card-actions { display: flex; justify-content: flex-end; gap: 6px; }
.batch-bar { display: none; position: sticky; bottom: 0; background: var(--bg-white); border-top: 1px solid var(--primary); padding: 12px 20px; margin-top: 14px; border-radius: 0 0 var(--radius) var(--radius); box-shadow: 0 -2px 8px rgba(31,35,41,0.04); z-index: 10; }
.batch-bar.show { display: flex; align-items: center; justify-content: space-between; }
.batch-bar .batch-info { font-size: var(--font-size-sm); color: var(--text-primary); }
.batch-bar .batch-actions { display: flex; gap: 8px; }
.hospital-empty { text-align: center; padding: 60px 20px; color: var(--text-secondary); }
.hospital-empty-icon { font-size: 48px; margin-bottom: 12px; opacity: 0.3; }
.hospital-empty-text { font-size: var(--font-size-base); }
.doctor-empty { text-align: center; padding: 60px 20px; color: var(--text-secondary); }
.doctor-empty-icon { font-size: 48px; margin-bottom: 12px; opacity: 0.3; }
.doctor-empty-text { font-size: var(--font-size-base); }
.monitor-badge { display: inline-block; padding: 2px 8px; border-radius: 2px; font-size: var(--font-size-xs); font-weight: 400; }
.platform-badge { display: inline-flex; align-items: center; gap: 2px; background: var(--bg-body); border: 1px solid var(--border-light); padding: 2px 6px; border-radius: var(--radius-xs); font-size: var(--font-size-xs); color: var(--text-secondary); margin: 1px; }
.readonly-field { color: var(--text-tertiary); cursor: help; border-bottom: 1px dashed var(--border-card); }
.penalty-tag { font-size: var(--font-size-xs); color: var(--text-secondary); white-space: nowrap; overflow: hidden; text-overflow: ellipsis; display: block; max-width: 140px; }

/* 链接跳转 */
.link-jump-btn { display: inline-flex; align-items: center; gap: 4px; padding: 4px 10px; background: var(--bg-body); border-radius: var(--radius-xs); font-size: var(--font-size-xs); color: var(--primary); cursor: pointer; border: 1px solid var(--border-card); transition: all var(--transition-fast); }
.link-jump-btn:hover { background: var(--primary-light); border-color: var(--primary); }

/* 风险分数条 */
.risk-score-bar { height: 4px; border-radius: 2px; background: var(--border-light); overflow: hidden; }
.risk-score-fill { height: 100%; border-radius: 2px; background: linear-gradient(90deg, var(--success), var(--warning), var(--danger)); transition: width 0.5s; }

/* ===================== 弹窗内部表格风格 ===================== */
.modal table, .fs-modal table { font-size: var(--font-size-sm); }
.modal th, .fs-modal th { background: var(--bg-card-header); padding: 8px 12px; font-size: var(--font-size-sm); }
.modal td, .fs-modal td { padding: 10px 12px; }

/* 弹窗内部表单组紧凑 */
.modal .form-group, .fs-modal .form-group { margin-bottom: 14px; }

/* ===================== 动画 ===================== */
@keyframes modalFadeIn { from { opacity: 0; } to { opacity: 1; } }
@keyframes toastSlideIn { from { transform: translateX(100%); opacity: 0; } to { transform: translateX(0); opacity: 1; } }

/* ===================== 飞书图标替换系统样式 ===================== */
.fi-icon { display: inline-flex; align-items: center; justify-content: center; flex-shrink: 0; vertical-align: middle; }
.fi-replaced { display: inline-flex; align-items: center; justify-content: center; vertical-align: middle; flex-shrink: 0; }
.fi-dot { display: inline-block; border-radius: 50%; vertical-align: middle; flex-shrink: 0; }

/* 导航栏中的图标颜色适配 */
.nav-item .fi-replaced, .nav-item .fi-icon { color: var(--primary); }
.nav-item.active .fi-replaced, .nav-item.active .fi-icon { color: var(--primary); }
.nav-section .fi-replaced, .nav-section .fi-icon { color: var(--text-tertiary); }

/* 侧边栏底部按钮图标 */
.sidebar-footer .fi-replaced, .sidebar-footer .fi-icon { color: var(--text-secondary); }

/* 按钮内的图标间距 */
.fs-btn .fi-replaced, .fs-btn .fi-icon { margin-right: 2px; }

/* 登录页logo图标 */
.login-logo .fi-replaced, .login-logo .fi-icon { color: var(--primary); }

/* 风险等级图标保持语义颜色 */
.fi-replaced[style*="#F53F3F"],
.fi-replaced[style*="#CB2634"] { color: #F53F3F; }
.fi-replaced[style*="#FF7D00"],
.fi-replaced[style*="#D25F00"] { color: #FF7D00; }
.fi-replaced[style*="#00B42C"],
.fi-replaced[style*="#009A29"] { color: #00B42C; }
.fi-replaced[style*="#1456F0"],
.fi-replaced[style*="#0E42D2"] { color: #1456F0; }

/* 统计卡片内的图标白色 */
.stat-card .fi-replaced, .stat-card .fi-icon,
.bs-stat-card .fi-replaced, .bs-stat-card .fi-icon { color: inherit; }

/* ========== 全景态势大屏 — 赛博朋克 Cyberpunk Theme ========== */

/* 全局暗色覆盖 — 仅内容区域 */
body.cyberpunk-active {
  background: #050510 !important;
  overflow: auto !important;
}
body.cyberpunk-active .content {
  background: #050510;
  padding: 0;
}

.big-screen-wrap {
  min-height: calc(100vh - 100px);
  padding: 0;
  position: relative;
  background: #050510;
  overflow-y: auto;
}

/* ── 动态光影背景：多层渐变光晕 + 网格线 ── */
.big-screen-wrap::before {
  content: '';
  position: absolute; inset: 0; z-index: 0; pointer-events: none;
  background:
    /* 网格线 */
    repeating-linear-gradient(0deg, rgba(0,240,255,0.03) 0px, rgba(0,240,255,0.03) 1px, transparent 1px, transparent 50px),
    repeating-linear-gradient(90deg, rgba(0,240,255,0.03) 0px, rgba(0,240,255,0.03) 1px, transparent 1px, transparent 50px),
    /* 顶部光晕 */
    radial-gradient(ellipse 60% 40% at 50% 0%, rgba(0,240,255,0.08) 0%, transparent 70%),
    /* 底部紫光 */
    radial-gradient(ellipse 80% 30% at 50% 100%, rgba(255,0,255,0.06) 0%, transparent 70%),
    /* 左侧光 */
    radial-gradient(ellipse 30% 60% at 0% 50%, rgba(0,240,255,0.04) 0%, transparent 60%),
    /* 右侧光 */
    radial-gradient(ellipse 20% 50% at 100% 50%, rgba(255,0,255,0.04) 0%, transparent 60%);
  animation: cyberBgPulse 8s ease-in-out infinite alternate;
}

@keyframes cyberBgPulse {
  0% { opacity: 0.8; }
  50% { opacity: 1; }
  100% { opacity: 0.85; }
}

/* ── 扫描线覆盖层 ── */
.big-screen-wrap::after {
  content: '';
  position: absolute; inset: 0; z-index: 1; pointer-events: none;
  background: repeating-linear-gradient(
    0deg,
    transparent,
    transparent 2px,
    rgba(0,240,255,0.015) 2px,
    rgba(0,240,255,0.015) 4px
  );
  animation: scanline 0.1s linear infinite;
}

@keyframes scanline {
  0% { transform: translateY(0); }
  100% { transform: translateY(4px); }
}

/* ── 光柱动画 ── */
.big-screen-wrap .cyber-lightbeam {
  position: absolute; z-index: 0; pointer-events: none;
  width: 2px; height: 60%;
  background: linear-gradient(to bottom, transparent, rgba(0,240,255,0.3), rgba(255,0,255,0.2), transparent);
  animation: lightbeamFloat 10s ease-in-out infinite;
  filter: blur(20px);
  opacity: 0.5;
}
.big-screen-wrap .cyber-lightbeam:nth-child(1) { left: 15%; animation-delay: 0s; }
.big-screen-wrap .cyber-lightbeam:nth-child(2) { left: 40%; animation-delay: -3s; height: 50%; }
.big-screen-wrap .cyber-lightbeam:nth-child(3) { left: 65%; animation-delay: -6s; height: 70%; }
.big-screen-wrap .cyber-lightbeam:nth-child(4) { left: 85%; animation-delay: -8s; height: 45%; }

@keyframes lightbeamFloat {
  0%, 100% { transform: translateX(0) scaleY(0.8); opacity: 0.3; }
  25% { transform: translateX(20px) scaleY(1); opacity: 0.6; }
  50% { transform: translateX(-10px) scaleY(0.7); opacity: 0.4; }
  75% { transform: translateX(15px) scaleY(1.1); opacity: 0.5; }
}

/* 全屏模式 */
.big-screen-wrap.big-screen-full {
  position: fixed;
  top: 0; left: 0; right: 0; bottom: 0;
  z-index: 9999;
  background: #050510;
  overflow-y: auto;
  padding: 16px 24px;
}

/* ── 内容层（z-index 高于背景特效）── */
.bs-header,
.bs-cards-row,
.bs-main-row,
.bs-charts-row {
  position: relative; z-index: 2;
}

/* ===== Header ===== */
.bs-header {
  display: flex;
  align-items: center;
  justify-content: space-between;
  padding: 16px 0 18px;
  margin-bottom: 16px;
  border-bottom: 1px solid rgba(0,240,255,0.15);
  position: relative;
}
.bs-header::after {
  content: '';
  position: absolute; bottom: -1px; left: 0; width: 200px; height: 1px;
  background: linear-gradient(90deg, #00f0ff, #ff00ff, transparent);
  animation: headerLine 3s ease-in-out infinite alternate;
}
@keyframes headerLine {
  0% { width: 200px; opacity: 1; }
  50% { width: 350px; opacity: 0.8; }
  100% { width: 200px; opacity: 1; }
}
.bs-header-left { display: flex; align-items: center; gap: 20px; flex-wrap: wrap; }
.bs-title {
  font-size: 22px; font-weight: 800; color: #e0f7ff; margin: 0;
  text-shadow: 0 0 20px rgba(0,240,255,0.4), 0 0 40px rgba(0,240,255,0.15);
  letter-spacing: 2px;
}

/* 面包屑 */
.bs-breadcrumb { display: flex; align-items: center; gap: 4px; font-size: 13px; }
.bs-breadcrumb-item {
  color: #00f0ff; cursor: pointer; padding: 3px 10px;
  border-radius: 4px; transition: all 0.2s; font-weight: 500;
  background: rgba(0,240,255,0.06);
  border: 1px solid rgba(0,240,255,0.15);
  text-shadow: 0 0 8px rgba(0,240,255,0.3);
}
.bs-breadcrumb-item:hover {
  background: rgba(0,240,255,0.15);
  border-color: rgba(0,240,255,0.4);
  box-shadow: 0 0 12px rgba(0,240,255,0.2);
}
.bs-breadcrumb-current {
  color: #fff; cursor: default; font-weight: 600;
  background: rgba(255,255,255,0.05); border-color: rgba(255,255,255,0.1);
  text-shadow: 0 0 10px rgba(255,255,255,0.3);
}
.bs-breadcrumb-current:hover { background: rgba(255,255,255,0.05); }
.bs-breadcrumb-arrow { color: #00f0ff; font-size: 12px; user-select: none; }
.bs-time { font-size: 12px; color: rgba(0,240,255,0.6); text-shadow: 0 0 6px rgba(0,240,255,0.2); }
.bs-fullscreen-btn {
  font-size: 13px; padding: 6px 18px;
  border: 1px solid rgba(0,240,255,0.3);
  border-radius: 6px; background: rgba(0,240,255,0.05);
  color: #00f0ff; cursor: pointer; font-weight: 500; white-space: nowrap;
  text-shadow: 0 0 8px rgba(0,240,255,0.3);
  transition: all 0.3s;
}
.bs-fullscreen-btn:hover {
  background: rgba(0,240,255,0.15);
  border-color: #00f0ff;
  box-shadow: 0 0 20px rgba(0,240,255,0.3), inset 0 0 10px rgba(0,240,255,0.05);
}

/* ===== Cards Row ===== */
.bs-cards-row {
  display: grid;
  grid-template-columns: repeat(auto-fit, minmax(140px, 1fr));
  gap: 12px;
  margin-bottom: 16px;
}
.bs-card {
  background: linear-gradient(135deg, rgba(10,20,40,0.9), rgba(15,25,50,0.8));
  border-radius: 10px; padding: 16px;
  border: 1px solid rgba(0,240,255,0.1);
  text-align: center;
  transition: all 0.3s;
  cursor: default;
  position: relative; overflow: hidden;
  backdrop-filter: blur(10px);
}
.bs-card::before {
  content: '';
  position: absolute; inset: 0;
  background: linear-gradient(135deg, rgba(0,240,255,0.03), rgba(255,0,255,0.03));
  opacity: 0; transition: opacity 0.3s;
}
.bs-card:hover {
  transform: translateY(-3px);
  border-color: rgba(0,240,255,0.4);
  box-shadow: 0 0 25px rgba(0,240,255,0.15), 0 0 50px rgba(0,240,255,0.05);
}
.bs-card:hover::before { opacity: 1; }
.bs-card-icon { font-size: 24px; margin-bottom: 8px; position: relative; z-index: 1; }
.bs-card-num {
  font-size: 28px; font-weight: 800; line-height: 1.2;
  position: relative; z-index: 1;
  background: linear-gradient(135deg, #00f0ff, #e0f7ff);
  -webkit-background-clip: text; -webkit-text-fill-color: transparent;
  background-clip: text;
  text-shadow: none;
  filter: drop-shadow(0 0 8px rgba(0,240,255,0.4));
}
.bs-card-label { font-size: 12px; color: rgba(200,220,240,0.6); margin-top: 4px; position: relative; z-index: 1; }

/* 卡片颜色变体 */
.bs-card-blue { border-left: 3px solid #00f0ff; }
.bs-card-red { border-left: 3px solid #ff3366; }
.bs-card-red .bs-card-num { background: linear-gradient(135deg, #ff3366, #ff8899); -webkit-background-clip: text; -webkit-text-fill-color: transparent; background-clip: text; filter: drop-shadow(0 0 8px rgba(255,51,102,0.4)); }
.bs-card-orange { border-left: 3px solid #ff9900; }
.bs-card-orange .bs-card-num { background: linear-gradient(135deg, #ff9900, #ffcc66); -webkit-background-clip: text; -webkit-text-fill-color: transparent; background-clip: text; filter: drop-shadow(0 0 8px rgba(255,153,0,0.4)); }
.bs-card-green { border-left: 3px solid #00ff41; }
.bs-card-green .bs-card-num { background: linear-gradient(135deg, #00ff41, #66ff88); -webkit-background-clip: text; -webkit-text-fill-color: transparent; background-clip: text; filter: drop-shadow(0 0 8px rgba(0,255,65,0.4)); }
.bs-card-purple { border-left: 3px solid #b44dff; }
.bs-card-purple .bs-card-num { background: linear-gradient(135deg, #b44dff, #dd99ff); -webkit-background-clip: text; -webkit-text-fill-color: transparent; background-clip: text; filter: drop-shadow(0 0 8px rgba(180,77,255,0.4)); }
.bs-card-cyan { border-left: 3px solid #00e5ff; }
.bs-card-teal { border-left: 3px solid #00ffe5; }
.bs-card-teal .bs-card-num { background: linear-gradient(135deg, #00ffe5, #66fff2); -webkit-background-clip: text; -webkit-text-fill-color: transparent; background-clip: text; filter: drop-shadow(0 0 8px rgba(0,255,229,0.4)); }
.bs-card-dark { border-left: 3px solid #aaa; }
.bs-card-dark .bs-card-num { background: linear-gradient(135deg, #ccc, #fff); -webkit-background-clip: text; -webkit-text-fill-color: transparent; background-clip: text; filter: drop-shadow(0 0 8px rgba(255,255,255,0.3)); }

/* ===== Main Row: Map + Alert Feed ===== */
.bs-main-row {
  display: flex; gap: 16px; margin-bottom: 16px;
}
.bs-map-panel {
  flex: 1 1 65%; min-width: 0;
  background: linear-gradient(135deg, rgba(10,20,40,0.85), rgba(8,16,35,0.9));
  border-radius: 10px; padding: 16px;
  border: 1px solid rgba(0,240,255,0.12);
  box-shadow: 0 0 30px rgba(0,240,255,0.05), inset 0 0 80px rgba(0,240,255,0.02);
  backdrop-filter: blur(10px);
  position: relative; overflow: hidden;
}
.bs-map-panel::before {
  content: '';
  position: absolute; top: -1px; left: 20px; right: 20px; height: 1px;
  background: linear-gradient(90deg, transparent, rgba(0,240,255,0.3), rgba(255,0,255,0.2), transparent);
}
.bs-alert-panel {
  flex: 0 0 320px;
  background: linear-gradient(135deg, rgba(10,20,40,0.85), rgba(8,16,35,0.9));
  border-radius: 10px; padding: 16px;
  border: 1px solid rgba(255,0,255,0.1);
  box-shadow: 0 0 25px rgba(255,0,255,0.03);
  backdrop-filter: blur(10px);
  display: flex; flex-direction: column;
  position: relative; overflow: hidden;
}
.bs-alert-panel::before {
  content: '';
  position: absolute; top: -1px; left: 20px; right: 20px; height: 1px;
  background: linear-gradient(90deg, transparent, rgba(255,0,255,0.3), rgba(0,240,255,0.2), transparent);
}

.bs-panel-title {
  font-size: 14px; font-weight: 600; color: #e0f7ff;
  margin-bottom: 12px; padding-bottom: 10px;
  border-bottom: 1px solid rgba(0,240,255,0.1);
  text-shadow: 0 0 10px rgba(0,240,255,0.3);
  letter-spacing: 1px;
  position: relative;
}

/* ===== Alert Feed ===== */
.bs-alert-feed {
  flex: 1; overflow-y: auto; max-height: 380px;
  display: flex; flex-direction: column; gap: 4px;
}
.bs-alert-feed::-webkit-scrollbar { width: 4px; }
.bs-alert-feed::-webkit-scrollbar-track { background: rgba(0,240,255,0.02); }
.bs-alert-feed::-webkit-scrollbar-thumb { background: rgba(0,240,255,0.2); border-radius: 2px; }
.bs-alert-feed::-webkit-scrollbar-thumb:hover { background: rgba(0,240,255,0.4); }

.bs-alert-item {
  display: flex; align-items: center; gap: 8px;
  padding: 8px 10px; border-radius: 6px;
  background: rgba(0,240,255,0.03);
  border: 1px solid rgba(0,240,255,0.06);
  cursor: pointer;
  animation: bsSlideIn 0.3s ease both;
  font-size: 12px; color: #c0d8e8;
  transition: all 0.2s;
}
.bs-alert-item:hover {
  background: rgba(0,240,255,0.08);
  border-color: rgba(0,240,255,0.25);
  box-shadow: 0 0 10px rgba(0,240,255,0.1);
}
.bs-alert-lvl { font-size: 14px; flex-shrink: 0; }
.bs-alert-title { flex: 1; color: #e0f0f8; white-space: nowrap; overflow: hidden; text-overflow: ellipsis; }
.bs-alert-platform { color: #00f0ff; font-size: 11px; flex-shrink: 0; text-shadow: 0 0 6px rgba(0,240,255,0.3); }
.bs-alert-time { color: rgba(160,200,220,0.6); font-size: 11px; flex-shrink: 0; }
.bs-empty-sm { text-align: center; color: rgba(160,200,220,0.4); padding: 30px 0; font-size: 13px; }

@keyframes bsSlideIn {
  from { opacity: 0; transform: translateX(20px); }
  to { opacity: 1; transform: translateX(0); }
}

/* ===== Charts Row ===== */
.bs-charts-row {
  display: grid;
  grid-template-columns: repeat(3, 1fr);
  gap: 16px;
  margin-bottom: 16px;
}
.bs-chart-panel {
  background: linear-gradient(135deg, rgba(10,20,40,0.85), rgba(8,16,35,0.9));
  border-radius: 10px; padding: 16px;
  border: 1px solid rgba(0,240,255,0.1);
  box-shadow: 0 0 20px rgba(0,240,255,0.03);
  backdrop-filter: blur(10px);
  position: relative; overflow: hidden;
}
.bs-chart-panel::before {
  content: '';
  position: absolute; top: -1px; left: 16px; right: 16px; height: 1px;
  background: linear-gradient(90deg, transparent, rgba(0,240,255,0.2), transparent);
}

/* ===== AI Stats ===== */
.bs-ai-stats {
  display: flex; flex-direction: column; gap: 12px;
}
.bs-ai-item {
  display: flex; justify-content: space-between; align-items: center;
  padding: 10px 14px; border-radius: 8px;
  background: rgba(0,240,255,0.03);
  border: 1px solid rgba(0,240,255,0.08);
  transition: all 0.2s;
}
.bs-ai-item:hover {
  background: rgba(0,240,255,0.06);
  border-color: rgba(0,240,255,0.2);
  box-shadow: 0 0 12px rgba(0,240,255,0.08);
}
.bs-ai-label { font-size: 13px; color: rgba(180,210,230,0.7); }
.bs-ai-val {
  font-size: 20px; font-weight: 700;
  background: linear-gradient(135deg, #00f0ff, #e0f7ff);
  -webkit-background-clip: text; -webkit-text-fill-color: transparent;
  background-clip: text;
  filter: drop-shadow(0 0 8px rgba(0,240,255,0.4));
}
.bs-ai-warn {
  background: linear-gradient(135deg, #ff3366, #ff8899);
  -webkit-background-clip: text; -webkit-text-fill-color: transparent;
  background-clip: text;
  filter: drop-shadow(0 0 8px rgba(255,51,102,0.4));
}

/* ===== Hospital Ranking ===== */
.bs-ranking-list {
  display: flex; flex-direction: column; gap: 6px;
  max-height: 220px; overflow-y: auto;
}
.bs-ranking-list::-webkit-scrollbar { width: 4px; }
.bs-ranking-list::-webkit-scrollbar-track { background: rgba(0,240,255,0.02); }
.bs-ranking-list::-webkit-scrollbar-thumb { background: rgba(0,240,255,0.2); border-radius: 2px; }
.bs-rank-item {
  display: flex; align-items: center; gap: 10px;
  padding: 8px 10px; border-radius: 6px;
  background: rgba(0,240,255,0.03);
  border: 1px solid rgba(0,240,255,0.05);
  font-size: 13px; color: #c0d8e8;
  transition: all 0.2s;
}
.bs-rank-item:hover {
  background: rgba(0,240,255,0.08);
  border-color: rgba(0,240,255,0.2);
}
.bs-rank-num { font-size: 16px; width: 28px; text-align: center; flex-shrink: 0; color: #00f0ff; }
.bs-rank-name { flex: 1; color: #d0e4f0; white-space: nowrap; overflow: hidden; text-overflow: ellipsis; }
.bs-rank-cnt { color: #00f0ff; font-weight: 600; flex-shrink: 0; text-shadow: 0 0 6px rgba(0,240,255,0.3); }

/* ===== Big Screen Full Mode Overrides ===== */
.big-screen-full .bs-cards-row {
  grid-template-columns: repeat(8, 1fr);
}
.big-screen-full .bs-main-row { height: 480px; }
.big-screen-full .bs-map-panel { flex: 1 1 70%; }
.big-screen-full .bs-alert-panel { flex: 0 0 350px; }
.big-screen-full .bs-alert-feed { max-height: 440px; }

/* ===== Map 容器暗色适配 ===== */
#bs-china-map {
  background: transparent !important;
}

@media (max-width: 1400px) {
  .bs-charts-row { grid-template-columns: repeat(2, 1fr); }
  .bs-main-row { flex-direction: column; }
  .bs-alert-panel { flex: 0 0 auto; max-height: 300px; }
  .bs-alert-feed { max-height: 260px; }
}
@media (max-width: 768px) {
  .bs-charts-row { grid-template-columns: 1fr; }
  .bs-cards-row { grid-template-columns: repeat(4, 1fr); }
}

/* ========== v8 全景态势模块新增样式 ========== */

/* AI 状态行 */
.bs-ai-status-bar { display: flex; align-items: center; gap: 8px; padding: 10px 20px; background: linear-gradient(90deg, rgba(20,40,70,0.6), rgba(14,30,62,0.8), rgba(20,40,70,0.6)); border: 1px solid rgba(0,240,255,0.15); border-radius: 4px; margin-bottom: 12px; font-size: 13px; color: #a0c8e0; flex-wrap: wrap; }
.bs-ai-icon { font-size: 18px; }
.bs-ai-hl { color: #ffd54f; font-weight: 700; font-size: 15px; }
.bs-ai-red { color: #ff3366; font-weight: 700; }

/* 模块区块 */
.bs-module-section { margin-bottom: 16px; background: linear-gradient(135deg, rgba(10,26,54,0.9), rgba(14,30,62,0.85)); border: 1px solid rgba(40,80,140,0.35); border-radius: 6px; overflow: hidden; position: relative; }
.bs-module-section::before { content: ''; position: absolute; top: 0; left: 0; width: 100%; height: 2px; background: linear-gradient(90deg, transparent, rgba(212,168,83,0.5), transparent); }
.bs-module-header { display: flex; align-items: center; gap: 10px; padding: 12px 18px; border-bottom: 1px solid rgba(40,80,140,0.2); font-size: 15px; font-weight: 600; color: #c8d8f0; letter-spacing: 1px; }
.bs-module-num { display: inline-flex; align-items: center; justify-content: center; width: 26px; height: 26px; border-radius: 50%; background: rgba(212,168,83,0.25); color: #d4a853; font-size: 13px; font-weight: 700; flex-shrink: 0; }
.bs-module-desc { margin-left: auto; font-size: 11px; color: #5a7090; letter-spacing: 1px; }
.bs-module-body { padding: 12px 16px; }

/* 两列布局 */
.bs-row-2col { display: flex; gap: 14px; flex-wrap: wrap; }
.bs-row-2col > div { flex: 1; min-width: 0; }

/* Mini KPI */
.bs-mini-kpi-row { display: flex; gap: 10px; flex-wrap: wrap; padding: 0 16px 10px; }
.bs-mini-kpi { display: flex; align-items: center; gap: 8px; padding: 8px 14px; background: rgba(20,40,70,0.4); border-radius: 4px; border-left: 3px solid #00f0ff; min-width: 120px; }
.bs-mini-kpi-label { font-size: 11px; color: #8ea4c8; white-space: nowrap; }
.bs-mini-kpi-val { font-size: 17px; font-weight: 700; white-space: nowrap; }

/* 焦点案例卡片 */
.bs-focus-case-panel { flex: 0 0 320px; min-width: 280px; background: #161e30; border-radius: 6px; padding: 12px; border: 1px solid rgba(40,80,140,0.3); display: flex; flex-direction: column; }
.bs-focus-case-card { flex: 1; background: rgba(20,40,70,0.5); border-radius: 6px; padding: 14px; border: 1px solid rgba(40,80,140,0.25); min-height: 200px; }
.bs-focus-title { font-size: 14px; font-weight: 600; color: #fff; margin-bottom: 8px; line-height: 1.5; }
.bs-focus-meta { font-size: 12px; color: #8ea4c8; margin-bottom: 4px; }
.bs-focus-violation { margin: 8px 0; padding: 8px 10px; background: rgba(255,51,102,0.12); border-radius: 4px; font-size: 12px; color: #ef9a9a; border: 1px solid rgba(255,51,102,0.2); line-height: 1.5; }
.bs-focus-status { font-size: 12px; margin-top: auto; }
.bs-focus-badge { display: inline-block; padding: 2px 8px; border-radius: 3px; font-size: 11px; }
.bs-focus-badge.done { background: rgba(0,255,65,0.2); color: #66bb6a; border: 1px solid rgba(0,255,65,0.3); }
.bs-focus-badge.warn { background: rgba(255,152,0,0.2); color: #ffb74d; border: 1px solid rgba(255,152,0,0.3); }
.bs-focus-nav-btns { display: flex; gap: 8px; margin-top: 10px; }
.bs-focus-nav { display: flex; gap: 8px; margin-top: 10px; }
.bs-focus-nav button { flex: 1; padding: 6px; border: 1px solid rgba(40,80,140,0.4); background: rgba(20,40,70,0.4); color: #8ea4c8; border-radius: 4px; cursor: pointer; font-size: 12px; transition: all .2s; }
.bs-focus-nav button:hover { background: rgba(40,80,140,0.3); color: #d4a853; }
.bs-focus-nav-info { text-align: center; font-size: 11px; color: #5a7090; margin-top: 6px; }

/* 风险徽章（表格内） */
.bs-risk-badge { display: inline-block; padding: 1px 7px; border-radius: 3px; font-size: 11px; font-weight: 600; }
.bs-risk-badge.high { background: rgba(255,51,102,0.25); color: #ef5350; border: 1px solid rgba(255,51,102,0.3); }
.bs-risk-badge.mid { background: rgba(255,152,0,0.2); color: #ffb74d; border: 1px solid rgba(255,152,0,0.25); }
.bs-risk-badge.low { background: rgba(76,175,80,0.2); color: #66bb6a; border: 1px solid rgba(76,175,80,0.25); }

/* 新闻条 */
.bs-news-strip { display: flex; gap: 8px; overflow-x: auto; padding: 8px 16px; scrollbar-width: thin; margin-top: 8px; }
.bs-news-strip::-webkit-scrollbar { height: 3px; }
.bs-news-strip::-webkit-scrollbar-thumb { background: rgba(0,240,255,0.3); border-radius: 2px; }
.bs-news-item { flex-shrink: 0; padding: 5px 12px; background: rgba(20,40,70,0.4); border: 1px solid rgba(40,80,140,0.2); border-radius: 4px; font-size: 11px; color: #8ea4c8; white-space: nowrap; transition: all .2s; }
.bs-news-item:hover { background: rgba(40,80,140,0.3); color: #d4a853; }
.bs-news-date { color: #d4a853; margin-right: 4px; }

/* 管理启示框 */
.bs-insight-box { margin: 10px 16px 14px; padding: 10px 14px; background: rgba(212,168,83,0.06); border-left: 3px solid rgba(212,168,83,0.4); border-radius: 0 4px 4px 0; font-size: 12px; color: #c8d8f0; line-height: 1.7; }

/* 表格面板 */
.bs-table-panel { background: rgba(20,30,46,0.6); border-radius: 6px; padding: 10px; border: 1px solid rgba(40,80,140,0.25); }
.bs-table-wrap { overflow-x: auto; border-radius: 4px; }
.bs-table { width: 100%; border-collapse: collapse; font-size: 13px; }
.bs-table th { background: rgba(20,40,70,0.6); color: #8ea4c8; padding: 9px 12px; text-align: left; font-weight: 600; border-bottom: 1px solid rgba(40,80,140,0.25); font-size: 11px; white-space: nowrap; }
.bs-table td { padding: 8px 12px; border-bottom: 1px solid rgba(40,80,140,0.1); color: #c8d8f0; }
.bs-table tr:hover td { background: rgba(20,40,70,0.3); }

/* 处置漏斗 */
.bs-funnel-row { display: flex; justify-content: center; align-items: center; gap: 0; padding: 16px 0; flex-wrap: wrap; }
.bs-funnel-step { text-align: center; padding: 12px 22px; border-radius: 6px; border: 1px solid rgba(0,240,255,0.2); min-width: 110px; }
.bs-funnel-num { font-size: 28px; font-weight: 700; line-height: 1.1; }
.bs-funnel-lbl { font-size: 11px; color: #8ea4c8; margin-top: 4px; }
.bs-funnel-arrow { font-size: 20px; color: rgba(40,80,140,0.6); padding: 0 6px; }

/* 子标题提示 */
.bs-sub-hint { font-size: 11px; color: #6688aa; margin-left: 8px; }

@media (max-width: 1400px) {
  .bs-row-2col { flex-direction: column; }
  .bs-main-row { flex-direction: column !important; }
  .bs-focus-case-panel { flex: none; max-width: none; }
}
@media (max-width: 768px) {
  .bs-cards-row { grid-template-columns: repeat(4, 1fr); }
  .bs-mini-kpi-row { flex-direction: column; }
  .bs-funnel-row { flex-direction: column; gap: 8px; }
  .bs-funnel-arrow { transform: rotate(90deg); }
}

/* ========== 情感分析报告按钮 & 弹窗 ========== */
.sent-rep-btn {
  background: linear-gradient(135deg, #3b82f6, #8b5cf6);
  color: #fff;
  border: none;
  border-radius: 6px;
  padding: 7px 16px;
  font-size: 12px;
  font-weight: 600;
  cursor: pointer;
  white-space: nowrap;
  transition: all .2s;
  margin-left: 8px;
}
.sent-rep-btn:hover { transform: translateY(-1px); box-shadow: 0 4px 12px rgba(59,130,246,.35); }
.sent-report-modal {
  background: #fff;
  border-radius: 16px;
  width: 90vw;
  max-width: 860px;
  max-height: calc(100vh - 80px);
  overflow: hidden;
  box-shadow: 0 20px 60px rgba(0,0,0,.25);
  animation: sentRepIn .25s ease;
}
@keyframes sentRepIn {
  from { opacity: 0; transform: scale(.95) translateY(20px); }
  to { opacity: 1; transform: scale(1) translateY(0); }
}
.sent-rep-loadbar {
  width: 200px; height: 6px; background: #f1f5f9; border-radius: 3px;
  margin: 0 auto; overflow: hidden;
}
.sent-rep-loadbar::after {
  content: ''; display: block; width: 60%; height: 100%;
  background: linear-gradient(90deg,#3b82f6,#8b5cf6); border-radius: 3px;
  animation: sentRepLoad 1.2s ease infinite;
}
@keyframes sentRepLoad {
  0% { transform: translateX(-100%); }
  100% { transform: translateX(200%); }
}

/* ========== 维度筛选：省/市/区下拉 ========== */
.sent-dim-select {
  display: inline-flex; align-items: center; gap: 4px;
  padding: 6px 10px; border: 1px solid #e2e8f0; border-radius: 6px;
  background: #fff; font-size: 12px; color: #64748b; cursor: pointer;
  white-space: nowrap; transition: .15s;
  min-width: 80px; max-width: 140px;
  font-family: inherit;
  -webkit-appearance: none; appearance: none;
  background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='10' height='10' viewBox='0 0 24 24' fill='none' stroke='%2394a3b8' stroke-width='2'%3E%3Cpolyline points='6 9 12 15 18 9'%3E%3C/polyline%3E%3C/svg%3E");
  background-repeat: no-repeat;
  background-position: right 8px center;
  padding-right: 28px;
}
.sent-dim-select:hover { border-color: #3370ff; color: #3370ff; }
.sent-dim-select:focus { outline: none; border-color: #3370ff; box-shadow: 0 0 0 3px rgba(51,112,255,.1); }
.sent-dim-select.has-selection {
  border-color: #3370ff; color: #3370ff; background: #eff6ff; font-weight: 600;
}
.sent-dim-select:disabled {
  opacity: .45; cursor: not-allowed; background: #f8fafc;
}

/* ========== 舆情趋势数据总览 ========== */

/* 顶部 */
.to-header { margin-bottom: 16px; }
.to-title-row { display: flex; align-items: center; gap: 10px; }
.to-title-icon { font-size: 22px; }
.to-title-text { font-size: 20px; font-weight: 700; color: #1e293b; }
.to-title-badge { font-size: 12px; color: #64748b; background: #f1f5f9; padding: 3px 10px; border-radius: 12px; }
.to-breadcrumb { margin-top: 8px; display: flex; align-items: center; gap: 6px; font-size: 13px; }
.to-bc-item { color: #64748b; cursor: pointer; transition: color .2s; }
.to-bc-item:hover { color: #3370ff; }
.to-bc-item.active { color: #1e293b; font-weight: 600; cursor: default; }
.to-bc-sep { color: #cbd5e1; }

/* 分区标题 */
.to-section-title { font-size: 14px; font-weight: 600; color: #1e293b; margin: 20px 0 12px; }
.to-section-sub { font-weight: 400; color: #94a3b8; font-size: 12px; margin-left: 6px; }

/* 省份网格 */
.to-province-grid { display: grid; grid-template-columns: repeat(auto-fill, minmax(160px, 1fr)); gap: 10px; margin-bottom: 20px; }
.to-prov-card {
  background: #fff; border: 1px solid #e2e8f0; border-radius: 10px;
  padding: 14px; cursor: pointer; transition: all .2s;
}
.to-prov-card:hover { border-color: #3370ff; box-shadow: 0 2px 12px rgba(51,112,255,.1); transform: translateY(-2px); }
.to-prov-name { font-size: 13px; font-weight: 600; color: #1e293b; margin-bottom: 4px; }
.to-prov-count { font-size: 22px; font-weight: 700; color: #3370ff; margin-bottom: 6px; }
.to-prov-bar { height: 4px; background: #f1f5f9; border-radius: 2px; margin-bottom: 8px; }
.to-prov-bar-fill { height: 100%; background: #3370ff; border-radius: 2px; transition: width .4s ease; }
.to-prov-risk { font-size: 11px; padding: 2px 8px; border-radius: 10px; font-weight: 500; }
.to-risk-low { color: #10b981; background: #ecfdf5; }
.to-risk-medium { color: #f59e0b; background: #fffbeb; }
.to-risk-high { color: #ef4444; background: #fef2f2; }
.to-prov-icons { font-size: 16px; margin-top: 4px; text-align: right; }

/* KPI 行 */
.to-kpi-row { display: grid; grid-template-columns: repeat(4, 1fr); gap: 12px; margin-bottom: 12px; }
.to-kpi-card {
  background: #fff; border: 1px solid #e2e8f0; border-radius: 12px;
  padding: 16px 20px;
}
.to-kpi-sm { padding: 14px 18px; }
.to-kpi-label { font-size: 12px; color: #94a3b8; margin-bottom: 4px; }
.to-kpi-value { font-size: 22px; font-weight: 700; color: #1e293b; }
.to-kpi-unit { font-size: 12px; font-weight: 400; color: #94a3b8; }
.to-kpi-danger { }

/* AI 风险评分卡 */
.to-ai-card {
  background: #fff; border: 1px solid #e2e8f0; border-radius: 14px;
  padding: 24px; margin-bottom: 20px; display: flex; gap: 32px;
}
.to-ai-left { flex: 0 0 220px; text-align: center; }
.to-ai-score-label { font-size: 13px; color: #64748b; margin-bottom: 8px; }
.to-ai-score { font-size: 56px; font-weight: 800; line-height: 1; margin-bottom: 10px; }
.to-ai-score-max { font-size: 24px; font-weight: 500; color: #94a3b8; }
.to-ai-score-bar-bg { height: 8px; background: #f1f5f9; border-radius: 4px; margin-bottom: 10px; }
.to-ai-score-bar-fill { height: 100%; border-radius: 4px; transition: width .5s ease; }
.to-ai-score-tag { display: inline-block; font-size: 12px; padding: 4px 14px; border-radius: 12px; font-weight: 600; }

.to-ai-right { flex: 1; display: flex; flex-direction: column; gap: 14px; justify-content: center; }
.to-ai-item { }
.to-ai-item-head { display: flex; justify-content: space-between; margin-bottom: 4px; }
.to-ai-item-label { font-size: 12px; color: #64748b; }
.to-ai-item-val { font-size: 12px; color: #1e293b; font-weight: 600; }
.to-ai-item-bar { height: 6px; background: #f1f5f9; border-radius: 3px; }
.to-ai-item-fill { height: 100%; border-radius: 3px; transition: width .5s ease; }

/* 图表行 */
.to-chart-row { display: grid; grid-template-columns: 1.5fr 1fr; gap: 16px; }

.to-panel {
  background: #fff; border: 1px solid #e2e8f0; border-radius: 14px;
  padding: 20px;
}
.to-panel-title { font-size: 14px; font-weight: 600; color: #1e293b; margin-bottom: 4px; }
.to-panel-sub { font-weight: 400; color: #94a3b8; font-size: 12px; margin-left: 6px; }
.to-panel-legend { font-size: 11px; color: #94a3b8; margin-bottom: 8px; display: flex; align-items: center; gap: 8px; }
.to-legend-dot { display: inline-block; width: 10px; height: 10px; border-radius: 50%; }
.to-legend-area { display: inline-block; width: 18px; height: 8px; border-radius: 2px; }

/* 热门乱象列表 */
.to-disorder-list { display: flex; flex-direction: column; gap: 8px; }
.to-disorder-item { display: flex; align-items: center; gap: 12px; }
.to-disorder-rank {
  width: 24px; height: 24px; border-radius: 6px; display: flex;
  align-items: center; justify-content: center; color: #fff;
  font-size: 12px; font-weight: 700; flex-shrink: 0;
}
.to-disorder-info { flex: 1; min-width: 0; }
.to-disorder-name { font-size: 13px; color: #1e293b; margin-bottom: 2px; white-space: nowrap; overflow: hidden; text-overflow: ellipsis; }
.to-disorder-bar { height: 4px; background: #f1f5f9; border-radius: 2px; }
.to-disorder-bar-fill { height: 100%; border-radius: 2px; transition: width .5s ease; }
.to-disorder-stats { display: flex; gap: 8px; align-items: center; flex-shrink: 0; }
.to-disorder-total { font-size: 16px; font-weight: 700; color: #1e293b; }
.to-disorder-neg { font-size: 11px; color: #ef4444; background: #fef2f2; padding: 1px 6px; border-radius: 6px; }

/* 响应式 */
@media (max-width: 768px) {
  .to-kpi-row { grid-template-columns: repeat(2, 1fr); }
  .to-ai-card { flex-direction: column; align-items: center; }
  .to-ai-left { flex: 0 0 auto; }
  .to-chart-row { grid-template-columns: 1fr; }
  .to-province-grid { grid-template-columns: repeat(auto-fill, minmax(120px, 1fr)); }
}

/* ==================== v9 全景态势新增样式 ==================== */

/* 省份热力横向卡片列 */
.bs-province-row {
  display: flex;
  gap: 8px;
  overflow-x: auto;
  padding: 10px 0 4px;
  scrollbar-width: thin;
  scrollbar-color: rgba(0,240,255,0.3) transparent;
}
.bs-province-row::-webkit-scrollbar { height: 4px; }
.bs-province-row::-webkit-scrollbar-thumb { background: rgba(0,240,255,0.3); border-radius: 2px; }

.bs-prov-card {
  flex: 0 0 auto;
  min-width: 90px;
  background: rgba(0,240,255,0.07);
  border: 1px solid rgba(0,240,255,0.2);
  border-radius: 6px;
  padding: 8px 10px;
  cursor: pointer;
  transition: background 0.2s, border-color 0.2s;
}
.bs-prov-card:hover { background: rgba(0,240,255,0.15); border-color: rgba(0,240,255,0.5); }
.bs-prov-name { font-size: 13px; font-weight: 700; color: #a0c8e0; margin-bottom: 2px; }
.bs-prov-count { font-size: 18px; font-weight: 800; color: #00f0ff; margin-bottom: 4px; }
.bs-prov-tag {
  display: inline-block; font-size: 9px; color: #fff;
  background: rgba(255,170,0,0.3); border-radius: 3px;
  padding: 1px 5px; margin-right: 3px; margin-bottom: 2px;
}
.bs-prov-tag2 { background: rgba(255,51,102,0.3); }

/* 风险指数图例 */
.bs-risk-legend {
  font-size: 11px; color: #a0c8e0;
  padding: 8px 12px 4px;
  display: flex; gap: 14px; align-items: center;
  flex-wrap: wrap;
}
.bs-risk-dot {
  display: inline-block; width: 10px; height: 10px;
  border-radius: 50%; margin-right: 4px;
}
.bs-risk-dot.high { background: #ff3366; box-shadow: 0 0 6px #ff3366; }
.bs-risk-dot.medium { background: #ff9900; box-shadow: 0 0 6px #ff9900; }
.bs-risk-dot.low { background: #00f0ff; box-shadow: 0 0 6px #00f0ff; }

/* 焦点案例样式增强 */
.bs-focus-case-panel {
  flex: 0 0 280px;
  background: rgba(0,10,30,0.6);
  border: 1px solid rgba(0,240,255,0.15);
  border-radius: 8px;
  padding: 12px;
  display: flex;
  flex-direction: column;
}
.bs-focus-case-list {
  flex: 1;
  overflow-y: auto;
  scrollbar-width: thin;
  scrollbar-color: rgba(0,240,255,0.3) transparent;
}
.bs-focus-case-item {
  background: rgba(0,30,60,0.6);
  border-left: 4px solid #444;
  border-radius: 0 6px 6px 0;
  padding: 8px 10px;
  margin-bottom: 8px;
  cursor: pointer;
  transition: background 0.2s;
}
.bs-focus-case-item:hover { background: rgba(0,60,100,0.8); }
.bs-focus-case-item.risk-high { border-left-color: #ff3366; }
.bs-focus-case-item.risk-medium { border-left-color: #ff9900; }
.bs-focus-case-item.risk-low { border-left-color: #00f0ff; }
.bs-fc-level {
  font-size: 10px; font-weight: 700;
  display: inline-block; padding: 1px 8px; border-radius: 3px;
  margin-bottom: 4px;
}
.risk-high .bs-fc-level { background: rgba(255,51,102,0.25); color: #ff3366; }
.risk-medium .bs-fc-level { background: rgba(255,153,0,0.25); color: #ff9900; }
.risk-low .bs-fc-level { background: rgba(0,240,255,0.15); color: #00f0ff; }
.bs-fc-title { font-size: 12px; color: #c0d8ee; line-height: 1.4; margin-bottom: 3px; }
.bs-fc-meta { font-size: 10px; color: #6688aa; }

/* ==================== v10 全景态势样式 ==================== */
.v10-section { margin-bottom: 32px; }
.v10-section-title { color: #00f0ff; font-size: 18px; font-weight: bold; margin-bottom: 16px; padding-bottom: 8px; border-bottom: 1px solid #00f0ff33; }
.v10-kpi-row { display: flex; gap: 12px; flex-wrap: wrap; margin-bottom: 16px; }
.v10-kpi-card { flex: 1 1 140px; background: linear-gradient(135deg,#0a1628,#0d2137); border: 1px solid #00f0ff22; border-radius: 8px; padding: 14px 16px; text-align: center; }
.v10-kpi-icon { font-size: 22px; margin-bottom: 6px; }
.v10-kpi-value { font-size: 26px; font-weight: bold; color: #00f0ff; margin-bottom: 4px; }
.v10-kpi-label { font-size: 12px; color: #6688aa; }
.v10-chart-row { display: flex; gap: 16px; flex-wrap: wrap; }
.v10-chart-card { background: #0a1628; border: 1px solid #00f0ff22; border-radius: 8px; padding: 16px; }
.v10-chart-title { color: #ccddff; font-size: 13px; font-weight: bold; margin-bottom: 10px; }
.v10-case-heat-row { display: flex; gap: 16px; flex-wrap: wrap; margin-bottom: 16px; }
.v10-case-card { flex: 0 0 340px; background: #0a1628; border: 1px solid #00f0ff22; border-radius: 8px; overflow: hidden; }
.v10-heat-card { flex: 1; background: #0a1628; border: 1px solid #00f0ff22; border-radius: 8px; padding: 16px; min-width: 380px; }
.v10-case-title { background: #00f0ff11; color: #00f0ff; font-size: 13px; font-weight: bold; padding: 8px 16px; border-bottom: 1px solid #00f0ff22; }
.v10-case-nav { display: flex; justify-content: space-between; padding: 8px 16px; background: #00f0ff08; border-top: 1px solid #00f0ff22; }
.v10-case-nav button { background: #00f0ff22; color: #00f0ff; border: 1px solid #00f0ff44; border-radius: 4px; padding: 4px 12px; cursor: pointer; font-size: 12px; }
.v10-province-row { display: flex; gap: 10px; overflow-x: auto; padding: 12px 0; margin-bottom: 16px; }
.v10-province-card { flex: 0 0 auto; min-width: 130px; background: #0a1628; border: 1px solid #00f0ff22; border-radius: 8px; padding: 10px 14px; text-align: center; }
.v10-province-name { color: #00f0ff; font-size: 14px; font-weight: bold; margin-bottom: 4px; }
.v10-province-count { color: #ffd93d; font-size: 18px; font-weight: bold; margin-bottom: 6px; }
.v10-province-tag { font-size: 10px; color: #6688aa; margin-bottom: 2px; }
.v10-case-trend { background: #0a1628; border: 1px solid #00f0ff22; border-radius: 8px; padding: 10px 16px; margin-bottom: 16px; overflow-x: auto; white-space: nowrap; font-size: 12px; color: #ccddff; }
.v10-table-wrap { background: #0a1628; border: 1px solid #00f0ff22; border-radius: 8px; padding: 16px; overflow-x: auto; }
.v10-table { width: 100%; border-collapse: collapse; color: #ccddff; font-size: 13px; }
.v10-table th { background: #00f0ff11; color: #00f0ff; padding: 8px 12px; text-align: left; border-bottom: 1px solid #00f0ff33; }
.v10-table td { padding: 8px 12px; border-bottom: 1px solid #ffffff08; }
.v10-table tr:hover { background: #00f0ff08; }
.v10-insight { display: flex; gap: 10px; background: linear-gradient(90deg,#00f0ff08,#0d2137); border: 1px solid #00f0ff22; border-radius: 8px; padding: 12px 16px; margin-top: 12px; }
.v10-insight-icon { font-size: 20px; flex-shrink: 0; }
.v10-insight-text { color: #ccddff; font-size: 13px; line-height: 1.6; }

/* ==================== v12 全景态势升级样式 0620新版 ==================== */
/* 可疑账号规则栏 */
.bs-suspicious-bar { background: linear-gradient(135deg,#1a0510,#0d1a2d); border: 1px solid #ff4d4d33; border-radius: 8px; padding: 14px 16px; margin-bottom: 14px; }
.bs-suspicious-title { color: #ffcccc; font-size: 13px; margin-bottom: 12px; }
.bs-suspicious-rules { display: flex; gap: 12px; flex-wrap: wrap; }
.bs-rule-card { flex: 1 1 120px; background: #0a1628; border: 1px solid #ff4d4d22; border-radius: 6px; padding: 10px 14px; text-align: center; min-width: 110px; }
.bs-rule-num { font-size: 24px; font-weight: bold; margin-bottom: 4px; }
.bs-rule-label { font-size: 12px; color: #ccddff; margin-bottom: 4px; }
.bs-rule-desc { font-size: 10px; color: #6688aa; }

/* 案例排序表格副标题 */
.bs-case-subtitle { color: #6688aa; font-size: 11px; padding: 4px 16px 8px; background: #00f0ff08; border-bottom: 1px solid #00f0ff11; margin-bottom: 0; }

/* 风险时序时间轴 */
.bs-timeline-item { display: flex; gap: 10px; padding: 8px 0; border-bottom: 1px solid #ffffff08; align-items: flex-start; }
.bs-timeline-dot { width: 8px; height: 8px; border-radius: 50%; flex-shrink: 0; margin-top: 5px; box-shadow: 0 0 6px currentColor; }
.bs-timeline-content { flex: 1; min-width: 0; }

/* 脉冲动画 */
@keyframes pulse-green { 0%,100%{opacity:1;transform:scale(1)} 50%{opacity:0.6;transform:scale(1.3)} }
@keyframes pulse-red { 0%,100%{opacity:1;transform:scale(1)} 50%{opacity:0.5;transform:scale(1.4)} }
.pulse-green { animation: pulse-green 2s infinite; }
.pulse-red { animation: pulse-red 1.5s infinite; }

/* 章节分区 */
.bs-section-header { margin-bottom: 14px; }
.bs-section-title-row { display: flex; align-items: center; gap: 10px; margin-bottom: 4px; }
.bs-section-icon { font-size: 20px; }
.bs-section-title { color: #00f0ff; font-size: 18px; font-weight: bold; }
.bs-section-subtitle { color: #6688aa; font-size: 12px; padding-left: 30px; }

/* 健康度进度条 */
.bs-health-bar { background: #1a3050; border-radius: 4px; height: 8px; display: inline-block; }
.bs-health-fill { height: 8px; border-radius: 4px; }

/* =============================================
   全景态势大屏 v21 — 浅色企业风（参考Ant Design风格）
   配色: 白底 #fff · 主蓝 #1677ff · 文字 #1a1a2e · 灰 #8c8c8c
   风格: 干净白底 + 蓝色强调 + 微阴影 + 圆角卡片
   ============================================= */

/* ── 画布容器(滚动容器) — 在侧边栏+顶栏布局内运行 ── */
.pano-screen {
  width: 100%; height: calc(100vh - 56px);
  overflow-y: auto; overflow-x: hidden;
  scroll-behavior: smooth;
  scroll-snap-type: y mandatory;
  background: #ffffff;
  color: #1a1a2e;
  font-family: -apple-system, BlinkMacSystemFont, "Microsoft YaHei", "PingFang SC", sans-serif;
}

/* ── 每屏section ── */
.pano-section {
  width: 100%; min-height: 100vh;
  scroll-snap-align: start;
  display: flex; flex-direction: column;
  align-items: center; justify-content: flex-start;
  padding: 28px 36px;
  box-sizing: border-box;
  position: relative;
  background: #ffffff;
}

/* ── 模块标题行 ── */
.pano-mod-header { text-align: left; margin-bottom: 24px; position: relative; z-index: 1; width: 100%; max-width: 1400px; }
.pano-mod-num { font-size: 13px; color: #8c8c8c; letter-spacing: 4px; font-weight: 600; margin-bottom: 6px; text-transform: uppercase; }
.pano-mod-title { font-size: 22px; font-weight: 700; color: #1a1a2e; letter-spacing: 1px; margin-bottom: 6px; }
.pano-mod-sub { font-size: 12px; color: #8c8c8c; letter-spacing: 0.5px; }
.pano-mod-title-deco { display: flex; align-items: center; gap: 16px; margin-bottom: 6px; }
.pano-mod-title-deco::before,
.pano-mod-title-deco::after {
  content: ""; width: 40px; height: 2px;
  background: linear-gradient(90deg, transparent, #1677ff);
  border-radius: 1px;
}
.pano-mod-title-deco::after { background: linear-gradient(90deg, #1677ff, transparent); }

/* ── 模块内容区 ── */
.pano-mod-body { width: 100%; max-width: 1400px; position: relative; z-index: 1; }

/* ── 乱象预警 + 协同处置：紧凑间距（减少模块间空白） ── */
#pano-s7.pano-section,
#pano-s6.pano-section { padding: 16px 36px; min-height: auto; }
#pano-s7 .pano-mod-header,
#pano-s6 .pano-mod-header { margin-bottom: 14px; }
#pano-s7 .pano-card,
#pano-s6 .pano-card { padding: 12px 16px; }

/* ── 卡片面板 ── */
.pano-card {
  background: #ffffff;
  border: 1px solid #e8e8e8;
  border-radius: 8px; padding: 18px 22px;
  box-shadow: 0 2px 8px rgba(0,0,0,0.04), 0 1px 2px rgba(0,0,0,0.02);
  position: relative;
  transition: box-shadow 0.25s ease, border-color 0.25s ease;
}
.pano-card:hover {
  box-shadow: 0 4px 16px rgba(0,0,0,0.08);
  border-color: #d0d0d0;
}
.pano-card::before { display: none; }
.pano-card-accent { border-color: #91caff; border-left: 3px solid #1677ff; }
.pano-card-accent::before { display: none; }

.pano-card-title {
  font-size: 15px; font-weight: 700; color: #1a1a2e;
  margin-bottom: 14px; padding-bottom: 10px;
  border-bottom: 1px solid #f0f0f0;
  display: flex; align-items: center; gap: 8px;
}

/* ── KPI统计卡片(模块内小卡片) ── */
.pano-stat-card {
  background: #ffffff;
  border: 1px solid #e8e8e8;
  border-radius: 8px; padding: 16px 18px;
  text-align: center;
  transition: all 0.25s ease;
  position: relative;
  box-shadow: 0 2px 8px rgba(0,0,0,0.03);
}
.pano-stat-card::before { display: none; }
.pano-stat-card:hover {
  border-color: #91caff;
  box-shadow: 0 4px 16px rgba(22,119,255,0.10);
  transform: translateY(-1px);
}
.pano-stat-val { font-size: 32px; font-weight: 800; line-height: 1.1; color: #1677ff; }
.pano-stat-val.red { color: #cf1322; }
.pano-stat-val.orange { color: #d48806; }
.pano-stat-val.green { color: #389e0d; }
.pano-stat-val.gold { color: #d48806; }
.pano-stat-val.purple { color: #722ed1; }
.pano-stat-val.cyan { color: #1677ff; }
.pano-stat-lbl { font-size: 12px; color: #8c8c8c; margin-top: 6px; font-weight: 500; }
.pano-stat-mini {
  display: inline-flex; flex-direction: column; align-items: center;
  padding: 4px 10px; border-radius: 6px;
  background: #f0f5ff;
  font-size: 16px; font-weight: 700; color: #1677ff;
  min-width: 44px; text-align: center; line-height: 1.3;
  border: 1px solid #d6e4ff;
}
.pano-stat-mini i { font-style: normal; font-size: 8px; color: #8c8c8c; font-weight: 400; }

/* ── 规则卡片 ── */
.pano-rule-card {
  background: #fafbfc;
  border: 1px solid #e8e8e8;
  border-radius: 8px; padding: 12px 16px;
  border-left: 3px solid #1677ff;
  display: flex; align-items: center; gap: 12px;
  position: relative;
  box-shadow: 0 1px 4px rgba(0,0,0,0.03);
  transition: all 0.2s ease;
}
.pano-rule-card::before { display: none; }
.pano-rule-card:hover { box-shadow: 0 2px 8px rgba(0,0,0,0.06); background: #ffffff; }
.pano-rule-card.red { border-left-color: #cf1322; }
.pano-rule-card.orange { border-left-color: #d48806; }
.pano-rule-card.yellow { border-left-color: #d48806; }
.pano-rule-card.purple { border-left-color: #722ed1; }
.pano-rule-card.cyan { border-left-color: #1677ff; }

.pano-rule-num { font-size: 22px; font-weight: 800; min-width: 32px; text-align: center; color: #1677ff; }
.pano-rule-info { flex: 1; }
.pano-rule-label { font-size: 13px; font-weight: 600; color: #1a1a2e; }
.pano-rule-desc { font-size: 11px; color: #8c8c8c; margin-top: 2px; }
.pano-rule-count { font-size: 20px; font-weight: 700; min-width: 50px; text-align: right; color: #1677ff; }

/* ── 表格 ── */
.pano-table { width: 100%; border-collapse: collapse; font-size: 13px; }
.pano-table th {
  color: #595959; font-weight: 600; text-align: left;
  padding: 10px 14px; border-bottom: 1px solid #e8e8e8;
  font-size: 12px; letter-spacing: 0.3px;
  background: #fafafa;
}
.pano-table td {
  padding: 10px 14px; border-bottom: 1px solid #f0f0f0;
  color: #262626; font-size: 13px;
}
.pano-table tr.highlight > td { background: #f0f5ff; }
.pano-table tr:hover td { background: #fafafa; }
.pano-table-sm th { padding: 6px 10px; font-size: 11px; }
.pano-table-sm td { padding: 6px 10px; font-size: 12px; }
.pano-table-sm td, .pano-table-sm th { white-space: nowrap; }

/* ── 进度条 ── */
.pano-bar-bg { display: inline-block; width: 80px; height: 6px; background: #f0f0f0; border-radius: 3px; overflow: hidden; vertical-align: middle; }
.pano-bar-fill { height: 6px; border-radius: 3px; transition: width 0.6s ease; }

/* ── 标签 ── */
.pano-tag { display: inline-block; padding: 3px 10px; border-radius: 4px; font-size: 11px; font-weight: 500; }
.pano-tag-r { color: #cf1322; background: #fff1f0; border: 1px solid #ffa39e; }
.pano-tag-o { color: #d48806; background: #fffbe6; border: 1px solid #ffe58f; }
.pano-tag-y { color: #d48806; background: #fffbe6; border: 1px solid #ffe58f; }
.pano-tag-g { color: #389e0d; background: #f6ffed; border: 1px solid #b7eb8f; }

/* ── 时间轴 ── */
.pano-tl-item {
  display: flex; gap: 10px; padding: 8px 0;
  border-bottom: 1px solid #f0f0f0;
  font-size: 12px; align-items: flex-start;
}
.pano-tl-dot {
  width: 8px; height: 8px; border-radius: 50%;
  flex-shrink: 0; margin-top: 5px;
  box-shadow: 0 0 6px currentColor;
}

/* ── 网格布局工具 ── */
.pano-grid-2 { display: grid; grid-template-columns: 1fr 1fr; gap: 16px; }
.pano-grid-3 { display: grid; grid-template-columns: 1fr 1fr 1fr; gap: 16px; }
.pano-grid-4 { display: grid; grid-template-columns: repeat(4, 1fr); gap: 16px; }
.pano-grid-5 { display: grid; grid-template-columns: repeat(5, 1fr); gap: 16px; }
.pano-grid-6 { display: grid; grid-template-columns: repeat(6, 1fr); gap: 14px; }
.pano-grid-23 { display: grid; grid-template-columns: 2fr 3fr; gap: 20px; }
.pano-grid-32 { display: grid; grid-template-columns: 3fr 2fr; gap: 20px; }

/* ── 处置流程步骤 ── */
.pano-step-row { display: flex; gap: 8px; flex-wrap: wrap; }
.pano-step {
  flex: 1; min-width: 110px; text-align: center;
  background: #ffffff;
  border: 1px solid #e8e8e8;
  border-radius: 8px; padding: 14px 10px;
  position: relative;
  box-shadow: 0 2px 8px rgba(0,0,0,0.03);
  transition: all 0.2s ease;
}
.pano-step::before { display: none; }
.pano-step:hover { border-color: #91cff4; box-shadow: 0 4px 12px rgba(22,119,255,0.08); }
.pano-step-num { font-size: 24px; font-weight: 800; color: #1677ff; line-height: 1.2; }
.pano-step-label { font-size: 11px; color: #8c8c8c; margin-top: 4px; }

/* ── 响应式 ── */
@media (max-width: 1200px) {
  .pano-section { padding: 20px 20px; }
  .pano-mod-title { font-size: 20px; }
  .pano-grid-3, .pano-grid-4, .pano-grid-5, .pano-grid-6 { grid-template-columns: 1fr 1fr; }
  .pano-grid-23, .pano-grid-32 { grid-template-columns: 1fr; }
}/* ===================== 飞书设计系统 Feishu Universe Design ===================== */
/* 品牌蓝 #1456F0 | 文字 #1F2329 | 辅助 #646A73 | 间距基准 4px */

:root {
  /* === 品牌色 Brand Blue === */
  --primary: #1456F0;
  --primary-dark: #0E42D2;
  --primary-active: #0A2DA6;
  --primary-light: rgba(20, 86, 240, 0.08);
  --primary-light-solid: #E8F2FF;
  --primary-bg: rgba(20, 86, 240, 0.04);
  --primary-bg-solid: #F0F5FF;

  /* === 功能色 === */
  --success: #00B42C;
  --success-dark: #009A29;
  --success-light: rgba(0, 180, 44, 0.10);
  --success-light-solid: #E8FFEA;
  --warning: #FF7D00;
  --warning-dark: #D25F00;
  --warning-light: rgba(255, 125, 0, 0.10);
  --warning-light-solid: #FFF7E8;
  --danger: #F53F3F;
  --danger-dark: #CB2634;
  --danger-light: rgba(245, 63, 63, 0.10);
  --danger-light-solid: #FFECE8;
  --info: #1456F0;

  /* === 中性色 N900→N50 (14色灰阶) === */
  --n900: #1F2329;  /* 一级标题/正文 */
  --n800: #2B2F36;  /* 一级图标 */
  --n700: rgba(31, 35, 41, 0.70);
  --n600: #646A73;  /* 二级标题/正文/图标 */
  --n500: #8F959E;  /* 三级图标/placeholder/提示 */
  --n400: #BBBFC4;  /* Disable */
  --n300: #D0D3D6;  /* 可交互控件描边 */
  --n200: #DEE0E3;  /* 卡片描边 */
  --n100: #E5E6EB;  /* 较浅分割 */
  --n50:  #EFF0F1;  /* disable填充/最浅底 */

  /* === 文字色（别名） === */
  --text-primary: var(--n900);
  --text-secondary: var(--n600);
  --text-tertiary: var(--n500);
  --text-disabled: var(--n400);
  --text-light: #646A73;     /* 兼容别名 = n600 */
  --gray-200: #DEE0E3;       /* 兼容别名 = n200 */
  --gray-500: #8F959E;       /* 兼容别名 = n500 */

  /* === 背景色（飞书规范） === */
  --bg-body: #F5F6F7;       /* Background 2 */
  --bg-white: #FFFFFF;
  --bg-hover: rgba(31, 35, 41, 0.08);  /* N900 8% */
  --bg-press: rgba(31, 35, 41, 0.12);  /* N900 12% */
  --bg-disabled: var(--n50);
  --bg-card-header: #F7F8FA;
  --bg-modal-section: #F8F9FA;  /* Background 3 */

  /* === 边框（飞书规范） === */
  --border-card: var(--n200);       /* 卡片描边 */
  --border-control: var(--n300);    /* 可交互控件描边 */
  --border-light: var(--n100);
  --border-divider: rgba(31, 35, 41, 0.15); /* N900 15% */

  /* === 圆角（飞书规范） === */
  --radius-xs: 4px;
  --radius-sm: 6px;
  --radius: 8px;
  --radius-lg: 12px;
  --radius-xl: 16px;

  /* === 阴影（飞书规范 - 基于N900透明度） === */
  --shadow-sm: 0 1px 4px rgba(31, 35, 41, 0.06);
  --shadow: 0 2px 8px rgba(31, 35, 41, 0.06);
  --shadow-md: 0 4px 16px rgba(31, 35, 41, 0.08);
  --shadow-lg: 0 6px 24px rgba(31, 35, 41, 0.10);
  --shadow-modal: 0 8px 40px rgba(31, 35, 41, 0.16);
  --shadow-hover: 0 4px 16px rgba(20, 86, 240, 0.15);
  --shadow-button: 0 2px 8px rgba(20, 86, 240, 0.25);

  /* === 布局 === */
  --sidebar-w: 240px;
  --topbar-h: 56px;

  /* === 动画 === */
  --transition-fast: 0.15s cubic-bezier(0.4, 0, 0.2, 1);
  --transition: 0.2s cubic-bezier(0.4, 0, 0.2, 1);
  --transition-slow: 0.3s cubic-bezier(0.4, 0, 0.2, 1);

  /* === 字体 === */
  --font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', 'PingFang SC', 'Hiragino Sans GB', 'Microsoft YaHei', 'Helvetica Neue', Arial, sans-serif;
  --font-size-xs: 12px;
  --font-size-sm: 13px;
  --font-size-base: 14px;
  --font-size-md: 16px;
  --font-size-lg: 18px;
  --font-size-xl: 20px;
  --font-size-2xl: 24px;
  --font-size-kpi: 36px;

  /* === 间距（4px基准） === */
  --sp-1: 4px;
  --sp-2: 8px;
  --sp-3: 12px;
  --sp-4: 16px;
  --sp-5: 20px;
  --sp-6: 24px;
  --sp-8: 32px;
  --sp-10: 40px;
}

/* ===================== 全局重置 ===================== */
*, *::before, *::after { box-sizing: border-box; margin: 0; padding: 0; }
html { -webkit-font-smoothing: antialiased; -moz-osx-font-smoothing: grayscale; }
body {
  font-family: var(--font-family);
  font-size: var(--font-size-base);
  color: var(--text-primary);
  background: var(--bg-body);
  line-height: 1.5715;
  overflow: hidden;
}
a { text-decoration: none; color: var(--primary); }
a:hover { color: var(--primary-dark); }
button {
  cursor: pointer; border: none; outline: none;
  font-family: inherit; font-size: inherit;
}
input, select, textarea { font-family: inherit; outline: none; }

/* 飞书风格滚动条 */
::-webkit-scrollbar { width: 6px; height: 6px; }
::-webkit-scrollbar-track { background: transparent; }
::-webkit-scrollbar-thumb { background: var(--n400); border-radius: 3px; }
::-webkit-scrollbar-thumb:hover { background: var(--n500); }

/* ===================== 登录页 ===================== */
.login-bg {
  min-height: 100vh;
  background: linear-gradient(135deg, #0A2DA6 0%, #1456F0 50%, #3D7BFF 100%);
  display: flex; align-items: center; justify-content: center;
  position: relative;
}
.login-bg::before {
  content: '';
  position: absolute; inset: 0;
  background: url("data:image/svg+xml,%3Csvg width='60' height='60' viewBox='0 0 60 60' xmlns='http://www.w3.org/2000/svg'%3E%3Cg fill='none' fill-rule='evenodd'%3E%3Cg fill='%23ffffff' fill-opacity='0.04'%3E%3Cpath d='M36 34v-4h-2v4h-4v2h4v4h2v-4h4v-2h-4zm0-30V0h-2v4h-4v2h4v4h2V6h4V4h-4zM6 34v-4H4v4H0v2h4v4h2v-4h4v-2H6zM6 4V0H4v4H0v2h4v4h2V6h4V4H6z'/%3E%3C/g%3E%3C/g%3E%3C/svg%3E");
  pointer-events: none;
}
.login-box {
  background: #fff; border-radius: var(--radius-xl); padding: 48px 40px;
  width: 400px; box-shadow: 0 8px 40px rgba(0,0,0,0.12);
  position: relative; z-index: 1;
}
.login-logo { text-align: center; margin-bottom: 32px; }
.login-logo .logo-icon { font-size: 40px; margin-bottom: 12px; display: inline-block; }
.login-logo h1 { font-size: var(--font-size-xl); color: var(--text-primary); font-weight: 600; }
.login-logo p { font-size: var(--font-size-sm); color: var(--text-tertiary); margin-top: 4px; }
.login-demo {
  margin-top: 20px; padding: 12px 16px;
  background: var(--bg-body); border-radius: var(--radius-sm);
  font-size: var(--font-size-sm); color: var(--text-tertiary); line-height: 1.8;
}
.login-demo strong { color: var(--text-secondary); }
.btn-demo {
  margin-top: 12px; padding: 12px 0; font-size: 15px; font-weight: 600;
  border-radius: var(--radius-md); cursor: pointer; border: 2px solid #d4a853;
  background: linear-gradient(135deg, #0a1630, #1a2d50);
  color: #d4a853; letter-spacing: 2px;
  transition: all 0.3s ease;
}
.btn-demo:hover {
  background: linear-gradient(135deg, #1a2d50, #2a4060);
  border-color: #f0c040; color: #f0c040;
  box-shadow: 0 4px 16px rgba(212,168,83,0.25);
}
.btn-demo.full-width { width: 100%; justify-content: center; display: flex; align-items: center; }

/* ===================== 布局 ===================== */
#app { display: none; flex-direction: row; height: 100vh; overflow: hidden; }

/* 侧边栏 - 飞书风格 */
.sidebar {
  width: var(--sidebar-w); min-width: var(--sidebar-w);
  background: var(--bg-white); display: flex; flex-direction: column;
  overflow-y: auto; border-right: 1px solid var(--border-card);
}
.sidebar-header {
  padding: 20px 20px 16px;
  border-bottom: 1px solid var(--border-light);
}
.sidebar-header .sys-name {
  color: var(--text-primary); font-size: 15px; font-weight: 600;
  letter-spacing: 0.2px; line-height: 1.4;
  display: flex; align-items: center; gap: 8px;
}
.sidebar-header .sys-sub {
  color: var(--text-tertiary); font-size: var(--font-size-xs); margin-top: 4px;
}

/* 导航 */
.sidebar-nav { padding: 8px 8px; flex: 1; }
.nav-section {
  padding: 16px 12px 8px;
  font-size: 11px;
  font-weight: 500;
  color: var(--text-tertiary);
  letter-spacing: 0.5px;
  margin-top: 4px;
}
.nav-item {
  display: flex; align-items: center; gap: 8px;
  padding: 8px 12px; color: var(--text-primary);
  font-size: var(--font-size-base); cursor: pointer;
  transition: all var(--transition-fast); border-radius: var(--radius-sm);
  margin: 1px 0; font-weight: 400; position: relative;
}
.nav-item:hover {
  background: var(--bg-hover); color: var(--text-primary);
}
.nav-item.active {
  background: var(--primary-light); color: var(--primary);
  font-weight: 500;
}
.nav-item .nav-icon { font-size: 16px; width: 20px; text-align: center; flex-shrink: 0; }
.nav-item.active .nav-icon { color: var(--primary); }

/* 导航徽章 — 预警中心未处理数量 */
.nav-badge {
  position: absolute; right: 10px; top: 50%; transform: translateY(-50%);
  min-width: 20px; height: 20px; line-height: 20px;
  padding: 0 5px; border-radius: 10px;
  background: #dc2626; color: #fff;
  font-size: 11px; font-weight: 700; text-align: center;
  white-space: nowrap; box-shadow: 0 1px 4px rgba(220,38,38,.4);
  z-index: 2;
}
.nav-badge.pulse { animation: badgePulse .6s ease-in-out; }
@keyframes badgePulse {
  0%,100% { transform: translateY(-50%) scale(1); }
  50% { transform: translateY(-50%) scale(1.25); }
}

/* 树形导航组（设置等可展开菜单） */
.nav-group { margin: 4px 0; }
.nav-group-title {
  display: flex; align-items: center; gap: 8px;
  padding: 14px 12px 10px 12px; color: var(--text-secondary);
  font-size: 13px; font-weight: 600;
  letter-spacing: 0.3px; cursor: pointer;
  transition: color var(--transition-fast);
  user-select: none;
  margin-bottom: 2px;
}
.nav-group-title:hover { color: var(--text-primary); }
.nav-group-icon {
  font-size: 15px; color: var(--primary);
  width: 20px; text-align: center; flex-shrink: 0;
}
.nav-group-arrow {
  font-size: 10px; width: 20px; text-align: center;
  line-height: 1; margin-left: auto;
  transition: transform var(--transition-fast);
  color: var(--text-tertiary); flex-shrink: 0;
}
.nav-group-arrow.collapsed { transform: rotate(-90deg); }
.nav-group-children { overflow: hidden; }
.nav-group-children.collapsed { display: none; }
.nav-sub-section {
  padding: 12px 12px 4px 24px;
  font-size: 11px; color: var(--text-tertiary);
  font-weight: 500; letter-spacing: 0.3px;
  text-transform: none; margin-top: 2px;
}
.nav-sub-item {
  padding-left: 36px !important;
}

/* 侧边栏底部 */
.sidebar-footer {
  padding: 12px 12px 16px;
  border-top: 1px solid var(--border-light);
}
.sidebar-footer button {
  width: 100%; text-align: left; background: transparent;
  color: var(--text-secondary); font-size: var(--font-size-sm);
  padding: 6px 10px; border-radius: var(--radius-sm);
  transition: all var(--transition-fast); font-weight: 400;
}
.sidebar-footer button:hover { background: var(--bg-hover); color: var(--text-primary); }

/* 领导视窗导航项 */
.nav-demo {
  border-left: 3px solid #d4a853; margin-left: 0;
  background: linear-gradient(90deg, rgba(212,168,83,0.08), transparent);
  font-weight: 500;
}
.nav-demo:hover {
  background: linear-gradient(90deg, rgba(212,168,83,0.15), rgba(212,168,83,0.03));
  border-left-color: #f0c040;
}
.nav-demo .nav-icon { color: #d4a853; }

/* 主区域 */
.main-area {
  flex: 1; display: flex; flex-direction: column;
  overflow-y: auto; background: var(--bg-body);
}

/* 顶栏 - 飞书风格 */
.topbar {
  height: var(--topbar-h);
  background: var(--bg-white);
  border-bottom: 1px solid var(--border-card);
  display: flex; align-items: center;
  padding: 0 24px; gap: 16px; flex-shrink: 0;
}
.topbar-title {
  font-size: var(--font-size-md); font-weight: 600;
  color: var(--text-primary); flex: 1; letter-spacing: 0.2px;
}
.topbar-user {
  display: flex; align-items: center; gap: 6px;
  padding: 5px 12px; border-radius: var(--radius-sm);
  cursor: pointer; font-size: var(--font-size-base);
  color: var(--text-secondary); position: relative;
  user-select: none; transition: all var(--transition-fast);
}
.topbar-user:hover {
  background: var(--bg-hover); color: var(--text-primary);
}
.topbar-avatar {
  width: 28px; height: 28px; border-radius: 50%;
  background: var(--primary); color: #fff;
  display: flex; align-items: center; justify-content: center;
  font-size: var(--font-size-xs); font-weight: 600; flex-shrink: 0;
}
.topbar-arrow { font-size: 8px; margin-left: 2px; color: var(--text-tertiary); }

/* 顶栏右侧区域 */
.topbar-right { display: flex; align-items: center; gap: 12px; }

/* 视窗大屏顶栏按钮 */
.topbar-leader-btn {
  background: linear-gradient(135deg, #0a1630, #1a2d50);
  color: #d4a853; border: 1px solid #d4a853;
  padding: 5px 14px; border-radius: 4px; cursor: pointer;
  font-size: 13px; font-weight: 500; letter-spacing: 1px;
  transition: all 0.3s ease; white-space: nowrap;
}
.topbar-leader-btn:hover {
  background: linear-gradient(135deg, #1a2d50, #2a4060);
  border-color: #f0c040; color: #f0c040;
  box-shadow: 0 2px 8px rgba(212,168,83,0.2);
}

/* 用户下拉菜单 */
.user-dropdown {
  position: absolute; top: 100%; right: 0; margin-top: 4px;
  background: var(--bg-white); border: 1px solid var(--border-card);
  border-radius: var(--radius); box-shadow: var(--shadow-lg);
  min-width: 140px; z-index: 1000; overflow: hidden;
}
.dropdown-item {
  padding: 10px 16px; font-size: var(--font-size-sm);
  cursor: pointer; transition: all var(--transition-fast);
  color: var(--text-primary);
}
.dropdown-item:hover { background: var(--bg-hover); }

/* 内容区 */
.content { flex: 1; overflow-y: auto; padding: 24px 28px; overflow-anchor: none; scroll-behavior: auto; }

/* ===================== 统计卡片 - 飞书Dashboard风格 ===================== */
.stats-grid {
  display: grid;
  grid-template-columns: repeat(auto-fit, minmax(200px, 1fr));
  gap: 16px; margin-bottom: 24px;
}
.stat-card {
  background: var(--bg-white);
  border-radius: var(--radius);
  padding: 20px 24px;
  box-shadow: var(--shadow-sm);
  border: 1px solid var(--border-card);
  position: relative; overflow: hidden;
  transition: all var(--transition);
  cursor: default;
}
.stat-card::before {
  content: '';
  position: absolute; left: 0; top: 12px; bottom: 12px;
  width: 3px; border-radius: 0 3px 3px 0;
  background: var(--primary);
  transition: all var(--transition);
}
.stat-card:hover {
  box-shadow: var(--shadow-hover);
  transform: translateY(-2px);
  border-color: var(--primary);
}
.stat-card:hover::before { width: 4px; }
.stat-card.danger::before, .stat-card.red::before { background: var(--danger); }
.stat-card.warning::before, .stat-card.orange::before { background: var(--warning); }
.stat-card.success::before, .stat-card.green::before { background: var(--success); }
.stat-card.primary::before, .stat-card.blue::before { background: var(--primary); }
.stat-card.purple::before { background: #722ED1; }
.stat-card.teal::before { background: #14C9C9; }

.stat-label {
  font-size: var(--font-size-xs);
  color: var(--text-tertiary);
  margin-bottom: 8px;
  font-weight: 400;
}
.stat-value {
  font-size: 32px;
  font-weight: 700;
  color: var(--text-primary);
  line-height: 1.1;
  margin-bottom: 2px;
}
.stat-sub {
  font-size: var(--font-size-xs);
  color: var(--text-tertiary);
  margin-top: 6px;
}

/* FS统计卡片别名 */
.fs-stat-card {
  background: var(--bg-white);
  border-radius: var(--radius);
  padding: 20px 24px;
  box-shadow: var(--shadow-sm);
  border: 1px solid var(--border-card);
  position: relative; overflow: hidden;
  transition: all var(--transition);
}
.fs-stat-card::before {
  content: '';
  position: absolute; left: 0; top: 12px; bottom: 12px;
  width: 3px; border-radius: 0 3px 3px 0;
  transition: width var(--transition);
  background: var(--primary);
}
.fs-stat-card:hover {
  box-shadow: var(--shadow-hover);
  transform: translateY(-2px);
}
.fs-stat-card:hover::before { width: 4px; }
.fs-stat-card.blue::before { background: var(--primary); }
.fs-stat-card.red::before { background: var(--danger); }
.fs-stat-card.orange::before { background: var(--warning); }
.fs-stat-card.green::before { background: var(--success); }
.fs-stat-card.purple::before { background: #722ED1; }
.fs-stat-card.teal::before { background: #14C9C9; }
.fs-stat-card.gold::before { background: #D4A017; }

.fs-stat-value {
  font-size: 32px;
  font-weight: 700;
  color: var(--text-primary);
  line-height: 1.1;
  margin-bottom: 2px;
}
.fs-stat-label {
  font-size: var(--font-size-xs);
  color: var(--text-tertiary);
  margin-top: 6px;
  font-weight: 400;
}

/* ========== 趋势预测专用样式 ========== */
.trend-breadcrumb {
  display: flex; align-items: center; flex-wrap: wrap; gap: 4px;
  padding: 10px 16px; margin-bottom: 20px;
  background: var(--bg-white); border-radius: var(--radius);
  border: 1px solid var(--border-card); box-shadow: var(--shadow-sm);
  font-size: 13px;
}
.trend-bread-item {
  color: var(--text-secondary); cursor: pointer; font-weight: 500;
  padding: 2px 6px; border-radius: 4px; transition: background .2s;
}
.trend-bread-item:hover { background: var(--primary-light); text-decoration: underline; }
.trend-bread-arrow { color: var(--text-tertiary); font-size: 11px; margin: 0 2px; }
.trend-bread-current { color: var(--text-primary); font-weight: 600; }

.trend-drill-btn {
  padding: 6px 14px; border: 1px solid var(--border-card); border-radius: 6px;
  background: #fff; cursor: pointer; font-size: 12px; color: var(--text-primary);
  transition: .2s; white-space: nowrap;
}
.trend-drill-btn:hover {
  border-color: var(--primary); color: var(--primary);
  background: var(--primary-light); box-shadow: 0 1px 4px rgba(0,0,0,.06);
}

/* AI指标卡片 */
.trend-ai-card {
  background: var(--bg-white); border-radius: var(--radius);
  padding: 18px 20px; box-shadow: var(--shadow-sm);
  border: 1px solid var(--border-card); transition: all var(--transition);
}
.trend-ai-card:hover { box-shadow: var(--shadow-hover); transform: translateY(-1px); }
.trend-ai-card.ai-prob { border-left-width: 3px; border-left-style: solid; }
.trend-ai-label { font-size: var(--font-size-xs); color: var(--text-tertiary); margin-bottom: 6px; }
.trend-ai-value { font-size: 28px; font-weight: 700; line-height: 1.1; margin-bottom: 4px; }
.trend-ai-sub { font-size: 11px; color: var(--text-tertiary); }
.trend-ai-card.ai-anomaly .trend-ai-value { color: #ef4444; }
.trend-ai-card.ai-impact .trend-ai-value { color: #8b5cf6; }
.trend-ai-card.ai-spread .trend-ai-value { color: #f59e0b; }

/* ========== 统计分析 - 维度分段控件（飞书紧凑风格） ========== */
.stat-dim-tab {
  font-family: var(--font-family);
  outline: none;
  user-select: none;
}
.stat-dim-tab:hover {
  background: #fff !important;
  color: #3370ff !important;
  box-shadow: 0 1px 3px rgba(0,0,0,.08) !important;
}
.stat-dim-tab.active:hover {
  box-shadow: 0 1px 4px rgba(0,0,0,.14) !important;
}
.stat-dim-tab:active {
  transform: scale(0.97);
}

/* 平台健康卡片 */
.platform-health-card {
  transition: all var(--transition);
}
.platform-health-card:hover {
  box-shadow: var(--shadow-hover);
  transform: translateY(-2px);
}

/* 四大核心分类卡片 */
.core-type-card {
  transition: all var(--transition);
}
.core-type-card:hover {
  transform: translateY(-3px);
  box-shadow: var(--shadow-md);
}

.trend-method-card {
  border: 1px solid var(--border-card); transition: box-shadow var(--transition);
}
.trend-method-card:hover { box-shadow: var(--shadow-hover); }

/* 省份选择按钮（国家级下钻） */
.trend-prov-btn {
  transition: all .2s ease;
}
.trend-prov-btn:hover {
  transform: translateY(-2px);
  box-shadow: 0 4px 12px rgba(0,0,0,.12);
}

/* ========== 情感分析专业版样式 ========== */

/* 页面包裹器 — 浅灰高级背景 */
.sent-wrap {
  background: #f5f7fa; border-radius: 8px; padding: 24px;
  min-height: 100%;
}

/* --- KPI 卡片 (目标风格：icon+label 顶 / 大数字 中 / 副标题 底) --- */
.sent-kpi-grid {
  display: grid; grid-template-columns: repeat(5, 1fr); gap: 16px;
  margin-bottom: 20px;
}
.sent-kpi-card {
  background: #fff; border-radius: 10px; padding: 16px 20px;
  box-shadow: 0 1px 3px rgba(0,0,0,.04);
  transition: box-shadow .2s;
}
.sent-kpi-card:hover { box-shadow: 0 4px 12px rgba(0,0,0,.08); }
.sent-kpi-header {
  display: flex; align-items: center; gap: 6px;
  font-size: 12px; color: #64748b; font-weight: 500; margin-bottom: 8px;
}
.sent-kpi-dot { width: 8px; height: 8px; border-radius: 50%; flex-shrink: 0; }
.sent-kpi-value {
  font-size: 32px; font-weight: 700; color: #1e293b; line-height: 1.1;
  letter-spacing: -0.5px; margin-bottom: 6px;
}
.sent-kpi-footer {
  font-size: 11px; color: #94a3b8; display: flex; align-items: center; gap: 6px;
}
.sent-kpi-change { font-weight: 600; }
.sent-kpi-change.up { color: #dc2626; }
.sent-kpi-change.down { color: #16a34a; }

/* --- AI 评分大卡片 --- */
.sent-ai-card {
  background: linear-gradient(135deg, #faf5ff, #f5f3ff);
  border-radius: 12px; padding: 20px 24px;
  display: flex; gap: 28px; align-items: stretch;
  box-shadow: 0 1px 3px rgba(0,0,0,.04);
  margin-bottom: 20px;
}
.sent-ai-left {
  display: flex; align-items: center; gap: 14px;
  min-width: 200px; border-right: 1px solid rgba(139,92,246,.15);
  padding-right: 28px;
}
.sent-ai-icon {
  width: 56px; height: 56px; border-radius: 14px;
  background: linear-gradient(135deg, #8b5cf6, #a78bfa);
  display: flex; align-items: center; justify-content: center;
  font-size: 26px; color: #fff; flex-shrink: 0;
}
.sent-ai-info { }
.sent-ai-label { font-size: 12px; color: #7c3aed; font-weight: 600; margin-bottom: 2px; }
.sent-ai-score { font-size: 38px; font-weight: 800; color: #6d28d9; line-height: 1; }
.sent-ai-total { font-size: 16px; color: #a78bfa; font-weight: 500; }
.sent-ai-right {
  flex: 1; display: flex; flex-direction: column; justify-content: center; gap: 8px;
}
.sent-ai-bar-row {
  display: flex; align-items: center; gap: 10px;
}
.sent-ai-bar-label {
  font-size: 11px; color: #64748b; width: 65px; text-align: right; flex-shrink: 0;
}
.sent-ai-bar-track {
  flex: 1; height: 10px; background: rgba(139,92,246,.12); border-radius: 5px;
  overflow: hidden;
}
.sent-ai-bar-fill {
  height: 100%; border-radius: 5px; transition: width .4s ease;
}
.sent-ai-bar-val {
  font-size: 11px; font-weight: 600; color: #6d28d9; width: 42px; text-align: right; flex-shrink: 0;
}

/* --- 省份药丸按钮 --- */
.sent-prov-pills {
  display: flex; flex-wrap: wrap; gap: 8px; margin-bottom: 20px;
}
.sent-prov-pill {
  display: inline-flex; align-items: center; gap: 6px;
  padding: 7px 14px; border-radius: 20px; font-size: 13px;
  border: none; cursor: pointer; transition: all .2s;
  font-weight: 500; white-space: nowrap;
}
.sent-prov-pill:hover {
  transform: translateY(-1px); box-shadow: 0 2px 8px rgba(0,0,0,.12);
}
.sent-prov-pill.high { background: #fef2f2; color: #dc2626; }
.sent-prov-pill.high:hover { background: #fee2e2; }
.sent-prov-pill.medium { background: #fffbeb; color: #d97706; }
.sent-prov-pill.medium:hover { background: #fef3c7; }
.sent-prov-pill.low { background: #f0fdf4; color: #16a34a; }
.sent-prov-pill.low:hover { background: #dcfce7; }
.sent-prov-pill .pill-count {
  font-size: 11px; opacity: .7;
}
.sent-prov-pill .pill-risk {
  font-size: 10px; padding: 1px 6px; border-radius: 8px;
}
.sent-prov-pill.high .pill-risk { background: #fecaca; color: #b91c1c; }
.sent-prov-pill.medium .pill-risk { background: #fde68a; color: #92400e; }
.sent-prov-pill.low .pill-risk { background: #bbf7d0; color: #15803d; }

/* --- 细粒度情绪宫格 (飞书风格 · 统一白色卡片 + 左侧色标) --- */
.sent-emotion-grid {
  display: grid; grid-template-columns: repeat(5, 1fr); gap: 10px;
  margin-bottom: 20px;
}
.sent-emotion-item {
  background: #fff; border-radius: 8px; padding: 12px 14px;
  border: 1px solid #f1f5f9; cursor: pointer;
  transition: all .15s ease; position: relative;
  display: flex; align-items: center; gap: 10px;
}
.sent-emotion-item:hover {
  border-color: var(--em-color, #3370ff);
  box-shadow: 0 2px 8px rgba(0,0,0,.06);
}
.sent-emotion-item.sent-em-active {
  border-color: var(--em-color, #3370ff);
  box-shadow: 0 0 0 1px var(--em-color, #3370ff);
}
.sent-emotion-left {
  width: 36px; height: 36px; border-radius: 8px;
  background: var(--em-bg, #f1f5f9);
  display: flex; align-items: center; justify-content: center;
  font-size: 18px; flex-shrink: 0; color: var(--em-color, #64748b);
}
.sent-emotion-right { flex: 1; min-width: 0; }
.sent-emotion-head2 {
  display: flex; align-items: center; justify-content: space-between;
  margin-bottom: 4px;
}
.sent-emotion-name2 {
  font-size: 13px; font-weight: 600; color: #1e293b;
  white-space: nowrap; overflow: hidden; text-overflow: ellipsis;
}
.sent-emotion-count {
  font-size: 20px; font-weight: 700; color: var(--em-color, #64748b);
  font-variant-numeric: tabular-nums; line-height: 1;
}
.sent-emotion-bar2 {
  height: 4px; background: #f1f5f9; border-radius: 2px; overflow: hidden;
}
.sent-emotion-bar-inner2 {
  height: 100%; background: var(--em-color, #64748b); border-radius: 2px; transition: width .5s ease;
}
.sent-emotion-pct {
  font-size: 11px; color: #94a3b8; margin-top: 2px;
}

/* --- 通用内容面板 --- */
.sent-panel {
  background: #fff; border-radius: 10px; padding: 20px 22px;
  box-shadow: 0 1px 3px rgba(0,0,0,.04); margin-bottom: 20px;
}
.sent-panel-title {
  font-size: 15px; font-weight: 600; color: #1e293b; margin-bottom: 14px;
  display: flex; align-items: center; gap: 8px;
}
.sent-panel-subtitle {
  font-size: 11px; color: #94a3b8; font-weight: 400;
}

/* 图表双栏布局 */
.sent-chart-row {
  display: grid; grid-template-columns: 1fr 1fr; gap: 20px; margin-bottom: 20px;
}

/* 地域热力条 */
.sent-heatmap-row {
  display: flex; align-items: center; gap: 10px; margin-bottom: 10px;
}
.sent-heatmap-label {
  width: 70px; text-align: right; font-size: 12px; color: #64748b; font-weight: 500;
  white-space: nowrap; overflow: hidden; text-overflow: ellipsis;
}
.sent-heatmap-track {
  flex: 1; height: 24px; background: #f1f5f9; border-radius: 4px; overflow: hidden;
}
.sent-heatmap-fill {
  height: 100%; border-radius: 4px; transition: width .4s;
}
.sent-heatmap-value {
  width: 135px; font-size: 11px; color: #94a3b8; flex-shrink: 0;
}

/* 关键词云 */
.sent-keyword-wrap {
  display: flex; flex-wrap: wrap; gap: 8px; align-items: center;
  justify-content: center; min-height: 80px; padding: 8px 0;
}
.sent-keyword-tag {
  cursor: pointer; transition: transform .15s; line-height: 1.4;
}
.sent-keyword-tag:hover {
  transform: scale(1.2); text-shadow: 0 0 8px currentColor;
}

/* ========== 多选下拉 ========== */
.sent-multi-trigger {
  display: inline-flex; align-items: center; gap: 6px;
  padding: 6px 12px; border: 1px solid #e2e8f0; border-radius: 6px;
  background: #fff; font-size: 12px; color: #64748b; cursor: pointer;
  white-space: nowrap; transition: .15s; position: relative; user-select: none;
  min-width: 110px;
}
.sent-multi-trigger:hover { border-color: #3370ff; color: #3370ff; }
.sent-multi-trigger:after {
  content: '▾'; font-size: 9px; margin-left: 2px; transition: transform .2s;
}
.sent-multi-trigger.open:after { transform: rotate(180deg); }
.sent-multi-trigger.has-selection {
  border-color: #3370ff; color: #3370ff; background: #eff6ff;
  font-weight: 600;
}

.sent-multi-dropdown {
  position: absolute; top: calc(100% + 4px); left: 0; z-index: 1000;
  background: #fff; border: 1px solid #e2e8f0; border-radius: 8px;
  box-shadow: 0 8px 24px rgba(0,0,0,.12); width: 320px; max-height: 420px;
  overflow-y: auto; padding: 8px 0; display: none;
}
.sent-multi-dropdown.show { display: block; }

.sent-multi-actions {
  display: flex; gap: 6px; padding: 0 12px 8px;
  border-bottom: 1px solid #f1f5f9; margin-bottom: 4px;
}
.sent-multi-act-btn {
  font-size: 11px; color: #3370ff; cursor: pointer; padding: 2px 6px;
  border-radius: 4px; background: none; border: none;
}
.sent-multi-act-btn:hover { background: #eff6ff; }

.sent-multi-group {
  padding: 0 12px;
}
.sent-multi-group-header {
  display: flex; align-items: center; gap: 8px; padding: 6px 0;
  cursor: pointer; font-size: 12px; border-bottom: 1px solid #f8fafc;
}
.sent-multi-group-name {
  font-weight: 600; color: #334155; flex: 1;
}
.sent-multi-group-arrow {
  font-size: 9px; color: #94a3b8; transition: transform .2s;
}
.sent-multi-group.collapsed .sent-multi-group-arrow { transform: rotate(-90deg); }
.sent-multi-group.collapsed .sent-multi-sub-list { display: none; }
.sent-multi-sub-list {
  padding: 2px 0 4px 24px;
}
.sent-multi-sub-item {
  display: flex; align-items: center; gap: 6px; padding: 4px 0;
  font-size: 12px; color: #64748b; cursor: pointer;
}
.sent-multi-sub-item:hover { color: #334155; }
.sent-multi-cb {
  width: 14px; height: 14px; border: 1.5px solid #cbd5e1; border-radius: 3px;
  flex-shrink: 0; display: flex; align-items: center; justify-content: center;
  transition: .15s;
}
.sent-multi-cb.checked {
  background: #3370ff; border-color: #3370ff;
}
.sent-multi-cb.checked:after {
  content: '✓'; color: #fff; font-size: 9px; font-weight: 700;
}

/* 医疗词库4宫格 */
.sent-dict-grid {
  display: grid; grid-template-columns: repeat(4, 1fr); gap: 12px;
}
.sent-dict-item {
  border-radius: 8px; padding: 14px;
}
.sent-dict-item-title {
  font-size: 11px; font-weight: 600; margin-bottom: 8px;
}
.sent-dict-item-words {
  font-size: 12px; line-height: 1.8; color: #64748b;
}

/* 响应式 */
@media (max-width: 1200px) { .sent-kpi-grid { grid-template-columns: repeat(3, 1fr); } .sent-emotion-grid { grid-template-columns: repeat(3, 1fr); } }
@media (max-width: 768px) { .sent-kpi-grid { grid-template-columns: repeat(2, 1fr); } .sent-emotion-grid { grid-template-columns: repeat(2, 1fr); } .sent-chart-row { grid-template-columns: 1fr; } .sent-ai-card { flex-direction: column; } .sent-ai-left { border-right: none; padding-right: 0; border-bottom: 1px solid rgba(139,92,246,.15); padding-bottom: 16px; } .sent-dict-grid { grid-template-columns: repeat(2, 1fr); } }

/* ===================== 通用卡片 ===================== */
.card {
  background: var(--bg-white);
  border-radius: var(--radius);
  padding: 24px;
  box-shadow: var(--shadow-sm);
  margin-bottom: 16px;
  border: 1px solid var(--border-card);
  transition: box-shadow var(--transition);
}
.card:hover { box-shadow: var(--shadow); }
.card-title {
  font-size: var(--font-size-md);
  font-weight: 600;
  margin-bottom: 16px;
  display: flex;
  align-items: center;
  gap: 8px;
  color: var(--text-primary);
}

/* 旧版 card 头/体 */
.card-header {
  padding: 14px 20px;
  border-bottom: 1px solid var(--border-light);
  display: flex;
  align-items: center;
  justify-content: space-between;
  background: var(--bg-card-header);
  border-radius: var(--radius) var(--radius) 0 0;
}
.card-header h3 { font-size: var(--font-size-base); font-weight: 600; color: var(--text-primary); }
.card-body { padding: 16px 20px; }

/* ===================== 表格 - 飞书风格 ===================== */
.table-wrap {
  overflow-x: auto;
  border-radius: var(--radius);
  border: 1px solid var(--border-card);
  box-shadow: var(--shadow-sm);
}
table { width: 100%; border-collapse: collapse; font-size: var(--font-size-base); }
th {
  background: var(--bg-card-header);
  color: var(--text-primary);
  padding: 10px 16px;
  text-align: left;
  font-weight: 600;
  border-bottom: 1px solid var(--border-card);
  white-space: nowrap;
  font-size: var(--font-size-sm);
  height: 44px;
}
td {
  padding: 12px 16px;
  border-bottom: 1px solid var(--border-light);
  vertical-align: middle;
  color: var(--text-primary);
  height: 48px;
}
tr:last-child td { border-bottom: none; }
tr:hover td { background: var(--bg-card-header); transition: background var(--transition-fast); }

/* ===================== 徽章 - 飞书Badge风格 ===================== */
.badge {
  display: inline-flex; align-items: center; gap: 2px;
  padding: 2px 8px; border-radius: 2px;
  font-size: var(--font-size-xs); font-weight: 400; line-height: 20px;
}
.badge-danger { background: var(--danger-light-solid); color: var(--danger); }
.badge-warning { background: var(--warning-light-solid); color: var(--warning-dark); }
.badge-success { background: var(--success-light-solid); color: var(--success-dark); }
.badge-primary { background: var(--primary-light-solid); color: var(--primary); }
.badge-gray { background: var(--bg-body); color: var(--text-tertiary); }

/* FS徽章别名 */
.fs-badge { display: inline-flex; align-items: center; padding: 2px 8px; border-radius: 2px; font-size: var(--font-size-xs); font-weight: 400; line-height: 20px; }
.fs-badge-blue { background: var(--primary-light-solid); color: var(--primary); }
.fs-badge-red { background: var(--danger-light-solid); color: var(--danger); }
.fs-badge-orange { background: var(--warning-light-solid); color: var(--warning-dark); }
.fs-badge-green { background: var(--success-light-solid); color: var(--success-dark); }
.fs-badge-gray { background: var(--bg-body); color: var(--text-tertiary); }
.fs-badge-xs { font-size: 10px; padding: 1px 6px; }

/* ===================== 按钮 - 飞书风格 ===================== */
.btn-primary {
  display: inline-flex; align-items: center; justify-content: center; gap: 6px;
  background: var(--primary); color: #fff;
  padding: 8px 20px; border-radius: var(--radius-sm);
  font-size: var(--font-size-base); font-weight: 500;
  transition: all var(--transition);
  letter-spacing: 0.2px; height: 36px; line-height: 1;
  white-space: nowrap;
}
.btn-primary:hover {
  background: var(--primary-dark);
  box-shadow: var(--shadow-button);
}
.btn-primary:active {
  background: var(--primary-active);
  transform: scale(0.98);
}
.btn-primary.full-width { width: 100%; padding: 8px; justify-content: center; }

.btn-secondary {
  display: inline-flex; align-items: center; justify-content: center; gap: 6px;
  background: var(--bg-white); color: var(--text-primary);
  padding: 8px 20px; border-radius: var(--radius-sm);
  font-size: var(--font-size-base); font-weight: 400;
  border: 1px solid var(--border-control);
  transition: all var(--transition); height: 36px; line-height: 1;
  white-space: nowrap;
}
.btn-secondary:hover {
  border-color: var(--primary); color: var(--primary);
  background: var(--primary-light);
}

.btn-danger {
  display: inline-flex; align-items: center; justify-content: center; gap: 6px;
  background: var(--danger); color: #fff;
  padding: 6px 16px; border-radius: var(--radius-sm);
  font-size: var(--font-size-sm); font-weight: 500;
  transition: all var(--transition); height: 32px; line-height: 1;
  white-space: nowrap;
}
.btn-danger:hover { background: var(--danger-dark); }
.btn-sm { padding: 4px 12px; font-size: var(--font-size-sm); height: 30px; }
.btn-xs { padding: 2px 8px; font-size: var(--font-size-xs); height: 24px; }

.btn-outline {
  display: inline-flex; align-items: center; justify-content: center; gap: 6px;
  background: transparent; border: 1px solid var(--border-control);
  color: var(--text-primary); padding: 6px 16px;
  border-radius: var(--radius-sm); font-size: var(--font-size-sm);
  font-weight: 400; transition: all var(--transition);
  height: 32px; line-height: 1; white-space: nowrap;
}
.btn-outline:hover {
  border-color: var(--primary); color: var(--primary);
  background: var(--primary-light);
}

.btn-text {
  display: inline-flex; align-items: center; gap: 4px;
  background: transparent; color: var(--primary);
  padding: 4px 8px; border-radius: var(--radius-xs);
  font-size: var(--font-size-sm); font-weight: 400;
  transition: all var(--transition-fast); border: none;
}
.btn-text:hover { background: var(--primary-light); }

/* FS按钮别名 */
.fs-btn {
  display: inline-flex; align-items: center; justify-content: center; gap: 6px;
  padding: 8px 20px; border-radius: var(--radius-sm);
  font-size: var(--font-size-base); font-weight: 500;
  cursor: pointer; border: none;
  transition: all var(--transition);
  font-family: inherit; letter-spacing: 0.2px;
  height: 36px; line-height: 1; white-space: nowrap;
}
.fs-btn-primary { background: var(--primary); color: #fff; }
.fs-btn-primary:hover { background: var(--primary-dark); box-shadow: var(--shadow-button); }
.fs-btn-primary:active { background: var(--primary-active); transform: scale(0.98); }
.fs-btn-secondary {
  background: var(--bg-body); color: var(--text-primary);
  border: 1px solid var(--border-control); font-weight: 400;
}
.fs-btn-secondary:hover {
  background: var(--bg-hover); border-color: var(--primary); color: var(--primary);
}
.fs-btn-danger { background: var(--danger); color: #fff; }
.fs-btn-danger:hover { background: var(--danger-dark); }
.fs-btn-sm { padding: 4px 12px; font-size: var(--font-size-sm); border-radius: var(--radius-sm); height: 30px; }
.fs-btn-xs { padding: 2px 8px; font-size: var(--font-size-xs); border-radius: var(--radius-xs); height: 24px; }

/* ===================== 搜索/过滤栏 ===================== */
.filter-bar {
  display: flex; flex-wrap: wrap; gap: 8px;
  margin-bottom: 16px; align-items: center;
}
.filter-bar input, .filter-bar select {
  padding: 7px 12px; border: 1px solid var(--border-control);
  border-radius: var(--radius-sm); font-size: var(--font-size-sm);
  background: var(--bg-white); color: var(--text-primary);
  transition: all var(--transition-fast); height: 36px;
}
.filter-bar input:focus, .filter-bar select:focus {
  border-color: var(--primary);
  box-shadow: 0 0 0 2px var(--primary-light);
}
.filter-bar input { min-width: 180px; flex: 1; }

/* ===================== 分页 - 飞书风格 ===================== */
.pagination {
  display: flex; gap: 4px; justify-content: center;
  margin-top: 20px; flex-wrap: wrap; align-items: center;
}
.pagination button, .page-btn {
  padding: 5px 12px;
  border: 1px solid var(--border-control);
  border-radius: var(--radius-xs);
  font-size: var(--font-size-sm);
  background: var(--bg-white);
  color: var(--text-primary);
  cursor: pointer;
  transition: all var(--transition-fast);
  height: 32px; min-width: 32px;
  display: inline-flex; align-items: center; justify-content: center;
}
.pagination button.active, .pagination button:hover:not(:disabled),
.page-btn.active, .page-btn:hover:not(:disabled) {
  background: var(--primary); color: #fff;
  border-color: var(--primary);
}
.page-btn:disabled { opacity: 0.4; cursor: not-allowed; }

/* ===================== 弹窗 - 飞书Modal风格 ===================== */
.modal-overlay {
  position: fixed; inset: 0;
  background: rgba(0, 0, 0, 0.5);
  z-index: 1000;
  display: flex; align-items: flex-start; justify-content: center;
  padding: 32px;
  overflow-y: auto;
  animation: modalFadeIn 0.2s ease;
}
.modal {
  background: var(--bg-white);
  border-radius: var(--radius-lg);
  width: 100%;
  max-height: 85vh;
  overflow: hidden;
  box-shadow: var(--shadow-modal);
  display: flex; flex-direction: column;
}
.modal-sm { max-width: 440px; }
.modal-md { max-width: 640px; }
.modal-lg { max-width: 860px; }
.modal-xl { max-width: 1080px; }

/* 弹窗头部 */
.modal-header {
  padding: 20px 24px;
  border-bottom: 1px solid var(--border-card);
  display: flex; align-items: center; justify-content: space-between;
  flex-shrink: 0;
  background: var(--bg-white);
}
.modal-header h3 {
  font-size: var(--font-size-md); font-weight: 600; color: var(--text-primary);
  line-height: 24px;
}
.modal-close {
  background: none; border: none;
  width: 32px; height: 32px;
  display: flex; align-items: center; justify-content: center;
  border-radius: var(--radius-sm);
  color: var(--text-tertiary); font-size: 18px;
  cursor: pointer; transition: all var(--transition-fast);
  flex-shrink: 0;
}
.modal-close:hover {
  background: var(--bg-hover);
  color: var(--text-primary);
}

/* 弹窗内容 */
.modal-body {
  padding: 24px;
  overflow-y: auto; flex: 1;
  min-height: 0;
  background: var(--bg-white);
}

/* 弹窗底部 */
.modal-footer {
  padding: 14px 24px;
  border-top: 1px solid var(--border-card);
  display: flex; justify-content: flex-end; gap: 8px;
  flex-shrink: 0;
  background: var(--bg-white);
}

/* FS弹窗样式 */
.fs-modal-overlay {
  position: fixed; inset: 0;
  background: rgba(0, 0, 0, 0.5);
  z-index: 1000;
  display: flex; align-items: flex-start; justify-content: center;
  padding: 32px;
  overflow-y: auto;
  animation: modalFadeIn 0.2s ease;
}
.fs-modal {
  background: var(--bg-white);
  border-radius: var(--radius-lg);
  width: 100%;
  max-height: 85vh;
  overflow: hidden;
  box-shadow: var(--shadow-modal);
  display: flex; flex-direction: column;
}
.fs-modal-header {
  padding: 20px 24px;
  border-bottom: 1px solid var(--border-card);
  display: flex; align-items: center; justify-content: space-between;
  flex-shrink: 0;
}
.fs-modal-header h3, .fs-modal-header h4 {
  font-size: var(--font-size-md); font-weight: 600; color: var(--text-primary);
}
.fs-modal-body { padding: 24px; overflow-y: auto; flex: 1; min-height: 0; }
.fs-modal-footer {
  padding: 14px 24px;
  border-top: 1px solid var(--border-card);
  display: flex; justify-content: flex-end; gap: 8px;
  flex-shrink: 0;
}

/* FS弹窗关闭按钮 */
.fs-modal-close {
  background: none; border: none;
  width: 32px; height: 32px;
  display: flex; align-items: center; justify-content: center;
  border-radius: var(--radius-sm);
  color: var(--text-tertiary); font-size: 18px;
  cursor: pointer; transition: all var(--transition-fast);
  flex-shrink: 0;
}
.fs-modal-close:hover {
  background: var(--bg-hover);
  color: var(--text-primary);
}

/* ===================== Toast 通知 ===================== */
.toast-container, #toast-container {
  position: fixed; top: 20px; right: 20px;
  z-index: 9999;
  display: flex; flex-direction: column; gap: 8px;
  pointer-events: none;
}
.toast {
  padding: 10px 20px; border-radius: var(--radius-sm);
  font-size: var(--font-size-sm); font-weight: 400;
  color: #fff;
  box-shadow: var(--shadow-lg);
  animation: toastSlideIn 0.25s ease;
  max-width: 360px; pointer-events: auto;
}
.toast-success, .toast.success { background: var(--success); }
.toast-error, .toast.error { background: var(--danger); }
.toast-warning, .toast.warning { background: var(--warning); }
.toast-info, .toast.info { background: var(--primary); }

/* ===================== 标签页 - 飞书风格 ===================== */
.tabs {
  display: flex; gap: 0;
  border-bottom: 1px solid var(--border-card);
  margin-bottom: 20px;
}
.tab-btn, .fs-tab {
  padding: 10px 16px;
  font-size: var(--font-size-sm);
  font-weight: 400;
  color: var(--text-secondary);
  border-bottom: 2px solid transparent;
  margin-bottom: -1px;
  background: none;
  cursor: pointer;
  transition: all var(--transition-fast);
}
.tab-btn.active, .fs-tab.active {
  color: var(--primary);
  border-bottom-color: var(--primary);
  font-weight: 500;
}
.tab-btn:hover, .fs-tab:hover { color: var(--primary); }

/* ===================== 标签列表/芯片 ===================== */
.tag, .tag-list {
  display: inline-flex; flex-wrap: wrap; gap: 4px;
}
.tag {
  background: var(--primary-light-solid); color: var(--primary);
  padding: 2px 8px; border-radius: 2px;
  font-size: var(--font-size-xs); font-weight: 400;
}
.tags-wrap { display: flex; gap: 4px; flex-wrap: wrap; }

/* ===================== 表单 - 飞书风格 ===================== */
.form-group { margin-bottom: 16px; }
.form-group label {
  display: block;
  font-size: var(--font-size-sm);
  font-weight: 400;
  color: var(--text-secondary);
  margin-bottom: 6px;
}
.form-group input, .form-group select, .form-group textarea {
  width: 100%; padding: 7px 12px;
  border: 1px solid var(--border-control);
  border-radius: var(--radius-sm);
  font-size: var(--font-size-base);
  background: var(--bg-white);
  color: var(--text-primary);
  transition: all var(--transition-fast);
}
.form-group input:focus, .form-group select:focus, .form-group textarea:focus {
  border-color: var(--primary);
  box-shadow: 0 0 0 2px var(--primary-light);
}
.form-group input::placeholder { color: var(--text-tertiary); }
.form-group textarea { min-height: 80px; resize: vertical; }

/* 表单行布局 */
.form-row { display: grid; grid-template-columns: 1fr 1fr; gap: 16px; }

/* FS输入组件别名 */
.fs-input {
  width: 100%; padding: 7px 12px;
  border: 1px solid var(--border-control);
  border-radius: var(--radius-sm);
  font-size: var(--font-size-base);
  background: var(--bg-white);
  color: var(--text-primary);
  transition: all var(--transition-fast);
  font-family: inherit; outline: none;
}
.fs-input:focus {
  border-color: var(--primary);
  box-shadow: 0 0 0 2px var(--primary-light);
}
.fs-input::placeholder { color: var(--text-tertiary); }
.fs-select {
  width: 100%; padding: 7px 12px;
  border: 1px solid var(--border-control);
  border-radius: var(--radius-sm);
  font-size: var(--font-size-sm);
  background: var(--bg-white);
  color: var(--text-primary);
  cursor: pointer;
  font-family: inherit; outline: none;
}
.fs-select:focus { border-color: var(--primary); box-shadow: 0 0 0 2px var(--primary-light); }
.fs-label {
  display: block;
  font-size: var(--font-size-sm);
  font-weight: 400;
  color: var(--text-secondary);
  margin-bottom: 6px;
}

/* 表单分段 */
.form-section {
  margin-bottom: 16px; border: 1px solid var(--border-card);
  border-radius: var(--radius-sm); overflow: hidden;
}
.form-section-title {
  font-size: var(--font-size-sm);
  font-weight: 600;
  padding: 10px 14px;
  background: var(--bg-card-header);
  color: var(--text-primary);
  border-bottom: 1px solid var(--border-card);
}

/* ===================== 图表面板 ===================== */
.chart-grid { display: grid; grid-template-columns: 1fr 1fr; gap: 16px; margin-bottom: 24px; }
.chart-card {
  background: var(--bg-white);
  border-radius: var(--radius);
  padding: 20px;
  box-shadow: var(--shadow-sm);
  border: 1px solid var(--border-card);
}
.chart-card h3, .chart-card h4 {
  font-size: var(--font-size-base);
  font-weight: 600;
  margin-bottom: 14px;
  color: var(--text-primary);
}
.chart-canvas-wrap { height: 220px; position: relative; }
@media (max-width: 768px) { .chart-grid { grid-template-columns: 1fr; } }

/* ===================== 大屏 (暗色仪表盘) ===================== */
.big-screen {
  padding: 20px;
  background: var(--n900);
  height: calc(100vh - 96px);
  overflow-y: auto;
  color: #C9CDD4;
}
.big-screen::-webkit-scrollbar { width: 6px; }
.big-screen::-webkit-scrollbar-track { background: #2B2F36; }
.big-screen::-webkit-scrollbar-thumb { background: var(--primary); border-radius: 3px; }
.bs-stats-grid {
  display: grid;
  grid-template-columns: repeat(8,1fr);
  gap: 10px; margin-bottom: 14px;
}
.bs-stat-card {
  border-radius: var(--radius-sm);
  padding: 12px 8px; text-align: center;
  position: relative; overflow: hidden;
}
.bs-stat-card.bs-blue { background: linear-gradient(135deg, #0A2DA6, #1456F0); color: #fff; }
.bs-stat-card.bs-red { background: linear-gradient(135deg, #CB2634, #F53F3F); color: #fff; }
.bs-stat-card.bs-orange { background: linear-gradient(135deg, #D25F00, #FF7D00); color: #fff; }
.bs-stat-card.bs-green { background: linear-gradient(135deg, #009A29, #00B42C); color: #fff; }
.bs-stat-card.bs-purple { background: linear-gradient(135deg, #531DAB, #722ED1); color: #fff; }
.bs-stat-card.bs-teal { background: linear-gradient(135deg, #008585, #14C9C9); color: #fff; }
.bs-stat-card.bs-indigo { background: linear-gradient(135deg, #1D39C4, #597EF7); color: #fff; }
.bs-stat-card.bs-gray { background: linear-gradient(135deg, #363940, #5A5E66); color: #fff; }
.bs-stat-icon { font-size: 18px; margin-bottom: 4px; display: inline-flex; align-items: center; justify-content: center; }
.bs-stat-icon .fi-icon, .bs-stat-icon .fi-replaced { color: rgba(255,255,255,0.9); }
.bs-stat-label { font-size: var(--font-size-xs); opacity: 0.75; }
.bs-stat-value { font-size: 22px; font-weight: 700; }
.bs-stat-sub { font-size: 10px; opacity: 0.65; margin-top: 3px; }
.bs-body { display: grid; grid-template-columns: 1fr 300px; gap: 14px; margin-bottom: 14px; }
.bs-map-panel { background: #2B2F36; border-radius: var(--radius-sm); padding: 14px; }
.bs-map-legend { display: flex; gap: 14px; padding: 8px; color: var(--text-tertiary); font-size: var(--font-size-xs); margin-top: 6px; }
.bs-legend-i { display: inline-block; width: 10px; height: 10px; border-radius: 2px; margin-right: 3px; vertical-align: middle; }
.bs-right-panel { display: flex; flex-direction: column; gap: 14px; }
.bs-chart-card { background: #2B2F36; border-radius: var(--radius-sm); padding: 12px; }
.bs-chart-card h4 { color: #C9CDD4; font-size: var(--font-size-sm); margin: 0 0 8px 0; }
.bs-bottom { display: grid; grid-template-columns: 1fr 1fr; gap: 14px; }
.bs-province-list, .bs-recent-reports { background: #2B2F36; border-radius: var(--radius-sm); padding: 14px; }
.bs-province-list h4, .bs-recent-reports h4 { color: #C9CDD4; font-size: var(--font-size-sm); margin: 0 0 10px 0; }
.bs-province-row { display: flex; justify-content: space-between; padding: 5px 0; border-bottom: 1px solid #363940; color: var(--text-tertiary); font-size: var(--font-size-xs); cursor: pointer; }
.bs-province-row:hover { color: var(--primary); }
.bs-recent-item { padding: 7px 0; border-bottom: 1px solid #363940; font-size: var(--font-size-xs); color: var(--text-tertiary); display: flex; justify-content: space-between; }

/* ===================== 违规报告卡片 ===================== */
.report-card {
  background: var(--bg-white);
  border-radius: var(--radius);
  padding: 16px 20px;
  box-shadow: var(--shadow-sm);
  margin-bottom: 10px;
  border: 1px solid var(--border-card);
  border-left: 3px solid var(--primary);
  transition: all var(--transition);
  cursor: pointer;
}
.report-card:hover {
  box-shadow: var(--shadow);
  border-left-color: var(--primary-dark);
  transform: translateX(2px);
}
.report-card.danger { border-left-color: var(--danger); }
.report-card.warning { border-left-color: var(--warning); }
.report-card .report-title {
  font-size: var(--font-size-base);
  font-weight: 600;
  margin-bottom: 6px;
  color: var(--text-primary);
}
.report-card .report-meta {
  font-size: var(--font-size-sm);
  color: var(--text-secondary);
  display: flex; gap: 12px; flex-wrap: wrap;
}

/* 风险等级徽章 */
.risk-badge-重大 { background: var(--danger-light-solid); color: var(--danger); padding: 2px 8px; border-radius: 2px; font-size: var(--font-size-xs); font-weight: 400; }
.risk-badge-较大 { background: var(--warning-light-solid); color: var(--warning-dark); padding: 2px 8px; border-radius: 2px; font-size: var(--font-size-xs); font-weight: 400; }
.risk-badge-一般 { background: var(--success-light-solid); color: var(--success-dark); padding: 2px 8px; border-radius: 2px; font-size: var(--font-size-xs); font-weight: 400; }
.risk-badge-轻微 { background: var(--primary-light-solid); color: var(--primary); padding: 2px 8px; border-radius: 2px; font-size: var(--font-size-xs); font-weight: 400; }

/* ===================== 特征库多模态标签 ===================== */
.media-tabs { display: flex; gap: 4px; margin-bottom: 10px; flex-wrap: wrap; }
.media-tab {
  padding: 5px 12px; border-radius: var(--radius-xs);
  font-size: var(--font-size-sm); font-weight: 400;
  background: var(--bg-body); color: var(--text-secondary);
  cursor: pointer; border: 1px solid transparent;
  transition: all var(--transition-fast);
}
.media-tab.active {
  background: var(--primary-light-solid); color: var(--primary);
  border-color: var(--primary); font-weight: 500;
}
.media-tab:hover:not(.active) { background: var(--bg-hover); }
.feature-grid { display: grid; grid-template-columns: repeat(auto-fill, minmax(320px, 1fr)); gap: 16px; }
.feature-card {
  background: var(--bg-white); border-radius: var(--radius);
  padding: 16px; box-shadow: var(--shadow-sm);
  border: 1px solid var(--border-card);
  transition: all var(--transition); cursor: pointer;
}
.feature-card:hover { box-shadow: var(--shadow); transform: translateY(-2px); }
.feature-card.risk-重大 { border-top: 3px solid var(--danger); }
.feature-card.risk-较大 { border-top: 3px solid var(--warning); }
.feature-card.risk-一般 { border-top: 3px solid var(--primary); }
.feature-card.risk-轻微 { border-top: 3px solid var(--success); }
.feature-card-header { display: flex; align-items: flex-start; justify-content: space-between; margin-bottom: 10px; }
.feature-card-title { font-weight: 600; font-size: var(--font-size-base); color: var(--text-primary); }
.feature-card-meta { font-size: var(--font-size-sm); color: var(--text-secondary); margin-bottom: 8px; display: flex; gap: 8px; flex-wrap: wrap; }
.feature-card-text { font-size: var(--font-size-sm); color: var(--text-secondary); line-height: 1.5; margin-bottom: 10px; display: -webkit-box; -webkit-line-clamp: 2; -webkit-box-orient: vertical; overflow: hidden; }
.feature-card-footer { display: flex; gap: 4px; flex-wrap: wrap; margin-top: 8px; }

/* ===================== 上传区域 ===================== */
.file-upload-area {
  border: 1px dashed var(--border-control);
  border-radius: var(--radius);
  padding: 28px 20px;
  text-align: center;
  cursor: pointer;
  transition: all var(--transition);
  background: var(--bg-body);
  position: relative;
}
.file-upload-area:hover, .file-upload-area.dragover {
  border-color: var(--primary);
  background: var(--primary-light);
}
.file-upload-area .upload-icon { font-size: 32px; margin-bottom: 8px; opacity: 0.4; }
.file-upload-area .upload-text { font-size: var(--font-size-base); color: var(--text-secondary); }
.file-upload-area .upload-hint { font-size: var(--font-size-sm); color: var(--text-tertiary); margin-top: 4px; }
.file-upload-area input[type="file"] { position: absolute; inset: 0; opacity: 0; cursor: pointer; }
.file-preview-list { display: flex; flex-wrap: wrap; gap: 6px; margin-top: 8px; }
.file-preview-item { display: flex; align-items: center; gap: 6px; background: var(--bg-body); padding: 5px 10px; border-radius: var(--radius-xs); font-size: var(--font-size-sm); color: var(--text-primary); }
.file-preview-item .remove-btn { background: none; color: var(--danger); cursor: pointer; font-size: 12px; padding: 0 2px; line-height: 1; }

/* ===================== 证据卡片 ===================== */
.evidence-card {
  background: var(--bg-white); border-radius: var(--radius);
  padding: 16px 20px; box-shadow: var(--shadow-sm);
  margin-bottom: 10px;
  display: flex; align-items: center; gap: 14px;
  transition: all var(--transition);
  cursor: pointer; border: 1px solid var(--border-card);
}
.evidence-card:hover {
  box-shadow: var(--shadow);
  border-color: var(--primary);
}
.evidence-icon {
  width: 44px; height: 44px; border-radius: var(--radius-sm);
  display: flex; align-items: center; justify-content: center;
  font-size: 20px; flex-shrink: 0;
}
.evidence-icon.video { background: var(--danger-light); color: var(--danger); }
.evidence-icon.image { background: var(--primary-light); color: var(--primary); }
.evidence-icon.pdf { background: var(--warning-light); color: var(--warning-dark); }
.evidence-icon.article { background: var(--success-light); color: var(--success-dark); }
.evidence-icon.other { background: var(--bg-body); color: var(--text-tertiary); }
.evidence-info { flex: 1; min-width: 0; }
.evidence-info .ev-title { font-size: var(--font-size-base); font-weight: 500; margin-bottom: 4px; color: var(--text-primary); }
.evidence-info .ev-meta { font-size: var(--font-size-sm); color: var(--text-secondary); display: flex; gap: 8px; flex-wrap: wrap; }
.evidence-actions { display: flex; gap: 6px; flex-shrink: 0; }

/* ===================== 配置面板 ===================== */
.config-panel { display: flex; gap: 14px; min-height: 400px; }
.config-sidebar { width: 190px; min-width: 190px; background: var(--bg-body); border-radius: var(--radius-sm); padding: 4px; border: 1px solid var(--border-card); }
.config-main { flex: 1; background: var(--bg-white); border-radius: var(--radius-sm); padding: 16px; border: 1px solid var(--border-card); }
.config-cat-item { padding: 8px 12px; border-radius: var(--radius-xs); font-size: var(--font-size-sm); cursor: pointer; transition: all var(--transition-fast); margin: 1px 0; color: var(--text-primary); }
.config-cat-item:hover { background: var(--bg-hover); }
.config-cat-item.active { background: var(--primary); color: #fff; font-weight: 500; }
.subtype-row { display: flex; align-items: center; justify-content: space-between; padding: 8px 12px; border-bottom: 1px solid var(--border-light); font-size: var(--font-size-sm); color: var(--text-primary); }
.subtype-row:last-child { border-bottom: none; }
.subtype-actions { display: flex; gap: 6px; }

/* ===================== 其他组件 ===================== */
/* 加载 */
.loading, .fs-loading { text-align: center; padding: 48px; color: var(--text-tertiary); font-size: var(--font-size-sm); }

/* 空状态 */
.empty-state, .fs-empty {
  text-align: center; padding: 64px 20px;
  color: var(--text-tertiary); font-size: var(--font-size-base);
}
.empty-state .empty-icon, .fs-empty-icon { font-size: 48px; margin-bottom: 12px; opacity: 0.3; }
.empty-state small { display: block; margin-top: 6px; font-size: var(--font-size-sm); color: var(--text-disabled); }

/* 头像 */
.avatar {
  width: 32px; height: 32px; border-radius: 50%;
  background: var(--primary); color: #fff;
  display: flex; align-items: center; justify-content: center;
  font-size: var(--font-size-sm); font-weight: 600; flex-shrink: 0;
}

/* 建议面板 */
.suggestion-panel { background: var(--primary-light-solid); border: 1px solid var(--border-card); border-radius: var(--radius); padding: 14px 18px; margin-bottom: 16px; }
.suggestion-panel .sug-title { font-size: var(--font-size-sm); font-weight: 600; color: var(--text-primary); margin-bottom: 8px; }
.suggestion-item { display: flex; align-items: center; justify-content: space-between; padding: 8px 10px; background: var(--bg-white); border-radius: var(--radius-xs); margin-bottom: 4px; font-size: var(--font-size-sm); color: var(--text-primary); border: 1px solid var(--border-light); }
.suggestion-item:last-child { margin-bottom: 0; }
.sug-badge { padding: 2px 8px; border-radius: 2px; font-size: var(--font-size-xs); font-weight: 400; }
.sug-badge.accept { background: var(--primary-light-solid); color: var(--primary); cursor: pointer; border: 1px solid transparent; transition: all var(--transition-fast); }
.sug-badge.accept:hover { background: var(--primary); color: #fff; }

/* 标签编辑器 */
.tag-editor { display: flex; flex-wrap: wrap; gap: 6px; padding: 8px 12px; border: 1px solid var(--border-control); border-radius: var(--radius-sm); min-height: 40px; align-items: center; background: var(--bg-white); transition: border-color var(--transition); }
.tag-editor:focus-within { border-color: var(--primary); box-shadow: 0 0 0 2px var(--primary-light); }
.tag-editor .tag-item { display: flex; align-items: center; gap: 4px; padding: 2px 8px; background: var(--primary-light-solid); border-radius: 2px; font-size: var(--font-size-xs); color: var(--primary); font-weight: 400; }
.tag-editor .tag-item .tag-remove { background: none; color: var(--primary); cursor: pointer; font-size: 12px; padding: 0 2px; line-height: 1; }
.tag-editor input.tag-input { flex: 1; min-width: 100px; border: none; padding: 4px; font-size: var(--font-size-sm); outline: none; background: transparent; color: var(--text-primary); }

/* 组织树 */
.org-tree { border: 1px solid var(--border-card); border-radius: var(--radius); overflow: hidden; background: var(--bg-white); box-shadow: var(--shadow-sm); }
.org-node { border-bottom: 1px solid var(--border-light); }
.org-node:last-child { border-bottom: none; }
.org-node-header { display: flex; align-items: center; gap: 8px; padding: 10px 12px; cursor: pointer; transition: background var(--transition-fast); }
.org-node-header:hover { background: var(--bg-hover); }
.org-inactive .org-node-header { opacity: 0.5; }
.org-expand-icon { font-size: 10px; width: 16px; color: var(--text-tertiary); flex-shrink: 0; text-align: center; }
.org-icon { font-size: 15px; flex-shrink: 0; }
.org-info { flex: 1; min-width: 0; }
.org-name { font-size: var(--font-size-sm); font-weight: 500; display: flex; align-items: center; gap: 6px; color: var(--text-primary); }
.org-meta { font-size: var(--font-size-xs); color: var(--text-tertiary); margin-top: 2px; }
.org-children { border-left: 1px solid var(--border-card); margin-left: 16px; }
.org-detail-grid { display: grid; grid-template-columns: 1fr 1fr; gap: 12px; }

/* 多模态 */
.feature-media-grid { display: grid; grid-template-columns: repeat(auto-fit, minmax(160px, 1fr)); gap: 10px; margin-top: 10px; }
.feature-media-card { background: var(--bg-body); border-radius: var(--radius-sm); padding: 12px; border: 1px solid var(--border-light); }
.feature-media-card .media-type-icon { font-size: 20px; margin-bottom: 4px; }
.feature-media-card .media-type-label { font-size: 10px; font-weight: 500; color: var(--text-secondary); margin-bottom: 4px; }
.feature-media-card .media-content { font-size: var(--font-size-sm); color: var(--text-primary); line-height: 1.5; }
.feature-media-card.has-content { border-color: var(--primary); background: var(--primary-light); }

/* 情感标签 */
.emotion-tags { display: flex; flex-wrap: wrap; gap: 6px; }
.emotion-tag { padding: 4px 10px; border-radius: var(--radius-xs); font-size: var(--font-size-sm); background: var(--warning-light-solid); color: var(--warning-dark); cursor: pointer; border: 1px solid #FFD591; transition: all var(--transition-fast); }
.emotion-tag.selected { background: var(--warning); color: #fff; border-color: var(--warning); }
.emotion-tag.custom { border-style: dashed; border-color: #1456F0; background: #eff6ff; color: #1456F0; }
.emotion-tag.custom.selected { background: #1456F0; color: #fff; border-color: #1456F0; border-style: solid; }

/* 复选框网格 */
.checkbox-grid { display: grid; grid-template-columns: repeat(auto-fill, minmax(150px, 1fr)); gap: 4px 14px; padding: 6px 0; }
.checkbox-label { display: inline-flex; align-items: center; gap: 6px; font-size: var(--font-size-sm); cursor: pointer; padding: 4px 6px; border-radius: var(--radius-xs); transition: all var(--transition-fast); white-space: nowrap; color: var(--text-primary); }
.checkbox-label:hover { background: var(--bg-hover); }
.checkbox-label input[type=checkbox] { accent-color: var(--primary); width: 14px; height: 14px; flex-shrink: 0; margin: 0; }

/* 子类型标签 */
.subtype-tags { display: flex; flex-wrap: wrap; gap: 4px; max-height: 160px; overflow-y: auto; padding: 4px 0; }
.subtype-tag { display: inline-flex; align-items: center; gap: 4px; padding: 4px 10px; border: 1px solid var(--border-control); border-radius: var(--radius-xs); font-size: var(--font-size-sm); cursor: pointer; transition: all var(--transition-fast); background: var(--bg-white); user-select: none; line-height: 1.4; color: var(--text-primary); }
.subtype-tag:hover { border-color: var(--primary); background: var(--primary-light); }
.subtype-tag.checked { border-color: var(--primary); background: var(--primary); color: #fff; }
.subtype-tag .tag-check { font-size: 10px; opacity: 0; transition: all var(--transition-fast); }
.subtype-tag.checked .tag-check { opacity: 1; }
.subtype-group-label { font-weight: 500; font-size: var(--font-size-xs); color: var(--text-secondary); padding: 4px 2px 0; margin-top: 2px; width: 100%; }
.checkbox-item { display: flex; align-items: center; gap: 6px; padding: 5px 8px; border-radius: var(--radius-xs); cursor: pointer; font-size: var(--font-size-sm); transition: all var(--transition-fast); border: 1px solid transparent; color: var(--text-primary); }
.checkbox-item:hover { background: var(--bg-hover); }
.checkbox-item.checked { background: var(--primary-light); border-color: var(--primary); color: var(--primary); }
.checkbox-item input[type="checkbox"] { display: none; }

/* 自动补全 */
.autocomplete-wrapper { position: relative; }
.autocomplete-wrapper input { width: 100%; padding: 7px 12px; border: 1px solid var(--border-control); border-radius: var(--radius-sm); font-size: var(--font-size-sm); background: var(--bg-white); }
.autocomplete-wrapper input:focus { border-color: var(--primary); outline: none; box-shadow: 0 0 0 2px var(--primary-light); }
.ac-dropdown { position: absolute; top: 100%; left: 0; right: 0; max-height: 200px; overflow-y: auto; background: var(--bg-white); border: 1px solid var(--primary); border-top: none; border-radius: 0 0 var(--radius-sm) var(--radius-sm); z-index: 1001; box-shadow: var(--shadow-lg); display: none; }
.ac-dropdown .ac-item { padding: 8px 12px; cursor: pointer; font-size: var(--font-size-sm); transition: all var(--transition-fast); display: flex; justify-content: space-between; align-items: center; color: var(--text-primary); }
.ac-dropdown .ac-item:hover, .ac-dropdown .ac-item.active { background: var(--primary-light); color: var(--primary); }
.ac-dropdown .ac-empty { padding: 8px 12px; font-size: var(--font-size-sm); color: var(--text-tertiary); }
.ac-dropdown .ac-loading { padding: 8px 12px; font-size: var(--font-size-sm); color: var(--primary); display: flex; align-items: center; gap: 6px; animation: pulse 1.4s infinite; }
.ac-dropdown .ac-item-dept { color: #8f959e; font-size: 11px; margin-left: 8px; white-space: nowrap; }
.ac-dropdown .ac-item .ac-item-dept { flex-shrink: 0; }

@keyframes pulse {
  0%, 100% { opacity: 1; }
  50% { opacity: 0.5; }
}

/* ========== 多选联想输入（科室/疾病 chip + input） ========== */
.multi-select-wrapper {
  position: relative;
  display: flex; flex-wrap: wrap; align-items: center; gap: 4px;
  min-height: 36px; padding: 4px 8px;
  border: 1px solid var(--border-control); border-radius: var(--radius-sm);
  background: var(--bg-white); cursor: text;
  transition: border-color var(--transition-fast), box-shadow var(--transition-fast);
}
.multi-select-wrapper:focus-within {
  border-color: var(--primary); box-shadow: 0 0 0 2px var(--primary-light);
}
.multi-select-wrapper .ms-chip {
  display: inline-flex; align-items: center; gap: 2px;
  padding: 2px 5px 2px 8px; border-radius: 4px;
  background: var(--primary-light); color: var(--primary);
  font-size: 12px; font-weight: 500; line-height: 20px;
  white-space: nowrap; user-select: none;
}
.multi-select-wrapper .ms-chip .ms-chip-x {
  cursor: pointer; font-size: 14px; line-height: 1;
  padding: 0 2px; opacity: .6; font-weight: 700;
}
.multi-select-wrapper .ms-chip .ms-chip-x:hover { opacity: 1; color: #ef4444; }
.multi-select-wrapper .ms-chip.dept-chip {
  background: #eff6ff; color: #1d4ed8;
}
.multi-select-wrapper .ms-chip.disease-chip {
  background: #f0fdf4; color: #15803d;
}
.multi-select-wrapper .ms-input {
  flex: 1; min-width: 100px; border: none !important;
  outline: none !important; box-shadow: none !important;
  padding: 2px 4px !important; font-size: var(--font-size-sm);
  background: transparent !important; line-height: 24px;
}
.multi-select-wrapper .ac-dropdown {
  position: fixed; /* 脱离 modal-body overflow 裁剪 */
  z-index: 9999;
  max-height: 220px;
  overflow-y: auto;
  background: var(--bg-white);
  border: 1px solid var(--primary);
  border-radius: 0 0 var(--radius-sm) var(--radius-sm);
  box-shadow: 0 8px 24px rgba(0,0,0,0.15);
  display: none;
}

/* feature tabs */
.ft-tab { padding: 10px 16px; cursor: pointer; border-bottom: 2px solid transparent; font-size: var(--font-size-base); font-weight: 400; color: var(--text-secondary); transition: all var(--transition-fast); }
.ft-tab:hover { color: var(--primary); }
.ft-tab.active { color: var(--primary); border-bottom-color: var(--primary); font-weight: 500; }

/* 搜索输入 */
.search-input { padding: 7px 12px; border: 1px solid var(--border-control); border-radius: var(--radius-sm); font-size: var(--font-size-sm); outline: none; transition: border-color var(--transition-fast); background: var(--bg-white); color: var(--text-primary); }
.search-input:focus { border-color: var(--primary); box-shadow: 0 0 0 2px var(--primary-light); }

/* 医院卡片 */
.hospital-card-grid { display: grid; grid-template-columns: repeat(auto-fill, minmax(300px, 1fr)); gap: 14px; padding: 4px 0; }
.hospital-card {
  background: var(--bg-white); border: 1px solid var(--border-card);
  border-radius: var(--radius); padding: 20px;
  box-shadow: var(--shadow-sm); transition: all var(--transition);
  cursor: default; position: relative;
}
.hospital-card:hover { box-shadow: var(--shadow); border-color: var(--primary); transform: translateY(-2px); }
.hospital-card.selected { border-color: var(--primary); background: var(--primary-bg-solid); }
.hospital-card-top { display: flex; align-items: flex-start; gap: 10px; margin-bottom: 10px; }
.hospital-checkbox { width: 15px; height: 15px; accent-color: var(--primary); flex-shrink: 0; margin-top: 2px; cursor: pointer; }
.hospital-avatar { width: 40px; height: 40px; border-radius: var(--radius-sm); background: var(--primary-light); display: flex; align-items: center; justify-content: center; font-size: 18px; flex-shrink: 0; color: var(--primary); }
.hospital-info { flex: 1; min-width: 0; }
.hospital-name { font-size: var(--font-size-base); font-weight: 600; color: var(--text-primary); margin-bottom: 3px; display: flex; align-items: center; gap: 6px; }
.hospital-desc { font-size: var(--font-size-sm); color: var(--text-secondary); line-height: 1.5; display: -webkit-box; -webkit-line-clamp: 2; -webkit-box-orient: vertical; overflow: hidden; }
.hospital-region { display: inline-flex; align-items: center; gap: 3px; font-size: var(--font-size-xs); color: var(--primary); background: var(--primary-light-solid); padding: 2px 8px; border-radius: 2px; margin-top: 6px; }
.hospital-stats { display: flex; gap: 14px; padding: 10px 0; border-top: 1px solid var(--border-light); border-bottom: 1px solid var(--border-light); margin-bottom: 10px; }
.hospital-stat { display: flex; flex-direction: column; align-items: center; flex: 1; }
.hospital-stat-value { font-size: var(--font-size-md); font-weight: 600; color: var(--text-primary); }
.hospital-stat-label { font-size: var(--font-size-xs); color: var(--text-secondary); margin-top: 2px; }
.hospital-stat-value.danger { color: var(--danger); }
.hospital-card-actions { display: flex; justify-content: flex-end; gap: 6px; }
.batch-bar { display: none; position: sticky; bottom: 0; background: var(--bg-white); border-top: 1px solid var(--primary); padding: 12px 20px; margin-top: 14px; border-radius: 0 0 var(--radius) var(--radius); box-shadow: 0 -2px 8px rgba(31,35,41,0.04); z-index: 10; }
.batch-bar.show { display: flex; align-items: center; justify-content: space-between; }
.batch-bar .batch-info { font-size: var(--font-size-sm); color: var(--text-primary); }
.batch-bar .batch-actions { display: flex; gap: 8px; }
.hospital-empty { text-align: center; padding: 60px 20px; color: var(--text-secondary); }
.hospital-empty-icon { font-size: 48px; margin-bottom: 12px; opacity: 0.3; }
.hospital-empty-text { font-size: var(--font-size-base); }
.doctor-empty { text-align: center; padding: 60px 20px; color: var(--text-secondary); }
.doctor-empty-icon { font-size: 48px; margin-bottom: 12px; opacity: 0.3; }
.doctor-empty-text { font-size: var(--font-size-base); }
.monitor-badge { display: inline-block; padding: 2px 8px; border-radius: 2px; font-size: var(--font-size-xs); font-weight: 400; }
.platform-badge { display: inline-flex; align-items: center; gap: 2px; background: var(--bg-body); border: 1px solid var(--border-light); padding: 2px 6px; border-radius: var(--radius-xs); font-size: var(--font-size-xs); color: var(--text-secondary); margin: 1px; }
.readonly-field { color: var(--text-tertiary); cursor: help; border-bottom: 1px dashed var(--border-card); }
.penalty-tag { font-size: var(--font-size-xs); color: var(--text-secondary); white-space: nowrap; overflow: hidden; text-overflow: ellipsis; display: block; max-width: 140px; }

/* 链接跳转 */
.link-jump-btn { display: inline-flex; align-items: center; gap: 4px; padding: 4px 10px; background: var(--bg-body); border-radius: var(--radius-xs); font-size: var(--font-size-xs); color: var(--primary); cursor: pointer; border: 1px solid var(--border-card); transition: all var(--transition-fast); }
.link-jump-btn:hover { background: var(--primary-light); border-color: var(--primary); }

/* 风险分数条 */
.risk-score-bar { height: 4px; border-radius: 2px; background: var(--border-light); overflow: hidden; }
.risk-score-fill { height: 100%; border-radius: 2px; background: linear-gradient(90deg, var(--success), var(--warning), var(--danger)); transition: width 0.5s; }

/* ===================== 弹窗内部表格风格 ===================== */
.modal table, .fs-modal table { font-size: var(--font-size-sm); }
.modal th, .fs-modal th { background: var(--bg-card-header); padding: 8px 12px; font-size: var(--font-size-sm); }
.modal td, .fs-modal td { padding: 10px 12px; }

/* 弹窗内部表单组紧凑 */
.modal .form-group, .fs-modal .form-group { margin-bottom: 14px; }

/* ===================== 动画 ===================== */
@keyframes modalFadeIn { from { opacity: 0; } to { opacity: 1; } }
@keyframes toastSlideIn { from { transform: translateX(100%); opacity: 0; } to { transform: translateX(0); opacity: 1; } }

/* ===================== 飞书图标替换系统样式 ===================== */
.fi-icon { display: inline-flex; align-items: center; justify-content: center; flex-shrink: 0; vertical-align: middle; }
.fi-replaced { display: inline-flex; align-items: center; justify-content: center; vertical-align: middle; flex-shrink: 0; }
.fi-dot { display: inline-block; border-radius: 50%; vertical-align: middle; flex-shrink: 0; }

/* 导航栏中的图标颜色适配 */
.nav-item .fi-replaced, .nav-item .fi-icon { color: var(--primary); }
.nav-item.active .fi-replaced, .nav-item.active .fi-icon { color: var(--primary); }
.nav-section .fi-replaced, .nav-section .fi-icon { color: var(--text-tertiary); }

/* 侧边栏底部按钮图标 */
.sidebar-footer .fi-replaced, .sidebar-footer .fi-icon { color: var(--text-secondary); }

/* 按钮内的图标间距 */
.fs-btn .fi-replaced, .fs-btn .fi-icon { margin-right: 2px; }

/* 登录页logo图标 */
.login-logo .fi-replaced, .login-logo .fi-icon { color: var(--primary); }

/* 风险等级图标保持语义颜色 */
.fi-replaced[style*="#F53F3F"],
.fi-replaced[style*="#CB2634"] { color: #F53F3F; }
.fi-replaced[style*="#FF7D00"],
.fi-replaced[style*="#D25F00"] { color: #FF7D00; }
.fi-replaced[style*="#00B42C"],
.fi-replaced[style*="#009A29"] { color: #00B42C; }
.fi-replaced[style*="#1456F0"],
.fi-replaced[style*="#0E42D2"] { color: #1456F0; }

/* 统计卡片内的图标白色 */
.stat-card .fi-replaced, .stat-card .fi-icon,
.bs-stat-card .fi-replaced, .bs-stat-card .fi-icon { color: inherit; }

/* ========== 全景态势大屏 — 赛博朋克 Cyberpunk Theme ========== */

/* 全局暗色覆盖 — 仅内容区域 */
body.cyberpunk-active {
  background: #050510 !important;
  overflow: auto !important;
}
body.cyberpunk-active .content {
  background: #050510;
  padding: 0;
}

.big-screen-wrap {
  min-height: calc(100vh - 100px);
  padding: 0;
  position: relative;
  background: #050510;
  overflow-y: auto;
}

/* ── 动态光影背景：多层渐变光晕 + 网格线 ── */
.big-screen-wrap::before {
  content: '';
  position: absolute; inset: 0; z-index: 0; pointer-events: none;
  background:
    /* 网格线 */
    repeating-linear-gradient(0deg, rgba(0,240,255,0.03) 0px, rgba(0,240,255,0.03) 1px, transparent 1px, transparent 50px),
    repeating-linear-gradient(90deg, rgba(0,240,255,0.03) 0px, rgba(0,240,255,0.03) 1px, transparent 1px, transparent 50px),
    /* 顶部光晕 */
    radial-gradient(ellipse 60% 40% at 50% 0%, rgba(0,240,255,0.08) 0%, transparent 70%),
    /* 底部紫光 */
    radial-gradient(ellipse 80% 30% at 50% 100%, rgba(255,0,255,0.06) 0%, transparent 70%),
    /* 左侧光 */
    radial-gradient(ellipse 30% 60% at 0% 50%, rgba(0,240,255,0.04) 0%, transparent 60%),
    /* 右侧光 */
    radial-gradient(ellipse 20% 50% at 100% 50%, rgba(255,0,255,0.04) 0%, transparent 60%);
  animation: cyberBgPulse 8s ease-in-out infinite alternate;
}

@keyframes cyberBgPulse {
  0% { opacity: 0.8; }
  50% { opacity: 1; }
  100% { opacity: 0.85; }
}

/* ── 扫描线覆盖层 ── */
.big-screen-wrap::after {
  content: '';
  position: absolute; inset: 0; z-index: 1; pointer-events: none;
  background: repeating-linear-gradient(
    0deg,
    transparent,
    transparent 2px,
    rgba(0,240,255,0.015) 2px,
    rgba(0,240,255,0.015) 4px
  );
  animation: scanline 0.1s linear infinite;
}

@keyframes scanline {
  0% { transform: translateY(0); }
  100% { transform: translateY(4px); }
}

/* ── 光柱动画 ── */
.big-screen-wrap .cyber-lightbeam {
  position: absolute; z-index: 0; pointer-events: none;
  width: 2px; height: 60%;
  background: linear-gradient(to bottom, transparent, rgba(0,240,255,0.3), rgba(255,0,255,0.2), transparent);
  animation: lightbeamFloat 10s ease-in-out infinite;
  filter: blur(20px);
  opacity: 0.5;
}
.big-screen-wrap .cyber-lightbeam:nth-child(1) { left: 15%; animation-delay: 0s; }
.big-screen-wrap .cyber-lightbeam:nth-child(2) { left: 40%; animation-delay: -3s; height: 50%; }
.big-screen-wrap .cyber-lightbeam:nth-child(3) { left: 65%; animation-delay: -6s; height: 70%; }
.big-screen-wrap .cyber-lightbeam:nth-child(4) { left: 85%; animation-delay: -8s; height: 45%; }

@keyframes lightbeamFloat {
  0%, 100% { transform: translateX(0) scaleY(0.8); opacity: 0.3; }
  25% { transform: translateX(20px) scaleY(1); opacity: 0.6; }
  50% { transform: translateX(-10px) scaleY(0.7); opacity: 0.4; }
  75% { transform: translateX(15px) scaleY(1.1); opacity: 0.5; }
}

/* 全屏模式 */
.big-screen-wrap.big-screen-full {
  position: fixed;
  top: 0; left: 0; right: 0; bottom: 0;
  z-index: 9999;
  background: #050510;
  overflow-y: auto;
  padding: 16px 24px;
}

/* ── 内容层（z-index 高于背景特效）── */
.bs-header,
.bs-cards-row,
.bs-main-row,
.bs-charts-row {
  position: relative; z-index: 2;
}

/* ===== Header ===== */
.bs-header {
  display: flex;
  align-items: center;
  justify-content: space-between;
  padding: 16px 0 18px;
  margin-bottom: 16px;
  border-bottom: 1px solid rgba(0,240,255,0.15);
  position: relative;
}
.bs-header::after {
  content: '';
  position: absolute; bottom: -1px; left: 0; width: 200px; height: 1px;
  background: linear-gradient(90deg, #00f0ff, #ff00ff, transparent);
  animation: headerLine 3s ease-in-out infinite alternate;
}
@keyframes headerLine {
  0% { width: 200px; opacity: 1; }
  50% { width: 350px; opacity: 0.8; }
  100% { width: 200px; opacity: 1; }
}
.bs-header-left { display: flex; align-items: center; gap: 20px; flex-wrap: wrap; }
.bs-title {
  font-size: 22px; font-weight: 800; color: #e0f7ff; margin: 0;
  text-shadow: 0 0 20px rgba(0,240,255,0.4), 0 0 40px rgba(0,240,255,0.15);
  letter-spacing: 2px;
}

/* 面包屑 */
.bs-breadcrumb { display: flex; align-items: center; gap: 4px; font-size: 13px; }
.bs-breadcrumb-item {
  color: #00f0ff; cursor: pointer; padding: 3px 10px;
  border-radius: 4px; transition: all 0.2s; font-weight: 500;
  background: rgba(0,240,255,0.06);
  border: 1px solid rgba(0,240,255,0.15);
  text-shadow: 0 0 8px rgba(0,240,255,0.3);
}
.bs-breadcrumb-item:hover {
  background: rgba(0,240,255,0.15);
  border-color: rgba(0,240,255,0.4);
  box-shadow: 0 0 12px rgba(0,240,255,0.2);
}
.bs-breadcrumb-current {
  color: #fff; cursor: default; font-weight: 600;
  background: rgba(255,255,255,0.05); border-color: rgba(255,255,255,0.1);
  text-shadow: 0 0 10px rgba(255,255,255,0.3);
}
.bs-breadcrumb-current:hover { background: rgba(255,255,255,0.05); }
.bs-breadcrumb-arrow { color: #00f0ff; font-size: 12px; user-select: none; }
.bs-time { font-size: 12px; color: rgba(0,240,255,0.6); text-shadow: 0 0 6px rgba(0,240,255,0.2); }
.bs-fullscreen-btn {
  font-size: 13px; padding: 6px 18px;
  border: 1px solid rgba(0,240,255,0.3);
  border-radius: 6px; background: rgba(0,240,255,0.05);
  color: #00f0ff; cursor: pointer; font-weight: 500; white-space: nowrap;
  text-shadow: 0 0 8px rgba(0,240,255,0.3);
  transition: all 0.3s;
}
.bs-fullscreen-btn:hover {
  background: rgba(0,240,255,0.15);
  border-color: #00f0ff;
  box-shadow: 0 0 20px rgba(0,240,255,0.3), inset 0 0 10px rgba(0,240,255,0.05);
}

/* ===== Cards Row ===== */
.bs-cards-row {
  display: grid;
  grid-template-columns: repeat(auto-fit, minmax(140px, 1fr));
  gap: 12px;
  margin-bottom: 16px;
}
.bs-card {
  background: linear-gradient(135deg, rgba(10,20,40,0.9), rgba(15,25,50,0.8));
  border-radius: 10px; padding: 16px;
  border: 1px solid rgba(0,240,255,0.1);
  text-align: center;
  transition: all 0.3s;
  cursor: default;
  position: relative; overflow: hidden;
  backdrop-filter: blur(10px);
}
.bs-card::before {
  content: '';
  position: absolute; inset: 0;
  background: linear-gradient(135deg, rgba(0,240,255,0.03), rgba(255,0,255,0.03));
  opacity: 0; transition: opacity 0.3s;
}
.bs-card:hover {
  transform: translateY(-3px);
  border-color: rgba(0,240,255,0.4);
  box-shadow: 0 0 25px rgba(0,240,255,0.15), 0 0 50px rgba(0,240,255,0.05);
}
.bs-card:hover::before { opacity: 1; }
.bs-card-icon { font-size: 24px; margin-bottom: 8px; position: relative; z-index: 1; }
.bs-card-num {
  font-size: 28px; font-weight: 800; line-height: 1.2;
  position: relative; z-index: 1;
  background: linear-gradient(135deg, #00f0ff, #e0f7ff);
  -webkit-background-clip: text; -webkit-text-fill-color: transparent;
  background-clip: text;
  text-shadow: none;
  filter: drop-shadow(0 0 8px rgba(0,240,255,0.4));
}
.bs-card-label { font-size: 12px; color: rgba(200,220,240,0.6); margin-top: 4px; position: relative; z-index: 1; }

/* 卡片颜色变体 */
.bs-card-blue { border-left: 3px solid #00f0ff; }
.bs-card-red { border-left: 3px solid #ff3366; }
.bs-card-red .bs-card-num { background: linear-gradient(135deg, #ff3366, #ff8899); -webkit-background-clip: text; -webkit-text-fill-color: transparent; background-clip: text; filter: drop-shadow(0 0 8px rgba(255,51,102,0.4)); }
.bs-card-orange { border-left: 3px solid #ff9900; }
.bs-card-orange .bs-card-num { background: linear-gradient(135deg, #ff9900, #ffcc66); -webkit-background-clip: text; -webkit-text-fill-color: transparent; background-clip: text; filter: drop-shadow(0 0 8px rgba(255,153,0,0.4)); }
.bs-card-green { border-left: 3px solid #00ff41; }
.bs-card-green .bs-card-num { background: linear-gradient(135deg, #00ff41, #66ff88); -webkit-background-clip: text; -webkit-text-fill-color: transparent; background-clip: text; filter: drop-shadow(0 0 8px rgba(0,255,65,0.4)); }
.bs-card-purple { border-left: 3px solid #b44dff; }
.bs-card-purple .bs-card-num { background: linear-gradient(135deg, #b44dff, #dd99ff); -webkit-background-clip: text; -webkit-text-fill-color: transparent; background-clip: text; filter: drop-shadow(0 0 8px rgba(180,77,255,0.4)); }
.bs-card-cyan { border-left: 3px solid #00e5ff; }
.bs-card-teal { border-left: 3px solid #00ffe5; }
.bs-card-teal .bs-card-num { background: linear-gradient(135deg, #00ffe5, #66fff2); -webkit-background-clip: text; -webkit-text-fill-color: transparent; background-clip: text; filter: drop-shadow(0 0 8px rgba(0,255,229,0.4)); }
.bs-card-dark { border-left: 3px solid #aaa; }
.bs-card-dark .bs-card-num { background: linear-gradient(135deg, #ccc, #fff); -webkit-background-clip: text; -webkit-text-fill-color: transparent; background-clip: text; filter: drop-shadow(0 0 8px rgba(255,255,255,0.3)); }

/* ===== Main Row: Map + Alert Feed ===== */
.bs-main-row {
  display: flex; gap: 16px; margin-bottom: 16px;
}
.bs-map-panel {
  flex: 1 1 65%; min-width: 0;
  background: linear-gradient(135deg, rgba(10,20,40,0.85), rgba(8,16,35,0.9));
  border-radius: 10px; padding: 16px;
  border: 1px solid rgba(0,240,255,0.12);
  box-shadow: 0 0 30px rgba(0,240,255,0.05), inset 0 0 80px rgba(0,240,255,0.02);
  backdrop-filter: blur(10px);
  position: relative; overflow: hidden;
}
.bs-map-panel::before {
  content: '';
  position: absolute; top: -1px; left: 20px; right: 20px; height: 1px;
  background: linear-gradient(90deg, transparent, rgba(0,240,255,0.3), rgba(255,0,255,0.2), transparent);
}
.bs-alert-panel {
  flex: 0 0 320px;
  background: linear-gradient(135deg, rgba(10,20,40,0.85), rgba(8,16,35,0.9));
  border-radius: 10px; padding: 16px;
  border: 1px solid rgba(255,0,255,0.1);
  box-shadow: 0 0 25px rgba(255,0,255,0.03);
  backdrop-filter: blur(10px);
  display: flex; flex-direction: column;
  position: relative; overflow: hidden;
}
.bs-alert-panel::before {
  content: '';
  position: absolute; top: -1px; left: 20px; right: 20px; height: 1px;
  background: linear-gradient(90deg, transparent, rgba(255,0,255,0.3), rgba(0,240,255,0.2), transparent);
}

.bs-panel-title {
  font-size: 14px; font-weight: 600; color: #e0f7ff;
  margin-bottom: 12px; padding-bottom: 10px;
  border-bottom: 1px solid rgba(0,240,255,0.1);
  text-shadow: 0 0 10px rgba(0,240,255,0.3);
  letter-spacing: 1px;
  position: relative;
}

/* ===== Alert Feed ===== */
.bs-alert-feed {
  flex: 1; overflow-y: auto; max-height: 380px;
  display: flex; flex-direction: column; gap: 4px;
}
.bs-alert-feed::-webkit-scrollbar { width: 4px; }
.bs-alert-feed::-webkit-scrollbar-track { background: rgba(0,240,255,0.02); }
.bs-alert-feed::-webkit-scrollbar-thumb { background: rgba(0,240,255,0.2); border-radius: 2px; }
.bs-alert-feed::-webkit-scrollbar-thumb:hover { background: rgba(0,240,255,0.4); }

.bs-alert-item {
  display: flex; align-items: center; gap: 8px;
  padding: 8px 10px; border-radius: 6px;
  background: rgba(0,240,255,0.03);
  border: 1px solid rgba(0,240,255,0.06);
  cursor: pointer;
  animation: bsSlideIn 0.3s ease both;
  font-size: 12px; color: #c0d8e8;
  transition: all 0.2s;
}
.bs-alert-item:hover {
  background: rgba(0,240,255,0.08);
  border-color: rgba(0,240,255,0.25);
  box-shadow: 0 0 10px rgba(0,240,255,0.1);
}
.bs-alert-lvl { font-size: 14px; flex-shrink: 0; }
.bs-alert-title { flex: 1; color: #e0f0f8; white-space: nowrap; overflow: hidden; text-overflow: ellipsis; }
.bs-alert-platform { color: #00f0ff; font-size: 11px; flex-shrink: 0; text-shadow: 0 0 6px rgba(0,240,255,0.3); }
.bs-alert-time { color: rgba(160,200,220,0.6); font-size: 11px; flex-shrink: 0; }
.bs-empty-sm { text-align: center; color: rgba(160,200,220,0.4); padding: 30px 0; font-size: 13px; }

@keyframes bsSlideIn {
  from { opacity: 0; transform: translateX(20px); }
  to { opacity: 1; transform: translateX(0); }
}

/* ===== Charts Row ===== */
.bs-charts-row {
  display: grid;
  grid-template-columns: repeat(3, 1fr);
  gap: 16px;
  margin-bottom: 16px;
}
.bs-chart-panel {
  background: linear-gradient(135deg, rgba(10,20,40,0.85), rgba(8,16,35,0.9));
  border-radius: 10px; padding: 16px;
  border: 1px solid rgba(0,240,255,0.1);
  box-shadow: 0 0 20px rgba(0,240,255,0.03);
  backdrop-filter: blur(10px);
  position: relative; overflow: hidden;
}
.bs-chart-panel::before {
  content: '';
  position: absolute; top: -1px; left: 16px; right: 16px; height: 1px;
  background: linear-gradient(90deg, transparent, rgba(0,240,255,0.2), transparent);
}

/* ===== AI Stats ===== */
.bs-ai-stats {
  display: flex; flex-direction: column; gap: 12px;
}
.bs-ai-item {
  display: flex; justify-content: space-between; align-items: center;
  padding: 10px 14px; border-radius: 8px;
  background: rgba(0,240,255,0.03);
  border: 1px solid rgba(0,240,255,0.08);
  transition: all 0.2s;
}
.bs-ai-item:hover {
  background: rgba(0,240,255,0.06);
  border-color: rgba(0,240,255,0.2);
  box-shadow: 0 0 12px rgba(0,240,255,0.08);
}
.bs-ai-label { font-size: 13px; color: rgba(180,210,230,0.7); }
.bs-ai-val {
  font-size: 20px; font-weight: 700;
  background: linear-gradient(135deg, #00f0ff, #e0f7ff);
  -webkit-background-clip: text; -webkit-text-fill-color: transparent;
  background-clip: text;
  filter: drop-shadow(0 0 8px rgba(0,240,255,0.4));
}
.bs-ai-warn {
  background: linear-gradient(135deg, #ff3366, #ff8899);
  -webkit-background-clip: text; -webkit-text-fill-color: transparent;
  background-clip: text;
  filter: drop-shadow(0 0 8px rgba(255,51,102,0.4));
}

/* ===== Hospital Ranking ===== */
.bs-ranking-list {
  display: flex; flex-direction: column; gap: 6px;
  max-height: 220px; overflow-y: auto;
}
.bs-ranking-list::-webkit-scrollbar { width: 4px; }
.bs-ranking-list::-webkit-scrollbar-track { background: rgba(0,240,255,0.02); }
.bs-ranking-list::-webkit-scrollbar-thumb { background: rgba(0,240,255,0.2); border-radius: 2px; }
.bs-rank-item {
  display: flex; align-items: center; gap: 10px;
  padding: 8px 10px; border-radius: 6px;
  background: rgba(0,240,255,0.03);
  border: 1px solid rgba(0,240,255,0.05);
  font-size: 13px; color: #c0d8e8;
  transition: all 0.2s;
}
.bs-rank-item:hover {
  background: rgba(0,240,255,0.08);
  border-color: rgba(0,240,255,0.2);
}
.bs-rank-num { font-size: 16px; width: 28px; text-align: center; flex-shrink: 0; color: #00f0ff; }
.bs-rank-name { flex: 1; color: #d0e4f0; white-space: nowrap; overflow: hidden; text-overflow: ellipsis; }
.bs-rank-cnt { color: #00f0ff; font-weight: 600; flex-shrink: 0; text-shadow: 0 0 6px rgba(0,240,255,0.3); }

/* ===== Big Screen Full Mode Overrides ===== */
.big-screen-full .bs-cards-row {
  grid-template-columns: repeat(8, 1fr);
}
.big-screen-full .bs-main-row { height: 480px; }
.big-screen-full .bs-map-panel { flex: 1 1 70%; }
.big-screen-full .bs-alert-panel { flex: 0 0 350px; }
.big-screen-full .bs-alert-feed { max-height: 440px; }

/* ===== Map 容器暗色适配 ===== */
#bs-china-map {
  background: transparent !important;
}

@media (max-width: 1400px) {
  .bs-charts-row { grid-template-columns: repeat(2, 1fr); }
  .bs-main-row { flex-direction: column; }
  .bs-alert-panel { flex: 0 0 auto; max-height: 300px; }
  .bs-alert-feed { max-height: 260px; }
}
@media (max-width: 768px) {
  .bs-charts-row { grid-template-columns: 1fr; }
  .bs-cards-row { grid-template-columns: repeat(4, 1fr); }
}

/* ========== v8 全景态势模块新增样式 ========== */

/* AI 状态行 */
.bs-ai-status-bar { display: flex; align-items: center; gap: 8px; padding: 10px 20px; background: linear-gradient(90deg, rgba(20,40,70,0.6), rgba(14,30,62,0.8), rgba(20,40,70,0.6)); border: 1px solid rgba(0,240,255,0.15); border-radius: 4px; margin-bottom: 12px; font-size: 13px; color: #a0c8e0; flex-wrap: wrap; }
.bs-ai-icon { font-size: 18px; }
.bs-ai-hl { color: #ffd54f; font-weight: 700; font-size: 15px; }
.bs-ai-red { color: #ff3366; font-weight: 700; }

/* 模块区块 */
.bs-module-section { margin-bottom: 16px; background: linear-gradient(135deg, rgba(10,26,54,0.9), rgba(14,30,62,0.85)); border: 1px solid rgba(40,80,140,0.35); border-radius: 6px; overflow: hidden; position: relative; }
.bs-module-section::before { content: ''; position: absolute; top: 0; left: 0; width: 100%; height: 2px; background: linear-gradient(90deg, transparent, rgba(212,168,83,0.5), transparent); }
.bs-module-header { display: flex; align-items: center; gap: 10px; padding: 12px 18px; border-bottom: 1px solid rgba(40,80,140,0.2); font-size: 15px; font-weight: 600; color: #c8d8f0; letter-spacing: 1px; }
.bs-module-num { display: inline-flex; align-items: center; justify-content: center; width: 26px; height: 26px; border-radius: 50%; background: rgba(212,168,83,0.25); color: #d4a853; font-size: 13px; font-weight: 700; flex-shrink: 0; }
.bs-module-desc { margin-left: auto; font-size: 11px; color: #5a7090; letter-spacing: 1px; }
.bs-module-body { padding: 12px 16px; }

/* 两列布局 */
.bs-row-2col { display: flex; gap: 14px; flex-wrap: wrap; }
.bs-row-2col > div { flex: 1; min-width: 0; }

/* Mini KPI */
.bs-mini-kpi-row { display: flex; gap: 10px; flex-wrap: wrap; padding: 0 16px 10px; }
.bs-mini-kpi { display: flex; align-items: center; gap: 8px; padding: 8px 14px; background: rgba(20,40,70,0.4); border-radius: 4px; border-left: 3px solid #00f0ff; min-width: 120px; }
.bs-mini-kpi-label { font-size: 11px; color: #8ea4c8; white-space: nowrap; }
.bs-mini-kpi-val { font-size: 17px; font-weight: 700; white-space: nowrap; }

/* 焦点案例卡片 */
.bs-focus-case-panel { flex: 0 0 320px; min-width: 280px; background: #161e30; border-radius: 6px; padding: 12px; border: 1px solid rgba(40,80,140,0.3); display: flex; flex-direction: column; }
.bs-focus-case-card { flex: 1; background: rgba(20,40,70,0.5); border-radius: 6px; padding: 14px; border: 1px solid rgba(40,80,140,0.25); min-height: 200px; }
.bs-focus-title { font-size: 14px; font-weight: 600; color: #fff; margin-bottom: 8px; line-height: 1.5; }
.bs-focus-meta { font-size: 12px; color: #8ea4c8; margin-bottom: 4px; }
.bs-focus-violation { margin: 8px 0; padding: 8px 10px; background: rgba(255,51,102,0.12); border-radius: 4px; font-size: 12px; color: #ef9a9a; border: 1px solid rgba(255,51,102,0.2); line-height: 1.5; }
.bs-focus-status { font-size: 12px; margin-top: auto; }
.bs-focus-badge { display: inline-block; padding: 2px 8px; border-radius: 3px; font-size: 11px; }
.bs-focus-badge.done { background: rgba(0,255,65,0.2); color: #66bb6a; border: 1px solid rgba(0,255,65,0.3); }
.bs-focus-badge.warn { background: rgba(255,152,0,0.2); color: #ffb74d; border: 1px solid rgba(255,152,0,0.3); }
.bs-focus-nav-btns { display: flex; gap: 8px; margin-top: 10px; }
.bs-focus-nav { display: flex; gap: 8px; margin-top: 10px; }
.bs-focus-nav button { flex: 1; padding: 6px; border: 1px solid rgba(40,80,140,0.4); background: rgba(20,40,70,0.4); color: #8ea4c8; border-radius: 4px; cursor: pointer; font-size: 12px; transition: all .2s; }
.bs-focus-nav button:hover { background: rgba(40,80,140,0.3); color: #d4a853; }
.bs-focus-nav-info { text-align: center; font-size: 11px; color: #5a7090; margin-top: 6px; }

/* 风险徽章（表格内） */
.bs-risk-badge { display: inline-block; padding: 1px 7px; border-radius: 3px; font-size: 11px; font-weight: 600; }
.bs-risk-badge.high { background: rgba(255,51,102,0.25); color: #ef5350; border: 1px solid rgba(255,51,102,0.3); }
.bs-risk-badge.mid { background: rgba(255,152,0,0.2); color: #ffb74d; border: 1px solid rgba(255,152,0,0.25); }
.bs-risk-badge.low { background: rgba(76,175,80,0.2); color: #66bb6a; border: 1px solid rgba(76,175,80,0.25); }

/* 新闻条 */
.bs-news-strip { display: flex; gap: 8px; overflow-x: auto; padding: 8px 16px; scrollbar-width: thin; margin-top: 8px; }
.bs-news-strip::-webkit-scrollbar { height: 3px; }
.bs-news-strip::-webkit-scrollbar-thumb { background: rgba(0,240,255,0.3); border-radius: 2px; }
.bs-news-item { flex-shrink: 0; padding: 5px 12px; background: rgba(20,40,70,0.4); border: 1px solid rgba(40,80,140,0.2); border-radius: 4px; font-size: 11px; color: #8ea4c8; white-space: nowrap; transition: all .2s; }
.bs-news-item:hover { background: rgba(40,80,140,0.3); color: #d4a853; }
.bs-news-date { color: #d4a853; margin-right: 4px; }

/* 管理启示框 */
.bs-insight-box { margin: 10px 16px 14px; padding: 10px 14px; background: rgba(212,168,83,0.06); border-left: 3px solid rgba(212,168,83,0.4); border-radius: 0 4px 4px 0; font-size: 12px; color: #c8d8f0; line-height: 1.7; }

/* 表格面板 */
.bs-table-panel { background: rgba(20,30,46,0.6); border-radius: 6px; padding: 10px; border: 1px solid rgba(40,80,140,0.25); }
.bs-table-wrap { overflow-x: auto; border-radius: 4px; }
.bs-table { width: 100%; border-collapse: collapse; font-size: 13px; }
.bs-table th { background: rgba(20,40,70,0.6); color: #8ea4c8; padding: 9px 12px; text-align: left; font-weight: 600; border-bottom: 1px solid rgba(40,80,140,0.25); font-size: 11px; white-space: nowrap; }
.bs-table td { padding: 8px 12px; border-bottom: 1px solid rgba(40,80,140,0.1); color: #c8d8f0; }
.bs-table tr:hover td { background: rgba(20,40,70,0.3); }

/* 处置漏斗 */
.bs-funnel-row { display: flex; justify-content: center; align-items: center; gap: 0; padding: 16px 0; flex-wrap: wrap; }
.bs-funnel-step { text-align: center; padding: 12px 22px; border-radius: 6px; border: 1px solid rgba(0,240,255,0.2); min-width: 110px; }
.bs-funnel-num { font-size: 28px; font-weight: 700; line-height: 1.1; }
.bs-funnel-lbl { font-size: 11px; color: #8ea4c8; margin-top: 4px; }
.bs-funnel-arrow { font-size: 20px; color: rgba(40,80,140,0.6); padding: 0 6px; }

/* 子标题提示 */
.bs-sub-hint { font-size: 11px; color: #6688aa; margin-left: 8px; }

@media (max-width: 1400px) {
  .bs-row-2col { flex-direction: column; }
  .bs-main-row { flex-direction: column !important; }
  .bs-focus-case-panel { flex: none; max-width: none; }
}
@media (max-width: 768px) {
  .bs-cards-row { grid-template-columns: repeat(4, 1fr); }
  .bs-mini-kpi-row { flex-direction: column; }
  .bs-funnel-row { flex-direction: column; gap: 8px; }
  .bs-funnel-arrow { transform: rotate(90deg); }
}

/* ========== 情感分析报告按钮 & 弹窗 ========== */
.sent-rep-btn {
  background: linear-gradient(135deg, #3b82f6, #8b5cf6);
  color: #fff;
  border: none;
  border-radius: 6px;
  padding: 7px 16px;
  font-size: 12px;
  font-weight: 600;
  cursor: pointer;
  white-space: nowrap;
  transition: all .2s;
  margin-left: 8px;
}
.sent-rep-btn:hover { transform: translateY(-1px); box-shadow: 0 4px 12px rgba(59,130,246,.35); }
.sent-report-modal {
  background: #fff;
  border-radius: 16px;
  width: 90vw;
  max-width: 860px;
  max-height: calc(100vh - 80px);
  overflow: hidden;
  box-shadow: 0 20px 60px rgba(0,0,0,.25);
  animation: sentRepIn .25s ease;
}
@keyframes sentRepIn {
  from { opacity: 0; transform: scale(.95) translateY(20px); }
  to { opacity: 1; transform: scale(1) translateY(0); }
}
.sent-rep-loadbar {
  width: 200px; height: 6px; background: #f1f5f9; border-radius: 3px;
  margin: 0 auto; overflow: hidden;
}
.sent-rep-loadbar::after {
  content: ''; display: block; width: 60%; height: 100%;
  background: linear-gradient(90deg,#3b82f6,#8b5cf6); border-radius: 3px;
  animation: sentRepLoad 1.2s ease infinite;
}
@keyframes sentRepLoad {
  0% { transform: translateX(-100%); }
  100% { transform: translateX(200%); }
}

/* ========== 维度筛选：省/市/区下拉 ========== */
.sent-dim-select {
  display: inline-flex; align-items: center; gap: 4px;
  padding: 6px 10px; border: 1px solid #e2e8f0; border-radius: 6px;
  background: #fff; font-size: 12px; color: #64748b; cursor: pointer;
  white-space: nowrap; transition: .15s;
  min-width: 80px; max-width: 140px;
  font-family: inherit;
  -webkit-appearance: none; appearance: none;
  background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='10' height='10' viewBox='0 0 24 24' fill='none' stroke='%2394a3b8' stroke-width='2'%3E%3Cpolyline points='6 9 12 15 18 9'%3E%3C/polyline%3E%3C/svg%3E");
  background-repeat: no-repeat;
  background-position: right 8px center;
  padding-right: 28px;
}
.sent-dim-select:hover { border-color: #3370ff; color: #3370ff; }
.sent-dim-select:focus { outline: none; border-color: #3370ff; box-shadow: 0 0 0 3px rgba(51,112,255,.1); }
.sent-dim-select.has-selection {
  border-color: #3370ff; color: #3370ff; background: #eff6ff; font-weight: 600;
}
.sent-dim-select:disabled {
  opacity: .45; cursor: not-allowed; background: #f8fafc;
}

/* ========== 舆情趋势数据总览 ========== */

/* 顶部 */
.to-header { margin-bottom: 16px; }
.to-title-row { display: flex; align-items: center; gap: 10px; }
.to-title-icon { font-size: 22px; }
.to-title-text { font-size: 20px; font-weight: 700; color: #1e293b; }
.to-title-badge { font-size: 12px; color: #64748b; background: #f1f5f9; padding: 3px 10px; border-radius: 12px; }
.to-breadcrumb { margin-top: 8px; display: flex; align-items: center; gap: 6px; font-size: 13px; }
.to-bc-item { color: #64748b; cursor: pointer; transition: color .2s; }
.to-bc-item:hover { color: #3370ff; }
.to-bc-item.active { color: #1e293b; font-weight: 600; cursor: default; }
.to-bc-sep { color: #cbd5e1; }

/* 分区标题 */
.to-section-title { font-size: 14px; font-weight: 600; color: #1e293b; margin: 20px 0 12px; }
.to-section-sub { font-weight: 400; color: #94a3b8; font-size: 12px; margin-left: 6px; }

/* 省份网格 */
.to-province-grid { display: grid; grid-template-columns: repeat(auto-fill, minmax(160px, 1fr)); gap: 10px; margin-bottom: 20px; }
.to-prov-card {
  background: #fff; border: 1px solid #e2e8f0; border-radius: 10px;
  padding: 14px; cursor: pointer; transition: all .2s;
}
.to-prov-card:hover { border-color: #3370ff; box-shadow: 0 2px 12px rgba(51,112,255,.1); transform: translateY(-2px); }
.to-prov-name { font-size: 13px; font-weight: 600; color: #1e293b; margin-bottom: 4px; }
.to-prov-count { font-size: 22px; font-weight: 700; color: #3370ff; margin-bottom: 6px; }
.to-prov-bar { height: 4px; background: #f1f5f9; border-radius: 2px; margin-bottom: 8px; }
.to-prov-bar-fill { height: 100%; background: #3370ff; border-radius: 2px; transition: width .4s ease; }
.to-prov-risk { font-size: 11px; padding: 2px 8px; border-radius: 10px; font-weight: 500; }
.to-risk-low { color: #10b981; background: #ecfdf5; }
.to-risk-medium { color: #f59e0b; background: #fffbeb; }
.to-risk-high { color: #ef4444; background: #fef2f2; }
.to-prov-icons { font-size: 16px; margin-top: 4px; text-align: right; }

/* KPI 行 */
.to-kpi-row { display: grid; grid-template-columns: repeat(4, 1fr); gap: 12px; margin-bottom: 12px; }
.to-kpi-card {
  background: #fff; border: 1px solid #e2e8f0; border-radius: 12px;
  padding: 16px 20px;
}
.to-kpi-sm { padding: 14px 18px; }
.to-kpi-label { font-size: 12px; color: #94a3b8; margin-bottom: 4px; }
.to-kpi-value { font-size: 22px; font-weight: 700; color: #1e293b; }
.to-kpi-unit { font-size: 12px; font-weight: 400; color: #94a3b8; }
.to-kpi-danger { }

/* AI 风险评分卡 */
.to-ai-card {
  background: #fff; border: 1px solid #e2e8f0; border-radius: 14px;
  padding: 24px; margin-bottom: 20px; display: flex; gap: 32px;
}
.to-ai-left { flex: 0 0 220px; text-align: center; }
.to-ai-score-label { font-size: 13px; color: #64748b; margin-bottom: 8px; }
.to-ai-score { font-size: 56px; font-weight: 800; line-height: 1; margin-bottom: 10px; }
.to-ai-score-max { font-size: 24px; font-weight: 500; color: #94a3b8; }
.to-ai-score-bar-bg { height: 8px; background: #f1f5f9; border-radius: 4px; margin-bottom: 10px; }
.to-ai-score-bar-fill { height: 100%; border-radius: 4px; transition: width .5s ease; }
.to-ai-score-tag { display: inline-block; font-size: 12px; padding: 4px 14px; border-radius: 12px; font-weight: 600; }

.to-ai-right { flex: 1; display: flex; flex-direction: column; gap: 14px; justify-content: center; }
.to-ai-item { }
.to-ai-item-head { display: flex; justify-content: space-between; margin-bottom: 4px; }
.to-ai-item-label { font-size: 12px; color: #64748b; }
.to-ai-item-val { font-size: 12px; color: #1e293b; font-weight: 600; }
.to-ai-item-bar { height: 6px; background: #f1f5f9; border-radius: 3px; }
.to-ai-item-fill { height: 100%; border-radius: 3px; transition: width .5s ease; }

/* 图表行 */
.to-chart-row { display: grid; grid-template-columns: 1.5fr 1fr; gap: 16px; }

.to-panel {
  background: #fff; border: 1px solid #e2e8f0; border-radius: 14px;
  padding: 20px;
}
.to-panel-title { font-size: 14px; font-weight: 600; color: #1e293b; margin-bottom: 4px; }
.to-panel-sub { font-weight: 400; color: #94a3b8; font-size: 12px; margin-left: 6px; }
.to-panel-legend { font-size: 11px; color: #94a3b8; margin-bottom: 8px; display: flex; align-items: center; gap: 8px; }
.to-legend-dot { display: inline-block; width: 10px; height: 10px; border-radius: 50%; }
.to-legend-area { display: inline-block; width: 18px; height: 8px; border-radius: 2px; }

/* 热门乱象列表 */
.to-disorder-list { display: flex; flex-direction: column; gap: 8px; }
.to-disorder-item { display: flex; align-items: center; gap: 12px; }
.to-disorder-rank {
  width: 24px; height: 24px; border-radius: 6px; display: flex;
  align-items: center; justify-content: center; color: #fff;
  font-size: 12px; font-weight: 700; flex-shrink: 0;
}
.to-disorder-info { flex: 1; min-width: 0; }
.to-disorder-name { font-size: 13px; color: #1e293b; margin-bottom: 2px; white-space: nowrap; overflow: hidden; text-overflow: ellipsis; }
.to-disorder-bar { height: 4px; background: #f1f5f9; border-radius: 2px; }
.to-disorder-bar-fill { height: 100%; border-radius: 2px; transition: width .5s ease; }
.to-disorder-stats { display: flex; gap: 8px; align-items: center; flex-shrink: 0; }
.to-disorder-total { font-size: 16px; font-weight: 700; color: #1e293b; }
.to-disorder-neg { font-size: 11px; color: #ef4444; background: #fef2f2; padding: 1px 6px; border-radius: 6px; }

/* 响应式 */
@media (max-width: 768px) {
  .to-kpi-row { grid-template-columns: repeat(2, 1fr); }
  .to-ai-card { flex-direction: column; align-items: center; }
  .to-ai-left { flex: 0 0 auto; }
  .to-chart-row { grid-template-columns: 1fr; }
  .to-province-grid { grid-template-columns: repeat(auto-fill, minmax(120px, 1fr)); }
}

/* ==================== v9 全景态势新增样式 ==================== */

/* 省份热力横向卡片列 */
.bs-province-row {
  display: flex;
  gap: 8px;
  overflow-x: auto;
  padding: 10px 0 4px;
  scrollbar-width: thin;
  scrollbar-color: rgba(0,240,255,0.3) transparent;
}
.bs-province-row::-webkit-scrollbar { height: 4px; }
.bs-province-row::-webkit-scrollbar-thumb { background: rgba(0,240,255,0.3); border-radius: 2px; }

.bs-prov-card {
  flex: 0 0 auto;
  min-width: 90px;
  background: rgba(0,240,255,0.07);
  border: 1px solid rgba(0,240,255,0.2);
  border-radius: 6px;
  padding: 8px 10px;
  cursor: pointer;
  transition: background 0.2s, border-color 0.2s;
}
.bs-prov-card:hover { background: rgba(0,240,255,0.15); border-color: rgba(0,240,255,0.5); }
.bs-prov-name { font-size: 13px; font-weight: 700; color: #a0c8e0; margin-bottom: 2px; }
.bs-prov-count { font-size: 18px; font-weight: 800; color: #00f0ff; margin-bottom: 4px; }
.bs-prov-tag {
  display: inline-block; font-size: 9px; color: #fff;
  background: rgba(255,170,0,0.3); border-radius: 3px;
  padding: 1px 5px; margin-right: 3px; margin-bottom: 2px;
}
.bs-prov-tag2 { background: rgba(255,51,102,0.3); }

/* 风险指数图例 */
.bs-risk-legend {
  font-size: 11px; color: #a0c8e0;
  padding: 8px 12px 4px;
  display: flex; gap: 14px; align-items: center;
  flex-wrap: wrap;
}
.bs-risk-dot {
  display: inline-block; width: 10px; height: 10px;
  border-radius: 50%; margin-right: 4px;
}
.bs-risk-dot.high { background: #ff3366; box-shadow: 0 0 6px #ff3366; }
.bs-risk-dot.medium { background: #ff9900; box-shadow: 0 0 6px #ff9900; }
.bs-risk-dot.low { background: #00f0ff; box-shadow: 0 0 6px #00f0ff; }

/* 焦点案例样式增强 */
.bs-focus-case-panel {
  flex: 0 0 280px;
  background: rgba(0,10,30,0.6);
  border: 1px solid rgba(0,240,255,0.15);
  border-radius: 8px;
  padding: 12px;
  display: flex;
  flex-direction: column;
}
.bs-focus-case-list {
  flex: 1;
  overflow-y: auto;
  scrollbar-width: thin;
  scrollbar-color: rgba(0,240,255,0.3) transparent;
}
.bs-focus-case-item {
  background: rgba(0,30,60,0.6);
  border-left: 4px solid #444;
  border-radius: 0 6px 6px 0;
  padding: 8px 10px;
  margin-bottom: 8px;
  cursor: pointer;
  transition: background 0.2s;
}
.bs-focus-case-item:hover { background: rgba(0,60,100,0.8); }
.bs-focus-case-item.risk-high { border-left-color: #ff3366; }
.bs-focus-case-item.risk-medium { border-left-color: #ff9900; }
.bs-focus-case-item.risk-low { border-left-color: #00f0ff; }
.bs-fc-level {
  font-size: 10px; font-weight: 700;
  display: inline-block; padding: 1px 8px; border-radius: 3px;
  margin-bottom: 4px;
}
.risk-high .bs-fc-level { background: rgba(255,51,102,0.25); color: #ff3366; }
.risk-medium .bs-fc-level { background: rgba(255,153,0,0.25); color: #ff9900; }
.risk-low .bs-fc-level { background: rgba(0,240,255,0.15); color: #00f0ff; }
.bs-fc-title { font-size: 12px; color: #c0d8ee; line-height: 1.4; margin-bottom: 3px; }
.bs-fc-meta { font-size: 10px; color: #6688aa; }

/* ==================== v10 全景态势样式 ==================== */
.v10-section { margin-bottom: 32px; }
.v10-section-title { color: #00f0ff; font-size: 18px; font-weight: bold; margin-bottom: 16px; padding-bottom: 8px; border-bottom: 1px solid #00f0ff33; }
.v10-kpi-row { display: flex; gap: 12px; flex-wrap: wrap; margin-bottom: 16px; }
.v10-kpi-card { flex: 1 1 140px; background: linear-gradient(135deg,#0a1628,#0d2137); border: 1px solid #00f0ff22; border-radius: 8px; padding: 14px 16px; text-align: center; }
.v10-kpi-icon { font-size: 22px; margin-bottom: 6px; }
.v10-kpi-value { font-size: 26px; font-weight: bold; color: #00f0ff; margin-bottom: 4px; }
.v10-kpi-label { font-size: 12px; color: #6688aa; }
.v10-chart-row { display: flex; gap: 16px; flex-wrap: wrap; }
.v10-chart-card { background: #0a1628; border: 1px solid #00f0ff22; border-radius: 8px; padding: 16px; }
.v10-chart-title { color: #ccddff; font-size: 13px; font-weight: bold; margin-bottom: 10px; }
.v10-case-heat-row { display: flex; gap: 16px; flex-wrap: wrap; margin-bottom: 16px; }
.v10-case-card { flex: 0 0 340px; background: #0a1628; border: 1px solid #00f0ff22; border-radius: 8px; overflow: hidden; }
.v10-heat-card { flex: 1; background: #0a1628; border: 1px solid #00f0ff22; border-radius: 8px; padding: 16px; min-width: 380px; }
.v10-case-title { background: #00f0ff11; color: #00f0ff; font-size: 13px; font-weight: bold; padding: 8px 16px; border-bottom: 1px solid #00f0ff22; }
.v10-case-nav { display: flex; justify-content: space-between; padding: 8px 16px; background: #00f0ff08; border-top: 1px solid #00f0ff22; }
.v10-case-nav button { background: #00f0ff22; color: #00f0ff; border: 1px solid #00f0ff44; border-radius: 4px; padding: 4px 12px; cursor: pointer; font-size: 12px; }
.v10-province-row { display: flex; gap: 10px; overflow-x: auto; padding: 12px 0; margin-bottom: 16px; }
.v10-province-card { flex: 0 0 auto; min-width: 130px; background: #0a1628; border: 1px solid #00f0ff22; border-radius: 8px; padding: 10px 14px; text-align: center; }
.v10-province-name { color: #00f0ff; font-size: 14px; font-weight: bold; margin-bottom: 4px; }
.v10-province-count { color: #ffd93d; font-size: 18px; font-weight: bold; margin-bottom: 6px; }
.v10-province-tag { font-size: 10px; color: #6688aa; margin-bottom: 2px; }
.v10-case-trend { background: #0a1628; border: 1px solid #00f0ff22; border-radius: 8px; padding: 10px 16px; margin-bottom: 16px; overflow-x: auto; white-space: nowrap; font-size: 12px; color: #ccddff; }
.v10-table-wrap { background: #0a1628; border: 1px solid #00f0ff22; border-radius: 8px; padding: 16px; overflow-x: auto; }
.v10-table { width: 100%; border-collapse: collapse; color: #ccddff; font-size: 13px; }
.v10-table th { background: #00f0ff11; color: #00f0ff; padding: 8px 12px; text-align: left; border-bottom: 1px solid #00f0ff33; }
.v10-table td { padding: 8px 12px; border-bottom: 1px solid #ffffff08; }
.v10-table tr:hover { background: #00f0ff08; }
.v10-insight { display: flex; gap: 10px; background: linear-gradient(90deg,#00f0ff08,#0d2137); border: 1px solid #00f0ff22; border-radius: 8px; padding: 12px 16px; margin-top: 12px; }
.v10-insight-icon { font-size: 20px; flex-shrink: 0; }
.v10-insight-text { color: #ccddff; font-size: 13px; line-height: 1.6; }

/* ==================== v12 全景态势升级样式 0620新版 ==================== */
/* 可疑账号规则栏 */
.bs-suspicious-bar { background: linear-gradient(135deg,#1a0510,#0d1a2d); border: 1px solid #ff4d4d33; border-radius: 8px; padding: 14px 16px; margin-bottom: 14px; }
.bs-suspicious-title { color: #ffcccc; font-size: 13px; margin-bottom: 12px; }
.bs-suspicious-rules { display: flex; gap: 12px; flex-wrap: wrap; }
.bs-rule-card { flex: 1 1 120px; background: #0a1628; border: 1px solid #ff4d4d22; border-radius: 6px; padding: 10px 14px; text-align: center; min-width: 110px; }
.bs-rule-num { font-size: 24px; font-weight: bold; margin-bottom: 4px; }
.bs-rule-label { font-size: 12px; color: #ccddff; margin-bottom: 4px; }
.bs-rule-desc { font-size: 10px; color: #6688aa; }

/* 案例排序表格副标题 */
.bs-case-subtitle { color: #6688aa; font-size: 11px; padding: 4px 16px 8px; background: #00f0ff08; border-bottom: 1px solid #00f0ff11; margin-bottom: 0; }

/* 风险时序时间轴 */
.bs-timeline-item { display: flex; gap: 10px; padding: 8px 0; border-bottom: 1px solid #ffffff08; align-items: flex-start; }
.bs-timeline-dot { width: 8px; height: 8px; border-radius: 50%; flex-shrink: 0; margin-top: 5px; box-shadow: 0 0 6px currentColor; }
.bs-timeline-content { flex: 1; min-width: 0; }

/* 脉冲动画 */
@keyframes pulse-green { 0%,100%{opacity:1;transform:scale(1)} 50%{opacity:0.6;transform:scale(1.3)} }
@keyframes pulse-red { 0%,100%{opacity:1;transform:scale(1)} 50%{opacity:0.5;transform:scale(1.4)} }
.pulse-green { animation: pulse-green 2s infinite; }
.pulse-red { animation: pulse-red 1.5s infinite; }

/* 章节分区 */
.bs-section-header { margin-bottom: 14px; }
.bs-section-title-row { display: flex; align-items: center; gap: 10px; margin-bottom: 4px; }
.bs-section-icon { font-size: 20px; }
.bs-section-title { color: #00f0ff; font-size: 18px; font-weight: bold; }
.bs-section-subtitle { color: #6688aa; font-size: 12px; padding-left: 30px; }

/* 健康度进度条 */
.bs-health-bar { background: #1a3050; border-radius: 4px; height: 8px; display: inline-block; }
.bs-health-fill { height: 8px; border-radius: 4px; }

