/* ============================================================
   BLUE PEARL — animations.css
   Scroll-reveal, page transitions, micro-animations
   ============================================================ */

/* ── Page Loader ──────────────────────────────────────────── */
.page-loader {
  position: fixed;
  inset: 0;
  background: var(--bg-primary);
  z-index: 9999;
  display: flex;
  align-items: center;
  justify-content: center;
  flex-direction: column;
  gap: 1.5rem;
  transition: opacity 0.5s ease, visibility 0.5s ease;
}

.page-loader.hidden {
  opacity: 0;
  visibility: hidden;
  pointer-events: none;
}

.page-loader__logo {
  height: 56px;
  width: auto;
  animation: loaderPulse 1.5s ease-in-out infinite;
}

.page-loader__bar {
  width: 200px;
  height: 2px;
  background: var(--border-default);
  border-radius: var(--radius-full);
  overflow: hidden;
}

.page-loader__progress {
  height: 100%;
  background: var(--grad-accent);
  border-radius: var(--radius-full);
  animation: loaderProgress 1.2s ease forwards;
}

/* ── Loader Style 1: Orbital Ring & Pulsing Core ── */
.loader-style1 {
  display: flex;
  flex-direction: column;
  align-items: center;
  gap: 1.25rem;
}
.loader-orbital-wrap {
  position: relative;
  width: 100px;
  height: 100px;
  display: flex;
  align-items: center;
  justify-content: center;
}
.loader-orbital-ring-outer {
  position: absolute;
  inset: 0;
  border-radius: 50%;
  border: 3px solid transparent;
  border-top-color: var(--brand-blue);
  border-right-color: var(--brand-blue);
  filter: drop-shadow(0 0 10px rgba(26, 92, 255, 0.4));
  animation: spinClockwise 1.4s cubic-bezier(0.68, -0.55, 0.265, 1.55) infinite;
}
.loader-orbital-ring-inner {
  position: absolute;
  inset: 12px;
  border-radius: 50%;
  border: 3px solid transparent;
  border-bottom-color: var(--brand-green);
  border-left-color: var(--brand-green);
  filter: drop-shadow(0 0 10px rgba(34, 160, 48, 0.4));
  animation: spinCounterClockwise 1s cubic-bezier(0.68, -0.55, 0.265, 1.55) infinite;
}
.loader-orbital-pod {
  width: 52px;
  height: 52px;
  border-radius: 50%;
  background: var(--bg-card);
  box-shadow: 0 4px 20px rgba(0, 0, 0, 0.08), inset 0 0 12px rgba(26, 92, 255, 0.15);
  display: flex;
  align-items: center;
  justify-content: center;
  z-index: 2;
  animation: podPulse 1.8s ease-in-out infinite;
}
.loader-orbital-pod img {
  height: 28px;
  width: auto;
}

/* ── Loader Style 2: Dual Gradient Ring (Featured Benchmark) ── */
.loader-style2 {
  display: flex;
  flex-direction: column;
  align-items: center;
  gap: 1.25rem;
}
.dual-ring-spinner {
  position: relative;
  width: 90px;
  height: 90px;
}
.ring-outer {
  box-sizing: border-box;
  position: absolute;
  width: 100%;
  height: 100%;
  border: 4px solid transparent;
  border-top-color: var(--brand-blue);
  border-bottom-color: var(--brand-blue);
  border-radius: 50%;
  filter: drop-shadow(0 0 12px rgba(26, 92, 255, 0.45));
  animation: spinClockwise 1.2s cubic-bezier(0.5, 0.1, 0.5, 0.9) infinite;
}
.ring-inner {
  box-sizing: border-box;
  position: absolute;
  width: 72%;
  height: 72%;
  left: 14%;
  top: 14%;
  border: 3.5px solid transparent;
  border-left-color: var(--brand-green);
  border-right-color: var(--brand-green);
  border-radius: 50%;
  filter: drop-shadow(0 0 10px rgba(34, 160, 48, 0.45));
  animation: spinCounterClockwise 0.85s linear infinite;
}
.dual-ring-core {
  position: absolute;
  inset: 34%;
  background: var(--grad-text);
  border-radius: 50%;
  animation: corePulse 1.2s ease-in-out infinite alternate;
}
.loader-text {
  font-family: 'Rajdhani', sans-serif;
  font-weight: 700;
  font-size: 1.05rem;
  letter-spacing: 0.12em;
  color: var(--text-primary);
  text-transform: uppercase;
}

