/* Vaucai — shared styles (landing + legal pages).
   HTML/CSS/JS vanilla servido por nginx, sin build step (ADR-008: la web es
   el funnel a Telegram, NO una PWA/Next.js). Los tokens de diseño viven en
   :root (ADR-007) = fuente única de color, superficie, tipografía y motion. */

* { margin: 0; padding: 0; box-sizing: border-box; }

/* WEB-02 (Bloque G) — foco visible accesible (WCAG 2.4.7 / EAA).
   Patrón moderno: se quita el outline por defecto (de bajo contraste sobre el
   tema oscuro) y se da un anillo CLARO solo en navegación por TECLADO
   (`:focus-visible`). El ratón no muestra nada (no cambia para quien hace
   click); quien tabula ve SIEMPRE dónde está — botones, enlaces, inputs. */
:focus { outline: none; }
:focus-visible {
    outline: 2px solid var(--accent-hover, #3399FF);
    outline-offset: 2px;
    border-radius: 4px;
}

/* iOS Safari rubber-band overscroll expone el fondo del <html> por
   debajo y por encima del body. background var(--bg) elimina el flash
   blanco bajo el footer negro. overscroll-behavior: none mata la
   animacion de rebote en si misma (Safari iOS 16+, no-op en anteriores).
   color-scheme asegura que scrollbar nativa y form controls hereden
   tema oscuro sin parpadeo. */
html {
    background: var(--bg);
    color-scheme: dark;
    overscroll-behavior: none;
    /* La web se adapta SIEMPRE al ancho del móvil: nada de scroll/arrastre
       horizontal. `clip` (preferido) no crea contexto de scroll —preserva
       position:sticky—; `hidden` queda de fallback para navegadores viejos. */
    overflow-x: hidden;
    overflow-x: clip;
}

:root {
    --bg: #0a0a0a;
    --bg-deep: #050506;
    --surface: #18181b;
    --surface-elevated: #111317;
    --surface-soft: #16181D;
    --border: #27272a;
    --border-soft: #1E2127;
    --border-light: #2A2D35;
    --fg: #fafafa;
    --fg-soft: #E5E5E7;
    --muted: #a1a1aa;
    --muted-soft: #8A909C;
    --accent: #007FFF;
    --accent-hover: #3399FF;
    --error: #ef4444;

    /* Aliases + new tokens introducidos en el brief de la landing narrativa.
       Las páginas legales siguen usando los nombres originales. */
    --void: var(--bg);
    --void-raised: #0F1115;
    --void-elevated: #14171D;
    --text: var(--fg);
    --text-soft: var(--muted);
    --text-faint: var(--muted-soft);
    --text-whisper: #3E434C;
    --vaucai-blue: var(--accent);
    --vaucai-blue-hover: #3399FF;
    --line: var(--border);
    --line-soft: var(--border-soft);
    --line-bright: var(--border-light);
    --post-it: #FCE88C;

    /* Motion tokens (Bloque B) — fuente única de curvas y duraciones.
       --ease-cinematic ya existía (reveals). Añadimos la familia para que
       todo el motion del funnel (Lenis, GSAP, transiciones CSS) hable el
       mismo idioma en vez de hardcodear curvas sueltas por sitio. */
    --ease-cinematic: cubic-bezier(0.22, 1, 0.36, 1);
    --ease-out-expo: cubic-bezier(0.16, 1, 0.3, 1);
    --ease-spring: cubic-bezier(0.34, 1.56, 0.64, 1);
    --dur-fast: 0.2s;
    --dur-base: 0.4s;
    --dur-slow: 0.9s;
}

/* MÓVIL (OLED): fondo de TODA la web en negro puro #000 — el mismo que las
   pantallas de los mockups del hero, para que el teléfono se funda con el fondo
   sin canto (en OLED #000 vs #0a0a0a se leía como una costura dura). Uniforme en
   todas las páginas → sin salto ni en el teléfono ni entre secciones/footer.
   Desktop intacto (#0a0a0a). Va DESPUÉS del :root base para ganarle por orden. */
@media (max-width: 768px) {
    :root { --bg: #000; }
}

/* Lenis smooth scroll (Bloque B · B-02) — helpers requeridos por la lib.
   Solo aplican cuando motion.js añade la clase `.lenis` al <html> (es decir,
   cuando el scroll suave está activo y NO hay prefers-reduced-motion). */
html.lenis,
html.lenis body { height: auto; }
.lenis.lenis-smooth { scroll-behavior: auto !important; }
.lenis.lenis-smooth [data-lenis-prevent] { overscroll-behavior: contain; }
.lenis.lenis-stopped { overflow: clip; }
.lenis.lenis-smooth iframe { pointer-events: none; }

body {
    font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', system-ui, sans-serif;
    /* bg en html (línea 14). body queda transparent para que el
       body::before del hero (backdrop cinemático) sea visible. */
    background: transparent;
    color: var(--fg);
    line-height: 1.6;
    min-height: 100vh;
    display: flex;
    flex-direction: column;
    position: relative;
}

/* Reveal animations */
@keyframes riseIn {
    from { opacity: 0; transform: translateY(12px); }
    to { opacity: 1; transform: translateY(0); }
}
.reveal { opacity: 0; animation: riseIn 0.6s ease-out forwards; }
.reveal-1 { animation-delay: 0.05s; }
.reveal-2 { animation-delay: 0.15s; }
.reveal-3 { animation-delay: 0.25s; }

@media (prefers-reduced-motion: reduce) {
    .reveal { opacity: 1; animation: none; }
}

/* Nav */
nav {
    display: flex;
    justify-content: space-between;
    align-items: center;
    padding: 1.5rem 2rem;
    max-width: 1200px;
    margin: 0 auto;
    width: 100%;
    /* Posicionado para pintar:
         - por encima del .hero-backdrop (z=0)
         - por encima del .contact-menu cuando está abierto en full-
           screen (z=60). z-index: 200 garantiza que el logo + hamburger
           sigan visibles cuando el menú Poke-style cubre el viewport. */
    position: relative;
    z-index: 200;
}
.logo {
    font-size: 1.5rem;
    font-weight: 700;
    letter-spacing: -0.02em;
    /* Stacking: el .contact-menu es descendiente del <nav>, por lo
       que vive dentro del stacking context del nav (z-index: 200).
       Para que el logo siga visible cuando el menú overlay se abre
       (z-index: 60 dentro del nav), el logo necesita position +
       z-index propio mayor que 60. Sin esto, el menú cubre el logo
       a pesar del z-index del nav. */
    position: relative;
    z-index: 70;
}
.logo a { color: inherit; text-decoration: none; }
.logo img { height: 44px; width: auto; display: block; }
.nav-links a {
    color: var(--muted);
    text-decoration: none;
    margin-left: 2rem;
    font-size: 0.95rem;
    transition: color 0.2s;
}
.nav-links a:hover { color: var(--fg); }

/* ----- Contact menu — Poke-style full-screen overlay -----
   El menú deja de ser un dropdown pequeño y pasa a cubrir el viewport
   entero. La nav (logo Vaucai + hamburger) queda flotando encima
   gracias al z-index. Backdrop oscuro con blur sutil. */
.contact-cta-wrap {
    position: relative;
    display: inline-flex;
}
.contact-menu {
    /* Fixed full-viewport. Antes era absolute dropdown 200px de ancho;
       ahora ocupa todo: top 0 / inset 0. */
    position: fixed;
    inset: 0;
    width: 100vw;
    height: 100vh;
    height: 100dvh;  /* dynamic viewport en mobile (excluye barras de browser) */
    padding: clamp(96px, 14vh, 140px) clamp(28px, 6vw, 64px) 56px;
    background: rgba(10, 10, 10, 0.97);
    -webkit-backdrop-filter: blur(24px);
    backdrop-filter: blur(24px);
    border: none;
    border-radius: 0;
    box-shadow: none;
    display: flex;
    flex-direction: column;
    align-items: stretch;
    justify-content: flex-start;
    gap: 4px;
    opacity: 0;
    visibility: hidden;
    transform: translateY(-8px);
    transition:
        opacity 0.24s ease,
        transform 0.30s cubic-bezier(0.22, 0.61, 0.36, 1),
        visibility 0s linear 0.24s;
    z-index: 60;
}
.contact-cta-wrap[data-open="true"] .contact-menu {
    opacity: 1;
    visibility: visible;
    transform: translateY(0);
    transition:
        opacity 0.24s ease,
        transform 0.30s cubic-bezier(0.22, 0.61, 0.36, 1),
        visibility 0s linear 0s;
}
/* Compat: el viejo .header-cta-btn (si una página aún lo usa) sigue
   teniendo highlight al abrir. */
.contact-cta-wrap[data-open="true"] > .header-cta-btn {
    background: rgba(32, 106, 244, 0.10);
}

/* Body-lock cuando el menú está abierto: bloquea scroll de la página
   detrás. La clase la setea site.js. */
body.menu-open { overflow: hidden; }

/* ----- CTA del hero visible sobre el menú abierto -----
   Al abrir el menú elevamos el MISMO botón "Crear mi asistente" del
   hero (no se duplica). Para que pueda pintar por encima del overlay
   (z=60 dentro del nav z=200) liberamos los contextos de apilamiento de
   main y .hero, y fijamos el botón en su posición medida por site.js
   (vars --menu-cta-*). En móvil coincide con su posición real; en
   desktop, donde el hero cae bajo el fold, site.js lo ancla al borde
   inferior visible. `.menu-cta-on` sólo se activa si existe el botón
   (no en /integraciones). */
body.menu-open.menu-cta-on main { z-index: auto; }
body.menu-open.menu-cta-on .hero { isolation: auto; overflow: visible; }
body.menu-open.menu-cta-on .hero .cta-button {
    position: fixed;
    top: var(--menu-cta-top);
    left: var(--menu-cta-left);
    width: var(--menu-cta-width);
    margin: 0;
    z-index: 250;
}

/* ----- Hamburger menu button — 3 líneas blancas iguales (estilo
   Poke). Sin caja contenedora, sin borde: sólo el icono trazado en
   blanco translúcido. Dimensiones del touch-target 44×44px (match
   exacto con la altura del logo Vaucai en el header → alineación
   perfecta vertical vía align-items:center del nav). Las líneas
   se transforman en X cuando data-open="true". */
.menu-btn {
    display: inline-flex;
    align-items: center;
    justify-content: center;
    width: 44px;
    height: 44px;
    padding: 0;
    background: transparent;
    color: rgba(255, 255, 255, 0.92);
    border: none;
    border-radius: 0;
    cursor: pointer;
    transition:
        color 0.18s ease,
        transform 0.12s ease;
    /* Mismo motivo que .logo: el botón debe quedar por encima del
       .contact-menu (z=60) para que la "X" sea visible y clicable
       cuando el menú está abierto. */
    position: relative;
    z-index: 70;
}
.menu-btn:hover { color: #ffffff; }
.menu-btn:active { transform: scale(0.94); }
.menu-btn svg { display: block; }
.contact-cta-wrap[data-open="true"] > .menu-btn { color: #ffffff; }
@media (max-width: 600px) {
    .menu-btn { width: 40px; height: 40px; }
}

/* ----- Submenu anidado dentro del .contact-menu: "Contacto"
   funciona como un toggle que despliega Telegram + Email. */
.contact-menu-toggle {
    width: 100%;
    border: none;
    cursor: pointer;
    background: transparent;
    font-family: inherit;
    font-size: 14px;
    font-weight: 500;
    text-align: left;
    justify-content: space-between;
}
.contact-menu-toggle > span { flex: 1; }
.contact-menu-chevron {
    width: 12px;
    height: 12px;
    flex: 0 0 12px;
    color: var(--text-soft);
    transition: transform 0.22s ease, color 0.15s ease;
}
.contact-menu-toggle[aria-expanded="true"] .contact-menu-chevron {
    transform: rotate(180deg);
}
.contact-menu-sub {
    display: flex;
    flex-direction: column;
    gap: 2px;
    max-height: 0;
    overflow: hidden;
    transition: max-height 0.28s ease, margin-top 0.22s ease;
}
.contact-menu-toggle[aria-expanded="true"] + .contact-menu-sub {
    max-height: 140px;
    margin-top: 2px;
}
.contact-menu-sub-item { padding-left: 22px; }
.contact-menu-item {
    display: flex;
    align-items: center;
    gap: 16px;
    padding: 18px 8px;
    border-radius: 0;
    color: rgba(255, 255, 255, 0.96);
    text-decoration: none;
    /* Misma tipografía que el h1 del hero: Inter ExtraBold con tracking
       ajustado. Escala Poke (clamp grande). */
    font-family: 'Inter', -apple-system, BlinkMacSystemFont, 'Segoe UI', system-ui, sans-serif;
    font-size: clamp(30px, 5vw, 48px);
    font-weight: 800;
    line-height: 1.05;
    letter-spacing: -0.03em;
    white-space: nowrap;
    transition: color 0.18s ease;
}
.contact-menu-item:hover,
.contact-menu-item:focus-visible {
    background: transparent;
    color: #ffffff;
    outline: none;
}
.contact-menu-item svg {
    width: 26px;
    height: 26px;
    flex: 0 0 26px;
    color: var(--text-soft);
    transition: color 0.18s ease;
}
.contact-menu-item:hover svg,
.contact-menu-item:focus-visible svg {
    color: rgba(255, 255, 255, 0.92);
}
.contact-menu-sub-item {
    padding-left: 28px;
    font-size: clamp(22px, 3.6vw, 32px);
    font-weight: 500;
    color: rgba(255, 255, 255, 0.82);
}
.contact-menu-sub-item svg {
    width: 22px;
    height: 22px;
    flex: 0 0 22px;
}
.contact-menu-chevron {
    width: 18px;
    height: 18px;
    flex: 0 0 18px;
}
.contact-menu-toggle[aria-expanded="true"] + .contact-menu-sub {
    /* Más altura que el dropdown original (140px) — ahora los items
       son grandes (~80px de alto cada uno). */
    max-height: 280px;
    margin-top: 4px;
}

/* ============================================================
   ORDENADOR (puntero fino + hover, i.e. ratón/trackpad): el menú
   deja de ser overlay a pantalla completa y pasa a ser un
   desplegable compacto anclado al borde DERECHO, justo bajo el
   botón hamburguesa. En móvil/táctil sigue siendo el overlay
   fullscreen de links grandes.
   Usamos (hover:hover) and (pointer:fine) en vez de min-width
   porque el founder veía el overlay en su ordenador: con zoom de
   navegador o escalado del SO el viewport CSS cae por debajo de
   768px y un breakpoint por ancho fallaba. El tipo de puntero
   distingue "ordenador vs móvil" sin depender del ancho.
   .contact-cta-wrap es position:relative → el absolute se ancla a
   él; right:0 alinea el menú a la derecha.
   ============================================================ */
@media (hover: hover) and (pointer: fine) {
    .contact-menu {
        position: absolute;
        inset: auto;
        top: calc(100% + 12px);
        right: 0;
        left: auto;
        width: max-content;
        min-width: 224px;
        max-width: 300px;
        height: auto;
        padding: 8px;
        background: rgba(18, 18, 20, 0.98);
        -webkit-backdrop-filter: blur(20px);
        backdrop-filter: blur(20px);
        border: 1px solid rgba(255, 255, 255, 0.10);
        border-radius: 16px;
        box-shadow: 0 16px 48px rgba(0, 0, 0, 0.55);
        gap: 2px;
    }
    /* Items en escala de dropdown (no los links gigantes del overlay). */
    .contact-menu-item {
        font-size: 15px;
        font-weight: 600;
        padding: 11px 14px;
        border-radius: 10px;
        gap: 12px;
    }
    .contact-menu-item:hover,
    .contact-menu-item:focus-visible {
        background: rgba(255, 255, 255, 0.06);
    }
    .contact-menu-item svg { width: 18px; height: 18px; flex: 0 0 18px; }
    .contact-menu-toggle { font-size: 15px; }
    .contact-menu-sub-item {
        font-size: 14px;
        font-weight: 500;
        padding-left: 30px;
    }
    .contact-menu-sub-item svg { width: 16px; height: 16px; flex: 0 0 16px; }
    .contact-menu-chevron { width: 13px; height: 13px; flex: 0 0 13px; }

    /* El dropdown es pequeño: no bloquees el scroll de la página ni
       eleves/reposiciones el CTA del hero (sólo tenía sentido cuando el
       overlay tapaba toda la pantalla). Revertimos esos efectos. */
    body.menu-open { overflow: visible; }
    body.menu-open.menu-cta-on main { z-index: 1; }
    body.menu-open.menu-cta-on .hero { isolation: isolate; overflow: hidden; }
    body.menu-open.menu-cta-on .hero .cta-button {
        position: relative;
        top: auto;
        left: auto;
        width: clamp(260px, 68vw, 340px);
        margin: -18px auto 0;
        z-index: 10;
    }
}

/* Hamburger → X transformation cuando el menú está abierto. Las
   líneas del SVG se animan: top y bottom convergen al centro y rotan,
   la del medio se desvanece (cute touch: slide a la izquierda). */
.menu-btn svg line {
    transition:
        transform 0.30s cubic-bezier(0.4, 0, 0.2, 1),
        opacity 0.20s ease;
    transform-box: fill-box;
    transform-origin: 50% 50%;
}
.contact-cta-wrap[data-open="true"] .menu-btn svg line:nth-child(1) {
    transform: translateY(5px) rotate(45deg);
}
.contact-cta-wrap[data-open="true"] .menu-btn svg line:nth-child(2) {
    opacity: 0;
    transform: translateX(8px);
}
.contact-cta-wrap[data-open="true"] .menu-btn svg line:nth-child(3) {
    transform: translateY(-5px) rotate(-45deg);
}

main { flex: 1; width: 100%; position: relative; z-index: 1; }

/* Hero (landing) */
.hero-shell {
    display: flex;
    align-items: center;
    justify-content: center;
    padding: 2rem 0;
}
.hero {
    text-align: center;
    padding: 4rem 2rem;
    /* Sesión-16 — max-width 800 → 1200. A 800px el title se rompía
       (wrap natural del browser) en font-size > ~88px, neutralizando
       cualquier aumento. 1200 deja que "Crea tu asistente personal"
       (26 chars) quepa en 1 línea hasta font ~85-90px. El subtítulo
       sigue limitado por su propio max-width: 540px. */
    max-width: 1200px;
    width: 100%;
}
.hero h1 {
    /* Sesión-16 (2026-05-10) — mobile-first, tipografía replicando
       .scene-d h2 ("Llévame contigo"):
         font-family: hereda system sans-serif default
         font-weight: 800 (bold, NO semibold)
         letter-spacing: -0.03em
         line-height: 1.1
       BASE = mobile a 40px. A este tamaño "Crea tu asistente personal"
       (26 chars) NO cabe en 1 línea en iPhone 14 Pro (358px disponibles,
       necesitaría ~570px); el <br> manual entre "personal" y "en
       segundos" se oculta y el browser hace wrap natural balanceado a
       ~3 líneas. Tradeoff aceptado para tener presencia visual real
       (ratio título/subtítulo = 40/17 = 2.4x).
       margin-bottom 2rem (32px) — "un poco más" de separación con
       el subtítulo según spec. */
    /* Sesión-16 — tipografía replicando .scene-d h2 ("Llévame
       contigo") con Inter explícita para render consistente
       cross-device. Sin <br> en HTML — wrap natural en mobile
       (3 líneas balanceadas, sin overflow); en desktop, max-width
       tipográfico + text-wrap: balance fuerzan wrap a 2 líneas
       limpias. */
    font-family: 'Inter', -apple-system, BlinkMacSystemFont, 'Segoe UI', system-ui, sans-serif;
    /* Sesión 2026-06-05 — SIEMPRE 2 líneas en móvil. El <br> del HTML ya
       fuerza "en segundos." a su propia línea; el problema era la línea 1
       ("Crea tu asistente personal", la más larga) que con un tamaño fijo
       de 30px no cabía y hacía wrap en móviles estrechos → 3 líneas.
       Ahora el tamaño es FLUIDO y va atado al ancho disponible: la fila 1
       mide ~12.3× el font-size, así que con (100vw − 36px)/14 cabe con un
       margen lateral CLARO (~24px) desde ~300px hasta el breakpoint desktop
       (768px) — ese margen visible es lo que hace que el título se lea como
       centrado (antes, con /13, casi pegaba a los bordes y parecía a sangre).
       El subtítulo (abajo) usa un ancho que sigue a este para que los
       márgenes laterales de ambos coincidan. clamp acota: 20px en pantallas
       diminutas, 40px de techo. En ≥768px manda la regla desktop de abajo. */
    font-size: clamp(19px, calc((100vw - 36px) / 12.7), 42px);
    font-weight: 800;
    letter-spacing: -0.03em;
    line-height: 1.1;
    /* Sesión-28 rev 26: 20px (1.25rem). Otro escalón arriba desde
       1rem (16px de rev 25). */
    margin: 0 auto 1.25rem;
    color: #ffffff;
}

@media (min-width: 768px) {
    .hero h1 {
        /* 2 líneas garantizadas por el <br> manual del HTML:
             "Crea tu asistente personal" / "en segundos."
           La fila 1 mide ~12.1× el font-size. Como .hero está capado a
           max-width:1200px (≈1168px útiles), el font debe quedar ≤~96px;
           por eso el cap baja a 5.8rem (≈93px) y escala con 6.2vw para no
           partir la fila 1 en ningún ancho desktop (verificado 768→2560px).
           El max-width:18ch anterior estrangulaba la caja y forzaba el wrap
           a 3 líneas. */
        font-size: clamp(2.8rem, 6.2vw, 5.8rem);
        letter-spacing: -0.035em;
        line-height: 1.05;
        max-width: none;
    }
}

.hero h1 .brand { color: var(--accent); }

.hero p {
    /* Subtítulo (~125 chars). BASE = mobile: fuente más pequeña que el título
       (15px vs ~25px) pero ancho ATADO al del título para que los márgenes
       laterales de ambos coincidan → se leen como un bloque centrado. El
       título mide ~0.879·(100vw−36px); reproducimos ese ancho con un pelín
       menos (subtítulo un punto más estrecho, queda subordinado). */
    font-size: clamp(11px, calc((100vw - 48px) / 22.5), 14px);
    line-height: 1.5;
    color: var(--muted);
    max-width: none;
    margin: 0 auto 2.5rem;
    text-wrap: pretty;
}

@media (min-width: 768px) {
    .hero p {
        /* DESKTOP: el subtítulo va SIEMPRE en una sola línea (Juan) → quitamos
           el tope de ancho y forzamos nowrap; se centra solo (margin:0 auto). */
        font-size: clamp(1.05rem, 0.5vw + 0.95rem, 1.25rem);
        line-height: 1.55;
        max-width: none;
        white-space: nowrap;
    }
    /* El salto manual del subtítulo es solo-móvil: en desktop va en 1 línea. */
    .hero-sub-break { display: none; }
}

/* CTA Form (landing) */
.cta-form {
    display: flex;
    gap: 0.75rem;
    max-width: 480px;
    margin: 0 auto;
}
.cta-form input {
    flex: 1;
    padding: 1rem 1.25rem;
    font-size: 1.1rem;
    background: var(--surface);
    border: 1px solid var(--border);
    border-radius: 12px;
    color: var(--fg);
    /* outline lo gestiona el `:focus-visible` global (WEB-02) — quitar
       `outline: none` aquí dejaba el input sin foco de teclado. */
    transition: border-color 0.2s;
}
.cta-form input:focus { border-color: var(--accent); }
.cta-form input::placeholder { color: #52525b; }
.cta-form input[aria-invalid="true"] { border-color: var(--error); }
.cta-form button {
    padding: 1rem 2rem;
    font-size: 1.1rem;
    font-weight: 600;
    background: var(--accent);
    color: white;
    border: none;
    border-radius: 12px;
    cursor: pointer;
    transition: background 0.2s, transform 0.1s;
    white-space: nowrap;
}
.cta-form button:hover { background: var(--accent-hover); }
.cta-form button:active { transform: scale(0.98); }
.cta-form button:disabled { opacity: 0.6; cursor: not-allowed; }

/* Legal pages */
.legal-page {
    padding: 80px 40px;
    max-width: 720px;
    margin: 0 auto;
}
.legal-content h1 {
    font-family: 'Inter', -apple-system, BlinkMacSystemFont, 'Segoe UI', system-ui, sans-serif;
    font-size: clamp(30px, 4.2vw, 44px);
    font-weight: 800;
    color: var(--fg);
    line-height: 1.1;
    letter-spacing: -0.03em;
    margin-bottom: 8px;
}
.legal-content > p:first-of-type {
    margin-bottom: 48px;
}
.legal-content > p:first-of-type em {
    font-size: 14px;
    color: var(--muted-soft);
    font-style: normal;
}
.legal-content em { font-style: normal; }
.legal-content h2 {
    font-size: 22px;
    font-weight: 500;
    color: var(--fg);
    margin-top: 48px;
    margin-bottom: 16px;
    line-height: 1.3;
}
.legal-content h3 {
    font-size: 18px;
    font-weight: 500;
    color: var(--fg);
    margin-top: 32px;
    margin-bottom: 12px;
    line-height: 1.35;
}
.legal-content p {
    font-size: 16px;
    line-height: 1.65;
    color: var(--fg-soft);
    margin-bottom: 16px;
}
.legal-content ul,
.legal-content ol {
    margin: 0 0 16px;
    padding-left: 24px;
    line-height: 1.65;
    color: var(--fg-soft);
    font-size: 16px;
}
.legal-content li { margin-bottom: 6px; }
.legal-content li > strong { color: var(--fg); }
.legal-content a {
    color: var(--accent);
    text-decoration: none;
}
.legal-content a:hover { text-decoration: underline; }
.legal-content strong { color: var(--fg); font-weight: 600; }
.legal-content code {
    background: var(--surface-soft);
    padding: 2px 6px;
    border-radius: 4px;
    font-family: 'SF Mono', Menlo, Consolas, monospace;
    font-size: 13px;
    color: var(--fg);
}
.legal-content table.legal-table {
    width: 100%;
    border-collapse: collapse;
    margin: 16px 0 24px;
    font-size: 14px;
    color: var(--fg-soft);
}
.legal-content table.legal-table th {
    text-align: left;
    padding: 10px;
    background: var(--surface-soft);
    color: var(--fg);
    font-weight: 600;
    border-bottom: 1px solid var(--border-soft);
}
.legal-content table.legal-table td {
    padding: 10px;
    border-bottom: 1px solid var(--border-soft);
    vertical-align: top;
}

/* Site footer (compartido landing + legal pages).
   La landing duplica estos estilos inline en index.html (legacy del
   refactor narrativo); aqui viven los autoritativos para que las
   legal pages no queden sin layout. */
.site-footer {
    background: var(--bg);
    padding: 40px 32px 28px;
    color: #fff;
    border-top: 1px solid rgba(255, 255, 255, 0.08);
}
.site-footer-inner {
    max-width: 1200px;
    margin: 0 auto;
    display: flex;
    flex-direction: column;
    align-items: center;
    gap: 32px;
    text-align: center;
}
.site-footer-col {
    display: flex;
    flex-direction: column;
    align-items: center;
    gap: 16px;
    min-width: 0;
}
.site-footer-logo {
    display: block;
    line-height: 0;
    margin: 0;
    padding: 0;
}
.site-footer-logo img {
    display: block;
    height: 72px;
    width: auto;
}
.site-footer-why {
    display: inline-block;
    font-family: 'Instrument Serif', Georgia, serif;
    font-style: italic;
    font-weight: 400;
    font-size: 22px;
    line-height: 1.1;
    color: rgba(255, 255, 255, 0.7);
    text-decoration: none;
    transition: color 0.2s;
}
.site-footer-why:hover { color: var(--accent); }
.site-footer-legal {
    list-style: none;
    margin: 0;
    padding: 0;
    display: grid;
    grid-template-columns: auto auto;
    grid-template-rows: auto auto;
    grid-auto-flow: column;
    column-gap: 56px;
    row-gap: 12px;
}
.site-footer-legal li { line-height: 1; }
.site-footer-legal a {
    display: block;
    color: rgba(255, 255, 255, 0.6);
    text-decoration: none;
    font-size: 14px;
    line-height: 1;
    white-space: nowrap;
    transition: color 0.2s;
}
.site-footer-legal a:hover { color: #fff; }
@media (max-width: 900px) {
    /* Audit 2026-05-06: keep 2×2 grid on mobile (the majority of
       traffic comes from phones; collapsing to a single column
       breaks the symmetry the founder asked for). Tighter
       column-gap so the four labels fit comfortably even on
       narrow viewports (~340-360px). */
    .site-footer-legal {
        column-gap: 32px;
        justify-content: center;
    }
}
.site-footer-social-col {
    display: flex;
    flex-direction: row;
    flex-wrap: nowrap;
    gap: 16px;
    align-items: center;
}
.site-footer-social-col a {
    display: inline-flex;
    color: rgba(255, 255, 255, 0.6);
    transition: color 0.2s, transform 0.2s;
}
.site-footer-social-col a:hover {
    color: var(--accent);
    transform: scale(1.1);
}
.site-footer-social-col svg { width: 20px; height: 20px; display: block; }
/* Insignia de certificación CASA / TAC Security (ESOF). Discreta:
   pequeña y al final del stack del footer — presente como señal de
   confianza sin ser protagonista. */
.site-footer-badge { line-height: 0; }
.site-footer-badge img { height: 48px; width: auto; display: block; }
@media (max-width: 900px) {
    .site-footer { padding: 24px 24px 20px; }
    .site-footer-logo img { height: 52px; }
    .site-footer-badge img { height: 44px; }
}

/* Back link para legal pages — siempre visible en mobile (la nav-links
   se oculta en <600px y el wordmark no parece "back" para el visitante
   medio). Se renderiza dentro del article, encima del h1. */
.legal-back {
    display: inline-flex;
    align-items: center;
    gap: 6px;
    /* Azul vaucai (--accent) — color de marca, consistente entre
       /crear/, páginas legales y por-que-vaucai. Audit 2026-05-06:
       antes era var(--muted) (gris) — el fundador pidió que los
       enlaces de "volver" usen el color de la marca para no romper
       estética entre páginas. */
    color: var(--accent);
    text-decoration: none;
    font-size: 14px;
    margin-bottom: 32px;
    transition: color 0.2s;
}
.legal-back:hover { color: var(--accent-hover); }
.legal-back-arrow {
    display: inline-block;
    transition: transform 0.2s;
}
.legal-back:hover .legal-back-arrow { transform: translateX(-3px); }

/* Botón "Volver al inicio" — POSICIÓN FIJA e idéntica en TODAS las páginas
   (referencia: la de /integraciones). Va como hijo directo tras el <nav>
   (partial /partials/back-link.html), no dentro de cada <main>, así su
   posición NO depende del layout de cada página. Alineado al gutter de un
   contenedor centrado de 1120px (igual que el contenido de Funcionalidades)
   con el mismo hueco bajo el menú. inline-flex = área de clic pequeña. */
.legal-back--page {
    margin: clamp(2rem, 5vh, 3.25rem) 0 0 max(24px, calc(50vw - 536px));
}

/* El banner + modal de consentimiento los construye y estiliza por JS
   /assets/analytics.js (clases namespaced vaucai-cc-*). El CSS del banner
   estático antiguo (.cookie-banner / .cookie-modal / .cookie-category /
   .toggle) se retiró 2026-06-06 al consolidar en un sistema único. */

/* Inline "Configurar cookies" affordance on /cookies/ page (audit
   2026-05-06: footer link removed, accessibility kept here per GDPR).
   Lives inside .cookie-prefs-box, a sticky-but-subtle banner placed
   right after the page title so the user sees it immediately on
   landing — no need to scroll into section 4. */
.cookie-prefs-box {
    display: flex;
    align-items: center;
    justify-content: space-between;
    gap: 16px;
    flex-wrap: wrap;
    padding: 16px 20px;
    margin: 24px 0 32px;
    background: var(--surface-soft);
    border: 1px solid var(--border-light);
    border-radius: 12px;
}
.cookie-prefs-box-text {
    font-size: 14px;
    color: var(--fg);
    line-height: 1.5;
    flex: 1 1 240px;
}
.cookie-prefs-box-text strong { font-weight: 600; }
.cookie-prefs-btn {
    padding: 10px 22px;
    border-radius: 100px;
    font-size: 14px;
    font-weight: 500;
    font-family: inherit;
    cursor: pointer;
    background: var(--fg);
    color: var(--bg);
    border: 1px solid var(--fg);
    transition: opacity 0.2s, transform 0.1s;
    white-space: nowrap;
}
.cookie-prefs-btn:hover { opacity: 0.85; }
.cookie-prefs-btn:active { transform: scale(0.98); }
@media (max-width: 600px) {
    .cookie-prefs-box {
        flex-direction: column;
        align-items: stretch;
        justify-content: flex-start;
        gap: 12px;
    }
    /* En columna, el `flex: 1 1 240px` del texto convertía ese 240px en ALTO →
       card gigante con un hueco enorme. En móvil el texto va a su contenido. */
    .cookie-prefs-box-text { flex: 0 1 auto; }
    .cookie-prefs-btn { width: 100%; }
}

/* Responsive */
@media (max-width: 768px) {
    .legal-page { padding: 64px 24px; }
    .legal-content h1 { font-size: 32px; }
    /* Móvil: las tablas anchas (cookies, etc.) desbordaban la PÁGINA → scroll
       horizontal de toda la web y el modal/overlay fijo se descuadraba. Se
       contienen en su propia caja (scroll dentro de la tabla, no de la página). */
    .legal-content table.legal-table { font-size: 13px; display: block; width: 100%; overflow-x: auto; -webkit-overflow-scrolling: touch; }
    .legal-content table.legal-table th,
    .legal-content table.legal-table td { padding: 8px; }

    /* Footer legacy mobile: estilos movidos a inline <style> del HTML. */

    .cookie-banner-inner {
        flex-direction: column;
        align-items: stretch;
        gap: 1.25rem;
    }
    .cookie-banner-actions {
        display: grid;
        grid-template-columns: 1fr 1fr 1fr;
        gap: 8px;
    }
    .cookie-btn { padding: 10px 8px; font-size: 13px; min-width: 0; }
}
@media (max-width: 600px) {
    .cta-form { flex-direction: column; }
    .nav-links { display: none; }
}
