/*==========================================================
FTN PLATFORM
Animations
Version 1.0
==========================================================*/

@keyframes ftnFadeIn {
  from {
    opacity: 0;
  }

  to {
    opacity: 1;
  }
}

@keyframes ftnSlideUp {
  from {
    opacity: 0;
    transform: translateY(18px);
  }

  to {
    opacity: 1;
    transform: translateY(0);
  }
}

@keyframes ftnPulse {
  0% {
    box-shadow: 0 0 0 0 rgba(39, 174, 96, 0.45);
  }

  70% {
    box-shadow: 0 0 0 10px rgba(39, 174, 96, 0);
  }

  100% {
    box-shadow: 0 0 0 0 rgba(39, 174, 96, 0);
  }
}

@keyframes ftnRedPulse {
  0% {
    box-shadow: 0 0 0 0 rgba(215, 25, 32, 0.35);
  }

  70% {
    box-shadow: 0 0 0 14px rgba(215, 25, 32, 0);
  }

  100% {
    box-shadow: 0 0 0 0 rgba(215, 25, 32, 0);
  }
}

@keyframes ftnShimmer {
  0% {
    background-position: -220% 0;
  }

  100% {
    background-position: 220% 0;
  }
}

body {
  animation: ftnFadeIn 0.45s ease both;
}

.panel,
.executive-hero,
.broadcast-header,
.platform-footer {
  animation: ftnSlideUp 0.45s ease both;
}

.kpi-card,
.intelligence-card,
.analytics-placeholder,
.form-card,
.report-card,
.labs-grid article,
.briefing-card {
  will-change: transform;
}

.live-dot {
  animation: ftnPulse 1.8s infinite;
}

.primary:hover {
  animation: ftnRedPulse 1.4s ease;
}

.success-panel .badge {
  animation: ftnPulse 1.8s infinite;
}

.loading-state {
  position: relative;
  overflow: hidden;
}

.loading-state::after {
  content: "";
  position: absolute;
  inset: 0;
  background:
    linear-gradient(
      90deg,
      transparent,
      rgba(255, 255, 255, 0.08),
      transparent
    );
  background-size: 220% 100%;
  animation: ftnShimmer 1.6s infinite;
}

.report-card:nth-child(1) {
  animation-delay: 0.05s;
}

.report-card:nth-child(2) {
  animation-delay: 0.1s;
}

.report-card:nth-child(3) {
  animation-delay: 0.15s;
}

.report-card:nth-child(4) {
  animation-delay: 0.2s;
}

.report-card:nth-child(5) {
  animation-delay: 0.25s;
}

.report-card {
  animation: ftnSlideUp 0.35s ease both;
}

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