/* ===================================================================
   VELNOX.ai - hoja puente entre Elementor y la plantilla Orizon
   -------------------------------------------------------------------
   Los elementos atomicos de Elementor (e-div-block, e-heading, e-paragraph,
   e-button, e-image) emiten el marcado limpio con las clases de Orizon en el
   propio elemento, asi que orizon.css (prefijada con .elementor, ver
   construir-tema.py) los estila sola. Lo que queda aqui es lo que Elementor
   anade por su cuenta y Orizon no espera.

   ORDEN Y ESPECIFICIDAD
   Esta hoja carga DESPUES de las de Elementor y ANTES de orizon.css. Todo va a
   0-2-0 (.elementor .algo): gana a lo de Elementor por orden y pierde contra
   Orizon por orden. Nunca 0-3-0: pisaria a la plantilla.

   Se construye desde el repo (wordpress/tema-hijo/). No se edita en el
   servidor.
   =================================================================== */

/* 1. Lo que frontend.css le da a todo .e-con (tambien a los atomicos):
   padding y gap por defecto del kit (10px / 20px), width:100%, min-height,
   max-width en los de primer nivel, transiciones... Se devuelve todo al
   valor inicial del CSS, y las clases de Orizon ponen lo suyo encima. */
.elementor .e-atomic-element {
  --padding-top: 0; --padding-right: 0; --padding-bottom: 0; --padding-left: 0;
  --padding-block-start: 0; --padding-block-end: 0;
  --padding-inline-start: 0; --padding-inline-end: 0;
  --margin-top: 0; --margin-right: 0; --margin-bottom: 0; --margin-left: 0;
  --margin-block-start: 0; --margin-block-end: 0;
  --margin-inline-start: 0; --margin-inline-end: 0;
  --gap: normal; --row-gap: normal; --column-gap: normal;
  /* 🔴 `--width` TAMPOCO se neutraliza. Elementor declara `.e-con { --width: 100% }`
     y lo consume con `width: var(--width)`. Forzarlo a `auto` hace que el
     contenedor se encoja a su contenido, y eso rompe el LAZY LOADING en cadena:
     contenedor sin ancho -> el <img> lazy nunca entra en viewport -> no carga
     -> sigue sin ancho intrinseco -> el contenedor sigue a 0.
     Medido el 31/08 en #solutions: de las tres ilustraciones solo cargaba la
     primera -- la unica sin `loading="lazy"` --; las otras dos se quedaban en
     0x0 con naturalWidth 0. Se veian como tarjetas sin imagen.
     Orizon pone sus propios anchos donde le hace falta, asi que dejarle el
     100% a Elementor no le quita nada. */
  --min-height: auto; --height: auto;
  /* 🔴 `--position` NO se neutraliza, y esto costo los botones del hero (31/08).
     Elementor declara `.e-con { --position: relative }` y lo consume con
     `position: var(--position)`. No es decorativo: es lo que hace que el
     `::before` del OVERLAY de fondo se posicione contra su contenedor.
     Con `static` ese pseudo-elemento pierde su ancestro posicionado y se
     coloca contra el DOCUMENTO: medido en la pagina servida, el overlay de
     una seccion del pie salia 1905x945 -- el viewport entero -- y tapaba
     TODA la pagina. Los dos botones del hero no respondian al clic, y se
     confirmo ocultando ese elemento: volvian a ser clicables.
     `relative` sin offsets no mueve nada de sitio, solo crea el contexto,
     asi que dejarselo a Elementor no afecta a la maqueta de Orizon. */
  --z-index: auto; --overflow: visible; --text-align: inherit;
  --border-radius: 0;
  padding: 0;
  margin: 0;
  gap: normal;
  width: auto;
  max-width: none;
  min-width: 0;
  min-height: auto;
  height: auto;
  /* ⚠️ Este `position: static` es el que costo los botones del hero, y sigue aqui
     SOLO porque este bloque ya no alcanza a nada: el sitio no usa elementos
     atomicos desde el 29/08 -- la portada paso a `container` clasicos, que los
     gobierna el bloque de `.e-con` de mas abajo, donde `--position` NO se toca.
     Si alguien vuelve a lanzar `volcar-elementor.py` sin pasar despues por
     `atomico-a-contenedor.py`, vuelven los atomicos y con ellos este fallo:
     un `::before` de overlay se posicionaria contra el documento otra vez. */
  position: static;
  transition: none;
}

