/**
 * QMF Motion bridge — maps legacy motion utilities onto current @qmf/tokens.
 * Uses only --qmf-transition-* / token aliases (no hardcoded durations).
 */
:root {
  --qmf-duration-fast: 150ms;
  --qmf-duration-normal: 200ms;
  --qmf-duration-slow: 300ms;
  --qmf-easing-default: cubic-bezier(0.4, 0, 0.2, 1);
  --qmf-easing-in: cubic-bezier(0.4, 0, 1, 1);
  --qmf-easing-out: cubic-bezier(0, 0, 0.2, 1);
  --qmf-easing-in-out: cubic-bezier(0.4, 0, 0.2, 1);
  --qmf-easing-spring: cubic-bezier(0.34, 1.56, 0.64, 1);
}

@keyframes qmf-fade-in {
  from { opacity: 0; }
  to { opacity: 1; }
}
@keyframes qmf-fade-out {
  from { opacity: 1; }
  to { opacity: 0; }
}
@keyframes qmf-fade-in-up {
  from { opacity: 0; transform: translateY(var(--qmf-space-3)); }
  to { opacity: 1; transform: none; }
}
@keyframes qmf-fade-in-right {
  from { opacity: 0; transform: translateX(var(--qmf-space-4)); }
  to { opacity: 1; transform: none; }
}
@keyframes qmf-scale-in {
  from { opacity: 0; transform: scale(0.96); }
  to { opacity: 1; transform: none; }
}
@keyframes qmf-bounce-in {
  0% { opacity: 0; transform: scale(0.85); }
  60% { transform: scale(1.04); }
  100% { opacity: 1; transform: none; }
}
@keyframes qmf-spin {
  to { transform: rotate(360deg); }
}
@keyframes qmf-pulse {
  0%, 100% { opacity: 1; }
  50% { opacity: 0.45; }
}
@keyframes qmf-shake {
  0%, 100% { transform: translateX(0); }
  20% { transform: translateX(calc(var(--qmf-space-1) * -1)); }
  40% { transform: translateX(var(--qmf-space-1)); }
  60% { transform: translateX(calc(var(--qmf-space-1) * -1)); }
  80% { transform: translateX(var(--qmf-space-1)); }
}
@keyframes qmf-cell-pop {
  0% { transform: scale(0.92); }
  60% { transform: scale(1.06); }
  100% { transform: none; }
}
@keyframes qmf-mesh-drift {
  0% { transform: translate3d(0, 0, 0) scale(1); }
  50% { transform: translate3d(2%, -1.5%, 0) scale(1.04); }
  100% { transform: translate3d(0, 0, 0) scale(1); }
}
@keyframes qmf-particle-drift {
  0% { transform: translate3d(0, 0, 0); opacity: 0.15; }
  50% { transform: translate3d(var(--qmf-space-4), calc(var(--qmf-space-6) * -1), 0); opacity: 0.55; }
  100% { transform: translate3d(calc(var(--qmf-space-2) * -1), var(--qmf-space-3), 0); opacity: 0.2; }
}
@keyframes qmf-node-pulse {
  0%, 100% { opacity: 0.35; transform: scale(1); }
  50% { opacity: 0.85; transform: scale(1.15); }
}

.qmf-animate-fade-in { animation: qmf-fade-in var(--qmf-duration-normal) var(--qmf-easing-out) both; }
.qmf-animate-fade-in-up { animation: qmf-fade-in-up var(--qmf-duration-slow) var(--qmf-easing-out) both; }
.qmf-animate-fade-in-right { animation: qmf-fade-in-right var(--qmf-duration-slow) var(--qmf-easing-out) both; }
.qmf-animate-scale-in { animation: qmf-scale-in var(--qmf-duration-slow) var(--qmf-easing-out) both; }
.qmf-animate-bounce-in { animation: qmf-bounce-in var(--qmf-transition-spring) both; }
.qmf-animate-spin { animation: qmf-spin 0.7s linear infinite; }
.qmf-animate-pulse { animation: qmf-pulse 2s var(--qmf-easing-in-out) infinite; }
.qmf-animate-shake { animation: qmf-shake var(--qmf-duration-slow) var(--qmf-easing-in-out); }

.qmf-delay-100 { animation-delay: 100ms; }
.qmf-delay-200 { animation-delay: 200ms; }
.qmf-delay-300 { animation-delay: 300ms; }
.qmf-delay-500 { animation-delay: 500ms; }

@media (prefers-reduced-motion: reduce) {
  .qmf-animate-fade-in,
  .qmf-animate-fade-in-up,
  .qmf-animate-fade-in-right,
  .qmf-animate-scale-in,
  .qmf-animate-bounce-in,
  .qmf-animate-pulse,
  .qmf-animate-shake {
    animation: none !important;
  }
}
