html, body { height: 100%; margin: 0; }
body { background: #0b0c10; color: #fff; font-family: system-ui, -apple-system, Segoe UI, Roboto, Arial; }

.app {
   margin: 0;
    display: flex;
    justify-content: center;
    align-items: center;
}

.stage {
  display: grid;
  grid-template-rows: auto 1fr;
  gap: 0px;
  padding: 0px;
}

.actions { display:flex; gap:8px; }
.btn {
  background: rgba(255,255,255,0.08);
  border: 1px solid rgba(255,255,255,0.10);
  color: #fff;
  padding: 8px 10px;
  border-radius: 10px;
  text-decoration: none;
  cursor: pointer;
}
.btn.active { background: rgba(255,255,255,0.16); }


#original,#renovated{
    
    width: 100%;
    height: auto;
    display: none;
}

html {
    box-sizing: border-box;
  }
  
  *, *:before, *:after {
    box-sizing: inherit;
  }
  
#compare,#compare_gen {
    margin: 0;
    
    display: flex;
    justify-content: center;
    align-items: center;
  }
  
  /* 
  .ba_container {
    position: relative;
    width: 900px;
    height: 600px;
    
  }
  .ba_container .img {
    position: absolute;
    top: 0;
    left: 0;
    width: 100%;
    height: 100%;
    background-size: 900px 100%;
  } */

  /* ===== Premium motion defaults ===== */
.ba_container{
  --ease-premium: cubic-bezier(.22, .95, .36, 1);
  --fade: 0.001;            /* avoids opacity snapping on some GPUs */
  --depth: 0.98;            /* subtle scale depth */
  --shadow: 0 14px 40px rgba(0,0,0,.35);
}

.viewplane{
  will-change: transform, opacity, filter;
  transform: translateZ(0);
  backface-visibility: hidden;
  -webkit-backface-visibility: hidden;
}

/* subtle lighting/shadow during transitions */
.ba_container.is-out .view-a .viewplane{
  filter: brightness(0.98);
}

.ba_container.is-out .view-b .viewplane{
  filter: brightness(1);
}

.ba_container::after{
  content:"";
  position:absolute;
  inset:0;
  pointer-events:none;
  opacity:0;
  transition: opacity var(--transition-ms) var(--ease-premium);
  box-shadow: inset 0 0 120px rgba(0,0,0,.25);
  z-index: 15;
}
.ba_container.is-out::after{ opacity:1; }


 .ba_container {
  position: relative;
  width: 100%;          
  height: 600px;
  overflow: hidden;
}

.ba_container .img {
  position: absolute;
  top: 0;
  left: 0;
  width: 100%;
  height: 100%;
  background-size: cover;         
  background-position: top left;
}



  .ba_container .background-img,.ba_container .background-img-gen {
    
  }
  .ba_container .foreground-img,.ba_container .foreground-img-gen {
    width: 50%;
  }
  .ba_container .slider {
    position: absolute;
    -webkit-appearance: none;
    appearance: none;
    width: 100%;
    height:100%;
    background: rgba(242, 242, 242, 0.0);
    outline: none;
    margin: 0;
    transition: all 0.2s;
    display: flex;
    justify-content: center;
    align-items: center;
    
  }
  .ba_container .slider:hover {
    background: rgba(242, 242, 242, 0.0);
  }
  .slider-line-gen{
    position: absolute;
    top: 0;
    height: 100%;
    width: 3px;
    background: #fff;
    left: calc(50% - 1.5px);
    z-index: 9;
    pointer-events: none;
    }

.ba_container .slider::-webkit-slider-thumb{
  -webkit-appearance: none;
  appearance: none;
  width: 30px;
  height: 30px;
  background: transparent;
  border: 0;
}

