@import url("./design_tokens.css?v=202609071800"); /* 单一真源：design-tokens.json → design_tokens.css */
/* Inter 自托管：禁用公网字体 CDN，断网可读不破版。woff2 在 /fonts/（部署时落地）。 */
@font-face { font-family:'Inter'; font-style:normal; font-weight:400; font-display:swap; src:url('/fonts/Inter-latin-400-normal.woff2') format('woff2'); }
@font-face { font-family:'Inter'; font-style:normal; font-weight:500; font-display:swap; src:url('/fonts/Inter-latin-500-normal.woff2') format('woff2'); }
@font-face { font-family:'Inter'; font-style:normal; font-weight:600; font-display:swap; src:url('/fonts/Inter-latin-600-normal.woff2') format('woff2'); }
@font-face { font-family:'Inter'; font-style:normal; font-weight:700; font-display:swap; src:url('/fonts/Inter-latin-700-normal.woff2') format('woff2'); }
/* ============================================================
   大管家 · 品牌别名层（非色值真源）[第六条-1 统一真源]
   真源：design-tokens.json → design_tokens.css（本文件首行 @import 引入）
   本文件仅保留：json 未覆盖的历史别名 + iframe 独立页兜底色。禁止在此重复定义 json 已有变量。
   作用：消灭「多套红 / 多套取色」。所有页面（SPA 主框架 + iframe 内嵌独立页
   workbench/owner360/ai-* 和 billing-* 等）一律在 <head> 首位 <link> 本文件。
   品牌红权威值：var(--primary)（长住集团VI手册集团色，2026-09-01 老板截图确认）。

   设计要点：
   1) 红色令牌（--primary / --brand-red / --dg-brand / --ph-red / --brand-red-*）唯一真源在此。
   2) 兼容全部历史别名，老页面加一行 <link> 即可收敛，无需改内部 var() 名。
   3) 同时兜底中性/功能色（--ink/--muted/--line/--bg/--card/--green/--orange/--blue 等），
      让 iframe 页删掉内联 :root 后仍有完整变量、不断色。
   4) --accent 保留「香槟金 #BFA36F」语义（高端点缀），与 style.css 现行一致，
      避免金色点缀误变红造成视觉回归；品牌红一律用 --primary 系令牌。
   维护铁律：改品牌红只改这里，禁止在别处再写死品牌红硬编码（含老红值）/ --primary。
   ============================================================ */

:root{
  /* —— 字体令牌（v4 规范：数字 Inter 无衬线） —— */
  --font-zh:  "阿里巴巴普惠体", "Alibaba PuHuiTi", "PingFang SC", "Microsoft YaHei", "Noto Sans CJK SC", sans-serif;

  /* —— 品牌红主令牌（唯一真源） —— */
  --primary-rgb:    210, 9, 29; /* 品牌红 RGB 分量，供 rgba(var(--primary-rgb), .xx) 透明层统一引用 */

  /* —— 品牌红别名（兼容历史页面调用） —— */
  --brand-red:        #D2091D;
  --lonve-red:        #D2091D;   /* 规范 7.2 命名别名，等价 --primary / --brand-red */
  --brand-red-deep:   #B50715;
  --brand-red-soft:   #FDEBEC;
  --brand-red-light:  #FFF0F1;
  --brand-line:       #F5C7CA;
  --dg-brand:         #D2091D;
  --dg-brand-deep:    #B50715;
  --dg-brand-light:   #FFF0F1;
  --ph-red:           #D2091D;
  --ph-red-deep:      #B50715;
  --ph-red-soft:      #FFF0F1;

  /* —— 强调 / 渐变 / 光晕（品牌红） —— */
  --glow-primary:   0 6px 20px rgba(210,9,29,.28);

  /* —— 香槟金点缀（保持金，不并入红） —— */
  --brand-gold:     #BFA36F;

  /* —— 中性 / 功能色（iframe 页兜底） —— */
  --ink:     #1f2329;
  --muted:   #8a9099;
  --line:    #e5e6eb;
  --bg:      #f5f6f7;
  --card:    #ffffff;
  --green:   #00A870;  --green-soft:#E8F8EE;
  --orange:  #ED7B2F;  --orange-soft:#FFF7E6;
  --blue:    #1677FF;  --blue-soft:#E8F1FF;
  --primary-soft: #FDEBEC;
  --bad:     #D2091D;
}

/* ============================================================
   数字字体（v4 规范：Inter 无衬线 + 等宽对齐）
   覆盖 .kpi-card-value / .stat-num / .amount / .percent / 金额 / 百分比
   ============================================================ */
body {
  font-family: var(--font-zh);
  -webkit-font-smoothing: antialiased;
}
.kpi-card-value, .stat-num, .kpi-num, .amount, .percent, .value-num,
.stat-value, td.number, .dg-kpi-num,
[class*="num"], [class*="amount"], [class*="percent"] {
  font-family: var(--font-num) !important;
  font-variant-numeric: tabular-nums;
  letter-spacing: -0.3px;
}

