/*
Theme Name: Hello Elementor Child
Theme URI: https://github.com/elementor/hello-theme-child/
Description: Hello Elementor Child is a child theme of Hello Elementor, created by Elementor team
Author: Elementor Team
Author URI: https://elementor.com/
Template: hello-elementor
Version: 2.0.0
Text Domain: hello-elementor-child
License: GNU General Public License v3 or later.
License URI: https://www.gnu.org/licenses/gpl-3.0.html
*/

/* La cabecera de arriba es la que une el tema hijo con Hello Elementor: si
   desaparece, WordPress da el tema por roto ("Falta la plantilla"). Debajo
   va el CSS de NEMEIS generado por elementor/build/build.py. */

/* ============================================================
   NEMEIS — styles.css
   Generado por elementor/build/build.py el 2026-10-02 08:44.
   Fuente: build/site_css.py (global), build/templates.py (cabecera,
   tarjeta de actualidad) y build/page_home.py (cada sección).
   Edita ahí y vuelve a lanzar build.py, o edita este archivo a mano
   si no vas a regenerar. Los colores apuntan a los globales del kit
   de Elementor (var(--e-global-color-*)); el :root de abajo es el
   respaldo para que el archivo funcione también fuera de Elementor.
   ============================================================ */

:root{
  --e-global-color-primary: #384C54;
  --e-global-color-secondary: #18242A;
  --e-global-color-text: #A8BFC6;
  --e-global-color-accent: #F67C05;
  --e-global-color-f5e0c01: #F5ECE0;
  --e-global-color-2e3f471: #2E3F47;
  --e-global-color-2735401: #273540;
  --e-global-color-ff98301: #FF9830;
  --e-global-color-ff90201: #FF9020;
  --e-global-color-e7ae4a1: #E7AE4A;
  --e-global-color-2e4d5e1: #2E4D5E;
  --e-global-color-1c282d1: #1C282D;
  --e-global-color-34474f1: #34474F;
  --e-global-color-2a3a421: #2A3A42;
  --e-global-color-202d341: #202D34;
}
:root{
  --e-global-typography-primary-font-family: 'Open Sans', sans-serif;
  --e-global-typography-primary-font-weight: 800;
  --e-global-typography-primary-font-size: 64px;
  --e-global-typography-primary-line-height: 1.04em;
  --e-global-typography-primary-letter-spacing: -0.025em;
  --e-global-typography-secondary-font-family: 'Open Sans', sans-serif;
  --e-global-typography-secondary-font-weight: 800;
  --e-global-typography-secondary-font-size: 43px;
  --e-global-typography-secondary-line-height: 1.04em;
  --e-global-typography-secondary-letter-spacing: -0.025em;
  --e-global-typography-text-font-family: 'Open Sans', sans-serif;
  --e-global-typography-text-font-weight: 400;
  --e-global-typography-text-font-size: 16px;
  --e-global-typography-text-line-height: 1.7em;
  --e-global-typography-accent-font-family: 'Google Sans Code', sans-serif;
  --e-global-typography-accent-font-weight: 500;
  --e-global-typography-accent-font-size: 12px;
  --e-global-typography-accent-line-height: 1.6em;
  --e-global-typography-accent-letter-spacing: 0.16em;
  --e-global-typography-accent-text-transform: uppercase;
  --e-global-typography-a3a3a31-font-family: 'Open Sans', sans-serif;
  --e-global-typography-a3a3a31-font-weight: 700;
  --e-global-typography-a3a3a31-font-size: 22px;
  --e-global-typography-a3a3a31-line-height: 1.2em;
  --e-global-typography-a3a3a31-letter-spacing: -0.015em;
  --e-global-typography-1ead000-font-family: 'Open Sans', sans-serif;
  --e-global-typography-1ead000-font-weight: 400;
  --e-global-typography-1ead000-font-size: 21px;
  --e-global-typography-1ead000-line-height: 1.6em;
  --e-global-typography-57a7e01-font-family: 'Open Sans', sans-serif;
  --e-global-typography-57a7e01-font-weight: 800;
  --e-global-typography-57a7e01-font-size: 64px;
  --e-global-typography-57a7e01-line-height: 1.22em;
  --e-global-typography-57a7e01-letter-spacing: -0.025em;
  --e-global-typography-57a7002-font-family: 'Open Sans', sans-serif;
  --e-global-typography-57a7002-font-weight: 800;
  --e-global-typography-57a7002-font-size: 64px;
  --e-global-typography-57a7002-line-height: 1em;
  --e-global-typography-57a7002-letter-spacing: -0.03em;
  --e-global-typography-b077011-font-family: 'Open Sans', sans-serif;
  --e-global-typography-b077011-font-weight: 700;
  --e-global-typography-b077011-font-size: 16px;
  --e-global-typography-b077011-line-height: 1.2em;
  --e-global-typography-b077011-letter-spacing: 0px;
  --e-global-typography-b077011-text-transform: none;
  --e-global-typography-0a71001-font-family: 'Open Sans', sans-serif;
  --e-global-typography-0a71001-font-weight: 600;
  --e-global-typography-0a71001-font-size: 17px;
  --e-global-typography-fa90001-font-family: 'Open Sans', sans-serif;
  --e-global-typography-fa90001-font-weight: 800;
  --e-global-typography-fa90001-font-size: 120px;
  --e-global-typography-fa90001-line-height: 0.82em;
  --e-global-typography-fa90001-letter-spacing: -0.04em;
  --e-global-typography-8e5005b-font-family: 'Open Sans', sans-serif;
  --e-global-typography-8e5005b-font-weight: 400;
  --e-global-typography-8e5005b-font-size: 22px;
  --e-global-typography-8e5005b-line-height: 1.5em;
  --e-global-typography-1abe100-font-family: 'Open Sans', sans-serif;
  --e-global-typography-1abe100-font-weight: 700;
  --e-global-typography-1abe100-font-size: 12px;
  --e-global-typography-1abe100-letter-spacing: 0.16em;
  --e-global-typography-1abe100-text-transform: uppercase;
  --e-global-typography-9806001-font-family: 'Open Sans', sans-serif;
  --e-global-typography-9806001-font-weight: 800;
  --e-global-typography-9806001-font-size: 38px;
  --e-global-typography-9806001-line-height: 1em;
}

