/* ==========================================================================
   DYRESEL · HOME 2026 — CSS del bloque principal (versión Enfold)
   --------------------------------------------------------------------------
   Nomenclatura propia con prefijo  .dyh-*  /  #dyh-*  /  --dyh-*
   ("DYresel Home") para que nada colisione con Enfold, Avia, WPCF7,
   33.css ni el resto de hojas del sitio.

   NO incluye las dos galerías con selector (sección 4 vídeo y sección 5
   producto): esas van en sus dos plugins, con prefijos .dysv-* y .dysp-*.
   Tampoco incluye header, footer ni el botón lateral de newsletter.

   Las fuentes (Maven Pro + Oswald) las inyecta dyresel-home.js — no hace
   falta @import aquí (un @import dentro de Quick CSS de Enfold solo es
   válido si es la primerísima línea del bloque, y eso no se puede
   garantizar).
   ========================================================================== */

:root {
  --dyh-navy: #002F43;
  /* Alto real del header fijo de Enfold. Lo mide y escribe el JS; el
     fallback 0px evita un salto en el primer paint. */
  --dyh-header-h: 0px;
}

/* ==========================================================================
   1) NEUTRALIZAR LOS CONTENEDORES DE ENFOLD
   --------------------------------------------------------------------------
   Cada bloque va dentro de un Color Section de Enfold con la clase
   personalizada  dyh-sec  (ver el .txt de shortcodes ALB). Enfold envuelve
   el Code Block en .container (max-width 1310px + padding 50px), .content
   (padding vertical + borde derecho de la sidebar) y .flex_column: todo eso
   impide el ancho completo y mete franjas de fondo blanco entre secciones.
   ========================================================================== */

.dyh-sec.container_wrap,
.dyh-sec.avia-section {
  padding: 0 !important;
  margin: 0 !important;
  border: 0 !important;
}

.dyh-sec > .container {
  max-width: none !important;
  width: 100% !important;
  padding: 0 !important;
  margin: 0 !important;
}

.dyh-sec .content,
.dyh-sec .template-page,
.dyh-sec .post-entry,
.dyh-sec .entry-content-wrapper {
  padding: 0 !important;
  margin: 0 !important;
  border: 0 !important;
  width: 100% !important;
  max-width: none !important;
}

.dyh-sec .flex_column {
  margin: 0 !important;
  padding: 0 !important;
  width: 100% !important;
}

.dyh-sec .avia_codeblock,
.dyh-sec .avia_codeblock_section {
  margin: 0 !important;
  padding: 0 !important;
}

/* Ningún contenedor intermedio puede recortar: un ancestro con overflow
   distinto de visible entre el elemento sticky y el contenedor real de
   scroll desactiva el "pegado". */
.dyh-sec > .container,
.dyh-sec .content,
.dyh-sec .template-page,
.dyh-sec .post-entry,
.dyh-sec .entry-content-wrapper,
.dyh-sec .flex_column,
.dyh-sec .avia_codeblock {
  overflow: visible !important;
}

/* --------------------------------------------------------------------------
   1b) Sticky: liberar <html>, <body> y #wrap_all SOLO en esta página
   --------------------------------------------------------------------------
   Enfold envuelve #main en <div id="wrap_all"> con overflow:hidden, y declara
   overflow explícito en <html> y <body> (layout "stretched"). Cuando html Y
   body tienen overflow no-visible, body deja de delegar el scroll al viewport
   y pasa a ser él mismo el contenedor de scroll: position:sticky se engancha
   a él y nunca llega a pegarse.

   overflow-x:clip (y no overflow:visible a secas): el header de Enfold lleva
   siempre en el DOM los menús desplegables (GTranslate, mega-menú) más anchos
   que su contenedor, ocultos solo con visibility:hidden. Con overflow visible
   en ambos ejes aparecería scroll lateral en toda la página. clip mantiene el
   eje X recortado sin, por spec, forzar overflow-y:auto como haría hidden.

   Dos reglas separadas a propósito (NO agrupadas por coma): un navegador sin
   soporte de :has() invalidaría toda la lista y se quedaría sin la regla.
   La clase .dyh-page la añade el JS; el :has() cubre el instante previo. */

html.dyh-page,
body.dyh-page {
  overflow-x: clip !important;
  overflow-y: visible !important;
}

html:has(.dyh-sec),
html:has(.dyh-sec) body {
  overflow-x: clip !important;
  overflow-y: visible !important;
}

html.dyh-page #wrap_all {
  overflow-x: clip !important;
  overflow-y: visible !important;
}

html:has(.dyh-sec) #wrap_all {
  overflow-x: clip !important;
  overflow-y: visible !important;
}

/* El header de Enfold trae 95% de opacidad de fábrica; contra las secciones
   con vídeo se nota como un tinte. Aquí se deja sólido. */
html.dyh-page .header_bg { opacity: 1 !important; }
html:has(.dyh-sec) .header_bg { opacity: 1 !important; }

/* ---- Aparición con fundido -------------------------------------------------
   Se marca un elemento con la clase «dyh-fade» (campo Custom CSS Class) y
   aparece con un fundido y un pequeño desplazamiento la primera vez que entra
   en pantalla. Lo activa el JS añadiendo «dyh-is-visible».

   El opacity:0 de partida solo se aplica si el JS está presente para quitarlo:
   la clase «dyh-page» la pone el propio script en cuanto arranca. Si el JS
   fallara, el bloque se ve con normalidad en lugar de quedarse invisible. */
html.dyh-page .dyh-fade {
  opacity: 0;
  transform: translateY(24px);
  /* Sin transition AQUÍ a propósito. La clase «dyh-page» la añade el JS, que
     va en el pie: hasta ese momento el bloque se ve con normalidad. Si la
     transición estuviera en este estado, al añadirse la clase el texto se
     desvanecería a la vista durante 0,7s para luego volver a aparecer — un
     parpadeo feo. Sin transición, el paso a oculto es instantáneo y no se
     percibe; la animación se declara solo en el estado visible, que es el
     único que interesa ver moverse. */
}

