:root{--m:#281a39;--m2:#3b2a52;--md:#5c5168;--lav:#e6e3ef;--bg:#f5f4f8;--bl:#fff;--tx:#1d1724;--ok:#1f7a4d;--ok-bg:#e5f5ec;--am:#b7791f;--am-bg:#fdf3e1;--rj:#a3192e;--rj-bg:#fbe9ec;--az:#2563eb;--az-bg:#e8efff;--r:14px;--f:"Figtree",system-ui,-apple-system,"Segoe UI",Arial,sans-serif}
*{box-sizing:border-box;margin:0;padding:0}
body{font-family:var(--f);color:var(--tx);background:var(--bg);font-size:15px;line-height:1.5}
a{color:inherit}
.oculto{display:none!important}
svg{width:20px;height:20px;fill:currentColor;flex:none}
input,select,textarea,button{font:inherit;color:inherit}

/* Login */
.login{min-height:100vh;display:grid;place-items:center;background:linear-gradient(135deg,var(--m),#4b3566);padding:1.5rem}
.login-caja{background:#fff;padding:2.5rem;border-radius:20px;width:min(420px,100%);display:grid;gap:1rem;box-shadow:0 20px 60px rgba(0,0,0,.25)}
.login-caja p{color:var(--md)}
.error{color:var(--rj);font-weight:700;min-height:1.2em}

/* Marca */
.marca{font-weight:800;font-size:1.3rem;letter-spacing:.5px;color:#fff}
.marca span{font-weight:500;margin-left:6px;opacity:.75}
.marca.grande{color:var(--m);font-size:1.8rem}

/* Estructura */
.app{display:flex;min-height:100vh}
.lateral{width:240px;background:var(--m);color:#fff;display:flex;flex-direction:column;padding:1.5rem 1rem;position:fixed;inset:0 auto 0 0;z-index:20}
.lateral nav{display:grid;gap:.25rem;margin-top:2rem}
.lateral nav a{display:flex;align-items:center;gap:.8rem;padding:.75rem .9rem;border-radius:10px;text-decoration:none;color:#d9d3e6;font-weight:500;position:relative}
.lateral nav a:hover{background:rgba(255,255,255,.07);color:#fff}
.lateral nav a.activo{background:rgba(255,255,255,.14);color:#fff;font-weight:700}
.ver-web{margin-top:auto;padding:.75rem .9rem;color:#d9d3e6;text-decoration:none;font-size:.9rem}
.insignia{margin-left:auto;background:#e0457b;color:#fff;font-size:.72rem;font-weight:800;min-width:20px;height:20px;border-radius:999px;display:inline-grid;place-items:center;padding:0 6px}
.insignia:empty{display:none}
.contenido{flex:1;margin-left:240px;min-width:0}
.barra{position:sticky;top:0;z-index:10;background:rgba(245,244,248,.92);backdrop-filter:blur(8px);display:flex;align-items:center;justify-content:space-between;padding:1.1rem 2rem;border-bottom:1px solid var(--lav)}
.barra h1{font-size:1.5rem;color:var(--m)}
.barra-acciones{display:flex;gap:.5rem}
.campana{position:relative}
.campana .insignia{position:absolute;top:-4px;right:-4px}
.vista{padding:1.8rem 2rem 4rem;max-width:1400px}

/* Botones y formularios */
.btn{display:inline-flex;align-items:center;justify-content:center;gap:.45rem;border:1px solid var(--lav);background:#fff;border-radius:10px;padding:.6rem 1rem;font-weight:700;cursor:pointer;text-decoration:none;color:var(--m);white-space:nowrap}
.btn:hover{border-color:var(--md)}
.btn.primario{background:var(--m);border-color:var(--m);color:#fff}
.btn.primario:hover{background:var(--m2)}
.btn.verde{background:var(--ok);border-color:var(--ok);color:#fff}
.btn.rojo{color:var(--rj);border-color:#f0c5cc}
.btn.wa{background:#25d366;border-color:#25d366;color:#fff}
.btn.icono{padding:.55rem;border-radius:999px}
.btn.peq{padding:.35rem .7rem;font-size:.85rem}
.btn.ancho{width:100%}
.btn:disabled{opacity:.55;cursor:wait}
label{display:block;font-size:.82rem;font-weight:700;color:var(--md);margin-bottom:.3rem}
input[type=text],input[type=password],input[type=number],input[type=email],input[type=tel],input[type=datetime-local],input[type=search],select,textarea{width:100%;padding:.65rem .8rem;border:1px solid #d6d0e2;border-radius:10px;background:#fff}
textarea{min-height:110px;resize:vertical}
input:focus,select:focus,textarea:focus{outline:2px solid var(--m);border-color:transparent}
.campos{display:grid;grid-template-columns:repeat(2,1fr);gap:1rem}
.campos .completo{grid-column:1/-1}
.interruptor{display:flex;align-items:center;gap:.6rem;font-weight:700;color:var(--tx);cursor:pointer}
.interruptor input{width:18px;height:18px}

/* Tarjetas y KPIs */
.kpis{display:grid;grid-template-columns:repeat(4,1fr);gap:1rem;margin-bottom:1.5rem}
.kpi{background:#fff;border-radius:var(--r);padding:1.2rem 1.3rem;box-shadow:0 1px 3px rgba(40,26,57,.06);cursor:pointer;text-decoration:none;display:block}
.kpi small{color:var(--md);font-weight:700;font-size:.8rem;text-transform:uppercase;letter-spacing:.4px}
.kpi strong{display:block;font-size:2.1rem;color:var(--m);line-height:1.2}
.kpi span{color:var(--md);font-size:.85rem}
.kpi.alerta strong{color:#e0457b}
.rejilla2{display:grid;grid-template-columns:1fr 1fr;gap:1.5rem}
.caja{background:#fff;border-radius:var(--r);padding:1.3rem;box-shadow:0 1px 3px rgba(40,26,57,.06)}
.caja h2{font-size:1.05rem;color:var(--m);margin-bottom:.9rem;display:flex;justify-content:space-between;align-items:center}
.caja h2 a{font-size:.85rem;color:var(--md);text-decoration:none}
.vacio{color:var(--md);padding:1.5rem;text-align:center}
.lista-simple{display:grid}
.fila-item{display:flex;gap:.9rem;align-items:center;padding:.75rem .4rem;border-bottom:1px solid #f0edf5;cursor:pointer;border-radius:8px}
.fila-item:hover{background:#faf9fc}
.fila-item:last-child{border-bottom:0}
.fila-item .principal{flex:1;min-width:0}
.fila-item .principal b{display:block;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.fila-item .principal span{color:var(--md);font-size:.87rem;display:block;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.fecha-chip{width:52px;text-align:center;background:var(--bg);border-radius:10px;padding:.35rem 0;flex:none}
.fecha-chip b{display:block;font-size:1.2rem;color:var(--m);line-height:1}
.fecha-chip small{font-size:.7rem;text-transform:uppercase;color:var(--md);font-weight:700}

/* Chips de estado */
.chip{display:inline-block;font-size:.75rem;font-weight:800;padding:.2rem .6rem;border-radius:999px;background:var(--lav);color:var(--m);white-space:nowrap}
.chip.nuevo,.chip.pendiente{background:var(--am-bg);color:var(--am)}
.chip.respondido{background:var(--az-bg);color:var(--az)}
.chip.confirmada,.chip.visita-confirmada,.chip.disponible{background:var(--ok-bg);color:var(--ok)}
.chip.cerrado,.chip.cancelada,.chip.oculta{background:#eee;color:#666}
.chip.novedad{background:#e3f4ec;color:#1f7a4d}
.chip.reservada{background:var(--am-bg);color:var(--am)}
.chip.vendida,.chip.alquilada{background:var(--rj-bg);color:var(--rj)}

/* Mensajes */
.filtros{display:flex;gap:.5rem;flex-wrap:wrap;margin-bottom:1rem;align-items:center}
.filtro{border:1px solid var(--lav);background:#fff;border-radius:999px;padding:.4rem .9rem;font-weight:700;cursor:pointer;color:var(--md);font-size:.88rem}
.filtro.activo{background:var(--m);border-color:var(--m);color:#fff}
.filtros input[type=search]{max-width:260px;margin-left:auto;border-radius:999px}
.bandeja{display:grid;grid-template-columns:380px 1fr;gap:1.2rem;align-items:start}
.bandeja-lista{background:#fff;border-radius:var(--r);max-height:calc(100vh - 210px);overflow:auto;box-shadow:0 1px 3px rgba(40,26,57,.06)}
.msj{padding:.9rem 1rem;border-bottom:1px solid #f0edf5;cursor:pointer;display:grid;gap:.2rem}
.msj:hover{background:#faf9fc}
.msj.sel{background:#f1edf8;box-shadow:inset 3px 0 var(--m)}
.msj.no-leido b{font-weight:800}
.msj .linea{display:flex;justify-content:space-between;gap:.5rem;align-items:center}
.msj small{color:var(--md)}
.msj p{color:var(--md);font-size:.87rem;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.detalle{background:#fff;border-radius:var(--r);padding:1.5rem;box-shadow:0 1px 3px rgba(40,26,57,.06)}
.detalle-cab{display:flex;justify-content:space-between;gap:1rem;align-items:flex-start;flex-wrap:wrap;margin-bottom:1rem}
.detalle-cab h2{color:var(--m);font-size:1.35rem}
.detalle-cab p{color:var(--md)}
.acciones{display:flex;gap:.5rem;flex-wrap:wrap}
.tabla-datos{display:grid;grid-template-columns:170px 1fr;gap:.45rem 1rem;margin:1rem 0 1.4rem;padding:1rem;background:var(--bg);border-radius:12px}
.tabla-datos dt{color:var(--md);font-weight:700;font-size:.87rem}
.tabla-datos dd{white-space:pre-wrap;word-break:break-word}
.bloque{margin-top:1.3rem}
.bloque h3{font-size:.95rem;color:var(--m);margin-bottom:.6rem}

/* Calendario */
.cal-cab{display:flex;align-items:center;gap:.6rem;margin-bottom:1rem;flex-wrap:wrap}
.cal-cab h2{color:var(--m);font-size:1.3rem;min-width:200px;text-transform:capitalize}
.cal-cab .derecha{margin-left:auto;display:flex;gap:.5rem}
.cal-layout{display:grid;grid-template-columns:1fr 340px;gap:1.2rem;align-items:start}
.calendario{background:#fff;border-radius:var(--r);overflow:hidden;box-shadow:0 1px 3px rgba(40,26,57,.06)}
.cal-dias,.cal-rejilla{display:grid;grid-template-columns:repeat(7,1fr)}
.cal-dias div{padding:.6rem;text-align:center;font-size:.78rem;font-weight:800;color:var(--md);text-transform:uppercase;background:#faf9fc}
.cal-celda{min-height:105px;border-top:1px solid #f0edf5;border-left:1px solid #f0edf5;padding:.35rem;cursor:pointer;display:flex;flex-direction:column;gap:.2rem}
.cal-celda:nth-child(7n+1){border-left:0}
.cal-celda:hover{background:#faf9fc}
.cal-celda.fuera{background:#fcfcfd;color:#b5b0bf}
.cal-celda.hoy .num{background:var(--m);color:#fff}
.cal-celda.sel{box-shadow:inset 0 0 0 2px var(--m)}
.num{font-size:.8rem;font-weight:800;width:24px;height:24px;display:grid;place-items:center;border-radius:999px}
.ev{font-size:.72rem;font-weight:700;padding:.15rem .4rem;border-radius:6px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;background:var(--am-bg);color:var(--am)}
.ev.Confirmada{background:var(--ok-bg);color:var(--ok)}
.ev.Cancelada{background:#eee;color:#888;text-decoration:line-through}
.dia-panel h2 span{font-weight:500;color:var(--md);font-size:.9rem}

/* Casas */
.casas-rejilla{display:grid;grid-template-columns:repeat(auto-fill,minmax(270px,1fr));gap:1.2rem}
.casa{background:#fff;border-radius:var(--r);overflow:hidden;box-shadow:0 1px 3px rgba(40,26,57,.06);cursor:pointer;transition:transform .15s,box-shadow .15s;display:flex;flex-direction:column}
.casa:hover{transform:translateY(-2px);box-shadow:0 8px 24px rgba(40,26,57,.12)}
.casa .foto{position:relative;aspect-ratio:3/2;background:var(--lav)}
.casa .foto img{width:100%;height:100%;object-fit:cover;display:block}
.casa .foto .chip{position:absolute;top:10px;left:10px}
.casa .foto .oculta-marca{position:absolute;inset:0;background:rgba(255,255,255,.6);display:grid;place-items:center;font-weight:800;color:var(--md)}
.casa .info{padding:1rem 1.1rem}
.casa h3{color:var(--m);font-size:1.08rem}
.casa .zona{color:var(--md);font-size:.88rem}
.casa .linea{display:flex;justify-content:space-between;align-items:center;margin-top:.6rem}
.casa .precio{font-weight:800;color:var(--m);font-size:1.15rem}
.casa .datos{color:var(--md);font-size:.82rem}
.nueva-casa{border:2px dashed #cfc8dc;background:transparent;display:grid;place-items:center;min-height:250px;color:var(--md);font-weight:800;box-shadow:none}

/* Editor de casa */
.fotos-editor{display:grid;grid-template-columns:repeat(auto-fill,minmax(120px,1fr));gap:.7rem}
.foto-item{position:relative;border-radius:10px;overflow:hidden;aspect-ratio:4/3;background:var(--lav);border:2px solid transparent}
.foto-item.principal{border-color:var(--m)}
.foto-item img{width:100%;height:100%;object-fit:cover;display:block}
.foto-item .marca-p{position:absolute;left:6px;top:6px;background:var(--m);color:#fff;font-size:.68rem;font-weight:800;padding:.1rem .45rem;border-radius:6px}
.foto-item .ctrl{position:absolute;inset:auto 0 0 0;display:flex;justify-content:space-between;padding:.25rem;background:linear-gradient(transparent,rgba(0,0,0,.55))}
.foto-item .ctrl button{background:rgba(255,255,255,.92);border:0;border-radius:6px;font-size:.75rem;font-weight:800;padding:.15rem .4rem;cursor:pointer}
.subir{border:2px dashed #cfc8dc;border-radius:10px;aspect-ratio:4/3;display:grid;place-items:center;cursor:pointer;color:var(--md);font-weight:800;font-size:.85rem;text-align:center;padding:.4rem}
.subir:hover{border-color:var(--m);color:var(--m)}
.pestanas{display:flex;gap:.4rem;margin-bottom:1rem}

/* Modal */
.modal{position:fixed;inset:0;background:rgba(29,23,36,.55);z-index:100;display:grid;place-items:center;padding:1rem}
.modal-caja{background:#fff;border-radius:18px;width:min(760px,100%);max-height:92vh;overflow:auto;box-shadow:0 30px 80px rgba(0,0,0,.3)}
.modal-cab{display:flex;justify-content:space-between;align-items:center;padding:1.2rem 1.5rem;border-bottom:1px solid var(--lav);position:sticky;top:0;background:#fff;z-index:2}
.modal-cab h2{color:var(--m);font-size:1.2rem}
.modal-cuerpo{padding:1.5rem}
.modal-pie{display:flex;gap:.6rem;justify-content:flex-end;padding:1rem 1.5rem;border-top:1px solid var(--lav);position:sticky;bottom:0;background:#fff;flex-wrap:wrap}
.modal-pie .izq{margin-right:auto}

/* Avisos */
.avisos-lista{position:absolute;right:2rem;top:64px;width:360px;max-height:70vh;overflow:auto;background:#fff;border-radius:14px;box-shadow:0 20px 50px rgba(40,26,57,.2);padding:.5rem}
.avisos-lista h3{padding:.6rem .7rem;font-size:.95rem;color:var(--m)}

/* Toasts */
.toasts{position:fixed;bottom:1.2rem;right:1.2rem;display:grid;gap:.5rem;z-index:200}
.toast{background:var(--m);color:#fff;padding:.8rem 1.1rem;border-radius:12px;font-weight:700;box-shadow:0 10px 30px rgba(0,0,0,.2);max-width:360px;animation:entra .25s ease}
.toast.error{background:var(--rj)}
.toast.ok{background:var(--ok)}
@keyframes entra{from{transform:translateY(10px);opacity:0}}
.cargando{display:grid;place-items:center;padding:4rem;color:var(--md)}
.cargando::before{content:"";width:34px;height:34px;border-radius:50%;border:3px solid var(--lav);border-top-color:var(--m);animation:gira .8s linear infinite;margin-bottom:.8rem}
@keyframes gira{to{transform:rotate(360deg)}}
.aviso-info{background:var(--az-bg);color:#1e3a8a;padding:.9rem 1rem;border-radius:12px;margin-bottom:1rem;font-size:.92rem}
.aviso-info.amarillo{background:var(--am-bg);color:#7a4d0e}

/* Responsive */
@media (max-width:1100px){.kpis{grid-template-columns:repeat(2,1fr)}.cal-layout,.bandeja{grid-template-columns:1fr}.bandeja-lista{max-height:none}}
@media (max-width:760px){
  .lateral{inset:auto 0 0 0;width:100%;height:64px;flex-direction:row;padding:0 .3rem;padding-bottom:env(safe-area-inset-bottom)}
  .lateral .marca,.ver-web{display:none}
  .lateral nav{display:flex;margin:0;width:100%;justify-content:space-around}
  .lateral nav a{flex-direction:column;gap:.1rem;padding:.45rem .4rem;font-size:.68rem}
  .lateral nav a .insignia{position:absolute;top:2px;right:6px;margin:0}
  .contenido{margin-left:0;padding-bottom:70px}
  .barra{padding:.9rem 1rem}.vista{padding:1rem 1rem 3rem}
  .rejilla2,.campos{grid-template-columns:1fr}
  .tabla-datos{grid-template-columns:1fr}.tabla-datos dt{margin-top:.4rem}
  .cal-celda{min-height:62px}.ev{font-size:0;height:6px;padding:0}
  .avisos-lista{right:.5rem;left:.5rem;width:auto}
}
