/* ============================================================
   方案 A「工程蓝图 / BLUEPRINT」主题皮肤
   施工管理系统 · 整体换肤层

   概念：把整个系统当成一张正在绘制的施工图。
   蓝图晒图纸底 + 坐标网格 + 图框四角括号 + 等宽数据读数，
   强调色取工地安全橙。

   引入位置：main.css 与 design-polish.css 之后（最后加载，优先级最高）
   设计令牌统一由 :root 提供，业务代码零改动。
   ============================================================ */

/* ---------- 1. 设计令牌 ---------- */
:root{
  color-scheme: dark;

  /* ---------- 字号刻度（新增）----------
     目标：正文/表格/表单基线从 12-13px 提到 13-14px，降低长时间看数据的疲劳。
     标签、徽章、分页等小字不动，避免撑破紧凑控件。
     全部在下方「字号落地」小节用选择器接管，main.css 业务代码零改动。 */
  --bp-fs-xs:11px;      /* 徽章/角标/极次要说明 - 保持 */
  --bp-fs-sm:12.5px;    /* 表格正文、表单输入、次要标签 */
  --bp-fs-md:13.5px;    /* 正文基准、菜单项 */
  --bp-fs-lg:15px;      /* 卡片标题 */
  --bp-fs-xl:18px;      /* 页面主标题 */
  --bp-line-h:1.55;     /* 行高配套放大，避免字变大后行距拥挤 */

  /* 蓝图底色（60%） */
  --bp-bg:#07141f;
  --bp-bg-alt:#0a1927;
  --bp-surface:#0b1e30;
  --bp-surface-2:#0e2438;
  --bp-raised:#122b42;

  /* 图纸白线（30%） */
  --bp-line:rgba(120,200,255,.16);
  --bp-line-strong:rgba(120,200,255,.34);
  --bp-line-soft:rgba(120,200,255,.08);

  /* 文字 */
  --bp-text:#dcecf9;
  --bp-text-sub:#8fb0c8;
  --bp-text-muted:#61809a;

  /* 强调（10%）工地安全橙 */
  --bp-accent:#ff8a3d;
  --bp-accent-hi:#ffa96b;
  --bp-accent-dim:rgba(255,138,61,.13);
  --bp-cyan:#58c6ff;

  /* 状态色 */
  --bp-ok:#4ade80;
  --bp-warn:#ffd166;
  --bp-bad:#ff6b6b;
  --bp-info:#58c6ff;

  /* ---------- 圆角刻度（收敛为 3 档）----------
     原先 2/3/4/6/8/10/12/16/20 共 9 种混用，视觉节奏不统一。
     现按语义收敛：控件 4px / 容器 8px / 大块 12px。 */
  --bp-r:4px;         /* 控件：按钮、输入框、标签、菜单项 */
  --bp-r-lg:8px;      /* 容器：卡片、弹窗、下拉、登录框 */
  --bp-r-xl:12px;     /* 大块：KPI 卡、统计卡 */
  --bp-r-pill:999px;  /* 胶囊：头像、状态圆点 */
  --bp-ease:cubic-bezier(.16,1,.3,1);
  --bp-dur:180ms;
  --bp-shadow-1:0 2px 8px rgba(0,0,0,.28);
  --bp-shadow-2:0 8px 26px rgba(0,0,0,.38);

  --bp-mono:'JetBrains Mono','Cascadia Mono',Consolas,'Courier New',monospace;
  --bp-disp:'Chakra Petch','Noto Sans SC','PingFang SC','Microsoft YaHei',sans-serif;
  --bp-sans:'Noto Sans SC','PingFang SC','Microsoft YaHei','Hiragino Sans GB',sans-serif;

  /* 覆盖系统既有变量：所有引用这些变量的组件自动换肤 */
  --c-bg:var(--bp-bg);
  --c-card:var(--bp-surface);
  --c-border:var(--bp-line);
  --c-border-strong:var(--bp-line-strong);
  --c-sidebar:rgba(9,26,41,.92);
  --c-sidebar-hover:rgba(88,198,255,.07);
  --c-header:rgba(7,20,31,.94);
  --c-text:var(--bp-text);
  --c-text-sub:var(--bp-text-sub);
  --c-text-muted:var(--bp-text-muted);
  --c-primary:var(--bp-cyan);
  --c-primary-soft:rgba(88,198,255,.1);
  --c-normal:var(--bp-ok);
  --c-warn:var(--bp-warn);
  --c-danger:var(--bp-bad);
  --shadow-sm:var(--bp-shadow-1);
  --shadow-md:var(--bp-shadow-1);
  --shadow-lg:var(--bp-shadow-2);
  --ease-out:var(--bp-ease);
  --dur-fast:160ms;
  --dur-base:var(--bp-dur);
}