html.dyh-page .dyh-fade.dyh-is-visible {
  opacity: 1;
  transform: none;
  /* --dyh-fade-delay lo escribe inline quien quiera escalonar su entrada; sin
     él, 0s. Lo usan las celdas de «Aplicaciones» (una tras otra por fila) y el
     botón del visualizador (detrás de su texto). */
  transition: opacity 0.7s ease var(--dyh-fade-delay, 0s),
              transform 0.7s ease var(--dyh-fade-delay, 0s);
}

/* Para un bloque que va DETRÁS de otro y no necesita contar posiciones. */
html.dyh-page .dyh-fade--tras-texto { --dyh-fade-delay: 160ms; }

@media (prefers-reduced-motion: reduce) {
  html.dyh-page .dyh-fade.dyh-is-visible {
    transition: none;
  }
}

/* ---- Secciones ocultas ----------------------------------------------------
   Se marca un Color Section con la clase «dyh-oculto» (campo Custom CSS Class)
   y deja de pintarse en el front, pero sigue estando en el builder para poder
   recuperarla sin rehacerla.

   Ahora mismo la lleva «Elige los sistemas que marcan el rumbo»: esa sección no
   aparece en el frame de Figma de la home, así que queda aparcada hasta decidir
   si se queda o se elimina. */
.dyh-sec.dyh-oculto {
  display: none !important;
}

/* ==========================================================================
   2) RESET ACOTADO
   --------------------------------------------------------------------------
   Solo dentro de las secciones marcadas: nunca html/body/* globales — esta
   página comparte body con el header y el footer de Enfold.
   ========================================================================== */

.dyh-sec,
.dyh-sec * {
  box-sizing: border-box;
  -webkit-font-smoothing: antialiased;
  -moz-osx-font-smoothing: grayscale;
}

.dyh-sec *:focus,
.dyh-sec *:focus-visible {
  outline: none;
}

/* ---- Titulares: quitar lo que Enfold les impone de fábrica ----------------
   Enfold trae en su layout.css:

     .template-page .entry-content-wrapper h1,
     .template-page .entry-content-wrapper h2 { text-transform: uppercase }

   ...más un letter-spacing de 1px. Con eso, «Tu vehículo industrial tiene las
   espaldas bien cubiertas» salía TODO EN MAYÚSCULAS y con las letras
   separadas, que no es lo que dice el diseño.

   El selector tiene que ser igual de específico que el suyo (dos clases + una
   etiqueta) para poder ganarle; con .dyh-hero__title a secas no basta. Va aquí
   arriba, antes que las reglas de cada sección, para que esas puedan seguir
   fijando su propio letter-spacing donde el diseño lo pida.

   Nota: en dyresel.com esto no se notaba porque una hoja global del sitio
   (33.css) ya forzaba text-transform:none en todos los titulares. Depender de
   ella sería frágil: en cuanto la home se mira fuera de ese contexto —como en
   el WordPress local— reaparece el problema. */
.dyh-sec .entry-content-wrapper h1,
.dyh-sec .entry-content-wrapper h2,
.dyh-sec .entry-content-wrapper h3,
.dyh-sec .entry-content-wrapper h4,
.dyh-sec .entry-content-wrapper h5,
.dyh-sec .entry-content-wrapper h6 {
  text-transform: none;
}

/* ---- Interletraje: los valores de dyresel.com --------------------------
   En producción no los pone la home: vienen de la hoja global del sitio, que
   aplica un interletraje fijo por nivel de titular. Medidos allí:

     h1                       normal
     h2                       -3.3px
     h3                       -2.5px
     párrafos y subtítulos    -0.54px

   Se copian aquí para no depender de esa hoja: fuera de dyresel.com —o el día
   que esa hoja cambie— los textos saldrían con el espaciado por defecto y se
   verían visiblemente más anchos. Cada sección puede sobreescribirlo donde el
   diseño pida otra cosa (lo hace el titular del visualizador, con -0.06em). */
.dyh-sec .entry-content-wrapper h1 { letter-spacing: normal; }
.dyh-sec .entry-content-wrapper h2 { letter-spacing: -3.3px; }
.dyh-sec .entry-content-wrapper h3 { letter-spacing: -2.5px; }

.dyh-sec .entry-content-wrapper p,
.dyh-sec .entry-content-wrapper li {
  letter-spacing: -0.54px;
}

/* ---- El tope de ancho que la hoja global pone a los titulares EN LA PORTADA
   --------------------------------------------------------------------------
   `33.css` trae esto:

       .home h2 { max-width: 580px; }
       .home h3 { max-width: 580px; }

   La clase `home` la pone WordPress en el <body> solo cuando la página es la
   portada del sitio. O sea que estas reglas estuvieron dormidas todo el
   desarrollo —la home vivía en /dyresel-home-2026/— y se activaron de golpe el
   día que pasó a ser dyresel.com/. Efecto: «Somos tu partner global» partido en
   dos líneas (necesita 738px y le quedaban 580) y lo mismo en «Luz para cada
   tipo de movimiento».

   Ojo con la especificidad, que es donde está la trampa: `.home h2` es (0,1,1)
   y le gana a `.dyh-hero__title-2`, que es (0,1,0). Por eso no basta con
   declarar el ancho en la clase del titular. `.avia-section.dyh-sec h2` es
   (0,2,1) y gana sin depender del orden de los archivos ni de que el JS haya
   añadido ya ninguna clase.

   Se anula el tope en vez de fijar un número: cada titular ya declara el suyo
   donde el diseño lo pide. */
.avia-section.dyh-sec h1,
.avia-section.dyh-sec h2,
.avia-section.dyh-sec h3,
.avia-section.dyh-sec h4 {
  max-width: none;
}

