/* Estilos propios de la consola única (6 oct 2026). La base es estilos.css, copiada de la Consola
   Municipal, con los tokens comunes de tokens-comunes.css. */

.texto-paso {
  margin: 0 0 0.75rem;
  color: var(--ink-dim);
  font-size: 0.95rem;
}

.lista-perfiles {
  display: flex;
  flex-direction: column;
  gap: 0.5rem;
  margin-bottom: 0.75rem;
}

.boton-perfil {
  width: 100%;
  justify-content: flex-start;
  text-align: left;
  white-space: normal;
}

/* Elección del perfil al entrar (8 oct 2026): una opción por perfil, todas a la vista. */
.lista-perfiles-acceso {
  border: 0;
  margin: 0;
  padding: 0;
  min-width: 0;
}

.clicable {
  cursor: pointer;
}

.clicable:hover {
  background: var(--surface-soft, rgba(255, 255, 255, 0.04));
}

.clicable:focus-visible {
  outline: 2px solid var(--primary);
  outline-offset: -2px;
}

.cuenta-financiadores-editor {
  display: flex;
  flex-direction: column;
  gap: 0.65rem;
}

.cuenta-financiadores-seleccionados {
  display: flex;
  flex-wrap: wrap;
  align-items: center;
  gap: 0.5rem;
  min-height: 2.6rem;
  padding: 0.55rem;
  border: 1px solid var(--line);
  border-radius: var(--radius-sm);
  background: var(--surface-alt);
}

.cuenta-financiador-seleccionado {
  display: inline-flex;
  align-items: center;
  gap: 0.5rem;
  max-width: 100%;
  padding: 0.35rem 0.45rem 0.35rem 0.7rem;
  border: 1px solid var(--line);
  border-radius: 999px;
  background: var(--surface);
  color: var(--ink);
  font-size: 0.82rem;
  font-weight: 600;
}

.cuenta-financiador-seleccionado > span {
  overflow: hidden;
  text-overflow: ellipsis;
  white-space: nowrap;
}

.cuenta-financiador-seleccionado button {
  padding: 0.18rem 0.45rem;
  border: 1px solid var(--crit);
  border-radius: 999px;
  background: transparent;
  color: var(--crit);
  cursor: pointer;
  font-size: 0.72rem;
  font-weight: 700;
}

.cuenta-financiador-seleccionado button:hover,
.cuenta-financiador-seleccionado button:focus-visible {
  background: var(--crit-soft);
}

.cuenta-financiadores-anadir {
  display: grid;
  grid-template-columns: minmax(0, 1fr) auto;
  align-items: end;
  gap: 0.65rem;
}

.cuenta-editar {
  padding: 0;
  border: 0;
  background: transparent;
  color: var(--primary);
  font: inherit;
  font-weight: 700;
  text-align: left;
  cursor: pointer;
}

.cuenta-editar:hover,
.cuenta-editar:focus-visible {
  text-decoration: underline;
}

.lista-perfiles-acceso legend {
  padding: 0;
}

#opciones-perfil {
  display: flex;
  flex-direction: column;
  gap: 0.5rem;
}

.opcion-perfil-acceso {
  display: flex;
  align-items: center;
  gap: 0.75rem;
  padding: 0.75rem 1rem;
  border: 1px solid var(--line);
  border-radius: 10px;
  cursor: pointer;
  color: var(--ink);
}

.opcion-perfil-acceso:hover {
  border-color: var(--primary);
}

.opcion-perfil-acceso:has(input:checked) {
  border-color: var(--primary);
  box-shadow: 0 0 0 1px var(--primary);
}

.opcion-perfil-acceso input {
  margin: 0;
  flex: none;
}

/* Acceso olvidado (7 oct 2026): enlaces discretos bajo los botones de la entrada. */
.enlaces-acceso {
  display: flex;
  flex-direction: column;
  align-items: flex-start;
  gap: 0.25rem;
  margin-top: 1rem;
}

.boton-enlace {
  background: none;
  border: 0;
  padding: 0.25rem 0;
  color: var(--primary);
  font: inherit;
  font-size: 0.9rem;
  text-decoration: underline;
  text-underline-offset: 2px;
  cursor: pointer;
}