/* ── Loader Style 3: Quantum 3D Atomic Ring ── */
.loader-style3 {
  display: flex;
  flex-direction: column;
  align-items: center;
  gap: 1.25rem;
}
.quantum-atomic-wrap {
  position: relative;
  width: 95px;
  height: 95px;
  perspective: 800px;
  display: flex;
  align-items: center;
  justify-content: center;
}
.quantum-orbit-1, .quantum-orbit-2, .quantum-orbit-3 {
  position: absolute;
  width: 100%;
  height: 100%;
  border-radius: 50%;
  border: 3px solid transparent;
  box-sizing: border-box;
}
.quantum-orbit-1 {
  border-top-color: var(--brand-blue);
  border-bottom-color: var(--brand-blue);
  filter: drop-shadow(0 0 8px rgba(26, 92, 255, 0.5));
  animation: rotate3dOrbit1 1.6s linear infinite;
}
.quantum-orbit-2 {
  border-left-color: var(--brand-green);
  border-right-color: var(--brand-green);
  filter: drop-shadow(0 0 8px rgba(34, 160, 48, 0.5));
  animation: rotate3dOrbit2 1.4s linear infinite;
}
.quantum-orbit-3 {
  border-top-color: #38bdf8;
  border-left-color: #38bdf8;
  filter: drop-shadow(0 0 8px rgba(56, 189, 248, 0.5));
  animation: rotate3dOrbit3 1.8s linear infinite;
}
.quantum-center-dot {
  width: 16px;
  height: 16px;
  background: var(--grad-text);
  border-radius: 50%;
  box-shadow: 0 0 16px var(--brand-blue);
  animation: dotGlow 1.2s ease-in-out infinite alternate;
}

/* ── Loader Style 4: Cybernetic Hex Shield ── */
.loader-style4 {
  display: flex;
  flex-direction: column;
  align-items: center;
  gap: 1.25rem;
}
.cyber-hex-wrap {
  position: relative;
  width: 90px;
  height: 90px;
  display: flex;
  align-items: center;
  justify-content: center;
}
.cyber-hex-ring {
  position: absolute;
  inset: 0;
  border: 3.5px solid transparent;
  border-radius: 20%;
  border-top-color: var(--brand-blue);
  border-bottom-color: var(--brand-blue);
  filter: drop-shadow(0 0 10px rgba(26, 92, 255, 0.4));
  animation: hexSpin 1.5s cubic-bezier(0.77, 0, 0.175, 1) infinite;
}
.cyber-hex-ring-inner {
  position: absolute;
  inset: 16px;
  border: 3px solid transparent;
  border-radius: 20%;
  border-left-color: var(--brand-green);
  border-right-color: var(--brand-green);
  filter: drop-shadow(0 0 10px rgba(34, 160, 48, 0.4));
  animation: hexSpinReverse 1.1s cubic-bezier(0.77, 0, 0.175, 1) infinite;
}
.cyber-hex-core {
  width: 24px;
  height: 24px;
  background: linear-gradient(135deg, var(--brand-blue), var(--brand-green));
  border-radius: 6px;
  transform: rotate(45deg);
  box-shadow: 0 0 14px rgba(26, 92, 255, 0.6);
  animation: coreRotate 2s ease-in-out infinite;
}

