/* estilo.css — Presupuestos JAG Alcaide.
   Sobrio y legible: esto se usa ocho horas al día, no es un escaparate.
   Nada de tipografías externas: solo las del sistema, para que cargue al
   instante y para no depender de ningún servidor de fuera. */

:root {
  --tinta: #16202b;
  --tinta-suave: #5b6b7c;
  --linea: #dde4ec;
  --fondo: #f4f6f9;
  --papel: #ffffff;
  --azul: #12803d;      /* verde JAG oscurecido: texto blanco legible encima */
  --azul-claro: #e7f5ec;
  --marca: #159c4a;     /* el verde del logo */
  --marca-negro: #1d1d1b;
  --verde: #1d7a4c;
  --ambar: #8a5a00;
  --ambar-fondo: #fff6e2;
  --rojo: #a52020;
  --apagado: #f0f2f5;
  --radio: 8px;
  --sombra: 0 1px 2px rgba(22, 32, 43, .06), 0 4px 14px rgba(22, 32, 43, .05);
}

* { box-sizing: border-box; }

body {
  margin: 0;
  font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif;
  font-size: 15px;
  line-height: 1.45;
  color: var(--tinta);
  background: var(--fondo);
}

/* ---------------------------------------------------- Cabecera ----------- */
header.barra {
  display: flex; align-items: center; gap: 16px;
  padding: 10px 24px;
  background: var(--papel);
  border-bottom: 3px solid var(--marca);
  position: sticky; top: 0; z-index: 10;
}
header.barra h1 { font-size: 16px; margin: 0; font-weight: 600; letter-spacing: -.01em; }
header.barra .rama { color: var(--tinta-suave); font-weight: 400; }
header.barra .hueco { flex: 1; }
header.barra .quien { color: var(--tinta-suave); font-size: 14px; }
header.barra a.logo { display: flex; align-items: center; padding-right: 16px; border-right: 1px solid var(--linea); }
header.barra a.logo img { height: 26px; width: auto; display: block; }
header.barra a.mis { font-size: 14px; color: var(--azul); font-weight: 600; text-decoration: none; }
header.barra a.mis:hover { text-decoration: underline; }
.entrada .logo_entrada { display: block; width: 240px; max-width: 100%; height: auto; margin: 0 0 20px; }
.entrada { border-top: 4px solid var(--marca); }
footer.pie { text-align: center; color: var(--tinta-suave); font-size: 12px; padding: 24px 16px 32px; }
footer.pie b { color: var(--marca); font-weight: 600; }
@media (max-width: 640px) {
  header.barra { padding: 8px 16px; gap: 10px; flex-wrap: wrap; }
  header.barra a.logo { border-right: 0; padding-right: 0; }
  header.barra a.logo img { height: 22px; }
}

/* ---------------------------------------------------- Entrar ------------- */
.entrada {
  max-width: 380px; margin: 12vh auto; padding: 32px;
  background: var(--papel); border: 1px solid var(--linea);
  border-radius: var(--radio); box-shadow: var(--sombra);
}
.entrada h1 { font-size: 20px; margin: 0 0 4px; }
.entrada p.sub { margin: 0 0 24px; color: var(--tinta-suave); font-size: 14px; }
.entrada label { display: block; margin-bottom: 14px; }
.entrada .aviso { margin-top: 16px; }

/* ---------------------------------------------------- Rejilla ------------ */
.pagina {
  display: grid; grid-template-columns: minmax(0, 1fr) 360px;
  gap: 20px; padding: 20px 24px 64px; align-items: start;
  max-width: 1400px; margin: 0 auto;
}
@media (max-width: 1000px) { .pagina { grid-template-columns: 1fr; } }

section.tarjeta {
  background: var(--papel); border: 1px solid var(--linea);
  border-radius: var(--radio); box-shadow: var(--sombra);
  padding: 18px 20px; margin-bottom: 16px;
}
section.tarjeta > h2 {
  font-size: 13px; text-transform: uppercase; letter-spacing: .06em;
  color: var(--tinta-suave); margin: 0 0 14px; font-weight: 600;
}
section.tarjeta > h2 .cap { color: var(--azul); font-weight: 700; margin-right: 6px; }
section.tarjeta > h2 .importe { float: right; color: var(--tinta); font-size: 14px; letter-spacing: 0; text-transform: none; font-variant-numeric: tabular-nums; }

/* ---------------------------------------------------- Campos ------------- */
.campos { display: grid; grid-template-columns: repeat(auto-fit, minmax(210px, 1fr)); gap: 12px 16px; }
.campos.dos { grid-template-columns: repeat(2, minmax(0, 1fr)); }
@media (max-width: 620px) { .campos, .campos.dos { grid-template-columns: 1fr; } }

label { display: block; font-size: 13px; color: var(--tinta-suave); }
label > span.txt { display: block; margin-bottom: 4px; }
label.ancho { grid-column: 1 / -1; }

input, select {
  width: 100%; padding: 7px 9px; font: inherit; font-size: 14px;
  color: var(--tinta); background: var(--papel);
  border: 1px solid #c3cdd9; border-radius: 6px;
}
input:focus, select:focus { outline: 2px solid var(--azul); outline-offset: -1px; border-color: var(--azul); }
input[type=number] { font-variant-numeric: tabular-nums; }

/* Un campo que ahora mismo no pinta nada: apagado y SIN PODER TOCARLO.
   En la hoja esto era un gris de aviso que se podía escribir igual. */
label.apagado { opacity: .45; }
input:disabled, select:disabled { background: var(--apagado); color: var(--tinta-suave); cursor: not-allowed; }

input[readonly] { background: var(--apagado); color: var(--tinta-suave); }

.pista { font-size: 12px; color: var(--tinta-suave); margin-top: 3px; }

