/* ═══════════════════════════════════════════════════════════════════════
   CERESAT — hoja de estilos del sitio público
   ═══════════════════════════════════════════════════════════════════════

   El orden de las CAPAS de abajo decide quién gana, por encima de la
   especificidad y del orden en el fichero. Una regla de `componentes` gana
   siempre a una de `layout` aunque esté escrita antes y aunque tenga menos
   especificidad. Eso es justo lo que aquí hacía falta:

     - `.hero` (componentes) tiene que ganar a `.sec` (layout) porque el
       elemento lleva las dos clases. Antes dependía del orden del fichero,
       `.sec` iba después y el padding del hero estaba muerto.
     - Lo mismo dentro de una media query: `@media{.hero{padding}}` tiene que
       ganar a `@media{.sec{padding}}`. Una media query NO añade especificidad,
       así que arreglar lo anterior subiendo la especificidad (`.sec.hero`)
       mataba de paso la regla móvil. Con capas los selectores se quedan
       simples y no hay que escalar nada.

   NO hay una capa "responsive". La dimensión que decide la capa es a QUÉ
   apunta la regla, no CUÁNDO aplica: una capa aparte para las media queries
   volvía a meter `.sec` y `.hero` en el mismo saco, con el mismo choque por
   orden. Por eso el `@media` de `.sec` vive en `layout` y el de `.hero` en
   `componentes`, aunque sean el mismo breakpoint.

   REGLA AL AÑADIR CSS: elige la capa por lo que la regla ES, no por dónde
   quieres que gane. `scripts/check_css.py` comprueba que no queden
   declaraciones muertas.
   ═══════════════════════════════════════════════════════════════════════ */

@layer base, layout, componentes;

@layer base {

  *{margin:0;padding:0;box-sizing:border-box;}
  :root{
    --g3:#4A1020;--g2:#7B1E2A;--g1:#A0293A;
    /* --g3:#4A1020;--g2:#7B1E2A;--g1:#A0293A;*/
    --gold:#C4A265;--gold2:#E8C98A;
    --cream:#FAF6EF;--cream2:#F0E9DA;--cream3:#E2D5C0;
    --earth:#6B4F35;
    --text:#2A1A10;--textm:#5C3D28;--texts:#8B6F4E;

    /* Rojo del logotipo. Es OTRO rojo que el de la paleta de secciones
       (--g1/--g2/--g3) y por eso tiene nombre propio: el botón APP lo usa para
       destacarse justo por no ser del mismo tono que el resto. */
    --marca:#990000;--marca-oscuro:#700000;

    /* Marco del teléfono del hero: opaco y más oscuro que .hero-bg a propósito,
       para que se lea como objeto sólido delante del fondo. */
    --tel-1:#5A1526;--tel-2:#7B1E2A;--tel-3:#3B0B18;

    /* Estados de error del formulario. */
    --error:#E8A3AD;--error-fuerte:#ff8a80;

    /* Ancho máximo de la línea de contenido. Ver la regla `.w` en `layout`. */
    --ancho-max:1280px;

    --font:-apple-system,BlinkMacSystemFont,'Segoe UI',system-ui,sans-serif;
  }
  body{font-family:var(--font);background:var(--cream);color:var(--text);line-height:1.6;font-size:16px;}
}

@layer componentes {
  /* ── NAV ──  nav{background:rgba(74,16,32,.97) navl rgba(250,246,239,.62) */
  /* `.w > nav` y no `nav` a secas. La regla genérica pintaba CUALQUIER <nav>
     de la página con el fondo oscuro, el padding y —lo peor— `position:sticky;
     top:0;z-index:200`. Eso alcanzaba también al <nav> de los enlaces legales
     del pie, que llevaba desde siempre siendo sticky sin que se notara, y al
     índice de /funcionalidades, que salía como una banda granate en medio de
     una sección crema.
     La barra de verdad es la única que cuelga directamente de `.w`. */
  .w > nav{background: rgba(74,16,32,.97);padding:14px 32px;display:flex;align-items:center;justify-content:space-between;border-radius:20px;position:sticky;top:0;z-index:200;}
  .brand{color:var(--cream);font-size:22px;font-weight:700;letter-spacing:-.3px;}
  .brand em{color:var(--gold);font-style:normal;font-size:10px;display:block;font-weight:400;letter-spacing:2px;text-transform:uppercase;margin-top:1px;}
  .navl{display:flex;gap:24px;align-items:center;}
  /* hover estilo app (styles-dashboard.css .nav-items .nav-btn): fondo rojo
     sutil + línea inferior roja que crece al pasar el ratón. Excluye
     .nav-cta (pill "Prueba gratis") y .nav-app-btn (botón "APP", su propio
     estilo llamativo, ver más abajo). */
  .navl a{color:var(--g2);font-size:12px;text-decoration:none;letter-spacing:.5px;text-transform:uppercase;font-weight:500;position:relative;padding:8px 12px;border-radius:8px;transition:color .2s ease,background-color .2s ease;}
  .navl a:not(.nav-cta):not(.nav-app-btn)::after{content:'';position:absolute;left:12px;right:12px;bottom:3px;height:2px;background:var(--g1);border-radius:2px;transform:scaleX(0);transform-origin:left;transition:transform .2s ease;}
  .navl a:not(.nav-cta):not(.nav-app-btn):hover{color:var(--g3);background-color:rgba(160,41,58,.10);}
  .navl a:not(.nav-cta):not(.nav-app-btn):hover::after{transform:scaleX(1);}
  .nav-cta{background:transparent;color:var(--g2) !important;padding:8px 18px;border-radius:50px;font-size:12px;font-weight:700 !important;text-decoration:none;letter-spacing:.3px;border:1.5px solid var(--g2);transition:background-color .2s ease,color .2s ease;}
  .nav-cta:hover{background:var(--g2);color:var(--cream) !important;}

  /* Desplegable de "Servicios". Nace porque "Precios" es la primera de varias
     categorías de servicio que van a colgar de aquí; de paso quita un elemento de
     la barra, que con "Vídeos" se había quedado apretada.
     El botón es un <button> y no un <a>: no lleva a ningún sitio, abre un menú. */
  .nav-drop{position:relative;display:flex;align-items:center;}
  .nav-drop-btn{font-family:inherit;background:none;border:0;cursor:pointer;color:var(--g2);
    font-size:12px;letter-spacing:.5px;text-transform:uppercase;font-weight:500;
    padding:8px 12px;border-radius:8px;display:inline-flex;align-items:center;gap:7px;
    transition:color .2s ease,background-color .2s ease;}
  .nav-drop-btn::after{content:'';width:5px;height:5px;border-right:1.5px solid currentColor;
    border-bottom:1.5px solid currentColor;transform:rotate(45deg) translateY(-2px);
    transition:transform .2s ease;}
  .nav-drop.open .nav-drop-btn,.nav-drop:hover .nav-drop-btn{color:var(--g3);background-color:rgba(160,41,58,.10);}
  .nav-drop.open .nav-drop-btn::after{transform:rotate(225deg) translateY(1px);}
  .nav-drop-panel{position:absolute;top:100%;left:0;margin-top:8px;min-width:200px;
    background:var(--cream2);border-radius:12px;box-shadow:0 12px 32px rgba(74,16,32,.20);
    padding:8px;display:flex;flex-direction:column;gap:2px;
    opacity:0;visibility:hidden;transform:translateY(-6px);
    transition:opacity .18s ease,transform .18s ease,visibility .18s;}
  /* Puente invisible sobre el hueco de 8px: sin él el ratón "cae" entre el botón y
     el panel, deja de haber :hover y el menú se cierra justo al ir a pulsarlo. */
  .nav-drop-panel::before{content:'';position:absolute;left:0;right:0;top:-10px;height:10px;}
  .nav-drop.open .nav-drop-panel{opacity:1;visibility:visible;transform:translateY(0);}
  /* El hover solo abre donde hay ratón. En una tableta no hay hover que valga y
     manda el .open que pone el click; así no se quedan las dos cosas peleando. */
  @media(hover:hover){
    .nav-drop:hover .nav-drop-panel{opacity:1;visibility:visible;transform:translateY(0);}
  }
  /* Los enlaces del panel heredan de .navl a: hay que apagarles la línea inferior
     animada, que ahí dentro no pinta nada. */
  .navl .nav-drop-panel a{display:block;width:100%;padding:10px 12px;font-size:11.5px;
    color:var(--g3);border-radius:8px;letter-spacing:.6px;}
  .navl .nav-drop-panel a::after{display:none !important;}
  .navl .nav-drop-panel a:hover{background-color:rgba(160,41,58,.10);color:var(--g3);}

  /* [d2] botón "APP" -- acceso a ceresat.app, más llamativo que un link de
     texto plano: sólido, contraste alto, sin icono (solo texto "APP"). En
     pantalla estrecha se oculta de la navbar (junto al resto de
     .navl a:not(.nav-cta), regla @media más abajo) y aparece como fila propia
     en .mobile-menu. [2] color por defecto = el rojo del logo, var(--marca)
     explícito (mismo valor que .cls-1 del SVG de marca). */
  .nav-app-btn{background:var(--marca) !important;color:var(--cream) !important;padding:9px 20px !important;border-radius:50px;font-weight:700 !important;letter-spacing:.4px;text-decoration:none !important;box-shadow:0 2px 10px rgba(153,0,0,.4);display:inline-flex;align-items:center;gap:6px;}
  .nav-app-btn:hover{background:var(--marca-oscuro) !important;box-shadow:0 4px 16px rgba(153,0,0,.55);transform:translateY(-1px);}

  /* [1] segundo acceso a la app antes del footer -- banda centrada, botón
     más ANCHO que el de la navbar (más presencia, es el CTA final de la
     página antes del footer). */
  .app-cta-band{display:flex;justify-content:center;padding:28px 20px;}
  .app-cta-band .nav-app-btn{font-size:16px;padding:16px 64px !important;}

  .brand{display:flex;align-items:center;gap:12px;flex-wrap:wrap;}
  .brand svg{flex-shrink:0;}
  .brand-text{display:flex;flex-direction:column;}
  .brand em{color:var(--g2);font-style:normal;font-size:10px;font-weight:700;letter-spacing:1px;text-transform:uppercase;}
}

