/* ============================================================================
   SeAT 自定义主题层 —— 阶段 1：设计令牌 + 中文排版地基
   ----------------------------------------------------------------------------
   加载顺序（最后一层，必须晚于 custom-layout.css）：
     seat.css -> skins/<skin>.css -> custom-layout.css -> custom-theme.css(<== 本文件)
   阶段 1：① 设计令牌(§3) ② 中文字体栈与排版基线(§5)
   阶段 2：③ 组件层(§4 清单第 1/3/4/5/6/7/8/9/10/12 项 + 侧边栏纯 CSS 细节)
   段2 实测依据与取舍见 /home/shirai/seat/tmp/ui-stage2-2026-09-20.md
   回滚：把 public/custom-theme.css 改名或删除即可（app.blade.php 里是 file_exists 判断）。
   方案出处：/home/shirai/seat/tmp/ui-design-plan-2026-09-20.md
   决策记录：保留插件深色面板（只修色不统一）/ 不做全站暗色 / 侧边栏 IA 不动 / Google Fonts 外链保留。
   ============================================================================ */

/* --- 3.1 色板（注释里是实测对比度）---------------------------------------- */
:root {
  /* 品牌主色（深空青） */
  --c-primary-900: #0b3a55;   /* 12.00:1 仅装饰 / 深底 */
  --c-primary-700: #17567a;   /*  7.93:1 链接文字、主按钮 hover */
  --c-primary-600: #1b6f9e;   /*  5.51:1 主按钮底色（白字达 AA） */
  --c-primary-500: #2b8cc4;   /*  3.72:1 仅边框 / 图标 / 大字 */
  --c-accent-400:  #4aa8dd;   /* 侧栏深底上 6.09:1 */

  /* 品牌辅助（丝路金，与登录页 #f2c66d 呼应） */
  --c-gold-400: #f2c66d;      /* 深空底 #16222e 上 10.04:1 */

  /* 语义色（均已配达标组合） */
  --c-success:     #1e7a45;   /* 白字 5.35:1 */
  --c-warning:     #f0b429;   /* 配深字 --c-warning-ink = 7.30:1（禁止白字） */
  --c-warning-ink: #3a2c05;
  --c-danger:      #c0392b;   /* 白字 5.44:1 */
  --c-info:        #1b6f9e;

  /* 中性阶 */
  --c-n-0:   #ffffff;
  --c-n-50:  #f6f8fb;   /* 画布 / 表头底 */
  --c-n-100: #eef2f7;   /* 斑马纹 */
  --c-n-200: #dbe3ec;   /* 描边 */
  --c-n-300: #c3cedb;   /* 强描边 */
  --c-n-400: #93a3b5;   /* 只做边框/分隔线，禁止做白底文字 */
  --c-n-500: #5b6b7c;   /* 5.47:1 次要文字 */
  --c-n-600: #4a5a6e;
  --c-n-700: #33414f;   /* 10.45:1 正文 */
  --c-n-800: #1f2a36;   /* 14.56:1 标题 */
  --c-n-900: #131a22;

  /* 深空面（侧栏等深色区域专用；同一色在白底上往往不达标） */
  --c-space-900: #0d1620;
  --c-space-800: #16222e;
  --c-space-700: #1e2c3a;
  --c-space-text:  #c3cedb;  /* on #16222e = 10.11:1 */
  --c-space-muted: #93a3b5;  /* on #16222e =  6.26:1（深底合法、白底非法） */
}

/* --- 3.2 语义化令牌（组件只引用这一层）------------------------------------ */
:root {
  --bg-canvas:  var(--c-n-50);
  --bg-surface: var(--c-n-0);
  --bg-subtle:  var(--c-n-100);
  --bg-header:  #eff3f8;
  --text-strong: var(--c-n-800);
  --text-body:   var(--c-n-700);
  --text-muted:  var(--c-n-500);   /* 替换白底上不达标的 #93a3b5 */
  --text-invert: #ffffff;
  --border-soft:   var(--c-n-200);
  --border-strong: var(--c-n-300);
  --focus-ring: 0 0 0 3px rgba(43, 140, 196, .45);
}

/* --- 3.3 字号阶梯与行高（中文基线）---------------------------------------- */
:root {
  --fs-2xs: 12px;  /* 徽章 / 脚注（原 9.8~11.2px 抬上来） */
  --fs-xs:  13px;  /* 表格辅助列 / 承载信息的硬性下限 */
  --fs-sm:  14px;  /* 正文基线 */
  --fs-md:  15px;  /* 表单 label / 长文 */
  --fs-lg:  16px;  /* 卡片标题 */
  --fs-xl:  18px;  /* 区块标题 */
  --fs-2xl: 22px;  /* 页面标题 h1 */
  --fs-3xl: 28px;  /* 仪表盘大数字 */
  --lh-tight: 1.35;
  --lh-base:  1.65;  /* 中文正文（原 1.5 偏紧） */
  --lh-loose: 1.8;
}

/* --- 3.4 间距 / 圆角 / 阴影 / 过渡 ---------------------------------------- */
:root {
  --sp-1: 4px;   --sp-2: 8px;   --sp-3: 12px;  --sp-4: 16px;
  --sp-5: 20px;  --sp-6: 24px;  --sp-8: 32px;  --sp-10: 40px;
  --r-xs: 4px;   --r-sm: 6px;   --r-md: 8px;   --r-lg: 12px;  --r-pill: 999px;
  --sh-1: 0 1px 2px rgba(19, 26, 34, .06);
  --sh-2: 0 2px 8px rgba(19, 26, 34, .08);
  --sh-3: 0 8px 24px rgba(19, 26, 34, .12);
  --sh-4: 0 18px 48px rgba(19, 26, 34, .20);
  --dur-fast: 120ms;  --dur-base: 180ms;  --dur-slow: 320ms;
  --ease: cubic-bezier(.22, .61, .36, 1);
}

/* --- 5.1 字体栈（拉丁品牌字体保留，中文走系统 CJK 回退）------------------- */
:root {
  --font-sans:
    "Source Sans Pro",                     /* 拉丁：保留现状（Google Fonts 外链不动） */
    system-ui, -apple-system, "Segoe UI",   /* 系统 UI 兜底（新增） */
    "PingFang SC",                          /* macOS / iOS（现状缺失） */
    "Hiragino Sans GB",                     /* 旧 macOS */
    "Microsoft YaHei UI", "Microsoft YaHei",/* Windows */
    "Noto Sans SC", "Source Han Sans SC",  /* Android / Linux */
    "WenQuanYi Micro Hei",
    "Droid Sans Fallback",
    sans-serif;
  --font-mono: "SFMono-Regular", Consolas, "Liberation Mono", Menlo, monospace;
}

html, body { font-family: var(--font-sans); }
body {
  font-size: var(--fs-sm);
  line-height: var(--lh-base);
  color: var(--text-body);
}

/* --- 5.2/5.3 中文排版细节 --------------------------------------------------- */
/* 中文不使用负字距；标题/卡片标题一律归零 */
body, p, li, td, th, .card-title, h1, h2, h3, h4, h5, h6 { letter-spacing: 0; }
h1, h2, h3, .card-title { font-style: normal; font-synthesis: none; }

