/* ═══════════════════════════════════════════════════════════
   CPT · Caracas Performance Therapy
   Paleta y tipografía según el Manual de Marca:
   #ff1538 · #ffffff · #262626
   ═══════════════════════════════════════════════════════════ */

:root{
  --red:#ff1538;
  --red-d:#c9102c;
  --bg:#0b0b0d;
  --bg2:#111114;
  --bg3:#17171b;
  --line:#262626;
  --line-2:#343438;
  --w:#ffffff;
  --mut:#93939c;

  --font-d:'Archivo',system-ui,sans-serif;   /* display — sustituto de Grandis Condensed Black */
  --font-t:'Chakra Petch',system-ui,sans-serif; /* técnica — sustituto de Enixe */

  --pad:clamp(20px,5vw,72px);
  --maxw:1360px;
  --ease:cubic-bezier(.16,1,.3,1);
  --chamfer:14px;                             /* corte a 45° de la marca */
}

*,*::before,*::after{box-sizing:border-box;margin:0;padding:0}
html{scroll-behavior:smooth;-webkit-text-size-adjust:100%;overflow-x:clip}
body{
  background:var(--bg);color:var(--w);
  font-family:var(--font-d);font-variation-settings:'wdth' 100,'wght' 400;
  font-size:clamp(15px,1.05vw,17px);line-height:1.65;
  overflow-x:hidden;
  -webkit-font-smoothing:antialiased;
}
body.is-loading{overflow:hidden;height:100vh}
/* el scroll de la página vive en <html>: bloquear solo el body no basta */
html:has(body.menu-open),
html:has(body.gm-open),
html:has(body.is-loading){overflow:hidden}
img,svg{display:block;max-width:100%}
img{height:auto}
a{color:inherit;text-decoration:none}
ul{list-style:none}
::selection{background:var(--red);color:var(--w)}

.wrap{max-width:var(--maxw);margin-inline:auto;padding-inline:var(--pad);width:100%}
section[id]{scroll-margin-top:74px}

/* ───────── Tipografía ───────── */
.eyebrow{
  font-family:var(--font-t);font-weight:600;
  font-size:.72rem;letter-spacing:.22em;text-transform:uppercase;
  color:var(--red);display:flex;align-items:center;gap:.7em;margin-bottom:1.4rem;
}
.eyebrow::before{content:'';width:26px;height:2px;background:var(--red);flex:none}

.h2{
  font-variation-settings:'wdth' 79,'wght' 900;
  font-size:clamp(2.1rem,5.4vw,4.2rem);line-height:.98;
  letter-spacing:-.015em;text-transform:uppercase;text-wrap:balance;
}
.h2--wide{max-width:19ch}
.h3{
  font-variation-settings:'wdth' 84,'wght' 800;
  font-size:clamp(1.35rem,2.4vw,1.9rem);line-height:1.1;
  text-transform:uppercase;letter-spacing:-.01em;
}
.lead{color:var(--mut);font-size:clamp(1rem,1.25vw,1.12rem);margin-top:1.5rem;max-width:56ch}
.lead--wide{max-width:64ch}
.lead b{color:var(--w);font-weight:600}
.hint{
  font-family:var(--font-t);font-size:.78rem;letter-spacing:.12em;text-transform:uppercase;
  color:var(--mut);margin-top:1.6rem;display:flex;align-items:center;gap:.7em;
}
.hint span{
  width:16px;height:16px;border:1.5px solid var(--red);border-radius:50%;flex:none;
  /* Marcador quieto. Latía en bucle, y la página ya tiene sus momentos de
     movimiento: el barrido del loader y la sonda. Uno más, permanente y sin
     nada que anunciar, solo quitaba descanso a la lectura. */
  background:radial-gradient(circle at 50% 50%,var(--red) 0 2.5px,transparent 2.5px);
}

/* ═══════════ LOADER · barrido de ecógrafo ═══════════
   Mejora progresiva: la intro solo existe si el JS llega a arrancar. Sin la
   clase .js en <html> el loader no se pinta, así que una web con JS bloqueado
   —o con main.js caído— nunca se queda detrás de un rectángulo negro. */
#loader{
  position:fixed;inset:0;z-index:9999;background:var(--bg);
  display:none;place-items:center;
  clip-path:polygon(0 0,100% 0,100% 100%,0 100%);
  transition:clip-path 1.05s var(--ease);
}
:where(html.js) #loader{display:grid}
#loader.done{clip-path:polygon(0 0,100% 0,100% -55%,0 -5%)}
.ld__grid{
  position:absolute;inset:0;opacity:.5;
  background:
    linear-gradient(rgba(255,255,255,.028) 1px,transparent 1px) 0 0/100% 46px,
    linear-gradient(90deg,rgba(255,255,255,.028) 1px,transparent 1px) 0 0/46px 100%;
  mask-image:radial-gradient(ellipse 70% 60% at 50% 50%,#000,transparent 85%);
}
.ld__stage{position:relative;width:min(56vw,320px);aspect-ratio:1250/761}
.ld__logo{width:100%;height:100%;overflow:visible}
.ld__ghost{stroke:rgba(255,255,255,.09)}
.ld__ghost--fino{stroke-width:4}
/* La P y la T: primero se dibuja su contorno, al final se rellenan.
   pathLength=100 normaliza la longitud, así el CSS no depende de medirla. */
.ld__pt{
  fill:#fff;fill-opacity:0;
  stroke:#fff;stroke-width:5;stroke-linejoin:miter;
  stroke-dasharray:100;stroke-dashoffset:100;
}
#loader.go .ld__pt{
  transition:stroke-dashoffset .7s cubic-bezier(.5,0,.2,1) .75s,fill-opacity .35s ease 1.55s;
  stroke-dashoffset:0;fill-opacity:1;
}
#loader.go .ld__pt--t{transition-delay:1.05s,1.7s}
.ld__draw{
  stroke:var(--red);
  stroke-dasharray:var(--len,2600);stroke-dashoffset:var(--len,2600);
  filter:drop-shadow(0 0 14px rgba(255,21,56,.55));
}
#loader.go .ld__draw{transition:stroke-dashoffset 2.1s cubic-bezier(.5,0,.2,1);stroke-dashoffset:0}
.ld__beam{
  position:absolute;top:0;bottom:0;left:-8%;width:2px;opacity:0;
  background:linear-gradient(180deg,transparent,var(--red) 14%,#fff 50%,var(--red) 86%,transparent);
  box-shadow:0 0 30px 8px rgba(255,21,56,.35);
}
.ld__beam::before{           /* estela del barrido */
  content:'';position:absolute;top:0;bottom:0;right:0;width:34vw;
  background:linear-gradient(90deg,transparent,rgba(255,21,56,.13));
}
#loader.go .ld__beam{animation:beam 2.1s cubic-bezier(.5,0,.2,1) forwards}
@keyframes beam{
  0%{left:-8%;opacity:0}
  9%{opacity:1}
  90%{opacity:1}
  100%{left:108%;opacity:0}
}
.ld__hud{
  position:absolute;left:var(--pad);right:var(--pad);bottom:calc(var(--pad) + 26px);
  display:flex;justify-content:space-between;align-items:baseline;gap:1rem;
  font-family:var(--font-t);font-size:.74rem;letter-spacing:.2em;text-transform:uppercase;
  color:var(--mut);
}
.ld__pct{color:var(--w);font-weight:600;font-variant-numeric:tabular-nums}
.ld__pct i{font-style:normal}
.ld__bar{
  position:absolute;left:var(--pad);right:var(--pad);bottom:var(--pad);
  height:2px;background:rgba(255,255,255,.1);
}
.ld__bar i{display:block;height:100%;width:0;background:var(--red);box-shadow:0 0 12px var(--red)}

/* ═══════════ SONDA (cursor) ═══════════ */
#probe{
  position:fixed;left:0;top:0;z-index:9000;pointer-events:none;
  translate:-50% -50%;opacity:0;transition:opacity .3s;
  display:none;
}
.probe__ring{
  position:absolute;left:50%;top:50%;translate:-50% -50%;
  width:34px;height:34px;border:1.5px solid rgba(255,255,255,.55);border-radius:50%;
  transition:width .35s var(--ease),height .35s var(--ease),border-color .35s,opacity .3s;
}
.probe__dot{
  position:absolute;left:50%;top:50%;translate:-50% -50%;
  width:5px;height:5px;background:var(--red);border-radius:50%;
  transition:transform .3s var(--ease),opacity .3s;
}
body.probe-on #probe{opacity:1}
body.probe-scan .probe__ring{
  width:var(--pr,190px);height:var(--pr,190px);
  border-color:var(--red);box-shadow:0 0 0 1px rgba(255,21,56,.25),0 0 30px rgba(255,21,56,.2);
}
body.probe-scan .probe__dot{transform:translate(-50%,-50%) scale(.6);opacity:.7}
body.probe-link .probe__ring{width:60px;height:60px;border-color:var(--red)}

