/* ============================================================
   RUOT · Local Tours — estilos.css v3 (rediseño 06-sep-2026)
   REEMPLAZA a css/estilos.css. Mismas clases que hoy usa app.js
   (.cabecera .barra .logo .menu-principal .btn .tarjeta-tour .chip
   .filtros .badge .aviso .campo …) + clases NUEVAS que pide el markup
   nuevo (ver README §Cambios en app.js). Solo tokens; sin colores sueltos.
   Los .dc.html del paquete son la referencia visual exacta.
   ============================================================ */

/* ---- Reset ---- */
*, *::before, *::after { box-sizing: border-box; }
* { margin: 0; }
html { scroll-behavior: smooth; }
body { font-family: var(--font-texto); font-size: var(--fs-base); line-height: var(--lh-texto); color: var(--texto); background: var(--c-fondo); -webkit-font-smoothing: antialiased; }
img, svg { max-width: 100%; height: auto; display: block; }
button, input, select, textarea { font: inherit; color: inherit; }
a { color: var(--texto); text-decoration: none; }          /* SIN subrayado (feedback Ale); el Panel puede forzarlo */
a:hover { color: var(--c-teal); }
h1, h2, h3 { line-height: var(--lh-titulo); text-wrap: balance; }
p { text-wrap: pretty; }
input::placeholder, textarea::placeholder { color: #4E6C75; opacity: 1; }

.sr-only { position: absolute; width: 1px; height: 1px; padding: 0; margin: -1px; overflow: hidden; clip: rect(0 0 0 0); white-space: nowrap; border: 0; }
.skip-link { position: absolute; top: -100px; left: var(--sp-4); z-index: 1000; background: var(--c-petroleo); color: var(--c-blanco); padding: var(--sp-3) var(--sp-4); border-radius: var(--radio); font-weight: 700; }
.skip-link:focus { top: var(--sp-4); }
.tactil { min-height: var(--tactil); }
.tactil-compacto { min-height: 40px; }
.meta-caption { font-size: var(--fs-caption); }
:focus-visible { outline: 3px solid var(--foco); outline-offset: 2px; border-radius: 2px; }
/* (22-sep-2026) Los campos de fecha/hora nativos pierden el anillo cuando el foco cae en un
   segmento interno (el navegador deja de considerarlo «focus-visible»: el último trocito de
   dd/mm/aaaa se quedaba sin contorno — hallazgo 6 de la auditoría de flujos). Con :focus
   (no solo :focus-visible) el campo entero mantiene el anillo mientras cualquier parte suya
   tenga el foco. */
input[type="date"]:focus, input[type="time"]:focus,
input[type="date"]:focus-within, input[type="time"]:focus-within { outline: 3px solid var(--foco); outline-offset: 2px; border-radius: 2px; }
/* Foco sobre superficies petróleo (cabecera/hero/banda): anillo BLANCO —
   el teal (--foco) sobre petróleo da 2,0:1; el blanco da 8,6:1 (AA 3:1). */
.cabecera :focus-visible, .banda-petroleo :focus-visible { outline-color: var(--c-blanco); }

/* ---- Layout ---- */
.contenedor { max-width: var(--ancho-max); margin-inline: auto; padding-inline: var(--pad-lateral); }
main { padding-block: var(--sp-5) var(--sp-10); min-height: 60vh; }

/* ============================================================
   CABECERA (dirección 2b): petróleo, 72px, logo en tarjeta blanca,
   menú con subrayado ámbar en el activo, píldoras a la derecha.
   ============================================================ */
.cabecera { background: var(--c-petroleo); color: var(--c-blanco); position: sticky; top: 0; z-index: 100; }
.cabecera .barra { display: flex; flex-wrap: wrap; align-items: center; justify-content: space-between; gap: var(--sp-3); min-height: 72px; }   /* flex-wrap: 25-sep-2026 — con letra A++ a 1440 la cabecera se salía 52 px (hallazgo 9) */
.logo { display: inline-flex; flex-direction: column; align-items: flex-start; gap: var(--sp-1); color: var(--c-blanco); }
.logo .isotipo-caja { display: inline-flex; align-items: center; background: var(--c-blanco); border-radius: var(--radio-s); padding: 4px 8px; }   /* NUEVO: envuelve al <img> */
.logo .isotipo {}
.logo .nombre { display: none; }                                   /* «RUOT» ya está en el logo: no se repite */
.logo .descriptor { font-size: calc(var(--fs-small) * 0.765); font-weight: 600; letter-spacing: .06em; text-transform: uppercase; white-space: nowrap; }  /* (17-sep-2026, feedback ojos frescos) LOCAL TOURS bajo el logo, mayúsculas, 15% + 10% menor */
.logo .area { margin-top: var(--sp-1); padding: 4px 12px; border-radius: var(--radio-pill); background: rgba(255,255,255,.16); font-size: var(--fs-micro); font-weight: 700; letter-spacing: .04em; }  /* NUEVO: «GUÍAS» — bajo el logo en columna (17-sep-2026) */
.logo .area.fundador { background: var(--energia-acento); color: var(--c-petroleo); font-weight: 800; }

.menu-principal { display: flex; gap: 4px; list-style: none; padding: 0; white-space: nowrap; }
.menu-principal a { display: inline-flex; align-items: center; min-height: var(--tactil); padding: 0 var(--sp-3); color: var(--c-blanco); font-weight: 600; font-size: var(--fs-small); opacity: .9; border-radius: 0; }
.menu-principal a:hover { opacity: 1; color: var(--c-blanco); box-shadow: inset 0 -3px 0 rgba(255,255,255,.5); }
.menu-principal a[aria-current="page"] { opacity: 1; font-weight: 700; background: transparent; box-shadow: inset 0 -3px 0 var(--energia-acento); }  /* NUEVO: «Acción · 3» */

/* (17-sep-2026, auditoría 07/10) Controles móviles: ocultos en escritorio.
   .hoja-filtros es display:contents aquí (los filtros se ven como siempre). */
.btn-filtros-movil { display: none; }
.btn-menu-movil { display: none; }
.hoja-filtros { display: contents; }
.hoja-filtros .asa, .hoja-filtros .acciones { display: none; }        /* solo dentro de la hoja móvil */
.menu-movil { display: none; }

.utilidades-cabecera { display: flex; align-items: center; gap: var(--sp-2); min-width: 0; flex-shrink: 1; }
.utilidades-cabecera .btn { white-space: nowrap; }
/* Selector de idioma (15-sep-2026): globo + código (ES/EN) con desplegable, en vez del <select> */
.idioma-cabecera { position: relative; }
.idioma-boton { display: inline-flex; align-items: center; gap: var(--sp-1); min-height: 44px; padding: 0 var(--sp-2); border-radius: var(--radio-pill); border: 1px solid rgba(255,255,255,.2); background: transparent; color: var(--c-blanco); cursor: pointer; font-weight: 700; font-size: var(--fs-small); }
.idioma-boton:hover, .idioma-boton[aria-expanded="true"] { background: rgba(255,255,255,.12); }
.idioma-boton .ico { color: var(--c-blanco); }
.idioma-codigo { letter-spacing: .04em; }
.idioma-lista { position: absolute; top: calc(100% + var(--sp-2)); right: 0; z-index: 120; min-width: 200px; margin: 0; padding: var(--sp-2); list-style: none; background: var(--superficie); color: var(--texto); border: 1px solid var(--borde-suave); border-radius: var(--radio); box-shadow: var(--sombra-flotante); }
.idioma-lista[hidden] { display: none; }
.idioma-lista li { margin: 0; }
.idioma-lista button { display: flex; align-items: center; justify-content: space-between; gap: var(--sp-3); width: 100%; min-height: var(--tactil); padding: var(--sp-2) var(--sp-3); border: 0; background: transparent; color: var(--texto); font-size: var(--fs-small); font-weight: 600; text-align: left; border-radius: var(--radio-s); cursor: pointer; }
.idioma-lista button:hover, .idioma-lista button:focus-visible { background: var(--tinte); }
.idioma-lista .idioma-cod { color: var(--texto-suave); font-weight: 700; }
.cabecera .btn-pildora { display: inline-flex; align-items: center; min-height: var(--tactil); padding: 0 var(--sp-4); border-radius: var(--radio-pill); background: var(--c-blanco); color: var(--c-petroleo); font-weight: 700; font-size: var(--fs-small); white-space: nowrap; }        /* NUEVO: «Soy guía» / «Mi perfil» */
.cabecera .btn-pildora.borde { background: transparent; color: var(--c-blanco); border: 1px solid rgba(255,255,255,.45); }
.cabecera .btn-escuchar { display: none; }                          /* «Escuchar» pasa al Panel de Personalización (ver README) */

/* Menú de usuario (15-sep-2026): avatar con inicial + desplegable que consolida
   Mi perfil · Preferencias · Cambiar de modo · Cerrar sesión. */
.menu-usuario { position: relative; }
.avatar-boton { display: inline-flex; align-items: center; justify-content: center; gap: var(--sp-1); min-width: 44px; min-height: 44px; padding: 0 var(--sp-2); border-radius: var(--radio-pill); border: 1px solid rgba(255,255,255,.45); background: transparent; color: var(--c-blanco); cursor: pointer; }
.avatar-boton:hover { background: rgba(255,255,255,.12); }
.avatar-boton .ico { transition: transform var(--trans); }
.avatar-boton[aria-expanded="true"] .ico { transform: rotate(90deg); }   /* flecha → abajo */
.avatar-inicial { display: inline-grid; place-items: center; width: 28px; height: 28px; border-radius: 50%; background: var(--c-blanco); color: var(--c-petroleo); font-weight: 800; font-size: var(--fs-small); }
.menu-usuario-lista { position: absolute; top: calc(100% + var(--sp-2)); right: 0; z-index: 120; min-width: 248px; margin: 0; padding: var(--sp-2); list-style: none; background: var(--superficie); color: var(--texto); border: 1px solid var(--borde-suave); border-radius: var(--radio); box-shadow: var(--sombra-flotante); }
.menu-usuario-lista[hidden] { display: none; }
.menu-usuario-lista li { margin: 0; }
.menu-usuario-lista a,
.menu-usuario-lista button { display: flex; align-items: center; gap: var(--sp-2); width: 100%; min-height: var(--tactil); padding: var(--sp-2) var(--sp-3); border: 0; background: transparent; color: var(--texto); font-size: var(--fs-small); font-weight: 600; text-align: left; border-radius: var(--radio-s); cursor: pointer; text-decoration: none; }
.menu-usuario-lista a:hover, .menu-usuario-lista button:hover,
.menu-usuario-lista a:focus-visible, .menu-usuario-lista button:focus-visible { background: var(--tinte); }
.menu-usuario-lista .ico { color: var(--texto-suave); flex: 0 0 auto; }

/* Buscador compacto en cabecera (pantallas interiores + cabecera pegajosa) */
/* Switch de modo Guía | Turista (15-sep-2026): segmented control con track visible
   (fondo sutil + borde + padding) y píldora blanca para el estado activo. flex-shrink:0
   para que no se recorte «Turista»; el track delimita el estado inactivo. */
.switch-modo { display: inline-flex; align-items: center; gap: 2px; padding: 3px; background: rgba(255,255,255,.12); border: 1px solid rgba(255,255,255,.2); border-radius: var(--radio-pill); flex-shrink: 0; }
.seg-modo { display: inline-flex; align-items: center; justify-content: center; min-height: 44px; padding: 0 var(--sp-3); border: 0; border-radius: var(--radio-pill); background: transparent; color: var(--c-blanco); font-size: var(--fs-small); font-weight: 600; cursor: pointer; white-space: nowrap; transition: background-color var(--trans), color var(--trans), box-shadow var(--trans); }
.seg-modo.activo { background: var(--c-blanco); color: var(--c-petroleo); font-weight: 700; box-shadow: var(--sombra-suave); }
.seg-modo:not(.activo):hover { background: rgba(255,255,255,.16); }

/* Lupa de búsqueda (15-sep-2026): botón que despliega el buscador como desplegable. */
.buscar-cabecera { position: relative; }
.buscar-toggle { display: inline-flex; align-items: center; justify-content: center; min-width: 44px; min-height: 44px; border-radius: 50%; border: 1px solid rgba(255,255,255,.45); background: transparent; color: var(--c-blanco); cursor: pointer; }
.buscar-toggle:hover, .buscar-toggle[aria-expanded="true"] { background: rgba(255,255,255,.12); }
.cabecera .buscador-mini { position: absolute; top: calc(100% + var(--sp-2)); right: 0; z-index: 120; display: flex; align-items: center; gap: var(--sp-2); width: 280px; background: var(--c-blanco); color: var(--texto); border: 1px solid var(--borde-suave); border-radius: var(--radio); box-shadow: var(--sombra-flotante); padding: 0 4px 0 12px; }
.cabecera .buscador-mini input { flex: 1; min-width: 0; border: 0; background: transparent; font-size: var(--fs-small); padding: 12px 4px; }
.cabecera .buscador-mini[hidden] { display: none; }

/* ============================================================
   HERO del inicio (2b): petróleo + puntos + halo teal; buscador
   flotante que monta sobre el borde inferior.
   ============================================================ */
.hero-wrap { position: relative; color: var(--c-blanco); background: var(--c-petroleo); overflow: hidden; }   /* NUEVO: envuelve cabecera + hero */
/* El hero del inicio rompe el padding del contenedor para ir de borde a borde */
.contenedor .hero-wrap { margin-inline: calc(-1 * var(--pad-lateral)); padding-inline: var(--pad-lateral); }
.hero-wrap .eyebrow { font-size: 0.9375rem; font-weight: 700; letter-spacing: .06em; text-transform: uppercase; color: var(--energia-acento); margin-bottom: var(--sp-3); }
.hero-wrap::before { content: ""; position: absolute; inset: 0; background-image: var(--hero-puntos); background-size: var(--hero-puntos-size); -webkit-mask-image: linear-gradient(180deg, rgba(0,0,0,.9), rgba(0,0,0,.25)); mask-image: linear-gradient(180deg, rgba(0,0,0,.9), rgba(0,0,0,.25)); pointer-events: none; }
.hero-wrap::after { content: ""; position: absolute; right: -120px; bottom: -260px; width: 720px; height: 720px; border-radius: 50%; background: var(--hero-halo); pointer-events: none; }
.hero-wrap .cabecera { position: relative; background: transparent; }
.hero { position: relative; padding-block: var(--sp-10) 7rem; }
.hero .titulo-pantalla { font-size: var(--fs-display); font-weight: 800; letter-spacing: var(--ls-titulo); line-height: 1.05; max-width: 14ch; margin-bottom: var(--sp-4); }
.hero .claim { font-size: 1.375rem; color: inherit; opacity: .95; max-width: 44ch; margin: 0; }

.buscador-hero { margin-top: -44px; margin-bottom: var(--sp-9); position: relative; z-index: 2; background: var(--superficie); border: 0; border-radius: var(--radio-l); padding: var(--sp-4); box-shadow: var(--sombra-flotante); display: flex; flex-direction: column; gap: 16px; }
.buscador-texto { display: flex; align-items: center; gap: var(--sp-2); border: 2px solid var(--borde); border-radius: 14px; padding: 4px 4px 4px 16px; }
.buscador-texto:focus-within { border-color: var(--foco); }
.buscador-texto .ico-lupa { color: var(--texto-suave); flex: 0 0 auto; }
.buscador-texto input { flex: 1; min-width: 0; border: 0; background: transparent; font-size: 1.25rem; padding: 12px 8px; }
.buscador-texto .btn { min-height: 52px; border-radius: var(--radio-s); padding: 0 var(--sp-6); }

/* ============================================================
   FILTROS: desplegables en fila (colapsados). Un <details> por grupo,
   panel absoluto; contador «Idioma · 2»; fila de chips activos.
   ============================================================ */
.filtros { display: flex; flex-direction: column; gap: 16px; }   /* el <form> es su propio contenedor (país/ciudad siguen de <select>) */
.fila-filtros { display: flex; align-items: center; gap: var(--sp-2); flex-wrap: wrap; padding: 0 4px; }   /* NUEVO */
.grupo-filtro { position: relative; border: 0; border-radius: 0; overflow: visible; }
.grupo-filtro summary { list-style: none; cursor: pointer; display: inline-flex; align-items: center; gap: var(--sp-2); min-height: var(--tactil); padding: 0 12px 0 16px; border-radius: var(--radio-s); border: 1px solid var(--borde); background: var(--c-fondo); font-weight: 600; font-size: var(--fs-small); }
.grupo-filtro summary::-webkit-details-marker { display: none; }
.grupo-filtro summary:hover { border-color: var(--c-petroleo); background: var(--superficie); }
.grupo-filtro summary::after { content: ""; width: .5em; height: .5em; border-right: 2px solid currentColor; border-bottom: 2px solid currentColor; transform: rotate(45deg) translateY(-2px); transition: transform var(--trans); }
.grupo-filtro[open] summary::after { transform: rotate(-135deg) translateY(-1px); }
.grupo-filtro.activo summary { border-color: var(--c-petroleo); background: var(--tinte); }   /* NUEVO: con opciones marcadas */
.grupo-filtro-cuerpo { position: absolute; top: 52px; left: 0; z-index: 5; min-width: 300px; background: var(--superficie); border: 1px solid var(--borde); border-radius: 14px; padding: var(--sp-4); box-shadow: var(--sombra-flotante); display: flex; flex-direction: column; gap: var(--sp-3); }
.grupo-filtro-cuerpo .ayuda { font-size: 0.9375rem; color: var(--texto-suave); }
.filtros .campo { display: flex; flex-direction: column; gap: 8px; }   /* País/Ciudad se CONSERVAN como <select> (decisión Ale 04-sep-2026: selección ÚNICA; los tests lo fijan) */
.fila-acciones { margin-left: auto; margin-top: 0; }
.fila-acciones .btn { min-height: var(--tactil); padding: 0 var(--sp-2); background: transparent; border: 0; color: var(--texto-suave); font-size: var(--fs-small); box-shadow: none; }
.filtros-activos { display: flex; align-items: center; gap: var(--sp-2); flex-wrap: wrap; padding: 12px 4px 0; border-top: 1px solid var(--separador); font-size: 0.9375rem; }   /* NUEVO */
.filtros-activos .chip-activo { display: inline-flex; align-items: center; gap: 8px; min-height: var(--tactil); padding: 0 8px 0 12px; border-radius: var(--radio-pill); border: 0; background: var(--c-petroleo); color: var(--c-blanco); font-size: 0.9375rem; font-weight: 600; cursor: pointer; }   /* (22-sep-2026) 36→44: es un botón que quita un filtro, regla de casa */
.afinar { grid-column: auto; border: 0; padding: 0; }
/* (21-sep-2026 · noche) Aquí vivían DOS copias MUERTAS de reglas de `.afinar`: el resumen
   (`.afinar > summary`) y el panel abierto (`.afinar[open] > .afinar-cuerpo`, con el `position:absolute`
   viejo). Las pisaba entera la sección «ARREGLOS VISUALES» de más abajo, así que no pintaban nada:
   dos verdades sobre el mismo selector, que es lo que la casa prohíbe. Quitadas con su medida
   (`08-web/qa-panel-afinar.py`: estilo calculado y geometría IDÉNTICOS antes/después) y con guardián
   (`08-web/test-css-duplicados.js`, que impide que vuelva a colarse una declaración muerta).
   La ÚNICA regla del panel abierto es la de «ARREGLOS VISUALES». */

/* ---- Chips (opciones dentro de un grupo) ---- */
.grupo-chips { display: flex; flex-wrap: wrap; gap: var(--sp-2); }
.chip { display: inline-flex; align-items: center; gap: var(--sp-2); min-height: var(--tactil); padding: 0 var(--sp-4); border: 2px solid var(--borde); border-radius: var(--radio-s); background: var(--superficie); color: var(--texto);font-weight: 600; font-size: var(--fs-small); }
.chip:hover { border-color: var(--c-petroleo); }
.chip[aria-pressed="true"] { background: var(--c-petroleo); color: var(--c-blanco); border-color: var(--c-petroleo); }
.chip.pildora { border-radius: var(--radio-pill); }               /* categorías del inicio */

/* ============================================================
   BOTONES
   ============================================================ */
.btn { display: inline-flex; align-items: center; justify-content: center; gap: var(--sp-2); min-height: var(--tactil); padding: 0 var(--sp-5); border-radius: var(--radio); border: 2px solid transparent; font-weight: 700;white-space: nowrap; transition: background var(--trans), box-shadow var(--trans), color var(--trans); }
.btn-primario { background: var(--cta-primario); color: var(--c-blanco); }
.btn-primario:hover { background: var(--cta-primario-hover); color: var(--c-blanco); }
.btn-secundario { background: var(--cta-secundario); color: var(--c-petroleo); font-weight: 800; }   /* ámbar: UNO por pantalla */
.btn-secundario:hover { background: #F7AD3F; color: var(--c-petroleo); }
.btn-fantasma { background: var(--superficie); border-color: var(--cta-primario); color: var(--cta-primario); }
.btn-fantasma:hover { background: var(--cta-primario); color: var(--c-blanco); }
.btn-suave { background: var(--superficie); border: 1px solid var(--borde); color: var(--texto); font-weight: 600; }   /* NUEVO: Escuchar, Compartir, idioma */
.btn-cta { min-height: var(--tactil-cta); font-size: 1.125rem; border-radius: var(--radio); width: 100%; }            /* NUEVO: CTA principal (Reservar, Pagar) */
.btn[aria-disabled="true"] { background: var(--deshabilitado); border-color: var(--deshabilitado); color: var(--c-blanco); cursor: not-allowed; }
.btn-enlace { background: transparent; border: 0; padding: 0 var(--sp-2); color: var(--texto); font-weight: 700; }   /* NUEVO: «Ver todos →» */

/* ============================================================
   TARJETA DE TOUR (1d): lista horizontal 220px foto + cuerpo, 2 columnas.
   ============================================================ */
.rejilla-tours { display: grid; grid-template-columns: repeat(2, minmax(0,1fr)); gap: var(--sp-5); }
.tarjeta-tour { display: grid; grid-template-columns: 220px minmax(0,1fr); background: var(--superficie); border: 1px solid var(--borde-suave); border-radius: var(--radio-m); overflow: hidden; box-shadow: none; transition: box-shadow var(--trans); }
.tarjeta-tour:hover { box-shadow: var(--sombra-hover); transform: none; }
.tarjeta-tour .media { position: relative; aspect-ratio: auto; min-height: 200px; background: var(--placeholder-foto); display: block; }
.tarjeta-tour .media img { width: 100%; height: 100%; object-fit: cover; }
.tarjeta-tour .media .marca-agua { display: none; }                /* sin marca de agua: foto o placeholder rayado */
.tarjeta-tour .media .precio-flotante { position: absolute; right: 12px; bottom: 12px; padding: 4px 12px; border-radius: 8px; background: var(--superficie); font-weight: 800; font-size: 1.0625rem; }  /* NUEVO (versión vertical/destacados) */
.tarjeta-tour .cuerpo { padding: var(--sp-4) var(--sp-5); display: flex; flex-direction: column; gap: 8px; }
.tarjeta-tour .zona { font-size: var(--fs-caption); font-weight: 700; color: var(--texto-suave); display: block; white-space: nowrap; overflow: hidden; text-overflow: ellipsis; }  /* (27-sep-2026, Ale) ubicación larga: UNA línea con recorte elegante */
.tarjeta-tour .titulo { font-size: 1.3125rem; font-weight: 700; letter-spacing: -.01em; line-height: 1.25; }
.tarjeta-tour .titulo a { color: var(--texto); }
.tarjeta-tour .titulo a:hover { color: var(--c-teal); }
.tarjeta-tour .descripcion-corta { display: none; }                /* en lista no cabe; sí en «destacados» vertical */
.tarjeta-tour.vertical { grid-template-columns: minmax(0, 1fr); }             /* NUEVO: destacados del inicio y móvil */
.tarjeta-tour.vertical .media { aspect-ratio: 16 / 10; min-height: 0; }
.tarjeta-tour.vertical .descripcion-corta { display: -webkit-box; -webkit-line-clamp: 2; -webkit-box-orient: vertical; overflow: hidden; color: var(--texto-suave); font-size: var(--fs-small); }
.tarjeta-tour .etiquetas-cats { display: flex; gap: 8px; flex-wrap: wrap; }
/* (27-sep-2026, revisión de Ale · hallazgo 2) Antes: flex con wrap → según la tarjeta, el precio
   caía a una segunda línea él solo (y las tarjetas no cuadraban entre sí). Ahora: rejilla fija —
   fila 1: duración | horarios (una línea, dos columnas); fila 2: el precio, a la derecha. */
.tarjeta-tour .meta { display: grid; grid-template-columns: minmax(0,1fr) minmax(0,1fr); align-items: center; column-gap: 16px; row-gap: 4px; margin-top: auto; padding-top: 12px; font-size: 0.9375rem; color: var(--texto-suave); }
.tarjeta-tour .meta > span:not(.precio) { min-width: 0; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
.tarjeta-tour .meta .precio { grid-column: 2; justify-self: end; font-size: var(--fs-titulo); font-weight: 800; color: var(--texto); white-space: nowrap; }
.tarjeta-tour .meta .precio small { font-size: var(--fs-micro); font-weight: 600; color: var(--texto-suave); }
.tarjeta-tour .pie-tarjeta { display: none; }                      /* el botón «Ver tour» desaparece: toda la tarjeta enlaza */
.tarjeta-tour.destacada::before { display: none; }

/* ---- Badges ---- */
.badge { display: inline-flex; align-items: center; gap: 4px; padding: 4px 12px; border-radius: var(--radio-pill); background: var(--tinte); color: var(--texto); font-weight: 700; font-size: var(--fs-micro); border: 0; }
.badge.teal { background: var(--c-teal-aa); color: var(--c-blanco); }  /* el valor vive en el token --c-teal-aa (5,47:1 con blanco) */
.badge.neutro { background: var(--tinte); border: 0; }
.badge.exito { background: var(--tinte-exito); color: var(--c-exito); }
.badge.aviso { background: var(--tinte-aviso); color: var(--c-aviso); }
.badge.error { background: var(--tinte-error); color: var(--c-error); }
.badge.ambar { background: var(--energia-acento); color: var(--c-petroleo); }   /* NUEVO: solo «Mejor combinación» / verificado sobre foto */

/* ---- Tipo de pieza: ¿esto es un tour o un evento? (03-oct-2026, pedido de Ale) ----
   Va en TODA tarjeta, en los 8 idiomas (claves comun.tipo_tour / comun.tipo_evento).
   Tour = relleno teal AA; Evento = relleno petróleo. El color se aprende una vez y el
   icono + la palabra lo dicen sin depender del color (nunca solo color). Blancos sobre
   --c-teal-aa (5,47:1) y sobre --c-petroleo (8,6:1): los dos tokens NO cambian con el
   tema, así que no hay pareja fondo/tinta que descuadrar en oscuro. */
.badge-tipo { display: inline-flex; align-items: center; gap: var(--sp-1); padding: 4px var(--sp-3); border-radius: var(--radio-pill); font-weight: 700; font-size: var(--fs-micro); }
.badge-tipo.tour { background: var(--c-teal-aa); color: var(--c-blanco); }
.badge-tipo.evento { background: var(--c-petroleo); color: var(--c-blanco); }
.tipo-pieza { margin: 0; }

/* ---- Estados (icono + texto) ---- */
.estado { display: inline-flex; align-items: center; gap: var(--sp-2); font-weight: 700; font-size: 0.9375rem; }
.estado::before { content: ""; width: 9px; height: 9px; border-radius: 50%; background: currentColor; }
.estado.completada { color: var(--c-exito); }
.estado.pendiente { color: var(--c-aviso); }
.estado.cancelada { color: var(--c-error); }

/* ============================================================
   TÍTULOS / TEXTO
   ============================================================ */
.titulo-pantalla { font-size: var(--fs-h1); font-weight: 800; letter-spacing: var(--ls-titulo); margin-bottom: var(--sp-2); }
.subtitulo { font-size: var(--fs-h2); font-weight: 700; letter-spacing: -.01em; margin-bottom: var(--sp-4); }
.subtitulo-home { font-size: var(--fs-h2-home); font-weight: 800; letter-spacing: -.015em; }   /* NUEVO */
/* (15-sep-2026) ritmo: el subtítulo de sección no se pega a su descripción (texto-suave).
   Dentro de .tarjeta (flex con gap sp-3) el hueco ya lo da el gap: no doblar el margen. */
.subtitulo-home + .texto-suave { margin-top: var(--sp-2); }
.tarjeta .subtitulo-home + .texto-suave { margin-top: 0; }
.sobretitulo { font-size: 0.9375rem; font-weight: 700; letter-spacing: .06em;text-transform: uppercase; }   /* NUEVO: «PARA GUÍAS LOCALES» — #007486 pasa AA sobre blanco y fondo (5,5:1) */
.claim { font-size: 1.375rem; color: var(--texto-suave); margin-bottom: var(--sp-5); }
.texto-suave { color: var(--texto-suave); }
.miga { font-size: var(--fs-micro); color: var(--texto-suave); margin-bottom: var(--sp-6); }
.miga ol { list-style: none; display: flex; flex-wrap: wrap; gap: var(--sp-2); padding: 0; }
/* (17-sep-2026, feedback ojos frescos) Origen = enlace reconocible (tinta + peso),
   separador y página actual atenuados, sin competir con el H1. */
.miga a { color: var(--texto); font-weight: 600; }
.miga a:hover, .miga a:focus-visible { color: var(--cta-primario-hover); }
/* (21-sep-2026) El separador va DENTRO del paso anterior, no del siguiente: así, cuando las migas
   se parten en dos líneas en pantalla estrecha, la línea de abajo no empieza con un «›» huérfano
   (se veía como un fallo). El hueco entre pasos lo sigue poniendo el `gap` del contenedor. */
.miga li:not(:last-child)::after { content: "›"; margin-left: var(--sp-2); color: var(--texto-suave); }
.miga .miga-actual { color: var(--texto-suave); font-weight: 400; }
.miga [aria-current="page"] { color: var(--texto-suave); font-weight: 400; }

/* ============================================================
   SUPERFICIES: tarjeta genérica, aviso, banda petróleo, resumen fijo
   ============================================================ */
.tarjeta { background: var(--superficie); border: 1px solid var(--borde-suave); border-radius: var(--radio-m); padding: var(--sp-5) var(--sp-6); display: flex; flex-direction: column; gap: var(--sp-3); }    /* NUEVO; (15-sep) ritmo interno canónico sp-3 — nada pegado dentro de una tarjeta */
/* (15-sep-2026, Orden 8 Anthropic) los pasos numerados de «Mis preferencias» van en
   tarjeta (nada suelto sobre el fondo; nunca mezclar bloques con y sin tarjeta).
   El número, en círculo de tinte delante del título. */
.paso-pref { display: flex; flex-direction: column; gap: var(--sp-4); }
.paso-pref .subtitulo { display: flex; align-items: center; gap: var(--sp-3); }
.num-paso { flex: 0 0 auto; width: 34px; height: 34px; border-radius: 50%; background: var(--tinte); color: var(--texto); display: inline-flex; align-items: center; justify-content: center; font-weight: 800; }
/* (15-sep-2026, Orden 7 Anthropic) el texto de ayuda es suave (#335E68, 7,1:1), nunca
   color de enlace; y clases en vez de estilos en línea (Orden 2). */
.nota-pref { font-size: var(--fs-small); max-width: 60ch; color: var(--texto-suave); }
.campo-chips { border: 0; padding: 0; }
.fila-pref { display: flex; gap: var(--sp-4); flex-wrap: wrap; }
.fila-fuera { align-items: center; justify-content: space-between; gap: var(--sp-3); flex-wrap: wrap; max-width: 36rem; }
.select-corto { max-width: 8rem; }
.encajes-guia { margin-top: var(--sp-2); }
.guardado-pref { margin-inline-start: var(--sp-3); }
.acciones-final { margin-block: var(--sp-4); }
.tarjeta-fidelizacion { margin-block: var(--sp-4); }
.fila-fid { margin-block: var(--sp-2); }
/* (15-sep-2026, Orden 8 Anthropic) tarjeta de tinte (resumen «así te ve el sistema»):
   variante canónica de la Parte 2 de REGLAS-RUOT.md. */
.tarjeta.tinte { background: var(--tinte); border-color: var(--borde); }
/* (15-sep-2026) G10 «Mis preferencias»: ritmo vertical entre tarjetas apiladas.
   Los pasos numerados y el resumen eran <section class="tarjeta"> hermanas SIN
   margen → quedaban pegadas (0px entre superficies, aunque el texto interno
   respirase por el padding). sp-5 = aire uniforme entre tarjetas. */
main#contenido > .tarjeta.paso-pref,
main#contenido > .tarjeta.tinte { margin-top: var(--sp-5); }
.tarjeta-flotante { box-shadow: 0 12px 32px rgba(0,49,58,.10); border-radius: var(--radio-l); display: flex; flex-direction: column; gap: var(--sp-3); }   /* NUEVO: aside de reserva; (15-sep) ritmo interno sp-3 + botones uniformes */
.fijo { position: sticky; top: var(--sp-5); }                                                                                         /* NUEVO */
.aviso { display: flex; gap: var(--sp-3); align-items: flex-start; padding: 16px 16px; border-radius: 14px; border-left: 0; font-size: 0.9375rem; color: var(--texto-suave); }
/* (15-sep-2026, Orden 6 Anthropic) aviso de habilitación (Agenda/Alertas): tinte de
   fondo sin filete lateral; el filete desaparece con letra grande. */
.aviso-habilitacion { margin-block: var(--sp-2); flex-wrap: wrap; align-items: center; }
.aviso-habilitacion .btn { margin-left: auto; }
.aviso.info { background: var(--tinte-teal); }
.aviso.exito { background: var(--tinte-exito); color: var(--c-exito); font-weight: 600; }
.aviso.error { background: var(--tinte-error); color: var(--c-error); font-weight: 600; }
.banda-petroleo { position: relative; overflow: hidden; background: var(--c-petroleo); color: var(--c-blanco); border-radius: var(--radio-xl); padding: var(--sp-9); }   /* NUEVO: «Únete como guía», tours de autor */
.banda-petroleo::after { content: ""; position: absolute; right: -140px; top: -180px; width: 520px; height: 520px; border-radius: 50%; background: var(--hero-halo); pointer-events: none; }
.banda-petroleo > * { position: relative; }
.explicador-ab { display: grid; grid-template-columns: repeat(2, minmax(0,1fr)); gap: 16px; }   /* NUEVO: dos formas de reservar */
.explicador-ab .opcion { display: flex; gap: 16px; align-items: flex-start; padding: 16px 24px; border-radius: var(--radio-m); background: var(--superficie); border: 1px solid var(--borde-suave); }
/* (15-sep-2026) ritmo: el título (h2) de la opción A/B no se pega a su descripción. */
.explicador-ab .opcion h2 + .texto-suave { margin-top: var(--sp-2); }
.explicador-ab .opcion.principal { border: 2px solid var(--c-petroleo); }
.letra { display: inline-flex; align-items: center; justify-content: center; width: 36px; height: 36px; border-radius: var(--radio-s); background: var(--tinte); color: var(--texto); font-weight: 800; flex: 0 0 auto; }   /* NUEVO: A / B / 1 2 3 */
.letra.solida { background: var(--c-petroleo); color: var(--c-blanco); }
.icono-caja { display: inline-flex; align-items: center; justify-content: center; width: 44px; height: 44px; border-radius: var(--radio); background: var(--tinte); color: var(--texto); flex: 0 0 auto; }   /* NUEVO */
.icono-caja.exito { background: var(--tinte-exito); color: var(--c-exito); }
.icono-caja.aviso { background: var(--tinte-aviso); color: var(--c-aviso); }

/* ---- Barra de plazas / demanda ---- */
.barra-demanda-wrap { height: 8px; background: var(--separador); border-radius: var(--radio-pill); overflow: hidden; }
.barra-demanda-wrap .barra-demanda span { display: block; height: 100%; background: var(--c-teal); border-radius: var(--radio-pill); }
.fila-resumen.mejor { background: var(--energia-acento); border-radius: var(--radio-s); padding: var(--sp-2) var(--sp-3); }
.fila-resumen.mejor .badge { background: var(--c-petroleo); color: var(--c-blanco); }

/* ============================================================
   FORMULARIOS
   ============================================================ */
.campo label, .campo legend { display: block; font-weight: 700; font-size: var(--fs-small); margin-bottom: 8px; }
.campo input, .campo select, .campo textarea { width: 100%; min-height: 52px; border: 2px solid var(--borde); border-radius: var(--radio); background: var(--superficie); font-size: 1.0625rem; }
.campo input, .campo select { padding: 0 var(--sp-4); }
.campo textarea { padding: 12px 16px; line-height: 1.5; }
.campo input:focus, .campo select:focus, .campo textarea:focus { border-color: var(--foco); }
.campo.invalido input { border-color: var(--c-error); }
.campo .ayuda { font-size: 0.9375rem; color: var(--texto-suave); margin-top: 8px; }
.campo .error-campo { color: var(--c-error); font-weight: 700; }
.opciones { display: grid; grid-template-columns: repeat(auto-fit, minmax(220px, 1fr)); gap: 12px; }
.opciones input { position: absolute; opacity: 0; width: 1px; height: 1px; }
.opciones label { display: flex; gap: 12px; align-items: flex-start; padding: 16px 16px; border: 2px solid var(--borde); border-radius: 14px; cursor: pointer; font-weight: 600; }
.opciones input:checked + label { background: var(--tinte); border-color: var(--c-petroleo); color: var(--texto); }
.opciones input:focus-visible + label { outline: 3px solid var(--foco); outline-offset: 2px; }
.paso-titulo { display: flex; align-items: center; gap: 12px; font-size: 1.375rem; font-weight: 800; }   /* NUEVO: «1 ¿Cuántas personas sois?» */
.contador-personas { display: inline-flex; align-items: center; border: 2px solid var(--borde); border-radius: var(--radio); overflow: hidden; }  /* NUEVO */
.contador-personas button { width: 52px; height: 52px; border: 0; background: var(--superficie); font-size: 1.5rem; cursor: pointer; }
.contador-personas button:hover { background: var(--tinte); }
.contador-personas output { min-width: 64px; text-align: center; font-size: 1.5rem; font-weight: 800; }
.chip-fecha { min-width: 88px; min-height: 64px; display: flex; flex-direction: column; align-items: center; justify-content: center; line-height: 1.15; padding: 8px 12px; }   /* NUEVO: .chip.chip-fecha */
.chip-fecha .num { font-size: 1.25rem; font-weight: 800; }
.chip-fecha .dia, .chip-fecha .mes { font-size: var(--fs-micro); font-weight: 600; opacity: .85; }
.progreso-pasos { display: flex; justify-content: space-between; font-size: 0.9375rem; font-weight: 700; color: var(--texto-suave); }
.progreso-pasos .barra { height: 8px; background: var(--separador); border-radius: var(--radio-pill); overflow: hidden; margin-top: var(--sp-2); }
.progreso-pasos .barra span { display: block; height: 100%; background: var(--c-teal); border-radius: var(--radio-pill); transition: width var(--trans); }

/* ============================================================
   DETALLE (T3) — galería, datos clave, dos columnas + aside fijo
   ============================================================ */
.detalle-cab { display: flex; align-items: flex-start; justify-content: space-between; gap: var(--sp-5); margin-bottom: var(--sp-5); }    /* NUEVO */
.detalle-cab .titulo-pantalla { font-size: 3rem; }
.galeria { display: grid; grid-template-columns: 2fr 1fr; grid-template-rows: 280px 280px; gap: 12px; margin-bottom: var(--sp-7); }   /* NUEVO */
.galeria > :first-child { grid-row: 1 / 3; }
.galeria > * {border-radius: var(--radio-l); overflow: hidden; background: var(--placeholder-foto); }
.galeria img { width: 100%; height: 100%; object-fit: cover; }
.datos-clave { list-style: none; padding: 0; display: grid; grid-template-columns: repeat(4, minmax(0,1fr)); gap: 12px; }   /* NUEVO */
.datos-clave li { display: flex; flex-direction: column; gap: var(--sp-2); padding: var(--sp-4); background: var(--superficie); border: 1px solid var(--borde-suave); border-radius: 14px; }
.datos-clave .rotulo { display: inline-flex; align-items: center; gap: 8px; font-size: var(--fs-caption); font-weight: 700; color: var(--texto-suave); }
.datos-clave strong { font-size: 1.25rem; }
.dos-columnas { display: grid; grid-template-columns: minmax(0,1fr) 380px; gap: var(--sp-8); align-items: start; }   /* NUEVO */
.detalle-seccion { margin: 0; padding: 0; border: 0; }
/* (15-sep-2026) Regla de ritmo del area guia: bloques de la columna principal se separan sp-6 */
.guia-dos-columnas > .columna-guia > * + *, .dos-columnas > div > * + * { margin-top: var(--sp-6); }
/* (15-sep-2026) Regla de ritmo de la ficha: TODOS los bloques de la columna se separan
   con el mismo escalón (sp-7 = 40px) — el mismo principio que la home. Antes cada pieza
   dependía de su margen propio (o de ninguno) y las secciones quedaban PEGADAS (0px). */
.detalle-seccion .subtitulo { font-size: 1.625rem; font-weight: 800; margin-bottom: 16px; }
.lista-checks { list-style: none; padding: 0; display: grid; grid-template-columns: minmax(0,1fr); gap: 12px 24px; }
/* (15-sep-2026, Orden 1 Anthropic) listas de checks a UNA columna por defecto: en dos
   columnas, las frases largas se partían a una palabra por línea en anchos intermedios.
   Dos columnas solo con .dos-col, y a propósito. */
/* (15-sep-2026, Orden 5 Anthropic) cabecera de sección con el botón de aviso discreto */
.cab-seccion { display: flex; align-items: center; justify-content: space-between; gap: var(--sp-3); flex-wrap: wrap; }
.cab-seccion :is(.subtitulo, h2, h3) { margin-bottom: 0; flex: 1; min-width: 0; }
/* (15-sep-2026) REGLA GENERAL: la acción de una cabecera con título es COMPACTA
   (icono 44×44 con aria-label) — un botón con texto compite con el título y lo parte. */
.cab-seccion > .btn, .cab-seccion > .anotacion-boton { margin-top: 0; flex: 0 0 auto; }
/* (15-sep-2026, Gemini) el aviso de sección es SOLO ICONO (bandera) con aria-label:
   el texto largo partía los títulos («What's / included») y desbordaba la tarjeta. */
/* (20-sep-2026, nota de Ale) la bandera es SOLO el icono: sin recuadro ni fondo. Antes no tenía
   reglas propias y se veía el botón por defecto del navegador (borde negro y fondo gris).
   El foco de teclado se conserva: sin él no se sabría por dónde va quien navega con teclado. */
.aviso-seccion-btn { min-width: 44px; min-height: 44px; display: inline-flex; align-items: center;
  justify-content: center; padding: var(--sp-1) var(--sp-2); background: transparent; border: 0;
  border-radius: var(--radio-s); color: var(--texto-suave); cursor: pointer; }
.aviso-seccion-btn:hover { color: var(--texto); background: transparent; }
.aviso-seccion-btn:focus-visible { outline: 3px solid var(--foco); outline-offset: 2px; }
.aviso-seccion-btn .ico { width: 20px; height: 20px; }
/* (15-sep-2026) REGLA GENERAL: el texto dentro de un flex va SIEMPRE envuelto en su
   elemento con flex:1 + min-width:0 — el texto desnudo se comporta como item rígido
   y produce viñetas huérfanas y columnas colapsadas. */
.lista-checks li > span { flex: 1; min-width: 0; }
/* (15-sep-2026) piezas del detalle antes con estilos en línea (Orden 2: el JS no pinta) */
.meta-acciones { display: flex; gap: var(--sp-2); flex-wrap: wrap; align-items: center; }
.detalle-descripcion { max-width: 60ch; font-size: 1.3125rem; }
.nota-acc { font-size: var(--fs-small); }
/* (15-sep-2026) Modal «Avísame» (me_interesa) — antes pintado por JS con la paleta
   ajena (var(--card,#fff), #666, #0b6e4f = el error del modal verde, Reglas 1-2).
   Ahora clases RUOT: todo el aspecto vive aquí. */
/* 18-sep-2026 — capa y pestañas del modal de identificación (reserva sin cuenta).
   El JS pone clases; el CSS decide cómo se ve (regla de diseño 2). Nada en línea. */
.capa-modal { position: fixed; inset: 0; display: flex; align-items: center; justify-content: center; background: var(--velo-modal); z-index: 9998; padding: var(--sp-4); }
.inv-pestanas { display: flex; gap: var(--sp-2); flex-wrap: wrap; }
.inv-pestana[aria-pressed="true"] { background: var(--tinte); border-color: var(--borde-fuerte); font-weight: 700; }
.inv-check { display: flex; align-items: flex-start; gap: var(--sp-2); font-size: var(--fs-base); }
.inv-check input { width: 1.35rem; height: 1.35rem; margin: 0; flex: 0 0 auto; }
.inv-check span { flex: 1; min-width: 0; }
.modal-mi { background: var(--superficie); color: var(--texto); border: 1px solid var(--borde-suave); border-radius: var(--radio-m); padding: var(--sp-5); max-width: 400px; width: 100%; position: relative; display: flex; flex-direction: column; gap: var(--sp-3); }
.modal-mi-cerrar { position: absolute; top: var(--sp-2); right: var(--sp-2); border: 0; background: transparent; color: var(--texto-suave); min-width: 44px; min-height: 44px; display: inline-flex; align-items: center; justify-content: center; cursor: pointer; border-radius: var(--radio); }
.modal-mi-cerrar:hover { background: var(--tinte); color: var(--texto); }
.modal-mi-titulo { margin: 0; font-size: 1.375rem; display: flex; align-items: center; gap: var(--sp-2); }
.modal-mi-sub { margin: 0; }
.modal-mi-label { display: block; font-weight: 700; }
/* (26-sep-2026) Semana de piel · utilidades EXTRAÍDAS del JS (regla de casa: el JS pone clases,
   el CSS decide). Nombres por token: u-fs-small (--fs-small), u-my4 (margin-block --sp-4),
   u-mt4/u-mt6/u-mb3/u-mb2 (margin-top/bottom --sp-4/6/3/2), u-m0 (margin 0), u-b0p0 (border 0, padding 0). */
.u-fs-small { font-size: var(--fs-small); }
.u-my4 { margin-block: var(--sp-4); }
.u-ch48 { max-width: 48ch; }
.u-ch56 { max-width: 56ch; }
.u-ch60 { max-width: 60ch; }
.u-ch64 { max-width: 64ch; }
.u-ch8r { max-width: 8rem; }
.u-fila-g2 { display: flex; gap: var(--sp-2); flex-wrap: wrap; }
.u-fila-g3 { display: flex; justify-content: space-between; align-items: center; gap: var(--sp-3); }
.u-fill-melocoton { fill: var(--c-melocoton); }
.u-fs-micro { font-size: var(--fs-micro); }
.u-fs11875 { font-size: 1.1875rem; }
.u-fs25 { font-size: 2.5rem; }
.u-fw600 { font-weight: 600; }
.u-mb0 { margin-bottom: 0; }
.u-mb4 { margin-bottom: var(--sp-4); }
.u-mb5 { margin-bottom: var(--sp-5); }
.u-mie3 { margin-inline-end: var(--sp-3); }
.u-mlauto { margin-left: auto; }
.u-mt2 { margin-top: var(--sp-2); }
.u-mt3 { margin-top: var(--sp-3); }
.u-mt5 { margin-top: var(--sp-5); }
.u-mt7 { margin-top: var(--sp-7); }
.u-my0b { margin-block: 0 var(--sp-2); }
.u-my2 { margin-block: var(--sp-2); }
.u-my2b { margin-block: var(--sp-2) 0; }
.u-my3 { margin-block: var(--sp-3); }
.u-my5 { margin-block: var(--sp-5); }
.u-nowrap { white-space: nowrap; }
.u-op9 { opacity: .9; }
.u-p8 { padding: var(--sp-8); }
.u-rel { position: relative; }
.u-w64 { width: 64px; height: 64px; margin-bottom: var(--sp-4); }
.u-w14 { max-width: 14rem; }
.u-negrita { font-weight: 700; }
.u-fs-caption { font-size: var(--fs-caption); }
.u-fila-base { display: flex; justify-content: space-between; align-items: baseline; gap: var(--sp-4); flex-wrap: wrap; }
.fundador .u-h48 { min-height: 48px; }
.u-h44 { min-height: 44px; }
/* (26-sep-2026) separación del bloque de acciones del panel (valor original 1.25rem) */
.f-acciones-sep { margin-bottom: 1.25rem; }
/* (26-sep-2026) ritmo de casa entre la tarjeta de datos y la miga (12px) */
.fundador .f-datos + .miga { margin-top: var(--sp-3); }
.f-aviso-plano { margin-block: 0 var(--sp-3); }
.f-semaforo-caja { border: 1px solid var(--borde); border-radius: var(--radio); padding: .9rem; margin-bottom: var(--sp-4); }
/* (26-sep-2026) fila de lista con separador (extraída del JS; el bloque anterior se perdió por ancla inventada) */
.fila-lista { display: flex; justify-content: space-between; align-items: center; gap: var(--sp-3); padding: var(--sp-3) 0; border-bottom: 1px solid var(--borde-suave); }

.u-mt4 { margin-top: var(--sp-4); }
.u-mt6 { margin-top: var(--sp-6); }
.u-mb3 { margin-bottom: var(--sp-3); }
.u-mb2 { margin-bottom: var(--sp-2); }
.u-m0 { margin: 0; }
.u-b0p0 { border: 0; padding: 0; }
/* (25-sep-2026) Semana de piel: medido campo→etiqueta siguiente = 0px en los modales de
   formulario (no son hijos flexibles, el ritmo del contenedor no les llega). 12px = su ritmo. */
.modal-mi-input + .modal-mi-label, .modal-mi-input + .inv-check { margin-top: var(--sp-3); }
.modal-mi-input { width: 100%; box-sizing: border-box; padding: var(--sp-3); border: 1px solid var(--borde); border-radius: var(--radio-s); font-size: var(--fs-base); background: var(--superficie); color: var(--texto); }
.modal-mi-input:focus { outline: 3px solid var(--foco); outline-offset: 2px; }
.modal-mi-priv { margin: 0; display: flex; align-items: center; gap: var(--sp-2); color: var(--texto-suave); font-size: var(--fs-small); }
.modal-mi-priv .ico { flex: 0 0 auto; }
.btn-ancho { width: 100%; }
.modal-mi-cuenta { margin-top: var(--sp-1); }
.modal-mi-aviso { margin: var(--sp-3) 0 0; }

/* (25-sep-2026) Diálogo de cancelar reserva: antes la caja se pintaba con estilos en línea
   (style.cssText + var(--card,#fff), variables ajenas al sitio) → ahora clase propia con tokens.
   La separación entre contenido y botones la da el gap (el bug: la política y los botones iban pegados). */
.dialogo-cancelar { background: var(--superficie); color: var(--texto); border: 1px solid var(--borde-suave); border-radius: var(--radio-m); padding: var(--sp-5); max-width: 440px; width: 100%; display: flex; flex-direction: column; gap: var(--sp-3); }
.dialogo-cancelar h2, .dialogo-cancelar p { margin: 0; }
.dialogo-cancelar .acciones { display: flex; gap: var(--sp-2); flex-wrap: wrap; }
.dialogo-cancelar .acciones .btn { flex: 1 1 auto; }   /* igual de cómodos en móvil (objetivos grandes) */

/* (15-sep-2026) Regla 7 + Regla 2: el toggle de ver contraseña es SVG de línea y el
   campo con acción deja sitio al botón; la nota de campo en su clase. Un solo sitio
   para el patrón en TODA la web (login, alta de guía, token del fundador). */
.campo-con-toggle { position: relative; display: block; }
.campo-con-toggle > input, input.campo-con-accion { padding-right: 44px; }
.btn-toggle-ojo { position: absolute; right: 0; top: 50%; transform: translateY(-50%); border: 0; background: transparent; color: var(--texto-suave); cursor: pointer; min-width: 44px; min-height: 44px; display: inline-flex; align-items: center; justify-content: center; border-radius: var(--radio); padding: 0; }
.btn-toggle-ojo:hover { color: var(--texto); background: var(--tinte); }
.btn-toggle-ojo .ico { width: 22px; height: 22px; }
.nota-campo { font-size: var(--fs-small); margin: 0; }
.mis-intereses-list { list-style: none; padding: 0; margin-top: var(--sp-4); display: flex; flex-direction: column; gap: var(--sp-3); }

/* (15-sep-2026) REGLA GENERAL: un icono de estado y su texto van SIEMPRE en fila,
   nunca apilados en columna (el icono suelto deja huecos y rompe la lectura). */
.fila-ico { display: flex; align-items: center; gap: var(--sp-3); }
.fila-ico > :is(p, span) { margin: 0; }
.habilitaciones-seccion { margin-top: var(--sp-5); }
/* (15-sep-2026) el aire entre bloques de la ficha lo da la regla de ritmo de la
   columna (.dos-columnas > div > * + *); sin márgenes propios para no duplicar. */
.aviso-estacional { margin-block: var(--sp-3); }
.lista-checks li { display: flex; gap: 12px; align-items: flex-start; flex-wrap: wrap; padding: 0; }
.lista-checks li::before { content: ""; position: static; flex: 0 0 auto; margin-top: 12px; width: 8px; height: 8px; border-radius: 50%; background: var(--c-teal); border: 0; transform: none; }
/* El punto teal es la viñeta de las listas SIN icono (detalle «Qué verás»/«Incluye»).
   Cuando el ítem ya lleva icono('check'), el punto sobra → se quita (auditoría Anthropic 06-sep). */
.lista-checks li:has(> .ico)::before { content: none; }
.rejilla-salidas { display: grid; grid-template-columns: repeat(2, minmax(0,1fr)); gap: 16px; }
.salida { background: var(--superficie); border: 1px solid var(--borde-suave); border-radius: var(--radio-m); padding: 16px 24px; gap: 12px; }
/* (15-sep-2026, C4 Anthropic) la barra de demanda lleva su etiqueta «Ocupación» y las
   piezas del detalle van en clases, no en estilos en línea (Orden 2). */
.salida-plazas { font-size: var(--fs-small); }
.salida-acciones { margin-block: var(--sp-3); }
.aside-separador { border: 0; border-top: 1px solid var(--separador); }
.aside-nota { margin-bottom: var(--sp-3); }
.media-anuncio { min-height: 120px; border-radius: 12px; }
.salida-cab strong { font-size: 1.1875rem; }
.precio-grande { font-size: 2.5rem; font-weight: 800; letter-spacing: var(--ls-titulo); line-height: 1; }   /* NUEVO */
.tabla-precios { list-style: none; padding: 0; display: grid; gap: 8px; font-size: var(--fs-small); }         /* NUEVO */
.tabla-precios li { display: flex; justify-content: space-between; padding: 8px 12px; border-radius: var(--radio-s); background: var(--c-fondo); }
.lista-demandas { list-style: none; margin: 0; padding: 0; display: grid; gap: 8px; font-size: var(--fs-small); }
.lista-demandas li { display: flex; justify-content: space-between; padding: 8px 12px; border-radius: var(--radio-s); background: var(--c-fondo); }

/* ============================================================
   INICIO — descubrimiento (antes de buscar)
   ============================================================ */
.seccion-home { display: flex; flex-direction: column; gap: var(--sp-5); }
.seccion-home + .seccion-home { margin-top: var(--sp-10); }
.seccion-home .cab { display: flex; align-items: baseline; justify-content: space-between; gap: var(--sp-4); }
.rejilla-destinos { display: grid; grid-template-columns: repeat(5, minmax(0,1fr)); gap: var(--sp-4); }
.destino { position: relative; aspect-ratio: 4 / 5; border-radius: 18px; overflow: hidden; border: 0; padding: 0; cursor: pointer; text-align: left; background: var(--placeholder-foto); }
.destino:hover { box-shadow: var(--sombra-hover); }
.destino::after { content: ""; position: absolute; inset: 0; background: linear-gradient(180deg, rgba(0,84,97,0) 55%, rgba(0,84,97,.5) 100%); }   /* (22-sep-2026) Revisión de Ale: el fijo + el anclado juntos oscurecían la tarjeta. Ahora el fijo es un scrim suave; el anclado (.texto::before, alfas medidos) sostiene el AA. */
.destino .texto { position: absolute; left: 16px; right: 16px; bottom: 16px;color: var(--c-blanco); display: flex; flex-direction: column; line-height: 1.2; }
/* (22-sep-2026) VELO ANCLADO AL TEXTO — el degradado de la tarjeta (::after) está fijo abajo y con
   letra grande las letras crecían fuera de él (hasta 87 % del fondo por debajo de 3:1 con a++). Este
   velo va DETRÁS del bloque de texto y crece con él (medidas en em), así que siempre hay velo bajo
   las letras, con cualquier tamaño. Cierra los hallazgos 1, 5, 6 y 7 de la auditoría pública y el 1
   de la de flujos. Los alfas están medidos: .82 en la parte alta del nombre y .93+ bajo la segunda
   línea (que es letra pequeña y necesita 4,5:1). */
.destino .texto::before {
  content: ""; position: absolute; left: -16px; right: -16px; top: -1.25em; bottom: -16px; z-index: -1;
  background: linear-gradient(180deg, rgba(0,84,97,0) 0, rgba(0,84,97,.45) .55em,
              rgba(0,84,97,.82) 1.3em, rgba(0,84,97,.93) 2.7em, rgba(0,84,97,.96) 100%);
}
.destino .texto strong { font-size: 1.375rem; font-weight: 800; }
.rejilla-3 { display: grid; grid-template-columns: repeat(3, minmax(0,1fr)); gap: var(--sp-5); }
.rejilla-4 { list-style: none; margin: 0; padding: 0; display: grid; grid-template-columns: repeat(4, minmax(0,1fr)); gap: var(--sp-4); }
.lista-salidas-hoy { list-style: none; padding: 0; background: var(--superficie); border: 1px solid var(--borde-suave); border-radius: 18px; overflow: hidden; }
.lista-salidas-hoy li { display: grid; grid-template-columns: 96px minmax(0,1fr) 160px 220px 130px; align-items: center; gap: var(--sp-5); padding: var(--sp-4) var(--sp-5); border-bottom: 1px solid var(--separador); }
.lista-salidas-hoy .hora { font-size: 1.5rem; font-weight: 800; }
.pasos-home { list-style: none; padding: 0; display: grid; grid-template-columns: repeat(3, minmax(0,1fr)); gap: var(--sp-6); }
.pasos-home li { display: flex; flex-direction: column; gap: 12px; }
.pasos-home h3, .pasos-home h2 { font-size: 1.375rem; font-weight: 700; }
.pasos-home h3 .n, .pasos-home h2 .n { color: #007486; margin-right: 8px; }
.pie-grande { background: var(--superficie); border-top: 1px solid var(--borde-suave); margin-top: var(--sp-10); padding: var(--sp-9) 0 var(--sp-6); }
.pie-grande .rejilla { display: grid; grid-template-columns: 1.4fr 1fr 1fr 1fr; gap: var(--sp-7); font-size: var(--fs-small); }
.pie-grande nav { display: flex; flex-direction: column; gap: 12px; }
.pie-grande nav strong { font-size: 0.9375rem; letter-spacing: .04em; color: var(--texto-suave); }
.pie-grande a { font-weight: 600; }
.pie { background: var(--c-petroleo); color: var(--c-blanco); padding-block: var(--sp-7); }   /* pie compacto (interiores) */
.pie a { color: var(--c-blanco); font-weight: 600; }

/* ============================================================
   PANEL DE PERSONALIZACIÓN — widget (misma lógica, nueva piel)
   ============================================================ */
.widget-panel { position: fixed; right: var(--sp-5); bottom: var(--sp-5); z-index: 200; width: 56px; height: 56px; border-radius: 50%; background: var(--superficie); color: var(--c-petroleo); border: 3px solid var(--c-petroleo); box-shadow: 0 6px 20px rgba(0,49,58,.3); display: flex; align-items: center; justify-content: center; font-size: 1.6rem; cursor: pointer; }
.widget-panel .simbolo-diversidad { width: 42px; height: auto; display: block; }
.panel-accesibilidad .panel-cerrar { position: absolute; top: var(--sp-3); right: var(--sp-3); }
.panel-accesibilidad { position: fixed; right: var(--sp-5); bottom: 96px; z-index: 300; width: min(340px, calc(100vw - 2rem)); background: var(--superficie); border: 1px solid var(--borde); border-radius: var(--radio-m); box-shadow: 0 12px 40px rgba(0,49,58,.22); padding: var(--sp-5); font-size: var(--fs-small); max-height: calc(100dvh - 120px); overflow-y: auto; }
.panel-accesibilidad[hidden] { display: none; }
.panel-accesibilidad h2 { font-size: 1.25rem; font-weight: 700; margin-bottom: var(--sp-3); }
.panel-accesibilidad .fila { display: flex; align-items: center; justify-content: space-between; gap: var(--sp-2); margin-bottom: 16px; flex-wrap: wrap; }
.panel-accesibilidad .segmento { flex-wrap: wrap; max-width: 100%; }
.segmento { display: inline-flex; border: 2px solid var(--borde); border-radius: var(--radio-s); overflow: hidden; }
.segmento button { min-height: var(--tactil); padding: 0 12px; border: 0; background: var(--superficie); cursor: pointer; font-weight: 600;  min-width: 44px; }
.segmento button[aria-pressed="true"] { background: var(--c-petroleo); color: var(--c-blanco); }
.panel-accesibilidad .btn.tactil-compacto { min-height: var(--tactil); padding: 0 var(--sp-4); border-radius: var(--radio-s); }

/* ============================================================
   MODAL de anotación (auditoria.js) — nueva piel
   ============================================================ */
.anotacion-fondo { position: fixed; inset: 0; background: rgba(0,49,58,.5); z-index: 400; }
.anotacion-modal { position: fixed; left: 50%; top: 10vh; transform: translateX(-50%); width: min(620px, calc(100vw - 2rem)); max-height: 80vh; overflow-y: auto; overscroll-behavior: contain; z-index: 401; background: var(--superficie); border-radius: var(--radio-xl); padding: var(--sp-6); box-shadow: var(--sombra-modal); display: flex; flex-direction: column; gap: var(--sp-5); }
.anotacion-modal h2 { font-size: 1.75rem; font-weight: 800; }
.anotacion-modal blockquote { margin: 0; padding: 12px 16px; border-left: 3px solid var(--borde); background: var(--c-fondo); border-radius: 0 var(--radio-s) var(--radio-s) 0; font-size: var(--fs-small); color: var(--texto-suave); max-height: 24vh; overflow-y: auto; }
.anotacion-modal .opciones { grid-template-columns: 1fr 1fr; }
.anotado { display: inline-flex; align-items: center; gap: 4px; padding: 4px 12px; border-radius: var(--radio-pill); background: var(--tinte-exito); color: var(--c-exito); font-size: var(--fs-micro); font-weight: 700; }   /* badge «Anotado / Anotado por ti» */

/* ============================================================
   MÓVIL (≤ 720px)
   ============================================================ */
@media (max-width: 720px) {
  :root { --pad-lateral: 1rem; }
  .cabecera .barra { min-height: 60px; gap: var(--sp-3); }
  .btn { white-space: normal; }                                   /* reflow: los botones no fijan el ancho mínimo */
  .menu-principal { display: none; }                                /* hamburguesa → .menu-movil */
  .btn-menu-movil { display: inline-flex; align-items: center; justify-content: center; width: var(--tactil); height: var(--tactil); padding: 0; border: 0; background: transparent; color: var(--c-blanco); border-radius: var(--radio-s); }
  .btn-menu-movil:hover, .btn-menu-movil:focus-visible { background: rgba(255,255,255,.12); }
  .menu-movil { display: block; position: fixed; top: 60px; left: 0; right: 0; z-index: 99; background: var(--c-petroleo); padding: var(--sp-3) var(--sp-4) var(--sp-4); box-shadow: 0 12px 24px rgba(0,49,58,.25); }
  .menu-movil[hidden] { display: none; }
  .menu-movil-lista { list-style: none; margin: 0; padding: 0; display: flex; flex-direction: column; gap: 2px; }
  .menu-movil-lista a { display: flex; align-items: center; min-height: var(--tactil); padding: 0 var(--sp-3); color: var(--c-blanco); font-weight: 600; font-size: var(--fs-small); border-radius: var(--radio-s); opacity: .95; }
  .menu-movil-lista a:hover, .menu-movil-lista a:focus-visible { background: rgba(255,255,255,.12); opacity: 1; }
  .menu-movil-lista a[aria-current="page"] { opacity: 1; font-weight: 700; box-shadow: inset 3px 0 0 var(--energia-acento); }
  .btn-filtros-movil { display: inline-flex; }
  .hero { padding-block: var(--sp-6) var(--sp-8); }
  .hero .titulo-pantalla { font-size: 2.25rem; }
  .hero .claim { font-size: 1.0625rem; }
  .buscador-hero { margin-top: -32px; margin-bottom: var(--sp-7); padding: 12px; border-radius: var(--radio-m); }
  .buscador-texto input { font-size: 1.0625rem; }
  .hoja-filtros .fila-filtros { display: flex; flex-direction: column; align-items: stretch; }   /* filtros → hoja inferior (17-sep-2026) */
  .rejilla-tours, .rejilla-3, .rejilla-salidas, .lista-checks, .explicador-ab, .datos-clave { grid-template-columns: minmax(0, 1fr); }
  .rejilla-destinos { grid-template-columns: repeat(2, minmax(0,1fr)); }
  .pasos-home { grid-template-columns: minmax(0, 1fr); }
  .tarjeta-tour { grid-template-columns: minmax(0, 1fr); }
  .tarjeta-tour .media { aspect-ratio: 16 / 9; min-height: 0; }
  .dos-columnas { grid-template-columns: minmax(0, 1fr); }
  .fijo { position: static; }
  .galeria { grid-template-columns: minmax(0, 1fr); grid-template-rows: auto; }
  .galeria > :first-child { grid-row: auto; }
  .galeria > * { aspect-ratio: 16 / 9; }
  .detalle-cab { flex-direction: column; }
  .detalle-cab .titulo-pantalla { font-size: 2rem; }
  .lista-salidas-hoy li { grid-template-columns: 72px minmax(0,1fr); }
  .lista-salidas-hoy li > :nth-child(n+3) { grid-column: 2; }
  .pie-grande .rejilla { grid-template-columns: 1fr 1fr; }
  .banda-petroleo { padding: var(--sp-6); }
  .cta-fija { position: sticky; bottom: 0; z-index: 50; background: var(--superficie); border-top: 1px solid var(--borde-suave); padding: 12px var(--pad-lateral); display: flex; gap: 12px; align-items: center; }   /* NUEVO: CTA pegado abajo en detalle/reserva */
  .cta-fija .btn { flex: 1; }
  .hoja-filtros { position: fixed; left: 0; right: 0; bottom: 0; z-index: 300; background: var(--superficie); border-radius: var(--radio-xl) var(--radio-xl) 0 0; padding: 12px var(--sp-4) var(--sp-5); max-height: 85vh; overflow: auto; box-shadow: 0 -12px 40px rgba(0,49,58,.25); display: flex; flex-direction: column; gap: var(--sp-4); }   /* NUEVO */
  .hoja-filtros[hidden] { display: none; }
  .hoja-filtros .asa { display: block; width: 44px; height: 5px; border-radius: var(--radio-pill); background: var(--borde); margin: 0 auto; }
  .hoja-filtros .grupo-filtro-cuerpo { position: static; box-shadow: none; border: 0; padding: 0; min-width: 0; }
  .hoja-filtros .grupo-filtro summary { display: none; }
  .hoja-filtros .acciones { position: sticky; bottom: 0; background: var(--superficie); padding-top: var(--sp-2); display: flex; gap: var(--sp-2); }
}

/* (22-sep-2026 · decisiones de Ale) En ESCRITORIO los filtros van a la vista y el botón «Filtros» no se ve.
   Dos reglas viejas lo rompían en silencio: el .btn base (185) pisaba el display:none del botón (mismo
   peso, más tarde) y el [hidden] !important global (973) pisaba el display:contents de la hoja (18-sep).
   Se restauran SOLO para estos controles y SOLO en escritorio; ≤720 se queda la hoja inferior con su botón. */
@media (min-width: 721px) {
  .btn.btn-filtros-movil { display: none; }
  .hoja-filtros[hidden] { display: contents !important; }
}

/* ============================================================
   ÁREA FUNDADOR (reglas principales; los complementos siguen abajo)
   ============================================================ */
.fundador {}
.fundador .menu-principal a { font-size: 1.125rem; padding: 0 var(--sp-4); }
.fundador .tarjeta-metrica .cifra { font-size: 4.5rem; line-height: 1; font-weight: 800; letter-spacing: -.03em; }
.fundador .tarjeta-metrica .cifra small { font-size: 2rem; font-weight: 700; color: var(--texto-suave); margin-left: 8px; }
.fundador .tarea .acciones { display: flex; flex-direction: column;}
.fundador .btn-deshacer { min-height: var(--tactil-cta); font-size: 1.125rem; font-weight: 800; }
.fundador .hora-grande {line-height: 1.1; }

/* ---- Impresión G11 — sin cambios ---- */
.solo-impresion { display: none; }
@media print {
  .cabecera, .miga, .pie, .pie-grande, .widget-panel, .panel-accesibilidad, .skip-link, .salto-contenido, .btn-descargar-pdf, #anotacion-root, main#contenido > :not(#glector-print) { display: none !important; }
  @page { margin: 16mm 15mm; }
  #glector-print { display: block !important; font-size: 15px; line-height: 1.55; }
  #glector-print h1 { font-size: 0.8rem; letter-spacing: 0.08em; color: var(--texto-suave); margin: 0 0 4px; }
  #glector-print header { border-bottom: 2px solid var(--borde-suave); padding-bottom: 10px; margin-bottom: 18px; }
  #glector-print header h2 { font-size: 1.5rem; margin: 0 0 6px; }
  #glector-print .parada-imprimir h2 { font-size: 1.15rem; border-bottom: 1px solid var(--separador); padding-bottom: 3px; margin: 0 0 8px; }
  #glector-print .bloques-guion p { margin: 0 0 0.75em; }
  #glector-print .fuentes-linea { font-size: 0.8rem; color: var(--texto-suave); }
  body { background: #fff; color: #000; }
  main#contenido { padding: 0; min-height: 0; }
  #glector-print h1, #glector-print h2 { break-after: avoid; }
  .parada-imprimir { break-inside: avoid; margin-bottom: 22px; }
}

/* ============================================================
   ÁREA FUNDADOR — complementos (antes en css/fundador.css)
   ============================================================ */
.fundador .f-rejilla { display: grid;}
.fundador .f-tarjeta { background: var(--superficie); border: 1px solid var(--borde);padding: var(--sp-5); display: flex; flex-direction: column;}
.fundador .f-tarjeta h3 { font-size: 1.25em; line-height: 1.3; }
.fundador .f-meta {display: flex; gap: var(--sp-3); flex-wrap: wrap; }
.fundador .f-titulo-bloque { font-size: var(--fs-titulo); font-weight: 700; margin: var(--sp-6) 0 var(--sp-3);}
.fundador .f-chips { display: flex; gap: var(--sp-2); flex-wrap: wrap; margin-block: var(--sp-3); }
.fundador .f-lista {display: grid; gap: var(--sp-2); }
.fundador .f-lista li { background: var(--superficie); border: 1px solid var(--borde); border-radius: var(--radio);}
.fundador .f-editor { display: grid; gap: var(--sp-5); align-items: start; margin-block: var(--sp-4); }
@media (min-width: 60rem) { .fundador .f-editor { grid-template-columns: minmax(0, 1fr) minmax(0, 1fr); } }
.fundador .f-paso { margin-bottom: var(--sp-3); }
.fundador .f-paso summary { cursor: pointer; font-weight: 700; min-height: var(--tactil); display: flex; align-items: center; gap: var(--sp-3); list-style: none; }
.fundador .f-paso summary::-webkit-details-marker { display: none; }
.fundador .f-paso-cuerpo { padding-top: var(--sp-3); display: flex; flex-direction: column; gap: var(--sp-3); }
.fundador .f-preview {border-radius: var(--radio);}
.fundador .f-imagen-pendiente { background: var(--superficie-alt); border: 1px dashed var(--borde); border-radius: var(--radio); padding: var(--sp-4); color: var(--texto-suave); display: flex; gap: var(--sp-2); align-items: flex-start; }
.fundador .f-imagen-preview { aspect-ratio: 4 / 3; border-radius: var(--radio); overflow: hidden; background: var(--placeholder-foto); }
.fundador .f-imagen-preview img { width: 100%; height: 100%; object-fit: cover; display: block; }
.fundador .f-acciones { display: flex; gap: var(--sp-3); flex-wrap: wrap; margin-block: var(--sp-4); }
.fundador .f-acciones .btn { min-height: var(--tactil); }
.fundador .f-aviso { padding: var(--sp-3) var(--sp-4); border-radius: var(--radio); margin-block: var(--sp-3); font-weight: 700; }
.fundador .f-aviso:empty { display: none; }
.fundador .f-aviso[data-tipo="exito"] { background: var(--tinte-exito); border-left: 4px solid var(--c-exito); color: var(--c-exito); }
.fundador .f-aviso[data-tipo="aviso"] { background: var(--tinte-aviso); border-left: 4px solid var(--c-aviso); color: var(--c-aviso); }
.fundador .f-nota { margin-top: var(--sp-5); max-width: 60ch; }
.fundador .f-cita { margin: 0; background: var(--superficie-alt); border-left: 4px solid var(--borde-fuerte);color: var(--texto); overflow-wrap: anywhere; }
.fundador .f-sugerencia-badges { display: flex; gap: var(--sp-2); flex-wrap: wrap; margin: 0; }
.fundador .f-sugerencia-nota { margin: 0; background: #FDF3E0; border-left: 4px solid var(--energia-acento);color: var(--texto); }
.fundador .f-sugerencia .f-acciones { margin-block: var(--sp-3) 0; }
.fundador .f-sugerencia .f-acciones .btn { min-height: 48px; font-size: 1.1rem; }
.fundador .f-semaforo { border-left: 4px solid var(--borde); }
.fundador .f-semaforo-rojo { background: var(--tinte-error); border-left-color: var(--c-error); }
.fundador .f-semaforo-azul { background: var(--tinte-teal); border-left-color: var(--c-teal); }
.fundador .f-semaforo-verde { background: var(--tinte-exito); border-left-color: var(--c-exito); }
.fundador .f-semaforo-badge { margin: 0; }
.fundador .f-semaforo-mensaje {margin: 0; }
.fundador .f-semaforo-accion { margin-top: var(--sp-2); display: flex; flex-direction: column; gap: var(--sp-2); }
.fundador .f-semaforo .f-acciones { margin-block: var(--sp-2) 0; }
.fundador .f-semaforo .f-acciones .btn { min-height: 48px; }

/* ---- F3 inbox único (.tarea) — estructura interna ---- */
.fundador .bandeja {}
.fundador .tarea-badges {align-items: center; }
.fundador .tarea h2 { font-size: 1.5rem; font-weight: 800; letter-spacing: -.01em; line-height: 1.25; }
.fundador .tarea blockquote { margin: 0; padding: 12px 16px; border-left: 3px solid var(--borde); background: var(--c-fondo); border-radius: 0 var(--radio-s) var(--radio-s) 0; font-size: var(--fs-small); color: var(--texto-suave); }
.fundador .chip .n { display: inline-flex; align-items: center; justify-content: center; min-width: 22px; height: 22px; padding: 0 8px; border-radius: var(--radio-pill); background: var(--tinte); color: var(--texto); font-size: var(--fs-micro); font-weight: 800; }
.fundador .chip[aria-pressed="true"] .n { background: rgba(255,255,255,.22); color: var(--c-blanco); }

/* ---- F1 Hoy + F4 Métricas — estructura nueva ---- */
.fundador .rejilla { display: grid; gap: var(--sp-4); grid-template-columns: repeat(auto-fill, minmax(280px, 1fr)); }
.fundador .tarjeta-metrica-cab {font-weight: 700; color: var(--texto-suave); }

/* ============================================================
   MODAL de anotación — complementos (antes en css/auditoria.css)
   ============================================================ */
.anotacion-bloque { position: relative; }
.anotacion-bloque .anotacion-boton { display: inline-flex; align-items: center; gap: var(--sp-1); margin-top: var(--sp-1); min-height: 44px; font-size: var(--fs-small); color: var(--texto-suave); background: transparent; border: 1px dashed transparent; border-radius: var(--radio-s); padding: 0 var(--sp-2); cursor: pointer; }
.anotacion-bloque:hover .anotacion-boton, .anotacion-bloque .anotacion-boton:focus-visible { border-color: var(--borde-fuerte); color: var(--texto); background: var(--superficie-alt); }
.anotacion-bloque .anotacion-boton:focus-visible { outline: 3px solid var(--foco); outline-offset: 2px; }
.anotacion-flotante { position: fixed; z-index: 60; min-width: var(--tactil); min-height: var(--tactil); border-radius: 50%; border: 2px solid var(--c-blanco); background: var(--cta-primario); color: var(--c-blanco); font-size: 1.4rem; line-height: 1;box-shadow: 0 4px 14px rgba(0,0,0,.28); transform: translateX(-50%); display: inline-flex; align-items: center; justify-content: center; }
.anotacion-flotante[hidden] { display: none; }
.anotacion-flotante:focus-visible { outline: 4px solid var(--foco); outline-offset: 2px; }
.anotacion-modal .anotacion-rotulo { margin: 0; font-size: var(--fs-small); font-weight: 700; color: var(--texto-suave); }
.anotacion-modal h2 + .anotacion-rotulo { margin-top: var(--sp-3); }   /* (25-sep-2026) medido: 0px bajo el título */
.anotacion-modal .anotacion-opcion { display: flex; align-items: center; gap: var(--sp-3); text-align: left; min-height: 56px; width: 100%; padding: var(--sp-2) var(--sp-3); font-size: var(--fs-base); font-family: inherit; color: var(--texto); background: var(--superficie); border: 2px solid var(--borde); border-radius: var(--radio); cursor: pointer; }
.anotacion-modal .anotacion-opcion:hover { background: var(--superficie-alt); }
.anotacion-modal .anotacion-opcion:focus-visible { outline: 4px solid var(--foco); outline-offset: 2px; }
.anotacion-modal .anotacion-opcion-icono { font-size: 1.4rem; display: inline-flex; }
.anotacion-modal .anotacion-opcion.activa { border-color: var(--cta-primario); background: var(--superficie-alt); box-shadow: inset 0 0 0 2px var(--cta-primario); }
.anotacion-modal .anotacion-opcion.activa::after { content: ''; margin-left: auto; width: 0.7em; height: 0.4em; border-left: 3px solid var(--c-exito); border-bottom: 3px solid var(--c-exito); transform: rotate(-45deg); }
.anotacion-modal .anotacion-aviso { margin: 0; padding: var(--sp-2) var(--sp-3); border-radius: var(--radio); font-weight: 700; color: var(--texto); }
.anotacion-modal .anotacion-aviso[hidden] { display: none; }
.anotacion-modal .anotacion-aviso[data-tipo="exito"] { background: var(--tinte-exito); border-left: 4px solid var(--c-exito); color: var(--c-exito); }
.anotacion-modal .anotacion-aviso[data-tipo="aviso"] { background: var(--tinte-aviso); border-left: 4px solid var(--c-aviso); color: var(--c-aviso); }
.anotacion-modal .anotacion-aviso[data-tipo="error"] { background: var(--tinte-error); border-left: 4px solid var(--c-error); color: var(--c-error); }
.anotacion-modal .anotacion-acciones { display: flex; gap: var(--sp-3); flex-wrap: wrap; margin: 0; }
.anotacion-modal .anotacion-acciones .btn { flex: 1 1 auto; }

/* ============================================================
   Ajustes del rediseño verificados sobre la web real (6 sep 2026)
   ============================================================ */

/* Logo: el SVG lleva width="100%" dentro y colapsaba a 0 px */
.logo .isotipo { height: 22px; width: 75px; flex: 0 0 auto; }
.pie-grande .isotipo-pie { height: 32px; width: 108px; }

/* La home no lleva miga: el hero toca la cabecera */
main.home { padding-top: 0; }

/* Cabecera: que no se desborde por debajo de 1100 px */
@media (max-width: 1100px) { .cabecera .btn-pildora.borde { display: none; } .cabecera .barra { flex-wrap: wrap; row-gap: var(--sp-2); } .utilidades-cabecera { margin-left: auto; } }
/* (15-sep-2026) Navegación simplificada por ancho: a ≤1100px el menú de la cabecera
   recorta los ítems secundarios (data-nav-sec) y deja lo esencial + Soporte. Reutiliza
   la gramática P16 de tokens.css, disparada aquí por ANCHO (responsive), no por preferencia. */
@media (max-width: 1100px) {
  .menu-principal [data-nav-sec] { display: none; }
  .menu-principal .nav-solo-simplificado { display: inline-flex; }
}
@media (max-width: 980px)  { .menu-principal a { padding: 0 var(--sp-2); font-size: 0.9375rem; } }

/* Filtros: fila única, panel flotante, «¿Quieres afinar?» como los demás */
/* (21-sep-2026) aquí estaba `.afinar { position: relative; }`, muerta desde la sección de
   ARREGLOS VISUALES (que la deja en `position: static`): quitada en la limpieza del duplicado. */
.afinar > summary { list-style: none; cursor: pointer; display: inline-flex; align-items: center; min-height: var(--tactil); padding: 0 12px; font-weight: 700; font-size: var(--fs-small); }
.afinar > summary::-webkit-details-marker { display: none; }
.filtros-activos .chip-activo svg { width: 1em; height: 1em; }

/* Placeholders de foto con su nota */
.destino .ph, .tarjeta-tour .media .ph, .foto-promesa .ph, .foto-banda .ph {
  position: absolute; inset: 0; display: grid; place-items: center; padding: 12px; text-align: center;
  font-family: ui-monospace, monospace; font-size: 0.75rem;
}
.destino .ph, .tarjeta-tour .media .ph, .foto-promesa .ph { color: var(--texto-suave); }
.destino img { position: absolute; left: -15%; top: -15%; width: 130%; height: 130%; max-width: none; object-fit: cover; }   /* (23-sep-2026) OVERSCAN 15 %: el marco guarda un margen para que el «boom» del parallax DESLICE de verdad, sin aplastar el borde ni separar capas. max-width:none anula el tope global de img (max-width:100%): sin él la <img> se quedaba en el 100 % y NO coincidía con el lienzo (lo cazó qa-parallax). La <img> y el lienzo (.foto-parallax) llevan EL MISMO margen: mismo recorte, sin saltos al encender/apagar. */
/* (22-sep-2026) Parallax: el lienzo (js/parallax.js) va sobre la foto y debajo del texto.
   Solo aparece cuando el mapa de profundidad existe y el usuario no ha pedido «reducir movimiento». */
.destino .foto-parallax { position: absolute; left: -15%; top: -15%; width: 130%; height: 130%; display: block; }   /* mismo overscan que la <img>: el lienzo y la foto muestran el MISMO recorte */
.destino .texto { z-index: 1; }
.destino .texto span { font-size: 0.875rem; opacity: .9; }

/* Tarjeta de destacado: meta completa, precio solo en el chip */
.tarjeta-tour .meta .acc-ok { margin-left: auto; color: var(--c-exito); font-weight: 700; display: inline-flex; align-items: center; gap: 4px; }
.tarjeta-tour.vertical .media { position: relative; }

/* Salidas de hoy: 5 columnas */
.lista-salidas-hoy .tour { display: flex; flex-direction: column; line-height: 1.3; }
.lista-salidas-hoy .tour a { font-weight: 700; font-size: 1.125rem; min-height: var(--tactil-compacto); }
/* (21-sep-2026) medía 23,4 px de alto (< 24, mínimo legal): min-height 25 px lo cumplió con aire.
   (22-sep-2026) sube a la norma de casa para enlaces (≥40 px): la fila crece ~15 px y el texto
   queda centrado por el `align-items: center` de la fila. */
.lista-salidas-hoy .idioma { display: inline-flex; align-items: center; gap: 8px; color: var(--texto-suave); font-size: var(--fs-small); }
.lista-salidas-hoy .btn { justify-self: end; }
.lista-salidas-hoy .tour .chip-tag { align-self: start; margin-top: 2px; }   /* (22-sep-2026) la etiqueta «De ejemplo» no se estira en la columna */
.lista-salidas-hoy li:last-child { border-bottom: 0; }

/* Así funciona: icono sobre el paso */
.pasos-home .icono-caja { width: 52px; height: 52px; border-radius: 14px; }

/* Franja de confianza */
.rejilla-4 .conf { display: flex; gap: 16px; align-items: flex-start; padding: var(--sp-5); list-style: none; }

/* Promesa: dos columnas con foto */
.seccion-home.promesa { display: grid; grid-template-columns: minmax(0,1fr) minmax(0,1fr); gap: var(--sp-8); align-items: center; }
.lista-promesa { list-style: none; padding: 0; display: grid; gap: 12px; margin-block: var(--sp-4); }
.lista-promesa li { display: flex; gap: 12px; align-items: flex-start; }
.lista-promesa .icono-caja { width: 28px; height: 28px; border-radius: 8px; }
.foto-promesa { position: relative; aspect-ratio: 5/4; border-radius: var(--radio-xl); overflow: hidden; background: var(--placeholder-foto); }

/* Reseñas */
.resena { display: flex; flex-direction: column; gap: 16px; }
.resena svg { color: var(--energia-acento); }
.resena .ph-texto { font-family: ui-monospace, monospace; font-size: 0.875rem; color: var(--texto-suave); flex: 1; }
.resena footer { display: flex; align-items: center; gap: 12px; border-top: 1px solid var(--separador); padding-top: 16px; }
.resena .avatar { width: 44px; height: 44px; border-radius: 50%; background: var(--placeholder-foto); flex: 0 0 auto; }

/* Banda de guías: foto y botón blanco (un solo acento cálido por pantalla) */
.banda-petroleo { display: grid; grid-template-columns: minmax(0,1.2fr) minmax(0,1fr); gap: var(--sp-7); align-items: center; }
.banda-petroleo .acciones { display: flex; gap: 12px; flex-wrap: wrap; margin-top: var(--sp-4); }
.btn-pildora-blanca { background: var(--c-blanco); color: var(--c-petroleo); }
.btn-pildora-blanca:hover { background: var(--c-blanco); color: var(--cta-primario-hover); }
.btn-borde-claro { background: transparent; color: var(--c-blanco); border: 2px solid rgba(255,255,255,.6); }
.btn-borde-claro:hover { background: rgba(255,255,255,.12); color: var(--c-blanco); }
.foto-banda { position: relative; aspect-ratio: 4/3; border-radius: 18px; background: repeating-linear-gradient(135deg, rgba(255,255,255,.10) 0 14px, rgba(255,255,255,.16) 14px 28px); }
.foto-banda .ph { color: rgba(255,255,255,.85); }
/* (21-sep-2026 · informe de Ale) la foto del pie llenaba su caja a medias (dejaba 37 px de rayas):
   ahora la cubre. No estaba «deformada» (proporción 1,5 = 1,5); lo que faltaba era cubrir su caja. */
.foto-banda img, .foto-promesa img { display: block; width: 100%; height: 100%; object-fit: cover; }   /* (21-sep-2026) la foto de «nuestra promesa» se pinta con la misma regla que la del pie */

/* Pie grande */
.pie-grande .marca { display: flex; flex-direction: column; gap: 12px; align-items: flex-start; }
.pie-grande .legal { margin-top: var(--sp-6); padding-top: var(--sp-5); border-top: 1px solid var(--borde-suave); display: flex; justify-content: space-between; gap: 16px; flex-wrap: wrap; font-size: 0.9375rem; color: var(--texto-suave); padding-right: 88px; }
.pie-grande .legal .legal-diversidad { display: inline-flex; align-items: center; gap: 8px; }

@media (max-width: 720px) {
  .seccion-home.promesa, .banda-petroleo { grid-template-columns: minmax(0, 1fr); }
  .rejilla-4 { grid-template-columns: minmax(0, 1fr); }
  .foto-promesa, .foto-banda { display: none; }
}

/* ---- Detalle: galería con notas de foto ---- */
.galeria > * { position: relative; }
.galeria .ph { position: absolute; inset: 0; display: grid; place-items: center; padding: 12px; text-align: center; font-family: ui-monospace, monospace; font-size: 0.8125rem; color: var(--texto-suave); }
.galeria .foto-grande { grid-row: 1 / 3; }

/* ---- Preferencias: bloque «¿Prefieres no esperar?» ---- */
.no-esperar { background: var(--tinte-teal); border-radius: var(--radio-l); padding: var(--sp-5) var(--sp-6); margin-top: var(--sp-5); }
.no-esperar .subtitulo { margin-bottom: var(--sp-2); font-size: 1.375rem; }
.lista-encajan { list-style: none; padding: 0; margin-top: var(--sp-4); display: grid; grid-template-columns: minmax(0, 1fr); gap: 12px; }
.lista-encajan li { background: var(--superficie); border-radius: var(--radio); padding: 16px 16px; display: grid; grid-template-columns: minmax(0,1fr) auto; gap: 16px; align-items: center; }
.lista-encajan .cab { display: flex; align-items: center; gap: 12px; flex-wrap: wrap; margin-bottom: 8px; }
.lista-encajan .aviso { grid-column: 1 / -1; }
.lista-encajan .barra-demanda-wrap { max-width: 220px; }
@media (max-width: 720px) { .lista-encajan li { grid-template-columns: 1fr; } .no-esperar { padding: var(--sp-4); } }

/* ---- Alta de guía: país + ciudad en dos columnas ---- */
.dos-campos { display: grid; grid-template-columns: 1fr 1fr; gap: var(--sp-3); }
.dos-campos .campo { margin-bottom: var(--sp-3); }
@media (max-width: 720px) { .dos-campos { grid-template-columns: 1fr; } }

/* ---- Lector de guiones (G11) ---- */
.glector-layout { display: grid; grid-template-columns: 300px minmax(0,1fr); gap: var(--sp-8); align-items: start; }
@media (max-width: 880px) { .glector-layout { grid-template-columns: 1fr; } }
.indice-guion { display: flex; flex-direction: column; gap: 12px; }
.indice-guion .barra { height: 8px; background: var(--separador); border-radius: var(--radio-pill); overflow: hidden; }
.indice-guion .barra span { display: block; height: 100%; background: var(--c-teal); border-radius: var(--radio-pill); transition: width var(--trans); }
.indice-paradas { list-style: none; padding: 0; display: flex; flex-direction: column; gap: 4px; }
.indice-paradas a { display: grid; grid-template-columns: 28px minmax(0,1fr) auto; gap: 12px; align-items: start; min-height: var(--tactil); padding: 8px 8px; border-radius: var(--radio-s); }
.indice-paradas a:hover { background: var(--tinte); }
.indice-paradas a.leida { background: var(--c-fondo); }
.indice-paradas .num { display: inline-flex; align-items: center; justify-content: center; width: 28px; height: 28px; min-width: 28px; min-height: 28px; flex-shrink: 0; align-self: start; border-radius: 8px; background: var(--c-petroleo); color: var(--c-blanco); font-size: 0.875rem; font-weight: 800; line-height: 1; margin-top: 3px; }
.indice-paradas a.leida .num { background: var(--c-exito); }
.indice-paradas .tit { font-size: 0.9375rem; font-weight: 600; line-height: 1.3; min-width: 0; }
.indice-paradas .min { font-size: 0.8125rem; color: var(--texto-suave); white-space: nowrap; }
.cab-parada { display: flex; align-items: center; flex-wrap: wrap; gap: 16px; padding-bottom: var(--sp-3); border-bottom: 1px solid var(--separador); margin-bottom: var(--sp-2); }
.cab-parada .cab-parada-titulo { flex: 1; min-width: 0; }
.cab-parada .cab-parada-acciones { display: flex; align-items: center; gap: var(--sp-2); flex-wrap: wrap; justify-content: flex-end; }
.cab-parada .letra { width: 44px; height: 44px; font-size: 1.25rem; }
.cab-parada .titulo { font-size: 1.5rem; font-weight: 800; letter-spacing: -.01em; }
.btn-leida { background: var(--tinte-exito); color: var(--c-exito); border-color: var(--tinte-exito); }
.bloque-guion { display: grid; grid-template-columns: 170px minmax(0,1fr); gap: 24px; padding: 16px 0; border-bottom: 1px solid var(--separador); }
.bloque-guion:last-child { border-bottom: 0; }
.bloque-guion .rotulo { display: flex; align-items: flex-start; gap: 8px; font-size: 1rem; font-weight: 700; letter-spacing: .02em; line-height: 1.5; margin: 0; }
.bloque-guion .rotulo svg, .bloque-guion .rotulo .ico { flex: 0 0 auto; width: 16px; height: 16px; margin-top: 2px; }
.bloque-guion.idea .rotulo { color: var(--c-petroleo); }
.bloque-guion.cuentas .rotulo { color: var(--c-teal); }
.bloque-guion.detalle .rotulo { color: var(--c-aviso); }
.bloque-guion.accesibilidad .rotulo { color: var(--c-exito); }
.bloque-guion p { font-size: 1.125rem; line-height: 1.6; }
.bloque-guion .supuesto { display: inline-flex; align-items: center; gap: 8px; margin-top: 8px; padding: 4px 12px; border-radius: 8px; background: var(--tinte-aviso); color: var(--c-aviso); font-size: 0.875rem; font-weight: 600; }
/* G11 (15-sep-2026): la parada va en tarjeta normal (nada de .tarjeta-tour, que es grid de foto+texto);
   gap 0 para que cab-parada y bloque-guion conserven su propio ritmo. */
.parada-guion { margin-top: var(--sp-5); gap: 0; }
.fila-idiomas-guion { display: flex; align-items: center; flex-wrap: wrap; gap: var(--sp-2); margin-top: var(--sp-2); }
.fila-idiomas-guion .rotulo { display: inline-flex; align-items: center; gap: var(--sp-2); font-weight: 700; }
/* Fuentes [n] como chips (diseño 8b de Anthropic). */
.fuente { display: inline-flex; align-items: center; justify-content: center; min-width: 22px; height: 22px; padding: 0 5px; border-radius: 6px; background: var(--tinte); color: var(--c-petroleo); font-size: 0.75rem; font-weight: 700; vertical-align: middle; }
/* Cabecera del lector: línea de metadatos con icono+texto alineados (Gemini: estaban superpuestos). */
.detalle-cab .meta { display: flex; align-items: center; gap: var(--sp-3) var(--sp-5); flex-wrap: wrap; color: var(--texto-suave); font-size: 0.9375rem; }
.detalle-cab .meta > span { display: inline-flex; align-items: center; gap: var(--sp-2); }
.detalle-cab .meta svg { flex: 0 0 auto; }
/* Botón del índice (Ir al test / Lee las N que faltan): deja que el texto respire en 2 líneas. */
.indice-guion .btn { white-space: normal; text-align: center; line-height: 1.3; min-height: 48px; padding: var(--sp-2) var(--sp-3); }
@media (max-width: 720px) { .bloque-guion { grid-template-columns: 1fr; gap: 8px; } .cab-parada { flex-wrap: wrap; } }

/* ---- Perfil del guía (G8) ---- */
.cab-ciudad { font-size: 1.375rem; font-weight: 800; display: flex; align-items: center; gap: 12px; flex-wrap: wrap; }
.mis-tours { list-style: none; padding: 0; margin-top: var(--sp-4); background: var(--superficie); border: 1px solid var(--borde-suave); border-radius: var(--radio-m); overflow: hidden; }
.mis-tours li {grid-template-columns: minmax(0,1fr) 220px auto;padding: 14px var(--sp-5); border-bottom: 1px solid var(--separador); }
.mis-tours li:last-child { border-bottom: 0; }
.mis-tours .tour { display: flex; flex-direction: column; line-height: 1.3; }
.mis-tours .tour strong { font-size: 1.0625rem; }
.mis-tours .tour .texto-suave { font-size: 0.875rem; }
.mis-tours .btn { justify-self: end; min-height: var(--tactil); }
.mis-tours .estado:not(.completada):not(.pendiente) { color: var(--texto-suave); }
@media (max-width: 720px) { .mis-tours li { grid-template-columns: 1fr; gap: 8px; } .mis-tours .btn { justify-self: start; } }

/* ---- Test de comprensión (G12) ---- */
.cab-test { display: flex; flex-direction: column; gap: 8px; margin-bottom: var(--sp-4); max-width: 55rem; }
.puntos-test { display: flex; gap: 8px; }
.puntos-test span { flex: 1; height: 8px; border-radius: var(--radio-pill); background: var(--separador); }
.puntos-test span.hecha { background: var(--c-teal); }
.puntos-test span.actual { background: var(--c-petroleo); }
.tarjeta-test { max-width: 55rem; padding: var(--sp-7); display: flex; flex-direction: column; gap: var(--sp-4); }
.cab-pregunta { display: flex; align-items: flex-start; justify-content: space-between; gap: var(--sp-4); }
.cab-pregunta h2 { font-size: 1.75rem; line-height: 1.3; font-weight: 800; letter-spacing: -.01em; }
.opciones-test { display: flex; flex-direction: column; gap: 12px; }
.opcion-test { display: flex; gap: 16px; align-items: flex-start; text-align: left; min-height: 64px; padding: 16px 24px; border-radius: var(--radio-m); border: 2px solid var(--borde); background: var(--superficie); color: var(--texto); font: inherit; font-size: 1.1875rem; line-height: 1.45; cursor: pointer; }
.opcion-test:hover { border-color: var(--c-petroleo); }
.opcion-test.marcada { border-color: var(--c-petroleo); background: var(--tinte); }
.opcion-test .radio { flex: 0 0 auto; margin-top: 4px; width: 24px; height: 24px; border-radius: 50%; border: 2px solid var(--c-petroleo); display: inline-grid; place-items: center; }
.opcion-test.marcada .radio::after { content: ""; width: 12px; height: 12px; border-radius: 50%; background: var(--c-petroleo); }
.pie-test { display: flex; align-items: center; gap: var(--sp-4); flex-wrap: wrap; border-top: 1px solid var(--separador); padding-top: var(--sp-4); font-size: 0.9375rem; }
@media (max-width: 720px) { .tarjeta-test { padding: var(--sp-5); } .cab-pregunta h2 { font-size: 1.375rem; } .opcion-test { font-size: 1.0625rem; } }

/* ============================================================
   PANEL DEL FUNDADOR — solo piel (CSS). No se toca js/fundador.js
   ni sus tests: se estilan las clases que ya emite (f-*, salida-hoy,
   tarjeta-metrica, rejilla-2, segmento, contador…).
   ============================================================ */
.fundador { font-size: var(--fs-fundador); line-height: 1.55; }
.fundador .titulo-pantalla { font-size: 3rem; letter-spacing: var(--ls-titulo); }
.fundador .claim { font-size: 1.25rem; color: var(--texto-suave); margin-bottom: var(--sp-6); }
.fundador .miga { font-size: var(--fs-small); }
.fundador h2 { font-size: 1.625rem; font-weight: 800; letter-spacing: -.01em; }
.fundador h3 { font-size: 1.3125rem; font-weight: 700; line-height: 1.25; }
.fundador .f-titulo-bloque { display: flex; align-items: center; gap: 12px; margin-bottom: var(--sp-4); flex-wrap: wrap; }
.fundador .f-meta { color: var(--texto-suave); font-size: var(--fs-small); }
.fundador .f-nota { color: var(--texto-suave); font-size: var(--fs-small); }

/* Contador del menú (Acción · N) */
.menu-principal .contador { margin-left: var(--sp-2); display: inline-flex; align-items: center; justify-content: center; min-width: 24px; height: 24px; padding: 0 8px; border-radius: var(--radio-pill); background: var(--c-blanco); color: var(--c-error); font-size: var(--fs-caption); font-weight: 800; }

/* Chips de ventana (24 h / 48 h) y periodo (hoy/semana/mes) */
.fundador .segmento { border-radius: var(--radio); border-width: 2px; background: var(--superficie); }
.fundador .segmento button { min-height: 48px; padding: 0 var(--sp-5); font-size: 1.0625rem; font-weight: 700; }

/* Bloques y tarjetas grandes (nada de tablas grises) */
.fundador .f-datos { border: 1px solid var(--borde-suave); border-radius: var(--radio-m); padding: var(--sp-4) var(--sp-5); background: var(--superficie); }  /* (26-sep-2026) sin !important: el estilo en línea murió */
.f-datos-estado { margin-block: 0 var(--sp-3); }
.f-datos-fila { display: flex; gap: var(--sp-3); align-items: flex-end; flex-wrap: wrap; }
.datos-token-campo { max-width: 24rem; margin: 0; flex: 1 1 16rem; position: relative; }
.fundador .f-datos .f-datos-btn { min-height: 48px; }
.fundador .f-datos [hidden] { display: none; }
.fundador .tarjeta { background: var(--superficie); border: 1px solid var(--borde-suave); border-radius: var(--radio-m); padding: var(--sp-5) var(--sp-6); }
.fundador .rejilla-2 { display: grid; grid-template-columns: repeat(2, minmax(0,1fr)); gap: var(--sp-5); align-items: start; }

/* Salidas de hoy: hora grande a la izquierda */
.fundador .salida-hoy { display: grid; grid-template-columns: 120px minmax(0,1fr); gap: var(--sp-5); align-items: center; margin-bottom: 16px; }
.fundador .salida-hora { display: flex; flex-direction: column; line-height: 1.1; }
.fundador .hora-grande { font-size: 2.125rem; font-weight: 800; letter-spacing: var(--ls-titulo); }
.fundador .salida-cuerpo { display: flex; flex-direction: column; gap: 8px; align-items: flex-start; }

/* Listas de reservas y pagos: filas con importe grande */
.fundador .f-lista { list-style: none; padding: 0; margin: 0; background: var(--superficie); border: 1px solid var(--borde-suave); border-radius: var(--radio-m); overflow: hidden; }
.fundador .f-lista li { display: flex; align-items: center; justify-content: space-between; gap: var(--sp-4); padding: 14px var(--sp-5); border-bottom: 1px solid var(--separador); flex-wrap: wrap; }
.fundador .f-lista li:last-child { border-bottom: 0; }
.fundador .importe { font-size: 1.5rem; font-weight: 800; letter-spacing: -.01em; white-space: nowrap; }

/* Métricas: una por tarjeta, cifra enorme */
.fundador .rejilla-metricas { display: grid; grid-template-columns: repeat(2, minmax(0,1fr)); gap: var(--sp-5); }
/* (25-sep-2026) Semana de piel: medido 0px entre la nota y las tarjetas, y entre secciones de
   señales (ninguna regla las separaba). Ritmo de casa: 24 dentro, 32 entre secciones. */
.fundador .rejilla-metricas { margin-top: var(--sp-5); }
.fundador .seccion-senales { margin-top: var(--sp-6); }
.fundador .tarjeta-metrica { background: var(--superficie); border: 1px solid var(--borde-suave); border-radius: var(--radio-xl); padding: var(--sp-6); min-height: 220px; display: flex; flex-direction: column; gap: 16px; }
.fundador .tarjeta-metrica-cab { display: flex; align-items: center; justify-content: space-between; gap: 12px; }
.fundador .tarjeta-metrica-cab h2, .fundador .tarjeta-metrica-cab h3 { font-size: 1.25rem; font-weight: 700; color: var(--texto-suave); }
.fundador .cifra { font-size: 4.5rem; line-height: 1; font-weight: 800; letter-spacing: -.03em; }
.fundador .cifra small { font-size: 2rem; font-weight: 700; color: var(--texto-suave); margin-left: 8px; }
.fundador .tarjeta-metrica .texto-suave { margin-top: auto; font-size: 1.0625rem; }

/* Estados y badges del panel: color + icono + texto, siempre legibles */
.fundador .badge { font-size: var(--fs-small); padding: 4px 12px; font-weight: 800; }
.fundador .aviso { border-radius: var(--radio-m); font-size: var(--fs-small); }
.fundador .btn { min-height: 52px; font-size: 1.0625rem; }
.fundador .btn-secundario { font-weight: 800; }

@media (max-width: 1000px) {
  .fundador .rejilla-2, .fundador .rejilla-metricas { grid-template-columns: 1fr; }
  .fundador .titulo-pantalla { font-size: 2.25rem; }
  .fundador .cifra { font-size: 3.5rem; }
  .fundador .salida-hoy { grid-template-columns: 96px minmax(0,1fr); gap: var(--sp-4); }
}

@media (max-width: 1280px) {
  .menu-principal a { padding: 0 var(--sp-2); }
}
@media (max-width: 1180px) {
  .cabecera .logo .descriptor { display: none; }
  .menu-principal a { font-size: 0.9375rem; }
}

/* Un solo acento cálido: «Recargar datos» pasa a botón de borde */
.fundador .f-datos .btn-secundario + .btn-secundario,
.fundador .f-datos .btn-secundario ~ .btn-secundario {
  background: var(--superficie); color: var(--cta-primario); border: 2px solid var(--cta-primario);
}
.fundador .f-datos .btn-secundario ~ .btn-secundario:hover { background: var(--cta-primario); color: var(--c-blanco); }

/* ---- Buscador único de destino (país · ciudad · barrio), estilo Booking ---- */
.lugar-buscador { position: relative; display: inline-flex; align-items: center; gap: 8px; min-height: 44px; padding: 0 8px 0 16px; border: 1px solid var(--borde); border-radius: var(--radio-s); background: var(--c-fondo); color: var(--texto-suave); }
.lugar-buscador svg { flex: 0 0 auto; }
.lugar-buscador.activo { border-color: var(--c-petroleo); background: var(--tinte); color: var(--texto); }
.lugar-buscador input { border: 0; background: transparent; font: inherit; font-size: var(--fs-small); font-weight: 600; color: var(--texto); min-width: 190px; padding: 0; }
.lugar-buscador input::placeholder { color: var(--texto-suave); font-weight: 500; }
.lugar-clear { display: inline-flex; align-items: center; justify-content: center; width: var(--tactil); height: var(--tactil); border: 0; background: transparent; color: var(--texto-suave); border-radius: 50%; cursor: pointer; flex: 0 0 auto; }   /* (22-sep-2026) 40→44: es un botón, regla de casa (el mismo control en la caja de guía ya iba a 44) */
.lugar-clear:hover { background: var(--borde-suave); color: var(--texto); }
.lugar-opciones { position: absolute; left: 0; right: 0; top: calc(100% + 8px); z-index: 5;
  min-width: 260px; max-width: min(440px, calc(100vw - 32px)); max-height: 320px; overflow-y: auto;
  background: var(--superficie); border: 1px solid var(--borde-suave); border-radius: var(--radio-m);
  box-shadow: var(--sombra-flotante); display: flex; flex-direction: column; gap: 4px; padding: 8px; }
/* (21-sep-2026 · informe de Ale) la lista de sugerencias caía DENTRO de la fila de filtros (a la
   derecha y arrancando por encima) porque no tenía posición propia: dentro de `.hoja-filtros` la
   clase `grupo-filtro-cuerpo` queda `position:static`. Ahora flota ella sola, anclada al campo
   (`.lugar-buscador` es position:relative) y cae hacia abajo. */
.lugar-opcion { display: flex; align-items: center; gap: 12px; width: 100%; text-align: left; min-height: 44px; padding: 12px 12px; border: 0; background: transparent; border-radius: var(--radio-s); cursor: pointer; font: inherit; font-size: var(--fs-small); color: var(--texto); }
.lugar-opcion:hover { background: var(--tinte); }
.lugar-opcion svg { flex: 0 0 auto; color: var(--texto-suave); }
/* (22-sep-2026 · fase 1 buscador) Barrios agrupados bajo su ciudad: bloque con título suave */
.lugar-grupo { display: flex; flex-direction: column; gap: 4px; }
.lugar-grupo-tit { padding: 6px 12px 0; font-size: var(--fs-micro); font-weight: 700; color: var(--texto-suave); }
/* (22-sep-2026 · fase 2 buscador) Bloque «todavía no hay tours en {lugar}» + ciudades cerca */
.vacio-lugar { padding: var(--sp-8); }
.vacio-lugar .acciones { margin: var(--sp-5) 0 0; }
.vacio-lugar .subtitulo-cerca { margin: var(--sp-7) 0 var(--sp-4); font-size: var(--fs-titulo); }
@media (max-width: 720px) { .lugar-buscador input { min-width: 0; flex: 1; } }

/* [hidden] debe ganar siempre — .grupo-filtro-cuerpo (display:flex) se lo pisaba al desplegable de destino */
[hidden] { display: none !important; }

/* ============================================================
   ARREGLOS VISUALES (06-sep-2026) — encargo «2 problemas»
   P1 «¿Quieres afinar?»: panel de ancho completo en grid.
   P2 alta de guía (G1): el formulario deja la columna de 380px.
   Solo CSS (tokens de css/tokens.css); sin tocar markup ni lógica.
   ============================================================ */

/* ---- P1 · «¿Quieres afinar?» ----
   El panel se anclaba a .afinar (position:relative, tan ancho como el
   summary ≈143px) con position:absolute left:0 right:0, y el cuerpo es
   flex-column inline → una tira de ~143px × ~2884px. Ahora ocupa todo el
   (21-sep-2026: el `style` en línea ya se quitó del markup; los `!important` se quedan de
   cinturón, para que un estilo suelto no vuelva a romper el reparto.)
   ancho de la fila de filtros y reparte los 4 grupos en un grid 2×2. */
.afinar { position: static; }
.afinar[open] { flex-basis: 100%; }                 /* el <details> se expande a toda la fila */
.afinar[open] > .afinar-cuerpo {
  position: static;
  left: auto; right: auto; top: auto;
  width: 100%;
  display: grid !important;                          /* vence al display:flex inline del markup */
  grid-template-columns: repeat(2, minmax(0, 1fr));
  gap: var(--sp-4) !important;                       /* vence al gap inline */
  align-items: start;
  background: var(--superficie);
  border: 1px solid var(--borde);
  border-radius: var(--radio-m);
  padding: var(--sp-5) var(--sp-6);
  box-shadow: var(--sombra-media);
}
.afinar[open] > .afinar-cuerpo > p.texto-suave { grid-column: 1 / -1; }  /* el aviso a todo lo ancho */
.afinar[open] > .afinar-cuerpo fieldset.grupo-chips { min-width: 0; }
/* (22-sep-2026) Revisión de Ale: «entre el primero y el segundo hay un espacio bastante grande».
   El grid fila a fila dejaba un hueco de ~400 px bajo el grupo corto de cada fila. Ahora cada
   columna es independiente (.afin-col): los grupos se reparten 2 y 2 equilibrando alturas y el
   hueco desaparece. En <=900 los envoltorios se disuelven (display:contents) y todo apila en una
   columna en el orden del documento. */
.afinar[open] > .afinar-cuerpo .afin-col { display: grid; gap: 16px; align-content: start; min-width: 0; }
@media (max-width: 900px) { .afin-col { display: contents; } }
@media (max-width: 900px) {
  .afinar[open] > .afinar-cuerpo { grid-template-columns: 1fr; }
}

/* ---- P2 · Alta de guía (G1) ----
   .dos-columnas presume «contenido ancho + aside de 380px a la derecha»
   (T3/T6/preferencias). En G1 el <form> «Tu solicitud» cae en la columna
   de 380px y se rompe (radios 314px, selects de país/ciudad 118px…). El
   bloque del <aside> es una cabecera de página (h1 + pasos + cifras), no
   una barra lateral: se apila a lo ancho y el formulario respira debajo. */
.dos-columnas:has(> form.tarjeta-flotante) {
  grid-template-columns: 1fr;
  gap: var(--sp-7);
}
.dos-columnas:has(> form.tarjeta-flotante) > aside.fijo { position: static; }
.dos-columnas:has(> form.tarjeta-flotante) > form.tarjeta-flotante { max-width: 760px; }

/* Las opciones de «tipo de guía» llevan <strong>título<br><small>desc</small>;
   con display:flex el <br> se ignora y título y descripción quedan en línea.
   Se apilan: título arriba, descripción abajo. */
.opciones label { flex-wrap: wrap; }
.opciones label br { display: none; }
.opciones label small { flex-basis: 100%; }

/* ==========================================================================
   Rondas 12–17 · entrega 1 (08-sep-2026) — T animada del hero, barra RUOT de
   progreso y catálogo del guía (#/guia/catalogo). Solo piel: ningún id, data-*
   ni clase de lógica cambia. Todo añadido al final; nada anterior se modifica.
   ========================================================================== */

/* ---- 12a · La T del logo dibujándose en el hero (solo inicio; la anima js/motion.js) ---- */
.hero-t { position: absolute; right: 64px; top: 34px; width: 290px; height: 283px; overflow: visible; pointer-events: none; color: var(--c-blanco); }
@media (max-width: 1100px) { .hero-t { width: 220px; height: 215px; right: var(--pad-lateral); top: 48px; } }
@media (max-width: 960px)  { .hero-t { display: none; } }          /* por debajo chocaría con el claim (44ch) */
/* El halo teal (.hero-wrap::after) se pintaba ENCIMA del texto del hero y de la T (mismo nivel de
   apilamiento, va después en el DOM): teñía el claim y la T de teal pálido. Contenido por encima. */
.hero-wrap .cabecera, .hero-wrap .hero { z-index: 1; }

/* (15-sep-2026) El buscador de la cabecera ya no es una barra siempre visible: es una lupa
   que despliega un desplegable (ver .buscar-cabecera / .buscador-mini arriba). El viejo
   min-width y el ocultado por ancho ya no aplican. */

/* ---- 12a · Barra RUOT de progreso (línea + dos bolas). SUSTITUYE a la barra nativa en
   escritorio (decisión Ale, 07-sep); en móvil (<900 px) se mantiene la nativa. No se arrastra:
   rueda, teclado y lectores siguen igual (role=progressbar informa el %). En contraste alto
   vuelve la barra nativa, que es la que ese perfil espera. ---- */
.barra-ruot { position: fixed; right: 22px; top: 104px; bottom: 96px; width: 16px; display: flex; justify-content: center; z-index: 150; cursor: grab; touch-action: none; }
.barra-ruot:active { cursor: grabbing; }
/* (21-sep-2026 · decisión de Ale) la barra es un CONTROL: sin `pointer-events:none` y con una zona
   de agarre de 44 px centrada en la línea (el pulgar no acierta a 5 px). Los hijos no la tapan. */
.barra-ruot::before { content: ''; position: absolute; top: 0; bottom: 0; left: 50%; transform: translateX(-50%); width: var(--tactil); }
.barra-ruot > * { pointer-events: none; }
.barra-ruot:focus-visible { outline: 3px solid var(--foco); outline-offset: 2px; }
@media (max-width: 1263px) { .barra-ruot { right: 8px; } }            /* con el contenedor a 32 px del borde, la barra queda dentro del margen */
.barra-ruot .linea { position: absolute; top: 7px; bottom: 7px; width: 5px; border-radius: 3px; background: var(--c-petroleo); box-shadow: 0 0 0 2px rgba(255,255,255,.75); }
.barra-ruot .bola { position: absolute; width: 16px; height: 16px; border-radius: 50%; background: var(--c-melocoton); box-shadow: 0 0 0 2px rgba(255,255,255,.95); }
.barra-ruot .bola.arriba { top: 0; will-change: transform; }
.barra-ruot .bola.abajo { bottom: 0; }
.barra-ruot[data-scroll="no"] { display: none; }                       /* página sin scroll: nada que medir */
:root[data-tema="oscuro"] .barra-ruot .linea { background: var(--c-teal); box-shadow: 0 0 0 2px rgba(6,42,49,.85); }
:root[data-tema="oscuro"] .barra-ruot .bola { box-shadow: 0 0 0 2px rgba(6,42,49,.95); }
@media (min-width: 900px) {
  html { scrollbar-width: none; }                                        /* Firefox, Chrome ≥121 */
  html::-webkit-scrollbar { width: 0; height: 0; display: none; }        /* Safari, Chrome antiguo */
  :root[data-contraste="alto"] { scrollbar-width: auto; }
  :root[data-contraste="alto"]::-webkit-scrollbar { width: auto; display: block; }
  :root[data-contraste="alto"] .barra-ruot { display: none; }
}
@media (max-width: 899px) { .barra-ruot { display: none; } }
@media print { .barra-ruot { display: none; } }

/* ---- 14a · Catálogo del guía (#/guia/catalogo) — lo que Ale veía «roto». Causa: .lugar-buscador
   está pensado como chip de la fila de filtros (inline-flex, 44 px, input de 190 px) y aquí es EL
   buscador de la pantalla; además .lugar-opciones no lleva posición propia fuera de la fila de
   filtros y el desplegable empujaba el contenido. Ahora: tarjeta blanca a todo lo ancho, campo de
   56 px, desplegable flotante, y el estado (destino · habilitados) en una fila debajo. ---- */
.gcat-caja { background: var(--superficie); border-radius: var(--radio-l); padding: var(--sp-4); box-shadow: var(--sombra-media); display: flex; flex-direction: column; gap: var(--sp-3); margin-bottom: var(--sp-6); }
.gcat-caja .lugar-buscador { display: flex; width: 100%; min-height: 56px; gap: 12px; padding: 4px 8px 4px 16px; border: 2px solid var(--borde); border-radius: 14px; background: var(--superficie); color: var(--texto-suave); }
.gcat-caja .lugar-buscador.activo { border-color: var(--c-petroleo); background: var(--superficie); color: var(--texto); }
.gcat-caja .lugar-buscador:focus-within { border-color: var(--c-petroleo); box-shadow: var(--sombra-foco); }
.gcat-caja .lugar-buscador input { flex: 1; min-width: 0; font-size: 1.25rem; font-weight: 500; padding: 12px 4px; }
.gcat-caja .lugar-clear { width: 44px; height: 44px; background: var(--c-fondo); color: var(--texto); }
.gcat-caja .lugar-opciones { position: absolute; left: 0; right: 0; top: calc(100% + 8px); z-index: 5; background: var(--superficie); border: 1px solid var(--borde-suave); border-radius: var(--radio); box-shadow: var(--sombra-flotante); }
.gcat-estado { display: flex; align-items: center; gap: var(--sp-3) var(--sp-4); flex-wrap: wrap; padding: 0 4px; }
.gcat-estado p { margin: 0; }
.gcat-estado .badge.teal { font-size: 0.9375rem; padding: 8px 16px; gap: 8px; }
.gcat-estado .gcat-cuenta { margin-left: auto; }
.rejilla-gcat .tarjeta-tour { grid-template-columns: 200px minmax(0,1fr); }
.rejilla-gcat .tarjeta-tour .cuerpo > p { margin: 0; }
.rejilla-gcat .tarjeta-tour .descripcion-corta { display: -webkit-box; -webkit-line-clamp: 2; -webkit-box-orient: vertical; overflow: hidden; color: var(--texto-suave); font-size: var(--fs-small); }
.rejilla-gcat .tarjeta-tour .acciones { padding-top: var(--sp-2); }
.rejilla-gcat .tarjeta-tour .acciones .btn { min-height: var(--tactil); padding: 0 var(--sp-4); font-size: 0.9375rem; }
.rejilla-3 .tarjeta-tour .meta { display: grid; gap: 6px; }   /* 22-sep: en la portada los datos van en columna, cada uno en su línea con el icono delante (revisión de Ale: «el de arriba alineado con el de abajo») */
.rejilla-3 .tarjeta-tour .meta .acc-ok { margin-left: 0; }
.rejilla-gcat .tarjeta-tour .meta > span, .rejilla-3 .tarjeta-tour .meta > span { display: inline-flex; align-items: center; gap: 4px; white-space: nowrap; }   /* icono y texto nunca se separan (22-sep: también en la portada, .rejilla-3) */
@media (max-width: 1000px) { .rejilla-gcat { grid-template-columns: 1fr; } }   /* a anchos medios el cuerpo quedaba en 217 px y la meta se partía; lista a todo el ancho */
@media (max-width: 720px) {
  .gcat-caja { padding: var(--sp-3); border-radius: var(--radio-m); }
  .gcat-estado .gcat-cuenta { margin-left: 0; }
  .rejilla-gcat .tarjeta-tour { grid-template-columns: minmax(0, 1fr); }
}

/* ---- 12b · «Qué pasa en cada ciudad» (seccionEventosHome) — lo que Ale veía roto. Causa: la función
   existía en app.js pero NINGUNA de sus clases (.seccion-home-eventos, .seccion-cab, .rejilla-eventos,
   .tarjeta-ciudad-eventos, .lista-eventos-ciudad) tenía CSS, y se pintaba como texto suelto al final del
   inicio. Ahora va tras «¿A dónde te llevamos?»: un evento destacado + una tarjeta por ciudad. ---- */
.seccion-home-eventos .cab p { margin: var(--sp-2) 0 0; }
.evento-destacado { display: grid; grid-template-columns: minmax(0,1fr) minmax(0,1.3fr); background: var(--superficie); border: 1px solid var(--borde-suave); border-radius: var(--radio-l); overflow: hidden; }
.evento-destacado .media { position: relative; min-height: 250px; background: var(--placeholder-foto); display: grid; place-items: center; text-decoration: none; }
.evento-destacado .media .ph { font-family: ui-monospace, monospace; font-size: 0.75rem; color: var(--texto-suave); }
.evento-destacado .media .badge.ambar { position: absolute; left: 16px; top: 16px; letter-spacing: .04em; text-transform: uppercase; }
.evento-destacado .cuerpo { padding: var(--sp-5) var(--sp-6); display: flex; flex-direction: column; gap: 12px; }
.evento-destacado .cuerpo > p { margin: 0; }
.evento-destacado .zona { font-size: var(--fs-caption); font-weight: 700; color: var(--texto-suave); display: flex; align-items: center; gap: 8px; }
.evento-destacado .titulo { font-size: 1.875rem; font-weight: 800; letter-spacing: -.015em; line-height: 1.1; margin: 0; }
.evento-destacado .titulo a { display: inline-flex; align-items: center; min-height: var(--tactil-compacto); color: var(--texto); }   /* (22-sep-2026) medía 304x32 / 380x39: enlace de texto a la norma de casa (≥40 px) */
.evento-destacado .titulo a:hover { color: var(--c-teal); }
.evento-destacado .fecha { display: inline-flex; align-items: center; gap: 8px; font-size: 1.0625rem; font-weight: 700; }
.evento-destacado .descripcion-corta { color: var(--texto-suave); text-wrap: pretty; }
.evento-destacado .acciones { display: flex; align-items: center; gap: 12px; flex-wrap: wrap; margin-top: auto; padding-top: var(--sp-2); }
.evento-destacado .acciones .badge { font-size: 0.9375rem; padding: 8px 16px; gap: 8px; margin: 0; }
.evento-destacado .acciones .badge a { color: inherit; font-weight: 700; }
.rejilla-eventos { display: grid; grid-template-columns: repeat(3, minmax(0,1fr)); gap: var(--sp-4); }
.tarjeta-ciudad-eventos { background: var(--superficie); border: 1px solid var(--borde-suave); border-radius: 18px; padding: 24px 24px; display: flex; flex-direction: column; gap: 12px; }
.tarjeta-ciudad-eventos .cab-ciudad { display: flex; align-items: baseline; justify-content: space-between; gap: 12px; }
/* (22-sep-2026, triaje 3b) Revisión de Ale: «ciudad y país desalineados». El país caía ~3,4 px
   por debajo de la base de la ciudad — la «base» que el h3 reportaba al flex era la de su icono
   (un SVG sin base de texto), no la del texto. Con el país anclado arriba, las dos bajadas
   coinciden: medido 3,4 → 0,0 px en 390/880/1366 y con letra grande (a++). Guardián:
   qa-cabecera-eventos.py (en la suite). */
.tarjeta-ciudad-eventos .pais { align-self: flex-start; }
.tarjeta-ciudad-eventos .titulo { font-size: 1.375rem; font-weight: 800; display: inline-flex; align-items: center; gap: 8px; margin: 0; }
.tarjeta-ciudad-eventos .pais { font-size: var(--fs-caption); color: var(--texto-suave); }
.lista-eventos-ciudad { list-style: none; margin: 0; padding: 0; display: flex; flex-direction: column; }
.lista-eventos-ciudad li { display: grid; grid-template-columns: 56px minmax(0,1fr); gap: 12px; align-items: center; padding: 12px 0; border-top: 1px solid var(--separador); }
.lista-eventos-ciudad .fecha-mini { text-align: center; line-height: 1.05; background: var(--tinte); border-radius: var(--radio-s); padding: 8px 0; }
.lista-eventos-ciudad .fecha-mini .num { display: block; font-size: 1.125rem; font-weight: 800; }
.lista-eventos-ciudad .fecha-mini .mes { display: block; font-size: 0.75rem; font-weight: 700; letter-spacing: .06em; color: var(--texto-suave); }
.lista-eventos-ciudad .que { display: flex; flex-direction: column; line-height: 1.3; min-width: 0; }
.lista-eventos-ciudad .que a { font-weight: 700; font-size: var(--fs-small); color: var(--texto); }
.lista-eventos-ciudad .que a:hover { color: var(--c-teal); }
.lista-eventos-ciudad .que > span { font-size: var(--fs-caption); color: var(--texto-suave); }
.lista-eventos-ciudad .linea-tipo { display: inline-flex; align-items: center; gap: 8px; flex-wrap: wrap; }
.lista-eventos-ciudad .linea-tipo .chip-tag { padding: 2px 10px; }
.lista-eventos-ciudad .impacto-nota { color: var(--texto-suave); }   /* 22-sep: el tag (chip) y la descripción (nota) se distinguen */
.tarjeta-ciudad-eventos > .btn { margin-top: auto; border-color: var(--borde); color: var(--texto); font-size: 0.9375rem; }
.tarjeta-ciudad-eventos > .btn:hover { border-color: var(--cta-primario); }
@media (max-width: 1000px) { .rejilla-eventos { grid-template-columns: repeat(2, minmax(0,1fr)); } }
@media (max-width: 720px) {
  .evento-destacado { grid-template-columns: 1fr; }
  .evento-destacado .media { min-height: 180px; }
  .evento-destacado .cuerpo { padding: var(--sp-4); }
  .evento-destacado .titulo { font-size: 1.5rem; }
  .rejilla-eventos { grid-template-columns: 1fr; }
  .seccion-home-eventos .cab { flex-direction: column; align-items: flex-start; }
}

/* ==========================================================================
   Rondas 12–17 · entrega 3 (08-sep-2026) — Área del turista (13a–13h, 16b):
   Mis reservas, pago realizado, Valorar, Mi perfil, Eventos y ficha de evento,
   Personalización. Solo piel: mismos id, data-* y clases de lógica.
   ========================================================================== */

/* ---- Barra lateral «Tu cuenta» (13a, 13e, 13f, 16b) ---- */
.cuenta-layout { display: grid; grid-template-columns: 240px minmax(0,1fr); gap: var(--sp-8); align-items: start; }
.cuenta-lateral { position: sticky; top: 96px; display: flex; flex-direction: column; gap: 8px; }
.cuenta-lateral .rotulo { margin: 0 0 8px 16px; font-size: var(--fs-caption); font-weight: 700; letter-spacing: .06em; text-transform: uppercase; color: var(--texto-suave); }
.cuenta-lateral a { display: flex; align-items: center; gap: 12px; min-height: 48px; padding: 0 16px; border-radius: var(--radio); border: 1px solid transparent; color: var(--texto); font-weight: 600; }
.cuenta-lateral a:hover { background: var(--superficie); color: var(--texto); }
.cuenta-lateral a[aria-current="page"] { background: var(--superficie); border-color: var(--borde-suave); box-shadow: inset 4px 0 0 var(--c-petroleo); font-weight: 700; }
.cuenta-lateral .ico { flex: 0 0 auto; width: 1.1em; height: 1.1em; }
.cuenta-contenido { display: flex; flex-direction: column; gap: var(--sp-6); min-width: 0; }
.cab-pantalla .titulo-pantalla { margin-bottom: 0; }
.cab-pantalla .claim { margin: 8px 0 0; font-size: 1.1875rem; max-width: 60ch; text-wrap: pretty; }
.acciones-form { display: flex; align-items: center; gap: 16px; flex-wrap: wrap; }
.acciones-form .texto-suave { font-size: 0.9375rem; }
.acciones-form.centradas { justify-content: center; gap: 12px; }
.nota-tinte { background: var(--tinte); border-radius: var(--radio-l); padding: 24px 24px; display: flex; gap: 12px; align-items: flex-start; font-size: var(--fs-small); }
.nota-tinte > .ico { flex: 0 0 auto; width: 22px; height: 22px; margin-top: 4px; }
.nota-tinte.columna { flex-direction: column; gap: 12px; }
.nota-tinte.columna .btn { align-self: flex-start; }
@media (max-width: 900px) {
  .cuenta-layout { grid-template-columns: 1fr; gap: var(--sp-5); }
  .cuenta-lateral { position: static; flex-direction: row; flex-wrap: wrap; }
  .cuenta-lateral .rotulo { flex-basis: 100%; margin-left: 0; }
  .cuenta-lateral a { min-height: 44px; padding: 0 12px; background: var(--superficie); border-color: var(--borde-suave); font-size: 0.9375rem; }
}

/* ---- 13a/13b · Mis reservas ---- */
.aviso.enlinea { background: var(--superficie); border: 1px solid var(--borde); color: var(--texto-suave); align-items: center; font-size: var(--fs-small); }
.aviso.enlinea .btn { margin-left: auto; min-height: var(--tactil); padding: 0 16px; border-radius: var(--radio-s); font-size: 0.9375rem; }   /* (22-sep-2026) era 40 px: es un botón, regla de casa (el media de ≤720 ya lo subía ahí; ahora vale en todos los anchos) */
.notas-politica { display: grid; grid-template-columns: repeat(2, minmax(0,1fr)); gap: 12px; }
.nota-politica { display: flex; gap: 12px; align-items: flex-start; margin: 0; background: var(--tinte); border-radius: 14px; padding: 16px 16px; font-size: var(--fs-small); }
.nota-politica .ico { flex: 0 0 auto; width: 22px; height: 22px; margin-top: 4px; }
.cuenta-contenido .subtitulo { font-size: 1.625rem; font-weight: 800; margin-bottom: 16px; }
.lista-reservas { display: flex; flex-direction: column; gap: 16px; }
.lista-reservas .tarjeta-tour { grid-template-columns: 96px minmax(0,1fr) auto; gap: 24px; padding: 24px 24px; align-items: start; border-radius: 18px; }
.lista-reservas .tarjeta-tour .cuerpo { padding: 0; gap: 8px; min-width: 0; }
.fecha-reserva { display: flex; flex-direction: column; text-align: center; border-right: 1px solid var(--separador); padding-right: 16px; line-height: 1.1; }
.fecha-reserva .dia, .fecha-reserva .mes { font-size: var(--fs-caption); font-weight: 700; color: var(--texto-suave); letter-spacing: .04em; text-transform: uppercase; }
.fecha-reserva .num { font-size: 2.375rem; font-weight: 800; letter-spacing: -.02em; }
.lista-reservas .estados { display: flex; align-items: center; gap: 12px; flex-wrap: wrap; }
.lista-reservas .estado { padding: 4px 12px; border-radius: var(--radio-pill); font-size: 0.875rem; background: var(--tinte); }
.lista-reservas .estado.completada { background: var(--tinte-exito); }
.lista-reservas .estado.pendiente { background: var(--tinte-aviso); }
.lista-reservas .estado.cancelada { background: var(--tinte-error); }
.lista-reservas .tarjeta-tour .titulo { font-size: 1.4375rem; font-weight: 800; }
.lista-reservas .tarjeta-tour .meta { margin-top: 0; padding-top: 0; gap: 8px 16px; font-size: var(--fs-small); }
.lista-reservas .tarjeta-tour .meta > span { display: inline-flex; align-items: center; gap: 8px; }
.lista-reservas .tarjeta-tour .nota { font-size: 0.9375rem; color: var(--texto-suave); }
.acciones-reserva { display: flex; flex-direction: column; gap: 8px; min-width: 180px; }
.acciones-reserva .importe { text-align: right; font-size: 1.375rem; font-weight: 800; letter-spacing: -.01em; }
.acciones-reserva .btn { min-height: 44px; font-size: var(--fs-small); padding: 0 var(--sp-4); }
.acciones-reserva .btn.borde-suave { border-color: var(--borde); color: var(--texto); }
.acciones-reserva .btn.borde-suave:hover { border-color: var(--cta-primario); background: var(--superficie); color: var(--texto); }
.acciones-reserva .btn-enlace { color: var(--texto-suave); font-size: 0.9375rem; min-height: var(--tactil-compacto); }   /* los 40 px viven en el token (un dato, un hogar) */
.vacio-cuenta { display: flex; flex-direction: column; align-items: center; text-align: center; gap: 16px; padding: 40px; border-radius: var(--radio-l); }
.vacio-cuenta .ico-grande { width: 96px; height: 96px; border-radius: 50%; background: var(--tinte); display: grid; place-items: center; }
.vacio-cuenta .ico-grande .ico { width: 44px; height: 44px; stroke-width: 1.8; }
.vacio-cuenta h2 { font-size: 1.75rem; font-weight: 800; letter-spacing: -.015em; }
.vacio-cuenta p { color: var(--texto-suave); max-width: 38ch; text-wrap: pretty; }
.vacio-cuenta .acciones { display: flex; gap: 12px; flex-wrap: wrap; justify-content: center; margin-top: 8px; }
@media (max-width: 1100px) {
  .lista-reservas .tarjeta-tour { grid-template-columns: 96px minmax(0,1fr); }
  .acciones-reserva { grid-column: 1 / -1; flex-direction: row; flex-wrap: wrap; align-items: center; min-width: 0; border-top: 1px solid var(--separador); padding-top: 16px; }
  .acciones-reserva .importe { margin-right: auto; }
}
@media (max-width: 720px) {
  .notas-politica { grid-template-columns: 1fr; }
  .lista-reservas .tarjeta-tour { grid-template-columns: 72px minmax(0,1fr); gap: 16px; padding: 16px; }
  .fecha-reserva .num { font-size: 1.75rem; }
}

/* ---- 13c · Pago realizado ---- */
.pago-resultado { max-width: 760px; margin: 0 auto; display: flex; flex-direction: column; gap: 32px; }
.cab-exito { display: flex; flex-direction: column; align-items: center; text-align: center; gap: 12px; padding-top: var(--sp-4); }
.cab-exito .ico-exito { width: 88px; height: 88px; border-radius: 50%; background: var(--tinte-exito); color: var(--c-exito); display: grid; place-items: center; }
.cab-exito .ico-exito .ico { width: 44px; height: 44px; stroke-width: 3; }
.cab-exito .titulo-pantalla { margin: 0; }
.cab-exito .aviso.exito { display: inline-flex; }
.cab-exito .claim { margin: 0; font-size: 1.25rem; max-width: 46ch; text-wrap: pretty; }
.que-pasa-ahora { border-radius: var(--radio-l); padding: 24px 32px; }
.que-pasa-ahora .subtitulo { font-size: 1.375rem; font-weight: 800; margin-bottom: 16px; }
.que-pasa-ahora .pasos-home { gap: 24px; }
.que-pasa-ahora .pasos-home li { gap: 8px; }
.que-pasa-ahora .pasos-home h3 { font-size: var(--fs-base); line-height: 1.3; }
.que-pasa-ahora .pasos-home h3 .n { display: inline-grid; place-items: center; width: 40px; height: 40px; border-radius: 50%; background: var(--tinte); color: var(--texto); font-weight: 800; margin: 0 0 8px; }
.que-pasa-ahora .pasos-home li:first-child h3 .n { background: var(--energia-acento); }
.que-pasa-ahora .pasos-home h3 { display: flex; flex-direction: column; align-items: flex-start; gap: 4px; }
.que-pasa-ahora .pasos-home p { font-size: var(--fs-small); text-wrap: pretty; }
@media (max-width: 720px) { .que-pasa-ahora .pasos-home { grid-template-columns: 1fr; } }

/* ---- 13e · Valorar ---- */
.tour-valorado { display: flex; align-items: center; gap: 16px; background: var(--superficie); border: 1px solid var(--borde-suave); border-radius: var(--radio-m); padding: 16px 16px; }
.tour-valorado .ph { flex: 0 0 72px; aspect-ratio: 1; border-radius: 12px; background: var(--placeholder-foto); }
.tour-valorado .quien { display: flex; flex-direction: column; line-height: 1.3; min-width: 0; }
.tour-valorado .quien strong { font-size: 1.25rem; }
.tour-valorado .quien span { font-size: 0.9375rem; color: var(--texto-suave); }
.tour-valorado .nota { margin-left: auto; font-size: var(--fs-caption); color: var(--texto-suave); max-width: 26ch; text-align: right; }
.bloque-valorar { min-width: 0; margin: 0; border: 1px solid var(--borde-suave); border-radius: var(--radio-l); padding: 24px 32px; display: flex; flex-direction: column; gap: 16px; }
.bloque-valorar legend { float: left; width: 100%; padding: 0; margin: 0 0 8px; font-size: 1.375rem; font-weight: 800; letter-spacing: -.01em; }
.bloque-valorar > label.titulo-bloque { display: block; margin: 0; font-size: 1.375rem; font-weight: 800; letter-spacing: -.01em; }
.bloque-valorar .ayuda { font-size: 0.9375rem; color: var(--texto-suave); margin: 0; }
.notas { display: grid; grid-template-columns: repeat(5, minmax(0,1fr)); gap: 12px; clear: both; }
.notas input { position: absolute; opacity: 0; width: 1px; height: 1px; }
.notas label { display: flex; flex-direction: column; align-items: center; gap: 8px; cursor: pointer; font-weight: 700; font-size: 0.9375rem; color: var(--texto-suave); }
.notas label .num { width: 100%; height: 72px; border-radius: 14px; border: 2px solid var(--borde); background: var(--superficie); color: var(--texto); display: grid; place-items: center; font-size: 1.875rem; font-weight: 800; transition: background var(--trans), border-color var(--trans); }
.notas label:hover .num { border-color: var(--c-petroleo); }
.notas input:checked + label { color: var(--texto); }
.notas input:checked + label .num { background: var(--c-petroleo); border-color: var(--c-petroleo); color: var(--c-blanco); }
.notas input:focus-visible + label .num { outline: 3px solid var(--foco); outline-offset: 2px; }
.bloque-valorar textarea { min-height: 120px; font-size: var(--fs-base); }
.incidencias { grid-template-columns: repeat(3, minmax(0,1fr)); gap: 12px; clear: both; }
.incidencias label { align-items: flex-start; gap: 12px; padding: 16px; }
.incidencias .ico-caja { flex: 0 0 auto; width: 40px; height: 40px; border-radius: 50%; background: var(--tinte); display: grid; place-items: center; }
.incidencias input:checked + label .ico-caja { background: var(--superficie); }
.incidencias label > span:last-child { display: flex; flex-direction: column; gap: 4px; }
.incidencias label small { font-size: var(--fs-caption); color: var(--texto-suave); font-weight: 500; line-height: 1.4; }
.nota-queja { display: none; gap: 12px; align-items: flex-start; font-size: var(--fs-small); color: var(--texto-suave); background: var(--c-fondo); border-radius: var(--radio); padding: 12px 16px; }
.nota-queja .ico { flex: 0 0 auto; width: 20px; height: 20px; margin-top: 4px; }
.bloque-valorar:has(#inc-queja:checked) .nota-queja { display: flex; }
@media (max-width: 720px) {
  .notas { gap: 8px; }
  .notas label .num { height: 56px; font-size: 1.5rem; }
  .notas label { font-size: 0.8125rem; }
  .incidencias { grid-template-columns: 1fr; }
  .tour-valorado { flex-wrap: wrap; }
  .tour-valorado .nota { margin-left: 0; text-align: left; max-width: none; }
  .bloque-valorar { padding: var(--sp-4); }
}

/* ---- 13f · Mi perfil (fuera la barra «Alta por pasos 33 %»: no hay pasos) ---- */
.perfil-layout { display: grid; grid-template-columns: minmax(0,1fr) 320px; gap: 32px; align-items: start; }
.form-perfil { display: flex; flex-direction: column; gap: 24px; padding: 32px; border-radius: var(--radio-l); }
.form-perfil .campo label { font-size: var(--fs-base); }
.form-perfil .campo label .opcional { font-weight: 400; }
.form-perfil .fila-idioma-libre { display: flex; gap: 8px; flex-wrap: wrap; align-items: center; margin-top: 8px; }
.form-perfil .fila-idioma-libre input { flex: 1; width: auto; min-width: 220px; min-height: 48px; }
.form-perfil .fila-idioma-libre .btn { min-height: 48px; }
.consentimiento label { background: var(--c-fondo); border-color: transparent; align-items: flex-start; }
.consentimiento input:checked + label { background: var(--tinte); border-color: var(--c-petroleo); }
.consentimiento .casilla { flex: 0 0 auto; width: 24px; height: 24px; margin-top: 4px; border: 2px solid var(--borde); border-radius: 6px; background: var(--superficie); color: transparent; display: grid; place-items: center; }
.consentimiento .casilla .ico { stroke-width: 3; }
.consentimiento input:checked + label .casilla { background: var(--c-petroleo); border-color: var(--c-petroleo); color: var(--c-blanco); }
.perfil-aside { display: flex; flex-direction: column; gap: 16px; }
.perfil-aside .tarjeta { border-radius: var(--radio-l); padding: 24px 24px; display: flex; flex-direction: column; gap: 12px; }
.perfil-aside h2 { font-size: 1.25rem; font-weight: 800; letter-spacing: -.01em; }
.perfil-aside .texto-suave { font-size: 0.9375rem; }
.lista-datos { list-style: none; margin: 0; padding: 0; display: flex; flex-direction: column; gap: 12px; font-size: var(--fs-small); }
.lista-datos li { display: flex; gap: 12px; }
.lista-datos .ico { flex: 0 0 auto; color: var(--c-exito); margin-top: 4px; stroke-width: 3; }
@media (max-width: 1000px) { .perfil-layout { grid-template-columns: 1fr; } }
@media (max-width: 720px) { .form-perfil { padding: var(--sp-4); } }

/* ---- 13g · Eventos locales (T11) ---- */
.filtros-eventos { background: var(--superficie); border-radius: var(--radio-l); padding: var(--sp-4); box-shadow: var(--sombra-media); display: flex; flex-direction: column; gap: 12px; margin-bottom: var(--sp-5); }
.filtros-eventos-campos { display: grid; grid-template-columns: 1.2fr 1.2fr 1fr 1fr; gap: 12px; align-items: end; }
.filtros-eventos-campos label { display: flex; flex-direction: column; gap: 4px; font-size: var(--fs-caption); font-weight: 700; color: var(--texto-suave); }
.filtros-eventos-campos select, .filtros-eventos-campos input { min-height: 48px; border: 2px solid var(--borde); border-radius: var(--radio); padding: 0 12px; font: inherit; font-size: 1.0625rem; font-weight: 600; color: var(--texto); background: var(--superficie); }
.filtros-eventos-campos select:focus, .filtros-eventos-campos input:focus { border-color: var(--foco); }
.chips-eventos { display: flex; align-items: center; gap: 8px; flex-wrap: wrap; border-top: 1px solid var(--separador); padding-top: 12px; }
.chips-eventos .rotulo { font-size: 0.9375rem; font-weight: 700; color: var(--texto-suave); margin-right: 4px; }
.chips-eventos .chip {padding: 0 16px; font-size: 0.9375rem; font-weight: 700; }
.resultado-eventos { font-size: 1.0625rem; margin-bottom: var(--sp-4); }
.tarjeta-evento { background: var(--superficie); border: 1px solid var(--borde-suave); border-radius: 18px; overflow: hidden; display: flex; flex-direction: column; }
.tarjeta-evento .media { position: relative; height: 140px; background: var(--placeholder-foto); display: grid; place-items: center; }
.tarjeta-evento .media .ph { font-family: ui-monospace, monospace; font-size: 0.75rem; color: var(--texto-suave); }
.tarjeta-evento .media .badge { position: absolute; left: 14px; top: 14px; background: var(--superficie); color: var(--texto); }
.tarjeta-evento .cuerpo { padding: 16px 24px 24px; display: flex; flex-direction: column; gap: 8px; flex: 1; }
.tarjeta-evento .zona { font-size: var(--fs-caption); font-weight: 700; color: var(--texto-suave); display: flex; align-items: center; gap: 8px; }
.tarjeta-evento .titulo { font-size: 1.375rem; font-weight: 800; letter-spacing: -.01em; line-height: 1.2; }
.tarjeta-evento .titulo a { color: var(--texto); }
.tarjeta-evento .titulo a:hover { color: var(--c-teal); }
.tarjeta-evento .fechas { display: inline-flex; align-items: center; gap: 8px; font-size: var(--fs-small); font-weight: 700; }
.evento-cab .fechas { display: inline-flex; align-items: center; font-weight: 700; }
.etiquetas-tags { display: flex; gap: 8px; flex-wrap: wrap; }
.chip-tag { display: inline-flex; align-items: center; min-height: 0; padding: 4px 12px; border: 0; border-radius: var(--radio-pill); background: var(--tinte); color: var(--texto); font-weight: 700; font-size: var(--fs-micro); }
.tarjeta-evento .descripcion-corta { font-size: 0.9375rem; color: var(--texto-suave); text-wrap: pretty; }
.impacto-evento { display: flex; gap: 8px; align-items: flex-start; font-size: var(--fs-caption); color: var(--texto-suave); }
.impacto-evento .ico { flex: 0 0 auto; margin-top: 4px; }
.tarjeta-evento .acciones { margin-top: auto; padding-top: 8px; }
.badge-tour { display: inline-flex; align-items: center; gap: 8px; padding: 8px 16px; font-size: 0.9375rem; }
.badge-tour a { color: inherit; font-weight: 700; }
.vacio-eventos { text-align: center; display: flex; flex-direction: column; align-items: center; gap: 12px; padding: 40px; border-radius: var(--radio-l); }
.vacio-eventos h2 { font-size: 1.625rem; font-weight: 800; }
@media (max-width: 1000px) { .filtros-eventos-campos { grid-template-columns: repeat(2, minmax(0,1fr)); } }
@media (max-width: 720px) { .filtros-eventos-campos { grid-template-columns: 1fr; } }

/* ---- 13h · Ficha de evento (T11Evento) ---- */
.evento-ficha { display: grid; grid-template-columns: minmax(0,1fr) 360px; gap: var(--sp-8); align-items: start; margin-bottom: var(--sp-8); }
.evento-principal { display: flex; flex-direction: column; gap: 24px; min-width: 0; }
.evento-cab { display: flex; flex-direction: column; gap: 12px; }
.evento-cab .cinta { display: flex; align-items: center; gap: 12px; flex-wrap: wrap; }
.badge.tipo-evento { background: var(--c-petroleo); color: var(--c-blanco); font-size: 0.875rem; padding: 4px 12px; }
.evento-cab .zona { display: inline-flex; align-items: center; gap: 8px; font-size: var(--fs-small); font-weight: 700; color: var(--texto-suave); }
.evento-cab .titulo-pantalla { margin: 0; font-size: 3rem; line-height: 1.05; }
.evento-cab .fechas { font-size: 1.25rem; gap: 8px; }
.media-evento { aspect-ratio: 21 / 9; border-radius: var(--radio-l); background: var(--placeholder-foto); display: grid; place-items: center; font-family: ui-monospace, monospace; font-size: 0.8125rem; color: var(--texto-suave); }
.evento-principal .aviso.impacto { background: var(--superficie); border: 1px solid var(--borde-suave); color: var(--texto); font-size: var(--fs-small); }
.evento-principal .aviso.impacto .ico { flex: 0 0 auto; width: 24px; height: 24px; margin-top: 4px; }
.bloque-evento .subtitulo { font-size: 1.625rem; font-weight: 800; margin-bottom: 8px; }
.bloque-evento > p { text-wrap: pretty; max-width: 70ch; }
.sitios-evento { display: flex; gap: 8px; flex-wrap: wrap; max-width: none; }
.chip-sitio { display: inline-flex; align-items: center; gap: 8px; padding: 8px 16px; border-radius: var(--radio-pill); background: var(--superficie); border: 1px solid var(--borde-suave); font-weight: 600; font-size: var(--fs-small); }
.agenda { list-style: none; margin: 0; padding: 0; background: var(--superficie); border: 1px solid var(--borde-suave); border-radius: 18px; overflow: hidden; }
.agenda li { display: grid; grid-template-columns: 160px 80px minmax(0,1fr); gap: 16px; padding: 16px 24px; border-bottom: 1px solid var(--separador); align-items: baseline; }
.agenda li:last-child { border-bottom: 0; }
.agenda .fecha { font-weight: 700; }
.agenda .hora { font-weight: 700; color: var(--texto-suave); }
.evento-aside { display: flex; flex-direction: column; gap: 16px; }
.tarjeta-tour-evento { background: var(--superficie); border: 1px solid var(--borde-suave); border-radius: var(--radio-l); overflow: hidden; }
.tarjeta-tour-evento .cinta { background: var(--tinte-exito); color: var(--c-exito); padding: 12px 24px; font-weight: 700; font-size: 0.9375rem; display: flex; align-items: center; gap: 8px; }
.tarjeta-tour-evento .cinta.tinte { background: var(--tinte); color: var(--texto); }
.tarjeta-tour-evento .cuerpo { padding: 24px; display: flex; flex-direction: column; gap: 12px; }
.tarjeta-tour-evento .ph { aspect-ratio: 16 / 9; border-radius: 12px; background: var(--placeholder-foto); }
.tarjeta-tour-evento .zona { font-size: var(--fs-caption); font-weight: 700; color: var(--texto-suave); }
.tarjeta-tour-evento h2 { font-size: 1.375rem; font-weight: 800; letter-spacing: -.01em; line-height: 1.2; margin-top: 4px; }
.tarjeta-tour-evento .texto-suave { font-size: 0.9375rem; }
.tarjeta-tour-evento .cuerpo > .btn { align-self: flex-start; }
.tarjeta-tour-evento .pie { display: flex; align-items: center; justify-content: space-between; gap: 12px; flex-wrap: wrap; }
.tarjeta-tour-evento .precio { font-size: 1.375rem; font-weight: 800; }
.tarjeta-tour-evento .precio small { font-size: 0.8125rem; font-weight: 600; color: var(--texto-suave); }
.similares .subtitulo { font-size: 1.625rem; font-weight: 800; margin-bottom: 16px; }
@media (max-width: 1000px) {
  .evento-ficha { grid-template-columns: 1fr; }
  .evento-aside.fijo { position: static; }
  .evento-cab .titulo-pantalla { font-size: 2.25rem; }
  .agenda li { grid-template-columns: 1fr; gap: 4px; }
}

/* ---- 16b · Personalización (#/panel). Los controles los pinta panelControlesHTML(): aquí solo
   se ordenan en tarjetas. En el panel flotante los grupos son transparentes (display:contents). ---- */
.panel-accesibilidad .panel-grupo { display: contents; }
.panel-accesibilidad .panel-grupo h3 { display: none; }
.panel-layout { display: grid; grid-template-columns: minmax(0,1fr) 340px; gap: 32px; align-items: start; }
.pagina-panel [data-panel-controles] { display: flex; flex-direction: column; gap: 16px; min-width: 0; }
.pagina-panel #titulo-panel { position: absolute; width: 1px; height: 1px; overflow: hidden; clip: rect(0 0 0 0); white-space: nowrap; }
.pagina-panel .panel-grupo { background: var(--superficie); border: 1px solid var(--borde-suave); border-radius: var(--radio-l); padding: 24px 24px; display: flex; flex-direction: column; }
.pagina-panel .panel-grupo h3 { font-size: 1.375rem; font-weight: 800; letter-spacing: -.01em; margin-bottom: 8px; }
.pagina-panel .fila { display: flex; align-items: center; justify-content: space-between; gap: 16px; padding: 16px 0; border-top: 1px solid var(--separador); flex-wrap: wrap; }
.pagina-panel .panel-grupo h3 + .fila { border-top: 0; }
.pagina-panel .panel-grupo .fila:last-child { padding-bottom: 0; }
.pagina-panel .fila > span { font-weight: 700; }
.pagina-panel .segmento { flex-wrap: wrap; max-width: 100%; }
.pagina-panel .segmento button { min-height: 44px; padding: 0 16px; flex: 1 1 auto; }
.pagina-panel .btn.tactil-compacto {padding: 0 16px; border-radius: var(--radio-pill); }
.pagina-panel [data-panel-controles] > .texto-suave { font-size: 0.9375rem; }
.pagina-panel [data-panel-controles] > .btn { align-self: flex-start; border-color: var(--borde); color: var(--texto); }
.panel-preview { position: sticky; top: 96px; display: flex; flex-direction: column; gap: 12px; }
.panel-preview .rotulo { margin: 0 0 0 4px; font-size: var(--fs-caption); font-weight: 700; letter-spacing: .06em; text-transform: uppercase; color: var(--texto-suave); }
.panel-preview .texto-suave { font-size: var(--fs-caption); }
.preview-card { padding: 0; overflow: hidden; border-radius: var(--radio-l); }
.preview-card .cab { background: var(--c-petroleo); color: var(--c-blanco); padding: 16px 24px; font-weight: 700; font-size: 0.9375rem; }
.preview-card .cuerpo { padding: 24px; display: flex; flex-direction: column; gap: 12px; }
.preview-card .titulo { font-size: 1.25rem; font-weight: 800; letter-spacing: -.01em; line-height: 1.2; }
.preview-card .chips { display: flex; gap: 8px; flex-wrap: wrap; }
.preview-card .btn { align-self: flex-start; }
@media (max-width: 1000px) { .panel-layout { grid-template-columns: 1fr; } .panel-preview { position: static; } }

/* ==========================================================================
   Rondas 12–17 · entrega 4 (08-sep-2026) — Área de guía (14b–14i): Alertas,
   Confirmar, Agenda, Asistencia, Calendario, Pagos, Reseñas. Solo piel.
   ========================================================================== */
.cab-guia { display: flex; align-items: flex-end; justify-content: space-between; gap: var(--sp-5); flex-wrap: wrap; margin-bottom: var(--sp-5); }  /* (15-sep) ritmo: la cabecera se separa del contenido sp-5 */
.cab-guia > div:first-child { min-width: 0; }
.caja-prefs { display: flex; flex-direction: column; gap: 8px; align-items: flex-start; border-radius: 14px; padding: 12px 16px; font-size: 0.9375rem; color: var(--texto-suave); max-width: 420px; margin: 0; }
.caja-prefs strong { color: var(--texto); }
.guia-dos-columnas { display: grid; grid-template-columns: minmax(0,1fr) 360px; gap: var(--sp-7); align-items: start; }
.guia-dos-columnas.iguales { grid-template-columns: repeat(2, minmax(0,1fr)); }
.columna-guia { display: flex; flex-direction: column; gap: var(--sp-5); min-width: 0; }
.guia-aside { display: flex; flex-direction: column; gap: var(--sp-4); }
.bloque-guia { margin: 0; border: 1px solid var(--borde-suave); border-radius: var(--radio-l); padding: 24px 24px; display: flex; flex-direction: column; gap: 12px; }
.bloque-guia h2, .bloque-guia legend { font-size: 1.375rem; font-weight: 800; letter-spacing: -.01em; }
.bloque-guia legend { float: left; width: 100%; padding: 0; margin: 0 0 4px; }
.bloque-guia h2 label { font-size: inherit; font-weight: inherit; margin: 0; }
.bloque-guia .texto-suave { font-size: 0.9375rem; }
.bloque-guia > .btn { align-self: flex-start; }
.bloque-guia .aviso { font-size: 0.9375rem; }
.bloque-guia .aviso .ico { flex: 0 0 auto; margin-top: 4px; }

/* 14f · Calendario: franjas como filas grandes (checkbox real fr-manana/tarde/noche) */
.franjas-guia { clear: both; }
.lista-franjas { grid-template-columns: 1fr; gap: 12px; clear: both; }
.lista-franjas label { align-items: center; gap: 16px; min-height: 56px; padding: 0 16px; }
.lista-franjas label span:last-child { display: flex; flex-direction: column; line-height: 1.25; }
.lista-franjas label small { font-size: var(--fs-caption); color: var(--texto-suave); font-weight: 500; }
.lista-franjas .casilla { flex: 0 0 auto; width: 24px; height: 24px; border: 2px solid var(--borde); border-radius: 6px; background: var(--superficie); color: transparent; display: grid; place-items: center; }
.lista-franjas .casilla .ico { stroke-width: 3; }
.lista-franjas input:checked + label .casilla { background: var(--c-petroleo); border-color: var(--c-petroleo); color: var(--c-blanco); }

/* 14b · Alertas */
.lista-alertas { display: flex; flex-direction: column; gap: 16px; }
.tarjeta-alerta { display: grid; grid-template-columns: 96px minmax(0,1fr) minmax(250px, auto); gap: 24px; background: var(--superficie); border: 1px solid var(--borde-suave); border-radius: 18px; padding: 24px 24px; align-items: start; }
/* (15-sep-2026, Orden 1 Anthropic) colocación explícita: cada hijo dice su columna —
   el JS emite un número variable de hijos (la fecha puede faltar) y sin esto el cuerpo
   caía en la columna de 96 px con el título a una palabra por línea. */
.tarjeta-alerta > .fecha-reserva { grid-column: 1; }
.tarjeta-alerta > .cuerpo { grid-column: 2; }
.tarjeta-alerta > .pago-alerta { grid-column: 3; }
.tarjeta-alerta.sin-fecha { grid-template-columns: minmax(0,1fr) minmax(250px, auto); }
.tarjeta-alerta.sin-fecha > .cuerpo { grid-column: 1; }
.tarjeta-alerta.sin-fecha > .pago-alerta { grid-column: 2; }
.tarjeta-alerta .cuerpo { display: flex; flex-direction: column; gap: 8px; min-width: 0; }
.tarjeta-alerta .titulo { font-size: 1.5rem; font-weight: 800; letter-spacing: -.01em; line-height: 1.2; }
.chips-datos { display: flex; gap: 8px; flex-wrap: wrap; }
.chips-datos > span { display: inline-flex; align-items: center; gap: 8px; padding: 4px 12px; border-radius: var(--radio-pill); background: var(--tinte); font-weight: 700; font-size: 0.9375rem; white-space: nowrap; }
.aviso-hab { display: flex; gap: 8px; align-items: flex-start; margin: 0; font-size: 0.9375rem; color: var(--c-aviso); font-weight: 700; }
.aviso-hab .ico { flex: 0 0 auto; margin-top: 4px; }
.tarjeta-alerta .btn-escuchar { align-self: flex-start; }
.pago-alerta { display: flex; flex-direction: column; gap: 8px; border-left: 1px solid var(--separador); padding-left: 24px; }
.pago-alerta .rotulo { font-size: var(--fs-caption); font-weight: 700; color: var(--texto-suave); }
.pago-alerta .cifra { font-size: 1.875rem; font-weight: 800; letter-spacing: -.02em; line-height: 1.1; }
.pago-alerta .texto-suave { font-size: var(--fs-caption); margin-bottom: 4px; }
.pago-alerta .btn { min-height: 46px; font-size: var(--fs-small); }
.nota-alertas { max-width: 820px; }

/* 14c · Confirmar tour */
.tarjeta-resumen-tour { background: var(--superficie); border: 1px solid var(--borde-suave); border-radius: var(--radio-l); overflow: hidden; }
.tarjeta-resumen-tour .cab { display: grid; grid-template-columns: 200px minmax(0,1fr); gap: 24px; padding: 24px 24px; align-items: center; }
.tarjeta-resumen-tour .ph { aspect-ratio: 4 / 3; border-radius: 14px; background: var(--placeholder-foto); }
.tarjeta-resumen-tour .zona { font-size: var(--fs-caption); font-weight: 700; color: var(--texto-suave); }
.tarjeta-resumen-tour h2 { font-size: 1.75rem; font-weight: 800; letter-spacing: -.015em; line-height: 1.15; }
.tarjeta-resumen-tour .texto-suave { font-size: var(--fs-small); }
.datos-tres { margin: 0; display: grid; grid-template-columns: repeat(3, minmax(0,1fr)); border-top: 1px solid var(--separador); }
.datos-tres > div { padding: 16px 24px; border-right: 1px solid var(--separador); }
.datos-tres > div:last-child { border-right: 0; }
.datos-tres dt { font-size: var(--fs-caption); color: var(--texto-suave); font-weight: 700; }
.datos-tres dd { margin: 4px 0 0; font-weight: 700; }
.desglose-pago { margin: 0; display: flex; flex-direction: column; gap: 8px; font-size: 1.0625rem; }
.desglose-pago > div { display: flex; justify-content: space-between; gap: 16px; }
.desglose-pago dt { color: var(--texto-suave); }
.desglose-pago dd { margin: 0; font-weight: 700; }
.desglose-pago .total { border-top: 2px solid var(--separador); padding-top: 12px; font-size: 1.375rem; }
.desglose-pago .total dt { color: var(--texto); font-weight: 800; }
.desglose-pago .total dd { font-weight: 800; }
.acciones-aceptar { display: flex; flex-direction: column; gap: 12px; }
.acciones-aceptar .texto-suave { font-size: 0.9375rem; text-align: center; }
.guia-aside .lista-datos .ico { color: var(--texto-suave); }
.guia-aside .lista-datos li:first-child .ico { color: var(--c-exito); }

/* 14e · Registrar asistencia */
.visor-qr { position: relative; aspect-ratio: 4 / 3; border-radius: 16px; background: #0E2E33; overflow: hidden; display: grid; place-items: center; }
.visor-qr .marco { position: absolute; inset: 14%; border: 3px dashed rgba(255,255,255,.55); border-radius: 18px; }
.visor-qr .texto { position: relative; color: rgba(255,255,255,.9); font-size: var(--fs-small); font-weight: 600; text-align: center; max-width: 24ch; }
.fila-codigo { display: flex; gap: 12px; flex-wrap: wrap; }
.fila-codigo input { flex: 1; min-width: 220px; min-height: 56px; padding: 0 16px; border: 2px solid var(--borde); border-radius: var(--radio); background: var(--superficie); font-family: ui-monospace, monospace; font-size: 1.5rem; letter-spacing: .08em; color: var(--texto); text-transform: uppercase; }
.fila-codigo input:focus { border-color: var(--foco); }
.fila-codigo .btn { min-height: 56px; white-space: nowrap; }

/* 14d · Agenda */
.dia-agenda + .dia-agenda { margin-top: var(--sp-6); }
.rotulo-dia { display: flex; align-items: center; gap: 12px; font-size: 1.0625rem; font-weight: 700; letter-spacing: .04em; text-transform: uppercase; color: var(--texto-suave); margin-bottom: 12px; }
.rotulo-dia::after { content: ""; flex: 1; height: 1px; background: var(--borde-suave); }
.lista-agenda { display: flex; flex-direction: column; gap: 12px; }
.tarjeta-agenda { display: grid; grid-template-columns: 96px minmax(0,1fr) auto; gap: 24px; background: var(--superficie); border: 1px solid var(--borde-suave); border-radius: 18px; padding: 16px 24px; align-items: center; }
.tarjeta-agenda .hora-grande { font-size: 1.875rem; font-weight: 800; letter-spacing: -.02em; border-right: 1px solid var(--separador); }
.tarjeta-agenda .cuerpo { display: flex; flex-direction: column; gap: 8px; min-width: 0; }
.tarjeta-agenda .estados { display: flex; align-items: center; gap: 8px; flex-wrap: wrap; margin: 0; }
.tarjeta-agenda .estado { padding: 4px 12px; border-radius: var(--radio-pill); background: var(--tinte); font-size: var(--fs-micro); }
.tarjeta-agenda .estado.completada { background: var(--tinte-exito); }
.tarjeta-agenda .estado.pendiente { background: var(--tinte-aviso); }
.tarjeta-agenda .titulo { font-size: 1.375rem; font-weight: 800; letter-spacing: -.01em; line-height: 1.2; }
.tarjeta-agenda .texto-suave { font-size: 0.9375rem; }
.tarjeta-agenda [data-hab-badge], .tarjeta-alerta [data-hab-badge] { font-size: var(--fs-caption); padding: 8px 12px; align-items: center; flex-wrap: wrap; }
.tarjeta-agenda [data-hab-badge] .btn, .tarjeta-alerta [data-hab-badge] .btn { min-height: 44px; font-size: 0.9375rem; }
.acciones-agenda { display: flex; flex-direction: column; gap: 8px; min-width: 200px; }
.acciones-agenda .btn { min-height: 44px; font-size: var(--fs-small); }
.atajos-guia { display: flex; flex-direction: column; gap: var(--sp-2); align-items: flex-start; }
/* (15-sep-2026, Orden 6 Anthropic) los accesos son BOTONES fantasma apilados, no cajas
   del ancho de la columna que parecían tarjetas vacías. */
.atajos-guia a { width: 100%; justify-content: flex-start; }

/* 14h · Pagos */
.rejilla-pagos { display: grid; grid-template-columns: repeat(3, minmax(0,1fr)); gap: 16px; margin-bottom: var(--sp-5); }
.cifra-pago { border-radius: 18px; padding: 24px 24px; display: flex; flex-direction: column; gap: 4px; }
.cifra-pago .rotulo { font-size: 0.9375rem; font-weight: 700; color: var(--texto-suave); }
.cifra-pago strong { font-size: 2.25rem; font-weight: 800; letter-spacing: -.02em; line-height: 1.1; }
.cifra-pago .texto-suave { font-size: 0.9375rem; }
.cifra-pago.petroleo { background: var(--c-petroleo); border-color: var(--c-petroleo); color: var(--c-blanco); }
.cifra-pago.petroleo .rotulo, .cifra-pago.petroleo span { color: var(--c-blanco); opacity: .88; }
.cifra-pago.petroleo strong { font-size: 1.75rem; }
.tabla-envoltorio { background: var(--superficie); border: 1px solid var(--borde-suave); border-radius: var(--radio-l); overflow: hidden; }
.tabla-pagos { width: 100%; border-collapse: collapse; font-size: 1.0625rem; }
.tabla-pagos th { text-align: left; padding: 16px 24px; font-size: var(--fs-caption); font-weight: 700; color: var(--texto-suave); letter-spacing: .04em; text-transform: uppercase; }
.tabla-pagos td { padding: 16px 24px; border-top: 1px solid var(--separador); }
.tabla-pagos .der { text-align: right; }
.tabla-pagos .nowrap { white-space: nowrap; font-weight: 700; }
.tabla-pagos .importe { font-weight: 800; }
.tabla-pagos .estado { padding: 4px 12px; border-radius: var(--radio-pill); font-size: 0.875rem; white-space: nowrap; }
.tabla-pagos .estado.completada { background: var(--tinte-exito); }
.tabla-pagos .estado.pendiente { background: var(--tinte-aviso); }

/* 14i · Reseñas */
.lista-reviews { display: flex; flex-direction: column; gap: 16px; margin-bottom: var(--sp-5); }
.tarjeta-review { background: var(--superficie); border: 1px solid var(--borde-suave); border-radius: 18px; padding: 24px 24px; display: grid; grid-template-columns: minmax(0,1fr) 200px; gap: 24px; align-items: start; }
.tarjeta-review .cuerpo { display: flex; flex-direction: column; gap: 12px; min-width: 0; }
.cab-review { display: flex; align-items: center; gap: 12px; flex-wrap: wrap; margin: 0; font-size: 0.9375rem; }
.cab-review .texto-suave { font-size: 0.9375rem; }
.cab-review .puntos { display: inline-flex; align-items: center; gap: 8px; font-weight: 700; }
.cab-review .punto { width: 10px; height: 10px; border-radius: 50%; background: var(--borde); }
.cab-review .punto.on { background: var(--c-teal); }
.tarjeta-review blockquote { margin: 0; font-size: 1.1875rem; line-height: 1.5; text-wrap: pretty; }
.autor-review { display: flex; align-items: center; gap: 12px; flex-wrap: wrap; margin: 0; font-size: 0.9375rem; }
.acciones-review { display: flex; flex-direction: column; gap: 8px; }
.acciones-review .btn { min-height: 44px; font-size: 0.9375rem; }

@media (max-width: 1100px) {
  .guia-dos-columnas, .guia-dos-columnas.iguales { grid-template-columns: 1fr; }
  .guia-aside.fijo { position: static; }
  .tarjeta-alerta { grid-template-columns: 96px minmax(0,1fr); }
  .pago-alerta { grid-column: 1 / -1; border-left: 0; padding-left: 0; border-top: 1px solid var(--separador); padding-top: 16px; flex-direction: row; align-items: center; flex-wrap: wrap; }
  .pago-alerta .rotulo, .pago-alerta .texto-suave { width: 100%; }
  .pago-alerta .cifra { margin-right: auto; }
  .tarjeta-agenda { grid-template-columns: 96px minmax(0,1fr); }
  .acciones-agenda { grid-column: 1 / -1; flex-direction: row; flex-wrap: wrap; min-width: 0; border-top: 1px solid var(--separador); padding-top: 12px; }
  .tarjeta-review { grid-template-columns: 1fr; }
  .acciones-review { flex-direction: row; flex-wrap: wrap; }
}
@media (max-width: 720px) {
  .tarjeta-resumen-tour .cab { grid-template-columns: 1fr; }
  .datos-tres { grid-template-columns: 1fr; }
  .datos-tres > div { border-right: 0; border-bottom: 1px solid var(--separador); }
  .datos-tres > div:last-child { border-bottom: 0; }
  .rejilla-pagos { grid-template-columns: 1fr; }
  .tarjeta-alerta, .tarjeta-agenda { grid-template-columns: 72px minmax(0,1fr); gap: 16px; padding: 16px; }
  .tarjeta-alerta.sin-fecha { grid-template-columns: 1fr; }
  .tarjeta-alerta.sin-fecha > .pago-alerta { grid-column: 1; }
  .tarjeta-agenda .hora-grande { font-size: 1.5rem; }
  .tabla-pagos { font-size: var(--fs-small); }
  .tabla-pagos th, .tabla-pagos td { padding: 12px 16px; }
}

/* ==========================================================================
   Rondas 12–17 · entrega 5 (08-sep-2026) — Panel del fundador 17a–17e.
   SOLO CSS: ni una línea de js/fundador.js. Se estilan las clases que ese
   archivo YA emite (f-tarjeta, f-sugerencia*, f-semaforo*, f-evento*, tarea*,
   bandeja, fila-filtros, f-lista, f-rejilla…). Cero riesgo para sus tests.
   ========================================================================== */

/* 17a · Catálogo en LISTA (F2): las tarjetas de tour del fundador dejan de ser
   una rejilla estrecha de 270 px y pasan a filas anchas legibles a 20 px. */
.fundador .f-rejilla { grid-template-columns: repeat(auto-fill, minmax(min(100%, 340px), 1fr)); gap: var(--sp-4); }
.fundador .f-tarjeta { border-color: var(--borde-suave); border-radius: var(--radio-m); box-shadow: var(--sombra-suave); gap: var(--sp-3); }
.fundador .f-tarjeta > h3 { letter-spacing: -.01em; }
.fundador .f-tarjeta .f-meta { gap: var(--sp-2) var(--sp-4); }
.fundador .f-tarjeta .f-acciones { margin-block: auto 0; padding-top: var(--sp-3); }
.fundador .fila-filtros { display: flex; align-items: center; gap: var(--sp-3); flex-wrap: wrap; margin-bottom: var(--sp-4); }
.fundador .fila-filtros .segmento { flex-wrap: wrap; }
.fundador .fila-filtros .f-meta { margin-left: auto; }
.fundador .tarjeta-tour { border-color: var(--borde-suave); }
.fundador .tarjeta-tour .cuerpo { gap: var(--sp-2); }

/* 17b · Sugerencias (F5): la sugerencia es una cita + su nota + decisión en un clic */
.fundador .f-sugerencia { border-radius: var(--radio-l); padding: var(--sp-5) var(--sp-6); gap: var(--sp-3); }
.fundador .f-sugerencia > h3 { font-size: 1.5rem; }
.fundador .f-cita { border-left-width: 5px; font-style: normal; font-size: 1.125em; line-height: 1.5; padding: var(--sp-4) var(--sp-5); border-radius: 0 var(--radio) var(--radio) 0; }
.fundador .f-sugerencia-nota { border-radius: 0 var(--radio) var(--radio) 0; padding: var(--sp-3) var(--sp-4); font-size: var(--fs-small); }
.fundador .f-sugerencia-badges .badge, .fundador .f-evento-badges .badge, .fundador .tarea-badges .badge { font-size: 0.9375rem; padding: 4px 12px; }
.fundador .f-sugerencia .f-acciones { gap: var(--sp-2); }

/* 17c · Semáforo (F6): color + icono + texto (el color nunca es el único canal).
   «Faltan turistas» va en TEAL, no en azul: la paleta v2 no tiene azul. */
.fundador .f-semaforo { border-left-width: 6px; border-radius: var(--radio-m); }
.fundador .f-semaforo-badge .badge { font-size: 1rem; padding: 8px 16px; }
.fundador .f-semaforo-mensaje { font-size: 1.15em; line-height: 1.45; font-weight: 600; }
.fundador .f-semaforo-accion { background: var(--superficie); border-radius: var(--radio); padding: var(--sp-3) var(--sp-4); }
.fundador .f-semaforo-modo { border-color: var(--borde-suave) !important; border-radius: var(--radio-l) !important; box-shadow: var(--sombra-suave); }

/* 17d · Salidas afectadas (F7) y bandeja: la tarea manda, la decisión se ve */
.fundador .bandeja { display: flex; flex-direction: column; gap: var(--sp-4); }
.fundador .tarea { background: var(--superficie); border: 1px solid var(--borde-suave); border-radius: var(--radio-l); padding: var(--sp-5) var(--sp-6); display: grid; grid-template-columns: minmax(0,1fr) 260px; gap: var(--sp-5); align-items: start; box-shadow: var(--sombra-suave); }
.fundador .tarea-cuerpo { display: flex; flex-direction: column; gap: var(--sp-2); min-width: 0; }
.fundador .tarea-cuerpo h3 { font-size: 1.5rem; letter-spacing: -.01em; }
.fundador .tarea-badges { display: flex; gap: var(--sp-2); flex-wrap: wrap; margin: 0; }
.fundador .tarea-nota { margin: 0; background: var(--tinte); border-radius: var(--radio); padding: var(--sp-3) var(--sp-4); font-size: var(--fs-small); }
.fundador .tarea .acciones { gap: var(--sp-2); }
.fundador .tarea .acciones .btn { min-height: 52px; justify-content: flex-start; text-align: left; font-size: 1.0625rem; }
.fundador .btn-deshacer { align-self: flex-start; }

/* 17d-bis · Accesibilidad AGRUPADA (20-sep-2026): una tarjeta con la lista de tours plegada.
   Antes eran 56 tarjetas idénticas que enterraban lo urgente. Solo tokens (RUOT §1). */
.fundador .tarea.tarea-ancha { grid-template-columns: minmax(0, 1fr); }
.fundador .acc-desplegable { margin-top: var(--sp-3); border-top: 1px solid var(--separador); }
.fundador .acc-desplegable > summary { cursor: pointer; font-weight: 700; font-size: var(--fs-base); min-height: 44px; display: flex; align-items: center; gap: var(--sp-2); }
.fundador .acc-desplegable > summary::marker { color: var(--c-teal); }
.fundador .acc-lista { list-style: none; margin: var(--sp-3) 0 0; padding: 0; display: grid; gap: var(--sp-2); }
.fundador .acc-lista > li { display: flex; align-items: center; gap: var(--sp-3); flex-wrap: wrap; padding: var(--sp-2) 0; border-bottom: 1px solid var(--separador); }
.fundador .acc-lista > li:last-child { border-bottom: 0; }
.fundador .acc-nombre { flex: 1; min-width: 0; }                       /* §13: el texto, en su propio elemento */
.fundador .acc-lista .btn { min-height: 44px; min-width: 44px; }       /* §8: 44 px en los dos ejes */

/* Móvil (§10, 20-sep-2026): en pantallas estrechas el botón «Encargar» pasa DEBAJO del nombre del
   tour. A 390 px compartían fila y el nombre quedaba apretado, a una palabra por línea. */
@media (max-width: 560px) {
  .fundador .acc-lista > li { flex-direction: column; align-items: stretch; }
  .fundador .acc-nombre { flex: none; }
}

/* 17e · Eventos (F8): revisión pendiente arriba, catálogo de eventos debajo */
.fundador .f-evento { background: var(--superficie); border: 1px solid var(--borde-suave); border-radius: var(--radio-l); padding: var(--sp-5) var(--sp-6); display: flex; flex-direction: column; gap: var(--sp-3); box-shadow: var(--sombra-suave); }
.fundador .f-evento h3 { font-size: 1.5rem; letter-spacing: -.01em; }
.fundador .f-evento-badges { display: flex; gap: var(--sp-2); flex-wrap: wrap; margin: 0; }
.fundador .f-evento-revision { border-left: 6px solid var(--energia-acento); }
.fundador .f-evento-lista { list-style: none; margin: 0; padding: 0; background: var(--superficie); border: 1px solid var(--borde-suave); border-radius: var(--radio-m); overflow: hidden; }
.fundador .f-evento-lista li { display: flex; align-items: center; justify-content: space-between; gap: var(--sp-4); padding: 14px var(--sp-5); border-bottom: 1px solid var(--separador); flex-wrap: wrap; }
.fundador .f-evento-lista li:last-child { border-bottom: 0; }
.fundador .f-evento-lista .f-meta { margin: 0; }

@media (max-width: 1000px) {
  .fundador .tarea { grid-template-columns: 1fr; }
  .fundador .tarea .acciones { flex-direction: row; flex-wrap: wrap; }
  .fundador .tarea .acciones .btn { justify-content: center; }
}
@media (max-width: 720px) {
  .fundador .f-sugerencia, .fundador .f-evento, .fundador .tarea { padding: var(--sp-4); }
  .fundador .fila-filtros .f-meta { margin-left: 0; }
}

/* ==========================================================================
   Rondas 12–17 · entrega 6 (08-sep-2026) — Contenido legal 15a/15b:
   #/terminos (Términos por país) y #/guias/normativa (Guiar en cada país).
   Rutas NUEVAS: hay que añadirlas al router (ver PARA-HERMES §Entrega 6).
   ========================================================================== */
.pagina-legal { display: flex; flex-direction: column; gap: var(--sp-8); }
.pagina-legal .cab-pantalla { display: flex; flex-direction: column; gap: 8px; align-items: flex-start; }
.pagina-legal .cab-pantalla .claim { margin: 0; max-width: 64ch; }
.sello-borrador { align-self: flex-start; font-size: 0.9375rem; padding: 8px 16px; gap: 8px; margin-top: 8px; }
.legal-layout { display: grid; grid-template-columns: 260px minmax(0,1fr); gap: var(--sp-8); align-items: start; }
.indice-legal { display: flex; flex-direction: column; gap: 4px; }
.indice-legal .rotulo { margin: 0 0 8px 16px; font-size: var(--fs-caption); font-weight: 700; letter-spacing: .06em; text-transform: uppercase; color: var(--texto-suave); }
.indice-legal button { display: flex; align-items: center; width: 100%; min-height: 44px; padding: 0 16px; border: 0; background: transparent; border-radius: var(--radio); color: var(--texto); font: inherit; font-weight: 600; font-size: var(--fs-small); text-align: left; cursor: pointer; }
.indice-legal button:hover { background: var(--superficie); color: var(--texto); }
.cuerpo-legal { display: flex; flex-direction: column; gap: var(--sp-6); min-width: 0; }
.bloque-legal { scroll-margin-top: 96px; }
.bloque-legal .subtitulo { font-size: 1.625rem; font-weight: 800; margin-bottom: 12px; }
.bloque-legal p { max-width: 74ch; text-wrap: pretty; margin-bottom: 12px; }
.bloque-legal p:last-child { margin-bottom: 0; }
.pendiente-legal { display: flex; gap: 12px; align-items: flex-start; background: var(--tinte-aviso); border-radius: var(--radio); padding: 12px 16px; font-size: var(--fs-small); color: var(--texto); max-width: 74ch; }
.pendiente-legal .ico { flex: 0 0 auto; margin-top: 4px; color: var(--c-aviso); }
.fichas-pais { display: grid; grid-template-columns: repeat(auto-fill, minmax(min(100%, 320px), 1fr)); gap: var(--sp-4); margin-block: var(--sp-4); }
.ficha-pais { background: var(--superficie); border: 1px solid var(--borde-suave); border-radius: 18px; padding: 24px 24px; display: flex; flex-direction: column; gap: 12px; }
.ficha-pais .cab { display: flex; align-items: center; justify-content: space-between; gap: 12px; flex-wrap: wrap; }
.ficha-pais h3 { font-size: 1.4375rem; font-weight: 800; letter-spacing: -.01em; }
.ficha-pais dl { margin: 0; display: flex; flex-direction: column; gap: 12px; font-size: var(--fs-small); }
.ficha-pais dt { font-weight: 700; color: var(--texto-suave); }
.ficha-pais dd { margin: 4px 0 0; text-wrap: pretty; }
.banda-legal { padding: var(--sp-8); }
.banda-legal .subtitulo-home { margin-bottom: 8px; }
.banda-legal p { max-width: 72ch; }
.btn.btn-blanco { background: transparent; border-color: rgba(255,255,255,.6); color: var(--c-blanco); }
.btn.btn-blanco:hover { background: rgba(255,255,255,.14); color: var(--c-blanco); }
.sobretitulo.ambar { color: var(--energia-acento); }
/* 15b · niveles de normativa */
.niveles-norma { display: grid; grid-template-columns: repeat(auto-fill, minmax(min(100%, 320px), 1fr)); gap: var(--sp-4); margin-block: var(--sp-4); }
.nivel-norma { background: var(--superficie); border: 1px solid var(--borde-suave); border-top: 6px solid var(--c-exito); border-radius: 20px; padding: 24px 24px; display: flex; flex-direction: column; gap: 12px; }
.nivel-norma.nivel-2 { border-top-color: var(--c-teal); }
.nivel-norma.nivel-3 { border-top-color: var(--energia-acento); }
.nivel-norma .cab { display: flex; align-items: center; gap: 12px; flex-wrap: wrap; }
.nivel-norma .cab .n { width: 40px; height: 40px; border-radius: 50%; background: var(--tinte); color: var(--texto); display: grid; place-items: center; font-weight: 800; }
.nivel-norma h3 { font-size: 1.3125rem; font-weight: 800; letter-spacing: -.01em; }
.nivel-norma p { margin: 0; font-size: var(--fs-small); text-wrap: pretty; }
.paises-norma { color: var(--texto); }
.pasos-norma { margin-block: var(--sp-5); }
.pasos-norma h3 { display: flex; flex-direction: column; align-items: flex-start; gap: 8px; font-size: 1.25rem; }
.pasos-norma h3 .n { display: inline-grid; place-items: center; width: 40px; height: 40px; border-radius: 50%; background: var(--c-blanco); color: var(--c-petroleo); font-weight: 800; margin: 0; }
.pasos-norma p { font-size: var(--fs-small); opacity: .95; text-wrap: pretty; }
.nota-freelance { position: relative; font-size: var(--fs-small); opacity: .95; max-width: 80ch; }
@media (max-width: 1000px) {
  .legal-layout { grid-template-columns: 1fr; }
  .indice-legal { position: static; flex-direction: row; flex-wrap: wrap; }
  .indice-legal .rotulo { flex-basis: 100%; margin-left: 0; }
  .indice-legal button { width: auto; background: var(--superficie); border: 1px solid var(--borde-suave); font-size: 0.9375rem; }
  .pasos-norma { grid-template-columns: 1fr; }
}
@media (max-width: 720px) { .banda-legal { padding: var(--sp-5); } }

/* ---- Bug previo (visto al entregar 17a–17e): la cabecera del fundador desbordaba 417 px y
   «Salir del panel» quedaba fuera de pantalla. Las reglas que debían arreglarlo apuntan a
   `.fundador-area .cabecera`, y esa clase NO existe: el router pone `class="contenedor fundador"`
   en el <main>, y .cabecera es HERMANA del <main>, no descendiente, así que nunca aplicaban.
   Se ataca desde <body> con :has(), que sí alcanza al hermano anterior. Son 8 ítems de menú. ---- */
body:has(main.fundador) .cabecera .barra { flex-wrap: wrap; row-gap: 4px; }
body:has(main.fundador) .menu-principal { margin-left: auto; }
@media (max-width: 1320px) {
  body:has(main.fundador) .menu-principal a { padding: 0 var(--sp-2); font-size: 0.9375rem; }
  body:has(main.fundador) .logo .descriptor { display: none; }
}
@media (max-width: 1100px) {
  body:has(main.fundador) .menu-principal { flex-wrap: wrap; white-space: normal; }
  body:has(main.fundador) .cabecera .barra { padding-block: var(--sp-2); }
}

/* ==========================================================================
   Rondas 12–17 · entrega 7 (08-sep-2026) — Las cuatro pantallas que tocan
   lógica: 16a eventos en calendario, 14f calendario del guía por días,
   14e lista del grupo, 16c/16d alta de guía pasos 2 y 3.
   ========================================================================== */

/* Conmutador Lista / Calendario */
.conmuta-vista { display: inline-flex; background: var(--c-fondo); border-radius: var(--radio); padding: 4px; gap: 4px; margin-bottom: var(--sp-4); }
.conmuta-vista button { display: inline-flex; align-items: center; gap: 8px; min-height: 44px; padding: 0 16px; border: 0; border-radius: var(--radio-s); background: transparent; color: var(--texto); font: inherit; font-size: 0.9375rem; font-weight: 700; cursor: pointer; }
.conmuta-vista button[aria-pressed="true"] { background: var(--superficie); box-shadow: var(--sombra-suave); }

/* Rejilla de mes (la comparten 16a y 14f) */
.bloque-mes { border-radius: var(--radio-l); padding: 24px 24px; display: flex; flex-direction: column; gap: 16px; }
.cab-mes { display: flex; align-items: center; justify-content: space-between; gap: 12px; flex-wrap: wrap; }
.cab-mes .subtitulo { margin: 0; font-size: 1.625rem; font-weight: 800; }
.nav-mes { display: flex; gap: 8px; align-items: center; }
.nav-mes .btn { min-height: 44px; font-size: 0.9375rem; }
.btn-icono { width: 44px; height: 44px; border-radius: var(--radio-s); border: 2px solid var(--borde); background: var(--superficie); color: var(--texto); display: grid; place-items: center; cursor: pointer; }
.btn-icono:hover { border-color: var(--cta-primario); }
.rejilla-mes { display: grid; grid-template-columns: repeat(7, minmax(0,1fr)); gap: 8px; }
.rejilla-mes .cab-dia { text-align: center; font-size: var(--fs-caption); font-weight: 700; color: var(--texto-suave); letter-spacing: .04em; padding: 4px 0; }
.celda-mes { min-height: 96px; border-radius: 12px; border: 2px solid var(--borde-suave); background: var(--superficie); color: var(--texto); font: inherit; cursor: pointer; display: flex; flex-direction: column; align-items: stretch; gap: 4px; padding: 8px; text-align: left; overflow: hidden; }
.celda-mes:hover { border-color: var(--c-petroleo); }
.celda-mes.vacia { border: 0; background: transparent; min-height: 0; cursor: default; }
.celda-mes .num { display: flex; align-items: center; gap: 8px; font-size: 0.9375rem; font-weight: 700; }
.celda-mes .hoy-chip { font-size: 0.75rem; font-weight: 700; letter-spacing: .04em; padding: 4px 8px; border-radius: var(--radio-pill); background: var(--energia-acento); color: var(--c-petroleo); }
.celda-mes .tour-ok { margin-left: auto; color: var(--c-exito); display: inline-flex; }
.celda-mes .tour-ok .ico { stroke-width: 3; }
.celda-mes.hoy { border-color: var(--energia-acento); }
.celda-mes.sel { border-color: var(--c-petroleo); box-shadow: inset 0 0 0 2px var(--c-petroleo); }
.celda-mes.con-eventos { background: var(--superficie); }
/* Día ya pasado (20-sep-2026): se ve, pero no se pulsa — igual que en el calendario del guía. */
.celda-mes.pasado { opacity: .45; cursor: not-allowed; }
/* Selector de FECHAS del turista (paso 4 de «tus preferencias», 20-sep-2026): reutiliza la rejilla
   y las celdas del calendario que ya existe (guía y eventos) — mismos tokens, misma accesibilidad. */
.celda-fecha { min-height: 60px; align-items: center; justify-content: center; font-weight: 700; }
/* Día elegido: relleno de marca (petróleo con tinta blanca = 7,82:1), nunca solo un color de borde. */
.celda-fecha.elegida { background: var(--c-petroleo); border-color: var(--c-petroleo); color: var(--c-blanco); }
/* Medido el 20-sep-2026: con el relleno normal de la tarjeta, 7 días × 44 px (el objetivo táctil
   del Panel, que NO se encoge) no caben ni a 390 px (38) ni en la banda de 880 (39), donde la
   pantalla va a dos columnas y la del formulario es estrecha. Se recorta el hueco entre días y se
   saca el calendario al ancho de su tarjeta —sigue dentro, sin desbordar— en vez de encoger el día.
   Medido después del arreglo: 47 px a 390, 48 a 880 y 46 con la letra grande («a++»). */
@media (max-width: 1100px) {
  #cal-fechas-pref { margin-left: calc(-1 * var(--sp-5)); margin-right: calc(-1 * var(--sp-5)); }
  #cal-fechas-pref .rejilla-mes { gap: 2px; }
}
.chip-dia { display: block; font-size: 0.75rem; font-weight: 700; line-height: 1.3; padding: 4px 8px; border-radius: 6px; background: var(--tinte); color: var(--texto); white-space: nowrap; overflow: hidden; text-overflow: ellipsis; }
.chip-dia.fuerte { background: var(--c-petroleo); color: var(--c-blanco); }
.mas-dia { font-size: 0.75rem; font-weight: 700; color: var(--texto-suave); padding: 0 8px; }
.leyenda-mes { display: flex; gap: 16px; flex-wrap: wrap; align-items: center; margin: 0; font-size: var(--fs-caption); color: var(--texto-suave); }
.leyenda-mes .ico { color: var(--c-exito); stroke-width: 3; }
.leyenda-mes .cuadro { display: inline-block; width: 12px; height: 12px; border-radius: 3px; background: var(--tinte); }
.leyenda-mes .cuadro.fuerte { background: var(--c-petroleo); }
.leyenda-mes .texto-suave { margin-left: auto; }

/* 16a · calendario de eventos */
.calendario-eventos { display: grid; grid-template-columns: minmax(0,1fr) 360px; gap: var(--sp-6); align-items: start; }
.aside-dia { display: flex; flex-direction: column; gap: 16px; position: sticky; top: 96px; }
.bloque-dia { border-radius: var(--radio-l); padding: 24px 24px; display: flex; flex-direction: column; gap: 12px; }
.bloque-dia h2 { font-size: 1.375rem; font-weight: 800; letter-spacing: -.01em; line-height: 1.2; }
.bloque-dia .texto-suave { font-size: 0.9375rem; }
.lista-dia { list-style: none; margin: 0; padding: 0; display: flex; flex-direction: column; }
.lista-dia li { display: flex; flex-direction: column; gap: 4px; padding: 12px 0; border-top: 1px solid var(--separador); }
.lista-dia li a:first-child { font-weight: 800; font-size: var(--fs-small); color: var(--texto); }
.lista-dia li a:first-child:hover { color: var(--c-teal); }
.lista-dia .texto-suave { font-size: var(--fs-caption); }
.lista-dia .badge { align-self: flex-start; margin-top: 4px; }
.dia-vacio { background: var(--c-fondo); border-radius: var(--radio); padding: 16px; }

/* 14f · celdas del guía (la disponibilidad se lee con letras, no solo con color) */
.celda-guia { min-height: 74px; justify-content: space-between; }
.celda-guia.disponible { background: var(--tinte); border-color: var(--c-teal); }
.celda-guia.pasado { opacity: .45; cursor: not-allowed; }
/* (21-sep-2026) Barrita de franjas del día: sin texto, se enseña un punto por franja (encendidos los
   marcados) en el orden de la leyenda. Antes eran letras y, al pasar a 4 tramos, «8 12 16 20» se
   partía en cuatro líneas dentro de 50 px y estiraba la fila del calendario. El aria-label del botón
   del día dice las franjas enteras, así que esto es decoración. */
.franjas-celda { display: inline-flex; gap: 3px; align-items: center; line-height: 0; font-size: 0; min-height: 6px; }
.franjas-celda i { width: 6px; height: 6px; border-radius: 50%; background: var(--borde); display: block; }
.franjas-celda i.on { background: var(--c-teal); }
.fila-repetir { display: flex; align-items: center; justify-content: space-between; gap: 12px; padding-top: 12px; border-top: 1px solid var(--separador); flex-wrap: wrap; }

/* 14e · lista del grupo */
.contador-presentes { margin: 0; padding: 12px 16px; border-radius: 14px; font-size: 1.25rem; font-weight: 800; }
.contador-presentes strong { color: var(--c-exito); }
.bloque-guia.sin-pad { padding: 0; gap: 0; }
.bloque-guia.sin-pad .con-pad { padding: 16px 24px 12px; }
.bloque-guia.sin-pad p.con-pad { padding: 12px 24px 16px; margin: 0; font-size: 0.9375rem; }
.lista-grupo { list-style: none; margin: 0; padding: 0; }
.lista-grupo li { display: grid; grid-template-columns: 44px minmax(0,1fr) auto; gap: 16px; align-items: center; padding: 12px 24px; border-top: 1px solid var(--separador); }
.lista-grupo .ini { width: 44px; height: 44px; border-radius: 50%; background: var(--tinte); color: var(--texto); display: grid; place-items: center; font-weight: 800; font-size: 1.0625rem; }
.lista-grupo .quien { display: flex; flex-direction: column; line-height: 1.3; min-width: 0; }
.lista-grupo .quien .texto-suave { font-size: var(--fs-caption); }
.lista-grupo .quien .badge { align-self: flex-start; }   /* 25-sep: la insignia no se estira dentro de la columna «quien» */
.lista-grupo .btn { min-height: 40px; padding: 0 16px; border-radius: var(--radio-pill); font-size: 0.875rem; }

/* 16c/16d · pasos del alta */
.pasos-alta { list-style: none; margin: 0 0 var(--sp-5); padding: 0; display: flex; gap: 8px; flex-wrap: wrap; }
.pasos-alta li > span, .pasos-alta li > a { display: inline-flex; align-items: center; gap: 8px; min-height: 44px; padding: 0 16px; border-radius: var(--radio-pill); background: var(--superficie); border: 1px solid var(--borde-suave); font-weight: 700; font-size: 0.9375rem; }
.pasos-alta li > span { color: var(--texto-suave); }
.pasos-alta li > a { color: var(--texto); }
.pasos-alta .n { display: inline-grid; place-items: center; width: 26px; height: 26px; border-radius: 50%; background: var(--tinte); color: var(--texto); font-size: 0.875rem; font-weight: 800; }
.pasos-alta .activo > span { background: var(--c-petroleo); border-color: var(--c-petroleo); color: var(--c-blanco); }
.pasos-alta .activo .n { background: var(--energia-acento); color: var(--c-petroleo); }
.pasos-alta .hecho .n { background: var(--tinte-exito); color: var(--c-exito); }
.pasos-alta .hecho .ico { stroke-width: 3; }
.lista-docs { list-style: none; margin: 0; padding: 0; display: flex; flex-direction: column; gap: 12px; }
.lista-docs li { display: grid; grid-template-columns: 48px minmax(0,1fr) auto; gap: 16px; align-items: center; background: var(--superficie); border: 1px solid var(--borde-suave); border-radius: var(--radio-m); padding: 16px 24px; }
.lista-docs li.subido { border-color: var(--c-exito); }
.lista-docs .ico-doc { width: 48px; height: 48px; border-radius: 50%; background: var(--tinte); color: var(--texto); display: grid; place-items: center; }
.lista-docs li.subido .ico-doc { background: var(--tinte-exito); color: var(--c-exito); }
.lista-docs li.subido .ico-doc .ico { stroke-width: 3; }
.lista-docs .quien { display: flex; flex-direction: column; gap: 4px;}
.lista-docs .quien strong { display: flex; align-items: center; gap: 8px; flex-wrap: wrap; font-size: var(--fs-base); }
.lista-docs .quien .texto-suave { font-size: 0.9375rem; text-wrap: pretty; }
.lista-docs .btn { min-height: 44px; font-size: 0.9375rem; }
.btn.inactivo { background: var(--deshabilitado); border-color: var(--deshabilitado); color: var(--c-blanco); cursor: not-allowed; }
.cobros-stripe { border-radius: var(--radio-l); }
.cobros-stripe .desglose-pago { font-size: var(--fs-small); }

@media (max-width: 1100px) {
  .calendario-eventos { grid-template-columns: 1fr; }
  .aside-dia { position: static; }
}
@media (max-width: 720px) {
  /* Medido el 20-sep-2026 con el navegador real: a 390 px los días de los calendarios de EVENTOS y
     del GUÍA caían a 44 px justos (y a 42 con la letra grande del Panel) — por debajo del objetivo
     táctil de 44 px. Se recorta el relleno lateral de la tarjeta y el hueco entre días; el DÍA no
     se encoge nunca. El título, la rejilla y la leyenda llevan el mismo recorte, así que siguen
     alineados entre sí. Después: 46 px con la letra grande y 48 con la normal.
     OJO: el `gap` efectivo lo declara `parche-auditoria-14sep.css` (se carga después); aquí queda
     el mismo valor para que no haya dos verdades. */
  .bloque-mes { padding: var(--sp-3) var(--sp-1); }
  .rejilla-mes { gap: 2px; }
  .celda-mes { min-height: 64px; padding: 4px; }
  .celda-guia { min-height: 56px; }
  .chip-dia { font-size: 0.6875rem; padding: 4px 4px; }
  .leyenda-mes .texto-suave { margin-left: 0; }
  .lista-docs li { grid-template-columns: 40px minmax(0,1fr); }
  .lista-docs .btn { grid-column: 1 / -1; }
  .lista-grupo li { padding: 12px 16px; }
}

/* ==========================================================================
   Rondas 12–17 · repaso MÓVIL (08-sep-2026, medido a 390 px en las 33 rutas).
   Tres cosas: el desborde horizontal de la cabecera (bug previo, 150–171 px en
   casi todas las pantallas interiores), los objetivos táctiles por debajo de
   44 px, y un par de ajustes de las pantallas nuevas.
   ========================================================================== */

/* 1) DESBORDE — causa única y medida: a 390 px `.cabecera .barra` no envuelve, así que
   `.utilidades-cabecera` (selector de idioma 122 px + píldoras) llega a 561 px y arrastra
   scroll horizontal a TODA la web en las rutas interiores. Es previo al rediseño; se ve
   porque ahora hay más pantallas interiores. La barra envuelve y las utilidades bajan. */
@media (max-width: 720px) {
  .cabecera .barra { flex-wrap: wrap; row-gap: var(--sp-2); padding-block: var(--sp-2); }
  .utilidades-cabecera { margin-left: auto; flex-wrap: wrap; gap: var(--sp-2); }
  .cabecera .buscador-mini { display: none; }   /* cada pantalla tiene su propio buscador */
  .selector-idioma { max-width: 100%; }
}

/* 2) OBJETIVOS TÁCTILES ≥44 px (WCAG 2.2 AA · «objetivos ≥44 px» de la marca) */
.pie-grande nav a, .pie-grande .rejilla a { display: inline-flex; align-items: center; min-height: var(--tactil); }
.logo { min-height: var(--tactil); }
.pagina-panel .btn.tactil-compacto { min-height: var(--tactil); }
.chips-eventos .chip { min-height: var(--tactil); }
@media (max-width: 720px) {
  .lista-grupo .btn, .acciones-review .btn, .pago-alerta .btn, .acciones-agenda .btn,
  .lista-docs .btn, .acciones-reserva .btn, .acciones-reserva .btn-enlace,
  .tarjeta-ciudad-eventos > .btn, .nav-mes .btn { min-height: var(--tactil); }
  .conmuta-vista { display: flex; width: 100%; }
  .conmuta-vista button { flex: 1; justify-content: center; }
}

/* 3) Pantallas nuevas en móvil: lo que se apilaba mal a 390 px */
@media (max-width: 720px) {
  .cab-guia, .cab-pantalla { align-items: flex-start; }
  .caja-prefs, .contador-presentes { max-width: 100%; }
  .cuenta-lateral a { flex: 1 1 calc(50% - var(--sp-2)); }
  .notas-politica { gap: 12px; }
  .fila-codigo .btn, .fila-codigo input { width: 100%; }
  .pasos-alta li > span, .pasos-alta li > a { padding: 0 12px; font-size: 0.875rem; }
  .desglose-pago > div { gap: 12px; }
  .desglose-pago .total { font-size: 1.1875rem; }
  .legal-layout, .perfil-layout, .panel-layout { gap: var(--sp-5); }
  .fichas-pais, .niveles-norma { gap: 12px; }
  .agenda li { padding: 12px 16px; }
  .tabla-envoltorio { overflow-x: auto; }
  /* Alertas (14b): los chips de dato llevan `nowrap` para no partir «90 min»; a 390 px
     eso sumaba 478 px de desborde. En móvil la fila envuelve y cada chip puede romper. */
  .chips-datos { gap: 8px; }
  .chips-datos > span { white-space: normal; font-size: 0.875rem; padding: 4px 12px; }
  .tarjeta-alerta .titulo { font-size: 1.25rem; }
  .pago-alerta .cifra { font-size: 1.5rem; }
  /* En móvil NINGÚN botón de contenido baja de 44 px: `.tactil-compacto` (40 px) es una
     licencia de escritorio, no de dedo. Cubre «Hacer el curso», «Responder», etc. */
  main .btn.tactil-compacto, main .btn { min-height: var(--tactil); }
}
/* Checkbox de zonas en el alta de guía (G1): venían a 13×13 px, imposibles de acertar
   con el dedo. Es previo al rediseño. 24 px y con el color de marca. */
.g-zonas input[type="checkbox"], .grupo-chips input[type="checkbox"] { width: 24px; height: 24px; min-height: 0; accent-color: var(--c-petroleo); }

/* ---- Recorte de 30 px en «Tours destacados» (bug previo, visto al auditar): un track `1fr`
   lleva mínimo automático `min-content`, así que en la tarjeta cuyo título/descripción tiene
   un `min-content` ancho (los que llegan de los datos VIVOS, no del mock) el track crecía a
   300 px dentro de una tarjeta de 271 px con `overflow:hidden`: se perdían la foto por la
   derecha, parte del chip de precio y 6 px de cada línea del cuerpo. Los `1fr` pelados pasan
   a `minmax(0,1fr)` (que es lo que ya usaban `.tarjeta-tour` base y las rejillas nuevas) y el
   cuerpo lleva `min-width:0` para que pueda encogerse de verdad. ---- */
.tarjeta-tour .cuerpo, .tarjeta-tour .media { min-width: 0; }
.tarjeta-tour .titulo, .tarjeta-tour .zona, .tarjeta-tour .descripcion-corta { min-width: 0; overflow-wrap: anywhere; }

/* ==========================================================================
   Rondas 12–17 · ENTREGA 8 · páginas de contenido (08-sep-2026)
   #/como-funciona · #/sobre · #/accesibilidad · #/soporte · #/legal
   Solo presentación. Estas 5 pantallas eran las únicas que no habían pasado
   por el rediseño: markup genérico (rejilla-3 + estilos en línea) sin sistema.
   Nada de esto modifica reglas anteriores: es un bloque añadido al final.
   ========================================================================== */
.pagina-contenido { display: flex; flex-direction: column; gap: var(--sp-8); }
.pagina-contenido .cab-pantalla { display: flex; flex-direction: column; gap: 8px; align-items: flex-start; }
.pagina-contenido .cab-pantalla .claim { margin: 0; max-width: 64ch; }
.pagina-contenido .cab-pantalla .badge { margin-top: 8px; }
.bloque-contenido { display: flex; flex-direction: column; gap: var(--sp-4); scroll-margin-top: 96px; }
.bloque-contenido > .subtitulo { margin-bottom: 0; }
.bloque-contenido p { max-width: 74ch; text-wrap: pretty; margin: 0; }
.rejilla-2c { display: grid; grid-template-columns: repeat(2, minmax(0,1fr)); gap: var(--sp-5); align-items: start; }
.rejilla-2c.desigual { grid-template-columns: minmax(0,1.5fr) minmax(0,1fr); }

/* Tarjetas de contacto (#/soporte) */
.tarjeta-contacto { display: flex; flex-direction: column; align-items: flex-start; gap: 12px; }
.tarjeta-contacto h3 { font-size: 1.375rem; font-weight: 800; letter-spacing: -.01em; }
.tarjeta-contacto p { margin: 0; text-wrap: pretty; flex: 1 1 auto; }
.tarjeta-contacto .btn { margin-top: 4px; }
.formulario-soporte form { display: flex; flex-direction: column; gap: var(--sp-4); }
.formulario-soporte form .subtitulo { margin-bottom: 0; }
.formulario-soporte .campo { margin: 0; }
.lista-atajos { list-style: none; margin: 0; padding: 0; display: flex; flex-direction: column; }
.lista-atajos a { display: flex; align-items: center; gap: 12px; min-height: 52px; padding: 8px 12px; margin: 0 -12px; border-radius: var(--radio); text-decoration: none; color: var(--texto); font-weight: 600; }
.lista-atajos a:hover { background: var(--tinte); }
.lista-atajos .ico { flex: 0 0 auto; color: var(--c-teal); width: 1.25em; height: 1.25em; }

/* Pasos en tarjeta (#/como-funciona) */
.pasos-home.pasos-tarjeta li { background: var(--superficie); border: 1px solid var(--borde-suave); border-radius: var(--radio-l); padding: var(--sp-5); gap: 12px; box-shadow: var(--sombra-suave); }
.pasos-home.pasos-tarjeta h3 { display: flex; align-items: center; gap: 12px; margin: 0; }
.pasos-home.pasos-tarjeta p { margin: 0; text-wrap: pretty; }

/* Línea del dinero: retención → 48 h → 24 h (#/como-funciona) */
.linea-dinero { list-style: none; margin: 0; padding: 0; display: grid; grid-template-columns: repeat(3, minmax(0,1fr)); gap: var(--sp-6); }
.linea-dinero li { position: relative; display: flex; flex-direction: column; gap: 8px; padding-top: 32px; min-width: 0; }
.linea-dinero li::before { content: ""; position: absolute; top: 11px; left: 22px; right: calc(-1 * var(--sp-6)); height: 2px; background: var(--borde); }
.linea-dinero li:last-child::before { display: none; }
.linea-dinero li::after { content: ""; position: absolute; top: 4px; left: 0; width: 16px; height: 16px; border-radius: 50%; background: var(--c-teal); box-shadow: 0 0 0 4px var(--tinte); }
.linea-dinero .cuando { font-size: 1.25rem; font-weight: 800; letter-spacing: -.01em; }
.linea-dinero p { margin: 0; text-wrap: pretty; }

/* «Queremos ser integradores» + reglas + ciudades (#/sobre) */
.tarjeta-integra { display: flex; flex-direction: column; gap: 12px; }
.tarjeta-integra h3 { font-size: 1.375rem; font-weight: 800; letter-spacing: -.01em; }
.tarjeta-integra > p { margin: 0; text-wrap: pretty; }
.tarjeta-integra .lista-checks { margin-top: 4px; }
.reglas-ruot { list-style: none; margin: 0; padding: 0; display: grid; grid-template-columns: repeat(2, minmax(0,1fr)); gap: var(--sp-4) var(--sp-6); counter-reset: regla; }
.reglas-ruot li { display: grid; grid-template-columns: 44px minmax(0,1fr); gap: 16px; align-items: start; }
.reglas-ruot .n { width: 44px; height: 44px; border-radius: 50%; background: var(--c-petroleo); color: var(--c-blanco); display: grid; place-items: center; font-weight: 800; font-size: 1.125rem; }
.reglas-ruot strong { display: block; font-size: 1.1875rem; font-weight: 800; letter-spacing: -.01em; margin-bottom: 4px; }
.reglas-ruot p { margin: 0; font-size: var(--fs-small); text-wrap: pretty; }
.rejilla-ciudades { display: grid; grid-template-columns: repeat(auto-fill, minmax(min(100%, 220px), 1fr)); gap: var(--sp-4); }
.tarjeta-ciudad-ruot { background: var(--superficie); border: 1px solid var(--borde-suave); border-radius: 18px;display: flex; flex-direction: column;align-items: flex-start; }
.tarjeta-ciudad-ruot strong { font-size: 1.25rem; font-weight: 800; letter-spacing: -.01em; }
.tarjeta-ciudad-ruot .pais { font-size: var(--fs-small); color: var(--texto-suave); }

/* Listas de checks a dos columnas (#/accesibilidad, #/legal) */
.lista-checks.dos-col { display: grid; grid-template-columns: repeat(2, minmax(0,1fr)); gap: 12px var(--sp-6); }
/* Dentro de una tarjeta estrecha, .lista-checks (2 columnas por defecto) parte
   las frases en una palabra por línea: aquí va a una sola columna. */
.tarjeta-integra .lista-checks, .tarjeta-contacto .lista-checks { grid-template-columns: minmax(0,1fr); }
.pagina-contenido .lista-checks .ico { flex: 0 0 auto; margin-top: .3em; color: var(--c-teal); }
@media (max-width: 860px) { .lista-checks.dos-col { grid-template-columns: minmax(0,1fr); } }
.tarjeta-panel-acc { display: flex; flex-direction: column; gap: var(--sp-4); align-items: flex-start; border-left: 6px solid var(--c-teal); }
.tarjeta-panel-acc .subtitulo { margin-bottom: 0; }
.tarjeta-panel-acc p { margin: 0; max-width: 74ch; }

.pagina-contenido .rejilla-3 { grid-template-columns: repeat(auto-fill, minmax(min(100%, 290px), 1fr)); }

@media (max-width: 1000px) {
  .rejilla-2c, .rejilla-2c.desigual, .reglas-ruot { grid-template-columns: minmax(0,1fr); }
}
@media (max-width: 900px) {
  .linea-dinero { grid-template-columns: minmax(0,1fr); gap: var(--sp-5); }
  .linea-dinero li { padding-top: 0; padding-left: 32px; }
  .linea-dinero li::before { top: 22px; bottom: calc(-1 * var(--sp-5)); left: 7px; right: auto; width: 2px; height: auto; }
  .linea-dinero li::after { top: 4px; left: 0; }
}
@media (max-width: 720px) {
  .pagina-contenido { gap: var(--sp-7); }
  .pasos-home.pasos-tarjeta { grid-template-columns: minmax(0,1fr); }
  .rejilla-ciudades { grid-template-columns: repeat(auto-fill, minmax(min(100%, 150px), 1fr)); }
  .lista-atajos a { min-height: 56px; }
}

/* ==========================================================================
   Rondas 12–17 · ENTREGA 9 · bandeja unificada del fundador (artboard 10a)
   SOLO CSS. La bandeja única de «Requiere mi acción» YA existe en
   js/fundador.js (F3 junta subastas, quejas, accesibilidad y sugerencias, con
   filtro por origen, contador y deshacer): lo que faltaba era la piel del
   artboard 10a. Ni una línea de fundador.js — sus 257 tests no se tocan.
   ========================================================================== */
/* La franja de gravedad se perdió al unificar el borde en la entrega 5
   (border: 1px la pisaba). Vuelve a 6 px: rojo = grave, ámbar = pendiente. */
.fundador .tarea { border-left: 6px solid var(--c-aviso); }
.fundador .tarea.grave { border-left-color: var(--c-error); }
.fundador .tarea.ok { border-left-color: var(--c-exito); }
.fundador .tarea:hover { box-shadow: var(--sombra-suave); }
.fundador .tarea .tarea-badges + h2 { margin-top: 4px; }
/* Filtros por origen: 48 px, contador legible y estado marcado sin depender del color */
.fundador .fila-filtros .chip { min-height: 48px; padding: 0 16px; font-size: 1.0625rem; font-weight: 700; }
.fundador .fila-filtros .chip .n { min-width: 26px; height: 26px; font-size: 0.9375rem; font-weight: 800; }
/* Bandeja vacía: tarjeta, no línea de texto suelta */
.fundador .f-vacio { background: var(--superficie); border: 1px solid var(--borde-suave); border-radius: var(--radio-l); padding: var(--sp-9) var(--sp-6); text-align: center; font-size: 1.625rem; font-weight: 800; color: var(--texto); }
/* Confirmación + «Deshacer» de la última decisión */
.fundador .aviso.exito .btn-enlace { margin-left: auto; font-weight: 800; }

/* ---- 14a · filtro de habilitación del catálogo del guía (aprobado 08-sep) ---- */
.gcat-filtros { display: flex; gap: var(--sp-2); flex-wrap: wrap; margin-top: var(--sp-4); }
.gcat-filtros .chip { min-height: 48px; padding: 0 16px; font-weight: 700; }
.gcat-filtros .chip .n { display: inline-flex; align-items: center; justify-content: center; min-width: 26px; height: 26px; padding: 0 8px; margin-left: 8px; border-radius: var(--radio-pill); background: var(--tinte); color: var(--texto); font-size: 0.9375rem; font-weight: 800; }
.gcat-filtros .chip[aria-pressed="true"] .n { background: rgba(255,255,255,.22); color: var(--c-blanco); }


/* ============================================================
   RONDA 18 · entregas 11–13 (08-sep-2026) — SOLO AÑADIDO
   11 · contraste del sobretítulo (WCAG AA)
   12 · vista previa en vivo del editor del fundador (artboard 10b)
   13 · foto en las tarjetas de ciudad de «Dónde estamos» (18b)
   ============================================================ */

/* 11 · el teal #018790 sobre el fondo #F4F4F4 da 3,9:1 y el sobretítulo es de
   15 px: AA pide 4,5:1. Petróleo da 7,9:1. Sobre banda oscura sigue en ámbar. */
.sobretitulo { color: var(--c-petroleo); }
.banda-petroleo .sobretitulo { color: var(--energia-acento); }

/* 12 · f-preview con la piel del artboard 10b: sin marco discontinuo, rótulo
   con punto teal «en vivo» y tabla de precios en filas finas. */
.fundador .f-preview { background: transparent; border: 0; padding: 0; position: sticky; top: 88px; display: flex; flex-direction: column; gap: var(--sp-3); }
.fundador .f-preview-rotulo { display: flex; align-items: center; gap: 8px; margin: 0; font-size: 0.9375rem; font-weight: 700; letter-spacing: .04em; color: var(--texto-suave); text-transform: uppercase; }
.fundador .f-preview-rotulo .punto-vivo { flex: 0 0 auto; width: 10px; height: 10px; border-radius: 50%; background: var(--c-teal); }
.fundador .f-preview-rotulo .f-preview-como { text-transform: none; letter-spacing: 0; font-weight: 600; }
.fundador .f-preview .tarjeta-tour.vertical { box-shadow: none; }
.fundador .f-preview .tarjeta-tour .media .etiqueta-no-visible { position: absolute; left: 12px; top: 12px; }
.fundador .f-preview .tabla-precios li { background: transparent; border-bottom: 1px solid var(--separador); border-radius: 0; padding: 8px 4px; }
@media (min-width: 75rem) { .fundador .f-editor { grid-template-columns: minmax(0, 1fr) 420px; } }

/* 13 · la tarjeta de ciudad pasa a foto + cuerpo. Sin foto se ve el rayado de
   siempre con el pie «foto: Valencia» (nunca un hueco roto). */
.tarjeta-ciudad-ruot { padding: 0; gap: 0; overflow: hidden; }
.tarjeta-ciudad-ruot .foto-ciudad { position: relative; width: 100%; aspect-ratio: 16 / 10; background: var(--placeholder-foto); }
.tarjeta-ciudad-ruot .foto-ciudad img { display: block; width: 100%; height: 100%; object-fit: cover; }
.tarjeta-ciudad-ruot .foto-ciudad .ph { position: absolute; inset: 0; display: grid; place-items: center; padding: 12px; text-align: center; font-family: ui-monospace, monospace; font-size: 0.75rem; color: var(--texto-suave); }
.tarjeta-ciudad-ruot .cuerpo { padding: 16px 16px 16px; display: flex; flex-direction: column; gap: 8px; align-items: flex-start; }


/* ============================================================
   ENTREGA 14 (08-sep-2026) — #/guia/perfil (G8) arreglado
   Bug real: `.dos-columnas` es «contenido + 380 px», pero en G8 el <aside>
   va PRIMERO (como en el artboard 8a: 340 px + contenido). Resultado: las
   columnas salían al revés — la tarjeta de perfil se estiraba a todo el ancho
   y el contenido quedaba metido en 380 px: los títulos de «Tours que puedes
   hacer» se partían a una palabra por línea, el estado se solapaba con el
   título y «Leer guion» se salía de la tarjeta.
   ============================================================ */
.dos-columnas:has(> aside.tarjeta.fijo:first-child) { grid-template-columns: 340px minmax(0,1fr); }
@media (max-width: 1000px) {
  .dos-columnas:has(> aside.tarjeta.fijo:first-child) { grid-template-columns: minmax(0,1fr); }
  .dos-columnas:has(> aside.tarjeta.fijo:first-child) > aside.tarjeta.fijo { position: static; }
  /* (15-sep-2026, Orden 2 Anthropic) banda 700–1100: las 4 mini-tarjetas de datos
     quedaban a ~100 px y «Meeting point» se partía en tres líneas → 2×2. */
  .datos-clave { grid-template-columns: repeat(2, minmax(0,1fr)); }
  /* (15-sep-2026) misma banda: la rejilla de salidas a 2 columnas dejaba tarjetas
     de ~210 px con el botón «Reservar esta salida» CORTADO → 1 columna y los
     botones dejan envolver el texto desde aquí (antes solo en @720). */
  .rejilla-salidas { grid-template-columns: minmax(0,1fr); }
  .btn { white-space: normal; }
}

/* Tarjeta de perfil del guía (artboard 8a): avatar redondo + nombre, datos en
   <dl> de dos columnas, botones apilados a todo el ancho. Sustituye al hueco
   de foto vacío que se veía como un agujero blanco. */
.perfil-guia { display: flex; flex-direction: column; gap: var(--sp-4); }
.perfil-guia-cab { display: flex; gap: var(--sp-4); align-items: center; }
.perfil-guia-cab > div { min-width: 0; flex: 1; }
.avatar-guia { flex: 0 0 auto; width: 72px; height: 72px; border-radius: 50%; background: var(--placeholder-foto); display: grid; place-items: center; font-family: ui-monospace, monospace; font-size: 0.75rem; color: var(--texto-suave); }
.perfil-guia h1 { margin: 0; font-size: 1.625rem; font-weight: 800; letter-spacing: -.01em; line-height: 1.15; }
.perfil-guia-cab p { margin: 4px 0 0; font-size: var(--fs-small); }
.datos-guia { margin: 0; display: grid; grid-template-columns: auto minmax(0,1fr); gap: 8px 16px; font-size: var(--fs-small); }
.datos-guia dt { color: var(--texto-suave); }
.datos-guia dd { margin: 0; font-weight: 700; min-width: 0; }
.datos-guia dd.ok { color: var(--c-exito); display: inline-flex; align-items: center; gap: 8px; }
.datos-guia dd.ok .ico { flex: 0 0 auto; stroke-width: 3; }
.acciones-perfil-guia { display: flex; flex-direction: column; gap: 8px; border-top: 1px solid var(--separador); padding-top: var(--sp-4); }
.acciones-perfil-guia .btn { justify-content: center; width: 100%; }
.acciones-perfil-guia .btn.suave { border-color: var(--borde); color: var(--texto); }
.nota-perfil-guia { margin: 0; font-size: var(--fs-caption); }

/* «Tours que puedes hacer»: la fila pasa de rejilla fija (1fr 220px auto) a
   flex con salto de línea, así aguanta cualquier ancho de columna. */
.mis-tours li { display: flex; flex-wrap: wrap; align-items: center; gap: 10px var(--sp-4); }
.mis-tours .tour { flex: 1 1 240px; min-width: 0; }
.mis-tours .estado { flex: 0 0 auto; }
.mis-tours .btn { flex: 0 0 auto; margin-left: auto; }
@media (max-width: 720px) { .mis-tours .btn { margin-left: 0; } }

/* Y el badge de la ciudad («Donde vivo» / «Otra ciudad»), si salta de línea,
   con su propio hueco: antes se pegaba a los chips de zona de debajo. */
.cab-ciudad { row-gap: 8px; }
.cab-ciudad .badge { flex: 0 0 auto; }

/* ---- 16c · subida real de documentación (miniatura) ---- */
.ico-doc { display: inline-flex; align-items: center; justify-content: center; width: 48px; height: 48px; border-radius: var(--radio-s); background: var(--tinte); overflow: hidden; flex: 0 0 auto; }
.ico-doc .mini-doc { width: 100%; height: 100%; object-fit: cover; }
.lista-docs .quien { flex: 1; min-width: 0; }

/* ---- Constructor E (10-sep-2026) · fotos de eventos y ciudades ----
   El placeholder .ph queda DEBAJO; la foto lo cubre. Si la foto no carga
   (onerror="this.remove()") se ve el placeholder. ---- */
.tarjeta-evento .media img,
.evento-destacado .media img { position: absolute; inset: 0; width: 100%; height: 100%; object-fit: cover; }
.media-evento { position: relative; overflow: hidden; }
.media-evento .ph { position: absolute; inset: 0; display: grid; place-items: center; }
.media-evento img { position: absolute; inset: 0; width: 100%; height: 100%; object-fit: cover; border-radius: var(--radio-l); }

/* ---- F9 · Fotos de eventos y ciudades (panel fundador) ---- */
.f-rejilla-fotos { display: grid; grid-template-columns: repeat(auto-fill, minmax(200px, 1fr)); gap: var(--sp-4); }
.f-foto-tile { background: var(--superficie); border: 1px solid var(--borde-suave); border-radius: var(--radio-l); padding: var(--sp-3); display: flex; flex-direction: column; gap: var(--sp-2); }
.f-foto-preview { position: relative; aspect-ratio: 4 / 3; border-radius: var(--radio-s); overflow: hidden; background: var(--placeholder-foto); display: grid; place-items: center; }
.f-foto-preview img { position: absolute; inset: 0; width: 100%; height: 100%; object-fit: cover; }
.f-foto-preview .ph { font-family: ui-monospace, monospace; font-size: 0.75rem; color: var(--texto-suave); }
.f-foto-meta { display: flex; flex-direction: column; gap: 4px; min-width: 0; }
.f-foto-meta strong { overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
.f-foto-tile p { margin: 0; }

/* ---- Constructor H (10-sep-2026) · créditos de fotos (#/creditos) ---- */
.creditos-seccion { margin-bottom: var(--sp-6); }
.creditos-grupo { break-inside: avoid; }
.creditos-grupo .subtitulo { display: flex; align-items: center; gap: var(--sp-2); }
.creditos-fotos { list-style: none; margin: 0; padding: 0; display: flex; flex-direction: column; gap: var(--sp-2); }
.creditos-foto { display: flex; gap: var(--sp-3); align-items: baseline; font-size: var(--fs-small); color: var(--texto-suave); }
.creditos-archivo { font-family: ui-monospace, monospace; font-size: 0.8rem; flex: 0 0 auto; }
.creditos-datos { display: block; }
/* (15-sep-2026, Orden 4 Anthropic) los datos de cada foto son UNA frase con los «·»
   dentro del texto; en columna, cada dato aterrizaba en su línea con puntos huérfanos. */
.credito-tour-discreto { margin: var(--sp-2) 0 var(--sp-4); font-size: var(--fs-small); }

/* K · Onboarding Stripe embebido (11-sep-2026): el formulario vive DENTRO de la web —
   el guía nunca sale de RUOT; header y pie siguen visibles alrededor. */
.stripe-onboarding-caja {
  margin-top: var(--sp-3);
  border: 1px solid var(--separador);
  border-radius: var(--radio);
  padding: var(--sp-4);
  max-width: 60rem;
  background: var(--superficie);
}
.stripe-onboarding-cab {
  display: flex;
  justify-content: space-between;
  align-items: center;
  gap: var(--sp-3);
  margin-bottom: var(--sp-3);
}
.stripe-onboarding-cab .texto-suave { margin: 0; }
.stripe-onboarding-contenedor { min-height: 6rem; }

/* ============================================================
   MODO GUÍA/TURISTA (Constructor M — 11-sep-2026)
   Badge de modo SIEMPRE visible en la cabecera (con sesión de
   guía): texto + icono (nunca solo color) + botón de alternancia.
   ============================================================ */
.badge-modo { display: inline-flex; align-items: center; gap: var(--sp-2); padding: 8px 12px; border-radius: var(--radio-pill); font-weight: 800; font-size: var(--fs-micro); letter-spacing: .03em; white-space: nowrap; }
.badge-modo .ico { width: 16px; height: 16px; flex: 0 0 auto; }
.badge-modo.modo-guia { background: var(--energia-acento); color: var(--c-petroleo); }   /* ámbar sobre cabecera petróleo (misma familia que el área FUNDADOR, AA) */
.badge-modo.modo-turista { background: var(--c-blanco); color: var(--c-petroleo); }      /* blanco sobre cabecera petróleo */
.cabecera .btn-pildora.modo-alternar { border: 1px solid rgba(255,255,255,.45); background: transparent; color: var(--c-blanco); }
.cabecera .btn-pildora.modo-alternar:hover { background: rgba(255,255,255,.12); color: var(--c-blanco); }

/* Aviso de gating de modo (/guia/* en modo turista): claro y accesible (role=status) */
.aviso-modo-bloqueo { flex-direction: column; align-items: flex-start; gap: var(--sp-3); font-size: 1.05rem; color: var(--texto); max-width: 62ch; }
.aviso-modo-bloqueo .aviso-modo-texto { display: inline-flex; gap: var(--sp-2); align-items: flex-start; }
.aviso-modo-bloqueo .ico { flex: 0 0 auto; margin-top: 4px; }

/* Aviso sutil del cambio automático a turista (/reservar, /mis-reservas) */
.modo-aviso { padding: 12px 16px; border-radius: var(--radio-s); font-size: var(--fs-small); color: var(--texto); background: var(--tinte-teal); margin-bottom: var(--sp-4); }
.modo-aviso .ico { flex: 0 0 auto; margin-top: 4px; }

/* ============================================================
   RUOT · PARCHE DE PIEL — revisión de lo nuevo (14-sep-2026)
   Anthropic (diseño). Añadir AL FINAL de 08-web/css/estilos.css.
   Solo CSS: no toca app.js, fundador.js, i18n.js ni el router.
   Tres arreglos, cada uno con el porqué.
   ============================================================ */

/* 1) ALTAS DE GUÍAS (#/fundador/altas) — el campo de motivo se queda SIN estilo.
      En el rediseño `.campo` es el CONTENEDOR (`.campo input {…}` viste al input);
      en fundador.js la clase va puesta en el <input>, así que no le llega nada:
      sale con el alto por defecto del navegador (~28 px, por debajo del objetivo
      táctil de 44 px), borde de 1 px y sin borde de foco de marca.
      Esto lo iguala al resto de campos del sitio sin tocar el JS.               */
.fundador .f-alta input[type="text"] {
  width: 100%;
  min-height: 52px;
  padding: 0 var(--sp-4);
  border: 2px solid var(--borde);
  border-radius: var(--radio);
  background: var(--superficie);
  font-family: inherit;
  font-size: 1.0625rem;
  color: var(--texto);
  margin-block: var(--sp-3) var(--sp-2);
}
.fundador .f-alta input[type="text"]:focus { border-color: var(--foco); outline: 2px solid var(--foco); outline-offset: 2px; }
.fundador .f-alta input[type="text"]::placeholder { color: var(--texto-suave); opacity: 1; }

/* 2) GUARDA TU TARJETA (T5 #/confirmacion) — `.pago-tarjeta` no existe en la hoja,
      así que el montaje del Element de Stripe vive de estilos EN LÍNEA.
      Con la clase definida, el bloque hereda la forma de los demás campos y
      Hermes puede borrar el style="" del <div> cuando quiera (opcional).        */
.pago-tarjeta {
  border: 2px solid var(--borde);
  border-radius: var(--radio);
  background: var(--superficie);
  min-height: 56px;
  padding: 16px 16px;
}
.pago-tarjeta:focus-within { border-color: var(--foco); }

/* 3) MIS PREFERENCIAS (#/mis-preferencias) — el estado («activa», «expirada»…)
      se pinta como TEXTO PELADO dentro de `.estados`, que es solo un contenedor
      flex. En «Mis reservas», justo al lado, `.estados` lleva la pastilla
      `<span class="estado pendiente">`: las dos listas se ven distintas sin motivo.

      ARREGLO PREFERIDO (1 línea de markup en app.js, es PIEL, no lógica):
        estadoPreferenciaTxt() envuelve el texto en la pastilla de la casa —
        `return '<span class="estado pendiente">' + txt + '</span>';`
        (el mapa de estadosReserva ya trae `activa: ['pendiente', …]`).

      MIENTRAS ESO NO SE HAGA, este CSS lo iguala sin tocar el JS. Va acotado al
      contenedor de preferencias, así que no puede afectar a «Mis reservas».     */
#preferencias-contenedor .tarjeta-tour .estados {
  display: inline-flex;
  align-items: center;
  padding: 4px 12px;
  border-radius: var(--radio-pill);
  background: var(--tinte);
  color: var(--texto);
  font-size: var(--fs-micro);
  font-weight: 700;
  letter-spacing: .02em;
}
#preferencias-contenedor .tarjeta-tour .estados:empty { display: none; }



/* ============================================================
   BANNER DE NOVEDAD (19-sep-2026) — «somos nuevos, cuéntanos si algo está roto»
   Fondo petróleo (oscuro de marca) + letras en el verde de marca: --tinte-exito
   sobre --c-petroleo = 7,42:1 (AA, medido). Botón: píldora blanca (blanco sobre
   petróleo = 8,6:1, AAA). Foco blanco (el teal sobre petróleo da 2,0:1).
   Solo tokens (Regla 1). El texto va envuelto en su propio <p> (Regla 13).
   ============================================================ */
.banner-novedad { background: var(--energia-acento); color: var(--c-petroleo); border-top: 1px solid rgba(0,0,0,.14); }   /* (21-sep-2026) a juego con el titular del hero; tinta OSCURA: AA sobre ámbar */
.banner-novedad-fila { display: flex; align-items: center; gap: var(--sp-2) var(--sp-4); padding-block: 0; flex-wrap: wrap; }   /* (21-sep-2026 · noche) banda FINA: el alto lo pone el contenido (el enlace, 40 px) — sin relleno propio */
.banner-novedad-ico { display: inline-flex; align-items: center; flex: 0 0 auto; color: var(--c-petroleo); font-size: 1.25rem; }
.banner-novedad-texto { flex: 1 1 18rem; min-width: 0; margin: 0; font-size: var(--fs-base); line-height: var(--lh-apretado); }   /* interlineado de banda, no de párrafo */
.banner-novedad-texto strong { font-weight: 700; }
/* El alto de la banda lo pone el enlace: 40 px (`--tactil-compacto`; el mínimo legal de WCAG AA es 24).
   Probado y DESCARTADO el truco de que el enlace desbordara la banda con márgenes negativos: medido,
   esos píxeles se los queda el vecino (arriba la cabecera, abajo el hero) y el objetivo no era real. */
.banner-novedad-cta { flex: 0 0 auto; display: inline-flex; align-items: center; gap: var(--sp-2); min-height: var(--tactil-compacto); }   /* (21-sep-2026) texto-enlace: manda .btn-enlace */
.banner-novedad-cta:focus-visible { outline-offset: -6px; }   /* el contorno se queda DENTRO de la banda */
.banner-novedad :focus-visible { outline-color: var(--c-petroleo); }   /* (21-sep-2026) sobre ámbar, el contorno blanco no se veía */
@media (max-width: 720px) {
  .banner-novedad-cta { width: 100%; }
}


/* ============================================================
   SEÑAL ESTRUCTURAL DE INTERACTIVIDAD (19-sep-2026) — raíz, no parche
   Los WebViews móviles (Instagram/Facebook en iOS) solo sintetizan el
   `click` en elementos que el motor considera interactivos: sin
   `cursor: pointer`, un clic DELEGADO (document.addEventListener) puede
   morir antes de llegar al manejador. Se declara UNA vez para todo lo
   pulsable, en vez de elemento por elemento (política «no parches»).
   ============================================================ */
button, [role="button"], [role="radio"], [role="tab"], [role="option"], summary, select,
.btn, .chip, .anotacion-opcion, .anotacion-boton, .anotacion-flotante,
.tarjeta-tour, .tarjeta-tour a, .tarjeta-reserva { cursor: pointer; }
button:disabled, [aria-disabled="true"] { cursor: not-allowed; }

/* Enlace estirado de la tarjeta de descubrimiento (19-sep-2026): TODA la tarjeta lleva al
   tour. Antes solo el título y la foto eran pulsables; tocar el texto no hacía nada, y en
   móvil (o en el navegador de Instagram) eso se siente como «no es clicable». Es la <a> del
   título cubriendo la tarjeta: nativo, sin JS ni onclick (política «no parches»). */
.tarjeta-tour.enlaza-todo { position: relative; }
.tarjeta-tour.enlaza-todo .titulo a::after { content: ""; position: absolute; inset: 0; border-radius: inherit; }
.tarjeta-tour.enlaza-todo :is(.chip, button, .btn) { position: relative; z-index: 1; }

/* ---------- Ventana de confirmación del alta de guía (20-sep-2026) ----------
   Solo tokens: el velo y la tarjeta siguen el mismo lenguaje que el resto de capas modales. */
.ventana-solicitud { position: fixed; inset: 0; z-index: 9998; background: var(--velo-modal); display: flex; align-items: center; justify-content: center; padding: var(--sp-4); }
.ventana-caja { background: var(--superficie); color: var(--texto); border: 1px solid var(--borde-suave); border-radius: var(--radio-m); box-shadow: var(--sombra-modal); padding: var(--sp-5); max-width: 460px; width: 100%; display: flex; flex-direction: column; gap: var(--sp-4); }
.ventana-titulo { margin: 0; font-size: var(--fs-titulo); display: flex; align-items: center; gap: var(--sp-2); }
.ventana-titulo .ico { color: var(--c-exito); flex: 0 0 auto; }
.ventana-texto { margin: 0; color: var(--texto-suave); }
.ventana-acciones { display: flex; flex-wrap: wrap; gap: var(--sp-3); }
.ventana-acciones .btn { flex: 1 1 auto; min-height: 44px; }
@media (max-width: 420px) { .ventana-acciones { flex-direction: column; } .ventana-acciones .btn { width: 100%; } }

/* ============================================================
   RONDA 19 · AA del modo oscuro (21-sep-2026) — SOLO AÑADIDO
   Medido con el navegador de verdad (6 pantallas × 2 temas, letra a++):
   en oscuro el sobretítulo quedaba petróleo sobre el fondo oscuro (1,76:1)
   y el texto del CTA del banner, claro sobre el ámbar de la banda (1,52:1;
   «claro sobre ámbar» está prohibido por la casa). Mismo patrón que la
   fila-resumen.mejor: en una banda ámbar el texto va petróleo también en
   oscuro, y sobre fondo oscuro el sobretítulo va ámbar (--energia-acento,
   como en .banda-petroleo). Con estas dos líneas: 0 fallos AA.
   Metro que lo vigila: 08-web/qa-aa-oscuro.py (corre en la suite).
   ============================================================ */
:root[data-tema="oscuro"] .sobretitulo { color: var(--energia-acento); }
.banner-novedad .banner-novedad-cta { color: var(--c-petroleo); }

/* ============================================================
   RONDA 20 · Velo de las tarjetas de ciudad (22-sep-2026) — SOLO AÑADIDO
   El velo de la tarjeta (.destino::after) estaba fijo abajo: con letra grande
   las letras crecían fuera de él (hasta 87 % del fondo por debajo de 3:1).
   Ahora hay un velo anclado al bloque de texto (.destino .texto::before, arriba)
   que crece con él. Y en la banda 721-1060 px con letra a++ las 5 columnas
   dejaban tarjetas de 146 px: «Mánchester» (147 px de tinta) se cortaba 17 px
   por el borde; con 4 columnas la caja de texto pasa a ~160 px.
   Medido con qa-a11y-publica.py (píxel a píxel, portada × 390/880 × claro/a++).
   ============================================================ */
@media (min-width: 721px) and (max-width: 1060px) {
  html[data-fuente="a++"] .rejilla-destinos { grid-template-columns: repeat(4, minmax(0,1fr)); }
}


/* ==========================================================================
   (21-sep-2026) Banda 700–1100 px con letra grande: la fila de «Salidas de hoy» tiene 5 columnas
   fijas (96 + 160 + 220 + 130 = 606 px más huecos) y al crecer la letra el título se queda en 25 px
   con palabras de 66-87 px que se salen de su caja. Solo en ESA banda y SOLO con la letra grande se
   usa la rejilla de dos columnas que el móvil ya usa; el estado normal (a 390, 880 y 1440) no cambia.
   ========================================================================== */
@media (min-width: 721px) and (max-width: 1100px) {
  html[data-fuente="a++"] .lista-salidas-hoy li { grid-template-columns: 72px minmax(0, 1fr); }
  html[data-fuente="a++"] .lista-salidas-hoy li > :nth-child(n+3) { grid-column: 2; }
}

/* ============================================================
   (23-sep-2026) Petición de los amigos de Ale:
   · bloques del guion en párrafos cortos y listas legibles (un bloque de
     20+ líneas seguidas es anti-neurodivergente);
   · el botón de Stripe muestra que trabaja (girador) — «no reaccionaba».
   ============================================================ */
.bloques-guion p { margin: 0 0 var(--sp-5); }
.bloques-guion > :last-child { margin-bottom: 0; }
.bloques-guion .fuentes-linea { margin-top: var(--sp-2); }
.lista-guion { margin: 0 0 var(--sp-5); padding-left: 1.25em; }
.lista-guion li { margin-bottom: var(--sp-2); }
.lista-guion li:last-child { margin-bottom: 0; }
.girando {
  display: inline-block; width: 1em; height: 1em; vertical-align: -0.15em;
  margin-right: .5em; border: 2px solid currentColor; border-top-color: transparent;
  border-radius: 50%; animation: girando .8s linear infinite;
}
@keyframes girando { to { transform: rotate(360deg); } }
:root[data-reducir-movimiento="true"] .girando { animation: none; }
@media (prefers-reduced-motion: reduce) { .girando { animation: none; } }


/* ===== PREFERENCIAS DE GUÍA (G10): rejilla del diseño original (27-sep-2026, Ale · opción A)
   El resumen de nivel/puntos en SU columna, a la DERECHA; los pasos 1-6 en dos columnas.
   Antes, en una sola columna, los pares etiqueta/valor se estiraban a 999 px de hueco. ===== */
.gpref-rejilla { display: grid; grid-template-columns: minmax(0, 340px) minmax(0,1fr); gap: var(--sp-5); align-items: start; }
.gpref-aside { grid-column: 1; grid-row: 1; display: grid; gap: var(--sp-5); align-content: start; }
.gpref-pasos { grid-column: 2; grid-row: 1; display: grid; grid-template-columns: minmax(0,1fr); gap: var(--sp-5); align-content: start; }
@media (max-width: 1100px) {
  .gpref-rejilla { grid-template-columns: minmax(0,1fr); }
  .gpref-aside { grid-column: 1; grid-row: 1; }
  .gpref-pasos { grid-column: 1; grid-row: 2; }
}

/* ============================================================
   Cortina de arranque de la portada (05-oct-2026)
   Lo primero que ve quien entra mientras descargan los ~22 scripts de la SPA:
   composición de marca sobre el petróleo del hero real (antes: un titular
   suelto sobre gris — «horrible», Ale). Solo CSS: sin JS, sin romper la CSP.
   navegar() sustituye #app entero y la cortina desaparece por sí sola.
   ============================================================ */
.cortina { min-height: 100vh; min-height: 100svh; display: flex; flex-direction: column; align-items: center; justify-content: center; gap: var(--sp-4); padding: var(--sp-8) var(--sp-5); text-align: center; background: var(--c-petroleo); color: var(--c-blanco); }
.cortina-caja { display: inline-flex; align-items: center; background: var(--c-blanco); border-radius: var(--radio-s); padding: 4px 8px; }
.cortina h1 { margin: var(--sp-3) 0 0; font-size: var(--fs-display); font-weight: 800; letter-spacing: var(--ls-titulo); line-height: 1.05; color: inherit; max-width: 16ch; }
.cortina-claim { margin: 0; font-size: 1.375rem; opacity: .95; max-width: 44ch; }
.cortina-pulso { display: inline-flex; gap: 7px; margin-top: var(--sp-4); }
.cortina-pulso span { width: 7px; height: 7px; border-radius: 50%; background: var(--c-blanco); opacity: .3; animation: cortina-latido 1.2s ease-in-out infinite; }
.cortina-pulso span:nth-child(2) { animation-delay: .2s; }
.cortina-pulso span:nth-child(3) { animation-delay: .4s; }
@keyframes cortina-latido { 0%, 60%, 100% { opacity: .3; } 30% { opacity: 1; } }
@media (prefers-reduced-motion: reduce) { .cortina-pulso span { animation: none; } }
html[data-reducir-movimiento="true"] .cortina-pulso span { animation: none; }
