/* 迷毂 平台主题：可切换色板 (v1.9)
 * 默认主题：industrial-purple (星云紫 · 紫主色 + 蓝紫辅助 · 霓虹磨砂玻璃)
 * 所有品牌相关颜色全部走 --mg-* CSS 变量，可由 src/styles/themes.ts 在运行时切换
 *
 * 设计系统规范见 design-system/MASTER.md (由 ui-ux-pro-max skill 推导)
 */

/* JetBrains Mono · 用于 KPI / 坐标 / ID 等数据数字（tabular-nums）*/
@import url('https://fonts.googleapis.com/css2?family=JetBrains+Mono:wght@400;500;600;700&display=swap');

:root {
  /* ── 状态色（与品牌色解耦，跨主题保持语义） ── */
  --mg-status-success: #22c55e;
  --mg-status-success-rgb: 34, 197, 94;
  --mg-status-warning: #f59e0b;
  --mg-status-warning-rgb: 245, 158, 11;
  --mg-status-danger:  #ef4444;
  --mg-status-danger-rgb: 239, 68, 68;
  --mg-status-info:    #3b82f6;
  --mg-status-info-rgb: 59, 130, 246;
  --mg-status-idle:    #94a3b8;
  --mg-status-idle-rgb: 148, 163, 184;

  /* ── 数据可视化色板（ECharts / Progress 等） ── */
  --mg-data-c1: #3b82f6;
  --mg-data-c2: #22c55e;
  --mg-data-c3: #a855f7;
  --mg-data-c4: #f59e0b;
  --mg-data-c5: #ef4444;
  --mg-data-c6: #06b6d4;
  --mg-data-c7: #ec4899;
  --mg-data-c8: #84cc16;

  /* ── 字体栈 ── */
  --mg-font-sans: 'PingFang SC', 'Microsoft YaHei', 'Inter', -apple-system, BlinkMacSystemFont, 'Segoe UI', sans-serif;
  --mg-font-mono: 'JetBrains Mono', 'Cascadia Mono', 'SF Mono', Menlo, Consolas, monospace;

  /* ── 品牌主色（默认 = 星云紫，可被 themes.ts 注入覆盖） ── */
  --mg-primary:        #7c3aed;
  --mg-primary-rgb:    124, 58, 237;
  --mg-primary-hover:  #8b5cf6;
  --mg-primary-hover-rgb: 139, 92, 246;
  --mg-primary-active: #5b21b6;
  --mg-accent:         #c4b5fd;
  --mg-accent-rgb:     196, 181, 253;

  --mg-primary-light-3: #9d6cf2;
  --mg-primary-light-5: #b594f7;
  --mg-primary-light-7: #6f4eab;
  --mg-primary-light-8: #4c357a;
  --mg-primary-light-9: #2d1f55;
  --mg-primary-dark-2:  #4c1d95;

  /* ── 背景：深紫黑底 ── */
  --mg-bg-app-1:        #0e0a24;
  --mg-bg-app-2:        #1f1147;
  --mg-bg-app-3:        #06031a;
  --mg-bg-app-deep-rgb: 6, 3, 26;

  --mg-bg-aside-1:      #0c0820;
  --mg-bg-aside-2:      #03020e;
  --mg-bg-aside-rgb:    10, 6, 30;

  --mg-bg-card-rgb:         38, 24, 78;
  --mg-bg-card-hi-rgb:      58, 38, 110;
  --mg-bg-card-darker-rgb:  20, 12, 48;
  --mg-shadow-rgb:          8, 2, 24;

  --mg-text-tint-rgb:   242, 232, 255;
  --mg-text-hi-rgb:     220, 200, 252;

  --mg-orb-a-opacity: 0.55;
  --mg-orb-b-opacity: 0.50;
  --mg-orb-c-opacity: 0.40;

  /* ── 玻璃设计令牌（霓虹磨砂玻璃体系，主色感知更明显） ── */
  --mg-glass-bg:        rgba(255, 255, 255, 0.06);
  --mg-glass-bg-hover:  rgba(255, 255, 255, 0.10);
  --mg-glass-bg-active: rgba(255, 255, 255, 0.14);
  --mg-glass-border:    rgba(255, 255, 255, 0.18);
  --mg-glass-border-hi: rgba(255, 255, 255, 0.28);
  --mg-glass-shadow:
    0 10px 28px rgba(var(--mg-shadow-rgb), 0.55),
    0 0 22px rgba(var(--mg-primary-rgb), 0.18),
    0 0 0 1px rgba(255, 255, 255, 0.06) inset,
    0 1px 0 rgba(255, 255, 255, 0.12) inset;
  --mg-glass-shadow-hi:
    0 18px 44px rgba(var(--mg-shadow-rgb), 0.70),
    0 0 36px rgba(var(--mg-primary-hover-rgb), 0.30),
    0 0 0 1px rgba(var(--mg-accent-rgb), 0.25) inset,
    0 1px 0 rgba(255, 255, 255, 0.22) inset;
  --mg-glass-blur:      blur(20px) saturate(160%);
  --mg-glass-blur-hi:   blur(30px) saturate(180%);

  --mg-radius-sm: 8px;
  --mg-radius:    14px;
  --mg-radius-lg: 20px;
  --mg-radius-xl: 24px;

  /* ── 文字 ── */
  --mg-text-light:  #ffffff;
  --mg-text-muted:  rgba(255, 255, 255, 0.7);
  --mg-text-dim:    rgba(255, 255, 255, 0.5);
  --mg-text-faint:  rgba(255, 255, 255, 0.35);
  --mg-divider:     rgba(255, 255, 255, 0.08);

  /* ── Element Plus 主色覆盖 ── */
  --el-color-primary:        var(--mg-primary);
  --el-color-primary-rgb:    var(--mg-primary-rgb);
  --el-color-primary-light-3: var(--mg-primary-light-3);
  --el-color-primary-light-5: var(--mg-primary-light-5);
  --el-color-primary-light-7: var(--mg-primary-light-7);
  --el-color-primary-light-8: var(--mg-primary-light-8);
  --el-color-primary-light-9: var(--mg-primary-light-9);
  --el-color-primary-dark-2:  var(--mg-primary-dark-2);

  --mg-transition: all .25s cubic-bezier(.25, .8, .25, 1);

  /* ── 通用「内嵌表面」veil 令牌 ──
   * 面板里的嵌套行 / 子卡 / 统计项常用 rgba(255,255,255,.0x) 当作浅色微透表面，
   * 在深色主题里是「白色微透」效果；但 fame-lavender 浅紫主题切到白底后这些白veil
   * 直接消失（白叠白）。把它们抽成令牌：深色主题保持白微透，fame-lavender 翻成紫微透，
   * 这样所有引用处自动双主题可见，且不影响 6 套深色主题观感。 */
  --mg-veil-1: rgba(255, 255, 255, 0.05);
  --mg-veil-2: rgba(255, 255, 255, 0.08);
  --mg-veil-3: rgba(255, 255, 255, 0.12);
  --mg-veil-border: rgba(255, 255, 255, 0.12);
  --mg-veil-border-hi: rgba(255, 255, 255, 0.20);

  /* ── 面板「动作按钮」令牌 ──
   * 深色主题：半透明紫玻璃底 + 白字；fame-lavender：实色紫底 + 白字（对比足够）。 */
  --mg-action-bg: rgba(76, 29, 149, 0.45);
  --mg-action-bg-hover: rgba(109, 40, 217, 0.75);
  --mg-action-border: rgba(167, 139, 250, 0.55);
  --mg-action-border-hi: rgba(196, 181, 253, 0.9);
}

html {
  --el-color-primary:        var(--mg-primary) !important;
  --el-color-primary-rgb:    var(--mg-primary-rgb) !important;
  --el-color-primary-light-3: var(--mg-primary-light-3) !important;
  --el-color-primary-light-5: var(--mg-primary-light-5) !important;
  --el-color-primary-light-7: var(--mg-primary-light-7) !important;
  --el-color-primary-light-8: var(--mg-primary-light-8) !important;
  --el-color-primary-light-9: var(--mg-primary-light-9) !important;
  --el-color-primary-dark-2:  var(--mg-primary-dark-2) !important;
}

body {
  margin: 0;
  font-family: var(--mg-font-sans);
  color: var(--mg-text-light);
  background:
    radial-gradient(ellipse at 20% 0%, rgba(var(--mg-primary-hover-rgb), 0.45) 0%, transparent 55%),
    radial-gradient(ellipse at 80% 100%, rgba(var(--mg-bg-card-rgb), 0.65) 0%, transparent 55%),
    linear-gradient(135deg, var(--mg-bg-app-1) 0%, var(--mg-bg-app-2) 50%, var(--mg-bg-app-3) 100%);
  background-attachment: fixed;
  min-height: 100vh;
  transition: background-color .35s ease;
}

#app { min-height: 100vh; position: relative; }

/* ── 全局科幻网格层 (默认开启,主题可单独关闭) ── */
#app::before {
  content: '';
  position: fixed;
  inset: 0;
  pointer-events: none;
  z-index: 0;
  background-image:
    linear-gradient(rgba(var(--mg-accent-rgb), 0.05) 1px, transparent 1px),
    linear-gradient(90deg, rgba(var(--mg-accent-rgb), 0.05) 1px, transparent 1px);
  background-size: 48px 48px, 48px 48px;
  mask-image: radial-gradient(ellipse at center, rgba(0, 0, 0, 0.85) 0%, transparent 75%);
  -webkit-mask-image: radial-gradient(ellipse at center, rgba(0, 0, 0, 0.85) 0%, transparent 75%);
  opacity: 0.55;
}
/* ── 极淡扫描线（增加科技感） ── */
#app::after {
  content: '';
  position: fixed;
  inset: 0;
  pointer-events: none;
  z-index: 0;
  background-image: repeating-linear-gradient(
    0deg,
    rgba(255, 255, 255, 0.018) 0,
    rgba(255, 255, 255, 0.018) 1px,
    transparent 1px,
    transparent 3px
  );
  mix-blend-mode: overlay;
}

