/**
 * cecifoot2026 - Scroll Reveal Animations
 *
 * Animations au scroll via Intersection Observer.
 * Chaque bloc reçoit un attribut data-animate en JS,
 * puis la classe .is-visible quand il entre dans le viewport.
 *
 * @package cecifoot2026
 * @since 1.1.0
 */

/* ==========================================================================
   Respect user preferences
   ========================================================================== */

@media (prefers-reduced-motion: reduce) {
    [data-animate] {
        opacity: 1 !important;
        transform: none !important;
        transition: none !important;
    }
    [data-animate] > * {
        opacity: 1 !important;
        transform: none !important;
        transition: none !important;
    }
}

/* ==========================================================================
   Base state — hidden before reveal
   ========================================================================== */

[data-animate] {
    will-change: opacity, transform;
}

/* ---------- fade-up ---------- */
[data-animate="fade-up"] {
    opacity: 0;
    transform: translateY(40px);
    transition: opacity 0.7s cubic-bezier(0.25, 0.46, 0.45, 0.94),
                transform 0.7s cubic-bezier(0.25, 0.46, 0.45, 0.94);
}
[data-animate="fade-up"].is-visible {
    opacity: 1;
    transform: translateY(0);
}

/* ---------- fade-in ---------- */
[data-animate="fade-in"] {
    opacity: 0;
    transition: opacity 0.8s ease;
}
[data-animate="fade-in"].is-visible {
    opacity: 1;
}

/* ---------- fade-left (slide from right) ---------- */
[data-animate="fade-left"] {
    opacity: 0;
    transform: translateX(60px);
    transition: opacity 0.7s cubic-bezier(0.25, 0.46, 0.45, 0.94),
                transform 0.7s cubic-bezier(0.25, 0.46, 0.45, 0.94);
}
[data-animate="fade-left"].is-visible {
    opacity: 1;
    transform: translateX(0);
}

/* ---------- fade-right (slide from left) ---------- */
[data-animate="fade-right"] {
    opacity: 0;
    transform: translateX(-60px);
    transition: opacity 0.7s cubic-bezier(0.25, 0.46, 0.45, 0.94),
                transform 0.7s cubic-bezier(0.25, 0.46, 0.45, 0.94);
}
[data-animate="fade-right"].is-visible {
    opacity: 1;
    transform: translateX(0);
}

/* ---------- zoom-in ---------- */
[data-animate="zoom-in"] {
    opacity: 0;
    transform: scale(0.9);
    transition: opacity 0.7s ease,
                transform 0.7s cubic-bezier(0.25, 0.46, 0.45, 0.94);
}
[data-animate="zoom-in"].is-visible {
    opacity: 1;
    transform: scale(1);
}

/* ---------- fade-up-scale (combiné pour les cartes) ---------- */
[data-animate="fade-up-scale"] {
    opacity: 0;
    transform: translateY(30px) scale(0.95);
    transition: opacity 0.6s cubic-bezier(0.25, 0.46, 0.45, 0.94),
                transform 0.6s cubic-bezier(0.25, 0.46, 0.45, 0.94);
}
[data-animate="fade-up-scale"].is-visible {
    opacity: 1;
    transform: translateY(0) scale(1);
}

/* ==========================================================================
   Stagger — children animation with delay cascade
   ========================================================================== */

[data-animate-stagger] > * {
    opacity: 0;
    transform: translateY(25px);
    transition: opacity 0.5s cubic-bezier(0.25, 0.46, 0.45, 0.94),
                transform 0.5s cubic-bezier(0.25, 0.46, 0.45, 0.94);
}

[data-animate-stagger].is-visible > * {
    opacity: 1;
    transform: translateY(0);
}

/* Delay cascade via custom property set by JS */
[data-animate-stagger].is-visible > *:nth-child(1)  { transition-delay: 0s; }
[data-animate-stagger].is-visible > *:nth-child(2)  { transition-delay: 0.08s; }
[data-animate-stagger].is-visible > *:nth-child(3)  { transition-delay: 0.16s; }
[data-animate-stagger].is-visible > *:nth-child(4)  { transition-delay: 0.24s; }
[data-animate-stagger].is-visible > *:nth-child(5)  { transition-delay: 0.32s; }
[data-animate-stagger].is-visible > *:nth-child(6)  { transition-delay: 0.40s; }
[data-animate-stagger].is-visible > *:nth-child(7)  { transition-delay: 0.48s; }
[data-animate-stagger].is-visible > *:nth-child(8)  { transition-delay: 0.56s; }
[data-animate-stagger].is-visible > *:nth-child(9)  { transition-delay: 0.64s; }
[data-animate-stagger].is-visible > *:nth-child(10) { transition-delay: 0.72s; }
[data-animate-stagger].is-visible > *:nth-child(11) { transition-delay: 0.80s; }
[data-animate-stagger].is-visible > *:nth-child(12) { transition-delay: 0.88s; }
[data-animate-stagger].is-visible > *:nth-child(n+13) { transition-delay: 0.96s; }

