@charset "utf-8";
/* ==========================================================================
   门户全局业务皮肤（对齐原型 list_an_v2.html / form_an_v1.html）
   - 作用范围：所有引用 comm/head.html 的业务列表页/表单弹窗
   - 只覆盖视觉层（配色/圆角/边框/间距/背景），不改 DOM 结构与交互逻辑
   - 主色 #1890ff，选中浅蓝 #e6f7ff，表头 #f4f6fa，圆角 6px
   @Author chen
   @Date 2026-09-04 上午10:00:00
   ========================================================================== */

:root {
	--pt-primary: #1890ff;
	--pt-primary-hover: #40a9ff;
	--pt-primary-deep: #096dd9;
	--pt-sel-bg: #e6f7ff;
	--pt-row-hover: #fafbfd;
	--pt-head-bg: #f4f6fa;
	--pt-text: #3a3a4a;
	--pt-text-sub: #71767f;
	--pt-border: #e0e2e6;
	--pt-border-line: #e6e9f0;
	--pt-border-row: #eef1f6;
	--pt-radius: 6px;
}

/* ========== 1. 按钮（layui-btn 系列 + 工具栏按钮） ========== */
.layui-btn {
	border-radius: var(--pt-radius) !important;
	font-size: 13px;
	height: 28px;
	line-height: 26px;
	padding: 0 16px;
	transition: all .2s;
}
.layui-btn-sm {
	height: 26px;
	line-height: 24px;
	padding: 0 12px;
	font-size: 12px;
}
.layui-btn-xs {
	height: 24px;
	line-height: 22px;
	padding: 0 8px;
	font-size: 12px;
}
/* 次级/白底按钮：白底灰边，hover 蓝字蓝边浅蓝底 */
.layui-btn-primary {
	background: #fff !important;
	border: 1px solid var(--pt-border) !important;
	color: #333a45 !important;
}
.layui-btn-primary:hover {
	border-color: var(--pt-primary) !important;
	color: var(--pt-primary) !important;
	background: #f0f7ff !important;
}
/* 主按钮：蓝底（覆盖 layui 默认绿/主题色） */
.layui-btn:not(.layui-btn-primary):not(.layui-btn-danger):not(.layui-btn-warm):not(.layui-btn-normal) {
	background: var(--pt-primary) !important;
	border-color: var(--pt-primary) !important;
}
.layui-btn-normal {
	background: var(--pt-primary) !important;
	border-color: var(--pt-primary) !important;
}
.layui-btn:not(.layui-btn-primary):not(.layui-btn-danger):not(.layui-btn-warm):not(.layui-btn-normal):hover,
.layui-btn-normal:hover {
	background: var(--pt-primary-hover) !important;
	border-color: var(--pt-primary-hover) !important;
}
/* 工具栏图标按钮（新增/查看/删除等白底按钮组） */
.layui-card .layui-btn-primary,
.layui-table-tool .layui-btn-primary {
	border-color: var(--pt-border) !important;
}

/* ========== 1.5 表格工具栏按钮（yj.grid 框架 .layui-inline-button，对齐原型 tb-btn） ==========
   列表页按钮的图标与主操作样式由 table.js 的 setToolBtnIco() 按按钮名称处理
   （新增＝＋主操作，查看＝阅读图标，修改＝铅笔图标，其余保持纯文字）；
   表单/明细工具栏（弹窗 iframe，无查询区）：保留小灰色符号图标（对齐 form_an_v1.html 的 .tb-ico）。 */
.layui-table-tool .layui-inline-button[lay-event] {
	height: 28px;
	line-height: 26px;
	padding: 0 10px;
	/* 上下边距对称：工具条 padding 各 3px，此处上下各 3px，按钮上/下留白均为 6px；
	   换行时行间距同为 6px（原先只有下边距 4px，导致上方 3px、下方 7px 不对称） */
	margin: 3px 6px 3px 0;
	border: 1px solid var(--pt-border) !important;
	border-radius: 6px !important;
	background: #fff;
	color: #000;
	font-size: 12px;
	display: inline-flex;
	align-items: center;
	vertical-align: middle;
	transition: all .2s;
	box-sizing: border-box;
}
.layui-table-tool .layui-inline-button[lay-event]:hover {
	border-color: var(--pt-primary) !important;
	color: var(--pt-primary) !important;
	background: #f0f7ff !important;
}
/* 表单/明细工具栏图标：小号灰色符号（对齐原型 .tb-ico：11px、#828896） */
.layui-table-tool .layui-inline-button[lay-event] .layui-icon {
	font-size: 11px;
	color: #828896;
	margin-right: 3px;
}
/* 列表页工具栏按钮的图标显示/隐藏、新增主操作样式均由 table.js 的 setToolBtnIco() 处理，
   不再使用 [lay-event*=…] 之类的属性选择器（子串匹配会误伤 readDocument 等事件名）。 */

/* 表格标题栏（table_title，如"身份维护明细"）：无按钮时工具栏只剩 28px 文字行，
   比带按钮的工具栏（28px 按钮 + 上下各 3px margin = 34px 内容高）矮 6px，
   导致左右并排主细表的两表表头行上下错位；
   这里把标题撑到与按钮一致的 34px 内容高（文字仍垂直居中），
   使两类工具栏等高（3px padding + 34px + 3px padding = 40px）。 */
.layui-table-tool .layui-table-title {
	display: inline-block;
	height: 34px;
	line-height: 34px;
	vertical-align: top;
}

/* ========== 1.6 按钮组（.layui-btn-group）：相邻按钮默认留 2px 间隙 ==========
   layui 默认把组内按钮 margin 置 0 拼成一整块，视觉上挤在一起；
   这里统一给相邻按钮 2px 间距（最后一个不留）。
   注：树选择弹窗按钮组在下方第 10 节单独覆盖为 3px。 */
.layui-btn-group .layui-btn {
	margin-right: 2px !important;
}
.layui-btn-group .layui-btn:last-child {
	margin-right: 0 !important;
}