/* 2. Los estilos base de base-desktop.css: .e-div-block-base trae
   min-width:30px y padding:10px a 0-2-0. Aqui, a 0-2-0 y despues. */
.elementor .e-div-block-base,
.elementor .e-flexbox-base {
  padding: 0;
  min-width: 0;
}

/* 3. El boton atomico trae fondo azul, radio 2px y padding propios; el de
   Orizon (.button-main y compania) los define todos, pero por si un enlace
   de texto suelto cae en e-button sin clase de boton. */
.elementor .e-button-base {
  background: none;
  border-radius: 0;
  padding: 0;
  border: 0;
  text-align: inherit;
  font: inherit;
  color: inherit;
}

/* 4. La imagen atomica: display:block en base; Orizon quiere inline-block en
   img y block solo donde lo dice. Se devuelve al elemento. */
.elementor .e-image-base {
  display: inline-block;
}

/* ===================================================================
   5. PROSA LEGAL - /privacy-policy/ y /terms/
   -------------------------------------------------------------------
   Las dos legales meten el documento entero en un widget text-editor
   clasico (ver scripts/volcar-legales.py: el enum de `tag` de e-div-block
   no tiene `ul` ni `li`, y una legal sin listas no es una legal). Dentro
   de ese widget hay <h2>, <h3>, <p>, <ul>, <li> y <strong> desnudos, que
   Orizon SI estila... con la escala de una landing:

       h2: 3rem   h3: 2.5rem   p: margin-bottom 0

   Medido en la pagina servida el 29/08: los h2 competian con el h1, h3 y
   h2 no se distinguian, y los parrafos salian pegados unos a otros. Es
   correcto para un bloque de portada y no para un texto que se lee
   seguido.

   ESPECIFICIDAD - por que aqui y por que con #id
   Las reglas de Orizon son `.elementor p` (0-1-1) y esta hoja carga ANTES
   que ella, asi que a 0-2-0 perderia por orden. Anclado a `#legal-body`
   son 1-0-1 y ganan sin depender del orden de carga, que es la regla del
   proyecto: anclar al #id de la seccion, nunca !important. Es la unica
   excepcion al "nunca 0-3-0" de la cabecera, y esta acotada a dos paginas.

   Los valores no se inventan: son los tokens de Orizon.
   =================================================================== */

/* Medida de lectura. container-small son 64rem, ~95 caracteres por linea a
   este cuerpo. Un documento legal se lee seguido y necesita menos. */
#legal-body .elementor-widget-text-editor,
#article-body .elementor-widget-text-editor,
#article-body .elementor-widget-theme-post-content {
  max-width: 42rem;
  margin-inline: auto;
}

/* Y el h1 de la portadilla, en la misma columna. Iba a lo ancho del
   container-small (64rem), asi que a 1280 "Privacy Policy" arrancaba 50 px a
   la izquierda del texto que titula. Visto en captura el 14/09, ronda final
   del cliente, punto 7 (alineaciones). */
#legal-hero .section-layout {
  max-width: 42rem;
  margin-inline: auto;
}

/* Jerarquia: el h2 de seccion baja a la escala h5 y el h3 a la h6, para que
   se distingan entre si y no compitan con el h1 de la portadilla. */
#legal-body h2,
#article-body h2 {
  font-size: var(--_typography---h5--font-size);
  line-height: var(--_typography---h5--line-height);
  letter-spacing: var(--_typography---h5--letter-spacing);
  margin-top: var(--_spacing---space--spacing-3xl);
  margin-bottom: var(--_spacing---space--spacing-md);
}

#legal-body h3,
#article-body h3 {
  font-size: var(--_typography---h6--font-size);
  line-height: var(--_typography---h6--line-height);
  letter-spacing: var(--_typography---h6--letter-spacing);
  margin-top: var(--_spacing---space--spacing-2xl);
  margin-bottom: var(--_spacing---space--spacing-sm);
}

/* La linea de fechas -- "Effective ... - Last updated ..." -- que el generador
   emite como <p class="doc-meta"> al principio del documento. Sin regla salia
   al tamano del cuerpo y justo debajo del h1, asi que se leia como la primera
   frase del texto legal en vez de como metadato. En el build local ya estaba
   estilada (bloque 22 de css/velnox.css); esta regla cierra el hueco en
   WordPress con los tokens de Orizon. */
