/* ==========================================================================
   MBSoft · Animaciones
   Copiadas literalmente de la propuesta aprobada para no perder el ritmo
   original. Fuente única: si una animación se ajusta, se ajusta aquí.
   ========================================================================== */

@keyframes mb-float { 0% { transform: translate3d(0,0,0) scale(1); } 50% { transform: translate3d(0,-26px,0) scale(1.06); } 100% { transform: translate3d(0,0,0) scale(1); } }
@keyframes mb-pulse { 0%, 100% { opacity: .35; } 50% { opacity: .9; } }
@keyframes mb-wave { 0%, 100% { transform: scaleY(.35); } 50% { transform: scaleY(1); } }
@keyframes mb-marquee { from { transform: translateX(0); } to { transform: translateX(-50%); } }
@keyframes mb-grow { 0% { transform: scaleY(.14); } 55% { transform: scaleY(1); } 100% { transform: scaleY(.82); } }
@keyframes mb-draw { from { stroke-dashoffset: 620; } to { stroke-dashoffset: 0; } }
@keyframes mb-drift { 0% { transform: translate3d(0,0,0); } 50% { transform: translate3d(0,-14px,0); } 100% { transform: translate3d(0,0,0); } }
@keyframes mb-sweep { 0% { transform: translateX(-120%); } 100% { transform: translateX(320%); } }
@keyframes mb-blink { 0%, 60% { opacity: 1; } 80%, 100% { opacity: .25; } }
@keyframes mb-dot { 0% { transform: scale(.6); opacity: .3; } 50% { transform: scale(1); opacity: 1; } 100% { transform: scale(.6); opacity: .3; } }