/* ========== 2. 查询区 / 表单控件 ========== */
.layui-input,
.layui-textarea,
.layui-select {
	border: 1px solid #d9d9d9 !important;
	border-radius: var(--pt-radius) !important;
	height: 30px;
	font-size: 13px;
	color: #000;
	transition: border-color .2s, box-shadow .2s;
}
.layui-textarea {
	height: auto;
	min-height: 60px;
	padding: 6px 10px;
}
.layui-input:hover,
.layui-textarea:hover {
	border-color: #96b5e8 !important;
}
.layui-input:focus,
.layui-textarea:focus,
.layui-form-select .layui-input:focus {
	border-color: var(--pt-primary-deep) !important;
	box-shadow: 0 0 0 2px rgba(9, 109, 217, .12) !important;
}
/* 必填项校验失败（layui-form-danger）：聚焦时红色警示边框，覆盖上面的蓝色聚焦态 */
.layui-input.layui-form-danger:focus,
.layui-textarea.layui-form-danger:focus,
.layui-form-select .layui-input.layui-form-danger:focus,
.layui-form-danger + .layui-form-select .layui-input:focus,
.layui-form-danger + .layui-form-select .layui-input {
	border-color: #ff5722 !important;
	box-shadow: 0 0 0 2px rgba(255, 87, 34, .18) !important;
}
/* 表单/查询区标签：黑色常规偏中等字重 */
.layui-form-label {
	color: #000;
	font-weight: 500;
	font-size: 13px;
}
/* 下拉选择框 */
.layui-form-select .layui-input {
	padding-right: 30px;
}
.layui-form-select .layui-edge {
	border-top-color: var(--pt-primary-deep);
}
.layui-form-select dl {
	border-radius: var(--pt-radius);
	box-shadow: 0 2px 12px rgba(0, 0, 0, .1);
	border: 1px solid var(--pt-border-line);
	padding: 4px;
}
.layui-form-select dl dd {
	border-radius: 4px;
	line-height: 30px;
}
.layui-form-select dl dd.layui-this {
	background: var(--pt-sel-bg);
	color: var(--pt-primary-deep);
}
.layui-form-select dl dd:hover {
	background: #f0f7ff;
	color: var(--pt-primary-deep);
}

/* ========== 2.5 查询条件区（.lay-retract-query，对齐原型紧凑横排） ========== */
/* 白色圆角卡片容器，与表格卡片留出间距 */
.lay-retract-query, #queryMain:not(.lay-retract-query) > #main {
	background: #fff;
	padding: 2px 14px !important;
	border-radius: 8px;
	box-shadow: 0 1px 6px rgba(0, 0, 0, .05);
}
/* 无查询条件页面：隐藏查询区空白卡片，并移除表格顶部 5px 间距（公共类，页面只需给 #queryMain 加 no-query） */
#queryMain.no-query > #main {
	display: none;
}
#queryMain.no-query > #mDiv .layui-table-view {
	margin-top: 0 !important;
}
/* 首行条件区初始高度与 initRetractQuery 展开后保持一致：
   否则页面脚本在 DOM ready 前读取 #main.clientHeight 会少算首行被裁剪的 9px，
   表格因此多占 9px，导致查询区整体 1px 纵向溢出（右侧出现滚动条） */
.lay-retract-query .layui-condition-item:first-child, #queryMain:not(.lay-retract-query) > #main .layui-condition-item:first-child {
	height: auto;
	overflow: visible;
}
/* 字段单元：横向排列、字段间距（保留 inline-block，不破坏 head.html 收起/展开的宽度计算）
   顶对齐 + 去掉 layui 默认的 3px 下内边距，避免 inline-block 基线间隙把条件行撑高 */
.lay-retract-query .layui-inline, #queryMain:not(.lay-retract-query) > #main .layui-inline {
	margin: 3px 16px 3px 0 !important;
	padding: 0 !important;
	vertical-align: top;
}
/* 字段标签（页面用无 class 的普通 label）
   标签行高与查询控件同高（28px）、去掉 layui 默认的 2px 上下内边距：
   否则标签盒只有 24px，与控件一起被 float 顶部对齐后，文字中心比控件中心高 2px（上下不居中） */
.lay-retract-query label, #queryMain:not(.lay-retract-query) > #main label {
	display: inline-block;
	line-height: 28px;
	padding: 0 8px;
	font-size: 13px;
	color: #000;
	font-weight: 500;
	margin-right: 6px;
	white-space: nowrap;
	vertical-align: middle;
}
.lay-custom-query label {
	display: inline-block;
	line-height: 28px;
	padding: 0 8px;
	font-size: 13px;
	color: #000;
	font-weight: 500;
	margin-right: 6px;
	white-space: nowrap;
	vertical-align: middle;
}
/* 查询区输入/下拉：紧凑 28px（与查询按钮同高，对齐原型） */
.lay-retract-query .layui-input,
.lay-retract-query .layui-form-select .layui-input,
.lay-retract-query .layui-input-inline .layui-input,
#queryMain:not(.lay-retract-query) > #main .layui-input,
#queryMain:not(.lay-retract-query) > #main .layui-form-select .layui-input,
#queryMain:not(.lay-retract-query) > #main .layui-input-inline .layui-input {
	height: 28px !important;
	line-height: 28px;
	font-size: 13px;
}
.lay-retract-query .layui-input-inline, #queryMain:not(.lay-retract-query) > #main .layui-input-inline {
	vertical-align: middle;
}
/* 查询/重置按钮：28px 高、紧凑（对齐原型 .btn） */
.lay-retract-query .layui-btn, #queryMain:not(.lay-retract-query) > #main .layui-btn {
	height: 28px !important;
	line-height: 26px !important;
	padding: 0 16px !important;
	font-size: 13px;
	vertical-align: middle;
	margin: 0 8px 0 0;
}
/* “展开/收起/更多查询”：白底灰边次按钮（对齐原型 .btn，!important 压过框架内联紫色文字） */
.lay-retract-query a#lay_spreed_query_condition,
.lay-retract-query a#lay_retract_query_condition,
.lay-retract-query a#lay_spreed_extra_button {
	display: inline-flex !important;
	align-items: center;
	height: 28px !important;
	padding: 0 12px !important;
	border: 1px solid #d9d9d9 !important;
	border-radius: 6px !important;
	background: #fff !important;
	color: #333a45 !important;
	font-size: 13px !important;
	margin: 0 0 0 8px !important;
	vertical-align: middle;
	text-decoration: none;
	white-space: nowrap;
	box-sizing: border-box;
}
.lay-retract-query a#lay_spreed_query_condition:hover,
.lay-retract-query a#lay_retract_query_condition:hover,
.lay-retract-query a#lay_spreed_extra_button:hover {
	border-color: var(--pt-primary) !important;
	color: var(--pt-primary) !important;
}
.lay-retract-query a#lay_spreed_query_condition .layui-icon,
.lay-retract-query a#lay_retract_query_condition .layui-icon,
.lay-retract-query a#lay_spreed_extra_button .layui-icon {
	font-size: 12px;
	margin-left: 2px;
}
/* 额外按钮平铺态：首行剩余空间足够时，业务按钮直接排在“重置”后面（与查询/重置同款尺寸） */
.lay-retract-query .lay-retract-query-extra-button-inline {
	display: inline-block;
	vertical-align: middle;
	white-space: nowrap;
}
/* 额外按钮浮层：首行放不下时点“···”弹出（挂在 body 上，不随查询区排版） */
.lay-retract-query-extra-button {
	position: absolute;
	z-index: 20000;
	min-width: 108px;
	max-width: 260px;
	padding: 6px 0;
	background: #fff;
	border: 1px solid #e6e6e6;
	border-radius: 6px;
	box-shadow: 0 4px 12px rgba(0, 0, 0, .12);
	box-sizing: border-box;
	display: none;
}
.lay-retract-query-extra-button ul {
	list-style: none;
	margin: 0;
	padding: 0;
}
.lay-retract-query-extra-button ul li {
	padding: 8px 18px;
	font-size: 13px;
	line-height: 20px;
	color: #333a45;
	white-space: nowrap;
	overflow: hidden;
	text-overflow: ellipsis;
	cursor: pointer;
	transition: background-color .15s, color .15s;
}
.lay-retract-query-extra-button ul li:hover {
	background: #f5f0ff;
	color: var(--pt-primary-deep);
}

