/* preroll-ad.css — 连播前贴片视频广告（sq_ad 广告位 15）的展示层样式。
 *
 * 配套 web/static/web/js/modules/preroll-ad.js：用户连续进入下一个视频满 N 次后，
 * 在进入下一个视频之前铺一层广告在播放器上，播完自动放行。DOM 由那个模块动态建，
 * 不进模板 —— 它只在少数时刻出现，常驻模板里等于给每次渲染白背一段死 DOM。
 *
 * 【为什么单独一个文件、不写进 common.css】common.css 与 hg.css 是前端出包产物，
 * 改了下次出包会被整份覆盖（两个 layout 的注释都反复强调过）。本文件由
 * layouts/cyber-video.tpl 与 layouts/hg-play.tpl 各引一条 <link>。
 *
 * 【挂载位置】广告层是**播放器挂载点 #cyberPlayer 的兄弟节点**，挂在它的父容器上：
 *   桌面 .hg-web-play__viewport[data-web-play-viewport]、H5 .hg-play__media。
 * 两者都是 position:relative 且尺寸恰好等于播放画面区，所以 inset:0 天然铺满播放器。
 * 不能挂进 #cyberPlayer 内部：xgplayer 换源时会清空自己的容器，塞在里面会被一起清掉。
 */

/* z-index 30：要压过 H5 的中心播放钮(z-index 3)、水印与底部控制条，
   同时留出 30 以上给全站弹层/抽屉，避免广告盖住登录框这类真正的模态。 */
.hg-preroll {
  position: absolute;
  inset: 0;
  z-index: 30;
  display: block;
  overflow: hidden;
  background: #000;
}

/* 加载态：DOM 已经就位但还没起播，此时必须完全不可见、也不可点 ——
 * 用户看到的应该是正片继续放着，而不是一层等素材的黑屏。
 * 起播（video 的 playing 事件）后由 JS 摘掉本类，广告才真正露面。
 *
 * 用 opacity 而不是 display:none / visibility:hidden：后两者会让元素脱离渲染，
 * 部分浏览器（尤其 iOS Safari）对不渲染的 <video> 会拒绝解码甚至不触发 playing，
 * 那样一来「等起播再显示」这条链子就自己把自己锁死了。 */
.hg-preroll.is-loading {
  opacity: 0;
  pointer-events: none;
}

/* 整块画面可点（落地址存在时才由 JS 渲染这层 <a>）。 */
.hg-preroll__link {
  position: absolute;
  inset: 0;
  display: block;
  cursor: pointer;
}

/* contain 而非 cover：广告素材尺寸不受控，cover 会把广告主的文案/logo 裁掉边角，
   contain 最多两侧留黑，与播放器对片源的处理口径一致（见两个 layout 的 #cyberPlayer 注释）。 */
.hg-preroll__video {
  display: block;
  width: 100%;
  height: 100%;
  object-fit: contain;
  background: #000;
}

/* 「广告」标识：法定要求，与首页轮播广告屏同一条口径，不做成可配置项。
   放左下角避开右上角的倒计时；pointer-events:none 让它不吃掉画面的点击热区。 */
.hg-preroll__badge {
  position: absolute;
  left: 8px;
  bottom: 8px;
  z-index: 2;
  padding: 1px 6px;
  border-radius: 3px;
  background: rgba(0, 0, 0, .5);
  color: rgba(255, 255, 255, .75);
  font-size: 11px;
  line-height: 1.6;
  pointer-events: none;
  user-select: none;
}

/* 右上角倒计时胶囊。观感对齐既有的 .hg-play__watermark-text（半透明黑底 + 白字）。
   pointer-events:none 是关键：它压在画面上，吃掉点击就等于在广告中间挖了个死区。
   tabular-nums 让 10→9 位数变化时宽度不跳。 */
.hg-preroll__timer {
  position: absolute;
  top: 10px;
  right: 12px;
  z-index: 2;
  min-width: 34px;
  padding: 2px 8px;
  border-radius: 999px;
  background: rgba(0, 0, 0, .55);
  color: #fff;
  font-size: 12px;
  line-height: 1.8;
  text-align: center;
  font-variant-numeric: tabular-nums;
  pointer-events: none;
  user-select: none;
}

.hg-preroll__sec {
  font-weight: 600;
}

/* 广告在场时屏蔽误触：容器内除广告层外的一切（播放器本体、H5 中心播放钮、
 * 底部进度条与选集条）在这几秒内都不接收指针事件。
 *
 * 为什么必须有这一条：广告层只盖住播放画面区，而 H5 的 .hg-play__bottom 与
 * .hg-play__center-btn 都是 .hg-play__media 的子节点、就压在同一块区域上。
 * 不屏蔽的话用户想点广告，很可能点到底下的播放/暂停或进度条 ——
 * 表现成「广告能点，但点了是暂停视频」，且点击也不会计进广告点击数。
 */
.has-preroll > *:not(.hg-preroll) {
  pointer-events: none;
}

/* ── 广告在场：把画面让干净（H5 沉浸式版式）────────────────────────────────
 *
 * 上面那条 .has-preroll 只管得到广告层的**兄弟节点**，也就是 .hg-play__media 内部
 * 那几件（中心播放钮、底部控制条、水印）。但 H5 版式里右侧互动栏 .hg-play__side、
 * PC 上下切换柱 .hg-play__switch、清屏钮 .hg-play__clear 挂的是更外层的
 * .hg-play__stage —— 它们既不在广告层的盒子里、z-index 也不受它压制，
 * 于是广告播着，点赞/评论/分享/倍速仍浮在旁边（2026-08-25 反馈的第 2 条）。
 * 那几个按钮此刻点下去操作的还是被盖住的正片，是纯粹的误导。
 *
 * 所以补一个**页面级**开关：preroll-ad.js 在 reveal 时给 <html> 打 is-preroll-on，
 * finish 时摘掉。选择器写在 html 上而不是继续叠 .has-preroll，正是因为要够得着
 * 播放器容器之外的节点。
 *
 * 【为什么用 opacity 而不是 display:none】这几件都是绝对定位的浮层，display:none
 * 会让它们在广告前后各触发一次布局重算，低端机上看得见一次抖动；opacity 只走合成层。
 * 配一段 .18s 淡出，广告进出不至于"啪"地闪。
 *
 * 【返回键刻意保留】.hg-play__back 不在列表里：广告最长 60 秒，其间必须留一个
 * 离开页面的出口，全遮死等于把用户按在广告里。 */
.is-preroll-on .hg-play__side,
.is-preroll-on .hg-play__switch,
.is-preroll-on .hg-play__clear,
.is-preroll-on .hg-play__bottom,
.is-preroll-on .hg-play__center-btn,
.is-preroll-on .hg-play__watermark {
  opacity: 0;
  pointer-events: none;
  transition: opacity .18s ease;
}

/* 与清屏模式（页面根 .hg-play.is-hg-clear）不冲突：那边用的是 display:none!important
   与 visibility:hidden，与这里的 opacity 是两条互不覆盖的通道，叠加只会更隐蔽。 */