/* 次要文字：AdminLTE 用 .text-muted{color:#adb5bd!important} 钉死（白底仅 2.58:1），
   这里必须同用 !important 才能覆盖（方案三级策略之③：框架自身用了 !important 时跟随一条）。 */
.text-muted, .help-block { color: var(--text-muted) !important; }
.text-muted { font-size: max(13px, 1em); }

/* 深色面板反向兜底：按用户决定保留插件深色风格（不统一为浅色），
   所以深底内的次要文字要换回深底合法色，避免深灰压在深底上。 */
.card-dark .text-muted, .card-dark small, .card-dark .help-block { color: var(--c-space-muted) !important; }

/* 长英文 / URL 不撑破容器；中文按词断行 */
td, .card-body, .alert, .modal-body { overflow-wrap: anywhere; word-break: normal; }
p, li, .card-body { word-break: keep-all; }

/* 数字列对齐（渐进，无该类名时不影响） */
.table td.num, .table th.num { font-variant-numeric: tabular-nums; text-align: right; }

/* 中西文自动间距 / 标点挤压：渐进增强，老浏览器自动降级 */
@supports (text-spacing-trim: space-all) { body { text-spacing-trim: space-first; } }
@supports (text-autospace: normal)      { body { text-autospace: normal; } }

/* 尊重减少动效（custom-layout.css 已有同类规则，这里保证令牌层也遵守） */
@media (prefers-reduced-motion: reduce) {
  :root { --dur-fast: 0ms; --dur-base: 0ms; --dur-slow: 0ms; }
}

/* ==========================================================================
   以下为阶段 2 追加内容
   ========================================================================== */

/* ============================================================================
   阶段 2：组件层（对应 §4 清单第 1/3/4/5/6/7/8/9/10/12 项 + 侧边栏纯 CSS 细节）
   ----------------------------------------------------------------------------
   选择器纪律（§6.2）：
     L2 组件层 = 单类/元素选择器，不加 !important（靠"最后加载"压过 custom-layout）
     L3 冲突层 = 「插件容器 + 组件」复合选择器；仅当框架/插件自身已用 !important
                时跟随一条（.text-muted / .bg-* / .btn-primary / .dataTables_* / corp-wallet .alert-*）
   已知取舍：粘性表头对 .table-responsive 与 DataTables scrollX 结构无效（滚动容器内
             sticky 不生效），此处显式回退为 static，避免表头透明压字。
   方案出处：/home/shirai/seat/tmp/ui-design-plan-2026-09-20.md
   ============================================================================ */

/* --- §4.1 顶栏 .main-header ------------------------------------------------ */
/* 现状：rgba(255,255,255,.96) + blur(12px)，与画布 #f4f7fb 对比弱 → 改实色面。
   custom-layout.css 已对同一属性用了 !important（第 96 行），此处跟随一条。 */
.main-header.navbar-dark {
  background: var(--bg-surface) !important;
  -webkit-backdrop-filter: none;
  backdrop-filter: none;
  box-shadow: var(--sh-1);
}
/* 触控目标：实测顶栏 .nav-link 46x31、.btn-navbar 31x38 → 提到 36px 高（§8 触控目标） */
.main-header .nav-link,
.main-header .btn-navbar {
  min-width: 36px;
  min-height: 36px;
  display: inline-flex;
  align-items: center;
  justify-content: center;
}
.main-header .navbar-nav .nav-link { padding-left: .45rem; padding-right: .45rem; }

@media (max-width: 767.98px) {
  /* custom-layout 在 <768px 直接 display:none 掉了全站搜索框（功能消失）。
     纯 CSS 无法做"图标按钮 + 展开"，这里退化为：保留搜索框、收窄为弹性宽度。 */
  .main-header .form-inline {
    display: flex;
    flex: 1 1 auto;
    max-width: 46vw;
    margin-left: .35rem !important;
  }
}

/* --- 全局文字色（§8 对比度硬指标：白底链接 3.87 → 7.93）------------------- */
/* 登录页/认证页走 app-mini 布局（深色画布，方案约定"登录页本轮不动"），
   这里显式排除 body.login-page，避免深底上的链接被压成深色。 */
/* 用 :where() 把本规则的特异性压回 (0,0,1)——否则 body:not(...) a 的 (0,1,2) 会压过
   Bootstrap 的 .btn-primary{color:#fff}(0,1,0)，把 <a class="btn btn-primary"> 变成
   深蓝字压深蓝底（实测 1.44:1）。:where() 本身不计特异性，兼容底线内（Chrome 88+/Safari 14+）。 */
:where(body:not(.login-page)) a { color: var(--c-primary-700); }
:where(body:not(.login-page)) a:hover { color: var(--c-primary-900); }
.breadcrumb-item,
.breadcrumb-item a { color: var(--text-muted); }
/* 页面标题副标题：实测 12.48px / #8796a5 on #f4f7fb = 2.82:1 */
.content-header h1 small {
  color: var(--text-muted);
  font-size: var(--fs-xs);
}
/* 顶栏当前项高亮：custom-layout 用 #4099ff 底 + 白字，仅作强调色保留 */

/* --- §4.3 卡片 / info-box -------------------------------------------------- */
.card,
.box { border-radius: var(--r-md); }
.card { margin-bottom: var(--sp-5); }
.card-title,
.box-title {
  font-size: var(--fs-lg);
  font-weight: 600;
  line-height: var(--lh-tight);
}
.card-title small,
.card-header small,
.card-subtitle { color: var(--text-muted); font-size: var(--fs-xs); font-weight: 400; }
.card-footer,
.box-footer { background: var(--bg-subtle); }
/* 深色面板内的卡片标题（P0-1）不在本阶段处理：用户已决定保留插件深色面板，留阶段 3 */
.info-box { min-height: 84px; }
/* 实测 .info-box-text = 14px / #8796a5 on 白 = 3.03:1 → 换 --text-muted(5.47) */
.info-box .info-box-text {
  color: var(--text-muted);
  font-size: var(--fs-xs);
  letter-spacing: 0;
}
.info-box .info-box-number { font-size: var(--fs-2xl); line-height: 1.25; }
/* 深色面板内的 info-box 反向兜底（实测 director 页 18.9:1 现状良好，不能压成深色） */
.card-dark .info-box .info-box-text,
.card-dark .info-box .info-box-number { color: var(--c-space-text); }

/* --- §4.4 表格 .table ------------------------------------------------------ */
.table { font-size: var(--fs-sm); }
/* ① 粘性表头。thead th 现状 position:static；此处 top:0（实测 .main-header 是
   position:relative，不遮挡，无需偏移）。border-collapse:collapse 下 sticky 单元格
   的 border 不会跟随滚动 → 用 inset box-shadow 画底线，border-bottom 置透明。 */
