/* Domain Ads — keyframes & animation utilities (vanilla CSS) */

@keyframes aurora {
  0% { transform: translate3d(0,0,0) rotate(0); }
  50% { transform: translate3d(3%,-2%,0) rotate(4deg); }
  100% { transform: translate3d(-2%,3%,0) rotate(-3deg); }
}
@keyframes marquee { to { transform: translateX(-50%); } }
@keyframes spin { to { transform: rotate(360deg); } }
@keyframes float { 0%,100% { transform: translateY(0); } 50% { transform: translateY(-14px); } }
@keyframes pulseGlow { 0%,100% { box-shadow: 0 0 0 0 rgba(63,91,255,.5); } 50% { box-shadow: 0 0 40px 8px rgba(63,91,255,.35); } }
@keyframes shine { 0% { transform: translateX(-100%); } 100% { transform: translateX(200%); } }
@keyframes fadeUp { from { opacity:0; transform: translateY(20px); } to { opacity:1; transform:none; } }
@keyframes ping-slow { 75%,100% { transform: scale(2.5); opacity: 0; } }
@keyframes dash { to { stroke-dashoffset: -20; } }
@keyframes particleFloat { 0%,100% { transform: translateY(0); } 50% { transform: translateY(-18px); } }

.aurora {
  position: absolute; inset: -20%;
  background:
    radial-gradient(closest-side at 30% 30%, rgba(63,91,255,.35), transparent 70%),
    radial-gradient(closest-side at 70% 40%, rgba(79,70,229,.35), transparent 70%),
    radial-gradient(closest-side at 50% 80%, rgba(0,0,102,.5), transparent 70%);
  filter: blur(50px);
  animation: aurora 18s ease-in-out infinite alternate;
  will-change: transform;
  transform: translateZ(0);
}
.marquee { display:flex; gap:3rem; animation: marquee 40s linear infinite; will-change: transform; }
.spin-slow { animation: spin 24s linear infinite; will-change: transform; transform: translateZ(0); }
.float { animation: float 6s ease-in-out infinite; will-change: transform; }
.pulse-glow { animation: pulseGlow 3s ease-in-out infinite; }
.ping-slow { animation: ping-slow 3s cubic-bezier(0,0,.2,1) infinite; }
.animate-fade-up { animation: fadeUp .8s cubic-bezier(.2,.8,.2,1) both; }

.shine-sweep::after {
  content:""; position:absolute; inset:0;
  background: linear-gradient(120deg, transparent 40%, rgba(255,255,255,.15) 50%, transparent 60%);
  animation: shine 5s ease-in-out infinite;
}

/* Scroll reveal */
.reveal { opacity:0; transform: translateY(24px);
  transition: opacity .8s ease, transform .8s cubic-bezier(.2,.8,.2,1); will-change: transform, opacity; }
.reveal.in { opacity:1; transform: none; }

/* Headline character reveal */
.word { display:inline-block; white-space:nowrap; }
.char { display:inline-block; opacity:0; transform: translateY(0.35em);
  transition: opacity .7s ease, transform .7s cubic-bezier(.2,.8,.2,1); }
.char.in { opacity:1; transform:none; }

/* Particles */
.particle { position:absolute; border-radius:9999px; background: rgba(255,255,255,.7);
  box-shadow: 0 0 12px 2px rgba(63,91,255,.7); opacity:.5; animation-name: particleFloat;
  animation-timing-function: ease-in-out; animation-iteration-count: infinite; }

/* Custom cursor */
.cursor-dot, .cursor-ring { position: fixed; top:0; left:0; z-index:120; pointer-events:none;
  border-radius:9999px; transform: translate(-50%,-50%); opacity:0; transition: opacity .3s; }
.cursor-dot { width:6px; height:6px; background:#fff; }
.cursor-ring { width:34px; height:34px; border:1px solid rgba(63,91,255,.8);
  box-shadow: 0 0 18px rgba(63,91,255,.5); transition: width .25s, height .25s, background .25s, border-color .25s, opacity .3s; }
.cursor-ready .cursor-dot, .cursor-ready .cursor-ring { opacity:1; }
.cursor-hover .cursor-ring { width:56px; height:56px; background: rgba(63,91,255,.15); border-color:#a78bfa; }

/* Magnetic buttons */
.magnetic { transition: transform .25s cubic-bezier(.2,.8,.2,1); will-change: transform; }

/* Preloader */
.preloader { position: fixed; inset:0; z-index:200; display:flex; align-items:center; justify-content:center;
  background: radial-gradient(ellipse at 50% 40%, #0a0a2e, #000 70%); transition: opacity .8s ease, visibility .8s; }
.preloader.done { opacity:0; visibility:hidden; }
.preloader-inner { text-align:center; }
.preloader-logo { height:38px; width:auto; margin:0 auto 22px; animation: fadeUp .9s cubic-bezier(.2,.8,.2,1) both; }
.preloader-bar { width:220px; height:3px; margin:0 auto; border-radius:999px; background: rgba(255,255,255,.1); overflow:hidden; }
.preloader-bar span { display:block; height:100%; width:0%; border-radius:999px;
  background: linear-gradient(90deg,#3F5BFF,#4F46E5,#a78bfa); box-shadow: 0 0 14px rgba(63,91,255,.8); transition: width .2s linear; }
.preloader-pct { margin-top:12px; font-size:12px; letter-spacing:.3em; color: rgba(255,255,255,.5); }

@media (prefers-reduced-motion: reduce) {
  *, *::before, *::after { animation-duration: .001ms !important; animation-iteration-count: 1 !important; transition-duration: .001ms !important; }
  .reveal, .char { opacity:1 !important; transform:none !important; filter:none !important; }
  html { scroll-behavior: auto; }
}