/* ==========================================================================
   Section Image — animate columns separately
   ========================================================================== */

.cf-section-image[data-animate="split"] .cf-section-image__content {
    opacity: 0;
    transform: translateX(-50px);
    transition: opacity 0.7s cubic-bezier(0.25, 0.46, 0.45, 0.94) 0.1s,
                transform 0.7s cubic-bezier(0.25, 0.46, 0.45, 0.94) 0.1s;
}

.cf-section-image[data-animate="split"] .cf-section-image__image-col {
    opacity: 0;
    transform: translateX(50px);
    transition: opacity 0.7s cubic-bezier(0.25, 0.46, 0.45, 0.94) 0.25s,
                transform 0.7s cubic-bezier(0.25, 0.46, 0.45, 0.94) 0.25s;
}

/* Texte à droite → inverser les directions */
.cf-section-image--text-right[data-animate="split"] .cf-section-image__content {
    transform: translateX(50px);
}
.cf-section-image--text-right[data-animate="split"] .cf-section-image__image-col {
    transform: translateX(-50px);
}

.cf-section-image[data-animate="split"].is-visible .cf-section-image__content,
.cf-section-image[data-animate="split"].is-visible .cf-section-image__image-col {
    opacity: 1;
    transform: translateX(0);
}

/* ==========================================================================
   Grand Titre / Heading — cinematic text reveal
   ========================================================================== */

.cf-grand-titre-logo[data-animate] .cf-grand-titre-logo__titre,
.cf-heading-block[data-animate] .cf-heading-block__titre {
    opacity: 0;
    transform: translateY(30px) scale(0.96);
    transition: opacity 0.8s cubic-bezier(0.25, 0.46, 0.45, 0.94),
                transform 0.8s cubic-bezier(0.25, 0.46, 0.45, 0.94);
}

.cf-grand-titre-logo[data-animate] .cf-grand-titre-logo__logo,
.cf-heading-block[data-animate] .cf-heading-block__logo {
    opacity: 0;
    transform: scale(0.85);
    transition: opacity 0.6s ease 0.3s,
                transform 0.6s cubic-bezier(0.25, 0.46, 0.45, 0.94) 0.3s;
}

.cf-grand-titre-logo[data-animate].is-visible .cf-grand-titre-logo__titre,
.cf-heading-block[data-animate].is-visible .cf-heading-block__titre {
    opacity: 1;
    transform: translateY(0) scale(1);
}

.cf-grand-titre-logo[data-animate].is-visible .cf-grand-titre-logo__logo,
.cf-heading-block[data-animate].is-visible .cf-heading-block__logo {
    opacity: 1;
    transform: scale(1);
}

/* ==========================================================================
   Image Titre Bouton — parallax-like reveal
   ========================================================================== */

.cf-image-titre-bouton[data-animate] .cf-image-titre-bouton__bg {
    transform: scale(1.08);
    transition: transform 1.2s cubic-bezier(0.25, 0.46, 0.45, 0.94);
}
.cf-image-titre-bouton[data-animate].is-visible .cf-image-titre-bouton__bg {
    transform: scale(1);
}

.cf-image-titre-bouton[data-animate] .cf-image-titre-bouton__body {
    opacity: 0;
    transform: translateY(30px);
    transition: opacity 0.7s ease 0.3s,
                transform 0.7s cubic-bezier(0.25, 0.46, 0.45, 0.94) 0.3s;
}
.cf-image-titre-bouton[data-animate].is-visible .cf-image-titre-bouton__body {
    opacity: 1;
    transform: translateY(0);
}

/* ==========================================================================
   Timeline — items slide up from bottom
   ========================================================================== */