/* 让所有 router 内容在背景层之上 */
.app-shell, .login-page { position: relative; z-index: 1; }

/* ── 玻璃卡片复用类 ── */
.mg-glass {
  background: var(--mg-glass-bg);
  border: 1px solid var(--mg-glass-border);
  border-radius: var(--mg-radius);
  backdrop-filter: var(--mg-glass-blur);
  -webkit-backdrop-filter: var(--mg-glass-blur);
  box-shadow: var(--mg-glass-shadow);
  transition: var(--mg-transition);
}
.mg-glass:hover {
  background: var(--mg-glass-bg-hover);
  border-color: var(--mg-glass-border-hi);
  box-shadow: var(--mg-glass-shadow-hi);
  transform: translateY(-2px);
}
.mg-glass-lg {
  background: rgba(255, 255, 255, 0.08);
  border: 1px solid rgba(255, 255, 255, 0.22);
  border-radius: var(--mg-radius-lg);
  backdrop-filter: var(--mg-glass-blur-hi);
  -webkit-backdrop-filter: var(--mg-glass-blur-hi);
  box-shadow:
    0 30px 80px rgba(var(--mg-shadow-rgb), 0.55),
    0 0 0 1px rgba(255, 255, 255, 0.25) inset,
    0 1px 0 rgba(255, 255, 255, 0.4) inset;
}

/* ── 主按钮统一 ── */
.el-button--primary {
  --el-button-bg-color: var(--mg-primary);
  --el-button-border-color: var(--mg-primary);
  --el-button-hover-bg-color: var(--mg-primary-hover);
  --el-button-hover-border-color: var(--mg-primary-hover);
  --el-button-active-bg-color: var(--mg-primary-active);
  --el-button-active-border-color: var(--mg-primary-active);
}

/* ── 滚动条 ── */
::-webkit-scrollbar { width: 6px; height: 6px; }
::-webkit-scrollbar-thumb {
  background: rgba(var(--mg-accent-rgb), 0.4);
  border-radius: 3px;
}
::-webkit-scrollbar-thumb:hover { background: rgba(var(--mg-accent-rgb), 0.7); }
::-webkit-scrollbar-track { background: transparent; }

