/* ==========================================================================
   EDIFICIO PRAGA — animations.css
   Entrada del hero, revelados por scroll y estados hover.
   ========================================================================== */

/* ==========================================================================
   1 · Revelado por scroll

   Todo el estado inicial vive bajo `.js`: sin JavaScript no se oculta nada
   y la página sigue siendo legible.
   ========================================================================== */
.js [data-reveal] {
  opacity: 0;
  transform: translate3d(0, 30px, 0);
  transition:
    opacity .9s var(--ease-out),
    transform .9s var(--ease-out);
  will-change: opacity, transform;
}

.js [data-reveal].is-visible {
  opacity: 1;
  transform: translate3d(0, 0, 0);
  will-change: auto;
}

/* Escalonado — el JS sólo marca el elemento, el retardo vive en CSS */
[data-reveal-delay="1"] { transition-delay: .10s; }
[data-reveal-delay="2"] { transition-delay: .20s; }
[data-reveal-delay="3"] { transition-delay: .30s; }
[data-reveal-delay="4"] { transition-delay: .40s; }

/* --------------------------------------------------------------------------
   Imágenes: telón que baja + leve desescalado.

   El telón es un pseudo-elemento, no un `clip-path` sobre el propio bloque:
   un elemento recortado a cero mide 0 de área y IntersectionObserver nunca
   lo daría por visible, así que jamás llegaría a revelarse.
   -------------------------------------------------------------------------- */
[data-reveal-media] {
  position: relative;
  overflow: hidden;
}

.js [data-reveal-media]::after {
  content: "";
  position: absolute;
  inset: -1px;
  z-index: 9;
  background: var(--c-bg);
  transform: scaleY(1);
  transform-origin: center bottom;
  transition: transform 1.15s var(--ease-out);
  pointer-events: none;
}
.js [data-reveal-media].is-visible::after { transform: scaleY(0); }

.js [data-reveal-media] img {
  transform: scale(1.12);
  transition: transform 1.7s var(--ease-out);
}
.js [data-reveal-media].is-visible img { transform: scale(1); }

/* Los filetes se dibujan en lugar de aparecer */
.js .rule[data-reveal] {
  transform: scaleX(0);
  transform-origin: left center;
  transition: transform 1.1s var(--ease-out), opacity .6s var(--ease-out);
}
.js .rule[data-reveal].is-visible { transform: scaleX(1); }
.js .section--center .rule[data-reveal] { transform-origin: center; }

/* ==========================================================================
   2 · Entrada del hero
   ========================================================================== */
@keyframes praga-rise {
  from { opacity: 0; transform: translate3d(0, 34px, 0); }
  to   { opacity: 1; transform: translate3d(0, 0, 0); }
}

@keyframes praga-wordmark {
  from { opacity: 0; transform: scale(.94) translate3d(0, 26px, 0); filter: blur(6px); }
  to   { opacity: 1; transform: scale(1) translate3d(0, 0, 0);     filter: blur(0); }
}

@keyframes praga-zoom-out {
  from { transform: scale(1.16); }
  to   { transform: scale(1); }
}

.hero__media img {
  animation: praga-zoom-out 2.4s var(--ease-out) both;
}

.js .hero__logo,
.js .hero__rule,
.js .hero__tagline,
.js .hero__place,
.js .hero__scroll { opacity: 0; }

body.is-ready .hero__logo     { animation: praga-rise .95s var(--ease-out) .15s both; }
body.is-ready .hero__wordmark img { animation: praga-wordmark 1.35s var(--ease-out) .32s both; }
body.is-ready .hero__rule     { animation: praga-rise .95s var(--ease-out) .74s both; }
body.is-ready .hero__tagline  { animation: praga-rise .95s var(--ease-out) .86s both; }
body.is-ready .hero__place    { animation: praga-rise .95s var(--ease-out) .96s both; }
body.is-ready .hero__scroll   { animation: praga-rise .95s var(--ease-out) 1.1s both; }