.ba_container .slider::-moz-range-thumb{
  width: 30px;
  height: 30px;
  background: transparent;
  border: 0;
}

  .ba_container .slider-button,.ba_container .slider-button-gen {
    pointer-events: none;
    position: absolute;
    width: 30px;
    height: 30px;
    border-radius: 50%;
    background-color: white;
    left: calc(50% - 18px);
    top: calc(50% - 18px);
    display: flex;
    justify-content: center;
    align-items: center;
    margin-left:3px;
  }
  .ba_container .slider-button:after,.ba_container .slider-button-gen:after {
    pointer-events: none;
    content: "";
    padding: 3px;
    display: inline-block;
    border: solid #5D5D5D;
    border-width: 0 2px 2px 0;
    transform: rotate(-45deg);
  }
  .ba_container .slider-button:before,.ba_container .slider-button-gen:before  {
    pointer-events: none;
    content: "";
    padding: 3px;
    display: inline-block;
    border: solid #5D5D5D;
    border-width: 0 2px 2px 0;
    transform: rotate(135deg);
  }

  /* OVERLAY nav buttons */
.nav{
  position: absolute;
  top: 50%;
  transform: translateY(-50%);
  z-index: 10;

  border: 0;
  background: rgba(255,255,255,0.10);
  color: #fff;
  font-size: 48px;
  cursor: pointer;

  width: 64px;
  height: 64px;
  border-radius: 999px;

  display: grid;
  place-items: center;
}

.nav:hover{ background: rgba(255,255,255,0.18); }

.nav-left{ left: 12px; }
.nav-right{ right: 12px; }

/*transitions */
/* base */
.ba_container{
  --transition-ms: 450ms;
  --w: 900px;
  --h: 600px;
  position: relative;
  overflow: hidden;
  perspective: 1200px;
}

/* La couche 3D ne doit pas capter les events */
/* This is the rotating cube wrapper */
.views3d{
  position:absolute;
  inset:0;
  transform-style: preserve-3d;
  z-index: 1;
  pointer-events: none; /* keep slider usable */
}

/* Tous les contrôles au-dessus */
#slider_gen,
.slider-line-gen,
.slider-button-gen,
.nav{
  position: absolute;
  z-index: 20;
  pointer-events: auto;
}

.slider-line-gen{
  pointer-events: none !important;
}

.view3d{
  position:absolute;
  inset:0;
  transform-style: preserve-3d;
  backface-visibility: hidden;
}

/* le plan unique qui représente toute la vue */
.viewplane{
  position:absolute;
  inset:0;
  backface-visibility: hidden;
  will-change: transform;
}

.view3d, .viewplane{
  transform: translateZ(0);
}

/* images inside remain 2D */
.viewplane .img{
  position:absolute;
  inset:0;
  background-size: cover;
  background-position: top left;
  transform: translateZ(0);
  backface-visibility: hidden;
}


.view-b{
  opacity: 0;
}

.is-out .view-b{
  opacity: 1;
}

.view3d .foreground-img-gen{ width: 50%; }

/* ===== FADE (optionnel, si tu veux garder) ===== */
.transition-fade .viewplane{
  transition: opacity var(--transition-ms) var(--ease-premium);
}
.transition-fade .view-b .viewplane{ opacity:0; }
.transition-fade.is-out .view-a .viewplane{ opacity:0; }
.transition-fade.is-out .view-b .viewplane{ opacity:1; }

/* FLIP */
.transition-flip .viewplane{
  transition: transform var(--transition-ms) var(--ease-premium),
              opacity  var(--transition-ms) var(--ease-premium);
  transform-origin: 50% 50%;
}

.transition-flip .view-a .viewplane{ transform: rotateY(0deg); opacity:1; }

.transition-flip.dir-next .view-b .viewplane{ transform: rotateY(70deg) scale(var(--depth)); opacity:0; }
.transition-flip.dir-next.is-out .view-a .viewplane{ transform: rotateY(-70deg) scale(var(--depth)); opacity:0; }
.transition-flip.dir-next.is-out .view-b .viewplane{ transform: rotateY(0deg) scale(1); opacity:1; }

.transition-flip.dir-prev .view-b .viewplane{ transform: rotateY(-70deg) scale(var(--depth)); opacity:0; }
.transition-flip.dir-prev.is-out .view-a .viewplane{ transform: rotateY(70deg) scale(var(--depth)); opacity:0; }
.transition-flip.dir-prev.is-out .view-b .viewplane{ transform: rotateY(0deg) scale(1); opacity:1; }


