/* Griffin Montagens — Motion: Serviços (#servicos)
   Apenas hover (CSS). Entrada/scroll fica no JS (modules/services.js).
   A barra vermelha ::before do card já existe no style.css — não é tocada.
   Failsafe: nada aqui esconde conteúdo. */

/* Elevação do card no hover — transition original do style.css
   (box-shadow/border-color) é mantida e ganha transform. */
.service {
  transition:
    box-shadow var(--dur) var(--ease-out),
    border-color var(--dur) ease,
    transform 250ms var(--ease-out);
}
.service:hover {
  transform: translateY(-4px);
}

/* Fallback sem GSAP (html sem .gsap-on): os cards mantêm .reveal e o
   style.css aplica `.js .reveal.is-visible { transform: none }` (0,3,0)
   e `.js .reveal { transition: opacity/transform 700ms }` (0,2,0), que
   venceriam o hover acima. As regras abaixo sobem a especificidade pra
   devolver o lift e a transition composta também no modo estático.
   Trade-off documentado: o slide de entrada do fallback roda em 250ms
   (em vez de 700ms) pra manter o hover responsivo; o fade segue em 700ms.
   No modo GSAP o JS remove .reveal dos cards — estas regras não pegam. */
.js .service.reveal.is-visible,
.js.reveal-failsafe .service.reveal {
  transition:
    opacity 700ms var(--ease-out),
    box-shadow var(--dur) var(--ease-out),
    border-color var(--dur) ease,
    transform 250ms var(--ease-out);
}
.js .service.reveal.is-visible:hover,
.js.reveal-failsafe .service.reveal:hover {
  transform: translateY(-4px);
}

/* Ícone: inverte pra vermelho sólido + leve scale no hover do card. */
.service-icon {
  transition: background-color 250ms ease, color 250ms ease, transform 250ms ease;
}
.service:hover .service-icon {
  background: var(--red);
  color: #fff;
  transform: scale(1.06);
}

/* Fallback sem GSAP: .js .reveal.is-visible (style.css) tem especificidade
   maior que .service:hover e mataria o lift — regra abaixo devolve o hover. */
.js .service.reveal.is-visible:hover {
  transform: translateY(-4px);
}
