/* ══════════════════════════════════════════════
   CUMBRE — Design Tokens
   Guía de tiempo y roca · papel, tinta, terracota
   ══════════════════════════════════════════════ */

/* ── Splash de arranque ── */
.splash {
  position: fixed; inset: 0; z-index: 99999;
  display: flex; flex-direction: column; align-items: center; justify-content: center;
  gap: 24px;
  background: var(--bg);
  transition: opacity 0.25s ease;
}
.splash.hide { opacity: 0; pointer-events: none; }
.splash-logo {
  border-radius: 0;
  filter: none;
  animation: splash-pulse 2s ease-in-out infinite;
}
.splash-spinner {
  width: 24px; height: 24px;
  border: 2px solid rgba(var(--ink-rgb),0.12);
  border-top-color: var(--terra);
  border-radius: 50%;
  animation: splash-spin 0.8s linear infinite;
}
@keyframes splash-pulse {
  0%, 100% { opacity: 1; }
  50%      { opacity: 0.7; }
}
@keyframes splash-spin { to { transform: rotate(360deg); } }

/* ── SW update toast ── */
#sw-update-toast {
  position: fixed; bottom: 80px; left: 50%; transform: translateX(-50%);
  z-index: 9999; display: flex; align-items: center; gap: 12px;
  background: var(--ink); border: 1px solid var(--ink-2);
  border-radius: 2px;
  padding: 12px 16px; font-size: 0.85rem; color: var(--bg);
  box-shadow: 0 4px 16px rgba(var(--ink-rgb),0.25);
  opacity: 0; transition: opacity 0.3s ease; max-width: 90vw;
}
#sw-update-toast.show { opacity: 1; }
.sw-update-btn {
  padding: 6px 14px; border-radius: 0; border: 1px solid var(--bg); cursor: pointer;
  background: var(--terra); color: var(--bg);
  font-size: 0.8rem; font-weight: 700; font-family: inherit; white-space: nowrap;
}
.sw-update-btn:hover { background: var(--bad); }

/* ── Reset & Base ── */
*, *::before, *::after { box-sizing: border-box; margin: 0; padding: 0; }

:root {
  /* ── Superficies ── */
  --bg:       #f5f3ee;
  --paper:    #ebe7dd;
  --paper-2:  #f0ead8;

  /* ── Tinta ── */
  --ink:      #1c1c1a;
  --ink-rgb:  28, 28, 26;
  --ink-2:    #5a574f;
  --ink-3:    #8a8478;
  --rule:     #d6d2c4;

  /* ── Accent ── */
  --terra:    #c2410c;
  --terra-bg: #fde4d3;
  --moss:     #5e6b4f;

  /* ── Score states ── */
  --ok:       #3f6b4a;
  --warn:     #b45309;
  --bad:      #9a3412;

  /* ── Semánticos meteorológicos ── */
  --rain:     #2563c7;
  --wind:     #4a7c3f;

  /* ── Tipografía ── */
  --font-sans:  'Inter', system-ui, sans-serif;
  --font-serif: 'Source Serif 4', 'Georgia', serif;
  --font-mono:  'JetBrains Mono', ui-monospace, 'SFMono-Regular', monospace;

  /* ── Radii — casi cero ── */
  --radius-sm: 0px;
  --radius:    2px;
  --radius-lg: 4px;

  /* ── Sombras — solo hairlines ── */
  --shadow-sm: 0 1px 0 var(--rule);
  --shadow:    0 0 0 1px var(--rule);

  /* ── Compatibilidad con código existente → mapeo a Cumbre ── */
  --bg-from:      var(--bg);
  --bg-mid:       var(--paper);
  --bg-to:        var(--paper-2);
  --glass-bg:     rgba(235,231,221,0.92);
  --glass-border: var(--rule);
  --glass-shadow: var(--shadow-sm);
  --text-primary:   var(--ink);
  --text-secondary: var(--ink-2);
  --accent:         var(--terra);
  --accent-warm:    var(--moss);
}

/* ══════════════════════════════════════════
   MODO OSCURO — paleta carbón/marfil/terracota
   Activo con [data-theme="dark"] en <html>
   ══════════════════════════════════════════ */
[data-theme="dark"] {
  --bg:       #15140f;
  --paper:    #1d1c17;
  --paper-2:  #211f19;

  --ink:      #ece7d8;
  --ink-rgb:  236, 231, 216;
  --ink-2:    #a8a397;
  --ink-3:    #6e6a5f;
  --rule:     #2a281f;

  --terra:    #e0612b;
  --terra-bg: #3a1d10;
  --moss:     #7d8a6a;

  --ok:       #7da068;
  --warn:     #d6904a;
  --bad:      #c9543b;

  /* Semánticos meteorológicos */
  --rain:     #60a5fa;
  --wind:     #86efac;

  /* Compatibilidad */
  --bg-from:      var(--bg);
  --bg-mid:       var(--paper);
  --bg-to:        var(--paper-2);
  --glass-bg:     rgba(29,28,23,0.95);
  --glass-border: var(--rule);
  --text-primary:   var(--ink);
  --text-secondary: var(--ink-2);
  --accent:         var(--terra);
  --accent-warm:    var(--moss);
}

html, body {
  height: 100%;
  font-family: var(--font-sans);
  -webkit-font-smoothing: antialiased;
  color: var(--ink);
  background: var(--bg);
  overflow-x: hidden;
}

/* ── Fondo — papel plano, sin gradiente oscuro ── */
.bg-gradient {
  position: fixed; inset: 0;
  background: var(--bg);
  z-index: -1;
}
.bg-gradient::before, .bg-gradient::after { display: none; }

/* ── Surfaces — sin glass/blur, solo hairlines de papel ── */
.glass {
  background: var(--glass-bg);
  border: 1px solid var(--rule);
  backdrop-filter: none;
  -webkit-backdrop-filter: none;
  box-shadow: var(--shadow-sm);
  border-radius: var(--radius);
}

/* ── Layout ── */
.app-container { max-width: 500px; margin: 0 auto; padding: 20px 16px 60px; min-height: 100vh; }

/* ── Favorites bar ── */
.favorites-bar {
  display: flex; gap: 8px; overflow-x: auto; padding-bottom: 6px; margin-bottom: 12px;
  scrollbar-width: none;
}
.favorites-bar::-webkit-scrollbar { display: none; }
.favorites-bar:empty { display: none; }

.fav-chip {
  flex: 0 0 auto;
  display: flex; align-items: center; gap: 6px;
  background: var(--glass-bg); border: 1px solid var(--glass-border);
  backdrop-filter: none;
  padding: 6px 12px; border-radius: 0;
  font-size: 0.78rem; font-weight: 600;
  cursor: pointer; white-space: nowrap;
  transition: background 0.2s, transform 0.15s;
}
.fav-chip:hover { background: var(--rule); transform: translateY(-1px); }
.fav-chip.active { background: var(--terra-bg); border-color: var(--terra); }
.fav-chip .remove-fav { margin-left: 2px; opacity: 0.5; font-size: 0.7rem; }
.fav-chip .remove-fav:hover { opacity: 1; color: var(--bad); }

/* ── Header ── */
/* ── Header eyebrow: CUMBRE · DD.MM.YYYY ── */
.header-eyebrow {
  display: flex; align-items: center; gap: 8px;
  padding: 6px 0 8px;
  font-family: var(--font-mono); font-size: 0.62rem; font-weight: 700;
  letter-spacing: 0.18em; text-transform: uppercase; color: var(--ink-3);
  border-bottom: 1px solid var(--rule); margin-bottom: 0;
}
.header-brand { color: var(--terra); }
.header-date::before { content: '·'; margin-right: 8px; }

.header {
  display: flex; justify-content: space-between; align-items: center;
  margin-bottom: 16px;
  border-bottom: 1px solid var(--rule);
  padding: 10px 0 12px;
}
.location { display: flex; align-items: center; gap: 6px; font-size: 0.95rem; font-weight: 600; font-family: var(--font-sans); }
.location-icon { font-size: 0.9rem; opacity: 0.6; }

/* ── Barra de iconos del header — todos 32×32, borde 1px ink, cuadrados ── */
.header-actions {
  display: flex; align-items: center;
  border: 1px solid var(--ink);
  flex-shrink: 0;
}
.hdr-btn {
  width: 36px; height: 44px;
  background: transparent; border: none;
  border-left: 1px solid var(--ink);
  color: var(--ink);
  display: flex; align-items: center; justify-content: center;
  cursor: pointer; transition: background 0.12s;
  position: relative; flex-shrink: 0;
}
.hdr-btn:first-child { border-left: none; }
.hdr-btn:hover { background: var(--paper); }

/* En móvil: ocultar el botón de configurar notificaciones del tiempo
   (accesible desde Mi Perfil), el header ya queda muy lleno con 6 iconos */
@media (max-width: 600px) {
  #notifBtn { display: none !important; }
}

/* Alias de compatibilidad — adminBtn ya no está en header pero keep por JS */
.search-btn {
  background: transparent; border: 1px solid var(--ink);
  color: var(--ink);
  width: 32px; height: 32px; border-radius: 0;
  display: flex; align-items: center; justify-content: center;
  cursor: pointer; transition: background 0.15s;
}
.search-btn:hover { background: var(--paper); }

/* ── Search overlay ── */
.search-overlay {
  position: fixed; inset: 0; z-index: 100;
  background: rgba(var(--ink-rgb),0.5);
  display: none; align-items: flex-start; justify-content: center;
  padding: 60px 16px 0;
}
.search-overlay.open { display: flex; }

.search-box { border-radius: 0; padding: 16px; width: 100%; max-width: 460px; border: 1px solid var(--ink); }
.search-input-row { display: flex; gap: 10px; align-items: center; }
.search-input-row input {
  flex: 1; background: var(--bg); border: 1px solid var(--rule);
  color: var(--ink); padding: 10px 14px; border-radius: 0; font-size: 1rem; outline: none;
  font-family: var(--font-sans);
}
.search-input-row input::placeholder { color: var(--ink-3); }
.search-input-row input:focus { border-color: var(--terra); }

.close-search-btn {
  background: var(--rule); border: 1px solid var(--glass-border);
  color: var(--ink); width: 38px; height: 38px; border-radius: 50%;
  cursor: pointer; font-size: 1rem; transition: background 0.2s;
}
.close-search-btn:hover { background: var(--paper); }

.search-results { margin-top: 10px; display: flex; flex-direction: column; gap: 6px; }
.search-result-item {
  padding: 10px 14px; border-radius: 0;
  background: var(--paper); border: 1px solid var(--rule);
  cursor: pointer; font-size: 0.9rem; transition: background 0.2s;
}
.search-result-item:hover { background: var(--paper); }
.search-result-item .res-country { font-size: 0.75rem; color: var(--ink-2); }

/* ── Loading ── */
.loading-state { text-align: center; padding: 80px 20px; color: var(--ink-2); }
.spinner {
  width: 40px; height: 40px; border: 3px solid var(--rule);
  border-top-color: var(--terra); border-radius: 50%;
  animation: spin 0.8s linear infinite; margin: 0 auto 16px;
}
@keyframes spin { to { transform: rotate(360deg); } }

/* ── Error ── */
.error-state { text-align: center; padding: 80px 20px; color: var(--ink-2); }
.error-icon { font-size: 3rem; margin-bottom: 12px; }
.retry-btn {
  margin-top: 16px; padding: 10px 24px; border-radius: 0;
  border: none; color: var(--ink); cursor: pointer; font-size: 0.9rem; font-weight: 600;
}

/* ── Main card ── */
.main-card { border-radius: var(--radius); padding: 28px 24px 22px; margin-bottom: 20px; }

.main-top { display: flex; align-items: center; gap: 16px; margin-bottom: 10px; }
.weather-icon-main {
  font-size: 5rem; line-height: 1;
  

}


.temp-block {}
.temp-main {
  font-family: var(--font-serif);
  font-size: 5.5rem; font-weight: 300; line-height: 0.9; letter-spacing: -0.06em;
  color: var(--ink);
  background: none; -webkit-text-fill-color: var(--ink);
}
.temp-feels {
  font-family: var(--font-mono); font-size: 0.7rem; font-weight: 700;
  letter-spacing: 0.08em; text-transform: uppercase;
  color: var(--ink); margin-top: 8px;
  padding: 4px 8px; background: var(--paper); display: inline-block;
  border: 1px solid var(--ink);
}

.weather-desc { font-size: 1rem; font-weight: 600; margin-bottom: 10px; color: var(--ink); }

.main-badge-row { display: flex; gap: 6px; flex-wrap: wrap; margin-bottom: 14px; }
.badge {
  font-size: 0.7rem; font-weight: 600; padding: 3px 8px;
  background: var(--paper); border: 1px solid var(--rule);
  border-radius: 0; color: var(--ink-2);
  font-family: var(--font-mono); letter-spacing: 0.08em; text-transform: uppercase;
}

/* ── Today score ── */
.today-score {
  display: flex; flex-direction: column; align-items: stretch;
  background: var(--paper); border: none;
  border-top: 2px solid var(--ink); border-bottom: 1px solid var(--rule);
  border-radius: 0; padding: 12px 0; margin-bottom: 14px;
  width: 100%; box-sizing: border-box;
}
.today-score > * { width: 100%; box-sizing: border-box; }
.today-score-left { display: flex; flex-direction: column; gap: 3px; }
.today-score-header {
  display: flex; align-items: baseline; justify-content: space-between;
  margin-bottom: 8px;
}
.today-score-title {
  font-size: 0.65rem; text-transform: uppercase; letter-spacing: 0.18em;
  color: var(--ink-2); font-weight: 700; font-family: var(--font-mono);
}
.today-score-label {
  font-family: var(--font-mono); font-size: 0.65rem; font-weight: 700;
  letter-spacing: 0.1em; color: var(--ok);
}
.today-score-number {
  font-family: var(--font-serif);
  font-size: 2.8rem; font-weight: 700; letter-spacing: -0.04em; line-height: 1;
  color: var(--terra);
}
.today-score-number span { font-size: 0.8rem; font-weight: 500; opacity: 0.6; font-family: var(--font-mono); }

.fav-btn {
  width: 100%; padding: 9px; border-radius: 0;
  background: transparent; border: 1px solid var(--ink);
  color: var(--ink); font-size: 0.82rem; font-weight: 600; cursor: pointer;
  transition: background 0.15s; font-family: var(--font-sans);
}
.fav-btn:hover { background: var(--paper); border-color: var(--terra); color: var(--terra); }
.fav-btn.is-fav { color: var(--terra); border-color: var(--terra); background: var(--terra-bg); }

/* ── Share button ── */
.main-actions { display: flex; gap: 8px; }
.main-actions .fav-btn { flex: 1; }
.share-btn {
  display: inline-flex; align-items: center; justify-content: center; gap: 6px;
  padding: 9px 14px; border-radius: 0;
  background: var(--paper); border: 1px solid var(--rule);
  color: var(--ink); font-size: 0.85rem; font-weight: 600; cursor: pointer;
  transition: background 0.2s, border-color 0.2s;
}
.share-btn:hover { background: var(--paper); border-color: var(--ok); }
.share-btn:active { transform: scale(0.97); }
.share-btn-icon { padding: 8px; min-width: 38px; }
.share-btn-icon span { display: none; }

/* Toast de "copiado al portapapeles" cuando navigator.share no existe */
.share-toast {
  position: fixed; left: 50%; bottom: 24px; transform: translateX(-50%) translateY(20px);
  background: var(--ink); color: var(--ink); padding: 10px 18px;
  border-radius: 0; border: 1px solid var(--rule);
  font-size: 0.85rem; font-weight: 600; z-index: 9999;
  opacity: 0; transition: opacity 0.25s, transform 0.25s;
  pointer-events: none;
}
.share-toast.visible { opacity: 1; transform: translateX(-50%) translateY(0); }

/* ── Section title ── */
.section-title {
  font-size: 0.72rem; font-weight: 700; text-transform: uppercase;
  letter-spacing: 1.3px; color: var(--ink-2); margin-bottom: 10px;
}

/* ── Details grid — sin bordes verticales internos ── */
.details-grid {
  display: grid; grid-template-columns: repeat(4, 1fr);
  border-top: 1px solid var(--rule);
  margin-bottom: 16px;
}
.detail-card {
  padding: 10px 8px;
  border-right: none;
  border-bottom: 1px solid var(--rule);
  display: flex; flex-direction: column; gap: 4px;
}
.detail-card:nth-child(4n) { border-right: none; }
.detail-icon { display: none; }
.detail-label {
  font-family: var(--font-mono); font-size: 0.58rem; font-weight: 700;
  color: var(--ink-3); letter-spacing: 0.14em; text-transform: uppercase;
}
.detail-value {
  font-family: var(--font-serif); font-size: 1.1rem; font-weight: 600;
  color: var(--ink); letter-spacing: -0.02em; line-height: 1.1;
}
.detail-sub {
  font-family: var(--font-mono); font-size: 0.62rem; color: var(--ink-2);
}

/* ── Hourly scroll ── */
.hourly-scroll {
  display: flex; gap: 8px; overflow-x: auto;
  padding-bottom: 8px; margin-bottom: 24px; scrollbar-width: none;
}
.hourly-scroll::-webkit-scrollbar { display: none; }

.hour-card {
  flex: 0 0 72px; border-radius: 0; padding: 12px 6px; border: 1px solid var(--rule);
  display: flex; flex-direction: column; align-items: center; gap: 4px;
  text-align: center; transition: transform 0.2s;
}
.hour-card:hover { transform: translateY(-3px); }
.hour-card.current { border-color: var(--terra); background: var(--terra-bg); }
.hour-time { font-size: 0.7rem; color: var(--ink-2); font-weight: 600; }
.hour-icon { font-size: 1.4rem; }
.hour-temp { font-size: 0.88rem; font-weight: 700; }
.hour-precip { font-size: 0.62rem; color: var(--rain); font-weight: 600; min-height: 14px; }
.hour-wind { font-size: 0.62rem; color: var(--wind); font-weight: 600; }
.hour-score { font-size: 0.75rem; font-weight: 800; letter-spacing: -0.5px; }

/* ── Info strip: roca + mejor día + café — fila compacta ── */
.info-strip {
  display: flex; align-items: center; gap: 0;
  border-top: 1px solid var(--rule);
  border-bottom: 1px solid var(--rule);
  margin-bottom: 16px;
  overflow: hidden;
}

/* ── Drying predictor — chip inline ── */
.drying-card {
  display: flex; align-items: center; gap: 6px;
  padding: 8px 10px;
  border-right: 1px solid var(--rule);
  flex: 0 0 auto;                        /* ancho fijo, no crece ni encoge */
  margin-bottom: 0; border-radius: 0;
}
.drying-status { display: flex; align-items: center; gap: 6px; }
.drying-icon { font-size: 0.65rem; flex-shrink: 0; }
.drying-texts { display: flex; flex-direction: column; gap: 0; }
.drying-label { font-family: var(--font-mono); font-size: 0.65rem; font-weight: 700;
  letter-spacing: 0.06em; text-transform: uppercase; color: var(--ink);
  white-space: nowrap; }
.drying-detail { display: none; }

/* ── Best day card — ocupa el espacio restante, trunca si no cabe ── */
.best-day-card {
  display: flex; align-items: center; gap: 5px;
  padding: 8px 10px;
  flex: 1 1 0;                           /* crece, pero puede encoger a 0 */
  min-width: 0;                          /* permite que los hijos truncen */
  border-right: 1px solid var(--rule);
  margin-bottom: 0; border-radius: 0;
  grid-template-columns: unset; overflow: hidden;
}
.best-day-star { font-size: 0.6rem; flex-shrink: 0; line-height: 1; }
.best-day-texts {
  display: flex; flex-direction: column; gap: 1px;
  min-width: 0; overflow: hidden;
}
.best-day-title {
  font-family: var(--font-mono); font-size: 0.58rem; font-weight: 700;
  letter-spacing: 0.1em; text-transform: uppercase; color: var(--ink-3);
  white-space: nowrap;
}
.best-day-sub {
  font-family: var(--font-serif); font-size: 0.82rem; font-weight: 600;
  color: var(--ink); letter-spacing: -0.02em;
  white-space: nowrap; overflow: hidden; text-overflow: ellipsis;
}
.score-sparkline { display: none; }

/* ── Coffee card — botón fijo a la derecha ── */
.coffee-card {
  display: flex; align-items: stretch;
  padding: 0; margin-bottom: 0; border-radius: 0; border-color: transparent;
  flex: 0 0 auto;                        /* ancho fijo, no encoge */
}
.coffee-left { display: none; }
.coffee-emoji { display: none; }
.coffee-btn {
  padding: 8px 11px; border: none; border-radius: 0;
  font-size: 0.65rem; letter-spacing: 0.06em;
  white-space: nowrap; height: 100%;
}

/* ── Forecast — barras verticales estilo Cumbre ── */
.forecast-list {
  display: flex; align-items: flex-end; gap: 6px;
  height: 88px; margin-bottom: 24px;
  border-top: 2px solid var(--ink);
  padding-top: 10px;
}
.forecast-row {
  flex: 1; display: flex; flex-direction: column; align-items: center;
  gap: 4px; cursor: pointer; height: 100%;
  justify-content: flex-end;
}
.forecast-row.best-day .day-name { color: var(--terra); font-weight: 700; }
.day-name {
  font-family: var(--font-mono); font-size: 0.65rem; font-weight: 500;
  color: var(--ink-2); letter-spacing: 0.04em; text-transform: uppercase;
}
.day-score-bar {
  width: 100%; flex: 1; background: rgba(var(--ink-rgb),0.07);
  display: flex; align-items: flex-end;
}
.day-score-fill { width: 100%; transition: height 0.3s ease; }
.day-score-num {
  font-family: var(--font-mono); font-size: 0.68rem; font-weight: 700;
}
.day-temps-compact {
  font-family: var(--font-mono); font-size: 0.6rem; color: var(--ink-3);
  white-space: nowrap;
}
.forecast-row::after { display: none; }

/* Score badge en lista */
.score-badge {
  font-size: 0.72rem; font-weight: 800;
  padding: 3px 8px; border-radius: 0;
  border: 1px solid; white-space: nowrap;
  min-width: 32px; text-align: center;
}
.sector-dry-badge {
  font-size: 0.72rem; white-space: nowrap;
  color: var(--ink-2);
}

/* Score hero en vista día */
.score-hero {
  background: var(--glass-bg); border: 1px solid var(--glass-border);
  border-radius: var(--radius); padding: 20px 24px;
  text-align: center; margin-bottom: 20px;
}
.score-hero-number {
  font-size: 4rem; font-weight: 900; line-height: 1; letter-spacing: -3px;
}
.score-hero-label {
  font-size: 0.9rem; font-weight: 700; margin: 6px 0 14px; text-transform: capitalize;
}
.score-hero-bar {
  height: 4px; background: var(--rule);
  overflow: hidden;
}
.score-hero-fill {
  height: 100%;
  transition: width 0.6s cubic-bezier(.4,0,.2,1);
}

/* ── Day detail view — Cumbre papel ── */
.day-view {
  position: fixed; inset: 0; z-index: 200;
  overflow-y: auto; background: var(--bg);
  animation: slideIn 0.28s cubic-bezier(.4,0,.2,1);
}
@keyframes slideIn {
  from { transform: translateX(100%); }
  to   { transform: translateX(0); }
}

.day-view-inner {
  max-width: 500px; margin: 0 auto;
  padding: 0 22px 80px;
}

.day-view-header {
  display: flex; align-items: center; justify-content: space-between;
  padding: 14px 0 12px;
  border-bottom: 1px solid var(--rule);
  margin-bottom: 0;
}

.back-btn {
  background: transparent; border: 1px solid var(--ink);
  color: var(--ink); padding: 7px 14px; border-radius: 0;
  font-size: 0.82rem; font-weight: 600; cursor: pointer;
  font-family: var(--font-mono); letter-spacing: 0.04em;
  transition: background 0.15s;
}
.back-btn:hover { background: var(--paper); }

.day-view-title {
  font-family: var(--font-serif); font-size: 1.1rem; font-weight: 600;
  color: var(--ink); letter-spacing: -0.02em; text-align: center;
}

/* Topo map container */
.topo-map-container {
  height: 200px; margin: 14px 0;
  position: relative; overflow: hidden;
}
.cumbre-vertex { background: none; border: none; }
.cumbre-vertex-label { background: none; border: none; }

/* Score del día */
.dv-score-section {
  padding: 14px 0;
  border-top: 2px solid var(--ink);
  border-bottom: 1px solid var(--rule);
  margin-bottom: 0;
}
.dv-score-header {
  display: flex; align-items: baseline; justify-content: space-between;
  margin-bottom: 6px;
}
.dv-mono-label {
  font-family: var(--font-mono); font-size: 0.65rem; font-weight: 700;
  color: var(--ink-2); letter-spacing: 0.18em; text-transform: uppercase;
}
.dv-score-big {
  font-family: var(--font-serif); font-size: 2.2rem; font-weight: 700;
  color: var(--terra); letter-spacing: -0.04em; line-height: 1;
}
.dv-score-status {
  margin-top: 8px;
  font-family: var(--font-mono); font-size: 0.68rem; font-weight: 700;
  letter-spacing: 0.1em;
}

/* Data grid 2×4 */
.dv-data-grid {
  display: grid; grid-template-columns: repeat(4, 1fr);
  border-top: 1px solid var(--rule);
  margin-bottom: 0;
}
.dv-data-cell {
  padding: 12px 8px;
  border-right: 1px solid var(--rule);
  border-bottom: 1px solid var(--rule);
}
.dv-data-cell:nth-child(4n) { border-right: none; }
.dv-data-label {
  font-family: var(--font-mono); font-size: 0.58rem; font-weight: 700;
  color: var(--ink-3); letter-spacing: 0.14em; text-transform: uppercase;
  margin-bottom: 4px;
}
.dv-data-value {
  font-family: var(--font-serif); font-size: 1.3rem; font-weight: 600;
  color: var(--ink); letter-spacing: -0.03em; line-height: 1;
}

/* Section label */
.dv-section-label {
  font-family: var(--font-mono); font-size: 0.65rem; font-weight: 700;
  color: var(--ink-2); letter-spacing: 0.18em;
  padding: 12px 0 8px;
  border-top: 1px solid var(--rule);
  margin-top: 0;
}

/* Legacy day-hero — oculto */
.day-hero { display: none; }
.day-hero-icon, .day-hero-desc, .day-hero-temps, .day-hero-feels { display: none; }
.dv-max, .dv-min { display: none; }
.dv-sep { display: none; }

.dv-max { font-size: 3.5rem; font-weight: 800; letter-spacing: -2px;
  color: var(--ink); }
.dv-sep { font-size: 2rem; color: var(--ink-2); }
.dv-min { font-size: 2.5rem; font-weight: 700; color: var(--ink-2); }
.day-hero-feels { font-size: 0.82rem; color: var(--ink-2); }

/* Hora a hora list — Cumbre */
.day-hourly-list { overflow: hidden; }
.dv-hour-row {
  display: grid;
  grid-template-columns: 46px 28px 36px 1fr 1fr 1fr;
  align-items: center; gap: 6px;
  padding: 10px 0;
  border-bottom: 1px solid var(--rule);
}
.dv-hour-row:last-child { border-bottom: none; }
.dv-hour-time {
  font-family: var(--font-mono); font-size: 0.7rem; font-weight: 700;
  color: var(--ink-2);
  display: flex; flex-direction: column; gap: 2px;
}
.dv-hour-score {
  font-family: var(--font-mono); font-size: 0.6rem; font-weight: 700;
  line-height: 1;
}
.dv-hour-icon { font-size: 1.2rem; text-align: center; }
.dv-hour-temp {
  font-family: var(--font-serif); font-size: 0.95rem; font-weight: 600;
  color: var(--ink);
}
.dv-hour-col {
  font-family: var(--font-mono); font-size: 0.65rem; font-weight: 500;
  color: var(--ink-2); text-align: center; white-space: nowrap;
  background: none; border-radius: 0;
}
.dv-hour-col.rain { color: var(--ok); }
.dv-hour-col.wind { color: var(--ink-2); }

/* ── Comparador — Cumbre ── */
.compare-view {
  position: fixed; inset: 0; z-index: 200; overflow-y: auto;
  background: var(--bg);
}
.compare-inner { max-width: 500px; margin: 0 auto; padding: 0 22px 80px; }

.compare-header {
  display: flex; align-items: center; justify-content: space-between;
  padding: 14px 0 12px;
  position: sticky; top: 0; z-index: 10;
  background: var(--bg);
  border-bottom: 1px solid var(--ink);
}
.compare-title {
  font-family: var(--font-serif); font-size: 1.3rem; font-weight: 600;
  color: var(--ink); letter-spacing: -0.03em;
}

.compare-table-wrap {
  overflow-x: auto; margin-top: 0;
  scrollbar-width: none;
}
.compare-table-wrap::-webkit-scrollbar { display: none; }

