/* 模态框修复样式 - 解决库存管理模块模态框弹不出来的问题 */

/* 确保Ant Design模态框有足够高的z-index */
.ant-modal {
  z-index: 2000 !important;
}

.ant-modal-mask {
  z-index: 1999 !important;
}

/* 修复模态框可能被其他元素遮挡的问题 */
.ant-modal-wrap {
  z-index: 2000 !important;
}

/* 确保模态框在页面最顶层 */
.ant-modal-root {
  position: relative;
  z-index: 2000;
}

/* ====== 全局消息/通知层级提升（避免保存失败提示被弹窗遮挡）====== */
/* 本仓库里很多业务弹窗被提升到了 2000~2500；若不同步提升 message/notification，
   保存失败时顶部提示会落在遮罩后面，看起来像“没报错”。 */
.ant-message {
  z-index: 3200 !important;
}

.ant-message .ant-message-notice-wrapper {
  z-index: 3200 !important;
}

.ant-notification,
.ant-notification-notice-wrapper {
  z-index: 3200 !important;
}

/* ====== 工单详情弹窗层级提升（避免被设备详情弹窗覆盖）====== */
/* 使用 :has() 选择器提升包含工单详情弹窗的父容器 z-index */
.ant-modal-root:has(.workorder-detail-modal-wrap) {
  z-index: 2100 !important;
}

/* 组合工单详情弹窗：层级 2080（高于汇总报告 2050，低于单工单详情 2100）。
   场景1：汇总报告详情(2050)内点击「查看工单」打开组合工单详情，需高于汇总报告。
   场景2：设备详情→组合工单详情→单工单详情 逐级下钻时，单工单详情(2100)必须叠加在
   组合工单详情之上。两者原先同为 2100，因单工单详情弹窗无 destroy-on-close、DOM 位置
   固定在前，组合工单详情 destroy-on-close 后追加在后，等高 z-index 下 DOM 顺序导致
   单工单详情反被遮挡。故将组合工单详情降至 2080，确保单工单详情始终在其之上。
   参考《_UI工单详情弹窗层级问题修复.md》方案一。 */
.ant-modal-root:has(.workorder-group-detail-modal-wrap) {
  z-index: 2080 !important;
}
.workorder-group-detail-modal-wrap {
  z-index: 2080 !important;
}
.workorder-group-detail-modal-wrap .ant-modal {
  z-index: 2080 !important;
}

/* ====== 汇总报告-选择来源工单弹窗层级提升（避免被汇总报告编辑弹窗覆盖）======
   场景：新建汇总报告弹窗(2050)内点击「选择来源工单」按钮，来源工单选择弹窗需高于
   汇总报告编辑弹窗(2050)，低于工单详情弹窗(2100)。参考《_UI工单详情弹窗层级问题修复.md》方案一。 */
.ant-modal-root:has(.aggregate-source-select-modal-wrap) {
  z-index: 2070 !important;
}

.aggregate-source-select-modal-wrap {
  z-index: 2070 !important;
}

.aggregate-source-select-modal-wrap .ant-modal {
  z-index: 2070 !important;
}

/* 来源工单选择弹窗内的下拉框需高于弹窗层级 */
.aggregate-source-select-modal-wrap .ant-select-dropdown,
.aggregate-source-select-modal-wrap .ant-picker-dropdown {
  z-index: 2120 !important;
}
/* ====== 汇总报告详情弹窗层级提升（避免被报价单详情弹窗覆盖）======
   场景：报价单详情弹窗(默认 root z-index 2000) 内点击「关联汇总报告」穿透打开汇总报告详情。
   两个弹窗的 .ant-modal-root 默认 z-index 相同(2000)，且汇总报告弹窗在 DOM 中位于报价单弹窗之前，
   导致后打开的汇总报告反而被报价单遮挡。参考《_UI工单详情弹窗层级问题修复.md》方案一，
   用 :has() 提升汇总报告父容器层级至 2050（高于报价单 2000，低于工单详情 2100 / 附件预览 2200，
   保证从汇总报告内再打开工单/附件时仍能正常叠加在其上）。 */
.ant-modal-root:has(.aggregate-report-edit-modal-wrap) {
  z-index: 2050 !important;
}
.aggregate-report-edit-modal-wrap {
  z-index: 2050 !important;
}
.aggregate-report-edit-modal-wrap .ant-modal {
  z-index: 2050 !important;
}