@layer componentes {
  @media(max-width:480px){
    .brand{gap:6px;}
    .brand svg{width:50px;height:50px;}
  }
}

@layer componentes {



  .hamburger{display:none;flex-direction:column;gap:5px;cursor:pointer;padding:6px;}
  .hamburger:hover{transform:translateY(-3px)}

  .hamburger span{width:24px;height:2px;background:var(--g3);border-radius:2px;transition:.3s;}
  .mobile-menu{display:none;position:absolute;top:100%;left:0;right:0;background:var(--cream2);flex-direction:column;gap:2px;padding:16px 24px;border-radius:0 0 20px 20px;box-shadow:0 8px 24px rgba(0,0,0,.1);}
  .mobile-menu.open{display:flex;}
  /* Mismo estilo de hover que el navbar de escritorio (.navl a): fondo rojo
     sutil + línea inferior roja que crece, en vez de los separadores/
     translateX anteriores. */
  .mobile-menu a{color:var(--g3);font-size:14px;text-decoration:none;padding:12px 14px;letter-spacing:.5px;text-transform:uppercase;font-weight:500;position:relative;border-radius:8px;transition:color .2s ease,background-color .2s ease;}
  .mobile-menu a:not(.menu-app)::after{content:'';position:absolute;left:14px;right:14px;bottom:5px;height:2px;background:var(--g1);border-radius:2px;transform:scaleX(0);transform-origin:left;transition:transform .2s ease;}
  .mobile-menu a:not(.menu-app):hover{color:var(--g3);background-color:rgba(160,41,58,.10);}
  .mobile-menu a:not(.menu-app):hover::after{transform:scaleX(1);}
  /* Fila "APP" -- fondo oscuro que contrasta con el resto del menú (mismo
     tono que el botón de escritorio, --g3), diferenciada como acción
     destacada en vez de un link de navegación más. */
  .mobile-menu a.menu-app{background:var(--marca);color:var(--cream);border-radius:10px;padding:13px 14px;text-align:center;font-weight:700;margin-top:6px;text-decoration:none;}
  .mobile-menu a.menu-app:hover{background:var(--marca-oscuro);}
  /* El desplegable de escritorio, en móvil, es una fila indentada: el menú ya es
     una lista desplegada, meterle un acordeón dentro solo añade un click. */
  .mobile-menu a.menu-sub{margin-left:14px;padding-left:16px;font-size:13px;
    border-left:2px solid rgba(160,41,58,.25);border-radius:0 8px 8px 0;}
  .mobile-menu a.menu-sub::after{left:16px;}

  /* La hamburguesa entra a 790px y no a 640: entre esos dos anchos la barra
     completa cabía a duras penas y el bloque de marca se envolvía bajo el logo
     —el nav pasaba de 88px de alto a 149—. Por debajo de 790 el menú desplegable
     se ve mejor que una barra apretada. Para volver a la barra en tabletas, baja
     este 790 y el de script.js (cierre del menú al redimensionar). */
}

@layer componentes {
  @media(max-width:790px){
    /* `> a` no alcanza al desplegable, que es un <div>: hay que nombrarlo aparte
       o se quedaría suelto en la barra junto a la hamburguesa. */
    .navl > a:not(.nav-cta),.navl > .nav-drop{display:none;}
    .hamburger{display:flex;}
  }
}

@layer componentes {


  /* Justo por encima de la hamburguesa la barra sigue yendo justa: se aprieta el
     espaciado hasta 960px. Con "Precios" suelto hacían falta 878px de los 753
     disponibles a 768 y se salía por la derecha —"Prueba gratis" cortado—; el
     desplegable bajó la cuenta a 775 y esto termina de holgarla. */
}

@layer componentes {
  @media(min-width:791px) and (max-width:960px){
    .navl{gap:8px;}
    .navl a,.nav-drop-btn{padding:8px 9px;font-size:11px;letter-spacing:.3px;}
    .navl a:not(.nav-cta):not(.nav-app-btn)::after{left:9px;right:9px;}
    .nav-cta{padding:8px 13px;}
    .nav-app-btn{padding:9px 15px !important;}
    .w > nav{padding:14px 20px;}
  }
}