/* ═══════════ Menú móvil (hermano del header) ═══════════
   Vive FUERA del header a propósito: un backdrop-filter (u otro filtro)
   en un ancestro convierte a un hijo fixed en su prisionero. Como
   hermano, ningún navegador puede volver a colapsarlo. */
.menu-movil{
  position:fixed;inset:0;z-index:6900;      /* bajo el header: logo y X siguen a la vista */
  display:none;
  flex-direction:column;justify-content:center;align-items:center;gap:2.1rem;
  background:rgba(11,11,13,.98);
  opacity:0;pointer-events:none;visibility:hidden;
  transition:opacity .3s,visibility 0s .3s;
  touch-action:none;overscroll-behavior:contain;
}
body.menu-open .menu-movil{opacity:1;pointer-events:auto;visibility:visible;transition:opacity .3s}
.menu-movil a{
  font-family:var(--font-t);font-size:1.35rem;font-weight:600;
  letter-spacing:.12em;text-transform:uppercase;color:var(--w);
}
.menu-movil a.on{color:var(--red)}
.menu-movil__cta{
  margin-top:.6rem;padding:.9rem 1.9rem;background:var(--red);font-size:.9rem;
  clip-path:polygon(0 0,100% 0,100% calc(100% - 12px),calc(100% - 12px) 100%,0 100%);
}
@media (max-width:860px){ .menu-movil{display:flex} }

/* ═══════════ PROGRESO ═══════════ */
#progress{position:fixed;top:0;left:0;right:0;height:2px;z-index:8000;background:rgba(255,255,255,.07)}
#progress i{display:block;height:100%;width:0;background:var(--red);box-shadow:0 0 10px var(--red)}

/* ═══════════ NAV ═══════════ */
#nav{
  position:fixed;top:0;left:0;right:0;z-index:7000;
  display:flex;align-items:center;gap:2rem;
  padding:18px var(--pad);
  transition:background .4s,backdrop-filter .4s,border-color .4s,padding .4s;
  border-bottom:1px solid transparent;
}
#nav.stuck{
  background:rgba(11,11,13,.82);backdrop-filter:blur(16px);
  -webkit-backdrop-filter:blur(16px);
  border-bottom-color:var(--line);padding-block:12px;
}
.nav__logo{display:flex;align-items:center;gap:.75rem;flex:none}
.nav__logo svg{width:auto;height:34px;transition:height .4s}
#nav.stuck .nav__logo svg{height:28px}
/* Eslogan del lockup (Opción 3 del manual): KINETICS / MOVEMENT / HEALTH */
.nav__wm{
  font-variation-settings:'wdth' 78,'wght' 900;
  font-size:.62rem;line-height:1.22;
  letter-spacing:.05em;text-transform:uppercase;color:var(--red);
  border-left:2px solid var(--red);padding-left:.65rem;
}
.nav__links{display:flex;gap:2rem;margin-left:auto}
.nav__links a{
  font-family:var(--font-t);font-size:.8rem;font-weight:500;
  letter-spacing:.1em;text-transform:uppercase;color:var(--mut);
  position:relative;padding-block:4px;transition:color .3s;
}
.nav__links a::after{
  content:'';position:absolute;left:0;bottom:0;height:1.5px;width:100%;background:var(--red);
  transform:scaleX(0);transform-origin:left;transition:transform .4s var(--ease);
}
.nav__links a:hover,.nav__links a.active{color:var(--w)}
.nav__links a:hover::after,.nav__links a.active::after{transform:none}

#burger{
  display:none;background:none;border:0;cursor:pointer;padding:8px;margin-left:auto;
  flex-direction:column;gap:5px;
}
#burger i{display:block;width:24px;height:2px;background:var(--w);transition:.35s var(--ease)}
#burger[aria-expanded="true"] i:nth-child(1){transform:translateY(7px) rotate(45deg)}
#burger[aria-expanded="true"] i:nth-child(2){opacity:0}
#burger[aria-expanded="true"] i:nth-child(3){transform:translateY(-7px) rotate(-45deg)}

