/* ==========================================================================
   MOVIMENTO — véu de entrada, reveal, split-text, magnetismo, respiração
   Princípios: nada bloqueia o scroll; tudo degrada para conteúdo visível.
   ========================================================================== */
.veil { position: absolute; inset: 0; z-index: var(--z-veil); pointer-events: none;
  background: radial-gradient(90% 70% at 30% 40%, rgba(var(--rgb-ivory), .62), rgba(var(--rgb-ivory), .97));
  animation: veilOut 3.4s var(--ease-inout) .15s both; will-change: opacity; }
@keyframes veilOut { from { opacity: 1; } to { opacity: 0; } }

.js .reveal { opacity: 0; transform: translate3d(0, 26px, 0); transition: opacity 1.3s var(--ease-out), transform 1.3s var(--ease-out); transition-delay: var(--d, 0s); }
.js .reveal.in { opacity: 1; transform: none; }

.nav a, .logo, .btn, .burger, .link { translate: var(--tx, 0px) var(--ty, 0px); will-change: translate; }

/* split-text: letras/palavras emergem da névoa (desfoque → foco + subida fluida) */
.js [data-split]:not(.split) { opacity: 0; }
.split .w { display: inline-block; white-space: nowrap; }
.split .ch { display: inline-block; opacity: 0; transform: translate3d(0, .6em, 0) scale(1.04); filter: blur(16px);
  transition: opacity 1.5s var(--ease-out), transform 1.8s var(--ease-out), filter 1.6s var(--ease-out);
  transition-delay: calc(var(--i) * 34ms + var(--base, 0s)); will-change: transform, filter, opacity; }
.split[data-split="words"] .ch { transition-delay: calc(var(--i) * 110ms + var(--base, 0s)); }
.split.in .ch { opacity: 1; transform: none; filter: blur(0); }
.split.done .ch { transition: none; filter: none; will-change: auto; }

/* respiração guiada (4 s inspira · 6 s expira) — decorativa, aria-hidden */
.imm-breath .b-in  { animation: bIn 10s var(--ease-inout) infinite; }
.imm-breath .b-out { animation: bOut 10s var(--ease-inout) infinite; }
@keyframes bIn  { 0%, 36% { opacity: 1; } 42%, 94% { opacity: 0; } 100% { opacity: 1; } }
@keyframes bOut { 0%, 36% { opacity: 0; } 42%, 94% { opacity: 1; } 100% { opacity: 0; } }

/* rede de segurança (JS falhou a meio) */
.failsafe .reveal, .failsafe [data-split] { opacity: 1 !important; transform: none !important; }
.failsafe .split .ch { opacity: 1; transform: none; filter: none; }
.failsafe .veil { display: none; }

@media (prefers-reduced-motion: reduce) {
  .veil { display: none; }
  .js .reveal { transition: none; opacity: 1; transform: none; }
  .split .ch { opacity: 1; transform: none; filter: none; transition: none; }
  .rays, .wave, .cue-line::after, .imm-breath .b-in, .imm-breath .b-out { animation: none; }
  .imm-breath .b-in { opacity: 1; } .imm-breath .b-out { display: none; }
  .imm-word, .imm-end { filter: none; translate: none; opacity: 1; }
  .imersao { height: auto; } .imm-stick { position: static; height: auto; padding-block: var(--sec-y); gap: var(--sp-7); }
  .imm-end { position: static; text-align: left; max-width: 22ch; }
  .imm-foot { display: none; }
  .card-media .inner, .pratica:hover .card-media .inner { transition: none; scale: 1.04; }
}
