/* ============================================
   ANIMATIONS — keyframes partagés
   ============================================ */

/* Déploiements (du haut vers le bas) */
@keyframes unroll {
  from { max-height: 0;      opacity: 0.4; overflow: hidden; }
  to   { max-height: 2000px; opacity: 1;   overflow: hidden; }
}

/* Réorganisation du programme au filtrage : fondu subtil */
@keyframes filter-in {
  from { opacity: 0.5; }
  to   { opacity: 1; }
}

/* Défilement horizontal infini — direction/distance pilotées par variables
   (résolues sur l'élément animé, cf. .marquee-track) */
@keyframes marquee {
  from { transform: translateX(var(--marquee-from, 0)); }
  to   { transform: translateX(var(--marquee-to, -50%)); }
}

.faq-item.is-open .faq-item__answer,
.event-card.is-open .event-card__sessions,
.events__row:not(.is-collapsed) .events__track {
  animation: unroll 0.3s ease;
}

/* "Voir tout le programme" (desktop) : les cards révélées se déploient */
@media (min-width: 769px) {
  .events__row.is-day-open .events__track > .event-card:nth-child(n+4) {
    animation: unroll 0.3s ease;
  }
}

@media (prefers-reduced-motion: reduce) {
  .faq-item.is-open .faq-item__answer,
  .event-card.is-open .event-card__sessions,
  .events__row:not(.is-collapsed) .events__track,
  .events__row.is-day-open .events__track > .event-card:nth-child(n+4) {
    animation: none;
  }
}
