/* Soft, blurred, drifting background — no moving lines or scanning effects. */
.bg-aura {
  position: fixed;
  inset: 0;
  z-index: -1;
  overflow: hidden;
  pointer-events: none;
}

.bg-aura__blob {
  position: absolute;
  border-radius: 50%;
  filter: blur(90px);
  opacity: 0.35;
  will-change: transform;
}

.bg-aura__blob--a {
  width: 46vw;
  height: 46vw;
  top: -10%;
  left: -10%;
  background: var(--accent-1);
  animation: drift-a 26s ease-in-out infinite;
}

.bg-aura__blob--b {
  width: 40vw;
  height: 40vw;
  bottom: -15%;
  right: -8%;
  background: var(--accent-2);
  animation: drift-b 32s ease-in-out infinite;
}

.bg-aura__blob--c {
  width: 28vw;
  height: 28vw;
  top: 40%;
  left: 55%;
  background: var(--accent-1);
  opacity: 0.2;
  animation: drift-c 38s ease-in-out infinite;
}

@keyframes drift-a {
  0%, 100% { transform: translate(0, 0) scale(1); }
  50% { transform: translate(6vw, 8vh) scale(1.15); }
}

@keyframes drift-b {
  0%, 100% { transform: translate(0, 0) scale(1); }
  50% { transform: translate(-5vw, -6vh) scale(1.1); }
}

@keyframes drift-c {
  0%, 100% { transform: translate(0, 0) scale(1); opacity: 0.18; }
  50% { transform: translate(-4vw, 5vh) scale(1.2); opacity: 0.3; }
}

@media (prefers-reduced-motion: reduce) {
  .bg-aura__blob { animation: none; }
}

/* Scroll reveal */
.reveal {
  opacity: 0;
  transform: translateY(28px);
  transition: opacity 0.7s ease, transform 0.7s ease;
}

.reveal.is-visible {
  opacity: 1;
  transform: translateY(0);
}

.reveal-stagger.is-visible > * {
  transition-delay: calc(var(--stagger-index, 0) * 90ms);
}

/* Marquee */
.marquee {
  overflow: hidden;
  position: relative;
  mask-image: linear-gradient(to right, transparent, black 8%, black 92%, transparent);
  -webkit-mask-image: linear-gradient(to right, transparent, black 8%, black 92%, transparent);
}

.marquee__track {
  display: flex;
  width: max-content;
  gap: 4rem;
  animation: marquee-scroll 28s linear infinite;
}

.marquee:hover .marquee__track {
  animation-play-state: paused;
}

@keyframes marquee-scroll {
  from { transform: translateX(0); }
  to { transform: translateX(-50%); }
}

/* Hero image reveal */
.hero-photo {
  clip-path: inset(0 0 0 0);
  animation: hero-wipe 1.1s cubic-bezier(0.65, 0, 0.35, 1) both;
}

@keyframes hero-wipe {
  from {
    clip-path: inset(0 100% 0 0);
    opacity: 0;
  }
  to {
    clip-path: inset(0 0 0 0);
    opacity: 1;
  }
}

/* Counter pulse when animating */
.stat-value {
  font-variant-numeric: tabular-nums;
}
