/* Geist se carga desde el <head> de cada HTML vía <link rel="preconnect">
   + <link rel="stylesheet"> (ver plantilla de cada página) en vez de
   @import, para evitar el hop de red extra que bloquea el render. */

/* =========================================================
   VARIABLES — Sistema de Diseño Alta Group
   ========================================================= */
:root {
  /* Colores base */
  --color-light: #D9D9D9;   /* Gris claro */
  --color-dark: #1F1F1F;    /* Oscuro — Textos/Títulos */
  --color-gray: #4B5563;    /* Gris medio — Párrafos */
  --color-primary: #D31212; /* Rojo Alta — Acentos/Botones */
  --color-white: #FFFFFF;

  /* Excepción visual pedida por el cliente para las tarjetas de datos del Home */
  --color-card-accent: #D0E5FF;
  --color-footer-dark: #8F8F8F;
  /* Tipografía (Geist) */
  --font-main: "Geist", Arial, sans-serif;
  --font-heading: "Geist", Arial, sans-serif;

  /* Fluida: clamp(mínimo, preferido, máximo) — escala sin romper mobile */
  --type-title-size: clamp(2rem, 1.5rem + 2.5vw, 3.75rem);      /* Títulos de sección: 32px → 60px, ExtraBold */
  --type-subtitle-size: clamp(1.5rem, 1.2rem + 1.4vw, 2.5rem);  /* Subtítulos: 24px → 40px, SemiBold */
  --type-body-size: clamp(1rem, 0.9rem + 0.4vw, 1.25rem);       /* Texto/Links: 16px → 20px, Medium */
  --type-tracking: 0.1em;

  --container-width: 1480px;
  --header-height: 90px;
  --radius: 0;
  --transition: 0.3s ease;
}

/* =========================================================
   RESET Y TIPOGRAFÍA BASE
   ========================================================= */
*, *::before, *::after {
  box-sizing: border-box;
  margin: 0;
  padding: 0;
}
html { scroll-behavior: smooth; overflow-x: hidden; }
body {
  font-family: var(--font-main);
  color: var(--color-dark);
  line-height: 1.5;
  overflow-x: hidden;
}
img { max-width: 100%; display: block; }
a { text-decoration: none; color: inherit; }
ul { list-style: none; }
button { font-family: inherit; cursor: pointer; border: none; background: none; }

h1, h2, h3, h4 {
  font-family: var(--font-heading);
  line-height: 1.2;
  letter-spacing: var(--type-tracking);
  color: var(--color-dark);
  word-break: normal;
  overflow-wrap: break-word;
}
h1, h2 { font-size: var(--type-title-size); font-weight: 800; text-transform: uppercase; } /* ExtraBold */
h2 { margin-bottom: 1.5rem; }
h3, h4 { font-size: var(--type-subtitle-size); font-weight: 500; } /* SemiBold */

p, li {
  font-family: var(--font-main);
  font-size: var(--type-body-size);
  font-weight: 500; /* Medium */
  letter-spacing: var(--type-tracking);
  color: var(--color-gray);
  word-break: normal;
  overflow-wrap: break-word;
}

.text-primary { color: var(--color-primary); }

.container {
  width: 100%;
  max-width: 1240px;
  margin: 0 auto;
  padding: 0 24px;
}
section { padding: 60px 0; }

/* =========================================================
   BOTONES
   ========================================================= */
.btn {
  display: inline-flex; align-items: center; padding: 14px 32px;
  border-radius: var(--radius); font-family: var(--font-main);
  font-weight: 600; letter-spacing: var(--type-tracking);
  text-align: center; transition: background var(--transition), transform var(--transition), filter var(--transition);
}
.btn--primary { background: var(--color-primary); color: var(--color-white); border-radius: 20px; }
.btn--primary:hover { filter: brightness(0.9); transform: translateY(-2px); }
.btn--small { padding: 10px 22px; font-size: 0.8rem; }

