/* VademecumHub · web pública. Paleta: azul, blanco, sol. Tipografía: Bricolage Grotesque
   (titulares) y Funnel Sans (texto), servidas desde el propio dominio. Movimiento: fondo
   de convergencia en la portada, diagrama del hub, tabla de tiempos. */
:root{--azul:#1B2ADB;--azul-2:#2634E8;--azul-3:#3140F2;--blanco:#F4F5FF;--lavanda:#B9C0FF;--tinta:#0F1447;--linea:rgba(244,245,255,.22);--sol:#FFD84D;--sol-2:#FFE27A}
*{box-sizing:border-box}
body{margin:0;background:var(--azul);color:var(--blanco);font-family:'Funnel Sans',system-ui,sans-serif;font-size:17px;line-height:1.5;padding:0 16px;position:relative;overflow-x:hidden}
h1,h2{margin:0;font-family:'Bricolage Grotesque',system-ui,sans-serif;font-weight:800;font-stretch:100%;line-height:1.02;letter-spacing:-.03em;text-wrap:balance}
h3{margin:0;font-family:'Bricolage Grotesque',system-ui,sans-serif;font-weight:700;line-height:1.15;letter-spacing:-.015em}
p{margin:0}
a{color:inherit}
:focus-visible{outline:2px solid var(--sol);outline-offset:3px}
.w{max-width:1180px;margin:0 auto}
.ast{width:1em;height:1em;display:inline-block;vertical-align:-.12em}

.nav{position:sticky;top:env(safe-area-inset-top,0px);z-index:10;background:color-mix(in srgb,var(--azul) 88%,transparent);backdrop-filter:blur(10px);margin:0 -16px;padding:0 16px;border-bottom:1px solid var(--linea)}
.nav .w{display:flex;align-items:center;gap:2rem;min-height:68px}
.logo{font-family:'Bricolage Grotesque',sans-serif;font-weight:800;font-size:1.3rem;letter-spacing:-.02em;text-decoration:none;display:flex;align-items:center;gap:.6rem}
.logo svg{width:26px;height:26px}
.menu{display:flex;gap:1.5rem;margin-left:auto;font-size:.95rem}
.menu a{text-decoration:none;color:var(--lavanda)}
.menu a:hover{color:#fff}
.btn{display:inline-flex;align-items:center;text-decoration:none;font-weight:700;background:var(--sol);color:var(--tinta);padding:.85rem 1.4rem;border-radius:999px;border:1px solid var(--sol);white-space:nowrap;transition:transform .18s cubic-bezier(.2,.8,.2,1),background .18s}
.btn:hover{background:var(--sol-2);transform:translateY(-1px)}
.btn:active{transform:translateY(1px)}
.btn.sec{background:transparent;color:var(--blanco);border-color:var(--linea)}
.btn.sec:hover{border-color:#fff;transform:none}
.nav .btn{padding:.6rem 1.05rem;font-size:.92rem}

/* Portada */
.portada{position:relative;margin:0 -16px;padding:0 16px;overflow:hidden}
#fondo{position:absolute;inset:0;width:100%;height:100%;z-index:0;pointer-events:none;-webkit-mask-image:linear-gradient(180deg,transparent calc(100dvh - 68px),#000 calc(100dvh + 60px),#000 70%,transparent);mask-image:linear-gradient(180deg,transparent calc(100dvh - 68px),#000 calc(100dvh + 60px),#000 70%,transparent)}
.ast-grande{position:absolute;right:-26vw;top:calc(100dvh - 68px);width:70vw;max-width:1000px;aspect-ratio:1;z-index:0;pointer-events:none;opacity:.09}
.ast-grande svg{width:100%;height:100%;display:block}
@media (prefers-reduced-motion:no-preference){.ast-grande{animation:girar 140s linear infinite}}
@keyframes girar{to{transform:rotate(360deg)}}
.portada .hero{position:relative;z-index:1}
.hero{padding:4.5rem 0 3.5rem;display:grid;grid-template-columns:minmax(0,1.05fr) minmax(0,1fr);gap:2.5rem;align-items:center}
.hero h1{font-size:clamp(2.5rem,5.2vw,4.6rem)}
.hero h1 em{font-style:normal;color:var(--sol)}
.hero p{margin-top:1.4rem;color:var(--lavanda);font-size:1.15rem;max-width:42ch}
.acc{display:flex;gap:.75rem;flex-wrap:wrap;margin-top:2rem}

/* El hub: diagrama vivo */
.hub{position:relative;max-width:600px;margin-left:auto;width:100%}
.hub svg{aspect-ratio:1/1;width:100%;height:100%;display:block;overflow:visible}
.hub .radio{stroke:var(--lavanda);stroke-width:1.5;opacity:.35}
.hub .radio.on{opacity:1;stroke:var(--sol);stroke-width:2}
.hub .rama{stroke:var(--lavanda);stroke-width:1;opacity:.3;transition:opacity .3s,stroke .3s}
.hub .sub{fill:var(--azul);stroke:var(--lavanda);stroke-width:1.2;opacity:.55;transition:opacity .3s,stroke .3s,fill .3s}
.hub .sub-t{font:500 10.5px 'Funnel Sans',sans-serif;fill:var(--lavanda);opacity:.6;transition:opacity .3s,fill .3s}
.hub .ramas.on .rama{opacity:1;stroke:var(--sol)}
.hub .ramas.on .sub{opacity:1;stroke:var(--sol);fill:var(--azul-3)}
.hub .ramas.on .sub-t{opacity:1;fill:#fff}
.hub .centro{fill:var(--blanco)}
.hub .centro-t{font:800 13px 'Bricolage Grotesque',sans-serif;fill:var(--azul);text-anchor:middle}
.hub .area circle{fill:var(--azul-3);stroke:var(--lavanda);stroke-width:1.5;transition:fill .3s,stroke .3s}
.hub .area text{font:600 12.5px 'Funnel Sans',sans-serif;fill:var(--blanco);text-anchor:middle}
.hub .area.on circle{fill:var(--sol);stroke:var(--sol)}
.hub .area.on text{fill:var(--tinta);font-weight:700}
.hub .pulso{fill:none;stroke:var(--sol);stroke-width:2;opacity:0}
.hub .area.on .pulso{animation:pulso 1.4s ease-out}
@keyframes pulso{0%{opacity:.8;transform:scale(1)}100%{opacity:0;transform:scale(1.9)}}
.hub .area .pulso{transform-box:fill-box;transform-origin:center}
.hub .nota{margin:.6rem auto 0;width:fit-content;max-width:100%;background:var(--blanco);color:var(--tinta);padding:.6rem .9rem;border-radius:10px;font-size:.92rem;text-align:center;box-shadow:0 12px 30px -12px rgba(0,0,0,.45);opacity:0;transform:translateY(6px);transition:opacity .3s,transform .3s;min-height:2.6rem}
.hub .nota.on{opacity:1;transform:none}
.hub .nota .q{display:block}
.hub .nota .t{display:block;font-size:.85rem;color:#4B52A0;margin-top:.15rem}
.hub .nota .t b{color:var(--tinta)}
.hub .nota .t em{font-style:normal;color:var(--tinta);font-weight:700;background:var(--sol);padding:0 .35rem;border-radius:4px}
.hub .ej{font-size:.8rem;color:var(--lavanda);text-align:center;margin-top:.4rem}
@media (prefers-reduced-motion:reduce){.hub .area.on .pulso{animation:none}}

/* Manifiesto: el nombre, en dos piezas */
.nombre{padding:6rem 0 5rem;border-top:1px solid var(--linea);display:grid;grid-template-columns:1fr 1fr;gap:3rem}
.nombre .pieza{border-left:2px solid var(--sol);padding-left:1.5rem}
.nombre .palabra{font-family:'Bricolage Grotesque',sans-serif;font-weight:800;font-size:clamp(2.6rem,6.2vw,5.2rem);line-height:.95;letter-spacing:-.04em;text-wrap:balance}
.nombre .frase{font-family:'Bricolage Grotesque',sans-serif;font-weight:800;font-size:clamp(1.6rem,3.2vw,2.6rem);line-height:1.05;letter-spacing:-.03em;color:var(--sol);margin-top:.4rem}
.nombre .expl{font-size:1.15rem;color:var(--lavanda);max-width:36ch;margin-top:1.2rem}

/* El tiempo, en cifras */
.cifras{padding:5.5rem 0;border-top:1px solid var(--linea)}
.cifras h2,.como h2,.hacemos h2{font-size:clamp(1.9rem,3.6vw,3rem);max-width:24ch}
.sub{color:var(--lavanda);margin-top:1rem;max-width:60ch}
.tabla{margin-top:2.5rem}
.tabla .cab,.tabla .r{display:grid;grid-template-columns:1.5fr 1fr 1fr .8fr;gap:1rem;align-items:baseline}
.tabla .cab{color:var(--lavanda);font-size:.8rem;letter-spacing:.04em;text-transform:uppercase;padding-bottom:.8rem;border-bottom:1px solid var(--linea)}
.tabla .r{padding:1.3rem 0;border-bottom:1px solid var(--linea)}
.tabla h3{font-family:'Funnel Sans',sans-serif;font-size:1.15rem;font-weight:700}
.tabla h3 small{display:block;color:var(--lavanda);font-size:.85rem;font-weight:400;margin-top:.15rem}
.tabla .v{font-family:'Bricolage Grotesque',sans-serif;font-weight:800;font-size:1.7rem;letter-spacing:-.02em;font-variant-numeric:tabular-nums}
.tabla .v.hoy{color:var(--lavanda)}
.tabla .v.des{color:var(--lavanda);transition:color .4s}
.tabla .r.hecho .v.des{color:var(--sol)}
.tabla .v.dif{color:var(--sol)}
.tabla .v i{display:block;height:4px;border-radius:2px;background:var(--sol);margin-top:.5rem;width:100%;transform-origin:left;transform:scaleX(var(--p,1))}
.tabla .v.hoy i{background:var(--lavanda);opacity:.5}
.tabla .v .num{display:inline-block;min-width:4.5ch}
.nota-t{color:var(--lavanda);font-size:.85rem;margin-top:1rem}

/* Tus datos: bloque amarillo a sangre */
.datos{margin:3rem -16px 0;padding:5.5rem 16px;background:var(--sol);color:var(--tinta)}
.datos .w{display:grid;grid-template-columns:1fr 1.3fr;gap:3rem;align-items:start}
.datos h2{font-size:clamp(2rem,4vw,3.4rem)}
.datos .sub{color:#4B4A2E;max-width:38ch}
.compromisos{list-style:none;margin:0;padding:0}
.compromisos li{padding:1.4rem 0;border-top:1px solid rgba(15,20,71,.25);display:grid;grid-template-columns:2rem 1fr;gap:1rem;align-items:start}
.compromisos li:last-child{border-bottom:1px solid rgba(15,20,71,.25)}
.compromisos .ast{width:1.4rem;height:1.4rem;margin-top:.15rem}
.compromisos h3{font-size:1.15rem}
.compromisos p{color:#4B4A2E;margin-top:.35rem;max-width:46ch}

/* Cómo trabajamos */
.como{padding:5.5rem 0;border-top:1px solid var(--linea)}
.secuencia{display:grid;grid-template-columns:repeat(5,1fr);gap:1.25rem;margin-top:3rem;counter-reset:n;padding:0;margin-left:0}
.secuencia li{list-style:none;counter-increment:n;border-top:2px solid var(--lavanda);padding-top:1rem}
.secuencia li::before{content:counter(n);display:block;font-family:'Bricolage Grotesque',sans-serif;font-weight:800;font-size:2.6rem;line-height:1;margin-bottom:.6rem}
.secuencia h3{font-size:1.15rem}
.secuencia p{color:var(--lavanda);font-size:.95rem;margin-top:.4rem}
.secuencia b{display:block;margin-top:.7rem;font-weight:700;color:var(--sol);font-size:.9rem}

/* Qué hacemos: lista grande */
.hacemos{padding:5rem 0 6rem;border-top:1px solid var(--linea)}
.lista{margin-top:2.5rem;border-top:1px solid var(--linea)}
.entrada{display:grid;grid-template-columns:5rem 1.1fr 1fr;gap:1rem 2rem;padding:1.8rem 0;border-bottom:1px solid var(--linea);align-items:start;transition:background .25s,padding-left .25s}
.entrada:hover{background:var(--azul-2);padding-left:.8rem}
.entrada .n{font-family:'Bricolage Grotesque',sans-serif;font-weight:800;font-size:2.4rem;color:var(--sol);line-height:1}
.entrada h3{font-size:1.45rem}
.entrada .que{color:var(--lavanda);margin-top:.4rem;max-width:46ch}
.entrada .gana{color:var(--blanco);font-size:.98rem;display:grid;grid-template-columns:1.4rem 1fr;gap:.6rem;align-items:start}
.entrada .gana .ast{width:1.1rem;height:1.1rem;margin-top:.25rem}
.entrada .gana b{color:var(--sol);display:block;font-weight:700}

/* Cierre y pie con el nombre enorme */
.cierre{padding:4.5rem 0 3rem;border-top:1px solid var(--linea);display:grid;grid-template-columns:1fr auto;gap:2rem;align-items:center}
.cierre h2{font-size:clamp(1.9rem,3.6vw,3rem);max-width:20ch}
.cierre p{color:var(--lavanda);margin-top:.8rem}
.pie{padding:1.5rem 0 0;color:var(--lavanda);font-size:.85rem;display:flex;justify-content:space-between;flex-wrap:wrap;gap:.5rem 2rem;border-top:1px solid var(--linea)}
.marca-gigante{margin:1.5rem auto 0;max-width:1180px;overflow:hidden;user-select:none}
.marca-gigante svg{display:block;width:100%;height:auto}
.marca-gigante text{font-family:'Bricolage Grotesque',sans-serif;font-weight:800;font-size:168px;fill:var(--azul-3)}
.marca-gigante .hub{fill:var(--sol)}

@media (max-width:900px){
  .hero{grid-template-columns:1fr;padding-top:3rem}
  .hub{margin:0 auto}
  .ast-grande{width:120vw;right:-40vw;top:calc(100dvh - 68px)}
  .nombre{grid-template-columns:1fr;gap:2.5rem}
  .tabla .cab{display:none}
  .tabla .r{grid-template-columns:1fr 1fr 1fr;gap:.6rem 1rem}
  .tabla .r h3{grid-column:1/-1}
  .datos .w{grid-template-columns:1fr;gap:1.5rem}
  .secuencia{grid-template-columns:1fr 1fr}
  .entrada{grid-template-columns:3.5rem 1fr}
  .entrada .gana{grid-column:2}
  .cierre{grid-template-columns:1fr}
  .menu{display:none}.nav .btn{margin-left:auto}
}
@media (max-width:560px){.secuencia{grid-template-columns:1fr}}

/* Apertura (apertura.js): el hub y el nombre se forman con miles de puntos en WebGL.
   Sin WebGL, con movimiento reducido o con ahorro de datos, el logotipo estático con su red. */
.intro{position:relative;z-index:1;min-height:calc(100vh - 68px);min-height:calc(100svh - 68px);display:flex;flex-direction:column;align-items:center;justify-content:center;padding:0 16px 4rem;text-align:center}
.portada .hero{scroll-margin-top:68px}
.intro-marca{position:relative;margin:0;font-family:'Bricolage Grotesque',system-ui,sans-serif;font-weight:800;font-size:clamp(2.4rem,9vw,7.4rem);letter-spacing:-.01em;line-height:1;display:inline-flex;align-items:center;white-space:nowrap}
.intro-ast{position:relative;width:.62em;height:.62em;margin:0 .06em 0 .12em;color:var(--sol);display:inline-flex}
.intro-ast-svg{position:relative;z-index:2;width:100%;height:100%;display:block}
.intro-red{position:absolute;left:50%;top:50%;width:5.2em;height:5.2em;transform:translate(-50%,-50%);overflow:visible;z-index:0;pointer-events:none}
.intro-red line{stroke:var(--lavanda);stroke-width:1.6;stroke-linecap:round;opacity:.9}
.intro-red circle{fill:var(--azul);stroke:var(--blanco);stroke-width:1.8}
.intro-hub{position:relative;z-index:2;color:var(--sol)}
.intro-cap{margin:clamp(1.6rem,9.8vw,7.8rem) 0 0;max-width:46ch;color:var(--blanco);font-size:clamp(1.1rem,2vw,1.4rem);font-weight:500;line-height:1.35}
.intro-baja{position:absolute;left:50%;bottom:22px;margin:0;transform:translateX(-50%);display:flex;flex-direction:column;align-items:center;gap:.6rem;font-size:12px;font-weight:700;letter-spacing:.2em;text-transform:uppercase;color:var(--lavanda)}
.intro-baja::after{content:"";width:1px;height:36px;background:linear-gradient(var(--lavanda),transparent)}
.intro-saltar{position:absolute;left:16px;bottom:16px;z-index:2;background:none;border:1px solid var(--linea);color:var(--lavanda);font:inherit;font-size:.85rem;padding:.4rem .9rem;border-radius:999px;cursor:pointer}
.intro-saltar:hover{color:#fff;border-color:#fff}
.intro-lienzo{display:none}
/* Apertura animada: el lienzo cubre la ventana (para poder volar hasta la cabecera) y no recibe clics */
html.apertura-viva .intro-lienzo{display:block;position:fixed;top:0;left:0;width:100%;height:100%;z-index:11;pointer-events:none}
html.menu-abierto .intro-lienzo{visibility:hidden!important}
html.apertura-viva .intro-marca{position:absolute;width:1px;height:1px;overflow:hidden;clip:rect(0 0 0 0);clip-path:inset(50%)}
html.apertura-viva .intro-cap{position:absolute;left:16px;right:16px;margin:0 auto;opacity:0;transform:translateY(16px);filter:blur(8px);transition:opacity .8s cubic-bezier(.16,1,.3,1),transform .8s cubic-bezier(.16,1,.3,1),filter .8s cubic-bezier(.16,1,.3,1)}
html.apertura-viva .intro-cap.en{opacity:1;transform:none;filter:none}
/* La frase del principio: explica lo que se ve mientras los datos están sueltos */
.intro-antes{display:none}
html.apertura-viva .intro-antes{display:block;position:absolute;left:16px;right:16px;margin:0 auto;max-width:46ch;text-align:center;color:var(--lavanda);font-size:clamp(1.05rem,1.8vw,1.3rem);font-weight:500;line-height:1.35;opacity:0;transform:translateY(10px);filter:blur(6px);transition:opacity .7s cubic-bezier(.16,1,.3,1),transform .7s cubic-bezier(.16,1,.3,1),filter .7s cubic-bezier(.16,1,.3,1)}
html.apertura-viva .intro-antes.en{opacity:1;transform:none;filter:none}
.intro-baja,.intro-saltar{transition:opacity .3s ease}
.intro.fuera .intro-cap,.intro.fuera .intro-baja,.intro.fuera .intro-saltar{opacity:0!important;transition-duration:.3s;transition-delay:0s}
/* Primera visita: al principio solo la apertura. La cabecera, "Saltar", "Desliza" y el asistente
   esperan a que el logotipo esté formado (apertura.js quita apertura-sola) y llegan escalonados */
html.apertura-sola .nav{opacity:0;visibility:hidden;transform:translateY(-14px)}
html.apertura-sola .intro-baja,html.apertura-sola .intro-saltar,html.apertura-sola .chat-boton{opacity:0;visibility:hidden}
html.apertura-viva .nav{transition:opacity .9s cubic-bezier(.16,1,.3,1),transform .9s cubic-bezier(.16,1,.3,1)}
html.apertura-viva .intro-baja,html.apertura-viva .intro-saltar{transition:opacity .8s ease .35s}
html.apertura-viva .chat-boton{transition:transform .2s cubic-bezier(.2,.8,.2,1),background .2s,opacity .8s ease .55s}
/* Las seis palabras de datos que se deshacen en puntos */
.intro-datos{position:absolute;inset:0;pointer-events:none}
.intro-dato{position:absolute;padding:.2em .1em;color:var(--lavanda);font-size:clamp(13px,1.1vw,16px);font-weight:500;line-height:1.3;white-space:nowrap;opacity:0;transform:translateY(8px) scale(.96);transition:opacity .5s cubic-bezier(.16,1,.3,1),transform .6s cubic-bezier(.34,1.56,.64,1)}
.intro-dato.principal{color:var(--blanco);font-size:clamp(15px,1.35vw,20px);font-weight:700}
.intro-dato.cifra{color:var(--blanco);font-weight:700;font-size:clamp(14px,1.3vw,19px);font-variant-numeric:tabular-nums;text-align:left}
.intro-datos.en .intro-dato{opacity:1;transform:none}
/* Cada grupo como una ficha: etiqueta pequeña, la cifra de protagonista y una nota */
.intro-dato.principal{color:var(--lavanda);font-size:clamp(12px,1vw,14px);font-weight:600}
.intro-dato.cifra{font-size:clamp(17px,1.5vw,22px)}
.intro-dato:not(.principal):not(.cifra){color:rgba(185,192,255,.82);font-size:clamp(12px,1vw,15px)}
/* Al deshacerse, cada letra se desvanece por turno mientras su polvo de puntos sale de ella */
.intro-dato .ch{display:inline-block;white-space:pre;transition:opacity .22s ease,transform .3s ease,filter .22s ease}
.intro-datos .intro-dato.fuera .ch{opacity:0;transform:translate(2px,-4px);filter:blur(2px)}
.intro-datos.quieto .intro-dato{opacity:0!important}
/* Llegada a la cabecera: el asterisco del logotipo se enciende un instante */
.nav .logo svg{transition:transform .3s cubic-bezier(.34,1.56,.64,1),filter .3s ease}
.nav .logo.llega svg{transform:scale(1.25);filter:drop-shadow(0 0 6px rgba(255,216,77,.9))}
@keyframes latido{0%,100%{transform:scale(1)}12%{transform:scale(1.14)}24%{transform:scale(1)}}
@keyframes onda{0%{opacity:.7;transform:scale(.3)}45%{opacity:0;transform:scale(1)}100%{opacity:0;transform:scale(1)}}
@keyframes viaje{0%{opacity:0;offset-distance:0%}10%{opacity:1}55%{opacity:1;offset-distance:100%}60%{opacity:0}100%{opacity:0;offset-distance:100%}}

/* Inmersión: entrar en un área del hub */
.hub .area{cursor:pointer;outline:none}
.hub .area:focus-visible circle{stroke:#fff;stroke-width:3}
html.inmerso{overflow:hidden}
.inmersion{position:fixed;inset:0;z-index:30}
.inmersion-fondo{position:absolute;inset:0;background:var(--azul-2);clip-path:circle(0 at var(--cx,50%) var(--cy,50%));transition:clip-path .7s cubic-bezier(.3,.7,.2,1)}
.inmersion.abierta .inmersion-fondo{clip-path:circle(150% at var(--cx,50%) var(--cy,50%))}
.inmersion-panel{position:absolute;inset:0;overflow-y:auto;overscroll-behavior:contain;padding:0 16px 5rem;opacity:0;transform:translateY(14px);transition:opacity .45s ease .3s,transform .55s cubic-bezier(.2,.8,.2,1) .3s}
.inmersion.abierta .inmersion-panel{opacity:1;transform:none}
.inmersion.cerrando .inmersion-panel{opacity:0;transform:translateY(10px);transition-delay:0s}
.volver{position:sticky;top:0;z-index:2;display:inline-flex;align-items:center;gap:.4rem;margin:1rem 0 0;background:var(--azul-2);border:1px solid var(--linea);color:var(--blanco);font:inherit;font-weight:600;padding:.55rem 1rem .55rem .7rem;border-radius:999px;cursor:pointer}
.volver svg{width:18px;height:18px}
.volver:hover{border-color:#fff}
.area{max-width:860px;margin:0 auto;padding:2rem 0 0}
.area-cab{margin-bottom:1.5rem}
.area-eti{color:var(--sol);font-weight:600;font-size:.9rem;margin-bottom:.6rem}
.area h2{font-size:clamp(2.2rem,5vw,3.6rem)}
.area-sub{color:var(--lavanda);font-size:1.15rem;margin-top:.8rem;max-width:44ch}
.area section{padding:1.8rem 0;border-top:1px solid var(--linea)}
.area h3{font-size:1.25rem;margin-bottom:1rem}
.area-nota{color:var(--lavanda);font-size:.85rem;margin-top:.8rem}
.area-chips{display:flex;flex-wrap:wrap;gap:.5rem}
.area-chips span{border:1px solid var(--linea);border-radius:999px;padding:.35rem .8rem;font-size:.92rem}
.area-cta{display:flex;flex-wrap:wrap;gap:.75rem;padding-top:2rem}
/* ¿Te suena?: mini hub con tres satélites */
.suena{display:grid;grid-template-columns:minmax(0,300px) 1fr;gap:1.5rem;align-items:center}
.suena-svg{width:100%;height:auto;overflow:visible}
.suena-svg .enlace{stroke:var(--lavanda);stroke-width:1.5;opacity:.35;transition:opacity .3s,stroke .3s}
.suena-svg .enlace.on{stroke:var(--sol);opacity:1}
.suena-svg .sat{cursor:pointer}
.suena-svg .sat circle{fill:var(--azul-3);stroke:var(--lavanda);stroke-width:1.5;transition:fill .3s,stroke .3s}
.suena-svg .sat.on circle{fill:var(--sol);stroke:var(--sol)}
.suena-svg .sat text{font:700 15px 'Bricolage Grotesque',sans-serif;fill:var(--blanco);text-anchor:middle;dominant-baseline:middle}
.suena-svg .sat.on text{fill:var(--tinta)}
.suena-svg .onda{fill:none;stroke:var(--sol);stroke-width:2;opacity:0;transform-box:fill-box;transform-origin:center}
.suena-svg .sat.on .onda{animation:onda 1.4s ease-out}
.suena-svg .centro{fill:var(--blanco)}
.suena-svg .centro-t{font:800 13px 'Bricolage Grotesque',sans-serif;fill:var(--azul);text-anchor:middle;dominant-baseline:middle}
.suena-frase{font-family:'Bricolage Grotesque',system-ui,sans-serif;font-weight:700;font-size:clamp(1.3rem,2.8vw,1.9rem);line-height:1.15;letter-spacing:-.015em;min-height:3.4em;transition:opacity .25s,transform .3s}
.suena-frase.cambio{opacity:0;transform:translateY(6px)}
/* Flujo: entradas, IA, salidas */
.area-ia{color:var(--lavanda);max-width:60ch;margin-bottom:1rem}
.flujo-svg{width:100%;height:auto;overflow:visible;display:block}
.flujo-svg .via{fill:none;stroke:var(--lavanda);stroke-width:1.5;opacity:.45}
.flujo-svg .caja rect{fill:var(--azul-3);stroke:var(--lavanda);stroke-width:1.2}
.flujo-svg .caja.salida rect{stroke:var(--sol)}
.flujo-svg .caja text{font:600 13px 'Funnel Sans',sans-serif;fill:var(--blanco);text-anchor:middle;dominant-baseline:middle}
.flujo-svg .ia{fill:var(--sol)}
.flujo-svg .ia-onda{fill:none;stroke:var(--sol);stroke-width:1.5;opacity:0;transform-box:fill-box;transform-origin:center}
@media (prefers-reduced-motion:no-preference){.flujo-svg .ia-onda{animation:onda 2.4s ease-out infinite}.flujo-svg .ia{animation:latido 2.4s ease-in-out infinite;transform-box:fill-box;transform-origin:center}}
.flujo-svg .dato{fill:var(--sol);opacity:0}
@media (prefers-reduced-motion:no-preference){.flujo-svg .dato{animation:viaje 3s linear infinite}}
/* Antes y después: cuenta atrás */
.reloj{border:1px solid var(--linea);border-radius:16px;padding:1.2rem 1.4rem}
.reloj-cab,.reloj-pie{display:flex;justify-content:space-between;gap:1rem;color:var(--lavanda);font-size:.85rem}
.reloj-cab{text-transform:uppercase;letter-spacing:.06em;font-size:.75rem}
.reloj-des{color:var(--sol);text-align:right}
.reloj-num{display:flex;justify-content:space-between;align-items:baseline;gap:1rem;margin:.4rem 0}
.reloj-num .n{font-family:'Bricolage Grotesque',system-ui,sans-serif;font-weight:800;font-size:clamp(2.4rem,7vw,4.4rem);letter-spacing:-.03em;line-height:1;font-variant-numeric:tabular-nums;transition:color .4s}
.reloj.hecho .reloj-num .n{color:var(--sol)}
.reloj-fin{font-family:'Bricolage Grotesque',system-ui,sans-serif;font-weight:800;font-size:1.4rem;color:var(--sol);opacity:0;transition:opacity .4s}
.reloj.hecho .reloj-fin{opacity:1}
.reloj-barra{height:10px;border-radius:5px;background:rgba(244,245,255,.12);overflow:hidden;margin:.6rem 0 .8rem}
.reloj-barra i{display:block;height:100%;background:var(--sol);border-radius:5px;transform-origin:left;transform:scaleX(var(--p,1))}
.reloj-pie span{max-width:46%}
.ad-simple{display:grid;grid-template-columns:1fr 1fr;gap:1rem}
.ad-simple>div{border:1px solid var(--linea);border-radius:14px;padding:1rem 1.2rem}
.ad-simple>div.des{border-color:var(--sol)}
.ad-t{display:block;font-size:.75rem;letter-spacing:.06em;text-transform:uppercase;color:var(--lavanda);margin-bottom:.4rem}
.ad-simple .des .ad-t{color:var(--sol)}
/* Cómo lo implantamos: recorrido */
.ruta{list-style:none;margin:0;padding:0;display:grid;grid-template-columns:repeat(4,1fr);gap:1rem;position:relative}
.ruta::before{content:'';position:absolute;left:0;right:0;top:9px;height:2px;background:rgba(244,245,255,.18)}
.ruta::after{content:'';position:absolute;left:0;top:9px;height:2px;width:var(--w,0%);background:var(--sol);transition:width .6s ease}
.ruta li{position:relative;padding-top:1.6rem}
.ruta-p{position:absolute;left:0;top:0;width:20px;height:20px;border-radius:50%;background:var(--azul-2);border:2px solid var(--lavanda);transition:background .3s,border-color .3s,transform .3s}
.ruta li.on .ruta-p{background:var(--sol);border-color:var(--sol);transform:scale(1.15)}
.ruta b{display:block;font-family:'Bricolage Grotesque',system-ui,sans-serif;font-weight:700;font-size:1.02rem;line-height:1.2;opacity:.55;transition:opacity .3s}
.ruta li.on b{opacity:1}
.ruta small{display:block;color:var(--sol);margin-top:.3rem;font-size:.82rem;opacity:0;transition:opacity .3s}
.ruta li.on small{opacity:1}
@media (max-width:700px){.suena{grid-template-columns:1fr}.ruta{grid-template-columns:1fr 1fr}.ad-simple{grid-template-columns:1fr}.reloj-pie span{max-width:none}.reloj-pie{flex-direction:column}.reloj-des{text-align:left}}
@media (prefers-reduced-motion:reduce){.inmersion-fondo,.inmersion-panel{transition:none}}

/* Imán de los botones principales (movimiento.js): translate, para no pisar el transform del hover */
[data-iman]{transition:transform .18s cubic-bezier(.2,.8,.2,1),background .18s,translate .6s ease-in-out}
[data-iman].iman-on{transition:transform .18s cubic-bezier(.2,.8,.2,1),background .18s,translate .3s ease-out}

/* ===== Escenas de la portada (escenas.js): una pantalla cada una, sobre una sola red de puntos ===== */
html{scroll-padding-top:68px}
/* La red de puntos va por encima de los fondos de cada escena y por debajo de los textos */
.escenas-lienzo{position:fixed;top:0;left:0;width:100%;height:100%;z-index:1;pointer-events:none;opacity:0;transition:opacity .6s ease}
.escenas-lienzo.visible{opacity:1}
.portada .hero{z-index:auto}
.escena{position:relative;min-height:calc(100vh - 68px);min-height:calc(100svh - 68px);padding:4.5rem 0;display:grid;align-content:center}
.escena-dentro{position:relative;z-index:2}
.escena .eti-escena,.eti-escena{margin:0 0 1rem;font-size:.78rem;font-weight:700;letter-spacing:.16em;text-transform:uppercase;color:var(--sol)}
.escena h2{font-size:clamp(2rem,4vw,3.4rem);max-width:20ch}
.escena .sub{margin-top:1rem;color:var(--lavanda);max-width:46ch;font-size:1.08rem}
/* Portada: los enlaces y los anillos del hub los dibujan los puntos */
.hero.escena{padding:3rem 0}
.hub .radio,.hub .radio.on{stroke:transparent}
.hub .area circle{stroke:transparent}

/* El tiempo: reloj de puntos y calculadora */
.tiempo{grid-template-columns:minmax(0,1.1fr) minmax(0,.9fr);column-gap:3rem;align-items:center}
.procesos{display:flex;flex-wrap:wrap;gap:.5rem;margin-top:1.8rem}
.procesos button{font:inherit;font-weight:600;font-size:.92rem;padding:.55rem 1rem;border-radius:999px;border:1px solid var(--linea);background:rgba(15,20,71,.25);color:var(--blanco);cursor:pointer;transition:background .2s,border-color .2s,color .2s}
.procesos button:hover{border-color:#fff}
.procesos button[aria-selected=true]{background:var(--blanco);color:var(--azul);border-color:var(--blanco)}
.procesos button:focus-visible{outline:2px solid var(--sol);outline-offset:3px}
.tiempo-cifras{display:flex;align-items:flex-end;gap:1.2rem;flex-wrap:wrap;margin-top:2rem}
.tiempo-cifras span{display:block;font-size:.76rem;font-weight:700;letter-spacing:.12em;text-transform:uppercase;color:var(--lavanda);margin-bottom:.3rem}
.tiempo-cifras b{display:block;font-family:'Bricolage Grotesque',sans-serif;font-weight:800;font-size:clamp(2.2rem,4.4vw,3.6rem);line-height:1;letter-spacing:-.03em;font-variant-numeric:tabular-nums;color:var(--lavanda)}
.tiempo-cifras .des b{color:var(--blanco)}
.tiempo-cifras .flecha{font-size:1.8rem;color:var(--lavanda);padding-bottom:.35rem}
.tiempo-cifras small{flex-basis:100%;color:var(--lavanda);font-size:.9rem}
.tiempo-que{margin-top:1rem;color:var(--lavanda);max-width:46ch}
.tiempo-que a{color:var(--blanco);font-weight:600}
.calc{margin-top:1.6rem;padding:1.1rem 1.2rem;border:1px solid var(--linea);border-radius:18px;background:rgba(15,20,71,.22);max-width:460px}
.calc label{display:block;font-size:.92rem;color:var(--lavanda)}
.calc label b{color:var(--blanco)}
.calc input[type=range]{width:100%;margin:.7rem 0 .4rem;accent-color:var(--sol)}
.calc-res{margin:0;color:var(--blanco)}
.calc-res b{font-family:'Bricolage Grotesque',sans-serif;font-size:1.6rem;color:var(--sol);font-variant-numeric:tabular-nums}
.calc-res small{display:block;color:var(--lavanda);font-size:.85rem}
.tiempo .nota-t{margin-top:1rem;font-size:.82rem;color:var(--lavanda);opacity:.85}
.reloj-puntos{position:relative;aspect-ratio:1;width:min(100%,500px);justify-self:center}
.reloj-centro{position:absolute;inset:0;display:grid;place-content:center;text-align:center}
.reloj-centro b{font-family:'Bricolage Grotesque',sans-serif;font-weight:800;font-size:clamp(2.6rem,5vw,4.2rem);color:var(--sol);line-height:1;letter-spacing:-.03em;font-variant-numeric:tabular-nums}
.reloj-centro span{margin-top:.4rem;color:var(--lavanda);font-size:.9rem}

/* Cómo trabajamos: un camino de cinco paradas y las formas de entrar */
.pasos{list-style:none;margin:2.6rem 0 0;padding:0;display:grid;grid-template-columns:repeat(5,1fr);gap:1.2rem}
.pasos button{all:unset;box-sizing:border-box;display:block;width:100%;cursor:pointer;position:relative;padding-top:2.5rem}
.paso-marca{position:absolute;top:.3rem;left:0;width:12px;height:12px;border-radius:50%;background:var(--azul);box-shadow:0 0 0 2px var(--lavanda);transition:background .3s,box-shadow .3s}
.paso-n{display:block;font-family:'Bricolage Grotesque',sans-serif;font-weight:800;font-size:.95rem;color:var(--lavanda);letter-spacing:.04em}
.pasos h3{font-size:1.25rem;margin:.3rem 0 .4rem;color:var(--lavanda);transition:color .3s}
.pasos p{margin:0;color:var(--lavanda);font-size:.95rem;opacity:.7;transition:opacity .3s}
.pasos em{display:block;margin-top:.6rem;font-style:normal;font-weight:700;font-size:.88rem;color:var(--lavanda);transition:color .3s}
.pasos li.activo h3,.pasos li.relacion h3{color:var(--blanco)}
.pasos li.activo p,.pasos li.relacion p{opacity:1}
.pasos li.activo em{color:var(--sol)}
.pasos li.activo .paso-marca,.pasos li.hecho .paso-marca{background:var(--sol);box-shadow:0 0 0 2px var(--sol)}
.pasos button:focus-visible{outline:2px solid var(--sol);outline-offset:6px;border-radius:8px}
.formas-t{margin:3rem 0 1rem;font-size:.78rem;font-weight:700;letter-spacing:.16em;text-transform:uppercase;color:var(--lavanda)}
.formas{display:grid;grid-template-columns:repeat(4,1fr);gap:1rem}
.forma{display:flex;flex-direction:column;gap:.5rem;padding:1.3rem;border:1px solid var(--linea);border-radius:20px;background:rgba(15,20,71,.22);text-decoration:none;color:var(--blanco);transition:border-color .25s,background .25s,transform .25s}
.forma:hover,.forma:focus-visible{border-color:var(--sol);background:var(--azul-2);transform:translateY(-3px)}
.forma h3{font-size:1.15rem}
.forma p{margin:0;color:var(--lavanda);font-size:.92rem;flex:1}
.forma span{font-size:.84rem;font-weight:700;color:var(--sol)}

/* Tus datos: la casa de puntos */
.datos.escena{margin:0 -16px;padding:4.5rem 16px}
.datos-dentro{display:grid;grid-template-columns:1fr 1fr;gap:3rem;align-items:center;width:100%}
.datos .eti-escena{color:var(--tinta)}
.datos.escena .sub{color:#4B4A2E}
.datos h2{color:var(--tinta)}
.compromisos{margin-top:1.8rem}
.compromisos li{cursor:pointer;padding:1.1rem .8rem;border-radius:12px;transition:background .25s}
.compromisos li:hover,.compromisos li.on,.compromisos li:focus-visible{background:rgba(15,20,71,.07);outline:none}
.compromisos li.on h3{text-decoration:underline;text-decoration-thickness:2px;text-underline-offset:4px}
.casa{position:relative;aspect-ratio:1/.9;width:min(100%,520px);justify-self:center}
.casa-eti{position:absolute;left:50%;bottom:2%;transform:translateX(-50%);font-size:.78rem;font-weight:700;letter-spacing:.14em;text-transform:uppercase;color:var(--tinta)}
.casa-fuera{position:absolute;right:-4%;top:22%;max-width:9.5rem;padding:.4rem .7rem;border:1.5px dashed var(--tinta);border-radius:12px;font-size:.78rem;font-weight:600;line-height:1.3;color:var(--tinta);opacity:0;transform:translateX(8px);transition:opacity .4s,transform .4s}
html.datos-fuera .casa-fuera{opacity:1;transform:none}

/* Un solo sitio: las tarjetas alrededor de un centro */
.constelacion{display:grid;grid-template-columns:1fr minmax(180px,.7fr) 1fr;gap:1.5rem;margin-top:2.6rem;align-items:center}
.const-col{display:flex;flex-direction:column;gap:1rem}
.const-col a{display:block;padding:1.1rem 1.3rem;border:1px solid var(--linea);border-radius:18px;background:rgba(15,20,71,.28);text-decoration:none;color:var(--blanco);transition:border-color .25s,background .25s,transform .25s}
.const-col a:hover,.const-col a:focus-visible{border-color:var(--sol);background:var(--azul-2);transform:translateY(-2px)}
.const-col h3{font-size:1.2rem}
.const-col h3 em{font-style:normal;color:var(--sol)}
.const-col p{margin:.35rem 0 .5rem;color:var(--lavanda);font-size:.92rem}
.const-col b{font-size:.84rem;color:var(--sol)}
.const-centro{aspect-ratio:1;width:100%}

/* Cierre: el hub pequeño junto a la llamada */
.cierre.escena{grid-template-columns:1.2fr .8fr;gap:2rem;align-items:center;border-top:0;padding:4.5rem 0}
.cierre-texto h2{font-size:clamp(2.2rem,4.6vw,3.8rem);max-width:16ch}
.cierre-texto p{margin-top:1rem;color:var(--lavanda);font-size:1.1rem}
.cierre-texto .acc{margin-top:1.8rem}
.cierre-hub{aspect-ratio:1;width:min(100%,380px);justify-self:center}

@media (max-width:900px){
  .tiempo{grid-template-columns:1fr}
  .reloj-puntos{width:min(86%,380px);margin-top:2rem}
  .pasos{grid-template-columns:1fr;gap:.3rem}
  .pasos button{padding:0 0 1.1rem 2.2rem}
  .paso-marca{top:.45rem}
  .formas{grid-template-columns:1fr 1fr}
  .datos-dentro{grid-template-columns:1fr}
  .casa{width:min(84%,360px)}
  .casa-fuera{right:0}
  .constelacion{grid-template-columns:1fr}
  .const-centro{display:none}
  .cierre.escena{grid-template-columns:1fr}
  .cierre-hub{width:min(70%,280px)}
}
@media (max-width:560px){.formas{grid-template-columns:1fr}.escena{padding:3.5rem 0}.hero.escena{padding:2rem 0}}

/* El VademecumHub gigante del pie: los puntos se posan encima y se funden en él (escenas.js), con un destello al llegar */
.marca-gigante svg{transition:filter .9s ease}
.marca-gigante.llega svg{filter:brightness(1.45);transition-duration:.15s}

/* ===== El hub en acción (escena 02): azul noche, la demo de entrada → hub → salida ===== */
.demo.escena{margin:0 -16px;padding:4.5rem 16px;background:var(--tinta)}
.demo-dentro{width:100%}
.demo-cab h2{max-width:18ch}
.demo-casos{display:flex;flex-wrap:wrap;gap:.5rem;margin-top:1.6rem}
.demo-casos button{font:inherit;font-weight:600;font-size:.92rem;padding:.55rem 1rem;border-radius:999px;border:1px solid rgba(244,245,255,.2);background:transparent;color:var(--blanco);cursor:pointer;transition:background .2s,border-color .2s,color .2s}
.demo-casos button:hover{border-color:#fff}
.demo-casos button[aria-selected=true]{background:var(--blanco);color:var(--tinta);border-color:var(--blanco)}
.demo-casos button:focus-visible,.demo-otra:focus-visible{outline:2px solid var(--sol);outline-offset:3px}
.demo-mesa{display:grid;grid-template-columns:minmax(0,1fr) minmax(160px,220px) minmax(0,1fr);gap:2rem;align-items:center;margin-top:2.4rem}
.demo-panel{position:relative;min-height:320px;border:1px solid rgba(244,245,255,.12);border-radius:22px;background:rgba(27,42,219,.14);padding:1.3rem 1.4rem;overflow:hidden}
.demo-hub{aspect-ratio:1;width:100%}
.demo-pie{display:flex;justify-content:space-between;align-items:center;gap:1rem 1.5rem;flex-wrap:wrap;margin-top:1.8rem}
.demo-reloj{display:flex;align-items:baseline;gap:.55rem;margin:0;color:var(--lavanda);font-size:.82rem;letter-spacing:.08em;text-transform:uppercase;font-weight:700}
.demo-reloj b{font-family:'Bricolage Grotesque',sans-serif;font-size:clamp(1.6rem,2.6vw,2.2rem);letter-spacing:-.02em;text-transform:none;color:var(--lavanda);font-variant-numeric:tabular-nums;margin-right:.6rem}
.demo-reloj b.des{color:var(--sol)}
.demo-reloj .flecha{font-size:1.3rem;margin-right:.6rem}
.demo-nota{margin:0;font-size:.84rem;color:var(--lavanda)}
.demo-otra{background:none;border:0;padding:0;margin-left:.35rem;font:inherit;font-weight:700;color:var(--blanco);text-decoration:underline;text-underline-offset:3px;cursor:pointer}
/* Entrada */
.de-cab,.ds-cab small{display:flex;align-items:center;gap:.5rem;margin:0 0 1rem;font-size:.74rem;font-weight:700;letter-spacing:.1em;text-transform:uppercase;color:var(--lavanda)}
.de-cab svg{width:16px;height:16px}
.de-onda{display:flex;align-items:center;gap:3px;height:38px;margin-bottom:1rem}
.de-onda i{flex:1;max-width:4px;border-radius:2px;background:var(--lavanda);height:calc(var(--h) * 1%);opacity:.55;transform-origin:center}
.demo-panel.sonando .de-onda i{animation:onda-voz .9s ease-in-out infinite;animation-delay:calc(var(--k) * -70ms);opacity:.9}
@keyframes onda-voz{0%,100%{transform:scaleY(.45)}50%{transform:scaleY(1)}}
.de-texto{margin:0;font-size:.98rem;line-height:1.6;color:var(--blanco)}
.de-texto span{opacity:.14;transition:opacity .25s ease}
.de-texto span.en{opacity:1}
.de-hojas{display:grid;gap:.7rem}
.de-hoja b{display:block;margin-bottom:.3rem;font-size:.74rem;font-weight:700;letter-spacing:.06em;color:var(--lavanda)}
.de-hoja table{width:100%;border-collapse:collapse;font-size:.76rem;font-variant-numeric:tabular-nums}
.de-hoja td{border:1px solid rgba(244,245,255,.12);padding:.22rem .4rem;color:var(--blanco);opacity:.25;transition:opacity .25s}
.de-hoja td.en{opacity:1}
.de-hoja td.mal{color:#ffb4a6;background:rgba(255,120,100,.1)}
.de-hoja td.dup{background:rgba(255,216,77,.12)}
.de-correo dl{display:grid;grid-template-columns:4rem 1fr;gap:.3rem .6rem;margin:0 0 1rem;font-size:.84rem}
.de-correo dt{color:var(--lavanda)}
.de-correo dd{margin:0;color:var(--blanco)}
.de-correo p{margin:.5rem 0 0;color:var(--blanco);font-size:.96rem;line-height:1.55}
.de-correo .de-texto span{opacity:.14}
/* Salida */
.ds-cab{margin:0 0 .8rem}
.ds-cab h3{font-size:1.3rem;margin-top:-.4rem}
.ds-campos{margin:0;display:grid;gap:0}
.ds-campo{display:grid;grid-template-columns:8.5rem 1fr;gap:.8rem;padding:.55rem 0;border-bottom:1px dashed rgba(244,245,255,.14);opacity:.3;transition:opacity .3s}
.ds-campo.en{opacity:1}
.ds-campo dt{font-size:.72rem;font-weight:700;letter-spacing:.08em;text-transform:uppercase;color:var(--lavanda);padding-top:.15rem}
.ds-campo dd{margin:0;color:var(--blanco);font-size:.95rem;min-height:1.3em}
.ds-campo.clave dd{color:var(--sol);font-weight:700}
.ds-texto{margin:.4rem 0 0;color:var(--blanco);font-size:.96rem;line-height:1.55;min-height:6.5em}
.ds-acciones{display:flex;gap:.5rem;margin-top:1rem;opacity:0;transition:opacity .4s}
.ds-acciones.en{opacity:1}
.ds-acciones span{padding:.45rem .9rem;border-radius:999px;font-size:.82rem;font-weight:700;background:var(--sol);color:var(--tinta)}
.ds-acciones span+span{background:transparent;color:var(--blanco);border:1px solid rgba(244,245,255,.25)}
.escribe::after{content:"";display:inline-block;width:2px;height:1em;margin-left:2px;vertical-align:-.15em;background:var(--sol);animation:parpadeo .8s steps(2) infinite}
@keyframes parpadeo{50%{opacity:0}}
@media (max-width:900px){
  .demo-mesa{grid-template-columns:1fr;gap:1rem}
  .demo-hub{width:150px;justify-self:center}
  .demo-panel{min-height:0}
  .ds-campo{grid-template-columns:6.5rem 1fr}
}

/* ===== Hub de la portada entero en puntos (cuando hay WebGL): el SVG solo pone los nombres ===== */
html.puntos-vivos .hub .area circle,html.puntos-vivos .hub .area.on circle{fill:transparent;stroke:transparent}
html.puntos-vivos .hub .area text{fill:var(--blanco);transition:fill .25s}
html.puntos-vivos .hub .area.on text{fill:var(--sol)}
html.puntos-vivos .hub .area text .ia{fill:var(--sol)}
html.puntos-vivos .hub .area.on text{fill:var(--blanco)}
html.puntos-vivos .hub .area.on text .ia{fill:var(--sol)}
html.puntos-vivos .hub .centro{fill:transparent}
html.puntos-vivos .hub .centro-t{display:none}
html.puntos-vivos .hub .rama,html.puntos-vivos .hub .ramas.on .rama{stroke:transparent}
html.puntos-vivos .hub .sub,html.puntos-vivos .hub .ramas.on .sub{fill:transparent;stroke:transparent}
html.puntos-vivos .hub .pulso{display:none}
.hub .nota{background:rgba(15,20,71,.55);color:var(--blanco);border:1px solid rgba(244,245,255,.16);backdrop-filter:blur(8px)}
.hub .nota .t{color:var(--lavanda)}
.hub .nota .t b{color:var(--blanco)}

/* ===== Etiquetas numeradas ===== */
.escena .eti-escena{white-space:nowrap}
.eti-escena .n{display:inline-block;margin-right:.7rem;padding-right:.7rem;border-right:1px solid currentColor;opacity:.75}

/* ===== Titulares que entran palabra a palabra, como saliendo de una ranura (escenas.js) ===== */
html.texto-vivo .pal{display:inline-block;overflow:hidden;vertical-align:top;padding-bottom:.12em;margin-bottom:-.12em}
html.texto-vivo .pal>span{display:inline-block;transform:translateY(108%);transition:transform .9s cubic-bezier(.16,1,.3,1);transition-delay:calc(var(--i) * 45ms)}
html.texto-vivo .vista .pal>span{transform:none}
html.texto-vivo [data-escena] .eti-escena,html.texto-vivo [data-escena] .sub{opacity:0;transform:translateY(10px);transition:opacity .7s ease .15s,transform .9s cubic-bezier(.16,1,.3,1) .15s}
html.texto-vivo [data-escena].vista .eti-escena,html.texto-vivo [data-escena].vista .sub{opacity:1;transform:none}

/* ===== Índice lateral de escenas ===== */
.indice{position:fixed;right:22px;top:50%;z-index:9;display:flex;flex-direction:column;gap:14px;transform:translateY(-50%);opacity:0;pointer-events:none;transition:opacity .4s}
html[data-escena] .indice{opacity:1;pointer-events:auto}
.indice a{position:relative;display:flex;align-items:center;justify-content:flex-end;gap:.6rem;text-decoration:none;color:var(--blanco)}
.indice i{width:7px;height:7px;border-radius:50%;background:transparent;box-shadow:0 0 0 1.5px rgba(185,192,255,.7);transition:background .3s,box-shadow .3s,transform .3s}
.indice span{position:absolute;right:20px;white-space:nowrap;font-size:.78rem;font-weight:700;letter-spacing:.04em;padding:.25rem .6rem;border-radius:999px;background:rgba(15,20,71,.7);opacity:0;transform:translateX(6px);transition:opacity .25s,transform .25s;pointer-events:none}
.indice a:hover span,.indice a:focus-visible span{opacity:1;transform:none}
.indice a.hecho i{background:rgba(185,192,255,.7)}
.indice a.activo i{background:var(--sol);box-shadow:0 0 0 1.5px var(--sol);transform:scale(1.35)}
html[data-escena=datos] .indice i{box-shadow:0 0 0 1.5px rgba(15,20,71,.6)}
html[data-escena=datos] .indice a.hecho i{background:rgba(15,20,71,.6)}
html[data-escena=datos] .indice a.activo i{background:var(--tinta);box-shadow:0 0 0 1.5px var(--tinta)}
@media (max-width:1100px){.indice{display:none}}

/* ===== Botones: al pasar el ratón se rellenan de puntos ===== */
.btn{position:relative;isolation:isolate;overflow:hidden}
.btn::after{content:"";position:absolute;inset:0;z-index:-1;background-image:radial-gradient(currentColor 1px,transparent 1.6px);background-size:7px 7px;opacity:0;transform:translateX(-14px);transition:opacity .35s ease,transform .7s cubic-bezier(.16,1,.3,1);pointer-events:none}
.btn:hover::after{opacity:.18;transform:none}

/* ===== Cortina de puntos entre páginas (comun.js) ===== */
.cortina{position:fixed;inset:0;z-index:100;pointer-events:none;background-color:var(--azul);background-image:radial-gradient(rgba(244,245,255,.5) 1.2px,transparent 1.8px);background-size:14px 14px;clip-path:circle(0 at var(--cx,50%) var(--cy,50%));transition:clip-path .5s cubic-bezier(.65,0,.35,1)}
.cortina.cubre{clip-path:circle(150% at var(--cx,50%) var(--cy,50%))}
.cortina.llega{clip-path:circle(150% at 50% 50%);transition:opacity .5s ease .05s}
.cortina.llega.fuera{opacity:0}
@media (prefers-reduced-motion:reduce){.cortina{display:none}}

/* ===== Estilo más sobrio (31/10): menos cómic, más estudio =====
   Titulares en peso medio con más interletrado negativo, etiquetas en lavanda (el amarillo se
   reserva para lo que gana el cliente), fondo con profundidad y sin trama de puntos en los
   botones. */
body{background:radial-gradient(120% 70% at 50% 0%,#2434E4 0%,var(--azul) 45%,#1520AE 100%) fixed var(--azul)}
h1,h2{font-weight:560;letter-spacing:-.04em;line-height:1.03}
h3{font-weight:600;letter-spacing:-.012em}
.hero h1{font-size:clamp(2.6rem,5.4vw,4.8rem)}
.escena h2{font-size:clamp(2rem,3.9vw,3.3rem)}
.escena .eti-escena,.eti-escena{color:var(--lavanda);font-size:.72rem;font-weight:600;letter-spacing:.2em}
.eti-escena .n{color:var(--sol);opacity:1;border-right-color:rgba(185,192,255,.4)}
.datos .eti-escena{color:var(--tinta)}
.datos .eti-escena .n{color:var(--tinta)}
.btn{font-weight:600;letter-spacing:-.005em}
.btn::after{display:none}
.procesos button,.demo-casos button{font-weight:500}
.forma,.const-col a,.calc,.demo-panel{border-color:rgba(244,245,255,.14)}
.cortina{background-image:radial-gradient(rgba(244,245,255,.28) .8px,transparent 1.2px);background-size:9px 9px}
html.puntos-vivos .hub .area.on text{fill:var(--sol)}
html.puntos-vivos .hub .area text{font-weight:600}
.marca-gigante text{font-weight:700}