#legal-body .doc-meta,
#article-body .doc-meta {
  font-size: var(--_typography---text-small--font-size);
  color: var(--_colors---text--soft-400);
  margin-top: 0;
  margin-bottom: var(--_spacing---space--spacing-3xl);
}

#legal-body .doc-meta + h2,
#article-body .doc-meta + h2 {
  margin-top: 0;
}

/* El primer titular ya tiene el aire de la portadilla encima. */
#legal-body h2:first-child,
#article-body h2:first-child,
#legal-body h3:first-child,
#article-body h3:first-child {
  margin-top: 0;
}

/* Ritmo del cuerpo. Orizon deja `p { margin-bottom: 0 }`. */
#legal-body p,
#article-body p {
  margin-bottom: var(--_spacing---space--spacing-lg);
}

#legal-body ul,
#article-body ul,
#legal-body ol,
#article-body ol {
  margin-bottom: var(--_spacing---space--spacing-lg);
}

#legal-body li,
#article-body li {
  margin-bottom: var(--_spacing---space--spacing-xs);
}

#legal-body p:last-child,
#article-body p:last-child,
#legal-body ul:last-child,
#article-body ul:last-child,
#legal-body ol:last-child,
#article-body ol:last-child,
#legal-body li:last-child,
#article-body li:last-child {
  margin-bottom: 0;
}

.elementor-30 .e-con,
.elementor-30 .e-con-inner,
.velnox-page.e-con,
.velnox-page .e-con,
.velnox-page .e-con-inner {
  --container-max-width: none;
  --container-widget-width: initial;
  --padding-top: initial; --padding-right: initial; --padding-bottom: initial; --padding-left: initial;
  --padding-block-start: var(--padding-top, 0); --padding-block-end: var(--padding-bottom, 0);
  --padding-inline-start: var(--padding-left, 0); --padding-inline-end: var(--padding-right, 0);
  --margin-top: initial; --margin-right: initial; --margin-bottom: initial; --margin-left: initial;
  --margin-block-start: var(--margin-top, 0); --margin-block-end: var(--margin-bottom, 0);
  --margin-inline-start: var(--margin-left, 0); --margin-inline-end: var(--margin-right, 0);
  --gap: normal; --row-gap: normal; --column-gap: normal;
  /* 🔴 `--width` TAMPOCO se neutraliza. Elementor declara `.e-con { --width: 100% }`
     y lo consume con `width: var(--width)`. Forzarlo a `auto` hace que el
     contenedor se encoja a su contenido, y eso rompe el LAZY LOADING en cadena:
     contenedor sin ancho -> el <img> lazy nunca entra en viewport -> no carga
     -> sigue sin ancho intrinseco -> el contenedor sigue a 0.
     Medido el 31/08 en #solutions: de las tres ilustraciones solo cargaba la
     primera -- la unica sin `loading="lazy"` --; las otras dos se quedaban en
     0x0 con naturalWidth 0. Se veian como tarjetas sin imagen.
     Orizon pone sus propios anchos donde le hace falta, asi que dejarle el
     100% a Elementor no le quita nada. */
  --min-height: auto; --height: auto;
  /* 🔴 `--position` NO se neutraliza, y esto costo los botones del hero (31/08).
     Elementor declara `.e-con { --position: relative }` y lo consume con
     `position: var(--position)`. No es decorativo: es lo que hace que el
     `::before` del OVERLAY de fondo se posicione contra su contenedor.
     Con `static` ese pseudo-elemento pierde su ancestro posicionado y se
     coloca contra el DOCUMENTO: medido en la pagina servida, el overlay de
     una seccion del pie salia 1905x945 -- el viewport entero -- y tapaba
     TODA la pagina. Los dos botones del hero no respondian al clic, y se
     confirmo ocultando ese elemento: volvian a ser clicables.
     `relative` sin offsets no mueve nada de sitio, solo crea el contexto,
     asi que dejarselo a Elementor no afecta a la maqueta de Orizon. */
  --z-index: auto; --overflow: visible; --text-align: inherit;
  --border-radius: 0;
  --display: block;
  /* Elementor pone `--flex-direction: column` en `.e-con.e-flex` y lo consume
     con `.e-con-full.e-flex { flex-direction: var(--flex-direction) }`, a
     0-2-0. Orizon declara `flex-flow: column` donde de verdad quiere columna,
     y donde quiere fila NO declara nada: se apoya en el `row` inicial del CSS.
     Resultado, medido el 29/08: `.pricing-feature` -- el check y su linea de
     texto -- salia apilado en WordPress y en linea en el build local, en la
     portada y en Industries. Aqui se devuelve al valor inicial, igual que
     `--display`; donde Orizon dice `flex-flow: column` sigue mandando ella,
     que carga despues. */
  --flex-direction: row;
  display: block;
  /* 🔴 ESTAS CUATRO CEDEN ANTE EL PANEL, y el motivo esta medido (31/08).
     Antes iban a `0` / `auto` / `none` a secas, y con eso el puente NO
     neutralizaba solo los valores por defecto del kit: mataba tambien
     cualquier padding, margen o ancho que se pusiera en el panel de
     Elementor. Pablo lo encontro escribiendo 80px de ancho y 36 de padding
     en la seccion #cta y viendo que la pagina no se movia.
     La causa es la cadena de variables de Elementor: el panel escribe
     `--padding-top`, `.e-con` la deriva a `--padding-block-start`, y este
     puente cortaba la derivada. Con el fallback, el panel manda cuando hay
     valor y el puente sigue limpiando cuando no lo hay. */
  padding: var(--padding-block-start, 0) var(--padding-inline-end, 0) var(--padding-block-end, 0) var(--padding-inline-start, 0);
  margin: var(--margin-block-start, 0) var(--margin-inline-end, 0) var(--margin-block-end, 0) var(--margin-inline-start, 0);
  gap: normal;
  width: var(--width, auto);
  max-width: var(--content-width, none);
  min-width: 0;
  min-height: auto;
}

