/* Micro-animações em CSS (baratas, rodam na GPU).
   As animações de scroll ficam em js/animations.js (GSAP). */

@keyframes moon-breathe {
  0%, 100% { transform: scale(1); filter: brightness(1); }
  50% { transform: scale(1.045); filter: brightness(1.12); }
}
@keyframes bats-fly {
  0% { transform: translate(-30vw, 0) scale(.9); }
  25% { transform: translate(20vw, -18px) scale(.95); }
  50% { transform: translate(60vw, 10px) scale(1); }
  75% { transform: translate(95vw, -14px) scale(.95); }
  100% { transform: translate(130vw, 0) scale(.9); }
}
@keyframes fog-drift {
  from { background-position-x: 0; }
  to { background-position-x: -1000px; }
}
@keyframes smoke-rise {
  0%, 100% { transform: translate(0, 0) scale(1); opacity: .6; }
  50% { transform: translate(-3%, -5%) scale(1.06); opacity: .85; }
}
@keyframes lights-pulse {
  0%, 100% { opacity: .85; filter: brightness(1); }
  50% { opacity: 1; filter: brightness(1.35); }
}
@keyframes lantern-flicker {
  0%, 100% { opacity: .95; filter: brightness(1); }
  20% { opacity: .8; filter: brightness(.9); }
  23% { opacity: 1; filter: brightness(1.3); }
  60% { opacity: .9; filter: brightness(1.1); }
}
@keyframes glow-breathe {
  0%, 100% { opacity: .75; transform: scale(1); }
  50% { opacity: 1; transform: scale(1.06); }
}
@keyframes card-glow {
  0%, 100% { box-shadow: 0 0 0 1px rgba(255, 90, 40, .6), 0 0 30px rgba(255, 42, 26, .5), 0 0 90px rgba(255, 90, 30, .3); }
  50% { box-shadow: 0 0 0 1px rgba(255, 120, 50, .9), 0 0 42px rgba(255, 42, 26, .75), 0 0 120px rgba(255, 90, 30, .45); }
}
@keyframes btn-pulse {
  0%, 100% { filter: drop-shadow(0 0 14px rgba(255, 60, 20, .5)); }
  50% { filter: drop-shadow(0 0 26px rgba(255, 90, 30, .9)); }
}
@keyframes blink { 50% { opacity: .2; } }
@keyframes ember { 50% { box-shadow: 0 0 16px 7px rgba(255, 140, 60, 1); } }
@keyframes scroll-dot {
  0% { transform: translateY(0); opacity: 1; }
  80% { transform: translateY(14px); opacity: 0; }
  100% { opacity: 0; }
}

/* Reveal: sem GSAP, usa IntersectionObserver (main.js) */
.js .reveal { opacity: 0; transform: translateY(28px); transition: opacity .9s ease, transform .9s cubic-bezier(.2, .8, .2, 1); }
.js .reveal.is-in { opacity: 1; transform: none; }
/* Com GSAP, ele controla o reveal */
.gsap .reveal { transition: none; transform: none; opacity: 1; }

/* Sem JS: a transição mostra as duas frases empilhadas */
html:not(.js) .dusk { height: auto; }
html:not(.js) .dusk__sticky { position: relative; height: auto; padding: 120px 0; }
html:not(.js) .dusk__line { grid-area: auto; }
html:not(.js) .dusk__line--2 { opacity: 1; }

@media (prefers-reduced-motion: reduce) {
  *, *::before, *::after { animation: none !important; transition-duration: .01ms !important; scroll-behavior: auto !important; }
  .js .reveal { opacity: 1; transform: none; }
}