/* ---------- 2. 蓝图氛围层（坐标网格 + 月晕，固定不随滚动） ---------- */
/* 安全要点：装饰层用 z-index:-1 沉到所有内容之下（而非 0）。
   z-index:0 时，position:fixed 的伪元素绘制在普通流内容之后，
   会被动地盖在页面上层——虽然加了 pointer-events:none，
   但个别浏览器/合成层模式下仍可能干扰事件命中，故用 -1 彻底规避。 */
body{background:var(--bp-bg) !important;position:relative;}
body::before{
  content:"";position:fixed;inset:0;pointer-events:none;z-index:-1;
  background:
    repeating-linear-gradient(0deg,rgba(88,198,255,.055) 0 1px,transparent 1px 48px),
    repeating-linear-gradient(90deg,rgba(88,198,255,.055) 0 1px,transparent 1px 48px),
    repeating-linear-gradient(0deg,rgba(88,198,255,.022) 0 1px,transparent 1px 12px),
    repeating-linear-gradient(90deg,rgba(88,198,255,.022) 0 1px,transparent 1px 12px),
    radial-gradient(70rem 44rem at 88% -8%,rgba(88,198,255,.09),transparent 60%),
    radial-gradient(50rem 40rem at -6% 108%,rgba(255,138,61,.055),transparent 55%);
}
/* 细颗粒（宣纸/晒图质感） */
body::after{
  content:"";position:fixed;inset:0;pointer-events:none;z-index:-1;opacity:.035;
  background-image:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg'%3E%3Cfilter id='n'%3E%3CfeTurbulence type='fractalNoise' baseFrequency='.85'/%3E%3C/filter%3E%3Crect width='100%25' height='100%25' filter='url(%23n)'/%3E%3C/svg%3E");
}
/* ⚠️ 注意：严禁在此处对 .modal-mask / .login-mask / .toast 等浮层设置 position！
   它们在 main.css 中是 position:fixed 全屏遮罩（modal-mask/login-mask z-index 999/9999）。
   旧版主题曾写 .topbar,.main,.modal-mask,...{position:relative;z-index:2} 一刀切，
   把 fixed 浮层压成文档流块，导致：登录页穿帮露出主界面、所有弹窗在页面底部渲染
   （表现为"所有按钮点击没反应"）。装饰层已用 z-index:-1 下沉，无需任何抬层规则。 */

/* 字体：正文用干净无衬线，数据用等宽 */
body{
  font-family:var(--bp-sans) !important;
  letter-spacing:.01em;
  font-feature-settings:"tnum" 1;
  -webkit-font-smoothing:antialiased;
}

/* ---------- 3. 顶部导航：图纸标题栏 ---------- */
.topbar{
  background:var(--c-header) !important;
  background-image:none !important;
  border-bottom:1px solid var(--bp-line-strong) !important;
  box-shadow:none !important;
  backdrop-filter:blur(8px);
}
.topbar-title{
  font-family:var(--bp-disp) !important;
  font-weight:700 !important;
  font-size:17px !important;
  letter-spacing:.1em !important;
  color:var(--bp-text) !important;
}
.topbar-project{
  color:var(--bp-text-sub) !important;
  border-left:1px solid var(--bp-line-strong) !important;
  font-size:12.5px !important;
}
.topbar-date{
  font-family:var(--bp-mono) !important;
  font-size:11.5px !important;
  letter-spacing:.08em;
  color:var(--bp-cyan) !important;
}
.topbar-info-tag{
  background:rgba(88,198,255,.06) !important;
  border:1px solid var(--bp-line) !important;
  border-radius:var(--bp-r) !important;
  color:var(--bp-text) !important;
}
.topbar-info-tag:hover{background:rgba(88,198,255,.12) !important;border-color:var(--bp-line-strong) !important;}
.topbar-info-tag .tag-label{color:var(--bp-text-muted) !important;}
.topbar-info-tag.editing{background:var(--bp-accent-dim) !important;border-color:rgba(255,138,61,.45) !important;}

/* 顶部右侧用户区 */
.top-user .user-role{
  background:var(--bp-accent-dim) !important;
  color:var(--bp-accent-hi) !important;
  border-radius:var(--bp-r) !important;
  font-family:var(--bp-mono) !important;
  font-size:11px !important;
  letter-spacing:.1em;
}
.top-user .user-name{color:var(--bp-text) !important;}
.logout-btn{
  border-radius:var(--bp-r) !important;
  background:transparent !important;
  border:1px solid var(--bp-line-strong) !important;
  color:var(--bp-cyan) !important;
  font-family:var(--bp-sans);
  font-size:12px !important;
  transition:all var(--bp-dur) var(--bp-ease);
}
.logout-btn:hover{background:rgba(88,198,255,.12) !important;border-color:var(--bp-cyan) !important;}

