/* Los colores y las tipografias salen de identidad.css (lo genera
   nucleo/aplicar_identidad.py desde estudio.json): aca NO se escribe
   ningun color. --debe y --haber tambien vienen de ahi. */

*{box-sizing:border-box}
html,body{margin:0;padding:0}
body{background:var(--bg);color:var(--texto);font-family:var(--sans);font-size:15px;line-height:1.5}
button{font:inherit;cursor:pointer}
input,select,textarea{font:inherit;color:inherit}
h1,h2,h3{font-family:var(--serif);font-weight:normal;margin:0}

/* ---------- barra superior (misma convencion que Clientes y Movimientos) ---------- */
.topbar{
  display:flex;align-items:center;gap:20px;flex-wrap:wrap;
  padding:12px 22px;background:var(--panel);border-bottom:1px solid var(--borde);
  position:sticky;top:0;z-index:20;
}
.topbar img.logo{height:30px;width:auto}
.topbar .modulos{display:flex;gap:4px;margin-left:auto;flex-wrap:wrap;align-items:center}
.topbar .modulos a{padding:6px 12px;border-radius:6px;color:var(--texto-sec);text-decoration:none;font-size:0.88rem}
.topbar .modulos a.activo{color:var(--acento);font-weight:600}
.topbar .modulos a:hover{background:var(--panel-alt)}
.etiqueta-barra{
  font-size:0.72rem;text-transform:uppercase;letter-spacing:.06em;
  color:var(--texto-sec);opacity:.7;margin-right:2px;
}

/* Separador entre "ir a otro modulo" y las secciones de este modulo:
   son dos cosas distintas y antes se confundian. */
.separador-barra{width:1px;align-self:stretch;background:var(--borde);margin:0 4px}

.tabs{display:flex;gap:2px;padding:3px;background:var(--panel-alt);border:1px solid var(--borde);border-radius:8px}
.tab{background:none;border:none;padding:7px 14px;border-radius:6px;color:var(--texto-sec);font-size:0.9rem}
.tab[aria-selected="true"]{background:var(--panel);color:var(--acento);font-weight:600;box-shadow:var(--sombra-tab)}

.aviso{padding:10px 22px;background:var(--aviso-fondo);color:var(--aviso-texto);border-bottom:1px solid var(--aviso-borde);font-size:13.5px}

.wrap{max-width:1240px;margin:0 auto;padding:22px}
.split{display:grid;grid-template-columns:300px 1fr;gap:22px;align-items:start}
@media (max-width:880px){.split{grid-template-columns:1fr}}

.card{background:var(--panel);border:1px solid var(--borde);border-radius:10px;box-shadow:var(--sombra)}
.card + .card{margin-top:18px}
.card-head{display:flex;align-items:baseline;gap:12px;flex-wrap:wrap;padding:16px 18px 12px;border-bottom:1px solid var(--borde)}
.card-head h2{font-size:19px;color:var(--texto)}
.card-head .acciones{margin-left:auto;display:flex;gap:8px;flex-wrap:wrap}
.card-body{padding:16px 18px}
.card-body.flush{padding:0}

