/* =========================================================
   TIERRA DENTRO — GLOBAL DESIGN SYSTEM
   ========================================================= */

@import url('https://fonts.googleapis.com/css2?family=Fraunces:opsz,wght@9..144,500;9..144,600;9..144,700&family=Public+Sans:wght@400;500;600;700&family=Caveat:wght@500;600&display=swap');

:root{
  --forest:#073d2d;
  --forest-2:#0c513d;
  --forest-3:#123b2e;
  --orange:#f36b21;
  --orange-dark:#d85c17;
  --cream:#f5f0e4;
  --cream-2:#fbfaf6;
  --sand:#e9e0cf;
  --ink:#18372d;
  --muted:#586860; /* antes #6d7c73 — no pasaba 4.5:1 contra --cream (3.86:1) ni con margen contra --white (4.39:1); este valor da ~5.9:1 y ~5.2:1 respectivamente */
  --muted-2:#9aa39c;
  --white:#fff;
  --danger:#a64b3a;
  --success:#2f7558;

  --font-display:"Fraunces",Georgia,serif;
  --font-body:"Public Sans",Arial,sans-serif;
  --font-script:"Caveat",cursive;

  --container:1200px;
  --container-wide:1360px;

  --radius-sm:8px;
  --radius:14px;
  --radius-lg:22px;
  --radius-pill:999px;

  --border:rgba(7,61,45,.12);
  --border-strong:rgba(7,61,45,.20);

  --shadow-sm:0 4px 14px rgba(7,61,45,.07);
  --shadow:0 10px 30px rgba(7,61,45,.09);
  --shadow-lg:0 18px 45px rgba(7,61,45,.14);
}

/* RESET */
*,*::before,*::after{box-sizing:border-box}
html{scroll-behavior:smooth;-webkit-text-size-adjust:100%}
body{
  margin:0;
  min-height:100vh;
  /* Red de seguridad contra elementos que se salen del ancho de la
     pantalla en mobile (no hay overflow horizontal en desktop de por
     sí, así que esto no cambia nada ahí). */
  overflow-x:hidden;
  background:var(--cream);
  color:var(--ink);
  font-family:var(--font-body);
  font-size:16px;
  line-height:1.5;
}
body,button,input,textarea,select{font-family:var(--font-body)}
img{max-width:100%;height:auto;display:block}
a{color:inherit;text-decoration:none}
button,input,textarea,select{font:inherit}
button{cursor:pointer}
button:disabled{cursor:not-allowed;opacity:.55}
h1,h2,h3,h4{
  margin:0;
  color:var(--ink);
  font-family:var(--font-display);
  line-height:1.08;
}
p{margin:0}
::selection{background:var(--orange);color:var(--white)}

/* LAYOUT */
.container{width:min(var(--container),92%);margin-inline:auto}
.container-wide{width:min(var(--container-wide),94%);margin-inline:auto}
.section{width:min(1200px,92%);margin:auto;padding:75px 0}
.eyebrow,.kicker{
  font-size:12px;
  line-height:1.2;
  letter-spacing:3px;
  text-transform:uppercase;
  font-weight:700;
  color:var(--orange);
  margin-bottom:7px;
}
.lede{color:var(--muted);line-height:1.7;max-width:700px}
.muted{color:var(--muted)}
.text-center{text-align:center}

/* landing-only typography scope — keeps bare h2 sizing off every other page */
.landing h2{margin:0;color:var(--forest);font-size:43px;line-height:1}

/* HEADER (shared app pages: buscar/detalle/reservar/etc.) */
.topnav,.site-header{
  position:relative;
  z-index:50;
  background:var(--cream);
  border-bottom:1px solid var(--border);
}
/* Variante para páginas donde la nav va encima de un .page-hero-photo
   (mismo truco que .header en index.html): al no ocupar espacio en el
   flujo y desvanecerse con un degradado en vez de un borde sólido, la
   nav se funde con la foto de abajo en lugar de dejar un corte visible
   entre las dos. */
.topnav-photo{
  position:absolute;
  left:0;right:0;top:0;
  background:linear-gradient(
    180deg,
    rgba(247,241,226,.98),
    rgba(247,241,226,.88) 72%,
    rgba(247,241,226,0)
  );
  border-bottom:0;
}
.topnav-photo + .page-hero-photo{
  padding-top:150px;
}
.topnav .inner,.site-header .inner{
  width:min(var(--container-wide),94%);
  min-height:106px;
  margin:auto;
  display:flex;
  align-items:center;
  gap:30px;
}
.brand{display:flex;align-items:center;gap:10px;font-weight:700}
.brand .mark{
  width:40px;height:40px;border-radius:10px;
  display:grid;place-items:center;
  background:var(--forest);color:var(--white);
  font-family:var(--font-display);font-weight:700;
}
.brand .name{color:var(--forest);font-family:var(--font-display);font-size:21px}
.brand .name em{color:var(--orange);font-style:normal}
.site-logo{
  width:350px;max-height:94px;object-fit:contain;
  object-position:left center;mix-blend-mode:multiply;
}
.navlinks,.site-nav{
  margin-left:auto;
  display:flex;
  align-items:center;
  gap:28px;
}
.navlinks > a,.site-nav > a,.nav > a{
  display:inline-flex;
  align-items:center;
  gap:6px;
  color:var(--forest-3);
  font-size:14px;
  font-weight:600;
  white-space:nowrap;
  transition:color .18s ease;
}
.navlinks a:hover,.navlinks a.active,
.site-nav a:hover,.site-nav a.active{color:var(--orange)}

/* Botón hamburguesa (mobile) — oculto en escritorio, ver RESPONSIVE */
.nav-toggle{
  display:none;
  margin-left:auto;
  width:42px;height:42px;
  align-items:center;justify-content:center;
  border:1px solid var(--border-strong);
  border-radius:var(--radius-sm);
  background:var(--white);
  color:var(--forest);
  font-size:18px;
  flex:none;
}
.nav-toggle:hover{background:rgba(7,61,45,.05)}