.cf-timeline[data-animate] .cf-timeline__item {
    opacity: 0;
    transform: translateY(30px);
    transition: opacity 0.5s cubic-bezier(0.25, 0.46, 0.45, 0.94),
                transform 0.5s cubic-bezier(0.25, 0.46, 0.45, 0.94);
}

.cf-timeline[data-animate].is-visible .cf-timeline__item:nth-child(1)  { transition-delay: 0s; }
.cf-timeline[data-animate].is-visible .cf-timeline__item:nth-child(2)  { transition-delay: 0.1s; }
.cf-timeline[data-animate].is-visible .cf-timeline__item:nth-child(3)  { transition-delay: 0.2s; }
.cf-timeline[data-animate].is-visible .cf-timeline__item:nth-child(4)  { transition-delay: 0.3s; }
.cf-timeline[data-animate].is-visible .cf-timeline__item:nth-child(5)  { transition-delay: 0.4s; }
.cf-timeline[data-animate].is-visible .cf-timeline__item:nth-child(6)  { transition-delay: 0.5s; }
.cf-timeline[data-animate].is-visible .cf-timeline__item:nth-child(7)  { transition-delay: 0.6s; }
.cf-timeline[data-animate].is-visible .cf-timeline__item:nth-child(8)  { transition-delay: 0.7s; }
.cf-timeline[data-animate].is-visible .cf-timeline__item:nth-child(n+9) { transition-delay: 0.8s; }

.cf-timeline[data-animate].is-visible .cf-timeline__item {
    opacity: 1;
    transform: translateY(0);
}

/* ==========================================================================
   Programme matchs — day bars slide in, matches stagger
   ========================================================================== */

.cf-programme-billet[data-animate] .cf-programme-billet__day-bar {
    opacity: 0;
    transform: translateX(-30px);
    transition: opacity 0.5s ease,
                transform 0.5s cubic-bezier(0.25, 0.46, 0.45, 0.94);
}
.cf-programme-billet[data-animate].is-visible .cf-programme-billet__day-bar {
    opacity: 1;
    transform: translateX(0);
}

.cf-programme-billet[data-animate] .cf-match {
    opacity: 0;
    transform: translateY(20px);
    transition: opacity 0.4s ease,
                transform 0.4s cubic-bezier(0.25, 0.46, 0.45, 0.94);
}
.cf-programme-billet[data-animate].is-visible .cf-match {
    opacity: 1;
    transform: translateY(0);
}

/* ==========================================================================
   SVG de fond — rotation lente subtile
   ========================================================================== */

@keyframes cf-svg-float {
    0%   { transform: rotate(0deg) scale(1); }
    50%  { transform: rotate(1.5deg) scale(1.02); }
    100% { transform: rotate(0deg) scale(1); }
}

.cf-section-blocs__svg svg,
.cf-section-image__svg svg,
.cf-grand-titre-logo__svg-fond svg,
.cf-heading-block__svg-fond svg {
    animation: cf-svg-float 12s ease-in-out infinite;
    transform-origin: center center;
}

/* ==========================================================================
   Icone liste items — stagger from left
   ========================================================================== */

.cf-icone-liste[data-animate] .cf-icone-liste__item {
    opacity: 0;
    transform: translateX(-20px);
    transition: opacity 0.4s ease,
                transform 0.4s cubic-bezier(0.25, 0.46, 0.45, 0.94);
}

.cf-icone-liste[data-animate].is-visible .cf-icone-liste__item:nth-child(1) { transition-delay: 0s; }
.cf-icone-liste[data-animate].is-visible .cf-icone-liste__item:nth-child(2) { transition-delay: 0.1s; }
.cf-icone-liste[data-animate].is-visible .cf-icone-liste__item:nth-child(3) { transition-delay: 0.1s; }
.cf-icone-liste[data-animate].is-visible .cf-icone-liste__item:nth-child(4) { transition-delay: 0.2s; }
.cf-icone-liste[data-animate].is-visible .cf-icone-liste__item:nth-child(5) { transition-delay: 0.25s; }
.cf-icone-liste[data-animate].is-visible .cf-icone-liste__item:nth-child(n+6) { transition-delay: 0.3s; }

.cf-icone-liste[data-animate].is-visible .cf-icone-liste__item {
    opacity: 1;
    transform: translateX(0);
}

/* ==========================================================================
   Équipes Liste — items fade up stagger
   ========================================================================== */