/* ========== 2.6 表单页字段：单元格内「标签在左、控件在右」（左右布局） ==========
   后端 TableGrid 生成的层级：
     .layui-form-item[layui-tdcol]          行（内为该行各字段单元格，横向多列）
       .layui-inline[occupy_column_num]     字段单元格（含 label + 控件容器，此处为左右）
         label.layui-form-label
         .layui-input-inline / .layui-textarea-inline
   要点：
   1) 行按 layui-tdcol 等分成固定列数的网格，单元格按 occupy_column_num 跨列；
      这样末行字段不足时保持与上方各列对齐（若用 flex:1 平均分，2 个字段会被拉成各占 50%，
      看起来就是「摆到两边」）；
   2) 单元格内横向排布：标签固定宽度在左，控件容器在右撑满剩余宽度；
      grid.js 的 resizeFormElementWidth() 仍会按 layui-tdcol 回写内联 width，
      这里控件容器用 flex:1 1 0，flex-basis 为 0 时内联 width 不参与主轴尺寸计算，无需改 JS。 */
.layui-form-blank .layui-form-item:has(> .layui-inline) {
	display: grid;
	/* 兜底：公共组件重建行时会丢掉 layui-tdcol，此时按该行字段数均分（隐式列），
	   grid-auto-flow: column 由 grid-auto-columns 生成等宽列，保证字段不被挤到下一行 */
	grid-auto-flow: column;
	grid-auto-columns: minmax(0, 1fr);
	/* 单元格等高：某列标签换行（如「客户是否已做融资信息」占两行，行高被撑到 48px）时，
	   grid 单元格拉伸到行高，各列控件才有同一个中线可对齐（配合下方 .layui-inline 的 align-items:center） */
	align-items: stretch;
	column-gap: 32px;
	row-gap: 12px;
	margin-bottom: 12px;
}
/* 每行列数 = 后端 layui-tdcol */
.layui-form-blank .layui-form-item[layui-tdcol="1"]:has(> .layui-inline) { grid-template-columns: repeat(1, minmax(0, 1fr)); }
.layui-form-blank .layui-form-item[layui-tdcol="2"]:has(> .layui-inline) { grid-template-columns: repeat(2, minmax(0, 1fr)); }
.layui-form-blank .layui-form-item[layui-tdcol="3"]:has(> .layui-inline) { grid-template-columns: repeat(3, minmax(0, 1fr)); }
.layui-form-blank .layui-form-item[layui-tdcol="4"]:has(> .layui-inline) { grid-template-columns: repeat(4, minmax(0, 1fr)); }
.layui-form-blank .layui-form-item[layui-tdcol="5"]:has(> .layui-inline) { grid-template-columns: repeat(5, minmax(0, 1fr)); }
.layui-form-blank .layui-form-item[layui-tdcol="6"]:has(> .layui-inline) { grid-template-columns: repeat(6, minmax(0, 1fr)); }
/* layui 的 clearfix 伪元素会多占一个网格单元，去掉 */
.layui-form-blank .layui-form-item:has(> .layui-inline)::after {
	display: none;
}
/* 字段单元格：横向排布（标签在左、控件在右），按 occupy_column_num 跨列 */
.layui-form-blank .layui-form-item > .layui-inline {
	display: flex;
	flex-direction: row;
	/* 标签与控件按同一条中线垂直居中：
	   同一行里某列标签换成两行时行高由它决定，其余单行标签列的控件随单元格拉伸后一起居中，
	   各列控件才会落在同一条水平线上；标签自身不移动、line-height 仍 18px（行距不变）。 */
	align-items: center;
	grid-column: span 1;
	min-width: 0;
	margin-right: 0;
	margin-bottom: 0;
}
/* 含多行文本域的行：行高由文本域决定，恢复顶对齐，避免同行其它列被拉到文本域中部 */
.layui-form-blank .layui-form-item:has(.layui-textarea-inline) > .layui-inline {
	align-items: flex-start;
}
.layui-form-blank .layui-form-item > .layui-inline[occupy_column_num="2"] { grid-column: span 2; }
.layui-form-blank .layui-form-item > .layui-inline[occupy_column_num="3"] { grid-column: span 3; }
.layui-form-blank .layui-form-item > .layui-inline[occupy_column_num="4"] { grid-column: span 4; }
/* 字段标签：固定宽度在左、右对齐贴住控件、加黑；文字过长时换行显示，不用省略号
   高度对齐输入框（30px）：行高收到 15px、上下不留内边距，
   单行标签由同行控件撑到 30px，两行标签 2×15=30px 也正好 30px，
   于是长标签换行的那一行不会比其它行高，各行行高统一、行间距才是均匀的
   （标签超过两行，即约 14 个汉字以上时仍会增高，另行处理）。 */
.layui-form-blank .layui-form-item > .layui-inline > .layui-form-label {
	float: none;
	flex: 0 0 auto;
	width: 120px;
	padding: 0 10px 0 0;
	margin-bottom: 0;
	text-align: right;
	color: #000;
	font-weight: 500;
	line-height: 15px;
	white-space: normal;
	word-break: break-word;
	overflow: visible;
	box-sizing: border-box;
}
/* 控件容器：占满单元格剩余宽度（grid.js 回写的内联 width 因 flex-basis:0 不参与主轴计算） */
.layui-form-blank .layui-form-item > .layui-inline > .layui-input-inline,
.layui-form-blank .layui-form-item > .layui-inline > .layui-textarea-inline {
	float: none;
	flex: 1 1 0;
	width: auto !important;
	min-width: 0;
	margin-right: 0;
	box-sizing: border-box;
}
/* 含文本域的字段行：整行统一按 30px 控件的节奏对齐（该类行已恢复 flex-start 顶对齐，
   仅靠父级 align-items 不会对齐）：
   1) 标签行高由 15px 提到 30px，单行标签的文字中线落在 30px 控件的中线上；
   2) 同行的普通输入框 / 开关容器取消 align-self:center 改为顶对齐，文字中线同样落在 15px；
   3) 文本域首行文字行高同步提到 30px，避免标签比文本域首行文字偏低。
   文本域容器本身不参与，保持与标签顶对齐。 */