/* Menú de usuario (inyectado por initAuthNav en js/common.js) */
.authnav{position:relative}
.authnav-btn{
  background:transparent;border:0;cursor:pointer;
  font:inherit;font-weight:600;color:inherit;padding:8px 0;
}
.authnav-menu{
  position:absolute;right:0;top:calc(100% + 8px);
  min-width:210px;background:var(--white);
  border:1px solid var(--border);border-radius:var(--radius);
  padding:14px;box-shadow:var(--shadow);z-index:1000;
}
.authnav-name{font-weight:700}
.authnav-email,.authnav-role{font-size:12px;color:var(--muted);margin-top:3px}
.authnav-role{margin-bottom:12px}
.authnav-link{
  display:block;padding:8px 0;color:inherit;text-decoration:none;
}
.authnav-logout{
  display:block;width:100%;margin-top:6px;padding:9px 0;
  background:transparent;border:0;border-top:1px solid var(--border);
  cursor:pointer;text-align:left;color:var(--danger);
}

/* Avatar circular — foto de perfil, o inicial de respaldo si no hay foto.
   .av es el tamaño medio por default (tarjetas de experiencia/hostrow);
   .av-sm para navbar/reseñas, .av-lg para perfil.html y encabezados. */
.av{
  width:48px;height:48px;border-radius:50%;overflow:hidden;flex-shrink:0;
  display:flex;align-items:center;justify-content:center;
  background:var(--sand);color:var(--forest);
  font-family:var(--font-display);font-weight:700;font-size:18px;
}
.av img{width:100%;height:100%;object-fit:cover;border-radius:50%;display:block}
.av-xs{width:18px;height:18px;font-size:9px}
.av-sm{width:32px;height:32px;font-size:13px}
.av-lg{width:88px;height:88px;font-size:32px}

.authnav-btn{display:inline-flex;align-items:center;gap:8px}
/* Sin esto, un nombre largo hace que el <span> (sin clase, ver
   initAuthNav en common.js) se envuelva en varias líneas y desalinee
   todo el header — el botón nunca fue pensado para nombres de más de
   ~15 caracteres. */
.authnav-btn span{
  max-width:140px;overflow:hidden;text-overflow:ellipsis;
  white-space:nowrap;
}

/* Fila de identidad (nombre/foto + texto) — usado en detalle de
   experiencia y perfil público de anfitrión. */
.hostrow{display:flex;align-items:center;gap:12px;text-decoration:none;color:inherit}
.hostrow .t{display:flex;flex-direction:column}

/* Tabs simples (mismo look que .authtabs de login.html, generalizado
   para reusarse en dashboard.html sin tocar login.html). */
.tabs{
  display:flex;gap:6px;background:var(--sand);
  border-radius:var(--radius-pill);padding:4px;margin-bottom:22px;
  flex-wrap:wrap;
}
.tab{
  flex:1;border:none;background:transparent;padding:10px 14px;
  border-radius:var(--radius-pill);font-weight:600;font-size:14px;
  color:var(--muted);white-space:nowrap;
}
.tab.is-active{background:var(--forest);color:var(--white)}

/* Contador pequeño sobre una pestaña (ej. "Aprobaciones (3)") — solo
   se muestra cuando hay algo accionable, para que dashboard.html se
   sienta como un panel real y no una lista de páginas sueltas. */
.tab-badge{
  display:inline-flex;align-items:center;justify-content:center;
  min-width:18px;height:18px;padding:0 5px;margin-left:6px;
  background:var(--orange);color:var(--white);
  border-radius:var(--radius-pill);font-size:11px;font-weight:700;
  vertical-align:middle;
}
.tab.is-active .tab-badge{background:rgba(255,255,255,.28)}

/* Banner de cuenta arriba de dashboard.html — avatar + rol + saludo,
   mismo degradado forest que .page-hero, para que el panel se
   distinga de una página de contenido normal desde el primer vistazo. */
.dash-header{
  display:flex;align-items:center;gap:22px;flex-wrap:wrap;
  background:linear-gradient(120deg,var(--forest),var(--forest-2));
  color:var(--white);border-radius:var(--radius-lg);
  padding:28px 32px;box-shadow:var(--shadow);
}
.dash-header .av-lg{
  border:3px solid rgba(255,255,255,.35);
  background:rgba(255,255,255,.14);color:var(--white);
}
.dash-header-role{
  display:inline-block;font-size:12px;font-weight:700;letter-spacing:1.5px;
  text-transform:uppercase;color:#f8eddd;
  background:rgba(255,255,255,.14);border-radius:var(--radius-pill);
  padding:4px 12px;margin-bottom:8px;
}
.dash-header h1{color:var(--white);font-size:26px;margin:0;font-family:var(--font-display)}
.dash-header p{color:rgba(255,255,255,.82);margin-top:6px;max-width:520px;font-size:14px}

/* Fila de números rápidos entre el banner de bienvenida y las
   pestañas — sin esto el panel iba directo del saludo a las pestañas,
   sin dar ningún resumen de la cuenta de un vistazo. */
.dash-stats{
  display:grid;grid-template-columns:repeat(3,1fr);gap:14px;margin-top:18px;
}
.dash-stat{
  background:var(--white);border:1px solid var(--border);border-radius:var(--radius);
  padding:16px 18px;box-shadow:var(--shadow-sm);text-align:center;
}
.dash-stat strong{display:block;font-size:26px;font-family:var(--font-display);color:var(--forest)}
.dash-stat span{font-size:12.5px;color:var(--muted)}
@media(max-width:650px){.dash-stats{gap:8px}
  .dash-stat{padding:12px 8px}.dash-stat strong{font-size:20px}.dash-stat span{font-size:11px}}

/* Ícono grande centrado para estados vacíos (Mis reservas, Mis
   publicaciones, etc.) — antes era solo texto + botón, que se leía
   como un error en vez de "todavía no hay nada aquí". */
.empty-state-icon{
  width:60px;height:60px;border-radius:50%;margin:0 auto;
  background:rgba(7,61,45,.06);color:var(--forest);
  display:flex;align-items:center;justify-content:center;
}
.empty-state-icon .icon{width:26px;height:26px}

/* Tarjeta de sección — envuelve cada bloque de contenido del panel
   (Mis reservas, Mis sitios, etc.) con un ícono + título, en vez de un
   <h2> suelto sobre el fondo de la página. */