/* Punto que recorre la línea del indicador de scroll */
@keyframes praga-scroll-dot {
  0%   { transform: translateY(-100%); }
  100% { transform: translateY(100%); }
}
.hero__scroll-line::after {
  content: "";
  position: absolute;
  inset: 0;
  background: linear-gradient(to bottom, transparent, var(--c-gold-light), transparent);
  animation: praga-scroll-dot 2.1s ease-in-out infinite;
}

/* ==========================================================================
   3 · Hover — navegación
   ========================================================================== */
.nav__links > a:not(.nav__cta) > span {
  position: relative;
  display: inline-block;
}
.nav__links > a:not(.nav__cta) > span::after {
  content: "";
  position: absolute;
  left: 0;
  bottom: -5px;
  width: 100%;
  height: 1px;
  background: var(--c-gold);
  transform: scaleX(0);
  transform-origin: right center;
  transition: transform .45s var(--ease-out);
}
.nav__links > a:not(.nav__cta):hover { color: var(--c-cream); }
.nav__links > a:not(.nav__cta):hover > span::after,
.nav__links > a.is-active > span::after {
  transform: scaleX(1);
  transform-origin: left center;
}
.nav__links > a.is-active { color: var(--c-cream); }

.nav__brand img { transition: transform .5s var(--ease-out); }
.nav__brand:hover img { transform: rotate(-4deg) scale(1.08); }

/* Menú hamburguesa → aspa */
.nav__toggle.is-open span:nth-child(1) { transform: translateY(7px) rotate(45deg); }
.nav__toggle.is-open span:nth-child(2) { opacity: 0; transform: scaleX(0); }
.nav__toggle.is-open span:nth-child(3) { transform: translateY(-7px) rotate(-45deg); }

/* ==========================================================================
   4 · Hover — botones
   ========================================================================== */
.btn::before {
  content: "";
  position: absolute;
  inset: 0;
  z-index: 0;
  background: linear-gradient(120deg, var(--c-gold-light), var(--c-gold) 55%, var(--c-gold-dark));
  transform: translateY(101%);
  transition: transform .55s var(--ease-out);
}
.btn:hover::before,
.btn:focus-visible::before { transform: translateY(0); }

.btn { transition: color .4s var(--ease), border-color .4s var(--ease); }
.btn--gold:hover,
.btn--gold:focus-visible { color: var(--c-void); }

.btn--ghost:hover,
.btn--ghost:focus-visible { color: var(--c-void); border-color: var(--c-gold); }

.btn svg { transition: transform .45s var(--ease-out); }
.btn:hover svg { transform: translateX(5px); }

/* ==========================================================================
   5 · Hover — tarjetas y medios
   ========================================================================== */

/* Ventajas: el aro dorado se cierra sobre el icono */
.ventaja__ring {
  transition: border-color .5s var(--ease), transform .6s var(--ease-out);
}
.ventaja__ring::before {
  transition: opacity .5s var(--ease), transform .7s var(--ease-out);
}
.ventaja__ring img {
  transition: transform .6s var(--ease-out), filter .5s var(--ease);
}
.ventaja:hover .ventaja__ring { transform: translateY(-6px); border-color: transparent; }
.ventaja:hover .ventaja__ring::before { opacity: 1; transform: scale(1.06); }
.ventaja:hover .ventaja__ring img { transform: scale(1.1); filter: brightness(1.25); }
.ventaja h3 { transition: color .4s var(--ease); }
.ventaja:hover h3 { color: var(--c-sage); }

/* Fotografías: acercamiento contenido + borde que se enciende */
.shot__frame { transition: border-color .5s var(--ease); }
.shot__frame img { transition: transform 1.1s var(--ease-out); }
.shot:hover .shot__frame { border-color: var(--line-strong); }
.shot:hover .shot__frame img { transform: scale(1.055); }

/* Cifras: el filete superior se vuelve dorado */
.stat { transition: border-color .5s var(--ease); }
.stat__num { transition: color .5s var(--ease), border-color .5s var(--ease); }
.stat:hover { border-color: var(--line-strong); }
.stat:hover .stat__num { color: var(--c-gold-light); }

/* Índice de tipologías */
.index a { transition: padding-left .45s var(--ease-out); }
.index__letter { transition: color .4s var(--ease); }
.index__area { transition: color .4s var(--ease); }
.index li { transition: border-color .4s var(--ease); }
.index a:hover { padding-left: .7rem; }
.index a:hover .index__letter { color: var(--c-gold-light); }
.index a:hover .index__area { color: var(--c-cream); }
.index li:hover { border-color: var(--c-gold); }

