* { box-sizing: border-box; }
html { scroll-behavior: smooth; scroll-padding-top: 88px; overflow-x: hidden; }
body {
  margin: 0;
  font: 16px/1.7 var(--sans);
  color: var(--ink);
  background: var(--bg);
  -webkit-font-smoothing: antialiased;
  overflow-x: hidden;
}
img { max-width: 100%; display: block; }
h1, h2, h3 { font-family: var(--serif); line-height: 1.1; margin: 0; font-weight: 600; }
a { color: var(--accent2); text-decoration: none; transition: color 0.15s; }
a:hover { color: var(--gold); text-decoration: none; }
a:focus-visible, button:focus-visible, select:focus-visible, input:focus-visible, summary:focus-visible {
  outline: 2px solid var(--accent); outline-offset: 2px;
}

.eyebrow {
  display: block; font-size: 0.72rem; letter-spacing: 0.22em; text-transform: uppercase;
  color: var(--accent); font-weight: 700; margin-bottom: 0.9rem;
}

/* ---------- Estilo de título de sección seleccionable por sitio (site.heading_style) ----------
   "plain" (defecto) es el h2/.eyebrow de arriba, sin cambios. Los títulos aparecen repartidos en
   muchas plantillas (welcome, verdict, rooms, gallery, amenities, getting-there, location...),
   así que se centraliza vía clase en <body>, igual que button_style. */

body.heading-style-underline .section h2 {
  display: inline-block; padding-bottom: 0.8rem; border-bottom: 3px solid var(--accent);
}

body.heading-style-eyebrow-badge .section .eyebrow {
  display: inline-block; background: var(--panel); border: 1px solid var(--line);
  padding: 0.4rem 1.1rem; border-radius: 999px; margin-bottom: 1.2rem;
}

body.heading-style-centered-divider .section h2 {
  display: flex; align-items: center; gap: 1.2rem; text-align: center;
  margin-left: auto; margin-right: auto; max-width: none;
}
body.heading-style-centered-divider .section h2::before,
body.heading-style-centered-divider .section h2::after {
  content: ''; flex: 1; height: 1px; background: var(--line);
}
body.heading-style-centered-divider .section .eyebrow { text-align: center; }

.btn {
  display: inline-flex; align-items: center; justify-content: center; gap: 0.5rem;
  padding: 0.95rem 1.8rem;
  border-radius: 0;
  font-weight: 600;
  font-size: 0.8rem;
  letter-spacing: 0.12em;
  text-transform: uppercase;
  cursor: pointer;
  border: none;
  text-decoration: none !important;
  transition: background 0.2s, box-shadow 0.2s, color 0.2s;
}
.btn-primary { background: var(--cta); color: #fff; box-shadow: 0 10px 24px -8px rgba(0,0,0,0.35); }
.btn-primary:hover { background: var(--cta2); }
.btn-secondary { background: transparent; border: 1px solid var(--line); color: var(--ink); }
.btn-secondary:hover { background: var(--ink); color: var(--bg); border-color: var(--ink); }
.btn-lg { padding: 1.15rem 2.3rem; font-size: 0.85rem; }

/* ---------- Estilo de botón seleccionable por sitio (site.button_style) ----------
   "square" (defecto) es el .btn de arriba, sin cambios. El resto se activa vía una
   clase en <body> (los botones aparecen repartidos en muchas plantillas: nav, hero,
   footer, room cards, banners...), así que se centraliza aquí en vez de en cada parcial. */

body.btn-style-rounded .btn { border-radius: 10px; }
body.btn-style-pill .btn { border-radius: 999px; }

body.btn-style-outline .btn-primary {
  background: transparent; color: var(--cta); border: 2px solid var(--cta); box-shadow: none;
}
body.btn-style-outline .btn-primary:hover { background: var(--cta); color: #fff; }

body.btn-style-ghost .btn-primary { background: transparent; color: var(--cta); border: none; box-shadow: none; }
body.btn-style-ghost .btn-primary:hover { background: color-mix(in srgb, var(--cta) 12%, transparent); }

body.btn-style-glass .btn-primary {
  background: color-mix(in srgb, var(--cta) 55%, transparent);
  border: 1px solid color-mix(in srgb, var(--cta) 60%, transparent);
  backdrop-filter: blur(8px); color: #fff; box-shadow: none;
}
body.btn-style-glass .btn-primary:hover { background: color-mix(in srgb, var(--cta) 75%, transparent); }

body.btn-style-shadow-lift .btn-primary {
  box-shadow: 0 12px 28px -6px color-mix(in srgb, var(--cta) 65%, transparent);
  transition: background 0.2s, box-shadow 0.25s, transform 0.25s;
}
body.btn-style-shadow-lift .btn-primary:hover {
  transform: translateY(-3px);
  box-shadow: 0 18px 34px -6px color-mix(in srgb, var(--cta) 75%, transparent);
}

body.btn-style-scale .btn-primary { transition: background 0.2s, box-shadow 0.2s, transform 0.2s; }
body.btn-style-scale .btn-primary:hover { transform: scale(1.06); }

body.btn-style-underline-sweep .btn-primary {
  position: relative; z-index: 1; overflow: hidden;
  background: transparent; color: var(--cta); border: 1px solid var(--cta); box-shadow: none;
}
body.btn-style-underline-sweep .btn-primary::before {
  content: ''; position: absolute; inset: 0; z-index: -1; background: var(--cta);
  transform: scaleX(0); transform-origin: left; transition: transform 0.28s ease;
}
body.btn-style-underline-sweep .btn-primary:hover { color: #fff; }
body.btn-style-underline-sweep .btn-primary:hover::before { transform: scaleX(1); }

body.btn-style-gradient .btn-primary {
  background: linear-gradient(120deg, var(--cta), var(--cta2)); background-size: 160% 160%; background-position: 0% 50%;
  box-shadow: 0 10px 24px -8px color-mix(in srgb, var(--cta) 55%, transparent);
  transition: background-position 0.35s ease, box-shadow 0.2s;
}
body.btn-style-gradient .btn-primary:hover { background-position: 100% 50%; }

.badge {
  display: inline-flex; align-items: center; gap: 0.5rem;
  padding: 0.5rem 1rem;
  border-radius: 999px;
  background: rgba(255,255,255,0.12);
  backdrop-filter: blur(10px);
  border: 1px solid rgba(255,255,255,0.28);
  color: #fff;
  font-size: 0.8rem; letter-spacing: 0.03em; font-weight: 600;
}

/* ---------- Nav ---------- */
.nav {
  position: sticky; top: 0; z-index: 90;
  background: var(--bg);
  border-bottom: 1px solid var(--line);
  transition: background 0.3s, border-color 0.3s, box-shadow 0.3s;
}

/* ---------- El menú se queda fijo arriba al hacer scroll, o se desplaza con la página
   (site.nav_sticky_style) — "sticky" (arriba) es el defecto. Clase en <body>, con !important
   porque hay 22 header_style que fijan su propio position en distintos estados (normal/
   scrolled) y esto tiene que ganar pase lo que pase. No afecta a header_style=sidebar (columna
   fija a la izquierda: es un paradigma de layout distinto, no "pegarse arriba al hacer scroll"). */
body.nav-sticky-scrolls-away .nav:not(.nav-style-sidebar) { position: static !important; }
/* Con "scrolls-away", la variante "sobre el hero" ya no se superpone a la foto (deja de ser
   position:absolute/fixed) — el texto/fondo transparentes pensados para flotar sobre una imagen
   oscura se vuelven ilegibles al quedar en flujo normal sobre el fondo claro de la página. Se
   fuerza aquí el mismo aspecto seguro que ya usa el estado "scrolled" (fondo claro opaco, texto
   oscuro), tanto en el propio nav como en sus selects. Texto en var(--dark) y no var(--ink):
   este fondo es un blanco roto FIJO (no depende del theme), pero --ink sí depende del theme y en
   "night" es un color claro (pensado para texto sobre su --bg oscuro) — quedaría invisible sobre
   este fondo claro. --dark siempre es oscuro en los 12 themes, con o sin --bg oscuro. */
body.nav-sticky-scrolls-away .nav-over-hero:not(.nav-style-sidebar) {
  background: rgba(253, 252, 250, 0.86) !important;
  backdrop-filter: blur(14px) saturate(140%);
  border-color: var(--line);
}
body.nav-sticky-scrolls-away .nav-over-hero:not(.nav-style-sidebar) .nav-brand,
body.nav-sticky-scrolls-away .nav-over-hero:not(.nav-style-sidebar) .nav-anchors a {
  color: var(--dark) !important;
}
body.nav-sticky-scrolls-away .nav-over-hero:not(.nav-style-sidebar) #currency-select,
body.nav-sticky-scrolls-away .nav-over-hero:not(.nav-style-sidebar) #lang-select {
  background: var(--bg) !important; border-color: var(--line) !important; color: var(--ink) !important;
}
body.nav-sticky-scrolls-away .nav-over-hero:not(.nav-style-sidebar) .nav-phone { color: var(--dark) !important; }
/* El hero tiene margin-top:-76px para que su foto arranque en la parte superior de la página
   pese al nav flotando encima (position:absolute/fixed) — con el nav en flujo normal (esta
   variante), ese margen negativo hace que el hero se superponga y tape el nav entero por
   detrás. Mismo criterio que ya usa header_style=sidebar más abajo (buscar "~ main .hero"). */
body.nav-sticky-scrolls-away .nav:not(.nav-style-sidebar) ~ main .hero { margin-top: 0; }
.nav-inner {
  max-width: 1200px; margin: 0 auto; padding: 0 1.5rem; min-height: 76px; height: auto;
  display: flex; flex-wrap: wrap; row-gap: 0.5rem; align-items: center; justify-content: space-between; gap: 1.2rem;
}
.nav-brand {
  font-family: var(--serif); font-size: 1.2rem; font-weight: 700; color: var(--ink);
  white-space: nowrap; overflow: hidden; text-overflow: ellipsis;
  flex: 1 1 0; min-width: 0;
}
.nav-right { display: flex; flex-wrap: wrap; row-gap: 0.5rem; align-items: center; gap: 1.6rem 2.2rem; flex: 0 1 auto; justify-content: flex-end; }
.nav-anchors { display: none; flex-wrap: wrap; row-gap: 0.4rem; gap: 1.4rem; }
.nav-anchors a {
  color: var(--mut); font-weight: 500; font-size: 0.72rem; letter-spacing: 0.14em; text-transform: uppercase;
}
.nav-anchors a:hover { color: var(--accent2); text-decoration: none; }
.nav-actions { display: flex; align-items: center; gap: 0.8rem; }
.nav-phone { display: none; color: var(--ink); font-weight: 600; font-size: 0.82rem; white-space: nowrap; }
#currency-select, #lang-select {
  padding: 0.5rem 0.6rem; border-radius: var(--radius); border: 1px solid var(--line);
  background: var(--bg); color: var(--ink); font-size: 0.8rem;
  color-scheme: light; /* evita que el navegador fuerce un desplegable emergente oscuro
                           que dejaría el texto (oscuro) ilegible contra su propio fondo */
}
@media (min-width: 900px) { .nav-anchors { display: flex; } }

/* Menú desplegable (<details> nativo, sin JS) — oculto salvo en nav-style-dropdown */
.nav-menu { display: none; position: relative; }
.nav-menu summary {
  list-style: none; cursor: pointer; color: var(--mut); font-weight: 600;
  font-size: 0.72rem; letter-spacing: 0.12em; text-transform: uppercase;
  padding: 0.55rem 0.9rem; border: 1px solid var(--line); border-radius: var(--radius);
}
.nav-menu summary::-webkit-details-marker { display: none; }
.nav-menu summary::after { content: ' \25BE'; }
.nav-menu-panel {
  position: absolute; top: calc(100% + 0.6rem); right: 0; z-index: 100; min-width: 200px;
  background: var(--bg); border: 1px solid var(--line); border-radius: var(--radius); box-shadow: var(--shadow);
  padding: 0.9rem; display: flex; flex-direction: column; gap: 0.75rem;
}
.nav-menu-panel a { color: var(--ink); font-size: 0.8rem; letter-spacing: 0.04em; text-transform: none; font-weight: 500; }
.nav-menu-panel a:hover { color: var(--accent2); }

/* Nav transparente sobre el hero: solo en home, se sube la marca a blanco hasta hacer scroll */
.nav-over-hero {
  position: absolute; top: 0; left: 0; right: 0;
  background: transparent; border-color: transparent;
}
.nav-over-hero .nav-brand, .nav-over-hero .nav-anchors a { color: #fff; }
/* Caja cerrada: cristal translúcido a juego con el resto del nav sobre el hero. Lista abierta:
   fondo sólido claro + texto oscuro fijados directamente en <option> (a diferencia de
   color-scheme, esto sí lo respetan de forma fiable los navegadores) — así el popup nunca
   depende de que el navegador "adivine" un tema oscuro. */
.nav-over-hero #currency-select, .nav-over-hero #lang-select {
  background: rgba(255,255,255,0.14); border-color: rgba(255,255,255,0.35); color: #fff;
  backdrop-filter: blur(8px);
}
.nav-over-hero #currency-select option, .nav-over-hero #lang-select option {
  background: #fff; color: var(--dark);
}
.nav-over-hero.scrolled {
  position: sticky;
  background: rgba(253, 252, 250, 0.86);
  backdrop-filter: blur(14px) saturate(140%);
  border-color: var(--line);
  box-shadow: 0 1px 0 rgba(0,0,0,0.02);
}
/* var(--dark) y no var(--ink): este fondo blanco roto es fijo, no depende del theme — en
   "night" --ink es un color claro pensado para el --bg oscuro y quedaría invisible aquí. */
