/* ==========================================================================
   v1.10 "Hero vivo" — rete di punti animata, titolo parola per parola,
   contatori e luce che segue il mouse sulle card. File separato: si toglie
   rimuovendo l'enqueue in functions.php.
   ========================================================================== */

/* Rete di punti: sopra le luci sfumate, sotto il contenuto */
#hero .lfy-net {
  position: absolute; inset: 0; width: 100%; height: 100%;
  pointer-events: none; z-index: 0;
  opacity: 0; transition: opacity 1.2s ease .2s;
}
#hero .lfy-net.on { opacity: 1; }

/* Titolo: ogni parola sale e si mette a fuoco */
.hero-title .lfy-w {
  display: inline-block;
  opacity: 0; transform: translateY(.45em); filter: blur(10px);
  animation: lfy-word .8s cubic-bezier(.2,.7,.2,1) forwards;
  animation-delay: calc(var(--i) * 75ms + 120ms);
}
.hero-title .lfy-w-em { animation-duration: 1s; }
.hero-title.lfy-done .lfy-w { animation: none; opacity: 1; transform: none; filter: none; }
@keyframes lfy-word { to { opacity: 1; transform: none; filter: blur(0); } }
/* il titolo non usa piu' la comparsa generica: ci pensano le parole */
.js-ready .hero-title.lfy-split { opacity: 1; transform: none; }

/* Numeri delle card: cifre a larghezza fissa mentre contano */
.hero-stat-num { font-variant-numeric: tabular-nums; }

/* Card: alone di luce che segue il mouse + bordo che si accende */
.hero-stat-card { position: relative; overflow: hidden; isolation: isolate; }
.hero-stat-card::before {
  content: ""; position: absolute; inset: 0; z-index: -1; pointer-events: none;
  background: radial-gradient(260px circle at var(--mx, 50%) var(--my, 50%), rgba(96,165,250,.22), transparent 60%);
  opacity: 0; transition: opacity .3s ease;
}
.hero-stat-card:hover::before { opacity: 1; }

@media (prefers-reduced-motion: reduce) {
  html:not(.lfy-motion) #hero .lfy-net { transition: none; }
  html:not(.lfy-motion) .hero-title .lfy-w { animation: none; opacity: 1; transform: none; filter: none; }
}
