/* ============================ TOKENS ============================ */
:root{
  --bg:#0b0e13; --bg2:#0f141b;
  --surface:#151b24; --surface2:#1b232e; --surface3:#212b38;
  --border:#2a3543; --border-soft:#202833;
  --text:#e9edf3; --text2:#aeb9c7; --text3:#6f7d8e;
  --primary:#6e5cf6; --primary2:#8b7bff; --primary-g:rgba(110,92,246,.14);
  --emerald:#19c37d; --emerald-g:rgba(25,195,125,.13);
  --amber:#f5a524; --danger:#f0506e; --cyan:#46c6f5;
  --r:14px; --r-lg:20px;
  --d:"Space Grotesk",system-ui,sans-serif;
  --b:"Inter",system-ui,sans-serif;
  --m:"JetBrains Mono",ui-monospace,monospace;
  --sh:0 1px 2px rgba(0,0,0,.3),0 12px 32px rgba(0,0,0,.35);
  --glow:0 0 0 1px rgba(110,92,246,.4),0 0 40px rgba(110,92,246,.25);
  --sidew:248px;
}
*{box-sizing:border-box;margin:0;padding:0}
html{scroll-behavior:smooth}
body{font-family:var(--b);background:var(--bg);color:var(--text);line-height:1.55;-webkit-font-smoothing:antialiased;overflow-x:hidden}
img{display:block;max-width:100%}
a{color:inherit;text-decoration:none}
strong{font-weight:700;color:var(--text)}
em{font-style:normal}
h1,h2,h3{font-family:var(--d);font-weight:700;letter-spacing:-.02em;line-height:1.08}
.muted{color:var(--text2)}
[hidden]{display:none!important}

