/* Gestx 17.117 — Etapa 06. Uma animação por botão, sem mudar os processos.
 * Esta camada vem após o CSS de cada módulo e não atinge progresso em modais. */

/* Estado definido por uma única observação incremental do DOM. */
body :is(button, a, [role="button"]).gestx-indicador-padrao.gestx-indicador-padrao.gestx-indicador-padrao {
  position: relative; cursor: progress;
}
/* O pseudoelemento ::before será o ÚNICO indicador em controles comuns.
 * Usa currentColor para preservar as cores dos botões de cada módulo. */
body :is(button, a, [role="button"]).gestx-indicador-padrao.gestx-indicador-padrao.gestx-indicador-padrao::before {
  content: "" !important;
  display: inline-block !important;
  flex: 0 0 15px !important;
  width: 15px !important; height: 15px !important;
  box-sizing: border-box !important;
  margin: 0 8px 0 0 !important;
  vertical-align: -3px !important;
  position: static !important; inset: auto !important;
  order: -1 !important;
  border: 2px solid currentColor !important;
  border-right-color: transparent !important;
  border-radius: 50% !important;
  background: transparent !important;
  opacity: 1 !important; visibility: visible !important;
  animation: gestx-giro-unico-06 .8s linear infinite !important;
}
@keyframes gestx-giro-unico-06 { to { transform: rotate(360deg); } }
/* Botões de apenas ícone: centralizar sem deslocar a geometria. */
body :is(button, a, [role="button"]).gestx-indicador-padrao.gestx-indicador-padrao.gestx-indicador-padrao:is(.botao-icone,.gestx-carregamento-icone)::before {
  position: absolute !important; top: 50% !important; left: 50% !important;
  width: 15px !important; height: 15px !important; margin: -7.5px 0 0 -7.5px !important;
}
/* Elementos inseridos pelos módulos ficam ocultos SÓ enquanto o controle
 * já possui o spinner compartilhado. Não altera modais nem avisos externos. */
body :is(button,a,[role="button"]).gestx-indicador-padrao.gestx-indicador-padrao.gestx-indicador-padrao :is(
  .spinner-operacional,.spinner-consulta-nfe-shopee,.spinner-importacao-planilha,
  .spinner-border,.spinner-grow,.carrinho-publico-spinner,
  .gestx-spinner-fiscal,.gestx-spinner-reconsulta,.carregador-circular,
  .carregador-orbita,.carregador-pontos,.carregador-barras,
  .icone-girando,.spinner-loading,.loading-spinner,.btn-spinner
) { display: none !important; animation: none !important; }
/* Icones com giro nativo nao podem girar junto do ::before compartilhado.
 * Mantemos o espaco do icone para nao deslocar os textos. */
body :is(button,a,[role="button"]).gestx-indicador-padrao :is(
  i.bi-arrow-repeat, i.bi-arrow-clockwise, i.bi-arrow-counterclockwise,
  i.bi-arrow-left-right, i.icone-girando
) { visibility: hidden !important; animation: none !important; }
/* Outros módulos desenham um segundo pseudo-elemento ::after. */
body :is(button,a,[role="button"]).gestx-indicador-padrao.gestx-indicador-padrao.gestx-indicador-padrao::after {
  content: none !important; display: none !important;
}
/* Nenhum spinner inativo em botoes desabilitados somente por validacao. */
body :is(button,a,[role="button"]):not(.gestx-indicador-proprio):not(.gestx-indicador-padrao) > :is(.gestx-spinner-reconsulta,.gestx-spinner-fiscal,.spinner-operacional,.spinner-consulta-nfe-shopee,.spinner-abrindo-modal):not([data-gestx-spinner-estatico]) { display:none !important; animation:none !important; }
/* Componente único: nenhum transform fixo deve sobrescrever o quadro de animação. */
body :is(button,a,[role="button"]).gestx-indicador-padrao.gestx-indicador-padrao.gestx-indicador-padrao::before {
  transform-origin: 50% 50% !important;
  will-change: transform;
  animation-name: gestx-giro-unico-06 !important;
  animation-duration: .8s !important;
  animation-timing-function: linear !important;
  animation-iteration-count: infinite !important;
}
/* Consultas fiscais usam o indicador próprio que já existia. A classe de
 * prioridade garante que nenhum ::before global seja desenhado por cima. */
body :is(button,a,[role="button"]).gestx-indicador-proprio.gestx-indicador-proprio.gestx-indicador-proprio::before,
body :is(button,a,[role="button"]).gestx-indicador-icone.gestx-indicador-icone.gestx-indicador-icone::before {
  content: none !important; display: none !important; animation: none !important;
}
/* Com indicador nativo, preservar sempre só um elemento visível. */
body :is(button,a,[role="button"]).gestx-indicador-proprio :is(
  .gestx-spinner-reconsulta,.gestx-spinner-fiscal,.spinner-operacional,
  .spinner-consulta-nfe-shopee,.spinner-importacao-planilha,
  .carrinho-publico-spinner,.carregador-circular,.carregador-orbita
):not([hidden]):not([data-gestx-spinner-auxiliar="1"]) { display: inline-block !important; }
/* Elementos marcados como auxiliares pelo coordenador não desaparecem do DOM. */
body :is(button,a,[role="button"]).gestx-indicador-proprio [data-gestx-spinner-auxiliar="1"],
body :is(button,a,[role="button"]) [data-gestx-spinner-auxiliar="1"] {
  display: none !important; animation: none !important;
}
/* Foco não é retirado por causa do carregamento. */
body :is(button,a,[role="button"]).gestx-indicador-padrao.gestx-indicador-padrao.gestx-indicador-padrao:focus-visible { outline-offset: 3px; }
/* Etapa 06 R3 — indicadores funcionais não podem parecer travados.
 * O modo de movimento reduzido preserva uma rotação mais suave APENAS em
 * carregamentos ativos. Animações ornamentais continuam desativadas. */
@media (prefers-reduced-motion: reduce) {
  body :is(button, a, [role="button"]).gestx-indicador-padrao.gestx-indicador-padrao.gestx-indicador-padrao::before {
    animation: gestx-giro-unico-06 1.6s linear infinite !important;
  }
  .aba-sistema.aba-sistema-carregando .carregador-aba-sistema {
    animation: giro-aba-sistema 1.6s linear infinite !important;
  }
  body :is(button,a,[role="button"]).gestx-indicador-proprio :is(
    .gestx-spinner-reconsulta,.gestx-spinner-fiscal,.spinner-operacional,
    .spinner-consulta-nfe-shopee,.spinner-importacao-planilha,
    .carrinho-publico-spinner,.spinner-border,.spinner-grow,
    .carregador-circular,.carregador-orbita
  ):not([hidden]):not([data-gestx-spinner-auxiliar="1"]) {
    animation-duration: 1.6s !important;
    animation-iteration-count: infinite !important;
  }
}