.table thead th,
table.table.dataTable thead tr th[class*="sorting"] {
  position: sticky;
  top: 0;
  z-index: 2;
  background: var(--bg-header);
  border-bottom-color: transparent;
  box-shadow: inset 0 -1px 0 var(--border-soft);
}
/* 上面第二个选择器专为 datatables.min.css 而写：
   table.dataTable thead>tr>th.sorting{position:relative;padding-right:26px} 的特异性是 (0,2,4)，
   单靠 .table thead th (0,1,2) 压不过；实测 .table.dataTable thead tr th (0,2,3) 仍被压过，
   改用 (0,3,4) 的 table.table.dataTable thead tr th[class*="sorting"] 稳定取胜（实测 sticky 生效）。
   DataTables 的排序箭头是 th 的 ::after 绝对定位元素，sticky 同样是定位祖先，箭头不受影响。 */
/* 粘性表头退化（硬性纪律 3）：DataTables 的 scrollX 会把表拆进 .dataTables_scrollHead /
   .dataTables_scrollBody（两者都是 overflow 容器），sticky 在其中无效且可能与列宽同步打架
   → 明确回退 static，保证有 scrollX 的页面表头/内容列仍由 DataTables 自己对齐。 */
.dataTables_scrollHead .table thead th,
.dataTables_scrollBody .table thead th,
.dataTables_scrollFoot .table thead th {
  position: static;
  box-shadow: none;
  border-bottom-color: var(--border-soft);
}
/* 深色面板中的表格：表头底色由插件（.hr-manager-wrapper/.corp-wallet-wrapper/... thead th）
   给定，主题层不动其背景，只关掉粘性，避免"透明表头压住滚动内容"。
   实测这三类表都同时位于 .table-responsive 中 → sticky 本来就不生效，此处只是显式化。 */
.card-dark table.table thead tr th,
.hr-manager-wrapper table.table thead tr th,
.corp-wallet-wrapper table.table thead tr th,
.mining-manager-wrapper table.table thead tr th,
.mining-dashboard table.table thead tr th {
  position: static;
  box-shadow: none;
}
/* ② 斑马纹：现状 rgba(244,247,251,.66)（几乎看不见）→ --c-n-100 */
.table-striped tbody tr:nth-of-type(odd) { background: var(--c-n-100); }
/* ③ hover：现状 rgba(64,153,255,.06) → 冷色青，对比更明确 */
.table-hover tbody tr:hover { background: rgba(43, 140, 196, .09); }
/* ④ 单元格长英文/URL 不撑破（§5.3 已对 td 生效，这里补 th 与紧凑表） */
.table th, .table td { overflow-wrap: anywhere; }
/* ⑤ <768px 强制横向滚动。不包裹 .table-responsive 的表格（实测 home/srp/characters
   均无包裹）用纯 CSS 让表格自身成为滚动容器：display:block + overflow-x:auto。
   thead/tbody 仍归入同一个匿名表盒，列宽对比见报告（colsMatch=true）。 */
@media (max-width: 767.98px) {
  .content-wrapper table.table {
    display: block;
    width: 100%;
    overflow-x: auto;
    -webkit-overflow-scrolling: touch;
  }
  .content-wrapper table.table > thead,
  .content-wrapper table.table > tbody { width: 100%; }
  .content-wrapper table.table > thead > tr,
  .content-wrapper table.table > tbody > tr { white-space: nowrap; }
  /* 例外（硬性纪律 3）：DataTables 开了 scrollX 时会把表拆成 .dataTables_scrollHead
     / .dataTables_scrollBody 两张独立表格，列宽由 DataTables 自己写死同步。
     实测若把这两张表也改成 display:block + nowrap，表头列宽与内容列宽立即失配
     （375px 实测 headW [88,62,75,62,111] vs bodyW [188,105,75,62,347]）→ 必须还原。 */
  .dataTables_scrollHead table.table,
  .dataTables_scrollBody table.table,
  .dataTables_scrollFoot table.table {
    display: table;
    width: auto;
    overflow: visible;
    white-space: normal;
  }
  .dataTables_scrollHead table.table > thead > tr,
  .dataTables_scrollBody table.table > tbody > tr { white-space: normal; }
}
/* DataTables 控件文字：custom-layout 用了 !important，跟随一条（实测 3.03:1） */
.dataTables_wrapper .dataTables_info,
.dataTables_wrapper .dataTables_length,
.dataTables_wrapper .dataTables_filter { color: var(--text-muted) !important; }
.dataTables_wrapper .dataTables_filter input,
.dataTables_wrapper .dataTables_length select { border-color: var(--border-strong); border-radius: var(--r-sm); }

/* --- §4.5 表单 / Select2 --------------------------------------------------- */
.col-form-label { color: var(--text-strong); font-size: var(--fs-md); font-weight: 600; }
.form-text { color: var(--text-muted); font-size: var(--fs-xs); }
.form-control, .custom-select { border-radius: var(--r-sm); }
.form-control.is-invalid, .was-validated .form-control:invalid { border-color: var(--c-danger); }
.select2-container { max-width: 100%; }
.select2-container--default .select2-selection--multiple {
  padding: 2px 4px;
  border-radius: var(--r-sm);
}
/* 高度与 .form-control 对齐。AdminLTE 用 min-height:calc(2.25rem + 2px) 且 .text-sm 下
   rem 基数是 14px → 实算 31px；custom-layout 的 (0,2,0) 38px 压不过它。
   实测把选择器提到 (0,3,0) 后 min-height 才真正变成 38px。 */
.select2-container--default .select2-selection--multiple.select2-selection { min-height: 38px; }
.select2-container--default .select2-selection--multiple .select2-selection__rendered { padding: 0 2px; }
.select2-container--default .select2-selection--multiple .select2-selection__choice {
  margin: 3px 4px 3px 0;
  padding: 2px 8px;
  font-size: var(--fs-xs);
  line-height: 1.5;
  border-radius: var(--r-xs);
}
.select2-container--default .select2-selection--multiple .select2-selection__choice__remove {
  margin-right: 5px;
  color: rgba(255, 255, 255, .85);
}
.select2-dropdown { border-radius: var(--r-sm); }
.select2-container--default .select2-results__option { padding: 7px 11px; font-size: var(--fs-sm); }
.select2-search--dropdown .select2-search__field { min-height: 34px; padding: 6px 10px; border-radius: var(--r-xs); }

/* --- §4.6 按钮 .btn -------------------------------------------------------- */
.btn { border-radius: var(--r-sm); }
/* P0-3：主按钮白字 on #4099ff = 2.91:1 → --c-primary-600 (#1b6f9e) = 5.51:1。
   custom-layout 对同属性用了 !important（第 383 行），跟随一条。 */
