/* ============================================
   EYA Concept — Animations & Effects
   All keyframes, animation classes, and
   custom visual effects from V8
   ============================================ */

/* === GHOST BORDERS === */
.ghost-border { border: 1px solid rgba(59, 130, 246, 0.15); }

.ghost-border-glow {
  border: 1px solid rgba(59, 130, 246, 0.15);
  position: relative;
}
.ghost-border-glow::after {
  content: '';
  position: absolute;
  inset: -1px;
  border: 1px solid rgba(59, 130, 246, 0.4);
  opacity: 0;
  transition: opacity 0.15s ease;
  pointer-events: none;
}
.ghost-border-glow:hover::after {
  opacity: 1;
}

/* === NOCTURNAL MESH (animated gradient background) === */
@keyframes meshShift {
  0% { background-position: 0% 50%; }
  50% { background-position: 100% 50%; }
  100% { background-position: 0% 50%; }
}
.nocturnal-mesh {
  background-color: #000000;
  background-image:
    radial-gradient(at 0% 0%, rgba(59, 130, 246, 0.08) 0px, transparent 50%),
    radial-gradient(at 100% 0%, rgba(168, 85, 247, 0.05) 0px, transparent 50%),
    radial-gradient(at 50% 50%, rgba(59, 130, 246, 0.03) 0px, transparent 80%);
  background-size: 200% 200%;
  animation: meshShift 30s ease-in-out infinite;
}

/* === NOISE TEXTURE OVERLAY === */
.noise-filter {
  filter: contrast(170%) brightness(1000%);
  background: url("data:image/svg+xml,%3Csvg viewBox='0 0 200 200' xmlns='http://www.w3.org/2000/svg'%3E%3Cfilter id='noiseFilter'%3E%3CfeTurbulence type='fractalNoise' baseFrequency='0.65' numOctaves='3' stitchTiles='stitch'/%3E%3C/filter%3E%3Crect width='100%25' height='100%25' filter='url(%23noiseFilter)'/%3E%3C/svg%3E");
  opacity: 0.012;
  pointer-events: none;
}

/* === SCROLL REVEAL ANIMATION === */
.reveal {
  opacity: 0;
  transform: translateY(20px);
  transition: all 0.6s cubic-bezier(0.4, 0, 0.2, 1);
}
.reveal.active {
  opacity: 1;
  transform: translateY(0);
}
.stagger-1 { transition-delay: 0.1s; }
.stagger-2 { transition-delay: 0.2s; }
.stagger-3 { transition-delay: 0.3s; }
.stagger-4 { transition-delay: 0.4s; }

/* === TEXT OUTLINE FOR WATERMARK === */
.text-outline-thin {
  -webkit-text-stroke: 1px rgba(59, 130, 246, 0.08);
  color: transparent;
}

/* === PARALLAX TEXT === */
.parallax-text {
  transform: translateY(var(--scroll-offset, 0));
  will-change: transform;
}

/* === HERO PARALLAX === */
.hero-parallax {
  transform: translateY(var(--scroll-y, 0));
}

/* === GALACTIC ORBITAL ANIMATIONS === */
@keyframes orbitSpin {
  0% { transform: rotate(var(--start-rot, 0deg)); }
  100% { transform: rotate(calc(var(--start-rot, 0deg) + 360deg)); }
}
@keyframes orbitSpinReverse {
  0% { transform: rotate(var(--start-rot, 0deg)); }
  100% { transform: rotate(calc(var(--start-rot, 0deg) - 360deg)); }
}
@keyframes starPulse {
  0%, 100% { opacity: var(--base-opacity, 0.2); }
  50% { opacity: calc(var(--base-opacity, 0.2) + 0.25); }
}
@keyframes nebulaDrift {
  0% { transform: translate(0, 0) scale(1); }
  33% { transform: translate(30px, -20px) scale(1.05); }
  66% { transform: translate(-20px, 15px) scale(0.95); }
  100% { transform: translate(0, 0) scale(1); }
}
.orbit-ring {
  transform-origin: center;
  animation: orbitSpin var(--duration, 120s) linear infinite;
  will-change: transform;
  backface-visibility: hidden;
  -webkit-backface-visibility: hidden;
  transform: translateZ(0) rotate(var(--start-rot, 0deg));
}
.orbit-ring-reverse {
  transform-origin: center;
  animation: orbitSpinReverse var(--duration, 90s) linear infinite;
  will-change: transform;
  backface-visibility: hidden;
  -webkit-backface-visibility: hidden;
  transform: translateZ(0) rotate(var(--start-rot, 0deg));
}
.star-pulse {
  animation: starPulse var(--pulse-dur, 3s) ease-in-out infinite;
}
.nebula-drift {
  animation: nebulaDrift var(--drift-dur, 25s) ease-in-out infinite;
}

/* === PULSE GLOW ON SYSTEMS TEXT === */
@keyframes systemsPulse {
  0%, 100% { text-shadow: 0 0 20px rgba(59, 130, 246, 0.3); }
  50% { text-shadow: 0 0 40px rgba(59, 130, 246, 0.6), 0 0 80px rgba(59, 130, 246, 0.2); }
}
.pulse-systems {
  animation: systemsPulse 4s ease-in-out infinite;
}

/* === CORNER GLOW ON FEATURE CARDS === */
.corner-glow {
  position: relative;
  overflow: hidden;
}
.corner-glow::before {
  content: '';
  position: absolute;
  top: -50%;
  right: -50%;
  width: 200%;
  height: 200%;
  background: radial-gradient(circle at 75% 25%, rgba(59, 130, 246, 0.08) 0%, transparent 50%);
  opacity: 0;
  transition: opacity 0.15s ease;
  pointer-events: none;
}
.corner-glow:hover::before {
  opacity: 1;
}

/* === MARQUEE SCROLL === */
@keyframes marqueeScroll {
  0% { transform: translateX(0); }
  100% { transform: translateX(-50%); }
}
.marquee-track {
  display: flex;
  width: max-content;
  animation: marqueeScroll 40s linear infinite;
}
.marquee-content {
  display: flex;
  align-items: center;
  gap: 6rem;
  padding-right: 6rem;
  flex-shrink: 0;
  white-space: nowrap;
}
.marquee-content span {
  flex-shrink: 0;
}
/* Legacy class kept for compatibility */
.animate-scroll {
  display: flex;
  width: max-content;
  animation: marqueeScroll 40s linear infinite;
}
.animate-scroll > * {
  flex-shrink: 0;
}

/* === HEARTBEAT STATUS LINE === */
.heartbeat-line {
  width: 40px;
  height: 2px;
  background: #3B82F6;
  position: relative;
  overflow: hidden;
}
.heartbeat-line::after {
  content: '';
  position: absolute;
  left: -100%;
  width: 100%;
  height: 100%;
  background: linear-gradient(90deg, transparent, #f1f5f9, transparent);
  animation: heartbeat 2s infinite;
}
@keyframes heartbeat {
  0% { left: -100%; }
  50% { left: 100%; }
  100% { left: 100%; }
}

/* === CTA BLOCK BORDER PULSE === */
@keyframes borderPulse {
  0%, 100% { border-color: rgba(59, 130, 246, 0.15); }
  50% { border-color: rgba(59, 130, 246, 0.30); }
}
.border-pulse {
  animation: borderPulse 3s ease-in-out infinite;
}
