@charset "utf-8";
/* 2026-10-10 起冻结（去三库并行改造期）：执行包（P1-P5）不得修改本文件；
   改动诉求 -> docs/并行去三库/_冲突清单.md */
/* ==========================================================================
   theme.css · 组件覆盖层（V16 换肤体系第 3 层：tokens -> templates -> theme）
   ---------------------------------------------------------------------------
   【结构（2026-10-07 统一治理后 · 按职责归组）】
     令牌 -> 页面底(0) -> layui组件(1) -> easyui组件(2) -> 自绘组件(3) -> 强制覆盖(4)
          -> 内联覆盖(5) -> 全组件(6) -> 视觉强化(7) -> 框架层(8)
          -> 排版与尺寸(9) -> 结构层(10) -> 弹窗与浮层(11)

   【硬约束（违反会引发全站错位）】
     · 不改任何容器像素高：#tj-head 81px、.tj-body{padding:2px}、53 处 calc(100vh - N)
     · 表格行高需 !important，但 width 一律不加（会破坏 easyui 宽度补丁）
     · 悬停/选中一律用 transform / box-shadow，绝不改 margin/padding/width
     · 各页内联样式优先级最高，需覆盖时用 !important（见 5、11）

   【尺寸一律引用 tokens.css 令牌，禁止裸数字】
     --ui-h-input / --ui-h-btn / --ui-h-btn-xs / --ui-h-btn-sm / --ui-h-th / --ui-h-td
     --ui-h-dialog-title / --ui-dialog-max / --ui-pad-content / --ui-pad-card
     --ui-z-float / --ui-z-shadow / --ui-s1..s12 / --ui-r / --ui-r-sm / --ui-r-lg
   ========================================================================== */

/* ==========================================================================
   田径编排系统 · 覆盖层（theme.css）
   ---------------------------------------------------------------------------
   职责：覆盖 layui + easyui + 自绘组件的"形"，**只引用 var(--ui-*) 变量**，
         不含任何硬编码色值（换模板时本文件一行不动）。

   ⚠️ 六条硬约束（全站普查结论）：
     1. **所有规则限定在 html[data-ui-template] 下** —— 未加属性的页面（打印页、
        error/500.html、C 类片段）完全不受影响
     2. **不设置 body / html 的背景、字号、字体** —— 打印页字号由 {$opt.zw_zh} /
        {$sz.dy_zw_zt} 等模板变量控制，全局注入会污染打印件
     3. **不改变任何容器尺寸与高度** —— 避开 .tj-body{padding:2px} 与各页
        height:calc(100vh - Npx) 的高度链；只改颜色/圆角/边框/阴影
     4. **不破坏 layout 的 4 条 easyui 宽度补丁**
        （#tj-head .panel{width:auto!important} 等，见 tianjing/layout.html 第 51–54 行）
     5. **与既有 easyui 主题机制共存** —— 已有 {link#easyuiTheme}（{$tj_theme}/
        {$dw_pf}/{$theme}）与 network_signup 的 pf() 换肤，本文件只在颜色层覆盖，
        不替换其主题文件加载逻辑
     6. **页内已锁定背景的页面不碰** —— bsgcLq/Cj/CjTj（#888888 防白闪）、
        dyfull / *_dy（纯白打印）、bmtj_bt（#dddddd）
   ========================================================================== */

/* ==========================================================================
   1 · layui 组件
   ========================================================================== */

/* 按钮：三级（主 / 次 / 幽灵） */
html[data-ui-template] .layui-btn{
  height:var(--ui-btn-h);line-height:var(--ui-btn-h);
  padding:0 var(--ui-s4);border-radius:var(--ui-btn-r);
  border:1px solid transparent;
  background:var(--ui-btn-sec-bg);color:#F2F4F8;
  font-family:var(--ui-sans);font-size:13px;font-weight:500;
  box-shadow:0 1px 2px rgba(27,42,94,.22),inset 0 1px 0 rgba(255,255,255,.12);
  transition:transform var(--ui-fast) var(--ui-ez),
             box-shadow var(--ui-fast) var(--ui-ez),
             background var(--ui-fast) var(--ui-ez);
}
html[data-ui-template] .layui-btn:hover{
  background:var(--ui-btn-sec-bg-hover);color:#fff;transform:translateY(-2px);
  box-shadow:0 7px 20px rgba(27,42,94,.34),0 14px 36px rgba(27,42,94,.16),inset 0 1px 0 rgba(255,255,255,.22);
}
html[data-ui-template] .layui-btn:active{transform:translateY(0) scale(.955);box-shadow:0 1px 2px rgba(27,42,94,.22)}
html[data-ui-template] .layui-btn:focus-visible{outline:2px solid var(--ui-amber);outline-offset:2px}

/* 主按钮：暗红（V16）/ 藏蓝（V6，由模板变量决定） */
html[data-ui-template] .layui-btn-normal,
html[data-ui-template] .layui-btn-danger,
html[data-ui-template] .layui-btn.layui-bg-red,
html[data-ui-template] .btn-primary,
html[data-ui-template] .ns-bg-color{
  background:var(--ui-btn-pri-bg) !important;color:#fff !important;border-color:transparent !important;
  box-shadow:var(--ui-btn-pri-shadow);
}
html[data-ui-template] .layui-btn-normal:hover,
html[data-ui-template] .layui-btn-danger:hover,
html[data-ui-template] .btn-primary:hover,
html[data-ui-template] .ns-bg-color:hover{
  background:var(--ui-btn-pri-bg-hover) !important;color:#fff !important;
  transform:translateY(-2px);
  box-shadow:var(--ui-btn-pri-shadow-hover);
}

/* 幽灵按钮：透明 + 描边 */
html[data-ui-template] .layui-btn-primary{
  background:transparent !important;color:var(--ui-ink-3) !important;
  border:1px solid var(--ui-n300) !important;box-shadow:none;
}
html[data-ui-template] .layui-btn-primary:hover{
  /* 悬停底保持中性（2026-10-08 用户明确：悬停不要带颜色） */
  background:var(--ui-n100) !important;color:var(--ui-ink) !important;
  border-color:var(--ui-n400) !important;transform:none;box-shadow:none;
}
html[data-ui-template] .layui-btn-disabled,
html[data-ui-template] .layui-btn[disabled]{opacity:.45;cursor:not-allowed;transform:none !important;box-shadow:none}

/* 输入框 / 下拉 / 文本域 */
html[data-ui-template] .layui-input,
html[data-ui-template] .layui-textarea,
html[data-ui-template] .layui-select,
html[data-ui-template] input[type=text].layui-input{
  border:1px solid var(--ui-n200);border-radius:var(--ui-r-sm);
  background:var(--ui-n0);color:var(--ui-ink);
  transition:border-color var(--ui-fast) var(--ui-ez),box-shadow var(--ui-fast) var(--ui-ez);
}
html[data-ui-template] .layui-input:hover,
html[data-ui-template] .layui-textarea:hover{border-color:var(--ui-cyan-m)}
html[data-ui-template] .layui-input:focus,
html[data-ui-template] .layui-textarea:focus{
  border-color:var(--ui-cyan-ink) !important;
  box-shadow:0 0 0 4px rgba(14,116,144,.16);
}
html[data-ui-template] .layui-disabled,
html[data-ui-template] .layui-input[disabled]{background:var(--ui-n100) !important;color:var(--ui-ink-4) !important}

/* 表单标签 / 说明 */
html[data-ui-template] .layui-form-label{color:var(--ui-ink-3)}
html[data-ui-template] .layui-form-mid{color:var(--ui-ink-3)}
html[data-ui-template] .layui-word-aux{color:var(--ui-ink-4)}

/* 复选/单选：选中态用青 */
html[data-ui-template] .layui-form-checked[lay-skin=primary] i{border-color:var(--ui-cyan-ink) !important;background-color:var(--ui-cyan-ink)}
html[data-ui-template] .layui-form-checked span,
html[data-ui-template] .layui-form-checked:hover span{color:var(--ui-cyan-ink)}
html[data-ui-template] .layui-form-radioed > i,
html[data-ui-template] .layui-form-radio > i:hover{color:var(--ui-cyan-ink)}

/* 表格（layui table 模块） */
html[data-ui-template] .layui-table th{
  background:var(--ui-th-bg);color:var(--ui-th-color) !important;
  font-family:var(--ui-mono);font-size:11px;letter-spacing:.12em;text-transform:uppercase;font-weight:600;
  border-color:var(--ui-th-line);
}
html[data-ui-template] .layui-table td{border-color:var(--ui-td-line);color:var(--ui-ink-2)}
html[data-ui-template] .layui-table tbody tr:hover td,
html[data-ui-template] .layui-table-hover{background:var(--ui-tr-hover-bg) !important}
html[data-ui-template] .layui-table-click{background:var(--ui-tr-on-bg) !important}
html[data-ui-template] .layui-table-view{border-color:var(--ui-n200);border-radius:var(--ui-r-lg)}

