/* ============================================================
   FX · brilho que segue o cursor (spotlight) + borda viva
   Sóbrio de propósito: verde da marca, opacidade baixa, sem neon.
   O JS só escreve --mx / --my. Todo o resto é declarativo aqui.
   ============================================================ */

.fx-glow{position:relative;isolation:isolate}

/* O conteúdo SEMPRE acima do halo.
   Sem isto, num card cujos filhos são estáticos, o pseudo pintado depois cobre o texto. */
.fx-glow > *{position:relative;z-index:2}

/* halo interno que segue o mouse (atrás do conteúdo) */
.fx-glow::after{
  content:"";position:absolute;inset:0;border-radius:inherit;pointer-events:none;z-index:0;
  opacity:0;transition:opacity .3s var(--ease);
  background:radial-gradient(200px circle at var(--mx,50%) var(--my,50%),
    rgba(114,159,40,.14), rgba(114,159,40,.05) 40%, transparent 65%);
}
.fx-glow:hover::after,.fx-glow:focus-visible::after{opacity:1}

/* borda que acende no ponto mais próximo do cursor (acima do conteúdo, mas é só 1px de contorno) */
.fx-glow::before{
  content:"";position:absolute;inset:0;border-radius:inherit;pointer-events:none;z-index:3;
  padding:1px;opacity:0;transition:opacity .3s var(--ease);
  background:radial-gradient(220px circle at var(--mx,50%) var(--my,50%),
    rgba(169,207,91,.9), rgba(114,159,40,.25) 45%, transparent 70%);
  -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;
}
.fx-glow:hover::before,.fx-glow:focus-visible::before{opacity:1}

/* card do blog: a imagem da capa é filha direta e não pode subir junto do texto */
.post.fx-glow .cover{z-index:1}

/* ---------- botões ---------- */
/* .b1 (sólido) ganha um lustro claro; .b2 (outline) ganha preenchimento suave */
.fx-btn{position:relative;overflow:hidden;isolation:isolate}
.fx-btn::after{
  content:"";position:absolute;inset:0;border-radius:inherit;pointer-events:none;z-index:0;
  opacity:0;transition:opacity .3s var(--ease);
  background:radial-gradient(140px circle at var(--mx,50%) var(--my,50%),
    rgba(255,255,255,.28), transparent 60%);
}
.fx-btn:hover::after,.fx-btn:focus-visible::after{opacity:1}
.fx-btn > *{position:relative;z-index:1}

/* botão claro sobre fundo claro: o lustro branco sumiria → usa lima */
.fx-btn.b2::after,.fx-btn.bf-chip::after{
  background:radial-gradient(140px circle at var(--mx,50%) var(--my,50%),
    rgba(114,159,40,.20), transparent 60%);
}

/* ---------- acessibilidade / performance ---------- */
@media (prefers-reduced-motion:reduce){
  .fx-glow::before,.fx-glow::after,.fx-btn::after{display:none}
}
/* touch: sem cursor, sem spotlight (evita o halo "grudar" onde o dedo tocou) */
@media (hover:none){
  .fx-glow::before,.fx-glow::after,.fx-btn::after{display:none}
}