.section-card{
  background:var(--white);border:1px solid var(--border);
  border-radius:var(--radius);box-shadow:var(--shadow-sm);
  padding:24px;margin-top:24px;
}
.section-card-head{display:flex;align-items:center;gap:14px;margin-bottom:18px;flex-wrap:wrap}
.section-card-icon{
  width:40px;height:40px;border-radius:12px;flex-shrink:0;
  background:rgba(7,61,45,.08);color:var(--forest);
  display:flex;align-items:center;justify-content:center;
}
.section-card-icon .icon{width:20px;height:20px}
.section-card-head h2{font-size:18px;margin:0;flex:1;min-width:0}
.section-card-head p{margin-top:2px;font-size:13px;color:var(--muted)}

/* Secciones colapsables del tab "Aprobaciones" en dashboard.html — cada
   una es un <details> para que el admin pueda cerrar las que ya
   revisó en vez de scrollear un muro continuo. Con fondo/borde/sombra
   propios (en vez de solo un borde superior) se ven como tarjetas
   independientes, igual que .section-card en las demás pestañas. */
.admin-section{
  background:var(--white);border:1px solid var(--border);
  border-radius:var(--radius);box-shadow:var(--shadow-sm);
  padding:20px 24px;
}
.admin-section summary{
  cursor:pointer;list-style:none;
  font-family:var(--font-display);color:var(--ink);
  font-size:20px;font-weight:600;line-height:1.08;
}
.admin-section summary::-webkit-details-marker{display:none}
.admin-section summary::before{
  content:"▸";display:inline-block;margin-right:8px;
  font-size:16px;color:var(--muted);transition:transform .15s ease;
}
.admin-section[open] summary::before{transform:rotate(90deg)}

/* Calendario de reservas del anfitrión (tab "Calendario" en
   dashboard.html) — grid de 7 columnas, un botón por día. */
