/* Finitions partagees des pages ouvrages : vignettes, diaporama plein ecran,
   comparateur avant/apres, grain et barre de progression. Reprend le langage
   visuel de l'accueil (memes durees, memes courbes, memes couleurs). */

/* ── Grain et progression de lecture ───────────────────────────────────── */
.grain{position:fixed;inset:0;z-index:9990;pointer-events:none;opacity:.02;background-image:url("data:image/svg+xml,%3Csvg viewBox='0 0 128 128' xmlns='http://www.w3.org/2000/svg'%3E%3Cfilter id='n'%3E%3CfeTurbulence type='fractalNoise' baseFrequency='.9' numOctaves='3' stitchTiles='stitch'/%3E%3C/filter%3E%3Crect width='100%25' height='100%25' filter='url(%23n)'/%3E%3C/svg%3E");background-size:128px;contain:strict}
.scroll-progress{position:fixed;top:0;left:0;width:100%;height:2px;background:linear-gradient(90deg,var(--bronze),var(--bronze-light));z-index:101;transform-origin:0 50%;transform:scaleX(0);pointer-events:none}

/* ── Vignettes de galerie ──────────────────────────────────────────────── */
.gallery-strip .gs-item{position:relative;margin:0;overflow:hidden;cursor:zoom-in;background:var(--cream-dark)}
.gallery-strip .gs-item picture{display:block}
.gallery-strip .gs-item img{transition:transform .9s var(--ease-expo)}
.gallery-strip .gs-item:hover img{transform:scale(1.06)}
.gs-item::after{content:'';position:absolute;bottom:12px;right:12px;width:36px;height:36px;background:url('logo-manufacturevb-site.webp') center/contain no-repeat;opacity:.22;pointer-events:none;z-index:2;transition:opacity .3s}
.gs-item:hover::after{opacity:.4}
.gs-cap{position:absolute;inset:0;margin:0;display:flex;align-items:flex-end;padding:1.25rem 1.4rem;background:linear-gradient(to top,rgba(26,22,20,.68) 0%,rgba(26,22,20,0) 55%);opacity:0;transition:opacity .45s var(--ease);pointer-events:none}
.gs-cap span{color:#fff;font-size:.72rem;letter-spacing:.15em;text-transform:uppercase;transform:translateY(10px);transition:transform .55s var(--ease-expo);padding-right:3rem}
.gs-zoom{position:absolute;top:12px;right:12px;width:38px;height:38px;border-radius:50%;display:flex;align-items:center;justify-content:center;background:rgba(247,242,234,.9);color:var(--charcoal);opacity:0;transform:scale(.8);transition:opacity .35s,transform .45s var(--ease-expo);pointer-events:none;z-index:3}
.gs-zoom svg{width:16px;height:16px;fill:none;stroke:currentColor;stroke-width:1.6;stroke-linecap:round}
.gs-open{position:absolute;inset:0;z-index:4;width:100%;height:100%;padding:0;border:0;background:transparent;cursor:zoom-in}
.gs-item:hover .gs-cap,.gs-item:focus-within .gs-cap{opacity:1}
.gs-item:hover .gs-cap span,.gs-item:focus-within .gs-cap span{transform:translateY(0)}
.gs-item:hover .gs-zoom,.gs-item:focus-within .gs-zoom{opacity:1;transform:scale(1)}
.gs-open:focus-visible{outline:2px solid var(--bronze-text,#82683e);outline-offset:3px}
.service-hero-img.is-zoomable{cursor:zoom-in}
/* Ecrans tactiles : pas de survol, la legende reste visible. */
@media(hover:none){.gs-cap{opacity:1}.gs-cap span{transform:none}}

/* ── Diaporama plein ecran ─────────────────────────────────────────────── */
.lightbox{position:fixed;inset:0;z-index:200;display:none;flex-direction:column;background:rgba(10,8,6,0);backdrop-filter:blur(0);-webkit-backdrop-filter:blur(0);transition:background .5s var(--ease-expo),backdrop-filter .5s var(--ease-expo),-webkit-backdrop-filter .5s var(--ease-expo)}
.lightbox.active{display:flex}
.lightbox.visible{background:rgba(10,8,6,.96);backdrop-filter:blur(30px);-webkit-backdrop-filter:blur(30px)}
.lightbox-main{position:relative;flex:1;display:flex;align-items:center;justify-content:center;overflow:hidden;touch-action:none}
.lightbox-track{display:flex;align-items:center;justify-content:center;will-change:transform,opacity}
.lightbox-track img{max-width:86vw;max-height:80vh;width:auto;height:auto;object-fit:contain;user-select:none;-webkit-user-select:none;-webkit-user-drag:none;transition:filter .4s ease}
.lightbox-track img.is-low{filter:blur(6px)}
.lightbox-spinner{position:absolute;top:50%;left:50%;width:28px;height:28px;margin:-14px 0 0 -14px;border:1px solid rgba(255,255,255,.15);border-top-color:var(--bronze-light);border-radius:50%;opacity:0;transition:opacity .3s;animation:lbspin 1s linear infinite;pointer-events:none}
.lightbox.loading .lightbox-spinner{opacity:1}
@keyframes lbspin{to{transform:rotate(360deg)}}
.lightbox-close,.lightbox-nav{position:absolute;display:flex;align-items:center;justify-content:center;border-radius:50%;color:rgba(255,255,255,.6);background:rgba(255,255,255,.04);border:1px solid rgba(255,255,255,.08);cursor:pointer;z-index:5;opacity:0;transition:opacity .4s var(--ease-expo),transform .4s var(--ease-expo),background .3s,color .3s,border-color .3s}
.lightbox-close{top:max(1.5rem,env(safe-area-inset-top));right:max(1.5rem,env(safe-area-inset-right));width:44px;height:44px;transform:translateY(-10px)}
.lightbox.visible .lightbox-close{opacity:1;transform:none;transition-delay:.15s}
.lightbox-close:hover{color:#fff;background:rgba(255,255,255,.1);transform:rotate(90deg)}
.lightbox-nav{top:50%;width:52px;height:52px;margin-top:-26px}
.lightbox.visible .lightbox-nav{opacity:1;transition-delay:.25s}
.lightbox-nav:hover{color:#fff;background:rgba(255,255,255,.08);border-color:rgba(154,123,74,.35)}
.lightbox-prev{left:max(1.5rem,env(safe-area-inset-left))}
.lightbox-next{right:max(1.5rem,env(safe-area-inset-right))}
.lightbox-close svg,.lightbox-nav svg{width:20px;height:20px;fill:none;stroke:currentColor;stroke-width:1.8;stroke-linecap:round;stroke-linejoin:round}
.lightbox.single .lightbox-nav,.lightbox.single .lightbox-divider,.lightbox.single .lightbox-counter{display:none}
.lightbox-info{display:flex;align-items:center;justify-content:center;gap:1.2rem;padding:1.2rem 2rem calc(1.4rem + env(safe-area-inset-bottom));opacity:0;transform:translateY(8px);transition:opacity .5s var(--ease-expo),transform .5s var(--ease-expo)}
.lightbox.visible .lightbox-info{opacity:1;transform:none;transition-delay:.3s}
.lightbox-caption{color:rgba(255,255,255,.7);font-size:.75rem;letter-spacing:.18em;text-transform:uppercase;font-family:var(--sans);text-align:center}
.lightbox-divider{width:1px;height:12px;background:rgba(255,255,255,.15)}
.lightbox-counter{color:rgba(255,255,255,.35);font-size:.65rem;letter-spacing:.2em;font-family:var(--sans);font-variant-numeric:tabular-nums;white-space:nowrap}
.lightbox-progress{position:absolute;bottom:0;left:0;width:100%;height:1px;background:var(--bronze);opacity:.5;transform-origin:0 50%;transition:transform .5s var(--ease-expo)}
.lightbox button:focus-visible{outline:2px solid var(--bronze-light,#b8985f);outline-offset:3px}
@media(max-width:768px){
  .lightbox-nav{display:none}
  .lightbox-track img{max-width:100vw;max-height:74vh}
  .lightbox-info{padding-left:1rem;padding-right:1rem}
}

/* ── Comparateur avant / apres ─────────────────────────────────────────── */
.ba-slider{max-width:min(540px,62vh);margin:0 auto}
.ba-container{--pos:50%;position:relative;overflow:hidden;cursor:ew-resize;user-select:none;-webkit-user-select:none;touch-action:pan-y;background:var(--cream-dark)}
.ba-container picture,.ba-container img{display:block;width:100%;height:auto;pointer-events:none;-webkit-user-drag:none}
.ba-before{position:absolute;inset:0;clip-path:inset(0 calc(100% - var(--pos)) 0 0)}
.ba-before picture,.ba-before img{height:100%;object-fit:cover}
.ba-handle{position:absolute;top:0;bottom:0;left:var(--pos);width:0;display:flex;flex-direction:column;align-items:center;z-index:3;pointer-events:none}
.ba-handle-line{flex:1;width:1.5px;background:rgba(255,255,255,.8);box-shadow:0 0 8px rgba(0,0,0,.15)}
.ba-handle-knob{flex-shrink:0;width:46px;height:46px;border-radius:50%;background:rgba(255,255,255,.94);backdrop-filter:blur(8px);-webkit-backdrop-filter:blur(8px);display:flex;align-items:center;justify-content:center;box-shadow:0 4px 18px rgba(0,0,0,.2);color:var(--charcoal);transition:transform .35s var(--ease-expo),box-shadow .35s}
.ba-handle-knob svg{width:20px;height:20px;fill:none;stroke:currentColor;stroke-width:1.5;stroke-linecap:round;stroke-linejoin:round;opacity:.7}
.ba-container:hover .ba-handle-knob,.ba-container.dragging .ba-handle-knob{transform:scale(1.08);box-shadow:0 6px 24px rgba(0,0,0,.25)}
.ba-container:focus-visible{outline:2px solid var(--bronze-text,#82683e);outline-offset:4px}
.ba-tag{position:absolute;bottom:1rem;z-index:2;padding:.35rem .75rem;border-radius:100px;font-size:.6rem;font-weight:500;letter-spacing:.14em;text-transform:uppercase;pointer-events:none;transition:opacity .3s}
.ba-tag-avant{left:1rem;background:rgba(0,0,0,.45);color:var(--cream)}
.ba-tag-apres{right:1rem;background:rgba(154,123,74,.75);color:#fff}
.ba-hint{display:flex;align-items:center;justify-content:center;gap:.6rem;margin-top:1.1rem;font-size:.72rem;letter-spacing:.14em;text-transform:uppercase;color:var(--text-light);transition:opacity .5s}
.ba-hint svg{width:22px;height:12px;fill:none;stroke:var(--bronze);stroke-width:1.4;stroke-linecap:round;stroke-linejoin:round}
.ba-slider.used .ba-hint{opacity:.35}
.ba-note{text-align:center;color:var(--text-mid);font-size:.92rem;line-height:1.7;max-width:560px;margin:1.2rem auto 0}
@media(max-width:768px){.ba-handle-knob{width:40px;height:40px}}

@media(prefers-reduced-motion:reduce){
  .gallery-strip .gs-item img,.gs-cap,.gs-cap span,.gs-zoom,.lightbox,.lightbox *,.ba-handle-knob{transition:none!important;animation:none!important}
}
.ba-intro{margin-bottom:4rem}

/* Galeries de 2 ou 4 photos : deux colonnes plutot qu'une ligne incomplete. */
@media(min-width:769px){
  .gallery-strip:has(> .gs-item:nth-child(2):last-child),
  .gallery-strip:has(> .gs-item:nth-child(4):last-child){grid-template-columns:repeat(2,1fr)}
}

/* Photos isolees (haut des pages ouvrages, pages publics) : memes legendes
   que les galeries, en capitales blanches sur un degrade. */
.ph{position:relative;margin:0;overflow:hidden}
.ph picture{display:block}
.ph img{transition:transform .9s var(--ease-expo)}
.ph::after{content:'';position:absolute;bottom:12px;right:12px;width:36px;height:36px;background:url('logo-manufacturevb-site.webp') center/contain no-repeat;opacity:.22;pointer-events:none;z-index:2;transition:opacity .3s}
.ph .gs-cap{z-index:1}
@media(hover:hover) and (pointer:fine){
  .ph:hover img{transform:scale(1.04)}
  .ph:hover::after{opacity:.4}
  .ph:hover .gs-cap{opacity:1}
  .ph:hover .gs-cap span{transform:translateY(0)}
  .ph:hover .gs-zoom{opacity:1;transform:scale(1)}
}
@media(prefers-reduced-motion:reduce){.ph img{transition:none}}
