/* ============================================================
   Jay Pardasani — Animation Styles
   ============================================================ */

/* Text Reveal Mask */
.reveal-text {
  overflow: hidden;
  display: block;
}

.reveal-text > span {
  display: inline-block;
  transform: translateY(110%);
  transition: transform 1s var(--ease-out);
}

.reveal-text.is-revealed > span {
  transform: translateY(0);
}

/* Image Reveal Mask */
.reveal-image {
  position: relative;
  overflow: hidden;
}

.reveal-image::after {
  content: "";
  position: absolute;
  inset: 0;
  background: var(--color-primary);
  transform-origin: right;
  transform: scaleX(1);
  transition: transform 1.1s var(--ease-out);
  z-index: 2;
}

.reveal-image.is-revealed::after {
  transform: scaleX(0);
  transform-origin: left;
}

.reveal-image img,
.reveal-image .about__image-placeholder,
.reveal-image .hero__portrait-placeholder {
  transform: scale(1.15);
  transition: transform 1.4s var(--ease-out) 0.2s;
}

.reveal-image.is-revealed img,
.reveal-image.is-revealed .about__image-placeholder,
.reveal-image.is-revealed .hero__portrait-placeholder {
  transform: scale(1);
}

/* Hover Glow */
.hover-glow {
  position: relative;
}

.hover-glow::before {
  content: "";
  position: absolute;
  inset: -1px;
  border-radius: inherit;
  background: linear-gradient(135deg, var(--color-accent), transparent 60%);
  opacity: 0;
  z-index: -1;
  transition: opacity var(--duration) var(--ease-out);
  filter: blur(12px);
}

.hover-glow:hover::before {
  opacity: 0.5;
}

/* Magnetic Button Wrapper */
.magnetic-wrap {
  display: inline-block;
}

/* Floating Icons */
.float-icon {
  animation: floatY 4s ease-in-out infinite;
}

.float-icon--delay {
  animation-delay: 1.2s;
}

@keyframes floatY {
  0%, 100% { transform: translateY(0); }
  50% { transform: translateY(-12px); }
}

/* Pulse Accent */
@keyframes pulseAccent {
  0%, 100% { box-shadow: 0 0 0 0 var(--color-accent-glow); }
  50% { box-shadow: 0 0 0 12px transparent; }
}

.pulse-accent {
  animation: pulseAccent 2.5s ease-in-out infinite;
}

/* Rotate Slow */
@keyframes rotateSlow {
  from { transform: rotate(0deg); }
  to { transform: rotate(360deg); }
}

.rotate-slow {
  animation: rotateSlow 40s linear infinite;
}

/* Scale In */
@keyframes scaleIn {
  from {
    opacity: 0;
    transform: scale(0.9);
  }
  to {
    opacity: 1;
    transform: scale(1);
  }
}

/* Fade Up Keyframe (AOS-like fallback) */
@keyframes fadeUp {
  from {
    opacity: 0;
    transform: translateY(30px);
  }
  to {
    opacity: 1;
    transform: translateY(0);
  }
}

@keyframes fadeLeft {
  from {
    opacity: 0;
    transform: translateX(-30px);
  }
  to {
    opacity: 1;
    transform: translateX(0);
  }
}

@keyframes fadeRight {
  from {
    opacity: 0;
    transform: translateX(30px);
  }
  to {
    opacity: 1;
    transform: translateX(0);
  }
}

/* Stagger children */
.stagger-children > * {
  opacity: 0;
  transform: translateY(24px);
  transition: opacity 0.6s var(--ease-out), transform 0.6s var(--ease-out);
}

.stagger-children.is-revealed > *:nth-child(1) { transition-delay: 0.05s; }
.stagger-children.is-revealed > *:nth-child(2) { transition-delay: 0.12s; }
.stagger-children.is-revealed > *:nth-child(3) { transition-delay: 0.19s; }
.stagger-children.is-revealed > *:nth-child(4) { transition-delay: 0.26s; }
.stagger-children.is-revealed > *:nth-child(5) { transition-delay: 0.33s; }
.stagger-children.is-revealed > *:nth-child(6) { transition-delay: 0.4s; }

.stagger-children.is-revealed > * {
  opacity: 1;
  transform: none;
}

/* Line Draw */
.line-draw {
  stroke-dasharray: 1000;
  stroke-dashoffset: 1000;
  transition: stroke-dashoffset 1.5s var(--ease-out);
}

.line-draw.is-revealed {
  stroke-dashoffset: 0;
}

/* Distortion Hover (CSS approximate) */
.distort-hover {
  transition: filter 0.5s var(--ease-out), transform 0.5s var(--ease-out);
}

.distort-hover:hover {
  filter: contrast(1.05) saturate(1.1);
  transform: scale(1.02);
}

/* Nav Link Underline Animation Enhancement */
.nav__link.is-active::after {
  transform: scaleX(1);
  transform-origin: left;
}

/* Page Enter */
.page-enter {
  animation: fadeUp 0.8s var(--ease-out) both;
}

/* Blog Card Read More Arrow Bounce */
@keyframes arrowNudge {
  0%, 100% { transform: translateX(0); }
  50% { transform: translateX(4px); }
}

.blog-card:hover .blog-card__link svg {
  animation: arrowNudge 0.8s var(--ease-out) infinite;
}

/* Loader Logo Pulse */
.loader__logo {
  animation: fadeUp 0.6s var(--ease-out) both;
}

/* Counter Number Glow */
.stat__number.is-counting {
  text-shadow: 0 0 30px var(--color-accent-glow);
}

/* Journey Dot Pulse */
.journey__item.is-active .journey__dot {
  animation: pulseAccent 2s ease-in-out infinite;
}

/* Glass Shine Sweep */
@keyframes shineSweep {
  0% { transform: translateX(-100%) skewX(-15deg); }
  100% { transform: translateX(200%) skewX(-15deg); }
}

.glass-shine {
  position: relative;
  overflow: hidden;
}

.glass-shine::after {
  content: "";
  position: absolute;
  top: 0;
  left: 0;
  width: 40%;
  height: 100%;
  background: linear-gradient(
    90deg,
    transparent,
    rgba(255, 255, 255, 0.08),
    transparent
  );
  pointer-events: none;
}

.glass-shine:hover::after {
  animation: shineSweep 0.8s var(--ease-out);
}

/* Hero Title Word Spacing */
.hero__title .word {
  display: inline-block;
  margin-right: 0.25em;
}

/* Smooth Lenis scrollbar hide option */
html.lenis {
  scrollbar-gutter: stable;
}
