/* ============================================================
   Kinetic Text Module — Styles
   Scroll-triggered text animations (fade, slide, scale, blur).
   ============================================================ */

.kinetic-text {
  position: relative;
  display: flex;
  flex-direction: column;
  align-items: flex-start;
  justify-content: center;
  gap: var(--cs-space-sm, 0.5rem);
  padding: var(--cs-space-2xl, 4rem) var(--cs-space-xl, 2.5rem);
  min-height: 50vh;
  overflow: hidden;
}

/* ---- Segment (animated unit) ---- */
.kinetic-text__segment {
  display: inline-block;
  font-family: var(--cs-font-heading, sans-serif);
  font-size: var(--cs-text-4xl, 2.5rem);
  font-weight: var(--cs-weight-bold, 700);
  color: var(--cs-text, #f1f5f9);
  line-height: var(--cs-leading-tight, 1.1);
  letter-spacing: var(--cs-tracking-tight, -0.02em);
  will-change: transform, opacity, filter;
  transition: transform var(--cs-duration-slow, 600ms) var(--cs-ease-out, cubic-bezier(0, 0, 0.2, 1)),
              opacity var(--cs-duration-slow, 600ms) var(--cs-ease-out, cubic-bezier(0, 0, 0.2, 1)),
              filter var(--cs-duration-slow, 600ms) var(--cs-ease-out, cubic-bezier(0, 0, 0.2, 1));
}

/* ---- Hidden states (applied before IntersectionObserver triggers) ---- */

/* Fade */
.kinetic-text--fade .kinetic-text__segment {
  opacity: 0;
}
.kinetic-text--fade .kinetic-text__segment--visible {
  opacity: 1;
}

/* Slide Up */
.kinetic-text--slide-up .kinetic-text__segment {
  opacity: 0;
  transform: translateY(60px);
}
.kinetic-text--slide-up .kinetic-text__segment--visible {
  opacity: 1;
  transform: translateY(0);
}

/* Slide Left */
.kinetic-text--slide-left .kinetic-text__segment {
  opacity: 0;
  transform: translateX(-80px);
}
.kinetic-text--slide-left .kinetic-text__segment--visible {
  opacity: 1;
  transform: translateX(0);
}

/* Slide Right */
.kinetic-text--slide-right .kinetic-text__segment {
  opacity: 0;
  transform: translateX(80px);
}
.kinetic-text--slide-right .kinetic-text__segment--visible {
  opacity: 1;
  transform: translateX(0);
}

/* Scale */
.kinetic-text--scale .kinetic-text__segment {
  opacity: 0;
  transform: scale(0.5);
}
.kinetic-text--scale .kinetic-text__segment--visible {
  opacity: 1;
  transform: scale(1);
}

/* Blur */
.kinetic-text--blur .kinetic-text__segment {
  opacity: 0;
  filter: blur(12px);
  transform: translateY(20px);
}
.kinetic-text--blur .kinetic-text__segment--visible {
  opacity: 1;
  filter: blur(0);
  transform: translateY(0);
}

/* ---- Sub-segments (word/char splits) ---- */
.kinetic-text__sub {
  display: inline-block;
  will-change: transform, opacity, filter;
  transition: transform var(--cs-duration-slow, 600ms) var(--cs-ease-out, cubic-bezier(0, 0, 0.2, 1)),
              opacity var(--cs-duration-slow, 600ms) var(--cs-ease-out, cubic-bezier(0, 0, 0.2, 1)),
              filter var(--cs-duration-slow, 600ms) var(--cs-ease-out, cubic-bezier(0, 0, 0.2, 1));
}

/* ---- Responsive ---- */
@media (max-width: 768px) {
  .kinetic-text {
    padding: var(--cs-space-xl, 2.5rem) var(--cs-space-lg, 1.5rem);
    min-height: 40vh;
  }

  .kinetic-text__segment {
    font-size: var(--cs-text-3xl, 2rem);
  }
}

@media (max-width: 375px) {
  .kinetic-text {
    padding: var(--cs-space-lg, 1.5rem) var(--cs-space-md, 1rem);
    min-height: 30vh;
  }

  .kinetic-text__segment {
    font-size: var(--cs-text-2xl, 1.5rem);
  }
}

/* ---- Reduced motion: show text immediately, no animation ---- */
@media (prefers-reduced-motion: reduce) {
  .kinetic-text__segment,
  .kinetic-text__sub {
    opacity: 1 !important;
    transform: none !important;
    filter: none !important;
    transition-duration: 0.01ms !important;
    animation-duration: 0.01ms !important;
  }
}