.layui-form-blank .layui-form-item:has(.layui-textarea-inline) > .layui-inline > .layui-form-label {
	line-height: 30px;
}
.layui-form-blank .layui-form-item:has(.layui-textarea-inline) > .layui-inline > .layui-input-inline {
	align-self: flex-start;
}
.layui-form-blank .layui-form-item:has(.layui-textarea-inline) > .layui-inline > .layui-textarea-inline > .main-textarea {
	line-height: 30px;
}
/* 控件本身撑满容器 */
.layui-form-blank .layui-form-item > .layui-inline .layui-input,
.layui-form-blank .layui-form-item > .layui-inline .layui-textarea,
.layui-form-blank .layui-form-item > .layui-inline .layui-form-select,
.layui-form-blank .layui-form-item > .layui-inline .layui-form-select .layui-input {
	width: 100%;
	box-sizing: border-box;
}
/* 控件内容文字：常规字重 500 */
.layui-form-blank .layui-form-item > .layui-inline .layui-input,
.layui-form-blank .layui-form-item > .layui-inline .layui-textarea,
.layui-form-blank .layui-form-item > .layui-inline .layui-form-select .layui-input {
	font-weight: 500;
}
/* 表单字段内的 LOV 图标（放大镜 .layui-lov、清除 .close_lov_i）：
   1) 上下居中：JS 生成图标时写死内联 top:5px，是按旧控件高度估的值，控件高 30px 时图标偏上；
      这里改为相对控件容器 50% 定位 + 回拉自身高度一半，!important 覆盖内联 top，行高变化也不受影响；
   2) 左移 2px：内联 margin-right:2px → 4px，图标离输入框右边线多留 2px。 */
.layui-form-blank .layui-input-inline i.layui-lov,
.layui-form-blank .layui-input-inline i.close_lov_i {
	top: 50% !important;
	transform: translateY(-50%);
	margin-right: 4px !important;
}
/* 表单字段内的复选框（后端 check 控件，如「是否支持加时」「是否填运费」）上下居中：
   1) 控件与整行：控件总高 18px，字段单元格按 flex-start 顶对齐且控件自带 margin-top:4px，
      会比同排 30px 高的输入框/左侧标签文字偏高；这里把控件容器改为 flex 居中并补足 30px 行高；
   2) 方框与文字：方框 > i 是绝对定位（layui 内联 top:0、高 16px），标题 > div 却是行内块，
      参与父级行盒的基线/vertical-align:middle 排版，父级 font-size:0 的撑高又不一致；
      这里把控件本身定为 flex 定高 18px 容器、标题行高同为 18px，方框与文字共用同一条 18px 中线；
   3) 标题 div 必须同时压住 min-height：layui.css 里有 `.layui-inline div{min-height:25px}`，
      仅写 height:18px 会被它顶回 25px，25px 的标题盒在 18px 容器里 flex 居中后上下各溢出 3.5px，
      而文字行盒只占该盒顶部 18px，实测「是」字中心比方框中心高约 3.5px，故此处显式覆盖 min-height。 */
.layui-form-blank .layui-form-item > .layui-inline > .layui-input-inline:has(> .layui-form-checkbox) {
	display: flex;
	align-items: center;
	min-height: 30px;
}
.layui-form-blank .layui-form-item > .layui-inline > .layui-input-inline > .layui-form-checkbox {
	margin-top: 0;
}
.layui-form-blank .layui-form-checkbox[lay-skin='primary'] {
	display: flex;
	align-items: center;
	height: 18px !important;
}
.layui-form-blank .layui-form-checkbox[lay-skin='primary'] > div {
	height: 18px;
	min-height: 18px;
	line-height: 18px;
	margin-top: 0;
}
.layui-form-blank .layui-form-checkbox[lay-skin='primary'] > i {
	top: 50% !important;
	transform: translateY(-50%);
}
/* 表单字段内的开关（后端 switch 控件）固定尺寸 + 上下居中：
   Layui 每次 form.render() 都会把开关宽度写回内联 50px（见 layui/modules/form.js 的 switch 渲染分支），
   覆盖 grid.js addSwitchCss() 首次渲染后设置的 62px，表现为「输入框输入内容 → 触发表单重渲染 → 开关变短」。
   这里用 CSS + !important 固定尺寸，不再依赖 JS 内联样式。
   居中：开关容器（.layui-input-inline）实测高 25px（layui.css 的 .layui-inline div{min-height:25px} 把开关内文字盒撑到 25px，
   进而撑高容器），而开关本身很矮；改容器为 flex 居中后，开关中心恒等于容器中心，
   不再依赖 margin-top 数值补偿（补偿值一旦和容器实际高度不符，开关就会偏上或偏下）。
   容器在字段单元格里 align-self:center，单元格与标签同中线，故开关与左侧标签（含换成两行的标签）严格上下居中。
   轨道高度取 22px（不是 layui 默认的 18px/19px）：圆点直径 18px，轨道含上下各 1px 边框、内容区 20px，
   圆点上下各留 1px 余白，视觉上刚好「落在边框中间」；若轨道只有 19px，圆点只能做到 16px，余白会明显偏大，
   看上去发空。轨道加高后开关仍在 30px 容器内 flex 居中，不影响行高。
   开关内文字节点（div / 表格里是 em）同样被 min-height:25px 撑高、文字会下沉，这里压回与轨道内容区同高
   （22px 减上下各 1px 边框 = 20px），文字行盒中心才与轨道中心重合。 */
.layui-form-blank .layui-form-item > .layui-inline > .layui-input-inline:has(> .layui-form-switch) {
	display: flex;
	align-items: center;
	min-height: 30px;
}
.layui-form-blank .layui-form-switch {
	width: 62px !important;
	height: 22px !important;
	min-height: 22px !important;
	line-height: 22px !important;
	margin-top: 0 !important;
}
.layui-form-blank .layui-form-switch > div,
.layui-form-blank .layui-form-switch > em {
	height: 20px;
	min-height: 20px;
	line-height: 20px;
}
/* 开关圆点：layui 内联 top:1px、直径 16px 是按 18px 轨道估的值。轨道加高到 22px 后，
   圆点改为相对轨道 50% 定位 + 回拉自身高度一半，直径放大到 18px（内容区 20px，上下各留 1px 余白），
   与文字、轨道共用同一条中线。!important 用于压过 layui.css 里表格开关更具体的 `> i{top:0}` 规则。 */
