/* ==========================================================================
   Composants adaptés de React Bits (David Haz), MIT + Commons Clause.
   Notice : js/rb/LICENSE-react-bits.md. Chaque effet se désactive en retirant
   son attribut data-* dans index.html (ou son <script> en bas de page).
   ========================================================================== */

/* ---------- 1. Halftone Reveal : planche-contact tramée ---------- */
.rb-halftone { position: relative; z-index: 1; } /* au-dessus du grain papier : la trame fait déjà la matière */
.rb-halftone__canvas { position: absolute; inset: 0; width: 100%; height: 100%; display: block; pointer-events: none;
  opacity: 0; }
.rb-halftone__canvas { transition: opacity .45s cubic-bezier(.16,1,.3,1); }
/* ajout Monclar : la vraie photo au repos ; la trame verte n'apparaît qu'au survol ou au focus clavier */
.rb-halftone.is-live:hover .rb-halftone__canvas,
.rb-halftone.is-live:focus-within .rb-halftone__canvas { opacity: 1; }
@media (hover: none) { .rb-halftone__canvas { display: none; } }

/* ---------- 2. Variable Proximity : masthead du pied de page ---------- */
.rb-vp__w { display: inline-block; white-space: nowrap; }
.rb-vp__l, .rb-vp__s { display: inline-block; }
.rb-sr { position: absolute; width: 1px; height: 1px; padding: 0; margin: -1px; overflow: hidden; clip: rect(0, 0, 0, 0); white-space: nowrap; border: 0; }

/* ---------- 3. Topography : fond de la section contact ---------- */
.rb-topo { position: relative; isolation: isolate; }
.rb-topo__canvas { position: absolute; inset: 0; width: 100%; height: 100%; display: block; pointer-events: none; z-index: 0; }
.rb-topo > :not(.rb-topo__canvas) { position: relative; z-index: 1; }

/* ---------- 5. Noise : grain de papier fixe sur les sections crème ---------- */
.rb-noise-host { position: relative; }
.rb-noise { position: absolute; inset: 0; overflow: hidden; pointer-events: none; }
.rb-noise__grain { position: absolute; inset: 0; background-repeat: repeat; image-rendering: pixelated; }