.btn-primary {
  background-color: var(--c-primary-600) !important;
  border-color: var(--c-primary-600) !important;
}
.btn-primary:hover,
.btn-primary:focus,
.btn-primary:not(:disabled):not(.disabled):active {
  background-color: var(--c-primary-700) !important;
  border-color: var(--c-primary-700) !important;
  box-shadow: 0 5px 14px rgba(23, 86, 122, .24) !important;
}
.btn-outline-primary { color: var(--c-primary-700); border-color: var(--border-strong); }
.btn-outline-primary:hover { color: var(--text-invert); background: var(--c-primary-600); border-color: var(--c-primary-600); }
.btn-secondary, .btn-default { color: var(--c-n-700); border-color: var(--border-strong); }
.btn-link { color: var(--c-primary-700); }
.btn-link:hover { color: var(--c-primary-900); }
/* ④ hover 位移仅限非表格区域：表格行内按钮不再抖动（.btn:hover 是 0,1,1，这里 0,2,1） */
.table .btn:hover, .table .btn:focus { transform: none; }
/* ③ .btn-xs 实测 32x24 → 28px 高（§8 触控目标） */
.btn-xs { min-height: 28px; padding: .2rem .5rem; font-size: var(--fs-2xs); }
/* ⑤ 统一焦点环（§8 焦点可见） */
.btn:focus-visible,
.page-link:focus-visible,
.close:focus-visible,
.nav-link:focus-visible,
.dropdown-item:focus-visible {
  outline: 0;
  box-shadow: var(--focus-ring);
  border-radius: var(--r-sm);
}

/* --- §4.7 徽章 .badge ------------------------------------------------------ */
/* 现状 9.92~10.5px（中文糊）→ 12px；绿 4.21 / 黄 2.94 不达标 → 达标色对 */
.badge, .label {
  padding: .36em .6em;
  font-size: var(--fs-2xs);
  font-weight: 600;
  line-height: 1.25;
  letter-spacing: 0;
  vertical-align: middle;
  border-radius: var(--r-pill);
}
.badge-success, .badge.bg-success { background-color: var(--c-success); }
.badge-danger, .badge.bg-danger { background-color: var(--c-danger); }
.badge-info, .badge.bg-info { background-color: var(--c-info); }
/* 黄：白字 2.94:1 不达标 → 金底 + 深字 = 7.30:1（禁止白字）。BS4 的 .bg-* 工具类是
   !important，这里对 .badge.bg-* 跟随一条（§6.2 之③）。 */
.badge-warning, .badge.bg-warning {
  background-color: var(--c-warning) !important;
  color: var(--c-warning-ink) !important;
}
.badge-primary, .badge.bg-primary { background-color: var(--c-primary-600) !important; }

/* --- §4.8 分页 .pagination ------------------------------------------------- */
.pagination { gap: 4px; }
.page-link {
  display: inline-flex;
  align-items: center;
  justify-content: center;
  min-width: 36px;
  min-height: 36px;
  border-radius: var(--r-sm) !important;
}
.page-item.active .page-link,
.page-link[aria-current="page"] {
  color: var(--text-invert);
  background: var(--c-primary-600);
  border-color: var(--c-primary-600);
}
/* 阶段 3 修正：--c-n-400(#93a3b5) 实测 2.58:1 → --c-n-500(5.47:1)。
   禁用语义由 Bootstrap 的 pointer-events:none + 底色保留，不靠"低对比"表达。 */
.page-item.disabled .page-link { color: var(--c-n-500); background: var(--bg-subtle); }

/* --- §4.9 模态框 / bootbox ------------------------------------------------- */
.modal-content { border-radius: var(--r-md); border: 1px solid var(--border-soft); box-shadow: var(--sh-4); }
.modal-header { border-bottom: 1px solid var(--border-soft); }
.modal-footer { border-top: 1px solid var(--border-soft); }
.modal-backdrop.show { opacity: .45; }   /* 现状 .38 偏轻 */
/* bootbox 与原生模态并存 → 统一到同一套令牌 */
.bootbox .modal-content { border-radius: var(--r-md); }
.bootbox .modal-header { padding: var(--sp-4) var(--sp-5); border-bottom: 1px solid var(--border-soft); }
.bootbox .modal-title { color: var(--text-strong); font-size: var(--fs-lg); font-weight: 600; }
.bootbox .modal-body { color: var(--text-body); font-size: var(--fs-md); }
.bootbox .modal-footer { padding: var(--sp-3) var(--sp-5); border-top: 1px solid var(--border-soft); }
.bootbox .modal-footer .btn { min-width: 88px; }
/* 关闭按钮触控目标：实测 13x24 → 24x24（WCAG 2.2 AA） */
.close { min-width: 24px; min-height: 24px; }

/* --- §4.10 提示条 .alert / .callout ---------------------------------------- */
/* 四类提示统一「浅底 + 深字 + 左 4px 强调条」。.alert 的左描边现状用 currentColor，
   这里按类型分别钉死颜色，避免"插件深底浅字"落到浅底上（P0-2 1.07:1 的成因）。 */
