.floating-particles span {
  position: absolute;
  z-index: 2;
  width: 9px;
  height: 9px;
  background: rgba(234,214,180,.85);
  border-radius: 50%;
  filter: blur(.4px);
  animation: particleRise 8s linear infinite;
}

.floating-particles span:nth-child(1) { left: 12%; bottom: 8%; animation-delay: 0s; }
.floating-particles span:nth-child(2) { left: 28%; bottom: 4%; animation-delay: 1.3s; }
.floating-particles span:nth-child(3) { left: 52%; bottom: 7%; animation-delay: 2.5s; }
.floating-particles span:nth-child(4) { left: 73%; bottom: 5%; animation-delay: 3.7s; }
.floating-particles span:nth-child(5) { left: 88%; bottom: 9%; animation-delay: 5s; }

.reveal-up,
.reveal-left,
.reveal-right,
.reveal-scale,
.reveal-blur {
  opacity: 0;
  transition:
    opacity 1.15s ease,
    transform 1.15s cubic-bezier(.2,.8,.2,1),
    filter 1.15s ease;
  will-change: opacity, transform, filter;
}

.reveal-up {
  transform: translateY(55px);
}

.reveal-left {
  transform: translateX(-60px);
}

.reveal-right {
  transform: translateX(60px);
}

.reveal-scale {
  transform: scale(.88);
}

.reveal-blur {
  transform: translateY(40px) scale(.96);
  filter: blur(18px);
}

.is-visible {
  opacity: 1;
  transform: translate(0, 0) scale(1);
  filter: blur(0);
}

.delay-1 {
  transition-delay: .18s;
}

.delay-2 {
  transition-delay: .36s;
}

.delay-3 {
  transition-delay: .54s;
}

@keyframes kenBurns {
  0% {
    transform: scale(1) translate(0, 0);
  }
  100% {
    transform: scale(1.13) translate(-2%, -2%);
  }
}

@keyframes photoBreath {
  0% {
    transform: scale(1.02);
  }
  100% {
    transform: scale(1.08);
  }
}

@keyframes ambientMove {
  0% {
    transform: translate3d(0,0,0) scale(1);
    opacity: .75;
  }
  100% {
    transform: translate3d(0,-20px,0) scale(1.08);
    opacity: 1;
  }
}

@keyframes pulseGlow {
  0%, 100% {
    transform: scale(.9);
    opacity: .45;
  }
  50% {
    transform: scale(1.18);
    opacity: .85;
  }
}

@keyframes softFloat {
  0%, 100% {
    transform: translateY(0);
  }
  50% {
    transform: translateY(-10px);
  }
}

@keyframes musicFloat {
  0%, 100% {
    transform: translateY(0) rotate(0deg);
  }
  50% {
    transform: translateY(-7px) rotate(6deg);
  }
}

@keyframes particleRise {
  0% {
    transform: translateY(0) scale(.6);
    opacity: 0;
  }
  18% {
    opacity: .9;
  }
  100% {
    transform: translateY(-92vh) scale(1.4);
    opacity: 0;
  }
}
