/* Lote L: adesão explícita. Não aplicar brilho/onda a elemento com pseudo próprio. */
.mov-entrada {
  animation: none;
}
.mov-entrada > :not(script) {
  animation: mov-entrada var(--xd-dur) var(--xd-ease) 130ms both;
}
.mov-entrada > :nth-child(1) { animation-delay: 0ms; }
.mov-entrada > :nth-child(2) { animation-delay: 26ms; }
.mov-entrada > :nth-child(3) { animation-delay: 52ms; }
.mov-entrada > :nth-child(4) { animation-delay: 78ms; }
.mov-entrada > :nth-child(5) { animation-delay: 104ms; }

.mov-brilho {
  position: relative;
  isolation: isolate;
}

.mov-brilho::after {
  content: "";
  position: absolute;
  inset: 0;
  border-radius: inherit;
  pointer-events: none;
  box-shadow: inset 0 0 0 1px var(--xd-blue-hi), 0 0 18px var(--xd-glow);
  opacity: 0;
  transition: opacity var(--xd-dur) var(--xd-ease);
}

.mov-brilho:hover:not(:disabled):not([aria-disabled="true"])::after,
.mov-brilho:focus-visible::after {
  opacity: 1;
}

.mov-pulso {
  animation: mov-pulso calc(var(--xd-dur-lenta) * 8) var(--xd-ease) infinite;
}

[data-onda] {
  position: relative;
  isolation: isolate;
  overflow: hidden;
}

.mov-onda {
  position: absolute;
  border-radius: var(--xd-radius-pill);
  pointer-events: none;
  background: var(--xd-blue-hi);
  opacity: 0.24;
  transform: translate(-50%, -50%) scale(0);
  /* Duração da onda no protótipo aprovado; não altera o tempo dos outros efeitos. */
  animation: mov-onda 540ms var(--xd-ease) forwards;
}

[data-movimento-pausado] .mov-pulso,
[data-movimento-pausado] .mov-entrada,
[data-movimento-pausado] .mov-entrada > :not(script) {
  animation-play-state: paused;
}

@keyframes mov-entrada {
  from { opacity: 0; transform: translateY(12px); }
  to { opacity: 1; transform: translateY(0); }
}

@keyframes mov-pulso {
  0% { opacity: 1; }
  50% { opacity: 0.4; }
  100% { opacity: 1; }
}

@keyframes mov-onda {
  to { transform: translate(-50%, -50%) scale(1); opacity: 0; }
}

@media (prefers-reduced-motion: reduce) {
  button:hover,
  a:hover { transform: none !important; }
  :active {
    /* Remover a transição não remove a escala do estado pressionado. */
    transform: none !important;
  }

  .mov-entrada,
  .mov-entrada > :not(script),
  .mov-pulso,
  .mov-onda {
    animation: none !important;
    transform: none !important;
  }

  .mov-brilho::after {
    transition: none !important;
  }

  .mov-onda {
    display: none;
  }
}