/* ====== 设备编辑弹窗层级提升（避免被设备详情弹窗覆盖）======
   场景：设备详情弹窗(默认 root z-index 2000) 内点击子机构「编辑」打开设备编辑弹窗。
   两个弹窗的 .ant-modal-root 默认 z-index 相同(2000)，且设备编辑弹窗在 DOM 中位于
   设备详情弹窗之前，导致后打开的编辑弹窗反被详情弹窗遮挡。参考
   《_UI工单详情弹窗层级问题修复.md》方案一，用 :has() 提升编辑弹窗父容器层级至 2050
   （高于设备详情 2000，低于工单详情 2100，保证从编辑弹窗内再打开工单等高层弹窗时
   仍能正常叠加在其上）。 */
.ant-modal-root:has(.edit-equipment-modal-wrap) {
  z-index: 2050 !important;
}

.edit-equipment-modal-wrap {
  z-index: 2050 !important;
}

.edit-equipment-modal-wrap .ant-modal {
  z-index: 2050 !important;
}

/* ====== 确认对话框层级提升（确保显示在工单详情等高层级弹窗之上）====== */
/* 撤销审批确认框：专用层级，确保高于工单详情(2100)和附件预览(2200) */
.ant-modal-root:has(.approval-revoke-confirm-modal-wrap),
.ant-modal-root:has(.approval-revoke-confirm-modal) {
  z-index: 2300 !important;
}

.approval-revoke-confirm-modal-wrap {
  z-index: 2300 !important;
}

.approval-revoke-confirm-modal-wrap .ant-modal {
  z-index: 2300 !important;
}

/* Modal.confirm 生成的确认框父容器需要比工单详情(2100)更高 */
.ant-modal-root:has(.ant-modal-confirm) {
  z-index: 2200 !important;
}

/* ====== 点检计划生成工单确认框层级提升 ====== */
/* 使用专用 wrap class，避免在高层级弹窗上打开时被压到后面 */
/* 方案一：CSS :has() 选择器提升父容器层级 */
.ant-modal-root:has(.generate-workorder-confirm-wrap) {
  z-index: 2300 !important;
  position: relative !important;
}

/* 备选：通过 Modal.confirm 的 class 属性匹配（当 wrapClassName 不生效时） */
.ant-modal-root:has(.generate-workorder-confirm-modal) {
  z-index: 2300 !important;
  position: relative !important;
}

.generate-workorder-confirm-wrap {
  z-index: 2300 !important;
}

.generate-workorder-confirm-wrap .ant-modal {
  z-index: 2300 !important;
}

/* 生成工单确认框内的供应商下拉需高于确认框本体 */
.generate-workorder-confirm-wrap .ant-select-dropdown,
.generate-workorder-confirm-wrap .ant-picker-dropdown,
.generate-workorder-confirm-wrap .ant-popover {
  z-index: 2400 !important;
}

/* 兜底：当 Select 下拉被挂载到 body 时，仍保持在生成工单确认框之上 */
.generate-workorder-supplier-dropdown {
  z-index: 2400 !important;
}

/* ====== 按模板补齐弹窗内 Popconfirm 层级提升 ====== */
/* 全局规则把 .ant-modal-wrap 提到 2000，删除确认气泡需高于 2000 */
/* 方案一：通过 overlayClassName 直接定位浮层（无论挂载位置） */
.generate-components-delete-popconfirm {
  z-index: 2050 !important;
}

/* 方案二：后代选择器兆底（当 getPopupContainer 挂载到 wrap 内部时） */
.generate-components-modal-wrap .ant-popover,
.generate-components-modal-wrap .ant-popconfirm {
  z-index: 2050 !important;
}

/* v1941: 按模板补齐弹窗行区分：新增待补齐(绿) vs 已存在(灰) */
.generate-components-modal-wrap .gen-row-created td {
  background: #f6ffed !important;
  border-left: none;
}
.generate-components-modal-wrap .gen-row-created td:first-child {
  border-left: 3px solid #52c41a !important;
}
.generate-components-modal-wrap .gen-row-existing td {
  background: #fafafa !important;
}

/* ====== 跨租户派单弹窗层级提升（避免被工单详情弹窗覆盖）====== */
/* 使用 :has() 选择器提升包含派单弹窗的父容器 z-index */
.ant-modal-root:has(.cross-tenant-dispatch-modal-wrap) {
  z-index: 2150 !important;
}

