/* =====================================================================
 * DataMesh Design Tokens
 * ---------------------------------------------------------------------
 * 唯一真源：所有视图/组件只能 var() 引用本文件，禁止裸色值/裸间距。
 * 三态契约：Empty/Loading/Error 是数据组件的硬约束（零 mock 铁律）。
 * 占位注释 = 待医院 VI 落定的临时值，VI 到位后只改本文件即可全站换肤。
 * ===================================================================== */

:root {
  /* ---- 主色（待医院 VI 定 · 占位：院徽蓝系）------------------------ */
  /* TODO(VI): 医院视觉识别系统定稿后，把下面 3 个变量改成 VI 主色 */
  --brand: #1e5fa8;            /* 主色：链接/主按钮/激活态/品牌强调 */
  --brand-dark: #15467c;       /* 主色按下/悬浮深色 */
  --brand-light: #4f8fcf;      /* 主色 hover/浅描边 */
  --brand-soft: #e8f1fa;       /* 主色 8% 底（标签/选中行底色）*/
  --on-brand: #ffffff;         /* 主色底上的文字色 */

  /* ---- 语义色（含义固定，禁止混用）--------------------------------- */
  --success: #2f9e6e;          /* 达标/优于阈值/正向同比 */
  --success-soft: #e6f4ee;
  --warning: #d9842b;          /* 临界/部分数据/警示 */
  --warning-soft: #fbf0e0;
  --danger: #d24848;           /* 越界/错误态/负向同比 */
  --danger-soft: #fae6e6;
  --info: #4a7fb8;             /* 中性提示/数据来源标注 */
  --info-soft: #eaf1f8;

  /* ---- 中性色阶（背景/文字/边框/禁用）----------------------------- */
  --gray-50: #f7f9fc;
  --gray-100: #eef2f7;
  --gray-200: #e1e7ef;
  --gray-300: #cdd6e3;
  --gray-400: #a8b3c5;
  --gray-500: #7a8699;
  --gray-600: #5a6577;
  --gray-700: #3d4659;
  --gray-800: #232a39;
  --gray-900: #141826;

  /* 语义化别名（推荐用别名，改色阶只动一处）*/
  --bg-page: var(--gray-50);          /* 页面底 */
  --bg-surface: #ffffff;              /* 卡片/表格底 */
  --bg-muted: var(--gray-100);        /* 次级底/分区 */
  --text-strong: var(--gray-900);     /* 标题/主数值 */
  --text-base: var(--gray-700);       /* 正文 */
  --text-muted: var(--gray-500);      /* 辅助文字/标签 */
  --text-disabled: var(--gray-400);   /* 禁用 */
  --border: var(--gray-200);          /* 默认描边 */
  --border-strong: var(--gray-300);   /* hover/分隔 */

  /* ---- 间距（4 的倍数，禁止奇数值）--------------------------------- */
  --space-1: 4px;
  --space-2: 8px;
  --space-3: 12px;
  --space-4: 16px;
  --space-5: 20px;
  --space-6: 24px;
  --space-8: 32px;
  --space-10: 40px;
  --space-12: 48px;
  --space-16: 64px;

  /* ---- 圆角 -------------------------------------------------------- */
  --radius-sm: 4px;          /* 标签/小按钮 */
  --radius-md: 6px;          /* 按钮/输入框 */
  --radius-lg: 10px;         /* 卡片/弹窗 */
  --radius-pill: 999px;      /* 胶囊 */

  /* ---- 字号 -------------------------------------------------------- */
  --fs-xs: 12px;             /* 辅助/单位 */
  --fs-sm: 13px;             /* 表格/标签 */
  --fs-base: 14px;           /* 正文（医疗后台默认 14）*/
  --fs-lg: 16px;             /* 段落标题 */
  --fs-xl: 18px;             /* 卡片标题 */
  --fs-2xl: 22px;            /* 页面 H1 */
  --fs-num-sm: 18px;         /* KPI 次数值 */
  --fs-num-md: 28px;         /* KPI 主数值 */
  --fs-num-lg: 36px;         /* 看板大数 */

  /* ---- 行高 -------------------------------------------------------- */
  --lh-tight: 1.25;          /* 标题/数值 */
  --lh-normal: 1.5;          /* 正文 */
  --lh-loose: 1.75;          /* 长文本/帮助 */

  /* ---- 字族 -------------------------------------------------------- */
  --font-base: "PingFang SC", "Microsoft YaHei", "Hiragino Sans GB", "Source Han Sans CN", sans-serif;
  /* 医疗数字必须等宽对齐：KPI 值/表格数值/坐标轴标签全部走 var(--font-num) */
  --font-num: "SF Mono", "JetBrains Mono", "Roboto Mono", "Consolas", "PingFang SC", monospace;
  --font-feature-num: "tnum" 1;   /* tabular-nums，配合 font-variant-numeric */

  /* ---- 阴影（卡片/悬浮/弹窗）-------------------------------------- */
  --shadow-sm: 0 1px 2px rgba(20, 24, 38, 0.06);
  --shadow-md: 0 2px 8px rgba(20, 24, 38, 0.08);
  --shadow-lg: 0 8px 24px rgba(20, 24, 38, 0.12);
  --shadow-focus: 0 0 0 3px var(--brand-soft);   /* 键盘聚焦环 */

  /* ---- 动效 -------------------------------------------------------- */
  --dur-fast: 120ms;         /* hover/激活反馈 */
  --dur-normal: 200ms;       /* 弹层/抽屉 */
  --ease: cubic-bezier(0.4, 0, 0.2, 1);

  /* ---- z-index 层级（禁止散用 9999）------------------------------- */
  --z-base: 1;
  --z-sticky: 10;            /* 粘性表头/工具条 */
  --z-sidebar: 20;
  --z-header: 30;
  --z-dropdown: 40;
  --z-modal: 50;
  --z-toast: 60;

  /* ---- 布局尺寸 ---------------------------------------------------- */
  --header-h: 52px;
  --sidebar-w: 200px;
  --sidebar-w-collapsed: 56px;
  --content-max: 1440px;
  --kpi-grid-min: 180px;     /* KPI 卡片最小宽度 */

  /* ---- 图表色板（ECharts/Chart.js 统一引用）----------------------- */
  /* 8 色分类色板，色盲可读，禁止用鲜艳饱和原色 */
  --chart-c1: #1e5fa8;
  --chart-c2: #2f9e6e;
  --chart-c3: #d9842b;
  --chart-c4: #b25aa6;
  --chart-c5: #4a7fb8;
  --chart-c6: #c46b5e;
  --chart-c7: #5fa1a1;
  --chart-c8: #8a7cc0;
  --chart-axis: var(--gray-400);
  --chart-split: var(--gray-200);
  --chart-text: var(--text-muted);

  /* ---- 空值符号（统一留白，禁止写 "N/A" 或空白）------------------- */
  --empty-glyph: "—";
}