.boton-enlace:hover,
.boton-enlace:focus-visible {
  color: var(--ink);
}

#paso-olvido > .boton,
#paso-perdida > .boton,
#paso-enviado > .boton,
#formulario-restablecer > .boton {
  margin-top: 1rem;
}

/* Botones de la entrada separados del campo de arriba (pedido de Santi, 7 oct 2026). */
#paso-credenciales > .boton,
#paso-codigo > .boton,
#paso-perfil > .boton {
  margin-top: 1rem;
}

.aviso-atascadas {
  margin: 0 0 1rem;
  padding: 0.75rem 1rem;
  border-radius: 10px;
  border: 1px solid var(--warn);
  background: color-mix(in srgb, var(--warn) 12%, var(--surface));
  color: var(--ink);
  font-size: 0.92rem;
}

tbody tr.fila-atascada td:first-child {
  box-shadow: inset 4px 0 0 var(--warn);
}

.nota-mapa {
  margin: 0 0 0.5rem;
  font-size: 0.82rem;
  color: var(--ink-dim);
}

.nota-solo-lectura {
  padding: 0 1.25rem 1.25rem;
  font-size: 0.86rem;
  color: var(--ink-dim);
}

#app-shell .barra .estado-conexion a.boton {
  text-decoration: none;
}

/* Alcance (OTEA o el contrato) y perfil, uno debajo de otro. */
#app-shell .barra .marca > span:last-child {
  display: flex;
  flex-direction: column;
  line-height: 1.2;
}

@media (max-width: 640px) {
  #app-shell .barra .estado-conexion {
    flex-wrap: wrap;
    gap: 0.4rem;
  }
  #o-kpis {
    grid-template-columns: repeat(2, minmax(0, 1fr));
  }
}

/* Consola unificada (F2, 7 oct 2026): selector de espacio y panel "Mis perfiles". */
.selector-espacio {
  display: inline-flex;
  align-items: center;
  gap: 0.4rem;
  font-size: 0.85rem;
  color: var(--ink-dim);
}

.selector-espacio select {
  max-width: 22rem;
  font-size: 0.9rem;
}

.nota-perfiles {
  margin: 0 0 0.6rem;
  font-size: 0.86rem;
  color: var(--ink-dim);
}

.fila-perfil {
  display: flex;
  align-items: center;
  justify-content: space-between;
  gap: 0.75rem;
  padding: 0.55rem 0;
  border-bottom: 1px solid var(--line-soft);
}

.formulario-vincular {
  display: flex;
  flex-direction: column;
  gap: 0.5rem;
  padding: 0.75rem;
  margin-bottom: 0.75rem;
  border: 1px solid var(--line);
  border-radius: 10px;
}

.formulario-vincular .boton {
  align-self: flex-start;
}

#espacio-vacio .tarjeta {
  padding: 1.5rem;
}


/* Reloj del usuario (7 oct 2026): etiqueta a la izquierda, valor a la derecha. */
.tabla-reloj {
  width: 100%;
  border-collapse: collapse;
}

.tabla-reloj th {
  text-align: left;
  font-weight: 600;
  color: var(--ink-dim);
  padding: 0.35rem 0.75rem 0.35rem 0;
  white-space: nowrap;
  width: 1%;
}

.tabla-reloj td {
  padding: 0.35rem 0;
}

