/* ═══════════════════════════════════════════════════════════════
   Galería «Una suite completa» (22/10/2026)
   Las piezas gráficas de la marca (img/*.webp) sobre un fondo en movimiento:
   luces que viajan, grilla en perspectiva que avanza y partículas.
   Las imágenes quedan quietas y nítidas; en la segunda gira el mundo. Se agrandan al tocarlas (galeria.js).
   ═══════════════════════════════════════════════════════════════ */
#suite{position:relative;overflow:hidden;padding:96px 5% 110px;isolation:isolate}

/* ── fondo en movimiento ─────────────────────────────── */
.gl-bg{position:absolute;inset:0;z-index:-1;pointer-events:none;overflow:hidden}
.gl-orb{position:absolute;border-radius:50%;filter:blur(70px);opacity:.55;mix-blend-mode:screen;will-change:transform}
.gl-orb.o1{width:520px;height:520px;left:-120px;top:-80px;background:radial-gradient(circle,#ef4444 0%,transparent 65%);animation:glA 18s ease-in-out infinite alternate}
.gl-orb.o2{width:600px;height:600px;right:-160px;top:10%;background:radial-gradient(circle,#d946ef 0%,transparent 65%);animation:glB 22s ease-in-out infinite alternate}
.gl-orb.o3{width:460px;height:460px;left:35%;bottom:-180px;background:radial-gradient(circle,#22d3ee 0%,transparent 65%);opacity:.35;animation:glC 26s ease-in-out infinite alternate}
@keyframes glA{to{transform:translate(260px,180px) scale(1.15)}}
@keyframes glB{to{transform:translate(-300px,140px) scale(.9)}}
@keyframes glC{to{transform:translate(-220px,-160px) scale(1.2)}}
html[data-theme="light"] .gl-orb{mix-blend-mode:multiply;opacity:.22}

/* grilla en perspectiva que avanza */
.gl-grid{position:absolute;left:-50%;right:-50%;bottom:-10%;height:70%;
  background:
    linear-gradient(rgba(239,68,68,.22) 1px,transparent 1px) 0 0/60px 60px,
    linear-gradient(90deg,rgba(217,70,239,.18) 1px,transparent 1px) 0 0/60px 60px;
  transform:perspective(520px) rotateX(62deg);transform-origin:50% 100%;
  -webkit-mask-image:linear-gradient(to top,#000 10%,transparent 85%);mask-image:linear-gradient(to top,#000 10%,transparent 85%);
  animation:glGrid 3.5s linear infinite}
@keyframes glGrid{to{background-position:0 60px,0 0}}
html[data-theme="light"] .gl-grid{opacity:.45}

/* haces de luz diagonales que cruzan */
.gl-beam{position:absolute;width:2px;height:140%;top:-20%;background:linear-gradient(to bottom,transparent,rgba(251,113,133,.9),transparent);transform:rotate(28deg);opacity:0;animation:glBeam 7s ease-in-out infinite}
.gl-beam.b2{background:linear-gradient(to bottom,transparent,rgba(232,121,249,.9),transparent);animation-delay:2.4s}
.gl-beam.b3{background:linear-gradient(to bottom,transparent,rgba(34,211,238,.8),transparent);animation-delay:4.8s}
@keyframes glBeam{0%{left:-10%;opacity:0}15%{opacity:.4}60%{opacity:.25}100%{left:110%;opacity:0}}

/* partículas (galeria.js las crea) */
.gl-dot{position:absolute;bottom:-10px;width:3px;height:3px;border-radius:50%;background:#fb7185;box-shadow:0 0 8px currentColor;opacity:0;animation:glDot linear infinite}
@keyframes glDot{0%{transform:translateY(0);opacity:0}10%{opacity:.9}90%{opacity:.6}100%{transform:translateY(-110vh);opacity:0}}

/* ── piezas ──────────────────────────────────────────── */
/* 22/10/2026: el contenedor queda QUIETO (sin flotar, sin inclinarse, sin borde que gira ni brillo que barre):
   cualquier transformación hace que el navegador redibuje la imagen y se ve borrosa. Lo que se mueve es el
   mundo de la segunda pieza (galeria.js dibuja una red que gira encima, recortada a su forma). */
/* historia en dos capítulos: imagen y texto alternados, unidos por una línea de luz al centro */
.gl-story{position:relative;max-width:1180px;margin:0 auto;display:flex;flex-direction:column;gap:96px}
.gl-story::before{content:'';position:absolute;left:50%;top:4%;bottom:4%;width:2px;transform:translateX(-1px);
  background:linear-gradient(to bottom,transparent,rgba(251,113,133,.55) 15%,rgba(232,121,249,.55) 50%,rgba(34,211,238,.5) 85%,transparent)}
.gl-chapter{position:relative;display:grid;grid-template-columns:1fr 1fr;gap:88px;align-items:center}
.gl-chapter.rev .gl-item{order:2}
.gl-chapter::after{content:'';position:absolute;left:50%;top:50%;width:14px;height:14px;margin:-7px 0 0 -7px;border-radius:50%;
  background:var(--bg);border:2px solid var(--mag2);box-shadow:0 0 0 5px rgba(217,70,239,.15),0 0 18px rgba(232,121,249,.6)}
.gl-item{position:relative;margin:0}
.gl-text{position:relative;text-align:left;max-width:470px}
.gl-chapter:not(.rev) .gl-text{justify-self:start}
.gl-chapter.rev .gl-text{justify-self:end}
.gl-num{display:block;margin:0 0 6px -4px;font:900 92px/0.9 'Inter',sans-serif;letter-spacing:-5px;color:transparent;
  -webkit-text-stroke:1.5px rgba(232,121,249,.45);pointer-events:none;user-select:none}
.gl-kicker{display:inline-block;font:700 11px 'JetBrains Mono',monospace;letter-spacing:2.5px;text-transform:uppercase;color:var(--r2);margin-bottom:12px}
.gl-text h3{font-size:clamp(26px,2.8vw,36px);line-height:1.15;font-weight:800;letter-spacing:-.8px;color:var(--text1);margin-bottom:22px}
.gl-points{list-style:none;display:flex;flex-direction:column;gap:14px;margin-bottom:30px}
.gl-points li{position:relative;padding-left:30px;font-size:15.5px;line-height:1.55;color:var(--text2)}
.gl-points li::before{content:'';position:absolute;left:0;top:5px;width:18px;height:18px;border-radius:6px;
  background:linear-gradient(135deg,var(--r),var(--mag));box-shadow:0 4px 12px rgba(239,68,68,.35)}
.gl-points li::after{content:'';position:absolute;left:6px;top:9px;width:5px;height:8px;border:solid #fff;border-width:0 2px 2px 0;transform:rotate(45deg)}
.gl-points b{color:var(--text1)}
.gl-cta{display:flex;align-items:center;gap:16px;flex-wrap:wrap}
.gl-card{position:relative;display:block;width:100%;padding:0;border:0;background:none;cursor:zoom-in;border-radius:22px;
  box-shadow:0 0 0 1.5px rgba(232,121,249,.55),0 0 0 1px rgba(255,255,255,.06) inset;transition:box-shadow .3s}
.gl-card:hover{box-shadow:0 0 0 2px rgba(251,113,133,.8)}
.gl-card::after{content:'';position:absolute;inset:8% 6% -6%;border-radius:30px;z-index:-1;
  background:linear-gradient(135deg,rgba(239,68,68,.5),rgba(217,70,239,.5));filter:blur(46px);opacity:.7}
.gl-card img{display:block;width:100%;height:auto;aspect-ratio:1/1;border-radius:22px;background:#0a0708}
.gl-cap{margin-top:16px;text-align:center;font:600 12px 'JetBrains Mono',monospace;letter-spacing:2px;text-transform:uppercase;color:var(--text3)}

/* mundo que gira: se ubica sobre el globo de la imagen con --cx/--cy/--r (fracción del ancho de la pieza) */
.gl-globe{position:absolute;left:calc((var(--cx) - var(--r)) * 100%);top:calc((var(--cy) - var(--r)) * 100%);
  width:calc(var(--r) * 200%);aspect-ratio:1/1;border-radius:50%;pointer-events:none;mix-blend-mode:screen}
.gl-globe canvas{display:block;width:100%;height:100%;border-radius:50%}

/* entrada al aparecer en pantalla: sólo opacidad (sin escalar, así la imagen no pierde nitidez) */
.gl-item{opacity:0;transition:opacity .9s ease}
.gl-item:nth-child(2){transition-delay:.18s}
#suite.on .gl-item{opacity:1}

/* ── vista grande ────────────────────────────────────── */
.gl-zoom{position:fixed;inset:0;z-index:300;display:none;align-items:center;justify-content:center;padding:24px;background:rgba(5,3,4,.88);backdrop-filter:blur(10px);cursor:zoom-out}
.gl-zoom.open{display:flex;animation:glFade .25s ease}
.gl-zoom img{max-width:min(92vw,1100px);max-height:90vh;width:auto;height:auto;border-radius:18px;box-shadow:0 30px 90px rgba(0,0,0,.7);animation:glPop .35s cubic-bezier(.2,.8,.2,1)}
.gl-zoom button{position:absolute;top:18px;right:18px;width:42px;height:42px;border-radius:50%;border:1px solid rgba(255,255,255,.25);background:rgba(255,255,255,.08);color:#fff;font-size:18px;cursor:pointer}
@keyframes glFade{from{opacity:0}}
@keyframes glPop{from{transform:scale(.92);opacity:0}}

@media (max-width:860px){
  #suite{padding:72px 16px 80px}
  .gl-story{gap:64px;max-width:560px}
  .gl-story::before,.gl-chapter::after{display:none}
  .gl-chapter{grid-template-columns:1fr;gap:28px}
  .gl-chapter.rev .gl-item{order:0}
  .gl-chapter .gl-text{justify-self:stretch;max-width:none}
  .gl-num{font-size:72px}
  .gl-cta{flex-direction:column;align-items:stretch;text-align:center}
  .gl-orb{filter:blur(50px)}
  .gl-orb.o1{width:340px;height:340px}.gl-orb.o2{width:380px;height:380px}.gl-orb.o3{width:300px;height:300px}
}
@media (prefers-reduced-motion:reduce){
  .gl-orb,.gl-grid,.gl-beam,.gl-dot{animation:none !important}
  .gl-beam,.gl-dot{display:none}
  .gl-item{opacity:1;transition:none}
}
