/* KEYFRAMES */
@keyframes orbFloat {
  0%, 100% { transform: translate(0, 0) scale(1); }
  33%       { transform: translate(20px, -30px) scale(1.04); }
  66%       { transform: translate(-15px, 20px) scale(0.97); }
}

@keyframes pulse {
  0%, 100% { opacity: 1; transform: scale(1); }
  50%       { opacity: 0.5; transform: scale(1.5); }
}

@keyframes scrollPulse {
  0%, 100% { opacity: 0.5; transform: scaleY(1); }
  50%       { opacity: 1; transform: scaleY(1.15); }
}

@keyframes fadeUp {
  from { opacity: 0; transform: translateY(30px); }
  to   { opacity: 1; transform: translateY(0); }
}

@keyframes fadeInLeft {
  from { opacity: 0; transform: translateX(-40px); }
  to   { opacity: 1; transform: translateX(0); }
}

@keyframes fadeInRight {
  from { opacity: 0; transform: translateX(40px); }
  to   { opacity: 1; transform: translateX(0); }
}

/* SCROLL REVEAL — default hidden state */
.fade-up,
.fade-in-left,
.fade-in-right {
  opacity: 0;
  transition: opacity 0.7s cubic-bezier(0.25, 0.46, 0.45, 0.94),
              transform 0.7s cubic-bezier(0.25, 0.46, 0.45, 0.94);
}

.fade-up {
  transform: translateY(32px);
  transition-delay: var(--delay, 0s);
}

.fade-in-left {
  transform: translateX(-36px);
  transition-delay: var(--delay, 0s);
}

.fade-in-right {
  transform: translateX(36px);
  transition-delay: var(--delay, 0s);
}

.fade-up.visible,
.fade-in-left.visible,
.fade-in-right.visible {
  opacity: 1;
  transform: none;
}

/* Delay utilities (hero, stagger cards) */
.fade-up-delay-1 {
  animation: fadeUp 0.8s cubic-bezier(0.25, 0.46, 0.45, 0.94) 0.4s both;
}

.fade-up-delay-2 {
  animation: fadeUp 0.8s cubic-bezier(0.25, 0.46, 0.45, 0.94) 0.7s both;
}

/* Hero section immediate animations */
.hero-content.fade-up {
  animation: fadeUp 1s cubic-bezier(0.25, 0.46, 0.45, 0.94) 0.1s both;
  opacity: 1;
  transform: none;
}

.hero-visual.fade-in-right {
  animation: fadeInRight 1s cubic-bezier(0.25, 0.46, 0.45, 0.94) 0.2s both;
  opacity: 1;
  transform: none;
}

.page-hero-inner.fade-up {
  animation: fadeUp 0.9s cubic-bezier(0.25, 0.46, 0.45, 0.94) 0.15s both;
  opacity: 1;
  transform: none;
}