.cross-tenant-dispatch-modal-wrap {
  z-index: 2150 !important;
}

.cross-tenant-dispatch-modal-wrap .ant-modal {
  z-index: 2150 !important;
}

/* ====== 工单日志/时间线弹窗层级提升（避免被工单详情弹窗覆盖）====== */
/* 使用 :has() 选择器提升包含日志弹窗的父容器 z-index */
.ant-modal-root:has(.workorder-logs-modal-wrap) {
  z-index: 2150 !important;
}

.workorder-logs-modal-wrap {
  z-index: 2150 !important;
}

.workorder-logs-modal-wrap .ant-modal {
  z-index: 2150 !important;
}

/* ====== 工单材料消耗弹窗层级提升（避免被工单详情弹窗覆盖）====== */
/* 使用 :has() 选择器提升包含材料弹窗的父容器 z-index */
.ant-modal-root:has(.workorder-materials-modal-wrap) {
  z-index: 2300 !important;
}

.workorder-materials-modal-wrap {
  z-index: 2300 !important;
}

.workorder-materials-modal-wrap .ant-modal {
  z-index: 2300 !important;
}

/* ====== 添加材料消耗弹窗层级提升（高于材料消耗弹窗）====== */

/* ====== 组合工单统一领料弹窗层级提升 ====== */
.ant-modal-root:has(.hierarchy-material-modal-wrap) {
  z-index: 1050 !important;
}

.hierarchy-material-modal-wrap .ant-modal {
  z-index: 1050 !important;
}

/* 统一领料弹窗内的 popconfirm/popover 需高于弹窗层级 */
.hierarchy-material-modal-wrap .ant-popover,
.hierarchy-material-modal-wrap .ant-popconfirm {
  z-index: 1060 !important;
}

/* 统一领料弹窗内的下拉框需高于弹窗层级 */
.hierarchy-material-modal-wrap .ant-select-dropdown,
.hierarchy-material-modal-wrap .ant-tree-select-dropdown {
  z-index: 1060 !important;
}

.hierarchy-material-modal-wrap .hierarchy-material-submit-row {
  display: flex;
  align-items: center;
  gap: 12px;
  flex-wrap: wrap;
}

.hierarchy-material-modal-wrap .hierarchy-material-submit-btn.ant-btn {
  min-width: 168px;
  height: 38px;
  font-weight: 600;
  box-shadow: 0 1px 2px rgba(16, 24, 40, 0.08);
}

.hierarchy-material-modal-wrap .hierarchy-material-submit-hint {
  flex: 1;
  min-width: 220px;
  font-size: 12px;
  line-height: 1.5;
  color: #667085;
}

.hierarchy-material-modal-wrap .hierarchy-material-submit-btn.ant-btn[disabled],
.hierarchy-material-modal-wrap .hierarchy-material-submit-btn.ant-btn.ant-btn-disabled,
.hierarchy-material-modal-wrap .hierarchy-material-submit-btn.ant-btn[disabled]:hover,
.hierarchy-material-modal-wrap .hierarchy-material-submit-btn.ant-btn.ant-btn-disabled:hover {
  background: #f8fafc !important;
  border-color: #cbd5e1 !important;
  color: #475467 !important;
  opacity: 1 !important;
  box-shadow: none !important;
}

/* ====== 组合工单批量费用弹窗层级提升 ====== */
.ant-modal-root:has(.hierarchy-cost-modal-wrap) {
  z-index: 1050 !important;
}

.hierarchy-cost-modal-wrap .ant-modal {
  z-index: 1050 !important;
}

.hierarchy-cost-modal-wrap .ant-popover,
.hierarchy-cost-modal-wrap .ant-popconfirm {
  z-index: 1060 !important;
}

.hierarchy-cost-modal-wrap .ant-select-dropdown,
.hierarchy-cost-modal-wrap .ant-picker-dropdown {
  z-index: 1060 !important;
}

.ant-modal-root:has(.add-material-modal-wrap) {
  z-index: 2400 !important;
}

.add-material-modal-wrap {
  z-index: 2400 !important;
}

.add-material-modal-wrap .ant-modal {
  z-index: 2400 !important;
}

/* 添加材料弹窗内部弹出层（Select 下拉 / TreeSelect 下拉）需高于弹窗本身 */
.add-material-modal-wrap .ant-select-dropdown,
.add-material-modal-wrap .ant-tree-select-dropdown {
  z-index: 2500 !important;
}