/* Y aquí los topes que SÍ son nuestros, repuestos por encima de ese reset.
   ---------------------------------------------------------------------------
   Este bloque no es opcional: el reset de arriba barre con todo, incluidos los
   anchos que cada titular necesita para partir donde tiene que partir. La
   primera versión solo repuso el del reveal y dejó al titular del hero sin su
   tope — en pantallas anchas se estiraba a una sola línea.

   El ancho es lo único que decide dónde parten: no hay ningún <br> de por
   medio. Si se cambia el texto, hay que volver a comprobar el resultado.

       817px   «Tu vehículo industrial tiene las espaldas bien cubiertas»
               va en DOS líneas. Es el ancho del frame de Figma, y el texto
               necesitaría 1465px para caber en una: con este tope son dos en
               cualquier pantalla.

      1088px   «Somos tu partner global» va en UNA línea. También es el ancho
               de su frame de Figma. Necesita 738px, así que le sobra sitio.
               El tope sigue haciendo falta aunque no parta nada: sin él, la
               hoja global del sitio le aplicaría sus 580px y lo partiría en
               dos.

   Los demás titulares se quedan sin tope a propósito: «Creamos tu sistema»
   parte por su <br> y su contenedor de 643px, el del visualizador por su caja
   de 421px, y «Luz para cada tipo de movimiento» tiene que ir en una línea. */
.avia-section.dyh-sec .dyh-hero__title {
  max-width: 817px;
}

.avia-section.dyh-sec .dyh-hero__title-2 {
  max-width: 1088px;
}

/* ---- Selección de texto ---------------------------------------------------
   Enfold pinta ::selection con su color primario, que en esta instalación es
   el verde de su demo (#719430) — nada que ver con la marca. Se sustituye por
   el azul corporativo.

   Acotado a la home (`html.dyh-page`, la clase que pone dyresel-home.js) y no
   global: esta hoja es la del child theme y carga en todo el sitio, así que
   sin acotar cambiaría la selección de cualquier página. */
html.dyh-page ::selection {
  background-color: #002f43;
  color: #ffffff;
}

html.dyh-page ::-moz-selection {
  background-color: #002f43;
  color: #ffffff;
}

/* ---- La línea de arriba de cada sección ---------------------------------
   Enfold marca las secciones con .avia-shadow, que es
   box-shadow: inset 0 1px 3px rgba(0,0,0,.1) — a pantalla completa se lee
   como una raya horizontal justo encima del contenido. En los shortcodes va
   shadow='no-border-styling' para quitarlo desde la propia opción del Color
   Section; esto es el cinturón por si alguna sección se añade a mano sin
   ese ajuste. */
.dyh-sec.avia-shadow,
.dyh-sec.avia-section {
  box-shadow: none;
}

/* ---- Enlaces --------------------------------------------------------------
   Enfold pinta TODOS los enlaces con el color primario del theme
   (.main_color a → var(--enfold-main-color-primary)), que es más específico
   que una clase suelta nuestra. En dyresel.com ese primario ya es el rojo
   corporativo y no se notaba; en cualquier otra instalación —el WordPress
   local, sin ir más lejos— los enlaces salían verdes.

   OJO con el alcance: la primera versión de esto era `.entry-content-wrapper a`
   y se llevaba por delante los botones de las dos galerías, que también son
   enlaces — salían en rojo en vez de con su color de diseño. Así que en vez de
   pintar todos los enlaces y luego ir rescatando excepciones, se apunta solo a
   los dos sitios donde de verdad hace falta: los enlaces de texto corrido y los
   de la rejilla de aplicaciones. Los CTA de las galerías no cuelgan de ninguno
   de los dos, así que quedan fuera por construcción. */
.dyh-sec .avia_textblock a,
.dyh-sec .entry-content-wrapper .dyh-apps__link {
  color: #cc233f;
}

/* ==========================================================================
   3) WRAPPERS SCROLL-DRIVEN
   --------------------------------------------------------------------------
   Cada sección "fijada" es en realidad un elemento sticky (CSS nativo, no
   pin:true de GSAP) dentro de un wrapper deliberadamente alto. Alto del
   wrapper = 100vh (la sección visible) + el recorrido de scroll extra que
   necesita su animación. Sin pin-spacer y sin mutar alturas a media página:
   nunca hay salto de layout ni hueco muerto — el siguiente wrapper arranca
   exactamente donde se agota el recorrido extra de éste.
   ========================================================================== */

.dyh-wrap {
  position: relative;
  width: 100%;
}

.dyh-wrap--hero {
  /* 100vh (la caja visible) + el recorrido del despegue, que se configura en el
     elemento. Lo escribe el shortcode inline; este 200vh es solo el respaldo. */
  height: var(--dyh-hero-wrap-h, 200vh);
}

/* .dyh-wrap--vs (vídeo por scroll) coge su alto de --dyh-vs-wrap-h, que escribe
   el propio elemento a partir de sus opciones. Ver el apartado 6. */

/* ==========================================================================
   4) HERO — reel a pantalla completa que se "despega"
   ========================================================================== */

.dyh-hero {
  position: sticky;
  top: var(--dyh-header-h, 0px);
  width: 100%;
  /* No basta con bajar el top: si la caja sigue midiendo 100vh completos
     empezando más abajo, se sale por debajo del viewport y el contenido
     centrado queda descentrado respecto a lo que de verdad se ve. */
  height: calc(100vh - var(--dyh-header-h, 0px));
  /* iOS Safari calcula 100vh sobre el viewport "grande" (barra de direcciones
     oculta). 100dvh sigue el viewport real; los navegadores sin soporte
     ignoran esta línea y se quedan con la de arriba. */
  height: calc(100dvh - var(--dyh-header-h, 0px));
  overflow: hidden;
  background: var(--dyh-navy);
}

/* Capa navy sólida por detrás del vídeo; sostiene el segundo bloque de texto. */
.dyh-hero__bg {
  position: absolute;
  inset: 0;
  z-index: 1;
  background: var(--dyh-navy);
}

.dyh-hero__text {
  position: absolute;
  inset: 0;
  display: flex;
  flex-direction: column;
  align-items: center;
  justify-content: center;
  text-align: center;
  padding: 0 clamp(20px, 6vw, 80px);
}

.dyh-hero__text--1 { z-index: 5; gap: 18px; }
.dyh-hero__text--2 { z-index: 3; gap: 20px; opacity: 0; pointer-events: none; }

