/* =====================================================================
   FL — Couche FX « premium » (isolée, additive, non-destructive).
   1) Reflet/spotlight qui suit le curseur DANS les cartes sombres.
   2) Halo d'ambiance qui suit le curseur sur toute la page.
   3) Constellation vivante (canvas) en fond, réactive à la souris.
   Décoratif uniquement (pointer-events:none) — zéro impact layout.
   Coupé si prefers-reduced-motion ; limité aux pointeurs fins (desktop).
   ===================================================================== */

/* ---- 1. Reflet au curseur dans les cartes ---- */
@media (hover:hover) and (pointer:fine){
  .fl-glare{ position:relative; }
  .fl-glare::after{
    content:""; position:absolute; inset:0; border-radius:inherit; pointer-events:none; z-index:0;
    background:radial-gradient(200px circle at var(--mx,50%) var(--my,50%),
              rgba(150,210,255,.10), transparent 46%);
    opacity:0; transition:opacity .4s ease;
  }
  .fl-glare:hover::after{ opacity:1; }
}

/* ---- 2. Halo d'ambiance (suit la souris) ---- */
.fl-halo{
  position:fixed; top:0; left:0; width:560px; height:560px; margin:-280px 0 0 -280px;
  z-index:-1; pointer-events:none; border-radius:50%; opacity:0;
  transition:opacity .8s ease; will-change:transform;
  background:radial-gradient(circle, rgba(124,92,255,.15), rgba(40,200,221,.06) 42%, transparent 64%);
}
.fl-halo.on{ opacity:1; }

/* ---- 3. Constellation (fond) ---- */
.fl-constel{
  position:fixed; inset:0; z-index:-1; pointer-events:none; opacity:.55;
}

/* ---- 4. Révélations au scroll (.reveal, activées seulement si JS + IO) ---- */
.fl-rvl .reveal{
  opacity:0; transform:translateY(26px); filter:blur(5px);
  transition:opacity .7s ease, transform .75s cubic-bezier(.2,.7,.2,1), filter .7s ease;
  will-change:opacity, transform;
}
.fl-rvl .reveal.in{ opacity:1; transform:none; filter:none; will-change:auto; }

@media (prefers-reduced-motion:reduce){
  .fl-glare::after{ display:none; }
  .fl-halo, .fl-constel{ display:none !important; }
  .fl-rvl .reveal{ opacity:1 !important; transform:none !important; filter:none !important; }
}