/* Planos: acercamiento + etiqueta "Ver plano" que sube */
.plano__frame { transition: border-color .5s var(--ease), background-color .5s var(--ease); }
.plano__frame img { transition: transform .8s var(--ease-out); }
.plano__zoom { transition: transform .5s var(--ease-out), opacity .4s var(--ease); }
.plano__frame:hover { border-color: var(--c-gold); }
.plano__frame:hover img { transform: scale(1.07); }
.plano__frame:hover .plano__zoom { opacity: 1; transform: translateY(0); }
.plano__head .drop { transition: color .4s var(--ease), border-color .4s var(--ease); }
.plano:hover .plano__head .drop { color: var(--c-gold-light); }

/* Mapa enlazado */
.mapa__hint { transition: transform .5s var(--ease-out), opacity .4s var(--ease); }
.mapa__link:hover .shot__frame { border-color: var(--c-gold); }
.mapa__link:hover .shot__frame img { transform: scale(1.03); }
.mapa__link:hover .mapa__hint,
.mapa__link:focus-visible .mapa__hint { opacity: 1; transform: translateY(0); }

/* Especificaciones */
.specs li { transition: border-color .4s var(--ease), color .4s var(--ease); }
.specs li:hover { border-color: var(--c-gold); color: var(--c-cream); }

/* Lugares cercanos */
.cercanos li { transition: color .4s var(--ease), border-color .4s var(--ease), transform .4s var(--ease-out); }
.cercanos li:hover { color: var(--c-cream); border-color: var(--line-strong); transform: translateX(5px); }

/* Teléfono: subrayado que crece */
.cta__phone { transition: background-size .6s var(--ease-out), color .4s var(--ease); }
.cta__phone:hover { background-size: 100% 1px; color: var(--c-gold-light); }

/* QR */
.cta__qr-frame { transition: transform .5s var(--ease-out), box-shadow .5s var(--ease); }
.cta__qr:hover .cta__qr-frame {
  transform: scale(1.05) rotate(-2deg);
  box-shadow: 0 14px 40px rgba(0, 0, 0, .5);
}

/* Indicador de scroll */
.hero__scroll:hover .hero__scroll-text { color: var(--c-gold-light); }

/* WhatsApp flotante — anillo pulsante */
@keyframes praga-pulse {
  0%   { transform: scale(1);   opacity: .55; }
  70%  { transform: scale(1.7); opacity: 0; }
  100% { transform: scale(1.7); opacity: 0; }
}
.wa::before {
  content: "";
  position: absolute;
  inset: 0;
  border-radius: 50%;
  background: var(--c-gold);
  animation: praga-pulse 2.6s var(--ease-out) infinite;
  z-index: -1;
}
.wa {
  isolation: isolate;
  transition: transform .45s var(--ease-out), box-shadow .45s var(--ease);
}
.wa:hover {
  transform: scale(1.1) translateY(-3px);
  box-shadow: 0 16px 40px rgba(192, 160, 88, .45);
}

/* --------------------------------------------------------------------------
   Aviso emergente
   -------------------------------------------------------------------------- */
.aviso {
  opacity: 0;
  transform: translate3d(0, -18px, 0) scale(.97);
  transition: opacity .5s var(--ease-out), transform .55s var(--ease-out);
}
.aviso.is-open {
  opacity: 1;
  transform: translate3d(0, 0, 0) scale(1);
}

/* La barra la dibuja el JS fotograma a fotograma: así puede congelarse
   al pasar el cursor, cosa que una transición CSS no permite a medias. */

.aviso__close { transition: color .3s var(--ease), background-color .3s var(--ease); }
.aviso__close:hover { color: var(--c-void); background: var(--c-gold); }

/* --------------------------------------------------------------------------
   Recorrido 360°
   -------------------------------------------------------------------------- */