/* Las dos líneas se revelan una tras otra (no el bloque entero a la vez):
   cada una con su propia transición y la segunda con delay corto. */
.dyh-hero__text--1 .dyh-hero__eyebrow,
.dyh-hero__text--1 .dyh-hero__title {
  opacity: 0;
  transition: opacity 0.6s ease;
}

.dyh-hero__text--1.dyh-is-visible .dyh-hero__eyebrow { opacity: 1; }

.dyh-hero__text--1.dyh-is-visible .dyh-hero__title {
  opacity: 1;
  transition-delay: 0.25s;
}

.dyh-hero__video-wrap {
  position: absolute;
  top: 0;
  left: 0;
  width: 100%;
  /* 100% y no 100vh fijo: sigue siempre el alto real de .dyh-hero, que varía
     con el alto del header de Enfold. */
  height: 100%;
  z-index: 2;
  overflow: hidden;
  border-radius: 0;
  will-change: transform, border-radius, opacity;
}

.dyh-hero__video {
  width: 100%;
  height: 100%;
  object-fit: cover;
  display: block;
}

/* ---- Tipografía del hero -------------------------------------------------
   color + text-align con !important en los titulares: la hoja global del
   sitio (33.css) fuerza  h1..h6 { color:#002f43 !important; text-align:center }
   sobre cualquier heading. Sin esto saldrían en azul marino sobre el vídeo. */

.dyh-hero__eyebrow {
  margin: 0;
  font-family: "Maven Pro", sans-serif;
  font-weight: 400;
  font-size: clamp(16px, 1.8vw, 24px);
  color: #ffffff;
  width: 100%;
  max-width: 866px;
}

.dyh-hero__title {
  margin: 0;
  font-family: "Maven Pro", sans-serif;
  font-weight: 500;
  font-size: clamp(28px, 4.4vw, 58px);
  line-height: 1.15;
  color: #ffffff !important;
  text-align: center;
  width: 100%;
  max-width: 817px;
}

.dyh-hero__title-2 {
  margin: 0;
  font-family: "Maven Pro", sans-serif;
  font-weight: 500;
  font-size: clamp(32px, 5vw, 66px);
  line-height: 1.1;
  color: #ffffff !important;
  text-align: center;
  width: 100%;
}

.dyh-hero__sub-2 {
  margin: 0;
  font-family: "Maven Pro", sans-serif;
  font-weight: 500;
  font-size: clamp(20px, 3vw, 40px);
  color: #ffffff;
  width: 100%;
  max-width: 1088px;
}

/* ==========================================================================
   5) ELEMENTO «Texto por scroll»  (.dyh-texto)
   --------------------------------------------------------------------------
   El texto NO se fija: avanza con el scroll normal y, mientras cruza la
   pantalla, cambia de color palabra por palabra. El JS envuelve cada palabra
   en un <span class="dyh-word"> y le va interpolando el color.

   Antes esto era .dyh-s2, atado a la sección 2 de la home. Ahora es un
   elemento del builder que puede usarse tantas veces como haga falta, así que
   los nombres ya no llevan número de sección.
   ========================================================================== */

.dyh-texto {
  width: 100%;
  display: flex;
  justify-content: center;
}

.dyh-texto__inner {
  width: 100%;
  max-width: 760px;
  margin: 0 auto;
  display: flex;
  flex-direction: column;
  gap: 28px;
  padding: 0 24px;
}

.dyh-texto__p {
  margin: 0;
  font-family: "Maven Pro", sans-serif;
  font-weight: 500;
  font-size: clamp(18px, 2.3vw, 30px);
  line-height: 1.2;
  /* Color de respaldo: si el JS no llegara a correr, el texto se lee igual en
     vez de quedarse del gris de partida. */
  color: #1a1a1a;
}

/* Cada palabra, envuelta por el JS. El color de partida lo pone también el JS
   a partir de las opciones del elemento; esta transición es la que suaviza el
   barrido entre un frame de scroll y el siguiente. */
.dyh-texto__p .dyh-word {
  transition: color 0.05s linear;
}

/* ==========================================================================
   6) ELEMENTO «Vídeo por scroll»  (.dyh-vs)
   --------------------------------------------------------------------------
   Caja fijada dentro de un envoltorio más alto que la pantalla: mientras dura
   el envoltorio el vídeo se queda quieto, y el scroll mueve su reproducción.
   Antes eran dos bloques calcados (.dyh-s2v y .dyh-s3v); ahora es un solo
   elemento reutilizable.
   ========================================================================== */

.dyh-wrap--vs {
  /* 100vh (la caja visible) + el recorrido que se configure en el elemento.
     Lo escribe el shortcode inline; este 220vh es solo el respaldo. */
  height: var(--dyh-vs-wrap-h, 220vh);
}

/* top + height compensan el header fijo de Enfold: sin esto la parte de arriba
   del vídeo quedaría tapada y no se vería entero. */
.dyh-vs {
  position: sticky;
  top: var(--dyh-header-h, 0px);
  width: 100%;
  /* Alto = el del vídeo, ni un píxel más.

     Antes esta caja medía toda la pantalla y el vídeo iba dentro: primero
     centrado (dejaba aire arriba y abajo) y luego pegado arriba (quitaba el de
     arriba, pero el de abajo seguía ahí — unos 250px de fondo vacío bajo el
     vídeo). Con el alto automático no queda espacio por ninguno de los dos
     lados: la sección mide exactamente lo que ocupa el clip. */
  height: auto;
  overflow: hidden;
  display: flex;
  justify-content: center;
}