/* Botón de descarga del PDF de presentación — transversal (Nosotros y el
   hub de Servicios lo usan ambos), por eso vive acá y no repetido en cada
   CSS de página. */
.btn-pdf-download {
  display: inline-flex;
  align-items: stretch;
  background: var(--color-primary);
  color: var(--color-white);
  border-radius: 4px;
  overflow: hidden;
  transition: filter var(--transition), transform var(--transition);
}
.btn-pdf-download:hover,
.btn-pdf-download:focus-visible {
  filter: brightness(0.92);
  transform: translateY(-2px);
}
.btn-pdf-download__badge {
  display: flex;
  align-items: center;
  justify-content: center;
  padding: 16px 20px;
  background: rgba(0, 0, 0, 0.18);
  font-weight: 800;
  font-size: 0.9rem;
  letter-spacing: 0.04em;
}
.btn-pdf-download__label {
  display: flex;
  align-items: center;
  padding: 16px 28px;
  font-weight: 700;
  font-size: 0.95rem;
  letter-spacing: 0.08em;
  text-transform: uppercase;
}
.btn-pdf-download__icon {
  display: flex;
  align-items: center;
  padding: 0 24px;
}
.btn-pdf-download__icon svg { width: 20px; height: 20px; }
@media (max-width: 600px) {
  .btn-pdf-download__badge { padding: 14px 14px; }
  .btn-pdf-download__label { padding: 14px 16px; font-size: 0.85rem; }
  .btn-pdf-download__icon { padding: 0 16px; }
}
@media (max-width: 400px) {
  .btn-pdf-download__badge { padding: 12px 12px; }
  .btn-pdf-download__label { padding: 12px 14px; font-size: 0.8rem; }
  .btn-pdf-download__icon { padding: 0 14px; }
}

.section-kicker {
  display: block; margin-bottom: 25px; color: var(--color-primary);
  font-size: 1.2rem; font-weight: 600; letter-spacing: 0.15em;
  text-transform: uppercase; text-align: center;
}

/* =========================================================
   CTA FINAL (componente transversal — Home, hub de Servicios
   y fichas de detalle de servicio)
   ========================================================= */
.final-cta { padding: 0; }
.final-cta__grid { display: grid; grid-template-columns: 1.2fr 0.8fr; min-height: 410px; }
.final-cta__text { padding: clamp(32px, 8vw, 75px) clamp(20px, 4vw, 30px) clamp(32px, 7vw, 70px) clamp(20px, 6vw, 70px); }
.final-cta__text h2 { max-width: 700px; overflow-wrap: break-word; }
.final-cta__text p { max-width: 520px; margin-bottom: 3vh; }
.final-cta__image { position: relative; min-height: 410px; overflow: hidden; background: var(--color-white); }
.final-cta__image img:first-child { display: none; }
.final-cta__brush { position: absolute; top: 8%; right: 26%; height: 84%; width: auto; }
.final-cta__grid > * { min-width: 0; }

/* =========================================================
   HEADER — transparente y absoluto sobre el Hero (diseño
   original: el logo/topbar viven acá y se van con el scroll,
   nunca se ocultan ni quedan fijos — eso rompía la estética).
   La navegación que SÍ queda fija con hide-on-scroll-down /
   show-on-scroll-up es el <nav> (ver más abajo, ".nav.is-sticky",
   y main.js), que se independiza del header una vez que este
   sale de vista.
   ========================================================= */
.header {
  position: absolute; top: 0; left: 0; width: 100%;
  z-index: 1000; background: transparent; box-shadow: none;
}
/* Barra celeste finita — mismo color que las cajas de "Acerca de
   Nosotros" (--color-card-accent), pedido para que el mail/teléfono
   y los iconos sociales tengan un fondo propio en vez de flotar
   transparentes sobre el Hero. */