/* ===== REAL CUBE (fixed size) ===== */
.transition-cube{
  perspective: 1200px;
  perspective-origin: 50% 50%;
}

.transition-cube .views3d{
  transform-style: preserve-3d;
  will-change: transform;
  transition: transform var(--transition-ms) var(--ease-premium, cubic-bezier(.22,.95,.36,1));

  /* IMPORTANT: keep cube centered so front face stays same size */
  transform: translateZ(calc(var(--w) / -2));
}

/* faces */
.transition-cube .view3d{
  position: absolute;
  inset: 0;
  transform-style: preserve-3d;
  backface-visibility: hidden;
  -webkit-backface-visibility: hidden;
}

/* Front face */
.transition-cube .view-a{
  transform: rotateY(0deg) translateZ(calc(var(--w) / 2));
}

/* Incoming side face */
.transition-cube.dir-next .view-b{
  transform: rotateY(90deg) translateZ(calc(var(--w) / 2));
}
.transition-cube.dir-prev .view-b{
  transform: rotateY(-90deg) translateZ(calc(var(--w) / 2));
}

/* Rotate cube (keep the same base translateZ) */
.transition-cube.dir-next.is-out .views3d{
  transform: translateZ(calc(var(--w) / -2)) rotateY(-90deg);
}
.transition-cube.dir-prev.is-out .views3d{
  transform: translateZ(calc(var(--w) / -2)) rotateY(90deg);
}

/* Premium shading (optional but nice) */
.transition-cube .viewplane{
  transition: filter var(--transition-ms) var(--ease-premium, cubic-bezier(.22,.95,.36,1));
}
.transition-cube.is-out .view-a .viewplane{ filter: brightness(0.92); }
.transition-cube.is-out .view-b .viewplane{ filter: brightness(1.02); }

/* Prevent snap-back animations when we reset the cube */
.transition-cube.no-anim .views3d{
  transition: none !important;
}

.viewplane{
  will-change: transform;
}

/* ===== COVERFLOW ===== */
.transition-coverflow .view-a,
.transition-coverflow .view-b{
  transition: transform var(--transition-ms) ease, opacity var(--transition-ms) ease;
}

.transition-coverflow .view-a{ transform: translateX(0) rotateY(0) scale(1); opacity:1; }
.transition-coverflow .view-b{ transform: translateX(18%) rotateY(35deg) scale(0.92); opacity:0; }

.transition-coverflow.is-out .view-a{ transform: translateX(-18%) rotateY(-35deg) scale(0.92); opacity:0; }
.transition-coverflow.is-in  .view-b{ transform: translateX(0) rotateY(0) scale(1); opacity:1; }


/* CUT: rien */
.transition-cut{}


/* common for all slides */
.transition-slide-left .viewplane,
.transition-slide-right .viewplane,
.transition-slide-up .viewplane,
.transition-slide-down .viewplane{
  transition: transform var(--transition-ms) var(--ease-premium),
              opacity  var(--transition-ms) var(--ease-premium);
}

/* LEFT */
.transition-slide-left .view-b .viewplane{ transform: translateX(10%) scale(1.01); opacity:0; }
.transition-slide-left.is-out .view-a .viewplane{ transform: translateX(-10%) scale(var(--depth)); opacity:0; }
.transition-slide-left.is-out .view-b .viewplane{ transform: translateX(0) scale(1); opacity:1; }

/* RIGHT */
.transition-slide-right .view-b .viewplane{ transform: translateX(-10%) scale(1.01); opacity:0; }
.transition-slide-right.is-out .view-a .viewplane{ transform: translateX(10%) scale(var(--depth)); opacity:0; }
.transition-slide-right.is-out .view-b .viewplane{ transform: translateX(0) scale(1); opacity:1; }

/* UP */
.transition-slide-up .view-b .viewplane{ transform: translateY(10%) scale(1.01); opacity:0; }
.transition-slide-up.is-out .view-a .viewplane{ transform: translateY(-10%) scale(var(--depth)); opacity:0; }
.transition-slide-up.is-out .view-b .viewplane{ transform: translateY(0) scale(1); opacity:1; }