.layui-form-switch > i {
	width: 18px !important;
	height: 18px !important;
	top: 50% !important;
	transform: translateY(-50%);
}
/* 表格内的开关同理：layui.css 给表格开关单独定高 18px，这里统一到 22px，
   保证表格里和表单里的开关观感一致；表格里承载文字的是 em（内联元素，高度无效），继承 22px 行高即可随轨道居中。 */
.layui-table-view .layui-form-switch {
	height: 22px !important;
	min-height: 22px !important;
	line-height: 22px !important;
}

/* ========== 2.7 征信信息条（对齐原型 form_an_v1.html .credit-panel） ==========
   表单页顶部的只读提示条，横向排列「标签 + 值」，空间不足自动折行。
   用法：
     <div class="pt-credit-panel">
       <span class="pt-credit-title"><i></i>征信信息</span>
       <span class="pt-credit-item"><span class="pt-credit-label">客户名称</span><span class="pt-credit-value" id="值容器"></span></span>
     </div>
   风险类数值（失信次数等）在 .pt-credit-value 上再加 .pt-credit-risk 变红。
   左右内缩 10px：面板是表单容器（.layui-form-blank，layui.css 自带 padding:10px）的兄弟节点，
   不补这 10px 就会比上方字段列左右各宽出 10px，与表单不齐。 */
.pt-credit-panel {
	display: flex;
	align-items: center;
	flex-wrap: wrap;
	gap: 4px 16px;
	margin: 10px 10px 12px;
	padding: 8px 12px;
	background: linear-gradient(90deg, #fff8f8, #fffdfd);
	border: 1px solid #ffe3e3;
	border-radius: 8px;
}
.pt-credit-title {
	display: inline-flex;
	align-items: center;
	gap: 5px;
	margin-right: 4px;
	font-size: 12px;
	font-weight: 600;
	color: #ff4d4f;
}
/* 标题前的红点 */
.pt-credit-title i {
	width: 6px;
	height: 6px;
	border-radius: 50%;
	background: #ff4d4f;
}
.pt-credit-item {
	display: inline-flex;
	align-items: baseline;
	gap: 4px;
	font-size: 12px;
	white-space: nowrap;
}
.pt-credit-label {
	color: var(--pt-text-sub);
}
.pt-credit-value {
	color: var(--pt-text);
	font-weight: 600;
}
.pt-credit-risk {
	color: #ff4d4f;
}
/* 提示条内的长文本说明（备注 / 注意 / 说明等）：独占一行并允许折行，字号与提示条一致 */
.pt-credit-remark {
	display: block;
	flex: 1 1 100%;
	min-width: 0;
	font-size: 12px;
	line-height: 1.7;
	color: var(--pt-text);
}

/* ========== 2.8 左右并排主细表布局（.lay-main-detail-flex） ==========
   页面外层容器加该 class 即可（无需再写内联 flex/宽度）：
     <div class="lay-main-detail-flex">
       <div id="mDiv"><table id="主表" .../></div>
       <div id="dDiv"><table id="细表" .../></div>
     </div>
   主表固定占 49%，明细表占满剩余宽度；
   两表高度由 yj.grid.gridInit / yj.grid.gridInitDetail 按该 class 自动自适应，页面无需设置高度 */
.lay-main-detail-flex {
	display: flex;
}
.lay-main-detail-flex > #mDiv {
	width: 49%;
	min-width: 0;
}
.lay-main-detail-flex > #dDiv {
	flex: 1 1 0;
	width: auto;
	min-width: 0;
	margin-left: 5px;
}

/* ========== 2.9 表单模块分块（.lay-form-moudle：后端 FormEntity.moudle 生成，全表单页通用） ==========
   框架默认是「浅灰隔条 + 白底标题条」的条状分块（见 layui.css 的 .lay-form-moudle 系列），
   多个模块上下叠起来就是一块块被灰条断开的白条，模块之间还双份留白。
   这里统一改成卡片式分块（配色沿用门户皮肤变量），只覆盖视觉层、不改后端生成的结构：
   1) 模块自身即一张白卡片：浅边框 + 圆角，去掉灰色隔条，模块之间 10px 间距；
   2) 标题栏浅灰底（与表格表头同色）+ 左侧主题色竖条 + 主题色加粗文字，收进卡片内；
   3) 内容区去掉阴影，左右内边距与卡片对齐，底部不补内边距（表单行自带 margin-bottom）。
   注1：grid.js 的 resizeFormElementWidth 会读取 .lay-form-moudle-content 的左右 margin 参与宽度计算，
   这里把 margin 置 0，计算时减去 0 仍成立，不影响字段宽度。
   注2：卡片不能加 overflow:hidden。layui 的下拉面板(.layui-form-select dl)是绝对定位向下展开的，
   模块内最后一行的 select 展开后会超出模块边界，加了 overflow:hidden 会被整块裁掉导致「下拉看不见」。
   圆角改由标题栏自带顶部圆角实现，效果一致。 */
.lay-form-moudle {
	margin-bottom: 10px;
	padding: 0;
	background-color: #fff;
	border: 1px solid var(--pt-border-line);
	border-radius: var(--pt-radius);
}
.lay-form-moudle:last-child {
	margin-bottom: 0;
	padding: 0;
}
.lay-form-moudle .lay-form-moudle-title {
	margin: 0;
	padding: 8px 12px;
	color: var(--pt-primary);
	font-size: 14px;
	font-weight: 600;
	line-height: 20px;
	background-color: var(--pt-head-bg);
	border-left: 3px solid var(--pt-primary);
	border-bottom: 1px solid var(--pt-border-line);
	/* 卡片已去掉 overflow:hidden，标题栏自带顶部圆角以贴合卡片圆角（减去 1px 边框） */
	border-radius: calc(var(--pt-radius) - 1px) calc(var(--pt-radius) - 1px) 0 0;
}
.lay-form-moudle .lay-form-moudle-content {
	margin: 0;
	padding: 12px 12px 0 12px;
	box-shadow: none;
	background-color: #fff;
}

