/* Daemon4 · boceto Seonergy
   Referencia: cortex.qodeinteractive.com
   De ella se toman los gestos medidos: Montserrat 700 en display con tracking
   negativo muy cerrado (-0.06em), los ecos de color desplazados detrás del
   titular, el boton con doble marco desplazado (uno rojo arriba-izquierda, uno
   cian abajo-derecha), los bloques de color a sangre, los iconos de linea y el
   pie oscuro con la marca enorme.
   La paleta del tema (morado #41294A / rosa #FF2C54 / menta #41EBDF) se
   sustituye por la de Daemon4: el rojo #D8282F es el real de su logotipo. */

*,*::before,*::after{box-sizing:border-box;}
:root{
  /* --- paleta --- */
  --tinta:#1A1721;        /* ocupa el papel del morado de Cortex */
  --tinta-2:#241F2E;
  --rojo:#D8282F;         /* REAL: muestreado del "4" de su logotipo */
  --rojo-tx:#C01F26;      /* el mismo rojo, oscurecido para versalitas pequenas:
                             el original se queda en 4.30:1 sobre el gris claro */
  --rojo-cl:#F0434A;
  --cian:#19D3CE;         /* anadido: hace de menta. Solo sobre fondo oscuro */
  --hueso:#FBF9F9;        /* el mismo off-white del tema */
  --gris-f:#F1EFF1;
  --texto:#5A5560;        /* 7.2:1 sobre blanco */
  --linea:#E2DEE4;
  --blanco:#fff;

  --mono:ui-monospace,"SFMono-Regular","JetBrains Mono",Menlo,Consolas,"Liberation Mono",monospace;
  --max:1400px;
  --hdr-h:81px;           /* alto de la cabecera (80 + 1 de borde): la portada se mete debajo */
  --pre-h:37px;           /* alto del preheader; el JS lo mide de verdad */
  --gutter:clamp(20px,4vw,64px);
}

html{-webkit-text-size-adjust:100%;}
body{
  margin:0;background:var(--blanco);color:var(--texto);
  font-family:Montserrat,-apple-system,"Segoe UI",Roboto,sans-serif;
  font-size:17px;line-height:1.75;font-weight:400;
  overflow-x:hidden;
}
img{max-width:100%;display:block;}
a{color:inherit;}
h1,h2,h3,h4,h5{margin:0;color:var(--tinta);font-weight:700;line-height:1.08;letter-spacing:-.04em;}
p{margin:0 0 1.1em;}
p:last-child{margin-bottom:0;}

.wrap{max-width:var(--max);margin:0 auto;padding-inline:var(--gutter);}
.sec{padding-block:clamp(64px,8vw,124px);}

/* ---------- tipografia display ---------- */
.display{
  font-size:clamp(46px,10.5vw,124px);line-height:.92;font-weight:700;
  letter-spacing:-.06em;   /* medido en el tema: -7.2px sobre 120px */
}
.h-sec{font-size:clamp(30px,4.6vw,58px);letter-spacing:-.045em;line-height:1.04;}
.h-card{font-size:clamp(20px,2.1vw,26px);letter-spacing:-.026em;line-height:1.18;}

/* el eco de color del tema: una copia roja arriba-izquierda y otra cian
   abajo-derecha. Se dibuja con text-shadow para no duplicar nodos. */
.eco{color:var(--tinta);text-shadow:-.035em -.035em 0 var(--rojo), .035em .035em 0 var(--cian);}
.eco-inv{color:var(--blanco);text-shadow:-.035em -.035em 0 var(--rojo), .035em .035em 0 var(--cian);}

/* rotulo de seccion como una linea de terminal: prompt ./> en monoespaciada,
   la versalita y un cursor de bloque. El cursor parpadea unas veces cuando el
   rotulo entra en pantalla (clase .vivo, la pone el JS) y luego se queda fijo:
   con una docena de rotulos por pagina, parpadeando siempre seria ruido. */
.et{
  display:inline-flex;align-items:center;gap:10px;
  font-size:12px;font-weight:700;letter-spacing:.2em;text-transform:uppercase;
  color:var(--rojo-tx);margin-bottom:18px;
}
.et::before{content:"./>";flex:none;font-family:var(--mono);font-size:13.5px;font-weight:700;
  letter-spacing:-.02em;text-transform:none;color:var(--tinta);}