/* Sí / No como dos botones: no hay forma de escribir "Si" y que no cuente. */
.sino { display: inline-flex; border: 1px solid #c3cdd9; border-radius: 6px; overflow: hidden; }
.sino button {
  font: inherit; font-size: 14px; padding: 7px 18px; border: 0; cursor: pointer;
  background: var(--papel); color: var(--tinta-suave);
}
.sino button + button { border-left: 1px solid #c3cdd9; }
.sino button[aria-pressed="true"] { background: var(--azul); color: #fff; font-weight: 600; }
.sino[data-apagado="si"] { opacity: .45; pointer-events: none; }

/* ---------------------------------------------------- Resumen ------------ */
aside.resumen { position: sticky; top: 76px; }
aside.resumen .lineas { margin: 0 0 12px; }
.linea { display: flex; justify-content: space-between; gap: 10px; padding: 4px 0; font-size: 14px; }
.linea .nom { color: var(--tinta-suave); }
.linea .val { font-variant-numeric: tabular-nums; white-space: nowrap; }
.linea.cero { opacity: .4; }
.linea.total { border-top: 1px solid var(--linea); margin-top: 8px; padding-top: 10px; font-weight: 600; }
.linea.grande { font-size: 20px; font-weight: 700; padding-top: 4px; }
.linea.grande .val { color: var(--azul); }

.aviso {
  border-radius: 6px; padding: 10px 12px; font-size: 13px;
  background: var(--ambar-fondo); color: var(--ambar); border: 1px solid #f0dcb0;
}
.aviso.malo { background: #fdecec; color: var(--rojo); border-color: #f2c6c6; }
.aviso.bien { background: #e9f6ef; color: var(--verde); border-color: #bfe3d0; }
.aviso ul { margin: 6px 0 0; padding-left: 18px; }
.aviso li { margin: 2px 0; }

button.principal {
  width: 100%; padding: 10px 16px; font: inherit; font-size: 15px; font-weight: 600;
  color: #fff; background: var(--azul); border: 0; border-radius: 6px; cursor: pointer;
}
button.principal:hover { background: #0e6a32; }
button.principal:disabled { background: #a9b6c4; cursor: not-allowed; }
button.enlace { background: none; border: 0; color: var(--azul); font: inherit; font-size: 14px; cursor: pointer; padding: 0; text-decoration: underline; }

p.acciones { margin: 14px 0 0; }
.aviso.separado { margin-top: 8px; }

#estado_tarifas { margin-top: 12px; }

/* ------------------------------------------------- Buscador y resultados -- */
.buscador { display: flex; gap: 6px; margin-left: 8px; }
.buscador input {
  width: 260px; padding: 6px 10px; font-size: 14px;
  border: 1px solid #c3cdd9; border-radius: 6px;
}
.buscador button {
  font: inherit; font-size: 14px; padding: 6px 14px; cursor: pointer;
  color: var(--azul); background: var(--papel);
  border: 1px solid #c3cdd9; border-radius: 6px;
}
.buscador button:hover { background: var(--azul-claro); }

section#resultados > h2 .enlace { float: right; text-transform: none; letter-spacing: 0; font-size: 13px; }

table.resultados { width: 100%; border-collapse: collapse; font-size: 14px; }
table.resultados th {
  text-align: left; font-size: 12px; font-weight: 600; color: var(--tinta-suave);
  text-transform: uppercase; letter-spacing: .04em;
  padding: 4px 8px 6px; border-bottom: 1px solid var(--linea);
}
table.resultados td { padding: 7px 8px; border-bottom: 1px solid var(--linea); }
table.resultados tr:last-child td { border-bottom: 0; }
table.resultados td.num { font-variant-numeric: tabular-nums; white-space: nowrap; }
table.resultados td.der { text-align: right; font-variant-numeric: tabular-nums; white-space: nowrap; }
table.resultados button {
  font: inherit; font-size: 13px; padding: 4px 12px; cursor: pointer; white-space: nowrap;
  color: #fff; background: var(--azul); border: 0; border-radius: 5px;
}
table.resultados button:hover { background: #0e6a32; }

#aviso_recuperado { margin-bottom: 16px; }

/* ---------------------------------------------------------------------------
   SUSTITUCIÓN / BÁSICA / COMPLEJA
   Las líneas de los interiores van en tres columnas (metros, bomba, dónde va)
   y se apilan en el móvil como el resto.
   ------------------------------------------------------------------------ */
.campos.tres { grid-template-columns: repeat(3, minmax(0, 1fr)); }
@media (max-width: 620px) { .campos.tres { grid-template-columns: 1fr; } }

.linea_int + .linea_int { margin-top: 10px; padding-top: 10px; border-top: 1px dashed #dde3ea; }

/* El Sí/No que decide si hay segunda opción vive dentro del título. */
section.tarjeta > h2 .sino.peque { margin-left: 10px; vertical-align: middle; }
section.tarjeta > h2 .sino.peque button { padding: 2px 10px; font-size: 12px; }

section.tarjeta h3 {
  margin: 18px 0 4px; font-size: 13px; letter-spacing: .04em;
  text-transform: uppercase; color: var(--tinta-suave);
}

/* 🔴 `hidden` tiene que ganarle a `display: grid`. Sin esto, la opción B se
   queda a la vista aunque se diga que no hay segunda opción: el atributo está
   puesto pero el display de la rejilla lo pisa. */
[hidden] { display: none !important; }

/* ---------------------------------------------------------------------------
   LA PORTADA
   Una tarjeta por rama. Las que todavía no tienen pantalla se quedan a la
   vista pero apagadas: esconderlas haría dudar de si existen.
   ------------------------------------------------------------------------ */
.portada { max-width: 980px; margin: 0 auto; padding: 24px 20px 40px; }
.portada .entradilla { margin: 4px 0 18px; font-size: 18px; color: var(--tinta); }

.ramas { display: grid; grid-template-columns: repeat(auto-fit, minmax(280px, 1fr)); gap: 16px; }

a.rama_tarjeta {
  display: flex; flex-direction: column; gap: 8px;
  background: #fff; border: 1px solid var(--linea); border-radius: 10px;
  padding: 18px 18px 16px; text-decoration: none; color: inherit;
  transition: border-color .12s, box-shadow .12s, transform .12s;
}
a.rama_tarjeta:hover { border-color: var(--azul); box-shadow: 0 2px 10px rgba(18,128,61,.12); transform: translateY(-1px); }
a.rama_tarjeta .rama_nombre { font-size: 17px; font-weight: 600; color: var(--azul); }
a.rama_tarjeta .rama_texto { font-size: 13px; color: var(--tinta-suave); line-height: 1.45; flex: 1; }
a.rama_tarjeta .rama_boton {
  align-self: flex-start; margin-top: 6px;
  background: var(--azul); color: #fff; border-radius: 6px;
  padding: 7px 16px; font-size: 14px; font-weight: 600;
}
a.rama_tarjeta.combinado { border-style: dashed; }
a.rama_tarjeta.apagada { opacity: .5; pointer-events: none; }
a.rama_tarjeta.apagada .rama_boton { background: var(--apagado); color: var(--tinta-suave); }

.portada .tarjeta { margin-top: 20px; }
.portada .pista, .portada .aviso { margin-top: 20px; }

/* Un extra, debajo de la línea de «Extras» del resumen. */
.linea.sub .nom { padding-left: 10px; color: var(--tinta-suave); font-size: 12px; }
.linea.sub .val { font-size: 12px; color: var(--tinta-suave); }

/* ---------------------------------------------------------------------------
   02/10/2026 (David): lo común a todas las calculadoras — IVA, descuento,
   observaciones, «no incluye» y la tarjeta «Otras partidas» (partidas-libres.js).
   ------------------------------------------------------------------------ */
textarea.comun {
  width: 100%; padding: 7px 9px; font: inherit; font-size: 14px; color: var(--tinta);
  background: var(--papel); border: 1px solid #c3cdd9; border-radius: 6px;
  box-sizing: border-box; resize: vertical; min-height: 64px;
}
textarea.comun:focus { outline: 2px solid var(--azul); outline-offset: -1px; border-color: var(--azul); }
.campos.partidas_libres { grid-template-columns: minmax(0, 3fr) minmax(0, 1fr) auto; margin-top: 10px; }
@media (max-width: 620px) { .campos.partidas_libres { grid-template-columns: 1fr; } }
.campos.partidas_libres .pl_casilla { display: inline-flex; align-items: center; gap: 6px; padding: 7px 0; white-space: nowrap; }
.campos.partidas_libres .pl_casilla input[type=checkbox] { width: auto; margin: 0; }
/* Las líneas del resumen que dependen del descuento y las partidas (resumen-comun.js). */
.linea.descuento .val { color: var(--ambar, #8a5a00); }

/* ---------------------------------------------------------------------------
   PRESUPUESTO COMBINADO
   ------------------------------------------------------------------------ */
.banda_combinado {
  background: var(--ambar-fondo); color: var(--ambar);
  border-bottom: 1px solid #e8d9b4;
  padding: 8px 20px; font-size: 13px;
}
.banda_combinado .enlace { margin-left: 10px; }

label.casilla {
  display: flex; align-items: center; gap: 8px;
  font-size: 14px; color: var(--tinta); cursor: pointer;
}
label.casilla input { width: auto; margin: 0; }

/* --- El diálogo de corregir los datos del cliente -------------------------- */
/* Se abre desde la lista de presupuestos encontrados de la portada. */
dialog {
  border: 0; border-radius: 10px; padding: 20px; max-width: 640px; width: calc(100% - 32px);
  box-shadow: 0 10px 40px rgba(0,0,0,.25); color: var(--tinta); background: var(--papel);
}
dialog::backdrop { background: rgba(15, 23, 32, .45); }
dialog h2 { margin: 0 0 4px; font-size: 17px; }
dialog .campos { margin-top: 12px; }
dialog .botones { display: flex; gap: 10px; justify-content: flex-end; margin-top: 16px; }
dialog .botones button {
  padding: 9px 18px; font: inherit; font-size: 15px; font-weight: 600;
  color: #fff; background: var(--azul); border: 0; border-radius: 6px; cursor: pointer;
}
dialog .botones button:hover { background: #0e6a32; }
dialog .botones button:disabled { background: #a9b6c4; cursor: not-allowed; }
dialog .botones button.secundario { background: none; color: var(--tinta-suave); border: 1px solid #c9d2db; }
dialog .botones button.secundario:hover { background: var(--apagado); }

/* --- Traer datos de Chatwoot ---------------------------------------------- */
.cw_item { padding: 8px 10px; border: 1px solid var(--linea); border-radius: 6px; margin-top: 6px; cursor: pointer; }
.cw_item:hover { background: var(--apagado); border-color: var(--azul); }
.cw_item .meta { font-size: 12px; color: var(--tinta-suave); margin-top: 2px; }
.cw_item .ult { font-size: 13px; color: var(--tinta-suave); margin-top: 4px;
  overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
#cw_lista { max-height: 300px; overflow-y: auto; margin-top: 8px; }
.cw_tabla { width: 100%; border-collapse: collapse; margin-top: 10px; font-size: 14px; }
.cw_tabla th { text-align: left; font-size: 12px; color: var(--tinta-suave); text-transform: uppercase;
  letter-spacing: .04em; padding: 4px 6px; border-bottom: 1px solid var(--linea); }
.cw_tabla td { padding: 5px 6px; border-bottom: 1px solid var(--linea); vertical-align: top; }
/* Lo que se pisaría, en rojo: es justo lo que hay que mirar dos veces. */
.cw_tabla td.cw_pisa { color: var(--rojo, #b3261e); }

/* SustBasComp: los seis bloques (21/09/2026) */
section.bloque > h2 { display: flex; align-items: baseline; gap: 12px; flex-wrap: wrap; }
section.bloque > h2 .importe { float: none; order: 3; margin-left: auto; font-size: 16px; }
section.bloque > h2 .acciones_bloque { order: 2; text-transform: none; letter-spacing: 0; font-size: 13px; font-weight: 400; }
section.bloque > h2 .acciones_bloque .enlace { font-size: 13px; margin-right: 12px; }
section.bloque .fila_opcion { display: flex; align-items: center; gap: 10px; margin: 0 0 12px;
  padding: 8px 10px; background: var(--azul-claro, #e7f5ec); border-radius: 6px; }
section.bloque .fila_opcion select { width: auto; min-width: 110px; }
section.bloque details { margin-top: 14px; }
section.bloque details summary { cursor: pointer; font-size: 13px; color: var(--azul); }
section.bloque.fuera { background: #fbfcfd; }
section.bloque.fuera .fila_opcion { background: #f3f4f6; }
.linea.fuera { opacity: .5; }
.linea.principal .nom { font-weight: 600; color: var(--tinta); }
p.acciones.sin_margen { margin: 0; }
button.enlace.separa { margin-left: 14px; }
section.bloque .fila_opcion label { display: flex; align-items: center; gap: 8px; margin: 0; }
section.bloque .fila_opcion .pista { margin: 0; }
/* 01/10/2026: «Opción que entra en el combinado» (pantalla del combinado) */
#lista_trabajos .opcion_comb { display: flex; align-items: center; flex-wrap: wrap; gap: 6px 14px; margin: -4px 0 10px 18px; }
#lista_trabajos .opcion_comb select { width: auto; min-width: 70px; }
#lista_trabajos .opcion_comb .pista { margin: 0; }
/* 01/10/2026: casillas A-F + «Todas» en vez del desplegable de opción */
section.bloque .fila_opcion .txt { font-size: 13px; font-weight: 600; }
section.bloque .fila_opcion .casillas_opcion { display: inline-flex; flex-wrap: wrap; gap: 4px 12px; }
section.bloque .fila_opcion .casillas_opcion label.casilla { font-size: 13px; gap: 4px; }
section.bloque .fila_opcion .casillas_opcion label.apagado { opacity: .45; }

/* ---------------------------------------------------- Mis presupuestos --- */
main.mis { max-width: 1280px; margin: 24px auto; padding: 0 24px; }
.mis_filtros { display: flex; flex-wrap: wrap; gap: 12px; align-items: flex-end; margin-bottom: 16px; }
.mis_filtros label { display: flex; flex-direction: column; gap: 4px; min-width: 160px; }
.mis_filtros label.crece { flex: 1; min-width: 220px; }
.mis_filtros .txt { font-size: 13px; color: var(--tinta-suave); }
button.secundario {
  padding: 8px 14px; font: inherit; font-size: 14px; cursor: pointer;
  background: var(--papel); color: var(--azul); border: 1px solid var(--azul); border-radius: 6px;
}
button.secundario:hover { background: var(--azul-claro); }
.mis_cifras { display: grid; grid-template-columns: repeat(auto-fit, minmax(170px, 1fr)); gap: 12px; margin-bottom: 16px; }
.cifra { background: var(--papel); border: 1px solid var(--linea); border-radius: var(--radio); padding: 14px 16px; box-shadow: var(--sombra); border-top: 3px solid var(--linea); }
.cifra .etq { font-size: 13px; color: var(--tinta-suave); }
.cifra .val { font-size: 24px; font-weight: 700; font-variant-numeric: tabular-nums; margin-top: 2px; }
.cifra .sub { font-size: 13px; color: var(--tinta-suave); font-variant-numeric: tabular-nums; }
.cifra.enviado { border-top-color: #6b7c8f; }
.cifra.aceptado { border-top-color: var(--marca); }
.cifra.aceptado .val { color: var(--azul); }
.cifra.rechazado { border-top-color: var(--rojo); }
.cifra.tasa { border-top-color: var(--marca-negro); }
.mis_estados { display: flex; flex-wrap: wrap; gap: 8px; margin-bottom: 12px; }
.mis_estados button {
  font: inherit; font-size: 13px; padding: 5px 12px; border-radius: 999px; cursor: pointer;
  background: var(--papel); color: var(--tinta); border: 1px solid var(--linea);
}
.mis_estados button[aria-pressed="true"] { background: var(--azul); color: #fff; border-color: var(--azul); }
.mis_tabla { background: var(--papel); border: 1px solid var(--linea); border-radius: var(--radio); overflow-x: auto; box-shadow: var(--sombra); }
.mis_tabla table.resultados th { position: sticky; top: 0; background: var(--apagado); }
.mis_tabla td.cli b { font-weight: 600; }
.mis_tabla td.cli span { display: block; color: var(--tinta-suave); font-size: 13px; }
.mis_tabla select.estado { font: inherit; font-size: 13px; padding: 4px 6px; border-radius: 6px; border: 1px solid var(--linea); }
.mis_tabla select.estado.e-aceptado { background: #e7f5ec; color: var(--azul); border-color: #b9e0c7; font-weight: 600; }
.mis_tabla select.estado.e-rechazado, .mis_tabla select.estado.e-anulado { background: #fbeaea; color: var(--rojo); border-color: #f0c4c4; }
.mis_tabla select.estado.e-pendiente { background: var(--ambar-fondo); color: var(--ambar); }
.etiqueta_llamar { display: inline-block; margin-left: 6px; font-size: 11px; font-weight: 600; color: var(--ambar); background: var(--ambar-fondo); border-radius: 4px; padding: 1px 6px; white-space: nowrap; }
tr.guardando { opacity: .55; }
.mis_nota { margin-top: 16px; }

/* 23/09/2026: pestañas «Todos / Aprobados» y desglose por comercial. */
.mis_pestanas { margin-bottom: 14px; }
.mis_pestanas button { font-weight: 600; }
.mis_por_comercial {
  background: var(--papel); border: 1px solid var(--linea); border-radius: var(--radio);
  box-shadow: var(--sombra); overflow-x: auto; margin-bottom: 16px;
}
.mis_por_comercial tfoot td { border-top: 2px solid var(--linea); }
@media (max-width: 640px) {
  main.mis { padding: 0 16px; margin-top: 16px; }
  .mis_filtros label { min-width: 0; flex: 1 1 45%; }
  .cifra .val { font-size: 20px; }
}
a.enlace { color: var(--azul); }

.por_confirmar { margin-bottom: 16px; }
.caja_pago { margin-top: 6px; display: flex; flex-wrap: wrap; align-items: center; gap: 6px 10px;
  padding: 6px 8px; background: #e7f5ec; border: 1px solid #b9e0c7; border-radius: 6px; font-size: 12px; color: var(--azul); }
.caja_pago span { flex-basis: 100%; }
table.resultados .caja_pago button.confirmar_pago { font-size: 12px; padding: 4px 10px; }
table.resultados .caja_pago button.enlace { background: none; color: var(--tinta-suave); padding: 0; font-size: 12px; }

/* --- Planificación y facturación (23/09/2026) ------------------------------ */
.plan_tabla td { vertical-align: top; }
.plan_tabla td span.pista, .plan_tabla td.cli span, .plan_tabla td .fact { display: block; font-size: 13px; }
.plan_tabla td.facturas { white-space: nowrap; }
.plan_tabla td button.enlace { display: block; margin-top: 4px; font-size: 13px; }
.plan_tabla td.situ .etiqueta_llamar { display: block; margin: 4px 0 0; width: max-content; }
button.peque { width: auto; padding: 5px 10px; font-size: 13px; margin-top: 6px; white-space: nowrap; }
.etq_mat, .etq_etapa {
  display: inline-block; font-size: 12px; font-weight: 600; padding: 2px 8px; border-radius: 999px;
  background: var(--apagado); color: var(--tinta-suave); white-space: nowrap;
}
.etq_mat.m-pedido { background: var(--ambar-fondo); color: var(--ambar); }
.etq_mat.m-en_almacen { background: #e7f5ec; color: var(--azul); }
.etq_etapa.e-por_coordinar { background: #eef1f5; color: #3d4b5c; }
.etq_etapa.e-material_pedido { background: var(--ambar-fondo); color: var(--ambar); }
.etq_etapa.e-material_en_almacen { background: #e3f0fb; color: #1d5b8f; }
.etq_etapa.e-coordinado { background: #e7f5ec; color: var(--azul); }
.etq_etapa.e-por_confirmar { background: #fff0d6; color: #8a4b00; }
.etq_etapa.e-pendiente_cobro { background: #fbeaea; color: var(--rojo); }
.etq_etapa.e-finalizado { background: var(--azul); color: #fff; }
tr.et-finalizado td { color: var(--tinta-suave); }
dialog.ficha_obra { max-width: 760px; }
dialog.ficha_obra fieldset { border: 1px solid var(--linea); border-radius: 8px; margin: 12px 0 0; padding: 4px 12px 12px; }
dialog.ficha_obra legend { font-size: 13px; font-weight: 600; color: var(--tinta-suave); padding: 0 4px; }
dialog.ficha_obra textarea { width: 100%; font: inherit; padding: 8px; border: 1px solid var(--linea); border-radius: 6px; box-sizing: border-box; }
dialog.ficha_obra > form > label.ancho { display: block; margin-top: 12px; }
dialog.ficha_obra p.acciones { display: flex; gap: 14px; align-items: center; }
dialog.ficha_obra p.acciones button.principal { width: auto; padding: 9px 22px; }
/* Los botones rápidos de la planificación: discretos, no como el de «Ficha». */
table.plan_tabla td button.enlace {
  background: none; color: var(--azul); border: 1px solid #b9e0c7; border-radius: 6px;
  padding: 2px 8px; text-decoration: none; font-size: 12px; font-weight: 600; margin-top: 6px;
}
table.plan_tabla td button.enlace:hover { background: #e7f5ec; }
.plan_tabla .rejas_bloque { display: block; margin-top: 8px; padding-top: 6px; border-top: 1px dashed var(--linea); }
.etq_mat.r-pedidas { background: var(--ambar-fondo); color: var(--ambar); }
.etq_mat.r-entregadas { background: #e7f5ec; color: var(--azul); }
.etq_etapa.e-en_instalacion { background: #e3f0fb; color: #1d5b8f; }
.etq_etapa.e-fase2_rejas { background: #efe8fb; color: #5b3a93; }
.plan_tabla td.situ button.secundario.peque { display: block; }
/* 23/09/2026: visita previa del técnico (sin comisión si la hubo). */
.etq_visita { display: inline-block; font-size: 12px; font-weight: 600; padding: 1px 8px; border-radius: 999px; }
.etq_visita.si { background: #eef1f5; color: #3d4b5c; }
.etq_visita.no { background: #e7f5ec; color: var(--azul); }

/* 23/09/2026 — Pedidos de máquinas en Planificación */
.etq_pedido { display: inline-block; font-size: 12px; font-weight: 600; padding: 1px 8px; border-radius: 999px; background: #e7f5ec; color: var(--azul); margin-top: 3px; }
.plan_tabla td.maquina button.principal.peque { display: block; margin-top: 4px; }
dialog.pedido { max-width: 760px; }
dialog.pedido textarea { font-family: inherit; font-size: 14px; width: 100%; }
dialog.pedido .pd_lineas { margin: 4px 0 10px 18px; padding: 0; }
dialog.pedido .pd_lineas li { margin: 2px 0; }
dialog.pedido label.check { display: flex; gap: 6px; align-items: center; font-weight: 600; margin: 6px 0; }
dialog.pedido .aviso { margin: 8px 0; }
.etq_pagado { display: inline-block; font-size: 12px; font-weight: 600; padding: 1px 8px; border-radius: 999px; background: #fff4d6; color: #7a5200; margin-top: 3px; cursor: help; }
.etq_cert { display: inline-block; font-size: 12px; font-weight: 600; padding: 1px 8px; border-radius: 999px; background: #e6f0ff; color: #1d4f91; margin-top: 3px; cursor: help; }
dialog.pedido .pd_factura { margin: 8px 0; padding: 8px 10px; border-radius: 8px; font-weight: 600; font-size: 14px; }
dialog.pedido .pd_factura.igual { background: #e9f6ef; color: var(--verde); }
dialog.pedido .pd_factura.distinto { background: #fdecec; color: var(--rojo); }
dialog.pedido .pd_factura.sin_datos, dialog.pedido .pd_factura.sin_factura { background: #fff4d6; color: #7a5200; }
dialog.pedido label.check { justify-content: flex-start; text-align: left; }
dialog.pedido label.check input[type="checkbox"] { width: auto; flex: none; margin: 0; }

/* 24/09/2026: zonas de derribo (casillas) */
.campo_zonas { display: flex; flex-direction: column; gap: 6px; grid-column: 1 / -1; }
.zonas_check { display: flex; flex-wrap: wrap; gap: 6px 14px; }
.zonas_check label.check { display: inline-flex; gap: 6px; align-items: center; font-weight: 500; margin: 0; }
.zonas_check label.check input[type="checkbox"] { width: auto; flex: none; margin: 0; }
.campo_zonas.apagado { opacity: .45; }

/* ---------------------------------------------------- Agenda de operarios (25/09/2026) */
.agenda_main { padding: 16px 20px 32px; max-width: none; }
.ag_barra { display: flex; flex-wrap: wrap; align-items: center; gap: 10px; margin-bottom: 12px; }
.ag_barra #sem_titulo { font-size: 16px; min-width: 250px; text-align: center; }
.ag_barra button.secundario { width: auto; padding: 6px 12px; margin: 0; }
.ag_barra input[type=date], .ag_buscar input { font: inherit; padding: 6px 8px; border: 1px solid var(--linea); border-radius: 6px; width: auto; margin: 0; }
.ag_barra input[type=date] { width: 150px; }
.ag_buscar { display: block; }
.ag_buscar input { width: 280px; max-width: 70vw; }
.ag_check { font-size: 14px; color: var(--tinta-suave); display: flex; gap: 6px; align-items: center; white-space: nowrap; }
.ag_check input { width: auto; margin: 0; }
.ag_dias label, .ag_con label { display: inline-flex; align-items: center; gap: 4px; white-space: nowrap; }
.ag_dias input, .ag_con input { width: auto; margin: 0; }
.ag_barra .hueco { flex: 1; }
.ag_obras { background: var(--papel); border: 1px solid var(--linea); border-radius: var(--radio); padding: 8px 12px; margin-bottom: 12px; box-shadow: var(--sombra); }
.ag_obras_cab { display: flex; align-items: center; gap: 10px; }
.ag_obras_cab .hueco { flex: 1; }
.ag_obras_lista { display: flex; flex-wrap: wrap; gap: 8px; margin-top: 8px; max-height: 170px; overflow-y: auto; }
.ag_obra { font: inherit; font-size: 13px; text-align: left; border: 1px solid var(--linea); border-left: 4px solid #8a99ab; background: #fff; border-radius: 6px; padding: 5px 9px; cursor: grab; max-width: 330px; }
.ag_obra span { display: block; color: var(--tinta-suave); font-size: 12px; }
.ag_obra.e-material_pedido { border-left-color: #c9941c; }
.ag_obra.e-material_en_almacen { border-left-color: #2f7fc1; }
.ag_obra.e-coordinado { border-left-color: var(--marca); }
.ag_obra:hover { background: var(--azul-claro); }
.ag_tabla { background: var(--papel); border: 1px solid var(--linea); border-radius: var(--radio); overflow: auto; max-height: calc(100vh - 230px); box-shadow: var(--sombra); }
table.agenda { border-collapse: separate; border-spacing: 0; width: 100%; table-layout: fixed; min-width: 900px; }
table.agenda th, table.agenda td { border-right: 1px solid var(--linea); border-bottom: 1px solid var(--linea); vertical-align: top; }
table.agenda thead th { position: sticky; top: 0; z-index: 3; background: var(--apagado); font-size: 13px; padding: 6px; text-align: left; }
table.agenda thead th span { display: block; font-weight: 400; color: var(--tinta-suave); }
table.agenda thead th.hoy { background: #d7efdf; }
table.agenda th.op { position: sticky; left: 0; z-index: 2; background: #f8fafc; width: 150px; font-size: 13px; padding: 6px 8px; text-align: left; }
table.agenda thead th.op { z-index: 4; }
table.agenda th.op.baja { color: var(--tinta-suave); text-decoration: line-through; }
table.agenda th.finde, table.agenda td.finde { width: 11%; }
td.celda { padding: 4px; min-height: 48px; height: 52px; position: relative; cursor: cell; }
td.celda.hoy { background: #f5fbf7; }
td.celda.sobre { background: var(--azul-claro); outline: 2px dashed var(--marca); outline-offset: -3px; }
td.celda .mas { position: absolute; right: 3px; bottom: 3px; width: 22px; height: 22px; padding: 0; border-radius: 50%; border: 1px solid var(--linea); background: #fff; color: var(--tinta-suave); font-size: 15px; line-height: 1; cursor: pointer; opacity: 0; }
td.celda:hover .mas { opacity: 1; }
.tarea { background: #fff; border: 1px solid #cfd8e3; border-left: 3px solid #8a99ab; border-radius: 5px; padding: 3px 6px; margin: 0 0 4px; font-size: 12px; line-height: 1.3; cursor: pointer; box-shadow: 0 1px 1px rgba(0,0,0,.04); }
.tarea.con_of { border-left-color: var(--marca); }
/* 29/09/2026: soltar una tarjeta encima de otra la pone delante (orden del día) */
.tarea.delante { box-shadow: 0 -3px 0 var(--marca); }
.tarea .cab { display: flex; gap: 6px; align-items: baseline; margin-bottom: 1px; }
.tarea .cab .of { font-size: 11px; color: var(--azul); font-weight: 600; }
.tarea .txt { white-space: pre-line; overflow: hidden; display: -webkit-box; -webkit-line-clamp: 5; -webkit-box-orient: vertical; word-break: break-word; }
.tarea.aus { font-weight: 700; text-align: center; letter-spacing: .02em; }
.tarea.aus_baja { background: #fdecec; border-color: #f0c4c4; border-left-color: var(--rojo); color: var(--rojo); }
.tarea.aus_vacaciones { background: #e6f0fa; border-color: #c3d8ee; border-left-color: #2f7fc1; color: #1d5b8f; }
.tarea.aus_otra { background: var(--apagado); color: var(--tinta-suave); }
.tarea:hover { border-color: var(--marca); }
/* 28/09/2026: las obras (no se avisa al cliente) en naranja */
.tarea.obra { background: #fff4e6; border-color: #f0cfa3; border-left-color: #d9822b; }
.tarea.obra:hover { border-color: #d9822b; }
.tarea .cab .obra_tag { font-size: 10px; font-weight: 700; letter-spacing: .04em; color: #fff; background: #d9822b; border-radius: 3px; padding: 0 4px; }
.obra_leyenda { color: #b8661a; }
.movil .trabajo.es_obra { border-left-color: #d9822b; background: #fff8ef; }
.movil .obra_tag { font-size: 11px; font-weight: 700; letter-spacing: .04em; color: #fff; background: #d9822b; border-radius: 3px; padding: 1px 5px; }
body.colocando td.celda { cursor: copy; }
body.colocando td.celda:hover { background: var(--azul-claro); }
.ag_rapidos { display: flex; gap: 8px; flex-wrap: wrap; }
.ag_rapidos button { margin: 0; }
.ag_dias, .ag_con { display: flex; flex-wrap: wrap; gap: 4px 14px; margin: 4px 0 10px; font-size: 13px; }
.ag_con { max-height: 120px; overflow-y: auto; border: 1px solid var(--linea); border-radius: 6px; padding: 6px 8px; }
dialog.ficha_obra.ancha { max-width: 900px; }
.ag_ops { display: flex; flex-direction: column; gap: 6px; max-height: 55vh; overflow-y: auto; margin-top: 10px; }
.ag_op { display: flex; gap: 6px; align-items: center; flex-wrap: wrap; }
.ag_op.baja { opacity: .6; }
.ag_op input { font: inherit; padding: 5px 8px; border: 1px solid var(--linea); border-radius: 6px; }
.ag_op .op_nombre { flex: 1; min-width: 160px; }
.ag_op .op_tel { width: 120px; }
.ag_op button.peque { margin: 0; }
.ag_nuevo { display: flex; gap: 8px; margin-top: 12px; }
.ag_nuevo input { flex: 1; font: inherit; padding: 6px 8px; border: 1px solid var(--linea); border-radius: 6px; }
.ag_nuevo button { width: auto; margin: 0; }
.ag_url { width: 100%; font: inherit; font-size: 13px; padding: 8px; border: 1px solid var(--linea); border-radius: 6px; }
a.boton { display: inline-block; padding: 8px 14px; border-radius: 6px; border: 1px solid #c9d2db; text-decoration: none; color: var(--azul); font-weight: 600; }
button.peligro, .enlace.peligro { color: var(--rojo); }
@media (max-width: 700px) {
  .agenda_main { padding: 10px; }
  .ag_barra #sem_titulo { min-width: 0; flex-basis: 100%; order: -1; text-align: left; }
}
@media print {
  header.barra, .ag_barra, .ag_obras, .mis_nota, #aviso, td.celda .mas { display: none !important; }
  .ag_tabla { max-height: none; overflow: visible; box-shadow: none; }
  table.agenda { min-width: 0; }
  .tarea .txt { -webkit-line-clamp: unset; }
}

/* ---------------------------------------------------- El móvil del operario */
.movil { max-width: 560px; margin: 0 auto; padding: 12px 14px 40px; }
.movil h1 { font-size: 20px; margin: 8px 0 2px; }
.movil .dia { margin-top: 18px; }
.movil .dia h2 { font-size: 15px; margin: 0 0 8px; color: var(--tinta-suave); }
.movil .dia.hoy h2 { color: var(--azul); }
.movil .trabajo { background: var(--papel); border: 1px solid var(--linea); border-left: 4px solid var(--marca); border-radius: var(--radio); padding: 10px 12px; margin-bottom: 10px; box-shadow: var(--sombra); }
.movil .trabajo.aus { border-left-color: var(--rojo); font-weight: 700; }
.movil .trabajo .hora { font-weight: 700; margin-right: 8px; }
.movil .trabajo .txt { white-space: pre-line; margin-top: 4px; }
.movil .trabajo .obra { margin-top: 8px; font-size: 14px; }
.movil .trabajo .obra a { color: var(--azul); font-weight: 600; }
.movil .trabajo .con { margin-top: 6px; font-size: 13px; color: var(--tinta-suave); }
.movil .nada { color: var(--tinta-suave); font-size: 14px; }
.campos > div.ancho { grid-column: 1 / -1; }

/* Agenda: avisos del planificador (25/09/2026) */
table.agenda thead th .fest { color: var(--rojo); font-weight: 600; font-size: 11px; }
table.agenda thead th .libres { color: var(--verde); font-size: 11px; cursor: help; }
table.agenda thead th.festivo, td.celda.festivo { background: #fbf3f3; }
td.celda.av_celda.av_rojo { box-shadow: inset 0 0 0 2px #e5a3a3; }
td.celda.av_celda.av_ambar { box-shadow: inset 0 0 0 2px #e9cf8f; }
.tarea .cab .pers { font-size: 11px; color: var(--tinta-suave); }
.tarea .cab .parte { font-size: 11px; color: var(--tinta-suave); border: 1px solid var(--linea); border-radius: 4px; padding: 0 3px; }
.tarea .cab .parte.hecho { color: var(--verde); border-color: #bfe3d0; background: #e9f6ef; }
.tarea .cab .av { margin-left: auto; font-weight: 700; font-size: 11px; width: 16px; height: 16px; border-radius: 50%; display: inline-flex; align-items: center; justify-content: center; color: #fff; cursor: help; }
.tarea .cab .av.av_rojo { background: var(--rojo); }
.tarea .cab .av.av_ambar { background: #c9941c; }
.tarea .cab .av.av_info { background: #7a8a9c; }
.ag_obra .est { color: var(--azul); }
.ag_obra.e-fase2 { border-left-color: #8b5cc4; }
.ag_avisos { background: var(--papel); border: 1px solid var(--linea); border-radius: var(--radio); padding: 8px 12px; margin-bottom: 12px; box-shadow: var(--sombra); font-size: 13px; }
.ag_avisos ul { margin: 6px 0 0; padding-left: 18px; max-height: 130px; overflow-y: auto; }
.ag_avisos li { margin: 2px 0; }
.ag_avisos li[data-uid] { cursor: pointer; }
.ag_avisos li.av_rojo { color: var(--rojo); }
.ag_avisos li.av_ambar { color: var(--ambar); }
.ag_avisos li.av_info { color: var(--tinta-suave); }

/* El parte en el móvil (25/09/2026) */
.movil .trabajo .b_parte { margin-top: 10px; width: 100%; }
.movil .dia.pasado h2 { color: var(--ambar); }
.parte_movil h2 { font-size: 18px; margin: 4px 0; }
.parte_movil .bloque, .parte_movil .fotos { background: var(--papel); border: 1px solid var(--linea); border-radius: var(--radio); padding: 10px 12px; margin: 12px 0; }
.parte_movil .cab_f { display: flex; align-items: center; justify-content: space-between; }
.parte_movil .boton_f { display: inline-block; padding: 6px 12px; border: 1px solid #c9d2db; border-radius: 6px; color: var(--azul); font-weight: 600; cursor: pointer; }
.parte_movil .minis { display: flex; flex-wrap: wrap; gap: 6px; margin-top: 8px; }
.parte_movil img.mini { width: 72px; height: 72px; object-fit: cover; border-radius: 6px; border: 1px solid var(--linea); }
.parte_movil .subiendo { font-size: 13px; color: var(--tinta-suave); }
.parte_movil .error { font-size: 13px; color: var(--rojo); }
.parte_movil .equipo { border-top: 1px solid var(--linea); padding: 8px 0; }
.parte_movil .equipo:first-child { border-top: 0; }
.parte_movil .equipo .b_placa { width: auto; margin: 4px 0; }
.parte_movil .lectura { display: block; font-size: 13px; color: var(--verde); margin: 2px 0 4px; }
.parte_movil .tres { display: grid; grid-template-columns: 1fr 1fr; gap: 6px; }
.parte_movil .tres input:last-child { grid-column: 1 / -1; }
.parte_movil input, .parte_movil textarea { font: inherit; padding: 8px; border: 1px solid var(--linea); border-radius: 6px; width: 100%; box-sizing: border-box; }
.parte_movil label.chk { display: flex; gap: 8px; align-items: flex-start; margin: 8px 0; }
.parte_movil label.chk input { width: auto; margin-top: 3px; }
.parte_movil label.chk.grande { font-size: 16px; background: var(--azul-claro); padding: 10px; border-radius: var(--radio); }
.parte_movil label.num, .parte_movil label.larga { display: block; margin: 8px 0; }
.parte_movil label.num span, .parte_movil label.larga span { display: block; font-size: 13px; color: var(--tinta-suave); margin-bottom: 3px; }
.parte_movil canvas.firma { width: 100%; height: 160px; border: 1px dashed #9aa8b8; border-radius: 6px; background: #fff; touch-action: none; }
.parte_movil #p_guardar { width: 100%; padding: 12px; font-size: 16px; }
/* 29/09/2026: el parte guiado (paso a paso) */
.parte_movil .botones_f { display: inline-flex; gap: 6px; flex-wrap: wrap; justify-content: flex-end; }
.parte_movil .pasos_barra { height: 6px; background: var(--apagado); border-radius: 3px; overflow: hidden; margin: 10px 0 4px; }
.parte_movil .pasos_barra span { display: block; height: 100%; background: var(--marca); }
.parte_movil .paso_titulo { font-size: 16px; margin: 6px 0 10px; }
.parte_movil .pasos_botones { display: grid; grid-template-columns: 1fr 1.6fr; gap: 10px; margin: 16px 0 24px; }
.parte_movil .pasos_botones button { padding: 12px; font-size: 16px; width: 100%; }
.parte_movil button.ancho { width: 100%; padding: 14px; font-size: 17px; margin: 6px 0; }
.parte_movil button.opcion { display: block; width: 100%; text-align: left; padding: 12px 14px; margin: 8px 0; font-size: 16px;
  background: var(--papel); color: var(--tinta); border: 1px solid #c9d2db; border-radius: var(--radio); cursor: pointer; }
.parte_movil button.opcion.elegida { border: 2px solid var(--marca); background: var(--azul-claro); font-weight: 600; }
.parte_movil .opciones_fila { display: grid; grid-template-columns: 1fr 1fr 1fr; gap: 6px; }
.parte_movil .opciones_fila button.opcion { text-align: center; padding: 10px 4px; font-size: 14px; margin: 6px 0; }
.parte_movil p.grande { font-size: 17px; }
.parte_movil .resena { background: var(--azul-claro); border-radius: var(--radio); padding: 12px 14px; margin: 8px 0 14px; }
.parte_movil .resena .frase { font-style: italic; background: var(--papel); border-left: 4px solid var(--marca); padding: 8px 10px; border-radius: 4px; }
.parte_movil .resena img.qr { display: block; width: min(78vw, 300px); height: auto; margin: 12px auto 4px; background: #fff; padding: 8px; border-radius: 6px; image-rendering: pixelated; }
.parte_movil .centro { text-align: center; }
.parte_movil ul.repaso { list-style: none; padding: 0; margin: 8px 0; }
.parte_movil ul.repaso li { padding: 6px 0; border-bottom: 1px solid var(--linea); }
.parte_movil ul.repaso li.falta { color: var(--rojo); }
.parte_movil ul.repaso li.hecho .enlace { color: var(--verde); }
.parte_movil .resumen_cliente ul { margin: 6px 0 0; padding-left: 18px; }

.ag_parte { border: 1px solid var(--linea); border-radius: var(--radio); padding: 8px 12px; margin-top: 12px; background: #fbfcfd; }
.ag_parte h3 { font-size: 14px; margin: 2px 0 6px; }
.ag_parte .ok { color: var(--verde); }
.ag_parte .malo { color: var(--rojo); }
.ag_parte table { border-collapse: collapse; font-size: 13px; margin: 6px 0; }
.ag_parte th, .ag_parte td { border: 1px solid var(--linea); padding: 3px 6px; text-align: left; }
.ag_parte .fotos { display: flex; flex-wrap: wrap; gap: 6px; margin-top: 6px; }
.ag_parte .fotos img, .ag_parte .firma img { width: 90px; height: 90px; object-fit: cover; border-radius: 6px; border: 1px solid var(--linea); }
.ag_parte .firma img { width: 200px; height: 74px; object-fit: contain; background: #fff; }

/* 25/09/2026: certificados de instalación (pestaña de Planificación) */
.cert_tabla td.cert_acciones { text-align: right; }
.cert_tabla td.cert_acciones > * { margin: 3px 0 3px 8px; vertical-align: middle; }
.cert_tabla td.cert_acciones button.peque { margin-top: 3px; }
a.boton_enlace { display: inline-block; text-decoration: none; padding: 5px 10px; font-size: 13px; border-radius: 6px;
  border: 1px solid var(--marca); color: var(--verde); background: #fff; white-space: nowrap; }
a.boton_enlace:hover { background: #e9f6ef; }

/* 26/09/2026: el detalle de un trabajo en el móvil del operario */
.detalle_movil h2 { font-size: 18px; margin: 8px 0 2px; }
.detalle_movil h3 { font-size: 15px; margin: 18px 0 6px; color: var(--azul); }
.detalle_movil .obra, .detalle_movil .txt, .detalle_movil .resumen_cw { background: var(--papel); border: 1px solid var(--linea); border-radius: var(--radio); padding: 10px 12px; margin: 8px 0; overflow-wrap: anywhere; }
.detalle_movil .con_lista { margin: 0; padding-left: 18px; }
.detalle_movil .con_lista li { margin: 4px 0; }
.detalle_movil dl.hoja { display: grid; grid-template-columns: minmax(110px, 40%) 1fr; gap: 4px 10px; margin: 0; background: var(--papel); border: 1px solid var(--linea); border-radius: var(--radio); padding: 10px 12px; }
.detalle_movil dl.hoja dt { color: var(--tinta-suave); font-size: 13px; overflow-wrap: anywhere; }
.detalle_movil dl.hoja dd { margin: 0; font-weight: 600; overflow-wrap: anywhere; }
.detalle_movil .fotos_cliente { display: grid; grid-template-columns: repeat(auto-fill, minmax(92px, 1fr)); gap: 6px; }
.detalle_movil .fotos_cliente img { width: 100%; height: 92px; object-fit: cover; border-radius: 6px; display: block; }
.trabajo .b_detalle { margin-top: 8px; width: 100%; }
/* 26/09/2026: oficial / ayudante y oficios en la página de operarios */
th.op .rol_ay { display: block; font-size: 11px; font-weight: 400; color: var(--tinta-suave); }
.ag_op .op_rol { width: auto; }
.ag_op details.op_oficios { flex: 1 1 100%; font-size: 13px; }
.ag_op details.op_oficios summary { cursor: pointer; color: var(--azul); }
.ag_op details.op_oficios .chk { display: inline-flex; gap: 4px; align-items: center; margin: 2px 12px 2px 0; }
/* 26/09/2026: nº de cliente de AgilSAT y «¿es la factura final?» en Planificación */
.plan_tabla td.cli_agil { white-space: nowrap; font-variant-numeric: tabular-nums; }
.plan_tabla .posible_final { display: block; margin-top: 6px; padding: 6px 8px; border-radius: 6px; background: var(--ambar-fondo); color: var(--ambar); font-size: 12.5px; }
.plan_tabla .posible_final button { margin-left: 4px; }

/* 28/09/2026 (David): en Planificación tienen que caber todas las columnas sin
   mover la tabla a los lados. Se usa todo el ancho de la pantalla, las celdas son
   más estrechas y el nº de la obra va dentro de la celda del cliente. */
main.mis.plan { max-width: 1760px; padding: 0 16px; }
table.plan_tabla:not(.cert_tabla) { font-size: 13px; }
table.plan_tabla:not(.cert_tabla) th, table.plan_tabla:not(.cert_tabla) td { padding-left: 6px; padding-right: 6px; }
table.plan_tabla:not(.cert_tabla) td button { font-size: 12.5px; padding: 4px 9px; }
.plan_tabla td.cli { min-width: 170px; max-width: 260px; }
.plan_tabla td.cli span.ref_obra { display: block; font-size: 12px; color: var(--tinta-suave); font-variant-numeric: tabular-nums; white-space: nowrap; }
.plan_tabla td.cli span.ref_obra .num_obra { font-weight: 600; color: var(--tinta); }
.plan_tabla td.cli span.ref_obra span { display: inline; font-size: inherit; }

/* 28/09/2026: combinado con dos instalaciones de conductos (zona día / zona noche). */
.caja_zonas { margin-top: 12px; padding-top: 10px; border-top: 1px dashed var(--linea); }
.caja_zonas .campos { margin-top: 8px; }

/* ---- 28/09/2026: Técnicos · planificación de visitas ---- */
.tec_elegir { display: inline-flex; align-items: center; gap: 6px; font-weight: 600; }
.tec_elegir select { font: inherit; font-weight: 600; padding: 6px 10px; border: 2px solid var(--marca); border-radius: 6px; width: auto; margin: 0; }
.tec_resumen { margin: 0 0 8px; font-size: 13px; }
.tec_resumen:empty { display: none; }
.tec_cuerpo { display: grid; grid-template-columns: minmax(0, 1fr) 260px; gap: 12px; align-items: start; }
table.agenda.tec { min-width: 760px; }
table.agenda.tec th.op.hora_fila { width: 58px; font-weight: 600; color: var(--tinta-suave); }
table.agenda.tec thead th.op { width: 58px; }
table.agenda.tec td.celda { height: 64px; }
table.agenda.tec td.celda.comida { background: #fafbfc; }
table.agenda.tec td.celda.ocupada { background: #f3f7fb; }
.tec_v .cab .tec_movil { margin-left: auto; font-size: 11px; }
.tec_v .cab .tec_movil.no { color: #9a6700; background: #fff4d6; border: 1px solid #f0d79a; border-radius: 4px; padding: 0 4px; font-weight: 600; }
.tec_v.sin_movil { border-left-color: #d4a017; }
.tec_v .txt b { font-weight: 700; }
.tec_sigue { font-size: 11px; color: var(--tinta-suave); padding: 2px 6px; border-left: 3px solid #b8c7d9; margin-bottom: 3px; cursor: pointer; white-space: nowrap; overflow: hidden; text-overflow: ellipsis; }
.tec_pendientes { background: var(--papel); border: 1px solid var(--linea); border-radius: var(--radio); padding: 8px; box-shadow: var(--sombra); max-height: calc(100vh - 230px); overflow: auto; }
.tec_pendientes.sobre { outline: 2px dashed var(--marca); outline-offset: -3px; background: var(--azul-claro); }
.tec_pend_cab { display: flex; align-items: center; gap: 8px; margin-bottom: 8px; }
.tec_pend_cab button { margin: 0 0 0 auto; width: auto; padding: 4px 10px; }
.tec_leyenda_no { color: #9a6700; font-weight: 600; }
@media (max-width: 900px) { .tec_cuerpo { grid-template-columns: 1fr; } }
.detalle_movil .fotos_cliente .foto_cliente { display: block; text-decoration: none; }
.detalle_movil .fotos_cliente .que { display: block; font-size: 11px; line-height: 1.2; color: var(--tinta-suave); margin-top: 2px; }
.detalle_movil .video_cliente { margin: 6px 0 10px; }
.detalle_movil .video_cliente video { width: 100%; max-height: 60vh; border-radius: 8px; background: #000; display: block; }
.detalle_movil .video_cliente .que { display: block; font-size: 12px; color: var(--tinta-suave); margin-top: 2px; }

/* ---------------------------------------------- Avisos (28/09/2026) ------ */
.av_listas button { padding: 6px 12px; }
.av_estados { display: flex; align-items: center; gap: 14px; margin: 0 0 8px; flex-wrap: wrap; }
.av_estados[hidden] { display: none; }
.av_buscar { display: flex; gap: 8px; margin: 0 0 10px; }
.av_buscar[hidden] { display: none; }
.av_buscar input { flex: 1; margin: 0; }
.av_buscar button { width: auto; margin: 0; }
.av_tabla tbody tr { cursor: pointer; }
.av_tabla tbody tr:hover td { filter: brightness(.97); }
.av_tabla td.av_det { max-width: 380px; }
.av_sub { display: block; color: var(--tinta-suave); font-size: 12px; }
.av_rojo { color: var(--rojo); font-weight: 600; }
.av_lista_tag { display: block; font-size: 11px; color: var(--tinta-suave); font-weight: 600; }
.av_urg_tag { color: #fff; background: var(--rojo); border-radius: 4px; padding: 0 5px; font-size: 11px; }
.av_e_pendiente td { background: #fff; }
.av_e_propuesta td { background: #fff7e0; }
.av_prop_tag { color: #8a5a00; background: #ffe7a3; border-radius: 4px; padding: 0 5px; font-size: 11px; font-weight: 600; }
.av_ficha { white-space: pre-wrap; font-size: 13px; background: #f7f9fb; border: 1px solid var(--borde, #dde3ea); border-radius: 6px; padding: 8px 10px; margin: 0; }
.av_fotos { display: flex; flex-wrap: wrap; gap: 6px 14px; font-size: 13px; }
.av_fotos a { white-space: nowrap; }
.av_e_agendado td { background: #e3f4e6; }
.av_e_pieza td { background: #e2ebf8; }
.av_e_hecho td { background: #d4edbc; }
.av_e_anulado td { background: #eceff3; color: #7b8794; }
tr.av_urg td:first-child { box-shadow: inset 4px 0 0 var(--rojo); }
tr.av_pasado td { background: #fff4d6; }
.av_ley { display: inline-block; padding: 0 6px; border-radius: 4px; border: 1px solid var(--linea); font-size: 12px; }
.av_ley.av_e_pendiente { background: #fff; }
.av_ley.av_e_propuesta { background: #fff7e0; }
.av_ley.av_e_agendado { background: #e3f4e6; }
.av_ley.av_e_pieza { background: #e2ebf8; }
.av_ley.av_e_hecho { background: #d4edbc; }
.av_ley.av_e_anulado { background: #eceff3; }
.av_ley.av_urg { border-left: 4px solid var(--rojo); }
.av_pieza { border: 1px dashed #9fb5d6; border-radius: 6px; padding: 8px; background: #f3f7fd; }
/* Los avisos por agendar en Técnicos y en Operarios */
.tec_avisos_cab { display: flex; align-items: center; gap: 8px; margin: 14px 0 6px; padding-top: 8px; border-top: 1px solid var(--linea); }
.tec_avisos_cab a { margin-left: auto; font-size: 12px; }
.tec_aviso, .ag_aviso { font: inherit; font-size: 13px; text-align: left; border: 1px solid var(--linea); border-left: 4px solid #8a99ab; background: #fff; border-radius: 6px; padding: 5px 8px; cursor: grab; margin-bottom: 6px; display: block; width: 100%; }
.tec_aviso span, .ag_aviso span { display: block; color: var(--tinta-suave); font-size: 12px; }
.tec_aviso.urg, .ag_aviso.urg { border-left-color: var(--rojo); }
.tec_aviso:hover, .ag_aviso:hover { background: var(--azul-claro); }
.ag_aviso { width: auto; max-width: 330px; margin: 0; }
.ag_avisos_rep .ag_obras_lista { max-height: 150px; }

/* ---------------------------------------------------- Presupuestos hechos fuera (29/09/2026) --- */
main.ot_main { max-width: 1680px; padding: 0 16px; }
.ot_zona { display: flex; flex-direction: column; align-items: center; justify-content: center; gap: 6px; text-align: center;
  min-height: 170px; border: 2px dashed #b9c6d3; border-radius: var(--radio); background: var(--fondo); cursor: pointer; padding: 24px; color: var(--tinta-suave); }
.ot_zona b { font-size: 18px; color: var(--tinta); }
.ot_zona.encima { border-color: var(--marca); background: var(--azul-claro); }
.ot_zona.ocupado { opacity: .55; pointer-events: none; }
.ot_zona:focus { outline: 2px solid var(--azul); outline-offset: 2px; }
.ot_revisar { display: grid; grid-template-columns: minmax(300px, 34%) minmax(0, 1fr) 300px; gap: 16px; align-items: start; }
@media (max-width: 1250px) { .ot_revisar { grid-template-columns: minmax(0, 1fr) 300px; } .ot_vista { grid-column: 1 / -1; } }
@media (max-width: 800px) { .ot_revisar { grid-template-columns: 1fr; } }
/* 01/10/2026: «Presupuesto libre» (sin original): la ficha ocupa el sitio del documento. */
.ot_revisar.libre { grid-template-columns: minmax(0, 1fr) 300px; }
@media (max-width: 800px) { .ot_revisar.libre { grid-template-columns: 1fr; } }
.ot_libre { margin-top: 14px; display: flex; align-items: center; gap: 10px; flex-wrap: wrap; }
.ot_vista section { position: sticky; top: 76px; }
.ot_vista iframe { width: 100%; height: calc(100vh - 170px); min-height: 420px; border: 1px solid var(--linea); border-radius: 6px; background: #fff; }
.ot_vista img { max-width: 100%; border: 1px solid var(--linea); border-radius: 6px; }
@media (max-width: 1250px) { .ot_vista section { position: static; } .ot_vista iframe { height: 60vh; } }
.ot_resumen section { position: sticky; top: 76px; }
.ot_resumen hr { border: 0; border-top: 1px dashed var(--linea); margin: 10px 0; }
.ot_bajar, .ot_add { float: right; font-size: 13px !important; text-transform: none; letter-spacing: 0; }
section.tarjeta > h2 .ot_add, section.tarjeta > h2 .ot_bajar { font-weight: 600; }
.ot_ficha textarea { width: 100%; font: inherit; font-size: 14px; padding: 7px 9px; border: 1px solid #c3cdd9; border-radius: 6px; box-sizing: border-box; resize: vertical; }
.ot_opcion + .ot_opcion { margin-top: 18px; padding-top: 14px; border-top: 2px solid var(--linea); }
.ot_opcab { display: flex; gap: 8px; align-items: center; margin-bottom: 8px; }
.ot_opcab .ot_letra { width: 48px; text-align: center; font-weight: 700; }
.ot_opcab .ot_optit { flex: 1; }
.ot_cap { border: 1px solid var(--linea); border-radius: 6px; padding: 10px; margin: 10px 0; }
.ot_cap.mal { border-color: #e5a0a0; background: #fff8f8; }
.ot_capcab { display: flex; gap: 8px; align-items: center; margin-bottom: 6px; }
.ot_capcab .ot_num { font-weight: 700; color: var(--azul); }
.ot_capcab .ot_captit { flex: 1; font-weight: 600; }
.ot_capcab .ot_suma { font-weight: 700; white-space: nowrap; font-variant-numeric: tabular-nums; }
.ot_cap .ot_doc { margin-left: 12px; }
.ot_cap > .ot_add { float: none; }
table.ot_tabla { width: 100%; border-collapse: collapse; }
table.ot_tabla th { text-align: left; font-size: 11px; font-weight: 600; color: var(--tinta-suave); text-transform: uppercase; letter-spacing: .04em; padding: 4px; border-bottom: 1px solid var(--linea); }
table.ot_tabla td { padding: 3px 4px; vertical-align: top; }
table.ot_tabla th.n, table.ot_tabla td.n { text-align: right; width: 92px; }
table.ot_tabla td.n input { text-align: right; }
table.ot_tabla td:nth-child(3) { width: 64px; }
table.ot_tabla td input { padding: 5px 6px; font-size: 13px; }
table.ot_tabla td textarea { font-size: 13px !important; padding: 5px 6px !important; }
table.ot_tabla tr.mal td { background: #fdecec; }
table.ot_tabla td:last-child { width: 24px; text-align: center; }
button.secundario.ot_ancho { width: 100%; }

/* ---------------------------------------------------- Almacén y coche (29/09/2026) --- */
.tr_salida { display: flex; flex-wrap: wrap; gap: 10px 18px; align-items: flex-end; }
.tr_salida > label { flex: 0 0 auto; }
.tr_salida #lab_tr_matricula { flex: 1 1 200px; }
.tr_salida .pista { flex-basis: 100%; color: var(--ambar); }
.tarea .salida { font-size: 11px; color: var(--tinta-suave); margin-top: 2px; border-top: 1px dashed var(--linea); padding-top: 1px; }
.trabajo .salida { font-size: 14px; margin: 4px 0; padding: 4px 8px; background: var(--azul-claro); border-radius: 6px; color: var(--verde); font-weight: 600; }
/* 29/09/2026: «directo a obra» = siempre sin coche (el Sí/No queda fijo). */
.sino button:disabled { opacity: .55; cursor: not-allowed; }
.sino button[aria-pressed="true"]:disabled { opacity: .8; }
/* 29/09/2026: cuestionario al cliente por WhatsApp (avisos) */
#dlg_cuestionario textarea#cq_texto { width: 100%; box-sizing: border-box; font: inherit; font-size: 14px; }

/* 30/09/2026: control horario (móvil y /horas), fotos de la oficina y obras en curso */
.horario_movil { background: #fff; border: 1px solid #dfe6df; border-radius: 12px; padding: 12px 14px; margin: 0 0 14px; }
.horario_movil h2 { margin: 0 0 8px; font-size: 18px; }
.horario_movil .h_dia select { width: 100%; font-size: 16px; padding: 6px; margin: 4px 0 10px; }
.horario_movil .h_tramos { display: grid; grid-template-columns: 1fr 1fr; gap: 10px; }
.horario_movil .h_tramos > div { display: flex; flex-direction: column; gap: 6px; }
.horario_movil .h_tramos label { display: flex; flex-direction: column; font-size: 14px; }
.horario_movil input[type=time] { font-size: 18px; padding: 6px; }
.horario_movil .h_nota { display: flex; flex-direction: column; font-size: 14px; margin: 10px 0; }
.horario_movil .h_nota input { font-size: 16px; padding: 6px; }
.horario_movil .aviso_h { color: #9a5b00; font-weight: 600; }
.horas_main { padding: 12px 16px 40px; }
.horas_tabla td, .horas_dias td { vertical-align: middle; }
.horas_tabla tr.sel { background: #eef8f1; }
.horas_dias tr.especial { background: #f6f6f3; }
.horas_dias tr.falta { background: #fff4e0; }
.horas_dias tr.aus { color: #777; }
.horas_dias .hora_in { width: 4.2em; text-align: center; }
#detalle h2 { margin: 18px 0 8px; }
.ag_fotos_of { margin: 10px 0; padding: 8px 10px; border: 1px dashed #c9d6cc; border-radius: 8px; display: flex; flex-direction: column; gap: 6px; }
.ag_fotos_of .fotos_of { display: flex; flex-wrap: wrap; gap: 8px; }
.ag_fotos_of .foto_of { display: flex; flex-direction: column; align-items: center; }
.ag_fotos_of .foto_of img { width: 96px; height: 72px; object-fit: cover; border-radius: 6px; border: 1px solid #ddd; }
.ag_fotos_of .boton_archivo { align-self: flex-start; cursor: pointer; }
.ag_obra.ag_curso { border-left-color: #6a4c93; }
.horario_movil .h_partes { margin: 4px 0 10px; }
.horario_movil .h_otras { display: flex; flex-direction: column; gap: 6px; margin-bottom: 10px; }
.horario_movil .h_fila { display: flex; align-items: center; gap: 8px; }
.horario_movil #h_horas { width: 5em; font-size: 18px; padding: 6px; text-align: center; }
.horario_movil #h_que, .horario_movil #h_nota { font-size: 16px; padding: 6px; }
.horas_dias .partes_dia { font-size: 12px; color: #555; }

/* 30/09/2026 — Entregas de Mauricio (reparto) */
.ag_entrega { margin: 10px 0; padding: 8px 10px; border: 1px dashed #d8c7a0; border-radius: 8px; display: flex; flex-direction: column; gap: 6px; background: #fffaf0; }
.ag_entrega .ent_fila { display: flex; flex-wrap: wrap; gap: 8px; align-items: center; }
.ag_entrega .ent_fila input[type=text] { flex: 1 1 200px; min-width: 0; }
.agenda .cab .ent { background: #fff1d6; color: #7a5200; border-radius: 4px; padding: 0 4px; font-size: 11px; }
.agenda .cab .ent.hecho { background: #e3f3e6; color: #1f6b33; }
.agenda .entrega_rep { margin: 3px 0; padding: 3px 6px; border-radius: 6px; background: #fff1d6; border: 1px solid #ecd6a6; font-size: 12px; cursor: pointer; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
.agenda .entrega_rep.hecha { background: #e3f3e6; border-color: #b9dcc0; color: #1f6b33; }
.reparto_movil { margin: 10px 0 16px; }
.reparto_movil h2 .cuenta { font-size: 14px; font-weight: normal; color: #666; }
.reparto_movil ol.entregas { list-style: none; padding: 0; margin: 0; display: flex; flex-direction: column; gap: 8px; }
.reparto_movil li.entrega { display: grid; grid-template-columns: 34px 1fr; gap: 6px 10px; padding: 10px; border: 1px solid #e3d3ad; border-radius: 10px; background: #fffaf0; }
.reparto_movil li.entrega .n { font-size: 22px; font-weight: bold; color: #7a5200; text-align: center; }
.reparto_movil li.entrega .q { min-width: 0; overflow-wrap: anywhere; }
.reparto_movil li.entrega button { grid-column: 1 / -1; }
.reparto_movil li.entrega.hecha { background: #eef7ef; border-color: #b9dcc0; opacity: .8; }
.reparto_movil li.entrega.hecha .n { color: #1f6b33; }

/* 30/09/2026 — «Avisos de la semana» se puede ocultar */
.ag_avisos #avisos_plegar { margin-left: 8px; font-size: 12px; }
.ag_avisos.plegado { padding-top: 6px; padding-bottom: 6px; }
.ag_avisos .av_rojos { color: var(--rojo); font-weight: bold; }

/* 30/09/2026 — Reparaciones y trabajos sin OF: azul si facturada, verde si cobrada */
.tarea.fact_facturada { background: #e3effb; border-color: #b7d3f0; border-left-color: #2f7fc1; }
.tarea.fact_cobrada { background: #e3f4e8; border-color: #b5dcc0; border-left-color: #2e8b57; }
.tarea .cab .fact { font-size: 10px; font-weight: 700; border-radius: 3px; padding: 0 4px; color: #fff; }
.tarea .cab .fact.fact_facturada { background: #2f7fc1; }
.tarea .cab .fact.fact_cobrada { background: #2e8b57; }
.ag_fact { margin: 10px 0; padding: 8px 10px; border: 1px dashed #b7d3f0; border-radius: 8px; display: flex; flex-direction: column; gap: 6px; background: #f5f9fe; }
.ag_fact .ent_fila { display: flex; flex-wrap: wrap; gap: 8px; align-items: center; }
.ag_fact .ent_fila input[type=text] { flex: 1 1 180px; min-width: 0; }

/* 30/09/2026 (SAT): escalera de Mauricio, parte del técnico en /tecnicos y móvil del técnico */
.pagina_tecnicos .tec_escalera { display: flex; gap: 8px; align-items: flex-start; font-size: 14px; background: #fff8e8; border: 1px solid #f0d9a8; border-radius: 6px; padding: 8px 10px; }
.pagina_tecnicos .tec_escalera input { width: auto; margin-top: 3px; }
.tarea.tec_v .cab .tec_esc { margin-left: 4px; }
.tarea.tec_v .cab .tec_parte { margin-left: 4px; font-size: 11px; padding: 0 5px; border-radius: 3px; background: #eef2f5; color: var(--tinta-suave); }
.tarea.tec_v .cab .tec_parte.ok { background: #2e8b57; color: #fff; }
.tec_parte_of { border: 1px solid var(--linea); border-radius: var(--radio); padding: 8px 12px; margin-top: 10px; background: #fbfcfd; font-size: 14px; }
.tec_parte_of .fotos { display: flex; flex-wrap: wrap; gap: 6px; margin-top: 6px; }
.tec_parte_of .fotos img { width: 80px; height: 80px; object-fit: cover; border-radius: 6px; border: 1px solid var(--linea); }
.tec_enlace { font-size: 13px; }
.aviso.bueno { background: #eaf7ef; color: #1e7a45; border-color: #bfe3cd; }
.tec_movil .trabajo.por_confirmar { border-left-color: var(--ambar); }
.tec_movil .aviso_pc { font-size: 12px; color: #9a6400; }
.tec_movil .b_parte { margin-top: 10px; width: 100%; }
.parte_movil .mini_f { display: inline-flex; flex-direction: column; align-items: center; }
.parte_movil .mini_f .b_quitar { font-size: 12px; }

/* 30/09/2026 — Planificación: parte firmado y factura al cliente */
.fi_cliente { border-color: #b7d3f0; background: #f5f9fe; }
.fi_cliente .boton_archivo { cursor: pointer; }

/* 30/09/2026 — /operarios: añadir persona a un trabajo ya puesto */
.ag_anadir { margin: 10px 0; padding: 8px 10px; border: 1px dashed #c9d6cc; border-radius: 8px; display: flex; flex-direction: column; gap: 6px; background: #f7fbf8; }
.ag_anadir .ent_fila { display: flex; flex-wrap: wrap; gap: 8px; align-items: center; }

/* 01/10/2026 — Parte del operario: documentos al cerrar */
.p_docs { margin: 12px 0; padding: 10px; border: 1px dashed #c9d6cc; border-radius: 10px; background: #f7fbf8; }
.p_docs h4 { margin: 0 0 4px; }
.p_docs ul.p_docs_lista { list-style: none; padding: 0; margin: 6px 0; }
.p_docs ul.p_docs_lista li { margin: 4px 0; overflow-wrap: anywhere; }
.p_docs .boton_archivo { display: inline-block; cursor: pointer; margin: 4px 0; }
.p_docs textarea { width: 100%; box-sizing: border-box; margin: 6px 0; }
.ag_parte .docs_parte a { display: inline-block; margin: 2px 8px 2px 0; }

/* 01/10/2026: el planning de mañana de todos, en el móvil del almacén y del transportista */
.planning_movil { margin: 10px 0 16px; }
.planning_movil summary { font-size: 18px; font-weight: bold; cursor: pointer; padding: 6px 0; }
.planning_movil h2 .cuenta, .planning_movil summary .cuenta { font-size: 14px; font-weight: normal; color: #666; }
.planning_movil .pl_op { border: 1px solid #d6dde6; border-radius: 10px; padding: 8px 10px; margin: 8px 0; background: #f7f9fc; }
.planning_movil .pl_op h3 { margin: 0 0 4px; font-size: 16px; }
.planning_movil .pl_tel { font-size: 14px; font-weight: normal; margin-left: 6px; }
.planning_movil ul.pl_trabajos { list-style: none; padding: 0; margin: 0; }
.planning_movil ul.pl_trabajos li { padding: 6px 0; border-top: 1px dashed #d6dde6; overflow-wrap: anywhere; }
.planning_movil ul.pl_trabajos li:first-child { border-top: 0; }
.planning_movil ul.pl_trabajos li.ausencia { color: #888; font-style: italic; }
.planning_movil .pl_of { font-size: 13px; color: #555; }
.planning_movil .pl_texto { font-size: 14px; margin-top: 2px; }

/* ---- /parametros: qué parámetro se aplica y de dónde sale (01/10/2026, paquete 6) ---- */
.param_main { padding: 12px 16px 40px; max-width: 1400px; margin: 0 auto; }
.param_main h2 { font-size: 18px; margin: 22px 0 6px; }
.param_main h2 .cuenta { font-size: 13px; font-weight: normal; color: var(--tinta-suave); margin-left: 8px; }
.param_main table.resultados { margin-top: 8px; }
.param_main table.resultados td.clave { font-family: ui-monospace, SFMono-Regular, Menlo, Consolas, monospace; font-size: 13px; white-space: nowrap; }
.param_main table.resultados td.desc { color: var(--tinta-suave); font-size: 13px; }
.param_main tr.no_usa td { color: #9aa6b2; }
.param_main tr.no_usa td.desc { font-style: italic; }
.origen { display: inline-block; font-size: 11px; font-weight: 600; border-radius: 4px; padding: 1px 7px; white-space: nowrap; }
.origen.hoja { color: var(--verde); background: #e9f6ef; }
.origen.json { color: #3b5570; background: #eef2f6; }
.origen.codigo { color: var(--ambar); background: var(--ambar-fondo); }
.param_filtros { display: flex; flex-wrap: wrap; gap: 14px; align-items: center; margin: 10px 0 6px; font-size: 14px; }
.param_filtros input[type=search] { font: inherit; padding: 6px 8px; border: 1px solid var(--linea); border-radius: 6px; width: 260px; margin: 0; }
.param_filtros label { display: inline-flex; align-items: center; gap: 6px; margin: 0; white-space: nowrap; font-weight: normal; }
.param_filtros label input[type=checkbox] { width: auto; margin: 0; }

/* 01/10/2026 (paquete 5): versiones, vista previa y borradores. */
.etq_sustituido { display: inline-block; font-size: 12px; font-weight: 600; color: var(--tinta-suave); background: #eef1f3; border-radius: 4px; padding: 2px 8px; white-space: nowrap; }
td.num .version_de { display: block; font-size: 11px; font-weight: 500; color: var(--tinta-suave); white-space: nowrap; }
table.resultados .nv { white-space: nowrap; }
table.resultados button.nueva_version { background: none; color: var(--azul); padding: 0; font-size: inherit; }
#hb_aviso { margin-bottom: 12px; }

/* 02/10/2026 (David, OF-2026-0323): la opción aceptada (A, B…) en Mis presupuestos. */
.caja_opcion { margin-top: 6px; display: flex; flex-wrap: wrap; align-items: center; gap: 4px 8px; }
.mis_tabla select.opcion { font: inherit; font-size: 12px; padding: 3px 6px; border-radius: 6px; border: 1px solid var(--linea); max-width: 320px; }
.mis_tabla select.opcion.o-aceptada { background: #e7f5ec; border-color: #b9e0c7; font-weight: 600; }
.mis_tabla select.opcion.o-pago { background: #eaf2fb; border-color: #bdd4ee; }
.mis_tabla select.opcion.o-defecto { background: var(--ambar-fondo); color: var(--ambar); }
.etq_opcion { font-size: 11px; font-weight: 600; color: var(--tinta-suave); white-space: nowrap; }
.etq_opcion.aceptada { color: var(--azul); }
.etq_opcion.defecto { color: var(--ambar); }

/* 02/10/2026: nuestra cuenta en el parte cuando el cliente paga por transferencia */
.cuenta_jag { margin: 10px 0; padding: 10px 12px; border: 1px solid #b9cde6; border-radius: 10px; background: #f2f7fd; }
.cuenta_jag .iban { font-size: 20px; font-weight: bold; letter-spacing: .5px; margin: 6px 0; font-family: ui-monospace, Menlo, Consolas, monospace; overflow-wrap: anywhere; user-select: all; }
.cuenta_jag p { margin: 4px 0; }

/* ---- Contratos de mantenimiento (02/10/2026): /contrato/<id> y /contratos ---- */
.pag_contrato .ct_main { max-width: 760px; }
.ct_idiomas button { font-weight: 600; padding: 2px 6px; }
.ct_idiomas button.activo { color: #159c4a; text-decoration: underline; }
.ct_intro { font-size: 15px; background: #f2f8f4; border-left: 4px solid #159c4a; padding: 8px 12px; border-radius: 4px; }
.ct_texto { background: #fff; border: 1px solid #dfe3e6; border-radius: 6px; padding: 10px 14px; margin: 10px 0; font-size: 14px; line-height: 1.45; }
.ct_texto h1 { font-size: 20px; color: #159c4a; margin: 4px 0 6px; }
.ct_texto h2 { font-size: 15px; color: #159c4a; margin: 14px 0 4px; }
.ct_texto table { border-collapse: collapse; width: 100%; margin: 4px 0 8px; font-size: 13px; }
.ct_texto th, .ct_texto td { text-align: left; padding: 3px 6px; border-bottom: 1px solid #e8ebee; vertical-align: top; }
.ct_texto .aparatos { display: block; overflow-x: auto; }
.ct_texto .hueco { color: #b05a00; }
.ct_texto .firma_img { max-width: 260px; height: 90px; object-fit: contain; display: block; border-bottom: 1px solid #999; }
.ct_texto .firma_hueco { height: 60px; border-bottom: 1px solid #999; }
.ct_texto .pruebas { font-size: 11px; color: #666; }
.ct_texto blockquote { margin: 6px 0; padding: 6px 10px; border-left: 3px solid #159c4a; background: #f7faf8; }
.ct_form, .ct_hecho { background: #fff; border: 2px solid #159c4a; border-radius: 8px; padding: 12px 14px; margin: 12px 0; }
.ct_form label.larga { display: block; margin: 10px 0; }
.ct_form label.larga span { display: block; font-size: 13px; color: var(--tinta-suave); margin-bottom: 3px; }
.ct_form label.larga input { width: 100%; box-sizing: border-box; font-size: 16px; padding: 8px; }
.ct_form label.chk { display: flex; gap: 8px; align-items: flex-start; margin: 10px 0; font-size: 14px; }
.ct_form label.chk input { width: 22px; height: 22px; flex: none; }
.ct_form canvas.firma { width: 100%; height: 170px; border: 1px dashed #9aa8b8; border-radius: 6px; background: #fff; touch-action: none; }
.ct_firma_tit { font-weight: 600; margin: 12px 0 4px; }
.ct_form .boton, .ct_hecho .boton { display: inline-block; width: 100%; text-align: center; font-size: 17px; padding: 12px; box-sizing: border-box; }
.ct_desistir { margin-top: 16px; border-top: 1px solid #e3e6e8; padding-top: 8px; }
.contratos_main { max-width: 1300px; margin: 0 auto; padding: 12px; }
.contratos_tabla { border-collapse: collapse; width: 100%; background: #fff; font-size: 13px; }
.contratos_tabla th, .contratos_tabla td { text-align: left; padding: 6px 8px; border-bottom: 1px solid #e3e6e8; vertical-align: top; }
.contratos_tabla tr.ct_firmado { background: #f2faf4; }
.contratos_tabla tr.ct_anulado, .contratos_tabla tr.ct_desistido { color: #888; }
.contratos_tabla td.acciones { white-space: nowrap; }
.etq_ok { color: #159c4a; font-weight: 700; }
.etq_parado { color: #b05a00; font-weight: 700; }
.tec_contrato { display: inline-block; font-size: 12px; font-weight: 600; color: #7a4b00; background: #fff3d6; border-radius: 4px; padding: 1px 6px; }
@media (max-width: 700px) { .contratos_tabla td.acciones { white-space: normal; } }
/* Contratos: forma de pago (02/10/2026) */
.ct_forma { border: 1px solid #e3e6e8; border-radius: 6px; padding: 6px 10px; margin: 8px 0; }
.ct_forma legend { font-weight: 600; padding: 0 4px; }
.ct_forma .chk { display: block; margin: 4px 0; }
.pista_sepa { color: #777; font-style: italic; }
/* Técnicos: dirección siempre en la tarjeta y contrato desde la visita (02/10/2026) */
.tec_dir { color: #33506b; font-size: .92em; }
.tec_dir.no { color: #b54708; }
.tec_contrato_caja { border: 1px solid #cfe3d5; background: #f4faf6; border-radius: 6px; padding: 8px 10px; }
.tec_contrato_caja .campos { margin-top: 6px; }
.acciones_mini { margin: 6px 0 0; display: flex; flex-wrap: wrap; gap: 6px; align-items: center; }
/* 02/10/2026: «📎 Más información del cliente» (avisos y otras conversaciones de Chatwoot). */
.detalle_movil .mas_bloque { border-left: 3px solid var(--linea); padding: 2px 0 2px 10px; margin: 10px 0 14px; overflow-wrap: anywhere; }
.detalle_movil .mas_por { display: inline-block; font-size: 12px; color: var(--tinta-suave); }
.detalle_movil .mas_por.dudoso { color: #a15c00; }
/* 02/10/2026: «🧾 Material a pedir (obras)» en el móvil del almacén. */
.material_movil .mat_item { border: 1px solid var(--linea); border-radius: var(--radio); padding: 8px 10px; margin: 8px 0; background: var(--papel); overflow-wrap: anywhere; }
.material_movil .mat_item.pedido { opacity: .6; }
.material_movil .mat_texto { margin: 6px 0; }
/* 02/10/2026: «📄 El presupuesto (sin precios)» en el detalle del móvil. */
.detalle_movil .presu_op { background: var(--papel); border: 1px solid var(--linea); border-radius: var(--radio); padding: 8px 12px; margin: 10px 0; overflow-wrap: anywhere; }
.detalle_movil .presu_op summary { font-weight: 600; cursor: pointer; }
.detalle_movil .presu_op h4 { margin: 12px 0 4px; }
.detalle_movil .presu_op ul { padding-left: 18px; margin: 4px 0; }
.detalle_movil .presu_tabla { overflow-x: auto; max-width: 100%; }
.detalle_movil .presu_tabla table { border-collapse: collapse; font-size: 13px; }
.detalle_movil .presu_tabla th, .detalle_movil .presu_tabla td { border: 1px solid var(--linea); padding: 3px 5px; text-align: left; vertical-align: top; }

/* 03/10/2026 · Citas que elige el cliente (/cita/<id> y /citas) */
.pag_cita .ci_main { max-width: 640px; }
.ci_reserva, .ci_confirmar { background: #fff; border: 2px solid #159c4a; border-radius: 8px; padding: 12px 14px; margin: 12px 0; }
.ci_grande { font-size: 18px; font-weight: 600; }
.ci_dia { margin: 10px 0 14px; }
.ci_dia h3 { margin: 0 0 6px; font-size: 16px; }
.ci_dia h3::first-letter { text-transform: uppercase; }
button.ci_boton { width: auto; display: inline-block; padding: 10px 16px; }
button.ci_peligro { background: #b3261e; }
.ci_franjas { display: flex; flex-wrap: wrap; gap: 8px; }
.ci_franja { border: 1px solid #159c4a; background: #fff; color: #0f6e35; border-radius: 6px; padding: 10px 12px; font-size: 15px; cursor: pointer; }
.ci_franja:hover, .ci_franja:focus { background: #e8f6ee; }
.ci_cerca { font-size: 12px; font-weight: normal; color: #0f6e35; background: #e8f6ee; border-radius: 10px; padding: 2px 8px; text-transform: none; }
.ci_suyo { color: #0f6e35; }
.ci_bloque { background: #fff; border: 1px solid #ddd; border-radius: 8px; padding: 8px 12px; margin: 10px 0; }
.ci_bloque summary { cursor: pointer; font-weight: 600; }
.ci_form { display: grid; grid-template-columns: repeat(auto-fill, minmax(220px, 1fr)); gap: 8px 14px; margin-top: 10px; }
.ci_form label { display: flex; flex-direction: column; font-size: 13px; gap: 3px; }
.ci_form .ancho { grid-column: 1 / -1; }
#config_json { width: 100%; box-sizing: border-box; font-family: monospace; font-size: 12px; }

/* ---- Contratos que vencen (pestaña de /avisos, 03/10/2026) ---- */
.vc_barra { display: flex; flex-wrap: wrap; gap: 8px; align-items: center; margin: 4px 0 6px; }
.vc_barra .hueco { flex: 1; }
.vc_barra select { width: auto; min-width: 180px; }
.vc_barra .ag_buscar input { min-width: 260px; }
.vc_meses button { text-transform: capitalize; }
.vc_auto { font-size: 13px; }
.vc_tabla td.vc_acc { white-space: nowrap; }
.vc_tabla td.vc_acc button { margin: 0 2px; padding: 3px 8px; font-size: 13px; }
.vc_e { font-weight: 600; font-size: 12px; padding: 1px 6px; border-radius: 4px; background: #eef1f4; color: #334; white-space: nowrap; }
.vc_e_por_contactar { background: #fff3cd; color: #7a5a00; }
.vc_e_cita_enviada { background: #e3f0ff; color: #154a8a; }
.vc_e_llamado { background: #ede7f6; color: #4a2c82; }
.vc_e_en_avisos { background: #e0f2f1; color: #00594f; }
.vc_e_programado { background: #dff3e4; color: #146c2e; }
.vc_e_visitado { background: #e8f5e9; color: #2e6b34; }
.vc_e_renovado { background: #eceff1; color: #555; }
.vc_atrasados[aria-pressed="false"] { color: #b3261e; font-weight: 600; }
.vc_e_no_renueva { background: #eceff1; color: #666; text-decoration: line-through; }
.vc_f_programado td, .vc_f_no_renueva td { opacity: .75; }
.vc_llamar { font-size: 12px; color: #b3261e; }
.vc_pasado td:first-child { border-left: 3px solid #b3261e; }
.vc_cita { margin: 8px 0; }

/* ---- Huecos que se llenan solos (/citas, 03/10/2026) ---- */
.hu_semana { margin: 6px 0 12px; }
.hu_semana td, .hu_semana th, .hu_cal td, .hu_cal th { padding: 3px 6px; vertical-align: top; }
.hu_tec th { text-align: left; background: #f4f6f8; }
.hu_b { display: block; width: 100%; margin: 2px 0; padding: 3px 6px; border-radius: 4px; border: 1px solid #c9d1d9; font-size: 12px; text-align: left; cursor: pointer; white-space: nowrap; }
.hu_cal button.hu_b, .hu_semana button.hu_b { box-shadow: none; text-decoration: none; min-height: 0; }
.hu_cal button.hu_b.hu_si, .hu_semana button.hu_b.hu_si { background: #dff3e4; border-color: #8cc79a; color: #146c2e; font-weight: 600; }
.hu_cal button.hu_b.hu_no, .hu_semana button.hu_b.hu_no { background: #f1f3f5; border-color: #d5dbe1; color: #8a8f94; font-weight: 400; }
.hu_cal button.hu_b.hu_lleno { background: #fff3cd; border-color: #e0c46c; color: #7a5a00; }
.hu_cal button.hu_b:hover, .hu_semana button.hu_b:hover { filter: brightness(0.95); }
.hu_tec th button.enlace { background: none; border: 0; color: var(--azul, #1565c0); padding: 0 2px; font-size: 12px; text-decoration: underline; }
.hu_nada { color: #bbb; text-align: center; }
.hu_zona { font-size: 11px; color: #555; font-weight: 600; }
.hu_lunes td { border-top: 2px solid #c9d1d9; }
.hu_barra { display: flex; gap: 10px; align-items: center; flex-wrap: wrap; margin: 8px 0 4px; }
.hu_barra select { width: auto; }

/* 03/10/2026 (web122): fotos del parte que esperan en el móvil (sin cobertura). */
.mini_pend { display: inline-flex; flex-direction: column; align-items: center; vertical-align: top; }
.mini_pend .mini { opacity: .55; outline: 2px dashed #c77700; }
.mini_pend small { font-size: 11px; color: #a35f00; }

/* 03/10/2026 (web123): «Para la oficina» (/oficina). */
.of_pestanas { display: flex; gap: 8px; align-items: center; flex-wrap: wrap; margin: 6px 0 10px; }
.of_pest { border: 1px solid #ccd; background: #fff; border-radius: 16px; padding: 5px 14px; cursor: pointer; font-weight: 600; }
.of_pest.activa { background: #159c4a; color: #fff; border-color: #159c4a; }
.of_filtros { display: flex; gap: 10px; align-items: center; flex-wrap: wrap; margin: 8px 0; }
.of_personas { display: flex; gap: 6px; flex-wrap: wrap; }
.of_chip { border: 1px solid #ccd; background: #fff; border-radius: 14px; padding: 3px 10px; cursor: pointer; font-size: 13px; }
.of_chip.activa { background: #e7f6ec; border-color: #159c4a; font-weight: 600; }
.of_tarea { background: #fff; border: 1px solid #ddd; border-left: 4px solid #d98b00; border-radius: 8px; padding: 8px 12px; margin: 8px 0; }
.of_tarea.of_en_marcha { border-left-color: #2a6fd6; }
.of_tarea.of_hecho { border-left-color: #159c4a; opacity: .7; }
.of_cab { font-size: 15px; }
.of_estado { font-size: 12px; background: #f2f2f2; border-radius: 10px; padding: 1px 8px; margin-right: 4px; }
.of_veces { font-size: 12px; color: #a35f00; }
.of_meta { font-size: 12px; color: #667; margin-top: 2px; }
.of_detalle { font-size: 13px; margin-top: 6px; white-space: normal; }
.of_nota { font-size: 13px; margin-top: 6px; color: #334; }
.of_acciones { margin-top: 8px; display: flex; gap: 6px; flex-wrap: wrap; align-items: center; }
.of_vacio { padding: 20px 0; }
tr.of_fallo td { background: #fff4f2; }
.of_tabla { overflow-x: auto; max-width: 100%; }
.av_envios { margin-top: 8px; font-size: 13px; }
.av_envios li.mal { color: #b42318; }

/* 03/10/2026 (web125): buscador de clientes y menú por áreas (barra-comun.js), ficha del cliente, «Mi día». */
.bc_caja { display: inline-flex; gap: 6px; align-items: center; }
.bc_boton { border: 1px solid #ccd; background: #fff; border-radius: 14px; padding: 4px 10px; cursor: pointer; font-size: 13px; white-space: nowrap; }
.bc_boton:hover { border-color: #159c4a; }
.bc_capa { position: fixed; inset: 0; background: rgba(20, 30, 40, .35); z-index: 1000; display: flex; justify-content: center; align-items: flex-start; padding: 70px 12px 12px; }
.bc_capa[hidden] { display: none; }
.bc_panel { background: #fff; border-radius: 10px; width: min(640px, 100%); max-height: 80vh; overflow: auto; padding: 12px; box-shadow: 0 10px 30px rgba(0,0,0,.2); }
.bc_panel input { width: 100%; font-size: 17px; padding: 8px 10px; box-sizing: border-box; }
.bc_pista { font-size: 12px; color: #667; margin: 6px 2px; }
.bc_item { display: block; padding: 7px 8px; border-radius: 6px; color: inherit; text-decoration: none; border-bottom: 1px solid #f0f0f0; }
.bc_item:hover, .bc_item:focus { background: #eef8f1; }
.bc_tipo { font-size: 11px; border-radius: 8px; padding: 1px 6px; background: #eee; }
.bc_cliente { background: #e7f6ec; } .bc_presupuesto { background: #e8effd; } .bc_aviso { background: #fff3dc; } .bc_contrato, .bc_cita { background: #f3e8fd; }
.bc_menu { position: absolute; z-index: 1001; background: #fff; border: 1px solid #ddd; border-radius: 10px; box-shadow: 0 8px 24px rgba(0,0,0,.15); padding: 10px 14px; display: grid; grid-template-columns: repeat(2, minmax(120px, 1fr)); gap: 8px 22px; max-width: calc(100vw - 16px); }
.bc_menu[hidden] { display: none; }
.bc_area { display: flex; flex-direction: column; gap: 3px; font-size: 14px; }
.bc_area b { color: #159c4a; font-size: 12px; text-transform: uppercase; letter-spacing: .04em; }
.fc_cab { background: #fff; border: 1px solid #ddd; border-radius: 10px; padding: 10px 14px; margin: 8px 0; }
.fc_nombre { margin: 0 0 4px; }
.fc_datos { color: #445; font-size: 14px; }
.fc_acciones { margin-top: 8px; display: flex; gap: 6px; flex-wrap: wrap; }
.boton_enlace { display: inline-block; text-decoration: none; padding: 4px 10px; border-radius: 6px; border: 1px solid #ccd; color: inherit; background: #fff; font-size: 13px; }
.fc_rejilla { display: grid; grid-template-columns: repeat(auto-fill, minmax(320px, 1fr)); gap: 10px; }
.fc_bloque { background: #fff; border: 1px solid #ddd; border-radius: 10px; padding: 8px 12px; min-width: 0; }
.fc_bloque h2 { font-size: 15px; margin: 2px 0 6px; }
.fc_item { padding: 6px 0; border-bottom: 1px solid #f0f0f0; font-size: 14px; overflow-wrap: anywhere; }
.fc_item:last-child { border-bottom: 0; }
.fc_fallo { color: #b42318; }
.fc_ok { color: #127a3a; font-size: 12px; } .fc_mal { color: #b45f00; font-size: 12px; }
.fc_pasos { display: flex; gap: 3px; margin-top: 4px; }
.fc_pasos span { flex: 1; height: 6px; border-radius: 3px; background: #e3e6e8; }
.fc_pasos span.hecho { background: #8fd3a8; } .fc_pasos span.ahora { background: #159c4a; }
.mi_dia { margin: 6px 0 16px; }
.md_cab { display: flex; align-items: center; gap: 10px; }
.md_cab h2 { margin: 0; }
.md_rejilla { display: grid; grid-template-columns: repeat(auto-fill, minmax(280px, 1fr)); gap: 10px; margin-top: 8px; }
.md_bloque { background: #fff; border: 1px solid #ddd; border-radius: 10px; padding: 8px 12px; font-size: 14px; min-width: 0; overflow-wrap: anywhere; }
.md_bloque h3 { margin: 2px 0 6px; font-size: 15px; } .md_bloque h3 small { font-weight: 400; color: #667; }
.md_bloque ul { margin: 4px 0; padding-left: 18px; }
.md_rojo { color: #b42318; margin: 6px 0 2px; }
@media (max-width: 600px) { .bc_boton { padding: 4px 7px; } .fc_rejilla, .md_rejilla { grid-template-columns: 1fr; } }

/* 03/10/2026 (web125): avisos de calidad del dato en los diálogos (calidad-dialogo.js). */
.calidad { margin: 6px 0; font-size: 13px; display: flex; flex-direction: column; gap: 3px; }
.calidad .cal_rojo { color: #b42318; font-weight: 600; } .calidad .cal_ambar { color: #9a5b00; } .calidad .cal_info { color: #445; }

/* 03/10/2026 (web125): panel de dirección (/panel). */
.pn_cifras { display: grid; grid-template-columns: repeat(auto-fill, minmax(150px, 1fr)); gap: 10px; margin: 8px 0 12px; }
.pn_cifra { background: #fff; border: 1px solid #ddd; border-radius: 10px; padding: 10px 12px; display: flex; flex-direction: column; }
.pn_cifra b { font-size: 24px; color: #159c4a; } .pn_cifra span { font-size: 12px; color: #556; }
.pn_cifra.pn_malo b { color: #b45f00; }

/* 03/10/2026 (web128): /rentabilidad */
.rt_filtro { display: flex; gap: 10px; align-items: center; flex-wrap: wrap; margin: 6px 0 10px; }
.rt_obras { margin-top: 10px; }
.rt_mal { color: #b42318; font-weight: 600; } .rt_justo { color: #b45f00; font-weight: 600; } .rt_bien { color: #127a3a; font-weight: 600; }
.rt_aviso { color: #b45f00; cursor: help; }
#dlg_costes, #dlg_obra { max-width: 640px; width: calc(100% - 32px); }
.aviso_suave { background: #fff7e6; border: 1px solid #f0c36d; border-radius: 8px; padding: 6px 10px; color: #7a4b00; }
.co_bloque { margin: 8px 0 12px; } .co_bloque h2 { display: flex; gap: 8px; align-items: center; flex-wrap: wrap; }
