/* ═══════════════════════════════════════════════════════════════
   ORUXIA · hoja única compartida por las tres páginas
   Mundo: «El Sello». Blanco real, azul Oruxia, un solo gesto.
   ═══════════════════════════════════════════════════════════════ */

:root{
  /* superficie
     El papel es papel, no blanco de pantalla. Estuvo en #FCFCFB hasta el
     05-09 y el problema no era el brillo: era que el fondo y los paneles
     tenían 1,03:1 de contraste —tres puntos sobre 255—, así que la superficie
     propia de los módulos, que este sistema da por sentada, no existía. El
     93 % de la pantalla era la misma lámina y la vista no encontraba dónde
     agarrarse. Ahora el panel se separa a 1,09:1 y un folio real, que es lo
     que este mundo dice ser, tampoco es blanco puro. */
  --paper:#F6F5F2;
  --paper-2:#EFEEEA;
  --ink:#16150F;
  --ink-60:#5B5952;
  --ink-40:#727069;   /* 4.55:1 sobre el papel nuevo · AA en texto pequeño */
  --rule:#DEDCD5;
  --rule-2:#E9E7E1;

  /* el único acento */
  --sello:#0E56C2;
  --sello-suave:#E7F0FC;
  --sello-fuerte:#0A45A0;   /* el acento pulsado o en hover */

  /* ritmo. El margen respeta el recorte de la pantalla: en horizontal, el
     notch se come el lateral, y sin esto el texto queda debajo. */
  --sa-i:env(safe-area-inset-left, 0px);
  --sa-d:env(safe-area-inset-right, 0px);
  --sa-arriba:env(safe-area-inset-top, 0px);
  --sa-abajo:env(safe-area-inset-bottom, 0px);
  --margin:calc(clamp(18px,4vw,40px) + max(var(--sa-i), var(--sa-d)));
  --ancho:1280px;
  --aire:clamp(60px,8.5vh,108px);
  /* el panel se queda en blanco puro: es lo que lo eleva sobre el papel */
  --panel:#FFFFFF;
  --panel-borde:#E2E0D9;
  --relieve:0 1px 2px rgba(22,21,15,.035), 0 14px 36px -14px rgba(22,21,15,.07);

  /* movimiento: una sola curva, tres intensidades */
  /* la flecha, como máscara reutilizable: un solo trazo para todo el sitio */
  --flechita:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 17 8'%3E%3Cpath d='M0 4h15M12 1l3.4 3-3.4 3' fill='none' stroke='%23000' stroke-width='1.4' stroke-linecap='round' stroke-linejoin='round'/%3E%3C/svg%3E");
  --chevron:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 8 5'%3E%3Cpath d='M.8.9 4 3.9 7.2.9' fill='none' stroke='%23000' stroke-width='1.2' stroke-linecap='round' stroke-linejoin='round'/%3E%3C/svg%3E");

  --curva:cubic-bezier(.16,1,.3,1);
  --toque:120ms;
  --medio:240ms;
  --completo:420ms;
}

/* ─────────────── el reverso del papel ───────────────
   El modo oscuro está resuelto en los tokens y todavía no tiene selector: se
   activa poniendo data-tema="oscuro" en <html>. No es «la misma web en negro»:
   es el mismo sistema con los papeles cambiados. El fondo es carbón cálido, no
   negro puro, porque es el reverso de esta tinta y no el de cualquiera; el
   acento sube a un azul que aguanta sobre oscuro, y el botón se invierte solo,
   porque sigue siendo tinta sobre papel — solo que ahora la tinta es clara.
   Contrastes medidos sobre el fondo: texto 16,6:1 · secundario 7,7:1 ·
   etiquetas 5,3:1 · acento 7,7:1. Los cuatro pasan AA. */
