/* ==========================================================================
   hoomie dev — apparitions au scroll et micro-animations
   Chargé après les CSS de page. Piloté par js/motion.js.

   Garde-fous :
   - Rien n'est caché sans JS : l'état masqué n'existe que sous html.has-motion,
     classe posée par le script, et seulement sur les éléments marqués
     data-reveal="pending" (hors écran au chargement).
   - Rien au-dessus de la ligne de flottaison n'attend : le script ne marque pas
     ce qui est déjà visible (LCP intact).
   - Uniquement opacity + transform : aucun décalage de mise en page (CLS = 0).
   - prefers-reduced-motion: reduce → aucune animation (le script ne s'active pas,
     et ce fichier ne déclare rien hors de la media query no-preference).
   ========================================================================== */

@media (prefers-reduced-motion: no-preference) {

  .has-motion [data-reveal="pending"] {
    opacity: 0;
    transform: translateY(var(--space-5));
  }

  .has-motion [data-reveal="in"] {
    opacity: 1;
    transform: none;
    transition:
      opacity calc(var(--dur) * 2.4) var(--ease),
      transform calc(var(--dur) * 2.4) var(--ease);
    /* décalage en cascade entre éléments frères (index posé par le script, plafonné) */
    transition-delay: calc(var(--reveal-i, 0) * var(--dur-fast) * 0.5);
  }


  /* Pastille « en direct » : pulsation lente, très discrète */
  /* 3 pulsations puis arrêt (RGAA 13.8 : pas de mouvement de plus de 5 s) */
  .live-dot {
    animation: hoomie-live calc(var(--dur) * 6) var(--ease) 3;
  }
}

@keyframes hoomie-live {
  0%, 100% { opacity: 1; }
  50%      { opacity: 0.45; }
}

/* Impression : tout est visible */
@media print {
  .has-motion [data-reveal] { opacity: 1 !important; transform: none !important; }
}