/* ---------- 4. 侧边栏：图纸目录 ---------- */
.sidebar{
  background:var(--c-sidebar) !important;
  border-right:1px solid var(--bp-line-strong) !important;
  backdrop-filter:blur(8px);
}
.sidebar::before{
  /* 2026-10-13 用户需求：签名栏 = 版本号 + @三鸣。
     版本号由 core.js 的 SYSTEM_VERSION 写入 CSS 变量 --bp-sign（单一来源，升级只改一处）；
     变量还没写入时（首屏极短暂）用兜底值。 */
  content:var(--bp-sign, "v3.50.0 @三鸣");
  display:block;padding:14px 16px 10px;
  font-family:var(--bp-mono);font-size:9.5px;letter-spacing:.22em;
  color:var(--bp-text-muted);white-space:nowrap;overflow:hidden;
  border-bottom:1px dashed var(--bp-line-strong);
  margin-bottom:8px;
}
.menu-item,.menu-group-title{
  color:var(--bp-text-sub) !important;
  border-radius:var(--bp-r) !important;
  margin:1px 8px !important;
  padding:9px 12px !important;
  border-left:none !important;
  font-size:13px !important;
  letter-spacing:.04em;
  transition:background var(--bp-dur) var(--bp-ease),color var(--bp-dur) var(--bp-ease),border-color var(--bp-dur) var(--bp-ease) !important;
  position:relative;
}
.menu-item:hover,.menu-group-title:hover{
  background:rgba(88,198,255,.07) !important;
  color:var(--bp-text) !important;
}
.menu-item.active{
  background:linear-gradient(90deg,var(--bp-accent-dim),transparent 82%) !important;
  color:var(--bp-accent) !important;
  font-weight:500 !important;
  box-shadow:inset 3px 0 0 var(--bp-accent) !important;
}
.menu-icon{color:var(--bp-cyan);opacity:.85;}
.menu-item.active .menu-icon{color:var(--bp-accent);opacity:1;}
.menu-sub{background:transparent !important;}
.menu-sub .menu-item{padding-left:28px !important;}
.menu-sub-title{color:var(--bp-text-muted) !important;border-radius:var(--bp-r) !important;}
.menu-sub-title:hover{background:rgba(88,198,255,.06) !important;color:var(--bp-text-sub) !important;}
.menu-sub-title.expanded{color:var(--bp-text) !important;}
.menu-badge{
  background:var(--bp-accent) !important;
  color:#0a1622 !important;
  border-radius:2px !important;
  font-family:var(--bp-mono) !important;
  font-size:10px !important;
  font-weight:700 !important;
  padding:1px 6px !important;
}

/* ---------- 5. 卡片：测量图框（四角括号是记忆点） ---------- */
.card{
  position:relative;
  background:linear-gradient(168deg,var(--bp-surface),rgba(14,36,56,.72)) !important;
  border:1px solid var(--bp-line) !important;
  border-radius:var(--bp-r) !important;
  box-shadow:none !important;
  margin-bottom:16px;
  transition:border-color var(--bp-dur) var(--bp-ease),box-shadow var(--bp-dur) var(--bp-ease);
}
.card:hover{border-color:var(--bp-line-strong) !important;}
.card-header{
  border-bottom:1px dashed var(--bp-line-strong) !important;
  padding:12px 18px !important;
}
.card-title{
  font-family:var(--bp-disp) !important;
  color:var(--bp-text) !important;
  font-weight:600 !important;
  font-size:14.5px !important;
  letter-spacing:.1em;
}
.card-title::before{
  content:"";display:inline-block;width:8px;height:8px;
  background:var(--bp-accent);margin-right:10px;vertical-align:middle;
  transform:translateY(-1px);
}
.card-body{padding:16px 18px !important;}

/* 统计卡（KPI）：图框角标 + 等宽读数 */
.stat-card{
  border-radius:var(--bp-r) !important;
  background:linear-gradient(165deg,var(--bp-surface),rgba(14,36,56,.55)) !important;
  border:1px solid var(--bp-line) !important;
  box-shadow:none !important;
  transition:border-color var(--bp-dur) var(--bp-ease),transform var(--bp-dur) var(--bp-ease) !important;
}
/* 用四角括号替换左侧色条 */
.stat-card::before{
  content:"";position:absolute;left:0;top:0;bottom:auto;width:9px;height:9px;
  background:transparent;border:1.5px solid var(--bp-cyan);border-right:none;border-bottom:none;opacity:.75;
}
.stat-card::after{
  content:"";position:absolute;right:0;bottom:0;width:9px;height:9px;
  border:1.5px solid var(--bp-cyan);border-left:none;border-top:none;opacity:.75;
}
.stat-card.normal::before,.stat-card.normal::after{border-color:var(--bp-ok);}
.stat-card.warn::before,.stat-card.warn::after{border-color:var(--bp-warn);}
.stat-card.danger::before,.stat-card.danger::after{border-color:var(--bp-bad);}
.stat-card:hover{
  transform:translateY(-2px) !important;
  border-color:var(--bp-line-strong) !important;
  box-shadow:0 8px 22px rgba(0,0,0,.3) !important;
}
.stat-num{
  font-family:var(--bp-mono) !important;
  font-variant-numeric:tabular-nums;
  color:var(--bp-text) !important;
  font-weight:800 !important;
  font-size:27px !important;
  letter-spacing:-.01em;
}
.stat-card.normal .stat-num{color:var(--bp-ok) !important;}
.stat-card.warn .stat-num{color:var(--bp-warn) !important;}
.stat-card.danger .stat-num{color:var(--bp-bad) !important;}
.stat-label{color:var(--bp-text-sub) !important;letter-spacing:.12em !important;}

