/* Capa de adaptación del DS a WordPress. No repite nada de bundle.css. */
:focus-visible{outline:2px solid var(--focus);outline-offset:3px}
/* D-15: H1 visible desde el primer pintado. El efecto recorre letras ya visibles (atenuado → color final). */
.hero h1 .ch{color:var(--d-ink-3)}
.hero h1 .ch.on{color:inherit}
.wp-site-blocks{padding:0}

/* Menú: submenús (desplegable «Sectores») y menú móvil. Se ocultan solo bajo .menu-js, la clase que
   pone el propio bloque de alsis-front.js al arrancar (ronda 1, hallazgo R16) -- no la 'js' de modo.js, que se
   marca en cuanto se carga ese script y no garantiza que el menú llegue a engancharse (p. ej. si bundle.js, del
   que sí depende modo.js indirectamente vía Alsis.init(), fallara). Sin esa clase (JS no cargado o roto) el botón
   no aparece y los enlaces de la barra siguen a la vista (con desplazamiento horizontal a ≤1080 px). */
.navbar .sub{position:relative}
.navbar .sub-t{background:none;border:0;font:inherit;color:rgba(238,241,248,.7);cursor:pointer;padding:0}
.menu-js .navbar .sub ul{display:none}
.menu-js .navbar .sub-t[aria-expanded="true"]+ul{display:grid;position:absolute;top:calc(100% + 12px);left:-16px;min-width:220px;gap:10px;padding:16px;margin:0;list-style:none;background:var(--deep-2);border-radius:var(--radius-md)}
/* ORDEN-21 · menú móvil. Botón y cerrar: los de prototipo/assets/proto.css (.p-burger/.p-close). Panel: lienzo/MenuMovil.dc.html. */
.navbar .burger,.menu-m-cerrar{display:none;width:44px;height:44px;place-items:center;border:0;border-radius:8px;background:rgba(255,255,255,.08);color:var(--d-ink);cursor:pointer;padding:0;pointer-events:auto}
.navbar .burger svg,.menu-m-cerrar svg{width:20px;height:20px;stroke:currentColor;stroke-width:1.6;fill:none;stroke-linecap:round}
@media (max-width:1080px){
  html:not(.menu-js) .navbar .links{display:flex;overflow-x:auto}
  .menu-js .navbar .burger{display:inline-grid}
}
.menu-m-cerrar{display:inline-grid;margin-left:auto}
.menu-m{position:fixed;inset:0;z-index:60;pointer-events:auto;isolation:isolate;overflow:auto;box-sizing:border-box;display:flex;flex-direction:column;padding:calc(env(safe-area-inset-top,0px) + 16px) clamp(12px,3vw,40px) 28px;background:var(--deep);color:var(--d-ink)}
.menu-m[hidden]{display:none}
@media (min-width:1081px){.menu-m{display:none}}
body.menu-abierto{overflow:hidden}
@media (prefers-reduced-motion:no-preference){.menu-m:not([hidden]){animation:alsis-menu-m .15s ease-out}}
@keyframes alsis-menu-m{from{opacity:0}}
.menu-m-red{position:absolute;inset:0;width:100%;height:100%;z-index:-1;pointer-events:none;-webkit-mask-image:radial-gradient(80% 60% at 50% 40%,#000 30%,transparent 100%);mask-image:radial-gradient(80% 60% at 50% 40%,#000 30%,transparent 100%)}
.menu-m-red .l{stroke:rgba(255,255,255,.05);stroke-width:1}
.menu-m-red .ns{fill:#FF7A2E}.menu-m-red .ts{stroke:#FF7A2E;stroke-width:1;opacity:.55}
.menu-m-red .nd{fill:#2FC2BA}.menu-m-red .td{stroke:#2FC2BA;stroke-width:1;opacity:.55}
.menu-m-top{flex:none;display:flex;align-items:center;gap:8px;height:66px;padding:0 10px 0 14px;border-radius:12px;background:rgba(14,21,50,.5);box-shadow:inset 0 0 0 1px rgba(255,255,255,.06)}
.menu-m-top .logo{display:block}
.menu-m-top .logo img{height:30px;width:auto;display:block}
.menu-m nav{margin-top:40px;padding-inline:8px}
.menu-m ul{list-style:none;margin:0;padding:0;border-bottom:1px solid var(--d-line)}
.menu-m li{border-top:1px solid var(--d-line)}
.menu-m nav a,.menu-m .grupo>span{display:flex;align-items:center;gap:14px;min-height:64px;text-decoration:none;font-family:var(--font-display);font-size:32px;line-height:1;letter-spacing:-.03em;color:var(--d-ink)}
.menu-m nav a:hover{color:var(--d-ink)}
.menu-m .sq{width:10px;height:10px;border-radius:2px}
.menu-m .sq-v{display:inline-block;width:10px;flex:none}
.menu-m .fl{margin-left:auto;width:16px;height:16px;flex:none;stroke:var(--d-ink-3);stroke-width:1.5;fill:none}
.menu-m .grupo ul{border:0;margin:0 0 12px 24px}
.menu-m .grupo li{border:0}
.menu-m .grupo li a{min-height:44px;font-size:22px}
.menu-m-pie{margin-top:auto;padding:32px 8px 0;display:flex;flex-direction:column;gap:20px}
.menu-m-fila{display:flex;align-items:center;justify-content:space-between;gap:16px}
/* ORDEN-34 (D-128): selector de idioma del menú móvil (lienzo/MenuMovil.dc.html:53); en ese ancho, el del pie no se ve */
.menu-m nav.idioma{margin:0;padding:0;display:flex;gap:4px;color:var(--d-ink-3)}
.menu-m nav.idioma a{display:inline-flex;align-items:center;min-height:44px;padding:0 8px;font:inherit;letter-spacing:inherit;color:inherit;text-decoration:none}
.menu-m nav.idioma a[aria-current]{color:var(--d-ink)}
@media (max-width:1080px){.menu-js .alsis-idioma-pie{display:none}}
.menu-m .switch{gap:12px;padding:0;color:var(--d-ink-2)}
.menu-m .switch .mono{display:inline}
.menu-m-pie .btn{justify-content:center;min-height:52px}
.menu-m-pie p{margin:0;text-align:center;font-size:15px;color:var(--d-ink-3)}
.menu-m-pie p a{color:var(--d-ink)}

/* D-61: los enlaces de las migas (alsis/migas, p.crumbs) van subrayados en todas las plantillas: sin subrayado, axe da
   link-in-text-block (serious). prototipo.css (generado, se carga después) les quita el subrayado con
   :where(…) .crumbs a (0,1,1); [href] sube a 0,2,1 sin !important. El color sigue siendo el del prototipo (el subrayado
   toma currentColor) y el foco, el :focus-visible común de arriba. Desfase de 4 px como .pr-clear (t09.css). */
.crumbs a[href]{text-decoration:underline;text-underline-offset:4px}

/* Movimiento reducido: se conservan las transiciones de color (spec-08 §9 H8). */
@media (prefers-reduced-motion:reduce){body,.deep,a{transition:color var(--dur-slow,.5s),background-color var(--dur-slow,.5s)!important}}

/* Estados E del formulario (alsis/formulario). Copia literal de prototipo/Estados-Formularios.html:87-113; --err de :73 (los
   formularios van sobre deep). Los textos de cada estado salen del servidor con `hidden`, que debe ganar a los display de abajo. */
form[data-endpoint]{--err:var(--sense-l)}
form[data-endpoint] [hidden]{display:none!important}
.ff.is-err input,.ff.is-err textarea{border-bottom:2px solid var(--err);padding-bottom:7px}
.errmsg{display:flex;gap:8px;align-items:flex-start;font-size:13px;line-height:1.45;color:var(--err);margin-top:2px}
.errmsg svg{flex:none;width:16px;height:16px;margin-top:1px}
.check.is-err input{box-shadow:inset 0 0 0 2px var(--err)}
.check+.errmsg{margin:-4px 0 0 32px}
/* D-122 (ORDEN-31): captcha ALTCHA con los colores de los formularios (van sobre deep): sin tarjeta blanca, casilla como
   .check, verde de marca al comprobar y el --err de los campos con error. Solo variables del widget; su maqueta no cambia. */
.alsis-captcha altcha-widget{--altcha-color-base:transparent;--altcha-color-base-content:var(--d-ink-2);--altcha-border-color:rgba(255,255,255,.18);--altcha-color-neutral:rgba(255,255,255,.3);--altcha-color-neutral-content:var(--d-ink-2);--altcha-checkbox-border-color:rgba(255,255,255,.3);--altcha-checkbox-border-radius:4px;--altcha-color-primary:var(--raw);--altcha-color-primary-content:var(--on-raw);--altcha-color-success:var(--raw);--altcha-color-success-content:var(--on-raw);--altcha-color-error:var(--err);--altcha-checkbox-outline-color:var(--raw-l);--altcha-checkbox-outline:2px solid var(--raw-l);--altcha-input-background-color:transparent;--altcha-input-color:var(--d-ink);--altcha-spinner-color:var(--raw-l);--altcha-shadow:none;--altcha-border-radius:12px;display:block}
.alsis-captcha.is-err altcha-widget{--altcha-border-color:var(--err);--altcha-checkbox-border-color:var(--err)}
.alsis-captcha .errmsg{margin-top:8px}
/* VEREDICTO-31, ajuste 2: un tramo del horario de /contacto/ («15:00 – 18:00») no se parte de línea. */
.alsis-tramo{white-space:nowrap}
.st-sum{grid-column:1/-1;display:grid;grid-template-columns:18px minmax(0,1fr);gap:12px;padding:16px 18px;border-radius:12px;background:rgba(255,122,46,.08);box-shadow:inset 0 0 0 1px rgba(255,122,46,.4);color:var(--d-ink);font-size:14px;line-height:1.5;margin-bottom:10px}
.st-sum svg{width:18px;height:18px;color:var(--err);margin-top:1px}
.st-sum ul{margin:6px 0 0;padding:0;list-style:none;display:grid;gap:2px}
.st-sum a{color:var(--d-ink-2)}
.fcard.is-busy .ff input,.fcard.is-busy .ff textarea,.fcard.is-busy .check{opacity:.55}
.btn[disabled]{opacity:.6;cursor:default;pointer-events:none}
.st-busy{display:inline-flex;align-items:center;gap:10px}
.st-busy i{width:12px;height:12px;border-radius:50%;box-shadow:inset 0 0 0 1.5px rgba(6,16,25,.35);border-top:1.5px solid var(--on-raw);display:inline-block}
.st-done{grid-column:1/-1;display:flex;flex-direction:column;gap:22px;padding-block:8px 4px}
.st-done .ic{width:40px;height:40px;color:var(--raw-l)}
.st-done .ic svg{width:40px;height:40px}
.st-done h2,.st-done h3{font-size:36px;line-height:1.08;letter-spacing:-.03em;color:var(--d-ink);max-width:16ch}
.st-done p{color:var(--d-ink-2);font-size:17px;max-width:46ch}
.st-done ol{margin:0;padding:0;list-style:none;border-bottom:1px solid var(--d-line)}
.st-done li{display:grid;grid-template-columns:44px minmax(0,1fr);gap:12px;padding-block:16px;border-top:1px solid var(--d-line);color:var(--d-ink-2);font-size:16px}
.st-done li .mono{color:var(--d-ink-3);padding-top:4px}
.st-done li b{color:var(--d-ink);font-weight:400}
.st-done .btn{width:fit-content;justify-self:start}
.st-alert{grid-column:1/-1;display:grid;grid-template-columns:18px minmax(0,1fr);gap:12px;padding:18px 20px;border-radius:12px;background:rgba(255,122,46,.08);box-shadow:inset 0 0 0 1px rgba(255,122,46,.4);font-size:15px;line-height:1.5;color:var(--d-ink-2);margin-top:18px}
.st-alert svg{width:18px;height:18px;color:var(--err);margin-top:2px}
.st-alert b{display:block;color:var(--d-ink);font-weight:500;margin-bottom:4px}
.st-alert a{color:var(--d-ink)}
.em-file.is-err .em-drop{box-shadow:inset 0 0 0 2px var(--err)}

/* Calculadora fuera de rango (alsis/calculadora). Copia de prototipo/Estados-Formularios.html:126-130; --err sobre claro = sense-t (:72).
   `hidden` debe ganar al display:flex de .errmsg. La transición del rango queda anulada por el
   prefers-reduced-motion global de ds/bundle.css:323. */
.calc{--err:var(--sense-t)}
.calc .errmsg[hidden]{display:none}
.field.is-err{border-bottom:2px solid var(--err);padding-bottom:15px}
.field .errmsg{margin-top:0}
.result.is-empty .big{color:var(--d-ink-3)}
.result .rows b.dim{color:var(--d-ink-3)}
.result{--err:var(--sense-l)}
.result form .st-sum,.result form .errmsg,.result form .st-alert,.result form .st-done{grid-column:1/-1}

/* alsis/tabs en modo navegación (D-41): nav > a en lugar de div[role=tablist] > button. Las reglas de .tabs button
   de ds/bundle.css (.tabs, .deep .tabs) no alcanzan a los enlaces: se repiten sus valores para nav.tabs a, y el
   «actual» (aria-current, lo pone view.js según el scroll) toma el estilo del botón aria-selected=true. */
.alsis-tabs-nav>nav a{min-height:38px;padding:0 16px;border-radius:8px;background:transparent;box-shadow:inset 0 0 0 1px var(--line-2);color:var(--ink-3);display:inline-flex;align-items:center;gap:10px;text-decoration:none;transition:background-color .25s,color .25s}
.alsis-tabs-nav>nav a .sq{opacity:.8}
.alsis-tabs-nav>nav a[aria-current]{background:var(--ink);color:var(--bg);box-shadow:none}
.deep .alsis-tabs-nav>nav a{box-shadow:inset 0 0 0 1px rgba(255,255,255,.14);color:var(--d-ink-2)}
.deep .alsis-tabs-nav>nav a[aria-current]{background:var(--d-ink);color:var(--deep)}
/* Fija al hacer scroll, sin JS. El sticky va en el nav, hijo directo del contenedor que también envuelve las secciones,
   así que se queda fijo mientras duran ellas. Ningún ancestro de canvas.gf gana transform/filter/contain (D-26).
   --alsis-tabs-top: dónde se para; por defecto bajo la cabecera fija del tema (.navbar: safe-area + 16 px, .bar de
   66 px) con 12 px de aire. Una plantilla con otra cabecera lo redefine en un ancestro. El fondo opaco es el de la
   sección y el box-shadow lo amplía 12 px arriba y abajo sin mover la maquetación. */
.alsis-tabs-nav>nav{--alsis-tabs-fondo:var(--bg);position:sticky;top:var(--alsis-tabs-top,calc(env(safe-area-inset-top,0px) + 94px + 12px));z-index:5;background:var(--alsis-tabs-fondo);box-shadow:0 -12px 0 var(--alsis-tabs-fondo),0 12px 0 var(--alsis-tabs-fondo)}
.deep .alsis-tabs-nav>nav{--alsis-tabs-fondo:var(--deep)}
/* Al saltar a una sección, que no quede bajo cabecera + pestañas (38 px de alto + 24 de aire). */
.alsis-tabs-nav>.alsis-tabs-seccion{scroll-margin-top:calc(var(--alsis-tabs-top,calc(env(safe-area-inset-top,0px) + 94px + 12px)) + 38px + 24px)}

/* alsis/tabs en modo filtro (D-42): botones con aria-pressed (no son pestañas: no hay tabpanels). El pulsado toma el
   estilo del botón aria-selected=true de ds/bundle.css (.tabs y .deep .tabs). Lo oculto por el filtro lleva hidden. */
.alsis-tabs-filtro-barra .tabs button[aria-pressed="true"]{background:var(--ink);color:var(--bg);box-shadow:none}
.deep .alsis-tabs-filtro-barra .tabs button[aria-pressed="true"]{background:var(--d-ink);color:var(--deep)}
.alsis-tabs-filtro [data-grupo][hidden]{display:none}

/* Tanda E (E-2): en el estado «enviado» del formulario completo se ocultan los motivos; en form.final-in (2 columnas desde
   901 px, ds/bundle.css) la tarjeta se queda en la segunda columna en vez de saltar a la izquierda. */
@media (min-width:901px){form.final-in[data-estado="enviado"]>.fcard{grid-column:2}}

/* ORDEN-26 (D-90): «Síguenos» en la primera columna del pie, bajo la dirección: rótulo .mono como el de las otras columnas
   e iconos en fila con el color de los enlaces del pie (.foot a). Área de toque de 44 px (REQ-031). */
.foot .redes{margin-top:28px}
.foot .redes ul{display:flex;flex-wrap:wrap;gap:4px;margin:-12px 0 0 -12px}
.foot .redes a{display:grid;place-items:center;width:44px;height:44px;color:var(--d-ink-2)}
.foot .redes a:hover{color:var(--d-ink)}
.foot .redes svg{display:block}

/* ORDEN-26 (D-100): muros de logotipos (.lgrid, home y Empresa) sin celdas vacías: la rejilla del DS coloca tantas celdas
   como entradas y la última fila queda a la izquierda. Una entrada con enlace (CONETIC) se ve igual que las demás. */
.lgrid a{color:inherit;text-decoration:none}

/* ORDEN-27 (D-103): muros con logotipo. Misma caja para todos (contain, centrado). En reposo, el monocromo (span con el
   logotipo-máscara en --lg) pintado con el gris del sistema (--ink-3, que en modo noche es el claro); al pasar el ratón o
   con foco, el de color (img, que lleva el nombre en alt). En modo noche el color se ve mal sobre el fondo oscuro: al
   pasar el ratón el monocromo sube a --ink en vez de cambiar a color. */
.lgrid .lg{position:relative;display:block;width:min(100%,200px);height:64px;margin:0 auto}
.lgrid .lg img{display:block;width:100%;height:100%;object-fit:contain;opacity:0;transition:opacity .3s}
.lgrid .lg span{position:absolute;inset:0;background:var(--ink-3);-webkit-mask:var(--lg) center/contain no-repeat;mask:var(--lg) center/contain no-repeat;transition:opacity .3s,background-color .3s}
.lgrid div:hover .lg img,.lgrid .lg:focus-visible img{opacity:1}
.lgrid div:hover .lg span,.lgrid .lg:focus-visible span{opacity:0}
[data-theme=noche] .lgrid div:hover .lg img,[data-theme=noche] .lgrid .lg:focus-visible img{opacity:0}
[data-theme=noche] .lgrid div:hover .lg span,[data-theme=noche] .lgrid .lg:focus-visible span{opacity:1;background:var(--ink)}
.lgrid div small{max-width:24ch;margin:0 auto}
@media (max-width:900px){ .lgrid .lg{height:52px} }

/* ORDEN-27 (D-105): publicidad de las ayudas con los logos oficiales (los de las cabeceras de los PDF, compuestos y con
   fondo blanco). En /i-d-i/ (.id-logo-ayuda) y en las fichas de proyecto (.pub-ayuda): a todo el ancho, sobre placa blanca
   también en modo noche (los logos oficiales no se recolorean), a la misma altura. El PDF, como enlace de descarga. */
.id-logos:has(.id-logo-ayuda){grid-template-columns:minmax(0,1fr)!important}
.id-logo.id-logo-ayuda{min-height:0;padding:12px 16px;background:#fff;justify-content:start}
.id-logo-ayuda img,.pub-ayuda .logos img{display:block;height:auto;max-height:56px;width:auto;max-width:100%}
.id-pub .doc{margin-top:16px;font-size:15px}
.id-pub .doc a,.pub-ayuda .doc a{color:var(--ink);text-underline-offset:3px}
.pub-ayuda .logos{display:flex;flex-direction:column;align-items:flex-start;gap:12px;padding:12px 16px;border-radius:8px;background:#fff;box-shadow:inset 0 0 0 1px var(--line)}
.pub-ayuda .logos figure{margin:0}
.pub-ayuda .leg{font-size:14px;color:var(--ink-3);margin-top:16px;max-width:64ch}

/* ORDEN-27 (D-102): /salud/ y el bloque «Más allá de la industria» de Alsis Omni. Tarjetas de productos de Salud a dos
   columnas (Omni y Orienta, sin hueco); rótulo de los tres pasos de la suite; línea de contexto, botones y aviso literal
   de alsisomni.com en pequeño. */
.sl-g2{grid-template-columns:repeat(2,minmax(0,1fr))!important}
@media (max-width:600px){ .sl-g2{grid-template-columns:minmax(0,1fr)!important} }
.sl-k{margin-top:36px;color:var(--d-ink-3)}
.sl-aviso-t,.om-aviso{font-size:13px;line-height:1.5;color:var(--ink-3);max-width:80ch}
.om-ctx{margin-top:32px;color:var(--ink-2);max-width:72ch}
.om-btns{margin-top:24px}
.om-aviso{margin-top:24px}

/* ORDEN-28 (D-109, D-114): portal del profesional de /salud/ (tres puntos, con las líneas de las fichas de specs), los
   cuatro módulos de la Suite Omni sin hueco (4 · 2 · 1 columnas) y la línea final de la tarjeta de Omni en Industria. */
.sl-lista{list-style:none;margin:8px 0 0;padding:0;color:var(--d-ink-2);border-bottom:1px solid var(--d-line)}
.sl-lista li{padding-block:12px;border-top:1px solid var(--d-line)}
.sl-g4{grid-template-columns:repeat(4,minmax(0,1fr))!important}
@media (max-width:1100px){ .sl-g4{grid-template-columns:repeat(2,minmax(0,1fr))!important} }
@media (max-width:600px){ .sl-g4{grid-template-columns:minmax(0,1fr)!important} }
.sc-nota{margin-top:24px;color:var(--d-ink-2);max-width:56ch}
/* ORDEN-28 (D-114): «Rehabilitación» en la ficha de Alsis Omni: rótulos, las cinco actividades en una lista compacta y
   el portal del profesional, con el mismo gris y ritmo que la línea de contexto (.om-ctx). */
.om-k{display:block;margin-top:32px;color:var(--ink-3)}
.om-lista{list-style:none;margin:10px 0 0;padding:0;display:flex;flex-wrap:wrap;gap:8px 28px;color:var(--ink)}
.om-txt{margin-top:10px;color:var(--ink-2);max-width:72ch}

/* ORDEN-27 (D-106): «Empresa» desplegable en la barra. Mismo texto y color que los enlaces (.links a), con un chevrón que
   gira al abrir; el panel (.sub ul, ya definido arriba) con los enlaces en una columna y la página actual en blanco. */
.navbar .sub-t{display:inline-flex;align-items:center;gap:6px;transition:color .2s}
.navbar .sub-t::after{content:"";width:6px;height:6px;border-right:1.5px solid currentColor;border-bottom:1.5px solid currentColor;transform:translateY(-2px) rotate(45deg);transition:transform .2s}
.navbar .sub-t:hover,.navbar .sub-t[aria-expanded="true"]{color:#fff}
.navbar .sub-t[aria-expanded="true"]::after{transform:translateY(1px) rotate(-135deg)}
.navbar .sub-t:focus-visible{outline:2px solid var(--accent,#2FC2BA);outline-offset:4px;border-radius:2px}
.navbar .sub ul li{list-style:none}
.navbar .sub ul a{display:block;white-space:nowrap}
.navbar .sub ul a[aria-current="page"]{color:#fff}