/* ── Loader Style 5: Holographic Eclipse Wave ── */
.loader-style5 {
  position: relative;
  display: flex;
  flex-direction: column;
  align-items: center;
  gap: 1.25rem;
}
.eclipse-wave-wrap {
  position: relative;
  width: 95px;
  height: 95px;
  display: flex;
  align-items: center;
  justify-content: center;
}
.eclipse-halo {
  position: absolute;
  inset: 0;
  border-radius: 50%;
  padding: 3.5px;
  background: conic-gradient(from 0deg, var(--brand-blue), var(--brand-green), #38bdf8, var(--brand-blue));
  -webkit-mask: linear-gradient(#fff 0 0) content-box, linear-gradient(#fff 0 0);
  -webkit-mask-composite: xor;
  mask-composite: exclude;
  filter: drop-shadow(0 0 12px rgba(26, 92, 255, 0.5));
  animation: spinClockwise 1.2s linear infinite;
}
.eclipse-pulse-ring {
  position: absolute;
  inset: -10px;
  border-radius: 50%;
  border: 2px solid var(--brand-blue);
  opacity: 0;
  animation: eclipsePulseWave 2s cubic-bezier(0.1, 0.8, 0.3, 1) infinite;
}
.eclipse-pulse-ring:nth-child(2) {
  border-color: var(--brand-green);
  animation-delay: 1s;
}
.eclipse-logo-center {
  height: 38px;
  width: auto;
  z-index: 5;
  filter: drop-shadow(0 4px 10px rgba(0,0,0,0.15));
  animation: eclipseLogoGlow 2s ease-in-out infinite alternate;
}

/* Keyframes */
@keyframes podPulse {
  0%, 100% { transform: scale(1); box-shadow: 0 4px 20px rgba(0,0,0,0.08), inset 0 0 12px rgba(26, 92, 255, 0.15); }
  50% { transform: scale(1.08); box-shadow: 0 6px 24px rgba(26,92,255,0.25), inset 0 0 18px rgba(34, 160, 48, 0.3); }
}

@keyframes spinClockwise {
  0% { transform: rotate(0deg); }
  100% { transform: rotate(360deg); }
}

@keyframes spinCounterClockwise {
  0% { transform: rotate(360deg); }
  100% { transform: rotate(0deg); }
}

@keyframes corePulse {
  0% { transform: scale(0.6); opacity: 0.6; }
  100% { transform: scale(1.2); opacity: 1; box-shadow: 0 0 12px var(--brand-green); }
}

@keyframes rotate3dOrbit1 {
  0% { transform: rotateX(60deg) rotateY(0deg) rotateZ(0deg); }
  100% { transform: rotateX(60deg) rotateY(360deg) rotateZ(360deg); }
}

@keyframes rotate3dOrbit2 {
  0% { transform: rotateX(0deg) rotateY(60deg) rotateZ(0deg); }
  100% { transform: rotateX(360deg) rotateY(60deg) rotateZ(360deg); }
}

@keyframes rotate3dOrbit3 {
  0% { transform: rotateX(45deg) rotateY(45deg) rotateZ(0deg); }
  100% { transform: rotateX(45deg) rotateY(45deg) rotateZ(360deg); }
}

@keyframes dotGlow {
  0% { transform: scale(0.8); opacity: 0.7; }
  100% { transform: scale(1.3); opacity: 1; filter: drop-shadow(0 0 12px var(--brand-green)); }
}

@keyframes hexSpin {
  0% { transform: rotate(0deg); }
  100% { transform: rotate(360deg); }
}

@keyframes hexSpinReverse {
  0% { transform: rotate(360deg); }
  100% { transform: rotate(0deg); }
}

@keyframes coreRotate {
  0%, 100% { transform: rotate(45deg) scale(1); }
  50% { transform: rotate(225deg) scale(1.15); }
}

@keyframes eclipsePulseWave {
  0% { transform: scale(0.8); opacity: 0.8; }
  100% { transform: scale(1.4); opacity: 0; }
}

@keyframes eclipseLogoGlow {
  0% { transform: scale(0.96); filter: drop-shadow(0 2px 8px rgba(26,92,255,0.3)); }
  100% { transform: scale(1.04); filter: drop-shadow(0 4px 16px rgba(34,160,48,0.5)); }
}

/* ── Hero Animations ──────────────────────────────────────── */
.hero-animate-1 {
  animation: heroFadeUp 0.8s ease forwards;
  animation-delay: 0.1s;
  opacity: 0;
}

.hero-animate-2 {
  animation: heroFadeUp 0.8s ease forwards;
  animation-delay: 0.3s;
  opacity: 0;
}

.hero-animate-3 {
  animation: heroFadeUp 0.8s ease forwards;
  animation-delay: 0.5s;
  opacity: 0;
}

.hero-animate-4 {
  animation: heroFadeUp 0.8s ease forwards;
  animation-delay: 0.7s;
  opacity: 0;
}

@keyframes heroFadeUp {
  from {
    opacity: 0;
    transform: translateY(40px);
    filter: blur(4px);
  }
  to {
    opacity: 1;
    transform: translateY(0);
    filter: blur(0);
  }
}

/* ── Parallax Hero Text ───────────────────────────────────── */
.parallax-element {
  will-change: transform;
}

/* ── Scroll Reveal States ─────────────────────────────────── */
[data-reveal] {
  opacity: 0;
  transition: opacity 0.7s ease, transform 0.7s ease;
}

[data-reveal="up"]    { transform: translateY(40px); }
[data-reveal="down"]  { transform: translateY(-40px); }
[data-reveal="left"]  { transform: translateX(-40px); }
[data-reveal="right"] { transform: translateX(40px); }
[data-reveal="scale"] { transform: scale(0.88); }
[data-reveal="none"]  { transform: none; }

[data-reveal].in-view {
  opacity: 1;
  transform: none;
}

/* Delay Modifiers */
[data-delay="100"] { transition-delay: 0.1s; }
[data-delay="150"] { transition-delay: 0.15s; }
[data-delay="200"] { transition-delay: 0.2s; }
[data-delay="300"] { transition-delay: 0.3s; }
[data-delay="400"] { transition-delay: 0.4s; }
[data-delay="500"] { transition-delay: 0.5s; }
[data-delay="600"] { transition-delay: 0.6s; }
[data-delay="700"] { transition-delay: 0.7s; }

/* ── Stagger Children ─────────────────────────────────────── */
[data-stagger] > * {
  opacity: 0;
  transform: translateY(25px);
  transition: opacity 0.6s ease, transform 0.6s ease;
}

[data-stagger].in-view > *:nth-child(1)  { opacity: 1; transform: none; transition-delay: 0.05s; }
[data-stagger].in-view > *:nth-child(2)  { opacity: 1; transform: none; transition-delay: 0.12s; }
[data-stagger].in-view > *:nth-child(3)  { opacity: 1; transform: none; transition-delay: 0.19s; }
[data-stagger].in-view > *:nth-child(4)  { opacity: 1; transform: none; transition-delay: 0.26s; }
[data-stagger].in-view > *:nth-child(5)  { opacity: 1; transform: none; transition-delay: 0.33s; }
[data-stagger].in-view > *:nth-child(6)  { opacity: 1; transform: none; transition-delay: 0.40s; }
[data-stagger].in-view > *:nth-child(7)  { opacity: 1; transform: none; transition-delay: 0.47s; }
[data-stagger].in-view > *:nth-child(8)  { opacity: 1; transform: none; transition-delay: 0.54s; }
[data-stagger].in-view > *:nth-child(n+9){ opacity: 1; transform: none; transition-delay: 0.60s; }

/* ── Counter Animation ────────────────────────────────────── */
.counter {
  display: inline-block;
}

/* ── Shimmer Loading Skeleton ─────────────────────────────── */
.skeleton {
  background: linear-gradient(
    90deg,
    var(--bg-elevated) 0%,
    var(--bg-card-hover) 50%,
    var(--bg-elevated) 100%
  );
  background-size: 200% 100%;
  animation: skeleton-shimmer 1.5s infinite;
  border-radius: var(--radius-md);
}

@keyframes skeleton-shimmer {
  0%   { background-position: 200% 0; }
  100% { background-position: -200% 0; }
}

/* ── Magnetic Button Effect ───────────────────────────────── */
.magnetic {
  transition: transform 0.2s cubic-bezier(0.23, 1, 0.32, 1);
}

/* ── Underline Hover ──────────────────────────────────────── */
.hover-underline {
  position: relative;
}

.hover-underline::after {
  content: '';
  position: absolute;
  bottom: -2px;
  left: 0;
  width: 0;
  height: 1px;
  background: currentColor;
  transition: width var(--transition-base);
}

.hover-underline:hover::after {
  width: 100%;
}

/* ── Glow Effects ─────────────────────────────────────────── */
.glow-blue {
  box-shadow: 0 0 20px rgba(26, 61, 166, 0.4), 0 0 60px rgba(26, 61, 166, 0.15);
}

.glow-green {
  box-shadow: 0 0 20px rgba(46, 204, 64, 0.3), 0 0 60px rgba(46, 204, 64, 0.1);
}

/* ── Grid Lines Background Decoration ────────────────────── */
.grid-bg {
  position: relative;
}

.grid-bg::before {
  content: '';
  position: absolute;
  inset: 0;
  background-image:
    linear-gradient(rgba(43, 86, 212, 0.03) 1px, transparent 1px),
    linear-gradient(90deg, rgba(43, 86, 212, 0.03) 1px, transparent 1px);
  background-size: 60px 60px;
  pointer-events: none;
  z-index: 0;
}

/* ── Flowing Gradient Border ──────────────────────────────── */
.gradient-border {
  position: relative;
  border-radius: var(--radius-lg);
  overflow: hidden;
}

.gradient-border::before {
  content: '';
  position: absolute;
  inset: -1px;
  background: conic-gradient(
    from 0deg at 50% 50%,
    var(--brand-blue),
    var(--brand-green),
    var(--brand-blue)
  );
  border-radius: inherit;
  animation: spinBorder 4s linear infinite;
  z-index: -1;
}

@keyframes spinBorder {
  from { transform: rotate(0deg); }
  to   { transform: rotate(360deg); }
}

/* ── Particle Dots (decorative) ───────────────────────────── */
.dot-grid {
  position: absolute;
  width: 200px;
  height: 200px;
  background-image: radial-gradient(circle, rgba(43, 86, 212, 0.25) 1.5px, transparent 1.5px);
  background-size: 18px 18px;
  pointer-events: none;
}

/* ── Card Flip ────────────────────────────────────────────── */
.flip-card {
  perspective: 1000px;
}

.flip-card__inner {
  position: relative;
  width: 100%;
  height: 100%;
  transition: transform 0.7s cubic-bezier(0.23, 1, 0.32, 1);
  transform-style: preserve-3d;
}

.flip-card:hover .flip-card__inner {
  transform: rotateY(180deg);
}

.flip-card__front,
.flip-card__back {
  position: absolute;
  width: 100%;
  height: 100%;
  backface-visibility: hidden;
  -webkit-backface-visibility: hidden;
}

.flip-card__back {
  transform: rotateY(180deg);
  background: var(--grad-blue);
  border-radius: var(--radius-lg);
  display: flex;
  align-items: center;
  justify-content: center;
  padding: var(--space-lg);
}

/* ── Image Hover Zoom ─────────────────────────────────────── */
.img-zoom {
  overflow: hidden;
  border-radius: var(--radius-lg);
}

.img-zoom img {
  transition: transform 0.6s cubic-bezier(0.25, 0.46, 0.45, 0.94);
}

.img-zoom:hover img {
  transform: scale(1.06);
}

/* ── CTA Ripple Effect ────────────────────────────────────── */
.ripple {
  position: relative;
  overflow: hidden;
}

.ripple::after {
  content: '';
  position: absolute;
  width: 300%;
  height: 300%;
  top: 50%;
  left: 50%;
  transform: translate(-50%, -50%) scale(0);
  border-radius: 50%;
  background: rgba(255, 255, 255, 0.12);
  transition: transform 0.6s ease, opacity 0.6s ease;
  opacity: 1;
}

.ripple:active::after {
  transform: translate(-50%, -50%) scale(1);
  opacity: 0;
  transition: 0s;
}

/* ── Typewriter Cursor ────────────────────────────────────── */
.typewriter::after {
  content: '|';
  animation: blink 0.75s step-end infinite;
  color: var(--brand-green);
}

@keyframes blink {
  0%, 100% { opacity: 1; }
  50%       { opacity: 0; }
}

/* ── Scroll Progress Bar ──────────────────────────────────── */
.scroll-progress {
  position: fixed;
  top: 0;
  left: 0;
  height: 3px;
  background: var(--grad-accent);
  z-index: calc(var(--z-sticky) + 1);
  transition: width 0.1s linear;
  border-radius: 0 var(--radius-full) var(--radius-full) 0;
}
