:root{--sea:var(--color-brand-coral);--ink:var(--color-brand-ink);--muted:var(--color-mudo);--line:var(--color-linea);--bg:var(--color-white);--soft:var(--color-brand-cream)}
*{box-sizing:border-box;margin:0;padding:0}
body{font-family:var(--font-brand,system-ui,sans-serif);color:var(--ink);background:var(--bg);line-height:1.5}
.wrap{max-width:980px;margin:0 auto;padding:0 18px 80px}
.hero{position:relative;border-radius:0 0 22px 22px;overflow:hidden;margin-bottom:18px}
.hero img{width:100%;height:260px;object-fit:cover;display:block}
.hero-fallback{height:180px;background:linear-gradient(135deg,var(--color-brand-coral,#FF3B2F),var(--color-brand-blue,#002D55))}
.hero-veil{position:absolute;inset:0;background:linear-gradient(0deg,rgba(0,0,0,.66),transparent 58%)}
.byline{position:absolute;z-index:2;left:18px;bottom:14px;display:flex;align-items:center;gap:11px}
.byline img{flex:0 0 auto;width:46px;height:46px;border-radius:50%;object-fit:cover;border:2px solid rgba(255,255,255,.85);background:var(--soft)}
.byline-name{font-size:17px;font-weight:800;color:#fff;letter-spacing:-.01em;line-height:1.15}
.byline-role{font-size:10px;font-weight:700;letter-spacing:.12em;text-transform:uppercase;color:rgba(255,255,255,.78);margin-top:3px}
.hero-txt{padding:18px 0 4px}
h1{font-size:30px;font-weight:800;letter-spacing:-.02em}
.sub{color:var(--muted);margin-top:6px;font-size:15px}
.chips{display:flex;gap:8px;flex-wrap:wrap;margin-top:12px}
.chip{font-size:12px;font-weight:600;background:var(--soft);border:1px solid var(--line);border-radius:99px;padding:5px 11px;color:var(--muted)}
.status{font-size:12px;font-weight:700;padding:5px 11px;border-radius:99px}
.s-review{background:#fff7ed;color:#c2410c}.s-published{background:#f0fdf4;color:#16a34a}.s-draft{background:var(--color-brand-mist,#E8ECEF);color:var(--color-mudo,#4E617A)}
section{margin-top:26px}
h2{font-size:20px;font-weight:800;margin-bottom:12px}
.md{font-size:15px;color:var(--ink);white-space:pre-wrap}
.md b,.md strong{color:var(--ink)}
.days{display:flex;gap:8px;overflow-x:auto;padding-bottom:6px;-webkit-overflow-scrolling:touch}
.day-tab{flex:0 0 auto;border:1.5px solid var(--line);background:#fff;border-radius:13px;padding:9px 15px;font-weight:700;font-size:14px;cursor:pointer;white-space:nowrap;transition:.15s}
.day-tab.active{border-color:var(--sea);background:var(--sea);color:#fff}
#map{height:300px;border-radius:16px;margin:14px 0;border:1px solid var(--line)}
.stop{display:flex;gap:12px;align-items:flex-start;padding:13px;border:1px solid var(--line);border-radius:14px;margin-bottom:10px;background:#fff}
.stop input{margin-top:3px;width:20px;height:20px;accent-color:var(--sea);flex:0 0 auto}
.stop.done .stop-name{text-decoration:line-through;color:var(--muted)}
.stop--map-active{border-color:var(--sea);background:color-mix(in srgb,var(--sea) 6%,#fff)}
.stop-num{flex:0 0 auto;width:26px;height:26px;border-radius:50%;background:var(--sea);color:#fff;font-weight:700;font-size:13px;display:grid;place-items:center}
.stop-time{flex:0 0 auto;min-width:48px;height:26px;padding:0 8px;border-radius:8px;background:var(--sea);color:#fff;font-weight:700;font-size:12px;display:grid;place-items:center}
.stop-name{font-weight:700;font-size:15px}
.stop-cat{font-size:12px;color:var(--muted);text-transform:capitalize}
.stop-desc{font-size:13px;color:var(--muted);margin-top:4px}
.stop a{font-size:12px;font-weight:600;color:var(--sea);text-decoration:none;margin-top:5px;display:inline-block}
.grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(220px,1fr));gap:12px}
.card{border:1px solid var(--line);border-radius:14px;overflow:hidden;background:#fff}
.card img{width:100%;height:120px;object-fit:cover;display:block;background:var(--soft)}
.card-b{padding:11px}
.card-t{font-weight:700;font-size:14px}
.card-c{font-size:12px;color:var(--muted);text-transform:capitalize}
.card-acts{display:flex;flex-wrap:wrap;gap:6px;margin-top:8px}
.card-act{font-size:11px;font-weight:700;color:var(--sea);background:transparent;border:1px solid var(--line);border-radius:16px;padding:4px 9px;cursor:pointer;text-decoration:none;display:inline-flex;align-items:center;gap:3px}
.card-act:hover{border-color:var(--sea)}
.card-act.card-save.on{background:var(--sea);color:#fff;border-color:var(--sea)}
.curio-grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(220px,1fr));gap:12px}
.curio-card{background:#fff;border:1px solid var(--line);border-radius:14px;padding:14px;display:flex;flex-direction:column;gap:6px}
.curio-ic{font-size:1.5rem;line-height:1}
.curio-tag{font-size:11px;font-weight:800;text-transform:uppercase;letter-spacing:.06em;color:var(--sea)}
.curio-text{font-size:13.5px;color:var(--ink);line-height:1.5}
.hist-play{border:none;cursor:pointer;background:var(--sea);color:#fff;border-radius:18px;padding:6px 12px;font-weight:700;font-size:12px;font-family:inherit}
.trip-dates{display:flex;flex-wrap:wrap;gap:14px;margin-bottom:10px}
.trip-dates label{font-size:13px;font-weight:600;color:var(--ink);display:flex;flex-direction:column;gap:4px}
.trip-dates input{font:inherit;padding:8px 10px;border:1px solid var(--line);border-radius:9px}
.hol-none{font-size:14px;color:var(--muted)}
.hol-warn{background:#fff7ed;border:1px solid #fed7aa;border-left:3px solid #f59e0b;border-radius:12px;padding:13px 15px}
.hol-warn b{font-size:14px;color:var(--ink)}
.hol-item{font-size:13.5px;color:var(--ink);margin-top:7px}
.hol-date{font-weight:700;color:#c2410c}
.hol-tip{font-size:12.5px;color:var(--muted);margin-top:9px;border-top:1px solid #fed7aa;padding-top:8px}
.geo-map{height:340px;border-radius:14px;border:1px solid var(--line);margin:6px 0 12px}
.zones-legend{display:grid;grid-template-columns:repeat(auto-fill,minmax(240px,1fr));gap:10px}
.zona-li{font-size:13px;color:var(--muted);line-height:1.5;background:#fff;border:1px solid var(--line);border-radius:12px;padding:11px 13px}
.zona-li b{color:var(--ink)}
.zona-dot{display:inline-block;width:11px;height:11px;border-radius:50%;margin-right:6px;vertical-align:middle}
.beach-list{display:grid;grid-template-columns:repeat(auto-fill,minmax(220px,1fr));gap:8px}
.beach-item{display:flex;justify-content:space-between;align-items:center;gap:8px;font-size:13.5px;font-weight:600;color:var(--ink);background:#fff;border:1px solid var(--line);border-radius:12px;padding:9px 12px;text-decoration:none}
.beach-item span{font-size:11px;color:var(--sea);font-weight:700}
.buybar{display:flex;align-items:center;justify-content:space-between;gap:14px;background:linear-gradient(135deg,#fff,color-mix(in srgb,var(--sea) 6%,#fff));border:1px solid var(--line);border-left:4px solid var(--sea);border-radius:14px;padding:14px 16px;margin:8px 0 4px}
.buy-price{font-size:1.4rem;font-weight:800;color:var(--ink)}
.buy-sub{font-size:12px;color:var(--muted)}
.buy-btn{border:none;cursor:pointer;background:var(--sea);color:#fff;font-weight:800;font-size:.95rem;border-radius:24px;padding:12px 22px;font-family:inherit}
.buy-btn:hover{filter:brightness(1.05)}.buy-btn:disabled{opacity:.6}
.locked-notice{background:var(--soft);border:1px dashed var(--line);border-radius:14px;padding:16px 18px}
.locked-notice h2{margin:0 0 6px;font-size:1.05rem}
.locked-notice p{margin:0;color:var(--muted);font-size:.92rem;line-height:1.5}
.buy-ok{color:#16a34a;font-weight:800;font-size:1rem}
.gate-veil{background:var(--soft);border:1px dashed var(--line);border-radius:14px;padding:26px 22px;text-align:center}
.gate-veil-ic{font-size:1.8rem;margin-bottom:8px}
.gate-veil h2{margin:0 0 6px;font-size:1.1rem}
.gate-veil p{margin:0 0 16px;color:var(--muted);font-size:.92rem;line-height:1.5;max-width:440px;margin-left:auto;margin-right:auto}
.gate-login-link{margin:12px 0 0!important;font-size:.85rem!important}
.gate-login-link a{color:var(--sea);font-weight:700;text-decoration:none}
.gate-login-link a:hover{text-decoration:underline}
.gate-modal-backdrop{position:fixed;inset:0;z-index:200;background:rgba(20,15,10,.5);display:flex;align-items:center;justify-content:center;padding:20px}
.gate-modal{background:#fff;border-radius:18px;padding:28px 26px;width:100%;max-width:400px;box-shadow:0 24px 60px rgba(0,0,0,.3)}
.gate-modal h2{font-size:1.15rem;margin-bottom:6px}
.gate-modal p.lead{color:var(--muted);font-size:.86rem;margin-bottom:18px}
.gate-field{margin-bottom:12px;text-align:left}
.gate-field label{display:block;font-size:.76rem;font-weight:700;margin-bottom:5px}
.gate-field input{width:100%;border:1.5px solid var(--line);border-radius:9px;padding:10px 12px;font:inherit;font-size:.9rem;outline:none}
.gate-field input:focus{border-color:var(--sea)}
.gate-modal-err{color:var(--sea);font-size:.82rem;min-height:1.1em;margin-bottom:6px}
.gate-modal-close{background:none;border:none;color:var(--muted);font-size:.82rem;cursor:pointer;margin-top:10px;width:100%;text-align:center;font-family:inherit}
.loading,.err{text-align:center;padding:60px 20px;color:var(--muted)}
.err{color:var(--sea)}
.progress{height:7px;background:var(--soft);border-radius:99px;overflow:hidden;margin:8px 0 2px}
.progress>div{height:100%;background:var(--sea);width:0;transition:width .3s}
.pdf-btn{position:fixed;right:16px;bottom:16px;z-index:50;background:var(--sea);color:#fff;border:none;border-radius:99px;padding:13px 20px;font-weight:700;font-size:14px;box-shadow:0 6px 20px color-mix(in srgb,var(--sea) 40%,transparent);cursor:pointer;font-family:inherit}
.off-btn{position:fixed;right:16px;bottom:66px;z-index:50;background:var(--color-brand-night,#001B35);color:#fff;border:none;border-radius:99px;padding:11px 18px;font-weight:700;font-size:13px;box-shadow:0 6px 20px rgba(0,0,0,.25);cursor:pointer;font-family:inherit}
.off-btn.ready{background:#16a34a}
@media print{
  .pdf-btn,.days{display:none!important}
  #map{display:none!important}
  body{font-size:12px}
  .stop,.card{break-inside:avoid}
  .wrap{max-width:100%;padding:0}
  a{color:inherit;text-decoration:none}
  /* En impresión, mostrar todas las paradas de todos los días */
  #stops-all{display:block!important}
  #stops{display:none!important}
}
#stops-all{display:none}

/* feature/unify-destinations: bloques de contenido interactivos (antes solo
   existían en la ficha de destino aparte, destino.html) — mismo aspecto,
   adaptado a las variables de esta página (--sea/--ink/--muted/--line/--bg/--soft
   en vez de --sea-2/--border/--white/--soft/--ink-2/--coral de destino.html). */
.weather-box{display:grid;grid-template-columns:auto 1fr;gap:32px;align-items:center;background:var(--sea);border-radius:20px;padding:36px;color:#fff}
@media(max-width:580px){.weather-box{grid-template-columns:1fr}}
.weather-temp{font-size:3.4rem;line-height:1;color:#fff;font-weight:700}
.weather-temp sup{font-size:1.6rem;vertical-align:super}
.weather-stats{display:flex;gap:28px;margin-top:14px;flex-wrap:wrap}
.weather-stat .n{font-size:1.3rem;font-weight:700;color:#fff}
.weather-stat .l{font-size:.65rem;letter-spacing:.1em;text-transform:uppercase;color:rgba(255,255,255,.7)}
.weather-notes{font-size:.9rem;color:rgba(255,255,255,.85);margin-top:16px;line-height:1.6}
.map-container{border:1px solid var(--line);border-radius:16px;overflow:hidden}
.map-controls{display:flex;gap:8px;padding:12px 14px;background:var(--bg);border-bottom:1px solid var(--line);flex-wrap:wrap}
.map-btn{padding:6px 14px;border-radius:20px;font-size:.76rem;font-weight:600;border:1.5px solid var(--line);background:var(--bg);cursor:pointer;color:var(--muted)}
.map-btn.active{background:var(--sea);color:#fff;border-color:var(--sea)}
.comp-grid{display:flex;flex-direction:column;gap:18px;max-width:540px}
.comp-row{display:grid;grid-template-columns:140px 1fr 40px;gap:14px;align-items:center}
.comp-label{font-size:.85rem;font-weight:600;text-align:right;color:var(--ink)}
.comp-bar-wrap{background:var(--soft);border-radius:20px;height:10px;overflow:hidden}
.comp-bar{height:10px;border-radius:20px;background:var(--sea);width:0;transition:width 1s cubic-bezier(.4,0,.2,1)}
.comp-score{font-size:1rem;font-weight:700;color:var(--sea);text-align:right}
.faq-list{display:flex;flex-direction:column;border:1px solid var(--line);border-radius:16px;overflow:hidden}
.faq-item{border-bottom:1px solid var(--line)}
.faq-item:last-child{border-bottom:none}
.faq-q{width:100%;text-align:left;background:var(--bg);border:none;padding:18px 22px;font:inherit;font-size:.92rem;font-weight:600;color:var(--ink);cursor:pointer;display:flex;justify-content:space-between;align-items:center;gap:16px}
.faq-arrow{color:var(--muted);font-size:1rem;transition:.25s;flex-shrink:0}
.faq-item.open .faq-arrow{transform:rotate(180deg);color:var(--sea)}
.faq-a{display:none;padding:0 22px 18px;font-size:.88rem;color:var(--muted);line-height:1.7;background:var(--bg)}
.faq-item.open .faq-a{display:block}

/* ─── Clases que sustituyen a los `style="..."` que generaba el JavaScript ───
   Un `style=` dentro de un `innerHTML` es CSS en línea y la CSP lo bloquea
   igual que un `<style>`. Lo que sí depende de los datos (el color de una
   zona) viaja como `data-fondo` y lo aplica aplicarEstilos() por CSSOM. */

.ancho-total { width: 100%; }
.stop-pct { margin-bottom: 6px; }
.stop--centrado { align-items: center; }
.stop-num--hora { border-radius: 8px; }
.stop-cat--nota { opacity: .8; }
.print-dia { margin: 14px 0 6px; font-size: 16px; }

/* Chincheta numerada del itinerario: la gota girada de siempre. */
.pin-num {
  background: var(--color-brand-coral, #FF3B2F); color: #fff; width: 26px; height: 26px;
  border-radius: 50% 50% 50% 0; transform: rotate(-45deg);
  display: grid; place-items: center;
  box-shadow: 0 1px 4px rgba(0, 0, 0, .4);
}
.pin-num span { transform: rotate(45deg); font-weight: 700; font-size: 12px; }

/* Chincheta de un punto de interés. El color lo pone `data-fondo`. */
.pin-poi {
  width: 28px; height: 28px; border-radius: 50%; background: var(--color-brand-blue, #002D55);
  border: 2px solid #fff; box-shadow: 0 2px 6px rgba(0, 0, 0, .4);
  display: flex; align-items: center; justify-content: center; font-size: 13px;
}
.pin-emoji { font-size: 18px; }
.pin-emoji--zona { font-size: 20px; }
.zona-dot--evitar { background: #dc2626; }

/* ─────────────────────────────────────────────────────────────────────────
   Incentivo del bloqueo de registro.

   El HTML lo pinta assets/js/beneficios-guias.js y lo viste
   assets/css/beneficios-guias.css — el mismo componente que la portada. Aquí
   solo se le dice en qué paleta está: este visor no usa la tipografía
   editorial ni el verde lima, sino Plus Jakarta Sans, `--sea` y esquinas
   redondeadas. Son ocho variables; sin ellas habría que duplicar el
   componente entero para cambiarle el color.
   ───────────────────────────────────────────────────────────────────────── */
.gate-veil--incentivo { text-align: left; padding: 24px 22px 22px; }
/* `.gate-veil p` centra todo párrafo con `margin-left/right: auto` y lo limita
   a 440px — está escrito para el velo antiguo, que era un cartel centrado de
   dos líneas. Dentro del incentivo eso descolocaba el rótulo y el texto
   respecto al titular, que sí va a la izquierda. Se deshace solo aquí. */
.gate-veil--incentivo .vg-incentivo p { max-width: none; margin-left: 0; margin-right: 0; }
.gate-veil--incentivo .vg-incentivo,
.gate-modal .vg-incentivo {
  --vg-ink: var(--ink);
  --vg-papel: #fff;
  --vg-linea: var(--line);
  --vg-apagado: var(--muted);
  --vg-acento: var(--sea);
  --vg-mono: inherit;
  --vg-serif: inherit;
  --vg-radio: 12px;
}
.gate-veil--incentivo .vg-rotulo,
.gate-modal .vg-rotulo { font-weight: 700; letter-spacing: .12em; }
.gate-veil--incentivo .vg-incentivo__titulo,
.gate-modal .vg-incentivo__titulo { font-weight: 800; letter-spacing: -.02em; }
.gate-veil--incentivo .vg-btn,
.gate-modal .vg-btn { font-weight: 800; letter-spacing: .04em; font-size: 11px; border-radius: 24px; }

/* En el formulario, el recordatorio es una nota corta encima: separada por
   una línea, sin llegar a competir con los campos. */
.gate-modal .vg-incentivo {
  margin-bottom: 18px; padding-bottom: 16px; border-bottom: 1px solid var(--line);
}
.gate-modal-alt {
  display: block; margin-top: 12px; text-align: center;
  color: var(--muted); font-size: .84rem; text-decoration: underline; text-underline-offset: 3px;
}
.gate-modal-alt:hover { color: var(--sea); }

/* Casilla de aceptación del alta. Toda la línea es zona pulsable: una casilla
   de 13 px sola es un objetivo imposible en un móvil, y la etiqueta al lado
   sin `for` es el fallo clásico que lo deja así. Los dos enlaces abren en otra
   pestaña a propósito — leerlos no puede costar perder lo ya tecleado. */
.gate-acepta {
  display: flex; gap: 10px; align-items: flex-start;
  margin: 4px 0 14px; font-size: .82rem; line-height: 1.45; color: var(--muted); cursor: pointer;
}
.gate-acepta input { flex: 0 0 auto; margin-top: 2px; width: 17px; height: 17px; accent-color: var(--sea); }
.gate-acepta a { color: var(--sea); text-decoration: underline; text-underline-offset: 2px; }
.gate-acepta input:focus-visible { outline: 3px solid var(--sea); outline-offset: 2px; }