.calendar-grid{display:grid;grid-template-columns:repeat(7,1fr);gap:6px}
.calendar-weekday{
  text-align:center;font-size:11px;font-weight:700;color:var(--muted);
  text-transform:uppercase;padding-bottom:6px;letter-spacing:.03em;
}
.calendar-day{
  min-height:64px;border-radius:10px;border:1px solid var(--border);
  padding:6px;cursor:pointer;background:var(--white);
  display:flex;flex-direction:column;gap:6px;text-align:left;
  transition:background .12s ease, border-color .12s ease;
  font-family:var(--font-body);
}
.calendar-day:hover{border-color:var(--forest)}
.calendar-day.is-empty{visibility:hidden;cursor:default}
.calendar-day.is-today{border-color:var(--orange);border-width:2px}
.calendar-day.has-bookings{background:rgba(7,61,45,.05)}
.calendar-day.is-selected{border-color:var(--forest);border-width:2px}
.calendar-day .day-num{font-size:12px;font-weight:600;color:var(--ink)}
.calendar-day .day-dots{display:flex;gap:3px;flex-wrap:wrap}
.calendar-dot{width:7px;height:7px;border-radius:50%;flex-shrink:0}
.calendar-dot.confirmed{background:var(--success)}
.calendar-dot.pending{background:#a5680f}
@media(max-width:650px){
  .calendar-day{min-height:44px;padding:4px}
  .calendar-weekday{font-size:9.5px}
}
/* En celulares muy angostos (iPhone SE y similares), 7 columnas con
   gap:6px dejaban cada celda por debajo de los ~44px recomendados de
   objetivo táctil — se achica el gap para recuperar ese ancho. */
@media(max-width:380px){
  .calendar-grid{gap:3px}
  .calendar-day{padding:2px}
}

/* HEADER (landing page — index.html) */
.header{
  position:absolute;
  left:0;right:0;top:0;
  z-index:20;
  height:106px;
  background:linear-gradient(
    180deg,
    rgba(247,241,226,.98),
    rgba(247,241,226,.88) 72%,
    rgba(247,241,226,0)
  );
}
.header-inner{
  width:min(1360px,94%);
  height:106px;
  margin:auto;
  display:flex;
  align-items:center;
  gap:30px;
}
.logo{
  width:350px;height:94px;
  object-fit:contain;
  object-position:left center;
  display:block;
  mix-blend-mode:multiply;
  flex:0 0 350px;
}
.nav{margin-left:auto;display:flex;align-items:center;gap:32px}
.nav a{color:var(--forest-3);font-weight:600;font-size:15px;white-space:nowrap}
.nav a:hover{color:var(--orange)}
.nav .active{color:var(--orange);position:relative}
.nav .active:after{
  content:"";position:absolute;left:0;right:0;bottom:-11px;
  height:2px;background:var(--orange);
}
.login{
  border:1.5px solid #153d30;border-radius:var(--radius-pill);
  padding:12px 20px;display:flex;align-items:center;gap:9px;
}

/* HERO (shared page-header pattern, used by inner pages) */
.page-hero{
  background:linear-gradient(120deg,var(--forest),var(--forest-2));
  color:var(--white);
  padding:72px 0;
}
.page-hero h1{color:var(--white);font-size:clamp(38px,6vw,58px)}
.page-hero p{
  margin-top:12px;max-width:680px;color:rgba(255,255,255,.82)
}
/* Variante con la misma foto del hero de index.html, para páginas
   internas que quieran el mismo fondo en vez del degradado sólido. */
.page-hero-photo{
  background:
    linear-gradient(
      90deg,
      rgba(5,31,23,.76) 0%,
      rgba(5,31,23,.58) 34%,
      rgba(5,31,23,.16) 69%,
      rgba(5,31,23,.12) 100%
    ),
    url("https://images.unsplash.com/photo-1470770841072-f978cf4d019e?auto=format&fit=crop&w=2400&q=90")
    center/cover no-repeat;
}

/* HERO (landing page) */
.hero{
  min-height:800px;
  position:relative;
  overflow:hidden;
  background:
    linear-gradient(
      90deg,
      rgba(5,31,23,.76) 0%,
      rgba(5,31,23,.58) 34%,
      rgba(5,31,23,.16) 69%,
      rgba(5,31,23,.12) 100%
    ),
    url("https://images.unsplash.com/photo-1470770841072-f978cf4d019e?auto=format&fit=crop&w=2400&q=90")
    center/cover no-repeat;
}
.hero:after{
  content:"";position:absolute;inset:auto 0 0;height:190px;
  background:linear-gradient(transparent,rgba(4,31,23,.78));
}
.hero-inner{
  position:relative;z-index:4;
  width:min(1360px,94%);min-height:800px;margin:auto;
  display:flex;align-items:center;
}
.hero-copy{width:650px;color:var(--white);padding-top:55px}
.hero .eyebrow{
  color:#f8eddd;font-size:13px;letter-spacing:4px;margin-bottom:18px;
}
.hero h1{
  margin:0;font-family:var(--font-display);
  font-size:clamp(70px,7.5vw,110px);line-height:.82;letter-spacing:-5px;
  font-weight:600;color:var(--white);
  text-shadow:0 3px 16px rgba(0,0,0,.15);
}
.script{
  display:block;font-family:var(--font-script);font-size:1.02em;
  font-weight:600;letter-spacing:-2px;transform:rotate(-2deg);
  margin-left:8px;margin-top:2px;
}
.orange-line{
  width:430px;max-width:78%;height:17px;
  border-bottom:6px solid var(--orange);border-radius:50%;
  transform:rotate(-2deg);margin:0 0 25px 12px;
}
.hero-copy-text{
  max-width:570px;font-size:19px;line-height:1.55;
  margin:0 0 28px;color:rgba(255,255,255,.92);
}
.actions{display:flex;gap:14px;flex-wrap:wrap}

/* BUTTONS */
.btn{
  min-height:54px;
  display:inline-flex;
  align-items:center;
  justify-content:center;
  gap:9px;
  padding:14px 25px;
  border:1.5px solid transparent;
  border-radius:var(--radius-pill);
  font-weight:700;
  font-size:15px;
  line-height:1;
  transition:.16s ease;
}
.btn:hover{transform:translateY(-1px)}
.btn-primary,.btn-orange{
  background:var(--orange);color:var(--white);border-color:var(--orange);
  box-shadow:0 8px 25px rgba(0,0,0,.18);
}
.btn-primary:hover,.btn-orange:hover{
  background:var(--orange-dark);border-color:var(--orange-dark);box-shadow:var(--shadow-sm)
}
.btn-dark{background:var(--forest);color:var(--white);border-color:var(--forest)}
.btn-dark:hover{background:var(--forest-2);border-color:var(--forest-2)}
.btn-green{background:rgba(7,61,45,.92);border-color:rgba(255,255,255,.85);color:var(--white)}
.btn-ghost{background:transparent;color:var(--forest);border-color:var(--border-strong)}
.btn-ghost:hover{background:rgba(7,61,45,.06);border-color:var(--forest)}
.btn-light{background:var(--white);color:var(--forest);border-color:var(--white)}
.btn-block{width:100%}

/* Botón partido en dos mitades bajo un mismo look (p.ej. "Publicar mi
   terreno" / "Compartir un lugar" en el hero) — dos acciones distintas
   que conviene agrupar visualmente en vez de tratarlas como un tercer
   botón suelto con su propio color. */
.btn-split{
  display:inline-flex;align-items:stretch;min-height:54px;
  background:rgba(7,61,45,.92);border:1.5px solid rgba(255,255,255,.85);
  border-radius:var(--radius-pill);overflow:hidden;
}
.btn-split a{
  display:inline-flex;align-items:center;justify-content:center;gap:9px;
  padding:14px 22px;color:var(--white);font-weight:700;font-size:15px;
  white-space:nowrap;transition:.16s ease;
}
.btn-split a:hover{background:rgba(255,255,255,.14)}
.btn-split-divider{width:1.5px;flex-shrink:0;background:rgba(255,255,255,.35);margin:9px 0}
@media(max-width:480px){
  .btn-split{flex-direction:column;border-radius:18px;width:100%}
  .btn-split a{justify-content:flex-start;padding:14px 18px}
  .btn-split-divider{width:auto;height:1.5px;margin:0 16px}
}

/* CARDS */
.card{
  background:var(--white);
  border:1px solid rgba(7,61,45,.08);
  border-radius:20px;
  box-shadow:0 12px 32px rgba(7,61,45,.09);
  overflow:hidden;
  transition:.2s ease;
}
a.card:hover{
  transform:translateY(-4px);
  box-shadow:0 18px 42px rgba(7,61,45,.14);
}
.cardgrid{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:24px}
/* Variante de 2 columnas — secciones "destacados" que muestran a lo
   más 2 tarjetas (eventos/experiencias recientes en index.html). */
.cardgrid-2{grid-template-columns:repeat(2,minmax(0,1fr))}
.cards{display:grid;grid-template-columns:repeat(3,1fr);gap:22px}
.stat-row{display:grid;grid-template-columns:repeat(auto-fit,minmax(160px,1fr));gap:16px;margin:16px 0 24px}
.stat-box{background:var(--white);border:1px solid rgba(7,61,45,.08);border-radius:14px;padding:16px 18px;box-shadow:0 6px 18px rgba(7,61,45,.06)}
.stat-box .stat-value{font-size:26px;font-weight:700;color:var(--forest)}
.stat-box .stat-label{font-size:13px;color:var(--muted);margin-top:4px}
.card-photo,.photo{
  height:245px;
  background-position:center;
  background-size:cover;
  background-repeat:no-repeat;
  background-color:#789477;
  position:relative;
}
.card-body,.card .body{padding:20px}
.card h3{margin:0 0 6px;color:var(--forest);font-size:25px}
.location,.loc{margin-top:0;color:var(--muted);font-size:13px}
.rating{
  position:absolute;top:14px;right:14px;
  padding:7px 10px;border-radius:var(--radius-pill);
  background:rgba(255,255,255,.95);color:var(--forest);
  font-size:12px;font-weight:700;
}
.price{
  position:absolute;left:14px;bottom:14px;
  padding:7px 11px;border-radius:var(--radius-pill);
  background:var(--forest);color:var(--white);
  font-size:12px;font-weight:700;
}
/* Botón de corazón sobre la foto de una tarjeta de sitio — anidado
   dentro de un <a class="card">, con stopPropagation() en el click
   para no disparar la navegación de la tarjeta. */
.favorite-btn{
  position:absolute;top:14px;right:14px;z-index:1;
  width:34px;height:34px;border-radius:50%;
  display:flex;align-items:center;justify-content:center;
  background:rgba(255,255,255,.95);border:0;cursor:pointer;
  color:var(--forest);transition:.15s ease;
}
.favorite-btn:hover{transform:scale(1.08)}
.favorite-btn .icon{width:17px;height:17px;fill:none;stroke:currentColor}
.favorite-btn.is-favorited{color:var(--orange)}
.favorite-btn.is-favorited .icon{fill:currentColor}
.guarantee-badge{
  position:absolute;top:14px;left:14px;
  display:flex;align-items:center;gap:6px;
  padding:4px 10px 4px 4px;border-radius:var(--radius-pill);
  background:rgba(255,255,255,.95);color:var(--forest);
  font-size:11px;font-weight:700;
  box-shadow:var(--shadow-sm);
}
.guarantee-badge-lg{
  top:20px;left:20px;gap:9px;
  padding:8px 18px 8px 8px;
  font-size:15px;
}
.guarantee-badge-lg .gb-text{display:flex;flex-direction:column;gap:1px;line-height:1.3}
.guarantee-badge-lg .gb-sub{font-size:11px;font-weight:600;color:var(--muted)}
.tags{display:flex;flex-wrap:wrap;gap:6px;margin-top:14px}
.tag{
  background:#edf2eb;color:var(--forest);
  border-radius:var(--radius-pill);
  padding:6px 9px;font-size:11px;font-weight:600;
}

/* STATUS / CAPACITY PILLS (used across eventos.html, evento-detalle.html,
   perfil.html, admin.html) */
.pill{
  display:inline-flex;align-items:center;gap:5px;
  border-radius:var(--radius-pill);
  padding:5px 11px;font-size:11px;font-weight:700;letter-spacing:.3px;
}
.pill-pending{background:#fbeed7;color:#a5680f}
.pill-approved{background:#e1f0e6;color:var(--success)}
.pill-rejected{background:#f6e2de;color:var(--danger)}
.pill-full{background:#f6e2de;color:var(--danger)}
.pill-open{background:#edf2eb;color:var(--forest)}

/* ICONS */
.icon{width:16px;height:16px;flex-shrink:0}

/* SEARCH */
.searchbar{
  min-height:50px;display:flex;align-items:center;gap:10px;
  padding:0 15px;background:var(--white);
  border:1px solid var(--border);border-radius:var(--radius)
}
.searchbar input{
  width:100%;min-width:0;border:0;outline:0;background:transparent;color:var(--ink)
}
.searchbar input::placeholder{color:var(--muted-2)}
/* El input interno no tiene borde propio (border:0) — el estilo de
   :focus genérico de más abajo le pinta un box-shadow, pero al no
   tener borde y vivir dentro de esta cápsula redondeada, el anillo
   queda cortado por el borde del contenedor y es casi invisible. Se
   estiliza el contenedor completo al enfocar el input, igual que ya
   hace el resto de los campos del formulario. */
.searchbar:focus-within{
  border-color:var(--forest-2);
  box-shadow:0 0 0 3px rgba(12,81,61,.10)
}

/* Select de filtro suelto junto a un buscador (estado en eventos.html,
   sitio/lugar en el calendario de dashboard.html) — mismo look que
   .searchbar pero para un <select> nativo. */
.filter-select{
  background:var(--white);
  border:1px solid var(--border-strong);
  border-radius:var(--radius-pill);
  padding:10px 16px;
  font-size:14px;
  color:var(--ink);
  max-width:220px;
}

.segmented{
  display:inline-flex;gap:3px;padding:4px;
  border:1px solid var(--border);border-radius:12px;
  background:rgba(7,61,45,.05)
}
.segmented button{
  border:0;border-radius:9px;background:transparent;color:var(--forest);
  padding:9px 14px;font-size:13px;font-weight:700
}
.segmented button.active{background:var(--forest);color:var(--white)}

/* FORMS */
.field{margin-top:18px}
.field label,.form-label{
  display:block;margin-bottom:7px;color:var(--forest);
  font-size:13px;font-weight:700
}
.field input,.field textarea,.field select,
.form-control,input[type="text"],input[type="email"],
input[type="password"],input[type="number"],input[type="date"],
textarea,select{
  width:100%;min-height:48px;padding:12px 14px;
  border:1px solid rgba(7,61,45,.18);
  border-radius:10px;outline:0;background:var(--white);color:var(--ink);
  transition:.16s ease
}
textarea{min-height:120px;resize:vertical}
.field input:focus,.field textarea:focus,.field select:focus,
.form-control:focus,input:focus,textarea:focus,select:focus{
  border-color:var(--forest-2);
  box-shadow:0 0 0 3px rgba(12,81,61,.10)
}
input[type=file]{min-height:auto;padding:10px}
input::placeholder,textarea::placeholder{color:var(--muted-2)}
.field-row{display:grid;grid-template-columns:1fr 1fr;gap:14px}
.stepper{
  display:inline-flex;align-items:center;gap:16px;
  padding:6px 10px;border:1px solid rgba(7,61,45,.18);border-radius:var(--radius-pill)
}
.stepper button{
  width:32px;height:32px;flex:0 0 32px;
  display:grid;place-items:center;border-radius:50%;
  border:1px solid var(--border-strong);background:var(--white);color:var(--forest);
  font-size:17px;font-weight:700;line-height:1
}
.stepper button:hover{background:var(--cream)}
.stepper span{min-width:18px;text-align:center;font-weight:700}
@media(max-width:480px){
  .field-row{grid-template-columns:1fr}
}

/* WIZARD */
.wizardshell{max-width:760px;margin:0 auto}
.trail{width:100%;display:flex;align-items:center;margin:8px 0 42px}
.marker{
  width:34px;height:34px;flex:0 0 34px;
  display:grid;place-items:center;border-radius:50%;
  background:var(--forest);color:var(--white);
  font-size:12px;font-weight:700
}
.marker.ghost{background:var(--sand);color:var(--muted)}
.marker.on{background:var(--orange);color:var(--white)}
.amenitygrid{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:12px}
.checktile{
  display:flex;align-items:center;gap:12px;
  padding:14px 16px;border:1.5px solid var(--border);border-radius:var(--radius);
  background:var(--white);cursor:pointer;transition:.15s ease;font-size:14px;
  /* Sin esto, una etiqueta larga sin espacios (ej. "Estacionamiento")
     no se parte y empuja el ancho de la tarjeta más allá de su columna
     en el grid de 2 columnas en mobile. */
  min-width:0;overflow-wrap:anywhere;
}
.checktile:hover{border-color:var(--border-strong)}
.checktile.on{border-color:var(--orange);background:rgba(243,107,33,.06)}
.checktile .marker{flex-shrink:0}
.amenities{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:10px}
.amenity{
  display:flex;align-items:center;gap:12px;
  padding:10px 14px;border:1px solid var(--border);border-radius:var(--radius);
  background:var(--white);font-size:14px;color:var(--ink);
  min-width:0;overflow-wrap:anywhere;
}
.amenity .marker{flex-shrink:0}
.seg{height:2px;flex:1;background:var(--sand)}
.seg.done{background:var(--orange)}
.summarycard,.summary-card{
  padding:20px;background:var(--white);
  border:1px solid var(--border);border-radius:var(--radius);box-shadow:var(--shadow-sm)
}
.summaryrow{
  display:flex;justify-content:space-between;gap:20px;
  padding:11px 0;border-bottom:1px solid var(--border);font-size:13px
}
.summaryrow:last-child{border-bottom:0}

/* PHOTOS */
.photo-grid,.photos-grid{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:12px}
.photo-item,.photo-upload{
  min-height:150px;display:grid;place-items:center;
  border:1.5px dashed rgba(7,61,45,.22);
  border-radius:var(--radius);background:rgba(7,61,45,.025);overflow:hidden
}
.photo-item img,.photo-upload img{
  width:100%;height:100%;min-height:150px;object-fit:cover
}

/* DETAIL / GALLERY */
.detailgrid{
  display:grid;grid-template-columns:minmax(0,1.5fr) minmax(300px,.7fr);
  gap:40px;align-items:start
}
.gallery{
  min-height:460px;border-radius:var(--radius-lg);overflow:hidden;
  background:var(--sand) center/cover no-repeat
}
.gallery-grid{
  display:grid;grid-template-columns:2fr 1fr 1fr;
  grid-template-rows:repeat(2,220px);gap:5px;overflow:hidden;border-radius:var(--radius-lg)
}
.gallery-grid img{width:100%;height:100%;object-fit:cover}
.gallery-grid img:first-child{grid-row:1 / span 2}

/* MAP */
.mapbox{
  position:relative;min-height:560px;overflow:hidden;
  border:1px solid var(--border);border-radius:var(--radius-lg);background:var(--sand)
}
#leafletMap{position:absolute;inset:0;width:100%;height:100%;background:var(--sand)}
/* En buscar.html/eventos.html, la vista de mapa se alterna con la de
   lista — sin este breakpoint, un min-height de 560px se comía casi
   toda la pantalla en un celular. */
@media(max-width:650px){.mapbox{min-height:380px}}

/* pines personalizados sobre el mapa satelital */
.map-pin{
  display:flex;flex-direction:column;align-items:center;
  transform:translate(-50%,-100%);cursor:pointer;
}
.map-pin-badge{
  min-width:34px;height:28px;padding:0 9px;
  display:flex;align-items:center;justify-content:center;
  background:var(--forest);color:var(--white);
  font-size:12px;font-weight:700;white-space:nowrap;
  border:2px solid var(--white);border-radius:var(--radius-pill);
  box-shadow:var(--shadow-sm);
  transition:transform .15s ease;
}
.map-pin:hover .map-pin-badge{transform:scale(1.1)}
.map-pin-stem{
  width:0;height:0;
  border-left:5px solid transparent;border-right:5px solid transparent;
  border-top:7px solid var(--forest);
}

/* popup de Leaflet con la marca del sitio */
.leaflet-popup-content-wrapper{
  border-radius:var(--radius);box-shadow:var(--shadow);padding:2px
}
.leaflet-popup-content{margin:11px 14px;font-family:var(--font-body)}
.leaflet-popup-content strong{
  display:block;color:var(--forest);font-family:var(--font-display);font-size:15px
}
.leaflet-popup-content span{display:block;margin-top:3px;color:var(--muted);font-size:12px}
.leaflet-popup-tip{box-shadow:var(--shadow)}

/* SPOTS — lugares individuales dentro de un campamento (detalle.html,
   editar-sitio.html, anfitrion.html) */
.spot-card{display:flex;gap:16px;align-items:center;flex-wrap:wrap}
.spot-photo{
  flex:0 0 140px;width:140px;height:100px;
  border:0;padding:0;border-radius:var(--radius);
  background-position:center;background-size:cover;background-repeat:no-repeat;
  background-color:var(--sand);
  transition:transform .18s ease, box-shadow .18s ease;
}
.spot-photo.has-photo{cursor:zoom-in}
.spot-photo.has-photo:hover{transform:scale(1.03);box-shadow:var(--shadow-sm)}
@media(max-width:480px){
  .spot-photo{flex-basis:104px;width:104px;height:82px}
}

/* Fila compacta de un lugar ya guardado en editar-sitio.html — un
   renglón con separador, no una tarjeta anidada, para que la lista de
   lugares no se vea como un muro de formularios repetidos. */
.spot-summary-row{
  display:flex;align-items:center;gap:14px;
  padding:12px 4px;border-bottom:1px solid rgba(0,0,0,.08);
}
.spot-summary-row:last-child{border-bottom:0}

/* Foto grande del lugar elegido, arriba del formulario de reservar.html */
.spot-photo-banner{
  display:block;width:100%;height:280px;margin-top:18px;
  border:0;padding:0;border-radius:var(--radius-lg);
  background-position:center;background-size:cover;background-repeat:no-repeat;
  cursor:zoom-in;transition:opacity .18s ease;
}
.spot-photo-banner:hover{opacity:.92}
@media(max-width:480px){
  .spot-photo-banner{height:200px}
}

/* Lightbox — ver una foto en grande (openLightbox() en common.js) */
.lightbox-overlay{
  position:fixed;inset:0;z-index:9999;
  background:rgba(0,0,0,.88);
  display:flex;align-items:center;justify-content:center;
  padding:24px;cursor:zoom-out;
  opacity:0;transition:opacity .18s ease;
}
.lightbox-overlay.is-open{opacity:1}
.lightbox-img{
  max-width:100%;max-height:100%;object-fit:contain;
  border-radius:12px;box-shadow:0 20px 60px rgba(0,0,0,.5);
  transform:scale(.96);transition:transform .18s ease;
}
.lightbox-overlay.is-open .lightbox-img{transform:scale(1)}
.lightbox-close{
  position:fixed;top:18px;right:22px;
  width:44px;height:44px;border-radius:50%;border:0;
  background:rgba(255,255,255,.15);color:#fff;font-size:26px;
  line-height:1;cursor:pointer;display:flex;align-items:center;justify-content:center;
}

/* Bloque combinado de huéspedes (adultos + niños) — reservar.html */
.guest-breakdown{
  border:1px solid rgba(7,61,45,.18);border-radius:var(--radius);
  padding:6px 16px;
}
.guest-breakdown-row{
  display:flex;align-items:center;justify-content:space-between;
  gap:14px;padding:12px 0;flex-wrap:wrap;
}
.guest-breakdown-row:not(:last-child){border-bottom:1px solid var(--border)}
.guest-breakdown-row .stepper{margin-left:auto}
.guest-breakdown-label b{display:block;font-size:14px}
.guest-breakdown-label span{display:block;color:var(--muted);font-size:12px;margin-top:2px}

/* Fila de resumen de precio con título + detalle chico (reservar.html) */
.summaryrow-label b{display:block;font-weight:600;color:var(--ink);font-size:13px}
.summaryrow-label span{display:block;color:var(--muted);font-size:12px;margin-top:2px}

/* BOOKING */
.booking-card,.reserve-card{
  background:var(--white);border:1px solid var(--border);
  border-radius:var(--radius-lg);padding:28px;box-shadow:var(--shadow)
}
.booking-total,.total-row{
  display:flex;justify-content:space-between;gap:15px;
  padding:13px 0;border-bottom:1px solid var(--border)
}
.booking-total:last-child,.total-row:last-child{border-bottom:0}
.total{color:var(--forest);font-family:var(--font-display);font-size:26px;font-weight:700}

/* AUTH */
.auth-shell{
  min-height:calc(100vh - 88px);
  display:grid;place-items:center;padding:50px 0
}
.auth-card{
  width:min(460px,100%);padding:32px;background:var(--white);
  border:1px solid var(--border);border-radius:var(--radius-lg);box-shadow:var(--shadow)
}
.auth-card h1{font-size:34px}
.auth-card .btn{width:100%;margin-top:20px}

/* STATS (landing page) */
.stats{
  position:absolute;left:0;right:0;bottom:0;z-index:8;
  background:rgba(3,58,43,.96);color:var(--white);
}
.stats-inner{
  width:min(1200px,90%);min-height:92px;margin:auto;
  display:grid;grid-template-columns:repeat(3,1fr);
}
.stat{
  display:flex;justify-content:center;align-items:center;gap:13px;
  border-right:1px solid rgba(255,255,255,.18);
}
.stat:last-child{border-right:0}
.stat strong{font-family:var(--font-display);font-size:38px}
.stat span{color:rgba(255,255,255,.8);font-size:13px}

/* SECTION HEAD (landing page) */
.section-head{
  display:flex;justify-content:space-between;align-items:end;
  margin-bottom:28px;gap:20px;
}
.subtitle{color:var(--muted);margin:8px 0 0}
.see-all{
  border:1px solid var(--forest);border-radius:var(--radius-pill);
  padding:11px 18px;color:var(--forest);font-weight:700;
}

/* HOW IT WORKS (landing page) */
.how{background:#ebe3d2}
.how-inner{width:min(1200px,92%);margin:auto;padding:75px 0}
.steps{display:grid;grid-template-columns:repeat(3,1fr);gap:20px}
/* Variante de 4 columnas (p.ej. anfitrion.html: beneficios / pasos para
   publicar) — mismos breakpoints que .cardgrid, en vez de saltar directo
   a 1 columna como el .steps de 3. */
.steps-4{grid-template-columns:repeat(4,1fr)}
@media(max-width:980px){.steps-4{grid-template-columns:repeat(2,1fr)}}
@media(max-width:720px){.steps-4{grid-template-columns:1fr}}

.steps-5{grid-template-columns:repeat(5,1fr)}
@media(max-width:980px){.steps-5{grid-template-columns:repeat(3,1fr)}}
@media(max-width:720px){.steps-5{grid-template-columns:1fr}}
.step{
  background:var(--white);border-radius:20px;padding:28px;
  text-decoration:none;color:inherit;
  transition:transform .18s ease, box-shadow .18s ease;
}
a.step:hover{transform:translateY(-3px);box-shadow:var(--shadow-sm)}
.step-num{
  width:38px;height:38px;display:flex;align-items:center;justify-content:center;
  border-radius:50%;background:var(--orange);color:var(--white);
  font-weight:800;margin-bottom:18px;
}
.step h3{margin:0 0 9px;color:var(--forest);font-size:24px}
.step p{margin:0;color:#68786f;line-height:1.6}

/* HOST / CTA */
.host{
  width:min(1200px,92%);margin:75px auto;padding:55px;border-radius:var(--radius-lg);
  background:
    linear-gradient(100deg,rgba(4,49,36,.98),rgba(4,49,36,.74)),
    url("https://images.unsplash.com/photo-1504851149312-7a075b496cc7?auto=format&fit=crop&w=1800&q=85")
    center/cover;
  color:var(--white);
  display:flex;align-items:center;justify-content:space-between;gap:30px;
}
.host h2{color:var(--white);max-width:700px;font-size:43px}
.host p{max-width:650px;margin-top:12px;color:rgba(255,255,255,.78);line-height:1.6}

.host-col{flex:1;display:flex;flex-direction:column;align-items:flex-start;min-width:220px}
.host-col h2{font-size:28px}
.host-col p{font-size:15px}
.host-col .btn{margin-top:20px}
.host-divider{width:1px;align-self:stretch;background:rgba(255,255,255,.22);flex-shrink:0}

/* EVENTS (landing page) — mismo patrón de sección que "Sitios
   destacados" (.section > .section-head + grid de tarjetas), en vez de
   su propio layout de 2 columnas con íconos estáticos. */
.events-wip{
  background:#e9e1d0;
  border-top:1px solid rgba(7,61,45,.06);
  border-bottom:1px solid rgba(7,61,45,.06);
}

/* COMUNIDAD (landing page) — sección propia, separada de eventos.
   Mismo patrón .section > .section-head + grid que EVENTS arriba. */
.community-teaser{background:var(--white)}
.community-actions{
  display:flex;gap:12px;margin-top:24px;flex-wrap:wrap;
}

/* FOOTER */
.sitefooter{border-top:1px solid var(--border);padding:50px 0 25px}
.contact-footer{background:var(--forest);color:rgba(255,255,255,.7);padding:42px 0 25px}
.sitefooter .inner,.contact-footer-inner{
  width:min(var(--container-wide),94%);margin:auto;
  display:grid;grid-template-columns:1.5fr 1fr 1fr;gap:30px
}
.sitefooter h3{color:var(--forest);font-family:var(--font-display);font-size:23px}
.contact-footer h3{margin:0 0 10px;color:var(--white);font-family:var(--font-display);font-size:24px}
.sitefooter p{margin-top:7px;color:var(--muted);font-size:13px}
.contact-footer p{margin:5px 0;color:rgba(255,255,255,.68);font-size:13px;line-height:1.6}
.contact-link{color:var(--white);font-weight:600}
.contact-link:hover{color:var(--orange)}
.footer-bottom{
  width:min(var(--container-wide),94%);margin:28px auto 0;padding-top:18px;
  border-top:1px solid rgba(255,255,255,.12);display:flex;justify-content:space-between;
  gap:20px;color:rgba(255,255,255,.5);font-size:12px
}

/* UTILITIES */
.w-full{width:100%}.hidden{display:none!important}.flex{display:flex}
.flex-center{display:flex;align-items:center;justify-content:center}
.flex-between{display:flex;align-items:center;justify-content:space-between}
.gap-2{gap:8px}.gap-3{gap:12px}.gap-4{gap:16px}.gap-5{gap:20px}
.mt-2{margin-top:8px}.mt-3{margin-top:12px}.mt-4{margin-top:16px}
.mt-5{margin-top:20px}.mt-6{margin-top:24px}.mt-8{margin-top:32px}

/* RESPONSIVE */
@media(max-width:980px){
  .cardgrid{grid-template-columns:repeat(2,minmax(0,1fr))}
  .detailgrid{grid-template-columns:1fr}
  .site-logo{width:240px}
  .navlinks,.site-nav{gap:18px}
  .host{padding:38px}
}
@media(max-width:720px){
  .topnav .inner,.site-header .inner{
    min-height:72px;width:92%;flex-wrap:wrap;padding:10px 0
  }
  .brand .name{font-size:19px}
  .brand .mark{width:36px;height:36px}
  .site-logo{width:210px;max-height:60px}
  .nav-toggle{display:flex}
  .navlinks,.site-nav{
    display:none;
    position:absolute;top:100%;left:0;right:0;
    flex-direction:column;align-items:flex-start;gap:2px;
    background:var(--cream);border-bottom:1px solid var(--border);
    padding:10px 6% 18px;
  }
  .navlinks.is-open,.site-nav.is-open{display:flex}
  .navlinks a,.site-nav a{padding:10px 2px;width:100%}

  /* El menú de usuario (.authnav-menu) se alinea "right:0" pensado para
     cuando el botón está pegado a la derecha de una barra horizontal
     (desktop). En el menú móvil, .navlinks pasa a ser una columna con
     align-items:flex-start, así que el botón ya no está pegado a la
     derecha — hay que estirar tanto el botón como su menú al ancho
     completo del panel para que el menú no se salga por un lado. */
  .authnav{width:100%}
  .authnav-btn{width:100%; justify-content:space-between}
  .authnav-btn span{max-width:none}
  .authnav-menu{left:0; right:0; min-width:0}

  .page-hero{padding:48px 0}
  .topnav-photo + .page-hero-photo{padding-top:110px}
  .dash-header{padding:20px;gap:14px}
  .dash-header h1{font-size:21px}
  .dash-header .av-lg{width:60px;height:60px;font-size:22px}
  .section-card{padding:18px}
  .cardgrid{grid-template-columns:1fr}
  .photo,.card-photo{min-height:220px}
  .photo-grid,.photos-grid{grid-template-columns:repeat(2,minmax(0,1fr))}
  .gallery{min-height:300px}
  .gallery-grid{grid-template-columns:1fr 1fr;grid-template-rows:220px 160px}
  .gallery-grid img:first-child{grid-column:1 / span 2;grid-row:auto}
  .host{padding:30px}
  .host .btn{width:100%}
  .sitefooter .inner,.contact-footer-inner{grid-template-columns:1fr}
  .footer-bottom{flex-direction:column}
}
@media(max-width:480px){
  .container,.container-wide{width:94%}
  .section{width:94%;padding:48px 0}
  .auth-card,.booking-card,.reserve-card{padding:22px}
  .trail{margin-bottom:30px}
  .marker{width:30px;height:30px;flex-basis:30px}
  .photo-grid,.photos-grid{grid-template-columns:1fr}
  .amenitygrid{grid-template-columns:1fr}
  .amenities{grid-template-columns:1fr}
}

/* RESPONSIVE (landing page) */
@media(max-width:950px){
  .logo{width:245px;height:80px;flex-basis:245px}
  .nav-toggle{display:flex}
  .nav{
    display:none;
    position:absolute;top:100%;left:0;right:0;
    flex-direction:column;align-items:flex-start;gap:2px;
    background:var(--cream-2);border-bottom:1px solid var(--border);
    padding:10px 6% 18px;
  }
  .nav.is-open{display:flex}
  .nav a{padding:10px 2px;width:100%}
  .nav .active:after{display:none}

  /* Mismo arreglo que .navlinks para el menú de usuario — ver el otro
     bloque @media(max-width:720px) para la explicación completa. */
  .authnav{width:100%}
  .authnav-btn{width:100%; justify-content:space-between}
  .authnav-btn span{max-width:none}
  .authnav-menu{left:0; right:0; min-width:0}

  .hero-copy{width:100%}
  .cards,.steps{grid-template-columns:1fr}
  .host{flex-direction:column;align-items:stretch}
  .host-divider{width:100%;height:1px;margin:8px 0}
}
@media(max-width:650px){
  .header,.header-inner{height:80px}
  .header-inner{width:94%}
  .logo{width:205px;height:70px;flex-basis:205px}
  .hero,.hero-inner{min-height:720px}
  .hero-copy{padding-top:80px;padding-bottom:145px}
  .hero h1{font-size:58px;letter-spacing:-2px}
  .hero-copy-text{font-size:16px}
  .stats-inner{grid-template-columns:1fr}
  .stat{min-height:52px;border-right:0;border-bottom:1px solid rgba(255,255,255,.12)}
  .stat:last-child{border-bottom:0}
  .section-head{flex-direction:column;align-items:flex-start}
  .landing h2{font-size:35px}
}
