/* ============================================================
   Alquileres — dashboard SaaS
   Sidebar fijo, tarjetas de indicadores, tablas espaciosas.
   Inter para toda la interfaz. Modo claro por defecto: fondo gris
   muy claro, tarjetas blancas con sombra suave, acento azul templado.
   Modo oscuro: mismos tokens redefinidos bajo data-tema="oscuro".
   ============================================================ */

:root {
  --bg: #f6f7fb;
  --surface: #ffffff;
  --surface-tint: #f8f9fc;
  --border: #e8eaf1;
  --border-strong: #d9dce6;

  --ink: #1a2033;
  --ink-2: #4b5169;
  --ink-3: #868ba3;
  --ink-4: #b3b7c9;

  --accent: #4c7df5;
  --accent-strong: #3763d9;
  --accent-soft: #eef3fe;
  --accent-soft-strong: #dde8fd;

  --success: #12b76a;
  --success-soft: #e7f9f0;
  --warning: #f79009;
  --warning-soft: #fff4e5;
  --danger: #f04438;
  --danger-soft: #feecec;
  --neutral-soft: #eef0f5;

  /* Texto rojo/ambar/verde sobre fondos suaves (avisos, badges, montos) */
  --danger-text: #b42318;
  --warning-text: #b54708;
  --success-text: #067647;

  --shadow-sm: 0 1px 2px rgba(16, 24, 40, 0.04);
  --shadow-card: 0 1px 2px rgba(16, 24, 40, 0.03), 0 10px 24px -12px rgba(16, 24, 40, 0.10);
  --shadow-modal: 0 24px 60px -16px rgba(16, 24, 40, 0.22);

  --radius-lg: 16px;
  --radius-md: 12px;
  --radius-sm: 8px;

  --font-display: "Inter Tight", "Inter", "Segoe UI", sans-serif;
  --font-body: "Inter", "Segoe UI", sans-serif;

  --sidebar-w: 264px;
}

/* ---------- Modo oscuro (tema.js pone data-tema en <html>) ----------
   Los colores solidos (acento, verde, ambar, rojo) se mantienen; cambian
   fondos, bordes, textos y los fondos suaves de pills y avisos. */

:root[data-tema="oscuro"] {
  color-scheme: dark;

  --bg: #0e121c;
  --surface: #161b28;
  --surface-tint: #1c2232;
  --border: #262d3f;
  --border-strong: #353d53;

  --ink: #e7eaf3;
  --ink-2: #b7bdcf;
  --ink-3: #8b91a8;
  --ink-4: #5e6479;

  --accent-strong: #86a8ff;
  --accent-soft: rgba(76, 125, 245, 0.16);
  --accent-soft-strong: rgba(76, 125, 245, 0.3);

  --success-soft: rgba(18, 183, 106, 0.15);
  --warning-soft: rgba(247, 144, 9, 0.15);
  --danger-soft: rgba(240, 68, 56, 0.16);
  --neutral-soft: #262d3f;

  --danger-text: #fda29b;
  --warning-text: #fdb022;
  --success-text: #6ce9a6;

  --shadow-sm: 0 1px 2px rgba(0, 0, 0, 0.3);
  --shadow-card: 0 1px 2px rgba(0, 0, 0, 0.25), 0 10px 24px -12px rgba(0, 0, 0, 0.5);
  --shadow-modal: 0 24px 60px -16px rgba(0, 0, 0, 0.7);
}