.dyh-vs__box {
  position: relative;
  /* 1000px es la medida del diseño (union 1 mide 998px sobre un lienzo de
     1440), pero como tope fijo se queda corto: en un monitor de 2560 el vídeo
     se veía diminuto en mitad de la pantalla. Así que 1000px es el tope HASTA
     1440 de ancho, y a partir de ahí crece manteniendo la misma proporción que
     tiene en el diseño (1000/1440 = 69.44%).

       ancho ≤ 1000   → 100%, ocupa lo que haya
       ancho 1440     → 1000px, exactamente el diseño
       ancho 1920     → 1333px
       ancho 2560     → 1778px

     El tercer valor del min() es el tope por ALTURA: en una pantalla baja (un
     portátil apaisado, o el móvil en horizontal) un vídeo de 1000px de ancho no
     cabría de alto, así que se limita el ancho a lo que quepa —16/9 del alto
     visible— y el clip se ve entero igualmente. Sin esto, la proporción fija
     haría que el vídeo sobresaliera por abajo. */
  width: min(
    100%,
    max(1000px, 69.444vw),
    calc((100dvh - var(--dyh-header-h, 0px)) * 16 / 9)
  );
  /* Los dos clips son 1920x1080. La proporción fija es lo que permite que la
     sección de arriba tenga alto automático sin dejar aire: la caja mide
     exactamente lo que ocupa el vídeo. */
  aspect-ratio: 16 / 9;
  height: auto;
  margin: 0 auto;
  overflow: hidden;
}

.dyh-vs__video {
  width: 100%;
  height: 100%;
  display: block;
  /* object-fit lo escribe el shortcode inline: entero o recortado. */

  /* Safari pinta el fondo de un <video> de NEGRO por defecto. Con
     object-fit:contain el vídeo casi nunca llena la caja al píxel —basta el
     redondeo de subpíxeles— y ese sobrante se veía como un marco negro fino
     alrededor de los clips de fondo blanco. Chrome lo deja transparente y por
     eso allí no se notaba.

     Transparente y no un color fijo: así asoma el fondo de la sección, que cada
     elemento expone como opción y cambia de una a otra (#f8f8f8 en una, #ffffff
     en la siguiente). */
  background: transparent;
}

/* ==========================================================================
   6b) SECCIONES CON ELEMENTOS NATIVOS DE ENFOLD
   --------------------------------------------------------------------------
   El titular «Creamos tu sistema personalizado», la intro del catálogo y la
   sección del visualizador se montan con elementos de serie (Encabezado,
   Bloque de texto, Botón). Enfold genera su propio markup, así que aquí no se
   estiliza una clase nuestra sino la suya, acotada por la clase que lleva el
   Color Section.

   Se hace así, y no dejando que mande la tipografía del theme, porque los
   tamaños y espaciados vienen medidos de las capturas de Figma.

   Enfold genera, resumido:
     Encabezado     .av-special-heading > .av-special-heading-tag (el h1..h6)
     Bloque de texto .av_textblock_section > .avia_textblock
     Botón          .avia-button
   ========================================================================== */

/* ---- Titular de sección (clase «dyh-titular» en el Color Section) ----------
   Los titulares van dentro del Bloque de texto, no en un elemento Encabezado:
   el «Encabezado» de Enfold está desactivado en esta instalación (Enfold →
   Layout Builder → lista de elementos). Como el Bloque de texto usa el editor
   visual de siempre, el titular se escribe y se edita igual de cómodo. */

/* La sección es una FILA de tres piezas, no un bloque centrado: a la izquierda
   la etiqueta «Catálogo», en medio el titular con su texto, y a la derecha el
   botón «Ver catálogo» (Figma 5109:9168).

   En el diseño están colocadas en absoluto sobre un lienzo de 1440 — aquí se
   traduce a flex para que aguante cualquier ancho. Las proporciones salen de
   las medidas del diseño: margen lateral 65px, la etiqueta ocupa hasta los
   334px, el texto mide 643px y el botón queda pegado a la derecha. */
/* Los !important son para ganarle a nuestro propio bloque 1, que neutraliza
   los contenedores de Enfold con `.dyh-sec .entry-content-wrapper { padding:0
   !important }`. Ese reset es lo que da el ancho completo a las secciones de
   vídeo; aquí, en cambio, hace falta recuperar el margen lateral de 65px del
   diseño. Misma especificidad, así que solo se le gana con !important. */
.dyh-titular .entry-content-wrapper {
  display: flex;
  align-items: flex-start;
  max-width: 1440px !important;
  margin: 0 auto !important;
  padding: 151px clamp(24px, 4.5vw, 65px) 0 !important;
}

/* OJO con dónde cae la clase personalizada de cada elemento de Enfold:

     Bloque de texto → en el <div class="avia_textblock"> INTERIOR
     Botón           → en el <div class="avia-button-wrap"> exterior

   El hijo directo del contenedor flex —y por tanto el que hay que dimensionar—
   es el <section class="av_textblock_section"> de fuera, que NO lleva la clase.
   De ahí el :has(): «la sección que contiene el bloque con esta clase». */
.dyh-titular .av_textblock_section:has(.dyh-titular__texto) {
  flex: 0 1 643px;
  /* El margen izquierdo hace de hueco donde antes iba la etiqueta «Catálogo»:
     así el titular sigue arrancando en los 399px del diseño aunque la etiqueta
     ya no esté. */
  margin: 0 0 0 clamp(0px, 24vw, 334px);
  padding: 0;
}

/* El botón se va al extremo derecho, ocupe lo que ocupe el texto. */
.dyh-titular .dyh-btn-secundario {
  margin: 7px 0 0 auto;   /* 7px = la diferencia de altura del diseño (2803 vs 2796) */
  flex: none;
}

/* En pantallas estrechas la fila no cabe: se apila y la etiqueta y el botón
   pasan a ocupar todo el ancho. */
@media (max-width: 900px) {
  .dyh-titular .entry-content-wrapper {
    display: block;
    padding-top: clamp(64px, 12vw, 151px);
  }

  .dyh-titular .av_textblock_section:has(.dyh-titular__texto) {
    margin-left: 0;
  }

  .dyh-titular .dyh-btn-secundario {
    margin: 32px 0 0;
  }
}

/* text-align y color explícitos: la hoja global del sitio fuerza
   h1..h6 { text-align:center; color:#002f43 !important } sobre el propio
   elemento, que gana a cualquier herencia. */
