/* ============================================================================
   Workbench 主题 · 侧栏式双主题工作台（P1 皮肤层）
   项目：福建仓订单管理系统      创建：2026-09-02

   定位：基底用 A 的克制（专业耐看、不抢状态色）
        点睛用 B 的质感（渐变只用于品牌区与主按钮）
        语义用 C 的状态色体系（业务状态一眼可辨）

   ★ 本文件仅覆盖「外观」：颜色 / 背景 / 圆角 / 阴影 / 边框 / 字体 / 间距
   ★ 不改动：Python 逻辑、Jinja 模板结构（if/for/变量）、数据库、路由、权限、金额口径
   ★ 回退方式：把 templates/base.html 与 templates/login.html 中引入本文件的
               <link> 改回 css/theme-clean.css 即可恢复原样（或直接删除该行）

   优先级说明（重要）：
     1) 本文件在 base.html 的 </style> 之后加载 → 可覆盖 base.html 内联 <style>
     2) 子模板（finance.html / operations.html 等）在 body 内的 <style> 加载更晚
        → 覆盖它们必须加 !important（本文件已在关键处标注）
     3) 元素上的内联 style="" 属性 → 覆盖必须加 !important（如 navbar 的 background）
   ============================================================================ */

/* ------------------------------------------------------------------ */
/* 1. Design Token · 浅色主题（默认）                                   */
/* ------------------------------------------------------------------ */
:root {
  /* 背景层 */
  --wb-bg-app:        #F5F7FA;   /* 页面底 */
  --wb-bg-surface:    #FFFFFF;   /* 卡片 / 侧栏 */
  --wb-bg-subtle:     #F0F3F8;   /* 表头 / 悬停 / 分组底 */
  --wb-bg-nav:        #1E293B;   /* 顶栏（现骨架；P3 改侧栏后由 --wb-bg-surface 接管） */

  /* 边框 */
  --wb-border:        #E3E8EF;
  --wb-border-strong: #CBD5E1;

  /* 文字 */
  --wb-text-1:        #0F172A;   /* 主文字 */
  --wb-text-2:        #475569;   /* 次文字 */
  --wb-text-3:        #64748B;   /* 弱文字 / 占位（提亮对比：浅底可达 AA 4.5）*/

  /* 品牌 */
  --wb-brand:         #2563EB;
  --wb-brand-hover:   #1D4ED8;
  --wb-brand-subtle:  #EFF6FF;   /* 选中态底色 */
  --wb-accent:        #6366F1;   /* 渐变点睛（品牌区 / 主按钮） */
  --wb-gradient:      linear-gradient(135deg, #2563EB 0%, #6366F1 100%);

  /* 语义色 */
  --wb-success:       #16A34A;
  --wb-warning:       #B45309;   /* 预警琥珀：由 #F59E0B 加深，浅底文字对比从 2.15 升至 4.9（AA 通过）*/
  --wb-danger:        #DC2626;
  --wb-info:          #0891B2;

  /* 业务状态色（全站统一，5 色上限） */
  --wb-st-pending:    #F59E0B;   /* 待审核 */
  --wb-st-running:    #2563EB;   /* 进行中 */
  --wb-st-done:       #16A34A;   /* 已完成 */
  --wb-st-error:      #DC2626;   /* 异常 */
  --wb-st-cancel:     #94A3B8;   /* 已取消 */

  /* 盈亏金额色：沿用系统现有股票习惯（盈利红 / 亏损绿），零口径改动 */
  --wb-profit-up:     #DC2626;
  --wb-profit-down:   #16A34A;

  /* 圆角 */
  --wb-r-card:        12px;
  --wb-r-ctrl:        8px;
  --wb-r-badge:       6px;

  /* 阴影 */
  --wb-shadow-1:      0 1px 2px rgba(16, 24, 40, .05);
  --wb-shadow-2:      0 4px 12px rgba(16, 24, 40, .08);
  --wb-shadow-brand:  0 2px 10px rgba(37, 99, 235, .12);

  /* 尺寸（配合密度开关） */
  --wb-row-h:         44px;
  --wb-row-pad-y:     .625rem;
  --wb-font-body:     14px;
  --wb-font-th:       13px;
  --wb-font-td:       14px;
  --wb-card-pad:       1rem 1.15rem;
  --wb-gap:           12px;

  /* 字体 */
  --wb-font-cn: -apple-system, BlinkMacSystemFont, "PingFang SC", "Microsoft YaHei",
                "Noto Sans SC", "Source Han Sans SC", "Helvetica Neue", Arial, sans-serif;
}

/* ------------------------------------------------------------------ */
/* 2. Design Token · 深色主题                                           */
/*    切换方式：<html data-bs-theme="dark">                             */
/* ------------------------------------------------------------------ */
[data-bs-theme="dark"] {
  --wb-bg-app:        #0D1117;
  --wb-bg-surface:    #161C26;
  --wb-bg-subtle:     #1B2231;
  --wb-bg-nav:        #141922;

  --wb-border:        #232B3A;
  --wb-border-strong: #3A475C;

  --wb-text-1:        #E6EDF3;
  --wb-text-2:        #8B98A9;
  --wb-text-3:        #5A667A;

  --wb-brand:         #60A5FA;
  --wb-brand-hover:   #93C5FD;
  --wb-brand-subtle:  #16233A;
  --wb-accent:        #818CF8;
  --wb-gradient:      linear-gradient(135deg, #3B82F6 0%, #818CF8 100%);

  --wb-success:       #34D399;
  --wb-warning:       #FBBF24;
  --wb-danger:        #F87171;
  --wb-info:          #38BDF8;

  /* 深色下状态色整体提亮，否则会糊进背景 */
  --wb-st-pending:    #FBBF24;
  --wb-st-running:    #60A5FA;
  --wb-st-done:       #34D399;
  --wb-st-error:      #F87171;
  --wb-st-cancel:     #64748B;

  /* 盈亏色同样提亮 */
  --wb-profit-up:     #F87171;
  --wb-profit-down:   #34D399;

  --wb-shadow-1:      0 1px 2px rgba(0, 0, 0, .40);
  --wb-shadow-2:      0 4px 14px rgba(0, 0, 0, .50);
  --wb-shadow-brand:  0 2px 12px rgba(96, 165, 250, .18);
}

/* ------------------------------------------------------------------ */
/* 3. 映射到 Bootstrap 5.3 变量（让原生组件自动跟随主题）                */
/* ------------------------------------------------------------------ */
:root {
  --bs-body-bg:                var(--wb-bg-app);
  --bs-body-color:             var(--wb-text-1);
  --bs-emphasis-color:         var(--wb-text-1);
  --bs-secondary-color:        var(--wb-text-2);
  --bs-tertiary-color:         var(--wb-text-3);
  --bs-secondary-bg:           var(--wb-bg-subtle);
  --bs-tertiary-bg:            var(--wb-bg-subtle);

  --bs-border-color:           var(--wb-border);
  --bs-border-radius:          var(--wb-r-ctrl);
  --bs-border-radius-sm:       6px;
  --bs-border-radius-lg:       var(--wb-r-card);

  --bs-primary:                var(--wb-brand);
  --bs-link-color:             var(--wb-brand);
  --bs-link-hover-color:       var(--wb-brand-hover);

  --bs-success:                var(--wb-success);
  --bs-warning:                var(--wb-warning);
  --bs-danger:                 var(--wb-danger);
  --bs-info:                   var(--wb-info);

  --bs-primary-rgb:            37, 99, 235;
  --bs-success-rgb:            22, 163, 74;
  --bs-warning-rgb:            180, 83, 9;   /* 与 --wb-warning(#B45309) 同步，修复 .text-warning/.bg-warning-subtle 仍用旧琥珀 */
  --bs-danger-rgb:             220, 38, 38;
  --bs-info-rgb:               8, 145, 178;

  --bs-body-font-family:       var(--wb-font-cn);
  --bs-body-font-size:         var(--wb-font-body);
  --bs-font-sans-serif:        var(--wb-font-cn);
}

/* 深色下 Bootstrap 的表单/下拉/模态需要显式指定，否则仍是白底黑字 */
[data-bs-theme="dark"] {
  --bs-primary-text-emphasis:  #93C5FD;
  --bs-primary-bg-subtle:      #16233A;
  --bs-primary-border-subtle:  #1E3A5F;
  --bs-success-text-emphasis:  #6EE7B7;
  --bs-danger-text-emphasis:   #FCA5A5;
  --bs-warning-text-emphasis:  #FCD34D;
  --bs-info-text-emphasis:     #7DD3FC;

  --bs-primary-rgb:            96, 165, 250;
  --bs-success-rgb:            52, 211, 153;
  --bs-warning-rgb:            251, 191, 36;
  --bs-danger-rgb:             248, 113, 113;
  --bs-info-rgb:               56, 189, 248;
}

/* ------------------------------------------------------------------ */
/* 4. 基础排版                                                          */
/* ------------------------------------------------------------------ */
body {
  background: var(--wb-bg-app) !important;
  color: var(--wb-text-1);
  font-family: var(--wb-font-cn);
  font-size: var(--wb-font-body);
  line-height: 1.6;
  -webkit-font-smoothing: antialiased;
}

/* 全站数字等宽：金额 / 单号纵向对齐不跳动 */
body, .table, .card, input, select {
  font-variant-numeric: tabular-nums;
}

h1, h2, h3, h4, h5, h6 { color: var(--wb-text-1); }

/* 页面标题（保留既有「居中」约定） */
.page-title, .ops-page-title {
  color: var(--wb-text-1) !important;
  text-align: center;
}

/* R10 修复：d-flex 父级内 page-title/ops-page-title 居中失效 → 标题+副标题左边缘错位
   场景：<div class="d-flex justify-content-between"><h4 class="page-title">标题</h4>右侧按钮</div>
   根因：h4 在 flex 父级内被 shrink-to-fit 成内容宽度，text-align:center 在内容宽度内等价于左对齐；
        而副标题独立成 div 时左边缘=父 div 左边缘，与 h4「内容宽度」内的文字左边缘天然错位。
   修法：仅当处于 d-flex 后代内时强制 text-align:left + flex:1 撑开，让标题与副标题共用同左基准。
   兼容：.ops-page-title 当容器用的页面（如 operations_overview）外层不是 d-flex，不被本规则命中→保留居中。 */
.d-flex > .page-title,
.d-flex > .ops-page-title,
.d-flex .page-title,
.d-flex .ops-page-title {
  text-align: left;
  flex: 1 1 auto;
  min-width: 0;       /* 避免图标+长文字溢出 flex item */
  margin-right: 12px; /* 与右侧按钮/操作区留白 */
}
.d-flex .page-title + .text-muted,
.d-flex .page-title + small.text-muted,
.d-flex .ops-page-title + .text-muted {
  margin-top: 2px;    /* 独立副标题紧贴主标题 */
}

/* 主区容器 */
.container, .container-fluid { color: var(--wb-text-1); }

hr { border-color: var(--wb-border); opacity: 1; }

/* ------------------------------------------------------------------ */
/* 5. 顶栏（现骨架；P3 侧栏改造后本段可精简）                           */
/* ------------------------------------------------------------------ */
.navbar.bg-dark,
.navbar.navbar-dark,
nav.navbar[style] {
  background: var(--wb-bg-nav) !important;
  box-shadow: var(--wb-shadow-2) !important;
  border-bottom: 1px solid var(--wb-border);
}
.navbar .nav-link { color: rgba(255, 255, 255, .82) !important; }
.navbar .nav-link:hover,
.navbar .nav-link:focus,
.navbar .nav-link.active { color: #FFFFFF !important; }
.navbar-brand { color: #FFFFFF !important; font-weight: 600; }
.navbar-toggler { border-color: rgba(255, 255, 255, .25); }
.navbar-toggler-icon {
  background-image: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 30 30'%3e%3cpath stroke='rgba%28255,255,255,0.85%29' stroke-linecap='round' stroke-miterlimit='10' stroke-width='2' d='M4 7h22M4 15h22M4 23h22'/%3e%3c/svg%3e") !important;
}
/* 主菜单字号固定 16px 单行（沿用既有约定，不随项数变化） */
#mainNav .nav-link { font-size: 1rem !important; }

/* ------------------------------------------------------------------ */
/* 6. 卡片                                                             */
/* ------------------------------------------------------------------ */
.card {
  background: var(--wb-bg-surface) !important;
  border: 1px solid var(--wb-border) !important;
  border-radius: var(--wb-r-card) !important;
  box-shadow: var(--wb-shadow-1) !important;
  color: var(--wb-text-1);
  margin-bottom: var(--wb-gap);
}
.card:hover { box-shadow: var(--wb-shadow-2) !important; }
.card-header {
  background: var(--wb-bg-subtle) !important;
  border-bottom: 1px solid var(--wb-border) !important;
  color: var(--wb-text-1) !important;
  font-weight: 500;
}
.card-footer {
  background: var(--wb-bg-subtle) !important;
  border-top: 1px solid var(--wb-border) !important;
  color: var(--wb-text-2);
}
.card-title, .card-header h5, .card-header h6 { color: var(--wb-text-1); }

/* KPI 统计卡（既有 .stat-card 惯例） */
.stat-card {
  border-left: 3px solid var(--wb-brand) !important;
  border-radius: var(--wb-r-card) !important;
}

/* ------------------------------------------------------------------ */
/* 7. 表格                                                             */
/* ------------------------------------------------------------------ */
.table {
  color: var(--wb-text-1) !important;
  margin-bottom: 0;
  font-size: var(--wb-font-td);
}
.table > thead > tr > th {
  background: var(--wb-bg-subtle) !important;
  color: var(--wb-text-2) !important;
  border-bottom: 1px solid var(--wb-border) !important;
  font-size: var(--wb-font-th);
  font-weight: 500;
  white-space: nowrap;
  vertical-align: middle;
}
.table > tbody > tr > td {
  border-bottom: 1px solid var(--wb-border) !important;
  vertical-align: middle;
  padding: var(--wb-row-pad-y) .75rem;
}
.table > tbody > tr:hover > td {
  background: var(--wb-bg-subtle) !important;
}
.table-striped > tbody > tr:nth-of-type(odd) > td {
  background: color-mix(in srgb, var(--wb-bg-subtle) 45%, transparent) !important;
}
[data-bs-theme="dark"] .table-striped > tbody > tr:nth-of-type(odd) > td {
  background: rgba(255, 255, 255, .022) !important;
}
.table-bordered > :not(caption) > * > * {
  border-color: var(--wb-border) !important;
}
/* 粘性表头（长列表滚动时表头常驻）：wb-scroll-table（限高内滚）与 table-sticky-head（整页滚动）共用 */
.table-responsive { position: relative; }
.wb-scroll-table thead th,
.table-sticky-head thead th {
  position: sticky;
  top: 0;
  z-index: 2;
}
/* P2：长列表「表内滚动 + 吸顶表头」工具类。
   给 .table-responsive 追加本类即限高内滚（内容矮时自适应不留白），
   配合吸顶表头，老板长列表下翻不迷路。 */
.wb-scroll-table {
  max-height: calc(100vh - 240px);
  overflow-y: auto;
}
.wb-scroll-table thead th,
.table-sticky-head thead th {
  box-shadow: 0 1px 0 var(--wb-border), 0 6px 8px -6px rgba(15, 23, 42, .18);
}
[data-bs-theme="dark"] .wb-scroll-table thead th,
[data-bs-theme="dark"] .table-sticky-head thead th {
  box-shadow: 0 1px 0 var(--wb-border), 0 6px 8px -6px rgba(0, 0, 0, .55);
}
/* 打印豁免：A4 打印时取消限高内滚，避免表格被裁切 */
@media print {
  .wb-scroll-table { max-height: none !important; overflow: visible !important; }
  .wb-scroll-table thead th,
  .table-sticky-head thead th { position: static !important; box-shadow: none !important; }
}
/* 宽列表（min-width:2400px）保持横向滚动，不破坏既有布局 */
.wide-list-table { min-width: 2400px; }

/* ------------------------------------------------------------------ */
/* 8. 按钮                                                             */
/* ------------------------------------------------------------------ */
.btn { border-radius: var(--wb-r-ctrl) !important; font-size: .875rem; }
.btn:focus, .btn:focus-visible { box-shadow: 0 0 0 .2rem rgba(37,99,235,.25) !important; }
[data-bs-theme="dark"] .btn:focus,
[data-bs-theme="dark"] .btn:focus-visible { box-shadow: 0 0 0 .2rem rgba(96,165,250,.32) !important; }

.btn-primary {
  background: var(--wb-gradient) !important;
  border: none !important;
  color: #fff !important;
  box-shadow: var(--wb-shadow-brand) !important;
}
.btn-primary:hover { filter: brightness(1.07); color: #fff !important; }
[data-bs-theme="dark"] .btn-primary:hover { filter: brightness(1.12); }

.btn-outline-secondary, .btn-outline-primary {
  border-color: var(--wb-border-strong) !important;
  color: var(--wb-text-2) !important;
  background: transparent !important;
}
.btn-outline-secondary:hover,
.btn-outline-primary:hover {
  background: var(--wb-brand-subtle) !important;
  color: var(--wb-brand) !important;
  border-color: var(--wb-brand) !important;
}
.btn-light { background: var(--wb-bg-subtle) !important; border-color: var(--wb-border) !important; color: var(--wb-text-1) !important; }
.btn-close { filter: none; }
/* 例外：真深色浮层（图片灯箱 .modal-content.bg-dark，背景 rgba(0,0,0,.92)）内的关闭按钮
   被上一行 filter:none 打回深色 X → 落黑底不可见，这里单独反色回白 X */
.bg-dark .btn-close,
.modal-content.bg-dark .btn-close { filter: invert(1) grayscale(100%) brightness(200%) !important; }

/* ------------------------------------------------------------------ */
/* 9. 表单控件                                                         */
/* ------------------------------------------------------------------ */
.form-control, .form-select, .input-group-text {
  background: var(--wb-bg-surface) !important;
  color: var(--wb-text-1) !important;
  border: 1px solid var(--wb-border-strong) !important;
  border-radius: var(--wb-r-ctrl) !important;
  font-size: .875rem;
}
.form-control:focus, .form-select:focus {
  border-color: var(--wb-brand) !important;
  box-shadow: 0 0 0 .2rem rgba(37,99,235,.15) !important;
}
[data-bs-theme="dark"] .form-control:focus,
[data-bs-theme="dark"] .form-select:focus {
  box-shadow: 0 0 0 .2rem rgba(96,165,250,.22) !important;
}
.form-control::placeholder { color: var(--wb-text-3) !important; }
.form-control:disabled, .form-select:disabled {
  background: var(--wb-bg-subtle) !important;
  color: var(--wb-text-3) !important;
}
.form-label, .form-check-label { color: var(--wb-text-2); }
.form-text { color: var(--wb-text-3) !important; }

/* 可搜索下拉（base.html 自动升级原生 select） */
.combo-list, .ss-wrap .ss-panel {
  background: var(--wb-bg-surface) !important;
  border: 1px solid var(--wb-border-strong) !important;
  border-radius: var(--wb-r-ctrl) !important;
  box-shadow: var(--wb-shadow-2) !important;
}
.combo-item, .ss-wrap .ss-opt { color: var(--wb-text-1) !important; }
.combo-item:hover, .combo-item.active,
.ss-wrap .ss-opt:hover, .ss-wrap .ss-opt.active {
  background: var(--wb-brand-subtle) !important;
  color: var(--wb-brand) !important;
}

/* ------------------------------------------------------------------ */
/* 10. 徽章与标签                                                      */
/* ------------------------------------------------------------------ */
.badge { border-radius: var(--wb-r-badge) !important; font-weight: 500; }
.badge.bg-light { background: var(--wb-bg-subtle) !important; color: var(--wb-text-2) !important; }
.badge.bg-secondary { background: var(--wb-text-3) !important; color: #fff !important; }
/* 亏损单数徽章：soft 绿（浅色=浅绿底深绿字 / 深色=暗绿底亮绿字），与「亏损=绿」全站口径一致 */
.badge-loss {
  background: color-mix(in srgb, var(--wb-profit-down, #16a34a) 15%, transparent);
  color: var(--wb-profit-down, #16a34a);
  font-weight: 700;
  border-radius: var(--wb-r-badge) !important;
  padding: 3px 9px;
}

/* ------------------------------------------------------------------ */
/* 11. 标签页 / 快捷切换栏（沿用「单行不换行 + 横向滚动」约定）         */
/* ------------------------------------------------------------------ */
.nav-tabs { border-bottom-color: var(--wb-border) !important; }
.nav-tabs .nav-link {
  color: var(--wb-text-2) !important;
  border-radius: var(--wb-r-ctrl) var(--wb-r-ctrl) 0 0 !important;
  border-color: transparent !important;
}
.nav-tabs .nav-link:hover { color: var(--wb-brand) !important; background: var(--wb-brand-subtle) !important; }
.nav-tabs .nav-link.active {
  color: var(--wb-brand) !important;
  background: var(--wb-bg-surface) !important;
  border-color: var(--wb-border) var(--wb-border) var(--wb-bg-surface) !important;
}
.nav-pills .nav-link { color: var(--wb-text-2) !important; border-radius: var(--wb-r-ctrl) !important; }
.nav-pills .nav-link.active { background: var(--wb-brand) !important; color: #fff !important; }
.system-quick-tabs .nav-pills { flex-wrap: nowrap; overflow-x: auto; }
.system-quick-tabs .nav-pills .ch-sep { background: var(--wb-border-strong); }

/* ------------------------------------------------------------------ */
/* 12. 下拉菜单 / 模态框 / 弹窗                                        */
/* ------------------------------------------------------------------ */
.dropdown-menu {
  background: var(--wb-bg-surface) !important;
  border: 1px solid var(--wb-border) !important;
  border-radius: var(--wb-r-card) !important;
  box-shadow: var(--wb-shadow-2) !important;
  color: var(--wb-text-1);
}
.dropdown-item { color: var(--wb-text-1) !important; }
.dropdown-item:hover, .dropdown-item:focus {
  background: var(--wb-brand-subtle) !important;
  color: var(--wb-brand) !important;
}
.dropdown-divider { border-color: var(--wb-border) !important; }
.dropdown-header { color: var(--wb-text-3) !important; }

.modal-content {
  background: var(--wb-bg-surface) !important;
  border: 1px solid var(--wb-border) !important;
  border-radius: var(--wb-r-card) !important;
  color: var(--wb-text-1);
}
.modal-header { border-bottom: 1px solid var(--wb-border) !important; }
.modal-footer { border-top: 1px solid var(--wb-border) !important; }
.offcanvas { background: var(--wb-bg-surface) !important; color: var(--wb-text-1); }

.popover, .tooltip { border-radius: var(--wb-r-ctrl) !important; }
.popover-body { color: var(--wb-text-1); }

/* ------------------------------------------------------------------ */
/* 13. 业务状态色工具类（供 P3 状态色体系使用）                         */
/*     用法：<span class="wb-st wb-st-running">进行中</span>           */
/*     或行左侧色条：<tr class="wb-row" data-st="running">              */
/* ------------------------------------------------------------------ */
.wb-st {
  display: inline-block;
  padding: 2px 8px;
  border-radius: var(--wb-r-badge);
  font-size: .75rem;
  font-weight: 500;
  color: #fff;
  line-height: 1.5;
  white-space: nowrap;
}
.wb-st-pending { background: var(--wb-st-pending); }
.wb-st-running { background: var(--wb-st-running); }
.wb-st-done    { background: var(--wb-st-done); }
.wb-st-error   { background: var(--wb-st-error); }
.wb-st-cancel  { background: var(--wb-st-cancel); }
[data-bs-theme="dark"] .wb-st { color: #0D1117; }
[data-bs-theme="dark"] .wb-st-cancel { color: #E6EDF3; }

/* 行左侧 3px 状态色条 */
tr[data-st] > td:first-child { box-shadow: inset 3px 0 0 var(--wb-border); }
tr[data-st="pending"] > td:first-child { box-shadow: inset 3px 0 0 var(--wb-st-pending); }
tr[data-st="running"] > td:first-child { box-shadow: inset 3px 0 0 var(--wb-st-running); }
tr[data-st="done"]    > td:first-child { box-shadow: inset 3px 0 0 var(--wb-st-done); }
tr[data-st="error"]   > td:first-child { box-shadow: inset 3px 0 0 var(--wb-st-error); }
tr[data-st="cancel"]  > td:first-child { box-shadow: inset 3px 0 0 var(--wb-st-cancel); }

/* ------------------------------------------------------------------ */
/* 14. 盈亏金额色 · 全站统一                                            */
/*     系统现有 3 处重复定义（operations.html:13-14 / admin-contacts:9-10 */
/*     / operations_overview:111-112），口径其实一致（盈利红/亏损绿），   */
/*     这里加 !important 统一收敛为变量，深色主题下自动提亮。            */
/* ------------------------------------------------------------------ */
.profit-positive { color: var(--wb-profit-up) !important; }
.profit-negative { color: var(--wb-profit-down) !important; }

/* ------------------------------------------------------------------ */
/* 15. 密度开关                                                        */
/*     用法：<html data-density="compact">                             */
/*     录入/库存等批量岗位可切紧凑，同屏多约 30% 行                     */
/* ------------------------------------------------------------------ */
[data-density="compact"] {
  --wb-row-h:      34px;
  --wb-row-pad-y:  .25rem;
  --wb-font-body:  13px;
  --wb-font-th:    12px;
  --wb-font-td:    13px;
  --wb-card-pad:   .6rem .75rem;
  --wb-gap:        8px;
}
[data-density="compact"] .card { padding: 0; }
[data-density="compact"] .table > tbody > tr > td { padding: var(--wb-row-pad-y) .5rem; }
[data-density="compact"] .btn { font-size: .8125rem; padding: .25rem .6rem; }
[data-density="compact"] .form-control,
[data-density="compact"] .form-select { font-size: .8125rem; padding: .25rem .5rem; }

/* ------------------------------------------------------------------ */
/* 16. 响应式基础（为后续小程序预留；本轮桌面为主）                     */
/* ------------------------------------------------------------------ */

/* ≥1600 宽屏：内容限宽居中，避免超宽屏幕上文字行长失控 */
@media (min-width: 1600px) {
  .container { max-width: 1560px; }
}

/* 992–1199 小桌面：KPI 由 4 列降 3 列 */
@media (max-width: 1199.98px) {
  .row-cols-xl-4 > *, .row > .col-xl-3 { flex: 0 0 auto; width: 33.333333%; }
}

/* 768–991 平板：卡片内边距收紧，表格字号降一档 */
@media (max-width: 991.98px) {
  :root { --wb-card-pad: .75rem .9rem; --wb-gap: 10px; }
  .card { padding: 0; }
  .table { font-size: 13px; }
  .table > thead > tr > th { font-size: 12px; }
  .navbar .nav-link { padding: .3rem .4rem; }
}

/* <768 手机：基础可用（不追求完美，全面卡片流属 P4 阶段） */
@media (max-width: 767.98px) {
  :root { --wb-font-body: 14px; --wb-card-pad: .7rem .8rem; }
  .container, .container-fluid { padding-left: 8px; padding-right: 8px; }
  .card { border-radius: 10px !important; }
  .table-responsive { border: 1px solid var(--wb-border); border-radius: 10px; }
  /* 触控友好：操作按钮最小 44px 高 */
  .btn { min-height: 38px; }
  .btn-sm { min-height: 34px; }
  /* 标题不再强制居中，手机窄屏左对齐更易读 */
  .page-title { text-align: left !important; font-size: 1.05rem; }
}

/* ------------------------------------------------------------------ */
/* 17. 深色模式兼容兜底                                                */
/*     部分模板在 body 内 <style> 里写了硬编码浅色，这里统一拉回        */
/* ------------------------------------------------------------------ */
[data-bs-theme="dark"] .bg-white,
[data-bs-theme="dark"] .bg-light { background: var(--wb-bg-surface) !important; }
[data-bs-theme="dark"] .text-dark,
[data-bs-theme="dark"] .text-body { color: var(--wb-text-1) !important; }
[data-bs-theme="dark"] .text-muted { color: var(--wb-text-3) !important; }
[data-bs-theme="dark"] .border { border-color: var(--wb-border) !important; }
[data-bs-theme="dark"] .table-light > * > * { background: var(--wb-bg-subtle) !important; color: var(--wb-text-1) !important; }
[data-bs-theme="dark"] .list-group-item { background: var(--wb-bg-surface) !important; color: var(--wb-text-1) !important; border-color: var(--wb-border) !important; }
[data-bs-theme="dark"] .page-link { background: var(--wb-bg-surface) !important; color: var(--wb-text-2) !important; border-color: var(--wb-border) !important; }
[data-bs-theme="dark"] .page-link:hover { background: var(--wb-brand-subtle) !important; color: var(--wb-brand) !important; }
[data-bs-theme="dark"] .alert-secondary { background: var(--wb-bg-subtle) !important; color: var(--wb-text-1) !important; border-color: var(--wb-border) !important; }
[data-bs-theme="dark"] img:not([data-keep]) { filter: brightness(.92); }
[data-bs-theme="dark"] .navbar.bg-dark,
[data-bs-theme="dark"] nav.navbar[style] { background: var(--wb-bg-nav) !important; }

/* ------------------------------------------------------------------ */
/* 18. 分页                                                            */
/* ------------------------------------------------------------------ */
.pagination { margin-bottom: 0; }
.page-link {
  background: var(--wb-bg-surface) !important;
  color: var(--wb-text-2) !important;
  border: 1px solid var(--wb-border) !important;
  border-radius: var(--wb-r-ctrl) !important;
}
.page-link:hover { background: var(--wb-brand-subtle) !important; color: var(--wb-brand) !important; }
.page-item.active .page-link {
  background: var(--wb-brand) !important;
  border-color: var(--wb-brand) !important;
  color: #fff !important;
}
.page-item.disabled .page-link {
  background: var(--wb-bg-subtle) !important;
  color: var(--wb-text-2) !important;
}

/* ------------------------------------------------------------------ */
/* 19. 登录页（独立模板，背景用品牌渐变突出卡片，跟随深浅主题）         */
/* ------------------------------------------------------------------ */
body.page-login {
  background: linear-gradient(135deg, #1E3A8A 0%, #4F46E5 100%) !important;
}
[data-bs-theme="dark"] body.page-login {
  background: linear-gradient(135deg, #0B1220 0%, #1E1B4B 100%) !important;
}
.page-login .login-card {
  background: var(--wb-bg-surface) !important;
  border: 1px solid var(--wb-border) !important;
  border-radius: var(--wb-r-card) !important;
  box-shadow: 0 10px 40px rgba(0, 0, 0, .3) !important;
}
.page-login .login-header {
  background: var(--wb-bg-surface) !important;
  border-radius: var(--wb-r-card) var(--wb-r-card) 0 0 !important;
}
.page-login .login-header h4 { color: var(--wb-text-1) !important; }
.page-login .login-header p { color: var(--wb-text-2) !important; }
.page-login .tab-btn { color: var(--wb-text-2) !important; border-bottom-color: transparent !important; }
.page-login .tab-btn.active { color: var(--wb-brand) !important; border-bottom-color: var(--wb-brand) !important; }
.page-login .captcha-img { border: 1px solid var(--wb-border-strong) !important; border-radius: var(--wb-r-ctrl) !important; }
.page-login .captcha-img:hover { border-color: var(--wb-brand) !important; }

/* ------------------------------------------------------------------ */
/* 20. 打印（沿用报表中心 print 约定，深色下强制回浅色）                */
/* ------------------------------------------------------------------ */
@media print {
  :root, [data-bs-theme="dark"] {
    --wb-bg-app: #fff; --wb-bg-surface: #fff; --wb-bg-subtle: #F5F7FA;
    --wb-text-1: #000; --wb-text-2: #333; --wb-text-3: #666;
    --wb-border: #ccc;
    --wb-profit-up: #B91C1C; --wb-profit-down: #15803D;
  }
  .navbar, .btn, .pagination { display: none !important; }
  .card { box-shadow: none !important; border: 1px solid #ddd !important; }
}

/* ------------------------------------------------------------------ */
/* 21. P3 布局层：顶栏 → 侧边栏工作台                                    */
/*     纯 CSS 布局改造；菜单内容/顺序/权限逻辑与顶栏版完全一致。          */
/*     侧栏两种形态：桌面(≥992px)常驻可折叠；窄屏浮动抽屉+遮罩。         */
/* ------------------------------------------------------------------ */
.wb-app { display: flex; align-items: flex-start; min-height: 100vh; }
/* —— 侧栏 —— */
.wb-sidebar {
  --wb-sb-w: 250px;
  position: sticky; top: 0; left: 0;
  flex: 0 0 var(--wb-sb-w);
  width: var(--wb-sb-w);
  height: 100vh;
  display: flex; flex-direction: column;
  background: var(--wb-bg-nav);
  border-right: 1px solid var(--wb-border);
  z-index: 1045;
  transition: transform .22s ease;
}
.wb-sidebar-head {
  flex: 0 0 auto; height: 56px;
  display: flex; align-items: center; justify-content: space-between; gap: 8px;
  padding: 0 12px 0 16px;
  border-bottom: 1px solid rgba(255, 255, 255, .08);
}
.wb-brand {
  display: inline-flex; align-items: center; gap: 8px; min-width: 0;
  color: #fff !important; font-weight: 600; font-size: 15px;
  text-decoration: none !important; white-space: nowrap;
}
.wb-brand i { color: var(--wb-accent); font-size: 1.05rem; }
.wb-sidebar-close {
  display: inline-flex; align-items: center; justify-content: center;
  width: 30px; height: 30px; padding: 0; border: 0; border-radius: 8px;
  background: transparent; color: rgba(255, 255, 255, .7); font-size: .9rem;
}
.wb-sidebar-close:hover { background: rgba(255, 255, 255, .1); color: #fff; }
.wb-sidebar-scroll { flex: 1; overflow-y: auto; overflow-x: hidden; padding: 10px 12px 18px; }
.wb-sidebar-scroll::-webkit-scrollbar { width: 6px; }
.wb-sidebar-scroll::-webkit-scrollbar-thumb { background: rgba(255,255,255,.18); border-radius: 3px; }

/* 主菜单：垂直手风琴（菜单本体逻辑与顶栏版逐项一致） */
.wb-sidebar #mainNav {
  display: flex !important; flex-direction: column; align-items: stretch;
  flex: none; min-width: 0; margin: 0; padding: 0;
  gap: 2px; list-style: none;
}
.wb-sidebar #mainNav > li { width: 100%; list-style: none; margin: 0; }
/* 一级行（含 首页/生产看板 直链 与 分组开关） */
.wb-sidebar #mainNav > li > a.nav-link {
  display: flex !important; align-items: center; gap: 10px;
  width: 100%; margin: 0; padding: 8px 10px !important;
  border-radius: 8px;
  color: rgba(255, 255, 255, .8) !important;
  font-size: .92rem !important; font-weight: 500;
  line-height: 1.3; text-decoration: none !important; white-space: nowrap;
}
.wb-sidebar #mainNav > li > a.nav-link:hover,
.wb-sidebar #mainNav > li > a.nav-link:focus { background: rgba(255, 255, 255, .06) !important; color: #fff !important; }
.wb-sidebar #mainNav > li > a.nav-link.active {
  background: var(--wb-brand) !important;
  color: #fff !important;
  box-shadow: inset 3px 0 0 rgba(255,255,255,.95), 0 2px 10px rgba(37,99,235,.35) !important;
}
.wb-sidebar #mainNav > li > a.nav-link.active i { color: #fff !important; opacity: 1 !important; }
.wb-sidebar #mainNav > li > a.nav-link i { width: 18px; text-align: center; font-size: .95rem; opacity: .85; }
/* R11：一级菜单图标在 open 状态下微提亮（默认 .85 → 1），与子项 .76 默认色呼应 */
.wb-sidebar #mainNav > li.dropdown.open > a.nav-link i { opacity: 1; }
/* 分组开关：隐藏 bootstrap 三角，右侧改 chevron-right，展开转 90° */
.wb-sidebar #mainNav > li.dropdown > a::after {
  content: "\F285"; font-family: "bootstrap-icons" !important;
  margin-left: auto; margin-right: 2px; border: 0 !important;
  font-size: .68rem; opacity: .85; vertical-align: 0;
  transition: transform .18s ease;
}
.wb-sidebar #mainNav > li.dropdown.open > a::after { transform: rotate(90deg); opacity: 1; }
/* 二级菜单：由下拉浮层原地改为静态展开（点击切 .open，见 base.html 脚本） */
.wb-sidebar .dropdown-menu {
  position: static !important; inset: auto !important;
  transform: none !important; min-width: 0 !important;
  display: none !important; margin: 2px 0 4px !important; padding: 0 !important;
  border: 0 !important; border-radius: 0 !important;
  background: transparent !important; box-shadow: none !important;
  float: none;
}
.wb-sidebar li.open > .dropdown-menu { display: block !important; }
.wb-sidebar .dropdown-item {
  display: flex !important; align-items: center; gap: 8px;
  width: 100%; margin: 2px 0; padding: 6px 10px 6px 22px !important;
  border-radius: 6px; white-space: nowrap;
  /* R12 子菜单视觉层级（老板截图反馈「导航显示有问题」+ 多检查根因排查后）：
     原 R11 提亮方案（字色 .9 / 字号 .86rem / 缩进 15px / 图标 .82rem .95）贴在主菜单
     下方反而"喧宾夺主"——子项字色 .9 高过主项 .8，主项像"消失"、子项像"霸屏"，
     13 个分组（订单/货品/车辆/售后/财务/快递/运营/库存/仓库/商品/渠道/系统/报表）
     全部共用一份样式，影响面是全站。
     本次仅调 5 个数值建立"隶属"识别（功能 0 改动）：
       · 字色 .9 → .72（比主 .8 暗，明显"次级"）
       · 字号 .86rem → .82rem（缩 5%）
       · 左缩进 15 → 22（多 7px，构成可见层级）
       · 图标 .82rem/.95 → .78rem/.65（明显小+暗）
       · 组内项间 1 → 2（紧凑，与组间 gap 2 视觉合并感） */
  color: rgba(255, 255, 255, .72) !important; font-size: .82rem !important;
  font-weight: 400; text-decoration: none !important;
}
.wb-sidebar .dropdown-item:hover,
.wb-sidebar .dropdown-item:focus { background: rgba(255, 255, 255, .06) !important; color: #fff !important; }
.wb-sidebar .dropdown-item.active {
  background: var(--wb-brand) !important;
  color: #fff !important;
  box-shadow: inset 3px 0 0 rgba(255,255,255,.95) !important;
}
.wb-sidebar .dropdown-item.active i { color: #fff !important; opacity: 1 !important; }
.wb-sidebar .dropdown-item i { width: 14px; text-align: center; font-size: .78rem; opacity: .65; }
.wb-sidebar .dropdown-divider { margin: .25rem .5rem !important; border-color: rgba(255, 255, 255, .1) !important; }

/* R12d 防污染锁（兜底）：个别页面曾用「裸 .nav-item」写内联样式（admin/permissions、
   admin/user_permissions），与侧栏 <li class="nav-item"> 同名而外泄 —— 表现是「只有进
   那一页，导航才变样」（浅蓝 hover 底色 / 圆角 / 额外外边距），且强制刷新完全无效，
   因为它不是缓存问题而是页面级 CSS 污染。
   根因已在那两个模板收窄为 .nav-item.nav-clickable；这里再对侧栏条目做兜底锁定，
   任何页面级 .nav-item 规则都无法再改动它的底色、圆角与外边距（功能 0 改动）。 */
.wb-sidebar #mainNav > li.nav-item,
.wb-sidebar #mainNav > li.nav-item:hover,
.wb-sidebar #mainNav > li.nav-item:focus {
  background: transparent !important;
  border-radius: 0 !important;
  margin: 0 !important;
  padding: 0 !important;
}

/* —— 主区 + 顶栏 —— */
.wb-main { flex: 1; min-width: 0; display: flex; flex-direction: column; }
.wb-topbar {
  position: sticky; top: 0; z-index: 1030;
  display: flex; align-items: center; gap: 6px;
  height: 56px; padding: 0 14px;
  background: var(--wb-bg-surface);
  border-bottom: 1px solid var(--wb-border);
}
.wb-topbar-left { display: flex; align-items: center; gap: 4px; min-width: 0; }
.wb-topbar-btn {
  display: inline-flex; align-items: center; justify-content: center;
  width: 34px; height: 34px; padding: 0; border: 0; border-radius: 8px;
  background: transparent; color: var(--wb-text-2); font-size: 1.15rem;
}
.wb-topbar-btn:hover { background: var(--wb-bg-subtle); color: var(--wb-text-1); }
.wb-topbar-brand {
  display: none; align-items: center; gap: 8px;
  color: var(--wb-text-1); font-weight: 600; font-size: 15px;
  text-decoration: none !important; white-space: nowrap; margin-left: 4px;
}
.wb-topbar-brand i { color: var(--wb-brand); }
.wb-topbar-right {
  display: flex; align-items: center; gap: 2px;
  margin: 0 0 0 auto !important; padding: 0; list-style: none;
}
.wb-topbar-right .nav-link {
  display: flex; align-items: center; gap: 6px;
  padding: 7px 9px !important; margin: 0;
  border-radius: 8px; white-space: nowrap;
  color: var(--wb-text-2) !important; font-size: .88rem !important;
}
.wb-topbar-right .nav-link:hover,
.wb-topbar-right .nav-link:focus { background: var(--wb-bg-subtle); color: var(--wb-text-1) !important; }
.wb-topbar-right .dropdown-menu { left: auto; right: 0; }
.wb-backdrop { display: none; }

/* 桌面折叠态：整栏隐藏，顶栏品牌出现 */
.wb-app.wb-sb-off .wb-sidebar { display: none; }
.wb-app.wb-sb-off .wb-topbar-brand { display: inline-flex; }

/* 紧凑密度适配 */
[data-density="compact"] .wb-sidebar-head { height: 46px; }
[data-density="compact"] .wb-topbar { height: 46px; }
[data-density="compact"] .wb-sidebar #mainNav > li > a.nav-link { padding: 5px 9px !important; }
[data-density="compact"] .wb-sidebar .dropdown-item { padding-top: 4px !important; padding-bottom: 4px !important; }

/* 窄屏（<992px）：侧栏浮层抽屉 + 遮罩 */
@media (max-width: 991.98px) {
  .wb-app { display: block; }
  .wb-sidebar {
    --wb-sb-w: min(86vw, 320px);
    position: fixed; top: 0; left: 0; bottom: 0;
    flex: none; height: 100vh; width: var(--wb-sb-w);
    transform: translateX(-106%);
    box-shadow: none;
  }
  .wb-sidebar.open { transform: translateX(0); box-shadow: 0 0 42px rgba(0, 0, 0, .35); }
  body.wb-sb-lock { overflow: hidden; }
  body.wb-sb-lock .wb-backdrop { display: block; }
  .wb-backdrop {
    position: fixed; inset: 0; z-index: 1044;
    background: rgba(15, 23, 42, .5);
  }
  .wb-topbar-brand { display: inline-flex; }
}
/* 桌面隐藏关闭按钮 */
@media (min-width: 992px) {
  .wb-sidebar-close { display: none; }
}

/* 打印：侧栏/顶栏/遮罩不参与 A4 输出 */
@media print {
  .wb-sidebar, .wb-topbar, .wb-backdrop { display: none !important; }
  .wb-app { display: block; }
  .wb-main { display: block; }
}

/* ============================================================================
   22. 全局一致性覆盖（解决视觉审计中的「四不像」：侧栏/表格/按钮/tab/输入框/badge/标题）
   说明：
   - 优先级最高，大量 !important 用于覆盖子模板内联 <style> 和页面硬编码 style=""
   - 统一用 Design Token，不再允许 Bootstrap 默认色或 light-token 残留在 dark 主题
   ============================================================================ */

/* 22.1 侧栏激活态 —— 「品牌蓝底 + 白字 + 白色左条」，醒目不跳色
   覆盖模板可能残留的白底/浅字定义，确保深色侧栏内 active 100% 可读 */
.wb-sidebar #mainNav > li > a.nav-link.active,
.wb-sidebar #mainNav > li.open > .dropdown-menu > li > a.dropdown-item.active,
.wb-sidebar #mainNav > li.dropdown.open > a.nav-link.active {
  background: var(--wb-brand) !important;
  color: #fff !important;
  box-shadow: inset 3px 0 0 rgba(255,255,255,.95), 0 2px 10px rgba(37,99,235,.35) !important;
  border-radius: var(--wb-r-ctrl) !important;
  font-weight: 600 !important;
}
.wb-sidebar #mainNav > li > a.nav-link.active i.bi,
.wb-sidebar #mainNav > li.open > .dropdown-menu > li > a.dropdown-item.active i.bi,
.wb-sidebar #mainNav > li > a.nav-link.active .menu-icon {
  color: #fff !important;
  opacity: 1 !important;
}
/* R12+：父级 open 态不再加 10% 白叠加（老板反馈"系统管理展开后整组像高亮蒙版，跟其他分组不统一"）。
   R12 子菜单视觉差异已经建立（缩进 22px / 字号 .82rem / 字色 .72 / 图标 .65），
   展开提示靠三个信号即可：① 父级字色 #fff ② chevron 旋转 90° ③ 子菜单静态展开可见。
   跟"非 open 收起态"分组背景完全一致（都是透明），整组跟其他分组视觉权重统一。 */
.wb-sidebar #mainNav > li.dropdown.open > a.nav-link {
  color: #fff !important;
}
/* R9-方案A：active 行即使 hover/focus 也保持品牌蓝，不被 hover 白显覆盖 */
.wb-sidebar #mainNav > li > a.nav-link.active:hover,
.wb-sidebar #mainNav > li > a.nav-link.active:focus,
.wb-sidebar #mainNav > li.open > .dropdown-menu > li > a.dropdown-item.active:hover,
.wb-sidebar #mainNav > li.open > .dropdown-menu > li > a.dropdown-item.active:focus,
.wb-sidebar #mainNav > li.dropdown.open > a.nav-link.active:hover,
.wb-sidebar #mainNav > li.dropdown.open > a.nav-link.active:focus {
  background: var(--wb-brand) !important;
  color: #fff !important;
  box-shadow: inset 3px 0 0 rgba(255,255,255,.95), 0 2px 10px rgba(37,99,235,.35) !important;
}

/* 22.2 侧栏图标统一视觉重量 */
.wb-sidebar .nav-link i.bi,
.wb-sidebar .nav-link .menu-icon {
  width: 1.25em !important;
  text-align: center !important;
  display: inline-block !important;
  font-size: 1.05em !important;
  margin-right: .65em !important;
  opacity: .8 !important;
  vertical-align: -.15em !important;
}

/* 22.3 表格 —— 强制统一表头/行高/padding，消灭 #F0F3F8 浅灰/408px 巨行 */
.table > thead > tr > th,
.table > thead > tr > th *,
.table > thead > tr,
.table thead th,
.thead-dark th,
.thead-light th,
table thead th,
.table-dark thead th {
  background: var(--wb-bg-subtle) !important;
  color: var(--wb-text-2) !important;
  border-bottom: 1px solid var(--wb-border) !important;
  font-size: var(--wb-font-th) !important;
  font-weight: 500 !important;
  padding: 10px 12px !important;
  vertical-align: middle !important;
  white-space: nowrap !important;
}
.table > tbody > tr > td,
.table tbody td,
table tbody td {
  border-bottom: 1px solid var(--wb-border) !important;
  vertical-align: middle !important;
  padding: 10px 12px !important;
  color: var(--wb-text-1) !important;
}
.table > tbody > tr:hover > td,
.table tbody tr:hover td,
.table-hover > tbody > tr:hover > * {
  background: var(--wb-bg-subtle) !important;
}
.table-striped > tbody > tr:nth-of-type(odd) > td {
  background: color-mix(in srgb, var(--wb-bg-subtle) 55%, transparent) !important;
}

/* 限制表格内常见元素不要撑爆行高（订单管理落地配的大图/日历） */
.table > tbody > tr > td img,
.table > tbody > tr > td .img-thumbnail,
.table > tbody > tr > td .rounded,
.table > tbody > tr > td .avatar,
.table > tbody > tr > td .product-thumb {
  max-height: 44px !important;
  width: auto !important;
  object-fit: cover !important;
  border-radius: 4px !important;
}
.table > tbody > tr > td .form-control,
.table > tbody > tr > td .form-select,
.table > tbody > tr > td .btn {
  padding: .3rem .5rem !important;
  font-size: .875rem !important;
  line-height: 1.4 !important;
  min-height: 32px !important;
}
.table > tbody > tr > td .btn-group .btn {
  padding: .25rem .45rem !important;
}

/* 22.4 按钮统一 —— 主按钮渐变，次按钮透明描边 */
.btn-primary {
  background: var(--wb-gradient) !important;
  border: none !important;
  color: #FFFFFF !important;
}
.btn-primary:hover {
  filter: brightness(1.08);
  box-shadow: var(--wb-shadow-brand) !important;
}
.btn-secondary,
.btn-outline-secondary,
.btn-default {
  background: transparent !important;
  border: 1px solid var(--wb-border-strong) !important;
  color: var(--wb-text-2) !important;
}
.btn-secondary:hover,
.btn-outline-secondary:hover,
.btn-default:hover {
  background: var(--wb-bg-subtle) !important;
  border-color: var(--wb-border-strong) !important;
  color: var(--wb-text-1) !important;
}
.btn-success, .btn-danger, .btn-warning, .btn-info {
  border: none !important;
}

/* 22.5 输入框/下拉/选择器统一 */
.form-control, .form-select, .form-control-sm, .form-select-sm,
input[type="text"], input[type="number"], input[type="date"], input[type="datetime-local"], input[type="email"], input[type="tel"], input[type="search"], select, textarea {
  background: var(--wb-bg-surface) !important;
  border: 1px solid var(--wb-border-strong) !important;
  color: var(--wb-text-1) !important;
  border-radius: var(--wb-r-ctrl) !important;
}
.form-control:focus, .form-select:focus,
input:focus, select:focus, textarea:focus {
  background: var(--wb-bg-surface) !important;
  border-color: var(--wb-brand) !important;
  box-shadow: 0 0 0 0.15rem color-mix(in srgb, var(--wb-brand) 25%, transparent) !important;
  color: var(--wb-text-1) !important;
}
.form-control::placeholder, .form-select::placeholder,
input::placeholder, textarea::placeholder {
  color: var(--wb-text-3) !important;
}
.form-control:disabled, .form-select:disabled,
input:disabled, select:disabled, textarea:disabled {
  background: var(--wb-bg-subtle) !important;
  color: var(--wb-text-3) !important;
}

/* 22.6 Tab / 快捷标签页 / 面包屑式工具栏统一 */
.nav-pills .nav-link,
.nav-tabs .nav-link,
.page-tabs .nav-link, .page-tabs a,
.quick-tabs .nav-link, .quick-tabs a,
.filter-tabs .nav-link, .filter-tabs a {
  border-radius: var(--wb-r-ctrl) !important;
  padding: .45rem .85rem !important;
  font-size: .9rem !important;
  color: var(--wb-text-2) !important;
  background: transparent !important;
  border: 1px solid transparent !important;
  margin-right: .25rem !important;
}
.nav-pills .nav-link:hover,
.nav-tabs .nav-link:hover,
.page-tabs .nav-link:hover, .page-tabs a:hover,
.quick-tabs .nav-link:hover, .quick-tabs a:hover,
.filter-tabs .nav-link:hover, .filter-tabs a:hover {
  color: var(--wb-text-1) !important;
  background: var(--wb-bg-subtle) !important;
  border-color: var(--wb-border) !important;
}
.nav-pills .nav-link.active,
.nav-tabs .nav-link.active,
.page-tabs .nav-link.active, .page-tabs a.active,
.quick-tabs .nav-link.active, .quick-tabs a.active,
.filter-tabs .nav-link.active, .filter-tabs a.active {
  background: var(--wb-brand-subtle) !important;
  border-color: var(--wb-brand) !important;
  color: var(--wb-brand) !important;
  font-weight: 500 !important;
}

/* 22.7 Badge / 状态标签统一（柔和底 + 彩色字，消灭 Bootstrap 默认实心色） */
.badge, .text-bg-success, .text-bg-danger, .text-bg-warning, .text-bg-info,
.text-bg-primary, .text-bg-secondary {
  border-radius: var(--wb-r-badge) !important;
  font-weight: 500 !important;
  font-size: .78rem !important;
  padding: .28em .65em !important;
  letter-spacing: .01em;
}
.bg-success, .text-bg-success { background: color-mix(in srgb, var(--wb-success) 16%, transparent) !important; color: var(--wb-success) !important; }
.bg-danger, .text-bg-danger   { background: color-mix(in srgb, var(--wb-danger) 16%, transparent) !important; color: var(--wb-danger) !important; }
.bg-warning, .text-bg-warning { background: color-mix(in srgb, var(--wb-warning) 16%, transparent) !important; color: var(--wb-warning) !important; }
.bg-info, .text-bg-info       { background: color-mix(in srgb, var(--wb-info) 16%, transparent) !important; color: var(--wb-info) !important; }
.bg-primary, .text-bg-primary { background: color-mix(in srgb, var(--wb-brand) 16%, transparent) !important; color: var(--wb-brand) !important; }
.bg-secondary, .text-bg-secondary { background: var(--wb-bg-subtle) !important; color: var(--wb-text-2) !important; }

/* 业务状态色（--wb-st-*）映射为柔和标签 */
.badge-st-pending, .status-pending { background: color-mix(in srgb, var(--wb-st-pending) 16%, transparent) !important; color: var(--wb-st-pending) !important; }
.badge-st-running, .status-running { background: color-mix(in srgb, var(--wb-st-running) 16%, transparent) !important; color: var(--wb-st-running) !important; }
.badge-st-done,    .status-done    { background: color-mix(in srgb, var(--wb-st-done) 16%, transparent) !important; color: var(--wb-st-done) !important; }
.badge-st-error,   .status-error   { background: color-mix(in srgb, var(--wb-st-error) 16%, transparent) !important; color: var(--wb-st-error) !important; }
.badge-st-cancel,  .status-cancel  { background: color-mix(in srgb, var(--wb-st-cancel) 16%, transparent) !important; color: var(--wb-st-cancel) !important; }

/* 22.8 标题颜色统一（覆盖子模板/内联硬编码的 #0F172A/#1E293B） */
.container h1, .container h2, .container h3, .container h4, .container h5, .container h6,
.container-fluid h1, .container-fluid h2, .container-fluid h3, .container-fluid h4, .container-fluid h5, .container-fluid h6,
.card h1, .card h2, .card h3, .card h4, .card h5, .card h6,
.page-title, .ops-page-title, .section-title, .panel-title,
.modal-title, .offcanvas-title, .popover-header {
  color: var(--wb-text-1) !important;
}
.text-muted, .text-secondary, .text-body-secondary {
  color: var(--wb-text-2) !important;
}

/* 22.9 分页器统一 */
.pagination .page-link,
.page-link {
  background: var(--wb-bg-surface) !important;
  border-color: var(--wb-border) !important;
  color: var(--wb-text-2) !important;
}
.pagination .page-item.active .page-link,
.page-item.active .page-link {
  background: var(--wb-brand) !important;
  border-color: var(--wb-brand) !important;
  color: #FFFFFF !important;
}
.pagination .page-link:hover {
  background: var(--wb-bg-subtle) !important;
  color: var(--wb-text-1) !important;
}

/* 22.10 模态框/下拉/浮层统一 */
.modal-content, .dropdown-menu, .popover, .toast {
  background: var(--wb-bg-surface) !important;
  border: 1px solid var(--wb-border) !important;
  color: var(--wb-text-1) !important;
  box-shadow: var(--wb-shadow-2) !important;
}
.dropdown-item {
  color: var(--wb-text-1) !important;
}
.dropdown-item:hover, .dropdown-item:focus {
  background: var(--wb-bg-subtle) !important;
  color: var(--wb-brand) !important;
}
.dropdown-divider { border-color: var(--wb-border) !important; }

/* 22.11 alert / 提示条统一 */
.alert {
  background: var(--wb-bg-subtle) !important;
  border-color: var(--wb-border) !important;
  color: var(--wb-text-1) !important;
}
.alert-success { border-left: 3px solid var(--wb-success) !important; }
.alert-danger  { border-left: 3px solid var(--wb-danger) !important; }
.alert-warning { border-left: 3px solid var(--wb-warning) !important; }
.alert-info    { border-left: 3px solid var(--wb-info) !important; }

/* ============================================================================
   23. 全站浅色系统一（P3 最终收敛）
   说明：
   - 自 2026-09-02 起，全站固定浅色主题；深色/浅色切换按钮隐藏。
   - 覆盖首页、生产看板、销售汇总等模板里残留的深色硬编码，使深色孤岛
     与订单管理/财务/报表等管理页保持同一套浅色语言。
   - 只改颜色/背景，不动布局、数据、权限、金额逻辑。
   ============================================================================ */

/* 23.1 隐藏主题切换按钮（全站固定浅色，避免用户切回深色后又出现四不像） */
#wbThemeToggle { display: none !important; }

/* 23.2 页面底与主容器强制浅色 */
body,
html body,
.wb-app,
.wb-main,
.wb-content,
.bigscreen,
.container,
.container-fluid {
  background: var(--wb-bg-app) !important;
  background-image: none !important;
  color: var(--wb-text-1) !important;
}

/* 23.3 卡片/面板/浮层强制浅色表面 */
.card,
.card-header,
.card-body,
.stat-card,
.metric-card,
.dashboard-card,
.filter-card,
.bt-compare-card,
.overview-table,
.tech-panel,
.stat-tech-card,
.bs-kpi-card,
.bs-panel,
.sp-panel,
.sp-kpi-card,
.so-card,
.in-save-bar,
.ss-panel,
.combo-list {
  background: var(--wb-bg-surface) !important;
  color: var(--wb-text-1) !important;
}

/* 23.4 覆盖 inline style / 模板硬编码里的深色背景（首页、看板、汇总页） */
[style*="background: #0f172a"],
[style*="background:#0f172a"],
[style*="background-color: #0f172a"],
[style*="background-color:#0f172a"],
[style*="background: #1e293b"],
[style*="background:#1e293b"],
[style*="background-color: #1e293b"],
[style*="background-color:#1e293b"],
[style*="background: linear-gradient(135deg, #0a0e27"],
[style*="background:linear-gradient(135deg,#0a0e27"],
[style*="background: linear-gradient(135deg, #1e293b"] {
  background: var(--wb-bg-surface) !important;
  background-image: none !important;
  color: var(--wb-text-1) !important;
}

/* 23.5 生产看板科技风转浅色：文字、表格、卡片 */
.tech-glow-title { color: var(--wb-brand) !important; text-shadow: none !important; }
.tech-subtitle,
.stat-tech-card .stat-label,
.tech-note { color: var(--wb-text-3) !important; }
.tech-no,
.tech-no:hover,
.btn-tech,
.tech-qty,
.tech-qty-input,
.tech-region { color: var(--wb-brand) !important; }
.tech-qty-input { background: color-mix(in srgb, var(--wb-brand) 8%, var(--wb-bg-surface)) !important; border-color: color-mix(in srgb, var(--wb-brand) 35%, var(--wb-border)) !important; }
.tech-qty-input:hover { background: color-mix(in srgb, var(--wb-brand) 12%, var(--wb-bg-surface)) !important; }
.tech-qty-input:focus { background: color-mix(in srgb, var(--wb-brand) 16%, var(--wb-bg-surface)) !important; box-shadow: 0 0 12px color-mix(in srgb, var(--wb-brand) 30%, transparent) !important; }
.tech-qty-input.qty-err { border-color: var(--wb-danger) !important; color: var(--wb-danger) !important; }
.tech-date,
.tech-product,
.tech-truck,
.tech-truck .type { color: var(--wb-warning) !important; }
.tech-order-note { color: var(--wb-text-2) !important; }
.tech-img { background: var(--wb-bg-subtle) !important; border-color: var(--wb-border) !important; }

.tech-panel {
  background: var(--wb-bg-surface) !important;
  color: var(--wb-text-1) !important;
  border: 1px solid var(--wb-border) !important;
}
.stat-tech-card {
  background: var(--wb-bg-surface) !important;
  border: 1px solid var(--wb-border) !important;
}
.stat-tech-card:hover { border-color: var(--wb-brand) !important; box-shadow: var(--wb-shadow-brand) !important; }

.tech-table { color: var(--wb-text-1) !important; }
.tech-table thead th {
  background: var(--wb-bg-subtle) !important;
  color: var(--wb-text-2) !important;
  border-color: var(--wb-border) !important;
}
.tech-table tbody td {
  border-color: var(--wb-border) !important;
  color: var(--wb-text-1) !important;
}
.tech-table tbody td.order-info {
  background: color-mix(in srgb, var(--wb-brand) 5%, var(--wb-bg-surface)) !important;
  border-right: 1px dashed var(--wb-border) !important;
}
.tech-table .order-start td { border-top-color: var(--wb-border-strong) !important; }
.tech-table .order-cont td { border-top-color: var(--wb-border) !important; }
.tech-table tbody tr:hover td { background: var(--wb-bg-subtle) !important; }

/* 看板下拉框转浅色 */
.progress-select,
.shoot-select {
  background: var(--wb-bg-surface) !important;
  border-color: var(--wb-border-strong) !important;
  color: var(--wb-text-1) !important;
  color-scheme: light !important;
}
.progress-select option,
.shoot-select option { background: var(--wb-bg-surface) !important; color: var(--wb-text-1) !important; }
.progress-select.待生产,
.shoot-select.shoot-pend,
.progress-glow.待生产 { background: color-mix(in srgb, var(--wb-st-pending) 12%, var(--wb-bg-surface)) !important; color: var(--wb-st-pending) !important; border-color: color-mix(in srgb, var(--wb-st-pending) 45%, var(--wb-border)) !important; }
.progress-select.已完成,
.shoot-select.shoot-done,
.progress-glow.已完成 { background: color-mix(in srgb, var(--wb-st-done) 12%, var(--wb-bg-surface)) !important; color: var(--wb-st-done) !important; border-color: color-mix(in srgb, var(--wb-st-done) 45%, var(--wb-border)) !important; }
.progress-select.已装车,
.progress-glow.已装车 { background: color-mix(in srgb, var(--wb-st-pending) 12%, var(--wb-bg-surface)) !important; color: var(--wb-st-pending) !important; border-color: color-mix(in srgb, var(--wb-st-pending) 45%, var(--wb-border)) !important; }
.progress-select.运输中,
.progress-glow.运输中 { background: color-mix(in srgb, var(--wb-st-running) 12%, var(--wb-bg-surface)) !important; color: var(--wb-st-running) !important; border-color: color-mix(in srgb, var(--wb-st-running) 45%, var(--wb-border)) !important; }
.progress-select.已送达,
.progress-glow.已送达 { background: color-mix(in srgb, var(--wb-st-done) 12%, var(--wb-bg-surface)) !important; color: var(--wb-st-done) !important; border-color: color-mix(in srgb, var(--wb-st-done) 45%, var(--wb-border)) !important; }

/* 看板分页栏转浅色 */
.kb-pager {
  background: var(--wb-bg-surface) !important;
  border-color: var(--wb-border) !important;
}
.kb-pager-info { color: var(--wb-text-3) !important; }
.kb-pager-info b { color: var(--wb-text-1) !important; }
.kb-page-btn {
  background: var(--wb-bg-surface) !important;
  border-color: var(--wb-border) !important;
  color: var(--wb-text-2) !important;
}
.kb-page-btn:hover:not(.disabled):not(.active) {
  background: var(--wb-bg-subtle) !important;
  color: var(--wb-text-1) !important;
}
.kb-page-btn.active {
  background: var(--wb-brand) !important;
  border-color: var(--wb-brand) !important;
  color: #FFFFFF !important;
}

/* 23.6 首页 dashboard 转浅色 */
.bs-kpi-label { color: var(--wb-text-3) !important; }
.bs-kpi-value { color: var(--wb-text-1) !important; text-shadow: none !important; }
.kpi-orders .bs-kpi-value { color: var(--wb-brand) !important; }
.kpi-qty .bs-kpi-value { color: var(--wb-warning) !important; }
.kpi-amount .bs-kpi-value { color: var(--wb-danger) !important; }
.bs-kpi-card { background: var(--wb-bg-surface) !important; border-color: var(--wb-border) !important; }
.bs-kpi-card::before { background: var(--wb-gradient) !important; }
@keyframes kpiPulse { 0%,100% { box-shadow: 0 0 0 transparent; } 50% { box-shadow: 0 0 16px color-mix(in srgb, var(--wb-brand) 25%, transparent); } }
.range-btn { color: var(--wb-text-2) !important; border-color: var(--wb-border) !important; background: var(--wb-bg-surface) !important; }
.range-btn:hover { color: var(--wb-text-1) !important; background: var(--wb-bg-subtle) !important; }
.range-btn.active { color: #FFFFFF !important; background: var(--wb-gradient) !important; border-color: var(--wb-brand) !important; }
.range-btn.apply { color: #FFFFFF !important; background: var(--wb-warning) !important; border-color: var(--wb-warning) !important; }
.custom-dates input,
.bs-dim-sel {
  background: var(--wb-bg-surface) !important;
  border-color: var(--wb-border-strong) !important;
  color: var(--wb-text-1) !important;
  color-scheme: light !important;
}
.bs-dim-sel option { background: var(--wb-bg-surface) !important; color: var(--wb-text-1) !important; }
.bs-panel-header,
.bs-title,
.sp-panel-header { color: var(--wb-text-2) !important; }
.bs-panel::after,
.bs-kpi-card::before { background: var(--wb-gradient) !important; opacity: 0.7 !important; }
.bs-panel { border-color: var(--wb-border) !important; }
.sp-kpi-label { color: var(--wb-text-3) !important; }
.sp-kpi-value { color: var(--wb-text-1) !important; }
.sp-kpi-value.red { color: var(--wb-danger) !important; }
.sp-table { color: var(--wb-text-1) !important; }
.sp-table th { color: var(--wb-text-2) !important; border-color: var(--wb-border) !important; }
.sp-table td { color: var(--wb-text-1) !important; border-color: var(--wb-border) !important; }
.sp-cust { color: var(--wb-text-1) !important; border-color: var(--wb-border) !important; }
.sp-cust .amt { color: var(--wb-warning) !important; }
.sp-cust .pf { color: var(--wb-danger) !important; }
.rank-name { color: var(--wb-text-2) !important; }
.rank-val { color: var(--wb-text-1) !important; }
.pend-no { color: var(--wb-brand) !important; }
.pend-spec { color: var(--wb-warning) !important; }
.pend-qty { color: var(--wb-success) !important; }
.pend-date { color: var(--wb-text-3) !important; }

/* 23.7 销售汇总页深色表头覆盖 */
.summary-table thead th {
  background: var(--wb-bg-subtle) !important;
  color: var(--wb-text-2) !important;
  border-color: var(--wb-border) !important;
}
.summary-table tbody td { color: var(--wb-text-1) !important; border-color: var(--wb-border) !important; }

/* 23.8 表格行高压制：防止图片/日历/多行内容撑出巨行 */
.table > tbody > tr > td {
  max-height: 120px !important;
  overflow: hidden !important;
}
.table > tbody > tr > td img,
.table > tbody > tr > td .img-thumbnail,
.table > tbody > tr > td .rounded,
.table > tbody > tr > td .avatar,
.table > tbody > tr > td .product-thumb,
.table > tbody > tr > td .tech-img {
  max-height: 36px !important;
  max-width: 60px !important;
}

/* 23.9 生产看板内部科技风组件转浅色（背景统一 + 低对比文字改可读深色，保留状态语义色） */
/* —— 进度/拍摄切换下拉：基础态转浅色，箭头改灰 —— */
.progress-select, .shoot-select {
  background: var(--wb-bg-surface) !important;
  color: var(--wb-text-1) !important;
  border: 1px solid var(--wb-border) !important;
  background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='12' height='12' fill='%2364748b' viewBox='0 0 16 16'%3E%3Cpath d='M1.646 4.646a.5.5 0 0 1 .708 0L8 10.293l5.646-5.647a.5.5 0 0 1 .708.708l-6 6a.5.5 0 0 1-.708 0l-6-6a.5.5 0 0 1 0-.708z'/%3E%3C/svg%3E") !important;
}
.progress-select:hover, .progress-select:focus,
.shoot-select:hover, .shoot-select:focus {
  border-color: var(--wb-brand) !important;
  box-shadow: 0 0 0 3px color-mix(in srgb, var(--wb-brand) 18%, transparent) !important;
  outline: none !important;
}
.progress-select option, .shoot-select option {
  background: var(--wb-bg-surface) !important;
  color: var(--wb-text-1) !important;
}
/* 状态语义色：深色可读变体（保留 绿/灰/橙/蓝 语义） */
.progress-select.已完成, .shoot-select.shoot-done, .progress-glow.已完成,
.progress-select.已送达, .progress-glow.已送达 {
  background: rgba(16,185,129,0.12) !important; color: #059669 !important; border-color: rgba(16,185,129,0.5) !important;
}
.progress-select.待生产, .shoot-select.shoot-pend, .progress-glow.待生产 {
  background: rgba(100,116,139,0.12) !important; color: #475569 !important; border-color: rgba(100,116,139,0.45) !important;
}
.progress-select.已装车, .progress-glow.已装车 {
  background: rgba(245,158,11,0.14) !important; color: #d97706 !important; border-color: rgba(245,158,11,0.5) !important;
}
.progress-select.运输中, .progress-glow.运输中 {
  background: rgba(59,130,246,0.12) !important; color: #2563eb !important; border-color: rgba(59,130,246,0.5) !important;
}
.progress-glow {
  background: var(--wb-bg-subtle) !important; color: var(--wb-text-2) !important; border: 1px solid var(--wb-border) !important;
}
/* —— 素材拍摄筛选器(.ss-*) 深色控件转浅色 —— */
.ss-select, .ss-date, .ss-product-filter .ss-input, .ss-product-filter .ss-list {
  background: var(--wb-bg-surface) !important; color: var(--wb-text-1) !important; border-color: var(--wb-border) !important;
}
.ss-select:focus, .ss-date:focus, .ss-product-filter .ss-input:focus {
  border-color: var(--wb-brand) !important; box-shadow: 0 0 0 2px color-mix(in srgb, var(--wb-brand) 22%, transparent) !important;
}
.ss-time-filter .ss-icon, .ss-product-filter .ss-icon { color: var(--wb-brand) !important; }
.filter-time-note b { color: var(--wb-brand) !important; }
.ss-product-filter .ss-option { color: var(--wb-text-1) !important; }
.ss-product-filter .ss-option:hover { background: var(--wb-bg-subtle) !important; color: var(--wb-text-1) !important; }
.ss-product-filter .ss-clear { color: var(--wb-text-2) !important; }
/* —— 科技按钮 / 统计卡数字 / 汇总强调色 —— */
.btn-tech {
  color: var(--wb-brand) !important; border-color: color-mix(in srgb, var(--wb-brand) 45%, var(--wb-border)) !important;
  background: color-mix(in srgb, var(--wb-brand) 8%, var(--wb-bg-surface)) !important;
}
.btn-tech:hover { color: #1d4ed8 !important; background: color-mix(in srgb, var(--wb-brand) 16%, var(--wb-bg-surface)) !important; box-shadow: 0 0 12px color-mix(in srgb, var(--wb-brand) 22%, transparent) !important; }
.btn-tech.active { color: #1d4ed8 !important; border-color: var(--wb-brand) !important; background: color-mix(in srgb, var(--wb-brand) 22%, var(--wb-bg-surface)) !important; }
.stat-tech-card .stat-value { color: var(--wb-text-1) !important; }
.stat-tech-card .stat-icon { color: var(--wb-brand) !important; }
.filter-bar .filter-summary b { color: var(--wb-warning) !important; }

/* 23.10 全站残留「浅色文字写在浅底上」转可读（兼容模板 <style> 块 / 内联 style，均 !important 覆盖） */
/* 无图占位文字：原 #cbd5e1 落在 #f8fafc 近白底几乎不可见 → 改设计系统弱色 */
.img-none { color: var(--wb-text-3) !important; }
/* 筛选卡禁用输入：原 color:#cbd5e1 落在 #f1f5f9 浅底 → 改可读弱色，保留浅底禁用感 */
.filter-card .form-control-sm:disabled,
.filter-card .form-select-sm:disabled {
  background: #f1f5f9 !important;
  color: var(--wb-text-3) !important;
}
/* 组合框下拉箭头 ▼：原 #cbd5e1 落在输入框浅底 → 改可读弱色 */
.combo::after { color: var(--wb-text-3) !important; }
/* 空状态图标：原内联 color:#cbd5e1 落在浅底几乎不可见 → 改可读弱色（保留弱化语义） */
td.text-muted.py-5 > div { color: var(--wb-text-3) !important; }

/* 23.11 可读性二次强化（统一预警/次要文字对比，消除 ratio<3.0 隐患） */
/* Bootstrap .btn-outline-warning 默认文字=边框 #ffc107 落在浅底几乎不可见 → 改深琥珀文字 */
.btn-outline-warning { color: #9a6700 !important; border-color: #f59e0b !important; }
.btn-outline-warning:hover,
.btn-outline-warning:focus { background: #fef3c7 !important; color: #7c4a00 !important; border-color: #f59e0b !important; }
.btn-outline-warning:disabled { color: var(--wb-text-3) !important; border-color: var(--wb-border) !important; }
/* 浅底徽章文字提亮：success-subtle 文字原用主色绿(#16a34a)落浅绿底仅 2.5 对比 → 改深绿 */
.badge.bg-success-subtle, .text-bg-success { color: #14532d !important; }
/* 结算页「0付清」等付款状态徽章用 .badge-pay 而非 .badge，需单独提亮文字 */
.badge-pay.bg-success-subtle { background: #d1e7dd !important; color: #14532d !important; }
/* 浅底徽章文字提亮（续）：bg-xxx 与 text-bg-xxx 在 16% 浅色底上用主色字仅约 3.0 对比
   （绿底实测 2.96 未达 AA）→ 改用深色 emphasis，统一达 AA 正常文本 4.5:1，兼顾「明显一点」 */
.badge.bg-success, .text-bg-success, .bg-success { color: #14532d !important; }
.badge.bg-info, .text-bg-info, .bg-info { color: #055160 !important; }
.badge.bg-primary, .text-bg-primary, .bg-primary { color: #1e3a8a !important; }
.badge.bg-warning, .text-bg-warning, .bg-warning { color: #7c4a00 !important; }
.badge.bg-danger, .text-bg-danger, .bg-danger { color: #842029 !important; }

/* 23.12 销售模式标示（迁移 theme-clean.css 的 .mode-tag 体系——P1 换肤后丢失致「只有文字不明显」；
   恢复三色徽章 + 模板侧补图标，一眼分清买断/代卖/合作；浅底深字 AA≥4.5） */
.mode-tag {
  display: inline-block;
  padding: 2px 8px;
  border-radius: 6px;
  font-size: .72rem;
  font-weight: 600;
  line-height: 1.4;
  margin-left: 6px;
  letter-spacing: .02em;
  white-space: nowrap;
  vertical-align: middle;
}
.mode-tag i { margin-right: 3px; font-size: .9em; }
.mode-tag.mode-tag-above { margin: 0 0 5px 0; }
/* 买断=蓝（独赚差价）、代卖=紫（抽佣金）、合作=绿（利润池分红） */
.mode-buyout  { background: #DBEAFE; color: #1D4ED8; }
.mode-consign { background: #EDE9FE; color: #6D28D9; }
.mode-coop    { background: #D1FAE5; color: #047857; }
/* 车辆调度左侧贯穿色条 */
td.mode-bar-buyout  { border-left: 4px solid #2563EB !important; }
td.mode-bar-consign { border-left: 4px solid #7C3AED !important; }
td.mode-bar-coop    { border-left: 4px solid #059669 !important; }

/* ============================================================================
   24. 大屏全屏模式（body.fs-active / body.fs-pseudo）
   ----------------------------------------------------------------------------
   2026-09-03 修复：base.html 改版为「侧栏 .wb-sidebar + 顶栏 .wb-topbar」后，
   页面里已不存在 nav.navbar，而 index.html / kanban.html 里的旧规则
   `body.fs-hidden nav.navbar { display:none }` 选择器失效 → 全屏后导航照常显示。
   这里在主题层统一给出规则，配合 static/js/wb-fullscreen.js 使用，
   任何页面调用 WBFullscreen 都能真正"隐藏导航 + 铺满屏幕"。
   ============================================================================ */

/* 24.1 隐藏全局导航（侧栏 / 顶栏 / 遮罩 / 备案 footer / AI 悬浮助手）
   旧选择器 nav.navbar 一并保留，兼容历史模板残留 */
body.fs-active .wb-sidebar,
body.fs-active .wb-topbar,
body.fs-active .wb-backdrop,
body.fs-active #icpFooter,
body.fs-active nav.navbar {
  display: none !important;
}
body.fs-active #aiFloatBtn,
body.fs-active #aiFloatPanel { display: none !important; }

/* 24.2 内容区铺满：主区独占、去掉容器内边距 */
body.fs-active { overflow: hidden; }
body.fs-active .wb-app,
body.fs-active .wb-main { display: block !important; }
body.fs-active #pageRoot {
  height: 100vh;
  overflow: auto;
  background: var(--wb-bg-app);
}
body.fs-active #pageRoot > .container,
body.fs-active #pageRoot > .container-fluid {
  max-width: 100% !important;
  width: 100% !important;
  padding: 0 !important;
  margin: 0 !important;
}

/* 24.3 伪全屏（原生 Fullscreen API 不可用/被拒时的降级）：#pageRoot 固定铺满视口 */
body.fs-pseudo #pageRoot {
  position: fixed !important;
  inset: 0 !important;
  z-index: 1040 !important;
  background: var(--wb-bg-app) !important;
  overflow: auto !important;
}
