/* ─── assets/css/main.css ─────────────────────────────────────────
   Variables, reset, layout base, componentes globales.
   mobile.css complementa con overrides específicos de móvil.
─────────────────────────────────────────────────────────────────── */

/* ═══════════════════════════════════════════════════════════════════
   Sistema de paleta admin-configurable (Sprint 1 v2)
   Variables existentes (--navy, --gray-*, --white, --blue-lt) cambian
   sus VALORES según data-theme en <html>. Sus NOMBRES no cambian, así
   que el resto del CSS no requiere reemplazo masivo.
   ─────────────────────────────────────────────────────────────────── */

/* Preset por defecto: Editorial (rediseño cálido cremita) */
:root,
:root[data-theme="editorial"] {
  --navy:      #1B3A6B;
  --navy-dk:   #122850;
  --blue-lt:   #EFEBE0;   /* paper-2 cálido (era #E8EEF5 azulado) */
  --gray-1:    #F7F5EF;   /* papel cremita (era #F5F6FA) */
  --gray-2:    #ECE7DC;   /* línea cálida (era #E8E9ED) */
  --gray-3:    #8B8F9B;
  --gray-4:    #4A5061;
  --gray-5:    #1A1F2C;
  --white:     #FFFFFF;
  --yellow:    #FFD43B;   /* nuevo — acento; no estaba en uso */
  --yellow-dk: #E5B91F;
}

:root[data-theme="forest"] {
  --navy:      #1F4D3A;
  --navy-dk:   #143628;
  --blue-lt:   #EBE7D9;
  --gray-1:    #F4F1E8;
  --gray-2:    #E2DDCC;
  --gray-3:    #7E8780;
  --gray-4:    #3D4F44;
  --gray-5:    #15281F;
  --white:     #FFFFFF;
  --yellow:    #F4C430;
  --yellow-dk: #D9A91F;
}

:root[data-theme="rust"] {
  --navy:      #7A2E1F;
  --navy-dk:   #5A1F12;
  --blue-lt:   #EDE5D6;
  --gray-1:    #F8F2E8;
  --gray-2:    #E5DCC8;
  --gray-3:    #8C7E74;
  --gray-4:    #4F3A30;
  --gray-5:    #2A1810;
  --white:     #FFFFFF;
  --yellow:    #F0B935;
  --yellow-dk: #D49E1E;
}

:root[data-theme="graphite"] {
  --navy:      #2C2C2E;
  --navy-dk:   #1A1A1C;
  --blue-lt:   #ECE9E2;
  --gray-1:    #F4F2EE;
  --gray-2:    #E4E1D9;
  --gray-3:    #84848C;
  --gray-4:    #3F3F45;
  --gray-5:    #0F0F12;
  --white:     #FFFFFF;
  --yellow:    #FFD43B;
  --yellow-dk: #E5B91F;
}

/* Tokens comunes: NO varían por tema */
:root {
  /* Semánticos */
  --green:     #1E6B3A;
  --green-lt:  #E8F5EE;
  --orange:    #B85C00;
  --orange-lt: #FFF3E8;
  --red:       #C0392B;
  --red-lt:    #FDECEA;

  /* Tipografía */
  --font:        'Inter', system-ui, -apple-system, 'Segoe UI', sans-serif;
  --font-serif:  'Fraunces', Georgia, serif;

  --radius:    10px;
  --radius-sm: 6px;
  --shadow:    0 2px 8px rgba(0,0,0,0.10);
  --shadow-md: 0 4px 16px rgba(0,0,0,0.13);

  --sidebar-w: 240px;
  --header-h:  56px;
}

/* Títulos en Fraunces (resto sigue Inter) */
h1, h2, .titular, .titulo-grande {
  font-family: var(--font-serif);
  font-weight: 500;
  letter-spacing: -0.015em;
}

/* Sprite de íconos */
.icon {
  width: 1em; height: 1em;
  vertical-align: -0.125em;
  fill: none; stroke: currentColor; stroke-width: 1.8;
  flex-shrink: 0;
}

/* Reset */
*, *::before, *::after { box-sizing: border-box; margin: 0; padding: 0; }
html, body { height: 100%; font-family: var(--font); font-size: 15px; color: var(--gray-5); background: var(--gray-1); }
a { color: inherit; text-decoration: none; }
button { cursor: pointer; font-family: inherit; }
input, select, textarea { font-family: inherit; font-size: 15px; }
img { display: block; max-width: 100%; }

/* ── Layout principal ──────────────────────────────────────────── */
#app {
  display: flex;
  flex-direction: column;
  min-height: 100vh;
}

#app-header {
  position: fixed; top: 0; left: 0; right: 0;
  height: var(--header-h);
  background: var(--navy);
  display: flex; align-items: center;
  padding: 0 16px;
  z-index: 100;
  box-shadow: var(--shadow);
}

#app-logo {
  color: var(--white);
  font-size: 17px;
  font-weight: 700;
  letter-spacing: 0.3px;
}

#app-layout {
  display: flex;
  margin-top: var(--header-h);
  min-height: calc(100vh - var(--header-h));
}

#app-sidebar {
  width: var(--sidebar-w);
  background: var(--white);
  border-right: 1px solid var(--gray-2);
  position: fixed;
  top: var(--header-h);
  bottom: 0;
  overflow-y: auto;
  padding: 16px 0;
  z-index: 90;
}

#app-contenido {
  margin-left: var(--sidebar-w);
  flex: 1;
  padding: 24px;
  min-height: calc(100vh - var(--header-h));
}
/* Módulo rutas necesita altura fija para el mapa */
#app-contenido:has(.ruta-shell) {
  padding: 0;
  height: calc(100vh - var(--header-h));
  overflow: hidden;
  display: flex;
  flex-direction: column;
}

/* ── Sidebar nav ───────────────────────────────────────────────── */
.nav-item {
  display: flex; align-items: center; gap: 10px;
  padding: 11px 20px;
  font-size: 14px;
  color: var(--gray-4);
  cursor: pointer;
  border-left: 3px solid transparent;
  transition: all 0.15s;
}
.nav-item:hover     { background: var(--blue-lt); color: var(--navy); }
.nav-item.activo    { background: var(--blue-lt); color: var(--navy); font-weight: 600; border-left-color: var(--navy); }
.nav-item .nav-icon { font-size: 18px; width: 22px; text-align: center; }

/* ── Botones ───────────────────────────────────────────────────── */
.btn {
  display: inline-flex; align-items: center; justify-content: center; gap: 6px;
  padding: 10px 20px;
  border: none; border-radius: var(--radius-sm);
  font-size: 14px; font-weight: 600;
  transition: opacity 0.15s, transform 0.1s;
  min-height: 42px;
}
.btn:active { transform: scale(0.97); }
.btn:disabled { opacity: 0.5; cursor: not-allowed; }

.btn-primario   { background: var(--navy);   color: var(--white); }
.btn-primario:hover   { opacity: 0.88; }
.btn-secundario { background: var(--gray-2); color: var(--gray-5); }
.btn-secundario:hover { background: var(--gray-3); }
.btn-success    { background: var(--green);  color: var(--white); }
.btn-danger     { background: var(--red);    color: var(--white); }
.btn-ghost      { background: transparent;   color: var(--navy); border: 1.5px solid var(--navy); }
.btn-full       { width: 100%; }
.btn-sm         { padding: 7px 14px; font-size: 13px; min-height: 34px; }
.btn-lg         { padding: 14px 28px; font-size: 16px; min-height: 52px; }

/* ── Cards ─────────────────────────────────────────────────────── */
.card {
  background: var(--white);
  border-radius: var(--radius);
  box-shadow: var(--shadow);
  padding: 20px;
  margin-bottom: 16px;
}
.card-titulo {
  font-size: 16px; font-weight: 700;
  color: var(--navy); margin-bottom: 14px;
  padding-bottom: 10px;
  border-bottom: 2px solid var(--blue-lt);
}

/* ── Formularios ───────────────────────────────────────────────── */
.form-grupo {
  margin-bottom: 16px;
}
.form-grupo label {
  display: block;
  font-size: 13px; font-weight: 600;
  color: var(--gray-4); margin-bottom: 5px;
}
.form-input, .form-select, .form-textarea {
  width: 100%;
  padding: 10px 13px;
  border: 1.5px solid var(--gray-2);
  border-radius: var(--radius-sm);
  font-size: 15px; color: var(--gray-5);
  background: var(--white);
  transition: border-color 0.15s;
}
.form-input:focus, .form-select:focus, .form-textarea:focus {
  outline: none;
  border-color: var(--navy);
}
.form-textarea { resize: vertical; min-height: 90px; }
.form-error { font-size: 12px; color: var(--red); margin-top: 4px; }

/* ── Tabla ──────────────────────────────────────────────────────── */
.tabla-wrap { overflow-x: auto; }
.tabla {
  width: 100%; border-collapse: collapse;
  font-size: 14px;
}
.tabla th {
  background: var(--navy); color: var(--white);
  padding: 10px 14px; text-align: left;
  font-size: 13px; font-weight: 600;
}
.tabla td {
  padding: 10px 14px;
  border-bottom: 1px solid var(--gray-2);
  vertical-align: middle;
}
.tabla tr:hover td { background: var(--blue-lt); }
.tabla tr:last-child td { border-bottom: none; }

/* ── Badges ─────────────────────────────────────────────────────── */
.badge {
  display: inline-block;
  padding: 3px 10px; border-radius: 20px;
  font-size: 12px; font-weight: 600;
  color: var(--white);
}

/* ── Toast ──────────────────────────────────────────────────────── */
.toast {
  position: fixed; bottom: 80px; left: 50%; transform: translateX(-50%) translateY(20px);
  background: var(--gray-5); color: var(--white);
  padding: 12px 24px; border-radius: var(--radius);
  font-size: 14px; font-weight: 500;
  box-shadow: var(--shadow-md);
  opacity: 0; transition: all 0.25s;
  z-index: 9999; max-width: 90vw; text-align: center;
}
.toast--visible  { opacity: 1; transform: translateX(-50%) translateY(0); }
.toast--success  { background: var(--green); }
.toast--error    { background: var(--red); }
.toast--warning  { background: var(--orange); }