/* ========== 3. 数据表格（layui table） ========== */
.layui-table-view {
	border: 1px solid var(--pt-border-line) !important;
	border-radius: 8px !important;
	overflow: hidden;
	box-shadow: 0 1px 6px rgba(0, 0, 0, .05);
}
/* 去掉 layui 默认外框粗线，圆角内收 */
.layui-table-view .layui-table {
	border: none !important;
}
/* 表头 */
.layui-table-header {
	background: var(--pt-head-bg) !important;
}
.layui-table th {
	background: var(--pt-head-bg) !important;
	color: #3a3f4a !important;
	font-weight: 600 !important;
	border-right: 1px solid var(--pt-border-line) !important;
	border-bottom: 1px solid #d9dde7 !important;
}
/* 单元格：字段文字统一黑色；审核标识/是否/启用禁用等状态文字由 .pt-flag-* 覆盖配色（见第 5 节） */
.layui-table td {
	border-right: 1px solid var(--pt-border-line) !important;
	border-bottom: 1px solid var(--pt-border-row) !important;
	color: #000;
}
.layui-table-cell {
	padding-left: 3px;
	padding-right: 3px;
}
/* 单元格内编辑控件（input / day 日期 / configlov 等）：列表表格为 lay-size="sm"，单元格固定 24px 且 overflow:hidden，
   而查询区的 .lay-retract-query .layui-input 是 28px!important，列表表格嵌在查询区容器内时
   会把单元格编辑框一并撑高、导致底部边框和 LOV 放大镜被裁切；这里按单元格高度收窄输入框，
   保证边框完整显示且文字垂直居中 */
.layui-table-view .layui-table-cell .layui-input {
	height: 24px !important;
	line-height: 22px !important;
}
/* 单元格内 LOV 图标（放大镜 .layui-lov、清除 .close_lov_i）上下居中：
   JS 生成图标时写死的内联 top:2px 是按旧行高估算的，行高变化后图标偏上；
   这里改为相对单元格高度的 50% 定位并回拉自身高度的一半，!important 覆盖内联 top */
.layui-table-view .layui-table td i.layui-lov,
.layui-table-view .layui-table td i.close_lov_i {
	top: 50% !important;
	transform: translateY(-50%);
}
/* 行 hover */
.layui-table-body tr:hover,
.layui-table-hover {
	background: var(--pt-row-hover) !important;
}
.layui-table-body tr:hover td {
	background: var(--pt-row-hover) !important;
}
/* 选中行（点击行）：浅蓝底 + 左侧强调 */
.layui-table-click,
.layui-table-body tr.layui-table-click td {
	background: var(--pt-sel-bg) !important;
}
/* 框架实际选中行 .select-tr（对齐原型 tbody tr.sel：浅蓝底 + 左侧深蓝竖条 + 浅蓝下边框） */
.layui-table-box tr.select-tr td {
	background: var(--pt-sel-bg) !important;
	border-bottom-color: #bae7ff !important;
}
.layui-table-box tr.select-tr td:first-child {
	box-shadow: inset 3px 0 0 var(--pt-primary-deep) !important;
}
/* 复选框选中行高亮（checkbox checked 时整行浅蓝） */
.layui-table-body tr.layui-table-checked td,
.layui-table[lay-skin="line"] tbody tr td .layui-form-checked[lay-skin="primary"] ~ * {
	background: var(--pt-sel-bg);
}
/* 复选框主题色（primary 风格：只填充左侧小方块，label 不打底色、文字保持深色，对齐原型 accent-color 效果） */
.layui-form-checkbox[lay-skin="primary"]:hover > i {
	border-color: var(--pt-primary);
}
.layui-form-checked[lay-skin="primary"] > i {
	border-color: var(--pt-primary) !important;
	background-color: var(--pt-primary) !important;
	color: #fff !important;
}
/* 单选/开关主题色 */
.layui-form-radioed i,
.layui-form-radio i:hover {
	color: var(--pt-primary);
}
/* 开关（switch）：轨道改白底 + 淡色圆点，开/关靠圆点与文字颜色区分，去掉原来的实心灰底/蓝底 */
.layui-form-switch {
	border-color: var(--pt-border);
	background: #fff !important;
}
/* 关闭态：圆点淡灰、文字淡灰 */
.layui-form-switch > i {
	background-color: #dbe2ec !important;
}
.layui-form-switch > div {
	color: #a6adba !important;
}
/* 表格内的开关用 em 承载文字，layui 自带的 .layui-table-view 规则优先级更高，需单独覆盖（否则打开态是白底白字） */
.layui-table-view .layui-form-switch > em {
	color: #a6adba !important;
}
/* 打开态：轨道填 layui 原生绿（#16b777），文字与圆点用白色。主题蓝饱和度偏高、对比过强，长时间看容易刺眼，
   绿色与「开启/启用」语义也更贴合，且与 layui 自带开关样式保持一致。 */
.layui-form-onswitch {
	border-color: #16b777 !important;
	background-color: #16b777 !important;
}
.layui-form-onswitch > i {
	background-color: #fff !important;
}
.layui-form-onswitch > div {
	color: #fff !important;
}
.layui-table-view .layui-form-onswitch > em {
	color: #fff !important;
}
/* 表格工具条（左上按钮区容器） */
.layui-table-tool {
	background: #fff !important;
	border-bottom: 1px solid var(--pt-border-row) !important;
}

/* ========== 4. 分页（layui laypage） ========== */
.layui-laypage a,
.layui-laypage span,
.layui-laypage button,
.layui-laypage input,
.layui-laypage select {
	border-radius: var(--pt-radius) !important;
	border-color: var(--pt-border) !important;
	color: #333a45 !important;
}
.layui-laypage a:hover {
	color: var(--pt-primary) !important;
	border-color: var(--pt-primary) !important;
	background: #f0f7ff !important;
}
.layui-laypage .layui-laypage-curr .layui-laypage-em {
	background: var(--pt-primary) !important;
	border-radius: var(--pt-radius) !important;
}
.layui-laypage .layui-laypage-curr em {
	color: #fff !important;
}
.layui-table-page {
	border-top: 1px solid var(--pt-border-row) !important;
	background: #fff;
}

/* ========== 5. 状态徽标 / 标签胶囊 ========== */
.layui-badge,
.layui-badge-rim {
	border-radius: 999px;
	font-weight: 500;
}
.layui-badge-rim {
	border-color: var(--pt-border-line);
}
/* 表格状态文字（对齐原型）：未提交/未确认=橙、已提交/已确认=绿、已审核=蓝、已回退/已退回=红；是/启用=蓝、否/禁用=红 */
.pt-flag {
	display: inline-block;
	padding: 1px 8px;
	border-radius: 999px;
	font-size: 11px;
	line-height: 16px;
	font-weight: 500;
}
.pt-flag-orange {
	background: #f1f1f1;
	color: #4f4f4f !important;
}
.pt-flag-green {
	background: #d9f7be;
	color: #26af17 !important;
}
.pt-flag-blue {
	background: #e6f7ff;
	color: #096dd9 !important;
}
.pt-flag-red {
	background: #fff1f0;
	color: #f73235 !important;
}