.nav-over-hero.scrolled .nav-brand, .nav-over-hero.scrolled .nav-anchors a { color: var(--dark); }
.nav-over-hero.scrolled #currency-select, .nav-over-hero.scrolled #lang-select { background: var(--bg); border-color: var(--line); color: var(--ink); }

/* Variantes de header seleccionables por sitio (site.header_style) */
.nav-style-minimal .nav-anchors { display: none !important; }
.nav-style-centered .nav-inner { flex-direction: column; justify-content: center; gap: 0.4rem; height: auto; padding-top: 0.9rem; padding-bottom: 0.9rem; }
.nav-style-centered .nav-brand { flex: 0 0 auto; }
.nav-style-centered .nav-right { flex-direction: column; gap: 0.7rem; }

/* split: separa marca / anclas / acciones en 3 bloques repartidos (mismo DOM, .nav-right se "desenvuelve") */
.nav-style-split .nav-right { display: contents; }
@media (min-width: 900px) { .nav-style-split .nav-anchors { flex: 1 1 auto; justify-content: center; } }

/* bold: cabecera más alta, marca más grande, línea de acento */
.nav-style-bold { border-bottom: 2px solid var(--accent); }
.nav-style-bold .nav-inner { height: 92px; }
.nav-style-bold .nav-brand { font-size: 1.5rem; }
.nav-style-bold .nav-actions .btn-primary { padding: 0.85rem 1.6rem; font-size: 0.78rem; }

/* boxed: barra flotante redondeada, separada del borde superior.
   Radio moderado (no cápsula 999px): con esquinas muy cerradas y poco padding lateral, el botón
   de reservar quedaba fuera de la silueta curva del contenedor — con rect. redondeado no pasa. */
.nav-style-boxed .nav-inner {
  margin: 0.7rem auto; max-width: 1160px; min-height: 64px; height: auto; padding: 0.7rem 2rem;
  border-radius: 18px; border: 1px solid var(--line); background: var(--bg); box-shadow: var(--shadow);
}
.nav-over-hero.nav-style-boxed .nav-inner { background: rgba(255,255,255,0.12); backdrop-filter: blur(10px); border-color: rgba(255,255,255,0.25); }
.nav-over-hero.scrolled.nav-style-boxed .nav-inner { background: var(--bg); border-color: var(--line); backdrop-filter: none; }

/* banded: marca+acciones en una fila, anclas en su propia franja completa debajo con separador */
.nav-style-banded .nav-right { display: contents; }
.nav-style-banded .nav-inner { flex-wrap: wrap; row-gap: 0.6rem; height: auto; padding-top: 0.9rem; padding-bottom: 0.7rem; }
.nav-style-banded .nav-anchors { flex-basis: 100%; order: 3; justify-content: center; padding-top: 0.7rem; border-top: 1px solid var(--line); display: flex !important; }
.nav-style-banded .nav-actions { order: 2; }
.nav-over-hero.nav-style-banded .nav-anchors { border-top-color: rgba(255,255,255,0.25); }

/* compact: cabecera más baja y tipografía más pequeña, para sitios que quieren menos peso visual */
.nav-style-compact .nav-inner { height: 58px; gap: 0.8rem; }
.nav-style-compact .nav-brand { font-size: 1.05rem; }
.nav-style-compact .nav-right { gap: 1.4rem; }
.nav-style-compact .nav-anchors { gap: 1.1rem; }
.nav-style-compact .nav-anchors a { font-size: 0.66rem; }

/* outline: sin fondo nunca (ni al hacer scroll), solo una línea inferior — look muy ligero */
.nav-style-outline { background: transparent; border-bottom: 1px solid var(--line); box-shadow: none; }
.nav-style-outline.nav-over-hero.scrolled { background: transparent; backdrop-filter: none; border-color: rgba(255,255,255,0.3); }
.nav-style-outline.nav-over-hero.scrolled .nav-brand, .nav-style-outline.nav-over-hero.scrolled .nav-anchors a { color: #fff; }

/* inverse: fondo oscuro siempre (marca/anclas claras), independiente de hero/scroll */
.nav-style-inverse, .nav-style-inverse.nav-over-hero, .nav-style-inverse.nav-over-hero.scrolled {
  background: var(--dark); border-color: transparent; backdrop-filter: none;
}
.nav-style-inverse .nav-brand, .nav-style-inverse .nav-anchors a,
.nav-style-inverse.nav-over-hero .nav-brand, .nav-style-inverse.nav-over-hero .nav-anchors a,
.nav-style-inverse.nav-over-hero.scrolled .nav-brand, .nav-style-inverse.nav-over-hero.scrolled .nav-anchors a { color: var(--deep-fg); }
.nav-style-inverse .nav-anchors a:hover { color: var(--gold); }
/* Mismo criterio que .nav-over-hero: fondo sólido claro y texto oscuro siempre, en vez de
   perseguir el popup nativo de <option> con texto claro (inconsistente entre navegadores). */
.nav-style-inverse #currency-select, .nav-style-inverse #lang-select {
  background: rgba(255,255,255,0.1); border-color: rgba(255,255,255,0.28); color: var(--deep-fg);
}
.nav-style-inverse #currency-select option, .nav-style-inverse #lang-select option {
  background: #fff; color: var(--dark);
}