/* ── Spinner ────────────────────────────────────────────────────── */
.spinner-overlay {
  position: fixed; inset: 0;
  background: rgba(255,255,255,0.75);
  display: flex; align-items: center; justify-content: center;
  z-index: 9998;
}
.spinner-ring {
  width: 44px; height: 44px;
  border: 4px solid var(--gray-2);
  border-top-color: var(--navy);
  border-radius: 50%;
  animation: spin 0.7s linear infinite;
}
.spinner-full {
  display: flex; justify-content: center; padding: 60px;
}
.spinner-full::after {
  content: '';
  width: 36px; height: 36px;
  border: 3px solid var(--gray-2);
  border-top-color: var(--navy);
  border-radius: 50%;
  animation: spin 0.7s linear infinite;
}
@keyframes spin { to { transform: rotate(360deg); } }

/* ── Modal ──────────────────────────────────────────────────────── */
.modal-overlay {
  position: fixed; inset: 0;
  background: rgba(0,0,0,0.45);
  display: flex; align-items: center; justify-content: center;
  z-index: 9990; padding: 16px;
}
.modal-box {
  background: var(--white);
  border-radius: var(--radius);
  box-shadow: var(--shadow-md);
  width: 100%; max-width: 480px;
  padding: 24px;
}
.modal-titulo  { font-size: 17px; font-weight: 700; color: var(--navy); margin-bottom: 14px; }
.modal-cuerpo  { font-size: 15px; color: var(--gray-5); margin-bottom: 20px; }
.modal-botones { display: flex; gap: 10px; justify-content: flex-end; flex-wrap: wrap; }

/* ── Pantalla de login ──────────────────────────────────────────── */
.login-wrap {
  min-height: 100vh;
  display: flex; align-items: center; justify-content: center;
  background: var(--navy);
  padding: 20px;
}
.login-card {
  background: var(--white);
  border-radius: var(--radius);
  padding: 36px 32px;
  width: 100%; max-width: 380px;
  box-shadow: var(--shadow-md);
}
.login-logo { font-size: 22px; font-weight: 800; color: var(--navy); margin-bottom: 8px; }
.login-sub  { font-size: 13px; color: var(--gray-3); margin-bottom: 28px; }
.login-error { background: var(--red-lt); color: var(--red); border-radius: var(--radius-sm); padding: 10px 14px; font-size: 13px; margin-bottom: 14px; }

/* ── Utilidades ─────────────────────────────────────────────────── */
.texto-navy    { color: var(--navy); }
.texto-verde   { color: var(--green); }
.texto-naranja { color: var(--orange); }
.texto-rojo    { color: var(--red); }
.texto-gris    { color: var(--gray-3); }
.texto-bold    { font-weight: 700; }
.texto-centro  { text-align: center; }
.mt-8  { margin-top: 8px; }
.mt-16 { margin-top: 16px; }
.mt-24 { margin-top: 24px; }
.flex  { display: flex; }
.flex-entre { display: flex; justify-content: space-between; align-items: center; }
.gap-8  { gap: 8px; }
.gap-16 { gap: 16px; }
.oculto { display: none !important; }
.error-msg { color: var(--red); padding: 20px; text-align: center; }

/* ═══════════════════════════════════════════════════════════════════
   MÓDULO CLIENTES
═══════════════════════════════════════════════════════════════════ */

/* Header de módulo */
.modulo-header {
  display: flex; align-items: center; gap: 12px;
  margin-bottom: 20px;
}
.modulo-titulo {
  font-size: 20px; font-weight: 700; color: var(--navy);
}

/* Botones adicionales */
.btn-primary   { background: var(--navy);   color: var(--white); }
.btn-primary:hover { opacity: 0.88; }
.btn-secondary { background: var(--gray-2); color: var(--gray-5); }
.btn-secondary:hover { background: var(--gray-3); }

/* Toolbar búsqueda/filtros */
.clientes-toolbar {
  display: flex; gap: 10px; flex-wrap: wrap;
  margin-bottom: 12px;
}
.input-search {
  flex: 1; min-width: 180px;
  padding: 9px 13px;
  border: 1.5px solid var(--gray-2);
  border-radius: var(--radius-sm);
  font-size: 14px; color: var(--gray-5);
  background: var(--white);
}
.input-search:focus { outline: none; border-color: var(--navy); }
.select-filtro {
  padding: 9px 12px;
  border: 1.5px solid var(--gray-2);
  border-radius: var(--radius-sm);
  font-size: 14px; color: var(--gray-5);
  background: var(--white);
  cursor: pointer;
}
.select-filtro:focus { outline: none; border-color: var(--navy); }

/* Contador */
.clientes-contador {
  font-size: 13px; color: var(--gray-3);
  margin-bottom: 10px;
}

/* Lista de clientes */
.clientes-lista { display: flex; flex-direction: column; gap: 8px; }

.cliente-card {
  display: flex; align-items: center; gap: 12px;
  background: var(--white);
  border: 1px solid var(--gray-2);
  border-radius: var(--radius);
  padding: 14px 16px;
  cursor: pointer;
  transition: box-shadow 0.15s, border-color 0.15s;
}
.cliente-card:hover {
  border-color: var(--navy);
  box-shadow: var(--shadow);
}
.cliente-card-main { flex: 1; min-width: 0; }
.cliente-nombre {
  font-size: 15px; font-weight: 600; color: var(--gray-5);
  white-space: nowrap; overflow: hidden; text-overflow: ellipsis;
}
.cliente-meta {
  display: flex; gap: 10px; flex-wrap: wrap;
  margin-top: 4px;
  font-size: 12px; color: var(--gray-3);
}
.cliente-card-side {
  display: flex; flex-direction: column; align-items: flex-end;
  gap: 6px; flex-shrink: 0;
}
.cliente-chevron {
  font-size: 22px; color: var(--gray-3); font-weight: 300;
}

/* Badges */
.badge-cartera {
  display: inline-block;
  padding: 3px 9px;
  background: var(--blue-lt); color: var(--navy);
  border-radius: 20px;
  font-size: 11px; font-weight: 600;
  white-space: nowrap;
}
.badge-sucursal {
  display: inline-block;
  padding: 3px 9px;
  background: var(--orange-lt); color: var(--orange);
  border-radius: 20px;
  font-size: 11px; font-weight: 600;
}

/* Empty state */
.empty-state {
  text-align: center;
  padding: 60px 20px;
  color: var(--gray-3);
}
.empty-icon { font-size: 48px; margin-bottom: 12px; }

/* ── Ficha cliente ── */
.ficha-cliente {
  background: var(--white);
  border-radius: var(--radius);
  box-shadow: var(--shadow);
  overflow: hidden;
  max-width: 620px;
}
.ficha-cabecera {
  background: var(--navy);
  padding: 24px 20px;
  display: flex; align-items: center; gap: 16px;
}
.ficha-avatar {
  width: 56px; height: 56px;
  background: rgba(255,255,255,0.18);
  border-radius: 50%;
  display: flex; align-items: center; justify-content: center;
  font-size: 24px; font-weight: 700; color: var(--white);
  flex-shrink: 0;
}
.ficha-cabecera-info { min-width: 0; }
.ficha-nombre {
  font-size: 16px; font-weight: 700; color: var(--white);
  margin-bottom: 4px;
}
.ficha-rut { font-size: 13px; color: rgba(255,255,255,0.75); margin-bottom: 6px; }

.ficha-secciones { padding: 0; }
.ficha-seccion { padding: 16px 20px; border-bottom: 1px solid var(--gray-2); }
.ficha-seccion:last-child { border-bottom: none; }
.ficha-seccion-titulo {
  font-size: 12px; font-weight: 700; text-transform: uppercase;
  letter-spacing: 0.8px; color: var(--gray-3);
  margin-bottom: 12px;
}
.ficha-fila {
  display: flex; align-items: baseline; gap: 8px;
  padding: 5px 0;
  border-bottom: 1px solid var(--gray-1);
}
.ficha-fila:last-child { border-bottom: none; }
.ficha-label {
  font-size: 13px; color: var(--gray-3); font-weight: 500;
  min-width: 110px; flex-shrink: 0;
}
.ficha-valor { font-size: 14px; color: var(--gray-5); }
.ficha-link { color: var(--navy); text-decoration: underline; }
.ficha-link:hover { opacity: 0.75; }

.ficha-acciones {
  padding: 16px 20px;
  display: flex; flex-direction: column; gap: 10px;
}

/* ── Formulario cliente ── */
.form-cliente {
  max-width: 620px;
  background: var(--white);
  border-radius: var(--radius);
  box-shadow: var(--shadow);
  padding: 20px;
  display: flex; flex-direction: column; gap: 0;
}
.form-seccion-titulo {
  font-size: 12px; font-weight: 700; text-transform: uppercase;
  letter-spacing: 0.8px; color: var(--gray-3);
  margin: 18px 0 12px;
  padding-bottom: 6px;
  border-bottom: 1px solid var(--gray-2);
}
.form-seccion-titulo:first-child { margin-top: 0; }
.form-group { margin-bottom: 14px; }
.form-label { display: block; font-size: 13px; font-weight: 600; color: var(--gray-4); margin-bottom: 5px; }
.form-row   { display: flex; gap: 12px; }
.form-row .form-group { flex: 1; }

/* Días de visita */
.form-dias {
  display: flex; gap: 8px; flex-wrap: wrap;
  margin-bottom: 14px;
}
.dia-check {
  display: flex; align-items: center; gap: 5px;
  padding: 6px 12px;
  border: 1.5px solid var(--gray-2);
  border-radius: 20px;
  font-size: 13px; font-weight: 500;
  cursor: pointer;
  transition: all 0.15s;
  user-select: none;
}
.dia-check:has(input:checked) {
  background: var(--navy); color: var(--white);
  border-color: var(--navy);
}
.dia-check input { display: none; }

/* ═══════════════════════════════════════════════════════════════════
   MÓDULO CALENDARIO
═══════════════════════════════════════════════════════════════════ */

/* Shell calendario admin */
.cal-wrap {
  display: flex; gap: 20px; align-items: flex-start;
  max-width: 1100px;
}
.cal-main { flex: 1; min-width: 0; }

/* Controles de navegación de mes */
.cal-nav {
  display: flex; align-items: center; gap: 8px;
  margin-bottom: 14px;
}
.cal-mes-label {
  font-size: 18px; font-weight: 700; color: var(--navy);
  min-width: 200px;
}

/* Cabecera días de la semana */
.cal-grid-header {
  display: grid; grid-template-columns: repeat(7, 1fr);
  gap: 2px; margin-bottom: 4px;
}
.cal-dia-nombre {
  text-align: center; font-size: 12px; font-weight: 700;
  color: var(--gray-3); padding: 4px 0;
}

