/* Transição entre páginas do sistema.
   Só opacidade no body: transform aqui criaria bloco de contenção e os
   elementos position:fixed (modais, toast) passariam a se posicionar pelo
   body em vez da janela. O movimento vertical fica no conteúdo. */
@keyframes ym-entra-corpo { from { opacity: 0 } to { opacity: 1 } }
@keyframes ym-entra-conteudo {
  from { opacity: 0; transform: translateY(12px) }
  to   { opacity: 1; transform: none }
}

body { animation: ym-entra-corpo .26s ease-out both }

body > .wrap,
body > main,
body > header.ym-header {
  animation: ym-entra-conteudo .34s cubic-bezier(.22, .61, .36, 1) both;
}
body > header.ym-header { animation-duration: .28s }
body > .wrap, body > main { animation-delay: .05s }

/* saída: some antes de trocar de página, para não piscar branco */
body.ym-saindo {
  opacity: 0;
  transition: opacity .16s ease-in;
}

/* quem pediu menos animação no sistema operacional não recebe nenhuma */
@media (prefers-reduced-motion: reduce) {
  body, body > .wrap, body > main, body > header.ym-header {
    animation: none !important;
  }
  body.ym-saindo { transition: none !important; opacity: 1 !important }
}

/* impressão de recibo e comprovante não pode sair meio transparente */
@media print {
  body, body > .wrap, body > main, body > header.ym-header {
    animation: none !important; opacity: 1 !important; transform: none !important;
  }
  body.ym-saindo { opacity: 1 !important }
}