.buscador{width:100%;padding:9px 11px;border:1px solid var(--borde-fuerte);border-radius:7px;background:var(--panel)}
.lista{list-style:none;margin:0;padding:0;max-height:62vh;overflow:auto}
.lista li{border-bottom:1px solid var(--borde)}
.lista li:last-child{border-bottom:none}
.cli-btn{width:100%;text-align:left;background:none;border:none;padding:11px 18px;display:flex;gap:10px;align-items:baseline;color:inherit}
.cli-btn:hover{background:var(--panel-alt)}
.cli-btn[aria-current="true"]{background:var(--suave);box-shadow:inset 3px 0 0 var(--azul-medio)}
.cli-nombre{flex:1;min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.cli-saldo{font-variant-numeric:tabular-nums;font-size:13px;white-space:nowrap}

.monto{font-variant-numeric:tabular-nums}
.debe{color:var(--debe)}
.haber{color:var(--haber)}
.meta{color:var(--texto-sec);font-size:13.5px}
.vacio{padding:26px 18px;color:var(--texto-sec);text-align:center}

.saldo-box{display:flex;align-items:flex-end;gap:14px;flex-wrap:wrap;padding:18px;background:var(--suave);border-radius:8px}
.saldo-cifra{font-family:var(--serif);font-size:34px;line-height:1.1;font-variant-numeric:tabular-nums}
.saldo-lbl{color:var(--texto-sec);font-size:13.5px;padding-bottom:5px}

.tabla-scroll{overflow-x:auto}
table{width:100%;border-collapse:collapse;font-size:14px;min-width:560px}
th,td{padding:9px 12px;text-align:left;border-bottom:1px solid var(--borde);vertical-align:top}
th{color:var(--texto-sec);font-weight:600;font-size:12.5px;background:var(--panel-alt);position:sticky;top:0}
td.num,th.num{text-align:right;font-variant-numeric:tabular-nums;white-space:nowrap}
tbody tr:last-child td{border-bottom:none}

.btn{border:1px solid var(--borde-fuerte);background:var(--panel);color:var(--texto);padding:7px 13px;border-radius:7px}
.btn:hover{background:var(--panel-alt)}
.btn-primario{background:var(--acento);border-color:var(--acento);color:var(--acento-texto);font-weight:600}
.btn-primario:hover{filter:brightness(1.12)}
.btn-chico{padding:4px 9px;font-size:13px;border-radius:6px}
.btn-link{background:none;border:none;color:var(--azul-medio);padding:2px 4px;text-decoration:underline}
.btn:disabled,.btn-primario:disabled{opacity:.45;cursor:not-allowed}

.serv{display:flex;align-items:center;gap:10px;padding:9px 0;border-bottom:1px dotted var(--borde)}
.serv:last-child{border-bottom:none}
.serv-desc{flex:1;min-width:0}
.total-mensual{display:flex;justify-content:space-between;gap:10px;margin-top:12px;padding-top:12px;border-top:2px solid var(--borde-fuerte);font-weight:600}

.overlay{position:fixed;inset:0;background:var(--velo);display:flex;align-items:center;justify-content:center;padding:16px;z-index:60}
.modal{background:var(--panel);border-radius:12px;width:100%;max-width:520px;max-height:90vh;overflow:auto;box-shadow:var(--sombra-modal)}
.modal h3{font-size:20px;padding:18px 20px 0}
.modal .cuerpo{padding:14px 20px}
.modal .pie{display:flex;gap:9px;justify-content:flex-end;padding:14px 20px 20px;flex-wrap:wrap}
/* Secciones plegables de Parámetros (#81), iguales a las de Monotributo. */
details.apartado{border:1px solid var(--borde);border-radius:8px;margin-bottom:12px;background:var(--panel)}
details.apartado > summary{cursor:pointer;padding:12px 14px;display:flex;flex-wrap:wrap;gap:4px 14px;align-items:baseline;list-style:none}
details.apartado > summary::-webkit-details-marker{display:none}
details.apartado > summary::before{content:"▸";color:var(--texto-sec)}
details.apartado[open] > summary::before{content:"▾"}
details.apartado[open] > summary{border-bottom:1px solid var(--borde)}
.apartado-cuerpo{padding:12px 14px}

.campo{margin-bottom:13px}
.campo label{display:block;font-size:13px;color:var(--texto-sec);margin-bottom:4px}
.campo input,.campo select,.campo textarea{width:100%;padding:9px 11px;border:1px solid var(--borde-fuerte);border-radius:7px;background:var(--panel)}
.campo textarea{min-height:64px;resize:vertical}
.fila{display:flex;gap:12px}
.fila > *{flex:1;min-width:0}
@media (max-width:520px){.fila{flex-direction:column;gap:0}}

/* Cargar un pago con una frase (trabajo #24) */
#frase-resultado{margin-top:12px}
.entendi{width:100%;min-width:0;font-size:14px}
.entendi td{padding:5px 8px;border-bottom:1px solid var(--suave)}
.entendi td:first-child{width:150px;color:var(--texto-sec)}
.entendi .falta{color:var(--peligro)}
.entendi .duda{color:var(--aviso-texto)}
#cuerpo-medios input[type=text]{width:100%}
.guia-voz td{vertical-align:top}
/* Qué operación es, arriba del formulario: un pago y un honorario van en
   sentidos opuestos en la cuenta (trabajo #25) */
.operacion{margin:0 0 12px;padding:10px 12px;border-radius:8px;font-size:15px;border:2px solid}
.operacion strong{font-size:17px}
.operacion.pago{border-color:var(--haber);color:var(--haber)}
.operacion.honorario{border-color:var(--debe);color:var(--debe)}
.guia-voz td:first-child{font-weight:600;color:var(--texto)}

/* Envio en tanda (trabajo #23): el cliente que toca ahora */
.tanda-actual{display:flex;flex-wrap:wrap;align-items:center;gap:10px;padding:12px 14px;margin:0 0 4px;
  border:1px solid var(--borde-fuerte);border-radius:8px;background:var(--suave)}
.tanda-actual .quien{flex:1 1 220px}
.tanda-actual .quien strong{display:block}
tr.tanda-toca td{background:var(--suave)}
.chip{display:inline-block;padding:2px 8px;border-radius:999px;font-size:12px;background:var(--suave);color:var(--acento)}

.toast{position:fixed;left:50%;bottom:26px;transform:translateX(-50%);background:var(--azul-profundo);color:var(--sobre-intenso);padding:11px 18px;border-radius:9px;z-index:90;max-width:90vw;box-shadow:var(--sombra-modal)}
.oculto{display:none !important}

/* En el teléfono (trabajo #32, 2026-10-09): la barra de arriba no queda
   fija y se compacta; el «Ir a» se desliza de costado en un solo renglón. */
@media (max-width:700px){
  .topbar{position:static;gap:8px;padding:8px 12px}
  .topbar img.logo{height:24px}
  .topbar .modulos{margin-left:0;width:100%;flex-wrap:nowrap;overflow-x:auto;scrollbar-width:none}
  .topbar .modulos::-webkit-scrollbar{display:none}
  .topbar .modulos a{padding:4px 8px;white-space:nowrap}
  .etiqueta-barra,.separador-barra{display:none}
}

/* En el teléfono (trabajo #32): una tabla ancha se desliza dentro de su
   recuadro en vez de estirar el panel (y con él, toda la página). */
.split > *{min-width:0}
.acciones-recibo{display:flex;flex-direction:column;gap:8px}
/* Comandos por voz: confirmar, o confirmar y enviar el recibo (#45) */
.acciones-voz{display:flex;flex-wrap:wrap;gap:8px;margin:10px 0 0}

/* ---------- imputación de pagos (trabajo #34) ---------- */
.imputar{border:1px solid var(--borde);border-radius:8px;padding:10px 12px;margin:0 0 12px;background:var(--panel-alt)}
.imputar-titulo{margin:0 0 8px;font-weight:600}
/* Cierre del mes: casillas por tipo de servicio (#39) */
.tipos-mes{display:flex;flex-direction:column;gap:6px;font-size:14px}
.tipos-mes label{display:flex;gap:8px;align-items:baseline;flex-wrap:wrap;cursor:pointer}
/* Cierre del mes: importe de este mes y la ✕ para sacarlo (#46) */
.mes-imp{width:130px;text-align:right;padding:5px 7px;border:1px solid var(--borde-fuerte);border-radius:6px;background:var(--panel);color:var(--texto);font:inherit}
.mes-imp.mal{border-color:var(--peligro)}
.mes-de{font-size:12px;margin-top:2px}
.btn-x{background:none;border:1px solid var(--borde);border-radius:6px;color:var(--texto-sec);cursor:pointer;width:28px;height:28px;font-size:14px;line-height:1}
.btn-x:hover{border-color:var(--peligro);color:var(--peligro)}
.mes-excluido td{color:var(--texto-sec)}
.mes-excluido td:nth-child(1),.mes-excluido td:nth-child(3){text-decoration:line-through}
.imp-fila{display:flex;gap:10px;align-items:center;padding:6px 0;border-top:1px solid var(--borde)}
.imp-fila:first-of-type{border-top:none}
.imp-que{flex:1;display:flex;gap:8px;align-items:flex-start;cursor:pointer;font-size:14px}
.imp-que input{width:auto;margin-top:3px}
.imp-monto{width:120px;flex:0 0 120px;text-align:right;padding:6px 8px;border:1px solid var(--borde-fuerte);border-radius:6px;background:var(--panel)}
.contador{margin:8px 0 0;padding:8px 10px;border-radius:6px;font-size:14px;background:var(--panel)}
.contador.justo{color:var(--haber)}
.contador.a-favor{background:var(--aviso-fondo);color:var(--aviso-texto)}
.contador.mal{background:var(--error-fondo);color:var(--error-texto)}
.imp-linea{margin-top:3px;font-size:12.5px}
.chip.pagado{background:var(--exito-fondo);color:var(--exito)}
.chip.parcial{background:var(--aviso-fondo);color:var(--aviso-texto)}
.chip.pendiente{background:var(--panel-alt);color:var(--texto-sec)}
.chip.a-favor{background:var(--aviso-fondo);color:var(--aviso-texto)}
.imputa-a{margin:-4px 0 12px;font-size:13.5px;color:var(--texto-sec)}

/* Datos del estudio en Parametros (#40) */
.campos-estudio{display:grid;grid-template-columns:repeat(auto-fit,minmax(260px,1fr));gap:0 14px;margin-bottom:8px}

/* Estadisticas (#47) */
.est-filtros{flex-wrap:wrap;gap:0 12px}
.est-filtros .campo{min-width:150px;flex:1 1 150px}
.est-kpis{display:grid;grid-template-columns:repeat(auto-fit,minmax(170px,1fr));gap:12px;margin:0 0 16px}
.est-kpi{background:var(--panel);border:1px solid var(--borde);border-radius:10px;padding:12px 14px}
.est-kpi-t{font-size:13px;color:var(--texto-sec)}
.est-kpi-v{font-family:var(--serif);font-size:22px;color:var(--texto);margin:2px 0;white-space:nowrap}
.est-dos{display:grid;grid-template-columns:repeat(auto-fit,minmax(320px,1fr));gap:16px}
.est-dos > *{min-width:0}
.est-caja{position:relative;width:100%}
.est-leyenda{display:flex;gap:14px;flex-wrap:wrap;font-size:12.5px;color:var(--texto-sec)}
.est-leyenda span{display:flex;align-items:center;gap:5px}
.est-cuadro{display:inline-block;width:10px;height:10px;border-radius:2px}
/* Estadisticas, etapa 2 (#50) */
.est-var{font-size:12.5px;margin:-2px 0 2px;color:var(--texto-sec)}
.est-var.sube{color:var(--exito)}
.est-var.baja{color:var(--peligro)}
button.est-kpi{font:inherit;text-align:left;color:inherit;cursor:default}
.est-kpi-alerta.hay{border-color:var(--peligro);cursor:pointer}
.est-kpi-alerta.hay .est-kpi-v{color:var(--peligro)}
.est-linea{display:inline-block;width:16px;height:0;border-top:2px dashed}
/* Estadisticas: detalle filtrable como una hoja de calculo (#51) */
.est-orden{background:none;border:none;padding:0;font:inherit;color:inherit;font-weight:inherit;cursor:pointer;text-align:inherit}
.est-orden:hover{text-decoration:underline}
.est-filtros-tabla th{padding-top:0;font-weight:400}
.est-filtros-tabla select,.est-filtros-tabla input{width:100%;min-width:90px;padding:4px 6px;border:1px solid var(--borde-fuerte);border-radius:6px;background:var(--panel);color:var(--texto);font:inherit;font-size:13px}
/* Envio de resumenes programado (#54) */
.envio-prog{display:flex;justify-content:space-between;align-items:center;gap:10px;padding:8px 0;border-top:1px solid var(--borde)}
.envio-aviso{display:flex;justify-content:space-between;align-items:center;gap:10px;flex-wrap:wrap;margin:0 0 12px;padding:8px 12px;border:1px solid var(--borde);border-radius:8px;background:var(--panel-alt)}
