/* ==========================================================================
   ANIMACIONES DE SCROLL - ESTILOS BASE (TEXTO, TARJETAS Y SECCIONES)
   ========================================================================== */

/* Todos los elementos con animación de entrada */
.reveal-up,
.reveal-left,
.reveal-right,
.reveal-zoom,
.reveal-item {
  will-change: opacity, transform, filter;
  transition: opacity 0.95s cubic-bezier(0.16, 1, 0.3, 1),
              transform 0.95s cubic-bezier(0.16, 1, 0.3, 1),
              filter 0.95s ease;
}

/* Estado inicial (Oculto) antes de scrollear */
.reveal-up,
.reveal-item {
  opacity: 0;
  transform: translate3d(0, 45px, 0);
  filter: blur(4px);
}

.reveal-left:not(.image-frame) {
  opacity: 0;
  transform: translate3d(-55px, 0, 0);
  filter: blur(3px);
}

.reveal-right:not(.image-frame) {
  opacity: 0;
  transform: translate3d(55px, 0, 0);
  filter: blur(3px);
}

.reveal-zoom {
  opacity: 0;
  transform: translate3d(0, 16px, 0) scale(0.94);
  filter: blur(3px);
}

/* Estado REVELADO al hacer scroll */
.reveal-up.revealed,
.reveal-left.revealed:not(.image-frame),
.reveal-right.revealed:not(.image-frame),
.reveal-zoom.revealed,
.reveal-item.revealed,
.reveal-up.image-visible,
.reveal-left.image-visible:not(.image-frame),
.reveal-right.image-visible:not(.image-frame),
.reveal-zoom.image-visible,
.reveal-item.image-visible {
  opacity: 1 !important;
  transform: translate3d(0, 0, 0) scale(1) !important;
  filter: blur(0) !important;
}

.stagger-1 { transition-delay: 0.1s; }
.stagger-2 { transition-delay: 0.22s; }
.stagger-3 { transition-delay: 0.34s; }
.stagger-4 { transition-delay: 0.46s; }

/* Wrapper para máscaras de revelado general */
.image-reveal-wrapper {
  position: relative;
  overflow: hidden;
}

.image-reveal-wrapper:after {
  position: absolute;
  inset: 0;
  z-index: 2;
  background: var(--gold);
  content: '';
  transform: translateX(-101%);
  transition: transform 0.95s cubic-bezier(0.77, 0, 0.175, 1);
}

.image-reveal-wrapper.revealed:after {
  transform: translateX(101%);
}

/* ==========================================================================
   ANIMACIÓN DE IMAGEN AL SCROLL: REVELADO POR FRANJA DORADA (CURTAIN WIPE)
   ========================================================================== */

/* Contenedor principal de la imagen */
.image-frame {
  position: relative;
  overflow: hidden;
  isolation: isolate;
  opacity: 0;
  will-change: opacity, transform;
  transition: opacity 0.75s ease, transform 1s cubic-bezier(0.16, 1, 0.3, 1);
}

/* Entrada desde los costados */
.image-frame.reveal-left {
  opacity: 0;
  transform: translate3d(-65px, 0, 0);
}

.image-frame.reveal-right {
  opacity: 0;
  transform: translate3d(65px, 0, 0);
}

/* Estado REVELADO del marco de la imagen */
.image-frame.revealed,
.image-frame.image-visible {
  opacity: 1 !important;
  transform: translate3d(0, 0, 0) !important;
}