.topbar { background: var(--color-card-accent); border: 0; }
.topbar__inner {
  position: relative; min-height: 34px; display: flex; align-items: center;
  font-size: 13px; color: var(--color-dark); letter-spacing: 0.08em;
}
.topbar__contact { width: 100%; display: flex; justify-content: space-between; }
.topbar__contact a, .topbar__social a { display: flex; align-items: center; gap: 8px; color: var(--color-gray);font-weight: 600; transition: color var(--transition); font-size: 15px; }
.topbar__contact a:nth-child(2) { position: absolute; top: 50%; left: 50%; transform: translate(-50%, -50%); }
.topbar__contact img { width: 15px; opacity: 0.85;  }
/* El glyph de mail (topbar y footer) se pide un poco más grande,
   proporcional al texto de al lado — sólo tamaño de fuente, nada
   más: es texto (HTML entity), no una imagen. */
.icon-mail { font-size: 1.35em; }
.topbar__social { position: absolute; right: 22px; display: flex; gap: 16px; }
.topbar__social img { width: 20px; opacity: 0.85; transition: opacity var(--transition); }
.topbar__phone-icon, .topbar__mail-icon {
  width: 20px; height: 20px; flex-shrink: 0; opacity: 0.85;
}
.topbar__social-mail { display: none !important; }
.topbar__social a:hover img { opacity: 1; }
.topbar__contact a:hover, .topbar__social a:hover { color: var(--color-primary); }

/* Variante clara del Header para páginas internas sin Hero detrás.
   El Header base es position:absolute + fondo transparente, pensado
   para superponerse al Hero de la Home. En páginas sin Hero (ej.
   servicios/index.html) se usa esta variante: vuelve al flujo normal
   con fondo blanco y textos oscuros para mantener el contraste. */
.header--light .topbar__contact a,
.header--light .topbar__social a { color: var(--color-gray); }
.header--light .topbar__social img { filter: none; opacity: 0.7; }
.header--light .hamburger span { background: var(--color-dark); }
/* Header--light se mantiene absolute + transparente (como el Header
   base) para flotar sobre el fondo de la página, pero logo y nav van
   en una sola fila a la misma altura, en vez de apilados como en la
   Home (que necesita más aire para el Hero). */
.header--light .header__inner {
  flex-direction: row;
  align-items: center;
  justify-content: space-between;
  gap: 24px;
  padding-top: 24px;
  padding-bottom: 24px;
}
/* El logo grande de la Home (pensado para el Hero) no entra en una
   sola fila junto al nav completo; en esta variante compacta baja
   de tamaño para que ambos convivan a la misma altura sin wrap. */
.header--light .logo img { height: clamp(80px, 11vw, 150px); }
.header--light .nav__list { gap: 18px; }
.header--light .nav__list a { font-size: clamp(14px, 1vw, 18px); }

.header__inner {
  /* Usa el ancho y el padding horizontal de .container: misma referencia
     izquierda que el resto del contenido (Hero, secciones, etc.). */
  display: flex; flex-direction: column; align-items: flex-start;
  gap: clamp(26px, 6vw, 125px);
  padding-top: clamp(30px, 5.3vw, 105px); padding-bottom: clamp(10px, 1.4vw, 22px);
}
.logo { display: block; }
.logo img { display: block; height: clamp(85px, 16.8vw, 320px); width: auto; object-fit: contain; }

.nav__list { display: flex; flex-wrap: wrap; gap: 28px; }
.nav__list li { position: relative; }
.nav__list a {
  font-family: var(--font-main); font-weight: 600; font-size: clamp(14px, 1.15vw, 22px);
  letter-spacing: 0.04em; text-transform: uppercase; color: var(--color-primary);
  transition: transform var(--transition);
}
.nav__list a:hover { transform: translateY(4px); }
.nav__list a.active { font-weight: 800; }

/* ============ DROPDOWN "SERVICIOS" (hover/focus, desktop) ============
   Reutiliza el mismo <nav>: en mobile el submenú se oculta (ver
   media queries) y "Servicios" queda como un link plano al hub. */
