/* Mouvement VidaBela (2026-10-22), chargé après les feuilles de Codex.
   Un chargement qui se compose (visuel, titre, texte, action) et des
   apparitions au défilement franches mais calmes. Courbe de décélération
   forte, aucune boucle, tout est coupé en mouvement réduit. */
:root{--vb-ease:cubic-bezier(.16,1,.3,1)}

/* ── Chargement ─────────────────────────────────────────────────────── */
@keyframes vb-rise{from{opacity:0;transform:translate3d(0,22px,0)}to{opacity:1;transform:none}}
@keyframes vb-fade{from{opacity:0}to{opacity:1}}
@keyframes vb-unveil{from{clip-path:inset(0 0 100% 0);transform:translate3d(0,.18em,0)}to{clip-path:inset(0 0 -.2em 0);transform:none}}
@keyframes vb-open{from{opacity:0;transform:scale(1.08)}to{opacity:1;transform:scale(1)}}
@keyframes vb-drop{from{opacity:0;transform:translate3d(0,-12px,0)}to{opacity:1;transform:none}}

.site-header>*{animation:vb-drop .7s var(--vb-ease) both}
.site-header>:nth-child(2){animation-delay:.08s}.site-header>:nth-child(3){animation-delay:.16s}
/* Opacité seulement : le transform du visuel sert au parallaxe de Codex */
.hero-portrait{animation:vb-fade 1.3s var(--vb-ease) .05s both}
.hero-slide.is-active img{animation-duration:3.5s}
.hero-content .hero-location{animation:vb-rise .7s var(--vb-ease) .25s both}
.hero-content h1{animation:vb-unveil 1.05s var(--vb-ease) .35s both}
.hero-content .hero-description{animation:vb-rise .8s var(--vb-ease) .7s both}
.hero-content .hero-detail{animation:vb-rise .8s var(--vb-ease) .8s both}
.hero-content .hero-rating{animation:vb-rise .8s var(--vb-ease) .82s both}
.hero-content .hero-actions{animation:vb-rise .8s var(--vb-ease) .9s both}
.hero-content .hero-note,.hero-content>.carousel-controls{animation:vb-fade .8s var(--vb-ease) 1.1s both}
.hero-footnote{animation:vb-rise .9s var(--vb-ease) 1.15s both}
.hero-portrait>.carousel-controls{animation:vb-fade .8s var(--vb-ease) 1.3s both}
.trust-grid>p{animation:vb-rise .8s var(--vb-ease) both}
.trust-grid>p:nth-child(1){animation-delay:1.25s}.trust-grid>p:nth-child(2){animation-delay:1.35s}.trust-grid>p:nth-child(3){animation-delay:1.45s}

/* Le bouton principal : un reflet passe une fois, une fois tout posé */
.hero-actions .button-gold{position:relative;overflow:hidden}
.hero-actions .button-gold::after{content:"";position:absolute;inset:0;background:linear-gradient(105deg,transparent 35%,rgba(255,255,255,.38) 50%,transparent 65%);transform:translateX(-120%);animation:vb-sheen 1.1s var(--vb-ease) 2s 1 both;pointer-events:none}
@keyframes vb-sheen{to{transform:translateX(120%)}}

/* ── Défilement : on part de vraiment caché ─────────────────────────── */
.scroll-reveal:not(.is-revealed){opacity:0;transform:translate3d(0,40px,0)}
/* Titres : montée, fondu et mise au point (un masque complet empêcherait
   l'observateur de défilement de les détecter) */
h2.scroll-reveal:not(.is-revealed){opacity:0;transform:translate3d(0,.45em,0);filter:blur(8px);clip-path:none}
h2.scroll-reveal{transition:opacity 1s var(--vb-ease),transform 1.1s var(--vb-ease),filter 1s var(--vb-ease)!important}
.price-card.scroll-reveal:not(.is-revealed){opacity:0;transform:translate3d(0,48px,0) scale(.97)}
.price-card.scroll-reveal{transition:opacity .9s var(--vb-ease),transform .9s var(--vb-ease),box-shadow .3s ease!important;transition-delay:var(--reveal-delay,0ms)!important}
.timeline article.scroll-reveal{transition-delay:var(--reveal-delay,0ms)}
.care-word.scroll-reveal:not(.is-revealed){opacity:0;transform:translate3d(-24px,0,0)}

/* Cartes de programme : légère élévation au survol (souris seulement) */
@media (hover:hover) and (pointer:fine){
  .price-card{transition:transform .35s var(--vb-ease),box-shadow .35s var(--vb-ease)}
  .price-card.is-revealed:hover{transform:translate3d(0,-6px,0);box-shadow:0 22px 44px -26px rgba(13,27,42,.45)}
}

@media (prefers-reduced-motion: reduce){
  .site-header>*,.hero-portrait,.hero-content>*,.hero-content h1,.hero-footnote,.trust-grid>p,.hero-actions .button-gold::after{animation:none!important}
  .scroll-reveal:not(.is-revealed),h2.scroll-reveal:not(.is-revealed),.price-card.scroll-reveal:not(.is-revealed),.care-word.scroll-reveal:not(.is-revealed){opacity:1;transform:none;clip-path:none;filter:none}
}
