.hero-sr-copy {
  position: absolute; width: 1px; height: 1px; padding: 0; margin: -1px;
  overflow: hidden; clip-path: inset(50%); white-space: nowrap; border: 0;
}
.hero-brand-name { white-space: nowrap; }

/* 图文联动：每张幻灯片配一组文案，但文案放在图片淡变层之外。
   Swiper 的 crossFade 是 1.8s，若文案在 slide 内，会跟着被压到 20% 亮度，
   切换时像「灰着淡入」，与首屏满亮度逐字上浮不一样。
   独立成层后每张的逐字动画都和首屏第一条完全一致。 */
.hero-copy-track {
  position: absolute; inset: 0; z-index: 2; pointer-events: none;
}
.hero-copy-track .hero-copy { opacity: 0; visibility: hidden; }
/* 脚本未接管时至少露出第一组，避免无文字 */
.hero-copy-track:not([data-ready]) .hero-copy:first-child { opacity: 1; visibility: visible; }
.hero-copy-track .hero-copy.is-active { opacity: 1; visibility: visible; }

.hero-chars-ready .hero-char {
  display: inline-block;
  opacity: 0;
  transform: translateY(16px);
}
.hero-chars-playing .hero-char {
  animation: hero-character-enter 480ms cubic-bezier(.22, 1, .36, 1) var(--char-delay, 0ms) both;
}
@keyframes hero-character-enter {
  from { opacity: 0; transform: translateY(16px); }
  to { opacity: 1; transform: translateY(0); }
}
@media (prefers-reduced-motion: reduce) {
  .hero-chars-ready .hero-char { opacity: 1; transform: none; animation: none; }
}