/* ====== 关闭工单弹窗层级提升（避免被工单详情弹窗覆盖）====== */
.ant-modal-root:has(.close-workorder-modal-wrap) {
  z-index: 2200 !important;
}

.close-workorder-modal-wrap {
  z-index: 2200 !important;
}

.close-workorder-modal-wrap .ant-modal {
  z-index: 2200 !important;
}

/* 关闭工单弹窗内的下拉框需高于弹窗层级 */
.close-workorder-modal-wrap .ant-select-dropdown {
  z-index: 2300 !important;
}

/* ====== 工单费用弹窗层级提升（避免被工单详情弹窗覆盖）====== */
.ant-modal-root:has(.workorder-cost-modal-wrap) {
  z-index: 2300 !important;
}

.workorder-cost-modal-wrap {
  z-index: 2300 !important;
}

.workorder-cost-modal-wrap .ant-modal {
  z-index: 2300 !important;
}

/* 费用弹窗内部弹出层（Select 下拉 / DatePicker / Popconfirm）需高于 .ant-modal 的 2300 */
.workorder-cost-modal-wrap .ant-select-dropdown,
.workorder-cost-modal-wrap .ant-picker-dropdown,
.workorder-cost-modal-wrap .ant-popover,
.workorder-cost-modal-wrap .ant-popconfirm {
  z-index: 2400 !important;
}

/* ====== 费用明细编辑弹窗层级提升（高于费用弹窗）====== */
.ant-modal-root:has(.workorder-cost-item-modal-wrap) {
  z-index: 2400 !important;
}

.workorder-cost-item-modal-wrap {
  z-index: 2400 !important;
}

.workorder-cost-item-modal-wrap .ant-modal {
  z-index: 2400 !important;
}

/* 费用明细弹窗日期下拉层级兜底 */
.workorder-cost-item-date-dropdown {
  z-index: 2450 !important;
}

/* 费用明细弹窗内下拉层级修复（DatePicker/Select） */
.ant-modal-root:has(.workorder-cost-item-modal-wrap) .ant-picker-dropdown,
.ant-modal-root:has(.workorder-cost-item-modal-wrap) .ant-select-dropdown,
.workorder-cost-item-modal-wrap .ant-picker-dropdown,
.workorder-cost-item-modal-wrap .ant-select-dropdown {
  z-index: 2450 !important;
}

/* 工时费率档案维护弹窗层级 */
.ant-modal-root:has(.labor-rate-management-modal-wrap) {
  z-index: 2100 !important;
}

.labor-rate-management-modal-wrap {
  z-index: 2100 !important;
}

.labor-rate-management-modal-wrap .ant-modal {
  z-index: 2100 !important;
}

/* 工时费率弹窗日期下拉层级修复（避免显示在弹窗后面） */
.labor-rate-management-date-dropdown {
  z-index: 2150 !important;
}

.ant-modal-root:has(.labor-rate-management-modal-wrap) .ant-picker-dropdown,
.labor-rate-management-modal-wrap .ant-picker-dropdown {
  z-index: 2150 !important;
}

/* ====== SOP查看弹窗层级提升（避免被工单详情弹窗覆盖）====== */
.ant-modal-root:has(.sop-viewer-modal-wrap) {
  z-index: 2150 !important;
}

.sop-viewer-modal-wrap {
  z-index: 2150 !important;
}

.sop-viewer-modal-wrap .ant-modal {
  z-index: 2150 !important;
}

/* ====== SOP 内嵌 PDF 预览弹窗层级提升（高于 SOP 查看弹窗）====== */
.ant-modal-root:has(.sop-pdf-preview-modal-wrap) {
  z-index: 2200 !important;
}

.sop-pdf-preview-modal-wrap {
  z-index: 2200 !important;
}

.sop-pdf-preview-modal-wrap .ant-modal {
  z-index: 2200 !important;
}

/* 派单给代理店：目标租户下拉层级修复 */
/* 确保下拉菜单显示在弹窗之上，使用更高的 z-index */
.cross-tenant-dispatch-tenant-dropdown {
  z-index: 2200 !important;
}

/* 备用选择器：确保 Ant Design Select 下拉层级正确 */
.ant-select-dropdown.cross-tenant-dispatch-tenant-dropdown {
  z-index: 2200 !important;
}