/* El intento anterior de arreglar esto (padding-bottom en el <li>)
   no funcionaba: top:100% se calcula sobre la caja del propio <li>,
   así que ese padding empujaba el desplegable la misma distancia que
   agrandaba el área de hover, y el hueco de 10px (el margin-top de
   acá abajo) terminaba reapareciendo más abajo igual. La solución real
   es no dejar ningún hueco real entre el link y el desplegable: el
   "aire" visual antes del primer ítem se logra con padding-top propio
   en vez de margin-top, así el mouse nunca sale del área con :hover
   al bajar del link al menú, sin importar la velocidad. */
.nav__dropdown {
  position: absolute; top: 100%; left: 50%;
  min-width: 320px; padding: 10px 0;
  background: var(--color-white); border-radius: 4px;
  box-shadow: 0 14px 32px rgba(0, 0, 0, 0.18);
  opacity: 0; visibility: hidden; pointer-events: none;
  transform: translateX(-50%);
  transition: opacity var(--transition), visibility var(--transition);
  z-index: 1001;
}
.nav__item--has-dropdown:hover .nav__dropdown,
.nav__item--has-dropdown:focus-within .nav__dropdown {
  opacity: 1; visibility: visible; pointer-events: auto;
}
.nav__dropdown a {
  display: block; padding: 11px 22px;
  font-family: var(--font-main); font-weight: 600; font-size: 0.82rem;
  letter-spacing: 0.03em; text-transform: none; text-align: left;
  color: var(--color-dark); white-space: normal; line-height: 1.3;
  transition: background var(--transition), color var(--transition);
}
.nav__dropdown a:hover, .nav__dropdown a:focus-visible {
  background: rgba(211, 18, 18, 0.07); color: var(--color-primary);
  transform: none;
}

/* ============ NAV STICKY (desktop) ============
   Al superar la altura del header (que sigue absolute y se va con
   el scroll) el mismo <nav> se independiza y pasa a ser una barra
   propia, fija arriba, con hide-on-scroll-down / show-on-scroll-up
   (clases agregadas por main.js). En mobile nunca se agregan estas
   clases: el nav sigue siendo el panel lateral de siempre. */
.nav.is-sticky {
  position: fixed; top: 0; left: 0; width: 100%;
  background: var(--color-white);
  box-shadow: 0 4px 18px rgba(0, 0, 0, 0.1);
  padding: 16px 0;
  transform: translateY(0);
  transition: transform var(--transition);
  z-index: 1000;
}
.nav.is-sticky .nav__list {
  max-width: 1240px; margin: 0 auto; padding: 0 24px;
  justify-content: center;
}
.nav.is-sticky .nav__list a { color: var(--color-dark); }
.nav.is-sticky .nav__list a:hover,
.nav.is-sticky .nav__list a.active { color: var(--color-primary); }
.nav.is-sticky.is-hidden { transform: translateY(-100%); }

/* Las 3 líneas se posicionan absolute, ancladas al centro vertical del
   propio botón (top:50% + translateY) en vez de depender del layout
   flex+gap del contenedor: así la "X" queda siempre perfectamente
   centrada sobre el botón sin importar su tamaño (30px por defecto,
   44px en la variante circular de mobile), reemplazando limpio a la
   hamburguesa en vez de quedar superpuesta/desalineada. */
.hamburger { display: none; position: relative; width: 30px; z-index: 1100; }
.hamburger span {
  position: absolute; top: 50%; left: 50%;
  display: block; height: 3px; width: 20px; margin-left: -10px;
  background: var(--color-white);
  transition: transform var(--transition), opacity var(--transition);
}
.hamburger span:nth-child(1) { transform: translateY(-9.5px); }
.hamburger span:nth-child(2) { transform: translateY(-1.5px); }
.hamburger span:nth-child(3) { transform: translateY(6.5px); }
.hamburger.is-active span:nth-child(1) { transform: translateY(-1.5px) rotate(45deg); }
.hamburger.is-active span:nth-child(2) { opacity: 0; }
.hamburger.is-active span:nth-child(3) { transform: translateY(-1.5px) rotate(-45deg); }

