/* ==========================================================================
   Brilha Dentes — Animações globais
   --------------------------------------------------------------------------
   Revelação ao rolar (controlada por js/core.js):
     data-reveal="up"      sobe e aparece (padrão; também data-reveal="")
     data-reveal="fade"    só aparece
     data-reveal="left"    vem da esquerda
     data-reveal="right"   vem da direita
     data-reveal="scale"   cresce de 96%
     data-reveal="clip"    é descoberto de baixo para cima
     data-reveal="draw"    as linhas ::before/::after crescem a partir do centro
                           (feito para o .ornament)
     data-reveal-stagger   no elemento pai: os filhos entram em sequência
     --reveal-delay        atraso extra opcional, por elemento

   Estados: sem classe → oculto · .is-visible → animando · .is-revealed →
   terminou (a transição de revelação sai e as do componente voltam a valer).
   Sem JS (sem .js no <html>) nada é escondido.
   ========================================================================== */

/* --- Estado oculto -------------------------------------------------------- */
.js [data-reveal]:not(.is-visible) {
  opacity: 0;
}
.js [data-reveal=""]:not(.is-visible),
.js [data-reveal="up"]:not(.is-visible) {
  transform: translate3d(0, var(--reveal-distance), 0);
}
.js [data-reveal="left"]:not(.is-visible) {
  transform: translate3d(calc(var(--reveal-distance) * -1), 0, 0);
}
.js [data-reveal="right"]:not(.is-visible) {
  transform: translate3d(var(--reveal-distance), 0, 0);
}
.js [data-reveal="scale"]:not(.is-visible) {
  transform: scale(0.96);
}
.js [data-reveal="clip"]:not(.is-visible) {
  clip-path: inset(0 0 100% 0 round var(--r-card));
}

/* --- Animando ------------------------------------------------------------- */
.js [data-reveal].is-visible:not(.is-revealed) {
  transition:
    opacity var(--dur-reveal) var(--ease-out),
    transform var(--dur-reveal) var(--ease-out),
    clip-path var(--dur-reveal) var(--ease-out);
  transition-delay: calc(
    var(--reveal-i, 0) * var(--stagger) + var(--reveal-delay, 0ms)
  );
}
.js [data-reveal="clip"].is-visible:not(.is-revealed) {
  clip-path: inset(0 0 0 0 round var(--r-card));
}

/* --- "draw": linhas do ornamento crescem a partir da marca ---------------- */
.js [data-reveal="draw"] {
  --dur-reveal: 1400ms;
}
.js [data-reveal="draw"]::before {
  transform-origin: right center;
}
.js [data-reveal="draw"]::after {
  transform-origin: left center;
}
.js [data-reveal="draw"]:not(.is-visible)::before,
.js [data-reveal="draw"]:not(.is-visible)::after {
  transform: scaleX(0);
}
.js [data-reveal="draw"].is-visible:not(.is-revealed)::before,
.js [data-reveal="draw"].is-visible:not(.is-revealed)::after {
  transition: transform var(--dur-reveal) var(--ease-out);
  transition-delay: calc(
    var(--reveal-i, 0) * var(--stagger) + var(--reveal-delay, 0ms)
  );
}

/* --- Keyframes compartilhados --------------------------------------------- */
@keyframes bd-fade-in {
  from {
    opacity: 0;
  }
}

@keyframes bd-rise-in {
  from {
    opacity: 0;
    transform: translate3d(0, 12px, 0);
  }
}

/* --- Movimento reduzido --------------------------------------------------
   base.css já zera durações; aqui garantimos que nada fique oculto.
   ------------------------------------------------------------------------ */
@media (prefers-reduced-motion: reduce) {
  .js [data-reveal]:not(.is-visible) {
    opacity: 1;
    transform: none;
    clip-path: none;
  }
  .js [data-reveal]:not(.is-visible)::before,
  .js [data-reveal]:not(.is-visible)::after {
    transform: none;
  }
}
