/* Glow escopado POR ELEMENTO — borda fina + brilho interno reagindo ao
   estado de uma execução (rodando/sucesso/erro).

   Antes esse efeito era um único "ambient glow" ao redor de TODA a página
   (.ambient-glow + classes glow-running/glow-success/glow-error no <body>,
   ver static/js/glow.js) - reagia a qualquer tarefa rodando no sistema,
   mesmo sem relação com o que a tela atual estava mostrando. Agora cada
   elemento marcado com data-glow="<comando>" (ver automacoes.html,
   components/_quick_actions.html) recebe seu PRÓPRIO glow, só quando AQUELE
   comando específico está rodando/concluiu/deu erro - ver window.glowEl em
   common.js e a lógica de disparo em static/js/glow.js (tarefas em
   background) e static/js/dados.js (export síncrono da tabela, sem
   relação nenhuma com o sistema de tarefas).

   Fica inteiro dentro de inset:0 (sem "vazar" pra fora do elemento, ao
   contrário do .ambient-glow original) - funciona mesmo em elementos com
   overflow:hidden (ex: .qa-row, .autom-row). Reaproveita as mesmas
   @keyframes glow-spin/glow-pulse/glow-vanish de base/animations.css. */

.glow-el {
  position: relative;
}

.glow-el::before,
.glow-el::after {
  content: "";
  position: absolute;
  inset: 0;
  pointer-events: none;
  border-radius: inherit;
  opacity: 0;
}

/* a linha nítida na borda do elemento */
.glow-el::before {
  padding: 2px;
  -webkit-mask:
    linear-gradient(#000 0 0) content-box,
    linear-gradient(#000 0 0);
  -webkit-mask-composite: xor;
          mask:
    linear-gradient(#000 0 0) content-box,
    linear-gradient(#000 0 0);
          mask-composite: exclude;
  z-index: 2;
}

/* o brilho em degradê, por dentro da borda (mesma cor, currentColor) */
.glow-el::after {
  z-index: 1;
  box-shadow: inset 0 0 22px currentColor;
}

/* variante "pra fora" (halo ao redor do elemento, em vez de brilho por
   dentro) - opt-in via window.glowEl.rodando/sucesso/erro(el, {fora:true}),
   usada hoje só no painel de Dados (.dados-panel), que tem espaço sobrando
   ao redor. Não é o padrão pra não vazar/cortar feio em elementos
   lado a lado ou com overflow:hidden (linha de automação, quick action -
   ver comentário no topo do arquivo). */
.glow-el--fora::after {
  box-shadow: 0 0 26px currentColor;
}

/* halo pra fora tira a linha nítida da borda (::before) - só o brilho
   difuso pra fora fica (pedido do usuário 2026-08-06: "ta a linha
   ainda"). Combinado com a classe de estado (--running/--success/--error)
   pra especificidade vencer as regras delas, que também mexem em ::before. */
.glow-el--fora.glow-el--running::before,
.glow-el--fora.glow-el--success::before,
.glow-el--fora.glow-el--error::before {
  opacity: 0;
}

/* ---- RUNNING: azul, loop contínuo enquanto durar ---- */
.glow-el--running::before {
  opacity: 1;
  background: conic-gradient(from var(--glow-angle, 0deg),
    var(--blue-500) 0deg,
    var(--blue-500) 200deg,
    var(--blue-300) 300deg,
    var(--blue-50) 340deg,
    var(--blue-500) 360deg);
  animation: glow-spin 3.2s linear infinite;
}
.glow-el--running::after {
  opacity: 1;
  color: var(--blue-500);
  animation: glow-pulse 2s ease-in-out infinite;
}

/* ---- SUCCESS: verde, acelera e some sozinho (ver window.glowEl.sucesso) ---- */
.glow-el--success::before {
  opacity: 1;
  background: conic-gradient(from var(--glow-angle, 0deg),
    var(--success) 0deg,
    var(--success) 200deg,
    #86EFAC 300deg,
    #ECFDF5 340deg,
    var(--success) 360deg);
  animation: glow-spin 1.1s linear infinite, glow-vanish 3s ease-out forwards;
}
.glow-el--success::after {
  opacity: 1;
  color: var(--success);
  animation: glow-pulse 1.3s ease-in-out infinite, glow-vanish 3s ease-out forwards;
}

/* ---- ERROR: vermelho, acelera e some sozinho (ver window.glowEl.erro) ---- */
.glow-el--error::before {
  opacity: 1;
  background: conic-gradient(from var(--glow-angle, 0deg),
    var(--danger) 0deg,
    var(--danger) 200deg,
    #FCA5AF 300deg,
    #FEF2F3 340deg,
    var(--danger) 360deg);
  animation: glow-spin 1.3s linear infinite, glow-vanish 3.6s ease-out forwards;
}
.glow-el--error::after {
  opacity: 1;
  color: var(--danger);
  animation: glow-pulse 1.4s ease-in-out infinite, glow-vanish 3.6s ease-out forwards;
}