@layer componentes {




  /* ── HERO ── */
  /* Selector simple a propósito. Que `.hero` gane a `.sec` (el elemento lleva
     las dos clases) lo garantiza la CAPA, no la especificidad: `componentes` va
     después de `layout`. Subirlo a `.sec.hero` fue un arreglo anterior que
     mataba la regla móvil de más abajo, porque una media query no añade
     especificidad. */
  .hero{position:relative;padding:80px 40px 90px;border-radius:48px;margin-bottom:12px;overflow:hidden;min-height:500px;display:flex;align-items:center;justify-content:space-between;gap:clamp(28px,5vw,72px);}
  .hero-bg{position:absolute;inset:0;background:linear-gradient(155deg,rgba(74,16,32,.91) 0%,rgba(100,22,36,.85) 50%,rgba(74,16,32,.78) 100%),image-set(url('/data/fondo-hero.webp') type('image/webp'), url('/data/fondo-hero.jpg') type('image/jpeg')) center/cover no-repeat;}
  .hero-content{position:relative;z-index:1;flex:0 1 600px;max-width:600px;}
  .pill{display:inline-flex;align-items:center;gap:8px;background:rgba(196,162,101,.16);border:1px solid rgba(196,162,101,.38);color:var(--gold2);font-size:11px;letter-spacing:1.5px;text-transform:uppercase;padding:7px 18px;border-radius:100px;margin-bottom:28px;font-weight:500;}
  .hero h1{font-size:clamp(36px,5vw,52px);font-weight:700;color:var(--cream);line-height:1.12;margin-bottom:18px;letter-spacing:-.8px;}
  .hero h1 span{color:var(--gold);}
  .hero-sub{color:rgba(250,246,239,.8);font-size:clamp(15px,2vw,17px);line-height:1.78;max-width:520px;margin-bottom:36px;font-weight:300;}
  .email-row{display:flex;gap:10px;flex-wrap:wrap;margin-bottom:14px;}
  .email-row input{flex:1;min-width:220px;padding:15px 22px;border-radius:50px;border:1.5px solid rgba(250,246,239,.3);background:rgba(250,246,239,.12);color:var(--cream);font-size:15px;font-family:var(--font);outline:none;transition:border-color .2s;}
  .email-row input:focus{border-color:rgba(250,246,239,.6);}
  .email-row input::placeholder{color:rgba(250,246,239,.6);}
  .btn-light{background:var(--cream);color:var(--g2);padding:15px 28px;border:none;border-radius:50px;font-size:14px;font-weight:700;cursor:pointer;white-space:nowrap;font-family:var(--font);letter-spacing:.2px;transition:transform .15s,box-shadow .15s;}
  .btn-light:hover{transform:translateY(-3px);box-shadow:0 6px 24px rgba(0,0,0,.25);background:var(--cream2)}
  .hero-fine{color:rgba(250,246,239,.42);font-size:11px;letter-spacing:.3px;}

  /* ── HERO · vídeo de ejemplo ──
     El mismo MP4 que /videos: una grabación de móvil de 882x1920. Va enmarcado
     como un teléfono porque es exactamente lo que enseña — el informe de una
     parcela visto en el móvil — y así la proporción vertical deja de parecer un
     recorte raro. */
  .hero-demo{position:relative;z-index:1;flex:0 0 auto;display:flex;justify-content:center;}
  /* El marco NO lleva la proporción: la lleva el vídeo y el marco lo envuelve
     (display:inline-block + padding). Puesta en el marco, el 882/1920 sale del
     borde exterior, la pantalla se queda con los 20px de bisel de menos (9 de
     padding + 1 de borde por lado) y el `object-fit:cover` recorta la grabación
     por los lados. Medido: 0.4386 en vez de 0.4594. */
  .hero-phone{position:relative;display:inline-block;font-size:0;
    padding:9px;border-radius:40px;
    /* mismo eje (155deg) y misma familia de rojos que .hero-bg, pero opaco y más
       oscuro: así el teléfono se lee como un objeto sólido por delante del fondo
       y no como otra capa translúcida más sobre la foto */
    background:linear-gradient(155deg,var(--tel-1) 0%,var(--tel-2) 46%,var(--tel-3) 100%);
    border:1px solid rgba(196,162,101,.42);
    box-shadow:0 30px 64px rgba(23,5,10,.52),0 1px 0 rgba(232,201,138,.18) inset;}
  /* Botón lateral: va en el canto, fuera del área de pantalla, para no tapar ni un
     píxel de la grabación. */
  .hero-phone::after{content:'';position:absolute;right:-2px;top:24%;width:2px;height:54px;
    border-radius:2px;background:linear-gradient(180deg,rgba(196,162,101,.6),rgba(196,162,101,.12));}
  /* La medida de partida es el ALTO, no el ancho: a 882x1920 fijar el ancho
     descuadra el alto enseguida (260px de ancho son 566 de alto) y el teléfono se
     sale del hero. Acotado en vh siempre queda hero por encima y por debajo. */
  .hero-phone video{display:block;aspect-ratio:882/1920;height:min(560px,60vh);width:auto;
    border-radius:32px;object-fit:cover;background:var(--tel-3);cursor:pointer;}
}

@layer layout {
  /* ── ANCHO DE PÁGINA ──
     `div.w` envuelve todo el body desde siempre, pero NO tenía ni una sola
     regla: en un monitor de 2560px el texto cruzaba la pantalla entera y las
     secciones se veían sueltas. Este es el contenedor que faltaba. */
  .w{max-width:var(--ancho-max);margin:0 auto;}

  /* ── SECTIONS ── */
  .sec{padding:48px 32px;}
  .lbl{font-size:11px;letter-spacing:2.5px;text-transform:uppercase;color:var(--gold);font-weight:600;margin-bottom:10px;}
  h2{font-size:clamp(22px,3vw,30px);font-weight:700;color:var(--g3);line-height:1.28;margin-bottom:16px;letter-spacing:-.4px;}
  .lead{font-size:clamp(14px,2vw,16px);color:var(--textm);line-height:1.82;font-weight:300;}
}

