/* =========================================================
   VOICE REVEAL（Voice専用：80px監視開始→viewport入ったら発火）
   - opacity + translateY + blur
   - 1回だけ（JSで is-revealed 付与）
========================================================= */

.voice-reveal {
  opacity: 0;
  transform: translateY(22px);
  filter: blur(10px);
  transition:
    opacity 800ms ease,
    transform 800ms ease,
    filter 900ms ease;
  will-change: opacity, transform, filter;
}

/* 発火後：クラス順/子孫どっちでも効くようにする */
.voice-reveal.is-revealed,
.is-revealed .voice-reveal {
  opacity: 1;
  transform: translateY(0);
  filter: blur(0);
}

/* モーション軽減 */
@media (prefers-reduced-motion: reduce) {
  .voice-reveal,
  .voice-reveal.is-revealed,
  .is-revealed .voice-reveal {
    opacity: 1 !important;
    transform: none !important;
    filter: none !important;
    transition: none !important;
  }
}
