/* BATAN — redesign layer. Loads after styles.css. */
@import url('https://fonts.googleapis.com/css2?family=Hanken+Grotesk:wght@400;500;600;700&family=Newsreader:opsz,wght@6..72,400;6..72,500;6..72,600&display=swap');
:root{
  --primary:#1B2A38; --primary-light:#33485B;
  --accent:#94762F; --accent-light:#B49154;
  --bg:#F5F2EA; --bg-card:#FFFFFF;
  --text:#1B2A38; --text-muted:#6B7886; --border:#E7E1D4;
  --success:#3E7A52; --warning:#9A7B2E; --danger:#A6443A; --info:#3A6491;
  --shadow-sm:0 1px 2px rgba(27,42,56,.05);
  --shadow-md:0 2px 10px rgba(27,42,56,.07);
  --shadow-lg:0 12px 30px rgba(27,42,56,.12);
  --radius:6px; --radius-lg:8px;
}
body{font-family:'Hanken Grotesk',system-ui,sans-serif;font-feature-settings:'tnum' 1;background:var(--bg);}
.brand-title strong,.detail-header h1,.detail-name-edit,.projects-header h1,.resumen-header h1,.hv-head h2,.users-header h2,.login-card h1,.card h2,.params-card h2,.kpi-value{font-family:'Newsreader',Georgia,serif;font-weight:500;letter-spacing:-.01em;}
.kpi-value{font-weight:600;}
.topbar{box-shadow:none;border-bottom:1px solid var(--border);}
.brand-title{border-left-color:var(--accent);}
.nav button{border-radius:0;font-weight:500;}
.nav button:hover{background:transparent;color:var(--text);}
.nav button.active{background:transparent;color:var(--primary);border-bottom:2px solid var(--accent);padding-bottom:8px;}
.user-avatar,.user-avatar.owner{background:var(--primary);}
.user-role-badge.owner{background:#E7F0EA;color:var(--success);}
.user-role-badge.admin{background:#F3ECD9;color:var(--warning);}
.kpi-card{box-shadow:var(--shadow-sm);border-radius:var(--radius);}
.kpi-card::before{width:3px;background:var(--accent);}
.kpi-card.success::before{background:var(--success);}
.kpi-label{letter-spacing:.12em;}
.detail-header{background:var(--primary);border-radius:var(--radius-lg);}
.detail-header::after{display:none;}
.detail-header::before{content:'';position:absolute;left:0;top:0;bottom:0;width:3px;background:var(--accent-light);}
.card{border-radius:var(--radius);box-shadow:var(--shadow-sm);}
.section-title{letter-spacing:.12em;color:var(--accent);}
table.data th{background:var(--bg);letter-spacing:.07em;color:var(--text-muted);}
table.data tr:hover td{background:var(--bg);}
.pill.green{background:#E7F0EA;color:var(--success);}
.pill.red{background:#F6E3E0;color:var(--danger);}
.pill.yellow{background:#F3ECD9;color:#9A7B2E;}
.pill.blue{background:#E4ECF4;color:var(--info);}
.pill.gray{background:#ECE9E1;color:var(--text-muted);}
.pill.orange{background:#F4E7DD;color:#9E5F38;}
.btn{border-radius:var(--radius);}
.btn.accent{background:var(--accent);}
.btn.accent:hover{background:var(--accent-light);}
.field input,.field select,.field textarea{border-radius:var(--radius);}
.field input:focus,.field select:focus{border-color:var(--accent);box-shadow:0 0 0 3px rgba(148,118,47,.14);}
.progress-fill{background:linear-gradient(90deg,var(--accent),var(--accent-light));}
.login-overlay{background:linear-gradient(135deg,var(--primary),var(--primary-light));}
.login-card{border-radius:var(--radius-lg);}
.login-submit{background:var(--primary);border-radius:var(--radius);}
.login-submit:hover:not(:disabled){background:var(--primary-light);}
.valuation-panel,.param-field.derived{background:linear-gradient(135deg,#FCFAF6,#fff);border-color:var(--accent-light);}
.valuation-panel h2{color:var(--accent);}
.tab-btn.active{color:var(--primary);border-bottom-color:var(--accent);}

/* =========================================================
   VISTA AÉREA — "private bank" redesign
   ========================================================= */
.aerial-overline{
  font-size:10.5px; letter-spacing:.16em; text-transform:uppercase;
  color:var(--accent); font-weight:600;
}

/* (1) PAGE HEADER */
.aerial-head{ margin:4px 0 22px; }
.aerial-head .aerial-title{
  font-family:'Newsreader',Georgia,serif; font-weight:500; letter-spacing:-.015em;
  font-size:34px; line-height:1.05; color:var(--primary); margin:6px 0 4px;
}
.aerial-head .aerial-subline{ font-size:13.5px; color:var(--text-muted); }

/* shared card titles */
.aerial-card-title{
  font-family:'Newsreader',Georgia,serif; font-weight:500; letter-spacing:-.01em;
  font-size:18px; color:var(--primary); margin:0;
}

/* (2) SUMMARY BAND */
.aerial-summary{ padding:22px 24px; margin-bottom:20px; }
.aerial-summary-top{ display:flex; align-items:stretch; gap:28px; }
.aerial-summary-headline{ flex:0 0 auto; min-width:240px; }
.aerial-bigfig{
  font-family:'Newsreader',Georgia,serif; font-weight:500; letter-spacing:-.02em;
  font-size:44px; line-height:1.02; color:var(--primary); margin:8px 0 2px;
}
.aerial-bigfig-sub{ font-size:13px; color:var(--text-muted); }
.aerial-summary-stats{
  flex:1; display:grid; grid-template-columns:repeat(4,1fr);
}
.aerial-stat{ padding:2px 0 2px 22px; border-left:1px solid var(--border); }
.aerial-stat-label{
  font-size:10px; letter-spacing:.13em; text-transform:uppercase;
  color:var(--text-muted); font-weight:600; margin-bottom:6px;
}
.aerial-stat-value{ font-size:21px; font-weight:600; color:var(--primary); line-height:1.1; }
.aerial-stat-sub{ font-size:11.5px; color:var(--text-muted); margin-top:3px; }

.aerial-alloc{ margin-top:20px; padding-top:18px; border-top:1px solid var(--border); }
.alloc-bar{
  height:11px; border-radius:6px; overflow:hidden; display:flex;
  background:var(--bg); width:100%;
}
.alloc-seg{ display:block; height:100%; }
.alloc-seg + .alloc-seg{ box-shadow:inset 1px 0 0 rgba(255,255,255,.6); }
.alloc-legend{
  display:flex; flex-wrap:wrap; gap:8px 26px; margin-top:14px;
}
.alloc-legend-item{ display:flex; align-items:center; gap:8px; font-size:12.5px; }
.alloc-dot{ width:9px; height:9px; border-radius:50%; flex:0 0 auto; }
.alloc-legend-label{ color:var(--text); }
.alloc-legend-val{ color:var(--primary); font-weight:600; }
.alloc-legend-pct{ color:var(--text-muted); }

/* (3) MAIN GRID */
.aerial-grid{
  display:grid; grid-template-columns:1fr 360px; gap:20px;
  align-items:stretch; margin-bottom:20px;
}
@media (max-width:1100px){ .aerial-grid{ grid-template-columns:1fr; } }

.aerial-card-head{
  display:flex; align-items:center; justify-content:space-between;
  gap:12px; margin-bottom:14px; flex-wrap:wrap;
}
.aerial-mini-legend{ display:flex; flex-wrap:wrap; gap:6px 14px; }
.mini-legend-item{
  display:inline-flex; align-items:center; gap:6px;
  font-size:11px; color:var(--text-muted);
}
.mini-legend-dot{ width:8px; height:8px; border-radius:50%; }

/* map card + matte frame + landscape crop (keeps .map-container geometry
   intact so the dots stay perfectly aligned — we only clip it visually). */
.aerial-map-card{ display:flex; flex-direction:column; padding:18px; }
.map-frame{
  flex:1; display:flex; flex-direction:column;
  padding:12px; background:#FBF9F3; border:1px solid var(--border);
  border-radius:var(--radius);
}
.map-crop{ flex:1; overflow:hidden; border-radius:4px; min-height:340px; }
.map-crop .map-container{
  width:100%; box-shadow:none; border:0; border-radius:0; align-self:flex-start;
}
.aerial-map-card .map-legend{ display:none; }   /* replaced by the title legend */

/* right card */
.aerial-right-card{ display:flex; flex-direction:column; gap:20px; padding:20px; }
.aerial-right-title{
  font-size:10.5px; letter-spacing:.13em; text-transform:uppercase;
  color:var(--text-muted); font-weight:600; margin:0 0 12px;
}
.aerial-right-section{ display:flex; flex-direction:column; min-height:0; }
.assets-section{ flex:1; }

.cartera-list{ display:flex; flex-direction:column; gap:13px; }
.cartera-row-head{ display:flex; align-items:center; gap:9px; font-size:13px; }
.cartera-dot{ width:9px; height:9px; border-radius:50%; flex:0 0 auto; }
.cartera-name{ color:var(--text); }
.cartera-count{ color:var(--text-muted); font-size:11.5px; }
.cartera-val{ margin-left:auto; font-weight:600; color:var(--primary); }
.cartera-bar{
  height:5px; border-radius:3px; background:var(--bg); margin-top:6px; overflow:hidden;
}
.cartera-bar span{ display:block; height:100%; border-radius:3px; }

.asset-scroll{ flex:1; overflow-y:auto; min-height:0; max-height:340px; margin:-4px -6px 0; padding:4px 6px 0; }
.asset-row{
  display:flex; align-items:center; gap:11px; padding:9px 6px;
  border-radius:var(--radius); cursor:pointer; transition:background .12s;
}
.asset-row:hover{ background:var(--bg); }
.asset-dot{ width:9px; height:9px; border-radius:50%; flex:0 0 auto; }
.asset-row-main{ flex:1; min-width:0; }
.asset-name{ font-size:13px; color:var(--text); white-space:nowrap; overflow:hidden; text-overflow:ellipsis; }
.asset-meta{ font-size:11px; color:var(--text-muted); margin-top:1px; }
.asset-val{ font-weight:600; color:var(--primary); font-size:13px; }
.aerial-right-link{
  display:inline-block; margin-top:12px; font-size:12.5px; font-weight:600;
  color:var(--accent); cursor:pointer; text-decoration:none;
}
.aerial-right-link:hover{ color:var(--accent-light); }

/* (4) VALUE BY YEAR */
.aerial-year-card{ padding:20px 22px; }
.aerial-year-card .aerial-card-title{ margin-bottom:14px; }
.aerial-year-chart{ position:relative; height:240px; }

@media (max-width:760px){
  .aerial-summary-top{ flex-direction:column; gap:18px; }
  .aerial-summary-stats{ grid-template-columns:repeat(2,1fr); gap:14px 0; }
  .aerial-stat:nth-child(odd){ padding-left:0; border-left:0; }
  .aerial-head .aerial-title{ font-size:28px; }
  .aerial-bigfig{ font-size:38px; }
}

/* =========================================================
   PROYECTOS — index (cohort-grouped tile grid)
   ========================================================= */
/* (1) header row */
.projects-header{ margin-bottom:28px; }
.projects-header h1{ font-size:30px; letter-spacing:-.015em; }
.projects-header p{ font-size:13.5px; }

/* (2) cohort section headers */
.strategic-cohort-block{ margin-bottom:38px; }
.strategic-cohort-block .cohort-header{
  display:flex; align-items:center; gap:10px;
  padding-bottom:10px; margin-bottom:18px;
  border-bottom:1px solid var(--border);
}
.strategic-cohort-block .cohort-dot{ width:9px; height:9px; flex:0 0 auto; }
.strategic-cohort-block .cohort-name{
  flex:1; text-transform:uppercase; letter-spacing:.1em;
  font-size:11.5px; font-weight:600; color:var(--text-muted);
}
.strategic-cohort-block .cohort-total{
  color:var(--accent); font-weight:700; font-size:14px; letter-spacing:0;
}

/* (3) tile grid — 3 across on desktop */
.projects-grid{ gap:16px; }
@media (min-width:1000px){ .projects-grid{ grid-template-columns:repeat(3,1fr); } }

.project-tile.strategic-tile{
  padding:18px 20px; border:1px solid var(--border); border-left-width:3px;
  border-radius:var(--radius); box-shadow:var(--shadow-sm);
}
.project-tile.strategic-tile::before{ display:none; }   /* cohort color lives in the 3px left border */
.project-tile.strategic-tile:hover{
  transform:translateY(-3px); box-shadow:var(--shadow-md);
  /* keep the cohort-colored left border on hover — only neutralize the other sides */
  border-top-color:var(--border); border-right-color:var(--border); border-bottom-color:var(--border);
}

.tile-top{
  display:flex; align-items:center; justify-content:space-between;
  gap:10px; margin-bottom:10px;
}
.tile-tipo{
  font-size:10.5px; letter-spacing:.09em; text-transform:uppercase;
  color:var(--text-muted); font-weight:600;
}
.project-tile.strategic-tile .project-tile-name{
  font-family:'Newsreader',Georgia,serif; font-weight:500; font-size:18px;
  color:var(--primary); letter-spacing:-.01em; margin:0 0 8px;
}
.tile-meta{ font-size:12px; color:var(--text-muted); }
.tile-partner{ font-size:11.5px; color:var(--text-muted); margin-top:3px; }
.tile-footer{
  display:grid; grid-template-columns:1fr 1fr; gap:12px;
  margin-top:14px; padding-top:14px; border-top:1px solid var(--border);
}
.tile-foot-label{
  font-size:10px; letter-spacing:.08em; text-transform:uppercase;
  color:var(--text-muted); font-weight:600; margin-bottom:4px;
}
.tile-foot-val{ font-size:17px; font-weight:700; line-height:1.1; }
.tile-foot-val.bat{ color:var(--accent); }
.tile-foot-val.margin{ color:var(--primary); }

/* =========================================================
   PROJECT DETAIL — single-project "private bank" restyle
   ========================================================= */
/* (1) HEADER — flat navy band, gold overline, serif name, meta pairs */
.detail-header{ padding:26px 28px; }
.detail-overline{
  font-size:10.5px; letter-spacing:.16em; text-transform:uppercase;
  color:var(--accent-light); font-weight:600; margin-bottom:6px;
}
.detail-header h1{ font-size:30px; margin-bottom:2px; }
.detail-header .meta{ gap:28px; margin-top:16px; }
.detail-header .meta div{
  font-size:10.5px; letter-spacing:.08em; text-transform:uppercase;
  color:rgba(255,255,255,.62); font-weight:600;
}
.detail-header .meta strong{
  display:block; font-size:14.5px; letter-spacing:0; text-transform:none;
  font-weight:600; color:#fff; opacity:1; margin-top:4px;
}
.detail-header-actions{
  position:absolute; top:22px; right:24px; z-index:2;
  display:flex; align-items:center; gap:10px;
}
.detail-header-actions .pill{ background:rgba(255,255,255,.16); color:#fff; }
.btn-reposition{
  position:static; background:rgba(255,255,255,.12); color:#fff;
  border:1px solid rgba(255,255,255,.25); border-radius:var(--radius);
  padding:7px 12px; font-size:12px; font-weight:600; cursor:pointer;
}
.btn-reposition:hover{ background:rgba(255,255,255,.22); }

/* (2) TWO COLUMNS */
.detail-cols{
  display:grid; grid-template-columns:1fr 1fr; gap:20px;
  align-items:start; margin-bottom:20px;
}
@media (max-width:1040px){ .detail-cols{ grid-template-columns:1fr; } }
.detail-cols > .card{ margin:0; }

/* card-title badge pills: dark for Estratégica, gold for Operacional */
.card h2 .badge{ font-size:10.5px; letter-spacing:.1em; text-transform:uppercase; padding:5px 11px; border-radius:20px; }
.badge.papa{ background:var(--primary); color:#fff; }
.badge.esteban{ background:var(--accent); color:#fff; }

/* section titles — light serif */
.strat-section-title,.op-section-title{
  font-family:'Newsreader',Georgia,serif; font-weight:500; letter-spacing:-.01em;
  font-size:16px; color:var(--primary);
}

/* (2·LEFT) Strategic — area tiles */
.strategic-grid{ display:grid; grid-template-columns:1fr 1fr; gap:10px; }
.strat-row{
  display:flex; flex-direction:column; gap:4px;
  background:#FBF9F3; border:1px solid var(--border); border-radius:var(--radius);
  padding:12px 14px;
}
.strat-label{
  font-size:10px; letter-spacing:.08em; text-transform:uppercase;
  color:var(--text-muted); font-weight:600;
}
.strat-value{ font-size:15px; font-weight:600; color:var(--primary); }

/* price tiles */
.price-stack{ display:grid; grid-template-columns:1fr 1fr; gap:10px; }
.price-stack .price-item{
  background:#FBF9F3; border:1px solid var(--border); border-radius:var(--radius);
  padding:11px 14px; display:flex; flex-direction:column; gap:5px;
}
.price-stack .price-item.primary{ background:#FCFAF6; border-color:var(--accent-light); }
.price-item .pi-label{
  font-size:10px; letter-spacing:.08em; text-transform:uppercase;
  color:var(--text-muted); font-weight:600;
}
.price-item .pi-value{ font-size:15px; font-weight:600; color:var(--primary); display:flex; align-items:baseline; gap:1px; }
.price-item.primary .pi-value{ color:var(--accent); }
.price-item .pi-input{
  width:100%; border:1px solid transparent; background:transparent;
  font:inherit; font-weight:600; color:inherit; padding:1px 2px; border-radius:4px; min-width:0;
}
.price-item .pi-input:focus{ outline:none; background:#fff; border-color:var(--accent); box-shadow:0 0 0 3px rgba(148,118,47,.14); }
.price-item .pi-prefix,.price-item .pi-suffix{ color:var(--text-muted); font-size:12px; font-weight:500; }
/* dark Spread strip — full width */
.price-stack .price-item:has(.pi-value.spread){
  grid-column:1 / -1; flex-direction:row; align-items:center; justify-content:space-between;
  background:var(--primary); border-color:var(--primary);
}
.price-item:has(.pi-value.spread) .pi-label{ color:rgba(255,255,255,.7); }
.price-item .pi-value.spread{ color:#fff; font-size:16px; }

/* P&G table */
.strat-table td{ font-size:13.5px; }
.strat-table tr.strat-total td{
  background:#FBF9F3; border-top:1px solid var(--border); padding-top:12px; padding-bottom:12px;
}
.strat-table tr.strat-total td:first-child{ font-weight:600; color:var(--primary); }
.strat-table tr.strat-total td.num{
  font-family:'Newsreader',Georgia,serif; font-weight:500; font-size:19px; color:var(--primary);
}
.margin-pill{
  font-family:'Hanken Grotesk',sans-serif; font-size:11px; font-weight:700;
  background:#E7F0EA; color:var(--success); padding:2px 8px; border-radius:20px; margin-left:6px;
}

/* Batan attribution box + dark total band */
.batan-box{ background:#FBF9F3; border:1px solid var(--border); border-radius:var(--radius); padding:14px 16px; }
.batan-line-val{ font-weight:700; color:var(--primary); }
.batan-total-band{
  background:var(--primary); color:#fff; border-radius:var(--radius);
  padding:14px 16px; margin-top:12px;
  display:flex; align-items:center; justify-content:space-between;
}
.batan-total-band .batan-total-label{ font-size:11px; letter-spacing:.1em; text-transform:uppercase; color:rgba(255,255,255,.7); }
.batan-total-band .batan-total-val{ font-family:'Newsreader',Georgia,serif; font-weight:500; font-size:24px; color:#fff; }

/* slider: number + focus ring (thumb is already gold in styles.css) */
.bs-number:focus,.bs-slider:focus{ outline:none; }
.bs-number:focus{ border-color:var(--accent); box-shadow:0 0 0 3px rgba(148,118,47,.14); }

/* (2·RIGHT) Operational — KPI grid */
.op-kpis{ display:grid; grid-template-columns:1fr 1fr; gap:10px; }
.op-kpi{
  background:#FBF9F3; border:1px solid var(--border); border-radius:var(--radius);
  padding:12px 14px;
}
.op-kpi.primary{ background:#FCFAF6; border-color:var(--accent-light); }
.opk-label{ font-size:10px; letter-spacing:.08em; text-transform:uppercase; color:var(--text-muted); font-weight:600; }
.opk-value{ font-size:18px; font-weight:700; color:var(--primary); margin-top:3px; }
.op-kpi.primary .opk-value{ color:var(--accent); }

/* bank callout — solid navy panel + LTV donut on the right */
.op-bank-callout{
  display:flex; align-items:center; gap:22px;
  background:var(--primary); border:0; border-radius:var(--radius);
  box-shadow:var(--shadow-sm); color:#fff; padding:20px 24px;
}
.op-bank-text{ flex:1; }
.op-bank-label{ color:rgba(255,255,255,.7); opacity:1; }
.op-bank-amount{ color:var(--accent-light); font-weight:800; }
.op-bank-sub{ color:rgba(255,255,255,.82); opacity:1; }
.op-bank-sub strong{ color:#fff; }

/* LTV donut — conic-gradient ring with a punched-out navy center */
.op-ltv-dial{
  --arc-color:var(--accent-light);
  flex:0 0 auto; width:104px; height:104px; border-radius:50%;
  display:flex; align-items:center; justify-content:center;
  background:conic-gradient(var(--arc-color) calc(var(--pct,0)*1%), #E0D9CA 0);
}
.op-ltv-dial.good{ --arc-color:#5E8268; }
.op-ltv-dial.tight{ --arc-color:#A6443A; }
.op-ltv-center{
  width:76px; height:76px; border-radius:50%; background:var(--primary);
  display:flex; flex-direction:column; align-items:center; justify-content:center; gap:1px;
}
.op-ltv-num{
  font-size:21px; font-weight:700; color:#fff; line-height:1;
  font-variant-numeric:tabular-nums;
}
.op-ltv-cap{
  font-size:9.5px; letter-spacing:.14em; text-transform:uppercase;
  color:rgba(255,255,255,.65); font-weight:600;
}
@media (max-width:520px){
  .op-bank-callout{ flex-direction:column; align-items:flex-start; gap:16px; }
}

/* charts + legend dots match the muted palette */
.op-chart-title{ font-family:'Newsreader',Georgia,serif; font-weight:500; font-size:14px; color:var(--primary); }
.cl-dot.rev{ background:rgba(51,72,91,0.85); }
.cl-dot.urb{ background:rgba(166,68,58,0.55); }
.cl-dot.adm{ background:rgba(154,123,46,0.5); }

/* operational inputs as tidy tiles */
.op-inputs-grid{ display:grid; grid-template-columns:1fr 1fr; gap:10px; }
.op-input{
  background:#FBF9F3; border:1px solid var(--border); border-radius:var(--radius);
  padding:10px 12px;
}
.op-input label{ font-size:10px; letter-spacing:.07em; text-transform:uppercase; color:var(--text-muted); font-weight:600; }
.op-input .op-input-row{ display:flex; align-items:center; gap:6px; margin-top:5px; }
.op-input input{
  flex:1; min-width:0; border:1px solid var(--border); border-radius:4px;
  padding:5px 7px; font:inherit; font-weight:600; color:var(--primary); background:#fff;
}
.op-input input:focus{ outline:none; border-color:var(--accent); box-shadow:0 0 0 3px rgba(148,118,47,.14); }
.op-input-suffix{ font-size:12px; color:var(--text-muted); font-weight:500; }

/* sales velocity — small centered tiles */
.op-subsection-title{ font-size:12.5px; font-weight:600; color:var(--primary); }
.op-years-grid{ display:flex; flex-wrap:wrap; gap:8px; }
.op-year-input{
  background:#FBF9F3; border:1px solid var(--border); border-radius:var(--radius);
  padding:8px 10px; text-align:center; min-width:74px;
}
.op-year-input label{ display:block; font-size:10px; letter-spacing:.06em; text-transform:uppercase; color:var(--text-muted); font-weight:600; margin-bottom:4px; }
.op-year-input input{ width:46px; text-align:center; border:1px solid var(--border); border-radius:4px; padding:3px; font:inherit; font-weight:600; color:var(--primary); }
.op-year-input input:focus{ outline:none; border-color:var(--accent); box-shadow:0 0 0 3px rgba(148,118,47,.14); }
.op-sum{ font-size:11.5px; font-weight:700; padding:2px 8px; border-radius:20px; }
.op-sum.ok{ background:#E7F0EA; color:var(--success); }
.op-sum.warn{ background:#F6E3E0; color:var(--danger); }

/* (3) HISTORIAL — clean hairline list */
.historial-card{ background:var(--bg-card); border:1px solid var(--border); border-radius:var(--radius); box-shadow:var(--shadow-sm); }
.historial-card .hc-head h3{ font-family:'Newsreader',Georgia,serif; font-weight:500; color:var(--primary); }
.hl-entry{ border-bottom:1px solid var(--border); padding:12px 0; }
.hl-entry:last-child{ border-bottom:0; }
.hl-pill{ font-size:10.5px; letter-spacing:.06em; text-transform:uppercase; font-weight:700; padding:3px 9px; border-radius:20px; }
.hl-meta{ color:var(--text-muted); font-size:11.5px; }

@media (max-width:680px){
  .detail-header-actions{ position:static; margin-bottom:14px; flex-wrap:wrap; }
  .detail-header h1{ font-size:24px; }
  .strategic-grid,.price-stack,.op-kpis,.op-inputs-grid{ grid-template-columns:1fr; }
}

/* =========================================================
   LOGIN — split screen (navy brand · warm form)
   ========================================================= */
.login-overlay{ background:var(--bg); padding:0; }      /* halves carry the color */
.login-split{ display:grid; grid-template-columns:1.05fr 1fr; width:100%; height:100%; }
.login-brandside{
  background:var(--primary); color:#fff; padding:54px 56px;
  display:flex; flex-direction:column; justify-content:space-between; gap:40px;
}
.login-wordmark{
  font-family:'Newsreader',Georgia,serif; font-weight:500;
  letter-spacing:.22em; font-size:26px; color:#fff;
}
.login-brand-overline{
  font-size:10.5px; letter-spacing:.18em; text-transform:uppercase;
  color:var(--accent-light); font-weight:600; margin-top:8px;
}
.login-brand-mid{ max-width:440px; }
.login-brand-headline{
  font-family:'Newsreader',Georgia,serif; font-weight:500; letter-spacing:-.01em;
  font-size:34px; line-height:1.15; color:#fff; margin:0;
}
.login-brand-sub{ font-size:14px; color:rgba(255,255,255,.7); margin-top:14px; line-height:1.55; }
.login-pillars{ display:flex; gap:0; flex-wrap:wrap; }
.login-pillar{ padding-right:30px; }
.login-pillar + .login-pillar{ padding-left:30px; border-left:1px solid rgba(255,255,255,.16); }
.lp-word{ font-family:'Newsreader',Georgia,serif; font-weight:500; font-size:19px; color:#fff; }
.lp-label{
  font-size:9.5px; letter-spacing:.13em; text-transform:uppercase;
  color:var(--accent-light); font-weight:600; margin-top:4px;
}
.login-formside{
  background:var(--bg); display:flex; align-items:center; justify-content:center; padding:40px 24px;
}
.login-formside .login-card{ box-shadow:var(--shadow-lg); max-width:400px; }
.login-field input:focus{ border-color:var(--accent); box-shadow:0 0 0 3px rgba(148,118,47,.14); }
@media (max-width:860px){
  .login-split{ grid-template-columns:1fr; }
  .login-brandside{ display:none; }
}
/* phones — stack: compact navy band on top, full-width form below */
@media (max-width:768px){
  .login-overlay{ overflow-x:hidden; }
  .login-split{
    display:grid; grid-template-columns:1fr; grid-template-rows:auto 1fr;
    height:100%; max-width:100%;
  }
  .login-brandside{
    display:flex; flex-direction:column; justify-content:center; gap:8px;
    padding:28px 24px max(28px, env(safe-area-inset-top));
  }
  .login-wordmark{ font-size:21px; }
  .login-brand-overline{ margin-top:4px; }
  .login-brand-mid{ max-width:none; }
  .login-brand-headline{ font-size:26px; line-height:1.18; }
  .login-brand-sub{ display:none; }   /* hide long paragraph on phones */
  .login-pillars{ display:none; }     /* hide the 3 pillars on phones */
  .login-formside{
    background:var(--bg); display:flex; align-items:center; justify-content:center;
    padding:24px; overflow-y:auto;
  }
  .login-formside .login-card{
    max-width:none; width:100%; padding:28px 22px; box-shadow:var(--shadow-md);
  }
  /* finger-friendly, and 16px prevents iOS zoom-on-focus */
  .login-field input{ min-height:44px; font-size:16px; }
  .login-submit{ min-height:46px; font-size:15px; }
}

/* =========================================================
   USUARIOS — header, role hint, avatars
   ========================================================= */
.users-overline{
  font-size:10.5px; letter-spacing:.16em; text-transform:uppercase;
  color:var(--accent); font-weight:600; margin-bottom:4px;
}
.users-header h2{
  font-family:'Newsreader',Georgia,serif; font-weight:500; letter-spacing:-.015em;
  font-size:26px; color:var(--primary);
}
.users-role-hint{ font-size:12px; color:var(--text-muted); margin-top:10px; }
.user-row-avatar.viewer{ background:linear-gradient(135deg,#3A6491,#4d7aab); }
.user-row-avatar.restricted_viewer{ background:linear-gradient(135deg,#8C97A2,#a3adb6); }

/* HISTORIAL — serif heading (pills + hairline rows already styled) */
.historial-view .hv-head h2{
  font-family:'Newsreader',Georgia,serif; font-weight:500; color:var(--primary);
}

/* =========================================================
   RESUMEN EJECUTIVO — one-pager "private bank" restyle
   ========================================================= */
.rep-overline{
  font-size:10px; letter-spacing:.14em; text-transform:uppercase;
  color:var(--accent); font-weight:600; margin-bottom:4px;
}
.rep-overline.sm{ margin-top:6px; }
.rep-card{ margin-bottom:18px; }
.rep-card h2{
  font-family:'Newsreader',Georgia,serif; font-weight:500; letter-spacing:-.01em;
  font-size:18px; color:var(--primary); margin:0 0 14px; padding:0; border:0;
}

/* (1) header — band with a 2px navy rule */
.rep-header{
  display:flex; align-items:center; gap:18px;
  border-bottom:2px solid var(--primary); padding-bottom:18px; margin-bottom:20px;
}
.rep-brand{
  color:var(--accent); letter-spacing:.16em; font-size:10.5px;
  font-weight:700; text-transform:uppercase;
}
.rep-title h1{
  font-family:'Newsreader',Georgia,serif; font-weight:500; letter-spacing:-.015em;
  font-size:30px; color:var(--primary); margin:2px 0;
}
.rep-subtitle{ color:var(--text-muted); font-size:12.5px; }
.btn-print{
  margin-left:auto; background:#fff; color:var(--primary);
  border:1px solid var(--border); border-radius:var(--radius);
  padding:9px 16px; font-weight:600; font-size:13px; cursor:pointer;
}
.btn-print:hover{ background:var(--bg); border-color:var(--accent); color:var(--primary); }

/* (2) KPI strip — 3px left hairline accent */
.rep-kpi{
  border-radius:var(--radius); border:1px solid var(--border);
  border-left-width:3px; border-left-color:var(--accent);
  box-shadow:var(--shadow-sm); padding:14px 16px;
}
.rep-kpi.ok, .rep-kpi.danger, .rep-kpi.gold{ border-top-color:var(--border); }
.rep-kpis .rep-kpi:nth-child(1){ border-left-color:var(--primary); }
.rep-kpis .rep-kpi:nth-child(2){ border-left-color:var(--accent); }
.rep-kpis .rep-kpi:nth-child(4){ border-left-color:var(--primary); }
.rep-kpi.danger{ border-left-color:var(--danger); }
.rep-kpi.danger .rk-value{ color:var(--danger); }
.rep-kpi.gold{ border-left-color:var(--accent); }
.rep-kpi.gold .rk-value{ color:var(--accent); }
.rk-label{ font-size:10px; letter-spacing:.09em; text-transform:uppercase; color:var(--text-muted); font-weight:600; }
.rk-value{ font-weight:700; color:var(--primary); font-variant-numeric:tabular-nums; }
.rk-sub{ font-size:11.5px; color:var(--text-muted); }
.rk-sub-pos{ color:var(--success); font-weight:600; }

/* (3) chart legend — green/gold dots, navy, red net line */
.rep-chart-legend .cl-dot.cf-rent{ background:#5E8268; }
.rep-chart-legend .cl-dot.cf-sales{ background:#B49154; }
.rep-chart-legend .cl-dot.cf-urb{ background:#33485B; }
.rep-chart-legend .cl-line{ display:inline-block; width:16px; height:0; border-top:2px solid #A6443A; vertical-align:middle; }

/* (4) cobranza table + mini list */
.rep-table thead th{
  background:var(--bg); font-size:10px; letter-spacing:.07em; text-transform:uppercase;
  color:var(--text-muted); font-weight:600;
}
.rep-table tbody td{ font-variant-numeric:tabular-nums; }
.rep-table tr.late-warn, .rep-table tr.late-bad{ background:transparent; }
.rep-days-late{ color:var(--danger); font-weight:700; }
.rep-mini{ margin-top:14px; padding-top:12px; border-top:1px solid var(--border); }
.rep-mini .rep-list li{ font-size:12.5px; }

/* (4) avance — full-width block: (name + pill) / timeline / years */
.rep-projects-list > .rep-project-row{
  display:block !important;              /* cancel the old 3-col grid for good */
  grid-template-columns:none !important;
  width:100%;
  padding:14px 0; border-bottom:1px solid var(--border); font-size:13px;
}
.rep-projects-list > .rep-project-row:last-child{ border-bottom:0; }
.rep-proj-head{
  display:flex; align-items:center; justify-content:space-between;
  gap:12px; margin-bottom:0; min-width:0; width:100%;
}
.rep-proj-name{
  flex:1 1 auto; min-width:0; white-space:nowrap; overflow:hidden; text-overflow:ellipsis;
  font-weight:600; color:var(--primary); font-size:13.5px;
}
.rep-proj-head .pill{ flex:0 0 auto; white-space:nowrap; }

/* progress timeline: start year ──●── entrega year */
.rep-timeline{ display:block; width:100%; margin-top:22px; }
.rep-tl-track{
  position:relative; display:block; width:100%; height:6px; border-radius:3px;
  background:#EDE7D8;                /* warm gray track */
}
.rep-tl-fill{
  position:relative; height:100%; min-width:3px; border-radius:3px;
  background:var(--accent-light);
}
/* color-coded by progress */
.rep-tl-fill.low{  background:#A6443A; }                 /* < 33%  terracotta */
.rep-tl-fill.mid{  background:var(--accent-light); }     /* 33–66% gold */
.rep-tl-fill.high{ background:#5E8268; }                 /* > 66%  green */
.rep-tl-marker{
  position:absolute; right:-5px; top:50%; transform:translateY(-50%);
  width:11px; height:11px; border-radius:50%;
  background:inherit; border:2px solid #fff; box-shadow:0 1px 3px rgba(27,42,56,.25);
}
.rep-tl-pct{
  position:absolute; right:-9px; bottom:12px;
  font-size:10.5px; font-weight:700; color:var(--primary);
  font-variant-numeric:tabular-nums;
}
.rep-tl-years{
  display:flex; justify-content:space-between; width:100%; margin-top:9px;
  font-size:10px; color:var(--text-muted); font-variant-numeric:tabular-nums;
}
.rep-tl-start{ text-align:left; }
.rep-tl-end{ text-align:right; }

/* (5) alerts — severity dot + text on hairline rows */
.rep-alerts li.rep-alert{
  display:flex; align-items:flex-start; gap:10px; padding:10px 0;
  border-bottom:1px solid var(--border); font-size:13px; color:var(--text);
}
.rep-alerts li.rep-alert:last-child{ border-bottom:0; }
.rep-sev{ width:9px; height:9px; border-radius:50%; margin-top:4px; flex:0 0 auto; }
.rep-sev-ok{ background:var(--success); }
.rep-sev-info{ background:var(--accent); }
.rep-sev-warn{ background:var(--danger); }

/* =========================================================
   COMERCIAL / LEASES — "private bank" restyle
   ========================================================= */
/* (1) header */
.lease-head{ margin-bottom:18px; }
.lease-overline{
  font-size:10.5px; letter-spacing:.16em; text-transform:uppercase;
  color:var(--accent); font-weight:600; margin-bottom:4px;
}
.lease-head h1{
  font-family:'Newsreader',Georgia,serif; font-weight:500; letter-spacing:-.015em;
  font-size:28px; color:var(--primary); margin:0 0 2px;
}
.lease-head p{ font-size:13.5px; color:var(--text-muted); margin:0; }

/* (2) KPI hairline accents */
#lease-kpis .kpi-card:nth-child(1)::before{ background:var(--primary); }
#lease-kpis .kpi-card:nth-child(2)::before{ background:var(--success); }
#lease-kpis .kpi-card:nth-child(3)::before{ background:var(--accent); }
#lease-kpis .kpi-card:nth-child(3) .kpi-value{ color:var(--accent); }
#lease-kpis .kpi-card:nth-child(4)::before{ background:var(--info); }
#lease-kpis .kpi-card.danger::before{ background:var(--danger); }
#lease-kpis .kpi-card.danger .kpi-value{ color:var(--danger); }

/* strip the warm wrapper so the inner cards read as clean white cards */
#portfolio-valuation.valuation-panel{
  background:transparent; border:0; box-shadow:none; padding:0; margin:0 0 6px;
}

/* (3) compact aerial banner — cap the image into a clean strip; the clickable
   SVG overlay only shows in master edit mode (cards carry navigation otherwise) */
.plazas-overview:not(.editing-boundaries) .plaza-aerial-wrap{ background:#FBF9F3; }
.plazas-overview:not(.editing-boundaries) .plaza-aerial-img{
  height:390px; object-fit:contain; object-position:50% 50%;
}
.plazas-overview:not(.editing-boundaries) .plaza-aerial-svg{ display:none !important; }
.plazas-header h2{
  font-family:'Newsreader',Georgia,serif; font-weight:500; font-size:18px; color:var(--primary);
}

/* plaza cards */
.plaza-card{ box-shadow:var(--shadow-sm); }
.plaza-card-name h3{
  font-family:'Newsreader',Georgia,serif; font-weight:500; font-size:18px; color:var(--primary);
}
.plaza-card-status{
  font-size:10px; letter-spacing:.06em; text-transform:uppercase; font-weight:700;
  padding:3px 9px; border-radius:20px;
}
.plaza-card-status.op{ background:#E7F0EA; color:var(--success); }
.plaza-card-status.pre{ background:#E4ECF4; color:var(--info); }
.pcs-label{ font-size:11px; letter-spacing:.02em; }
.pcs-row.primary:last-child .pcs-value{ color:var(--accent); }
.plaza-card-btn{ background:var(--primary); border-radius:var(--radius); }
.plaza-card-btn:hover{ background:var(--primary-light); }

/* valuation card — light serif figures, gold asset value */
.lease-valuation-card .lvc-header h2{
  font-family:'Newsreader',Georgia,serif; font-weight:500; font-size:17px;
}
.lvc-label{ font-size:10.5px; letter-spacing:.08em; text-transform:uppercase; }
.lvc-value{ font-family:'Newsreader',Georgia,serif; font-weight:500; color:var(--primary); }
.lvc-asset-band{ background:#FBF9F3; border:1px solid var(--border); border-radius:var(--radius); }
.lvc-asset-label{ font-size:10.5px; letter-spacing:.08em; text-transform:uppercase; color:var(--text-muted); }
.lvc-asset-val{ font-family:'Newsreader',Georgia,serif; font-weight:500; color:var(--accent); }

/* (4) tabs + tenant table */
.leases-summary{
  font-size:11px; letter-spacing:.03em; color:var(--text-muted); font-weight:600;
  padding:12px 16px; border-bottom:1px solid var(--border);
}
.lease-table-scroll{ max-height:560px; overflow:auto; }
.sortable-table thead th{
  position:sticky; top:0; z-index:1; background:var(--bg);
  font-size:10.5px; letter-spacing:.06em; text-transform:uppercase; color:var(--text-muted);
}
.sortable-table tbody td{ font-variant-numeric:tabular-nums; }
.lease-vence-near{ color:var(--danger); font-weight:700; }

/* =========================================================
   RESUMEN P&G — portfolio table "private bank" restyle
   ========================================================= */
.resumen-header{ margin-bottom:20px; }
.resumen-overline{
  font-size:10.5px; letter-spacing:.16em; text-transform:uppercase;
  color:var(--accent); font-weight:600; margin-bottom:4px;
}
.resumen-header h1{ font-size:28px; letter-spacing:-.015em; }
.resumen-header p{ font-size:13.5px; color:var(--text-muted); }

/* KPI hairline accents */
.resumen-kpis .kpi-card:nth-child(1)::before{ background:var(--primary); }
.resumen-kpis .kpi-card:nth-child(3)::before{ background:var(--info); }
.resumen-kpis .resumen-kpi-gold::before{ background:var(--accent); }
.resumen-kpis .resumen-kpi-gold .kpi-value{ color:var(--accent); }

/* Total Batan column — gold */
.resumen-table th.col-total,
.resumen-table td.col-total{ color:var(--accent); }
.resumen-table td.col-total strong{ color:var(--accent); }

/* cohort group bands — faint tint of the cohort color */
.resumen-table tr.cohort-band td{
  background:color-mix(in srgb, var(--c) 9%, #fff);
  border-top:1px solid var(--border); border-bottom:1px solid var(--border);
  padding:9px 12px;
}
.cohort-band-dot{ display:inline-block; width:9px; height:9px; border-radius:50%; margin-right:9px; vertical-align:middle; }
.cohort-band-name{ font-weight:700; color:var(--primary); text-transform:uppercase; letter-spacing:.06em; font-size:11px; }
.cohort-band-count{ color:var(--text-muted); font-size:11px; margin-left:8px; }
.cohort-band-sub{ color:var(--accent); font-weight:700; }

/* dark totals row — grand total in gold serif */
.resumen-table tfoot .totals-row td.grand-total{
  font-family:'Newsreader',Georgia,serif; font-weight:500;
  color:var(--accent-light); font-size:19px;
}

/* tipo pill — soft */
.pill-tipo{ font-weight:600; }

/* =========================================================
   INVENTARIO — lots screen "private bank" restyle
   ========================================================= */
/* (1) header */
.inv-overline{
  font-size:10.5px; letter-spacing:.16em; text-transform:uppercase;
  color:var(--accent); font-weight:600; margin-bottom:4px;
}
.inv-head h2{
  font-family:'Newsreader',Georgia,serif; font-weight:500; letter-spacing:-.015em;
  font-size:28px; color:var(--primary);
}
.inv-sub{ font-size:13.5px; }

/* (2) KPI strip — 3px left hairline per card */
.inv-kpis{ display:grid; grid-template-columns:repeat(5,1fr); gap:12px; }
.inv-kpis .kpi-card{ box-shadow:var(--shadow-sm); }
.inv-kpis .kpi-card::before{ width:3px; }
.inv-kpis .kpi-card:nth-child(1)::before{ background:var(--primary); }
.inv-kpis .kpi-card:nth-child(2)::before{ background:#5E8268; }
.inv-kpis .kpi-card:nth-child(3)::before{ background:#B49154; }
.inv-kpis .kpi-card:nth-child(4)::before{ background:#8C97A2; }
.inv-kpis .inv-kpi-gold::before{ background:var(--accent); }
.inv-kpis .inv-kpi-gold .kpi-value{ color:var(--accent); }
@media (max-width:900px){ .inv-kpis{ grid-template-columns:repeat(2,1fr); } }

/* (3) toolbar */
.inv-filters{ padding:14px 16px; }
.inv-search{ border:1px solid var(--border); border-radius:var(--radius); padding:9px 12px; }
.inv-search:focus{ border-color:var(--accent); box-shadow:0 0 0 3px rgba(148,118,47,.14); }
.inv-project-select{ border:1px solid var(--border); border-radius:var(--radius); padding:9px 12px; }
.inv-project-select:focus{ outline:none; border-color:var(--accent); box-shadow:0 0 0 3px rgba(148,118,47,.14); }
.inv-chip{
  display:inline-flex; align-items:center; gap:7px; padding:6px 12px;
  border:1px solid var(--border); border-radius:20px; background:#fff;
  font-size:12px; font-weight:600; color:var(--text-muted); cursor:pointer; opacity:1;
}
.inv-chip.active{ background:var(--lot-c); border-color:var(--lot-c); color:#fff; }
.inv-chip.active .inv-chip-dot{ background:#fff; }
.inv-view-toggle{ border-radius:var(--radius); border-color:var(--border); }
.inv-vt-btn{ font-size:12.5px; letter-spacing:.02em; }

/* (4) table */
.inv-table-wrap{ max-height:560px; overflow-y:auto; }
.inv-table thead th{
  background:var(--bg); position:sticky; top:0; z-index:1;
  font-size:10.5px; letter-spacing:.08em; text-transform:uppercase;
  color:var(--text-muted); font-weight:600; padding:11px 16px;
  border-bottom:1px solid var(--border);
}
.inv-table tbody td{ font-variant-numeric:tabular-nums; }
.inv-table .inv-client{ color:var(--text-muted); }
.inv-row:hover td{ background:var(--bg); }

/* soft status pill (tinted, not solid) */
.lot-pill{
  background:color-mix(in srgb, var(--lot-c) 15%, #fff);
  color:var(--lot-c); font-weight:700; font-size:10.5px;
  letter-spacing:.03em; padding:4px 10px;
}

/* (5) map tiles — keep the muted status tints; tidy block labels */
.lot-block{ background:#FBF9F3; }
.lot-block-label{ font-size:10.5px; letter-spacing:.08em; text-transform:uppercase; color:var(--text-muted); font-weight:600; }

/* (6) ficha drawer */
.lot-drawer-panel{ border-radius:0; }
.lot-drawer-head{ background:var(--primary); }
.lot-drawer-eyebrow{
  font-size:10.5px; letter-spacing:.14em; text-transform:uppercase;
  color:var(--accent-light); opacity:1;
}
.lot-drawer-head h2{
  font-family:'Newsreader',Georgia,serif; font-weight:500; font-size:25px; letter-spacing:-.01em;
}
.lot-spec span{ font-size:10px; letter-spacing:.08em; }
.lot-terms{
  background:#FBF9F3; border:1px solid var(--border); border-radius:var(--radius);
  padding:14px 16px;
}
.lot-terms h4{ margin-top:0; }
/* dark full-width PDF button (override .btn.accent gold) */
.lot-drawer-body .lot-pdf-btn{ background:var(--primary); color:#fff; }
.lot-drawer-body .lot-pdf-btn:hover{ background:var(--primary-light); }

/* ---- Sensibilidad: full-width single column, no left void ---- */
.sens-layout{ display:flex; flex-direction:column; gap:16px; }
/* row 1: anchor + result cards side by side, equal height */
.sens-top{ display:grid; grid-template-columns:1fr 1fr; gap:16px; align-items:stretch; }
.sens-top > .sens-card-anchor,
.sens-top > .sens-card-stress{ height:100%; display:flex; flex-direction:column; }
/* center the anchor figures so the short card fills its height cleanly */
.sens-card-anchor .sens-anchor-stats{ flex:1; justify-content:center; }
/* row 2: sliders full width in a 2×2 grid */
.sens-sliders-block{
  background:#FBF9F3; border:1px solid var(--border); border-radius:var(--radius); padding:14px;
}
.sens-sliders-block .sens-sliders{
  display:grid; grid-template-columns:1fr 1fr; gap:16px 24px; margin-bottom:0;
}
@media (max-width:720px){
  .sens-top{ grid-template-columns:1fr; }
  .sens-sliders-block .sens-sliders{ grid-template-columns:1fr; }
}
