:root { --ink:#172033; --blue:#1d4e89; --bg:#eef2f6; --line:#e4e9ef; --muted:#5c6b7a; --ok:#166534; --debe:#9f1239; --rev:#9a6700; }
* { box-sizing:border-box; }
html { -webkit-text-size-adjust:100%; }
body { margin:0; font-family:-apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, sans-serif; background:var(--bg); color:var(--ink); }
[hidden] { display:none !important; }
#barra { position:fixed; top:0; left:0; right:0; height:3px; z-index:50; background:linear-gradient(90deg, var(--blue) 0 35%, #9db7d4 35% 100%); background-size:200% 100%; animation:barra .9s linear infinite; }
@keyframes barra { from { background-position:100% 0; } to { background-position:-100% 0; } }
.portada { width:100%; height:190px; object-fit:cover; object-position:center 12%; display:block; background:#9db7d4; }
main { max-width:900px; margin:-30px auto 40px; padding:0 12px; position:relative; }
.card { background:#fff; border-radius:16px; padding:16px; margin-bottom:12px; box-shadow:0 8px 24px rgba(23,32,51,.06); }
h1 { margin:0 0 4px; font-size:22px; } h2 { margin:0 0 10px; font-size:18px; } h3 { margin:16px 0 6px; font-size:15px; }
p { margin:6px 0; } .lead { color:var(--muted); font-size:14px; margin:0 0 12px; }
label { display:block; font-size:13px; margin-top:10px; color:#3d4b5c; }
input, select, textarea { width:100%; margin-top:4px; padding:10px 12px; border:1px solid #d5dde6; border-radius:10px; font-size:16px; font-family:inherit; background:#fff; color:var(--ink); }
textarea { min-height:80px; resize:vertical; }
input[type=checkbox] { width:auto; margin:0 6px 0 0; }
button, .boton { display:inline-block; margin-top:12px; background:var(--blue); color:#fff; border:0; border-radius:10px; padding:10px 14px; font-size:15px; cursor:pointer; text-decoration:none; font-family:inherit; }
button:disabled { opacity:.55; cursor:default; }
button.ocupado::after { content:" …"; }
.ghost { background:#fff; color:var(--ink); border:1px solid #d5dde6; }
.peligro { background:#9f1239; }
.verde { background:#166534; }
button.sm, .boton.sm { margin:4px 4px 0 0; padding:6px 10px; font-size:13px; }
.fila-botones { display:flex; flex-wrap:wrap; gap:6px; align-items:center; }
.fila-botones button { margin-top:0; }
.arriba { display:flex; justify-content:space-between; align-items:center; gap:10px; }
.quien { display:flex; align-items:center; gap:10px; min-width:0; }
.quien b { display:block; overflow:hidden; text-overflow:ellipsis; white-space:nowrap; }
.avatar { width:46px; height:46px; border-radius:50%; object-fit:cover; background:#d7e2ee; flex:none; }
.logo { width:46px; height:46px; border-radius:12px; flex:none; }
nav.tabs { display:flex; gap:6px; overflow-x:auto; margin:12px -4px 12px; padding:0 4px 4px; scrollbar-width:none; position:sticky; top:0; z-index:5; background:var(--bg); padding-top:6px; }
nav.tabs::-webkit-scrollbar { display:none; }
nav.tabs button { margin:0; background:#fff; color:var(--ink); border:1px solid #d5dde6; white-space:nowrap; padding:8px 12px; font-size:14px; position:relative; }
nav.tabs button.on { background:var(--ink); color:#fff; border-color:var(--ink); }
.punto { display:inline-block; min-width:18px; padding:0 5px; height:18px; line-height:18px; border-radius:9px; background:#c2410c; color:#fff; font-size:11px; font-weight:700; text-align:center; margin-left:4px; }
.seg { display:flex; gap:6px; flex-wrap:wrap; margin:8px 0; }
.seg button { margin:0; padding:6px 12px; font-size:14px; background:#fff; color:var(--ink); border:1px solid #d5dde6; }
.seg button.on { background:var(--ink); color:#fff; border-color:var(--ink); }
.msg { min-height:18px; color:var(--debe); font-size:14px; margin-top:8px; }
.msg.ok { color:var(--ok); }
.stats { display:grid; grid-template-columns:repeat(auto-fit, minmax(130px, 1fr)); gap:8px; margin:8px 0 12px; }
.stat { background:#f4f7fb; border-radius:12px; padding:10px 12px; border:0; margin:0; text-align:left; color:var(--ink); font-size:inherit; }
button.stat:hover { background:#e7eef6; }
.stat b { display:block; font-size:22px; }
.stat span { font-size:12px; color:var(--muted); }
.stat.alerta b { color:var(--debe); } .stat.bien b { color:var(--ok); } .stat.aviso b { color:var(--rev); }
.chip { display:inline-block; padding:2px 8px; border-radius:999px; font-size:12px; font-weight:700; white-space:nowrap; }
.chip.ok { background:#dcfce7; color:var(--ok); } .chip.debe { background:#ffe4e6; color:var(--debe); }
.chip.rev { background:#fef3c7; color:var(--rev); } .chip.libre { background:#e8eef5; color:#3d4b5c; }
.muted { color:var(--muted); } .chico { font-size:13px; }
.scroll { overflow-x:auto; -webkit-overflow-scrolling:touch; }
.tbl { width:100%; border-collapse:collapse; font-size:14px; }
.tbl th, .tbl td { text-align:left; padding:8px 6px; border-bottom:1px solid var(--line); vertical-align:middle; }
.tbl th { font-size:12px; color:var(--muted); font-weight:600; }
.tbl td.c, .tbl th.c { text-align:center; }
.tbl button { margin:2px 4px 2px 0; padding:6px 10px; font-size:13px; }
.cuadro td.c { font-size:16px; }
.item { display:flex; justify-content:space-between; align-items:center; gap:10px; width:100%; margin:0; background:#fff; color:var(--ink); border:0; border-bottom:1px solid var(--line); border-radius:0; padding:12px 4px; text-align:left; font-size:15px; }
.item:hover { background:#f7f9fb; }
.renglon { padding:12px 0; border-bottom:1px solid var(--line); font-size:14px; }
.renglon:last-child { border-bottom:0; }
.nav-mes { display:flex; justify-content:space-between; align-items:center; gap:8px; margin-bottom:8px; }
.nav-mes button { margin:0; } .nav-mes b { font-size:16px; text-transform:capitalize; }
.cal { display:grid; grid-template-columns:repeat(7, minmax(0, 1fr)); gap:4px; }
.cal .hd { text-align:center; font-size:12px; color:var(--muted); padding:4px 0; }
button.dia { margin:0; width:100%; min-height:70px; background:#f7f9fb; color:var(--ink); text-align:left; padding:4px; border-radius:10px; font-size:11px; line-height:1.2; border:1px solid transparent; overflow:hidden; }
button.dia.vacio { visibility:hidden; }
button.dia.sel { border-color:var(--blue); background:#e7eef6; }
button.dia.hoy .n { color:#c2410c; }
button.dia.hoy { box-shadow:inset 0 0 0 2px #c2410c; }
button.dia .n { display:block; font-weight:700; font-size:13px; margin-bottom:2px; }
button.dia .ev { display:block; margin-top:2px; background:var(--blue); color:#fff; border-radius:5px; padding:1px 4px; overflow:hidden; white-space:nowrap; text-overflow:ellipsis; }
button.dia .ev.pend { background:#c2410c; } button.dia .ev.gratis { background:#64748b; }
.turnos { display:grid; grid-template-columns:repeat(auto-fit, minmax(140px, 1fr)); gap:8px; margin-top:8px; }
.turnos button { margin:0; background:#fff; color:var(--ink); border:1px solid #d5dde6; padding:12px; }
.turnos button.on { background:var(--blue); color:#fff; border-color:var(--blue); }
.turnos button:disabled { background:#f1f5f9; color:#94a3b8; text-decoration:line-through; }
.pago-info { display:flex; gap:14px; align-items:center; background:#f4f7fb; border-radius:12px; padding:12px; margin:8px 0; }
.pago-info img { width:110px; height:110px; object-fit:contain; background:#fff; border-radius:8px; flex:none; }
img.foto { display:block; width:100%; max-height:380px; object-fit:contain; background:#f4f7fb; border-radius:12px; margin-top:10px; }
img.mini { width:64px; height:64px; object-fit:cover; border-radius:8px; cursor:zoom-in; background:#f4f7fb; vertical-align:middle; }
.burbuja { background:#f4f7fb; border-radius:14px 14px 14px 4px; padding:10px 12px; margin:8px 40px 8px 0; font-size:14px; }
.burbuja.admin { background:var(--blue); color:#fff; border-radius:14px 14px 4px 14px; margin:8px 0 8px 40px; }
.burbuja.admin .muted { color:#dbe7f5; }
.burbuja .quien-dice { font-size:12px; font-weight:700; margin-bottom:4px; }
.burbuja img { max-width:220px; border-radius:10px; display:block; margin-top:6px; }
.barra-voto { background:#e8eef5; border-radius:8px; height:26px; position:relative; overflow:hidden; margin:6px 0; }
.barra-voto i { position:absolute; left:0; top:0; bottom:0; background:#9db7d4; }
.barra-voto.mia i { background:var(--blue); opacity:.45; }
.barra-voto span { position:relative; padding:0 10px; line-height:26px; font-size:13px; display:flex; justify-content:space-between; }
.qr svg { width:180px; height:180px; display:block; margin:8px auto; }
.codigo { font-family:ui-monospace, Menlo, monospace; font-size:26px; letter-spacing:4px; text-align:center; font-weight:700; }
.velo { position:fixed; inset:0; background:rgba(15,23,42,.5); z-index:40; display:flex; align-items:flex-end; justify-content:center; }
.hoja { background:#fff; width:100%; max-width:760px; max-height:92vh; overflow:auto; border-radius:18px 18px 0 0; padding:16px; }
@media (min-width:700px) { .velo { align-items:center; } .hoja { border-radius:18px; } }
.aviso-box { background:#fef3c7; color:#713f12; border-radius:12px; padding:10px 12px; font-size:14px; margin:8px 0; }
.info-box { background:#e7eef6; border-radius:12px; padding:10px 12px; font-size:14px; margin:8px 0; }
#toast { position:fixed; left:50%; bottom:20px; transform:translateX(-50%); background:var(--ink); color:#fff; padding:10px 16px; border-radius:12px; z-index:60; font-size:14px; max-width:90vw; box-shadow:0 8px 24px rgba(0,0,0,.2); }
#toast.error { background:#9f1239; }
.grid2 { display:grid; grid-template-columns:1fr 1fr; gap:0 12px; }
@media (max-width:520px) { .grid2 { grid-template-columns:1fr; } .ocultar-movil { display:none; } }
.constancia { border:2px solid var(--ink); border-radius:12px; padding:20px; max-width:620px; margin:0 auto; background:#fff; }
.constancia .cab { display:flex; gap:12px; align-items:center; border-bottom:1px solid var(--line); padding-bottom:12px; margin-bottom:12px; }
.constancia .cab img { width:56px; height:56px; border-radius:12px; }
.constancia dl { display:grid; grid-template-columns:150px 1fr; gap:8px; margin:0; font-size:15px; }
.constancia dt { color:var(--muted); } .constancia dd { margin:0; font-weight:600; }
.constancia .monto { font-size:26px; font-weight:800; text-align:right; margin-top:12px; }
.constancia .nota { font-size:12px; color:var(--muted); margin-top:16px; border-top:1px dashed var(--line); padding-top:8px; }
@media print {
  body * { visibility:hidden !important; }
  .imprimible, .imprimible * { visibility:visible !important; }
  .imprimible { position:absolute; left:0; top:0; width:100%; }
  .velo { position:static; background:none; } .hoja { max-height:none; box-shadow:none; }
  .no-imprimir { display:none !important; }
}
.leyenda i { display:inline-block; width:12px; height:12px; border-radius:3px; vertical-align:-1px; margin:0 4px 0 10px; }
.leyenda i:first-child { margin-left:0; }
.leyenda .c-pag { background:var(--blue); } .leyenda .c-pend { background:#c2410c; } .leyenda .c-gratis { background:#64748b; }
@media (max-width:600px) { button.dia .ev .hora { display:none; } button.dia { min-height:60px; } }

/* Campo de foto en español (el input nativo queda oculto pero sigue validando). */
.campo-foto { display:flex; flex-wrap:wrap; align-items:center; gap:8px; margin-top:10px; flex:1; min-width:0; }
.campo-foto .etq { flex-basis:100%; font-size:13px; color:#3d4b5c; }
.campo-foto label.btn-foto { position:relative; display:inline-flex; align-items:center; margin:0; padding:8px 12px; border:1px solid #d5dde6; border-radius:10px; background:#fff; color:var(--ink); font-size:14px; cursor:pointer; }
.campo-foto label.btn-foto::before { content:"📷"; margin-right:6px; }
.campo-foto label.btn-foto:focus-within { outline:2px solid var(--blue); outline-offset:2px; }
.campo-foto input[type="file"] { position:absolute; left:0; bottom:0; width:1px; height:1px; padding:0; margin:0; border:0; opacity:0; overflow:hidden; pointer-events:none; }
.campo-foto .foto-estado { font-size:13px; color:var(--muted); min-width:0; overflow:hidden; text-overflow:ellipsis; white-space:nowrap; max-width:100%; flex:1; }
.campo-foto.con-foto .foto-estado { color:var(--ink); }
.campo-foto .foto-previa { width:56px; height:56px; object-fit:cover; border-radius:8px; background:#f4f7fb; }
.fila-botones .campo-foto { margin-top:0; }

/* Escáner de QR de visitas */
button.escanear { width:100%; font-size:17px; padding:14px; margin-top:4px; }
.visor { position:relative; background:#0f172a; border-radius:14px; overflow:hidden; aspect-ratio:3/4; max-height:60vh; margin:12px auto 0; width:100%; }
.visor[hidden] { display:none; }
.visor video { width:100%; height:100%; object-fit:cover; display:block; }
.visor .marco { position:absolute; left:15%; right:15%; top:50%; aspect-ratio:1; transform:translateY(-50%); border:3px solid rgba(255,255,255,.95); border-radius:18px; box-shadow:0 0 0 999px rgba(15,23,42,.35); pointer-events:none; }
.msg.info { color:var(--muted); }
.resultado { text-align:center; padding:8px 4px 4px; }
.resultado .icono { width:64px; height:64px; border-radius:50%; margin:4px auto 8px; display:flex; align-items:center; justify-content:center; font-size:34px; font-weight:700; color:#fff; }
.resultado.ok .icono { background:var(--ok); } .resultado.aviso .icono { background:var(--rev); } .resultado.error .icono { background:var(--debe); }
.resultado h2 { margin:4px 0 8px; } .resultado.ok h2 { color:var(--ok); } .resultado.aviso h2 { color:var(--rev); } .resultado.error h2 { color:var(--debe); }
.resultado p { margin:4px 0; font-size:16px; }

/* WhatsApp en la relación de residentes */
.item-fila { display:flex; align-items:center; gap:8px; border-bottom:1px solid var(--line); }
.item-fila .item { border-bottom:0; flex:1; min-width:0; }
a.wa { flex:none; display:inline-flex; align-items:center; gap:5px; background:#1faa53; color:#fff; text-decoration:none; border-radius:999px; padding:7px 11px; font-size:13px; font-weight:600; }
a.wa:active { background:#178a43; }
.wa-no { flex:none; padding:0 6px; }

/* Recibo de mantenimiento (igual al formato en papel) */
.btn-archivo { display:inline-flex; align-items:center; padding:6px 12px; font-size:14px; border:1px solid #d5dde6; border-radius:10px; background:#fff; color:var(--ink); cursor:pointer; margin:0; }
.btn-archivo:focus-within { outline:2px solid var(--blue); outline-offset:2px; }
.tbl.grilla input { padding:6px 8px; font-size:14px; margin:0; min-width:0; }
.tbl.grilla td, .tbl.grilla th { padding:4px; white-space:nowrap; }
.tbl .num, .tbl th.num { text-align:right; font-variant-numeric:tabular-nums; }
.tbl.previa { font-size:13px; } .tbl.previa th, .tbl.previa td { white-space:nowrap; padding:6px 5px; }
.tbl.previa tfoot th { color:var(--ink); background:#f4f7fb; }
.tbl .debe, .debe { color:#b91c1c; } .ok { color:#15803d; }
.concepto { display:flex; gap:6px; flex-wrap:wrap; align-items:center; margin-bottom:6px; }
.concepto input[data-k="nombre"] { flex:1; min-width:160px; margin:0; } .concepto select { width:auto; margin:0; } .concepto button { margin:0; }
.tbl.desglose { margin:6px 0 8px; } .tbl.desglose td, .tbl.desglose th { padding:4px 6px; }
details.renglon summary { cursor:pointer; list-style:none; } details.renglon summary::-webkit-details-marker { display:none; }
.recibo { background:#fff; color:#111; font-family:Arial, Helvetica, sans-serif; font-size:13px; max-width:640px; margin:0 auto; padding:8px 4px; }
.recibo .rc-cab b { font-size:12px; } .recibo .rc-cab div { font-size:14px; }
.recibo .rc-titulo { font-size:15px; text-align:center; margin:18px 0 14px; } .recibo .rc-titulo span { font-weight:400; }
.recibo .rc-saludo { margin:0 0 2px; } .recibo .rc-intro { margin:0 0 10px; font-size:12px; }
.rc-tabla { width:100%; border-collapse:collapse; font-size:12px; }
.rc-tabla th, .rc-tabla td { border:1px solid #111; padding:2px 5px; }
.rc-tabla th { text-transform:uppercase; text-align:center; font-weight:700; }
.rc-tabla td.c { text-align:center; } .rc-tabla td.num { text-align:right; font-weight:700; white-space:nowrap; }
.rc-tabla td.con { text-transform:uppercase; font-weight:700; }
.rc-tabla tr.rc-total td { text-transform:uppercase; font-weight:700; text-align:center; } .rc-tabla tr.rc-total td.num { text-align:right; }
.recibo .rc-banco { margin-top:26px; line-height:1.45; font-size:13px; }
.recibo .rc-nota { margin-top:18px; font-size:12.5px; } .recibo .rc-nota b { text-decoration:underline; }
.recibo .rc-nota ol { margin:4px 0 0; padding-left:18px; } .recibo .rc-nota li { margin:1px 0; }
@media print {
  @page { size:A4; margin:16mm 18mm; }
  html, body.modo-recibo { background:#fff !important; }
  body.modo-recibo > *:not(.velo) { display:none !important; }
  body.modo-recibo .velo, body.modo-recibo .hoja { background:#fff !important; box-shadow:none !important; min-height:0 !important; height:auto !important; }
  body.modo-recibo .velo { position:static; display:block; background:none; }
  body.modo-recibo .hoja { max-width:none; padding:0; border-radius:0; overflow:visible; }
  body.modo-recibo .imprimible { position:static; }
  body.modo-recibo .recibo { max-width:none; font-size:13px; }
}
/* Notificaciones */
label.interruptor { display:flex; align-items:center; gap:8px; margin:6px 0; font-size:15px; }
label.interruptor input { width:auto; margin:0; }
.estado-avisos { margin:6px 0; }

/* ---------- Tiendas y emprendimientos ---------- */
.aviso-legal { background:#fff7e6; border:1px solid #f5d79a; color:#5b4410; }
.info-box.alerta { background:#ffe4e6; color:#7f1d1d; }
.filtro-rubro { display:flex; align-items:center; gap:8px; margin:6px 0 2px; }
.filtro-rubro select { width:auto; flex:1; max-width:260px; }
.sec-titulo { font-size:19px; margin:16px 2px 6px; display:flex; align-items:baseline; gap:8px; flex-wrap:wrap; }
.negocio .neg-cab { display:flex; gap:12px; align-items:center; }
.neg-logo { width:56px; height:56px; border-radius:14px; object-fit:cover; flex:none; background:#f4f7fb; cursor:zoom-in; }
.neg-inicial { display:inline-flex; align-items:center; justify-content:center; font-size:24px; font-weight:800; color:#fff; background:var(--blue); cursor:default; }
.neg-titulo h3 { margin:0 0 4px; font-size:17px; }
.neg-chips { display:flex; gap:6px; flex-wrap:wrap; align-items:center; }
.neg-desc { margin:10px 0 6px; white-space:pre-line; }
.pub { border-top:1px solid #e6ebf1; padding-top:10px; margin-top:10px; }
.pub.oculta { opacity:.6; }
.pub-cab { display:flex; gap:8px; align-items:center; flex-wrap:wrap; }
.pub-texto { margin:6px 0; white-space:pre-line; }
.pub .precio { font-size:16px; color:var(--ok, #15803d); }
.pub-foto { display:block; width:100%; max-height:280px; object-fit:cover; border-radius:12px; margin:6px 0; cursor:zoom-in; background:#f4f7fb; }
.neg-historial { margin-top:8px; }
.neg-historial summary { cursor:pointer; font-weight:600; color:#3d4b5c; padding:6px 0; }
.neg-contacto { margin-top:10px; }
a.wa.wa-chico { padding:5px 9px; font-size:12px; }
.tipo-negocio { border:1px solid #d5dde6; border-radius:12px; padding:8px 12px; margin:0 0 10px; }
.tipo-negocio .opcion { display:flex; gap:8px; align-items:flex-start; margin:6px 0; font-weight:400; }
.tipo-negocio .opcion input { width:auto; margin-top:3px; }
.ghost.peligro { background:#fff; color:#b91c1c; border-color:#f3c0c0; }
/* Interruptor grande "Abierto ahora" */
.switch-grande { display:flex; align-items:center; gap:14px; padding:12px; margin:12px 0; border-radius:14px; background:#f4f7fb; cursor:pointer; }
.switch-grande input { position:absolute; opacity:0; width:1px; height:1px; }
.switch-grande .riel { position:relative; flex:none; width:64px; height:36px; border-radius:999px; background:#c7d0db; transition:background .2s; }
.switch-grande .riel::after { content:''; position:absolute; top:4px; left:4px; width:28px; height:28px; border-radius:50%; background:#fff; box-shadow:0 1px 3px rgba(0,0,0,.25); transition:transform .2s; }
.switch-grande input:checked + .riel { background:#16a34a; }
.switch-grande input:checked + .riel::after { transform:translateX(28px); }
.switch-grande input:focus-visible + .riel { outline:3px solid #93c5fd; outline-offset:2px; }
.switch-texto { display:flex; flex-direction:column; font-size:17px; }
.f-pub { border-top:1px solid #e6ebf1; margin-top:10px; padding-top:6px; }
.f-pub h3 { margin:6px 0 2px; }
/* Logo, detalle e imagen informativa */
.neg-logo { cursor:default; }
.neg-cab-boton { cursor:pointer; border-radius:12px; }
.neg-cab-boton:focus-visible { outline:3px solid #93c5fd; outline-offset:3px; }
.neg-info-btn { display:block; width:100%; padding:0; margin:10px 0; background:none; border:1px solid var(--line); border-radius:14px; overflow:hidden; cursor:zoom-in; position:relative; }
.neg-info { display:block; width:100%; height:auto; background:#f4f7fb; }
.neg-info-ayuda { position:absolute; right:8px; bottom:8px; background:rgba(15,23,42,.72); color:#fff; font-size:12px; font-weight:600; padding:4px 8px; border-radius:999px; }
.hoja-negocio .neg-logo { width:64px; height:64px; }
.visor-img { position:fixed; inset:0; z-index:70; background:#0b1220; display:flex; flex-direction:column; }
.visor-img .visor-barra { display:flex; align-items:center; justify-content:space-between; gap:8px; padding:10px 12px; padding-top:max(10px, env(safe-area-inset-top)); color:#dbe4ef; font-size:13px; }
.visor-img .visor-lienzo { flex:1; overflow:auto; display:flex; align-items:center; justify-content:center; touch-action:pan-x pan-y pinch-zoom; -webkit-overflow-scrolling:touch; }
.visor-img .visor-lienzo img { max-width:100%; max-height:100%; object-fit:contain; cursor:zoom-in; }
.visor-img.zoom .visor-lienzo { display:block; }
.visor-img.zoom .visor-lienzo img { max-width:none; max-height:none; width:250%; cursor:zoom-out; }
.neg-imagenes { display:grid; grid-template-columns:1fr; gap:10px; margin:12px 0; }
@media (min-width:560px) { .neg-imagenes { grid-template-columns:1fr 1fr; } }
.slot-img { border:1px solid var(--line); border-radius:14px; padding:10px; background:#fbfcfe; }
.slot-cab { display:flex; flex-direction:column; margin-bottom:6px; }
.slot-vista { display:flex; align-items:center; justify-content:center; background:#f1f4f8; border-radius:10px; min-height:96px; margin-bottom:6px; overflow:hidden; }
.slot-vista.logo img { width:96px; height:96px; object-fit:cover; border-radius:16px; margin:6px; }
.slot-vista.imagen img { display:block; width:100%; max-height:220px; object-fit:contain; }
.slot-zoom { display:block; width:100%; padding:0; border:0; background:none; cursor:zoom-in; }
.slot-vacio { color:var(--muted); font-size:13px; padding:20px; }
/* ---------- Seguridad ---------- */
.centro { text-align:center; }
.chip.azul { background:#dbeafe; color:#1e40af; }
.t-rev { color:var(--rev); } .t-debe { color:var(--debe); }
/* Botón de pánico */
.card.emergencia { border:2px solid #fecaca; }
.btn-emergencia { display:flex; align-items:center; justify-content:center; gap:10px; width:100%; min-height:72px; margin:0; font-size:24px; font-weight:800; letter-spacing:.5px; background:#dc2626; color:#fff; border:0; border-radius:16px; box-shadow:0 6px 18px rgba(220,38,38,.35); }
.btn-emergencia:active { transform:scale(.98); background:#b91c1c; }
.mi-alerta { margin-top:10px; }
.linea-tiempo { list-style:none; margin:6px 0 0; padding:0 0 0 14px; border-left:3px solid #e5e7eb; font-size:14px; }
.linea-tiempo li { margin:4px 0; position:relative; }
.linea-tiempo li::before { content:''; position:absolute; left:-20px; top:6px; width:9px; height:9px; border-radius:50%; background:#9ca3af; }
.linea-tiempo li.ev-enviada::before { background:#dc2626; } .linea-tiempo li.ev-atendida::before { background:#d97706; } .linea-tiempo li.ev-cerrada::before { background:#16a34a; }
.tipos-panico { display:grid; grid-template-columns:1fr 1fr; gap:8px; margin:10px 0; }
.tipo-panico { margin:0; }
.tipo-panico input { position:absolute; opacity:0; width:1px; height:1px; }
.tipo-panico span { display:flex; align-items:center; justify-content:center; text-align:center; min-height:64px; padding:8px; border:2px solid #e5e7eb; border-radius:14px; font-weight:700; font-size:16px; background:#fff; cursor:pointer; }
.tipo-panico input:checked + span { border-color:#dc2626; background:#fef2f2; color:#991b1b; box-shadow:0 0 0 3px rgba(220,38,38,.15); }
.tipo-panico input:focus-visible + span { outline:3px solid #93c5fd; outline-offset:2px; }
.mantener { position:relative; overflow:hidden; width:100%; min-height:64px; margin-top:10px; background:#dc2626; color:#fff; font-size:17px; font-weight:800; border:0; border-radius:14px;
  touch-action:none; user-select:none; -webkit-user-select:none; -webkit-touch-callout:none; }
.mantener:disabled { background:#fca5a5; }
.mantener .relleno { position:absolute; left:0; top:0; bottom:0; width:0; background:#7f1d1d; transition:none; }
.mantener .txt { position:relative; }
.mantener.presionando { transform:scale(.99); }
.numeros-emergencia a { font-weight:800; color:#b91c1c; }
/* Aviso rojo para portería y administración */
#alertas-banner { position:sticky; top:0; z-index:40; margin:0 0 8px; }
.alerta-roja { background:#dc2626; color:#fff; border-radius:16px; padding:12px 14px; margin:8px 0; box-shadow:0 8px 22px rgba(220,38,38,.4); animation:latido 1.2s ease-in-out infinite; }
.alerta-roja.atendida { background:#b45309; animation:none; box-shadow:0 6px 16px rgba(180,83,9,.35); }
.alerta-roja .ar-titulo { font-size:19px; font-weight:900; letter-spacing:.3px; }
.alerta-roja .ar-quien { font-size:15px; font-weight:600; margin-top:2px; }
.alerta-roja .ar-nota { margin-top:6px; font-size:15px; background:rgba(0,0,0,.15); border-radius:10px; padding:6px 10px; }
.alerta-roja .ar-estado { margin-top:6px; font-size:14px; opacity:.95; }
.alerta-roja .ar-prueba { display:inline-block; font-size:11px; font-weight:800; background:#fff; color:#b91c1c; border-radius:999px; padding:1px 8px; vertical-align:middle; }
.alerta-roja .ar-boton { background:#fff; color:#991b1b; font-weight:900; font-size:17px; min-width:130px; border:0; }
@keyframes latido { 0%, 100% { box-shadow:0 8px 22px rgba(220,38,38,.4); } 50% { box-shadow:0 8px 34px rgba(220,38,38,.85); } }
@media (prefers-reduced-motion: reduce) { .alerta-roja { animation:none; } }
.alerta-hist p { margin:6px 0; }
/* Bitácora */
fieldset.cats, fieldset.puntos-plan { border:0; padding:0; margin:8px 0; }
fieldset.cats legend, fieldset.puntos-plan legend { font-weight:600; font-size:14px; margin-bottom:6px; padding:0; }
fieldset.cats { display:flex; flex-wrap:wrap; gap:6px; }
.cat-op { margin:0; }
.cat-op input { position:absolute; opacity:0; width:1px; height:1px; }
.cat-op span { display:inline-block; padding:8px 12px; border:1px solid #d5dde6; border-radius:999px; font-size:14px; font-weight:600; background:#fff; cursor:pointer; }
.cat-op input:checked + span { background:var(--ink); color:#fff; border-color:var(--ink); }
.cat-op input:focus-visible + span { outline:3px solid #93c5fd; outline-offset:2px; }
.dia-bitacora { font-size:15px; margin:14px 0 6px; color:var(--muted); }
.dia-bitacora::first-letter { text-transform:uppercase; }
.entrada { border-left:4px solid #cbd5e1; padding:6px 10px; margin:8px 0; background:#fbfcfe; border-radius:0 10px 10px 0; }
.entrada-texto { margin:4px 0; white-space:pre-line; }
.entrada.cat-incidente { border-color:#dc2626; } .entrada.cat-sospechosa { border-color:#7c3aed; } .entrada.cat-mantenimiento { border-color:#d97706; } .entrada.cat-entrega { border-color:#2563eb; } .entrada.cat-novedad { border-color:#16a34a; }
.chip.cat { background:#e8eef5; color:#334155; } .chip.cat-incidente { background:#fee2e2; color:#991b1b; } .chip.cat-sospechosa { background:#ede9fe; color:#5b21b6; }
.chip.cat-mantenimiento { background:#fef3c7; color:#92400e; } .chip.cat-entrega { background:#dbeafe; color:#1e40af; } .chip.cat-novedad { background:#dcfce7; color:#166534; }
.filtros { margin-bottom:8px; }
/* Rondas */
.ronda-avance { margin:10px 0; }
.ronda-cuenta { font-size:22px; font-weight:800; display:block; }
.barra-avance { height:12px; background:#e5e7eb; border-radius:999px; overflow:hidden; margin-top:6px; }
.barra-avance i { display:block; height:100%; background:#16a34a; border-radius:999px; transition:width .3s; }
.puntos-ronda { list-style:none; padding:0; margin:8px 0 0; }
.puntos-ronda li { display:flex; align-items:center; gap:10px; padding:8px 0; border-top:1px solid var(--line); }
.puntos-ronda li .pn { flex:1; font-weight:600; }
.puntos-ronda .marca { width:26px; height:26px; border-radius:50%; border:2px solid #cbd5e1; display:flex; align-items:center; justify-content:center; font-weight:900; color:#fff; flex:none; }
.puntos-ronda li.hecho .marca { background:#16a34a; border-color:#16a34a; }
.tbl.noches tr[data-noche] { cursor:pointer; } .tbl.noches tr.sel td { background:#eef4fb; font-weight:700; }
.noche-sel { display:flex; align-items:center; gap:8px; margin:12px 0 4px; } .noche-sel input { width:auto; }
.ronda-fila { border-left:4px solid #cbd5e1; padding-left:10px; }
.ronda-fila.completa { border-color:#16a34a; } .ronda-fila.incompleta { border-color:#d97706; } .ronda-fila.perdida { border-color:#dc2626; } .ronda-fila.en_curso { border-color:#2563eb; }
.ronda-fila .pt { display:inline-block; margin:2px 6px 2px 0; } .ronda-fila .pt.ok { color:#166534; } .ronda-fila .pt.falta { color:#991b1b; }
/* Hoja de QR para imprimir */
.hoja.hoja-ancha { max-width:760px; }
.hoja-qr .hq-titulo { font-weight:800; font-size:18px; margin:6px 0 12px; text-align:center; }
.qr-grid { display:grid; grid-template-columns:repeat(auto-fill, minmax(200px, 1fr)); gap:12px; }
.qr-punto { border:2px dashed #94a3b8; border-radius:14px; padding:12px; text-align:center; display:flex; flex-direction:column; align-items:center; gap:4px; break-inside:avoid; page-break-inside:avoid; background:#fff; }
.qr-punto .qr svg { width:190px; height:190px; display:block; }
.qr-punto b { font-size:18px; } .qr-punto span { font-size:13px; color:#475569; } .qr-punto small { font-size:11px; color:#64748b; }
@media print {
  body.modo-recibo .qr-grid { grid-template-columns:repeat(2, 1fr); gap:10mm; }
  body.modo-recibo .qr-punto .qr svg { width:60mm; height:60mm; }
}

/* Conciliación con el banco y envío de recibos */
.conc-entrada { display:flex; align-items:center; justify-content:space-between; gap:12px; flex-wrap:wrap; }
.conc-entrada button { margin:0; }
.pasos { display:flex; gap:6px; list-style:none; padding:0; margin:8px 0 12px; flex-wrap:wrap; }
.pasos li { flex:1; min-width:90px; padding:8px; border-radius:10px; background:#eef2f7; color:#64748b; font-size:13px; }
.pasos li b { display:inline-flex; width:20px; height:20px; border-radius:50%; background:#cbd5e1; color:#fff; align-items:center; justify-content:center; margin-right:4px; font-size:12px; }
.pasos li.on { background:#dbeafe; color:#1e3a8a; font-weight:600; } .pasos li.on b { background:var(--blue); }
.pasos li.hecho { background:#dcfce7; color:#166534; } .pasos li.hecho b { background:#16a34a; }
.conc-grupo { margin-top:14px; } .conc-grupo h3 { margin:0 0 6px; }
.mov { display:block; padding:10px; border-radius:10px; margin:6px 0; border:1px solid #e2e8f0; }
label.mov { display:flex; gap:10px; align-items:flex-start; cursor:pointer; } label.mov input { width:auto; margin-top:4px; }
.mov.m-verde { background:#f0fdf4; border-color:#bbf7d0; } .mov.m-amarillo { background:#fffbeb; border-color:#fde68a; } .mov.m-gris { background:#f8fafc; color:#475569; }
.mov select { flex:1; min-width:200px; margin:6px 0 0; } .mov .fila-botones { align-items:center; }
details.conc-grupo summary { cursor:pointer; padding:6px 0; }
.conc-listo { text-align:center; padding:12px 0; }
.progreso { margin:8px 0; } .barra-prog { height:10px; background:#e2e8f0; border-radius:6px; overflow:hidden; margin-top:6px; } .barra-prog i { display:block; height:100%; background:#16a34a; transition:width .3s; }
a.boton.sm.verde { color:#fff; } a.boton.ghost { color:var(--ink); }
.pagina-recibo main { max-width:820px; margin:0 auto; padding:12px; }
.rc-tabla tr.rc-deuda td { color:#9f1239; font-weight:600; } .rc-tabla tr.rc-deuda td.num { text-align:right; } .rc-det { font-weight:400; font-size:.9em; }
.rc-tabla tr.rc-apagar td { background:#fde7ea; color:#9f1239; }
/* Estado de cuenta */
.ec-tabla { width:100%; margin-top:10px; } .ec-tabla td { padding:7px 6px; } .ec-tabla td.num { text-align:right; white-space:nowrap; }
.ec-tabla tr.ec-grupo td { background:#eef2f7; font-weight:700; text-transform:uppercase; font-size:12px; letter-spacing:.03em; }
.ec-tabla tr.ec-sub td { border-top:1px solid #cbd5e1; } .ec-tabla tr.ec-saldo td { background:#f8fafc; } .ec-tabla tr.ec-final td { background:#dbeafe; font-size:16px; }
.moroso .t-debe { font-size:16px; }

/* Conserje de turno */
.turno-card .turno-fila { display:flex; align-items:center; gap:12px; margin-bottom:10px; }
.turno-foto { width:58px; height:58px; border-radius:50%; object-fit:cover; flex:none; border:2px solid #dcfce7; }
.turno-ini { display:inline-flex; align-items:center; justify-content:center; background:var(--ok); color:#fff; font-weight:700; font-size:20px; }
.turno-nombre { font-size:18px; display:block; }
.turno-card .fila-botones { align-items:center; }
.turno-card a.boton { display:inline-flex; align-items:center; gap:4px; text-decoration:none; border-radius:999px; padding:7px 13px; font-size:13px; font-weight:600; background:var(--ink); color:#fff; }
.turno-vacio { border:1px dashed #cbd5e1; }
.ok-box { background:#dcfce7; color:#14532d; border-color:#86efac; }
/* Visitas del día */
.renglon.visita-dentro { border-left:3px solid var(--debe); padding-left:8px; }
.renglon.visita-salio { opacity:.75; }
/* Mantenimientos */
.fila-fotos { display:flex; gap:6px; flex-wrap:wrap; margin-top:4px; }
label.check { display:flex; align-items:center; gap:8px; }
@media print { #m-reporte .peligro { display:none; } }

/* Documento de la visita */
.grid2 .ancho-total { grid-column:1 / -1; }
.doc-tipo { margin-top:10px; font-size:13px; font-weight:700; color:var(--muted, #64748b); text-transform:uppercase; letter-spacing:.5px; }
.doc-numero { font-size:38px; font-weight:800; letter-spacing:3px; font-variant-numeric:tabular-nums; margin:2px 0 8px; word-break:break-all; }
.doc-foto { display:block; width:100%; max-height:360px; object-fit:contain; background:#0f172a; border-radius:12px; }
.doc-foto.grande { max-height:46vh; }
.verif-botones { display:grid; grid-template-columns:1fr 1fr; gap:10px; margin:14px 0 8px; }
.verif-botones button.grande { font-size:18px; padding:16px 10px; margin:0; }
