/* base.css — la hoja de la vitrina.
   Vivía dentro de <style> en index.html. Salió a un archivo cuando nacieron las páginas
   verticales (servicios.html, seguros.html): tres copias de la misma hoja se desincronizan a la
   primera semana, y "nunca duplicar" es Capa 0 (platform/CLAUDE.md §3.1).
   Lo de aquí abajo es la hoja original, movida sin tocar una coma. Lo nuevo va al final,
   bajo su propio titular. */

  :root{
    --ink:#0A0C14; --ink2:#121626; --ink3:#1C2236; --paper:#F6F7FA; --card:#fff; --line:#E5E7EE; --line2:#F0F1F6;
    --mut:#565A6E; --mut2:#8B8FA3; --acc:#4F63F5; --acc-d:#3A4CD6; --acc-soft:#E9ECFE;
    --em:#0FA974; --em-soft:#E4F6EF; --violet:#6E56CF; --violet-soft:#ECE8FA; --amber:#D9820A; --amber-soft:#FBEFD9;
    --teal:#0E9AA7; --teal-soft:#DEF3F5; --slate:#5B6472; --slate-soft:#EEF0F3;
    --r:16px; --r-s:11px; --sans:ui-sans-serif,system-ui,-apple-system,"Segoe UI",Roboto,Helvetica,Arial,sans-serif; --mono:ui-monospace,Menlo,monospace;
    --shadow:0 1px 2px rgba(10,12,20,.04),0 12px 32px -16px rgba(10,12,20,.2); --shadow-lg:0 30px 70px -30px rgba(10,12,20,.55);
  }
  *{box-sizing:border-box} body{margin:0;background:var(--paper);color:var(--ink);font-family:var(--sans);line-height:1.55;-webkit-font-smoothing:antialiased}
  h1,h2,h3{text-wrap:balance;margin:0} .wrap{max-width:1120px;margin:0 auto;padding:0 24px}
  a{color:inherit;text-decoration:none} .eyebrow{font-size:12px;font-weight:700;letter-spacing:.16em;text-transform:uppercase;color:var(--acc)}
  .cta{display:inline-flex;align-items:center;gap:9px;background:var(--acc);color:#fff;font-weight:700;font-size:15px;padding:13px 24px;border-radius:12px;transition:.15s}
  .cta:hover{background:var(--acc-d)} .cta.ghost{background:transparent;color:#E6E8F5;border:1px solid rgba(255,255,255,.2)} .cta.ghost:hover{background:rgba(255,255,255,.06)}

  nav{position:sticky;top:0;z-index:10;background:rgba(10,12,20,.72);backdrop-filter:blur(12px);border-bottom:1px solid rgba(255,255,255,.07)}
  nav .in{max-width:1120px;margin:0 auto;padding:14px 24px;display:flex;align-items:center;gap:20px}
  .logo{display:inline-flex;align-items:center;gap:10px;color:#fff;font-weight:750;font-size:16px}
  .logo .mk{width:30px;height:30px;border-radius:9px;background:conic-gradient(from 140deg,var(--acc),#8EA0FF,var(--acc));display:grid;place-items:center;font-weight:850;color:#0A0C14;font-size:13px}
  nav .links{margin-left:auto;display:flex;gap:22px;font-size:14px;color:#B7BAce}
  nav .links a{color:#B7BACE} nav .links a:hover{color:#fff}

  .hero{background:radial-gradient(110% 80% at 80% -10%,rgba(79,99,245,.34),transparent 55%),radial-gradient(70% 60% at 0% 0%,rgba(110,86,207,.16),transparent 55%),var(--ink);color:#EAECF5;padding:74px 0 92px;position:relative;overflow:hidden}
  .hero h1{font-size:clamp(34px,6vw,62px);font-weight:800;line-height:1.02;letter-spacing:-.025em;margin:22px 0 20px;max-width:17ch}
  .hero h1 b{color:#A9B5FF;font-weight:800}
  .hero .lede{font-size:clamp(16px,2vw,20px);color:#B6BAD0;max-width:60ch;margin:0 0 30px}
  .hero-cta{display:flex;gap:12px;flex-wrap:wrap}
  .metrics{display:flex;gap:8px 34px;flex-wrap:wrap;margin-top:38px;font-size:13.5px;color:#9EA2BE}
  .metrics b{color:#EAECF5;font-weight:700;font-size:15px;display:block}

  section{padding:64px 0} .sec-head{margin-bottom:34px;max-width:64ch} .sec-head h2{font-size:clamp(25px,3.6vw,36px);font-weight:770;letter-spacing:-.02em;margin-top:8px}
  .sec-head p{color:var(--mut);font-size:16px;margin:12px 0 0}

  /* MODELO casa de software */
  .house{display:grid;grid-template-columns:1fr 1fr;gap:16px}
  .hcard{background:var(--card);border:1px solid var(--line);border-radius:var(--r);padding:26px;box-shadow:var(--shadow)}
  .hcard .ic{font-size:24px;width:46px;height:46px;border-radius:12px;background:var(--acc-soft);display:grid;place-items:center;margin-bottom:14px}
  .hcard h3{font-size:18px;font-weight:730} .hcard p{font-size:14.5px;color:var(--mut);margin:9px 0 0}

  /* PRODUCTOS vitrina */
  .grid{display:grid;grid-template-columns:repeat(2,1fr);gap:18px}
  .prod{background:var(--card);border:1px solid var(--line);border-radius:var(--r);padding:26px;box-shadow:var(--shadow);position:relative;display:flex;flex-direction:column}
  .prod .top{display:flex;align-items:center;gap:12px}
  .prod .chip{width:44px;height:44px;border-radius:12px;display:grid;place-items:center;font-size:22px;font-weight:800;flex:none}
  .prod h3{font-size:20px;font-weight:750} .prod .cat{font-size:12px;font-weight:650;color:var(--mut2);text-transform:uppercase;letter-spacing:.05em}
  .prod p{font-size:14.5px;color:var(--mut);margin:14px 0 0;flex:1}
  .prod .foot{display:flex;align-items:center;gap:10px;margin-top:18px}
  .status{font-size:11.5px;font-weight:700;padding:4px 10px;border-radius:999px}
  .status.live{background:var(--em-soft);color:var(--em)} .status.beta{background:var(--acc-soft);color:var(--acc-d)} .status.dev{background:var(--slate-soft);color:var(--slate)}
  .prod .link{margin-left:auto;font-size:13.5px;font-weight:700;color:var(--acc)} .prod .link:hover{color:var(--acc-d)}
  .prod.feat{grid-column:1/-1;background:var(--ink);color:#EAECF5;border-color:var(--ink3)}
  .prod.feat h3{color:#fff} .prod.feat p{color:#B6BAD0} .prod.feat .cat{color:#8B8FB0}

  /* PORTAFOLIO VIVO — se dibuja desde web/data/portafolio.json, que sale del registro de Capa 0.
     No se escribe a mano: el sitio no puede anunciar un precio distinto del que se cobra. */
  .band{background:var(--ink);color:#EAECF5}
  .band .sec-head h2{color:#fff} .band .sec-head p{color:#B6BAD0}
  .serv-grid{display:grid;grid-template-columns:repeat(3,1fr);gap:18px}
  .serv{background:var(--ink2);border:1px solid var(--ink3);border-radius:var(--r);padding:26px;display:flex;flex-direction:column;gap:14px}
  .serv h3{font-size:19px;font-weight:750;color:#fff}
  .serv > p{font-size:14.5px;color:#B6BAD0;margin:0;flex:1}
  .pasos{list-style:none;display:flex;flex-direction:column;gap:10px;margin:0;padding:0;counter-reset:paso}
  .pasos li{counter-increment:paso;display:grid;grid-template-columns:22px 1fr;gap:11px;align-items:start;font-size:13.5px;line-height:1.5}
  .pasos li::before{content:counter(paso);width:22px;height:22px;border-radius:7px;display:grid;place-items:center;font-size:11px;font-weight:800;background:var(--acc-soft);color:var(--acc-d)}
  .band .pasos li{color:#C6CADC} .band .pasos li::before{background:rgba(169,181,255,.16);color:#A9B5FF}
  .mod-grid{display:grid;grid-template-columns:repeat(3,1fr);gap:16px}
  .mod{background:var(--card);border:1px solid var(--line);border-radius:var(--r);box-shadow:var(--shadow);overflow:hidden;display:flex;flex-direction:column}
  .mod .cab{padding:22px 22px 0;display:flex;flex-direction:column;gap:9px;flex:1}
  .mod .fila{display:flex;align-items:center;gap:10px}
  .mod h3{font-size:17px;font-weight:750}
  .mod .precio{margin-left:auto;font-size:15px;font-weight:800;white-space:nowrap;font-variant-numeric:tabular-nums}
  .mod .precio span{font-size:11.5px;font-weight:650;color:var(--mut2)}
  .mod > .cab > p{font-size:14px;color:var(--mut);margin:0;flex:1}
  .mod .ver{width:100%;border:0;border-top:1px solid var(--line2);background:transparent;padding:13px 22px;margin-top:18px;
            font:inherit;font-size:13px;font-weight:700;color:var(--acc);cursor:pointer;text-align:left;display:flex;align-items:center;gap:8px}
  .mod .ver:hover{background:var(--line2)} .mod .ver:focus-visible{outline:2px solid var(--acc);outline-offset:-2px}
  .mod .ver .fl{margin-left:auto;transition:transform .2s}
  .mod.abierto .ver .fl{transform:rotate(180deg)}
  .mod .como{padding:4px 22px 22px;border-top:1px solid var(--line2)}
  .mod .como[hidden]{display:none}
  .mod .como h4{font-size:11.5px;font-weight:750;letter-spacing:.14em;text-transform:uppercase;color:var(--mut2);margin:16px 0 12px}
  .mod video{width:100%;border-radius:12px;display:block;margin-top:14px;background:#000}
  @media (max-width:900px){.serv-grid,.mod-grid{grid-template-columns:1fr}}
  @media (prefers-reduced-motion:reduce){.mod .ver .fl{transition:none}}

  /* EQUIPO — el modelo de especialistas (ADR-023). Se nombra a quien ya responde; el resto son
     roles del negocio, no personas inventadas: un nombre es una promesa. */
  .eq{display:grid;grid-template-columns:repeat(3,1fr);gap:16px;margin-top:8px}
  .eq .r{background:var(--card);border:1px solid var(--line);border-radius:var(--r);padding:22px;display:flex;flex-direction:column;gap:8px}
  .eq .r .q{font-size:11.5px;font-weight:750;letter-spacing:.12em;text-transform:uppercase;color:var(--mut2)}
  .eq .r h3{font-size:16.5px;font-weight:740}
  .eq .r p{font-size:14px;color:var(--mut);margin:0}
  .eq .r .quien{font-size:12.5px;font-weight:700;color:var(--acc);margin-top:auto;padding-top:10px}
  .eq .r .quien.pronto{color:var(--mut2);font-weight:650}
  @media (max-width:900px){.eq{grid-template-columns:1fr}}

  /* FILOSOFIA */
  .philo{background:var(--ink);color:#EAECF5;border-radius:22px;padding:48px;box-shadow:var(--shadow-lg)}
  .philo h2{color:#fff;font-size:clamp(23px,3.2vw,32px);font-weight:760;letter-spacing:-.02em;max-width:20ch}
  .philo .pts{display:grid;grid-template-columns:repeat(3,1fr);gap:24px;margin-top:28px}
  .philo .pt h4{font-size:16px;font-weight:720;color:#fff;display:flex;align-items:center;gap:8px} .philo .pt p{font-size:14px;color:#B6BAD0;margin:7px 0 0}

  /* CLOSE */
  .close{background:linear-gradient(135deg,var(--acc),#6E56CF);color:#fff;border-radius:22px;padding:52px 44px;text-align:center;box-shadow:var(--shadow-lg)}
  .close h2{color:#fff;font-size:clamp(24px,3.4vw,34px);font-weight:780;letter-spacing:-.02em}
  .close p{color:#E2E4FA;max-width:52ch;margin:12px auto 26px;font-size:16px}
  .close .cta{background:#fff;color:var(--acc-d)} .close .cta:hover{background:#EEF0FF}

  footer{background:var(--ink);color:#8B8FB0;padding:40px 0;font-size:13px}
  footer .in{display:flex;gap:16px;flex-wrap:wrap;align-items:center} footer b{color:#C7CAE0} footer .r{margin-left:auto;color:#6E7290}
  .note{font-size:12px;color:var(--mut2)}
  @media(max-width:820px){.house,.grid,.philo .pts{grid-template-columns:1fr}.philo,.close{padding:32px 22px}
    nav .in{flex-wrap:wrap;gap:8px 14px}nav .links{margin-left:0;width:100%;gap:16px;font-size:13.5px;overflow-x:auto;white-space:nowrap;padding-bottom:2px}}

  .chatbox{max-width:720px;margin:0 auto;background:var(--card);border:1px solid var(--line);border-radius:18px;box-shadow:var(--shadow-lg);overflow:hidden}
  .chat-top{display:flex;align-items:center;gap:11px;padding:15px 18px;border-bottom:1px solid var(--line2);background:linear-gradient(180deg,var(--acc-soft),transparent)}
  .chat-top .av{width:40px;height:40px;border-radius:50%;background:conic-gradient(from 140deg,var(--acc),#8EA0FF,var(--acc));display:grid;place-items:center;font-weight:850;color:#0A0C14}
  .chat-top .nm{font-weight:730;font-size:15px} .chat-top .st{font-size:12px;color:var(--em);display:flex;align-items:center;gap:5px}
  .chat-top .d{width:7px;height:7px;border-radius:50%;background:var(--em)}
  .chat-body{padding:20px 18px;display:flex;flex-direction:column;gap:11px;max-height:400px;min-height:230px;overflow-y:auto}
  .cmsg{max-width:84%;padding:11px 14px;border-radius:15px;font-size:14.5px;line-height:1.5;animation:cp .25s ease both}
  .cmsg.u{align-self:flex-end;background:var(--acc);color:#fff;border-bottom-right-radius:5px}
  .cmsg.s{align-self:flex-start;background:var(--paper);border:1px solid var(--line);color:var(--ink);border-bottom-left-radius:5px;white-space:pre-wrap}
  .cmsg.s b{color:var(--acc-d)}
  @keyframes cp{from{opacity:0;transform:translateY(6px)}to{opacity:1;transform:none}}
  .ctyping{align-self:flex-start;display:flex;gap:4px;padding:13px 15px;background:var(--paper);border:1px solid var(--line);border-radius:15px}
  .ctyping span{width:7px;height:7px;border-radius:50%;background:var(--mut2);animation:cb 1s infinite}
  .ctyping span:nth-child(2){animation-delay:.15s}.ctyping span:nth-child(3){animation-delay:.3s}
  @keyframes cb{0%,60%,100%{opacity:.3}30%{opacity:1}}
  .chat-in{display:flex;gap:9px;padding:14px 16px;border-top:1px solid var(--line2)}
  .chat-in input{flex:1;border:1px solid var(--line);border-radius:11px;padding:12px 14px;font-family:inherit;font-size:14.5px;outline:none}
  .chat-in input:focus{border-color:var(--acc)}
  .chat-in button{background:var(--acc);color:#fff;border:0;border-radius:11px;width:48px;font-size:17px;cursor:pointer}
  .chat-in button:hover{background:var(--acc-d)} .chat-in button:disabled{opacity:.5}

  /* El cierre dentro del chat: las tres salidas y los dos campos. Ni "comprar" (no hay checkout)
     ni un formulario de cinco campos al final de la página — aquí, con la charla ya hecha. */
  .cierre{display:flex;flex-wrap:wrap;gap:8px;align-self:flex-start;animation:cp .25s ease both}
  .cbtn{background:var(--paper);border:1px solid var(--acc);color:var(--acc-d);border-radius:999px;
        padding:9px 14px;font-family:inherit;font-size:13.5px;font-weight:650;cursor:pointer}
  .cbtn:hover{background:var(--acc);color:#fff}
  .cbtn.ok{background:var(--acc);color:#fff;border-color:var(--acc);width:100%}
  .cierre-form{display:flex;flex-wrap:wrap;gap:8px;align-self:stretch;animation:cp .25s ease both}
  .cierre-form input{flex:1 1 100%;border:1px solid var(--line);border-radius:11px;padding:11px 13px;
        font-family:inherit;font-size:14.5px;outline:none}
  .cierre-form input:focus{border-color:var(--acc)}
  .cierre-form .nota{flex:1 1 100%;margin:0;font-size:13px;color:var(--mut)}

/* ── Lo que se añadió al vender lo que ya existe ────────────────────────────────────────── */

/* CINTA DE ESTADO. El sitio anunciaba siete productos y seis no existían. Ahora cada cosa
   dice en qué estado está, y lo que no se puede entregar hoy no lleva ni precio ni botón. */
.hoy{background:var(--em-soft);color:var(--em);font-size:11.5px;font-weight:750;padding:4px 10px;border-radius:999px;white-space:nowrap}

/* PRUEBA. Números medidos, no adjetivos. Cada uno sale de un sitio que se puede volver a medir. */
.prueba{display:grid;grid-template-columns:repeat(4,1fr);gap:14px;margin-top:26px}
.prueba .p{background:var(--card);border:1px solid var(--line);border-radius:var(--r-s);padding:18px}
.prueba .n{font-size:26px;font-weight:800;letter-spacing:-.02em;font-variant-numeric:tabular-nums}
.prueba .t{font-size:13px;color:var(--mut);margin-top:4px;line-height:1.4}
.band .prueba .p{background:var(--ink2);border-color:var(--ink3)}
.band .prueba .n{color:#fff} .band .prueba .t{color:#B6BAD0}
@media(max-width:820px){.prueba{grid-template-columns:repeat(2,1fr)}}

/* VERTICALES. Dos puertas, no una lista de productos: el visitante se reconoce antes de leer. */
.vert{display:grid;grid-template-columns:1fr 1fr;gap:18px}
.vert a{background:var(--card);border:1px solid var(--line);border-radius:var(--r);padding:28px;box-shadow:var(--shadow);display:flex;flex-direction:column;gap:10px;transition:.15s}
.vert a:hover{border-color:var(--acc);transform:translateY(-2px)}
.vert h3{font-size:20px;font-weight:750} .vert p{font-size:14.5px;color:var(--mut);margin:0;flex:1}
.vert .ir{font-size:13.5px;font-weight:700;color:var(--acc)}
/* Tres puertas en vez de dos. Va como clase y no como `style=` en el HTML: un inline le gana a
   la consulta de medios de abajo, y en el móvil quedarían tres columnas apretadas. */
.vert.tres{grid-template-columns:repeat(3,1fr)}
@media(max-width:820px){.vert,.vert.tres{grid-template-columns:1fr}}

/* FORMULARIO. El agujero que encontró la auditoría del 11-ago: un visitante interesado no tenía
   dónde dejar el correo. Ya se guarda de verdad (`assets/lead.js` → edge function `lead`); si el
   guardado falla, se abre el correo ya escrito como respaldo, nunca un "gracias" en falso. */
.form{max-width:620px;margin:0 auto;background:var(--card);border:1px solid var(--line);border-radius:18px;box-shadow:var(--shadow-lg);padding:28px}
.form .par{display:grid;grid-template-columns:1fr 1fr;gap:12px}
.form label{display:block;font-size:12.5px;font-weight:700;color:var(--mut);margin:0 0 6px}
.form .campo{margin-bottom:14px}
.form input,.form textarea,.form select{width:100%;border:1px solid var(--line);border-radius:11px;padding:12px 14px;font-family:inherit;font-size:14.5px;outline:none;background:#fff;color:var(--ink)}
.form input:focus,.form textarea:focus,.form select:focus{border-color:var(--acc)}
.form textarea{min-height:88px;resize:vertical}
.form button{width:100%;border:0;background:var(--acc);color:#fff;font:inherit;font-weight:750;font-size:15px;padding:14px;border-radius:12px;cursor:pointer}
.form button:hover{background:var(--acc-d)}
.form .letra{font-size:12px;color:var(--mut2);margin:12px 0 0;text-align:center}
@media(max-width:640px){.form .par{grid-template-columns:1fr}}
/* El campo trampa. Se saca de la pantalla en vez de `display:none`: los bots que rellenan
   formularios saltan lo oculto por CSS conocido, y así sigue en el DOM para que caigan. Sin
   `tabindex` (en el HTML) para que quien navegue con teclado o lector de pantalla no lo pise. */
.trampa{position:absolute;left:-9999px;width:1px;height:1px;overflow:hidden}

/* TALLER. Lo que se está construyendo se nombra en una línea, sin tarjeta y sin precio.
   Una tarjeta con logo se lee como "esto se compra"; una línea gris se lee como lo que es. */
.taller{background:var(--line2);border:1px solid var(--line);border-radius:var(--r-s);padding:18px 22px;font-size:14px;color:var(--mut);margin-top:20px}
.taller b{color:var(--ink);font-weight:730}

/* MÓDULOS EN CAMINO. Mismo criterio: se listan para que se vea a dónde va la plataforma,
   sin precio, sin botón y sin "cómo funciona" — todavía no funciona. */
.camino{display:flex;flex-wrap:wrap;gap:10px;margin-top:16px}
.camino span{background:var(--card);border:1px solid var(--line);border-radius:999px;padding:7px 14px;font-size:13.5px;color:var(--mut)}

/* PÁGINAS VERTICALES */
.faq{display:grid;gap:12px;max-width:760px}
.faq details{background:var(--card);border:1px solid var(--line);border-radius:var(--r-s);padding:16px 20px}
.faq summary{font-weight:730;font-size:15.5px;cursor:pointer;list-style:none}
.faq summary::-webkit-details-marker{display:none}
.faq summary::after{content:'+';float:right;color:var(--acc);font-weight:800}
.faq details[open] summary::after{content:'−'}
.faq p{font-size:14.5px;color:var(--mut);margin:12px 0 0}
.paso-grande{display:grid;grid-template-columns:repeat(3,1fr);gap:18px;counter-reset:pg}
.paso-grande .pg{background:var(--card);border:1px solid var(--line);border-radius:var(--r);padding:24px;counter-increment:pg}
.paso-grande .pg::before{content:counter(pg);display:grid;place-items:center;width:32px;height:32px;border-radius:10px;background:var(--acc-soft);color:var(--acc-d);font-weight:800;font-size:14px;margin-bottom:12px}
.paso-grande h3{font-size:17px;font-weight:740} .paso-grande p{font-size:14px;color:var(--mut);margin:8px 0 0}
@media(max-width:820px){.paso-grande{grid-template-columns:1fr}}
.volver{font-size:13.5px;color:var(--mut2);padding-top:26px;display:block}
.volver:hover{color:var(--acc)}

/* ── carga.html · 360 Cargo ───────────────────────────────────────────────────────────────────
   Componentes propios de la vertical de carga: la tarjeta de embarque con sus datos en monoespacio
   (así se ven un BL y un contenedor de verdad), la lista de documentos con su estado y los bloques
   de sala de control. Lo que base.css ya define no se repite: dos definiciones del mismo selector
   en una hoja es cómo algo deja de aplicarse sin que nadie sepa por qué. */

h1{font-size:clamp(34px,5.2vw,56px);line-height:1.06;letter-spacing:-.022em;font-weight:800}
h2{font-size:clamp(25px,3.2vw,36px);line-height:1.14;letter-spacing:-.018em;font-weight:780}
h3{font-size:18px;font-weight:730;letter-spacing:-.005em}
p{margin:0}
.lede{font-size:clamp(16px,1.9vw,19px);color:var(--mut);max-width:62ch}
.mono{font-family:var(--mono);font-variant-numeric:tabular-nums}
/* ── Sala de control: fondo oscuro donde vive la operación ─────────────────────────────── */
  .dark{background:var(--ink);color:#EDEFF5}
.dark .lede{color:#9AA3B8}
.dark .eyebrow{color:#5FD3DE}
header.hero{padding:86px 0 74px;background:
     radial-gradient(1100px 460px at 78% -12%, rgba(14,154,167,.20), transparent 62%),
     radial-gradient(760px 380px at 8% 108%, rgba(79,99,245,.13), transparent 60%), var(--ink)}
.brandbar{display:flex;align-items:center;justify-content:space-between;gap:16px;padding:20px 0;flex-wrap:wrap}
.brand{display:inline-flex;align-items:center;gap:11px;font-weight:750;font-size:16px;color:#fff}
.brand .dot{width:26px;height:26px;border-radius:8px;background:linear-gradient(135deg,var(--teal),#4F63F5);display:grid;place-items:center;font-size:13px}
.navlinks{display:flex;gap:22px;font-size:14px;color:#9AA3B8;flex-wrap:wrap}
.navlinks a:hover{color:#fff}
.hero-grid{display:grid;grid-template-columns:1.05fr .95fr;gap:52px;align-items:center;margin-top:34px}
@media(max-width:900px){.hero-grid{grid-template-columns:1fr;gap:36px}}
.hero-actions{display:flex;gap:12px;flex-wrap:wrap;margin-top:28px}
/* La tarjeta del embarque: así se ve un dato real en el producto */
  .ship{background:linear-gradient(180deg,#16283A,#111E2C);border:1px solid rgba(255,255,255,.09);border-radius:var(--r);padding:20px;box-shadow:0 40px 90px -40px rgba(0,0,0,.8)}
.ship-top{display:flex;align-items:center;justify-content:space-between;gap:12px;padding-bottom:14px;border-bottom:1px solid rgba(255,255,255,.08)}
.ship-id{font-weight:750;font-size:15px}
.pill{font-size:11px;font-weight:700;padding:4px 10px;border-radius:999px;letter-spacing:.03em}
.pill.tr{background:rgba(14,154,167,.18);color:#6FDDE7;border:1px solid rgba(14,154,167,.35)}
.kv{display:grid;grid-template-columns:auto 1fr;gap:7px 18px;font-size:13px;padding:15px 0;border-bottom:1px solid rgba(255,255,255,.07)}
.kv dt{color:#939FB4}
.kv dd{margin:0;text-align:right;font-family:var(--mono);font-variant-numeric:tabular-nums;color:#DFE6F0}
.track{display:flex;gap:5px;margin-top:15px}
.track i{flex:1;height:5px;border-radius:3px;background:rgba(255,255,255,.11)}
.track i.on{background:var(--teal)}
.track-lab{display:flex;justify-content:space-between;font-size:11px;color:#939FB4;margin-top:8px}
.ship-note{margin-top:14px;font-size:12px;color:#939FB4;display:flex;gap:7px}
/* ── Bloques claros ─────────────────────────────────────────────────────────────────────── */
  section{padding:76px 0}
.grid3{display:grid;grid-template-columns:repeat(3,1fr);gap:20px}
.grid2{display:grid;grid-template-columns:repeat(2,1fr);gap:20px}
@media(max-width:880px){.grid3,.grid2{grid-template-columns:1fr}}
.card{background:var(--card);border:1px solid var(--line);border-radius:var(--r);padding:24px;display:grid;gap:11px;align-content:start}
.card .n{font-family:var(--mono);font-size:30px;font-weight:700;color:var(--teal);line-height:1;font-variant-numeric:tabular-nums}
.card p{color:var(--mut);font-size:14.5px}
.src{font-size:12px;color:var(--mut2)}
.feat{display:grid;grid-template-columns:repeat(2,1fr);gap:0;border:1px solid var(--line);border-radius:var(--r);overflow:hidden;background:var(--card)}
@media(max-width:880px){.feat{grid-template-columns:1fr}}
.feat > div{padding:26px;border-right:1px solid var(--line);border-bottom:1px solid var(--line)}
.feat > div:nth-child(2n){border-right:0}
.feat h3{display:flex;align-items:center;gap:10px;margin-bottom:9px}
.feat h3 span{width:30px;height:30px;border-radius:9px;background:var(--teal-soft);display:grid;place-items:center;font-size:15px;flex:none}
.feat p{color:var(--mut);font-size:14.5px}
.feat ul{margin:11px 0 0;padding-left:18px;color:var(--mut);font-size:14px;display:grid;gap:5px}
.split{display:grid;grid-template-columns:1fr 1fr;gap:44px;align-items:center}
@media(max-width:900px){.split{grid-template-columns:1fr;gap:30px}}
.docs{background:var(--card);border:1px solid var(--line);border-radius:var(--r);overflow:hidden}
.docs .row{display:flex;align-items:center;justify-content:space-between;gap:14px;padding:13px 18px;border-bottom:1px solid var(--line2);font-size:14px}
.docs .row:last-child{border-bottom:0}
.docs .row b{font-weight:600}
.docs .row .id{font-family:var(--mono);font-size:12.5px;color:var(--mut2)}
.st{font-size:11px;font-weight:700;padding:3px 9px;border-radius:999px;white-space:nowrap}
.st.ok{background:var(--em-soft);color:#087f56}
.st.rev{background:var(--amber-soft);color:#9c5c04}
.st.no{background:#FDE8E6;color:#B4342A}
.quote{border-left:3px solid var(--teal);padding:4px 0 4px 22px;font-size:18px;line-height:1.5;max-width:60ch}
form{display:grid;gap:13px;max-width:460px}
label{font-size:13px;font-weight:650;color:#C8D0E0}
input,textarea{width:100%;padding:12px 14px;border-radius:11px;border:1px solid rgba(255,255,255,.16);background:rgba(255,255,255,.05);color:#fff;font:inherit;font-size:15px}
input::placeholder,textarea::placeholder{color:#8894AA}
input:focus,textarea:focus{outline:2px solid var(--teal);outline-offset:1px;border-color:transparent}
@media(prefers-reduced-motion:no-preference){.cta{transition:background .15s,transform .15s}.cta:active{transform:translateY(1px)}}

/* La vertical de carga TIÑE el .cta de base.css en vez de redefinirlo. Se perdió al mover el CSS
   y la página quedó con el azul de la casa: el color es lo que la distingue de las otras verticales. */
.v-carga .cta{background:var(--teal)}
.v-carga .cta:hover{background:#0B8590}
.v-carga .cta.ghost{background:transparent;color:#DCE9EC;border:1px solid rgba(255,255,255,.22)}
.v-carga .cta.ghost:hover{background:rgba(255,255,255,.07)}

/* ── El portafolio de la casa (index) ─────────────────────────────────────────────────────────
   Ocho tarjetas, una por producto, cada una con su estado. Se añadió el 13-ago: hasta entonces la
   vitrina solo publicaba módulos y servicios, y por eso parecía ngbalance con accesorios. */
.prods{display:grid;grid-template-columns:repeat(auto-fill,minmax(268px,1fr));gap:18px}
.prod{background:var(--card);border:1px solid var(--line);border-radius:var(--r);padding:22px;display:grid;gap:9px;align-content:start}
.prod .fila{display:flex;align-items:baseline;justify-content:space-between;gap:12px}
.prod h3{font-size:18px;font-weight:740;margin:0}
.prod p{color:var(--mut);font-size:14.5px;margin:0}
.prod .para{color:var(--mut2);font-size:13px;border-top:1px solid var(--line2);padding-top:9px;margin-top:2px}
.prod .mas{color:var(--acc);font-weight:650;font-size:14px;margin-top:2px}
.prod .mas:hover{text-decoration:underline}

/* ── MAX, la interfaz comercial (18-ago) ──────────────────────────────────────────────────────
   Max dejó de ser una sección para ser el sitio: vive en el hero (primer viewport) y se queda
   flotando en todas las páginas. Estilos del lanzador, del panel y de las rutas rápidas. */
.hero-max{display:grid;grid-template-columns:1.02fr .98fr;gap:46px;align-items:start;margin-top:30px}
.hero-max .chatbox{margin:0;max-width:none}
@media(max-width:900px){.hero-max{grid-template-columns:1fr;gap:30px}}

/* Rutas rápidas: el visitante se reconoce en una frase y con eso arranca la conversación. */
.rutas{display:flex;flex-wrap:wrap;gap:9px;margin:22px 0 0}
.rutas button{background:rgba(255,255,255,.07);border:1px solid rgba(255,255,255,.18);color:#DCE0F2;
  font:inherit;font-size:13.5px;font-weight:650;padding:9px 15px;border-radius:999px;cursor:pointer;transition:.15s}
.rutas button:hover{background:rgba(169,181,255,.18);border-color:rgba(169,181,255,.5);color:#fff}
.rutas .lbl{font-size:12.5px;color:#8B90AE;align-self:center;margin-right:2px}

.max-fab{position:fixed;right:20px;bottom:20px;z-index:40;display:flex;align-items:center;gap:10px;
  background:var(--acc);color:#fff;border:0;border-radius:999px;padding:11px 18px 11px 11px;cursor:pointer;
  font:inherit;font-weight:730;font-size:14.5px;box-shadow:0 14px 34px -12px rgba(10,12,20,.6)}
.max-fab:hover{background:var(--acc-d)}
.max-fab.oculto{display:none}
.max-fab .av{width:30px;height:30px;border-radius:50%;background:conic-gradient(from 140deg,#fff,#C9D2FF,#fff);
  color:#0A0C14;display:grid;place-items:center;font-weight:850;font-size:14px}
@media(max-width:520px){.max-fab .tx{display:none}.max-fab{padding:11px}}

.max-panel{position:fixed;right:20px;bottom:20px;z-index:41;width:min(380px,calc(100vw - 40px))}
.max-panel .chatbox{max-width:none;margin:0}
.max-panel .chat-body{max-height:min(52vh,380px);min-height:200px}
.chat-top .x{margin-left:auto;background:none;border:0;font-size:22px;line-height:1;color:var(--mut2);cursor:pointer;padding:0 4px}
.chat-top .x:hover{color:var(--ink)}

/* Tres estados, tres colores — los de arriba (.live/.beta/.dev) valen tal cual. Lo que cambió es
   lo que DICEN: «Disponible hoy» / «Piloto y acceso anticipado» / «Próximamente». */

/* LA DEMO VIVA — el único enlace del sitio que lleva a software funcionando de verdad
   (ngbalance-demo). Se distingue de los demás porque no es "leer más": es "verlo". El punto
   late para que se lea como estado, no como adorno; con reduced-motion se queda quieto. */
.prod .demo-viva{display:inline-flex;align-items:center;gap:7px;color:var(--em);font-weight:750}
.prod .demo-viva::before{content:"";width:7px;height:7px;border-radius:50%;background:var(--em);
  box-shadow:0 0 0 0 var(--em);animation:latido 2.4s ease-out infinite}
.prod .demo-viva:hover{text-decoration:underline}
.prod .demo-viva ~ .link{margin-left:14px}
@keyframes latido{0%{box-shadow:0 0 0 0 rgba(15,169,116,.55)}70%{box-shadow:0 0 0 7px rgba(15,169,116,0)}100%{box-shadow:0 0 0 0 rgba(15,169,116,0)}}
@media (prefers-reduced-motion:reduce){.prod .demo-viva::before{animation:none}}

/* ── LO QUE EXISTE ─────────────────────────────────────────────────────────────────────────────
   Una lista, no una rejilla de tarjetas. La rejilla era el folleto: ocho tarjetas con su icono,
   su párrafo y su precio, y el visitante leyéndose el catálogo en vez de contarle su problema a
   Max. Aquí cada cosa ocupa una línea con su estado delante, para que se lea de un vistazo y se
   vuelva al chat. Sin precio: no hay ninguno aprobado para publicar. */
.existe{list-style:none;margin:0;padding:0;display:grid;gap:10px}
.existe li{display:flex;align-items:baseline;gap:14px;flex-wrap:wrap;
  background:var(--card);border:1px solid var(--line);border-radius:var(--r-s);padding:13px 18px}
.existe li b{font-size:15.5px;letter-spacing:-.01em}
.existe li .q{color:var(--mut);font-size:14px;flex:1 1 320px;min-width:0}
.existe li .status{flex:0 0 auto;min-width:132px}
@media (max-width:620px){.existe li .status{min-width:0}}

/* ── LA VOZ DE MAX ─────────────────────────────────────────────────────────────────────────────
   Voz y texto son DOS ENTRADAS A LO MISMO, no dos productos: el bloque va pegado al chat de Max
   (o a las rutas rápidas en las verticales), nunca como una sección aparte.
   El aviso de grabación va PRIMERO y siempre visible — se lee antes de pulsar, no después.
   Lo pinta `assets/voz.js`; el widget en sí lo dibuja ElevenLabs y se coloca solo. */
.voz{margin-top:18px;border-top:1px solid rgba(255,255,255,.14);padding-top:14px}
.voz-aviso{margin:0 0 10px;font-size:12.5px;line-height:1.5;color:#9DA3C4}
.voz-acciones{display:flex;flex-wrap:wrap;gap:9px;align-items:center}
.voz-btn{background:rgba(169,181,255,.16);border:1px solid rgba(169,181,255,.45);color:#EDEFFB;
  font:inherit;font-size:13.5px;font-weight:700;padding:9px 16px;border-radius:999px;cursor:pointer;transition:.15s}
.voz-btn:hover{background:rgba(169,181,255,.3);color:#fff}
.voz-texto{background:none;border:0;color:#A9B5FF;font:inherit;font-size:13px;font-weight:650;
  text-decoration:underline;text-underline-offset:3px;cursor:pointer;padding:9px 2px}
.voz-texto:hover{color:#fff}
.voz-esperando{font-size:13px;color:#8B90AE}
/* En la portada el bloque cuelga de la caja del chat, que es blanca: ahí el texto claro no se lee. */
.hero-max .voz{border-top-color:var(--line);background:var(--card);border:1px solid var(--line);
  border-radius:0 0 18px 18px;border-top:0;margin-top:-1px;padding:14px 18px 16px}
.hero-max .voz-aviso{color:var(--mut)}
.hero-max .voz-btn{background:var(--acc-soft);border-color:rgba(79,99,245,.35);color:var(--acc-d)}
.hero-max .voz-btn:hover{background:#DCE1FD;color:var(--acc-d)}
.hero-max .voz-texto{color:var(--acc)}
.hero-max .voz-texto:hover{color:var(--acc-d)}
.hero-max .voz-esperando{color:var(--mut2)}
/* El widget de ElevenLabs se coloca abajo a la derecha, justo donde vive el botón de Max.
   Se le sube al de Max para que no se pisen: dos puertas a la misma conversación, no un montón. */
elevenlabs-convai{z-index:39}
body:has(elevenlabs-convai) .max-fab{bottom:96px}
body:has(elevenlabs-convai) .max-panel{bottom:96px}
