@keyframes preview-loading-sweep{0%{transform:translateX(-100%)}to{transform:translateX(100%)}}@keyframes preview-loader-spin{to{transform:rotate(360deg)}}body.theme-app .v0-grid,body.theme-app .video-grid{margin:0}body.theme-app .v0-grid,body.theme-app .v0-long-grid,body.theme-app .video-grid{display:grid;padding:12px 20px 28px;list-style:none}body.theme-app .v0-grid{gap:20px 19px;grid-template-columns:repeat(auto-fill,minmax(max(175px,calc((100% - 76px)/5)),1fr))}body.theme-app .v0-long-grid{gap:16px;grid-template-columns:repeat(auto-fill,minmax(max(208px,calc((100% - 48px)/4)),1fr));margin:16px 0 0}body.theme-app .v0-community-grid>li,body.theme-app .v0-grid>li,body.theme-app .v0-long-grid>li,body.theme-app .video-grid>li{min-width:0}body.theme-app .card,body.theme-app .video-card{background:#181818;border:0;border-radius:2px;box-sizing:border-box;overflow:hidden;position:relative;cursor:pointer;display:block;min-width:0;transition:transform .16s ease}body.theme-app .video-card.is-previewing,body.theme-app .video-card:hover{transform:translateY(-2px)}body.theme-app .video-card::after{content:"";position:absolute;inset:0;z-index:4;border:2px solid #da1c2a;border-radius:2px;box-sizing:border-box;opacity:0;pointer-events:none;transition:opacity .16s ease}body.theme-app .video-card.is-previewing .card-title,body.theme-app .video-card.is-previewing .video-title,body.theme-app .video-card:hover .card-title,body.theme-app .video-card:hover .video-title{color:#da1c2a}body.theme-app .card-link{color:inherit;display:block;min-width:0}body.theme-app .card-cover,body.theme-app .video-thumb{position:relative;width:100%;aspect-ratio:2/3;overflow:hidden;background-color:#1c1c1c}body.theme-app .video-thumb::before{content:"";position:absolute;inset:0;z-index:1;background:linear-gradient(110deg,transparent 0,rgba(255,255,255,.14) 46%,transparent 72%);opacity:0;pointer-events:none;transform:translateX(-100%)}body.theme-app .video-card.is-preview-loading .video-thumb::before{opacity:1;animation:preview-loading-sweep 1.1s ease-in-out infinite}body.theme-app .card-preview-video,body.theme-app .video-thumb-img{position:absolute;inset:0;display:block;width:100%;height:100%;-o-object-fit:cover;object-fit:cover;transition:opacity .18s ease}body.theme-app .video-thumb-img[data-src]{width:70%;height:50%;margin:auto;-o-object-fit:contain;object-fit:contain}body.theme-app .card-preview-video{-o-object-fit:contain;object-fit:contain;opacity:0;pointer-events:none;background:#0a0a0b}body.theme-app .video-card.is-previewing .card-preview-video,body.theme-app .video-card.is-previewing::after,body.theme-app .video-card:hover::after{opacity:1}body.theme-app .video-card.is-previewing .video-thumb-img{opacity:0}body.theme-app .video-card.is-preview-loading .video-thumb-img{opacity:1}body.theme-app .card-badge{position:absolute;top:8px;left:8px;z-index:2;border-radius:3px;background:rgba(0,0,0,.68);color:#fff;font-size:11px;line-height:16px;padding:2px 7px;opacity:0;transform:translateY(-2px);transition:opacity .16s ease,transform .16s ease}body.theme-app .video-card.is-previewing .card-badge{opacity:1;transform:translateY(0)}body.theme-app .card-preview-loader{position:absolute;top:50%;left:50%;z-index:3;width:28px;height:28px;opacity:0;pointer-events:none;transform:translate(-50%,-50%);transition:opacity .16s ease}body.theme-app .card-preview-loader::before{content:"";position:absolute;inset:0;border:2px solid rgba(255,255,255,.36);border-top-color:#fff;border-radius:50%;animation:preview-loader-spin .8s linear infinite;animation-play-state:paused}body.theme-app .video-card.is-preview-loading .card-preview-loader{opacity:1}body.theme-app .video-card.is-preview-loading .card-preview-loader::before{animation-play-state:running}body.theme-app .v0-community-card .card-badge{right:10px;left:auto}body.theme-app .v0-community-card[data-ratio] .cc-cover,body.theme-app .v0-long-grid .card-cover,body.theme-app .v0-long-grid .video-thumb{aspect-ratio:16/9}body.theme-app .card-info,body.theme-app .video-info{min-height:0;padding:9px 10px 10px}body.theme-app .card-title,body.theme-app .video-title{color:#eef0f8;font-size:13px;line-height:18px;font-weight:500;letter-spacing:0;margin:0 0 6px;display:-webkit-box;-webkit-line-clamp:1;-webkit-box-orient:vertical;overflow:hidden}body.theme-app .card-meta,body.theme-app .video-stats{color:rgba(255,255,255,.5);font-size:11px;line-height:15px;letter-spacing:0;margin:0;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}body.theme-app .card-meta-mobile,body.theme-app .card-title-mobile{display:none}body.theme-app .v0-community-grid{display:grid;gap:14px;grid-template-columns:repeat(auto-fill,minmax(max(260px,calc((100% - 28px)/3)),1fr));list-style:none;margin:16px 0 0;padding:20px 24px 28px}body.theme-app .v0-community-grid>li{margin:0}body.theme-app .v0-community-card{color:inherit;display:block;text-decoration:none}body.theme-app .v0-community-card .community-link{color:inherit;display:block}body.theme-app .v0-community-card .cc-cover{position:relative;width:100%;overflow:hidden}body.theme-app .v0-community-card .cc-subcat{position:absolute;top:10px;left:10px;border-radius:4px;background:rgba(0,0,0,.62);color:#f0ebe0;font-size:11px;line-height:16px;padding:3px 9px}body.theme-app .v0-community-card .cc-body{padding:12px 14px 14px}body.theme-app .v0-community-card .cc-title{color:#f0ebe0;font-size:14px;font-weight:500;line-height:20px;margin:0 0 8px;display:-webkit-box;-webkit-line-clamp:2;-webkit-box-orient:vertical;overflow:hidden}body.theme-app .v0-community-card .cc-meta{display:flex;align-items:center;gap:6px;color:#6b665e;font-size:11px;line-height:16px;flex-wrap:wrap}body.theme-app .v0-community-card .cc-author{color:#a8a39a;font-size:12px}body.theme-app .v0-community-card .cc-views{margin-left:auto}body.theme-app .feed-sentinel{width:100%;height:1px;margin:0 0 26px;pointer-events:none}body.theme-app .feed-sentinel.is-done{display:none}body.theme-app .bg-1{background:linear-gradient(135deg,#667eea,#764ba2)}body.theme-app .bg-2{background:linear-gradient(135deg,#f093fb,#f5576c)}body.theme-app .bg-3{background:linear-gradient(135deg,#4facfe,#00f2fe)}body.theme-app .bg-4{background:linear-gradient(135deg,#43e97b,#38f9d7)}body.theme-app .bg-5{background:linear-gradient(135deg,#fa709a,#fee140)}body.theme-app .bg-6{background:linear-gradient(135deg,#30cfd0,#330867)}body.theme-app .bg-7{background:linear-gradient(135deg,#a8edea,#fed6e3)}body.theme-app .bg-8{background:linear-gradient(135deg,#ff9a9e,#fecfef)}body.theme-app .bg-9{background:linear-gradient(135deg,#ffecd2,#fcb69f)}body.theme-app .bg-10{background:linear-gradient(135deg,#84fab0,#8fd3f4)}body.theme-app .bg-11{background:linear-gradient(135deg,#a18cd1,#fbc2eb)}body.theme-app .bg-12{background:linear-gradient(135deg,#ffd3a5,#fd6585)}@media (max-width:768px){body.theme-app .v0-grid,body.theme-app .v0-long-grid,body.theme-app .video-grid{grid-template-columns:repeat(2,minmax(0,1fr));gap:10px;padding:11px 10px 26px;margin-top:0}body.theme-app .card,body.theme-app .video-card{border-radius:1px}body.theme-app .video-card:hover{transform:none}body.theme-app .card-badge,body.theme-app .card-meta.has-mobile-copy .card-meta-desktop,body.theme-app .card-preview-loader,body.theme-app .card-preview-video,body.theme-app .card-title.has-mobile-copy .card-title-desktop,body.theme-app .v0-community-card .cc-subcat{display:none}body.theme-app .card-cover,body.theme-app .video-thumb{aspect-ratio:2/3}body.theme-app .card-info,body.theme-app .video-info{min-height:49.5px;padding:5px 8px 4px}body.theme-app .card-title,body.theme-app .video-title{font-size:13px;line-height:18px;margin-bottom:4px;-webkit-line-clamp:1}body.theme-app .card-meta,body.theme-app .video-stats{font-size:11px;line-height:16px}body.theme-app .card-meta.has-mobile-copy .card-meta-mobile,body.theme-app .card-title.has-mobile-copy .card-title-mobile{display:inline}body.theme-app .v0-community-grid{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:10px;margin-top:0;padding:10px 10px 26px}body.theme-app .v0-community-grid>li{margin:0}body.theme-app .v0-community-card[data-ratio] .cc-cover{aspect-ratio:345/194}body.theme-app .v0-community-card .cc-body{min-height:48px;padding:5px 8px 4px}body.theme-app .v0-community-card .cc-title{font-size:13px;line-height:18px;margin-bottom:4px;-webkit-line-clamp:1}body.theme-app .v0-community-card .cc-meta{gap:4px;color:rgba(255,255,255,.5);font-size:11px;line-height:16px}body.theme-app .v0-community-card .cc-author{color:rgba(255,255,255,.8)}body.theme-app .feed-sentinel{height:0;margin-bottom:0}}

/* ═══════════════════════════════════════════════════════════════════════════
 * AI 成人分类列表卡的三块增补: 集数角标 / 简介 / 标签胶囊
 * (运营需求 2026-09-10, 形态对齐 dx150 的剧卡)
 *
 * 这三块的 DOM **只在 AI 成人分类的卡片上输出**(Go 侧 videoCard 按 apisvc.AICateSet 判定,
 * 非 AI 卡对应字段恒为空, 模板 {{if}} 判掉后一个字节都不吐)。所以下面的规则对首页、
 * /hot/、长视频列表等页面完全无副作用 —— 那些页面上压根没有能命中这些选择器的元素,
 * 不必再给选择器加页面级前缀去"隔离"。
 *
 * 上面那一大段是压缩过的历史交付件, 本块按 pages/drama.css 的写法展开写便于维护;
 * 混排不影响解析。
 *
 * 【两条硬约束, 改这里前先看】
 * 1) 不用 `inset` 简写 —— 它要 Chrome 87+, 而本站要兼容停在 Chrome 78 的安卓存量机,
 *    那些机器上整条声明会被丢弃, 角标直接定位失效跑到卡片左上角。一律写 top/right/bottom/left。
 * 2) 不用 flex 的 `gap` 做胶囊间距 —— flex gap 是 Chrome 84 才支持的(grid gap 才是 78 就有,
 *    所以上面网格里的 gap 没问题)。Chrome 78 上 flex gap 静默失效, 三个标签会挤成一坨。
 *    这里改用 margin-right 拉开, 全版本一致。
 * ═══════════════════════════════════════════════════════════════════════════ */

/* 封面右下角集数角标「12小时前 更新至36集」。
 * pointer-events:none 是必须的: 它盖在 .card-link 上方, 不关掉指针事件的话角标那一小块
 * 会变成点不动的死区(用户点在"更新至36集"上没反应)。 */
body.theme-app .card-ep-badge {
  position: absolute;
  right: 8px;
  bottom: 8px;
  z-index: 2;
  max-width: calc(100% - 16px);
  padding: 2px 7px;
  border-radius: 3px;
  background: rgba(0, 0, 0, 0.72);
  color: #fff;
  font-size: 11px;
  line-height: 16px;
  /* 一行显示不下时省略号收尾, 绝不换行: 换行会把角标顶成两层, 压住封面下沿。 */
  white-space: nowrap;
  overflow: hidden;
  text-overflow: ellipsis;
  pointer-events: none;
}

/* 时间前缀弱化: 它是次要信息, 「更新至N集」才是主体。
 * font-style:normal 是因为宿主标签是 <i>(选它只是要一个语义中性的行内元素), 默认斜体要摘掉。 */
body.theme-app .card-ep-time {
  margin-right: 4px;
  color: rgba(255, 255, 255, 0.6);
  font-style: normal;
  font-weight: 400;
}

/* 封面右上角评分角标「8.8」。
 * 参数(padding/圆角/字号/行高/金色/字重)逐条照抄 pages/drama.css 的 .drama-rec-score ——
 * 运营要求列表卡与短剧页「猜你喜欢」推荐卡上的这枚角标形态完全一致。
 * 这里不是 @import 或共用选择器而是抄一份: drama.css 只在 /drama/ 系页面加载,
 * 列表页不引它; 反过来把这条搬进公共文件又会让推荐卡的样式散在两处。
 *
 * top/right 分开写不用 inset 简写: 见本块开头硬约束 1(Chrome 78 会整条丢弃, 角标跑到左上角)。
 * pointer-events:none 同 .card-ep-badge: 它盖在 .card-link 上方, 不关掉指针事件的话
 * 角标那一小块会变成点不动的死区。
 * z-index:2 与集数角标同层 —— 要压在 .video-thumb::before(z-index:1 的预览扫光)之上,
 * 否则悬停预览时角标会被那层扫光盖住。 */
body.theme-app .card-score {
  position: absolute;
  top: 6px;
  right: 6px;
  z-index: 2;
  padding: 1px 6px;
  border-radius: 4px;
  background: rgba(0, 0, 0, 0.62);
  color: #ffc53d;
  font-size: 11px;
  line-height: 18px;
  font-weight: 600;
  white-space: nowrap;
  pointer-events: none;
}

/* 简介两行截断。line-clamp 这套是 Chrome 一直支持的 -webkit- 前缀写法, 78 上正常。
 * 不在 Go 里按字符数截: 中英文混排/全角标点占宽不同, 且截断点与列宽字号无关, 必然截错。 */
body.theme-app .card-desc {
  margin: 4px 0 0;
  color: rgba(255, 255, 255, 0.42);
  font-size: 11px;
  line-height: 16px;
  display: -webkit-box;
  -webkit-line-clamp: 2;
  -webkit-box-orient: vertical;
  overflow: hidden;
}

/* 标签胶囊行。它是 .card-link 的**兄弟节点**(<a> 不能套 <a>, 见模板注释),
 * 所以左右内边距要自己给一份, 与 .card-info 的 10px 对齐, 视觉上仍在同一列。
 *
 * flex-wrap:nowrap + overflow:hidden = 永远只占一行高度。
 * 这不是偷懒: 网格里同一行的卡片必须等高, 标签一旦换行, 标签多的那张卡就比邻居高一截,
 * 整排卡片的底边立刻参差。放不下的标签直接裁掉, 比撑高卡片可接受得多。 */
body.theme-app .card-tags {
  display: flex;
  flex-wrap: nowrap;
  padding: 0 10px 9px;
  overflow: hidden;
}

body.theme-app .card-tag {
  flex: 0 0 auto;
  margin-right: 5px;
  padding: 1px 7px;
  border-radius: 2px;
  background: rgba(255, 255, 255, 0.07);
  color: rgba(255, 255, 255, 0.55);
  font-size: 11px;
  line-height: 17px;
  text-decoration: none;
  white-space: nowrap;
}

body.theme-app .card-tag:hover {
  background: rgba(232, 28, 43, 0.16);
  color: #e81c2b;
}

/* 手机端(与本文件既有断点同为 768px)。
 * 简介与标签在手机端**保留**: 运营给的参考形态就是手机版, 那两块正是这次要加的东西,
 * 藏掉等于需求没做。只按窄卡宽度缩一档字号与间距。
 * 注意 .card-info 在上面的 media query 里有 min-height:49.5px, 多出来的简介会自然把它撑高,
 * 不需要在这里改那条 —— 改了会影响没有简介的普通卡片。 */
@media (max-width: 768px) {
  body.theme-app .card-ep-badge {
    right: 5px;
    bottom: 5px;
    max-width: calc(100% - 10px);
    padding: 1px 5px;
    border-radius: 2px;
    font-size: 10px;
    line-height: 15px;
  }

  body.theme-app .card-ep-time {
    margin-right: 3px;
  }

  /* 评分角标按窄卡缩一档, 缩放比例与上面的 .card-ep-badge 保持一致 ——
   * 同一张卡上下两枚角标, 一枚缩了一枚没缩会明显不齐。 */
  body.theme-app .card-score {
    top: 5px;
    right: 5px;
    padding: 0 5px;
    border-radius: 2px;
    font-size: 10px;
    line-height: 16px;
  }

  body.theme-app .card-desc {
    margin-top: 3px;
    font-size: 10px;
    line-height: 15px;
  }

  body.theme-app .card-tags {
    padding: 0 8px 6px;
  }

  body.theme-app .card-tag {
    margin-right: 4px;
    padding: 0 5px;
    font-size: 10px;
    line-height: 16px;
  }
}