/* 派单弹窗：下拉框宽度修复 - 响应式适配 */
/* 确保下拉菜单不会超出弹窗边界 */
.cross-tenant-dispatch-tenant-dropdown {
  max-width: calc(100vw - 80px) !important;  /* 留出两侧边距 */
  min-width: 200px !important;
}

/* 在弹窗内的下拉框，宽度与触发器一致 */
.cross-tenant-dispatch-modal-wrap .ant-select-dropdown {
  max-width: 100% !important;
  width: auto !important;
}

/* 下拉选项文字过长时省略显示 */
.cross-tenant-dispatch-tenant-dropdown .ant-select-item-option-content {
  overflow: hidden;
  text-overflow: ellipsis;
  white-space: nowrap;
}

/* 弹窗内下拉兜底（挂载到 modal wrap 时） */
.cross-tenant-dispatch-modal-wrap .ant-select-dropdown {
  z-index: 2200 !important;
}

/* ====== 附件预览弹窗层级提升（避免被工单详情弹窗覆盖）====== */
/* 使用 :has() 选择器提升包含附件预览弹窗的父容器 z-index */
.ant-modal-root:has(.attachment-preview-modal-wrap) {
  z-index: 2200 !important;
}

.attachment-preview-modal-wrap {
  z-index: 2200 !important;
}

.attachment-preview-modal-wrap .ant-modal {
  z-index: 2200 !important;
}

.workorder-detail-modal-wrap {
  z-index: 2100 !important;
}

.workorder-detail-modal-wrap .ant-modal {
  z-index: 2100 !important;
}

.workorder-detail-modal-mask {
  z-index: 2099 !important;
}

/* 修复可能存在的遮挡元素 */
.fixed-modal-container {
  position: fixed;
  top: 0;
  left: 0;
  width: 100%;
  height: 100%;
  z-index: 2000;
  pointer-events: none;
}

.fixed-modal-container > * {
  pointer-events: auto;
}

/* 紧急修复模态框样式 */
.emergency-modal {
  position: fixed;
  top: 50%;
  left: 50%;
  transform: translate(-50%, -50%);
  background: white;
  border-radius: 8px;
  box-shadow: 0 6px 16px 0 rgba(0, 0, 0, 0.08), 0 3px 6px -4px rgba(0, 0, 0, 0.12);
  z-index: 9999;
  min-width: 400px;
  max-width: 80vw;
  max-height: 80vh;
  overflow: auto;
}

.emergency-modal-mask {
  position: fixed;
  top: 0;
  left: 0;
  width: 100vw;
  height: 100vh;
  background: rgba(0, 0, 0, 0.45);
  z-index: 9998;
}

.emergency-modal-header {
  padding: 16px 24px;
  border-bottom: 1px solid #f0f0f0;
  display: flex;
  justify-content: space-between;
  align-items: center;
}

.emergency-modal-title {
  margin: 0;
  font-size: 16px;
  font-weight: 500;
  color: rgba(0, 0, 0, 0.85);
}

.emergency-modal-close {
  background: none;
  border: none;
  font-size: 18px;
  cursor: pointer;
  color: rgba(0, 0, 0, 0.45);
}

.emergency-modal-close:hover {
  color: rgba(0, 0, 0, 0.75);
}

.emergency-modal-body {
  padding: 24px;
}

.emergency-modal-footer {
  padding: 16px 24px;
  border-top: 1px solid #f0f0f0;
  display: flex;
  justify-content: flex-end;
  gap: 8px;
}

/* 表单样式 */
.emergency-form-group {
  margin-bottom: 16px;
}

.emergency-form-label {
  display: block;
  margin-bottom: 4px;
  font-weight: 500;
  color: rgba(0, 0, 0, 0.85);
}

.emergency-form-input {
  width: 100%;
  padding: 8px 12px;
  border: 1px solid #d9d9d9;
  border-radius: 4px;
  font-size: 14px;
}

.emergency-form-input:focus {
  outline: none;
  border-color: #1890ff;
  box-shadow: 0 0 0 2px rgba(24, 144, 255, 0.2);
}

.emergency-form-select {
  width: 100%;
  padding: 8px 12px;
  border: 1px solid #d9d9d9;
  border-radius: 4px;
  font-size: 14px;
  background: white;
}

.emergency-form-textarea {
  width: 100%;
  padding: 8px 12px;
  border: 1px solid #d9d9d9;
  border-radius: 4px;
  font-size: 14px;
  resize: vertical;
  min-height: 80px;
}