/* Grilla de celdas */
.cal-grid {
  display: grid; grid-template-columns: repeat(7, 1fr);
  gap: 3px;
}
.cal-celda {
  background: var(--white);
  border: 1.5px solid var(--gray-2);
  border-radius: var(--radius-sm);
  padding: 6px;
  min-height: 68px;
  cursor: pointer;
  transition: border-color 0.15s, box-shadow 0.15s;
  display: flex; flex-direction: column; gap: 3px;
}
.cal-celda:hover { border-color: var(--navy); box-shadow: var(--shadow); }
.cal-celda--vacia { background: var(--gray-1); border-color: transparent; cursor: default; }
.cal-celda--hoy { border-color: var(--navy); background: var(--blue-lt); }
.cal-celda--sel { border-color: var(--navy); background: var(--navy);  }
.cal-celda--sel .cal-dia-num { color: var(--white); }
.cal-celda--sel .cal-ot-count { color: rgba(255,255,255,0.85); }

.cal-dia-num {
  font-size: 13px; font-weight: 700; color: var(--gray-5);
  line-height: 1;
}
.cal-celda--hoy .cal-dia-num { color: var(--navy); }

.cal-dots { display: flex; gap: 3px; flex-wrap: wrap; margin-top: 2px; }
.cal-dot {
  width: 7px; height: 7px; border-radius: 50%;
  display: inline-block; flex-shrink: 0;
}
.cal-extra { font-size: 10px; color: var(--gray-3); align-self: center; }
.cal-ot-count { font-size: 11px; color: var(--gray-3); margin-top: auto; }

/* Panel lateral */
.cal-panel {
  width: 300px; flex-shrink: 0;
  background: var(--white);
  border: 1.5px solid var(--gray-2);
  border-radius: var(--radius);
  padding: 16px;
  position: sticky; top: 80px;
}
.cal-panel-titulo {
  font-size: 15px; font-weight: 700; color: var(--navy);
  margin-bottom: 14px; padding-bottom: 10px;
  border-bottom: 2px solid var(--blue-lt);
  text-transform: capitalize;
}
.cal-panel-lista { display: flex; flex-direction: column; gap: 8px; }
.cal-panel-vacio { font-size: 13px; color: var(--gray-3); text-align: center; padding: 20px 0; }

.cal-ot-item {
  display: flex; align-items: flex-start; gap: 10px;
  padding: 10px;
  border: 1px solid var(--gray-2);
  border-radius: var(--radius-sm);
  cursor: pointer;
  transition: border-color 0.15s, background 0.15s;
}
.cal-ot-item:hover { border-color: var(--navy); background: var(--blue-lt); }
.cal-ot-hora {
  font-size: 12px; font-weight: 700; color: var(--navy);
  min-width: 40px; padding-top: 2px;
}
.cal-ot-info { flex: 1; min-width: 0; }
.cal-ot-cliente {
  font-size: 13px; font-weight: 600; color: var(--gray-5);
  white-space: nowrap; overflow: hidden; text-overflow: ellipsis;
}
.cal-ot-servicio { font-size: 12px; color: var(--gray-3); margin-top: 2px; }
.cal-ot-tec { font-size: 12px; color: var(--gray-4); margin-top: 3px; }

/* ── Vista Técnico — Agenda ─────────────────────────────────────── */
.agenda-wrap { max-width: 640px; }

.agenda-tabs { display: flex; gap: 6px; }
.agenda-tab {
  background: var(--gray-2); color: var(--gray-5);
  border: none;
}
.agenda-tab.activo {
  background: var(--navy); color: var(--white);
}

.agenda-dia-titulo {
  font-size: 13px; font-weight: 700; text-transform: capitalize;
  color: var(--navy);
  padding: 14px 0 8px;
  border-bottom: 2px solid var(--blue-lt);
  margin-bottom: 8px;
}
.agenda-dia-titulo:first-child { padding-top: 0; }

.agenda-ot {
  display: flex; align-items: flex-start; gap: 12px;
  background: var(--white);
  border: 1px solid var(--gray-2);
  border-radius: var(--radius);
  padding: 14px;
  margin-bottom: 8px;
  cursor: pointer;
  transition: border-color 0.15s, box-shadow 0.15s;
}
.agenda-ot:hover { border-color: var(--navy); box-shadow: var(--shadow); }
.agenda-ot-hora {
  font-size: 14px; font-weight: 700; color: var(--navy);
  min-width: 48px; padding-top: 2px;
}
.agenda-ot-body { flex: 1; }
.agenda-ot-cliente { font-size: 15px; font-weight: 600; color: var(--gray-5); margin-bottom: 3px; }
.agenda-ot-dir { font-size: 13px; color: var(--gray-3); }
.agenda-ot-arrow { font-size: 22px; color: var(--gray-3); align-self: center; }

/* ═══════════════════════════════════════════════════════════════════
   CALENDARIO v2
═══════════════════════════════════════════════════════════════════ */
:root {
  --Q:  10px;
  --H:  40px;
  --CARD: 22px;
  --HCOL: 44px;
}

.cal-shell { display:flex; flex-direction:column; height:calc(100vh - var(--header-h)); }

/* ── Toolbar ── */
.cal-tb {
  display:flex; align-items:center; gap:7px;
  background:var(--white); border-bottom:1px solid var(--gray-2);
  padding:6px 14px; flex-shrink:0; flex-wrap:wrap;
}
.cal-titulo { font-size:14px; font-weight:700; color:var(--navy); min-width:200px; }
.cal-sp     { flex:1; }
.cal-vtabs  { display:flex; gap:2px; background:var(--gray-1); border-radius:6px; padding:2px; }
.cal-vtab   { padding:3px 11px; border-radius:4px; font-size:11px; font-weight:600; cursor:pointer; color:var(--gray-4); border:none; background:none; }
.cal-vtab.activo { background:var(--white); color:var(--navy); box-shadow:0 1px 3px rgba(0,0,0,.10); }
.cal-leyenda{ display:flex; align-items:center; gap:8px; }
.cal-li     { display:flex; align-items:center; gap:3px; font-size:10px; color:var(--gray-4); }
.cal-ld     { width:7px; height:7px; border-radius:50%; }

/* ── Área principal ── */
.cal-area { flex:1; overflow:hidden; display:flex; }

/* ── Semanal / Diaria ── */
.sem-wrap  { display:flex; flex-direction:column; flex:1; overflow:hidden; }