.cf-eqliste[data-animate] .cf-eqliste__item {
    opacity: 0;
    transform: translateY(20px);
    transition: opacity 0.5s ease,
                transform 0.5s cubic-bezier(0.25, 0.46, 0.45, 0.94);
}

.cf-eqliste[data-animate].is-visible .cf-eqliste__item:nth-child(1)  { transition-delay: 0s; }
.cf-eqliste[data-animate].is-visible .cf-eqliste__item:nth-child(2)  { transition-delay: 0.08s; }
.cf-eqliste[data-animate].is-visible .cf-eqliste__item:nth-child(3)  { transition-delay: 0.16s; }
.cf-eqliste[data-animate].is-visible .cf-eqliste__item:nth-child(4)  { transition-delay: 0.24s; }
.cf-eqliste[data-animate].is-visible .cf-eqliste__item:nth-child(5)  { transition-delay: 0.32s; }
.cf-eqliste[data-animate].is-visible .cf-eqliste__item:nth-child(6)  { transition-delay: 0.40s; }
.cf-eqliste[data-animate].is-visible .cf-eqliste__item:nth-child(n+7) { transition-delay: 0.48s; }

.cf-eqliste[data-animate].is-visible .cf-eqliste__item {
    opacity: 1;
    transform: translateY(0);
}

/* ==========================================================================
   Couleur Image Texte Bouton — card reveal
   ========================================================================== */

.cf-citb[data-animate] .cf-citb__image-wrap {
    opacity: 0;
    transform: scale(0.95);
    transition: opacity 0.6s ease,
                transform 0.6s cubic-bezier(0.25, 0.46, 0.45, 0.94);
}
.cf-citb[data-animate] .cf-citb__body {
    opacity: 0;
    transform: translateY(20px);
    transition: opacity 0.5s ease 0.15s,
                transform 0.5s cubic-bezier(0.25, 0.46, 0.45, 0.94) 0.15s;
}
.cf-citb[data-animate] .cf-citb__footer {
    opacity: 0;
    transform: translateY(15px);
    transition: opacity 0.4s ease 0.3s,
                transform 0.4s cubic-bezier(0.25, 0.46, 0.45, 0.94) 0.3s;
}

.cf-citb[data-animate].is-visible .cf-citb__image-wrap,
.cf-citb[data-animate].is-visible .cf-citb__body,
.cf-citb[data-animate].is-visible .cf-citb__footer {
    opacity: 1;
    transform: none;
}

/* ==========================================================================
   Grande image — zoom reveal
   ========================================================================== */

.cf-grande-image[data-animate] {
    overflow: hidden;
}
.cf-grande-image[data-animate] .cf-grande-image__img {
    transform: scale(1.06);
    transition: transform 1.2s cubic-bezier(0.25, 0.46, 0.45, 0.94);
}
.cf-grande-image[data-animate].is-visible .cf-grande-image__img {
    transform: scale(1);
}

/* ==========================================================================
   Images multiples — stagger items
   ========================================================================== */

.cf-images-multiples[data-animate] .cf-images-multiples__item {
    opacity: 0;
    transform: translateY(25px) scale(0.95);
    transition: opacity 0.5s ease,
                transform 0.5s cubic-bezier(0.25, 0.46, 0.45, 0.94);
}

.cf-images-multiples[data-animate].is-visible .cf-images-multiples__item:nth-child(1) { transition-delay: 0s; }
.cf-images-multiples[data-animate].is-visible .cf-images-multiples__item:nth-child(2) { transition-delay: 0.1s; }
.cf-images-multiples[data-animate].is-visible .cf-images-multiples__item:nth-child(3) { transition-delay: 0.2s; }
.cf-images-multiples[data-animate].is-visible .cf-images-multiples__item:nth-child(4) { transition-delay: 0.3s; }
.cf-images-multiples[data-animate].is-visible .cf-images-multiples__item:nth-child(n+5) { transition-delay: 0.4s; }

.cf-images-multiples[data-animate].is-visible .cf-images-multiples__item {
    opacity: 1;
    transform: none;
}

/* ==========================================================================
   Bouton — subtle pop
   ========================================================================== */

.cf-bouton-ceci__wrapper[data-animate] {
    opacity: 0;
    transform: translateY(15px);
    transition: opacity 0.5s ease,
                transform 0.5s cubic-bezier(0.25, 0.46, 0.45, 0.94);
}
.cf-bouton-ceci__wrapper[data-animate].is-visible {
    opacity: 1;
    transform: translateY(0);
}