/* 图标版统计卡 */
.stat-card-icon{
  border-radius:var(--bp-r) !important;
  background:linear-gradient(165deg,var(--bp-surface),rgba(14,36,56,.55)) !important;
  border:1px solid var(--bp-line) !important;
  box-shadow:none !important;
}
.stat-card-icon::before,.stat-card-icon::after{display:none;}
.stat-card-icon .stat-icon-wrap{
  border-radius:var(--bp-r) !important;
  background:rgba(88,198,255,.09) !important;
  border:1px solid var(--bp-line);
}
.stat-card-icon.normal .stat-icon-wrap{background:rgba(74,222,128,.09) !important;}
.stat-card-icon.warn .stat-icon-wrap{background:rgba(255,209,102,.09) !important;}
.stat-card-icon.danger .stat-icon-wrap{background:rgba(255,107,107,.09) !important;}
.stat-card-icon .stat-icon{color:var(--bp-cyan);}

/* 生产经营班组产值卡 */
.prod-card{
  background:linear-gradient(162deg,var(--bp-surface-2),var(--bp-surface)) !important;
  border:1px solid var(--bp-line) !important;
  border-radius:var(--bp-r) !important;
  transition:all var(--bp-dur) var(--bp-ease) !important;
}
.prod-card:hover{
  border-color:var(--bp-accent) !important;
  box-shadow:0 8px 22px rgba(255,138,61,.14) !important;
  transform:translateY(-2px);
}