/* =====================================================================
 * 暗色模式（医疗夜班）
 * 仅覆盖色值 token；间距/圆角/字号沿用亮色集，避免重复定义。
 * ===================================================================== */
@media (prefers-color-scheme: dark) {
  :root {
    /* 主色保持不变（品牌色）*/
    --bg-page: #0f1420;
    --bg-surface: #1a2132;
    --bg-muted: #232c42;
    --text-strong: #eef2f8;
    --text-base: #c3cddb;
    --text-muted: #8a96aa;
    --text-disabled: #5a6577;
    --border: #2c3650;
    --border-strong: #3d4866;
    --brand-soft: #1d2d4a;

    --success-soft: #1d3a2c;
    --warning-soft: #3a2b16;
    --danger-soft: #3a1f1f;
    --info-soft: #1c2a3d;

    --shadow-sm: 0 1px 2px rgba(0, 0, 0, 0.3);
    --shadow-md: 0 2px 8px rgba(0, 0, 0, 0.4);
    --shadow-lg: 0 8px 24px rgba(0, 0, 0, 0.5);

    --chart-axis: #5a6577;
    --chart-split: #2c3650;
    --chart-text: #8a96aa;
  }
}

/* 强制等宽数字：所有 .num / 表格数值 / KPI 数值都必须挂这个类 */
.dm-num {
  font-family: var(--font-num);
  font-variant-numeric: tabular-nums;
  font-feature-settings: var(--font-feature-num);
}


/* =====================================================================
 * followup-v2: 手动主题切换（html[data-theme]）——与系统偏好同值，
 * settings/顶栏切换写 localStorage + data-theme，实现深浅真切换。
 * ===================================================================== */
html[data-theme="dark"] {
  --bg-page: #0f1420;
  --bg-surface: #1a2132;
  --bg-muted: #232c42;
  --text-strong: #eef2f8;
  --text-base: #c3cddb;
  --text-muted: #8a96aa;
  --text-disabled: #5a6577;
  --border: #2c3650;
  --border-strong: #3d4866;
  --brand-soft: #1d2d4a;
  --success-soft: #1d3a2c;
  --warning-soft: #3a2b16;
  --danger-soft: #3a1f1f;
  --info-soft: #1c2a3d;
  --shadow-sm: 0 1px 2px rgba(0, 0, 0, 0.3);
  --shadow-md: 0 2px 8px rgba(0, 0, 0, 0.4);
  --shadow-lg: 0 8px 24px rgba(0, 0, 0, 0.5);
  --chart-axis: #5a6577;
  --chart-split: #2c3650;
  --chart-text: #8a96aa;
}
html[data-theme="light"] { /* 显式浅色：覆盖系统偏好 */ }