.alert {
  padding: var(--sp-3) var(--sp-4);
  font-size: var(--fs-sm);
  box-shadow: none;
  border-radius: var(--r-sm);
}
.alert-info    { color: var(--c-primary-700); background: #eaf4fb; border-left-color: var(--c-primary-600); }
.alert-success { color: #16663a;            background: #edf8f2; border-left-color: var(--c-success); }
.alert-warning { color: #5a4104;            background: #fdf3d7; border-left-color: var(--c-warning); }
.alert-danger  { color: #a5281b;            background: #fdecea; border-left-color: var(--c-danger); }
.alert a { color: inherit; text-decoration: underline; }
.alert .close { color: inherit; opacity: .75; text-shadow: none; }
/* corp-wallet 插件自带 CSS 在主题层之后加载（@push），且把 alert 设计成"深底浅字"
   → 按 §6.2 用「插件容器 + 组件」复合选择器跟一条 !important（P0-2 实测 1.07:1 / 1.23:1）。 */
.corp-wallet-wrapper .alert-info    { color: var(--c-primary-700) !important; background: #eaf4fb !important; border-color: #cfe4f2 !important; }
.corp-wallet-wrapper .alert-success { color: #16663a !important;            background: #edf8f2 !important; border-color: #cbe8d6 !important; }
.corp-wallet-wrapper .alert-warning { color: #5a4104 !important;            background: #fdf3d7 !important; border-color: #f0dfa8 !important; }
.corp-wallet-wrapper .alert-danger  { color: #a5281b !important;            background: #fdecea !important; border-color: #f3cdc7 !important; }
/* callout 同语义 */
.callout { border-radius: var(--r-sm); border-left-width: 4px; }
.callout.callout-info    { color: var(--c-primary-700); background: #eaf4fb; border-left-color: var(--c-primary-600); }
.callout.callout-success { color: #16663a; background: #edf8f2; border-left-color: var(--c-success); }
.callout.callout-warning { color: #5a4104; background: #fdf3d7; border-left-color: var(--c-warning); }
.callout.callout-danger  { color: #a5281b; background: #fdecea; border-left-color: var(--c-danger); }

/* --- §4.12 页脚 .main-footer ----------------------------------------------- */
/* 实测文字 #8796a5 = 3.03:1、链接 #2f80ed = 3.87:1、small 12.48px = 2.82:1 */
.main-footer {
  color: var(--text-muted);
  background: var(--bg-surface);
  border-top: 1px solid var(--border-soft);
  font-size: var(--fs-xs);
}
.main-footer strong,
.main-footer b { color: var(--c-n-600); }
.main-footer a { color: var(--c-primary-700); text-decoration: none; }
.main-footer a:hover { color: var(--c-primary-900); text-decoration: underline; }
.main-footer small,
.main-footer .small { color: var(--text-muted); font-size: var(--fs-xs); }
.main-footer .float-right { font-size: var(--fs-2xs); }
/* 注：页脚首个孤立的 "|" 是 blade 里的裸文本节点（includes/footer.blade.php），
   纯 CSS 无法选中文本节点 → 本阶段不做（见报告"未完成项"）。 */

/* --- 侧边栏：用户已决定不改信息架构，仅做纯 CSS 细节 ---------------------- */
/* 分组标题：字距与字号（不动 DOM、不加 JS） */
.nav-sidebar .nav-header {
  font-size: var(--fs-2xs);
  letter-spacing: .06em;
  color: var(--c-space-muted);
  text-transform: none;
}
/* 活动项左侧 3px 竖条（保留 custom-layout 的外阴影，同一属性需一并重述） */
.sidebar-dark-primary .nav-sidebar > .nav-item > .nav-link.active,
.sidebar-dark-primary .nav-sidebar .nav-treeview > .nav-item > .nav-link.active {
  box-shadow: inset 3px 0 0 0 var(--c-gold-400), 0 7px 16px rgba(64, 153, 255, .22);
}
/* 展开箭头垂直居中：现状 top:.78rem 在 43px 行里中心偏上 3px（实测 centerDelta=-3） */
.nav-sidebar .right { top: 50%; transform: translateY(-50%); }

/* --- 图表画布：不再撑破容器 ------------------------------------------------ */
/* 实测 home.blade.php 硬编码 width="1110"，375px 视口下把文档撑到 1141px、
   1440px 下撑到 1977px（Chart.js 只在 AJAX 回调里创建，静态/慢网下画布保持原尺寸）。
   max-width + height:auto 让画布按容器等比缩放；Chart.js 生成的内联 width/height
   优先级更高，真实图表不受影响。 */
canvas { max-width: 100%; height: auto; }

/* ==========================================================================
   以下为阶段 3 追加内容
   ========================================================================== */

/* ============================================================================
   阶段 3：插件深色面板修色（保留深色风格）+ 无障碍收口
   ----------------------------------------------------------------------------
   用户决策（硬边界）：保留 hr-manager / mining-manager / manager-core /
   corp-wallet-manager 的深色面板，不统一为浅色；本阶段只改面板内的
   文字 / 控件 / 边框色，**面板自身底色一律不动**（实测前后背景 hex 逐项一致，
   见 /home/shirai/seat/tmp/ui-stage3-2026-09-20.md §2b）。

   根因（实测）：深色面板里失效的文字几乎全部来自"为浅色主题做的决定"，而不是
   插件自己写的规则——
     .card-title      <- custom-layout.css:302  color: var(--adm-text) #3f4d67
     h1~h6 / code     <- photon-light.css:95/1069  color: var(--text-main) #1a2430
     label            <- custom-layout.css:427  color: #53657a
     链接             <- 本主题层阶段 2 的 --c-primary-700 #17567a
     .input-group-text<- custom-layout.css:467  color: #697a8e
   这些都在主题层的加载顺序之前，因此用「深色容器 + 组件」复合选择器即可覆盖，
   **不需要 !important**；只有框架/插件自身已用 !important 的少数项才跟随一条
   （逐条见报告 §3 账本增量）。
   方案出处：/home/shirai/seat/tmp/ui-design-plan-2026-09-20.md §3.5 / §8
   ============================================================================ */

/* --- 深色面专用令牌（只加 2 个：深底达标、白底非法）----------------------- */
:root {
  --c-danger-light: #e0685c;              /* on #161922 = 5.27:1（深色面板内的必填/错误标记） */
  --c-on-dark-border: rgba(255, 255, 255, .24);  /* 深色面板内的透明底控件描边 */
}

/* --- A. 深色面板内文字/控件（容器：.card-dark / .bg-dark，均实测存在于四插件） -- */

/* A1 卡片标题与各级标题：实测 1.78(hr/players) / 1.98(mining,manager-core) / 1.12(mining设置页 h4)
      → --c-space-text（on #1a1d24 = 10.60、on #161922 = 11.01） */
.card-dark .card-title,
.card-dark .box-title,
.card-dark h1, .card-dark h2, .card-dark h3, .card-dark h4, .card-dark h5, .card-dark h6,
.card-dark .h1, .card-dark .h2, .card-dark .h3, .card-dark .h4, .card-dark .h5, .card-dark .h6,
.bg-dark .card-title,
.bg-dark h1, .bg-dark h2, .bg-dark h3, .bg-dark h4, .bg-dark h5, .bg-dark h6,
.bg-dark .h1, .bg-dark .h2, .bg-dark .h3, .bg-dark .h4, .bg-dark .h5, .bg-dark .h6 {
  color: var(--c-space-text);
}

/* A2 表单标签 / 图例 / 代码 / 说明文字
      实测：label #53657a = 2.93、code #1a2430 = 1.12、禁用项的标签 #6c757d = 3.60
      注意：kbd / .input-group-text 在 photon / custom-layout 里自带**浅色底**，
      不能跟着一起刷浅色文字（会变成浅底浅字），它们走浅色主题的 C2 规则。 */
.card-dark label, .card-dark .col-form-label,
.card-dark .custom-control-label, .card-dark .form-check-label, .card-dark legend,
.bg-dark label, .bg-dark .col-form-label,
.bg-dark .custom-control-label, .bg-dark .form-check-label, .bg-dark legend {
  color: var(--c-space-text);
}
.card-dark .form-check-input:disabled ~ .form-check-label,
.card-dark .custom-control-input:disabled ~ .custom-control-label,
.bg-dark .form-check-input:disabled ~ .form-check-label,
.bg-dark .custom-control-input:disabled ~ .custom-control-label {
  color: var(--c-space-muted);   /* 3.60 → 6.54：保留"次级"语义但仍达标 */
}
.card-dark code, .card-dark pre, .card-dark samp,
.bg-dark code, .bg-dark pre, .bg-dark samp {
  color: var(--c-space-text);
}
.card-dark .form-text, .card-dark .help-block,
.bg-dark .form-text, .bg-dark .help-block {
  color: var(--c-space-muted);   /* 默认 --text-muted 在深底上只有 3.21 */
}

/* A3 链接：阶段 2 的全局链接色 --c-primary-700 落在深底上 = 2.21~2.30 → --c-accent-400(6.64) */
.card-dark a:not(.btn):not(.nav-link):not(.dropdown-item):not(.page-link):not(.badge):not(.close),
.bg-dark a:not(.btn):not(.nav-link):not(.dropdown-item):not(.page-link):not(.badge):not(.close) {
  color: var(--c-accent-400);
}
.card-dark a:not(.btn):hover,
.bg-dark a:not(.btn):hover {
  color: #7cc6ea;
}

/* A4 透明底按钮与工具按钮：实测 .btn-outline-secondary 文字 #5c6b7a 压深底 = 3.08 */
.card-dark .btn-outline-secondary, .card-dark .btn-outline-dark,
.card-dark .btn-outline-light, .card-dark .btn-link,
.bg-dark .btn-outline-secondary, .bg-dark .btn-outline-dark,
.bg-dark .btn-outline-light, .bg-dark .btn-link {
  color: var(--c-space-text);
  border-color: var(--c-on-dark-border);
}
.card-dark .btn-outline-secondary:hover, .card-dark .btn-outline-dark:hover,
.card-dark .btn-outline-light:hover, .card-dark .btn-link:hover,
.bg-dark .btn-outline-secondary:hover, .bg-dark .btn-link:hover {
  color: #ffffff;
  background: rgba(255, 255, 255, .14);
  border-color: rgba(255, 255, 255, .40);
}

/* A5 必填/错误标记：text-danger #c0392b 压深底 = 3.23 → --c-danger-light(5.27)。
   Bootstrap / photon 的 .text-* 工具类自带 !important，按 §6.2③ 跟随一条。 */
.card-dark .text-danger, .bg-dark .text-danger,
.card-dark .invalid-feedback, .bg-dark .invalid-feedback,
.card-dark .was-validated .form-control:invalid ~ .invalid-feedback {
  color: var(--c-danger-light) !important;
}

/* A7 hr-manager 状态徽章（.badge-hr 家族，插件用 !important 钉白字）
      实测：badge-applied #17a2b8 = 3.04、badge-accepted #28a745 = 3.13
      写法＝「插件容器 + 组件 + 变体」，特异性 (0,3,0) 压过插件自身的 (0,2,0)，不加 !important。
      只动底色明度、保持色相（applied 仍是青、accepted 仍是绿）。 */
.hr-manager-wrapper .badge-hr.badge-applied  { background-color: #0f6b7a; }          /* 白字 6.17 */
.hr-manager-wrapper .badge-hr.badge-accepted { background-color: var(--c-success); }  /* 白字 5.35 */

/* A12 深色面板内的 Select2 选择框（任务点名项，实测 1.87:1）：
       custom-layout 的 --adm-text #3f4d67 落在深底上；这里换成深色面文字色。
       ⚠ .select2-dropdown（下拉面板）是 Select2 运行时挂到 <body> 上的**浅色面**，
       不在 .card-dark 内，所以不会被这条误伤——保持浅色主题的文字色。 */
.card-dark .select2-container--default .select2-selection--single .select2-selection__rendered,
.card-dark .select2-container--default .select2-selection--multiple .select2-selection__rendered,
.card-dark .select2-container--default .select2-selection__placeholder,
.card-dark .select2-selection__rendered,
.card-dark .select2-selection__placeholder {
  color: var(--c-space-text);
}
.card-dark .select2-container--default .select2-selection--single .select2-selection__arrow b,
.card-dark .select2-container--default .select2-selection--multiple .select2-selection__arrow b {
  border-color: var(--c-space-muted) transparent transparent transparent;
}
.card-dark .select2-container--default .select2-selection--single,
.card-dark .select2-container--default .select2-selection--multiple {
  background-color: rgba(255, 255, 255, .06);
  border-color: var(--c-on-dark-border);
}

/* A8 mining 仪表盘角标：白字压 #f093fb→#f5576c 渐变 = 2.63 → 改用深字 5.43（渐变本身不动） */
.mining-dashboard .corporation-badge,
.mining-manager-wrapper .corporation-badge { color: var(--c-n-900); }

/* A9 hr-manager 仪表盘「高饱和渐变」信息盒：浅色主题的文字色压在上面 = 1.07~1.75。
   插件给的 5 条渐变最亮端分别是 #667eea / #20c997 / #ffc107 / #e83e8c / #17a2b8，
   白字在上面只有 2.13~4.84，深字又只有 1.07~1.75 —— 只调文字色两头都不达标。
   解法：把插件渐变的**两个端点整体压暗 45%**（色相与渐变方向不变，只动明度 → §6.2 允许的
   "背景 α/明度"改动），白字在每一条的最亮端仍有 ≥4.59:1（最差是 warning 的 #91710f = 4.59）。
   插件对 background 用了 !important 且后加载，所以这里用「容器 + 组件 + 变体」提到 (0,4,0)。 */
/* AdminLTE 对 .bg-warning 用了 .bg-warning,.bg-warning>a{color:#1f2d3d!important}，
   所以这里的白字必须同样带 !important 才能压过（§6.2③）。 */
.hr-manager-wrapper .info-box[class*="bg-gradient-"] { color: #ffffff !important; }
.hr-manager-wrapper .info-box[class*="bg-gradient-"].bg-gradient-primary {
  background: linear-gradient(135deg, #3d4d8b 0%, #453064 100%) !important;   /* 白字 7.96~11.0 */
}
.hr-manager-wrapper .info-box[class*="bg-gradient-"].bg-gradient-success {
  background: linear-gradient(135deg, #1a6331 0%, #16765e 100%) !important;   /* 白字 7.30~5.55 */
}
.hr-manager-wrapper .info-box[class*="bg-gradient-"].bg-gradient-warning {
  /* 例外：hr 仪表盘这条卡片的文字色是**内联 !important**（blade 里 style="color:#1f2d3d!important"），
     纯 CSS 无法覆盖（内联 important 的特异性高于任何样式表规则）→ 只能反转思路，
     把底色改成浅金，让被钉死的深墨 #1f2d3d 达标：10.49~6.98:1。 */
  background: linear-gradient(135deg, #ffd75e 0%, #f6a13a 100%) !important;
}
.hr-manager-wrapper .info-box[class*="bg-gradient-"].bg-gradient-danger {
  background: linear-gradient(135deg, #7e2431 0%, #842958 100%) !important;   /* 白字 9.59~8.61 */
}
.hr-manager-wrapper .info-box[class*="bg-gradient-"].bg-gradient-info {
  background: linear-gradient(135deg, #116070 0%, #3d1090 100%) !important;   /* 白字 7.16~7.19 */
}
.hr-manager-wrapper .info-box[class*="bg-gradient-"] .info-box-text,
.hr-manager-wrapper .info-box[class*="bg-gradient-"] .info-box-number,
.hr-manager-wrapper .info-box[class*="bg-gradient-"] small,
.hr-manager-wrapper .info-box[class*="bg-gradient-"] .info-box-icon { color: #ffffff; }

/* A10 manager-core 的 .info-box 实测是**浅色**的（像素抽样 #D2EAF0：插件把 .info-box 刷成
       rgba(23,162,184,.15)，底层是 custom-layout 的白色 .info-box 面），而插件把
       .info-box-text / .info-box-number 钉成白字 !important → 1.25:1。改深字，背景不动。
       ⚠ 反例（踩过的坑）：mining-manager 的 .info-box.bg-gradient-* 看起来像"浅色渐变"，
       实测像素是**深色**（插件叠的是 30% 透明渐变，压在深色卡片上：#1A405C / #583248 /
       #2A495A / #312D4F）——白字本来就达标，**不能动**。只有 AdminLTE 自带的
       .bg-gradient-teal 是不透明亮青（像素 #3DD0A5），需要单独翻成深字。 */
.manager-core-wrapper .info-box,
.manager-core-dashboard .info-box {
  color: var(--text-strong) !important;
}
/* manager-core 插件把 .info-box-text / .info-box-number 的白字钉在 (0,3,0) 且后加载，
   这里通过 .info-box-content 把链条拉到 (0,4,x) 才能翻成深字 */
.manager-core-wrapper .info-box .info-box-content,
.manager-core-dashboard .info-box .info-box-content,
/* manager-core 插件把 .info-box-text / .info-box-number 的白字钉在 (0,3,0) 且后加载，
   这里通过 .info-box-content 把链条拉到 (0,4,x) 才能翻成深字 */
.manager-core-wrapper .info-box .info-box-content,
.manager-core-dashboard .info-box .info-box-content {
  color: var(--text-strong) !important;
}
.manager-core-wrapper .info-box .info-box-content .info-box-text,
.manager-core-wrapper .info-box .info-box-content .info-box-number,
.manager-core-wrapper .info-box .info-box-content small,
.manager-core-dashboard .info-box .info-box-content .info-box-text,
.manager-core-dashboard .info-box .info-box-content .info-box-number,
.manager-core-dashboard .info-box .info-box-content small {
  color: inherit !important;
}
/* A10b AdminLTE 自带的 .bg-gradient-teal 是不透明亮青（实测像素 #3DD0A5），
   而 mining 插件把 .info-box-text/-number 钉成白字 !important → 2.03:1。
   同样用 .info-box-content 把链条拉到 (0,4,x) 翻成深字（7.18:1）。 */
.mining-manager-wrapper .info-box.bg-gradient-teal,
.mining-dashboard .info-box.bg-gradient-teal { color: var(--text-strong) !important; }
.mining-manager-wrapper .info-box.bg-gradient-teal .info-box-content,
.mining-dashboard .info-box.bg-gradient-teal .info-box-content,
.mining-manager-wrapper .info-box.bg-gradient-teal .info-box-content .info-box-text,
.mining-manager-wrapper .info-box.bg-gradient-teal .info-box-content .info-box-number,
.mining-manager-wrapper .info-box.bg-gradient-teal .info-box-content small,
.mining-dashboard .info-box.bg-gradient-teal .info-box-content .info-box-text,
.mining-dashboard .info-box.bg-gradient-teal .info-box-content .info-box-number,
.mining-dashboard .info-box.bg-gradient-teal .info-box-content small { color: inherit !important; }

/* 反向兜底：若 manager-core 将来出现深色信息盒，仍按深色面处理 */
.card-dark .manager-core-wrapper .info-box .info-box-text,
.card-dark .manager-core-wrapper .info-box .info-box-number,
.card-dark .manager-core-dashboard .info-box .info-box-text,
.card-dark .manager-core-dashboard .info-box .info-box-number { color: var(--c-space-text) !important; }

/* ============================================================================
   B. 无障碍（对应方案 §8 验收表）
   ============================================================================ */

/* B1 触控目标 ≥24×24（WCAG 2.2 AA 2.5.8）。
   手法：只给"小目标"补内边距 / 最小高度——内联元素的 padding 不参与行盒计算，
   所以行距、字号、换行位置都不变，只有命中区域变大。
   实测改造前 <24px 的目标：页脚链接 28×17、zKB 徽章链 22×18、卡片正文内联链接 17~18px、
   侧栏角色名 63×23、corp-wallet 提示条链接 101×23、hr 设置页复选框 42×22。 */
.card-body a:not(.btn):not(.nav-link):not(.dropdown-item):not(.page-link):not(.badge),
.card-dark a:not(.btn):not(.nav-link):not(.dropdown-item):not(.page-link):not(.badge),
.alert a, .callout a,
small a, .small a,
.table td a:not(.btn),
.main-footer a,
.user-panel .info a {
  padding: 4px 2px;
}
.user-panel .info a.d-block { min-height: 24px; }
.form-check-input { min-height: 24px; }
/* Bootstrap 的自定义开关/复选框把真正的勾选框做成了 opacity:0 的隐藏 input
   （16x20，不是触摸目标），可见目标是整行 .custom-control-label（实测 101x23）→ 补 1px 到 24 */
.custom-control { min-height: 24px; }
.custom-control-label { padding-top: 1px; padding-bottom: 1px; }
/* 分页：Bootstrap 的 .pagination 是 flex 但不换行，375px 下 6 个页码会把文档撑宽
   （实测 hr-manager/members：docSW 424 vs clientWidth 365）→ 允许换行 */
.pagination { flex-wrap: wrap; }

/* B2 表格排序表头：DataTables 给 th 加了 tabindex="0"（可键盘聚焦）却没有任何焦点样式
   → 纯 CSS 补一条内缩焦点环（内缩是为了不被相邻单元格裁掉）。 */
table.dataTable thead th[tabindex]:focus-visible,
table.dataTable thead th[tabindex]:focus,
thead th[tabindex]:focus-visible {
  outline: 2px solid var(--c-primary-600);
  outline-offset: -2px;
}

/* B3 Select2 焦点可见：默认主题只把边框变黑（无环），深色面板上几乎看不见 → 统一焦点环 */
.select2-container--default .select2-selection:focus-visible,
.select2-container--default.select2-container--focus .select2-selection,
.select2-container--default.select2-container--open .select2-selection {
  outline: 0;
  border-color: var(--c-primary-500);
  box-shadow: var(--focus-ring);
}

/* B4 原生表单控件：Bootstrap 的 .2rem 淡蓝环在深色面板上过弱 → 统一为令牌焦点环 */
.form-control:focus-visible,
.custom-select:focus-visible,
.custom-file-input:focus-visible,
.form-check-input:focus-visible,
.custom-control-input:focus-visible,
.select2-search--dropdown .select2-search__field:focus-visible {
  outline: 0;
  border-color: var(--c-primary-500);
  box-shadow: var(--focus-ring);
}

/* B4b 卡片工具按钮：corp-wallet-manager.css:1354 用
   .corp-wallet-wrapper .card-tools .btn-tool:focus{outline:none;box-shadow:none}
   直接把焦点环清掉（特异性 0,4,0，压过阶段 2 的 .btn:focus-visible 0,2,0）
   → 按 §6.2③ 跟一条 !important 把令牌焦点环要回来。 */
.card-tools .btn-tool:focus-visible {
  outline: 0;
  box-shadow: var(--focus-ring) !important;
}

/* B5 侧栏「当前项」的焦点环：custom-layout 的 .active 规则特异性 (0,5,0) 会盖掉阶段 2 的
   .nav-link:focus-visible (0,2,0)，导致当前项被键盘聚焦时看不到焦点环 → 提到 (0,6,0) 并保留金色竖条 */
.sidebar-dark-primary .nav-sidebar > .nav-item > .nav-link.active:focus-visible,
.sidebar-dark-primary .nav-sidebar .nav-treeview > .nav-item > .nav-link.active:focus-visible {
  box-shadow: var(--focus-ring), inset 3px 0 0 0 var(--c-gold-400);
}

/* B6 纯 CSS 能做的语义/ARIA 视觉补强（不改 blade / 不加 JS） */
[aria-current="page"] { font-weight: 600; }
[aria-invalid="true"], .form-control[aria-invalid="true"] { border-color: var(--c-danger); }
[aria-disabled="true"], [disabled] { cursor: not-allowed; }
.modal[aria-modal="true"] .modal-content { box-shadow: var(--sh-4); }
/* 分页禁用态的颜色见上方 §4.8 的 .page-item.disabled .page-link（阶段 3 已就地修正）。 */

/* ============================================================================
   C. 浅色区域连带修正（全部为实测到的 AA 失败项，逐条见报告 §2a）
   ============================================================================ */

/* C1 表头：阶段 2 把表头底色换成 --bg-header #eff3f8 之后，#607286 实测只剩 4.44:1
   （阶段 2 报告记的 4.91 是换色前的读数）→ 文字压深一档 = 6.33。
   深色面板的表头由插件自己钉白字（特异性更高），不受影响，下方有实测复核。 */
.table thead th { color: var(--c-n-600); }

/* C2 输入组前缀：实测 4.10（#697a8e on #f5f7fa）→ 6.57 */
.input-group-text { color: var(--c-n-600); }

/* C3 语义按钮：.btn-success 实测 4.21（白字 on #2e8c52）→ 5.35；
   .btn-warning 计算值 2.94（白字 on #c98a1f）→ 金底深字 7.30（与 .badge-warning 同策略，禁白字） */
.btn-success { background-color: var(--c-success); border-color: var(--c-success); }
.btn-success:hover, .btn-success:focus { background-color: #16663a; border-color: #16663a; }
.btn-warning { background-color: var(--c-warning); border-color: var(--c-warning); color: var(--c-warning-ink); }
.btn-warning:hover, .btn-warning:focus { background-color: #d9a01f; border-color: #d9a01f; color: var(--c-warning-ink); }

/* C4 统计块 .small-box.bg-*（mining 仪表盘的深色面板内）：白字压亮底实测 2.91~4.21
   → 与按钮/徽章同一套令牌色。框架层 .bg-* 工具类自带 !important，按 §6.2③ 跟随。 */
.small-box.bg-primary { background-color: var(--c-primary-600) !important; }
.small-box.bg-info    { background-color: var(--c-info) !important; }
.small-box.bg-success { background-color: var(--c-success) !important; }
.small-box.bg-danger  { background-color: var(--c-danger) !important; }
.small-box.bg-warning {
  background-color: var(--c-warning) !important;
  color: var(--c-warning-ink) !important;
}
.small-box.bg-warning .inner, .small-box.bg-warning h3, .small-box.bg-warning p,
.small-box.bg-warning small, .small-box.bg-warning .small-box-footer {
  color: var(--c-warning-ink) !important;
}
/* mining-manager-dashboard.css 把 .mining-dashboard .small-box h3/p 的白字钉成 !important
   （特异性 0,3,1~0,3,2）；这里用「同容器 + .bg-warning」提到 (0,4,x) 才能翻成金底深字（7.30:1） */
.mining-dashboard .small-box.bg-warning h3,
.mining-dashboard .small-box.bg-warning p,
.mining-dashboard .small-box.bg-warning p > small,
.mining-dashboard .small-box.bg-warning > .inner,
.mining-dashboard .small-box.bg-warning > .small-box-footer {
  color: var(--c-warning-ink) !important;
}

/* C5 徽章 .badge.bg-* 家族补齐：Bootstrap 的 .bg-* 工具类是 !important，阶段 2 只给
   warning / primary 跟了一条，success / info / danger 漏了（本批采样页 0 处使用，
   零风险补齐以保证 4 类一致） */
.badge.bg-success, .label.bg-success { background-color: var(--c-success) !important; }
.badge.bg-info,    .label.bg-info    { background-color: var(--c-info) !important; }
.badge.bg-danger,  .label.bg-danger  { background-color: var(--c-danger) !important; }

/* C6 侧栏「当前项」：白字压 linear-gradient(#4099ff,#5b8def) 实测 2.91~3.23，且**全站每页都出现**
   （方案 §2/§8 未单列，是本次全页扫描新发现的高频项）。
   改法与阶段 2 的 .btn-primary 完全一致：品牌蓝压到 --c-primary-700 → --c-primary-600（白字 7.93~5.51），
   色相、渐变方向、金色竖条、阴影全部保留。若要回到原亮蓝，删掉这一条即可。 */
.sidebar-dark-primary .nav-sidebar > .nav-item > .nav-link.active,
.sidebar-dark-primary .nav-sidebar .nav-treeview > .nav-item > .nav-link.active {
  background: linear-gradient(135deg, var(--c-primary-700), var(--c-primary-600)) !important;
}

/* A11 深色容器内的「浅色子面」回退。
   深色面板里仍会出现自带浅色底的子面（.alert / .callout / .bg-white / .bg-light），
   A1~A5 的深色面板文字色会顺着后代选择器漏进去，变成"浅底浅字"
   （实测 mining 设置页的 .card-dark .alert-info h6 曾因此掉到 1.43:1）。
   :is() 取参数里最高的特异性 → 本条 (0,2,1) 稳定压过 A1~A2 的 (0,1,1)/(0,2,0)。 */
.card-dark :is(.alert, .callout, .bg-white, .bg-light),
.bg-dark :is(.alert, .callout, .bg-white, .bg-light) {
  color: var(--text-body);
}
.card-dark :is(.alert, .callout, .bg-white, .bg-light) :is(
    h1, h2, h3, h4, h5, h6, .card-title, .box-title, legend, label, .col-form-label,
    .form-check-label, .custom-control-label, code, pre, samp, .form-text, .help-block,
    .input-group-text, .text-danger),
.bg-dark :is(.alert, .callout, .bg-white, .bg-light) :is(
    h1, h2, h3, h4, h5, h6, .card-title, .box-title, legend, label, .col-form-label,
    .form-check-label, .custom-control-label, code, pre, samp, .form-text, .help-block,
    .input-group-text, .text-danger) {
  color: inherit;
}
.card-dark :is(.alert, .callout, .bg-white, .bg-light) a:not(.btn):not(.nav-link):not(.dropdown-item):not(.page-link):not(.badge),
.bg-dark :is(.alert, .callout, .bg-white, .bg-light) a:not(.btn):not(.nav-link):not(.dropdown-item):not(.page-link):not(.badge) {
  color: inherit;
}

/* C7 描边按钮：.btn-outline-success 实测 4.21（#2e8c52 白底，SRP 页"拉取这条战损"）→ 7.01；
   .btn-outline-warning 计算值 2.94 → 7.12（沿用"黄禁白字"策略） */
.btn-outline-success { color: #16663a; border-color: #16663a; }
.btn-outline-success:hover, .btn-outline-success:focus {
  background-color: #16663a; border-color: #16663a; color: #ffffff;
}
.btn-outline-warning { color: #7a4f0a; border-color: #7a4f0a; }
.btn-outline-warning:hover, .btn-outline-warning:focus {
  background-color: #7a4f0a; border-color: #7a4f0a; color: #ffffff;
}


