/* Fichier issu de la spécification docs/ECOMAZ_MOTION_DESIGN_SPEC.md (§ 3.6), sans modification. */
/* =========================================================
   EcoMaZ — Bibliothèque de mouvement
   Importé après ecomaz-tokens.css
   ========================================================= */

/* --- Keyframes --- */
@keyframes em-rise   { from { opacity: 0; transform: translateY(16px); } to { opacity: 1; transform: none; } }
@keyframes em-rise-lg{ from { opacity: 0; transform: translateY(26px); } to { opacity: 1; transform: none; } }
@keyframes em-pop    { 0% { opacity: 0; transform: scale(.4); } 70% { opacity: 1; transform: scale(1.12); } 100% { opacity: 1; transform: scale(1); } }
@keyframes em-fill-y { from { transform: scaleY(0); } to { transform: scaleY(1); } }
@keyframes em-fill-x { from { transform: scaleX(0); } to { transform: scaleX(1); } }
@keyframes em-pulse  { 0% { box-shadow: 0 0 0 0 rgba(181,73,47,.55); } 80%,100% { box-shadow: 0 0 0 9px rgba(181,73,47,0); } }
@keyframes em-glow   { 0%,100% { box-shadow: 0 0 0 0 rgba(232,176,75,.55); } 50% { box-shadow: 0 0 0 7px rgba(232,176,75,0); } }
@keyframes em-bump   { 0% { transform: scale(1); } 40% { transform: scale(1.3); } 100% { transform: scale(1); } }
@keyframes em-wave   { 0%,60%,100% { transform: rotate(0); } 15% { transform: rotate(16deg); } 30% { transform: rotate(-8deg); } 45% { transform: rotate(12deg); } }
@keyframes em-burst  {
  0%   { opacity: 1; transform: translate(-50%,-50%) translate(0,0) rotate(0deg) scale(1); }
  100% { opacity: 0; transform: translate(-50%,-50%) translate(var(--dx), var(--dy)) rotate(220deg) scale(.5); }
}
@keyframes em-scan   { 0% { top: 8%; } 50% { top: 88%; } 100% { top: 8%; } }  /* exception tolérée : élément de 3px */
@keyframes em-spin   { to { transform: rotate(360deg); } }
@keyframes em-draw   { from { stroke-dashoffset: 40; } to { stroke-dashoffset: 0; } }
@keyframes em-ring   { 0% { transform: scale(.6); opacity: .8; } 100% { transform: scale(1.8); opacity: 0; } }
@keyframes em-toast  { 0% { transform: translateY(120%); opacity: 0; } 100% { transform: none; opacity: 1; } }
@keyframes em-corner { 0%,100% { opacity: 1; } 50% { opacity: .45; } }
@keyframes em-float  { 0%,100% { transform: translateY(0); } 50% { transform: translateY(-10px); } }
@keyframes em-marquee{ from { transform: translateX(0); } to { transform: translateX(-50%); } }
@keyframes em-shine  { 0% { transform: translateX(-120%); } 60%,100% { transform: translateX(220%); } }
@keyframes em-orbit  { to { transform: rotate(360deg); } }

/* --- Classes utilitaires --- */
.em-rise    { animation: em-rise var(--em-dur-enter) var(--em-ease-out) both; animation-delay: calc(var(--i, 0) * var(--em-stagger)); }
.em-pop     { animation: em-pop 460ms var(--em-ease-back) both; }
.em-fill-y  { transform-origin: bottom; animation: em-fill-y 600ms var(--em-ease-out) both; }
.em-fill-x  { transform-origin: left;   animation: em-fill-x 1.2s var(--em-ease-out) both; }
.em-pulse   { animation: em-pulse 2.2s ease-out infinite; }
.em-glow    { animation: em-glow 2.6s ease-in-out infinite; }
.em-bump    { animation: em-bump 380ms var(--em-ease-back); }
.em-wave    { display: inline-block; transform-origin: 70% 80%; animation: em-wave 1.8s ease-in-out 700ms 2; }
.em-spin    { animation: em-spin 900ms linear infinite; }
.em-float   { animation: em-float 6s ease-in-out infinite; }

/* Retours d'interaction */
.em-press { transition: transform var(--em-dur-press) var(--em-ease-out), box-shadow var(--em-dur-hover) ease, background-color var(--em-dur-hover) ease; }
.em-press:active { transform: scale(.96); }
.em-lift  { transition: transform var(--em-dur-hover) var(--em-ease-out), box-shadow var(--em-dur-hover) ease, border-color var(--em-dur-hover) ease; }
@media (hover: hover) {
  .em-lift:hover { transform: translateY(-3px); box-shadow: var(--em-shadow-hover); }
}

/* Particule de confettis */
.em-burst {
  position: absolute; left: 50%; top: 42%;
  width: 8px; height: 8px; border-radius: 2px;
  pointer-events: none;
  animation: em-burst var(--em-dur-celebrate) var(--em-ease-out) forwards;
}

/* Apparition au défilement (progressive : sans support, l'élément est simplement visible) */
@supports (animation-timeline: view()) {
  .em-reveal {
    animation: em-rise-lg linear both;
    animation-timeline: view();
    animation-range: entry 0% entry 45%;
  }
}

/* Réduction des animations : neutralisation complète */
@media (prefers-reduced-motion: reduce) {
  *, *::before, *::after {
    animation-duration: 0.01ms !important;
    animation-iteration-count: 1 !important;
    transition-duration: 0.01ms !important;
    scroll-behavior: auto !important;
  }
  .em-burst { display: none; }
}