@layer componentes {
  /* ── QUÉ ES · beneficios ──
     Sustituye al diagrama de las tres fuentes, que abría la página hablando de
     satélites y catastro. Eso da credibilidad pero no es lo que engancha a
     quien trabaja el campo: se movió al paso 2 de "Cómo funciona". */
  .quees{background:var(--cream2);border-radius:32px;margin:0 10px 12px;}
  /* La definición formal del producto: se lee más grande que un .lead normal
     porque es la frase que resume qué es CERESAT. */
  .quees-definicion{font-size:clamp(15px,2.2vw,17.5px);line-height:1.75;max-width:860px;}
  .quees-definicion strong{color:var(--g2);font-weight:600;}

  .beneficios{display:grid;grid-template-columns:repeat(auto-fit,minmax(250px,1fr));gap:12px;margin-top:28px;}
  .beneficio{background:var(--cream);border:1px solid var(--cream3);border-radius:20px;padding:22px 20px;}
  .beneficio-icon{width:42px;height:42px;border-radius:13px;background:rgba(123,30,42,.1);display:flex;align-items:center;justify-content:center;margin-bottom:14px;}
  .beneficio-icon svg{width:21px;height:21px;stroke:var(--g2);fill:none;stroke-width:1.8;stroke-linecap:round;stroke-linejoin:round;}
  .beneficio h3{font-size:15px;font-weight:700;color:var(--g2);margin-bottom:7px;}
  .beneficio p{font-size:13.5px;color:var(--textm);line-height:1.66;font-weight:300;}

/* ── QUÉ HACE · bloques alternados ── */
  .quehace{background:white;border-radius:32px;margin:0 10px 12px;}
  .bloque{display:grid;grid-template-columns:1fr 1fr;gap:clamp(24px,4vw,56px);align-items:center;padding:28px 0;border-top:1px solid var(--cream2);}
  .bloque:first-of-type{border-top:0;padding-top:26px;}
  /* Alterna el lado del visual. `order` y no `direction` para no invertir el
     sentido de lectura del texto. */
  .bloque-inv .bloque-texto{order:2;}
  .bloque-inv .bloque-visual{order:1;}
  .bloque-texto h3{font-size:clamp(17px,2.4vw,21px);font-weight:700;color:var(--g3);margin-bottom:10px;letter-spacing:-.2px;}
  .bloque-texto > p{font-size:14.5px;color:var(--textm);line-height:1.78;font-weight:300;margin-bottom:14px;}
  .nota-bloque{font-size:13px;color:var(--texts);line-height:1.66;font-style:italic;border-left:2px solid var(--cream3);padding-left:12px;margin-top:14px;}

  .lista-chk{list-style:none;display:flex;flex-direction:column;gap:9px;}
  .lista-chk li{position:relative;padding-left:26px;font-size:13.5px;color:var(--textm);line-height:1.62;font-weight:300;}
  .lista-chk li::before{content:'';position:absolute;left:2px;top:6px;width:11px;height:6px;border-left:2px solid var(--gold);border-bottom:2px solid var(--gold);transform:rotate(-45deg);}
  .lista-chk strong{color:var(--g2);font-weight:600;}

  /* Capturas reales del producto. NO se les impone una proporción: son pantallas
     de la aplicación y las hay verticales (el panel de parcelas) y muy apaisadas
     (los gráficos de meteorología). Forzar un 16/10 a todas obligaría a recortar
     justo lo que hace falta ver. Lo que sí se unifica es el ALTO máximo, que es
     lo que mantiene el ritmo de la sección.
     El `max-height` va en la imagen y no en el contenedor para que el marco
     —borde y sombra— se ajuste a la imagen y no quede aire dentro. */
  .bloque-visual{margin:0;display:flex;justify-content:center;}

  .bloque-visual img{display:block;max-width:100%;max-height:420px;width:auto;height:auto;
    border-radius:16px;border:1px solid var(--cream3);
    box-shadow:0 14px 34px rgba(74,16,32,.13);background:var(--cream);}

  /* Bloques con VARIAS capturas: ancho completo y las imágenes APILADAS, no en
     fila. Puestas una al lado de otra cabían a 380px y no se leía nada, ni
     siquiera en pantalla grande: una captura de interfaz necesita ancho para
     que se distinga lo que enseña. Apiladas, cada una usa el ancho útil entero
     y el bloque crece hacia abajo, que es barato. */
  .bloque-ancho{grid-template-columns:1fr;}
  .bloque-ancho .bloque-texto{max-width:820px;}
  .bloque-visual-multi{flex-direction:column;align-items:center;gap:14px;width:100%;}
  /* Tope de alto también aquí: sin él, las dos capturas VERTICALES (el panel y
     la página del semáforo) pasaban de 1000px cada una y se llevaban por
     delante dos pantallas enteras de scroll. A 780 siguen siendo legibles
     —630px de ancho— y la sección deja de ser interminable. */
  .bloque-visual-multi img{max-height:780px;width:min(100%,860px);}


  .quehace-mas{margin-top:28px;text-align:center;}
  .enlace-mas{display:inline-block;color:var(--g2);font-size:14px;font-weight:700;text-decoration:none;border-bottom:2px solid var(--gold);padding-bottom:2px;transition:color .2s,border-color .2s;}
  .enlace-mas:hover{color:var(--g1);border-color:var(--g1);}

/* ── PARA QUIÉN ── */
  .paraquien{background:var(--cream2);border-radius:32px;margin:0 10px 12px;}
  .perfiles{display:grid;grid-template-columns:repeat(auto-fit,minmax(230px,1fr));gap:12px;margin-top:26px;}
  .perfil{background:var(--cream);border:1px solid var(--cream3);border-radius:20px;padding:22px 20px;}
  .perfil-icon{width:42px;height:42px;border-radius:13px;background:rgba(196,162,101,.18);display:flex;align-items:center;justify-content:center;margin-bottom:14px;}
  /* `color` además de `stroke` porque los ojos y el hocico de la vaca son los
     únicos puntos RELLENOS de todos los iconos, y usan `fill="currentColor"`.
     Sin esta línea, `currentColor` resolvía al color de texto heredado de la
     tarjeta y salían casi negros, desentonando con el granate del trazo. */
  .perfil-icon svg{width:22px;height:22px;stroke:var(--g2);color:var(--g2);fill:none;stroke-width:1.7;stroke-linecap:round;stroke-linejoin:round;}
  .perfil h3{font-size:15px;font-weight:700;color:var(--g2);margin-bottom:7px;}
  .perfil p{font-size:13.5px;color:var(--textm);line-height:1.66;font-weight:300;}
  .perfil strong{color:var(--g2);font-weight:600;}
  /* La salvedad de la revisita del satélite va VISIBLE, no en letra pequeña
     escondida: es la diferencia entre informar y sobreprometer. */
  .perfil-nota{margin-top:10px;font-size:12.5px;color:var(--texts);line-height:1.58;border-top:1px solid var(--cream3);padding-top:10px;}

/* ── PROBLEMA ── */
  .prob{background:var(--cream2);border-radius:32px;margin:0 10px 12px;}
  .pain-grid{display:grid;grid-template-columns:repeat(auto-fit,minmax(200px,1fr));gap:12px;margin-top:24px;}
  .pain-card{background:var(--cream);border-radius:20px;padding:20px;border:1px solid var(--cream3);}
  .pain-icon{width:42px;height:42px;border-radius:13px;background:rgba(123,30,42,.1);display:flex;align-items:center;justify-content:center;margin-bottom:14px;}
  .pain-icon svg{width:22px;height:22px;stroke:var(--g2);fill:none;stroke-width:1.8;stroke-linecap:round;stroke-linejoin:round;}
  .pain-card h3{font-size:14px;font-weight:600;color:var(--g2);margin-bottom:5px;}
  .pain-card p{font-size:13px;color:var(--texts);line-height:1.6;}

  /* ── COMO FUNCIONA ── */
  .como{background:white;border-radius:32px;margin:0 10px 12px;padding:48px 32px;}
  .roadmap{display:flex;align-items:flex-start;gap:0;margin-top:36px;}
  .rm-step{flex:1;display:flex;flex-direction:column;align-items:center;text-align:center;}
  .rm-icon-wrap{width:72px;height:72px;border-radius:50%;background:var(--cream2);border:2px solid var(--cream3);display:flex;align-items:center;justify-content:center;margin-bottom:16px;position:relative;}
  .rm-icon-wrap .num{position:absolute;top:-6px;right:-6px;width:24px;height:24px;border-radius:50%;background:var(--g2);color:var(--cream);font-size:11px;font-weight:700;display:flex;align-items:center;justify-content:center;}
  .rm-icon-wrap svg{width:28px;height:28px;stroke:var(--g2);fill:none;stroke-width:1.7;stroke-linecap:round;stroke-linejoin:round;}


  .rm-tag{display:inline-block;background:rgba(123,30,42,.08);color:var(--g2);font-size:10px;font-weight:600;letter-spacing:1px;text-transform:uppercase;padding:4px 12px;border-radius:100px;margin-bottom:12px;}
  .rm-step h3{font-size:15px;font-weight:600;color:var(--g3);margin-bottom:7px;}
  .rm-step p{font-size:13px;color:var(--texts);line-height:1.62;padding:0 6px;}

  .rm-connector {
    display: flex;
    align-items: center;
    justify-content: center;
    width: 40px;
    height: 40px;
    border-radius: 50%;
    background-color: var(--cream2);
    color: var(--gold);
    transition: all 0.2s ease;
    margin: 0 16px;
    transform: translateY(50px);
  }

  .rm-connector:hover {
    background-color: var(--cream3);
    color: var(--g2);
  }

  .rm-arrow {
    width: 20px;
    height: 20px;
  }

  /* Pantallas estrechas: flecha hacia abajo */
}

