/* Courbe d'entrée des blocs de page : easeInOutQuart. Accélération douce puis
   décélération longue — c'est elle qui donne le « posé » final. Déclarée à
   part pour ne pas toucher `--ease`, qui pilote tout le reste du site. */
:root { --ease-entry: cubic-bezier(.77, 0, .175, 1); }

/* Signature Contact : mouvement 24px / 900ms ease, masque 700ms --ease.
   Attributs explicites : aucun effet sur l'intro, le slider ou les swaps Carte. */
[data-reveal-visual] {
  opacity: 0;
  transform: translateY(24px);
  transition: opacity 900ms ease, transform 900ms ease;
}
[data-reveal-visual].is-in { opacity: 1; transform: none; }
/* Les cadres mesurés par La Carte et le hero Maison restent immobiles. */
[data-reveal-visual="fixed"] { transform: none; }
[data-reveal-mask] { position: relative; overflow: hidden; }
[data-reveal-mask]::before,
.photo[data-reveal-mask]::before {
  content: "";
  display: block;
  position: absolute;
  inset: 0;
  z-index: 3;
  background: var(--kinu);
  pointer-events: none;
  transform: scaleY(1);
  transform-origin: top;
  transition: transform 700ms var(--ease);
}
[data-reveal-mask].is-in::before,
.is-in[data-reveal-visual] [data-reveal-mask]::before {
  transform: scaleY(0);
}
[data-reveal-content] {
  opacity: 0;
  transform: translateY(14px);
  transition: opacity 520ms var(--ease), transform 520ms var(--ease);
  transition-delay: 0ms;
}
[data-reveal-label] {
  opacity: 0;
  transform: translateY(6px);
  transition: opacity 320ms var(--ease), transform 320ms var(--ease);
  transition-delay: 0ms;
}
[data-reveal-content].is-inview,
[data-reveal-label].is-inview { opacity: 1; transform: none; }

/* Aucun voile HTML de transition. Les révélations internes restent locales. */
html[data-page-motion] .page-veil { display: none; }

/* L'animation est facultative : un document chargé/masqué en arrière-plan
   ne doit jamais attendre l'horloge de rendu de Safari pour être lisible.
   L'Accueil conserve ses révélations historiques et son intro spécifique. */
html[data-page-motion]:not([data-reveal-motion]) [data-reveal-visual],
html[data-page-motion]:not([data-reveal-motion]) [data-reveal-content],
html[data-page-motion]:not([data-reveal-motion]) [data-reveal-label],
html[data-page-motion]:not([data-reveal-motion]) body:not(.page-home) main .up,
html[data-page-motion]:not([data-reveal-motion]) body:not(.page-home) main .section-num {
  opacity: 1;
  transform: none;
  transition: none;
}
html[data-page-motion]:not([data-reveal-motion]) [data-reveal-mask]::before,
html[data-page-motion]:not([data-reveal-motion]) body:not(.page-home) main .mask-reveal::before {
  transform: scaleY(0);
  transition: none;
}

@media (prefers-reduced-motion: reduce) {
  [data-reveal-visual], [data-reveal-content], [data-reveal-label] {
    opacity: 1;
    transform: none;
    transition: none;
  }
  [data-reveal-mask]::before, .photo[data-reveal-mask]::before {
    transform: scaleY(0);
    transition: none;
  }
  .contact-hero img { transform: none; transition: none; }
}

/* Keep the phone menu header readable. Page navigation and entry reveals
   otherwise use the same native/shared system as desktop and tablet. */
@media (max-width:600px) {
  html.is-menu-open #nav {
    color:var(--sumi);
    background-color:var(--kinu);
    border-bottom-color:var(--sumi-12);
    transition:none;
  }
}