/* 按钮样式 */
.emergency-btn {
  padding: 8px 16px;
  border: 1px solid #d9d9d9;
  border-radius: 4px;
  font-size: 14px;
  cursor: pointer;
  transition: all 0.3s;
}

.emergency-btn-primary {
  background: #1890ff;
  color: white;
  border-color: #1890ff;
}

.emergency-btn-primary:hover {
  background: #40a9ff;
  border-color: #40a9ff;
}

.emergency-btn-default {
  background: white;
  color: rgba(0, 0, 0, 0.85);
}

.emergency-btn-default:hover {
  color: #1890ff;
  border-color: #1890ff;
}

/* 调试模式样式 */
.debug-modal-info {
  position: fixed;
  top: 10px;
  right: 10px;
  background: rgba(0, 0, 0, 0.8);
  color: white;
  padding: 12px;
  border-radius: 4px;
  font-size: 12px;
  z-index: 10000;
  max-width: 300px;
}

.debug-modal-info h4 {
  margin: 0 0 8px 0;
  color: #ffc53d;
}

.debug-modal-info ul {
  margin: 0;
  padding-left: 16px;
}

/* 强制显示工具 */
.force-modal-toggle {
  position: fixed;
  bottom: 20px;
  right: 20px;
  padding: 8px 16px;
  background: #fa541c;
  color: white;
  border: none;
  border-radius: 4px;
  cursor: pointer;
  z-index: 10000;
  font-size: 12px;
}

.force-modal-toggle:hover {
  background: #ff7a45;
}

/* 响应式调整 */
@media (max-width: 768px) {
  .emergency-modal {
    width: 90vw;
    min-width: unset;
  }
  
  .emergency-modal-body {
    padding: 16px;
  }
  
  .emergency-modal-footer {
    padding: 12px 16px;
  }
}

/* ====== 盘点创建弹窗日期选择器层级修复 ====== */
.ant-modal-root:has(.inventory-create-modal-wrap) {
  z-index: 1050 !important;
}

/*
 * 盘点弹窗 DatePicker：
 * 弹层挂到 .ant-modal-wrap（未 zoom），再用 transform scale 做视觉缩放，避免 zoom 影响定位计算。
 */
.ant-modal-wrap .acube-inventory-picker-dropdown {
  z-index: 2600 !important;
  zoom: 1 !important;
  transform: scale(var(--dynamic-zoom, 0.85)) !important;
  transform-origin: top left !important;
}

/* 动画效果 */
@keyframes modalFadeIn {
  from {
    opacity: 0;
    transform: translate(-50%, -60%);
  }
  to {
    opacity: 1;
    transform: translate(-50%, -50%);
  }
}

.emergency-modal {
  animation: modalFadeIn 0.3s ease-out;
}

.emergency-modal-mask {
  animation: modalFadeIn 0.3s ease-out;
}

/* 高优先级覆盖 */
body .ant-modal {
  z-index: 2000 !important;
}

body .ant-modal-mask {
  z-index: 1999 !important;
}

body .ant-modal-wrap {
  z-index: 2000 !important;
}

/* 工单详情弹窗层级提升（需覆盖 body 级别统一规则） */
body .ant-modal-wrap.workorder-detail-modal-wrap {
  z-index: 2100 !important;
}

/* ====== 确认对话框 wrap 层级提升（覆盖 body .ant-modal-wrap 的 2000）====== */
/* 撤销审批确认框 wrap */
body .ant-modal-wrap.approval-revoke-confirm-modal-wrap {
  z-index: 2300 !important;
}

/* 所有 Modal.confirm 确认框 wrap（通用兜底） */
body .ant-modal-wrap:has(.ant-modal-confirm) {
  z-index: 2300 !important;
}

/* 确认框内 modal 本体 */
body .ant-modal-wrap:has(.ant-modal-confirm) .ant-modal {
  z-index: 2300 !important;
}

/* 单工单分配负责人确认框内 Select 下拉，需高于 Modal.confirm 本体 */
body .ant-modal-wrap:has(.ant-modal-confirm) .single-workorder-assign-assignee-dropdown,
body .single-workorder-assign-assignee-dropdown {
  z-index: 2400 !important;
}

