/* ============ TPO Siniestros Viales CABA — App ============ */
*{margin:0;padding:0;box-sizing:border-box}
:root{
  --paper:#F4F0E8; --paper-2:#EDE7DA; --paper-3:#E5DDCC;
  --ink:#1C1813; --ink-2:#3A332A;
  --severe:#C0391F; --severe-br:#E05334;
  --slate:#3E5A66; --slate-br:#5E8294;
  --amber:#C28A2C; --green:#4E7A52;
  --mute:#6E6456; --mute-2:#8A7F6E; --hair:#D7CFBF; --hair-2:#C8BFAC;
  --card:#FBF9F4; --card-line:#E2DACA;
  --shadow:0 18px 50px -28px rgba(28,24,19,.45);
  --shadow-sm:0 6px 20px -14px rgba(28,24,19,.5);

  --ff-serif:'Newsreader',Georgia,serif;
  --ff-sans:'Archivo',system-ui,sans-serif;
  --ff-mono:'IBM Plex Mono',ui-monospace,monospace;
  --ease:cubic-bezier(.22,1,.36,1);
  --rail-w:264px;
}
[data-theme="dark"]{
  --paper:#1A1611; --paper-2:#211C16; --paper-3:#2A241C;
  --ink:#F1EADB; --ink-2:#C6BCA9;
  --severe:#E05334; --severe-br:#F0714F;
  --slate:#6E94A6; --slate-br:#8FB0C0;
  --amber:#D6A24A; --green:#6E9E72;
  --mute:#A89D8C; --mute-2:#857A69; --hair:#37302610; --hair:#3A332A; --hair-2:#473F33;
  --card:#211C16; --card-line:#352E25;
  --shadow:0 24px 60px -28px rgba(0,0,0,.7);
  --shadow-sm:0 8px 24px -16px rgba(0,0,0,.7);
}
html,body{height:100%}
body{
  font-family:var(--ff-sans); background:var(--paper); color:var(--ink);
  -webkit-font-smoothing:antialiased; text-rendering:optimizeLegibility;
  font-variant-numeric:tabular-nums; overflow:hidden;
}
::selection{background:var(--severe);color:#fff}
.mono{font-family:var(--ff-mono)}
.serif{font-family:var(--ff-serif)}
strong{font-weight:600}
em{font-style:italic}

/* ============ App shell ============ */
#app{display:flex; height:100vh; transition:background .4s var(--ease)}

/* ---- left rail ---- */
.rail{
  width:var(--rail-w); flex:none; height:100vh; background:var(--paper-2);
  border-right:1px solid var(--hair); display:flex; flex-direction:column;
  padding:28px 0 18px; transition:background .4s var(--ease),border-color .4s var(--ease);
  z-index:5;
}
.brand{padding:0 26px 22px; border-bottom:1px solid var(--hair); margin-bottom:14px}
.brand .kicker{font-family:var(--ff-mono); font-size:11px; letter-spacing:.22em; text-transform:uppercase; color:var(--severe); font-weight:600; margin-bottom:9px}
.brand h1{font-family:var(--ff-serif); font-weight:500; font-size:23px; line-height:1.12; letter-spacing:-.01em; color:var(--ink)}
.brand .sub{font-family:var(--ff-mono); font-size:11.5px; color:var(--mute); margin-top:8px; letter-spacing:.02em}

.nav{display:flex; flex-direction:column; gap:2px; padding:8px 14px; flex:1}
.nav-item{
  display:flex; align-items:center; gap:13px; padding:11px 14px; border-radius:8px;
  cursor:pointer; color:var(--mute); font-size:14.5px; font-weight:500; letter-spacing:.005em;
  border:1px solid transparent; transition:all .18s var(--ease); position:relative; text-align:left;
  background:none; width:100%; font-family:inherit;
}
.nav-item .ix{font-family:var(--ff-mono); font-size:11px; color:var(--mute-2); width:16px; transition:color .18s}
.nav-item:hover{background:var(--paper-3); color:var(--ink)}
.nav-item.active{background:var(--card); color:var(--ink); border-color:var(--card-line); box-shadow:var(--shadow-sm)}
.nav-item.active .ix{color:var(--severe)}
.nav-item .dotmark{width:7px;height:7px;border-radius:50%;background:var(--severe);position:absolute;right:13px;opacity:0;transition:opacity .2s}
.nav-item.active .dotmark{opacity:1}

.rail-foot{padding:14px 26px 0; border-top:1px solid var(--hair); font-family:var(--ff-mono); font-size:10.5px; color:var(--mute-2); line-height:1.7; letter-spacing:.02em}
.rail-foot b{color:var(--mute); font-weight:600}

/* ---- main ---- */
.main{flex:1; height:100vh; overflow-y:auto; overflow-x:hidden; position:relative; scroll-behavior:smooth}
.main::-webkit-scrollbar{width:11px}
.main::-webkit-scrollbar-thumb{background:var(--hair-2); border-radius:6px; border:3px solid var(--paper)}
.view{padding:46px 56px 80px; max-width:1240px; margin:0 auto; min-height:100%}
.view.wide{max-width:1500px}

/* ---- page head ---- */
.eyebrow{display:flex; align-items:center; gap:14px; font-family:var(--ff-mono); font-size:12px;
  letter-spacing:.2em; text-transform:uppercase; color:var(--mute); margin-bottom:16px}
.eyebrow .num{color:var(--severe); font-weight:600}
.eyebrow .line{flex:1; height:1px; background:var(--hair); max-width:120px}
.page-title{font-family:var(--ff-serif); font-weight:500; font-size:40px; line-height:1.06; letter-spacing:-.018em; color:var(--ink); max-width:24ch; text-wrap:balance}
.page-title em{font-style:italic; color:var(--severe)}
.page-lead{font-family:var(--ff-serif); font-size:20px; line-height:1.45; color:var(--ink-2); max-width:62ch; margin-top:16px; text-wrap:pretty; font-weight:400}
.page-head{margin-bottom:34px; animation:rise .6s var(--ease) both}

/* ============ cards ============ */
.card{background:var(--card); border:1px solid var(--card-line); border-radius:13px; padding:22px 24px; box-shadow:var(--shadow-sm); transition:background .4s var(--ease),border-color .4s var(--ease)}
.card.flush{padding:0; overflow:hidden}
.card-h{display:flex; justify-content:space-between; align-items:baseline; gap:16px; margin-bottom:18px}
.card-h h3{font-family:var(--ff-sans); font-weight:600; font-size:15px; letter-spacing:.005em; color:var(--ink)}
.card-h .cap{font-family:var(--ff-mono); font-size:11px; letter-spacing:.06em; color:var(--mute); text-transform:uppercase}
.card-note{font-family:var(--ff-mono); font-size:11.5px; line-height:1.55; color:var(--mute); margin-top:14px; padding-top:13px; border-top:1px solid var(--hair)}
.grid{display:grid; gap:20px}
.g2{grid-template-columns:1fr 1fr} .g3{grid-template-columns:repeat(3,1fr)} .g4{grid-template-columns:repeat(4,1fr)}
.g-2-1{grid-template-columns:2fr 1fr} .g-1-2{grid-template-columns:1fr 2fr}
@media(max-width:1100px){.g2,.g3,.g4,.g-2-1,.g-1-2{grid-template-columns:1fr}}

/* ============ stat blocks ============ */
.statrow{display:grid; grid-template-columns:repeat(4,1fr); gap:0; border:1px solid var(--card-line); border-radius:13px; overflow:hidden; background:var(--card)}
.statcell{padding:22px 24px; border-right:1px solid var(--hair)}
.statcell:last-child{border-right:none}
.stat-num{font-family:var(--ff-serif); font-weight:500; font-size:46px; line-height:.95; letter-spacing:-.02em; color:var(--ink); display:flex; align-items:baseline; gap:4px}
.stat-num .u{font-size:22px; color:var(--mute); font-weight:500}
.stat-num.sev{color:var(--severe)}
.stat-lab{font-family:var(--ff-mono); font-size:11px; letter-spacing:.1em; text-transform:uppercase; color:var(--mute); margin-top:10px}
.stat-sub{font-size:12.5px; color:var(--mute-2); margin-top:5px; line-height:1.4}

/* ============ chart bits ============ */
.axis-lab{font-family:var(--ff-mono); font-size:11px; fill:var(--mute); letter-spacing:.03em}
.grid-line{stroke:var(--hair); stroke-width:1}
.val-lab{font-family:var(--ff-mono); font-size:11.5px; fill:var(--ink); font-weight:500}
.bar-rect{transition:opacity .15s}
.legend{display:flex; gap:18px; flex-wrap:wrap; align-items:center}
.legend .lg{display:flex; align-items:center; gap:7px; font-family:var(--ff-mono); font-size:11.5px; color:var(--mute); letter-spacing:.02em}
.legend .sw{width:11px; height:11px; border-radius:3px; flex:none}
.swatch-line{width:16px; height:3px; border-radius:2px}

/* ============ chips / segmented ============ */
.chips{display:flex; gap:8px; flex-wrap:wrap}
.chip{font-family:var(--ff-mono); font-size:12px; letter-spacing:.03em; padding:7px 13px; border-radius:20px;
  border:1px solid var(--hair-2); color:var(--mute); cursor:pointer; background:var(--card); transition:all .16s var(--ease); user-select:none; white-space:nowrap}
.chip:hover{border-color:var(--mute-2); color:var(--ink)}
.chip.on{background:var(--ink); color:var(--paper); border-color:var(--ink)}
.chip.on.sev{background:var(--severe); border-color:var(--severe); color:#fff}
.seg{display:inline-flex; background:var(--paper-3); border-radius:9px; padding:3px; gap:2px; border:1px solid var(--hair)}
.seg button{font-family:var(--ff-sans); font-size:13px; font-weight:500; padding:7px 16px; border-radius:7px; border:none; background:none; color:var(--mute); cursor:pointer; transition:all .16s var(--ease)}
.seg button.on{background:var(--card); color:var(--ink); box-shadow:var(--shadow-sm)}

.field-lab{font-family:var(--ff-mono); font-size:11px; letter-spacing:.1em; text-transform:uppercase; color:var(--mute); margin-bottom:10px; display:block}

/* ============ tags ============ */
.tag{display:inline-flex; align-items:center; gap:7px; font-family:var(--ff-mono); font-size:11px;
  letter-spacing:.05em; text-transform:uppercase; padding:5px 11px; border-radius:5px; border:1px solid var(--hair-2); color:var(--mute)}
.dot{width:9px;height:9px;border-radius:50%;flex:none}
.badge{display:inline-flex; align-items:center; gap:6px; font-family:var(--ff-mono); font-size:10.5px; font-weight:600; letter-spacing:.08em; text-transform:uppercase; padding:4px 9px; border-radius:5px}
.badge.sev{background:color-mix(in srgb,var(--severe) 14%,transparent); color:var(--severe)}
.badge.leve{background:color-mix(in srgb,var(--green) 16%,transparent); color:var(--green)}

/* ============ table ============ */
table.tbl{width:100%; border-collapse:collapse; font-variant-numeric:tabular-nums}
table.tbl th{font-family:var(--ff-mono); font-size:10.5px; letter-spacing:.1em; text-transform:uppercase; color:var(--mute); font-weight:500; text-align:right; padding:0 14px 13px; border-bottom:1.5px solid var(--ink)}
table.tbl th:first-child{text-align:left}
table.tbl td{font-size:14.5px; padding:14px; border-bottom:1px solid var(--hair); text-align:right; color:var(--ink)}
table.tbl td:first-child{text-align:left; font-weight:500}
table.tbl td.m{font-family:var(--ff-mono); font-size:13.5px}
table.tbl tr.final td{background:color-mix(in srgb,var(--severe) 8%,transparent); font-weight:600; border-bottom:1.5px solid var(--severe)}
table.tbl tr.final td:first-child{box-shadow:inset 4px 0 0 var(--severe)}
table.tbl tbody tr{transition:background .14s}
table.tbl tbody tr:hover td{background:var(--paper-3)}
table.tbl tr.final:hover td{background:color-mix(in srgb,var(--severe) 12%,transparent)}

/* ============ animations ============
   Every entrance keyframe's FROM state keeps the content VISIBLE (no opacity:0,
   no scale-to-0). If the iframe is unfocused the animation clock freezes at 0%
   showing the FROM state — so it must never be blank. In a real painting view the
   animation completes normally. */
@keyframes rise{from{transform:translateY(14px)}to{transform:none}}
@keyframes chIn{from{transform:translateY(8px)}to{transform:none}}
@keyframes chCol{from{transform:scaleY(.5)}to{transform:scaleY(1)}}
@keyframes chGrowX{from{transform:scaleX(.84)}to{transform:scaleX(1)}}
@keyframes chPop{from{transform:scale(.96)}to{transform:none}}
@keyframes fade{from{opacity:.4}to{opacity:1}}
.ch-growx{transform-origin:left}
html.ready .reveal{animation:rise .55s var(--ease) both}
html.ready .view > *{animation:rise .5s var(--ease) both}
html.ready .view > *:nth-child(2){animation-delay:.04s}
html.ready .view > *:nth-child(3){animation-delay:.09s}
html.ready .view > *:nth-child(4){animation-delay:.14s}
html.ready .view > *:nth-child(5){animation-delay:.19s}
html.ready .view > *:nth-child(6){animation-delay:.24s}
@media(prefers-reduced-motion:reduce){*{animation:none!important; transition:none!important}}

/* chart entrance — FROM states stay visible (see note above) */
html.ready svg .ch-col{transform-box:fill-box; transform-origin:50% 100%; animation:chCol .6s var(--ease) both}
html.ready .ch-line{animation:chIn .7s var(--ease) both}
html.ready .ch-dot{animation:chIn .5s var(--ease) both}
html.ready .ch-growx{animation:chGrowX .7s var(--ease) both}
html.ready .ch-heat{animation:chPop .42s var(--ease) both}
html.ready .ch-pop{animation:chPop .6s var(--ease) both}

/* number count-up uses tabular nums already */
.kpi-inline{font-family:var(--ff-mono); font-weight:600; color:var(--severe)}

/* ============ map ============ */
#map,.leaflet-wrap{width:100%; height:560px; border-radius:13px; overflow:hidden; border:1px solid var(--card-line); background:var(--paper-3)}
.leaflet-container{font-family:var(--ff-sans)!important; background:var(--paper-3)}
.map-legend{font-family:var(--ff-mono)!important; background:var(--card)!important; color:var(--ink)!important; padding:11px 14px!important; border-radius:9px!important; box-shadow:var(--shadow-sm)!important; border:1px solid var(--card-line); font-size:11px; line-height:1.9; white-space:nowrap}
.map-legend > div{display:flex; align-items:center}
.map-legend i{width:13px;height:13px;display:inline-block;margin-right:8px;border-radius:3px;flex:none}
.leaflet-popup-content-wrapper{background:var(--card); color:var(--ink); border-radius:10px; box-shadow:var(--shadow)}
.leaflet-popup-tip{background:var(--card)}
.leaflet-popup-content{font-family:var(--ff-sans); margin:13px 15px}
.popup-t{font-family:var(--ff-mono); font-size:10.5px; letter-spacing:.08em; text-transform:uppercase; color:var(--mute)}
.popup-n{font-family:var(--ff-serif); font-size:26px; font-weight:500; margin:2px 0 4px}

/* ============ predictor ============ */
.gauge-wrap{display:flex; flex-direction:column; align-items:center; justify-content:center; gap:6px}
.gauge-num{font-family:var(--ff-serif); font-weight:500; font-size:72px; line-height:1; letter-spacing:-.02em}
.factor-row{display:flex; align-items:center; gap:14px; padding:12px 0; border-bottom:1px solid var(--hair)}
.factor-row:last-child{border-bottom:none}
.factor-name{font-size:13.5px; flex:1}
.factor-lift{font-family:var(--ff-mono); font-size:12.5px; font-weight:600; min-width:52px; text-align:right}
.factor-bar{height:8px; border-radius:4px; background:var(--paper-3); position:relative; overflow:hidden; width:120px; flex:none}
.factor-bar > span{position:absolute; left:50%; top:0; bottom:0; transition:width .5s var(--ease),transform .5s var(--ease)}

/* ============ misc ============ */
.divider{height:1px; background:var(--hair); margin:34px 0; border:none}
.note-box{font-family:var(--ff-mono); font-size:12px; line-height:1.6; color:var(--mute); border-left:2px solid var(--hair-2); padding:3px 0 3px 16px; max-width:64ch}
.note-box b{color:var(--ink-2)}
.pill-list{display:flex; flex-direction:column; gap:11px}
.hl{color:var(--severe); font-weight:600}
.hl-slate{color:var(--slate);font-weight:600} .hl-amber{color:var(--amber);font-weight:600} .hl-green{color:var(--green);font-weight:600}

/* tweaks panel host sizing safeguard */
.tweaks-host{font-family:var(--ff-sans)}
.tweaks-btn{display:flex;align-items:center;gap:7px;margin-top:12px;padding:7px 11px;width:100%;
  font-family:var(--ff-mono);font-size:10.5px;letter-spacing:.04em;color:var(--mute);
  background:var(--paper-3);border:1px solid var(--hair);border-radius:7px;cursor:pointer;
  transition:all .16s var(--ease)}
.tweaks-btn:hover{color:var(--ink);border-color:var(--hair-2);background:var(--card)}
.tweaks-btn span{color:var(--severe);font-size:12px}

/* density */
[data-density="cómodo"] .view{padding:60px 76px 100px}
[data-density="cómodo"] .card{padding:26px 28px}
[data-density="cómodo"] .grid{gap:26px}

/* animations off */
html.no-anim *{animation:none!important; transition:none!important}

select option{background:var(--card); color:var(--ink)}
input[type=range]{cursor:pointer}
input[type=checkbox]{cursor:pointer}
