Precisão em movimento.

As ações frequentes respondem imediatamente. Entradas pontuais explicam a composição; modais e gavetas preservam a relação entre contexto e detalhe.

UsoTokenIntenção
Pressão--xq-motion-press100 ms para confirmar o acionamento.
Estados de controle--xq-motion-control160 ms para mudanças de cor e limite.
Dialog e toast--xq-motion-panel240 ms para orientar a entrada e a saída.
Entrada editorial--xq-revelar600 ms para estabelecer a composição do ensaio.
Sequência--xq-motion-stagger32 ms entre etapas.
Pulso da superfície--xq-motion-editorial400 ms em uma execução, sem repetição contínua.
Entrada e saída--xq-ease-outComeça responsivo, chega suave.
Janela gráfica--xq-ease-inoutContinuidade no recorte.
Gaveta--xq-ease-drawerO detalhe vem da borda da tela.

Revelar a entrada

Opacidade e deslocamento curto. Reservar para a primeira leitura de uma mensagem editorial.

Estratégia antes do post.

A atuação conecta planejamento, repertório e execução.

opacity + transform · ease-out

Abrir uma janela

O recorte revela a superfície da esquerda para a direita. O enquadramento participa da assinatura da marca.

Do conceito à publicação.

E de volta aos dados.

clip-path + opacity · ease-in-out

Organizar a sequência

Intervalos de 32 ms distinguem as etapas sem bloquear a leitura nem a interação.

PlanejarEstratégia
CriarConteúdo
AprenderDados

3 entradas · intervalo de 32 ms

Dar presença à superfície

Um pulso sutil confirma o encontro com a superfície. Ativo no hover apenas com ponteiro preciso; disponível por botão para toque e teclado.

Organização e processo.

O caminho para o sucesso.

opacity · 400 ms · sem loop

Repetição previsível.

Repetir deve funcionar no primeiro clique e nos seguintes. O reset neutraliza animações anteriores, confirma o estado inicial e retoma após dois quadros. Cada nova solicitação cancela os quadros pendentes da anterior.

alvo.classList.add('is-resetting');
alvo.classList.remove('is-visivel');
void alvo.offsetWidth;
requestAnimationFrame(() => {
  requestAnimationFrame(() => {
    alvo.classList.remove('is-resetting');
    alvo.classList.add('is-visivel');
  });
});
.is-resetting,
.is-resetting *,
.is-resetting::before,
.is-resetting::after,
.is-resetting *::before,
.is-resetting *::after,
.is-resetting::backdrop {
  transition: none !important;
  animation: none !important;
}

Cliques rápidos cancelam os frames pendentes. O alvo final permanece visível. Sem JavaScript, a mensagem nasce legível.

Respeitar o ambiente.

Movimento reduzido

Com prefers-reduced-motion: reduce, deslocamentos e recortes são removidos; os estados mudam imediatamente. O pulso gráfico deixa de acontecer.

Cores forçadas

Com forced-colors: active, foco e seleção continuam distinguíveis por contorno. O pulso decorativo é removido.

Teclado e toque

Os exemplos de movimento têm botão explícito. O conteúdo não depende de hover. Modais e gavetas preservam foco, Escape e retorno ao acionador.

<article id="entrada" class="xq-motion-entrada" data-xq-motion>…</article>
<button type="button" data-xq-repeat="entrada">Repetir entrada</button>