/* ==========================================================================
   JS NEXA HUB — ANIMATIONS & REVEAL SYSTEM
   Restrained, Hardware-Accelerated, Zero-Jank
   ========================================================================== */

/* --- Scroll Reveal States (Subtle, calm, intentional) --- */
[data-reveal] {
  opacity: 0;
  transform: translateY(14px);
  transition: opacity 0.45s cubic-bezier(0.16, 1, 0.3, 1),
              transform 0.45s cubic-bezier(0.16, 1, 0.3, 1);
  will-change: opacity, transform;
}

[data-reveal="left"] {
  transform: translateX(-18px);
}

[data-reveal="right"] {
  transform: translateX(18px);
}

[data-reveal="scale"] {
  transform: scale(0.98);
}

[data-reveal].revealed {
  opacity: 1;
  transform: translate(0, 0) scale(1);
}

/* Stagger Delays */
.delay-50  { transition-delay: 0.05s; }
.delay-100 { transition-delay: 0.10s; }
.delay-150 { transition-delay: 0.15s; }
.delay-200 { transition-delay: 0.20s; }
.delay-250 { transition-delay: 0.25s; }
.delay-300 { transition-delay: 0.30s; }
.delay-400 { transition-delay: 0.40s; }
.delay-500 { transition-delay: 0.50s; }

/* Parallax Elements Smoothing */
[data-parallax] {
  will-change: transform;
}

.parallax-layer {
  will-change: transform;
  transition: transform 0.1s linear;
}

/* Subtle Floating Animation for Ambient Cards */
@keyframes subtle-float-1 {
  0%, 100% { transform: translateY(0); }
  50% { transform: translateY(-4px); }
}

@keyframes subtle-float-2 {
  0%, 100% { transform: translateY(0); }
  50% { transform: translateY(4px); }
}

.float-slow {
  animation: subtle-float-1 8s ease-in-out infinite;
}

.float-slow-alt {
  animation: subtle-float-2 9s ease-in-out infinite;
}

/* Loading Shimmer for Interactive Components */
@keyframes shimmer {
  0% { background-position: -200% 0; }
  100% { background-position: 200% 0; }
}

.shimmer-active {
  background: linear-gradient(90deg, rgba(255,255,255,0.02) 25%, rgba(255,255,255,0.06) 50%, rgba(255,255,255,0.02) 75%);
  background-size: 200% 100%;
  animation: shimmer 2s infinite;
}

/* Neutralized AI artifacts for backward compatibility */
.ambient-glow-pulse {
  display: none !important;
}

.laser-rule {
  border: none;
  border-top: 1px solid var(--border-subtle);
}

/* Pulse Dot for Live Telemetry / Status Indicator */
@keyframes pulseDot {
  0%, 100% {
    opacity: 1;
    transform: scale(1);
  }
  50% {
    opacity: 0.5;
    transform: scale(0.9);
  }
}

.pulse-dot {
  display: inline-block;
  width: 6px;
  height: 6px;
  border-radius: 50%;
  background-color: var(--accent-primary);
  animation: pulseDot 2s ease-in-out infinite;
}

/* --- Accessibility: Prefers Reduced Motion --- */
@media (prefers-reduced-motion: reduce) {
  *, *::before, *::after {
    animation-duration: 0.001ms !important;
    animation-iteration-count: 1 !important;
    transition-duration: 0.001ms !important;
  }

  [data-reveal] {
    opacity: 1 !important;
    transform: none !important;
    transition: none !important;
  }

  [data-parallax], .parallax-layer, .float-slow, .float-slow-alt,
  .pulse-dot, .shimmer-active {
    transform: none !important;
    animation: none !important;
  }
}
