/* Fuentes servidas desde el propio sitio: ninguna petición a Google (aviso de privacidad) */
@font-face{font-family:'Inter';font-style:normal;font-weight:400;font-display:swap;src:url('f-inter-latin-ext.a28eb6d3.woff2') format('woff2');unicode-range:U+0100-02BA, U+02BD-02C5, U+02C7-02CC, U+02CE-02D7, U+02DD-02FF, U+0304, U+0308, U+0329, U+1D00-1DBF, U+1E00-1E9F, U+1EF2-1EFF, U+2020, U+20A0-20AB, U+20AD-20C4, U+2113, U+2C60-2C7F, U+A720-A7FF}
@font-face{font-family:'Inter';font-style:normal;font-weight:400;font-display:swap;src:url('f-inter-latin.c9407645.woff2') format('woff2');unicode-range:U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+0304, U+0308, U+0329, U+2000-206F, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD}
@font-face{font-family:'Inter';font-style:normal;font-weight:500;font-display:swap;src:url('f-inter-latin-ext.a28eb6d3.woff2') format('woff2');unicode-range:U+0100-02BA, U+02BD-02C5, U+02C7-02CC, U+02CE-02D7, U+02DD-02FF, U+0304, U+0308, U+0329, U+1D00-1DBF, U+1E00-1E9F, U+1EF2-1EFF, U+2020, U+20A0-20AB, U+20AD-20C4, U+2113, U+2C60-2C7F, U+A720-A7FF}
@font-face{font-family:'Inter';font-style:normal;font-weight:500;font-display:swap;src:url('f-inter-latin.c9407645.woff2') format('woff2');unicode-range:U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+0304, U+0308, U+0329, U+2000-206F, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD}
@font-face{font-family:'Inter';font-style:normal;font-weight:600;font-display:swap;src:url('f-inter-latin-ext.a28eb6d3.woff2') format('woff2');unicode-range:U+0100-02BA, U+02BD-02C5, U+02C7-02CC, U+02CE-02D7, U+02DD-02FF, U+0304, U+0308, U+0329, U+1D00-1DBF, U+1E00-1E9F, U+1EF2-1EFF, U+2020, U+20A0-20AB, U+20AD-20C4, U+2113, U+2C60-2C7F, U+A720-A7FF}
@font-face{font-family:'Inter';font-style:normal;font-weight:600;font-display:swap;src:url('f-inter-latin.c9407645.woff2') format('woff2');unicode-range:U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+0304, U+0308, U+0329, U+2000-206F, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD}
@font-face{font-family:'Inter Tight';font-style:normal;font-weight:500;font-display:swap;src:url('f-intertight-latin-ext.3c299662.woff2') format('woff2');unicode-range:U+0100-02BA, U+02BD-02C5, U+02C7-02CC, U+02CE-02D7, U+02DD-02FF, U+0304, U+0308, U+0329, U+1D00-1DBF, U+1E00-1E9F, U+1EF2-1EFF, U+2020, U+20A0-20AB, U+20AD-20C4, U+2113, U+2C60-2C7F, U+A720-A7FF}
@font-face{font-family:'Inter Tight';font-style:normal;font-weight:500;font-display:swap;src:url('f-intertight-latin.83d548cd.woff2') format('woff2');unicode-range:U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+0304, U+0308, U+0329, U+2000-206F, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD}
@font-face{font-family:'Inter Tight';font-style:normal;font-weight:600;font-display:swap;src:url('f-intertight-latin-ext.3c299662.woff2') format('woff2');unicode-range:U+0100-02BA, U+02BD-02C5, U+02C7-02CC, U+02CE-02D7, U+02DD-02FF, U+0304, U+0308, U+0329, U+1D00-1DBF, U+1E00-1E9F, U+1EF2-1EFF, U+2020, U+20A0-20AB, U+20AD-20C4, U+2113, U+2C60-2C7F, U+A720-A7FF}
@font-face{font-family:'Inter Tight';font-style:normal;font-weight:600;font-display:swap;src:url('f-intertight-latin.83d548cd.woff2') format('woff2');unicode-range:U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+0304, U+0308, U+0329, U+2000-206F, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD}
@font-face{font-family:'Inter Tight';font-style:normal;font-weight:700;font-display:swap;src:url('f-intertight-latin-ext.3c299662.woff2') format('woff2');unicode-range:U+0100-02BA, U+02BD-02C5, U+02C7-02CC, U+02CE-02D7, U+02DD-02FF, U+0304, U+0308, U+0329, U+1D00-1DBF, U+1E00-1E9F, U+1EF2-1EFF, U+2020, U+20A0-20AB, U+20AD-20C4, U+2113, U+2C60-2C7F, U+A720-A7FF}
@font-face{font-family:'Inter Tight';font-style:normal;font-weight:700;font-display:swap;src:url('f-intertight-latin.83d548cd.woff2') format('woff2');unicode-range:U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+0304, U+0308, U+0329, U+2000-206F, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD}
@font-face{font-family:'JetBrains Mono';font-style:normal;font-weight:400;font-display:swap;src:url('f-jetbrainsmono-latin-ext.9c38cb2d.woff2') format('woff2');unicode-range:U+0100-02BA, U+02BD-02C5, U+02C7-02CC, U+02CE-02D7, U+02DD-02FF, U+0304, U+0308, U+0329, U+1D00-1DBF, U+1E00-1E9F, U+1EF2-1EFF, U+2020, U+20A0-20AB, U+20AD-20C4, U+2113, U+2C60-2C7F, U+A720-A7FF}
@font-face{font-family:'JetBrains Mono';font-style:normal;font-weight:400;font-display:swap;src:url('f-jetbrainsmono-latin.2c32b9b3.woff2') format('woff2');unicode-range:U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+0304, U+0308, U+0329, U+2000-206F, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD}
@font-face{font-family:'JetBrains Mono';font-style:normal;font-weight:500;font-display:swap;src:url('f-jetbrainsmono-latin-ext.9c38cb2d.woff2') format('woff2');unicode-range:U+0100-02BA, U+02BD-02C5, U+02C7-02CC, U+02CE-02D7, U+02DD-02FF, U+0304, U+0308, U+0329, U+1D00-1DBF, U+1E00-1E9F, U+1EF2-1EFF, U+2020, U+20A0-20AB, U+20AD-20C4, U+2113, U+2C60-2C7F, U+A720-A7FF}
@font-face{font-family:'JetBrains Mono';font-style:normal;font-weight:500;font-display:swap;src:url('f-jetbrainsmono-latin.2c32b9b3.woff2') format('woff2');unicode-range:U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+0304, U+0308, U+0329, U+2000-206F, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD}

