/* Keyframes + entrance animations. Respects prefers-reduced-motion. */
@keyframes mh-pulse { 0%,100% { transform: scale(1); opacity: 1; } 50% { transform: scale(1.12); opacity: .75; } }
@keyframes mh-slide { 0% { transform: translateX(-120%); } 100% { transform: translateX(420%); } }
@keyframes mh-shimmer { 100% { transform: translateX(100%); } }
@keyframes mh-flash { 0%,100% { background: var(--mh-surface); } 50% { background: rgba(220,38,38,.10); } }
@keyframes mh-toast-in { from { opacity: 0; transform: translateX(30px); } to { opacity: 1; transform: none; } }
@keyframes mh-toast-bar { from { width: 100%; } to { width: 0; } }
@keyframes mh-ripple { to { transform: scale(4); opacity: 0; } }
@keyframes mh-shake { 0%,100% { transform: none; } 20%,60% { transform: translateX(-6px); } 40%,80% { transform: translateX(6px); } }
@keyframes mh-enter { from { opacity: 0; transform: translateY(14px); } to { opacity: 1; transform: none; } }
@keyframes mh-check-pop { 0% { transform: scale(0); } 70% { transform: scale(1.25); } 100% { transform: scale(1); } }

.mh-animate { opacity: 0; }
.mh-animate.mh-in { animation: mh-enter .45s ease forwards; }
.mh-shake { animation: mh-shake .4s ease; }
.mh-check-pop { display: inline-block; animation: mh-check-pop .4s ease; }

.modal.fade .modal-dialog { transform: scale(.92); transition: transform .22s ease; }
.modal.show .modal-dialog { transform: scale(1); }

@media (prefers-reduced-motion: reduce) {
  *, *::before, *::after { animation-duration: .01ms !important; transition-duration: .01ms !important; }
  .mh-animate { opacity: 1; }
}
