/* ==========================================================================
   layui 原生组件主题覆盖层  admin-theme.css
   设计 tokens: iris-3041   实现: bram-e041   2026-09-02

   分工（@atlas-3e19 22:54 决策）：
     - 变量定义 + layadmin-* 项目自有组件  → admin.css（同文件内改，无特异性问题）
     - layui 原生组件（按钮/表单/表格/分页/tab）→ 本文件
   本文件消费 admin.css 里定义的 :root --admin-* 变量。

   接入：app/view/public/css.html 末尾追加
     <link rel="stylesheet" href="__STATIC__/admin/css/admin-theme.css?v=20260902" media="all">
   回滚：删掉那一行；admin.css 用 admin.css.bak.20260902 还原。

   不覆盖侧边栏/顶栏导航 —— 那些在 admin.css 里是 4-5 层选择器，已在该文件内直接改。
   不覆盖 designer_page —— 那 175 页不引 public/css，本层够不着。
   ========================================================================== */

/* ==========================================================================
   嘉心菜后台主题层  admin-theme.css
   设计 tokens: iris-3041   实现: bram-e041   2026-09-02

   作用：在 layui.css / admin.css 之后加载，靠加载顺序覆盖 layui 默认主题色
        （#009688 青绿）为嘉心菜品牌绿系。

   接入方式：在 app/view/public/css.html 末尾追加
       <link rel="stylesheet" href="__STATIC__/admin/css/admin-theme.css?v=20260902" media="all">
   回滚：删掉那一行即可，本文件不修改任何既有 CSS。

   ⚠️ 未接入前本文件不产生任何效果。
   ========================================================================== */


/* ============ layui 主色覆盖：#009688 → 品牌绿 ============ */

.layui-btn {
	background-color: var(--admin-primary);
	border-radius: var(--admin-radius-md);
}
.layui-btn:hover { background-color: var(--admin-primary-hover); }
.layui-btn:active { background-color: var(--admin-primary-active); }

/* 次按钮：白底描边，hover 走品牌绿 */
.layui-btn-primary {
	border: 1px solid var(--admin-border-strong);
	background-color: var(--admin-card-bg);
	color: var(--admin-text-primary);
}
.layui-btn-primary:hover {
	border-color: var(--admin-primary);
	color: var(--admin-primary);
	background-color: var(--admin-primary-bg);
}
.layui-btn-group .layui-btn-primary:hover {
	border-color: var(--admin-border-strong);
	color: var(--admin-primary);
}

/* 语义按钮：分别映射，不是只改主色 */
.layui-btn-normal { background-color: var(--admin-info); }
.layui-btn-normal:hover { background-color: var(--admin-info-fill); }
.layui-btn-warm { background-color: var(--admin-warning-fill); }
.layui-btn-warm:hover { background-color: var(--admin-warning); }
.layui-btn-danger { background-color: var(--admin-error); }
.layui-btn-danger:hover { background-color: var(--admin-error-fill); }
.layui-btn-disabled,
.layui-btn-disabled:active,
.layui-btn-disabled:hover {
	border: 1px solid var(--admin-border);
	background-color: var(--admin-neutral-100);
	color: var(--admin-text-disabled);
}

.layui-elem-quote {
	border-left-color: var(--admin-brand-primary);
	background-color: var(--admin-neutral-50);
}
.layui-bg-green { background-color: var(--admin-primary) !important; }

/* 分页 */
.layui-laypage a:hover { color: var(--admin-primary); }
.layui-laypage .layui-laypage-curr .layui-laypage-em { background-color: var(--admin-primary); }

/* ============ 表单控件 ============ */

.layui-input,
.layui-textarea,
.layui-select {
	border-color: var(--admin-border);
	border-radius: var(--admin-radius-md);
	color: var(--admin-text-primary);
}
.layui-input:hover,
.layui-textarea:hover { border-color: var(--admin-border-strong); }
.layui-input:focus,
.layui-textarea:focus {
	border-color: var(--admin-brand-primary) !important;
	box-shadow: 0 0 0 3px var(--admin-focus-ring);
}