::selection { background: rgba(var(--mg-accent-rgb), 0.4); color: #fff; }

a { color: var(--mg-accent); }
a:hover { color: rgba(var(--mg-accent-rgb), 0.85); }

/* ── 玻璃语境下 Element Plus 全局填充/背景变量暗化（会话 N+2 UI 修复）──
 * 问题：默认 industrial-purple (星云紫) 主题下，`.mg-content` 把 `--el-text-color-primary`
 * 改成白色 (line ~290) 让卡片/Table 等深底组件的字可读，但 element-plus 内部仍然有
 * `var(--el-fill-color-light)` (#f5f7fa)、`var(--el-bg-color)` (#fff) 等浅色填充值。
 * 任何组件（如 FieldMemberEditor `.fme-desc`、ProjectPropertiesView .pp-desc）用
 * `background: var(--el-fill-color-light)` + `color: var(--el-text-color-primary)` 就撞出
 * 「浅灰底 + 白字」不可读。
 *
 * 解法：把 element-plus 填充/背景变量改成基于 `--mg-bg-card-rgb` 的半透明：
 *   - industrial-purple 时 --mg-bg-card-rgb = "38, 24, 78"  → 暗紫 35-55% 透明，深底+白字 OK；
 *   - fame-lavender    时 --mg-bg-card-rgb = "255, 255, 255" → 白色 35-55% 透明，配 fame-lavender
 *     的 #2d1b69 深字（line ~1069 已配）也清楚。
 * 边框、占位符同步走「主色感知」的灰阶。 */
.mg-content {
  --el-fill-color-blank: transparent;
  --el-fill-color-light: rgba(var(--mg-bg-card-rgb), 0.45);
  --el-fill-color-lighter: rgba(var(--mg-bg-card-rgb), 0.35);
  --el-fill-color: rgba(var(--mg-bg-card-rgb), 0.55);
  --el-fill-color-dark: rgba(var(--mg-bg-card-rgb), 0.65);
  --el-fill-color-darker: rgba(var(--mg-bg-card-rgb), 0.75);
  --el-bg-color: rgba(var(--mg-bg-card-rgb), 0.55);
  --el-bg-color-page: transparent;
  --el-bg-color-overlay: rgba(var(--mg-bg-card-rgb), 0.92);
  --el-border-color: rgba(255, 255, 255, 0.14);
  --el-border-color-light: rgba(255, 255, 255, 0.10);
  --el-border-color-lighter: rgba(255, 255, 255, 0.08);
  --el-border-color-extra-light: rgba(255, 255, 255, 0.06);
  --el-text-color-secondary: rgba(var(--mg-text-hi-rgb), 0.7);
  --el-text-color-placeholder: rgba(255, 255, 255, 0.40);
  --el-text-color-disabled: rgba(255, 255, 255, 0.30);
}

/* FieldMemberEditor / ProjectPropertiesView 的「描述长条」专项修复 ─
 * 组件 scoped css 写 `background: var(--el-fill-color-light)` + `color: var(--el-text-color-primary)`，
 * 即便上面 `.mg-content` 已经把变量改基于 --mg-bg-card-rgb，组件本身仍可能因 Vue scoped 选择器
 * 优先级把变量「冻结」住。这里直接给 `.fme-desc` 在 .mg-content 上下文里写绝对色，杜绝歧义。 */
.mg-content .fme-desc {
  background: rgba(var(--mg-bg-card-rgb), 0.55) !important;
  color: var(--mg-text-light) !important;
  border-left-color: var(--mg-accent) !important;
}
.mg-content .fme-path { color: var(--mg-text-light) !important; }
.mg-content .fme-path-empty { color: var(--mg-text-muted) !important; }

/* ─── 「admin 风格 tabs」共享样式（会话 N+2 用户反馈） ────────────────────────────
 * 把「场景管理」(SceneManagerView) 里的 type="border-card" + 紫色高亮 tabs 抽成
 * 全局 .admin-tabs 类，让项目属性 / 车辆管理 / 后续配置中心等多 tab 页面统一外观。
 *
 * 用法：<el-tabs class="admin-tabs" type="border-card"> ... </el-tabs>
 * - 容器：透明背景 + 紫色微辉边框；
 * - tab 头：透明 + 浅紫边线；
 * - tab 项：未激活淡紫白；hover 加亮；激活时紫色高亮底 + 紫色底边。
 * 仅在 .mg-content 内生效，避免污染登录页等非主区组件。 */
.mg-content .admin-tabs.el-tabs--border-card {
  height: 100%;
  background: rgba(var(--mg-bg-card-rgb), 0.45) !important;
  border: 1px solid rgba(255, 255, 255, 0.10) !important;
  border-radius: var(--mg-radius);
  box-shadow: var(--mg-glass-shadow);
  backdrop-filter: var(--mg-glass-blur);
  -webkit-backdrop-filter: var(--mg-glass-blur);
  overflow: hidden;
  display: flex;
  flex-direction: column;
}
.mg-content .admin-tabs.el-tabs--border-card > .el-tabs__header {
  background: rgba(var(--mg-bg-card-darker-rgb), 0.35) !important;
  border-bottom: 1px solid rgba(255, 255, 255, 0.10) !important;
  margin: 0;
}
.mg-content .admin-tabs.el-tabs--border-card > .el-tabs__header .el-tabs__nav {
  border: 0 !important;
}
.mg-content .admin-tabs.el-tabs--border-card > .el-tabs__header .el-tabs__item {
  background: transparent !important;
  color: rgba(220, 200, 240, 0.75) !important;
  border: 0 !important;
  height: 42px;
  line-height: 42px;
  font-size: 13.5px;
  letter-spacing: 0.5px;
  padding: 0 18px !important;
  transition: background .2s ease, color .2s ease;
}
.mg-content .admin-tabs.el-tabs--border-card > .el-tabs__header .el-tabs__item:hover {
  background: rgba(var(--mg-accent-rgb), 0.10) !important;
  color: #fff !important;
}
.mg-content .admin-tabs.el-tabs--border-card > .el-tabs__header .el-tabs__item.is-active {
  background: rgba(var(--mg-accent-rgb), 0.18) !important;
  color: #fff !important;
  font-weight: 600;
  box-shadow: inset 0 -2px 0 0 var(--mg-accent);
}
.mg-content .admin-tabs.el-tabs--border-card > .el-tabs__content {
  flex: 1;
  padding: 14px;
  overflow: auto;
  background: transparent !important;
}
.mg-content .admin-tabs.el-tabs--border-card .el-tab-pane {
  height: 100%;
}

/* fame-lavender 主题下 admin-tabs 反白：浅紫底 + 深紫字 + 紫色高亮 */
:root[data-theme="fame-lavender"] .mg-content .admin-tabs.el-tabs--border-card {
  background: #ffffff !important;
  border: 1px solid rgba(124, 58, 237, 0.18) !important;
  box-shadow: 0 8px 24px rgba(124, 58, 237, 0.06) !important;
}
:root[data-theme="fame-lavender"] .mg-content .admin-tabs.el-tabs--border-card > .el-tabs__header {
  background: rgba(124, 58, 237, 0.04) !important;
  border-bottom: 1px solid rgba(124, 58, 237, 0.14) !important;
}
:root[data-theme="fame-lavender"] .mg-content .admin-tabs.el-tabs--border-card > .el-tabs__header .el-tabs__item {
  color: #4a3d6e !important;
}
:root[data-theme="fame-lavender"] .mg-content .admin-tabs.el-tabs--border-card > .el-tabs__header .el-tabs__item:hover {
  background: rgba(124, 58, 237, 0.08) !important;
  color: #7c3aed !important;
}
:root[data-theme="fame-lavender"] .mg-content .admin-tabs.el-tabs--border-card > .el-tabs__header .el-tabs__item.is-active {
  background: rgba(124, 58, 237, 0.14) !important;
  color: #7c3aed !important;
}

/* ── 玻璃语境下 Element Plus 的常见组件调整 ── */
.mg-content .el-card {
  background: linear-gradient(135deg, rgba(var(--mg-bg-card-rgb), 0.55) 0%, rgba(var(--mg-bg-app-deep-rgb), 0.6) 100%) !important;
  border: 1px solid rgba(255, 255, 255, 0.14);
  border-radius: var(--mg-radius);
  backdrop-filter: var(--mg-glass-blur);
  -webkit-backdrop-filter: var(--mg-glass-blur);
  box-shadow: var(--mg-glass-shadow);
  color: var(--mg-text-light);
  transition: var(--mg-transition);
  overflow: hidden;
}
.mg-content .el-card:hover {
  background: linear-gradient(135deg, rgba(var(--mg-bg-card-hi-rgb), 0.65) 0%, rgba(var(--mg-bg-card-darker-rgb), 0.67) 100%) !important;
  border-color: rgba(255, 255, 255, 0.22);
  box-shadow: var(--mg-glass-shadow-hi);
  transform: translateY(-2px);
}
.mg-content .el-card.no-hover:hover {
  transform: none;
}
.mg-content .el-card__header {
  background: rgba(255, 255, 255, 0.04);
  border-bottom: 1px solid rgba(255, 255, 255, 0.1);
  color: var(--mg-text-light);
  font-weight: 600;
  padding: 14px 18px;
}
.mg-content .el-card__body {
  background: transparent !important;
  color: var(--mg-text-light);
}

/* 嵌套的 card（如 ConfigPageBase 内层）使用更浅的透明度 */
.mg-content .el-card .el-card {
  background: rgba(255, 255, 255, 0.04) !important;
  border-color: rgba(255, 255, 255, 0.1);
  box-shadow: none;
}
.mg-content .el-card .el-card:hover {
  background: rgba(255, 255, 255, 0.06) !important;
  transform: none;
  box-shadow: none;
}

.mg-content h1,
.mg-content h2,
.mg-content h3 { color: var(--mg-text-light); margin-top: 0; }
.mg-content p { color: var(--mg-text-muted); }

/* el-statistic 在玻璃语境下 */
.mg-content .el-statistic__head { color: var(--mg-text-muted); }
.mg-content .el-statistic__number { color: var(--mg-text-light); }
.mg-content .el-statistic__content { color: var(--mg-text-light); }

/* el-tabs 玻璃语境（SimpleLite 监控台：地图/进程/场景等） */
.mg-content .el-tabs {
  --el-text-color-primary: #fff;
}
.mg-content .el-tabs__item {
  color: rgba(255, 255, 255, 0.82) !important;
}
.mg-content .el-tabs__item:hover {
  color: #fff !important;
}
.mg-content .el-tabs__item.is-active {
  color: #fff !important;
  font-weight: 600;
}
.mg-content .el-tabs__active-bar {
  background-color: var(--mg-accent) !important;
}
.mg-content .el-tabs__nav-wrap::after {
  background-color: rgba(255, 255, 255, 0.14) !important;
}

/* el-table 在玻璃语境下 */
.mg-content .el-table,
.mg-content .el-table tr,
.mg-content .el-table--striped .el-table__body tr.el-table__row--striped td.el-table__cell {
  background: transparent !important;
}
.mg-content .el-table {
  --el-table-bg-color: transparent;
  --el-table-tr-bg-color: transparent;
  --el-table-header-bg-color: transparent;
  --el-table-row-hover-bg-color: rgba(var(--mg-accent-rgb), 0.18);
  --el-table-border-color: rgba(255, 255, 255, 0.1);
  --el-table-header-text-color: rgba(255, 255, 255, 0.7);
  --el-table-text-color: var(--mg-text-light);
  --el-fill-color-blank: transparent;
  --el-fill-color-light: rgba(255, 255, 255, 0.04);
  color: var(--mg-text-light) !important;
}
.mg-content .el-table th.el-table__cell {
  background: rgba(255, 255, 255, 0.06) !important;
  color: rgba(255, 255, 255, 0.75) !important;
  border-bottom-color: rgba(255, 255, 255, 0.12) !important;
}
.mg-content .el-table td.el-table__cell {
  background: transparent !important;
  color: var(--mg-text-light) !important;
  border-bottom-color: rgba(255, 255, 255, 0.08) !important;
}
.mg-content .el-table--striped .el-table__body tr:nth-child(2n) td.el-table__cell {
  background: rgba(255, 255, 255, 0.03) !important;
}
.mg-content .el-table tr:hover > td.el-table__cell,
.mg-content .el-table__body tr.hover-row > td.el-table__cell {
  background: rgba(var(--mg-accent-rgb), 0.18) !important;
}
.mg-content .el-table__empty-block { background: transparent; color: var(--mg-text-dim); }
.mg-content .el-table__inner-wrapper::before,
.mg-content .el-table::before { background: rgba(255, 255, 255, 0.1) !important; }

/* el-input 在玻璃语境下 (admin 区表单) */
.mg-content .el-input__wrapper,
.mg-content .el-textarea__inner {
  background: rgba(255, 255, 255, 0.06) !important;
  box-shadow: 0 0 0 1px rgba(255, 255, 255, 0.18) inset !important;
}
.mg-content .el-input__wrapper.is-focus {
  box-shadow: 0 0 0 1px rgba(var(--mg-accent-rgb), 0.7) inset, 0 0 16px rgba(var(--mg-primary-hover-rgb), 0.35) !important;
}
.mg-content .el-input__inner { color: var(--mg-text-light) !important; }
.mg-content .el-input__inner::placeholder { color: var(--mg-text-faint); }

/* el-form-item label */
.mg-content .el-form-item__label { color: var(--mg-text-muted) !important; }

/* el-divider */
.mg-content .el-divider__text { background: transparent !important; color: var(--mg-text-muted); }
.mg-content .el-divider { background: var(--mg-divider); }

/* el-tag 在玻璃语境下保持主题色 */
.mg-content .el-tag {
  background: rgba(var(--mg-accent-rgb), 0.18);
  color: rgba(var(--mg-text-tint-rgb), 1);
  border-color: rgba(var(--mg-accent-rgb), 0.4);
}
.mg-content .el-tag--success {
  background: rgba(111, 143, 76, 0.22);
  color: #c0d99c;
  border-color: rgba(111, 143, 76, 0.5);
}
.mg-content .el-tag--warning {
  background: rgba(201, 138, 29, 0.22);
  color: #f5cf85;
  border-color: rgba(201, 138, 29, 0.5);
}
.mg-content .el-tag--danger {
  background: rgba(179, 50, 79, 0.22);
  color: #ff9bb8;
  border-color: rgba(179, 50, 79, 0.5);
}
.mg-content .el-tag--info {
  background: rgba(122, 107, 135, 0.22);
  color: #c9bdd6;
  border-color: rgba(122, 107, 135, 0.5);
}

/* el-descriptions 在玻璃语境 */
.mg-content .el-descriptions {
  --el-text-color-primary: #fff;
  --el-text-color-regular: var(--mg-text-muted);
  --el-border-color-lighter: rgba(255, 255, 255, 0.12);
  --el-fill-color-blank: transparent;
  color: var(--mg-text-light);
}
.mg-content .el-descriptions__body,
.mg-content .el-descriptions__table {
  background: transparent !important;
}
.mg-content .el-descriptions__label,
.mg-content .el-descriptions__cell.is-bordered-label {
  background: rgba(255, 255, 255, 0.05) !important;
  color: var(--mg-text-muted) !important;
  border-color: rgba(255, 255, 255, 0.12) !important;
}
.mg-content .el-descriptions__content,
.mg-content .el-descriptions__cell.is-bordered-content {
  background: transparent !important;
  color: #fff !important;
  border-color: rgba(255, 255, 255, 0.12) !important;
}
.mg-content .el-descriptions__title { color: #fff; }

/* el-progress 主题色 */
.mg-content .el-progress-bar__outer {
  background: rgba(255, 255, 255, 0.1);
}
.mg-content .el-progress-bar__inner {
  background: linear-gradient(90deg, var(--mg-primary-hover) 0%, var(--mg-accent) 100%);
}

/* el-alert 玻璃化 */
.mg-content .el-alert {
  background: rgba(255, 255, 255, 0.06) !important;
  border: 1px solid rgba(255, 255, 255, 0.14);
  color: var(--mg-text-light);
}
.mg-content .el-alert__title,
.mg-content .el-alert__description { color: var(--mg-text-light) !important; }

/* el-collapse 玻璃化 */
.mg-content .el-collapse {
  border-color: rgba(255, 255, 255, 0.1);
  --el-collapse-header-bg-color: transparent;
  --el-collapse-content-bg-color: transparent;
  --el-collapse-header-text-color: #fff;
  --el-collapse-content-text-color: var(--mg-text-light);
}
.mg-content .el-collapse-item__header,
.mg-content .el-collapse-item__wrap {
  background: transparent !important;
  border-color: rgba(255, 255, 255, 0.1) !important;
  color: var(--mg-text-light) !important;
}

/* el-radio / el-checkbox 在玻璃语境下 */
.mg-content .el-radio__label,
.mg-content .el-checkbox__label { color: var(--mg-text-light) !important; }
.mg-content .el-radio__inner,
.mg-content .el-checkbox__inner {
  background: rgba(255, 255, 255, 0.08);
  border-color: rgba(255, 255, 255, 0.32);
}

/* el-radio-button */
.mg-content .el-radio-button__inner {
  background: rgba(255, 255, 255, 0.06) !important;
  border-color: rgba(255, 255, 255, 0.18) !important;
  color: var(--mg-text-light) !important;
}
.mg-content .el-radio-button.is-active .el-radio-button__inner {
  background: var(--mg-primary) !important;
  border-color: var(--mg-primary) !important;
  color: #fff !important;
}

/* el-select 玻璃化 */
.mg-content .el-select .el-input__wrapper {
  background: rgba(255, 255, 255, 0.06) !important;
  box-shadow: 0 0 0 1px rgba(255, 255, 255, 0.18) inset !important;
}

/* el-input-number 玻璃化 */
.mg-content .el-input-number .el-input-number__decrease,
.mg-content .el-input-number .el-input-number__increase {
  background: rgba(255, 255, 255, 0.06) !important;
  color: var(--mg-text-muted) !important;
  border-color: rgba(255, 255, 255, 0.15) !important;
}

/* el-switch 主题色 */
.mg-content .el-switch.is-checked .el-switch__core {
  background: var(--mg-primary);
  border-color: var(--mg-primary);
}

/* el-statistic 颜色重置 */
.mg-content .el-statistic .el-statistic__head {
  color: var(--mg-text-muted);
  font-size: 13px;
}
.mg-content .el-statistic .el-statistic__number,
.mg-content .el-statistic .el-statistic__content {
  color: #fff;
  font-weight: 600;
  text-shadow: 0 2px 8px rgba(var(--mg-primary-hover-rgb), 0.4);
}

/* KPI 玻璃卡片：<el-row class="kpi-row"> 内的 el-statistic 自动玻璃化 */
.mg-content .kpi-row .el-statistic,
.mg-content .kpi-card {
  background: linear-gradient(135deg, rgba(var(--mg-bg-card-rgb), 0.55) 0%, rgba(var(--mg-bg-app-deep-rgb), 0.6) 100%);
  border: 1px solid rgba(255, 255, 255, 0.14);
  border-radius: var(--mg-radius);
  padding: 16px 18px;
  backdrop-filter: var(--mg-glass-blur);
  -webkit-backdrop-filter: var(--mg-glass-blur);
  box-shadow: var(--mg-glass-shadow);
  transition: var(--mg-transition);
}
.mg-content .kpi-row .el-statistic:hover,
.mg-content .kpi-card:hover {
  background: linear-gradient(135deg, rgba(var(--mg-bg-card-hi-rgb), 0.65) 0%, rgba(var(--mg-bg-card-darker-rgb), 0.67) 100%);
  transform: translateY(-2px);
  box-shadow: var(--mg-glass-shadow-hi);
  border-color: rgba(255, 255, 255, 0.22);
}

/* el-pagination 玻璃化 */
.mg-content .el-pagination {
  --el-pagination-bg-color: transparent;
  --el-pagination-button-bg-color: rgba(255, 255, 255, 0.06);
  --el-pagination-button-color: var(--mg-text-light);
  --el-pagination-hover-color: var(--mg-accent);
  color: var(--mg-text-muted);
}

/* el-dropdown-menu 暗化 */
.el-dropdown-menu {
  background: rgba(var(--mg-bg-aside-rgb), 0.92) !important;
  backdrop-filter: blur(20px);
  border: 1px solid rgba(255, 255, 255, 0.12) !important;
}
.el-dropdown-menu__item {
  color: rgba(255, 255, 255, 0.8) !important;
}
.el-dropdown-menu__item:hover {
  background: rgba(var(--mg-accent-rgb), 0.18) !important;
  color: #fff !important;
}

/* el-message / 全局消息提示沿用 Element Plus 默认浅色（在暗背景上更易读） */

/* el-button default 按钮在玻璃语境下 */
.mg-content .el-button:not(.el-button--primary):not(.el-button--success):not(.el-button--warning):not(.el-button--danger):not(.el-button--text) {
  background: rgba(255, 255, 255, 0.08);
  border-color: rgba(255, 255, 255, 0.2);
  color: var(--mg-text-light);
}
.mg-content .el-button:not(.el-button--primary):not(.el-button--success):not(.el-button--warning):not(.el-button--danger):not(.el-button--text):hover {
  background: rgba(var(--mg-accent-rgb), 0.18);
  border-color: rgba(var(--mg-accent-rgb), 0.5);
  color: #fff;
}

/* h2 在浅色页面（如对话框）保留主题深色 */
.el-dialog h2 { color: var(--mg-primary-active); }
.el-dialog { border-radius: var(--mg-radius); }

/* ─────────────── 星云紫专项：深紫底 + 蓝紫辉光 + 霓虹高光 ─────────────── */
:root[data-theme="industrial-purple"] {
  --mg-orb-a-opacity: 0.55;
  --mg-orb-b-opacity: 0.50;
  --mg-orb-c-opacity: 0.42;
  --mg-glass-bg:        rgba(28, 14, 62, 0.62);
  --mg-glass-bg-hover:  rgba(44, 22, 88, 0.72);
  --mg-glass-border:    rgba(var(--mg-accent-rgb), 0.18);
  --mg-glass-border-hi: rgba(var(--mg-accent-rgb), 0.55);
  --mg-glass-shadow:
    0 12px 32px rgba(0, 0, 0, 0.55),
    0 0 24px rgba(var(--mg-primary-rgb), 0.25),
    0 0 0 1px rgba(var(--mg-accent-rgb), 0.10) inset,
    0 1px 0 rgba(255, 255, 255, 0.14) inset;
  --mg-glass-shadow-hi:
    0 20px 50px rgba(0, 0, 0, 0.68),
    0 0 42px rgba(var(--mg-primary-hover-rgb), 0.42),
    0 0 0 1px rgba(var(--mg-accent-rgb), 0.32) inset,
    0 1px 0 rgba(255, 255, 255, 0.24) inset;
  --mg-text-muted:      rgba(255, 255, 255, 0.86);
  --mg-text-dim:        rgba(220, 200, 252, 0.70);
}

:root[data-theme="industrial-purple"] body {
  background:
    radial-gradient(circle at 8% 8%, rgba(var(--mg-primary-hover-rgb), 0.55) 0%, transparent 48%),
    radial-gradient(ellipse at 92% 18%, rgba(var(--mg-accent-rgb), 0.28) 0%, transparent 42%),
    radial-gradient(circle at 78% 88%, rgba(var(--mg-primary-rgb), 0.55) 0%, transparent 46%),
    radial-gradient(ellipse at 18% 92%, rgba(99, 102, 241, 0.30) 0%, transparent 48%),
    linear-gradient(135deg, var(--mg-bg-app-1) 0%, var(--mg-bg-app-2) 48%, var(--mg-bg-app-3) 100%);
}

/* 星云紫主题下:网格更紫,扫描线更明显 */
:root[data-theme="industrial-purple"] #app::before {
  background-image:
    linear-gradient(rgba(var(--mg-accent-rgb), 0.07) 1px, transparent 1px),
    linear-gradient(90deg, rgba(var(--mg-accent-rgb), 0.07) 1px, transparent 1px);
  opacity: 0.85;
}
:root[data-theme="industrial-purple"] #app::after {
  background-image: repeating-linear-gradient(
    0deg,
    rgba(var(--mg-accent-rgb), 0.03) 0,
    rgba(var(--mg-accent-rgb), 0.03) 1px,
    transparent 1px,
    transparent 3px
  );
}