/* --accent-strong es texto claro en oscuro; como fondo de hover con texto blanco no sirve */
:root[data-tema="oscuro"] .btn-primario:hover,
:root[data-tema="oscuro"] .btn-mini.marcar:hover { background: #3763d9; }
:root[data-tema="oscuro"] .tab-contador { background: rgba(255, 255, 255, 0.1); }

* { box-sizing: border-box; }

body {
  margin: 0;
  background: var(--bg);
  color: var(--ink);
  font-family: var(--font-body);
  font-size: 15px;
  -webkit-font-smoothing: antialiased;
}

h1, h2, h3 { font-family: var(--font-display); }

::selection { background: var(--accent-soft-strong); color: var(--accent-strong); }

:focus-visible {
  outline: 2px solid var(--accent);
  outline-offset: 2px;
  border-radius: 4px;
}

button { font-family: inherit; cursor: pointer; }

.oculto { display: none !important; }

/* ---------- Layout general ---------- */

.app-shell {
  display: grid;
  grid-template-columns: var(--sidebar-w) 1fr;
  min-height: 100vh;
}

/* ---------- Sidebar ---------- */

.sidebar {
  background: var(--surface);
  border-right: 1px solid var(--border);
  display: flex;
  flex-direction: column;
  position: sticky;
  top: 0;
  height: 100vh;
  padding: 1.5rem 1rem;
}

.brand {
  display: flex;
  align-items: center;
  gap: 0.7rem;
  padding: 0.25rem 0.5rem 1.6rem;
}

.brand-mark {
  width: 36px;
  height: 36px;
  flex: none;
  display: grid;
  place-items: center;
  background: var(--accent);
  color: #fff;
  border-radius: 10px;
}
.brand-mark svg { width: 20px; height: 20px; }

.brand-text { display: flex; flex-direction: column; line-height: 1.25; }
.brand-text strong { font-family: var(--font-display); font-size: 1.02rem; font-weight: 700; letter-spacing: -0.01em; }
.brand-text small { color: var(--ink-3); font-size: 0.76rem; }

.nav {
  display: flex;
  flex-direction: column;
  gap: 0.15rem;
  flex: 1;
}

.nav-item {
  display: flex;
  align-items: center;
  gap: 0.7rem;
  padding: 0.6rem 0.7rem;
  border-radius: var(--radius-sm);
  border: none;
  background: none;
  color: var(--ink-2);
  font-size: 0.9rem;
  font-weight: 500;
  text-align: left;
  width: 100%;
  position: relative;
}
.nav-item svg { width: 19px; height: 19px; flex: none; color: var(--ink-3); }
.nav-item:hover { background: var(--surface-tint); color: var(--ink); }
.nav-item:hover svg { color: var(--ink-2); }

.nav-item.activo {
  background: var(--accent-soft);
  color: var(--accent-strong);
  font-weight: 600;
}
.nav-item.activo svg { color: var(--accent); }
.nav-item.activo::before {
  content: "";
  position: absolute;
  left: -1rem;
  top: 0.35rem;
  bottom: 0.35rem;
  width: 3px;
  border-radius: 0 3px 3px 0;
  background: var(--accent);
}

.nav-badge {
  margin-left: auto;
  font-size: 0.68rem;
  font-weight: 700;
  color: var(--danger);
  background: var(--danger-soft);
  border-radius: 999px;
  padding: 0.08rem 0.45rem;
}

.sidebar-footer { padding-top: 0.75rem; border-top: 1px solid var(--border); }

.whatsapp-teaser {
  display: flex;
  align-items: center;
  gap: 0.65rem;
  padding: 0.65rem 0.7rem;
  border-radius: var(--radius-sm);
  color: var(--ink-4);
  opacity: 0.85;
}
.whatsapp-icon { display: grid; place-items: center; }
.whatsapp-icon svg { width: 19px; height: 19px; }
.whatsapp-copy { display: flex; flex-direction: column; line-height: 1.25; }
.whatsapp-copy strong { font-size: 0.85rem; color: var(--ink-3); font-weight: 600; }
.whatsapp-copy small { font-size: 0.72rem; }

/* ---------- Main / topbar ---------- */

.main { min-width: 0; display: flex; flex-direction: column; height: 100vh; overflow: hidden; }

.topbar {
  padding: 1.7rem 2.2rem 1.1rem;
  flex: none;
  display: flex;
  align-items: flex-start;
  justify-content: space-between;
  gap: 1rem;
}

.topbar-acciones { flex: none; display: flex; gap: 0.5rem; flex-wrap: wrap; justify-content: flex-end; }
.btn-salir { display: inline-flex; align-items: center; gap: 0.45rem; }
.btn-salir svg { width: 1rem; height: 1rem; }

/* Boton modo claro / oscuro: muestra la opcion a la que se cambia */
.btn-tema { flex: none; }
.tema-opcion { display: inline-flex; align-items: center; gap: 0.45rem; }
.tema-opcion svg { width: 1rem; height: 1rem; }
.tema-a-claro,
:root[data-tema="oscuro"] .tema-a-oscuro { display: none; }
:root[data-tema="oscuro"] .tema-a-claro { display: inline-flex; }
.topbar h1 {
  margin: 0;
  font-size: 1.5rem;
  font-weight: 700;
  letter-spacing: -0.02em;
}
.page-sub { margin: 0.3rem 0 0; color: var(--ink-3); font-size: 0.9rem; }

.main-scroll { flex: 1; overflow-y: auto; padding: 0 2.2rem 2.5rem; }

/* ---------- Tarjetas de indicadores ---------- */

.cards-row {
  display: grid;
  grid-template-columns: repeat(auto-fit, minmax(190px, 1fr));
  gap: 1rem;
  margin-bottom: 1.75rem;
}

.card {
  background: var(--surface);
  border: 1px solid var(--border);
  border-radius: var(--radius-lg);
  box-shadow: var(--shadow-card);
  padding: 1.2rem 1.3rem;
  display: flex;
  flex-direction: column;
  gap: 0.65rem;
  transition: transform 0.15s ease, box-shadow 0.15s ease;
}
.card:hover { transform: translateY(-2px); box-shadow: var(--shadow-card), 0 20px 34px -18px rgba(18, 23, 46, 0.18); }
.card.clicable { cursor: pointer; }
.card.clicable:hover { border-color: var(--accent-soft-strong); }
.card.clicable .card-valor { color: var(--accent-strong); }

.card-icon {
  width: 34px;
  height: 34px;
  border-radius: var(--radius-sm);
  display: grid;
  place-items: center;
  background: var(--accent-soft);
  color: var(--accent);
}
.card-icon svg { width: 18px; height: 18px; }
.card.alerta .card-icon { background: var(--warning-soft); color: var(--warning); }

.card-valor {
  font-family: var(--font-display);
  font-size: 1.65rem;
  font-weight: 800;
  letter-spacing: -0.02em;
  font-variant-numeric: tabular-nums;
}
.card-valor.alerta { color: var(--warning); }
.card-etiqueta { color: var(--ink-3); font-size: 0.82rem; font-weight: 500; }

/* ---------- Contenedor de contenido / panel ---------- */

.content-area { display: flex; flex-direction: column; gap: 1.5rem; }

.panel {
  background: var(--surface);
  border: 1px solid var(--border);
  border-radius: var(--radius-lg);
  box-shadow: var(--shadow-card);
  overflow: hidden;
}

.panel-titulo-bar {
  display: flex;
  align-items: center;
  justify-content: space-between;
  padding: 1.1rem 1.4rem;
  border-bottom: 1px solid var(--border);
}
.panel-titulo-bar h2 { margin: 0; font-size: 1rem; font-weight: 700; }
.panel-titulo-bar p { margin: 0.15rem 0 0; color: var(--ink-3); font-size: 0.82rem; }

.estado-carga, .estado-vacio {
  text-align: center;
  color: var(--ink-3);
  padding: 3.5rem 1rem;
  font-size: 0.9rem;
}

.msg-error {
  background: var(--danger-soft);
  border: 1px solid var(--danger);
  color: var(--danger);
  border-radius: var(--radius-sm);
  padding: 0.7rem 1rem;
  font-size: 0.85rem;
  margin-bottom: 1rem;
}

/* ---------- Pestañas de filtro (Pagos) ---------- */

.tabs {
  display: flex;
  gap: 0.35rem;
  padding: 0.9rem 1.4rem 0;
}
.tab {
  border: none;
  background: var(--surface-tint);
  color: var(--ink-2);
  font-size: 0.82rem;
  font-weight: 600;
  padding: 0.45rem 0.9rem;
  border-radius: 999px;
}
.tab:hover { background: var(--accent-soft); color: var(--accent-strong); }
.tab.activa { background: var(--accent); color: #fff; }

/* ---------- Tabla ---------- */

table.tabla {
  width: 100%;
  border-collapse: collapse;
}

table.tabla thead th {
  text-align: left;
  font-size: 0.72rem;
  letter-spacing: 0.04em;
  text-transform: uppercase;
  color: var(--ink-3);
  font-weight: 600;
  padding: 0.9rem 1.4rem;
  border-bottom: 1px solid var(--border);
  background: var(--surface-tint);
}
table.tabla thead th.num, table.tabla td.num { text-align: right; }

tr.grupo-piso td {
  padding: 0.9rem 1.4rem 0.5rem;
  font-size: 0.76rem;
  font-weight: 700;
  letter-spacing: 0.03em;
  text-transform: uppercase;
  color: var(--ink-3);
  background: var(--surface);
  border-bottom: none;
}
tr.grupo-piso:first-of-type td { padding-top: 1.2rem; }

tr.fila {
  transition: background 0.1s ease;
}
tr.fila td {
  padding: 0.95rem 1.4rem;
  border-bottom: 1px solid var(--border);
  font-size: 0.88rem;
  color: var(--ink-2);
  vertical-align: middle;
}
tr.fila:hover { background: var(--surface-tint); }
tr.fila:last-child td { border-bottom: none; }

td.num { font-variant-numeric: tabular-nums; font-weight: 600; color: var(--ink); }

.celda-persona { display: flex; align-items: center; gap: 0.7rem; }
.celda-principal { color: var(--ink); font-weight: 600; }
.celda-secundaria { display: block; color: var(--ink-3); font-size: 0.78rem; font-weight: 400; margin-top: 0.1rem; }

.avatar {
  width: 34px;
  height: 34px;
  flex: none;
  border-radius: 999px;
  display: grid;
  place-items: center;
  color: #fff;
  font-size: 0.76rem;
  font-weight: 700;
  letter-spacing: 0.01em;
}

.chip {
  display: inline-block;
  font-size: 0.74rem;
  font-weight: 600;
  color: var(--ink-3);
  background: var(--neutral-soft);
  border-radius: 999px;
  padding: 0.18rem 0.6rem;
}

.pill {
  display: inline-flex;
  align-items: center;
  gap: 0.35rem;
  font-size: 0.76rem;
  font-weight: 600;
  border-radius: 999px;
  padding: 0.28rem 0.7rem;
  white-space: nowrap;
}
.pill::before { content: ""; width: 6px; height: 6px; border-radius: 999px; background: currentColor; }

.pill.verde { background: var(--success-soft); color: var(--success); }
.pill.ambar { background: var(--warning-soft); color: var(--warning); }
.pill.rojo { background: var(--danger-soft); color: var(--danger); }
.pill.gris { background: var(--neutral-soft); color: var(--ink-3); }

.col-accion { text-align: right; }

.btn-fila {
  background: none;
  border: 1px solid var(--border-strong);
  color: var(--ink-2);
  border-radius: var(--radius-sm);
  padding: 0.4rem 0.75rem;
  font-size: 0.8rem;
  font-weight: 600;
  display: inline-flex;
  align-items: center;
  gap: 0.3rem;
}
.btn-fila:hover { border-color: var(--accent); color: var(--accent-strong); background: var(--accent-soft); }
.btn-fila svg { width: 14px; height: 14px; }

/* ---------- Botones de accion ---------- */

.btn-primario, .btn-secundario, .btn-peligro {
  border-radius: var(--radius-sm);
  padding: 0.55rem 1rem;
  font-size: 0.85rem;
  font-weight: 600;
  border: 1px solid transparent;
}
.btn-primario { background: var(--accent); color: #fff; }
.btn-primario:hover { background: var(--accent-strong); }
.btn-secundario { background: none; border-color: var(--border-strong); color: var(--ink-2); }
.btn-secundario:hover { border-color: var(--accent); color: var(--accent-strong); background: var(--accent-soft); }
.btn-peligro { background: none; border-color: var(--danger); color: var(--danger); }
.btn-peligro:hover { background: var(--danger-soft); }

/* ---------- Ficha de unidad (dentro del modal) ---------- */

.ficha-seccion { padding: 1.15rem 0; border-bottom: 1px solid var(--border); }
.ficha-seccion:first-child { padding-top: 0.2rem; }
.ficha-seccion:last-child { border-bottom: none; }

.ficha-seccion-header { display: flex; align-items: center; justify-content: space-between; gap: 0.75rem; margin-bottom: 0.9rem; }
.ficha-seccion-header h3 { margin: 0; font-size: 0.86rem; font-weight: 700; }

.ficha-grid { display: grid; grid-template-columns: repeat(auto-fit, minmax(130px, 1fr)); gap: 0.9rem 1.2rem; }
.ficha-dato label { display: block; font-size: 0.66rem; text-transform: uppercase; letter-spacing: 0.04em; color: var(--ink-3); font-weight: 600; margin-bottom: 0.25rem; }
.ficha-dato span { font-size: 0.92rem; font-weight: 600; color: var(--ink); }
.ficha-dato span.pill { font-size: 0.76rem; }
.ficha-dato small { display: block; margin-top: 0.15rem; font-size: 0.72rem; font-weight: 500; color: var(--ink-3); }
.ficha-dato.ancho-completo { grid-column: 1 / -1; }
.ficha-persona { margin-bottom: 0.9rem; }

.ficha-vacio { color: var(--ink-3); font-size: 0.85rem; padding: 0.2rem 0 0.4rem; }

.ficha-placeholder {
  display: flex;
  align-items: center;
  justify-content: space-between;
  gap: 0.75rem;
  background: var(--surface-tint);
  border: 1px dashed var(--border-strong);
  border-radius: var(--radius-md);
  padding: 0.75rem 0.9rem;
  color: var(--ink-3);
  font-size: 0.82rem;
}

.form-registrar select {
  border: 1px solid var(--border-strong);
  border-radius: var(--radius-sm);
  background: var(--surface);
  font-family: var(--font-body);
  font-size: 0.86rem;
  color: var(--ink);
  padding: 0.45rem 0.6rem;
}
.form-registrar select:focus { outline: none; border-color: var(--accent); box-shadow: 0 0 0 3px var(--accent-soft); }
.form-registrar.ancho { width: 100%; }
.form-registrar.ancho label { flex: 1 1 9rem; }
.form-registrar.ancho input, .form-registrar.ancho select { width: 100%; }

/* ---------- Modal ---------- */

.overlay {
  position: fixed;
  inset: 0;
  background: rgba(13, 17, 32, 0.5);
  display: flex;
  align-items: flex-start;
  justify-content: center;
  padding: 4rem 1rem;
  overflow-y: auto;
  z-index: 50;
}
.overlay.oculto { display: none; }

.modal-panel {
  background: var(--surface);
  width: 100%;
  max-width: 52rem;
  max-height: 88vh;
  border-radius: var(--radius-lg);
  border: 1px solid var(--border);
  box-shadow: var(--shadow-modal);
  display: flex;
  flex-direction: column;
}

.modal-header {
  display: flex;
  justify-content: space-between;
  align-items: flex-start;
  padding: 1.3rem 1.5rem;
  border-bottom: 1px solid var(--border);
  flex: none;
}
.modal-header h2 { margin: 0; font-size: 1.1rem; font-weight: 700; }
.panel-sub { margin: 0.25rem 0 0; font-size: 0.82rem; color: var(--ink-3); }

.btn-cerrar {
  background: var(--surface-tint);
  border: none;
  width: 30px;
  height: 30px;
  border-radius: 999px;
  color: var(--ink-3);
  display: grid;
  place-items: center;
  flex: none;
}
.btn-cerrar svg { width: 15px; height: 15px; }
.btn-cerrar:hover { background: var(--neutral-soft); color: var(--ink); }

#panel-contenido { padding: 0.2rem 1.5rem 1.5rem; overflow-y: auto; flex: 1; }

.linea-pago {
  display: grid;
  grid-template-columns: 4.6rem 6rem 1fr auto;
  align-items: center;
  gap: 0.75rem;
  padding: 0.85rem 0;
  border-bottom: 1px solid var(--border);
}
.linea-pago:last-of-type { border-bottom: none; }

.periodo { font-weight: 700; font-size: 0.88rem; }
.monto { font-variant-numeric: tabular-nums; font-weight: 600; text-align: right; }
.meta-pago { font-size: 0.78rem; color: var(--ink-3); display: flex; align-items: center; flex-wrap: wrap; gap: 0.4rem; }
.meta-pago .separador { color: var(--ink-4); }

.btn-mini {
  border: none;
  border-radius: var(--radius-sm);
  padding: 0.4rem 0.7rem;
  font-size: 0.76rem;
  font-weight: 600;
}
.btn-mini.marcar { background: var(--accent); color: #fff; }
.btn-mini.marcar:hover { background: var(--accent-strong); }
.btn-mini.guardar { background: var(--success); color: #fff; }
.btn-mini.guardar:hover { filter: brightness(0.95); }
.btn-mini.cancelar { background: none; color: var(--ink-3); border: 1px solid var(--border-strong); }

.fila-form { grid-column: 1 / -1; }
.fila-form.oculto { display: none; }

.form-registrar {
  display: flex;
  gap: 1rem;
  align-items: flex-end;
  flex-wrap: wrap;
  padding: 0.9rem 1rem;
  margin: 0.4rem 0 0.9rem;
  background: var(--surface-tint);
  border-radius: var(--radius-md);
  border: 1px solid var(--border);
}
.form-registrar label {
  display: flex;
  flex-direction: column;
  gap: 0.3rem;
  font-size: 0.72rem;
  font-weight: 600;
  color: var(--ink-3);
}
.form-registrar input {
  border: 1px solid var(--border-strong);
  border-radius: var(--radius-sm);
  background: var(--surface);
  font-family: var(--font-body);
  font-size: 0.86rem;
  color: var(--ink);
  padding: 0.45rem 0.6rem;
  width: 8.5rem;
}
.form-registrar input:focus { outline: none; border-color: var(--accent); box-shadow: 0 0 0 3px var(--accent-soft); }
.form-registrar .acciones { display: flex; gap: 0.4rem; }

@media (prefers-reduced-motion: no-preference) {
  .content-area { animation: aparecer 0.18s ease; }
  .pill.recien-marcado { animation: confirmar-pago 0.5s ease; }
}
@keyframes aparecer {
  from { opacity: 0; transform: translateY(4px); }
  to { opacity: 1; transform: translateY(0); }
}
@keyframes confirmar-pago {
  0% { transform: scale(1.35); box-shadow: 0 0 0 5px var(--success-soft); }
  100% { transform: scale(1); box-shadow: 0 0 0 0 transparent; }
}

/* ---------- Responsive ---------- */

@media (max-width: 980px) {
  .app-shell { grid-template-columns: 1fr; }
  .sidebar {
    position: sticky;
    top: 0;
    z-index: 40;
    height: auto;
    flex-direction: row;
    align-items: center;
    padding: 0.75rem 1rem;
    gap: 1rem;
    overflow-x: auto;
  }
  .brand { padding: 0; flex: none; }
  .nav { flex-direction: row; flex: none; }
  .nav-item.activo::before { left: 0; right: 0; top: auto; bottom: -0.75rem; height: 3px; width: auto; border-radius: 3px 3px 0 0; }
  .sidebar-footer { display: none; }
  .main { height: auto; }
  .main-scroll { overflow-y: visible; }
}

@media (max-width: 640px) {
  .topbar { padding: 1.3rem 1.2rem 0.9rem; }
  .main-scroll { padding: 0 1.2rem 2rem; }
  .cards-row { grid-template-columns: repeat(2, 1fr); }

  table.tabla thead { display: none; }
  tr.grupo-piso td { padding: 1rem 1.1rem 0.4rem; }
  tr.fila {
    display: grid;
    grid-template-columns: 1fr;
    gap: 0.3rem;
    padding: 0.9rem 1.1rem;
  }
  tr.fila td { border: none; padding: 0.1rem 0; }
  tr.fila td[data-label]::before {
    content: attr(data-label) ": ";
    color: var(--ink-3);
    font-weight: 500;
  }
  tr.fila td.col-accion { text-align: left; margin-top: 0.4rem; }
  tr.fila:not(:last-child) { border-bottom: 1px solid var(--border); }

  .linea-pago { grid-template-columns: 1fr 1fr; grid-template-areas: "periodo monto" "meta accion"; }
  .linea-pago .periodo { grid-area: periodo; }
  .linea-pago .monto { grid-area: monto; }
  .linea-pago .meta-pago { grid-area: meta; }
  .linea-pago .col-accion { grid-area: accion; text-align: right; }
}

/* ============================================================
   Adjuntos: constancias de pago, documentos y contrato firmado
   ============================================================ */

.input-oculto { display: none; }

.header-acciones { display: flex; align-items: center; gap: 0.4rem; }

.ficha-nota {
  margin: -0.4rem 0 0.9rem;
  font-size: 0.76rem;
  color: var(--ink-3);
}

/* Boton cuadrado solo-icono (ojito, clip, lapiz, papelera) */
.btn-icono {
  display: inline-flex;
  align-items: center;
  justify-content: center;
  width: 1.9rem;
  height: 1.9rem;
  padding: 0;
  flex: 0 0 auto;
  border: 1px solid var(--border-strong);
  border-radius: var(--radius-sm);
  background: var(--surface);
  color: var(--ink-2);
  cursor: pointer;
  transition: background 0.15s ease, color 0.15s ease, border-color 0.15s ease;
}
.btn-icono svg { width: 1rem; height: 1rem; }
.btn-icono:hover { border-color: var(--accent); color: var(--accent-strong); background: var(--accent-soft); }
.btn-icono:focus-visible { outline: 2px solid var(--accent); outline-offset: 1px; }
.btn-icono.peligro:hover { border-color: var(--danger); color: var(--danger); background: var(--danger-soft); }
/* Primer clic en eliminar: queda "armado" esperando la confirmacion */
.btn-icono.armado { border-color: var(--danger); color: #fff; background: var(--danger); }

.btn-adjuntar { display: inline-flex; align-items: center; gap: 0.35rem; }
.btn-adjuntar svg { width: 0.9rem; height: 0.9rem; }

/* Fila de pago: los iconos van juntos a la derecha */
.acciones-pago { display: flex; align-items: center; justify-content: flex-end; gap: 0.35rem; flex-wrap: wrap; }
.linea-pago { grid-template-columns: 4.6rem 6rem minmax(0, 1fr) auto; }

.badge-adjunto {
  font-size: 0.68rem;
  font-weight: 600;
  color: var(--accent-strong);
  background: var(--accent-soft);
  border-radius: 999px;
  padding: 0.1rem 0.45rem;
}

/* Campo "Otro..." del medio de pago y campos que ocupan toda la fila */
.form-registrar label.ancho-total { flex: 1 1 100%; }
.form-registrar label.ancho-total input { width: 100%; }

/* Contacto de emergencia */
.bloque-emergencia {
  margin-top: 0.9rem;
  padding: 0.7rem 0.9rem;
  background: var(--surface-tint);
  border: 1px solid var(--border);
  border-radius: var(--radius-md);
}
.bloque-emergencia label {
  display: block;
  font-size: 0.66rem;
  text-transform: uppercase;
  letter-spacing: 0.04em;
  color: var(--ink-3);
  font-weight: 600;
  margin-bottom: 0.2rem;
}
.bloque-emergencia span { font-size: 0.88rem; font-weight: 600; color: var(--ink); }
.bloque-emergencia .sin-dato { font-weight: 500; color: var(--ink-3); }

.dato-con-pill { display: inline-flex; align-items: center; gap: 0.4rem; flex-wrap: wrap; }

/* Documentos agrupados por tipo */
.bloque-doc { padding: 0.7rem 0; border-bottom: 1px dashed var(--border); }
.bloque-doc:last-child { border-bottom: none; padding-bottom: 0; }
.bloque-doc-head {
  display: flex;
  align-items: center;
  justify-content: space-between;
  gap: 0.75rem;
  flex-wrap: wrap;
}
.bloque-doc-titulo { font-size: 0.83rem; font-weight: 600; color: var(--ink); }

.lista-adjuntos { list-style: none; margin: 0.5rem 0 0; padding: 0; display: flex; flex-direction: column; gap: 0.35rem; }
.lista-adjuntos li {
  display: flex;
  align-items: center;
  justify-content: space-between;
  gap: 0.6rem;
  padding: 0.4rem 0.6rem;
  background: var(--surface-tint);
  border: 1px solid var(--border);
  border-radius: var(--radius-sm);
}
.nombre-adjunto {
  font-size: 0.8rem;
  color: var(--ink-2);
  overflow: hidden;
  text-overflow: ellipsis;
  white-space: nowrap;
  min-width: 0;
}
.acciones-adjunto { display: flex; gap: 0.3rem; flex: 0 0 auto; }
.sin-adjuntos { margin: 0.4rem 0 0; font-size: 0.78rem; color: var(--ink-4); }

@media (max-width: 640px) {
  .linea-pago { grid-template-columns: 1fr auto; }
  .linea-pago .meta-pago { grid-column: 1 / -1; }
  .acciones-pago { justify-content: flex-start; grid-column: 1 / -1; }
}

/* La fila del formulario hereda el grid de .linea-pago y encajonaba el formulario
   en la primera columna (4.6rem). Como fila desplegable debe ocupar todo el ancho. */
.linea-pago.fila-form {
  display: block;
  padding: 0;
  border-bottom: none;
}
.linea-pago.fila-form .form-registrar { margin: 0.2rem 0 0.9rem; }
.detalle-pago { min-width: 0; }

/* ============================================================
   Cargos con abonos, garantia, renovacion, contactos y visor
   ============================================================ */

/* Cargo = un mes de renta, la garantia u otro concepto; debajo van sus abonos */
.cargo { padding: 0.7rem 0; border-bottom: 1px solid var(--border); }
.cargo:last-child { border-bottom: none; }
.cargo-fila {
  display: grid;
  grid-template-columns: 4.6rem 6rem minmax(0, 1fr) auto;
  align-items: center;
  gap: 0.75rem;
}
.cargo-fila .periodo small.concepto {
  display: block;
  font-size: 0.64rem;
  font-weight: 700;
  color: var(--ink-3);
  text-transform: uppercase;
  letter-spacing: 0.03em;
}
.resumen-cargo { font-size: 0.78rem; color: var(--ink-3); }
.resumen-cargo .falta { color: var(--danger-text); font-weight: 700; }
.resumen-cargo .a-favor { color: var(--success-text); font-weight: 600; }
.nota-cargo { margin: 0.35rem 0 0 5.35rem; font-size: 0.74rem; color: var(--ink-3); font-style: italic; }
.form-titulo { flex: 1 1 100%; margin: 0; font-size: 0.8rem; font-weight: 700; color: var(--ink-2); }
.form-ayuda { flex: 1 1 100%; margin: 0; font-size: 0.74rem; color: var(--ink-3); }
.btn-mini.secundario-mini { background: none; color: var(--ink-2); border: 1px solid var(--border-strong); }
.btn-mini.secundario-mini:hover { border-color: var(--accent); color: var(--accent-strong); background: var(--accent-soft); }
.cargo .form-registrar { margin: 0.6rem 0 0.2rem; }
.ficha-seccion-header h3 .pill { margin-left: 0.45rem; vertical-align: middle; }

.form-registrar textarea {
  width: 100%;
  border: 1px solid var(--border-strong);
  border-radius: var(--radius-sm);
  background: var(--surface);
  font-family: var(--font-body);
  font-size: 0.86rem;
  color: var(--ink);
  padding: 0.45rem 0.6rem;
  resize: vertical;
}
.form-registrar textarea:focus { outline: none; border-color: var(--accent); box-shadow: 0 0 0 3px var(--accent-soft); }

.lista-abonos { margin: 0.45rem 0 0 5.35rem; display: flex; flex-direction: column; gap: 0.3rem; }
.abono {
  display: grid;
  grid-template-columns: 10rem 5.6rem minmax(0, 1fr) auto;
  align-items: center;
  gap: 0.6rem;
  padding: 0.3rem 0.5rem;
  background: var(--surface-tint);
  border: 1px solid var(--border);
  border-radius: var(--radius-sm);
  font-size: 0.76rem;
}
.abono-fecha { color: var(--ink-2); }
.abono-monto { font-weight: 700; font-variant-numeric: tabular-nums; text-align: right; }
.abono-detalle { color: var(--ink-3); overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
.abono-acciones { display: flex; gap: 0.25rem; }
.abono .btn-icono { width: 1.65rem; height: 1.65rem; }
.abono .btn-icono svg { width: 0.85rem; height: 0.85rem; }
.lista-abonos .form-registrar { margin: 0.1rem 0 0.4rem; }

/* ¿Renueva contrato? */
/* Decidir si renueva es una accion, no un dato: el bloque se destaca del resto de la ficha. */
.bloque-renovacion {
  display: flex;
  align-items: center;
  flex-wrap: wrap;
  gap: 0.5rem 0.9rem;
  margin-top: 1rem;
  padding: 0.85rem 1rem;
  border: 1px solid var(--border-strong);
  border-left: 4px solid var(--accent);
  border-radius: var(--radius-md);
  background: var(--surface-tint);
  box-shadow: var(--shadow-sm);
}
.bloque-renovacion.atencion { border-color: var(--warning); border-left-color: var(--warning); background: var(--warning-soft); }
.bloque-renovacion-titulo {
  font-size: 0.86rem;
  font-weight: 700;
  color: var(--ink);
  text-transform: none;
  letter-spacing: 0;
}
.segmento { padding: 0.4rem 0.9rem; font-size: 0.8rem; }
.segmentado {
  display: inline-flex;
  border: 1px solid var(--border-strong);
  border-radius: 999px;
  padding: 2px;
  background: var(--surface);
}
.segmento {
  border: none;
  background: none;
  border-radius: 999px;
  padding: 0.3rem 0.75rem;
  font-size: 0.76rem;
  font-weight: 600;
  color: var(--ink-3);
  cursor: pointer;
}
.segmento:hover { color: var(--ink); }
.segmento:focus-visible { outline: 2px solid var(--accent); outline-offset: 1px; }
.segmento.activo { background: var(--neutral-soft); color: var(--ink); }
.segmento.si.activo { background: var(--success); color: #fff; }
.segmento.no.activo { background: var(--danger); color: #fff; }
.renovacion-aviso { display: inline-flex; align-items: center; gap: 0.35rem; font-size: 0.76rem; font-weight: 700; color: var(--warning-text); }
.renovacion-aviso svg { width: 0.95rem; height: 0.95rem; }

/* Aviso de contrato en la tarjeta del edificio */
.badge-contrato {
  display: inline-block;
  margin-top: 0.55rem;
  padding: 0.15rem 0.5rem;
  border-radius: 999px;
  font-size: 0.68rem;
  font-weight: 700;
}
.badge-contrato.ambar { background: var(--warning-soft); color: var(--warning-text); }
.badge-contrato.rojo { background: var(--danger-soft); color: var(--danger-text); }
.badge-contrato.verde { background: var(--success-soft); color: var(--success-text); }

/* Contactos de emergencia (uno o varios) */
.bloque-emergencia-head { display: flex; align-items: center; justify-content: space-between; gap: 0.6rem; margin-bottom: 0.45rem; }
.bloque-emergencia-head label { margin-bottom: 0; }
.bloque-emergencia .form-registrar label {
  display: flex;
  text-transform: none;
  letter-spacing: normal;
  font-size: 0.72rem;
  margin-bottom: 0;
}
.btn-chico { padding: 0.3rem 0.6rem; font-size: 0.74rem; }

/*
 * Botones que llevan a otra ficha ("Contrato y documentos", "Registrar pagos"). Sin una medida
 * para su flecha, el SVG crecia hasta su tamano natural y el boton quedaba enorme.
 */
.btn-ir { display: inline-flex; align-items: center; gap: 0.35rem; white-space: nowrap; }
.btn-ir svg { width: 13px; height: 13px; flex: none; }

/* Los desplegables muestran el texto completo: si no entra, el campo crece antes de recortarlo. */
.form-registrar select { width: 100%; min-width: 11rem; text-overflow: ellipsis; }
.form-registrar label.ancho-medio { min-width: 0; }
.form-registrar label.campo-ancho { flex: 3 1 20rem; }
.lista-contactos { list-style: none; margin: 0; padding: 0; display: flex; flex-direction: column; gap: 0.3rem; }
.lista-contactos .contacto {
  display: flex;
  align-items: center;
  justify-content: space-between;
  gap: 0.6rem;
  padding: 0.35rem 0.5rem;
  background: var(--surface);
  border: 1px solid var(--border);
  border-radius: var(--radius-sm);
}
.bloque-emergencia .contacto-texto { font-size: 0.84rem; font-weight: 500; color: var(--ink); min-width: 0; }
.bloque-emergencia .contacto-texto strong { font-weight: 700; }
.contacto-texto a { color: var(--accent-strong); text-decoration: none; }
.bloque-emergencia .contacto-relacion { color: var(--ink-3); font-weight: 500; }
.lista-contactos .form-registrar { margin: 0.1rem 0 0.3rem; }

/* ---------- Visor de archivos ---------- */
.visor {
  position: fixed;
  inset: 0;
  z-index: 70;
  display: flex;
  flex-direction: column;
  background: rgba(10, 13, 22, 0.92);
  color: #fff;
}
.visor.oculto { display: none; }
.visor-barra {
  display: flex;
  align-items: center;
  justify-content: space-between;
  gap: 0.75rem;
  flex-wrap: wrap;
  padding: 0.6rem 1rem;
  background: rgba(10, 13, 22, 0.85);
  border-bottom: 1px solid rgba(255, 255, 255, 0.08);
}
.visor-nombre {
  flex: 1 1 12rem;
  min-width: 0;
  font-size: 0.86rem;
  font-weight: 600;
  overflow: hidden;
  text-overflow: ellipsis;
  white-space: nowrap;
}
.visor-controles { display: flex; align-items: center; gap: 0.35rem; flex-wrap: wrap; }
.visor-grupo-zoom { display: inline-flex; align-items: center; gap: 0.25rem; margin-right: 0.35rem; }
.visor:not(.modo-imagen) .visor-grupo-zoom { display: none; }
.visor-btn {
  display: inline-flex;
  align-items: center;
  justify-content: center;
  min-width: 2.1rem;
  height: 2.1rem;
  padding: 0 0.5rem;
  border: 1px solid rgba(255, 255, 255, 0.16);
  border-radius: var(--radius-sm);
  background: rgba(255, 255, 255, 0.06);
  color: #fff;
  font: 600 0.78rem var(--font-body);
  text-decoration: none;
  cursor: pointer;
}
.visor-btn svg { width: 1.05rem; height: 1.05rem; }
.visor-btn:hover { background: rgba(255, 255, 255, 0.16); }
.visor-btn:focus-visible { outline: 2px solid #8fb0ff; outline-offset: 1px; }
.visor-porcentaje { min-width: 3.6rem; font-variant-numeric: tabular-nums; }
.visor-cerrar { margin-left: 0.35rem; }
.visor-escenario { position: relative; flex: 1; overflow: hidden; touch-action: none; }
.visor-imagen {
  position: absolute;
  left: 50%;
  top: 50%;
  max-width: none;
  user-select: none;
  transform-origin: center center;
  cursor: grab;
  background: #fff;
  box-shadow: 0 10px 40px rgba(0, 0, 0, 0.5);
}
.visor-imagen.arrastrando { cursor: grabbing; }
.visor-pdf { width: 100%; height: 100%; border: 0; background: #fff; }
.visor-sin-vista {
  position: absolute;
  inset: 0;
  display: flex;
  flex-direction: column;
  align-items: center;
  justify-content: center;
  gap: 0.9rem;
  padding: 1rem;
  text-align: center;
  color: rgba(255, 255, 255, 0.85);
}
.visor-sin-vista svg { width: 3rem; height: 3rem; opacity: 0.7; }
.visor-sin-vista p { margin: 0; max-width: 28rem; }

@media (max-width: 640px) {
  .cargo-fila { grid-template-columns: 1fr auto; }
  .cargo-fila .meta-pago,
  .cargo-fila .acciones-pago { grid-column: 1 / -1; justify-content: flex-start; }
  .lista-abonos,
  .nota-cargo { margin-left: 0; }
  .abono { grid-template-columns: 1fr auto; }
  .abono-detalle { grid-column: 1 / -1; white-space: normal; }
  .visor-barra { padding: 0.5rem; }
}

/* ============================================================
   Dashboard (filas por piso con desglose) y Contratos
   ============================================================ */

.texto-rojo { color: var(--danger-text); }
.texto-ambar { color: var(--warning-text); }
.texto-verde { color: var(--success-text); }
.sin-dato { color: var(--ink-3); font-weight: 500; }

.tab-contador {
  display: inline-block;
  min-width: 1.3rem;
  margin-left: 0.2rem;
  padding: 0 0.35rem;
  border-radius: 999px;
  background: rgba(16, 24, 40, 0.08);
  font-size: 0.7rem;
  text-align: center;
}
.tab.activa .tab-contador { background: rgba(255, 255, 255, 0.25); }

.btn-mini.contorno { background: var(--surface); color: var(--ink-2); border: 1px solid var(--border-strong); }
.btn-mini.contorno:hover { border-color: var(--accent); color: var(--accent-strong); background: var(--accent-soft); }
.btn-mini.renovar-urgente { background: var(--warning); color: #fff; }
.btn-mini.renovar-urgente:hover { filter: brightness(0.95); }

.chip-alerta { background: var(--warning-soft); color: var(--warning-text); }

.dash-barra {
  display: flex;
  align-items: center;
  justify-content: space-between;
  gap: 0.75rem;
  flex-wrap: wrap;
}
.dash-barra .tabs { padding: 0; flex-wrap: wrap; }
.dash-mes { font-size: 0.82rem; color: var(--ink-3); }

/* El titulo del piso es un boton: pliega y despliega sus unidades. */
.dash-grupo-titulo {
  width: 100%;
  display: flex;
  align-items: baseline;
  justify-content: space-between;
  gap: 0.75rem;
  flex-wrap: wrap;
  padding: 0.9rem 1.2rem;
  border: none;
  border-bottom: 1px solid var(--border);
  background: var(--surface-tint);
  text-align: left;
  font: inherit;
  cursor: pointer;
}
.dash-grupo-titulo:hover { background: var(--accent-soft); }
.dash-grupo-titulo:focus-visible { outline: 2px solid var(--accent); outline-offset: -2px; }
.dash-grupo-encabezado { display: flex; align-items: center; gap: 0.5rem; }
.dash-grupo-encabezado .dash-chevron { transform: rotate(90deg); transition: transform 0.15s ease; color: var(--ink-3); }
.dash-grupo.plegado .dash-grupo-encabezado .dash-chevron { transform: rotate(0deg); }
.dash-grupo-resumen { font-size: 0.8rem; color: var(--ink-3); }

/* Cifras del piso: se leen igual con el piso abierto o cerrado. */
.dash-grupo-cifras {
  display: grid;
  grid-template-columns: repeat(auto-fit, minmax(10rem, 1fr));
  gap: 0.6rem 1.2rem;
  padding: 0.75rem 1.2rem;
  border-bottom: 1px solid var(--border);
}
.dash-cifra { display: flex; flex-direction: column; gap: 0.1rem; min-width: 0; }
.dash-cifra small { font-size: 0.68rem; text-transform: uppercase; letter-spacing: 0.04em; color: var(--ink-3); }
.dash-cifra strong { font-size: 0.95rem; font-weight: 700; color: var(--ink); font-variant-numeric: tabular-nums; }
.dash-grupo.plegado .dash-grupo-cifras { border-bottom: none; }
.dash-grupo-cuerpo.oculto { display: none; }

/* Unidad vacante: misma rejilla que una ocupada, para que la lista no se descuadre. */
.avatar-vacante { background: var(--neutral-soft); color: var(--ink-3); }
.avatar-vacante svg { width: 16px; height: 16px; }
.dash-fila.vacante .dash-resumen { cursor: default; }
.dash-fila.vacante .dash-chevron { visibility: hidden; }
.dash-grupo-titulo h2 {
  margin: 0;
  font-size: 0.8rem;
  font-weight: 700;
  letter-spacing: 0.04em;
  text-transform: uppercase;
  color: var(--ink-2);
}

.dash-fila { border-bottom: 1px solid var(--border); border-left: 3px solid transparent; }
.dash-fila:last-child { border-bottom: none; }
.dash-fila.estado-atrasado { border-left-color: var(--danger); }
.dash-fila.estado-pendiente { border-left-color: var(--warning); }
.dash-fila.estado-al_dia { border-left-color: var(--success); }
.dash-fila.abierta { background: var(--surface-tint); }

.dash-fila-principal { display: flex; align-items: center; gap: 0.75rem; padding-right: 1.1rem; }
/* La fila entera despliega los meses; el nombre (boton aparte) abre los pagos. */
.dash-resumen {
  flex: 1;
  min-width: 0;
  display: grid;
  grid-template-columns: 6rem minmax(12rem, 1.3fr) minmax(12rem, 1.4fr) minmax(11rem, 0.9fr);
  align-items: center;
  gap: 0.75rem;
  padding: 0.8rem 0 0.8rem 0.9rem;
  cursor: pointer;
}
.dash-resumen.sin-desglose { cursor: default; }
.dash-toggle {
  display: inline-flex;
  align-items: center;
  gap: 0.35rem;
  padding: 0.2rem 0;
  border: none;
  background: none;
  text-align: left;
  font: inherit;
  color: inherit;
}
.dash-toggle .dash-chevron { width: 1.2rem; }
.dash-resumen:not(.sin-desglose):hover .dash-codigo { color: var(--accent-strong); }
.dash-nombre {
  border: none;
  background: none;
  padding: 0;
  font: inherit;
  text-align: left;
  color: var(--ink);
  cursor: pointer;
  max-width: 100%;
}
.dash-nombre:hover { color: var(--accent-strong); text-decoration: underline; text-underline-offset: 3px; }
.dash-chevron { display: grid; place-items: center; color: var(--ink-3); transition: transform 0.15s ease; }
.dash-chevron svg { width: 14px; height: 14px; }
.dash-fila.abierta .dash-chevron { transform: rotate(90deg); }
.dash-codigo { font-family: var(--font-display); font-weight: 800; font-size: 0.95rem; }
.dash-persona { display: flex; align-items: center; gap: 0.6rem; min-width: 0; }
.dash-persona-texto { min-width: 0; }
.dash-persona .celda-principal { display: block; font-size: 0.85rem; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
.dash-persona .celda-secundaria { font-size: 0.74rem; }
.dash-cobro { display: flex; align-items: center; flex-wrap: wrap; gap: 0.35rem 0.5rem; font-size: 0.84rem; color: var(--ink-2); }
.dash-cobro-texto strong { font-weight: 700; }
.dash-contrato { display: flex; flex-wrap: wrap; gap: 0.3rem; min-width: 0; }
.dash-contrato .pill, .dash-cobro .pill { font-size: 0.72rem; padding: 0.22rem 0.6rem; }
/*
 * Un aviso largo ("Contrato vencido hace 227 d. · no renueva") no entra en una linea: sin esto
 * la pastilla se sale de su columna y queda tapada por los botones de la derecha. Preferimos
 * que el texto baje de renglon antes que perderlo.
 */
.dash-contrato .pill { white-space: normal; text-align: left; max-width: 100%; }
.dash-contrato .pill::before { flex: none; }
.dash-acciones { display: flex; gap: 0.35rem; flex: none; }

.dash-desglose { padding: 0.2rem 1.2rem 1rem 3rem; }
.dash-datos {
  display: grid;
  grid-template-columns: repeat(auto-fit, minmax(140px, 1fr));
  gap: 0.8rem 1.2rem;
  padding: 0.6rem 0 0.9rem;
}
.dash-datos .ficha-dato small { display: block; margin-top: 0.15rem; font-size: 0.72rem; color: var(--ink-3); }

.dash-sin-registrar {
  display: flex;
  align-items: center;
  flex-wrap: wrap;
  gap: 0.4rem;
  margin-bottom: 0.8rem;
  padding: 0.5rem 0.75rem;
  border-radius: var(--radius-sm);
  background: var(--warning-soft);
  color: var(--warning-text);
  font-size: 0.8rem;
  font-weight: 600;
}
.dash-sin-registrar svg { width: 1rem; height: 1rem; }
.chip-accion {
  border: 1px dashed #d97706;
  background: var(--surface);
  color: var(--warning-text);
  border-radius: 999px;
  padding: 0.15rem 0.6rem;
  font-size: 0.74rem;
  font-weight: 700;
}
.chip-accion:hover { background: var(--surface); border-style: solid; }
.chip-accion:disabled { opacity: 0.5; cursor: progress; }

.dash-tabla-scroll { overflow-x: auto; }
.tabla-compacta { background: var(--surface); border: 1px solid var(--border); border-radius: var(--radius-sm); }
table.tabla.tabla-compacta thead th { padding: 0.55rem 0.8rem; }
table.tabla.tabla-compacta tr.fila td { padding: 0.5rem 0.8rem; font-size: 0.82rem; }
.tabla-compacta .concepto { color: var(--ink-3); font-size: 0.72rem; }
.dias-atraso { font-size: 0.72rem; font-weight: 700; color: var(--danger-text); }
.dash-detalle { color: var(--ink-3); }
.dash-desglose-pie { display: flex; justify-content: flex-end; gap: 0.4rem; flex-wrap: wrap; margin-top: 0.7rem; }
.tabla-compacta td.num small.celda-secundaria { font-weight: 400; }

/* Dias de atraso de un pago y fecha en que el inquilino dijo que pagaria */
.chip-demora {
  display: inline-block;
  margin-left: 0.35rem;
  padding: 0.05rem 0.45rem;
  border-radius: 999px;
  font-size: 0.68rem;
  font-weight: 700;
  white-space: nowrap;
  vertical-align: 1px;
}
.chip-demora.tarde { background: var(--danger-soft); color: var(--danger-text); }
.chip-demora.a-tiempo { background: var(--success-soft); color: var(--success-text); }
.resumen-cargo .compromiso { color: var(--warning-text); font-weight: 600; }
.resumen-cargo .compromiso.vencido { color: var(--danger-text); }
.detalle-cargo { margin: 0.3rem 0 0 5.35rem; font-size: 0.74rem; color: var(--ink-3); }
.dash-desglose-pie svg { width: 13px; height: 13px; vertical-align: -2px; }

/* Contratos */
.aviso-revisar {
  display: flex;
  align-items: flex-start;
  gap: 0.5rem;
  margin: 0.9rem 1.4rem 0;
  padding: 0.6rem 0.8rem;
  border-radius: var(--radius-sm);
  background: var(--warning-soft);
  color: var(--warning-text);
  font-size: 0.82rem;
  font-weight: 600;
}
.aviso-revisar svg { width: 1rem; height: 1rem; flex: none; margin-top: 0.1rem; }
.contratos-config .form-config { margin: 0.9rem 1.4rem 1.1rem; width: auto; }
.form-registrar label.ancho-medio { flex: 2 1 16rem; }
.form-registrar label.check { flex-direction: row; align-items: center; gap: 0.45rem; font-size: 0.8rem; color: var(--ink-2); }
.form-registrar label.check input { width: auto; }

.tabla-contratos td .celda-secundaria { display: block; }
.celda-con-accion { display: inline-flex; align-items: center; gap: 0.4rem; font-size: 0.82rem; }
.acciones-contrato { display: inline-flex; gap: 0.35rem; align-items: center; justify-content: flex-end; flex-wrap: wrap; }
tr.fila-historial td { padding: 0.2rem 1.4rem 1rem; background: var(--surface-tint); border-bottom: 1px solid var(--border); }
.lista-renovaciones { list-style: none; margin: 0.6rem 0 0; padding: 0; display: flex; flex-direction: column; gap: 0.4rem; }
.lista-renovaciones li {
  display: flex;
  align-items: center;
  justify-content: space-between;
  gap: 0.75rem;
  flex-wrap: wrap;
  padding: 0.5rem 0.7rem;
  background: var(--surface);
  border: 1px solid var(--border);
  border-radius: var(--radius-sm);
  font-size: 0.82rem;
}
.lista-renovaciones .celda-secundaria { display: block; }

/* Modal de renovacion: formulario + vista previa del documento */
.modal-panel.modal-ancho { max-width: 78rem; }
.renovar-layout { display: grid; grid-template-columns: minmax(0, 1fr) minmax(0, 1.05fr); gap: 1.2rem; padding-top: 0.8rem; }
.renovar-form { display: flex; flex-direction: column; gap: 0.7rem; min-width: 0; }
.renovar-grupo { margin: 0; padding: 0; border: none; }
.renovar-grupo legend, .renovar-grupo summary { font-size: 0.8rem; font-weight: 700; color: var(--ink); margin-bottom: 0.1rem; }
.renovar-grupo summary { cursor: pointer; display: flex; align-items: center; gap: 0.5rem; }
.renovar-grupo .form-registrar { margin: 0.3rem 0 0; }
.renovar-notas { display: flex; flex-direction: column; gap: 0.3rem; font-size: 0.72rem; font-weight: 600; color: var(--ink-3); }
.renovar-notas textarea {
  border: 1px solid var(--border-strong);
  border-radius: var(--radius-sm);
  background: var(--surface);
  color: var(--ink);
  font: 0.86rem var(--font-body);
  padding: 0.45rem 0.6rem;
  resize: vertical;
}
.renovar-botones { display: flex; gap: 0.5rem; justify-content: flex-end; flex-wrap: wrap; }
.renovar-botones.centrado { justify-content: center; }
.renovar-vista { display: flex; flex-direction: column; min-height: 30rem; border: 1px solid var(--border); border-radius: var(--radius-md); overflow: hidden; }
.renovar-vista-barra { padding: 0.45rem 0.8rem; font-size: 0.74rem; font-weight: 700; color: var(--ink-3); background: var(--surface-tint); border-bottom: 1px solid var(--border); }
.renovar-iframe { flex: 1; width: 100%; min-height: 30rem; border: 0; background: #eef0f5; }
.marco-impresion { position: fixed; right: 0; bottom: 0; width: 0; height: 0; border: 0; }

.renovar-exito { text-align: center; padding: 1.5rem 1rem; max-width: 36rem; margin: 0 auto; }
.renovar-exito h3 { margin: 0.6rem 0 0.4rem; font-size: 1.15rem; }
.renovar-exito p { color: var(--ink-2); font-size: 0.9rem; line-height: 1.5; }
.renovar-exito-icono {
  display: inline-grid;
  place-items: center;
  width: 3rem;
  height: 3rem;
  border-radius: 999px;
  background: var(--success-soft);
  color: var(--success);
  font-size: 1.5rem;
  font-weight: 800;
}

/* ---------- Contratos y documentos ---------- */

.enlace-nombre {
  border: none;
  background: none;
  padding: 0;
  font: inherit;
  font-weight: 600;
  color: var(--ink);
  text-align: left;
  cursor: pointer;
}
.enlace-nombre:hover { color: var(--accent-strong); text-decoration: underline; text-underline-offset: 3px; }

.lista-vacantes { display: flex; flex-wrap: wrap; gap: 0.6rem; padding: 0.9rem 1.4rem 1.1rem; }
.lista-vacantes .vacante {
  display: inline-flex;
  align-items: center;
  gap: 0.6rem;
  padding: 0.45rem 0.6rem 0.45rem 0.8rem;
  border: 1px dashed var(--border-strong);
  border-radius: var(--radius-md);
  font-size: 0.82rem;
  color: var(--ink-2);
}

/* Panel desplegable: arrendadores e inmuebles */
.desplegable-cabecera {
  width: 100%;
  display: flex;
  align-items: center;
  justify-content: space-between;
  gap: 1rem;
  padding: 1.1rem 1.4rem;
  border: none;
  background: none;
  text-align: left;
  font: inherit;
  color: inherit;
}
.desplegable-cabecera:hover { background: var(--surface-tint); }
.desplegable-cabecera[aria-expanded="true"] .dash-chevron { transform: rotate(90deg); }
.desplegable-titulo { display: flex; flex-direction: column; gap: 0.15rem; min-width: 0; }
.desplegable-titulo strong { font-family: var(--font-display); font-size: 1rem; font-weight: 700; }
.desplegable-titulo small { color: var(--ink-3); font-size: 0.82rem; }
.desplegable-cuerpo { border-top: 1px solid var(--border); padding: 0.2rem 1.4rem 1.2rem; }

.arr-bloque-head {
  display: flex;
  align-items: flex-start;
  justify-content: space-between;
  gap: 0.75rem;
  flex-wrap: wrap;
  margin: 1rem 0 0.6rem;
}
.arr-bloque-head h3 { margin: 0; font-size: 0.9rem; font-weight: 700; }
.arr-bloque-head p { margin: 0.15rem 0 0; font-size: 0.78rem; color: var(--ink-3); }

.arr-item { border: 1px solid var(--border); border-radius: var(--radius-md); background: var(--surface); margin-bottom: 0.5rem; }
.arr-item.editando { border: none; background: none; }
.arr-item.editando .form-registrar { margin: 0; }
.arr-item > summary {
  display: flex;
  align-items: center;
  justify-content: space-between;
  gap: 0.75rem;
  padding: 0.65rem 0.9rem;
  cursor: pointer;
  list-style: none;
  border-radius: var(--radius-md);
}
.arr-item > summary::-webkit-details-marker { display: none; }
.arr-item > summary:hover { background: var(--surface-tint); }
.arr-item[open] > summary { border-bottom: 1px solid var(--border); border-radius: var(--radius-md) var(--radius-md) 0 0; }
.arr-item .card-icon { flex: none; }
.arr-detalle { display: grid; gap: 0.8rem; padding: 0.8rem 0.9rem 0.9rem; }
.arr-acciones { display: flex; justify-content: flex-end; gap: 0.4rem; }

/* Editores de filas: cuentas de un propietario y adicionales de un contrato */
.editor-titulo { display: block; margin-bottom: 0.45rem; font-size: 0.72rem; font-weight: 700; color: var(--ink-2); }
.editor-titulo small { margin-left: 0.3rem; font-weight: 500; color: var(--ink-3); }
.lista-cuentas, .lista-adicionales { display: flex; flex-direction: column; gap: 0.4rem; margin-bottom: 0.5rem; }
.lista-adicionales:empty { display: none; }
.fila-cuenta {
  display: grid;
  grid-template-columns: minmax(7rem, 1fr) minmax(8rem, 1fr) minmax(10rem, 1.2fr) minmax(10rem, 1.3fr) auto auto;
  gap: 0.4rem;
  align-items: center;
}
.fila-adicional { display: grid; grid-template-columns: minmax(10rem, 1fr) 8rem auto; gap: 0.4rem; align-items: center; max-width: 34rem; }
.form-registrar .fila-cuenta input[type="text"],
.form-registrar .fila-adicional input { width: 100%; }
.form-registrar .fila-cuenta label.check { font-size: 0.74rem; white-space: nowrap; }
.editor-pie { display: flex; align-items: center; gap: 0.8rem; flex-wrap: wrap; }
.total-mensual { font-size: 0.82rem; color: var(--ink-2); }

.unidades-inmueble {
  display: flex;
  flex-wrap: wrap;
  gap: 0.35rem 0.9rem;
  margin: 0;
  padding: 0.5rem 0.75rem 0.65rem;
  border: 1px solid var(--border);
  border-radius: var(--radius-sm);
}
.unidades-inmueble legend { padding: 0 0.3rem; font-size: 0.72rem; font-weight: 700; color: var(--ink-2); }
.form-registrar .unidades-inmueble label.check { font-size: 0.8rem; }

@media (max-width: 1100px) {
  .dash-fila-principal { flex-wrap: wrap; padding: 0 1rem 0.8rem 0; }
  .dash-resumen { grid-template-columns: 6rem minmax(0, 1fr); flex-basis: 100%; }
  .dash-resumen .dash-cobro, .dash-resumen .dash-contrato { grid-column: 2; }
  .dash-acciones { margin-left: 2.9rem; }
  .renovar-layout { grid-template-columns: 1fr; }
}

@media (max-width: 760px) {
  .fila-cuenta { grid-template-columns: 1fr 1fr; }
  .fila-adicional { grid-template-columns: minmax(0, 1fr) 6rem auto; }
}

@media (max-width: 640px) {
  .dash-resumen { grid-template-columns: minmax(0, 1fr); }
  .dash-resumen > * { grid-column: 1 / -1; }
  .dash-resumen .dash-cobro, .dash-resumen .dash-contrato { grid-column: 1 / -1; }
  .dash-acciones { margin-left: 0.9rem; flex-wrap: wrap; }
  .dash-desglose { padding: 0.2rem 0.9rem 1rem; }
  .abono { grid-template-columns: 1fr auto; }
  .detalle-cargo { margin-left: 0; }
}

/* ============================================================
   Arrendadores del contrato, aumentos de renta y salida
   ============================================================ */

/* Editor de los duenos que figuran como EL ARRENDADOR (uno, dos o mas) */
.lista-arrendadores { display: flex; flex-direction: column; gap: 0.5rem; margin-bottom: 0.5rem; }
.fila-arrendador {
  display: grid;
  grid-template-columns: minmax(9rem, 1fr) minmax(14rem, 1.7fr) auto auto;
  gap: 0.5rem;
  align-items: end;
  padding: 0.5rem 0.6rem;
  background: var(--surface);
  border: 1px solid var(--border);
  border-radius: var(--radius-sm);
}
.form-registrar .fila-arrendador label.campo-arrendador { min-width: 0; }
.form-registrar .fila-arrendador label.check { align-self: center; white-space: nowrap; font-size: 0.74rem; }
.fila-arrendador .btn-icono { align-self: center; }

/* Lista de solo lectura en la ficha del contrato */
.lista-arrendadores-ficha { list-style: none; margin: 0; padding: 0; display: flex; flex-direction: column; gap: 0.4rem; }
.lista-arrendadores-ficha li {
  display: flex;
  align-items: center;
  justify-content: space-between;
  gap: 0.6rem;
  padding: 0.45rem 0.6rem;
  background: var(--surface-tint);
  border: 1px solid var(--border);
  border-radius: var(--radius-sm);
}

/* Historial de aumentos de renta */
.bloque-aumentos { margin-top: 0.9rem; }
.lista-aumentos { list-style: none; margin: 0.2rem 0 0; padding: 0; display: flex; flex-direction: column; gap: 0.35rem; }
.lista-aumentos li {
  padding: 0.45rem 0.6rem;
  background: var(--surface-tint);
  border: 1px solid var(--border);
  border-radius: var(--radius-sm);
  font-size: 0.82rem;
}
.aumento-texto { display: block; }
.aumento-texto .celda-secundaria { display: block; margin-top: 0.15rem; }
.form-registrar label.campo-concepto.oculto { display: none; }

/* Aviso de salida registrada, con deshacer siempre a la vista */
.bloque-salida {
  display: flex;
  align-items: center;
  justify-content: space-between;
  flex-wrap: wrap;
  gap: 0.5rem 0.9rem;
  margin-bottom: 0.9rem;
  padding: 0.7rem 0.9rem;
  border: 1px solid var(--border-strong);
  border-left: 4px solid var(--ink-3);
  border-radius: var(--radius-md);
  background: var(--surface-tint);
  font-size: 0.82rem;
}
.bloque-salida.pendiente { border-color: var(--warning); border-left-color: var(--warning); background: var(--warning-soft); }
.bloque-salida-texto { display: flex; align-items: flex-start; gap: 0.45rem; min-width: 0; }
.bloque-salida-texto svg { width: 1rem; height: 1rem; flex: none; margin-top: 0.1rem; }

/* Devolucion de la garantia al retirarse */
.bloque-devolucion {
  margin-top: 0.9rem;
  padding: 0.7rem 0.9rem;
  background: var(--surface-tint);
  border: 1px solid var(--border);
  border-radius: var(--radius-md);
}
.bloque-devolucion-head { display: flex; align-items: center; justify-content: space-between; gap: 0.6rem; }
.bloque-devolucion-titulo { font-size: 0.8rem; font-weight: 700; color: var(--ink); }
.bloque-devolucion-detalle { margin: 0.35rem 0 0; font-size: 0.8rem; color: var(--ink-3); }

/* "¿Cuándo paga el resto?": anotar el compromiso desde la propia fila del mes */
.btn-compromiso {
  border: none;
  background: none;
  padding: 0;
  font: inherit;
  color: inherit;
  cursor: pointer;
  text-align: left;
}
.btn-compromiso:hover { text-decoration: underline; }
.btn-compromiso:focus-visible { outline: 2px solid var(--accent); outline-offset: 2px; border-radius: 3px; }
.compromiso.sin-fijar { color: var(--ink-3); font-style: italic; }

@media (max-width: 900px) {
  .fila-arrendador { grid-template-columns: 1fr 1fr; }
}

/* ============================================================
   Confirmacion de borrado, desglose del mes y gastos
   ============================================================ */

/* Preguntar antes de borrar, en lugar del antiguo doble clic sobre la papelera. */
.confirmar-borrado {
  display: inline-flex;
  align-items: center;
  gap: 0.4rem;
  padding: 0.25rem 0.5rem;
  background: var(--danger-soft);
  border: 1px solid var(--danger);
  border-radius: var(--radius-sm);
  white-space: nowrap;
}
.confirmar-texto { font-size: 0.74rem; font-weight: 600; color: var(--danger-text, var(--danger)); }
.btn-mini.peligro-mini { background: var(--danger); color: #fff; }
.btn-mini.peligro-mini:hover { filter: brightness(0.95); }

/* Descripcion del mes: que se cobro y cuanto */
.lista-desglose { display: flex; flex-direction: column; gap: 0.4rem; margin-bottom: 0.5rem; }
.lista-desglose:empty { display: none; }
.fila-desglose { display: grid; grid-template-columns: minmax(10rem, 1fr) 8rem auto; gap: 0.4rem; align-items: center; max-width: 34rem; }
.form-registrar .fila-desglose input { width: 100%; }

/* Renta y adicionales con el mismo peso que el cobro mensual */
.lista-cobro { list-style: none; margin: 0.35rem 0 0; padding: 0; display: flex; flex-direction: column; gap: 0.15rem; max-width: 22rem; }
.lista-cobro li { display: flex; align-items: baseline; justify-content: space-between; gap: 0.75rem; font-size: 0.85rem; color: var(--ink-2); }
.lista-cobro-nombre { min-width: 0; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
.lista-cobro-monto { font-variant-numeric: tabular-nums; font-weight: 600; color: var(--ink); }
.lista-cobro-total { margin-top: 0.25rem; padding-top: 0.3rem; border-top: 1px solid var(--border); font-weight: 700; color: var(--ink); }
.lista-cobro-nota { display: block; margin-top: 0.2rem; font-size: 0.78rem; color: var(--ink-3); }
.ficha-dato.ancho-completo { grid-column: 1 / -1; }

/* Gastos generales */
.tabla-gastos .fila-form > td { padding: 0; border: none; }
.tabla-gastos .fila-form .form-registrar { margin: 0 0 0.6rem; }
/* Los botones de la fila van siempre en una linea: partidos en dos no se entiende cual es cual. */
.tabla-gastos .acciones-contrato { justify-content: flex-end; flex-wrap: nowrap; }
.tabla-gastos .col-accion { white-space: nowrap; }
.tabla-gastos td[data-label="Comprobante"] { white-space: nowrap; }
.tabla-gastos td[data-label="Periodo"], .tabla-gastos td[data-label="Fecha de pago"] { white-space: nowrap; }
.tabla-gastos .chip { margin-top: 0.2rem; }

/* ---------- Pantalla de login ---------- */

.pagina-login {
  min-height: 100vh;
  display: grid;
  place-items: center;
  padding: 1.5rem 1rem;
}
.login-caja {
  width: 100%;
  max-width: 380px;
  background: var(--surface);
  border: 1px solid var(--border);
  border-radius: var(--radius-lg);
  box-shadow: var(--shadow-card);
  padding: 2rem 1.75rem 1.75rem;
}
.login-brand { padding: 0; margin-bottom: 1.6rem; }
.login-caja h1 {
  margin: 0;
  font-family: var(--font-display);
  font-size: 1.35rem;
  font-weight: 700;
  letter-spacing: -0.02em;
}
.login-sub { margin: 0.35rem 0 1.4rem; color: var(--ink-3); font-size: 0.88rem; }
.login-form { display: flex; flex-direction: column; gap: 1rem; }
.login-form label {
  display: flex;
  flex-direction: column;
  gap: 0.35rem;
  font-size: 0.78rem;
  font-weight: 600;
  color: var(--ink-2);
}
.login-form input {
  border: 1px solid var(--border-strong);
  border-radius: var(--radius-sm);
  background: var(--surface);
  font-family: var(--font-body);
  font-size: 0.95rem;
  color: var(--ink);
  padding: 0.65rem 0.75rem;
  width: 100%;
}
.login-form input:focus { outline: none; border-color: var(--accent); box-shadow: 0 0 0 3px var(--accent-soft); }
.login-form .btn-primario { width: 100%; padding: 0.7rem 1rem; font-size: 0.92rem; margin-top: 0.3rem; }
.login-form .btn-primario:disabled { opacity: 0.7; cursor: wait; }
.login-error {
  margin: 0;
  padding: 0.6rem 0.75rem;
  border-radius: var(--radius-sm);
  background: var(--danger-soft);
  color: var(--danger-text);
  font-size: 0.82rem;
}

.login-error a { color: inherit; font-weight: 600; }

/* ---------- Usuario conectado (arriba a la derecha) ---------- */

.usuario-chip {
  display: inline-flex;
  align-items: center;
  gap: 0.55rem;
  padding: 0.25rem 0.75rem 0.25rem 0.3rem;
  border: 1px solid var(--border);
  border-radius: 999px;
  background: var(--surface);
  color: var(--ink);
  text-decoration: none;
}
.usuario-chip[hidden] { display: none; }
.usuario-chip:hover { border-color: var(--accent); background: var(--accent-soft); }
.usuario-chip .avatar { width: 28px; height: 28px; font-size: 0.68rem; }
.usuario-chip-texto { display: flex; flex-direction: column; line-height: 1.15; }
.usuario-chip-texto strong { font-size: 0.8rem; max-width: 11rem; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
.usuario-chip-texto small { font-size: 0.68rem; color: var(--ink-3); }

.msg-ok {
  background: var(--success-soft);
  border: 1px solid var(--success);
  color: var(--success-text);
  border-radius: var(--radius-sm);
  padding: 0.7rem 1rem;
  font-size: 0.85rem;
  margin-bottom: 1rem;
}

/* ---------- Configuracion ---------- */

.config-tabs {
  display: flex;
  gap: 0.35rem;
  flex-wrap: wrap;
}
.config-tab {
  display: inline-flex;
  align-items: center;
  gap: 0.45rem;
  padding: 0.55rem 1rem;
  border-radius: 999px;
  background: var(--surface);
  border: 1px solid var(--border);
  color: var(--ink-2);
  font-size: 0.85rem;
  font-weight: 600;
  text-decoration: none;
}
.config-tab svg { width: 1rem; height: 1rem; }
.config-tab:hover { border-color: var(--accent); color: var(--accent-strong); }
.config-tab.activa { background: var(--accent); border-color: var(--accent); color: #fff; }

.config-grid {
  display: grid;
  grid-template-columns: repeat(auto-fit, minmax(min(100%, 360px), 1fr));
  gap: 1.5rem;
  align-items: start;
}
.config-form { display: flex; flex-direction: column; gap: 0.9rem; padding: 1.2rem 1.4rem 1.4rem; }
.config-form > .msg-ok, .config-form > .msg-error { margin-bottom: 0; }
.config-form label {
  display: flex;
  flex-direction: column;
  gap: 0.35rem;
  font-size: 0.76rem;
  font-weight: 600;
  color: var(--ink-2);
}
.config-form input {
  border: 1px solid var(--border-strong);
  border-radius: var(--radius-sm);
  background: var(--surface);
  font-family: var(--font-body);
  font-size: 0.92rem;
  color: var(--ink);
  padding: 0.6rem 0.75rem;
}
.config-form input:disabled { background: var(--surface-tint); color: var(--ink-3); }
.config-form input:focus { outline: none; border-color: var(--accent); box-shadow: 0 0 0 3px var(--accent-soft); }
.config-form .form-ayuda { margin: -0.3rem 0 0; }
.config-acciones { display: flex; justify-content: flex-end; }
.config-perfil-cabecera { display: flex; align-items: center; gap: 0.8rem; }
.config-perfil-cabecera .avatar { width: 46px; height: 46px; font-size: 0.95rem; }
.config-perfil-cabecera div { display: flex; flex-direction: column; }
.config-perfil-cabecera small { color: var(--ink-3); font-size: 0.78rem; }
.panel-titulo-bar .card-icon { flex: none; }

.config-nota {
  display: flex;
  align-items: center;
  gap: 0.5rem;
  margin: 0;
  padding: 0.75rem 1.4rem;
  background: var(--warning-soft);
  color: var(--warning-text);
  font-size: 0.82rem;
  border-bottom: 1px solid var(--border);
}
.config-nota svg { width: 1rem; height: 1rem; flex: none; }
.config-bloque { padding: 0 1.4rem; }
.config-bloque > :first-child { margin-top: 1rem; }

.config-form-usuario select {
  border: 1px solid var(--border-strong);
  border-radius: var(--radius-sm);
  background: var(--surface);
  font-family: var(--font-body);
  font-size: 0.86rem;
  color: var(--ink);
  padding: 0.45rem 0.6rem;
}
.config-form-usuario .btn-mini { display: inline-flex; align-items: center; gap: 0.35rem; }
.config-form-usuario .btn-mini svg { width: 0.9rem; height: 0.9rem; }

.config-permisos {
  flex: 1 1 100%;
  display: grid;
  grid-template-columns: repeat(auto-fill, minmax(min(100%, 14rem), 1fr));
  gap: 0.5rem;
  margin: 0;
  padding: 0;
  border: none;
}
.config-permisos[hidden] { display: none; }
.config-permisos legend { font-size: 0.72rem; font-weight: 600; color: var(--ink-3); margin-bottom: 0.4rem; padding: 0; }
.form-registrar label.casilla, .casilla {
  flex-direction: row;
  align-items: flex-start;
  gap: 0.55rem;
  padding: 0.6rem 0.7rem;
  border: 1px solid var(--border);
  border-radius: var(--radius-sm);
  background: var(--surface);
  cursor: pointer;
}
.form-registrar .casilla input { width: auto; margin: 0.15rem 0 0; accent-color: var(--accent); }
.casilla span { display: flex; flex-direction: column; gap: 0.1rem; }
.casilla strong { color: var(--ink); font-size: 0.82rem; }
.casilla small { color: var(--ink-3); font-weight: 400; font-size: 0.74rem; }
.casilla:has(input:checked) { border-color: var(--accent); background: var(--accent-soft); }
.form-ayuda[data-aviso-admin] { flex: 1 1 100%; margin: 0; }

.config-chips { display: flex; flex-wrap: wrap; gap: 0.3rem; max-width: 20rem; }
.tabla-usuarios td { vertical-align: middle; }
.tabla-usuarios td[data-label="Último acceso"] { white-space: nowrap; font-size: 0.82rem; color: var(--ink-2); }
.tabla-usuarios .acciones-contrato { justify-content: flex-end; }

/* Interruptor prender / apagar acceso */
.interruptor { position: relative; display: inline-flex; align-items: center; gap: 0.5rem; cursor: pointer; font-size: 0.8rem; color: var(--ink-2); }
.interruptor input { position: absolute; opacity: 0; width: 1px; height: 1px; }
.interruptor-riel {
  position: relative;
  width: 2.3rem;
  height: 1.3rem;
  border-radius: 999px;
  background: var(--border-strong);
  transition: background 0.15s ease;
  flex: none;
}
.interruptor-riel::after {
  content: "";
  position: absolute;
  top: 0.15rem;
  left: 0.15rem;
  width: 1rem;
  height: 1rem;
  border-radius: 999px;
  background: #fff;
  box-shadow: var(--shadow-sm);
  transition: transform 0.15s ease;
}
.interruptor input:checked + .interruptor-riel { background: var(--success); }
.interruptor input:checked + .interruptor-riel::after { transform: translateX(1rem); }
.interruptor input:focus-visible + .interruptor-riel { outline: 2px solid var(--accent); outline-offset: 2px; }
.interruptor input:disabled + .interruptor-riel { opacity: 0.5; }
.interruptor:has(input:disabled) { cursor: not-allowed; }

.config-invitacion {
  border: 1px solid var(--accent);
  background: var(--accent-soft);
  border-radius: var(--radius-md);
  padding: 0.9rem 1rem;
  margin-bottom: 0.9rem;
}
.config-invitacion-titulo { display: flex; align-items: flex-start; gap: 0.5rem; margin: 0 0 0.4rem; font-size: 0.88rem; }
.config-invitacion-titulo svg { width: 1.1rem; height: 1.1rem; flex: none; color: var(--accent-strong); margin-top: 0.05rem; }
.config-invitacion .form-ayuda { margin: 0 0 0.5rem; }
.config-enlace { display: flex; gap: 0.5rem; flex-wrap: wrap; }
.config-enlace input {
  flex: 1 1 16rem;
  min-width: 0;
  border: 1px solid var(--border-strong);
  border-radius: var(--radius-sm);
  background: var(--surface);
  font-family: ui-monospace, monospace;
  font-size: 0.78rem;
  color: var(--ink-2);
  padding: 0.5rem 0.6rem;
}
.config-enlace .btn-secundario { display: inline-flex; align-items: center; gap: 0.4rem; text-decoration: none; }
.config-enlace svg { width: 1rem; height: 1rem; }

/* Respuestas rapidas */
.lista-respuestas { display: grid; grid-template-columns: repeat(auto-fill, minmax(min(100%, 320px), 1fr)); gap: 0.9rem; padding: 0.4rem 0 1.4rem; }
.respuesta-item {
  border: 1px solid var(--border);
  border-radius: var(--radius-md);
  padding: 0.9rem 1rem;
  background: var(--surface-tint);
}
.respuesta-item .form-registrar { margin-bottom: 0; }
.respuesta-cabecera { display: flex; align-items: center; gap: 0.5rem; }
.respuesta-cabecera strong { font-size: 0.9rem; flex: 1; min-width: 0; }
.respuesta-acciones { display: flex; gap: 0.3rem; }
.respuesta-atajo {
  font-family: ui-monospace, monospace;
  font-size: 0.76rem;
  font-weight: 600;
  color: var(--accent-strong);
  background: var(--accent-soft);
  padding: 0.15rem 0.45rem;
  border-radius: 6px;
  flex: none;
}
.respuesta-texto { margin: 0.55rem 0 0; font-size: 0.85rem; color: var(--ink-2); white-space: pre-line; line-height: 1.45; }
.config-variable { color: var(--accent-strong); font-weight: 600; }
.config-atajo { display: flex; align-items: center; border: 1px solid var(--border-strong); border-radius: var(--radius-sm); background: var(--surface); padding-left: 0.55rem; }
.config-atajo span { color: var(--ink-3); font-weight: 700; }
.form-registrar .config-atajo input { border: none; box-shadow: none; padding-left: 0.2rem; width: 8rem; }
.form-registrar label.config-titulo-respuesta { flex: 1 1 14rem; }
.form-registrar label.config-titulo-respuesta input { width: 100%; }
.form-registrar label.ancho-total textarea { width: 100%; }
.form-registrar .form-ayuda.ancho-total { flex: 1 1 100%; margin: 0; display: flex; flex-wrap: wrap; gap: 0.3rem; align-items: center; }
.icono-en-linea { width: 0.9rem; height: 0.9rem; vertical-align: -0.12rem; }
.estado-vacio p { margin: 0 0 0.6rem; }

/* ---------- Conversaciones ---------- */

.aviso-whatsapp {
  display: flex;
  gap: 0.8rem;
  align-items: flex-start;
  padding: 0.9rem 1.1rem;
  border-radius: var(--radius-md);
  background: var(--accent-soft);
  border: 1px solid var(--accent-soft-strong);
  font-size: 0.85rem;
  color: var(--ink-2);
}
.aviso-whatsapp svg { width: 1.3rem; height: 1.3rem; flex: none; color: var(--accent-strong); }
.aviso-whatsapp div { display: flex; flex-direction: column; gap: 0.15rem; }
.aviso-whatsapp strong { color: var(--ink); }

.chat-layout {
  display: grid;
  grid-template-columns: minmax(260px, 340px) 1fr;
  gap: 1rem;
  height: clamp(460px, calc(100vh - 21rem), 900px);
}
.chat-lista, .chat-panel { display: flex; flex-direction: column; min-height: 0; }
.chat-buscador {
  display: flex;
  align-items: center;
  gap: 0.5rem;
  margin: 0.8rem;
  padding: 0 0.7rem;
  border: 1px solid var(--border-strong);
  border-radius: var(--radius-sm);
  background: var(--surface-tint);
}
.chat-buscador svg { width: 1rem; height: 1rem; color: var(--ink-3); flex: none; }
.chat-buscador input { border: none; background: none; outline: none; padding: 0.55rem 0; width: 100%; font-family: var(--font-body); font-size: 0.86rem; color: var(--ink); }
.chat-items { overflow-y: auto; flex: 1; border-top: 1px solid var(--border); }
.chat-items .estado-vacio { padding: 2rem 1rem; }
.chat-item {
  display: flex;
  gap: 0.7rem;
  align-items: center;
  width: 100%;
  padding: 0.75rem 0.9rem;
  border: none;
  border-bottom: 1px solid var(--border);
  background: none;
  text-align: left;
  color: var(--ink);
}
.chat-item:hover { background: var(--surface-tint); }
.chat-item.activo { background: var(--accent-soft); }
.chat-item-texto { flex: 1; min-width: 0; display: flex; flex-direction: column; gap: 0.2rem; }
.chat-item-linea { display: flex; align-items: center; justify-content: space-between; gap: 0.5rem; min-width: 0; }
.chat-item-linea strong { font-size: 0.84rem; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
.chat-item-linea small { font-size: 0.7rem; color: var(--ink-3); flex: none; }
.chat-item-preview { font-size: 0.78rem; color: var(--ink-3); overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
.chat-item .chip { flex: none; }

.chat-vacio {
  flex: 1;
  display: flex;
  flex-direction: column;
  align-items: center;
  justify-content: center;
  gap: 0.6rem;
  color: var(--ink-3);
  font-size: 0.88rem;
  padding: 2rem;
  text-align: center;
}
.chat-vacio svg { width: 2.4rem; height: 2.4rem; color: var(--ink-4); }
.chat-vacio p { margin: 0; }

.chat-cabecera { display: flex; align-items: center; gap: 0.7rem; padding: 0.8rem 1.1rem; border-bottom: 1px solid var(--border); }
.chat-cabecera-texto { display: flex; flex-direction: column; min-width: 0; }
.chat-cabecera-texto strong { font-size: 0.92rem; }
.chat-cabecera-texto small { color: var(--ink-3); font-size: 0.78rem; }
.chat-volver { display: none; text-decoration: none; }

.chat-mensajes {
  flex: 1;
  overflow-y: auto;
  padding: 1.1rem;
  display: flex;
  flex-direction: column;
  gap: 0.45rem;
  background: var(--surface-tint);
}
.burbuja {
  max-width: min(75%, 34rem);
  padding: 0.55rem 0.8rem 0.35rem;
  border-radius: 12px;
  font-size: 0.87rem;
  line-height: 1.4;
  box-shadow: var(--shadow-sm);
}
.burbuja.entrante { align-self: flex-start; background: var(--surface); border: 1px solid var(--border); border-bottom-left-radius: 4px; }
.burbuja.saliente { align-self: flex-end; background: var(--accent); color: #fff; border-bottom-right-radius: 4px; }
.burbuja-texto { overflow-wrap: anywhere; }
.burbuja-hora { display: block; text-align: right; font-size: 0.66rem; opacity: 0.7; margin-top: 0.15rem; }

.chat-redactor {
  position: relative;
  display: flex;
  align-items: flex-end;
  gap: 0.5rem;
  padding: 0.75rem 0.9rem;
  border-top: 1px solid var(--border);
}
.chat-redactor .btn-icono { width: 2.4rem; height: 2.4rem; }
.chat-redactor textarea {
  flex: 1;
  resize: none;
  border: 1px solid var(--border-strong);
  border-radius: var(--radius-md);
  background: var(--surface);
  font-family: var(--font-body);
  font-size: 0.9rem;
  color: var(--ink);
  padding: 0.6rem 0.8rem;
  min-height: 2.4rem;
  line-height: 1.35;
}
.chat-redactor textarea:focus { outline: none; border-color: var(--accent); box-shadow: 0 0 0 3px var(--accent-soft); }
.chat-enviar { display: inline-flex; align-items: center; gap: 0.4rem; white-space: nowrap; height: 2.4rem; }
.chat-enviar svg { width: 1rem; height: 1rem; }
.chat-enviar:disabled { opacity: 0.55; cursor: not-allowed; }
.chat-error { margin: 0 0.9rem 0.5rem; }

.respuestas-menu {
  position: absolute;
  left: 0.9rem;
  right: 0.9rem;
  bottom: calc(100% + 0.3rem);
  max-height: 18rem;
  overflow-y: auto;
  background: var(--surface);
  border: 1px solid var(--border-strong);
  border-radius: var(--radius-md);
  box-shadow: var(--shadow-modal);
  z-index: 5;
  padding: 0.3rem;
}
.respuestas-opcion {
  display: flex;
  align-items: flex-start;
  gap: 0.6rem;
  width: 100%;
  padding: 0.55rem 0.6rem;
  border: none;
  border-radius: var(--radius-sm);
  background: none;
  text-align: left;
  color: var(--ink);
}
.respuestas-opcion span:last-child { display: flex; flex-direction: column; min-width: 0; }
.respuestas-opcion strong { font-size: 0.84rem; }
.respuestas-opcion small { color: var(--ink-3); font-size: 0.76rem; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
.respuestas-opcion:hover, .respuestas-opcion.elegida { background: var(--accent-soft); }
.respuestas-menu-vacio { margin: 0; padding: 0.7rem; font-size: 0.82rem; color: var(--ink-3); }
.respuestas-menu-vacio a { color: var(--accent-strong); }

@media (max-width: 980px) {
  .chat-layout { grid-template-columns: 1fr; height: clamp(420px, calc(100vh - 16rem), 900px); }
  .chat-layout .chat-panel { display: none; }
  .chat-layout.con-chat .chat-lista { display: none; }
  .chat-layout.con-chat .chat-panel { display: flex; }
  .chat-volver { display: inline-flex; }
}
@media (max-width: 640px) {
  .topbar { flex-wrap: wrap; }
  .topbar-acciones { flex: 1 1 100%; justify-content: flex-start; }
  .usuario-chip-texto { display: none; }
  .usuario-chip { padding: 0.2rem; }
  .chat-enviar span { display: none; }
  .burbuja { max-width: 88%; }
}

/* ---------- Pie del menu: Configuracion y tarjeta del usuario ---------- */

.solo-movil { display: none !important; }
.nav-pie { flex: none; margin-bottom: 0.75rem; }
.tarjeta-usuario {
  display: flex;
  align-items: center;
  gap: 0.4rem;
  padding: 0.55rem 0.5rem 0.55rem 0.6rem;
  border: 1px solid var(--border);
  border-radius: var(--radius-md);
  background: var(--surface-tint);
}
.tarjeta-usuario[hidden] { display: none; }
.tarjeta-usuario-perfil { display: flex; align-items: center; gap: 0.6rem; flex: 1; min-width: 0; color: var(--ink); text-decoration: none; }
.tarjeta-usuario-perfil:hover strong { color: var(--accent-strong); }
.tarjeta-usuario-texto { display: flex; flex-direction: column; min-width: 0; line-height: 1.2; }
.tarjeta-usuario-texto strong { font-size: 0.84rem; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
.tarjeta-usuario-texto small { font-size: 0.72rem; color: var(--ink-3); overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
.usuario-chip { padding: 0.2rem; }

/* ---------- Configuracion: inicio con tarjetas ---------- */

.config-hub {
  display: grid;
  grid-template-columns: repeat(auto-fill, minmax(min(100%, 300px), 1fr));
  gap: 1rem;
}
.config-hub-item {
  display: flex;
  align-items: center;
  gap: 0.9rem;
  padding: 1.2rem 1.2rem;
  background: var(--surface);
  border: 1px solid var(--border);
  border-radius: var(--radius-lg);
  box-shadow: var(--shadow-card);
  color: var(--ink);
  text-decoration: none;
  transition: border-color 0.15s ease, transform 0.15s ease;
}
.config-hub-item:hover { border-color: var(--accent); }
.config-hub-item .card-icon { flex: none; }
.config-hub-texto { display: flex; flex-direction: column; gap: 0.2rem; flex: 1; min-width: 0; }
.config-hub-texto strong { font-size: 0.95rem; }
.config-hub-texto small { color: var(--ink-3); font-size: 0.8rem; line-height: 1.35; }
.config-hub-flecha svg { width: 1rem; height: 1rem; color: var(--ink-4); }
.config-hub-item:hover .config-hub-flecha svg { color: var(--accent-strong); }

.config-barra { display: flex; align-items: center; justify-content: space-between; gap: 0.75rem; flex-wrap: wrap; }
.config-volver { display: inline-flex; align-items: center; gap: 0.4rem; color: var(--ink-2); font-size: 0.86rem; font-weight: 500; text-decoration: none; }
.config-volver svg { width: 1rem; height: 1rem; }
.config-volver:hover { color: var(--accent-strong); }
.config-barra-acciones { display: flex; gap: 0.5rem; flex-wrap: wrap; }
.btn-con-icono { display: inline-flex; align-items: center; gap: 0.45rem; }
.btn-con-icono svg { width: 1rem; height: 1rem; }
#config-cuerpo { display: flex; flex-direction: column; gap: 1rem; }
#config-cuerpo > .msg-ok, #config-cuerpo > .msg-error { margin-bottom: 0; }
#config-cuerpo > .config-nota { border: 1px solid var(--border); border-radius: var(--radius-md); }
#config-cuerpo > .config-invitacion { margin-bottom: 0; }

/* ---------- Usuarios y permisos ---------- */

.rol-badge {
  display: inline-block;
  padding: 0.28rem 0.6rem;
  border-radius: 999px;
  font-size: 0.68rem;
  font-weight: 700;
  letter-spacing: 0.04em;
  text-transform: uppercase;
  background: var(--neutral-soft);
  color: var(--ink-2);
  white-space: nowrap;
}
.rol-badge.admin { background: var(--accent); color: #fff; }
.config-permisos-texto { font-size: 0.84rem; color: var(--ink-2); border-bottom: 1px dotted var(--ink-4); cursor: help; white-space: nowrap; }
.tabla-usuarios td[data-label="Correo"] { color: var(--ink-2); font-size: 0.86rem; }
.tabla-usuarios th.col-accion { text-align: right; }
.config-acciones-fila { display: flex; gap: 0.35rem; justify-content: flex-end; align-items: center; }
.config-acciones-fila .btn-icono:disabled { opacity: 0.35; cursor: not-allowed; pointer-events: none; }
.btn-encendido { color: var(--ink-4); }
.btn-encendido.encendido { color: var(--success); }
.btn-encendido.encendido:hover { color: var(--danger); border-color: var(--danger); background: var(--danger-soft); }

/* Formularios de usuario en el modal */
.config-form-modal { padding: 0.2rem 0 0; }
.config-campos { display: grid; grid-template-columns: repeat(auto-fit, minmax(min(100%, 14rem), 1fr)); gap: 0.9rem; }
.config-form-modal select {
  border: 1px solid var(--border-strong);
  border-radius: var(--radius-sm);
  background: var(--surface);
  font-family: var(--font-body);
  font-size: 0.92rem;
  color: var(--ink);
  padding: 0.6rem 0.75rem;
}
.config-form-modal select:focus { outline: none; border-color: var(--accent); box-shadow: 0 0 0 3px var(--accent-soft); }
.config-form-modal .casilla input { width: auto; margin: 0.15rem 0 0; accent-color: var(--accent); padding: 0; }
.config-form-modal .config-acciones { gap: 0.5rem; }
.config-form-modal .form-ayuda { margin: 0; }
.config-aviso-admin { display: flex; align-items: center; gap: 0.4rem; }

@media (max-width: 980px) {
  .solo-movil { display: revert !important; }
  .usuario-chip.solo-movil { display: inline-flex !important; }
  .usuario-chip.solo-movil[hidden] { display: none !important; }
  .nav-item.solo-movil { display: flex !important; }
  .btn-salir.solo-movil { display: inline-flex !important; }
}

/* Ajustes de la tabla y el modal de usuarios */
table.tabla.tabla-usuarios thead th { padding: 0.75rem 0.6rem; white-space: nowrap; }
table.tabla.tabla-usuarios tr.fila td { padding: 0.7rem 0.6rem; }
table.tabla.tabla-usuarios thead th:first-child, table.tabla.tabla-usuarios tr.fila td:first-child { padding-left: 1.2rem; }
table.tabla.tabla-usuarios thead th:last-child, table.tabla.tabla-usuarios tr.fila td:last-child { padding-right: 1.2rem; }
.tabla-usuarios td[data-label="Nombre"] strong { white-space: nowrap; }
.tabla-usuarios td[data-label="Correo"], .tabla-usuarios td[data-label="Estado"] { white-space: nowrap; }
.config-aviso-admin[hidden] { display: none; }
.config-form-modal .config-acciones .btn-primario,
.config-form-modal .config-acciones .btn-secundario { display: inline-flex; align-items: center; gap: 0.45rem; }
.config-form-modal .config-acciones svg { width: 1rem; height: 1rem; }

table.tabla.tabla-usuarios .col-accion { padding-right: 1.2rem !important; }
.tabla-usuarios td[data-label="Nombre"] .chip { margin-left: 0.25rem; }