/* WhatsApp flotante */
.whatsapp-float {
  position: fixed; right: 30px; bottom: 28px; width: 58px; height: 58px;
  display: flex; align-items: center; justify-content: center; z-index: 999;
}
.whatsapp-float img { width: 58px; }

/* =========================================================
   FOOTER
   ========================================================= */
.footer { background: var(--color-light); }
.footer__top {
  display: grid; grid-template-columns: 1.5fr 1fr 1fr;
  gap: 56px; padding-top: 70px; padding-bottom: 60px;
}
.footer__brand a { display: inline-block; }
.footer__brand img { width: 350px; height: auto; margin-bottom: 20px; }
.footer__brand p { color: var(--color-gray); line-height: 1.5; }
.footer__links h4, .footer__contact h4 { margin-bottom: 16px; font-size: var(--type-subtitle-size); }
.footer__links li { margin-bottom: 16px; }
.footer__links a { color: var(--color-gray); }
.footer__links a:hover { color: var(--color-primary); }
.footer__contact p { margin-bottom: 18px; }
.footer__contact a {
  display: flex; align-items: center; gap: 14px; color: var(--color-gray);
  transition: color var(--transition);
}
.footer__contact a:hover, .footer__contact a:focus-visible { color: var(--color-primary); }
.footer__contact img { width: 20px; opacity: 0.7; }
.footer__contact svg { width: 20px; height: 20px; flex-shrink: 0; opacity: 0.85; }
.footer__bottom { padding: 13px 4%; background: var(--color-footer-dark); color: var(--color-white); text-align: center; font-family: var(--font-main); font-size: 0.62rem; letter-spacing: var(--type-tracking); }
.footer__bottom p { color: var(--color-white); font-size: 0.72rem; }

/* =========================================================
   RESPONSIVE GLOBAL — HEADER / FOOTER
   ========================================================= */
@media (max-width: 900px) {
  .final-cta__grid { grid-template-columns: 1fr; }

  .header__inner { padding-top: 16px; padding-bottom: 10px; }

  .topbar__inner { font-size: 0.72rem; }
  .topbar__contact a:nth-child(2) { position: static; transform: none;font-size: 0.8rem; }
  /* En este rango el teléfono vuelve al flujo (arriba) y, junto con el
     email, ocupa todo el ancho via space-between: reservamos lugar para
     los íconos sociales (absolutos, a la derecha) para que no se pisen. */
  .topbar__contact { padding-right: 130px; }

  .nav { position: static; width: auto; height: auto; background: transparent; box-shadow: none; padding: 14px 0 0; }
  .nav__list { position: static; flex-direction: row; gap: 10px 20px; }
  .nav__list a { font-size: clamp(0.62rem, 1.6vw, 0.8rem); color: var(--color-primary); }

  .footer__top { grid-template-columns: 1fr; gap: 32px; text-align: center; }
}

/* Header--light: el layout en una sola fila (logo + nav) tiene ancho
   limitado; a partir de aca se compactan un poco para seguir entrando
   sin romper linea. */
@media (max-width: 940px) {
  .header--light .header__inner { gap: 16px; }
  .header--light .logo img { height: clamp(62px, 9.5vw, 92px); }
  .header--light .nav__list { gap: 12px; }
  .header--light .nav__list a { font-size: clamp(11px, 1.3vw, 13px); }
  h1,h2 { font-size: clamp(1.6rem, 2.5vw, 1.5rem); }

}

/* Por debajo de este ancho los 6 links ya no entran en una fila junto
   al logo sin romper: adelantamos para esta variante compacta el mismo
   menu de acordeon lateral que el resto del sitio usa desde los 480px. */