.elementor-30 .elementor-widget,
.velnox-page .elementor-widget {
  --widgets-spacing: 0 0;
  --widgets-spacing-row: 0;
  --widgets-spacing-column: 0;
  --kit-widget-spacing: 0;
  margin: 0;
  width: auto;
  max-width: none;
}

.elementor-30 .elementor-widget:not(:last-child),
.velnox-page .elementor-widget:not(:last-child) {
  margin-block-end: 0;
}

.elementor-30 .elementor-widget-container,
.velnox-page .elementor-widget-container {
  display: contents;
}

.elementor-30 .elementor-heading-title,
.velnox-page .elementor-heading-title {
  margin: 0;
}

.elementor-30 p.elementor-heading-title,
.elementor-30 span.elementor-heading-title,
.elementor-30 div.elementor-heading-title,
.velnox-page p.elementor-heading-title,
.velnox-page span.elementor-heading-title,
.velnox-page div.elementor-heading-title {
  font-family: inherit;
  font-size: inherit;
  font-weight: inherit;
  line-height: inherit;
  letter-spacing: inherit;
  color: inherit;
  text-transform: inherit;
}

/* 8 bis. El kit por defecto pisa la tipografia de Orizon en TODO heading.
   Elementor emite en el CSS de cada pagina (uploads/elementor/css/post-N.css):

     .elementor-widget-heading .elementor-heading-title {
       font-family: var(--e-global-typography-primary-font-family), Sans-serif;
       font-weight: var(--e-global-typography-primary-font-weight);
       color: var(--e-global-color-primary); }

   y el kit 6 esta SIN TOCAR, asi que esas variables valen "Roboto", 600 y
   #6EC1E4. Eso es 0-2-0 y la regla de etiqueta de Orizon -prefijada a
   `.elementor h3`- es 0-1-1, o sea que pierde: los titulares de tarjeta de
   Solutions y Our System salian en Roboto y en azul claro. En la portada no
   se veia el color porque sus h2 llevan `text-color-gradient`, que pinta con
   -webkit-text-fill-color, pero la fuente tambien estaba mal.

   Aqui se le devuelve el mando a Orizon apuntando a SUS variables, no
   copiando valores. 0-2-1: gana a Elementor por especificidad y sigue por
   debajo del 0-3-0 que pisaria a la plantilla.

   La raiz sigue pendiente y es de kit, no de hoja: configurar el kit con
   Space Grotesk e Inter y dejar de cargar Roboto (migration-plan.md, fase B).
   Mientras tanto esto acota el dano a las paginas de Orizon. */