/* Punto del distintivo, latiendo */
@keyframes praga-dot {
  0%   { box-shadow: 0 0 0 0    rgba(228, 211, 160, .65); }
  70%  { box-shadow: 0 0 0 11px rgba(228, 211, 160, 0); }
  100% { box-shadow: 0 0 0 0    rgba(228, 211, 160, 0); }
}
.tour__dot { animation: praga-dot 2.4s ease-out infinite; }

/* Pestañas del selector de recorrido */
.tour__tab {
  transition: color .35s var(--ease), background-color .35s var(--ease),
              box-shadow .35s var(--ease);
}
.tour__tab:not(.is-active):hover { color: var(--c-cream); }
.tour__tab svg { transition: transform .5s var(--ease-out); }
.tour__tab:hover svg { transform: scale(1.12); }

/* El marco se enciende al acercarse el cursor */
.tour__frame { transition: box-shadow .6s var(--ease), border-color .5s var(--ease); }
.tour__stage:hover .tour__frame {
  box-shadow:
    0 0 0 1px rgba(192, 160, 88, .3),
    0 34px 100px rgba(0, 0, 0, .65),
    0 0 110px rgba(192, 160, 88, .26);
}

/* Botón flotante: anillo pulsante para que se note sin estorbar */
.fab-tour {
  position: relative;
  isolation: isolate;
  transition: transform .45s var(--ease-out), box-shadow .45s var(--ease);
}
/* Resplandor que respira. El anillo expansivo del botón de WhatsApp no sirve
   aquí: al escalarlo, una píldora ancha genera un halo desbordado. */
@keyframes praga-glow {
  0%, 100% { opacity: .22; }
  50%      { opacity: .58; }
}
.fab-tour::after {
  content: "";
  position: absolute;
  inset: -5px;
  z-index: -1;
  border-radius: 999px;
  background: var(--c-gold);
  filter: blur(11px);
  animation: praga-glow 3.2s ease-in-out infinite;
}
.fab-tour svg { transition: transform .7s var(--ease-out); }
.fab-tour:hover {
  transform: translateY(-3px);
  box-shadow: 0 18px 44px rgba(192, 160, 88, .5);
}
.fab-tour:hover svg { transform: rotate(180deg); }

/* Se aparta mientras la sección del visor está en pantalla */
.fab-tour {
  transition: transform .45s var(--ease-out), box-shadow .45s var(--ease),
              opacity .4s var(--ease), visibility .4s;
}
.fab-tour.is-tucked {
  opacity: 0;
  visibility: hidden;
  transform: translateY(14px) scale(.9);
  pointer-events: none;
}
.fab-tour.is-tucked::after { animation: none; }

/* Enlace destacado del menú */
.nav__links > a.nav__hot { color: var(--c-gold-light); }
.nav__links > a.nav__hot > span::after { background: var(--c-gold-light); }
.nav__links > a.nav__hot:hover { color: #F3E7BE; }

/* Lightbox */
@keyframes praga-fade { from { opacity: 0; } to { opacity: 1; } }
@keyframes praga-pop  { from { opacity: 0; transform: scale(.94); } to { opacity: 1; transform: scale(1); } }
.lightbox { animation: praga-fade .35s var(--ease) both; }
.lightbox__figure { animation: praga-pop .5s var(--ease-out) both; }

/* ==========================================================================
   6 · Accesibilidad — respeta la preferencia de movimiento reducido
   ========================================================================== */
@media (prefers-reduced-motion: reduce) {
  html { scroll-behavior: auto; }

  *,
  *::before,
  *::after {
    animation-duration: .01ms !important;
    animation-iteration-count: 1 !important;
    transition-duration: .01ms !important;
    scroll-behavior: auto !important;
  }

  .js [data-reveal],
  .js [data-reveal].is-visible {
    opacity: 1;
    transform: none;
  }

  .js [data-reveal-media]::after { display: none; }
  .js [data-reveal-media] img { transform: none; }

  .js .rule[data-reveal] { transform: scaleX(1); }

  .js .hero__logo, .js .hero__rule, .js .hero__tagline,
  .js .hero__place, .js .hero__scroll { opacity: 1; }

  .hero__scroll-line::after,
  .wa::before,
  .fab-tour::after,
  .tour__dot { animation: none; }

  .hero__media { transform: none !important; }
}
