/* Property Leads — minimal CSS, mobile-friendly */
:root {
  --bg: #f5f5f7;
  --fg: #1d1d1f;
  --muted: #86868b;
  --accent: #0071e3;
  --accent-dark: #005bbf;
  --border: #d2d2d7;
  --row-new-bg: #fff7e0;
  --card-bg: #ffffff;
  --danger: #c0392b;
  --status-new: #0071e3;
  --status-contacted: #ff9500;
  --status-in_negotiation: #af52de;
  --status-exclusive_signed: #34c759;
  --status-discarded: #8e8e93;
}

* { box-sizing: border-box; }
html, body { margin: 0; padding: 0; }
body {
  font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, sans-serif;
  background: var(--bg);
  color: var(--fg);
  font-size: 14px;
  line-height: 1.5;
}
a { color: var(--accent); text-decoration: none; }
a:hover { text-decoration: underline; }

/* Top bar */
.topbar {
  display: flex; align-items: center; gap: 24px;
  background: white; padding: 10px 20px;
  border-bottom: 1px solid var(--border);
}
.topbar .brand { font-weight: 700; font-size: 18px; color: var(--fg); }
.topbar nav { display: flex; gap: 16px; flex: 1; }
.topbar nav a { color: var(--fg); font-weight: 500; }
.topbar .user { display: flex; align-items: center; gap: 12px; color: var(--muted); }

main { padding: 20px; max-width: 1400px; margin: 0 auto; }

/* Login */
.login-wrap {
  min-height: 80vh; display: flex; align-items: center; justify-content: center;
}
.login-card {
  background: var(--card-bg); padding: 32px; border-radius: 12px;
  width: 360px; max-width: 100%; box-shadow: 0 1px 3px rgba(0,0,0,0.06);
  display: flex; flex-direction: column; gap: 12px;
}
.login-card h1 { margin: 0; font-size: 22px; }
.login-card label { display: flex; flex-direction: column; gap: 4px; font-size: 13px; color: var(--muted); }
.login-card input {
  padding: 10px 12px; border: 1px solid var(--border); border-radius: 8px; font-size: 14px;
}
.login-card input:focus { outline: 2px solid var(--accent); border-color: var(--accent); }
.alert {
  background: #fff1f0; color: var(--danger); padding: 10px 12px;
  border-radius: 6px; font-size: 13px;
}

/* Layout listado */
.layout { display: grid; grid-template-columns: 240px 1fr; gap: 20px; }
@media (max-width: 768px) { .layout { grid-template-columns: 1fr; } }

.filters {
  background: var(--card-bg); padding: 16px; border-radius: 10px;
  height: max-content; position: sticky; top: 20px;
}
.filters h3 { margin: 0 0 12px; font-size: 14px; }
.filters fieldset {
  border: none; padding: 0; margin: 0 0 14px;
  display: flex; flex-direction: column; gap: 4px;
}
.filters legend {
  font-size: 12px; color: var(--muted); margin-bottom: 6px;
  text-transform: uppercase; letter-spacing: 0.5px;
}
.filters .check { display: flex; gap: 6px; align-items: center; font-size: 13px; }
.filters .row { display: flex; gap: 6px; }
.filters .row input { flex: 1; min-width: 0; }
.filters input[type="number"], .filters input[type="search"] {
  padding: 6px 8px; border: 1px solid var(--border); border-radius: 6px; font-size: 13px;
}
.filters .search { display: flex; flex-direction: column; gap: 4px; margin-bottom: 14px; font-size: 12px; color: var(--muted); }
.filters button { margin-top: 8px; }

/* Results */
.results-header {
  display: flex; justify-content: space-between; align-items: center; margin-bottom: 12px;
}
.results-header h2 { margin: 0; font-size: 18px; }