/* 批量分派工单确认框内负责人 Select 下拉，需高于 Modal.confirm 父容器(2200)
   根因：compatibility-fixes.css 的全局 .ant-select-dropdown { z-index: 2100 !important }
   会覆盖内联 dropdownStyle zIndex，导致下拉落到确认框(2200)后面。
   参照《_UI工单详情弹窗层级问题修复.md》及上方单工单分配专用 class 方案。 */
body .ant-modal-wrap:has(.ant-modal-confirm) .batch-assign-workorder-assignee-dropdown,
body .batch-assign-workorder-assignee-dropdown {
  z-index: 2400 !important;
}

/* 确认框遮罩层 */
body .ant-modal-root:has(.ant-modal-confirm) > .ant-modal-mask {
  z-index: 2299 !important;
}

body .workorder-detail-modal-wrap .ant-modal {
  z-index: 2100 !important;
}

/* 工单费用弹窗层级提升（需覆盖 body 级别统一规则） */
body .ant-modal-wrap.workorder-cost-modal-wrap {
  z-index: 2300 !important;
}

body .workorder-cost-modal-wrap .ant-modal {
  z-index: 2300 !important;
}

/* 费用明细编辑弹窗层级提升（高于费用弹窗） */
body .ant-modal-wrap.workorder-cost-item-modal-wrap {
  z-index: 2400 !important;
}

body .workorder-cost-item-modal-wrap .ant-modal {
  z-index: 2400 !important;
}

body .workorder-detail-modal-mask {
  z-index: 2099 !important;
}

/* 防止其他元素遮挡（避免影响 AntD 弹窗） */
/* 仅限制在主内容区域内重置普通元素的 z-index，排除 AntD Modal 相关节点 */
/* 注意：绑定矩阵表格的 sticky 列需要 z-index 来保持层叠正确，通过下面的规则覆盖 */
.main-content *[style*="z-index"]:not(.ant-modal):not(.ant-modal-mask):not(.ant-modal-wrap):not(.ant-modal-root):not(.fixed-column) {
  z-index: auto !important;
}

/* 绑定矩阵表格的固定列需要保留 z-index 以确保滚动时的层叠正确 */
.binding-matrix-table .fixed-column {
  z-index: 20 !important;
}

.binding-matrix-table th.fixed-column {
  z-index: 30 !important;
}

/* 特定修复：库存管理模块 */
.inventory-modal-fix {
  position: relative;
  z-index: 2001 !important;
}

/* 确保模态框容器在最前面 */
.ant-modal-root {
  position: relative;
  z-index: 2000;
}

/* 调试边框（开发时使用）*/
.debug-border {
  border: 2px solid #ff4d4f !important;
}

.debug-border-green {
  border: 2px solid #52c41a !important;
}

.debug-border-blue {
  border: 2px solid #1890ff !important;
}

/* ====== 汇总报告编辑弹窗：内部 a-select / a-date-picker 下拉 popup 层级提升 ====== */
/* 问题：.ant-modal* 全局被提升到 z-index 2000，但 a-select / a-date-picker 默认 popup 仅 1050，
   点击弹窗内下拉后 popup 被弹窗本体遮住，表现为字段看似退化为“不能弹”的输入框。
   参考《_UI工单详情弹窗层级问题修复.md》方案：给 popup 加专用 className，提升其 z-index 高于弹窗。 */
.aggregate-report-form-dropdown,
.ant-select-dropdown.aggregate-report-form-dropdown,
.ant-picker-dropdown.aggregate-report-form-dropdown {
  z-index: 2100 !important;
}

/* 傅底：弹窗内部任何 popup（下拉 / 日期 / popover）均升到 弹窗之上 */
.aggregate-report-edit-modal-wrap .ant-select-dropdown,
.aggregate-report-edit-modal-wrap .ant-picker-dropdown,
.aggregate-report-edit-modal-wrap .ant-popover {
  z-index: 2100 !important;
}

/* ====== 汇总报告编辑弹窗内「导出」Dropdown overlay 层级提升 ======
   问题：a-dropdown overlay 默认挂到 body，z-index 1050，被弹窗（.ant-modal-* 已被全局提升至 2000+）遮住。
   首选根治方案是 :get-popup-container 把 overlay 挂回弹窗 wrap 内部（已在 index.html 配置）；
   此处再加一道兜底：当 overlay 因 Antd 版本/降级 fallback 挂到 body 时，使用 :has() 选择器
   提升其父容器 .ant-modal-root 的 z-index，参考《_UI工单详情弹窗层级问题修复.md》方案一。 */