/* pill-links: cada ancla es una píldora con fondo propio en vez de texto suelto */
.nav-style-pill-links .nav-anchors { gap: 0.6rem; }
.nav-style-pill-links .nav-anchors a { padding: 0.5rem 1rem; border-radius: 999px; background: var(--panel); }
.nav-style-pill-links .nav-anchors a:hover { background: var(--accent); color: #fff; }
.nav-over-hero.nav-style-pill-links .nav-anchors a { background: rgba(255,255,255,0.14); }
.nav-over-hero.nav-style-pill-links .nav-anchors a:hover { background: rgba(255,255,255,0.28); color: #fff; }

/* left-cta: el botón de reserva pasa al extremo izquierdo, delante de la marca (mismo DOM, reordenado) */
.nav-style-left-cta .nav-right, .nav-style-left-cta .nav-actions { display: contents; }
.nav-style-left-cta .nav-actions .btn-primary { order: -1; }
.nav-style-left-cta .nav-brand { order: 1; }
.nav-style-left-cta .nav-anchors { order: 2; flex: 1 1 auto; justify-content: center; }
.nav-style-left-cta #currency-select, .nav-style-left-cta #lang-select { order: 3; }

/* shadow: sin línea inferior, con sombra suave para dar profundidad en vez de un borde */
.nav-style-shadow { border-bottom: none; box-shadow: 0 8px 30px -14px rgba(0,0,0,0.22); }
.nav-style-shadow .nav-brand { font-size: 1.3rem; }

/* numbered: cada ancla lleva su índice delante (01, 02...), sin tocar la plantilla */
.nav-style-numbered .nav-anchors { counter-reset: navnum; gap: 1.7rem; }
.nav-style-numbered .nav-anchors a { counter-increment: navnum; }
.nav-style-numbered .nav-anchors a::before { content: counter(navnum, decimal-leading-zero) " "; color: var(--accent); font-weight: 700; }
.nav-over-hero.nav-style-numbered .nav-anchors a::before { color: var(--gold); }

/* contact-bar: muestra el teléfono del hotel junto al botón de reserva */
.nav-style-contact-bar .nav-phone { display: inline-flex; }
.nav-over-hero.nav-style-contact-bar .nav-phone { color: #fff; }
.nav-over-hero.scrolled.nav-style-contact-bar .nav-phone { color: var(--dark); }

/* dropdown: en vez de anclas en línea, un único botón "Menu" que despliega un panel */
.nav-style-dropdown .nav-anchors { display: none !important; }
.nav-style-dropdown .nav-menu { display: block; }
.nav-over-hero.nav-style-dropdown .nav-menu summary { color: #fff; border-color: rgba(255,255,255,0.35); }
.nav-over-hero.scrolled.nav-style-dropdown .nav-menu summary { color: var(--mut); border-color: var(--line); }

/* tinted: fondo de color suave (paleta del tema) en vez de blanco/transparente */
.nav-style-tinted, .nav-style-tinted.nav-over-hero, .nav-style-tinted.nav-over-hero.scrolled {
  background: var(--panel); border-bottom-color: var(--line); backdrop-filter: none;
}
.nav-style-tinted .nav-brand, .nav-style-tinted .nav-anchors a,
.nav-style-tinted.nav-over-hero .nav-brand, .nav-style-tinted.nav-over-hero .nav-anchors a { color: var(--ink); }

/* sidebar: columna fija a la izquierda en vez de barra horizontal (desktop; en móvil vuelve a barra normal).
   position/background repetidos con .nav-over-hero y .nav-over-hero.scrolled a propósito: esos dos
   selectores tienen más especificidad (dos y tres clases) que .nav-style-sidebar solo, así que sin
   esto el JS de scroll (clase .scrolled) rompía la columna fija en cuanto se hacía scroll. */
.nav-style-sidebar,
.nav-style-sidebar.nav-over-hero,
.nav-style-sidebar.nav-over-hero.scrolled {
  position: fixed; top: 0; left: 0; bottom: 0; width: 240px; height: 100vh;
  border-bottom: none; border-right: 1px solid var(--line); overflow-y: auto;
  background: var(--bg); backdrop-filter: none; box-shadow: none;
}
.nav-style-sidebar .nav-inner {
  flex-direction: column; align-items: flex-start; justify-content: flex-start;
  height: auto; min-height: 100%; padding: 2.5rem 1.6rem; gap: 2.2rem;
}
.nav-style-sidebar .nav-brand { white-space: normal; font-size: 1.3rem; flex: 0 0 auto; }
.nav-style-sidebar .nav-right { flex-direction: column; align-items: flex-start; width: 100%; gap: 2rem; }
.nav-style-sidebar .nav-anchors { flex-direction: column; align-items: flex-start; gap: 1.1rem; display: flex !important; }
.nav-style-sidebar .nav-menu { display: none !important; }
.nav-style-sidebar .nav-actions { flex-direction: column; align-items: flex-start; width: 100%; gap: 0.8rem; }
.nav-style-sidebar .nav-actions .btn { width: 100%; justify-content: center; }
.nav-style-sidebar #currency-select, .nav-style-sidebar #lang-select { width: 100%; }
.nav.nav-style-sidebar ~ main, .nav.nav-style-sidebar ~ .site-footer { margin-left: 240px; }
.nav.nav-style-sidebar ~ main .hero { margin-top: 0; }
.nav-over-hero.nav-style-sidebar .nav-brand, .nav-over-hero.nav-style-sidebar .nav-anchors a { color: var(--ink); }
@media (max-width: 900px) {
  /* misma especificidad (0,1,0)/(0,2,0)/(0,3,0) que el bloque de escritorio de arriba, para que
     estas reglas ganen dentro de este media query (equivalen en especificidad; al ir después en
     el archivo, se imponen cuando el media query está activo). */
  .nav-style-sidebar,
  .nav-style-sidebar.nav-over-hero,
  .nav-style-sidebar.nav-over-hero.scrolled {
    position: sticky; top: 0; left: auto; bottom: auto; width: auto; height: auto;
    border-right: none; border-bottom: 1px solid var(--line);
  }
  .nav-style-sidebar .nav-inner { flex-direction: row; align-items: center; justify-content: space-between; min-height: 0; height: 76px; padding: 0 1.5rem; }
  .nav-style-sidebar .nav-right, .nav-style-sidebar .nav-actions { flex-direction: row; width: auto; }
  .nav-style-sidebar .nav-anchors { display: none !important; }
  .nav-style-sidebar .nav-actions .btn { width: auto; }
  .nav.nav-style-sidebar ~ main, .nav.nav-style-sidebar ~ .site-footer { margin-left: 0; }
}

/* glass: fondo translúcido con desenfoque, siempre (no solo transparente sobre el hero) */
.nav-style-glass { background: color-mix(in srgb, var(--bg) 72%, transparent); backdrop-filter: blur(14px) saturate(140%); border-bottom-color: rgba(120,120,120,0.18); }
.nav-over-hero.nav-style-glass { background: rgba(255,255,255,0.1); backdrop-filter: blur(14px) saturate(140%); border-color: rgba(255,255,255,0.22); }
.nav-over-hero.nav-style-glass .nav-brand, .nav-over-hero.nav-style-glass .nav-anchors a { color: #fff; }
.nav-over-hero.scrolled.nav-style-glass { background: color-mix(in srgb, var(--bg) 78%, transparent); border-color: var(--line); }
.nav-over-hero.scrolled.nav-style-glass .nav-brand, .nav-over-hero.scrolled.nav-style-glass .nav-anchors a { color: var(--ink); }

/* underline: las anclas dibujan una línea animada por debajo al pasar el cursor */
.nav-style-underline .nav-anchors a { position: relative; padding-bottom: 0.35rem; }
.nav-style-underline .nav-anchors a::after {
  content: ''; position: absolute; left: 0; right: 100%; bottom: 0; height: 2px; background: var(--accent);
  transition: right 0.25s ease;
}
.nav-style-underline .nav-anchors a:hover::after { right: 0; }

/* shrink: la cabecera se encoge un poco al hacer scroll, en cualquier página (no solo con hero) */
.nav-style-shrink .nav-inner { transition: min-height 0.25s ease; }
.nav-style-shrink.scrolled .nav-inner { min-height: 58px; }
.nav-style-shrink.scrolled .nav-brand { font-size: 1.02rem; transition: font-size 0.25s ease; }

/* editorial: aire y tipografía de revista — marca en cursiva, anclas muy espaciadas */
.nav-style-editorial .nav-inner { padding: 0 2.6rem; }
.nav-style-editorial .nav-brand { font-size: 1.5rem; font-style: italic; }
.nav-style-editorial .nav-anchors { gap: 2.3rem; }
.nav-style-editorial .nav-anchors a { letter-spacing: 0.2em; }

/* ---------- Hero ---------- */
.hero {
  position: relative;
  min-height: 92vh;
  display: flex; align-items: flex-end;
  background-color: var(--dark);
  background-size: cover; background-position: center;
  color: #fff;
  margin-top: -76px;
}
.hero::before {
  content: ''; position: absolute; inset: 0;
  background: linear-gradient(180deg, rgba(10,14,20,0.35) 0%, rgba(10,14,20,0.25) 45%, rgba(8,11,17,0.75) 100%);
}
.hero-inner { position: relative; z-index: 2; max-width: 1200px; margin: 0 auto; padding: 8rem 1.5rem 7rem; width: 100%; }
.hero h1 { color: #fff; font-size: clamp(2.4rem, 6vw, 4.6rem); max-width: 16ch; margin: 1.1rem 0 0; text-shadow: 0 2px 30px rgba(0,0,0,0.3); }
.hero-tagline { font-size: clamp(1.05rem, 1.6vw, 1.3rem); color: rgba(255,255,255,0.9); margin: 1.2rem 0 0; max-width: 52ch; font-family: var(--sans); font-weight: 300; }
.hero .btn { margin-top: 2rem; }

/* ---------- Estilo de hero seleccionable por sitio (site.hero_style) ----------
   "image-full" (arriba) es el defecto. Clase en <body> — .hero aparece en varias plantillas
   (home, getting-there, contact, room), igual criterio que button_style/heading_style. */
body.hero-style-centered .hero { align-items: center; }
body.hero-style-centered .hero::before { background: rgba(10,14,20,0.55); }
body.hero-style-centered .hero-inner { text-align: center; padding-top: 6rem; padding-bottom: 6rem; }
body.hero-style-centered .hero h1,
body.hero-style-centered .hero-tagline { margin-left: auto; margin-right: auto; }
body.hero-style-centered .hero-back { text-align: center; }

body.hero-style-compact .hero { min-height: 62vh; }
body.hero-style-compact .hero-inner { padding-top: 5rem; padding-bottom: 3.5rem; }
body.hero-style-compact .hero h1 { font-size: clamp(1.9rem, 4.4vw, 3.1rem); }
/* El cuadro de reserva se superpone al hero con un margen negativo (ver availability-box más
   abajo); con un hero ya más bajo ese solape se nota demasiado y puede llegar a rozar el menú
   superior, así que aquí se reduce sin importar qué booking_box_style esté activo (selector con
   más especificidad que .booking-style-X .availability-box). */
body.hero-style-compact .availability-box { margin-top: -20px; }
.badge-rating { background: rgba(255,255,255,0.12); }

/* ---------- Availability box (superpuesta al hero) ---------- */
.availability-box { position: relative; z-index: 5; max-width: 1200px; margin: -50px auto 0; padding: 0 1.5rem; }
.availability-form {
  background: var(--bg); border: 1px solid var(--line); box-shadow: var(--shadow);
  padding: 1.6rem 1.8rem; display: grid; grid-template-columns: repeat(3, minmax(0, 1fr)) auto; gap: 1.5rem; align-items: end;
}
.availability-form label { display: flex; flex-direction: column; font-size: 0.68rem; letter-spacing: 0.16em; text-transform: uppercase; color: var(--mut); gap: 0.5rem; }
.availability-form input {
  width: 100%; padding: 0.5rem 0; border: none; border-bottom: 1px solid var(--line); background: transparent;
  font-size: 1rem; color: var(--ink); font-family: var(--sans);
}
.availability-form input:focus { border-color: var(--accent); outline: none; }
.availability-form button { white-space: nowrap; }
@media (max-width: 760px) { .availability-form { grid-template-columns: minmax(0, 1fr) minmax(0, 1fr); } .availability-form button { white-space: normal; grid-column: 1 / -1; } }

/* ---------- Estilo del cuadro de reserva seleccionable por sitio (site.booking_box_style) ----------
   "banner" (arriba) es el defecto. Clase en la propia <section class="availability-box">. */
.booking-style-compact-bar .availability-box { margin-top: -30px; }
.booking-style-compact-bar .availability-form { padding: 0.9rem 1.6rem; gap: 1.1rem; box-shadow: none; border: 1px solid var(--line); }
.booking-style-compact-bar .availability-form label { font-size: 0.6rem; gap: 0.3rem; }
.booking-style-compact-bar .availability-form input { padding: 0.3rem 0; font-size: 0.9rem; }

.booking-style-floating-card .availability-box { max-width: 900px; margin-top: -70px; }
.booking-style-floating-card .availability-form {
  padding: 2.2rem 2.4rem; border: none; border-top: 3px solid var(--accent);
  box-shadow: 0 30px 70px -25px rgba(0,0,0,0.45);
}

/* ---------- Esquinas del cuadro de reserva (site.booking_box_radius) ---------- */
.booking-radius-rounded .availability-form { border-radius: 14px; overflow: hidden; }

/* ---------- Posición del botón (site.booking_box_button_position) ---------- */
.booking-btnpos-start .availability-form button { order: -1; }
.booking-btnpos-bottom .availability-form { grid-template-columns: repeat(3, minmax(0, 1fr)); }
.booking-btnpos-bottom .availability-form button { grid-column: 1 / -1; }

.section { max-width: 1200px; margin: 0 auto; padding: 6rem 1.5rem; }
.section h2 { font-size: clamp(1.7rem, 3.4vw, 2.6rem); max-width: 20ch; }

/* Welcome + stats panel (a la derecha, en columna) */
.welcome-grid { display: grid; gap: 4rem; grid-template-columns: 1.3fr 1fr; align-items: start; }
.welcome-grid.single { grid-template-columns: 1fr; }
@media (max-width: 860px) { .welcome-grid { grid-template-columns: 1fr; gap: 2.5rem; } }
.welcome-text p { font-size: 1.15rem; line-height: 1.85; color: var(--mut); font-weight: 300; }
.welcome-text p + p { margin-top: 1.2rem; }
.stats-panel { background: var(--panel); border: 1px solid var(--line); padding: 0.3rem 1.7rem; }
.stats-panel .stat { padding: 1.3rem 0; border-top: 1px solid var(--line); }
.stats-panel .stat:first-child { border-top: none; }
.stats-panel .stat strong { display: block; font-family: var(--serif); font-size: 1.9rem; font-weight: 600; line-height: 1; }
.stats-panel .stat span { display: block; margin-top: 0.5rem; color: var(--accent); font-size: 0.68rem; letter-spacing: 0.14em; text-transform: uppercase; }

/* ---------- Posición del panel (site.welcome_panel_position) — clase en .welcome-grid ---------- */
.welcome-pos-left .welcome-text { order: 2; }
.welcome-pos-left .stats-panel { order: 1; }

/* ---------- Estilo del panel (site.welcome_panel_style) — clase en la propia .stats-panel ---------- */
.welcome-panel-style-big-numbers { background: transparent; border: none; padding: 0; text-align: center; }
.welcome-panel-style-big-numbers .stat { border-top: none; padding: 0.6rem 0; }
.welcome-panel-style-big-numbers .stat strong { font-size: 3rem; }

.welcome-panel-style-minimal-inline {
  background: transparent; border: none; padding: 0; display: flex; flex-wrap: wrap;
  gap: 0.5rem 1.8rem; align-items: baseline;
}
.welcome-panel-style-minimal-inline .stat { border-top: none; padding: 0; display: flex; gap: 0.4rem; align-items: baseline; }
.welcome-panel-style-minimal-inline .stat strong { font-size: 1.1rem; }
.welcome-panel-style-minimal-inline .stat span { margin-top: 0; font-size: 0.62rem; }

/* ---------- Foto de relleno junto al panel de stats (site.welcome_image_style) ----------
   "none" (defecto) no imprime nada. Rellena el hueco que deja un panel de stats corto junto a
   un texto de bienvenida más largo. Clase en el propio <div class="welcome-image">. */
.welcome-image { margin-top: 1.4rem; }
.welcome-image img { width: 100%; aspect-ratio: 4 / 3; object-fit: cover; display: block; }

.welcome-image-style-framed { padding: 0.6rem; border: 1px solid var(--line); background: var(--bg); }

.welcome-image-style-blurred img { filter: blur(1.5px) saturate(1.05); }

/* Verdict */
.verdict-lists { display: grid; gap: 1.6rem; grid-template-columns: 1fr; margin-top: 2.8rem; }
@media (min-width: 700px) { .verdict-lists { grid-template-columns: 1fr 1fr; } }
.verdict-lists > div { padding: 2rem; border: 1px solid var(--line); background: var(--bg); }
.verdict-lists h3 { font-size: 1.4rem; margin-bottom: 1.1rem; }
.verdict-lists ul { list-style: none; margin: 0; padding: 0; display: flex; flex-direction: column; gap: 0.8rem; }
.verdict-lists li { padding-left: 1.4rem; position: relative; color: var(--ink); }
.verdict-lists li::before { content: "—"; position: absolute; left: 0; color: var(--accent); }

/* ---------- Estilo del bloque verdict seleccionable por sitio (site.verdict_style) ----------
   "columns" (arriba) es el defecto. Clase en la propia <section>, igual que footer_style. */
.verdict-style-cards .verdict-lists > div { border: none; border-radius: 10px; border-left: 4px solid; }
.verdict-style-cards .verdict-good { background: color-mix(in srgb, #2f8f4e 16%, var(--bg)); border-left-color: #2f8f4e; }
.verdict-style-cards .verdict-bad { background: color-mix(in srgb, #b23b3b 16%, var(--bg)); border-left-color: #b23b3b; }

.verdict-style-checklist .verdict-lists li { padding-left: 1.7rem; }
.verdict-style-checklist .verdict-good li::before { content: "✓"; color: #2f8f4e; font-weight: 700; }
.verdict-style-checklist .verdict-bad li::before { content: "✕"; color: #b23b3b; font-weight: 700; }

/* Highlights */
.highlights { display: grid; gap: 1.6rem; grid-template-columns: 1fr; margin-top: 2.8rem; }
@media (min-width: 700px) { .highlights { grid-template-columns: 1fr 1fr; } }
.highlight { padding: 1.8rem; border: 1px solid var(--line); background: var(--panel); }
.highlight h2 { font-size: 1.35rem; margin-bottom: 0.7rem; }
.highlight p { color: var(--mut); font-weight: 300; }
.highlight-num { display: none; }

/* ---------- Estilo de highlights seleccionable por sitio (site.highlights_style) ----------
   "cards" (arriba) es el defecto. Clase en la propia <section class="highlights">. */
.highlights-style-numbered .highlight {
  border: none; border-top: 3px solid var(--accent); background: transparent; padding: 1.4rem 0 0;
}
.highlights-style-numbered .highlight-num {
  display: block; font-family: var(--serif); font-size: 2.2rem; font-weight: 600; color: var(--accent); margin-bottom: 0.5rem;
}

.highlights-style-minimal .highlight { border: none; background: transparent; padding: 0; }
.highlights-style-minimal .highlight h2 {
  font-size: 1rem; text-transform: uppercase; letter-spacing: 0.08em; font-family: var(--sans); font-weight: 700;
}

/* Rooms */
.rooms-grid { display: grid; gap: 2rem; grid-template-columns: 1fr; margin-top: 2.8rem; }
@media (min-width: 640px) { .rooms-grid { grid-template-columns: 1fr 1fr; } }
@media (min-width: 1000px) { .rooms-grid { grid-template-columns: repeat(3, 1fr); } }
.room-card { display: block; border: 1px solid var(--line); overflow: hidden; color: inherit; background: var(--bg); transition: box-shadow 0.2s, border-color 0.2s; }
.room-card:hover { box-shadow: var(--shadow); border-color: var(--accent); text-decoration: none; }
.room-card img { height: 220px; object-fit: cover; width: 100%; transition: transform 0.7s ease; }
.room-card:hover img { transform: scale(1.04); }
.room-card-body { padding: 1.6rem; }
.room-card-body h3 { font-size: 1.3rem; margin: 0 0 0.4rem; }
.room-meta { color: var(--mut); font-size: 0.82rem; }
.room-amenities { list-style: none; padding: 0; margin: 0.9rem 0; display: flex; flex-wrap: wrap; gap: 0.4rem; }
.room-amenities li { font-size: 0.65rem; letter-spacing: 0.05em; text-transform: uppercase; color: var(--mut); border: 1px solid var(--line); padding: 0.25rem 0.55rem; }
.room-price { font-family: var(--serif); font-size: 1.3rem; font-weight: 600; margin-top: 0.9rem; padding-top: 0.9rem; border-top: 1px solid var(--line); }

/* ---------- Estilo de tarjeta de habitación seleccionable por sitio (site.room_card_style) ----------
   "overlay-top" (arriba) es el defecto. Clase en la propia <section id="rooms">. */
.room-style-horizontal .room-card { display: flex; align-items: stretch; }
.room-style-horizontal .room-card img { width: 42%; height: auto; flex-shrink: 0; }
.room-style-horizontal .room-card-body { flex: 1; }
@media (max-width: 700px) {
  .room-style-horizontal .room-card { flex-direction: column; }
  .room-style-horizontal .room-card img { width: 100%; height: 200px; }
}

.room-style-minimal .room-card img { display: none; }
.room-style-minimal .room-card { border-width: 2px; }
.room-style-minimal .room-card-body { padding: 2.2rem; text-align: center; }
.room-style-minimal .room-card-body h3 { font-size: 1.5rem; }
.room-style-minimal .room-amenities { justify-content: center; }

/* Gallery */
.gallery-grid { display: grid; gap: 0.7rem; grid-template-columns: repeat(4, 1fr); margin-top: 2.5rem; }
.gallery-thumb { position: relative; overflow: hidden; aspect-ratio: 1/1; cursor: zoom-in; }
.gallery-thumb:first-child { grid-column: span 2; grid-row: span 2; }
.gallery-thumb img { width: 100%; height: 100%; object-fit: cover; border-radius: 0; transition: transform 0.7s ease; }
.gallery-thumb:hover img { transform: scale(1.05); }
@media (max-width: 860px) { .gallery-grid { grid-template-columns: repeat(3, 1fr); } }
@media (max-width: 560px) { .gallery-grid { grid-template-columns: repeat(2, 1fr); } .gallery-thumb:first-child { grid-column: span 2; grid-row: span 1; } }

/* ---------- Estilo de galería seleccionable por sitio (site.gallery_style) ----------
   "grid" (arriba) es el defecto. Clase en la propia <section id="gallery">. */
/* Mismo patrón que el "grid" por defecto (altura de fila implícita, marcada por el propio
   aspect-ratio de cada foto) — nada de grid-auto-rows en píxeles fijos combinado con
   aspect-ratio: esa mezcla es frágil en CSS Grid y puede desbordar fotos fuera del grid. */
.gallery-style-featured .gallery-grid { grid-template-columns: repeat(4, 1fr); }
.gallery-style-featured .gallery-thumb:first-child { grid-column: span 2; grid-row: span 2; }
@media (max-width: 860px) { .gallery-style-featured .gallery-grid { grid-template-columns: repeat(3, 1fr); } }
@media (max-width: 560px) {
  .gallery-style-featured .gallery-grid { grid-template-columns: repeat(2, 1fr); }
  .gallery-style-featured .gallery-thumb:first-child { grid-column: span 2; grid-row: span 1; }
}

.gallery-style-strip .gallery-grid {
  display: flex; overflow-x: auto; grid-template-columns: none; scroll-snap-type: x mandatory; padding-bottom: 0.6rem;
}
.gallery-style-strip .gallery-thumb {
  flex: 0 0 340px; aspect-ratio: 4/3; scroll-snap-align: start; grid-column: unset; grid-row: unset;
}

.gallery-strip-wrap { position: relative; }
.gallery-strip-nav { display: none; }
.gallery-style-strip .gallery-strip-nav {
  display: flex; align-items: center; justify-content: center;
  position: absolute; top: 50%; transform: translateY(-50%); z-index: 2;
  width: 3rem; height: 3rem; background: var(--bg); border: 1px solid var(--line);
  font-size: 1.6rem; line-height: 1; cursor: pointer; color: var(--ink);
  transition: background 0.2s, border-color 0.2s, color 0.2s;
}
.gallery-style-strip .gallery-strip-nav:hover { background: var(--accent); border-color: var(--accent); color: #fff; }
.gallery-style-strip .gallery-strip-prev { left: -1.4rem; }
.gallery-style-strip .gallery-strip-next { right: -1.4rem; }
@media (max-width: 860px) {
  .gallery-style-strip .gallery-strip-prev { left: 0; }
  .gallery-style-strip .gallery-strip-next { right: 0; }
}

/* Lightbox — thumbnail -> imagen grande en la misma página, sin JS (:target) */
.lightbox {
  display: none;
  position: fixed; inset: 0; z-index: 200;
  align-items: center; justify-content: center;
  background: rgba(12, 14, 20, 0.94);
  padding: 2rem;
  cursor: zoom-out;
}
.lightbox:target { display: flex; }
.lightbox img { max-width: 100%; max-height: 100%; box-shadow: 0 20px 60px rgba(0,0,0,0.5); }

/* Getting there — banda oscura, a todo el ancho */
.getting-there-band { background: var(--dark); color: var(--deep-fg); }
.getting-there-grid { display: grid; grid-template-columns: 5fr 7fr; gap: 3.5rem; align-items: center; }
@media (max-width: 860px) { .getting-there-grid { grid-template-columns: 1fr; gap: 2rem; } }
.gt-stat .transfer-badge {
  display: inline-flex; align-items: center; border: 1px solid rgba(255,255,255,0.25);
  padding: 0.45rem 0.9rem; font-size: 0.68rem; letter-spacing: 0.14em; text-transform: uppercase;
}
/* Icono opcional junto a la distancia (site.getting_there_icon) */
.gt-icon { color: var(--gold); margin-bottom: 1rem; }
.gt-icon svg { display: block; }
.transfer-km { font-family: var(--serif); font-size: clamp(2.6rem, 5vw, 4rem); font-weight: 600; line-height: 1; margin: 1.1rem 0 0.3rem; }
.transfer-sub { font-size: 0.68rem; letter-spacing: 0.14em; text-transform: uppercase; color: rgba(255,255,255,0.55); }
.gt-text h2 { color: #fff; font-size: clamp(1.7rem, 3vw, 2.3rem); margin-top: 0.6rem; }
.gt-text p { margin: 1.1rem 0 0; color: rgba(255,255,255,0.8); font-weight: 300; line-height: 1.85; max-width: 60ch; }
.gt-more a { color: var(--gold); font-size: 0.9rem; }

/* ---------- Transición de las secciones "banda" (site.section_divider_style) ----------
   "straight" (arriba) es el defecto. Clase en <body> — .getting-there-band/.section-band
   aparecen en varias plantillas (home, getting-there, location-map), mismo criterio que
   hero_style. clip-path deja ver el fondo de la página en los huecos recortados; "wave" es
   en realidad un zigzag de varios puntos (clip-path no soporta curvas suaves de forma robusta
   en cualquier ancho de viewport, a diferencia de un SVG con viewBox). */
body.divider-style-diagonal .getting-there-band,
body.divider-style-diagonal .section-band {
  clip-path: polygon(0 4%, 100% 0%, 100% 96%, 0% 100%);
}
body.divider-style-wave .getting-there-band,
body.divider-style-wave .section-band {
  clip-path: polygon(
    0% 3%, 12.5% 0%, 25% 3%, 37.5% 0%, 50% 3%, 62.5% 0%, 75% 3%, 87.5% 0%, 100% 3%,
    100% 97%, 87.5% 100%, 75% 97%, 62.5% 100%, 50% 97%, 37.5% 100%, 25% 97%, 12.5% 100%, 0% 97%
  );
}

/* El hero solo recorta el borde INFERIOR (donde empalma con la siguiente sección) — el
   superior queda recto a propósito, porque el nav se superpone justo ahí. */
body.divider-style-diagonal .hero { clip-path: polygon(0 0, 100% 0, 100% 96%, 0% 100%); }
body.divider-style-wave .hero {
  clip-path: polygon(
    0 0, 100% 0,
    100% 97%, 87.5% 100%, 75% 97%, 62.5% 100%, 50% 97%, 37.5% 100%, 25% 97%, 12.5% 100%, 0% 97%
  );
}

/* Location / mapa */
.section-band { border-top: 1px solid var(--line); border-bottom: 1px solid var(--line); }
.addr { color: var(--mut); }
.get-dir { margin: 0.4rem 0 1.6rem; }
.loc-grid { display: grid; grid-template-columns: 7fr 5fr; gap: 2.5rem; }
.loc-grid.solo { grid-template-columns: 1fr; }
@media (max-width: 860px) { .loc-grid { grid-template-columns: 1fr; } }
.map-embed { width: 100%; height: 420px; border: 1px solid var(--line); filter: saturate(0.9); }
.loc-nearby h3 { font-size: 1.1rem; margin-bottom: 0.6rem; }
.nearby-poi { list-style: none; margin: 0 0 1.2rem; padding: 0; }
.nearby-poi li { display: flex; justify-content: space-between; gap: 0.8rem; padding: 0.7rem 0; border-bottom: 1px solid var(--line); font-size: 0.88rem; }
.nearby-poi .poi-type, .nearby-poi .poi-dist { color: var(--mut); white-space: nowrap; }

/* ---------- Estilo del mapa/bloque de ubicación seleccionable por sitio (site.map_style) ----------
   "side-by-side" (arriba) es el defecto. Clase en la propia <section id="location">. */
.map-style-framed .map-embed { border: 3px solid var(--accent); border-radius: 12px; box-shadow: var(--shadow); filter: saturate(1); }
.map-style-framed .loc-nearby h3 { color: var(--accent); }

.map-style-stacked .loc-grid { grid-template-columns: 1fr; }
.map-style-stacked .map-embed { height: 340px; }
.map-style-stacked .loc-nearby { margin-top: 0.5rem; }
.map-style-stacked .nearby-poi { display: grid; grid-template-columns: repeat(auto-fill, minmax(220px, 1fr)); gap: 0.9rem; }
.map-style-stacked .nearby-poi li {
  flex-direction: column; align-items: flex-start; gap: 0.3rem;
  border: 1px solid var(--line); padding: 1.1rem;
}

/* Guest reviews */
.guests-grid { display: grid; grid-template-columns: 5fr 7fr; gap: 3.5rem; align-items: start; margin-top: 2rem; }
@media (max-width: 860px) { .guests-grid { grid-template-columns: 1fr; gap: 1.5rem; } }
.guests-score { font-family: var(--serif); font-size: 3rem; font-weight: 600; line-height: 1; margin-top: 0.5rem; }
.guests-sub { color: var(--mut); font-size: 0.85rem; margin-top: 0.4rem; }
.guests-summary { color: var(--mut); font-weight: 300; line-height: 1.85; font-size: 1.05rem; margin: 0; }

/* ---------- Estilo de reviews seleccionable por sitio (site.reviews_style) ----------
   "split" (arriba) es el defecto. Clase en la propia <section class="reviews">. */
.reviews-style-centered-quote .guests-grid {
  grid-template-columns: 1fr; max-width: 760px; margin-left: auto; margin-right: auto; text-align: center;
}
.reviews-style-centered-quote .guests-summary {
  font-family: var(--serif); font-size: 1.5rem; font-style: italic; line-height: 1.6; color: var(--ink);
}
.reviews-style-centered-quote .guests-summary::before { content: '\201C'; }
.reviews-style-centered-quote .guests-summary::after { content: '\201D'; }
.reviews-style-centered-quote .guests-score { margin-top: 1.6rem; }

.reviews-style-card .guests-grid {
  border: 1px solid var(--line); border-top: 3px solid var(--accent);
  background: color-mix(in srgb, var(--accent) 6%, var(--bg)); padding: 2.6rem;
}

/* Amenities */
.amenity-groups { display: grid; gap: 2rem; grid-template-columns: 1fr; margin-top: 2.8rem; }
@media (min-width: 700px) { .amenity-groups { grid-template-columns: repeat(2, 1fr); } }
.amenity-group h3 { font-size: 1.1rem; padding-bottom: 0.8rem; border-bottom: 1px solid var(--line); }
.amenity-group ul { list-style: none; padding: 0; margin: 1rem 0 0; display: flex; flex-direction: column; gap: 0.6rem; }
.amenity-group li { padding-left: 1.3rem; position: relative; color: var(--ink); font-size: 0.92rem; }
.amenity-group li::before { content: "—"; position: absolute; left: 0; color: var(--accent); }

/* ---------- Estilo de amenities seleccionable por sitio (site.amenities_style) ----------
   "list" (arriba, <div>+<h3>) es el defecto. Clase en la propia <section>. */
.amenities-style-accordion .amenity-group {
  border-bottom: 1px solid var(--line); padding: 1.1rem 0;
}
.amenities-style-accordion .amenity-group:first-child { border-top: 1px solid var(--line); }
.amenities-style-accordion .amenity-group summary {
  cursor: pointer; font-family: var(--serif); font-size: 1.2rem; list-style: none;
  display: flex; align-items: center; justify-content: space-between;
}
.amenities-style-accordion .amenity-group summary::-webkit-details-marker { display: none; }
.amenities-style-accordion .amenity-group summary::after { content: '+'; color: var(--accent); font-size: 1.5rem; line-height: 1; }
.amenities-style-accordion .amenity-group[open] summary::after { content: '\2212'; }
.amenities-style-accordion .amenity-group ul { margin-top: 1.1rem; }

.amenity-chips {
  display: flex; flex-wrap: wrap; gap: 0.7rem; list-style: none; margin: 2.6rem 0 0; padding: 0;
}
.amenity-chips li {
  border: 1px solid var(--line); padding: 0.5rem 1.2rem; border-radius: 999px; font-size: 0.85rem;
}

/* Good to know */
.gtk-grid { display: grid; gap: 0 3rem; grid-template-columns: 1fr; margin-top: 2rem; }
@media (min-width: 700px) { .gtk-grid { grid-template-columns: 1fr 1fr; } }
.gtk-grid > div { display: flex; align-items: baseline; justify-content: space-between; gap: 1rem; padding: 1rem 0; border-bottom: 1px solid var(--line); }
.gtk-grid h3 { font-size: 0.68rem; letter-spacing: 0.14em; text-transform: uppercase; color: var(--mut); font-weight: 600; }
.gtk-grid p { margin: 0; text-align: right; }
.gtk-icon { display: none; }

/* ---------- Estilo de good-to-know seleccionable por sitio (site.good_to_know_style) ----------
   "rows" (arriba) es el defecto. Clase en la propia <section class="good-to-know">. */
.good-to-know-style-icon-grid .gtk-grid > div {
  flex-direction: column; align-items: flex-start; border: 1px solid var(--line); border-bottom: 1px solid var(--line); padding: 1.7rem;
}
.good-to-know-style-icon-grid .gtk-grid p { text-align: left; margin-top: 0.5rem; color: var(--mut); }
.good-to-know-style-icon-grid .gtk-icon { display: block; color: var(--accent); margin-bottom: 0.9rem; }

.good-to-know-style-cards .gtk-grid > div {
  flex-direction: column; align-items: flex-start; border: 1px solid var(--line); background: var(--panel); padding: 1.7rem;
}
.good-to-know-style-cards .gtk-grid p { text-align: left; margin-top: 0.5rem; }

/* FAQ */
.faqs-items { margin-top: 1.8rem; }
.faqs details { border-bottom: 1px solid var(--line); padding: 0.4rem 0; }
.faqs summary { cursor: pointer; list-style: none; padding: 1.1rem 0; font-family: var(--serif); font-size: 1.15rem; font-weight: 600; display: flex; justify-content: space-between; align-items: center; gap: 1rem; }
.faqs summary::-webkit-details-marker { display: none; }
.faqs summary::after { content: "+"; color: var(--accent); font-size: 1.4rem; font-weight: 400; transition: transform 0.2s; }
.faqs details[open] summary::after { transform: rotate(45deg); }
.faqs details p { margin: 0 0 1.4rem; color: var(--mut); font-weight: 300; }

/* ---------- Estilo de FAQs seleccionable por sitio (site.faqs_style) ----------
   "accordion" (arriba) es el defecto. Clase en la propia <section id="faqs">. */
.faqs-style-two-column .faqs-items { column-count: 2; column-gap: 3rem; }
.faqs-style-two-column .faqs-items details { break-inside: avoid; }
@media (max-width: 760px) { .faqs-style-two-column .faqs-items { column-count: 1; } }

.faqs-style-plain-list .faq-plain { border-bottom: 1px solid var(--line); padding: 1.4rem 0; }
.faqs-style-plain-list .faq-plain h3 { font-family: var(--serif); font-size: 1.15rem; font-weight: 600; margin: 0 0 0.6rem; }
.faqs-style-plain-list .faq-plain p { margin: 0; color: var(--mut); font-weight: 300; }

/* Booking banner */
.booking-banner { background: var(--dark); background-size: cover; background-position: center; color: var(--deep-fg); text-align: center; padding: 5rem 1.5rem; max-width: none; }
.booking-banner h2 { color: #fff; margin-bottom: 1.6rem; }

/* Contact block */
.contact-block p { color: var(--mut); }
.contact-block .btn { margin-top: 1rem; }
.contact-grid { display: grid; gap: 2.5rem; grid-template-columns: repeat(3, 1fr); margin-top: 2.8rem; align-items: start; }
@media (max-width: 760px) { .contact-grid { grid-template-columns: 1fr; gap: 1.8rem; } }
.contact-col h3 { font-size: 0.68rem; letter-spacing: 0.14em; text-transform: uppercase; color: var(--accent); font-weight: 600; margin: 0 0 0.9rem; }
.contact-col p { margin: 0; }
.contact-col .btn { margin-top: 0; }

/* ---------- Estilo de contacto seleccionable por sitio (site.contact_style) ----------
   "columns" (arriba) es el defecto. Clase en la propia <section id="contact">. */
.contact-style-cards .contact-col { border: 1px solid var(--line); background: var(--panel); padding: 1.8rem; }

.contact-style-centered .contact-grid {
  grid-template-columns: 1fr; max-width: 440px; margin-left: auto; margin-right: auto;
  text-align: center; gap: 2rem;
}
.contact-style-centered .contact-col { display: flex; flex-direction: column; align-items: center; }
.contact-phone a { font-family: var(--serif); font-size: 1.6rem; font-weight: 600; color: var(--ink); }
.contact-phone a:hover { color: var(--accent2); }
.contact-email { margin-top: 2.2rem; }

/* Room page */
.hero-back { margin-top: 1.6rem; }
.hero-back a { color: rgba(255,255,255,0.8); font-size: 0.85rem; }
.hero-back a:hover { color: #fff; }
.room-about { max-width: 760px; }
.room-about .lead { font-size: 1.15rem; color: var(--mut); font-weight: 300; line-height: 1.85; margin-top: 0.8rem; }
.room-amenities-full { list-style: none; padding: 0; margin: 1.5rem 0; display: flex; flex-wrap: wrap; gap: 0.5rem; }
.room-amenities-full li { font-size: 0.7rem; letter-spacing: 0.05em; text-transform: uppercase; color: var(--mut); border: 1px solid var(--line); padding: 0.35rem 0.7rem; }
.room-price-full { font-family: var(--serif); font-size: 1.6rem; font-weight: 600; margin: 1.5rem 0; }
.room-back-all { margin-top: 2rem; }
.room-cta-banner { background-size: cover; background-position: center; }

/* ---------- Estilo de "sobre esta habitación" seleccionable por sitio (site.room_about_style) ----------
   "standard" (arriba, sin clase extra) es el defecto. */
.room-about-style-sidebar { max-width: none; }
.room-about-grid { display: grid; gap: 3.5rem; grid-template-columns: 1.4fr 1fr; align-items: start; }
@media (max-width: 860px) { .room-about-grid { grid-template-columns: 1fr; gap: 2rem; } }
.room-about-sidebar { background: var(--panel); border: 1px solid var(--line); padding: 1.8rem; }
.room-about-sidebar .room-amenities-full { margin-top: 0; }
.room-about-sidebar .btn { margin-top: 1.2rem; width: 100%; }

/* Policies / getting-there */
.policy-list { margin-top: 1.4rem; }
.policy-item h3 { font-family: var(--serif); font-weight: 600; font-size: 1.1rem; margin: 1.4rem 0 0; }
.policy-item p { margin: 0.3rem 0 0; color: var(--mut); }
.policy-item:first-child h3 { margin-top: 0; }

/* ---------- Estilo de políticas seleccionable por sitio (site.policies_style) ----------
   "list" (arriba) es el defecto. Clase en el propio <div class="policy-list">. */
.policies-style-rows { display: grid; grid-template-columns: 1fr 2fr; gap: 0; }
.policies-style-rows .policy-item { display: contents; }
.policies-style-rows .policy-item h3 { margin: 0; padding: 1rem 0; border-bottom: 1px solid var(--line); }
.policies-style-rows .policy-item p { margin: 0; padding: 1rem 0; border-bottom: 1px solid var(--line); }

.policies-style-cards { display: grid; gap: 1.2rem; grid-template-columns: 1fr; margin-top: 2rem; }
@media (min-width: 700px) { .policies-style-cards { grid-template-columns: 1fr 1fr; } }
.policies-style-cards .policy-item { border: 1px solid var(--line); background: var(--panel); padding: 1.5rem; }
.policies-style-cards .policy-item h3 { margin: 0 0 0.5rem; }
.getting-there-meta { display: grid; gap: 1.2rem; grid-template-columns: 1fr; margin: 2rem 0; }
@media (min-width: 700px) { .getting-there-meta { grid-template-columns: repeat(3, 1fr); } }
.getting-there-meta > div { padding: 1.2rem 0; border-top: 1px solid var(--line); }
.getting-there-meta h3 { font-size: 0.68rem; letter-spacing: 0.14em; text-transform: uppercase; color: var(--mut); margin-bottom: 0.5rem; }

/* Nearby */
.nearby-grid { display: grid; gap: 1.8rem; grid-template-columns: 1fr; margin-top: 2rem; }
@media (min-width: 700px) { .nearby-grid { grid-template-columns: repeat(3, 1fr); } }
.nearby-card { border: 1px solid var(--line); overflow: hidden; }
.nearby-card img { height: 170px; object-fit: cover; }
.nearby-card > *:not(img) { padding-left: 1.2rem; padding-right: 1.2rem; }
.nearby-card h3 { padding-top: 1rem; font-size: 1.1rem; }
.nearby-meta { color: var(--accent); font-size: 0.7rem; letter-spacing: 0.08em; text-transform: uppercase; }
.nearby-card p:last-child { padding-bottom: 1.2rem; color: var(--mut); }

/* Footer */
.site-footer { background: var(--dark); color: var(--deep-fg); margin-top: 0; }
.footer-inner { max-width: 1200px; margin: 0 auto; padding: 5rem 1.5rem 2.5rem; display: grid; gap: 2.5rem; grid-template-columns: 1.4fr 1fr 1fr auto; align-items: start; }
@media (max-width: 900px) { .footer-inner { grid-template-columns: 1fr 1fr; } }
@media (max-width: 560px) { .footer-inner { grid-template-columns: 1fr; } }
.footer-col h3 { font-size: 0.68rem; letter-spacing: 0.16em; text-transform: uppercase; color: rgba(255,255,255,0.5); margin-bottom: 1rem; font-family: var(--sans); font-weight: 600; }
.footer-col p, .footer-col li { color: rgba(255,255,255,0.72); font-size: 0.92rem; }
.footer-col ul { list-style: none; padding: 0; margin: 0; }
.footer-col li { margin-bottom: 0.5rem; }
.footer-col a { color: rgba(255,255,255,0.72); }
.footer-col a:hover { color: #fff; }
.footer-cta { align-self: center; }
@media (max-width: 900px) { .footer-cta { grid-column: 1 / -1; } }

/* Variantes de footer seleccionables por sitio (site.footer_style) */
.footer-style-compact .footer-col-explore { display: none; }
.footer-style-stacked .footer-inner { grid-template-columns: 1fr; text-align: center; max-width: 640px; }
.footer-style-stacked .footer-cta { grid-column: auto; }

/* wide: columnas a peso igual + separador superior */
.footer-style-wide .footer-inner { grid-template-columns: 1fr 1fr 1fr auto; border-top: 1px solid rgba(255,255,255,0.12); padding-top: 4rem; }
@media (max-width: 900px) { .footer-style-wide .footer-inner { grid-template-columns: 1fr 1fr; } }

/* cta-banner: el botón de reserva pasa a ser una franja destacada arriba del todo */
.footer-style-cta-banner .footer-cta {
  grid-column: 1 / -1; order: -1; align-self: auto; text-align: center;
  padding-bottom: 2.5rem; margin-bottom: 2.5rem; border-bottom: 1px solid rgba(255,255,255,0.15);
}
.footer-style-cta-banner .footer-cta .btn { padding: 1rem 2.2rem; font-size: 0.85rem; }

/* minimal: solo NAP + reserva, sin columnas de enlaces (hoteles muy pequeños / una sola página) */
.footer-style-minimal .footer-col-explore, .footer-style-minimal .footer-col-contact { display: none; }
.footer-style-minimal .footer-inner { grid-template-columns: 1fr auto; align-items: center; padding: 3.5rem 1.5rem; }
@media (max-width: 560px) { .footer-style-minimal .footer-inner { grid-template-columns: 1fr; text-align: center; } .footer-style-minimal .footer-cta { grid-column: auto; } }

/* divider: mismo layout que standard, con línea de acento arriba y títulos en color dorado */
.footer-style-divider .footer-inner { border-top: 2px solid var(--accent); padding-top: 4rem; }
.footer-style-divider .footer-col h3 { color: var(--gold); letter-spacing: 0.2em; }

/* light: footer claro (fondo de página) en vez del oscuro por defecto */
.footer-style-light { background: var(--bg); color: var(--ink); border-top: 1px solid var(--line); }
.footer-style-light .footer-col h3 { color: var(--mut); }
.footer-style-light .footer-col p, .footer-style-light .footer-col li { color: var(--ink); }
.footer-style-light .footer-col a { color: var(--accent2); }
.footer-style-light .footer-col a:hover { color: var(--accent); }

/* inline-links: la columna Explore pasa a una sola fila de enlaces en vez de lista vertical */
.footer-style-inline-links .footer-col-explore ul { display: flex; flex-wrap: wrap; gap: 0.5rem 1.3rem; }
.footer-style-inline-links .footer-col-explore li { margin-bottom: 0; }

/* social-first: la columna de contacto/redes pasa delante de la de navegación (mismo grid, reordenado) */
.footer-style-social-first .footer-col-contact { order: -1; }

/* boxed: el contenido del footer flota como tarjeta redondeada, separada del fondo de la página */
.footer-style-boxed { background: transparent; padding: 0 1.5rem 3rem; }
.footer-style-boxed .footer-inner { background: var(--dark); border-radius: 20px; padding: 3.5rem 2rem; }
@media (max-width: 900px) { .footer-style-boxed { padding: 0 1rem 2rem; } }

/* framed: contenido enmarcado con un borde sutil, look más formal */
.footer-style-framed .footer-inner { border: 1px solid rgba(255,255,255,0.15); border-radius: 4px; padding: 3rem 2.5rem; }

/* centered-brand: el nombre del hotel pasa a título centrado arriba, separado del resto */
.footer-style-centered-brand .footer-inner { grid-template-columns: 1fr 1fr 1fr; }
.footer-style-centered-brand .footer-col:first-child {
  grid-column: 1 / -1; text-align: center; padding-bottom: 2rem; margin-bottom: 1rem;
  border-bottom: 1px solid rgba(255,255,255,0.12);
}
.footer-style-centered-brand .footer-col:first-child h3 {
  font-size: 1.5rem; font-family: var(--serif); font-weight: 600; color: var(--deep-fg);
  text-transform: none; letter-spacing: 0; margin-bottom: 0.6rem;
}
@media (max-width: 900px) { .footer-style-centered-brand .footer-inner { grid-template-columns: 1fr 1fr; } }

/* tinted: fondo de color suave (paleta del tema) en vez del oscuro por defecto */
.footer-style-tinted { background: var(--panel); color: var(--ink); }
.footer-style-tinted .footer-col h3 { color: var(--accent); }
.footer-style-tinted .footer-col p, .footer-style-tinted .footer-col li { color: var(--ink); }
.footer-style-tinted .footer-col a { color: var(--accent2); }
.footer-style-tinted .footer-col a:hover { color: var(--accent); }

/* gradient: degradado del oscuro del tema hacia su acento, en vez de un plano */
.footer-style-gradient { background: linear-gradient(135deg, var(--dark) 0%, var(--accent2) 160%); }

/* minimal-line: una única franja fina con el nombre y el botón de reserva, sin columnas */
.footer-style-minimal-line .footer-col-explore, .footer-style-minimal-line .footer-col-contact { display: none; }
.footer-style-minimal-line .footer-inner { grid-template-columns: auto 1fr auto; align-items: center; padding: 1.7rem 1.5rem; gap: 1rem; }
.footer-style-minimal-line .footer-col:first-child p { display: none; }
.footer-style-minimal-line .footer-col:first-child h3 {
  font-size: 0.85rem; text-transform: none; letter-spacing: 0; margin: 0; color: rgba(255,255,255,0.85);
}
.footer-style-minimal-line .footer-cta .btn { padding: 0.65rem 1.3rem; font-size: 0.7rem; }
@media (max-width: 560px) {
  .footer-style-minimal-line .footer-inner { grid-template-columns: 1fr; text-align: center; }
  .footer-style-minimal-line .footer-cta { grid-column: auto; }
}

/* editorial: mucho más aire y tipografía de revista, a juego con el header editorial */
.footer-style-editorial .footer-inner { padding: 6rem 2.5rem 3rem; gap: 3.5rem; }
.footer-style-editorial .footer-col h3 {
  font-family: var(--serif); font-size: 1rem; font-style: italic; font-weight: 500;
  text-transform: none; letter-spacing: 0.02em; color: var(--deep-fg);
}

/* Sticky bar (mobile) — fondo blanco roto fijo (no depende del theme), así que el texto no puede
   heredar var(--ink)/var(--mut): en "night" son colores claros pensados para su --bg oscuro y
   quedarían invisibles aquí. Se fija en var(--dark), siempre oscuro en los 12 themes. */
.sticky-bar {
  position: fixed; bottom: 0; left: 0; right: 0; z-index: 60;
  background: rgba(253, 252, 250, 0.92); backdrop-filter: blur(12px);
  border-top: 1px solid var(--line); color: var(--dark);
  padding: 0.9rem 1.2rem; display: flex; align-items: center; justify-content: space-between; gap: 1rem;
}
.sticky-bar-price { font-family: var(--serif); font-weight: 600; }
.sticky-bar-night { font-weight: 400; color: var(--dark); opacity: 0.65; font-size: 0.8rem; font-family: var(--sans); }
@media (min-width: 900px) { .sticky-bar { display: none; } }
body { padding-bottom: 4.8rem; }
@media (min-width: 900px) { body { padding-bottom: 0; } }

/* Contact / forms (Prompt 4) */
.contact-page { max-width: 820px; }
.contact-page .lead { font-size: 1.1rem; color: var(--mut); font-weight: 300; margin-top: 0.8rem; }
.contact-page .btn { margin-top: 1rem; }
.contact-details { margin: 1.8rem 0; }
.contact-details p { margin: 0.6rem 0; color: var(--mut); }
.contact-details strong { color: var(--ink); }

/* ---------- Estilo de detalles de contacto seleccionable por sitio (site.contact_details_style) ----------
   "list" (arriba) es el defecto. Clase en el propio <div class="contact-details">. */
.contact-details-style-cards { display: flex; flex-direction: column; gap: 0.7rem; }
.contact-details-style-cards p { border: 1px solid var(--line); padding: 0.9rem 1.3rem; margin: 0; }
.page-back { margin-top: 1.8rem; }
.page-back a { color: var(--mut); font-size: 0.85rem; }
.page-back a:hover { color: var(--accent2); }
.form-page { max-width: 680px; }
.form-page .lead { font-size: 1.1rem; color: var(--mut); font-weight: 300; margin-top: 0.8rem; }
.form-page form { display: grid; gap: 1.4rem; margin-top: 1.6rem; }
.form-page label { display: block; font-size: 0.7rem; letter-spacing: 0.1em; text-transform: uppercase; color: var(--mut); font-weight: 600; }
.form-page input[type=text], .form-page input[type=email], .form-page select, .form-page textarea {
  display: block; width: 100%; margin-top: 0.6rem; padding: 0.7rem 0; border: none; border-bottom: 1px solid var(--line);
  background: transparent; color: var(--ink);
  font: 1rem/1.5 var(--sans); text-transform: none; letter-spacing: normal; font-weight: 400;
}
.form-page input:focus, .form-page select:focus, .form-page textarea:focus { outline: none; border-color: var(--accent); }
.radio-row { display: block; margin-top: 0.6rem; }
.radio-inline { display: inline-flex !important; align-items: center; gap: 0.4rem; font-size: 0.85rem; letter-spacing: normal; text-transform: none; font-weight: 400; color: var(--ink); margin-right: 1.2rem; }
.radio-inline input { width: auto; }
.hp-field { position: absolute; left: -9999px; }
.form-error { color: #b3261e; background: #fdecea; padding: 0.9rem 1.1rem; list-style: none; font-size: 0.9rem; }

.client-demo-ribbon {
  position: fixed; bottom: 0; right: 0; width: 200px; height: 200px;
  pointer-events: none; z-index: 9999;
  clip-path: polygon(100% 0, 100% 100%, 0 100%);
  background: #dc2626;
  box-shadow: -2px -2px 10px rgba(0, 0, 0, 0.25);
}
.client-demo-ribbon span {
  position: absolute; top: 66%; left: 66%;
  transform: translate(-50%, -50%) rotate(-45deg);
  display: block; width: 130px;
  color: #fff; font-weight: 700; font-size: 0.68rem; text-align: center; line-height: 1.3;
  text-transform: uppercase; letter-spacing: 0.03em;
}
@media (max-width: 560px) {
  .client-demo-ribbon { width: 130px; height: 130px; }
  .client-demo-ribbon span { width: 90px; font-size: 0.56rem; letter-spacing: 0.02em; top: 64%; left: 64%; }
}

/* Page sections without hero (room/policies/getting-there/nearby/contact/forms) */
.page-section h1 { font-size: clamp(2rem, 4vw, 3rem); margin-bottom: 1rem; }