.leads-table {
  width: 100%; border-collapse: collapse;
  background: var(--card-bg); border-radius: 10px; overflow: hidden;
  font-size: 13px;
}
.leads-table th, .leads-table td {
  padding: 10px 12px; text-align: left; border-bottom: 1px solid var(--border);
}
.leads-table th {
  background: #fafafc; font-weight: 600; font-size: 12px; color: var(--muted);
  text-transform: uppercase; letter-spacing: 0.4px;
}
.leads-table tbody tr:hover { background: #fafafc; }
.leads-table tbody tr.row-new { background: var(--row-new-bg); }
.leads-table tbody tr.row-new:hover { background: #fff0c0; }
.leads-table .price { font-weight: 600; color: var(--accent); white-space: nowrap; }

/* Status pills */
.status {
  display: inline-block; padding: 2px 8px; border-radius: 999px;
  font-size: 11px; font-weight: 600; color: white;
  text-transform: uppercase; letter-spacing: 0.4px;
}
.status-new { background: var(--status-new); }
.status-contacted { background: var(--status-contacted); }
.status-in_negotiation { background: var(--status-in_negotiation); }
.status-exclusive_signed { background: var(--status-exclusive_signed); }
.status-discarded { background: var(--status-discarded); }

/* Pager */
.pager {
  display: flex; gap: 16px; justify-content: center; align-items: center;
  margin-top: 16px; padding: 12px;
}

/* Detail */
.detail { display: flex; flex-direction: column; gap: 16px; }
.detail-grid { display: grid; grid-template-columns: 1fr 320px; gap: 20px; }
@media (max-width: 900px) { .detail-grid { grid-template-columns: 1fr; } }

.card {
  background: var(--card-bg); padding: 20px; border-radius: 10px;
  box-shadow: 0 1px 2px rgba(0,0,0,0.04);
}
.card h1 { margin: 0 0 8px; font-size: 22px; }
.card h3 { margin: 16px 0 8px; font-size: 14px; }
.detail .meta { display: flex; gap: 6px; flex-wrap: wrap; align-items: center; font-size: 13px; color: var(--fg); }
.detail .price-big { font-size: 32px; font-weight: 700; color: var(--accent); margin: 12px 0; }
.detail .kv { display: flex; flex-direction: column; gap: 4px; font-size: 13px; margin-bottom: 12px; }
.detail .description { white-space: pre-wrap; font-size: 13px; line-height: 1.6; }
.notes { list-style: none; padding: 0; margin: 8px 0 0; display: flex; flex-direction: column; gap: 12px; }
.notes .note-meta { font-size: 11px; color: var(--muted); margin-bottom: 4px; }
.notes .note-text { font-size: 13px; white-space: pre-wrap; }

/* Table wrap for horizontal scroll */
.table-wrap { overflow-x: auto; }

/* Sortable column headers */
.leads-table th.sortable a {
  display: inline-flex; align-items: center; gap: 4px;
  color: var(--muted); text-decoration: none; white-space: nowrap;
}
.leads-table th.sortable a:hover { color: var(--accent); }
.sort-hint { opacity: 0.45; font-size: 11px; }

/* Column widths */
.col-foto    { width: 60px; text-align: center; padding: 6px 8px; }
.col-fecha   { width: 90px; white-space: nowrap; }
.col-tipo    { width: 80px; }
.col-precio  { width: 100px; white-space: nowrap; }
.col-m2      { width: 80px; }
.col-ciudad  { width: 90px; }
.col-telefono{ width: 120px; }
.col-titulo  { }
.col-estado  { width: 110px; }
.col-link    { width: 50px; text-align: center; }

/* Photo thumbnail */
.thumb {
  display: block; width: 52px; height: 40px;
  object-fit: cover; border-radius: 5px; border: 1px solid var(--border);
}
.thumb-placeholder {
  display: flex; align-items: center; justify-content: center;
  width: 52px; height: 40px; border-radius: 5px; border: 1px dashed var(--border);
  font-size: 18px; color: var(--muted); text-decoration: none;
}
a.thumb-placeholder:hover { border-color: var(--accent); }

/* Phone link */
.phone-link { white-space: nowrap; font-size: 12px; }

/* NEW badge */
.badge-new {
  display: inline-block; padding: 1px 5px; border-radius: 4px;
  background: var(--accent); color: white;
  font-size: 9px; font-weight: 700; letter-spacing: 0.5px;
  vertical-align: middle; margin-left: 4px;
}

/* lead title link */
.lead-title { color: var(--fg); font-weight: 500; }
.lead-title:hover { color: var(--accent); text-decoration: underline; }

/* Buttons */
.btn-primary, .btn-secondary, .btn-link {
  display: inline-block; font: inherit; text-decoration: none; cursor: pointer;
  border: 1px solid transparent; border-radius: 6px; padding: 8px 14px;
  font-size: 13px; transition: background 0.15s;
}
.btn-primary { background: var(--accent); color: white; }
.btn-primary:hover { background: var(--accent-dark); }
.btn-secondary { background: white; color: var(--accent); border-color: var(--accent); }
.btn-secondary:hover { background: var(--accent); color: white; }
.btn-link { background: transparent; color: var(--accent); padding: 4px 8px; }

.muted { color: var(--muted); font-size: 13px; }

/* Status widget on detail page */
.status-widget { display: flex; align-items: center; flex-wrap: wrap; gap: 8px; }
.status-widget select {
  padding: 6px 8px; border: 1px solid var(--border); border-radius: 6px; font-size: 13px;
}

/* Note form */
.note-form { display: flex; flex-direction: column; gap: 8px; margin-bottom: 12px; }
.note-form textarea {
  width: 100%; padding: 8px 10px; border: 1px solid var(--border); border-radius: 6px;
  font: inherit; font-size: 13px; resize: vertical;
}
.note-form textarea:focus { outline: 2px solid var(--accent); border-color: var(--accent); }
.note-form button { align-self: flex-start; }

/* ===== Mejoras UI 2026-06 ===== */
/* #1 #2: ciudad y tipo en una sola linea, texto completo */
.col-tipo, .col-ciudad { white-space: nowrap; text-transform: capitalize; }
.col-ciudad { min-width: 92px; }
.col-tipo   { min-width: 100px; }
/* #3: fila precio min/max bien alineada */
.filters .row { display: grid; grid-template-columns: 1fr 1fr; gap: 8px; }
.filters .row input { width: 100%; min-width: 0; }
/* #4: miniatura mas grande y reconocible */
.col-foto { width: 112px; }
.thumb { width: 100px; height: 75px; }
.thumb-placeholder { width: 100px; height: 75px; font-size: 26px; }
/* #6 telefono en el listado, mas visible */
.col-telefono .phone-link { display: inline-flex; gap: 5px; background: #e9f7ec; color: #1d7a33; padding: 4px 9px; border-radius: 6px; font-weight: 600; font-size: 13px; }
.col-telefono .phone-link:hover { background: #1d7a33; color: #fff; text-decoration: none; }
/* #9: foto grande en la ficha de detalle */
.detail-photo { width: 100%; max-width: 560px; height: auto; aspect-ratio: 4 / 3; object-fit: cover; border-radius: 12px; border: 1px solid var(--border); margin-bottom: 14px; display: block; background: #f0f0f2; }
/* #6 #8: acciones de contacto en el detalle */
.contact-actions { display: flex; gap: 10px; align-items: center; flex-wrap: wrap; margin: 6px 0 16px; }
.contact-actions form { margin: 0; }
.btn-call { display: inline-flex; align-items: center; gap: 7px; background: #34c759; color: #fff; padding: 11px 18px; border-radius: 9px; font-weight: 700; font-size: 15px; }
.btn-call:hover { background: #28a745; text-decoration: none; }
.btn-blacklist { background: #fff; color: var(--danger); border: 1.5px solid var(--danger); padding: 10px 15px; border-radius: 9px; font-size: 13px; font-weight: 600; cursor: pointer; }
.btn-blacklist:hover { background: var(--danger); color: #fff; }


/* Mejoras UI 2026-06-12b */
.col-foto { width: 212px; }
.thumb { width: 200px; height: 150px; }
.thumb-placeholder { width: 200px; height: 150px; font-size: 44px; }
.leads-table tbody tr[data-href] { cursor: pointer; }
.leads-table tbody tr[data-href]:hover { background: #f3f6ff; }
.detail-photo { max-width: 720px; }
.phone-add-form { display: flex; gap: 6px; margin-top: 10px; align-items: center; }
.phone-add-form input { flex: 1; padding: 7px 9px; border: 1px solid var(--border); border-radius: 6px; }
.phone-add-form .btn-primary { white-space: nowrap; }


/* Mensaje personalizado al propietario 2026-06-12 */
.outreach textarea { width: 100%; box-sizing: border-box; padding: 9px 10px; border: 1px solid var(--border);
  border-radius: 8px; font-family: inherit; font-size: 13px; line-height: 1.5; resize: vertical; background: #fcfcff; }
.outreach-actions { display: flex; gap: 10px; align-items: center; margin-top: 8px; }

/* Gestion de usuarios 2026-06-12 */
.user-form{display:grid;grid-template-columns:1fr 1fr;gap:12px;max-width:640px;margin-top:10px;}
.user-form label{display:flex;flex-direction:column;font-size:13px;gap:4px;color:var(--muted);}
.user-form input{padding:8px 10px;border:1px solid var(--border);border-radius:6px;font-size:14px;}
.user-form .btn-primary{grid-column:1 / -1;justify-self:start;}
.msg-error{background:#fdecec;color:#b00020;padding:8px 12px;border-radius:6px;}
.msg-ok{background:#e8f7ec;color:#1a7f37;padding:8px 12px;border-radius:6px;}
.users-page .card{margin-bottom:18px;}

/* Pestanas + estados 2026-06-12 */
.topbar nav a.nav-active{color:var(--accent);font-weight:700;}
.status-message_sent{background:#e7f0ff;color:#1858c2;}
.status-blacklisted{background:#fde2e2;color:#b00020;}
.status-discarded{background:#ececf0;color:#666;}


/* CTA anuncio + WhatsApp 2026-06-12 */
.btn-cta-anuncio{display:inline-block;background:var(--accent);color:#fff;padding:11px 18px;border-radius:10px;font-weight:700;text-decoration:none;margin:4px 0 14px;box-shadow:0 2px 6px rgba(0,0,0,.12);}
.btn-cta-anuncio:hover{filter:brightness(1.08);}
.btn-whatsapp{display:inline-flex;align-items:center;gap:6px;background:#25D366;color:#fff;padding:9px 14px;border-radius:8px;font-weight:600;text-decoration:none;}
.btn-whatsapp:hover{filter:brightness(1.05);}

/* No quiere agencia + speech 2026-06-12 */
.status-no_agency{background:#fff0e0;color:#a85b00;}
.speech summary{cursor:pointer;font-weight:700;}
.speech ul{margin:8px 0;padding-left:18px;font-size:13px;line-height:1.5;}
.speech li{margin-bottom:7px;}
.status-no_answer{background:#fff8d6;color:#8a6d00;}

/* Panel de inicio 2026-06-19 */
.home{max-width:1000px;margin:0 auto;padding:30px 20px;}
.home-title{font-size:26px;margin:0 0 4px;}
.home-sub{color:var(--muted);margin:0 0 24px;}
.home-grid{display:grid;grid-template-columns:repeat(auto-fit,minmax(260px,1fr));gap:18px;}
.module-card{display:block;background:#fff;border:1px solid var(--border);border-radius:14px;padding:22px;text-decoration:none;color:inherit;box-shadow:0 1px 3px rgba(0,0,0,.06);transition:transform .12s,box-shadow .12s;}
a.module-card:hover{transform:translateY(-3px);box-shadow:0 6px 18px rgba(0,0,0,.10);border-color:var(--accent);}
.module-ico{font-size:34px;margin-bottom:8px;}
.module-card h2{font-size:18px;margin:0 0 6px;}
.module-card p{color:var(--muted);font-size:13px;line-height:1.5;margin:0 0 14px;}
.module-go{color:var(--accent);font-weight:700;}
.module-card.disabled{opacity:.6;}
.module-soon{display:inline-block;background:#ececf0;color:#666;font-size:12px;font-weight:600;padding:3px 10px;border-radius:20px;}

/* Modulo Fotos 2026-06-19 */
.fotos{max-width:1100px;margin:0 auto;padding:24px 20px;}
.fotos h1{margin:8px 0 4px;}
.fotos-form{display:flex;gap:10px;flex-wrap:wrap;margin:14px 0 6px;}
.fotos-form select,.fotos-form input{padding:9px 11px;border:1px solid var(--border);border-radius:8px;font-size:14px;}
.fotos-form input{flex:1;min-width:240px;}
.small{font-size:12px;}
.fotos-head{display:flex;align-items:center;justify-content:space-between;gap:12px;margin-top:18px;flex-wrap:wrap;}
.fotos-grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(180px,1fr));gap:10px;margin-top:12px;}
.foto-thumb{position:relative;display:block;border:1px solid var(--border);border-radius:8px;overflow:hidden;background:#f0f0f2;}
.foto-thumb img{width:100%;height:140px;object-fit:cover;display:block;}
.foto-thumb span{position:absolute;bottom:4px;right:4px;background:rgba(0,0,0,.6);color:#fff;font-size:11px;padding:1px 6px;border-radius:10px;}

/* Modulo Portales 2026-06-19 */
.portales{max-width:1200px;margin:0 auto;padding:24px 20px;}
.portales h1{margin:8px 0 10px;}
.portales-upload{display:flex;gap:10px;align-items:center;flex-wrap:wrap;margin-top:8px;}
.portales-head{display:flex;align-items:center;justify-content:space-between;gap:12px;flex-wrap:wrap;margin:18px 0 8px;}
.pt-stats{display:flex;gap:8px;flex-wrap:wrap;}
.pt-stats .pill{font-size:12px;font-weight:600;padding:3px 10px;border-radius:20px;background:#ececf0;color:#555;}
.pt-stats .pill.total{background:#e7f0ff;color:#1858c2;}
.pt-stats .pill.listed{background:#fde2e2;color:#b00020;}
.pt-stats .pill.available{background:#e8f7ec;color:#1a7f37;}
.pt-stats .pill.discrepancy{background:#fff0e0;color:#a85b00;}
.pt-form{display:flex;gap:6px;align-items:center;flex-wrap:wrap;}
.pt-form select{padding:5px 7px;border:1px solid var(--border);border-radius:6px;font-size:12px;}
.pt-form input{flex:1;min-width:160px;padding:5px 8px;border:1px solid var(--border);border-radius:6px;font-size:12px;}

/* Portales: dropdown duplicados + inputs 2026-06-19 */
.pt-inputs{display:grid;grid-template-columns:1fr 1fr;gap:14px;}
@media(max-width:760px){.pt-inputs{grid-template-columns:1fr;}}
.pt-actions{display:flex;gap:10px;align-items:center;}
.pt-chk{font-size:11px;color:var(--muted);white-space:nowrap;}
.cand summary{cursor:pointer;font-weight:600;color:var(--accent);font-size:12px;}
.cand ul{margin:6px 0 0;padding-left:16px;max-height:150px;overflow:auto;}
.cand li{font-size:12px;margin-bottom:3px;}
.cand li small{color:var(--muted);}

/* Portales fotos 2026-06-25 */
.pt-photo{width:64px;height:48px;object-fit:cover;border-radius:5px;border:1px solid var(--border);display:block;}
.cand-thumb{width:54px;height:40px;object-fit:cover;border-radius:4px;border:1px solid var(--border);vertical-align:middle;margin-right:4px;}
.cand li{display:flex;align-items:center;gap:6px;margin-bottom:6px;}

/* Mejoras 2026-07-01: idioma mensaje, agente, estados captada/profesional */
.status-captured{background:#e8f7ec;color:#1a7f37;}
.status-professional{background:#f0e8ff;color:#6a3fb5;}
.lang-tabs{display:flex;gap:6px;margin:2px 0 8px;}
.lang-btn{cursor:pointer;border:1px solid var(--border);background:#f6f6f8;color:#555;padding:5px 12px;border-radius:8px;font-size:13px;font-weight:600;}
.lang-btn.lang-active{background:var(--accent);color:#fff;border-color:var(--accent);}
.outreach-msg{width:100%;box-sizing:border-box;}
.col-agente{white-space:nowrap;font-size:12px;}

/* Modulo Busqueda Catastro 2026-07-03 */
.catastro-page{max-width:1280px;margin:0 auto;padding:24px 20px;}
.cat-search{display:flex;gap:10px;align-items:center;flex-wrap:wrap;margin:14px 0 10px;}
.cat-search input{flex:1;min-width:220px;padding:10px 12px;border:1px solid var(--border);border-radius:8px;font-size:15px;}
.cat-status{color:var(--muted);font-size:13px;}
.cat-info{background:#fff;border:1px solid var(--border);border-radius:10px;padding:12px 14px;font-size:14px;margin-bottom:12px;}
.cat-mapsearch{display:flex;gap:8px;align-items:center;flex-wrap:wrap;margin:0 0 10px;}
.cat-mapsearch input{flex:1;min-width:240px;padding:9px 12px;border:1px solid var(--border);border-radius:8px;font-size:14px;}
.cat-mapsearch .btn-secondary{padding:9px 16px;}
.cat-info.cat-err,.cat-err{color:var(--danger);}
.cat-zone{margin-top:6px;color:#333;}
.cat-zone em{color:var(--danger);font-style:normal;font-size:12px;margin-left:6px;}
.cat-zone em.cat-ok{color:var(--muted);}
.cat-desc{margin-top:8px;color:var(--muted);font-size:13px;line-height:1.5;}
.cat-desc summary{cursor:pointer;color:var(--accent);font-weight:600;}
.badge-src{display:inline-block;background:#e7f0ff;color:#1858c2;font-size:11px;font-weight:700;padding:2px 8px;border-radius:20px;margin-right:6px;}
.cat-layout{display:grid;grid-template-columns:1fr 340px;gap:16px;}
@media(max-width:900px){.cat-layout{grid-template-columns:1fr;}}
.cat-map{height:620px;border-radius:12px;border:1px solid var(--border);z-index:0;}
.cat-side{display:flex;flex-direction:column;gap:12px;min-width:0;}
.cat-photos{display:grid;grid-template-columns:1fr 1fr;gap:6px;max-height:300px;overflow:auto;}
.cat-photos img{width:100%;height:90px;object-fit:cover;border-radius:6px;border:1px solid var(--border);display:block;}
.cat-rc{background:#fff;border:1px solid var(--border);border-radius:12px;padding:14px;}
.cat-hint{color:var(--muted);font-size:13px;margin:0;line-height:1.5;}
.rc-label{font-size:12px;text-transform:uppercase;letter-spacing:.03em;color:var(--muted);font-weight:700;margin-bottom:4px;}
.rc-value{display:flex;align-items:center;gap:8px;flex-wrap:wrap;}
.rc-value code{font-size:18px;font-weight:700;background:#f4f6fa;padding:4px 8px;border-radius:6px;letter-spacing:.02em;}
.rc-addr{margin:8px 0;font-size:13px;color:#333;}
.rc-links{display:flex;justify-content:space-between;align-items:center;gap:10px;flex-wrap:wrap;font-size:13px;}
.rc-coords{color:var(--muted);font-size:12px;}
.rc-near{color:#a85b00;font-size:11px;font-weight:600;}
.rc-more{margin-top:12px;border-top:1px solid var(--border);padding-top:10px;}
.rc-alt{font-size:12px;margin-bottom:6px;display:flex;gap:6px;align-items:center;flex-wrap:wrap;}
.rc-alt code{background:#f4f6fa;padding:2px 6px;border-radius:5px;}
.rc-copy{padding:4px 10px;font-size:12px;cursor:pointer;}
.rc-alt a{color:var(--accent);font-weight:600;}
.cat-pin{font-size:26px;line-height:1;text-align:center;filter:drop-shadow(0 2px 2px rgba(0,0,0,.5));background:none;border:none;}
.cat-complex{margin-top:8px;font-size:12px;color:#333;}
.cat-chip{display:inline-block;margin:4px 4px 0 0;padding:4px 10px;border:1px solid var(--accent);background:#eef4ff;color:var(--accent);border-radius:16px;font-size:12px;font-weight:600;cursor:pointer;}
.cat-chip:hover{background:var(--accent);color:#fff;}
.cat-chip-loading{opacity:.5;}
.cat-chip-fail{border-color:var(--danger);color:var(--danger);background:#fdecec;text-decoration:line-through;}
.filters fieldset select{width:100%;padding:6px 8px;border:1px solid var(--border);border-radius:6px;font-size:13px;}