.aggregate-report-export-dropdown,
.ant-dropdown.aggregate-report-export-dropdown {
  z-index: 2100 !important;
}
.ant-modal-root:has(.aggregate-report-export-dropdown) {
  z-index: 2100 !important;
}

/* ====== 图片全屏预览（a-image preview）层级提升 ======
   问题：a-image 默认预览容器 .ant-image-preview-root 与业务弹窗同处 z-index 2000+ 层叠上下文，
   子元素设置的 z-index 无法跨越其父容器限制，导致汇总报告等弹窗内点击附件缩略图
   后，全屏预览被弹窗本体遮挡。
   参考《_UI工单详情弹窗层级问题修复.md》：需提升父容器本身的 z-index（不能仅靠子元素）。
   图片预览是全局最高层交互，提升到 3000，低于 emergency-modal(9999) 以避免遮挡紧急提示。 */
.ant-image-preview-root,
body .ant-image-preview-root {
  position: relative;
  z-index: 3000 !important;
}

.ant-image-preview-mask,
body .ant-image-preview-mask {
  z-index: 3000 !important;
}

.ant-image-preview-wrap,
body .ant-image-preview-wrap {
  z-index: 3001 !important;
}

.ant-image-preview-operations,
body .ant-image-preview-operations {
  z-index: 3002 !important;
}

/* ====== 汇总报告附件删除确认气泡（a-popconfirm）层级提升 ======
   问题：a-popconfirm 默认挂到 body，其 .ant-popover 默认 z-index 1060；
   而汇总报告编辑弹窗 .ant-modal-* 全局被提升到 2000+，导致删除确认气泡被弹窗遮挡，
   只能露出按钮的一角。
   解决：通过 overlay-class-name="aggregate-report-attachment-popconfirm" 给气泡加专用类，
   提升其 z-index 高于弹窗本体。 */
.aggregate-report-attachment-popconfirm,
.ant-popover.aggregate-report-attachment-popconfirm {
  z-index: 2150 !important;
}

/* 来源工单选择：已被其他报告引用的行整体灰化，明确不可选
   - 降低不透明度 + 灰色文字 + 浅灰背景，禁用鼠标指针为 not-allowed
   - 复选框已通过 getCheckboxProps disabled 禁用，这里做视觉强化 */
.aggregate-report-edit-modal-wrap .aggregate-source-row-referenced > td,
tr.aggregate-source-row-referenced > td {
  background-color: #fafafa !important;
  color: #bfbfbf !important;
  cursor: not-allowed !important;
}
.aggregate-report-edit-modal-wrap .aggregate-source-row-referenced:hover > td,
tr.aggregate-source-row-referenced:hover > td {
  background-color: #f5f5f5 !important;
}
tr.aggregate-source-row-referenced a {
  color: #bfbfbf !important;
  pointer-events: none;
}

/* ====== PDF文档管理-修改部门弹窗层级修复 ======
   问题：弹窗内 TreeSelect 下拉框被弹窗本体遮挡（父容器 .ant-modal-root z-index 仅 2000，
   而 TreeSelect 下拉默认挂到 body 时 z-index 1050，低于弹窗）。
   参考《_UI工单详情弹窗层级问题修复.md》方案一：用 :has() 提升父容器层级 + 专用 dropdown class。 */
.ant-modal-root:has(.pdf-dept-edit-modal-wrap) {
  z-index: 2100 !important;
}

.pdf-dept-edit-modal-wrap {
  z-index: 2100 !important;
}

.pdf-dept-edit-modal-wrap .ant-modal {
  z-index: 2100 !important;
}

/* 修改部门弹窗内 TreeSelect 下拉层级高于弹窗本身 */
.pdf-dept-edit-dropdown,
.ant-select-dropdown.pdf-dept-edit-dropdown,
.ant-tree-select-dropdown.pdf-dept-edit-dropdown {
  z-index: 2200 !important;
}

/* 来源工单选择：装备工单分组行（组合点检父行）视觉强化
   - 浅蓝背景 + 加粗，区别于普通子工单行 */
.aggregate-report-edit-modal-wrap .aggregate-source-row-group > td,
tr.aggregate-source-row-group > td {
  background-color: #f0f6ff !important;
  font-weight: 600;
}
.aggregate-report-edit-modal-wrap .aggregate-source-row-group:hover > td,
tr.aggregate-source-row-group:hover > td {
  background-color: #e6f0ff !important;
}