.dyh-titular .dyh-titular__texto h2 {
  margin: 0 0 24px;   /* gap-24 del diseño */
  font-family: "Maven Pro", sans-serif;
  font-weight: 500;
  font-size: clamp(28px, 4.4vw, 58px);
  /* 56/58 del diseño: el interlineado es MENOR que el cuerpo de letra, de ahí
     que las dos líneas queden tan juntas. */
  line-height: 0.966;
  letter-spacing: -3px;
  color: #002f43 !important;
  text-align: left;
}

/* La palabra destacada de un titular: se marca en el editor con
   <span class="dyh-acento">…</span>. Sin acotar a una sección concreta, que la
   usan tanto «Creamos tu sistema personalizado» como «…que marcan el rumbo».
   El !important es por la misma razón que en los titulares: la hoja global del
   sitio fuerza el color sobre cualquier descendiente de un h1..h6. */
.dyh-sec .dyh-acento {
  color: rgba(0, 47, 67, 0.5) !important;
}

.dyh-titular .dyh-titular__texto p {
  margin: 0 0 20px;
  font-family: "Maven Pro", sans-serif;
  /* El diseño usa el token Desktop/Subtittle/Medium/XS: Maven Pro Medium 18.
     Teníamos Regular; se nota, el texto quedaba más fino de la cuenta. */
  font-weight: 500;
  font-size: clamp(15px, 1.4vw, 18px);
  line-height: 20px;
  letter-spacing: -0.36px;
  color: #626262;   /* token Text/Medium — teníamos #45484d */
  text-align: left;
}

.dyh-titular .dyh-titular__texto p:last-child {
  margin-bottom: 0;
}

/* ---- Botón secundario (componente «Buttons / Secondary» de Figma) ---------
   Borde fino rojo, esquinas de píldora y texto en azul corporativo.
   Los !important, igual que en el otro botón: Enfold genera para cada botón
   una hoja propia con su hash (#top .av-av_button-<hash>) que gana a cualquier
   selector de clase nuestro. */
.dyh-sec .dyh-btn-secundario .avia-button {
  padding: 16px 24px !important;
  border: 1.5px solid #cc233f !important;   /* token Primary/Red */
  border-radius: 119px !important;
  background: transparent !important;
  color: #002f43 !important;                /* token Corporate/Dark Blue */
  font-family: "Maven Pro", sans-serif;
  font-weight: 500;
  font-size: 16px;
  line-height: 1.1;
  letter-spacing: -0.48px;
  transition: background 0.25s ease, color 0.25s ease;
}

.dyh-sec .dyh-btn-secundario .avia-button:hover {
  background: #cc233f !important;
  color: #ffffff !important;
}

/* ---- Intro del catálogo (clase «dyh-catalogo» en el Color Section) ---- */

.dyh-catalogo .avia_textblock h3 {
  margin: 0 0 20px;
  font-family: "Maven Pro", sans-serif;
  font-weight: 500;
  font-size: clamp(28px, 3.4vw, 44px);
  line-height: 1.15;
  color: #002f43 !important;
  text-align: center;
  text-transform: none !important;
  /* La hoja global trae "h3 { max-width: 480px }" en el tramo 768-1024px y este
     encabezado no tiene max-width propio que lo bloquee. */
  max-width: none !important;
}

.dyh-catalogo .avia_textblock {
  max-width: 760px;
  margin: 0 auto;
  text-align: center;
  font-family: "Maven Pro", sans-serif;
  color: #002f43;
}

.dyh-catalogo .avia_textblock p {
  margin: 0 0 12px;
  line-height: 28px;
}

/* nth-of-type y no first-child/last-child: el primer hijo del bloque es el
   <h3>, así que "p:first-child" no llegaba a aplicarse nunca y el subtítulo se
   quedaba con el peso por defecto. */
.dyh-catalogo .avia_textblock p:nth-of-type(1) {
  font-weight: 600;
  font-size: clamp(16px, 1.6vw, 20px);
}

.dyh-catalogo .avia_textblock p:nth-of-type(2) {
  font-weight: 400;
  font-size: clamp(13px, 1.1vw, 15px);
}

/* El botón «Ver catálogo»: perímetro rojo, fondo transparente, esquinas
   redondeadas.

   Los !important no son pereza. Enfold genera para cada botón una hoja propia
   con su hash (#top .av-av_button-<hash>) a partir de los colores elegidos en
   el elemento, y esa regla es más específica que cualquier selector de clase
   que escribamos aquí: sin !important el borde volvía a salir transparente,
   que es lo que Enfold deduce de un fondo transparente. */
.dyh-catalogo .avia-button {
  padding: 14px 36px !important;
  border-radius: 999px !important;
  border: 2px solid #cc233f !important;
  background: transparent !important;
  color: #002f43 !important;
  font-family: "Maven Pro", sans-serif;
  font-weight: 500;
  font-size: clamp(13px, 1vw, 15px);
  letter-spacing: -0.54px;
  transition: background 0.25s ease, color 0.25s ease;
}

.dyh-catalogo .avia-button:hover {
  background: #cc233f !important;
  color: #ffffff !important;
}

/* ==========================================================================
   7) APLICACIONES — grid de tipos de vehículo
   --------------------------------------------------------------------------
   Bloque de contenido normal (no pantalla completa, no scroll-driven), fondo
   blanco, que fluye con la página.
   ========================================================================== */

.dyh-apps {
  width: 100%;
  background: #ffffff;
  padding: clamp(56px, 8vw, 110px) clamp(20px, 8vw, 140px);
}

.dyh-apps__inner {
  max-width: 1200px;
  margin: 0 auto;
}

.dyh-apps__title {
  display: flex;
  margin: 0 0 clamp(26px, 5vw, 56px);
  font-family: "Maven Pro", sans-serif;
  font-weight: 500;
  font-size: clamp(38px, 3vw, 54px);
  line-height: 1;
  color: #002f43;
  max-width: 421px;
  text-align: left !important;
}

.dyh-apps__title::before,
.dyh-apps__title::after {
  content: "";
  flex: 1 1 auto;
  height: 1px;
  background: #d8d8d8;
}

.dyh-apps__grid {
  display: grid;
  /* El número de columnas se elige en el elemento; 4 es el respaldo. */
  grid-template-columns: repeat(var(--dyh-apps-cols, 4), 1fr);
  gap: clamp(24px, 3vw, 40px) clamp(20px, 2.5vw, 32px);
}