/* Cabecera sticky: offset horas + días */
.sem-cab   {
  display:flex; flex-direction:row; flex-shrink:0;
  background:var(--white); border-bottom:2px solid var(--gray-2);
  position:sticky; top:0; z-index:10;
}
.sem-hoff  { width:var(--HCOL); flex-shrink:0; border-right:1px solid var(--gray-2); }
.sem-dias-h{ display:grid; flex:1; min-width:0; }
.dh        { padding:5px 4px; text-align:center; border-left:1px solid var(--gray-2); }
.dhn       { font-size:9px; color:var(--gray-3); font-weight:700; text-transform:uppercase; letter-spacing:.4px; }
.dhnum     { font-size:17px; font-weight:700; color:var(--gray-5); line-height:1; margin-top:1px; }
.dhnum.hoy { background:var(--navy); color:#fff; border-radius:50%; width:26px; height:26px; display:inline-flex; align-items:center; justify-content:center; font-size:13px; }
.dh.fin    { background:#FAFBFC; }

/* Scroll: contiene sem-inner que es el flex row real */
.sem-scroll{ flex:1; overflow-y:auto; overflow-x:hidden; }
.sem-inner { display:flex; flex-direction:row; min-height:100%; }
.sem-hcol  { width:var(--HCOL); flex-shrink:0; border-right:1px solid var(--gray-2); }
.sem-hl    { height:var(--H); display:flex; align-items:flex-start; justify-content:flex-end; padding:2px 5px 0; font-size:9px; color:var(--gray-3); font-weight:600; }
.sem-grid  { flex:1; min-width:0; display:grid; }
.sem-col   { border-left:1px solid var(--gray-2); position:relative; min-height:680px; }
.sem-col.fin { background:repeating-linear-gradient(45deg,transparent,transparent 4px,rgba(0,0,0,.008) 4px,rgba(0,0,0,.008) 8px); }

/* franjas 15min */
.f15   { height:var(--Q); }
.f15.q0{ border-top:1px solid var(--gray-2); }
.f15.q1,.f15.q2,.f15.q3 { border-top:1px solid rgba(0,0,0,.03); }
.f15:hover { background:rgba(27,58,107,.06); cursor:pointer; }
/* Franja horaria completa al hover */
.f15-hover-row { background:rgba(27,58,107,.09) !important; }
.f15-hover-row.q0 { border-top-color:rgba(27,58,107,.25) !important; }
/* Label hora resaltado */
.sem-hl-hover { color:var(--navy) !important; font-weight:800 !important;
  background:rgba(27,58,107,.08); border-radius:3px; padding:1px 4px; }

/* ── OT Card — altura fija ── */
.ot-card {
  position:absolute; left:2px; right:2px;
  height:var(--CARD);
  border-radius:3px;
  padding:0 5px;
  font-size:9.5px; line-height:var(--CARD);
  cursor:grab; border-left:3px solid transparent;
  overflow:hidden; white-space:nowrap;
  display:flex; align-items:center; gap:4px;
  transition:box-shadow .10s; z-index:2;
  user-select:none;
}
.ot-card:hover { box-shadow:0 2px 10px rgba(0,0,0,.22); z-index:30; }
.ot-card.dragging { opacity:.4; cursor:grabbing; z-index:200; }
.ot-card.prog { background:#DAEEFA; border-left-color:#3498DB; }
.ot-card.envi { background:#EDE0FA; border-left-color:#8E44AD; }
.ot-card.conf { background:#D6EFE0; border-left-color:#1E6B3A; }
.ot-card.canc { background:#FAE0DE; border-left-color:#C0392B; opacity:.6; }
.ot-card.repr { background:#FAF0DC; border-left-color:#B85C00; }
.ot-rango { font-size:9px; font-weight:700; opacity:.7; flex-shrink:0; }
.ot-sep   { opacity:.3; flex-shrink:0; }
.ot-cli   { font-weight:700; overflow:hidden; text-overflow:ellipsis; flex:1; min-width:0; }
.ot-servs { font-size:9px; opacity:.6; flex-shrink:0; max-width:70px; overflow:hidden; text-overflow:ellipsis; }

/* ── Mensual ── */
.mes-outer { flex:1; overflow:hidden; display:flex; }
.mes-cal   { flex:1; overflow:auto; padding:10px 12px; }
.mes-gh    { display:grid; grid-template-columns:repeat(7,1fr); gap:3px; margin-bottom:3px; }
.mes-dn    { text-align:center; font-size:9px; font-weight:700; color:var(--gray-3); text-transform:uppercase; padding:2px 0; }
.mes-g     { display:grid; grid-template-columns:repeat(7,1fr); gap:3px; }
.mc {
  background:var(--white); border:1.5px solid var(--gray-2);
  border-radius:6px; padding:4px 5px; cursor:pointer;
  transition:border-color .12s; min-height:70px;
  display:flex; flex-direction:column;
}
.mc:hover { border-color:var(--navy); }
.mc.hoy   { border-color:var(--navy); background:var(--blue-lt); }
.mc.sel   { border-color:var(--navy); background:#EDF2FF; }
.mc.fin   { background:#FAFBFC; }
.mc.vacia { background:transparent; border-color:transparent; cursor:default; }
.mnum     { font-size:11px; font-weight:700; margin-bottom:3px; flex-shrink:0; }
.m-ots    { display:flex; flex-direction:column; gap:1px; overflow:hidden; }
.m-ot-row { display:flex; align-items:center; gap:3px; font-size:8px; color:var(--gray-5); white-space:nowrap; overflow:hidden; line-height:1.4; }
.m-dot    { width:5px; height:5px; border-radius:50%; flex-shrink:0; }
.m-name   { overflow:hidden; text-overflow:ellipsis; font-weight:500; }

/* Panel lateral mes */
.mes-panel { width:268px; background:var(--white); border-left:1px solid var(--gray-2); display:flex; flex-direction:column; transform:translateX(268px); transition:transform .2s; flex-shrink:0; }
.mes-panel.open { transform:none; }
.mph { padding:10px 12px; border-bottom:1px solid var(--gray-2); display:flex; justify-content:space-between; align-items:flex-start; }
.mpt { font-size:13px; font-weight:700; color:var(--navy); text-transform:capitalize; }
.mps { font-size:10px; color:var(--gray-3); margin-top:1px; }
.mpb { flex:1; overflow-y:auto; padding:8px; }
.mp-ot { border:1.5px solid var(--gray-2); border-radius:6px; padding:8px 10px; margin-bottom:5px; cursor:pointer; transition:border-color .12s; }
.mp-ot:hover { border-color:var(--navy); }
.mpf { padding:8px; border-top:1px solid var(--gray-2); }

/* ── Panel detalle OT ── */
.det-overlay { position:fixed; inset:0; display:none; z-index:9995; }
.det-overlay.vis { display:block; }
.det-bg   { position:absolute; inset:0; background:rgba(0,0,0,.28); }
.det-panel{ position:absolute; right:0; top:0; bottom:0; width:352px; background:var(--white); box-shadow:-6px 0 28px rgba(0,0,0,.16); display:flex; flex-direction:column; animation:slideIn .18s ease; }
@keyframes slideIn { from{transform:translateX(100%)} to{transform:none} }
.det-header{ padding:13px 15px; border-bottom:1px solid var(--gray-2); display:flex; align-items:flex-start; justify-content:space-between; }
.det-titulo{ font-size:14px; font-weight:700; color:var(--navy); line-height:1.3; }
.det-sub   { font-size:10px; color:var(--gray-3); margin-top:2px; }
.det-body  { flex:1; overflow-y:auto; padding:12px 14px; display:flex; flex-direction:column; gap:12px; }
.det-footer{ padding:10px 14px; border-top:1px solid var(--gray-2); display:flex; gap:6px; flex-wrap:wrap; align-items:center; }
.det-close { background:none; border:none; font-size:19px; color:var(--gray-3); cursor:pointer; padding:0 2px; line-height:1; }
.det-sec   { border-bottom:1px solid var(--gray-1); padding-bottom:12px; }
.det-sec:last-child { border-bottom:none; }
.det-sec-t { font-size:9px; font-weight:700; text-transform:uppercase; letter-spacing:.6px; color:var(--gray-3); margin-bottom:7px; }
.det-fila  { display:flex; gap:6px; padding:3px 0; font-size:11px; align-items:baseline; flex-wrap:wrap; }
.det-lbl   { color:var(--gray-3); min-width:80px; flex-shrink:0; font-size:10px; }
.det-link  { color:var(--navy); text-decoration:underline; cursor:pointer; font-size:11px; }
.est-btns  { display:flex; gap:4px; flex-wrap:wrap; }
.eb { padding:3px 9px; border-radius:14px; border:1.5px solid var(--gray-2); background:var(--white); font-size:10px; font-weight:600; cursor:pointer; color:var(--gray-5); }
.eb.on { color:#fff; }
.hist-row  { display:flex; align-items:center; gap:6px; padding:4px 0; font-size:11px; cursor:pointer; border-bottom:1px solid var(--gray-1); }
.hist-row:hover { color:var(--navy); }
.hist-fecha{ color:var(--gray-3); min-width:72px; font-size:10px; flex-shrink:0; }
.hist-nota-icon { margin-left:auto; }
.det-nota  { width:100%; min-height:72px; padding:8px 10px; border:1.5px solid var(--gray-2); border-radius:6px; font-size:12px; font-family:inherit; resize:vertical; color:var(--gray-5); }
.det-nota:focus { outline:none; border-color:var(--navy); }

/* ── Badge estado ── */
.badge-est { display:inline-block; padding:1px 6px; border-radius:8px; font-size:9px; font-weight:700; color:#fff; }
.badge-est.prog { background:#3498DB; }
.badge-est.envi { background:#8E44AD; }
.badge-est.conf { background:#1E6B3A; }
.badge-est.canc { background:#C0392B; }
.badge-est.repr { background:#B85C00; }

/* ── Modal nueva OT ── */
.cal-overlay { position:fixed; inset:0; background:rgba(0,0,0,.45); display:none; align-items:center; justify-content:center; z-index:9999; padding:12px; }
.cal-overlay.vis { display:flex; }
.cal-modal { background:var(--white); border-radius:10px; width:490px; max-height:92vh; overflow-y:auto; box-shadow:0 14px 44px rgba(0,0,0,.22); }
.cal-modal-h { padding:13px 17px 11px; border-bottom:1px solid var(--gray-2); display:flex; align-items:center; justify-content:space-between; }
.cal-modal-t { font-size:14px; font-weight:700; color:var(--navy); }
.cal-modal-b { padding:13px 17px; display:flex; flex-direction:column; gap:11px; }
.cal-modal-f { padding:10px 17px; border-top:1px solid var(--gray-2); display:flex; gap:7px; justify-content:flex-end; }

/* helpers form modal */
.fg   { display:flex; flex-direction:column; gap:4px; }
.fl   { font-size:9px; font-weight:700; color:var(--gray-4); text-transform:uppercase; letter-spacing:.4px; }
.fi   { padding:7px 10px; border:1.5px solid var(--gray-2); border-radius:6px; font-size:12px; color:var(--gray-5); width:100%; }
.fi:focus { outline:none; border-color:var(--navy); }
.frow { display:flex; gap:9px; }
.frow .fg { flex:1; }
.chips { display:flex; gap:4px; flex-wrap:wrap; }
.chip { padding:3px 9px; border-radius:14px; border:1.5px solid var(--gray-2); background:var(--white); font-size:11px; font-weight:600; cursor:pointer; color:var(--gray-5); transition:all .10s; }
.chip.sb { background:var(--navy); color:#fff; border-color:var(--navy); }
.chip.sg { background:var(--green); color:#fff; border-color:var(--green); }
.tlist { display:flex; flex-direction:column; gap:4px; }
.ti { display:flex; align-items:center; gap:8px; padding:5px 9px; border:1.5px solid var(--gray-2); border-radius:6px; cursor:pointer; transition:all .10s; }
.ti:hover,.ti.sel { border-color:var(--navy); }
.ti.sel { background:var(--blue-lt); }
.tck { width:15px; height:15px; border-radius:3px; border:2px solid var(--gray-2); display:flex; align-items:center; justify-content:center; font-size:10px; flex-shrink:0; }
.ti.sel .tck { background:var(--navy); border-color:var(--navy); color:#fff; }
.nota { background:var(--blue-lt); border-radius:6px; padding:7px 10px; font-size:11px; color:var(--navy); border-left:3px solid var(--navy); }
.nota-info { font-size:10px; color:var(--gray-3); margin-top:3px; }
.dd { display:none; border:1.5px solid var(--gray-2); border-radius:6px; margin-top:3px; overflow:hidden; box-shadow:0 4px 12px rgba(0,0,0,.10); max-height:150px; overflow-y:auto; }
.dd-op { padding:7px 10px; cursor:pointer; font-size:12px; border-bottom:1px solid var(--gray-1); }
.dd-op:hover { background:var(--blue-lt); }

/* ── Tooltip ── */
.ot-tooltip { position:fixed; background:var(--navy); color:#fff; border-radius:8px; padding:9px 12px; font-size:11px; line-height:1.55; box-shadow:0 6px 20px rgba(0,0,0,.25); z-index:9990; pointer-events:none; width:210px; display:none; }
.ot-tooltip.vis { display:block; animation:ttIn .12s ease; }
@keyframes ttIn { from{opacity:0;transform:translateY(3px)} to{opacity:1;transform:none} }
.tt-titulo { font-weight:700; font-size:12px; margin-bottom:5px; padding-bottom:5px; border-bottom:1px solid rgba(255,255,255,.2); }
.tt-fila   { font-size:10.5px; opacity:.9; margin-top:2px; }
.drag-tt   { position:fixed; background:rgba(27,58,107,.88); color:#fff; padding:3px 9px; border-radius:5px; font-size:10px; font-weight:600; pointer-events:none; z-index:9999; display:none; }
.drag-tt.vis { display:block; }

/* ── Ficha cliente — Tabs ──────────────────────────────────────────── */
.ficha-tabs {
  display: flex;
  gap: 0;
  border-bottom: 2px solid var(--gray-2);
  margin: 0 0 0 0;
  padding: 0 16px;
  background: var(--white);
}
.ficha-tab {
  padding: 10px 16px;
  font-size: 12px;
  font-weight: 600;
  color: var(--gray-3);
  background: none;
  border: none;
  border-bottom: 2px solid transparent;
  margin-bottom: -2px;
  cursor: pointer;
  transition: color .15s, border-color .15s;
}
.ficha-tab:hover  { color: var(--navy); }
.ficha-tab.active { color: var(--navy); border-bottom-color: var(--navy); }
.ficha-tab-panel  { animation: fadeIn .15s ease; }
@keyframes fadeIn { from{opacity:0;transform:translateY(4px)} to{opacity:1;transform:none} }

/* ── Notas cliente ─────────────────────────────────────────────────── */
.nota-item {
  background: var(--blue-lt);
  border-left: 3px solid var(--navy);
  border-radius: 6px;
  padding: 10px 12px;
  margin-bottom: 10px;
}
.nota-texto { font-size: 13px; color: var(--gray-5); line-height: 1.5; white-space: pre-wrap; }
.nota-meta  { font-size: 10px; color: var(--gray-3); margin-top: 4px; }

/* ── OT card semanal compacta ──────────────────────────────────────── */
.ot-card {
  display: flex;
  align-items: center;
  gap: 3px;
  overflow: hidden;
  white-space: nowrap;
}
.ot-sep { font-size: 9px; opacity: .5; flex-shrink: 0; }

/* ── Botón eliminar nota ── */
.btn-nota-del {
  background: none;
  border: none;
  cursor: pointer;
  font-size: 13px;
  opacity: 0.5;
  padding: 0 2px;
  margin-left: 6px;
  vertical-align: middle;
  transition: opacity .15s;
}
.btn-nota-del:hover { opacity: 1; }

/* ── Catálogos ─────────────────────────────────────────────────────── */
.cat-tabs {
  display: flex;
  border-bottom: 2px solid var(--gray-2);
  padding: 0 16px;
  background: var(--white);
}
.cat-tab {
  padding: 10px 18px;
  font-size: 12px;
  font-weight: 600;
  color: var(--gray-3);
  background: none;
  border: none;
  border-bottom: 2px solid transparent;
  margin-bottom: -2px;
  cursor: pointer;
  transition: color .15s, border-color .15s;
}
.cat-tab:hover  { color: var(--navy); }
.cat-tab.active { color: var(--navy); border-bottom-color: var(--navy); }

.cat-card {
  display: flex;
  align-items: center;
  justify-content: space-between;
  padding: 12px 14px;
  background: var(--white);
  border: 1px solid var(--gray-2);
  border-radius: 8px;
  margin-bottom: 8px;
  gap: 10px;
}
.cat-card.inactivo { opacity: .5; }
.cat-card-main { display: flex; align-items: center; gap: 10px; flex: 1; min-width: 0; }
.cat-emoji  { font-size: 22px; flex-shrink: 0; }
.cat-info   { flex: 1; min-width: 0; }
.cat-nombre { font-size: 13px; font-weight: 600; color: var(--gray-5); }
.cat-meta   { display: flex; flex-wrap: wrap; gap: 4px; margin-top: 3px; }

.badge-cat {
  font-size: 10px;
  padding: 1px 6px;
  border-radius: 10px;
  background: var(--blue-lt);
  color: var(--navy);
  font-weight: 600;
}
.badge-cat.inact { background: #fae0de; color: #c0392b; }

.form-cat {
  background: var(--white);
  border: 1px solid var(--gray-2);
  border-radius: 10px;
  padding: 16px;
  max-width: 500px;
}
.form-check {
  display: flex;
  align-items: center;
  gap: 8px;
  font-size: 13px;
  color: var(--gray-5);
  cursor: pointer;
}
.form-check input[type=checkbox] { width: 16px; height: 16px; cursor: pointer; }

/* ── Módulo Importar/Exportar ──────────────────────────────────────── */
.imp-card {
  background: var(--white);
  border: 1px solid var(--gray-2);
  border-radius: 10px;
  padding: 18px;
}
.imp-card-titulo {
  font-size: 14px;
  font-weight: 700;
  color: var(--navy);
  margin-bottom: 8px;
}
.imp-desc {
  font-size: 12px;
  color: var(--gray-3);
  line-height: 1.6;
  margin-bottom: 14px;
}

/* ══════════════════════════════════════════════════════════════════
   MÓDULO TERRENO — Técnico en campo (mobile-first)
   ══════════════════════════════════════════════════════════════════ */
.terreno-shell {
  display: flex;
  flex-direction: column;
  min-height: calc(100vh - 56px);
  background: #F0F2F5;
}
.terreno-header {
  background: var(--navy);
  color: #fff;
  padding: 16px 16px 14px;
}
.terreno-header-titulo { font-size: 18px; font-weight: 700; }
.terreno-header-sub    { font-size: 12px; opacity: .75; margin-top: 2px; }

/* ── Agenda ── */
.terreno-agenda { padding: 12px; display: flex; flex-direction: column; gap: 10px; }
.ot-agenda-card {
  background: #fff;
  border-radius: 12px;
  padding: 14px;
  box-shadow: 0 1px 4px rgba(0,0,0,.08);
  border-left: 4px solid var(--gray-2);
  cursor: pointer;
  transition: box-shadow .15s;
}
.ot-agenda-card:active     { box-shadow: 0 2px 10px rgba(0,0,0,.15); }
.ot-agenda-card.activa     { border-left-color: #e67e22; }
.ot-agenda-fecha  { font-size: 11px; color: var(--gray-3); margin-bottom: 4px; }
.ot-agenda-fecha.hoy       { color: var(--navy); font-weight: 700; }
.ot-agenda-cliente{ font-size: 15px; font-weight: 700; color: var(--gray-5); }
.ot-agenda-dir    { font-size: 12px; color: var(--gray-3); margin-top: 2px; }
.ot-agenda-servs  { font-size: 11px; color: var(--gray-3); margin-top: 4px; }
.ot-agenda-est    { display: inline-block; margin-top: 8px; font-size: 11px; font-weight: 600; padding: 2px 8px; border-radius: 8px; background: var(--blue-lt); color: var(--navy); }
.est-en_proceso   { background: #FEF3E2; color: #b85c00; }
.est-por_validar  { background: #D6EFE0; color: #1e6b3a; }
.est-terminada    { background: #D6EFE0; color: #1e6b3a; }
.terreno-empty    { text-align: center; padding: 48px 24px; color: var(--gray-3); font-size: 14px; }

/* ── Step bar ── */
.step-bar {
  display: flex;
  align-items: center;
  justify-content: center;
  padding: 12px 16px;
  background: #fff;
  border-bottom: 1px solid var(--gray-2);
  gap: 0;
}
.step { display: flex; flex-direction: column; align-items: center; gap: 2px; }
.step-icon  { font-size: 18px; }
.step-label { font-size: 9px; color: var(--gray-3); font-weight: 600; }
.step.act .step-icon  { filter: none; }
.step.act .step-label { color: var(--navy); }
.step.done .step-icon { font-size: 14px; background: var(--navy); color: #fff; border-radius: 50%; width: 22px; height: 22px; display: flex; align-items: center; justify-content: center; }
.step-line { flex: 1; height: 2px; background: var(--gray-2); margin: 0 6px; min-width: 20px; }
.step-line.done { background: var(--navy); }

/* ── Body / scroll ── */
.terreno-body {
  flex: 1;
  display: flex;
  flex-direction: column;
  padding: 16px;
  gap: 16px;
}
.terreno-scroll { overflow-y: auto; -webkit-overflow-scrolling: touch; }

/* ── Check-in ── */
.checkin-card {
  background: var(--navy);
  color: #fff;
  border-radius: 14px;
  padding: 20px;
}
.checkin-cliente { font-size: 20px; font-weight: 700; margin-bottom: 6px; }
.checkin-dir     { font-size: 13px; opacity: .85; margin-bottom: 10px; }
.checkin-servs   { display: flex; flex-wrap: wrap; gap: 6px; }
.chip-serv       { background: rgba(255,255,255,.2); border-radius: 12px; padding: 3px 10px; font-size: 11px; font-weight: 600; }
.checkin-info    { display: flex; flex-direction: column; gap: 6px; }
.info-item       { font-size: 13px; color: var(--gray-4); }
.gps-status      { font-size: 12px; color: var(--gray-3); text-align: center; }
.btn-checkin {
  width: 100%; padding: 18px; border: none; border-radius: 14px;
  background: #1e6b3a; color: #fff; font-size: 18px; font-weight: 800;
  cursor: pointer; letter-spacing: .5px;
  box-shadow: 0 4px 16px rgba(30,107,58,.3);
  transition: transform .1s;
}
.btn-checkin:active   { transform: scale(.97); }
.btn-checkin:disabled { background: var(--gray-2); color: var(--gray-3); box-shadow: none; }
.btn-link { background: none; border: none; color: var(--navy); font-size: 13px; cursor: pointer; padding: 8px 0; }

/* ── Sections ── */
.terreno-section { background: #fff; border-radius: 12px; padding: 14px; }
.terreno-section-title { font-size: 12px; font-weight: 700; color: var(--navy); margin-bottom: 10px; text-transform: uppercase; letter-spacing: .3px; }
.terreno-section-2col  { display: grid; grid-template-columns: 1fr 1fr; gap: 10px; }
.req { color: #c0392b; font-size: 10px; font-weight: 400; margin-left: 4px; }
.terreno-input   { width: 100%; box-sizing: border-box; padding: 10px 12px; border: 1px solid var(--gray-2); border-radius: 8px; font-size: 14px; }
.terreno-textarea{ width: 100%; box-sizing: border-box; padding: 10px 12px; border: 1px solid var(--gray-2); border-radius: 8px; font-size: 14px; resize: vertical; min-height: 72px; }

/* ── Plagas chips ── */
.plagas-chips { display: flex; flex-wrap: wrap; gap: 6px; }
.plaga-chip   { padding: 6px 12px; border-radius: 20px; border: 1.5px solid var(--gray-2); font-size: 12px; cursor: pointer; transition: all .15s; background: #fff; }
.plaga-chip.sel { background: var(--navy); color: #fff; border-color: var(--navy); }

/* ── Grado infestación ── */
.grado-btns { display: grid; grid-template-columns: 1fr 1fr; gap: 8px; }
.grado-btn  { padding: 12px; border: 2px solid var(--gray-2); border-radius: 10px; font-size: 13px; font-weight: 600; background: #fff; cursor: pointer; transition: all .15s; }

/* ── Áreas chips ── */
.areas-chips { display: flex; flex-wrap: wrap; gap: 6px; margin-top: 8px; }
.area-chip   { padding: 4px 10px; border-radius: 12px; background: var(--blue-lt); color: var(--navy); font-size: 11px; font-weight: 600; cursor: pointer; }

/* ── Productos ── */
.prod-row    { display: flex; align-items: center; gap: 8px; padding: 8px 0; border-bottom: 1px solid var(--gray-1); }
.prod-nombre { flex: 1; font-size: 13px; }
.prod-cant   { width: 56px; padding: 4px 6px; border: 1px solid var(--gray-2); border-radius: 6px; text-align: center; font-size: 13px; }
.prod-unidad { font-size: 11px; color: var(--gray-3); min-width: 24px; }
.prod-del    { background: none; border: none; color: #c0392b; font-size: 16px; cursor: pointer; padding: 0 4px; }
.prod-empty  { font-size: 12px; color: var(--gray-3); padding: 8px 0; }
.btn-add-prod{ width: 100%; padding: 10px; border: 1.5px dashed var(--navy); border-radius: 8px; background: none; color: var(--navy); font-size: 13px; font-weight: 600; cursor: pointer; margin-top: 8px; }

/* ── Modal producto ── */
.modal-prod  { position: fixed; inset: 0; background: rgba(0,0,0,.5); display: flex; align-items: flex-end; z-index: 200; }
.modal-prod-inner { background: #fff; border-radius: 16px 16px 0 0; padding: 20px; width: 100%; max-height: 70vh; display: flex; flex-direction: column; gap: 10px; }
.modal-prod-titulo { font-size: 16px; font-weight: 700; color: var(--navy); }
.prod-opciones { overflow-y: auto; flex: 1; }
.prod-opcion { padding: 12px 8px; border-bottom: 1px solid var(--gray-1); cursor: pointer; }
.prod-opcion:active { background: var(--blue-lt); }
.prod-opcion-nombre { font-size: 14px; font-weight: 600; }
.prod-opcion-meta   { font-size: 11px; color: var(--gray-3); }
.btn-ghost-terreno  { width: 100%; padding: 12px; border: 1px solid var(--gray-2); border-radius: 8px; background: none; font-size: 14px; cursor: pointer; margin-top: 6px; }

/* ── Texto seleccionable ── */
.campo-texto-libre { display: flex; flex-direction: column; gap: 6px; }
.btn-add-texto { align-self: flex-start; padding: 5px 12px; background: var(--blue-lt); border: none; border-radius: 8px; color: var(--navy); font-size: 12px; font-weight: 600; cursor: pointer; }
.modal-textos  { position: fixed; inset: 0; background: rgba(0,0,0,.5); display: flex; align-items: flex-end; z-index: 200; }
.modal-textos-inner { background: #fff; border-radius: 16px 16px 0 0; padding: 20px; width: 100%; max-height: 65vh; display: flex; flex-direction: column; gap: 8px; }
.modal-textos-titulo{ font-size: 16px; font-weight: 700; color: var(--navy); margin-bottom: 4px; }
.texto-opcion  { padding: 12px 8px; border-bottom: 1px solid var(--gray-1); font-size: 13px; cursor: pointer; line-height: 1.4; }
.texto-opcion:active{ background: var(--blue-lt); }

/* ── Fotos ── */
.fotos-grid  { display: flex; flex-wrap: wrap; gap: 8px; }
.foto-thumb  { position: relative; width: 80px; height: 80px; border-radius: 8px; overflow: hidden; }
.foto-thumb img   { width: 100%; height: 100%; object-fit: cover; }
.foto-tipo   { position: absolute; bottom: 0; left: 0; right: 0; background: rgba(0,0,0,.6); color: #fff; font-size: 8px; padding: 2px 4px; text-align: center; }
.foto-del    { position: absolute; top: 2px; right: 2px; background: rgba(192,57,43,.9); color: #fff; border: none; border-radius: 50%; width: 18px; height: 18px; font-size: 10px; cursor: pointer; display: flex; align-items: center; justify-content: center; }
.foto-add    { display: flex; flex-direction: column; align-items: center; justify-content: center; width: 80px; height: 80px; border: 2px dashed var(--gray-2); border-radius: 8px; cursor: pointer; font-size: 24px; gap: 2px; }
.btn-terreno-ok { width: 100%; padding: 10px; background: var(--navy); color: #fff; border: none; border-radius: 8px; font-size: 14px; font-weight: 600; cursor: pointer; }

/* ── Cierre ── */
.cierre-resumen { background: var(--navy); color: #fff; border-radius: 12px; padding: 16px; }
.cierre-cliente { font-size: 16px; font-weight: 700; margin-bottom: 8px; }
.cierre-chips   { display: flex; flex-wrap: wrap; gap: 5px; }
.chip-plaga     { background: rgba(255,255,255,.2); border-radius: 10px; padding: 2px 8px; font-size: 11px; }
.firma-wrap     { background: #F9FAFB; border: 1px solid var(--gray-2); border-radius: 10px; padding: 8px; }
.firma-canvas   { width: 100%; max-width: 340px; height: 160px; border-radius: 6px; background: #fff; display: block; cursor: crosshair; touch-action: none; }
.btn-limpiar-firma { background: none; border: 1px solid var(--gray-2); border-radius: 6px; padding: 4px 12px; font-size: 12px; cursor: pointer; margin-top: 6px; }

/* ── Navegación ── */
.terreno-nav { display: flex; justify-content: space-between; align-items: center; gap: 10px; margin-top: 8px; }
.btn-terreno-back { padding: 12px 20px; border: 1.5px solid var(--gray-2); border-radius: 10px; background: #fff; font-size: 14px; cursor: pointer; }
.btn-terreno-next { flex: 1; padding: 14px; background: var(--navy); color: #fff; border: none; border-radius: 10px; font-size: 15px; font-weight: 700; cursor: pointer; }
.btn-enviar        { background: #1e6b3a; font-size: 16px; letter-spacing: .3px; }
.btn-enviar:disabled{ background: var(--gray-2); color: var(--gray-3); }

/* ── Confirmación ── */
.conf-titulo { font-size: 22px; font-weight: 800; color: var(--navy); margin-bottom: 8px; }
.conf-sub    { font-size: 14px; color: var(--gray-3); line-height: 1.5; }
.conf-cliente{ font-size: 16px; font-weight: 600; color: var(--gray-5); }

/* ── Módulo Usuarios ───────────────────────────────────────────────── */
.usr-tabla { width:100%; border-collapse:collapse; font-size:13px; }
.usr-tabla th { background:var(--navy); color:#fff; padding:8px 10px; text-align:left; font-size:11px; font-weight:600; }
.usr-tabla td { padding:10px; border-bottom:1px solid var(--gray-2); }
.usr-tabla tr:hover td { background:var(--blue-lt); }
.usr-inactivo td { opacity:.5; }
.badge-rol { padding:2px 8px; border-radius:10px; font-size:11px; font-weight:700; }
.badge-admin   { background:#EDE0FA; color:#6B21A8; }
.badge-tecnico { background:#DAEEFA; color:#1B3A6B; }
.badge-est-usr { padding:2px 8px; border-radius:10px; font-size:11px; background:#fae0de; color:#c0392b; }
.badge-est-usr.activo { background:#D6EFE0; color:#1e6b3a; }

/* ══════════════════════════════════════════════════════════════════
   MÓDULO ÓRDENES (3+6)
   ══════════════════════════════════════════════════════════════════ */
.ot-filtros { display:flex; flex-wrap:wrap; gap:6px; padding:12px 16px; border-bottom:1px solid var(--gray-2); }
.ot-filtro-btn { padding:5px 12px; border:1.5px solid var(--gray-2); border-radius:20px; background:#fff;
  font-size:12px; font-weight:600; cursor:pointer; transition:all .15s; }
.ot-filtro-btn.activo { border-color:var(--navy); }
.ot-filtro-count { font-weight:400; opacity:.7; }

.ot-card-admin { display:flex; align-items:center; gap:12px; background:#fff; border-radius:10px;
  margin-bottom:8px; padding:14px 14px 14px 18px; border-left:4px solid var(--gray-2);
  cursor:pointer; box-shadow:0 1px 3px rgba(0,0,0,.06); transition:box-shadow .15s; }
.ot-card-admin:hover { box-shadow:0 2px 8px rgba(0,0,0,.12); }
.ot-card-admin-left { flex:1; }
.ot-card-admin-cliente { font-size:14px; font-weight:700; color:var(--gray-5); }
.ot-card-admin-meta { font-size:11px; color:var(--gray-3); margin-top:3px; }
.ot-card-admin-plagas { font-size:11px; color:#9b59b6; margin-top:3px; }
.ot-card-admin-right { display:flex; flex-direction:column; align-items:flex-end; gap:6px; }
.est-badge { font-size:11px; font-weight:700; padding:3px 10px; border-radius:10px; }
.est-badge-header { font-size:11px; font-weight:700; padding:3px 10px; border-radius:10px;
  background:var(--blue-lt); color:var(--navy); }
.btn-success { background:#1e6b3a; color:#fff; border:none; }
.btn-success:hover { background:#165830; }
.btn-danger  { color:#c0392b; border-color:#c0392b; }
.btn-secondary { background:var(--gray-2); color:var(--gray-5); border:none; }

/* Detalle OT */
.ot-detalle-scroll { overflow-y:auto; padding:16px; display:flex; flex-direction:column; gap:16px;
  max-height:calc(100vh - 110px); }
.ot-seccion { background:#fff; border-radius:10px; padding:16px; }
.ot-seccion-titulo { font-size:12px; font-weight:700; color:var(--navy); text-transform:uppercase;
  letter-spacing:.3px; margin-bottom:12px; }
.form-grid-2 { display:grid; grid-template-columns:1fr 1fr; gap:10px; }
@media (max-width:600px) { .form-grid-2 { grid-template-columns:1fr; } }

.plagas-check-grid { display:flex; flex-wrap:wrap; gap:6px; }
.form-check { display:flex; align-items:center; gap:6px; font-size:13px; cursor:pointer; }
.form-check input { cursor:pointer; }

.prod-tabla-det { width:100%; border-collapse:collapse; font-size:13px; }
.prod-tabla-det th { font-size:11px; font-weight:700; color:var(--gray-3); padding:4px 6px;
  text-align:left; border-bottom:1px solid var(--gray-2); }
.prod-tabla-det td { padding:4px 4px; border-bottom:1px solid var(--gray-1); }
.prod-tabla-det .form-input { padding:5px 8px; font-size:12px; }

.fotos-grid-admin { display:flex; flex-wrap:wrap; gap:10px; }
.foto-admin-thumb { position:relative; width:120px; height:100px; border-radius:8px; overflow:hidden;
  border:1px solid var(--gray-2); }
.foto-admin-thumb img { width:100%; height:100%; object-fit:cover; }
.foto-sin-url { width:100%; height:100%; display:flex; align-items:center; justify-content:center;
  background:var(--gray-1); color:var(--gray-3); font-size:11px; text-align:center; padding:4px; }
.foto-tipo-badge { position:absolute; bottom:0; left:0; right:0; background:rgba(0,0,0,.6);
  color:#fff; font-size:9px; padding:2px 4px; text-align:center; }

.gps-grid { display:flex; flex-direction:column; gap:8px; }
.gps-lbl  { font-size:11px; font-weight:700; color:var(--gray-3); display:block; }
.gps-link { font-size:12px; color:var(--navy); text-decoration:none; }
.gps-hora { font-size:11px; color:var(--gray-3); margin-left:8px; }

.ot-acciones { display:flex; flex-wrap:wrap; gap:8px; padding:8px 0 24px; }

/* ══════════════════════════════════════════════════════════════════
   MÓDULO INFORMES (7)
   ══════════════════════════════════════════════════════════════════ */
.inf-card { background:#fff; border-radius:10px; padding:16px; }
.inf-card-titulo { font-size:12px; font-weight:700; color:var(--navy); text-transform:uppercase; letter-spacing:.3px; margin-bottom:12px; }
.inf-desc { font-size:13px; color:var(--gray-3); line-height:1.6; }
.inf-progress { background:var(--gray-2); border-radius:4px; height:4px; overflow:hidden; }
.inf-progress-bar { height:100%; background:var(--navy); border-radius:4px; width:0; transition:width 1s; }
.inf-resumen-tabla { width:100%; border-collapse:collapse; font-size:13px; }
.inf-resumen-tabla td { padding:6px 8px; border-bottom:1px solid var(--gray-1); }
.inf-resumen-tabla td:first-child { font-weight:600; color:var(--navy); width:140px; }

/* ── Historial OTs en ficha cliente ─────────────────────────────── */
.ot-hist-row { display:flex; align-items:center; justify-content:space-between;
  padding:10px 12px; border-left:3px solid var(--gray-2);
  border-bottom:1px solid var(--gray-1); background:#fff; gap:8px; }
.ot-hist-row:last-child { border-bottom:none; }
.ot-hist-main { flex:1; }
.ot-hist-fecha { font-size:12px; font-weight:700; color:var(--navy); }
.ot-hist-servs { font-size:12px; color:var(--gray-3); margin-top:1px; }
.ot-hist-folio { font-size:11px; color:var(--gray-3); }

/* ── Programas de servicio ──────────────────────────────────────── */
.prog-row { display:flex; align-items:center; justify-content:space-between;
  padding:8px 12px; background:#fff; border:1px solid var(--gray-2);
  border-radius:8px; margin-bottom:6px; }
.prog-servs { font-size:13px; font-weight:600; color:var(--navy); }
.prog-freq  { font-size:11px; color:var(--gray-3); margin-top:2px; }
.prog-form  { background:var(--blue-lt); border-radius:8px; padding:12px; }
.prog-form-titulo { font-size:12px; font-weight:700; color:var(--navy); margin-bottom:10px; }

/* ── Catálogos — textos predefinidos ────────────────────────────── */
.texto-cat-row { display:flex; align-items:flex-start; justify-content:space-between;
  gap:10px; padding:8px 10px; background:#fff; border-radius:7px;
  border:1px solid var(--gray-2); margin-bottom:5px; }
.texto-cat-txt { font-size:13px; color:var(--gray-5); flex:1; line-height:1.4; }

/* ── Paginación clientes ─────────────────────────────────────────── */
.cli-mas-btn { padding:16px 0; text-align:center; }

/* ── Módulo correo — variables ──────────────────────────────────── */
.correo-vars-info { background:var(--blue-lt); border-radius:8px; padding:10px 12px;
  font-size:12px; display:flex; flex-wrap:wrap; gap:6px; align-items:center; }
.correo-vars-titulo { font-weight:700; color:var(--navy); flex-basis:100%; margin-bottom:2px; }
.correo-var-chip { background:#fff; border:1px solid var(--navy); color:var(--navy);
  border-radius:4px; padding:2px 7px; font-size:11px; cursor:pointer; font-family:monospace;
  transition:background .12s; }
.correo-var-chip:hover { background:var(--navy); color:#fff; }

/* ── Dropdown cliente agenda — resultado activo ─────────────────── */
.dd-op-activo { background: var(--blue-lt) !important; font-weight: 600; color: var(--navy); }

/* ── Textos predefinidos catálogo ───────────────────────────────── */
.texto-cat-row { display:flex; align-items:flex-start; justify-content:space-between;
  gap:10px; padding:8px 10px; background:#fff; border-radius:7px;
  border:1px solid var(--gray-2); margin-bottom:6px; }
.texto-cat-content { flex:1; min-width:0; }
.texto-cat-display { font-size:13px; color:var(--gray-5); line-height:1.5; }
.texto-cat-edit { width:100%; margin-top:4px; }
.texto-cat-actions { display:flex; gap:4px; flex-shrink:0; flex-wrap:wrap; justify-content:flex-end; }

/* ── OT Propuesta — visual diferenciado ────────────────────────────── */
.ot-card.ot-propuesta {
  background: repeating-linear-gradient(
    45deg,
    #f5f7fa,
    #f5f7fa 4px,
    #e8eef5 4px,
    #e8eef5 8px
  ) !important;
  border: 1.5px dashed #7a9cc4 !important;
  color: #1B3A6B;
  opacity: 0.85;
}
.ot-prop-tag {
  display: inline-block;
  font-size: 9px;
  font-weight: 700;
  text-transform: uppercase;
  letter-spacing: .5px;
  color: #1B3A6B;
  background: #dce8f5;
  border-radius: 3px;
  padding: 1px 4px;
  margin-right: 3px;
}

/* ── Cabecera día semanal — navegable ───────────────────────────── */
.dh-nav { cursor: pointer; transition: background .12s; border-radius: 6px; }
.dh-nav:hover { background: rgba(27,58,107,.07); }
.dh-nav:hover .dhnum { color: var(--navy); font-weight: 700; }

/* ── Módulo Rutas ────────────────────────────────────────────────── */
.ruta-shell { display:flex; flex-direction:column; height:100%; gap:0; }
.ruta-tb { display:flex; justify-content:space-between; align-items:center;
  flex-wrap:wrap; gap:8px; padding:16px; border-bottom:1px solid var(--gray-2); }
.ruta-body { display:flex; flex:1; gap:0; min-height:0; overflow:hidden; }

.ruta-panel { width:320px; flex-shrink:0; padding:16px;
  overflow-y:auto; border-right:1px solid var(--gray-2);
  display:flex; flex-direction:column; gap:0; }

.ruta-mapa-wrap { flex:1; display:flex; flex-direction:column; padding:12px; min-width:0; overflow:hidden; }
#ruta-mapa { flex:1; border-radius:10px; border:1px solid var(--gray-2); min-height:0; height:100%; }

.ruta-lista-paradas { display:flex; flex-direction:column; gap:6px; margin-bottom:8px; }

.ruta-parada { display:flex; align-items:center; gap:8px; padding:8px 10px;
  background:var(--color-background-secondary); border-radius:8px;
  border:1px solid var(--gray-2); }
.ruta-parada.sin-coords { border-color:#f39c12; background:#fffbf0; }
.ruta-parada.es-almuerzo { border-color:#e67e22; background:#fff6f0; }
.ruta-parada-num { width:24px; height:24px; border-radius:50%; background:var(--navy);
  color:#fff; font-size:11px; font-weight:700; display:flex; align-items:center;
  justify-content:center; flex-shrink:0; }
.ruta-parada-info { flex:1; min-width:0; }
.ruta-parada-nombre { font-size:13px; font-weight:600; color:var(--color-text-primary);
  white-space:nowrap; overflow:hidden; text-overflow:ellipsis; }
.ruta-parada-dir { font-size:11px; color:var(--gray-3);
  white-space:nowrap; overflow:hidden; text-overflow:ellipsis; }
.ruta-parada-hora { font-size:11px; color:var(--navy); margin-top:2px; }

.btn-ruta-up, .btn-ruta-dn, .btn-ruta-geo { background:none; border:1px solid var(--gray-2);
  border-radius:4px; width:22px; height:22px; font-size:10px; cursor:pointer;
  display:flex; align-items:center; justify-content:center; color:var(--gray-4);
  transition:background .12s; }
.btn-ruta-up:hover, .btn-ruta-dn:hover { background:var(--gray-1); }
.btn-ruta-up:disabled, .btn-ruta-dn:disabled { opacity:.3; cursor:default; }

@media (max-width:640px) {
  .ruta-body { flex-direction:column; }
  .ruta-panel { width:100%; border-right:none; border-bottom:1px solid var(--gray-2); }
  #ruta-mapa { min-height:300px; }
}

/* ── Geocodificación masiva ──────────────────────────────────────── */
.geo-stat { background:var(--color-background-secondary); border-radius:8px;
  padding:10px 16px; text-align:center; flex:1; min-width:80px; }
.geo-stat-n { font-size:24px; font-weight:800; }
.geo-stat-l { font-size:11px; color:var(--gray-3); margin-top:2px; }
.geo-problema-row { display:flex; align-items:center; gap:8px; padding:8px 10px;
  background:var(--color-background-secondary); border-radius:7px;
  border:1px solid var(--gray-2); }

/* ── Panel geocodificación masiva ───────────────────────────────── */
.geo-stat-card { border-radius:8px; padding:12px 16px; min-width:120px; text-align:center; }
.geo-stat-num  { font-size:28px; font-weight:800; line-height:1; }
.geo-stat-lbl  { font-size:11px; color:var(--gray-3); margin-top:4px; }
.geo-cli-row:hover { background:var(--blue-lt) !important; }

/* ── Planificador mensual ────────────────────────────────────────── */
#app-contenido:has(.plan-shell) {
  padding:0; height:calc(100vh - var(--header-h)); overflow:hidden;
  display:flex; flex-direction:column;
}
.plan-shell { display:flex; flex-direction:column; height:100%; }
.plan-tb { display:flex; justify-content:space-between; align-items:center;
  flex-wrap:wrap; gap:8px; padding:10px 16px;
  border-bottom:1px solid var(--gray-2); flex-shrink:0; }
.plan-body { display:flex; flex-direction:column; flex:1; min-height:0; }

/* Chip selección */
#plan-sel-chip { display:none; background:#1B3A6B; color:#fff;
  padding:6px 14px; font-size:12px; align-items:center; gap:10px;
  border-bottom:2px solid #2E86AB; flex-shrink:0; }

/* Mapa — 55% del cuerpo */
.plan-mapa-wrap { position:relative; flex:0 0 55%; min-height:0; }
#plan-mapa { width:100%; height:100%; }
.plan-leyenda { position:absolute; bottom:8px; left:8px; background:rgba(255,255,255,.9);
  border-radius:6px; padding:6px 10px; display:flex; gap:10px; font-size:11px;
  box-shadow:0 1px 4px rgba(0,0,0,.15); z-index:1000; flex-wrap:wrap; }
.plan-ley-item { display:flex; align-items:center; gap:4px; }
.plan-ley-dot  { width:10px; height:10px; border-radius:50%; flex-shrink:0; }

/* Calendario — 45% restante */
.plan-cal-wrap { flex:1; min-height:0; overflow-y:auto; padding:8px 12px;
  border-top:1px solid var(--gray-2); }
.plan-cal-header { display:grid; grid-template-columns:repeat(7,1fr);
  gap:2px; margin-bottom:3px; }
.plan-cal-dh { text-align:center; font-size:10px; font-weight:700;
  color:var(--gray-3); padding:2px; }
.plan-cal-grid { display:grid; grid-template-columns:repeat(7,1fr); gap:2px; }
.plan-cal-cel { min-height:64px; border-radius:5px; padding:3px;
  border:1px solid var(--gray-2); cursor:default; transition:background .1s;
  font-size:11px; }
.plan-cal-cel.clickable { cursor:pointer; }
.plan-cal-cel.clickable:hover { border-color:var(--navy) !important;
  box-shadow:0 0 0 2px rgba(27,58,107,.2); }
.plan-cal-cel.fin { background:#fafafa !important; }
.plan-cal-cel.hoy { border-color:var(--navy) !important; }
.plan-cal-cel.vacio { border:none; }
.plan-cal-dnum { font-size:11px; font-weight:700; color:var(--gray-4);
  margin-bottom:2px; line-height:1; }
.plan-cal-dnum.hoy { color:var(--navy); }
.plan-cal-chips { display:flex; flex-direction:column; gap:1px; }
.plan-chip { font-size:9px; border-radius:3px; padding:1px 4px;
  white-space:nowrap; overflow:hidden; text-overflow:ellipsis;
  color:#fff; font-weight:600; }
.plan-chip.est-planificada  { background:#1B3A6B; }
.plan-chip.est-propuesta    { background:#f39c12; }
.plan-chip.est-confirmada,
.plan-chip.est-terminada    { background:#1e6b3a; }
.plan-chip.est-en_proceso   { background:#2E86AB; }
.plan-chip-mas { font-size:9px; color:var(--gray-3); }

/* Botones semana */
.plan-sem-btn { background:var(--gray-1); border:1px solid var(--gray-2);
  border-radius:4px; padding:3px 8px; font-size:11px; cursor:pointer;
  transition:all .12s; }
.plan-sem-btn.activo { background:var(--navy); color:#fff; border-color:var(--navy); }
.plan-sem-btn:hover:not(.activo) { background:var(--blue-lt); }

/* ── Planificador mensual ─────────────────────────────────────────── */
#app-contenido:has(.plan-shell) {
  padding: 0; height: calc(100vh - var(--header-h));
  overflow: hidden; display: flex; flex-direction: column;
}
.plan-shell { display:flex; flex-direction:column; height:100%; overflow:hidden; position:relative; }
.plan-tb { display:flex; justify-content:space-between; align-items:center;
  flex-wrap:wrap; gap:8px; padding:10px 16px; border-bottom:1px solid var(--gray-2);
  flex-shrink:0; background:var(--color-background-primary); z-index:10; }

.plan-body { display:flex; flex-direction:column; flex:1; min-height:0; overflow:hidden; }
.plan-mapa-wrap { flex:0 0 55%; min-height:200px; max-height:55%; position:relative; overflow:hidden; }
.plan-mapa-wrap #plan-mapa { height:100% !important; width:100% !important; min-height:200px; }
.plan-cal-wrap  { flex:1; min-height:120px; overflow-y:auto; padding:8px 12px;
  border-top:2px solid var(--gray-2); background:var(--color-background-primary); }

/* Leyenda mapa */
.plan-leyenda { position:absolute; bottom:12px; left:12px; background:rgba(255,255,255,.92);
  border-radius:8px; padding:6px 10px; display:flex; gap:12px; z-index:500;
  box-shadow:0 2px 8px rgba(0,0,0,.15); font-size:11px; }
.plan-ley-item { display:flex; align-items:center; gap:4px; }
.plan-ley-item::before { content:'●'; color:var(--c); font-size:14px; }

/* Pins mapa */
.plan-pin { width:28px; height:28px; border-radius:50% 50% 50% 0; transform:rotate(-45deg);
  background:var(--c); border:2px solid #fff; box-shadow:0 2px 6px rgba(0,0,0,.3);
  display:flex; align-items:center; justify-content:center; cursor:pointer;
  transition:transform .15s; }
.plan-pin:hover { transform:rotate(-45deg) scale(1.2); }
.plan-pin-sel { width:36px; height:36px; box-shadow:0 0 0 3px #f0a500, 0 2px 8px rgba(0,0,0,.4); }
.plan-pin-ico { transform:rotate(45deg); color:#fff; font-size:12px; font-weight:700; }

/* Calendario compacto */
.plan-cal-grid { display:grid; grid-template-columns:repeat(7,1fr); gap:2px; margin-bottom:8px; }
.plan-cal-hdr  { text-align:center; font-size:10px; font-weight:700; color:var(--gray-3);
  padding:3px 0; text-transform:uppercase; }
.plan-cal-cel  { min-height:56px; border-radius:6px; padding:3px 4px; cursor:pointer;
  border:1px solid transparent; transition:border-color .12s; position:relative; }
.plan-cal-cel:hover { border-color:var(--navy) !important; }
.plan-cal-vacio { background:transparent !important; cursor:default; }
.plan-cal-hoy .plan-cal-dnum { background:var(--navy); color:#fff; border-radius:50%;
  width:20px; height:20px; display:flex; align-items:center; justify-content:center; }
.plan-cal-fin  { opacity:.7; }
.plan-cal-dim  { opacity:.25; }
.plan-cal-dnum { font-size:11px; font-weight:600; color:var(--gray-4); margin-bottom:2px; }
.plan-cal-chip { font-size:9px; border-radius:3px; padding:1px 4px; margin-bottom:1px;
  background:var(--chip-c); color:#fff; white-space:nowrap; overflow:hidden;
  text-overflow:ellipsis; cursor:pointer; }
.plan-cal-chip:hover { opacity:.8; }
.plan-cal-mas  { font-size:9px; color:var(--gray-3); }

/* Leyenda semanas */
.plan-sem-leyenda { display:flex; gap:6px; flex-wrap:wrap; padding:4px 0; }
.plan-sem-leg { font-size:11px; border-radius:4px; padding:2px 8px; cursor:pointer; }

/* Botones filtro semana */
.plan-sem-btns { display:flex; gap:2px; }
.plan-sem-btn  { font-size:11px; padding:3px 8px; border-radius:4px; border:1px solid var(--gray-2);
  background:var(--color-background-secondary); cursor:pointer; transition:all .12s; }
.plan-sem-btn.active { background:var(--navy); color:#fff; border-color:var(--navy); }

/* Dropdown comunas */
.plan-comuna-dd { position:absolute; top:100%; left:0; width:200px; background:#fff;
  border:1px solid var(--gray-2); border-radius:8px; box-shadow:0 4px 16px rgba(0,0,0,.12);
  z-index:1000; overflow:hidden; }
.plan-comuna-opt { padding:7px 12px; font-size:13px; cursor:pointer; }
.plan-comuna-opt:hover,.plan-comuna-opt-first { background:var(--blue-lt); }

/* Panel lateral */
.plan-panel { position:absolute; top:0; right:0; width:280px; height:100%;
  background:var(--color-background-primary); border-left:1px solid var(--gray-2);
  padding:16px; overflow-y:auto; z-index:600; box-shadow:-4px 0 16px rgba(0,0,0,.08); }
.plan-panel-ot { display:flex; justify-content:space-between; font-size:12px;
  padding:4px 8px; border-radius:4px; margin-bottom:3px; border-left:3px solid var(--c);
  background:var(--color-background-secondary); }

/* Chip selección */
#plan-sel-chip { flex-shrink:0; }

/* ─── CRM ────────────────────────────────────────────────────── */
.kpi-card {
  background:#fff;border-radius:10px;padding:14px 16px;
  box-shadow:0 1px 4px #0001;border-top:3px solid #1B3A6B;text-align:center;
}
.kpi-val { font-size:22px;font-weight:800;color:#1B3A6B; }
.kpi-lbl { font-size:11px;color:#64748b;margin-top:2px; }

.tabla-crm {
  width:100%;border-collapse:collapse;font-size:12px;background:#fff;
  border-radius:10px;overflow:hidden;box-shadow:0 1px 4px #0001;
}
.tabla-crm th {
  background:#1B3A6B;color:#fff;font-weight:700;padding:8px 10px;text-align:left;
  white-space:nowrap;
}
.tabla-crm td {
  padding:8px 10px;border-bottom:1px solid #f1f5f9;vertical-align:middle;
}
.tabla-crm tr:hover td { background:#f8fafc; }
.tabla-crm tr:last-child td { border-bottom:none; }

.pip-col { transition:background .15s; }
.pip-col.drag-over { background:#dbeafe; }

.crm-tab { transition:all .15s; }
.crm-tab:hover { color:#1B3A6B!important; }
