/* ============================================================
   Animations — scroll reveals, hero entrance & micro-interactions
   ============================================================ */

[data-reveal] {
  opacity: 1;
  transform: none;
}
/* hidden initial state applies ONLY once JS confirms it can animate.
   Without JS (e.g. opened via file://), content stays fully visible. */
.reveal-ready [data-reveal] {
  opacity: 0;
  transform: translateY(24px);
  transition: opacity .7s var(--ease), transform .7s var(--ease);
  will-change: opacity, transform;
}
.reveal-ready [data-reveal].is-visible { opacity: 1; transform: none; }

/* staggered children */
.reveal-ready [data-reveal-stagger] > * {
  opacity: 0; transform: translateY(20px);
  transition: opacity .6s var(--ease), transform .6s var(--ease);
}
.reveal-ready [data-reveal-stagger].is-visible > * { opacity: 1; transform: none; }
.reveal-ready [data-reveal-stagger].is-visible > *:nth-child(1)  { transition-delay: .00s; }
.reveal-ready [data-reveal-stagger].is-visible > *:nth-child(2)  { transition-delay: .08s; }
.reveal-ready [data-reveal-stagger].is-visible > *:nth-child(3)  { transition-delay: .16s; }
.reveal-ready [data-reveal-stagger].is-visible > *:nth-child(4)  { transition-delay: .24s; }
.reveal-ready [data-reveal-stagger].is-visible > *:nth-child(5)  { transition-delay: .32s; }
.reveal-ready [data-reveal-stagger].is-visible > *:nth-child(6)  { transition-delay: .40s; }
.reveal-ready [data-reveal-stagger].is-visible > *:nth-child(7)  { transition-delay: .48s; }
.reveal-ready [data-reveal-stagger].is-visible > *:nth-child(8)  { transition-delay: .56s; }
.reveal-ready [data-reveal-stagger].is-visible > *:nth-child(9)  { transition-delay: .64s; }
.reveal-ready [data-reveal-stagger].is-visible > *:nth-child(10) { transition-delay: .72s; }
.reveal-ready [data-reveal-stagger].is-visible > *:nth-child(11) { transition-delay: .80s; }
.reveal-ready [data-reveal-stagger].is-visible > *:nth-child(12) { transition-delay: .88s; }

/* ---------- navbar entrance ---------- */
.reveal-ready .nav {
  animation: navSlideDown .75s var(--ease) both;
}
@keyframes navSlideDown {
  from { opacity: 0; transform: translateY(calc(-100% - 8px)); }
  to { opacity: 1; transform: translateY(0); }
}