.et::after{content:"";flex:none;width:.62em;height:1.15em;margin-left:-4px;background:currentColor;opacity:.85;}
.et.vivo::after{animation:parpadeo 1.05s steps(1) 5;}
@keyframes parpadeo{50%{opacity:0}}
.et.cl{color:var(--cian);}
.et.cl::before{color:#fff;}
@media(prefers-reduced-motion:reduce){.et.vivo::after{animation:none;}}

.intro{font-size:clamp(17px,1.5vw,20px);max-width:62ch;}

/* ---------- boton con doble marco desplazado (la firma del tema) ---------- */
.btn{
  position:relative;display:inline-block;z-index:0;
  padding:19px 40px;background:var(--tinta);color:#fff;text-decoration:none;
  font-size:13px;font-weight:700;letter-spacing:.14em;text-transform:uppercase;
  transition:background 240ms,transform 240ms;
}
.btn::before,.btn::after{
  content:"";position:absolute;inset:0;z-index:-1;pointer-events:none;
  transition:transform 260ms cubic-bezier(.2,.7,.3,1);
}
.btn::before{border:2px solid var(--rojo);transform:translate(-7px,-7px);}
.btn::after{border:2px solid var(--cian);transform:translate(7px,7px);}
.btn:hover{background:var(--rojo);}
.btn:hover::before{transform:translate(0,0);}
.btn:hover::after{transform:translate(0,0);}
.btn:focus-visible{outline:3px solid var(--rojo);outline-offset:9px;}
.btn.inv{background:var(--blanco);color:var(--tinta);}
.btn.inv:hover{background:var(--cian);}

.btn-t{
  display:inline-flex;align-items:center;gap:10px;text-decoration:none;
  font-size:12px;font-weight:700;letter-spacing:.16em;text-transform:uppercase;color:var(--rojo-tx);
  padding:4px 0;border-bottom:2px solid transparent;transition:border-color 200ms,gap 200ms;
}
.btn-t:hover{border-color:var(--rojo-tx);gap:16px;}
.btn-t svg{width:15px;height:15px;flex:none;}

/* ---------- cabecera ---------- */
/* arriba del todo la cabecera es transparente sobre la portada; al hacer
   scroll se vuelve blanca. Mientras es transparente se funde en «multiply»:
   el logotipo es un JPG con fondo blanco (recortarlo agujerea el brillo de
   la esfera) y asi el blanco desaparece sobre el hueso de la portada sin tocar
   el archivo. Todo lo demas de la barra es oscuro, y multiply no lo cambia.
   Va en toda la cabecera y no solo en el <img> porque el sticky crea su propio
   contexto de apilamiento y dentro no hay nada con que fundirse. */
.hdr{
  position:sticky;top:0;z-index:60;background:transparent;mix-blend-mode:multiply;
  border-bottom:1px solid transparent;transition:background-color 240ms,box-shadow 240ms,border-color 240ms;
}
.hdr.stuck{background:var(--blanco);mix-blend-mode:normal;
  box-shadow:0 2px 24px rgba(26,23,33,.09);border-color:var(--linea);}
.bar{max-width:var(--max);margin:0 auto;padding:0 var(--gutter);
  display:flex;align-items:center;gap:26px;min-height:80px;}
/* el logotipo va tal cual, sin recomponer: es un JPG sobre blanco y la barra
   es blanca, asi que no hace falta recortarle el fondo (y recortarlo agujerea
   la esfera, que tiene un brillo blanco dentro). */
.marca{display:flex;align-items:center;text-decoration:none;flex:none;margin-right:auto;}
.marca img{height:48px;width:auto;}

.nav{display:flex;align-items:center;gap:clamp(14px,1.9vw,30px);}
.nav>a{
  position:relative;text-decoration:none;font-size:13px;font-weight:700;
  letter-spacing:.11em;text-transform:uppercase;color:var(--tinta);padding:6px 0;
}
/* la subrayado rojo del item activo, como en el tema */
.nav>a::after{content:"";position:absolute;left:0;right:100%;bottom:0;height:3px;
  background:var(--rojo);transition:right 240ms;}
.nav>a:hover::after,.nav>a.on::after{right:0;}

/* ---------- mega menu ----------
   Botones de seccion en la barra; al abrir, un panel a todo el ancho bajo la
   cabecera con columna de intro + enlaces, y abajo una barra de estado de
   terminal que teclea la ruta real de cada enlace al pasar por encima. */
.nav-sub{position:relative;display:inline-flex;align-items:center;gap:5px;padding:6px 0;border:0;background:none;
  cursor:pointer;font:inherit;font-size:13px;font-weight:700;letter-spacing:.11em;text-transform:uppercase;color:var(--tinta);}
.nav-sub svg{width:11px;height:11px;transition:transform 240ms;}
.nav-sub[aria-expanded="true"] svg{transform:rotate(180deg);}
.nav-sub::after{content:"";position:absolute;left:0;right:100%;bottom:0;height:3px;background:var(--rojo);transition:right 240ms;}
.nav-sub:hover::after,.nav-sub[aria-expanded="true"]::after,.nav-sub.on::after{right:0;}
.nav-sub:focus-visible,.nav>a:focus-visible{outline:2px solid var(--rojo);outline-offset:4px;}
/* con un panel abierto la cabecera deja de ser transparente */
.hdr.abierto{background:var(--blanco);mix-blend-mode:normal;border-color:var(--linea);}

.mm{position:absolute;left:0;right:0;top:100%;pointer-events:none;}
.mm.on{pointer-events:auto;}
.mm-p{background:var(--blanco);border-top:1px solid var(--linea);
  clip-path:inset(0 0 100% 0);transition:clip-path 380ms cubic-bezier(.7,0,.2,1);}
.mm-p.on{clip-path:inset(0 0 0 0);}
.mm-g{display:grid;grid-template-columns:270px minmax(0,1fr);gap:clamp(36px,4vw,64px);padding-block:38px 36px;}
.mm-intro .et{margin-bottom:14px;}
.mm-tit{margin:0 0 10px;font-size:25px;font-weight:700;line-height:1.12;letter-spacing:-.04em;color:var(--tinta);}
.mm-txt{margin:0 0 18px;font-size:14.5px;line-height:1.6;}
.mm-todo svg{width:14px;height:14px;}

/* soluciones: las cinco tarjetas con el numero fantasma */
.mm-erps{list-style:none;margin:0;padding:0;display:grid;grid-template-columns:repeat(5,minmax(0,1fr));gap:12px;}
.mm-erps li{position:relative;overflow:hidden;background:var(--hueso);transition:background 260ms;}
.mm-erp{position:relative;z-index:1;display:flex;flex-direction:column;gap:8px;height:100%;min-height:176px;padding:20px 18px;
  background:transparent;text-decoration:none;color:var(--texto);transition:color 260ms;}
.mm-erp span{font-size:18px;font-weight:700;letter-spacing:-.03em;line-height:1.15;color:var(--tinta);transition:color 260ms,text-shadow 260ms;}
.mm-erp small{font-size:13px;line-height:1.5;}
.mm-n{position:absolute;right:-.04em;bottom:-.3em;z-index:0;pointer-events:none;font-size:92px;font-weight:700;line-height:1;
  letter-spacing:-.07em;color:rgba(26,23,33,.06);transition:color 260ms,transform 360ms cubic-bezier(.2,.7,.3,1);}
.mm-erps li:hover,.mm-erps li:focus-within{background:var(--tinta);}
.mm-erps li:hover .mm-erp,.mm-erp:focus-visible{color:#C8C2D0;}
.mm-erps li:hover .mm-erp span,.mm-erp:focus-visible span{color:#fff;text-shadow:-.04em -.04em 0 var(--rojo),.04em .04em 0 var(--cian);}
.mm-erps li:hover .mm-n,.mm-erps li:focus-within .mm-n{color:rgba(255,255,255,.1);transform:translateY(-8px);}
.mm-erp:focus-visible{outline:2px solid var(--rojo);outline-offset:2px;}

/* columnas de enlaces */
.mm-cols{display:grid;grid-template-columns:repeat(4,minmax(0,1fr));gap:28px;}
.mm-cols.n3{grid-template-columns:repeat(3,minmax(0,1fr));}
.mm-cols.n1{grid-template-columns:minmax(0,1fr) minmax(0,1.5fr);align-items:start;}
.mm-gt{display:block;margin-bottom:12px;font-size:11.5px;font-weight:700;letter-spacing:.16em;text-transform:uppercase;
  color:var(--rojo-tx);text-decoration:none;}
a.mm-gt:hover{color:var(--tinta);}
.mm-cols ul{list-style:none;margin:0;padding:0;display:grid;gap:1px;}
/* cada enlace muestra su prompt ./> al pasar por encima */
.mm-l{position:relative;display:block;padding:6px 0;text-decoration:none;color:var(--tinta);font-size:14.5px;font-weight:600;line-height:1.35;}
.mm-l span{display:inline-block;transition:transform 240ms cubic-bezier(.2,.7,.3,1),color 200ms;}
.mm-l::before{content:"./>";position:absolute;left:0;top:6px;font-family:var(--mono);font-size:13px;font-weight:700;
  color:var(--rojo);opacity:0;transform:translateX(-6px);transition:opacity 200ms,transform 240ms;}
.mm-l:hover span,.mm-l:focus-visible span{transform:translateX(32px);color:var(--rojo-tx);}
.mm-l:hover::before,.mm-l:focus-visible::before{opacity:1;transform:none;}
.mm-l:focus-visible{outline:none;}
.mm-l .ext,.ml2 .ext,.mm-erp .ext{display:inline-block;width:12px;height:12px;margin-left:5px;vertical-align:.05em;opacity:.6;}
.mm-video{position:relative;display:block;overflow:hidden;text-decoration:none;background:var(--tinta);}
.mm-video img{width:100%;height:auto;aspect-ratio:1280/546;object-fit:cover;opacity:.85;transition:transform 600ms,opacity 300ms;}
.mm-video span{position:absolute;left:18px;bottom:14px;color:#E6E1EB;font-size:13px;line-height:1.4;text-shadow:0 1px 10px rgba(0,0,0,.4);}
.mm-video b{display:block;color:#fff;font-size:17px;letter-spacing:-.02em;}
.mm-video:hover img{transform:scale(1.04);opacity:1;}

/* entrada escalonada del contenido del panel */
.mm-p.on .mm-intro,.mm-p.on .mm-col,.mm-p.on .mm-erps li,.mm-p.on .mm-video{animation:mm-in 460ms cubic-bezier(.2,.7,.3,1) both;
  animation-delay:calc(120ms + var(--i,0) * 45ms);}
@keyframes mm-in{from{opacity:0;transform:translateY(10px)}to{opacity:1;transform:none}}

/* barra de estado de terminal */
.mm-status{display:flex;align-items:center;gap:0;padding:11px max(var(--gutter),calc((100% - var(--max))/2 + var(--gutter)));
  background:var(--tinta);color:#fff;font-family:var(--mono);font-size:13px;line-height:1.4;white-space:nowrap;overflow:hidden;
  opacity:0;transform:translateY(-6px);transition:opacity 260ms,transform 260ms;}
.mm.on .mm-status{opacity:1;transform:none;transition-delay:200ms;}
.mm-prompt{color:var(--cian);margin-right:10px;font-weight:700;}
.mm-cmd{color:#fff;overflow:hidden;text-overflow:ellipsis;}
.mm-cursor{flex:none;width:8px;height:15px;margin-left:2px;background:var(--rojo);animation:parpadeo 1.05s steps(1) infinite;}
@media(prefers-reduced-motion:reduce){
  .mm-p{transition:none;}
  .mm-p.on .mm-intro,.mm-p.on .mm-col,.mm-p.on .mm-erps li,.mm-p.on .mm-video{animation:none;}
  .mm-cursor{animation:none;}
}

.hdr-tel{display:flex;align-items:center;gap:8px;text-decoration:none;
  font-size:13px;font-weight:700;color:var(--tinta);letter-spacing:.01em;white-space:nowrap;}
.hdr-tel svg{width:16px;height:16px;color:var(--rojo);flex:none;}

.burger{display:none;width:42px;height:42px;flex:none;border:0;background:transparent;
  padding:0;cursor:pointer;align-items:center;justify-content:center;}
.burger span,.burger span::before,.burger span::after{
  display:block;width:26px;height:3px;background:var(--tinta);transition:transform 260ms,top 260ms,opacity 200ms;}
.burger span{position:relative;}
.burger span::before,.burger span::after{content:"";position:absolute;left:0;}
.burger span::before{top:-8px;}
.burger span::after{top:8px;}

/* ---------- preheader ----------
   El de su web, en su rojo. Blanco sobre #D8282F da 4.9:1: pasa AA a 12.5px. */
.pre{background:var(--rojo);color:#fff;font-size:12.5px;line-height:1.4;}
.pre-in{max-width:var(--max);margin:0 auto;padding:9px var(--gutter);
  display:flex;align-items:center;justify-content:space-between;gap:10px 28px;flex-wrap:wrap;}
.pre a{color:#fff;text-decoration:none;}
.pre a:hover{text-decoration:underline;text-underline-offset:3px;}
.pre-hola{margin:0;font-weight:500;white-space:nowrap;}
.pre-hola a{font-weight:700;}
.pre-hola .sep{opacity:.5;margin:0 10px;}
.pre-cli{display:flex;align-items:center;flex-wrap:wrap;gap:4px 20px;font-weight:600;}
.pre-remota{display:inline-flex;gap:8px;align-items:center;}
.pre-remota a{padding:1px 7px;border:1px solid rgba(255,255,255,.55);font-size:11px;font-weight:700;letter-spacing:.06em;}
.pre-remota a:hover{background:#fff;color:var(--rojo-tx);text-decoration:none;}

/* ---------- portada ---------- */
/* portada a pantalla completa: ocupa todo lo que queda bajo el preheader y
   se mete por detras de la cabecera. min-height (no height) para que en
   pantallas muy bajas, como un movil en horizontal, crezca en vez de cortar.
   svh y no vh: no cambia cuando aparece y desaparece la barra del navegador. */
.hero{position:relative;overflow:hidden;background:var(--hueso);
  margin-top:calc(var(--hdr-h)*-1);
  min-height:calc(100vh - var(--pre-h));
  display:flex;flex-direction:column;justify-content:center;
  padding-block:calc(var(--hdr-h) + clamp(20px,5svh,64px)) clamp(76px,11svh,120px);}
@supports(height:100svh){.hero{min-height:calc(100svh - var(--pre-h));}}
.hero .wrap{position:relative;z-index:2;text-align:center;width:100%;}
.hero .display{margin:0 0 6px;}
.hero .sub{font-size:clamp(17px,min(2.1vw,3.6svh),26px);font-weight:600;color:var(--rojo);
  letter-spacing:-.018em;margin:0 0 10px;}
.hero .lead{max-width:60ch;margin:0 auto clamp(24px,4.4svh,40px);font-size:clamp(15.5px,min(1.4vw,2.5svh),18px);}
.hero-cta{display:flex;flex-wrap:wrap;gap:clamp(16px,2.4vw,30px);justify-content:center;}

/* ---------- morph de la palabra grande ----------
   A: cada letra es una caja absoluta; las que comparten la palabra que sale y
      la que entra se deslizan a su sitio nuevo (FLIP), el resto sale y entra.
   B: el eco rojo/cian se abre al salir y se cierra al entrar. Para poder
      animarlo, el desplazamiento del eco vive en una propiedad registrada. */
@property --e{syntax:"<length>";inherits:true;initial-value:0px;}
.hero-t{margin:0;font:inherit;letter-spacing:normal;color:inherit;line-height:inherit;}
.sr{position:absolute;width:1px;height:1px;margin:-1px;padding:0;overflow:hidden;clip:rect(0 0 0 0);white-space:nowrap;border:0;}
.hero .display.morph{display:block;position:relative;margin:0 auto 6px;
  font-size:clamp(46px,min(10.5vw,17svh),124px);
  white-space:nowrap;color:var(--tinta);}
/* sin JS (o antes de que arranque) se ve la palabra normal con su eco */
.morph:not(.listo){text-shadow:-.035em -.035em 0 var(--rojo), .035em .035em 0 var(--cian);}
.morph.listo{color:transparent;}
.morph .mw{position:relative;display:block;margin:0 auto;isolation:isolate;
  transition:width 720ms cubic-bezier(.7,0,.2,1);}
/* cada letra son dos cajas: el eco en la capa de abajo y la tinta en la de
   arriba. Con una sola caja por letra, el rojo de cada letra se pintaba encima
   de la anterior (el tracking de -0.06em las solapa); con el texto seguido no
   pasa porque el navegador pinta todas las sombras antes que todo el texto. */
.morph .l{position:absolute;left:0;top:0;white-space:pre;will-change:transform,opacity,filter;}
/* --e es cuanto se abre el eco (lo anima el morph) y --dx/--dy hacia donde
   (lo mueve el raton). Por defecto -1/-1: rojo arriba-izquierda, como el tema. */
.morph{--dx:-1;--dy:-1;}
.morph .l.eco{z-index:0;--e:.035em;color:transparent;
  text-shadow:calc(var(--e)*var(--dx)) calc(var(--e)*var(--dy)) 0 var(--rojo),
              calc(var(--e)*var(--dx)*-1) calc(var(--e)*var(--dy)*-1) 0 var(--cian);}
.morph .l.tin{z-index:1;color:var(--tinta);}
.morph .medida{position:absolute;left:0;top:0;visibility:hidden;white-space:pre;pointer-events:none;}
.hero .sub{display:block;transition:opacity 320ms ease,transform 320ms ease;}
.hero .sub b{color:var(--tinta);font-weight:700;}
.hero .sub.fuera{opacity:0;transform:translateY(8px);}

.orbe{position:absolute;border-radius:50%;pointer-events:none;z-index:0;}
.orbe.a{width:min(620px,86vw);height:min(620px,86vw);left:-14%;bottom:-38%;
  background:radial-gradient(circle,rgba(25,211,206,.16),transparent 66%);}
.orbe.b{width:min(560px,80vw);height:min(560px,80vw);right:-12%;top:-30%;
  background:radial-gradient(circle,rgba(216,40,47,.13),transparent 66%);}
/* iconos de linea sueltos, como los del tema */
.ico-suelto{position:absolute;color:#C6C0CC;z-index:1;pointer-events:none;}
.ico-suelto svg{width:100%;height:100%;}
.ico-suelto.i1{width:46px;height:46px;left:5%;top:16%;}
.ico-suelto.i2{width:52px;height:52px;right:6%;top:15%;}
.ico-suelto.i3{width:44px;height:44px;left:9%;bottom:14%;}
.ico-suelto.i4{width:50px;height:50px;right:8%;bottom:11%;}

/* indicador de scroll: un raton dibujado con la rueda bajando */
.bajar{position:absolute;left:50%;bottom:clamp(18px,3.4svh,36px);z-index:2;transform:translateX(-50%);
  width:26px;height:42px;border:2px solid var(--tinta);border-radius:14px;opacity:.5;transition:opacity 200ms;}
.bajar:hover{opacity:1;}
.bajar span{position:absolute;left:50%;top:8px;width:4px;height:8px;margin-left:-2px;border-radius:2px;
  background:var(--rojo);animation:rueda 1.8s cubic-bezier(.6,0,.3,1) infinite;}
@keyframes rueda{0%{transform:translateY(0);opacity:0}25%{opacity:1}75%{transform:translateY(14px);opacity:0}100%{opacity:0}}
@media(max-height:560px){.bajar{display:none;}}

/* ---------- empresa: cabecera y video ---------- */
.emp-cab{display:grid;grid-template-columns:1.1fr .9fr;gap:clamp(20px,4vw,72px);align-items:end;
  margin-bottom:clamp(30px,4vw,54px);}
.emp-cab .intro{margin:0;}
.emp-video{position:relative;margin:0 0 clamp(56px,7vw,100px);aspect-ratio:1280/546;
  background:var(--tinta);overflow:hidden;}
.emp-video video{width:100%;height:100%;object-fit:cover;display:block;}
/* degradado abajo para que el boton se lea sobre cualquier toma */
.emp-video::after{content:"";position:absolute;inset:auto 0 0 0;height:55%;pointer-events:none;
  background:linear-gradient(to top,rgba(26,23,33,.78),rgba(26,23,33,0));}
.emp-play{position:absolute;left:clamp(18px,3vw,40px);bottom:clamp(18px,3vw,36px);z-index:1;
  display:flex;align-items:center;gap:16px;padding:0;border:0;background:none;cursor:pointer;
  color:#fff;font:inherit;text-align:left;}
.emp-play .ico{position:relative;flex:none;width:clamp(54px,5.4vw,72px);height:clamp(54px,5.4vw,72px);
  display:grid;place-items:center;border-radius:50%;background:var(--rojo);transition:transform 260ms,background 260ms;}
.emp-play .ico svg{width:42%;height:42%;margin-left:6%;}
/* onda que late alrededor del boton */
.emp-play .ico::after{content:"";position:absolute;inset:0;border-radius:50%;border:2px solid var(--rojo);
  animation:onda 2.4s cubic-bezier(.2,.7,.3,1) infinite;}
@keyframes onda{0%{transform:scale(1);opacity:.9}100%{transform:scale(1.7);opacity:0}}
.emp-play:hover .ico{transform:scale(1.07);background:var(--rojo-cl);}
.emp-play:focus-visible{outline:3px solid var(--cian);outline-offset:6px;}
.emp-play .tx{font-size:13.5px;line-height:1.4;color:#E6E1EB;text-shadow:0 1px 12px rgba(0,0,0,.35);}
.emp-play .tx b{display:block;font-size:clamp(17px,1.7vw,22px);font-weight:700;letter-spacing:-.02em;color:#fff;}

.vid-modal{padding:0;border:0;background:#000;width:min(1120px,94vw);max-width:none;
  max-height:92svh;overflow:visible;}
.vid-modal::backdrop{background:rgba(12,10,16,.92);}
.vid-modal video{display:block;width:100%;height:auto;max-height:92svh;background:#000;}
.vm-cerrar{position:absolute;right:0;top:-50px;width:42px;height:42px;display:grid;place-items:center;
  border:0;background:transparent;color:#fff;cursor:pointer;}
.vm-cerrar svg{width:26px;height:26px;}
.vm-cerrar:focus-visible{outline:2px solid var(--cian);}

/* ---------- tres pilares ---------- */
.pilares{display:grid;grid-template-columns:repeat(3,1fr);gap:0;}
.pil{padding:clamp(8px,1.6vw,20px) clamp(22px,3vw,48px);border-left:1px solid var(--linea);
  display:flex;flex-direction:column;align-items:flex-start;}
.pil:first-child{border-left:0;padding-left:0;}
.pil .ic{width:52px;height:52px;color:var(--rojo);margin-bottom:22px;}
.pil h3{margin-bottom:12px;}
.pil .btn-t{margin-top:auto;padding-top:20px;}   /* alinea los enlaces al pie */

/* ---------- cifras ---------- */
.cifras{background:var(--tinta);color:#CFC9D6;position:relative;overflow:hidden;}
.cifras .wrap{position:relative;z-index:1;}
.cif-g{display:grid;grid-template-columns:repeat(4,1fr);gap:clamp(20px,3vw,40px);text-align:center;}
.cif .n{font-size:clamp(40px,5.6vw,74px);font-weight:700;line-height:1;letter-spacing:-.055em;
  color:var(--blanco);display:block;}
.cif .n em{color:var(--cian);font-style:normal;}
.cif .l{display:block;margin-top:12px;font-size:12px;font-weight:700;letter-spacing:.16em;
  text-transform:uppercase;color:var(--cian);}
.cif .d{display:block;margin-top:6px;font-size:14.5px;line-height:1.5;color:#B7B0C0;}

/* ---------- productos: bloques de color a sangre ---------- */
.prods{display:grid;grid-template-columns:repeat(6,1fr);gap:clamp(12px,1.5vw,22px);}
.prod{
  position:relative;overflow:hidden;display:flex;flex-direction:column;justify-content:flex-end;
  padding:clamp(24px,2.8vw,38px);min-height:300px;text-decoration:none;isolation:isolate;
  background:var(--gris-f);color:var(--tinta);transition:transform 320ms;
}
.prod:hover{transform:translateY(-6px);}
.prod .cab{font-size:11px;font-weight:700;letter-spacing:.2em;text-transform:uppercase;
  margin-bottom:auto;color:var(--rojo-tx);}
.prod h3{margin-bottom:8px;font-size:clamp(23px,2.5vw,32px);letter-spacing:-.04em;}
.prod p{font-size:14.5px;line-height:1.6;margin:0;}
.prod .mas{display:inline-flex;align-items:center;gap:9px;margin-top:16px;
  font-size:11.5px;font-weight:700;letter-spacing:.16em;text-transform:uppercase;}
.prod .mas svg{width:14px;height:14px;transition:transform 240ms;}
.prod:hover .mas svg{transform:translateX(5px);}
/* el numero fantasma detras, gesto del tema */
.prod .fantasma{position:absolute;right:-.06em;bottom:-.28em;z-index:-1;
  font-size:clamp(120px,15vw,210px);font-weight:700;line-height:1;letter-spacing:-.07em;
  color:rgba(26,23,33,.055);pointer-events:none;}
.prod.grande{grid-column:span 3;min-height:360px;}
.prod.media{grid-column:span 3;}
.prod.tercio{grid-column:span 2;}
.prod.roja{background:var(--rojo);color:#fff;}
.prod.roja h3{color:#fff;}
.prod.roja .cab{color:#fff;}
.prod.roja .fantasma{color:rgba(255,255,255,.14);}
.prod.tinta{background:var(--tinta);color:#C8C2D0;}
.prod.tinta h3{color:#fff;}
.prod.tinta .cab{color:var(--cian);}
.prod.tinta .fantasma{color:rgba(255,255,255,.07);}
.prod.cian{background:var(--cian);color:#0C3B3A;}
.prod.cian h3{color:var(--tinta);}
.prod.cian .cab{color:#0C5250;}
.prod.cian .fantasma{color:rgba(26,23,33,.09);}

/* ---------- sectores ---------- */
.sectores{display:grid;grid-template-columns:repeat(4,1fr);gap:clamp(12px,1.5vw,20px);}
.sect{
  display:flex;flex-direction:column;gap:14px;padding:clamp(22px,2.4vw,32px);
  background:var(--hueso);border:1px solid var(--linea);text-decoration:none;color:inherit;
  transition:background 260ms,border-color 260ms,transform 260ms;
}
.sect:hover{background:var(--blanco);border-color:var(--rojo);transform:translateY(-5px);}
.sect .ic{width:42px;height:42px;color:var(--rojo);}
.sect h4{font-size:17.5px;letter-spacing:-.02em;line-height:1.24;}
.sect ul{margin:0;padding:0;list-style:none;font-size:13.5px;line-height:1.85;color:var(--texto);}
.sect li::before{content:"·";color:var(--rojo);font-weight:700;margin-right:7px;}

/* ---------- banda Oracle ---------- */
.oracle{background:var(--tinta);color:#C8C2D0;position:relative;overflow:hidden;}
.oracle .wrap{position:relative;z-index:1;
  display:grid;grid-template-columns:1.15fr .85fr;gap:clamp(34px,5vw,80px);align-items:center;}
.oracle h2{color:#fff;margin-bottom:18px;}
.oracle .sello{background:#fff;padding:26px 30px;display:flex;align-items:center;justify-content:center;}
.oracle .sello img{width:100%;max-width:300px;}
.oracle .pie-sello{margin-top:14px;font-size:12.5px;line-height:1.55;color:#A49DAE;text-align:center;}
.oracle .lista{margin:22px 0 0;padding:0;list-style:none;display:grid;gap:11px;}
.oracle .lista li{position:relative;padding-left:28px;font-size:15.5px;line-height:1.55;}
.oracle .lista li::before{content:"";position:absolute;left:0;top:.52em;width:13px;height:3px;background:var(--cian);}

/* ---------- modulos ---------- */
.mods{display:grid;grid-template-columns:repeat(4,1fr);gap:1px;background:var(--linea);
  border:1px solid var(--linea);}
.mod{background:var(--blanco);padding:clamp(22px,2.6vw,32px);text-decoration:none;color:inherit;
  display:flex;flex-direction:column;gap:13px;transition:background 240ms;}
.mod:hover{background:var(--hueso);}
.mod .ic{width:36px;height:36px;color:var(--rojo);}
.mod h4{font-size:16px;letter-spacing:-.015em;line-height:1.28;}
.mod p{font-size:13.5px;line-height:1.6;margin:0;}

/* ---------- verifactu ---------- */
.veri{background:var(--rojo);color:#fff;}
.veri .wrap{display:grid;grid-template-columns:1fr auto;gap:clamp(26px,4vw,56px);align-items:center;}
.veri h2{color:#fff;margin-bottom:12px;}
.veri p{color:#FFE2E3;max-width:64ch;margin:0;}
.veri .btn{background:#fff;color:var(--tinta);}
.veri .btn::before{border-color:var(--tinta);}
.veri .btn::after{border-color:var(--cian);}
.veri .btn:hover{background:var(--tinta);color:#fff;}

/* ---------- equipo ---------- */
.equipo-g{display:grid;grid-template-columns:repeat(4,1fr);gap:clamp(14px,1.8vw,26px);}
.per{background:var(--hueso);padding:clamp(20px,2.3vw,30px);border-bottom:4px solid transparent;
  transition:border-color 260ms,background 260ms;}
.per:hover{border-color:var(--rojo);background:var(--blanco);}
.per .ini{width:52px;height:52px;display:grid;place-items:center;background:var(--tinta);color:#fff;
  font-size:16px;font-weight:700;letter-spacing:-.02em;margin-bottom:16px;}
.per h4{font-size:17px;letter-spacing:-.022em;margin-bottom:5px;}
.per span{display:block;font-size:13.5px;line-height:1.5;}

/* ---------- noticias ---------- */
.news{display:grid;grid-template-columns:repeat(4,1fr);gap:clamp(14px,1.9vw,26px);}
.nw{display:flex;flex-direction:column;text-decoration:none;color:inherit;}
.nw .ph{position:relative;overflow:hidden;aspect-ratio:700/441;background:var(--gris-f);}
.nw .ph img{width:100%;height:100%;object-fit:cover;transition:transform 520ms;}
.nw:hover .ph img{transform:scale(1.05);}
.nw .fe{margin:16px 0 8px;font-size:11.5px;font-weight:700;letter-spacing:.17em;
  text-transform:uppercase;color:var(--rojo-tx);}
.nw h4{font-size:16.5px;line-height:1.32;letter-spacing:-.02em;}
.nw:hover h4{color:var(--rojo-tx);}

/* ---------- contacto ---------- */
.cont{background:var(--hueso);}
.cont .wrap{display:grid;grid-template-columns:.95fr 1.05fr;gap:clamp(34px,5vw,80px);align-items:start;}
.datos{display:grid;gap:22px;margin-top:28px;}
.dato{display:flex;gap:16px;align-items:flex-start;}
.dato .ic{width:26px;height:26px;color:var(--rojo);flex:none;margin-top:3px;}
.dato b{display:block;color:var(--tinta);font-size:12px;font-weight:700;letter-spacing:.16em;
  text-transform:uppercase;margin-bottom:5px;}
.dato a,.dato span{font-size:16.5px;color:var(--texto);text-decoration:none;line-height:1.5;}
.dato a:hover{color:var(--rojo-tx);}

.form{background:var(--blanco);padding:clamp(26px,3.2vw,44px);border:1px solid var(--linea);}
.campos{display:grid;grid-template-columns:1fr 1fr;gap:16px;}
.campo{display:flex;flex-direction:column;gap:7px;}
.campo.full{grid-column:1/-1;}
.campo label{font-size:11.5px;font-weight:700;letter-spacing:.16em;text-transform:uppercase;color:var(--tinta);}
.campo input,.campo select,.campo textarea{
  font:inherit;font-size:15.5px;padding:13px 15px;border:1px solid var(--linea);
  background:var(--hueso);color:var(--tinta);border-radius:0;width:100%;
  transition:border-color 200ms,background 200ms;}
.campo textarea{min-height:120px;resize:vertical;}
.campo input:focus,.campo select:focus,.campo textarea:focus{
  outline:none;border-color:var(--rojo);background:var(--blanco);}
.legal{grid-column:1/-1;display:flex;gap:11px;align-items:flex-start;font-size:13px;line-height:1.55;}
.legal input{width:18px;height:18px;flex:none;margin-top:3px;accent-color:var(--rojo);}
.form .btn{margin-top:22px;}
.aviso{margin-top:18px;font-size:12.5px;line-height:1.6;color:#6F6978;}

/* ---------- pie ---------- */
.pie{background:var(--tinta);color:#B7B0C0;padding-block:clamp(56px,7vw,96px) 0;overflow:hidden;}
.pie-g{display:grid;grid-template-columns:1.3fr 1fr 1fr 1fr;gap:clamp(26px,3.6vw,52px);}
.pie h5{color:#fff;font-size:12px;font-weight:700;letter-spacing:.18em;text-transform:uppercase;margin-bottom:18px;}
.pie ul{margin:0;padding:0;list-style:none;display:grid;gap:9px;}
.pie a{text-decoration:none;font-size:14.5px;color:#B7B0C0;transition:color 200ms;}
.pie a:hover{color:var(--cian);}
.pie .desc{font-size:14.5px;line-height:1.7;max-width:36ch;}
.pie .marca-pie{display:flex;align-items:center;margin-bottom:20px;}
.pie .marca-pie img{height:40px;width:auto;}
.redes{display:flex;gap:12px;margin-top:22px;}
.redes a{width:40px;height:40px;display:grid;place-items:center;border:1px solid rgba(255,255,255,.18);
  transition:background 220ms,border-color 220ms,color 220ms;}
.redes a:hover{background:var(--cian);border-color:var(--cian);color:var(--tinta);}
.redes svg{width:17px;height:17px;}

/* rotulo gigante del pie, solo el filo de las letras (como "Cortex" en el
   tema). Al entrar en pantalla el trazo se dibuja; luego el eco rojo/cian de
   la portada, tambien en filo, sigue al raton, y un foco ilumina el trazo
   donde esta el cursor. */
.pie-wm{margin-top:clamp(44px,6vw,84px);}
.wm{display:block;width:100%;height:auto;overflow:visible;user-select:none;}
/* el color del «4» va en linea en su trazado: los <use> clonan el nodo y
   las reglas de esta hoja no llegan a la copia. pathLength=1 en cada letra:
   el guion mide 1 y todas se dibujan al mismo ritmo */
.wm use{fill:none;stroke-width:1.3;stroke-linejoin:round;
  stroke-dasharray:1 1;stroke-dashoffset:1;}
.wm .wm-base{stroke:rgba(255,255,255,.3);--c4:var(--rojo);}
.wm .wm-luz{stroke:#fff;stroke-width:1.6;--c4:var(--rojo-cl);}
.wm .wm-eco{opacity:0;transition:opacity 900ms ease 1.2s;}
.wm .wm-eco.r{stroke:var(--rojo);--c4:var(--rojo);}
.wm .wm-eco.c{stroke:var(--cian);--c4:var(--cian);}
.wm.dibujado use{stroke-dashoffset:0;transition:stroke-dashoffset 2.6s cubic-bezier(.55,.1,.25,1);}
.wm.dibujado .wm-eco{opacity:.55;
  transition:stroke-dashoffset 2.6s cubic-bezier(.55,.1,.25,1),opacity 900ms ease 1.6s;}
@media(prefers-reduced-motion:reduce){
  .wm use{stroke-dasharray:none;stroke-dashoffset:0;}
  .wm .wm-eco{opacity:.55;}
}
.pie-bot{border-top:1px solid rgba(255,255,255,.12);margin-top:clamp(28px,4vw,48px);
  padding-block:24px 30px;display:flex;flex-wrap:wrap;gap:12px 26px;justify-content:space-between;
  font-size:13px;}
.pie-bot .legales{display:flex;flex-wrap:wrap;gap:8px 20px;}

/* ---------- aparicion ---------- */
.rv{opacity:0;transform:translateY(26px);transition:opacity 720ms cubic-bezier(.2,.7,.3,1),transform 720ms cubic-bezier(.2,.7,.3,1);}
.rv.in{opacity:1;transform:none;}
@media(prefers-reduced-motion:reduce){
  .rv{opacity:1;transform:none;transition:none;}
  *{animation-duration:.01ms!important;transition-duration:.01ms!important;}
}

/* ---------- menu movil ---------- */
.menu{position:fixed;inset:0;z-index:90;background:var(--tinta);color:#fff;
  display:flex;flex-direction:column;transform:translateX(100%);
  transition:transform 400ms cubic-bezier(.2,.7,.3,1);visibility:hidden;}
.menu.on{transform:none;visibility:visible;}
.m-head{display:flex;align-items:center;gap:16px;padding:20px var(--gutter);
  border-bottom:1px solid rgba(255,255,255,.14);min-height:80px;}
.m-head .marca-m{display:flex;align-items:center;margin-right:auto;}
.m-head .marca-m img{height:34px;width:auto;}
.m-close{width:42px;height:42px;flex:none;border:0;background:transparent;padding:0;cursor:pointer;
  display:grid;place-items:center;color:#fff;}
.m-close svg{width:24px;height:24px;}
.m-body{flex:1;overflow-y:auto;padding:26px var(--gutter) 40px;-webkit-overflow-scrolling:touch;}
.m-body a.ml{display:block;padding:15px 0;border-bottom:1px solid rgba(255,255,255,.1);
  text-decoration:none;color:#fff;font-size:20px;font-weight:700;letter-spacing:-.025em;}
.m-body a.ml:hover{color:var(--cian);}
/* menu movil: las secciones con subpaginas en acordeon */
.m-sec{border-bottom:1px solid rgba(255,255,255,.1);}
/* el summary lleva el mismo estilo que los enlaces del menu (a.ml) */
.m-sec summary{list-style:none;cursor:pointer;display:flex;align-items:center;justify-content:space-between;
  padding:15px 0;color:#fff;font-size:20px;font-weight:700;letter-spacing:-.025em;}
.m-sec summary::-webkit-details-marker{display:none;}
.m-sec summary span{position:relative;width:14px;height:14px;flex:none;}
.m-sec summary span::before,.m-sec summary span::after{content:"";position:absolute;left:0;top:6px;width:14px;height:2px;background:var(--cian);
  transition:transform 260ms;}
.m-sec summary span::after{transform:rotate(90deg);}
.m-sec[open] summary span::after{transform:rotate(0);}
.m-sec[open] summary{color:var(--cian);}
.m-sub{padding:0 0 18px;}
.m-sub ul{list-style:none;margin:0 0 6px;padding:0;}
.m-gt{margin:12px 0 4px;font-size:11px;font-weight:700;letter-spacing:.18em;text-transform:uppercase;color:#A49DAE;}
.ml2{display:block;padding:7px 0;text-decoration:none;color:#E1DCE6;font-size:15.5px;font-weight:600;}
.ml2 span{display:inline-flex;align-items:center;gap:6px;}
.ml2 small{display:block;font-size:12.5px;font-weight:500;color:#A49DAE;margin-top:2px;}
.ml2:hover{color:#fff;}
.ml2::before{content:"./> ";font-family:var(--mono);font-size:12.5px;color:var(--rojo-cl);}

.m-cli{margin-top:26px;display:grid;gap:2px;}
.m-cli span{font-size:11px;font-weight:700;letter-spacing:.18em;text-transform:uppercase;color:var(--cian);margin-bottom:8px;}
.m-cli a{text-decoration:none;color:#D6D0DC;font-size:15px;font-weight:600;padding:7px 0;}
.m-cli a:hover{color:#fff;}
.m-cta{margin-top:30px;display:grid;gap:22px;}
.m-cta .btn{text-align:center;background:var(--rojo);}
.m-tel{display:flex;align-items:center;gap:10px;text-decoration:none;color:#fff;
  font-size:17px;font-weight:700;}
.m-tel svg{width:18px;height:18px;color:var(--cian);flex:none;}

/* =====================================================================
   RESPONSIVE
   ===================================================================== */
/* con siete secciones la barra no cabe entera por debajo de ~1360px: el
   telefono se queda en icono y las secciones se aprietan un poco */
@media(max-width:1360px) and (min-width:1181px){
  .hdr-tel span{display:none;}
  .nav>a,.nav-sub{letter-spacing:.08em;}
}
@media(max-width:1180px){
  .nav{display:none;}
  .pre-cli a[href*="wiki"]{display:none;}
  .burger{display:flex;}
  /* el margin-right:auto vive en .marca, asi que el telefono y el burger
     quedan pegados a la derecha sin tocar nada mas */
  .mods{grid-template-columns:repeat(3,1fr);}
  .equipo-g{grid-template-columns:repeat(3,1fr);}
}
@media(max-width:1000px){
  .prods{grid-template-columns:repeat(2,1fr);}
  .prod.grande,.prod.media,.prod.tercio{grid-column:span 1;}
  .prod.tercio:last-child{grid-column:span 2;}
  .sectores{grid-template-columns:repeat(2,1fr);}
  .news{grid-template-columns:repeat(2,1fr);}
  .cif-g{grid-template-columns:repeat(2,1fr);gap:clamp(30px,5vw,48px);}
  .oracle .wrap{grid-template-columns:1fr;}
  .oracle .sello{max-width:420px;}
  .cont .wrap{grid-template-columns:1fr;}
  .pie-g{grid-template-columns:1fr 1fr;}
}
@media(max-width:860px){
  .pilares{grid-template-columns:1fr;gap:34px;}
  .pil{border-left:0;border-top:1px solid var(--linea);padding:28px 0 0;}
  .pil:first-child{border-top:0;padding-top:0;}
  .pil .btn-t{margin-top:16px;padding-top:0;}
  .veri .wrap{grid-template-columns:1fr;}
  .mods{grid-template-columns:repeat(2,1fr);}
  .equipo-g{grid-template-columns:repeat(2,1fr);}
  .hdr-tel span{display:none;}
  .marca img{height:38px;}
  .hdr-tel{width:42px;height:42px;justify-content:center;}
  .hdr-tel svg{width:19px;height:19px;}
}
@media(max-width:620px){
  body{font-size:16px;}
  .prods{grid-template-columns:1fr;}
  .prod.tercio:last-child{grid-column:span 1;}
  .prod{min-height:250px;}
  .prod.grande{min-height:280px;}
  .sectores{grid-template-columns:1fr;}
  .news{grid-template-columns:1fr;}
  .mods{grid-template-columns:1fr;}
  .equipo-g{grid-template-columns:1fr 1fr;}
  .campos{grid-template-columns:1fr;}
  .pie-g{grid-template-columns:1fr;gap:34px;}
  .hero-cta{flex-direction:column;align-items:stretch;}
  .hero-cta .btn{text-align:center;}
  /* el doble marco desplazado necesita aire lateral: si no, los 7px se salen */
  .hero-cta{padding-inline:8px;}
  .ico-suelto{display:none;}
  .hero .sub{min-height:2.9em;}
  /* portada en movil: la palabra mas grande (el JS la limita para que
     «contabilidad» quepa), el texto mas corto, y el segundo boton pasa a
     enlace para que no haya dos bloques con doble marco uno encima de otro */
  .hero .display.morph{font-size:16.5vw;margin-bottom:10px;}
  .hero .sub{font-size:17px;line-height:1.4;margin-bottom:16px;}
  .lead-intro{display:none;}
  .hero .lead{font-size:16px;line-height:1.65;max-width:32ch;margin-bottom:30px;}
  .hero-cta{gap:18px;}
  .hero-cta .btn.inv{background:none;padding:10px 0;color:var(--tinta);}
  .hero-cta .btn.inv::before,.hero-cta .btn.inv::after{display:none;}
  .hero-cta .btn.inv:hover{background:none;color:var(--rojo-tx);}
  /* el orbe rojo quedaba justo detras de la cabecera transparente y parecia
     una mancha junto al telefono: se baja a media altura */
  .orbe.b{top:34%;right:-46%;}
  .orbe.a{bottom:-22%;}
  .emp-cab{grid-template-columns:1fr;align-items:start;}
  .emp-video{aspect-ratio:4/3;margin-inline:calc(var(--gutter)*-1);}
  .emp-play .tx{font-size:12.5px;}
  /* en movil no hay preheader: el telefono esta en la cabecera y los enlaces
     de clientes en el menu, en «Area de clientes» */
  .pre{display:none;}
  .wm use{stroke-width:2.6;}
  .wm .wm-luz{stroke-width:3;}
}
@media(max-width:420px){
  .cif-g{grid-template-columns:1fr;}
  .equipo-g{grid-template-columns:1fr;}
  /* no caben logotipo completo + telefono + burger */
  .marca img{height:34px;}
  .bar{gap:12px;min-height:70px;}
  :root{--hdr-h:71px;}
}
