/* ============================================================
   SAMEY — galerie.css : la planche contact.
   Chaque photo garde son format, jamais coupée. galerie.js pose la hauteur de chaque
   tuile sur une grille de 8 px (maçonnerie), révèle chaque tuile à son entrée dans
   l'écran et ouvre la visionneuse. Aucun effet au survol (décision du 31/08).
   Seules transform, opacity et clip-path bougent. 31/08/2026.
   ============================================================ */

/* ---- 1. La grille : 3 colonnes pour les mosaïques, 4 pour la Galerie ---- */
.elementor .e-con.d-mosaic.d-mosaic,[data-gal-grid]{display:grid!important;grid-template-columns:repeat(3,minmax(0,1fr))!important;grid-auto-rows:8px!important;grid-auto-flow:row!important;column-gap:20px!important;row-gap:0!important;align-items:start!important;width:100%;min-height:0!important}
[data-gal-grid]{grid-template-columns:repeat(4,minmax(0,1fr))!important;column-gap:18px!important}
.elementor .e-con.d-mosaic.d-mosaic > .e-con.m-frame,[data-gal-grid] > [data-gal-tile]{grid-column:span 1!important;grid-row-start:auto!important;aspect-ratio:auto!important;height:auto!important;width:100%!important;max-width:none!important;min-height:0!important;margin:0!important;padding:0!important;border-radius:2px;overflow:hidden;position:relative;display:block!important;background:#E9DFD0}
.elementor .e-con.d-mosaic .e-con.m-frame .elementor-widget-container,.elementor .e-con.d-mosaic .e-con.m-frame .elementor-widget{height:auto!important;width:100%!important;aspect-ratio:auto!important}
.elementor .e-con.d-mosaic .e-con.m-frame img,[data-gal-grid] > [data-gal-tile] img{width:100%!important;height:auto!important;object-fit:fill!important;display:block;border-radius:0}
/* Le ratio de chaque image est posé en ligne par galerie.js d'après ses attributs width/height :
   un `aspect-ratio:auto` ici effacerait celui que le navigateur déduit des attributs, et une
   photo en chargement paresseux ferait 0 px de haut (vu le 31/08). */
@media (max-width:1100.5px){
  .elementor .e-con.d-mosaic.d-mosaic{grid-template-columns:repeat(2,minmax(0,1fr))!important}
  [data-gal-grid]{grid-template-columns:repeat(3,minmax(0,1fr))!important}
}
@media (max-width:640.5px){
  .elementor .e-con.d-mosaic.d-mosaic,[data-gal-grid],.m-cascade[data-gal-grid]{grid-template-columns:repeat(2,minmax(0,1fr))!important;column-gap:10px!important;row-gap:0!important}
}

/* ---- 2. Révélation tuile par tuile (délai par colonne posé par galerie.js) ---- */
.m-js .gal-pret > *:not(.gal-h-rangee),.m-js .gal-pret > .gal-h-rangee > *{opacity:0;transform:translateY(28px);clip-path:inset(6% 4%);transition:opacity 700ms var(--ease-out,cubic-bezier(.22,1,.36,1)),transform 700ms var(--ease-out,cubic-bezier(.22,1,.36,1)),clip-path 900ms var(--ease-out,cubic-bezier(.22,1,.36,1))}
.m-js .gal-pret > .is-in,.m-js .gal-pret > .gal-h-rangee > .is-in{opacity:1;transform:none;clip-path:inset(0)}

/* ---- 3. Survol : rien. Décision de Ronaldo le 31/08 (« i dont like the hover effect »).
   La photo, le curseur main, et le clic ouvre la visionneuse. ---- */
.gal-pret > *,.gal-pret > .gal-h-rangee > *{cursor:pointer}
.gal-pret > *:focus-visible,.gal-pret > .gal-h-rangee > *:focus-visible{outline:2px solid #16130F;outline-offset:3px}
[data-gal-cap]{display:none!important}

/* ---- 5. La visionneuse ---- */
#samey-vue{position:fixed;inset:0;z-index:200;display:grid;grid-template-rows:minmax(0,1fr) auto;background:rgba(22,19,15,.96);color:#FFF8EE;opacity:0;transition:opacity 300ms var(--ease-out,cubic-bezier(.22,1,.36,1))}
#samey-vue[hidden]{display:none}
#samey-vue.is-on{opacity:1}
#samey-vue figure{margin:0;min-height:0;display:grid;grid-template-rows:minmax(0,1fr) auto;justify-items:center;align-items:center;padding:clamp(56px,8vh,80px) clamp(72px,8vw,120px) clamp(8px,2vh,16px)}
#samey-vue img{max-width:100%;max-height:calc(100vh - 150px);max-height:calc(100dvh - 150px);object-fit:contain;clip-path:inset(10% 14%);transform:scale(1.04);transition:clip-path 640ms var(--ease-out,cubic-bezier(.22,1,.36,1)),transform 640ms var(--ease-out,cubic-bezier(.22,1,.36,1)),opacity 220ms var(--ease-out,cubic-bezier(.22,1,.36,1))}
#samey-vue.is-on img{clip-path:inset(0);transform:none}
#samey-vue.is-on img.is-swap{opacity:0;transform:translateX(var(--dx,24px));transition-duration:200ms}
#samey-vue figcaption{width:100%;display:flex;gap:24px;justify-content:space-between;align-items:baseline;padding:16px 0 clamp(8px,2vh,16px);font-size:12px;letter-spacing:.1em;text-transform:uppercase;opacity:.85}
#samey-vue figcaption [data-vis-compteur]{white-space:nowrap}
#samey-vue figcaption [data-vis-sujet]{text-transform:none;letter-spacing:0;font-size:14px;opacity:.9;text-align:right;max-width:60ch}
#samey-vue button{position:absolute;width:56px;height:56px;border:0;background:rgba(255,248,238,.08);color:#FFF8EE;font:inherit;font-size:22px;line-height:1;cursor:pointer;border-radius:50%;transition:background 160ms var(--ease-out,cubic-bezier(.22,1,.36,1))}
#samey-vue button:hover{background:rgba(255,248,238,.2)}
#samey-vue button:focus-visible{outline:2px solid #FFF8EE;outline-offset:2px}
#samey-vue [data-vis-fermer]{top:20px;right:20px}
#samey-vue [data-vis-prec]{left:20px;top:50%;margin-top:-28px}
#samey-vue [data-vis-suiv]{right:20px;top:50%;margin-top:-28px}
@media (max-width:640.5px){
  #samey-vue figure{padding:64px 12px 8px}
  #samey-vue [data-vis-prec],#samey-vue [data-vis-suiv]{top:auto;bottom:16px;margin:0;width:48px;height:48px}
  #samey-vue [data-vis-prec]{left:12px} #samey-vue [data-vis-suiv]{right:12px}
  #samey-vue figcaption{padding:12px 0 72px;flex-direction:column;gap:6px;align-items:flex-start}
  #samey-vue figcaption [data-vis-sujet]{text-align:left}
}

@media (prefers-reduced-motion:reduce){
  .m-js .gal-pret > *,.m-js .gal-pret > .gal-h-rangee > *,#samey-vue,#samey-vue img{transition-duration:.01ms!important;transform:none!important;clip-path:none!important;opacity:1!important}
}

/* ---- 6. La planche horizontale épinglée (planche.js, GSAP ; desktop, pointeur non tactile) ----
   Deux rangées de hauteur fixe, chaque photo à son format ; la grille prend sa largeur
   naturelle et planche.js la translate. `transition:none` : Elementor pose
   `transition: transform .4s` sur tout conteneur, et GSAP se battait contre (mesuré :
   x en retard d'un tiers à mi-course). Le bloc (titre + grille) cache le débord. */
.elementor .e-con.d-mosaic.d-mosaic.gal-h{display:flex!important;flex-direction:column!important;flex-wrap:nowrap!important;align-items:flex-start!important;height:auto!important;width:max-content!important;max-width:none!important;gap:20px!important;transition:none!important;will-change:transform}
.gal-h-rangee{display:flex;gap:20px;height:var(--gal-row,300px);flex:0 0 auto}
.elementor .e-con.d-mosaic.gal-h .gal-h-rangee > .e-con.m-frame{height:100%!important;width:auto!important;max-width:none!important;min-width:0!important;flex:0 0 auto!important;grid-row-end:auto!important}
.elementor .e-con.d-mosaic.gal-h .e-con.m-frame .elementor-widget-container,.elementor .e-con.d-mosaic.gal-h .e-con.m-frame .elementor-widget{height:100%!important;width:auto!important}
.elementor .e-con.d-mosaic.gal-h .e-con.m-frame img{height:100%!important;width:auto!important}
/* Le bloc épinglé garde la largeur de l'écran : sur mobile, les règles Elementor le laissaient
   s'élargir à la planche (4042 px pour 390, mesuré le 31/08), plus rien ne débordait. */
.gal-h-bloc{overflow:hidden!important;width:100%!important;max-width:100%!important;align-self:stretch!important;box-sizing:border-box!important;z-index:0}
/* La section qui suit la planche passe par-dessus le bloc épinglé (sortie en rideau). */
.gal-h-rideau{position:relative!important;z-index:2!important}
.gal-h-barre{height:2px;background:rgba(22,19,15,.12);margin-top:24px;position:relative;width:100%}
.gal-h-barre > i{position:absolute;inset:0;background:#16130F;transform-origin:left center;transform:scaleX(0)}

/* ---- 7. FLIP (31/08) : quand un fantôme fait le trajet, la grande photo n'a pas d'ouverture propre ---- */
#samey-vue.is-flip img{clip-path:none!important;transform:none!important;transition:opacity 200ms var(--ease-out,cubic-bezier(.22,1,.36,1))}
.gal-fantome{box-shadow:0 30px 60px -20px rgba(0,0,0,.5)}
/* ---- 8. Le titre lettre par lettre (titre.js, SplitText) ---- */
.ttr-lettre{will-change:transform}

/* ---- 9. Pas de défilement lisse CSS avec ScrollTrigger (31/08, mesuré dans le Chrome de Ronaldo) ----
   Tout refresh qui tombe pendant un glissé (restauration au rechargement, ancre, clavier)
   mesure les bornes du pin avec le défilement en mouvement : décalées de ce qui restait à
   parcourir (−64, puis −84 px). GSAP le déconseille ; motion.js a sa propre inertie. */
html{scroll-behavior:auto!important}
