/* ==========================================================================
   MOTION — animações de entrada (reveal) e keyframes compartilhados

   Como usar o reveal no HTML:
     data-rv="up | fade | clip | scale"   tipo de entrada
     style="--i:2"                        atraso em passos de 80ms (efeito cascata)
   O JS (js/modules/reveal.js) adiciona .is-in quando o elemento entra na tela.

   O estado inicial oculto só existe com JS ativo (.js no <html>).
   Sem JS, ou se o script falhar, todo o conteúdo é renderizado normalmente.
   ========================================================================== */
[data-rv]{--d:calc(var(--i,0) * 80ms)}
.js [data-rv="up"]{opacity:0;transform:translate3d(0,20px,0);transition:opacity var(--t-reveal) var(--e-out) var(--d),transform var(--t-reveal) var(--e-out) var(--d)}
.js [data-rv="fade"]{opacity:0;transition:opacity 860ms var(--e-soft) var(--d)}
.js [data-rv="clip"]{opacity:0;clip-path:inset(0 0 108% 0);transform:translate3d(0,9px,0);transition:opacity 540ms var(--e-out) var(--d),clip-path 860ms var(--e-out) var(--d),transform 860ms var(--e-out) var(--d)}
.js [data-rv="scale"]{opacity:0;transform:scale(.978) translate3d(0,12px,0);transition:opacity var(--t-reveal) var(--e-out) var(--d),transform 860ms var(--e-out) var(--d)}
.is-in[data-rv]{opacity:1;transform:none;clip-path:none}

/* keyframes usados por mais de uma seção */
@keyframes draw{to{stroke-dashoffset:0}}                 /* desenha traçados SVG (usa --l) */
@keyframes dIn{to{opacity:1;transform:none}}              /* entrada genérica: menu, canais, KPIs */
@keyframes pvIn{to{opacity:1;transform:none}}             /* entrada de painel/tabela/confirmação */

/* acessibilidade: usuário pediu menos movimento */
@media (prefers-reduced-motion:reduce){
  *,*::before,*::after{animation-duration:.01ms!important;animation-iteration-count:1!important;transition-duration:.01ms!important}
  [data-rv]{opacity:1!important;transform:none!important;clip-path:none!important}
}
