/* ============================================
   HOME PAGE — Glass Timeline + Hot Cards
   ============================================ */

.home-container { padding: 0; }

/* ── Hero ── */
.home-hero {
  padding: 20px 16px 8px;
}

.home-hero h1 {
  font-size: 1.45rem;
  font-weight: 700;
  letter-spacing: -0.03em;
  line-height: 1.2;
  margin-bottom: 0;
  background: linear-gradient(180deg, #fff 0%, rgba(255,255,255,0.75) 100%);
  -webkit-background-clip: text;
  -webkit-text-fill-color: transparent;
  background-clip: text;
}

.home-hero .subtitle {
  font-size: 0.78rem;
  color: var(--text-muted);
  margin-top: 2px;
}

/* 广告位流动光晕：低速旋转 + 漂移的模糊光斑（GSAP 驱动，仅 transform/opacity） */
.home-ad-aurora {
  position: absolute; inset: 0; z-index: 0;
  overflow: hidden; border-radius: inherit; pointer-events: none;
  will-change: background-position, transform;
  background:
    radial-gradient(120% 130% at 20% 30%, rgba(255,80,160,.85), transparent 55%),
    radial-gradient(120% 130% at 80% 70%, rgba(80,220,255,.82), transparent 55%),
    radial-gradient(120% 130% at 50% 50%, rgba(180,120,255,.75), transparent 60%),
    linear-gradient(135deg, #1b2a4d, #0f1f2a);
  background-size: 220% 220%, 220% 220%, 220% 220%, 100% 100%;
  animation: auroraFlow 16s ease-in-out infinite alternate;
}
.home-ad-aurora::after {
  content: ''; position: absolute; inset: 0; z-index: 1;
  background: linear-gradient(180deg, rgba(0,0,0,.04), rgba(0,0,0,.10));
  pointer-events: none;
}
@keyframes auroraFlow {
  0%   { background-position: 0% 0%, 100% 100%, 50% 50%, 0 0; }
  50%  { background-position: 55% 35%, 35% 65%, 25% 80%, 0 0; }
  100% { background-position: 100% 0%, 0% 100%, 80% 20%, 0 0; }
}
@media (prefers-reduced-motion: reduce) {
  .home-ad-aurora { animation: none; }
}
.aurora-blob {
  position: absolute;
  border-radius: 50%;
  filter: blur(18px);
  will-change: transform;
  mix-blend-mode: screen;
  pointer-events: none;
  z-index: 0;
}
.aurora-blob.a1 {
  width: 78%; height: 200%; left: -14%; top: -70%;
  background: conic-gradient(from 0deg, rgba(255,80,160,1), rgba(80,220,255,1), rgba(180,120,255,1), rgba(255,200,80,1), rgba(255,80,160,1));
  opacity: 1;
}
.aurora-blob.a2 {
  width: 58%; height: 150%; right: -18%; bottom: -65%;
  background: radial-gradient(closest-side, rgba(255,210,120,1), rgba(80,220,255,.7) 46%, transparent 74%);
  opacity: 1;
}
.aurora-blob.a3 {
  width: 46%; height: 120%; left: 30%; top: -45%;
  background: radial-gradient(closest-side, rgba(190,255,235,1), rgba(120,240,160,.65) 42%, transparent 72%);
  opacity: .95;
}
.aurora-blob.a4 {
  width: 40%; height: 130%; left: 8%; top: -55%;
  background: radial-gradient(closest-side, rgba(255,180,220,1), rgba(180,120,255,.6) 45%, transparent 72%);
  opacity: .9;
}
.aurora-hotspot {
  position: absolute; left: -32%; top: -10%; width: 36%; height: 130%;
  border-radius: 50%;
  filter: blur(28px);
  will-change: transform;
  mix-blend-mode: screen;
  pointer-events: none;
  z-index: 0;
  background: radial-gradient(closest-side, rgba(255,255,255,.95), rgba(255,210,120,.55) 46%, transparent 76%);
}
body:not(.cms-mode) .home-ad-track { position: relative; z-index: 1; }
body:not(.cms-mode) .home-ad-dots { position: relative; z-index: 1; }

/* ── Region Selector（2026-09-21 改版：折叠成一个按钮，点击向右弹出） ── */
.region-selector {
  position: relative;
  padding: 8px 0 12px;
  margin: 0 16px;
  border-bottom: 1px solid rgba(255,255,255,0.04);
  display: flex; align-items: center;
  gap: 8px;                          /* 地区按钮 / 主题按钮之间留缝，别贴在一起 */
}

/* 地区菜单是「从按钮右侧横向铺开」的透明浮层，展开后会正好压在主题按钮上；
   两个浮层本来就互斥，所以地区菜单展开时把主题按钮淡出，避免按钮和菜单叠字。
   （主题菜单朝右展开，不会压到左边的地区按钮，所以不需要反向处理） */
body:not(.cms-mode) .region-selector.open .theme-pop {
  opacity: 0;
  visibility: hidden;
  transition: opacity .16s ease, visibility .16s ease;
}

/* 弹出层以按钮为定位基准，菜单从按钮右侧展开 */
.region-pop { position: relative; display: inline-flex; }

.region-toggle,
.theme-toggle {
  display: inline-flex; align-items: center; gap: 7px;
  padding: 5px 12px;
  border-radius: var(--radius-full);
  font-size: 0.7rem; font-weight: 600;
  color: var(--text-muted);
  cursor: pointer;
  white-space: nowrap;
  background: rgba(255,255,255,0.03);
  border: 1px solid rgba(255,255,255,0.04);
  backdrop-filter: blur(10px);
  -webkit-backdrop-filter: blur(10px);
  transition: background-color .25s, border-color .25s, color .25s, box-shadow .25s;
}

.region-toggle:hover { color: var(--text-primary, #e8faf3); background: rgba(255,255,255,0.06); }

/* ── 2026-09-21 站长反馈：悬停要"高亮"，不能"变暗" ──────────────────────────
   原先两个问题：
     ① 折叠按钮用的是深色玻璃样式，跟菜单里的奶油色胶囊不像一套；
     ② 品牌主题给的悬停色 #ffe0bd 比默认渐变更暗更饱和，看起来像被压暗。
   这里统一成：折叠按钮 = 与选项同款奶油胶囊；悬停 = 更亮 + 轻微上浮 + 光影加强。
   注意用 body:not(.cms-mode) 前缀提高优先级，才能盖住 brand-v1.css 里的同名规则。 */
body:not(.cms-mode) .region-selector .region-toggle {
  background: linear-gradient(145deg, rgba(255,239,214,.96), rgba(255,218,190,.88));
  border: 1px solid rgba(255,196,137,.2);
  color: #725747;
  font-weight: 700;
  box-shadow: inset 0 1px rgba(255,255,255,.72), 0 3px 9px rgba(91,48,24,.12);
}
body:not(.cms-mode) .region-selector .region-toggle:hover {
  background: linear-gradient(145deg, #fff8ee, #ffe9cc);
  border-color: rgba(255,196,137,.5);
  color: #6b4632;
  transform: translateY(-1px);
  box-shadow: inset 0 1px rgba(255,255,255,.92), 0 7px 18px rgba(255,138,75,.26);
}
body:not(.cms-mode) .region-selector.open .region-toggle {
  background: linear-gradient(145deg, #ffd6ad, #ffb985);
  border-color: rgba(255,157,92,.52);
  color: #713921;
  box-shadow: inset 0 1px rgba(255,255,255,.68), 0 4px 12px rgba(255,138,75,.2);
}
/* 菜单里的选项：悬停＝提亮（覆盖品牌主题偏暗的 #ffe0bd） */
body:not(.cms-mode) .region-selector .region-menu .region-chip:hover {
  background: linear-gradient(145deg, #fff8ee, #ffe9cc);
  border-color: rgba(255,196,137,.5);
  color: #6b4632;
  transform: translateY(-1px);
  box-shadow: inset 0 1px rgba(255,255,255,.92), 0 7px 18px rgba(255,138,75,.26);
}

.region-selector.open .region-toggle {
  color: #fff;
  background: rgba(255,255,255,0.08);
  border-color: rgba(255,255,255,0.14);
  box-shadow: 0 6px 22px rgba(0,0,0,0.28);
}

.region-toggle-face { line-height: 1; }

/* 小箭头：折叠时向右，展开时向下 */
.region-toggle-chev {
  width: 0; height: 0;
  border-left: 4px solid currentColor;
  border-top: 3.5px solid transparent;
  border-bottom: 3.5px solid transparent;
  opacity: .75;
  transition: transform .22s ease;
}

.region-selector.open .region-toggle-chev,
.theme-pop.open .region-toggle-chev { transform: rotate(90deg); }

/* 菜单：横向一排（与改版前一致），无边框无背景的浮层；
   展开时从按钮右侧滑出，选项逐个错位淡入（丝滑动画） */
.region-menu,
.theme-menu {
  position: absolute;
  left: calc(100% + 6px);
  top: 50%;
  z-index: 80;
  display: flex; flex-wrap: nowrap; gap: 6px;
  padding: 2px 12px 2px 2px;        /* 右侧留 12px：最后一个分类能完整滚进可视区 */
  max-width: calc(100vw - 118px);
  overflow-x: auto; overflow-y: hidden;
  scrollbar-width: none;
  background: transparent;           /* 无背景 */
  border: 0;                         /* 无边框 */
  box-shadow: none;
  opacity: 0;
  visibility: hidden;
  pointer-events: none;
  transform: translateY(-50%) translateX(-14px);
  transform-origin: left center;
  transition: opacity .2s ease, transform .34s cubic-bezier(.22,1,.36,1), visibility .34s;
}

.region-menu::-webkit-scrollbar { display: none; }

.region-selector.open .region-menu,
.theme-pop.open .theme-menu {
  opacity: 1;
  visibility: visible;
  pointer-events: auto;
  transform: translateY(-50%) translateX(0);
}

/* 选项逐个错位淡入：靠渲染时写入的 --i（序号）控制延迟；收起时立即淡出（延迟归零） */
.region-menu .region-chip,
.theme-menu .theme-chip {
  opacity: 0;
  transform: translateX(-10px) scale(.96);
  transition: opacity .26s ease, transform .34s cubic-bezier(.22,1,.36,1),
              background-color .25s, border-color .25s, color .25s;
  transition-delay: 0s;
}

.region-selector.open .region-chip,
.theme-pop.open .theme-chip {
  opacity: 1;
  transform: none;
  transition-delay: calc(var(--i, 0) * 16ms);
}

@media (max-width: 480px) {
  .region-menu,
  .theme-menu { max-width: calc(100vw - 96px); }
}

/* ── 模版主题筛选（2026-09-21）──────────────────────────────────────────
   站长的要求是「另一种风格」，而且品牌规范禁用紫蓝科技风，所以：
     地区 = 暖色**实心**胶囊（品牌奶油色，原有风格）
     主题 = 冷色**描边**胶囊（品牌薄荷绿 #67E8C8 + 虚线边）
   两者并排时一眼能区分；展开、悬停高亮、逐个错位淡入的行为与地区一致。 */
body:not(.cms-mode) .theme-toggle {
  /* 2026-09-23 站长：默认态就用「点开时」的实心薄荷色，去掉镂空/虚线样式 */
  background: linear-gradient(145deg, #b8f7e4, #7ce8c4);
  border: 1px solid rgba(28,107,88,.45);
  color: #10503f;
  font-weight: 700;
  box-shadow: inset 0 1px rgba(255,255,255,.9), 0 3px 9px rgba(28,107,88,.18);
}
body:not(.cms-mode) .theme-toggle:hover {
  background: linear-gradient(145deg, #c9fbea, #8beece);
  border-color: rgba(28,107,88,.6);
  color: #0d4737;
  transform: translateY(-1px);
  box-shadow: inset 0 1px rgba(255,255,255,.95), 0 7px 18px rgba(28,107,88,.26);
}
body:not(.cms-mode) .theme-pop.open .theme-toggle {
  background: linear-gradient(145deg, #a7f3dd, #7ce8c4);
  border-style: solid;
  border-color: rgba(28,107,88,.38);
  color: #10503f;
  box-shadow: inset 0 1px rgba(255,255,255,.7), 0 4px 12px rgba(28,107,88,.22);
}
/* 主题选项：薄荷描边胶囊（与地区选项的奶油实心胶囊区分） */
body:not(.cms-mode) .theme-menu .theme-chip {
  padding: 3px 10px;
  border-radius: 999px;
  font-size: .58rem;
  font-weight: 700;
  white-space: nowrap;
  flex-shrink: 0;
  cursor: pointer;
  color: #1c6b58;
  background: rgba(255,255,255,.66);
  border: 1px solid rgba(28,107,88,.22);
  box-shadow: inset 0 1px rgba(255,255,255,.7), 0 3px 9px rgba(28,107,88,.08);
}
body:not(.cms-mode) .theme-menu .theme-chip:hover {
  background: rgba(167,243,221,.72);
  border-color: rgba(28,107,88,.45);
  color: #10503f;
  transform: translateY(-1px);
  box-shadow: inset 0 1px rgba(255,255,255,.9), 0 7px 18px rgba(28,107,88,.2);
}
body:not(.cms-mode) .theme-menu .theme-chip.active {
  color: #0d4737;
  background: linear-gradient(145deg, #a7f3dd, #7ce8c4);
  border-color: rgba(28,107,88,.5);
  box-shadow: inset 0 1px rgba(255,255,255,.75), 0 4px 12px rgba(28,107,88,.22);
}

.region-chip {
  flex-shrink: 0;
  padding: 5px 12px;
  border-radius: var(--radius-full);
  font-size: 0.7rem;
  font-weight: 500;
  color: var(--text-muted);
  cursor: pointer;
  transition: background-color 0.25s, border-color 0.25s, color 0.25s, transform 0.25s, box-shadow 0.25s, opacity 0.25s;
  white-space: nowrap;
  background: rgba(255,255,255,0.03);
  border: 1px solid rgba(255,255,255,0.04);
  backdrop-filter: blur(10px);
  -webkit-backdrop-filter: blur(10px);
}

.region-chip.active {
  color: #fff;
  background: rgba(255,255,255,0.08);
  border-color: rgba(255,255,255,0.12);
}

/* ── Main Split Layout ── */
.home-split {
  display: flex;
  position: relative;
}

/* ── TIMELINE ── iOS scroll-wheel focal effect ── */
.timeline {
  width: 56px;
  flex-shrink: 0;
  padding: 4px 0 0;
  position: relative;
  display: flex;
  flex-direction: column;
  gap: 0;
}

.timeline-node {
  position: relative;
  display: flex;
  flex-direction: column;
  align-items: center;
  cursor: pointer;
  transition: background-color 0.4s cubic-bezier(0.16,1,0.3,1), border-color 0.4s cubic-bezier(0.16,1,0.3,1), color 0.4s cubic-bezier(0.16,1,0.3,1), transform 0.4s cubic-bezier(0.16,1,0.3,1), box-shadow 0.4s cubic-bezier(0.16,1,0.3,1), opacity 0.4s cubic-bezier(0.16,1,0.3,1);
}

/* Today — tallest row, prominent */
.timeline-node.today {
  min-height: 210px;
}

/* Yesterday */
.timeline-node.yesterday {
  min-height: 150px;
}

/* Older — shortest */
.timeline-node.older {
  min-height: 110px;
}

.timeline-dot {
  border-radius: 50%;
  flex-shrink: 0;
  margin-top: 8px;
  position: relative;
  z-index: 2;
  transition: background-color 0.45s cubic-bezier(0.16,1,0.3,1), border-color 0.45s cubic-bezier(0.16,1,0.3,1), color 0.45s cubic-bezier(0.16,1,0.3,1), transform 0.45s cubic-bezier(0.16,1,0.3,1), box-shadow 0.45s cubic-bezier(0.16,1,0.3,1), opacity 0.45s cubic-bezier(0.16,1,0.3,1);
}

.timeline-node.today .timeline-dot {
  width: 14px; height: 14px;
  background: #fff;
  border: 2px solid rgba(255,255,255,0.4);
  box-shadow: 0 0 20px rgba(255,255,255,0.3), 0 0 40px var(--accent-soft);
}

.timeline-node.yesterday .timeline-dot {
  width: 8px; height: 8px;
  background: rgba(255,255,255,0.25);
  border: 1px solid rgba(255,255,255,0.1);
}

.timeline-node.older .timeline-dot {
  width: 5px; height: 5px;
  background: rgba(255,255,255,0.1);
  border: 0.5px solid rgba(255,255,255,0.05);
}

.timeline-line {
  width: 1px;
  flex: 1;
  margin-top: 6px;
}

.timeline-node.today .timeline-line {
  background: linear-gradient(to bottom, rgba(255,255,255,0.12), rgba(255,255,255,0.03));
}

.timeline-node.yesterday .timeline-line {
  background: linear-gradient(to bottom, rgba(255,255,255,0.05), rgba(255,255,255,0.01));
}

.timeline-node.older .timeline-line {
  background: rgba(255,255,255,0.02);
}

.timeline-label {
  margin-top: 4px;
  text-align: center;
  line-height: 1.3;
  white-space: nowrap;
  transition: background-color 0.4s cubic-bezier(0.16,1,0.3,1), border-color 0.4s cubic-bezier(0.16,1,0.3,1), color 0.4s cubic-bezier(0.16,1,0.3,1), transform 0.4s cubic-bezier(0.16,1,0.3,1), box-shadow 0.4s cubic-bezier(0.16,1,0.3,1), opacity 0.4s cubic-bezier(0.16,1,0.3,1);
}

.timeline-node.today .timeline-label {
  font-size: 0.8rem;
  font-weight: 700;
  color: #fff;
  letter-spacing: -0.01em;
}

.timeline-node.yesterday .timeline-label {
  font-size: 0.62rem;
  color: rgba(255,255,255,0.35);
}

.timeline-node.older .timeline-label {
  font-size: 0.55rem;
  color: rgba(255,255,255,0.18);
}

/* ── CARDS AREA ── */
.cards-area {
  flex: 1;
  padding: 4px 0 0 10px;
  overflow: hidden;
}

.cards-row {
  margin-bottom: 8px;
  min-height: 0;
  transition: opacity 0.4s;
}

/* 日期分组标题（2026-09-23 两排后，按苹果式简洁排版重做）：
   去掉胶囊/圆点/徽标底，改成左对齐的干净小节标题，标题与数量用黄金比例字号错开。 */
.cards-row-label {
  display: flex; align-items: baseline; gap: 8px;
  width: fit-content;
  padding: 0;
  margin: 6px 0 4px;
  font-size: 1.06rem; font-weight: 700;
  letter-spacing: .01em;
  line-height: 1;
  color: #f5faf8;
  background: transparent;
  border: 0;
}
.cards-row-label::before { content: none; }
.cards-row-label .day-name { white-space: nowrap; }
.cards-row-label .cards-row-count {
  font-size: .8rem; font-weight: 500; color: rgba(255,255,255,.42);
}
.cards-row-label.hot::before { content: none; }
.cards-row.active-day .cards-row-label {
  color: #fff;
  background: transparent;
  border: 0;
}
.cards-row.active-day .cards-row-label::before { content: none; }
.cards-row.active-day .cards-row-label .cards-row-count { color: #ffd9b3; background: rgba(255,160,90,.16); }

/* 前后对比扫动预览（CapCut 风格：左→右扫开 → 停 1.5s → 右→左扫回 → 停 1.5s → 循环） */
.ba-preview { position: absolute; inset: 0; overflow: hidden; }
.ba-preview img { position: absolute; inset: 0; width: 100%; height: 100%; object-fit: cover; object-position: center; }
.ba-preview .ba-after { clip-path: inset(0 100% 0 0); animation: baReveal 5s ease-in-out infinite; }
.ba-preview .ba-line {
  position: absolute; top: 0; bottom: 0; left: 0; width: 2px;
  background: rgba(255,255,255,.95);
  box-shadow: 0 0 10px rgba(255,255,255,.85), 0 0 22px rgba(255,255,255,.5);
  animation: baLine 5s ease-in-out infinite;
}
@keyframes baReveal {
  0% { clip-path: inset(0 100% 0 0); }
  20% { clip-path: inset(0 0 0 0); }
  50% { clip-path: inset(0 0 0 0); }
  70% { clip-path: inset(0 100% 0 0); }
  100% { clip-path: inset(0 100% 0 0); }
}
@keyframes baLine {
  0% { left: 0; }
  20% { left: calc(100% - 2px); }
  50% { left: calc(100% - 2px); }
  70% { left: 0; }
  100% { left: 0; }
}
@media (prefers-reduced-motion: reduce) {
  .ba-preview .ba-after { animation: none; clip-path: none; }
  .ba-preview .ba-line { display: none; }
}

.cards-row-scroll {
  display: flex;
  gap: 8px;
  overflow-x: auto;
  /* 左右滑动自由定位，不吸附到固定卡片位置 */
  padding-left: 6px;
  padding-right: 6px;
  padding-bottom: 4px;
  scrollbar-width: none;
  touch-action: pan-x pan-y; /* 横向滚动本行，纵向滚动卡片区（原生） */
  overscroll-behavior-x: contain;
  -webkit-overflow-scrolling: touch;
}

.cards-row-scroll::-webkit-scrollbar { display: none; }

/* ── 日期组（今天/昨天/前天…）：一次铺开全部卡片 ──
   以前每组是一条横向滑轨，用户必须左右滑才看得到其余模版；现在改成等宽网格，
   每组卡片按顺序整体展示，纵向滚一屏就能看全。热门组仍是单行（见下方 marquee）。 */
.cards-row:not(.hot-row) .cards-row-scroll {
  display: grid;
  /* 列宽下限沿用卡片既有尺寸（brand 皮肤 84px）；桌面端由 --card-min 覆盖成 168/184/196px。
     var() 的 fallback 就是 84px，所以手机端渲染结果与改动前完全一致。 */
  grid-template-columns: repeat(auto-fill, minmax(var(--card-min, 84px), 1fr));
  overflow: visible;
  touch-action: auto; /* 纵向滚动交给卡片区，本行不再横向滚动 */
  overscroll-behavior-x: auto;
}
.cards-row:not(.hot-row) .cards-row-scroll .glass-card { width: auto; }
/* 某天没有模版时的空提示：整行居中，不要被压成一个格子 */
.cards-row:not(.hot-row) .cards-row-scroll .cards-row-empty { grid-column: 1 / -1; }

/* ── 3 日热门：自动向左匀速滚动（无缝循环）── */
.cards-row.hot-row .cards-row-scroll.is-marquee {
  display: block;
  overflow: hidden;
  touch-action: pan-y; /* 自动滚动的这一行不再接受手动横滑 */
}
.hot-track {
  display: flex;
  gap: 8px;
  width: max-content;
  animation: hotMarquee 60s linear infinite;
  will-change: transform;
}
.cards-row.hot-row .cards-row-scroll.is-marquee.is-paused .hot-track { animation-play-state: paused; }
@keyframes hotMarquee {
  from { transform: translate3d(0, 0, 0); }
  to { transform: translate3d(-50%, 0, 0); }
}
@media (prefers-reduced-motion: reduce) {
  .hot-track { animation: none; }
  .cards-row.hot-row .cards-row-scroll.is-marquee { overflow-x: auto; touch-action: pan-x pan-y; }
}

/* ── GLASS CARD — compact, 3 visible ── */
.glass-card {
  flex-shrink: 0;
  width: 118px;
  border-radius: 14px;
  overflow: hidden;
  cursor: pointer;
  background: rgba(255,255,255,0.025);
  border: 1px solid rgba(255,255,255,0.05);
  backdrop-filter: blur(18px);
  -webkit-backdrop-filter: blur(18px);
  transition: transform 0.3s cubic-bezier(0.16,1,0.3,1),
              border-color 0.3s,
              box-shadow 0.3s;
}

.glass-card:active { transform: scale(0.95); }

.glass-card.glass-rank-1 {
  border-color: rgba(255,215,0,0.22);
  box-shadow: 0 0 24px rgba(255,215,0,0.05), 0 4px 16px rgba(0,0,0,0.4);
}

.glass-card.glass-rank-2 {
  border-color: rgba(192,192,192,0.13);
  box-shadow: 0 4px 16px rgba(0,0,0,0.3);
}

.glass-card-cover {
  width: 100%;
  aspect-ratio: 3/4;
  position: relative;
  display: flex; align-items: center; justify-content: center;
  overflow: hidden;
}

.glass-card-cover .card-gradient {
  position: absolute; inset: 0; opacity: 0.8;
}

.glass-card-cover .card-emoji {
  position: relative; z-index: 1;
  font-size: 2.5rem;
  filter: drop-shadow(0 3px 8px rgba(0,0,0,0.3));
}

.glass-card-cover .card-rank-num {
  position: absolute; top: 6px; left: 7px; z-index: 3;
  font-size: 0.6rem; font-weight: 700; line-height: 1;
  color: rgba(255,255,255,0.7);
}

.glass-card-cover .card-rank-num.r1 { color: #ffd700; font-size: 0.68rem; }
.glass-card-cover .card-rank-num.r2 { color: #c0c0c0; }
.glass-card-cover .card-rank-num.r3 { color: #cd7f32; }

.glass-card-cover .card-trend {
  position: absolute; top: 6px; right: 6px; z-index: 3;
  font-size: 0.5rem; font-weight: 800; letter-spacing: .03em;
  line-height: 1; color: #8fd0ff;
  text-shadow: 0 1px 4px rgba(0,0,0,.75);
}

.card-trend.trend-hot {
  color: #ffb26b;
}

.card-trend.trend-up {
  color: #8fd0ff;
}

.glass-card-body { padding: 6px 8px 2px; }

.glass-card-name {
  font-size: 0.7rem; font-weight: 600;
  letter-spacing: -0.01em; line-height: 1.2;
  margin-bottom: 1px; color: rgba(255,255,255,0.88);
}

.glass-card-stats {
  display: flex; align-items: center; gap: 4px;
  font-size: 0.58rem; color: rgba(255,255,255,0.3);
}

.template-credit-badge {
  display: inline-flex; align-items: center; gap: 3px;
  border: 1px solid var(--accent-border);
  border-radius: 999px;
  padding: 2px 6px;
  color: var(--accent);
  background: var(--accent-soft);
  font-size: 0.56rem;
  font-weight: 800;
  line-height: 1.2;
  white-space: nowrap;
}

.template-credit-badge.is-insufficient {
  color: #b42318;
  background: #fff1f0;
  border-color: #fda29b;
}

.template-credit-cta {
  display: inline-flex; align-items: center; justify-content: center;
  min-height: 24px;
  margin-left: 4px;
  padding: 2px 8px;
  border: 1px solid var(--accent-border);
  border-radius: 999px;
  color: var(--accent);
  background: #fff;
  font: inherit;
  font-size: 0.56rem;
  font-weight: 800;
  line-height: 1.2;
  cursor: pointer;
  white-space: nowrap;
}

.glass-card-footer {
  display: none; /* Hide creator footer — cleaner look */
}

/* ── TEMPLATE DETAIL (glass) ── */
.detail-glass {
  padding: 0 16px;
}

.detail-cover {
  position: relative;
  /* 2026-09-23 站长口径：保持 3:4 比例，只做**等比例缩小**（不压扁），
     并且高度设上限，保证标题 + 「立即生成」按钮留在首屏。 */
  --cover-h: min(46vh, 420px);
  width: min(100%, calc(var(--cover-h) * 3 / 4));
  height: var(--cover-h);
  border-radius: var(--radius-xl);
  display: flex; align-items: center; justify-content: center;
  margin: 0 auto 14px;
  position: relative;
  overflow: hidden;
  background: rgba(255,255,255,0.02);
  border: 1px solid rgba(255,255,255,0.05);
  backdrop-filter: blur(30px);
  -webkit-backdrop-filter: blur(30px);
}

.detail-cover .detail-emoji {
  font-size: 6rem;
  filter: drop-shadow(0 12px 32px rgba(0,0,0,0.4));
}

.detail-meta { margin-bottom: 16px; }

.detail-meta h2 {
  font-size: 1.4rem;
  font-weight: 700;
  letter-spacing: -0.02em;
  margin-bottom: 8px;
}

.detail-meta .meta-row {
  display: flex; gap: 14px;
  font-size: 0.78rem;
  color: var(--text-secondary);
  margin-bottom: 12px;
}

.detail-meta .meta-desc {
  font-size: 0.82rem;
  color: rgba(255,255,255,0.45);
  line-height: 1.5;
}

.detail-cta {
  width: 100%;
  padding: 15px;
  border-radius: var(--radius-md);
  /* 2026-09-23 站长：立即生成按钮要醒目 —— 品牌薄荷渐变实心 + 深色字 + 光晕 */
  background: linear-gradient(135deg, #8de8bc, #35c98d);
  border: 0;
  color: #06291c;
  font-weight: 850;
  box-shadow: 0 10px 24px rgba(53,201,141,.32), inset 0 1px rgba(255,255,255,.5);
  font-size: 0.95rem;
  text-align: center;
  cursor: pointer;
  transition: background-color 0.2s, border-color 0.2s, color 0.2s, transform 0.2s, box-shadow 0.2s, opacity 0.2s;
  margin-bottom: 22px;
  letter-spacing: 0.01em;
}

.detail-cta:active {
  background: linear-gradient(135deg, #7de3b2, #2ab87e);
  transform: scale(0.98);
}

.detail-share-btn {
  flex: 0 0 56px;
  display: flex;
  align-items: center;
  justify-content: center;
  padding: 15px 0;
  border-radius: var(--radius-md);
  background: rgba(255,255,255,0.06);
  border: 1px solid rgba(255,255,255,0.1);
  color: #fff;
  cursor: pointer;
  margin-bottom: 32px;
}

.detail-share-btn .brand-svg-icon {
  width: 20px;
  height: 20px;
}

.detail-cta .brand-svg-icon {
  display: inline;
  width: 16px;
  height: 16px;
  margin-left: 4px;
  vertical-align: -2px;
}

/* Viral history */
.viral-section { margin-top: 8px; }

.viral-section .viral-title {
  font-size: 0.9rem;
  font-weight: 600;
  margin-bottom: 14px;
  color: rgba(255,255,255,0.6);
}

.viral-scroll {
  display: flex; gap: 10px;
  overflow-x: auto;
  padding-bottom: 8px;
  -webkit-overflow-scrolling: touch;
  scrollbar-width: none;
}

.viral-scroll::-webkit-scrollbar { display: none; }

.viral-card {
  flex-shrink: 0; width: 120px;
  border-radius: 14px; overflow: hidden;
  background: rgba(255,255,255,0.03);
  border: 1px solid rgba(255,255,255,0.05);
  backdrop-filter: blur(12px);
  -webkit-backdrop-filter: blur(12px);
  cursor: pointer;
  transition: transform 0.2s;
}

.viral-card:active { transform: scale(0.95); }

.viral-thumb {
  width: 100%; aspect-ratio: 3/4;
  display: flex; align-items: center; justify-content: center;
  font-size: 2.4rem;
  position: relative;
  overflow: hidden;
}
.viral-thumb-overlay {
  position: absolute; inset: 0;
  background: linear-gradient(to top, rgba(0,0,0,0.55) 0%, transparent 40%);
  pointer-events: none;
}
.viral-thumb-name {
  position: absolute; bottom: 14px; left: 6px; right: 6px;
  font-size: 0.6rem; font-weight: 600; color: #fff;
  text-shadow: 0 1px 2px rgba(0,0,0,0.4);
  line-height: 1.1; white-space: nowrap; overflow: hidden; text-overflow: ellipsis;
  z-index: 2;
}
.viral-thumb-uses {
  position: absolute; bottom: 3px; left: 6px;
  font-size: 0.5rem; font-weight: 500; color: rgba(255,255,255,0.6);
  text-shadow: 0 1px 2px rgba(0,0,0,0.4);
  z-index: 2;
}

.viral-name {
  padding: 7px 10px; font-size: 0.68rem;
  font-weight: 600; line-height: 1.2;
  color: rgba(255,255,255,0.8);
}

.viral-uses {
  padding: 0 10px 10px; font-size: 0.6rem;
  color: var(--text-muted);
}

/* Category chips (in templates view) */
.category-chips {
  display: flex; gap: 6px; overflow-x: auto;
  padding: 8px 0; margin-bottom: 12px;
  scrollbar-width: none;
}

.category-chips::-webkit-scrollbar { display: none; }

.chip {
  flex-shrink: 0;
  padding: 6px 14px;
  border-radius: var(--radius-full);
  font-size: 0.75rem; font-weight: 500;
  white-space: nowrap;
  background: rgba(255,255,255,0.03);
  color: var(--text-muted);
  border: 1px solid rgba(255,255,255,0.04);
  backdrop-filter: blur(8px);
  -webkit-backdrop-filter: blur(8px);
  cursor: pointer;
  transition: background-color 0.2s, border-color 0.2s, color 0.2s, transform 0.2s, box-shadow 0.2s, opacity 0.2s;
}

.chip.active {
  background: rgba(255,255,255,0.08);
  color: #fff;
  border-color: rgba(255,255,255,0.12);
}

.chip:active { transform: scale(0.96); }

/* 仅真实模版：某日无模版时的空态 */
.cards-row-empty {
  width: 84px; min-width: 84px; height: 112px; box-sizing: border-box;
  padding: 8px 6px; text-align: center;
  display: flex; align-items: center; justify-content: center;
  flex-shrink: 0;
  font-size: .56rem; line-height: 1.35; color: rgba(228,246,255,.35);
  border: 1px dashed rgba(158,223,255,.16); border-radius: 0;
}
/* [hidden] 兜底（2026-09-23 站长反馈：搜索按钮下方多出一个空框）。
   上面这条给 .cards-row-empty 声明了 display:flex，按 CSS 优先级会盖掉浏览器给
   [hidden] 的 display:none —— 于是「搜索无结果」的空态盒子即使带 hidden 也照样显示。
   这里的卡片区过滤（行/卡片/空态）都靠 hidden 属性切换，统一兜住。 */
#home-cards-area [hidden] { display: none !important; }

/* 2026-09-23 站长：手机版首页「筛选行压住站内小推送条」的错位。
   实测该行在首页容器内被算出了负的上外边距（-18px），把三个按钮顶到推送条上。
   这里在手机版把首页内的筛选行上边距钉死为 0（PC 端该行被搬进顶栏，不受影响）。 */
@media (max-width: 1023px) {
  body:not(.cms-mode) .home-container .region-selector { margin-top: 0 !important; }
}

/* ===== AdSense 内容区与页脚 ===== */
.home-info {
  max-width: 720px;
  margin: 34px auto 10px;
  padding: 0 18px;
}
.home-info h2 {
  font-size: 1.15rem;
  font-weight: 800;
  margin-bottom: 12px;
  color: var(--text);
}
.home-info p {
  font-size: 0.84rem;
  line-height: 1.8;
  color: var(--text-secondary);
  margin-bottom: 12px;
}
.home-site-footer {
  display: flex;
  flex-wrap: wrap;
  align-items: center;
  justify-content: center;
  gap: 14px;
  margin: 22px 0 10px;
  padding: 14px 18px;
  font-size: 0.72rem;
  color: var(--text-muted);
  border-top: 1px solid var(--border);
}
.home-site-footer a {
  color: var(--text-muted);
  text-decoration: underline;
}
.home-site-footer a:hover { color: var(--accent); }

/* 一句话介绍入口 + 弹窗 */
.home-about-teaser {
  display: block;
  margin: 22px auto 0;
  padding: 0;
  border: 0;
  border-radius: 0;
  background: transparent;
  color: rgba(140, 150, 150, 0.45);
  font-size: 0.58rem;
  font-weight: 400;
  font-family: inherit;
  cursor: pointer;
  line-height: 1.6;
  text-align: center;
  transition: color .2s;
}
.home-about-teaser:hover {
  color: rgba(140, 150, 150, 0.7);
}
.home-about-modal .home-about-card {
  max-width: 460px;
  max-height: 80vh;
  overflow-y: auto;
  padding: 24px 22px;
}
.home-about-card h2 {
  font-size: 1.15rem;
  font-weight: 800;
  margin-bottom: 12px;
}
.home-about-card p {
  font-size: 0.84rem;
  line-height: 1.85;
  color: var(--text-secondary);
  margin-bottom: 12px;
}

/* 首页站点介绍（SEO/AdSense 常驻正文保留，视觉上收敛为页尾轻量信息，不抢首屏） */
.home-seo-content {
  max-width: 640px;
  margin: 0 auto;
  padding: 14px 18px 4px;
  color: var(--text-secondary);
}
.home-seo-content h2 {
  font-size: 0.92rem;
  font-weight: 700;
  margin-bottom: 8px;
  color: var(--text-primary);
  text-align: center;
}
.home-seo-content h3 {
  font-size: 0.82rem;
  font-weight: 700;
  letter-spacing: 0.04em;
  margin: 14px 0 4px;
  color: var(--text-primary);
  text-align: center;
}
.home-seo-content p {
  font-size: 0.76rem;
  line-height: 1.75;
  color: var(--text-secondary);
  margin-bottom: 6px;
  text-align: center;
}
.home-seo-content details {
  border: none;
  border-top: 1px solid rgba(255, 255, 255, 0.07);
  border-radius: 0;
  padding: 6px 2px;
  margin: 0;
  background: transparent;
}
.home-seo-content summary {
  font-size: 0.78rem;
  font-weight: 500;
  cursor: pointer;
  color: var(--text-primary);
  list-style: none;
  display: flex;
  align-items: center;
  justify-content: space-between;
  gap: 12px;
}
.home-seo-content summary::-webkit-details-marker {
  display: none;
}
.home-seo-content summary::after {
  content: '＋';
  font-size: 0.7rem;
  line-height: 1;
  color: var(--text-secondary);
}
.home-seo-content details[open] summary::after {
  content: '－';
}
.home-seo-content details p {
  margin: 7px 0 0;
  text-align: left;
  font-size: 0.74rem;
  line-height: 1.75;
}

/* 视频模版角标（2026-09-18）：管理端选视频模型发布的模版，卡片上标出「▶ 视频」 */
.vid-badge {
  position: absolute;
  top: 6px;
  left: 6px;
  z-index: 3;
  display: inline-flex;
  align-items: center;
  gap: 3px;
  padding: 2px 7px;
  border-radius: 999px;
  background: linear-gradient(135deg, rgba(124, 58, 237, 0.95), rgba(236, 72, 153, 0.95));
  color: #fff;
  font-size: 0.58rem;
  font-weight: 800;
  letter-spacing: 0.02em;
  box-shadow: 0 2px 8px rgba(0, 0, 0, 0.35);
  pointer-events: none;
}
.vid-badge em { font-style: normal; }

/* 2026-09-19：首页卡片的视频角标从「顶部左上角」下移一行，并且收成小尺寸。
   热门榜/日期组的卡片只有 80-95px 宽：
   ① 原来「hot🔥 角标 + ▶视频 + Trending」三样挤在顶部一条线上，视频角标会把 Trending 文案压住；
   ② 带「Video」字样的胶囊在这点宽度里占了半张卡片，又大又抢眼（站长反馈「图标太大了」）。
   现在窄卡上只留一个 ▶ 小标（文字在模板列表那种宽卡片上才显示）。
   注意不能挪到封面底部：这些卡片是「图 + 标题」叠在一起，底部压着模板名字。 */
.glass-card-cover .vid-badge {
  top: 6px; left: 6px;
  padding: 2px 5px;
  font-size: 0.5rem;
  box-shadow: 0 1px 4px rgba(0, 0, 0, 0.3);
}
.glass-card-cover .vid-badge em { display: none; }
/* 窄卡右上角的 Trending 文案：左边界钉死在视频角标右侧（6px 内距 + 18px 圆标 + 余量），
   永远滑不到左上角 ▶ 的下面；宽度不够时省略号截断，不换行、不重叠。
   2026-09-27 站长：「我画圈的那里 有点挤要优化一下」——
   原来这里是 max-width: 52%（跟着卡片宽度缩的比例，卡片一窄就先把「Trending ↗」截掉），
   现在改成 left/right 双向夹紧：能用多少宽度就用多少，右对齐保持原来的视觉位置。 */
.glass-card-cover .card-trend {
  left: 25px; right: 7px;
  text-align: right;
  overflow: hidden; text-overflow: ellipsis; white-space: nowrap;
}

/* 视频模版弹窗已移出：模板列表卡片角标与首页同款 */
.template-card .thumb .vid-badge { top: 8px; bottom: auto; left: auto; right: 8px; }

/* 卡片悬停按钮（「用这个模版」）：手机端永不出现。
   桌面规则在 brand-v1.css 的 ≥1024px 里打开，手机端一行都不动。 */
.card-use-btn { display: none; }

/* 首页分类 chip 行 + 搜索结果计数：默认隐藏 —— 手机端一行都不动 */
.home-chips { display: none; }

.home-chip {
  height: 32px;
  padding: 0 14px;
  border-radius: var(--radius-full);
  background: rgba(255, 255, 255, 0.06);
  border: 1px solid rgba(255, 255, 255, 0.10);
  color: var(--text-secondary);
  font-size: 0.76rem;
  font-weight: 600;
  white-space: nowrap;
}

.home-chip:hover { color: var(--text-primary); }

.home-chip.on {
  background: #eafff6;
  border-color: transparent;
  color: #0c2a20;
  font-weight: 700;
}

.home-search-info {
  align-self: center;
  margin-left: 6px;
  color: var(--text-secondary);
  font-size: 0.74rem;
  letter-spacing: 0.02em;
}

/* ══════════════ 手机版首页：搜索按钮 + 三个筛选按钮统一规格（2026-09-23 站长定）══════════════
   站长三条要求：
     ① 国家分区按钮左边加一个放大镜，点开同一行出现搜索框（桌面端顶栏已有搜索框，这里隐藏）；
     ② 主题按钮与国家按钮**同等大小**；
     ③ 高亮突出效果**一致**——都抬 1px、同一档光影与描边强度，只保留色系差异（奶油 / 薄荷）。
   用 body:not(.cms-mode) + 三级选择器提高优先级，压住后加载的 brand-v1.css 同名规则。 */
body:not(.cms-mode) .region-selector .region-toggle,
body:not(.cms-mode) .region-selector .theme-toggle,
body:not(.cms-mode) .region-selector .home-search-toggle {
  min-height: 26px;
  padding: 4px 10px;
  font-size: 0.66rem;
  font-weight: 700;
  line-height: 1;
  border-radius: 999px;
}
body:not(.cms-mode) .region-selector .region-toggle,
body:not(.cms-mode) .region-selector .home-search-toggle {
  background: linear-gradient(145deg, rgba(255,239,214,.96), rgba(255,218,190,.88));
  border: 1px solid rgba(255,196,137,.2);
  color: #725747;
  box-shadow: inset 0 1px rgba(255,255,255,.72), 0 3px 9px rgba(91,48,24,.12);
}
body:not(.cms-mode) .region-selector .home-search-toggle {
  padding: 4px 9px;                /* 只有一个图标，左右收一点，视觉宽度与另两个接近 */
}
/* 同档高亮：奶油系（地区 / 搜索）与薄荷系（主题）用完全相同的位移与光影强度 */
body:not(.cms-mode) .region-selector .region-toggle:hover,
body:not(.cms-mode) .region-selector .home-search-toggle:hover,
body:not(.cms-mode) .region-selector .home-search-toggle.on,
body:not(.cms-mode) .theme-pop.open .theme-toggle {
  transform: translateY(-1px);
  box-shadow: inset 0 1px rgba(255,255,255,.92), 0 7px 18px rgba(255,138,75,.26);
}
body:not(.cms-mode) .region-selector .region-toggle:hover,
body:not(.cms-mode) .region-selector .home-search-toggle:hover,
body:not(.cms-mode) .region-selector .home-search-toggle.on {
  background: linear-gradient(145deg, #fff8ee, #ffe9cc);
  border-color: rgba(255,196,137,.5);
  color: #6b4632;
}
body:not(.cms-mode) .theme-pop.open .theme-toggle {
  background: linear-gradient(145deg, #b8f7e4, #7ce8c4);
  border-color: rgba(28,107,88,.45);
  color: #10503f;
  box-shadow: inset 0 1px rgba(255,255,255,.9), 0 7px 18px rgba(28,107,88,.26);
}
body:not(.cms-mode) .region-selector .theme-toggle {
  min-height: 26px;                /* 与国家按钮同高（与上方统一档位保持一致） */
}
body:not(.cms-mode) .region-selector .home-search-glyph,
body:not(.cms-mode) .region-selector .home-search-close-glyph { width: 13px; height: 13px; }

/* 搜索框：平时收起，点放大镜后取代整行（国家/主题按钮让位）。
   深色玻璃底 —— 站长明确不要白底输入框。 */
body:not(.cms-mode) .region-selector .home-search-pop { display: inline-flex; }
body:not(.cms-mode) .region-selector .home-search-bar {
  display: none;
  align-items: center;
  gap: 6px;
  flex: 1 1 auto;
  min-width: 0;
  padding: 0 5px 0 10px;
  min-height: 28px;              /* 与三个按钮同高（显式 border-box，div 默认不是） */
  box-sizing: border-box;
  border-radius: 999px;
  background: rgba(10, 22, 19, .62);
  border: 1px solid rgba(255,196,137,.28);
  box-shadow: inset 0 1px rgba(255,255,255,.06);
}
body:not(.cms-mode) .region-selector .home-search-pop.open .home-search-bar { display: inline-flex; }
body:not(.cms-mode) .region-selector .home-search-pop.open .home-search-toggle { display: none; }
body:not(.cms-mode) .region-selector.searching .region-pop:not(.home-search-pop) { display: none; }
body:not(.cms-mode) .region-selector.searching .home-search-pop { flex: 1 1 100%; }
body:not(.cms-mode) .region-selector .home-search-bar input {
  flex: 1 1 auto;
  min-width: 0;
  padding: 6px 0;
  border: 0;
  background: transparent;
  color: var(--pale-sky, #e8faf3);
  font-size: 0.68rem;
  font-weight: 600;
  outline: none;
  -webkit-appearance: none;
  appearance: none;
}
body:not(.cms-mode) .region-selector .home-search-bar input::placeholder { color: rgba(228,246,255,.42); }
body:not(.cms-mode) .region-selector .home-search-bar input::-webkit-search-cancel-button { display: none; -webkit-appearance: none; }
body:not(.cms-mode) .region-selector .home-search-close {
  display: inline-grid;
  place-items: center;
  flex: 0 0 24px;
  width: 24px; height: 24px;
  border: 0;
  border-radius: 50%;
  background: rgba(255,255,255,.10);
  color: rgba(228,246,255,.82);
  cursor: pointer;
}
body:not(.cms-mode) .region-selector .home-search-close:hover { background: rgba(255,255,255,.2); color: #fff; }

/* 搜索无结果时的空状态（文案里的 {q} 在 applyHomeFilter 里替换） */
#home-search-empty { text-align: center; }

/* 桌面端：顶栏已有搜索框，手机版这个放大镜不出现 */
@media (min-width: 1024px) {
  .home-search-pop { display: none !important; }
}

/* ===== AIPlaySkill（2026-10-09 站长）：首页常驻入口条 + 聊天式对话框 =====
   入口条放在 hero 轮播下面，用户一进首页就看得见；对话框按站长给的参考做成聊天式：
   消息流在上、输入框在下（附件芯片 + 左「+」+ 输入 + 右圆形发送）。
   只用 .aiplay-skill-* 前缀，绝不碰现有卡片/轮播的类名。 */
.aiplay-skill-entry {
  display: flex;
  align-items: center;
  gap: 10px;
  width: 100%;
  margin: 12px 0 4px;
  padding: 12px 14px;
  border: 1px solid var(--accent-border, rgba(50,189,134,.4));
  border-radius: 16px;
  background: linear-gradient(100deg, rgba(50,189,134,.20), rgba(50,189,134,.06) 62%, rgba(255,255,255,.04));
  color: #eafff6;
  font: inherit;
  text-align: left;
  cursor: pointer;
  transition: transform .15s ease, background .15s ease;
}
.aiplay-skill-entry:hover { background: linear-gradient(100deg, rgba(50,189,134,.28), rgba(50,189,134,.10) 62%, rgba(255,255,255,.06)); }
.aiplay-skill-entry:active { transform: scale(.99); }
.aiplay-skill-mark {
  flex: none;
  display: inline-grid;
  place-items: center;
  width: 34px; height: 34px;
  border-radius: 11px;
  background: var(--accent, #32bd86);
  color: #06301f;
  font-size: 1rem;
  box-shadow: 0 4px 14px rgba(50,189,134,.35);
}
.aiplay-skill-copy { flex: 1; min-width: 0; display: flex; flex-direction: column; gap: 2px; }
.aiplay-skill-copy strong { font-size: .92rem; font-weight: 800; letter-spacing: .2px; }
.aiplay-skill-copy em {
  font-style: normal;
  font-size: .74rem;
  color: rgba(226,255,244,.72);
  overflow: hidden;
  text-overflow: ellipsis;
  white-space: nowrap;
}
.aiplay-skill-go { flex: none; font-size: 1rem; color: rgba(226,255,244,.8); }

/* 弹层：手机端贴着底部整屏高（聊天式），桌面端居中卡片 */
.aiplay-skill-overlay {
  position: fixed;
  inset: 0;
  /* 层级（2026-10-09）：必须**低于**支付/收银台（.modal-overlay 150）—— 站长口径是
     「制作在这个聊天界面里完成」，付钱那一步的价格墙要盖在聊天框上面，而不是被聊天框挡住。
     同时要**高于**站内导航（顶栏 50 / 底栏 60），并且低于 toast（200）——
     聊天框里点「保存」后的「已保存」提示得看得见。 */
  z-index: 140;
  /* 键盘弹起时 JS 用 visualViewport 覆写高度/偏移；这两行是没有 JS 时的退化口径
     （dvh = 当前真实可见高度，和 template-upload-overlay 同一个目的） */
  height: 100vh;
  height: 100dvh;
  display: flex;
  align-items: flex-end;
  justify-content: center;
  background: rgba(4, 12, 9, .68);
  backdrop-filter: blur(6px);
  -webkit-backdrop-filter: blur(6px);
  opacity: 0;
  transition: opacity .18s ease;
}
.aiplay-skill-overlay.is-open { opacity: 1; }
.aiplay-skill-panel.aiplay-skill-chat {
  display: flex;
  flex-direction: column;
  width: 100%;
  max-width: 560px;
  /* 高度交给 .aiplay-skill-overlay（手机端 = visualViewport 的真实高度）：
     自己写死 92vh 会在键盘弹起时被顶出屏幕（2026-10-09 站长报障） */
  height: 100%;
  max-height: 100%;
  border-radius: 22px 22px 0 0;
  background: #0b1512;
  border: 1px solid rgba(50,189,134,.22);
  border-bottom: 0;
  box-shadow: 0 -10px 40px rgba(0,0,0,.5);
  overflow: hidden;
  transform: translateY(16px);
  transition: transform .2s ease;
}
.aiplay-skill-overlay.is-open .aiplay-skill-panel { transform: translateY(0); }
/* 聊天框打开时锁住背景滚动（手机上否则会和键盘较劲，把整页顶上去） */
@media (max-width: 1023px) {
  body.aiplay-skill-open { overflow: hidden; }
}
@media (min-width: 1024px) {
  .aiplay-skill-overlay { align-items: center; }
  .aiplay-skill-panel.aiplay-skill-chat {
    height: auto;
    max-height: 78vh;
    min-height: 460px;
    border-radius: 22px;
    border-bottom: 1px solid rgba(50,189,134,.22);
  }
}

.aiplay-skill-chat-head {
  flex: none;
  display: flex;
  align-items: center;
  gap: 10px;
  padding: 14px 14px 12px;
  border-bottom: 1px solid rgba(255,255,255,.06);
  background: rgba(255,255,255,.02);
}
.aiplay-skill-chat-title { flex: 1; min-width: 0; }
.aiplay-skill-chat-title strong { display: block; font-size: .95rem; color: #f2fffa; }
.aiplay-skill-chat-title em {
  font-style: normal;
  font-size: .72rem;
  color: rgba(226,255,244,.6);
}
.aiplay-skill-close {
  flex: none;
  width: 30px; height: 30px;
  border: 0; border-radius: 50%;
  background: rgba(255,255,255,.10);
  color: #dff7ec;
  font-size: 1.05rem;
  line-height: 1;
  cursor: pointer;
}

/* 消息流 */
.aiplay-skill-thread {
  flex: 1;
  min-height: 0;
  overflow-y: auto;
  -webkit-overflow-scrolling: touch;
  padding: 14px 14px 6px;
  display: flex;
  flex-direction: column;
  gap: 12px;
}
.aiplay-skill-note { display: flex; gap: 10px; align-items: flex-start; }
.aiplay-skill-note .aiplay-skill-mark { width: 28px; height: 28px; border-radius: 9px; font-size: .8rem; }
.aiplay-skill-note p {
  margin: 0;
  padding: 10px 12px;
  border-radius: 14px 14px 14px 4px;
  background: rgba(255,255,255,.06);
  color: rgba(232,255,246,.86);
  font-size: .8rem;
  line-height: 1.5;
}

/* 用户这一条：右对齐、图片在上、气泡在下（对齐站长参考图） */
.aiplay-skill-msg {
  display: flex;
  flex-direction: column;
  align-items: flex-end;
  gap: 6px;
}
.aiplay-skill-msg-imgs { display: flex; gap: 6px; justify-content: flex-end; flex-wrap: wrap; }
.aiplay-skill-msg-imgs img {
  width: 84px; height: 84px;
  object-fit: cover;
  border-radius: 14px;
  border: 1px solid rgba(255,255,255,.10);
}
.aiplay-skill-msg-text {
  max-width: 78%;
  padding: 9px 13px;
  border-radius: 16px 16px 4px 16px;
  background: linear-gradient(180deg, #1f4fb8, #1a3f96);
  color: #fff;
  font-size: .84rem;
  line-height: 1.4;
  word-break: break-word;
}

.aiplay-skill-hint {
  padding: 9px 11px;
  border-radius: 12px;
  font-size: .76rem;
  line-height: 1.45;
  background: rgba(50,189,134,.14);
  color: #d9f7ea;
}
.aiplay-skill-hint.is-warn { background: rgba(255,138,92,.16); color: #ffd9c6; }
.aiplay-skill-hint[hidden] { display: none; }

.aiplay-skill-candidates { display: flex; flex-direction: column; gap: 8px; }
.aiplay-skill-candidates[hidden] { display: none; }
.aiplay-skill-cand-title { font-size: .74rem; color: rgba(226,255,244,.7); }
.aiplay-skill-cand {
  display: flex;
  align-items: center;
  gap: 10px;
  width: 100%;
  padding: 8px;
  border: 1px solid rgba(255,255,255,.08);
  border-radius: 12px;
  background: rgba(255,255,255,.04);
  color: #eafff6;
  font: inherit;
  text-align: left;
  cursor: pointer;
}
.aiplay-skill-cand:hover { border-color: var(--accent-border, rgba(50,189,134,.4)); }
.aiplay-skill-cand img, .aiplay-skill-cand-ph {
  flex: none;
  width: 42px; height: 42px;
  border-radius: 9px;
  object-fit: cover;
  background: rgba(255,255,255,.08);
}
.aiplay-skill-cand-copy { flex: 1; min-width: 0; display: flex; flex-direction: column; gap: 2px; }
.aiplay-skill-cand-copy strong { font-size: .82rem; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
.aiplay-skill-cand-copy em { font-style: normal; font-size: .66rem; color: rgba(226,255,244,.5); }
.aiplay-skill-cand-rank { flex: none; font-size: .68rem; color: rgba(226,255,244,.42); }

/* 输入框：附件芯片在上，下面是「+ / 输入 / 圆形发送」 */
.aiplay-skill-composer {
  flex: none;
  padding: 10px 12px calc(12px + env(safe-area-inset-bottom, 0px));
  border-top: 1px solid rgba(255,255,255,.06);
  background: rgba(255,255,255,.02);
}
.aiplay-skill-attach {
  display: flex;
  align-items: center;
  gap: 8px;
  overflow-x: auto;
  -webkit-overflow-scrolling: touch;
  padding-bottom: 2px;
}
.aiplay-skill-attach:empty { display: none; }
.aiplay-skill-chip {
  position: relative;
  flex: none;
  width: 58px; height: 58px;
  border-radius: 14px;
  overflow: hidden;
  border: 1px solid rgba(255,255,255,.12);
  margin: 4px 4px 4px 0;
}
.aiplay-skill-chip img { width: 100%; height: 100%; object-fit: cover; display: block; }
.aiplay-skill-chip-del {
  position: absolute;
  top: 2px; right: 2px;
  width: 19px; height: 19px;
  border: 0; border-radius: 50%;
  background: rgba(0,0,0,.62);
  color: #fff;
  font-size: .78rem;
  line-height: 1;
  cursor: pointer;
}
.aiplay-skill-attach-count { flex: none; font-size: .7rem; color: rgba(226,255,244,.5); }

.aiplay-skill-inputrow { display: flex; align-items: center; gap: 8px; margin-top: 8px; }
.aiplay-skill-plus {
  flex: none;
  width: 34px; height: 34px;
  border: 0; border-radius: 50%;
  background: rgba(255,255,255,.08);
  color: #dff7ec;
  font-size: 1.2rem;
  line-height: 1;
  cursor: pointer;
}
.aiplay-skill-plus:hover { background: rgba(255,255,255,.16); }
/* 注意特异性：brand-v1.css 里有 `body:not(.cms-mode) input { background: var(--bg-input); color: var(--text-primary) }`（0,2,1），
   而且它在 index.html 里排在 home.css 之后 —— 只写 `.aiplay-skill-name`（0,1,0）会被它压掉，
   结果是**深色聊天框里冒出一个白底输入框、浅色文字直接看不见**。这里必须用 (0,3,1) 顶回去。 */
body:not(.cms-mode) .aiplay-skill-panel .aiplay-skill-name {
  flex: 1;
  min-width: 0;
  padding: 10px 12px;
  border-radius: 12px;
  border: 1px solid rgba(255,255,255,.10);
  background: rgba(255,255,255,.06);
  color: #f2fffa;
  font: inherit;
  /* 必须是 16px：iOS Safari 聚焦到「字号 < 16px」的输入框时会自动放大整个页面
     （站长 2026-10-09 报障「输入模版名时画面完全变了、很不美观」就是这一条 ——
     页面被放大后两边都被裁掉，面板看起来宽出屏幕）。改小字号就一定会复发。 */
  font-size: 16px;
}
body:not(.cms-mode) .aiplay-skill-panel .aiplay-skill-name::placeholder { color: rgba(226,255,244,.42); }
body:not(.cms-mode) .aiplay-skill-panel .aiplay-skill-name:focus { outline: none; border-color: var(--accent, #32bd86); }
.aiplay-skill-send {
  flex: none;
  display: inline-grid;
  place-items: center;
  width: 38px; height: 38px;
  border: 0;
  border-radius: 50%;
  /* 发送键与「用户这条」气泡同色系（站长 2026-10-09 的参考图里两者都是蓝色）：
     蓝色在整站薄荷绿里是唯一的「这是你说的话」语义，不再和站内主色混着用。 */
  background: #2f7df6;
  color: #fff;
  cursor: pointer;
}
.aiplay-skill-send svg { width: 20px; height: 20px; }
.aiplay-skill-send:disabled { opacity: .5; cursor: default; }
.aiplay-skill-send:not(:disabled):active { transform: scale(.95); }

/* ===== AIPlaySkill 动效（2026-10-09 站长给的动效口径）=====
   一、发送与吸附：输入区收缩下沉 → 照片沿曲线飞上顶部吸附成悬浮缩略卡（Send & Anchor）
   二、气泡 + 骨架卡：消息气泡滑入，下方展开圆角骨架卡（Message Bubble & Skeleton）
   三、渐显与全屏：出图在骨架卡原地渐显缩放（Fade-in & Scale-up），点开时从卡片弹性扩散到全屏
      （Shared Element Transition / Spring Animation） */
.aiplay-skill-anchor {
  flex: none;
  align-self: center;
  display: flex;
  align-items: center;
  gap: 8px;
  margin: 0 12px 8px;
  padding: 5px 10px 5px 6px;
  border-radius: 999px;
  background: rgba(255,255,255,.06);
  border: 1px solid rgba(50,189,134,.22);
  box-shadow: 0 6px 18px rgba(0,0,0,.28);
  animation: aiplay-skill-anchor-in .34s cubic-bezier(.2,1.12,.3,1) both;
}
.aiplay-skill-anchor[hidden] { display: none; }
.aiplay-skill-anchor-thumbs { display: flex; }
.aiplay-skill-anchor-thumbs img {
  width: 26px; height: 26px;
  border-radius: 9px;
  object-fit: cover;
  border: 1px solid rgba(255,255,255,.16);
  margin-left: -9px;
  display: block;
  transition: opacity .18s ease;
}
.aiplay-skill-anchor-thumbs img:first-child { margin-left: 0; }
.aiplay-skill-anchor-name {
  max-width: 132px;
  font-size: .72rem;
  color: rgba(232,255,246,.82);
  overflow: hidden;
  text-overflow: ellipsis;
  white-space: nowrap;
  transition: opacity .18s ease;
}
/* 量终点位置时先把内容藏住（否则会看到一次闪烁） */
.aiplay-skill-anchor.is-measuring .aiplay-skill-anchor-thumbs img,
.aiplay-skill-anchor.is-measuring .aiplay-skill-anchor-name { opacity: 0; }
/* 飞行中的缩略图（position: fixed 的克隆体，动画结束即销毁） */
.aiplay-skill-ghost {
  position: fixed;
  z-index: 3400;
  border-radius: 14px;
  overflow: hidden;
  pointer-events: none;
  will-change: transform, opacity;
}
.aiplay-skill-ghost img { width: 100%; height: 100%; object-fit: cover; display: block; }
@keyframes aiplay-skill-anchor-in {
  from { opacity: 0; transform: translateY(-6px) scale(.9); }
  to { opacity: 1; transform: translateY(0) scale(1); }
}

/* 输入区收缩（发送后）：整块平滑收起，给「已发送 + 生成中」让出位置 */
.aiplay-skill-composer {
  max-height: 240px;
  transition: max-height .28s cubic-bezier(.2,.9,.3,1), opacity .2s ease, transform .28s cubic-bezier(.2,.9,.3,1), padding .28s ease;
}
.aiplay-skill-composer.is-collapsed {
  max-height: 0;
  padding-top: 0;
  padding-bottom: 0;
  opacity: 0;
  transform: translateY(14px);
  overflow: hidden;
  pointer-events: none;
}
.aiplay-skill-plus:disabled { opacity: .45; cursor: default; }

/* 消息滑入（Micro-interaction）：用户这条从下方抬起淡入 */
.aiplay-skill-msg { animation: aiplay-skill-msg-in .3s cubic-bezier(.2,.9,.3,1) both; }
.aiplay-skill-bot { align-items: flex-start; }
@keyframes aiplay-skill-msg-in {
  from { opacity: 0; transform: translateY(10px); }
  to { opacity: 1; transform: translateY(0); }
}

/* 骨架卡（AI 内容占位）：圆角块 + 流光，下面挂真实进度条与状态 */
.gen-waiting-overlay.gen-waiting-inline {
  position: static;
  inset: auto;
  z-index: auto;
  display: block;
  width: 100%;
  max-width: 300px;
  padding: 12px;
  border-radius: 18px;
  background: rgba(255,255,255,.05);
  border: 1px solid rgba(50,189,134,.18);
  animation: aiplay-skill-msg-in .34s cubic-bezier(.2,.9,.3,1) both;
  backdrop-filter: none;
  -webkit-backdrop-filter: none;
}
.gen-waiting-inline-skel {
  position: relative;
  height: 168px;
  border-radius: 14px;
  overflow: hidden;
  margin-bottom: 10px;
  background: linear-gradient(155deg, rgba(255,255,255,.09), rgba(255,255,255,.03));
}
.gen-waiting-inline-skel::after {
  content: '';
  position: absolute;
  inset: 0;
  transform: translateX(-100%);
  background: linear-gradient(100deg, transparent 18%, rgba(255,255,255,.10) 42%, rgba(50,189,134,.16) 52%, transparent 78%);
  animation: aiplay-skill-shimmer 1.55s linear infinite;
}
@keyframes aiplay-skill-shimmer { to { transform: translateX(100%); } }
.gen-waiting-overlay.gen-waiting-inline .gen-waiting-inline-head {
  display: flex;
  align-items: center;
  gap: 8px;
  margin-bottom: 9px;
}
.gen-waiting-inline-title { font-size: .78rem; line-height: 1.35; color: #e6fff5; }
.gen-waiting-spin {
  flex: none;
  width: 13px; height: 13px;
  border-radius: 50%;
  border: 2px solid rgba(50,189,134,.26);
  border-top-color: #32bd86;
  animation: aiplay-skill-spin .8s linear infinite;
}
@keyframes aiplay-skill-spin { to { transform: rotate(360deg); } }
.gen-waiting-overlay.gen-waiting-inline .gen-waiting-bar { margin-bottom: 8px; background: rgba(255,255,255,.10); }
.gen-waiting-inline-note { font-size: .68rem; line-height: 1.45; color: rgba(226,255,244,.52); }

/* 结果卡（聊天流内）：渐显 + 轻微缩放，点开走全屏共享元素转场 */
.aiplay-skill-result { width: 100%; max-width: 268px; animation: aiplay-skill-reveal .44s cubic-bezier(.2,.9,.3,1) both; }
@keyframes aiplay-skill-reveal {
  from { opacity: 0; transform: scale(.955); }
  to { opacity: 1; transform: scale(1); }
}
.aiplay-skill-result img,
.aiplay-skill-result video {
  width: 100%;
  display: block;
  border-radius: 16px;
  border: 1px solid rgba(255,255,255,.10);
  background: #000;
}
.aiplay-skill-result img { cursor: zoom-in; }
.aiplay-skill-result-btn {
  width: 100%;
  margin-top: 8px;
  padding: 9px 12px;
  border: 0;
  border-radius: 12px;
  background: #2f7df6;
  color: #fff;
  font: inherit;
  font-size: .78rem;
  font-weight: 600;
  cursor: pointer;
}
.aiplay-skill-result-btn:active { transform: scale(.985); }
.aiplay-skill-saved-hint { font-size: .68rem; color: rgba(226,255,244,.5); }

/* 全屏预览（Shared Element Transition）：从卡片矩形弹性扩散到全屏，关闭时反向收回 */
.aiplay-skill-lightbox {
  position: fixed;
  inset: 0;
  z-index: 3500;
  background: rgba(3,8,6,.0);
  transition: background .26s ease;
}
.aiplay-skill-lightbox.is-open { background: rgba(3,8,6,.92); }
.aiplay-skill-lightbox-box {
  position: fixed;
  overflow: hidden;
  border-radius: 16px;
  will-change: width, height, top, left;
}
.aiplay-skill-lightbox-box img,
.aiplay-skill-lightbox-box video { width: 100%; height: 100%; object-fit: contain; display: block; }
.aiplay-skill-lightbox-close {
  position: fixed;
  top: max(14px, env(safe-area-inset-top));
  right: 14px;
  width: 38px; height: 38px;
  border: 0;
  border-radius: 50%;
  background: rgba(255,255,255,.14);
  color: #fff;
  font-size: 1.15rem;
  line-height: 1;
  cursor: pointer;
}
