/* ==========================================================================
   Lock & Gooo — Animations et micro-interactions
   Toutes les animations sont désactivées si l'utilisateur a demandé
   une réduction du mouvement (prefers-reduced-motion).
   ========================================================================== */

/* --------------------------------------------------------------------------
   Apparition au défilement — pilotée par IntersectionObserver (js/animations.js)
   -------------------------------------------------------------------------- */
[data-reveal] {
  opacity: 0;
  will-change: opacity, transform;
  transition:
    opacity .8s var(--ease-out),
    transform .8s var(--ease-out);
  transition-delay: var(--reveal-delay, 0ms);
}
[data-reveal="up"]     { transform: translateY(32px); }
[data-reveal="down"]   { transform: translateY(-24px); }
[data-reveal="left"]   { transform: translateX(-40px); }
[data-reveal="right"]  { transform: translateX(40px); }
[data-reveal="scale"]  { transform: scale(.94); }
[data-reveal="fade"]   { transform: none; }

[data-reveal].is-visible {
  opacity: 1;
  transform: none;
}

/* --------------------------------------------------------------------------
   Entrée du hero au chargement
   -------------------------------------------------------------------------- */
@keyframes lg-rise {
  from { opacity: 0; transform: translateY(28px); }
  to   { opacity: 1; transform: none; }
}
@keyframes lg-rise-soft {
  from { opacity: 0; transform: translateY(18px); }
  to   { opacity: 1; transform: none; }
}
@keyframes lg-pop {
  0%   { opacity: 0; transform: scale(.86); }
  60%  { opacity: 1; transform: scale(1.03); }
  100% { opacity: 1; transform: scale(1); }
}
@keyframes lg-slide-in {
  from { opacity: 0; transform: translateX(48px) scale(.97); }
  to   { opacity: 1; transform: none; }
}

.is-ready .hero__titles .badge  { animation: lg-rise-soft .7s var(--ease-out) .05s both; }
.is-ready .hero__title          { animation: lg-rise .85s var(--ease-out) .14s both; }
.is-ready .hero__lead           { animation: lg-rise .85s var(--ease-out) .24s both; }
.is-ready .hero__booking        { animation: lg-rise .85s var(--ease-out) .34s both; }
.is-ready .hero__card           { animation: lg-slide-in 1s var(--ease-out) .2s both; }
.is-ready .hero__float          { animation: lg-pop .7s var(--ease-out) .85s both; }
.is-ready .hero__trust          { animation: lg-rise-soft .8s var(--ease-out) .5s both; }
.is-ready .site-header          { animation: lg-rise-soft .7s var(--ease-out) 0s both; }

/* --------------------------------------------------------------------------
   Éléments décoratifs en mouvement continu
   -------------------------------------------------------------------------- */
@keyframes lg-drift {
  0%, 100% { transform: translate3d(0, 0, 0) scale(1); }
  50%      { transform: translate3d(-18px, 22px, 0) scale(1.06); }
}
@keyframes lg-drift-alt {
  0%, 100% { transform: translate3d(0, 0, 0) scale(1); }
  50%      { transform: translate3d(24px, -16px, 0) scale(1.05); }
}
.hero__blob--a { animation: lg-drift 17s ease-in-out infinite; }
.hero__blob--b { animation: lg-drift-alt 21s ease-in-out infinite; }

@keyframes lg-float {
  0%, 100% { transform: translateY(0); }
  50%      { transform: translateY(-9px); }
}
.is-ready .hero__float { animation: lg-pop .7s var(--ease-out) .85s both, lg-float 5.5s ease-in-out 1.6s infinite; }

/* --------------------------------------------------------------------------
   Compteur / accent sur le prix au survol des cartes tarifaires
   -------------------------------------------------------------------------- */
.price-card__value {
  display: inline-block;
  transition: transform var(--dur) var(--ease-out);
}
.price-card:hover .price-card__value { transform: translateY(-2px) scale(1.03); }

/* --------------------------------------------------------------------------
   Soulignement animé des liens du pied de page et des liens texte
   -------------------------------------------------------------------------- */
.link-underline {
  background-image: linear-gradient(currentColor, currentColor);
  background-size: 0 1px;
  background-repeat: no-repeat;
  background-position: 0 100%;
  transition: background-size var(--dur) var(--ease-out);
}
.link-underline:hover { background-size: 100% 1px; }

/* --------------------------------------------------------------------------
   Carrousel d'avis — transition entre les pages
   -------------------------------------------------------------------------- */
.reviews__grid { transition: opacity var(--dur) var(--ease); }
.reviews__grid.is-swapping { opacity: 0; }

/* --------------------------------------------------------------------------
   Respect des préférences d'accessibilité
   -------------------------------------------------------------------------- */
@media (prefers-reduced-motion: reduce) {
  *,
  *::before,
  *::after {
    animation-duration: .001ms !important;
    animation-iteration-count: 1 !important;
    transition-duration: .001ms !important;
    scroll-behavior: auto !important;
  }
  [data-reveal] { opacity: 1 !important; transform: none !important; }
  html { scroll-behavior: auto; }
}