/* ---------- hero headline & load sequence ---------- */
.hero__line {
  overflow: visible;
  line-height: 1.08;
  padding-bottom: 0.08em;
  animation: heroLineIn .95s cubic-bezier(.22, 1, .36, 1) both;
  will-change: transform, opacity, filter;
}
.hero__inner .sans-line {
  animation-delay: .16s;
}
.hero__word {
  display: inline-block;
  will-change: transform, opacity, filter;
}
.hero__accent {
  -webkit-background-clip: text;
  background-clip: text;
  color: transparent;
  -webkit-text-fill-color: transparent;
  padding-bottom: 0.05em;
}
.hero__accent--digital {
  background-image: linear-gradient(120deg, var(--green-deep) 0%, var(--green) 55%, var(--blue) 100%);
}
.hero__accent--future {
  background-image: linear-gradient(120deg, var(--blue) 0%, #1473c2 45%, var(--purple) 100%);
}
.reveal-ready [data-hero]:not(.is-loaded) .hero__word {
  opacity: 0;
  transform: translateY(24px);
  filter: blur(8px);
}
.reveal-ready [data-hero]:not(.is-loaded) .hero__eyebrow,
.reveal-ready [data-hero]:not(.is-loaded) .hero__fade {
  opacity: 0;
  transform: translateY(22px);
}
.reveal-ready .hero:not(.is-loaded) .fan__card {
  opacity: 0;
  transform: translateY(calc(var(--fan-y, 0px) + 70px)) rotate(0deg) scale(.88);
}

.reveal-ready [data-hero].is-loaded .hero__word {
  animation: heroWordIn .82s cubic-bezier(.22, 1, .36, 1) forwards;
  animation-delay: calc(.12s + var(--word-i, 0) * .07s);
}
.reveal-ready [data-hero].is-loaded .hero__word--accent {
  animation: heroWordIn .9s cubic-bezier(.22, 1, .36, 1) forwards;
  animation-delay: calc(.12s + var(--word-i, 0) * .07s);
}
.reveal-ready [data-hero].is-loaded .hero__eyebrow {
  animation: heroFadeUp .75s var(--ease) forwards;
  animation-delay: .05s;
}
.reveal-ready [data-hero].is-loaded .hero__sub.hero__fade {
  animation: heroFadeUp .85s var(--ease) forwards;
  animation-delay: var(--hero-sub-delay, .85s);
}
.reveal-ready .hero.is-loaded .hero__cta .btn.hero__fade {
  animation: heroFadeUp .85s var(--ease) forwards;
  opacity: 0;
}
.reveal-ready .hero.is-loaded .hero__cta .btn.hero__fade:nth-child(1) {
  animation-delay: calc(var(--hero-sub-delay, .85s) + .12s);
}
.reveal-ready .hero.is-loaded .hero__cta .btn.hero__fade:nth-child(2) {
  animation-delay: calc(var(--hero-sub-delay, .85s) + .22s);
}

/* fan cards deal in after headline */
.reveal-ready .hero.is-loaded .fan__card {
  animation: fanDealIn .95s cubic-bezier(.22, 1, .36, 1) forwards;
}
.reveal-ready .hero.is-loaded .fan__card:nth-child(1) { animation-delay: calc(var(--hero-sub-delay, .85s) + .28s); }
.reveal-ready .hero.is-loaded .fan__card:nth-child(2) { animation-delay: calc(var(--hero-sub-delay, .85s) + .36s); }
.reveal-ready .hero.is-loaded .fan__card:nth-child(3) { animation-delay: calc(var(--hero-sub-delay, .85s) + .44s); }
.reveal-ready .hero.is-loaded .fan__card:nth-child(4) { animation-delay: calc(var(--hero-sub-delay, .85s) + .52s); }
.reveal-ready .hero.is-loaded .fan__card:nth-child(5) { animation-delay: calc(var(--hero-sub-delay, .85s) + .60s); }
.reveal-ready .hero.is-loaded .fan__card:nth-child(6) { animation-delay: calc(var(--hero-sub-delay, .85s) + .68s); }

@keyframes heroWordIn {
  from { opacity: 0; transform: translateY(24px); filter: blur(8px); }
  to { opacity: 1; transform: translateY(0); filter: blur(0); }
}
@keyframes heroLineIn {
  from { opacity: 0; transform: translateY(28px); filter: blur(8px); }
  to { opacity: 1; transform: translateY(0); filter: blur(0); }
}
@keyframes heroFadeUp {
  from { opacity: 0; transform: translateY(22px); }
  to { opacity: 1; transform: translateY(0); }
}
@keyframes heroShimmer {
  to { background-position: 200% center; }
}
@keyframes fanDealIn {
  from {
    opacity: 0;
    transform: translateY(calc(var(--fan-y, 0px) + 70px)) rotate(0deg) scale(.88);
  }
  to {
    opacity: 1;
    transform: translateY(var(--fan-y, 0px)) rotate(var(--fan-r, 0deg)) scale(1);
  }
}

/* partner logos */
.reveal-ready .logos > img {
  transition: opacity .55s var(--ease), transform .55s var(--ease), filter .55s var(--ease);
}
.reveal-ready [data-reveal-stagger].logos:not(.is-visible) > img {
  opacity: 0;
  transform: translateY(16px) scale(.96);
  filter: grayscale(1);
}
.reveal-ready [data-reveal-stagger].logos.is-visible > img {
  opacity: .72;
  transform: none;
  filter: grayscale(.35);
}
.reveal-ready [data-reveal-stagger].logos.is-visible > img:hover {
  opacity: 1;
  filter: none;
  transform: translateY(-3px) scale(1.02);
}

.reveal-ready [data-reveal-stagger].is-visible .photo-card {
  transition: opacity .65s var(--ease), transform .65s var(--ease), box-shadow .65s var(--ease);
}
.reveal-ready [data-reveal-stagger].is-visible .program-card,
.reveal-ready [data-reveal-stagger].is-visible .project-card,
.reveal-ready [data-reveal-stagger].is-visible .tile {
  transition: opacity .6s var(--ease), transform .6s var(--ease), box-shadow .6s var(--ease);
}

/* team rows */
.reveal-ready .team-rows .team-row__kicker,
.reveal-ready .team-rows .team-row__name,
.reveal-ready .team-rows .team-row__role {
  opacity: 0;
  transform: translateY(14px);
}
.reveal-ready .team-rows.is-visible .team-row__kicker,
.reveal-ready .team-rows.is-visible .team-row__name,
.reveal-ready .team-rows.is-visible .team-row__role {
  animation: teamTextRise .72s var(--ease) forwards;
}
.reveal-ready .team-rows.is-visible .team-row__name { animation-delay: .08s; }
.reveal-ready .team-rows.is-visible .team-row__role { animation-delay: .16s; }

@keyframes teamTextRise {
  from { opacity: 0; transform: translateY(14px); }
  to { opacity: 1; transform: translateY(0); }
}

@media (prefers-reduced-motion: reduce) {
  .reveal-ready .nav { animation: none !important; }
  .hero__line { animation: none !important; }

  .reveal-ready [data-reveal], .reveal-ready [data-reveal-stagger] > * {
    opacity: 1 !important; transform: none !important; transition: none !important;
  }
  .reveal-ready [data-hero]:not(.is-loaded) .hero__word,
  .reveal-ready [data-hero]:not(.is-loaded) .hero__eyebrow,
  .reveal-ready [data-hero]:not(.is-loaded) .hero__fade {
    opacity: 1 !important; transform: none !important; filter: none !important;
  }
  .reveal-ready [data-hero].is-loaded .hero__word,
  .reveal-ready [data-hero].is-loaded .hero__eyebrow,
  .reveal-ready [data-hero].is-loaded .hero__fade,
  .reveal-ready .hero.is-loaded .fan__card,
  .reveal-ready .hero:not(.is-loaded) .fan__card {
    opacity: 1 !important; transform: none !important; filter: none !important;
  }
  .reveal-ready [data-hero].is-loaded .hero__cta .btn {
    animation: none !important; opacity: 1 !important; transform: none !important;
  }
  .hero::before, .hero::after { animation: none !important; }
  .hero__accent { color: var(--green-deep); background: none; -webkit-background-clip: unset; background-clip: unset; }

  .reveal-ready [data-reveal-stagger].logos:not(.is-visible) > img,
  .reveal-ready [data-reveal-stagger].logos.is-visible > img {
    opacity: .72 !important; transform: none !important; filter: grayscale(.35) !important;
  }

  .reveal-ready .team-orbit .team-card__kicker,
  .reveal-ready .team-orbit .team-card h3,
  .reveal-ready .team-orbit .team-card .role {
    opacity: 1 !important; transform: none !important; animation: none !important;
  }
}