/* ========== 6. 弹窗（layer） ========== */
.layui-layer {
	border-radius: 10px !important;
	overflow: hidden;
	box-shadow: 0 10px 40px rgba(0, 0, 0, .2) !important;
}
.layui-layer-title {
	border-bottom: 1px solid var(--pt-border-row) !important;
	font-weight: 600;
	color: #1a1a2e;
}
.layui-layer-btn .layui-layer-btn0 {
	background: var(--pt-primary) !important;
	border-color: var(--pt-primary) !important;
	border-radius: var(--pt-radius) !important;
}
.layui-layer-btn .layui-layer-btn1 {
	border-radius: var(--pt-radius) !important;
}

/* ========== 7. 卡片容器（列表外层） ========== */
.layui-card {
	border-radius: 10px !important;
	box-shadow: 0 1px 6px rgba(0, 0, 0, .06);
	border: none !important;
}
.layui-card-header {
	border-bottom: 1px solid var(--pt-border-row) !important;
	font-weight: 600;
	color: #1a1a2e;
}

/* ========== 8. 表单页底部固定按钮：滚动条不侵入按钮区域 ==========
   底部按钮 .layui-form-btn 为 position:fixed;bottom:1px;height:44px;border-top:1px，
   实际占底部 46px（44 内容 + 1 上边框 + 1 底偏移）。
   但页面滚动条属于视口，会一直延伸到最底部、压在按钮上。
   这里把有底部按钮的表单页 body 变成滚动容器并限高到按钮上沿（100vh - 46px），
   滚动条轨道即止于按钮上方，不再穿过按钮；
   html 必须一起收住 overflow:hidden，否则 body 的 overflow 会被传播到视口、
   body 自身退化为 visible 而滚不动（CSS overflow 传播规则）。
   框架原本用 body{padding-bottom:50px} 预留按钮空间，现由 body 限高替代，故置 0 避免多出空白。
   表单页明细表（yj.grid.gridInitAll 渲染）不再接收页面传入的高度，表格随内容撑开，
   纵向滚动全部由这里的 body 承担，滚轮落在表格上滚动的也是 body，不会滚表格内部。 */
html:has(.layui-form-btn) {
	overflow: hidden !important;
}
body:has(.layui-form-btn) {
	height: calc(100vh - 46px) !important;
	overflow-y: auto !important;
	padding-bottom: 0 !important;
}

/* ========== 9. 表单页明细表：横向滚动条外置到表格下方 ==========
   明细表横向滚动条原先画在 .layui-table-body 内部（被 .layui-table-view 的 overflow:hidden 包住），
   视觉上"长在表格里面"、还占掉表格内容区高度。
   这里把表格体原生滚动条隐藏（scrollbar-width:none 不占槽位，比 ::-webkit-scrollbar 置 0 更彻底），
   在表格下方追加一条独立横向滚动条（15px），由 yj.grid.setDetailTableHScroll 与表格 scrollLeft 双向联动。
   仅对表单页明细表（yj.grid.gridInitAll 渲染）生效，列表页表格保持原生滚动条。
   隐藏滚动条不影响滚动能力：滚轮、scrollLeft 双向联动均照常可用。
   该滚动条作为流内元素时会落到页面底部、被固定在底部的 .layui-form-btn（占底部 46px）压住看不见，
   故固定到按钮正上方（bottom:46px）；同时由 body:has(.layui-form-btn).has-detail-h-scroll 把 body 再收掉同高 15px
   （100vh - 61px = 46 按钮 + 15 滚动槽），让这条滚动槽落在 body 滚动容器之外，任何滚动位置都不会压住最后一行。
   注意不能用 body{padding-bottom:15px} 预留：body 已被限高，表格内容一旦长于 body 高度即产生溢出，
   此时 padding-bottom 不再计入 scrollHeight，滚到底时内容底边仍贴在 body 底边，依旧被滚动条压掉 15px。 */
.layui-detail-h-scroll-view .layui-table-body {
	scrollbar-width: none;
}
.layui-detail-h-scroll-view .layui-table-body::-webkit-scrollbar {
	width: 0;
	height: 0;
	display: none;
}
.layui-detail-h-scroll {
	position: fixed;
	left: 0;
	right: 0;
	bottom: 46px;
	z-index: 10002;
	height: 15px;
	overflow: hidden;
	background-color: #ffffff;
}
/* 滑块自绘 不使用原生滚动条：
   原生滚动条拖动由浏览器接管，拖动过程中会逐次触发滚动同步，与外置条回写表格滚动位置叠加后
   滑块会跟不上鼠标而一卡一卡；自绘滑块拖动只改 transform（在合成层内完成，不触发重排），
   表格滚动位置按帧回写，一帧最多一次。
   条高与右侧 body 滚动条一致（15px）；滑块略窄于条槽并居中，颜色取 Chromium 原生滚动条滑块色（#c1c1c1 / 悬停 #a8a8a8），与右侧观感统一。 */
.layui-detail-h-scroll-thumb {
	position: absolute;
	top: 3px;
	left: 0;
	height: 9px;
	border-radius: 4px;
	background-color: #c1c1c1;
	cursor: default;
	touch-action: none;
	will-change: transform;
}
.layui-detail-h-scroll-thumb:hover {
	background-color: #a8a8a8;
}
body:has(.layui-form-btn).has-detail-h-scroll {
	box-sizing: border-box;
	height: calc(100vh - 61px) !important;
	padding-bottom: 0 !important;
}

/* ========== 10. 树选择弹窗（comm/tree/*）按钮组：按钮之间保留一点间隙 ==========
   layui 的 .layui-btn-group 用 margin-left/right:0 !important 把按钮拼成一整块，
   这里给相邻按钮留 3px 间距（最后一个不留），使各按钮独立显示。
   覆盖对象：公司树/集团树/猪场树/产品树（#dialog）、实验室树（#dialogLaboratory）。 */
#dialog .layui-btn-group .layui-btn,
#dialogLaboratory .layui-btn-group .layui-btn {
	margin-right: 3px !important;
}
#dialog .layui-btn-group .layui-btn:last-child,
#dialogLaboratory .layui-btn-group .layui-btn:last-child {
	margin-right: 0 !important;
}

/* ========== 11. 树容器（#treeDivs）默认白底 ==========
   树容器自身没有背景色，会透出父级底色，这里统一给默认白底，
   保证各业务页（公司树/部门树/猪场树/产品树等）的树区域都是白底。 */
#treeDivs {
	background-color: #ffffff;
}

