/* ==========================================================================
   Adiora — Animations (animations.css)
   Lightweight, GPU-friendly CSS only.
   ========================================================================== */

/* Scroll reveal (toggled by IntersectionObserver adding .in-view) */
.reveal { opacity: 0; transform: translateY(28px); transition: opacity 0.7s var(--ease), transform 0.7s var(--ease); will-change: opacity, transform; }
.reveal.in-view { opacity: 1; transform: none; }

.reveal-left { opacity: 0; transform: translateX(-32px); transition: opacity 0.7s var(--ease), transform 0.7s var(--ease); }
.reveal-left.in-view { opacity: 1; transform: none; }

.reveal-right { opacity: 0; transform: translateX(32px); transition: opacity 0.7s var(--ease), transform 0.7s var(--ease); }
.reveal-right.in-view { opacity: 1; transform: none; }

.reveal-scale { opacity: 0; transform: scale(0.94); transition: opacity 0.7s var(--ease), transform 0.7s var(--ease); }
.reveal-scale.in-view { opacity: 1; transform: none; }

/* Stagger children */
.stagger > * { opacity: 0; transform: translateY(24px); transition: opacity 0.6s var(--ease), transform 0.6s var(--ease); }
.stagger.in-view > * { opacity: 1; transform: none; }
.stagger.in-view > *:nth-child(1) { transition-delay: 0.05s; }
.stagger.in-view > *:nth-child(2) { transition-delay: 0.12s; }
.stagger.in-view > *:nth-child(3) { transition-delay: 0.19s; }
.stagger.in-view > *:nth-child(4) { transition-delay: 0.26s; }
.stagger.in-view > *:nth-child(5) { transition-delay: 0.33s; }
.stagger.in-view > *:nth-child(6) { transition-delay: 0.40s; }
.stagger.in-view > *:nth-child(7) { transition-delay: 0.47s; }
.stagger.in-view > *:nth-child(8) { transition-delay: 0.54s; }

/* Hero entrance */
.hero-content > * { animation: fadeUp 0.9s var(--ease) both; }
.hero-content > *:nth-child(1) { animation-delay: 0.05s; }
.hero-content > *:nth-child(2) { animation-delay: 0.18s; }
.hero-content > *:nth-child(3) { animation-delay: 0.30s; }
.hero-content > *:nth-child(4) { animation-delay: 0.42s; }
.hero-content > *:nth-child(5) { animation-delay: 0.54s; }

@keyframes fadeUp { from { opacity: 0; transform: translateY(26px); } to { opacity: 1; transform: none; } }
@keyframes floatOrb { 0%,100% { transform: translate(0,0) scale(1); } 33% { transform: translate(30px,-24px) scale(1.06); } 66% { transform: translate(-22px,18px) scale(0.96); } }
@keyframes marquee { from { transform: translateX(0); } to { transform: translateX(-50%); } }
@keyframes pulseRing { 0% { box-shadow: 0 0 0 0 rgba(37,211,102,0.5); } 70% { box-shadow: 0 0 0 14px rgba(37,211,102,0); } 100% { box-shadow: 0 0 0 0 rgba(37,211,102,0); } }
@keyframes spinSlow { to { transform: rotate(360deg); } }
@keyframes shimmer { to { background-position: 200% center; } }

.fab.wa { animation: pulseRing 2.4s infinite; }

/* Animated gradient border ring (used on featured cards / hero badges) */
.ring-anim { position: relative; }
.ring-anim::after { content: ""; position: absolute; inset: 0; border-radius: inherit; padding: 1px; background: conic-gradient(from 0deg, transparent, var(--brand-2), transparent 40%); -webkit-mask: linear-gradient(#000 0 0) content-box, linear-gradient(#000 0 0); -webkit-mask-composite: xor; mask-composite: exclude; animation: spinSlow 6s linear infinite; opacity: 0.6; pointer-events: none; }

/* Link underline sweep */
.link-sweep { position: relative; }
.link-sweep::after { content: ""; position: absolute; left: 0; bottom: -2px; height: 2px; width: 100%; background: var(--brand-grad); transform: scaleX(0); transform-origin: left; transition: transform 0.35s var(--ease); }
.link-sweep:hover::after { transform: scaleX(1); }

/* Counter placeholder no-op (JS drives values) */
.counting { font-variant-numeric: tabular-nums; }

/* Shimmer text (rare accent) */
.shimmer { background: linear-gradient(90deg, var(--text-soft), var(--white), var(--text-soft)); background-size: 200% auto; -webkit-background-clip: text; background-clip: text; color: transparent; animation: shimmer 4s linear infinite; }