/* ───────── Botones (chaflán a 45°, como la marca) ───────── */
.btn{
  --bg-btn:var(--red);
  position:relative;display:inline-flex;align-items:center;justify-content:center;
  padding:1.05rem 2rem;flex:none;
  font-family:var(--font-t);font-weight:600;font-size:.8rem;
  letter-spacing:.14em;text-transform:uppercase;color:var(--w);
  background:var(--bg-btn);overflow:hidden;isolation:isolate;
  clip-path:polygon(0 0,100% 0,100% calc(100% - var(--chamfer)),calc(100% - var(--chamfer)) 100%,0 100%);
  transition:color .35s;
}
.btn span{position:relative;z-index:2}
.btn::before{
  content:'';position:absolute;inset:0;z-index:1;background:var(--w);
  transform:translateX(-101%);transition:transform .5s var(--ease);
}
.btn:hover{color:#0b0b0d}
.btn:hover::before{transform:none}
.btn--ghost{--bg-btn:transparent;box-shadow:inset 0 0 0 1.5px var(--line-2)}
.btn--ghost:hover{color:#0b0b0d}
.btn--sm{padding:.72rem 1.3rem;font-size:.7rem;--chamfer:10px}
.btn--big{margin-top:3.5rem;padding:1.35rem 2.8rem;font-size:.9rem;--chamfer:18px}

/* ═══════════ HERO ═══════════ */
.hero{
  position:relative;min-height:100svh;display:flex;align-items:flex-end;
  padding:calc(var(--pad) + 60px) var(--pad) calc(var(--pad) + 40px);
  overflow:hidden;
}
.hero__media{position:absolute;inset:0;z-index:0}
.hero__media img{
  width:100%;height:120%;object-fit:cover;object-position:50% 32%;
  will-change:transform;
}
.hero__media::after{
  content:'';position:absolute;inset:0;
  background:
    linear-gradient(180deg,rgba(11,11,13,.86) 0%,rgba(11,11,13,.35) 32%,rgba(11,11,13,.72) 68%,var(--bg) 100%),
    linear-gradient(90deg,rgba(11,11,13,.8),transparent 62%);
}
.hero__scan{
  position:absolute;inset:0;pointer-events:none;opacity:.5;
  background:repeating-linear-gradient(180deg,rgba(255,255,255,.055) 0 1px,transparent 1px 4px);
  mix-blend-mode:overlay;
  animation:drift 9s linear infinite;
}
@keyframes drift{to{background-position:0 40px}}
.hero__inner{position:relative;z-index:2;max-width:var(--maxw);margin-inline:auto;width:100%}
.hero .eyebrow{font-size:clamp(.82rem,1.3vw,1rem);letter-spacing:.18em}
.hero__title{
  font-variation-settings:'wdth' 76,'wght' 900;
  font-size:clamp(2.3rem,6vw,5.4rem);line-height:.94;
  letter-spacing:-.022em;text-transform:uppercase;max-width:16ch;margin-top:.4rem;
}
.wd{display:inline-block;overflow:hidden;vertical-align:top}
.wd>i{
  display:inline-block;font-style:normal;
  transform:translateY(105%);transition:transform .95s var(--ease);
}
[data-split].in .wd>i{transform:none}
.hero__lead{color:#c9c9d0;max-width:48ch;margin-top:1.5rem;font-size:clamp(1rem,1.3vw,1.16rem)}
.hero__cta{display:flex;flex-wrap:wrap;gap:1rem;margin-top:2.2rem}
.hero__ecg{
  position:absolute;left:0;right:0;bottom:0;z-index:1;height:76px;width:100%;
  opacity:.4;pointer-events:none;
}
.hero__ecg path{
  fill:none;stroke:var(--red);stroke-width:2;vector-effect:non-scaling-stroke;
  stroke-dasharray:180 3000;animation:ecg 4.6s linear infinite;
  filter:drop-shadow(0 0 6px rgba(255,21,56,.9));
}
@keyframes ecg{from{stroke-dashoffset:3180}to{stroke-dashoffset:0}}
.hero__down{
  position:absolute;right:var(--pad);bottom:calc(var(--pad) + 40px);z-index:3;
  width:1.5px;height:70px;background:rgba(255,255,255,.16);overflow:hidden;
}
.hero__down span{position:absolute;inset:0;background:var(--red);animation:down 2.1s var(--ease) infinite}
@keyframes down{0%{transform:translateY(-100%)}55%,100%{transform:translateY(100%)}}

/* ═══════════ MARQUEE ═══════════ */
.marquee{
  border-block:1px solid var(--line);background:var(--bg2);
  overflow:hidden;padding-block:1.1rem;
}
.marquee__track{display:flex;width:max-content;will-change:transform}
.marquee__track span{
  display:flex;align-items:center;flex:none;
  font-variation-settings:'wdth' 82,'wght' 800;
  font-size:clamp(1.1rem,2.4vw,1.9rem);text-transform:uppercase;letter-spacing:.01em;
  color:#6e6e78;
}
.marquee__track b{
  display:inline-block;width:9px;height:9px;background:var(--red);
  margin-inline:1.6rem;flex:none;
  clip-path:polygon(0 0,100% 0,100% 60%,60% 100%,0 100%);
}

/* ═══════════ SECCIONES ═══════════ */
.sec{padding-block:clamp(44px,5.5vw,68px);position:relative}
.sec--alt{background:var(--bg2);border-block:1px solid var(--line)}
.grid-2{display:grid;grid-template-columns:1fr 1fr;gap:clamp(2.5rem,5vw,5rem);align-items:center}
.grid-2--rev>*:first-child{order:2}

/* ───────── Reveal por corte a 45° ─────────
   El estado oculto va tras :where(html.js): sin JS el contenido nace visible.
   :where() no suma especificidad, así que .in y el bloque de motion reducido
   siguen ganando exactamente igual que antes. */
:where(html.js) [data-reveal]{
  opacity:0;transform:translateY(30px);
  transition:opacity .9s var(--ease),transform .9s var(--ease);
  transition-delay:var(--d,0ms);
}
[data-reveal].in{opacity:1;transform:none}
/* El corte diagonal se aplica a la imagen, no a la figura: si se recorta la
   figura su área es cero y el IntersectionObserver no llega a dispararse. */
.fig{position:relative;overflow:hidden;background:var(--bg3)}
.fig--wide{aspect-ratio:16/10}
.fig img{width:100%;height:100%;object-fit:cover}
/* el corte de entrada solo con JS: sin él la foto se ve, no desaparece */
:where(html.js) .fig img{
  clip-path:polygon(0 0,0 0,-35% 100%,-35% 100%);
  transition:clip-path 1.15s var(--ease),transform 1.1s var(--ease);
}
.fig.in img{clip-path:polygon(0 0,135% 0,100% 100%,-35% 100%)}
.fig.in figcaption{opacity:1}
.fig figcaption{
  position:absolute;left:0;bottom:0;z-index:4;
  font-family:var(--font-t);font-size:.72rem;letter-spacing:.16em;text-transform:uppercase;
  background:var(--red);color:var(--w);padding:.5rem .9rem;
  clip-path:polygon(0 0,100% 0,100% 100%,10px 100%);
}
:where(html.js) .fig figcaption{opacity:0;transition:opacity .5s .55s}

/* ───────── Efecto ECOGRAFÍA con el cursor ───────── */
.scan{--mx:50%;--my:50%;--r:0px}
.scan::after,.scan::before{
  content:'';position:absolute;inset:0;pointer-events:none;
  mask-image:radial-gradient(circle var(--r) at var(--mx) var(--my),#000 58%,transparent 76%);
  -webkit-mask-image:radial-gradient(circle var(--r) at var(--mx) var(--my),#000 58%,transparent 76%);
  opacity:0;transition:opacity .3s;
}
.scan::after{                                   /* la máquina "ve" el tejido */
  z-index:2;
  backdrop-filter:grayscale(1) contrast(1.85) brightness(1.12);
  -webkit-backdrop-filter:grayscale(1) contrast(1.85) brightness(1.12);
}
.scan::before{                                  /* granulado + líneas de barrido */
  z-index:3;
  background:
    repeating-linear-gradient(180deg,rgba(255,255,255,.09) 0 1px,transparent 1px 3px),
    url('../assets/img/noise.png') 0 0/128px 128px;
  mix-blend-mode:screen;opacity:0;
  animation:grain .5s steps(3) infinite;
}
@keyframes grain{0%{background-position:0 0,0 0}50%{background-position:0 2px,17px 9px}100%{background-position:0 0,31px 3px}}
.scan.on::after{opacity:1}
.scan.on::before{opacity:.42}
.scan.on img{transform:scale(1.03)}

/* ═══════════ Estadísticas ═══════════ */
.stats{display:flex;flex-wrap:wrap;gap:clamp(1.6rem,4vw,3.4rem);margin-top:3rem}
/* Las cifras a lo ancho, pegadas a la foto grupal */
/* En escritorio las cifras usan las mismas 3 columnas que las tarjetas de
   valores: cada cifra arranca sobre el borde de su tarjeta */
@media (min-width:1081px){
  .stats--fila{display:grid;grid-template-columns:repeat(3,1fr);gap:1px}
}
.stats--fila{
  margin-top:clamp(1.3rem,2.4vw,1.8rem);
  justify-content:space-between;
  border-top:1px solid var(--line);
  padding-top:clamp(1.2rem,2.2vw,1.6rem);
}
/* La frase va a la derecha del número rojo, no debajo */
.stat{display:flex;align-items:center;gap:.9rem;text-align:left}
.stat b{
  display:block;font-variation-settings:'wdth' 80,'wght' 900;
  font-size:clamp(2.2rem,4.4vw,3.4rem);line-height:1;color:var(--red);
  font-variant-numeric:tabular-nums;flex:none;
}
.stat span{
  display:block;font-family:var(--font-t);font-size:.72rem;
  letter-spacing:.16em;text-transform:uppercase;color:var(--mut);max-width:14ch;
}

/* ═══════════ Valores ═══════════ */
/* Cabecera de los valores: rompe el negro y nombra lo que son */
.vals-cab{margin-top:clamp(2rem,3.5vw,2.8rem)}
.vals-cab .h3{margin-top:.2rem}
/* content-box: la grilla también es .wrap y sin esto el gris de las líneas
   entre tarjetas se pintaba sobre el padding lateral (dos bandas a los lados) */
.vals{display:grid;grid-template-columns:repeat(3,1fr);gap:1px;background:var(--line);background-clip:content-box;margin-top:clamp(1.2rem,2.2vw,1.6rem)}
.val{background:var(--bg3);padding:clamp(1.8rem,3vw,2.6rem);position:relative;overflow:hidden}
.val__n{
  display:block;font-family:var(--font-t);font-size:.7rem;font-weight:600;
  letter-spacing:.2em;color:var(--red);margin-bottom:.9rem;
}
.val::before{
  content:'';position:absolute;top:0;left:0;width:100%;height:3px;background:var(--red);
  transform:scaleX(.28);transform-origin:left;
  transition:transform .55s var(--ease);
}
.val:hover::before{transform:none}
.val h3{
  font-variation-settings:'wdth' 84,'wght' 800;font-size:1.1rem;
  text-transform:uppercase;letter-spacing:.01em;margin-bottom:.7rem;
}
.val p{color:var(--mut);font-size:.95rem}

/* ═══════════ Pilares ═══════════ */
.pillars{display:grid;grid-template-columns:repeat(3,1fr);gap:clamp(1.5rem,3vw,2.5rem);margin-top:clamp(1.8rem,3vw,2.4rem)}
.pillar{border-top:1px solid var(--line-2);padding-top:1.6rem;position:relative}
.pillar::after{
  content:'';position:absolute;top:-1px;left:0;width:100%;height:1px;background:var(--red);
  transform:scaleX(0);transform-origin:left;transition:transform .6s var(--ease);
}
.pillar:hover::after{transform:none}
.pillar__n{
  font-family:var(--font-t);font-size:.72rem;letter-spacing:.2em;color:var(--red);
  display:block;margin-bottom:.9rem;
}
.pillar h3{font-variation-settings:'wdth' 84,'wght' 800;font-size:1.3rem;text-transform:uppercase;margin-bottom:.7rem}
.pillar p{color:var(--mut);font-size:.95rem}

/* ═══════════ Servicios · tarjetas que abren su ficha ═══════════ */
.svcs{
  display:grid;grid-template-columns:repeat(3,1fr);gap:1px;
  background:var(--line);border:1px solid var(--line);
  margin-top:clamp(1.8rem,3.5vw,2.6rem);
}
.svc{
  font:inherit;text-align:left;color:inherit;border:0;cursor:pointer;
  background:var(--bg);padding:clamp(1.5rem,2.6vw,2.1rem);
  display:flex;flex-direction:column;align-items:flex-start;min-height:200px;
  position:relative;overflow:hidden;isolation:isolate;
}
.svc::before{
  content:'';position:absolute;inset:0;z-index:-1;background:var(--red);
  transform:translateY(101%);transition:transform .5s var(--ease);
}
.svc:hover::before,.svc:focus-visible::before{transform:none}
.svc__n{
  font-family:var(--font-t);font-size:.7rem;font-weight:600;
  letter-spacing:.2em;color:var(--red);transition:color .4s;
}
.svc:hover .svc__n,.svc:focus-visible .svc__n{color:rgba(255,255,255,.75)}
.svc__t{
  font-variation-settings:'wdth' 80,'wght' 900;
  font-size:clamp(1.4rem,2.2vw,1.9rem);text-transform:uppercase;line-height:1;
  margin:1.1rem 0 .55rem;color:var(--w);
}
.svc__p{color:var(--mut);font-size:.92rem;line-height:1.55;transition:color .4s;flex:1}
.svc:hover .svc__p,.svc:focus-visible .svc__p{color:rgba(255,255,255,.9)}
.svc__go{
  font-family:var(--font-t);font-size:.72rem;font-weight:600;
  letter-spacing:.16em;text-transform:uppercase;
  margin-top:1.3rem;color:var(--w);display:flex;align-items:center;gap:.5em;
  opacity:0;transform:translateX(-8px);transition:.45s var(--ease);
}
.svc__go::after{content:'→'}
.svc:hover .svc__go,.svc:focus-visible .svc__go{opacity:1;transform:none}
.svc--hi{background:var(--bg3)}
.svc--hi::after{
  content:'';position:absolute;top:0;right:0;border-style:solid;border-width:0 30px 30px 0;
  border-color:transparent var(--red) transparent transparent;
}

/* ═══════════ Ciclo de recuperación ═══════════ */
.ciclo{
  margin-top:clamp(3rem,6vw,5rem);
  display:grid;grid-template-columns:1fr auto 1fr;
  grid-template-areas:". norte ." "oeste aro este" ". sur .";
  align-items:center;justify-items:center;gap:clamp(1rem,2.5vw,2rem);
}
.ciclo__et{
  font-family:var(--font-t);font-weight:600;
  font-size:clamp(.68rem,1.15vw,.8rem);letter-spacing:.15em;text-transform:uppercase;
  color:var(--mut);text-align:center;max-width:15ch;line-height:1.45;
  transition:color .4s,text-shadow .4s;
}
.ciclo__et--n{grid-area:norte}
.ciclo__et--e{grid-area:este;text-align:left;justify-self:start}
.ciclo__et--s{grid-area:sur}
.ciclo__et--o{grid-area:oeste;text-align:right;justify-self:end}
.ciclo__et.on{color:var(--w);text-shadow:0 0 18px rgba(255,21,56,.55)}

.ciclo__aro{grid-area:aro;position:relative;width:clamp(230px,32vw,340px);aspect-ratio:1}
.ciclo__aro svg{width:100%;height:100%;overflow:visible}
.ciclo__base{fill:none;stroke:var(--line);stroke-width:1.5}
.ciclo__arcos path{
  fill:none;stroke:var(--line-2);stroke-width:2;color:var(--line-2);
  transition:stroke .4s,color .4s;
}
.ciclo__arcos path.on{stroke:var(--red);color:var(--red)}
.ciclo__nodo{fill:var(--bg);stroke:var(--line-2);stroke-width:2;transition:fill .35s,stroke .35s,r .35s}
.ciclo__nodo.on{fill:var(--red);stroke:var(--red);r:11}
.ciclo__pulso{
  fill:var(--w);
  filter:drop-shadow(0 0 8px rgba(255,21,56,.9)) drop-shadow(0 0 16px rgba(255,21,56,.5));
}

/* ── Batería del centro ── */
.bat{position:absolute;left:50%;top:50%;translate:-50% -50%;display:flex;flex-direction:column;align-items:center}
.bat__punta{width:22px;height:7px;background:var(--line-2);border-radius:2px 2px 0 0}
.bat__cuerpo{
  position:relative;width:clamp(62px,9vw,78px);aspect-ratio:62/104;
  border:2px solid var(--line-2);border-radius:5px;overflow:hidden;
  background:rgba(255,255,255,.03);display:grid;place-items:center;
}
.bat__nivel{
  position:absolute;left:0;right:0;bottom:0;height:0%;
  background:linear-gradient(180deg,var(--red),#a30d24);
  box-shadow:0 0 22px rgba(255,21,56,.6);
  transition:height .6s var(--ease);
}
.bat__nivel::after{content:'';position:absolute;left:0;right:0;top:0;height:2px;background:rgba(255,255,255,.85)}
.bat__pct{
  position:relative;z-index:2;font-family:var(--font-t);font-weight:700;
  font-size:clamp(1.05rem,1.9vw,1.3rem);color:var(--w);
  font-variant-numeric:tabular-nums;text-shadow:0 1px 6px rgba(0,0,0,.75);
}
.bat__pct small{font-size:.6em;opacity:.75}
.bat__pie{
  margin-top:.7rem;font-family:var(--font-t);font-size:.7rem;
  letter-spacing:.18em;text-transform:uppercase;color:var(--mut);
}

/* ═══════════ Detalle desplegable de servicios ═══════════
   Nada de modal: la ficha se abre bajo la rejilla de tarjetas y
   empuja la página. El alto se anima con grid-template-rows. */
.desp{
  display:grid;grid-template-rows:0fr;
  transition:grid-template-rows .65s var(--ease);
  scroll-margin-top:96px;                 /* que el nav fijo no la tape al enfocarla */
  grid-column:1/-1;order:99;              /* ocupa la fila entera; el JS lo coloca tras la fila pulsada */
  min-width:0;                            /* sin esto, el contenido mínimo de las fotos infla las columnas 1fr */
}
.desp.on{grid-template-rows:1fr}
/* Recortado a cero seguía siendo enfocable: al tabular tras la rejilla se
   aterrizaba en un "Cerrar detalle" invisible. visibility lo saca del orden
   de tabulación, y se retrasa para no cortar la animación de cierre. */
.desp__clip{overflow:hidden;min-width:0;visibility:hidden;transition:visibility 0s .65s}
.desp.on .desp__clip{visibility:visible;transition:visibility 0s}
.desp .grid-2 > *{min-width:0}
.desp__in{
  position:relative;background:var(--bg2);
  padding:clamp(1.8rem,4vw,3.2rem) clamp(1.2rem,3vw,2.6rem) clamp(2.2rem,4.5vw,3.6rem);
}
.desp__in::before{content:'';position:absolute;top:0;left:0;right:0;height:2px;background:var(--red)}
.desp__x{
  position:absolute;top:.55rem;right:.8rem;z-index:5;
  background:none;border:0;color:var(--mut);
  font-size:1.9rem;line-height:1;cursor:pointer;padding:.2rem .4rem;
  transition:color .25s;
}
.desp__x:hover{color:var(--red)}
.desp__sec{display:none}
.desp__sec.on{display:block}

/* dentro del desplegable la retícula de página se relaja */
.desp .wrap{max-width:none;padding-inline:0}
.desp .h2{font-size:clamp(1.6rem,3vw,2.6rem)}
.desp .grid-2{gap:clamp(2rem,3.5vw,3.5rem)}
.desp .reveal2{padding-inline:0;margin-block:clamp(2rem,4vw,3rem)}
.desp .steps__rail{left:0;right:0}
/* las herramientas de fisioterapia, sobre el fondo del desplegable */
.desp .tools li{background:var(--bg)}

/* Cabecera de ficha a dos columnas: título a la izquierda, texto a la derecha */
/* El título ocupa lo que necesita y el texto arranca justo a su lado,
   no pegado al borde derecho */
/* La etiqueta va en su propia fila: así el párrafo se centra contra el
   título y no contra etiqueta + título (quedaba más alto que el título) */
.desp-cab{
  grid-template-columns:fit-content(55%) minmax(0,1fr);
  grid-template-areas:"eb ." "tt tx";
  column-gap:clamp(1.8rem,3vw,3rem);row-gap:0;
}
.desp-cab > div{display:contents}
.desp-cab .eyebrow{grid-area:eb}
.desp-cab .h2{grid-area:tt;align-self:center}
.desp-cab > .lead{grid-area:tx;align-self:center;margin-top:0;max-width:none}
.grid-2--top{align-items:start}

/* Entrenamiento compacto */
.desp .steps{margin-top:clamp(1.8rem,3vw,2.4rem)}
.desp .bigstat{margin-top:clamp(2rem,3.5vw,2.6rem);padding:clamp(1.6rem,3vw,2.4rem)}

/* Ciclo compacto: bajo el texto de recovery, a la izquierda de la foto */
.ciclo--mini{
  margin-top:clamp(1.6rem,3vw,2.2rem);
  grid-template-columns:1fr 1fr;
  grid-template-areas:"aro aro" "norte este" "sur oeste";
  gap:1rem .9rem;
}
.ciclo--mini .ciclo__aro{width:clamp(180px,20vw,230px)}
.ciclo--mini .ciclo__et,
.ciclo--mini .ciclo__et--e,
.ciclo--mini .ciclo__et--o{font-size:.7rem;max-width:none;text-align:center;justify-self:center}
.ciclo--mini .bat__cuerpo{width:clamp(44px,5.4vw,54px)}
.ciclo--mini .bat__punta{width:15px;height:5px}
.ciclo--mini .bat__pct{font-size:.92rem}
.ciclo--mini .bat__pie{font-size:.7rem;margin-top:.45rem}

/* tarjeta activa: se queda encendida y apunta a su ficha */
.svc.on::before{transform:none}
.svc.on .svc__n{color:rgba(255,255,255,.75)}
.svc.on .svc__p{color:rgba(255,255,255,.9)}
.svc.on .svc__go{opacity:1;transform:none}
.svc.on .svc__go::after{content:'↓'}

/* ═══════════ Herramientas ═══════════ */
.tools{margin-top:2.6rem;display:grid;gap:1px;background:var(--line);border-block:1px solid var(--line)}
.tools li{background:var(--bg2);padding:1.15rem 1.3rem;position:relative;transition:background .4s;padding-left:1.6rem}
.sec:not(.sec--alt) .tools li{background:var(--bg)}
.tools li::before{
  content:'';position:absolute;left:0;top:0;bottom:0;width:3px;background:var(--red);
  transform:scaleY(0);transform-origin:top;transition:transform .45s var(--ease);
}
.tools li:hover::before{transform:none}
.tools b{
  display:block;font-variation-settings:'wdth' 88,'wght' 700;
  font-size:.98rem;text-transform:uppercase;letter-spacing:.02em;
}
.tools span{display:block;color:var(--mut);font-size:.88rem;margin-top:.2rem}
.tools--row{grid-template-columns:repeat(2,1fr)}

/* ═══════════ Goniómetro ═══════════ */
.gonio{position:relative}
.gonio .fig{aspect-ratio:4/5}
.gonio__svg{position:absolute;inset:0;width:100%;height:100%;z-index:4;pointer-events:none;overflow:visible}
.gonio__arc{fill:rgba(255,21,56,.13);stroke:var(--red);stroke-width:1.5;vector-effect:non-scaling-stroke}
.gonio__arm{stroke:rgba(255,255,255,.55);stroke-width:2;vector-effect:non-scaling-stroke;stroke-dasharray:5 5}
.gonio__arm--mov{stroke:var(--red);stroke-width:3;stroke-dasharray:none;filter:drop-shadow(0 0 8px rgba(255,21,56,.8))}
.gonio__pivot{fill:var(--red)}
.gonio__read{
  position:absolute;right:0;bottom:0;z-index:5;background:var(--bg);
  border:1px solid var(--line-2);border-right:0;border-bottom:0;
  padding:1rem 1.4rem;display:flex;align-items:baseline;gap:.35rem;
}
.gonio__read b{
  font-variation-settings:'wdth' 80,'wght' 900;font-size:2.2rem;line-height:1;
  color:var(--red);font-variant-numeric:tabular-nums;
}
.gonio__read i{font-style:normal;color:var(--red);font-size:1.3rem}
.gonio__read span{
  font-family:var(--font-t);font-size:.7rem;letter-spacing:.16em;text-transform:uppercase;
  color:var(--mut);margin-left:.6rem;max-width:10ch;line-height:1.3;
}

/* ═══════════ EPI · revelado ecográfico ═══════════ */
.sec--epi{background:linear-gradient(180deg,var(--bg) 0%,#0e0e12 45%,var(--bg) 100%)}
.reveal2{margin-block:clamp(3rem,7vw,6rem);padding-inline:var(--pad)}
.reveal2__frame{
  position:relative;max-width:var(--maxw);margin-inline:auto;
  aspect-ratio:3/2;overflow:hidden;background:#000;
  border:1px solid var(--line);
}
.reveal2__a{width:100%;height:100%;object-fit:cover}
.reveal2__b{
  position:absolute;inset:0;background:#000;
  clip-path:inset(0 calc(100% - var(--split,50%)) 0 0);
}
.reveal2__b img{
  width:100%;height:100%;object-fit:cover;
  filter:grayscale(1) contrast(2) brightness(1.05);
}
.reveal2__b::after{
  content:'';position:absolute;inset:0;pointer-events:none;
  background:
    repeating-linear-gradient(180deg,rgba(255,255,255,.1) 0 1px,transparent 1px 3px),
    url('../assets/img/noise.png') 0 0/128px 128px;
  mix-blend-mode:screen;opacity:.4;
  animation:grain .45s steps(3) infinite;
}
.reveal2__line{
  position:absolute;top:0;bottom:0;left:var(--split,50%);width:2px;
  background:var(--red);box-shadow:0 0 22px 3px rgba(255,21,56,.6);z-index:3;
}
.reveal2__grip{
  position:absolute;top:50%;left:50%;translate:-50% -50%;
  width:52px;height:52px;background:var(--red);
  clip-path:polygon(0 0,100% 0,100% 68%,68% 100%,0 100%);
  display:grid;place-items:center;
}
.reveal2__grip::after{
  content:'⇔';color:var(--w);font-size:1.15rem;line-height:1;
}
.reveal2__tag{
  position:absolute;bottom:0;z-index:4;
  font-family:var(--font-t);font-size:.7rem;font-weight:600;
  letter-spacing:.18em;text-transform:uppercase;padding:.55rem 1rem;
}
.reveal2__tag--a{right:0;background:rgba(11,11,13,.85);color:var(--mut);backdrop-filter:blur(6px)}
.reveal2__tag--b{left:0;background:var(--red);color:var(--w)}

.card-pro{
  border:1px solid var(--line-2);padding:clamp(1.8rem,3vw,2.6rem);position:relative;
  background:var(--bg2);
  clip-path:polygon(0 0,100% 0,100% calc(100% - 26px),calc(100% - 26px) 100%,0 100%);
}
.card-pro .eyebrow{font-size:.7rem;margin-bottom:1rem}
.card-pro h4{
  font-variation-settings:'wdth' 82,'wght' 900;
  font-size:clamp(1.5rem,2.6vw,2rem);text-transform:uppercase;line-height:1;margin-bottom:1.3rem;
}
.card-pro ul{display:grid;gap:.65rem}
.card-pro li{
  color:var(--mut);font-size:.9rem;padding-left:1.1rem;position:relative;
}
.card-pro li::before{content:'';position:absolute;left:0;top:.62em;width:6px;height:6px;background:var(--red)}

/* ═══════════ Listas de puntos ═══════════ */
.ticks{margin-top:1.8rem;display:grid;gap:.75rem}
.ticks li{position:relative;padding-left:1.7rem;color:#c2c2ca;font-size:.93rem}
.ticks li::before{
  content:'';position:absolute;left:0;top:.42em;width:10px;height:10px;
  background:var(--red);clip-path:polygon(0 0,100% 0,100% 55%,55% 100%,0 100%);
}

/* ═══════════ Metodología ═══════════ */
.steps{
  display:grid;grid-template-columns:repeat(4,1fr);gap:clamp(1.5rem,3vw,2.5rem);
  margin-top:clamp(3rem,6vw,5rem);position:relative;padding-top:3.5rem;
}
.steps__rail{
  position:absolute;top:14px;left:var(--pad);right:var(--pad);height:1px;
  background:var(--line-2);
}
.steps__rail i{
  display:block;height:100%;width:0;background:var(--red);
  box-shadow:0 0 10px var(--red);
}
/* Cada paso toma 3 filas del grid padre (número, título, texto): si un
   título se parte en dos líneas, los textos de la misma fila siguen
   arrancando a la misma altura */
.step{position:relative;display:grid;grid-row:span 3;grid-template-rows:subgrid;row-gap:0;align-content:start}
.step::before{
  content:'';position:absolute;top:-3.5rem;left:0;
  width:11px;height:11px;background:var(--bg);border:1.5px solid var(--line-2);
  translate:0 -5px;transition:.5s var(--ease);
}
.step.in::before{background:var(--red);border-color:var(--red);box-shadow:0 0 14px rgba(255,21,56,.8)}
.step__n{
  font-variation-settings:'wdth' 80,'wght' 900;font-size:2.4rem;line-height:1;
  color:var(--line-2);display:block;margin-bottom:.9rem;transition:color .5s;
}
.step.in .step__n{color:var(--red)}
.step h3{font-variation-settings:'wdth' 86,'wght' 800;font-size:1.15rem;text-transform:uppercase;margin-bottom:.5rem}
.step p{color:var(--mut);font-size:.88rem}

.bigstat{
  display:flex;flex-wrap:wrap;align-items:center;gap:clamp(1.5rem,4vw,3.5rem);
  margin-top:clamp(3rem,7vw,6rem);padding:clamp(2rem,4vw,3.2rem);
  border:1px solid var(--line);background:var(--bg2);
  clip-path:polygon(0 0,100% 0,100% calc(100% - 32px),calc(100% - 32px) 100%,0 100%);
}
.bigstat b{
  font-variation-settings:'wdth' 74,'wght' 900;
  font-size:clamp(4.5rem,13vw,10rem);line-height:.82;color:var(--red);
  font-variant-numeric:tabular-nums;
}
.bigstat b i{font-style:normal}
.bigstat p{color:var(--mut);max-width:44ch;font-size:clamp(1.05rem,1.55vw,1.35rem)}

/* ═══════════ SECCIÓN DEL MINIJUEGO ═══════════
   El fondo es el propio juego jugándose solo. El lienzo y el botón viven
   aquí (no en game.css) para que la sección esté maquetada aunque el
   juego todavía no se haya descargado. */
.sec--game{
  position:relative;overflow:hidden;
  min-height:min(56vh,460px);display:grid;place-items:center;
  background:var(--bg2);border-block:1px solid var(--line);
}
.game__bg{position:absolute;inset:0;width:100%;height:100%;display:block;cursor:pointer}
.game__veil{
  position:absolute;inset:0;pointer-events:none;
  background:
    radial-gradient(ellipse 58% 62% at 50% 50%,rgba(11,11,13,.93),rgba(11,11,13,.55) 58%,transparent 80%),
    linear-gradient(180deg,var(--bg2),transparent 20%,transparent 80%,var(--bg2));
}
.game__mid{
  position:relative;z-index:2;display:grid;justify-items:center;gap:1.5rem;
  padding:var(--pad);text-align:center;
}
.game__mid .eyebrow{justify-content:center;margin-bottom:0}
.game__ttl{
  font-variation-settings:'wdth' 79,'wght' 900;
  font-size:clamp(1.5rem,3.4vw,2.7rem);line-height:1;
  text-transform:uppercase;letter-spacing:-.01em;max-width:16ch;
}
.playbtn{
  position:relative;display:inline-flex;align-items:center;gap:1rem;
  margin-top:.6rem;border:0;cursor:pointer;overflow:hidden;isolation:isolate;
  padding:clamp(1.15rem,2.2vw,1.6rem) clamp(2.3rem,4.6vw,3.8rem);
  background:var(--red);color:var(--w);
  font-family:var(--font-t);font-weight:700;
  font-size:clamp(.95rem,1.9vw,1.35rem);letter-spacing:.2em;text-transform:uppercase;
  clip-path:polygon(0 0,100% 0,100% calc(100% - 20px),calc(100% - 20px) 100%,0 100%);
  transition:color .35s,transform .35s var(--ease);
  animation:latir 3s ease-in-out infinite;
}
.playbtn::before{
  content:'';position:absolute;inset:0;z-index:-1;background:var(--w);
  transform:translateX(-101%);transition:transform .5s var(--ease);
}
.playbtn:hover{color:#0b0b0d;transform:translateY(-2px);animation:none}
.playbtn:hover::before{transform:none}
.playbtn__ico{
  width:0;height:0;flex:none;border-style:solid;
  border-width:9px 0 9px 15px;
  border-color:transparent transparent transparent currentColor;
}
@keyframes latir{
  0%,100%{box-shadow:0 0 0 0 rgba(255,21,56,.45)}
  60%{box-shadow:0 0 0 22px rgba(255,21,56,0)}
}
#playBtn[data-cargando]{opacity:.65;pointer-events:none}
#playBtn[data-cargando] .playbtn__txt::after{content:'…'}

/* ═══════════ Alianzas ═══════════ */
/* Sub-bloque de aliados al final de "Confían en nosotros" */
.aliados-cab{margin-top:clamp(2.2rem,4vw,3rem)}
.aliados-cab .h3{margin-top:.2rem}
.aliados-cab .lead{margin-top:1rem;max-width:none}
.allies{display:grid;grid-template-columns:1fr 1fr;gap:clamp(2rem,4vw,3.5rem);margin-top:clamp(3rem,6vw,5rem)}
.aliados-cab .allies{margin-top:clamp(1.6rem,3vw,2.2rem)}
.ally .fig{aspect-ratio:16/10;margin-bottom:1.8rem}
.ally .eyebrow{margin-bottom:.7rem}
.ally h3{font-variation-settings:'wdth' 80,'wght' 900;font-size:clamp(1.7rem,3vw,2.4rem);text-transform:uppercase;line-height:1;margin-bottom:.8rem}
.ally p{color:var(--mut);font-size:.95rem}

/* ═══════════ Galería ═══════════ */
.gal{
  display:grid;grid-template-columns:repeat(4,1fr);gap:1px;
  margin-top:clamp(1.6rem,2.8vw,2.2rem);background:var(--line);
  border-block:1px solid var(--line);
}
.gal .fig{aspect-ratio:3/4}
.gal .fig:nth-child(4n+1),.gal .fig:nth-child(4n+4){aspect-ratio:3/4}

/* ═══════════ Contacto ═══════════ */
.sec--contact{background:var(--bg2);border-top:1px solid var(--line)}
.cts{
  display:grid;grid-template-columns:repeat(auto-fit,minmax(210px,1fr));
  gap:1px;background:var(--line);margin-top:clamp(3rem,6vw,5rem);
  border:1px solid var(--line);
}
.ct{background:var(--bg2);padding:1.8rem 1.6rem}
.ct span{
  display:block;font-family:var(--font-t);font-size:.7rem;letter-spacing:.18em;
  text-transform:uppercase;color:var(--red);margin-bottom:.9rem;
}
.ct p{font-size:.98rem;line-height:1.6}
.ct a{transition:color .3s;border-bottom:1px solid transparent}
.ct a:hover{color:var(--red);border-bottom-color:var(--red)}

/* ═══════════ BURBUJA FIJA DE WHATSAPP ═══════════
   Verde de WhatsApp a propósito: es un elemento de utilidad y la gente lo
   reconoce al vuelo. Para pasarlo al rojo de marca basta con cambiar --wa. */
.wa{
  --wa:#25d366;
  position:fixed;z-index:6500;
  right:clamp(16px,2.4vw,28px);
  bottom:calc(clamp(16px,2.4vw,28px) + env(safe-area-inset-bottom,0px));
  display:flex;align-items:center;gap:0;
  height:58px;padding:0 12px;border-radius:999px;
  background:var(--wa);color:#fff;
  box-shadow:0 8px 26px rgba(0,0,0,.45),0 0 0 1px rgba(255,255,255,.08) inset;
  transition:transform .35s var(--ease),opacity .3s,gap .35s var(--ease),padding .35s var(--ease);
}
.wa__ico{width:34px;height:34px;fill:currentColor;flex:none}
.wa__txt{
  max-width:0;overflow:hidden;white-space:nowrap;
  font-family:var(--font-t);font-weight:600;font-size:.78rem;
  letter-spacing:.12em;text-transform:uppercase;
  transition:max-width .4s var(--ease);
}
.wa:hover{transform:translateY(-3px)}
.wa:hover .wa__txt{max-width:9rem}
.wa:hover{gap:.7rem;padding-right:20px}

/* anillo latiendo, para que se note sin ser molesto */
.wa__pulso{
  position:absolute;inset:0;border-radius:inherit;
  box-shadow:0 0 0 0 rgba(37,211,102,.55);
  animation:waLatir 3.2s ease-out infinite;pointer-events:none;
}
@keyframes waLatir{
  0%{box-shadow:0 0 0 0 rgba(37,211,102,.5)}
  70%,100%{box-shadow:0 0 0 20px rgba(37,211,102,0)}
}

/* se aparta mientras carga la web y mientras se juega */
body.is-loading .wa,
body.gm-open .wa{opacity:0;pointer-events:none;transform:translateY(12px)}

/* la flecha del hero se aparta para no chocar con la burbuja */
@media (min-width:521px){ .hero__down{right:calc(var(--pad) + 74px)} }
@media (max-width:520px){
  .wa{height:52px}
  .wa__ico{width:30px;height:30px}
  .hero__down{display:none}
}

/* ═══════════ Contacto: tarjetas agrupadas + mapa ═══════════ */
.contacto-grid{
  display:grid;grid-template-columns:1.05fr .95fr;
  gap:clamp(2rem,4vw,3.5rem);align-items:stretch;
  margin-top:clamp(1.8rem,3vw,2.4rem);
}
.contacto-grid .cts{margin-top:0;grid-template-columns:repeat(2,1fr)}
.ct--full{grid-column:1/-1}
.contacto-grid .btn--big{margin-top:1.6rem}

.mapa{
  position:relative;display:flex;flex-direction:column;
  border:1px solid var(--line);background:var(--bg2);
  clip-path:polygon(0 0,100% 0,100% calc(100% - 26px),calc(100% - 26px) 100%,0 100%);
}
.mapa iframe{
  width:100%;flex:1;min-height:380px;border:0;display:block;
  /* Google Maps no tiene modo oscuro sin API key: se invierte y se rota el
     tono 180° para que el azul del agua siga siendo azul. Sin esto, un
     rectángulo blanco cegador en mitad del contacto. */
  filter:invert(1) hue-rotate(180deg) saturate(.75) contrast(.92) brightness(.96);
}
.mapa__link{
  font-family:var(--font-t);font-size:.7rem;font-weight:600;
  letter-spacing:.15em;text-transform:uppercase;color:var(--mut);
  padding:.85rem 1.2rem;border-top:1px solid var(--line);
  transition:color .25s;
}
.mapa__link:hover{color:var(--red)}

/* ═══════════ Página Equipo ═══════════ */
.sec--primera{padding-top:clamp(92px,11vw,124px)}
/* Mosaico de retratos: 17 individuales + 2 grupales a casilla doble.
   5 columnas × 5 filas cuadran exacto (17 + 2×4 = 25 casillas); en 4 y 2
   columnas la foto del balón también se agranda (16 + 3×4 = 28) para que
   ninguna fila quede coja. */
.integrantes{
  display:grid;grid-template-columns:repeat(5,1fr);grid-auto-flow:dense;
  gap:1px;background:var(--line);border:1px solid var(--line);
  margin-top:clamp(1.8rem,3.5vw,2.6rem);
}
.integrantes .fig{aspect-ratio:4/5}
.integ--grupo{grid-column:span 2;grid-row:span 2}

/* ═══════════ Footer ═══════════ */
.foot{background:var(--bg);border-top:1px solid var(--line);padding-block:clamp(2rem,3.5vw,2.8rem)}
.foot__in{display:flex;flex-direction:column;align-items:center;text-align:center;gap:1.1rem}
.foot__logo{width:clamp(150px,20vw,220px);color:var(--w)}
.foot__tag{
  font-family:var(--font-t);font-size:.7rem;letter-spacing:.28em;text-transform:uppercase;color:var(--red);
}
.foot__legal{font-size:.78rem;color:var(--mut)}

/* ═══════════ RESPONSIVE ═══════════ */
@media (max-width:1080px){
  .vals,.pillars,.svcs{grid-template-columns:repeat(2,1fr)}
  .integrantes{grid-template-columns:repeat(4,1fr)}
  .integ--xl{grid-column:span 2;grid-row:span 2}
  /* el aire entre filas va en el paso: un row-gap del padre se colaría
     también entre número, título y texto */
  .steps{grid-template-columns:repeat(2,1fr);row-gap:0}
  .step{padding-bottom:3rem}
  .step:nth-last-child(-n+2){padding-bottom:0}
  .step::before{display:none}
  .steps__rail{display:none}
  .gal{grid-template-columns:repeat(3,1fr)}
}
@media (max-width:860px){
  /* la pista ocupa un alto fijo; sin esto quedaban bandas vacías enormes */
  .sec--game{min-height:min(52vh,420px)}
  /* el ciclo pasa a columna: el aro arriba y las cuatro etiquetas en 2x2,
     porque en cruz las laterales se salían de la pantalla */
  .ciclo{
    grid-template-columns:1fr 1fr;
    grid-template-areas:"aro aro" "norte este" "sur oeste";
    gap:1.5rem 1.2rem;
  }
  .ciclo__et,.ciclo__et--e,.ciclo__et--o{
    text-align:center;justify-self:center;max-width:20ch;
  }
  .ciclo__aro{margin-bottom:.8rem}
  .nav__links{display:none}   /* en móvil, el menú vive en .menu-movil */
  /* En móvil la barra no muta: el blur sobre position:fixed se repinta tarde
     (la barra "chasquea" al recolocarse) y el cambio de alto al cruzar el
     umbral de scroll daba un saltito. Fondo casi opaco, alto constante. */
  #nav{padding-block:14px;transition:background .3s,border-color .3s}
  #nav.stuck{
    padding-block:14px;
    background:rgba(11,11,13,.97);
    backdrop-filter:none;-webkit-backdrop-filter:none;
  }
  .nav__logo svg,#nav.stuck .nav__logo svg{height:30px;transition:none}
  /* Con el menú abierto, el header no puede llevar backdrop-filter: ese filtro
     lo convierte en containing block del menú fijo y lo colapsa a su propia
     altura (los enlaces quedaban flotando sin fondo tras hacer scroll). */
  body.menu-open #nav{
    background:transparent;border-bottom-color:transparent;
    backdrop-filter:none;-webkit-backdrop-filter:none;
  }
  body.menu-open{overflow:hidden}
  #burger{display:flex;z-index:10}
  .nav__cta{display:none}
  .nav__wm{display:none}
  .grid-2,.allies,.contacto-grid{grid-template-columns:1fr}
  .desp-cab{grid-template-areas:"eb" "tt" "tx"}
  .desp-cab > .lead{margin-top:1.2rem}
  .mapa iframe{min-height:300px}
  .grid-2--rev>*:first-child{order:0}
  .vals,.pillars,.svcs{grid-template-columns:1fr}
  .gal{grid-template-columns:repeat(2,1fr)}
  .reveal2__frame{aspect-ratio:4/3}
  .bigstat{flex-direction:column;align-items:flex-start}
  .gonio__read{padding:.8rem 1rem}
  .gonio__read b{font-size:1.6rem}
}
@media (max-width:520px){
  .foot{padding-bottom:calc(var(--pad) + 78px)}  /* hueco para la burbuja */
  .stats{gap:1.6rem 2rem}
  /* apilados a todo el ancho: "Más información sobre servicios" no cabía en 360px */
  .hero__cta .btn{flex:1 1 100%;padding-inline:1.2rem;text-align:center}
  .integrantes{grid-template-columns:repeat(2,1fr)}
  .hero{min-height:92svh}
  /* a una columna eran ocho fotos 3:4 seguidas: metro y medio de scroll
     justo antes del contacto. En dos, la galería se recorre de un vistazo. */
  .gal{grid-template-columns:repeat(2,1fr)}
}
@media (max-width:420px){
  /* a este ancho las etiquetas se partían y los textos de al lado quedaban desfasados */
  .contacto-grid .cts{grid-template-columns:1fr}
}

/* Sonda solo en dispositivos con ratón real */
@media (hover:hover) and (pointer:fine){
  #probe{display:block}
  body.probe-on,body.probe-on a,body.probe-on button{cursor:none}
}
/* En táctil, barrido automático suave sobre las fotos */
@media (hover:none){
  .scan::before{opacity:.14;mask-image:none;-webkit-mask-image:none}
  /* Sin hover no hay nada que revele el "Ver detalle": la tarjeta tiene que
     enseñar sola que se pulsa, o en móvil parece texto muerto. */
  .svc__go{opacity:1;transform:none}
  /* Una instrucción que pide cursor no se le enseña a quien no tiene cursor. */
  .hint--raton{display:none}
}

/* ═══════════ Accesibilidad ═══════════ */
@media (prefers-reduced-motion:reduce){
  html{scroll-behavior:auto}
  *,*::before,*::after{
    animation-duration:.01ms!important;animation-iteration-count:1!important;
    transition-duration:.01ms!important;
  }
  [data-reveal]{opacity:1;transform:none}
  .fig img{clip-path:none}
  .hero__title .wd>i{transform:none}
  #probe{display:none}
}
:focus-visible{outline:2px solid var(--red);outline-offset:3px}

/* ═══════════ SIN JAVASCRIPT ═══════════
   Si el JS no arranca —bloqueado por una extensión, servido por un proxy que
   lo corta, caído a mitad de descarga— la web tiene que seguir siendo una web.
   Las fichas de servicio se muestran abiertas (contenido antes que interacción)
   y los controles que ya no pueden funcionar se retiran en vez de quedarse
   muertos en pantalla. */
:where(html:not(.js)) .desp{grid-template-rows:1fr}
:where(html:not(.js)) .desp__clip{visibility:visible}
:where(html:not(.js)) .desp__sec{display:block;border-top:1px solid var(--line);padding-top:clamp(1.6rem,3vw,2.4rem);margin-top:clamp(1.6rem,3vw,2.4rem)}
:where(html:not(.js)) .desp__sec:first-of-type{border-top:0;padding-top:0;margin-top:0}
:where(html:not(.js)) .desp__x{display:none}
:where(html:not(.js)) #burger{display:none}
:where(html:not(.js)) .hint{display:none}