/* ── Comparador heatmap — estilo Cumbre ── */
.compare-table {
  width: 100%;
  border-top: 2px solid var(--ink);
}
.cmp-header {
  display: grid; grid-template-columns: 90px repeat(7, 1fr) 1.1fr;
  gap: 3px; padding-bottom: 8px;
  border-bottom: 1px solid var(--rule);
}
.cmp-label-col { }
.cmp-day-col {
  font-family: var(--font-mono); font-size: 0.65rem; font-weight: 700;
  color: var(--ink-2); text-align: center; letter-spacing: 0.08em;
}
.cmp-avg-col { color: var(--terra); }
.cmp-row {
  display: grid; grid-template-columns: 90px repeat(7, 1fr) 1.1fr;
  gap: 3px; padding: 6px 0;
  border-bottom: 1px solid var(--rule);
  align-items: stretch;
}
.cmp-sector-name {
  font-family: var(--font-serif); font-size: 0.88rem; font-weight: 600;
  color: var(--ink); letter-spacing: -0.02em;
  white-space: nowrap; overflow: hidden; text-overflow: ellipsis;
  padding-right: 6px;
  align-self: center;
}
/* Celda heatmap: fondo coloreado por score, número grande encima. */
.cmp-cell-hm {
  position: relative;
  display: flex; align-items: center; justify-content: center;
  min-height: 38px;
  font-family: var(--font-mono); font-size: 0.85rem; font-weight: 700;
  border-radius: 0;
  transition: transform 0.15s ease;
}
.cmp-cell-hm.is-best {
  outline: 2px solid var(--terra);
  outline-offset: -2px;
}
.cmp-cell-hm.is-best .cmp-best-star {
  position: absolute; top: 2px; right: 3px;
  font-size: 0.7rem; color: var(--terra);
}
.cmp-cell-avg {
  font-weight: 800;
  border-left: 2px solid var(--terra);
}
/* Legacy: mantén compatibilidad con .cmp-cell si queda algún render viejo */
.cmp-cell {
  display: flex; flex-direction: column; align-items: center; gap: 3px;
}
.cmp-bar-bg {
  width: 100%; height: 4px; background: rgba(var(--ink-rgb),0.08);
}
.cmp-bar-fill { height: 100%; }
.cmp-score-num {
  font-family: var(--font-mono); font-size: 0.7rem; font-weight: 700;
}
.cmp-recommended {
  margin-top: 18px; padding: 14px;
  background: var(--terra-bg);
  border-top: 2px solid var(--terra);
  border-bottom: 2px solid var(--terra);
}
.cmp-rec-label {
  font-family: var(--font-mono); font-size: 0.65rem; font-weight: 700;
  color: var(--terra); letter-spacing: 0.18em; margin-bottom: 4px;
}
.cmp-rec-name {
  font-family: var(--font-serif); font-size: 1.1rem; font-weight: 600;
  color: var(--ink); letter-spacing: -0.02em; margin-bottom: 3px;
}
.cmp-rec-sub {
  font-size: 0.8rem; color: var(--ink-2);
}

.compare-row-label { display: none; }
.compare-cell { display: none; }
.compare-cell-name { display: none; }
.compare-cell-score { display: none; }

.compare-loading {
  padding: 48px 16px; color: var(--ink-2); font-size: 0.9rem;
  display: flex; flex-direction: column; align-items: center; gap: 12px;
}

.fav-compare-btn {
  display: none; width: calc(100% - 32px); margin: 0 16px 16px;
  background: transparent; border: 1px solid var(--ink);
  color: var(--ink); border-radius: 0;
  padding: 10px 16px; font-size: 0.82rem; font-weight: 700; cursor: pointer;
  font-family: var(--font-mono); letter-spacing: 0.08em; text-transform: uppercase;
  transition: background 0.15s;
}
.fav-compare-btn:hover { background: var(--paper); }

/* ── Iconos SVG inline ── */
.ico { width: 14px; height: 14px; vertical-align: -2px; color: var(--ink-2); display: inline-block; }
.ico-xs { width: 11px; height: 11px; }
.ico-lg { width: 20px; height: 20px; }

/* ── Banner offline — Cumbre ── */
.offline-banner {
  background: var(--ink); border: none;
  border-radius: 0; padding: 10px 14px;
  margin-bottom: 12px; display: flex; flex-direction: column; gap: 8px;
  animation: slideIn 0.3s ease;
}
.offline-banner-top { display: flex; align-items: center; gap: 8px; }
.offline-icon { font-size: 1rem; color: var(--bg); }
.offline-text { font-family: var(--font-mono); font-size: 0.72rem; font-weight: 700; color: var(--bg); letter-spacing: 0.1em; text-transform: uppercase; }
.offline-favs { display: flex; flex-wrap: wrap; gap: 6px; }
.offline-fav-chip {
  background: var(--terra-bg); border: 1px solid var(--terra);
  border-radius: 0; padding: 4px 12px;
  font-size: 0.72rem; font-weight: 600; color: var(--terra); cursor: pointer;
  transition: background 0.2s;
}
.offline-fav-chip:hover  { background: var(--terra-bg); opacity: 0.85; }
.offline-fav-chip.active { background: var(--terra-bg); border-color: var(--terra); }

/* ── Notas comunitarias ── */
.notes-section { padding: 14px 16px; display: flex; flex-direction: column; gap: 12px; }
.note-card {
  display: flex; flex-direction: column; gap: 6px;
  padding: 12px 14px; border-radius: var(--radius-sm);
  background: var(--paper); border: 1px solid var(--rule);
  animation: slideIn 0.25s ease;
}
.note-text { font-size: 0.88rem; line-height: 1.5; }
.note-footer { display: flex; align-items: center; justify-content: space-between; gap: 8px; }
.note-meta { font-size: 0.68rem; color: var(--ink-2); }
.note-vote-btn {
  display: flex; align-items: center; gap: 4px;
  background: var(--paper); border: 1px solid var(--rule);
  border-radius: 0; padding: 3px 10px;
  font-size: 0.75rem; font-weight: 700; cursor: pointer; color: var(--ink);
  transition: background 0.2s, border-color 0.2s;
}
.note-votes { display: flex; gap: 6px; }
.note-vote-btn.voted { background: var(--terra-bg); border-color: var(--terra); color: var(--terra); }
.note-vote-btn.voted-down { background: var(--terra-bg); border-color: var(--bad); color: var(--bad); }
.note-vote-btn:disabled { opacity: 0.4; cursor: default; }
.notes-empty { font-size: 0.82rem; color: var(--ink-2); text-align: center; padding: 8px 0; }
.add-note-area { display: flex; flex-direction: column; gap: 8px; padding-top: 4px; border-top: 1px solid var(--rule); }
.note-input {
  width: 100%; background: var(--paper); border: 1px solid var(--rule);
  border-radius: var(--radius-sm); color: var(--ink);
  padding: 10px 12px; font-size: 0.85rem; font-family: inherit; resize: none;
  outline: none; transition: border-color 0.2s;
}
.note-input:focus { border-color: var(--terra); }
.note-input::placeholder { color: var(--ink-2); }
.note-submit-btn {
  align-self: flex-end;
  background: transparent; border: 1px solid var(--ink);
  color: var(--ink); border-radius: var(--radius-sm);
  padding: 8px 20px; font-size: 0.82rem; font-weight: 700; cursor: pointer;
  transition: background 0.2s;
}
.note-submit-btn:hover { background: var(--paper); }
.notes-login-hint { font-size: 0.78rem; color: var(--ink-2); text-align: center; padding: 4px 0; }

/* ── Análisis histórico ── */
/* ── Diario personal en detalle de escuela ── */
.journal-section { padding: 14px 18px; }
.journal-cta { margin-bottom: 12px; }
.journal-add-btn {
  display: block; width: 100%;
  padding: 11px 14px;
  background: var(--ink); color: var(--bg);
  border: 1px solid var(--ink);
  font-family: var(--font-mono); font-size: 0.78rem; font-weight: 700;
  letter-spacing: 0.05em; text-transform: uppercase;
  cursor: pointer; transition: background 0.15s;
}
.journal-add-btn:hover { background: var(--terra); border-color: var(--terra); }
.journal-login-hint {
  font-family: var(--font-sans); font-size: 0.82rem;
  color: var(--ink-2); text-align: center; margin: 8px 0 0;
}
.journal-empty {
  font-family: var(--font-sans); font-size: 0.82rem;
  color: var(--ink-3); text-align: center; padding: 6px 0 0;
}
.journal-entry {
  padding: 10px 0; border-bottom: 1px solid var(--rule);
}
.journal-entry:last-child { border-bottom: none; }
.journal-entry-head {
  display: flex; align-items: baseline; gap: 10px; margin-bottom: 4px;
}
.journal-entry-date {
  font-family: var(--font-mono); font-size: 0.72rem;
  text-transform: uppercase; letter-spacing: 0.06em; color: var(--ink-2);
}
.journal-entry-grade {
  font-family: var(--font-mono); font-size: 0.9rem; font-weight: 800;
  color: var(--terra); margin-left: auto;
}
.journal-entry-del {
  background: transparent; border: none; cursor: pointer;
  color: var(--ink-3); font-size: 0.9rem; padding: 0 4px;
}
.journal-entry-del:hover { color: var(--bad); }
.journal-entry-meta {
  font-family: var(--font-sans); font-size: 0.78rem;
  color: var(--ink-2); margin-bottom: 4px;
}
.journal-entry-notes {
  font-family: var(--font-serif); font-size: 0.88rem;
  color: var(--ink); font-style: italic;
}

/* Modal del diario */
.journal-modal {
  position: fixed; inset: 0; z-index: 9000;
  background: rgba(0,0,0,0.6);
  display: flex; align-items: center; justify-content: center;
  padding: 16px;
}
.journal-modal-inner {
  background: var(--bg); color: var(--ink);
  width: 100%; max-width: 380px;
  border: 1px solid var(--ink);
  display: flex; flex-direction: column;
  max-height: 90vh;
}
.journal-modal-head {
  display: flex; align-items: center; justify-content: space-between;
  padding: 12px 16px; border-bottom: 1px solid var(--rule);
}
.journal-modal-head h3 {
  margin: 0; font-family: var(--font-serif); font-size: 1.1rem; font-weight: 700;
}
.journal-modal-close {
  background: none; border: none; cursor: pointer;
  font-size: 1.2rem; color: var(--ink-2); padding: 0 4px;
}
.journal-modal-body {
  padding: 14px 16px; overflow-y: auto;
  display: flex; flex-direction: column; gap: 10px;
}
.journal-field {
  display: flex; flex-direction: column; gap: 4px;
}
.journal-field-l {
  font-family: var(--font-mono); font-size: 0.7rem;
  text-transform: uppercase; letter-spacing: 0.06em; color: var(--ink-2);
}
.journal-field-opt {
  font-weight: 400; text-transform: none; letter-spacing: 0;
  color: var(--ink-3); font-size: 0.65rem; margin-left: 4px;
}
.journal-autocomplete { position: relative; }
/* Verde sutil cuando la escuela está confirmada desde la lista */
#journalEditEscuelaInput[data-confirmed="1"] { border-color: var(--ok) !important; }
.journal-ac-results {
  position: absolute; top: 100%; left: 0; right: 0; z-index: 200;
  background: var(--bg); border: 1px solid var(--ink);
  border-top: none; max-height: 200px; overflow-y: auto;
}
.journal-ac-item {
  padding: 8px 10px; font-family: var(--font-sans); font-size: 0.88rem;
  cursor: pointer; color: var(--ink);
}
.journal-ac-item:hover { background: color-mix(in srgb, var(--terra) 12%, transparent); }
.journal-entry-where {
  font-family: var(--font-sans); font-size: 0.82rem;
  color: var(--ink); font-weight: 600; margin-bottom: 4px;
}
.journal-field input, .journal-field select, .journal-field textarea {
  font-family: var(--font-sans); font-size: 0.9rem; color: var(--ink);
  background: var(--bg); border: 1px solid var(--rule);
  padding: 8px 10px; outline: none; resize: vertical;
}
.journal-field input:focus, .journal-field select:focus, .journal-field textarea:focus {
  border-color: var(--ink);
}
.journal-modal-foot {
  display: flex; gap: 8px; padding: 12px 16px;
  border-top: 1px solid var(--rule);
}
.journal-cancel, .journal-save {
  flex: 1; padding: 10px;
  font-family: var(--font-mono); font-size: 0.78rem; font-weight: 700;
  letter-spacing: 0.05em; text-transform: uppercase;
  border: 1px solid var(--ink); cursor: pointer;
}
.journal-cancel { background: var(--bg); color: var(--ink); }
.journal-save { background: var(--ink); color: var(--bg); }
.journal-save:disabled { opacity: 0.6; cursor: wait; }

/* Perfil del diario */
.journal-profile-stats {
  display: grid; grid-template-columns: repeat(3, 1fr);
  gap: 0; border: 1px solid var(--rule); margin: 14px 0 10px;
}
.jp-stat {
  display: flex; flex-direction: column; align-items: center;
  padding: 12px 4px; border-right: 1px solid var(--rule);
}
.jp-stat:last-child { border-right: none; }
.jp-stat-n {
  font-family: var(--font-mono); font-size: 1.4rem; font-weight: 700; color: var(--ink);
}
.jp-stat-l {
  font-family: var(--font-mono); font-size: 0.6rem; text-transform: uppercase;
  letter-spacing: 0.06em; color: var(--ink-2); margin-top: 2px;
}
.jp-add-row { display: flex; justify-content: flex-end; margin: 8px 0 10px; }
/* Lista de escuelas (home) */
.jp-schools-list { display: flex; flex-direction: column; gap: 0; }
.jp-school-row {
  display: flex; align-items: center; justify-content: space-between;
  padding: 12px 4px; border-bottom: 1px solid var(--rule); cursor: pointer;
}
.jp-school-row:hover { background: color-mix(in srgb, var(--terra) 6%, transparent); }
.jp-school-row-name {
  font-family: var(--font-sans); font-size: 0.95rem; font-weight: 600; color: var(--ink);
}
.jp-school-row-meta {
  font-family: var(--font-mono); font-size: 0.72rem; color: var(--ink-2); margin-top: 2px;
}
.jp-arrow {
  font-size: 1.3rem; color: var(--ink-3); padding-left: 8px; flex-shrink: 0;
}
/* Vista detalle de escuela */
.jp-detail-head {
  display: flex; align-items: flex-start; gap: 12px;
  padding: 12px 0; border-bottom: 1px solid var(--rule); margin-bottom: 10px;
}
.jp-back-btn {
  background: none; border: 1px solid var(--rule); cursor: pointer;
  font-family: var(--font-mono); font-size: 0.72rem; color: var(--ink-2);
  padding: 6px 10px; white-space: nowrap; flex-shrink: 0;
}
.jp-back-btn:hover { border-color: var(--ink); color: var(--ink); }
.jp-detail-name {
  font-family: var(--font-sans); font-size: 1.05rem; font-weight: 700; color: var(--ink);
}
.jp-detail-meta {
  font-family: var(--font-mono); font-size: 0.72rem; color: var(--ink-2); margin-top: 2px;
}
.jp-blocks-list { display: flex; flex-direction: column; gap: 0; }
.jp-sector-tag { color: var(--ink-3); }
/* Acciones editar/borrar por entrada */
.journal-entry-actions { display: flex; gap: 4px; margin-left: auto; }
.journal-entry-edit {
  background: transparent; border: none; cursor: pointer;
  color: var(--ink-3); font-size: 0.9rem; padding: 0 4px;
}
.journal-entry-edit:hover { color: var(--terra); }

.historical-months { padding: 16px 18px; }
/* Resumen accionable encima de la lista mensual */
.hist-summary {
  margin-bottom: 14px;
  padding-bottom: 12px;
  border-bottom: 1px solid var(--rule);
  display: flex; flex-direction: column; gap: 6px;
}
.hist-summary-row {
  display: grid; grid-template-columns: 18px 1fr auto; align-items: baseline; gap: 8px;
  font-family: var(--font-mono); font-size: 0.78rem;
}
.hist-summary-ic { font-weight: 800; font-size: 0.85rem; }
.hist-summary-l  { color: var(--ink-2); letter-spacing: 0.06em; text-transform: uppercase; font-size: 0.7rem; }
.hist-summary-v  { color: var(--ink); text-align: right; }
.hist-summary-best  .hist-summary-ic { color: var(--ok); }
.hist-summary-avoid .hist-summary-ic { color: var(--bad); }
.historical-loading {
  display: flex; align-items: center; gap: 10px;
  color: var(--ink-2); font-size: 0.85rem; padding: 8px 0;
}
.month-row {
  display: grid;
  grid-template-columns: 32px 1fr 28px 64px;
  align-items: center; gap: 8px;
  margin-bottom: 10px;
}
.month-row:last-child { margin-bottom: 0; }
.month-name { font-size: 0.72rem; font-weight: 700; color: var(--ink-2); }
.month-bar-bg {
  height: 7px; background: var(--rule);
  border-radius: 4px; overflow: hidden;
}
.month-bar-fill {
  height: 100%; border-radius: 4px; width: 0%;
  transition: width 0.7s cubic-bezier(0.4, 0, 0.2, 1);
}
.month-score { font-size: 0.72rem; font-weight: 800; text-align: right; }
.month-label { font-size: 0.65rem; color: var(--ink-2); }

/* ── Bottom Nav ── */
.bottom-nav {
  position: fixed; bottom: 0; left: 0; right: 0; z-index: 150;
  display: flex; background: var(--bg);
  border-top: 2px solid var(--ink);
  height: 64px;
}
.nav-tab {
  flex: 1; display: flex; flex-direction: column; align-items: center; justify-content: center;
  gap: 3px; background: none; border: none; color: var(--ink-2);
  font-size: 0.68rem; font-weight: 600; cursor: pointer;
  font-family: var(--font-mono); letter-spacing: 0.08em; text-transform: uppercase;
  position: relative;
  transition: color 0.15s;
}
.nav-tab.active { color: var(--terra); }
.nav-tab.active::after {
  content: '';
  position: absolute;
  bottom: 8px;
  left: 50%; transform: translateX(-50%);
  width: 20px; height: 2px;
  background: var(--terra);
}
.nav-tab svg { display: none; }

/* ── Pages ── */
.page { display: none; }
.page.active { display: block; }

.app-container { padding-bottom: 80px; }

/* Back to sectors btn */
.back-to-sectors-btn {
  display: flex; align-items: center; gap: 4px;
  background: var(--glass-bg); border: 1px solid var(--glass-border);
  backdrop-filter: none; color: var(--ink);
  padding: 7px 14px; border-radius: 0;
  font-size: 0.82rem; font-weight: 600; cursor: pointer;
  transition: background 0.2s;
}
.back-to-sectors-btn:hover { background: var(--rule); }

/* ── Sectors page ── */
.sectors-container {
  max-width: 500px; margin: 0 auto;
  padding: 20px 16px 84px;
  min-height: 100vh;
}

.sectors-header {
  display: flex; align-items: center; justify-content: space-between; gap: 12px;
  margin-bottom: 16px; flex-wrap: wrap;
}
.sectors-title { font-size: 1.3rem; font-weight: 800; flex: 1; }
.results-count { font-size: 0.75rem; color: var(--ink-2); font-weight: 600; }

/* Sector search */
.sector-search-wrap { margin-bottom: 16px; }
.sector-search-input {
  width: 100%; background: var(--glass-bg); border: 1px solid var(--glass-border);
  backdrop-filter: none; color: var(--ink);
  padding: 11px 16px; border-radius: var(--radius-sm); font-size: 0.95rem; outline: none;
}
.sector-search-input::placeholder { color: var(--ink-2); }
.sector-search-input:focus { border-color: var(--terra); }

/* Filter block */
.filters-block { margin-bottom: 16px; border-top: 2px solid var(--ink); padding-top: 14px; }
.filter-label {
  font-family: var(--font-mono); font-size: 0.62rem; font-weight: 700;
  text-transform: uppercase; letter-spacing: 0.16em;
  color: var(--ink-2); margin: 10px 0 6px;
}
.filter-chips-row {
  display: flex; gap: 5px; overflow-x: auto; padding-bottom: 4px;
  scrollbar-width: none; flex-wrap: wrap;
}
.filter-chips-row::-webkit-scrollbar { display: none; }
.filter-chip {
  flex: 0 0 auto; padding: 5px 10px; border-radius: 0;
  font-family: var(--font-mono); font-size: 0.7rem; font-weight: 600;
  cursor: pointer; white-space: nowrap;
  background: transparent; border: 1px solid var(--ink);
  color: var(--ink); letter-spacing: 0.04em;
  transition: all 0.12s;
}
.filter-chip:hover { background: var(--paper); }
.filter-chip.active { background: var(--ink); color: var(--bg); }

/* Sector results */
.sector-results { display: flex; flex-direction: column; gap: 0; }

.sectors-loading { text-align: center; padding: 40px 20px; color: var(--ink-2); font-family: var(--font-mono); font-size: 0.8rem; }
.sectors-empty  { text-align: center; padding: 40px 20px; color: var(--ink-2); font-size: 0.9rem; font-family: var(--font-mono); }

/* ── Sector list item — estilo guía Cumbre ── */
.sector-card {
  display: flex; gap: 14px; align-items: flex-start;
  padding: 14px 0; cursor: pointer;
  border-top: 1px solid var(--rule);
  transition: background 0.15s;
}
.sector-card:hover { background: var(--paper); padding-left: 4px; }
.sc-num {
  font-family: var(--font-mono); font-size: 0.72rem; color: var(--ink-3);
  min-width: 28px; padding-top: 4px; flex-shrink: 0;
}
.sc-body { flex: 1; min-width: 0; }
.sc-name {
  font-family: var(--font-serif); font-size: 1.1rem; font-weight: 600;
  color: var(--ink); letter-spacing: -0.02em; line-height: 1.2;
  margin-bottom: 0;
  /* Permite multilínea, sin truncar — el card crece si hace falta */
  white-space: normal; overflow-wrap: break-word; word-break: break-word;
}
.sc-meta {
  font-family: var(--font-mono); font-size: 0.65rem; color: var(--ink-2);
  letter-spacing: 0.04em; margin-bottom: 8px;
}
/* Fila nombre + badge (rain-chip va aquí, no como hermano del card) */
.sc-name-row {
  display: flex; align-items: flex-start; justify-content: space-between;
  gap: 8px; margin-bottom: 3px;
  flex-wrap: wrap;                /* el chip salta de línea si no cabe */
}
.sc-name-row .sc-name { flex: 1; min-width: 0; margin-bottom: 0; }
.sc-name-row .rain-chip {
  flex-shrink: 0;
  margin-top: 2px;
  max-width: 100%;                /* nunca se sale de la fila */
  white-space: nowrap;
  overflow: hidden;
  text-overflow: ellipsis;
}

.sc-bar-wrap { display: flex; align-items: center; gap: 8px; }
.sc-dry {
  font-family: var(--font-mono); font-size: 0.65rem; font-weight: 600;
  white-space: nowrap; letter-spacing: 0.04em;
}
.sector-card-top { display: none; }
.sector-name { display: none; }
.sector-meta { display: none; }

/* Sector weather mini */
.sector-weather-mini {
  display: grid; grid-template-columns: auto 1fr 1fr 1fr 1fr;
  align-items: center; gap: 8px;
  padding-top: 12px; border-top: 1px solid var(--rule);
}
.swm-score {
  font-size: 1.3rem; font-weight: 900; letter-spacing: -1px; min-width: 36px;
}
.swm-stat {
  display: flex; flex-direction: column; align-items: center; gap: 2px;
  font-size: 0.7rem;
}
.swm-stat .swm-val { font-weight: 700; font-size: 0.78rem; }
.swm-stat .swm-lbl { color: var(--ink-2); font-size: 0.62rem; text-transform: uppercase; letter-spacing: 0.4px; }

.sector-weather-loading {
  padding-top: 12px; border-top: 1px solid var(--rule);
  display: flex; align-items: center; gap: 8px;
  color: var(--ink-2); font-size: 0.78rem;
}
.sector-weather-loading .mini-spinner {
  width: 14px; height: 14px; border: 2px solid var(--rule);
  border-top-color: var(--terra); border-radius: 50%;
  animation: spin 0.7s linear infinite; flex-shrink: 0;
}

/* ── Responsive ── */
@media (max-width: 380px) {
  .details-grid { grid-template-columns: repeat(2, 1fr); }
  .temp-main { font-size: 4rem; }
  .sector-weather-mini { grid-template-columns: auto 1fr 1fr 1fr; }
}
@media (min-width: 640px) {
  .app-container { padding: 36px 24px 84px; }
  .sectors-container { padding: 36px 24px 84px; }
  .day-view-inner { padding: 36px 24px 60px; }
  .temp-main { font-size: 6rem; }
  .details-grid { grid-template-columns: repeat(4, 1fr); }
}

/* ── Radar ── */
.radar-container {
  position: fixed;
  top: 0; left: 0; right: 0; bottom: 64px;
}
.windy-frame {
  width: 100%; height: 100%; border: none; display: block;
}

/* ── Login Screen — estilo guía de papel ── */
.login-screen {
  position: fixed; inset: 0; z-index: 999;
  display: flex; align-items: center; justify-content: center;
  padding: 28px;
  background: var(--bg);
  transition: opacity 0.3s ease;
}
.login-screen.fade-out { opacity: 0; pointer-events: none; }

/* Eliminar el glow del tema oscuro */
.login-glow { display: none; }

.login-card {
  width: 100%; max-width: 360px;
  background: transparent;
  border: none; border-radius: 0;
  padding: 0;
  text-align: left; position: relative; z-index: 1;
}

.login-logo-wrap {
  margin-bottom: 24px;
  display: flex; justify-content: flex-start;
  filter: none;
}
.login-logo-wrap img {
  border-radius: 0 !important;
  filter: none !important;
}

.login-title {
  font-family: var(--font-serif);
  font-size: 3.5rem; font-weight: 600;
  letter-spacing: -0.05em; line-height: 0.9;
  color: var(--ink);
  background: none; -webkit-text-fill-color: var(--ink);
  margin-bottom: 8px;
}

.login-subtitle {
  font-family: var(--font-serif);
  font-size: 1.1rem; font-style: italic;
  color: var(--ink-2);
  margin-bottom: 28px; line-height: 1.4;
  border-top: 1px solid var(--rule);
  border-bottom: 1px solid var(--rule);
  padding: 12px 0;
}

.login-google-btn {
  width: 100%; display: flex; align-items: center; justify-content: center;
  gap: 12px; padding: 15px 20px;
  background: var(--ink); color: var(--bg);
  border: 1px solid var(--ink); border-radius: 0;
  font-size: 0.85rem; font-weight: 700; font-family: var(--font-mono);
  cursor: pointer; letter-spacing: 0.1em; text-transform: uppercase;
  box-shadow: none;
  transition: transform 0.15s, box-shadow 0.15s;
}
.login-google-btn:hover { background: var(--terra); border-color: var(--terra); }
.login-google-btn:active { opacity: 0.85; }

.login-footer {
  margin-top: 20px; font-size: 0.7rem;
  color: var(--ink-3); line-height: 1.7;
  font-family: var(--font-mono); letter-spacing: 0.04em;
}
.login-footer a { color: var(--terra); text-decoration: none; }
.login-footer a:hover { text-decoration: underline; }

/* ── Maps button ── */
.maps-btn {
  display: flex; align-items: center; gap: 5px;
  background: transparent; border: 1px solid var(--moss);
  color: var(--moss);
  padding: 7px 14px; border-radius: 0;
  font-size: 0.78rem; font-weight: 600;
  text-decoration: none; cursor: pointer;
  transition: background 0.15s;
}
.maps-btn:hover { background: rgba(94,107,79,0.1); }

/* ── Filtro de día + modal calendario ── */
.day-filter-row {
  display: flex; gap: 6px; align-items: center; padding-bottom: 4px;
}
.day-filter-btn {
  flex: 1 1 auto; min-width: 0; display: inline-flex; align-items: center; gap: 8px;
  padding: 8px 14px; border-radius: 0;
  background: transparent;
  border: 1px solid var(--ink);
  color: var(--ink);
  font-family: inherit; font-size: 0.82rem; font-weight: 600;
  cursor: pointer; transition: background 0.15s, border-color 0.15s;
}
.day-filter-btn:hover { background: var(--paper); }
.day-filter-btn .day-filter-icon { font-size: 0.95rem; }
.day-filter-btn .day-filter-text {
  overflow: hidden; text-overflow: ellipsis; white-space: nowrap;
}
.day-filter-clear {
  flex: 0 0 auto; width: 32px; height: 32px; border-radius: 0;
  background: var(--paper);
  border: 1px solid var(--rule);
  color: var(--ink-2);
  font-size: 0.9rem; cursor: pointer;
  display: inline-flex; align-items: center; justify-content: center;
  transition: background 0.15s, color 0.15s;
}
.day-filter-clear:hover { background: var(--paper); color: var(--ink); }

.day-picker-overlay {
  position: fixed; inset: 0; z-index: 1000;
  background: rgba(var(--ink-rgb),0.55);
  backdrop-filter: none;
  display: flex; align-items: center; justify-content: center;
  padding: 18px;
  animation: dp-fade 0.18s ease;
}
@keyframes dp-fade { from { opacity: 0 } to { opacity: 1 } }
.day-picker-modal {
  width: 100%; max-width: 420px;
  border-radius: 0;
  padding: 18px 18px 16px;
  animation: dp-slide 0.22s ease;
}
@keyframes dp-slide { from { transform: translateY(16px); opacity: 0 } to { transform: translateY(0); opacity: 1 } }
.day-picker-header {
  display: flex; align-items: center; justify-content: space-between;
  margin-bottom: 12px;
}
.day-picker-title { font-size: 1rem; font-weight: 700; margin: 0; color: var(--ink); }
.day-picker-close {
  width: 30px; height: 30px; border-radius: 0;
  background: var(--rule); border: 1px solid var(--rule);
  color: var(--ink-2); cursor: pointer; font-size: 0.85rem;
  display: inline-flex; align-items: center; justify-content: center;
}
.day-picker-close:hover { color: var(--ink); background: var(--rule); }

.day-picker-mode {
  display: flex; gap: 6px; background: var(--paper);
  padding: 4px; border-radius: 0; margin-bottom: 10px;
  border: 1px solid var(--rule);
}
.day-picker-mode-btn {
  flex: 1; padding: 7px 10px; border: none; background: transparent;
  color: var(--ink-2); font-family: inherit; font-size: 0.78rem; font-weight: 600;
  border-radius: 0; cursor: pointer; transition: all 0.15s;
}
.day-picker-mode-btn.active {
  background: var(--ink);
  color: var(--bg);
}
.day-picker-hint {
  font-size: 0.76rem; color: var(--ink-2); margin-bottom: 10px;
  text-align: center;
}

