/* ═══════════════════════════════════════════════════════════════════════
   vzn-motion.css — capa de movimiento del home (2026-10-09)

   Va junto con js/vzn-motion.js. Solo la carga index.html.
   Para apagar todo: quitar el <link> y el <script> del home. Nada más
   depende de estos dos archivos.

   Los selectores llevan `html` adelante a propósito: el home tiene bloques
   <style> dentro de cada sección, con la misma especificidad que
   vzn-base.css y más abajo en el documento, así que una regla
   `#vizion-app .x` escrita acá perdería contra ellos. Con `html` gana
   siempre, sin !important (salvo contra los !important del sistema de
   botones, donde no hay otra).

   Lo que el JS anima NO se esconde desde acá: el estado inicial lo pone
   GSAP. Si el script no carga, o el visitante pide menos movimiento, la
   página queda exactamente como estaba.
   ═══════════════════════════════════════════════════════════════════════ */

/* .vzn-reveal traía will-change fijo en ~50 bloques que nadie animaba:
   memoria de GPU reservada sin motivo. GSAP promueve la capa cuando anima. */
html #vizion-app .vzn-reveal { will-change: auto; }

/* ─── Barra de avance de lectura ─────────────────────────────────────── */
html #vizion-app #vzn-readbar {
  position: fixed; top: 0; left: 0; right: 0; height: 2px; z-index: 300;
  background: linear-gradient(90deg, var(--gold), var(--gold-lt));
  transform: scaleX(0); transform-origin: 0 50%;
  pointer-events: none;
}

/* ─── Numeración de secciones, delante del eyebrow ───────────────────── */
html #vizion-app .vzn-idx {
  display: inline-flex; align-items: center; gap: 0.75em;
  margin-right: 0.9em; vertical-align: middle;
}
html #vizion-app .vzn-idx i {
  font-family: var(--serif); font-style: italic; font-weight: 400;
  font-size: 1.75em; line-height: 1; letter-spacing: 0;
  text-transform: none; color: var(--gold);
}
html #vizion-app .vzn-idx b {
  display: inline-block; width: 2.2rem; height: 1px;
  background: var(--dim-line); transform-origin: 0 50%;
}
/* en teléfono el filete largo partía en dos renglones los eyebrows largos
   ("Virtual Staging · Vizion Stage") */
@media (max-width: 600px) {
  html #vizion-app .vzn-idx { gap: 0.5em; margin-right: 0.6em; }
  html #vizion-app .vzn-idx b { width: 0.9rem; }
}

/* ─── Banda de cifras: números grandes, separados por un filete ─────── */
html #vizion-app .vzn-proof { padding: 4.6rem 4rem; }
html #vizion-app .vzn-proof-stats { gap: 0; }
html #vizion-app .vzn-proof-stat {
  position: relative; align-items: center; text-align: center;
  gap: 0.75rem; padding: 0 clamp(1.4rem, 4.2vw, 4.6rem);
}
html #vizion-app .vzn-proof-stat + .vzn-proof-stat::before {
  content: ''; position: absolute; left: 0; top: 6%; bottom: 6%; width: 1px;
  background: linear-gradient(180deg, transparent, var(--dim-line) 30%, var(--dim-line) 70%, transparent);
}
html #vizion-app .vzn-proof-num {
  font-size: clamp(2.5rem, 5.4vw, 4.6rem); letter-spacing: -0.02em;
  font-variant-numeric: tabular-nums lining-nums;
}
html #vizion-app .vzn-proof-cap { font-size: 0.6rem; }
@media (max-width: 968px) {
  html #vizion-app .vzn-proof { padding: 3rem 1.2rem; }
  html #vizion-app .vzn-proof-stats { justify-content: center; }
  html #vizion-app .vzn-proof-stat { flex: 1 1 0; padding: 0 0.6rem; }
  html #vizion-app .vzn-proof-cap { letter-spacing: 0.16em; }
}

/* ─── Palabras: títulos que suben por palabra y frases que se encienden ─ */
html #vizion-app .vzn-w {
  display: inline-block; overflow: hidden; vertical-align: top;
  /* aire para que la cursiva y las descendentes no queden recortadas */
  padding: 0.06em 0.09em 0.16em; margin: -0.06em -0.09em -0.16em;
}
html #vizion-app .vzn-w > .vzn-wi { display: inline-block; }

/* ─── FAQ: la respuesta se despliega en vez de aparecer de golpe ─────── */
@supports (interpolate-size: allow-keywords) {
  @media (prefers-reduced-motion: no-preference) {
    html #vizion-app .vzn-faq-item { interpolate-size: allow-keywords; }
    html #vizion-app .vzn-faq-item::details-content {
      block-size: 0; opacity: 0; overflow: clip;
      transition: block-size 0.5s cubic-bezier(.22,.8,.2,1), opacity 0.4s ease,
                  content-visibility 0.5s allow-discrete;
    }
    html #vizion-app .vzn-faq-item[open]::details-content { block-size: auto; opacity: 1; }
  }
}

/* ─── Solo con mouse: botones magnéticos y luz sobre las tarjetas ────── */
@media (hover: hover) and (pointer: fine) {
  /* El desplazamiento llega por variables: el sistema de botones fija el
     transform del hover con !important y eso le gana a cualquier estilo
     inline, así que GSAP no puede moverlos directamente. */
  html #vizion-app .vzn-mag.is-mag,
  html #vizion-app .vzn-mag.is-mag:hover {
    transform: translate3d(var(--mx, 0px), var(--my, 0px), 0) !important;
    transition: background 0.3s, transform 0.14s linear !important;
  }
  /* La vuelta con rebote dura solo medio segundo después de soltarlo. En
     reposo el botón conserva su transición de siempre: una transición larga
     permanente pelearía con la entrada GSAP de los CTA del hero. */
  html #vizion-app .vzn-mag.is-back {
    transition: background 0.3s, transform 0.5s cubic-bezier(.2,.9,.25,1.25) !important;
  }

  html #vizion-app .vzn-spot,
  html #vizion-app .vzn-spot-ring {
    position: absolute; inset: 0; border-radius: inherit;
    pointer-events: none; opacity: 0; transition: opacity 0.4s ease;
  }
  html #vizion-app .vzn-spot {
    z-index: 2;
    background: radial-gradient(440px circle at var(--sx, 50%) var(--sy, 50%),
      rgba(230,173,142,0.13), rgba(230,173,142,0.045) 38%, transparent 64%);
  }
  /* mismo truco de máscara que el borde de vidrio de las tarjetas: solo
     queda pintado el anillo, y el degradado lo enciende cerca del cursor */
  html #vizion-app .vzn-spot-ring {
    z-index: 4; padding: 1.2px;
    background: radial-gradient(280px circle at var(--sx, 50%) var(--sy, 50%),
      rgba(230,173,142,0.95), rgba(230,173,142,0) 70%);
    -webkit-mask: linear-gradient(#fff 0 0) content-box, linear-gradient(#fff 0 0);
    -webkit-mask-composite: xor; mask-composite: exclude;
  }
  html #vizion-app .vzn-spot-host:hover > .vzn-spot,
  html #vizion-app .vzn-spot-host:hover > .vzn-spot-ring { opacity: 1; }
}