/* ---------- 6. 按钮：安全橙主按钮 + 图纸线幽灵按钮 ---------- */
.btn{
  border-radius:var(--bp-r) !important;
  font-weight:600 !important;
  font-size:13px;
  letter-spacing:.06em;
  padding:8px 18px !important;
  box-shadow:none !important;
  transition:background var(--bp-dur) var(--bp-ease),border-color var(--bp-dur) var(--bp-ease),
             box-shadow var(--bp-dur) var(--bp-ease),transform var(--bp-dur) var(--bp-ease) !important;
}
.btn:hover{opacity:1 !important;transform:translateY(-1px);}
.btn:active{transform:translateY(0);}
.btn-primary{
  background:var(--bp-accent) !important;
  color:#0a1622 !important;
  border:1px solid var(--bp-accent) !important;
}
.btn-primary:hover{
  background:var(--bp-accent-hi) !important;
  box-shadow:0 6px 20px rgba(255,138,61,.28) !important;
}
.btn-success{background:rgba(74,222,128,.16) !important;color:var(--bp-ok) !important;border:1px solid rgba(74,222,128,.45) !important;}
.btn-success:hover{background:rgba(74,222,128,.24) !important;}
.btn-warn{background:rgba(255,209,102,.14) !important;color:var(--bp-warn) !important;border:1px solid rgba(255,209,102,.45) !important;}
.btn-warn:hover{background:rgba(255,209,102,.22) !important;}
.btn-danger{background:rgba(255,107,107,.14) !important;color:var(--bp-bad) !important;border:1px solid rgba(255,107,107,.45) !important;}
.btn-danger:hover{background:rgba(255,107,107,.22) !important;}
.btn-default{
  background:transparent !important;
  color:var(--bp-cyan) !important;
  border:1px solid var(--bp-line-strong) !important;
}
.btn-default:hover{background:rgba(88,198,255,.1) !important;border-color:var(--bp-cyan) !important;}
.btn-sm{padding:5px 11px !important;font-size:12px !important;border-radius:var(--bp-r) !important;}
.btn-link{color:var(--bp-cyan) !important;font-family:var(--bp-sans);}
.btn-link:hover{color:#8fdcff !important;}
.btn-link.danger{color:var(--bp-bad) !important;}

/* ---------- 7. 表格：蓝图数据表 ---------- */
.content{padding:20px !important;position:relative;z-index:2;}
.table-wrap{scrollbar-color:rgba(120,200,255,.3) transparent;}
table{color:var(--bp-text) !important;font-size:13px;}
th,td{
  border:1px solid var(--bp-line-soft) !important;
  padding:10px 14px !important;
}
/* 表头必须用不透明背景：表头是 sticky 吸顶元素，半透明背景会让
   滚动中的表体内容透出来，视觉上"内容与表头重叠"（2026-10-02 修复） */
th{
  background:#0f2136 !important;
  background-image:none !important;
  color:var(--bp-cyan) !important;
  font-family:var(--bp-mono) !important;
  font-size:11px !important;
  font-weight:600 !important;
  letter-spacing:.14em;
  border-bottom:1px solid var(--bp-line-strong) !important;
  box-shadow:none !important;
  text-transform:none;
}
td{font-variant-numeric:tabular-nums;}
tbody tr:nth-child(odd){background:rgba(11,30,48,.42) !important;}
tbody tr:nth-child(even){background:rgba(9,25,40,.3) !important;}
tbody tr{transition:background var(--bp-dur) var(--bp-ease);}
tbody tr:hover{background:rgba(88,198,255,.075) !important;}
/* 金额/数字列用等宽，避免对不齐 */
table td.num,table td.dg-num,table td.dg-amt,.info-val{
  font-family:var(--bp-mono);
  font-variant-numeric:tabular-nums;
}

/* 工程量宽表 */
#drawingGrid th,#drawingGrid td{border-color:var(--bp-line-soft) !important;}
#drawingGrid thead th{
  background:linear-gradient(180deg,#122c44,#0c2033) !important;
  background-image:linear-gradient(180deg,#122c44,#0c2033) !important;
  color:var(--bp-cyan) !important;
  border-bottom-color:var(--bp-line-strong) !important;
  box-shadow:none !important;
  font-family:var(--bp-mono) !important;
  letter-spacing:.12em;
}
#drawingGrid th.dg-unlocked{background:linear-gradient(180deg,#5c2410,#3f1a0b) !important;color:var(--bp-accent) !important;}
#drawingGrid input.dg-cell{
  background:rgba(7,20,31,.85) !important;
  border:1px solid rgba(255,138,61,.5) !important;
  border-radius:var(--bp-r) !important;
  color:var(--bp-accent) !important;
  font-family:var(--bp-mono);
}
#drawingGridBody tr.dg-freeze{background:var(--bp-raised) !important;box-shadow:0 1px 3px rgba(0,0,0,.45) !important;}
.dg-page{
  border:1px solid var(--bp-line-strong) !important;
  background:rgba(11,30,48,.7) !important;
  color:var(--bp-cyan) !important;
  border-radius:var(--bp-r) !important;
  font-family:var(--bp-mono);
}
.dg-page:hover{background:rgba(88,198,255,.14) !important;}
.dg-page-on{background:var(--bp-accent) !important;border-color:var(--bp-accent) !important;color:#0a1622 !important;font-weight:700 !important;}
.dg-page-lbl,.dg-page-sep{color:var(--bp-text-muted) !important;font-family:var(--bp-mono);}

/* 映射面板 */
.dg-map-col{
  border:1px solid var(--bp-line) !important;
  background:rgba(11,30,48,.7) !important;
  border-radius:var(--bp-r) !important;
}
.dg-map-head{color:var(--bp-cyan) !important;font-family:var(--bp-mono);font-size:11px;}
.dg-map-col select,.dg-map-col input[data-mmonth]{
  background:rgba(7,20,31,.8) !important;
  border:1px solid var(--bp-line) !important;
  color:var(--bp-text) !important;
  border-radius:var(--bp-r) !important;
}
.dg-map-col input[data-mmonth]{color:var(--bp-accent) !important;font-family:var(--bp-mono);}

/* ---------- 8. 表单控件 ---------- */
.form-group label{color:var(--bp-text-sub) !important;font-weight:500 !important;font-size:12.5px;letter-spacing:.06em;}
.form-group input,.form-group select,.form-group textarea,
input:not([type=checkbox]):not([type=radio]):not([type=file]):not([type=color]),select,textarea{
  background:rgba(7,20,31,.72) !important;
  border:1px solid var(--bp-line) !important;
  border-radius:var(--bp-r) !important;
  color:var(--bp-text) !important;
  font-family:var(--bp-sans);
  font-size:13px;
  transition:border-color var(--bp-dur) var(--bp-ease),box-shadow var(--bp-dur) var(--bp-ease);
}
.form-group input:focus,.form-group select:focus,.form-group textarea:focus,
input:not([type=checkbox]):not([type=radio]):not([type=file]):not([type=color]):focus,select:focus,textarea:focus{
  border-color:var(--bp-cyan) !important;
  box-shadow:0 0 0 2px rgba(88,198,255,.18) !important;
  outline:none;
}
.form-group input::placeholder,.form-group textarea::placeholder{color:var(--bp-text-muted) !important;}
input[type=date],input[type=time],input[type=datetime-local]{color-scheme:dark;}
.date-tool{
  background:rgba(7,20,31,.72) !important;
  border:1px solid var(--bp-line) !important;
  color:var(--bp-text) !important;
  border-radius:var(--bp-r) !important;
}
/* 下拉选项 */
select option,select optgroup{background:#0a1927 !important;color:var(--bp-text) !important;}

/* ---------- 9. 模态框：图纸附页 ---------- */
.modal-mask{background:rgba(4,12,20,.72) !important;backdrop-filter:none !important;}
.modal{
  background:linear-gradient(170deg,var(--bp-surface-2),var(--bp-surface)) !important;
  border:1px solid var(--bp-line-strong) !important;
  border-radius:var(--bp-r) !important;
  box-shadow:var(--bp-shadow-2) !important;
  padding:24px !important;
}
.modal-header{border-bottom:1px dashed var(--bp-line-strong) !important;}
.modal-title{
  font-family:var(--bp-disp) !important;
  font-weight:600;letter-spacing:.1em;
}
.modal-close{color:var(--bp-text-sub) !important;}
.modal-close:hover{color:var(--bp-accent) !important;}

/* 下拉菜单 */
.menu-dropdown .dropdown-menu{
  background:var(--bp-surface-2) !important;
  border:1px solid var(--bp-line-strong) !important;
  box-shadow:var(--bp-shadow-2) !important;
  border-radius:var(--bp-r) !important;
  padding:6px !important;
}
.menu-dropdown .dropdown-menu button{
  color:var(--bp-text-sub) !important;
  border-radius:var(--bp-r) !important;
  transition:background var(--bp-dur) var(--bp-ease);
}
.menu-dropdown .dropdown-menu button:hover{background:rgba(88,198,255,.12) !important;color:var(--bp-text) !important;}

/* ---------- 10. 标签 / 状态 ---------- */
.tag{
  border-radius:var(--bp-r) !important;
  font-family:var(--bp-mono);
  font-size:11px !important;
  letter-spacing:.1em;
  padding:3px 9px !important;
}
.tag-gray{background:rgba(120,200,255,.1) !important;color:var(--bp-text-sub) !important;}
.tag-dark{background:rgba(7,20,31,.7) !important;border:1px solid var(--bp-line) !important;color:var(--bp-text-sub) !important;}

/* 进度条 */
.progress{background:rgba(120,200,255,.1) !important;border-radius:2px !important;}
.progress-text{color:var(--bp-text) !important;font-family:var(--bp-mono);}

/* Toast */
.toast{
  background:var(--bp-surface-2) !important;
  border:1px solid var(--bp-line-strong) !important;
  border-left:3px solid var(--bp-accent) !important;
  border-radius:var(--bp-r) !important;
  color:var(--bp-text) !important;
  box-shadow:var(--bp-shadow-2) !important;
}

/* 预警项 */
.alert-item{border-radius:var(--bp-r) !important;border-left-width:3px !important;}
.alert-info p{color:var(--bp-text-sub) !important;}

/* 机械 Tabs */
.machine-tab{
  background:rgba(7,20,31,.6) !important;
  border:1px solid var(--bp-line) !important;
  border-radius:var(--bp-r) !important;
  color:var(--bp-text-sub) !important;
  font-family:var(--bp-sans);
}
.machine-tab:hover{border-color:var(--bp-cyan) !important;color:var(--bp-cyan) !important;background:transparent !important;}
.machine-tab.active{
  background:var(--bp-accent) !important;
  color:#0a1622 !important;
  border-color:var(--bp-accent) !important;
  font-weight:600;
}

/* ---------- 11. 登录页 ---------- */
.login-mask{
  background:
    repeating-linear-gradient(0deg,rgba(88,198,255,.05) 0 1px,transparent 1px 48px),
    repeating-linear-gradient(90deg,rgba(88,198,255,.05) 0 1px,transparent 1px 48px),
    radial-gradient(60rem 40rem at 70% 0%,rgba(88,198,255,.12),transparent 60%),
    var(--bp-bg) !important;
}
.login-box{
  background:linear-gradient(170deg,rgba(14,36,56,.94),rgba(11,30,48,.96)) !important;
  border:1px solid var(--bp-line-strong) !important;
  border-radius:var(--bp-r) !important;
  box-shadow:var(--bp-shadow-2) !important;
}
.login-title{
  font-family:var(--bp-disp) !important;
  color:var(--bp-text) !important;
  letter-spacing:.14em;
}
.login-subtitle{color:var(--bp-cyan) !important;font-family:var(--bp-mono);font-size:11px !important;letter-spacing:.2em;}
.login-form label{color:var(--bp-text-sub) !important;}
.login-form input{
  background:rgba(7,20,31,.75) !important;
  border:1px solid var(--bp-line) !important;
  border-radius:var(--bp-r) !important;
  color:var(--bp-text) !important;
}
.login-form input:focus{border-color:var(--bp-cyan) !important;box-shadow:0 0 0 2px rgba(88,198,255,.18) !important;}
.login-btn{
  background:var(--bp-accent) !important;
  background-image:none !important;
  color:#0a1622 !important;
  border-radius:var(--bp-r) !important;
  font-weight:700 !important;
  letter-spacing:.14em;
}
.login-btn:hover{background:var(--bp-accent-hi) !important;}
.login-tip{color:var(--bp-text-muted) !important;}
.login-error{
  background:rgba(255,107,107,.1) !important;
  border:1px solid rgba(255,107,107,.35) !important;
  color:var(--bp-bad) !important;
  border-radius:var(--bp-r) !important;
}

/* ---------- 12. 步骤条 / 其他 ---------- */
.steps::before{background:var(--bp-line) !important;}
.step-circle{background:var(--bp-surface-2) !important;color:var(--bp-text-sub) !important;font-family:var(--bp-mono);}
.step.done .step-circle{background:var(--bp-ok) !important;color:#07141f !important;}
.step.active .step-circle{background:var(--bp-accent) !important;color:#07141f !important;}

.deploy-guide{background:var(--bp-surface) !important;border-color:var(--bp-line) !important;border-radius:var(--bp-r) !important;}
.deploy-guide code{background:rgba(7,20,31,.8) !important;color:var(--bp-cyan) !important;font-family:var(--bp-mono);}
.deploy-guide .note{background:rgba(255,209,102,.08) !important;border-color:rgba(255,209,102,.28) !important;color:var(--bp-warn) !important;}

.empty{color:var(--bp-text-muted) !important;}
.table-actions .btn-link{color:var(--bp-cyan) !important;}

/* 全局进度条 */
#globalProgressBar{top:56px !important;background:rgba(255,255,255,.05) !important;}
#globalProgressFill{background:linear-gradient(90deg,var(--bp-cyan),var(--bp-accent)) !important;}

/* ---------- 13. 滚动条 ---------- */
::-webkit-scrollbar{width:8px;height:8px;}
::-webkit-scrollbar-track{background:transparent;}
::-webkit-scrollbar-thumb{background:rgba(120,200,255,.22);border-radius:2px;}
::-webkit-scrollbar-thumb:hover{background:rgba(120,200,255,.36);}
.sidebar::-webkit-scrollbar-thumb{background:rgba(120,200,255,.18) !important;}
.content::-webkit-scrollbar-thumb{background:rgba(120,200,255,.22) !important;}

/* ---------- 14. 无障碍：焦点圈 / 选中 / 降级动效 ---------- */
:focus-visible{
  outline:2px solid var(--bp-cyan) !important;
  outline-offset:2px;
  border-radius:2px;
}
::selection{background:rgba(255,138,61,.35) !important;color:#fff !important;}

@media (prefers-reduced-motion:reduce){
  *,*::before,*::after{
    animation-duration:.01ms !important;
    animation-iteration-count:1 !important;
    transition-duration:.01ms !important;
  }
}

/* ---------- 15. 打印：保持白纸黑字，不受深色皮肤影响 ---------- */
@media print{
  body::before,body::after{display:none !important;}
  body{background:#fff !important;color:#000 !important;}
  .sidebar,.topbar,#globalProgressBar{display:none !important;}
}

/* ============================================================
   16. 字号落地（v2.1.0）
   目的：正文/表格/表单基线放大一档，减轻长时间录入与查阅数据的视疲劳。
   原则：只放大"要读很久"的文字；徽章、角标、分页、坐标数字等小字保持原尺寸，
        避免撑破紧凑控件或破坏蓝图刻度的紧凑感。
   ==================================================================== */

/* --- 表格：数据查阅最密集的地方，13px 是主力 --- */
table{font-size:var(--bp-fs-sm) !important;}
table td,table th{line-height:var(--bp-line-h) !important;}
table td{font-size:var(--bp-fs-sm) !important;}
table th{font-size:var(--bp-fs-xs) !important;}

/* --- 表单：录入需要看久，输入框与文字同步放大 --- */
.form-group label,
.form-group input,
.form-group select,
.form-group textarea,
input:not([type=checkbox]):not([type=radio]),
select,
textarea{font-size:var(--bp-fs-sm) !important;line-height:var(--bp-line-h) !important;}
.form-group label{font-size:var(--bp-fs-sm) !important;}

/* --- 侧栏菜单：一级菜单是最常点的，13.5px 更易扫读 --- */
.menu-item,.menu-group-title{font-size:var(--bp-fs-md) !important;}
.menu-sub .menu-item{font-size:var(--bp-fs-sm) !important;}
.menu-sub-title{font-size:var(--bp-fs-sm) !important;}
.menu-badge{font-size:var(--bp-fs-xs) !important;}

/* --- 卡片与面板：标题略大，正文随基准 --- */
.card-title,.dash-todo-title{font-size:var(--bp-fs-lg) !important;}
.card-body,.dash-todo-desc{font-size:var(--bp-fs-sm) !important;}
.dash-feed-item,.feed-title{font-size:var(--bp-fs-sm) !important;}

/* --- 按钮：与正文同节奏，避免大字号下按钮显得矮 --- */
.btn{font-size:var(--bp-fs-sm) !important;}

/* --- 模块主页 KPI 数值区：数字本来就是等宽大字号，仅调说明文字 --- */
.stat-label{font-size:var(--bp-fs-xs) !important;}
.stat-num{line-height:1.2 !important;}

/* --- 表格内操作按钮/链接：保持紧凑，不随正文放大 --- */
.table-actions .btn,
.table-actions .btn-link,
td .btn-link{font-size:var(--bp-fs-xs) !important;}

/* --- 保留不动的小字类（显式声明，防止被上面的选择器误伤） --- */
.tag,.menu-badge,.step-circle,.logout-btn,.topbar-info-tag,
.dg-cell,#drawingGrid,.toast,.badge,.pagination,.pager{font-size:var(--bp-fs-xs) !important;}
/* 班组产值台账：表头下方「每月合计」行（吸顶跟随表头） */
#drawingGrid thead tr.dg-grand-row th{background:linear-gradient(180deg,#1c3a57,#143049) !important;background-image:linear-gradient(180deg,#1c3a57,#143049) !important;color:var(--bp-accent) !important;font-weight:700;border-top:2px solid var(--bp-line-strong) !important;box-shadow:none !important;letter-spacing:normal;}
#drawingGrid thead tr.dg-grand-row th.dg-amt{color:#86efac !important;}
#drawingGrid thead tr.dg-grand-row th.dg-num{color:#cfe0f5 !important;}
#drawingGrid thead tr.dg-grand-row th .dg-mqty{color:#cfe0f5 !important;text-align:right;font-family:var(--bp-mono);}
#drawingGrid thead tr.dg-grand-row th .dg-mamt{color:var(--bp-accent) !important;font-weight:700;text-align:right;font-family:var(--bp-mono);font-size:11px;margin-top:1px;}
#drawingGrid thead tr.dg-grand-row th.dg-itemname{text-align:left;color:var(--bp-accent) !important;}

/* ============================================================
   17. 圆角收敛（v2.1.0）
   目的：原先 2/3/4/6/8/10/12/16/20px 共 9 档混用，卡片之间圆角不一，
        视觉节奏被打散。收敛为 3 档：控件 4 / 容器 8 / 大块 12。
   注意：圆形元素（点、圆点、头像）必须保持正圆，不能被压成方角。
   ==================================================================== */

/* --- 控件档 4px：按钮、输入、标签、菜单项、进度条 --- */
.btn,button:not(.step-circle):not(.legend-dot),
input:not([type=checkbox]):not([type=radio]),
select,textarea,
.tag,.login-error,.alert-item,.menu-sub-title,
.machine-tab,.stock-tool-btn,.date-tool{--bp-r:4px;}
.btn,button,input,select,textarea,.tag,.login-error,.alert-item,
.menu-sub-title,.machine-tab,.stock-tool-btn,.date-tool{
  border-radius:var(--bp-r) !important;
}
.progress,.bar{border-radius:2px !important;}

/* --- 容器档 8px：卡片、弹窗、下拉、登录框、日期面板 --- */
.card,.modal,.dropdown-menu,.login-box,.date-tool,.table-wrap{
  border-radius:var(--bp-r-lg) !important;
}
.card-title,.modal-header,.modal-title{--bp-r-lg:8px;}

/* --- 大块档 12px：KPI/统计卡、图标底座 --- */
.stat-card,.stat-icon-wrap,.kpi-card{
  border-radius:var(--bp-r-xl) !important;
}

/* --- 圆形元素：强制正圆，不受上述收敛影响 --- */
.menu-badge,.menu-sub-group > .arrow,.legend-dot,.dash-todo-dot,
.menu-group-title .arrow,.menu-sub-title .arrow,
.stat-icon,.circle,.dot,.avatar{
  border-radius:var(--bp-r-pill) !important;
}
.menu-icon,.modal-close{border-radius:var(--bp-r) !important;}

/* --- 进度条填充层必须与轨道同高同圆角，否则两端露角 --- */
.progress > *,.bar > *{border-radius:inherit !important;}

