/* Densité du verre sans flou d'arrière-plan (catalogue, bulles du chat,
   messages) — une seule valeur à régler. Avant la passe fluidité : .46 avec
   backdrop-filter. */
:root{--verre-alpha:.72}

/* Couches de verre posées par fluidite.js (chat + catalogue). Tout ce qui
   bouge ici bouge en transform ou en opacity — jamais background-position,
   box-shadow ni filter animés. */
.vx,.vh,.vb{position:absolute;inset:0;border-radius:inherit;pointer-events:none}
.vx,.vb{overflow:hidden;mix-blend-mode:screen}
.vh{opacity:0;transition:opacity .35s}
.vx::before,.vb::before{content:"";position:absolute;top:0;bottom:0;left:0;width:260%}
/* balayage de brillance : trait clair qui traverse de gauche à droite
   (équivalent exact de background-position 130 % → -30 % sur 260 %) */
.vb::before{opacity:0;background:linear-gradient(105deg,transparent 40%,rgba(255,236,200,.42) 50%,transparent 60%);transform:translateX(-80%)}
@keyframes vxBalayage{0%{opacity:1;transform:translateX(-80%)}100%{opacity:1;transform:translateX(18.46%)}}
@keyframes vxBalayageFondu{0%{opacity:1;transform:translateX(-80%)}100%{opacity:0;transform:translateX(18.46%)}}

/* Boucles d'ambiance en pause : défilement, clic (+300 ms), onglet caché,
   ou élément sorti de l'écran. Les entrées (une seule fois) ne sont jamais
   mises en pause : seules les boucles infinies sont visées. */
.ambiance-pause .vx::before,.hors-champ>.vx::before,
.ambiance-pause .grille,.grille.hors-champ,
.ambiance-pause .scene-marbre,.ambiance-pause .scene-marbre::after,
.ambiance-pause .reference-clean-plate,
.ambiance-pause .ci-pulse,.ci-pulse.hors-champ,.ambiance-pause .ci-pulse>.vh,.ci-pulse.hors-champ>.vh{animation-play-state:paused!important}

@media (prefers-reduced-motion:reduce){.vx::before,.vb::before{animation:none!important}}