/* DOWN */
.transition-slide-down .view-b .viewplane{ transform: translateY(-10%) scale(1.01); opacity:0; }
.transition-slide-down.is-out .view-a .viewplane{ transform: translateY(10%) scale(var(--depth)); opacity:0; }
.transition-slide-down.is-out .view-b .viewplane{ transform: translateY(0) scale(1); opacity:1; }


/* ZOOM */
.transition-zoom .viewplane{
  transition: transform var(--transition-ms) var(--ease-premium),
              opacity  var(--transition-ms) var(--ease-premium);
}
.transition-zoom .view-b .viewplane{ transform: scale(0.96); opacity:0; }
.transition-zoom.is-out .view-a .viewplane{ transform: scale(1.06); opacity:0; }
.transition-zoom.is-out .view-b .viewplane{ transform: scale(1); opacity:1; }

/* BLUR */
.transition-blur .viewplane{
  transition: opacity var(--transition-ms) var(--ease-premium),
              filter  var(--transition-ms) var(--ease-premium),
              transform var(--transition-ms) var(--ease-premium);
}
.transition-blur .view-b .viewplane{ opacity:0; filter: blur(8px); transform: scale(1.01); }
.transition-blur.is-out .view-a .viewplane{ opacity:0; filter: blur(8px); transform: scale(0.99); }
.transition-blur.is-out .view-b .viewplane{ opacity:1; filter: blur(0); transform: scale(1); }


/* TILT */
.transition-tilt .viewplane{
  transition: transform var(--transition-ms) var(--ease-premium),
              opacity  var(--transition-ms) var(--ease-premium);
}
.transition-tilt .view-b .viewplane{ opacity:0; transform: rotateZ(1deg) scale(1.01); }
.transition-tilt.is-out .view-a .viewplane{ opacity:0; transform: rotateZ(-1deg) scale(0.99); }
.transition-tilt.is-out .view-b .viewplane{ opacity:1; transform: rotateZ(0) scale(1); }


/* ===== ZOOM OUT ===== */
.transition-zoom-out .viewplane{
  transition: transform var(--transition-ms) var(--ease-premium),
              opacity  var(--transition-ms) var(--ease-premium);
}
.transition-zoom-out .view-b .viewplane{ transform: scale(1.06); opacity:0; }
.transition-zoom-out.is-out .view-a .viewplane{ transform: scale(0.90); opacity:0; }
.transition-zoom-out.is-out .view-b .viewplane{ transform: scale(1); opacity:1; }

/* PARALLAX */

.transition-parallax .viewplane{
  transition: transform var(--transition-ms) var(--ease-premium),
              opacity  var(--transition-ms) var(--ease-premium);
}
.transition-parallax .view-b .viewplane{ transform: translateX(6%) scale(1.02); opacity:0; }
.transition-parallax.is-out .view-a .viewplane{ transform: translateX(-6%) scale(0.98); opacity:0; }
.transition-parallax.is-out .view-b .viewplane{ transform: translateX(0) scale(1); opacity:1; }

/* REVEAL */
.transition-reveal .viewplane{
  transition: transform var(--transition-ms) var(--ease-premium),
              opacity  var(--transition-ms) var(--ease-premium);
}
.transition-reveal .view-b .viewplane{ transform: translateX(0); opacity:1; }
.transition-reveal .view-a .viewplane{ transform: translateX(0); opacity:1; }
.transition-reveal.is-out .view-a .viewplane{ transform: translateX(-100%); opacity:1; }


.transition-fade .viewplane,
.transition-flip .viewplane,
.transition-cube .viewplane,
.transition-slide-left .viewplane,
.transition-slide-right .viewplane,
.transition-slide-up .viewplane,
.transition-slide-down .viewplane,
.transition-zoom .viewplane,
.transition-zoom-out .viewplane,
.transition-blur .viewplane,
.transition-tilt .viewplane{
  transition-timing-function: var(--ease-premium);
}

.autoplay-toggle{
  position: fixed;
  bottom: 5px;
  left: 100px;
  transform: translateX(-50%);
  z-index: 10;

  border: 0;
  background: rgba(255,255,255,0.10);
  color: #fff;
  font-size: 14px;
  cursor: pointer;

  padding: 6px 12px;
  border-radius: 999px;
}