:root[data-tema="oscuro"]{
  color-scheme:dark;
  --paper:#141310;
  --paper-2:#1B1A16;
  --ink:#F2F1EC;
  --ink-60:#A8A69D;
  --ink-40:#8B8981;
  --rule:#2A2925;
  --rule-2:#201F1B;

  --sello:#6FA8F7;
  --sello-suave:#16243A;
  --sello-fuerte:#9BC4FA;

  --panel:#1A1915;
  --panel-borde:#302E28;
  --relieve:0 1px 2px rgba(0,0,0,.4), 0 14px 36px -14px rgba(0,0,0,.6);
}
:root[data-tema="oscuro"] .sub{
  box-shadow:0 1px 2px rgba(0,0,0,.5),0 18px 44px -16px rgba(0,0,0,.7);
}
/* el sello es tinta sobre papel: en oscuro se estampa en claro */
:root[data-tema="oscuro"] ::selection{background:var(--sello);color:#0B1220}

*,*::before,*::after{box-sizing:border-box;margin:0;padding:0}
html{-webkit-text-size-adjust:100%}

body{
  background:var(--paper);
  color:var(--ink);
  font-family:'Archivo',system-ui,-apple-system,sans-serif;
  font-variation-settings:'wdth' 100,'wght' 400;
  font-size:clamp(.97rem,.94rem + .18vw,1.06rem);
  line-height:1.6;
  overflow-x:hidden;
  -webkit-font-smoothing:antialiased;
}

/* las superficies del navegador también se diseñan */
::selection{background:var(--sello);color:#fff}
::-webkit-scrollbar{width:11px}
::-webkit-scrollbar-track{background:var(--paper)}
::-webkit-scrollbar-thumb{background:var(--rule);border:4px solid var(--paper)}
::-webkit-scrollbar-thumb:hover{background:var(--ink-40)}
:focus-visible{outline:2px solid var(--sello);outline-offset:4px;border-radius:1px}
:target{scroll-margin-top:120px}

a{color:inherit}
img{max-width:100%;display:block}
button{font:inherit;color:inherit}

.mono{font-family:'Martian Mono',ui-monospace,SFMono-Regular,monospace;font-variant-numeric:tabular-nums;letter-spacing:-0.04em}
.oculto{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip-path:inset(50%);white-space:nowrap}

.saltar{
  position:absolute;left:var(--margin);top:14px;z-index:99;
  background:var(--ink);color:var(--paper);padding:12px 18px;text-decoration:none;
  border-radius:999px;
  font-family:'Archivo',system-ui,sans-serif;font-size:13px;
  font-variation-settings:'wght' 600;
  transform:translateY(-84px);
  transition:transform var(--toque) var(--curva);
}
.saltar:focus{transform:none}

/* ─────────────── armazón persistente ─────────────── */
/* La barra tiene forma propia. Se disolvía en un degradado hacia el papel, que
   es lo que la dejaba sin borde y sin peso: arriba del todo es transparente
   sobre el papel, y en cuanto la página se despega toma fondo y filete. */
.nav{
  position:fixed;top:0;left:0;right:0;z-index:30;
  border-bottom:1px solid transparent;
  transition:border-color var(--medio) var(--curva);
  view-transition-name:shell-nav;
}
.nav::before{
  content:'';position:absolute;inset:0;background:var(--paper);
  opacity:0;transition:opacity var(--medio) var(--curva);
}
body.pegado .nav{border-bottom-color:var(--rule)}
body.pegado .nav::before,body.menu-abierto .nav::before{opacity:1}

/* tres zonas: marca, navegación en el eje de la página, acciones */
.nav-env{
  position:relative;z-index:1;
  display:grid;grid-template-columns:1fr auto 1fr;align-items:center;gap:24px;
  padding-top:calc(15px + var(--sa-arriba));padding-bottom:15px;
}
.nav-med{justify-self:center}

/* La marca es el nombre de la empresa, no un pie de foto. Entraba en Martian
   Mono a 11,5 px, con el peso visual de una nota al margen. */
.marca{
  display:inline-flex;align-items:center;gap:9px;
  text-decoration:none;color:var(--ink);
}
.marca span{
  font-family:'Archivo',system-ui,sans-serif;font-size:16px;
  font-variation-settings:'wght' 640,'wdth' 92;letter-spacing:-0.015em;
}
.marca .anillo{width:19px;height:19px;flex:none;color:var(--sello)}

/* La navegación es interfaz, no un dato. Iba entera en monoespaciada, en
   mayúsculas y con interletrado negativo: las tres cosas que la envejecían. */
.menu{display:flex;gap:clamp(18px,2.4vw,30px);list-style:none;align-items:center}
.menu > li{position:relative}
.menu a{
  position:relative;display:inline-flex;align-items:center;gap:6px;padding:8px 0;
  font-family:'Archivo',system-ui,sans-serif;font-size:13.5px;
  font-variation-settings:'wght' 560,'wdth' 100;letter-spacing:-0.005em;
  color:var(--ink-60);text-decoration:none;
  transition:color var(--toque) var(--curva);
}
.menu a:hover{color:var(--ink)}
.menu a.aqui{color:var(--ink)}
.menu a.aqui::after{
  content:'';position:absolute;left:0;right:0;bottom:2px;height:1.5px;background:var(--sello);
  view-transition-name:marcador;
}

/* el cluster de acciones vive fuera del <ul>: es acción, no navegación, y
   dentro de la lista competía por lectura con «Inicio» */
.acc-nav{display:flex;align-items:center;gap:14px;justify-self:end}
.wa-nav{
  display:inline-flex;align-items:center;gap:7px;text-decoration:none;color:var(--ink-60);
  font-family:'Archivo',system-ui,sans-serif;font-size:13.5px;
  font-variation-settings:'wght' 560;
  transition:color var(--toque) var(--curva);
}
.wa-nav svg{width:15px;height:15px;fill:currentColor;flex:none}
.wa-nav:hover{color:var(--ink)}
.cta-nav{
  display:inline-flex;align-items:center;gap:8px;white-space:nowrap;text-decoration:none;
  background:var(--ink);color:var(--paper);border-radius:999px;padding:10px 18px;
  font-family:'Archivo',system-ui,sans-serif;font-size:13px;
  font-variation-settings:'wght' 600;letter-spacing:-0.008em;
  transition:background var(--toque) var(--curva);
}
.cta-nav:focus-visible{background:var(--sello)}
@media (hover:hover){.cta-nav:hover{background:var(--sello)}}
.cta-nav .flecha{transition:transform var(--medio) var(--curva)}
.cta-nav:hover .flecha{transform:translateX(3px)}
.cta-nav .t-corto{display:none}

/* El selector de tema vive a la IZQUIERDA, con la marca, y no en el grupo de
   acciones. La derecha de la barra es la zona de la conversión —WhatsApp y el
   botón—, y un control de preferencia metido entre los dos se lee como una
   tercera acción que compite con ellas. Esta zona es la del sitio, no la de
   lo que quieres que el visitante haga.
   Un solo botón que conmuta: el sistema ya trae su preferencia, y lo que falta
   es poder llevarle la contraria una vez. Los dos glifos comparten hueco y se
   cruzan con opacidad, sin desplazamiento. */
.lado-marca{display:flex;align-items:center;gap:14px;justify-self:start}
.lado-marca::after{
  content:'';width:1px;height:18px;background:var(--rule);order:1;
}
.lado-marca .marca{order:0}
.lado-marca .tema{order:2}

.tema{
  position:relative;display:inline-flex;align-items:center;justify-content:center;
  width:36px;height:36px;flex:none;cursor:pointer;
  border:1px solid var(--rule);border-radius:999px;background:transparent;
  color:var(--ink-60);
  transition:color var(--toque) var(--curva),border-color var(--toque) var(--curva);
}
.tema:hover{color:var(--ink);border-color:var(--ink-40)}
.tema svg{
  position:absolute;width:16px;height:16px;
  transition:opacity var(--medio) var(--curva);
}
/* El glifo es la ACCIÓN, no el estado: en claro se ve la luna porque pulsarla
   oscurece. Al revés, el botón se contradecía —el título decía «cambiar a modo
   oscuro» y el icono era un sol— y `aria-pressed` describe lo que el botón
   activa, no dónde estás. */
.tema .t-sol{opacity:0}
:root[data-tema="oscuro"] .tema .t-luna{opacity:0}
:root[data-tema="oscuro"] .tema .t-sol{opacity:1}

/* el botón de menú, que no existía: hasta hoy el menú era el mismo <ul>
   horizontal a cualquier ancho */
.burg{
  display:none;border:1px solid var(--rule);background:var(--panel);border-radius:999px;
  width:40px;height:40px;align-items:center;justify-content:center;cursor:pointer;flex:none;
}
.burg span{display:block;width:16px;height:1.5px;background:var(--ink);position:relative}
.burg span::before,.burg span::after{
  content:'';position:absolute;left:0;width:16px;height:1.5px;background:var(--ink);
  transition:transform var(--medio) var(--curva);
}
.burg span::before{top:-5px}
.burg span::after{top:5px}
body.menu-abierto .burg span{background:transparent}
body.menu-abierto .burg span::before{transform:translateY(5px) rotate(45deg)}
body.menu-abierto .burg span::after{transform:translateY(-5px) rotate(-45deg)}

.margen{
  position:fixed;top:0;bottom:0;left:max(0px, calc(50% - var(--ancho)/2 + var(--margin) - 14px));width:1px;
  background:var(--rule);z-index:2;pointer-events:none;
  view-transition-name:shell-margen;
}
.margen::after{content:'';position:absolute;top:0;left:0;width:1px;height:var(--avance,0%);background:var(--ink)}

/* La sigla fija de abajo a la izquierda —«ORUXIA — VALENCIA»— se retiró el
   05-09. Era la tercera vez que la marca aparecía en la misma pantalla, y las
   otras dos son de verdad: el logotipo de la barra y el wordmark del pie. */

/* ── EL INSTRUMENTO DEL MARGEN EN TÁCTIL ──
   El filete se quedaba en `display:none` por debajo de 820 px, así que el
   único instrumento de la web desaparecía justo en el dispositivo desde el que
   más se va a ver. Sigue estando; lo que se retira es lo que no cabe.
   Se pega al borde de la pantalla —no hay contenedor de 1.280 al que
   alinearse— y respeta el recorte lateral en horizontal. Lleva
   `pointer-events:none`, así que no intercepta ni un gesto. */
@media (max-width:900px){
  .margen{
    left:max(4px, var(--sa-i));
    top:calc(var(--alto-nav, 68px) + var(--sa-arriba));
    bottom:calc(14px + var(--sa-abajo));
  }
  /* las muescas crecen hacia dentro, no hacia fuera: pegadas al borde de la
     pantalla, una muesca centrada en el filete se sale y queda cortada */
  .muesca{left:0;width:7px}
  .muesca.aqui{left:0;width:14px}
  /* el texto girado y la cifra piden un margen de 40 px que en un móvil no
     existe: se retiran ellos, no el instrumento */
  .rotulo-margen,.cifra-margen{display:none}
}

/* estado de entrada: solo mientras la clase esté puesta.
   Si el JS no llega, un temporizador la retira y todo queda visible. */
/* ─────────────── LA ENTRADA, EN CSS ───────────────
   La hacía GSAP, y eso significaba que el titular estaba escondido hasta que
   terminara de descargarse una librería de 70 KB. Medido en producción:
   `gsap` tardaba entre 327 ms y 3,7 s según cómo fuera la red, y todo ese rato
   la portada estaba en blanco. Es justo lo que la regla 6 de este documento
   prohíbe — nada se oculta esperando a JS — y llevaba tiempo incumpliéndose.
   En CSS la entrada arranca con la hoja de estilos, que es render-blocking y
   por tanto siempre está antes que cualquier script. GSAP se queda para lo que
   sí necesita JS: el carril y el scroll. */
@keyframes ent-subir{ from{transform:translateY(112%)} to{transform:none} }
@keyframes ent-llegar{ from{opacity:0;transform:translateY(12px)} to{opacity:1;transform:none} }
@keyframes ent-abrir{
  from{font-variation-settings:'wdth' 74,'wght' 680}
  to{font-variation-settings:'wdth' 92,'wght' 620}
}
@keyframes ent-sellar{
  from{opacity:0;transform:rotate(-13deg) scale(1.75);filter:url(#tinta) blur(7px)}
  to{opacity:1;transform:rotate(-4.2deg) scale(1);filter:url(#tinta) blur(0)}
}

.hero .linea>span,
.contacto-hero .linea>span{ animation:ent-subir .52s var(--curva) both }
.hero .linea:nth-of-type(2)>span,
.contacto-hero .linea:nth-of-type(2)>span{ animation-delay:.055s }
.hero h1,.contacto-hero h1{ animation:ent-abrir .72s var(--curva) both }
.hero .parrafo,
.contacto-hero>.env>.parrafo{ animation:ent-llegar .34s var(--curva) .26s both }
.hero .acciones{ animation:ent-llegar .30s var(--curva) .40s both }
.hero .sello,
.contacto-hero .sello{ animation:ent-sellar .42s var(--curva) .46s both }

/* Al llegar por una transición entre páginas la entrada no se repite: la
   llegada ya la ha hecho el navegador. La marca la pone el script del <head>. */
:root.sin-entrada .hero .linea>span,
:root.sin-entrada .contacto-hero .linea>span,
:root.sin-entrada .hero h1,:root.sin-entrada .contacto-hero h1,
:root.sin-entrada .hero .parrafo,
:root.sin-entrada .contacto-hero>.env>.parrafo,
:root.sin-entrada .hero .acciones,
:root.sin-entrada .hero .sello,
:root.sin-entrada .contacto-hero .sello{ animation:none }

@media (prefers-reduced-motion: reduce){
  /* se quita el vuelo, no la información */
  .hero .linea>span,.contacto-hero .linea>span,
  .hero h1,.contacto-hero h1,
  .hero .parrafo,.contacto-hero>.env>.parrafo,
  .hero .acciones,.hero .sello,.contacto-hero .sello{ animation:none }
}

/* ─────────────── tipografía ─────────────── */
h1{
  font-size:clamp(1.95rem,4.5vw,4.05rem);line-height:1.02;letter-spacing:-0.042em;
  font-variation-settings:'wdth' 92,'wght' 620;text-wrap:balance;
}
h2{
  font-size:clamp(1.75rem,4.2vw,3.3rem);line-height:1.05;letter-spacing:-0.042em;
  font-variation-settings:'wdth' 92,'wght' 620;max-width:18ch;text-wrap:balance;
}
h3{font-size:clamp(1.05rem,1.9vw,1.4rem);letter-spacing:-0.03em;font-variation-settings:'wdth' 92,'wght' 620}
.linea{display:block;overflow:hidden}
.linea>span{display:block}
.parrafo{max-width:62ch;color:var(--ink-60);line-height:1.66}
.parrafo em{font-style:normal;color:var(--ink);font-variation-settings:'wght' 560}
/* `.dato` se llama así por herencia, pero se usa para etiquetar bloques de
   interfaz («Contacto directo», el rol del fundador), no para datos. Archivo,
   peso 620, versalitas con interletrado POSITIVO: las mayúsculas piden lo
   contrario que las minúsculas, y a −0,3 px se apelmazan.
   Sube a 12,5 px en táctil: una versalita a 11,5 px en un móvil está por
   debajo de lo cómodo, y estas etiquetas son las que orientan. */
.dato{
  font-family:'Archivo',system-ui,sans-serif;font-size:11.5px;
  font-variation-settings:'wght' 620,'wdth' 100;
  text-transform:uppercase;letter-spacing:.07em;color:var(--ink-40);
}

/* ─────────────── secciones ─────────────── */
.seccion{padding:var(--aire) 0;position:relative}

.seccion + .seccion{border-top:1px solid var(--rule)}
/* ── hero: composicion centrada y densa, con el panel dentro del primer viewport ── */
.hero{padding-top:clamp(104px,15vh,150px);padding-bottom:clamp(46px,7vh,72px)}
.hero-centro{max-width:940px;margin-inline:auto;text-align:center}
.hero-centro .parrafo{max-width:56ch;margin-inline:auto;margin-top:clamp(16px,2.4vh,24px)}
.hero-centro .acciones{justify-content:center;margin-top:clamp(22px,3.2vh,32px)}
.hero .panel{position:relative;max-width:880px;margin:clamp(34px,5vh,58px) auto 0;text-align:left}
.hero .panel .pestanas{display:flex;justify-content:center;margin-inline:auto}
/* El sello se estampa sobre la esquina del panel. Aquí vivían tres reglas de
   tamaño propio —6,6 / 11 / 6 px— que NUNCA llegaron a aplicarse: `.sello .r1`
   está cincuenta líneas más abajo con la misma especificidad, así que ganaba.
   Se retiran en vez de dejarlas mintiendo en la hoja. El tamaño del sello se
   resuelve donde toca, con el diámetro. */
.sello--marca{
  position:absolute;top:-34px;right:clamp(-14px,-1vw,-4px);z-index:2;
  --s:clamp(104px,10vw,138px);transform:rotate(-9deg);
}
@media (max-width:860px){
  .hero .panel{margin-top:64px}
  /* el titular crece con la pantalla en vez de quedarse clavado en el mínimo */
  /* Medido el techo de dos líneas en siete anchos: 360 -> 31,5 px · 375 -> 33 ·
     390 -> 34,5 · 414 -> 37 · 430 -> 38,5. Sale una recta casi perfecta, que es
     este `calc`, dejando medio píxel de margen para que un cambio de copy corto
     no lo tire a tres líneas. A 320 px son cuatro líneas con cualquier cuerpo:
     ese titular no cabe en 284 px de ancho útil. */
  .hero h1{font-size:clamp(1.95rem,calc(10vw - 5px),2.4rem)}
  /* y la acción baja un escalón: sigue siendo el mismo objeto y sigue pasando
     los 44 px de diana, pero deja de competir con el titular */
  /* Estaban centradas de verdad —el centro del grupo coincidía con el del
     contenedor en los tres anchos— pero a 375 px quedaban 2 px de aire a cada
     lado: el grupo iba de borde a borde y se leía como justificado. Y la píldora
     negra pesa mucho más que un enlace subrayado, así que el centro óptico caía
     a la izquierda del geométrico. Apiladas, cada una se centra sola y se ve. */
  .hero-centro .acciones{flex-direction:column;gap:14px}
  .hero-centro .acciones .btn{font-size:13.5px;padding:13px 22px}
  .hero-centro .acciones .enlace{min-height:40px}
  /* el sello se estampa SOBRE la esquina, mordiéndola: a 96 px y con
     `right:-6px` se salía del panel por el lado y quedaba flotando medio
     fuera, que es justo lo que un sello no hace. Más pequeño y mordiendo
     menos, se lee como estampado y no como pegado. */
  /* ── el sello, medido ──
     A 76 px de diámetro el sello no se afinaba: REVENTABA. Su contenido no cabía
     en el círculo, así que la caja se estiraba a 83×98 y dejaba de ser redonda, y
     las tres líneas se salían del aro. Medido en cinco anchos: con las tres
     líneas hacen falta ~140 px para que ninguna toque el filete —a 111 px ya se
     salían dos—, y en un teléfono no caben 140 px de sello sin comerse la
     portada.

     Así que en el teléfono el sello dice una cosa menos. Se va la fecha, que a
     8 px no la lee nadie y es la línea que menos trabaja; se quedan las dos que
     son el mensaje. Con dos líneas, 118-132 px sobran, y el tamaño del texto es
     EL MISMO que en escritorio: no es otro sello más pequeño, es el mismo sello
     con sitio. */
  .sello--marca{
    --s:clamp(126px,32vw,134px);
    top:-48px;right:-2px;left:auto;
  }
  /* `.sello .r3` esta mas abajo en la hoja con la misma especificidad, asi que
     gana. Es la tercera vez en este archivo que pasa lo mismo. */
  /* La fecha volvió. Se quitó cuando el aro medía 76 px y a 8 px era un borrón;
     con el aro a 135 px cabe entera a 7 px sin tocar el filete, y la proporción
     respecto al diámetro (0,052) es la misma que en escritorio. */
  .panel .sello--marca .r3{font-size:7px;margin-top:1px}
  /* interletrado negativo en versalitas, que es justo lo que la casa prohíbe.
     A 15 px y con el desplazamiento de la tinta encima, apelmaza. */
  /* La proporcion, no el tamano suelto. En escritorio el aro mide 148 px y
     "SIN COSTE" 89: el texto ocupa 0,60 del diametro. A 135 px con la letra de
     escritorio ocupaba 0,71 y rozaba el filete interior. Aqui vale 0,62. */
  .panel .sello--marca .r1{font-size:8.5px}
  .panel .sello--marca .r2{font-size:13.5px;letter-spacing:0;margin:6px 0 0}
  /* el texto no toca el aro */
  .panel .sello--marca > span{padding-inline:7px}
  /* una linea de sello no se parte. A 320 px "SIN COSTE" caia en dos y el
     circulo volvia a reventar por abajo. */
  .panel .sello--marca .r1,.panel .sello--marca .r2{white-space:nowrap}
}

/* ─────────────── controles ───────────────
   El botón es el mismo objeto que el CTA de la barra, solo que más grande: la
   misma forma, la misma tipografía y el mismo color. Iba en Martian Mono a
   11 px, en mayúsculas y con interletrado negativo —lo que el suelo de calidad
   llama monoespaciada como disfraz de técnico— y encima con esquinas vivas,
   así que la acción principal de cada página no se parecía a la de la barra. */
.btn{
  display:inline-flex;align-items:center;gap:10px;
  font-family:'Archivo',system-ui,sans-serif;font-size:15px;
  font-variation-settings:'wght' 600,'wdth' 100;letter-spacing:-0.008em;
  text-transform:none;text-decoration:none;cursor:pointer;
  background:var(--ink);color:var(--paper);border:0;border-radius:999px;
  padding:16px 28px;
  transition:background var(--toque) var(--curva);
}
.btn .flecha{transition:transform var(--medio) var(--curva)}
.btn:focus-visible{background:var(--sello)}
@media (hover:hover){.btn:hover{background:var(--sello)}}
.btn:hover .flecha,.btn:focus-visible .flecha{transform:translateX(3px)}
.btn:active{background:var(--sello);filter:brightness(1.12)}
.btn[disabled]{background:var(--ink-40);cursor:not-allowed}



.enlace{
  text-decoration:none;border-bottom:1px solid var(--rule);padding-bottom:2px;
  color:var(--ink-60);font-size:.94rem;
  transition:color var(--toque) var(--curva),border-color var(--toque) var(--curva);
}
.enlace:hover{color:var(--ink);border-color:var(--ink)}

.acciones{margin-top:clamp(28px,4.4vh,44px);display:flex;flex-wrap:wrap;gap:14px 26px;align-items:center}

/* ─────────────── EL SELLO ─────────────── */
.sello{
  position:relative;
  width:var(--s,clamp(160px,16vw,214px));aspect-ratio:1/1;
  display:grid;place-items:center;text-align:center;
  color:var(--sello);border:3px solid currentColor;border-radius:50%;
  transform:rotate(-4.2deg);filter:url(#tinta);
}
.sello::before{content:'';position:absolute;inset:7px;border:1px solid currentColor;border-radius:50%}
.sello .r1{display:block;font-family:'Martian Mono',monospace;font-size:9px;letter-spacing:.02em;font-weight:600;line-height:1.5}
.sello .r2{display:block;font-family:'Martian Mono',monospace;font-size:15px;font-weight:700;letter-spacing:-0.05em;margin:7px 0 5px}
.sello .r3{display:block;font-family:'Martian Mono',monospace;font-size:8px;letter-spacing:.06em;opacity:.82;font-variant-numeric:tabular-nums}
.sello .raya{width:52%;height:1px;background:currentColor;margin:0 auto;opacity:.55}





@media (max-width:940px){}

/* ─────────────── 3 · las maquetas vivas (ahora dentro del carril) ─────────────── */
/* maqueta · flujo */
.flujo{padding:22px 22px 24px;display:flex;flex-direction:column}
.nodo{display:flex;align-items:center;gap:11px;border:1px solid #DCDBD4;border-radius:7px;padding:9px 12px;position:relative}
.nodo .ic{flex:0 0 auto;width:24px;height:24px;border-radius:6px;background:var(--sello-suave);display:grid;place-items:center}
.nodo .ic svg{stroke:var(--sello);stroke-width:1.2;fill:none;stroke-linecap:round;stroke-linejoin:round}
.nodo b{display:block;font-size:.83rem;font-variation-settings:'wdth' 96,'wght' 600;letter-spacing:-0.02em}
.nodo i{display:block;font-family:'Martian Mono',monospace;font-style:normal;font-size:7px;color:var(--ink-40);letter-spacing:.02em;margin-top:2px}
.nodo::after{content:'';position:absolute;inset:-3px;border:1.4px solid var(--sello);border-radius:9px;opacity:0;pointer-events:none}
.nodo.llega::after{animation:aro 620ms var(--curva)}
@keyframes aro{0%{opacity:0;transform:scale(1.05)}28%{opacity:.9;transform:scale(1)}100%{opacity:0}}
.cable{position:relative;height:24px;margin-left:23px;width:1px;background:var(--rule)}
.cable .pulso{position:absolute;left:-2.5px;top:0;width:6px;height:6px;border-radius:50%;background:var(--sello);opacity:0}

/* maqueta · conversación */
.chat{padding:20px 22px;display:flex;flex-direction:column;gap:15px;font-size:.86rem}
.msg{max-width:84%}
.msg .quien{font-family:'Martian Mono',monospace;font-size:7.5px;text-transform:uppercase;color:var(--ink-40);letter-spacing:.03em;display:block;margin-bottom:5px}
.msg p{border-left:1px solid var(--rule);padding:2px 0 2px 12px}
.msg.agente{align-self:flex-end;text-align:right}
.msg.agente p{border-left:0;border-right:1px solid var(--sello);padding:2px 12px 2px 0}
.msg.agente .quien{color:var(--sello)}
.cursor{display:inline-block;width:1px;height:1em;background:var(--sello);vertical-align:-2px;animation:parpadeo 1s steps(2) infinite}
@keyframes parpadeo{50%{opacity:0}}

/* maqueta · ERP */
.erp{font-size:.82rem}
.erp-cab{padding:13px 16px;border-bottom:1px solid var(--rule);display:flex;justify-content:space-between;align-items:baseline;gap:14px}
.erp-cab .obra{font-variation-settings:'wght' 620;letter-spacing:-0.02em;font-size:.92rem}
.erp-cab .ref{font-family:'Martian Mono',monospace;font-size:7.5px;color:var(--ink-40);letter-spacing:.02em}
.erp-barra,.erp-fila{display:grid;grid-template-columns:1fr 96px 88px;gap:10px;padding:9px 16px;align-items:center}
.erp-barra{border-bottom:1px solid var(--rule);font-family:'Martian Mono',monospace;font-size:7.5px;text-transform:uppercase;color:var(--ink-40);letter-spacing:.03em}
.erp-barra button{background:none;border:0;cursor:pointer;padding:0;text-transform:uppercase;text-align:left;font:inherit}
.erp-barra button:last-child{text-align:right}
.erp-barra button:hover{color:var(--ink)}
.erp-barra button[aria-sort]{color:var(--sello)}
.erp-fila{border-bottom:1px solid var(--rule-2);cursor:pointer;padding:10px 16px;transition:background var(--toque) var(--curva)}
@media (hover:hover){.erp-fila:hover{background:var(--paper-2)}}
.erp-fila[aria-selected="true"]{background:var(--sello-suave)}
.erp-fila .est{font-family:'Martian Mono',monospace;font-size:7.2px;text-transform:uppercase;letter-spacing:.02em;color:var(--ink-40)}
.erp-fila .est.obra{color:var(--sello)}
.erp-fila .imp{font-family:'Martian Mono',monospace;font-size:8.4px;text-align:right}
.erp-tot{display:grid;grid-template-columns:1fr 88px;gap:10px;padding:11px 16px;border-bottom:1px solid var(--rule);background:var(--paper-2);font-family:'Martian Mono',monospace;font-size:8.4px}
.erp-tot span:last-child{text-align:right}
.erp-tot span:first-child{color:var(--ink-40);text-transform:uppercase;font-size:7.5px;letter-spacing:.03em;align-self:center}
.erp-ficha{padding:13px 16px;font-size:.8rem;color:var(--ink-60);min-height:58px}
.erp-ficha b{color:var(--ink);font-variation-settings:'wght' 620}

/* maqueta · navegador */
.nave{background:var(--paper-2);padding:12px}
.nave-marco{background:var(--panel);border:1px solid var(--rule)}
.nave-barra{display:flex;align-items:center;gap:8px;padding:8px 10px;border-bottom:1px solid var(--rule)}
.nave-barra .pt{width:7px;height:7px;border-radius:50%;background:var(--rule)}
.nave-url{flex:1;font-family:'Martian Mono',monospace;font-size:7.5px;color:var(--ink-40);background:var(--paper-2);border:1px solid var(--rule-2);padding:4px 8px;letter-spacing:-0.02em}
.nave-lienzo{padding:14px;display:flex;flex-direction:column;gap:9px;min-height:180px}
.bw{background:var(--rule-2);opacity:0}
.bw.t{height:9px;width:42%}
.bw.h{height:26px;width:78%;background:var(--rule)}
.bw.p{height:7px;width:92%}
.bw.p2{height:7px;width:68%}
.bw.cta{height:20px;width:34%;background:var(--sello)}
.bw.r{display:flex;gap:8px;background:none;height:auto}
.bw.r i{flex:1;height:34px;background:var(--rule-2);display:block}
.rasgos{display:flex;flex-wrap:wrap;gap:6px 16px;padding:11px 14px 3px;font-family:'Martian Mono',monospace;font-size:7.5px;text-transform:uppercase;color:var(--ink-40);letter-spacing:.03em}
.rasgos span::before{content:'';display:inline-block;width:9px;height:1px;background:var(--sello);vertical-align:middle;margin-right:7px}

/* ─────────────── 5 · cómo trabajo ─────────────── */
.fases{margin-top:clamp(34px,5vh,56px);border-top:1px solid var(--rule)}
.fase{
  display:grid;grid-template-columns:clamp(2.4rem,5vw,4rem) minmax(0,1fr) minmax(0,1.15fr);
  gap:clamp(14px,3vw,40px);padding:clamp(20px,2.8vh,30px) 0;border-bottom:1px solid var(--rule);align-items:baseline;
}
@media (max-width:820px){.fase{grid-template-columns:1fr;gap:8px}}
.fase .num{font-family:'Martian Mono',monospace;font-size:9.5px;color:var(--ink-40);letter-spacing:.02em}
.fase h3{letter-spacing:-0.03em}
.fase p{color:var(--ink-60);font-size:.95rem;max-width:46ch}

.firma{margin-top:clamp(44px,7vh,80px);display:grid;grid-template-columns:minmax(0,1fr) minmax(0,1fr);gap:clamp(24px,4vw,56px);align-items:start}
@media (max-width:820px){.firma{grid-template-columns:1fr}}
.firma .quien{font-size:clamp(1.2rem,2.4vw,1.7rem);letter-spacing:-0.035em;font-variation-settings:'wdth' 92,'wght' 620}
.firma .rol{margin-top:6px}

/* ─────────────── 6 · empezamos ─────────────── */
.cierre{background:var(--ink);color:var(--paper);border-top:0}
.cierre h2{color:var(--paper)}
.cierre .parrafo{color:rgba(252,252,251,.68)}
.cierre .dato{color:rgba(252,252,251,.5)}
.cierre a.enlace{color:rgba(252,252,251,.78);border-color:rgba(252,252,251,.22)}
.cierre a.enlace:hover{color:#fff;border-color:#fff}
.cierre ::selection{background:var(--paper);color:var(--ink)}

.formulario{display:grid;grid-template-columns:minmax(0,1fr) minmax(0,1fr);gap:clamp(26px,4vw,64px);margin-top:clamp(32px,5vh,52px)}
@media (max-width:820px){.formulario{grid-template-columns:1fr}}
.campos{display:flex;flex-direction:column;gap:22px;max-width:44ch}
/* las etiquetas de un campo son interfaz, no datos */
.grupo label{
  display:block;font-family:'Archivo',system-ui,sans-serif;font-size:11.5px;
  font-variation-settings:'wght' 620,'wdth' 100;
  text-transform:uppercase;letter-spacing:.07em;
  color:rgba(252,252,251,.62);margin-bottom:8px;
}
.grupo input,.grupo textarea{
  width:100%;font:inherit;font-size:1rem;padding:12px 0;background:transparent;color:var(--paper);
  border:0;border-bottom:1px solid rgba(252,252,251,.22);caret-color:#93BCF6;
  transition:border-color var(--toque) var(--curva);
}
.grupo textarea{resize:vertical;min-height:88px}
.grupo input::placeholder,.grupo textarea::placeholder{color:rgba(252,252,251,.5)}
.grupo input:hover,.grupo textarea:hover{border-color:rgba(252,252,251,.45)}
.grupo input:focus,.grupo textarea:focus{outline:none;border-color:#93BCF6}
.grupo input:user-invalid,.grupo textarea:user-invalid{border-color:#E4837E}
.cierre .btn{background:var(--paper);color:var(--ink)}
.cierre .btn:focus-visible{background:#93BCF6;color:var(--ink)}
@media (hover:hover){.cierre .btn:hover{background:#93BCF6;color:var(--ink)}}
.cierre :focus-visible{outline-color:#93BCF6}
.aviso{font-size:.82rem;color:#E4837E;min-height:1.2em}
/* «O directamente»: tres vías de contacto, no tres datos tabulares. Iban en
   Martian Mono a 12 px con interletrado negativo, que es la monoespaciada
   usada como disfraz que el sistema prohíbe. Archivo, y con la fila entera
   tocable en vez de sólo el texto. */
.directo{margin-top:clamp(24px,3.4vh,36px);display:flex;flex-direction:column;gap:2px}
.directo a{
  display:flex;align-items:center;justify-content:space-between;gap:12px;
  font-family:'Archivo',system-ui,sans-serif;font-size:.95rem;
  font-variation-settings:'wght' 500;letter-spacing:-0.005em;
  text-decoration:none;color:var(--ink-60);
  padding:11px 0;border-bottom:1px solid var(--rule);
  transition:color var(--toque) var(--curva),border-color var(--toque) var(--curva);
}
.directo a::after{
  content:'';width:14px;height:14px;flex:none;opacity:.45;
  background:currentColor;
  -webkit-mask:var(--flechita) center/contain no-repeat;
  mask:var(--flechita) center/contain no-repeat;
  transition:transform var(--medio) var(--curva),opacity var(--toque) var(--curva);
}
.directo a:hover,.directo a:focus-visible{color:var(--sello);border-color:var(--sello)}
.directo a:hover::after,.directo a:focus-visible::after{opacity:1;transform:translateX(3px)}

.hecho{display:none;place-items:center;text-align:center;padding:clamp(30px,6vh,60px) 0}
.formulario.enviado .campos,.formulario.enviado .lado{display:none}
.formulario.enviado .hecho{display:grid}
.hecho .sello{color:#93BCF6;mix-blend-mode:normal}

/* ─────────────── EL PIE ─────────────── */
/* Era una línea de 10 px en monoespaciada gris con dos enlaces, separada por un
   filete: un borde inferior, no un pie. Ahora es el mismo pliego que baja del
   menú, impreso plano y siempre abierto — la marca a la izquierda y el mapa del
   sitio a su lado. Es lo que hace que la página termine en vez de agotarse. */
.pie{
  padding:clamp(46px,7vh,80px) 0 0;
  border-top:1px solid var(--rule);
  color:var(--ink-60);
}
.pie-alto{
  display:grid;grid-template-columns:minmax(0,1.25fr) repeat(2,minmax(0,1fr));
  gap:clamp(22px,3vw,40px);align-items:start;
}
.pie-marca .marca-pie{
  display:block;font-family:'Archivo',system-ui,sans-serif;
  font-size:clamp(30px,3.4vw,44px);font-variation-settings:'wght' 640,'wdth' 92;
  letter-spacing:-0.035em;line-height:1;color:var(--ink);margin-bottom:14px;
}
.pie-marca p{font-size:13px;line-height:1.65;color:var(--ink-40);max-width:26ch}

.pie h3{
  font-family:'Archivo',system-ui,sans-serif;font-size:11.5px;
  font-variation-settings:'wght' 620;text-transform:uppercase;letter-spacing:.07em;
  color:var(--ink-40);line-height:1.4;
  margin-bottom:14px;padding-bottom:10px;border-bottom:1px solid var(--rule-2);
}
.pie ul{list-style:none;display:flex;flex-direction:column;gap:9px;margin:0;padding:0}
.pie ul a{
  text-decoration:none;color:var(--ink-60);font-size:14px;
  transition:color var(--toque) var(--curva);
}
.pie ul a:hover{color:var(--sello)}
.pie .dat{color:var(--ink);font-variation-settings:'wght' 560}

.pie-legal{
  margin-top:clamp(38px,6vh,64px);
  /* El relleno de abajo reserva el hueco del boton flotante de WhatsApp. Siendo
     fijo siempre, al final del documento caia justo encima de la linea legal y
     tapaba uno de los tres enlaces, que miden 48 px. Es lo que se hace con
     cualquier boton flotante: el final de la pagina le deja su sitio. */
  padding:20px 0 calc(26px + 66px + var(--sa-abajo));border-top:1px solid var(--rule);
  display:flex;flex-wrap:wrap;gap:8px 26px;justify-content:space-between;
  font-size:12.5px;color:var(--ink-40);
}
.pie-legal a{text-decoration:none;color:inherit;transition:color var(--toque) var(--curva)}
.pie-legal a:hover{color:var(--ink)}
.pie-normas{display:flex;flex-wrap:wrap;gap:6px 22px}

@media (max-width:900px){
  .pie-alto{grid-template-columns:repeat(2,minmax(0,1fr))}
  .pie-marca{grid-column:1/-1;margin-bottom:10px}
}
/* dos columnas hasta muy abajo: apilado en una, el pie medía 959 px en un
   móvil de 390 y se recorría como si fuera otra sección más */
@media (max-width:900px){.pie-alto{gap:26px 18px}}
@media (max-width:359px){.pie-alto{grid-template-columns:minmax(0,1fr)}}

/* ═══════════ RETICULA: contenedor centrado, no sangria izquierda ═══════════ */
.env{width:100%;max-width:var(--ancho);margin-inline:auto;padding-inline:var(--margin)}

/* separador de seccion: filete clavado con un punto en cada extremo */
.regla{position:relative;height:1px;background:var(--rule);max-width:var(--ancho);margin-inline:auto;width:100%}
.regla::before,.regla::after{
  content:'';position:absolute;top:-1.5px;width:4px;height:4px;border-radius:50%;background:var(--rule);
}
.regla::before{left:-1.5px}
.regla::after{right:-1.5px}
@media (max-width:900px){.regla::before,.regla::after{display:none}}

/* ═══════════ PANEL: la superficie que separa un modulo del fondo ═══════════ */
.panel{
  background:var(--panel);border:1px solid var(--panel-borde);border-radius:14px;
  box-shadow:var(--relieve);padding:clamp(20px,3.4vw,38px);
}


/* rejilla de dos y tres columnas */

.tresc{display:grid;grid-template-columns:220px minmax(0,1fr) minmax(0,1.35fr);gap:clamp(14px,2.6vw,36px);align-items:start}
.cab-seccion{display:grid;grid-template-columns:minmax(0,1fr) minmax(0,.85fr);gap:clamp(20px,4vw,64px);align-items:end;margin-bottom:clamp(28px,4vh,46px)}
@media (max-width:960px){
  .tresc,.cab-seccion{grid-template-columns:1fr;gap:20px;align-items:start}
  .tresc{gap:6px}
}

/* ═══════════ PESTANAS + PANEL (segmentador) ═══════════ */
.pestanas{
  display:inline-flex;gap:2px;padding:4px;background:var(--paper-2);
  border:1px solid var(--rule);border-radius:10px;flex-wrap:wrap;
}
.pest{
  position:relative;border:0;background:transparent;cursor:pointer;
  padding:10px 18px;border-radius:7px;
  font-size:13px;font-variation-settings:'wdth' 100,'wght' 520;letter-spacing:-0.012em;
  /* --ink-40 es el suelo de contraste MEDIDO SOBRE EL PAPEL (4,55:1). Aqui el
     fondo es la cubeta, --paper-2, que es mas oscura, y ahi el mismo gris cae a
     4,27:1 y deja de pasar AA. El suelo de un token depende de sobre que se
     pinta, no del token. */
  color:var(--ink-60);transition:color var(--toque) var(--curva);
}
.pest:hover{color:var(--ink)}
.pest[aria-selected="true"]{color:var(--ink);font-variation-settings:'wdth' 100,'wght' 620}
.pest .fondo{
  position:absolute;inset:0;border-radius:7px;background:var(--panel);
  box-shadow:0 1px 3px rgba(22,21,15,.08);border:1px solid var(--rule-2);
  view-transition-name:none;
}
.pest[aria-selected="true"] .fondo{display:block}
.pest .rot{position:relative;z-index:1}
/* En oscuro la píldora activa daba 1,01:1 contra su cubeta —#1A1915 sobre
   #1B1A16— y la sombra era negra sobre negro, así que no se distinguía cuál
   estaba elegida. El arreglo es el del sistema, no una excepción de color:
   una cubeta hundida en oscuro va MÁS OSCURA que la página, no más clara. */
:root[data-tema="oscuro"] .pestanas{background:var(--paper);border-color:var(--rule)}
:root[data-tema="oscuro"] .pest .fondo{border-color:var(--panel-borde);box-shadow:0 1px 3px rgba(0,0,0,.5)}


/* la versión táctil de este bloque va al final de la hoja, con las demás */






.respuesta-panel{margin-top:clamp(20px,3vh,30px);border-top:1px solid var(--rule);padding-top:clamp(18px,2.6vh,26px);min-height:118px}
.respuesta-panel .et{margin-bottom:10px;font-family:'Archivo',sans-serif;font-size:12.5px;text-transform:none;letter-spacing:-0.01em;font-variation-settings:'wght' 520;color:var(--ink-40)}
.respuesta-panel .txt{font-size:clamp(1.02rem,1.7vw,1.32rem);line-height:1.4;letter-spacing:-0.025em;font-variation-settings:'wdth' 94,'wght' 560;max-width:46ch}
.respuesta-panel .txt b{font-variation-settings:'wdth' 90,'wght' 720;color:var(--sello)}

/* ═══════════ HERRAMIENTAS: rejilla quieta, un caso real al pasar ═══════════
   Se elimina el desfile infinito: decoraba sin explicar. Ahora cada
   herramienta responde con lo que resolvemos con ella. */
.rejilla-hrr{
  list-style:none;display:flex;flex-wrap:wrap;gap:8px;
  margin-top:clamp(28px,4vh,44px);
}
.hrr{
  display:inline-flex;align-items:center;gap:9px;white-space:nowrap;cursor:pointer;
  border:1px solid var(--rule);border-radius:999px;background:var(--panel);
  padding:9px 16px 9px 12px;font:inherit;font-size:.83rem;color:var(--ink);
  transition:border-color var(--toque) var(--curva),color var(--toque) var(--curva);
}
.hrr svg{width:15px;height:15px;fill:var(--ink-40);flex:0 0 auto;transition:fill var(--toque) var(--curva)}
.hrr:hover,.hrr:focus-visible{border-color:var(--sello);color:var(--sello)}
.hrr:hover svg,.hrr:focus-visible svg{fill:var(--sello)}
.hrr.activa{border-color:var(--sello);color:var(--sello)}
.hrr.activa svg{fill:var(--sello)}

.hrr-caso{
  margin-top:clamp(22px,3.2vh,32px);border-top:1px solid var(--rule);padding-top:18px;
  font-size:clamp(.98rem,1.6vw,1.16rem);line-height:1.45;letter-spacing:-0.022em;
  color:var(--ink-60);max-width:56ch;min-height:3.2em;
}
.hrr-caso b{color:var(--ink);font-variation-settings:'wdth' 92,'wght' 660}

/* ═══════════ transiciones entre documentos ═══════════ */
@media (prefers-reduced-motion: no-preference){
  @view-transition{ navigation: auto; }
}
::view-transition-old(root){animation:.12s cubic-bezier(.4,0,1,1) both vt-sale}
::view-transition-new(root){animation:.22s var(--curva) both vt-entra}
@keyframes vt-sale{to{opacity:0;transform:translateY(-8px)}}
@keyframes vt-entra{from{opacity:0;transform:translateY(8px)}}
html:active-view-transition-type(volver)::view-transition-old(root){animation-name:vt-sale-atras}
html:active-view-transition-type(volver)::view-transition-new(root){animation-name:vt-entra-atras}
@keyframes vt-sale-atras{to{opacity:0;transform:translateY(8px)}}
@keyframes vt-entra-atras{from{opacity:0;transform:translateY(-8px)}}

::view-transition-group(shell-nav),::view-transition-old(shell-nav),::view-transition-new(shell-nav),
::view-transition-group(shell-margen),::view-transition-old(shell-margen),::view-transition-new(shell-margen),

::view-transition-group(servicio){animation-duration:.46s;animation-timing-function:var(--curva)}
::view-transition-old(servicio){animation-duration:.18s}
::view-transition-new(servicio){animation-duration:.32s;animation-delay:.06s}

::view-transition-group(sello){animation-duration:.52s;animation-timing-function:var(--curva)}
::view-transition-old(sello),::view-transition-new(sello){animation-duration:.34s;height:100%;object-fit:contain}

::view-transition-group(marcador){animation-duration:.2s;animation-timing-function:var(--curva)}

/* ═══════════ movimiento reducido: menos vuelo, misma información ═══════════ */
@media (prefers-reduced-motion: reduce){
  *,*::before,*::after{animation-duration:.01ms !important;animation-iteration-count:1 !important;transition-duration:.01ms !important}
  .sello{filter:none}
  .cursor{animation:none}
}

/* ═══════════════════════════════════════════════════════════════
   SERVICIOS · el alcance de cada servicio, y su límite
   ═══════════════════════════════════════════════════════════════ */

/* ── portada: documento, no segundo hero. Alineada a la izquierda ── */
.portada{padding-top:clamp(112px,16vh,164px);padding-bottom:clamp(34px,5vh,54px)}
.portada h1{max-width:16ch}
.portada-p{margin-top:clamp(18px,2.6vh,26px);max-width:52ch}

.indice{
  margin-top:clamp(28px,4vh,44px);display:flex;flex-wrap:wrap;
  gap:0 clamp(16px,2.4vw,30px);
}
.indice a{
  position:relative;padding:7px 0;text-decoration:none;
  font-size:13px;font-variation-settings:'wdth' 100,'wght' 520;letter-spacing:-0.012em;
  color:var(--ink-40);transition:color var(--toque) var(--curva);
}
.indice a::after{
  content:'';position:absolute;left:0;right:100%;bottom:2px;height:1px;background:var(--sello);
  transition:right var(--medio) var(--curva);
}
.indice a:hover{color:var(--ink)}
.indice a:hover::after{right:0}

/* ── un servicio ── */
.serv-cab{
  display:grid;grid-template-columns:minmax(0,1fr) minmax(0,.9fr);
  gap:clamp(16px,4vw,64px);align-items:end;margin-bottom:clamp(24px,3.4vh,40px);
}
.serv-cab .parrafo{max-width:46ch}
.serv-cuerpo{
  display:grid;grid-template-columns:minmax(0,1fr) minmax(0,1.02fr);
  gap:clamp(26px,4vw,60px);align-items:start;
}
@media (max-width:1000px){
  .serv-cab,.serv-cuerpo{grid-template-columns:1fr;gap:22px;align-items:start}
}
.serv-tit{
  font-size:12.5px;letter-spacing:-0.01em;font-variation-settings:'wdth' 100,'wght' 560;
  color:var(--ink-40);margin-bottom:4px;
}
.incluye.dos-col{display:grid;grid-template-columns:1fr 1fr;column-gap:clamp(14px,2vw,28px)}
@media (max-width:560px){.incluye.dos-col{grid-template-columns:1fr}}

.si-no{
  display:grid;grid-template-columns:minmax(0,1fr) minmax(0,1fr);
  gap:clamp(18px,2.6vw,32px);margin-top:clamp(24px,3.4vh,34px);
}
.si-no>div+div{border-left:1px solid var(--rule);padding-left:clamp(18px,2.6vw,32px)}
@media (max-width:640px){
  .si-no{grid-template-columns:1fr;gap:22px}
  .si-no>div+div{border-left:0;padding-left:0;border-top:1px solid var(--rule);padding-top:22px}
}
.marcada{list-style:none;margin-top:10px}
.marcada li{position:relative;padding:5px 0 5px 22px;font-size:.87rem;line-height:1.45}
.marcada li::before{
  content:'';position:absolute;left:0;top:.82em;width:11px;height:1px;background:var(--sello);
}
.marcada.no li{color:var(--ink-60)}
.marcada.no li::before{background:var(--ink-40);width:7px}

.construido{margin-top:clamp(24px,3.4vh,34px);border-top:1px solid var(--rule);padding-top:18px}
.construido ul{list-style:none;margin-top:8px}
.construido li{font-size:.85rem;color:var(--ink-60);padding:3px 0}

.serv-viva{display:flex;flex-direction:column;gap:16px}
.pildoras{display:flex;flex-wrap:wrap;gap:7px;list-style:none}
/* el icono y el nombre iban pegados: el svg era inline y no había separación
   declarada entre los dos */
.serv-viva .pildora{
  display:inline-flex;align-items:center;gap:8px;
  font-size:.78rem;padding:7px 14px 7px 12px;
}
.serv-viva .pildora svg{width:13px;height:13px;flex:none}

/* ── vestidura común de las maquetas de esta página ── */
.mq-cab{
  padding:12px 16px;border-bottom:1px solid var(--rule);background:var(--paper-2);
  font-size:12px;font-variation-settings:'wdth' 100,'wght' 560;color:var(--ink-60);
}
.mq-cab--datos{display:flex;justify-content:space-between;align-items:baseline;gap:12px}
.mq-cab--datos b{color:var(--ink);font-size:.92rem;font-variation-settings:'wdth' 96,'wght' 620;letter-spacing:-0.02em}
.mq-cab--datos .mono{font-size:8px;color:var(--ink-40);letter-spacing:.02em}
.mq-pie{
  padding:11px 16px;border-top:1px solid var(--rule-2);
  font-size:.78rem;line-height:1.4;color:var(--ink-40);
}

/* maqueta · el mismo proceso, otro responsable */
.pasos{list-style:none;counter-reset:paso}
.pasos li{
  counter-increment:paso;
  display:grid;grid-template-columns:minmax(0,1fr) auto;gap:14px;align-items:baseline;
  padding:11px 16px;border-bottom:1px solid var(--rule-2);
}
.pasos li:last-child{border-bottom:0}
.paso-t{font-size:.83rem;line-height:1.35}
.paso-t::before{
  content:counter(paso,decimal-leading-zero);
  font-family:'Martian Mono',monospace;font-size:7.5px;color:var(--ink-40);
  margin-right:10px;letter-spacing:.02em;
}
.quien-hace{
  font-size:7.5px;text-transform:uppercase;letter-spacing:.02em;color:var(--ink-40);
  white-space:nowrap;
}
.quien-hace.hecho-solo{color:var(--sello)}

/* La maqueta «qué contesta y qué no» ya no existe en ninguna página, y su
   píldora se llamaba `.marca`: pintaba de azul la marca del header, porque
   venía después en la hoja. Borrado el bloque entero —`.criba-lista`,
   `.marca` píldora y `.marca--alto`—, que no lo usaba ningún HTML. */
@media (max-width:420px){
  .pasos li{grid-template-columns:1fr;gap:7px}
}

/* maqueta · la ficha de campos */
.spec-tabla{width:100%;border-collapse:collapse;font-size:.8rem}
.spec-tabla th,.spec-tabla td{text-align:left;padding:8px 16px;border-bottom:1px solid var(--rule-2)}
.spec-tabla thead th{
  font-size:11px;font-variation-settings:'wdth' 100,'wght' 560;color:var(--ink-40);
  border-bottom:1px solid var(--rule);
}
.spec-tabla tbody th{font-variation-settings:'wdth' 100,'wght' 560;color:var(--ink)}
.spec-tabla tbody td{color:var(--ink-60)}
.spec-tabla .mono{font-size:8px;color:var(--sello);letter-spacing:.02em}
.spec-tabla tbody tr:last-child th,.spec-tabla tbody tr:last-child td{border-bottom:0}

/* maqueta · esta página, medida de verdad */
.medida-lista{margin:0}
.medida-lista>div{
  display:flex;justify-content:space-between;align-items:baseline;gap:14px;
  padding:13px 16px;border-bottom:1px solid var(--rule-2);
}
.medida-lista>div:last-child{border-bottom:0}
.medida-lista dt{font-size:.83rem;color:var(--ink-60)}
.medida-lista dd{
  font-size:.95rem;color:var(--sello);letter-spacing:-0.05em;
  font-variation-settings:'wght' 600;white-space:nowrap;
}

/* ── la traducción: lo que te pasa → lo que construimos ── */
.tabla-envoltura{overflow-x:auto}
.tabla-p{width:100%;border-collapse:collapse;text-align:left}
.tabla-p thead th{
  font-size:12.5px;font-variation-settings:'wdth' 100,'wght' 560;color:var(--ink-40);
  padding:0 clamp(14px,2vw,28px) 12px 0;border-bottom:1px solid var(--ink-40);
}
.tabla-p tbody th,.tabla-p tbody td{
  padding:clamp(15px,2vh,20px) clamp(14px,2vw,28px) clamp(15px,2vh,20px) 0;
  border-bottom:1px solid var(--rule);vertical-align:top;
}
.tabla-p tbody th{
  font-variation-settings:'wdth' 96,'wght' 560;letter-spacing:-0.015em;
  font-size:.95rem;line-height:1.35;color:var(--ink);width:32%;
}
.tabla-p tbody td{font-size:.89rem;line-height:1.45;color:var(--ink-60)}
.tabla-p tbody td:last-child{width:190px;padding-right:0}
.tabla-p tbody td a{
  text-decoration:none;font-size:.83rem;color:var(--ink-40);
  border-bottom:1px solid transparent;
  transition:color var(--toque) var(--curva),border-color var(--toque) var(--curva);
}
.tabla-p tbody tr:hover th{color:var(--sello)}
.tabla-p tbody tr:hover td a{color:var(--sello);border-color:var(--sello)}
.tabla-p tbody td a:focus-visible{color:var(--sello)}
.tabla-nota{margin-top:clamp(20px,3vh,28px);font-size:.88rem;color:var(--ink-40)}

@media (max-width:820px){
  .tabla-p thead{position:absolute;width:1px;height:1px;overflow:hidden;clip-path:inset(50%)}
  .tabla-p tbody tr{display:block;border-bottom:1px solid var(--rule);padding:20px 0}
  .tabla-p tbody tr:last-child{border-bottom:0}
  .tabla-p tbody th,.tabla-p tbody td{display:block;width:auto;border-bottom:0;padding:0}
  .tabla-p tbody td{margin-top:7px}
  .tabla-p tbody td:last-child{width:auto;margin-top:12px}
}

/* ── dudas ── */
.faq{border-top:1px solid var(--rule);max-width:78ch}
.faq details{border-bottom:1px solid var(--rule)}
.faq summary{
  position:relative;cursor:pointer;list-style:none;
  padding:clamp(17px,2.4vh,23px) 44px clamp(17px,2.4vh,23px) 0;
  font-size:clamp(.99rem,1.5vw,1.1rem);letter-spacing:-0.024em;
  font-variation-settings:'wdth' 96,'wght' 560;
  transition:color var(--toque) var(--curva);
}
.faq summary::-webkit-details-marker{display:none}
.faq summary:hover{color:var(--sello)}
.faq summary::after{
  content:'';position:absolute;right:2px;top:50%;width:13px;height:13px;margin-top:-6.5px;
  background:
    linear-gradient(var(--ink-40),var(--ink-40)) center/13px 1px no-repeat,
    linear-gradient(var(--ink-40),var(--ink-40)) center/1px 13px no-repeat;
  transition:transform var(--medio) var(--curva),background-size var(--medio) var(--curva);
}
.faq summary:hover::after{
  background-image:linear-gradient(var(--sello),var(--sello)),linear-gradient(var(--sello),var(--sello));
}
.faq details[open] summary::after{
  transform:rotate(90deg);
  background-size:13px 1px,1px 0;
}
.faq details p{
  padding:0 44px clamp(19px,2.6vh,26px) 0;
  color:var(--ink-60);max-width:64ch;line-height:1.6;
}

/* ── cierre en banda: el sello acompaña ── */
.banda-env{
  display:grid;grid-template-columns:minmax(0,1fr) auto;
  gap:clamp(26px,5vw,72px);align-items:center;
}
.banda-sello{display:grid;place-items:center}
.cierre .sello{color:#93BCF6}
@media (max-width:860px){
  .banda-env{grid-template-columns:1fr;justify-items:start}
  .banda-sello{margin-top:8px}
}

/* el texto del servicio respira sin panel: la maqueta es la unica superficie */
.serv-texto .incluye{margin-top:11px}
.serv-viva .maqueta{background:var(--panel);box-shadow:var(--relieve);border-radius:12px}

/* ═══════════════════════════════════════════════════════════════
   CONTACTO · el formulario vive también sobre papel
   La home lo aloja en tinta; contacto en claro. Mismo formulario,
   dos superficies. Las reglas oscuras existentes no se tocan.
   ═══════════════════════════════════════════════════════════════ */

.contacto-hero{padding-top:clamp(112px,16vh,158px);padding-bottom:clamp(40px,6vh,64px)}
.contacto-hero h1{max-width:15ch}
.contacto-hero>.env>.parrafo{margin-top:clamp(16px,2.4vh,24px);max-width:54ch}
.contacto-hero .formulario{margin-top:clamp(34px,5vh,56px)}
.contacto-hero .lado{display:flex;flex-direction:column;align-items:flex-start}
.contacto-hero .lado .sello{margin-bottom:clamp(26px,4vh,42px);align-self:center}
@media (max-width:820px){
  .contacto-hero .lado{margin-top:8px}
  .contacto-hero .lado .sello{align-self:flex-start;--s:150px}
}

/* nada parpadea antes de que entre: mismo contrato que el hero de la home */
/* la entrada de contacto vive con la de la home, arriba, y la hace el CSS */

/* el desplegable, dibujado en CSS: sin glifo prestado */
.grupo select{
  width:100%;font:inherit;font-size:1rem;padding:12px 0;background:transparent;
  border:0;border-bottom:1px solid var(--ink-40);color:var(--ink);
  appearance:none;-webkit-appearance:none;cursor:pointer;border-radius:0;
  transition:border-color var(--toque) var(--curva);
}
.grupo select:focus{outline:none}
/* La lista desplegada la pinta el sistema, no el CSS. Lo único que decide si
   sale clara u oscura es `color-scheme`, que va en el bloque del tema; sin él,
   en modo oscuro se abría una lista blanca sobre una web oscura. Las opciones
   además declaran color por si el sistema no hereda. */
.grupo select option{background:var(--panel);color:var(--ink)}
.selecta{position:relative;display:block}
/* el mismo chevron que la navegación, no dos bordes girados 45° */
.selecta::after{
  content:'';position:absolute;right:2px;top:50%;transform:translateY(-50%);
  width:11px;height:7px;pointer-events:none;
  background:var(--ink-40);
  -webkit-mask:var(--chevron) center/contain no-repeat;
  mask:var(--chevron) center/contain no-repeat;
  transition:background var(--toque) var(--curva);
}
.selecta:hover::after{background:var(--ink)}
.selecta:focus-within::after{background:var(--sello)}

/* ── variante clara: gana por especificidad, no reescribe la oscura ──
   Los campos tienen SUPERFICIE, no un filete debajo. Es la misma lección que
   ya costó el campo del mini-diagnóstico: con fondo transparente y una sola
   línea inferior, un campo se lee como una frase subrayada y no como algo que
   se pueda rellenar. Un formulario tiene que parecer rellenable antes de que
   nadie lo intente. */
.claro .grupo label{color:var(--ink-60)}
.claro .grupo input,.claro .grupo textarea,.claro .grupo select{
  /* el borde identifica el campo: componente de interfaz, 3:1 mínimo */
  color:var(--ink);caret-color:var(--sello);
  background:var(--panel);
  border:1px solid var(--ink-40);border-radius:10px;
  padding:13px 14px;
  transition:border-color var(--toque) var(--curva),box-shadow var(--toque) var(--curva);
}
.claro .grupo textarea{min-height:120px}
.claro .grupo input::placeholder,.claro .grupo textarea::placeholder{color:var(--ink-40)}
.claro .grupo input:hover,.claro .grupo textarea:hover,.claro .grupo select:hover{border-color:var(--ink-60)}
.claro .grupo input:focus,.claro .grupo textarea:focus,.claro .grupo select:focus{
  border-color:var(--sello);box-shadow:0 0 0 3px var(--sello-suave);
}
.claro .selecta::after{right:14px}
.claro .campos{max-width:none}
.claro .grupo{position:relative}
.claro .grupo input:user-invalid,.claro .grupo textarea:user-invalid{border-color:#B3403A}
.claro .aviso{color:#B3403A}
.claro .directo a{color:var(--ink-60)}
.claro .directo a:hover{color:var(--sello)}
.claro .hecho .sello{color:var(--sello)}
.claro .dato{color:var(--ink-40)}

/* ── qué pasa después de darle a enviar ── */
.pasos-tras .fase{grid-template-columns:clamp(3.4rem,7vw,5.6rem) minmax(0,1fr) minmax(0,1.15fr)}
.pasos-tras .fase p b{color:var(--ink);font-variation-settings:'wght' 620}
@media (max-width:820px){.pasos-tras .fase{grid-template-columns:1fr}}

/* la respuesta se firma: el segundo y último sello de esta página */
.contacto-hero .hecho{padding:clamp(20px,4vh,44px) 0}

/* ═══════════════════════════════════════════════════════════════
   EL CARRIL · los cuatro servicios como una estantería de láminas
   El scroll vertical avanza lateralmente. Nada se mueve solo: el
   recorrido lo termina siempre el visitante, sin snap.
   ═══════════════════════════════════════════════════════════════ */

.seccion--cab{padding-bottom:0}

.carril-pista{position:relative}
.carril-fijo{
  --cp-ancho:min(1200px, 88vw);
  height:100vh;display:flex;flex-direction:column;justify-content:center;
  /* el titular de la sección queda justo encima: 86 px de aire lo dejaban
     colgado y separado de lo que anuncia */
  padding:clamp(20px,3vh,34px) 0 clamp(42px,6vh,66px);overflow:hidden;
}
/* el relleno centra el panel activo justo donde cae el contenedor del resto del sitio */
.via{
  display:flex;gap:clamp(20px,3vw,44px);
  padding-inline:calc((100% - var(--cp-ancho))/2);
  perspective:1700px;perspective-origin:50% 50%;
}
.via:focus-visible{outline:2px solid var(--sello);outline-offset:-4px}

.cp{
  flex:0 0 auto;width:var(--cp-ancho);
  display:grid;grid-template-columns:minmax(0,.78fr) minmax(0,1.22fr);
  gap:clamp(22px,3.4vw,52px);align-items:center;
  transform-origin:center;
}
.cp-nombre{
  font-size:clamp(1.5rem,3.2vw,2.6rem);line-height:1.06;letter-spacing:-0.04em;
  font-variation-settings:'wdth' 92,'wght' 620;max-width:13ch;
}
.cp-txt .parrafo{margin-top:15px;max-width:40ch;font-size:.95rem}
.cp-txt .incluye{margin-top:20px}
.cp-txt .enlace{display:inline-block;margin-top:22px}
.cp-viva .maqueta{border-radius:12px;box-shadow:var(--relieve);background:var(--panel)}

/* avance: el visitante ve siempre cuánto queda y puede saltar */
.avance{
  display:flex;align-items:center;gap:16px;
  margin-top:clamp(20px,3vh,34px);
  padding-inline:calc((100% - var(--cp-ancho))/2);
}
.puntos{display:flex;gap:9px}
.pt{
  width:7px;height:7px;border-radius:50%;padding:0;cursor:pointer;
  border:1px solid var(--ink-40);background:transparent;
  transition:background var(--toque) var(--curva),border-color var(--toque) var(--curva);
}
.pt:hover{border-color:var(--ink-40)}
.pt.activo{background:var(--sello);border-color:var(--sello)}
.avance-riel{position:relative;flex:1;height:1px;background:var(--rule);max-width:340px}
.avance-riel span{position:absolute;left:0;top:0;height:1px;background:var(--sello);width:0}
.avance-txt{font-size:9px;color:var(--ink-40);letter-spacing:.03em;white-space:nowrap}

/* táctil y pantalla estrecha: se abandona el secuestro y manda el gesto nativo */


/* sin movimiento: los cuatro se leen seguidos, sin fijar ni desplazar nada */
@media (prefers-reduced-motion: reduce){
  .carril-fijo{height:auto;display:block;overflow:visible}
  .via{
    display:flex;flex-direction:column;gap:clamp(34px,6vh,58px);
    transform:none!important;padding-inline:var(--margin);
    perspective:none;transform-style:flat;
  }
  .cp{width:auto;opacity:1!important;transform:none!important}
  .avance{display:none}
}

/* pantalla baja: el panel se aprieta para que el enlace nunca caiga fuera del recorte */
@media (max-height:800px){
  .carril-fijo{padding:clamp(50px,7vh,72px) 0 clamp(30px,4vh,46px)}
  .cp-nombre{font-size:clamp(1.3rem,2.5vw,1.95rem)}
  .cp-txt .parrafo{margin-top:11px;font-size:.89rem}
  .cp-txt .incluye{margin-top:13px}
  .cp-txt .incluye li{padding:4px 0;font-size:.83rem}
  .cp-txt .enlace{margin-top:15px}
}
/* en los respaldos no hay JS que reponga la interacción */
@media (max-width:860px){.cp{pointer-events:auto!important}}
@media (prefers-reduced-motion: reduce){.cp{pointer-events:auto!important}}

/* ═══════════ EL SISTEMA VIVO · el lienzo detrás de todo ═══════════ */
#sistema{position:fixed;inset:0;width:100%;height:100%;z-index:0;pointer-events:none}
main,.pie{position:relative;z-index:1}

/* ── el umbral: la única pantalla en la que no ocurre nada más ── */
.umbral{min-height:132vh;display:flex;align-items:center}
.frase-um{
  font-size:clamp(1.45rem,3.6vw,3rem);line-height:1.16;letter-spacing:-0.042em;
  font-variation-settings:'wdth' 92,'wght' 560;max-width:17ch;text-wrap:balance;
}
.frase-um em{font-style:normal;color:var(--sello);font-variation-settings:'wdth' 90,'wght' 720}
@media (prefers-reduced-motion: reduce){.umbral{min-height:0;padding:var(--aire) 0}}

/* ═══════════ EL MARGEN QUE SE ANOTA SOLO ═══════════
   El filete ya llevaba la barra de avance. Ahora además marca dónde empieza
   cada sección y rotula la que estás leyendo. Es la anotación al margen de un
   documento: orientación, no decoración. */
.muesca{
  position:absolute;left:-3px;width:7px;height:1px;background:var(--rule);
  transition:background var(--medio) var(--curva);
}
.muesca.pasada{background:var(--ink-40)}
.rotulo-margen{
  position:fixed;z-index:3;pointer-events:none;
  left:max(2px, calc(50% - var(--ancho)/2 + var(--margin) - 12px));
  bottom:104px;
  font-family:'Martian Mono',monospace;font-size:8.5px;letter-spacing:.05em;
  color:var(--ink-40);white-space:nowrap;
  /* gira sobre su esquina inferior izquierda: el texto sube desde el ancla
     y no se sale por abajo, mida lo que mida el nombre de la sección */
  transform-origin:left bottom;transform:rotate(-90deg);
  opacity:0;transition:opacity var(--medio) var(--curva);
}
.rotulo-margen.puesto{opacity:1}
@media (max-width:860px){.rotulo-margen{display:none}}

/* ═══════════ LA TIPOGRAFÍA QUE SE ABRE ═══════════
   Archivo es variable en anchura: los titulares de sección llegan comprimidos
   y se abren a su anchura normal una sola vez. El medio sello, aplicado a la letra. */
.abre{font-variation-settings:'wdth' 74,'wght' 660}
.abierto{transition:font-variation-settings var(--completo) var(--curva)}
@media (prefers-reduced-motion: reduce){
  .abre{font-variation-settings:'wdth' 92,'wght' 620}
  .abierto{transition:none}
}

/* ═══════════ EL MINI-DIAGNÓSTICO ═══════════
   Un campo, no un buscador. Traduce lo que el visitante escribe al servicio
   que le toca, y se lleva su texto hasta el formulario de contacto.
   Sin JavaScript el bloque no aparece: un campo que no hace nada es peor que nada. */
.diag{margin-bottom:clamp(28px,4vh,44px)}
.diag[hidden]{display:none}
/* El campo no se leía como campo. El marcador de posición iba a 21 px y la
   etiqueta a 12,5, o sea que el ejemplo pesaba más que la instrucción, y con
   fondo transparente y un solo filete abajo la caja se leía como una frase
   subrayada. Ahora tiene superficie, borde entero y radio: forma de campo. */
.diag-et{
  display:block;font-size:.875rem;letter-spacing:-0.012em;
  font-variation-settings:'wdth' 100,'wght' 560;color:var(--ink-60);margin-bottom:9px;
}
.diag-caja{position:relative;max-width:56ch}
#diag-txt{
  width:100%;font:inherit;font-size:1.02rem;
  letter-spacing:-0.016em;font-variation-settings:'wdth' 98,'wght' 450;
  padding:15px 17px;background:var(--panel);color:var(--ink);
  /* el borde identifica el campo, así que va en --ink-40 y no en --rule */
  border:1px solid var(--ink-40);border-radius:10px;
  box-shadow:var(--relieve);
  transition:border-color var(--toque) var(--curva),box-shadow var(--toque) var(--curva);
}
/* el ejemplo se lee como ejemplo: más pequeño que lo que tú escribes */
#diag-txt::placeholder{
  color:var(--ink-40);font-size:.92rem;
  font-variation-settings:'wdth' 98,'wght' 400;
}
#diag-txt:hover{border-color:var(--ink)}
#diag-txt:focus{
  outline:none;border-color:var(--sello);
  box-shadow:0 0 0 3px var(--sello-suave);
}

.diag-salida{
  margin-top:18px;min-height:2.6em;
  font-size:clamp(.98rem,1.6vw,1.14rem);line-height:1.45;letter-spacing:-0.022em;
  color:var(--ink-60);max-width:58ch;
}
.diag-salida b{color:var(--sello);font-variation-settings:'wdth' 92,'wght' 700}
/* el servicio reconocido lleva a su página: enrutar es el trabajo de esta página */
.diag-serv{
  color:var(--sello);font-variation-settings:'wdth' 92,'wght' 700;
  text-decoration:none;border-bottom:1px solid transparent;
  transition:border-color var(--toque) var(--curva);
}
.diag-serv:hover,.diag-serv:focus-visible{border-bottom-color:var(--sello)}
.diag-salida .btn{margin-top:14px}
.diag-salida .sigue{display:block}

/* las filas que no encajan se apagan; siguen ahí, legibles y navegables */
.tabla-p tbody tr{transition:opacity var(--medio) var(--curva)}
.tabla-p tbody tr.apagada{opacity:.26}
.tabla-p tbody tr.encaja th{color:var(--sello)}
.tabla-p tbody tr.encaja td a{color:var(--sello);border-color:var(--sello)}

/* contacto: el texto que llegó de servicios, dicho sin misterio */
.traido{
  margin-top:9px;font-family:'Archivo',system-ui,sans-serif;font-size:12.5px;
  font-variation-settings:'wght' 560;letter-spacing:-0.005em;color:var(--sello);
}

/* ═══════════ TRES CAPACIDADES, NO UN CATÁLOGO ═══════════
   El lema es la frase que define la capacidad; el resumen la desarrolla. */
.cp-lema{
  margin-top:11px;font-size:clamp(1rem,1.5vw,1.15rem);line-height:1.3;letter-spacing:-0.028em;
  font-variation-settings:'wdth' 94,'wght' 600;color:var(--sello);max-width:26ch;
}
.cp-txt .cp-lema + .parrafo{margin-top:10px}
.serv-cab .parrafo b{display:block;color:var(--sello);margin-bottom:7px;
  font-variation-settings:'wdth' 94,'wght' 640;font-size:1.05em}
.si-solo{margin-top:clamp(24px,3.4vh,34px);border-top:1px solid var(--rule);padding-top:18px}
.serv-viva .maqueta + .maqueta{margin-top:0}

/* la línea que abre el techo: no es una lista cerrada */
.amplitud{
  font-size:clamp(1.15rem,2.4vw,1.85rem);line-height:1.32;letter-spacing:-0.036em;
  font-variation-settings:'wdth' 94,'wght' 520;color:var(--ink-60);max-width:30ch;
  border-left:1px solid var(--sello);padding-left:clamp(18px,2.6vw,30px);
}
.amplitud em{font-style:normal;color:var(--ink);font-variation-settings:'wdth' 92,'wght' 700}

/* ═══════════ ÍNDICE DE SERVICIOS · los cinco nombres, siempre a la vista ═══════════
   La lista es el mensaje: se ve de un golpe todo lo que se hace. El panel
   de al lado es el que se desliza. */
.carril-fijo{--cp-ancho:min(1160px, 86vw)}
.carril-marco{
  display:grid;grid-template-columns:minmax(0,.26fr) minmax(0,1fr);
  gap:clamp(20px,3vw,48px);align-items:center;
  padding-inline:calc((100% - var(--cp-ancho))/2);
}
@media (max-width:860px){
  /* minmax(0,1fr) y no 1fr: una columna 1fr crece hasta caber los cinco paneles
     a 86vw y desbordaba la home a 1.385 px en un viewport de 390. Con la página
     desbordada, además, los elementos fijos —la barra— se anclan a ese ancho y
     no al de la pantalla, así que el menú se salía fuera. */
  .carril-marco{grid-template-columns:minmax(0,1fr);gap:18px;padding-inline:var(--margin)}
}

.ix-serv{list-style:none;display:flex;flex-direction:column;gap:1px}
.ix-serv button{
  position:relative;display:flex;align-items:baseline;gap:11px;width:100%;
  background:none;border:0;cursor:pointer;text-align:left;padding:11px 0;
  font-size:clamp(.92rem,1.35vw,1.06rem);letter-spacing:-0.028em;
  font-variation-settings:'wdth' 96,'wght' 500;color:var(--ink-40);
  transition:color var(--medio) var(--curva),font-variation-settings var(--medio) var(--curva);
}
.ix-serv button:hover{color:var(--ink)}
.ix-serv button .n{
  flex:0 0 auto;font-family:'Martian Mono',monospace;font-size:8px;letter-spacing:.04em;
  color:var(--ink-40);transition:color var(--medio) var(--curva);
}
.ix-serv button[aria-current="true"]{color:var(--ink);font-variation-settings:'wdth' 92,'wght' 700}
.ix-serv button[aria-current="true"] .n{color:var(--sello)}
.ix-serv button::after{
  content:'';position:absolute;left:0;right:100%;bottom:4px;height:1px;background:var(--sello);
  transition:right var(--medio) var(--curva);
}
.ix-serv button[aria-current="true"]::after{right:0}

/* en pantalla estrecha el índice se tumba y se desliza con el dedo */
@media (max-width:860px){
  /* La tira horizontal de nombres se retira: la lista de los cinco vive ahora
     en vertical, entera y sin gestos. Lo que sigue quedó sin uso y se conserva
     inerte por si volviera a hacer falta un índice deslizante. */
  .ix-serv{display:none}
  /* El índice pasa a fila que se desliza. La máscara de degradado en el borde
     derecho es lo único que dice que hay más: sin ella el quinto servicio
     aparecía cortado a media palabra y parecía un fallo, no una invitación.
     El anclaje hace que cada nombre pare en su sitio en vez de quedar a medias. */
  .ix-serv{
    flex-direction:row;overflow-x:auto;gap:18px;padding-bottom:8px;
    scrollbar-width:none;
    scroll-snap-type:x proximity;
    -webkit-overflow-scrolling:touch;
    scroll-padding-left:2px;
    mask-image:linear-gradient(90deg,#000 calc(100% - 42px),transparent);
  }
  .ix-serv::-webkit-scrollbar{display:none}
  .ix-serv li{flex:0 0 auto;scroll-snap-align:start}
  .ix-serv button{padding:9px 0;font-size:.92rem;min-height:44px}
  .ix-serv button .n{display:none}
}

/* ── el titular de un servicio es su resultado, no su nombre ── */
.cp-titular{
  font-size:clamp(1.4rem,2.9vw,2.35rem);line-height:1.1;letter-spacing:-0.042em;
  font-variation-settings:'wdth' 92,'wght' 620;max-width:17ch;
}
.cp-txt .cp-titular + .parrafo{margin-top:14px;max-width:44ch;font-size:.94rem}
.cp-claves{list-style:none;margin-top:20px;display:grid;grid-template-columns:1fr 1fr;gap:5px 18px}
@media (max-width:560px){.cp-claves{grid-template-columns:1fr}}
.cp-claves li{
  position:relative;padding:4px 0 4px 20px;font-size:.85rem;line-height:1.35;color:var(--ink-60);
}
.cp-claves li::before{
  content:'';position:absolute;left:0;top:.78em;width:11px;height:1px;background:var(--sello);
}

/* ── servicios.html: los cuatro bloques, dos beneficios y dos objeciones ── */
.bloques{display:grid;grid-template-columns:1fr 1fr;gap:clamp(16px,2.4vw,26px);margin-top:12px}
@media (max-width:640px){.bloques{grid-template-columns:1fr}}
.bloque h4{
  font-size:.95rem;letter-spacing:-0.026em;font-variation-settings:'wdth' 94,'wght' 640;
  padding-top:13px;border-top:1px solid var(--sello);
}
.bloque p{margin-top:7px;font-size:.86rem;line-height:1.45;color:var(--ink-60)}

/* ── el proceso propio de cada servicio ── */
.proceso{margin-top:clamp(26px,3.6vh,36px);border-top:1px solid var(--rule);padding-top:20px}
.proceso ol{list-style:none;counter-reset:pp;display:grid;gap:14px;margin-top:12px}
.proceso li{counter-increment:pp;display:grid;grid-template-columns:26px 1fr;gap:12px;align-items:baseline}
.proceso li::before{
  content:counter(pp,decimal-leading-zero);
  font-family:'Martian Mono',monospace;font-size:8px;letter-spacing:.03em;color:var(--sello);
}
.proceso b{display:block;font-size:.92rem;letter-spacing:-0.024em;font-variation-settings:'wdth' 96,'wght' 620}
.proceso span{display:block;margin-top:4px;font-size:.85rem;line-height:1.45;color:var(--ink-60)}

/* ── maqueta · el registro de una llamada ──
   Deliberadamente distinta de la de chat: aquí no hay burbujas, hay acta. */
.voz-cab{
  display:flex;align-items:center;gap:9px;padding:12px 16px;
  border-bottom:1px solid var(--rule);background:var(--paper-2);
  font-size:12px;color:var(--ink-60);
}
.voz-cab b{font-variation-settings:'wdth' 96,'wght' 620;color:var(--ink);font-size:.9rem}
.voz-cab .mono{margin-left:auto;font-size:8.5px;color:var(--ink-40)}
.voz-punto{
  width:7px;height:7px;border-radius:50%;background:var(--sello);flex:0 0 auto;
  box-shadow:0 0 0 0 rgba(14,86,194,.45);animation:latido 2.2s ease-out infinite;
}
@keyframes latido{
  0%{box-shadow:0 0 0 0 rgba(14,86,194,.45)}
  70%{box-shadow:0 0 0 7px rgba(14,86,194,0)}
  100%{box-shadow:0 0 0 0 rgba(14,86,194,0)}
}
.voz-turnos{list-style:none}
.voz-turnos li{
  display:grid;grid-template-columns:64px 1fr;gap:12px;align-items:baseline;
  padding:9px 16px;border-bottom:1px solid var(--rule-2);
}
.voz-turnos li::before{
  content:attr(data-t);
  font-family:'Martian Mono',monospace;font-size:7.5px;color:var(--ink-40);
  font-variant-numeric:tabular-nums;grid-row:1;grid-column:1;
}
.voz-turnos .quien{
  display:block;font-size:7px;letter-spacing:.05em;color:var(--ink-40);
  grid-row:2;grid-column:1;margin-top:-2px;
}
.voz-turnos .quien.agente{color:var(--sello)}
.voz-turnos p{grid-row:1 / span 2;grid-column:2;font-size:.83rem;line-height:1.4}
.voz-cierre{padding:12px 16px;border-top:1px solid var(--rule);background:var(--sello-suave)}
.voz-cierre .mono{display:block;font-size:7px;letter-spacing:.05em;color:var(--sello);margin-bottom:5px}
.voz-cierre p{font-size:.83rem;line-height:1.4;color:var(--ink)}
@media (prefers-reduced-motion: reduce){.voz-punto{animation:none}}

/* el carril ahora vive dentro de una columna: la geometria cambia */
.via-caja{overflow:hidden;position:relative}
.carril-marco .via{padding-inline:0}
.carril-marco .cp{width:100%;grid-template-columns:minmax(0,.82fr) minmax(0,1.18fr)}
@media (max-width:860px){
  .carril-marco .cp{width:86vw;grid-template-columns:1fr}
  .via-caja{overflow:visible}

  /* En táctil el carril deja de medir una pantalla exacta y fluye con su
     contenido. `height:100vh` hacía dos cosas malas a la vez: obligaba a la
     tarjeta a caber en 812 px cuando pide 953 —así que había que desplazarse
     dentro de una sección que ya se recorre de lado— y, siendo `vh`, cambiaba
     de alto cada vez que el navegador esconde su barra, moviendo la página
     bajo el dedo. */
  .carril-fijo{height:auto;min-height:0;padding:clamp(26px,4vh,40px) 0 clamp(22px,3vh,32px)}
  .carril-marco .cp{gap:14px}
  .cp-txt .parrafo{margin-top:10px}
}
/* el FAQ dentro de una seccion de servicio pesa menos que el general */
.faq--serv{margin-top:clamp(26px,3.6vh,38px);max-width:74ch;border-top:1px solid var(--rule)}
.faq--serv summary{font-size:clamp(.94rem,1.3vw,1.02rem);padding-block:clamp(14px,1.9vh,18px)}
.faq--serv details p{padding-bottom:clamp(15px,2vh,20px);font-size:.9rem}

/* ═══════════ EL NOMBRE ENCABEZA, EL RESULTADO LE SIGUE ═══════════
   El visitante tiene que saber qué está leyendo antes de que le
   vendan nada. Y así el elemento que viaja en M1 dice lo mismo
   en las dos páginas. */
.cp-nombre{
  font-size:clamp(1.42rem,2.9vw,2.35rem);line-height:1.06;letter-spacing:-0.042em;
  font-variation-settings:'wdth' 92,'wght' 620;
}
.cp-txt .cp-titular{
  margin-top:10px;font-size:clamp(1rem,1.5vw,1.18rem);line-height:1.3;
  letter-spacing:-0.028em;font-variation-settings:'wdth' 94,'wght' 560;
  color:var(--sello);max-width:26ch;
}
.cp-txt .cp-titular + .parrafo{margin-top:12px}

.serv-resultado{
  font-size:clamp(1.04rem,1.75vw,1.32rem);line-height:1.28;letter-spacing:-0.032em;
  font-variation-settings:'wdth' 94,'wght' 600;color:var(--sello);max-width:30ch;
}
.serv-resultado + .parrafo{margin-top:12px}

/* ═══════════ EL CTA, QUE SE VEA ═══════════
   Mismo tamaño y misma tipografía que el botón primario, pero en línea:
   se lee como botón sin competir con la acción negra de la página. */
.btn--linea{
  background:transparent;color:var(--ink);border:1px solid var(--ink);
  padding:14px 24px;font-size:14px;margin-top:24px;
  transition:background var(--toque) var(--curva),color var(--toque) var(--curva);
}
.btn--linea:focus-visible{background:var(--ink);color:var(--paper)}
@media (hover:hover){.btn--linea:hover{background:var(--ink);color:var(--paper)}}
.btn--linea .flecha{transition:transform var(--medio) var(--curva)}
.btn--linea:hover .flecha,.btn--linea:focus-visible .flecha{transform:translateX(4px)}
@media (prefers-reduced-motion: reduce){.btn--linea .flecha{transition:none}}

/* ═══════════ EL MARGEN, COMO INSTRUMENTO ═══════════
   Deja de ser un filete con relleno y pasa a ser una regla que se lee:
   cifra de avance, muescas por sección y la del tramo activo marcada. */
.cifra-margen{
  position:fixed;z-index:3;pointer-events:none;
  left:max(2px, calc(50% - var(--ancho)/2 + var(--margin) - 12px));
  top:132px;
  font-family:'Martian Mono',monospace;font-size:9px;letter-spacing:.02em;
  font-variant-numeric:tabular-nums;color:var(--ink-40);
  transform-origin:left top;transform:rotate(-90deg) translateX(-100%);
  opacity:0;transition:opacity var(--medio) var(--curva);
}
.cifra-margen.puesto{opacity:1}
.cifra-margen b{color:var(--sello);font-weight:400}
@media (max-width:860px){.cifra-margen{display:none}}

/* Las muescas colgaban 4 px a la izquierda del filete (la activa, 8), y el filete
   se pega al borde de la ventana en cuanto no hay margen: en 1024 px las siete
   muescas de las once páginas salían fuera de la pantalla. Ahora crecen hacia
   dentro, que es donde hay sitio siempre. */
.muesca{width:9px;left:0}
.muesca.pasada{background:var(--ink-40)}
.muesca.aqui{width:17px;left:0;height:1px;background:var(--sello)}
.margen::after{width:1px;background:var(--sello)}


/* ═══════════ LA HOJA DE SERVICIOS ═══════════
   Baja al ancho del contenedor y alineada al mismo grid que todo el sitio, con
   los cinco en cinco columnas. Colgaba de su ítem en un panel de 880 px, que es
   la mitad de la página: los cinco quedaban apretados en dos columnas y el menú
   pesaba menos que cualquier sección del cuerpo.
   La nav sigue siendo nivel 0: la hoja aparece, la barra no se mueve. */
.tiene-sub{position:relative}
.tiene-sub > a{display:flex;align-items:center;gap:5px}
.tiene-sub > a .v{opacity:.55;transition:transform var(--medio) var(--curva),opacity var(--toque) var(--curva)}
.tiene-sub.abierto > a .v,.tiene-sub > a[aria-expanded="true"] .v{transform:rotate(180deg);opacity:1}

.sub{
  /* fija y no absoluta: se centra en la página, no cuelga del ítem, así no se
     sale por la derecha aunque el menú esté pegado al borde.
     **720 px, no el contenedor entero.** A 1.280 los cinco caían en cinco
     columnas de 248 px para textos de 200: el menú se leía estirado y pesaba
     más que cualquier sección del cuerpo. Un desplegable es un atajo, no una
     sección. Automatika reparte sus cuatro en dos columnas por lo mismo. */
  position:fixed;top:var(--alto-nav,70px);left:50%;z-index:5;
  width:min(880px, calc(100vw - 2*var(--margin)));
  background:var(--panel);border:1px solid var(--panel-borde);border-radius:14px;
  box-shadow:0 1px 2px rgba(22,21,15,.05),0 18px 44px -16px rgba(22,21,15,.18);
  overflow:hidden;
  opacity:0;visibility:hidden;pointer-events:none;
  transform:translate(-50%,-8px);
  transition:opacity var(--medio) var(--curva),transform var(--medio) var(--curva),
             visibility 0s linear var(--medio);
}
.tiene-sub.abierto > .sub,.tiene-sub:focus-within > .sub{
  opacity:1;visibility:visible;pointer-events:auto;transform:translate(-50%,0);
  transition-delay:0s;
}
/* el puente invisible: bajar el ratón hasta la hoja no la cierra */
.tiene-sub::after{content:'';position:absolute;top:100%;left:-30px;right:-30px;height:18px}

/* Los cinco, cada uno con su resultado debajo: los nombres solos no dejan
   elegir. Sin iconos, sin numerales, sin monoespaciada.
   **La retícula la hace el aire, no la línea.** Iban separados por cuatro
   filetes verticales de borde a borde, que convertían el menú en un panel de
   horarios de estación; y sin forma propia, así que el hover encendía un
   rectángulo a sangre en vez de señalar una opción. */
/* **Dos filas, nunca tres.** Es la retícula de Automatika, y lo que mantiene
   el panel corto: con tres filas medía 273 px de alto y se recorría como una
   sección. Cinco servicios en dos filas son tres columnas, y el hueco cae en
   la esquina. El flujo va por columnas, así que se leen 1-2, 3-4, 5. */
.sub-cinco{
  list-style:none;margin:0;padding:9px;
  display:grid;grid-template-columns:repeat(3,minmax(0,1fr));
  grid-template-rows:repeat(2,auto);grid-auto-flow:column;gap:1px;
}
.sub-cinco a{
  display:block;height:100%;padding:11px 13px 12px;border-radius:9px;
  text-decoration:none;font-family:'Archivo',system-ui,sans-serif;color:var(--ink);
  transition:background var(--medio) var(--curva);
}
.sub-cinco a:hover,.sub-cinco a:focus-visible,
.sub-cinco a[aria-current="page"]{background:var(--sello-suave)}
.sub-cinco b{
  display:block;font-size:14.5px;line-height:1.3;margin-bottom:3px;
  font-variation-settings:'wdth' 96,'wght' 620;letter-spacing:-0.02em;
  transition:color var(--medio) var(--curva);
}
.sub-cinco a:hover b,.sub-cinco a:focus-visible b,
.sub-cinco a[aria-current="page"] b{color:var(--sello)}
.sub-cinco i{
  display:block;font-style:normal;font-size:12.5px;line-height:1.4;
  letter-spacing:-0.006em;color:var(--ink-60);
}

/* El pie de la hoja. Un filete y aire, sin superficie propia: era una banda
   gris que se llevaba 79 px de los 207 de la hoja —un 38 %— para una frase. */
.sub-banda{
  display:flex;flex-wrap:wrap;align-items:center;justify-content:space-between;
  gap:8px 22px;margin:0 12px;padding:11px 3px 13px;
  border-top:1px solid var(--rule-2);
}
.sub-banda p{
  margin:0;max-width:46ch;font-size:12px;line-height:1.4;
  letter-spacing:-0.004em;color:var(--ink-40);
}
/* `.sub .sub-cta` y no `.sub-cta` a secas: el enlace vive dentro del <ul> de
   la navegación, así que `.menu a` le ganaba en especificidad y lo dejaba
   gris. Es la única conversión de la hoja y tiene que llevar el acento. */
.sub .sub-cta{
  display:inline-flex;align-items:center;gap:8px;white-space:nowrap;
  font-family:'Archivo',system-ui,sans-serif;font-size:13px;
  font-variation-settings:'wdth' 100,'wght' 620;letter-spacing:-0.012em;
  color:var(--sello);text-decoration:none;
  transition:color var(--toque) var(--curva);
}
.sub .sub-cta::after{display:none}
.sub .sub-cta .flecha{transition:transform var(--medio) var(--curva)}
.sub .sub-cta:hover,.sub .sub-cta:focus-visible{color:var(--sello-fuerte)}
.sub .sub-cta:hover .flecha,.sub .sub-cta:focus-visible .flecha{transform:translateX(4px)}

@media (max-width:820px){
  .sub-cinco{grid-template-columns:repeat(2,minmax(0,1fr));grid-template-rows:repeat(3,auto)}
}
@media (max-width:560px){
  .sub-cinco{grid-template-columns:minmax(0,1fr);grid-auto-flow:row;grid-template-rows:none}
}

/* ═══════════ EL PANEL TÁCTIL ═══════════
   Entra POR DEBAJO de la barra: si la tapa, el botón de cerrar desaparece con
   ella y el menú se queda sin salida. */
.panel-movil{display:none}
@media (max-width:860px){
  .burg{display:inline-flex}
  /* el tema baja al panel: a 390 px la barra sólo aguanta marca, acción y menú */
  .nav-med,.acc-nav .wa-nav,.lado-marca .tema{display:none}
  .lado-marca::after{display:none}
  .lado-marca{gap:0}
  .nav-env{display:flex;justify-content:space-between;gap:12px}
  .acc-nav{gap:10px}
  .cta-nav{padding:9px 14px;font-size:12.5px}
  .cta-nav .flecha{display:none}
  .cta-nav .t-largo{display:none}
  .cta-nav .t-corto{display:inline}

  /* `100dvh` y no `100vh`: con vh, la barra del navegador al aparecer y
     desaparecer cambia la altura y el panel salta o deja contenido fuera. */
  .panel-movil{
    display:flex;flex-direction:column;
    position:fixed;left:0;right:0;top:0;z-index:29;
    height:100dvh;max-height:100dvh;
    background:var(--paper);border-bottom:1px solid var(--rule);
    /* el relleno superior lo marca la barra, que se mide: con un valor fijo
       menor, el primer epígrafe quedaba cortado por debajo de ella */
    padding:calc(var(--alto-nav, 71px) + 10px) var(--margin) 0;
    overflow:hidden;
    transform:translateY(-101%);
    transition:transform var(--completo) var(--curva);
  }
  /* La lista se desplaza y las acciones se quedan clavadas abajo. Antes el
     panel entero era un scroller y el último botón caía 26 px por debajo del
     borde en un iPhone de 812: la única conversión del menú había que ir a
     buscarla. Además, abajo es donde llega el pulgar. */
  .panel-movil > .pm-lista{
    flex:1 1 auto;overflow-y:auto;overscroll-behavior:contain;
    padding-bottom:12px;
  }
  /* La máscara sólo cuando de verdad queda lista por debajo. Puesta siempre,
     desteñía el último enlace —«Contacto» se leía gris, como desactivado—
     aunque no hubiera nada más que ver. La clase la pone el JS midiendo. */
  .panel-movil > .pm-lista.hay-mas{
    mask-image:linear-gradient(180deg,#000 calc(100% - 26px),transparent);
  }
  body.menu-abierto .panel-movil{transform:translateY(0);visibility:visible}
  /* cerrado no es sólo «fuera de pantalla»: sus enlaces seguían recibiendo el
     tabulador, así que en una ventana estrecha se tabulaba a un menú invisible */
  .panel-movil{visibility:hidden;transition:transform var(--completo) var(--curva),visibility 0s linear var(--dur-completo,.42s)}
  body.menu-abierto .panel-movil{transition:transform var(--completo) var(--curva),visibility 0s}

  /* ── la navegación: tres filas y un grupo que se abre ──
     Volcaba los cinco servicios abiertos y con descripción ENCIMA de «Inicio»,
     o sea el nivel más profundo del sitio por delante del nivel superior y
     ocupando 370 px antes de llegar a la primera página. Ahora es lo que hace
     todo el mundo que lo hace bien: padres visibles, hijos plegados. */
  .pm-nav{list-style:none;margin:0;padding:0}
  .pm-nav > li + li{border-top:1px solid var(--rule-2)}
  .pm-nav > li > a,.pm-disparo{
    display:flex;align-items:center;justify-content:space-between;gap:12px;
    width:100%;min-height:54px;padding:14px 0;
    background:none;border:0;text-align:left;cursor:pointer;
    font-family:'Archivo',system-ui,sans-serif;font-size:17px;
    font-variation-settings:'wght' 570;letter-spacing:-0.014em;
    color:var(--ink);text-decoration:none;
    transition:color var(--toque) var(--curva);
  }
  .pm-nav > li > a[aria-current="page"]{color:var(--sello)}
  .pm-disparo .v{
    flex:0 0 auto;width:11px;height:7px;color:var(--ink-40);
    transition:transform var(--medio) var(--curva),color var(--toque) var(--curva);
  }
  .pm-grupo.abierto .pm-disparo .v{transform:rotate(180deg);color:var(--ink)}

  /* La altura se anima con grid y no con max-height: con un máximo inventado,
     la curva se come el tramo sobrante y el cierre llega tarde. 0fr→1fr mide */
  .pm-hijos{display:grid;grid-template-rows:0fr;transition:grid-template-rows var(--medio) var(--curva)}
  .pm-grupo.abierto .pm-hijos{grid-template-rows:1fr}
  .pm-hijos > ul{overflow:hidden;list-style:none;margin:0;padding:0}
  .pm-hijos li a{
    display:flex;align-items:center;justify-content:space-between;gap:10px;
    min-height:46px;padding:11px 0 11px 16px;text-decoration:none;
    font-size:15.5px;font-variation-settings:'wght' 500;letter-spacing:-0.01em;
    color:var(--ink-60);transition:color var(--toque) var(--curva);
  }
  .pm-hijos li + li a{border-top:1px solid var(--rule-2)}
  .pm-hijos li a[aria-current="page"]{color:var(--sello);font-variation-settings:'wght' 600}
  .pm-hijos .pm-todos{color:var(--ink);font-variation-settings:'wght' 560}
  .pm-hijos .pm-todos .flecha{flex:0 0 auto;color:var(--ink-40)}

  /* Con el panel abierto, el CTA de la barra y el de las acciones eran la misma
     acción dos veces en la misma pantalla. Manda el de abajo, que es el que
     alcanza el pulgar. */
  body.menu-abierto .acc-nav .cta-nav{opacity:0;pointer-events:none;transition:opacity var(--toque) var(--curva)}

  /* Con el panel abierto el documento seguía desplazándose por detrás: la
     rueda o un gesto sobre una zona sin lista se lo llevaba, y al cerrar el
     menú aparecías en otro punto de la página. `overscroll-behavior` sólo
     corta el encadenado en el borde de algo que YA se desplaza, así que no
     bastaba cuando la lista cabe entera y no tiene desplazamiento propio. */
  body.menu-abierto{overflow:hidden}
  .panel-movil{overscroll-behavior:none}

  .pm-acc{
    flex:0 0 auto;display:flex;flex-direction:column;gap:10px;
    margin-top:auto;padding:16px 0 calc(16px + var(--sa-abajo));
    border-top:1px solid var(--rule-2);background:var(--paper);
  }
  /* el botón declara su propio color: heredando el del panel salía tinta
     sobre tinta, invisible */
  .pm-acc .cta-nav{
    display:inline-flex;justify-content:center;padding:15px 20px;font-size:14px;
    color:var(--paper);
  }
  .pm-acc .cta-nav .t-largo{display:inline}
  .pm-acc .cta-nav .t-corto{display:none}
  .pm-acc .cta-nav .flecha{display:inline}
  .pm-acc .wa-nav{
    display:inline-flex;justify-content:center;padding:14px;
    border:1px solid var(--ink-40);border-radius:999px;color:var(--ink);
  }
  /* WhatsApp y el tema comparten fila: dos acciones de peso secundario, una
     ancha y otra cuadrada, para que el bloque fijo no coma pantalla */
  .pm-fila{display:flex;align-items:stretch;gap:10px}
  .pm-fila .wa-nav{flex:1 1 auto}
  .pm-fila .tema{flex:0 0 auto;width:52px;height:auto;align-self:stretch}

  /* Pantallas cortas —un iPhone SE o un 8— donde el grupo abierto no cabe.
     No se encoge la letra: se recorta el aire, que es lo que sobra. Los 44 px
     de diana táctil se respetan igual. */
  @media (max-height:720px){
    .panel-movil{padding-top:calc(var(--alto-nav, 71px) + 4px)}
    .pm-nav > li > a,.pm-disparo{min-height:48px;padding:11px 0}
    .pm-hijos li a{min-height:44px;padding-top:9px;padding-bottom:9px}
    .pm-acc{gap:8px;padding-top:12px;padding-bottom:calc(12px + var(--sa-abajo))}
    .pm-acc .cta-nav{padding:13px 20px}
    .pm-acc .wa-nav{padding:12px}
  }
}

@media (prefers-reduced-motion: reduce){
  .sub,.tiene-sub > a .v,.sub-cta .flecha,.panel-movil{transition-duration:.001s}
}



/* ═══════════ UNA PÁGINA DE SERVICIO ═══════════
   El h1 es el resultado. El nombre del servicio baja a la miga de pan, que es
   donde se etiqueta, no donde se grita. */
.serv-portada{padding-top:clamp(104px,15vh,150px)}
.serv-hero{
  display:grid;grid-template-columns:minmax(0,1fr) minmax(0,1.05fr);
  gap:clamp(28px,4.5vw,64px);align-items:center;
}
.serv-hero h1{margin-top:14px}
.serv-hero .parrafo{margin-top:clamp(16px,2.4vh,22px)}
.serv-hero .acciones{margin-top:clamp(24px,3.6vh,36px)}
.serv-hero .btn .flecha{transition:transform var(--medio) var(--curva)}
.serv-hero .btn:hover .flecha,.serv-hero .btn:focus-visible .flecha{transform:translateX(4px)}

/* la miga de pan es navegación, no un dato */
.miga{
  display:flex;flex-wrap:wrap;align-items:center;gap:8px;
  font-family:'Archivo',system-ui,sans-serif;font-size:11.5px;
  font-variation-settings:'wght' 620,'wdth' 100;
  text-transform:uppercase;letter-spacing:.07em;color:var(--ink-40);
}
.miga a{color:inherit;text-decoration:none;transition:color var(--toque) var(--curva)}
.miga a:hover{color:var(--ink)}
.miga b{color:var(--sello);font-weight:400}
.miga span{opacity:.5}

/* los pasos, sin la columna del carril: aquí la sección es suya */
.proceso--suelto ol{max-width:74ch}

@media (max-width:860px){
  .serv-hero{grid-template-columns:1fr;gap:clamp(26px,4vh,36px)}
}

/* ═══════════ EL ÍNDICE DE SERVICIOS ═══════════
   Filas, no tarjetas. Lo que se lee primero es el resultado; el nombre del
   servicio va detrás, en mono, como la etiqueta que es. */
/* ═══════════ EL ÍNDICE DE SERVICIOS ═══════════
   Filas, no tarjetas, y el nombre delante. Llevaba el resultado a 20,5 px en
   tinta y el nombre a 9,5 px en gris pegado al borde derecho, o sea que la
   sección titulada «Los cinco servicios» enterraba los cinco nombres. Y el
   dolor ya lo cuentan las ocho filas de la tabla que hay justo encima.
   Misma lógica que el desplegable: nombre, resultado debajo, acento al pasar. */
.otros{list-style:none;margin:0;border-top:1px solid var(--ink-40)}
.otros li{border-bottom:1px solid var(--rule)}
.otros li:last-child{border-bottom-color:var(--ink-40)}
.otros a{
  display:block;padding:clamp(19px,2.7vh,29px) 0;
  text-decoration:none;color:var(--ink);
  transition:color var(--toque) var(--curva);
}
/* la flecha va pegada al nombre, no en el borde derecho: a 1.000 px de
   distancia señala algo que no estás mirando */
.otros-nom{
  display:flex;align-items:center;gap:clamp(11px,1.2vw,17px);
  font-size:clamp(1.32rem,2.6vw,2.05rem);line-height:1.12;
  letter-spacing:-0.036em;font-variation-settings:'wdth' 94,'wght' 620;
  text-transform:none;
}
.otros-res{
  display:block;margin-top:5px;
  font-size:clamp(.9rem,1.1vw,1rem);line-height:1.45;letter-spacing:-0.014em;
  color:var(--ink-60);transition:color var(--toque) var(--curva);
}
.otros .flecha{
  flex:none;opacity:0;transform:translateX(-7px);
  transition:opacity var(--medio) var(--curva),transform var(--medio) var(--curva);
}
/* el toque es solo color, sin desplazamiento: así lo fija el sistema */
.otros a:hover,.otros a:focus-visible{color:var(--sello)}
.otros a:hover .otros-res,.otros a:focus-visible .otros-res{color:var(--sello)}
.otros a:hover .flecha,.otros a:focus-visible .flecha{opacity:1;transform:translateX(0)}
@media (prefers-reduced-motion: reduce){
  .otros .flecha{opacity:1;transform:none;transition:none}
}
@media (max-width:640px){
  /* en táctil no hay hover, así que la flecha se queda puesta */
  .otros .flecha{opacity:1;transform:none}
}

/* la tabla no es una sección nueva: es la continuación del titular, así que
   no lleva ni titular propio ni el filete que separa secciones */
.seccion--tabla{padding-top:clamp(10px,1.6vh,18px);border-top:0}

/* Un rótulo de sección no es un titular. «Qué incluye» o «Los otros cuatro»
   señalizan, y a 3,3 rem competirían con el h1, que es lo único que aquí
   afirma algo. Mismo peso y misma letra, la mitad de voz. */
.cab--eti h2{font-size:clamp(1.32rem,2.3vw,1.85rem);letter-spacing:-0.034em;max-width:26ch}
.cab--eti{margin-bottom:clamp(20px,2.8vh,30px)}


/* ═══════════ PÁGINA DE SERVICIO · LIMPIEZA DEL 04-09 ═══════════
   Tenía seis titulares de sección para 350 palabras —uno cada 58— todos del
   mismo peso, y dos secciones dejaban media pantalla vacía a la derecha.
   Ahora son cuatro, y lo que ocupa el ancho lo ocupa entero. */

/* los cuatro bloques cuelgan del hero: son la continuación de «qué es esto»
   y no merecían un titular propio que añadiese un peldano más */
.regla--interna{margin-block:clamp(38px,5.5vh,64px)}
.serv-portada .bloques{margin-top:0}
.serv-portada .bloque h2{
  font-size:.98rem;line-height:1.35;letter-spacing:-0.026em;
  font-variation-settings:'wdth' 94,'wght' 640;max-width:none;
  padding-top:13px;border-top:1px solid var(--sello);
}
.serv-portada .bloque p{margin-top:7px;font-size:.87rem;line-height:1.5;color:var(--ink-60)}
@media (min-width:861px){
  .serv-portada .bloques{grid-template-columns:repeat(4,minmax(0,1fr));gap:clamp(18px,2.2vw,30px)}
}

/* el proceso, a tres columnas y a ancho completo. En una sola columna
   estrecha dejaba la mitad derecha de la pantalla en blanco. */
.pasos{
  list-style:none;margin:0;display:grid;
  grid-template-columns:repeat(3,minmax(0,1fr));gap:clamp(20px,3vw,46px);
}
.pasos li{display:block;padding-top:14px;border-top:1px solid var(--ink-40)}
.pasos-n{display:block;margin-bottom:9px}
.pasos b{
  display:block;font-size:1rem;line-height:1.3;letter-spacing:-0.026em;
  font-variation-settings:'wdth' 96,'wght' 620;
}
.pasos b + span{display:block;margin-top:6px;font-size:.87rem;line-height:1.5;color:var(--ink-60)}
@media (max-width:820px){
  .pasos{grid-template-columns:1fr;gap:0}
  .pasos li{padding:14px 0;border-top:1px solid var(--rule)}
  .pasos li:first-child{border-top-color:var(--ink-40)}
}

/* las preguntas, a dos columnas: cuatro acordeones en una sola columna de
   78ch dejaban el mismo hueco muerto que el proceso */
.faq--dos{
  border-top:0;max-width:none;
  display:grid;grid-template-columns:repeat(2,minmax(0,1fr));
  column-gap:clamp(24px,4vw,64px);
}
.faq--dos details{border-top:1px solid var(--rule)}
.faq--dos details:last-child{border-bottom:1px solid var(--rule)}
.faq--dos summary{padding-right:38px}
.faq--dos details p{padding-right:38px}
@media (max-width:820px){
  .faq--dos{grid-template-columns:1fr}
  .faq--dos details:not(:last-child){border-bottom:0}
}

/* «Los otros cuatro» baja detrás del cierre. Antes venía justo delante, o sea
   que ofrecía una salida lateral en el instante previo a pedir la conversión.
   Aquí ya es navegación de salida, y por eso pierde el titular. */
.seccion--otros{padding-top:clamp(34px,4.5vh,52px);border-top:1px solid var(--rule)}
.otros-eti{margin-bottom:14px}

/* WhatsApp acompana a todas las acciones */
.enlace--wa{white-space:nowrap}

/* ═══════════ LA INVITACIÓN · el cierre de la home ═══════════
   Sobre papel desde el 02-09. La banda de tinta se retiró porque tapaba el
   fondo generativo justo donde alcanza orden = 1, rompía el instrumento del
   margen —que está pintado para papel— y dejaba el pie huérfano.
   Ahora el único bloque de tinta de la pantalla es el botón primario. */
.final{padding-top:clamp(56px,8vh,96px)}

.invita{
  display:grid;grid-template-columns:minmax(0,1fr) minmax(0,320px);
  gap:clamp(30px,5vw,72px);align-items:start;
}
.invita-oferta{max-width:62ch}

.promesas{
  list-style:none;margin:clamp(22px,3vh,32px) 0 0;
  display:grid;gap:14px;max-width:58ch;
}
.promesas li{display:grid;grid-template-columns:auto 1fr;gap:12px;align-items:start}
.promesas svg{width:15px;height:15px;margin-top:.24em;color:var(--sello);flex:none}
.promesas span{font-size:.95rem;line-height:1.5;color:var(--ink-60)}
.promesas b{color:var(--ink);font-variation-settings:'wdth' 96,'wght' 640}

/* la última acción de la página pesa más que las demás */
.btn--cierre{padding:18px 32px;font-size:16px}
.btn--cierre .flecha{transition:transform var(--medio) var(--curva)}
.btn--cierre:hover .flecha,.btn--cierre:focus-visible .flecha{transform:translateX(4px)}
@media (prefers-reduced-motion: reduce){.btn--cierre .flecha{transition:none}}

.pie-cta{margin-top:14px;font-size:.86rem;color:var(--ink-40)}

/* ── contacto directo: el dato a la vista, no escondido detrás de un verbo ── */
.eti-canales{margin-bottom:4px}
.canales{list-style:none;margin:0;border-top:1px solid var(--ink-40)}
.canales li{border-bottom:1px solid var(--rule)}
.canales li:last-child{border-bottom-color:var(--ink-40)}
.canal{
  display:flex;flex-wrap:wrap;justify-content:space-between;align-items:baseline;gap:4px 14px;
  padding:13px 0;text-decoration:none;color:var(--ink);
  transition:color var(--toque) var(--curva);
}
.canal-eti{font-size:.95rem;font-variation-settings:'wght' 560}
/* Un teléfono y un correo son datos, sí, pero de los que se leen y se copian,
   no de los que se alinean en una columna. En Martian Mono a 10,5 px con
   interletrado negativo quedaban apretados y viejos justo en el bloque que
   pide que te pongas en contacto. Archivo, y el tamaño del texto que
   acompañan. La monoespaciada se queda para lo tabular. */
.canal-dato{
  font-family:'Archivo',system-ui,sans-serif;font-size:.95rem;
  font-variation-settings:'wght' 400;letter-spacing:-0.005em;
  color:var(--ink-60);transition:color var(--toque) var(--curva);
}
.canal:hover,.canal:focus-visible{color:var(--sello)}
.canal:hover .canal-dato,.canal:focus-visible .canal-dato{color:var(--sello)}

.quien-lo-hace{margin-top:clamp(26px,3.6vh,38px)}
.quien-lo-hace .retrato{display:block;margin-bottom:16px}
.quien-lo-hace .retrato img{
  display:block;width:100%;height:auto;max-width:200px;
  border-radius:12px;filter:grayscale(1) contrast(1.04);
}
.quien-lo-hace .quien{
  font-size:1.06rem;letter-spacing:-0.03em;
  font-variation-settings:'wdth' 94,'wght' 640;color:var(--ink);
}
.quien-lo-hace .rol{margin-top:5px}
.quien-lo-hace .parrafo{margin-top:10px;font-size:.9rem;max-width:28ch}

@media (max-width:860px){
  .invita{grid-template-columns:1fr;gap:clamp(26px,4vh,38px)}
  .invita-oferta{max-width:none}
  /* la fila de retrato + firma solo se monta si la foto existe de verdad */
  .quien-lo-hace:has(.retrato){display:grid;grid-template-columns:auto 1fr;gap:0 18px;align-items:center}
  .quien-lo-hace:has(.retrato) .retrato{grid-row:1 / span 3;margin-bottom:0}
  .quien-lo-hace:has(.retrato) .retrato img{max-width:88px}
  .quien-lo-hace:has(.retrato) .parrafo{grid-column:1 / -1;margin-top:14px;max-width:none}
}

/* ═══════════ EL AVISO DE COOKIES ═══════════
   Abajo a la izquierda y del ancho de una columna de texto, no una banda a
   sangre: no tapa el contenido ni el CTA de la barra, y aceptar y rechazar
   pesan lo mismo, que es lo que exige la norma y además es lo honesto. */
.cookies{
  position:fixed;z-index:40;
  right:var(--margin);bottom:calc(16px + var(--sa-abajo));
  width:min(420px, calc(100vw - 2*var(--margin)));
  background:var(--panel);border:1px solid var(--panel-borde);border-radius:14px;
  box-shadow:0 1px 2px rgba(22,21,15,.05),0 18px 44px -16px rgba(22,21,15,.22);
  padding:18px 20px 16px;
  opacity:0;transform:translateY(10px);
  transition:opacity var(--medio) var(--curva),transform var(--medio) var(--curva);
}
.cookies.puesta{opacity:1;transform:none}
.cookies p{font-size:13.5px;line-height:1.55;color:var(--ink-60);margin:0 0 16px}
.cookies p a{color:var(--sello);text-decoration:none;border-bottom:1px solid currentColor}
/* Los dos botones, exactamente iguales. La guía de cookies de la AEPD pide que
   rechazar esté en el mismo nivel y con el mismo formato que aceptar: un
   «rechazar» más pequeño o más pálido es un patrón oscuro.
   `nowrap` y sin encogerse porque «Aceptar» se partía en dos líneas y salía
   como una pelota de 84×70 en vez de una píldora. */
.cookies-acc{
  display:grid;grid-template-columns:1fr 1fr;gap:10px;
  /* la fila se declara: dejándola en auto medía 70 px y sólo uno de los dos
     botones se estiraba a ella, así que quedaban desalineados */
  grid-auto-rows:46px;align-items:stretch;
}
.cookies-acc .btn{
  height:100%;justify-content:center;white-space:nowrap;
  font-size:13.5px;padding:0;min-height:0;
  /* `.btn--linea` arrastra un margin-top de 24 px de su uso en el carril:
     era lo que empujaba «Rechazar» media altura por debajo de «Aceptar» */
  margin:0;
}
:root[data-tema="oscuro"] .cookies{box-shadow:0 1px 2px rgba(0,0,0,.5),0 18px 44px -16px rgba(0,0,0,.7)}
/* El banner va a z-index 40 y el panel tactil a 29, asi que en la primera
   visita desde un movil estrecho el aviso se pintaba ENCIMA del menu abierto y
   tapaba el CTA, WhatsApp y Contacto. El menu es modal mientras dura; el aviso
   se aparta y vuelve al cerrarlo. */
body.menu-abierto .cookies{opacity:0;transform:translateY(10px);pointer-events:none}
@media (max-width:560px){
  .cookies{left:10px;right:10px;width:auto;bottom:calc(10px + var(--sa-abajo))}
}
@media (prefers-reduced-motion: reduce){ .cookies{transition-duration:.001s} }

/* ═══════════ LAS PÁGINAS DE NORMAS ═══════════
   Una columna de lectura y nada más. Lo legal se lee, no se recorre. */
.normas-env{max-width:74ch}
.normas h1{margin-bottom:8px}
.normas-fecha{margin-bottom:clamp(30px,4.5vh,46px)}
.normas h2{
  font-size:clamp(1.15rem,2vw,1.42rem);letter-spacing:-0.03em;max-width:34ch;
  margin:clamp(32px,4.6vh,48px) 0 12px;
}
.normas .parrafo{margin-bottom:14px}
.normas-datos{list-style:none;margin:0;border-top:1px solid var(--rule)}
.normas-datos li{
  display:grid;grid-template-columns:minmax(0,.42fr) minmax(0,1fr);gap:10px 20px;
  padding:11px 0;border-bottom:1px solid var(--rule-2);font-size:.95rem;
}
.normas-datos li > span:first-child{
  font-family:'Archivo',system-ui,sans-serif;font-size:11.5px;
  font-variation-settings:'wght' 620;text-transform:uppercase;letter-spacing:.07em;
  color:var(--ink-40);align-self:center;
}
.normas-datos a{color:var(--sello);text-decoration:none}
.normas-datos a:hover{text-decoration:underline}
.normas-tabla{width:100%;border-collapse:collapse;font-size:.9rem;margin:8px 0 16px}
.normas-tabla th{
  text-align:left;font-family:'Archivo',system-ui,sans-serif;font-size:11.5px;
  font-variation-settings:'wght' 620;text-transform:uppercase;letter-spacing:.07em;
  color:var(--ink-40);padding:0 14px 10px 0;border-bottom:1px solid var(--rule);
}
.normas-tabla td{padding:11px 14px 11px 0;border-bottom:1px solid var(--rule-2);color:var(--ink-60);vertical-align:top}
.normas-tabla td:first-child{color:var(--ink);white-space:nowrap}
.normas a{color:var(--sello)}
/* el hueco que falta se ve, en vez de disimularse con un dato inventado */
.pendiente{
  background:#FDE9E7;color:#8E2F28;border-radius:4px;padding:2px 7px;
  font-size:12px;font-variation-settings:'wght' 620;
}
:root[data-tema="oscuro"] .pendiente{background:#3A1A17;color:#F0A9A2}
@media (max-width:560px){
  .normas-datos li{grid-template-columns:minmax(0,1fr);gap:2px}
  .normas-tabla{display:block;overflow-x:auto}
}

/* ═══════════ EL DEDO ═══════════
   Se filtra por `pointer:coarse` y no por ancho: lo que decide el tamaño de un
   control es con qué se toca, no cuánto mide la pantalla. Un portátil con
   pantalla táctil también entra aquí, y un móvil en horizontal no se escapa.
   El mínimo cómodo es 44 px; lo que no llega, se agranda sin mover el diseño. */
/* El botón que despliega y el envoltorio de lo desplegable sólo existen en el
   teléfono. En escritorio el envoltorio es `display:contents`, o sea que no
   introduce ninguna caja y el carril queda exactamente como estaba. */
.cp-abre{display:none}
.rp-in{display:contents}
.cp-mas,.cp-mas-in{display:contents}

/* ═══════════ LOS CINCO, EN UN TELÉFONO ═══════════
   El carril lateral desaparece por debajo de 860 px. Eran DOS deslizadores
   horizontales apilados —la tira de nombres y las cinco tarjetas— con el mismo
   gesto y destinos distintos, y con el quinto servicio arrancando en x=446 de
   una pantalla de 372 px: de los cinco se veían tres.

   En su sitio va la misma lista, pero desplegable. Lo que en escritorio se ve
   recorriendo el carril de lado —el párrafo y la maqueta viva— aquí se abre en
   la propia home al tocar el nombre, sin salir de la página. El enlace a la
   página del servicio sigue estando, dentro de lo desplegado, donde es una
   decisión y no un accidente del dedo.

   La retícula: `.cp-txt` pasa a `display:contents`, así que el nombre, el
   resultado y el envoltorio se vuelven filas de la tarjeta y el botón puede
   ocupar exactamente las dos primeras. Sin eso habría que adivinar la altura
   del encabezado, que cambia en cuanto un nombre se parte en dos líneas. */
@media (max-width:860px){
  .carril-fijo{height:auto;display:block;overflow:visible;padding:0}
  .via-caja{overflow:visible}
  /* el contador de 01/05 deja de tener trabajo; la tira de nombres se retira
     más abajo, en su propio bloque, porque `.ix-serv{display:flex}` es una
     regla base posterior y con la misma especificidad le ganaba a ésta. */
  .avance{display:none}
  .carril-marco{grid-template-columns:minmax(0,1fr);gap:0;padding-inline:var(--margin)}
  .via{
    display:block;overflow:visible;transform:none!important;
    padding:0;perspective:none;transform-style:flat;
    border-top:1px solid var(--rule);
  }

  /* `.carril-marco .cp` declara DOS columnas (.82fr / 1.18fr) y tiene dos clases,
     asi que le ganaba a un `.cp` de una sola: los elementos se auto-colocaban
     entre las dos columnas y el parrafo acababa en una celda de 30 px de ancho,
     lo que inflaba su altura por cuatro. Es la tercera vez en esta hoja que una
     regla base posterior y mas especifica se come el bloque tactil. Aqui se
     iguala la especificidad y ademas se fija la columna de cada fila, para que
     la auto-colocacion no tenga nada que decidir. */
  .carril-marco .cp{
    display:grid;grid-template-columns:minmax(0,1fr);width:auto;
    padding:17px 0 19px;border-bottom:1px solid var(--rule);
    opacity:1!important;transform:none!important;
  }
  .cp-txt{display:contents}
  .cp > *,.cp-nombre,.cp-titular,.cp-mas{grid-column:1}
  .cp-nombre{
    grid-row:1;padding-right:34px;max-width:none;
    font-size:21px;line-height:1.2;letter-spacing:-0.022em;
    font-variation-settings:'wdth' 96,'wght' 640;color:var(--ink);
    transition:color var(--toque) var(--curva);
  }
  .cp-txt .cp-titular{
    grid-row:2;margin-top:3px;padding-right:34px;max-width:none;
    font-size:15.5px;line-height:1.4;color:var(--ink-60);
    font-variation-settings:'wdth' 100,'wght' 400;letter-spacing:-0.005em;
  }

  /* ── el botón cubre las dos filas del encabezado y nada más ── */
  .cp-abre{display:none}
  .via.desplegable .cp-abre{
    display:block;position:relative;grid-column:1;grid-row:1 / span 2;
    align-self:stretch;z-index:2;min-height:44px;
    background:none;border:0;padding:0;margin:0;cursor:pointer;
    -webkit-tap-highlight-color:transparent;
  }
  .cp-abre::before,.cp-abre::after{
    content:'';position:absolute;right:2px;top:50%;background:var(--ink-40);
    transition:transform var(--medio) var(--curva),background var(--toque) var(--curva);
  }
  .cp-abre::before,.cp-abre::after{top:13px}
  .cp-abre::before{width:13px;height:1px;margin-top:-.5px}
  .cp-abre::after{width:1px;height:13px;margin-top:-6.5px;right:8px}
  .via.desplegable .cp.abierto .cp-abre::after{transform:scaleY(0)}
  .via.desplegable .cp.abierto .cp-abre::before{background:var(--sello)}
  .cp-abre:focus-visible{outline:2px solid var(--sello);outline-offset:2px;border-radius:4px}
  .cp:has(.cp-abre:active) .cp-nombre{color:var(--sello)}

  /* ── lo desplegable: dos cajas seguidas, una sola curva ── */
  .cp-mas{grid-row:3}
  .cp-viva{grid-row:4}
  /* El plegado lo habilita el JS poniendo `.desplegable` en el carril. Sin esa
     clase todo queda abierto, que es como tiene que verse la pagina con
     JavaScript desactivado: plegado por defecto, los cinco parrafos y los cinco
     enlaces a las paginas de servicio serian inalcanzables. La regla de esta
     casa es que nada se oculta esperando a que baje un script. */
  .via.desplegable .cp-mas,.via.desplegable .cp-viva{
    display:grid;grid-template-rows:0fr;
    /* plegado no es solo "de altura cero": `overflow:hidden` recorta a la vista
       pero el enlace de dentro sigue recibiendo el tabulador, asi que se
       tabulaba a cuatro enlaces invisibles. La visibilidad espera a que termine
       la curva para no cortar la animacion de cierre. */
    visibility:hidden;
    transition:grid-template-rows var(--medio) var(--curva),visibility 0s linear .24s;
  }
  /* `display:contents` es lo que necesita en escritorio y lo que lo rompe aqui:
     con el envoltorio disuelto, `overflow:hidden` no recorta nada y sus dos
     hijos caen en filas implicitas que la curva no gobierna. Los cerrados
     median 291 px de contenido en vez de cero. */
  .via.desplegable .cp-mas > .cp-mas-in{display:block}
  .via.desplegable .cp-mas > .cp-mas-in,
  .via.desplegable .cp-viva > .maqueta{overflow:hidden;min-height:0}
  /* el que se cierra para dejar sitio a otro lo hace sin curva: ver el motivo
     en `abrir()` de oruxia.js */
  .via.desplegable .cp.sin-curva .cp-mas,
  .via.desplegable .cp.sin-curva .cp-viva{transition:none}
  .via.desplegable .cp.abierto .cp-mas,
  .via.desplegable .cp.abierto .cp-viva{
    grid-template-rows:1fr;visibility:visible;
    transition:grid-template-rows var(--medio) var(--curva),visibility 0s;
  }
  .cp-txt .cp-titular + .cp-mas .parrafo{margin-top:11px;max-width:none;font-size:15px}
  .cp .btn--linea{
    position:static;display:inline-flex;margin:15px 0 0;
    padding:12px 20px;font-size:13.5px;
    border:1px solid var(--ink-40);background:transparent;color:var(--ink);
  }
  .cp .btn--linea .btn-txt{display:inline}
  .cp .btn--linea .flecha{position:static;color:currentColor}
  /* el margen va en la caja que se pliega, no dentro: puesto dentro sobrevivia
     al plegado y dejaba 15 px de maqueta siempre a la vista */
  .cp-viva{margin-top:15px}
  .via.desplegable .cp-viva{margin-top:0}
  .via.desplegable .cp.abierto .cp-viva{margin-top:15px}

  /* el titular de la sección y la lista son la misma cosa: sin filete entre medias */
  #que-hago{padding-bottom:0}
  #que-hago + .carril-pista{padding-top:clamp(20px,3vh,28px)}
  .carril-pista + .seccion{border-top:0;padding-top:clamp(22px,3.4vh,30px)}
}


/* ═══════════ LOS CUATRO SÍNTOMAS, EN UN TELÉFONO ═══════════
   Aquí no había versión móvil: había un `@media (max-width:640px){}` vacío y
   `flex-wrap`. Las cuatro píldoras se envolvían solas y salían apiladas y
   centradas con cuatro anchos distintos —155, 176, 172 y 164 px—, que se lee
   como un fallo de maquetación y no como un control.

   Y el fallo de fondo era peor. Con la página en el tope, las pestañas caían en
   549-741 y la respuesta en 766-989 de un viewport de 844: tocabas y lo que
   cambiaba empezaba 78 px antes del borde, con su llamada a la acción 145 px por
   DEBAJO de la pantalla. La causa estaba fuera de la vista de su propio efecto.

   La respuesta se mueve a la fila que tocas. No hace falta ni un elemento nuevo
   ni tocar el markup: el panel se vuelve columna, `.pestanas` deja de ser una
   caja y sus botones pasan a ser hermanos de la respuesta, que se coloca por
   `order` según la fila elegida. Es el mismo objeto que las FAQ y que el índice
   de servicios: filas, filete y un signo a la derecha. */
@media (max-width:860px){
  .hero .panel{display:flex;flex-direction:column;align-items:stretch}
  /* `display:contents` disuelve la cubeta: los cuatro botones se convierten en
     hermanos directos del panel y pueden intercalarse con la respuesta. */
  .hero .panel .pestanas{display:contents}
  .pest{
    position:relative;width:100%;text-align:left;
    min-height:56px;padding:16px 34px 16px 0;border-radius:0;
    border-top:1px solid var(--rule-2);
    font-size:16px;letter-spacing:-0.012em;
    font-variation-settings:'wdth' 100,'wght' 540;color:var(--ink-60);
    transition:color var(--toque) var(--curva);
  }
  .pest:first-of-type{border-top:0}
  .pest[aria-selected="true"]{color:var(--ink);font-variation-settings:'wdth' 100,'wght' 640}
  /* La píldora blanca sobra: aquí el estado lo dicen el peso, la tinta y que la
     respuesta esté abierta justo debajo. Tres señales, ninguna de superficie. */
  .pest .fondo{display:none!important}
  /* el signo se dibuja con dos filetes: la barra vertical se cierra al abrir */
  .pest::before,.pest::after{
    content:'';position:absolute;right:2px;top:50%;background:var(--ink-40);
    transition:transform var(--medio) var(--curva),background var(--toque) var(--curva);
  }
  .pest::before{width:13px;height:1px;margin-top:-.5px}
  .pest::after{width:1px;height:13px;margin-top:-6.5px;right:8px}
  .pest[aria-selected="true"]::after{transform:scaleY(0)}
  .pest[aria-selected="true"]::before{background:var(--sello)}

  /* el orden intercala la respuesta detrás de la fila elegida */
  .hero .panel .pest:nth-of-type(1){order:1}
  .hero .panel .pest:nth-of-type(2){order:3}
  .hero .panel .pest:nth-of-type(3){order:5}
  .hero .panel .pest:nth-of-type(4){order:7}
  .hero .panel .respuesta-panel{
    order:calc(var(--sel,0) * 2 + 2);
    margin-top:0;min-height:0;border-top:0;padding:0;
    /* la respuesta se pliega con la misma curva que el menú y que los cinco */
    display:grid;grid-template-rows:1fr;
    transition:grid-template-rows var(--medio) var(--curva),visibility 0s;
  }
  /* El relleno va en los hijos, no en la caja recortada: una caja de altura cero
     con 24 px de padding sigue midiendo 24, asi que cerrado dejaba un hueco
     muerto debajo de la ultima fila. Los margenes de los hijos si los recorta
     `overflow:hidden`. */
  .hero .panel .respuesta-panel > .rp-in{display:block;overflow:hidden;min-height:0;padding:0}
  .hero .panel .respuesta-panel .et{margin-top:2px}
  .hero .panel .respuesta-panel .acciones{margin-bottom:22px}
  /* Sin ninguna elegida, el bloque es cuatro filas y nada más: al entrar en la
     web la portada llega ordenada y es el visitante quien la abre. */
  .hero .panel.sin-elegir .respuesta-panel{
    grid-template-rows:0fr;visibility:hidden;
    transition:grid-template-rows var(--medio) var(--curva),visibility 0s linear .24s;
  }
  .hero .panel .respuesta-panel .acciones{margin-top:18px!important}
  .hero .panel .respuesta-panel .btn{width:100%;justify-content:center}
}


/* ═══════════ LAS HERRAMIENTAS, EN UN TELÉFONO ═══════════
   Dieciocho píldoras de ancho libre envueltas con `flex-wrap` dan ocho filas
   con el borde derecho dentado —una fila acaba en 690 px y la siguiente en
   430—, y eso se lee como desorden justo en la sección que dice que sabemos
   ordenar. Dos columnas iguales lo convierten en una tabla. No se quita ni una:
   la lista es la prueba de que trabajamos sobre lo que el cliente ya tiene. */
@media (max-width:640px){
  .rejilla-hrr{display:grid;grid-template-columns:1fr 1fr;gap:6px;margin-top:clamp(22px,3vh,32px)}
  /* mas apretadas que en escritorio: aqui son dieciocho y no un adorno. Con
     44 px de alto siguen siendo dianas tactiles de sobra. */
  .hrr{width:100%;min-height:44px;justify-content:flex-start;padding:9px 12px;white-space:normal;font-size:.82rem}
  .hrr span{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
}


/* ═══════════ EL REMATE TÁCTIL ═══════════ */
@media (pointer:coarse){
  /* ── el instrumento del margen ──
     En escritorio es filete, barra de avance, cifra de porcentaje, muesca por
     sección y el nombre de la que estás leyendo, girado. En un teléfono el
     rótulo y la cifra están ocultos desde hace tiempo, así que lo que quedaba
     era un elemento de 1 px de ancho con siete rayitas de 1 px: ni dice en qué
     sección estás, ni cuánto llevas, ni cuánto queda. Y su muesca activa salía
     4 px por la izquierda de la pantalla, en las once páginas.
     Un instrumento que no mide no es un instrumento: es una raya. */
  .margen{display:none}

  /* ── los controles de la maqueta del ERP ──
     Ordenar por columna son botones de 12 px de alto: el peor control táctil de
     la web. No se agrandan a la vista —es una interfaz simulada y a 44 px de
     alto la cabecera dejaría de parecer un programa—, se les da el area de
     toque por debajo, que es lo que pide la norma y lo que necesita el dedo. */
  .erp-barra button{position:relative}
  .erp-barra button::after{
    content:'';position:absolute;left:0;right:0;top:50%;
    height:44px;transform:translateY(-50%);
  }

  /* ── la tabla de traducción del hub ──
     Apilada, cada fila es dolor / solución / servicio. El servicio es el enlace,
     o sea lo único que hay que tocar, y salía más pequeño y más claro que la
     solución que tiene encima: lo más importante de la fila era lo menos
     visible. Sube a tinta, sube de cuerpo y se lleva la flecha. */
  .tabla-p tbody td:last-child a{
    font-size:.95rem;color:var(--ink);
    font-variation-settings:'wdth' 96,'wght' 600;
    border-bottom-color:var(--rule);
  }
}


/* ═══════════ LO QUE DICEN · las voces ═══════════
   No son tarjetas. Tres tarjetas iguales con una cita dentro es la sección de
   testimonios de cualquier SaaS, y además rompería dos reglas de esta casa: una
   caja con borde dentro de una sección que ya vive sobre papel, y un módulo que
   no aporta superficie sino ruido.

   Lo que hay es la gramática que este sitio ya usa para un índice —filete
   arriba en --ink-40, filas separadas por --rule, filete de cierre otra vez en
   --ink-40—, pero con los pesos al revés que en `.otros`, porque aquí lo que
   manda es lo que se dijo y no quién lo dijo.

   La cita NO va con la letra de los titulares. Los titulares de esta web son
   Archivo estrecha (wdth 92) y muy pesada (wght 620), y eso es voz de la casa.
   Una cita es voz de otro, así que va en anchura normal y peso medio: se lee
   como habla alguien, no como afirma la marca. Ese contraste es toda la
   diferenciación que hace falta.

   La firma va a la derecha, precedida de un filete corto. Es la firma al pie de
   un pliego, que es exactamente el mundo de este sitio, y resuelve el móvil sin
   una sola regla más: al apilarse sigue siendo una firma debajo de un texto. */
.dichos{list-style:none;margin:clamp(30px,4.4vh,48px) 0 0;padding:0;border-top:1px solid var(--ink-40)}
.dichos>li{
  display:grid;grid-template-columns:minmax(0,1fr) clamp(148px,17vw,232px);
  gap:clamp(16px,3vw,52px);align-items:start;
  padding:clamp(26px,3.8vh,44px) 0;border-bottom:1px solid var(--rule);
}
.dichos>li:last-child{border-bottom-color:var(--ink-40)}
.dicho{margin:0}
.dicho p{
  margin:0;max-width:46ch;
  font-size:clamp(1.1rem,2vw,1.58rem);line-height:1.4;letter-spacing:-0.022em;
  font-variation-settings:'wdth' 100,'wght' 445;
  color:var(--ink);text-wrap:pretty;
}
/* el filete corto es el renglón de la firma. Se dibuja con ::before para que no
   exista como elemento: no es contenido, es la línea sobre la que se firma. */
.dicho-firma{display:flex;flex-direction:column;gap:5px;text-align:right;margin:0;padding-top:clamp(3px,.7vh,9px)}
.dicho-firma::before{
  content:'';align-self:flex-end;width:26px;height:1px;background:var(--ink-40);
  margin-bottom:clamp(9px,1.3vh,13px);
}
.dicho-quien{
  font-style:normal;
  font-size:clamp(.92rem,1.15vw,1.02rem);line-height:1.25;letter-spacing:-0.016em;
  font-variation-settings:'wdth' 96,'wght' 600;color:var(--ink);
}
.dicho-donde{font-size:.85rem;line-height:1.42;color:var(--ink-60)}

/* Un solo corte de contenido: por debajo la firma se pone debajo de la cita, que
   es donde va una firma de todas formas. Sigue alineada a la derecha. */
@media (max-width:820px){
  .dichos>li{grid-template-columns:1fr;gap:clamp(13px,2.2vh,20px)}
  .dicho p{max-width:none}
  .dicho-firma{padding-top:0}
  .dicho-firma::before{margin-bottom:clamp(7px,1vh,10px)}
}

/* ═══════════ EL SUELO DE CONTRASTE DENTRO DE LAS MAQUETAS ═══════════
   Las etiquetas pequeñas de las interfaces simuladas —"00:00", "Total
   certificado", "tuempresa.com", "Sin plantillas"— van en --ink-40, que es el
   suelo de contraste de esta paleta MEDIDO SOBRE EL PAPEL (4,55:1). Pero
   dentro de una maqueta el fondo es --paper-2, que es más oscuro, y ahí el
   mismo gris cae a 4,27:1 y deja de pasar AA. El suelo de un token depende de
   sobre qué se pinta, no del token.
   Son textos de 7,5-8,5 px: es justo donde menos se puede permitir. El salto a
   --ink-60 es de dos tonos y no cambia el aire de la maqueta. */
.maqueta .quien,.maqueta .mono,.maqueta .ref,.maqueta .est,.maqueta .mq-pie,
.maqueta .nave-url,.maqueta .erp-barra button,.maqueta .erp-tot span,
.maqueta .rasgos span,.maqueta .msg i{color:var(--ink-60)}

/* ═══════════ WHATSAPP, SIEMPRE A MANO ═══════════
   Fijo de verdad: está desde que se carga la página y no se va nunca. Tenía
   tres retiradas —no salía hasta pasar la portada, se apartaba al bajar y se
   quitaba sobre el pie— y Fede las descartó: lo quiere siempre a la vista.

   Sin el verde de WhatsApp a propósito. Esta paleta tiene UN acento y marca la
   conversión, así que un segundo color de marca ajena rompería esa regla y
   chillaría más que el propio CTA. Superficie de módulo, filete y la sombra de
   dos capas del sistema, o sea el mismo objeto que un panel. El glifo se
   reconoce solo.

   Va a z-index 20: por encima del contenido y por debajo de la barra (30), del
   panel táctil (29) y del aviso de cookies (40), que son las tres cosas que sí
   tienen que taparlo. */
.wa-fijo{
  position:fixed;z-index:20;
  right:24px;bottom:calc(24px + var(--sa-abajo));
  width:60px;height:60px;display:grid;place-items:center;
  background:var(--panel);color:var(--ink);
  border:1px solid var(--panel-borde);border-radius:50%;
  box-shadow:var(--relieve);
  transition:color var(--toque) var(--curva),border-color var(--toque) var(--curva),
             transform var(--toque) var(--curva);
}
.wa-fijo svg{width:27px;height:27px;fill:currentColor;display:block}
/* Con el panel táctil abierto queda debajo de todas formas —29 tapa a 20— y el
   panel lleva su propio WhatsApp. Se declara para que no dependa del z-index. */
body.menu-abierto .wa-fijo{opacity:0;pointer-events:none}
@media (hover:hover){
  .wa-fijo:hover{color:var(--sello);border-color:var(--sello);transform:translateY(-2px)}
}
.wa-fijo:active{color:var(--sello)}
.wa-fijo:focus-visible{outline:2px solid var(--sello);outline-offset:3px}
@media (pointer:coarse){
  /* algo más chico que en escritorio y más pegado a la esquina, que es donde
     llega el pulgar, con la safe area por debajo para no pelearse con la barra
     de gestos del sistema */
  .wa-fijo{width:56px;height:56px;right:14px;bottom:calc(16px + var(--sa-abajo))}
  .wa-fijo svg{width:25px;height:25px}
}
@media (prefers-reduced-motion: reduce){
  .wa-fijo{transition-duration:.001s}
  .wa-fijo:hover{transform:none}
}



@media (pointer:coarse){
  .burg{width:44px;height:44px}
  .tema{width:44px;height:44px}
  /* el logotipo es el enlace a la portada y medía 26 px de alto */
  .marca{padding:9px 0}
  .cta-nav{padding:12px 16px}
  .acc-nav{gap:8px}
  /* Los enlaces de lista ganan altura por relleno, no por tamaño de letra.
     44 px para lo que es una acción; 40 en listas densas, que es lo que
     permite WCAG 2.2 cuando hay separación suficiente, y evita que el pie
     crezca hasta convertirse en otra pantalla. */
  .pie ul a{display:inline-block;padding:10px 0;min-height:40px}
  .pie ul{gap:2px}
  .pie-legal a{display:inline-block;padding:8px 0}
  .canal{padding-top:14px;padding-bottom:14px}
  .pest{min-height:44px}
  .sub-cinco a{padding-top:13px;padding-bottom:14px}
  .acciones{gap:12px 20px}

  /* controles y CTA secundarios: 44 px de verdad */
  .enlace{display:inline-flex;align-items:center;min-height:44px}
  .hrr{min-height:44px}
  .tabla-p a{display:inline-block;padding:9px 0;min-height:40px}
  .miga a{display:inline-block;padding:10px 0;min-height:40px}
  .directo a{display:inline-block;padding:10px 0;min-height:40px}
  .otros a{min-height:44px}

  /* tipografía: lo que en un escritorio es una etiqueta discreta, en un móvil
     a 30 cm de los ojos es texto que hay que forzar la vista para leer */
  /* `.panel-movil h3` se fue con el acordeón: ya no hay epígrafes en el panel */
  .dato,.miga,.pie h3,.grupo label{font-size:13px}
  /* `.respuesta-panel .et` lleva dos clases y le ganaba a `.dato` */
  .respuesta-panel .et{font-size:13px}
  .pie ul a{font-size:14.5px}
  .pie-cta{font-size:14px}
  .pie-legal{font-size:13px}
  .pie-marca p{font-size:13.5px}
}


/* ── las voces en táctil ──
   La cita sube un punto: es texto largo leído a 30 cm, y a 17,6 px con
   interlineado 1,4 se lee peor de lo que parece en un escritorio reducido.
   Y la firma no baja de 13,5 px, que es el suelo que ya fijó el resto de la
   web para las etiquetas pequeñas. */
@media (pointer:coarse){
  .dicho p{font-size:1.17rem;line-height:1.42}
  .dicho-donde{font-size:13.5px}
}