@media (max-width: 900px) {
  .dyh-apps__grid { grid-template-columns: repeat(2, 1fr); }
}

@media (max-width: 480px) {
  .dyh-apps__grid { grid-template-columns: 1fr; }
}

.dyh-apps__item {
  display: flex;
  flex-direction: column;
  gap: 16px;
}

/* Es <a> cuando hay enlace y <span> cuando no, así que se estila la clase y no
   la etiqueta. */
.dyh-apps__media {
  display: block;
  width: 100%;
  aspect-ratio: 4 / 3;
  border-radius: 3px;
  overflow: hidden;
  /* Blanco: son PNG con fondo transparente (icono de vehículo aislado). */
  background: #ffffff;
}

/* Enfold inyecta por JS un <span class="image-overlay"> dentro de todo enlace
   que envuelva una imagen: un recuadro con un icono —de «enlace externo», en
   estas— que aparece al pasar el ratón, en su color primario. Aquí sobra: la
   card ya responde al hover cambiando de imagen (data-hover-src) y haciendo
   zoom, y el icono tapa justo el vehículo.

   Se oculta por CSS y no evitando la inyección: qué enlaces engancha depende
   de detalles internos del theme, y una regla es predecible y no se rompe al
   actualizar Enfold. El span se sigue creando, pero no pinta nada. */
.dyh-apps .image-overlay {
  display: none !important;
}

.dyh-apps__media img {
  width: 100%;
  height: 100%;
  object-fit: cover;
  display: block;
  background: #ffffff;
  /* Atenuadas en reposo; a toda opacidad + imagen "on" al pasar el ratón (ver
     el JS). El grado de atenuación se elige en el elemento. */
  opacity: var(--dyh-apps-op, 0.5);
  transition: transform 0.35s ease, opacity 0.35s ease;
}

.dyh-apps__item:hover .dyh-apps__media img {
  transform: scale(1.05);
  opacity: 1;
}

/* text-transform con !important: la hoja global fuerza
   h1..h6{text-transform:none !important} sobre cualquier heading. */
.dyh-apps__label {
  margin: 0;
  font-family: "Maven Pro", sans-serif;
  font-weight: 500;
  font-size: clamp(17px, 1.6vw, 21px);
  line-height: 1.2;
  letter-spacing: 0.2px;
  text-transform: uppercase !important;
  color: #002f43;
  text-align: left;
}

.dyh-apps__link {
  font-family: "Maven Pro", sans-serif;
  font-weight: 400;
  font-size: 15px;
  color: #cc233f;
  text-decoration: none;
}

/* La flecha va aquí y NO en el texto del enlace, que es una opción del
   elemento y acaba escrita como atributo del shortcode.

   Un `>` dentro de un atributo rompe wptexturize: WordPress deja de reconocer
   el shortcode, le curva las comillas (`'` pasa a `’`) y Enfold ya no puede
   leer sus atributos. La rejilla entera sale entonces con las imágenes, los
   nombres y los enlaces VACÍOS, sin ningún error. Pasó en producción con el
   texto por defecto «Ver productos >».

   Escaparlo como `&gt;` en el .alb.txt no basta: al guardar la página desde el
   builder vuelve a decodificarse a `>` y se rompe otra vez. La única forma de
   que no pueda repetirse es que ese carácter no exista en el atributo. */
.dyh-apps__link::after {
  content: " ›";
  font-weight: 500;
}

.dyh-apps__link:hover { text-decoration: underline; }

/* ==========================================================================
   8) SECCIÓN DEL VISUALIZADOR — elementos nativos de Enfold
   --------------------------------------------------------------------------
   Se monta con un Color Section (imagen de fondo + superposición, opciones
   propias de Enfold) y dentro un Encabezado, un Bloque de texto y un Botón.
   Aquí solo se ajusta la tipografía y la colocación, que vienen de Figma.

   El Color Section lleva la clase  dyh-visualizador  en «Custom CSS Class».
   ========================================================================== */

.dyh-visualizador.avia-section {
  /* El alto sale del ratio del diseño: en Figma (5109:9174) la sección mide
     1440x640, o sea 2.25 — el mismo que la galería de producto.

        100vw / 2.25 = 44.44vw

     Antes había 36vw con max-height:620px, que a 1440 daba 518px: 122px menos
     que el diseño. Y como la foto va con background-size:cover, ese alto de
     menos no encoge la imagen, la RECORTA — se veía el 41% de su altura en vez
     del 51%, y lo que se perdía era justo lo que sostiene el encuadre: la
     bóveda de hormigón por arriba y el suelo bajo el camión por abajo.

     El tope de 820px es para que en pantallas muy anchas la sección no se
     coma media página: es una banda de texto y botón, no una portada. */
  min-height: 360px;
  max-height: 820px;
  height: 44.44vw;
  display: flex;
  align-items: center;
  /* La imagen de fondo se elige en el Color Section (pestaña Fondo → Imagen de
     fondo). Enfold la pone con background-size:auto, que a este tamaño deja la
     foto pequeña y repetida; aquí se fuerza a cubrir toda la sección. */
  background-size: cover !important;
  background-position: center center !important;
  background-repeat: no-repeat !important;
  position: relative;
}

/* El velo oscuro sobre la foto.

   No se usa la superposición del propio Color Section de Enfold: la mete como
   un <div> dentro del flujo, y al ser esta sección un contenedor flex se queda
   con la altura de su contenido (195 de 518 px), oscureciendo solo la franja
   central. Este pseudo-elemento cubre siempre la sección entera.

   El degradado es el mismo que en dyresel.com: más oscuro a la izquierda, que
   es donde va el texto, y se abre hacia la derecha para que se vea la foto. */
.dyh-visualizador.avia-section::before {
  content: "";
  position: absolute;
  inset: 0;
  z-index: 1;
  pointer-events: none;
  background: linear-gradient(90deg, rgba(0, 0, 0, 0.75) 0%, rgba(0, 0, 0, 0.5) 42%, rgba(0, 0, 0, 0.5) 100%);
}

