/* ============================================================================
   批次39 需求⑤: 「卡密管理」浮层(以及它在弹窗里开出来的子弹窗)的样式。
   前缀统一 b39m- , 只加类、绝不改 style.css 里的通用类(.mask / .modal 等) ——
   那几行是全站共用的, 动一下就是全站弹窗一起变。
   参考先例: style.css 里批次34 的 .mask.b34v-list-mask / .b34v-list-modal(2506-2507),
   同一个套路: **只盖右侧内容区**。
   ---------------------------------------------------------------------------
   ★ 为什么 left 是 236px: 左侧导航栏是固定宽度的 236px(见 style.css 的 .sidebar),
     在这上面盖遮罩会把左侧菜单也糊住 —— 用户要的是"就地看卡密", 不是"整个后台被模态"。
     ⚠ 这个 236px 与 JS 里给的宽度上限(calc(100vw - 236px - 32px))必须**同源**:
       改一处就要改两处, 否则弹窗会横向溢出(右边缘被切掉或顶着屏幕边)。
   ============================================================================ */

/* ---- 外层: 只铺右侧内容区, 居中放弹窗 ---- */
.mask.b39m-mask {
  left: 236px;              /* 只让开侧边栏(inset:0 的 right/bottom 保持, 见 style.css .mask) */
  z-index: 120;             /* 高于页内内容(.mask 基数是 100), 低于子弹窗(150) */
  padding: 16px;            /* 与 .b34v-list-mask 同口径, 让弹窗与内容区留出同样的边距 */
}

/* ---- 外层弹窗: 宽度吃掉整个右侧内容区, 高度固定 88vh(表格才稳, 不会随内容忽高忽低) ----
   ⚠ 选择器必须带 .mask.b39m-mask 前缀(特异性 0,4,0): 弹窗元素上还挂着全站通用的
     `modal wide`, 而 style.css 里 `.modal.wide{max-width:1020px}` 是 0,2,0 ——
     只写 `.b39m-modal`(0,1,0) 会被它盖掉, 实测弹窗只有 1020px、内容区右侧白白空一大块。
     加前缀后本批的宽度口径才真正生效, 且**不改** style.css 那条通用规则(22 个弹窗共用)。 */
.mask.b39m-mask .modal.b39m-modal {
  width: 100%;
  max-width: calc(100vw - 236px - 32px);   /* = 内容区宽(100vw-236) - 左右各 16 的 padding */
  height: 88vh;
  max-height: 88vh;
}
/* 正文是「卡密管理」整页, 自己撑满剩余高度并**内部滚动** —— 弹窗的标题条/关闭按钮永远可见 */
.b39m-modal > .body.b39m-body {
  min-height: 0;            /* flex 子项默认 min-height:auto 会把滚动条顶出去, 必须显式压成 0 */
  padding: 14px 16px;       /* 比通用 .modal > .body 略窄: 这里塞的是一整页, 留白少一点更宽松 */
}
.b39m-modal > header h3 {
  overflow: hidden; text-overflow: ellipsis; white-space: nowrap;   /* 分类名很长时不撑破标题条 */
}

/* ---- 子弹窗(在卡密管理浮层里开出来的: 新增 / 批量生成 / 使用统计 …) ----
   与 app.js 的 confirmBox 同一个思路: **叠一层**, 不动 #modalHost 里已有的层。
   JS 侧由 openCardMgmtModal 临时顶替 window.modal 负责"只摘自己那一层", 这里只管长相。 */
.mask.b39m-submask {
  left: 236px;              /* 子弹窗同样只盖内容区 */
  z-index: 150;             /* 与 confirmBox 同层(150): 它必须压在卡密管理浮层的 120 之上 */
  padding: 16px;
}
.mask.b39m-submask > .modal {
  max-width: calc(100vw - 236px - 32px);   /* 与外层同口径: 子弹窗绝不许横向溢出内容区 */
  max-height: 88vh;                        /* 高内容(使用统计/批量结果)靠 .modal > .body 自己滚 */
}

/* ---- 窄屏兜底: 侧边栏本身会被折起来的布局下, 遮罩不能再让开 236px ---- */
@media (max-width: 900px) {
  .mask.b39m-mask, .mask.b39m-submask { left: 0; }
  .b39m-modal, .mask.b39m-submask > .modal { max-width: calc(100vw - 32px); }
}
