/* =============================================================================
   MarcoPostal — Homepage
   Paleta extraída del logo (logomarcopostal2.png): verde #009C2A · navy #173070

   ARQUITECTURA DE ESTADOS
   <html> arranca con .mp-nomotion. Esa clase se retira SÓLO cuando el JS
   confirmó que GSAP, ScrollTrigger y la escena se construyeron sin excepción.
   Todo lo que este archivo declara por defecto es la versión legible y estática.
   Las escenas (sticky, línea, relevo de estados) viven bajo
   html:not(.mp-nomotion) y a partir de 1025px.
   Consecuencia: si el CDN cae, si el script explota a mitad, o si el usuario
   pidió menos movimiento, no queda nada oculto ni a medio animar.
   ========================================================================== */

/* ---------- reset mínimo del documento de prueba (borrar en WordPress) ------ */
*,*::before,*::after{box-sizing:border-box;}
html,body{margin:0;padding:0;}
html{-webkit-text-size-adjust:100%;}
body{background:#FFF;}
/* Lenis — estas tres reglas SÍ se conservan en WordPress */
html.lenis,html.lenis body{height:auto;}
.lenis.lenis-smooth{scroll-behavior:auto !important;}
.lenis.lenis-stopped{overflow:hidden;}

/* =============================================================================
   1. TOKENS
   ========================================================================== */
.mp-home{
  --mp-green:#009C2A;
  --mp-green-br:#22C24A;
  --mp-green-dk:#00701E;
  --mp-green-soft:#EAF6EC;
  --mp-navy:#173070;
  --mp-navy-dk:#0C1B44;

  --mp-black:#0D1012;
  --mp-dark:#12161A;
  --mp-dark-2:#191F24;
  --mp-white:#FFFFFF;
  --mp-off-white:#F5F6F4;
  --mp-gray-100:#EAEDEA;
  --mp-gray-300:#C6CCC8;
  --mp-gray-600:#5A6360;
  --mp-gray-700:#3E4643;

  /* verde de relleno para botones con texto encima — ver §botones */
  --mp-green-btn:#00871C;

  --mp-line-light:rgba(13,16,18,.12);
  --mp-line-dark:rgba(255,255,255,.16);

  --mp-maxw:1320px;
  --mp-gutter:64px;
  --mp-gap:24px;

  /* escala tipográfica
     Segunda bajada. La anterior (46/44/28) seguía leyéndose grande en pantallas
     de ~1850px: el H1 ocupaba dos líneas de 46px y competía con la fotografía en
     vez de apoyarse en ella. Se baja ~22% el display y ~6% el cuerpo.
     El cuerpo base NO baja de 15px: por debajo de eso la lectura sostenida en
     párrafos de 52ch se degrada, y el problema que se reporta es de titulares. */
  --mp-h1-size:clamp(28px,2.00vw,35px);
  --mp-h1-line:1.10;
  --mp-h1-spacing:-.8px;

  --mp-h2-size:clamp(26px,1.95vw,34px);
  --mp-h2-line:1.10;
  --mp-h2-spacing:-.7px;

  --mp-h3-size:clamp(19px,1.42vw,23px);
  --mp-h3-line:1.20;

  --mp-body-lg:15.5px;
  --mp-body-lg-line:1.62;

  --mp-body:15px;
  --mp-body-line:1.65;

  --mp-r-img:24px;
  --mp-r-panel:18px;
  --mp-r-field:10px;
  --mp-r-pill:999px;

  --mp-e:cubic-bezier(.16,1,.3,1);

  /* Altura ÚNICA del header. Antes había tres fuentes de verdad (aquí, en
     .is-compact y en el JS); ahora es constante y las escenas sticky la
     descuentan con calc(100svh - var(--mp-header-h)). */
  --mp-header-h:64px;

  font-family:"Manrope Variable","Manrope","Inter",Arial,sans-serif;
  font-weight:400;color:var(--mp-black);background:var(--mp-white);
  -webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;
  overflow-x:clip;position:relative;
}

/* =============================================================================
   2. PRIMITIVAS
   ========================================================================== */
/* :where() y no .mp-home a secas. Motivo concreto, no estilístico: `.mp-home p`
   pesa (0,1,1) y le gana a cualquier regla de una sola clase — `.mp-hero__lead`,
   `.mp-hero__facts`, `.mp-btn--ghost-dark`, `.mp-service-scene__route`. Ese
   choque ya provocó cuatro defectos distintos (botones sin color, ruta visible
   en mobile, facts pegados a los botones, lead pegado al H1) y cada vez se
   parcheó prefijando la regla perdedora, lo cual arregla el síntoma y deja la
   trampa armada para la próxima. Dentro de :where() la especificidad es cero,
   así que el reset pesa (0,0,1) y cualquier clase le gana sin prefijo. */
:where(.mp-home) :is(img,svg,video){display:block;max-width:100%;}
:where(.mp-home) a{color:inherit;text-decoration:none;}
:where(.mp-home) button{font:inherit;color:inherit;background:none;border:0;padding:0;cursor:pointer;}
:where(.mp-home) :is(ul,ol,dl){list-style:none;margin:0;padding:0;}
:where(.mp-home) :is(p,h1,h2,h3,figure,dd,dt,blockquote){margin:0;}

.mp-home :focus-visible{outline:3px solid var(--mp-green);outline-offset:3px;border-radius:4px;}
.mp-onlight :focus-visible{outline-color:var(--mp-green-dk);}

.mp-skip{
  position:absolute;left:16px;top:-64px;z-index:400;
  background:var(--mp-black);color:#fff;padding:12px 18px;border-radius:var(--mp-r-field);
  font-size:14px;font-weight:600;transition:top .2s var(--mp-e);
}
.mp-skip:focus{top:16px;}

/* Sólo para lectores de pantalla y rastreadores: el encabezado existe en el
   documento pero el diseño lo resuelve con otro recurso visual. clip-path en
   lugar de display:none, que lo sacaría del árbol de accesibilidad. */
.mp-sr{
  position:absolute;width:1px;height:1px;padding:0;margin:-1px;
  overflow:hidden;clip-path:inset(50%);white-space:nowrap;border:0;
}

.mp-wrap{width:min(100% - var(--mp-gutter), var(--mp-maxw));margin-inline:auto;}
.mp-grid{display:grid;grid-template-columns:repeat(12,minmax(0,1fr));gap:var(--mp-gap);}
.mp-anchor{display:block;width:0;height:0;overflow:hidden;}

/* =============================================================================
   3. TIPOGRAFÍA
   -----------------------------------------------------------------------------
   Escala Fase 5A: H1 42-58, H2 32-44, H3 23-28, lead 16,5 y cuerpo 15.
   Con topes de ancho en px (660 / 570 / 540) para que el H1 no barra el viewport.
   ========================================================================== */
.mp-eyebrow{
  display:inline-flex;align-items:center;gap:10px;
  font-size:11px;line-height:15px;font-weight:600;letter-spacing:2.2px;text-transform:uppercase;
}
.mp-eyebrow::before{content:"";width:22px;height:2px;border-radius:2px;background:currentColor;opacity:.9;flex:0 0 auto;}
.mp-eyebrow--green{color:var(--mp-green-dk);}
.mp-eyebrow--ondark{color:var(--mp-green-br);}

/* Topes en px: el problema no era sólo la familia, era que el H1 no tenía
   límite de ancho y a 1900px barría casi todo el viewport. */
.mp-h1{font-size:var(--mp-h1-size);line-height:var(--mp-h1-line);font-weight:500;
  letter-spacing:var(--mp-h1-spacing);max-width:560px;}
.mp-h2{font-size:var(--mp-h2-size);line-height:var(--mp-h2-line);font-weight:500;
  letter-spacing:var(--mp-h2-spacing);max-width:570px;}
.mp-h3{font-size:var(--mp-h3-size);line-height:var(--mp-h3-line);font-weight:500;letter-spacing:-.4px;}
.mp-text{font-size:var(--mp-body);line-height:var(--mp-body-line);font-weight:400;max-width:540px;}
.mp-text--lead{font-size:var(--mp-body-lg);line-height:var(--mp-body-lg-line);max-width:540px;}
.mp-num{font-variant-numeric:tabular-nums;}

.mp-onlight .mp-text{color:var(--mp-gray-700);}
.mp-ondark  .mp-text{color:rgba(255,255,255,.74);}

.mp-lines{display:block;}
/* El overflow:hidden es lo que enmascara el revelado, pero recorta a la altura
   de línea y se come los descendentes (la g de "logística"). Medido: glifo 56px
   contra caja de 53,5px. El padding agranda la zona de recorte y el margen
   negativo devuelve el espacio, así el ritmo vertical no cambia. */
.mp-lines .mp-line{display:block;overflow:hidden;padding-bottom:.18em;margin-bottom:-.18em;}
.mp-lines .mp-line > i{display:block;font-style:inherit;}
.mp-lines em{font-style:normal;color:var(--mp-green-dk);}
.mp-ondark .mp-lines em{color:var(--mp-green-br);}

/* =============================================================================
   4. BOTONES
   ========================================================================== */
.mp-btn{
  display:inline-flex;align-items:center;justify-content:center;gap:9px;
  min-height:44px;height:54px;padding-inline:28px;border-radius:var(--mp-r-pill);
  font-size:15px;font-weight:600;border:1px solid transparent;
  transition:transform .3s var(--mp-e),background .3s var(--mp-e),
             color .3s var(--mp-e),border-color .3s var(--mp-e),box-shadow .3s var(--mp-e);
}
.mp-btn--sm{height:42px;padding-inline:18px;font-size:13px;}
.mp-btn__ar{transition:transform .3s var(--mp-e);}
.mp-btn:hover .mp-btn__ar{transform:translateX(4px);}

/* -----------------------------------------------------------------------------
   CAUSA RAÍZ CORREGIDA
   `.mp-home a{color:inherit}` tiene especificidad (0,1,1) — una clase más un
   tipo — y ganaba contra `.mp-btn--primary{color:#fff}`, que es (0,1,0). El
   color heredado era --mp-black, así que TODOS los botones-enlace salían con
   texto negro: sobre verde se leía mal y sobre la foto del hero desaparecía.
   Medido: 0 píxeles con luminancia > 150 en 14.700 del botón fantasma.
   Al prefijar con .mp-home los modificadores pasan a (0,2,0) y ganan.
   Regla permanente: ningún texto de botón puede depender de `color:inherit`.
   -------------------------------------------------------------------------- */
/* --------------------------------------------------------------------------
   El relleno del botón principal NO es --mp-green (#009C2A). Medición: texto
   blanco de 15px con peso 600 sobre #009C2A da 3,63:1, y el mínimo de la WCAG
   para texto de ese tamaño es 4,5:1 —el umbral de 3:1 aplica sólo a partir de
   18,66px en negrita—. O sea que el botón más importante de la página era el
   elemento menos legible.
   #00871C es el mismo tono, apenas más oscuro, y da 4,69:1. La diferencia a
   simple vista es mínima; la del contraste no.
   --mp-green sigue siendo #009C2A y se usa en todo lo decorativo —viñetas,
   acentos, la línea de la cinta—, donde no hay texto encima y la regla no
   aplica. El verde del logotipo no se toca.
   -------------------------------------------------------------------------- */
.mp-home .mp-btn--primary{background:var(--mp-green-btn,#00871C);color:#fff;}
.mp-home .mp-btn--primary:hover{background:var(--mp-green-dk);transform:translateY(-2px);box-shadow:0 14px 32px rgba(0,112,30,.30);}
.mp-home .mp-btn--dark{background:var(--mp-black);color:#fff;}
.mp-home .mp-btn--dark:hover{background:#000;transform:translateY(-2px);box-shadow:0 14px 32px rgba(13,16,18,.24);}
.mp-home .mp-btn--ghost-dark{background:transparent;color:#fff;border-color:rgba(255,255,255,.36);}
.mp-home .mp-btn--ghost-dark:hover{background:rgba(255,255,255,.10);border-color:rgba(255,255,255,.66);transform:translateY(-2px);}
.mp-home .mp-btn--ghost-light{background:transparent;color:var(--mp-black);border-color:var(--mp-line-light);}
.mp-home .mp-btn--ghost-light:hover{background:var(--mp-black);color:#fff;transform:translateY(-2px);}

/* --- botones del hero -------------------------------------------------------- */
.mp-home .mp-hero .mp-btn--primary{
  min-height:46px;height:46px;padding-inline:20px;border-radius:var(--mp-r-pill);
  background:#FFFFFF;color:#111417;border:1px solid #FFFFFF;
  font-size:13.5px;font-weight:600;box-shadow:none;
}
.mp-home .mp-hero .mp-btn--primary .mp-btn__ar{color:var(--mp-green);}
.mp-home .mp-hero .mp-btn--primary:hover{
  background:#FFFFFF;transform:translateY(-2px);box-shadow:0 12px 28px rgba(8,12,18,.28);
}
.mp-home .mp-hero .mp-btn--ghost-dark{
  min-height:46px;height:46px;padding-inline:20px;
  color:#FFFFFF;border:1px solid rgba(255,255,255,.52);
  background:rgba(8,12,18,.12);-webkit-backdrop-filter:blur(8px);backdrop-filter:blur(8px);
  font-size:13.5px;font-weight:600;
}
.mp-home .mp-hero .mp-btn--ghost-dark:hover{
  background:rgba(8,12,18,.28);border-color:rgba(255,255,255,.78);transform:translateY(-2px);
}
.mp-home .mp-hero .mp-btn{
  transition:transform 260ms cubic-bezier(.16,1,.3,1),
             background-color 260ms ease, border-color 260ms ease, box-shadow 260ms ease;
}

.mp-link{display:inline-flex;align-items:center;gap:8px;font-size:15px;font-weight:600;padding:10px 0;min-height:44px;color:var(--mp-green-dk);}
.mp-link span{position:relative;}
.mp-link span::after{content:"";position:absolute;left:0;right:0;bottom:-3px;height:1px;background:currentColor;transform:scaleX(0);transform-origin:left;transition:transform .4s var(--mp-e);}
.mp-link:hover span::after{transform:scaleX(1);}
.mp-ondark .mp-link{color:var(--mp-green-br);}

/* =============================================================================
   5. HEADER
   Se comprime al salir del hero y se retrae al bajar / reaparece al subir.
   ========================================================================== */
/* Grid de tres columnas con canal central elástico. El flex anterior no
   reservaba espacio y a 1025-1100px los tres grupos se pisaban. */
.mp-header{
  position:fixed;top:0;left:0;right:0;z-index:120;height:var(--mp-header-h);
  color:#fff;background:transparent;border-bottom:1px solid transparent;
  transition:background .34s var(--mp-e),color .34s var(--mp-e),
             border-color .34s var(--mp-e),transform .34s var(--mp-e);
}
.mp-header.is-compact{
  background:rgba(255,255,255,.94);
  -webkit-backdrop-filter:blur(12px);backdrop-filter:blur(12px);
  color:var(--mp-black);border-bottom-color:rgba(13,16,18,.08);
}
.mp-header.is-hidden{transform:translateY(-100%);}

.mp-header__in{
  display:grid;grid-template-columns:auto minmax(0,1fr) auto;
  align-items:center;height:64px;gap:24px;
}
.mp-header__logo{display:flex;align-items:center;width:126px;height:40px;flex:0 0 auto;position:relative;}
/* ⚠️ Los dos archivos tienen proporciones distintas: el blanco es el lockup
   vertical (1400×650) y el color el horizontal (1400×289). Al conmutar por
   ancho fijo el logo daría un salto de 58px a 26px de alto. Se los encierra en
   una caja de 126×40 con object-fit:contain para que ninguno se deforme.
   Pendiente de asset: versión blanca del lockup HORIZONTAL. */
.mp-header__logo img{
  max-width:126px;max-height:40px;width:auto;height:auto;object-fit:contain;
  transition:opacity .28s var(--mp-e);
}
.mp-header__logo .mp-logo--color{opacity:0;position:absolute;left:0;top:50%;transform:translateY(-50%);pointer-events:none;}
.mp-header.is-compact .mp-logo--color{opacity:1;}
.mp-header.is-compact .mp-logo--white{opacity:0;}

.mp-nav{display:flex;justify-content:center;align-items:center;gap:26px;min-width:0;white-space:nowrap;}
.mp-nav a{
  display:inline-flex;align-items:center;height:40px;
  font-size:13px;line-height:18px;font-weight:500;
  opacity:.88;transition:opacity .25s var(--mp-e),color .25s var(--mp-e);
}
.mp-nav a:hover{opacity:1;color:var(--mp-green-br);}
.mp-header.is-compact .mp-nav a:hover{color:var(--mp-green-dk);}

/* -----------------------------------------------------------------------------
   DESPLEGABLE DE SERVICIOS
   Vive acá y no en la hoja de las subpáginas porque lo usan las dos: la portada
   y las ocho de servicio. Estaba duplicado y eso garantiza que tarde o temprano
   una de las dos copias quede vieja.

   El color va por `inherit`, a propósito. `.mp-header` es blanco cuando está
   desplegado sobre el hero oscuro y `var(--mp-black)` cuando se comprime sobre
   fondo claro; heredando, el botón sigue al header sin ninguna regla extra.
   El único caso que necesita override es el hero claro y las subpáginas, y ese
   ya está resuelto más abajo junto con los enlaces de la nav.
   -------------------------------------------------------------------------- */
.mp-navdrop{position:relative;}
.mp-navdrop__bt{
  display:inline-flex;align-items:center;gap:6px;height:40px;
  font-family:inherit;font-size:13px;line-height:18px;font-weight:500;
  color:inherit;background:none;border:0;cursor:pointer;padding:0;
  opacity:.88;transition:opacity .25s var(--mp-e),color .25s var(--mp-e);
}
.mp-navdrop__bt:hover{opacity:1;color:var(--mp-green-br);}
.mp-header.is-compact .mp-navdrop__bt:hover{color:var(--mp-green-dk);}
.mp-navdrop__bt svg{transition:transform .26s var(--mp-e);}
.mp-navdrop__bt[aria-expanded="true"] svg{transform:rotate(180deg);}
.mp-navdrop__pn{
  position:absolute;left:-18px;top:calc(100% + 14px);z-index:60;
  display:grid;gap:1px;min-width:262px;padding:8px;border-radius:16px;
  background:#fff;border:1px solid var(--mp-line-light);
  box-shadow:0 26px 58px -22px rgba(13,16,18,.34);
}
.mp-navdrop__pn[hidden]{display:none;}
/* El panel es blanco en los dos contextos, así que su contenido va oscuro
   siempre: no hereda del header. */
.mp-home .mp-navdrop__it{
  display:block;padding:10px 14px;border-radius:10px;
  font-size:14px;line-height:1.35;font-weight:500;color:var(--mp-gray-700);
  opacity:1;height:auto;
  transition:background .18s var(--mp-e),color .18s var(--mp-e);
}
.mp-home .mp-navdrop__it:hover{background:var(--mp-off-white);color:var(--mp-black,#111417);}
.mp-navdrop__it.is-actual{color:var(--mp-green-dk,#00701E);font-weight:600;
  background:rgba(0,156,42,.08);}

.mp-header__cta{display:flex;align-items:center;gap:10px;white-space:nowrap;}
.mp-header__track,
.mp-header .mp-btn{min-height:40px;height:40px;padding-inline:15px;font-size:12.5px;}
.mp-header__track{
  display:inline-flex;align-items:center;gap:8px;border-radius:var(--mp-r-pill);
  border:1px solid rgba(255,255,255,.52);font-weight:600;
  transition:background .25s var(--mp-e),border-color .25s var(--mp-e);
}
.mp-header__track:hover{background:rgba(255,255,255,.12);}
.mp-header.is-compact .mp-header__track{border-color:rgba(13,16,18,.20);}
.mp-header.is-compact .mp-header__track:hover{background:var(--mp-gray-100);}

/* Estado sobre el hero: CTA blanco con texto oscuro.
   Estado sobre fondo claro: CTA navy con texto blanco. */
.mp-home .mp-header .mp-btn--primary{background:#FFFFFF;color:#111417;border-color:#FFFFFF;box-shadow:none;}
.mp-home .mp-header .mp-btn--primary:hover{background:#FFFFFF;transform:translateY(-2px);box-shadow:0 10px 24px rgba(8,12,18,.26);}
.mp-home .mp-header.is-compact .mp-btn--primary{background:var(--mp-navy);color:#FFFFFF;border-color:var(--mp-navy);}
.mp-home .mp-header.is-compact .mp-btn--primary:hover{background:var(--mp-navy-dk);border-color:var(--mp-navy-dk);box-shadow:0 10px 24px rgba(23,48,112,.30);}

.mp-burger{display:none;width:44px;height:44px;border-radius:12px;align-items:center;justify-content:center;flex-direction:column;gap:5px;}
.mp-burger span{display:block;width:20px;height:2px;background:currentColor;border-radius:2px;transition:transform .3s var(--mp-e),opacity .2s;}
.mp-burger[aria-expanded="true"] span:nth-child(1){transform:translateY(7px) rotate(45deg);}
.mp-burger[aria-expanded="true"] span:nth-child(2){opacity:0;}
.mp-burger[aria-expanded="true"] span:nth-child(3){transform:translateY(-7px) rotate(-45deg);}

.mp-menu{position:fixed;inset:0;z-index:130;background:var(--mp-black);color:#fff;display:flex;flex-direction:column;padding:104px 20px 32px;opacity:0;visibility:hidden;transform:translateY(-12px);transition:opacity .32s var(--mp-e),transform .32s var(--mp-e),visibility .32s;}
.mp-menu.is-open{opacity:1;visibility:visible;transform:none;}
.mp-menu a{display:flex;align-items:center;min-height:56px;font-size:21px;line-height:27px;font-weight:500;letter-spacing:-.5px;border-bottom:1px solid var(--mp-line-dark);}
.mp-menu__cta{margin-top:auto;display:grid;gap:12px;padding-top:28px;}
.mp-menu__cta .mp-btn{width:100%;}

/* =============================================================================
   6. CONTENEDOR DEL ACTO
   -----------------------------------------------------------------------------
   Se eliminaron las cuñas diagonales que separaban hero→plataformas y
   servicios→proceso: sin la ruta que las justificaba quedaban como formas
   amorfas subiendo sobre el contenido. Los cortes entre secciones son rectos.
   ========================================================================== */
.mp-act{position:relative;}

/* =============================================================================
   7. HERO
   ========================================================================== */
/* `align-items:flex-end` empujaba todo contra el borde inferior y, sin
   padding-top, el eyebrow quedaba debajo del header fijo. Ahora el bloque se
   centra y reserva 104px arriba. */
.mp-hero{
  position:relative;min-height:clamp(680px,92svh,860px);overflow:hidden;background:var(--mp-black);
  display:flex;align-items:center;
}
.mp-hero__media{position:absolute;inset:0;z-index:0;transform:scale(1.09);transform-origin:64% 42%;}
.mp-hero__media img{width:100%;height:100%;object-fit:cover;object-position:60% 50%;}
.mp-hero__media::before{
  content:"";position:absolute;inset:0;z-index:-1;
  background:radial-gradient(70% 90% at 76% 18%,rgba(23,48,112,.5),transparent 70%),
             radial-gradient(50% 70% at 12% 92%,rgba(0,156,42,.20),transparent 70%),var(--mp-black);
}
/* degradado direccional: se oscurece el lado del texto, no la imagen entera */
.mp-hero__overlay{
  position:absolute;inset:0;z-index:1;pointer-events:none;
  background:linear-gradient(96deg,rgba(6,8,9,.92) 0%,rgba(6,8,9,.78) 30%,rgba(6,8,9,.34) 62%,rgba(6,8,9,.06) 100%);
}
.mp-hero__vignette{
  position:absolute;inset:0;z-index:1;pointer-events:none;
  background:linear-gradient(180deg,rgba(6,8,9,.55) 0%,transparent 26%,transparent 58%,rgba(6,8,9,.72) 100%);
}
/* Sin `width:100%`: este elemento también lleva .mp-wrap y, al pasar el gutter
   de padding-inline a width, un width:100% de igual especificidad y posterior
   anulaba el centrado. Medido: el hero salía a 1521px pegado al borde. */
.mp-hero__grid{position:relative;z-index:4;}
/* Todos los bloques arrancan sobre la misma línea izquierda: son hijos
   directos, sin offsets individuales. */
.mp-hero__content{
  grid-column:1 / 7;align-self:center;max-width:700px;
  padding-top:104px;padding-bottom:118px;
}
.mp-hero__content .mp-eyebrow{color:var(--mp-green-br);margin-bottom:20px;}
.mp-hero__content .mp-h1{color:#fff;margin-top:0;}
.mp-hero__lead{color:rgba(255,255,255,.80);margin-top:20px;max-width:480px;
  font-size:var(--mp-body-lg);line-height:var(--mp-body-lg-line);}
.mp-hero__cta{display:flex;flex-wrap:wrap;gap:12px;margin-top:30px;}

/* .mp-home dl{margin:0;padding:0} es (0,1,1) y le ganaba a esta regla, que era
   (0,1,0): los facts perdían sus 42px de aire y quedaban pegados a los botones.
   Tercera vez que aparece este patrón — por eso va prefijado. */
.mp-home .mp-hero__facts{
  display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:24px;
  margin-top:44px;padding-top:20px;border-top:1px solid rgba(255,255,255,.24);
}
.mp-hero__fact dt{font-size:15px;line-height:22px;font-weight:600;color:#fff;letter-spacing:-.01em;}
.mp-hero__fact dd{margin:3px 0 0;font-size:13px;line-height:20px;color:rgba(255,255,255,.62);}

.mp-hero__cue{
  position:absolute;left:50%;transform:translateX(-50%);bottom:20px;z-index:5;
  display:flex;align-items:center;gap:12px;
  font-size:11px;font-weight:600;letter-spacing:2.2px;text-transform:uppercase;color:rgba(255,255,255,.60);
}
.mp-hero__cue i{display:block;width:44px;height:1px;background:rgba(255,255,255,.35);position:relative;overflow:hidden;}
.mp-hero__cue i::after{content:"";position:absolute;inset:0;background:var(--mp-green-br);transform:translateX(-100%);animation:mp-cue 2.4s var(--mp-e) infinite;}
@keyframes mp-cue{0%{transform:translateX(-100%);}55%{transform:translateX(0);}100%{transform:translateX(100%);}}

/* ---------- hero sobre fotografía clara ----------
   MEDICIÓN, no criterio estético. Sobre la foto, en la franja donde cae el
   texto (x 14–41%, y 18–86%):

       eyebrow   media 222   1er percentil 215   0,0% de píxeles por debajo del umbral
       botones   media 209   1er percentil 205   0,0%
       H1        media 194   1er percentil  57  11,5%
       lead      media 198   1er percentil  51   8,2%
       cifras    media 195   1er percentil  76   6,5%

   El umbral es 124: con texto #111417 (luminancia relativa 0,0065) hace falta
   fondo ≥0,204 para llegar a 4,5:1, que en 8 bits es 124. O sea que la foto YA
   alcanza en el 90% de la franja, y en el eyebrow y los botones alcanza en el
   100%. El velo de ancho completo que había —.94 a la izquierda hasta .06 a la
   derecha— estaba lavando toda la imagen para resolver un 10% de píxeles.

   Se elimina el velo global y queda una mancha suave, sólo detrás del bloque de
   texto, con pico .58. Sobre el peor píxel medido (51) da 51·0,42+255·0,58 = 169,
   que contra #111417 son 8,0:1. Sobre la media (195) da 230. El resto de la
   fotografía queda sin tocar. */
.mp-hero--claro .mp-hero__overlay{background:none;}
/* Arriba: sólo lo justo para que la nav oscura despegue del borde de la foto.
   Abajo: sólo la costura con la sección blanca que sigue. Nada en el medio. */
.mp-hero--claro .mp-hero__vignette{
  background:linear-gradient(180deg,rgba(255,255,255,.40) 0%,transparent 13%,
    transparent 88%,rgba(247,248,245,.55) 100%);
}
/* La mancha va detrás del bloque de texto, no del hero. z-index:-1 la manda
   detrás del contenido pero dentro del contexto de apilamiento de .mp-hero__grid
   (z-index:4), así que sigue por encima de la fotografía. */
.mp-hero--claro .mp-hero__content{position:relative;}
.mp-hero--claro .mp-hero__content::before{
  content:"";position:absolute;z-index:-1;
  inset:2% -18% 4% -14%;
  background:radial-gradient(62% 54% at 40% 50%,
    rgba(255,255,255,.58) 0%, rgba(255,255,255,.50) 40%,
    rgba(255,255,255,.24) 66%, rgba(255,255,255,0) 86%);
}
.mp-hero--claro .mp-h1{color:var(--mp-black,#111417);}
.mp-hero--claro .mp-hero__lead{color:var(--mp-gray-700);}
.mp-hero--claro .mp-eyebrow{color:var(--mp-green-dk,#00701E);}
.mp-hero--claro .mp-hero__facts{border-top-color:rgba(13,16,18,.16);}
.mp-hero--claro .mp-hero__fact dt{color:var(--mp-black,#111417);}
.mp-hero--claro .mp-hero__fact dd{color:var(--mp-gray-600);}
.mp-hero--claro .mp-hero__cue{color:var(--mp-gray-600);}
.mp-hero--claro .mp-hero__cue i{background:var(--mp-green);}
/* el botón fantasma pasa a borde oscuro: sobre claro, el blanco desaparece */
.mp-home .mp-hero--claro .mp-btn--ghost-dark{
  color:var(--mp-black,#111417);border-color:rgba(13,16,18,.28);
}
.mp-home .mp-hero--claro .mp-btn--ghost-dark:hover{
  background:rgba(13,16,18,.06);border-color:rgba(13,16,18,.5);
}
.mp-home .mp-hero--claro .mp-btn--primary{
  background:var(--mp-green-btn,#00871C);color:#fff;border-color:var(--mp-green-btn,#00871C);
}
.mp-home .mp-hero--claro .mp-btn--primary .mp-btn__ar{color:#fff;}
.mp-home .mp-hero--claro .mp-btn--primary:hover{background:var(--mp-green-dk);border-color:var(--mp-green-dk);}
/* -----------------------------------------------------------------------------
   HEADER SOBRE HERO CLARO
   Estas reglas estaban SIN condicionar al hero claro: apuntaban a
   `.mp-header:not(.is-compact)` a secas, o sea a cualquier header desplegado.
   Mientras el hero fue claro no se notó, pero al volver el hero a foto oscura
   el header aparecía con logo a color y nav negra sobre una foto oscura —
   ilegible—. Es el mismo tipo de error que las cinco veces anteriores: una
   regla escrita para un caso y aplicada a todos.
   Ahora se condicionan con :has(). El header está ANTES que el hero en el DOM,
   así que ningún selector de hermanos alcanza; :has() sobre el contenedor sí.
   Soporte: Chrome 105+, Safari 15.4+, Firefox 121+. Donde no exista, el bloque
   entero se ignora y el header queda en su versión clara sobre foto oscura,
   que es la combinación legible — el fallo es hacia el lado seguro.
   -------------------------------------------------------------------------- */
.mp-home:has(.mp-hero--claro) .mp-header:not(.is-compact) .mp-logo--white,
.mp-serv .mp-header:not(.is-compact) .mp-logo--white{opacity:0;}
.mp-home:has(.mp-hero--claro) .mp-header:not(.is-compact) .mp-logo--color,
.mp-serv .mp-header:not(.is-compact) .mp-logo--color{opacity:1;}
/* El <button> del desplegable entra en la misma lista que los <a>. La primera
   vez que escribí esta regla apunté sólo a `a` y el botón quedó blanco sobre
   blanco en las ocho páginas de servicio: invisible. */
.mp-home:has(.mp-hero--claro) .mp-header:not(.is-compact) :is(.mp-nav a,.mp-navdrop__bt),
.mp-serv .mp-header:not(.is-compact) :is(.mp-nav a,.mp-navdrop__bt){color:var(--mp-black,#111417);}
/* Este control quedaba con texto oscuro sobre la parte más oscura de la foto,
   y el punto exacto se corre según el ancho del viewport. En vez de devolver
   un velo a toda la imagen, el fondo se lo lleva el propio control, igual que
   ya lo tenía el botón de al lado. */
.mp-home:has(.mp-hero--claro) .mp-header:not(.is-compact) .mp-header__track,
.mp-serv .mp-header:not(.is-compact) .mp-header__track{
  color:var(--mp-black,#111417);
  background:rgba(255,255,255,.82);
  border-color:rgba(13,16,18,.14);
  backdrop-filter:blur(6px);
}
.mp-home:has(.mp-hero--claro) .mp-header:not(.is-compact) .mp-header__track:hover,
.mp-serv .mp-header:not(.is-compact) .mp-header__track:hover{background:#fff;border-color:rgba(13,16,18,.3);}
.mp-home:has(.mp-hero--claro) .mp-header:not(.is-compact) .mp-burger span,
.mp-serv .mp-header:not(.is-compact) .mp-burger span{background:var(--mp-black,#111417);}

/* -----------------------------------------------------------------------------
   HERO SOBRE FOTOGRAFÍA OCUPADA — variante actual
   Medición de la foto nueva, mapa de 10×10 sobre la imagen entera: la franja
   donde cae el texto va de 73 a 224 de luminancia. Para texto blanco el fondo
   tiene que quedar por DEBAJO de 118 para llegar a 4,5:1, así que el 224 hay
   que bajarlo. Con velo de .82 queda en 45 (12,9:1) y con .55 en 104 (5,5:1).
   El velo no cruza toda la imagen: se apaga en el 82% del ancho, que es donde
   empieza el operario con la tablet. Oscurecerle la cara no aportaba nada.
   -------------------------------------------------------------------------- */
   Los valores no son los primeros que probé. Con el velo terminando en 82% y
   parada de .55 en el 46%, «cadena de frío» —la tercera cifra, la más a la
   derecha— daba 3,72:1 contra los 4,5:1 que exige su tamaño. Se podía subir la
   opacidad del texto de .62 a .72, pero eso aplana la jerarquía entre el dato
   y su rótulo en las tres columnas para arreglar una. Corriendo el velo a
   .66/.28 y su final a 86% queda en 4,68:1 sin tocar el texto. */
.mp-hero--equipo .mp-hero__overlay{
  background:linear-gradient(96deg,
    rgba(6,8,9,.90) 0%, rgba(6,8,9,.84) 26%, rgba(6,8,9,.66) 46%,
    rgba(6,8,9,.28) 66%, rgba(6,8,9,0) 86%);
}
/* El encuadre por defecto (60% 50%) cortaba la gorra del operario: la foto es
   1672×941 —relación 1,78— dentro de un hero de 2,24, así que `cover` ya
   recorta bastante arriba y abajo, y encima está el scale(1.09). Bajando el
   punto de anclaje al 32% entra la cabeza completa sin perder la tablet. */
.mp-hero--equipo .mp-hero__media img{object-position:56% 32%;}
.mp-hero--equipo .mp-hero__vignette{
  background:linear-gradient(180deg,rgba(6,8,9,.42) 0%,transparent 16%,
    transparent 74%,rgba(6,8,9,.60) 100%);
}

/* =============================================================================
   8. CONFIANZA
   ========================================================================== */
/* Fuera del hero: flujo normal, sin sombra, sin radio, sin superposición.
   Deja de ser protagonista y pasa a ser una franja de contexto. */
.mp-trust{position:relative;z-index:2;margin-top:0;background:var(--mp-white);
  border-bottom:1px solid rgba(17,20,23,.08);padding:22px 0;}
.mp-trust__panel{
  display:grid;grid-template-columns:180px 1fr;align-items:center;gap:38px;
  background:transparent;border:0;box-shadow:none;border-radius:0;min-height:0;padding:0;
}
.mp-trust__label{font-size:10px;line-height:15px;font-weight:600;letter-spacing:1.8px;
  text-transform:uppercase;color:var(--mp-gray-600);max-width:none;}
.mp-trust__list{display:flex;justify-content:flex-start;align-items:center;
  gap:clamp(28px,4vw,58px);flex-wrap:wrap;margin-inline-start:0;}
/* la atenuación va al logo, no al rótulo: a .55 el texto caía a 2,3:1 */
/* La atenuación va al logo, no al rótulo: el .58 pedido aplicado al texto
   daría ≈2,6:1 y no cumple AA. El texto queda en --mp-gray-600 (6,2:1). */
/* ---------- cinta de plataformas ----------
   Marquesina en CSS puro: no necesita JS y no se rompe si GSAP no carga.
   Se detiene al pasar el mouse —si algo se mueve sin parar, no se puede leer—
   y se congela entera con prefers-reduced-motion. */
.mp-cinta{margin-top:22px;overflow:hidden;
  -webkit-mask-image:linear-gradient(90deg,transparent,#000 8%,#000 92%,transparent);
          mask-image:linear-gradient(90deg,transparent,#000 8%,#000 92%,transparent);}
.mp-cinta__pista{display:flex;width:max-content;gap:clamp(34px,5vw,64px);
  padding-right:clamp(34px,5vw,64px);animation:mp-cinta 26s linear infinite;}
.mp-cinta:hover .mp-cinta__pista{animation-play-state:paused;}
@keyframes mp-cinta{to{transform:translateX(-50%)}}
@media(prefers-reduced-motion:reduce){
  .mp-cinta__pista{animation:none;}
  .mp-cinta{-webkit-mask-image:none;mask-image:none;overflow-x:auto;}
}
.mp-cinta__pista .mp-trust__item{flex:0 0 auto;white-space:nowrap;}
.mp-trust__item{display:flex;align-items:center;gap:10px;font-size:13px;font-weight:600;
  color:var(--mp-gray-600);transition:color .3s var(--mp-e);}
.mp-trust__item:hover{color:var(--mp-black);}
.mp-trust__item img{width:20px;height:20px;object-fit:contain;filter:grayscale(1);opacity:.58;
  transition:opacity .3s var(--mp-e),filter .3s var(--mp-e);}
.mp-trust__item:hover img{opacity:1;filter:grayscale(0);}

/* =============================================================================
   9. PUENTE — escena de la caja
   -----------------------------------------------------------------------------
   La caja es el objeto protagonista de la escena; no recorre el resto del sitio
   ni es la cabeza de ninguna línea. La línea del puente es una de las dos que
   quedan en la página, y su función es conducir hacia la sección siguiente.
   ========================================================================== */
.mp-bridge{
  position:relative;z-index:3;
  min-height:clamp(620px,78vh,720px);overflow:hidden;
  background:var(--mp-white);display:flex;align-items:center;
  padding:clamp(72px,9vh,104px) 0;
}
.mp-bridge__content{position:relative;z-index:3;width:100%;}
.mp-bridge__grid{align-items:center;}
/* el texto se concentra a la izquierda para dejarle la derecha a la caja */
.mp-bridge__main{grid-column:1 / 7;display:grid;gap:22px;}
.mp-bridge__title{margin-top:22px;}
.mp-bridge__lead{margin:0;max-width:440px;}
.mp-bridge__quote{border-left:2px solid var(--mp-green);padding:2px 0 2px 18px;}
.mp-bridge__quote p{font-size:var(--mp-body-lg);line-height:var(--mp-body-lg-line);
  font-weight:500;color:var(--mp-black);max-width:400px;}

/* ---------- caja: objeto protagonista ---------- */
/* Reposicionada. Con right:8% el objeto quedaba pegado al borde del viewport,
   fuera del contenedor de 1320px y sin relación con el texto. Ahora se centra
   entre el final del texto y el borde derecho del contenedor:
   a 1843px de ancho el texto termina en ~761px y el contenedor en ~1582px;
   el punto medio es ~1170px, y con right:24% y 380px de ancho el centro cae
   en ~1211px. */
/* TAMAÑO. A 1536px de ancho el espacio libre a la derecha del texto va de
   748px al borde del contenedor en 1420. Una camioneta de 380 dejaba casi
   300px de aire y se leía como un objeto perdido en el blanco.
   Con 33vw —507px a ese ancho— y right:13% el centro caía en 1070, que es
   casi el punto medio geométrico (1084) pero se veía desbalanceado: 68px de
   aire contra el texto y 213 contra el borde de la pantalla. El ojo compara
   contra el borde visible del viewport, no contra el borde invisible del
   contenedor. Con right:9% los dos huecos quedan en ~130 y ~150. */
.mp-package{
  position:absolute;
  right:9%;
  top:50%;
  width:clamp(300px,33vw,520px);
  z-index:2;
  transform-origin:center;
  will-change:transform,opacity;
  pointer-events:none;
  /* El centrado vertical NO va acá con translateY(-50%): GSAP escribe x y
     scale sobre `transform`. Lo pone el JS con yPercent:-50, que compone con
     `y` en vez de reemplazarlo. */
}
/* Dos sombras encadenadas, no una. drop-shadow sigue la silueta del alfa, así
   que la primera —corta y cerrada— hace de contacto contra el piso y la
   segunda —larga y difusa— da la distancia. Una sola sombra grande deja el
   objeto flotando; el defecto que se veía era ése. */
.mp-package__img{
  display:block;width:100%;height:auto;
  filter:drop-shadow(0 14px 14px rgba(17,20,23,.22))
         drop-shadow(0 42px 60px rgba(17,20,23,.16));
}
/* Elipse de contacto bajo las ruedas. El recorte tiene las ruedas apoyadas al
   85% de su alto —medido sobre el canal alfa—, así que la elipse va ahí y no
   al fondo de la caja. Es lo que ancla el vehículo al piso: las drop-shadow
   solas siguen el contorno y no crean suelo. */
.mp-package::after{
  content:"";position:absolute;z-index:-1;
  left:9%;right:7%;top:82%;height:13%;
  background:radial-gradient(closest-side,rgba(17,20,23,.26),rgba(17,20,23,0) 78%);
}

.mp-nomotion .mp-package{transform:translateY(-50%);}

/* =============================================================================
   10. SERVICIOS — escenas en capas
   -----------------------------------------------------------------------------
   BASE = bloques secuenciales. Es lo que se ve sin JS, sin GSAP, en mobile y en
   reduced motion. Cada <article class="mp-service"> trae su texto y su escena,
   así que apilarlos no requiere reordenar nada.
   La escena sticky se activa después, sólo con html:not(.mp-nomotion) y ≥1025px.
   ========================================================================== */
.mp-services{position:relative;background:var(--mp-white);}
.mp-services__index{display:none;}
.mp-services__sticky{padding:clamp(72px,9vh,104px) 0;}
.mp-services__grid{display:block;}

/* Acento por servicio: sólo variaciones de la identidad (verde y navy).
   No se cambia el fondo de la sección, sólo línea, etiqueta e indicadores. */
.mp-service{
  --mp-service-accent:var(--mp-green);
  --mp-service-soft:rgba(0,156,42,.10);
  display:block;margin-bottom:72px;
}
.mp-service:last-child{margin-bottom:0;}
.mp-service[data-mp-service="1"]{--mp-service-accent:var(--mp-green-dk);--mp-service-soft:rgba(0,112,30,.10);}
.mp-service[data-mp-service="2"]{--mp-service-accent:var(--mp-navy);--mp-service-soft:rgba(23,48,112,.09);}
.mp-service[data-mp-service="3"]{--mp-service-accent:var(--mp-navy-dk);--mp-service-soft:rgba(12,27,68,.08);}
.mp-eyebrow--scene{color:var(--mp-service-accent);}

/* ---------- columna de texto ---------- */
.mp-services__state{max-width:420px;}
.mp-services__state .mp-h3{margin-top:14px;}
.mp-services__state .mp-text{margin-top:14px;max-width:420px;}
.mp-services__tags{display:flex;flex-wrap:wrap;gap:8px;margin-top:20px;}
.mp-services__tags li{
  font-size:13px;line-height:20px;font-weight:500;color:var(--mp-gray-700);
  padding:6px 12px;border-radius:var(--mp-r-pill);
  background:var(--mp-service-soft);border:1px solid var(--mp-line-light);
}
.mp-services__state .mp-link{margin-top:12px;color:var(--mp-service-accent);}

/* ---------- escenario ---------- */
.mp-services__stage{position:relative;margin-top:26px;}
.mp-service-scene{position:relative;}
.mp-service-scene__main{
  margin:0;border-radius:var(--mp-r-img);overflow:hidden;
  aspect-ratio:16/11;background:var(--mp-gray-100);
}
.mp-service-scene__main img,
.mp-service-scene__main svg{width:100%;height:100%;object-fit:cover;display:block;}
/* en base se ocultan: con una sola columna saturan */
.mp-service-scene__detail{display:none;}

/* ---------- módulo operativo ----------
   Tres elementos como máximo. Sin dashboards, sin skeletons, sin números
   inventados: sólo rótulos de operaciones que la empresa efectivamente presta. */
/* ---------- registro de temperatura (cadena de frío) ---------- */
.mp-temp{
  position:absolute;left:5%;bottom:7%;z-index:3;width:min(266px,58%);
  background:rgba(12,22,44,.92);border:1px solid rgba(255,255,255,.12);
  border-radius:16px;padding:14px 16px 12px;
  box-shadow:0 22px 48px -14px rgba(0,0,0,.6);backdrop-filter:blur(6px);
}
.mp-temp__hd{display:flex;align-items:baseline;justify-content:space-between;gap:12px;}
.mp-temp__hd span{font-size:10px;font-weight:600;letter-spacing:1.8px;text-transform:uppercase;
  color:rgba(255,255,255,.56);}
.mp-temp__hd b{font-size:19px;font-weight:600;color:#fff;font-variant-numeric:tabular-nums;letter-spacing:-.4px;}
.mp-temp__g{display:block;width:100%;height:64px;margin-top:10px;overflow:visible;}
.mp-temp__lim{stroke:rgba(34,194,74,.42);stroke-width:1;stroke-dasharray:3 4;}
.mp-temp__line{fill:none;stroke:var(--mp-green-br);stroke-width:2;stroke-linecap:round;stroke-linejoin:round;}
.mp-temp__pt{fill:#fff;stroke:var(--mp-green-br);stroke-width:2.5;}
.mp-temp__ft{display:flex;justify-content:space-between;margin-top:6px;
  font-size:10px;font-weight:600;letter-spacing:1.4px;color:rgba(255,255,255,.46);}

@media(max-width:768px){ .mp-temp{position:relative;left:auto;bottom:auto;width:100%;margin-top:16px;} }
.mp-service-scene__module{
  position:relative;z-index:2;margin:-30px 0 0 16px;
  width:min(230px,74%);
  background:#fff;border:1px solid rgba(13,16,18,.10);border-radius:16px;
  box-shadow:0 14px 34px rgba(10,16,24,.12);
  padding:12px 13px;display:grid;gap:10px;
  color:var(--mp-service-accent);
}
.mp-sm__label{display:flex;align-items:center;justify-content:space-between;gap:10px;}
.mp-sm__tag{
  font-size:10px;font-weight:600;letter-spacing:1.6px;text-transform:uppercase;
  padding:5px 9px;border-radius:var(--mp-r-pill);
  background:var(--mp-service-soft);color:var(--mp-service-accent);
}
.mp-sm__barcode{width:62px;height:14px;color:var(--mp-black);opacity:.5;}
.mp-sm__row{
  display:flex;align-items:center;justify-content:space-between;gap:10px;
  font-size:12px;line-height:18px;color:var(--mp-gray-600);margin:0;
}
.mp-sm__row b{font-size:12px;font-weight:600;color:var(--mp-black);}
.mp-sm__steps{display:flex;align-items:flex-start;gap:0;}
.mp-sm__steps li{
  position:relative;flex:1;display:flex;flex-direction:column;gap:7px;
  font-size:10.5px;line-height:14px;font-weight:600;color:var(--mp-gray-600);
}
.mp-sm__steps i{
  width:9px;height:9px;border-radius:50%;flex:0 0 auto;
  background:#fff;border:1.6px solid var(--mp-service-accent);
}
.mp-sm__steps li::before{
  content:"";position:absolute;left:9px;top:3.7px;right:0;height:1.6px;
  background:var(--mp-service-soft);
}
.mp-sm__steps li.is-end::before{display:none;}
.mp-sm__steps li.is-end i{background:var(--mp-service-accent);}
.mp-sm__steps--stack{flex-direction:column;align-items:flex-start;gap:8px;}
.mp-sm__steps--stack li{flex:none;flex-direction:row;align-items:center;gap:9px;}
.mp-sm__steps--stack li::before{display:none;}
.mp-sm__boxes{width:100%;height:26px;color:var(--mp-service-accent);opacity:.55;}
.mp-sm__points{position:relative;padding:6px 0 4px;}
.mp-sm__points svg{width:100%;height:34px;color:var(--mp-service-accent);}
.mp-sm__pt{position:absolute;font-size:10px;font-weight:600;color:var(--mp-gray-600);}
.mp-sm__pt--a{left:0;bottom:-6px;}
.mp-sm__pt--b{right:0;top:-4px;}
.mp-sm__dot{width:9px;height:9px;border-radius:50%;background:var(--mp-service-accent);flex:0 0 auto;}
.mp-sm__check{
  width:15px;height:15px;border-radius:50%;flex:0 0 auto;position:relative;
  border:1.5px solid var(--mp-service-accent);
}
.mp-sm__check::after{
  content:"";position:absolute;left:4.4px;top:2.2px;width:4px;height:7px;
  border:1.6px solid var(--mp-service-accent);border-top:0;border-left:0;
  transform:rotate(42deg);
}
.mp-sm__temp{display:flex;align-items:baseline;gap:9px;}
.mp-sm__temp b{font-size:22px;font-weight:600;letter-spacing:-.5px;color:var(--mp-black);}
.mp-sm__temp span{font-size:11px;color:var(--mp-gray-600);}

/* =============================================================================
   11. ENTREGA AL PROCESO
   ========================================================================== */

/* =============================================================================
   12. PROCESO
   ========================================================================== */
/* =============================================================================
   12. LA RUTA DEL PAQUETE — ocho estaciones
   -----------------------------------------------------------------------------
   Fondo claro. El negro aislaba la sección del resto de la página y las fotos
   de depósito —que ya son oscuras— se hundían en él.
   Nota de contraste: sobre #F7F8F5 el verde brillante #22C24A da 2,22:1 y el
   verde de marca #009C2A da 3,40:1. Ninguno sirve para texto. Se usa un verde
   más oscuro para lo que se lee y se reservan los brillantes para trazos,
   puntos y fondos, que no tienen que cumplir el mínimo de texto.
   ========================================================================== */
.mp-route{position:relative;background:var(--mp-bg-light,#F7F8F5);color:var(--mp-black,#111417);
  padding:clamp(72px,9vh,104px) 0;}
.mp-route__head{max-width:660px;}
.mp-route__head .mp-h2{margin-top:18px;}
.mp-route__lead{margin-top:20px;color:var(--mp-gray-700);}

.mp-route__cifras{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:20px;
  margin-top:34px;padding-top:22px;border-top:1px solid var(--mp-line-light);max-width:560px;}
.mp-route__cifras dt{font-size:clamp(23px,1.95vw,29px);line-height:1.06;font-weight:600;
  letter-spacing:-.02em;color:var(--mp-green-dk,#00701E);font-variant-numeric:tabular-nums;}
.mp-route__cifras dd{margin-top:6px;font-size:13px;line-height:19px;color:var(--mp-gray-600);}

.mp-prog{display:none;}
.mp-route__scenes{margin-top:clamp(40px,6vh,64px);display:grid;gap:clamp(40px,6vh,64px);}

.mp-scene{display:grid;gap:24px;}
.mp-scene__foto{border-radius:22px;overflow:hidden;background:#E8EAE7;aspect-ratio:4/3;}
.mp-scene__foto img{width:100%;height:100%;object-fit:cover;}
.mp-scene__n{display:block;font-size:12px;line-height:20px;font-weight:600;letter-spacing:2.4px;
  color:var(--mp-green-dk,#00701E);font-variant-numeric:tabular-nums;}
.mp-scene__n i{font-style:normal;color:var(--mp-gray-600);}
.mp-scene__tx h3{margin-top:10px;font-size:clamp(20px,1.75vw,25px);line-height:1.16;
  font-weight:600;letter-spacing:-.02em;}
.mp-scene__claim{margin-top:12px;font-size:16px;line-height:25px;font-weight:500;
  color:var(--mp-black,#111417);max-width:34ch;}
.mp-scene__d{margin-top:14px;font-size:15px;line-height:24px;color:var(--mp-gray-700);max-width:52ch;}

.mp-scene__dato{display:inline-flex;align-items:baseline;gap:9px;margin-top:18px;
  padding:9px 15px;border-radius:999px;background:rgba(0,156,42,.10);border:1px solid rgba(0,156,42,.28);}
.mp-scene__dato b{font-size:17px;font-weight:650;color:var(--mp-green-dk,#00701E);font-variant-numeric:tabular-nums;}
.mp-scene__dato span{font-size:13px;color:var(--mp-gray-700);}

.mp-scene__servs{display:flex;flex-wrap:wrap;align-items:center;gap:8px;margin-top:20px;}
.mp-scene__lbl{font-size:10.5px;font-weight:600;letter-spacing:1.8px;text-transform:uppercase;
  color:var(--mp-gray-600);margin-right:2px;}
.mp-scene__serv{display:inline-flex;align-items:center;gap:7px;padding:7px 13px;border-radius:999px;
  border:1px solid var(--mp-line-light);background:#fff;font-size:12.5px;font-weight:600;
  color:var(--mp-gray-700);
  transition:border-color .25s var(--mp-e),color .25s var(--mp-e),box-shadow .25s var(--mp-e);}
.mp-scene__serv::before{content:"";width:6px;height:6px;border-radius:50%;background:var(--mp-green);flex:0 0 auto;}
.mp-scene__serv:hover{border-color:var(--mp-green);color:var(--mp-black,#111417);
  box-shadow:0 8px 20px -8px rgba(0,156,42,.35);}


/* =============================================================================
   13. TRAZABILIDAD
   ========================================================================== */
.mp-tracking{position:relative;background:var(--mp-off-white);padding:clamp(80px,11vh,132px) 0;overflow:hidden;}
.mp-tracking__grid{align-items:center;row-gap:44px;}
.mp-tracking__text{grid-column:1 / 6;}
.mp-tracking__stage{grid-column:7 / 13;}
.mp-tracking__text .mp-h2{margin-top:20px;}
.mp-tracking__text .mp-text{margin-top:24px;}
.mp-tracking__list{margin-top:28px;display:grid;gap:14px;}
.mp-tracking__list li{position:relative;padding-left:24px;font-size:15px;line-height:25px;color:var(--mp-gray-700);}
.mp-tracking__list li::before{content:"";position:absolute;left:0;top:11px;width:9px;height:9px;border-radius:50%;background:var(--mp-green);}
.mp-tracking__cta{margin-top:32px;display:flex;gap:12px;flex-wrap:wrap;}
/* Sin tarjeta. El fondo negro, el radio de 22px, la sombra y la barra blanca
   del pie estaban compensando un recorte mal hecho: la imagen se había
   exportado a JPG y había perdido la transparencia. Con el WebP recortado al
   objeto, la laptop se apoya sola sobre el fondo de la sección. */
.mp-tracking__stage{position:relative;}
.mp-tracking__stage img{display:block;width:100%;height:auto;}
.mp-tracking__pie{margin-top:14px;font-size:12.5px;line-height:19px;
  color:var(--mp-gray-600);}
/* Los .mp-panel y .mp-skel se borraron con los paneles dibujados que
   reemplazó la captura del sistema: 14 reglas sin un solo elemento en el HTML. */

/* =============================================================================
   14. COBERTURA
   ========================================================================== */
.mp-coverage{background:var(--mp-white);padding:clamp(80px,11vh,124px) 0;}
.mp-coverage__grid{align-items:end;row-gap:40px;}
.mp-coverage__text{grid-column:1 / 7;}
.mp-coverage__text .mp-h2{margin-top:20px;}
.mp-coverage__text .mp-text{margin-top:24px;}
.mp-coverage__zones{grid-column:8 / 13;display:grid;gap:0;}
.mp-coverage__zones li{display:grid;gap:4px;padding:20px 0;border-top:1px solid var(--mp-line-light);}
.mp-coverage__zones li:last-child{border-bottom:1px solid var(--mp-line-light);}
.mp-coverage__zones b{font-size:17px;line-height:25px;font-weight:600;}
.mp-coverage__zones span{font-size:15px;line-height:24px;color:var(--mp-gray-600);}

/* =============================================================================
   15. EVIDENCIA
   ========================================================================== */
.mp-proof{position:relative;background:var(--mp-black);color:#fff;padding:clamp(80px,11vh,132px) 0;overflow:hidden;}
.mp-proof__grid{align-items:center;row-gap:44px;}
.mp-proof__media{grid-column:1 / 6;position:relative;border-radius:var(--mp-r-img);overflow:hidden;aspect-ratio:4/5;background:var(--mp-dark-2);}
.mp-proof__media img{width:100%;height:100%;object-fit:cover;}
.mp-proof__text{grid-column:7 / 13;}
.mp-proof__text .mp-h2{margin-top:20px;color:#fff;}
.mp-proof__text .mp-text{margin-top:22px;}
.mp-proof__metrics{margin-top:46px;display:grid;grid-template-columns:repeat(3,1fr);gap:28px;}
.mp-proof__metric{border-top:1px solid var(--mp-line-dark);padding-top:20px;}
.mp-proof__metric b{display:block;font-size:clamp(36px,3.5vw,48px);line-height:1.05;font-weight:500;letter-spacing:-.04em;color:#fff;font-variant-numeric:tabular-nums;}
.mp-proof__metric span{display:block;margin-top:12px;font-size:14px;line-height:22px;color:rgba(255,255,255,.62);}

/* =============================================================================
   16. FAQ
   ========================================================================== */
.mp-faq{background:var(--mp-white);padding:clamp(80px,11vh,124px) 0;}
.mp-faq__grid{align-items:start;row-gap:36px;}
.mp-faq__head{grid-column:1 / 5;}
.mp-faq__head .mp-h2{margin-top:20px;}
.mp-faq__list{grid-column:6 / 13;}
.mp-faq__item{border-top:1px solid var(--mp-line-light);}
.mp-faq__item:last-child{border-bottom:1px solid var(--mp-line-light);}
.mp-faq__q{width:100%;display:flex;align-items:center;justify-content:space-between;gap:24px;padding:26px 0;min-height:44px;text-align:left;font-size:17.5px;line-height:26px;font-weight:600;letter-spacing:-.012em;}
.mp-faq__sign{position:relative;width:22px;height:22px;flex:0 0 auto;}
.mp-faq__sign::before,.mp-faq__sign::after{content:"";position:absolute;left:50%;top:50%;background:var(--mp-green-dk);border-radius:2px;transform:translate(-50%,-50%);transition:transform .36s var(--mp-e),opacity .36s var(--mp-e);}
.mp-faq__sign::before{width:16px;height:2px;}
.mp-faq__sign::after{width:2px;height:16px;}
.mp-faq__q[aria-expanded="true"] .mp-faq__sign::after{transform:translate(-50%,-50%) rotate(90deg);opacity:0;}
.mp-faq__a{display:grid;grid-template-rows:0fr;transition:grid-template-rows .36s cubic-bezier(.16,1,.3,1);}
.mp-faq__a.is-open{grid-template-rows:1fr;}
.mp-faq__a > div{overflow:hidden;}
.mp-faq__a p{padding-bottom:26px;font-size:15px;line-height:25px;color:var(--mp-gray-700);max-width:620px;}
.mp-faq__a[hidden]{display:none;}
.mp-nomotion .mp-faq__a{grid-template-rows:1fr;}
.mp-nomotion .mp-faq__sign{display:none;}

/* =============================================================================
   17. CONVERSIÓN
   ========================================================================== */
.mp-cta{position:relative;background:var(--mp-navy);color:#fff;padding:clamp(80px,11vh,118px) 0;overflow:hidden;}
.mp-cta::before{
  content:"";position:absolute;left:-10%;top:-40%;width:70%;height:180%;
  background:radial-gradient(closest-side,rgba(0,156,42,.34),transparent 72%);
  pointer-events:none;
}
.mp-cta__grid{position:relative;z-index:2;align-items:start;row-gap:44px;}
.mp-cta__text{grid-column:1 / 6;}
.mp-cta__text .mp-h2{margin-top:20px;color:#fff;}
.mp-cta__text .mp-text{margin-top:22px;color:rgba(255,255,255,.78);}
.mp-cta__direct{margin-top:36px;display:grid;gap:2px;}
.mp-cta__direct a{display:flex;align-items:center;min-height:46px;font-size:16px;font-weight:600;border-bottom:1px solid rgba(255,255,255,.14);transition:color .25s var(--mp-e);}
.mp-cta__direct a:hover{color:var(--mp-green-br);}

.mp-form{grid-column:7 / 13;display:grid;gap:16px;}
.mp-form__row{display:grid;grid-template-columns:1fr 1fr;gap:16px;}
.mp-form__field{display:grid;gap:7px;}
.mp-form__field label{font-size:13px;line-height:20px;font-weight:600;color:rgba(255,255,255,.80);}
.mp-form__field input,.mp-form__field select,.mp-form__field textarea{
  height:54px;padding:0 15px;font-family:inherit;font-size:15px;color:var(--mp-black);
  background:var(--mp-white);border:1px solid rgba(13,16,18,.16);border-radius:var(--mp-r-field);width:100%;
  transition:border-color .25s var(--mp-e),box-shadow .25s var(--mp-e);
}
.mp-form__field textarea{height:106px;padding:15px;resize:vertical;line-height:24px;}
.mp-form__field select{appearance:none;
  background-image:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='12' height='8' viewBox='0 0 12 8'%3E%3Cpath d='M1 1l5 5 5-5' fill='none' stroke='%230D1012' stroke-width='1.8' stroke-linecap='round'/%3E%3C/svg%3E");
  background-repeat:no-repeat;background-position:right 15px center;padding-right:38px;}
.mp-form__field input:focus,.mp-form__field select:focus,.mp-form__field textarea:focus{border-color:var(--mp-green);box-shadow:0 0 0 3px rgba(0,156,42,.28);}
.mp-form__foot{display:flex;align-items:center;justify-content:space-between;gap:18px;flex-wrap:wrap;margin-top:8px;}
.mp-form__note{font-size:13px;line-height:20px;color:rgba(255,255,255,.72);max-width:330px;}
.mp-form__msg{font-size:14px;line-height:22px;font-weight:600;color:var(--mp-black);padding:14px 16px;border-radius:var(--mp-r-field);background:rgba(255,255,255,.92);}
.mp-form__msg[hidden]{display:none;}

/* =============================================================================
   18. FOOTER
   ========================================================================== */
.mp-footer{background:var(--mp-black);color:#fff;padding:84px 0 34px;}
.mp-footer__grid{gap:var(--mp-gap);row-gap:40px;}
.mp-footer__brand{grid-column:1 / 5;}
.mp-footer__brand img{height:36px;width:auto;}
.mp-footer__brand p{margin-top:20px;font-size:15px;line-height:24px;color:rgba(255,255,255,.58);max-width:300px;}
.mp-footer__col{grid-column:span 2;}
.mp-footer__col h3{font-size:11px;line-height:15px;font-weight:600;letter-spacing:2.2px;text-transform:uppercase;color:rgba(255,255,255,.45);margin:0;}
.mp-footer__col a,.mp-footer__col span{display:block;margin-top:14px;font-size:15px;line-height:24px;color:rgba(255,255,255,.78);transition:color .25s var(--mp-e);}
.mp-footer__col a:hover{color:var(--mp-green-br);}
.mp-footer__base{margin-top:64px;padding-top:24px;border-top:1px solid var(--mp-line-dark);display:flex;justify-content:space-between;gap:20px;flex-wrap:wrap;font-size:13px;line-height:20px;color:rgba(255,255,255,.50);}
.mp-footer__base a:hover{color:var(--mp-green-br);}

/* =============================================================================
   19. ESCENAS — sólo con motion confirmado y ≥1025px
   ========================================================================== */
@media (min-width:1025px){
  /* ---------------------------------------------------------------------------
     SERVICIOS — escena sticky (sólo con GSAP confirmado y ≥1025px)
     ------------------------------------------------------------------------ */
  /* La altura la fija el JS en píxeles (ver "reparto uniforme del scroll"):
     depende de cuánto mide el panel pegado y de cuántos servicios hay, y eso
     no se puede escribir en vh. Este valor queda como piso para el instante
     entre que se retira .mp-nomotion y el JS mide, y así no hay un salto. */
  html:not(.mp-nomotion) .mp-services{min-height:320vh;}

  /* Los cuatro marcadores apilados y centrados en el panel, no repartidos a lo
     largo de 2.880px. La posición vertical la resuelve el flex: el JS ya no
     escribe `top` en cada uno. */
  html:not(.mp-nomotion) .mp-services__index{
    display:flex;flex-direction:column;gap:26px;
    position:absolute;z-index:5;pointer-events:none;
    left:max(22px, calc((100% - var(--mp-maxw)) / 2 + 18px));
    top:50%;transform:translateY(-50%);
  }
  /* Guía vertical que los agrupa: sin ella se leen como cuatro etiquetas
     sueltas en vez de como un recorrido. Arranca y termina en el centro del
     primer y del último punto, de ahí los 4px. */
  html:not(.mp-nomotion) .mp-services__index::before{
    content:"";position:absolute;left:4px;top:4px;bottom:4px;width:1px;
    background:var(--mp-line-light);
  }
  html:not(.mp-nomotion) .mp-services__tick{
    position:relative;display:flex;align-items:center;gap:14px;
    opacity:.42;transition:opacity .4s var(--mp-e);
  }
  html:not(.mp-nomotion) .mp-services__tick.is-active{opacity:1;}
  html:not(.mp-nomotion) .mp-services__tick::before{
    content:"";width:9px;height:9px;border-radius:50%;flex:0 0 auto;z-index:1;
    background:var(--mp-white);border:2px solid var(--mp-green);
    box-shadow:0 0 0 4px var(--mp-bg-light, #F7F8F5);
    transition:transform .4s var(--mp-e),background .4s var(--mp-e);
  }
  html:not(.mp-nomotion) .mp-services__tick.is-active::before{background:var(--mp-green);transform:scale(1.35);}
  html:not(.mp-nomotion) .mp-services__tick b{font-size:11px;font-weight:600;letter-spacing:2.2px;}
  html:not(.mp-nomotion) .mp-services__tick span{
    font-size:13px;font-weight:500;color:var(--mp-gray-600);white-space:nowrap;
    opacity:0;transform:translateX(-6px);transition:opacity .4s var(--mp-e),transform .4s var(--mp-e);
  }
  html:not(.mp-nomotion) .mp-services__tick.is-active span{opacity:1;transform:none;}

  html:not(.mp-nomotion) .mp-services__sticky{
    position:sticky;top:64px;height:calc(100svh - 64px);
    min-height:min(650px, calc(100svh - 64px));
    overflow:hidden;display:flex;align-items:center;padding:0;
  }
  /* 128px de reserva a la izquierda: es el ancho del índice y su rótulo */
  html:not(.mp-nomotion) .mp-services__grid{
    position:relative;display:block;
    height:min(68vh,640px);min-height:540px;
  }

  html:not(.mp-nomotion) .mp-service{
    position:absolute;top:0;right:0;bottom:0;left:180px;margin:0;
    display:grid;grid-template-columns:minmax(300px,4fr) minmax(0,8fr);
    gap:clamp(52px,6vw,92px);align-items:center;
    visibility:hidden;opacity:0;pointer-events:none;
  }
  html:not(.mp-nomotion) .mp-service.is-active{visibility:visible;opacity:1;pointer-events:auto;}

  html:not(.mp-nomotion) .mp-services__stage{
    position:relative;height:100%;margin-top:0;
    perspective:1200px;transform-style:preserve-3d;
  }
  html:not(.mp-nomotion) .mp-service-scene{position:absolute;inset:0;transform-style:preserve-3d;}

  html:not(.mp-nomotion) .mp-service-scene__main{
    position:absolute;aspect-ratio:auto;border-radius:24px;
  }
  html:not(.mp-nomotion) .mp-service-scene__detail{
    display:block;position:absolute;margin:0;
    border-radius:18px;overflow:hidden;
    box-shadow:0 22px 55px rgba(10,16,24,.16);
  }
  html:not(.mp-nomotion) .mp-service-scene__detail img{width:100%;height:100%;object-fit:cover;}
  html:not(.mp-nomotion) .mp-service-scene__module{
    position:absolute;margin:0;width:auto;
  }

  /* Posición distinta por escena: ninguna repite proporción ni encuadre. */
  html:not(.mp-nomotion) [data-service-scene="0"] .mp-service-scene__main   {left:0;   top:2%;  width:74%; height:80%;}
  html:not(.mp-nomotion) [data-service-scene="0"] .mp-service-scene__detail {right:0;  bottom:6%; width:228px; height:168px;}
  html:not(.mp-nomotion) [data-service-scene="0"] .mp-service-scene__module {left:5%;  bottom:0; width:198px;}

  html:not(.mp-nomotion) [data-service-scene="1"] .mp-service-scene__main   {right:0;  top:0;   width:72%; height:86%;}
  html:not(.mp-nomotion) [data-service-scene="1"] .mp-service-scene__detail {left:0;   bottom:4%; width:218px; height:162px;}
  html:not(.mp-nomotion) [data-service-scene="1"] .mp-service-scene__module {right:4%; bottom:0; width:200px;}

  html:not(.mp-nomotion) [data-service-scene="2"] .mp-service-scene__main   {left:5%;  top:8%;  width:76%; height:76%;}
  html:not(.mp-nomotion) [data-service-scene="2"] .mp-service-scene__detail {right:0;  top:0;   width:206px; height:154px;}
  html:not(.mp-nomotion) [data-service-scene="2"] .mp-service-scene__module {left:0;   bottom:3%; width:186px;}

  html:not(.mp-nomotion) [data-service-scene="3"] .mp-service-scene__main   {right:0;  top:3%;  width:70%; height:84%;}
  html:not(.mp-nomotion) [data-service-scene="3"] .mp-service-scene__module {left:0;   top:24%; width:192px;}

  /* proceso */
  /* -------------------------------------------------------------------------
     LA RUTA — escena fija al centro
     La sección mide 8 pantallas; el escenario queda pegado al centro y las
     estaciones se relevan encima. El progreso va arriba, en una fila de ocho
     marcas, porque abajo compite con el pie de la escena.
     ---------------------------------------------------------------------- */
  html:not(.mp-nomotion) .mp-route{padding-bottom:0;}
  html:not(.mp-nomotion) .mp-route__stage{
    position:sticky;top:var(--mp-header-h);
    height:calc(100svh - var(--mp-header-h));
    display:flex;align-items:center;overflow:hidden;
  }
  html:not(.mp-nomotion) .mp-route__stage > .mp-wrap{width:min(100% - var(--mp-gutter), 1120px);}

  /* fila de progreso */
  html:not(.mp-nomotion) .mp-prog{
    display:flex;align-items:center;gap:10px;margin-bottom:clamp(22px,3vh,34px);
  }
  html:not(.mp-nomotion) .mp-prog__dot{
    flex:1;height:3px;border-radius:3px;background:rgba(13,16,18,.12);position:relative;
    transition:background .45s var(--mp-e);
  }
  html:not(.mp-nomotion) .mp-prog__dot.is-done{background:rgba(0,156,42,.42);}
  html:not(.mp-nomotion) .mp-prog__dot.is-active{background:var(--mp-green);
    box-shadow:0 0 12px rgba(0,156,42,.35);}
  html:not(.mp-nomotion) .mp-prog__dot span{
    position:absolute;left:0;top:-22px;font-size:10.5px;font-weight:600;letter-spacing:1.6px;
    color:var(--mp-gray-600);font-variant-numeric:tabular-nums;transition:color .45s var(--mp-e);
  }
  html:not(.mp-nomotion) .mp-prog__dot.is-active span{color:var(--mp-green-dk,#00701E);}

  /* las ocho escenas ocupan el mismo lugar; sólo se ve una */
  html:not(.mp-nomotion) .mp-route__scenes{
    position:relative;margin-top:0;display:block;
    height:min(60vh,520px);min-height:400px;
  }
  /* La pareja foto + texto se centra como bloque. Con la segunda columna en
     1fr el texto se topaba en 56ch y sobraban 280px a la derecha: la escena
     quedaba pegada a la izquierda en vez de desarrollarse al medio. */
  html:not(.mp-nomotion) .mp-scene{
    position:absolute;inset:0;
    grid-template-columns:clamp(280px,25vw,380px) minmax(0,540px);
    justify-content:center;
    gap:clamp(36px,4.5vw,68px);align-items:center;
    opacity:0;visibility:hidden;pointer-events:none;
  }
  html:not(.mp-nomotion) .mp-scene.is-active{opacity:1;visibility:visible;pointer-events:auto;}
  html:not(.mp-nomotion) .mp-scene__foto{
    height:100%;aspect-ratio:auto;
    box-shadow:0 30px 70px -26px rgba(13,16,18,.35);
  }
  html:not(.mp-nomotion) .mp-scene__tx{max-width:none;}
  html:not(.mp-nomotion) .mp-scene__d{max-width:52ch;}

}

/* Los estados iniciales de animación NO se declaran acá a propósito: los
   escribe el JS con gsap.set() en el mismo tick en que crea los triggers.
   Si se declararan en CSS habría un frame de parpadeo al retirar .mp-nomotion,
   y cualquier excepción posterior dejaría contenido invisible para siempre. */

/* =============================================================================
   20. RESPONSIVE
   ========================================================================== */
@media (max-width:1200px){
  .mp-home{--mp-gutter:56px;}
  .mp-hero__content{grid-column:1 / 9;}
  .mp-bridge__main{grid-column:1 / 7;}
  .mp-bridge__side{grid-column:7 / 13;}
}
/* El rótulo del rastreo se retira antes que la nav: libera ~90px justo en la
   franja donde los tres grupos empezaban a competir. */
@media (max-width:1180px){
  .mp-header__track-label{display:none;}
  .mp-header__track{padding-inline:12px;}
}
/* La nav colapsa a 1040px, no a 768px. */
@media (max-width:1040px){
  .mp-nav{display:none;}
  .mp-burger{display:flex;}
}

@media (max-width:1024px){
  .mp-home{--mp-gutter:48px;--mp-gap:20px;}
  .mp-grid{grid-template-columns:repeat(6,minmax(0,1fr));}

  .mp-hero__content{grid-column:1 / 7;padding-top:96px;padding-bottom:88px;}
  .mp-hero__overlay{background:linear-gradient(96deg,rgba(6,8,9,.94) 0%,rgba(6,8,9,.80) 44%,rgba(6,8,9,.32) 100%);}

  .mp-bridge__main,.mp-bridge__side{grid-column:1 / 7;}
  .mp-bridge{min-height:clamp(580px,72vh,660px);}
  .mp-package{right:6%;width:clamp(260px,36vw,420px);}
  .mp-tracking__text,.mp-tracking__stage{grid-column:1 / 7;}

  .mp-coverage__text,.mp-coverage__zones{grid-column:1 / 7;}
  .mp-proof__media{grid-column:1 / 7;aspect-ratio:16/10;}
  .mp-proof__text{grid-column:1 / 7;}
  .mp-faq__head,.mp-faq__list{grid-column:1 / 7;}
  .mp-cta__text,.mp-form{grid-column:1 / 7;}
  .mp-footer__brand{grid-column:1 / 7;}
  .mp-footer__col{grid-column:span 3;}
}
@media (max-width:768px){
  /* SERVICIOS — bloques secuenciales explícitos (sin sticky, sin 3D) */
  .mp-services{min-height:auto;}
  .mp-services__sticky{position:relative;top:auto;height:auto;min-height:0;padding:64px 0;}
  .mp-services__grid{display:block;}
  .mp-service{margin-bottom:72px;}
  .mp-service-scene__main{aspect-ratio:4/3;}
  .mp-service-scene__module{width:min(230px,84%);margin-left:12px;}

  .mp-home{--mp-gutter:40px;}
  .mp-header__cta .mp-btn{display:none;}
  .mp-hero{min-height:auto;}
  .mp-hero__content{padding-top:88px;padding-bottom:64px;}
  .mp-hero__cta{gap:10px;}
  .mp-hero__cta .mp-btn{width:100%;}
  .mp-home .mp-hero__facts{grid-template-columns:1fr;gap:14px;margin-top:32px;}
  .mp-hero__cue{display:none;}
  .mp-trust{padding:18px 0;}
  .mp-trust__panel{grid-template-columns:1fr;gap:14px;}
  .mp-trust__list{gap:20px;}
  /* la ruta baja a una franja bajo el texto: no lo tapa y sigue leyéndose */
  /* apilado: el texto arriba, la caja debajo y centrada; la línea baja a una
     franja propia para no quedar nunca sobre el texto */
  .mp-bridge{min-height:auto;padding:64px 0 300px;}
  .mp-bridge__main{grid-column:1 / 7;}
  .mp-package{right:auto;left:50%;top:auto;bottom:56px;width:min(320px,74vw);
    margin-left:calc(min(320px,74vw) / -2);}

  .mp-proof__metrics{grid-template-columns:1fr;gap:0;}
  .mp-proof__metric{padding:22px 0;}
  .mp-faq__q{font-size:17px;line-height:25px;padding:22px 0;}
  .mp-form__row{grid-template-columns:1fr;}
  .mp-form__foot{flex-direction:column;align-items:stretch;}
  .mp-form__foot .mp-btn{width:100%;}
  .mp-footer__col{grid-column:span 6;}
}
@media (max-width:480px){
  .mp-bridge{padding:56px 0 280px;}

}

/* =============================================================================
   21. REDUCED MOTION
   El JS no retira .mp-nomotion cuando esta preferencia está activa, así que
   ninguna escena llega a construirse. Esto sólo neutraliza lo declarativo.
   ========================================================================== */
@media (prefers-reduced-motion:reduce){
  .mp-home *,.mp-home *::before,.mp-home *::after{
    animation-duration:.001ms!important;animation-iteration-count:1!important;
    transition-duration:.001ms!important;scroll-behavior:auto!important;
  }
  .mp-hero__cue i::after{display:none;}
  .mp-hero__media{transform:none;}

  /* CAJA — queda quieta, visible y centrada. Sin escala ni desplazamiento. */
  .mp-package{transform:translateY(-50%)!important;opacity:1!important;visibility:visible!important;}

  /* LAPTOP — en su sitio, sin entrada lateral. */
  .mp-tracking__stage{transform:none!important;opacity:1!important;visibility:visible!important;}

  /* SERVICIOS — sin sticky, sin perspectiva, sin clip-path animado, sin
     flotación. Todas las escenas secuenciales y todo el contenido visible.
     (El JS tampoco retira .mp-nomotion con esta preferencia activa, así que la
      escena ni siquiera llega a construirse; esto es el cinturón de seguridad.) */
  html:not(.mp-nomotion) .mp-services{min-height:auto!important;}
  html:not(.mp-nomotion) .mp-services__sticky{position:static;height:auto;min-height:0;padding:72px 0;}
  html:not(.mp-nomotion) .mp-services__grid{display:block;padding-left:0;height:auto;min-height:0;}
  html:not(.mp-nomotion) .mp-services__index{display:none;}
  html:not(.mp-nomotion) .mp-service{
    position:static;display:block;margin-bottom:72px;
    visibility:visible;opacity:1;pointer-events:auto;
    transform:none!important;clip-path:none!important;
  }
  html:not(.mp-nomotion) .mp-services__stage{height:auto;margin-top:26px;perspective:none;transform-style:flat;}
  html:not(.mp-nomotion) .mp-service-scene{position:relative;inset:auto;transform-style:flat;}
  html:not(.mp-nomotion) .mp-service-scene__main{position:relative;aspect-ratio:16/11;width:auto;height:auto;left:auto;right:auto;top:auto;bottom:auto;}
  html:not(.mp-nomotion) .mp-service-scene__detail,
  html:not(.mp-nomotion) .mp-service-scene__module{
    position:relative;margin:-30px 0 0 16px;width:min(230px,74%);
    left:auto;right:auto;top:auto;bottom:auto;transform:none!important;
  }
}