.day-picker-grid {
  display: grid; grid-template-columns: repeat(7, 1fr); gap: 6px;
  margin-bottom: 14px;
}
.day-picker-cell {
  display: flex; flex-direction: column; align-items: center; justify-content: center;
  padding: 10px 4px; border-radius: 0;
  background: var(--paper);
  border: 1px solid var(--rule);
  color: var(--ink); cursor: pointer;
  transition: background 0.12s, border-color 0.12s, transform 0.12s;
  min-height: 62px;
}
.day-picker-cell:hover:not(.disabled) {
  background: var(--rule); transform: translateY(-1px);
}
.day-picker-cell .dpc-dow {
  font-size: 0.64rem; text-transform: uppercase; letter-spacing: 0.5px;
  color: var(--ink-2); font-weight: 700;
}
.day-picker-cell .dpc-num { font-size: 1.15rem; font-weight: 700; line-height: 1.1; }
.day-picker-cell .dpc-mon {
  font-size: 0.6rem; text-transform: uppercase; letter-spacing: 0.5px;
  color: var(--ink-2);
}
.day-picker-cell.today { border-color: var(--terra); }
.day-picker-cell.today .dpc-dow { color: var(--terra); }
.day-picker-cell.selected {
  background: var(--terra-bg);
  border-color: var(--terra);
  color: var(--ink);
}
.day-picker-cell.selected .dpc-dow,
.day-picker-cell.selected .dpc-mon { color: var(--ink); }
.day-picker-cell.in-range {
  background: var(--paper);
  border-color: var(--rule);
}
.day-picker-cell.disabled {
  opacity: 0.35; cursor: not-allowed;
}

.day-picker-actions {
  display: flex; gap: 8px;
}
.day-picker-btn-secondary,
.day-picker-btn-primary {
  flex: 1; padding: 11px 14px; border-radius: 0;
  font-family: inherit; font-size: 0.88rem; font-weight: 700;
  cursor: pointer; transition: all 0.15s;
}
.day-picker-btn-secondary {
  background: var(--paper);
  border: 1px solid var(--rule);
  color: var(--ink-2);
}
.day-picker-btn-secondary:hover { background: var(--rule); color: var(--ink); }
.day-picker-btn-primary {
  background: var(--terra);
  border: none; color: var(--ink);
}
.day-picker-btn-primary:disabled {
  opacity: 0.4; cursor: not-allowed; filter: grayscale(0.4);
}
.day-picker-btn-primary:not(:disabled):hover {
  
}

@media (max-width: 380px) {
  .day-picker-modal { padding: 14px 12px 12px; }
  .day-picker-grid { gap: 4px; }
  .day-picker-cell { min-height: 56px; padding: 8px 2px; }
  .day-picker-cell .dpc-num { font-size: 1rem; }
}

/* ── Aviso de lluvia en tarjeta de sector ── */
/* ── §C — TopoMap decorativo ── */
/* Wrapper plegable del mapa del sector. El estado inicial lo decide la
   preferencia del usuario (account popover). El toggle siempre permite
   abrir/cerrar manualmente sin alterar la preferencia. */
.topo-collapsible { margin: 14px 0; border: 1px solid var(--rule); background: var(--paper-2); }
.topo-collapsible .topo-body { margin: 0; border: 0; }
.topo-collapsible[data-state="collapsed"] .topo-body { display: none; }
.topo-toggle {
  width: 100%;
  display: flex; align-items: center; gap: 10px;
  padding: 10px 14px;
  background: transparent; border: 0;
  color: var(--ink); cursor: pointer;
  font-family: var(--font-mono);
  font-size: 0.72rem; font-weight: 700;
  letter-spacing: 0.08em;
  text-transform: uppercase;
}
.topo-toggle:hover { background: var(--paper); }
.topo-toggle-icon { font-size: 0.9rem; line-height: 1; }
.topo-toggle-label { flex: 1; text-align: left; }
.topo-toggle-chevron { transition: transform 0.2s ease; font-size: 0.8rem; }
.topo-collapsible[data-state="collapsed"] .topo-toggle-chevron { transform: rotate(-90deg); }
.topo-collapsible[data-state="open"] .topo-toggle { border-bottom: 1px solid var(--rule); }

.topo-map-block { position: relative; height: 220px; margin: 14px 0; border: 1px solid var(--rule); overflow: hidden; background: var(--paper-2); }
.topo-corner { position: absolute; padding: 2px 6px; background: rgba(245,243,238,0.92); border: 0.5px solid var(--rule); font-family: var(--font-mono); font-size: 8px; letter-spacing: 0.12em; color: var(--ink); display: inline-flex; align-items: center; gap: 3px; z-index: 2; }
.topo-tl { top: 6px; left: 6px; }
.topo-tr { top: 6px; right: 6px; font-weight: 700; }
.topo-scale { position: absolute; bottom: 6px; left: 6px; display: flex; flex-direction: column; gap: 2px; z-index: 2; }
.topo-scale-bar { display: flex; height: 4px; border: 0.5px solid var(--ink); }
.topo-scale-bar span:nth-child(odd) { width: 18px; background: var(--ink); }
.topo-scale-bar span:nth-child(even) { width: 18px; background: var(--bg); }
.topo-scale-label { font-family: var(--font-mono); font-size: 7px; color: var(--ink); letter-spacing: 0.05em; }
.topo-legend { position: absolute; bottom: 6px; right: 6px; background: rgba(245,243,238,0.94); border: 0.5px solid var(--rule); padding: 4px 6px; font-family: var(--font-mono); font-size: 7px; color: var(--ink); line-height: 1.5; display: flex; flex-direction: column; gap: 2px; z-index: 2; }
.topo-legend > div { display: flex; align-items: center; gap: 4px; }
.legend-line { width: 10px; height: 0; }
.legend-trail { border-top: 1px dashed var(--ink); }
.legend-approach { border-top: 1.5px dotted var(--terra); }

/* §A3 — rain chip sólido terracota */
.rain-chip {
  background: var(--terra); color: var(--bg);
  border: 1px solid var(--terra); border-radius: 0;
  padding: 5px 8px; margin-top: 0;
  font-family: var(--font-mono); font-size: 9px;
  letter-spacing: 0.14em; text-transform: uppercase;
  font-weight: 600; display: inline-block; line-height: 1.4;
}
/* Legado — ocultar clases antiguas */
.sector-rain-warn { display: none; }

/* ── Login error banner ── */
.login-error-banner {
  background: var(--terra-bg);
  border: 1px solid var(--bad);
  color: var(--bad);
  padding: 10px 14px;
  border-radius: 2px;
  font-size: 0.85rem;
  margin-bottom: 14px;
  line-height: 1.35;
}

/* ── Account button + popover ── */
/* ── Toggle claro/oscuro — hereda de .hdr-btn, solo añade icon switching ── */
.theme-toggle-btn { /* tamaño y borde vienen de .hdr-btn */ }

/* En modo oscuro: sol visible + botón invertido (indica modo activo) */
.theme-icon-moon { display: block; }
.theme-icon-sun  { display: none; }
[data-theme="dark"] .theme-icon-moon { display: none; }
[data-theme="dark"] .theme-icon-sun  { display: block; }
[data-theme="dark"] .hdr-btn.theme-toggle-btn,
[data-theme="dark"] .theme-toggle-btn {
  background: var(--ink); color: var(--bg);
}
[data-theme="dark"] .hdr-btn.theme-toggle-btn:hover,
[data-theme="dark"] .theme-toggle-btn:hover {
  background: var(--ink-2);
}

.account-btn { /* estilos ahora en .hdr-btn */ }

.account-popover {
  position: fixed;
  top: 64px; right: 14px;
  z-index: 1400;
}
.account-popover-inner {
  padding: 0;
  background: var(--bg);
  border: 1px solid var(--ink);
  border-radius: 0;
  min-width: 240px;
  max-width: 85vw;
  display: flex; flex-direction: column; gap: 0;
  box-shadow: 0 4px 24px rgba(var(--ink-rgb),0.12);
}
.account-user {
  display: flex; gap: 12px; align-items: center;
  padding: 14px; border-bottom: 1px solid var(--rule);
}
.account-avatar {
  width: 40px; height: 40px;
  border-radius: 50%;
  background: var(--paper);
  border: 1px solid var(--rule);
  color: var(--ink);
  display: flex; align-items: center; justify-content: center;
  font-family: var(--font-serif); font-weight: 600; font-size: 1rem;
  overflow: hidden; flex: 0 0 auto;
}
.account-avatar img { width: 100%; height: 100%; object-fit: cover; }
.account-info { min-width: 0; }
.account-name {
  font-family: var(--font-serif); font-weight: 600; color: var(--ink);
  letter-spacing: -0.02em;
  white-space: nowrap; overflow: hidden; text-overflow: ellipsis;
  max-width: 170px;
}
.account-email {
  font-family: var(--font-mono); font-size: 0.72rem; color: var(--ink-2);
  letter-spacing: 0.04em;
  white-space: nowrap; overflow: hidden; text-overflow: ellipsis;
  max-width: 170px;
}
.account-admin-btn {
  background: transparent;
  border: none;
  border-top: 1px solid var(--rule);
  color: var(--ink-2);
  padding: 10px 14px;
  border-radius: 0;
  font-family: var(--font-mono); font-size: 0.72rem; font-weight: 700;
  letter-spacing: 0.1em; text-transform: uppercase; text-align: left;
  width: 100%; cursor: pointer;
  transition: background 0.12s;
}
.account-admin-btn:hover { background: var(--paper); }

.account-logout-btn {
  background: transparent;
  border: none;
  border-top: 1px solid var(--rule);
  color: var(--bad);
  padding: 12px 14px;
  border-radius: 0;
  font-family: var(--font-mono); font-size: 0.75rem; font-weight: 700;
  letter-spacing: 0.1em; text-transform: uppercase; text-align: left;
  width: 100%; cursor: pointer;
  transition: background 0.12s;
}
.account-logout-btn:hover { background: var(--paper); }


/* ── COFFEE CARD ── */
.coffee-card {
  display: flex; align-items: center; justify-content: space-between;
  gap: 12px; border-radius: 0; padding: 13px 16px;
  margin-bottom: 16px;
  border-color: rgba(251,146,60,0.2);
}
.coffee-left { display: flex; align-items: center; gap: 11px; flex: 1; min-width: 0; }
.coffee-emoji { font-size: 1.6rem; flex-shrink: 0; }
.coffee-texts { display: flex; flex-direction: column; min-width: 0; }
.coffee-title { font-size: 0.85rem; font-weight: 600; color: var(--ink); }
.coffee-sub { font-size: 0.72rem; color: var(--ink-2); margin-top: 1px; }
.coffee-btn {
  flex-shrink: 0;
  padding: 7px 14px; border-radius: 0; border: 1px solid var(--ink); cursor: pointer;
  background: transparent;
  color: var(--ink); font-size: 0.78rem; font-weight: 700; font-family: var(--font-mono);
  letter-spacing: 0.06em; transition: background 0.12s;
}
.coffee-btn:hover { background: var(--paper); }

/* ── DONATION MODAL ── */
.donation-overlay {
  position: fixed; inset: 0; z-index: 1000;
  background: var(--bg);
  display: flex; align-items: center; justify-content: center;
  padding: 24px;
}
.donation-modal {
  max-width: 340px; width: 100%;
  border-radius: 0; padding: 28px 24px;
  text-align: center; position: relative;
  border: 1px solid rgba(251,146,60,0.3);
}
.donation-close {
  position: absolute; top: 14px; right: 14px;
  background: none; border: none; color: var(--ink-3);
  font-size: 1rem; cursor: pointer; padding: 4px 8px; border-radius: 0;
}
.donation-close:hover { color: var(--ink); background: var(--paper); }
.donation-icon { font-size: 2.8rem; margin-bottom: 8px; }
.donation-title { color: var(--terra); font-size: 1.15rem; margin-bottom: 10px; }
.donation-desc {
  color: var(--ink-2); font-size: 0.83rem; margin-bottom: 16px;
  line-height: 1.6; text-align: left;
}
.donation-features {
  display: flex; flex-direction: column; gap: 6px;
  background: var(--paper); border-radius: 0;
  padding: 12px 14px; margin-bottom: 18px; text-align: left;
}
.donation-features span { color: var(--ink); font-size: 0.82rem; }
.donation-btn {
  display: block; width: 100%; padding: 13px;
  background: transparent;
  border: 1px solid var(--ink); border-radius: 0;
  color: var(--ink); font-size: 0.85rem; font-weight: 700; font-family: var(--font-mono);
  letter-spacing: 0.08em; text-transform: uppercase;
  text-decoration: none; cursor: pointer;
  transition: background 0.12s; margin-bottom: 10px; text-align: center;
}
.donation-btn:hover { background: var(--paper); }
.donation-footer { color: var(--ink-3); font-size: 0.75rem; line-height: 1.5; }

/* ── NOTIFICATION BELL BUTTON ── */
.notif-btn {
  position: relative; background: none; border: none; cursor: pointer;
  color: var(--ink); padding: 4px; border-radius: 0;
  display: flex; align-items: center; justify-content: center;
  transition: opacity 0.15s;
}
.notif-btn:hover { opacity: 0.7; }
.notif-dot {
  position: absolute; top: 2px; right: 2px; width: 8px; height: 8px;
  background: var(--bad); border-radius: 50%; border: 1.5px solid var(--bg);
}

/* ── Badge de bandeja de notificaciones ── */
.ni-badge {
  position: absolute; top: 2px; right: 2px;
  background: var(--bad); color: #fff;
  border-radius: 8px; border: 1.5px solid var(--bg);
  font-size: 0.55rem; font-family: var(--font-mono);
  min-width: 14px; height: 14px;
  display: flex; align-items: center; justify-content: center;
  padding: 0 3px; line-height: 1;
}

/* ─────────────────────────────────────────────────────────────────────
   MENSAJES DIRECTOS — diseño Cumbre editorial
   Full-screen en móvil, modal centrado en escritorio.
   Layout: header fijo arriba, contenido scrollable en medio, input fijo abajo.
   Teclado virtual: 100dvh + visualViewport-based JS fallback (ver messages.js)
   ───────────────────────────────────────────────────────────────────── */

/* — Overlay: full-screen en móvil, modal en escritorio — */
#messagesOverlay {
  /* Anula inset:0 + max-height de .notif-overlay para tener control total */
  position: fixed;
  inset: 0;
  height: 100dvh;
  width: 100%;
  overflow: hidden;
  background: var(--bg);
  display: flex;
  align-items: stretch;
  justify-content: center;
  padding: 0;
}

/* En móvil: el modal ocupa toda la pantalla, sin bordes ni padding lateral.
   El .notif-modal base tiene max-width:500px y padding:0 22px 80px — los anulamos. */
#messagesOverlay .notif-modal {
  width: 100%;
  max-width: 100%;
  max-height: none;
  height: 100dvh;
  padding: 0;
  margin: 0;
  display: flex;
  flex-direction: column;
  overflow: hidden;
  background: var(--bg);
}

@media (min-width: 640px) {
  /* En tablet/escritorio: vuelve a ser un modal centrado */
  #messagesOverlay { padding: 24px; align-items: center; }
  #messagesOverlay .notif-modal {
    max-width: 560px;
    height: min(800px, calc(100dvh - 48px));
    border: 1px solid var(--rule);
    box-shadow: 0 8px 32px rgba(var(--ink-rgb), 0.12);
  }
}

#messagesContent {
  flex: 1;
  display: flex;
  flex-direction: column;
  min-height: 0;
  overflow: hidden;
}

/* — Cabeceras (inbox y chat) — */
.msg-head, .msg-chat-head {
  display: flex;
  align-items: center;
  gap: 12px;
  padding: max(14px, env(safe-area-inset-top)) 16px 12px;
  border-bottom: 1px solid var(--rule);
  flex-shrink: 0;
  background: var(--bg);
}
.msg-head-title {
  font-family: var(--font-mono);
  font-size: 0.68rem;
  color: var(--ink-2);
  letter-spacing: 0.2em;
  text-transform: uppercase;
  flex: 1;
}
.msg-head-actions { display: flex; gap: 8px; align-items: center; }

/* Botón cerrar (✕) — sobreescribe .notif-close que es ancho */
#messagesOverlay .notif-close {
  min-width: 44px;
  min-height: 44px;
  padding: 0 12px;
  font-family: var(--font-mono);
  font-size: 0.7rem;
  letter-spacing: 0.1em;
}

/* — Botón nuevo mensaje (+) — */
.msg-new-btn {
  background: var(--terra);
  color: #fff;
  border: none;
  border-radius: 50%;
  width: 36px;
  height: 36px;
  font-size: 1.35rem;
  line-height: 1;
  cursor: pointer;
  display: flex;
  align-items: center;
  justify-content: center;
  flex-shrink: 0;
}

/* — Lista de conversaciones e inbox de búsqueda — */
#msgListBody, #msgNewList {
  flex: 1;
  overflow-y: auto;
  -webkit-overflow-scrolling: touch;
  padding: 0 16px env(safe-area-inset-bottom);
  min-height: 0;
}

.msg-new-search {
  padding: 12px 16px;
  flex-shrink: 0;
  border-bottom: 1px solid var(--rule);
}
.msg-new-search input {
  width: 100%;
  padding: 10px 14px;
  border: 1.5px solid var(--rule);
  border-radius: 24px;
  font-size: 1rem;
  background: var(--bg);
  color: var(--ink);
  box-sizing: border-box;
  font-family: inherit;
}
.msg-new-search input:focus { outline: none; border-color: var(--terra); }

/* — Items de conversación — */
.msg-conv-item {
  display: flex;
  align-items: center;
  gap: 14px;
  padding: 14px 4px;
  min-height: 64px;
  border-bottom: 1px solid var(--rule);
  cursor: pointer;
  transition: background 0.15s;
}
.msg-conv-item:last-child { border-bottom: none; }
.msg-conv-item:hover { background: var(--paper); }
.msg-conv-unread { background: color-mix(in srgb, var(--terra) 5%, transparent); }
.msg-conv-unread .msg-conv-username { font-weight: 700; }
.msg-conv-unread .msg-conv-preview { color: var(--ink); font-weight: 500; }

.msg-avatar {
  width: 46px; height: 46px;
  border-radius: 50%;
  object-fit: cover;
  display: block;
  flex-shrink: 0;
}
.msg-avatar-letter {
  background: var(--terra);
  color: #fff;
  display: flex;
  align-items: center;
  justify-content: center;
  font-size: 1.1rem;
  font-weight: 600;
}

.msg-conv-info { flex: 1; min-width: 0; }
.msg-conv-username { font-size: 1rem; font-weight: 600; line-height: 1.3; }
.msg-conv-preview {
  font-size: 0.875rem;
  color: var(--ink-2);
  margin-top: 3px;
  white-space: nowrap;
  overflow: hidden;
  text-overflow: ellipsis;
  max-width: 100%;
}
.msg-prefix { color: var(--ink-3); }
.msg-conv-meta {
  display: flex;
  flex-direction: column;
  align-items: flex-end;
  gap: 6px;
  flex-shrink: 0;
}
.msg-conv-time {
  font-size: 0.72rem;
  color: var(--ink-3);
  font-family: var(--font-mono);
}
.msg-unread-badge {
  background: var(--terra);
  color: #fff;
  border-radius: 11px;
  font-size: 0.72rem;
  min-width: 22px;
  height: 22px;
  display: flex;
  align-items: center;
  justify-content: center;
  padding: 0 7px;
  font-family: var(--font-mono);
  font-weight: 600;
}

/* — Cabecera del chat (botón atrás + usuario) — */
.msg-back-btn {
  background: none;
  border: none;
  cursor: pointer;
  font-size: 1.8rem;
  color: var(--ink);
  padding: 0;
  line-height: 1;
  min-width: 44px;
  min-height: 44px;
  display: flex;
  align-items: center;
  justify-content: center;
  flex-shrink: 0;
}
.msg-chat-user {
  display: flex;
  align-items: center;
  gap: 12px;
  flex: 1;
  min-width: 0;
  cursor: pointer;
}
.msg-chat-user .msg-avatar { width: 38px; height: 38px; }
.msg-chat-name {
  font-size: 1rem;
  font-weight: 600;
  white-space: nowrap;
  overflow: hidden;
  text-overflow: ellipsis;
}

/* — Cuerpo del chat — */
.msg-body {
  flex: 1;
  overflow-y: auto;
  -webkit-overflow-scrolling: touch;
  min-height: 0;
  padding: 16px;
  display: flex;
  flex-direction: column;
  gap: 6px;
  background: var(--bg);
}
.msg-day-sep {
  text-align: center;
  font-size: 0.68rem;
  color: var(--ink-3);
  font-family: var(--font-mono);
  text-transform: uppercase;
  letter-spacing: 0.15em;
  margin: 14px 0 8px;
  padding: 4px 0;
}

/* — Burbujas — */
.msg-row {
  display: flex;
  align-items: flex-end;
  gap: 6px;
  max-width: 85%;
}
.msg-row-mine { align-self: flex-end; flex-direction: row-reverse; }
.msg-row-theirs { align-self: flex-start; }

.msg-bubble {
  padding: 10px 14px;
  border-radius: 18px;
  word-wrap: break-word;
  overflow-wrap: anywhere;
  line-height: 1.4;
  position: relative;
  max-width: 100%;
}
.msg-mine {
  background: var(--terra);
  color: #fff;
  border-bottom-right-radius: 5px;
}
.msg-theirs {
  background: var(--paper);
  color: var(--ink);
  border-bottom-left-radius: 5px;
}
.msg-text { font-size: 1rem; white-space: pre-wrap; }
.msg-time {
  font-size: 0.65rem;
  opacity: 0.75;
  font-family: var(--font-mono);
  margin-top: 4px;
  text-align: right;
}

/* Burbuja optimista mientras Firestore confirma (UI inmediata) */
.msg-row.msg-pending .msg-bubble {
  opacity: 0.6;
  transition: opacity 0.15s;
}
.msg-row.msg-pending .msg-time { font-style: italic; }

