/* ── MvLoading ────────────────────────────────────────────────────────────
   O carregamento padrão do Portal (public/js/mv-components.js): toda espera de
   tela inteira — buscar, salvar, processar, importar, gerar PDF — usa este véu.
   Arquivo próprio, fora do dashboard.css, porque o login (layout.pug) também
   usa e não carrega o dashboard.css.

   Véu de espera para navegação que demora. A tela do diagnóstico leva de 1,5 s
   (em cache) a 10 s (42 lojas, cache frio) e até agora não dizia nada: o
   usuário clicava e a página ficava parada, sem sinal de que algo acontecia.

   Sem GIF de propósito — animação em CSS é nítida em qualquer tela, acompanha
   o tema e não custa download. */
.mv-loading {
  position: fixed; inset: 0; z-index: 9999;
  display: flex; align-items: center; justify-content: center;
  background: rgba(240, 244, 248, .72);
  backdrop-filter: blur(3px); -webkit-backdrop-filter: blur(3px);
  opacity: 0; pointer-events: none;
  transition: opacity .18s ease;
}
.mv-loading.visivel { opacity: 1; pointer-events: auto; }
[data-theme="dark"] .mv-loading { background: rgba(10, 21, 32, .76); }

.mv-loading-card {
  display: flex; flex-direction: column; align-items: center; gap: 14px;
  padding: 30px 38px;
  background: #fff; border: 1px solid #e2e8f0; border-radius: 16px;
  box-shadow: 0 10px 40px rgba(15, 30, 50, .13);
  transform: translateY(6px) scale(.98);
  transition: transform .22s cubic-bezier(.2, .8, .3, 1);
}
.mv-loading.visivel .mv-loading-card { transform: none; }
[data-theme="dark"] .mv-loading-card { background: #131f2e; border-color: #1e2f40; }

/* Os três chevrons do logo, acendendo em sequência: lê como avanço, e é a
   marca em movimento em vez de um spinner genérico. */
.mv-loading-chevrons { display: flex; gap: 3px; }
.mv-loading-chevrons span {
  width: 9px; height: 16px; display: block;
  background: #5EBC67;
  clip-path: polygon(0 0, 52% 50%, 0 100%, 46% 100%, 100% 50%, 46% 0);
  opacity: .22;
  animation: mv-chev 1.05s ease-in-out infinite;
}
.mv-loading-chevrons span:nth-child(2) { animation-delay: .14s; }
.mv-loading-chevrons span:nth-child(3) { animation-delay: .28s; }
@keyframes mv-chev {
  0%, 62%, 100% { opacity: .22; transform: translateX(0); }
  28%           { opacity: 1;   transform: translateX(2px); }
}

.mv-loading-texto {
  font-family: 'Hind Siliguri', Arial, sans-serif;
  font-size: 14px; font-weight: 600; color: #152232; text-align: center;
}
[data-theme="dark"] .mv-loading-texto { color: #f1f5f9; }
.mv-loading-sub {
  font-family: 'Hind Siliguri', Arial, sans-serif;
  font-size: 12px; color: #5b6b7d; text-align: center;
  min-height: 17px;   /* a troca de mensagem não empurra o card */
}
[data-theme="dark"] .mv-loading-sub { color: #94a3b8; }

/* Movimento reduzido: o aviso continua, a animação para. */
@media (prefers-reduced-motion: reduce) {
  .mv-loading, .mv-loading-card { transition: none; }
  .mv-loading-chevrons span { animation: mv-chev-parado 1.6s ease-in-out infinite; }
  @keyframes mv-chev-parado { 0%, 100% { opacity: .35; } 50% { opacity: .85; } }
}