.elementor-30 h1.elementor-heading-title,
.velnox-page h1.elementor-heading-title {
  font-family: var(--_typography---h1--font-family);
  font-weight: var(--_typography---h1--font-weight);
  color: var(--_colors---text--white-0);
}
.elementor-30 h2.elementor-heading-title,
.velnox-page h2.elementor-heading-title {
  font-family: var(--_typography---h2--font-family);
  font-weight: var(--_typography---h2--font-weight);
  color: var(--_colors---text--white-0);
}
.elementor-30 h3.elementor-heading-title,
.velnox-page h3.elementor-heading-title {
  font-family: var(--_typography---h3--font-family);
  font-weight: var(--_typography---h3--font-weight);
  color: var(--_colors---text--white-0);
}
.elementor-30 h4.elementor-heading-title,
.velnox-page h4.elementor-heading-title {
  font-family: var(--_typography---h4--font-family);
  font-weight: var(--_typography---h4--font-weight);
  color: var(--_colors---text--white-0);
}
.elementor-30 h5.elementor-heading-title,
.velnox-page h5.elementor-heading-title {
  font-family: var(--_typography---h5--font-family);
  font-weight: var(--_typography---h5--font-weight);
  color: var(--_colors---text--white-0);
}
.elementor-30 h6.elementor-heading-title,
.velnox-page h6.elementor-heading-title {
  font-family: var(--_typography---h6--font-family);
  font-weight: var(--_typography---h6--font-weight);
  color: var(--_colors---text--white-0);
}

.elementor-30 .e-con.w-inline-block,
.velnox-page .e-con.w-inline-block {
  display: inline-block;
}

.elementor-30 .e-con.w-inline-block.button-main,
.velnox-page .e-con.w-inline-block.button-main {
  display: inline-flex;
}

/* 9. El gancho de pagina: .velnox-page
   Lo pone scripts/atomico-a-contenedor.py en los contenedores de PRIMER NIVEL
   de cada pagina volcada. Antes este bloque colgaba solo de .elementor-30 -el
   id de la portada- y la segunda pagina, Solutions, salio con los .e-con sin
   neutralizar: los dos grupos de botones apilados en columna. La marca viaja
   con el contenido, asi que una pagina nueva ya viene enganchada y no hay que
   volver a tocar esta hoja.
   Cabecera, pie y 404 (plantillas 53, 60 y 67) NO la llevan: alli el
   contenedor de Elementor se usa tal cual.
   La portada mantiene ademas .elementor-30 hasta que se vuelva a volcar. */

/* 10. OCULTAR UNA SECCION DESDE EL PANEL, que sin esto NO funcionaba (31/08)

   El control "Responsive > Hide On Desktop/Tablet/Mobile" de Elementor no hacia
   nada sobre nuestras secciones. Se marcaban las 8 de About, salian las clases
   correctas en el HTML -- `elementor-hidden-desktop` y companeras -- y la
   seccion seguia viendose: `display` medido en la pagina servida, `block`.

   La causa es de esta hoja, otra vez. Elementor emite

       .elementor .elementor-hidden-desktop { display: none }        0-2-0

   y el bloque 1 de aqui arriba emite `.elementor .e-con { display: block }`,
   tambien 0-2-0. Empatan, y este puente carga DESPUES de Elementor
   (functions.php, prioridad 9999), asi que gana el `block` y la seccion no se
   oculta nunca.

   Se resuelve subiendo a 0-3-0, no con `!important`: la regla del proyecto es
   que un `!important` aqui obligaria a otro mas adelante. Los cortes son los
   de Elementor, copiados de su frontend.css servido, no inventados:
   movil <=767, tablet 768-1024, escritorio >=1025. */
@media (max-width: 767px) {
  .elementor .e-con.elementor-hidden-mobile,
  .elementor .e-con.elementor-hidden-phone { display: none; }
}
@media (min-width: 768px) and (max-width: 1024px) {
  .elementor .e-con.elementor-hidden-tablet { display: none; }
}
@media (min-width: 1025px) {
  .elementor .e-con.elementor-hidden-desktop { display: none; }
}