/* 分页器 */
html[data-ui-template] .layui-laypage a,
html[data-ui-template] .layui-laypage span{
  background:var(--ui-n0);border-color:var(--ui-n200);color:var(--ui-ink-2);
  border-radius:var(--ui-r-sm);
  transition:transform var(--ui-fast) var(--ui-ez),box-shadow var(--ui-fast) var(--ui-ez),color var(--ui-fast) var(--ui-ez);
}
html[data-ui-template] .layui-laypage a:hover{color:var(--ui-cyan-ink);border-color:var(--ui-cyan-m);transform:translateY(-2px)}
html[data-ui-template] .layui-laypage .layui-laypage-curr .layui-laypage-em{background:var(--ui-navy)}
html[data-ui-template] .layui-laypage .layui-laypage-curr em{color:#fff}

/* 弹窗（layer） */
html[data-ui-template] .layui-layer{
  border-radius:var(--ui-r-lg);box-shadow:var(--ui-e3);
  animation:ui-pop var(--ui-slow) var(--ui-ez-spring) both;
}
@keyframes ui-pop{from{opacity:0;transform:translateY(14px) scale(.975)}to{opacity:1;transform:none}}
html[data-ui-template] .layui-layer-title{
  height:var(--ui-h-dialog-title);line-height:var(--ui-h-dialog-title);border-bottom:1px solid var(--ui-n100);
  background:var(--ui-n25);color:var(--ui-ink);
  font-family:var(--ui-sans);font-size:13px;font-weight:600;
}
html[data-ui-template] .layui-layer-btn a{
  height:var(--ui-h-btn-sm);line-height:var(--ui-h-btn-sm);border-radius:var(--ui-btn-r);
  background:var(--ui-btn-sec-bg);color:#F2F4F8;border-color:transparent;font-weight:500;
}
html[data-ui-template] .layui-layer-btn .layui-layer-btn0{background:var(--ui-btn-pri-bg);color:#fff}
html[data-ui-template] .layui-layer-btn a:hover{transform:translateY(-1px);box-shadow:var(--ui-e2)}
html[data-ui-template] .layui-layer-content{color:var(--ui-ink-2)}

/* 标签 / 徽章 */
html[data-ui-template] .layui-badge,
html[data-ui-template] .layui-badge-rim{
  border-radius:var(--ui-r-sm);font-size:12px;
}
html[data-ui-template] .layui-badge-rim{background:var(--ui-n0);color:var(--ui-ink-3);border-color:var(--ui-n200)}
html[data-ui-template] .m-badge2{background-color:var(--ui-ok) !important}
html[data-ui-template] .m-badge3{background-color:var(--ui-warn) !important}
html[data-ui-template] .m-badge4{background-color:var(--ui-n400) !important}
html[data-ui-template] .m-badge5{background-color:var(--ui-navy) !important;border-radius:var(--ui-r-sm) !important}
html[data-ui-template] .m-badge1{background-color:var(--ui-cyan-ink) !important}

/* ---------- 12 · 自绘徽章统一主题化（2026-10-08 用户反馈"分组颜色没跟主题走"） ----------
   背景：各页自绘了多套徽章调色板（组别 zb-badge / 裁判岗位 cp-badge / 领教岗位 gw-badge 等），
   用的还是旧版鲜亮色（#1e88e5 蓝 / #E91E9B 粉 / #FB8C00 橙 / #E53935 红 / #8E24AA 紫），
   换肤后唯独它们没变。此处统一映射到 V16 主题色（5 档循环）：
     1 藏蓝 → 2 暗红 → 3 橙黄 → 4 青 → 5 石墨（中性）
   页面里 <span class="zb-badge zbN"> 的 N 是"第几个第几档"的循环位，颜色语义仅作区分。 */
html[data-ui-template] .zb-badge,
html[data-ui-template] .cp-badge,
html[data-ui-template] .gw-badge{border-radius:var(--ui-r-sm) !important}
html[data-ui-template] .zb-badge.zb1,
html[data-ui-template] .cp-badge.b1,
html[data-ui-template] .gw-badge.b1{background:var(--ui-navy) !important}
html[data-ui-template] .zb-badge.zb2,
html[data-ui-template] .cp-badge.b2,
html[data-ui-template] .gw-badge.b2{background:var(--ui-red) !important}
html[data-ui-template] .zb-badge.zb3,
html[data-ui-template] .cp-badge.b3,
html[data-ui-template] .gw-badge.b3{background:var(--ui-amber) !important}
html[data-ui-template] .zb-badge.zb4,
html[data-ui-template] .cp-badge.b4,
html[data-ui-template] .gw-badge.b4{background:var(--ui-cyan-ink) !important}
html[data-ui-template] .zb-badge.zb5,
html[data-ui-template] .cp-badge.b5,
html[data-ui-template] .gw-badge.b5{background:var(--ui-n500) !important}

/* 折叠面板 */
html[data-ui-template] .layui-collapse{border-color:var(--ui-n200);border-radius:var(--ui-r-lg)}
html[data-ui-template] .layui-colla-item{border-color:var(--ui-n200)}
html[data-ui-template] .layui-colla-title{background:var(--ui-n25);color:var(--ui-ink);font-weight:600}
html[data-ui-template] .layui-colla-content{border-color:var(--ui-n200);color:var(--ui-ink-2)}

/* 顶部导航（layui-nav，商城端） */
html[data-ui-template] .layui-nav{background:transparent}
html[data-ui-template] .layui-nav .layui-nav-item a{color:var(--ui-head-text-dim)}
html[data-ui-template] .layui-nav .layui-nav-item a:hover,
html[data-ui-template] .layui-nav .layui-this a{color:#fff}

/* ==========================================================================
   2 · easyui 组件（用 body 前缀提特异性；不碰宽度类补丁）
   ========================================================================== */

/* 面板：卡片化（圆角 + 淡阴影 + 细边框）
   ⚠️ 边框**必须用 inset 阴影模拟**，不能写真的 border：
       .panel 是嵌套的（.panel > .panel-body，编排端还有 .panel > datagrid > .panel），
       1px 边框会层层相加 —— 实测编制端撑出 4px，直接破坏「刚好铺满视口」的高度链
       （1004 vs 1000：底部露出一条页面底 + 出现整页滚动条）。
       inset 阴影视觉等价，且完全不占布局空间。 */
body html[data-ui-template] .panel,
html[data-ui-template] body .panel{
  border:0 !important;border-radius:var(--ui-r-lg);
  box-shadow:inset 0 0 0 1px var(--ui-card-line),var(--ui-e1);
  background:var(--ui-card-bg);
}
body html[data-ui-template] .panel-header,
html[data-ui-template] body .panel-header{
  background:var(--ui-n25);border-color:var(--ui-n100);border-radius:var(--ui-r-lg) var(--ui-r-lg) 0 0;
}
body html[data-ui-template] .panel-title,
html[data-ui-template] body .panel-title{color:var(--ui-ink);font-weight:600;font-size:var(--ui-fs-card-title)}
body html[data-ui-template] .panel-body,
html[data-ui-template] body .panel-body{background:var(--ui-card-bg);color:var(--ui-ink-2)}
/* ★ 2026-10-09 用户要求：编排端顶部菜单栏不要卡片圆角，只有按钮是圆角。
   菜单条所在的外层是 easyui 的 .panel-htop（被上面 .panel 的卡片化规则给了 8px 圆角 + overflow:hidden 裁角），
   整条横栏贴边，圆角会在页面左上/右上角露出底色。
   ⚠️ 选择器必须与上面那条 .panel 规则同特异性（(0,2,2)）才压得住（同特异性下靠后生效 + !important）。 */
body html[data-ui-template] .panel-htop,
html[data-ui-template] body .panel-htop{border-radius:0 !important}
/* ★ 2026-10-09 同步放开 north 面板的裁剪：Vue 菜单的下拉面板会伸出这条横栏（absolute 定位），
   easyui 给 layout 面板的 overflow:hidden 会把它裁掉。只影响 north 面板，内容区不受影响。 */
body html[data-ui-template] .panel-htop,
html[data-ui-template] body .panel-htop{overflow:visible !important}
body html[data-ui-template] .panel-tool a,
html[data-ui-template] body .panel-tool a{opacity:.6}
body html[data-ui-template] .panel-tool a:hover,
html[data-ui-template] body .panel-tool a:hover{opacity:1}

/* 分栏面板 */
body html[data-ui-template] .layout-panel > .panel-body,
html[data-ui-template] body .layout-panel > .panel-body{background:transparent}

/* 数据表格 */
body html[data-ui-template] .datagrid-wrap,
html[data-ui-template] body .datagrid-wrap{border-color:var(--ui-n200);border-radius:var(--ui-r-sm)}
body html[data-ui-template] .datagrid-header td,
html[data-ui-template] body .datagrid-header td{
  background:var(--ui-th-bg) !important;border-color:var(--ui-th-line) !important;
}
body html[data-ui-template] .datagrid-header .datagrid-cell,
html[data-ui-template] body .datagrid-header .datagrid-cell{
  color:var(--ui-th-color) !important;font-family:var(--ui-mono);
  font-size:11px;letter-spacing:.08em;font-weight:600;
}
body html[data-ui-template] .datagrid-btable td,
html[data-ui-template] body .datagrid-btable td{
  border-color:var(--ui-td-line) !important;background:var(--ui-n0);
  color:var(--ui-ink-2);transition:background var(--ui-fast) var(--ui-ez);
}
body html[data-ui-template] .datagrid-btable tr:hover td,
html[data-ui-template] body .datagrid-btable tr:hover td{background:var(--ui-tr-hover-bg) !important}
/* 行选中：浅青底 + 左侧青条（压掉 easyui 默认黄底，项目内已有同类先例） */
body html[data-ui-template] .datagrid-row-selected td,
html[data-ui-template] body .datagrid-row-selected td{background:var(--ui-tr-on-bg) !important;color:var(--ui-ink) !important}
body html[data-ui-template] .datagrid-row-selected td:first-child,
html[data-ui-template] body .datagrid-row-selected td:first-child{box-shadow:inset 2px 0 0 var(--ui-tr-hover-line)}
body html[data-ui-template] .datagrid-row-over td,
html[data-ui-template] body .datagrid-row-over td{background:var(--ui-tr-hover-bg) !important}

/* 分页条 */
body html[data-ui-template] .datagrid-pager,
html[data-ui-template] body .datagrid-pager{border-color:var(--ui-n200);background:var(--ui-n25)}
body html[data-ui-template] .pagination a,
html[data-ui-template] body .pagination a{border-radius:var(--ui-r-sm)}
body html[data-ui-template] .pagination .pagination-num,
html[data-ui-template] body .pagination .pagination-num{border-color:var(--ui-n200);border-radius:var(--ui-r-sm)}
body html[data-ui-template] .pagination .l-btn-plain-selected,
html[data-ui-template] body .pagination .l-btn-plain-selected{background:var(--ui-navy)}

/* 链接按钮（easyui l-btn） */
body html[data-ui-template] .l-btn,
html[data-ui-template] body .l-btn{
  border-radius:var(--ui-btn-r);border-color:var(--ui-n300)!important;
  background:var(--ui-n0);color:var(--ui-ink-2);
  transition:transform var(--ui-fast) var(--ui-ez),box-shadow var(--ui-fast) var(--ui-ez);
}
body html[data-ui-template] .l-btn:hover,
html[data-ui-template] body .l-btn:hover{
  border-color:var(--ui-cyan-m)!important;color:var(--ui-cyan-ink);
  background:var(--ui-cyan-soft);transform:translateY(-1px);box-shadow:var(--ui-e2);
}
body html[data-ui-template] .l-btn-plain,
html[data-ui-template] body .l-btn-plain{background:transparent;border-color:transparent!important}

/* 输入框 / 下拉 / 日期 / 数字 */
body html[data-ui-template] .textbox,
html[data-ui-template] body .textbox{border-color:var(--ui-n200);border-radius:var(--ui-r-sm);background:var(--ui-n0)}
body html[data-ui-template] .textbox-focused,
html[data-ui-template] body .textbox-focused{border-color:var(--ui-cyan-ink);box-shadow:0 0 0 3px rgba(14,116,144,.14)}
body html[data-ui-template] .textbox .textbox-text,
html[data-ui-template] body .textbox .textbox-text{color:var(--ui-ink)}
body html[data-ui-template] .combo-panel,
html[data-ui-template] body .combo-panel{border-color:var(--ui-n200);border-radius:var(--ui-r-sm);box-shadow:var(--ui-e2);background:var(--ui-n0)}
body html[data-ui-template] .combobox-item-hover,
html[data-ui-template] body .combobox-item-hover{background:var(--ui-cyan-soft);color:var(--ui-cyan-ink)}
body html[data-ui-template] .combobox-item-selected,
html[data-ui-template] body .combobox-item-selected{background:var(--ui-navy);color:#fff}
body html[data-ui-template] .datebox-button a,
html[data-ui-template] body .datebox-button a{color:var(--ui-cyan-ink)}
body html[data-ui-template] .calendar-day.calendar-selected,
html[data-ui-template] body .calendar-day.calendar-selected{background:var(--ui-navy);border-color:var(--ui-navy)}

/* 窗口 / 对话框 */
body html[data-ui-template] .window,
html[data-ui-template] body .window{border-radius:var(--ui-r-lg);box-shadow:var(--ui-e3);border-color:var(--ui-n200)}
body html[data-ui-template] .window .panel-header,
html[data-ui-template] body .window .panel-header{background:var(--ui-n25);border-radius:var(--ui-r-lg) var(--ui-r-lg) 0 0}
body html[data-ui-template] .window .panel-body,
html[data-ui-template] body .window .panel-body{background:var(--ui-n0)}
body html[data-ui-template] .window-shadow,
html[data-ui-template] body .window-shadow{background:rgba(10,22,51,.45)}
body html[data-ui-template] .window-mask,
html[data-ui-template] body .window-mask{background:rgba(10,22,51,.35) !important;opacity:1 !important}

/* 树（左侧菜单 / 组织树） */
body html[data-ui-template] .tree-node,
html[data-ui-template] body .tree-node{border-radius:var(--ui-r-sm);transition:background var(--ui-fast) var(--ui-ez)}
body html[data-ui-template] .tree-node-hover,
html[data-ui-template] body .tree-node-hover{background:var(--ui-side-hover-bg);color:var(--ui-cyan-ink)}
body html[data-ui-template] .tree-node-selected,
html[data-ui-template] body .tree-node-selected{background:var(--ui-navy) !important;color:#fff !important;border-radius:var(--ui-r-sm)}
body html[data-ui-template] .tree-title,
html[data-ui-template] body .tree-title{color:inherit}

/* 选项卡 */
body html[data-ui-template] .tabs-header,
html[data-ui-template] body .tabs-header{background:var(--ui-n25);border-color:var(--ui-n200)}
body html[data-ui-template] .tabs li a.tabs-inner,
html[data-ui-template] body .tabs li a.tabs-inner{border-radius:var(--ui-r-sm) var(--ui-r-sm) 0 0;color:var(--ui-ink-3)}
body html[data-ui-template] .tabs li.tabs-selected a.tabs-inner,
html[data-ui-template] body .tabs li.tabs-selected a.tabs-inner{color:var(--ui-navy);font-weight:600}

/* 进度条 / 工具提示 */
body html[data-ui-template] .tooltip,
html[data-ui-template] body .tooltip{background:var(--ui-navy);color:#fff;border-radius:var(--ui-r-sm)}

/* ==========================================================================
   3 · 自绘组件（新增，供按页面逐步启用；不改现有类名，只加 .ui-* 前缀）
   ========================================================================== */

/* 顶栏附加件：扫描光（很淡、很慢 —— 见规范"循环动效弱而慢"原则） */
html[data-ui-template] .ui-scan{
  position:absolute;top:0;bottom:0;width:var(--ui-head-scan-w);pointer-events:none;
  background:linear-gradient(90deg,transparent,var(--ui-head-scan),transparent);
  animation:ui-scan var(--ui-head-scan-dur) linear infinite;
}
@keyframes ui-scan{0%{left:calc(0px - var(--ui-head-scan-w))}100%{left:100%}}

/* 顶栏底部：青色分道线 */
html[data-ui-template] .ui-head-line{position:relative}
html[data-ui-template] .ui-head-line::after{
  content:"";position:absolute;left:0;right:0;bottom:0;height:2px;
  background:linear-gradient(90deg,transparent,var(--ui-head-line) 22%,var(--ui-head-line) 78%,transparent);
  opacity:.8;
}

/* 实时状态灯 */
html[data-ui-template] .ui-live{display:inline-flex;align-items:center;gap:7px;font-family:var(--ui-mono);font-size:11px;letter-spacing:.12em}
html[data-ui-template] .ui-live::before{
  content:"";width:7px;height:7px;border-radius:50%;background:var(--ui-cyan);
  box-shadow:0 0 10px var(--ui-cyan);animation:ui-beat 3.6s var(--ui-ez) infinite;
}
@keyframes ui-beat{0%,100%{opacity:1;transform:scale(1)}50%{opacity:.62;transform:scale(1.18)}}

/* 页面标题（一级层级：30px） */
html[data-ui-template] .ui-page-title{
  margin:0;font-family:var(--ui-sans);font-size:var(--ui-fs-page-title);
  font-weight:600;line-height:1.15;letter-spacing:var(--ui-ls-tight);color:var(--ui-red);
}

/* KPI 大数字（数据色） */
html[data-ui-template] .ui-kpi{display:flex;gap:var(--ui-s6);flex-wrap:wrap}
html[data-ui-template] .ui-kpi > div b{
  display:block;font-size:var(--ui-fs-kpi);font-weight:600;line-height:1.05;color:var(--ui-amber);
  letter-spacing:var(--ui-ls-tight);
}
html[data-ui-template] .ui-kpi > div span{
  display:block;margin-top:6px;font-family:var(--ui-mono);font-size:10.5px;letter-spacing:.14em;color:var(--ui-ink-4);
}

/* 成绩数字：由模板变量控制（V16 纯黑等宽 / V6 电子计时牌） */
html[data-ui-template] .ui-lap{
  display:inline-flex;align-items:center;padding:2px 8px;border-radius:var(--ui-r-sm);
  background:var(--ui-lap-bg);color:var(--ui-lap-color);
  border:1px solid var(--ui-lap-border);
  font-family:var(--ui-mono);font-size:var(--ui-fs-stat);font-weight:600;
  font-variant-numeric:tabular-nums;
  box-shadow:var(--ui-lap-glow);text-shadow:var(--ui-lap-text-shadow);
}
html[data-ui-template] .ui-lap.is-pb{color:var(--ui-lap-pb-color);background:var(--ui-lap-pb-bg);font-weight:700}

/* 状态标签（点 + 文字） */
html[data-ui-template] .ui-tag{
  display:inline-flex;align-items:center;gap:6px;height:23px;padding:0 9px;border-radius:var(--ui-r-sm);
  font-size:12px;font-weight:500;border:1px solid transparent;
}
html[data-ui-template] .ui-tag::before{content:"";width:5px;height:5px;border-radius:50%;background:currentColor;opacity:.85}
html[data-ui-template] .ui-tag.is-ok{background:var(--ui-ok-bg);color:var(--ui-ok)}
html[data-ui-template] .ui-tag.is-warn{background:var(--ui-warn-bg);color:var(--ui-warn)}
html[data-ui-template] .ui-tag.is-mute{background:var(--ui-n100);color:var(--ui-ink-3)}
html[data-ui-template] .ui-tag.is-info{background:var(--ui-cyan-soft);color:var(--ui-cyan-ink)}

/* 分段筛选 */
html[data-ui-template] .ui-seg{display:inline-flex;padding:2px;gap:2px;background:var(--ui-n100);border-radius:var(--ui-r-sm)}
html[data-ui-template] .ui-seg button{
  height:32px;padding:0 13px;border:0;border-radius:3px;background:transparent;
  font-family:var(--ui-sans);font-size:12.5px;font-weight:500;color:var(--ui-ink-3);cursor:pointer;
  transition:background var(--ui-base) var(--ui-ez),color var(--ui-base) var(--ui-ez),
             box-shadow var(--ui-base) var(--ui-ez),transform var(--ui-base) var(--ui-ez-spring);
}
html[data-ui-template] .ui-seg button:hover{color:var(--ui-cyan-ink);background:var(--ui-cyan-soft)}
html[data-ui-template] .ui-seg button.is-on{
  background:var(--ui-n0);color:var(--ui-navy);box-shadow:var(--ui-e1);transform:scale(1.03);
}

/* 搜索框 */
html[data-ui-template] .ui-search{position:relative;display:inline-block}
html[data-ui-template] .ui-search input{
  height:var(--ui-h-input);padding:0 var(--ui-s3);border:1px solid var(--ui-n200);border-radius:var(--ui-r-sm);
  background:var(--ui-n0);color:var(--ui-ink);outline:none;
  transition:border-color var(--ui-fast) var(--ui-ez),box-shadow var(--ui-fast) var(--ui-ez);
}
html[data-ui-template] .ui-search input:focus{border-color:var(--ui-cyan-ink);box-shadow:0 0 0 4px rgba(14,116,144,.16)}

/* 页脚 */
html[data-ui-template] .ui-foot{
  display:flex;align-items:center;gap:var(--ui-s5);flex-wrap:wrap;
  padding:var(--ui-s6);margin-top:var(--ui-s8);border-radius:var(--ui-r-lg);
  background:linear-gradient(100deg,#0F1630,var(--ui-navy-deep) 70%,var(--ui-navy-lite));
  color:rgba(244,241,234,.68);font-size:12.5px;
  box-shadow:0 4px 18px rgba(27,42,94,.22);
}
html[data-ui-template] .ui-foot a{color:rgba(244,241,234,.72);text-decoration:none;transition:color var(--ui-fast) var(--ui-ez)}
html[data-ui-template] .ui-foot a:hover{color:var(--ui-cyan)}

/* 键盘可见性（可用性评分项） */
html[data-ui-template] a:focus-visible,
html[data-ui-template] button:focus-visible,
html[data-ui-template] input:focus-visible,
html[data-ui-template] [tabindex]:focus-visible{
  outline:2px solid var(--ui-cyan-ink);outline-offset:2px;
}

/* ==========================================================================
   0 · 页面底（补：layout 内联 html,body{background:#f5f5f5} 需要被覆盖）
   ⚠️ 仅在带 data-ui-template 的页面生效 —— 打印页与独立页不含该属性，
      因此它们的白底/灰底不会被污染。
   ========================================================================== */
html[data-ui-template],
html[data-ui-template] body{background:var(--ui-n50)}
html[data-ui-template] .tj-body{background:transparent}
html[data-ui-template] #tj-head .panel-header,

/* ==========================================================================
   4 · easyui 强制覆盖（theme.css 第 2 节压不住的项目）
   ---------------------------------------------------------------------------
   easyui 的 color.css / easyui.css 里有大量 !important 与行内样式，普通覆盖无效。
   这里在 html[data-ui-template] 前缀下加 !important —— 与项目内既有做法一致
   （如 bsgcLq.html 用 !important 压掉选中行黄底）。
   ⚠️ 只覆盖颜色/圆角/边框/阴影，**不碰任何 width/height/padding**，
      以免破坏 .tj-body{padding:2px} 的高度链与 easyui 宽度补丁。
   ========================================================================== */

/* —— 二级导航条（布局内联已变量化，这里补菜单按钮文字色） —— */

/* —— 顶栏右侧操作按钮（easyui-linkbutton，带 plain 属性的透明按钮） —— */
html[data-ui-template] #tj-head .l-btn{background:transparent !important;border-color:transparent !important;box-shadow:none !important}
html[data-ui-template] #tj-head .l-btn:hover{background:rgba(255,255,255,.14) !important;border-color:transparent !important;transform:none !important}

/* —— 页面面板头（左侧"系统设置"那条 + 各卡片头） —— */
html[data-ui-template] .panel-header{background:var(--ui-n25) !important;border-color:var(--ui-n100) !important}
html[data-ui-template] .panel-header .panel-title{color:var(--ui-ink) !important;font-weight:600 !important}

/* —— 左侧树菜单（系统设置页的 19 项 / 各页左栏） —— */
html[data-ui-template] .tree-node{background:transparent !important}
html[data-ui-template] .tree-node-hover{background:var(--ui-side-hover-bg) !important;color:var(--ui-cyan-ink) !important}
html[data-ui-template] .tree-node-selected{background:var(--ui-side-on-bg) !important;color:#fff !important;border-radius:var(--ui-r-sm) !important}
html[data-ui-template] .tree-node-selected .tree-title{color:#fff !important}
html[data-ui-template] .tree-title{color:var(--ui-ink-2) !important}

/* —— 按钮：easyui l-btn（含 plain / 普通 / 确定取消） —— */
html[data-ui-template] .l-btn{
  background:var(--ui-n0) !important;border-color:var(--ui-n300) !important;color:var(--ui-ink-2) !important;
  border-radius:var(--ui-btn-r) !important;
}
html[data-ui-template] .l-btn:hover{
  background:var(--ui-cyan-soft) !important;border-color:var(--ui-cyan-m) !important;color:var(--ui-cyan-ink) !important;
}
html[data-ui-template] .l-btn-plain{background:transparent !important;border-color:transparent !important}
html[data-ui-template] .l-btn-plain:hover{background:var(--ui-cyan-soft) !important;color:var(--ui-cyan-ink) !important}
/* easyui 的 primary 按钮（部分页面用 l-btn-selected 表示激活） */
html[data-ui-template] .l-btn-selected{
  background:var(--ui-btn-sec-bg) !important;border-color:transparent !important;color:#fff !important;
}

/* —— 表格：表头 / 行 / 选中行 / 悬停行 —— */
html[data-ui-template] .datagrid-header td,
html[data-ui-template] .datagrid-header-row td{background:var(--ui-th-bg) !important}
html[data-ui-template] .datagrid-header .datagrid-cell{color:var(--ui-th-color) !important;font-weight:600 !important}
html[data-ui-template] .datagrid-btable td{background:var(--ui-n0) !important;border-color:var(--ui-td-line) !important;color:var(--ui-ink-2) !important}
html[data-ui-template] .datagrid-row-over td{background:var(--ui-tr-hover-bg) !important}
html[data-ui-template] .datagrid-row-selected td{background:var(--ui-tr-on-bg) !important;color:var(--ui-ink) !important}
html[data-ui-template] .datagrid-row-selected{background:var(--ui-tr-on-bg) !important}

/* —— 分页 / 输入框 / 下拉 / 窗口 —— */
html[data-ui-template] .pagination .l-btn-plain-selected{background:var(--ui-navy) !important;color:#fff !important}
html[data-ui-template] .textbox{border-color:var(--ui-n200) !important;background:var(--ui-n0) !important}
html[data-ui-template] .textbox .textbox-text{color:var(--ui-ink) !important}
html[data-ui-template] .combo-panel{background:var(--ui-n0) !important;border-color:var(--ui-n200) !important}
html[data-ui-template] .window .panel-header{background:var(--ui-n25) !important}
html[data-ui-template] .window-body{background:var(--ui-n0) !important}

/* ==========================================================================
   5 · 页面内联样式的通用覆盖（各页自己写的浅蓝/边框，需压过内联）
   ⚠️ 同样只在 html[data-ui-template] 下生效，且不改尺寸
   ========================================================================== */
/* easyui 开关按钮（"允许访问/禁止访问"那类） */
html[data-ui-template] .switchbutton,
html[data-ui-template] .switchbutton-on{background:var(--ui-navy) !important;border-color:var(--ui-navy) !important}
html[data-ui-template] .switchbutton-off{background:var(--ui-n400) !important;border-color:var(--ui-n400) !important}
html[data-ui-template] .switchbutton .switchbutton-text{color:#fff !important}

/* 系统设置页（xtsz）自带的内联配色 */
html[data-ui-template] .xtsz-nav{background:var(--ui-n100) !important;border-color:var(--ui-n200) !important;border-radius:var(--ui-r) !important}
html[data-ui-template] .xtsz-nav a{color:var(--ui-ink-2) !important;border-bottom-color:var(--ui-n200) !important}
html[data-ui-template] .xtsz-nav a:hover{background:var(--ui-cyan-soft) !important;color:var(--ui-cyan-ink) !important}
html[data-ui-template] .xtsz-nav a.on{background:var(--ui-navy) !important;color:#fff !important;font-weight:500 !important}
html[data-ui-template] .xtsz-panel{background:var(--ui-n0) !important;border-color:var(--ui-n200) !important;border-radius:var(--ui-r-lg) !important}
html[data-ui-template] .xtsz-sec{background:var(--ui-n25) !important;border-color:var(--ui-n100) !important;border-radius:var(--ui-r) !important}
html[data-ui-template] .xtsz-sec .sec-t{color:var(--ui-ink) !important}
html[data-ui-template] .xtsz-row>span.lab{color:var(--ui-ink-2) !important}
html[data-ui-template] .xtsz-note,html[data-ui-template] .xtsz-row .sub{color:var(--ui-ink-3) !important}
html[data-ui-template] .tag{background:var(--ui-ok) !important;border-radius:var(--ui-r-sm) !important}
html[data-ui-template] .tag-gray{background:var(--ui-n400) !important}
html[data-ui-template] .tag-orange{background:var(--ui-warn) !important}
html[data-ui-template] .tag-blue{background:var(--ui-navy) !important;border-radius:var(--ui-r-sm) !important}
html[data-ui-template] .dict-link{color:var(--ui-cyan-ink) !important}

/* 顶栏二级导航条文字（easyui-menubutton） */
html[data-ui-template] #tj-head .easyui-menubutton,
html[data-ui-template] #tj-head .easyui-menubutton .m-btn{background:transparent !important;border-color:transparent !important}

/* ==========================================================================
   6 · 全组件覆盖（2026-10-07 补全：表格 / 表单 / 弹窗 / 树 / 选项卡 / 菜单 /
        工具栏 / 徽章 / 加载 / 滚动条）
   ---------------------------------------------------------------------------
   原则不变：只改颜色·圆角·边框·阴影·动效；不改 width/height/padding，
   以免破坏 .tj-body{padding:2px} 的高度链与 easyui 宽度补丁。
   ========================================================================== */

/* ---------- 6.1 数据表格（easyui datagrid）完整覆盖 ---------- */
html[data-ui-template] .datagrid-wrap{border:1px solid var(--ui-n200) !important;border-radius:var(--ui-r-sm) !important;background:var(--ui-n0) !important}
html[data-ui-template] .datagrid-view,
html[data-ui-template] .datagrid-view1,
html[data-ui-template] .datagrid-view2{background:var(--ui-n0) !important}
html[data-ui-template] .datagrid-header,
html[data-ui-template] .datagrid-header-inner{background:var(--ui-th-bg) !important;border-color:var(--ui-th-line) !important}
html[data-ui-template] .datagrid-header td{border-right-color:var(--ui-th-line) !important;border-bottom-color:var(--ui-th-line) !important;background:var(--ui-th-bg) !important}
html[data-ui-template] .datagrid-header .datagrid-cell span{color:var(--ui-th-color) !important;font-weight:600 !important}
html[data-ui-template] .datagrid-header-rownumber,
html[data-ui-template] .datagrid-cell-rownumber{color:var(--ui-th-color) !important;background:var(--ui-th-bg) !important}
html[data-ui-template] .datagrid-body{background:var(--ui-n0) !important}
html[data-ui-template] .datagrid-btable td{border-right-color:var(--ui-td-line) !important;border-bottom-color:var(--ui-td-line) !important}
html[data-ui-template] .datagrid-btable .datagrid-cell{color:var(--ui-ink-2) !important}
html[data-ui-template] .datagrid-row-alt td{background:var(--ui-n25) !important}
html[data-ui-template] .datagrid-row-over td,
html[data-ui-template] .datagrid-row-over .datagrid-cell{background:var(--ui-tr-hover-bg) !important;color:var(--ui-ink) !important}
html[data-ui-template] .datagrid-row-selected td,
html[data-ui-template] .datagrid-row-selected .datagrid-cell{background:var(--ui-tr-on-bg) !important;color:var(--ui-ink) !important}
html[data-ui-template] .datagrid-row-checked td{background:var(--ui-tr-on-bg) !important}
html[data-ui-template] .datagrid-footer,
html[data-ui-template] .datagrid-footer-inner{background:var(--ui-n25) !important;border-color:var(--ui-n200) !important}
html[data-ui-template] .datagrid-view1 .datagrid-body{background:var(--ui-n25) !important}
html[data-ui-template] .datagrid-editable-input{border-color:var(--ui-cyan-ink) !important}
html[data-ui-template] .datagrid-mask{background:rgba(10,22,51,.28) !important;opacity:1 !important}
html[data-ui-template] .datagrid-mask-msg{border-radius:var(--ui-r) !important;background:var(--ui-n0) !important;border-color:var(--ui-n200) !important;color:var(--ui-ink-2) !important}
/* layui table（商城端） */
html[data-ui-template] .layui-table-view{border-radius:var(--ui-r-lg) !important}
html[data-ui-template] .layui-table th{background:var(--ui-th-bg) !important;color:var(--ui-th-color) !important}
html[data-ui-template] .layui-table td{border-color:var(--ui-td-line) !important}
html[data-ui-template] .layui-table tbody tr:hover{background:var(--ui-tr-hover-bg) !important}

/* ---------- 6.2 分页（easyui pagination / layui laypage） ---------- */
html[data-ui-template] .pagination{background:var(--ui-n25) !important;border-color:var(--ui-n200) !important}
html[data-ui-template] .pagination a.l-btn,
html[data-ui-template] .pagination .l-btn{background:transparent !important;border-color:transparent !important;color:var(--ui-ink-3) !important}
html[data-ui-template] .pagination a.l-btn:hover,
html[data-ui-template] .pagination .l-btn:hover{background:var(--ui-cyan-soft) !important;color:var(--ui-cyan-ink) !important}
html[data-ui-template] .pagination .l-btn-plain-selected,
html[data-ui-template] .pagination .l-btn-selected{background:var(--ui-navy) !important;color:#fff !important;border-color:transparent !important}
html[data-ui-template] .pagination .pagination-num{border-color:var(--ui-n200) !important;border-radius:var(--ui-r-sm) !important;color:var(--ui-ink) !important}
html[data-ui-template] .pagination span,
html[data-ui-template] .pagination .pagination-info,
html[data-ui-template] .pagination .pagination-btn-separator{border-color:var(--ui-n200) !important;color:var(--ui-ink-3) !important}
html[data-ui-template] .layui-laypage a,
html[data-ui-template] .layui-laypage span{border-radius:var(--ui-r-sm) !important}
html[data-ui-template] .layui-laypage .layui-laypage-curr .layui-laypage-em{background:var(--ui-navy) !important}

/* ---------- 6.3 表单：输入框 / 下拉 / 日期 / 数字 / 复选 / 单选 / 开关 ---------- */
html[data-ui-template] .textbox,
html[data-ui-template] .textbox-text,
html[data-ui-template] .textbox-addon{background:var(--ui-n0) !important}
html[data-ui-template] .textbox{border-color:var(--ui-n200) !important;border-radius:var(--ui-r-sm) !important}
html[data-ui-template] .textbox:hover{border-color:var(--ui-cyan-m) !important}
html[data-ui-template] .textbox-focused,
html[data-ui-template] .textbox-focus{border-color:var(--ui-cyan-ink) !important;box-shadow:0 0 0 3px rgba(14,116,144,.14) !important}
html[data-ui-template] .textbox-text{color:var(--ui-ink) !important}
html[data-ui-template] .combo-panel{border-color:var(--ui-n200) !important;border-radius:var(--ui-r-sm) !important;box-shadow:var(--ui-e2) !important}
html[data-ui-template] .combobox-item{color:var(--ui-ink-2) !important}
html[data-ui-template] .combobox-item-hover{background:var(--ui-cyan-soft) !important;color:var(--ui-cyan-ink) !important}
html[data-ui-template] .combobox-item-selected{background:var(--ui-navy) !important;color:#fff !important}
html[data-ui-template] .datebox-button a{color:var(--ui-cyan-ink) !important;background:transparent !important}
html[data-ui-template] .calendar{border-color:var(--ui-n200) !important;background:var(--ui-n0) !important}
html[data-ui-template] .calendar-title{color:var(--ui-ink) !important}
html[data-ui-template] .calendar-day{color:var(--ui-ink-2) !important}
html[data-ui-template] .calendar-other-month{color:var(--ui-ink-4) !important}
html[data-ui-template] .calendar-day.calendar-selected,
html[data-ui-template] .calendar-selected{background:var(--ui-navy) !important;color:#fff !important}
html[data-ui-template] .calendar-day:hover{background:var(--ui-cyan-soft) !important}
html[data-ui-template] .spinner{border-color:var(--ui-n200) !important;background:var(--ui-n0) !important}
html[data-ui-template] .spinner-text{color:var(--ui-ink) !important}
html[data-ui-template] .switchbutton,
html[data-ui-template] .switchbutton-on{background:var(--ui-navy) !important;border-color:var(--ui-navy) !important}
html[data-ui-template] .switchbutton-off{background:var(--ui-n400) !important;border-color:var(--ui-n400) !important}
html[data-ui-template] .switchbutton-text{color:#fff !important}
html[data-ui-template] input[type=checkbox],
html[data-ui-template] input[type=radio]{accent-color:var(--ui-cyan-ink)}
html[data-ui-template] .layui-form-checked[lay-skin=primary] i,
html[data-ui-template] .layui-form-checked[lay-skin=primary]:hover i{background-color:var(--ui-cyan-ink) !important;border-color:var(--ui-cyan-ink) !important}
html[data-ui-template] .layui-input,
html[data-ui-template] .layui-textarea{border-color:var(--ui-n200) !important;border-radius:var(--ui-r-sm) !important;color:var(--ui-ink) !important;background:var(--ui-n0) !important}
html[data-ui-template] .layui-input:focus,
html[data-ui-template] .layui-textarea:focus{border-color:var(--ui-cyan-ink) !important;box-shadow:0 0 0 3px rgba(14,116,144,.14) !important}
html[data-ui-template] .layui-form-select dl{background:var(--ui-n0) !important;border-color:var(--ui-n200) !important;border-radius:var(--ui-r-sm) !important}
html[data-ui-template] .layui-form-select dl dd.layui-this{background:var(--ui-navy) !important;color:#fff !important}
html[data-ui-template] .layui-form-select dl dd:hover{background:var(--ui-cyan-soft) !important}
html[data-ui-template] .layui-form-label,
html[data-ui-template] .layui-form-mid{color:var(--ui-ink-3) !important}

/* ---------- 6.4 弹窗：layer / easyui window·dialog·messager ---------- */
html[data-ui-template] .layui-layer{border-radius:var(--ui-r-lg) !important;box-shadow:var(--ui-e3) !important}
html[data-ui-template] .layui-layer-title{background:var(--ui-n25) !important;border-bottom-color:var(--ui-n100) !important;color:var(--ui-ink) !important}
html[data-ui-template] .layui-layer-content{color:var(--ui-ink-2) !important;background:var(--ui-n0) !important}
html[data-ui-template] .layui-layer-btn a{background:var(--ui-btn-sec-bg) !important;color:#F2F4F8 !important;border-color:transparent !important;border-radius:var(--ui-btn-r) !important}
html[data-ui-template] .layui-layer-btn .layui-layer-btn0{background:var(--ui-btn-pri-bg) !important;color:#fff !important}
html[data-ui-template] .layui-layer-shade{background:rgba(10,22,51,.45) !important;opacity:1 !important}
html[data-ui-template] .window{border-radius:var(--ui-r-lg) !important;box-shadow:var(--ui-e3) !important;border-color:var(--ui-n200) !important}
html[data-ui-template] .window .panel-header{background:var(--ui-n25) !important;border-radius:var(--ui-r-lg) var(--ui-r-lg) 0 0 !important}
html[data-ui-template] .window .panel-title{color:var(--ui-ink) !important}
html[data-ui-template] .window .panel-body{background:var(--ui-n0) !important}
html[data-ui-template] .window-shadow{background:rgba(10,22,51,.45) !important;opacity:1 !important}
html[data-ui-template] .window-mask{background:rgba(10,22,51,.35) !important;opacity:1 !important}
html[data-ui-template] .messager-body{color:var(--ui-ink-2) !important;background:var(--ui-n0) !important}
html[data-ui-template] .messager-button{background:var(--ui-n25) !important;border-top-color:var(--ui-n100) !important}
html[data-ui-template] .messager-button .l-btn{background:var(--ui-btn-sec-bg) !important;color:#F2F4F8 !important;border-color:transparent !important}
html[data-ui-template] .messager-button .l-btn:hover{background:var(--ui-btn-sec-bg-hover) !important;color:#fff !important}
html[data-ui-template] .tooltip{border-radius:var(--ui-r-sm) !important;background:var(--ui-navy) !important;color:#fff !important;border-color:transparent !important}

/* ---------- 6.5 树 / 选项卡 / 菜单 / 工具栏 ---------- */
html[data-ui-template] .tree{background:var(--ui-n0) !important;border-color:var(--ui-n200) !important}
html[data-ui-template] .tree-node{background:transparent !important;color:var(--ui-ink-2) !important}
html[data-ui-template] .tree-node-hover{background:var(--ui-side-hover-bg) !important;color:var(--ui-cyan-ink) !important}
html[data-ui-template] .tree-node-selected{background:var(--ui-side-on-bg) !important;color:#fff !important}
/* ★ 2026-10-07 用户反馈：录入成绩页树选中行「藏蓝底 + 天蓝字」看不清。
   根因：树节点 HTML 由服务端生成，文字套了内联颜色（<span style="color:blue">、<font color=navy>），
   普通继承规则压不住内联色 ⇒ 选中态下其所有后代统一强制白字（!important 可压内联色）。 */
html[data-ui-template] .tree-node-selected .tree-title,
html[data-ui-template] .tree-node-selected .tree-title *{color:#fff !important}
html[data-ui-template] .tree-title{color:inherit !important}
html[data-ui-template] .tabs-header{background:var(--ui-n25) !important;border-color:var(--ui-n200) !important}
html[data-ui-template] .tabs li a.tabs-inner{background:transparent !important;border-color:var(--ui-n200) !important;color:var(--ui-ink-3) !important;border-radius:var(--ui-r-sm) var(--ui-r-sm) 0 0 !important}
html[data-ui-template] .tabs li.tabs-selected a.tabs-inner{background:var(--ui-n0) !important;color:var(--ui-navy) !important}
html[data-ui-template] .tabs-panels{border-color:var(--ui-n200) !important;background:var(--ui-n0) !important}
html[data-ui-template] .menu{background:var(--ui-n0) !important;border-color:var(--ui-n200) !important;border-radius:var(--ui-r-sm) !important;box-shadow:var(--ui-e2) !important}
html[data-ui-template] .menu-item-text{color:var(--ui-ink-2) !important}
html[data-ui-template] .menu-item:hover,
html[data-ui-template] .menu-item-active{background:var(--ui-cyan-soft) !important}
html[data-ui-template] .menu-item:hover .menu-item-text,
html[data-ui-template] .menu-item-active .menu-item-text{color:var(--ui-cyan-ink) !important}
html[data-ui-template] .menu-sep{border-top-color:var(--ui-n200) !important}
html[data-ui-template] .m-btn,
html[data-ui-template] .m-btn-plain-active{background:transparent !important;border-color:transparent !important}
html[data-ui-template] .m-btn-plain-active{background:rgba(27,42,94,.10) !important}
html[data-ui-template] .datagrid-toolbar{background:var(--ui-n25) !important;border-color:var(--ui-n200) !important}
html[data-ui-template] .datagrid-toolbar .l-btn{background:transparent !important;border-color:transparent !important;color:var(--ui-ink-2) !important}
html[data-ui-template] .datagrid-toolbar .l-btn:hover{background:var(--ui-cyan-soft) !important;color:var(--ui-cyan-ink) !important}
html[data-ui-template] .datagrid-toolbar .l-btn .l-btn-text{color:inherit !important}
html[data-ui-template] .layui-tab{border-color:var(--ui-n200) !important}
html[data-ui-template] .layui-tab-title li.layui-this{color:var(--ui-navy) !important}
html[data-ui-template] .layui-tab-title .layui-this:after{background:var(--ui-navy) !important}

/* ---------- 6.6 进度条 / 加载 / 滚动条 ---------- */
html[data-ui-template] .progressbar{border-color:var(--ui-n200) !important;border-radius:var(--ui-r-sm) !important;background:var(--ui-n100) !important}
html[data-ui-template] .progressbar-text{color:var(--ui-ink-2) !important}
html[data-ui-template] .progressbar-value .progressbar-text{background:var(--ui-navy) !important;color:#fff !important}
html[data-ui-template] .window-proxy-mask,
html[data-ui-template] .panel-loading{background:rgba(10,22,51,.28) !important}
html[data-ui-template] *::-webkit-scrollbar{width:10px;height:10px}
html[data-ui-template] *::-webkit-scrollbar-thumb{background:var(--ui-n300);border-radius:999px;border:2px solid transparent;background-clip:content-box}
html[data-ui-template] *::-webkit-scrollbar-thumb:hover{background:var(--ui-n400);background-clip:content-box}
html[data-ui-template] *::-webkit-scrollbar-track{background:transparent}

/* ---------- 6.7 layui 其余组件 ---------- */
html[data-ui-template] .layui-nav{background:transparent !important}
html[data-ui-template] .layui-badge{background:var(--ui-danger) !important;border-radius:var(--ui-r-sm) !important}
html[data-ui-template] .layui-badge-rim{background:var(--ui-n0) !important;color:var(--ui-ink-3) !important;border-color:var(--ui-n200) !important}
html[data-ui-template] .layui-btn-primary{background:transparent !important;color:var(--ui-ink-3) !important;border-color:var(--ui-n300) !important}
html[data-ui-template] .layui-btn-normal,
html[data-ui-template] .layui-btn-danger,
html[data-ui-template] .layui-btn.layui-bg-red{background:var(--ui-btn-pri-bg) !important;color:#fff !important}
html[data-ui-template] .layui-card{background:var(--ui-n0) !important;border-radius:var(--ui-r-lg) !important;box-shadow:var(--ui-e1) !important}
html[data-ui-template] .layui-colla-title{background:var(--ui-n25) !important;color:var(--ui-ink) !important}
html[data-ui-template] .layui-elem-quote{border-left-color:var(--ui-navy) !important;background:var(--ui-n25) !important;color:var(--ui-ink-2) !important}
html[data-ui-template] .layui-field-title legend{color:var(--ui-ink) !important}

/* ==========================================================================
   7 · 视觉强化（2026-10-07 二轮：让"换了模板"一眼可辨）
   ---------------------------------------------------------------------------
   背景：首轮已完整覆盖，但"浅灰→浅灰"这类色差太小，用户感受不到换肤。
        本节只强化 4 处最显眼的位置，仍遵守"不改尺寸"的硬约束：
          ① 顶栏底部青色分道线（品牌标识，最显眼）
          ② 表头底色加深一档 + 2px 底线（整张表一眼不同）
          ③ 行悬停/选中用明确青底
          ④ 左侧面板/卡片圆角与阴影
   ========================================================================== */

/* ---------- 7.1 顶栏底部：青色分道线（★ 2026-10-09 用户要求去掉，已停用） ----------
   原为 2px 青蓝渐变线（linear-gradient 两端渐隐，实测渲染 RGB(4,186,228)）+ 12px 外发光，
   视觉上就是菜单条（.tjm）下方那一条「蓝色的条」⇒ 用户要求去掉。
   注意：本规则原本 height:2px + margin-top:-2px（净高 0），停用不会影响 #tj-head 的 86px 高度。 */
html[data-ui-template] #tj-head::after{display:none !important;}
/* 顶栏主横幅加一层内高光，让它"立"起来 */
html[data-ui-template] #tj-head > div:first-child{
  box-shadow:inset 0 1px 0 rgba(255,255,255,.10),0 6px 20px rgba(10,22,51,.22) !important;
}
/* 顶栏用户名/注销等文字统一暖白 */

/* ---------- 7.2 表头：加深一档 + 2px 底线（整表一眼不同） ---------- */
html[data-ui-template] .datagrid-header td,
html[data-ui-template] .datagrid-header-row td{
  background:linear-gradient(180deg,#EFF2F8,#E7EBF4) !important;
  border-bottom:2px solid #D8DEEA !important;
}
html[data-ui-template] .datagrid-header .datagrid-cell,
html[data-ui-template] .datagrid-header .datagrid-cell span{
  color:var(--ui-navy) !important;font-weight:600 !important;
  font-family:var(--ui-mono) !important;letter-spacing:.04em;
}
html[data-ui-template] .datagrid-header-rownumber,
html[data-ui-template] .datagrid-cell-rownumber{background:#EFF2F8 !important}

/* ---------- 7.3 行悬停 / 选中：明确青底（交互态一眼可见） ---------- */
html[data-ui-template] .datagrid-body .datagrid-btable tr:hover td,
html[data-ui-template] .datagrid-row-over td,
html[data-ui-template] .datagrid-row-over .datagrid-cell{background:var(--ui-cyan-soft) !important}
html[data-ui-template] .datagrid-body .datagrid-btable tr:hover td:first-child,
html[data-ui-template] .datagrid-row-over td:first-child{box-shadow:inset 2px 0 0 var(--ui-cyan-ink)}
html[data-ui-template] .datagrid-row-selected td,
html[data-ui-template] .datagrid-row-selected .datagrid-cell{background:#D9EFF6 !important;color:var(--ui-ink) !important}
html[data-ui-template] .datagrid-row-selected td:first-child{box-shadow:inset 3px 0 0 var(--ui-cyan-ink)}

/* ---------- 7.4 左侧栏 / 卡片：圆角 + 阴影（把它"托起来"） ---------- */
html[data-ui-template] .layout-panel-west > .panel-body{background:var(--ui-n0) !important}
html[data-ui-template] .layout-panel-west .panel-header{background:var(--ui-n25) !important}
html[data-ui-template] .tj-body > .panel{border-radius:var(--ui-r-lg) !important;overflow:hidden}
html[data-ui-template] .tj-body > .panel > .panel-header{
  border-bottom:1px solid var(--ui-n100) !important;background:var(--ui-n25) !important;
}
html[data-ui-template] .tj-body > .panel > .panel-header .panel-title{color:var(--ui-ink) !important}

/* ---------- 7.5 分页：当前页藏蓝实心 + 按钮圆角 ---------- */
html[data-ui-template] .pagination .l-btn{cursor:pointer;border-radius:var(--ui-r-sm) !important}
html[data-ui-template] .pagination td table td{background:transparent !important}
html[data-ui-template] .pagination-num{border-color:var(--ui-n200) !important;background:var(--ui-n0) !important}
html[data-ui-template] .pagination .pagination-btn-separator{border-left-color:var(--ui-n200) !important}

/* ---------- 7.6 工具条按钮：hover 才亮（避免彩色图标抢戏） ---------- */
html[data-ui-template] .datagrid-toolbar .l-btn .l-btn-left{transition:background var(--ui-fast) var(--ui-ez)}
html[data-ui-template] .datagrid-toolbar .l-btn:hover .l-btn-left{background:var(--ui-cyan-soft) !important}
html[data-ui-template] .datagrid-toolbar .l-btn:hover .l-btn-text{color:var(--ui-cyan-ink) !important}

/* ★ 2026-10-08 用户要求：工具条按钮上残留的老式彩色图标（easyui 雪碧图 icon-* ）全部去掉，只留文字。
   —— 这些是原厂 16×16 位图图标（绿加号/红叉/铅笔/条码…），与新 UI 完全不是一个年代，属"残留"。
   —— 只隐藏图标本身（.l-btn-icon）；下拉按钮的**小箭头**（.m-btn-downarrow）保留：它是"可展开"的功能提示。
   —— 同时清掉 easyui 为图标预留的 .l-btn-text 左外边距，否则文字会偏右留空。 */
html[data-ui-template] .datagrid-toolbar .l-btn-icon,
html[data-ui-template] .layout-panel-north .l-btn-icon{display:none !important}
html[data-ui-template] .datagrid-toolbar .l-btn-icon-left .l-btn-text,
html[data-ui-template] .layout-panel-north .l-btn-icon-left .l-btn-text{margin-left:0 !important}
/* easyui 给带图标的按钮容器留的左内距也一并清掉（否则文字右侧仍留一段空白，按钮显得虚胖） */
html[data-ui-template] .datagrid-toolbar .l-btn-icon-left,
html[data-ui-template] .layout-panel-north .l-btn-icon-left{padding-left:0 !important}
/* ★ 2026-10-08 用户反馈「按钮里的字被挤成两行」：easyui 按钮文字默认可换行，
   遇到"4 字标签 + 徽章"而按钮写死的宽度不够时就会折行 ⇒ 全站按钮文字一律不换行
   （若某个按钮因此显得拥挤，正确做法是把该按钮宽度调够，而不是让文字折行）。 */
html[data-ui-template] .l-btn .l-btn-text,
html[data-ui-template] .l-btn-text{white-space:nowrap !important;overflow:visible !important}

/* ==========================================================================
   8 · 框架层 = 布局骨架（2026-10-07 三轮补全）
   ---------------------------------------------------------------------------
   为什么需要本节（根因）：
     第 1~7 节把**组件**（按钮 / 表格 / 表单 / 弹窗 / 分页）全部换成了 V16，
     但用户**第一眼看到的页面骨架**仍是旧色 ——
       顶栏靛蓝 #0E2D7F / 侧栏深黑 / 内容区纯白 / 登录页绿底，
     于是直觉判断「根本没换肤」。本节专治这个感知落差。

   本节覆盖 6 块骨架：
     8.1 页面底与内容区        8.2 layui 顶栏（style1 顶部菜单 / style2 左侧菜单）
     8.3 侧栏（一级藏蓝 + 二级浅色）8.4 面包屑与四级导航
     8.5 登录页                8.6 easyui 布局（编排端 / 参赛单位端）

   硬约束（与前 7 节一致）：
     · 只改 颜色 / 背景 / 边框 / 阴影 / 圆角 —— **不改任何尺寸、高度与定位**
     · 一律限定 html[data-ui-template] —— 打印页与未接页零影响
     · 侧栏一级菜单保持藏蓝深底：那里的图标是**位图**，改浅底会导致图标不可见
   ========================================================================== */

/* ---------- 8.1 页面底与内容区：统一到暖米白 --ui-n50 ---------- */
/* body：编排端 layout 内联了 html,body{background:#f5f5f5}（冷灰），需压掉 →
   页面底变暖米白 #F7F4EF，这是"一眼看出换肤"的关键之一。
   未加属性的打印页不含 data-ui-template，完全不受影响。 */
html[data-ui-template] body,
html[data-ui-template] .ns-body,
html[data-ui-template] .ns-body,
html[data-ui-template] .ns-body-content,
html[data-ui-template] .tj-body{
  background:var(--ui-n50) !important;
}
/* 内距统一交给第 9.4 节（此处不再设 padding，避免把它的 padding-top 压回 16px） */

/* ---------- 8.2 layui 顶栏（style1 顶部菜单 / style2 左侧菜单） ---------- */
/* ★★ 2026-10-09 用户要求：商城端标题栏与编排端 #tj-head 首行**完全一致**（除内容外）★★
   原来这里是「藏蓝渐变 + 底部青线 + 外阴影 + 内高光」，编排端只是一条**实色**横带 ⇒ 全部改成实色。
   注意：下面那条把 .ns-header 设成 transparent 的规则也必须放掉，否则实色会被抹成透明
   （实测踩过：background-color 被清掉，只剩渐变还看得见）。 */
html[data-ui-template] .ns-layout .ns-header{
  background:var(--ui-head-bg-deep,#161E3C) !important;
  /* ★★ 2026-10-11 用户报「商城端顶栏没有编排端那种光影」★★
     编排端首行 = 内高光 + 外投影（见 §7.1：html[data-ui-template] #tj-head > div:first-child）。
     2026-10-09 那次只把商城端**旧的**「藏蓝渐变+青线+阴影」清成了 none，却没把编排端的补回来 ⇒ 顶栏发平。
     这里镜像同一条（数值与 #tj-head 首行逐项一致；只保留 inset 高光，外投影给下面的菜单条，见下）。 */
  box-shadow:inset 0 1px 0 rgba(255,255,255,.10) !important;
  /* ★★ 2026-10-11 同步补「扫描光」★★
     编排端用 #tj-head::before 扫过整条顶栏（见文件末 tjHeadScan 段）。
     商城端顶栏由「标题行(.ns-header 45px) + 菜单条(.ns-topnav-wrap 41px)」两层拼成，
     且账号下拉/菜单下拉都在里面 —— 不能给祖先加 overflow:hidden（会裁掉下拉）。
     故不用额外伪元素，直接在本元素背景上跑一条 128px 渐变带：background-position 位移，
     **天然被自身背景盒裁剪**，不会溢出到内容区；令牌与编排端共用（--ui-head-scan / -w / -dur）。 */
  background-image:linear-gradient(90deg,transparent,var(--ui-head-scan,rgba(0,212,255,.07)),transparent) !important;
  background-repeat:no-repeat !important;
  background-size:var(--ui-head-scan-w,128px) 100% !important;
  animation:mallHeadScan var(--ui-head-scan-dur,9.5s) linear infinite;
  /* ★ 2026-10-09 顺带修「标题栏下方那条白线」：来自旧模板 app/shop/view/public/css/style1/common.css 的
     .ns-layout .ns-header{border-bottom:1px solid #ffffff}（老蓝紫底时代的分界线）。
     编排端标题栏没有这条线 ⇒ 一并去掉。（不直接改那个 common.css：它还被未接换肤的页面引用） */
  border:0 !important;
}
/* 商城端「扫描光」位移（对标编排端 @keyframes tjHeadScan：-30vw → 105vw） */
@keyframes mallHeadScan{from{background-position:-30vw 0}to{background-position:105vw 0}}
@media (prefers-reduced-motion:reduce){
  html[data-ui-template] .ns-layout .ns-header{animation:none}
}
/* ★ 2026-10-11 整条顶栏的「外投影」落在**菜单条底部**（顶栏最下层）：
   编排端是一条 86px 高的整体带投影，商城端拆成两层 ⇒ 外投影给菜单条，视觉等价。
   数值同 #tj-head 首行第二段：0 6px 20px rgba(10,22,51,.22)。 */
html[data-ui-template] .ns-layout .ns-topnav-wrap{
  box-shadow:0 6px 20px rgba(10,22,51,.22) !important;
}
/* ★ 2026-10-11 去 layui 遗留：「标题栏店名」是个裸 <a>，layui.css 被摘载后恢复浏览器默认下划线
   （用户截图报的「这里为什么有下划线」）⇒ 顶栏内所有链接统一不画下划线。 */
html[data-ui-template] .ns-header a{text-decoration:none !important}

/* ==========================================================================
   ★★ 2026-10-11 摘 layui 遗留补位·第二处（P2-12）★★
   layui.css 被摘载后，浏览器默认样式回归，最显眼的一条是**正文里的链接全带下划线**
   （顶栏那处已在上一节处理）。这里按"内容区"范围补回：默认不画线、悬停才画，保留可点性提示。
   注意只作用于 .ns-body（内容区），不碰顶栏/菜单/面包屑；表格内的链接此前已由
   「datagrid-cell a」规则处理过，这里兜住其余散落链接（卡片、说明文字、页脚等）。
   ========================================================================== */
html[data-ui-template] .ns-body a{text-decoration:none}
html[data-ui-template] .ns-body a:hover{text-decoration:underline}
/* 摘 layui 后无序列表的默认项目符号也在部分页面回归；内容区统一收起（本项目列表都用自有组件渲染） */
html[data-ui-template] .ns-body ul.layui-timeline,html[data-ui-template] .ns-body ul.ui-list{list-style:none;padding-left:0}
/* ★ 2026-10-09 「标题栏下方那条白线」的**真凶**：旧模板 style1/style2 的 common.css 里有
     .ns-layout .ns-header-right{ position:absolute;left:130px;right:0;height:60px;
       border-bottom:1px solid #F1F1F1 }
   —— .ns-header-right 是**整条右侧账号横条**（left 到 right 铺满），所以它那 1px 底边看起来
   就是横贯标题栏下方的一条白线（实测 y=44 处 RGB(241,241,241)）。编排端标题栏没有分界线 ⇒ 去掉。 */
html[data-ui-template] .ns-layout .ns-header-right{border-bottom:0 !important}
/* ★ 2026-10-09 用户要求「所有搜索框 / 按键垂直居中」：输入框统一 32px（= --ui-h-btn，和下拉/按钮同高）。
   注意：tokens.css 里的 --ui-h-input 同样定义在 :root 上，而它在 Vue 产物 CSS 之后加载会反压
   （实测把 Vue 侧改 32px 后，页面里读到的仍是 36px）⇒ 这里用 html[data-ui-template]（特异性更高）再钉一次。 */
html[data-ui-template]{--ui-h-input:32px}
/* （原「底部分道线 ::after 青线」已删除 —— 编排端标题栏没有这条线） */
html[data-ui-template] .ns-header .ns-logo,
html[data-ui-template] .ns-header .ns-logo a{background-color:transparent !important}
html[data-ui-template] .ns-header .ns-logo,
html[data-ui-template] .ns-header .ns-logo a{color:var(--ui-head-text) !important}

/* 一级菜单（style1：横向顶部菜单） */
html[data-ui-template] .ns-header .layui-nav{background:transparent !important}
html[data-ui-template] .ns-header .layui-nav .layui-nav-item a{
  color:var(--ui-head-text-dim) !important;transition:color var(--ui-fast) var(--ui-ez);
}
html[data-ui-template] .ns-header .layui-nav .layui-nav-item a:hover{color:var(--ui-cyan) !important}
html[data-ui-template] .ns-header .layui-nav .layui-this a,
html[data-ui-template] .ns-header .layui-nav .layui-nav-itemed>a{color:#fff !important}
html[data-ui-template] .ns-header .layui-nav .layui-nav-bar,
html[data-ui-template] .ns-header .layui-nav .layui-this:after{
  background-color:var(--ui-head-line) !important;
}
/* 顶栏内的下拉子菜单：暖白浮层 */
html[data-ui-template] .ns-header .layui-nav-child{
  background:var(--ui-n0) !important;border:1px solid var(--ui-n200) !important;
  border-radius:var(--ui-r) !important;box-shadow:var(--ui-e3) !important;
}
html[data-ui-template] .ns-header .layui-nav-child dd a{color:var(--ui-ink-2) !important}
html[data-ui-template] .ns-header .layui-nav-child dd a:hover{
  background:var(--ui-cyan-soft) !important;color:var(--ui-cyan-ink) !important;
}
html[data-ui-template] .ns-header .layui-nav-child dd.layui-this a{
  background:var(--ui-cyan-soft) !important;color:var(--ui-cyan-ink) !important;font-weight:500 !important;
}

/* style2：顶栏内的面包屑（本布局没有侧栏面包屑） */
html[data-ui-template] .ns-header-crumbs-first span{color:var(--ui-head-text) !important;font-weight:600}
html[data-ui-template] .ns-header-crumbs-second a{color:var(--ui-head-text-dim) !important;opacity:.85}
html[data-ui-template] .ns-header-crumbs-second a:hover{color:var(--ui-head-line) !important;opacity:1}
/* style2：右上账号区 */
html[data-ui-template] .ns-login-box .layui-nav .layui-nav-item>a,
html[data-ui-template] .ns-head-account .layui-nav-item>a{color:var(--ui-head-text) !important}
html[data-ui-template] .ns-head-account .layui-nav-child dd a{color:var(--ui-ink-2) !important}

/* ---------- 8.3 侧栏：藏蓝底 + 暖白字（★ 2026-10-07 按用户最新配色表定稿） ----------
   本节所有规则**只引用 templates.css 的 --ui-side-* 变量**，所以配色只需改一处。
   当前取值（配色表）：藏蓝底 #1B2A4A + 暖白字 #F7F4EF，选中项亮红底白字 + 左侧青条。
   ⚠️ 历史：曾有若干轮按"目标稿"改成浅色底深字，与配色表冲突 —— 已回归配色表。
   ⚠️ 位图图标已从布局壳移除，故不存在"深底看不清位图"的老问题。 */
/* 一级菜单：浅色（与二级连成一片） */
html[data-ui-template] .ns-layout .ns-first-nav{
  background:var(--ui-side-bg) !important;
  -webkit-backdrop-filter:var(--ui-head-blur);backdrop-filter:var(--ui-head-blur);
  border-right:1px solid var(--ui-side-line) !important;
}
html[data-ui-template] .ns-first-nav .layui-nav-tree{background:transparent !important;width:auto !important}
/* ⚠️ 选择器必须写成 `.ns-layout … .layui-side-scroll …` 这一长串：
   旧样式 app/shop/view/public/css/style2/common.css 第 205 行是
     .ns-layout .ns-first-nav .layui-side-scroll .layui-nav-tree .layui-nav-item a{color:#FFFFFF !important}
   特异性 (0,6,1) 且带 !important，把一级菜单文字钉成白色（浅底上几乎看不见）。
   这里用**完全对等的选择器 + html[data-ui-template] 前缀**（(0,6,2)）把它压回去。
   ⚠️ 不要直接去改那个 common.css —— 它同时被未接换肤的页面（打印件等）引用。 */
html[data-ui-template] .ns-layout .ns-first-nav .layui-side-scroll .layui-nav-tree .layui-nav-item a{
  color:var(--ui-side-text) !important;background:transparent !important;
  transition:background var(--ui-fast) var(--ui-ez),color var(--ui-fast) var(--ui-ez);
}
/* 悬停：只作用于 a:hover，**不再包含 a.active**
   （原先把 a.active 写进这一组，其特异性 (0,7,1) 高于下面选中项的 (0,6,1)，
     导致选中态被 hover 配色压掉 —— 实测选中项显示成青字浅底就是这个原因） */
html[data-ui-template] .ns-layout .ns-first-nav .layui-side-scroll .layui-nav-tree .layui-nav-item a:hover{
  /* ★ 2026-10-08 深色侧栏悬停：底=青色半透明（--ui-side-hover-bg 已改），字保持暖白
     （原来是 --ui-cyan-ink 深青字压在深蓝底上，几乎看不清 ✗） */
  background:var(--ui-side-hover-bg) !important;color:var(--ui-side-text) !important;
}
/* 选中项：把 .layui-nav-item 显式写进选择器，特异性提到 (0,7,1) 与 a.active 同级，
   并紧follow在其后 ⇒ 选中态稳定生效（亮红底 + 白字 + 左侧青条） */
html[data-ui-template] .ns-layout .ns-first-nav .layui-side-scroll .layui-nav-tree .layui-nav-item.layui-this>a,
html[data-ui-template] .ns-layout .ns-first-nav .layui-side-scroll .layui-nav-tree .layui-nav-item a.active{
  background:var(--ui-side-on-bg) !important;color:var(--ui-side-on-text) !important;
  font-weight:500 !important;box-shadow:inset 3px 0 0 var(--ui-cyan) !important;
}
html[data-ui-template] .ns-first-nav .layui-nav-bar{background-color:var(--ui-cyan-ink) !important}
html[data-ui-template] .ns-first-nav .layui-nav-more{border-top-color:var(--ui-n400) !important}

/* 二级菜单：浅色毛玻璃底（V16 定稿），纯文字菜单 */
html[data-ui-template] .ns-layout .ns-second-nav,
html[data-ui-template] .ns-layout .layui-side:not(.ns-first-nav){
  background:var(--ui-side-bg) !important;
  -webkit-backdrop-filter:var(--ui-head-blur);backdrop-filter:var(--ui-head-blur);
  border-right:1px solid var(--ui-n200) !important;
}
html[data-ui-template] .ns-second-nav .layui-side-scroll,
html[data-ui-template] .layui-side-scroll{background:transparent !important}
html[data-ui-template] .ns-second-nav .layui-nav-tree{background:transparent !important;width:auto !important}
html[data-ui-template] .ns-second-nav .layui-nav-tree .layui-nav-item>a{
  color:var(--ui-side-text) !important;background:transparent !important;
  transition:background var(--ui-fast) var(--ui-ez),color var(--ui-fast) var(--ui-ez);
}
html[data-ui-template] .ns-second-nav .layui-nav-tree .layui-nav-item>a:hover{
  background:var(--ui-side-hover-bg) !important;color:var(--ui-side-text) !important;
}
/* 选中项：藏蓝实底 + 白字 + 左侧青条（规范 3.10） */
html[data-ui-template] .ns-second-nav .layui-nav-tree .layui-this>a{
  background:var(--ui-side-on-bg) !important;color:var(--ui-side-on-text) !important;
  font-weight:500 !important;box-shadow:inset 2px 0 0 var(--ui-cyan) !important;
}
html[data-ui-template] .ns-second-nav .layui-nav-tree .layui-this>a .layui-nav-more{border-top-color:#fff !important}
/* 子项（三级） */
html[data-ui-template] .ns-second-nav .layui-nav-child{background:transparent !important}
html[data-ui-template] .ns-second-nav .layui-nav-child dd a{
  color:var(--ui-side-text-dim) !important;background:transparent !important;
  transition:background var(--ui-fast) var(--ui-ez),color var(--ui-fast) var(--ui-ez);
}
html[data-ui-template] .ns-second-nav .layui-nav-child dd a:hover{
  background:var(--ui-side-hover-bg) !important;color:var(--ui-side-text) !important;
}
html[data-ui-template] .ns-second-nav .layui-nav-child dd.layui-this a{
  background:var(--ui-cyan-soft) !important;color:var(--ui-cyan-ink) !important;font-weight:500 !important;
  box-shadow:inset 2px 0 0 var(--ui-cyan-ink) !important;
}
html[data-ui-template] .ns-second-nav .layui-nav-bar{background-color:var(--ui-cyan-ink) !important}
html[data-ui-template] .ns-second-nav .layui-nav-more{border-top-color:var(--ui-n400) !important}

/* ---------- 8.4 面包屑（style1 独立条）与四级导航 ---------- */
html[data-ui-template] .ns-crumbs{
  background:var(--ui-n0) !important;border-bottom:1px solid var(--ui-n100) !important;
}
html[data-ui-template] .ns-crumbs .ns-breadcrumb a{color:var(--ui-ink-3) !important}
html[data-ui-template] .ns-crumbs .ns-breadcrumb a:hover{color:var(--ui-cyan-ink) !important}
html[data-ui-template] .ns-crumbs .ns-breadcrumb cite{color:var(--ui-ink) !important;font-style:normal !important}
html[data-ui-template] .ns-crumbs .ns-breadcrumb span[lay-separator]{color:var(--ui-n400) !important}
/* 四级导航（页内选项卡）：选中态用藏蓝 */
html[data-ui-template] .fourstage-nav.layui-tab .layui-tab-title{border-bottom-color:var(--ui-n200) !important}
html[data-ui-template] .fourstage-nav.layui-tab .layui-tab-title li{color:var(--ui-ink-3) !important}
html[data-ui-template] .fourstage-nav.layui-tab .layui-tab-title .layui-this{color:var(--ui-navy) !important;font-weight:600 !important}
html[data-ui-template] .fourstage-nav.layui-tab .layui-tab-title .layui-this:after{border-bottom-color:var(--ui-navy) !important}

/* 登录页：浅色底 + 淡晕 + 细网格
   ⚠️ 登录页按规范**不进入深色体系**（深色只给"时间存在的地方"：顶栏 / 计时 / Toast）
   注意：所有背景层必须写在同一个 background-image 里 —— 分写成 background +
        background-image 会让后者冲掉前者的渐变底色（踩过一次） */
/* ★ 2026-10-11 新增：主按钮的**投影色**按模板取色（此前写死暗红 rgba(122,28,46,…)
   ⇒ 换到 v6 / tech 主题时按钮周围出现红色光晕，用户反馈"一点不协调"） */
html[data-ui-template]{
  --ui-btn-pri-shadow:0 2px 8px rgba(122,28,46,.30),inset 0 1px 0 rgba(255,255,255,.16);
  --ui-btn-pri-shadow-hover:0 7px 20px rgba(122,28,46,.38),0 14px 36px rgba(122,28,46,.20),inset 0 1px 0 rgba(255,255,255,.24);
  --ui-glow-2:rgba(122,28,46,.08);
}
html[data-ui-template="v6"]{
  --ui-btn-pri-shadow:0 2px 8px rgba(37,99,235,.30),inset 0 1px 0 rgba(255,255,255,.16);
  --ui-btn-pri-shadow-hover:0 7px 20px rgba(37,99,235,.38),0 14px 36px rgba(37,99,235,.20),inset 0 1px 0 rgba(255,255,255,.24);
  --ui-glow-2:rgba(37,99,235,.09);
}
html[data-ui-template="tech"]{
  --ui-btn-pri-shadow:0 2px 8px rgba(22,41,107,.28),inset 0 1px 0 rgba(255,255,255,.16);
  --ui-btn-pri-shadow-hover:0 7px 20px rgba(22,41,107,.34),0 14px 36px rgba(22,41,107,.18),inset 0 1px 0 rgba(255,255,255,.24);
  --ui-glow-2:rgba(22,41,107,.09);
}
html[data-ui-template] .login-body{
  background-color:var(--ui-n50) !important;
  background-image:
    radial-gradient(860px 500px at 10% 2%,rgba(8,145,178,.13),transparent 62%),
    radial-gradient(720px 430px at 90% 98%,var(--ui-glow-2),transparent 62%),
    linear-gradient(rgba(27,42,94,.028) 1px,transparent 1px),
    linear-gradient(90deg,rgba(27,42,94,.028) 1px,transparent 1px) !important;
  background-size:auto,auto,32px 32px,32px 32px !important;
  background-attachment:fixed,fixed,fixed,fixed !important;
}
/* 登录卡片：暖白 + 圆角 + 三层阴影 */
html[data-ui-template] .login-body .login-content{
  background:var(--ui-n0) !important;border:1px solid var(--ui-n200) !important;
  border-radius:var(--ui-r-lg) !important;box-shadow:var(--ui-e3) !important;
}
/* ★ 2026-10-12：卡片高度由老 login.css 写死的 375px 改为**内容自适应** ——
   专属登录页（?yh= 带副标题「代码 · 管理登录」，+23px）在固定高度下内容溢出：
   实测按钮底 625 > 卡片底 609（按钮"戳出"卡片 16px，用户反馈"页面结构还是有问题"）。
   min-height 保持 375，普通登录页观感不变。 */
html[data-ui-template] .login-body .login-content{
  height:auto !important;min-height:375px !important;box-sizing:border-box !important;
}
/* ★ 2026-10-11：老 login.css 的 .log-content-box 是"外层白卡"（425 宽 / 白底 / 圆角 5 / 内距 15），
   与上面这张**模板卡片**叠成"双层卡片" ⇒ 卡片外多出一圈直角白边，用户反馈"一点不协调"。
   让外层只负责定位（left/right/top/transform/width 不动），视觉统一交给模板卡片。 */
html[data-ui-template] .login-body .log-content-box{
  background:transparent !important;box-shadow:none !important;border-radius:0 !important;
}
html[data-ui-template] .login-body .login-content h2{color:var(--ui-red) !important;letter-spacing:-.01em}
html[data-ui-template] .login-body .login-input{background:var(--ui-n0) !important;border-color:var(--ui-n300) !important;border-radius:var(--ui-r) !important}
html[data-ui-template] .login-body .login-input-select{border-color:var(--ui-cyan-ink) !important;box-shadow:0 0 0 4px rgba(14,116,144,.14) !important}
/* 登录按钮：模板主按钮（覆盖内联 #5B9BD5）—— 底与投影均走令牌（投影按模板取色，见上） */
html[data-ui-template] .login-body .ns-login-btn{
  background:var(--ui-btn-pri-bg) !important;color:#fff !important;
  border-radius:var(--ui-btn-r) !important;
  box-shadow:var(--ui-btn-pri-shadow) !important;
}
html[data-ui-template] .login-body .ns-login-btn:hover{
  background:var(--ui-btn-pri-bg-hover) !important;transform:translateY(-2px);
  box-shadow:var(--ui-btn-pri-shadow-hover) !important;
}
html[data-ui-template] .login-body #types{background:var(--ui-n0) !important;border:1px solid var(--ui-n200) !important;box-shadow:var(--ui-e2) !important}
html[data-ui-template] .login-body .show span,
html[data-ui-template] .login-body .type-item span{color:var(--ui-ink-2) !important}

/* ---------- 8.6 easyui 布局框架（编排端 / 参赛单位端） ---------- */
/* north：让内联藏蓝横幅透出（不改尺寸） */
html[data-ui-template] .layout-panel-north>.panel-body{background:transparent !important}
html[data-ui-template] .layout-panel-north>.panel-header{background:transparent !important;border-color:transparent !important}
/* west：浅色公文面板 */
html[data-ui-template] .layout-panel-west>.panel-body{background:var(--ui-n0) !important}
html[data-ui-template] .layout-panel-west>.panel-header{background:var(--ui-n25) !important;border-color:var(--ui-n200) !important}
/* center / east：页面底 */
html[data-ui-template] .layout-panel-center>.panel-body,
html[data-ui-template] .layout-panel-east>.panel-body{background:var(--ui-n50) !important}
/* 通用面板头（窗口标题条）：暖白 + 细线 */
html[data-ui-template] .easyui-layout .panel-header,
html[data-ui-template] .panel.window .panel-header{
  background:var(--ui-n25) !important;border-color:var(--ui-n200) !important;
  border-top-left-radius:var(--ui-r-lg);border-top-right-radius:var(--ui-r-lg);
}
html[data-ui-template] .easyui-layout .panel-header .panel-title,
html[data-ui-template] .panel.window .panel-header .panel-title{color:var(--ui-ink) !important}
html[data-ui-template] .easyui-layout .panel-body{border-color:var(--ui-n200) !important}
/* 编排端顶栏（#tj-head）主菜单条：藏蓝底 + 暖白字，悬停半透明白底
   （旧样式是"浅蓝底 #E0ECFE + 黑字"，这里整条变深色 ⇒ 一眼看出换肤） */
html[data-ui-template] #tj-head .easyui-menubutton,
html[data-ui-template] #tj-head .m-btn{
  background:transparent !important;border-color:transparent !important;
}
html[data-ui-template] #tj-head .easyui-menubutton .l-btn-text,
html[data-ui-template] #tj-head .m-btn .l-btn-text{
  color:var(--ui-head-text) !important;font-weight:500;letter-spacing:.02em;
}
/* ★ 2026-10-08 用户反馈：顶栏悬停底**不要带颜色** —— 改回中性半透明白（只提亮，不改色相），
   这样"字体后面的颜色"和菜单条其他地方一致。 */
html[data-ui-template] #tj-head .easyui-menubutton:hover .l-btn-left,
html[data-ui-template] #tj-head .m-btn:hover .l-btn-left{background:rgba(255,255,255,.14) !important}
html[data-ui-template] #tj-head .easyui-menubutton:hover .l-btn-text,
html[data-ui-template] #tj-head .m-btn:hover .l-btn-text{color:#fff !important}
html[data-ui-template] #tj-head .easyui-menubutton .l-btn-left,
html[data-ui-template] #tj-head .m-btn .l-btn-left{background:transparent !important}
/* 下拉箭头跟字色（暖白） */
html[data-ui-template] #tj-head .m-btn-downarrow,
html[data-ui-template] #tj-head .easyui-menubutton .m-btn-downarrow{border-top-color:var(--ui-head-text-dim) !important}
/* ★ 2026-10-09 用户要求：编排端顶部菜单条的 ▾ 小三角也去掉（与商城端菜单栏口径一致）。
   只作用于顶部菜单条；页面内其它 easyui 下拉按钮（工具条「浏览」等）的箭头保留 —— 那是有用的「可展开」提示。 */
html[data-ui-template] #tj-head .easyui-menubutton .m-btn-downarrow{display:none !important}
/* 顶栏内的文字按钮（分项导航板 / 用户名 / 注销）：透明底 + 暖白字 */
html[data-ui-template] #tj-head .easyui-linkbutton{background:transparent !important;border-color:transparent !important}
html[data-ui-template] #tj-head .easyui-linkbutton .l-btn-left{background:transparent !important}
html[data-ui-template] #tj-head .easyui-linkbutton .l-btn-text,
html[data-ui-template] #tj-head .easyui-linkbutton .l-btn-text span{color:var(--ui-head-text) !important}
/* ★ 2026-10-08 用户要求：顶栏文字按钮（分项导航板 / 用户名 / 注销退出）的悬停要和菜单项**同款**。
   原来外层 .l-btn 叠 14% + 内层 .l-btn-left 叠 12% ⇒ 两层叠加比菜单项亮，看着不是一套 ✗。
   现在：外层保持透明，只在内层叠**一层 14% 中性半透明白** = 与菜单项逐像素一致（#1B2A4A → rgb(59,72,99)）。 */
html[data-ui-template] #tj-head .easyui-linkbutton:hover{background:transparent !important;border-color:transparent !important}
html[data-ui-template] #tj-head .easyui-linkbutton:hover .l-btn-left{background:rgba(255,255,255,.14) !important}
/* 顶栏二级条容器（easyui-panel）：藏蓝底 + 顶部细高光，与主横幅连成一体 */
html[data-ui-template] #tj-head .easyui-panel,
html[data-ui-template] #tj-head .panel-body{background-color:var(--ui-head-bar) !important}
html[data-ui-template] #tj-head .easyui-panel{border-color:transparent !important;box-shadow:inset 0 1px 0 rgba(255,255,255,.07)}
/* ★ 2026-10-09 用户要求：编排端下拉菜单与商城端（.ns-topnav-child）**一模一样**。
   对齐口径（商城端 computed 实测值）：
     面板   暖白 --ui-n0 / 1px --ui-n200（顶部无边框）/ 阴影 0 10px 26px rgba(10,22,51,.16)
            / 直角（商城端 --ui-r2 未定义 ⇒ 实际 0）/ 上下各 6px 内边距
     菜单项 高 32 / 行高 32 / 左右 16px / 13.5px / 字色 --ui-ink-2
     悬停与当前项 青灰底 --ui-cyan-soft + 深青字 --ui-cyan-ink
   ⚠️ easyui 渲染的是 .menu-text（不是 .menu-item-text），且带 inline 的 height/line-height ⇒ 必须 !important。 */
html[data-ui-template] .menu,
html[data-ui-template] .easyui-menu{
  background:var(--ui-n0) !important;border-color:var(--ui-n200) !important;border-top:0 !important;
  box-shadow:0 10px 26px rgba(10,22,51,.16) !important;border-radius:0 !important;padding:6px 0 !important;
}
/* easyui 左边缘那条老式竖线装饰：商城端没有，去掉 */
html[data-ui-template] .menu .menu-line{display:none !important}
html[data-ui-template] .menu .menu-item{height:32px !important}
html[data-ui-template] .menu .menu-item .menu-text,
html[data-ui-template] .menu .menu-item .menu-item-text{
  height:32px !important;line-height:32px !important;padding:0 16px !important;
  color:var(--ui-ink-2) !important;font-size:var(--ui-fs-body) !important;
}
html[data-ui-template] .menu-item:hover,
html[data-ui-template] .menu-active{background:var(--ui-cyan-soft) !important}
html[data-ui-template] .menu-item:hover .menu-text,
html[data-ui-template] .menu-active .menu-text,
html[data-ui-template] .menu-item:hover .menu-item-text,
html[data-ui-template] .menu-active .menu-item-text{color:var(--ui-cyan-ink) !important}
html[data-ui-template] .menu-sep{border-top-color:var(--ui-n100) !important}
/* ★ 2026-10-08 用户要求：下拉菜单项太大（easyui 默认 32px 高 / 13.5px 字，与 25px 的表格不成比例）
   ⇒ 压到 24px 高 / 12px 字（与表格字号 --ui-fs-table 同号），分隔线也收窄。
   ⚠️ 关键：easyui 建菜单时会给元素写**内联** `height:30px;line-height:30px`（.menu-text），
      只压外层 .menu-item 会把文字**上下裁掉**（用户反馈"字体显示不全"）⇒ 内层必须一起用 !important 覆盖。 */
html[data-ui-template] .menu-item{height:24px !important;line-height:24px !important}
html[data-ui-template] .menu-item .menu-text,
html[data-ui-template] .menu-item .menu-item-text,
html[data-ui-template] .menu-item-text{
  height:auto !important;line-height:24px !important;
  font-size:var(--ui-fs-table,12px) !important;
  display:flex !important;align-items:center !important;   /* 文案垂直居中 */
}
/* 菜单项上的老式图标（彩色雪碧图方块）：全站隐藏（用户要求"类似方块全量去除"） */
html[data-ui-template] .menu .m-icon,
html[data-ui-template] .menu-item>.m-icon,
html[data-ui-template] .menu-item [class^='icon-'],
html[data-ui-template] .menu-item [class*=' icon-']{display:none !important}
/* 子菜单箭头：不用雪碧图（小图在缩放/高分屏下看着就是一块彩色方块），改成干净的 CSS 三角 */
html[data-ui-template] .menu .menu-rightarrow,
html[data-ui-template] .menu .m-btn-downarrow{
  background-image:none !important;width:0 !important;height:0 !important;
  border-top:4px solid transparent !important;border-bottom:4px solid transparent !important;
  border-left:5px solid var(--ui-n400) !important;
  margin-top:8px !important;right:8px !important;
}
html[data-ui-template] .menu-sep{margin:2px 0 !important;height:0 !important}

/* ==========================================================================
   ★★★ 2026-10-08 记录表屏幕统一 —— 已按用户要求**整体回滚**
   ---------------------------------------------------------------------------
   之前这里曾把「检录记录表 / 成绩统计表 / 报名表」等纸质表单页强制统一成
   标准数据表格风格（改字体/颜色/边框/输入框大小）。用户明确指出：
     「检录记录表的内容还是要保持之前的格式和样式，不要胡乱调整大小」
   ⇒ 已删除整套 .lqcj-box / .lqcj-tbl / .cj-head / .cj-sub / .cj-in / .bz-sel /
      .tj-tbl 的屏幕覆盖规则，这些页恢复页面自带的原始纸质样式。
   唯一保留：标准数据表格页（jlsjb 检录时间表 / jsrc 竞赛日程）表头的"清空该列"小标记
   （.th-clr），那是标准 datagrid 的列操作，与记录表无关。
   ========================================================================== */
html[data-ui-template] .th-clr{
  float:right;cursor:pointer;color:var(--ui-ink-3,#6B6358) !important;font-weight:700;
  padding:0 4px;line-height:inherit;
}
html[data-ui-template] .th-clr:hover{color:var(--ui-cyan-ink,#0E7490) !important}

/* ★ 2026-10-08 用户要求「检录时间表的可填空额与年龄分组徽章要和其它页统一」：
   ---------------------------------------------------------------------------
   ① 组别/年龄分组徽章：全站**唯一定义**（原来 jsrc 用 .zb-badge+组别id 取色，
      jlsjb 用 .m-badge1~5+**组别名 hash** 取色 ⇒ 同一个组别在两页颜色不同）。
      这里统一到 .zb-badge / zb1~zb5；老页面的 .m-badge1~5 也改成同一套色板（形状一并统一）。
   ② 表格内可填输入框/下拉：全站唯一样式（原来 jsrc 是 12px/20px/浅灰蓝细边框，
      jlsjb 是 14px/35px/**黑边框**）。只作用于 datagrid 单元格内的控件，
      打印/记录表页（bsgcCj 等自建 <table>）不受影响。
      ⚠️ 不设 background：各页"按列区分底色"的功能保留。 */
html[data-ui-template] .zb-badge{
  display:inline-block !important;min-width:18px !important;padding:0 5px !important;
  border-radius:var(--ui-r-sm,4px) !important;color:#fff !important;
  font-size:var(--ui-fs-table,12px) !important;text-align:center !important;line-height:1.35 !important;
}
/* ★ 2026-10-08（easyui 残留清扫）：这里原本写的是**旧鲜亮色板**（#1E88E5 蓝 / #E91E9B 玫红 /
   #FB8C00 橙 / #E53935 红 / #8E24AA 紫），把文件前面（§12）已经映射好的**主题暖色板覆盖回去了**
   ⇒ 全站组别徽章又变回蓝/紫。现统一回主题五色（与 .zb-badge / .cp-badge / .gw-badge 完全一致）：
     1 藏蓝 → 2 暗红 → 3 橙黄 → 4 青 → 5 石墨。 */
html[data-ui-template] .zb-badge.zb1{background:var(--ui-navy,#1B2A4A) !important}
html[data-ui-template] .zb-badge.zb2{background:var(--ui-red,#7A1C2E) !important}
html[data-ui-template] .zb-badge.zb3{background:var(--ui-amber,#B45309) !important}
html[data-ui-template] .zb-badge.zb4{background:var(--ui-cyan-ink,#0E7490) !important}
html[data-ui-template] .zb-badge.zb5{background:var(--ui-n500,#6B6358) !important}
html[data-ui-template] .m-badge1{background:var(--ui-navy,#1B2A4A) !important}
html[data-ui-template] .m-badge2{background:var(--ui-red,#7A1C2E) !important}
html[data-ui-template] .m-badge3{background:var(--ui-amber,#B45309) !important}
html[data-ui-template] .m-badge4{background:var(--ui-cyan-ink,#0E7490) !important}
html[data-ui-template] .m-badge5{background:var(--ui-n500,#6B6358) !important}
html[data-ui-template] .datagrid-btable .datagrid-cell > input,
html[data-ui-template] .datagrid-btable .datagrid-cell > select{
  display:block !important;margin:2px auto 0 !important;width:95% !important;height:20px !important;
  line-height:18px !important;font-size:var(--ui-fs-table,12px) !important;text-align:center !important;
  border:1px solid var(--ui-n200) !important;border-radius:var(--ui-r-sm,4px) !important;
  box-sizing:border-box !important;padding:0 2px !important;color:var(--ui-ink) !important;
}
html[data-ui-template] .datagrid-btable .datagrid-cell > input:focus,
html[data-ui-template] .datagrid-btable .datagrid-cell > select:focus{
  border-color:var(--ui-cyan-ink) !important;box-shadow:0 0 0 2px rgba(14,116,144,.12) !important;outline:none !important;
}

/* ★ 2026-10-08 用户要求：面板右上角的小工具（搜索/刷新/帮助…）也是同款老式彩色雪碧图方块 ⇒ 去掉。
   保留功能：已知用途改成文字（查询/刷新/帮助/资料/打印/Word/确定/提示）；
   用途不明的（icon-jx / icon-wh）直接不显示，避免留个看不见的可点区域。
   ⚠️ 窗口的关闭/最大化/最小化按钮类是 panel-tool-close/min/max（不含 icon- 前缀），不受影响。 */
html[data-ui-template] .panel-tool a[class*='icon-']{
  background-image:none !important;width:auto !important;height:24px !important;min-width:0 !important;
  display:inline-flex !important;align-items:center !important;
  padding:0 6px !important;font-size:12px !important;color:var(--ui-ink-3) !important;
  border-radius:var(--ui-r-sm) !important;
}
html[data-ui-template] .panel-tool a[class*='icon-']:hover{background:var(--ui-cyan-soft) !important;color:var(--ui-cyan-ink) !important}
html[data-ui-template] .panel-tool a.icon-reload::after{content:'刷新'}
html[data-ui-template] .panel-tool a.icon-help::after{content:'帮助'}
html[data-ui-template] .panel-tool a.icon-search::after{content:'查询'}
html[data-ui-template] .panel-tool a.icon-man::after{content:'资料'}
html[data-ui-template] .panel-tool a.icon-print::after{content:'打印'}
html[data-ui-template] .panel-tool a.icon-word::after{content:'Word'}
html[data-ui-template] .panel-tool a.icon-ok::after{content:'确定'}
html[data-ui-template] .panel-tool a.icon-tip::after{content:'提示'}
html[data-ui-template] .panel-tool a.icon-jx,
html[data-ui-template] .panel-tool a.icon-wh{display:none !important}
/* 下拉面板里的选项（combobox / 查询下拉）：同样收一档，与表格密度一致 */
html[data-ui-template] .combobox-item,
html[data-ui-template] .combobox-item span{font-size:var(--ui-fs-table,12px) !important}
html[data-ui-template] .combobox-item{padding:3px 8px !important;line-height:18px !important}

/* ==========================================================================
   9 · 排版与尺寸（2026-10-07 四轮：字体 / 字号 / 控件 / 间距 / 密度 / 对比）
   ---------------------------------------------------------------------------
   需求原话：字体、字号、按键大小、页面布局、窗口与内容尺寸匹配、字与背景对比、
             页面搭配、元素互相影响、间隔 / 距离 / 大小。

   实测现状（1680×1000，真实渲染值）→ 目标：
     body            14px / 行高 normal        → 13.5px / 1.6
     表格表头        50.5px                    → 44px（规范）
     表格数据行      60.5px                    → 48px（当前过胖、信息密度低）
     输入框          34px / 左距 10px          → 36px / 12px
     内容区 padding  15 15 15 50（左右不对称） → 24px 对称
     表单行间距      10px                      → 16px
     按钮 / 菜单项   34px·13px·4px / 40px      → ✓ 已达标，不再动

   ⚠️ 硬约束（见 memory：编排端内容区留白与高度绑定）
     不动 .tj-body padding(2px)、不动 #tj-head 高度(81px)、不动任何 calc(100vh - N)
     —— 否则编排端 51 个页面的高度链会全站错位。
     本节只改「内容内部」的排版与控件尺寸，容器高度一律不碰。
   ========================================================================== */

/* ---------- 9.1 字阶与行高（5 级） ----------
   只在接了换肤的页面生效：打印页无 data-ui-template，其字号仍由
   {$opt.zw_zh} / {$sz.dy_zw_zt} 等模板变量控制，不受影响。 */
html[data-ui-template] body{
  font-family:var(--ui-sans);
  font-size:var(--ui-fs-body);          /* 13.5px */
  color:var(--ui-ink-2);
  -webkit-font-smoothing:antialiased;
  -moz-osx-font-smoothing:grayscale;
  text-rendering:optimizeLegibility;
}
/* ⚠️ 行高**不能**设在 body 上，也**不能**设在 .tj-body 上：
   编排端顶栏 #tj-head(81px) 与各页 calc(100vh - N) 强耦合，任何让它们变高的行高
   都会让整页多出滚动条（实测 body 行高 → 1011/1000；.tj-body 行高 → 1004/1000）。
   所以行高只给「文本元素」，容器一律不碰。
   （表格不用这里，它们由 9.3 的固定行高 48px 控制） */
/* ⚠️ 行高只给"纯文本元素"与弹窗内容 —— **绝不能**给 .ns-body-content / .layui-form-item
   这类**容器**设行高：编排端顶栏(81px) 与各页 calc(100vh - N) 强耦合，容器行高会
   把整页撑高、多出滚动条（实测：给 .ns-body-content 设 1.6 → 页面溢出 44px）。 */
html[data-ui-template] p,
html[data-ui-template] .layui-elem-quote,
html[data-ui-template] .layui-word-aux,
html[data-ui-template] .ns-tips,
html[data-ui-template] .layui-layer-content{line-height:1.6}
/* ⚠️ 绝不要给 h1/h2/h3 设 font-size / line-height —— 实测踩过的坑：
   各页把 h1~h3 用在**完全不同的层级**上（例：tianjing/index.html 用 <h1> 当"面板分组标题"，
   字号本该是页面自定义的小字）。统一放大/缩小必然改坏一部分页 ——
   给 h1 设 30px 后，该页的分组标题被撑成巨字，还会与徽章、图标互相挤压。
   所以这里只统一**颜色**，字号交给各自页面；需要指定字号时只改用途唯一的语义类（见下）。 */
html[data-ui-template] h1,
html[data-ui-template] h2,
html[data-ui-template] h3,
html[data-ui-template] h4{color:var(--ui-ink)}
/* 卡片 / 面板标题：这些是**组件类**（用途唯一），可以安全指定字号：14.5px/600 */
html[data-ui-template] .layui-card-header,
html[data-ui-template] .panel-title,
html[data-ui-template] .layui-colla-title{
  font-size:var(--ui-fs-card-title);font-weight:600;line-height:1.45;color:var(--ui-ink);
}
/* 页面内四级导航（y 用 h4 的页面少，避免误伤，只给 layui-tab 标题） */
html[data-ui-template] .layui-tab-title li{font-size:var(--ui-fs-body)}
/* 辅助说明 / 提示（三级） */
html[data-ui-template] .layui-elem-quote,
html[data-ui-template] .layui-word-aux,
html[data-ui-template] .ns-tips,
html[data-ui-template] .layui-form-mid{font-size:var(--ui-fs-sub);line-height:1.7}
/* 标签 / 徽章用等宽小字（四级） */
html[data-ui-template] .layui-badge,
html[data-ui-template] .layui-badge-rim{font-size:var(--ui-fs-label);line-height:1.5}

/* ---------- 9.2 控件尺寸（按规范统一，不改容器高度） ---------- */
/* 输入框 / 下拉 / 数字框：高 36 / 圆角 4 / 内距 12 / 字 13.5 */
html[data-ui-template] .layui-input,
html[data-ui-template] .layui-select,
html[data-ui-template] input.layui-input{
  height:var(--ui-h-input);line-height:calc(var(--ui-h-input) - 2px);font-size:var(--ui-fs-body);padding:0 var(--ui-s3);
}
/* 文本域：高度自适应，不锁 line-height */
html[data-ui-template] .layui-textarea{
  height:auto;line-height:1.6;font-size:var(--ui-fs-body);padding:var(--ui-s2) var(--ui-s3);
}
/* 表单标签：字 13.5 / 右距 12（原 14px 且贴太近） */
html[data-ui-template] .layui-form-label,
html[data-ui-template] .layui-form-label.mid,
html[data-ui-template] .layui-form-label.long{
  font-size:var(--ui-fs-body);color:var(--ui-ink-3);
}
html[data-ui-template] .layui-input-inline{margin-right:var(--ui-s3)}
/* 表单行间距：10 → 16（原来挤在一起，扫读困难） */
html[data-ui-template] .layui-form-item{margin-bottom:0}
html[data-ui-template] .layui-form-item .layui-inline{margin-bottom:var(--ui-s2)}
/* 按钮/标签内的图标对齐（避免"图标压字"） */
html[data-ui-template] .layui-btn i{margin-right:var(--ui-s1);vertical-align:-1px}
html[data-ui-template] .layui-btn + .layui-btn{margin-left:var(--ui-s2)}
/* 触摸目标：窄屏按钮抬到 40px（规范 768 以下） */
@media (max-width:768px){
  html[data-ui-template] .layui-btn{height:40px;line-height:40px;font-size:13.5px;padding:0 var(--ui-s5)}
  html[data-ui-template] .layui-input,
  html[data-ui-template] .layui-select{height:42px;line-height:40px}
}

/* ---------- 9.3 表格密度（表头 44 / 数据行 48） ----------
   ⚠️ 这里的 height / line-height / padding / font-size 必须带 !important：
      layui 与 easyui 表格会把行高写进**行内 style 或高权重规则**，
      普通声明会被压掉（实测加了 !important 才生效）。
      **width 一律不加 !important** —— easyui 的宽度补丁（#tj-head .panel{width:auto}）不能被破坏。 */
/* —— layui table（商城后台） —— */
html[data-ui-template] .layui-table th{
  height:var(--ui-h-th) !important;padding:0 var(--ui-s4) !important;
  font-size:var(--ui-fs-label) !important;font-weight:600;letter-spacing:var(--ui-ls-wide);
}
html[data-ui-template] .layui-table td{
  height:var(--ui-h-td) !important;padding:0 var(--ui-s4) !important;font-size:var(--ui-fs-table) !important;
}
/* layui 单元格：行高以 .layui-table-cell 为准，必须与 td 同步 */
html[data-ui-template] .layui-table-cell{
  height:var(--ui-h-td) !important;line-height:var(--ui-h-td) !important;
  font-size:var(--ui-fs-table) !important;padding:0 var(--ui-s3) !important;
}
html[data-ui-template] .layui-table-header .layui-table-cell{height:var(--ui-h-th) !important;line-height:var(--ui-h-th) !important}
/* 表格内的行内按钮/文字链：缩小一档，避免把行撑高 */
html[data-ui-template] .layui-table-cell .layui-btn-xs{
  height:var(--ui-h-btn-xs) !important;line-height:var(--ui-h-btn-xs) !important;padding:0 10px !important;font-size:var(--ui-fs-sub) !important;
}
html[data-ui-template] .layui-table-cell .layui-btn + .layui-btn{margin-left:var(--ui-s1)}

/* ★ 2026-10-08 用户反馈「所有表格都错开了、表头与数据不对齐」的根治项：
   easyui 的表头表与数据表默认是 `table-layout:auto`，列宽只是"建议值"——
   一旦某个格子的内容（长文本/不同字号/浏览器缩放）超过该列宽，**那张表自己会把列撑宽**，
   而另一张表不撑 ⇒ 两张表列宽不一致 ⇒ 表头与数据整体错位。
   统一改成 fixed：列宽严格按 easyui 指定的值分配，两张表永远一致（实测列宽、分组行宽均不变，安全）。
   —— 数据表/汇总表/表头表都要设，缺一个就还会错开。 */
html[data-ui-template] .datagrid-btable,
html[data-ui-template] .datagrid-ftable,
html[data-ui-template] .datagrid-header table,
html[data-ui-template] .datagrid-header-inner table{
  table-layout:fixed !important;
}

/* —— easyui datagrid（编排端 / 参赛单位端） —— */
html[data-ui-template] .datagrid-header td,
html[data-ui-template] .datagrid-header-row td{font-size:var(--ui-fs-label) !important}
/* ⚠️ 表头高度**不强行设定**：easyui 表头是两层嵌套 td，任何固定高度都会被叠成 88~90px，
   而表头高度又参与整页高度链 ⇒ 实测会多出滚动条。这里只统一字号与配色（配色见 §7.2）。 */
html[data-ui-template] .datagrid-header .datagrid-cell,
html[data-ui-template] .datagrid-header .datagrid-cell span{font-size:var(--ui-fs-label) !important}
html[data-ui-template] .datagrid-btable .datagrid-cell{
  height:var(--ui-h-td) !important;line-height:var(--ui-h-td) !important;font-size:var(--ui-fs-table) !important;
  padding-left:var(--ui-s3) !important;padding-right:var(--ui-s3) !important;
}
/* ★ 2026-10-08 行高二次下调：除了内层 .datagrid-cell，**td 自身**也要给行高/字号（消除基线空隙）；
   更关键的是 easyui 自带 CSS 里 `.datagrid-header-row, .datagrid-row{height:32px}` 把行高**硬编码**了
   —— 这是"令牌调到 24 行仍是 32"的真正原因，必须在此覆盖。 */
html[data-ui-template] .datagrid-btable tr td{
  padding-top:0 !important;padding-bottom:0 !important;
  height:var(--ui-h-td) !important;line-height:var(--ui-h-td) !important;font-size:var(--ui-fs-table) !important;
}
html[data-ui-template] .datagrid-row{height:var(--ui-h-td) !important}
/* ★ 2026-10-08 表头行同样被 easyui 硬编码（.datagrid-header-row{height:32px}）且多级表头实测 80/40/40px，
   这里统一压到令牌值 26px（与 layui 表头一致）。 */
html[data-ui-template] .datagrid-header-row{height:var(--ui-h-th) !important}
/* 表头单元格：easyui 默认 32px 高 + 上下内距 → 每个表头行实高 40px。
   这里钉到令牌高（含分组表头 .datagrid-cell-group），并清掉 easyui 初始化时写在
   .datagrid-header / 其 table 上的内联固定高（CSS !important 可压内联），
   让多级表头按内容自然收缩（body 高由 tjcrud.js 的 tjFixDgHeader 补偿）。 */
html[data-ui-template] .datagrid-header .datagrid-cell,
html[data-ui-template] .datagrid-header .datagrid-cell-group{
  height:var(--ui-h-th) !important;line-height:var(--ui-h-th) !important;
  /* ★ 2026-10-08 对齐修正：内距必须与数据格**完全一致**（--ui-s3 = 12px）。
     之前表头用 8px、数据格用 12px ⇒ 左对齐列的表头文字比数据文字左偏 4px（用户看着"错开没对齐"）。 */
  padding:0 var(--ui-s3) !important;
}
/* ⚠️ 这里**不能**强制 .datagrid-header / 其 table 的 height:auto ——
   冻结列（view1 序号）表头只有 1 行、主视图（view2）多级表头通常 2 行，
   各自回到"自然高度"后两者就不一样高 ⇒ 序号列与数据行整体错位
   （实测：序号表头 28px vs 数据表头 55px，数据行整整低 27px）。
   表头高度的统一（含清掉 easyui 初始化写死的 80px）一律交给 tjcrud.js 的 tjFixDgHeader，
   它会把两个视图的表头钉成同一个高度，并把差值补给表格体。 */
html[data-ui-template] .datagrid-cell-rownumber,
html[data-ui-template] .datagrid-header-rownumber{line-height:var(--ui-h-td) !important}
/* ★ 2026-10-08 行号格必须和主表单元格**同高**：easyui 默认给它 height:18px，
   而主表单元格是 24px ⇒ 两个视图行高不一致，往下逐行累加错位（序号被行线压住/遮挡）。 */
html[data-ui-template] .datagrid-cell-rownumber{height:var(--ui-h-td) !important}
/* ★ 2026-10-08 用户反馈：行号列（easyui 的 view1）与主表（view2）
     ① 每行矮 1px（view1 行 24px / view2 行 25px）⇒ 往下逐行累加错位，序号被行线压住；
     ② 底色是 easyui 自带的冷灰蓝 rgb(239,242,248) ⇒ 与数据列不一致。
   对齐办法：给 view1 的单元格补上和 view2 同一条下边线（两边行高就都是 25px），底色改透明跟随行。 */
html[data-ui-template] .datagrid-view1 .datagrid-btable td{
  border-bottom:1px solid var(--ui-cyan-line,rgba(61,90,90,.14)) !important;
}
html[data-ui-template] .datagrid-view1 .datagrid-btable td,
html[data-ui-template] .datagrid-view1 .datagrid-body,
html[data-ui-template] .datagrid-cell-rownumber{background:transparent !important}
/* ★ 2026-10-08 行号列表头格（用户截图：唯一还带 easyui 遗留观感的地方）：
   ① 底色是 easyui 自带的冷灰蓝 rgb(239,242,248)，与其它表头格的暖色不同 ⇒ 改透明，吃表头的统一底色；
   ② 高度只有 18px（其它表头格 26px）⇒ 文字贴顶、被行线压住 ⇒ 取"整个表头高度"，
      由 tjcrud.js 的 tjFixDgHeader() 写入 --tj-th-full（多级表头 = 行数×26px）；单级表头回退 --ui-h-th。 */
html[data-ui-template] .datagrid-header-rownumber{
  background:transparent !important;
  height:var(--tj-th-full, var(--ui-h-th)) !important;
  line-height:var(--tj-th-full, var(--ui-h-th)) !important;
}
/* ★ 2026-10-08 用户反馈「序号列表头空白」：easyui 的 rownumber 表头默认不写文字，
   这里用 :empty 只在"确实没字"时补上「序号」（页面自己写了字的表头不受影响，不会出现两个序号）。 */
html[data-ui-template] .datagrid-header-rownumber:empty::after{content:'序号';color:inherit}
/* ★ 2026-10-08 用户反馈「每个格子里有灰色小块」：那是 easyui.css 默认的**点状虚线**网格线
   （.datagrid-header td, .datagrid-body td, .datagrid-footer td{border:1px dotted ...}），
   在缩放/小字号下 dotted 线断成一小截一小截 ⇒ 看着像灰块。改为细实线（沿用同一浅色）。 */
html[data-ui-template] .datagrid-header td,
html[data-ui-template] .datagrid-body td,
html[data-ui-template] .datagrid-footer td{
  border-right:1px solid rgba(61,90,90,0.14) !important;
  border-bottom:1px solid rgba(61,90,90,0.14) !important;
}
/* datagrid 数字列：等宽对齐（成绩表硬要求） */
html[data-ui-template] .datagrid-cell .ui-num{font-variant-numeric:tabular-nums}

/* ---------- 9.4 间距与留白（内容区对齐，间距成体系） ---------- */
/* 内容区：把原来不对称的 15/15/15/50 收敛为对称 24px（大屏 32px）
   只改内距，不动容器高度 ⇒ 不影响高度链
   ⚠️ 需 !important：旧 common.css 里 .ns-body-content 的 padding 声明权重更高（实测压不住） */
/* 内容区留白已统一由 §11.1 定义（四边一致 var(--ui-pad-content)），此处不再重复 */
/* 卡片 / 面板：内距统一 20，圆角 8，阴影分层（"浮起来"的层次感） */
html[data-ui-template] .layui-card{
  border-radius:var(--ui-r-lg);box-shadow:var(--ui-e1);border:1px solid var(--ui-card-line);
  overflow:hidden;
}
html[data-ui-template] .layui-card-header{
  height:auto;line-height:1.4;padding:0 var(--ui-s2);
  border-bottom:1px solid var(--ui-n100);background:var(--ui-n25);
}
/* .layui-card-body 内距统一由 11.2 定义（需 !important 才压得住 layui 默认样式） */
/* 卡片之间的间距（原来靠 margin 各写各的，统一为一档） */
html[data-ui-template] .layui-card + .layui-card,
html[data-ui-template] .ns-screen + .layui-card{margin-top:var(--ui-s5)}
/* 折叠面板（筛选区）：让"筛选/操作提示"和下面的表格有呼吸感 */
html[data-ui-template] .layui-collapse{border-color:var(--ui-card-line);border-radius:var(--ui-r-lg);overflow:hidden}
html[data-ui-template] .layui-colla-title{height:auto;line-height:1.4;padding:var(--ui-s2) var(--ui-s4) var(--ui-s2) var(--ui-s6);font-size:var(--ui-fs-body)}
html[data-ui-template] .layui-colla-content{padding:0 var(--ui-s2)}
html[data-ui-template] .layui-collapse + .layui-table-view,
html[data-ui-template] .layui-collapse + .layui-card{margin-top:var(--ui-s5)}
/* 表格外边距已统一由 §11.2 定义（margin:0，间距由父容器承担），此处不再重复 */

/* ---------- 9.5 字与背景的对比（逐项过 AA） ----------
   浅底正文 --ui-ink-2 #3F3A33 on #E8DCC8/#FFFDFA ≈ 9.2:1 ✓
   浅底说明 --ui-ink-3 #6B6358 ≈ 5.2:1 ✓（AA 正文 4.5 达标）
   深底暖白 #F7F4EF on 午夜蓝 #161E3C ≈ 14.6:1 ✓
   深底暖白 on 藏蓝 #1B2A4A ≈ 13.4:1 ✓
   ⚠️ 占位符 --ui-ink-4（2.9:1）只许用于 placeholder / disabled —— 规范已限定 */
html[data-ui-template] ::placeholder{color:var(--ui-ink-4);opacity:1}
html[data-ui-template] .layui-input::placeholder{color:var(--ui-ink-4)}
/* 选中文本：浅青底 + 深青字（可读且不刺眼） */
html[data-ui-template] ::selection{background:rgba(8,145,178,.18);color:var(--ui-ink)}

/* ---------- 9.6 弹窗 / 窗口与内容的尺寸匹配 ---------- */
/* layer 弹窗：内距与标题条高度对齐规范（不改弹窗自身宽高，由调用方决定） */
html[data-ui-template] .layui-layer-content{padding:0;font-size:var(--ui-fs-body);line-height:1.6}
html[data-ui-template] .layui-layer-btn{padding:var(--ui-s3) var(--ui-s4) var(--ui-s4)}
html[data-ui-template] .layui-layer-tips .layui-layer-content{padding:var(--ui-s2) var(--ui-s3)}
html[data-ui-template] .layui-layer-close2{top:-10px;right:-10px}
/* 弹窗内的表格不要再套外间距（已经是内层） */
html[data-ui-template] .layui-layer-content .layui-table-view{margin-top:0}
/* easyui window 内距已统一由 §11.2 定义（var(--ui-pad-card)），此处不再重复 */
html[data-ui-template] .window-body .datagrid-wrap{border-color:var(--ui-card-line)}
/* easyui messager（确认框 / 提示框）：正文行高与内距 */
html[data-ui-template] .messager-body{padding:0 !important;font-size:var(--ui-fs-body);line-height:1.6}
html[data-ui-template] .messager-button{padding:0 var(--ui-s2) 0}
html[data-ui-template] .messager-button .l-btn{margin-left:var(--ui-s2)}

/* ---------- 9.7 元素相互影响：交互不推动布局 ----------
   原则：悬停 / 选中一律用 transform 或 box-shadow，绝不改 margin/padding/width，
        否则会"顶开"邻居、引发整行重排（抖动）。 */
html[data-ui-template] .layui-btn,
html[data-ui-template] .l-btn,
html[data-ui-template] .layui-nav-item a{will-change:transform}

/* ==========================================================================
   10 · 结构层 = 组件形态（2026-10-07 四轮 · 按目标稿 public/_ui_preview16.html）
   ---------------------------------------------------------------------------
   为什么需要本节：
     前 9 节把「配色」「框架骨架」「排版尺寸」都对齐了，但**组件形态**还是老样子 ——
     表格操作列是**深蓝实心小方块**、分页是**箭头符号**、内容区没有卡片感。
     目标稿的形态原则是：**以文字为主、克制无重色块**（规范 §1.2「克制数量，不克制强度」）。

   全站普查（app/shop/view 335 个页面的真实类名频次）：
     ns-bg-color 317 · layui-btn-primary 311 · ns-screen 74 · layui-table-cell 33
     layui-btn-xs 28 · layui-btn-danger 6 · layui-badge 3 · layui-laypage 1
   ⇒ 本节只针对这些**真实在用的类名**下手，不虚构类名。

   本节不做任何容器高度变更；操作列由"实心块"变"文字"而自然变矮属期望效果。
   ========================================================================== */

/* ---------- 10.1 表格操作列：实心方块 → 常显文字（目标稿的核心形态） ----------
   原来：.layui-table-cell 里的 layui-btn-xs 是**深蓝实心小按钮**（即图2 里的「详情 / 黑名单」）
   目标：常显文字 —— 平时辅助灰、悬停变青，不占列宽、不撑行高
   ⚠️ 只作用于**表格单元格内**（.layui-table-cell 限定）—— 工具栏/表单里的同名按钮不受影响 */
html[data-ui-template] .layui-table-cell .layui-btn-xs,
html[data-ui-template] .layui-table-cell .layui-btn-primary,
html[data-ui-template] .layui-table-cell .layui-btn-sm{
  height:auto !important;line-height:1.6 !important;padding:0 var(--ui-s1) !important;
  background:transparent !important;border:0 !important;box-shadow:none !important;
  color:var(--ui-ink-3) !important;font-size:12.5px !important;font-weight:400 !important;
  vertical-align:middle;
  transition:color var(--ui-fast) var(--ui-ez),transform var(--ui-fast) var(--ui-ez);
}
html[data-ui-template] .layui-table-cell .layui-btn-xs:hover,
html[data-ui-template] .layui-table-cell .layui-btn-primary:hover,
html[data-ui-template] .layui-table-cell .layui-btn-sm:hover{
  color:var(--ui-cyan-ink) !important;background:transparent !important;
  transform:translateY(-1px);box-shadow:none !important;
}
/* 删除等危险操作：保持暗红语义的**文字**，不退回实心红块 */
html[data-ui-template] .layui-table-cell .layui-btn-danger{
  background:transparent !important;border:0 !important;box-shadow:none !important;
  color:var(--ui-danger) !important;
}
html[data-ui-template] .layui-table-cell .layui-btn-danger:hover{
  color:var(--ui-red-hover) !important;background:var(--ui-danger-bg) !important;border-radius:var(--ui-r-sm) !important;
}
/* 操作词之间：小间距（读起来像一组文字链接） */
html[data-ui-template] .layui-table-cell .layui-btn + .layui-btn{margin-left:var(--ui-s2)}

/* ---------- 10.2 内容区卡片化：.ns-screen（全站 74 处的主容器） ---------- */
html[data-ui-template] .ns-screen{
  background:var(--ui-card-bg);border:1px solid var(--ui-card-line);
  border-radius:var(--ui-r-lg);box-shadow:var(--ui-e1);
  padding:var(--ui-s5);margin-top:0;
}
/* 多个区块之间的间距（原来各页 margin-top 写法不一，统一成一档） */
html[data-ui-template] .ns-screen + .ns-screen,
html[data-ui-template] .ns-screen + .layui-card,
html[data-ui-template] .layui-card + .ns-screen{margin-top:var(--ui-s5)}

/* ---------- 10.3 状态标签：左侧同色小圆点（一眼区分语义） ---------- */
html[data-ui-template] .layui-badge,
html[data-ui-template] .layui-badge-rim{
  height:23px;line-height:23px;padding:0 var(--ui-s2) !important;border-radius:var(--ui-r-sm) !important;
  font-size:12px !important;font-weight:500;
}
html[data-ui-template] .layui-badge::before{
  content:"";display:inline-block;width:5px;height:5px;border-radius:50%;
  background:currentColor;opacity:.85;margin-right:6px;vertical-align:1px;
}

/* ---------- 10.4 分页器外观（文案"上一页/下一页"由 ui.js 替换） ---------- */
html[data-ui-template] .layui-laypage{font-size:12.5px}
html[data-ui-template] .layui-laypage a,
html[data-ui-template] .layui-laypage span{
  height:var(--ui-h-btn) !important;line-height:var(--ui-h-btn) !important;min-width:var(--ui-h-btn);
  padding:0 var(--ui-s2) !important;border-radius:var(--ui-r-sm) !important;
  border-color:var(--ui-n200) !important;background:var(--ui-n0) !important;color:var(--ui-ink-2) !important;
  transition:color var(--ui-fast) var(--ui-ez),transform var(--ui-fast) var(--ui-ez),box-shadow var(--ui-fast) var(--ui-ez);
}
html[data-ui-template] .layui-laypage a:hover{
  color:var(--ui-cyan-ink) !important;border-color:var(--ui-cyan-m) !important;
  transform:translateY(-2px);box-shadow:var(--ui-e2);
}
html[data-ui-template] .layui-laypage .layui-laypage-curr .layui-laypage-em{
  background:var(--ui-navy) !important;border-radius:var(--ui-r-sm);
}
html[data-ui-template] .layui-laypage .layui-laypage-curr em{color:#fff !important}
html[data-ui-template] .layui-laypage select,
html[data-ui-template] .layui-laypage input{
  height:var(--ui-h-input-sm) !important;border-radius:var(--ui-r-sm) !important;
  border-color:var(--ui-n200) !important;color:var(--ui-ink-2) !important;
}
/* 文字版翻页按钮标记类（ui.js 注入）：用无衬线、不加字距，读起来是"词"不是"符号" */
html[data-ui-template] .ui-pager-txt{font-family:var(--ui-sans) !important;letter-spacing:0 !important}

/* ---------- 10.5 easyui datagrid 单元格内的操作链接（编排端补齐） ----------
   编排端的操作列多是 formatter 返回的**纯 <a>**（如"上移 / 下移 / 查看"），
   既不是 .layui-btn-xs 也不是 .l-btn —— 10.1 的规则盖不到它们。
   全站普查：tianjing/ttzf.html:196、yddj.html:242、gljl.html:187 等属此类。 */
html[data-ui-template] .datagrid-btable .datagrid-cell a{
  color:var(--ui-ink-3) !important;text-decoration:none !important;
  font-size:12.5px;padding:0 var(--ui-s1);cursor:pointer;
  transition:color var(--ui-fast) var(--ui-ez);
}
html[data-ui-template] .datagrid-btable .datagrid-cell a:hover{
  color:var(--ui-cyan-ink) !important;
}
html[data-ui-template] .datagrid-btable .datagrid-cell a + a{margin-left:var(--ui-s1)}
/* 单元格内的 easyui 按钮（「维护」「关联」「上移」等）：
   它们渲染成 <a class="easyui-linkbutton"> / .l-btn，带实心底与小图标 = 实心小方块，
   与目标稿"操作列常显文字"不符 —— 这里统一成文字态（与 10.1 的 layui 侧一致）。 */
html[data-ui-template] .datagrid-btable .datagrid-cell .l-btn,
html[data-ui-template] .datagrid-btable .datagrid-cell .easyui-linkbutton{
  height:auto !important;line-height:1.6 !important;
  background:transparent !important;border:0 !important;box-shadow:none !important;
  padding:0 var(--ui-s1) !important;
}
html[data-ui-template] .datagrid-btable .datagrid-cell .l-btn .l-btn-left,
html[data-ui-template] .datagrid-btable .datagrid-cell .l-btn .l-btn-text,
html[data-ui-template] .datagrid-btable .datagrid-cell .easyui-linkbutton .l-btn-left,
html[data-ui-template] .datagrid-btable .datagrid-cell .easyui-linkbutton .l-btn-text{
  background:transparent !important;height:auto !important;line-height:1.6 !important;
  border:0 !important;
}
html[data-ui-template] .datagrid-btable .datagrid-cell .l-btn .l-btn-text,
html[data-ui-template] .datagrid-btable .datagrid-cell .easyui-linkbutton .l-btn-text{
  color:var(--ui-ink-3) !important;font-size:12.5px !important;padding:0 !important;
  transition:color var(--ui-fast) var(--ui-ez);
}
html[data-ui-template] .datagrid-btable .datagrid-cell .l-btn:hover .l-btn-text,
html[data-ui-template] .datagrid-btable .datagrid-cell .easyui-linkbutton:hover .l-btn-text{
  color:var(--ui-cyan-ink) !important;
}
/* 操作列只要文字：把按钮自带的小图标一并隐去（图标为位图，浅底上也不清晰） */
html[data-ui-template] .datagrid-btable .datagrid-cell .l-btn .l-btn-icon,
html[data-ui-template] .datagrid-btable .datagrid-cell .easyui-linkbutton .l-btn-icon{
  display:none !important;
}

/* ---------- 10.6 自绘徽章（.m-badge2/3/4/5）→ 目标稿的「状态标签」 ----------
   项目自绘语义徽章（如"维护""关联""已完成""待检录"），tianjing/layout.html
   定义为实心底（深蓝/橙/灰/绿），与目标稿"胶囊浅底 + 同色小圆点 + 同色字"不符。
   只在表格（.datagrid-btable）内生效 —— 抽屉树/其它位置的同款徽章不受影响。 */
html[data-ui-template] .datagrid-btable .m-badge2,
html[data-ui-template] .datagrid-btable .m-badge3,
html[data-ui-template] .datagrid-btable .m-badge4,
html[data-ui-template] .datagrid-btable .m-badge5{
  display:inline-flex !important;align-items:center;gap:6px;
  height:21px !important;line-height:1 !important;padding:0 8px !important;
  border-radius:var(--ui-r-sm) !important;font-size:12px !important;font-weight:500 !important;
  border:1px solid transparent !important;box-shadow:none !important;
  white-space:nowrap;
}
/* 语义四色：浅底 + 同色点 + 同色字 */
html[data-ui-template] .datagrid-btable .m-badge2{background:var(--ui-ok-bg) !important;color:var(--ui-ok) !important;border-color:rgba(47,107,79,.24) !important}
html[data-ui-template] .datagrid-btable .m-badge3{background:var(--ui-warn-bg) !important;color:var(--ui-warn) !important;border-color:rgba(180,83,9,.24) !important}
html[data-ui-template] .datagrid-btable .m-badge4{background:var(--ui-n100) !important;color:var(--ui-ink-3) !important;border-color:var(--ui-n200) !important}
html[data-ui-template] .datagrid-btable .m-badge5{background:var(--ui-cyan-soft) !important;color:var(--ui-cyan-ink) !important;border-color:rgba(14,116,144,.24) !important}
/* 左侧同色小圆点（currentColor，一点即辨语义） */
html[data-ui-template] .datagrid-btable .m-badge2::before,
html[data-ui-template] .datagrid-btable .m-badge3::before,
html[data-ui-template] .datagrid-btable .m-badge4::before,
html[data-ui-template] .datagrid-btable .m-badge5::before{
  content:"";width:5px;height:5px;border-radius:50%;background:currentColor;opacity:.85;flex:0 0 auto;
}
/* 可点击的徽章（inline style 带 cursor:pointer 的，如"维护/关联"）：保留手型 + 悬停上浮 */
html[data-ui-template] .datagrid-btable .m-badge2[style*="pointer"],
html[data-ui-template] .datagrid-btable .m-badge3[style*="pointer"],
html[data-ui-template] .datagrid-btable .m-badge4[style*="pointer"],
html[data-ui-template] .datagrid-btable .m-badge5[style*="pointer"]{
  cursor:pointer;
  transition:transform var(--ui-fast) var(--ui-ez),box-shadow var(--ui-fast) var(--ui-ez);
}
html[data-ui-template] .datagrid-btable .m-badge2[style*="pointer"]:hover,
html[data-ui-template] .datagrid-btable .m-badge3[style*="pointer"]:hover,
html[data-ui-template] .datagrid-btable .m-badge4[style*="pointer"]:hover,
html[data-ui-template] .datagrid-btable .m-badge5[style*="pointer"]:hover{
  transform:translateY(-1px);box-shadow:var(--ui-e2);
}

/* ---------- ★ 2026-10-08 修复：表格内的语义徽章会浮在弹窗之上 ----------
   现象（用户报）：表格里的「关联」标志有时浮在页面最上层，连打开的窗口也被它压住。
   根因：easyui 原版 tips.css 有一条 `.m-badgeN:not(.l-btn){ z-index:99999 }`（红/绿/橙/灰/蓝
        五个色号各一条，是给"按钮角标"用的）。徽章平时是 position:static、z-index 不生效；
        但上面那条 hover 规则给了 `transform:translateY(-1px)`，一旦带上 transform 元素就成为
        **层叠参与者** ⇒ z-index:99999 立刻生效，而 easyui 弹窗只有 9000 多 ⇒ 徽章盖住窗口。
   修法：表格里的语义徽章一律复位为普通层（与表格同层）。用 !important 压过 tips.css（它没带 !important）。
   ⚠️ 只复位 z-index，**不动 position/transform**。
   范围取 `:not(.l-btn)`（= tips.css 里那条规则的原范围）：保留真正的"按钮角标"用法
   （`.l-btn.m-badgeN` 与 `.l-btn.m-badgeN::after`，源码用 `attr(data-badge)` 画角标）不受影响；
   其余所有语义徽章（表格单元格 / 工具条 / 树 / 面板标签）一律回到普通层。
   注意 flex 容器的子元素即使 position:static 也吃 z-index —— 工具条里的徽章同样要复位。 */
html[data-ui-template] .m-badge1:not(.l-btn),
html[data-ui-template] .m-badge2:not(.l-btn),
html[data-ui-template] .m-badge3:not(.l-btn),
html[data-ui-template] .m-badge4:not(.l-btn),
html[data-ui-template] .m-badge5:not(.l-btn){
  z-index:auto !important;
}

/* ---------- ★ 2026-10-08 用户要求：「所有表格中的任何元素都要垂直居中」 ----------
   背景：单元格用 line-height 居中文字，但**非文字**元素（胶囊徽章 / 按钮 / 输入框 / 小图标）
   默认按 baseline 对齐，视觉上会偏高或偏低 ⇒ 一行里"文字居中、徽章不居中"。
   做法：① 单元格本身 vertical-align:middle；② 单元格内**所有直接子元素** vertical-align:middle；
        ③ 标签类（徽章）内部也用 flex 居中，保证"小圆点 + 文字"同一中线。
   覆盖 easyui datagrid（view1 行号列 + view2 数据列）与 layui table。
   ⚠️ 不含记录表（.lqcj-tbl / .tj-tbl）—— 用户要求记录表完全保持原样，不做任何样式干预。 */
html[data-ui-template] .datagrid-btable td,
html[data-ui-template] .datagrid-btable th,
html[data-ui-template] .datagrid-header td,
html[data-ui-template] .datagrid-header th,
html[data-ui-template] .layui-table td,
html[data-ui-template] .layui-table th{vertical-align:middle !important}

html[data-ui-template] .datagrid-btable .datagrid-cell > *,
html[data-ui-template] .datagrid-header .datagrid-cell > *,
html[data-ui-template] .layui-table-cell > *{vertical-align:middle !important}

/* 标签/徽章/按钮这类"有高度的盒子"：仅靠 vertical-align:middle 会因 inline-flex 的基线规则
   偏低约 2px（实测 距单元格上 2.3 / 距下 -1.3，即下沿压出行外）。
   这里把「子元素是标签/按钮」的单元格切成 flex 容器 ⇒ align-items:center 是**精确**居中；
   水平位置仍照原样：easyui 把 align 写成单元格内联 `text-align`，用属性选择器映射到 justify-content。 */
html[data-ui-template] .datagrid-btable .datagrid-cell:has(> .m-badge1, > .m-badge2, > .m-badge3, > .m-badge4, > .m-badge5, > .zb-badge, > .cp-badge, > .gw-badge, > .l-btn, > button){
  display:flex !important;align-items:center !important;
}
html[data-ui-template] .datagrid-btable .datagrid-cell[style*="text-align:center"]:has(> .m-badge1, > .m-badge2, > .m-badge3, > .m-badge4, > .m-badge5, > .zb-badge, > .cp-badge, > .gw-badge, > .l-btn, > button){
  justify-content:center !important;
}
html[data-ui-template] .datagrid-btable .datagrid-cell[style*="text-align:right"]:has(> .m-badge1, > .m-badge2, > .m-badge3, > .m-badge4, > .m-badge5, > .zb-badge, > .cp-badge, > .gw-badge, > .l-btn, > button){
  justify-content:flex-end !important;
}
/* 标签内部也居中（小圆点与文字同一中线） */
html[data-ui-template] .datagrid-btable .datagrid-cell > .m-badge1,
html[data-ui-template] .datagrid-btable .datagrid-cell > .m-badge2,
html[data-ui-template] .datagrid-btable .datagrid-cell > .m-badge3,
html[data-ui-template] .datagrid-btable .datagrid-cell > .m-badge4,
html[data-ui-template] .datagrid-btable .datagrid-cell > .m-badge5,
html[data-ui-template] .datagrid-btable .datagrid-cell > .zb-badge,
html[data-ui-template] .datagrid-btable .datagrid-cell > .cp-badge,
html[data-ui-template] .datagrid-btable .datagrid-cell > .gw-badge,
html[data-ui-template] .datagrid-btable .datagrid-cell > .l-btn,
html[data-ui-template] .datagrid-btable .datagrid-cell > a.l-btn,
html[data-ui-template] .datagrid-btable .datagrid-cell > button{
  display:inline-flex !important;align-items:center !important;justify-content:center !important;
  vertical-align:middle !important;
  /* ★ 2026-10-08 用户要求「关联标志必须完全展示」：单元格被切成 flex 容器后，徽章默认 flex-shrink:1
     会被压扁（实测自然宽 57px 被压到 35px，"关联"二字变形 ✗）。这里禁止收缩 + 禁止换行
     ⇒ 宁可溢出也绝不挤字；配套把关联列宽从 60px 调到 84px（jszb / bsxm）。 */
  flex:0 0 auto !important;white-space:nowrap !important;
}
/* 单元格内的图片/图标（老式 16px 位图）也钉在中线 */
html[data-ui-template] .datagrid-btable .datagrid-cell > img,
html[data-ui-template] .datagrid-header .datagrid-cell > img{vertical-align:middle !important}

/* ---------- ★ 2026-10-08 用户要求：全项目「关联」标记统一成**绿色**胶囊 ----------
   原状：8 个文件里 4 种写法（橙 m-badge3 / 绿 m-badge2 / 纯文字 / 无样式），同一含义四副面孔。
   现统一为 m-badge2（主题语义色 = 绿）。此处带色值兜底，避免个别页没引 templates.css 时失色。 */
html[data-ui-template] .datagrid-btable .datagrid-cell > .m-badge2{
  background:var(--ui-ok-bg,#E6F1EA) !important;
  color:var(--ui-ok,#2F6B4F) !important;
  border-color:rgba(47,107,79,.24) !important;
}

/* ---------- 10.6 表格行悬停：首列青色指示条（"一眼看出在哪行"） ---------- */
html[data-ui-template] .layui-table tbody tr:hover td:first-child{
  box-shadow:inset 2px 0 0 var(--ui-cyan-ink);
}
html[data-ui-template] .layui-table tbody tr.layui-table-click td:first-child{
  box-shadow:inset 3px 0 0 var(--ui-cyan-ink);
}

/* ---------- 10.7 [2026-10-09 重写] 商城端导航改横栏 ⇒ 不再有左侧栏 ----------
   用户要求「商城端导航栏像编排端一样使用横栏」，选定形态 = **一排下拉菜单**：
     横栏只有一排（一级菜单），悬停/点击展开下拉，下拉里按「二级（其下再列三级）」分组。
   ⇒ 原「一级(.ns-first-nav) + 二级(.ns-second-nav)」两列竖排侧栏**整体移除**，
     横栏结构与外观统一写在 `app/shop/view/base/style1.html` / `style2.html`（两个风格同步）。
   本节历史使命结束（原为 130→160 侧栏加宽 + 内容区 left 230→320 对齐），现只剩两件事：
     ① 把内容区左侧定位收回 0（须压过旧 common.css 的 left:230px 与本节历史值 320px）
     ② 纵向让出「顶栏 60 + 横栏 36」= 96px（顶栏高度 60 由 common.css 的 .ns-header-right 决定）
   硬约束不变：只动定位数值，不碰各页自身高度；配色一律走 --ui-*（横栏配色在布局文件里，同样走令牌）。
   回溯：若要恢复竖排侧栏，取 git 上一版 style1/style2 与本节的 160/320 规则即可。 */
/* 内容区左侧一律归零（两个风格都一样）。纵向 top 由**各布局自己**给，因为两者铬高不同：
     · style2：顶栏 60 + 横栏 36               = 96px
     · style1：顶栏 60 + 横栏 36 + 面包屑 43   = 139px
   各布局用 `.ns-body`（多数一个类 ⇒ 特异性高于本行）自行覆盖 top。 */
html[data-ui-template] .ns-layout .ns-body{left:0 !important}
/* ★ 2026-10-09 标题行高由 60 改 45（与编排端 #tj-head 首行一致）⇒ 菜单栏紧随其后 */
html[data-ui-template] .ns-layout .ns-topnav-wrap{top:45px !important}

/* ---------- 10.8 [已移除] 顶栏「SYSTEM ONLINE」脉冲灯 ----------
   用户明确要求删除（"这个滑块太脑残了，每个栏都有"）。
   元素已从 style2.html / tianjing/layout.html 移除，样式一并删除。 */

/* ---------- 10.9 easyui 下拉菜单：去掉滚动条，直接撑开展示全部 ----------
   用户两轮反馈：先嫌滚动条"像滑块太碍眼"，后明确「**直接删除滚动条、展示全部大小**」。
   做法：取消 easyui 给 .menu 的固定高 + 内部滚动，让菜单自然撑开到内容全部高度
   （这些菜单项就 4~8 个，本就不会超高 ⇒ 平时根本不会出现滚动条）。
   max-height 仅作"万一超出视口"的兜底，overflow-y:auto 保证只在真超高时才滚动。 */
html[data-ui-template] .menu,
html[data-ui-template] .easyui-menu{
  height:auto !important;
  max-height:calc(100vh - 60px) !important;
  overflow:visible !important;
  overflow-y:auto !important;
}
/* 细滚动条样式仅作"超高兜底"时的观感（平时不显示） */
html[data-ui-template] .menu::-webkit-scrollbar{width:6px}
html[data-ui-template] .menu::-webkit-scrollbar-thumb{background:var(--ui-n300);border-radius:3px}
html[data-ui-template] .menu::-webkit-scrollbar-track{background:transparent}
html[data-ui-template] .menu{scrollbar-width:thin;scrollbar-color:var(--ui-n300) transparent}

/* 分项导航板抽屉：高度占满视口（与页面同高）
   ★ 用户要求"抽屉高度应和整个页面一样高，所以不需要底部的色块"——
     抽屉改为 100vh 占满视口，底部无空隙 → 外层 panel 背景不再需要（已回滚之前的暖沙填充）。 */
/* ★ 用 min/max-height 强制 = 视口高：easyui JS 会用内联 style="height:836px"
     覆盖普通的 height 声明；但 min/max-height 是"范围约束"，内联 height 无法突破它。 */
/* ★ 2026-10-08 用户要求：「分项导航板」要拉伸到页面底部。
   根因：抽屉面板同时带 .window 类，被第 9 节弹窗通用规则 `max-height:var(--ui-dialog-max)`（88vh）
   卡成了 792px（900 的 88%），于是抽屉底边悬在半空、内容还溢出面板。
   这里对抽屉单独放开高度上限，并让它顶到底、内容区（.f-full）用 flex 撑满。 */
html[data-ui-template] .panel.window.drawer,
html[data-ui-template] .window.drawer{
  max-height:none !important;height:auto !important;
  top:0 !important;bottom:0 !important;
}
html[data-ui-template] .window.drawer > .panel-body{
  display:flex !important;flex-direction:column !important;
  flex:1 1 auto !important;min-height:0 !important;overflow:hidden !important;
  /* ★ 还需放开"弹窗内容区上限"（第 19 节 .window > .panel-body{max-height:calc(88vh - 44px)} = 748px），
     否则抽屉面板虽已顶到底、内体仍停在 748px，下半截是空的。 */
  max-height:none !important;
}
html[data-ui-template] .window.drawer .f-full{
  flex:1 1 auto !important;min-height:0 !important;overflow:auto !important;
}
/* ★ 2026-10-08 用户要求：抽屉展开时左侧页面（含左下角翻页条）被遮罩压暗到"看不见"。
   根因：抽屉自带 .drawer-mask（.window-mask）铺满全屏、背景 rgba(10,22,51,.35)、z-index 9000
   —— 它盖在页面之上，把页面整片压暗（同时也吃掉翻页条的点击）。
   这里只针对**抽屉遮罩**改为完全透明：页面清晰可见、翻页可读可点，
   而"点空白处收起抽屉"的行为仍由这层遮罩承担（不改变交互）。 */
html[data-ui-template] .drawer-mask.window-mask,
html[data-ui-template] .window-mask.drawer-mask{
  background:transparent !important;opacity:0 !important;
}

html[data-ui-template] .easyui-drawer{
  min-height:100vh !important;
  max-height:100vh !important;
}
html[data-ui-template] .easyui-drawer .panel-body{
  height:100% !important;
  box-sizing:border-box !important;
}
/* 分项导航板抽屉：滚动条细淡化（内容真超高必须滚，但6px细条不碍眼） */
html[data-ui-template] .easyui-drawer::-webkit-scrollbar,
html[data-ui-template] .easyui-drawer .panel-body::-webkit-scrollbar{width:6px}
html[data-ui-template] .easyui-drawer::-webkit-scrollbar-thumb,
html[data-ui-template] .easyui-drawer .panel-body::-webkit-scrollbar-thumb{background:var(--ui-n300);border-radius:3px}
html[data-ui-template] .easyui-drawer::-webkit-scrollbar-track,
html[data-ui-template] .easyui-drawer .panel-body::-webkit-scrollbar-track{background:transparent}
html[data-ui-template] .easyui-drawer,
html[data-ui-template] .easyui-drawer .panel-body{scrollbar-width:thin;scrollbar-color:var(--ui-n300) transparent}

/* ==========================================================================
   10.10 浮层与弹窗的滚动条统一（用户："这种错误到处都是"）
   ---------------------------------------------------------------------------
   A 下拉面板（选项少）→ height:auto 撑开，平时无滚动条（同 10.9 菜单）
   B 弹窗内容（可能超高）→ 保留滚动但 6px 细淡（弱化存在感）
   ========================================================================== */

/* --- A. 下拉面板撑开：layui select / easyui combo / autocomplete ---
   ★ 覆盖 easyui combobox 的所有可能容器（.combo-panel 及其内层 .combo-panel-body），
     避免"只有 2 项还出滚动条"（easyui JS 会按 panelHeight 固定面板高 → 内容一高就滚）。 */
html[data-ui-template] .layui-form-select dl,
html[data-ui-template] .combo-panel,
html[data-ui-template] .combo-panel .combo-panel-body,
html[data-ui-template] .combo-panel-body,
html[data-ui-template] .combo-p .combo-panel,
html[data-ui-template] .autocomplete-panel{
  height:auto !important;
  max-height:calc(100vh - 60px) !important;   /* 超高兜底（选项特别多时才滚） */
  overflow-y:auto !important;
  overflow-x:hidden !important;
  scrollbar-width:thin !important;scrollbar-color:var(--ui-n300) transparent !important;
}
html[data-ui-template] .combo-panel::-webkit-scrollbar,
html[data-ui-template] .combo-panel-body::-webkit-scrollbar{width:6px}
html[data-ui-template] .combo-panel::-webkit-scrollbar-thumb,
html[data-ui-template] .combo-panel-body::-webkit-scrollbar-thumb{background:var(--ui-n300);border-radius:3px}
html[data-ui-template] .combo-panel::-webkit-scrollbar-track,
html[data-ui-template] .combo-panel-body::-webkit-scrollbar-track{background:transparent}

/* --- B. 弹窗内容区滚动条细淡化（6px） --- */
/* WebKit 滚动条（Chrome/Edge） */
html[data-ui-template] .layui-layer-content::-webkit-scrollbar,
html[data-ui-template] .layui-layer-content iframe::-webkit-scrollbar,
html[data-ui-template] .window .panel-body::-webkit-scrollbar,
html[data-ui-template] .dialog-content::-webkit-scrollbar,
html[data-ui-template] .panel-body::-webkit-scrollbar{
  width:6px;height:6px;
}
html[data-ui-template] .layui-layer-content::-webkit-scrollbar-thumb,
html[data-ui-template] .layui-layer-content iframe::-webkit-scrollbar-thumb,
html[data-ui-template] .window .panel-body::-webkit-scrollbar-thumb,
html[data-ui-template] .dialog-content::-webkit-scrollbar-thumb,
html[data-ui-template] .panel-body::-webkit-scrollbar-thumb{
  background:var(--ui-n300);border-radius:3px;
}
html[data-ui-template] .layui-layer-content::-webkit-scrollbar-thumb:hover,
html[data-ui-template] .layui-layer-content iframe::-webkit-scrollbar-thumb:hover,
html[data-ui-template] .window .panel-body::-webkit-scrollbar-thumb:hover,
html[data-ui-template] .dialog-content::-webkit-scrollbar-thumb:hover,
html[data-ui-template] .panel-body::-webkit-scrollbar-thumb:hover{background:var(--ui-n400)}
html[data-ui-template] .layui-layer-content::-webkit-scrollbar-track,
html[data-ui-template] .layui-layer-content iframe::-webkit-scrollbar-track,
html[data-ui-template] .window .panel-body::-webkit-scrollbar-track,
html[data-ui-template] .dialog-content::-webkit-scrollbar-track,
html[data-ui-template] .panel-body::-webkit-scrollbar-track{background:transparent}
/* Firefox */
html[data-ui-template] .layui-layer-content,
html[data-ui-template] .window .panel-body,
html[data-ui-template] .dialog-content,
html[data-ui-template] .panel-body{
  scrollbar-width:thin;scrollbar-color:var(--ui-n300) transparent;
}
html[data-ui-template] .layui-table tbody tr,
html[data-ui-template] .datagrid-row{transition:background-color var(--ui-fast) var(--ui-ez)}

/* ==========================================================================
   11 · 间距统一 / 弹窗自适应 / 浮层层级（2026-10-07 用户四项要求）
   ---------------------------------------------------------------------------
   用户原话：
     ① 所有背景框和内容必须对齐，四周间距保持一致
     ② 所有弹窗改成自适应内容高度
     ③ 很多下拉菜单被导航挡住 → 修正浮层层级
     ④ 所有页面的 margin 需要彻底去掉

   实测到的病灶（改前真实值）：
     .ns-body>div     padding:32px 32px 40px  ← 四边不一致（上32/左右32/下40）
     .ns-screen          padding:20px            ← 与页面容器不统一
     .layui-table-view   margin:16px 0 10px      ← 上下不对称
     编排端内容区         padding:0               ← 内容贴边
     .menu               z-index:auto            ← 被 #tj-head(z-index:1000,sticky) 压住

   统一基准：每个容器的**四边**一致；间距一律由父容器 padding 承担，
             子元素不再各写各的 margin（=「margin 彻底去掉」的安全落地）。
   ========================================================================== */

/* ---------- 11.1 页面内容区：四边一致 ---------- */
html[data-ui-template] .ns-body > div,
html[data-ui-template] .ns-body > .layui-tab,
html[data-ui-template] .ns-body-content{
  padding:0 !important;   /* 完全贴边（用户要求） */
}
/* 编排端内容区：**不给 .tj-body 自身加 padding**
   ⚠️ 踩坑实录：.tj-body 的高度链与 53 处 calc(100vh - N) 强耦合，
      给它加 padding（24px）不计入盒内高度 → 整页溢出 44px（实测）。
      间距改由**内部面板**承担：.layout-panel-center > .panel-body 拿到四边一致的留白。 */
html[data-ui-template] .layout-panel-center > .panel-body{padding:0 !important}

/* ---------- 11.2 卡片与表格：内边距四边一致，外边距全部清零 ---------- */
html[data-ui-template] .ns-screen,
html[data-ui-template] .layui-card-body{
  padding:0 !important;   /* 完全贴边（用户要求） */
}
/* .layui-card 是外框，**不加 padding**（否则标题条也会内缩）；表格外边距全部由卡片 padding 承担 */
/* 表格视图：清掉不对称外边距（间距全部由卡片 padding 承担，不再叠加） */
html[data-ui-template] .layui-table-view{margin:0 !important}
html[data-ui-template] .layui-table-view .layui-table{margin:0 !important}
html[data-ui-template] .ns-screen .layui-table-view:first-child,
html[data-ui-template] .layui-card .layui-table-view:first-child,
html[data-ui-template] .ns-screen > .layui-table-view:last-child,
html[data-ui-template] .layui-card > .layui-table-view:last-child{margin:0 !important}
/* 弹窗/对话框内容区：四边一致（不改动表格 datagrid 的 panel-body，避免挤压表格） */
html[data-ui-template] .window > .panel-body,
html[data-ui-template] .dialog-content{padding:0 !important}
html[data-ui-template] .ns-body-content .layui-table-view,
html[data-ui-template] .ns-body-content .datagrid-wrap{margin-top:var(--ui-s4) !important}

/* ---------- 11.3 弹窗自适应内容高度（easyui window / dialog） ---------- */
/* easyui 用内联 style 固定窗口高 → 覆盖为自适应；内容真超高时以 88vh 为上限滚动 */
html[data-ui-template] .panel.window,
html[data-ui-template] .window{
  height:auto !important;
  max-height:var(--ui-dialog-max) !important;
}
html[data-ui-template] .window > .panel-body,
html[data-ui-template] .window .window-body,
html[data-ui-template] .window .dialog-content{
  height:auto !important;
  max-height:var(--ui-dialog-max-inner) !important;   /* 扣掉标题栏 */
  overflow-y:auto !important;
  box-sizing:border-box !important;
}
/* 兜底：弹窗内是 iframe 等无法自适应的内容时，保留可用高度不塌陷 */
html[data-ui-template] .window .panel-body > iframe{
  height:auto !important;
  min-height:420px !important;
}

/* ---------- 11.3b layui layer 弹窗：自适应高度 + 上限兜底 ----------
   配合本次批量清理：type:1 的调用已去掉 area 高度项（只留宽度），
   高度由内容决定。这里给出「上限 + 超出滚动」，避免长表单把弹窗撑出屏幕。
   ⚠️ type:2（iframe 层）不参与自适应，其高度仍由调用方指定。 */
html[data-ui-template] .layui-layer{
  max-height:var(--ui-dialog-max) !important;
}
html[data-ui-template] .layui-layer-content{
  max-height:var(--ui-dialog-max-inner) !important;
  overflow-y:auto !important;
  box-sizing:border-box !important;
}
/* layer 弹窗内的表格不要再套外间距（已是内层） */
html[data-ui-template] .layui-layer-content .layui-table-view{margin:0 !important}

/* ---------- 11.4 浮层层级：所有浮层必须高于 sticky 顶栏 ---------- */
/* 病灶：.menu 的 z-index 是 auto，而 #tj-head 是 sticky + z-index:1000
   → 帮助/秩序册等下拉菜单被顶栏盖住。以下把 easyui 系浮层统一提到顶层。
   （layui 自己的下拉 dl 是 99999999，无需改动） */
/* ⚠️ 窗口(.window)与对话框**不在**此列：它们由 easyui 自己管理 z-index
   （每次打开自动递增 ⇒ 后打开的窗口自然在最上层）。
   若把窗口也统一设成 999999，多个窗口会压成同级、由 DOM 顺序决定前后 ——
   就会出现"后打开的弹窗把先打开的完全遮住（用户看到『去后面了』）"。 */
html[data-ui-template] .menu,
html[data-ui-template] .easyui-menu,
html[data-ui-template] .combo-panel,
html[data-ui-template] .autocomplete-panel,
html[data-ui-template] .messager,
html[data-ui-template] .messager-window{
  z-index:var(--ui-z-float) !important;
}
/* ⚠️ 遮罩/阴影的 z-index **不要固定**：easyui 会自动把它们设为"窗口之下、页面之上"。
   若这里固定 999997，而窗口是 easyui 自增的 9006 ⇒ 遮罩会盖住窗口 ⇒ 页面锁死（踩过的坑）。 */
html[data-ui-template] .menu-shadow,
html[data-ui-template] .window-shadow,
html[data-ui-template] .window-mask{
  /* 不设置 z-index —— 由 easyui 的窗口管理逻辑自动安排 */
}

/* ---------- 11.5 图标精简：JS 动态生成的图标用 CSS 隐藏 ----------
   用户要求去掉"多余小图标"。处理分工：
     · HTML 里真实存在的图标标签 → 已批量删除
       （搜索按钮放大镜 <i class="layui-icon">、侧栏位图菜单图标 <img {$menu_v.icon}>、菜单 iconCls）
     · JS 动态生成、HTML 中无标签可删 → 本节用 CSS 隐藏
     ⚠️ 只隐藏"图标字符/背景图"，**保留按钮本体**（按钮仍需点击）；
        且严格限定在分页器容器内，避免把表格操作列的图标按钮变成空白块。 */
html[data-ui-template] .easyui-pagination .l-btn-icon,
html[data-ui-template] .easyui-pagination [class*="pagination-"],
html[data-ui-template] .pagination .l-btn-icon,
html[data-ui-template] .pagination [class*="pagination-"]{
  background-image:none !important;
}
/* 分页器内的图标按钮：隐藏图标后让文字（若有）正常显示 */
html[data-ui-template] .easyui-pagination .l-btn-icon{
  padding-left:0 !important;background-position:center !important;
}

/* ---------- 11.5a ★ 2026-10-08 「纯图标按钮变空白」的成因与修法（重要，勿删此说明）----------
   成因：本节（含第 14 节 ①）为了"去掉多余小图标"把 .l-btn-icon 全站 display:none + 去底图；
         这**对有文字的按钮没问题**，但分页器的 首页/上一页/下一页/末页/刷新 是 easyui 用
         iconCls 生成的**无文字**按钮（<span class="l-btn-text l-btn-empty">&nbsp;</span>
         <span class="l-btn-icon pagination-xxx">），图标一藏就整块空白 ✗（用户截图里的空框）。
   修法：**不用 CSS**（实测 ::before 在这里不绘制 ✗），改为在 JS 里给这些无文字按钮补中文文字：
         `public/static/js/ui.js` 的 fixPagerText()（DOM 文案改写，编排端与单位端共用该文件）。
         本节下方"隐藏 .l-btn-icon"的规则**保持不动** —— 补文字后按钮有内容可显示，同时不引回 easyui 位图。 */

/* ---------- 11.5b 编排端首页时间线卡片：贴边 + 圆点右侧内容右移 50px ----------
   上/右/下保持 0（早前"完全贴边"要求）；
   ★ 2026-10-07 用户新要求：时间轴圆点保持原位，圆点右侧整体（时间文字/标题/按钮/图表）右移 50px
   —— 圆点(::after)与轴线(border-left)是绝对定位不受 padding 影响 ⇒ 只给左 padding。 */
html[data-ui-template] .timeline-item{padding:0 0 0 50px !important}
/* 分组标题（"基础数据、比赛设置"等）下间距也清 0 */
html[data-ui-template] .panel-htop .panel-header{padding-bottom:0 !important}

/* ==========================================================================
   12 · 按钮与下拉的统一规范（2026-10-07 用户三项要求）
   ---------------------------------------------------------------------------
     ① 所有按钮类 / 下拉菜单类 / 按钮中的文字 —— 在所在功能的边框中按高度居中
     ② 没有对齐的边框严格对齐（同类按钮同高、容器内垂直对齐）
     ③ 按钮高度对齐的同时，边框预留动画像素空间（hover translateY(-2px)
        与阴影不溢出容器，不被裁剪）
   ========================================================================== */

/* --- ① 按钮文字垂直居中：统一改用 flex 居中（取代"行高=高度"的 trick，
        后者在字体换行/图标混排时容易偏上/偏下） --- */
html[data-ui-template] .layui-btn,
html[data-ui-template] .l-btn,
html[data-ui-template] a.easyui-linkbutton{
  display:inline-flex !important;align-items:center !important;justify-content:center !important;
  box-sizing:border-box !important;
}
html[data-ui-template] .l-btn .l-btn-left{
  display:inline-flex !important;align-items:center !important;height:100% !important;
}
html[data-ui-template] .l-btn .l-btn-text{
  display:inline-flex !important;align-items:center !important;justify-content:center !important;
  line-height:normal !important;height:auto !important;vertical-align:initial !important;
}
html[data-ui-template] .layui-btn i,
html[data-ui-template] .l-btn-icon{
  align-self:center !important;margin-top:0 !important;
}
/* easyui 下拉/输入框（textbox、combobox、searchbox）的文字垂直居中 */
html[data-ui-template] .textbox-text,
html[data-ui-template] .textbox .textbox-prompt{
  display:flex !important;align-items:center !important;
  line-height:normal !important;padding-top:0 !important;padding-bottom:0 !important;
}
/* layui 下拉 select */
html[data-ui-template] .layui-select,
html[data-ui-template] select.layui-input{
  display:inline-flex !important;align-items:center !important;
}

/* --- ②③ 按钮容器：按钮严格垂直居中 + 上下各预留 4px 动画空间
        （hover 上移 2px + 阴影扩散 2px 都不溢出、不被裁剪） --- */

/* ★ 编排端工具栏（easyui layout 的 north 区，如 bsgcCj 的"查看/获取计时成绩/…"那一排）
   —— 它是 .layout-panel-north，不是 .datagrid-toolbar，需要单独安排垂直居中。
   之前那排按钮贴着顶边、下方留白，就是因为这里没有居中规则。 */
html[data-ui-template] .layout-panel-north > .panel-body{
  display:flex !important;align-items:center !important;flex-wrap:wrap !important;
  gap:4px !important;
  padding:0 !important;   /* 高度由调用方（north 区 height）给定 */
  box-sizing:border-box !important;
}
html[data-ui-template] .layout-panel-north > .panel-body > a,
html[data-ui-template] .layout-panel-north > .panel-body > select,
html[data-ui-template] .layout-panel-north > .panel-body > span,
html[data-ui-template] .layout-panel-north > .panel-body > div,
html[data-ui-template] .layout-panel-north > .panel-body > input{
  align-self:center !important;
  margin-top:auto !important;margin-bottom:auto !important;
  vertical-align:middle !important;
}
/* 分隔线（竖条）也跟着居中 */
html[data-ui-template] .layout-panel-north .datagrid-btn-separator{
  align-self:center !important;height:20px !important;
}

html[data-ui-template] .datagrid-toolbar{
  display:flex !important;align-items:center !important;flex-wrap:wrap !important;
  gap:4px !important;   /* 按钮间距统一 4px（严格对齐） */
  padding-top:4px !important;padding-bottom:4px !important;
  min-height:calc(var(--ui-h-btn) + 8px) !important;   /* 按钮高(35) + 8px 动画空间 */
  box-sizing:border-box !important;
}
html[data-ui-template] .dialog-button,
html[data-ui-template] .messager-button,
html[data-ui-template] .layui-layer-btn{
  display:flex !important;align-items:center !important;justify-content:flex-end !important;
  gap:8px !important;
  padding-top:4px !important;padding-bottom:4px !important;
  min-height:calc(var(--ui-h-btn-sm) + 8px) !important;   /* 弹窗按钮(32) + 8px */
  box-sizing:border-box !important;
}

/* ---------- 12.3b 编排端标准导航板：蓝色系（参考「即墨中联部队测试」页） ----------
   参考页的「分组标题/时间文字/按钮文字」均为蓝色系。仅作用于编排端（.tj-body 内），
   不影响商城后台（layui 端保持 V16 深色文字）。 */
html[data-ui-template] .tj-body h1,
html[data-ui-template] .tj-body h2,
html[data-ui-template] .tj-body h3{color:#2E5A88}
html[data-ui-template] .tj-body .l-btn .l-btn-text,
html[data-ui-template] .tj-body a.easyui-linkbutton .l-btn-text,
html[data-ui-template] .tj-body .easyui-linkbutton{color:#2E5A88}

/* ---------- 12.4 全站按钮/交互元素：最小高度 32px ----------
★ 2026-10-08 更新：本条原为"所有低于 35 的栏高设置成 35"（用户早前要求）。
   用户当日新要求「所有按钮和标签按 _ui_preview6.html 的样式统一」，
   而 preview6 的按钮高度规范就是 **32px** ⇒ 这里同步调到 32px，避免与统一规格打架。
   用 min-height:35px 兜底（不改内联 style，避免上次那种布局塌陷）：
     · 低于 35 的（layui-btn-xs 26px、btn-sm 32px、btn 34px、内联 26/30/32px 等）→ 拉到 35
     · 高于 35 的（输入框 36px、工具栏 41px、弹窗按钮区 39px）→ 不变
   ⚠️ 表格内小按钮（layui-btn-xs）35px + 单元格 padding 6×2 = 47 < 行高 48 → 不撑行。 */
html[data-ui-template] .l-btn,
html[data-ui-template] a.easyui-linkbutton,
html[data-ui-template] .easyui-menubutton,
html[data-ui-template] .layui-btn,
html[data-ui-template] .layui-btn-xs,
html[data-ui-template] .layui-btn-sm,
html[data-ui-template] .layui-btn-primary,
html[data-ui-template] .datagrid-toolbar a.l-btn,
html[data-ui-template] .dialog-button a.l-btn,
html[data-ui-template] .messager-button .l-btn{
  min-height:32px !important;
}

/* --- ③ hover 动画：确保按钮本体不推动布局、不溢出容器 --- */
html[data-ui-template] .l-btn,
html[data-ui-template] .layui-btn{
  transition:transform var(--ui-fast) var(--ui-ez),box-shadow var(--ui-fast) var(--ui-ez) !important;
  will-change:transform;
}
html[data-ui-template] .l-btn:hover,
html[data-ui-template] .layui-btn:hover{
  transform:translateY(-2px);   /* 上移 2px —— 容器已预留 4px，不会溢出 */
  box-shadow:var(--ui-e2);
}

/* ---------- 11.6 「新建赛事」向导弹窗：消除多层滑块 ----------
   【用户反馈】弹窗右侧出现多条竖滑块，要求全部删掉。
   【根因】该弹窗（.window#w_xjss）内部嵌套了 easyui layout：
       西 = 步骤条（基础信息/关于报名/…）、中 = 表单、南 = 按钮区。
     easyui 给**每一个** panel-body 默认 overflow:auto；窗口稍小、内容一高，
     外层 window-body、中区 panel-body 同时滚动 → 视觉上就是"多条竖线/滑块"。
     实测：中区内容 scrollH=914 仅比容器 clientH=910 高 4px（被 overflow-y:hidden 切了）。
   【修复】
     ① 外层 window-body 与西/南 panel-body 关掉滚动（内容少，本就不该滚）；
     ② 中区保留滚动但细淡化（6px 细条）；
     ③ 压缩表单行距 .xjss-row 12px→8px（12 行省约 48px）让内容不再超高，
        多数情况下中区也不再滚动 —— 滑块彻底消失。 */
html[data-ui-template] .window .panel-body[id^="w_"],
html[data-ui-template] .window .easyui-layout .layout-panel-west > .panel-body,
html[data-ui-template] .window .easyui-layout .layout-panel-south > .panel-body{
  overflow-y:hidden !important;
}
html[data-ui-template] .window .easyui-layout .layout-panel-center > .panel-body{
  overflow-y:auto !important;
}
/* 中区滚动条：6px 细淡（只在真超高时出现） */
html[data-ui-template] .window .easyui-layout .layout-panel-center > .panel-body::-webkit-scrollbar{
  width:6px;height:6px;
}
html[data-ui-template] .window .easyui-layout .layout-panel-center > .panel-body::-webkit-scrollbar-thumb{
  background:var(--ui-n300);border-radius:3px;
}
html[data-ui-template] .window .easyui-layout .layout-panel-center > .panel-body::-webkit-scrollbar-track{
  background:transparent;
}
/* 压缩向导表单行距（原 margin-bottom:12px → 6px，实测中区仍超 22px，需再省 24px） */
html[data-ui-template] .xjss-row{margin-bottom:6px !important}

/* ==========================================================================
   ★★★ 2026-10-08 用户明确要求（截图红箭头）：**悬停底一律中性灰，不要带颜色**
   ---------------------------------------------------------------------------
   原话："我是不希望字体后面的颜色 和选定框其他地方的颜色不一样"
   ⇒ 鼠标经过时只允许在**明度**上变化（提亮），不允许引入色相。
   本块把主题里原先用「浅青 --ui-cyan-soft」当悬停底的地方统一改成中性浅灰 --ui-n100；
   深色面（顶栏 / 深色侧栏）走"半透明白"（见 templates.css 的 --ui-side-hover-bg）。
   两者都是"中性提亮"，字色保持原样（用户只在意"字体后面的颜色"）。
   ⚠️ 只管 :hover 与"展开中"；"选中/当前"状态（表格行选中、导航当前项、活动页签）保持原样。
   ========================================================================== */
html[data-ui-template] .datagrid-toolbar .l-btn:hover,
html[data-ui-template] .datagrid-toolbar .l-btn:hover .l-btn-left,
html[data-ui-template] .panel-tool a[class*='icon-']:hover,
html[data-ui-template] .pagination .l-btn:hover,
html[data-ui-template] .l-btn-plain:hover,
html[data-ui-template] .menu-item:hover,
html[data-ui-template] .menu-item-active,
html[data-ui-template] .menu-active,
html[data-ui-template] .combobox-item-hover,
html[data-ui-template] .calendar-day:hover,
html[data-ui-template] .tree-node-hover,
html[data-ui-template] .xtsz-nav a:hover,
html[data-ui-template] .ui-seg button:hover,
html[data-ui-template] .layui-form-select dl dd:hover,
html[data-ui-template] .layui-laypage a:hover{background:var(--ui-n100) !important}

/* ---------- 顶栏"选中的那一块"：唯一底色 = 整块（35px）一个中性色，悬停 = 展开中 ----------
   2026-10-08 用户截图：同一项出现两种色（外框 35px 一层 + 内层 19px 又一层）✗
   现在：外框（a.l-btn/.m-btn）是**唯一**上色元素，内层任何状态下都不上色。 */
html[data-ui-template] #tj-head .l-btn,
html[data-ui-template] #tj-head .m-btn,
html[data-ui-template] #tj-head .easyui-menubutton,
html[data-ui-template] #tj-head .easyui-linkbutton{background:transparent !important;border-color:transparent !important}
/* ⚠️ 顺序要求：这条必须在上面"常态透明"之后（同特异性下靠后生效），否则高亮会被清掉 */
html[data-ui-template] #tj-head .l-btn:hover,
html[data-ui-template] #tj-head .m-btn:hover,
html[data-ui-template] #tj-head .easyui-menubutton:hover,
html[data-ui-template] #tj-head .easyui-linkbutton:hover,
html[data-ui-template] #tj-head .l-btn-plain-active,
html[data-ui-template] #tj-head .m-btn-plain-active{
  background:rgba(255,255,255,.14) !important;border-color:transparent !important;
}
html[data-ui-template] #tj-head .l-btn-left,
html[data-ui-template] #tj-head .l-btn:hover .l-btn-left,
html[data-ui-template] #tj-head .m-btn:hover .l-btn-left,
html[data-ui-template] #tj-head .easyui-menubutton:hover .l-btn-left,
html[data-ui-template] #tj-head .easyui-linkbutton:hover .l-btn-left,
html[data-ui-template] #tj-head .l-btn-plain-active .l-btn-left,
html[data-ui-template] #tj-head .m-btn-plain-active .l-btn-left{background:transparent !important}
/* ==========================================================================
   ★★★ 2026-10-08 easyui 残留全量清扫（用户："全量搜索 easyui 的残留影响 全部统一"）
   ---------------------------------------------------------------------------
   审计方法：遍历页面所有元素 → 比对计算样式与主题色板 → 揪出 easyui 遗留的
   位图雪碧图 / 背景图 / 冷灰色（#575765 等）/ 旧鲜亮色。
   本块清扫（按影响排序）：
     ① 按钮位图图标（全站，不只工具条）
     ② 面板标题上的遗留底图
     ③ 面板头/工具的冷灰文字 #575765 → 主题暖色
     ④ 下拉箭头 / 排序箭头 / 搜索图标 / 日历翻页箭头（雪碧图 → CSS 或中性化）
   ========================================================================== */
/* ① 按钮图标：全站隐藏（工具条、窗口、面板、菜单……），文字与功能都保留 */
html[data-ui-template] .l-btn-icon{display:none !important;background-image:none !important}
html[data-ui-template] .l-btn-icon-left .l-btn-text{margin-left:0 !important}

/* ② 面板标题的遗留底图（easyui 给 .panel-title 挂过小图标底图） */
html[data-ui-template] .panel-title{background-image:none !important}

/* ③ 冷灰文字（easyui 默认 #575765）→ 主题暖色 */
html[data-ui-template] .panel-header,
html[data-ui-template] .panel-tool,
html[data-ui-template] .panel-tool a{color:var(--ui-ink-3,#6B6358) !important}
html[data-ui-template] .panel-header .panel-title{color:var(--ui-ink,#2B2B2B) !important}

/* ④-1 下拉箭头（菜单按钮右侧 ▾）：雪碧图 → CSS 三角（跟字色 currentColor） */
html[data-ui-template] .m-btn-downarrow{
  background-image:none !important;
  width:0 !important;height:0 !important;min-width:0 !important;
  border-left:4px solid transparent !important;
  border-right:4px solid transparent !important;
  border-top:5px solid currentColor !important;
  opacity:.72;
  /* easyui 按 16px 位图定的 -8px 上边距，换成 5px 三角后要回补 ~5px 才垂直居中 */
  margin-top:-3px !important;
}
/* ④-2 表头排序箭头：雪碧图 → 中性小箭头（升/降序状态各自给形状） */
html[data-ui-template] .datagrid-sort-icon{
  background-image:none !important;width:auto !important;height:auto !important;
  font-size:10px !important;line-height:1 !important;
  color:var(--ui-n400,#9A9184) !important;margin-left:3px !important;
}
html[data-ui-template] .datagrid-sort-icon::after{content:'⇅'}
html[data-ui-template] .datagrid-sort-asc .datagrid-sort-icon::after{content:'▲'}
html[data-ui-template] .datagrid-sort-desc .datagrid-sort-icon::after{content:'▼'}
html[data-ui-template] .datagrid-sort-asc .datagrid-sort-icon,
html[data-ui-template] .datagrid-sort-desc .datagrid-sort-icon{color:var(--ui-ink-2,#3F3A33) !important}

/* ④-3 搜索框图标 / 日历翻页箭头：保留功能，只把彩色位图中性化（去色 + 压暗） */
html[data-ui-template] .textbox-icon,
html[data-ui-template] .calendar-nav div{filter:grayscale(1) brightness(.72) !important}
/* ==========================================================================
   ★★★ 2026-10-08 用户要求：把 _ui_preview16 顶栏的「光影」接到编排端顶栏
   ---------------------------------------------------------------------------
   预览页原实现（_ui_preview16.html）：
     .top .scan{position:absolute;top:0;bottom:0;width:128px;
       background:linear-gradient(90deg,transparent,rgba(0,212,255,.07),transparent);
       animation:scan 9.5s linear infinite;opacity:.55}
     @keyframes scan{0%{left:-200px}100%{left:100%}}
   这里用主题令牌复刻（templates.css 的 --ui-head-scan / --ui-head-scan-w / --ui-head-scan-dur），
   并把位移由 left 改为 transform（不触发布局重排，表格页滚动/缩放更省电）。
   ⚠️ #tj-head::after 已被"底部青色分道线"占用 ⇒ 扫描光用 ::before。
   ⚠️ 尊重系统「减少动态效果」设置。
   ========================================================================== */
@keyframes tjHeadScan{from{transform:translateX(-30vw)}to{transform:translateX(105vw)}}
html[data-ui-template] #tj-head::before{
  content:"";position:absolute;top:0;bottom:0;left:0;
  width:var(--ui-head-scan-w,128px);
  pointer-events:none;z-index:1;opacity:.55;
  background:linear-gradient(90deg,transparent,var(--ui-head-scan,rgba(0,212,255,.07)),transparent);
  animation:tjHeadScan var(--ui-head-scan-dur,9.5s) linear infinite;
}
@media (prefers-reduced-motion:reduce){
  html[data-ui-template] #tj-head::before{animation:none;opacity:0}
}
/* ==========================================================================
   ★★★ 2026-10-08 用户要求：按本 UI 设计统一「各层级栏目」字体（全量重扫后定稿）
   ---------------------------------------------------------------------------
   扫描结果（bsdy / jsrc 实测）：页面里同时存在 11 / 12 / 13.5 / 14 / 14.5 / 24 六档混排，
   主因是 **easyui 把大量控件钉在 14px**（.l-btn-text / 分页 / 树 / 开关 / 各类 span 继承），
   比数据格 12px 还大 ⇒ 层次倒挂。现按 tokens.css 的字号表收敛为：

     L0  24px / 700   顶栏赛事名（全站唯一）
     L1  14.5px / 600 页面标题 · 窗口标题 · 卡片标题      --ui-fs-card-title
     L2  13.5px / 400 正文 · 表单标签与取值 · 树节点 · 选项卡 · 说明  --ui-fs-body
     L3  12px / 400   表格数据格 + 界面控件（按钮 / 分页 / 菜单 / 下拉 / 开关）--ui-fs-table
     L4  11px / 600   表头与各类标签/小标记（设计里"辅：说明/表头"那一档）--ui-fs-label
   ⚠️ 表格内输入/徽章另有专门规则（12px），特异性高于本块，不受影响。
   ========================================================================== */
/* L0 · 顶栏赛事名 */
html[data-ui-template] #ydhdm{font-size:24px !important;font-weight:700 !important;font-family:inherit !important}
/* L1 · 标题层 */
html[data-ui-template] .panel-title,
html[data-ui-template] .window .panel-title,
html[data-ui-template] .layui-card-header,
html[data-ui-template] .layui-colla-title{font-size:var(--ui-fs-card-title,14.5px) !important;font-weight:600 !important}
/* L2 · 正文层（面板体 / 窗口体 / 树 / 选项卡 / 表单控件文字 / 说明） */
html[data-ui-template] .panel-body,
html[data-ui-template] .window-body,
html[data-ui-template] .tree-title,
html[data-ui-template] .tabs-title,
html[data-ui-template] .messager-body,
html[data-ui-template] .textbox .textbox-text,
html[data-ui-template] .combo .combo-text,
html[data-ui-template] .form-tip,
html[data-ui-template] label{font-size:var(--ui-fs-body,13.5px) !important}
/* L3 · 表格数据格（行号一并） */
html[data-ui-template] .datagrid-btable .datagrid-cell,
html[data-ui-template] .datagrid-cell-rownumber{font-size:var(--ui-fs-table,12px) !important}
/* L3 · 界面控件层（easyui 原本 14px ⇒ 统一 12px，与表格同档） */
html[data-ui-template] .l-btn-text,
html[data-ui-template] .m-btn .l-btn-text,
html[data-ui-template] .pagination .l-btn-text,
html[data-ui-template] .pagination-info,
html[data-ui-template] .pagination-page-list,
html[data-ui-template] .combobox-item,
html[data-ui-template] .combobox-item span,
html[data-ui-template] .menu-item-text,
html[data-ui-template] .switchbutton,
html[data-ui-template] .easyui-tooltip,
html[data-ui-template] .tooltip,
html[data-ui-template] .datagrid-toolbar .textbox .textbox-text,
html[data-ui-template] .datagrid-toolbar select,
html[data-ui-template] .datagrid-pager .textbox .textbox-text{font-size:var(--ui-fs-table,12px) !important}
/* L4 · 表头（设计的"辅：说明/表头"档）+ 表头小标记 */
html[data-ui-template] .datagrid-header .datagrid-cell{font-size:var(--ui-fs-label,11px) !important;font-weight:600 !important}
html[data-ui-template] .datagrid-header .th-clr{font-size:11px !important}
/* 补漏：分页条容器内的裸 <span>（"第/页/共1页"）与开关内部 span 仍继承 easyui 的 14px */
html[data-ui-template] .datagrid-pager,
html[data-ui-template] .pagination,
html[data-ui-template] .pagination span,
html[data-ui-template] .switchbutton,
html[data-ui-template] .switchbutton-on,
html[data-ui-template] .switchbutton-off,
html[data-ui-template] .switchbutton-text{font-size:var(--ui-fs-table,12px) !important}
/* 分项导航板（抽屉）标题：内联样式（居中/灰线/粗体）统一成页面标题的观感 */
html[data-ui-template] #fxdhb > div:first-child{
  font-size:var(--ui-fs-card-title,14.5px) !important;font-weight:600 !important;
  text-align:left !important;line-height:1.45 !important;color:var(--ui-ink,#2B2B2B) !important;
  background:var(--ui-n25,#FDF9F1) !important;border-bottom:1px solid var(--ui-n100,#EDE7DD) !important;
  padding:6px 10px !important;
}

/* ==========================================================================
   ★★★ 2026-10-08 用户要求：所有「按钮」与「标签」按 _ui_preview6.html 的样式统一
        （形态/尺寸/交互取预览6，配色用当前 V16 主题；悬停遵守"只提亮、不改色相"的既定规则）
   ---------------------------------------------------------------------------
   预览6 原始规格：
     按钮 .btn{height:32px;padding:0 15px;border:1px solid;border-radius:4px;background:#fff;
              font:500 13px;display:inline-flex;align-items:center;gap:6px}
          :hover{border-color:青;color:青}  :active{scale(.97)}  [disabled]{opacity:.5}
     标签 .tag{height:21px;padding:0 8px;border-radius:4px;font:500 12px;border:1px solid transparent}
          语义：info 浅青底+深青字 / ok 绿 / warn 橙 / navy 藏蓝
   本地化三点：
     ① 高度取系统密度：常规按钮 26px（--ui-h-btn-sm，已由 35 调到 26），
        表格单元格内小按钮 20px（--ui-h-btn-xs）
     ② 字号统一 12px（与表格同档）、字重 500
     ③ 悬停：**边框与文字转青、底色中性提亮**（用户 2026-10-08 明确要求过"悬停不要带颜色"）
   ========================================================================== */
/* ---------- 1 · 按钮：全站一套规格（easyui / layui / 页面自绘） ---------- */
html[data-ui-template] .l-btn,
html[data-ui-template] .layui-btn,
html[data-ui-template] .tj-btn,
html[data-ui-template] button.tj-btn{
  height:var(--ui-h-btn-sm,32px) !important;
  /* ⚠️ min-height 必须一起清掉：旧规则写的是 min-height:35px，优先级高于 height ⇒ 只改 height 会看着"没生效" */
  min-height:0 !important;
  min-width:0 !important;padding:0 10px !important;
  background:var(--ui-n0,#FFFDFA) !important;
  border:1px solid var(--ui-n200,#D4C9B8) !important;
  border-radius:var(--ui-r-sm,4px) !important;
  color:var(--ui-ink-2,#3F3A33) !important;
  font-family:inherit !important;
  font-size:var(--ui-fs-table,12px) !important;font-weight:500 !important;
  display:inline-flex !important;align-items:center !important;justify-content:center !important;
  gap:6px !important;box-sizing:border-box !important;white-space:nowrap !important;
  box-shadow:0 1px 2px rgba(10,22,51,.05) !important;
  transition:background .18s ease,border-color .18s ease,color .18s ease,transform .18s ease,box-shadow .18s ease !important;
}
/* 按钮内层不再单独上色（杜绝"一个按钮两层颜色"） */
html[data-ui-template] .l-btn-left,
html[data-ui-template] .l-btn .l-btn-left,
html[data-ui-template] .m-btn .l-btn-left{background:transparent !important}
/* 悬停：边框+文字转青，底色中性提亮，轻微上浮 */
html[data-ui-template] .l-btn:hover,
html[data-ui-template] .layui-btn:hover{
  border-color:var(--ui-cyan-m,#0891B2) !important;
  color:var(--ui-cyan-ink,#0E7490) !important;
  background:var(--ui-n100,#EDE7DD) !important;
  transform:translateY(-1px) !important;
  box-shadow:0 4px 10px rgba(10,22,51,.10) !important;
}
html[data-ui-template] .l-btn:active,
html[data-ui-template] .layui-btn:active{transform:scale(.97) !important}
html[data-ui-template] .l-btn[disabled],
html[data-ui-template] .layui-btn[disabled],
html[data-ui-template] .layui-btn-disabled,
html[data-ui-template] .layui-disabled{opacity:.5 !important;cursor:not-allowed !important;box-shadow:none !important;transform:none !important}
/* 主按钮：V16 暗红渐变 + 白字（预览6 的实心主按钮形态） */
html[data-ui-template] .layui-btn-normal,
html[data-ui-template] .layui-btn-danger,
html[data-ui-template] .btn-primary,
html[data-ui-template] .l-btn-pri,
html[data-ui-template] .l-btn.c1{
  background:var(--ui-btn-pri-bg,#B02A3F) !important;border-color:transparent !important;color:#fff !important;
  box-shadow:var(--ui-btn-pri-shadow) !important;
}
html[data-ui-template] .layui-btn-normal:hover,
html[data-ui-template] .layui-btn-danger:hover,
html[data-ui-template] .btn-primary:hover,
html[data-ui-template] .l-btn-pri:hover,
html[data-ui-template] .l-btn.c1:hover{
  background:var(--ui-btn-pri-bg-hover,#C41E3A) !important;color:#fff !important;
  border-color:transparent !important;transform:translateY(-1px) !important;
}
/* 次要实心按钮（藏蓝渐变，V16 已有）：保持实心，只统一尺寸与圆角 */
html[data-ui-template] .l-btn.c2,
html[data-ui-template] .l-btn.c5,
html[data-ui-template] .layui-btn-primary{
  background:var(--ui-btn-sec-bg,#25355C) !important;border-color:transparent !important;color:#fff !important;
}
/* 顶栏等深色面内的按钮：保持"无边框透明"，不套白盒子 */
html[data-ui-template] #tj-head .l-btn{background:transparent !important;border-color:transparent !important;box-shadow:none !important;transform:none !important;height:35px !important;min-height:35px !important}
/* 表格单元格内的小按钮：更紧凑（20px） */
html[data-ui-template] .datagrid-btable .datagrid-cell .l-btn,
html[data-ui-template] .layui-table-cell .layui-btn-xs,
html[data-ui-template] .layui-table-cell .layui-btn-sm,
html[data-ui-template] .layui-table-cell .layui-btn{height:var(--ui-h-btn-xs,20px) !important;padding:0 8px !important}

/* ---------- 2 · 标签：全站一套规格（浅底 + 深字 + 同色细边 + 左侧同色圆点） ---------- */
html[data-ui-template] .m-badge1,
html[data-ui-template] .m-badge2,
html[data-ui-template] .m-badge3,
html[data-ui-template] .m-badge4,
html[data-ui-template] .m-badge5,
html[data-ui-template] .zb-badge,
html[data-ui-template] .cp-badge,
html[data-ui-template] .gw-badge,
html[data-ui-template] .layui-badge,
html[data-ui-template] .ui-tag{
  display:inline-flex !important;align-items:center !important;justify-content:center !important;gap:6px !important;
  height:21px !important;padding:0 8px !important;
  border-radius:var(--ui-r-sm,4px) !important;border:1px solid transparent !important;
  font-family:inherit !important;font-size:var(--ui-fs-table,12px) !important;font-weight:500 !important;line-height:1 !important;
  white-space:nowrap !important;flex:0 0 auto !important;vertical-align:middle !important;
}
/* 五档语义色：浅底 + 深字 + 同色细边（.zb/.cp/.gw 的第 N 档同色） */
html[data-ui-template] .m-badge1,
html[data-ui-template] .zb-badge.zb1,
html[data-ui-template] .cp-badge.b1,
html[data-ui-template] .gw-badge.b1{border-color:rgba(27,42,74,.22) !important;background:#E9EBF1 !important;color:var(--ui-navy,#1B2A4A) !important}
html[data-ui-template] .m-badge2,
html[data-ui-template] .zb-badge.zb2,
html[data-ui-template] .cp-badge.b2,
html[data-ui-template] .gw-badge.b2{border-color:rgba(47,107,79,.24) !important;background:var(--ui-ok-bg,#E6F1EA) !important;color:var(--ui-ok,#2F6B4F) !important}
html[data-ui-template] .m-badge3,
html[data-ui-template] .zb-badge.zb3,
html[data-ui-template] .cp-badge.b3,
html[data-ui-template] .gw-badge.b3{border-color:rgba(180,83,9,.24) !important;background:var(--ui-warn-bg,#FEF4E7) !important;color:var(--ui-warn,#B45309) !important}
html[data-ui-template] .m-badge4,
html[data-ui-template] .zb-badge.zb4,
html[data-ui-template] .cp-badge.b4,
html[data-ui-template] .gw-badge.b4{border-color:rgba(14,116,144,.24) !important;background:var(--ui-cyan-soft,#EAF3F5) !important;color:var(--ui-cyan-ink,#0E7490) !important}
html[data-ui-template] .m-badge5,
html[data-ui-template] .zb-badge.zb5,
html[data-ui-template] .cp-badge.b5,
html[data-ui-template] .gw-badge.b5{border-color:rgba(107,99,88,.22) !important;background:var(--ui-n100,#EDE7DD) !important;color:var(--ui-ink-3,#6B6358) !important}
/* 左侧同色小圆点（用户认可的"关联胶囊"设计语言，推广到所有标签） */
html[data-ui-template] .m-badge1::before,
html[data-ui-template] .m-badge2::before,
html[data-ui-template] .m-badge3::before,
html[data-ui-template] .m-badge4::before,
html[data-ui-template] .m-badge5::before,
html[data-ui-template] .zb-badge::before,
html[data-ui-template] .cp-badge::before,
html[data-ui-template] .gw-badge::before{content:"";width:5px;height:5px;border-radius:50%;background:currentColor;opacity:.85;flex:0 0 auto}


/* ---------- 1b · 覆盖历史遗留的"透明扁平"按钮样式（工具条 / 分页 / plain / 弹窗按钮一并纳入统一规格）----------
   背景：theme.css 早前为"去卡片化"把工具条与分页按钮写成透明无边框（35px 高），
   与本次"全部按 preview6 统一"冲突 ⇒ 这里以同等或更高特异性覆盖（本块在文件末尾，同特异性靠后生效）。 */
html[data-ui-template] .datagrid-toolbar .l-btn,
html[data-ui-template] .layout-panel-north .l-btn,
html[data-ui-template] .l-btn-plain,
html[data-ui-template] .pagination .l-btn,
html[data-ui-template] .messager-button .l-btn{
  background:var(--ui-n0,#FFFDFA) !important;
  border:1px solid var(--ui-n200,#D4C9B8) !important;
  color:var(--ui-ink-2,#3F3A33) !important;
  height:var(--ui-h-btn-sm,32px) !important;
  min-height:0 !important;
  padding:0 10px !important;
  box-shadow:0 1px 2px rgba(10,22,51,.05) !important;
}
html[data-ui-template] .datagrid-toolbar .l-btn:hover,
html[data-ui-template] .ns-layout .l-btn-plain:hover,
html[data-ui-template] .l-btn-plain:hover,
html[data-ui-template] .pagination .l-btn:hover,
html[data-ui-template] .messager-button .l-btn:hover{
  background:var(--ui-n100,#EDE7DD) !important;
  border-color:var(--ui-cyan-m,#0891B2) !important;
  color:var(--ui-cyan-ink,#0E7490) !important;
}
/* 内层一律不上色：整颗按钮只有一层底气（否则又会出现"按钮里两种颜色"） */
html[data-ui-template] .datagrid-toolbar .l-btn .l-btn-left,
html[data-ui-template] .datagrid-toolbar .l-btn:hover .l-btn-left,
html[data-ui-template] .l-btn-plain .l-btn-left,
html[data-ui-template] .pagination a.l-btn .l-btn-left,
html[data-ui-template] .pagination .l-btn .l-btn-left,
html[data-ui-template] .messager-button a.l-btn .l-btn-left,
html[data-ui-template] .messager-button .l-btn .l-btn-left{background:transparent !important}
/* 分页"当前页"保持藏蓝实底（选中态，不受统一规格影响） */
html[data-ui-template] .pagination .l-btn-plain-selected,
html[data-ui-template] .pagination .l-btn-selected{
  background:var(--ui-navy,#1B2A4A) !important;color:#fff !important;border-color:var(--ui-navy,#1B2A4A) !important;
}


/* ---------- 1c · 分页 / plain 按钮：easyui 分页是 `a.l-btn.l-btn-plain`，
   旧样式写在 `html[data-ui-template] body .l-btn-plain` 这种 body 作用域里（特异性更高）⇒ 这里同域覆盖。 ---------- */
html[data-ui-template] body .pagination a.l-btn,
html[data-ui-template] body .pagination .l-btn,
html[data-ui-template] body .l-btn-plain,
html[data-ui-template] body .messager-button a.l-btn,
html[data-ui-template] body .messager-button .l-btn{
  background:var(--ui-n0,#FFFDFA) !important;
  border:1px solid var(--ui-n200,#D4C9B8) !important;
  color:var(--ui-ink-2,#3F3A33) !important;
  height:var(--ui-h-btn-sm,32px) !important;min-height:0 !important;padding:0 10px !important;
  box-shadow:0 1px 2px rgba(10,22,51,.05) !important;
}
html[data-ui-template] body .pagination a.l-btn:hover,
html[data-ui-template] body .pagination .l-btn:hover,
html[data-ui-template] body .l-btn-plain:hover,
html[data-ui-template] body .messager-button a.l-btn:hover{
  background:var(--ui-n100,#EDE7DD) !important;
  border-color:var(--ui-cyan-m,#0891B2) !important;
  color:var(--ui-cyan-ink,#0E7490) !important;
}
html[data-ui-template] body .pagination a.l-btn .l-btn-left,
html[data-ui-template] body .pagination a.l-btn:hover .l-btn-left,
html[data-ui-template] body .l-btn-plain .l-btn-left{background:transparent !important}
/* 当前页：藏蓝实底（选中态） */
html[data-ui-template] body .pagination .l-btn-plain-selected,
html[data-ui-template] body .pagination .l-btn-selected,
html[data-ui-template] body .pagination .pagination-link.l-btn-selected{
  background:var(--ui-navy,#1B2A4A) !important;color:#fff !important;border-color:var(--ui-navy,#1B2A4A) !important;
}
/* 禁用态：半透明，不再有阴影 */
html[data-ui-template] .l-btn-disabled,
html[data-ui-template] .l-btn-plain-disabled,
html[data-ui-template] body .pagination .l-btn-disabled{opacity:.45 !important;cursor:not-allowed !important;box-shadow:none !important}

/* ==========================================================================
   ★ 2026-10-09 用户要求（编排端 + 商城端一起）：输入框 / 下拉 / 按钮「聚焦时不要彩色框」。
   ---------------------------------------------------------------------------
   原本各处聚焦都是「青色边框 + 3~4px 青色光晕」（--ui-cyan-ink / rgba(14,116,144,..)），
   :focus-visible 还带 2px 青色 / 琥珀色 outline，用户反馈太抢眼 ⇒ 统一收敛为中性细描边：
     · 表单控件：边框回到常态中性色，取消彩色光晕与 outline
     · 链接/按钮的键盘焦点：outline 改中性灰（保留可访问性，但不再是青色）
   放在文件末尾 + !important，一处压掉前面所有分散的青色 focus 规则。
   ========================================================================== */
html[data-ui-template] .layui-input:focus,
html[data-ui-template] .layui-textarea:focus,
html[data-ui-template] .ui-search input:focus,
html[data-ui-template] .textbox-focused,
html[data-ui-template] .textbox-focus,
html[data-ui-template] .datagrid-btable .datagrid-cell>input:focus,
html[data-ui-template] .datagrid-btable .datagrid-cell>select:focus{
  border-color:var(--ui-n200) !important;box-shadow:none !important;outline:none !important;
}
/* 商城端 Element 组件（与 element-theme.css 双保险）：聚焦/悬停用「与常态完全相同」的描边 ⇒ 零变化 */
html[data-ui-template] .el-input__wrapper:hover,
html[data-ui-template] .el-input__wrapper.is-focus,
html[data-ui-template] .el-input__wrapper:focus-within,
html[data-ui-template] .el-select__wrapper:hover,
html[data-ui-template] .el-select__wrapper.is-focused,
html[data-ui-template] .el-select__wrapper:focus-within,
html[data-ui-template] .el-textarea__inner:hover,
html[data-ui-template] .el-textarea__inner:focus{
  box-shadow:0 0 0 1px var(--el-border-color,var(--ui-cyan-line)) inset !important;outline:none !important;
}
/* 键盘焦点环：用户明确不要任何框 ⇒ 全部关闭 */
html[data-ui-template] a:focus-visible,
html[data-ui-template] button:focus-visible,
html[data-ui-template] input:focus-visible,
html[data-ui-template] select:focus-visible,
html[data-ui-template] textarea:focus-visible,
html[data-ui-template] [tabindex]:focus-visible,
html[data-ui-template] .layui-btn:focus-visible,
html[data-ui-template] .l-btn:focus-visible{
  outline:none !important;
}

/* ============================================================================
   ★ 2026-10-14 全站按钮尺寸统一（用户要求）
   ----------------------------------------------------------------------------
   要求：导航栏下各处工具栏的按钮大小**全站统一**（编排端 + 商城端），
         基准 = 标准导航板右上角那个「刷新」的尺寸。
   做法：Element Plus 的 small(24px)/mini 与 default(32px) 参差 ⇒ 这里把
         **实体按钮**统一到 default 口径：高 32px / 字号 14px / 圆角 4px / 左右内边距 15px。
   ⚠️ 排除 .is-link / .is-text（纯文字按钮）：表格行内的「详情 / 修改 / 删除」等属这类，
      撑大它们会把表格行高带歪 —— 这些保持原样。
   ⚠️ 只动按钮，不动输入框/下拉（表格内联编辑依赖 small 尺寸，改了会撑高行）。
   ============================================================================ */
html[data-ui-template] .el-button:not(.is-link):not(.is-text),
html[data-ui-template] .el-button--small:not(.is-link):not(.is-text),
html[data-ui-template] .el-button--mini:not(.is-link):not(.is-text){
  height:32px;
  padding:0 15px;
  font-size:14px;
  border-radius:4px;
}
/* 按钮内图标同步放大一点，避免 14px 字配 12px 图标显小 */
html[data-ui-template] .el-button--small>.el-icon,
html[data-ui-template] .el-button--mini>.el-icon,
html[data-ui-template] .el-button>.el-icon{
  font-size:16px;
}
/* 纯图标按钮（圆形 / 只有 icon）保持正方形，不被 padding 撑成胶囊 */
html[data-ui-template] .el-button.is-circle{
  width:32px;
  padding:0;
}
html[data-ui-template] .el-button.is-circle>.el-icon{
  margin:0;
}
/* 下拉按钮（如「编排▾」）的触发器同尺寸 */
html[data-ui-template] .el-dropdown .el-button{
  height:32px;
  padding:0 15px;
  font-size:14px;
}

/* ============================================================================
★ 2026-10-14 全站表单控件统一为「按钮同规格」（用户要求：输入框 / 下拉菜单也这么大，字体匹配）
----------------------------------------------------------------------------
基准：高 32px / 字号 14px / 圆角 4px —— 与上面「全站按钮尺寸统一」同一套口径。
覆盖：文本输入、数字输入、文本域、下拉选择、日期/时间选择、分页器。
做法：Element Plus 的 small(24px/12px字体) 与 default(32px/14px) 参差
      ⇒ 直接把 **small/mini 规格变量就地拉平**（比逐个元素写 height 稳，弹层/图标位置自动跟着对）。
排除（用户明确 + 工程需要）：
  ① 顶部菜单栏（#tj-head / .ns-header）—— 用户：「除了菜单栏」。菜单是自定义 DOM（非 el-*），
     多数本就受影响不到，这里再显式兜一层；
  ② 标准导航板页面 —— 用户：「标准导航板的页面就不用改了」。标记：布局给 <body> 加
     class="tj-navboard"（action 含 index 的页，与页面工具条同一判定口径）；
  ③ 表格**内联编辑**（.el-table 内的输入/下拉）—— 刻意保持 small：撑到 32px 会把表格行高带歪。
============================================================================ */

/* ① 输入框 / 数字框：把 small / mini 规格拉平到 default（32px / 14px） */
html[data-ui-template] body:not(.tj-navboard) .el-input{
  --el-input-height:32px;
  --el-input-inner-height:30px;
}
html[data-ui-template] body:not(.tj-navboard) .el-input--small,
html[data-ui-template] body:not(.tj-navboard) .el-input--mini{
  --el-input-height:32px;
  --el-input-inner-height:30px;
  font-size:14px;
}
html[data-ui-template] body:not(.tj-navboard) .el-input__wrapper{
  min-height:32px;
  padding:0 11px;
  border-radius:4px;
}
html[data-ui-template] body:not(.tj-navboard) .el-input__inner{
  font-size:14px;
}
html[data-ui-template] body:not(.tj-navboard) .el-textarea__inner{
  font-size:14px;
  line-height:1.5;
}

/* ② 下拉选择（Element Plus 2.x 的 .el-select__wrapper） */
html[data-ui-template] body:not(.tj-navboard) .el-select{
  --el-select-input-font-size:14px;
}
html[data-ui-template] body:not(.tj-navboard) .el-select--small,
html[data-ui-template] body:not(.tj-navboard) .el-select--mini{
  --el-select-input-font-size:14px;
  font-size:14px;
}
html[data-ui-template] body:not(.tj-navboard) .el-select__wrapper{
  min-height:32px;
  padding:0 11px;
  border-radius:4px;
  font-size:14px;
}
html[data-ui-template] body:not(.tj-navboard) .el-select__placeholder,
html[data-ui-template] body:not(.tj-navboard) .el-select__selected-item,
html[data-ui-template] body:not(.tj-navboard) .el-select__input{
  font-size:14px;
}

/* ③ 日期 / 时间选择器（外壳 .el-date-editor，内部仍是 el-input） */
html[data-ui-template] body:not(.tj-navboard) .el-date-editor{
  --el-input-height:32px;
  --el-input-inner-height:30px;
  font-size:14px;
}
html[data-ui-template] body:not(.tj-navboard) .el-date-editor .el-input__wrapper{
  min-height:32px;
}

/* ④ 下拉面板 / 日期面板里的文字同字号，避免「框大了、字还小」 */
html[data-ui-template] body:not(.tj-navboard) .el-select-dropdown__item{
  height:34px;
  line-height:34px;
  font-size:14px;
}
html[data-ui-template] body:not(.tj-navboard) .el-picker-panel{
  font-size:14px;
}

/* ⑤ 分页器（页码 / 每页条数 / 前往）：与按钮同规格 */
html[data-ui-template] body:not(.tj-navboard) .el-pagination{
  font-size:14px;
}
html[data-ui-template] body:not(.tj-navboard) .el-pagination button,
html[data-ui-template] body:not(.tj-navboard) .el-pagination .el-pager li{
  height:32px;
  min-width:32px;
  line-height:32px;
  font-size:14px;
}
html[data-ui-template] body:not(.tj-navboard) .el-pagination .el-select__wrapper,
html[data-ui-template] body:not(.tj-navboard) .el-pagination .el-input__wrapper{
  min-height:32px;
}

/* ⑥ 表格内联编辑：显式恢复 small（第 6 批口径 —— 撑大会把行高带歪，勿删） */
html[data-ui-template] body:not(.tj-navboard) .el-table .el-input,
html[data-ui-template] body:not(.tj-navboard) .el-table .el-select{
  --el-input-height:24px;
  --el-input-inner-height:22px;
}
html[data-ui-template] body:not(.tj-navboard) .el-table .el-input__wrapper,
html[data-ui-template] body:not(.tj-navboard) .el-table .el-select__wrapper{
  min-height:24px;
  padding:0 8px;
}
html[data-ui-template] body:not(.tj-navboard) .el-table .el-input__inner{
  font-size:13px;
}

/* ⑦ 顶部菜单栏内：保持原样（用户明确排除；这些位置本就没有 el-* 表单控件，仅作兜底） */
html[data-ui-template] #tj-head .el-input__wrapper,
html[data-ui-template] #tj-head .el-select__wrapper,
html[data-ui-template] .ns-header .el-input__wrapper,
html[data-ui-template] .ns-header .el-select__wrapper{
  min-height:auto;
}