/* LA FRANJA REVELADORA DORADA (GOLDEN BLOCK CURTAIN) */
.image-frame:before {
  content: '';
  position: absolute;
  inset: 0;
  z-index: 10;
  background: linear-gradient(135deg, #f3da91, #c99a42, #8c5d1e);
  transform: scaleX(0);
  pointer-events: none;
}

/* Barrido de la Franja Dorada para entrada izquierda */
.image-frame.reveal-left.revealed:before,
.image-frame.reveal-left.image-visible:before {
  animation: curtainWipeLeft 1.1s cubic-bezier(0.77, 0, 0.175, 1) forwards;
}

@keyframes curtainWipeLeft {
  0% {
    transform: scaleX(0);
    transform-origin: left center;
  }
  42% {
    transform: scaleX(1);
    transform-origin: left center;
  }
  50% {
    transform: scaleX(1);
    transform-origin: right center;
  }
  100% {
    transform: scaleX(0);
    transform-origin: right center;
  }
}

/* Barrido de la Franja Dorada para entrada derecha y por defecto */
.image-frame.reveal-right.revealed:before,
.image-frame.reveal-right.image-visible:before,
.image-frame.revealed:before,
.image-frame.image-visible:before {
  animation: curtainWipeRight 1.1s cubic-bezier(0.77, 0, 0.175, 1) forwards;
}

@keyframes curtainWipeRight {
  0% {
    transform: scaleX(0);
    transform-origin: right center;
  }
  42% {
    transform: scaleX(1);
    transform-origin: right center;
  }
  50% {
    transform: scaleX(1);
    transform-origin: left center;
  }
  100% {
    transform: scaleX(0);
    transform-origin: left center;
  }
}

/* La foto real dentro del marco */
.image-frame img {
  position: relative;
  z-index: 1;
  width: 100%;
  height: 100%;
  object-fit: cover;
  opacity: 0;
  transform: scale(1.15) translate3d(var(--img-slide-x, -20px), var(--parallax-y, 0px), 0);
  filter: saturate(0.85) brightness(0.92);
  transition: opacity 0.3s 0.35s ease,
              transform 1.2s cubic-bezier(0.16, 1, 0.3, 1),
              filter 0.8s 0.35s ease;
  will-change: opacity, transform, filter;
}

.image-frame.reveal-left img {
  --img-slide-x: -30px;
}

.image-frame.reveal-right img {
  --img-slide-x: 30px;
}

/* Revelado de la foto exactamente cuando la franja dorada la cubre (0.35s) */
.image-frame.revealed img,
.image-frame.image-visible img {
  opacity: 1 !important;
  transform: scale(1.04) translate3d(0, var(--parallax-y, 0px), 0);
  filter: saturate(1) brightness(1);
}

/* Marco dorado interior */
.image-frame:after {
  opacity: 0;
  border: 1px solid rgba(243, 218, 145, 0.5);
  transition: opacity 0.8s 0.5s ease;
}

.image-frame.revealed:after,
.image-frame.image-visible:after {
  opacity: 1;
}

/* Sin animación al pasar el mouse por encima */
.image-frame:hover img,
.image-frame:hover {}

/* Elementos de la lista de procesos y servicios */
.process-list li {
  overflow: hidden;
}

.process-list li:after {
  position: absolute;
  right: 0;
  bottom: 0;
  left: 0;
  height: 2px;
  background: var(--gold);
  content: '';
  transform: scaleX(0);
  transform-origin: left;
}

.service-card.reveal-item.revealed {
  animation: card-arrival 1s cubic-bezier(0.22, 1, 0.36, 1) both;
}

.trust-item.reveal-up.revealed {
  animation: line-brighten 0.9s ease both;
}

.service-card.reveal-item.revealed .number {
  animation: label-arrival 0.7s 0.12s both;
}

.service-card.reveal-item.revealed a {
  animation: link-arrival 0.7s 0.28s both;
}

.process-list li.reveal-item.revealed:after {
  animation: process-line 0.9s 0.18s both;
}

@keyframes card-arrival {
  0% { box-shadow: 0 0 0 rgba(31, 10, 57, 0); }
  65% { box-shadow: 0 24px 48px rgba(32, 12, 60, 0.14); }
  100% { box-shadow: 0 8px 26px rgba(32, 12, 60, 0.06); }
}

@keyframes line-brighten {
  from { border-top-color: rgba(243, 218, 145, 0.08); }
  to { border-top-color: rgba(243, 218, 145, 0.68); }
}

@keyframes label-arrival {
  from { opacity: 0; transform: translateY(8px); letter-spacing: 0.28em; }
  to { opacity: 1; transform: translateY(0); letter-spacing: 0.18em; }
}

@keyframes link-arrival {
  from { opacity: 0; transform: translateX(-8px); }
  to { opacity: 1; transform: translateX(0); }
}

@keyframes process-line {
  from { transform: scaleX(0); transform-origin: left; }
  to { transform: scaleX(1); transform-origin: left; }
}
