/* ==========================================================================
   components.css — Componentes reutilizables (botones, tarjetas, hero,
   badges, modal, WhatsApp flotante, formulario)
   ========================================================================== */

/* Botones */
.btn-isa{ padding:.75rem 1.75rem; font-size:.9rem; border-radius:var(--radius-corp); font-weight:700; display:inline-block; transition:all .2s ease; }
.btn-isa-sm{ padding:.45rem 1.1rem; font-size:.8rem; border-radius:var(--radius-corp); font-weight:700; display:inline-block; transition:all .2s ease; }

/* Botón "Contactar a Ingeniería" de cada caso de éxito en casos-de-exito.html:
   30% más chico que el resto del sitio (que usa .btn-isa sin modificar,
   padding .75rem 1.75rem y font-size .9rem), a petición del usuario. Se usa
   JUNTO con btn-isa (mismo patrón que .hero-cta-btn arriba) — no afecta
   ningún otro botón del proyecto. */
.btn-isa-cta-sm{ padding:.525rem 1.225rem; font-size:.63rem; }

/* Certificados */
.bronze-certificate{
  background:linear-gradient(135deg,#fdfbfb 0%,#ebedee 100%);
  border:1px solid var(--gray-200);
  box-shadow:0 4px 6px -1px rgba(0,0,0,.05), inset 0 0 0 1px rgba(255,255,255,.5);
}
.bronze-text{
  background:linear-gradient(to right,#b07d46,#d4af37,#b07d46);
  -webkit-background-clip:text; background-clip:text; -webkit-text-fill-color:transparent;
}
.white-text{ color:#ffffff; }

/* Hero backgrounds (imagen local por página) */
.hero-bg,.hero-bg-index{ background-image:linear-gradient(to right, rgba(5,63,135,.9), rgba(5,63,135,.4)), var(--hero-img); background-size:cover; background-position:center; background-attachment:fixed; }
@media (max-width:768px){ .hero-bg-index{ background-attachment:scroll !important; } }

/* Nuevo diseño de hero: la imagen se ajusta SOLO al alto del contenedor
   (mantiene su proporción natural, sin recortarse ni estirarse a lo ancho),
   queda centrada horizontalmente, y los bordes izquierdo/derecho se funden
   hacia el fondo real de la sección mediante una MÁSCARA CSS (mask-image)
   aplicada directamente sobre la propia <img>.

   Por qué máscara y no un div superpuesto con degradado de color:
   la máscara vuelve TRANSPARENTES los píxeles de la imagen en los bordes,
   dejando ver el fondo real de la sección (bg-isa-primary, ya presente en
   el <section> del hero) sin necesidad de "fingir" ese color en un
   gradiente aparte que había que mantener sincronizado a mano. Si el color
   de fondo de una página cambia, el desvanecimiento se sigue viendo
   correcto automáticamente — no hay nada que reajustar aquí.

   --hero-fade-w controla el ancho de la zona de desvanecimiento a cada
   lado; se puede sobreescribir por breakpoint (ver abajo) o por página
   (ej. en pages.css: .hero-bg .hero-img-fit-height{ --hero-fade-w:300px }).
   --hero-img-opacity controla qué tan visible es la imagen en el centro
   (fuera de la zona de desvanecimiento de los bordes); en .16 queda muy
   sutil, casi insinuada, para no competir con el texto del hero. También
   sobreescribible por página igual que --hero-fade-w. */
.hero-img-fit-height{
  position: absolute;
  top: 0;
  bottom: 0;
  left: 50%;
  height: 100%;
  width: auto;
  max-width: none; /* anula el max-width:100% por defecto de las imágenes */
  transform: translateX(-50%);
  --hero-fade-w: 220px;
  --hero-img-opacity: .16; /* insinúa la imagen sin competir con el texto del hero */
  opacity: var(--hero-img-opacity);
  -webkit-mask-repeat: no-repeat;
  mask-repeat: no-repeat;
  -webkit-mask-image: linear-gradient(to right,
      transparent 0,
      black var(--hero-fade-w),
      black calc(100% - var(--hero-fade-w)),
      transparent 100%);
  mask-image: linear-gradient(to right,
      transparent 0,
      black var(--hero-fade-w),
      black calc(100% - var(--hero-fade-w)),
      transparent 100%);
}
@media (max-width: 640px){
  .hero-img-fit-height{ --hero-fade-w: 110px; }
}

/* .hero-fade-left / .hero-fade-right: se dejan sin efecto (no se borran del
   HTML de ninguna página) porque la máscara de arriba ya resuelve el
   desvanecimiento directamente sobre la imagen, con mejor resultado
   (transparencia real en vez de un color superpuesto). Desactivarlas aquí
   evita tener que tocar el HTML de index.html, casos-de-exito.html, etc.
   Si en el futuro se retira la máscara, basta con borrar este bloque para
   reactivarlas tal cual estaban. */
.hero-fade-left,
.hero-fade-right{ display:none; }

/* Zoom en hover sobre imagen de tarjeta */
.hover-zoom-img{ overflow:hidden; }
.hover-zoom-img img{ transition:transform .6s cubic-bezier(.25,.46,.45,.94); }
.hover-zoom-img:hover img{ transform:scale(1.06); }

/* Lazy load nativo */
img.lazyload{ opacity:0; transition:opacity .5s ease-in-out; }
img.lazyload.loaded{ opacity:1; }

/* Scroll reveal */
.reveal{ opacity:0; transform:translateY(30px); transition:all .8s ease-out; }
.reveal.active{ opacity:1; transform:translateY(0); }

/* Variantes de dirección para .reveal (7 de septiembre de 2026, mejoras de
   animación de index.html): se usan JUNTO con .reveal (nunca solas), el
   observador de animations.js sigue detectando el elemento por su clase
   .reveal normal — estas solo cambian la posición de partida/llegada.
   Van DESPUÉS de la regla .reveal de arriba en este mismo archivo para que
   su `transform` gane sobre el de .reveal (misma especificidad, gana el
   orden en el archivo). */
.reveal.reveal-left{ transform:translateX(-40px); }
.reveal.reveal-left.active{ transform:translateX(0); }
.reveal.reveal-right{ transform:translateX(40px); }
.reveal.reveal-right.active{ transform:translateX(0); }

/* Retrasos escalonados para .reveal (mismo motivo de orden que arriba: van
   después de .reveal para que su `transition-delay` no quede pisado por el
   `transition:all .8s ease-out` de la regla base). Se combinan con .reveal
   (y opcionalmente con .reveal-left/.reveal-right) para que varios elementos
   entren en cascada en vez de todos al mismo tiempo. */
.reveal.reveal-d1{ transition-delay:.12s; }
.reveal.reveal-d2{ transition-delay:.24s; }
.reveal.reveal-d3{ transition-delay:.36s; }
.reveal.reveal-d4{ transition-delay:.48s; }
.reveal.reveal-d5{ transition-delay:.6s; }

/* Botón flotante de WhatsApp */
.whatsapp-float{
  position:fixed; right:1.5rem; bottom:1.5rem; z-index:60;
  width:3.5rem; height:3.5rem; border-radius:50%;
  background:#25D366; color:#fff; display:flex; align-items:center; justify-content:center;
  box-shadow:0 10px 25px rgba(37,211,102,.4);
  transition:transform .2s ease;
}
.whatsapp-float:hover{ transform:scale(1.08); }
.whatsapp-float .ph{ width:1.8rem; height:1.8rem; }

/* Modal de casos de éxito */
.modal-overlay{
  position:fixed; inset:0; z-index:70; background:rgba(17,24,39,.7);
  display:flex; align-items:center; justify-content:center; padding:1.5rem;
}
.modal-panel{ background:#fff; border-radius:var(--radius-corp); max-width:56rem; width:100%; max-height:90vh; overflow-y:auto; padding:1.5rem; }
@media (min-width:768px){ .modal-panel{ padding:2.5rem; } }

/* Skeleton simple para imágenes lazy sin JS (accesibilidad de carga) */
.img-frame{ background:var(--gray-100); }

/* Bullet "•" para listas de enlaces del footer (Compañía / Soluciones) */
.footer-nav-list li{ position:relative; padding-left:1.1rem; }
.footer-nav-list li::before{ content:"•"; position:absolute; left:0; top:0; color:var(--gray-500); }

/* Distribución de las 4 columnas del footer (Logo/desc, Compañía, Soluciones,
   Certificaciones): en escritorio la primera columna necesita más ancho para
   el párrafo y el bloque "+20", así que deja de ser un grid de 4 columnas
   iguales y pasa a 4fr/1fr/1fr/1fr — sin tocar el HTML.

   El selector se ancla a la ESTRUCTURA (el grid de 4 columnas que vive
   directo dentro de .max-w-7xl, dentro de <footer>), no a una clase de
   espaciado como .mb-16/.mb-10/etc. — esas clases se han ido ajustando
   varias veces (mb-16 -> mb-10 -> mb-[1.75rem]) y cada vez que cambiaban,
   el selector viejo (footer .grid.lg\:grid-cols-4.mb-16) dejaba de
   coincidir y esta regla se desactivaba en silencio, sin dar error.
   Con este selector, cualquier página que reutilice el mismo footer
   (index.html, cronologia.html, o cualquier página nueva que se agregue
   más adelante) hereda automáticamente esta distribución — no hay que
   tocar este archivo de nuevo aunque el espaciado del grid cambie. */
@media (min-width:1024px){
  footer .max-w-7xl > .grid.lg\:grid-cols-4{
    /* Columna 4 (Certificaciones) agrandada 20% respecto a su valor previo
       (1.15fr -> 1.38fr) a petición del cliente. Como esta regla es
       estructural (no depende de una clase de página), el cambio se aplica
       automáticamente en las 10 páginas que reutilizan este mismo footer. */
    grid-template-columns: 4fr 1fr 1.15fr 1.38fr;
  }
}

/* Espacio entre cada título (h4: Compañía / Soluciones / Certificaciones)
   y su lista de abajo, en el footer. Antes usaba mb-6 (1.5rem) directo en
   el HTML, repetido en las 3 columnas x 7 páginas (21 líneas) — mismo
   problema que ya documentamos arriba con el grid de columnas: si alguien
   vuelve a tocar esas etiquetas a mano, el ajuste se pierde en silencio.
   Con este selector estructural (footer -> grid -> h4) se controla desde
   un solo lugar y se aplica en las 7 páginas automáticamente.

   Sin @media: se aplica en todos los tamaños de pantalla, no solo
   escritorio (a diferencia de la regla del grid de arriba, que sí es
   exclusiva de escritorio porque en móvil el grid pasa a una columna). */
footer .max-w-7xl > .grid.lg\:grid-cols-4 h4{
  margin-bottom: 0.75rem; /* antes 1rem, y antes de eso 1.5rem (mb-6) */
}

/* Excepción al mini-compilador de utilities.css: el compilador solo genera
   las clases border-b-N que ya estén en uso en el HTML del proyecto. Como
   .border-b-4 no se usaba en ningún otro lado antes de bajarle el grosor
   al borde inferior del hero (venía de border-b-8 → border-b-4), el
   compilador nunca la generó y la línea desaparecía en pantalla aunque la
   clase estuviera puesta en el HTML. Se define aquí manualmente para no
   tener que re-ejecutar el compilador; si más adelante utilities.css
   regenera e incluye .border-b-4 de forma nativa, esta regla queda de más
   pero no rompe nada (misma declaración, se puede borrar sin problema). */
.border-b-4{ border-bottom-width:4px; border-bottom-style:solid; }

/* Misma excepción al mini-compilador de utilities.css que .border-b-4 arriba:
   .max-h-20 no estaba en uso en ningún otro lado del proyecto antes de
   agrandar el logo de IFM en "Venta de Equipo" (index.html) al siguiente
   tamaño de la escala (max-h-14 -> max-h-20), así que el compilador nunca
   la generó. Se define aquí manualmente con el mismo valor que .h-20
   (5rem) ya usado en utilities.css. */
.max-h-20{ max-height:5rem; }

/* Misma excepción al mini-compilador de utilities.css que .border-b-4/.max-h-20
   arriba: .text-red-600 no estaba en uso en ningún otro lado del proyecto
   (solo existían las variantes :hover, .hover\:text-red-700/800, en
   utilities.css), así que el compilador nunca generó la versión base. Se
   usa en la etiqueta "MIEMBRO" del recuadro nuevo de contacto-isadc.html. */
.text-red-600{ color:#dc2626; }

/* Misma excepción al mini-compilador de utilities.css que .border-b-4
   arriba: .sm\:grid-cols-3 y .lg\:grid-cols-6 no estaban en uso en ningún
   otro lado del proyecto antes de la fila de 6 sectores en index.html
   (#sectores), así que el compilador nunca las generó — la clase estaba
   en el HTML pero el navegador la ignoraba, igual que pasó con
   .border-b-4. Se definen aquí manualmente por la misma razón: no
   depender de volver a ejecutar el compilador para ver el cambio. */
@media (min-width:640px){
  .sm\:grid-cols-3{ grid-template-columns:repeat(3, minmax(0, 1fr)); }
}
@media (min-width:1024px){
  .lg\:grid-cols-6{ grid-template-columns:repeat(6, minmax(0, 1fr)); }
}

/* ==========================================================================
   Menú desplegable "Servicios" — header desktop (index.html)
   ==========================================================================
   Panel que aparece bajo "Servicios" con fade + leve desplazamiento hacia
   abajo (mismo lenguaje de animación que .reveal / animations.css), borde
   superior en --color-accent y viñeta "·" en posición absoluta antes de
   cada enlace (mismo criterio que .footer-nav-list) para que el texto no
   se desplace al hacer hover, solo cambia de color.

   El trigger es un <a href="index.html#servicios"> real. Primer clic:
   abre el panel (JS intercepta y evita la navegación). Con el panel ya
   abierto, un segundo clic SÍ navega a index.html#servicios con
   normalidad. En escritorio también se abre con :hover/:focus-within
   como atajo visual — no interfiere con la lógica de clic, que se rige
   por la clase .is-open que agrega el script propio al final del
   archivo, independiente del estado de hover.
   ========================================================================== */
.nav-dropdown{ position: relative; }
.nav-dropdown__trigger{
  background: none;
  border: 0;
  font: inherit;
  cursor: pointer;
  padding: 0;
  display: inline-flex;
  align-items: center;
  gap: .3rem;
}
.nav-dropdown__caret{
  font-size: .7rem;
  transition: transform .25s ease;
}
.nav-dropdown__panel{
  position: absolute;
  top: calc(100% + 14px);
  left: 50%;
  min-width: 240px;
  background: var(--color-white);
  border-top: 3px solid var(--color-accent);
  border-radius: var(--radius-corp);
  box-shadow: 0 20px 40px -12px rgba(5,63,135,.28);
  padding: .5rem 0;
  opacity: 0;
  visibility: hidden;
  pointer-events: none;
  transform: translateX(-50%) translateY(-8px);
  transition: opacity .25s ease, transform .25s ease, visibility 0s linear .25s;
  z-index: 60;
}
.nav-dropdown:hover .nav-dropdown__panel,
.nav-dropdown:focus-within .nav-dropdown__panel,
.nav-dropdown.is-open .nav-dropdown__panel{
  opacity: 1;
  visibility: visible;
  pointer-events: auto;
  transform: translateX(-50%) translateY(0);
  transition: opacity .25s ease, transform .25s ease, visibility 0s linear 0s;
}
.nav-dropdown:hover .nav-dropdown__caret,
.nav-dropdown:focus-within .nav-dropdown__caret,
.nav-dropdown.is-open .nav-dropdown__caret{
  transform: rotate(180deg);
}
.nav-dropdown__link{
  position: relative;
  display: block;
  padding: .55rem 1.25rem .55rem 1.75rem; /* espacio fijo a la izq. reservado para la viñeta */
  font-size: .9rem;
  color: var(--gray-700);
  white-space: nowrap;
  transition: color .2s ease, background-color .2s ease;
}
.nav-dropdown__link::before{
  content: "·";
  position: absolute;
  left: .85rem;
  top: .45rem;
  font-weight: 700;
  font-size: 1.15rem;
  line-height: 1;
  color: var(--color-accent);
}
.nav-dropdown__link:hover{ color: var(--color-primary); background: var(--color-bg); }

@media (prefers-reduced-motion: reduce){
  .nav-dropdown__panel,
  .nav-dropdown__caret{ transition-duration: .01ms !important; }
}

/* ==========================================================================
   Acordeón "Servicios" — menú móvil (index.html)
   ==========================================================================
   Mismo criterio de viñeta "·" que el dropdown de escritorio. Se abre/cierra
   con max-height animable (display:none no se puede animar) — mismo patrón
   ya usado en el proyecto para #product-lightbox en venta-animaciones.css.
   La clase .is-open la agrega el script propio al final del archivo.
   ========================================================================== */
.mobile-nav-accordion__trigger{
  width: 100%;
  display: flex;
  align-items: center;
  justify-content: space-between;
  background: none;
  border: 0;
  font: inherit;
  font-weight: 500;
  text-align: left;
  cursor: pointer;
  padding: 1rem 1.5rem;
  color: var(--gray-600);
}
.mobile-nav-accordion__trigger:hover{ color: var(--color-primary); }
.mobile-nav-accordion__caret{
  font-size: .75rem;
  transition: transform .25s ease;
}
.mobile-nav-accordion.is-open .mobile-nav-accordion__caret{ transform: rotate(180deg); }

.mobile-nav-accordion__panel{
  max-height: 0;
  overflow: hidden;
  background: var(--color-bg);
  transition: max-height .35s ease;
}
.mobile-nav-accordion.is-open .mobile-nav-accordion__panel{ max-height: 22rem; }

.mobile-nav-accordion__link{
  position: relative;
  display: block;
  padding: .65rem 1.5rem .65rem 2.75rem;
  font-size: .9rem;
  color: var(--gray-600);
  border-bottom: 1px solid var(--gray-100);
}
.mobile-nav-accordion__link::before{
  content: "·";
  position: absolute;
  left: 1.75rem;
  top: .55rem;
  font-weight: 700;
  font-size: 1.15rem;
  line-height: 1;
  color: var(--color-accent);
}
.mobile-nav-accordion__link:last-child{ border-bottom: 0; }

@media (prefers-reduced-motion: reduce){
  .mobile-nav-accordion__panel,
  .mobile-nav-accordion__caret{ transition-duration: .01ms !important; }
}

/* Misma excepción al mini-compilador de utilities.css que .border-b-4 y
   .lg\:grid-cols-6 arriba: estas clases no estaban en uso en ningún otro
   lado antes de poner los 6 íconos de "Sectores" (index.html) en una sola
   fila a partir del móvil, así que el compilador nunca las generó. */
.grid-cols-6{ grid-template-columns:repeat(6, minmax(0, 1fr)); }
.gap-x-2{ column-gap:.5rem; }
.gap-y-4{ row-gap:1rem; }
@media (min-width:640px){
  .sm\:gap-x-6{ column-gap:1.5rem; }
}
@media (min-width:1024px){
  .lg\:gap-x-10{ column-gap:2.5rem; }
}

/* ==========================================================================
   .hero-section — alto homologado del hero en las 7 páginas del sitio
   ==========================================================================
   Reemplaza las clases sueltas "h-[40vh] min-h-[500px]" (o "h-[48vh]
   min-h-[360px]" en cronologiaISA.html) que antes se repetían en cada
   <section> de hero. Ahora el alto sale de UNA sola variable
   (--hero-height, definida en variables.css) para que cambiarlo en las 7
   páginas a la vez sea editar una sola línea, en un solo archivo.

   El hero ya NO lleva overlay de color/degradado (se quitó el <div> con
   el gradiente azul semitransparente que iba encima de la imagen en cada
   página) — la imagen se ve tal cual, sin tinte. bg-isa-primary se
   conserva como color de respaldo SOLO para el caso en que la imagen no
   cargue (ver el aviso con onerror de cada <img> de hero).
   ========================================================================== */
.hero-section{
  position: relative;
  height: var(--hero-height, 550px);
  display: flex;
  align-items: center;
  overflow: hidden;
}

/* ==========================================================================
   Hero de index.html (#inicio): altura FIJA de 500px (la imagen de fondo
   debe verse completa a su ancho real, sin recortarse — por eso la caja
   no se toca). El espacio que sobraba entre el menú y el bloque de
   logo+texto NO se resuelve achicando esta caja, sino cambiando cómo se
   posiciona el contenido DENTRO de ella: en vez de centrado verticalmente
   (align-items:center, heredado de .hero-section), aquí se ancla arriba
   (align-items:flex-start) con un colchón chico (padding-top) — así el
   bloque de logo+texto queda pegado cerca del menú, sin afectar el
   tamaño de la imagen ni de la caja del hero.
   ==========================================================================
   Selector con #inicio para que SOLO afecte esta página: las otras 6
   siguen usando la altura fija compartida de --hero-height Y el centrado
   vertical normal de .hero-section (ahí sí tiene sentido, son fotos a
   pantalla completa sin un bloque de texto tan alto encima). */
#inicio.hero-section{
  height: 500px;
  align-items: flex-start;
  padding-top: 2rem;
}

/* Misma excepción al mini-compilador de utilities.css que las de arriba:
   .h-\[3px\] no estaba en uso en ningún otro lado antes de la línea
   divisoria roja del hero de index.html. */
.h-\[3px\]{ height:3px; }

/* Misma excepción: .w-48 no estaba en uso en ningún otro lado antes de
   duplicar el largo de la línea divisoria roja del hero de index.html. */
.w-48{ width:12rem; }

/* Línea divisoria roja del hero de index.html: 4 veces su largo anterior
   (12rem -> 48rem). Como 48rem no es un valor de la escala estándar de
   utilities.css, se define aquí como excepción, mismo criterio que las
   de arriba. */
.hero-divider-4x{ width:48rem; max-width:100%; }

/* Línea divisoria roja del hero de index.html: la mitad de larga que
   .hero-divider-4x de arriba. Como esta última quedaba topada al 100%
   del ancho de su columna (48rem excedía el contenedor), "la mitad" se
   calcula sobre ese 100% visible, no sobre los 48rem literales que nunca
   llegaban a verse completos. */
.hero-divider-half{ width:50%; }

/* Misma excepción: fondo #f4f4f4 semitransparente + margen negativo para
   el "parche" de legibilidad detrás del párrafo del hero de index.html
   (la imagen de fondo ya no lleva degradado oscuro, así que un párrafo
   gris podía perderse contra zonas oscuras de la foto). Se usa #f4f4f4
   (el mismo gris de --color-bg) en vez de blanco puro, para que combine
   con el resto de la paleta. El margen negativo compensa visualmente el
   padding para que el texto siga alineado con el encabezado de arriba.
   El padding vertical (.hero-text-patch) queda lo más ajustado posible al
   texto (.1rem = 1.6px), casi pegado a las letras sin recortarlas. */
.bg-isa-bg-85{ background-color: rgba(244,244,244,.85); }
.-mx-4{ margin-left:-1rem; margin-right:-1rem; }
.hero-text-patch{ padding-top:.1rem; padding-bottom:.1rem; }

/* Botones del hero de index.html: más chicos que el resto del sitio (que
   usa .btn-isa sin modificar). Solo se aplica junto con btn-isa en esos 2
   botones — no afecta ningún otro botón del proyecto (formulario de
   contacto, CTA de cronología, etc.). Reduce alto (padding vertical),
   ancho (padding horizontal) y tamaño de letra a la vez. */
/* Botones del hero de index.html, 25% menos altos que el resto del sitio
   (que usa .btn-isa sin modificar: padding vertical .75rem). Solo se
   aplica junto con btn-isa en esos 2 botones — no afecta ningún otro
   botón del proyecto (formulario de contacto, CTA de cronología, etc.). */
.hero-cta-btn{ padding-top:.4rem; padding-bottom:.4rem; padding-left:1.4875rem; padding-right:1.4875rem; }

/* h1 del hero de index.html: esta clase NUNCA se había generado en ningún
   CSS del proyecto (ni utilities.css, ni una excepción aquí), así que el
   navegador ignoraba "leading-[1.05]" en el HTML y usaba el line-height:1.5
   por defecto del body (definido en base.css) — de ahí el salto tan grande
   entre "INTEGRACIÓN" y "DE SISTEMAS". Se define aquí, más ajustado
   (0.92 en vez del 1.05 que nunca llegó a aplicarse). */
.leading-\[1\.05\]{ line-height:.92; }

/* Misma excepción al mini-compilador de utilities.css: .text-base y .h-16
   no estaban en uso en ningún otro lado antes de achicar un escalón el
   texto del hero y agrandar un escalón el logotipo de index.html. */
.text-base{ font-size:1rem; }
.h-16{ height:4rem; }

/* Misma excepción: .h-28 (7rem) no estaba en uso en ningún otro lado antes
   de subir un escalón más el logotipo del hero de index.html (h-24 -> h-28). */
.h-28{ height:7rem; }

/* Misma excepción: .h-56 (14rem) no estaba en uso en ningún otro lado antes
   de duplicar el tamaño del logotipo del hero de index.html (h-28 -> h-56). */
.h-56{ height:14rem; }

/* Misma excepción: .flex-1 y .min-w-0 no estaban en uso en ningún otro
   lado antes de corregir el desbordamiento del bloque de texto del hero
   de index.html. Sin min-w-0, un hijo flex nunca se encoge más allá del
   ancho de su contenido (comportamiento por defecto de CSS Grid/Flexbox),
   así que el texto se salía del contenedor en vez de hacer salto de línea
   (wrap) para caber junto al logotipo. */
.flex-1{ flex:1 1 0%; }
.min-w-0{ min-width:0; }

/* Misma excepción: .pt-2 no estaba en uso en ningún otro lado antes de
   alinear verticalmente el bloque de texto del hero con el logotipo
   (index.html) cuando los botones se movieron debajo del logotipo. */
.pt-2{ padding-top:.5rem; }
@media (min-width:768px){
  .md\:pt-2{ padding-top:.5rem; }
}

/* ==========================================================================
   Menú principal (header) — ancho reducido 30% en las 7 páginas del sitio
   ==========================================================================
   Auditoría: 5 de las 7 páginas (casos-de-exito, contacto-isadc,
   cronologiaISA, servicios-integrales, venta) YA tenían esta clase
   aplicada en su header con un valor de -20% (64rem). index.html y
   capacitacion.html no la tenían (por eso se veían con el hueco amplio
   en la captura de referencia). Se mantiene el mismo NOMBRE de clase
   (max-w-5xl) para no romper esas 5 páginas que ya la usan — solo se
   actualiza el VALOR al 30% pedido ahora, y se agrega la clase al header
   de index.html y capacitacion.html para que las 7 queden iguales.

   Cálculo: hueco medido en pantalla ~220px (equivalentes en CSS) a cada
   lado del menú. Con justify-between, ese hueco es exactamente la mitad
   del espacio libre del contenedor — angostar el contenedor 128px reduce
   cada hueco en 64px (~29% ≈ 30% pedido). 80rem (1280px, max-w-7xl) menos
   esos 128px = 72rem.

   Se aplica SOLO al contenedor interno del <header>, no a los demás
   bloques "max-w-7xl" de cada página (footer, hero, secciones internas),
   que conservan su ancho de 80rem sin cambios — así el logo y el botón
   se acercan al menú sin que el header dejе de alinearse con el resto
   del contenido de la página. */
.max-w-5xl{ max-width:72rem; }

/* ==========================================================================
   Colores de marca en venta.html — ProSoft, ABB, ifm y Airtac
   ==========================================================================
   Auditoría: el mini-compilador de utilities.css solo había generado las
   clases de color arbitrario (bg-[#..], border-[#..], hover:border-[#..],
   text-[#..]) para Rockwell, Siemens, Delta y Danfoss — probablemente
   porque esas 4 marcas se agregaron al HTML antes de la última vez que se
   compiló utilities.css. Las 4 restantes (ProSoft #1a1a1a, ABB #e2001a,
   ifm #ee7203, Airtac #004990) SÍ tenían las clases puestas en el HTML,
   pero al no existir en ningún CSS no hacían nada — por eso no se veía ni
   el marco superior de su sección, ni el color del nombre de la marca, ni
   el borde al pasar el mouse sobre sus imágenes. Se agregan aquí manual,
   mismo criterio que el resto de excepciones de este archivo. */
.bg-\[\#1a1a1a\]{ background-color:#1a1a1a; }
.bg-\[\#1a1a1a\]\/5{ background-color:rgba(26,26,26,.05); }
.border-\[\#1a1a1a\]{ border-color:#1a1a1a; }
.hover\:border-\[\#1a1a1a\]:hover{ border-color:#1a1a1a; }
.text-\[\#1a1a1a\]{ color:#1a1a1a; }

.bg-\[\#e2001a\]{ background-color:#e2001a; }
.bg-\[\#e2001a\]\/5{ background-color:rgba(226,0,26,.05); }
.border-\[\#e2001a\]{ border-color:#e2001a; }
.hover\:border-\[\#e2001a\]:hover{ border-color:#e2001a; }
.text-\[\#e2001a\]{ color:#e2001a; }

.bg-\[\#ee7203\]{ background-color:#ee7203; }
.bg-\[\#ee7203\]\/5{ background-color:rgba(238,114,3,.05); }
.border-\[\#ee7203\]{ border-color:#ee7203; }
.hover\:border-\[\#ee7203\]:hover{ border-color:#ee7203; }
.text-\[\#ee7203\]{ color:#ee7203; }

.bg-\[\#004990\]{ background-color:#004990; }
.bg-\[\#004990\]\/5{ background-color:rgba(0,73,144,.05); }
.border-\[\#004990\]{ border-color:#004990; }
.hover\:border-\[\#004990\]:hover{ border-color:#004990; }
.text-\[\#004990\]{ color:#004990; }

/* ==========================================================================
   Clases de utilidad usadas en el HTML pero nunca generadas por el mini-
   compilador de utilities.css — agregadas el 7 de septiembre de 2026 tras
   la auditoría integral de producción (39 clases en total, agrupadas por
   tipo). Mismo patrón ya usado para .border-b-4/.max-h-20/.text-red-600/
   .btn-isa-cta-sm: se agregan aquí a mano, con la misma escala 0.25rem por
   unidad que ya usa utilities.css (confirmada revisando sus reglas
   existentes), en vez de modificar el archivo compilado.
   ========================================================================== */

/* Espaciado y tamaño simples */
.mb-5{ margin-bottom:1.25rem; }
.mt-8{ margin-top:2rem; }
.pt-6{ padding-top:1.5rem; }
.pb-20{ padding-bottom:5rem; }
.pr-4{ padding-right:1rem; }
.px-5{ padding-left:1.25rem; padding-right:1.25rem; }
.py-10{ padding-top:2.5rem; padding-bottom:2.5rem; }
.gap-1\.5{ gap:0.375rem; }
.space-y-1\.5 > :not([hidden]) ~ :not([hidden]){ margin-top:0.375rem; }
.w-12{ width:3rem; }
.max-w-full{ max-width:100%; }
.max-w-xl{ max-width:36rem; }
.min-h-screen{ min-height:100vh; }
.right-5{ right:1.25rem; }
.top-5{ top:1.25rem; }
.-left-8{ left:-2rem; }
.z-0{ z-index:0; }

/* Valores arbitrarios entre corchetes (el mini-compilador no genera esta
   sintaxis) */
.max-h-\[85vh\]{ max-height:85vh; }
.max-w-\[240px\]{ max-width:240px; }
.max-w-\[300px\]{ max-width:300px; }
.z-\[80\]{ z-index:80; }

/* Variantes de opacidad de color (formato color/N) */
.bg-black\/85{ background-color:rgba(0, 0, 0, 0.85); }
.border-white\/40{ border-color:rgba(255, 255, 255, 0.40); }
.hover\:bg-white\/20:hover{ background-color:rgba(255, 255, 255, 0.20); }
.hover\:opacity-75:hover{ opacity:0.75; }
.hover\:opacity-90:hover{ opacity:0.90; }

/* Texto y listas */
.underline{ text-decoration:underline; }
.list-disc{ list-style-type:disc; list-style-position:outside; }
/* Usa el mismo azul ya aplicado por .text-isa-primary en utilities.css
   (#053f87) para que el color del bullet coincida con el resto del texto
   ya pintado con esa clase en la página — no el azul de variables.css
   (#002060), que utilities.css no usa en ningún otro lado. */
.marker\:text-isa-primary::marker{ color:#053f87; }

/* Ring-offset: en el proyecto no existe un sistema genérico de "ring" con
   separación (Tailwind real lo hace con varias variables CSS encadenadas);
   aquí solo se usa una vez, en el artículo destacado de
   casos-de-exito.html (clases combinadas .ring-2.ring-isa-accent.ring-
   offset-4), así que se resuelve como una sola regla dirigida a esa
   combinación exacta en vez de construir el sistema completo para un único
   uso. Un solo box-shadow con 2 capas: 4px blancos (el "hueco") + 2px más
   de acento dorado (el aro), en vez de un anillo pegado al borde. */
.ring-2.ring-isa-accent.ring-offset-4{ box-shadow:0 0 0 4px #fff, 0 0 0 6px #ffb800; }

/* Variantes responsive: mismos puntos de quiebre que ya usa utilities.css
   (640px/768px/1024px), en bloques @media propios de este archivo. */
@media (min-width: 640px){
  .sm\:block{ display:block; }
  .sm\:mt-24{ margin-top:6rem; }
  .sm\:px-10{ padding-left:2.5rem; padding-right:2.5rem; }
}
@media (min-width: 768px){
  .md\:block{ display:block; }
  .md\:gap-4{ gap:1rem; }
  .md\:items-start{ align-items:flex-start; }
  .md\:text-lg{ font-size:1.125rem; }
}
@media (min-width: 1024px){
  .lg\:gap-16{ gap:4rem; }
  .lg\:text-5xl{ font-size:3rem; }
}