@layer componentes {
  @media (max-width: 640px) {
    .rm-connector {
      margin: 6px auto;
      width: 40px;
      height: 40px;
      border-radius: 50px;
      transform: none;
    }
  
    .rm-arrow {
      transform: rotate(90deg);
    }
  }
}

@layer componentes {


  /* ── ROADMAP ──
     Fondo oscuro porque cierra el bloque de producto antes de precios, igual
     que hacía la antigua sección de servicios. */
  .roadmap-sec{background:var(--g3);border-radius:32px;margin:0 10px 12px;}
  .roadmap-sec h2{color:var(--cream);}
  .roadmap-sec .lead{color:rgba(250,246,239,.72);}
  .ast{color:var(--gold2);font-weight:700;}

  .rm-destacado{margin-top:26px;background:rgba(196,162,101,.13);border:1px solid rgba(196,162,101,.34);border-radius:20px;padding:22px 24px;}
  .rm-destacado h3{font-size:17px;font-weight:700;color:var(--gold2);margin-bottom:8px;}
  .rm-destacado p{font-size:14px;color:rgba(250,246,239,.82);line-height:1.72;font-weight:300;}

  .rm-grid{display:grid;grid-template-columns:repeat(auto-fit,minmax(240px,1fr));gap:12px;margin-top:14px;}
  .rm-item{background:rgba(250,246,239,.07);border:1px solid rgba(196,162,101,.2);border-radius:18px;padding:18px 18px 20px;}
  .rm-estado{display:inline-block;font-size:10px;letter-spacing:1.4px;text-transform:uppercase;font-weight:600;color:var(--gold2);background:rgba(196,162,101,.16);border-radius:100px;padding:4px 11px;margin-bottom:10px;}
  /* "En construcción" es un estado más avanzado que "En diseño" o "Previsto":
     se distingue con color, no solo con la palabra, para que se lea de un
     vistazo cuál está más cerca. */
  .rm-pronto .rm-estado{color:var(--g3);background:var(--gold2);}
  .rm-item h4{font-size:14.5px;font-weight:700;color:var(--cream);margin-bottom:7px;}
  .rm-item p{font-size:13px;color:rgba(250,246,239,.68);line-height:1.66;font-weight:300;}

  .rm-medida{margin-top:20px;font-size:14px;color:rgba(250,246,239,.78);line-height:1.72;font-weight:300;text-align:center;max-width:680px;margin-left:auto;margin-right:auto;}
  .rm-medida strong{color:var(--gold2);font-weight:600;}

/* ── PRECIOS ── */
  .precios{background:var(--cream2);border-radius:32px;margin:0 10px 12px;}
  .precios-grid{display:grid;grid-template-columns:repeat(auto-fit,minmax(240px,1fr));gap:16px;margin-top:28px;}
  .precio-card{background:white;border-radius:24px;padding:28px 24px;border:1px solid var(--cream3);display:flex;flex-direction:column;gap:0;position:relative;}
  .precio-card.destacado{background:var(--g3);border-color:var(--g2);}
  .precio-badge{position:absolute;top:-12px;left:50%;transform:translateX(-50%);background:var(--gold);color:var(--g3);font-size:10px;font-weight:700;letter-spacing:1px;text-transform:uppercase;padding:4px 14px;border-radius:100px;white-space:nowrap;}
  .precio-plan{font-size:11px;font-weight:700;letter-spacing:2px;text-transform:uppercase;color:var(--gold);margin-bottom:8px;}
  .precio-card.destacado .precio-plan{color:var(--gold2);}
  .precio-nombre{font-size:22px;font-weight:700;color:var(--g3);margin-bottom:4px;}
  .precio-card.destacado .precio-nombre{color:var(--cream);}
  .precio-desde{font-size:13px;color:var(--texts);margin-bottom:6px;}
  .precio-card.destacado .precio-desde{color:rgba(250,246,239,.55);}
  .precio-principal{font-size:32px;font-weight:700;color:var(--g2);line-height:1;margin-bottom:4px;}
  .precio-card.destacado .precio-principal{color:var(--gold);}
  .precio-sub{font-size:12px;color:var(--texts);margin-bottom:20px;}
  .precio-card.destacado .precio-sub{color:rgba(250,246,239,.5);}
  .precio-sep{height:1px;background:var(--cream3);margin-bottom:20px;}
  .precio-card.destacado .precio-sep{background:rgba(250,246,239,.12);}
  .precio-features{list-style:none;display:flex;flex-direction:column;gap:10px;margin-bottom:24px;flex:1;}
  .precio-features li{font-size:13px;color:var(--textm);display:flex;gap:8px;align-items:flex-start;line-height:1.5;}
  .precio-card.destacado .precio-features li{color:rgba(250,246,239,.75);}
  .precio-features li svg{flex-shrink:0;margin-top:2px;width:15px;height:15px;stroke:var(--g2);fill:none;stroke-width:2.5;stroke-linecap:round;stroke-linejoin:round;}
  .precio-card.destacado .precio-features li svg{stroke:var(--gold);}
  .btn-precio{display:block;text-align:center;padding:13px 20px;border-radius:50px;font-size:13px;font-weight:700;text-decoration:none;border:none;cursor:pointer;font-family:var(--font);transition:transform .15s;}
  .btn-precio-outline{background:transparent;color:var(--g2);border:1.5px solid var(--g2);}
  .btn-precio-gold{background:var(--gold);color:var(--g3);}
  .btn-precio:hover{transform:translateY(-3px); background:var(--cream2)}

  /* Asterisco de "en desarrollo" y su nota. El asterisco es dorado para que se
     vea, no para que se esconda: marcar una promesa futura solo sirve si el
     lector la percibe antes de decidir. */
  .ast-p{color:var(--g1);font-weight:800;margin-left:2px;}
  .precios-nota{margin-top:20px;font-size:12.5px;color:var(--texts);line-height:1.66;max-width:860px;margin-left:auto;margin-right:auto;text-align:center;}
  .precios-nota strong{color:var(--textm);font-weight:600;}
  .precios-nota a{color:var(--g2);font-weight:600;}

/* ── SOBRE ── */
  .sobre{background:var(--cream2);border-radius:32px;margin:0 10px 12px;}
  .sobre-grid{display:grid;grid-template-columns:1fr 1fr;gap:24px;margin-top:24px;}
  .vals{display:flex;flex-direction:column;gap:10px;}
  .val{background:white;border-radius:16px;padding:14px 16px;display:flex;gap:11px;align-items:flex-start;}
  .vdot{width:8px;height:8px;min-width:8px;border-radius:50%;background:var(--g2);margin-top:6px;}
  .val strong{display:block;font-size:13px;font-weight:600;color:var(--g3);margin-bottom:3px;}
  .val p{font-size:12px;color:var(--texts);line-height:1.58;}
  .prop-col{display:flex;flex-direction:column;gap:12px;}
  .mv-box{background:var(--g3);border-radius:22px;padding:22px;}
  .mv-box .lbl{color:var(--gold);margin-bottom:10px;}
  .mv-box p{font-size:15px;color:rgba(250,246,239,.85);line-height:1.82;font-weight:300;}
  .mv-sep{height:1px;background:rgba(196,162,101,.2);margin:16px 0;}
  .prop-box{background:var(--g2);border-radius:22px;padding:20px;border:1px solid rgba(196,162,101,.25);}
  .prop-box .lbl{color:var(--gold2);margin-bottom:8px;}
  .prop-box p{font-size:15px;color:var(--cream);line-height:1.65;font-weight:600;}

  /* ── PÁGINA /funcionalidades ──
     Catálogo largo. El ritmo lo marca la alternancia de fondo entre secciones
     (crema / crema2 / granate), que es el mismo recurso que usa la home. */
  .func-intro{background:var(--cream2);border-radius:32px;margin:0 10px 12px;}
  .func{background:white;border-radius:32px;margin:0 10px 12px;}
  .func-alt{background:var(--cream2);}
  .func-oscura{background:var(--g3);}
  .func-h{font-size:clamp(19px,2.8vw,25px);font-weight:700;color:var(--g3);margin-bottom:12px;letter-spacing:-.3px;}
  .func-oscura .func-h{color:var(--cream);}
  .func-lead{font-size:15px;color:var(--textm);line-height:1.78;font-weight:300;margin-bottom:24px;max-width:820px;}
  .func-oscura .func-lead{color:rgba(250,246,239,.8);}
  .func h4{font-size:14.5px;font-weight:700;color:var(--g2);margin:20px 0 10px;}
  .func-cols > div > h4:first-child{margin-top:0;}
  .func p{font-size:13.5px;color:var(--textm);line-height:1.72;font-weight:300;margin-bottom:10px;}
  .func a{color:var(--g2);font-weight:600;}
  /* Sobre el fondo granate de `.func-oscura`, el granate de `.func a` queda
     ilegible. Descendiente y no `.func-oscura{}` a secas: si fueran dos reglas
     de una clase mandaría el orden del fichero, que es justo lo que las capas
     vienen a desterrar. (`.func h4` tenía el mismo problema, pero hoy no hay
     ningún h4 dentro de una sección oscura; se añadirá el día que lo haya, no
     antes: una regla sin elemento al que aplicarse es peso muerto.) */
  .func-oscura a{color:var(--gold2);}

  .func-cols{display:grid;grid-template-columns:repeat(auto-fit,minmax(300px,1fr));gap:clamp(20px,3vw,44px);align-items:start;}

  /* Índice de la página. La numeración va en un ::before y no en el marcador
     nativo del <ol>, para poder darle el dorado y el ancho fijo que alinea los
     títulos en columna. Sigue siendo un <ol>: el orden importa y un lector de
     pantalla lo anuncia como lista de diez elementos. */
  .indice{margin-top:26px;border-top:1px solid var(--cream3);padding-top:20px;}
  .indice-lbl{font-size:11px !important;letter-spacing:2px;text-transform:uppercase;color:var(--texts) !important;font-weight:600;margin-bottom:14px !important;}
  .indice ol{list-style:none;columns:2;column-gap:44px;counter-reset:indice;}
  .indice li{counter-increment:indice;break-inside:avoid;margin-bottom:9px;}
  .indice li::before{content:counter(indice,decimal-leading-zero);color:var(--gold);font-size:11px;font-weight:700;margin-right:10px;font-variant-numeric:tabular-nums;}
  .indice a{font-size:14px;color:var(--g3);font-weight:500;text-decoration:none;border-bottom:1px solid transparent;transition:border-color .2s,color .2s;}
  .indice a:hover{color:var(--g2);border-bottom-color:var(--gold);}

  .func-nota{font-size:12.5px !important;color:var(--texts) !important;line-height:1.62 !important;border-left:2px solid var(--cream3);padding-left:12px;margin-top:14px;}
  .func-oscura .func-nota{color:rgba(250,246,239,.6) !important;border-color:rgba(196,162,101,.3);}

  .func-caja{background:var(--cream2);border:1px solid var(--cream3);border-radius:18px;padding:18px 20px;}
  .func-caja strong{display:block;font-size:14.5px;color:var(--g2);margin-bottom:6px;}
  .func-caja-o{background:rgba(250,246,239,.07);border:1px solid rgba(196,162,101,.22);border-radius:18px;padding:18px 20px;}
  .func-caja-o strong{display:block;font-size:14.5px;color:var(--gold2);margin-bottom:6px;}
  .func-caja-o p{color:rgba(250,246,239,.72) !important;margin-bottom:0 !important;}
  /* El margen inferior a 0 se puso para que la caja no llevara aire sobrante
     debajo del único párrafo. Con dos párrafos los dejaba pegados, así que la
     separación la pone el segundo por arriba y el cierre de la caja se respeta. */
  .func-caja-o p + p{margin-top:10px;}

  /* Las tablas anchas se desplazan DENTRO de su caja; la página nunca se
     desplaza en horizontal. */
  .tabla-scroll{overflow-x:auto;margin:8px 0 6px;-webkit-overflow-scrolling:touch;}
  .tabla-indices,.tabla-planes{width:100%;border-collapse:collapse;min-width:560px;font-size:13px;}
  .tabla-indices caption,.tabla-planes caption{text-align:left;font-size:12px;letter-spacing:1.2px;text-transform:uppercase;color:var(--texts);font-weight:600;padding-bottom:10px;}
  .tabla-indices th,.tabla-planes th{text-align:left;font-size:11px;letter-spacing:1.2px;text-transform:uppercase;color:var(--gold);font-weight:700;padding:10px 12px;border-bottom:2px solid var(--cream3);}
  .tabla-indices td,.tabla-planes td{padding:11px 12px;border-bottom:1px solid var(--cream2);color:var(--textm);line-height:1.6;font-weight:300;vertical-align:top;}
  .tabla-indices tr:last-child td,.tabla-planes tr:last-child td{border-bottom:0;}
  .tabla-indices strong,.tabla-planes strong{color:var(--g2);font-weight:700;}
  .tabla-planes td.si{color:var(--g1);font-weight:700;}
  .tabla-planes td.no{color:var(--texts);}

  /* Lo que todavía no hace: cruz en vez de check. El mismo componente con el
     signo cambiado se leería como lista de funciones; el color y el aspa
     evitan el malentendido. */
  .lista-no{list-style:none;display:flex;flex-direction:column;gap:11px;margin:6px 0 4px;}
  .lista-no li{position:relative;padding-left:28px;font-size:13.5px;color:var(--textm);line-height:1.68;font-weight:300;}
  .lista-no li::before{content:'';position:absolute;left:4px;top:7px;width:11px;height:11px;
    background:linear-gradient(45deg,transparent 44%,var(--texts) 44%,var(--texts) 56%,transparent 56%),
               linear-gradient(-45deg,transparent 44%,var(--texts) 44%,var(--texts) 56%,transparent 56%);}
  .lista-no strong{color:var(--g2);font-weight:600;}

/* ── PRECIOS · conmutador y tarjetas ──
     Estas clases sustituyen a los 18 `style=` que llevaba la sección. No es
     solo orden: mientras haya atributos `style=` en el marcado no se puede
     quitar 'unsafe-inline' de `style-src` en la CSP. */
  .switch-fila{display:flex;align-items:center;justify-content:center;gap:16px;margin:32px 0;}
  .switch-lbl{font-size:14px;font-weight:700;color:var(--text);}
  .switch-ahorro{font-size:11px;color:var(--gold);font-weight:900;}
  .switch{width:60px;height:32px;background:var(--g2);border-radius:50px;cursor:pointer;position:relative;transition:background-color .2s;}
  .switch:focus-visible{outline:3px solid var(--gold);outline-offset:3px;}
  .switch-bola{width:28px;height:28px;background:var(--cream);border-radius:50%;position:absolute;top:2px;left:2px;transition:left .2s;}
  /* El estado lo lleva una clase, no `style.left` desde el script: así el
     aspecto vive entero en la hoja y el JS solo dice en qué estado está. */
  .switch-on .switch-bola{left:32px;}

  .precio-fila{display:flex;align-items:center;gap:8px;margin-bottom:6px;}
  .precio-tachado{font-size:18px;color:rgba(42,26,16,.3);text-decoration:line-through;}
  .precio-tachado-osc{color:rgba(250,246,239,.3);}
  .precio-principal small{font-size:14px;font-weight:400;}
  .precio-limite{font-size:14px;color:var(--gold);font-weight:800;margin-bottom:20px;}
  .precio-limite-osc{color:var(--gold2);}

/* ── PRECIOS · resumen en la home ── */
  .precios-teaser{background:var(--cream2);border-radius:32px;margin:0 10px 12px;text-align:center;}
  .precios-teaser .lead{max-width:720px;margin:0 auto;}
  .teaser-cifras{display:grid;grid-template-columns:repeat(auto-fit,minmax(210px,1fr));gap:12px;margin:26px auto 0;max-width:860px;}
  .cifra{background:var(--cream);border:1px solid var(--cream3);border-radius:20px;padding:20px 18px;display:flex;flex-direction:column;gap:4px;}
  .cifra-lbl{font-size:11px;letter-spacing:1.4px;text-transform:uppercase;color:var(--texts);font-weight:600;}
  .cifra-num{font-size:30px;font-weight:700;color:var(--g2);letter-spacing:-.6px;}
  .cifra-num small{font-size:13px;font-weight:400;color:var(--texts);}
  .cifra-coop .cifra-num{font-size:24px;}
  .cifra-pie{font-size:12.5px;color:var(--textm);font-weight:300;}
  .teaser-lanzamiento{margin-top:18px;font-size:13.5px;color:var(--textm);font-weight:300;}
  .teaser-lanzamiento strong{color:var(--g2);font-weight:600;}

/* Misión en recuadro. Es un <blockquote> y no un <div>: es una declaración
     citable de la empresa, y así un lector de pantalla la anuncia como cita
     destacada en vez de como un párrafo más. La barra dorada de la izquierda
     hace el trabajo visual sin encerrarla en una caja. */
  .mision{margin:4px 0 26px;border-left:3px solid var(--gold);padding:2px 0 2px 22px;max-width:820px;}
  .mision-lbl{display:block;font-size:11px;letter-spacing:2.2px;text-transform:uppercase;color:var(--gold);font-weight:600;margin-bottom:8px;}
  .mision p{font-size:clamp(15px,2.1vw,17px);color:var(--g3);line-height:1.72;font-weight:300;}
  .mision strong{font-weight:600;}

/* Visión y propósito: caja oscura, para que contrasten con la lista de valores
     y con la ficha del fundador sin competir con la misión. */
  .vp-caja{background:var(--g3);border-radius:22px;padding:22px 24px;margin-bottom:12px;}
  .vp-caja p{font-size:13.5px;color:rgba(250,246,239,.8);line-height:1.7;font-weight:300;}
  .vp-caja .lbl-oscuro{color:var(--gold2);}
  .vp-sep{height:1px;background:rgba(196,162,101,.26);margin:16px 0;}

/* Ficha del fundador. Antes iba con `style=` en línea y la foto se servía a
     80px desde un original de 600 — ahora tiene clases y un tamaño digno. */
  .fundador{background:var(--cream);border:1px solid var(--cream3);border-radius:22px;padding:22px 24px;align-self:start;}
  .lbl-oscuro{color:var(--g2);}
  .fundador-fila{display:flex;gap:16px;align-items:flex-start;}
  .fundador-foto{width:104px;height:104px;border-radius:14px;object-fit:cover;flex-shrink:0;}
  .fundador-nombre{font-size:14.5px;font-weight:700;color:var(--g3);margin-bottom:6px;}
  .fundador-nombre a{font-size:12px;font-weight:500;color:var(--g2);margin-left:8px;}
  .fundador-bio{font-size:13px;color:var(--textm);line-height:1.62;font-weight:300;}

/* ── CTA FINAL + FORMULARIO AMPLIADO ── */
  .cta-final{border-radius:32px;margin:0 10px 12px;padding:56px 40px;position:relative;overflow:hidden;}
  .cta-bg{position:absolute;inset:0;background:linear-gradient(155deg,rgba(74,16,32,.91) 0%,rgba(100,22,36,.85) 50%,rgba(74,16,32,.82) 100%),image-set(url('/data/fondo-cta.webp') type('image/webp'), url('/data/fondo-cta.jpg') type('image/jpeg')) center/cover no-repeat;border-radius:32px;}
  .cta-inner{position:relative;z-index:1;}
  .cta-pill{display:inline-block;background:rgba(232,201,138,.14);border:1px solid rgba(232,201,138,.38);color:var(--gold2);font-size:11px;letter-spacing:2px;text-transform:uppercase;padding:6px 18px;border-radius:100px;margin-bottom:18px;font-weight:500;}
  .cta-final h2{color:var(--cream);font-size:clamp(24px,4vw,34px);margin-bottom:14px;letter-spacing:-.4px;text-align:center;}
  .cta-lead{color:rgba(250,246,239,.72);font-size:16px;line-height:1.8;max-width:500px;margin:0 auto 32px;font-weight:300;text-align:center;}

  /* formulario ampliado */
  .form-grid{display:grid;grid-template-columns:1fr 1fr;gap:12px;margin-bottom:12px;}
  .form-full{grid-column:1/-1;}
  .field-wrap{display:flex;flex-direction:column;gap:5px;}
  .field-label{font-size:12px;color:rgba(250,246,239,.65);font-weight:500;letter-spacing:.3px;}
  .field-label .opt{font-size:10px;color:rgba(250,246,239,.35);font-weight:400;}
  .field-input{padding:12px 18px;border-radius:14px;border:1.5px solid rgba(250,246,239,.2);background:rgba(250,246,239,.1);color:var(--cream);font-size:14px;font-family:var(--font);outline:none;transition:border-color .2s;width:100%;}
  .field-input:focus{border-color:rgba(196,162,101,.6);}
  .field-input::placeholder{color:rgba(250,246,239,.38);}
  .field-input.required{border-color:rgba(250,246,239,.35);}

  /* mapa */
  .map-wrap{border-radius:14px;overflow:hidden;border:1.5px solid rgba(250,246,239,.2);margin-bottom:4px;}
  /* El verde apagado del mapa es el color de espera mientras Leaflet carga las
     teselas; no pertenece a la paleta de marca a propósito, para que no parezca
     un bloque roto de la página. */
  #parcela-map{height:400px;width:100%;background:#2a3a2a;}
  .map-info{font-size:11px;color:rgba(250,246,239,.45);margin-top:6px;display:flex;justify-content:space-between;align-items:center;}
  .map-area{font-size:12px;color:var(--gold2);font-weight:600;}
  .map-warn{font-size:11px;color:var(--error-fuerte);display:none;}

  /* file upload */
  .file-drop{border:1.5px dashed rgba(250,246,239,.25);border-radius:14px;padding:16px;text-align:center;cursor:pointer;transition:border-color .2s;background:rgba(250,246,239,.05);}
  .file-drop:hover{border-color:rgba(196,162,101,.5);}
  .file-drop input{display:none;}
  .file-drop p{font-size:13px;color:rgba(250,246,239,.45);}
  .file-drop .file-name{font-size:12px;color:var(--gold2);margin-top:4px;display:none;}

  /* lopd — primera capa informativa (art. 13 RGPD) + consentimiento expreso */
  .lopd{font-size:11px;color:rgba(250,246,239,.38);line-height:1.6;margin-bottom:14px;text-align:center;}
  .lopd a{color:rgba(196,162,101,.7);text-decoration:underline;}
  .lopd-tabla{max-width:620px;margin:0 auto 12px;text-align:left;display:grid;grid-template-columns:auto 1fr;gap:2px 12px;}
  .lopd-tabla dt{color:rgba(250,246,239,.5);font-weight:600;}
  .lopd-tabla dd{margin:0;}
  .consent{display:flex;align-items:flex-start;gap:10px;justify-content:center;max-width:620px;margin:0 auto 20px;font-size:12px;color:rgba(250,246,239,.62);line-height:1.55;text-align:left;}
  .consent input[type=checkbox]{appearance:none;-webkit-appearance:none;flex-shrink:0;width:18px;height:18px;margin:1px 0 0;border:1.5px solid rgba(196,162,101,.6);border-radius:5px;background:transparent;cursor:pointer;position:relative;transition:background .15s,border-color .15s;}
  .consent input[type=checkbox]:checked{background:var(--gold);border-color:var(--gold);}
  .consent input[type=checkbox]:checked::after{content:"";position:absolute;left:5px;top:1px;width:5px;height:10px;border:solid #4A1020;border-width:0 2px 2px 0;transform:rotate(45deg);}
  .consent input[type=checkbox]:focus-visible{outline:2px solid var(--gold2);outline-offset:2px;}
  .consent label{cursor:pointer;}
  .consent a{color:rgba(196,162,101,.85);text-decoration:underline;}
  .consent.consent-error input[type=checkbox]{border-color:var(--error);box-shadow:0 0 0 3px rgba(232,163,173,.18);}
  .consent .req{color:var(--gold2);}

  /* botón submit */
  .btn-submit-wrap{text-align:center;margin-bottom:20px;}
  .btn-white{background:var(--cream);color:var(--g3);padding:15px 36px;border:none;border-radius:50px;font-size:15px;font-weight:700;cursor:pointer;font-family:var(--font);white-space:nowrap;letter-spacing:.2px;transition:transform .15s;}
  .btn-white:hover{transform:translateY(-3px);background:var(--cream2)}
  .checks{display:flex;align-items:center;justify-content:center;gap:24px;flex-wrap:wrap;}
  .chk{color:rgba(250,246,239,.45);font-size:12px;display:flex;align-items:center;gap:6px;}
  .chk svg{width:15px;height:15px;stroke:var(--gold);fill:none;stroke-width:2;stroke-linecap:round;stroke-linejoin:round;}

  /* ── FOOTER ── */
  footer{background:var(--g3);border-radius:20px 20px 0 0;padding:32px 40px;display:flex;align-items:center;justify-content:space-between;flex-wrap:wrap;gap:16px;margin-top:12px;}
  .fb{color:var(--cream);font-size:20px;font-weight:700;letter-spacing:-.2px;}
  .fb span{color:rgba(250,246,239,.35);font-size:12px;display:block;letter-spacing:1.5px;text-transform:uppercase;margin-top:3px;font-weight:400;}
  footer p{color:rgba(250,246,239,.45);font-size:13px;text-align:right;line-height:1.9;}
  footer a{color:rgba(196,162,101,.75);text-decoration:none;}
  footer a:hover{color:var(--gold2);}
  /* enlaces legales: banda propia a todo el ancho, contraste suficiente para que
     el acceso sea "fácil y directo" (art. 10 LSSI-CE) */
  .legal-links{flex-basis:100%;order:3;display:flex;flex-wrap:wrap;justify-content:center;gap:8px 22px;padding-top:20px;margin-top:4px;border-top:1px solid rgba(250,246,239,.10);}
  .legal-links a{color:rgba(250,246,239,.62);font-size:12.5px;text-decoration:none;}
  .legal-links a:hover{color:var(--gold2);text-decoration:underline;}
}

@layer layout {
  /* El padding móvil de la sección genérica. Va en `layout` y no junto al resto
     del bloque RESPONSIVE porque lo que decide la capa es a QUÉ apunta la regla:
     `.sec` es el andamio de sección, así que cualquier componente que además
     lleve `.sec` —el hero, sin ir más lejos— debe poder pisarlo. */
  @media(max-width:640px){
    .sec{padding:36px 20px;}
  }
}

@layer componentes {
  /* ── RESPONSIVE ── */
  /* 600px de texto + 277 de teléfono + 28 de hueco mínimo + 64 de padding no
     caben por debajo de ~960. Ahí el hero se apila y el teléfono queda debajo de
     "3 meses gratis · Sin tarjeta · Sin permanencia · Primer informe en 3 horas",
     que es lo último de .hero-content. */
  @media(max-width:960px){
    .hero{flex-direction:column;gap:0;}
    .hero-content{flex:0 1 auto;}
    .hero-demo{width:100%;margin-top:34px;}
    /* Apilado manda el ancho, no el alto: aquí el hero ya puede crecer hacia
       abajo y lo que aprieta es la pantalla estrecha. */
    .hero-phone video{height:auto;width:min(238px,64vw);}
  }

  @media(max-width:640px){
    /* Secciones nuevas de la v0.2: en móvil todo a una columna. El diagrama de
       flujo apila las tres fuentes, así que las flechas también. */
    .bloque{grid-template-columns:1fr;gap:20px;padding:26px 0;}
    /* Con una sola columna, el visual va SIEMPRE debajo del texto: si no, en
       los bloques invertidos aparecería antes de saber de qué habla. */
    .bloque-inv .bloque-texto{order:1;}
    .bloque-inv .bloque-visual{order:2;}
    .quees,.quehace,.paraquien{margin:0 0 12px;border-radius:22px;}
    .func-intro,.func{margin:0 0 12px;border-radius:22px;}
    .func-cols{grid-template-columns:1fr;gap:18px;}
    .indice ol{columns:1;}

    .w > nav{border-radius:0;padding:12px 18px;}
    .navl{gap:10px;}
    .navl a:not(.nav-cta){display:none;}
    .nav-cta{display:inline-block;font-size:12px;padding:7px 14px;}
    .hero{padding:52px 22px 64px;border-radius:32px;}
    .prob,.como,.servicios,.precios,.sobre,.cta-final{margin:0 0 12px;border-radius:22px;}
    .como,.sobre,.cta-final{padding:36px 20px;}
    .roadmap{flex-direction:column;align-items:stretch;gap:0;}
    .rm-step{flex-direction:row;text-align:left;gap:18px;align-items:flex-start;padding:18px 0;}
    .rm-step .rm-icon-wrap{flex-shrink:0;margin-bottom:0;}
    .rm-step-text{flex:1;padding-top:4px;}
    .rm-connector{flex-direction:row;width:100%;padding:0 0 0 36px;height:28px;padding-top:0;}
    .sobre-grid{grid-template-columns:1fr;}
    .cta-final{padding:40px 18px;}
    .form-grid{grid-template-columns:1fr;}
    footer{padding:24px 20px;}
    footer p{text-align:left;font-size:13px;}
    .fb{font-size:18px;}
  }
}
