/* ============================================
   ÍCARO RB — Animations
   ============================================ */

/* Preloader pulse */
@keyframes pulse {
  0%, 100% { transform: scale(1); opacity: 1; }
  50% { transform: scale(1.12); opacity: .7; }
}

/* Reveal on scroll: base states */
.reveal-up, .reveal-fade {
  opacity: 0;
}
.reveal-up {
  transform: translateY(28px);
  transition: opacity .65s var(--ease-smooth), transform .65s var(--ease-smooth);
  transition-delay: var(--delay, 0s);
}
.reveal-fade {
  transform: scale(.96);
  transition: opacity .65s var(--ease-smooth), transform .65s var(--ease-smooth);
  transition-delay: var(--delay, 0s);
}
.reveal-up.is-visible, .reveal-fade.is-visible {
  opacity: 1;
  transform: none;
}

/* Opacity-only fade — safe to combine with an element that also needs
   a positioning transform (e.g. the globe's translateY centering) */
.fade-in {
  opacity: 0;
  transition: opacity 1.1s var(--ease-smooth);
  transition-delay: var(--delay, 0s);
}
.fade-in.is-visible { opacity: 1; }

/* Hero headline: line-mask reveal */
.reveal-line { overflow: hidden; }
.reveal-line {
  opacity: 1;
  transform: none;
}
.reveal-line > .reveal-line-inner {
  display: block;
  transform: translateY(110%);
  transition: transform 1s var(--ease-smooth);
}
.hero__title.is-visible .reveal-line:nth-child(1) .reveal-line-inner { transition-delay: .15s; }
.hero__title.is-visible .reveal-line:nth-child(2) .reveal-line-inner { transition-delay: .32s; }
.hero__title.is-visible .reveal-line-inner { transform: translateY(0); }

/* Floating clouds */
@keyframes float-cloud-1 {
  0%, 100% { transform: translate(0, 0); }
  50% { transform: translate(2vw, -1.4vh); }
}
@keyframes float-cloud-2 {
  0%, 100% { transform: translate(0, 0); }
  50% { transform: translate(-2.4vw, 1.6vh); }
}

/* Scroll cue */
@keyframes scroll-cue {
  0% { opacity: 0; transform: translateY(0); }
  40% { opacity: 1; }
  100% { opacity: 0; transform: translateY(14px); }
}

/* Globe rotation — slow, continuous, subtle */
@keyframes globe-self-rotate {
  from { transform: rotate(0deg); }
  to { transform: rotate(360deg); }
}

/* Country pill organic float — each pill is horizontally centered on
   its anchor point (translateX(-50%)), so that offset is baked into
   every keyframe alongside the small floating drift. */
@keyframes float-a {
  0%, 100% { transform: translateX(-50%) translate(0,0); }
  33% { transform: translateX(-50%) translate(6px, -10px); }
  66% { transform: translateX(-50%) translate(-4px, 6px); }
}
@keyframes float-b {
  0%, 100% { transform: translateX(-50%) translate(0,0); }
  33% { transform: translateX(-50%) translate(-8px, 8px); }
  66% { transform: translateX(-50%) translate(5px, -6px); }
}
@keyframes float-c {
  0%, 100% { transform: translateX(-50%) translate(0,0); }
  33% { transform: translateX(-50%) translate(7px, 7px); }
  66% { transform: translateX(-50%) translate(-6px, -8px); }
}
.float-a { animation: float-a 7s ease-in-out infinite; }
.float-b { animation: float-b 8.5s ease-in-out infinite; }
.float-c { animation: float-c 9.5s ease-in-out infinite; }

/* Infinite marquee */
@keyframes marquee-scroll {
  from { transform: translateX(0); }
  to { transform: translateX(-50%); }
}

/* Coverage pins subtle float + fade-in stagger */
.coverage-pin {
  opacity: 0;
  transform: translateY(16px);
  transition: opacity .8s var(--ease-smooth), transform .8s var(--ease-smooth);
}
.coverage-pin.is-visible {
  opacity: 1;
  transform: translateY(0);
  animation: pin-bob 6s ease-in-out infinite;
  animation-delay: .8s;
}
@keyframes pin-bob {
  0%, 100% { transform: translateY(0); }
  50% { transform: translateY(-8px); }
}

/* Plane drift */
@keyframes plane-drift {
  0%, 100% { transform: translate(0,0) rotate(0deg); }
  50% { transform: translate(2vw, -1.2vh) rotate(-2deg); }
}

/* Reduced motion */
@media (prefers-reduced-motion: reduce) {
  *, *::before, *::after {
    animation-duration: .001ms !important;
    animation-iteration-count: 1 !important;
    transition-duration: .001ms !important;
    scroll-behavior: auto !important;
  }
}

/* Ajuste aprobado: con movimiento reducido se conserva el fundido de opacidad
   y se elimina todo desplazamiento y toda transformacion. */
@media (prefers-reduced-motion: reduce) {
  .reveal-up, .reveal-fade, .fade-in {
    transform: none !important;
    transition: opacity .4s ease !important;
  }
}