/* 复选/单选/开关：选中态走品牌绿 */
.layui-form-checkbox[lay-skin="primary"]:hover i { border-color: var(--admin-brand-primary); }
.layui-form-checked[lay-skin="primary"] i {
	border-color: var(--admin-brand-primary) !important;
	background-color: var(--admin-brand-primary);
}
.layui-form-checked, .layui-form-checked:hover { border-color: var(--admin-brand-primary); }
.layui-form-checked span, .layui-form-checked:hover span { background-color: var(--admin-brand-primary); }
.layui-form-radio > i:hover,
.layui-form-radioed > i { color: var(--admin-brand-primary); }
.layui-form-onswitch {
	border-color: var(--admin-brand-primary);
	background-color: var(--admin-brand-primary);
}

/* ============ 表格 ============ */

.layui-table th { background-color: var(--admin-neutral-100); color: var(--admin-text-secondary); }
.layui-table tbody tr:hover { background-color: var(--admin-primary-bg); }
.layui-table-click { background-color: var(--admin-primary-bg); }
.layui-table[lay-even] tr:nth-child(even) { background-color: var(--admin-surface-raised, #FCFDFC); }

/* ============ 卡片 / 面板 ============ */

.layui-card-header {
	color: var(--admin-text-title);
	border-bottom-color: var(--admin-border);
}

/* ============ tab / nav 选中态 ============ */

.layui-tab-brief > .layui-tab-title .layui-this { color: var(--admin-primary); }
.layui-tab-brief > .layui-tab-more li.layui-this:after,
.layui-tab-brief > .layui-tab-title .layui-this:after { border-bottom-color: var(--admin-primary); }

/* ============ 语义标签 ============ */

.layui-badge { background-color: var(--admin-error); }
.layui-badge-rim { border-color: var(--admin-border); color: var(--admin-text-secondary); }

/* ============ 金额强调（业务语义，需模板配合加 class）============ */
.admin-amount { color: var(--admin-accent); font-variant-numeric: tabular-nums; }

/* ============ 侧边栏 / 导航选中态 ============
   layui.css 原值 #5FB878（辅助绿）→ 品牌绿。
   这几条在 layui.css 里是 1-3 层，本层盖得过；
   深色底 #23262E / #393D49 属中性导航底色，非品牌色，保持不动。 */

.layui-nav .layui-this:after,
.layui-nav-bar,
.layui-nav-tree .layui-nav-itemed:after {
	background-color: var(--admin-brand-primary);
}
.layui-nav .layui-nav-child dd.layui-this a,
.layui-nav-child dd.layui-this {
	background-color: var(--admin-primary);
}
.layui-nav-tree .layui-nav-bar { background-color: var(--admin-brand-primary); }

/* ==========================================================================
   P3 第一档：表格 / 筛选区 / 卡片 / 留白 重设计
   （@atlas-3e19 02:06 放行，方向来自 @iris-3041 设计稿 gCMUI）
   全部走共享 CSS，562 页一次覆盖，不改任何模板。
   ========================================================================== */

/* ── 表格：去粗边框、行高加大、表头浅色 ── */
.layui-table {
	border: none;
	border-radius: var(--admin-radius-md);
	overflow: hidden;
}
.layui-table th {
	height: 44px;
	padding: 12px 15px;
	border-width: 0 0 1px 0;
	border-bottom-color: var(--admin-border);
	font-weight: 600;
	white-space: nowrap;
}
.layui-table td {
	height: 30px;
	padding: 12px 15px;
	border-width: 0 0 1px 0;
	border-bottom-color: var(--admin-neutral-100);
}
.layui-table tbody tr:last-child td { border-bottom: none; }
.layui-table[lay-skin="row"],
.layui-table[lay-skin="row"] th,
.layui-table[lay-skin="row"] td { border-left: none; border-right: none; }

/* 表格容器：卡片化 */
.layui-table-view,
.layui-table-box {
	border: 1px solid var(--admin-border);
	border-radius: var(--admin-radius-lg);
	overflow: hidden;
}
.layui-table-header { border-bottom-color: var(--admin-border); }
.layui-table-header th { background-color: var(--admin-neutral-100); }
.layui-table-body .layui-table tr:hover td,
.layui-table-view .layui-table tr:hover td { background-color: var(--admin-primary-bg); }

/* 分页条：与表格同容器，去掉突兀边框 */
.layui-table-page {
	border-top: 1px solid var(--admin-border);
	background: var(--admin-card-bg);
	padding: 12px 15px;
}

/* ── 筛选区：压成单行、白卡承载 ── */
.layui-form.layui-card-body > .layui-form-item,
.layui-card-body > .layui-form > .layui-form-item {
	display: flex;
	flex-wrap: wrap;
	align-items: center;
	gap: 12px;
	margin-bottom: 0;
}
.layui-card-body > .layui-form .layui-inline {
	margin-right: 0;
	margin-bottom: 0;
}

/* ── 卡片：白底 + 描边 + 圆角，去掉 layui 默认厚重阴影 ── */
body .layui-card {
	border: 1px solid var(--admin-border);
	border-radius: var(--admin-radius-lg);
	box-shadow: none;
	background: var(--admin-card-bg);
}
.layui-card-header {
	height: 50px;
	line-height: 50px;
	padding: 0 20px;
	border-bottom: 1px solid var(--admin-border);
	font-size: 15px;
	font-weight: 600;
	color: var(--admin-text-title);
	background: transparent;
}
/* §17.6 standard card body = 四边 20px。
   layui.css 里 .layui-card-body[pad15]（特异性 0,2,0）压过裸 .layui-card-body（0,1,0），
   而全站 539 页都带 pad15——只写裸选择器这条规则覆盖 0 页（2026-09-03 实测）。 */
.layui-card-body,
.layui-card-body[pad15] { padding: var(--admin-space-5); }
/* §17.6 的 table-only 变体本轮不做（2026-09-04 撤回）。
   `:has(> .layui-table-view)` 只能证明 body「有」直属表格，不能证明「只有」表格——
   实测 PurchaseReceipt/StoreFreightGroup 等 18 个 card 表格前还有筛选(112px)、
   摘要网格(476px)、说明块，被误判成纯表格后 padding 一起清零。
   而且每个 body 里都有一个高 0 的原始 <table>（layui 渲染前的源表），
   连 `:not(:has(> :not(.layui-table-view)))` 这种精确化写法也躲不开它。
   要区分变体必须在 DOM 上加标记，属模板层，不在公共 CSS 能力范围内。 */

/* ── 留白节奏：内容区呼吸感 ── */
.layui-body,
.layadmin-tabsbody-item {
	background: var(--admin-page-bg);
}
.layui-fluid { padding: 20px; }
.layui-card + .layui-card,
.layui-row + .layui-card { margin-top: 16px; }

/* ── 按钮形态统一（在已有主色覆盖基础上补几何）── */
.layui-btn {
	height: 38px;
	line-height: 38px;
	padding: 0 16px;
	font-size: 14px;
	border-radius: var(--admin-radius-md);
}
.layui-btn-sm { height: 30px; line-height: 30px; padding: 0 12px; font-size: 13px; }
.layui-btn-xs { height: 24px; line-height: 24px; padding: 0 10px; font-size: 12px; }
/* 表格内操作按钮：文字化，不铺满色块 */
.layui-table td .layui-btn-xs,
.layui-table td .layui-btn-sm { margin: 2px 4px 2px 0; }

/* ── 输入控件几何（与按钮同高，对齐单行筛选）── */
.layui-input,
.layui-select,
.layui-textarea {
	height: 38px;
	border-radius: var(--admin-radius-md);
}
.layui-form-label {
	padding: 9px 12px 9px 0;
	width: auto;
	text-align: left;
	font-size: 14px;
}


/* ==========================================================================
   P3 兼容层：压平页面级规则造成的跨模块不一致
   （@vera-wltq 验收第 1/2/3 条）
   按她的边界要求：不用无差别全局 !important，只对已确认的高特异性
   页面规则写等特异性的兼容选择器。每条都标注命中源。
   ========================================================================== */

/* ── 1. 卡片规格统一（命中源：coupon/index.html:13 的 .coupon-page.layui-card）── */
body .layui-card.coupon-page,
body .coupon-page.layui-card {
	border-radius: var(--admin-radius-lg);
	box-shadow: none;
	border: 1px solid var(--admin-border);
}
/* 财务等页面内嵌 .layui-card 的旧阴影 */
body .layui-body .layui-card,
body .layadmin-tabsbody-item .layui-card {
	box-shadow: none;
	border-radius: var(--admin-radius-lg);
	border: 1px solid var(--admin-border);
}

/* ── 2. 控件几何统一（命中源：shop_order/index.html:64/69/79）── */
body .shop-order-actions .layui-btn,
body .shop-order-search-panel .shop-order-filter-actions .layui-btn {
	height: 38px;
	line-height: 38px;
	padding: 0 16px;
	border-radius: var(--admin-radius-md);
}
body .shop-order-search-panel .layui-input,
body .shop-order-search-panel .layui-select {
	height: 38px;
	line-height: 38px;
	border-radius: var(--admin-radius-md);
}
/* 商品页同类模式（页面级 class + layui 类） */
body [class*="-search-panel"] .layui-input,
body [class*="-search-panel"] .layui-select,
body [class*="-actions"] .layui-btn {
	height: 38px;
	line-height: 38px;
}

/* ── 3. 财务页筛选压成单行（命中源：FenzhangDetail 筛选区两行）── */
body .layui-form-search,
body .layui-card-body > .layui-form,
body [class*="-search-panel"] {
	display: flex;
	flex-wrap: wrap;
	align-items: center;
	gap: 10px 12px;
}
.layui-form-search .layui-inline,
[class*="-search-panel"] .layui-inline {
	margin-right: 0;
	margin-bottom: 0;
}

/* ── 数据行高度：layui JS 表格用 .layui-table-cell 内层 div 控高 ──
   目标 tr 总高 54-58px（@iris-3041 口径，看最终 computed）
   构成：cell 30px + td padding 12px×2 + border 1px = 55px */
body .layui-table-view .layui-table td {
	padding: 12px 0;
}
/* §17.2 表头：上下 8px padding。单行 20+16+1=37 < 规范的 44px 下限，
   所以 th 直接给 44px——表格里 height 是「最小高度」语义，两行(40+16+1=57)会自然撑开。 */
body .layui-table-view .layui-table th {
	padding: 8px 0;
	height: var(--admin-table-header-min-height);
}
/* §17.5 数据 cell：min-height 而不是 height——内容单行时高度不变（仍是 30px inner，
   行 55px border-box），只有内容真的需要第二行时才撑高，不动现在正常显示的行。
   原来写死 height:30px 会把 50-70px 的内容裁掉（会员列表昵称/姓名/操作列 3/3 复现）。
   左右 padding 15px → 16px，收敛到 --admin-space-4。 */
body .layui-table-cell {
	height: auto;
	min-height: 30px;
	line-height: 30px;
	padding: 0 var(--admin-space-4);
}
/* §17.3 列最小宽度 + 横向滚动。
   下限对两种表都生效：layui 把列宽写成 `.laytable-cell-{i}{width:...}`，
   min-width 能压过 width，所以 JS 渲染表和静态表一样受这条约束
   （实测排序列 128px 在 Member / ShopOrder 这些 table.render 页上确实生效）。

   两者的区别只在**横滚放在哪一层**：
     - JS 渲染表：有 .layui-table-body 这层 overflow:auto 容器，横滚归它。
       之前不滚不是因为没有容器，是列宽被压进容器里没有可滚内容，
       上面的 min-width 让总宽真正超出后原生横滚就生效了。
     - 静态表：没有 .layui-table-body，超宽会被 .layui-table-box 的 hidden 直接裁掉，
       所以只给这一类补横滚（见下方 :not(:has(> .layui-table-body))）。
   注：一度以为 JS 表靠 colgroup 控宽、min-width 对它无副作用——实测所有表都没有
   colgroup，那个前提不成立。 */
body .layui-table-view .layui-table th,
body .layui-table-view .layui-table-cell {
	min-width: var(--admin-table-col-min);
}
/* 上面这条 96px 是**普通列**下限。§17.3 的排序列 128px 与操作列 144px 不在 CSS 里，
   由 table-layout.js 写到 .laytable-cell-{i} 上——那个类同时挂在 header / body /
   fixed 三个副本的 cell 上，改它三处一起变，所以加宽不会让 header 比 body 宽。
   （一度以为公共层做不到、只能走列配置层，那个判断是错的：.laytable-cell-{i} 不携带
   「哪列是排序列」的语义，但语义可以在 header 上判定一次再把宽度写回那个 i。） */
/* checkbox/序号/展开是固定窄列，§17.3 给的是 48/64px，不受 96px 下限约束。
   .laytable-cell-* 同时挂在 th 和 td 的 cell 上，所以两边一起排除，列宽才对得齐。 */
body .layui-table-view .layui-table th.layui-table-col-special,
body .layui-table-view .layui-table td.layui-table-col-special,
body .layui-table-view .layui-table th.laytable-cell-checkbox,
body .layui-table-view .layui-table th.laytable-cell-numbers,
body .layui-table-view .layui-table th.laytable-cell-radio,
body .layui-table-view .layui-table th.laytable-cell-space,
body .layui-table-view .laytable-cell-checkbox,
body .layui-table-view .laytable-cell-numbers,
body .layui-table-view .laytable-cell-radio,
body .layui-table-view .laytable-cell-space {
	min-width: 0;
}
/* 横滚（§17.3）分两种表处理：
   - JS 渲染表：.layui-table-body 本来就是 overflow:auto，之前不滚是因为列宽被压进
     容器、没有可滚内容；上面的 min-width 让总宽真正超出，原生横滚自然生效。
     再给 .layui-table-box 开一层会变成双滚动条（供货商页实测）。
   - 静态表：没有 .layui-table-body 这层滚动容器，总宽超出会被 box 的 hidden 直接裁掉，
     所以只给这一类补横滚。 */
body .layui-table-box:not(:has(> .layui-table-body)) {
	overflow-x: auto;
}

/* §17.2 表头：禁止固定 20px inner 高。标题按需换行、完整显示，同一 tr 由最高 cell
   统一撑高（单行 44px / 两行 57px border-box）。
   这里**不做 line-clamp**：§17.2 明确「禁止拿裁切代替列宽增长」，第三行要靠加宽列
   来消除，而不是隐藏掉——裁切会让标题看起来正常但实际丢字。 */
body .layui-table-view .layui-table th .layui-table-cell {
	height: auto;
	min-height: 20px;
	line-height: 20px;
	white-space: normal;
	word-break: break-word;
	overflow: visible;
}
/* 列宽测量态：由 table-layout.js 临时挂在 .layui-table-view 上。
   必须解除 min-width 并让 cell 收缩到 max-content——否则量到的 scrollWidth 至少
   等于当前 clientWidth，而 clientWidth 正是本脚本上一轮写进去的值，列宽只会涨不会缩
   （多按钮页把列撑到 392 后，筛到少按钮也退不回去）。 */
.jxc-measuring-w .layui-table-cell {
	min-width: 0 !important;
	width: max-content !important;
	max-width: none !important;
}

/* §17.5 Hcontent 的测量态：由 table-layout.js 临时挂在 .layui-table-view 上。
   把 inner 的 height/min-height/padding-block 归零，让 scrollHeight 反映**纯内容高度**，
   不被我们自己写的约束污染——测量对象不能受测量结果影响。 */
.jxc-measuring .layui-table-cell {
	height: auto !important;
	min-height: 0 !important;
	padding-block: 0 !important;
}

/* §17.5 多操作按钮单行：按钮换行会把整行撑高（会员列表实测 70px 操作区 → 行 94px），
   §17.5 的行高是内容驱动的，但按钮不算「内容变高」的正当理由。
   inline-flex + nowrap 让按钮排成一行，清掉旧的 5px 2px margin 改用 8px gap；
   列宽由 table-layout.js 按 Waction = max(144, Wheader, Wbuttons+32) 写到
   .laytable-cell-{i} 上，放不下时整表横滚，而不是折行抬高。 */
body .layui-table-view .layui-table td .layui-table-cell:has(> button),
body .layui-table-view .layui-table td .layui-table-cell:has(> .layui-btn),
body .layui-table-view .layui-table td .layui-table-cell:has(> a.table-btn),
/* 全站 117 处 templet 写成 `<div><button…>`，按钮外面还包了一层 div。
   `:has(> button)` 只看直接子元素，对这种结构不命中——包裹层必须一起接管，
   否则那批页面的按钮照样堆叠。 */
body .layui-table-view .layui-table td .layui-table-cell:has(> div > button),
body .layui-table-view .layui-table td .layui-table-cell:has(> div > .layui-btn),
body .layui-table-view .layui-table td .layui-table-cell:has(> div > a.table-btn),
body .layui-table-view .layui-table td .layui-table-cell > div:has(> button),
body .layui-table-view .layui-table td .layui-table-cell > div:has(> .layui-btn),
body .layui-table-view .layui-table td .layui-table-cell > div:has(> a.table-btn) {
	display: flex;
	flex-wrap: nowrap;
	align-items: center;
	gap: var(--admin-space-2);
	white-space: nowrap;
}
body .layui-table-view .layui-table td .layui-table-cell > button,
body .layui-table-view .layui-table td .layui-table-cell > .layui-btn,
body .layui-table-view .layui-table td .layui-table-cell > a.table-btn,
body .layui-table-view .layui-table td .layui-table-cell > div > button,
body .layui-table-view .layui-table td .layui-table-cell > div > .layui-btn,
body .layui-table-view .layui-table td .layui-table-cell > div > a.table-btn {
	margin: 0;
	flex: 0 0 auto;
}

/* §17.4 排序尾槽：图标脱出文本流固定在 cell 右侧，相对整个标题块垂直居中，
   不再跟着第二行末尾跑。槽 20px + 4px gap = 在原有 16px 右内距上再留 24px。 */
body .layui-table-view .layui-table th .layui-table-cell:has(.layui-table-sort) {
	position: relative;
	padding-right: calc(var(--admin-space-4) + 24px);
}
body .layui-table-view .layui-table th .layui-table-sort {
	position: absolute;
	right: var(--admin-space-4);
	top: 50%;
	transform: translateY(-50%);
	width: 20px;
	height: 20px;
	margin: 0;
}

/* ── Vera 第二轮：四项收口 ── */

/* 1. 商品工具栏按钮（命中源：shop_product/index.html 的 .layuiadmin-btn-list） */
body .layuiadmin-btn-list,
body .layui-btn.layuiadmin-btn-list,
body [class*="-search-panel"] .layui-btn,
body .search-panel .layui-btn,
body .toolbar-actions .layui-btn {
	height: 38px;
	line-height: 38px;
	padding: 0 16px;
	border-radius: var(--admin-radius-md);
}
/* xs 小按钮保持尺寸层级（Iris 认可的例外） */
body .layui-btn.layui-btn-xs,
body .layui-table .layui-btn-xs {
	height: 24px;
	line-height: 24px;
	padding: 0 10px;
}

/* 2. 财务筛选单行（命中源：.layui-form-search 里 form-item 各自成行） */
body .layui-form-search .layui-form-item {
	display: flex;
	flex-wrap: wrap;
	align-items: center;
	gap: 10px 12px;
	margin-bottom: 0;
}
body .layui-form-search .layui-form-item::after { display: none; }
body .layui-form-search .layui-inline { margin: 0; }
/* 主提交按钮不用 layui 信息蓝 */
body .layui-form-search .layui-btn-normal[lay-submit],
body .layui-card-body .layui-btn-normal[lay-submit] {
	background-color: var(--admin-primary);
}
body .layui-form-search .layui-btn-normal[lay-submit]:hover,
body .layui-card-body .layui-btn-normal[lay-submit]:hover {
	background-color: var(--admin-primary-hover);
}

/* 3. 营销按钮圆角（命中源：coupon/index.html:19 的 4px） */
body .toolbar-actions .layui-btn,
body .search-panel .layui-btn,
body .coupon-page .layui-btn { border-radius: var(--admin-radius-md); }

/* 商品页工具栏（命中源：.shop-product-actions.layui-option-but .layui-btn，特异性 0,3,0） */
body .shop-product-actions.layui-option-but .layui-btn,
body [class*="-actions"].layui-option-but .layui-btn {
	height: 38px;
	line-height: 38px;
	border-radius: var(--admin-radius-md);
}
body .shop-product-actions.layui-option-but .layui-btn.layui-btn-xs {
	height: 24px;
	line-height: 24px;
}
/* 会员页等的搜索提交按钮（layui-btn-normal 信息蓝 → 品牌绿） */
body .layui-card-body .layui-btn-normal[lay-submit],
body .layui-form .layui-btn-normal[lay-submit],
body [class*="-search"] .layui-btn-normal[lay-submit] {
	background-color: var(--admin-primary);
}

/* ── 收口补齐（Iris v4 裁决：控件 38px / 圆角 6px，卡片 10px）── */

/* 商品筛选区 34px（命中源：.shop-product-filter-actions .layuiadmin-btn-replys） */
body .shop-product-filter-actions .layui-btn,
body [class*="-filter-actions"] .layui-btn,
body .layuiadmin-btn-replys,
body .layui-btn.layuiadmin-btn-replys {
	height: 38px;
	line-height: 38px;
	border-radius: var(--admin-radius-md);
}

/* 圆角统一：输入/下拉/常规按钮 6px（小尺寸按钮只缩高度不换圆角） */
body .layui-btn,
body .layui-input,
body .layui-select,
body .layui-textarea,
body .layui-btn-sm,
body .layui-btn-xs,
body .layuiadmin-btn-list,
body .layuiadmin-btn-replys,
body [class*="-actions"] .layui-btn,
body [class*="-panel"] .layui-btn,
body .layui-table .layui-btn { border-radius: var(--admin-radius-md); }

/* 商品筛选最后一处（命中源 3 层：.shop-product-search-panel .shop-product-filter-actions .layui-btn） */
body .shop-product-search-panel .shop-product-filter-actions .layui-btn,
body [class*="-search-panel"] [class*="-filter-actions"] .layui-btn {
	height: 38px;
	line-height: 38px;
	border-radius: var(--admin-radius-md);
}

/* ==========================================================================
   P3 侧栏形态（@iris-3041 v3：只改形态不改宽度，200px 保持现状）
   图标已由模板输出 <i class="{$menu.icon}">，这里只调层级与状态。
   两个壳（backstage / web_system）共用本段。
   ========================================================================== */

/* 图标与文字的视觉层级：文字白为主，图标浅绿为辅 */
body .layui-side-menu .layui-nav .layui-nav-item > a > i,
body .layui-side-menu .layui-nav .layui-nav-item > a [class^="my-icon"],
body .layui-side-menu .layui-nav .layui-nav-item > a [class*=" my-icon"] {
	font-size: 17px;
	opacity: .78;
	transition: opacity .16s;
}
body .layui-side-menu .layui-nav .layui-nav-item > a > cite {
	font-size: 14px;
	letter-spacing: .2px;
}
/* hover：图标提亮 */
body .layui-side-menu .layui-nav .layui-nav-item > a:hover > i,
body .layui-side-menu .layui-nav .layui-nav-item > a:hover [class^="my-icon"] { opacity: 1; }

/* 选中态：整条底色 + 左侧指示条 + 图标全白 */
body .layui-side-menu .layui-nav .layui-this > a,
body .layui-side-menu .layui-nav .layui-nav-itemed > a {
	box-shadow: inset 3px 0 0 var(--admin-primary-light);
}
body .layui-side-menu .layui-nav .layui-this > a > i,
body .layui-side-menu .layui-nav .layui-this > a [class^="my-icon"] { opacity: 1; }

/* 二级菜单：缩进 + 弱化，跟一级拉开层级 */
body .layui-side-menu .layui-nav .layui-nav-child a {
	font-size: 13px;
	padding-left: 46px;
}
body .layui-side-menu .layui-nav .layui-nav-child a:hover {
	background-color: rgba(255, 255, 255, .06);
}

/* 分组间距：一级菜单之间留呼吸 */
body .layui-side-menu .layui-nav > .layui-nav-item { margin-bottom: 2px; }

/* WebSystem 壳的菜单文字统一为纯白（与 Backstage 一致） */
body .layui-side-menu .layui-nav .layui-nav-item > a,
body .layui-side-menu .layui-nav .layui-nav-item > a cite { color: #fff; }

/* 财务筛选单行：容器 1314px 但子项总宽 1376px，超 62px 导致动作组换行。
   压缩输入宽度让总和落回容器内（@vera-wltq 实测数据）。 */
/* 按需分配宽度（@vera-wltq canvas 实测：关键词需 178px、日期值需 74px）
   容器 1265px，按需总和 1125px，富余 140px —— 不必一刀切压窄 */
body .layui-form-search .layui-form-item .layui-inline .layui-input,
body .layui-form-search .layui-form-item .layui-inline .layui-input-inline {
	min-width: 0;
}
/* 关键词框：文字需 178 + padding */
body .layui-form-search .layui-form-item .layui-inline:nth-child(2) .layui-input,
body .layui-form-search .layui-form-item .layui-inline:nth-child(2) .layui-input-inline {
	width: 200px;
	max-width: 200px;
}
/* 下拉：placeholder 需约 70px，160 够用 */
body .layui-form-search .layui-form-item .layui-inline .layui-select,
body .layui-form-search .layui-form-item .layui-inline .layui-form-select {
	max-width: 170px;
}
/* 日期框：值 2026-09-02 需 74 + padding，给 100px 留余量 */
body .layui-form-search .layui-form-item .layui-inline input[id*="ate"],
body .layui-form-search .layui-form-item .layui-inline input[name*="ate"],
body .layui-form-search .layui-form-item .layui-inline input[placeholder*="日期"] {
	width: 100px;
	max-width: 100px;
}
/* 动作组不参与压缩，保证按钮完整 */
body .layui-form-search .layui-form-item .layui-inline:last-child {
	max-width: none;
	margin-left: auto;
}

/* 总宽已合规（1208 < 1269），残余 y 差是垂直对齐不是换行：
   带 label 的项比纯按钮组高，用 align-items 拉平。 */
body .layui-form-search .layui-form-item {
	align-items: flex-end;
	flex-wrap: nowrap;
}
body .layui-form-search .layui-form-item > .layui-inline {
	display: flex;
	align-items: center;
	flex: 0 1 auto;
	min-width: 0;
}

/* 财务筛选：输入框按需给足后仍超 58px，压 label 和内部间距（不动输入框可读性） */
body .layui-form-search .layui-form-item .layui-inline > .layui-form-label {
	width: auto;
	padding: 9px 8px 9px 0;
	white-space: nowrap;
}
body .layui-form-search .layui-form-item .layui-inline > .layui-input-inline {
	margin-right: 0;
}
body .layui-form-search .layui-form-item { gap: 8px; }
/* 日期区间的连字符压缩 */
body .layui-form-search .layui-form-item .layui-form-mid {
	padding: 0 4px;
	margin: 0;
}

/* ── 侧栏 hover / 选中 / 间距节奏（补完 03:38 那轮）──
   命中源：admin.css:223 `.layui-side-menu .layui-nav .layui-nav-item a:hover{background:none}`
   我原来只给图标加了 opacity，没覆盖底色，所以 hover 视觉上完全没反应。 */
body .layui-side-menu .layui-nav .layui-nav-item a:hover,
body .layui-side-menu .layui-nav .layui-nav-item > a:hover,
.jjp-admin-ui .layui-side-menu .layui-nav .layui-nav-item a:hover,
.jjp-admin-ui .layui-side-menu .layui-nav .layui-nav-item > a:hover {
	background-color: var(--admin-primary-hover);
	color: #fff;
}
/* 选中项 hover 时保持选中色，不被 hover 色盖掉 */
body .layui-side-menu .layui-nav .layui-this > a:hover,
body .layui-side-menu .layui-nav .layui-this a:hover {
	background-color: var(--admin-primary);
}
/* 二级菜单 hover */
body .layui-side-menu .layui-nav .layui-nav-child a:hover {
	background-color: var(--admin-primary-hover);
	color: #fff;
}

/* 间距节奏：菜单行高 42 → 44，与 38px 控件基线呼应；上下留白 */
body .layui-side-menu .layui-nav .layui-nav-item > a {
	height: 44px;
	line-height: 44px;
	transition: background-color .16s;
}
body .layui-side-menu .layui-nav { padding-top: 8px; }
body .layui-side-menu .layui-nav > .layui-nav-item { margin-bottom: 2px; }