/* ============================ BUTTONS ============================ */
.btn{font-family:var(--b);font-weight:600;font-size:14.5px;border:none;border-radius:10px;padding:11px 18px;cursor:pointer;transition:.18s;display:inline-flex;align-items:center;gap:8px;white-space:nowrap}
.btn--primary{background:linear-gradient(180deg,var(--primary2),var(--primary));color:#fff;box-shadow:0 6px 18px rgba(110,92,246,.35)}
.btn--primary:hover{transform:translateY(-1px);box-shadow:0 10px 26px rgba(110,92,246,.5)}
.btn--ghost{background:rgba(255,255,255,.04);color:var(--text);border:1px solid var(--border)}
.btn--ghost:hover{background:rgba(255,255,255,.08);border-color:#3a4756}
.btn--lg{padding:14px 24px;font-size:16px;border-radius:12px}
.btn--full{width:100%;justify-content:center}

/* ============================ BRAND ============================ */
.brand{display:flex;align-items:center;gap:9px;font-family:var(--d);font-weight:700;font-size:19px}
/* El isotipo es un <svg><use href="#bkMarca"> — el símbolo se define una sola vez
   al principio del <body>. La B está CALADA, así que deja pasar el fondo que tenga
   atrás: por eso no lleva color acá. Maestro y variantes en brand/01-logos/. */
.brand__mark{width:24px;height:24px;flex:none;filter:drop-shadow(0 0 9px rgba(110,92,246,.55))}
.brand__dot{color:var(--primary2)}
.brand__tag{font-family:var(--m);font-size:9px;font-weight:500;color:var(--text3);border:1px dashed var(--border);padding:2px 6px;border-radius:5px;text-transform:uppercase;letter-spacing:.06em}

/* ============================ ATMOSPHERE ============================ */
.landing{position:relative;overflow:hidden}
.atmos{position:fixed;inset:0;z-index:0;pointer-events:none;
  background:
    radial-gradient(60% 50% at 78% 8%, rgba(110,92,246,.22), transparent 70%),
    radial-gradient(50% 40% at 8% 30%, rgba(70,198,245,.10), transparent 70%),
    radial-gradient(55% 45% at 60% 100%, rgba(25,195,125,.08), transparent 70%);
}
.landing>*:not(.atmos){position:relative;z-index:1}

/* ============================ LANDING NAV ============================ */
.lnav{display:flex;align-items:center;gap:24px;padding:18px clamp(18px,5vw,56px);position:sticky;top:0;z-index:30;background:rgba(11,14,19,.72);backdrop-filter:blur(14px);border-bottom:1px solid var(--border-soft)}
.lnav__links{display:flex;gap:26px;margin-left:auto;font-size:14.5px;font-weight:500;color:var(--text2)}
.lnav__links a:hover{color:var(--text)}
.lnav .btn{margin-left:8px}

/* ============================ HERO ============================ */
.lhero{display:grid;grid-template-columns:1.05fr .95fr;gap:54px;align-items:center;padding:clamp(48px,7vw,96px) clamp(18px,5vw,56px)}
.pill{display:inline-flex;align-items:center;gap:9px;font-size:13px;font-weight:600;color:var(--primary2);background:var(--primary-g);border:1px solid rgba(110,92,246,.3);padding:7px 14px;border-radius:999px;margin-bottom:24px}
.pulse{width:8px;height:8px;border-radius:50%;background:var(--emerald);box-shadow:0 0 0 0 rgba(25,195,125,.6);animation:pulse 2s infinite}
@keyframes pulse{0%{box-shadow:0 0 0 0 rgba(25,195,125,.55)}70%{box-shadow:0 0 0 9px rgba(25,195,125,0)}100%{box-shadow:0 0 0 0 rgba(25,195,125,0)}}
.lhero__title{font-size:clamp(34px,5.2vw,60px);margin-bottom:22px}
.grad{background:linear-gradient(100deg,var(--primary2),var(--cyan) 60%,var(--emerald));-webkit-background-clip:text;background-clip:text;color:transparent}
.lhero__lead{font-size:clamp(16px,1.5vw,19px);color:var(--text2);max-width:560px;margin-bottom:30px}
.lhero__cta{display:flex;gap:14px;flex-wrap:wrap;margin-bottom:34px}
.lhero__ports{display:flex;align-items:center;gap:14px;flex-wrap:wrap;font-size:13px;color:var(--text3)}
.ports{display:flex;gap:8px;flex-wrap:wrap}
.port{font-family:var(--m);font-size:12px;font-weight:500;color:var(--text2);background:var(--surface);border:1px solid var(--border);padding:5px 10px;border-radius:7px}

/* hero scan card */
.lhero__visual{display:flex;justify-content:center}
.scancard{width:100%;max-width:440px;background:linear-gradient(180deg,var(--surface),var(--bg2));border:1px solid var(--border);border-radius:var(--r-lg);box-shadow:var(--sh);overflow:hidden}
.scancard__top{display:flex;align-items:center;gap:7px;padding:13px 16px;border-bottom:1px solid var(--border-soft);background:rgba(255,255,255,.02)}
.scancard__top em{margin-left:8px;font-family:var(--m);font-size:12px;color:var(--text2)}
.dot{width:10px;height:10px;border-radius:50%}.dot--g{background:#2bd07a}.dot--y{background:#f5c451}.dot--r{background:#f06a6a}
.scancard__body{padding:16px;display:flex;flex-direction:column;gap:10px;min-height:300px}
.scanrow{display:flex;align-items:center;gap:11px;font-size:13px;padding:10px 12px;border-radius:10px;background:var(--surface2);border:1px solid var(--border-soft);opacity:.35;transform:translateX(-6px);transition:.4s}
.scanrow.on{opacity:1;transform:none;border-color:rgba(110,92,246,.4)}
.scanrow.done{opacity:1;transform:none}
.scanrow__ic{width:26px;height:26px;border-radius:7px;display:grid;place-items:center;background:var(--bg);font-size:13px;flex-shrink:0}
.scanrow__n{flex:1;font-weight:600}
.scanrow__c{font-family:var(--m);font-size:12px;color:var(--text3)}
.scanrow.done .scanrow__c{color:var(--emerald)}
.scanrow__sp{width:14px;height:14px;border:2px solid var(--border);border-top-color:var(--primary2);border-radius:50%;animation:spin .7s linear infinite}
@keyframes spin{to{transform:rotate(360deg)}}
.scansum{margin-top:auto;background:var(--primary-g);border:1px solid rgba(110,92,246,.35);border-radius:10px;padding:12px 14px;font-size:13px;color:var(--text);opacity:0;transform:translateY(8px);transition:.5s}
.scansum.on{opacity:1;transform:none}
.scansum b{color:var(--primary2)}

/* ============================ BANDS / SECTIONS ============================ */
.lband{padding:clamp(56px,7vw,100px) clamp(18px,5vw,56px)}
.lband--alt{background:linear-gradient(180deg,transparent,rgba(255,255,255,.015),transparent);border-top:1px solid var(--border-soft);border-bottom:1px solid var(--border-soft)}
.section-head{max-width:720px;margin:0 auto 48px;text-align:center}
.eyebrow{font-family:var(--m);font-size:12.5px;font-weight:700;letter-spacing:.12em;text-transform:uppercase;color:var(--primary2);display:block;margin-bottom:14px}
.section-head h2{font-size:clamp(26px,3.6vw,42px)}
.section-head h2 em{color:var(--primary2)}

/* differentiators */
.difgrid{display:grid;grid-template-columns:repeat(4,1fr);gap:18px;max-width:1180px;margin:0 auto}
.dif{background:var(--surface);border:1px solid var(--border);border-radius:var(--r);padding:26px;transition:.25s;position:relative}
.dif:hover{transform:translateY(-4px);border-color:#3a4756}
.dif--star{background:linear-gradient(165deg,rgba(110,92,246,.16),var(--surface));border-color:rgba(110,92,246,.45);box-shadow:var(--glow)}
.dif__ico{font-size:30px;margin-bottom:14px}
.dif h3{font-size:18px;margin-bottom:9px}
.dif p{font-size:14px;color:var(--text2)}
.dif__badge{position:absolute;top:16px;right:16px;font-family:var(--m);font-size:10px;font-weight:700;color:#fff;background:var(--primary);padding:3px 8px;border-radius:6px;letter-spacing:.04em}

/* steps */
.steps3{display:flex;align-items:stretch;justify-content:center;gap:14px;max-width:1100px;margin:0 auto;flex-wrap:wrap}
.step3{flex:1;min-width:230px;background:var(--surface);border:1px solid var(--border);border-radius:var(--r);padding:26px}
.step3__n{font-family:var(--m);font-size:14px;font-weight:700;color:var(--primary2)}
.step3 h3{font-size:18px;margin:10px 0 8px}
.step3 p{font-size:14px;color:var(--text2)}
.step3__arrow{display:flex;align-items:center;color:var(--text3);font-size:22px}

/* properties */
.propgrid{display:grid;grid-template-columns:repeat(3,1fr);gap:20px;max-width:1180px;margin:0 auto}
/* La tarjeta entera abre la ficha, así que se comporta como algo clickeable.
   El control real es `.pcard__open` (un <button> de verdad, ver app.js): esto es
   la señal visual, no el mecanismo. */
.pcard{background:var(--surface);border:1px solid var(--border);border-radius:var(--r);overflow:hidden;transition:.25s;cursor:pointer}
.pcard:hover{transform:translateY(-4px);border-color:#3a4756;box-shadow:var(--sh)}
/* 172 -> 208px: la foto era una miniatura en la que no se veía la propiedad, que
   es la mitad del reclamo ("no se ve casi nada... ni las fotos"). */
.pcard__img{height:208px;position:relative;overflow:hidden;background-size:cover;background-position:center;background-color:#1a2230}
.pcard__src{position:absolute;top:10px;left:10px;font-family:var(--m);font-size:11px;font-weight:600;color:#fff;background:rgba(11,14,19,.78);backdrop-filter:blur(6px);padding:4px 9px;border-radius:6px;border:1px solid rgba(255,255,255,.12)}
.pcard__src--own{background:rgba(25,195,125,.9);color:#04150d}
.pcard__match{position:absolute;top:10px;right:10px;font-family:var(--m);font-size:11px;font-weight:700;color:#04150d;background:var(--emerald);padding:4px 9px;border-radius:6px}
.pcard__body{padding:15px 16px}
.pcard__price{font-family:var(--d);font-size:20px;font-weight:700}
.pcard__price small{font-size:12px;color:var(--text3);font-weight:500;font-family:var(--b)}
.pcard__addr{font-size:13.5px;color:var(--text2);margin:3px 0 8px}
/* El barrio del aviso, visible en la ficha: desde que la zona es filtro duro, lo
   único que puede aparecer fuera del barrio pedido es un aviso que no declara
   ninguno — y eso hay que decirlo, no dejarlo pasar como si fuera del barrio. */
.pcard__zona{display:inline-block;font-family:var(--m);font-size:11px;color:var(--text3);background:var(--bg2);border:1px solid var(--border-soft);border-radius:6px;padding:2px 7px;margin-bottom:11px}
.pcard__zona--na{color:var(--warn,#f5a524);border-color:rgba(245,165,36,.35);background:rgba(245,165,36,.08)}
/* Inferido del callejero: es una hipótesis, no un dato. Se distingue del barrio
   declarado sin gritar como el ámbar del que no se sabe nada. */
.pcard__zona--inf{color:var(--primary2,#a595ff);border-color:rgba(110,92,246,.35);background:rgba(110,92,246,.09)}
.pcard__zona--inf::before{content:"≈ "}
.pcard__specs{display:flex;gap:14px;font-size:12.5px;color:var(--text3);font-family:var(--m);border-top:1px solid var(--border-soft);padding-top:11px}

/* whatsapp demo */
.wademo{display:grid;grid-template-columns:340px 1fr;gap:48px;align-items:center;max-width:1000px;margin:0 auto}
.phone{background:#0a1014;border:1px solid var(--border);border-radius:26px;padding:12px;box-shadow:var(--sh);max-width:340px;margin:0 auto;width:100%}
.phone__top{display:flex;align-items:center;justify-content:space-between;padding:8px 12px 12px;border-bottom:1px solid var(--border-soft)}
.phone__name{font-weight:700;font-size:14px}
.phone__on{font-size:11px;color:var(--emerald)}
.phone__chat{padding:14px 8px;display:flex;flex-direction:column;gap:9px;min-height:340px;background:linear-gradient(180deg,rgba(255,255,255,.01),transparent)}
.bub{max-width:82%;padding:9px 13px;border-radius:14px;font-size:13.5px;line-height:1.4;animation:fadeup .4s both}
.bub--in{align-self:flex-start;background:var(--surface2);border:1px solid var(--border-soft);border-bottom-left-radius:5px}
.bub--out{align-self:flex-end;background:linear-gradient(180deg,#1f6b4d,#16573d);border-bottom-right-radius:5px}
.bub--ai{align-self:flex-end;background:linear-gradient(180deg,var(--primary),#5a49d6);border-bottom-right-radius:5px}
.bub small{display:block;font-size:10px;opacity:.6;margin-top:3px;text-align:right}
.wademo__copy h3{font-size:24px;margin-bottom:16px}
.ticks{list-style:none;display:flex;flex-direction:column;gap:11px;margin-bottom:24px}
.ticks li{position:relative;padding-left:28px;font-size:15px;color:var(--text2)}
.ticks li::before{content:"";position:absolute;left:0;top:7px;width:7px;height:7px;border-radius:50%;background:var(--emerald);box-shadow:0 0 8px var(--emerald)}

/* stats */
.lstats{display:grid;grid-template-columns:repeat(4,1fr);gap:18px;max-width:1100px;margin:0 auto;padding:40px clamp(18px,5vw,56px)}
.stat{text-align:center;padding:22px;background:var(--surface);border:1px solid var(--border);border-radius:var(--r)}
.stat__n{font-family:var(--d);font-size:40px;font-weight:700;color:var(--primary2);display:block;line-height:1}
.stat__l{font-size:13px;color:var(--text2);margin-top:8px;display:block}

/* cta + foot */
.lcta{text-align:center;padding:clamp(56px,8vw,110px) 20px}
.lcta h2{font-size:clamp(28px,4vw,44px);margin-bottom:12px}
.lcta p{color:var(--text2);margin-bottom:28px;font-size:17px}
.lfoot{display:flex;justify-content:space-between;align-items:center;gap:16px;padding:26px clamp(18px,5vw,56px);border-top:1px solid var(--border-soft);font-size:13px;color:var(--text3);flex-wrap:wrap}
.lfoot em{color:var(--text3)}
.lfoot__by{display:flex;align-items:center;gap:10px}
.lfoot__by img{height:30px;background:#fff;border-radius:7px;padding:4px 7px}

/* ============================ APP SHELL ============================ */
.app{display:grid;grid-template-columns:var(--sidew) 1fr;min-height:100vh;background:var(--bg)}
.sidebar{background:var(--bg2);border-right:1px solid var(--border-soft);display:flex;flex-direction:column;padding:20px 16px;position:sticky;top:0;height:100vh}
.brand--side{margin:4px 6px 26px}
.snav{display:flex;flex-direction:column;gap:4px}
.snav__item{display:flex;align-items:center;gap:12px;width:100%;text-align:left;font-family:var(--b);font-size:14.5px;font-weight:500;color:var(--text2);background:none;border:none;padding:11px 13px;border-radius:10px;cursor:pointer;transition:.16s}
.snav__item i{font-style:normal;font-size:16px;width:20px;text-align:center}
.snav__item:hover{background:var(--surface);color:var(--text)}
.snav__item.is-active{background:var(--primary-g);color:#fff;box-shadow:inset 0 0 0 1px rgba(110,92,246,.35)}
.snav__item--star .snav__star{margin-left:auto;font-family:var(--m);font-size:9.5px;font-weight:700;color:#04150d;background:var(--emerald);padding:2px 6px;border-radius:5px}
.sidebar__foot{margin-top:auto;display:flex;flex-direction:column;gap:14px}
.suser{display:flex;align-items:center;gap:11px;padding:11px;background:var(--surface);border:1px solid var(--border-soft);border-radius:11px}
.suser__av{width:36px;height:36px;border-radius:9px;background:linear-gradient(150deg,var(--primary),var(--cyan));display:grid;place-items:center;font-family:var(--d);font-weight:700;font-size:13px;color:#fff;flex-shrink:0}
.suser strong{display:block;font-size:13.5px}.suser small{color:var(--text3);font-size:11.5px}
.sidebar__exit{font-size:12.5px;color:var(--text3);text-align:center}
.sidebar__exit:hover{color:var(--text2)}

/* topbar */
.main{display:flex;flex-direction:column;min-width:0}
.topbar{display:flex;align-items:center;gap:18px;padding:14px clamp(18px,3vw,32px);border-bottom:1px solid var(--border-soft);background:rgba(15,20,27,.7);backdrop-filter:blur(12px);position:sticky;top:0;z-index:20}
.topbar__burger{display:none;background:none;border:none;color:var(--text);font-size:20px;cursor:pointer}
.topbar__title{font-family:var(--d);font-weight:700;font-size:18px}
.topbar__search{margin-left:auto;display:flex;align-items:center;gap:8px;background:var(--surface);border:1px solid var(--border);border-radius:10px;padding:8px 13px;width:min(340px,38vw)}
.topbar__search i{color:var(--text3)}
.topbar__search input{background:none;border:none;outline:none;color:var(--text);font-family:var(--b);font-size:13.5px;width:100%}
.topbar__actions{display:flex;align-items:center;gap:14px}
.iconbtn{position:relative;background:var(--surface);border:1px solid var(--border);color:var(--text2);width:38px;height:38px;border-radius:10px;cursor:pointer;font-size:16px}
.iconbtn__dot{position:absolute;top:8px;right:9px;width:7px;height:7px;border-radius:50%;background:var(--danger)}
.suser__av--top{width:34px;height:34px}

/* views */
.views{padding:clamp(20px,3vw,34px);flex:1}
.view{display:none;animation:fadeup .35s both}
.view.is-active{display:block}
.view__head{display:flex;align-items:flex-end;justify-content:space-between;gap:18px;margin-bottom:26px;flex-wrap:wrap}
.view__head h1{font-size:clamp(22px,3vw,30px)}
.view__head .muted{font-size:14.5px;margin-top:4px}
.star-chip,.tag{font-family:var(--m);font-size:11px;font-weight:700;padding:3px 9px;border-radius:6px;vertical-align:middle}
.star-chip{background:var(--primary-g);color:var(--primary2);border:1px solid rgba(110,92,246,.4)}
.tag--g{background:var(--emerald-g);color:var(--emerald);border:1px solid rgba(25,195,125,.35)}

/* KPIs */
.kpis{display:grid;grid-template-columns:repeat(4,1fr);gap:16px;margin-bottom:22px}
.kpi{background:var(--surface);border:1px solid var(--border);border-radius:var(--r);padding:20px}
.kpi__l{font-size:13px;color:var(--text2);display:flex;align-items:center;gap:8px;margin-bottom:12px}
.kpi__ic{width:30px;height:30px;border-radius:8px;display:grid;place-items:center;background:var(--primary-g);font-size:14px}
.kpi__v{font-family:var(--d);font-size:28px;font-weight:700;line-height:1}
.kpi__d{font-family:var(--m);font-size:12px;margin-top:8px}
.kpi__d.up{color:var(--emerald)}.kpi__d.down{color:var(--danger)}

/* dash grid */
.dashgrid{display:grid;grid-template-columns:1fr 1fr;gap:16px}
.panel{background:var(--surface);border:1px solid var(--border);border-radius:var(--r);padding:20px}
.panel--wide{grid-column:1/-1}
.panel__head{display:flex;align-items:center;justify-content:space-between;margin-bottom:16px}
.panel__head h3{font-size:16px}
.panel__head .muted{font-size:12.5px}
.pipemini{display:flex;flex-direction:column;gap:12px}
.pipe{display:grid;grid-template-columns:120px 1fr 44px;align-items:center;gap:12px;font-size:13px}
.pipe__bar{height:9px;background:var(--surface3);border-radius:99px;overflow:hidden}
.pipe__bar span{display:block;height:100%;border-radius:99px;background:linear-gradient(90deg,var(--primary),var(--primary2))}
.pipe__v{font-family:var(--m);font-size:13px;text-align:right;color:var(--text2)}
.feed{list-style:none;display:flex;flex-direction:column;gap:13px}
.feed li{display:flex;gap:12px;font-size:13.5px;color:var(--text2)}
.feed__ic{width:30px;height:30px;border-radius:8px;background:var(--surface2);display:grid;place-items:center;flex-shrink:0;font-size:14px}
.feed__t{color:var(--text3);font-family:var(--m);font-size:11px;margin-left:auto;white-space:nowrap}
.opps{display:grid;grid-template-columns:repeat(3,1fr);gap:14px}
.opp{background:var(--surface2);border:1px solid var(--border-soft);border-radius:11px;padding:15px;border-left:3px solid var(--emerald)}
.opp__h{font-size:13px;font-weight:600;margin-bottom:6px}
.opp__p{font-size:12.5px;color:var(--text2)}

/* ============================ COMANDA (STAR) ============================ */
.comanda{display:grid;grid-template-columns:380px 1fr;gap:22px;align-items:start}
.comanda__form{background:var(--surface);border:1px solid var(--border);border-radius:var(--r-lg);padding:24px;position:sticky;top:90px}
.field{margin-bottom:16px}
/* `.field__lbl` es el mismo label pero por clase, para los que NO son hijos
   directos del .field (los de una fila de dos columnas y el del presupuesto, que
   ahora encabeza dos inputs y por eso es un <span>). Sin esto quedaban con el
   estilo por defecto del browser —16px, sin peso— y se veían más grandes que el
   resto de los campos del formulario. */
.field>label,.field__lbl{display:block;font-size:12.5px;font-weight:600;color:var(--text2);margin-bottom:7px}
.field--row{display:grid;grid-template-columns:1fr 1fr;gap:12px}
.field input,.field select{width:100%;background:var(--bg2);border:1px solid var(--border);color:var(--text);font-family:var(--b);font-size:14px;padding:10px 12px;border-radius:9px;outline:none;transition:.15s}
.field input:focus,.field select:focus{border-color:var(--primary);box-shadow:0 0 0 3px var(--primary-g)}
.seg{display:flex;background:var(--bg2);border:1px solid var(--border);border-radius:9px;padding:3px}
.seg__b{flex:1;background:none;border:none;color:var(--text2);font-family:var(--b);font-weight:600;font-size:13.5px;padding:8px;border-radius:7px;cursor:pointer}
.seg__b.is-on{background:var(--primary);color:#fff}
/* La moneda del presupuesto va en la línea del label, no al lado del campo: la
   comanda es una columna angosta y en la misma fila el monto quedaba en 63 px,
   sin lugar para "120.000". */
.pres__head{display:flex;align-items:center;justify-content:space-between;gap:8px;margin-bottom:7px}
.pres__head>.field__lbl{margin-bottom:0}
/* Desde / Hasta: dos campos con una sola moneda, la de la cabecera. Entran en la
   columna angosta de la comanda porque el toggle vive arriba y no al lado del
   monto: 160 px cada uno en escritorio y 138 en el celular, de sobra para
   "1.200.000". Los ambientes se mudaron a la fila del tipo de propiedad, que es
   el lugar que dejó libre el presupuesto al pasar a ocupar la fila entera. */
.pres__rango{display:grid;grid-template-columns:1fr 1fr;gap:10px}
.pres__rango input{height:40px}
.pres__c>label{display:block;font-family:var(--m);font-size:10.5px;letter-spacing:.05em;text-transform:uppercase;color:var(--text3);margin-bottom:5px}
/* El mínimo mayor que el máximo se avisa, no se bloquea: es un error de tipeo y
   el scan tarda demasiado como para castigarlo con un formulario que no envía. */
.pres__aviso{margin-top:9px;font-size:12px;line-height:1.45;color:var(--amber)}
.seg--mini{padding:2px}
.seg--mini .seg__b{flex:0 0 auto;min-width:34px;padding:4px 9px;font-size:11.5px}
/* El toggle de moneda hace su cabecera más alta que un <label> pelado, así que
   los dos campos de la fila arrancaban a distinta altura. Se alinean por abajo
   —que es donde el ojo los compara— y se les iguala el alto: un <select> y un
   <input> con el mismo padding no miden lo mismo. */
.comanda__form .field--row{align-items:end}
.comanda__form .field--row input,.comanda__form .field--row select{height:40px}
#f-zona-otro{margin-top:8px}
.chips{display:flex;flex-wrap:wrap;gap:7px}
.chip{font-size:12.5px;font-weight:500;color:var(--text2);background:var(--bg2);border:1px solid var(--border);padding:6px 11px;border-radius:8px;cursor:pointer;transition:.15s}
.chip.is-on{background:var(--primary-g);border-color:rgba(110,92,246,.5);color:var(--primary2)}
.comanda__hint{font-family:var(--m);font-size:11px;color:var(--text3);text-align:center;margin-top:12px;line-height:1.5}

.comanda__out{min-height:480px}
.comanda__empty{height:100%;min-height:480px;display:flex;flex-direction:column;align-items:center;justify-content:center;text-align:center;background:var(--surface);border:1px dashed var(--border);border-radius:var(--r-lg);padding:40px}
.comanda__emptyico{font-size:44px;margin-bottom:16px;filter:grayscale(.2);opacity:.8}
.comanda__empty h3{font-size:20px;margin-bottom:8px}
.comanda__empty p{color:var(--text2);max-width:340px;font-size:14px}

/* scan animation */
.scan{background:var(--surface);border:1px solid var(--border);border-radius:var(--r-lg);padding:24px}
.scan__title{display:flex;align-items:center;gap:10px;font-family:var(--d);font-weight:700;font-size:17px;margin-bottom:18px}
.scan__title .pulse{width:9px;height:9px}
.scan__bar{height:6px;background:var(--surface3);border-radius:99px;overflow:hidden;margin-bottom:20px}
.scan__bar span{display:block;height:100%;width:0;background:linear-gradient(90deg,var(--primary),var(--cyan),var(--emerald));transition:width .3s;border-radius:99px}
.scanrows{display:flex;flex-direction:column;gap:9px}

/* results */
.results__bar{display:flex;align-items:center;gap:14px;margin-bottom:18px;flex-wrap:wrap}
.results__count{font-family:var(--d);font-size:18px;font-weight:700}
.results__count b{color:var(--emerald)}
.ai-analysis{background:linear-gradient(160deg,rgba(110,92,246,.14),var(--surface));border:1px solid rgba(110,92,246,.4);border-radius:var(--r);padding:20px;margin-bottom:20px;box-shadow:var(--glow)}
.ai-analysis__h{display:flex;align-items:center;gap:9px;font-family:var(--d);font-weight:700;font-size:15px;margin-bottom:12px}
.ai-analysis__h .ai-orb{width:22px;height:22px;border-radius:50%;background:conic-gradient(from 0deg,var(--primary),var(--cyan),var(--emerald),var(--primary));animation:spin 4s linear infinite}
.ai-analysis ul{list-style:none;display:flex;flex-direction:column;gap:10px}
.ai-analysis li{position:relative;padding-left:24px;font-size:14px;color:var(--text)}
.ai-analysis li::before{content:"→";position:absolute;left:0;color:var(--primary2);font-weight:700}
.ai-analysis li b{color:var(--emerald)}
.results__head{font-size:14px;color:var(--text2);margin-bottom:12px;font-weight:600}
.results .propgrid--app{grid-template-columns:repeat(2,1fr)}

/* ============================ KANBAN ============================ */
.kanban{display:grid;grid-template-columns:repeat(4,1fr);gap:14px;align-items:start}
.kcol{background:var(--bg2);border:1px solid var(--border-soft);border-radius:var(--r);padding:13px}
.kcol__h{display:flex;align-items:center;justify-content:space-between;margin-bottom:12px;font-size:13.5px;font-weight:700}
.kcol__h .kcount{font-family:var(--m);font-size:11px;color:var(--text3);background:var(--surface2);padding:2px 8px;border-radius:6px}
.kcol__dot{width:8px;height:8px;border-radius:50%;display:inline-block;margin-right:7px}
.lead{background:var(--surface);border:1px solid var(--border);border-radius:11px;padding:13px;margin-bottom:10px;cursor:grab;transition:.15s}
.lead:hover{border-color:#3a4756;transform:translateY(-2px)}
.lead__top{display:flex;align-items:center;justify-content:space-between;margin-bottom:8px}
.lead__name{font-weight:600;font-size:14px}
.lead__score{font-family:var(--m);font-size:11px;font-weight:700;padding:2px 7px;border-radius:6px}
.score--hot{background:rgba(240,80,110,.16);color:#ff8497}
.score--warm{background:rgba(245,165,36,.16);color:var(--amber)}
.score--cold{background:rgba(70,198,245,.14);color:var(--cyan)}
.lead__meta{font-size:12.5px;color:var(--text2)}
.lead__foot{display:flex;align-items:center;gap:8px;margin-top:10px;font-size:11px;color:var(--text3);font-family:var(--m)}
.lead__wa{color:var(--emerald)}

/* ============================ ASISTENTE IA (chat en vivo) ============================
   Reemplaza al bloque de la demo guionada (.walive/.wachat/.waconv/.wahandoff),
   que se fue junto con el guion fijo. */
.chatwrap{display:grid;grid-template-columns:300px 1fr;gap:18px;align-items:start}

.chatside{display:flex;flex-direction:column;gap:12px}
.chatside__card{background:var(--surface);border:1px solid var(--border);border-radius:var(--r);padding:16px 18px}
.chatside__card h4{font-family:var(--d);font-size:14px;margin-bottom:12px}
.chatside__list{list-style:none;display:flex;flex-direction:column;gap:9px;font-size:13px;color:var(--text2);line-height:1.4}
.chatside__list li{padding-left:16px;position:relative}
.chatside__list li::before{content:"›";position:absolute;left:2px;top:-1px;color:var(--primary2);font-weight:700}
.chatside__sug{display:flex;flex-direction:column;gap:8px}
.chatside__note{font-size:12px;color:var(--text3);line-height:1.5;padding:0 4px}
.sug{text-align:left;font-family:var(--b);font-size:12.5px;line-height:1.4;color:var(--text2);background:var(--surface2);border:1px solid var(--border-soft);border-radius:10px;padding:9px 12px;cursor:pointer;transition:.15s}
.sug:hover:not(:disabled){border-color:var(--primary);background:var(--primary-g);color:var(--text)}
.sug:disabled{opacity:.45;cursor:default}

.chat{display:flex;flex-direction:column;height:min(72vh,660px);background:var(--surface);border:1px solid var(--border);border-radius:var(--r);box-shadow:var(--sh);overflow:hidden}
.chat__top{display:flex;align-items:center;gap:11px;padding:12px 16px;border-bottom:1px solid var(--border-soft);background:rgba(255,255,255,.02)}
.chat__av{width:34px;height:34px;border-radius:10px;display:grid;place-items:center;font-family:var(--d);font-weight:700;font-size:12px;color:#fff;background:linear-gradient(180deg,var(--primary2),var(--primary));flex-shrink:0}
.chat__id{display:flex;flex-direction:column;min-width:0}
.chat__id strong{font-size:14px}
.chat__sub{font-size:11.5px;color:var(--text3)}
.chat__on{margin-left:auto;font-family:var(--m);font-size:11px;color:var(--emerald);white-space:nowrap}

.chat__log{flex:1;min-height:0;overflow-y:auto;padding:18px 16px;display:flex;flex-direction:column;gap:10px}
/* white-space:pre-wrap — el modelo manda saltos de línea y el texto entra por
   textContent, así que los renglones los tiene que respetar el CSS.
   overflow-wrap:anywhere — un pegote sin espacios no puede romper el ancho. */
.chat__msg{max-width:78%;padding:10px 14px;border-radius:14px;font-size:14px;line-height:1.5;white-space:pre-wrap;overflow-wrap:anywhere;animation:fadeup .3s both}
.chat__msg--yo{align-self:flex-end;background:linear-gradient(180deg,#1f6b4d,#16573d);border-bottom-right-radius:5px}
.chat__msg--ia{align-self:flex-start;background:var(--surface2);border:1px solid var(--border-soft);border-bottom-left-radius:5px}
.chat__msg--ia.is-rechazado{border-color:rgba(245,165,36,.45);background:rgba(245,165,36,.08)}
.chat__msg.is-fallido{opacity:.45}
.chat__nota{align-self:center;font-size:12px;color:var(--text3);text-align:center;max-width:80%;line-height:1.45}
.chat__err{display:flex;align-items:center;gap:12px;flex-wrap:wrap;font-size:13px;line-height:1.45;color:var(--text2);background:rgba(240,80,110,.08);border:1px solid rgba(240,80,110,.32);border-radius:12px;padding:11px 14px}
.chat__err span{flex:1;min-width:180px}
.chat__retry{font-family:var(--b);font-size:12.5px;font-weight:600;color:var(--text);background:rgba(255,255,255,.06);border:1px solid var(--border);border-radius:8px;padding:6px 12px;cursor:pointer;transition:.15s}
.chat__retry:hover{background:rgba(255,255,255,.12);border-color:#3a4756}

.chat__status{display:flex;align-items:center;gap:9px;padding:9px 16px;font-size:12.5px;color:var(--text2);border-top:1px solid var(--border-soft);background:rgba(110,92,246,.06)}
.chat__status--tool{color:var(--primary2);background:var(--primary-g)}
.chat__dots{display:inline-flex;gap:3px;align-items:center}
.chat__dots i{width:5px;height:5px;border-radius:50%;background:currentColor;animation:chatdot 1.1s infinite}
.chat__dots i:nth-child(2){animation-delay:.15s}
.chat__dots i:nth-child(3){animation-delay:.3s}
@keyframes chatdot{0%,60%,100%{opacity:.25;transform:translateY(0)}30%{opacity:1;transform:translateY(-3px)}}

.chat__form{display:flex;gap:9px;padding:12px;border-top:1px solid var(--border-soft);background:var(--bg2)}
.chat__in{flex:1;min-width:0;font-family:var(--b);font-size:14px;color:var(--text);background:var(--surface2);border:1px solid var(--border);border-radius:10px;padding:11px 14px;outline:none;transition:.15s}
.chat__in:focus{border-color:var(--primary);box-shadow:0 0 0 3px var(--primary-g)}
.chat__in::placeholder{color:var(--text3)}
.chat__in:disabled{opacity:.6}
.chat__send{padding:11px 20px}
.chat__send:disabled{opacity:.5;cursor:default;transform:none;box-shadow:none}

/* ============================ ANIM ============================ */
@keyframes fadeup{from{opacity:0;transform:translateY(12px)}to{opacity:1;transform:none}}
.reveal{opacity:0;transform:translateY(20px);transition:.6s}
.reveal.in{opacity:1;transform:none}
@media (prefers-reduced-motion:reduce){*{animation:none!important;transition:none!important}.reveal{opacity:1;transform:none}}

/* ============================ RESPONSIVE ============================ */
@media (max-width:1080px){
  .difgrid{grid-template-columns:repeat(2,1fr)}
  .propgrid{grid-template-columns:repeat(2,1fr)}
  .opps{grid-template-columns:1fr}
  .comanda{grid-template-columns:1fr}.comanda__form{position:static}
  .kanban{grid-template-columns:repeat(2,1fr)}
}
@media (max-width:900px){
  .lhero{grid-template-columns:1fr;gap:36px}
  .wademo{grid-template-columns:1fr;gap:30px}
  .lnav__links{display:none}
  .kpis{grid-template-columns:repeat(2,1fr)}
  .dashgrid{grid-template-columns:1fr}
  .lstats{grid-template-columns:repeat(2,1fr)}
  .app{grid-template-columns:1fr}
  .sidebar{position:fixed;left:0;top:0;z-index:60;transform:translateX(-100%);transition:.25s;width:260px}
  .app.nav-open .sidebar{transform:none}
  .topbar__burger{display:block}
  /* El chat primero: en una columna, la ficha de "qué resuelve" abajo. */
  .chatwrap{grid-template-columns:1fr}
  .chatside{order:2}
  .chat{height:min(68vh,520px)}
}
@media (max-width:560px){
  .difgrid,.propgrid,.steps3,.lstats,.kpis,.kanban{grid-template-columns:1fr}
  .step3__arrow{display:none}
  .results .propgrid--app{grid-template-columns:1fr}
  .topbar__search{display:none}
  .lfoot{flex-direction:column;text-align:center}
}

/* ===================== AGENDA (CRM) ===================== */
.leads-subhead{display:flex;align-items:baseline;justify-content:space-between;gap:12px;margin:6px 0 14px}
.leads-subhead h2{font-family:var(--d);font-size:18px}
.leads-subhead .muted{font-size:12.5px}
.agenda{background:var(--surface);border:1px solid var(--border);border-radius:var(--r);padding:20px;margin-bottom:26px}
.agenda__top{display:flex;align-items:center;justify-content:space-between;gap:14px;flex-wrap:wrap;margin-bottom:16px}
.agenda__top h2{font-family:var(--d);font-size:17px}
.agenda__legend{display:flex;gap:14px;font-size:12px;color:var(--text2);flex-wrap:wrap}
.agenda__legend span{display:flex;align-items:center;gap:6px}
.agenda__legend i{width:9px;height:9px;border-radius:50%}
.weekstrip{display:grid;grid-template-columns:repeat(7,1fr);gap:8px;margin-bottom:18px}
.wday{background:var(--surface2);border:1px solid var(--border-soft);border-radius:10px;padding:10px 4px;text-align:center}
.wday.is-today{background:var(--primary-g);border-color:rgba(110,92,246,.5)}
.wday__d{display:block;font-family:var(--m);font-size:10px;color:var(--text3);font-weight:700;letter-spacing:.04em}
.wday__n{display:block;font-family:var(--d);font-size:18px;margin-top:2px}
.wday.is-today .wday__n{color:var(--primary2)}
.wday__dots{display:flex;gap:3px;justify-content:center;margin-top:6px;min-height:6px}
.wday__dots i{width:5px;height:5px;border-radius:50%;background:var(--primary2)}
.agenda__list{display:grid;grid-template-columns:1fr 1fr 1fr;gap:18px}
.aggroup__h{font-family:var(--m);font-size:11.5px;font-weight:700;color:var(--text2);text-transform:uppercase;letter-spacing:.04em;margin-bottom:11px;padding-bottom:8px;border-bottom:1px solid var(--border-soft)}
.agevent{display:flex;align-items:center;gap:11px;background:var(--surface2);border:1px solid var(--border-soft);border-left:3px solid var(--ac,var(--primary));border-radius:10px;padding:11px 13px;margin-bottom:9px;transition:.15s}
.agevent:hover{transform:translateX(2px);border-color:var(--ac)}
.agevent__ic{width:30px;height:30px;border-radius:8px;background:var(--bg);display:grid;place-items:center;font-size:14px;flex-shrink:0}
.agevent__b{flex:1;min-width:0}
.agevent__t{font-size:13.5px;font-weight:600;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.agevent__s{font-size:12px;color:var(--text2);white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.agevent__time{font-family:var(--m);font-size:12px;color:var(--text3);font-weight:500;flex-shrink:0}
@media(max-width:1080px){.agenda__list{grid-template-columns:1fr}}
.suser__av--logo{object-fit:cover;padding:0}

/* ===================== MVP LAYER (gate, tabbar, modal, toast) ===================== */
.gate{min-height:100vh;min-height:100dvh;display:grid;place-items:center;background:
  radial-gradient(800px 400px at 70% -10%,rgba(110,92,246,.18),transparent 60%),
  radial-gradient(600px 300px at 10% 110%,rgba(70,198,245,.1),transparent 60%),var(--bg);padding:24px}
.gate__card{width:100%;max-width:360px;background:var(--surface);border:1px solid var(--border);border-radius:var(--r-lg);padding:34px 28px;text-align:center;box-shadow:var(--sh)}
.gate__card h1{font-size:26px;margin:14px 0 4px}
.gate__card .muted{font-size:13px;margin-bottom:22px}
.gate__card form{display:grid;gap:12px}
.gate__card input{background:var(--bg2);border:1px solid var(--border);border-radius:10px;padding:12px 14px;color:var(--text);font-size:15px;text-align:center;font-family:var(--m)}
.gate__card input:focus{outline:none;border-color:var(--primary)}
.gate__err{color:var(--danger);font-size:13px}
/* Crédito de autoría del gate. En columna y no en línea: el logo oficial es
   cuadrado, así que a un tamaño en el que se lea no entra al lado del texto. */
.gate__by{display:flex;flex-direction:column;align-items:center;gap:10px;margin-top:26px}
.gate__by-t{font-size:10px;color:var(--text3);font-family:var(--m);
  letter-spacing:.1em;text-transform:uppercase}
/* El logo oficial es rojo y transparente. La regla de marca es que sobre fondo
   oscuro va sobre papel, nunca el rojo directo — de ahí el chip. Sin opacidad:
   apagar la marca para que "no moleste" es justo lo contrario de lo que un
   crédito de autoría tiene que hacer. */
.gate__by-logo{height:78px;width:78px;display:block;background:#FCFBF8;
  border-radius:14px;padding:6px;box-shadow:0 2px 14px rgba(0,0,0,.28)}
.brand__mark--lg{width:44px;height:44px;display:inline-block;filter:drop-shadow(0 0 18px rgba(110,92,246,.5))}

.topbar__spacer{flex:1}
.views{padding-bottom:86px}
@media (min-width:901px){.views{padding-bottom:24px}}

/* bottom tab bar (solo mobile) */
.tabbar{display:none}
@media (max-width:900px){
  /* Flex y no grid de 6 columnas fijas: "Equipo" sólo existe para supervisión y
     con columnas rígidas su [hidden] dejaba un hueco. Con flex:1 los que quedan
     se reparten el ancho, sean 5 o 6. */
  .tabbar{position:fixed;left:0;right:0;bottom:0;z-index:50;display:flex;
    background:rgba(15,20,27,.92);backdrop-filter:blur(14px);border-top:1px solid var(--border-soft);
    padding:6px 2px calc(6px + env(safe-area-inset-bottom))}
  .tabbar__b{flex:1 1 0;min-width:0;background:none;border:none;color:var(--text3);font-family:var(--b);font-size:9.5px;font-weight:600;
    letter-spacing:-.02em;display:flex;flex-direction:column;align-items:center;gap:3px;padding:6px 1px;
    cursor:pointer;border-radius:10px}
  .tabbar__b span{max-width:100%;overflow:hidden;text-overflow:ellipsis}
  .tabbar__b i{font-style:normal;font-size:19px;line-height:1}
  .tabbar__b.is-active{color:var(--primary2)}
  .tabbar__b--star i{background:linear-gradient(180deg,var(--primary2),var(--primary));border-radius:12px;
    width:42px;height:30px;display:grid;place-items:center;color:#fff;box-shadow:0 4px 14px rgba(110,92,246,.45);margin-top:-14px}
  .tabbar__b--star.is-active i{box-shadow:var(--glow)}
  .snav__item{padding:13px 14px}
  .kanban{display:flex;overflow-x:auto;gap:14px;scroll-snap-type:x mandatory;padding-bottom:8px}
  .kanban .kcol{min-width:82vw;scroll-snap-align:start}
}

/* toast */
.toast{position:fixed;left:50%;bottom:96px;transform:translateX(-50%) translateY(8px);z-index:90;
  background:var(--surface3);border:1px solid var(--border);color:var(--text);font-size:14px;font-weight:600;
  padding:11px 20px;border-radius:12px;box-shadow:var(--sh);opacity:0;transition:.25s;pointer-events:none;white-space:nowrap}
.toast.is-on{opacity:1;transform:translateX(-50%) translateY(0)}
@media (min-width:901px){.toast{bottom:30px}}

/* modal */
.modal{position:fixed;inset:0;z-index:80;background:rgba(6,8,12,.66);backdrop-filter:blur(4px);display:grid;place-items:center;padding:20px}
.modal__card{width:100%;max-width:420px;background:var(--surface);border:1px solid var(--border);border-radius:var(--r-lg);padding:26px;box-shadow:var(--sh)}
.modal__card h3{font-size:19px;margin-bottom:16px}
.modal__card form{display:grid;gap:13px}
.modal__actions{display:flex;justify-content:flex-end;gap:10px;margin-top:6px}

/* acciones en property card */
.pcard__acts{display:flex;gap:8px;margin-top:11px}
.pcard__act{flex:1;text-align:center;font-size:12.5px;font-weight:600;padding:8px 10px;border-radius:9px;
  background:rgba(255,255,255,.05);border:1px solid var(--border);color:var(--text2);cursor:pointer;transition:.15s;font-family:var(--b)}
.pcard__act:hover{color:var(--text);border-color:#3a4756;background:rgba(255,255,255,.08)}
.pcard__act--cap{color:var(--emerald);border-color:rgba(25,195,125,.35)}
.pcard__act--cap:hover{background:var(--emerald-g);color:var(--emerald)}
.pcard__act:disabled{opacity:.55;cursor:default}

/* mover lead de etapa */
.lead__foot{display:flex;align-items:center;justify-content:space-between;gap:8px}
.lead__mv{display:flex;gap:5px}
.lead__mv button{width:26px;height:26px;border-radius:8px;border:1px solid var(--border);background:var(--surface3);
  color:var(--text2);font-size:14px;cursor:pointer;line-height:1;transition:.15s}
.lead__mv button:hover:not(:disabled){color:var(--text);border-color:var(--primary)}
.lead__mv button:disabled{opacity:.3;cursor:default}

/* scan extras */
.scanrow.err .scanrow__n{color:var(--text3)}
.scanrow__c small{color:var(--text3);font-weight:500;font-size:10.5px}

/* inputs generales del form (por si el mockup no los cubre) */
.comanda__form input,.comanda__form select,.modal__card input,.modal__card select{width:100%}

/* ===================== FILTROS DE PROPIEDADES =====================
   .propfilters/.filterb se usaban en el HTML pero no estaban definidos en
   ningun CSS: caian al boton default del browser. Definidos aca. */
.propfilters{display:flex;gap:6px;background:var(--bg2);border:1px solid var(--border);border-radius:11px;padding:4px}
.filterb{background:none;border:none;color:var(--text2);font-family:var(--b);font-weight:600;font-size:13.5px;
  padding:8px 14px;border-radius:8px;cursor:pointer;transition:.16s;display:inline-flex;align-items:center;gap:7px;white-space:nowrap}
.filterb:hover{color:var(--text);background:rgba(255,255,255,.05)}
.filterb:focus-visible{outline:none;box-shadow:0 0 0 3px var(--primary-g)}
.filterb.is-on{background:var(--primary);color:#fff}
.filterb b{font-family:var(--m);font-size:11px;font-weight:600;color:var(--text3);background:rgba(255,255,255,.06);
  padding:1px 6px;border-radius:5px;transition:.16s}
.filterb b:empty{display:none}
.filterb.is-on b{color:#fff;background:rgba(0,0,0,.22)}

.pfbar{max-width:1180px;margin:0 auto 22px;background:var(--surface);border:1px solid var(--border-soft);
  border-radius:var(--r);padding:14px 16px}
.pfbar__main{display:flex;gap:10px;align-items:center;flex-wrap:wrap}

.pfsearch{position:relative;flex:1 1 260px;min-width:0}
.pfsearch__ic{position:absolute;left:12px;top:50%;transform:translateY(-50%);color:var(--text3);font-size:16px;pointer-events:none}
.pfsearch input{width:100%;background:var(--bg2);border:1px solid var(--border);color:var(--text);font-family:var(--b);
  font-size:14px;padding:10px 12px 10px 34px;border-radius:9px;outline:none;transition:.15s}
.pfsearch input::placeholder{color:var(--text3)}
.pfsearch input:focus{border-color:var(--primary);box-shadow:0 0 0 3px var(--primary-g)}
.pfsearch input::-webkit-search-cancel-button{filter:invert(.6)}

.pfsel{background:var(--bg2);border:1px solid var(--border);color:var(--text);font-family:var(--b);font-size:14px;
  padding:10px 12px;border-radius:9px;outline:none;cursor:pointer;transition:.15s}
.pfsel:focus{border-color:var(--primary);box-shadow:0 0 0 3px var(--primary-g)}

.pftoggle{padding:10px 15px;font-size:14px}
.pftoggle[aria-expanded="true"]{border-color:rgba(110,92,246,.5);background:var(--primary-g);color:var(--primary2)}
.pftoggle__n{font-family:var(--m);font-size:11px;background:var(--primary);color:#fff;border-radius:999px;
  min-width:18px;height:18px;display:inline-flex;align-items:center;justify-content:center;padding:0 5px;margin-left:7px}

.pfbar__adv{display:grid;grid-template-columns:repeat(auto-fit,minmax(158px,1fr));gap:12px;
  margin-top:14px;padding-top:14px;border-top:1px solid var(--border-soft)}
.pffield label{display:block;font-size:12px;font-weight:600;color:var(--text2);margin-bottom:6px}
.pffield select,.pffield input{width:100%;background:var(--bg2);border:1px solid var(--border);color:var(--text);
  font-family:var(--b);font-size:14px;padding:9px 11px;border-radius:9px;outline:none;transition:.15s}
.pffield select:focus,.pffield input:focus{border-color:var(--primary);box-shadow:0 0 0 3px var(--primary-g)}

.pfbar__foot{display:flex;align-items:center;justify-content:space-between;gap:12px;margin-top:12px;flex-wrap:wrap}
.pfcount{font-size:13px;color:var(--text3)}
.pfcount b{color:var(--text);font-family:var(--m);font-weight:600}
.pfclear{background:none;border:none;color:var(--primary2);font-family:var(--b);font-size:13px;font-weight:600;
  cursor:pointer;padding:4px 2px;border-radius:6px;transition:.15s}
.pfclear:hover{color:var(--text);text-decoration:underline}
.pfclear:focus-visible{outline:none;box-shadow:0 0 0 3px var(--primary-g)}

.pfmore{display:flex;justify-content:center;margin:24px auto 0;max-width:1180px}

/* Mobile: el asesor usa esto en la calle, no en el escritorio. Targets táctiles
   de 44px mínimo (por debajo de eso se falla el toque con el celular en la mano). */
@media (max-width:560px){
  .propfilters{width:100%;overflow-x:auto}
  .filterb{flex:1;justify-content:center;padding:8px 10px;font-size:13px;min-height:44px}
  .pfbar{padding:12px}
  .pfbar__main{gap:8px}
  .pfsearch{flex:1 1 100%}
  .pfsearch input{min-height:44px}
  .pfsel,.pftoggle{flex:1;min-height:44px}
  .pfbar__adv{grid-template-columns:1fr 1fr}
  .pffield select,.pffield input{min-height:44px}
  .pfclear{min-height:44px;display:inline-flex;align-items:center}
  .pfmore .btn{min-height:44px}
}
.pcard__price--na{color:var(--text3);font-weight:600;font-size:.82em;letter-spacing:.01em}

/* ===================== IMPORTAR CARTERA =====================
   Onboarding: la inmobiliaria llega con la cartera en una planilla. El flujo es
   subir → mapear → previsualizar → confirmar, y nada se escribe hasta el último
   paso, así que la vista prioriza mostrar qué va a pasar antes de que pase. */

.impflow{display:flex;flex-wrap:wrap;gap:8px;list-style:none;margin-bottom:20px}
.impflow__s{display:flex;align-items:center;gap:9px;font-size:13px;font-weight:600;color:var(--text3);
  background:var(--bg2);border:1px solid var(--border-soft);border-radius:999px;padding:7px 15px 7px 7px;transition:.2s}
.impflow__s b{width:22px;height:22px;border-radius:50%;display:grid;place-items:center;font-family:var(--m);
  font-size:11px;background:var(--surface3);color:var(--text3)}
.impflow__s.is-done{color:var(--text2);border-color:rgba(25,195,125,.3)}
.impflow__s.is-done b{background:var(--emerald);color:#04150d}
.impflow__s.is-on{color:#fff;border-color:rgba(110,92,246,.5);background:var(--primary-g)}
.impflow__s.is-on b{background:var(--primary);color:#fff}

/* --- paso 1: zona de subida --- */
.imp__drop{position:relative;display:flex;flex-direction:column;align-items:center;text-align:center;gap:10px;
  background:linear-gradient(170deg,rgba(110,92,246,.07),var(--surface));border:1px dashed var(--border);
  border-radius:var(--r-lg);padding:clamp(28px,5vw,46px) 24px;cursor:pointer;transition:.2s}
.imp__drop:hover{border-color:rgba(110,92,246,.5)}
.imp__drop.is-drag{border-color:var(--primary);background:var(--primary-g);box-shadow:var(--glow);transform:scale(1.005)}
.imp__drop:focus-within{border-color:var(--primary);box-shadow:0 0 0 3px var(--primary-g)}
.imp__dropico{font-size:38px;line-height:1;color:var(--primary2)}
.imp__droph{font-family:var(--d);font-weight:700;font-size:20px;letter-spacing:-.02em}
.imp__dropp{font-size:14px;color:var(--text2)}
.imp__drop .btn{margin-top:6px;pointer-events:none}
.imp__hint{font-family:var(--m);font-size:11px;color:var(--text3);max-width:520px;line-height:1.6;margin-top:4px}
/* No se usa [hidden]: un input display:none no siempre es alcanzable por el label
   y deja de ser focusable con teclado. */
.imp__input{position:absolute;width:1px;height:1px;opacity:0;pointer-events:none}

.imp__err{margin-top:14px;background:rgba(240,80,110,.1);border:1px solid rgba(240,80,110,.4);
  border-radius:var(--r);padding:13px 16px;font-size:14px;color:#ff9aab}
.imp__loading{display:flex;align-items:center;gap:11px;margin-top:14px;background:var(--surface);
  border:1px solid var(--border);border-radius:var(--r);padding:14px 16px;font-size:14px;color:var(--text2)}
.imp__spin{width:16px;height:16px;border:2px solid var(--border);border-top-color:var(--primary2);
  border-radius:50%;animation:spin .7s linear infinite;flex-shrink:0}

/* --- paneles --- */
.imp__panels{display:flex;flex-direction:column;gap:16px;margin-top:16px}
.imp__filebar{display:flex;align-items:center;gap:11px;background:var(--surface2);border:1px solid var(--border-soft);
  border-radius:11px;padding:11px 14px;font-size:13.5px}
.imp__fileico{width:28px;height:28px;border-radius:8px;background:var(--primary-g);color:var(--primary2);
  display:grid;place-items:center;flex-shrink:0}
.imp__filename{font-family:var(--m);font-size:12.5px;color:var(--text2);min-width:0;overflow:hidden;
  text-overflow:ellipsis;white-space:nowrap}
.imp__filex{margin-left:auto;background:none;border:none;color:var(--primary2);font-family:var(--b);
  font-size:13px;font-weight:600;cursor:pointer;padding:4px 2px;border-radius:6px;white-space:nowrap}
.imp__filex:hover{color:var(--text);text-decoration:underline}

.imp__warn{display:flex;gap:12px;background:rgba(245,165,36,.1);border:1px solid rgba(245,165,36,.42);
  border-left-width:3px;border-radius:var(--r);padding:15px 17px;font-size:14px;color:var(--text2);line-height:1.55}
.imp__warn b{color:var(--amber)}
.imp__warnico{font-size:18px;line-height:1.3;color:var(--amber);flex-shrink:0}

/* --- paso 2: mapeo --- */
/* min(340px,100%) y no 340px pelado: en un viewport de 320 el track rígido de 340
   desbordaba la página entera en horizontal. El min-width:0 de la fila es lo que
   deja que el nombre de columna se recorte con ellipsis en vez de empujar. */
.imp__map{display:grid;grid-template-columns:repeat(auto-fill,minmax(min(340px,100%),1fr));gap:10px}
.imp__maprow{min-width:0;display:flex;align-items:center;gap:11px;background:var(--surface2);border:1px solid var(--border-soft);
  border-left:3px solid var(--emerald);border-radius:11px;padding:10px 13px;transition:.15s}
.imp__maprow.is-off{border-left-color:var(--border);opacity:.72}
.imp__maprow:hover{border-color:#3a4756}
.imp__mapcol{min-width:0;flex:1}
.imp__mapcol b{display:block;font-size:13.5px;font-weight:600;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.imp__mapcol small{display:block;font-family:var(--m);font-size:11px;color:var(--text3);margin-top:2px;
  overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.imp__maparrow{color:var(--text3);font-size:14px;flex-shrink:0}
.imp__mapsel{width:148px;flex-shrink:0;background:var(--bg2);border:1px solid var(--border);color:var(--text);
  font-family:var(--b);font-size:13px;padding:8px 9px;border-radius:9px;outline:none;cursor:pointer;transition:.15s}
.imp__mapsel:focus{border-color:var(--primary);box-shadow:0 0 0 3px var(--primary-g)}

/* --- paso 3: resumen + muestra --- */
.imp__sum{display:flex;align-items:center;gap:10px;flex-wrap:wrap;margin-bottom:16px}
.imp__sumitem{display:flex;align-items:baseline;gap:8px;background:var(--surface2);border:1px solid var(--border-soft);
  border-radius:11px;padding:10px 15px}
.imp__sumitem b{font-family:var(--d);font-size:22px;font-weight:700;line-height:1}
.imp__sumitem span{font-size:12.5px;color:var(--text2)}
.imp__sumitem--ok{border-color:rgba(25,195,125,.35);background:var(--emerald-g)}
.imp__sumitem--ok b{color:var(--emerald)}
.imp__sumitem--dup b{color:var(--amber)}
.imp__sumitem--rech b{color:var(--danger)}
.imp__sumtxt{font-size:13px;color:var(--text3)}
.imp__sumtxt b{font-family:var(--m);font-size:13px}

.imp__tablewrap{overflow-x:auto;border:1px solid var(--border-soft);border-radius:11px}
.imp__table{width:100%;border-collapse:collapse;font-size:13px;white-space:nowrap}
.imp__table th{text-align:left;font-family:var(--m);font-size:10.5px;font-weight:700;text-transform:uppercase;
  letter-spacing:.06em;color:var(--text3);background:var(--bg2);padding:10px 13px;border-bottom:1px solid var(--border)}
.imp__table td{padding:10px 13px;border-bottom:1px solid var(--border-soft);color:var(--text2);
  max-width:260px;overflow:hidden;text-overflow:ellipsis}
.imp__table tbody tr:last-child td{border-bottom:none}
.imp__row--ok td{color:var(--text)}
.imp__row--dup{background:rgba(245,165,36,.05)}
.imp__row--rech{background:rgba(240,80,110,.06)}
.imp__nro{font-family:var(--m);font-size:11.5px;color:var(--text3);width:1%}
.imp__na{color:var(--text3)}
.imp__chip{font-family:var(--m);font-size:10.5px;font-weight:700;padding:3px 8px;border-radius:6px;white-space:nowrap}
.imp__chip--ok{background:var(--emerald-g);color:var(--emerald);border:1px solid rgba(25,195,125,.35)}
.imp__chip--dup{background:rgba(245,165,36,.14);color:var(--amber);border:1px solid rgba(245,165,36,.35)}
.imp__chip--rech{background:rgba(240,80,110,.14);color:#ff8497;border:1px solid rgba(240,80,110,.35)}
.imp__detail{white-space:normal;max-width:340px}
.imp__detail span{display:block;font-size:12px;color:var(--text3);line-height:1.45}

/* --- paso 4: confirmar --- */
.imp__foot{display:flex;align-items:center;justify-content:space-between;gap:16px;flex-wrap:wrap;
  background:var(--surface);border:1px solid var(--border);border-radius:var(--r);padding:16px 18px}
.imp__footnote{font-size:13px;color:var(--text2);max-width:520px}
.imp__foot .btn:disabled{opacity:.45;cursor:default;box-shadow:none;transform:none}

/* --- reporte final --- */
.imp__report{display:flex;flex-direction:column;gap:16px;margin-top:16px}
.imp__done{display:flex;align-items:center;gap:16px;background:linear-gradient(160deg,var(--emerald-g),var(--surface));
  border:1px solid rgba(25,195,125,.42);border-radius:var(--r-lg);padding:22px 24px}
.imp__done h3{font-size:20px}
.imp__done .muted{font-size:14px;margin-top:3px}
.imp__doneico{width:42px;height:42px;border-radius:12px;background:var(--emerald);color:#04150d;
  display:grid;place-items:center;font-size:21px;font-weight:700;flex-shrink:0}
.imp__list{background:var(--surface);border:1px solid var(--border);border-left:3px solid var(--danger);
  border-radius:var(--r);padding:17px 19px}
.imp__list--warn{border-left-color:var(--amber)}
.imp__list h4{font-family:var(--d);font-size:14.5px;margin-bottom:11px}
.imp__list ul{list-style:none;display:flex;flex-direction:column;gap:7px;max-height:280px;overflow-y:auto}
.imp__list li{font-size:13px;color:var(--text2);line-height:1.5}
.imp__list li b{font-family:var(--m);font-size:11.5px;color:var(--text3);margin-right:6px}

@media (max-width:560px){
  .impflow{gap:6px}
  .impflow__s{font-size:12px;padding:6px 12px 6px 6px}
  .imp__map{grid-template-columns:1fr}
  .imp__mapsel{width:130px;min-height:44px}
  .imp__foot .btn{width:100%;justify-content:center}
  .imp__sumitem{flex:1;justify-content:center}
}

/* ===================== CRM: SESIÓN, EQUIPO Y TIMELINE =====================
   Quién sos, qué podés hacer y qué pasó con cada lead. El eje visual es que el
   estado de la sesión se vea SIEMPRE (chip de solo lectura arriba, controles
   apagados con su motivo en el title) y no aparezca recién cuando algo falla. */

/* --- gate con dos caminos --- */
.gate__sep{display:flex;align-items:center;gap:10px;margin:4px 0 2px;font-size:11px;color:var(--text3);
  font-family:var(--m);letter-spacing:.06em;text-transform:uppercase}
.gate__sep::before,.gate__sep::after{content:"";flex:1;height:1px;background:var(--border-soft)}
.gate__sep--or{margin:10px 0 4px}
/* El código va centrado y en mono porque es un token; el mail y la contraseña
   son texto de una persona y se leen mejor alineados a la izquierda. */
.gate__in{font-family:var(--b)!important;text-align:left!important;font-size:14.5px!important}
/* Campo de contraseña con botón para verla. El botón se apoya sobre el borde
   derecho del input, y el input reserva ese espacio con padding para que el
   texto largo no se le meta abajo. */
.pwd{position:relative;display:block;width:100%}
/* El input reserva el ancho del boton para que el texto largo no se le meta abajo. */
.pwd>input{width:100%;padding-right:44px!important}
.pwd__ver{position:absolute;top:50%;right:4px;transform:translateY(-50%);
  display:grid;place-items:center;width:34px;height:34px;
  background:none;border:0;padding:0;cursor:pointer;color:var(--text3);
  border-radius:9px;transition:color .18s ease,background .18s ease}
.pwd__ver:hover{color:var(--text2);background:var(--surface3)}
.pwd__ver:focus-visible{outline:2px solid var(--primary);outline-offset:1px}
/* Revelado: el ojo se enciende para que se note de un vistazo que hay algo a la
   vista en pantalla — es la señal de "ojo, esto se está viendo". */
.pwd__ver[aria-pressed="true"]{color:var(--primary2)}

.pwd__icono{width:19px;height:19px;fill:none;stroke:currentColor;stroke-width:1.7;
  stroke-linecap:round;stroke-linejoin:round;overflow:visible}
/* La pupila se achica un toque al ocultar: le da el gesto de parpadeo sin
   necesidad de animar el contorno del ojo. */
.pwd__pupila{transform-origin:12px 12px;transition:transform .2s ease}
.pwd__ver[aria-pressed="false"] .pwd__pupila{transform:scale(.72)}
/* La tachadura se DIBUJA sola: oculta desde el vértice de arriba, y al revelar
   se retrae por el mismo camino. 23 es el largo de la diagonal (√(15.6²+15.6²)). */
.pwd__tacha{stroke-dasharray:23;stroke-dashoffset:0;transition:stroke-dashoffset .24s ease}
.pwd__ver[aria-pressed="true"] .pwd__tacha{stroke-dashoffset:23}
@media (prefers-reduced-motion:reduce){
  .pwd__pupila,.pwd__tacha{transition:none}
}
.gate__hint{font-size:11.5px;color:var(--text3);line-height:1.5;margin-top:2px}
.gate__hint b{color:var(--text2)}
.gate__err{background:rgba(240,80,110,.1);border:1px solid rgba(240,80,110,.35);border-radius:9px;
  padding:9px 12px;line-height:1.45}

/* --- identidad en la topbar --- */
.btn--sm{padding:7px 13px;font-size:13px;border-radius:9px}
.tag--ro{background:rgba(245,165,36,.13);color:var(--amber);border:1px solid rgba(245,165,36,.38);cursor:help}
.whoami{display:flex;align-items:center;gap:10px;padding-left:12px;border-left:1px solid var(--border-soft)}
.whoami__b{display:flex;flex-direction:column;line-height:1.25;min-width:0}
.whoami__b strong{font-size:13.5px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;max-width:150px}
.whoami__b small{font-family:var(--m);font-size:10.5px;color:var(--text3);letter-spacing:.04em;text-transform:uppercase}
.whoami__out{background:none;border:1px solid var(--border);color:var(--text3);font-family:var(--b);font-size:12.5px;
  font-weight:600;padding:7px 12px;border-radius:9px;cursor:pointer;transition:.15s}
.whoami__out:hover{color:var(--danger);border-color:rgba(240,80,110,.45);background:rgba(240,80,110,.08)}

/* Estado de solo lectura: apagado y explicado, nunca escondido. */
[data-write]:disabled{opacity:.45;cursor:not-allowed}
.imp__drop.is-ro{opacity:.55;cursor:not-allowed;border-style:solid}
.imp__drop.is-ro:hover{border-color:var(--border)}

/* --- barra de reparto y filtro por asesor --- */
.crmbar{display:flex;align-items:flex-end;gap:12px;flex-wrap:wrap;background:var(--surface);
  border:1px solid var(--border-soft);border-radius:var(--r);padding:13px 16px;margin-bottom:16px}
.crmbar__f{display:flex;flex-direction:column;gap:6px;min-width:0}
.crmbar__f label{font-size:12px;font-weight:600;color:var(--text2)}
.crmbar__n{margin-left:auto;font-family:var(--m);font-size:12px;color:var(--text3)}

/* --- dueño del lead en la tarjeta del kanban --- */
.lead{position:relative}
.lead__owner{display:flex;align-items:center;gap:7px;margin-top:9px;font-size:12px;color:var(--text2)}
.lead__ownerav{width:19px;height:19px;border-radius:6px;background:linear-gradient(150deg,var(--primary),var(--cyan));
  color:#fff;font-family:var(--d);font-size:9px;font-weight:700;display:grid;place-items:center;flex-shrink:0}
.lead__owner.is-none{color:var(--amber)}
.lead__owner.is-none .lead__ownerav{background:rgba(245,165,36,.2);color:var(--amber)}
.lead:focus-visible{outline:none;border-color:var(--primary);box-shadow:0 0 0 3px var(--primary-g)}

/* --- detalle del lead --- */
.modal__card--lg{max-width:560px;max-height:88vh;display:flex;flex-direction:column}
.ld__head{display:flex;align-items:flex-start;gap:12px;margin-bottom:14px}
.ld__id{min-width:0;flex:1}
.ld__id h3{font-size:20px}
.ld__id .muted{font-size:12.5px;margin-top:3px}
.ld__x{background:none;border:none;color:var(--text3);font-size:16px;cursor:pointer;padding:4px 8px;border-radius:8px;flex-shrink:0}
.ld__x:hover{color:var(--text);background:rgba(255,255,255,.06)}
.ld__owner{display:flex;align-items:center;gap:11px;background:var(--surface2);border:1px solid var(--border-soft);
  border-radius:11px;padding:11px 14px;margin-bottom:12px;font-size:13.5px}
.ld__lbl{font-size:12px;font-weight:600;color:var(--text2);flex-shrink:0}
.ld__owner .pfsel{margin-left:auto;max-width:60%}
.ld__note{display:flex;gap:8px;margin-bottom:16px}
.ld__note .pfsel{flex-shrink:0;font-size:13px;padding:9px 10px}
.ld__note input{flex:1;min-width:0;background:var(--bg2);border:1px solid var(--border);color:var(--text);
  font-family:var(--b);font-size:14px;padding:9px 12px;border-radius:9px;outline:none;transition:.15s}
.ld__note input:focus{border-color:var(--primary);box-shadow:0 0 0 3px var(--primary-g)}

/* timeline: del más nuevo arriba, con la línea que une los hitos */
/* flex:1 + min-height:0 para que scrollee el historial y no la tarjeta entera:
   el campo de nota tiene que quedar siempre visible arriba. */
.tl{flex:1 1 auto;min-height:0;overflow-y:auto;padding-right:4px;display:flex;flex-direction:column;gap:2px}
.tl__i{position:relative;display:flex;gap:12px;padding:10px 0 10px 2px}
.tl__i::before{content:"";position:absolute;left:14px;top:32px;bottom:-2px;width:1px;background:var(--border-soft)}
.tl__i:last-child::before{display:none}
.tl__ic{width:28px;height:28px;border-radius:9px;background:var(--surface2);border:1px solid var(--border-soft);
  display:grid;place-items:center;font-size:13px;flex-shrink:0;z-index:1}
.tl__b{min-width:0;flex:1}
.tl__t{font-size:13.5px;color:var(--text);line-height:1.45;overflow-wrap:anywhere}
.tl__m{font-family:var(--m);font-size:11px;color:var(--text3);margin-top:3px}
.tl__m b{font-weight:600;color:var(--text2)}
.tl__m span{cursor:help}

/* --- ranking de asesores --- */
.rank{display:flex;flex-direction:column;gap:8px}
.rank__r{display:grid;grid-template-columns:32px minmax(90px,1.1fr) minmax(60px,1.4fr) repeat(3,auto);
  align-items:center;gap:12px;background:var(--surface2);border:1px solid var(--border-soft);
  border-radius:11px;padding:11px 14px;transition:.15s}
.rank__r:hover{border-color:#3a4756}
.rank__av{width:32px;height:32px;border-radius:9px;background:linear-gradient(150deg,var(--primary),var(--cyan));
  color:#fff;font-family:var(--d);font-size:12px;font-weight:700;display:grid;place-items:center}
.rank__n{font-size:14px;font-weight:600;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.rank__bar{height:8px;background:var(--surface3);border-radius:99px;overflow:hidden}
.rank__bar i{display:block;height:100%;border-radius:99px;background:linear-gradient(90deg,var(--primary),var(--primary2))}
.rank__v{text-align:right;line-height:1.15}
.rank__v b{display:block;font-family:var(--d);font-size:17px;font-weight:700}
.rank__v small{font-size:10.5px;color:var(--text3)}
.rank__v--t b{color:var(--emerald)}

/* --- tabla de usuarios --- */
.utable__wrap{overflow-x:auto;border:1px solid var(--border-soft);border-radius:11px}
.utable{width:100%;border-collapse:collapse;font-size:13.5px}
.utable th{text-align:left;font-family:var(--m);font-size:10.5px;font-weight:700;text-transform:uppercase;
  letter-spacing:.06em;color:var(--text3);background:var(--bg2);padding:10px 14px;border-bottom:1px solid var(--border)}
.utable td{padding:11px 14px;border-bottom:1px solid var(--border-soft);color:var(--text2);white-space:nowrap}
.utable tbody tr:last-child td{border-bottom:none}
.utable tr.is-off td{opacity:.55}
.utable__mail{font-family:var(--m);font-size:12px}
.utable__act{text-align:right;width:1%}
.tag--off{background:rgba(255,255,255,.05);color:var(--text3);border:1px solid var(--border)}
.ubtn{background:rgba(255,255,255,.04);border:1px solid var(--border);color:var(--text2);font-family:var(--b);
  font-size:12.5px;font-weight:600;padding:7px 12px;border-radius:9px;cursor:pointer;transition:.15s;white-space:nowrap}
.ubtn:hover:not(:disabled){color:var(--text);border-color:#3a4756}
.ubtn--off:hover:not(:disabled){color:var(--danger);border-color:rgba(240,80,110,.45);background:rgba(240,80,110,.08)}
.ubtn:disabled{opacity:.45;cursor:not-allowed}
.utable__note{font-size:12px;color:var(--text3);margin-top:11px;line-height:1.5}
.userform__err{background:rgba(240,80,110,.1);border:1px solid rgba(240,80,110,.35);border-radius:9px;
  padding:9px 12px;font-size:13px;color:#ff9aab}

@media (max-width:700px){
  .rank__r{grid-template-columns:28px 1fr auto auto auto;gap:9px;padding:10px 12px}
  .rank__bar{display:none}
  .rank__av{width:28px;height:28px;font-size:11px}
  .rank__v b{font-size:15px}
}
@media (max-width:560px){
  .whoami__b{display:none}
  .whoami{padding-left:8px;gap:7px}
  .topbar__actions{gap:8px}
  #liveTag{display:none}
  .crmbar{padding:12px}
  .crmbar__f{flex:1 1 100%}
  .crmbar__f .pfsel,.crmbar .btn{width:100%;min-height:44px}
  .crmbar__n{margin-left:0}
  .ld__note{flex-wrap:wrap}
  .ld__note .pfsel,.ld__note input{min-height:44px}
  .ld__note input{flex:1 1 100%;order:-1}
  .ld__note .btn{flex:1;justify-content:center;min-height:44px}
  .utable td,.utable th{padding:9px 11px}
  .ubtn{min-height:40px}
}

/* ================= COMANDA LIGADA AL CRM =================
   El campo cliente es un combo sobre los leads que el rol ya puede ver, con
   alta rápida al final. Mismo vocabulario visual que el resto del formulario
   (bg2 + borde + foco violeta): es un campo más, no un widget aparte. */
.combo{position:relative}
.combo__pop{position:absolute;z-index:30;top:calc(100% + 5px);left:0;right:0;max-height:232px;overflow-y:auto;
  background:var(--surface);border:1px solid var(--border);border-radius:11px;box-shadow:var(--sh);padding:5px}
.combo__o{display:block;width:100%;text-align:left;background:none;border:none;color:var(--text);
  font-family:var(--b);font-size:13.5px;padding:8px 10px;border-radius:8px;cursor:pointer;transition:.12s}
.combo__o:hover,.combo__o.is-on{background:var(--primary-g);color:var(--primary2)}
.combo__o small{display:block;font-family:var(--m);font-size:10.5px;color:var(--text3);margin-top:2px}
.combo__o:hover small,.combo__o.is-on small{color:var(--primary2);opacity:.75}
.combo__o--new{border-top:1px solid var(--border-soft);border-radius:0 0 8px 8px;color:var(--emerald);font-weight:600}
.combo__o--new:hover{background:var(--emerald-g);color:var(--emerald)}
.combo__empty{padding:9px 10px;font-size:12.5px;color:var(--text3)}
/* Lead elegido: se dice con quién quedó ligada la comanda y cómo soltarlo. */
.combo__sel{display:flex;align-items:center;gap:8px;margin-top:7px;background:var(--emerald-g);
  border:1px solid rgba(25,195,125,.35);border-radius:9px;padding:6px 8px 6px 11px;font-size:12.5px;color:var(--emerald)}
.combo__selt{flex:1;min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.combo__x{background:none;border:none;color:var(--emerald);font-size:12px;cursor:pointer;padding:2px 5px;border-radius:6px}
.combo__x:hover{background:rgba(25,195,125,.18)}
.combo__new{margin-top:9px;background:var(--surface2);border:1px solid var(--border-soft);
  border-radius:11px;padding:11px;display:grid;gap:8px}
.combo__newacts{display:flex;gap:8px;justify-content:flex-end}
.combo__newacts .btn{flex:1;justify-content:center}

/* --- elegir avisos y compartirlos por WhatsApp --- */
.share{display:flex;align-items:center;gap:10px;flex-wrap:wrap;margin-bottom:16px;background:var(--surface);
  border:1px solid rgba(25,195,125,.35);border-radius:var(--r);padding:11px 14px}
.share__n{font-size:13.5px;font-weight:600;color:var(--emerald);margin-right:auto}
.pcard__pick{display:inline-flex;align-items:center;gap:7px;font-size:12.5px;font-weight:600;color:var(--text2);
  background:rgba(255,255,255,.04);border:1px solid var(--border);border-radius:9px;padding:8px 11px;cursor:pointer;transition:.15s}
.pcard__pick:hover{color:var(--text);border-color:#3a4756}
.pcard__pick input{accent-color:var(--emerald);width:15px;height:15px;cursor:pointer}
.pcard__pick.is-on{color:var(--emerald);border-color:rgba(25,195,125,.45);background:var(--emerald-g)}

/* --- comandas dentro de la ficha del lead --- */
.ld__cmd{margin-bottom:12px}
.ld__cmdh{display:flex;align-items:center;gap:10px;margin-bottom:8px}
.ld__cmdh .ld__lbl{margin-right:auto}
.cmdlist{list-style:none;display:flex;flex-direction:column;gap:7px;max-height:172px;overflow-y:auto;padding-right:3px}
.cmd{display:flex;align-items:center;gap:11px;background:var(--surface2);border:1px solid var(--border-soft);
  border-radius:10px;padding:9px 12px}
.cmd__b{min-width:0;flex:1}
.cmd__t{font-size:13px;color:var(--text);overflow-wrap:anywhere}
.cmd__m{font-family:var(--m);font-size:10.5px;color:var(--text3);margin-top:3px}
.cmd__n{font-family:var(--d);font-size:15px;font-weight:700;color:var(--emerald);flex-shrink:0;line-height:1.1;text-align:right}
.cmd__n small{display:block;font-family:var(--m);font-size:9.5px;font-weight:500;color:var(--text3)}
.ld__cmd .muted{font-size:12.5px}

@media (max-width:560px){
  .combo__newacts .btn{min-height:44px}
  .share .btn{flex:1;justify-content:center;min-height:44px}
  .share__n{flex:1 1 100%}
}

/* ==================== CUENTA DE LA INMOBILIARIA ====================
   NO es marca blanca: el producto sigue siendo Broker.App. Esto es el indicador
   de en qué cuenta se está trabajando —el equivalente al espacio de trabajo de
   cualquier SaaS—, para que quien entra reconozca que el acceso es de su
   empresa. Por eso vive junto al usuario logueado y no donde va la marca. */
/* En columna y no en fila: el logo de una inmobiliaria suele traer su nombre
   adentro, asi que ponerlo al lado lo repite y encima obliga a truncarlo. */
.cuenta{display:flex;flex-direction:column;align-items:flex-start;gap:7px;
  padding:11px 12px;margin-bottom:10px;background:var(--surface);
  border:1px solid var(--border-soft);border-radius:11px}
.cuenta__logo{max-height:24px;max-width:100%;width:auto;height:auto;object-fit:contain}
.cuenta__k{font-family:var(--m);font-size:8.5px;font-weight:600;letter-spacing:.09em;
  text-transform:uppercase;color:var(--text3)}
/* En el gate: una línea que dice de quién es el acceso, debajo de Broker.App. */
.gate__cuenta{display:flex;align-items:center;justify-content:center;gap:8px;
  margin:2px 0 0;font-family:var(--m);font-size:10px;font-weight:500;
  letter-spacing:.05em;text-transform:uppercase;color:var(--text3)}
.gate__cuenta img{max-height:22px;max-width:96px;width:auto;object-fit:contain}

/* ==================== VER LA PUBLICACIÓN ====================
   El pedido del dueño del producto, textual: "no se puede ver nada ni las fotos
   ni que tiene cada publicación... ni veo el botón para ir al portal". Tres
   piezas: la tarjeta avisa que se puede abrir, la barra de resultados deja
   ordenar y filtrar TODO lo que trajo el scan, y la ficha muestra la propiedad
   entera sin salir de la app. */

/* --- la tarjeta, clickeable --- */
/* Cubre la foto, que es donde el usuario ya intenta hacer click. Es un <button>
   real y no un role sobre la tarjeta: adentro de la tarjeta hay checkbox, link y
   botón, y anidar controles rompe el teclado. */
.pcard__open{position:absolute;inset:0;z-index:1;width:100%;border:none;background:none;
  cursor:pointer;display:grid;place-items:center;padding:0;color:#fff}
.pcard__open span{font-family:var(--b);font-size:13px;font-weight:600;padding:9px 15px;border-radius:99px;
  background:rgba(11,14,19,.72);border:1px solid rgba(255,255,255,.2);backdrop-filter:blur(6px);
  opacity:0;transform:translateY(6px);transition:.18s}
.pcard:hover .pcard__open span,.pcard__open:focus-visible span{opacity:1;transform:none}
.pcard__open:focus-visible{outline:none;box-shadow:inset 0 0 0 3px var(--primary)}
/* Las chapitas se ven por encima del botón pero no le roban el click. */
.pcard__src,.pcard__match,.pcard__fotos{z-index:2;pointer-events:none}
/* Cuántas fotos tiene el aviso: sin esto la tarjeta se ve igual con 1 que con 12. */
.pcard__fotos{position:absolute;bottom:10px;right:10px;font-family:var(--m);font-size:11px;font-weight:600;
  color:#fff;background:rgba(11,14,19,.78);backdrop-filter:blur(6px);padding:4px 9px;border-radius:6px;
  border:1px solid rgba(255,255,255,.12)}

/* --- barra de orden y filtros de los resultados del scan --- */
/* `.comanda__out` es un item de grid, y un item de grid arranca con
   `min-width:auto`: su ancho mínimo es el min-content de lo que tenga adentro.
   El strip de fuentes va en `flex-wrap:nowrap` para poder scrollearse en el
   celular, y eso le da un min-content igual a la suma de los chips — que en 375
   px estiraba la columna a 588 y le metía scroll horizontal a la pantalla
   entera. Medido: con esta línea, scrollWidth del documento vuelve de 608 a 375
   y el strip sigue scrolleando adentro suyo (562 px de contenido en 309). */
.comanda__out{min-width:0}

.rbar{background:var(--surface);border:1px solid var(--border-soft);border-radius:var(--r);
  padding:14px 16px;margin-bottom:16px}
.rbar__main{display:flex;gap:10px;align-items:center;flex-wrap:wrap}
.rbar__lbl{font-size:13px;font-weight:600;color:var(--text2)}
.rbar__chk{display:inline-flex;align-items:center;gap:7px;font-size:13px;font-weight:600;color:var(--text2);
  background:rgba(255,255,255,.04);border:1px solid var(--border);border-radius:9px;padding:8px 12px;
  cursor:pointer;transition:.15s}
.rbar__chk:hover{color:var(--text);border-color:#3a4756}
.rbar__chk input{accent-color:var(--primary);width:15px;height:15px;cursor:pointer}
.rbar__chk b{font-family:var(--m);font-size:11px;font-weight:600;color:var(--text3)}
.rbar__chk:has(input:checked) b{color:var(--primary2)}
.rbar__chk:has(input:checked){color:var(--primary2);border-color:rgba(110,92,246,.45);background:var(--primary-g)}
.rbar__fuentes{display:flex;gap:8px;flex-wrap:wrap;margin-top:11px}
.rbar__foot{display:flex;align-items:center;justify-content:space-between;gap:12px;margin-top:12px;flex-wrap:wrap}
/* Cuando el scan tocó el techo de resultados hay que decirlo, no callarlo. */
.results__cap{background:rgba(245,165,36,.08);border:1px solid rgba(245,165,36,.32);border-radius:var(--r);
  padding:11px 15px;margin-bottom:16px;font-size:13.5px;color:var(--text2)}
.results__cap b{color:var(--amber);font-family:var(--m);font-weight:600}

/* --- filtros de capacidad y resumen por grupo --- */
/* Ocupa la fila entera de la grilla de filtros: son 13 tildes y partidos en una
   columna angosta quedan en tres letras por línea. */
.pffield--caps{grid-column:1/-1}
.pfcaps{display:flex;flex-wrap:wrap;gap:7px}
.pfcap{display:inline-flex;align-items:center;gap:6px;font-size:12.5px;
  padding:6px 11px;border-radius:999px;cursor:pointer;
  background:var(--surface2);border:1px solid var(--border-soft);color:var(--text2);
  transition:border-color .14s ease,color .14s ease,background .14s ease}
.pfcap:hover{border-color:var(--border);color:var(--text)}
/* El número es cuántos avisos lo DECLARAN: lo que el filtro va a dejar. Apagado
   pesa menos que la etiqueta, prendido no compite con ella. */
.pfcap b{font-family:var(--m);font-size:11px;font-weight:600;opacity:.6}
.pfcap.is-on{background:var(--primary-g);border-color:var(--primary);color:var(--text)}
.pfcap.is-on b{opacity:.85}
.pfcap:focus-visible{outline:none;box-shadow:0 0 0 3px var(--primary-g)}
.pfcaps__nota{grid-column:1/-1;margin:9px 0 0;font-size:12px;line-height:1.5;color:var(--text3)}

.pfgrupos{display:flex;flex-wrap:wrap;gap:9px;padding:14px 0 2px}
.pfgrupo{display:flex;flex-direction:column;gap:2px;align-items:flex-start;
  padding:10px 14px;border-radius:12px;cursor:pointer;text-align:left;
  background:var(--surface2);border:1px solid var(--border-soft);
  transition:border-color .14s ease,background .14s ease}
.pfgrupo:hover{border-color:var(--border)}
.pfgrupo.is-on{border-color:var(--primary);background:var(--primary-g)}
.pfgrupo b{font-size:13.5px;font-weight:600;color:var(--text)}
.pfgrupo span{font-family:var(--m);font-size:11px;color:var(--text2)}
.pfgrupo small{font-family:var(--m);font-size:10.5px;color:var(--text3)}
.pfgrupo:focus-visible{outline:none;box-shadow:0 0 0 3px var(--primary-g)}

/* --- la ficha --- */
/* Modal y no panel lateral: la foto es el 80% de la respuesta y un panel paga
   ancho justo ahí; en 375px un panel termina siendo pantalla completa igual. */
body.sin-scroll{overflow:hidden}
.ficha__card{max-width:760px;width:100%;max-height:92vh;padding:0;overflow:hidden;
  display:flex;flex-direction:column;position:relative}
.ficha__x{position:absolute;top:12px;right:12px;z-index:5;background:rgba(11,14,19,.72);
  border:1px solid rgba(255,255,255,.16);backdrop-filter:blur(6px);border-radius:9px;color:#fff}
.ficha__x:hover{background:rgba(11,14,19,.92);color:#fff}

.ficha__gal{position:relative;flex-shrink:0;aspect-ratio:16/9;background:#10161f;overflow:hidden}
.ficha__foto{width:100%;height:100%;object-fit:cover}
.ficha__src{position:absolute;top:12px;left:12px;font-family:var(--m);font-size:11.5px;
  font-weight:600;color:#fff;background:rgba(11,14,19,.78);backdrop-filter:blur(6px);padding:5px 10px;
  border-radius:6px;border:1px solid rgba(255,255,255,.12);max-width:60%;overflow:hidden;
  text-overflow:ellipsis;white-space:nowrap}
.ficha__gal .ficha__match{position:absolute;top:12px;right:58px;font-family:var(--m);font-size:11.5px;
  font-weight:700;color:#04150d;background:var(--emerald);padding:5px 10px;border-radius:6px}
.ficha__nav{position:absolute;top:50%;transform:translateY(-50%);width:44px;height:44px;border-radius:50%;
  display:grid;place-items:center;font-size:26px;line-height:1;color:#fff;cursor:pointer;
  background:rgba(11,14,19,.68);border:1px solid rgba(255,255,255,.18);backdrop-filter:blur(6px);transition:.15s}
.ficha__nav:hover{background:rgba(11,14,19,.92);border-color:rgba(255,255,255,.4)}
.ficha__nav:focus-visible{outline:none;box-shadow:0 0 0 3px var(--primary-g),0 0 0 1px var(--primary)}
.ficha__nav--prev{left:12px;padding-right:3px}
.ficha__nav--next{right:12px;padding-left:3px}
.ficha__n{position:absolute;bottom:12px;right:12px;font-family:var(--m);font-size:11.5px;color:#fff;
  background:rgba(11,14,19,.78);backdrop-filter:blur(6px);padding:4px 10px;border-radius:99px;
  border:1px solid rgba(255,255,255,.12)}

.ficha__body{flex:1 1 auto;min-height:0;overflow-y:auto;padding:20px 24px 22px}
.ficha__precio{font-family:var(--d);font-size:30px;font-weight:700;line-height:1.1}
.ficha__precio.is-na{font-size:19px;color:var(--text3)}
/* Calificado con `.ficha__card` para ganarle a `.modal__card h3` (0,1,1), que si
   no deja el título en los 19px del resto de los modales: acá el titular es el
   precio y la dirección va abajo, en segundo plano. */
.ficha__card .ficha__t{font-size:17px;font-weight:600;color:var(--text2);margin:6px 0 10px;overflow-wrap:anywhere}
.ficha__specs{display:grid;grid-template-columns:repeat(auto-fit,minmax(104px,1fr));gap:9px;
  margin:14px 0 18px;padding-top:16px;border-top:1px solid var(--border-soft)}
.ficha__spec{background:var(--surface2);border:1px solid var(--border-soft);border-radius:10px;padding:9px 12px}
.ficha__spec span{display:block;font-family:var(--m);font-size:9.5px;font-weight:600;letter-spacing:.08em;
  text-transform:uppercase;color:var(--text3);margin-bottom:3px}
.ficha__spec b{font-size:14.5px;font-weight:600;color:var(--text)}
/* pre-line: Argenprop publica el aviso escrito en renglones, y colapsarlo a un
   párrafo es justo lo que vuelve ilegible una descripción. */
.ficha__desc{white-space:pre-line;font-size:14.5px;line-height:1.68;color:var(--text2);overflow-wrap:anywhere}
.ficha__desc.is-na{color:var(--text3);font-style:italic}

/* --- lo que abre la Fase 3: costos, capacidades y la fuente --- */
/* La vara del barrio. Va pegada al precio porque contesta la pregunta que el
   precio deja abierta: "¿es caro?". Verde cuando está por debajo — el mismo verde
   de "oportunidad ganada" del dashboard, que por eso no es color de marca. */
.ficha__vara{display:inline-flex;align-items:center;gap:6px;margin-top:6px;
  font-family:var(--m);font-size:11.5px;font-weight:600;letter-spacing:.02em;
  padding:4px 9px;border-radius:999px;background:var(--surface2);
  border:1px solid var(--border-soft);color:var(--text2)}
.ficha__vara.is-bajo{color:#34d399;border-color:rgba(52,211,153,.35);background:rgba(52,211,153,.09)}
.ficha__vara.is-alto{color:#fbbf24;border-color:rgba(251,191,36,.32);background:rgba(251,191,36,.08)}

.ficha__sec{margin-top:18px}
.ficha__h{font-family:var(--m);font-size:10px;font-weight:600;letter-spacing:.1em;
  text-transform:uppercase;color:var(--text3);margin:0 0 9px}
.ficha__nota{margin:9px 0 0;font-size:12px;line-height:1.5;color:var(--text3)}

.ficha__caps{display:flex;flex-wrap:wrap;gap:7px}
/* Declarado y inferido se distinguen a la vista, no sólo en un tooltip: lo
   inferido salió de leer el texto del aviso y el asesor lo va a repetir por
   teléfono. Que se note de dónde salió es la diferencia entre informar y afirmar. */
.ficha__cap{display:inline-flex;align-items:center;gap:5px;font-size:12.5px;
  padding:5px 10px;border-radius:999px;background:var(--surface2);
  border:1px solid var(--border-soft);color:var(--text2)}
.ficha__cap--inf{border-style:dashed;color:var(--text3)}
.ficha__cap b{font-weight:600;font-size:11px;opacity:.75}

.ficha__acts{flex-shrink:0;display:flex;align-items:center;gap:10px;flex-wrap:wrap;
  padding:14px 24px;border-top:1px solid var(--border);background:var(--surface2)}
/* El link al portal es el botón grande de la ficha: era lo que "ni se veía". */
.ficha__ver{flex:1 1 260px;justify-content:center}
.ficha__nolink{flex:1 1 260px;font-size:13px;color:var(--text3)}
.ficha__acts .pcard__act{flex:0 0 auto}

/* Dos columnas cuando hay ancho para las dos. La galería sigue siendo lo primero
   que se mira —es el 80 % de la respuesta— pero deja de comerse el alto que ahora
   necesitan los ~20 datos de la ficha: apilados, la descripción arrancaba abajo
   del pliegue y las capacidades no se veían nunca sin scrollear.
   Debajo de 900px se cae solo al apilado de siempre, que es la vista del celular:
   ahí un layout de dos columnas sería media pantalla para cada cosa. */
@media (min-width:900px){
  .ficha__card{max-width:1060px;max-height:88vh;
    display:grid;grid-template-columns:minmax(0,1.02fr) minmax(0,1fr);
    grid-template-rows:minmax(0,1fr) auto;
    grid-template-areas:"gal body" "acts acts"}
  /* `aspect-ratio` a auto: en la grilla la galería toma el alto de la fila, que es
     el de la columna de datos. Sin esto la foto impone 16/9 y descuadra la fila. */
  .ficha__gal{grid-area:gal;aspect-ratio:auto;height:100%;min-height:0}
  .ficha__body{grid-area:body;min-height:0;overflow-y:auto;padding:22px 24px 24px}
  .ficha__acts{grid-area:acts}
  /* El cerrar vuelve a la esquina de la ficha, no sobre la foto: con la galería
     ocupando media ficha, arriba a la derecha ya es la columna de datos. */
  .ficha__x{top:14px;right:14px}
}

@media (max-width:560px){
  .pcard__img{height:200px}
  /* En el celular no hay hover: la etiqueta del botón queda siempre visible. */
  .pcard__open span{opacity:1;transform:none;font-size:12px;padding:7px 13px}
  .rbar{padding:12px}
  .rbar__lbl{flex:1 1 100%}
  .rbar__main .pfsel{flex:1 1 100%;min-height:44px}
  .rbar__chk{flex:1;justify-content:center;min-height:44px}
  .rbar__fuentes{overflow-x:auto;flex-wrap:nowrap;padding-bottom:3px}
  .rbar__fuentes .filterb{flex:0 0 auto;min-height:44px}
  #rMore{min-height:44px}
  /* Pantalla completa: en 375px un modal centrado con márgenes desperdicia la
     mitad del alto justo donde la galería lo necesita. */
  .modal.ficha{padding:0;place-items:stretch}
  .ficha__card{max-width:100%;max-height:100vh;max-height:100dvh;height:100dvh;
    border-radius:0;border:none}
  .ficha__gal{aspect-ratio:4/3}
  .ficha__body{padding:16px 16px 18px}
  .ficha__precio{font-size:25px}
  .ficha__specs{grid-template-columns:1fr 1fr}
  .ficha__acts{padding:12px 16px}
  .ficha__ver,.ficha__acts .pcard__act,.ficha__acts .pcard__pick{flex:1 1 100%;justify-content:center;min-height:44px}
  .ficha__nav{width:40px;height:40px;font-size:23px}
}