/* 卡片：紫色玻璃质感 */
:root[data-theme="industrial-purple"] .mg-content .el-card,
:root[data-theme="industrial-purple"] .mg-content .kpi-row .el-statistic,
:root[data-theme="industrial-purple"] .mg-content .kpi-card {
  position: relative;
  background:
    linear-gradient(145deg,
      rgba(var(--mg-bg-card-rgb), 0.78) 0%,
      rgba(var(--mg-bg-app-deep-rgb), 0.86) 100%) !important;
  border: 1px solid rgba(var(--mg-accent-rgb), 0.14) !important;
  border-radius: var(--mg-radius) !important;
  box-shadow:
    0 12px 30px rgba(0, 0, 0, 0.5),
    0 0 22px rgba(var(--mg-primary-rgb), 0.16),
    inset 0 1px 0 rgba(255, 255, 255, 0.10) !important;
  backdrop-filter: blur(18px) saturate(160%);
  -webkit-backdrop-filter: blur(18px) saturate(160%);
  overflow: hidden;
}
/* 顶部 1px 高光线 → 玻璃质感的灵魂 */
:root[data-theme="industrial-purple"] .mg-content .el-card::before,
:root[data-theme="industrial-purple"] .mg-content .kpi-card::before {
  content: '';
  position: absolute;
  top: 0; left: 10%; right: 10%;
  height: 1px;
  background: linear-gradient(90deg,
    transparent 0%,
    rgba(var(--mg-accent-rgb), 0.55) 30%,
    rgba(255, 255, 255, 0.85) 50%,
    rgba(var(--mg-accent-rgb), 0.55) 70%,
    transparent 100%);
  pointer-events: none;
  opacity: 0.7;
}

:root[data-theme="industrial-purple"] .mg-content .el-card:hover,
:root[data-theme="industrial-purple"] .mg-content .kpi-row .el-statistic:hover,
:root[data-theme="industrial-purple"] .mg-content .kpi-card:hover {
  background:
    linear-gradient(145deg,
      rgba(var(--mg-bg-card-hi-rgb), 0.85) 0%,
      rgba(var(--mg-bg-card-darker-rgb), 0.92) 100%) !important;
  border-color: rgba(var(--mg-accent-rgb), 0.42) !important;
  box-shadow:
    0 18px 40px rgba(0, 0, 0, 0.6),
    0 0 38px rgba(var(--mg-primary-hover-rgb), 0.38),
    inset 0 1px 0 rgba(255, 255, 255, 0.18) !important;
}

:root[data-theme="industrial-purple"] .mg-content .el-card .el-card {
  background: rgba(var(--mg-bg-card-darker-rgb), 0.55) !important;
}
:root[data-theme="industrial-purple"] .mg-content .el-card .el-card::before {
  display: none;
}