@media (max-width: 700px) {
  /* El hamburguesa se independiza del header (que sigue absolute y se
     va con el scroll, como el resto del logo/topbar) y queda como un
     botón propio, fijo arriba a la derecha, accesible en todo momento
     — no todo el header, solo el botón. */
  .header--light .hamburger {
    display: flex; position: fixed; top: 48px; right: 20px;
    width: 44px; height: 44px;
    background: rgba(31, 31, 31, 0.55); border-radius: 50%;
  }
  .header--light .hamburger span { background: var(--color-white); }
  /* En mobile el logo de las páginas internas (Header--light) se ve
     chico al lado del botón hamburguesa: acá se agranda solo en este
     rango — la Home usa .logo (no .header--light) y no se toca. */
  .header--light .logo img { height: clamp(90px, 22vw, 130px); }
  .header--light .nav {
    position: fixed; top: 0; right: 0; width: 78%; max-width: 300px;
    height: 100vh; background: var(--color-white); box-shadow: -4px 0 20px rgba(0, 0, 0, 0.15);
    transform: translateX(100%); transition: transform var(--transition); padding: 100px 30px 30px; z-index: 1050;
  }
  .header--light .nav.is-open { transform: translateX(0); }
  .header--light .nav__list { flex-direction: column; gap: 22px; }
  .header--light .nav__list a { color: var(--color-dark); font-size: 15px; }
  .header--light .nav__list a:hover, .header--light .nav__list a.active { color: var(--color-primary); }
  .header--light .nav__dropdown { display: none; }
}

@media (max-width: 480px) {
  /* Topbar mobile: teléfono a la izquierda con el mismo icono lineal
     del footer; mail junto a Instagram/WhatsApp/LinkedIn a la derecha. */
  .topbar__inner { min-height: 52px; }
  .topbar__contact {
    padding-right: 0;
    justify-content: flex-start;
  }
  .topbar__contact a:first-child { display: none; }
  .topbar__contact a:nth-child(2) {
    position: static;
    transform: none;
    display: flex;
    gap: 7px;
    font-size: 0.8rem;
  }
  .topbar__phone-icon { width: 18px; height: 18px; }
  .topbar__social {
    right: 18px;
    gap: 14px;
    align-items: center;
  }
  .topbar__social-mail { display: flex !important; }
  .topbar__social-mail .topbar__mail-icon { width: 20px; height: 20px; }

  /* Debajo de este ancho el menú se compacta como acordeón lateral.
     El hamburguesa se independiza del header (que sigue absolute y se
     va con el scroll) y queda como un botón propio, fijo arriba a la
     derecha, accesible en todo momento — no todo el header, solo el
     botón. */
  .hamburger {
    display: flex; position: fixed; top: 48px; right: 20px;
    width: 44px; height: 44px;
    background: rgba(31, 31, 31, 0.55); border-radius: 50%;
  }
  .nav {
    position: fixed; top: 0; right: 0; width: 78%; max-width: 300px;
    height: 100vh; background: var(--color-white); box-shadow: -4px 0 20px rgba(0, 0, 0, 0.15);
    transform: translateX(100%); transition: transform var(--transition); padding: 100px 30px 30px; z-index: 1050;
  }
  .nav.is-open { transform: translateX(0); }
  .nav__list { flex-direction: column; gap: 22px; }
  .nav__list a { color: var(--color-dark); font-size: 15px; }
  .nav__list a:hover, .nav__list a.active { color: var(--color-primary); }
  .nav__dropdown { display: none; }

  .footer__top { gap: 32px; padding-top: 52px; padding-bottom: 40px; }
}

/* =========================================================
   REVEAL AL SCROLL — utilidad transversal (IntersectionObserver
   nativo en main.js). El estado oculto lo agrega el propio JS
   vía la clase .reveal-init sobre elementos [data-reveal]: si
   JS está deshabilitado, [data-reveal] no tiene ningún estilo
   propio y el contenido queda visible por defecto.
   ========================================================= */
[data-reveal].reveal-init {
  opacity: 0;
  transform: translateY(28px);
  transition: opacity 0.6s ease, transform 0.6s ease;
}
[data-reveal].reveal-init.is-visible {
  opacity: 1;
  transform: translateY(0);
}
@media (prefers-reduced-motion: reduce) {
  [data-reveal].reveal-init {
    opacity: 1;
    transform: none;
    transition: none;
  }
}