/* ══ Fondo navy continuo del sitio ══ */
body {
  background:
    radial-gradient(1100px 640px at 18% -4%, rgba(246,124,5,.20), transparent 56%),
    radial-gradient(900px 560px at 88% 32%, rgba(246,124,5,.05), transparent 50%),
    radial-gradient(1000px 700px at 50% 78%, rgba(13,20,24,.55), transparent 60%),
    linear-gradient(180deg, var(--e-global-color-34474f1) 0%, var(--e-global-color-2a3a421) 38%, var(--e-global-color-202d341) 70%, var(--e-global-color-secondary) 100%)
    !important;
  background-attachment: fixed !important;
  -webkit-font-smoothing: antialiased;
  /* Sin scroll horizontal en móvil. `clip` no crea contenedor de scroll (no
     rompe position:sticky) y, al contrario que `hidden`, iOS lo respeta. */
  overflow-x: hidden;
  overflow-x: clip;
}

/* ══ Saltos de línea controlados ══
   El boceto mantiene «votre performance,» y «partenaire de confiance,» en una
   sola línea. Solo a partir de 600px: en móvil no caben y desbordan. */
@media (min-width: 600px) { .nem-nowrap { white-space: nowrap; } }

/* ══ Neutralizar los envoltorios del tema ══
   Impreza pinta .l-canvas y .l-footer con var(--color-content-bg-grad) = #fff,
   lo que tapa por completo el fondo del body. Estos selectores solo existen en
   temas con maquetación propia; con Hello Elementor no hacen nada. */
.l-canvas, .l-footer, .l-main, .l-section, .l-titlebar,
.site, .site-content, .content-area, #content, #page {
  background: transparent !important;
}
/* .l-canvas{overflow:hidden} rompe position:sticky (vídeo del hero, canvas FAQ) */
.l-canvas { overflow: visible !important; }
/* El contenedor del tema no debe limitar las secciones a sangre */
.l-section-h {
  max-width: none !important;
  padding-left: 0 !important;
  padding-right: 0 !important;
}
.elementor { background: transparent !important; }

/* ══ Tipografía fluida del boceto ══
   El boceto escala los titulares con clamp(); el panel de Elementor solo admite
   px por breakpoint. Estas reglas reproducen el tamaño EXACTO a cualquier
   ancho. Llevan !important porque el CSS que Elementor genera por widget tiene
   más especificidad. Si quieres volver a controlarlos desde el panel, borra
   este bloque. */
.nem-h1 .elementor-heading-title        { font-size: clamp(2.3rem, 4.4vw, 4rem) !important; }
.nem-h2 .elementor-heading-title        { font-size: clamp(1.7rem, 3.2vw, 2.7rem) !important; }
.nem-h2-defis .elementor-heading-title  { font-size: clamp(1.6rem, 2.6vw, 2.4rem) !important; max-width: 22ch; }
.nem-hero-sub .elementor-heading-title  { font-size: clamp(1.1rem, 1.7vw, 1.4rem) !important; max-width: 34ch; }
.nem-lead                               { font-size: clamp(1.05rem, 1.6vw, 1.35rem) !important; }
.nem-stmt .elementor-heading-title      { font-size: clamp(2.1rem, 4.4vw, 4rem) !important; }
.nem-stat .elementor-heading-title      { font-size: clamp(2.6rem, 5vw, 4rem) !important; }
.nem-faq-num .elementor-heading-title   { font-size: clamp(3.4rem, 8.5vw, 7.5rem) !important; }
.nem-faq-q .elementor-heading-title     { font-size: clamp(1.2rem, 1.9vw, 1.6rem) !important; max-width: 60ch; }
.nem-problem-text                       { font-size: clamp(1rem, 1.4vw, 1.2rem) !important; max-width: 44ch; }
.nem-problem-num .elementor-heading-title { font-size: 2.4rem !important; }

/* ══ Botones como en el boceto ══
   Red de seguridad: Elementor enlaza por defecto los botones del kit a la
   tipografía "Accent" (mono, mayúsculas, letter-spacing). El kit ya lo
   redirige a "Bouton"; esto cubre instalaciones donde el kit no se reimporte. */