/* ============================================================
   全局一致性强制层 (2026-09-02 大管家全检整改 · 第一刀)
   目的：灭「拼凑感」。把按钮圆角锁两档、搜索框锁 40px、弹窗类视觉对齐。
   策略：!important 覆盖历史散值；不重建 bundle、不改并发文件，可逆可回退。
   作用域：全站（SPA 主框架 + iframe 内嵌页，因 brand.css 在 head 首位）。
   回退方式：删除本块即可恢复历史样式。
   ============================================================ */

/* —— 按钮圆角：只两档（6px 实心 / 999px 胶囊） —— */
.dgj-radius,
button,
.btn,
input[type=button],
.el-button,
.ant-btn,
[role=button],
a.btn,
.op-link,
div.btn,
.dgj-btn {
  border-radius: 6px !important;
}
/* 胶囊型（明确标注 capsule / round 的）保留 999px */
.dgj-capsule,
.btn-capsule,
[class*=capsule],
button.capsule,
.el-button.is-round,
.ant-btn-round {
  border-radius: 999px !important;
}

/* —— 搜索框：高度统一 40px、圆角 6px、盒模型一致 —— */
input[type=text],
input[type=search],
input:not([type]),
.search-input,
.el-input__inner,
.ant-input {
  height: 40px !important;
  min-height: 40px !important;
  border-radius: 6px !important;
  box-sizing: border-box !important;
}

/* —— 弹窗类视觉对齐：.modal/.modal-box/.wb-drawer/.modal-mask 统一观感 —— */
.modal,
.modal-box,
.modal-mask,
.wb-drawer,
.drawer,
[class*=modal],
[class*=drawer] {
  border-radius: 8px !important;
}
.modal-box,
.modal,
.wb-drawer,
.drawer {
  box-shadow: 0 8px 32px rgba(0,0,0,.16) !important;
  border: 1px solid var(--line) !important;
}


/* ============================================================
   全局一致性强制层 (2026-09-02 大管家全检整改 · 第三刀)
   目的：把对话框骨架、卡片/面板、表格、区块标题、主按钮底色、焦点描边
         全部收口到统一规范，进一步灭「拼凑感」。
   策略：沿用第一刀——!important 压历史散值；不重建 bundle、不改并发文件，
         可逆可回退（删除本块即恢复）。
   ============================================================ */

/* —— 对话框完整骨架：遮罩 / 容器 / 头 / 体 / 脚 一致 —— */
[class*=modal-mask],
[class*=modal-backdrop],
.mask,
[class*=overlay] {
  background: rgba(0,0,0,.45) !important;
}
.modal,
.modal-box {
  background: #fff !important;
  padding: 0 !important;
  overflow: hidden !important;
}
/* 抽屉/侧栏组件保留自身内边距与滚动，不被弹窗骨架误伤 */
.wb-drawer,
.drawer {
  background: #fff !important;
}
.modal .modal-header,
.modal-box .modal-header,
.wb-drawer .drawer-header,
[class*=dialog-header],
[class*=modal-header] {
  padding: 16px 20px !important;
  border-bottom: 1px solid var(--line) !important;
  font-size: 16px !important;
  font-weight: 600 !important;
  color: var(--text) !important;
}
.modal .modal-body,
.modal-box .modal-body,
.wb-drawer .drawer-body,
[class*=dialog-body],
[class*=modal-body] {
  padding: 20px !important;
}
.modal .modal-footer,
.modal-box .modal-footer,
.wb-drawer .drawer-footer,
[class*=dialog-footer],
[class*=modal-footer] {
  padding: 12px 20px !important;
  border-top: 1px solid var(--line) !important;
  text-align: right !important;
}

/* —— 卡片 / 面板内边距与外形一致 —— */
.card,
.panel,
.dgj-card,
[class*=card],
[class*=panel] {
  padding: 16px !important;
  border-radius: 8px !important;
  background: #fff !important;
  border: 1px solid var(--line) !important;
}

/* —— 表格单元格内边距一致 —— */
table td,
table th,
.el-table td,
.el-table th,
.ant-table td,
.ant-table th {
  padding: 10px 12px !important;
}

/* —— 区块标题一致 —— */
.section-title,
.panel-title,
.block-title,
.dgj-title,
[class*=title-bar] {
  font-size: 16px !important;
  font-weight: 600 !important;
  color: var(--text) !important;
  margin: 0 0 12px !important;
}

/* —— 主按钮底色锁品牌红（灭散红/旧红） —— */
.btn-primary,
button.primary,
.el-button--primary,
.ant-btn-primary,
[class*=btn-primary] {
  background-color: var(--primary) !important;
  border-color: var(--primary) !important;
  color: #fff !important;
}

/* —— 统一焦点描边（可访问性） —— */
button:focus-visible,
a:focus-visible,
input:focus-visible,
select:focus-visible,
textarea:focus-visible,
[tabindex]:focus-visible {
  outline: 2px solid var(--primary) !important;
  outline-offset: 2px !important;
}