/* Botón borrar mensaje propio (siempre visible) */
.msg-delete-btn {
  background: transparent;
  border: none;
  color: var(--ink-3);
  font-size: 0.85rem;
  width: 28px;
  height: 28px;
  border-radius: 50%;
  cursor: pointer;
  display: flex;
  align-items: center;
  justify-content: center;
  padding: 0;
  flex-shrink: 0;
  opacity: 0.6;
  transition: all 0.15s;
}
.msg-delete-btn:hover, .msg-delete-btn:active {
  opacity: 1;
  background: color-mix(in srgb, var(--bad, #c44) 12%, transparent);
  color: var(--bad, #c44);
}

/* — Fila de input — */
.msg-input-row {
  display: flex;
  gap: 10px;
  align-items: flex-end;
  padding: 12px 16px;
  border-top: 1px solid var(--rule);
  flex-shrink: 0;
  background: var(--bg);
  padding-bottom: max(12px, env(safe-area-inset-bottom));
}
#msgInput {
  flex: 1;
  padding: 11px 16px;
  border: 1.5px solid var(--rule);
  border-radius: 22px;
  resize: none;
  font-family: inherit;
  font-size: 1rem;
  line-height: 1.4;
  max-height: 120px;
  background: var(--bg);
  color: var(--ink);
  box-sizing: border-box;
}
#msgInput:focus { outline: none; border-color: var(--terra); }
.msg-send-btn {
  background: var(--terra);
  color: #fff;
  border: none;
  border-radius: 50%;
  width: 42px;
  height: 42px;
  display: flex;
  align-items: center;
  justify-content: center;
  cursor: pointer;
  flex-shrink: 0;
  transition: opacity 0.15s;
}
.msg-send-btn:disabled { opacity: 0.4; cursor: not-allowed; }
.msg-send-btn svg { display: block; }

/* — Estado vacío — */
.msg-empty {
  color: var(--ink-3);
  font-size: 0.95rem;
  padding: 40px 20px;
  text-align: center;
  line-height: 1.5;
}
.msg-empty-sub {
  display: block;
  margin-top: 6px;
  font-size: 0.82rem;
  color: var(--ink-3);
  font-family: var(--font-mono);
}

/* ── Botón "Mensaje" en perfil ajeno (no cambia) ── */
.profile-btn-row { display: flex; gap: 8px; margin-top: 8px; flex-wrap: wrap; }
.profile-btn-row .profile-follow-btn { margin-top: 0; }
.profile-msg-btn {
  background: transparent; color: var(--ink); border: 1.5px solid var(--rule);
  border-radius: 8px; padding: 8px 16px; font-size: 0.82rem;
  font-family: var(--font-mono); cursor: pointer; transition: background 0.2s;
}
.profile-msg-btn:hover { background: var(--bg-2); }

/* ── Botón "Mensaje" en perfil ajeno ── */
.profile-btn-row { display: flex; gap: 8px; margin-top: 8px; flex-wrap: wrap; }
.profile-btn-row .profile-follow-btn { margin-top: 0; }
.profile-msg-btn {
  background: transparent; color: var(--ink); border: 1.5px solid var(--rule);
  border-radius: 8px; padding: 8px 16px; font-size: 0.82rem;
  font-family: var(--font-mono); cursor: pointer; transition: background 0.2s;
}
.profile-msg-btn:hover { background: var(--bg-2); }

/* ── Bandeja de notificaciones ── */
.ni-item {
  display: flex; align-items: center; gap: 12px;
  padding: 12px 4px; border-bottom: 1px solid var(--rule);
  cursor: pointer; transition: background 0.15s; border-radius: 6px;
}
.ni-item:last-child { border-bottom: none; }
.ni-item:hover { background: var(--bg-2); }
.ni-unread { background: color-mix(in srgb, var(--terra) 6%, transparent); }
.ni-avatar-wrap { position: relative; flex-shrink: 0; }
.ni-avatar {
  width: 40px; height: 40px; border-radius: 50%; object-fit: cover; display: block;
}
.ni-avatar-letter {
  background: var(--terra); color: #fff;
  display: flex; align-items: center; justify-content: center;
  font-size: 1rem; font-weight: 600;
}
.ni-type-icon {
  position: absolute; bottom: -2px; right: -4px;
  font-size: 0.75rem; background: var(--bg); border-radius: 50%; padding: 1px;
}
.ni-content { flex: 1; min-width: 0; }
.ni-title { font-size: 0.85rem; font-weight: 600; }
.ni-body { font-size: 0.8rem; color: var(--ink-2); margin-top: 2px; }
.ni-time { font-size: 0.7rem; color: var(--ink-3); font-family: var(--font-mono); flex-shrink: 0; }
.ni-time-col {
  display: flex; flex-direction: column; align-items: flex-end;
  gap: 8px; flex-shrink: 0;
}
.ni-delete-btn {
  background: transparent; border: 1px solid var(--rule);
  color: var(--ink-3); font-size: 0.75rem;
  width: 28px; height: 28px; border-radius: 50%;
  cursor: pointer; display: flex; align-items: center; justify-content: center;
  padding: 0; line-height: 1; transition: all 0.15s;
}
.ni-delete-btn:hover, .ni-delete-btn:active {
  background: var(--bad, #c44); color: #fff; border-color: var(--bad, #c44);
}
.ni-delete-btn:disabled { opacity: 0.4; cursor: not-allowed; }
.ni-empty { color: var(--ink-2); font-size: 0.9rem; padding: 24px 0; text-align: center; }
.ni-item-request { align-items: flex-start; }
.ni-request-actions { display: flex; gap: 8px; margin-top: 8px; }
.ni-accept-btn {
  background: var(--terra); color: #fff; border: none;
  border-radius: 6px; padding: 6px 14px; font-size: 0.8rem; cursor: pointer;
}
.ni-reject-btn {
  background: transparent; color: var(--ink-2);
  border: 1.5px solid var(--rule); border-radius: 6px;
  padding: 6px 14px; font-size: 0.8rem; cursor: pointer;
}
.ni-accept-btn:disabled, .ni-reject-btn:disabled { opacity: 0.5; cursor: not-allowed; }
.ni-request-done { font-size: 0.8rem; color: var(--ink-2); font-family: var(--font-mono); }

/* ── NOTIFICATIONS MODAL ── */
/* ── Notificaciones — Cumbre ── */
.notif-overlay {
  position: fixed; inset: 0; z-index: 1000;
  background: var(--bg);
  display: flex; align-items: flex-start; justify-content: center;
  overflow-y: auto;
  -webkit-overflow-scrolling: touch;
}
/* El modal de configuración de avisos del tiempo se abre desde Mi Perfil,
   así que necesita z-index mayor para aparecer encima de ese overlay. */
#notifOverlay { z-index: 1100; }
.notif-modal {
  max-width: 500px; width: 100%; padding: 0 22px 80px;
  position: relative;
}
.notif-close {
  background: transparent; border: 1px solid var(--ink);
  color: var(--ink); cursor: pointer;
  font-family: var(--font-mono); font-size: 0.75rem; font-weight: 700;
  padding: 7px 14px; letter-spacing: 0.04em;
}
.notif-title {
  font-family: var(--font-serif); font-size: 1.6rem; font-weight: 600;
  color: var(--ink); letter-spacing: -0.03em; margin: 0;
}
.notif-desc { font-size: 0.82rem; color: var(--ink-2); line-height: 1.5; }

.notif-toggle-row {
  display: flex; align-items: center; justify-content: space-between;
  padding: 16px 0; border-top: 2px solid var(--ink);
  border-bottom: 1px solid var(--rule);
  font-size: 0.9rem; font-weight: 600; color: var(--ink);
  margin-bottom: 0;
}
.toggle-switch { position: relative; width: 44px; height: 24px; flex-shrink: 0; }
.toggle-switch input { opacity: 0; width: 0; height: 0; }
.toggle-slider {
  position: absolute; inset: 0; background: var(--rule);
  border: 1px solid var(--ink); border-radius: 0; cursor: pointer;
  transition: background 0.2s;
}
.toggle-slider::before {
  content: ''; position: absolute; width: 18px; height: 18px;
  left: 2px; top: 2px; background: var(--ink); border-radius: 0;
  transition: transform 0.2s;
}
.toggle-switch input:checked + .toggle-slider { background: var(--terra); border-color: var(--terra); }
.toggle-switch input:checked + .toggle-slider::before { transform: translateX(20px); background: var(--bg); }

.notif-section { margin-bottom: 4px; }
.notif-label {
  font-family: var(--font-mono); font-size: 0.65rem; font-weight: 700;
  color: var(--ink-2); text-transform: uppercase; letter-spacing: 0.18em;
  padding: 12px 0 8px; border-top: 1px solid var(--rule);
  display: block;
}
.notif-chips { display: flex; flex-wrap: wrap; gap: 5px; }
.notif-chip {
  padding: 6px 10px; border-radius: 0; font-family: var(--font-mono);
  font-size: 0.72rem; font-weight: 700; cursor: pointer;
  border: 1px solid var(--ink); color: var(--ink);
  letter-spacing: 0.04em; transition: all 0.12s; user-select: none;
}
.notif-chip.active { background: var(--terra); border-color: var(--terra); color: var(--bg); }
.notif-save-btn {
  width: 100%; margin-top: 20px; padding: 14px;
  background: var(--ink); border: 1px solid var(--ink); border-radius: 0;
  color: var(--bg); font-family: var(--font-mono);
  font-size: 0.85rem; font-weight: 700; cursor: pointer; letter-spacing: 0.1em;
  transition: background 0.15s;
}
.notif-save-btn:hover { background: var(--terra); border-color: var(--terra); }
.notif-save-btn:disabled { opacity: 0.45; cursor: not-allowed; }
.notif-status { font-family: var(--font-mono); text-align: center; font-size: 0.78rem; margin-top: 10px; min-height: 18px; color: var(--ok); }

.notif-multi-days { display: flex; flex-wrap: wrap; gap: 5px; }
.notif-mode-selector { display: flex; gap: 0; margin-bottom: 0; border-bottom: 1px solid var(--rule); }
.notif-mode-btn {
  flex: 1; padding: 10px; border: none; border-bottom: 2px solid transparent;
  background: transparent; color: var(--ink-2);
  font-family: var(--font-mono); font-size: 0.72rem; font-weight: 700;
  letter-spacing: 0.08em; cursor: pointer; transition: all 0.15s;
}
.notif-mode-btn.active { color: var(--terra); border-bottom-color: var(--terra); }
.notif-sectors-section { }
.notif-filter-group { transition: opacity 0.2s; }
.notif-filter-group.notif-disabled { opacity: 0.35; pointer-events: none; }
.notif-fav-wrap { position: relative; margin-bottom: 12px; }
.notif-fav-input {
  width: 100%; padding: 8px 12px; border: 1px solid var(--ink);
  background: var(--bg); color: var(--ink); font-family: var(--font-sans);
  font-size: 0.85rem; box-sizing: border-box; border-radius: 0;
}
.notif-fav-input::placeholder { color: var(--ink-3); }
.notif-fav-dropdown {
  position: absolute; top: calc(100% + 2px); left: 0; right: 0;
  background: var(--bg); border: 1px solid var(--ink);
  max-height: 180px; overflow-y: auto; z-index: 100; display: none;
}
.notif-fav-dropdown.open { display: block; }
.notif-fav-dropdown-item {
  padding: 9px 13px; font-size: 0.85rem; color: var(--ink);
  cursor: pointer; border-bottom: 1px solid var(--rule);
  font-family: var(--font-sans);
}
.notif-fav-dropdown-item:last-child { border-bottom: none; }
.notif-fav-dropdown-item:hover { background: var(--paper); color: var(--terra); }
.notif-favorite-tag {
  display: inline-flex; align-items: center; gap: 6px; padding: 5px 10px;
  background: var(--terra-bg); border: 1px solid var(--terra);
  font-family: var(--font-mono); font-size: 0.72rem; color: var(--terra); margin-bottom: 5px;
}
.notif-fav-remove { background: none; border: none; color: var(--terra); cursor: pointer; font-size: 0.9rem; padding: 0; }

/* ── SUBMIT SECTOR MODAL ── */
/* Botón "Enviar sector" en la barra de sectores */
.submit-sector-btn {
  padding: 7px 12px; background: transparent;
  border: 1px solid var(--ink); border-radius: 0;
  color: var(--ink); font-family: var(--font-mono);
  font-size: 0.7rem; font-weight: 700; letter-spacing: 0.06em;
  cursor: pointer; transition: background 0.12s; flex-shrink: 0; white-space: nowrap;
}
.submit-sector-btn:hover { background: var(--paper); }

/* Modal "Enviar sector" — Cumbre */
.submit-sector-overlay {
  position: fixed; inset: 0; z-index: 1000;
  background: var(--bg);
  display: flex; align-items: flex-start; justify-content: center;
  overflow-y: auto;
}
.submit-sector-modal {
  max-width: 460px; width: 100%;
  padding: 0 22px 80px;
  position: relative; box-sizing: border-box;
}
.submit-sector-close {
  background: transparent; border: 1px solid var(--ink);
  color: var(--ink); font-family: var(--font-mono);
  font-size: 0.72rem; font-weight: 700; letter-spacing: 0.06em;
  cursor: pointer; padding: 6px 12px;
}
.submit-sector-title {
  font-family: var(--font-serif); font-size: 1.6rem; font-weight: 600;
  letter-spacing: -0.03em; color: var(--ink); margin: 0;
}
.submit-sector-desc { color: var(--ink-2); font-size: 0.85rem; line-height: 1.5; }

.submit-sector-form {
  display: flex; flex-direction: column; gap: 14px; width: 100%;
  border-top: 2px solid var(--ink); padding-top: 14px;
}
.form-group {
  display: flex; flex-direction: column; gap: 4px; min-width: 0;
}
.form-row {
  display: grid; grid-template-columns: 1fr 1fr; gap: 12px; width: 100%;
}
.form-group label {
  font-family: var(--font-mono); font-size: 0.65rem; font-weight: 700;
  letter-spacing: 0.16em; text-transform: uppercase; color: var(--ink-2);
}
.form-group input,
.form-group select,
.form-group textarea {
  padding: 10px 0; border: 0; border-bottom: 1px solid var(--ink);
  background: transparent; color: var(--ink);
  font-family: var(--font-sans); font-size: 0.95rem;
  transition: border-color 0.15s;
  width: 100%; min-width: 0; box-sizing: border-box;
  border-radius: 0;
}
.form-group input:focus,
.form-group select:focus,
.form-group textarea:focus {
  outline: none; border-bottom-color: var(--terra);
}
.form-group textarea { resize: vertical; min-height: 70px; }

/* Campo de pegado de coordenadas — feedback de color en tiempo real */
#sectorCoordPaste {
  font-family: var(--font-mono); font-size: 0.9rem; letter-spacing: 0.02em;
  transition: border-color 0.2s;
}
.form-hint {
  font-family: var(--font-mono); font-size: 0.6rem; color: var(--ink-3);
  letter-spacing: 0.05em; margin-top: 2px; line-height: 1.4;
}

/* Campo de pegado de coordenadas — feedback de color en tiempo real */
#sectorCoordPaste {
  font-family: var(--font-mono); font-size: 0.9rem; letter-spacing: 0.02em;
  transition: border-color 0.2s;
}
.form-hint {
  font-family: var(--font-mono); font-size: 0.6rem; color: var(--ink-3);
  letter-spacing: 0.05em; margin-top: 2px; line-height: 1.4;
}

.submit-sector-submit-btn {
  padding: 14px; background: var(--ink);
  border: 1px solid var(--ink); border-radius: 0;
  color: var(--bg); font-family: var(--font-mono);
  font-size: 0.82rem; font-weight: 700; letter-spacing: 0.1em;
  cursor: pointer; transition: background 0.12s; margin-top: 8px;
}
.submit-sector-submit-btn:hover { background: var(--terra); border-color: var(--terra); }
.submit-sector-submit-btn:disabled {
  opacity: 0.45; cursor: not-allowed;
}

.submit-sector-status {
  text-align: center; padding: 16px;
}
.submit-sector-success {
  color: var(--ok); font-weight: 600; font-size: 0.95rem;
}

/* ── Notification comparison view ── */
.nc-subtitle {
  font-size: 0.85rem; color: var(--ink-2);
  margin: 0 0 16px; padding: 0 4px;
}
.nc-sector-card {
  border-radius: 0; padding: 16px; margin-bottom: 12px;
}
.nc-sector-header {
  display: flex; align-items: center; gap: 12px; margin-bottom: 10px;
}
.nc-medal { font-size: 1.5rem; flex-shrink: 0; }
.nc-sector-info { flex: 1; min-width: 0; }
.nc-sector-name { font-size: 1rem; font-weight: 700; display: block; }
.nc-sector-meta { font-size: 0.8rem; color: var(--ink-2); }
.nc-avg-score { font-size: 2rem; font-weight: 900; letter-spacing: -1px; flex-shrink: 0; }
.nc-day-row {
  display: flex; align-items: center; gap: 10px;
  padding: 7px 10px; background: var(--paper);
  border-radius: 0; margin-bottom: 6px;
}
.nc-day-row:last-child { margin-bottom: 0; }
.nc-day-name { flex: 1; font-size: 0.88rem; color: var(--ink-2); }
.nc-day-score { font-weight: 700; font-size: 0.95rem; min-width: 40px; }
.nc-day-temp { color: var(--ink-2); font-size: 0.88rem; min-width: 34px; text-align: right; }
.nc-day-rain { font-size: 1rem; }

/* Persistent today card */
.nc-today-card {
  display: flex; align-items: center; gap: 12px;
  padding: 12px 16px; border-radius: 0; margin-bottom: 12px; cursor: pointer;
}
.nc-today-icon { font-size: 1.4rem; flex-shrink: 0; }
.nc-today-texts { flex: 1; min-width: 0; }
.nc-today-title { font-size: 0.9rem; font-weight: 700; }
.nc-today-sub { font-size: 0.8rem; color: var(--ink-2); margin-top: 2px; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
.nc-today-btn {
  flex-shrink: 0; background: var(--rule); border: none;
  color: inherit; font-size: 0.85rem; font-weight: 600;
  padding: 6px 12px; border-radius: 0; cursor: pointer;
}

/* ── Fallback de error en card de sector (B4) ──
 * Sustituye el spinner cuando un fetch de clima falla. Conservador en
 * estilos: aprovecha el tono y padding del estado de carga. */
.sector-weather-error {
  display: flex; align-items: center; justify-content: space-between;
  gap: 8px; padding: 8px 0;
  font-size: 0.85rem; color: rgba(255, 255, 255, 0.7);
}
.sector-retry-btn {
  background: rgba(255, 255, 255, 0.1); border: 1px solid var(--rule);
  color: inherit; font-size: 0.75rem; font-weight: 600;
  padding: 4px 10px; border-radius: 0; cursor: pointer;
}
.sector-retry-btn:hover { background: rgba(255, 255, 255, 0.18); }

/* ── Body scroll lock con overlay activo (B7) ──
 * Cuando hay una vista modal abierta (día detallado, comparador, etc.),
 * impedir que el fondo siga scrolleando. Evita la sensación de "doble
 * scroll" típica de overlays mal contenidos en móvil. */
body.overlay-open {
  overflow: hidden;
  touch-action: none;
}

/* ── C4: Adaptación a móviles muy pequeños (≤320 px) ──
 * iPhone 4/5/SE 1ª gen y similares. Solo se activa por debajo de 320 px,
 * el resto de móviles modernos (≥360 px) no se ven afectados. Reduce
 * paddings y tamaños de fuente para que no se desborden el header con
 * varios botones, las cards de día/sector y los chips de filtro.
 */
@media (max-width: 320px) {
  body { font-size: 14px; }
  .header { padding: 12px 10px; gap: 6px; }
  .coffee-btn { font-size: 0.7rem; padding: 5px 9px; }
  .sector-card { padding: 10px 12px; }
  .sector-name { font-size: 0.95rem; }
  .filter-chip, .day-picker-mode-btn { font-size: 0.72rem; padding: 4px 8px; }
  .forecast-row { padding: 8px 6px; gap: 6px; }
  .day-name { font-size: 0.78rem; }
  .day-icon { font-size: 1rem; }
  .score-badge { font-size: 0.72rem; padding: 2px 6px; }
  .hour-card { min-width: 60px; padding: 8px 6px; }
  .fav-chip { font-size: 0.72rem; padding: 5px 9px; }
}

/* ── Admin panel: lista de sector_submissions ── */
.admin-card {
  margin: 12px 16px; padding: 14px;
  border: 1px solid var(--rule);
  display: flex; flex-direction: column; gap: 8px;
}
.admin-card .admin-header {
  display: flex; justify-content: space-between; align-items: baseline; gap: 8px;
}
.admin-card .admin-name { font-size: 1.05rem; font-weight: 600; }
.admin-card .admin-date { font-size: 0.8rem; color: var(--ink-2); }
.admin-card .admin-row { font-size: 0.9rem; line-height: 1.4; }
.admin-card .admin-row a { color: var(--terra); text-decoration: none; }
.admin-card .admin-row a:hover { text-decoration: underline; }
.admin-card .admin-email { color: var(--ink-2); font-size: 0.82rem; }
.admin-warns {
  background: var(--terra-bg); border: 1px solid var(--terra);
  border-radius: 2px; padding: 8px 10px;
  font-size: 0.82rem; color: var(--warn);
}
.admin-warns .admin-warn { line-height: 1.5; }
.admin-actions {
  display: flex; gap: 6px; flex-wrap: wrap; margin-top: 4px;
}
.admin-btn {
  flex: 1 1 auto; min-width: 110px;
  padding: 7px 12px; border-radius: 0;
  background: transparent;
  border: 1px solid var(--ink);
  color: var(--ink); font-family: var(--font-mono);
  font-size: 0.72rem; font-weight: 600;
  letter-spacing: 0.05em; cursor: pointer;
  transition: background 0.12s;
}
.admin-btn:hover { background: var(--paper); }
.admin-btn-primary {
  background: var(--ink); color: var(--bg); border-color: var(--ink);
}
.admin-btn-primary:hover { background: var(--terra); border-color: var(--terra); }
.admin-btn-danger {
  background: transparent; color: var(--bad); border-color: var(--bad);
}
.admin-btn-danger:hover { background: var(--bad); color: var(--bg); }

/* Botón de entrada al admin en el header */
.admin-entry-btn { color: var(--terra); }
.admin-entry-btn:hover { color: var(--ink); background: var(--terra-bg); }

/* ── Admin · Tabs ── */
.admin-tabs {
  display: flex; gap: 0;
  margin: 0 16px 14px;
  padding: 0;
  background: transparent;
  border: none;
  border-bottom: 1px solid var(--rule);
  overflow-x: auto;
  -webkit-overflow-scrolling: touch;
  scrollbar-width: none;
}
.admin-tabs::-webkit-scrollbar { display: none; }
.admin-tab {
  flex: 0 0 auto; padding: 9px 12px;
  background: transparent; border: none;
  border-bottom: 2px solid transparent;
  color: var(--ink-2);
  font-family: var(--font-mono);
  font-size: 0.7rem; font-weight: 700;
  letter-spacing: 0.08em; text-transform: uppercase;
  border-radius: 0; cursor: pointer;
  white-space: nowrap;
  transition: color 0.15s, border-color 0.15s;
}
.admin-tab:hover { color: var(--ink); }
.admin-tab.active {
  background: transparent;
  color: var(--terra);
  border-bottom-color: var(--terra);
}

/* ── Admin · Stats ── */
.admin-stats-grid {
  display: flex; flex-direction: column; gap: 12px;
  padding: 0 16px 24px;
}
.admin-stats-card {
  padding: 14px 0;
  border: none;
  border-top: 2px solid var(--ink);
  display: flex; flex-direction: column; gap: 6px;
}
.admin-stats-title {
  font-family: var(--font-mono); font-size: 0.65rem; font-weight: 700;
  letter-spacing: 0.18em; text-transform: uppercase;
  color: var(--ink-2); margin-bottom: 4px;
}
.admin-stats-row {
  display: flex; justify-content: space-between; align-items: baseline;
  font-size: 0.9rem;
  padding: 6px 0;
  border-bottom: 1px solid var(--rule);
}
.admin-stats-row:last-child { border-bottom: none; }
.admin-stats-label { color: var(--ink-2); font-family: var(--font-sans); }
.admin-stats-value {
  font-family: var(--font-serif); font-weight: 600; color: var(--ink);
  font-variant-numeric: tabular-nums;
}

/* ── Admin · Push form ── */
.admin-push-form {
  margin: 0 16px 24px;
  padding: 16px 0;
  border: none;
  border-top: 2px solid var(--ink);
  display: flex; flex-direction: column; gap: 14px;
}
.admin-push-field {
  display: flex; flex-direction: column; gap: 6px;
}
.admin-push-field label {
  font-family: var(--font-mono); font-size: 0.65rem; font-weight: 700;
  letter-spacing: 0.18em; text-transform: uppercase;
  color: var(--ink-2);
}
.admin-push-field input[type="text"],
.admin-push-field textarea,
.admin-push-uid {
  width: 100%; padding: 10px 12px;
  background: var(--bg);
  border: 1px solid var(--ink);
  border-radius: 0;
  color: var(--ink); font: inherit;
  font-family: var(--font-sans);
  font-size: 0.9rem; resize: vertical;
}
.admin-push-field input[type="text"]:focus,
.admin-push-field textarea:focus,
.admin-push-uid:focus {
  outline: none; border-color: var(--terra);
}
.admin-push-uid:disabled {
  opacity: 0.45; cursor: not-allowed;
}
.admin-push-field label.admin-push-target {
  display: flex; align-items: center; gap: 10px;
  padding: 8px 4px;
  font-size: 0.9rem; font-weight: 500;
  text-transform: none; letter-spacing: normal;
  color: inherit; cursor: pointer;
}
.admin-push-target input[type="radio"] {
  accent-color: var(--terra);
  width: 18px; height: 18px;
  cursor: pointer;
  flex-shrink: 0;
}
.admin-push-send {
  width: 100%;
}
.admin-push-status {
  padding: 10px 12px; border-radius: 0;
  font-size: 0.85rem; line-height: 1.4;
  border: 1px solid transparent;
}
.admin-push-status-info {
  background: var(--paper); border-color: var(--rule);
  color: var(--ink-2);
}
.admin-push-status-ok {
  background: var(--terra-bg); border-color: var(--ok);
  color: var(--ok);
}
.admin-push-status-err {
  background: var(--terra-bg); border-color: var(--bad);
  color: var(--bad);
}

/* ── Admin · Stats card clickable ── */
.admin-stats-card-clickable {
  cursor: pointer;
  transition: border-color 0.15s, transform 0.05s;
}
.admin-stats-card-clickable:hover { border-color: var(--terra); }
.admin-stats-card-clickable:active { transform: scale(0.99); }
.admin-stats-hint {
  font-weight: 500; opacity: 0.65; font-size: 0.7rem;
  letter-spacing: 0; text-transform: none;
}

/* ── Admin · Usuarios ── */
.admin-users-search-wrap { padding: 0 16px 10px; }
.admin-users-search {
  width: 100%; padding: 10px 12px;
  background: var(--bg);
  border: 1px solid var(--ink);
  border-radius: 0;
  color: var(--ink); font-family: var(--font-sans); font-size: 0.9rem;
}
.admin-users-search:focus { outline: none; border-color: var(--terra); }
.admin-users-list {
  padding: 0 16px 24px;
  display: flex; flex-direction: column; gap: 8px;
}
.admin-users-empty {
  text-align: center; color: var(--ink-2);
  padding: 24px; font-size: 0.9rem;
}

.admin-user-row {
  background: transparent;
  border: none;
  border-bottom: 1px solid var(--rule);
  border-radius: 0;
  overflow: hidden;
  transition: background 0.15s;
}
.admin-user-row.open { background: var(--paper); }
.admin-user-summary {
  display: grid;
  grid-template-columns: 36px 1fr auto;
  gap: 10px; align-items: center;
  padding: 10px 12px;
  cursor: pointer;
}
.admin-user-summary:hover { background: var(--paper); }

.admin-user-avatar {
  width: 36px; height: 36px; border-radius: 50%;
  object-fit: cover; flex-shrink: 0;
  background: var(--paper); border: 1px solid var(--rule);
}
.admin-user-avatar-fallback {
  display: flex; align-items: center; justify-content: center;
  font-family: var(--font-serif);
  font-weight: 700; font-size: 1rem; color: var(--ink);
}

.admin-user-main { min-width: 0; }
.admin-user-name {
  font-family: var(--font-serif);
  font-weight: 600; font-size: 0.95rem; color: var(--ink);
  letter-spacing: -0.02em;
  white-space: nowrap; overflow: hidden; text-overflow: ellipsis;
}
.admin-user-email {
  font-family: var(--font-mono);
  font-size: 0.72rem; color: var(--ink-2);
  letter-spacing: 0.04em;
  white-space: nowrap; overflow: hidden; text-overflow: ellipsis;
}
.admin-user-chips {
  display: flex; gap: 4px; flex-wrap: wrap; margin-top: 4px;
}
.admin-user-chip {
  display: inline-block; padding: 2px 6px;
  font-family: var(--font-mono);
  font-size: 0.6rem; font-weight: 700; letter-spacing: 0.06em;
  border-radius: 0;
  background: var(--paper); border: 1px solid var(--rule); color: var(--ink-2);
}
.chip-admin    { background: var(--terra-bg); color: var(--terra); border-color: var(--terra); }
.chip-premium  { background: rgba(251,191,36,0.15); color: var(--warn); border-color: var(--warn); }
.chip-notifs   { background: rgba(63,107,74,0.12); color: var(--ok); border-color: var(--ok); }
.chip-fcm      { background: var(--paper); color: var(--ink-2); border-color: var(--rule); }
.chip-disabled { background: transparent; color: var(--bad); border-color: var(--bad); }

.admin-user-meta {
  text-align: right;
  font-family: var(--font-mono); font-size: 0.65rem;
  color: var(--ink-2); letter-spacing: 0.04em;
  white-space: nowrap;
}
.admin-user-favs { font-weight: 700; color: var(--terra); margin-top: 2px; }

.admin-user-detail {
  padding: 0 0 12px;
  border-top: 1px solid var(--rule);
}
.admin-user-detail-inner {
  display: flex; flex-direction: column; gap: 4px;
  padding-top: 10px;
}
.admin-user-kv {
  display: flex; justify-content: space-between; align-items: baseline;
  gap: 12px;
  font-size: 0.85rem;
  padding: 4px 0;
  border-bottom: 1px dashed var(--paper);
}
.admin-user-kv:last-child { border-bottom: none; }
.admin-user-k {
  color: var(--ink-2);
  flex-shrink: 0;
  text-transform: uppercase;
  font-size: 0.7rem; letter-spacing: 0.5px; font-weight: 600;
}
.admin-user-v {
  text-align: right;
  font-variant-numeric: tabular-nums;
  word-break: break-all;
  display: inline-flex; align-items: center; gap: 6px;
  justify-content: flex-end;
}
.admin-user-v a { color: var(--terra); text-decoration: none; }
.admin-user-copy {
  background: var(--rule);
  border: 1px solid var(--rule);
  border-radius: 0;
  padding: 2px 6px;
  font-size: 0.75rem;
  cursor: pointer; color: inherit;
}
.admin-user-copy:hover { background: var(--paper); }
.admin-user-pushbtn {
  margin-top: 10px;
  width: 100%;
}

/* ── Botón Aprobar (verde) ── */
.admin-btn-approve {
  background: var(--terra-bg);
  color: var(--ok);
  border-color: var(--ok);
}
.admin-btn-approve:hover { opacity: 0.85; }

/* ── Mapa interactivo Leaflet en submissions ── */
.admin-map-leaflet {
  width: 100%;
  height: 200px;
  border-radius: 0;
  margin: 10px 0;
  border: 1px solid var(--rule);
  overflow: hidden;
  z-index: 0;
}

/* ── Notas comunitarias (tab admin) ── */
.admin-notes-list { display: flex; flex-direction: column; gap: 10px; padding: 0 16px 16px; }
.admin-note-card {
  padding: 12px 14px;
  border-radius: 0;
  border: 1px solid var(--rule);
}
.admin-note-header {
  display: flex;
  justify-content: space-between;
  align-items: baseline;
  margin-bottom: 6px;
  gap: 8px;
}
.admin-note-sector { font-size: 0.78rem; color: var(--terra); font-weight: 600; }
.admin-note-date   { font-size: 0.75rem; color: var(--ink-2); white-space: nowrap; }
.admin-note-text   { font-size: 0.9rem; line-height: 1.45; margin-bottom: 8px; }
.admin-note-footer {
  display: flex;
  align-items: center;
  gap: 10px;
  flex-wrap: wrap;
}
.admin-note-autor  { font-size: 0.78rem; color: var(--ink-2); }
.admin-note-votes  { font-size: 0.78rem; color: var(--ink-2); margin-right: auto; }
.admin-note-delete { padding: 4px 10px; font-size: 0.78rem; }
.admin-note-deleted { opacity: 0.45; }
.admin-note-badge-deleted {
  font-size: 0.72rem;
  color: var(--ink-2);
  background: var(--paper);
  border-radius: 4px;
  padding: 1px 6px;
  margin-left: auto;
}

/* ── §D — Tabla densa de horas (hours-strip) ── */
.hours-strip { display: flex; overflow-x: auto; border-top: 1px solid var(--ink); border-bottom: 1px solid var(--rule); padding: 0; gap: 0; scrollbar-width: none; margin-bottom: 16px; }
.hours-strip::-webkit-scrollbar { display: none; }
.hour-col { flex: 0 0 64px; display: grid; grid-template-rows: auto auto auto auto auto auto; gap: 4px; padding: 10px 0; text-align: center; border-right: 1px solid var(--rule); }
.hour-col:last-child { border-right: 0; }
.hour-col.is-now { background: var(--ink); color: var(--bg); }
.hour-time { font-family: var(--font-mono); font-size: 8px; letter-spacing: 0.08em; color: var(--ink-2); text-transform: uppercase; }
.hour-col.is-now .hour-time { color: var(--bg); opacity: 0.7; }
.hour-icon { display: flex; justify-content: center; color: var(--ink-2); }
.hour-col.is-now .hour-icon { color: var(--bg); opacity: 0.8; }
.hour-temp { font-family: var(--font-serif); font-size: 16px; font-weight: 600; letter-spacing: -0.03em; }
.hour-prob, .hour-wind { font-family: var(--font-mono); font-size: 11px; color: var(--ink-2); font-weight: 700; }
.hour-col.is-now .hour-prob, .hour-col.is-now .hour-wind { color: var(--bg); opacity: 0.8; }
.hour-mm { color: var(--rain, #4a90d9); font-weight: 800; }
.hour-wind-unit { font-size: 9px; opacity: 0.7; }
.hour-score { font-family: var(--font-serif); font-size: 13px; font-weight: 700; }
.hour-col.is-now .hour-score { color: var(--bg) !important; }

/* §A1 — 7 días en modal de día */
.dv-section-label { font-family: var(--font-mono); font-size: 10px; letter-spacing: 0.18em; color: var(--ink-2); padding: 16px 0 8px; text-transform: uppercase; }
.dv-day-list { border-top: 1px solid var(--ink); }
.dv-day-row { display: grid; grid-template-columns: 52px 22px 38px 1fr 14px; align-items: center; gap: 8px; width: 100%; padding: 11px 0; background: transparent; border: 0; border-bottom: 1px solid var(--rule); cursor: pointer; text-align: left; }
.dv-day-row:hover { background: var(--paper); }
.dv-day-row.is-active { background: var(--paper); }
.dv-day-name { font-family: var(--font-mono); font-size: 10px; letter-spacing: 0.1em; text-transform: uppercase; color: var(--ink); }
.dv-day-row.is-active .dv-day-name { color: var(--terra); font-weight: 700; }
.dv-day-icon { color: var(--ink-2); display: flex; }
.dv-day-score { font-family: var(--font-serif); font-size: 17px; font-weight: 700; letter-spacing: -0.03em; }
.dv-day-range { display: grid; grid-template-columns: 26px 1fr 26px; align-items: center; gap: 6px; font-family: var(--font-mono); font-size: 10px; color: var(--ink-2); }
.dv-day-bar { position: relative; height: 4px; background: var(--rule); border-radius: 0; }
.dv-day-bar > span { position: absolute; top: 0; bottom: 0; background: var(--ink); }
.dv-day-arrow { font-size: 16px; color: var(--ink-3); justify-self: end; }

/* ── Log de actividad (tab admin) ── */
.admin-activity-list { display: flex; flex-direction: column; gap: 8px; padding: 0 16px 16px; }
.admin-act-row {
  padding: 10px 14px;
  border-radius: 0;
  border: 1px solid var(--rule);
}
.admin-act-header {
  display: flex;
  justify-content: space-between;
  align-items: baseline;
  gap: 8px;
  margin-bottom: 4px;
}
.admin-act-label { font-size: 0.88rem; font-weight: 600; }
.admin-act-date  { font-size: 0.75rem; color: var(--ink-2); white-space: nowrap; }
.admin-act-details { display: flex; flex-wrap: wrap; gap: 6px; margin-top: 4px; }
.admin-act-kv {
  display: inline-flex;
  gap: 4px;
  font-size: 0.75rem;
  background: var(--paper);
  padding: 2px 8px;
  border-radius: 0;
}
.admin-act-k { color: var(--ink-2); }
.admin-act-v { color: var(--ink); }

/* ── Sectores community (tab admin) ── */
.admin-comm-list { display: flex; flex-direction: column; gap: 8px; padding: 0 16px 16px; }
.admin-comm-row {
  border-radius: 0;
  border: 1px solid var(--rule);
  overflow: hidden;
}
.admin-comm-summary {
  display: flex;
  align-items: center;
  gap: 10px;
  padding: 10px 14px;
  flex-wrap: wrap;
}
.admin-comm-name   { font-weight: 600; font-size: 0.95rem; flex: 1 1 120px; }
.admin-comm-meta   { font-size: 0.8rem; color: var(--ink-2); flex: 2 1 180px; }
.admin-comm-coords { font-size: 0.78rem; color: var(--terra); font-variant-numeric: tabular-nums; }
.admin-comm-edit   { margin-left: auto; }
.admin-comm-form   { padding: 14px; border-top: 1px solid var(--rule); }
.admin-comm-form-inner { display: flex; flex-direction: column; gap: 10px; }
.admin-comm-field  { display: flex; flex-direction: column; gap: 4px; }
.admin-comm-field label { font-size: 0.78rem; color: var(--ink-2); }
.admin-comm-field input {
  background: var(--paper);
  border: 1px solid var(--rule);
  border-radius: 0;
  padding: 7px 10px;
  color: var(--ink);
  font-size: 0.9rem;
}
.admin-comm-field input:focus { outline: none; border-color: var(--terra); }

/* ── §E2 Admin table Cumbre ── */
.admin-table { width: 100%; border-collapse: collapse; font-family: var(--font-sans); }
.admin-table th { font-family: var(--font-mono); font-size: 10px; letter-spacing: 0.14em; text-transform: uppercase; color: var(--ink-2); padding: 10px 8px; border-bottom: 1px solid var(--ink); text-align: left; }
.admin-table td { padding: 10px 8px; border-bottom: 1px solid var(--rule); font-size: 13px; color: var(--ink); vertical-align: middle; }
.admin-table tr:hover td { background: var(--paper); }

/* ── §F — Notificaciones Cumbre ── */
input[type="time"].cumbre-time { font-family: var(--font-serif); font-size: 32px; font-weight: 600; letter-spacing: -0.03em; color: var(--ink); background: transparent; border: 0; border-bottom: 2px solid var(--ink); padding: 4px 0; width: 140px; }
.dow-row { display: flex; gap: 4px; flex-wrap: wrap; margin: 8px 0; }
.dow-btn { width: 36px; height: 36px; border: 1px solid var(--ink); background: transparent; font-family: var(--font-mono); font-size: 11px; font-weight: 700; color: var(--ink); border-radius: 0; cursor: pointer; transition: background 0.12s; }
.dow-btn.is-active { background: var(--ink); color: var(--bg); }
.threshold-row { display: grid; grid-template-columns: 1fr auto; align-items: center; gap: 16px; margin: 8px 0; }
input[type="range"].cumbre-range { -webkit-appearance: none; appearance: none; height: 2px; background: var(--ink); width: 100%; }
input[type="range"].cumbre-range::-webkit-slider-thumb { -webkit-appearance: none; appearance: none; width: 18px; height: 18px; background: var(--terra); border-radius: 50%; cursor: pointer; border: 2px solid var(--bg); box-shadow: 0 0 0 1px var(--ink); }
input[type="range"].cumbre-range::-moz-range-thumb { width: 18px; height: 18px; background: var(--terra); border-radius: 50%; cursor: pointer; border: 2px solid var(--bg); box-shadow: 0 0 0 1px var(--ink); }
.threshold-out { font-family: var(--font-serif); font-size: 22px; font-weight: 700; color: var(--ink); }
.watch-list { margin: 8px 0; border-top: 1px solid var(--ink); }
.watch-row { display: grid; grid-template-columns: 24px 1fr auto; gap: 12px; align-items: center; padding: 10px 0; border-bottom: 1px solid var(--rule); cursor: pointer; }
.watch-row input[type="checkbox"] { appearance: none; -webkit-appearance: none; width: 18px; height: 18px; border: 1px solid var(--ink); background: var(--bg); border-radius: 0; cursor: pointer; position: relative; flex-shrink: 0; }
.watch-row input[type="checkbox"]:checked { background: var(--ink); }
.watch-row input[type="checkbox"]:checked::after { content: ""; position: absolute; left: 4px; top: 1px; width: 6px; height: 11px; border: solid var(--bg); border-width: 0 2px 2px 0; transform: rotate(45deg); }
.watch-name { font-family: var(--font-serif); font-size: 16px; color: var(--ink); }
.watch-meta { font-family: var(--font-mono); font-size: 9px; letter-spacing: 0.14em; color: var(--ink-2); text-transform: uppercase; }
.mono-label { display: block; font-family: var(--font-mono); font-size: 10px; letter-spacing: 0.14em; text-transform: uppercase; color: var(--ink-2); margin: 16px 0 6px; }
.btn-primary { background: var(--ink); color: var(--bg); border: 1px solid var(--ink); padding: 14px 32px; font-family: var(--font-mono); font-size: 11px; letter-spacing: 0.14em; text-transform: uppercase; font-weight: 600; border-radius: 0; cursor: pointer; }
.btn-primary:hover { background: var(--terra); border-color: var(--terra); }
.cumbre-toggle { position: relative; display: inline-block; width: 44px; height: 24px; }
.cumbre-toggle input { opacity: 0; width: 0; height: 0; }
.cumbre-toggle-track { position: absolute; inset: 0; background: var(--paper); border: 1px solid var(--ink); cursor: pointer; transition: 0.15s; }
.cumbre-toggle-thumb { position: absolute; top: 2px; left: 2px; width: 18px; height: 18px; background: var(--ink); transition: 0.15s; }
.cumbre-toggle input:checked + .cumbre-toggle-track { background: var(--terra); border-color: var(--terra); }
.cumbre-toggle input:checked + .cumbre-toggle-track .cumbre-toggle-thumb { left: 22px; background: var(--bg); }

/* ══════════════════════════════════════════════
   CLAUDE DESIGN V3 — UX improvements
   ══════════════════════════════════════════════ */

/* ── 1. Banner "¿Puedo escalar hoy?" ── */
.climb-verdict {
  display: flex; align-items: baseline; gap: 8px;
  padding: 12px 14px; margin: 12px 0 16px;
  border: 2px solid var(--ink); border-left-width: 6px;
  font-family: var(--font-mono); text-transform: uppercase;
  letter-spacing: 0.06em; line-height: 1.2;
  flex-wrap: wrap;            /* evita que se salga en pantallas estrechas */
  box-sizing: border-box;
  max-width: 100%;
}
.climb-verdict .cv-status {
  font-family: var(--font-serif); font-size: 1.3rem; font-weight: 700;
  letter-spacing: -0.02em; flex-shrink: 0;
}
.climb-verdict .cv-text {
  font-size: 0.7rem; font-weight: 700; color: var(--ink-2);
  min-width: 0; word-break: break-word;
}
.climb-verdict.cv-good { border-color: var(--ok); border-left-color: var(--ok); }
.climb-verdict.cv-good .cv-status { color: var(--ok); }
.climb-verdict.cv-mid  { border-color: var(--warn); border-left-color: var(--warn); }
.climb-verdict.cv-mid  .cv-status { color: var(--warn); }
.climb-verdict.cv-bad  { border-color: var(--bad); border-left-color: var(--bad); }
.climb-verdict.cv-bad  .cv-status { color: var(--bad); }

/* ── 2. Mejor ventana resaltada en hourly — fondo terra sólido ── */
.hour-col.is-best-window {
  position: relative;
  background: var(--terra) !important;
  border-color: var(--terra) !important;
  border-top: 2px solid var(--terra) !important;
  border-bottom: 2px solid var(--terra) !important;
}
.hour-col.is-best-window * {
  color: var(--bg) !important;
}
.hour-col.is-best-window .hour-time {
  font-weight: 800 !important;
}
.hour-col.best-window-start::before {
  content: '◆ VENTANA ÓPTIMA';
  position: absolute;
  top: -22px; left: 0;
  font-family: var(--font-mono); font-size: 0.6rem; font-weight: 800;
  letter-spacing: 0.15em; color: var(--bg); white-space: nowrap;
  background: var(--terra); padding: 3px 8px;
  z-index: 3;
}
.hours-strip { padding-top: 24px !important; overflow-y: visible; }

/* ── 3. Score breakdown — ancho completo, no se sale ── */
.score-breakdown {
  width: 100%; max-width: 100%;
  margin-top: 12px; padding-top: 10px;
  border-top: 1px solid var(--rule);
  box-sizing: border-box;
}
.score-toggle {
  display: flex; align-items: center; justify-content: space-between;
  width: 100%; background: transparent; border: 0; padding: 6px 0;
  font-family: var(--font-mono); font-size: 0.62rem; font-weight: 700;
  letter-spacing: 0.12em; text-transform: uppercase; color: var(--ink-3);
  cursor: pointer; text-align: left;
}
.score-toggle:hover { color: var(--ink); }
.score-chevron { transition: transform 0.18s; font-size: 0.7rem; }
.score-factors {
  display: block; width: 100%; padding-top: 8px;
  box-sizing: border-box;
}
.score-factor {
  display: grid; grid-template-columns: 1fr auto auto;
  align-items: baseline; gap: 10px;
  padding: 8px 0; border-bottom: 1px solid var(--rule);
  font-family: var(--font-mono); font-size: 0.72rem;
  width: 100%; box-sizing: border-box;
}
.score-factor:last-child { border-bottom: 0; }
.sf-label { color: var(--ink); font-weight: 600; letter-spacing: 0.04em; text-transform: uppercase; font-size: 0.6rem; }
.sf-val   { color: var(--ink); font-weight: 700; white-space: nowrap; }
.sf-sym   { font-size: 0.95rem; font-weight: 700; min-width: 16px; text-align: center; }
.sf-ok  .sf-sym { color: var(--ok); }
.sf-mid .sf-sym { color: var(--warn); }
.sf-bad .sf-sym { color: var(--bad); }

/* enhance7Days eliminado — los 7 días vuelven al diseño original */

/* mini-gráfico de lluvia eliminado por feedback */

/* ── v3: TOP 5 PARA HOY banner ── */
.top5-banner, .all-banner {
  font-family: var(--font-mono); font-size: 0.62rem; font-weight: 700;
  letter-spacing: 0.18em; text-transform: uppercase;
  padding: 16px 0 8px;
  border-bottom: 2px solid var(--ink);
  margin-bottom: 4px;
}
.top5-banner { color: var(--terra); }
.all-banner  { color: var(--ink-3); margin-top: 24px; border-top: 0; }

/* ── Aviso "ningún sector bueno hoy" ── */
.no-good-warn {
  display: block; margin: 4px 0 12px;
  padding: 10px 12px;
  background: var(--terra-bg);
  border: 1px solid var(--bad);
  color: var(--bad);
  font-family: var(--font-mono); font-size: 0.7rem; font-weight: 700;
  letter-spacing: 0.04em; line-height: 1.4;
}

.top5-banner.top5-banner-bad { color: var(--bad); }

/* ══════════════════════════════════════════════
   v3-extras CSS
   ══════════════════════════════════════════════ */

/* ── Header: actualizado + refresh ── */
.header-eyebrow { gap: 8px; }
.header-updated {
  margin-left: auto;
  font-family: var(--font-mono); font-size: 0.55rem; font-weight: 500;
  color: var(--ink-3); letter-spacing: 0.08em;
  text-transform: uppercase;
}
.header-refresh {
  background: transparent; border: 1px solid var(--ink);
  color: var(--ink); width: 22px; height: 22px;
  display: inline-flex; align-items: center; justify-content: center;
  cursor: pointer; padding: 0;
  border-radius: 0;
  transition: background 0.12s, color 0.12s;
}
.header-refresh:hover { background: var(--ink); color: var(--bg); }
.header-refresh.spinning svg { animation: hdr-spin 0.6s linear infinite; transform-origin: center; }
@keyframes hdr-spin { to { transform: rotate(360deg); } }

/* ── Pull-to-refresh ── */
.ptr-indicator {
  position: fixed; top: 0; left: 0; right: 0;
  height: 50px; line-height: 50px; text-align: center;
  background: var(--paper); border-bottom: 1px solid var(--rule);
  font-family: var(--font-mono); font-size: 0.65rem; font-weight: 700;
  letter-spacing: 0.14em; color: var(--ink-2);
  z-index: 9000; pointer-events: none;
  transform: translateY(-100%);
  transition: transform 0.25s;
}
.ptr-indicator.ready { color: var(--terra); border-bottom-color: var(--terra); }

/* Hint primera sesión para descubrir pull-to-refresh */
.ptr-hint {
  position: fixed;
  top: 76px;
  left: 50%;
  transform: translateX(-50%) translateY(-12px);
  background: var(--ink);
  color: var(--paper);
  padding: 10px 16px;
  font-family: 'JetBrains Mono', monospace;
  font-size: 0.72rem;
  letter-spacing: 0.06em;
  white-space: nowrap;
  z-index: 9999;
  opacity: 0;
  transition: opacity 0.3s, transform 0.3s;
  pointer-events: none;
  box-shadow: 0 2px 8px rgba(0,0,0,0.18);
}
.ptr-hint.visible {
  opacity: 1;
  transform: translateX(-50%) translateY(0);
}

/* Leyenda colapsable del mapa */
.cumbre-legend {
  background: var(--paper);
  border: 1px solid var(--rule);
  font-family: 'JetBrains Mono', monospace;
  font-size: 0.7rem;
}
.cumbre-legend .cl-toggle {
  width: 28px; height: 28px;
  border: none;
  background: var(--paper);
  color: var(--ink);
  font-weight: 700;
  font-size: 0.95rem;
  cursor: pointer;
  display: block;
}
.cumbre-legend .cl-panel {
  display: none;
  padding: 8px 10px 6px;
  min-width: 130px;
  border-top: 1px solid var(--rule);
}
.cumbre-legend.open .cl-panel { display: block; }
.cumbre-legend.open .cl-toggle::before { content: '×'; font-size: 1rem; }
.cumbre-legend.open .cl-toggle { font-size: 0; }
.cumbre-legend.open .cl-toggle::before { font-size: 1rem; }
.cl-row {
  display: flex; align-items: center; gap: 8px;
  margin: 4px 0;
  color: var(--ink);
  text-transform: uppercase;
  letter-spacing: 0.04em;
}
.cl-row small { color: var(--dim); text-transform: none; letter-spacing: 0; }
.cl-icon {
  width: 14px; height: 14px;
  display: inline-block;
  flex-shrink: 0;
}
.cl-sector { background: var(--terra); clip-path: polygon(50% 10%, 95% 90%, 5% 90%); }
.cl-piedra { background: var(--terra); border-radius: 50% 50% 50% 0; transform: rotate(-45deg); }
.cl-zona   { background: rgba(94,107,79,0.3); border: 1.5px solid var(--moss); clip-path: polygon(50% 0%, 95% 25%, 95% 75%, 50% 100%, 5% 75%, 5% 25%); }

/* ── Estrella en sector card ── */
.sc-fav-btn {
  background: transparent; border: none;
  color: var(--ink-3); cursor: pointer;
  font-size: 1.05rem; line-height: 1;
  padding: 0 4px; flex-shrink: 0;
  font-family: var(--font-serif);
}
.sc-fav-btn:hover { color: var(--terra); }
.sc-fav-btn.is-fav { color: var(--terra); }

/* ── Recientes en búsqueda ── */
.search-section-label {
  font-family: var(--font-mono); font-size: 0.55rem; font-weight: 700;
  letter-spacing: 0.18em; text-transform: uppercase;
  color: var(--ink-3); margin: 12px 0 4px 4px;
}
.search-section-label:first-child { margin-top: 4px; }
.recent-item {
  display: flex; align-items: baseline; justify-content: space-between;
  gap: 8px;
}
.ri-name { color: var(--ink); font-weight: 600; }
.ri-time {
  font-family: var(--font-mono); font-size: 0.6rem;
  color: var(--ink-3); letter-spacing: 0.06em;
}

/* ── Empty state inteligente ── */
.empty-smart {
  text-align: center; padding: 40px 20px;
  border: 1px solid var(--rule);
  margin-top: 20px;
}
.es-title {
  font-family: var(--font-mono); font-size: 0.75rem; font-weight: 700;
  letter-spacing: 0.12em; text-transform: uppercase;
  color: var(--bad); margin-bottom: 14px;
}
.es-detail {
  font-family: var(--font-serif); font-size: 1rem;
  color: var(--ink); line-height: 1.5; margin-bottom: 24px;
}
.es-detail strong { color: var(--terra); }
.es-actions { display: flex; flex-direction: column; gap: 8px; }
.es-btn {
  padding: 12px 18px; border-radius: 0;
  background: transparent; border: 1px solid var(--ink);
  color: var(--ink); font-family: var(--font-mono);
  font-size: 0.7rem; font-weight: 700;
  letter-spacing: 0.1em; text-transform: uppercase;
  cursor: pointer; transition: background 0.12s;
}
.es-btn:hover { background: var(--paper); }
.es-btn-primary { background: var(--ink); color: var(--bg); }
.es-btn-primary:hover { background: var(--terra); border-color: var(--terra); }

/* ── Day picker inline (nuevo) ── */
.filter-hint {
  font-family: var(--font-mono); font-size: 0.55rem; font-weight: 500;
  color: var(--terra); letter-spacing: 0.08em; text-transform: uppercase;
  margin-left: 6px;
}

/* ── Bloque de lluvia detallado (cuando hay varios días) ── */
.rain-block {
  margin: 4px 0 8px;
  padding: 6px 0;
  border-top: 1px dashed var(--terra);
  border-bottom: 1px dashed var(--terra);
}
.rain-block-header {
  font-family: var(--font-mono); font-size: 9px; font-weight: 700;
  color: var(--terra); letter-spacing: 0.14em; text-transform: uppercase;
  margin-bottom: 4px;
}
.rain-block-list {
  display: flex; flex-direction: column; gap: 2px;
}
.rain-block-row {
  display: grid; grid-template-columns: 56px 1fr auto;
  align-items: center; gap: 8px;
  font-family: var(--font-mono); font-size: 0.62rem;
}
.rb-day { color: var(--ink-2); font-weight: 700; letter-spacing: 0.06em; text-transform: uppercase; }
.rb-bar {
  height: 6px; background: var(--rule);
  display: block; position: relative; overflow: hidden;
}
.rb-bar > span {
  display: block; height: 100%;
  background: var(--terra);
  transition: width 0.4s;
}
.rb-mm {
  color: var(--ink); font-weight: 700;
  white-space: nowrap; min-width: 36px; text-align: right;
}

/* ── Slider de distancia ── */

/* ── Dropdown de roca — estilo Cumbre puro (mono, hairline, sin sombras) ── */
.filter-dropdown { position: relative; margin-bottom: 4px; }
.fd-toggle {
  width: 100%; display: flex; justify-content: space-between; align-items: center;
  padding: 7px 10px;
  background: transparent; border: 1px solid var(--ink);
  color: var(--ink); cursor: pointer;
  font-family: var(--font-mono); font-size: 0.7rem; font-weight: 700;
  letter-spacing: 0.06em; text-transform: uppercase;
  border-radius: 0;
  transition: background 0.12s;
}
.fd-toggle:hover { background: var(--paper); }
.fd-toggle.open { background: var(--ink); color: var(--bg); }
.fd-toggle.open .fd-chevron { transform: rotate(180deg); color: var(--bg); }
.fd-chevron { transition: transform 0.18s; font-size: 0.65rem; color: var(--ink); }
.fd-value { color: inherit; }

.fd-panel {
  position: absolute; top: 100%; left: 0; right: 0;
  background: var(--bg);
  border: 1px solid var(--ink); border-top: none;
  z-index: 10;
  max-height: 240px; overflow-y: auto;
  /* sin box-shadow — Cumbre = hairlines, no profundidad */
}
.fd-option {
  display: flex; align-items: center; gap: 10px;
  padding: 8px 10px;
  cursor: pointer;
  border-bottom: 1px solid var(--rule);
  font-family: var(--font-mono); font-size: 0.7rem; font-weight: 600;
  letter-spacing: 0.04em; text-transform: uppercase;
  color: var(--ink);
  user-select: none;
}
.fd-option:last-child { border-bottom: 0; }
.fd-option:hover { background: var(--paper); }
/* Check personalizado (no checkbox nativo) */
.fd-check {
  width: 13px; height: 13px;
  border: 1px solid var(--ink);
  background: transparent;
  flex-shrink: 0;
  position: relative;
  display: inline-block;
}
.fd-option.active .fd-check {
  background: var(--terra);
  border-color: var(--terra);
}
.fd-option.active .fd-check::after {
  content: '';
  position: absolute;
  left: 3px; top: 0;
  width: 4px; height: 8px;
  border-right: 1.5px solid var(--bg);
  border-bottom: 1.5px solid var(--bg);
  transform: rotate(45deg);
}
.fd-option > span:last-child { flex: 1; }

/* ── Topo-map real (MapLibre) ── */
.topo-map-block.topo-map-real {
  height: 280px !important;
  width: 100%;
  border: 1px solid var(--ink);
  background: #aad3df;     /* color de agua de OSM mientras carga */
  position: relative;
  margin: 16px 0;
  overflow: hidden;
  display: block;
}
.topo-map-block.topo-map-real .maplibregl-map {
  height: 100% !important;
  width: 100% !important;
  background: #aad3df;
  font-family: var(--font-sans);
}
/* Dark mode: en vez de filter invert (que se ve fatal), usamos tiles oscuros
 * nativos (OSM) — ver topo-map.js. Solo ajustamos el fondo
 * del contenedor mientras cargan los tiles. */
[data-theme="dark"] .topo-map-block.topo-map-real {
  background: #0e0e0e;
}
[data-theme="dark"] .topo-map-block.topo-map-real .maplibregl-map {
  background: #0e0e0e;
}

.cumbre-marker { background: transparent !important; border: none !important; }

/* Popup estilo Cumbre — MapLibre */
.maplibregl-popup { z-index: 10; }
.maplibregl-popup .maplibregl-popup-content {
  background: var(--bg);
  border: 1px solid var(--ink);
  border-radius: 0;
  box-shadow: none;
  padding: 6px 10px;
  font-family: var(--font-mono); font-size: 11px;
  letter-spacing: 0.06em; color: var(--ink);
}
.maplibregl-popup .maplibregl-popup-tip {
  background: var(--bg);
  border: 1px solid var(--ink);
  box-shadow: none;
}
.maplibregl-popup .maplibregl-popup-close-button {
  font-size: 16px;
  color: var(--ink);
  right: 4px;
  top: 4px;
}

/* Controles MapLibre */
.maplibregl-ctrl-group {
  background: var(--bg);
  border: 1px solid var(--ink);
}
.maplibregl-ctrl-group button {
  background: var(--bg);
  color: var(--ink);
}
.maplibregl-ctrl-group button:hover {
  background: var(--paper);
}
.maplibregl-ctrl-group button .maplibregl-ctrl-icon {
  filter: invert(0);
}
[data-theme="dark"] .maplibregl-ctrl-group button .maplibregl-ctrl-icon {
  filter: invert(1);
}

/* Selector de capas personalizado */
.cumbre-layer-ctrl {
  display: flex;
  flex-direction: column;
  gap: 2px;
}
.cumbre-layer-ctrl .lc-btn {
  width: 32px;
  height: 32px;
  display: flex;
  align-items: center;
  justify-content: center;
  font-size: 16px;
  border: none;
  background: var(--bg);
  color: var(--ink);
  cursor: pointer;
  opacity: 0.5;
  transition: opacity 0.15s;
}
.cumbre-layer-ctrl .lc-btn.active {
  opacity: 1;
  background: var(--terra);
  color: var(--bg);
}
.cumbre-layer-ctrl .lc-btn:hover {
  opacity: 0.8;
}

.maplibregl-ctrl-scale {
  background: var(--bg) !important; border: 1px solid var(--ink) !important;
  border-top: none !important;
  font-family: var(--font-mono) !important; font-size: 9px !important;
  color: var(--ink) !important; padding: 2px 5px !important;
}
.maplibregl-ctrl-zoom a {
  background: var(--bg) !important; color: var(--ink) !important;
  border: 1px solid var(--ink) !important;
  font-family: var(--font-mono) !important;
}

.topo-fallback {
  padding: 40px 20px; text-align: center;
  font-family: var(--font-mono); font-size: 0.7rem;
  color: var(--ink-3); letter-spacing: 0.1em; text-transform: uppercase;
}

/* ── Banner verdicto clickeable ── */
.climb-verdict.cv-clickable { cursor: pointer; }
.climb-verdict.cv-clickable:hover { background: var(--paper); }
.cv-jump {
  display: inline-block; margin-left: 4px;
  color: var(--terra); font-weight: 800;
}

/* ── Botón limpiar día ── */
.filter-chip-clear {
  display: inline-flex; align-items: center; justify-content: center;
  width: 28px; height: 28px;
  background: transparent; border: 1px solid var(--bad);
  color: var(--bad); cursor: pointer;
  font-family: var(--font-mono); font-size: 0.85rem;
  border-radius: 0; padding: 0;
  flex-shrink: 0; margin-left: auto;
}
.filter-chip-clear:hover { background: var(--bad); color: var(--bg); }

/* ── GPS user marker en topo-map ── */
.user-marker { background: transparent !important; border: none !important; }
.user-dot {
  width: 16px; height: 16px;
  background: #3b82f6;
  border: 3px solid #fff;
  border-radius: 50%;
  box-shadow: 0 0 0 1px rgba(0,0,0,0.2), 0 0 12px rgba(59,130,246,0.5);
  position: relative;
}
.user-dot::after {
  content: '';
  position: absolute;
  top: -3px; left: -3px;
  width: 16px; height: 16px;
  border: 3px solid #3b82f6;
  border-radius: 50%;
  animation: user-pulse 2s ease-out infinite;
  opacity: 0.8;
}
@keyframes user-pulse {
  0%   { transform: scale(1);   opacity: 0.8; }
  100% { transform: scale(2.6); opacity: 0; }
}

/* Botón "centrar en mí" */
.locate-btn {
  width: 32px; height: 32px;
  background: var(--bg);
  border: 1px solid var(--ink);
  color: var(--ink);
  cursor: pointer;
  font-size: 18px; font-weight: 700;
  display: flex; align-items: center; justify-content: center;
  font-family: var(--font-sans);
}
.locate-btn:hover { background: var(--paper); }

/* ══════════════════════════════════════════════
   EDITOR DE BLOQUES (admin)
   ══════════════════════════════════════════════ */

.admin-blocks-intro {
  padding: 16px;
  border: 1px solid var(--rule);
  margin: 12px 16px;
  text-align: center;
}
.admin-blocks-intro p {
  font-size: 0.85rem; color: var(--ink-2); line-height: 1.5;
  margin: 0 0 16px;
}
.admin-blocks-open-btn {
  background: var(--ink); color: var(--bg);
  border: 1px solid var(--ink); border-radius: 0;
  padding: 12px 20px; cursor: pointer;
  font-family: var(--font-mono); font-size: 0.75rem; font-weight: 700;
  letter-spacing: 0.12em;
}
.admin-blocks-open-btn:hover { background: var(--terra); border-color: var(--terra); }

/* Overlay editor a pantalla completa */
.block-editor {
  position: fixed; inset: 0; z-index: 2000;
  background: var(--bg);
  display: flex; flex-direction: column;
}
.be-header {
  display: flex; align-items: center; gap: 8px;
  padding: 10px 14px;
  border-bottom: 1px solid var(--ink);
  flex-shrink: 0;
}
.be-close {
  background: transparent; border: 1px solid var(--ink);
  color: var(--ink); padding: 6px 12px; border-radius: 0;
  font-family: var(--font-mono); font-size: 0.7rem; font-weight: 700;
  cursor: pointer; letter-spacing: 0.06em;
  white-space: nowrap;
}
.be-close:hover { background: var(--paper); }
.be-back {
  background: var(--terra); border: 1px solid var(--terra);
  color: var(--paper); padding: 6px 12px; border-radius: 0;
  font-family: var(--font-mono); font-size: 0.7rem; font-weight: 700;
  cursor: pointer; letter-spacing: 0.06em; white-space: nowrap;
}
.be-back:hover { background: var(--terra-dark, #a3350c); }
.be-school-name {
  font-family: var(--font-mono); font-size: 0.8rem;
  font-weight: 700; color: var(--terra);
  white-space: nowrap; overflow: hidden; text-overflow: ellipsis;
  max-width: 250px;
}
.be-active-sector {
  display: flex; align-items: center; gap: 6px;
  padding: 4px 10px;
  background: var(--paper);
  border: 1px solid var(--rule);
  white-space: nowrap;
}
.be-active-label {
  font-family: var(--font-mono); font-size: 0.55rem;
  color: var(--ink-3); letter-spacing: 0.1em;
}
.be-active-name {
  font-family: var(--font-mono); font-size: 0.75rem;
  font-weight: 700; color: var(--terra);
  max-width: 180px; overflow: hidden; text-overflow: ellipsis;
}
.be-zoom {
  font-family: var(--font-mono); font-size: 0.65rem;
  color: var(--ink-2); letter-spacing: 0.06em;
  white-space: nowrap;
}
.be-counter {
  font-family: var(--font-mono); font-size: 0.65rem;
  color: var(--terra); letter-spacing: 0.08em;
  white-space: nowrap;
}
.be-undo {
  background: transparent; border: 1px solid var(--rule);
  color: var(--ink-2); padding: 4px 10px; border-radius: 0;
  font-family: var(--font-mono); font-size: 0.6rem; font-weight: 700;
  cursor: pointer; letter-spacing: 0.06em; white-space: nowrap;
}
.be-undo:hover { background: var(--paper); color: var(--ink); }
.be-hint {
  padding: 8px 14px; background: var(--paper);
  border-bottom: 1px solid var(--rule);
  font-family: var(--font-mono); font-size: 0.6rem;
  color: var(--ink-2); letter-spacing: 0.06em; text-transform: uppercase;
  flex-shrink: 0; line-height: 1.5;
}

.be-map { width: 100%; height: 100%; }

/* Modal nombre */
.be-modal-overlay {
  position: fixed; inset: 0; z-index: 2100;
  background: rgba(var(--ink-rgb), 0.5);
  display: flex; align-items: flex-start; justify-content: center;
  padding: 20px; overflow-y: auto;
}
.be-modal {
  background: var(--bg); border: 1px solid var(--ink);
  padding: 20px; max-width: 360px; width: 100%; margin: auto;
}
.be-modal h3 {
  font-family: var(--font-serif); font-size: 1.2rem;
  margin: 0 0 16px; color: var(--ink);
}
.be-modal label {
  display: block;
  font-family: var(--font-mono); font-size: 0.6rem;
  letter-spacing: 0.12em; text-transform: uppercase;
  color: var(--ink-2); margin-bottom: 4px; margin-top: 10px;
}
.be-modal input {
  width: 100%; padding: 8px 10px;
  background: transparent; border: 0; border-bottom: 1px solid var(--ink);
  color: var(--ink); font-size: 1rem; outline: none;
  font-family: var(--font-sans); box-sizing: border-box;
}
.be-modal input:focus { border-bottom-color: var(--terra); }
.be-modal-actions {
  display: flex; gap: 8px; margin-top: 20px;
}
.be-modal-cancel, .be-modal-save {
  flex: 1; padding: 10px;
  border-radius: 0; cursor: pointer;
  font-family: var(--font-mono); font-size: 0.7rem; font-weight: 700;
  letter-spacing: 0.08em; text-transform: uppercase;
}
.be-modal-cancel {
  background: transparent; border: 1px solid var(--ink); color: var(--ink);
}
.be-modal-cancel:hover { background: var(--paper); }
.be-modal-save {
  background: var(--ink); border: 1px solid var(--ink); color: var(--bg);
}
.be-modal-save:hover { background: var(--terra); border-color: var(--terra); }

/* Marker de bloque (en editor y en topo-map) */
.block-marker { background: transparent !important; border: none !important; }
.bm-pin {
  width: 14px; height: 14px;
  border-radius: 50%;
  border: 2px solid var(--ink);
  box-shadow: 0 1px 3px rgba(0,0,0,0.3);
}
.bm-popup strong { font-family: var(--font-serif); font-size: 0.95rem; }
.bm-popup em { color: var(--terra); font-style: normal; font-weight: 700; font-family: var(--font-mono); font-size: 0.7rem; letter-spacing: 0.06em; }

/* Pines pequeños de TODOS los sectores en el editor de bloques */
.all-sector-marker { background: transparent !important; border: none !important; }
.asm-tap-area {
  /* Área de tap ampliada (24x24) para que sea fácil tocar en móvil */
  width: 24px; height: 24px;
  display: flex; align-items: center; justify-content: center;
  cursor: pointer;
}
.asm-pin {
  width: 10px; height: 10px;
  background: var(--bg);
  border: 2px solid;
  border-radius: 50%;
  transition: transform 0.15s, background 0.15s;
}
.asm-tap-area:hover .asm-pin,
.asm-tap-area:active .asm-pin { transform: scale(1.5); }
/* Pin del sector ACTIVO: relleno terra, más grande */
.asm-pin.is-active {
  background: var(--terra) !important;
  border-color: var(--terra) !important;
  transform: scale(1.4);
}
.asm-label {
  position: absolute;
  top: 14px;
  left: 50%;
  transform: translateX(-50%);
  white-space: nowrap;
  font-family: var(--font-mono);
  font-size: 9px;
  letter-spacing: 0.04em;
  color: var(--ink);
  background: var(--bg);
  padding: 1px 4px;
  border: 1px solid var(--ink);
  pointer-events: none;
  opacity: 0.85;
}
.asm-tap-area:hover ~ .asm-label,
.asm-tap-area:active ~ .asm-label { opacity: 1; }
.leaflet-tooltip.asm-tip {
  background: var(--bg);
  border: 1px solid var(--ink);
  border-radius: 0;
  box-shadow: none;
  font-family: var(--font-mono);
  font-size: 10px;
  letter-spacing: 0.06em;
  color: var(--ink);
  padding: 2px 6px;
}
.leaflet-tooltip.asm-tip::before { display: none; }

/* ── Búsqueda de sectores en editor ── */
.be-search-wrap { flex: 1; position: relative; }
.be-search {
  width: 100%; padding: 8px 10px;
  background: transparent; border: 1px solid var(--ink);
  color: var(--ink); border-radius: 0;
  font-family: var(--font-sans); font-size: 0.85rem;
  font-weight: 600; outline: none;
  box-sizing: border-box;
}
.be-search:focus { border-color: var(--terra); }
.be-search-results {
  position: absolute; top: calc(100% + 1px); left: 0; right: 0;
  background: var(--bg);
  border: 1px solid var(--ink); border-top: none;
  max-height: 280px; overflow-y: auto;
  z-index: 2050;
}
.be-search-item {
  padding: 8px 10px; border-bottom: 1px solid var(--rule);
  cursor: pointer; display: flex; flex-direction: column; gap: 2px;
}
.be-search-item:hover { background: var(--paper); }
.be-search-item strong { font-size: 0.85rem; color: var(--ink); }
.be-search-item .bs-meta {
  font-family: var(--font-mono); font-size: 0.55rem;
  letter-spacing: 0.08em; text-transform: uppercase; color: var(--ink-3);
}
.be-search-empty {
  padding: 12px; text-align: center;
  font-family: var(--font-mono); font-size: 0.65rem;
  color: var(--ink-3); letter-spacing: 0.06em;
}

/* ── Modal nueva piedra: lista de bloques ── */
#beBloquesList { display: flex; flex-direction: column; gap: 6px; margin: 8px 0 12px; }
.be-bloque-row {
  display: grid; grid-template-columns: 1fr 60px 28px;
  gap: 6px; align-items: center;
}
.be-bloque-row input,
.be-bloque-row select {
  padding: 6px 8px;
  background: var(--bg); border: 1px solid var(--rule);
  color: var(--ink); border-radius: 0;
  font-family: var(--font-sans); font-size: 0.85rem;
  outline: none; box-sizing: border-box;
}
.be-bloque-row input:focus,
.be-bloque-row select:focus { border-color: var(--terra); }
.be-bloque-row .be-bloque-grade {
  font-family: var(--font-mono); font-weight: 700; text-align: center;
  cursor: pointer;
}
.be-bloque-rm {
  width: 28px; height: 30px; padding: 0;
  background: transparent; border: 1px solid var(--bad);
  color: var(--bad); border-radius: 0;
  cursor: pointer; font-size: 1.1rem; line-height: 1;
}
.be-bloque-rm:hover { background: var(--bad); color: var(--bg); }
.be-add-bloque {
  width: 100%; padding: 8px;
  background: transparent; border: 1px dashed var(--ink);
  color: var(--ink); border-radius: 0;
  font-family: var(--font-mono); font-size: 0.65rem; font-weight: 700;
  letter-spacing: 0.1em; cursor: pointer; margin-bottom: 12px;
}
.be-add-bloque:hover { background: var(--paper); }

/* ── Pin con número de bloques + popup con lista ── */
.bm-pin {
  width: 20px !important; height: 20px !important;
  border-radius: 50% !important;
  border: 2px solid var(--ink) !important;
  display: flex; align-items: center; justify-content: center;
  font-family: var(--font-mono); font-size: 10px; font-weight: 700;
  color: var(--bg); line-height: 1;
}
.bp-list {
  list-style: none; padding: 0; margin: 6px 0 0;
  display: flex; flex-direction: column; gap: 3px;
}
.bp-list li {
  display: flex; justify-content: space-between; align-items: center;
  gap: 8px; padding: 3px 0;
  border-bottom: 1px dashed var(--rule);
  font-size: 0.8rem;
}
.bp-list li:last-child { border-bottom: 0; }
.bp-list-scroll { max-height: 140px; overflow-y: auto; }
.bp-name { font-family: var(--font-serif); color: var(--ink); }
.bp-grade {
  font-family: var(--font-mono); font-size: 0.7rem; font-weight: 700;
  color: var(--terra); letter-spacing: 0.04em;
  background: var(--terra-bg); padding: 1px 5px;
  white-space: nowrap;
}
.bm-popup-actions {
  display: flex; gap: 6px; margin-top: 8px;
}
.bm-move, .bm-edit, .bm-delete,
.zm-move, .zm-edit, .zm-delete,
.pm-move, .pm-edit, .pm-delete {
  flex: 1; padding: 5px 8px;
  background: transparent; border: 1px solid;
  font-family: var(--font-mono); font-size: 0.55rem;
  font-weight: 700; letter-spacing: 0.06em; text-transform: uppercase;
  cursor: pointer; border-radius: 0;
}
.bm-move { border-color: var(--moss, #5e6b4f); color: var(--moss, #5e6b4f); }
.bm-move:hover { background: var(--moss, #5e6b4f); color: var(--bg); }
.bm-edit { border-color: var(--ink); color: var(--ink); }
.bm-edit:hover { background: var(--ink); color: var(--bg); }
.bm-delete { border-color: var(--bad); color: var(--bad); }
.bm-delete:hover { background: var(--bad); color: var(--bg); }
.zm-move { border-color: var(--moss, #5e6b4f); color: var(--moss, #5e6b4f); }
.zm-move:hover { background: var(--moss, #5e6b4f); color: var(--bg); }
.zm-edit { border-color: var(--ink); color: var(--ink); }
.zm-edit:hover { background: var(--ink); color: var(--bg); }
.zm-delete { border-color: var(--bad); color: var(--bad); }
.zm-delete:hover { background: var(--bad); color: var(--bg); }
.pm-move { border-color: var(--moss, #5e6b4f); color: var(--moss, #5e6b4f); }
.pm-move:hover { background: var(--moss, #5e6b4f); color: var(--bg); }
.pm-edit { border-color: var(--ink); color: var(--ink); }
.pm-edit:hover { background: var(--ink); color: var(--bg); }
.pm-delete { border-color: var(--bad); color: var(--bad); }
.pm-delete:hover { background: var(--bad); color: var(--bg); }

.bm-sector-tip {
  font-family: var(--font-mono); font-size: 0.55rem;
  color: var(--terra); letter-spacing: 0.08em; text-transform: uppercase;
  margin-top: 4px; line-height: 1.4;
}

/* ── Input de coordenadas en modal piedra ── */
#bePiedraCoords {
  font-family: var(--font-mono); font-size: 0.82rem;
  letter-spacing: 0.02em;
}
.be-coords-hint {
  display: block;
  font-family: var(--font-mono); font-size: 0.55rem;
  color: var(--ink-3); letter-spacing: 0.06em;
  margin-top: 4px; line-height: 1.4;
  text-transform: uppercase;
}
.be-coords-hint.ok  { color: var(--ok); }
.be-coords-hint.err { color: var(--bad); }

/* ── Indicador "AUTO-GUARDADO" en header del editor ── */
.be-autosave {
  font-family: var(--font-mono); font-size: 0.55rem; font-weight: 700;
  color: var(--ok); letter-spacing: 0.12em;
  white-space: nowrap;
  padding: 4px 8px; border: 1px solid var(--ok);
  background: transparent;
  transition: background 0.3s, color 0.3s, transform 0.2s;
}
.be-autosave.pulse {
  background: var(--ok); color: var(--bg);
  transform: scale(1.08);
}

/* ── Toast central de confirmación ── */
.be-toast {
  position: fixed;
  top: 80px; left: 50%;
  transform: translateX(-50%) translateY(-20px);
  padding: 12px 20px;
  font-family: var(--font-mono); font-size: 0.75rem; font-weight: 800;
  letter-spacing: 0.14em; text-transform: uppercase;
  z-index: 3000; pointer-events: none;
  opacity: 0;
  transition: opacity 0.25s, transform 0.25s;
  white-space: nowrap;
  border: 2px solid;
}
.be-toast.visible {
  opacity: 1;
  transform: translateX(-50%) translateY(0);
}
.be-toast-ok  { background: var(--ok); color: var(--bg); border-color: var(--ok); }
.be-toast-err { background: var(--bad); color: var(--bg); border-color: var(--bad); }

@media (max-width: 480px) {
  .be-autosave { font-size: 0.5rem; padding: 3px 5px; letter-spacing: 0.06em; }
}

/* ── Marker de ZONA — hexágono musgo + label colgante ── */
.zona-marker { background: transparent !important; border: none !important; }
.zm-wrap {
  display: flex; flex-direction: column; align-items: center;
  pointer-events: none;
}
.zm-hex {
  filter: drop-shadow(0 1px 2px rgba(0,0,0,0.3));
  pointer-events: auto;
  cursor: pointer;
}
.zm-label {
  margin-top: 2px; padding: 1px 6px;
  background: var(--bg); border: 1px solid;
  font-family: var(--font-mono); font-size: 9px; font-weight: 700;
  letter-spacing: 0.06em; white-space: nowrap;
  pointer-events: auto;
  max-width: 130px; overflow: hidden; text-overflow: ellipsis;
}
.zm-popup strong { font-family: var(--font-mono); color: var(--moss); letter-spacing: 0.06em; }
.zm-desc {
  margin: 6px 0 0; font-size: 0.78rem; color: var(--ink-2); line-height: 1.4;
  font-family: var(--font-sans);
}
.zm-edit, .zm-delete {
  flex: 1; padding: 5px 8px;
  background: transparent; border: 1px solid;
  font-family: var(--font-mono); font-size: 0.6rem;
  font-weight: 700; letter-spacing: 0.08em; text-transform: uppercase;
  cursor: pointer; border-radius: 0;
}
.zm-edit { border-color: var(--ink); color: var(--ink); }
.zm-edit:hover { background: var(--ink); color: var(--bg); }
.zm-delete { border-color: var(--bad); color: var(--bad); }
.zm-delete:hover { background: var(--bad); color: var(--bg); }

/* ── Parking marker ── */
.parking-marker { background: transparent !important; border: none !important; }
.pm-wrap {
  display: flex; flex-direction: column; align-items: center;
  pointer-events: none;
}
.pm-sign {
  font-size: 24px; line-height: 1;
  filter: drop-shadow(0 1px 2px rgba(0,0,0,0.4));
  pointer-events: auto; cursor: pointer;
}
.pm-label {
  margin-top: 1px; padding: 1px 5px;
  background: var(--bg); border: 1px solid #3b82f6; color: #3b82f6;
  font-family: var(--font-mono); font-size: 9px; font-weight: 700;
  letter-spacing: 0.06em; white-space: nowrap;
  pointer-events: auto;
  max-width: 120px; overflow: hidden; text-overflow: ellipsis;
}
.pm-edit, .pm-delete {
  flex: 1; padding: 5px 8px;
  background: transparent; border: 1px solid;
  font-family: var(--font-mono); font-size: 0.6rem;
  font-weight: 700; letter-spacing: 0.08em; text-transform: uppercase;
  cursor: pointer; border-radius: 0;
}
.pm-edit { border-color: var(--ink); color: var(--ink); }
.pm-edit:hover { background: var(--ink); color: var(--bg); }
.pm-delete { border-color: var(--bad); color: var(--bad); }
.pm-delete:hover { background: var(--bad); color: var(--bg); }
/* Icono de parking en la leyenda del topo-map */
.cl-parking::before { content: '🅿'; font-size: 12px; }

/* ── Modal selector de tipo (zona vs piedra) ── */
.be-type-hint {
  font-family: var(--font-sans); font-size: 0.85rem; color: var(--ink-2);
  margin: 8px 0 16px; line-height: 1.5;
}
.be-type-btn {
  display: block; width: 100%;
  padding: 14px; margin-bottom: 10px;
  background: transparent; border: 1px solid var(--ink);
  border-radius: 0; cursor: pointer; text-align: left;
  transition: background 0.12s;
}
.be-type-btn:hover { background: var(--paper); }
.be-type-btn:active { background: var(--ink); color: var(--bg); }
.be-type-btn:active * { color: var(--bg) !important; }
.be-type-name {
  display: block;
  font-family: var(--font-mono); font-size: 0.85rem; font-weight: 800;
  color: var(--ink); letter-spacing: 0.1em; margin-bottom: 4px;
}
.be-type-btn[data-type="zona"] .be-type-name { color: var(--moss); }
.be-type-btn[data-type="piedra"] .be-type-name { color: var(--terra); }
.be-type-desc {
  display: block;
  font-size: 0.75rem; color: var(--ink-2); line-height: 1.4;
}

#beZonaDesc {
  width: 100%; padding: 8px 10px;
  background: transparent; border: 1px solid var(--rule);
  color: var(--ink); border-radius: 0;
  font-family: var(--font-sans); font-size: 0.85rem;
  outline: none; box-sizing: border-box; resize: vertical;
}
#beZonaDesc:focus { border-color: var(--terra); }

/* ── Toolbar de herramientas (piedra / zona) ── */
.be-toolbar {
  display: flex; align-items: center; gap: 8px;
  padding: 8px 14px;
  background: var(--paper);
  border-bottom: 1px solid var(--rule);
  flex-shrink: 0;
  flex-wrap: wrap;
}
.be-tool-label {
  font-family: var(--font-mono); font-size: 0.6rem; font-weight: 700;
  letter-spacing: 0.14em; color: var(--ink-3);
  margin-right: 4px;
}
.be-tool-btn {
  padding: 6px 14px;
  background: transparent; border: 1px solid var(--ink);
  color: var(--ink); cursor: pointer;
  font-family: var(--font-mono); font-size: 0.7rem; font-weight: 700;
  letter-spacing: 0.1em; border-radius: 0;
  transition: background 0.12s;
}
.be-tool-btn:hover { background: var(--bg); }
.be-tool-btn.active { background: var(--ink); color: var(--bg); }
.be-tool-btn[data-tool="zona"].active { background: var(--moss); border-color: var(--moss); color: var(--bg); }
.be-tool-btn[data-tool="piedra"].active { background: var(--terra); border-color: var(--terra); color: var(--bg); }
.be-tool-sep {
  width: 1px; height: 20px;
  background: var(--rule);
  margin: 0 4px;
}
.be-tool-hint {
  font-family: var(--font-mono); font-size: 0.55rem;
  color: var(--ink-3); letter-spacing: 0.06em;
  margin-left: auto;
}

/* ── Botón 'CÓMO LLEGAR' en popups del mapa ── */
.bp-gmaps {
  display: block;
  margin-top: 8px;
  padding: 6px 10px;
  background: var(--terra); color: var(--bg);
  text-decoration: none;
  font-family: var(--font-mono); font-size: 0.65rem; font-weight: 800;
  letter-spacing: 0.1em; text-transform: uppercase;
  text-align: center;
  border: 1px solid var(--terra);
  transition: background 0.12s;
}
.bp-gmaps:hover {
  background: var(--ink); border-color: var(--ink);
}
.cumbre-popup .bp-gmaps { margin-top: 6px; }

/* ── Marker de SECTOR — triángulo terra con doble borde + label ── */
.sector-pin { background: transparent !important; border: none !important; }
.sp-wrap {
  display: flex; flex-direction: column; align-items: center;
  pointer-events: none;
}
.sp-tri {
  filter: drop-shadow(0 2px 3px rgba(0,0,0,0.4));
  pointer-events: auto;
  cursor: grab;
}
.sp-label {
  margin-top: 2px; padding: 1px 7px;
  background: var(--bg); border: 1px solid;
  font-family: var(--font-mono); font-size: 9px; font-weight: 800;
  letter-spacing: 0.1em; white-space: nowrap;
  pointer-events: auto;
  max-width: 140px; overflow: hidden; text-overflow: ellipsis;
}

/* ── Marker de PIEDRA — gota tipo pin de mapa ── */
.block-marker { background: transparent !important; border: none !important; }
.bm-wrap {
  position: relative; width: 22px; height: 28px;
  pointer-events: none;
}
.bm-pin {
  position: absolute; top: 0; left: 50%; transform: translateX(-50%);
  width: 22px; height: 22px; border-radius: 50%;
  border: 2px solid #fff;
  display: flex; align-items: center; justify-content: center;
  font-family: var(--font-mono); font-size: 11px; font-weight: 800;
  color: #fff; line-height: 1;
  box-shadow: 0 0 0 1px var(--ink), 0 2px 3px rgba(0,0,0,0.3);
  pointer-events: auto;
  cursor: pointer;
}
.bm-pin-stem {
  position: absolute; bottom: 0; left: 50%; transform: translateX(-50%);
  width: 2px; height: 8px;
  pointer-events: none;
}

/* ════════════════════════════════════════════
   FOTO + TOPO EDITOR / VISOR (block-editor)
   ════════════════════════════════════════════ */

/* Botones popup topo */
/* Overlays públicos (fuera del blockEditor, z-index alto) */
.pub-topo-overlay {
  position: fixed; inset: 0; z-index: 4000;
  background: rgba(0,0,0,0.65);
  display: flex; align-items: center; justify-content: center;
  padding: 16px;
}

/* Botones popup público */
.pub-topo-view, .pub-topo-propose {
  display: block; width: 100%; margin: 4px 0 0;
  padding: 7px 10px;
  border: none; cursor: pointer;
  font-family: var(--font-mono); font-size: 0.7rem; font-weight: 800;
  letter-spacing: 0.08em;
}
.pub-topo-view { background: var(--terra); color: var(--bg); }
.pub-topo-view:hover { background: var(--terra-dark, #a3350c); }
.pub-topo-propose { background: transparent; border: 1px solid var(--ink); color: var(--ink); }
.pub-topo-propose:hover { background: var(--paper); }

/* Miniatura topo en admin review */
.pr-topo-wrap {
  position: relative; display: inline-block;
  margin: 6px 0; max-width: 100%;
}
.pr-topo-thumb {
  display: block; max-width: 100%; max-height: 220px;
  border: 1px solid var(--ink);
}
.pr-topo-canvas {
  position: absolute; top: 0; left: 0; pointer-events: none;
}
.pr-topo-legend {
  display: flex; flex-wrap: wrap; gap: 6px; margin: 4px 0 8px;
}
.pr-topo-legend .be-topo-legend-item {
  display: flex; align-items: center; gap: 4px;
  font-family: var(--font-mono); font-size: 0.65rem; color: var(--ink);
}

.bm-topo-view {
  display: block; width: 100%; margin: 6px 0 2px;
  padding: 7px 10px;
  background: var(--terra); color: var(--bg);
  border: none; cursor: pointer;
  font-family: var(--font-mono); font-size: 0.7rem; font-weight: 800;
  letter-spacing: 0.08em;
}
.bm-topo-view:hover { background: var(--terra-dark, #a3350c); }
.bm-topo-edit {
  border-color: var(--terra); color: var(--terra);
}
.bm-topo-edit:hover { background: var(--terra); color: var(--bg); }

/* Upload foto en modal piedra */
.be-foto-upload { margin: 6px 0 12px; }
.be-foto-btn {
  display: inline-block; padding: 7px 14px;
  border: 1px solid var(--ink); background: transparent;
  font-family: var(--font-mono); font-size: 0.7rem; font-weight: 700;
  letter-spacing: 0.08em; cursor: pointer; color: var(--ink);
}
.be-foto-btn:hover { background: var(--paper); }
.be-foto-preview {
  position: relative; display: inline-flex; align-items: flex-start;
}
.be-foto-preview img {
  max-width: 100%; max-height: 160px; display: block;
  border: 1px solid var(--ink);
}
.be-foto-rm {
  position: absolute; top: 4px; right: 4px;
  background: rgba(0,0,0,0.6); color: #fff; border: none;
  width: 22px; height: 22px; cursor: pointer;
  font-size: 0.9rem; line-height: 1; border-radius: 50%;
}
.be-foto-rm:hover { background: var(--bad); }

/* Topo editor */
.be-topo-editor {
  background: var(--bg); border: 1px solid var(--ink);
  width: min(96vw, 900px); max-height: 96vh;
  display: flex; flex-direction: column; overflow: hidden;
}
.be-topo-viewer {
  background: var(--bg); border: 1px solid var(--ink);
  width: min(96vw, 860px); max-height: 96vh;
  display: flex; flex-direction: column; overflow: hidden;
}
.be-topo-header {
  display: flex; align-items: center; gap: 8px;
  padding: 10px 14px; border-bottom: 1px solid var(--ink);
  font-family: var(--font-mono); font-size: 0.75rem; font-weight: 700;
  letter-spacing: 0.06em;
}
.be-topo-header span { flex: 1; color: var(--terra); }
.be-topo-close {
  background: none; border: 1px solid var(--ink); color: var(--ink);
  width: 28px; height: 28px; cursor: pointer; font-size: 1rem; line-height: 1;
}
.be-topo-close:hover { background: var(--ink); color: var(--bg); }
.be-topo-tools { display: flex; gap: 6px; }
.be-topo-tool {
  padding: 5px 10px; border: 1px solid var(--ink);
  background: transparent; cursor: pointer;
  font-family: var(--font-mono); font-size: 0.65rem; font-weight: 700;
  letter-spacing: 0.06em; color: var(--ink);
}
.be-topo-tool:hover { background: var(--paper); }
.be-topo-tool.active { background: var(--ink); color: var(--bg); }
.be-topo-bloque-selector {
  display: flex; flex-wrap: wrap; align-items: center; gap: 6px;
  padding: 8px 14px; border-bottom: 1px solid var(--ink);
  background: var(--paper);
}
.be-topo-bloque-label {
  font-family: var(--font-mono); font-size: 0.65rem; color: var(--ink-muted, #888);
  margin-right: 4px; white-space: nowrap;
}
.be-topo-bloque-btn {
  padding: 4px 10px; border: 2px solid var(--btn-color, var(--ink));
  background: transparent; color: var(--btn-color, var(--ink));
  font-family: var(--font-mono); font-size: 0.65rem; font-weight: 700;
  letter-spacing: 0.05em; cursor: pointer;
}
.be-topo-bloque-btn:hover { opacity: 0.75; }
.be-topo-bloque-btn.active {
  background: var(--btn-color, var(--ink)); color: #fff;
}

/* Selector de tipo de inicio de bloque (PIE / SIT / LANCE / TRAV) */
.ct-topo-summary {
  display: flex; align-items: center; gap: 10px;
  padding: 6px 0; flex-wrap: wrap;
}
.ct-topo-summary span {
  font-family: var(--font-mono); font-size: 0.7rem; color: var(--ink-muted, #888);
}

.bbs-wrap {
  display: inline-flex; gap: 3px; flex-wrap: wrap;
}
.bbs-btn {
  padding: 3px 7px;
  border: 1px solid var(--ink); background: transparent; color: var(--ink);
  font-family: var(--font-mono); font-size: 0.6rem; font-weight: 700;
  letter-spacing: 0.05em; cursor: pointer; line-height: 1.4;
}
.bbs-btn:hover { background: var(--paper); }
.bbs-btn.active { background: var(--ink); color: var(--bg); }

/* Inputs de nuevo bloque en propuesta */
.pub-new-bloque-inputs {
  display: flex; flex-wrap: wrap; align-items: center; gap: 6px;
  padding: 6px 14px 8px; background: var(--paper);
  border-bottom: 1px solid var(--ink);
}
.pub-new-bloque-inputs input {
  flex: 1; min-width: 140px; padding: 5px 8px;
  border: 1px solid var(--ink); background: var(--bg); color: var(--ink);
  font-family: var(--font-mono); font-size: 0.75rem;
}
.pub-new-bloque-inputs select {
  padding: 5px 8px; border: 1px solid var(--ink);
  background: var(--bg); color: var(--ink);
  font-family: var(--font-mono); font-size: 0.75rem;
}

.be-topo-canvas-wrap {
  flex: 1; position: relative; overflow: auto;
  background: #111; display: flex; align-items: flex-start; justify-content: flex-start;
  min-height: 200px;
}
.be-topo-canvas-wrap img {
  display: block; max-width: 100%; max-height: 65vh;
  object-fit: contain; user-select: none; pointer-events: none;
}
.be-topo-canvas-wrap canvas {
  position: absolute; top: 0; left: 0;
  cursor: crosshair; touch-action: none;
}
.be-topo-line-list {
  padding: 8px 14px; border-top: 1px solid var(--ink);
  max-height: 120px; overflow-y: auto;
  display: flex; flex-wrap: wrap; gap: 6px;
}
.be-topo-line-item {
  display: flex; align-items: center; gap: 5px;
  background: var(--paper); padding: 3px 6px 3px 3px;
  font-family: var(--font-mono); font-size: 0.65rem;
}
.be-topo-line-num {
  display: inline-flex; align-items: center; justify-content: center;
  width: 20px; height: 20px; border-radius: 50%;
  color: #fff; font-weight: 800; font-size: 0.65rem; flex-shrink: 0;
}
.be-topo-line-label { color: var(--ink); }
.be-topo-line-del {
  background: none; border: none; cursor: pointer;
  color: var(--bad); font-size: 0.9rem; padding: 0 2px; line-height: 1;
}
.be-topo-line-del:hover { color: var(--bg); background: var(--bad); }
.be-topo-hint {
  font-family: var(--font-mono); font-size: 0.65rem; color: var(--ink-muted, #888);
  padding: 4px 0; margin: 0;
}
.be-topo-footer {
  display: flex; gap: 8px; justify-content: flex-end;
  padding: 10px 14px; border-top: 1px solid var(--ink);
}
.be-topo-legend {
  padding: 8px 14px; border-top: 1px solid var(--ink);
  display: flex; flex-wrap: wrap; gap: 8px; align-items: center;
}
.be-topo-legend-item {
  display: flex; align-items: center; gap: 5px;
  font-family: var(--font-mono); font-size: 0.7rem; color: var(--ink);
}

/* ════════════════════════════════════════════
   PROPUESTAS DE COMUNIDAD (contributions-ui)
   ════════════════════════════════════════════ */

/* Botón flotante "+ PROPONER" en topo-map */
.ct-propose-btn {
  position: absolute; bottom: 14px; right: 56px;
  z-index: 1000;
  background: var(--terra); color: var(--bg);
  border: 2px solid var(--bg);
  box-shadow: 0 0 0 1px var(--ink), 0 2px 4px rgba(0,0,0,0.3);
  font-family: var(--font-mono); font-size: 0.7rem; font-weight: 800;
  letter-spacing: 0.1em;
  padding: 8px 14px;
  border-radius: 0;
  cursor: pointer;
  transition: background 0.12s;
}
.ct-propose-btn:hover, .ct-propose-btn:active { background: var(--ink); }

/* Modal overlay genérico */
.ct-modal-overlay {
  position: fixed; inset: 0; z-index: 2500;
  background: rgba(var(--ink-rgb), 0.55);
  display: flex; align-items: center; justify-content: center;
  padding: 20px;
}
.ct-modal {
  background: var(--bg); border: 1px solid var(--ink);
  padding: 20px; max-width: 400px; width: 100%;
  max-height: 90vh; overflow-y: auto;
}
.ct-modal h3 {
  font-family: var(--font-serif); font-size: 1.2rem;
  margin: 0 0 6px; color: var(--ink);
}
.ct-modal label {
  display: block;
  font-family: var(--font-mono); font-size: 0.6rem;
  letter-spacing: 0.12em; text-transform: uppercase;
  color: var(--ink-2); margin-bottom: 4px; margin-top: 12px;
}
.ct-modal input,
.ct-modal textarea {
  width: 100%; padding: 8px 10px;
  background: transparent; border: 0; border-bottom: 1px solid var(--ink);
  color: var(--ink); font-size: 1rem; outline: none;
  font-family: var(--font-sans); box-sizing: border-box;
  border-radius: 0;
}
.ct-modal input:focus, .ct-modal textarea:focus { border-bottom-color: var(--terra); }
.ct-modal textarea { resize: vertical; min-height: 60px; }
.ct-hint {
  font-family: var(--font-sans); font-size: 0.85rem;
  color: var(--ink-2); margin: 6px 0 14px; line-height: 1.5;
}
.ct-coords-hint {
  display: block;
  font-family: var(--font-mono); font-size: 0.55rem;
  color: var(--ink-3); letter-spacing: 0.06em;
  margin-top: 4px; line-height: 1.4; text-transform: uppercase;
}
.ct-coords-hint.ok { color: var(--ok); }
.ct-coords-hint.err { color: var(--bad); }

/* Botones tipo (selector inicial) */
.ct-type-btn {
  display: block; width: 100%;
  padding: 14px; margin-bottom: 10px;
  background: transparent; border: 1px solid var(--ink);
  border-radius: 0; cursor: pointer; text-align: left;
  transition: background 0.12s;
}
.ct-type-btn:hover { background: var(--paper); }
.ct-type-btn:active { transform: scale(0.98); }
.ct-type-name {
  display: block;
  font-family: var(--font-mono); font-size: 0.85rem; font-weight: 800;
  letter-spacing: 0.1em; margin-bottom: 4px;
}
.ct-type-desc {
  display: block;
  font-size: 0.75rem; color: var(--ink-2); line-height: 1.4;
}

/* Acciones (cancelar/enviar) */
.ct-modal-actions {
  display: flex; gap: 8px; margin-top: 20px;
}
.ct-btn-cancel, .ct-btn-save {
  flex: 1; padding: 10px;
  border-radius: 0; cursor: pointer;
  font-family: var(--font-mono); font-size: 0.7rem; font-weight: 700;
  letter-spacing: 0.08em; text-transform: uppercase;
}
.ct-btn-cancel {
  background: transparent; border: 1px solid var(--ink); color: var(--ink);
}
.ct-btn-cancel:hover { background: var(--paper); }
.ct-btn-save {
  background: var(--terra); border: 1px solid var(--terra); color: var(--bg);
}
.ct-btn-save:hover:not(:disabled) { background: var(--ink); border-color: var(--ink); }
.ct-btn-save:disabled { opacity: 0.4; cursor: not-allowed; }

/* Lista de bloques editable */
#ctBloquesList { display: flex; flex-direction: column; gap: 6px; margin: 8px 0 10px; }
.ct-bloque-row {
  display: grid; grid-template-columns: 1fr 70px 28px;
  gap: 6px; align-items: center;
}
.ct-bloque-row input,
.ct-bloque-row select {
  padding: 6px 8px;
  background: var(--bg); border: 1px solid var(--rule);
  color: var(--ink); border-radius: 0;
  font-family: var(--font-sans); font-size: 0.85rem;
  outline: none; box-sizing: border-box;
}
.ct-bloque-row input:focus,
.ct-bloque-row select:focus { border-color: var(--terra); }
.ct-bloque-row .ct-bloque-grade {
  font-family: var(--font-mono); font-weight: 700; text-align: center; cursor: pointer;
}
.ct-bloque-rm {
  width: 28px; height: 30px; padding: 0;
  background: transparent; border: 1px solid var(--bad);
  color: var(--bad); border-radius: 0;
  cursor: pointer; font-size: 1.1rem; line-height: 1;
}
.ct-bloque-rm:hover { background: var(--bad); color: var(--bg); }
.ct-add-bloque {
  width: 100%; padding: 8px;
  background: transparent; border: 1px dashed var(--ink);
  color: var(--ink); border-radius: 0;
  font-family: var(--font-mono); font-size: 0.65rem; font-weight: 700;
  letter-spacing: 0.1em; cursor: pointer; margin-bottom: 4px;
}
.ct-add-bloque:hover { background: var(--paper); }

/* Modal mover sector */
.ct-move-status {
  font-family: var(--font-mono); font-size: 0.7rem;
  color: var(--terra); font-weight: 700;
  margin: 8px 0;
  letter-spacing: 0.06em;
}
.ct-coords-display {
  font-family: var(--font-mono); font-size: 0.75rem;
  color: var(--ink); margin-top: 8px;
}

/* Tus propuestas pendientes */
.ct-my-pending {
  margin-top: 16px; padding-top: 12px;
  border-top: 1px solid var(--rule);
}
.ct-pending-label {
  font-family: var(--font-mono); font-size: 0.55rem; font-weight: 700;
  letter-spacing: 0.14em; color: var(--ink-3);
  margin-bottom: 6px;
}
.ct-my-item {
  display: flex; align-items: center; gap: 8px;
  padding: 6px 0;
  border-bottom: 1px solid var(--rule);
  font-family: var(--font-mono); font-size: 0.7rem;
}
.ct-my-item:last-child { border-bottom: 0; }
.ct-my-type {
  font-weight: 700; letter-spacing: 0.06em;
  color: var(--ink-2); flex-shrink: 0;
}
.ct-my-name {
  font-family: var(--font-sans); font-size: 0.85rem;
  color: var(--ink); flex: 1;
  overflow: hidden; text-overflow: ellipsis; white-space: nowrap;
}
.ct-my-cancel {
  width: 22px; height: 22px;
  background: transparent; border: 1px solid var(--bad);
  color: var(--bad); cursor: pointer;
  font-size: 0.9rem; padding: 0; border-radius: 0;
  flex-shrink: 0;
}
.ct-my-cancel:hover { background: var(--bad); color: var(--bg); }

/* Pin pendiente del usuario en el mapa */
.ct-pending-marker { background: transparent !important; border: none !important; }
.ctp-pin {
  display: flex; flex-direction: column; align-items: center;
  pointer-events: auto;
  cursor: pointer;
}
.ctp-dot {
  width: 14px; height: 14px;
  border-radius: 50%;
  background: var(--bg);
  border: 2px dashed;
  filter: drop-shadow(0 1px 2px rgba(0,0,0,0.3));
}
.ctp-piedra .ctp-dot { border-color: var(--terra); }
.ctp-zona .ctp-dot { border-color: var(--moss); }
.ctp-tag {
  margin-top: 2px; padding: 1px 4px;
  background: var(--bg); border: 1px solid var(--ink-3);
  font-family: var(--font-mono); font-size: 8px; font-weight: 800;
  color: var(--ink-3); letter-spacing: 0.08em;
}
.ct-pending-status {
  font-family: var(--font-mono); font-size: 0.6rem; font-weight: 800;
  color: var(--ink-3); letter-spacing: 0.12em;
  margin: 4px 0;
}
.ct-cancel-pending {
  flex: 1; padding: 5px 8px;
  background: transparent; border: 1px solid var(--bad);
  color: var(--bad);
  font-family: var(--font-mono); font-size: 0.6rem;
  font-weight: 700; letter-spacing: 0.08em; text-transform: uppercase;
  cursor: pointer; border-radius: 0;
}
.ct-cancel-pending:hover { background: var(--bad); color: var(--bg); }

/* Bottom-sheet para corregir posición del sector — no bloquea el mapa */
.ct-bottom-sheet {
  position: fixed;
  left: 0; right: 0; bottom: 0;
  z-index: 3000;
  background: var(--bg);
  border-top: 2px solid var(--ink);
  padding: 14px 16px 18px;
  box-shadow: 0 -4px 20px rgba(0,0,0,0.25);
  max-height: 60vh; overflow-y: auto;
  animation: ct-sheet-slide-up 0.22s ease-out;
}
@keyframes ct-sheet-slide-up {
  from { transform: translateY(100%); }
  to { transform: translateY(0); }
}
.ct-sheet-head {
  display: flex; align-items: center; justify-content: space-between;
  margin-bottom: 8px;
}
.ct-sheet-head strong {
  font-family: var(--font-mono); font-size: 0.7rem; font-weight: 800;
  letter-spacing: 0.1em; color: var(--terra);
}
.ct-sheet-close {
  width: 26px; height: 26px;
  background: transparent; border: 1px solid var(--ink);
  color: var(--ink); cursor: pointer;
  font-size: 0.85rem; padding: 0; border-radius: 0;
  display: inline-flex; align-items: center; justify-content: center;
  flex-shrink: 0;
}
.ct-sheet-close:hover { background: var(--ink); color: var(--bg); }
.ct-bottom-sheet .ct-hint {
  margin: 4px 0 8px;
  font-family: var(--font-sans); font-size: 0.85rem;
  color: var(--ink-2); line-height: 1.4;
}
.ct-bottom-sheet .ct-coords-display {
  font-family: var(--font-mono); font-size: 0.75rem; font-weight: 700;
  color: var(--ok); margin: 6px 0;
  letter-spacing: 0.04em;
}
.ct-bottom-sheet label {
  display: block;
  font-family: var(--font-mono); font-size: 0.6rem;
  letter-spacing: 0.12em; text-transform: uppercase;
  color: var(--ink-2); margin: 8px 0 4px;
}
.ct-bottom-sheet textarea {
  width: 100%; padding: 8px 10px;
  background: transparent; border: 0; border-bottom: 1px solid var(--ink);
  color: var(--ink); font-size: 0.95rem; outline: none;
  font-family: var(--font-sans); box-sizing: border-box;
  border-radius: 0; resize: vertical;
}
.ct-bottom-sheet textarea:focus { border-bottom-color: var(--terra); }

/* Banner persistente "PULSA EN EL MAPA" — visible mientras user espera coords */
.ct-place-banner {
  position: fixed;
  top: 14px; left: 50%; transform: translateX(-50%);
  z-index: 3500;
  display: flex; align-items: center; gap: 10px;
  padding: 10px 14px;
  background: var(--terra); color: var(--bg);
  border: 2px solid var(--bg);
  box-shadow: 0 0 0 1px var(--ink), 0 4px 12px rgba(0,0,0,0.3);
  font-family: var(--font-mono); font-size: 0.7rem; font-weight: 800;
  letter-spacing: 0.1em;
  max-width: 92vw;
  animation: ct-banner-slide-in 0.25s ease-out;
}
.ct-place-banner.ct-place-zona { background: var(--moss); }
.ct-place-icon { font-size: 1rem; line-height: 1; }
.ct-place-text { flex: 1; }
.ct-place-cancel {
  background: transparent; border: 1px solid var(--bg);
  color: var(--bg); cursor: pointer;
  width: 22px; height: 22px;
  font-size: 0.85rem; font-weight: 700;
  display: inline-flex; align-items: center; justify-content: center;
  padding: 0; border-radius: 0;
  flex-shrink: 0;
}
.ct-place-cancel:hover { background: var(--bg); color: var(--ink); }
@keyframes ct-banner-slide-in {
  from { opacity: 0; transform: translateX(-50%) translateY(-10px); }
  to { opacity: 1; transform: translateX(-50%) translateY(0); }
}

/* Cursor crosshair sobre el mapa cuando estamos en modo tap */
.ct-tap-mode,
.ct-tap-mode .maplibregl-map,
.ct-tap-mode .maplibregl-canvas {
  cursor: crosshair !important;
}

/* Toast feedback */
.ct-toast {
  position: fixed;
  top: 80px; left: 50%;
  transform: translateX(-50%) translateY(-20px);
  padding: 12px 20px;
  font-family: var(--font-mono); font-size: 0.72rem; font-weight: 800;
  letter-spacing: 0.1em; text-transform: uppercase;
  z-index: 4000; pointer-events: none;
  opacity: 0; transition: opacity 0.25s, transform 0.25s;
  white-space: nowrap; border: 2px solid;
  max-width: 90vw; text-align: center;
}
.ct-toast.visible {
  opacity: 1; transform: translateX(-50%) translateY(0);
}
.ct-toast-ok   { background: var(--ok);   color: var(--bg); border-color: var(--ok); }
.ct-toast-err  { background: var(--bad);  color: var(--bg); border-color: var(--bad); }
.ct-toast-info { background: var(--ink);  color: var(--bg); border-color: var(--ink); }

/* ════════════════════════════════════════════
   ADMIN — COLA DE PROPUESTAS PENDIENTES
   ════════════════════════════════════════════ */

/* Badge en la pestaña "Propuestas" del panel admin */
.admin-tab-badge {
  display: inline-block;
  margin-left: 4px;
  padding: 1px 6px;
  background: var(--terra); color: var(--bg);
  font-family: var(--font-mono); font-size: 0.6rem; font-weight: 800;
  letter-spacing: 0.04em;
  border-radius: 0;
  vertical-align: middle;
}

/* Filtros de tipo */
.pending-filters {
  display: flex; gap: 4px; flex-wrap: wrap;
  padding: 0 16px 12px;
}
.pending-filter {
  padding: 5px 10px;
  background: transparent; border: 1px solid var(--ink);
  color: var(--ink); cursor: pointer;
  font-family: var(--font-mono); font-size: 0.65rem; font-weight: 700;
  letter-spacing: 0.08em; border-radius: 0;
  transition: background 0.12s;
}
.pending-filter:hover { background: var(--paper); }
.pending-filter.active { background: var(--ink); color: var(--bg); }

/* Lista de propuestas */
.pending-list {
  display: flex; flex-direction: column; gap: 12px;
  padding: 0 16px 24px;
}
.pr-empty {
  text-align: center; padding: 40px 20px;
  font-family: var(--font-mono); font-size: 0.75rem;
  color: var(--ink-3); letter-spacing: 0.08em;
}
.pr-card {
  border: 1px solid var(--rule);
  padding: 12px 14px;
  background: var(--bg);
}
.pr-head {
  display: flex; align-items: center; gap: 8px;
  margin-bottom: 8px;
}
.pr-type {
  padding: 2px 6px;
  font-family: var(--font-mono); font-size: 0.6rem; font-weight: 800;
  letter-spacing: 0.1em;
}
.pr-sector {
  font-family: var(--font-mono); font-size: 0.65rem;
  color: var(--ink-2); letter-spacing: 0.06em; text-transform: uppercase;
  flex: 1;
}
.pr-time {
  font-family: var(--font-mono); font-size: 0.6rem;
  color: var(--ink-3); letter-spacing: 0.04em;
  white-space: nowrap;
}
.pr-name {
  font-family: var(--font-serif); font-size: 1.05rem; font-weight: 600;
  color: var(--ink); letter-spacing: -0.02em;
  margin-bottom: 6px;
}
.pr-blocks {
  list-style: none; padding: 0; margin: 0 0 8px;
  display: flex; flex-direction: column; gap: 3px;
}
.pr-blocks li {
  font-family: var(--font-mono); font-size: 0.75rem;
  color: var(--ink); padding: 2px 0;
  border-bottom: 1px dashed var(--rule);
}
.pr-blocks li:last-child { border-bottom: 0; }
.pr-blocks .bp-grade {
  margin-left: 6px;
  font-weight: 700; color: var(--terra);
  background: var(--terra-bg); padding: 1px 5px;
  font-size: 0.7rem;
}
.pr-desc, .pr-reason {
  font-family: var(--font-sans); font-size: 0.85rem;
  color: var(--ink-2); margin: 4px 0 8px; line-height: 1.4;
}
.pr-coords {
  font-family: var(--font-mono); font-size: 0.65rem;
  color: var(--ink-3); letter-spacing: 0.04em;
  margin-bottom: 8px;
}
.pr-coords > div { padding: 1px 0; }

/* Diff de coordenadas para sector_move */
.pr-coords-diff {
  background: var(--paper);
  border: 1px solid var(--rule);
  padding: 8px 10px;
  margin-bottom: 8px;
}
.pr-coords-old {
  color: var(--ink-3);
  text-decoration: line-through;
  margin-bottom: 4px;
}
.pr-coords-old span { color: var(--bad); }
.pr-coords-arrow {
  text-align: center;
  color: var(--terra);
  font-weight: 700;
  font-size: 0.8rem;
  margin: 2px 0;
}
.pr-coords-new {
  color: var(--ink);
  font-weight: 700;
}
.pr-coords-new span { color: var(--ok); }
.pr-author {
  font-family: var(--font-mono); font-size: 0.65rem;
  color: var(--ink-2); letter-spacing: 0.04em;
  padding-top: 8px;
  border-top: 1px solid var(--rule);
  margin-bottom: 10px;
}
.pr-actions {
  display: flex; gap: 6px;
  flex-wrap: wrap;
}
.pr-btn {
  flex: 1; min-width: 90px;
  padding: 8px;
  border-radius: 0; cursor: pointer;
  font-family: var(--font-mono); font-size: 0.65rem; font-weight: 800;
  letter-spacing: 0.08em; text-transform: uppercase;
  text-align: center; text-decoration: none;
  border: 1px solid;
  transition: background 0.12s;
}
.pr-btn-map {
  background: transparent; border-color: var(--ink); color: var(--ink);
}
.pr-btn-map:hover { background: var(--paper); }
.pr-btn-reject {
  background: transparent; border-color: var(--bad); color: var(--bad);
}
.pr-btn-reject:hover { background: var(--bad); color: var(--bg); }
.pr-btn-approve {
  background: var(--ok); border-color: var(--ok); color: var(--bg);
}
.pr-btn-approve:hover { background: var(--ink); border-color: var(--ink); }

/* ── Acordeón por sector en cola admin ── */
.pr-group {
  border: 1px solid var(--ink);
  margin-bottom: 12px;
}
.pr-group-head {
  display: flex; align-items: center; gap: 8px;
  width: 100%; padding: 10px 12px;
  background: var(--paper); border: 0;
  cursor: pointer; text-align: left;
  font-family: var(--font-mono); font-size: 0.75rem; font-weight: 800;
  letter-spacing: 0.08em; text-transform: uppercase;
  color: var(--ink);
  border-radius: 0;
  transition: background 0.12s;
}
.pr-group-head:hover { background: var(--rule); }
.pr-group-arrow {
  display: inline-block;
  transition: transform 0.18s;
  font-size: 0.7rem;
  color: var(--ink-2);
}
.pr-group.pr-collapsed .pr-group-arrow { transform: rotate(-90deg); }
.pr-group-name { flex: 1; }
.pr-group-count {
  background: var(--terra); color: var(--bg);
  padding: 2px 7px;
  font-family: var(--font-mono); font-size: 0.65rem; font-weight: 800;
  letter-spacing: 0.04em;
}
.pr-group-body {
  padding: 10px;
  display: flex; flex-direction: column; gap: 10px;
  background: var(--bg);
}
.pr-group.pr-collapsed .pr-group-body { display: none; }
.pr-group-body .pr-card { border: 1px solid var(--rule); }

/* ── Preview marker (admin "VER EN MAPA") ── */
.preview-marker { background: transparent !important; border: none !important; }
.preview-marker .pv-pin {
  position: absolute; top: 8px; left: 50%; transform: translateX(-50%);
  width: 24px; height: 24px;
  background: var(--terra);
  border: 3px solid #fff;
  border-radius: 50%;
  box-shadow: 0 0 0 2px var(--ink), 0 2px 6px rgba(0,0,0,0.5);
  z-index: 2;
}
.preview-marker .pv-pulse {
  position: absolute; top: 8px; left: 50%; transform: translateX(-50%);
  width: 24px; height: 24px;
  background: var(--terra);
  border-radius: 50%;
  opacity: 0.8;
  animation: pv-pulse 1.5s ease-out infinite;
  z-index: 1;
}
@keyframes pv-pulse {
  0%   { transform: translateX(-50%) scale(1); opacity: 0.7; }
  100% { transform: translateX(-50%) scale(2.5); opacity: 0; }
}
.preview-marker .pv-label {
  position: absolute; top: 36px; left: 50%; transform: translateX(-50%);
  padding: 2px 6px;
  background: var(--terra); color: var(--bg);
  font-family: var(--font-mono); font-size: 9px; font-weight: 800;
  letter-spacing: 0.08em; white-space: nowrap;
  z-index: 3;
}

/* ── Dropdown del panel admin ── */
.admin-tab-select {
  position: relative;
  margin: 12px 16px 16px;
  z-index: 100;
}
.admin-tab-toggle {
  width: 100%;
  display: flex; align-items: center; justify-content: space-between;
  padding: 10px 14px;
  background: transparent; border: 1px solid var(--ink);
  color: var(--ink); cursor: pointer;
  font-family: var(--font-mono); font-size: 0.75rem; font-weight: 700;
  letter-spacing: 0.08em; text-transform: uppercase;
  border-radius: 0;
  transition: background 0.12s;
}
.admin-tab-toggle:hover { background: var(--paper); }
.admin-tab-toggle.open { background: var(--ink); color: var(--bg); }
.admin-tab-toggle.open .att-arrow { transform: rotate(180deg); color: var(--bg); }
.att-current { flex: 1; text-align: left; }
.att-arrow {
  transition: transform 0.18s;
  font-size: 0.75rem;
}
.admin-tab-menu {
  position: absolute; top: 100%; left: 0; right: 0;
  background: var(--bg);
  border: 1px solid var(--ink); border-top: none;
  z-index: 110;
  max-height: 70vh; overflow-y: auto;
}
.admin-tab-menu .admin-tab {
  display: block; width: 100%;
  padding: 10px 14px;
  background: transparent; border: 0;
  border-bottom: 1px solid var(--rule);
  color: var(--ink); cursor: pointer;
  font-family: var(--font-mono); font-size: 0.72rem; font-weight: 700;
  letter-spacing: 0.06em;
  text-align: left; border-radius: 0;
  transition: background 0.12s;
}
.admin-tab-menu .admin-tab:last-child { border-bottom: 0; }
.admin-tab-menu .admin-tab:hover { background: var(--paper); }
.admin-tab-menu .admin-tab.active {
  background: var(--terra); color: var(--bg);
}
.admin-tab-menu .admin-tab.active .admin-tab-badge {
  background: var(--bg); color: var(--terra);
}
/* Pestaña pendientes con prioridad: borde terra cuando hay pendientes */
.admin-tab-menu .admin-tab[data-priority="1"] {
  border-left: 3px solid var(--terra);
}

/* ── Mis propuestas overlay ── */
.my-proposals-overlay {
  position: fixed; top: 0; left: 0; right: 0; bottom: 0;
  background: rgba(0, 0, 0, 0.4); backdrop-filter: blur(4px);
  display: flex; align-items: flex-end; justify-content: center;
  z-index: 1000;
  animation: fadeInUp 0.25s ease-out;
}

.my-proposals-modal {
  width: 100%; max-width: 520px; max-height: 85vh;
  background: var(--bg); border-radius: 0;
  border: 1px solid var(--rule);
  display: flex; flex-direction: column;
  animation: slideUp 0.25s ease-out;
}

.my-proposals-header {
  display: flex; align-items: center; justify-content: space-between;
  padding: 16px 20px;
  border-bottom: 1px solid var(--rule);
  font-family: var(--font-serif);
  font-size: 0.95rem; font-weight: 600;
  letter-spacing: -0.01em;
  color: var(--ink);
}

.my-proposals-back {
  width: 24px; height: 24px; padding: 0;
  background: transparent; border: 0;
  font-size: 1.2rem; cursor: pointer;
  color: var(--ink);
  transition: opacity 0.12s;
}

.my-proposals-back:hover { opacity: 0.7; }

.my-proposals-tabs {
  display: flex; gap: 0;
  border-bottom: 1px solid var(--rule);
  padding: 8px 12px;
  background: var(--paper);
}

.my-proposals-tab {
  flex: 1; padding: 8px 12px;
  background: transparent; border: 0;
  font-family: var(--font-mono);
  font-size: 0.75rem; font-weight: 700;
  letter-spacing: 0.06em;
  color: var(--dim);
  cursor: pointer;
  border-bottom: 2px solid transparent;
  transition: all 0.15s;
  text-align: center;
}

.my-proposals-tab:hover { color: var(--ink); }

.my-proposals-tab.active {
  color: var(--terra);
  border-bottom-color: var(--terra);
}

.my-proposals-list {
  flex: 1; overflow-y: auto;
  padding: 12px 8px;
}

.mp-empty, .mp-error {
  padding: 24px;
  text-align: center;
  color: var(--dim);
  font-size: 0.9rem;
}
.mp-empty-hint {
  margin-top: 10px;
  font-size: 0.85rem;
  color: var(--dim);
  line-height: 1.5;
}
.mp-retry-btn {
  margin-top: 10px;
  padding: 8px 16px;
  background: var(--ink);
  color: var(--paper);
  border: none;
  font-family: 'JetBrains Mono', monospace;
  font-size: 0.78rem;
  letter-spacing: 0.08em;
  text-transform: uppercase;
  cursor: pointer;
}
.mp-skeleton {
  pointer-events: none;
  animation: mpPulse 1.4s ease-in-out infinite;
}
.mp-skel-line {
  height: 14px;
  background: var(--rule);
  border-radius: 2px;
  margin: 8px 0;
}
.mp-skel-line.short { width: 60%; }
@keyframes mpPulse {
  0%, 100% { opacity: 1; }
  50%      { opacity: 0.5; }
}

/* Tiles OSM invertidos en dark mode: invert+hue-rotate da un aspecto oscuro
 * natural sin depender de CORS de terceros. El satélite no lleva esta clase. */
[data-theme="dark"] .cumbre-tile-dark {
  filter: invert(100%) hue-rotate(180deg) brightness(0.85) contrast(0.9);
}

/* Botón borrar en mp-card: solo aparece en approved/rejected */
.mp-delete-btn {
  margin-left: auto;
  width: 26px; height: 26px;
  border: 1px solid var(--rule);
  background: transparent;
  color: var(--dim);
  font-size: 1.1rem;
  line-height: 1;
  cursor: pointer;
  border-radius: 0;
  transition: background 0.12s, color 0.12s, border-color 0.12s;
}
.mp-delete-btn:hover {
  background: var(--terra);
  border-color: var(--terra);
  color: #fff;
}
.mp-delete-btn:disabled { opacity: 0.4; cursor: default; }

/* Modal de éxito tras enviar propuesta — persistente, requiere acción */
.ct-success-modal {
  text-align: center;
  padding: 32px 24px 24px;
  max-width: 360px;
}
.ct-success-icon {
  width: 64px; height: 64px;
  margin: 0 auto 16px;
  border-radius: 50%;
  background: var(--moss);
  color: #fff;
  display: flex; align-items: center; justify-content: center;
  font-size: 2rem; font-weight: 700;
  font-family: 'JetBrains Mono', monospace;
}
.ct-success-msg {
  margin: 12px 0 24px;
  color: var(--ink);
  font-size: 0.95rem;
  line-height: 1.6;
}
.ct-success-msg strong { color: var(--terra); }
.ct-modal-buttons {
  display: flex; gap: 8px; justify-content: center;
  flex-wrap: wrap;
}
.ct-btn {
  padding: 10px 16px;
  font-family: 'JetBrains Mono', monospace;
  font-size: 0.78rem;
  letter-spacing: 0.08em;
  text-transform: uppercase;
  border: 1px solid var(--ink);
  background: transparent;
  color: var(--ink);
  cursor: pointer;
  transition: background 0.12s, color 0.12s;
}
.ct-btn-primary { background: var(--ink); color: var(--paper); }
.ct-btn-primary:hover { background: var(--terra); border-color: var(--terra); }
.ct-btn-secondary:hover { background: var(--rule); }

.mp-card {
  padding: 12px 14px;
  margin: 0 4px 8px;
  background: var(--paper);
  border: 1px solid var(--rule);
  border-radius: 0;
  border-left: 3px solid var(--dim);
  transition: background 0.12s;
}

.mp-card[data-status="approved"] { border-left-color: var(--moss); }
.mp-card[data-status="rejected"] { border-left-color: var(--terra); }
.mp-card[data-status="pending"] { border-left-color: var(--ink); }

.mp-head {
  display: flex; gap: 8px; align-items: center;
  margin-bottom: 6px;
}

.mp-type {
  font-family: var(--font-mono);
  font-size: 0.7rem; font-weight: 700;
  letter-spacing: 0.06em;
  background: var(--dim); color: var(--bg);
  padding: 2px 6px;
  border-radius: 0;
}

.mp-status {
  font-weight: 700;
  font-size: 0.95rem;
}

.mp-name {
  font-family: var(--font-serif);
  font-size: 0.95rem; font-weight: 600;
  letter-spacing: -0.01em;
  color: var(--ink);
  margin-bottom: 6px;
  word-break: break-word;
}

.mp-meta {
  display: flex; justify-content: space-between;
  font-family: var(--font-mono);
  font-size: 0.75rem;
  color: var(--dim);
  letter-spacing: 0.06em;
  margin-bottom: 6px;
}

.mp-date {
  text-align: right;
}

.mp-reason {
  margin-top: 8px;
  padding: 8px 10px;
  background: rgba(195, 65, 12, 0.1);
  border-left: 2px solid var(--terra);
  font-style: italic;
  font-size: 0.85rem;
  color: var(--ink);
}

.account-btn {
  width: 100%;
  padding: 10px 14px;
  background: transparent; border: 0;
  border-bottom: 1px solid var(--rule);
  color: var(--ink); cursor: pointer;
  font-family: var(--font-mono);
  font-size: 0.72rem; font-weight: 700;
  letter-spacing: 0.06em;
  text-align: left;
  transition: background 0.12s;
}

.account-btn:hover { background: var(--paper); }

/* Fila de preferencia (segmented buttons) en el popover de cuenta */
.account-pref-row {
  display: flex; flex-direction: column; gap: 8px;
  padding: 10px 14px;
  border-bottom: 1px solid var(--rule);
}
.account-pref-label {
  font-family: var(--font-mono);
  font-size: 0.62rem; font-weight: 700;
  color: var(--ink-2);
  letter-spacing: 0.14em;
}
.account-pref-segmented {
  display: flex;
  border: 1px solid var(--rule);
  background: var(--paper-2);
}
.account-pref-btn {
  flex: 1;
  padding: 6px 10px;
  background: transparent; border: 0; cursor: pointer;
  font-family: var(--font-mono);
  font-size: 0.7rem; font-weight: 600;
  color: var(--ink-2);
  letter-spacing: 0.06em;
  text-transform: uppercase;
  transition: background 0.12s, color 0.12s;
}
.account-pref-btn + .account-pref-btn { border-left: 1px solid var(--rule); }
.account-pref-btn:hover { background: var(--paper); }
.account-pref-btn.active { background: var(--ink); color: var(--bg); }

.account-badge {
  display: inline-block;
  background: var(--terra);
  color: var(--bg);
  font-family: var(--font-mono);
  font-size: 0.65rem;
  font-weight: 700;
  padding: 2px 6px;
  border-radius: 2px;
  margin-left: 8px;
  letter-spacing: 0.05em;
}

/* ═══════════════════════════════════════════════════
   PRUEBAS1 — UX REDESIGN
   ═══════════════════════════════════════════════════ */

/* ── Animación de entrada de score bars ── */
@keyframes scoreFillIn {
  from { width: 0; opacity: 0; }
  to   { opacity: 1; }
}
@keyframes heightFillIn {
  from { height: 0; opacity: 0; }
  to   { opacity: 1; }
}
.score-fill { animation: scoreFillIn 0.6s cubic-bezier(0.16,1,0.3,1) both; }
.day-score-fill { animation: heightFillIn 0.5s cubic-bezier(0.16,1,0.3,1) both; }
.forecast-row:nth-child(1) .day-score-fill { animation-delay: 0.05s; }
.forecast-row:nth-child(2) .day-score-fill { animation-delay: 0.10s; }
.forecast-row:nth-child(3) .day-score-fill { animation-delay: 0.15s; }
.forecast-row:nth-child(4) .day-score-fill { animation-delay: 0.20s; }
.forecast-row:nth-child(5) .day-score-fill { animation-delay: 0.25s; }
.forecast-row:nth-child(6) .day-score-fill { animation-delay: 0.30s; }
.forecast-row:nth-child(7) .day-score-fill { animation-delay: 0.35s; }

/* ── Quick Glance: Hoy / Mañana / Finde ── */
.quick-glance {
  display: grid;
  grid-template-columns: repeat(3, 1fr);
  gap: 0;
  border: 1px solid var(--ink);
  margin-bottom: 18px;
}
.qg-item {
  display: flex;
  flex-direction: column;
  align-items: center;
  padding: 14px 8px 12px;
  gap: 4px;
  cursor: pointer;
  transition: background 0.12s;
  position: relative;
}
.qg-item:not(:last-child) { border-right: 1px solid var(--ink); }
.qg-item:hover { background: var(--paper); }
.qg-label {
  font-family: var(--font-mono);
  font-size: 0.58rem;
  font-weight: 700;
  letter-spacing: 0.18em;
  color: var(--ink-2);
  text-transform: uppercase;
}
.qg-score {
  font-family: var(--font-serif);
  font-size: 2.4rem;
  font-weight: 700;
  line-height: 1;
  letter-spacing: -0.04em;
}
.qg-pill {
  font-family: var(--font-mono);
  font-size: 0.56rem;
  font-weight: 700;
  letter-spacing: 0.12em;
  text-transform: uppercase;
  color: var(--ink-2);
}
.qg-icon {
  font-size: 1rem;
  line-height: 1;
}
.qg-item.qg-active::after {
  content: '';
  position: absolute;
  bottom: 0; left: 10%; right: 10%;
  height: 2px;
  background: var(--terra);
}

/* ── Hero score del día ── */
.hero-score-wrap {
  display: flex;
  align-items: center;
  gap: 18px;
  padding: 18px 0 14px;
  border-top: 1px solid var(--rule);
  border-bottom: 1px solid var(--rule);
  margin-bottom: 18px;
}
.hero-score-num {
  font-family: var(--font-serif);
  font-size: 5.5rem;
  font-weight: 700;
  line-height: 1;
  letter-spacing: -0.05em;
  min-width: 1.6ch;
  flex-shrink: 0;
}
.hero-score-right {
  flex: 1;
  min-width: 0;
  display: flex;
  flex-direction: column;
  gap: 6px;
}
.hero-score-label {
  font-family: var(--font-mono);
  font-size: 0.7rem;
  font-weight: 700;
  letter-spacing: 0.14em;
  text-transform: uppercase;
}
.hero-score-title {
  font-family: var(--font-mono);
  font-size: 0.6rem;
  color: var(--ink-2);
  letter-spacing: 0.12em;
  text-transform: uppercase;
}
.hero-score-bar-wrap {
  height: 6px;
  background: var(--rule);
  border-radius: 0;
  overflow: hidden;
}
.hero-score-bar-fill {
  height: 100%;
  border-radius: 0;
  transition: width 0.8s cubic-bezier(0.16,1,0.3,1);
}

/* ── Forecast row mejorado ── */
.forecast-row {
  grid-template-columns: 42px 20px 1fr 32px 60px !important;
}
.forecast-row .day-wmo-icon {
  display: flex;
  align-items: center;
  justify-content: center;
  opacity: 0.75;
}
.forecast-row .day-precip-prob {
  font-family: var(--font-mono);
  font-size: 0.6rem;
  color: var(--rain);
  font-weight: 700;
  letter-spacing: 0.04em;
  text-align: right;
  align-self: center;
}
.forecast-row .day-precip-prob.no-rain { color: var(--ink-3); font-weight: 400; }

/* ── Sector card score grande ── */
.sc-score-big {
  font-family: var(--font-serif);
  font-size: 2rem;
  font-weight: 700;
  line-height: 1;
  letter-spacing: -0.03em;
  min-width: 2.2ch;
  flex-shrink: 0;
}
.sc-body-row {
  display: flex;
  align-items: center;
  gap: 12px;
}
.sc-body-main {
  flex: 1;
  min-width: 0;
}
.sc-score-label-pill {
  font-family: var(--font-mono);
  font-size: 0.55rem;
  font-weight: 700;
  letter-spacing: 0.12em;
  text-transform: uppercase;
  color: var(--ink-2);
  display: block;
}

/* ── Transición de tabs ── */
.page { transition: opacity 0.15s ease; }
.page:not(.active) { opacity: 0; pointer-events: none; }
.page.active { opacity: 1; }

/* ── Fav bar pill mejorada ── */
.fav-pill {
  border-radius: 0 !important;
  transition: background 0.12s, transform 0.1s;
}
.fav-pill:active { transform: scale(0.96); }

/* ── Hour col: mejor ventana más visible ── */
.hour-col.is-best-window {
  border-top: 2px solid var(--ok);
  position: relative;
}
.hour-col.is-best-window::before {
  content: '★';
  position: absolute;
  top: -14px;
  left: 50%;
  transform: translateX(-50%);
  font-size: 0.6rem;
  color: var(--ok);
}

/* ── Score badge en cards ── */
.sc-score-badge {
  display: flex;
  flex-direction: column;
  align-items: center;
  justify-content: center;
  width: 52px;
  height: 52px;
  flex-shrink: 0;
  border: 1.5px solid var(--rule);
  background: var(--paper-2);
}
.sc-score-badge .sc-score-num {
  font-family: var(--font-serif);
  font-size: 1.5rem;
  font-weight: 700;
  line-height: 1;
  letter-spacing: -0.03em;
}
.sc-score-badge .sc-score-lbl {
  font-family: var(--font-mono);
  font-size: 0.48rem;
  font-weight: 700;
  letter-spacing: 0.1em;
  text-transform: uppercase;
  color: var(--ink-2);
}

/* ── Sector card layout con badge ── */
.sector-card { align-items: flex-start !important; gap: 14px !important; }
.sc-card-left {
  display: flex;
  flex-direction: column;
  align-items: center;
  gap: 6px;
  flex-shrink: 0;
}
.sc-card-left .sc-num {
  font-family: var(--font-mono);
  font-size: 0.58rem;
  font-weight: 700;
  letter-spacing: 0.1em;
  color: var(--ink-3);
}

/* ── Pill de distancia en columna izquierda de sector card ── */
.sc-dist-pill {
  font-family: var(--font-mono);
  font-size: 0.72rem;
  font-weight: 700;
  letter-spacing: 0.04em;
  color: var(--ink-2);
  text-align: center;
  line-height: 1.1;
  border-top: 1px solid var(--rule);
  padding-top: 5px;
  width: 100%;
}
.sc-dist-unit {
  font-size: 0.55rem;
  font-weight: 400;
  letter-spacing: 0.08em;
  color: var(--ink-3);
  margin-left: 1px;
}

/* ═══════════════════════════════════════════════════
   PRUEBAS2 — UX VISUAL V2
   ═══════════════════════════════════════════════════ */

/* ── 1. Nav activo con fondo (sin iconos, sin escala) ── */
.nav-tab.active::after { display: none; }
.nav-tab.active {
  background: var(--terra-bg);
  color: var(--terra);
}
.nav-tab { transition: background 0.12s, color 0.12s; }

/* ── 2. Details grid: valores más grandes + colores semánticos ── */
.detail-card { padding: 12px 10px; }
.detail-value { font-size: 1.3rem !important; }
.detail-card[data-key="humidity"] .detail-value { color: var(--rain); }
.detail-card[data-key="wind"] .detail-value,
.detail-card[data-key="gusts"] .detail-value { color: var(--wind); }
.detail-card[data-key="precip"] .detail-value { color: var(--rain); }

/* ── 3. Climb verdict: fondo coloreado, borde uniforme en los 4 lados ── */
.climb-verdict {
  border-width: 2px !important;
  border-left-width: 2px !important;
  padding: 14px 16px;
}
.climb-verdict.cv-good {
  background: color-mix(in srgb, var(--ok) 10%, transparent);
  border-color: var(--ok);
}
.climb-verdict.cv-mid {
  background: color-mix(in srgb, var(--warn) 10%, transparent);
  border-color: var(--warn);
}
.climb-verdict.cv-bad {
  background: color-mix(in srgb, var(--bad) 10%, transparent);
  border-color: var(--bad);
}
.climb-verdict .cv-status { font-size: 1.5rem; }
.cv-clickable:hover { opacity: 0.85; }

/* ── 4. Hora actual: shadow suave, sin escala ── */
.hour-col.is-now {
  box-shadow: inset 0 0 0 1px rgba(var(--ink-rgb),0.3);
}

/* ── 5. Horas de lluvia: tinte azul ── */

/* ── 6. Forecast: score más grande y mejor día con fondo ── */
.day-score-num { font-size: 0.82rem !important; font-weight: 700; }
.forecast-row.best-day {
  background: color-mix(in srgb, var(--terra) 6%, transparent);
  border-radius: 2px;
}
.forecast-row.best-day .day-name { color: var(--terra); }
.forecast-row:hover { background: var(--paper); }

/* ── 7. Fav activo con color terra ── */
.fav-btn.is-fav {
  background: var(--terra-bg);
  color: var(--terra);
  border-color: var(--terra);
}

/* ── 8. Score breakdown hover ── */
.score-toggle:hover { background: var(--paper); }

/* ── 9. Sector card hover más claro ── */
.sector-card:hover { background: var(--paper-2) !important; }

/* ── 10. Scores coloreados en franja horaria: lluvia ── */
.hour-col.hour-rainy {
  background: color-mix(in srgb, var(--rain) 6%, transparent);
}
.hour-col.hour-rainy .hour-prob { color: var(--rain) !important; font-weight: 700; }

/* ═══════════════════════════════════════════════════
   PRUEBAS3 — POLISH VISUAL
   ═══════════════════════════════════════════════════ */

/* ── 1. Skeleton loaders (shimmer suave) ─────────── */
@keyframes shimmer {
  0%   { background-position: -300px 0; }
  100% { background-position: 300px 0; }
}
.skeleton {
  background: linear-gradient(
    90deg,
    var(--rule) 0%,
    color-mix(in srgb, var(--rule) 60%, var(--paper-2)) 50%,
    var(--rule) 100%
  );
  background-size: 600px 100%;
  animation: shimmer 1.4s infinite linear;
  border-radius: 1px;
  display: inline-block;
  vertical-align: middle;
}
.skeleton-bar {
  height: 14px;
  width: 100%;
  flex: 1;
}
.skeleton-pill {
  height: 11px;
  width: 60px;
}
.skeleton-text {
  height: 10px;
  width: 90px;
}
/* Estado loading del sector card */
.sector-card.is-loading .sc-score-num,
.sector-card.is-loading .sc-score-lbl,
.sector-card.is-loading .sc-meta {
  color: transparent !important;
  background: linear-gradient(
    90deg,
    var(--rule) 0%,
    color-mix(in srgb, var(--rule) 60%, var(--paper-2)) 50%,
    var(--rule) 100%
  );
  background-size: 600px 100%;
  animation: shimmer 1.4s infinite linear;
  border-radius: 1px;
  height: 0.85em;
  display: inline-block;
  min-width: 60px;
}
.sector-card.is-loading .sc-meta { min-width: 140px; height: 0.65rem; }
.sector-card.is-loading .sc-score-num { min-width: 32px; height: 1.4rem; }
.sector-card.is-loading .sc-score-lbl { min-width: 36px; height: 0.45rem; margin-top: 4px; }
.sector-card.is-loading .sc-score-badge { border-color: var(--rule); }
.mini-spinner { display: none; }

/* ── 2. Transición slide al entrar/salir de sector ─
 * Durante la animación, la página que se desliza está en position:fixed
 * por encima de la otra (que ya está visible debajo). Así no hay frame
 * en blanco entre el slide-out y la aparición de la otra página. */
@keyframes pageSlideIn {
  from { transform: translateX(100%); }
  to   { transform: translateX(0); }
}
@keyframes pageSlideOut {
  from { transform: translateX(0); }
  to   { transform: translateX(100%); }
}
.page.slide-in,
.page.slide-out {
  position: fixed;
  inset: 0;
  z-index: 50;
  background: var(--bg);
  overflow: hidden;
  will-change: transform;
}
.page.slide-in  { animation: pageSlideIn  0.24s cubic-bezier(0.32, 0.72, 0.30, 1.0) both; }
.page.slide-out {
  animation: pageSlideOut 0.24s cubic-bezier(0.32, 0.72, 0.30, 1.0) both;
  pointer-events: none;
}

/* ── 3. Empty state mejorado ─────────────────────── */
.sectors-empty-smart {
  text-align: center;
  padding: 36px 20px;
  border: 1px dashed var(--rule);
  margin: 12px 0;
}
.ses-icon {
  font-family: var(--font-serif);
  font-size: 2.4rem;
  color: var(--ink-3);
  line-height: 1;
  margin-bottom: 14px;
  letter-spacing: -0.04em;
}
.ses-title {
  font-family: var(--font-serif);
  font-size: 1.05rem;
  font-weight: 600;
  color: var(--ink);
  margin-bottom: 6px;
  letter-spacing: -0.02em;
}
.ses-text {
  font-family: var(--font-mono);
  font-size: 0.7rem;
  color: var(--ink-2);
  letter-spacing: 0.04em;
  margin-bottom: 18px;
  line-height: 1.5;
}
.ses-action {
  font-family: var(--font-mono);
  font-size: 0.72rem;
  font-weight: 700;
  letter-spacing: 0.1em;
  text-transform: uppercase;
  padding: 10px 18px;
  border: 1px solid var(--ink);
  background: var(--ink);
  color: var(--bg);
  cursor: pointer;
  transition: background 0.12s;
}
.ses-action:hover { background: var(--terra); border-color: var(--terra); }
.ses-action.ses-action-secondary {
  background: transparent;
  color: var(--ink);
  margin-left: 8px;
}
.ses-action.ses-action-secondary:hover {
  background: var(--paper);
}

/* ── 4. Indicador "datos frescos" ────────────────── */
@keyframes fresh-pulse {
  0%, 100% { transform: scale(1); opacity: 1; }
  50%      { transform: scale(1.6); opacity: 0.4; }
}
.fresh-dot {
  display: inline-block;
  width: 6px;
  height: 6px;
  border-radius: 50%;
  background: var(--ok);
  margin-right: 6px;
  vertical-align: middle;
  position: relative;
}
.fresh-dot::after {
  content: '';
  position: absolute;
  inset: -2px;
  border-radius: 50%;
  background: var(--ok);
  animation: fresh-pulse 2.4s ease-in-out infinite;
  z-index: -1;
}
.fresh-dot.stale {
  background: var(--ink-3);
}
.fresh-dot.stale::after { display: none; }
.location-name { display: inline-flex; align-items: center; }

/* Ocultar el location-icon antiguo: ya tenemos fresh-dot que comunica lo mismo */
.location .location-icon { display: none; }
.location { display: inline-flex; align-items: center; gap: 6px; }

/* ── Install Banner ── */
.install-banner {
  position: fixed;
  bottom: 70px; /* Above bottom nav */
  left: 12px;
  right: 12px;
  background: var(--ink);
  color: var(--bg);
  padding: 12px 16px;
  border-radius: 8px;
  display: flex;
  align-items: center;
  gap: 12px;
  z-index: 9999;
  box-shadow: 0 4px 12px rgba(0,0,0,0.15);
  font-size: 0.9rem;
  font-weight: 500;
}
.install-banner .install-btn {
  background: var(--terra);
  color: white;
  border: none;
  padding: 6px 12px;
  border-radius: 4px;
  font-weight: 600;
  cursor: pointer;
  white-space: nowrap;
}
.install-banner .install-close {
  background: transparent;
  border: none;
  color: var(--ink-2);
  font-size: 1.2rem;
  cursor: pointer;
  padding: 0 4px;
  line-height: 1;
}

/* ── iOS Install Guide Banner ── */
.ios-install-banner {
  position: fixed;
  bottom: 70px;
  left: 12px;
  right: 12px;
  background: var(--bg);
  border: 1px solid var(--rule);
  padding: 12px 16px;
  border-radius: 12px;
  display: flex;
  align-items: center;
  justify-content: space-between;
  gap: 12px;
  z-index: 9999;
  box-shadow: 0 4px 16px rgba(0,0,0,0.1);
}
.ios-guide-content {
  display: flex;
  flex-direction: column;
  gap: 8px;
}
.ios-guide-text {
  font-size: 0.85rem;
  color: var(--ink);
  line-height: 1.4;
}
.ios-icons {
  display: flex;
  align-items: center;
  gap: 8px;
  color: var(--ink-2);
}
.ios-share-icon, .ios-add-icon {
  width: 20px;
  height: 20px;
}
.ios-arrow {
  font-size: 1.2rem;
  color: var(--terra);
}
.ios-install-close {
  background: transparent;
  border: none;
  color: var(--ink-3);
  font-size: 1.2rem;
  cursor: pointer;
  padding: 4px;
  line-height: 1;
}

/* ── Admin Panel en Desktop: más ancho y legible ─ */
@media (min-width: 1024px) {
  #adminPanel .day-view-inner {
    max-width: 1100px;
  }
  .install-banner, .ios-install-banner {
    display: none !important;
  }
}

/* ═══════════════════════════════════════════
   PERFILES DE USUARIO — estilos nuevos
   ═══════════════════════════════════════════ */

/* ── Modal @username ── */
.username-card {
  background: var(--surface);
  border-radius: 16px;
  padding: 28px 24px 24px;
  width: 100%;
  max-width: 380px;
  display: flex;
  flex-direction: column;
  gap: 12px;
}
.username-card-label {
  font-family: var(--font-mono);
  font-size: 0.6rem;
  letter-spacing: 0.18em;
  color: var(--ink-2);
}
.username-card-title {
  font-size: 1.15rem;
  font-weight: 700;
  color: var(--ink);
  margin: 0;
}
.username-card-sub {
  font-size: 0.8rem;
  color: var(--ink-2);
  margin: 0;
  line-height: 1.4;
}
.username-input-wrap {
  display: flex;
  align-items: center;
  gap: 6px;
  background: var(--bg);
  border: 1px solid var(--rule);
  border-radius: 8px;
  padding: 0 12px;
}
.username-at {
  font-family: var(--font-mono);
  font-size: 1rem;
  color: var(--terra);
  flex-shrink: 0;
}
.username-input-wrap input {
  border: none;
  background: transparent;
  padding: 12px 0;
  font-size: 1rem;
  color: var(--ink);
  width: 100%;
  outline: none;
  font-family: var(--font-mono);
}
.username-status {
  font-size: 0.78rem;
  min-height: 18px;
  transition: color 0.2s;
}
.username-status.ok       { color: #3a9c5a; }
.username-status.err      { color: var(--bad); }
.username-status.checking { color: var(--ink-2); }
.username-confirm-btn {
  margin-top: 4px;
  width: 100%;
  padding: 13px;
  font-size: 0.88rem;
}

/* ── Cabecera de perfil ── */
.profile-header {
  display: flex;
  gap: 16px;
  align-items: flex-start;
  padding: 16px 0 14px;
  border-bottom: 1px solid var(--rule);
  margin-bottom: 14px;
}
.profile-avatar-wrap {
  position: relative;
  flex-shrink: 0;
  cursor: pointer;
}
.profile-photo {
  width: 56px;
  height: 56px;
  border-radius: 50%;
  object-fit: cover;
  display: block;
}
.profile-photo-letter {
  background: var(--terra);
  color: #fff;
  display: flex;
  align-items: center;
  justify-content: center;
  font-weight: 700;
  font-family: var(--font-mono);
  border-radius: 50%;
}
.profile-avatar-overlay {
  position: absolute;
  inset: 0;
  border-radius: 50%;
  background: rgba(0,0,0,0.45);
  color: #fff;
  font-size: 1.1rem;
  display: flex;
  align-items: center;
  justify-content: center;
  opacity: 0;
  transition: opacity 0.18s;
}
.profile-avatar-wrap:hover .profile-avatar-overlay { opacity: 1; }
.profile-header-info {
  flex: 1;
  min-width: 0;
  display: flex;
  flex-direction: column;
  gap: 4px;
}
.profile-username {
  font-family: var(--font-mono);
  font-size: 0.95rem;
  font-weight: 700;
  color: var(--ink);
}
.profile-displayname {
  font-size: 0.82rem;
  color: var(--ink-2);
}
.profile-bio-wrap {
  display: flex;
  align-items: center;
  gap: 6px;
  margin-top: 2px;
}
.profile-bio-text {
  font-size: 0.82rem;
  color: var(--ink-2);
  flex: 1;
}
.profile-bio-static {
  font-size: 0.82rem;
  color: var(--ink-2);
}
.profile-bio-edit-btn {
  background: transparent;
  border: none;
  color: var(--ink-3);
  cursor: pointer;
  font-size: 0.9rem;
  padding: 2px 4px;
  flex-shrink: 0;
}
.profile-bio-input {
  width: 100%;
  background: var(--bg);
  border: 1px solid var(--rule);
  border-radius: 6px;
  padding: 8px 10px;
  font-size: 0.82rem;
  color: var(--ink);
  resize: none;
  font-family: inherit;
}
.profile-meta-row {
  font-size: 0.78rem;
  color: var(--ink-2);
  margin-top: 2px;
}
.profile-privacy-row {
  display: flex;
  align-items: center;
  justify-content: space-between;
  padding: 10px 0;
  border-bottom: 1px solid var(--rule);
  margin-bottom: 8px;
}
.profile-privacy-label {
  font-size: 0.82rem;
  color: var(--ink-2);
}
.profile-privacy-toggle {
  background: var(--rule);
  border: none;
  border-radius: 20px;
  padding: 5px 14px;
  font-size: 0.78rem;
  font-family: var(--font-mono);
  color: var(--ink-2);
  cursor: pointer;
  transition: background 0.2s, color 0.2s;
}
.profile-privacy-toggle.active {
  background: var(--terra);
  color: #fff;
}
.profile-follow-btn {
  margin-top: 8px;
  background: var(--terra);
  color: #fff;
  border: none;
  border-radius: 8px;
  padding: 8px 16px;
  font-size: 0.82rem;
  font-family: var(--font-mono);
  cursor: pointer;
  transition: background 0.2s;
  align-self: flex-start;
}
.profile-follow-btn.following {
  background: var(--rule);
  color: var(--ink-2);
}
.profile-follow-btn.pending {
  background: transparent;
  color: var(--ink-2);
  border: 1.5px solid var(--rule);
}

/* ── Lightbox foto de perfil ── */
.photo-lightbox {
  display: none;
  position: fixed;
  inset: 0;
  background: rgba(0,0,0,0.85);
  z-index: 9999;
  align-items: center;
  justify-content: center;
  cursor: pointer;
}
.photo-lightbox.open { display: flex; }
.photo-lightbox-img {
  max-width: 90vw;
  max-height: 90vh;
  border-radius: 12px;
  object-fit: contain;
}

/* ── Solicitudes de seguimiento ── */
.follow-requests-section {
  border: 1.5px solid var(--rule);
  border-radius: 10px;
  padding: 12px 14px;
  margin: 12px 0;
}
.follow-requests-title {
  font-size: 0.78rem;
  font-family: var(--font-mono);
  color: var(--ink-2);
  margin-bottom: 10px;
  text-transform: uppercase;
  letter-spacing: 0.03em;
}
.follow-request-item {
  display: flex;
  align-items: center;
  gap: 10px;
  padding: 6px 0;
  border-bottom: 1px solid var(--rule);
}
.follow-request-item:last-child { border-bottom: none; }
.follow-request-name { flex: 1; font-size: 0.88rem; }
.follow-request-actions { display: flex; gap: 6px; }
.btn-accept-req {
  background: var(--terra);
  color: #fff;
  border: none;
  border-radius: 6px;
  padding: 5px 10px;
  font-size: 0.78rem;
  cursor: pointer;
}
.btn-reject-req {
  background: transparent;
  color: var(--ink-2);
  border: 1px solid var(--rule);
  border-radius: 6px;
  padding: 5px 10px;
  font-size: 0.78rem;
  cursor: pointer;
}
.profile-photo-clickable { cursor: zoom-in; }
.profile-notif-status {
  font-family: var(--font-mono); font-size: 0.78rem;
  color: var(--ink-2); padding: 4px 10px;
  border: 1.5px solid var(--rule); border-radius: 6px;
}
.profile-notif-status.active {
  background: var(--terra); color: #fff; border-color: var(--terra);
}

/* ── Lista de seguidores/siguiendo ── */
.follow-list { display: flex; flex-direction: column; gap: 2px; margin-top: 8px; }
.follow-list-item {
  display: flex;
  align-items: center;
  gap: 12px;
  padding: 10px 4px;
  border-bottom: 1px solid var(--rule);
  border-radius: 6px;
  transition: background 0.15s;
}
.follow-list-item:last-child { border-bottom: none; }
.follow-list-item:hover { background: var(--bg-2); }
.follow-list-info { display: flex; flex-direction: column; gap: 2px; }
.follow-list-username { font-size: 0.88rem; font-weight: 600; }
.follow-list-name { font-size: 0.78rem; color: var(--ink-2); }
.profile-meta-link:hover { text-decoration: underline; }
.follow-list-remove {
  background: none; border: 1px solid var(--rule); border-radius: 6px;
  color: var(--ink-2); padding: 4px 8px; cursor: pointer; font-size: 0.75rem;
  flex-shrink: 0; transition: background 0.15s;
}
.follow-list-remove:hover { background: var(--bg-2); }
.jp-stat-link { cursor: pointer; transition: opacity 0.15s; }
.jp-stat-link:hover { opacity: 0.7; }

/* ── Lista de bloques en vista stat ── */
.jp-entries-list { display: flex; flex-direction: column; gap: 2px; margin-top: 4px; }

/* ── Buscador de usuarios ── */
.us-result {
  display: flex;
  align-items: center;
  gap: 12px;
  padding: 10px 4px;
  border-bottom: 1px solid var(--rule);
  cursor: pointer;
  transition: background 0.15s;
}
.us-result:hover { background: var(--bg); border-radius: 8px; }
.us-avatar {
  width: 36px;
  height: 36px;
  border-radius: 50%;
  object-fit: cover;
  flex-shrink: 0;
}
.us-avatar-letter {
  background: var(--terra);
  color: #fff;
  display: flex;
  align-items: center;
  justify-content: center;
  font-weight: 700;
  font-size: 0.9rem;
  font-family: var(--font-mono);
}
.us-result-username {
  font-family: var(--font-mono);
  font-size: 0.88rem;
  font-weight: 700;
  color: var(--ink);
}
.us-result-name {
  font-size: 0.78rem;
  color: var(--ink-2);
}
.us-empty {
  padding: 16px 4px;
  color: var(--ink-3);
  font-size: 0.82rem;
}

/* ── Quién escaló aquí ── */
.who-climbed-section {
  margin-top: 12px;
  padding: 14px 16px;
  border-radius: 12px;
}
.who-climbed-header {
  margin-bottom: 10px;
}
.who-climbed-title {
  font-family: var(--font-mono);
  font-size: 0.7rem;
  letter-spacing: 0.12em;
  color: var(--ink-2);
  text-transform: uppercase;
}
.who-climbed-list {
  display: flex;
  flex-wrap: wrap;
  gap: 10px;
}
.wc-user {
  display: flex;
  align-items: center;
  gap: 6px;
  cursor: pointer;
  padding: 4px 8px 4px 4px;
  border-radius: 20px;
  background: var(--bg);
  border: 1px solid var(--rule);
  transition: border-color 0.15s;
}
.wc-user:hover { border-color: var(--terra); }
.wc-avatar {
  width: 28px;
  height: 28px;
  border-radius: 50%;
  object-fit: cover;
  flex-shrink: 0;
}
.wc-avatar-letter {
  background: var(--terra);
  color: #fff;
  display: flex;
  align-items: center;
  justify-content: center;
  font-size: 0.75rem;
  font-weight: 700;
  font-family: var(--font-mono);
}
.wc-name {
  font-size: 0.78rem;
  font-family: var(--font-mono);
  color: var(--ink);
}