/* ========== 12. 穿梭框（layui transfer）：复选框方块与标题文字垂直居中 ==========
   问题：表头「待选数据 / 已选数据」前的复选框在 38px 高的 .layui-transfer-header 内，
   layui.css 把方框 > i 设为绝对定位（top:0、高 16px），标题 > div 是行内块参与行盒排版；
   业务页面若再写 `.layui-form-checkbox[lay-skin="primary"] i{ top:3px }` 之类的覆盖，
   方框就被整体下压，与标题文字不再同心。
   这里在框架层统一（!important 优先级高于各页面内联 <style>）：
   1) 方框 > i 一律以控件中线定位，页面无需再写 top 覆盖；
   2) 表头控件改为 flex 定高撑满表头，方框与标题共用同一条水平中线。 */
.layui-transfer .layui-form-checkbox[lay-skin='primary'] > i {
	top: 50% !important;
	transform: translateY(-50%);
}
.layui-transfer-header .layui-form-checkbox[lay-skin='primary'] {
	display: flex;
	align-items: center;
	height: 100% !important;
}
.layui-transfer-header .layui-form-checkbox[lay-skin='primary'] > div {
	margin-top: 0;
	min-height: 18px;
	line-height: 18px;
}

/* ========== 13. 标签页页签（.layui-tab）：左右内边距由 10px 放宽到 15px ==========
   layui 默认 .layui-tab .layui-tab-title li 的 padding 为 0 10px，页签文字两侧偏挤，
   这里统一放宽到 0 15px；首页多页签（lay-filter="tree_side_tab"）在 index.css 中有更高优先级的定义，
   仍按 index.css 的 0 14px 生效，不受本规则影响。 */
.layui-tab > .layui-tab-title > li {
	padding: 0 15px;
}

/* ========== 14. 多选下拉（formSelects / xm-select）统一为门户主题蓝 ==========
   formSelects v4 组件在 select 未设置 xm-select-skin 时走的是 layui 原生绿皮肤
   （已选标签 #009688、下拉复选框 #5FB878、展开边框 #009688），与门户皮肤（主色 #1890ff）不一致。
   这里在框架层做视觉覆盖（不改 DOM 结构，不影响取值逻辑），
   使全系统所有 formSelects.render() 的多选控件统一为主题蓝：
   外框对齐 .layui-input（边框 #d9d9d9、圆角 --pt-radius、悬停 #96b5e8、展开主色蓝边框 + 浅蓝光晕），
   已选标签实心蓝底（--pt-primary）/ 白字，与 .layui-btn 主按钮同调，下拉复选框选中色为主题蓝，下拉面板对齐 .layui-form-select dl。
   展开态边框与下拉三角统一取 --pt-primary（= 查询按钮主色 #1890ff），与 .layui-btn 同一调性。
   注意：portal-theme.css 在 formSelects-v4.css 之后加载，同优先级选择器以后者为准。 */

/* 外框：与 .layui-input 一致的边框 / 圆角 / 悬停色 */
.xm-select-parent .xm-input {
	border-color: #d9d9d9;
	border-radius: var(--pt-radius);
}
.xm-select-parent .xm-select:hover {
	border-color: #96b5e8;
}
/* 展开态：主色蓝边框 + 浅蓝光晕，与 .layui-btn（查询按钮）同色 */
.xm-form-selected .xm-select,
.xm-form-selected .xm-select:hover {
	border-color: var(--pt-primary) !important;
	box-shadow: 0 0 0 2px rgba(24, 144, 255, .12);
}
/* 下拉三角颜色与 .layui-form-select .layui-edge 保持一致 */
.xm-select-parent .xm-select-sj {
	border-top-color: var(--pt-primary);
}

/* 已选标签：实心蓝底 + 白字，与 .layui-btn 主按钮同一调性 */
div[xm-select-skin] .xm-select-title div.xm-select-label > span {
	background-color: var(--pt-primary);
	border: 1px solid var(--pt-primary);
	border-radius: 4px;
	color: #fff;
}

/* 下拉面板：边框 / 圆角 / 阴影对齐 .layui-form-select dl */
.xm-select-parent .xm-form-select dl {
	border: 1px solid var(--pt-border-line);
	border-radius: var(--pt-radius);
	box-shadow: 0 2px 12px rgba(0, 0, 0, .1);
	padding: 4px;
}
.xm-select-parent .xm-form-select dl dd {
	border-radius: 4px;
}
.xm-select-parent .xm-form-select dl dd:hover {
	background-color: #f0f7ff;
}

/* 下拉复选框：未选蓝灰边、悬停 / 选中主题蓝 */
.xm-form-checkbox > i {
	border-color: #d2d2d2;
}
.xm-form-checkbox:hover > i {
	border-color: var(--pt-primary);
}
.xm-select-parent dl dd.xm-select-this i {
	color: var(--pt-primary);
}

/* 全选 / 清空 / 反选 快捷操作 */
.xm-select-parent dd .xm-cz:hover {
	color: var(--pt-primary);
}
.xm-select-parent dd > .xm-cz-group {
	border-right: 1px solid var(--pt-border-line);
}

/* ========== 11. 表单说明块（.layui-form-explain，yj.form.addExplain 生成） ==========
   业务页面（付款单等）里的「说明 / 口径 / 公式 / 字段含义」统一成同一张卡片：
   绿色左边线 + 浅底 + 标题 + 要点行（可多列）+ 补充说明行。
   页面不要再各写一套红字说明或复制样式，直接调用 yj.form.addExplain（见 static/js/comm/grid.js）。 */
.layui-form-explain {
	box-sizing: border-box;
	margin: 0 0 8px;
	padding: 8px 12px;
	color: #405467;
	font-size: 12px;
	font-weight: 400;
	line-height: 1.7;
	background: #f7fbfa;
	border: 1px solid #d7ebe6;
	border-left: 3px solid #16a085;
}
.layui-form-explain-title {
	margin-bottom: 3px;
	color: #167c65;
	font-size: 13px;
	font-weight: 600;
}
/* 要点行：默认单列；columns > 1 时由 JS 写内联 grid-template-columns 并加 .cols-multi（行内不换行） */
.layui-form-explain-rows {
	display: grid;
	grid-template-columns: 1fr;
	gap: 2px 14px;
}
.layui-form-explain-rows.cols-multi > div {
	white-space: nowrap;
}
.layui-form-explain-rows b,
.layui-form-explain-note b {
	color: #2f4858;
}
.layui-form-explain code {
	color: #c0392b;
	font-family: Consolas, "Microsoft YaHei", monospace;
	background: transparent;
	white-space: normal;
	word-break: break-word;
}
.layui-form-explain-note {
	margin-top: 3px;
	color: #6f7f8d;
}
/* 窄屏（弹窗内也适用）：多列压成单列，不再强制不换行 */
@media (max-width: 1200px) {
	.layui-form-explain-rows {
		grid-template-columns: 1fr !important;
	}
	.layui-form-explain-rows > div {
		white-space: normal !important;
	}
}