/* El contenido, por encima del velo. */
.dyh-visualizador.avia-section > .container {
  position: relative;
  z-index: 2;
}

/* El contenido se alinea a la izquierda, no centrado en la página. */
.dyh-visualizador .container {
  padding-left: clamp(24px, 8vw, 140px) !important;
  padding-right: clamp(24px, 8vw, 140px) !important;
}

/* Tope de ancho del bloque de texto: 421px, el del frame de Figma 5109:9176.
   Es lo que hace que el titular caiga a dos líneas —«Prueba nuestro /
   visualizador»— como en el diseño.

   Antes esto apuntaba a `.flex_column`, que en esta sección NO EXISTE: Enfold
   solo envuelve en columnas cuando se usan elementos de columna, y aquí los
   elementos cuelgan directos de .entry-content-wrapper. O sea que el max-width
   de 560px que había nunca llegó a aplicarse — el texto ocupaba todo el ancho
   de la sección. */
.dyh-visualizador .av_textblock_section {
  max-width: min(421px, 100%);
}

/* color !important + text-align explícito: la hoja global del sitio fuerza
   h1..h6 { text-align:center; color:#002f43 !important } sobre el elemento. */
.dyh-visualizador .avia_textblock h2 {
  margin: 0 0 20px;
  font-family: "Maven Pro", sans-serif;
  font-weight: 500;
  font-size: clamp(28px, 3.8vw, 48px);
  line-height: 0.91;
  letter-spacing: -0.06em;
  color: #ffffff !important;
  text-align: left;
}

.dyh-visualizador .avia_textblock {
  margin: 0 0 28px;
  font-family: "Maven Pro", sans-serif;
  font-weight: 400;
  text-align: left;
}

/* El subtítulo, token «Desktop/Subtittle/XS» del diseño: 18px / 133% / -0.36px
   y blanco puro (antes iba a 22px, con el interlineado por defecto, en un
   blanco al 90% y con el interletraje de párrafo del sitio).

   Los valores relativos dan exactamente los del token a partir de 1263px de
   ancho —el mismo punto en el que el titular llega a sus 48px— y por debajo
   encogen a la vez que él:

     1.425vw  ->  18px          -0.02em sobre 18px  ->  -0.36px

   El interletraje en em y no en px por lo mismo que en el titular: -0.36px
   fijos sobre una fuente ya encogida a 16px aprietan proporcionalmente más.

   Va con `.dyh-sec` delante a propósito. Sin él empata en especificidad con el
   reset acotado (`.dyh-sec .entry-content-wrapper p`, que replica el -0.54px de
   la hoja global del sitio) y solo gana por ir más abajo en el archivo — que es
   justo el tipo de dependencia que se rompe al reordenar bloques. */
.dyh-sec.dyh-visualizador .avia_textblock p {
  font-size: clamp(16px, 1.425vw, 18px);
  line-height: 1.33;
  letter-spacing: -0.02em;
  color: #ffffff;
}

.dyh-visualizador .avia_textblock p {
  margin: 0;
}

.dyh-visualizador .avia-button {
  padding: 16px 32px;
  border-radius: 999px;
  border: 2px solid #a6293e;
  background: #a6293e;
  color: #ffffff;
  font-family: "Maven Pro", sans-serif;
  font-weight: 400;
  font-size: clamp(14px, 1.1vw, 16px);
  transition: transform 0.25s ease, background 0.25s ease, border-color 0.25s ease;
}

.dyh-visualizador .avia-button:hover {
  background: #8c2234;
  border-color: #8c2234;
  transform: translateY(-2px);
}

/* ==========================================================================
   9) SCROLL HINT
   --------------------------------------------------------------------------
   Fijo al viewport (no a una sección) para que no se mueva de sitio. Sin
   fondo: es solo texto/icono que se invierte según lo que tenga detrás.
   El JS decide el modo leyendo  data-dyh-hint  de cada sección.
   ========================================================================== */

.dyh-hint {
  position: fixed;
  left: 50%;
  bottom: 32px;
  z-index: 999;
  transform: translateX(-50%);
  display: flex;
  flex-direction: column;
  align-items: center;
  gap: 6px;
  background: none;
  border: none;
  padding: 0;
  color: #ffffff;
  font-family: "Maven Pro", sans-serif;
  font-size: 13px;
  letter-spacing: 2px;
  text-transform: uppercase;
  cursor: pointer;
  opacity: 0;
  pointer-events: none;
  transition: opacity 0.8s ease, color 0.3s ease;
}

.dyh-hint.dyh-is-visible {
  opacity: 1;
  pointer-events: auto;
}

/* Invertido para los tramos de fondo claro. */
.dyh-hint.dyh-is-light { color: #1a1a1a; }

/* Oculto del todo mientras hay una sección con nav propio (galerías) o la
   última sección en pantalla, para que no se solapen. */
.dyh-hint.dyh-is-hidden {
  opacity: 0 !important;
  pointer-events: none !important;
}

.dyh-hint__chevrons {
  display: flex;
  flex-direction: column;
  align-items: center;
}

.dyh-hint__chevrons span {
  width: 14px;
  height: 14px;
  border-right: 2px solid currentColor;
  border-bottom: 2px solid currentColor;
  transform: rotate(45deg);
  margin-top: -6px;
  animation: dyh-bounce 1.6s ease-in-out infinite;
}

.dyh-hint__chevrons span:nth-child(2) { animation-delay: 0.15s; }

@keyframes dyh-bounce {
  0%, 100% { opacity: 0.3; transform: rotate(45deg) translate(0, 0); }
  50%      { opacity: 1;   transform: rotate(45deg) translate(4px, 4px); }
}

/* ==========================================================================
   10) prefers-reduced-motion
   ========================================================================== */

@media (prefers-reduced-motion: reduce) {
  .dyh-hint__chevrons span { animation: none; }
  /* Las transiciones de los elementos nativos las gobierna la propia opción
     de animación de Enfold, que ya respeta esta preferencia. */
  .dyh-texto__p .dyh-word { transition: none; }
}
