/* =====================================================================
   COMPONENTE feedback (AVT Core): REGRA DE INTERFACE — nenhum botão "seco".
   Variáveis: --avt-fx-ripple (rgba(255,255,255,.35)) cor da onda | --avt-fx-press (.97) escala ao pressionar
   ===================================================================== */
.avt-fx{overflow:hidden;-webkit-tap-highlight-color:transparent}
.avt-fx:active:not(:disabled){transform:scale(var(--avt-fx-press,.97))}
.avt-fx{transition:transform .12s,box-shadow .2s,background-color .2s,color .2s,border-color .2s}

/* onda no ponto do clique */
.avt-ripple{position:absolute;border-radius:50%;background:var(--avt-fx-ripple,rgba(255,255,255,.35));transform:scale(0);animation:avt-ripple .6s ease-out forwards;pointer-events:none}
@keyframes avt-ripple{to{transform:scale(1);opacity:0}}

/* processando: texto some, spinner no centro, cursor de espera, sem novos cliques */
.is-pending{position:relative;pointer-events:none;cursor:progress;color:transparent!important;text-shadow:none!important}
.is-pending>*{opacity:0}
.is-pending::after{
  content:"";position:absolute;left:50%;top:50%;width:1.2em;height:1.2em;min-width:16px;min-height:16px;margin:calc(-.6em) 0 0 calc(-.6em);
  border:2.5px solid rgba(127,127,127,.35);border-top-color:var(--avt-fx-color,currentColor);border-radius:50%;
  animation:avt-fx-spin .7s linear infinite
}
@keyframes avt-fx-spin{to{transform:rotate(360deg)}}
input.is-pending[type=submit],input.is-pending[type=button]{background-image:none}

@media (prefers-reduced-motion:reduce){
  .avt-ripple{display:none}
  .is-pending::after{animation-duration:1.6s}
  .avt-fx:active:not(:disabled){transform:none}
}