:root[data-theme="industrial-purple"] .mg-content .el-statistic__head {
  color: rgba(255, 255, 255, 0.78) !important;
}
:root[data-theme="industrial-purple"] .mg-content .el-statistic__number,
:root[data-theme="industrial-purple"] .mg-content .el-statistic__content {
  background: linear-gradient(135deg, #ffffff 0%, rgba(var(--mg-accent-rgb), 1) 100%);
  -webkit-background-clip: text;
  background-clip: text;
  color: transparent !important;
  text-shadow: 0 0 24px rgba(var(--mg-primary-hover-rgb), 0.5);
}

:root[data-theme="industrial-purple"] .mg-content .el-table th.el-table__cell {
  background: rgba(var(--mg-bg-card-darker-rgb), 0.75) !important;
}

:root[data-theme="industrial-purple"] .mg-content .el-input__wrapper,
:root[data-theme="industrial-purple"] .mg-content .el-textarea__inner {
  background: rgba(var(--mg-bg-card-darker-rgb), 0.55) !important;
  box-shadow: 0 0 0 1px rgba(var(--mg-accent-rgb), 0.18) inset !important;
}

/* 主按钮：紫色霓虹脉冲 */
:root[data-theme="industrial-purple"] .el-button--primary {
  background: linear-gradient(135deg,
    var(--mg-primary) 0%,
    var(--mg-primary-hover) 100%) !important;
  border: none !important;
  box-shadow:
    0 8px 22px rgba(var(--mg-primary-rgb), 0.45),
    0 0 0 1px rgba(255, 255, 255, 0.18) inset !important;
  position: relative;
  overflow: hidden;
}
:root[data-theme="industrial-purple"] .el-button--primary::after {
  content: '';
  position: absolute;
  top: 0; left: -120%;
  width: 80%; height: 100%;
  background: linear-gradient(110deg,
    transparent 0%,
    rgba(255, 255, 255, 0.0) 30%,
    rgba(255, 255, 255, 0.35) 50%,
    rgba(255, 255, 255, 0.0) 70%,
    transparent 100%);
  transition: left .6s cubic-bezier(.25, .8, .25, 1);
}
:root[data-theme="industrial-purple"] .el-button--primary:hover::after { left: 120%; }
:root[data-theme="industrial-purple"] .el-button--primary:hover {
  box-shadow:
    0 12px 32px rgba(var(--mg-primary-rgb), 0.6),
    0 0 28px rgba(var(--mg-primary-hover-rgb), 0.55),
    0 0 0 1px rgba(var(--mg-accent-rgb), 0.4) inset !important;
  transform: translateY(-1px);
}

/* el-tag 增强紫色感 */
:root[data-theme="industrial-purple"] .mg-content .el-tag {
  background: linear-gradient(135deg, rgba(var(--mg-primary-rgb), 0.25), rgba(var(--mg-accent-rgb), 0.18));
  color: #fff;
  border-color: rgba(var(--mg-accent-rgb), 0.45);
}

/* 工具类：霓虹文字（卡片标题、KPI数值可用） */
.mg-neon-text {
  background: linear-gradient(135deg, #ffffff 0%, var(--mg-accent) 100%);
  -webkit-background-clip: text;
  background-clip: text;
  color: transparent;
  text-shadow: 0 0 18px rgba(var(--mg-primary-hover-rgb), 0.45);
}

/* 工具类：浮动 orb 节奏可视化（其他组件可用） */
@keyframes mg-pulse-glow {
  0%, 100% {
    box-shadow:
      0 0 0 0 rgba(var(--mg-accent-rgb), 0.35),
      0 0 28px rgba(var(--mg-primary-hover-rgb), 0.35);
  }
  50% {
    box-shadow:
      0 0 0 6px rgba(var(--mg-accent-rgb), 0),
      0 0 38px rgba(var(--mg-primary-hover-rgb), 0.55);
  }
}

/* ════════════════════════════════════════════════════════════════════
 *  迷毂浅紫 (fame-lavender) ─ 参考 FAME 系统的浅色变体
 *  设计目标：长时间使用不刺眼；右侧主区采用浅紫白底，深紫字色；
 *           侧栏保留深紫渐变以维持品牌一致性；
 *           关闭所有 orb / 网格 / 扫描线 / 霓虹光效。
 * ════════════════════════════════════════════════════════════════════ */
:root[data-theme="fame-lavender"] {
  --mg-glass-bg:        rgba(255, 255, 255, 0.95);
  --mg-glass-bg-hover:  rgba(249, 246, 255, 1);
  --mg-glass-bg-active: rgba(245, 240, 251, 1);
  --mg-glass-border:    rgba(124, 58, 237, 0.14);
  --mg-glass-border-hi: rgba(124, 58, 237, 0.35);
  --mg-glass-shadow:
    0 4px 14px rgba(45, 27, 105, 0.06),
    0 0 0 1px rgba(124, 58, 237, 0.06);
  --mg-glass-shadow-hi:
    0 8px 24px rgba(45, 27, 105, 0.10),
    0 0 0 1px rgba(124, 58, 237, 0.15);
  --mg-glass-blur:      none;
  --mg-glass-blur-hi:   none;

  /* 文字层级（v2 升级：对比度从 4.5:1 提至 7-15:1，关键提升正文清晰度） */
  --mg-text-light:  #1a0f3d;   /* 主标题 / KPI 数字 · 对比 ~15:1 */
  --mg-text-muted:  #4a3d6e;   /* 正文 / 说明文字 · 对比 ~9:1 (旧 #606266 在浅紫底上仅 5:1) */
  --mg-text-dim:    #7a6b9a;   /* 次要信息 / 时间戳 / 占位 · 对比 ~5:1 */
  --mg-text-faint:  #a8a0c0;   /* 禁用 / 装饰文字 · 对比 ~3:1 */
  --mg-divider:     #e8e1f0;   /* 分割线 / 卡片描边（比 #ebe5f4 略冷略深，更清晰） */

  /* 浅色主题状态色 (WCAG AA 兼容) */
  --mg-status-success: #15803d;
  --mg-status-success-rgb: 21, 128, 61;
  --mg-status-warning: #b45309;
  --mg-status-warning-rgb: 180, 83, 9;
  --mg-status-danger:  #b91c1c;
  --mg-status-danger-rgb: 185, 28, 28;
  --mg-status-info:    #1d4ed8;
  --mg-status-info-rgb: 29, 78, 216;
  --mg-status-idle:    #64748b;
  --mg-status-idle-rgb: 100, 116, 139;

  /* 内嵌表面 veil：浅紫主题翻成紫色微透，保证白底卡片内的嵌套行 / 子卡可见 */
  --mg-veil-1: rgba(124, 58, 237, 0.05);
  --mg-veil-2: rgba(124, 58, 237, 0.10);
  --mg-veil-3: rgba(124, 58, 237, 0.16);
  --mg-veil-border: rgba(124, 58, 237, 0.16);
  --mg-veil-border-hi: rgba(124, 58, 237, 0.32);

  /* 动作按钮：实色紫底 + 白字（对比 ~6.9:1，WCAG AA 通过） */
  --mg-action-bg: #7c3aed;
  --mg-action-bg-hover: #6d28d9;
  --mg-action-border: #7c3aed;
  --mg-action-border-hi: #6d28d9;
}

/* body：纯净紫白渐变（更柔和、长时间阅读不刺眼） */
:root[data-theme="fame-lavender"] body {
  background:
    linear-gradient(180deg, #fafaff 0%, #f5f3fb 60%, #f0eaf6 100%) !important;
  color: #1a0f3d;
}

/* 关闭全局背景网格与扫描线 */
:root[data-theme="fame-lavender"] #app::before,
:root[data-theme="fame-lavender"] #app::after {
  display: none !important;
}

/* 关闭 AppShell 中的浮动 orb */
:root[data-theme="fame-lavender"] .bg-orbs { display: none !important; }

/* 侧栏：宝石紫渐变 + 高可读性 menu 状态（v2 优化对比度与层级） */
:root[data-theme="fame-lavender"] .aside {
  background: linear-gradient(180deg, #2e1065 0%, #1c0a4d 100%) !important;
  border-right: 1px solid rgba(0, 0, 0, 0.08) !important;
  backdrop-filter: none !important;
  -webkit-backdrop-filter: none !important;
  box-shadow: 4px 0 24px rgba(45, 27, 105, 0.18) !important;
}
:root[data-theme="fame-lavender"] .aside::before { display: none !important; }
:root[data-theme="fame-lavender"] .aside .logo {
  background: transparent !important;
  border-bottom: 1px solid rgba(196, 181, 253, 0.12) !important;
}
:root[data-theme="fame-lavender"] .aside .logo-title-zh {
  background: linear-gradient(135deg, #ffffff 0%, #c4b5fd 100%) !important;
  -webkit-background-clip: text !important;
  background-clip: text !important;
  -webkit-text-fill-color: transparent !important;
  color: transparent !important;
  text-shadow: none !important;
  font-weight: 700;
}

/* inactive menu item：浅紫白文字（提高可读性，比纯白稍柔和）
 * 会话 14：原规则同样误用了 Vue scoped 专属的 :deep()，在全局 css 中无效。
 * 去掉 :deep() 后规则才能落到 element-plus 渲染出的 .el-menu-item / .el-sub-menu__title 上。 */
:root[data-theme="fame-lavender"] .aside .el-menu {
  background: transparent !important;
  border-right: none !important;
}
:root[data-theme="fame-lavender"] .aside .el-menu-item,
:root[data-theme="fame-lavender"] .aside .el-sub-menu__title {
  color: #d4cae8 !important;
  font-weight: 500 !important;
  background: transparent !important;
}
:root[data-theme="fame-lavender"] .aside .el-menu-item:hover,
:root[data-theme="fame-lavender"] .aside .el-sub-menu__title:hover {
  background: rgba(196, 181, 253, 0.10) !important;
  color: #ffffff !important;
}
:root[data-theme="fame-lavender"] .aside .el-menu-item.is-active,
:root[data-theme="fame-lavender"] .aside .el-sub-menu.is-active > .el-sub-menu__title {
  background: linear-gradient(90deg, rgba(168, 85, 247, 0.30) 0%, rgba(124, 58, 237, 0.16) 100%) !important;
  color: #ffffff !important;
  font-weight: 700 !important;
  box-shadow: inset 3px 0 0 #c4b5fd !important;
  text-shadow: none !important;
}

/* 子菜单 active 区分（左条更细更柔和） */
:root[data-theme="fame-lavender"] .aside .el-menu .el-menu-item.is-active {
  background: linear-gradient(90deg, rgba(168, 85, 247, 0.22) 0%, transparent 100%) !important;
  box-shadow: inset 2px 0 0 #a855f7 !important;
}

/* 顶部 header：白色卡片质感 */
:root[data-theme="fame-lavender"] .header {
  background: #fff !important;
  border-bottom: 1px solid #ebe5f4 !important;
  backdrop-filter: none !important;
  -webkit-backdrop-filter: none !important;
  box-shadow: 0 1px 6px rgba(45, 27, 105, 0.05) !important;
}
:root[data-theme="fame-lavender"] .header::after { display: none !important; }
/* 会话 14：原规则误用 Vue scoped 专属的 :deep() 伪类写在全局 css 里，浏览器不识别 → 整条规则
 * 被丢弃，AppShell.vue scoped 中的白色面包屑文字在 fame-lavender 白底 header 上完全看不见。
 * 这里去掉 :deep()，直接用普通后代选择器；特异性 (0,4,0) + !important 足以覆盖 scoped 的 (0,2,0)。
 * 同时补上面包屑分隔符 "/" 的色，原默认是 rgba(255,255,255,.35)，在白底上也不可见。 */
:root[data-theme="fame-lavender"] .header .el-breadcrumb__inner { color: #4a3d6e !important; font-weight: 500; }
:root[data-theme="fame-lavender"] .header .el-breadcrumb__item:last-child .el-breadcrumb__inner {
  color: #7c3aed !important;
  font-weight: 700;
}
:root[data-theme="fame-lavender"] .header .el-breadcrumb__separator { color: #a8a0c0 !important; }
:root[data-theme="fame-lavender"] .header .el-breadcrumb__inner:hover { color: #7c3aed !important; }
:root[data-theme="fame-lavender"] .header .icon-btn {
  border-color: #ebe5f4 !important;
  color: #7c3aed !important;
  background: #f8f4fc !important;
}
:root[data-theme="fame-lavender"] .header .icon-btn:hover {
  background: #ede9fe !important;
  border-color: #c4b5fd !important;
  color: #5b21b6 !important;
}
:root[data-theme="fame-lavender"] .header .runmode-tag {
  background: #f5f3ff !important;
  border-color: #ddd6fe !important;
  color: #5b21b6 !important;
}
:root[data-theme="fame-lavender"] .header .runmode-tag.WebEnabled {
  background: #ecfdf5 !important;
  border-color: #bbf7d0 !important;
  color: #047857 !important;
}
/* 会话 N+2：补 WebOnly 适配。原默认深主题 .runmode-tag.WebOnly 用 var(--mg-accent) 浅紫白字，
   在 fame-lavender 白色 header 上跟背景同色 → 完全看不见。这里强制为「紫色描边 + 深紫字」。 */
:root[data-theme="fame-lavender"] .header .runmode-tag.WebOnly {
  background: #ede9fe !important;
  border-color: #c4b5fd !important;
  color: #6d28d9 !important;
}

/* 会话 N+2：header 内 ScopeSwitcher (el-radio-button) 在 fame-lavender 白底下的适配。
 * 默认深主题下 .mg-content .el-radio-button 已配深底白字，但 header 不在 .mg-content 里，
 * 所以 fame-lavender 切到白底 header 时 element-plus 默认样式 (#fff 底 + #606266 字) 接管，
 * 看起来"灰色椭圆 + 几乎不可读" —— 这里强制改成紫色描边 + 深紫字，激活态紫底白字。 */
:root[data-theme="fame-lavender"] .header .el-radio-button__inner {
  background: #fff !important;
  border-color: #ddd6fe !important;
  color: #5b21b6 !important;
  font-weight: 500;
}
:root[data-theme="fame-lavender"] .header .el-radio-button__inner:hover {
  color: #6d28d9 !important;
  border-color: #c4b5fd !important;
  background: #f5f3ff !important;
}
:root[data-theme="fame-lavender"] .header .el-radio-button.is-active .el-radio-button__inner {
  background: #7c3aed !important;
  border-color: #7c3aed !important;
  color: #ffffff !important;
  box-shadow: 0 2px 6px rgba(124, 58, 237, 0.25);
}
:root[data-theme="fame-lavender"] .header .user-link {
  background: #f8f4fc !important;
  border-color: #ebe5f4 !important;
  color: #2d1b69 !important;
}
:root[data-theme="fame-lavender"] .header .user-link:hover {
  background: #ede9fe !important;
  border-color: #c4b5fd !important;
}
:root[data-theme="fame-lavender"] .header .user-name { color: #2d1b69 !important; }

/* 主内容区：纯净紫白底 + 高对比深字（v2 文字层级清晰化） */
:root[data-theme="fame-lavender"] .main,
:root[data-theme="fame-lavender"] .mg-content {
  background: transparent !important;
  color: #1a0f3d !important;
}
:root[data-theme="fame-lavender"] .mg-content h1,
:root[data-theme="fame-lavender"] .mg-content h2,
:root[data-theme="fame-lavender"] .mg-content h3 {
  color: #1a0f3d !important;
  font-weight: 700;
}
:root[data-theme="fame-lavender"] .mg-content p { color: #4a3d6e !important; }
:root[data-theme="fame-lavender"] .mg-content small,
:root[data-theme="fame-lavender"] .mg-content .text-secondary { color: #7a6b9a !important; }

/* footer */
:root[data-theme="fame-lavender"] .footer {
  background: rgba(255, 255, 255, 0.7) !important;
  border-top: 1px solid #ebe5f4 !important;
  backdrop-filter: none !important;
  -webkit-backdrop-filter: none !important;
  color: #909399 !important;
}

/* el-card：白底紫描边 + 双层阴影（紫色阴影更显品牌） */
:root[data-theme="fame-lavender"] .mg-content .el-card {
  background: #ffffff !important;
  border: 1px solid #e8e1f0 !important;
  border-radius: 12px !important;
  box-shadow:
    0 1px 3px rgba(45, 27, 105, 0.04),
    0 4px 12px rgba(124, 58, 237, 0.04) !important;
  backdrop-filter: none !important;
  -webkit-backdrop-filter: none !important;
  color: #1a0f3d !important;
  overflow: hidden;
}
:root[data-theme="fame-lavender"] .mg-content .el-card::before { display: none !important; }
:root[data-theme="fame-lavender"] .mg-content .el-card:hover {
  background: #ffffff !important;
  border-color: #c4b5fd !important;
  box-shadow:
    0 4px 12px rgba(45, 27, 105, 0.08),
    0 12px 28px rgba(124, 58, 237, 0.12) !important;
  transform: translateY(-1px) !important;
}
:root[data-theme="fame-lavender"] .mg-content .el-card .el-card {
  background: #faf7fd !important;
  border-color: #f0eaf6 !important;
  box-shadow: none !important;
}
:root[data-theme="fame-lavender"] .mg-content .el-card__header {
  background: #faf7fd !important;
  border-bottom: 1px solid #e8e1f0 !important;
  color: #1a0f3d !important;
  font-weight: 600;
}
:root[data-theme="fame-lavender"] .mg-content .el-card__body {
  background: transparent !important;
  color: #1a0f3d !important;
}

/* KPI 玻璃卡片：浅底化 */
:root[data-theme="fame-lavender"] .mg-content .kpi-row .el-statistic,
:root[data-theme="fame-lavender"] .mg-content .kpi-card {
  background: #fff !important;
  border: 1px solid #ebe5f4 !important;
  border-radius: 10px !important;
  box-shadow: 0 2px 8px rgba(45, 27, 105, 0.05) !important;
  backdrop-filter: none !important;
  -webkit-backdrop-filter: none !important;
  padding: 16px 18px !important;
}
:root[data-theme="fame-lavender"] .mg-content .kpi-row .el-statistic:hover,
:root[data-theme="fame-lavender"] .mg-content .kpi-card:hover {
  background: #fff !important;
  border-color: #c4b5fd !important;
  box-shadow: 0 6px 18px rgba(124, 58, 237, 0.10) !important;
  transform: none !important;
}
:root[data-theme="fame-lavender"] .mg-content .el-statistic__head { color: #4a3d6e !important; font-weight: 500; }
:root[data-theme="fame-lavender"] .mg-content .el-statistic__number,
:root[data-theme="fame-lavender"] .mg-content .el-statistic__content {
  background: none !important;
  -webkit-background-clip: initial !important;
  background-clip: initial !important;
  color: #1a0f3d !important;
  text-shadow: none !important;
  font-family: var(--mg-font-mono);
  font-variant-numeric: tabular-nums;
  font-weight: 700;
}

/* el-table：浅底高对比 + 紫色 hover */
:root[data-theme="fame-lavender"] .mg-content .el-table {
  --el-table-bg-color: #ffffff;
  --el-table-tr-bg-color: #ffffff;
  --el-table-header-bg-color: #faf7fd;
  --el-table-row-hover-bg-color: #f5f3ff;
  --el-table-border-color: #e8e1f0;
  --el-table-header-text-color: #1a0f3d;
  --el-table-text-color: #1a0f3d;
  --el-fill-color-blank: #ffffff;
  --el-fill-color-light: #faf7fd;
  color: #1a0f3d !important;
}
:root[data-theme="fame-lavender"] .mg-content .el-table,
:root[data-theme="fame-lavender"] .mg-content .el-table tr {
  background: #ffffff !important;
}
:root[data-theme="fame-lavender"] .mg-content .el-table th.el-table__cell {
  background: #faf7fd !important;
  color: #1a0f3d !important;
  border-bottom-color: #e8e1f0 !important;
  font-weight: 600;
}
:root[data-theme="fame-lavender"] .mg-content .el-table td.el-table__cell {
  background: #ffffff !important;
  color: #1a0f3d !important;
  border-bottom-color: #f0eaf6 !important;
}
:root[data-theme="fame-lavender"] .mg-content .el-table--striped .el-table__body tr:nth-child(2n) td.el-table__cell {
  background: #faf7fd !important;
}
:root[data-theme="fame-lavender"] .mg-content .el-table tr:hover > td.el-table__cell {
  background: #f5f3ff !important;
}

/* el-input / el-textarea / el-select：浅底 + 深字 + 焦点紫光晕 */
:root[data-theme="fame-lavender"] .mg-content .el-input__wrapper,
:root[data-theme="fame-lavender"] .mg-content .el-textarea__inner,
:root[data-theme="fame-lavender"] .mg-content .el-select .el-input__wrapper {
  background: #ffffff !important;
  box-shadow: 0 0 0 1px #e0d4f5 inset !important;
}
:root[data-theme="fame-lavender"] .mg-content .el-input__wrapper:hover {
  box-shadow: 0 0 0 1px #c4b5fd inset !important;
}
:root[data-theme="fame-lavender"] .mg-content .el-input__wrapper.is-focus {
  box-shadow:
    0 0 0 1px #7c3aed inset,
    0 0 0 3px rgba(124, 58, 237, 0.15) !important;
}
:root[data-theme="fame-lavender"] .mg-content .el-input__inner,
:root[data-theme="fame-lavender"] .mg-content .el-textarea__inner { color: #1a0f3d !important; font-weight: 500; }
:root[data-theme="fame-lavender"] .mg-content .el-input__inner::placeholder,
:root[data-theme="fame-lavender"] .mg-content .el-textarea__inner::placeholder { color: #a8a0c0 !important; }
:root[data-theme="fame-lavender"] .mg-content .el-form-item__label { color: #4a3d6e !important; font-weight: 500; }

/* el-tabs：紫色活跃 + 高对比 */
/* 浅色主题下 el-tabs 容器内不再继承玻璃主题强制白字，恢复深色 primary，
   避免 .mg-content .el-tabs { --el-text-color-primary: #fff } 把内部 h2 / label
   一并染白后出现"白底白字"（车辆管理标题、其他 tabs 内 .ref-mgr-title 同理）。 */
:root[data-theme="fame-lavender"] .mg-content .el-tabs {
  --el-text-color-primary: #2d1b69 !important;
  --el-text-color-regular: #303133 !important;
}
:root[data-theme="fame-lavender"] .mg-content .el-tabs__item { color: #4a3d6e !important; font-weight: 500; }
:root[data-theme="fame-lavender"] .mg-content .el-tabs__item:hover { color: #7c3aed !important; }
:root[data-theme="fame-lavender"] .mg-content .el-tabs__item.is-active {
  color: #7c3aed !important;
  font-weight: 700;
}
/* 兜底：element-plus 内部 css 改版后曾出现「.el-tabs__item 不在 .mg-content 路径下」的场景，
   再加一组不带 .mg-content 限定的规则，避免在 dialog / drawer 中弹出的 tabs 仍然白字。 */
:root[data-theme="fame-lavender"] .el-tabs__item { color: #4a3d6e !important; }
:root[data-theme="fame-lavender"] .el-tabs__item:hover { color: #7c3aed !important; }
:root[data-theme="fame-lavender"] .el-tabs__item.is-active { color: #7c3aed !important; font-weight: 700; }
:root[data-theme="fame-lavender"] .mg-content .el-tabs__active-bar {
  background-color: #7c3aed !important;
  height: 3px !important;
  border-radius: 2px;
}
:root[data-theme="fame-lavender"] .mg-content .el-tabs__nav-wrap::after { background-color: #e8e1f0 !important; }

/* ─────────────────────────────────────────────────────────────────────────
 *  ReflectionManagerPanel / CarPanelView 等 tabs 内长标题（会话 N+2 UI 修复）
 *  问题：组件 scoped CSS 写 `color: var(--el-text-color-primary, #fff)`，
 *  但在 el-tab-pane 嵌套层级里变量没下传，回退到 #fff → 浅紫背景白字看不清。
 *  解法：在 fame-lavender 主题下直接给关键文字类「深紫色 #2d1b69」+ !important，
 *  优先级压过 scoped css。同时把面板卡片底色从深紫透明改成白色，对比足够。
 * ───────────────────────────────────────────────────────────────────────── */
:root[data-theme="fame-lavender"] .mg-content .ref-mgr-page,
:root[data-theme="fame-lavender"] .mg-content .ref-mgr-title,
:root[data-theme="fame-lavender"] .mg-content .field-section-title,
:root[data-theme="fame-lavender"] .mg-content .detail-name {
  color: #2d1b69 !important;
}
:root[data-theme="fame-lavender"] .mg-content .ref-mgr-title { font-weight: 700; }
:root[data-theme="fame-lavender"] .mg-content .detail-id,
:root[data-theme="fame-lavender"] .mg-content .ref-type-asm,
:root[data-theme="fame-lavender"] .mg-content .field-empty {
  color: #7a6b9a !important;
}
:root[data-theme="fame-lavender"] .mg-content .ref-mgr-list-card,
:root[data-theme="fame-lavender"] .mg-content .ref-mgr-detail-card {
  background: #ffffff !important;
  border: 1px solid rgba(124, 58, 237, 0.16) !important;
  box-shadow: 0 8px 24px rgba(124, 58, 237, 0.06) !important;
}
:root[data-theme="fame-lavender"] .mg-content .ref-mgr-header,
:root[data-theme="fame-lavender"] .mg-content .detail-header {
  border-color: rgba(124, 58, 237, 0.18) !important;
}
:root[data-theme="fame-lavender"] .mg-content .field-section {
  color: #303133;
}
:root[data-theme="fame-lavender"] .mg-content .status-value {
  color: #303133 !important;
}

/* el-tag：浅紫 */
:root[data-theme="fame-lavender"] .mg-content .el-tag {
  background: #ede9fe !important;
  color: #5b21b6 !important;
  border-color: #ddd6fe !important;
}
:root[data-theme="fame-lavender"] .mg-content .el-tag--success {
  background: #ecfdf5 !important;
  color: #047857 !important;
  border-color: #bbf7d0 !important;
}
:root[data-theme="fame-lavender"] .mg-content .el-tag--warning {
  background: #fffbeb !important;
  color: #b45309 !important;
  border-color: #fde68a !important;
}
:root[data-theme="fame-lavender"] .mg-content .el-tag--danger {
  background: #fef2f2 !important;
  color: #b91c1c !important;
  border-color: #fecaca !important;
}
:root[data-theme="fame-lavender"] .mg-content .el-tag--info {
  background: #f3f4f6 !important;
  color: #4b5563 !important;
  border-color: #e5e7eb !important;
}

/* el-descriptions */
:root[data-theme="fame-lavender"] .mg-content .el-descriptions {
  --el-text-color-primary: #2d1b69;
  --el-text-color-regular: #606266;
  --el-border-color-lighter: #ebe5f4;
  --el-fill-color-blank: #fff;
  color: #303133 !important;
}
:root[data-theme="fame-lavender"] .mg-content .el-descriptions__label,
:root[data-theme="fame-lavender"] .mg-content .el-descriptions__cell.is-bordered-label {
  background: #faf7fd !important;
  color: #606266 !important;
  border-color: #ebe5f4 !important;
}
:root[data-theme="fame-lavender"] .mg-content .el-descriptions__content,
:root[data-theme="fame-lavender"] .mg-content .el-descriptions__cell.is-bordered-content {
  background: #fff !important;
  color: #303133 !important;
  border-color: #ebe5f4 !important;
}
:root[data-theme="fame-lavender"] .mg-content .el-descriptions__title { color: #2d1b69 !important; }

/* el-alert / collapse / radio / checkbox 浅化 */
:root[data-theme="fame-lavender"] .mg-content .el-alert {
  background: #faf7fd !important;
  border: 1px solid #ebe5f4 !important;
  color: #303133 !important;
}
:root[data-theme="fame-lavender"] .mg-content .el-alert__title,
:root[data-theme="fame-lavender"] .mg-content .el-alert__description { color: #303133 !important; }

:root[data-theme="fame-lavender"] .mg-content .el-collapse {
  border-color: #ebe5f4 !important;
  --el-collapse-header-text-color: #2d1b69;
  --el-collapse-content-text-color: #303133;
}
:root[data-theme="fame-lavender"] .mg-content .el-collapse-item__header,
:root[data-theme="fame-lavender"] .mg-content .el-collapse-item__wrap {
  background: #fff !important;
  border-color: #ebe5f4 !important;
  color: #303133 !important;
}

:root[data-theme="fame-lavender"] .mg-content .el-radio__label,
:root[data-theme="fame-lavender"] .mg-content .el-checkbox__label { color: #303133 !important; }
:root[data-theme="fame-lavender"] .mg-content .el-radio__inner,
:root[data-theme="fame-lavender"] .mg-content .el-checkbox__inner {
  background: #fff !important;
  border-color: #c4b5fd !important;
}

:root[data-theme="fame-lavender"] .mg-content .el-radio-button__inner {
  background: #fff !important;
  border-color: #ddd6fe !important;
  color: #5b21b6 !important;
}
:root[data-theme="fame-lavender"] .mg-content .el-radio-button.is-active .el-radio-button__inner {
  background: #7c3aed !important;
  border-color: #7c3aed !important;
  color: #fff !important;
}

/* el-button--primary：紫色稳重 + 高对比白字（去霓虹动画） */
:root[data-theme="fame-lavender"] .el-button--primary {
  background: #7c3aed !important;
  border: 1px solid #7c3aed !important;
  color: #ffffff !important;
  font-weight: 600;
  box-shadow:
    0 1px 2px rgba(45, 27, 105, 0.08),
    0 2px 6px rgba(124, 58, 237, 0.22) !important;
}
:root[data-theme="fame-lavender"] .el-button--primary::after { display: none !important; }
:root[data-theme="fame-lavender"] .el-button--primary:hover {
  background: #6d28d9 !important;
  border-color: #6d28d9 !important;
  box-shadow:
    0 2px 6px rgba(45, 27, 105, 0.12),
    0 4px 14px rgba(124, 58, 237, 0.32) !important;
  transform: translateY(-1px) !important;
}
:root[data-theme="fame-lavender"] .el-button--primary:active {
  background: #5b21b6 !important;
  border-color: #5b21b6 !important;
  transform: translateY(0) !important;
}

/* default 按钮：白底紫描边 + hover 浅紫底 */
:root[data-theme="fame-lavender"] .mg-content .el-button:not(.el-button--primary):not(.el-button--success):not(.el-button--warning):not(.el-button--danger):not(.el-button--text) {
  background: #ffffff !important;
  border-color: #ddd6fe !important;
  color: #5b21b6 !important;
  font-weight: 500;
}
:root[data-theme="fame-lavender"] .mg-content .el-button:not(.el-button--primary):not(.el-button--success):not(.el-button--warning):not(.el-button--danger):not(.el-button--text):hover {
  background: #f5f3ff !important;
  border-color: #a78bfa !important;
  color: #5b21b6 !important;
  box-shadow: 0 2px 6px rgba(124, 58, 237, 0.10) !important;
}

/* el-progress */
:root[data-theme="fame-lavender"] .mg-content .el-progress-bar__outer { background: #ede9fe !important; }
:root[data-theme="fame-lavender"] .mg-content .el-progress-bar__inner {
  background: linear-gradient(90deg, #7c3aed 0%, #a855f7 100%) !important;
}

/* el-pagination 浅化 */
:root[data-theme="fame-lavender"] .mg-content .el-pagination {
  --el-pagination-bg-color: #fff;
  --el-pagination-button-bg-color: #faf7fd;
  --el-pagination-button-color: #2d1b69;
  --el-pagination-hover-color: #7c3aed;
  color: #606266 !important;
}

/* el-dropdown 菜单 浅化（影响 header 用户菜单） */
:root[data-theme="fame-lavender"] .el-dropdown-menu {
  background: #fff !important;
  backdrop-filter: none !important;
  border: 1px solid #ebe5f4 !important;
  box-shadow: 0 6px 16px rgba(45, 27, 105, 0.10) !important;
}
:root[data-theme="fame-lavender"] .el-dropdown-menu__item {
  color: #303133 !important;
}
:root[data-theme="fame-lavender"] .el-dropdown-menu__item:hover {
  background: #f5f3ff !important;
  color: #7c3aed !important;
}

/* el-switch */
:root[data-theme="fame-lavender"] .mg-content .el-switch.is-checked .el-switch__core {
  background: #7c3aed !important;
  border-color: #7c3aed !important;
}

/* el-dialog 上的 h2 */
:root[data-theme="fame-lavender"] .el-dialog h2 { color: #2d1b69 !important; }
:root[data-theme="fame-lavender"] .el-dialog { background: #fff !important; }
:root[data-theme="fame-lavender"] .el-dialog__title { color: #2d1b69 !important; }
:root[data-theme="fame-lavender"] .el-dialog__body { color: #303133 !important; }

/* 滚动条：紫色半透明（与 FAME 一致） */
:root[data-theme="fame-lavender"] ::-webkit-scrollbar-thumb {
  background: rgba(124, 58, 237, 0.25);
}
:root[data-theme="fame-lavender"] ::-webkit-scrollbar-thumb:hover {
  background: rgba(124, 58, 237, 0.45);
}

/* ════════════════════════════════════════════════════════════════════
 *  通用工具类（基于 design-system tokens · 见 design-system/MASTER.md）
 * ════════════════════════════════════════════════════════════════════ */

/* 等宽数字：KPI 数值 / 坐标 / ID / 时间戳 */
.mg-mono,
.mg-num {
  font-family: var(--mg-font-mono);
  font-variant-numeric: tabular-nums;
  letter-spacing: 0;
}

/* 状态徽章（pill 样式，胶囊状） */
.mg-pill {
  display: inline-flex;
  align-items: center;
  gap: 4px;
  padding: 2px 8px;
  border-radius: 999px;
  font-size: 11px;
  font-weight: 600;
  letter-spacing: 0.3px;
  border: 1px solid transparent;
  white-space: nowrap;
}
.mg-pill.is-success {
  background: rgba(var(--mg-status-success-rgb), 0.15);
  color: var(--mg-status-success);
  border-color: rgba(var(--mg-status-success-rgb), 0.40);
}
.mg-pill.is-warning {
  background: rgba(var(--mg-status-warning-rgb), 0.15);
  color: var(--mg-status-warning);
  border-color: rgba(var(--mg-status-warning-rgb), 0.40);
}
.mg-pill.is-danger {
  background: rgba(var(--mg-status-danger-rgb), 0.15);
  color: var(--mg-status-danger);
  border-color: rgba(var(--mg-status-danger-rgb), 0.40);
}
.mg-pill.is-info {
  background: rgba(var(--mg-status-info-rgb), 0.15);
  color: var(--mg-status-info);
  border-color: rgba(var(--mg-status-info-rgb), 0.40);
}
.mg-pill.is-idle {
  background: rgba(var(--mg-status-idle-rgb), 0.15);
  color: var(--mg-status-idle);
  border-color: rgba(var(--mg-status-idle-rgb), 0.40);
}

/* 实时脉动指示点：<span class="mg-live-dot is-success"/> */
.mg-live-dot {
  display: inline-block;
  width: 8px;
  height: 8px;
  border-radius: 50%;
  background: var(--mg-status-info);
  position: relative;
}
.mg-live-dot::after {
  content: '';
  position: absolute;
  inset: -4px;
  border-radius: 50%;
  border: 2px solid currentColor;
  opacity: 0;
  animation: mg-live-pulse 1.6s ease-out infinite;
}
.mg-live-dot.is-success { background: var(--mg-status-success); color: var(--mg-status-success); }
.mg-live-dot.is-warning { background: var(--mg-status-warning); color: var(--mg-status-warning); }
.mg-live-dot.is-danger  { background: var(--mg-status-danger);  color: var(--mg-status-danger);  }
.mg-live-dot.is-info    { background: var(--mg-status-info);    color: var(--mg-status-info);    }
.mg-live-dot.is-idle    { background: var(--mg-status-idle);    color: var(--mg-status-idle); }
.mg-live-dot.is-idle::after { animation: none; }

@keyframes mg-live-pulse {
  0%   { transform: scale(0.6); opacity: 0.55; }
  70%  { transform: scale(1.5); opacity: 0; }
  100% { transform: scale(1.8); opacity: 0; }
}

/* 尊重用户的减少动画偏好 */
@media (prefers-reduced-motion: reduce) {
  .mg-live-dot::after { animation: none; }
  .bg-orb,
  .hero-orb,
  .hero-scene .agv-1,
  .hero-scene .agv-2,
  .hero-scene .float-data { animation: none !important; }
}

/* ─────────────────────────────────────────────────────────────────────────
 *  fame-lavender 下 ReflectionManagerPanel 自定义按钮反差修复
 *
 *  问题：组件 scoped css 把 .method-btn / .header-action-btn / .add-field-btn 写成
 *  「半透明紫底 + 白字」(rgba(170,110,250,0.30) 衬 #fff)，本来是给星云紫深底主题设计的。
 *  fame-lavender 切到白色卡片底后，半透明紫直接糊在白底 → 浅紫；白字糊在浅紫
 *  → 对比度 ~1.5:1，"动作 / 方法" 区按钮文字几乎不可见（见会话 N+3 用户反馈截图）。
 *
 *  策略：与 fame-lavender 下 .el-button--primary 保持一致 ——
 *  实色 #7c3aed 紫底 + #ffffff 白字 + 紫色双层阴影，对比度 ~6.9:1（WCAG AA 通过）。
 *  「+ 添加字段」(.add-field-btn) 偏次要等级，改为白底紫描边紫字（与 default 按钮一致）。
 *
 *  特异性：:root[data-theme] .mg-content .x  = (0,3,0)，加 !important 足以压过 Vue
 *  scoped css 的 .x[data-v-xxx] = (0,2,0)。
 * ───────────────────────────────────────────────────────────────────────── */
:root[data-theme="fame-lavender"] .mg-content .method-btn,
:root[data-theme="fame-lavender"] .mg-content .header-action-btn {
  background: #7c3aed !important;
  border: 1px solid #7c3aed !important;
  color: #ffffff !important;
  font-weight: 600 !important;
  box-shadow:
    0 1px 2px rgba(45, 27, 105, 0.08),
    0 2px 6px rgba(124, 58, 237, 0.22) !important;
}
:root[data-theme="fame-lavender"] .mg-content .method-btn:hover:not(:disabled),
:root[data-theme="fame-lavender"] .mg-content .header-action-btn:hover {
  background: #6d28d9 !important;
  border-color: #6d28d9 !important;
  color: #ffffff !important;
  box-shadow:
    0 2px 6px rgba(45, 27, 105, 0.12),
    0 4px 14px rgba(124, 58, 237, 0.32) !important;
}
:root[data-theme="fame-lavender"] .mg-content .method-btn:active:not(:disabled) {
  background: #5b21b6 !important;
  border-color: #5b21b6 !important;
}
:root[data-theme="fame-lavender"] .mg-content .method-btn:disabled {
  background: #c4b5fd !important;
  border-color: #c4b5fd !important;
  color: #ffffff !important;
  box-shadow: none !important;
  opacity: 0.85 !important;
}
:root[data-theme="fame-lavender"] .mg-content .method-btn .method-btn-icon,
:root[data-theme="fame-lavender"] .mg-content .method-btn .method-btn-spin {
  color: rgba(255, 255, 255, 0.92) !important;
}
:root[data-theme="fame-lavender"] .mg-content .method-btn .method-btn-tag {
  background: rgba(255, 255, 255, 0.24) !important;
  color: #ffffff !important;
}

/* 「+ 添加字段」次级按钮：与 default 按钮同视觉等级（白底紫描边紫字），避免与 primary 等高。 */
:root[data-theme="fame-lavender"] .mg-content .add-field-btn {
  background: #ffffff !important;
  border: 1px dashed #a78bfa !important;
  color: #5b21b6 !important;
  font-weight: 500 !important;
}
:root[data-theme="fame-lavender"] .mg-content .add-field-btn:hover {
  background: #f5f3ff !important;
  border-color: #7c3aed !important;
  color: #5b21b6 !important;
}