/* Diagnóstico del reloj Android 4G (23 oct 2026): informe tal cual lo genera el reloj. */
.diagnostico-reloj {
  max-height: 28rem;
  overflow: auto;
  padding: 0.75rem;
  border: 1px solid var(--line, #d0d7de);
  border-radius: 6px;
  font-family: ui-monospace, Consolas, monospace;
  font-size: 12px;
  line-height: 1.45;
  white-space: pre-wrap;
  word-break: break-word;
}

/* Separación entre bloques (pedido de Santi, 7 oct 2026): en las dos partes de la consola, ningún
   bloque va pegado al anterior (tarjetas, rejillas de métricas, formularios, tablas…), y los
   botones llevan un pequeño margen vertical. Los márgenes verticales entre hermanos se solapan, así
   que donde ya había separación no se duplica. */
section[id^='vista-'] > * + *,
form.tarjeta > * + *,
.tarjeta > .linea-acciones,
.tarjeta > .grupo-campos + * {
  margin-top: 1rem;
}

.boton {
  margin-block: 0.2rem;
}

/* Buscadores de los listados (9 oct 2026): contratos, usuarios, contactos y funcionarios. */
.buscador-listado { display: block; width: 100%; max-width: 28rem; margin-top: 0.7rem; }
.encabezado-vista .buscador-listado { margin-top: 0; width: auto; min-width: 14rem; }

/* Texto de ayuda bajo un grupo de campos (9 oct 2026, franja del Still Alive). */
.ayuda-campo { margin: 0.4rem 0 0; font-size: 0.85rem; opacity: 0.75; line-height: 1.5; }
/* CRM comercial */
.chip.accent { background: var(--crit-soft); color: var(--crit); }
.nav-item-con-submenu { display:flex; flex-direction:column; }
.nav-item-con-submenu > button[data-vista='crm'] { position:relative; }
.nav-submenu-flecha { margin-left:auto; color:var(--ink-dim); font-size:.9rem; line-height:1; transition:transform 150ms ease; }
.nav-item-con-submenu:has(> button[aria-expanded='true']) .nav-submenu-flecha { transform:rotate(180deg); }
.nav-submenu { display:none; flex-direction:column; gap:.1rem; margin:.1rem 0 .3rem 1.75rem; padding:.25rem 0 .25rem .65rem; border-left:1px solid var(--line); }
.nav-item-con-submenu:has(> button[aria-expanded='true']) .nav-submenu { display:flex; }
.nav-submenu button { min-height:32px !important; padding:.35rem .6rem !important; border-radius:7px !important; color:var(--ink-dim) !important; font-size:.82rem !important; font-weight:600 !important; }
.nav-submenu button:hover { color:var(--ink) !important; background:color-mix(in srgb, var(--ink) 7%, transparent) !important; }
.nav-submenu button[aria-selected='true'] { color:var(--nav-active) !important; background:color-mix(in srgb, var(--nav-active) 13%, transparent) !important; font-weight:700 !important; }
.crm-columnas { display:grid; grid-template-columns:minmax(0, 1fr) minmax(0, 1fr); gap:1rem; margin:1rem 0; }
.crm-graficas { display:grid; grid-template-columns:repeat(3, minmax(0, 1fr)); gap:1rem; margin:1rem 0; }
.crm-grafica-embudo { grid-column:1 / -1; }
.crm-pipeline { display:flex; flex-direction:column; gap:.65rem; }
.crm-filtros { display:flex; flex-wrap:wrap; align-items:flex-end; gap:.7rem; margin:.85rem 0 .35rem; padding:.75rem 0; border-top:1px solid var(--line-soft); border-bottom:1px solid var(--line-soft); }
.crm-filtro { display:flex; flex:1 1 11rem; flex-direction:column; gap:.28rem; min-width:10rem; color:var(--ink-dim); font-size:.76rem; font-weight:700; }
.crm-filtro input, .crm-filtro select { width:100%; min-height:2.2rem; padding:.45rem .6rem; font-size:.86rem; }
.crm-filtro-check { display:flex; align-items:center; gap:.45rem; min-height:2.2rem; padding:.35rem .55rem; border:1px solid var(--line); border-radius:7px; color:var(--ink-dim); font-size:.8rem; font-weight:600; white-space:nowrap; }
.crm-filtro-check input { width:1rem; height:1rem; margin:0; accent-color:var(--primary); }
.crm-filtros-resumen { min-height:1.1rem; margin:.35rem 0 .65rem; color:var(--ink-dim); font-size:.76rem; }
.crm-filtro-error { color:var(--danger, #eb6834); }
.crm-oportunidad { display:flex; justify-content:space-between; gap:1rem; padding:.8rem; border:1px solid var(--line); border-radius:10px; background:var(--surface-alt); }
.crm-oportunidad-cerrada { border-left:3px solid var(--primary); }
.crm-oportunidad small, .crm-oportunidad-datos { display:block; color:var(--ink-dim); font-size:.82rem; }
.crm-cuenta-fila { cursor:pointer; }
.crm-cuenta-fila:focus-visible { outline:2px solid var(--primary); outline-offset:-2px; }
.crm-etapa { display:block; margin-top:.55rem; color:var(--ink-dim); font-size:.78rem; }
.crm-etapa select { margin-left:.3rem; max-width:12rem; padding:.25rem .4rem; }
.crm-tarea-vencida { background:color-mix(in srgb, var(--danger, #b42318) 8%, transparent); }
.crm-tarea-vencida small { color:var(--danger, #b42318); font-weight:700; }
.crm-prevision-tarjeta .variacion { margin:0; }
.crm-oportunidad-datos { text-align:right; }
.crm-oportunidad-datos span { margin-left:.6rem; font-weight:700; color:var(--ink); }
.crm-oportunidad-presupuestos { display:flex; flex-direction:column; gap:.35rem; margin:.65rem 0; padding:.55rem .65rem; border:1px solid var(--line); border-radius:8px; background:color-mix(in srgb, var(--primary) 5%, transparent); }
.crm-oportunidad-presupuestos > small { color:var(--ink); font-weight:700; }
.crm-oportunidad-presupuesto { display:flex; align-items:center; justify-content:space-between; gap:.7rem; color:var(--ink-dim); font-size:.8rem; }
.crm-oportunidad-presupuesto > span:first-child { min-width:0; overflow:hidden; text-overflow:ellipsis; white-space:nowrap; }
.crm-oportunidad-presupuesto .linea-acciones { margin:0; flex-shrink:0; }
.crm-oportunidad-presupuestos-form { display:flex; flex-direction:column; gap:.35rem; padding:.55rem .65rem; border:1px solid var(--line); border-radius:8px; background:var(--surface-alt); }
.crm-embudo { display:flex; flex-direction:column; gap:.55rem; }
.crm-embudo-fila { display:grid; grid-template-columns:minmax(10rem, 13rem) minmax(6rem, 1fr) minmax(8rem, 10rem); align-items:center; gap:.7rem; }
.crm-embudo-etiqueta { display:flex; justify-content:space-between; gap:.5rem; color:var(--ink-dim); font-size:.82rem; }
.crm-embudo-etiqueta strong { color:var(--ink); }
.crm-embudo-tramo { display:flex; align-items:center; min-width:0; min-height:1.65rem; padding:0 .65rem; border-radius:999px; background:linear-gradient(90deg, var(--primary), color-mix(in srgb, var(--primary) 58%, var(--surface))); color:var(--surface); font-size:.78rem; font-weight:700; transition:width 180ms ease; }
.crm-embudo-tramo span { overflow:hidden; text-overflow:ellipsis; white-space:nowrap; }
.crm-embudo-fila > small { color:var(--ink-dim); text-align:right; font-size:.76rem; }
.crm-svg { display:block; width:100%; height:auto; color:var(--ink); overflow:visible; }
.crm-svg-embudo { min-height:18rem; }
.crm-barras { min-height:10rem; display:flex; align-items:stretch; justify-content:center; }
.crm-grafica .im-barras-h { width:100%; align-content:center; gap:.78rem; }
.crm-grafica .im-fila-h { grid-template-columns:minmax(8rem, 13rem) minmax(0, 1fr) auto; gap:.7rem; color:var(--ink); }
.crm-grafica .im-etq-h { color:var(--ink-dim); font-size:.84rem; }
.crm-grafica .im-val-h { color:var(--ink); font-weight:700; font-variant-numeric:tabular-nums; }
.crm-grafica .im-pista-h { height:.72rem; background:var(--surface-alt); border:1px solid color-mix(in srgb, var(--line) 70%, transparent); }
.crm-grafica .im-pista-h span { transition:width 180ms ease; }
.crm-grafica .im-detalle-h { color:var(--ink-dim); }
.crm-grafica .im-fila-h small { font-size:.75rem; }
.crm-barras-comerciales { max-height:18rem; overflow:auto; padding-right:.25rem; }
@media (max-width: 1100px) { .crm-graficas { grid-template-columns:repeat(2, minmax(0, 1fr)); } .crm-grafica-embudo { grid-column:1 / -1; } }
@media (max-width: 900px) { .crm-columnas, .crm-graficas { grid-template-columns:1fr; } .crm-grafica-embudo { grid-column:auto; } .crm-oportunidad { flex-direction:column; } .crm-oportunidad-datos { text-align:left; } }
@media (max-width: 600px) { .crm-embudo-fila { grid-template-columns:1fr; gap:.25rem; } .crm-embudo-fila > small { text-align:left; } .crm-embudo-tramo { width:100% !important; } .crm-grafica .im-fila-h { grid-template-columns:minmax(6.5rem, 8rem) minmax(0, 1fr) auto; gap:.45rem; } .crm-grafica .im-val-h { font-size:.78rem; } .crm-filtros { align-items:stretch; flex-direction:column; } .crm-filtro, .crm-filtro-check { width:100%; } }
.crm-fuera-alcance {
  display: none !important;
}

.crm-productos-oportunidad {
  display: grid;
  grid-template-columns: repeat(auto-fit, minmax(15rem, 1fr));
  gap: 0.5rem;
  max-height: 15rem;
  overflow: auto;
  padding: 0.25rem;
}
.crm-producto-oportunidad {
  display: flex;
  align-items: flex-start;
  gap: 0.6rem;
  padding: 0.65rem 0.75rem;
  border: 1px solid var(--line);
  border-radius: var(--radius-sm);
  cursor: pointer;
}
.crm-producto-oportunidad input[type='checkbox'] {
  width: 18px;
  height: 18px;
  flex: 0 0 18px;
  margin: 0.1rem 0 0;
  accent-color: var(--primary);
  cursor: pointer;
}
.crm-producto-oportunidad.sin-precio { opacity: 0.62; cursor: not-allowed; }
.crm-producto-oportunidad input[type='checkbox']:disabled { cursor: not-allowed; }
.crm-edicion-precios-producto { display:flex; flex-direction:column; gap:.45rem; min-width:13rem; margin-top:.55rem; }
.crm-edicion-precios-producto label { display:flex; align-items:center; justify-content:space-between; gap:.5rem; color:var(--ink-dim); font-size:.78rem; }
.crm-edicion-precios-producto input { width:6.5rem; min-width:0; }
#velo-crm-formulario > .panel-lateral { width:min(1180px, 100%); }
#velo-crm-incompletas > .panel-lateral { width:min(580px, 100%); }
.crm-incompletas-lista { display:flex; flex-direction:column; gap:.7rem; }
.crm-incompleta-item { display:flex; flex-direction:column; gap:.65rem; padding:.85rem; border:1px solid var(--line); border-radius:10px; background:var(--surface-alt); }
.crm-incompleta-cabecera { display:flex; align-items:flex-start; justify-content:space-between; gap:.8rem; }
.crm-incompleta-cabecera > div { display:flex; flex-direction:column; gap:.18rem; min-width:0; }
.crm-incompleta-cabecera strong { overflow:hidden; text-overflow:ellipsis; white-space:nowrap; }
.crm-incompleta-cabecera small { color:var(--ink-dim); font-size:.78rem; }
.crm-incompleta-faltantes { display:flex; flex-wrap:wrap; gap:.35rem; }
.crm-incompleta-faltante { color:var(--warn); background:var(--warn-soft); border-color:var(--warn); font-size:.74rem; }
.crm-incompleta-detalle { display:flex; flex-wrap:wrap; gap:1rem; color:var(--ink-dim); font-size:.8rem; }
.crm-incompleta-detalle span:first-child { color:var(--ink); font-weight:700; }
.crm-incompleta-item .boton { align-self:flex-start; }
.crm-ver-incompletas { min-width:2.4rem; padding:.25rem .55rem !important; min-height:30px !important; margin:0; }
.crm-propuesta-fila { cursor: pointer; }
.crm-propuesta-fila:hover td, .crm-propuesta-fila:focus-visible td { background: color-mix(in srgb, var(--primary) 8%, transparent); }
.crm-propuesta-fila:focus-visible { outline: 2px solid var(--primary); outline-offset: -2px; }
.crm-producto-oportunidad:has(input:checked) { border-color: var(--primary); background: var(--primary-soft); }
.crm-producto-oportunidad span { display: flex; flex-direction: column; gap: 0.15rem; }
.crm-producto-oportunidad small { color: var(--ink-dim); }
.crm-propuesta-lineas { display:flex; flex-direction:column; gap:.7rem; }
.crm-propuesta-linea { display:grid; grid-template-columns:2rem minmax(13rem, 1.7fr) minmax(10rem, 1.3fr) minmax(6rem, .7fr) minmax(7rem, .8fr) minmax(6rem, .7fr) minmax(6rem, .7fr) minmax(8rem, .9fr) minmax(6rem, .7fr) auto; align-items:end; gap:.55rem; padding:.75rem; border:1px solid var(--line); border-radius:9px; background:var(--surface-alt); }
.crm-propuesta-linea-arrastre { align-self:center; cursor:grab; color:var(--ink-dim); font-size:1.35rem; line-height:1; user-select:none; text-align:center; }
.crm-propuesta-linea-arrastre:active { cursor:grabbing; }
.crm-propuesta-linea-arrastrando { opacity:.45; }
.crm-propuesta-linea-sobre { border-color:var(--primary); box-shadow:0 0 0 1px var(--primary); }
.crm-propuesta-linea .campo { min-width:0; }
.crm-propuesta-linea input, .crm-propuesta-linea select { width:100%; min-width:0; }
.crm-propuesta-linea input:disabled, .crm-propuesta-linea select:disabled { opacity:.8; color:var(--ink); }
.crm-propuesta-quitar-linea { white-space:nowrap; }
.crm-propuesta-check { display:flex; align-items:center; gap:.5rem; color:var(--ink-dim); font-size:.88rem; }
.crm-propuesta-check input { width:1rem; height:1rem; accent-color:var(--primary); }
.crm-propuesta-resumen { display:flex; flex-wrap:wrap; gap:.8rem 1.2rem; padding:.7rem .8rem; border:1px solid var(--line); border-radius:8px; color:var(--ink-dim); font-size:.86rem; }
.crm-propuesta-resumen strong, .crm-propuesta-resumen span { color:var(--ink); }
@media (max-width: 1100px) { .crm-propuesta-linea { grid-template-columns:2rem repeat(4, minmax(0, 1fr)); } .crm-propuesta-quitar-linea { justify-self:start; } }
@media (max-width: 600px) { .crm-propuesta-linea { grid-template-columns:2rem repeat(2, minmax(0, 1fr)); } .crm-propuesta-linea .campo:nth-child(2), .crm-propuesta-linea .campo:nth-child(3) { grid-column:2 / -1; } }

/* «Forzar voz» y motivo de la voz sin conexión en la tabla de usuarios (2 nov 2026). */
.voz-motivo, .voz-forzada { margin-top: 0.3rem; font-size: 0.82rem; line-height: 1.3; color: var(--ink-dim); max-width: 22rem; white-space: normal; }
.voz-detalle { opacity: 0.8; font-style: italic; }
.voz-forzada.crit { color: var(--crit); }
.boton-forzar-voz { margin-top: 0.35rem; padding: 0.25rem 0.7rem; font-size: 0.82rem; }

/* Avance del cierre o la restauración de sesiones tras dar de baja o reactivar un contrato (3 nov 2026). */
.aviso-tareas-sesion {
  margin: 0 0 1rem;
  padding: 0.75rem 1rem;
  border-radius: 10px;
  border: 1px solid var(--info);
  background: var(--info-soft);
  color: var(--ink);
  font-size: 0.92rem;
}

.aviso-tareas-sesion.error {
  border-color: var(--crit);
  background: var(--crit-soft);
}

/* Contactos de una cuenta (8 nov 2026): lista reutilizada en la ficha, la actividad y la ventana del CRM. */
.gestor-contactos { display: grid; gap: 0.8rem; }
.gestor-contactos-cabecera { display: flex; align-items: center; justify-content: space-between; gap: 1rem; }
.gestor-contactos-marcado td { opacity: 0.75; }
.gestor-contactos td .boton { margin: 0 0.25rem 0.25rem 0; }
.gestor-contactos-acciones { display: flex; gap: 0.6rem; flex-wrap: wrap; }

