Motion

Sistema de animaciones y transiciones. Sutiles, funcionales, nunca decorativas.

Principios de motion

Funcional

Toda animación comunica un cambio de estado o guía la atención del usuario.

Sutil

Duraciones cortas (150-300ms). Si el usuario nota la animación, es demasiado larga.

Consistente

Mismas curvas y duraciones para acciones similares en toda la app.

Respetuosa

Respetar prefers-reduced-motion. Desactivar animaciones si el usuario lo pide.

Escala de duración

NombreDuraciónUso
instant100msHover de colores, opacity
fast150msTooltips, micro-interacciones
normal200msModals, toasts, accordions
slow300msPage transitions, complex layouts
slower500msStaggered animations, hero sections

Curvas de easing

/* Estándar — la mayoría de transiciones */
transition-timing-function: cubic-bezier(0.4, 0, 0.2, 1);

/* Entrada — elementos que aparecen */
transition-timing-function: cubic-bezier(0, 0, 0.2, 1);

/* Salida — elementos que desaparecen */
transition-timing-function: cubic-bezier(0.4, 0, 1, 1);

/* En Tailwind: */
.transition-all    /* → usa ease por defecto */
.ease-in           /* → entrada */
.ease-out          /* → salida */
.ease-in-out       /* → estándar */

Catálogo de animaciones

Fade In

Aparición de elementos: modals, toasts, dropdowns

200ms

Scale Up

Hover en botones, cards interactivas

200ms

Slide Down

Menús desplegables, accordions

200ms

Pulse

Indicadores de estado activo (badge dot)

2000ms

Spin

Loading spinners

1000ms

Reduced motion

/* CSS — deshabilitar animaciones */
@media (prefers-reduced-motion: reduce) {
  *, *::before, *::after {
    animation-duration: 0.01ms !important;
    animation-iteration-count: 1 !important;
    transition-duration: 0.01ms !important;
  }
}

/* Tailwind */
<div className="motion-safe:animate-pulse motion-reduce:animate-none">

/* iOS — UIAccessibility.isReduceMotionEnabled */
/* Android — Settings.Global.ANIMATOR_DURATION_SCALE */

Ejemplos en vivo

Hover: scale + shadow (botones, cards)

Card hover

Scale 1.02 + border

Pulse: indicadores de estado activo

Online
Nuevo
Disponible

Spin: loading states

Cargando...

Color transitions: links y nav items