:root{
    /* página clara; la consola conserva su propio tema oscuro */
    --bg:#F7F7F3;
    --bg2:#FFFFFF;
    --txt:#0F1115;
    --dim:#5C6270;
    --dim2:#6B7280;   /* 4.5:1 sobre --bg (antes #9AA0AC = 2.44:1, ilegible) */
    --hair:rgba(15,20,40,.09);
    --hair2:rgba(15,20,40,.16);
    --navy:#0E2455;
    --blue:#2E5BFF;
    --blue-hi:#87A5FF;
    /* --navy y --blue son colores de marca: no cambian con el tema. Cuando se
       usan como TEXTO hay que pasar por estos, que sí giran en oscuro. */
    --acento-txt:#0E2455;   /* marino  → lima  */
    --info-txt:#1F44CC;     /* azul    → azul claro */
    /* Un solo color de marca. Sin segundo acento, la jerarquía se gana por
       INVERSIÓN: lo importante va en marino sólido con letra papel, lo
       secundario va en papel con filete marino. */
    --papel:#F7F7F3;
    --glow:rgba(46,91,255,.35);
    --sombra-navy:rgba(14,36,85,.28);
    --white:#FFFFFF;
    --nav-bg:rgba(247,247,243,.75);
    --stage1:#EBEFF8;
    --stage2:#F1EFE7;
    --ok:#1FA35C;
    --wa:#25D366;
    /* Tokens de la consola. Eran oscuros (ventana de producto flotando en
       contraste). En el mundo de la etiqueta el objeto oscuro se leía como
       ajeno, así que la consola pasa a papel y la estructura la carga el
       marino, igual que los campos tabulados de arriba. */
    --c-bg:#FFFFFF;
    --c-hair:#E4E6EA;      /* filete gris neutro, no marino translúcido */
    --c-txt:#111318;
    --c-dim:#565C66;
    --c-dim2:#767C87;
    /* Grafitos de producto: la ventana no lleva el color de la marca adentro.
       El marino es de la PÁGINA; adentro de la consola manda el gris, como en
       cualquier software serio. */
    /* Tres tonos que NO se repiten entre sí, para que cada capa se lea
       aparte: la barra de arriba es la más clara, el dato es el medio. */
    --c-chrome:#EDEEF1;    /* barra de título: gris muy claro */
    --c-chrome-txt:#3C424C;
    --c-chrome-line:#DCDEE4;
    --c-fill:#5B6472;      /* el dato: barras, avatar, burbuja del agente */
    --c-fill2:#CDD1D8;     /* el mismo dato, en reposo */
    --c-panel:#FAFAFB;     /* fondo de tarjeta */
    /* Semáforo financiero. Adentro el color sólo aparece cuando SIGNIFICA algo:
       verde bien, ámbar atención, rojo mal. Nunca decorativo. */
    --c-ok:#0E7A3C;
    --c-warn:#A96A05;
    --c-bad:#B3261E;
    /* Inter Tight para titulares y cifras. Una sola familia manda el peso
       (Inter Tight), otra el texto corrido (Inter) y otra el dato crudo
       (JetBrains Mono). Space Grotesk salió: era neutral pero plana en
       tamaño grande y no levantaba la voz. */
    --disp:"Inter Tight",Inter,sans-serif;
    --body:"Inter",-apple-system,sans-serif;
    --mono:"JetBrains Mono",ui-monospace,monospace;
  }
  *{box-sizing:border-box;margin:0;padding:0}
  html{scroll-behavior:smooth}
  body{
    font-family:var(--body);background:var(--bg);color:var(--txt);
    -webkit-font-smoothing:antialiased;line-height:1.6;overflow-x:hidden;
  }
  ::selection{background:var(--blue);color:#fff}
  .wrap{max-width:1240px;width:100%;margin:0 auto;padding:0 32px} /* width:100%: dentro de flex-column, los margin auto encogen el wrap */
  a{color:inherit;text-decoration:none}
  /* etiqueta que sólo leen los lectores de pantalla */
  .sr-only{
    position:absolute;width:1px;height:1px;padding:0;margin:-1px;
    overflow:hidden;clip:rect(0 0 0 0);white-space:nowrap;border:0;
  }

  /* La retícula de fondo (.grid-bg) se retiró el 21 sep 2026: una malla de
     110px con máscara radial en el hero. Se leía como hoja de cuaderno y le
     quitaba limpieza a la portada. Para devolverla: este bloque más un
     <div class="grid-bg"></div> al abrir el <body> de cada página.
       position:fixed; inset:0; z-index:0; pointer-events:none;
       background-image: dos linear-gradient de 1px con var(--hair);
       background-size:110px 110px; opacity:.35;
       mask-image: radial-gradient(ellipse 90% 70% at 50% 0%, #000 0%, transparent 75%) */

  /* .label se retiró: era el eyebrow encima de cada titular, puro eco */

  h1,h2,h3{font-family:var(--disp);font-weight:700;letter-spacing:-.038em;line-height:1.02;color:var(--txt)}
  h1{font-size:clamp(2.6rem,5.8vw,4.6rem)}
  h2{font-size:clamp(2rem,4.4vw,3.3rem)}
  /* En construimos y calculadora el titular de apertura es el h1 de la
     página, pero visualmente es un titular de sección: mismo tamaño que
     un h2, para que el cambio de etiqueta no mueva el diseño. */
  .sec-head h1{font-size:clamp(2rem,4.4vw,3.3rem)}

  .btn{
    display:inline-flex;align-items:center;justify-content:center;gap:10px;
    padding:16px 30px;border-radius:99px;font-weight:600;font-size:.93rem;
    border:1px solid transparent;cursor:pointer;transition:all .25s cubic-bezier(.3,.7,.3,1);
    font-family:var(--body);background:transparent;
  }
  .btn-solid{background:var(--navy);color:var(--papel)}
  /* en el nav el sólido ya lo usa el destacado, así que el CTA se invierte a
     contorno: con un color, la jerarquía es lleno contra filete */
  .nav-r .btn-solid{background:transparent;color:var(--navy);border:2px solid var(--navy)}
  .nav-r .btn-solid:hover{background:var(--navy);color:var(--papel);box-shadow:none;transform:none}
  .btn-solid:hover{transform:translateY(-2px);box-shadow:0 18px 40px -12px rgba(14,36,85,.45)}
  .btn-blue{background:var(--blue);color:#fff;box-shadow:0 10px 34px -10px var(--glow)}
  .btn-blue:hover{transform:translateY(-2px);box-shadow:0 18px 46px -10px var(--glow)}
  .btn-lime{background:var(--navy);color:var(--papel);box-shadow:0 10px 30px -14px var(--sombra-navy)}
  .btn-lime:hover{transform:translateY(-2px);box-shadow:0 18px 40px -14px var(--sombra-navy)}
  /* En la banda de cierre el fondo YA es marino, así que un botón marino
     desaparece (contraste 1:1). Con un solo color, sobre fondo oscuro la
     jerarquía se invierte: papel lleno con letra marino. */
  .final .btn-lime{background:var(--papel);color:var(--navy);box-shadow:none}
  .final .btn-lime:hover{transform:translateY(-2px);box-shadow:0 16px 34px -14px rgba(0,0,0,.5)}
  .btn-hair{border-color:var(--hair2);color:var(--txt);background:var(--white)}
  .btn-hair:hover{border-color:var(--navy)}
  .btn-wa{background:var(--wa);color:#06301A}
  .btn-wa:hover{transform:translateY(-2px)}

  .rv{opacity:0;transform:translateY(30px);transition:opacity .8s ease,transform .8s cubic-bezier(.2,.7,.2,1)}
  .rv.in{opacity:1;transform:none}
  .d1{transition-delay:.08s}.d2{transition-delay:.16s}.d3{transition-delay:.24s}

  /* ---------- Nav ---------- */
  nav{
    position:fixed;top:0;left:0;right:0;z-index:90;
    background:var(--nav-bg);backdrop-filter:blur(20px) saturate(150%);
    border-bottom:1px solid var(--hair);
  }
  .nav-in{display:flex;align-items:center;justify-content:space-between;height:74px}
  /* logos originales: PNG transparentes con trazo marino, sin chip ni máscara */
  .brand{display:flex;align-items:center;gap:14px;perspective:600px}
  /* la X gira sobre su eje al tocarla y rebota al soltar */
  .brand .b-sym{
    height:29px;width:auto;display:block;transform-style:preserve-3d;
    transition:transform .75s cubic-bezier(.34,1.56,.64,1);
  }
  .brand:hover .b-sym{transform:rotateY(360deg) scale(1.12)}
  /* .spin: mismo giro disparado por clic o toque (en móvil no hay hover) */
  .brand .b-sym.spin{transform:rotateY(360deg) scale(1.12)}
  .brand:active .b-sym{transform:rotateY(360deg) scale(.92);transition-duration:.15s}
  .brand .b-word{
    height:29px;width:auto;display:block;
    transition:transform .5s cubic-bezier(.34,1.56,.64,1);
  }
  .brand:hover .b-word{transform:translateX(3px)}
  .nav-r{display:flex;align-items:center;gap:14px}
  .nav-r .btn{padding:11px 22px;font-size:.85rem}

  /* --- destacado: la única división visible en la barra --- */
  /* seis enlaces planos competían entre sí; ahora sólo esta ruta pide el clic
     y el resto vive en la hoja del menú */
  /* letras en lima sobre marino: el lima sobre blanco da 1.4:1 y no se lee;
     sobre el marino llega a 9:1 y además el neón resalta más */
  .nav-feat{
    display:inline-flex;align-items:center;gap:9px;
    padding:10px 18px 10px 15px;border-radius:999px;
    border:1px solid var(--navy);background:var(--navy);
    font-family:var(--body);font-size:.85rem;font-weight:600;
    color:var(--papel);letter-spacing:.005em;white-space:nowrap;
    transition:transform .25s cubic-bezier(.2,.7,.2,1),box-shadow .25s,background .25s;
  }
  .nav-feat i{
    width:7px;height:7px;border-radius:50%;background:var(--papel);
    flex:none;animation:featPulse 2.4s ease-out infinite;
  }
  @keyframes featPulse{
    0%  {box-shadow:0 0 0 0 rgba(247,247,243,.7)}
    70% {box-shadow:0 0 0 7px rgba(247,247,243,0)}
    100%{box-shadow:0 0 0 0 rgba(247,247,243,0)}
  }
  .nav-feat:hover{
    transform:translateY(-1px);
    box-shadow:0 14px 30px -14px rgba(14,36,85,.65),0 0 0 3px rgba(14,36,85,.18);
  }

  /* --- botón hamburguesa: dos trazos que se cruzan al abrir --- */
  .burger{
    width:42px;height:42px;border-radius:12px;flex:none;
    border:1px solid var(--hair2);background:var(--white);cursor:pointer;
    display:flex;flex-direction:column;align-items:center;justify-content:center;gap:5px;
    transition:border-color .2s,background .2s;
  }
  .burger:hover{border-color:var(--navy)}
  .burger i{
    display:block;width:17px;height:1.5px;border-radius:2px;background:var(--txt);
    transition:transform .3s cubic-bezier(.2,.7,.2,1),opacity .2s;
  }
  .burger[aria-expanded="true"] i:first-child{transform:translateY(3.25px) rotate(45deg)}
  .burger[aria-expanded="true"] i:last-child {transform:translateY(-3.25px) rotate(-45deg)}

  /* --- hoja del menú --- */
  .menu-veil{
    position:fixed;inset:74px 0 0;z-index:88;background:rgba(10,11,20,.28);
    backdrop-filter:blur(2px);opacity:0;pointer-events:none;transition:opacity .3s;
  }
  .menu-veil.open{opacity:1;pointer-events:auto}
  .menu-sheet{
    /* mismo borde derecho que .wrap (1240 máx. + 32 de padding) para que caiga bajo el botón */
    /* 100% (no 100vw) para que la barra de scroll no la desalinee */
    position:fixed;z-index:89;top:74px;right:max(32px,calc((100% - 1240px)/2 + 32px));
    width:min(380px,calc(100vw - 32px));
    background:var(--bg2);border:1px solid var(--hair);border-radius:20px;
    box-shadow:0 40px 90px -30px rgba(10,20,50,.35),0 2px 6px rgba(10,20,50,.06);
    padding:10px;margin-top:10px;
    opacity:0;transform:translateY(-10px) scale(.985);pointer-events:none;
    transition:opacity .28s,transform .28s cubic-bezier(.2,.7,.2,1);
  }
  .menu-sheet.open{opacity:1;transform:none;pointer-events:auto}
  .menu-sheet a{
    display:block;padding:13px 15px;border-radius:13px;
    transition:background .2s,transform .2s;
  }
  .menu-sheet a:hover{background:var(--bg);transform:translateX(3px)}
  .menu-sheet a b{
    display:block;font-family:var(--disp);font-size:.98rem;font-weight:600;
    color:var(--txt);letter-spacing:-.01em;
  }
  .menu-sheet a span{display:block;font-size:.82rem;color:var(--dim);margin-top:3px;line-height:1.45}
  .menu-sheet hr{border:0;border-top:1px solid var(--hair);margin:8px 15px}
  /* el destacado ya está en la barra: sólo aparece en la hoja cuando la barra lo esconde */
  .menu-sheet .ms-feat,.menu-sheet .ms-feat + hr{display:none}
  .ms-feat b::before{
    content:'';display:inline-block;width:7px;height:7px;border-radius:50%;
    background:var(--navy);margin-right:9px;vertical-align:middle;
  }
  .menu-sheet a[aria-current]{background:var(--bg)}
  .menu-sheet a[aria-current] b::after{content:' ·  aquí está';color:var(--dim2);font-weight:400;font-size:.8rem}
  /* firma del menú: marca arriba, descriptor abajo — no una línea suelta */
  .menu-foot{display:flex;align-items:center;gap:10px;padding:8px 15px 12px}
  .menu-foot img{height:18px;width:auto;flex:none;opacity:.9}
  .menu-foot span{display:block;font-size:.8rem;line-height:18px;color:var(--dim)}

  @media(max-width:520px){
    .brand{gap:9px}
    .brand .b-sym,.brand .b-word{height:20px}
    /* a 375 px el logo y el CTA se tocaban: se recorta el respiro del nav */
    nav .wrap{padding:0 16px}
    .nav-r{gap:8px}
    .nav-r .btn{padding:9px 13px;font-size:.75rem;white-space:nowrap}
    .burger{width:38px;height:38px;border-radius:11px}
    /* en móvil el destacado no cabe junto al CTA: pasa a encabezar la hoja */
    .nav-feat{display:none}
    .menu-sheet .ms-feat,.menu-sheet .ms-feat + hr{display:block}
    .menu-sheet{right:16px;left:16px;width:auto}
  }


  /* ---------- Hero ---------- */
  .hero{position:relative;padding:170px 0 0;text-align:center;overflow:hidden;z-index:1}
  .aurora{
    position:absolute;inset:-20% -10%;z-index:-1;pointer-events:none;filter:blur(80px);opacity:.35;
    background:
      radial-gradient(34% 26% at 50% 12%, rgba(46,91,255,.28) 0%, transparent 100%),
      radial-gradient(26% 22% at 18% 30%, rgba(14,36,85,.14) 0%, transparent 100%),
      radial-gradient(26% 22% at 84% 26%, rgba(90,130,255,.16) 0%, transparent 100%);
    animation:drift 16s ease-in-out infinite alternate;
  }
  @keyframes drift{from{transform:translate3d(0,0,0) scale(1)}to{transform:translate3d(-2%,3%,0) scale(1.06)}}
  /* ícono APX en 3D como FONDO del hero: gigante, fantasmal, girando —
     y el scroll le da la vuelta completa (360°) */
  .hero > .wrap{position:relative;z-index:1}
  .line{display:block;overflow:hidden}
  .line > span{display:block;transform:translateY(110%);animation:rise 1s cubic-bezier(.2,.75,.2,1) forwards}
  .line:nth-child(2) > span{animation-delay:.12s}
  @keyframes rise{to{transform:none}}
  h1 .blue{
    background:linear-gradient(95deg,var(--navy) 0%,var(--blue) 100%);
    -webkit-background-clip:text;background-clip:text;color:transparent;
  }
  /* marcador lima: gradiente de fondo + box-decoration-break para que
     pinte en cada línea si el titular se parte en pantallas chicas */
  .hero-sub{
    margin:28px auto 0;max-width:36em;color:var(--dim);font-size:1.08rem;
    opacity:0;animation:fade 1s ease .5s forwards;
  }
  @keyframes fade{to{opacity:1}}
  .hero-cta{display:flex;gap:14px;margin-top:38px;justify-content:center;flex-wrap:wrap;opacity:0;animation:fade 1s ease .65s forwards}

  /* ---------- Consola (ventana oscura sobre página clara) ---------- */
  /* escenario: tapete con malla de degradados en colores de marca (estilo Linear/Vercel).
     Aquí entraría una foto real de operación del cliente, si algún día se autoriza. */
  .stage{
    position:relative;overflow:hidden;
    background:linear-gradient(150deg, var(--stage1) 0%, var(--stage2) 100%);
    /* el tapete de foto se ve más: la industria detrás del producto */
    border:3px solid var(--navy);border-radius:0;padding:clamp(22px,4.4vw,64px);
  }
  .stage::before{
    content:"";position:absolute;inset:-30%;pointer-events:none;z-index:0;
    background:
      radial-gradient(40% 46% at 10% 14%, rgba(46,91,255,.40) 0%, transparent 66%),
      radial-gradient(36% 42% at 90% 22%, rgba(46,91,255,.16) 0%, transparent 64%),
      radial-gradient(50% 54% at 70% 94%, rgba(14,36,85,.34) 0%, transparent 68%);
    filter:blur(30px);
  }
  /* textura fina de retícula: da sensación de plano técnico, no de gradiente vacío */
  .stage::after{
    content:"";position:absolute;inset:0;pointer-events:none;z-index:0;
    background-image:
      linear-gradient(to right, rgba(14,36,85,.055) 1px, transparent 1px),
      linear-gradient(to bottom, rgba(14,36,85,.055) 1px, transparent 1px);
    background-size:34px 34px;
    -webkit-mask-image:radial-gradient(ellipse 80% 70% at 50% 50%, #000 0%, transparent 78%);
            mask-image:radial-gradient(ellipse 80% 70% at 50% 50%, #000 0%, transparent 78%);
  }
  .stage > *{position:relative;z-index:1}

  /* ---- foto de operación real de fondo ----
     Si el archivo no existe, el degradado de arriba se ve igual (degrada sin romper).
     Las fotos van en assets/ con estos nombres. */
  .stage.foto{background-color:#0A0C12}
  /* Si el archivo no existe, se ve el degradado y nada se rompe. */
  /* WebP, no JPG (21 sep 2026): mismas fotos a la mitad del peso, de 1,073 KB
     a 521 KB. Van detrás de un velo marino, así que aguantan la compresión
     sin que se note. Los JPG originales siguen en assets/ como fuente, pero
     ya no se publican. Si un navegador no soportara WebP, .stage.foto tiene
     su color de fondo y el degradado: degrada sin romperse. */
  .stage.f-flujo{--foto:url('foto-flujo.webp')}      /* tubos de luz   · consola del hero */
  .stage.f-cruce{--foto:url('foto-cruce.webp')}      /* cruce peatonal · 01 front office  */
  .stage.f-domo{--foto:url('foto-domo.webp')}        /* cúpula         · 02 back office   */
  .stage.f-curvas{--foto:url('foto-curvas.webp')}    /* nervaduras     · 03 inteligencia  */
  /* Las fotos de reserva (puerto, ductos, esquina, patio) siguen en assets/
     pero sin regla aquí: una clase que ningún HTML usa es código muerto, y
     hacer-publicar.py tampoco sube esas imágenes. Para volver a usar alguna,
     agregue su regla .stage.f-<nombre> y la clase en el HTML. */
  .stage.foto::before{
    background-image:var(--foto);
    background-size:cover;background-position:center;
    filter:none;inset:0;opacity:1;
  }
  /* velo de marca sobre la foto: mantiene contraste y la vuelve "de APX" */
  .stage.foto::after{
    background-image:
      linear-gradient(150deg, rgba(14,36,85,.58) 0%, rgba(10,12,18,.40) 55%, rgba(46,91,255,.30) 100%),
      linear-gradient(to right, rgba(255,255,255,.05) 1px, transparent 1px),
      linear-gradient(to bottom, rgba(255,255,255,.05) 1px, transparent 1px);
    background-size:cover, 34px 34px, 34px 34px;
    -webkit-mask-image:none;mask-image:none;
  }
  .console-frame{
    margin:76px auto 0;max-width:1244px;position:relative;text-align:left;
    opacity:0;animation:fade 1.1s ease .85s forwards;padding:0 32px;
  }
  /* sin esquinas redondeadas ni sombra difusa: en el mundo de la etiqueta
     el filete es la profundidad */
  .console{
    background:var(--c-bg);border:0;border-radius:0;overflow:hidden;
    box-shadow:12px 12px 0 rgba(17,19,24,.13);
  }
  /* franja de rótulo, no ventana de macOS: la consola es un instrumento
     dentro de la etiqueta, no una app flotando */
  /* franja marino: todo lo de adentro hereda papel. Antes heredaba el negro
     de la página y el texto desaparecía sobre el fondo oscuro. */
  .c-bar{color:var(--c-chrome-txt);
    display:grid;grid-template-columns:1fr auto 1fr;align-items:center;gap:10px;padding:12px 18px;
    border-bottom:1px solid var(--c-chrome-line);background:var(--c-chrome);
  }
  .c-bar .tl{display:flex;gap:7px}
  .c-bar .tl i{width:11px;height:11px;border-radius:0}
  .c-bar .tl i:first-child{background:#FF5F57}.c-bar .tl i:nth-child(2){background:#FEBC2E}.c-bar .tl i:nth-child(3){background:#28C840}
  /* min-width:0 para que una celda de grid pueda encogerse; sin eso el
     título empujaba el marco y se salía de la ventana */
  .c-bar b{font-family:var(--mono);font-weight:600;font-size:.8rem;letter-spacing:.16em;
           text-transform:uppercase;color:var(--c-chrome-txt);text-align:center;white-space:nowrap;
           min-width:0;overflow:hidden;text-overflow:ellipsis}
  /* el título de cada ventana vive sobre la franja marino, no sobre papel */
  .win .c-bar b,.win .c-bar span{color:var(--c-chrome-txt)}
  /* La insignia de estado del marco se retiró el 21 sep 2026. Decía
     "EN VIVO" sobre datos inventados, que es una afirmación falsa, y
     ninguna etiqueta alternativa terminó de convencer. Sin insignia el
     sitio no afirma nada: sólo muestra una interfaz, que es lo que hace
     cualquier captura de producto. Los términos de uso cubren el carácter
     ilustrativo. El marco conserva sus tres columnas de rejilla, así que
     el título sigue centrado. */
  @keyframes pulse{0%,100%{opacity:1}50%{opacity:.3}}

  .c-grid{display:grid;grid-template-columns:1.05fr 1.15fr .95fr;min-height:430px}
  /* .c-grid .c-dash y no .c-dash a secas: la regla base vive más abajo en el archivo
     y con la misma especificidad le ganaba a esta, así que el tablero nunca se ocultaba */
  @media(max-width:960px){.c-grid{grid-template-columns:1fr 1fr}.c-grid .c-dash{display:none}}
  @media(max-width:640px){.c-grid{grid-template-columns:1fr}.c-wa{border-left:0!important;border-top:1px solid var(--c-hair)}}

  .c-tasks{padding:20px;border-right:1px solid var(--c-hair)}
  @media(max-width:640px){.c-tasks{border-right:0}}
  .c-h{
    font-family:var(--mono);font-size:.62rem;letter-spacing:.2em;color:var(--c-dim2);margin:6px 0 12px;
    display:flex;justify-content:space-between;align-items:center;
  }
  .c-h em{font-style:normal;color:var(--c-txt)}
  .task{
    display:flex;gap:11px;align-items:flex-start;padding:11px 12px;border:1px solid var(--c-hair);
    border-radius:10px;margin-bottom:8px;background:rgba(255,255,255,.015);animation:pop .4s ease both;
  }
  .task .meta{margin-left:auto;font-family:var(--mono);font-size:.62rem;color:#5C6270;flex-shrink:0;padding-left:8px}
  @keyframes pop{from{opacity:0;transform:translateY(8px)}to{opacity:1;transform:none}}
  .task .ico{flex-shrink:0;width:17px;height:17px;margin-top:2px}
  .task.run .ico{border:2px solid #E3E5EA;border-top-color:var(--c-fill);border-radius:50%;animation:spin 1s linear infinite}
  @keyframes spin{to{transform:rotate(360deg)}}
  .task.done .ico{color:var(--c-ok)}
  .task b{display:block;font-size:.82rem;font-weight:600;color:var(--c-txt);line-height:1.35}
  .task span{font-size:.72rem;color:var(--c-dim2);font-family:var(--mono)}

  .c-wa{border-right:1px solid var(--c-hair);display:flex;flex-direction:column;background:#0B141A}
  /* Bandeja de atención en papel. Antes imitaba WhatsApp (verde #005C4B,
     fondo #0B141A, palomitas azules): la marca de otro producto dentro de la
     suya, y encima el único objeto oscuro de la página. Ahora es una bandeja
     con la tipografía y el filete de APX. */
  .wa-top{
    display:flex;align-items:center;gap:12px;padding:14px 16px;
    background:#FAFAF8;border-bottom:1px solid var(--c-hair);color:var(--txt);
  }
  .wa-top .av{
    width:34px;height:34px;border-radius:0;background:var(--c-fill);
    display:flex;align-items:center;justify-content:center;font-size:.7rem;
    font-weight:700;color:var(--papel);font-family:var(--disp);letter-spacing:.02em;
  }
  .wa-top b{font-size:.86rem;color:var(--txt);display:block;line-height:1.25;font-weight:600}
  .wa-top span{font-size:.68rem;color:var(--c-dim);font-family:var(--mono)}
  .wa-body{flex:1;padding:18px 16px;display:flex;flex-direction:column;gap:10px;overflow:hidden;justify-content:flex-end}
  .wam{
    max-width:84%;padding:10px 13px;font-size:.79rem;line-height:1.5;
    animation:pop .35s ease both;position:relative;
  }
  .wam small{
    display:block;text-align:right;font-size:.6rem;margin-top:5px;font-family:var(--mono);
    letter-spacing:.04em;
  }
  /* el cliente: papel con filete, alineado a la izquierda */
  .wam.in{
    background:#FFFFFF;border:1px solid var(--c-hair);color:var(--txt);
    align-self:flex-start;
  }
  .wam.in small{color:var(--c-dim2)}
  /* el agente: marino sólido, alineado a la derecha. La jerarquía por
     inversión, igual que en el resto del sitio. */
  .wam.out{background:var(--c-fill);color:#F4F5F7;align-self:flex-end}
  .wam.out small{color:rgba(244,245,247,.78)}
  .wam.out small::after{content:" · entregado"}
  .wa-tag{
    align-self:center;font-family:var(--mono);font-size:.58rem;letter-spacing:.18em;
    color:var(--c-dim2);border-top:1px solid var(--c-hair);
    padding:9px 0 3px;margin-bottom:2px;width:100%;text-align:center;
  }

  /* panel de documento: el "editor" de APX, equivalente al panel de código de Cursor */
  .c-doc{display:flex;flex-direction:column;border-right:1px solid var(--c-hair);background:#FCFCFD;overflow:hidden}
  .doc-tabs{display:flex;border-bottom:1px solid var(--c-hair);background:#F1F2F5;flex-shrink:0;overflow-x:auto;scrollbar-width:none}
  .doc-tabs::-webkit-scrollbar{display:none}
  .doc-tabs{overflow:hidden}
  /* Las cuatro salían con "…": cuatro pestañas cortadas se leen como una
     interfaz rota. Se ajusta el tamaño al contenido en vez de repartir el
     ancho en partes iguales. */
  .doc-tabs span{
    font-family:var(--mono);font-size:.6rem;color:#5C6270;padding:10px 12px;
    border-right:1px solid var(--c-hair);white-space:nowrap;flex:0 0 auto;
  }
  .doc-tabs span.on{color:var(--c-txt);background:#FFFFFF;position:relative}
  .doc-tabs span.on::after{content:"";position:absolute;left:0;right:0;top:0;height:2px;background:var(--c-ok)}
  .doc-body{flex:1;padding:16px 18px;overflow:hidden;font-family:var(--mono);font-size:.7rem;line-height:1.85}
  .doc-body .row{display:flex;gap:10px;animation:pop .35s ease both}
  .doc-body .k{color:#5C6270;min-width:84px;flex-shrink:0}
  .doc-body .v{color:#1B2333}
  .doc-body .v.ok{color:var(--c-ok)}
  .doc-body .v.hi{color:var(--c-txt)}
  .doc-body hr{border:0;border-top:1px dashed var(--c-hair);margin:10px 0}
  .doc-foot{
    border-top:1px solid var(--c-hair);padding:11px 16px;display:flex;align-items:center;gap:10px;
    font-family:var(--mono);font-size:.63rem;color:#7A8296;flex-shrink:0;background:#F2F2EE;
  }
  .doc-foot .badge{color:#0E6B36}
  .doc-foot .right{margin-left:auto;color:#5C6272}

  /* panel de código con resaltado, estilo editor (patrón Cursor) */
  .code{
    flex:1;overflow:hidden;padding:14px 0 14px 0;font-family:var(--mono);
    font-size:.68rem;line-height:1.9;background:#FCFCFD;
  }
  .code .ln{display:flex;gap:14px;padding:0 16px;animation:pop .3s ease both;white-space:pre}
  .code .n{color:#A7AEBF;min-width:18px;text-align:right;flex-shrink:0;user-select:none}
  .code .c{color:#1A1D24;overflow:hidden;text-overflow:ellipsis}
  /* paleta de editor, la que ya conoce cualquiera que haya visto código:
     azul palabra clave, morado función, verde cadena, ámbar número */
  .code .kw{color:#1F44CC}   /* palabra clave */
  .code .fn{color:#7B3FA8}   /* función */
  .code .st{color:#10704A}   /* cadena */
  .code .nu{color:#A85B12}   /* número */
  .code .cm{color:#8A90A0;font-style:italic} /* comentario */
  .code .op{color:#5C6270}
  .code-cursor{display:inline-block;width:7px;height:.95em;background:var(--c-fill);vertical-align:-2px;animation:blink 1.1s steps(2) infinite}
  @keyframes blink{0%,50%{opacity:1}51%,100%{opacity:0}}

  .c-dash{padding:20px;display:flex;flex-direction:column;gap:14px}
  .d-card{border:1px solid var(--c-hair);border-radius:0;padding:16px;background:var(--c-panel)}
  .d-card .k{font-family:var(--mono);font-size:.6rem;letter-spacing:.18em;color:var(--c-dim2)}
  .d-card .v{font-family:var(--disp);font-size:1.7rem;font-weight:700;letter-spacing:-.03em;margin-top:6px;color:var(--c-txt)}
  .d-card .v em{font-style:normal;font-size:.8rem;color:var(--c-ok);margin-left:8px;font-family:var(--mono)}
  .bars{display:flex;gap:6px;align-items:flex-end;height:74px;margin-top:12px}
  /* barras en gris: en software financiero la barra es estructura, no marca.
     El color se reserva para el mes en curso, que sí significa algo. */
  .bars i{flex:1;background:var(--c-fill2);border-radius:0;transition:height 1.2s cubic-bezier(.3,.7,.3,1)}
  .bars i:last-child{background:var(--c-fill)}
  .d-foot{font-family:var(--mono);font-size:.62rem;color:var(--c-dim2);display:flex;justify-content:space-between}
  .d-foot b{color:var(--c-dim2);font-weight:500}
  /* la línea de presupuesto: contexto debajo de la cifra grande, porque un
     número solo no dice si el mes va bien */
  .d-sub{font-family:var(--mono);font-size:.65rem;color:var(--c-dim);margin-top:7px;letter-spacing:.01em}
  .d-sub b{color:var(--c-ok);font-weight:600}

  /* tabla de indicadores: renglones tabulados, como los lee un director en
     un estado de resultados, no tarjetas sueltas con un dato cada una */
  .fin{border:1px solid var(--c-hair);background:var(--c-panel);padding:4px 16px;flex:1;display:flex;flex-direction:column;justify-content:center}
  .fin-row{
    display:flex;align-items:baseline;justify-content:space-between;gap:12px;
    padding:13px 0;border-bottom:1px solid var(--c-hair);
  }
  .fin-row:last-child{border-bottom:0}
  .fin-row span{font-size:.76rem;color:var(--c-dim);letter-spacing:.005em}
  .fin-row b{
    font-family:var(--disp);font-size:1.02rem;font-weight:600;
    letter-spacing:-.015em;color:var(--c-txt);font-variant-numeric:tabular-nums;
    display:flex;align-items:baseline;gap:9px;
  }
  /* la variación al lado de la cifra, en el semáforo de siempre: verde si
     mejoró contra el mes pasado, rojo si empeoró, ámbar si hay que verlo */
  .fin-row em{
    font-style:normal;font-family:var(--mono);font-size:.66rem;font-weight:500;
    letter-spacing:.02em;
  }
  .fin-row em.up{color:var(--c-ok)}
  .fin-row em.dn{color:var(--c-bad)}
  .fin-row em.wr{color:var(--c-warn)}

  /* ---------- métricas ---------- */
  .stats{margin-top:0;border-top:1px solid var(--hair);display:grid;grid-template-columns:repeat(4,1fr)}
  @media(max-width:860px){.stats{grid-template-columns:1fr 1fr}}
  .stat{padding:34px 26px 40px;border-right:1px solid var(--hair);text-align:left}
  .stat:last-child{border-right:0}
  @media(max-width:860px){.stat:nth-child(2){border-right:0}.stat:nth-child(-n+2){border-bottom:1px solid var(--hair)}}
  .stat b{font-family:var(--disp);font-size:clamp(2rem,3.6vw,2.9rem);font-weight:700;letter-spacing:-.038em;display:block;line-height:1;color:var(--txt)}
  .stat b i{font-style:normal;color:var(--blue)}
  .stat span{display:block;margin-top:10px;font-size:.82rem;color:var(--dim);max-width:16em}

  section{position:relative;z-index:1}
  .sec{padding:130px 0}
  @media(max-width:800px){.sec{padding:80px 0}}
  .sec-head{margin-bottom:70px}

  /* ---------- Clientes ---------- */
  .clients{background:var(--white);color:var(--txt);padding:110px 0;border-top:1px solid var(--hair);border-bottom:1px solid var(--hair)}
  /* línea de confianza sobre los logos (patrón "Trusted by" de Cursor) */
  .clients h2{max-width:14em}
  .clients-sub{color:var(--dim);margin-top:18px;max-width:36em;font-size:1.02rem}
  /* logos de clientes: fila quieta y compacta; al clic se abre la ficha de la empresa */
  .cl-row{display:flex;justify-content:center;gap:24px;margin-top:56px;flex-wrap:wrap}
  .cl-tile{
    background:var(--white);border:1px solid var(--hair);border-radius:18px;
    padding:30px 52px 22px;cursor:pointer;font-family:inherit;
    display:flex;flex-direction:column;align-items:center;gap:16px;
    transition:transform .3s cubic-bezier(.3,.7,.3,1), box-shadow .3s, border-color .3s;
  }
  /* PNG planos pre-generados en el marino corporativo #0E2455 (pixel a pixel, sin filtros) */
  .cl-tile img{height:98px;object-fit:contain;display:block}
  @media(max-width:700px){.cl-tile{padding:20px 30px 16px}.cl-tile img{height:66px}}
  .cl-tile:hover{transform:translateY(-3px);box-shadow:0 20px 44px -26px rgba(14,36,85,.3);border-color:var(--navy)}
  .cl-tile.on{border-color:var(--navy)}
  /* invitación explícita al clic */
  .cl-tile .hint{
    font-family:var(--mono);font-size:.66rem;letter-spacing:.14em;text-transform:uppercase;
    color:var(--dim2);transition:color .2s ease;
  }
  .cl-tile:hover .hint,
  .cl-tile.on .hint{color:var(--acento-txt)}
  .cl-detail{
    max-width:720px;margin:0 auto;overflow:hidden;max-height:0;opacity:0;
    transition:max-height .45s ease, opacity .35s ease, margin-top .35s ease;
  }
  .cl-detail.open{max-height:460px;opacity:1;margin-top:26px}
  .cl-detail-in{background:var(--white);border:1px solid var(--hair);border-radius:16px;padding:30px 34px}
  /* el renglón de grupo: sitúa a la empresa antes de decir su nombre */
  .cl-grupo{
    display:block;font-family:var(--mono);font-size:.63rem;letter-spacing:.17em;
    text-transform:uppercase;color:var(--dim2);margin-bottom:11px;
  }
  .cl-detail-in h3{font-size:1.3rem;letter-spacing:-.02em;margin-bottom:10px}
  .cl-detail-in p{color:var(--dim);font-size:.95rem}
  /* lo que APX construyó: bloque de contenido, ya no una nota de pendiente */
  .cl-detail-in .todo{
    display:block;margin-top:18px;padding:16px 20px;
    background:var(--bg);border-left:3px solid var(--navy);border-radius:0;
    font-size:.92rem;line-height:1.6;color:var(--txt);
  }
  .cl-detail-in .todo b{
    display:block;font-family:var(--mono);font-size:.66rem;letter-spacing:.16em;
    text-transform:uppercase;color:var(--dim);margin-bottom:8px;font-weight:500;
  }
  .clients-note{
    margin-top:60px;padding-top:28px;border-top:1px solid var(--hair);
    display:flex;justify-content:space-between;gap:20px;flex-wrap:wrap;align-items:center;
  }
  .clients-note p{font-size:.95rem;color:var(--dim);max-width:44em}
  .clients-note p b{color:var(--txt);font-weight:600}

  /* ---------- Sistemas: bloque de texto + ventana de demo (estilo Cursor) ---------- */
  .caps{display:flex;flex-direction:column;gap:96px;margin-top:24px}
  .cap{display:grid;grid-template-columns:.85fr 1.15fr;gap:60px;align-items:center}
  .cap.flip .cap-txt{order:2}
  .cap.flip .win{order:1}
  @media(max-width:900px){.cap{grid-template-columns:1fr;gap:30px}.cap.flip .cap-txt{order:1}.cap.flip .win{order:2}}
  .cap-txt .n{font-family:var(--mono);color:var(--dim2);font-size:.85rem;letter-spacing:.1em;display:block;margin-bottom:14px}
  .cap-txt h3{font-size:clamp(1.5rem,2.8vw,2.1rem);letter-spacing:-.025em;margin-bottom:14px}
  .cap-txt p{color:var(--dim);font-size:1rem;max-width:30em}

  /* ventana de demo genérica: oscura sobre página clara, como la consola */
  .win{
    background:var(--c-bg);border:1px solid #D7D9DE;border-radius:16px;overflow:hidden;
    box-shadow:0 40px 90px -30px rgba(14,36,85,.38), 0 18px 40px -26px rgba(14,36,85,.28);
  }
  .win .wa-stage{background:#FFFFFF;display:flex;flex-direction:column;min-height:340px}
  .win .wa-stage .wa-body{min-height:0}

  /* feed tipo terminal para automatización */
  .pipe{padding:20px 18px;font-family:var(--mono);font-size:.78rem;display:flex;flex-direction:column;gap:10px;min-height:280px;justify-content:flex-end}
  .pl{display:flex;gap:10px;align-items:baseline;animation:pop .35s ease both;line-height:1.5}
  .pl .f{color:var(--txt);flex-shrink:0}
  .pl .a{color:var(--c-dim2);overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
  .pl .s{margin-left:auto;flex-shrink:0}
  .pl .s.ok{color:var(--c-ok)}
  .pl .s.warn{color:#FFC24B}
  .pipe-foot{
    border-top:1px solid var(--c-hair);padding:12px 18px;font-family:var(--mono);font-size:.66rem;
    color:var(--c-dim2);display:flex;justify-content:space-between;letter-spacing:.08em;
  }
  .pipe-foot b{color:var(--c-dim2);font-weight:500}

  /* dashboard grande para inteligencia */
  /* El tablero de dirección va en retrato: una columna, tarjetas apiladas.
     Rompe el ritmo de tres rectángulos anchos idénticos, y de paso deja ver
     la foto vertical que hay detrás. */
  .dash2{padding:20px;display:grid;grid-template-columns:1fr;gap:14px;min-height:520px}
  .stage.alta{align-items:center}
  @media(max-width:900px){.dash2{min-height:0}}
  .dash2 .col{display:flex;flex-direction:column;gap:14px}
  .dash2 .bars{height:150px}
  .dash2 .col{gap:14px}
  /* en retrato la ventana no llena el ancho de su columna */
  .stage.alta .win{max-width:420px;margin:0 auto}

  /* franja "cualquier reto" */
  .any{
    margin-top:96px;border:1px solid var(--hair);border-radius:16px;padding:42px 44px;background:var(--white);
    display:flex;align-items:center;gap:30px;flex-wrap:wrap;
  }
  .any .grow{flex:1;min-width:280px}
  .any h3{font-size:1.5rem;letter-spacing:-.02em;margin-bottom:8px}
  .any p{color:var(--dim);font-size:1rem;max-width:44em}

  /* subtítulo de ciclo de venta en cada pilar */

  /* capacidades técnicas: lo que APX puede construir más allá de la operación */
  /* la rejilla .cap-* se retiró: seis tarjetas iguales no demostraban nada */


  /* tarjetas por reto: el visitante se encuentra por su dolor, no por su industria */
  .reto-grid{display:grid;grid-template-columns:1fr 1fr;gap:22px;margin-top:56px}
  @media(max-width:820px){.reto-grid{grid-template-columns:1fr}}
  .reto{
    text-align:left;background:var(--white);border:1px solid var(--hair);border-radius:18px;
    padding:34px 32px;cursor:pointer;font-family:var(--body);position:relative;overflow:hidden;
    transition:transform .3s cubic-bezier(.3,.7,.3,1), box-shadow .3s, border-color .3s;
    display:flex;flex-direction:column;justify-content:flex-start;
  }
  /* mismo gesto que las opciones del menú: se corre un poco hacia donde lleva */
  .reto:hover{transform:translateX(4px);box-shadow:0 24px 50px -28px rgba(14,36,85,.28);border-color:var(--navy)}
  .reto::before{
    content:"";position:absolute;left:0;top:0;bottom:0;width:3px;background:var(--navy);
    transform:scaleY(0);transition:transform .3s ease;transform-origin:top;
  }
  .reto:hover::before{transform:scaleY(1)}
  .reto h3{font-size:1.25rem;letter-spacing:-.02em;margin-bottom:10px}
  .reto p{color:var(--dim);font-size:.94rem}
  /* sin flecha: contaminaba la tarjeta. Toda la caja es el botón; se
     reconoce por el movimiento y la barra al pasar el cursor. El lector de
     pantalla recibe la frase completa por el aria-label. */
  /* cualquier industria: la primera frase del párrafo, en el color del texto */
  .ind-frase{display:block;color:var(--txt);font-weight:600;font-size:1.12rem;letter-spacing:-.01em;margin-bottom:6px}

  /* ---------- La cifra: calculadora de la inatención ---------- */
  .cifra-box{
    margin-top:56px;background:var(--white);border:1px solid var(--hair);border-radius:20px;
    padding:44px;display:grid;grid-template-columns:1.05fr .95fr;gap:52px;align-items:center;
  }
  @media(max-width:860px){.cifra-box{grid-template-columns:1fr;padding:30px 24px;gap:34px}}
  .sl{margin-bottom:26px}
  .sl:last-child{margin-bottom:0}
  .sl label{display:flex;justify-content:space-between;gap:14px;font-size:.9rem;color:var(--dim);margin-bottom:10px}
  .sl label b{color:var(--txt);font-weight:650;white-space:nowrap}
  input[type=range]{
    width:100%;appearance:none;-webkit-appearance:none;height:5px;border-radius:99px;outline:none;cursor:pointer;
    background:linear-gradient(to right, var(--navy) var(--p,50%), var(--hair2) var(--p,50%));
  }
  input[type=range]::-webkit-slider-thumb{
    -webkit-appearance:none;width:22px;height:22px;border-radius:50%;background:#fff;
    border:5px solid var(--navy);cursor:grab;
  }
  .cifra-out{text-align:center}
  .cifra-out .lbl{font-family:var(--mono);font-size:.68rem;letter-spacing:.18em;text-transform:uppercase;color:var(--dim2)}
  .cifra-out .big{
    font-family:var(--disp);font-size:clamp(2.4rem,5vw,3.6rem);font-weight:700;letter-spacing:-.035em;
    line-height:1.05;margin:12px 0 4px;color:var(--navy);
  }
  .cifra-out .per{color:var(--dim);font-size:.92rem;margin-bottom:20px}
  .cifra-out .split{display:flex;justify-content:center;gap:26px;margin-bottom:24px;flex-wrap:wrap}
  .cifra-out .split div{text-align:center}
  .cifra-out .split b{display:block;font-family:var(--disp);font-size:1.15rem;color:var(--txt)}
  .cifra-out .split span{font-size:.72rem;color:var(--dim2)}
  .cifra-out .note{font-size:.76rem;color:var(--dim2);max-width:26em;margin:16px auto 0}

  /* ---------- Método ---------- */
  .method{background:var(--white);border-top:1px solid var(--hair);border-bottom:1px solid var(--hair)}
  .steps{display:grid;grid-template-columns:repeat(3,1fr);border-left:1px solid var(--hair)}
  @media(max-width:860px){.steps{grid-template-columns:1fr}}
  .step{padding:40px 34px 46px;border-right:1px solid var(--hair)}
  @media(max-width:860px){.step{border-right:0;border-bottom:1px solid var(--hair)}}
  .step .k{font-family:var(--mono);font-size:.7rem;color:var(--info-txt);letter-spacing:.16em;margin-bottom:18px;display:block}
  .step h3{font-size:1.3rem;margin-bottom:10px}
  .step p{color:var(--dim);font-size:.92rem}

  /* ---------- Final (banda marino) ---------- */
  .final{
    padding:150px 0 130px;text-align:center;position:relative;overflow:hidden;
    background:linear-gradient(180deg,#0A1128 0%,var(--navy) 100%);color:#fff;
  }
  .final .aurora{opacity:.5;filter:blur(70px);
    background:
      radial-gradient(34% 26% at 50% 10%, rgba(59,108,255,.5) 0%, transparent 100%),
      radial-gradient(26% 22% at 84% 40%, rgba(90,130,255,.25) 0%, transparent 100%);
  }
  .final h2{font-size:clamp(2.6rem,6.4vw,4.8rem);max-width:13em;margin:0 auto;color:#fff}
  .final p{color:#9BAAC9;margin:26px auto 44px;max-width:30em;font-size:1.05rem}
  .final .row-cta{display:flex;gap:14px;justify-content:center;flex-wrap:wrap}

  /* caja de contacto directo: abre el correo del visitante ya redactado */
  /* Contacto en una línea. Antes: caja de 660 px con cuatro campos y un
     textarea. Un formulario grande al cierre compite con el CTA y pide más
     de lo que un primer contacto necesita. */
  .contacto-linea{
    margin:44px auto 0;display:flex;align-items:center;justify-content:center;
    gap:18px;flex-wrap:wrap;
  }
  .contacto-linea span{
    font-family:var(--mono);font-size:.72rem;letter-spacing:.18em;
    text-transform:uppercase;color:#9BAAC9;
  }
  .cb-mail{
    font-family:var(--disp);font-weight:600;font-size:clamp(1.05rem,2.2vw,1.35rem);
    letter-spacing:-.01em;color:var(--papel);
    padding:11px 22px;border:1px solid rgba(247,247,243,.42);
    transition:background .2s ease,border-color .2s ease;
  }
  .cb-mail:hover{background:rgba(247,247,243,.1);border-color:var(--papel)}
  @media(max-width:520px){
    .contacto-linea{gap:12px}
    .cb-mail{font-size:.98rem;padding:10px 16px}
  }

  footer{padding:70px 0 40px;position:relative;z-index:1;background:#0A1128;border-top:1px solid rgba(255,255,255,.08)}
  .f-grid{display:grid;grid-template-columns:1.6fr 1fr 1fr 1fr;gap:44px;margin-bottom:60px}
  @media(max-width:860px){.f-grid{grid-template-columns:1fr 1fr;gap:36px}}
  .f-brand img{width:96px;height:auto;display:block;filter:brightness(0) invert(1);opacity:.92}
  .f-brand small{display:block;margin-top:16px;color:#9AA8C8;font-size:.85rem;max-width:20em;line-height:1.6}
  .f-col h4{
    font-family:var(--mono);font-size:.66rem;font-weight:500;letter-spacing:.2em;
    text-transform:uppercase;color:#8E9CC4;margin-bottom:18px;
  }
  .f-col a,.f-col button{
    display:block;color:#9BAAC9;font-size:.9rem;padding:6px 0;transition:color .2s;
    background:none;border:none;cursor:pointer;font-family:var(--body);text-align:left;width:100%;
  }
  .f-col a:hover,.f-col button:hover{color:#fff}
  .f-bottom{
    border-top:1px solid rgba(255,255,255,.08);padding-top:28px;
    display:flex;justify-content:space-between;align-items:center;gap:20px;flex-wrap:wrap;
  }
  .f-bottom small{color:#6E7FA3;font-size:.8rem;font-family:var(--mono)}
  /* el legal vive en la barra de abajo, junto al ©: es donde se busca, y no
     compite con las columnas de navegación */
  .f-bottom .f-legal{
    color:#6E7FA3;font-size:.8rem;font-family:var(--mono);
    transition:color .25s ease;
  }
  .f-bottom .f-legal:hover{color:var(--papel)}
  /* los dos legales juntos a la derecha del ©, separados por un filete */
  .f-legales{display:flex;align-items:center;gap:18px;flex-wrap:wrap}
  .f-legales .f-legal + .f-legal{padding-left:18px;border-left:1px solid rgba(255,255,255,.14)}
  .f-bottom .f-legal[aria-current="page"]{color:var(--papel)}

  /* ---------- Chat flotante (oscuro: es el producto) ---------- */
  #chat-fab{
    position:fixed;right:28px;bottom:28px;z-index:100;width:60px;height:60px;border-radius:50%;
    background:var(--navy);border:none;cursor:pointer;box-shadow:0 14px 40px -10px var(--sombra-navy);
    display:flex;align-items:center;justify-content:center;transition:transform .2s ease;
  }
  #chat-fab:hover{transform:scale(1.08)}
  #chat-fab svg{width:25px;height:25px;color:var(--papel)}
  #chat-fab .ping{position:absolute;top:2px;right:2px;width:13px;height:13px;border-radius:50%;background:var(--wa);border:2.5px solid #fff}
  #chat-panel{
    position:fixed;right:28px;bottom:102px;z-index:100;width:min(390px,calc(100vw - 44px));
    background:#12141C;border:1px solid rgba(255,255,255,.12);border-radius:20px;overflow:hidden;
    box-shadow:0 50px 100px -20px rgba(10,17,40,.55);display:flex;flex-direction:column;height:520px;
    opacity:0;transform:translateY(18px) scale(.97);pointer-events:none;transition:all .3s cubic-bezier(.2,.8,.3,1);
  }
  #chat-panel.open{opacity:1;transform:none;pointer-events:auto}
  .cp-top{background:#0D1730;padding:15px 18px;display:flex;align-items:center;gap:11px;border-bottom:1px solid var(--c-hair)}
  .cp-top .dot{width:8px;height:8px;border-radius:50%;background:var(--wa);box-shadow:0 0 10px var(--wa)}
  .cp-top strong{font-size:.9rem;font-family:var(--disp);letter-spacing:.02em;color:#fff;margin-right:auto}
  .cp-top small{margin-left:auto;font-size:.62rem;letter-spacing:.04em;color:#7487B8;font-family:var(--mono)}
  .cp-top button{background:none;border:none;color:#7487B8;cursor:pointer;font-size:1.1rem;line-height:1;padding:2px 4px}
  /* estilo terminal: "VIPER ›" antes de cada mensaje, monospace, sin burbujas */
  .cp-body{flex:1;overflow-y:auto;padding:20px 18px;display:flex;flex-direction:column;gap:14px;background:#0E1016}
  .msg{max-width:100%;font-family:var(--mono);font-size:.8rem;line-height:1.65;animation:pop .3s ease both}
  .msg.bot{color:#D8DEEA;align-self:stretch}
  .msg.bot::before{content:"VIPER › ";color:#8FA6D8;font-weight:500;letter-spacing:.04em}
  .msg.bot strong{color:#fff;font-weight:600}
  .msg.user{color:#F7F7F3;align-self:flex-end;text-align:right}
  .msg.user::before{content:"› "}
  .typing{display:flex;gap:4px;padding:4px 0;align-items:center}
  .typing i{width:6px;height:6px;border-radius:50%;background:var(--c-dim2);animation:tb 1.3s infinite}
  .typing i:nth-child(2){animation-delay:.16s}.typing i:nth-child(3){animation-delay:.32s}
  @keyframes tb{0%,60%,100%{transform:translateY(0);opacity:.4}30%{transform:translateY(-5px);opacity:1}}
  .cp-foot{padding:12px;border-top:1px solid var(--c-hair);background:#12141C}
  .chips{display:flex;flex-wrap:wrap;gap:7px}
  .chip{
    padding:8px 13px;border:1px solid rgba(255,255,255,.18);border-radius:8px;background:transparent;
    font-size:.75rem;font-weight:500;color:#D5DAE6;cursor:pointer;transition:all .15s ease;font-family:var(--mono);
  }
  .chip:hover{background:var(--papel);border-color:var(--papel);color:var(--navy)}
  .cp-in{display:flex;gap:8px}
  .cp-in input{
    flex:1;padding:11px 13px;border:1px solid rgba(255,255,255,.16);border-radius:8px;font-size:.8rem;
    font-family:var(--mono);outline:none;background:#0E1016;color:#fff;
  }
  .cp-in input::placeholder{color:#5C6272}
  .cp-in input:focus{border-color:#8FA6D8}
  .cp-in button{padding:0 16px;background:var(--papel);color:var(--navy);border:0;border-radius:8px;cursor:pointer;font-weight:600;font-family:var(--mono);font-size:.8rem}
  /* nota de privacidad al pie, estilo consultora */

  /* ---------- Lo que construimos ---------- */
  /* .rubro y no .cap: la portada ya usa .cap para los bloques de Sistemas
     y las dos reglas se pisaban entre páginas. */
  /* Cada fila se abre y muestra su información: una sola a la vez, así el
     ojo nunca recibe más de una idea. Sin pantalla al lado. */
  /* ---------- puerta a la calculadora ---------- */
  /* La calculadora era la sección más larga de Qué construimos y competía con
     los rubros. Ahora es una puerta: quien quiera la cifra, entra. */
  .puerta{
    display:flex;align-items:center;justify-content:space-between;gap:28px;flex-wrap:wrap;
    margin-top:52px;padding:34px 38px;background:var(--white);
    border:1px solid var(--hair);cursor:pointer;
    transition:border-color .3s ease,transform .3s cubic-bezier(.2,.7,.2,1),box-shadow .3s ease;
  }
  .puerta:hover{
    border-color:var(--navy);transform:translateY(-3px);
    box-shadow:0 24px 50px -30px rgba(14,36,85,.34);
  }
  .puerta .k{
    display:block;font-family:var(--mono);font-size:.63rem;letter-spacing:.2em;
    text-transform:uppercase;color:var(--dim2);margin-bottom:12px;
  }
  .puerta h3{font-size:1.5rem;letter-spacing:-.03em;margin-bottom:11px}
  .puerta p{color:var(--dim2);font-size:.95rem;line-height:1.6;max-width:44ch}
  .puerta-cta{
    flex:none;font-weight:600;font-size:.93rem;color:var(--papel);
    background:var(--navy);padding:15px 28px;border-radius:99px;white-space:nowrap;
    transition:transform .3s cubic-bezier(.2,.7,.2,1);
  }
  .puerta:hover .puerta-cta{transform:translateX(4px)}
  @media(max-width:640px){
    .puerta{padding:26px 22px;gap:20px}
    .puerta-cta{width:100%;text-align:center}
  }

  /* migaja de regreso arriba de la calculadora */
  .volver{margin-bottom:20px}
  .volver a{
    font-family:var(--mono);font-size:.68rem;letter-spacing:.14em;
    text-transform:uppercase;color:var(--dim2);transition:color .25s ease;
  }
  .volver a:hover{color:var(--navy)}

  .rubros{margin-top:52px;border-top:1px solid var(--hair)}
  .rubro{
    display:block;width:100%;text-align:left;cursor:pointer;
    background:transparent;border:0;border-bottom:1px solid var(--hair);
    padding:26px 4px 26px 0;font-family:var(--body);position:relative;
    transition:padding-left .38s cubic-bezier(.2,.7,.2,1);
  }
  /* el nombre y su etiqueta en el mismo renglón: de un vistazo se ve
     cuáles rubros son agentes y cuáles son software que se construye */
  .rubro b{
    display:flex;align-items:center;gap:14px;flex-wrap:wrap;
    font-family:var(--disp);font-size:1.35rem;font-weight:700;
    letter-spacing:-.032em;color:var(--dim);transition:color .3s ease;
  }
  .rubro b{
    display:block;font-family:var(--disp);font-size:1.35rem;font-weight:700;
    letter-spacing:-.032em;color:var(--dim);transition:color .3s ease;
  }
  .rubro p{
    color:var(--dim2);font-size:.98rem;line-height:1.62;max-width:60ch;
    max-height:0;opacity:0;margin-top:0;overflow:hidden;
    transition:max-height .42s cubic-bezier(.2,.7,.2,1),
               opacity .3s ease, margin-top .42s cubic-bezier(.2,.7,.2,1);
  }
  .rubro:hover b{color:var(--txt)}
  .rubro.on{padding-left:20px}
  .rubro.on b{color:var(--txt)}
  .rubro.on p{max-height:16rem;opacity:1;margin-top:13px}
  /* el filete que marca cuál está abierta */
  .rubro::before{
    content:"";position:absolute;left:0;top:26px;bottom:26px;width:2px;
    background:var(--navy);transform:scaleY(0);transform-origin:center;
    transition:transform .38s cubic-bezier(.2,.7,.2,1);
  }
  .rubro.on::before{transform:scaleY(1)}
  .rubro:focus-visible{outline:2px solid var(--blue);outline-offset:3px}

  @media(max-width:820px){
    .rubros{margin-top:38px}
    .rubro{padding:22px 4px 22px 0}
    .rubro b{font-size:1.18rem}
    .rubro p{max-width:100%}
  }

  /* ---------- Las ventanas de demo en pantalla angosta ---------- */
  /* A 375 px el título tenía 92 px para 243: se cortaba siempre. En vez de
     encoger la letra hasta lo ilegible, se libera espacio quitando lo
     decorativo y se recorta la descripción, no el nombre del archivo. */
  @media(max-width:560px){
    .c-bar{grid-template-columns:auto 1fr;gap:8px;padding:10px 12px}
    .c-bar .tl{display:none}
    .c-bar b{text-align:left;font-size:.68rem;letter-spacing:.1em}
    .pl .a{display:none}
    .pl{gap:8px}
    .doc-body,.code{font-size:.62rem}
    .doc-tabs span{font-size:.55rem;padding:8px 9px}
    /* en 375px el pie del tablero no cabe en un renglón y se corta a la
       derecha; se apila en dos y se achica */
    .d-foot{flex-wrap:wrap;gap:4px;font-size:.56rem}
    .d-sub{font-size:.6rem}
    .fin{padding:2px 13px}
    .fin-row{padding:11px 0}
    .fin-row span{font-size:.72rem}
    .fin-row b{font-size:.95rem}
  }


  /* ---------- páginas legales ---------- */
  /* Un aviso de privacidad se lee distinto al resto del sitio: renglón más
     corto, más aire entre párrafos y jerarquía por numeración, no por peso.
     Se lee poco pero se consulta con lupa. */
  .legal-fecha{
    font-family:var(--mono);font-size:.7rem;letter-spacing:.1em;
    color:var(--dim2);margin-top:18px;text-transform:uppercase;
  }
  .legal-cuerpo{max-width:62ch;margin-top:52px}
  .legal-cuerpo h2{
    font-size:1.1rem;font-weight:700;letter-spacing:-.02em;
    margin:44px 0 14px;padding-top:26px;border-top:1px solid var(--hair);
  }
  .legal-cuerpo h2:first-child{margin-top:0;padding-top:0;border-top:0}
  .legal-cuerpo p{color:var(--dim);font-size:.98rem;line-height:1.72;margin-bottom:14px}
  .legal-cuerpo p b{color:var(--txt);font-weight:600}
  .legal-cuerpo ul{margin:0 0 16px 0;padding-left:0;list-style:none}
  .legal-cuerpo li{
    color:var(--dim);font-size:.98rem;line-height:1.7;
    padding:6px 0 6px 22px;position:relative;
  }
  .legal-cuerpo li::before{
    content:"";position:absolute;left:4px;top:.95em;
    width:5px;height:1px;background:var(--dim2);
  }
  .legal-cuerpo a{color:var(--acento-txt);text-decoration:underline;text-underline-offset:3px}
  .legal-cierre{
    margin-top:44px;padding-top:26px;border-top:1px solid var(--hair);
    font-size:.88rem!important;color:var(--dim2)!important;
  }
  @media(max-width:640px){
    .legal-cuerpo{margin-top:36px}
    .legal-cuerpo h2{margin-top:34px;padding-top:20px}
  }


  /* ---------- 404 ---------- */
  /* Una 404 no debe ser un callejón: dice qué pasó en una línea y ofrece las
     rutas reales. Ojo: se sirve desde CUALQUIER dirección (/a/b/c), así que
     en 404.html todas las rutas de assets y enlaces van absolutas desde la
     raíz. Con rutas relativas la página saldría sin estilos. */
  .nf{min-height:58vh;display:flex;align-items:center}
  .nf-k{
    display:block;font-family:var(--mono);font-size:.68rem;letter-spacing:.2em;
    text-transform:uppercase;color:var(--dim2);margin-bottom:16px;
  }
  .nf h1{font-size:clamp(2.2rem,5vw,3.4rem);margin-bottom:18px}
  .nf-sub{color:var(--dim);font-size:1.02rem;max-width:34em;margin-bottom:44px}
  /* OJO: esto NO puede ser un <nav>. La regla global `nav{position:fixed;top:0}`
     del encabezado captura cualquier <nav> del sitio y lo manda a la cima de
     la pantalla. Va un div con role="navigation": misma semántica, sin choque. */
  .nf-rutas{
    display:grid;grid-template-columns:1fr 1fr;gap:0;
    border:1px solid var(--hair);background:var(--white);max-width:760px;
  }
  .nf-rutas a{
    padding:24px 26px;border-right:1px solid var(--hair);
    border-bottom:1px solid var(--hair);transition:background .25s ease;
  }
  .nf-rutas a:nth-child(2n){border-right:0}
  .nf-rutas a:nth-last-child(-n+2){border-bottom:0}
  .nf-rutas a:hover{background:#FBFBF9}
  .nf-rutas b{
    display:block;font-family:var(--disp);font-size:1.05rem;font-weight:700;
    letter-spacing:-.025em;color:var(--txt);margin-bottom:6px;
  }
  .nf-rutas span{display:block;color:var(--dim2);font-size:.88rem;line-height:1.55}
  @media(max-width:640px){
    .nf{min-height:0}
    .nf-rutas{grid-template-columns:1fr}
    .nf-rutas a{border-right:0}
    .nf-rutas a:nth-last-child(-n+2){border-bottom:1px solid var(--hair)}
    .nf-rutas a:last-child{border-bottom:0}
  }

  /* ---------- Movimiento reducido ---------- */
  /* Para quien activó "reducir movimiento" en su sistema, normalmente por
     mareo o vértigo. No se apaga todo con un 0.01ms global: eso también mata
     la retroalimentación útil. Se quita el DESPLAZAMIENTO (lo que marea) y se
     conservan los cambios de color y de opacidad, que informan sin mover. */
  @media(prefers-reduced-motion:reduce){
    html{scroll-behavior:auto}

    /* el contenido aparece en su sitio, sin subir desde abajo */
    .rv{opacity:1;transform:none;transition:none}

    /* nada de levantarse, encogerse ni girar al pasar el cursor */
    .btn:hover,.nav-feat:hover,.cl-tile:hover,.reto:hover,
    .menu-sheet a:hover{transform:none}
    .brand:hover .b-sym,.brand .b-sym.spin,.brand:active .b-sym,
    .brand:hover .b-word{transform:none;transition:none}

    /* el punto lima deja de latir; se queda encendido */
    .nav-feat i{animation:none}

    /* la hoja del menú aparece y desaparece sin deslizarse */
    .menu-sheet{transition:opacity .2s ease}
    .menu-sheet:not(.open){transform:none}
    .menu-sheet.open{transform:none}

    /* el color sí sigue transicionando: es la señal de que algo respondió */
  }


/* ═══════════════════════════════════════════════════════════════════════
   CAPA APPLE · Designing Fluid Interfaces aplicado al sitio
   Un solo bloque encima del CSS existente: no reemplaza reglas originales,
   las afina. Quitar este bloque devuelve el sitio a como estaba.
   ═══════════════════════════════════════════════════════════════════════ */

  /* ── resortes ─────────────────────────────────────────────────────────
     Apple describe un resorte con dos números: amortiguamiento (1.0 = sin
     rebote) y respuesta (qué tan rápido llega). Estas curvas son la
     solución exacta de ese resorte, muestreada para CSS. Se asientan solas;
     la duración no se elige, sale de la física. */
  :root{
    --spring:linear(0, 0.0175, 0.0613, 0.1215, 0.1907, 0.2635, 0.3366, 0.4073, 0.4741, 0.5362, 0.593, 0.6444, 0.6906, 0.7317, 0.768, 0.8, 0.828, 0.8524, 0.8736, 0.892, 0.9079, 0.9215, 0.9333, 0.9433, 0.9519, 0.9593, 0.9655, 0.9708, 0.9754, 0.9792, 0.9825, 0.9852, 0.9876, 0.9895, 0.9912, 0.9926, 0.9938, 0.9948, 0.9956, 0.9963, 0.9969, 0.9974, 0.9979, 0.9982, 0.9985, 0.9987, 0.999, 0.9991, 1);          /* amort. 1.0 · resp. 0.4 s */
    --spring-t:0.61s;
    --spring-rapido:linear(0, 0.0176, 0.0619, 0.1226, 0.1922, 0.2656, 0.3389, 0.4099, 0.4769, 0.5391, 0.5959, 0.6473, 0.6934, 0.7344, 0.7706, 0.8024, 0.8303, 0.8545, 0.8756, 0.8938, 0.9095, 0.923, 0.9345, 0.9445, 0.9529, 0.9602, 0.9663, 0.9716, 0.976, 0.9798, 0.983, 0.9857, 0.9879, 0.9899, 0.9915, 0.9929, 0.994, 0.995, 0.9958, 0.9965, 0.9971, 0.9975, 0.9979, 0.9983, 0.9986, 0.9988, 0.999, 0.9992, 1);   /* amort. 1.0 · resp. 0.3 s */
    --spring-rapido-t:0.46s;
    --material:rgba(247,247,243,.72);
    --material-fuerte:rgba(247,247,243,.86);
  }

  /* ── 1 · RESPUESTA: el botón contesta al bajar el dedo, no al soltarlo ─
     Sin esto, la confirmación llega hasta el 'click' y el sitio se siente
     tieso. Al presionar baja de inmediato; al soltar regresa con resorte. */
  .btn,.reto,.cl-tile,.puerta,.burger,.nav-feat,.rubro,
  .menu-sheet a,#chat-fab,.nf-rutas a{
    -webkit-tap-highlight-color:transparent;
    touch-action:manipulation;              /* sin los 300 ms de espera del toque */
  }
  .btn,.reto,.cl-tile,.puerta,.nav-feat,.burger{
    transition-property:transform,box-shadow,border-color,background,color;
    transition-duration:var(--spring-t);
    transition-timing-function:var(--spring);
  }
  .btn:active,.nav-feat:active,.burger:active{
    transform:scale(.96);transition-duration:90ms;transition-timing-function:ease-out;
  }
  .reto:active,.cl-tile:active,.puerta:active{
    transform:scale(.985);transition-duration:90ms;transition-timing-function:ease-out;
  }
  #chat-fab{transition:transform var(--spring-t) var(--spring)}
  #chat-fab:active{transform:scale(.9);transition-duration:90ms;transition-timing-function:ease-out}

  /* en pantallas táctiles no hay cursor: el hover se queda pegado después del
     toque y la tarjeta se ve levantada sin que nadie la toque */
  @media (hover:none){
    .btn:hover,.reto:hover,.cl-tile:hover,.puerta:hover,.nav-feat:hover,
    #chat-fab:hover,.menu-sheet a:hover{transform:none}
  }

  /* ── 2 · MATERIAL: la barra es una capa de vidrio, no una franja ──────
     Sin línea dura abajo. La separación aparece sólo cuando hay contenido
     pasando por debajo, y el vidrio se espesa en ese momento. */
  nav{
    background:var(--material);
    -webkit-backdrop-filter:blur(20px) saturate(180%);
            backdrop-filter:blur(20px) saturate(180%);
    border-bottom-color:transparent;
    transition:background var(--spring-t) var(--spring),border-color .3s ease;
  }
  nav::after{
    content:"";position:absolute;left:0;right:0;top:100%;height:14px;pointer-events:none;
    background:linear-gradient(to bottom,rgba(14,36,85,.07),rgba(14,36,85,0));
    opacity:0;transition:opacity .3s ease;
  }
  nav.scrolled{background:var(--material-fuerte)}
  nav.scrolled::after{opacity:1}

  /* ── 3 · ORIGEN: el menú nace del botón que lo abrió y regresa a él ────
     Antes bajaba 10 px desde ningún lado. Ahora crece desde la esquina de la
     hamburguesa, como material que se forma (desenfoque + escala juntos), y
     al cerrar recorre el mismo camino de vuelta. */
  .menu-sheet{
    transform-origin:calc(100% - 21px) -47px;     /* el centro de la hamburguesa */
    background:var(--material-fuerte);
    -webkit-backdrop-filter:blur(24px) saturate(180%);
            backdrop-filter:blur(24px) saturate(180%);
    border-color:rgba(255,255,255,.7);
    box-shadow:0 40px 90px -30px rgba(10,20,50,.38),0 2px 6px rgba(10,20,50,.06),
               inset 0 1px 0 rgba(255,255,255,.9);   /* el borde alto que atrapa la luz */
    transform:scale(.6);filter:blur(8px);opacity:0;
    transition:transform var(--spring-t) var(--spring),
               filter var(--spring-rapido-t) var(--spring-rapido),
               opacity var(--spring-rapido-t) var(--spring-rapido);
  }
  .menu-sheet.open{transform:none;filter:none;opacity:1}
  /* las entradas siguen la dirección del gesto: bajan desde el botón */
  .menu-sheet a{transition:background .2s,transform var(--spring-t) var(--spring),opacity .3s}
  .menu-sheet:not(.open) a{opacity:0;transform:translateY(-6px)}
  .menu-sheet.open a:nth-of-type(2){transition-delay:20ms}
  .menu-sheet.open a:nth-of-type(3){transition-delay:40ms}
  .menu-sheet.open a:nth-of-type(4){transition-delay:60ms}
  .menu-sheet.open a:nth-of-type(5){transition-delay:80ms}
  .menu-sheet.open a:nth-of-type(6){transition-delay:100ms}
  .menu-sheet a:active{background:var(--bg);transform:scale(.98)}
  .burger i{transition:transform var(--spring-t) var(--spring),opacity .2s}
  .menu-veil{transition:opacity var(--spring-t) var(--spring),backdrop-filter var(--spring-t) var(--spring)}

  /* ── 4 · ORIGEN: el chat sale del botón redondo y vuelve a él ────────── */
  #chat-panel{
    transform-origin:calc(100% - 30px) calc(100% + 44px);   /* centro del botón */
    transform:scale(.4);filter:blur(10px);opacity:0;
    transition:transform var(--spring-t) var(--spring),
               filter var(--spring-rapido-t) var(--spring-rapido),
               opacity var(--spring-rapido-t) var(--spring-rapido);
  }
  #chat-panel.open{transform:none;filter:none;opacity:1}

  /* en el teléfono el chat es una hoja que sube desde abajo y se baja con el
     dedo. La física la lleva el JavaScript (seguimiento 1:1, velocidad,
     proyección de inercia); aquí sólo la forma. */
  .cp-grab{display:none}
  @media (max-width:560px){
    #chat-panel{
      left:0;right:0;bottom:0;width:100%;height:min(82vh,640px);
      border-radius:22px 22px 0 0;border-bottom:0;
      padding-bottom:env(safe-area-inset-bottom,0px);
      transform:translateY(100%);filter:none;opacity:1;transition:none;
      touch-action:none;
    }
    #chat-panel.open{transform:none}
    .cp-top{cursor:grab;touch-action:none;padding-top:22px;position:relative}
    .cp-top:active{cursor:grabbing}
    .cp-grab{
      display:block;position:absolute;top:8px;left:50%;width:38px;height:5px;
      margin-left:-19px;border-radius:3px;background:rgba(255,255,255,.28);
    }
    .chat-scrim{
      position:fixed;inset:0;z-index:99;background:rgba(6,10,24,.45);
      opacity:0;pointer-events:none;
    }
    .chat-scrim.open{pointer-events:auto}
  }
  @media (min-width:561px){.chat-scrim{display:none}}

  /* ── 5 · ORIGEN: la ficha del cliente se despliega desde su logo ───────
     Antes animaba max-height, que brinca y no es fluido. Ahora la altura real
     se abre con la técnica de filas de rejilla, y el panel crece desde el
     punto exacto de la tarjeta que se tocó. */
  .cl-detail{
    display:grid;grid-template-rows:0fr;max-height:none;overflow:visible;
    transition:grid-template-rows var(--spring-t) var(--spring),
               opacity var(--spring-rapido-t) var(--spring-rapido),
               margin-top var(--spring-t) var(--spring);
  }
  .cl-detail > .cl-detail-in{min-height:0;overflow:hidden}
  .cl-detail.open{grid-template-rows:1fr;max-height:none}
  .cl-detail-in{
    transform-origin:var(--ox,50%) 0;
    transform:scale(.96);transition:transform var(--spring-t) var(--spring),padding var(--spring-t) var(--spring),border-width var(--spring-t) var(--spring);
  }
  .cl-detail.open .cl-detail-in{transform:none}
  .cl-detail:not(.open) .cl-detail-in{padding-top:0;padding-bottom:0;border-width:0}

  /* ── 6 · APARICIÓN: menos recorrido, curva de resorte ──────────────────
     30 px de subida en 0.8 s se lee como animación. 12 px con resorte se lee
     como contenido que se acomoda. */
  .rv{transform:translateY(12px);transition:opacity .5s ease,transform var(--spring-t) var(--spring)}

  /* ── 7 · TIPOGRAFÍA: el espaciado depende del tamaño ───────────────────
     Un solo -0.038em para todo apretaba de más los títulos chicos. Apple:
     entre más grande la letra, más negativo el espaciado y más cerrado el
     interlineado. */
  h1{letter-spacing:-.04em;line-height:1.02}
  h2{letter-spacing:-.035em;line-height:1.05}
  h3{letter-spacing:-.02em;line-height:1.2}
  h1,h2,h3{text-wrap:balance;font-optical-sizing:auto}
  p,li{text-wrap:pretty}

  /* ── 8 · ACCESIBILIDAD: tres preferencias del sistema, no una ──────── */
  @media (prefers-reduced-motion:reduce){
    /* sin desplazamientos ni escalas: fundidos cortos. La retroalimentación
       se queda, pero como cambio de opacidad en vez de movimiento. */
    .menu-sheet,.menu-sheet.open,#chat-panel,#chat-panel.open,.cl-detail-in{
      transform:none!important;filter:none!important;transition:opacity .2s ease!important;
    }
    .menu-sheet a{transform:none!important;transition-delay:0s!important}
    .btn:active,.reto:active,.cl-tile:active,.puerta:active,.nav-feat:active,
    .burger:active,#chat-fab:active{transform:none;opacity:.8}
    .rv{transform:none}
  }
  @media (prefers-reduced-motion:reduce) and (max-width:560px){
    #chat-panel{opacity:0!important}
    #chat-panel.open{opacity:1!important}
  }
  @media (prefers-reduced-transparency:reduce){
    nav,nav.scrolled,.menu-sheet{
      background:var(--bg2);-webkit-backdrop-filter:none;backdrop-filter:none;
    }
    .menu-veil{backdrop-filter:none}
  }
  @media (prefers-contrast:more){
    nav,nav.scrolled,.menu-sheet{
      background:var(--bg2);-webkit-backdrop-filter:none;backdrop-filter:none;
      border-color:var(--txt);
    }
    nav{border-bottom:1px solid var(--txt)}
  }

/* ==========================================================================
   CAPA FLUJO — del trabajo a mano al flujo, con el scroll
   La escena queda fija mientras se baja: un trabajador camina escribiendo en
   su hoja; se disuelve en puntos; los puntos se acomodan en un flujo de
   trabajo que sigue corriendo; de ahí nace el titular. Todo es reversible.
   Sin JS o con movimiento reducido, el hero se ve normal.
   ========================================================================== */
.parvada,.parvada-aviso,.flujo-frase{display:none}
.parvada-on .hero{padding-top:0;overflow:clip}          /* 'hidden' rompería el sticky */
.parvada-on .parvada-pista{height:320vh}
.parvada-on .parvada-escena{
  position:sticky;top:0;height:100vh;height:100lvh;   /* lvh: cubre toda la pantalla aunque Safari esconda su barra */
  display:flex;flex-direction:column;justify-content:center;padding-top:64px;
}
.parvada-on .parvada{display:block;position:absolute;inset:0;width:100%;height:100%;pointer-events:none}
.parvada-on .parvada-escena .wrap{position:relative;z-index:1;width:100%}
.parvada-on .hero h1{visibility:hidden}
.parvada-lista .hero h1{visibility:visible}
.parvada-on .hero h1 .w{white-space:nowrap}             /* una palabra no se parte entre letras */
.parvada-on .hero-sub,.parvada-on .hero-cta{animation:none;opacity:0}
.parvada-on .flujo-frase{
  display:block;position:absolute;left:0;right:0;top:21%;z-index:1;margin:0;padding:0 24px;
  text-align:center;font:500 clamp(1.1rem,1.9vw,1.45rem)/1.35 var(--disp);letter-spacing:-.015em;
  color:var(--dim);opacity:0;pointer-events:none;
}
.parvada-on .parvada-aviso{
  display:flex;flex-direction:column;align-items:center;gap:10px;
  position:absolute;left:50%;bottom:30px;transform:translateX(-50%);z-index:1;
  font:500 11px var(--mono);letter-spacing:.2em;text-transform:uppercase;color:var(--dim2);
}
.parvada-aviso i{width:1px;height:38px;background:linear-gradient(currentColor,transparent);
  transform-origin:top;animation:aviso 2.6s cubic-bezier(.6,0,.2,1) infinite}
@keyframes aviso{0%{transform:scaleY(0);opacity:1}55%{transform:scaleY(1);opacity:1}100%{transform:scaleY(1);opacity:0}}

@media (max-width:560px){
  .parvada-on .parvada-pista{height:300vh}
  .parvada-on .parvada-escena{padding-top:56px}
  .parvada-on .hero-sub{font-size:.98rem;margin-top:20px}
  .parvada-on .hero-cta{margin-top:26px}
  .parvada-on .flujo-frase{top:16%}
}

/* Intro ya visto: la pista vuelve a medir una pantalla y sólo queda el hero */
.parvada-vista .parvada-pista{height:auto}
.parvada-vista .parvada-escena{position:relative}
/* sin la consola, el hero ya no necesita una pantalla completa: mide su contenido */
.parvada-vista .parvada-escena{height:auto;padding:150px 0 110px}
@media (max-width:560px){.parvada-vista .parvada-escena{padding:120px 0 80px}}
.parvada-vista .parvada,.parvada-vista .parvada-aviso{display:none}
.parvada-vista .hero-sub,.parvada-vista .hero-cta{opacity:1}

/* Mientras el intro es marino, el menú y el chat se leen en blanco sobre él */
.ente-oscuro nav{background:transparent;border-bottom-color:transparent;-webkit-backdrop-filter:none;backdrop-filter:none}
.ente-oscuro nav::after{opacity:0 !important}
.ente-oscuro .brand img{filter:brightness(0) invert(1)}
.ente-oscuro .nav-feat{background:#fff;border-color:#fff;color:#0E2455}
.ente-oscuro .nav-feat i{background:#0E2455}
.ente-oscuro .nav-r .btn-solid{color:#fff;border-color:#fff}
.ente-oscuro .burger{background:transparent;border-color:rgba(255,255,255,.55)}
.ente-oscuro .burger i{background:#fff}
.ente-oscuro #chat-fab{box-shadow:0 0 0 2px rgba(255,255,255,.75)}

/* iOS anterior a 16 no conoce overflow:clip; sin él el sticky no se fija.
   Ahí el hero se deja visible y la aurora (que se sale de los bordes) se oculta. */
@supports not (overflow:clip){
  .parvada-on .hero{overflow:visible}
  .parvada-on .aurora{display:none}
}

/* En iPhone, Safari tiñe la barra de estado y deja ver el fondo al ocultar su
   barra inferior: mientras el intro es marino, el fondo de la página también. */
html.ente-oscuro,html.ente-oscuro body{background:#0E2455}
/* El logo y la hamburguesa cambian de color con un fundido, conservando sus giros */
.brand .b-sym{transition:transform .75s cubic-bezier(.34,1.56,.64,1),filter .6s ease}
.brand .b-word{transition:transform .5s cubic-bezier(.34,1.56,.64,1),filter .6s ease}
.burger i{transition:transform var(--spring-t) var(--spring),opacity .2s,background-color .6s ease}

/* Reto destacado: la transformación completa, a todo lo ancho (sus bordes cuadran con los cuatro de
   abajo), con la misma letra que los demás y el filete ya visible */
.reto-total{grid-column:1/-1}
.reto-total::before{transform:scaleY(1)}

/* ==========================================================================
   MODO OSCURO — los colores se invierten: fondo marino, letra blanca, y lo
   que en claro es marino (botones, filetes, acentos) pasa a blanco. Sigue
   al sistema (Mac, teléfono) hasta que la persona elige con el interruptor.
   ========================================================================== */
:root[data-theme="dark"]{--bg:#0E2455;--bg2:#13306A;--white:#13306A;--txt:#F7F7F3;--dim:#BAC3D6;--dim2:#97A3BF;
  --hair:rgba(255,255,255,.1);--hair2:rgba(255,255,255,.2);
  --navy:#F7F7F3;--papel:#0E2455;--acento-txt:#FFFFFF;--info-txt:#9DB4FF;--blue-hi:#9DB4FF;
  --sombra-navy:rgba(0,0,0,.45);--nav-bg:rgba(14,36,85,.75);--stage1:#13306A;--stage2:#162F63;
  --material:rgba(14,36,85,.72);--material-fuerte:rgba(14,36,85,.9);color-scheme:dark;}
@media (prefers-color-scheme:dark){
  :root:not([data-theme="light"]){--bg:#0E2455;--bg2:#13306A;--white:#13306A;--txt:#F7F7F3;--dim:#BAC3D6;--dim2:#97A3BF;
  --hair:rgba(255,255,255,.1);--hair2:rgba(255,255,255,.2);
  --navy:#F7F7F3;--papel:#0E2455;--acento-txt:#FFFFFF;--info-txt:#9DB4FF;--blue-hi:#9DB4FF;
  --sombra-navy:rgba(0,0,0,.45);--nav-bg:rgba(14,36,85,.75);--stage1:#13306A;--stage2:#162F63;
  --material:rgba(14,36,85,.72);--material-fuerte:rgba(14,36,85,.9);color-scheme:dark;}
  :root:not([data-theme="light"]) .brand img,:root:not([data-theme="light"]) .menu-foot img,:root:not([data-theme="light"]) .cl-tile img{filter:brightness(0) invert(1)}
  :root:not([data-theme="light"]) .final{background:linear-gradient(180deg,#081634 0%,#0B1D45 100%)}
  :root:not([data-theme="light"]) .final .btn-lime{background:#F7F7F3;color:#0E2455}
  :root:not([data-theme="light"]) #chat-fab{background:#F7F7F3}
  :root:not([data-theme="light"]) #chat-fab svg{color:#0E2455}
  :root:not([data-theme="light"]) .i-luna{display:none}
  :root:not([data-theme="light"]) .i-sol{display:block}
  :root:not([data-theme="light"]) .t-osc{display:none}
  :root:not([data-theme="light"]) .t-cla{display:inline}
}
:root[data-theme="dark"] .brand img,:root[data-theme="dark"] .menu-foot img,:root[data-theme="dark"] .cl-tile img{filter:brightness(0) invert(1)}
:root[data-theme="dark"] .final{background:linear-gradient(180deg,#081634 0%,#0B1D45 100%)}
:root[data-theme="dark"] .final .btn-lime{background:#F7F7F3;color:#0E2455}
:root[data-theme="dark"] #chat-fab{background:#F7F7F3}
:root[data-theme="dark"] #chat-fab svg{color:#0E2455}
:root[data-theme="dark"] .i-luna{display:none}
:root[data-theme="dark"] .i-sol{display:block}
:root[data-theme="dark"] .t-osc{display:none}
:root[data-theme="dark"] .t-cla{display:inline}

/* El interruptor vive al pie (que es marino en ambos temas): una pastilla discreta */
.f-tema{display:inline-flex;align-items:center;gap:8px;padding:7px 14px 7px 11px;border-radius:999px;cursor:pointer;
  border:1px solid rgba(255,255,255,.18);background:transparent;color:#C9D2E6;font:500 .78rem var(--mono);letter-spacing:.02em;
  transition:border-color .2s,color .2s}
.f-tema:hover{border-color:rgba(255,255,255,.5);color:#fff}
.f-tema svg{width:15px;height:15px;fill:none;stroke:currentColor;stroke-width:1.8;stroke-linecap:round;stroke-linejoin:round}
.i-sol,.t-cla{display:none}

/* la sección final ya era marina en claro: su letra se queda blanca en oscuro */
:root[data-theme="dark"] .cb-mail{color:#F7F7F3}
:root[data-theme="dark"] .cb-mail:hover{border-color:#F7F7F3}
@media (prefers-color-scheme:dark){
  :root:not([data-theme="light"]) .cb-mail{color:#F7F7F3}
  :root:not([data-theme="light"]) .cb-mail:hover{border-color:#F7F7F3}
}

:root[data-theme="dark"] .f-bottom .f-legal:hover,:root[data-theme="dark"] .f-bottom .f-legal[aria-current="page"]{color:#F7F7F3}
@media (prefers-color-scheme:dark){
  :root:not([data-theme="light"]) .f-bottom .f-legal:hover,:root:not([data-theme="light"]) .f-bottom .f-legal[aria-current="page"]{color:#F7F7F3}
}

/* Intro en modo oscuro: fondo claro, todo en marino (el mismo intro, invertido) */
html.ente-claro,html.ente-claro body{background:#F7F7F3}
.ente-claro nav{background:transparent;border-bottom-color:transparent;-webkit-backdrop-filter:none;backdrop-filter:none}
.ente-claro nav::after{opacity:0 !important}
.ente-claro .brand img{filter:none !important}
.ente-claro .nav-feat{background:#0E2455;border-color:#0E2455;color:#F7F7F3}
.ente-claro .nav-feat i{background:#F7F7F3}
.ente-claro .nav-r .btn-solid{color:#0E2455;border-color:#0E2455}
.ente-claro .burger{background:transparent;border-color:rgba(14,36,85,.3)}
.ente-claro .burger i{background:#0E2455}
.ente-claro #chat-fab{background:#0E2455 !important}
.ente-claro #chat-fab svg{color:#F7F7F3 !important}
/* En teléfono la burbuja del chat flota abajo a la derecha: el interruptor va a la izquierda,
   y el pie deja aire al final para que nada quede debajo de la burbuja */
@media (max-width:560px){
  .f-bottom{justify-content:flex-start;column-gap:18px}
  .f-tema{order:-1}
  footer{padding-bottom:110px}
}

/* ═══════════════ CAPA OPERACIÓN REAL ═══════════════
   Fotos reales por industria, un solo tablero (donde el producto ES el
   tablero) y un sistema de movimiento con una sola curva:
   cubic-bezier(.215,.61,.355,1), disparo al entrar, una sola vez. */
:root{--sale:cubic-bezier(.215,.61,.355,1);--suave:cubic-bezier(.22,1,.36,1)}

/* el contenido sólo se oculta si el script que lo revela está corriendo;
   si apx.js no carga, nada queda invisible */
html:not(.rv-on) .rv{opacity:1;transform:none}
html:not(.rv-on) .asienta>*{opacity:1;transform:none}

.sec-lede{color:var(--dim);margin-top:22px;max-width:36em;font-size:1.02rem}

/* titulares que suben línea por línea desde detrás de una máscara */
[data-lineas].partido{opacity:1;transform:none}
.ln{display:block;overflow:clip;padding-bottom:.12em;margin-bottom:-.12em}
.ln>span{display:block;transform:translateY(110%);transition:transform .85s var(--sale);transition-delay:calc(var(--l,0)*90ms)}
.in .ln>span,.ln.in>span,[data-lineas].in .ln>span{transform:none}

/* tarjetas que se asientan una tras otra */
.rv-on .asienta>*{opacity:.0;transform:translateY(40px) scale(.965);transform-origin:50% 100%;
  transition:opacity .9s var(--sale),transform .9s var(--sale),box-shadow .3s,border-color .3s;transition-delay:calc(var(--i,0)*70ms)}
.rv-on .asienta.in>*{opacity:1;transform:none}
.rv-on .asienta.in>*:hover{transition-delay:0s}
.rv-on .reto-grid.asienta.in>.reto:hover{transform:translateX(4px)}
@media (hover:hover){
  .reto-grid:hover .reto:not(:hover),.steps:hover .step:not(:hover){opacity:.82}
  .reto,.step{transition-property:opacity,transform,box-shadow,border-color}
}

/* ---------- Manifiesto ---------- */
.manifiesto{padding:clamp(6rem,11vw,9.5rem) 0 clamp(2rem,4vw,3rem)}
.mf-frase{
  font-family:var(--disp);font-weight:600;font-size:clamp(1.65rem,3.1vw,2.7rem);
  line-height:1.16;letter-spacing:-.028em;color:var(--txt);max-width:24em;margin:0 auto;text-align:center;
}
.mf-frase .w{opacity:.2;transition:opacity .25s linear}
.mf-frase .w.on{opacity:1}

/* ---------- Industrias ---------- */
.ind-grid{display:grid;grid-template-columns:repeat(3,1fr);gap:18px}
.ind{position:relative;margin:0;border-radius:18px;overflow:hidden;aspect-ratio:4/5;background:#0E2455}
.ind img,.ind video{width:100%;height:100%;object-fit:cover;display:block;filter:saturate(.82) contrast(1.02);transform:scale(1.04);transition:transform 1.4s var(--suave)}
.asienta.in .ind img,.asienta.in .ind video{transform:none}
.ind::after{content:"";position:absolute;inset:0;background:linear-gradient(180deg,rgba(14,36,85,0) 45%,rgba(8,18,44,.82) 100%)}
.ind figcaption{position:absolute;left:22px;right:22px;bottom:20px;z-index:1;color:#fff}
.ind figcaption b{display:block;font-family:var(--disp);font-weight:600;font-size:1.12rem;letter-spacing:-.015em}
.ind figcaption span{display:block;margin-top:5px;font-size:.84rem;line-height:1.4;color:rgba(255,255,255,.78);max-width:22em}
@media(max-width:820px){
  /* en el teléfono, fila que se desliza con el dedo y se detiene en cada foto */
  .ind-grid{display:flex;overflow-x:auto;scroll-snap-type:x mandatory;gap:12px;margin:0 -16px;padding:0 16px 6px;scrollbar-width:none}
  .ind-grid::-webkit-scrollbar{display:none}
  .ind{flex:0 0 72%;scroll-snap-align:start}
}

/* ---------- Sistemas: foto real en lugar de ventana ---------- */
.cap-foto{margin:0;border-radius:18px;overflow:hidden;aspect-ratio:4/3;background:#0E2455;
  box-shadow:0 40px 90px -40px rgba(14,36,85,.35)}
.cap-foto img,.cap-foto video{width:100%;height:112%;object-fit:cover;display:block;filter:saturate(.85)}
.cap.flip .cap-foto{order:1}
@media(max-width:900px){.cap.flip .cap-foto{order:2}}

/* ---------- Banda oscura a todo lo ancho ---------- */
.banda{position:relative;overflow:hidden;background:#0E2455;color:#fff;min-height:clamp(28rem,46vw,40rem);display:flex;align-items:flex-end;padding:clamp(4rem,8vw,7rem) 0}
.banda-foto{position:absolute;inset:-6% 0;width:100%;height:112%;object-fit:cover;filter:saturate(.7)}
.banda::before{content:"";position:absolute;inset:0;z-index:1;background:linear-gradient(90deg,rgba(14,36,85,.25) 0%,rgba(14,36,85,.55) 45%,rgba(10,22,52,.92) 100%)}
.banda .wrap{position:relative;z-index:2;width:100%;display:flex;flex-direction:column;align-items:flex-end;text-align:right}
.banda h2{color:#fff;max-width:13em;font-size:clamp(2rem,4vw,3.2rem)}
.banda p{color:rgba(255,255,255,.78);margin-top:20px;max-width:30em;font-size:1.02rem}
@media(max-width:700px){
  .banda::before{background:linear-gradient(180deg,rgba(14,36,85,.3) 0%,rgba(10,22,52,.92) 70%)}
  .banda .wrap{align-items:flex-start;text-align:left}
}

/* paralaje sólo con CSS donde el navegador lo sabe hacer */
@supports (animation-timeline:view()){
  .banda-foto,.cap-foto img,.cap-foto video{animation:paralaje linear both;animation-timeline:view();animation-range:cover}
  @keyframes paralaje{from{transform:translateY(-5%)}to{transform:translateY(5%)}}
}

/* ---------- Botones más sobrios ---------- */
.nav-r .btn{min-height:0}
.btn{min-height:48px;transition:background .16s ease,color .16s ease,border-color .16s ease,box-shadow .16s ease,transform var(--spring-t) var(--spring)}
.btn-lime:hover,.btn-solid:hover,.final .btn-lime:hover{transform:translateY(-1px);box-shadow:0 1px 8px rgba(14,36,85,.14)}

@media (prefers-reduced-motion:reduce){
  .ln>span,.rv-on .asienta>*{transform:none !important;transition:opacity .3s ease}
  .mf-frase .w{opacity:1}
  .banda-foto,.cap-foto img,.cap-foto video{animation:none}
  .ind img,.ind video{transform:none}
}

/* modo oscuro: las fotos ya son oscuras; sólo se ajusta el manifiesto y las tarjetas */
:root[data-theme="dark"] .ind,:root[data-theme="dark"] .cap-foto{box-shadow:none}
@media (prefers-color-scheme:dark){:root:not([data-theme="light"]) .ind,:root:not([data-theme="light"]) .cap-foto{box-shadow:none}}

/* ---------- Qué construimos: cada rubro con su escena ---------- */
.rub-layout{display:grid;grid-template-columns:1fr 1.05fr;gap:clamp(32px,5vw,64px);align-items:start;margin-top:52px}
.rub-layout .rubros{margin-top:0}
.rub-media{position:sticky;top:112px;aspect-ratio:4/3;border-radius:18px;overflow:hidden;background:#0E2455;
  box-shadow:0 40px 90px -40px rgba(14,36,85,.35)}
.rub-media video{position:absolute;inset:0;width:100%;height:100%;object-fit:cover;filter:saturate(.85);
  opacity:0;transform:scale(1.04);transition:opacity .6s var(--sale),transform 1.4s var(--suave)}
.rub-media video.on{opacity:1;transform:none}
@media(max-width:900px){
  .rub-layout{grid-template-columns:1fr;margin-top:38px}
  .rubro .rub-media{position:relative;top:auto;aspect-ratio:16/10;margin-top:18px;box-shadow:none}
}
@media (prefers-reduced-motion:reduce){.rub-media video{transition:opacity .3s ease;transform:none}}

/* ---------- Tablero de dirección ----------
   Una sola cifra protagonista, una curva y tres indicadores. Tarjeta de
   producto sobre una oficina desenfocada en marino: se lee como pantalla
   real, no como adorno. */
.tablero-escena{margin:0;position:relative;border-radius:18px;overflow:hidden;aspect-ratio:4/5;
  background:#0E2455 url('tablero-fondo.102e4828.webp') center/cover;display:flex;flex-direction:column;
  align-items:center;justify-content:center;padding:clamp(22px,4vw,44px)}
.tablero-escena figcaption{position:absolute;left:0;right:0;bottom:14px;text-align:center;
  font:500 .68rem var(--mono);letter-spacing:.08em;color:rgba(255,255,255,.55)}
.tablero{width:100%;max-width:400px;background:#FFFFFF;color:#0E2455;border-radius:16px;
  padding:22px 22px 0;box-shadow:0 40px 80px -30px rgba(4,10,30,.6),0 0 0 1px rgba(255,255,255,.08);
  font-family:var(--body)}
.tb-top{display:flex;justify-content:space-between;align-items:center;gap:12px}
.tb-k{font:500 .66rem var(--mono);letter-spacing:.14em;text-transform:uppercase;color:#6B7690}
.tb-vivo{display:flex;align-items:center;gap:7px;font-size:.72rem;color:#6B7690;white-space:nowrap}
.tb-vivo i{width:6px;height:6px;border-radius:50%;background:#0E2455;position:relative}
.tb-vivo i::after{content:"";position:absolute;inset:-4px;border-radius:50%;border:1px solid #0E2455;opacity:0;animation:tb-pulso 2.4s ease-out infinite}
@keyframes tb-pulso{0%{opacity:.6;transform:scale(.5)}100%{opacity:0;transform:scale(1.6)}}
.tb-main{margin-top:22px}
.tb-l{display:block;font-size:.8rem;color:#6B7690}
.tb-v{display:block;margin-top:6px;font-family:var(--disp);font-weight:600;font-size:clamp(2rem,3.4vw,2.5rem);
  letter-spacing:-.035em;line-height:1;color:#0E2455;font-variant-numeric:tabular-nums}
.tb-meta{display:flex;justify-content:space-between;margin-top:12px;font-size:.74rem;color:#6B7690;font-variant-numeric:tabular-nums}
.tb-barra{margin-top:8px;height:4px;border-radius:4px;background:rgba(14,36,85,.08);overflow:hidden}
.tb-barra i{display:block;height:100%;background:#0E2455;border-radius:4px;transform-origin:left;transform:scaleX(.9);transition:transform 1.2s var(--sale)}
.tb-graf{height:120px;margin:22px -4px 0;color:#0E2455}
.tb-graf svg{display:block;overflow:visible}
.tb-halo{fill:currentColor;opacity:.12;transform-box:fill-box;transform-origin:center;animation:tb-halo 2.4s ease-in-out infinite}
@keyframes tb-halo{0%,100%{opacity:.14}50%{opacity:.04}}
.tb-eje{display:flex;justify-content:space-between;margin-top:8px;font:500 .62rem var(--mono);letter-spacing:.1em;text-transform:uppercase;color:#98A1B6}
.tb-kpis{display:grid;grid-template-columns:repeat(3,1fr);margin:20px -22px 0;border-top:1px solid rgba(14,36,85,.08)}
.tb-kpis>div{padding:16px 0 18px 22px}
.tb-kpis>div+div{border-left:1px solid rgba(14,36,85,.08);padding-left:16px}
.tb-kpis span{display:block;font-size:.68rem;color:#6B7690;line-height:1.3}
.tb-kpis b{display:block;margin-top:6px;font-family:var(--disp);font-weight:600;font-size:1.18rem;letter-spacing:-.02em;color:#0E2455;font-variant-numeric:tabular-nums}
.tb-kpis em{display:block;margin-top:2px;font-style:normal;font:500 .64rem var(--mono);color:#98A1B6}
@media(max-width:900px){.tablero-escena{aspect-ratio:auto;padding:34px 18px 46px}}
@media (prefers-reduced-motion:reduce){.tb-vivo i::after,.tb-halo{animation:none}}
/* sin rubro activo, el panel no se ve; en el teléfono ni siquiera ocupa lugar */
.rub-media{opacity:0;transition:opacity .45s var(--sale)}
.rub-media.activo{opacity:1}
@media(max-width:900px){.rub-layout>.rub-media{display:none}}
/* el tablero como escena del rubro de Inteligencia de negocio */
.rub-media{aspect-ratio:1/1}
.rub-media .rub-capa{position:absolute;inset:0;aspect-ratio:auto;border-radius:0;opacity:0;padding:28px;
  transition:opacity .6s var(--sale)}
.rub-media .rub-capa.on{opacity:1}
.rub-capa .tablero{max-width:380px;padding:18px 18px 0}
.rub-capa .tb-main{margin-top:16px}
.rub-capa .tb-graf{height:92px;margin-top:16px}
.rub-capa .tb-kpis{margin:16px -18px 0}
.rub-capa .tb-kpis>div{padding:13px 0 14px 18px}
.rub-capa .tb-kpis>div+div{padding-left:13px}
@media(max-width:900px){
  .rubro .rub-media{aspect-ratio:16/10}
  .rubro .rub-media:has(.rub-capa.on){aspect-ratio:auto}
  .rubro .rub-media .rub-capa.on{position:relative;padding:26px 14px}
}

/* ---------- Idioma: ES / EN ---------- */
.idioma{display:inline-flex;align-items:center;justify-content:center;height:38px;padding:0 12px;border-radius:99px;
  font:500 .72rem var(--mono);letter-spacing:.14em;color:var(--txt);border:1px solid var(--hair2);
  transition:border-color .16s ease,background .16s ease,color .16s ease}
.idioma:hover{border-color:var(--navy)}
.ente-oscuro .idioma{color:#fff;border-color:rgba(255,255,255,.45)}
.ente-claro .idioma{color:#0E2455;border-color:rgba(14,36,85,.3)}
@media(max-width:560px){.nav-r .idioma{display:none}}
.menu-sheet .ms-idioma b{font-family:var(--mono);font-weight:500;font-size:.8rem;letter-spacing:.12em;text-transform:uppercase;color:var(--dim)}

/* aviso de privacidad al abrir el chat: pequeño, sin competir con la conversación */
.cp-aviso{display:flex;align-items:flex-start;gap:14px;margin:2px 0 14px;padding:12px 14px;border-radius:12px;
  background:rgba(255,255,255,.05);border:1px solid rgba(255,255,255,.12);
  font-size:.72rem;line-height:1.5;color:rgba(216,222,234,.8);transition:opacity .25s ease,transform .25s ease}
.cp-aviso p{margin:0;flex:1}
.cp-aviso a{color:inherit;text-decoration:underline;text-underline-offset:2px}
.cp-aviso-ok{flex:none;align-self:center;padding:6px 12px;border-radius:99px;border:1px solid rgba(255,255,255,.3);
  background:none;color:#fff;font:500 .7rem var(--body);cursor:pointer;transition:background .16s ease,border-color .16s ease}
.cp-aviso-ok:hover{background:rgba(255,255,255,.1);border-color:rgba(255,255,255,.5)}
.cp-aviso.fuera{opacity:0;transform:translateY(-4px)}

/* SÓLO VISTA PREVIA: datos que faltan antes de publicar */
mark.falta{background:#FFE8A3;color:#0E2455;padding:0 .2em;border-radius:3px}

/* ---------- Recuadros grandes para video (22 oct) ----------
   El video es 16:9: en recuadro horizontal se ve completo, sin recortes,
   y a dos columnas cada uno ocupa casi el doble que en la cuadrícula de tres. */
@media(min-width:821px){
  .ind-grid{grid-template-columns:repeat(2,1fr);gap:20px}
  .ind{aspect-ratio:16/10;border-radius:20px}
  .ind figcaption{left:28px;right:28px;bottom:26px}
  .ind figcaption b{font-size:1.32rem}
  .ind figcaption span{font-size:.92rem;margin-top:6px}
}
.ind img,.ind video{filter:saturate(.88) contrast(1.04)}
.ind::after{background:linear-gradient(180deg,rgba(8,18,44,0) 50%,rgba(8,18,44,.78) 100%)}
@media(max-width:820px){.ind{flex-basis:86%;aspect-ratio:4/5}}
@media(min-width:901px){
  .rub-layout{grid-template-columns:minmax(0,.8fr) minmax(0,1.2fr)}
  .rub-media{aspect-ratio:auto;height:min(76vh,720px);top:96px;border-radius:20px}
}
.rub-media video{filter:saturate(.9) contrast(1.04)}
.banda{min-height:clamp(32rem,56vw,48rem)}
.banda-foto{filter:saturate(.8)}

/* ---------- Video sin trabas (22 oct, segunda vuelta) ----------
   Un filtro CSS sobre un <video> obliga al navegador a repintar cada cuadro
   fuera de la tarjeta de video y se nota como tirones al hacer scroll. El
   color ya viene bien del original: sin filtros ni escalas sobre el video. */
.ind img,.ind video,.rub-media video{filter:none;transform:none;transition:none}
.asienta.in .ind video{transform:none}
.ind{background:#0A1A40;isolation:isolate}
/* Qué construimos: una sola escena fija, siempre a la vista */
.rub-media.escena{opacity:1;background:#fff;box-shadow:0 50px 100px -50px rgba(10,22,52,.3)}
.rub-media.escena video{opacity:1}
@media(max-width:900px){
  .rub-layout>.rub-media.escena{display:block;position:relative;top:auto;height:auto;aspect-ratio:16/10;margin-top:8px;border-radius:16px}
}
/* Cómo trabajamos: franja de color sólido, sin video */
.banda{background:radial-gradient(120% 140% at 0% 100%,#18347A 0%,#0E2455 48%,#0A1A40 100%);min-height:clamp(26rem,40vw,34rem)}
.banda::before{display:none}

/* en modo oscuro la escena va en marino, como la página */
:root[data-theme="dark"] .rub-media.escena{background:#0B1C46;box-shadow:none}
@media (prefers-color-scheme:dark){:root:not([data-theme="light"]) .rub-media.escena{background:#0B1C46;box-shadow:none}}

/* ---------- Cuadros de cierre de sección (22 oct) ----------
   Calculadora en el inicio y diagnóstico en Qué construimos y Cómo trabajamos:
   más cerca de lo que está arriba, y texto y botones juntos a la izquierda,
   para que el cuadro se lea como una sola pieza. */
.any{margin-top:44px;justify-content:flex-start;gap:20px 28px}
.any .grow{flex:0 1 31em;min-width:260px}
.any .btn{flex:none}



/* ---------- Cierre de Qué construimos (22 oct) ----------
   La calculadora sigue debajo del diagnóstico, igual que antes, pero pegada a él. */
.cierre .puerta{margin-top:16px}