.elementor-button, .elementor-button-text {
  text-transform: none !important;
  letter-spacing: 0 !important;
}

/* ══ Hero corto de páginas interiores (partículas de fondo) ══
   El canvas se ancla a la sección, no al hueco del widget HTML. */
.nem-fx-hero { position: relative; overflow: visible !important; }
.nem-fx-hero > .e-con-inner > .elementor-widget-html,
.nem-fx-hero .elementor-widget-html > .elementor-widget-container { position: static !important; }
.nem-fx-hero > .e-con-inner > .e-con { position: relative; z-index: 1; }

/* ══ Hero con foto (Qui sommes-nous, servicios) ══
   Foto desaturada y fundida (hacia abajo y hacia la izquierda) bajo las
   partículas. Se funde a transparente sobre el fondo real: sin costuras.
   (.nem-about-hero es el nombre antiguo: lo llevan las páginas importadas
   antes del 2/10; se mantiene para que no se rompan.) */
.nem-photo-hero .nem-hero-photo, .nem-about-hero .nem-hero-photo {
  position: absolute; inset: 0; z-index: 0; margin: 0; pointer-events: none;
  opacity: .28;
  -webkit-mask-image:
    linear-gradient(to bottom, #000 35%, transparent 100%),
    linear-gradient(to left, #000 25%, transparent 95%);
  -webkit-mask-composite: source-in;
  mask-image:
    linear-gradient(to bottom, #000 35%, transparent 100%),
    linear-gradient(to left, #000 25%, transparent 95%);
  mask-composite: intersect;
}
.nem-photo-hero .nem-hero-photo, .nem-about-hero .nem-hero-photo,
.nem-photo-hero .nem-hero-photo .elementor-widget-container, .nem-about-hero .nem-hero-photo .elementor-widget-container,
.nem-photo-hero .nem-hero-photo img, .nem-about-hero .nem-hero-photo img { width: 100%; height: 100%; }
.nem-photo-hero .nem-hero-photo img, .nem-about-hero .nem-hero-photo img { object-fit: cover; display: block; filter: grayscale(.5) brightness(.9); }
.nem-photo-hero .nem-hero-canvas, .nem-about-hero .nem-hero-canvas { z-index: 1; }
.nem-photo-hero > .e-con-inner > .e-con, .nem-about-hero > .e-con-inner > .e-con { z-index: 2; }

/* ══ Eyebrow: corchetes técnicos [ TEXTE ] ══ */
.nem-eyebrow p { margin: 0; }
.nem-eyebrow p::before { content: "[ "; opacity: .7; }
.nem-eyebrow p::after  { content: " ]"; opacity: .7; }

/* ══ Enlace con flecha y subrayado animado ══ */
.nem-link-arrow a { position: relative; font-weight: 700; color: var(--e-global-color-accent); }
.nem-link-arrow a::after {
  content: ""; position: absolute; left: 0; bottom: -4px;
  height: 2px; width: 0; background: var(--e-global-color-accent); transition: width .3s ease;
}
.nem-link-arrow a:hover::after { width: 100%; }

/* ══ Accesibilidad ══ */
@media (prefers-reduced-motion: reduce) {
  .nem-marquee-track, .nem-tilt-row { animation: none !important; }
}

/* ── Cabecera fija y transparente como el boceto (88px, el logo sobresale) ──
   Fija solo en el front: en el editor se queda en su sitio para no tapar. */
body:not(.elementor-editor-active) #site-header {
  position: fixed; top: 0; left: 0; right: 0; z-index: 50;
  transition: background .35s ease, box-shadow .35s ease, backdrop-filter .35s ease;
}
body.admin-bar:not(.elementor-editor-active) #site-header { top: 32px; }
#site-header, #site-header > .e-con-inner { height: 88px; overflow: visible; }
/* Nunca más ancha que la pantalla, pase lo que pase con su contenido */
#site-header { width: 100% !important; max-width: 100% !important; }
#site-header > .e-con-inner { flex-wrap: nowrap; min-width: 0; }
/* Fondo translúcido al bajar */
#site-header.nem-scrolled {
  background: rgba(31,44,51,.82);
  -webkit-backdrop-filter: blur(14px); backdrop-filter: blur(14px);
  box-shadow: 0 1px 0 rgba(245,236,224,.14), 0 8px 30px rgba(0,0,0,.22);
}
#site-header .nem-logo img { height: 152px; width: auto; max-width: 500px; }
@media (max-width: 600px) { #site-header .nem-logo img { height: 64px; } }

/* ── Menú pegado a la derecha junto al botón, como en el boceto ── */
#site-header .nem-nav { margin-left: auto; }
.nem-nav .elementor-item { opacity: .85; transition: opacity .25s ease, color .25s ease; }
.nem-nav .elementor-item:hover, .nem-nav .elementor-item.elementor-item-active { opacity: 1; }
.nem-nav .elementor-item::after { background: var(--e-global-color-accent) !important; }

.nem-post-card { transition: transform .3s ease, box-shadow .3s ease; height: 100%; }
.nem-post-card:hover { transform: translateY(-6px); box-shadow: 0 30px 70px rgba(0,0,0,.45); }
.nem-post-cover { overflow: hidden; }
.nem-post-cover img { width: 100%; aspect-ratio: 16/10; object-fit: cover; display: block;
  transition: transform .6s cubic-bezier(.2,.8,.2,1); }
.nem-post-card:hover .nem-post-cover img { transform: scale(1.07); }
.nem-post-card:hover h3 { color: var(--e-global-color-accent); }
.nem-post-cat { transition: letter-spacing .3s ease; }
.nem-post-card:hover .nem-post-cat { letter-spacing: .22em; }

/* ── Blog ── */

/* Filtro de categorías como chips */
.nem-filter .e-filter { display: flex; flex-wrap: wrap; gap: 10px; }
.nem-filter .e-filter-item {
  border: 1px solid rgba(245,236,224,.14); border-radius: 999px; padding: 10px 18px;
  background: transparent; color: var(--e-global-color-f5e0c01); cursor: pointer;
  font-family: var(--e-global-typography-accent-font-family, 'Google Sans Code', monospace);
  font-size: 12px; font-weight: 500; letter-spacing: .14em; text-transform: uppercase;
  transition: border-color .3s ease, color .3s ease, background .3s ease;
}
.nem-filter .e-filter-item:hover,
.nem-filter .e-filter-item.e-active,
.nem-filter .e-filter-item[aria-pressed="true"] {
  border-color: var(--e-global-color-accent); color: var(--e-global-color-accent);
  background: rgba(246,124,5,.08);
}

/* Paginación numérica del Loop Grid */
.nem-grid .elementor-pagination { display: flex; justify-content: center; gap: 10px; margin-top: 56px; }
.nem-grid .elementor-pagination .page-numbers {
  font-family: var(--e-global-typography-accent-font-family, 'Google Sans Code', monospace);
  font-size: 13px; letter-spacing: .1em; color: var(--e-global-color-text);
  border: 1px solid rgba(245,236,224,.14); border-radius: 999px; padding: 8px 14px;
  transition: color .3s ease, border-color .3s ease;
}
.nem-grid .elementor-pagination .page-numbers.current,
.nem-grid .elementor-pagination .page-numbers:hover { color: var(--e-global-color-accent); border-color: var(--e-global-color-accent); }

/* Categoría como eyebrow dinámico [ STRATÉGIE ] */
.nem-eyebrow-dyn .elementor-post-info { display: inline-flex; gap: 0; margin: 0; padding: 0; }
.nem-eyebrow-dyn .elementor-post-info li { margin: 0; }
.nem-eyebrow-dyn .elementor-post-info::before { content: "[ "; opacity: .7; }
.nem-eyebrow-dyn .elementor-post-info::after  { content: " ]"; opacity: .7; }
.nem-eyebrow-dyn a { color: inherit; }

/* Imagen destacada del artículo */
.nem-cover img {
  width: 100%; aspect-ratio: 16 / 9; object-fit: cover; display: block;
  border-radius: 20px; border: 1px solid rgba(245,236,224,.14);
  box-shadow: 0 30px 70px rgba(0,0,0,.35);
}

/* Contenido del artículo: tipografía del sitio */
.nem-article { font-size: 18px; line-height: 1.75; }
.nem-article p { margin: 0 0 1.4em; color: var(--e-global-color-text); }
.nem-article h2, .nem-article h3, .nem-article h4 {
  color: var(--e-global-color-f5e0c01); font-weight: 800; letter-spacing: -.02em; line-height: 1.15;
  margin: 2em 0 .7em;
}
.nem-article h2 { font-size: clamp(1.5rem, 2.4vw, 2.1rem); }
.nem-article h3 { font-size: clamp(1.25rem, 1.8vw, 1.6rem); }
.nem-article a { color: var(--e-global-color-accent); text-decoration: underline; text-underline-offset: 3px; }
.nem-article strong { color: var(--e-global-color-f5ece0, var(--e-global-color-f5e0c01)); }
.nem-article ul, .nem-article ol { margin: 0 0 1.4em 1.2em; color: var(--e-global-color-text); }
.nem-article li { margin-bottom: .5em; }
.nem-article blockquote {
  margin: 2em 0; padding: 8px 0 8px 28px; border-left: 3px solid var(--e-global-color-accent);
  color: var(--e-global-color-f5e0c01); font-size: 1.2em; font-weight: 600; line-height: 1.45;
}
.nem-article img { max-width: 100%; height: auto; border-radius: 16px; border: 1px solid rgba(245,236,224,.14); }
.nem-article figcaption { color: var(--e-global-color-text); font-size: 14px; margin-top: 8px; }
.nem-article hr { border: 0; border-top: 1px solid rgba(245,236,224,.14); margin: 3em 0; }

/* Anterior / siguiente */
.nem-postnav .elementor-post-navigation { border-top: 1px solid rgba(245,236,224,.14); padding-top: 32px; }
.nem-postnav .post-navigation__prev--label, .nem-postnav .post-navigation__next--label {
  font-family: var(--e-global-typography-accent-font-family, 'Google Sans Code', monospace);
  font-size: 12px; letter-spacing: .14em; text-transform: uppercase;
}
.nem-postnav .post-navigation__prev--title, .nem-postnav .post-navigation__next--title { font-weight: 700; }
.nem-postnav .elementor-post-navigation__separator { background: rgba(245,236,224,.14); }

/* El panel del vídeo se ancla a #scroll-stage y recorre hero + défis.
   Para que el sticky funcione, ningún intermedio puede recortar ni crear
   contexto de posicionamiento. */
#scroll-stage { position: relative !important; overflow: visible !important; }
#hero, #defis { overflow: visible !important; }
/* Los widgets HTML no deben crear bloque contenedor: el canvas y el indicador
   de scroll se anclan a #hero, no al hueco del widget. */
#scroll-stage > .elementor-widget-html,
#hero > .e-con-inner > .elementor-widget-html,
#hero .elementor-widget-html > .elementor-widget-container { position: static !important; }
/* El texto va SIEMPRE por encima del panel del vídeo, que es opaco */
#hero, #defis { position: relative; z-index: 2; }

/* Vídeo isométrico sticky en la mitad derecha (hero → défis) */
/* position:sticky crea contexto de apilamiento, así que el mix-blend-mode del
   vídeo se mezcla contra ESTE panel, no contra la página: el panel necesita
   fondo propio y ese fondo tiene que ser indistinguible del de la web.
   Por eso el panel ocupa EXACTAMENTE el viewport (100% de ancho × 100vh):
   así su caja coincide con el área de pintado del fondo del body y el
   degradado sale idéntico, dependa o no de background-attachment. Un panel
   más estrecho recolocaba los degradados radiales y se veía el recuadro. */
.nem-tech-anim {
  position: absolute; top: 0; bottom: 0;
  left: 50%; width: 100vw; margin-left: -50vw;   /* a sangre, mida lo que mida el contenedor */
  pointer-events: none; z-index: 1; overflow: visible;
}
.nem-tech-anim-inner {
  position: sticky; top: 0; height: 100vh; width: 100%; overflow: visible;
  background:
    radial-gradient(1100px 640px at 18% -4%, rgba(246,124,5,.20), transparent 56%),
    radial-gradient(900px 560px at 88% 32%, rgba(246,124,5,.05), transparent 50%),
    radial-gradient(1000px 700px at 50% 78%, rgba(13,20,24,.55), transparent 60%),
    linear-gradient(180deg, var(--e-global-color-34474f1) 0%, var(--e-global-color-2a3a421) 38%, var(--e-global-color-202d341) 70%, var(--e-global-color-secondary) 100%);
  background-attachment: fixed;
}
/* Posición explícita, no por flex: centrado en el 75% del ancho como el boceto.
   El fondo del clip está horneado a negro puro y screen lo vuelve invisible.
   Selector reforzado + !important: Elementor trae `.elementor video{width:100%}`
   que ganaba a la clase sola y hacía el vídeo a pantalla completa (se salía del
   panel y su negro asomaba por el borde derecho). */
.nem-tech-anim-inner > .nem-tech-video {
  position: absolute; top: 50%; left: 75%;
  transform: translate(-50%, -50%);
  width: 50% !important; max-width: 620px !important; height: auto !important;
  display: block; object-fit: contain; mix-blend-mode: screen;
}
@media (max-width: 1024px) { .nem-tech-anim { display: none; } }
/* La mitad derecha queda reservada para el vídeo. El hueco se reserva en el
   contenedor de 1440 (como en el boceto), NO en .nem-hero-inner: si se aplica
   al bloque de 960px el texto se queda sin ancho y el H1 se parte palabra a
   palabra. */
@media (min-width: 1025px) {
  #hero > .e-con-inner, #defis > .e-con-inner { padding-right: 44%; }
}

/* Hero */
#hero { position: relative; }
#hero .nem-hero-inner { max-width: 960px; position: relative; z-index: 3; }
.nem-hero-canvas {
  position: absolute; inset: 0; width: 100%; height: 100%;
  z-index: 0; pointer-events: none;
}
/* (Sin fundido inferior en el hero: el cliente lo quitó a mano; el fondo
   continuo del body ya enlaza con la sección siguiente.) */
.nem-hero-inverse {
  font-size: clamp(1.1rem, 2vw, 1.6rem); font-weight: 400; font-style: italic;
  color: var(--e-global-color-text); letter-spacing: .01em;
}
.nem-hero-scroll {
  position: absolute; bottom: 34px; left: 50%; transform: translateX(-50%);
  z-index: 4; display: flex; flex-direction: column; align-items: center;
}
.nem-hero-scroll .dot {
  width: 22px; height: 36px; border: 1.5px solid rgba(245,236,224,.14);
  border-radius: 12px; position: relative;
}
.nem-hero-scroll .dot::after {
  content: ""; position: absolute; top: 7px; left: 50%;
  transform: translateX(-50%); width: 4px; height: 6px;
  background: var(--e-global-color-accent); border-radius: 2px; animation: nemScrollDot 1.8s infinite;
}
@keyframes nemScrollDot {
  0% { opacity: 0; top: 7px; } 40% { opacity: 1; }
  80% { opacity: 0; top: 18px; } 100% { opacity: 0; }
}

/* Défis — lista numerada */
.nem-problem-list { border-top: 1px solid rgba(245,236,224,.14); }
.nem-problem-item { border-bottom: 1px solid rgba(245,236,224,.14); }
.nem-problem-item .nem-problem-num {
  color: var(--e-global-color-accent); opacity: .55;
  transition: opacity .45s ease, text-shadow .45s ease,
              transform .5s cubic-bezier(.2,.8,.2,1);
}
.nem-problem-item:hover .nem-problem-num {
  opacity: 1; transform: translateX(8px);
  text-shadow: 0 0 40px rgba(246,124,5,.65), 0 0 80px rgba(246,124,5,.25);
}
.nem-problem-item p { transition: transform .5s cubic-bezier(.2,.8,.2,1); }
.nem-problem-item:hover p { transform: translateX(6px); }

.nem-tilt-stage {
  perspective: 1700px; overflow: hidden; padding: clamp(48px, 7vw, 100px) 0;
  -webkit-mask-image:
    linear-gradient(90deg, transparent 0%, #000 9%, #000 91%, transparent 100%),
    linear-gradient(180deg, transparent 0%, #000 12%, #000 88%, transparent 100%);
  -webkit-mask-composite: destination-in;
  mask-image:
    linear-gradient(90deg, transparent 0%, #000 9%, #000 91%, transparent 100%),
    linear-gradient(180deg, transparent 0%, #000 12%, #000 88%, transparent 100%);
  mask-composite: intersect;
}
.nem-tilt-track { transform: rotateX(7deg) rotateY(-17deg) rotate(3deg); transform-style: preserve-3d; }
.nem-tilt-row {
  display: flex; gap: 30px; width: max-content; padding: 0 30px;
  animation: nemTiltScroll 48s linear infinite;
}
.nem-tilt-stage:hover .nem-tilt-row { animation-play-state: paused; }
@keyframes nemTiltScroll { to { transform: translateX(-50%); } }
.nem-tilt-card {
  position: relative; flex: 0 0 auto;
  width: clamp(260px, 23vw, 340px); aspect-ratio: 3/4;
  border-radius: 20px; overflow: hidden;
  border: 1px solid rgba(245,236,224,.14);
  box-shadow: 0 30px 60px rgba(0,0,0,.45);
  transition: transform .45s cubic-bezier(.2,.8,.2,1), box-shadow .45s ease;
}
.nem-tilt-card img {
  width: 100%; height: 100%; object-fit: cover;
  filter: saturate(.9) brightness(.82);
  transition: transform .6s cubic-bezier(.2,.8,.2,1), filter .45s ease;
}
.nem-tilt-card::after {
  content: ""; position: absolute; inset: 0;
  background: linear-gradient(to top, rgba(20,29,33,.94) 4%,
              rgba(20,29,33,.30) 46%, transparent 72%);
}
.nem-tilt-info { position: absolute; left: 0; bottom: 0; z-index: 2; padding: 22px 22px 24px; }
.nem-tilt-num {
  font-family: var(--e-global-typography-accent-font-family, 'Google Sans Code', monospace); font-size: .78rem;
  letter-spacing: .12em; color: var(--e-global-color-accent);
}
.nem-tilt-info h3 { color: var(--e-global-color-f5e0c01); margin: 6px 0; font-size: 1.3rem; }
.nem-tilt-info p { color: var(--e-global-color-text); font-size: .9rem; line-height: 1.4; margin: 0; }
.nem-tilt-card:hover { transform: translateZ(70px) scale(1.03); box-shadow: 0 44px 80px rgba(0,0,0,.55); }
.nem-tilt-card:hover img { transform: scale(1.06); filter: saturate(1) brightness(1); }
.nem-tilt-dots { display: flex; gap: 36px; justify-content: center; margin-top: 44px; }
.nem-tilt-dot {
  font-family: var(--e-global-typography-text-font-family, 'Open Sans', sans-serif); font-size: .82rem; font-weight: 700;
  letter-spacing: .08em; color: rgba(245,236,224,.22);
  position: relative; padding-bottom: 7px; cursor: pointer;
  transition: color .4s ease; user-select: none;
}
.nem-tilt-dot::after {
  content: ''; position: absolute; bottom: 0; left: 0; right: 0; height: 1px;
  background: var(--e-global-color-accent); transform: scaleX(0); transform-origin: left;
  transition: transform .4s ease;
}
.nem-tilt-dot.active { color: var(--e-global-color-accent); }
.nem-tilt-dot.active::after { transform: scaleX(1); }
@media (max-width: 700px) {
  .nem-tilt-track { transform: rotateY(-10deg) rotate(2deg); }
  .nem-tilt-card { width: clamp(220px, 70vw, 280px); }
}

.nem-pillars { border-top: 1px solid rgba(245,236,224,.14); }
.nem-pillar { border-right: 1px solid rgba(245,236,224,.14); }
.nem-pillar:last-child { border-right: none; }
.nem-pillar .nem-stat { transition: text-shadow .35s ease; display: inline-block; }
.nem-pillar:hover .nem-stat { text-shadow: 0 0 26px rgba(246,124,5,.45); }
.nem-pillar h3 { transition: color .3s ease; }
.nem-pillar:hover h3 { color: #ffffff; }
@media (max-width: 600px) {
  .nem-pillar { border-right: none; border-bottom: 1px solid rgba(245,236,224,.14); }
}

.nem-marquee {
  overflow: hidden;
  -webkit-mask-image: linear-gradient(90deg, transparent, #000 12%, #000 88%, transparent);
  mask-image: linear-gradient(90deg, transparent, #000 12%, #000 88%, transparent);
}
.nem-marquee-track {
  display: flex; gap: 72px; width: max-content;
  animation: nemMarquee 38s linear infinite;
}
.nem-marquee:hover .nem-marquee-track { animation-play-state: paused; }
.nem-marquee img {
  height: 34px; width: auto; opacity: .55;
  filter: grayscale(1) brightness(1.8);
  transition: opacity .3s ease, filter .3s ease;
}
.nem-marquee img:hover { opacity: 1; filter: none; }
@keyframes nemMarquee { from { transform: translateX(0); } to { transform: translateX(-50%); } }

/* El canvas va sticky: sus ancestros no pueden recortar */
#faq, #faq .e-con, #faq .elementor-widget-html { overflow: visible !important; }
.nem-faq-canvas-wrap { position: sticky; top: 15vh; height: 70vh; width: 100%; }
.nem-faq-canvas { width: 100%; height: 100%; display: block; }
@media (max-width: 900px) { .nem-faq-canvas-wrap { display: none; } }
.nem-faq-item { position: relative; border-top: 1px solid rgba(245,236,224,.14); }
.nem-faq-item:last-child { border-bottom: 1px solid rgba(245,236,224,.14); }
.nem-faq-item::before {
  content: ""; position: absolute; inset: 0; z-index: 0;
  background: linear-gradient(90deg, rgba(246,124,5,.10), transparent 70%);
  transform: scaleX(0); transform-origin: left;
  transition: transform .5s cubic-bezier(.2,.8,.2,1);
}
.nem-faq-item:hover::before { transform: scaleX(1); }
.nem-faq-item > * { position: relative; z-index: 1; }
.nem-faq-num { transition: text-shadow .45s ease, transform .5s cubic-bezier(.2,.8,.2,1); }
.nem-faq-item:hover .nem-faq-num {
  text-shadow: 0 0 40px rgba(246,124,5,.65), 0 0 80px rgba(246,124,5,.25);
  transform: translateX(8px);
}
.nem-faq-item h3 { transition: color .3s ease; }
.nem-faq-item:hover h3 { color: var(--e-global-color-accent); }

.nem-contact-split { box-shadow: 0 30px 70px rgba(0,0,0,.45); }
.nem-contact-aside { position: relative; overflow: hidden; }
.nem-contact-aside::before {
  content: ""; position: absolute; inset: 0; pointer-events: none;
  background: radial-gradient(560px 280px at 80% -20%, rgba(246,124,5,.12), transparent 60%);
}
.nem-contact-aside > * { position: relative; z-index: 1; }
.nem-contact-list a { font-weight: 700; position: relative; }
.nem-contact-list a::after {
  content: ""; position: absolute; left: 0; bottom: -2px; height: 2px;
  width: 0; background: var(--e-global-color-accent); transition: width .3s ease;
}
.nem-contact-list a:hover::after { width: 100%; }
.nem-contact-form .elementor-field-group > label {
  font-weight: 700; font-size: .9rem; margin-bottom: 6px;
}
.nem-contact-form .elementor-field-textual { padding: 14px 18px; }
.nem-contact-form .elementor-button { width: 100%; justify-content: center; }

/* ── Página Contact ── */

/* Franja de confianza: hairlines arriba y abajo, cifras más contenidas que en la home */
.nem-trust { border-top: 1px solid rgba(245,236,224,.14); border-bottom: 1px solid rgba(245,236,224,.14); }
.nem-trust-stat .elementor-heading-title { font-size: clamp(2rem, 3vw, 2.8rem) !important; line-height: 1; }
.nem-trust-stat { transition: text-shadow .35s ease; }
.nem-pillar:hover .nem-trust-stat { text-shadow: 0 0 26px rgba(246,124,5,.45); }

/* Acordeón FAQ: solo hairlines, sin cajas */
.nem-faq-acc .elementor-accordion .elementor-accordion-item {
  border-left: 0; border-right: 0; background: transparent;
}
.nem-faq-acc .elementor-accordion .elementor-accordion-item + .elementor-accordion-item { border-top: 0; }
.nem-faq-acc .elementor-tab-title { padding: 24px 0 !important; }
.nem-faq-acc .elementor-tab-title .elementor-accordion-title { transition: color .3s ease; }
.nem-faq-acc .elementor-tab-content { padding: 0 0 28px !important; border-top: 0 !important; }
.nem-faq-acc .elementor-accordion-icon { transition: color .3s ease; }

/* ── Página Qui sommes-nous ── */

/* (El hero con foto es .nem-photo-hero, en site_css.py: lo comparten
   Qui sommes-nous y las páginas de servicio.) */

/* «25» gigante fijo mientras se leen los párrafos */
@media (min-width: 1025px) { .nem-sticky { position: sticky; top: 140px; } }
.nem-giant .elementor-heading-title {
  font-size: clamp(6rem, 13vw, 12rem) !important; line-height: .85 !important;
  letter-spacing: -.05em; text-shadow: 0 0 60px rgba(246,124,5,.22);
  transition: text-shadow .45s ease;
}
.nem-giant:hover .elementor-heading-title { text-shadow: 0 0 40px rgba(246,124,5,.65), 0 0 90px rgba(246,124,5,.25); }

/* Cita destacada */
.nem-quote { border-left: 3px solid var(--e-global-color-accent); padding-left: 28px; }

/* Línea de tiempo de la méthode */
.nem-timeline { position: relative; }
.nem-timeline::before {
  content: ""; position: absolute; left: 0; right: 0; top: 7px; height: 1px;
  background: rgba(245,236,224,.14);
}
.nem-tl-step { position: relative; }
.nem-tl-step::before {
  content: ""; position: absolute; left: 0; top: 0; width: 15px; height: 15px;
  border-radius: 50%; background: var(--e-global-color-accent);
  box-shadow: 0 0 0 7px rgba(246,124,5,.14);
  transition: box-shadow .35s ease, transform .35s ease;
}
.nem-tl-step:hover::before {
  transform: scale(1.15);
  box-shadow: 0 0 0 10px rgba(246,124,5,.18), 0 0 30px rgba(246,124,5,.55);
}
@media (max-width: 767px) { .nem-timeline::before { display: none; } }

/* Tarjetas fotográficas de expertises (mismo tratamiento que el carrusel) */
.nem-photo-card {
  position: relative; overflow: hidden; border-radius: 20px;
  border: 1px solid rgba(245,236,224,.14); aspect-ratio: 4 / 5; min-height: 380px;
  box-shadow: 0 30px 60px rgba(0,0,0,.35);
  transition: transform .45s cubic-bezier(.2,.8,.2,1), border-color .3s ease, box-shadow .45s ease;
}
.nem-photo-card .nem-photo { position: absolute; inset: 0; z-index: 0; margin: 0; }
.nem-photo-card .nem-photo,
.nem-photo-card .nem-photo .elementor-widget-container,
.nem-photo-card .nem-photo img { width: 100%; height: 100%; }
.nem-photo-card .nem-photo img {
  object-fit: cover; display: block; filter: saturate(.9) brightness(.82);
  transition: transform .6s cubic-bezier(.2,.8,.2,1), filter .45s ease;
}
.nem-photo-card::after {
  content: ""; position: absolute; inset: 0; z-index: 1; pointer-events: none;
  background: linear-gradient(to top, rgba(20,29,33,.94) 4%, rgba(20,29,33,.30) 46%, transparent 72%);
}
.nem-photo-card > .elementor-widget:not(.nem-photo) { position: relative; z-index: 2; }
.nem-photo-card:hover { transform: translateY(-8px); border-color: rgba(246,124,5,.5); box-shadow: 0 44px 80px rgba(0,0,0,.5); }
.nem-photo-card:hover .nem-photo img { transform: scale(1.06); filter: saturate(1) brightness(1); }

/* Red de partners: chips sobre la red de partículas */
.nem-net { position: relative; min-height: 420px; }
.nem-net .elementor-widget-html { position: static !important; }
.nem-net .nem-faq-canvas-wrap { position: absolute !important; inset: 0; top: 0 !important; height: 100% !important; }
.nem-net > .e-con, .nem-net > .elementor-widget:not(.elementor-widget-html) { position: relative; z-index: 1; }
.nem-chip {
  border: 1px solid rgba(245,236,224,.14); border-radius: 999px;
  background: rgba(24,36,42,.55); -webkit-backdrop-filter: blur(6px); backdrop-filter: blur(6px);
  transition: border-color .3s ease, background .3s ease, transform .3s ease;
}
.nem-chip .elementor-heading-title { letter-spacing: .12em; }
.nem-chip:hover { border-color: var(--e-global-color-accent); background: rgba(246,124,5,.12); transform: translateY(-3px); }

/* Numerales mono */
.nem-step-num .elementor-heading-title { letter-spacing: .12em; }

/* ── Página Services ── */

/* Las anclas del índice no se esconden bajo la cabecera fija */
.nem-service { scroll-margin-top: 110px; }

/* Foto del servicio: marco redondeado con hairline y zoom al pasar */
.nem-photo-frame { overflow: hidden; border-radius: 20px; border: 1px solid rgba(245,236,224,.14);
  box-shadow: 0 30px 60px rgba(0,0,0,.35); }
.nem-photo-frame .elementor-widget-container, .nem-photo-frame img { display: block; width: 100%; }
.nem-photo-frame img { aspect-ratio: 4 / 3; object-fit: cover; filter: saturate(.9) brightness(.85);
  transition: transform .7s cubic-bezier(.2,.8,.2,1), filter .45s ease; }
.nem-service:hover .nem-photo-frame img { transform: scale(1.05); filter: saturate(1) brightness(1); }

/* Numeral grande atenuado que se enciende al pasar, como en los défis */
.nem-service .nem-stat { opacity: .55; transition: opacity .45s ease, text-shadow .45s ease; }
.nem-service:hover .nem-stat { opacity: 1; text-shadow: 0 0 40px rgba(246,124,5,.55); }
