/impeccable animate
Animate
Movimento finalizzato che comunica stato, non decorazione.
Quando usarlo
/impeccable animate è per interfacce che sembrano prive di vita, dove i cambi di stato sono istantanei e bruschi, dove il caricamento appare di colpo, dove l’utente non si fida mai del tutto che il suo clic sia stato registrato. Usalo per aggiungere i piccoli movimenti che comunicano cosa sta succedendo: entrate, uscite, feedback, transizioni tra stati.
Non usarlo per aggiungere rimbalzi o molle elastiche per amore di energia. Quello è decorazione, e questa skill non te lo darà.
Come funziona
La skill identifica i momenti statici che trarrebbero beneficio dal movimento, poi li applica con disciplina rigorosa:
- Entrate e uscite: gli elementi appaiono e scompaiono con fade da 200 a 300ms più sottile Y o scala, mai proprietà di layout.
- Feedback di stato: hover, active, focus, loading, success comunicano tutti tramite movimento invece di scambi improvvisi.
- Transizioni tra viste: transizioni shared-element dove ha senso, fade-through altrimenti.
- Progresso e caricamento: scheletri, barre determinate, movimento che dice “sto ancora lavorando”.
- Movimento ridotto: ogni animazione ha un fallback
prefers-reduced-motion.
L’easing è sempre esponenziale (ease-out-quart, quint o expo) perché gli oggetti reali decelerano in modo fluido. Nessun rimbalzo, nessuna elasticità, nessun lineare per nulla tranne gli indicatori di progresso.
La skill anima solo transform e opacity. Se ti trovi ad animare width, height, top o left, sta facendo la cosa sbagliata. Usa grid-template-rows per le transizioni di altezza.
Provalo
/impeccable animate the sign-up flow
Aggiunte tipiche:
- L’input email ottiene un glow di focus su focus-visible (opacità + ombra, 180ms)
- Il pulsante di invio mostra uno spinner al suo interno nello stato di caricamento, non uno spinner separato accanto
- La schermata di successo entra con opacità + translateY(8px), 260ms, ease-out-quart
- Il messaggio di errore scende con grid-template-rows (non height), 220ms
@media (prefers-reduced-motion: reduce)fallback per ogni transizione
Insidie
- Chiedere “più animazione”. Animate non è una manopola. Aggiunge dove il movimento comunica, non ovunque.
- Rimuovere i fallback per movimento ridotto. La skill li aggiunge automaticamente. Non negoziabile per l’accessibilità.