:root {
  --ops-bg: #071018;
  --ops-panel: #0b1720;
  --ops-panel-2: #0e1c26;
  --ops-line: rgba(166,195,204,.14);
  --ops-line-2: rgba(166,195,204,.23);
  --ops-text: #e8f0f1;
  --ops-muted: #70858f;
  --ops-green: #65d6aa;
  --ops-blue: #45b7e7;
  --ops-amber: #f0a84f;
  --ops-red: #d9475f;
  --ops-violet: #9c8cff;
}

/* Producto canónico · estado calibrado de la red */
body.cam-platform .network-state-workspace{position:relative;min-width:0;min-height:0;height:100%;padding:16px 18px 34px;overflow-x:hidden;overflow-y:auto;overscroll-behavior:contain;scrollbar-width:thin;scrollbar-color:#29404b transparent;color:#d9e7e9;background:#06131c}
body.cam-platform .network-state-heading{margin-bottom:10px}
body.cam-platform .network-state-query{display:grid;grid-template-columns:minmax(150px,1.2fr) minmax(130px,.9fr) repeat(4,minmax(120px,.8fr)) minmax(170px,1fr);gap:7px;margin-bottom:10px;padding:8px;border:1px solid rgba(133,177,190,.13);border-radius:10px;background:#091923}
body.cam-platform .network-state-query label{display:flex;min-width:0;flex-direction:column;gap:5px;padding:7px 9px;border:1px solid rgba(133,177,190,.1);border-radius:7px;background:#07151e}
body.cam-platform .network-state-query label>span{color:#66818b;font-size:9px;font-weight:700;letter-spacing:.55px}
body.cam-platform .network-state-query :is(input,select){width:100%;min-width:0;border:0;outline:0;color:#dce9eb;background:transparent;font:500 12px Roboto,sans-serif}
body.cam-platform .network-state-query .congestion-run{min-height:50px}
body.cam-platform .network-state-truth{display:flex;align-items:center;gap:10px;margin-bottom:10px;padding:10px 13px;border:1px solid rgba(240,168,79,.22);border-radius:8px;color:#b9cbd0;background:rgba(240,168,79,.055);font-size:11px;line-height:1.45}
body.cam-platform .network-state-truth i{width:8px;height:8px;flex:0 0 auto;border-radius:50%;background:#f0a84f;box-shadow:0 0 0 5px rgba(240,168,79,.09)}
body.cam-platform .network-state-truth.calibrated{border-color:rgba(101,214,170,.24);background:rgba(101,214,170,.055)}
body.cam-platform .network-state-truth.calibrated i{background:#65d6aa;box-shadow:0 0 0 5px rgba(101,214,170,.09)}
body.cam-platform .network-state-kpis{grid-template-columns:repeat(6,minmax(112px,1fr));margin-bottom:10px}
body.cam-platform .network-state-stage{display:grid;grid-template-columns:minmax(0,1.65fr) minmax(270px,.72fr);gap:10px}
body.cam-platform .network-state-stage>article{min-width:0;overflow:hidden;border:1px solid rgba(135,178,190,.12);border-radius:10px;background:#091923;box-shadow:0 10px 24px rgba(0,0,0,.12)}
body.cam-platform .network-state-stage>article>header{display:flex;align-items:center;justify-content:space-between;gap:12px;min-height:54px;padding:10px 13px;border-bottom:1px solid rgba(135,178,190,.1)}
body.cam-platform .network-state-stage>article>header small{display:block;color:#58727c;font-size:8.5px;font-weight:700;letter-spacing:.65px}
body.cam-platform .network-state-stage>article>header h3{margin:3px 0 0;color:#dce9eb;font-size:13px;font-weight:600}
body.cam-platform .network-state-chart-card>header>div:last-child{display:flex;flex-wrap:wrap;gap:10px;color:#829ba3;font-size:9px}
body.cam-platform .network-state-chart-card>header>div:last-child span{display:flex;align-items:center;gap:5px}
body.cam-platform .network-state-chart-card>header i{width:16px;height:2px;background:#65d6aa}
body.cam-platform .network-state-chart-card>header i.volume{height:7px;background:rgba(240,168,79,.65)}
body.cam-platform .network-state-chart-card>header i.capacity{height:1px;background:repeating-linear-gradient(90deg,#7699e5 0 4px,transparent 4px 7px)}
body.cam-platform .network-state-chart-card>header i.reference{height:1px;background:repeating-linear-gradient(90deg,#9c8cff 0 4px,transparent 4px 7px)}
body.cam-platform .network-state-chart-card>div{position:relative;height:286px}
body.cam-platform #network-state-chart{width:100%;height:100%;display:block}
body.cam-platform .network-state-tooltip{z-index:5;min-width:230px;pointer-events:none}
body.cam-platform .network-state-strip-card>header>span,body.cam-platform .network-state-method-card>header>span{padding:5px 8px;border:1px solid rgba(101,214,170,.2);border-radius:999px;color:#73d9b4;background:rgba(101,214,170,.06);font-size:8px;font-weight:700;letter-spacing:.45px}
body.cam-platform #network-state-strip{display:flex;align-items:stretch;min-height:126px;padding:18px 12px 12px;overflow-x:auto}
body.cam-platform #network-state-strip button{position:relative;min-width:28px;flex:var(--state-width) 1 0;padding:9px 4px;border:0;border-right:1px solid rgba(6,19,28,.75);color:#dce9eb;background:#277b69;cursor:help}
body.cam-platform #network-state-strip button.warn{background:#9b7c2f}
body.cam-platform #network-state-strip button.bad{background:#9b3f4b}
body.cam-platform #network-state-strip button:hover{z-index:2;filter:brightness(1.2);transform:translateY(-2px)}
body.cam-platform #network-state-strip button span{position:absolute;left:4px;top:-13px;white-space:nowrap;color:#68818a;font-size:7px}
body.cam-platform #network-state-strip button b{display:block;font-size:12px}
body.cam-platform #network-state-strip button small{display:block;margin-top:4px;color:rgba(236,246,247,.7);font-size:7px}
body.cam-platform .network-state-strip-card>footer{display:flex;align-items:center;gap:11px;padding:9px 12px;border-top:1px solid rgba(135,178,190,.08);color:#6f8991;font-size:8px}
body.cam-platform .network-state-strip-card>footer span{display:flex;align-items:center;gap:4px}
body.cam-platform .network-state-strip-card>footer i{width:7px;height:7px;border-radius:2px;background:#277b69}
body.cam-platform .network-state-strip-card>footer i.warn{background:#9b7c2f}body.cam-platform .network-state-strip-card>footer i.bad{background:#9b3f4b}
body.cam-platform .network-state-strip-card>footer small{margin-left:auto}
body.cam-platform .network-state-table-card{grid-column:1/-1}
body.cam-platform .network-state-table-card>header button{padding:7px 12px;border:1px solid rgba(101,214,170,.25);border-radius:6px;color:#72d9b4;background:rgba(101,214,170,.06);font:700 9px Roboto;cursor:pointer}
body.cam-platform .network-state-table{max-height:410px;overflow:auto}
body.cam-platform .network-state-table-row{display:grid;grid-template-columns:minmax(190px,1.3fr) 100px 82px 94px 72px 90px 78px 60px 92px;align-items:center;gap:8px;min-width:1040px;padding:8px 12px;border-bottom:1px solid rgba(135,178,190,.07);color:#a9bcc1;font-size:9.5px}
body.cam-platform .network-state-table-row.head{position:sticky;z-index:2;top:0;color:#5f7a83;background:#081720;font-size:8px;font-weight:700;letter-spacing:.45px}
body.cam-platform .network-state-table-row>span:first-child strong,body.cam-platform .network-state-table-row>span:first-child small{display:block}
body.cam-platform .network-state-table-row>span:first-child strong{color:#bcd0d4;font-size:9px}body.cam-platform .network-state-table-row>span:first-child small{margin-top:2px;color:#617b84;font-size:8px}
body.cam-platform .network-state-table-row b{color:#d9e8e9;font-weight:600}
body.cam-platform .network-state-table-row em{justify-self:start;padding:4px 6px;border-radius:999px;color:#edb86d;background:rgba(240,168,79,.09);font-size:7.5px;font-style:normal;font-weight:700}
body.cam-platform .network-state-table-row em.calibrated{color:#70d8b3;background:rgba(101,214,170,.09)}
body.cam-platform .network-state-method-card ol{display:grid;gap:8px;margin:0;padding:12px;list-style:none}
body.cam-platform .network-state-method-card li{display:grid;grid-template-columns:28px 1fr;gap:8px;align-items:center;padding:8px;border:1px solid rgba(135,178,190,.08);border-radius:7px;background:#07151e}
body.cam-platform .network-state-method-card li b{display:grid;width:25px;height:25px;place-items:center;border-radius:6px;color:#65d6aa;background:rgba(101,214,170,.08);font-size:8px}
body.cam-platform .network-state-method-card li :is(strong,small){display:block}body.cam-platform .network-state-method-card li strong{color:#bcd0d4;font-size:10px}body.cam-platform .network-state-method-card li small{margin-top:2px;color:#607a83;font-size:8px}
body.cam-platform .network-state-method-card>p{margin:0;padding:10px 12px;border-top:1px solid rgba(135,178,190,.08);color:#758f97;font-size:9px;line-height:1.5}
body.cam-platform .network-state-dual-card>header>span{padding:5px 8px;border:1px solid rgba(240,168,79,.25);border-radius:999px;color:#efb96f;background:rgba(240,168,79,.07);font-size:8px;font-weight:800;letter-spacing:.45px}
body.cam-platform .network-state-dual-card>header>span.observed{color:#73d9b4;border-color:rgba(101,214,170,.26);background:rgba(101,214,170,.07)}
body.cam-platform .network-state-dual-card>header>span.no_evaluable{color:#8198a0;border-color:rgba(129,152,160,.2);background:rgba(129,152,160,.06)}
body.cam-platform #network-state-method-detail>p{margin:0;padding:18px;color:#6f8991;font-size:9px;line-height:1.5}
body.cam-platform #network-state-method-detail>header{display:flex;align-items:flex-start;justify-content:space-between;gap:10px;padding:11px 12px;border-bottom:1px solid rgba(135,178,190,.08)}
body.cam-platform #network-state-method-detail>header span>*{display:block}body.cam-platform #network-state-method-detail>header small{color:#58727c;font-size:7.5px;font-weight:800;letter-spacing:.5px}body.cam-platform #network-state-method-detail>header strong{margin-top:3px;color:#dce9eb;font-size:11px}body.cam-platform #network-state-method-detail>header em{margin-top:2px;color:#708992;font-size:8px;font-style:normal}body.cam-platform #network-state-method-detail>header>b{max-width:46%;padding:5px 7px;border-radius:6px;color:#73d9b4;background:rgba(101,214,170,.07);font-size:8px;text-align:right}
body.cam-platform .network-state-result-pair{display:grid;grid-template-columns:1fr 1fr;gap:1px;background:rgba(135,178,190,.08)}
body.cam-platform .network-state-result-pair>section{position:relative;min-width:0;padding:12px;background:#081720}
body.cam-platform .network-state-result-pair>section>small{display:block;padding-right:65px;color:#5e7982;font-size:7px;font-weight:800;letter-spacing:.45px}
body.cam-platform .network-state-result-pair h4{display:flex;align-items:flex-end;justify-content:space-between;gap:8px;margin:8px 0 6px;color:#a8bec3;font-size:10px;font-weight:600}body.cam-platform .network-state-result-pair h4 strong{color:#dce9eb;font-size:24px;line-height:.9}
body.cam-platform .result-status{position:absolute;right:10px;top:10px;padding:4px 6px;border-radius:999px;color:#efb86c;background:rgba(240,168,79,.1);font-size:6.5px;font-weight:900;letter-spacing:.4px}body.cam-platform .result-status.observed{color:#70d8b3;background:rgba(101,214,170,.1)}body.cam-platform .result-status.no_evaluable{color:#8198a0;background:rgba(129,152,160,.09)}
body.cam-platform .network-state-result-pair p{min-height:31px;margin:7px 0;color:#799099;font-size:7.5px;line-height:1.4}
body.cam-platform .network-state-result-pair dl{display:grid;grid-template-columns:1fr 1fr;gap:5px;margin:0}body.cam-platform .network-state-result-pair dl div{min-width:0;padding:6px;border:1px solid rgba(135,178,190,.07);border-radius:5px;background:#07141d}body.cam-platform .network-state-result-pair dt{color:#58727c;font-size:6.5px;text-transform:uppercase}body.cam-platform .network-state-result-pair dd{overflow:hidden;margin:3px 0 0;color:#b9cdd1;font-size:8px;text-overflow:ellipsis;white-space:nowrap}
body.cam-platform .network-state-method-meta{display:grid;grid-template-columns:110px 1fr;gap:1px;background:rgba(135,178,190,.07)}body.cam-platform .network-state-method-meta>span{min-width:0;padding:8px 10px;background:#091923}body.cam-platform .network-state-method-meta small,body.cam-platform .network-state-method-meta strong{display:block}body.cam-platform .network-state-method-meta small{color:#56717a;font-size:6.5px;font-weight:800;letter-spacing:.45px}body.cam-platform .network-state-method-meta strong{margin-top:3px;color:#9db3b8;font-size:7.5px;line-height:1.35}
body.cam-platform .network-state-method-inputs{display:grid;grid-template-columns:repeat(5,minmax(0,1fr));gap:1px;background:rgba(135,178,190,.07)}body.cam-platform .network-state-method-inputs>span{min-width:0;padding:8px 7px;background:#081720}body.cam-platform .network-state-method-inputs span>*{display:block;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}body.cam-platform .network-state-method-inputs small{color:#57717a;font-size:6px;text-transform:uppercase}body.cam-platform .network-state-method-inputs strong{margin-top:3px;color:#b9cdd1;font-size:8px}body.cam-platform .network-state-method-inputs em{margin-top:2px;color:#5f7881;font-size:6px;font-style:normal}
body.cam-platform #network-state-method-detail>footer{display:block;padding:9px 11px;border-top:1px solid rgba(135,178,190,.08);color:#748c94;font-size:7.5px;line-height:1.45}body.cam-platform #network-state-method-detail>footer strong{display:block;margin-bottom:2px;color:#efb86c;font-size:8px}body.cam-platform #network-state-method-detail>footer span{display:block}
body.cam-platform #network-state-strip button{outline:2px solid transparent;outline-offset:-2px}body.cam-platform #network-state-strip button.selected{z-index:3;outline-color:#e3f4ef;box-shadow:0 0 0 2px rgba(101,214,170,.35)}
[data-theme="light"] body.cam-platform .network-state-workspace{color:#294941;background:#f4f8f7}[data-theme="light"] body.cam-platform .network-state-query,[data-theme="light"] body.cam-platform .network-state-stage>article{border-color:rgba(47,103,90,.16);background:#fff;box-shadow:0 14px 40px rgba(46,82,73,.07)}[data-theme="light"] body.cam-platform .network-state-query label,[data-theme="light"] body.cam-platform .network-state-result-pair>section,[data-theme="light"] body.cam-platform .network-state-result-pair dl div,[data-theme="light"] body.cam-platform .network-state-method-meta>span,[data-theme="light"] body.cam-platform .network-state-method-inputs>span,[data-theme="light"] body.cam-platform .network-state-method-card li{background:#f8fbfa}[data-theme="light"] body.cam-platform :is(.network-state-stage h3,#network-state-method-detail>header strong,.network-state-result-pair h4 strong,.network-state-method-inputs strong,.network-state-table-row b){color:#294b43}[data-theme="light"] body.cam-platform .network-state-table-row.head{background:#eef6f3}[data-theme="light"] body.cam-platform .network-state-table-row{color:#58736c}
@media(max-width:1600px){body.cam-platform #view-analysis .network-state-query{grid-template-columns:repeat(4,minmax(112px,1fr))}body.cam-platform #view-analysis .network-state-query .congestion-run{grid-column:span 2}body.cam-platform .network-state-kpis{grid-template-columns:repeat(3,minmax(120px,1fr))}body.cam-platform .network-state-stage{grid-template-columns:1fr}body.cam-platform .network-state-table-card{grid-column:auto}body.cam-platform .network-state-result-pair{grid-template-columns:1fr 1fr}}
@media(max-width:1350px){body.cam-platform #view-analysis .network-state-query{grid-template-columns:repeat(4,minmax(112px,1fr))}body.cam-platform #view-analysis .network-state-query .congestion-run{grid-column:span 2}body.cam-platform .network-state-kpis{grid-template-columns:repeat(3,minmax(120px,1fr))}}
@media(max-width:950px){body.cam-platform .network-state-stage{grid-template-columns:1fr}body.cam-platform .network-state-table-card{grid-column:auto}body.cam-platform .network-state-query{grid-template-columns:repeat(2,minmax(110px,1fr))}}

/* Detalle trazable de los eventos observados a zoom de inspección. */
.connected-event-popup .maplibregl-popup-content {
  width: min(390px, calc(100vw - 28px));
  padding: 0;
  overflow: hidden;
  border: 1px solid rgba(101, 214, 170, .34);
  border-radius: 12px;
  background: #0a1821;
  color: #dce9eb;
  box-shadow: 0 18px 42px rgba(0, 0, 0, .42);
}

.connected-event-popup .maplibregl-popup-close-button {
  z-index: 2;
  padding: 7px 10px;
  color: #dce9eb;
  font-size: 19px;
}

.connected-event-popup .maplibregl-popup-tip { border-top-color: #0a1821; }
.connected-event-detail { font-family: Roboto, sans-serif; }
.connected-event-detail header { padding: 14px 16px 12px; border-bottom: 1px solid rgba(142, 173, 182, .16); background: linear-gradient(135deg, rgba(101, 214, 170, .13), rgba(113, 139, 240, .08)); }
.connected-event-detail header small { color: #65d6aa; font-size: 10px; font-weight: 700; letter-spacing: .12em; }
.connected-event-detail header h3 { margin: 5px 26px 2px 0; color: #f4f8f9; font-size: 17px; font-weight: 600; }
.connected-event-detail header p { margin: 0; color: #9eb4ba; font-size: 11px; }
.connected-event-detail section { display: grid; grid-template-columns: 1fr 1fr; max-height: 310px; overflow: auto; padding: 8px 16px 10px; gap: 0 16px; }
.connected-event-detail section div { min-width: 0; padding: 7px 0; border-bottom: 1px solid rgba(142, 173, 182, .1); }
.connected-event-detail section span, .connected-event-detail section strong { display: block; }
.connected-event-detail section span { margin-bottom: 3px; color: #6f8b94; font-size: 9.5px; font-weight: 700; letter-spacing: .07em; text-transform: uppercase; }
.connected-event-detail section strong { overflow-wrap: anywhere; color: #dce9eb; font-size: 11px; font-weight: 500; }
.connected-event-detail footer { padding: 9px 16px 11px; color: #6f8b94; font-size: 10px; line-height: 1.35; }

.cercanias-line-dot { width: 8px; height: 8px; margin-right: 6px; display: inline-block; border: 1px solid rgba(255,255,255,.72); border-radius: 50%; background: var(--rail-color); vertical-align: -1px; box-shadow: 0 0 7px color-mix(in srgb,var(--rail-color),transparent 42%); }
.cercanias-popup .maplibregl-popup-content { width: min(400px,calc(100vw - 28px)); padding: 0; overflow: hidden; border: 1px solid rgba(255,255,255,.17); border-radius: 12px; color: #dce9eb; background: #0a1821; box-shadow: 0 18px 42px rgba(0,0,0,.44); }
.cercanias-popup .maplibregl-popup-tip { border-top-color: #0a1821; }
.cercanias-popup .maplibregl-popup-close-button { z-index: 2; padding: 7px 10px; color: #dce9eb; font-size: 19px; }
.cercanias-detail { font-family: Roboto,sans-serif; }
.cercanias-detail header { padding: 14px 16px 12px; border-bottom: 1px solid rgba(142,173,182,.16); background: linear-gradient(135deg,rgba(117,182,224,.15),rgba(44,42,134,.09)); }
.cercanias-detail header small { color: #75b6e0; font-size: 10px; font-weight: 700; letter-spacing: .11em; }
.cercanias-detail header h3 { margin: 6px 28px 3px 0; display: flex; gap: 8px; align-items: center; color: #f4f8f9; font-size: 17px; font-weight: 600; }
.cercanias-detail header h3 i { width: 10px; height: 24px; flex: 0 0 10px; border-radius: 4px; background: var(--rail-color); box-shadow: 0 0 8px color-mix(in srgb,var(--rail-color),transparent 42%); }
.cercanias-detail header p { margin: 0; color: #9eb4ba; font-size: 11px; }
.cercanias-detail section { padding: 8px 16px 10px; display: grid; grid-template-columns: 1fr 1fr; gap: 0 16px; }
.cercanias-detail section div { min-width: 0; padding: 8px 0; border-bottom: 1px solid rgba(142,173,182,.1); }
.cercanias-detail section span,.cercanias-detail section strong { display: block; }
.cercanias-detail section span { margin-bottom: 3px; color: #6f8b94; font-size: 9.5px; font-weight: 700; letter-spacing: .07em; text-transform: uppercase; }
.cercanias-detail section strong { overflow-wrap: anywhere; color: #dce9eb; font-size: 11px; font-weight: 500; }
.cercanias-detail footer { padding: 9px 16px 11px; color: #6f8b94; font-size: 10px; line-height: 1.35; }
.cercanias-alert-copy { margin: 0 16px 10px; padding: 9px 10px; border: 1px solid rgba(240,168,79,.22); border-radius: 6px; background: rgba(240,168,79,.05); }
.cercanias-alert-copy strong,.cercanias-alert-copy span { display: block; }.cercanias-alert-copy strong { color: #f0a84f; font-size: 9.5px; letter-spacing: .08em; }.cercanias-alert-copy span { margin-top: 5px; color: #aebdc1; font-size: 10px; line-height: 1.4; }

.aircraft-popup .maplibregl-popup-content,.municipality-popup .maplibregl-popup-content { width: min(400px,calc(100vw - 28px)); padding: 0; overflow: hidden; border: 1px solid rgba(166,235,255,.25); border-radius: 12px; color: #dce9eb; background: #0a1821; box-shadow: 0 18px 42px rgba(0,0,0,.44); }
.aircraft-popup .maplibregl-popup-tip,.municipality-popup .maplibregl-popup-tip { border-top-color: #0a1821; }
.aircraft-popup .maplibregl-popup-close-button,.municipality-popup .maplibregl-popup-close-button { z-index: 2; padding: 7px 10px; color: #dce9eb; font-size: 19px; }
.aircraft-detail,.municipality-detail { font-family: Roboto,sans-serif; }
.aircraft-detail header,.municipality-detail header { padding: 14px 16px 12px; border-bottom: 1px solid rgba(142,173,182,.16); background: linear-gradient(135deg,rgba(69,183,231,.15),rgba(156,140,255,.08)); }
.municipality-detail header { background: linear-gradient(135deg,rgba(101,214,170,.13),rgba(69,183,231,.07)); }
.aircraft-detail header small,.municipality-detail header small { color: #8ddff6; font-size: 10px; font-weight: 700; letter-spacing: .11em; }
.municipality-detail header small { color: #65d6aa; }
.aircraft-detail header h3,.municipality-detail header h3 { margin: 6px 28px 3px 0; color: #f4f8f9; font-size: 17px; font-weight: 600; }
.aircraft-detail header p,.municipality-detail header p { margin: 0; color: #9eb4ba; font-size: 11px; }
.aircraft-detail section,.municipality-detail section { padding: 8px 16px 10px; display: grid; grid-template-columns: 1fr 1fr; gap: 0 16px; }
.aircraft-detail section div,.municipality-detail section div { min-width: 0; padding: 8px 0; border-bottom: 1px solid rgba(142,173,182,.1); }
.aircraft-detail section span,.aircraft-detail section strong,.municipality-detail section span,.municipality-detail section strong { display: block; }
.aircraft-detail section span,.municipality-detail section span { margin-bottom: 3px; color: #6f8b94; font-size: 9.5px; font-weight: 700; letter-spacing: .07em; text-transform: uppercase; }
.aircraft-detail section strong,.municipality-detail section strong { overflow-wrap: anywhere; color: #dce9eb; font-size: 11px; font-weight: 500; }
.aircraft-detail footer,.municipality-detail footer { padding: 9px 16px 11px; color: #6f8b94; font-size: 10px; line-height: 1.35; }

body.cam-platform { overflow: hidden; background: var(--ops-bg); }
body.cam-platform,body.cam-platform * { font-family: "Roboto",Arial,sans-serif !important; }
body.cam-platform .main-stage > .view:not(.cam-view) { display: none !important; }
body.cam-platform.cam-ready .cam-view.active { display: block; }
body.cam-platform .app-shell { grid-template-columns: 208px minmax(0,1fr); }
body.cam-platform .sidebar { padding: 22px 14px 16px; background: #08131b; }
body.cam-platform.shell-sidebar-collapsed .app-shell { grid-template-columns: minmax(0,1fr); }
body.cam-platform.shell-sidebar-collapsed .sidebar { display: none; }
body.cam-platform .brand { padding: 0 8px; margin-bottom: 30px; }
body.cam-platform .brand-copy small { color: #78909a; letter-spacing: 1.8px; }
body.cam-platform .main-nav { display: grid; gap: 4px; align-content: start; }
body.cam-platform .nav-item { min-height: 46px; grid-template-columns: 28px 1fr; gap: 9px; border-radius: 8px; color: #71858e; }
body.cam-platform .nav-item.active { color: #e7eff0; background: rgba(101,214,170,.075); }
body.cam-platform .nav-item.active::before { left: -14px; background: var(--ops-green); }
.cam-nav-code { width: 24px; height: 24px; display: grid; place-items: center; border: 1px solid var(--ops-line); border-radius: 6px; color: #879ca5; font: 700 9px/1 "DM Sans",sans-serif; letter-spacing: .35px; }
.cam-nav.active .cam-nav-code { border-color: rgba(101,214,170,.3); color: var(--ops-green); background: rgba(101,214,170,.07); }
.sidebar-health,.sidebar-settings { min-height: 48px; padding: 8px; display: grid; grid-template-columns: 25px 1fr; gap: 9px; align-items: center; border: 1px solid var(--ops-line); border-radius: 9px; background: #0a1821; color: inherit; text-align: left; }
.sidebar-health > span,.sidebar-settings > span { width: 22px; height: 22px; display: grid; place-items: center; border-radius: 6px; }
.sidebar-health > span { width: 7px; height: 7px; margin: auto; border-radius: 50%; background: var(--ops-green); box-shadow: 0 0 8px rgba(101,214,170,.55); }
.sidebar-settings { width: 100%; margin-top: 7px; cursor: pointer; }.sidebar-settings > span { border: 1px solid var(--ops-line); color: #8da0a8; background: #0d1d27; }
.sidebar-health strong,.sidebar-health small,.sidebar-settings strong,.sidebar-settings small { display: block; }.sidebar-health strong,.sidebar-settings strong { color: #aebdc1; font-size: 9.5px; }.sidebar-health small,.sidebar-settings small { margin-top: 3px; color: #5f747d; font-size: 9px; }
body.cam-platform .main-stage { grid-template-rows: 66px minmax(0,1fr); background: var(--ops-bg); }
body.cam-platform .topbar { padding: 0 20px; background: #09141c; border-color: var(--ops-line); }
body.cam-platform .page-heading .eyebrow { color: #4f6873; font-size: 9px; }
body.cam-platform #page-title { margin-top: 3px; color: #e2eaec; font-size: 17px; letter-spacing: -.25px; }
body.cam-platform .road-pk-search { display: none !important; }
body.cam-platform .top-municipality-search { position:relative;width:min(330px,31vw);height:38px;margin-left:24px;display:grid;grid-template-columns:minmax(0,1fr) 38px;gap:5px;align-items:center; }
body.cam-platform .top-municipality-search[hidden] { display:none!important; }
body.cam-platform .top-municipality-search label { min-width:0;height:36px;padding:0 8px;display:grid;grid-template-columns:20px minmax(0,1fr);gap:6px;align-items:center;border:1px solid rgba(166,195,204,.14);border-radius:7px;background:#0b1922; }
body.cam-platform .top-municipality-search label>span { color:#65d6aa;font-size:16px;line-height:1;text-align:center; }
body.cam-platform .top-municipality-search label small { display:block;color:#58727b;font-size:7.5px;font-weight:700;letter-spacing:.48px; }
body.cam-platform .top-municipality-search input { width:100%;min-width:0;margin-top:1px;border:0;outline:0;color:#d1dddf;background:transparent;font:600 10px Roboto,Arial,sans-serif; }
body.cam-platform .top-municipality-search input::placeholder { color:#667b83;font-weight:400; }
body.cam-platform .top-municipality-search button { height:36px;border:1px solid rgba(101,214,170,.28);border-radius:7px;color:#65d6aa;background:rgba(101,214,170,.075);font:700 8.5px Roboto,Arial,sans-serif;cursor:pointer; }
body.cam-platform .top-municipality-search button:hover:not(:disabled) { border-color:rgba(101,214,170,.55);background:rgba(101,214,170,.13); }
body.cam-platform .top-municipality-search button:disabled { opacity:.42;cursor:wait; }
body.cam-platform .top-municipality-search output { position:absolute;width:1px;height:1px;margin:-1px;padding:0;overflow:hidden;clip:rect(0 0 0 0);clip-path:inset(50%);white-space:nowrap;border:0; }
body.cam-platform .top-actions { margin-left: auto; display: flex; gap: 10px; align-items: center; }
.top-source { height: 37px; padding: 0 10px; display: grid; grid-template-columns: 7px 1fr; gap: 8px; align-items: center; border: 1px solid var(--ops-line); border-radius: 8px; background: #0b1821; }
.top-source > span { width: 6px; height: 6px; border-radius: 50%; background: var(--ops-green); }
.top-source small,.top-source strong { display: block; }.top-source small { color: #506772; font-size: 8.5px; letter-spacing: .5px; }.top-source strong { margin-top: 2px; color: #9fb1b6; font-size: 9px; }
.top-user { width: 34px; height: 34px; border: 1px solid var(--ops-line); border-radius: 50%; color: #8fa3aa; background: #0c1b24; font-size: 9.5px; font-weight: 700; cursor: pointer; }
.shell-menu-toggle { width: 34px; height: 34px; margin-right: 12px; padding: 8px; display: grid; align-content: center; gap: 4px; flex: 0 0 auto; border: 1px solid var(--ops-line); border-radius: 8px; background: #0b1821; cursor: pointer; }
.shell-menu-toggle span { width: 16px; height: 1px; display: block; border-radius: 2px; background: #7d929a; transition: transform .16s,opacity .16s; }
.shell-menu-toggle:hover { border-color: rgba(101,214,170,.34); }.shell-menu-toggle:hover span { background: var(--ops-green); }
.analysis-report-button { min-width: 178px; height: 39px; padding: 0 11px; display: grid; grid-template-columns: 25px 1fr; grid-template-rows: 1fr 1fr; column-gap: 8px; align-items: center; border: 1px solid rgba(101,214,170,.25); border-radius: 8px; color: #90a4aa; background: rgba(101,214,170,.055); text-align: left; cursor: pointer; }
.analysis-report-button[hidden] { display: none !important; }.analysis-report-button > span { grid-row: 1 / 3; width: 25px; height: 25px; display: grid; place-items: center; border: 1px solid rgba(101,214,170,.22); border-radius: 6px; color: var(--ops-green); font-size: 14px; }.analysis-report-button strong { align-self: end; color: #b8c9c5; font-size: 8.5px; letter-spacing: .35px; }.analysis-report-button small { align-self: start; margin-top: 2px; color: #5f777f; font-size: 8px; }.analysis-report-button:hover { border-color: rgba(101,214,170,.48); background: rgba(101,214,170,.09); }
.analysis-main article>header:has(.analysis-fullscreen-button) { position:relative;z-index:3; }
.analysis-png-button,.analysis-fullscreen-button { position:relative;z-index:4;height:27px;display:inline-flex;flex:0 0 auto;align-items:center;justify-content:center;gap:5px;border:1px solid rgba(101,214,170,.24);border-radius:6px;color:#8ca3a8;background:rgba(101,214,170,.055);font:700 8px "Roboto",Arial,sans-serif;letter-spacing:.4px;cursor:pointer; }
.analysis-png-button { width:48px;margin-left:auto; }.analysis-fullscreen-button { min-width:70px;padding:0 8px;margin-left:5px; }
.analysis-png-button span,.analysis-fullscreen-button span { color:var(--ops-green);font-size:12px;line-height:1; }.analysis-png-button:hover,.analysis-fullscreen-button:hover,.analysis-fullscreen-button.active { border-color:rgba(101,214,170,.5);color:#d2dfdc;background:rgba(101,214,170,.11); }.analysis-png-button:focus-visible,.analysis-fullscreen-button:focus-visible { outline:2px solid rgba(101,214,170,.5);outline-offset:2px; }.analysis-print-chart-image { display:none; }

body.cam-platform .analysis-chart-fullscreen:fullscreen { box-sizing:border-box;width:100vw!important;height:100vh!important;max-width:none!important;max-height:none!important;margin:0!important;padding:16px!important;display:flex!important;flex-direction:column!important;border:0!important;border-radius:0!important;color:#dce8ea;background:#071018!important;overflow:hidden!important; }
body.cam-platform .analysis-chart-fullscreen:fullscreen > header { width:100%;min-height:58px!important;height:auto!important;flex:0 0 auto;padding:8px 12px!important;border-bottom:1px solid rgba(166,195,204,.14); }
body.cam-platform .analysis-chart-fullscreen:fullscreen > :not(header):has(canvas) { min-width:0!important;min-height:0!important;width:100%!important;height:auto!important;max-height:none!important;flex:1 1 auto!important; }
body.cam-platform .analysis-chart-fullscreen:fullscreen canvas:not(.maplibregl-canvas) { width:100%!important;height:100%!important;max-width:none!important;max-height:none!important;display:block!important; }
body.cam-platform .analysis-chart-fullscreen:fullscreen footer { flex:0 0 auto; }
body.cam-platform .analysis-chart-fullscreen:fullscreen .analysis-png-button { margin-left:auto; }
body.cam-platform.analysis-fullscreen-fallback-open { overflow:hidden!important; }
body.cam-platform .analysis-chart-fullscreen-fallback { box-sizing:border-box;position:fixed!important;z-index:10000!important;inset:0!important;width:100vw!important;height:100vh!important;max-width:none!important;max-height:none!important;margin:0!important;padding:16px!important;display:flex!important;flex-direction:column!important;border:0!important;border-radius:0!important;color:#dce8ea;background:#071018!important;overflow:hidden!important; }
body.cam-platform .analysis-chart-fullscreen-fallback > header { width:100%;min-height:58px!important;height:auto!important;flex:0 0 auto;padding:8px 12px!important;border-bottom:1px solid rgba(166,195,204,.14); }
body.cam-platform .analysis-chart-fullscreen-fallback > :not(header):has(canvas) { min-width:0!important;min-height:0!important;width:100%!important;height:auto!important;max-height:none!important;flex:1 1 auto!important; }
body.cam-platform .analysis-chart-fullscreen-fallback canvas:not(.maplibregl-canvas) { width:100%!important;height:100%!important;max-width:none!important;max-height:none!important;display:block!important; }
body.cam-platform .analysis-chart-fullscreen-fallback footer { flex:0 0 auto; }
body.cam-platform .analysis-fullscreen-tooltip { position:fixed!important;z-index:2147483000!important;max-width:min(380px,calc(100vw - 24px))!important;pointer-events:none!important;transform:none!important; }

.cam-view { display: none; min-width: 0; min-height: 0; }
.ops-view { height: 100%; position: relative; overflow: hidden; background: #08131c; }
.ops-map { position: absolute; inset: 0; background: #08131c; }
.panel-float { border: 1px solid rgba(166,195,204,.17); border-radius: 10px; background: rgba(8,20,29,.93); box-shadow: 0 12px 34px rgba(0,0,0,.28); backdrop-filter: blur(12px); }
.ops-kpis { position: absolute; z-index: 4; left: 16px; right: 16px; top: 14px; height: 68px; display: grid; grid-template-columns: minmax(190px,1.45fr) repeat(4,minmax(120px,1fr)); border: 1px solid rgba(166,195,204,.16); border-radius: 10px; background: rgba(8,20,29,.92); box-shadow: 0 10px 30px rgba(0,0,0,.22); backdrop-filter: blur(12px); }
.ops-kpis article { padding: 10px 15px; display: flex; flex-direction: column; justify-content: center; border-right: 1px solid var(--ops-line); }
.ops-kpis article:last-child { border-right: 0; }.ops-kpis small,.ops-kpis strong,.ops-kpis span { display: block; }.ops-kpis small { color: #536b75; font-size: 8.5px; font-weight: 700; letter-spacing: .55px; }.ops-kpis strong { margin-top: 5px; color: #e1eaec; font: 600 17px/1 Roboto,sans-serif; }.ops-kpis span { margin-top: 4px; color: #677c85; font-size: 9px; }.ops-kpis .source span { margin-top: 2px; overflow: hidden; color: var(--ops-green); text-overflow: ellipsis; white-space: nowrap; }.ops-kpi-mode { display:block; margin-top:2px; }.ops-kpi-mode select { width:100%; height:23px; padding:0 24px 0 8px; border:1px solid rgba(101,214,170,.26); border-radius:5px; color:#cfe2dd; background:#0b1d26; font:600 10px/1 Roboto,sans-serif; cursor:pointer; outline:none; }.ops-kpi-mode select:hover,.ops-kpi-mode select:focus { border-color:rgba(101,214,170,.58); box-shadow:0 0 0 2px rgba(101,214,170,.07); }
.ops-layers { position: absolute; z-index: 4; left: 16px; top: 96px; bottom: 78px; width: 264px; display: grid; grid-template-rows: 50px minmax(0,1fr) auto; overflow: hidden; }
.ops-layers #ops-layer-list { min-height: 0; max-height: none; overflow-y: auto; scrollbar-width: thin; scrollbar-color: #29404b transparent; }
.ops-layers > header { height: 50px; padding: 0 12px; display: flex; align-items: center; justify-content: space-between; border-bottom: 1px solid var(--ops-line); }
.ops-layers header small,.ops-layers header strong { display: block; }.ops-layers header small { color: #526a75; font-size: 8.5px; letter-spacing: .65px; }.ops-layers header strong { margin-top: 2px; color: #cad6d9; font-size: 10px; }.ops-layers header button { width: 25px; height: 25px; border: 1px solid var(--ops-line); border-radius: 6px; color: #8ea2aa; background: #0d1c26; cursor: pointer; }.ops-layers header .ops-panel-collapse { width: 61px; color: #789098; font-size: 8px; font-weight: 700; letter-spacing: .35px; }
.ops-panel-actions { display: flex; gap: 5px; }.ops-panel-actions button:hover,.ops-fire-actions button:hover { color: var(--ops-green); border-color: rgba(101,214,170,.36); }
.ops-layer { min-height: 62px; padding: 8px 12px; position: relative; display: grid; grid-template-columns: 30px 1fr auto; gap: 9px; align-items: center; border-bottom: 1px solid rgba(166,195,204,.08); cursor: pointer; }
.ops-layer input { position: absolute; opacity: 0; }.ops-check { width: 28px; height: 17px; padding: 2px; display: block; border: 1px solid var(--ops-line-2); border-radius: 99px; background: #091720; }.ops-check::before { content: ""; width: 11px; height: 11px; display: block; border-radius: 50%; background: #576e78; transition: .16s; }.ops-layer input:checked + .ops-check { border-color: rgba(101,214,170,.34); background: rgba(101,214,170,.09); }.ops-layer input:checked + .ops-check::before { background: var(--ops-green); transform: translateX(11px); }
.ops-layer strong,.ops-layer small { display: block; }.ops-layer strong { color: #b8c7ca; font-size: 9.5px; }.ops-layer small { margin-top: 4px; color: #5e747e; font-size: 8.5px; }.ops-layer > b { color: #718892; font-size: 8.5px; font-weight: 600; }
.ops-layers > footer { min-height: 48px; padding: 9px 12px; display: grid; grid-template-columns: 8px 1fr; gap: 8px; align-items: center; background: rgba(101,214,170,.025); }.ops-dot { width: 6px; height: 6px; border-radius: 50%; background: var(--ops-green); box-shadow: 0 0 7px rgba(101,214,170,.5); }.ops-layers footer strong,.ops-layers footer small { display: block; }.ops-layers footer strong { color: #879b9f; font-size: 9px; }.ops-layers footer small { margin-top: 2px; color: #526b74; font-size: 8.5px; }
.ops-query { position: absolute; z-index: 4; right: 16px; top: 96px; height: 50px; padding: 0 7px 0 12px; display: flex; gap: 9px; align-items: center; }.ops-query label span { display: block; color: #536b75; font-size: 8.5px; letter-spacing: .5px; }.ops-query select { width: 130px; margin-top: 2px; border: 0; color: #c4d1d4; background: transparent; font-size: 10px; outline: 0; }.ops-query select option { background: #0c1a24; }.ops-query button { height: 31px; padding: 0 9px; border: 1px solid var(--ops-line); border-radius: 6px; color: #7f949c; background: #0d1c26; font-size: 8.5px; font-weight: 700; cursor: pointer; }
.ops-fire-status { position: absolute; z-index: 4; right: 16px; bottom: 78px; width: 255px; padding: 13px 14px 11px; }.ops-fire-status > header { display: grid; grid-template-columns: 9px 1fr auto; gap: 8px; align-items: center; }.ops-fire-status header > span { width: 8px; height: 8px; border-radius: 50%; background: #ff7043; box-shadow: 0 0 10px rgba(255,112,67,.62); }.ops-fire-status header small,.ops-fire-status header strong { display: block; }.ops-fire-status header small { color: #6d8189; font-size: 8px; letter-spacing: .55px; }.ops-fire-status header strong { margin-top: 2px; color: #d5dfe1; font-size: 9.5px; }.ops-fire-status header b { color: #ff9a70; font-size: 8.5px; }.ops-fire-actions { display: flex; gap: 7px; align-items: center; }.ops-fire-actions button { width: 22px; height: 22px; padding: 0; border: 1px solid var(--ops-line); border-radius: 6px; color: #718790; background: #0d1c26; font-size: 13px; cursor: pointer; }.ops-fire-status dl { margin: 10px 0 0; }.ops-fire-status dl div { min-height: 25px; display: grid; grid-template-columns: 85px 1fr; align-items: center; border-top: 1px solid rgba(166,195,204,.08); }.ops-fire-status dt { color: #536b75; font-size: 8.5px; }.ops-fire-status dd { margin: 0; color: #9aabb0; font-size: 8.5px; text-align: right; }.ops-fire-status > footer { margin-top: 8px; padding-top: 8px; border-top: 1px solid var(--ops-line); color: #647a83; font-size: 8.5px; line-height: 1.35; }
.ops-panel-handle { position: absolute; z-index: 7; height: 31px; padding: 0 10px; border: 1px solid rgba(166,195,204,.22); border-radius: 7px; color: #83979f; background: rgba(8,20,29,.95); box-shadow: 0 8px 22px rgba(0,0,0,.28); font: 700 8.5px "Roboto",sans-serif; letter-spacing: .45px; cursor: pointer; backdrop-filter: blur(12px); }.ops-panel-handle span { margin-right: 4px; color: var(--ops-green); font-size: 11px; vertical-align: -1px; }.ops-panel-handle:hover { color: #d1dcde; border-color: rgba(101,214,170,.38); }.ops-panel-handle-layers { left: 16px; top: 96px; }.ops-panel-handle-filters { right: 16px; top: 96px; }.ops-panel-handle-selection { right: 16px; top: 159px; }.ops-panel-handle-fire { right: 16px; bottom: 78px; }.ops-panel-handle-fire span { color: #ff784a; font-size: 9.5px; }
.ops-map-tooltip { position: absolute; z-index: 12; width: 235px; padding: 9px 10px; border: 1px solid rgba(166,195,204,.22); border-radius: 7px; color: #91a5aa; background: rgba(7,18,26,.97); box-shadow: 0 10px 28px rgba(0,0,0,.38); pointer-events: none; }
.ops-map-tooltip[hidden] { display: none; }
.ops-map-tooltip strong,.ops-map-tooltip span,.ops-map-tooltip b,.ops-map-tooltip small { display: block; }
.ops-map-tooltip strong { color: #d2dddf; font-size: 9px; }
.ops-map-tooltip span { margin-top: 4px; color: #718891; font-size: 8.5px; }
.ops-map-tooltip b { margin-top: 6px; color: var(--ops-green); font-size: 9px; }
.ops-map-tooltip small { margin-top: 4px; color: #526b75; font-size: 8px; line-height: 1.4; }
.ops-selection { position: absolute; z-index: 5; right: 16px; top: 159px; width: 255px; padding: 15px; }.ops-selection .close { position: absolute; right: 9px; top: 8px; border: 0; color: #6f858e; background: transparent; font-size: 18px; cursor: pointer; }.ops-selection > small { color: #536b75; font-size: 8.5px; letter-spacing: .55px; }.ops-selection h3 { margin: 5px 0 12px; color: #d5dfe1; font: 600 14px "Manrope",sans-serif; }.selection-speed { display: flex; align-items: baseline; gap: 5px; }.selection-speed strong { color: var(--ops-green); font: 600 31px "Manrope",sans-serif; }.selection-speed span { color: #627984; font-size: 9.5px; }.ops-selection dl { margin: 13px 0 0; }.ops-selection dl div { min-height: 34px; display: grid; grid-template-columns: 80px 1fr; align-items: center; border-top: 1px solid rgba(166,195,204,.09); }.ops-selection dt { color: #536b75; font-size: 8.5px; }.ops-selection dd { margin: 0; color: #99abb0; font-size: 9px; text-align: right; }.ops-selection > footer { margin-top: 11px; padding-top: 9px; border-top: 1px solid var(--ops-line); color: #526a74; font-size: 8.5px; }
.ops-legend { position: absolute; z-index: 4; left: 296px; bottom: 78px; height: 34px; padding: 0 10px; display: flex; align-items: center; gap: 6px; }.ops-legend > span { margin-right: 4px; color: #607781; font-size: 8.5px; font-weight: 700; }.ops-legend i { width: 18px; height: 3px; border-radius: 3px; background: var(--c); }.ops-legend small { color: #758a92; font-size: 8.5px; }
.ops-time { position: absolute; z-index: 4; left: 50%; bottom: 16px; width: min(720px,calc(100% - 360px)); height: 50px; padding: 0 11px; display: grid; grid-template-columns: 28px 190px 1fr 75px 28px; gap: 10px; align-items: center; transform: translateX(-50%); }.ops-time button { width: 27px; height: 27px; border: 1px solid var(--ops-line); border-radius: 6px; color: #526a74; background: #0d1c25; }.ops-time small,.ops-time strong { display: block; }.ops-time small { color: #536a74; font-size: 8px; letter-spacing: .5px; }.ops-time strong { margin-top: 3px; color: #9fb0b5; font-size: 9px; }.ops-time input { width: 100%; accent-color: var(--ops-green); }.ops-time time { color: var(--ops-green); font-size: 8.5px; font-weight: 700; text-align: center; }
.ops-layer-block { border-bottom: 1px solid rgba(166,195,204,.08); }
.ops-layer-block .ops-layer { min-height: 51px; border-bottom: 0; padding-bottom: 4px; }
.ops-layer input:disabled + .ops-check { opacity: .42; cursor: not-allowed; }
.ops-layer input:disabled ~ div strong,.ops-layer input:disabled ~ div small { color: #4d626b; }
.ops-layer-group { margin: 0; padding: 8px 12px 5px; border-bottom: 1px solid rgba(166,195,204,.06); color: #4f6872; background: rgba(166,195,204,.018); font-size: 8px; font-weight: 700; letter-spacing: .65px; }
.ops-environment-note { margin: 7px 9px 9px; padding: 8px 9px; border: 1px solid rgba(101,214,170,.12); border-radius: 6px; background: linear-gradient(135deg,rgba(101,214,170,.035),rgba(69,183,231,.025)); }.ops-environment-note strong,.ops-environment-note span { display: block; }.ops-environment-note strong { color: #6da997; font-size: 8px; letter-spacing: .55px; }.ops-environment-note span { margin-top: 4px; color: #59737c; font-size: 8px; line-height: 1.45; }
.ops-dgt-key { margin: -2px 10px 8px 50px; display: grid; grid-template-columns: repeat(2,1fr); gap: 4px 7px; color: #566f79; font-size: 8px; }.ops-dgt-key span { display: flex; gap: 5px; align-items: center; }.ops-dgt-key i { width: 11px; height: 4px; display: block; border-radius: 2px; background: #b7c6ca; }.ops-dgt-key i.closure { background: #e2445c; }.ops-dgt-key i.accident { background: #f25a8b; }.ops-dgt-key i.roadworks { background: #e5c657; }.ops-dgt-key i.other { background: linear-gradient(90deg,#45b7e7,#9c8cff); }
.ops-radar-key { margin: -2px 10px 9px 50px; color: #6f8992; font-size: 8px; }.ops-radar-key small,.ops-radar-key em { display:block; font-style:normal; line-height:1.35; }.ops-radar-key > i { display:block; height:5px; margin:4px 0 3px; border-radius:4px; background:linear-gradient(90deg,#0094fc 0%,#00fcfc 22%,#00c000 42%,#00ff00 56%,#ffff00 70%,#ff7f00 84%,#ff0000 100%); }.ops-radar-key span { display:flex; justify-content:space-between; color:#91a7ae; }.ops-radar-key b { font-weight:500; }.ops-radar-key em { margin-top:4px; color:#58717a; }
.ops-layer-metric { margin: 0 8px 8px 50px; padding: 6px 7px; display: block; border: 1px solid rgba(166,195,204,.1); border-radius: 5px; background: #091720; }
.ops-layer-metric > span { display: block; color: #4f6872; font-size: 8px; font-weight: 700; letter-spacing: .42px; }
.ops-layer-metric select { width: 100%; margin-top: 3px; border: 0; outline: 0; color: #91a5aa; background: transparent; font: 600 8.5px "Roboto",Arial,sans-serif; }
.ops-layer-metric select option { background: #0b1922; }
.ops-layer-metric > small { display: block; margin-top: 5px; color: #57707a; font-size: 8.5px; line-height: 1.35; }
.ops-interurban-line-filter { border-color: rgba(88,211,156,.16); }
.interurban-line-chip { margin-right: 6px; padding: 2px 5px; border-radius: 4px; color: #071018; background: #58d39c; font-weight: 800; }
.interurban-data-note { margin: 0 12px 11px; padding: 9px; border: 1px solid rgba(88,211,156,.18); border-radius: 6px; background: rgba(88,211,156,.055); }
.interurban-data-note strong,.interurban-data-note span { display: block; }
.interurban-data-note strong { color: #71dba9; font-size: 9px; letter-spacing: .45px; }
.interurban-data-note span { margin-top: 4px; color: #789099; font-size: 9px; line-height: 1.4; }
.ops-sit-locator { margin: 0 8px 8px 50px; padding: 7px; display: grid; grid-template-columns: minmax(0,1fr) auto; gap: 6px; border: 1px solid rgba(101,214,170,.18); border-radius: 6px; background: rgba(9,23,32,.94); }
.ops-sit-locator > span { grid-column: 1 / -1; color: #6c858e; font-size: 8.5px; font-weight: 700; letter-spacing: .45px; }
.ops-sit-locator select { min-width: 0; height: 28px; padding: 0 6px; border: 1px solid rgba(166,195,204,.15); border-radius: 4px; outline: 0; color: #b7c8cc; background: #0b1922; font: 600 9px "Roboto",Arial,sans-serif; }
.ops-sit-locator button { height: 28px; padding: 0 8px; border: 1px solid rgba(101,214,170,.28); border-radius: 4px; color: #76dfba; background: rgba(101,214,170,.08); font: 700 8.5px "Roboto",Arial,sans-serif; cursor: pointer; }
.ops-sit-locator button:hover { background: rgba(101,214,170,.14); }
.ops-sit-locator button:disabled,.ops-sit-locator select:disabled { opacity: .45; cursor: not-allowed; }
.ops-sit-locator small { grid-column: 1 / -1; color: #57707a; font-size: 8.5px; line-height: 1.35; }
.ops-network-type-filter { margin-bottom: 5px; }
.ops-network-type-filter > small { display: block; margin-top: 5px; color: #526b74; font-size: 8px; line-height: 1.3; }
.ops-network-type-key { margin: 0 8px 8px 50px; display: grid; grid-template-columns: repeat(2,minmax(0,1fr)); gap: 3px 7px; color: #607982; font-size: 8px; line-height: 1.35; }
.ops-network-type-key span { min-width: 0; display: flex; align-items: center; gap: 3px; white-space: nowrap; }
.ops-network-type-key i { width: 5px; height: 2px; flex: 0 0 auto; border-radius: 2px; background: #78919a; }
.ops-network-type-key b { color: #9aadb2; font-size: inherit; }
.ops-network-type-key .principal i { background: #55dfbb; }
.ops-network-type-key .secondary i { background: #58a8e8; }
.ops-network-type-key .local i { background: #78919a; }
.ops-network-type-key .border i { background: #f0bd4d; }
.ops-opacity { height: 25px; padding: 0 12px 7px 51px; display: grid; grid-template-columns: 42px 1fr 25px; gap: 7px; align-items: center; }
.ops-opacity > span,.ops-opacity > b { color: #4f6670; font-size: 8px; font-weight: 700; }
.ops-opacity > b { text-align: right; color: #6b838d; }
.ops-opacity input { width: 100%; height: 2px; margin: 0; accent-color: var(--ops-green); cursor: ew-resize; }
.ops-layer-tools { position: sticky; z-index: 6; top: 0; padding: 9px 10px 8px; border-bottom: 1px solid rgba(166,195,204,.12); background: rgba(8,20,29,.98); box-shadow: 0 8px 18px rgba(3,9,13,.2); }
.ops-layer-tools > label { height: 34px; padding: 0 9px; display: grid; grid-template-columns: 16px minmax(0,1fr); gap: 6px; align-items: center; border: 1px solid rgba(166,195,204,.16); border-radius: 7px; background: #0b1922; }
.ops-layer-tools > label span { color: var(--ops-green); font-size: 14px; }
.ops-layer-tools input { width: 100%; min-width: 0; border: 0; outline: 0; color: #c5d2d5; background: transparent; font: 500 10px "Roboto",Arial,sans-serif; }
.ops-layer-tools input::placeholder { color: #56707a; }
.ops-layer-tools > div { margin-top: 7px; display: grid; grid-template-columns: 1fr 1fr; gap: 6px; }
.ops-layer-tools button { height: 25px; border: 1px solid rgba(166,195,204,.13); border-radius: 5px; color: #66808a; background: #0b1922; font: 700 8px "Roboto",Arial,sans-serif; letter-spacing: .3px; cursor: pointer; }
.ops-layer-tools button:hover,.ops-layer-tools button.active { color: var(--ops-green); border-color: rgba(101,214,170,.34); background: rgba(101,214,170,.07); }
.ops-layer-tools > small { margin-top: 7px; display: block; color: #526b75; font-size: 8.5px; }
.ops-layer-section { border-bottom: 1px solid rgba(166,195,204,.08); }
.ops-layer-section[hidden],.ops-layer-block[hidden],#ops-layer-list [hidden] { display: none !important; }
.ops-layer-section-toggle { width: 100%; min-height: 35px; padding: 0 10px; display: grid; grid-template-columns: minmax(0,1fr) auto 13px; gap: 7px; align-items: center; border: 0; color: #708892; background: rgba(166,195,204,.025); text-align: left; cursor: pointer; }
.ops-layer-section-toggle:hover { color: #a9babe; background: rgba(101,214,170,.04); }
.ops-layer-section-toggle > span { min-width: 0; display: flex; gap: 7px; align-items: center; overflow: hidden; font: 700 8.5px "Roboto",Arial,sans-serif; letter-spacing: .55px; text-overflow: ellipsis; white-space: nowrap; }
.ops-layer-section-toggle i { width: 6px; height: 6px; flex: 0 0 auto; border-radius: 2px; background: #3d6570; }
.ops-layer-section-toggle b { color: #5a737d; font-size: 8.5px; font-weight: 600; }
.ops-layer-section-toggle em { color: #59727c; font-style: normal; font-size: 13px; transform: rotate(0deg); transition: transform .16s; }
.ops-layer-section.is-collapsed .ops-layer-section-toggle em { transform: rotate(-90deg); }
.ops-layer-section.is-collapsed .ops-layer-section-body { display: none; }
.ops-layer-block { position: relative; }
.ops-layer-block.is-active { background: linear-gradient(90deg,rgba(101,214,170,.045),transparent 70%); }
.ops-layer-block:not(.is-active) .ops-opacity { display: none; }
.ops-layer-block.is-active .ops-layer strong { color: #d5e1df; }
.ops-layer-preview { position: absolute; z-index: 2; right: 7px; bottom: 5px; width: 23px; height: 21px; display: grid; place-items: center; border: 1px solid rgba(166,195,204,.11); border-radius: 5px; color: #637c86; background: #0b1922; font-size: 10px; cursor: pointer; }
.ops-layer-block.is-active .ops-layer-preview { bottom: 31px; }
.ops-layer-preview:hover { color: var(--ops-green); border-color: rgba(101,214,170,.34); }
.ops-layer-empty { margin: 12px 10px; padding: 14px 12px; border: 1px dashed rgba(166,195,204,.16); border-radius: 7px; text-align: center; }
.ops-layer-empty strong,.ops-layer-empty span { display: block; }
.ops-layer-empty strong { color: #9aadb2; font-size: 10px; }
.ops-layer-empty span { margin-top: 5px; color: #58717a; font-size: 9px; line-height: 1.4; }
.ops-query { width: min(930px,calc(100% - 330px)); min-height: 68px; height: auto; padding: 6px; display: grid; grid-template-columns: 92px minmax(0,1fr) auto 27px; gap: 6px; }
.ops-query-tabs { display: grid; grid-template-rows: 1fr 1fr; gap: 3px; }
.ops-query-tabs button { height: auto; min-height: 25px; padding: 0 7px; text-align: left; }
.ops-query-tabs button.active { border-color: rgba(101,214,170,.32); color: var(--ops-green); background: rgba(101,214,170,.08); }
.ops-query-pane { min-width: 0; display: grid; grid-template-columns: minmax(120px,1.15fr) minmax(105px,.8fr) minmax(155px,1fr) auto; gap: 6px; }
.ops-query-pane.period { grid-template-columns: repeat(4,minmax(0,1fr)); align-content: center; }
.ops-query-pane.period > #apply-live-period { grid-column: 3/5; width: 100%; min-height: 34px; }
.ops-query:has(.ops-query-pane.period:not([hidden])) { min-height: 112px; }
.ops-query:has(.ops-query-pane.period:not([hidden])) ~ .ops-selection { top: 222px; }
.ops-query:has(.ops-query-pane.period:not([hidden])) ~ .ops-panel-handle-selection { top: 222px; }
.ops-query-pane[hidden] { display: none; }
#ops-layers-panel[hidden],#live-temporal-form[hidden],#ops-selection[hidden],#ops-fire-status[hidden],.ops-panel-handle[hidden] { display: none !important; }
.ops-filter-context { min-width: 150px; padding: 5px 8px; display: flex; flex-direction: column; justify-content: center; border: 1px solid rgba(166,195,204,.11); border-radius: 6px; background: #0b1922; }
.ops-filter-context small { color: #536b75; font-size: 8.5px; letter-spacing: .5px; }
.ops-filter-context strong { margin-top: 3px; overflow: hidden; color: #aebfc3; font-size: 9.5px; text-overflow: ellipsis; white-space: nowrap; }
.ops-query label { min-width: 0; height: 44px; padding: 5px 8px; display: flex; flex-direction: column; justify-content: center; border: 1px solid rgba(166,195,204,.11); border-radius: 6px; background: #0b1922; }
.ops-query select,.ops-query input { width: 100%; min-width: 0; margin-top: 3px; border: 0; outline: 0; color: #c4d1d4; background: transparent; font-size: 9.5px; }
.date-time-pair { min-width: 0; display: grid !important; grid-template-columns: minmax(92px,1fr) 58px; gap: 5px; }
.date-time-pair input { min-width: 0; }
.ops-query input::-webkit-calendar-picker-indicator { filter: invert(1); opacity: .45; }
.ops-query button { align-self: center; }
.ops-query button[type="submit"] { border-color: rgba(101,214,170,.28); color: var(--ops-green); background: rgba(101,214,170,.07); }
#apply-live-period { min-width: 118px; padding: 0 15px; font-weight: 700; white-space: nowrap; }
#apply-live-period:disabled { color: #72bda2; border-color: rgba(101,214,170,.2); background: rgba(101,214,170,.045); }
.ops-query .ops-query-collapse { width: 27px; padding: 0; color: #83979f; font-size: 14px; }
.ops-query button:disabled { opacity: .48; cursor: wait; }
.ops-time { grid-template-columns: 10px minmax(180px,.85fr) minmax(240px,1.15fr) minmax(125px,.7fr); }
.ops-time-state { width: 7px; height: 7px; border-radius: 50%; background: var(--ops-green); box-shadow: 0 0 7px rgba(101,214,170,.48); }
.ops-time-state.loading { animation: ops-pulse .8s ease-in-out infinite alternate; }
.ops-time-coverage { padding-left: 12px; border-left: 1px solid var(--ops-line); }
.ops-time time { line-height: 1.35; }
@keyframes ops-pulse { to { opacity: .28; transform: scale(.72); } }
.maplibregl-ctrl-group { border: 1px solid var(--ops-line) !important; background: rgba(8,20,29,.92) !important; }.maplibregl-ctrl-group button { filter: invert(1); opacity: .62; }.maplibregl-ctrl-attrib { color: #536b74; background: rgba(8,20,29,.75) !important; }.maplibregl-ctrl-attrib a { color: #6e8790 !important; }
.ops-map-display-control { width: 32px; height: 32px; position: relative; overflow: visible; border: 0; color: #dce6e7; background: transparent; box-shadow: none; font-family: "Roboto",sans-serif; }
.ops-map-zoom-float { min-width: 54px; height: 19px; display: grid; place-items: center; border: 0; border-radius: 5px; color: var(--ops-green); background: rgba(8,20,29,.36); box-shadow: none; font: 700 6.8px "Roboto",sans-serif; font-variant-numeric: tabular-nums; letter-spacing: .01em; pointer-events: none; backdrop-filter: blur(4px); }
.ops-basemap-trigger { width: 32px; height: 32px; padding: 0; display: grid; place-items: center; border: 1px solid rgba(160,195,199,.26); border-radius: 7px; color: var(--ops-green); background: rgba(7,16,22,.48); box-shadow: 0 3px 10px rgba(0,0,0,.2); cursor: pointer; backdrop-filter: blur(6px); }
.ops-basemap-trigger:hover,.ops-basemap-trigger[aria-expanded="true"] { color: #dffaf0; border-color: rgba(101,214,170,.58); background: rgba(7,22,27,.72); }
.ops-basemap-trigger svg { width: 17px; height: 17px; overflow: visible; fill: rgba(101,214,170,.16); stroke: currentColor; stroke-width: 1.55; stroke-linecap: round; stroke-linejoin: round; }
.ops-basemap-gallery button i { display: block; border-radius: 3px; background-color: #14242b; background-position: center; background-size: cover; }
.ops-basemap-gallery button span { overflow: hidden; font: 700 6.8px "Roboto",sans-serif; line-height: 12px; text-align: center; text-overflow: ellipsis; white-space: nowrap; }
.ops-basemap-gallery button[data-basemap-option="light"] i { background-image: linear-gradient(28deg,transparent 43%,#82b5b0 44% 48%,transparent 49%),linear-gradient(148deg,transparent 46%,#d9b65f 47% 51%,transparent 52%),linear-gradient(135deg,#eef0e8,#cfd8d3); }
.ops-basemap-gallery button[data-basemap-option="dark"] i { background-image: linear-gradient(35deg,transparent 43%,#4ecbad 44% 48%,transparent 49%),linear-gradient(145deg,transparent 47%,#e4bd58 48% 52%,transparent 53%),linear-gradient(135deg,#10202a,#071018); }
.ops-basemap-gallery button[data-basemap-option="satellite"] i { background-image: radial-gradient(circle at 68% 32%,#9a966b 0 12%,transparent 13%),linear-gradient(36deg,#3c5942 0 35%,#7f8157 36% 61%,#566c4a 62% 100%); }
.ops-basemap-gallery { width: 176px; padding: 5px; position: absolute; right: 65px; bottom: 0; display: grid; grid-template-columns: repeat(3,52px); gap: 5px; border: 1px solid rgba(166,195,204,.2); border-radius: 8px; background: rgba(8,20,29,.94); box-shadow: 0 8px 26px rgba(0,0,0,.38); backdrop-filter: blur(12px); }
.ops-basemap-gallery[hidden] { display: none; }
.ops-basemap-gallery button { height: 47px; padding: 3px; display: grid; grid-template-rows: 28px 12px; gap: 1px; border: 1px solid transparent; border-radius: 5px; color: #9db0b4; background: rgba(255,255,255,.025); cursor: pointer; }
.ops-basemap-gallery button:hover { color: #e1eaeb; border-color: rgba(166,195,204,.28); }
.ops-basemap-gallery button.active { color: var(--ops-green); border-color: rgba(101,214,170,.7); box-shadow: inset 0 0 0 1px rgba(101,214,170,.14); }
[data-theme="light"] .ops-map-zoom-float { color: #197b60; background: rgba(248,252,251,.42); }
[data-theme="light"] .ops-basemap-trigger { color: #197b60; border-color: rgba(34,79,70,.25); background: rgba(248,252,251,.56); box-shadow: 0 3px 10px rgba(37,69,62,.14); }
[data-theme="light"] .ops-basemap-gallery { border-color: rgba(34,79,70,.18); background: rgba(248,252,251,.96); box-shadow: 0 8px 22px rgba(37,69,62,.17); }
[data-theme="light"] .ops-basemap-gallery button { color: #617873; }
[data-theme="light"] .ops-basemap-gallery button.active { color: #197b60; }

.analysis-view { height: 100%; position: relative; display: none; grid-template-columns: 222px minmax(0,1fr); background: #071018; }
.analysis-view.active { display: grid !important; }
.analysis-view.analysis-rail-collapsed { grid-template-columns: minmax(0,1fr); }
.analysis-view.analysis-rail-collapsed .analysis-rail { display: none; }
.analysis-view.analysis-rail-collapsed .analysis-heading,.analysis-view.analysis-rail-collapsed .congestion-heading { padding-left: 148px; }
.analysis-rail { min-height: 0; display: grid; grid-template-rows: 54px 47px minmax(0,1fr); border-right: 1px solid var(--ops-line); background: #09141c; }
.analysis-rail > header { padding: 0 9px 0 14px; display: flex; align-items: center; justify-content: space-between; gap: 8px; border-bottom: 1px solid var(--ops-line); }.analysis-rail > header strong,.analysis-rail > header small { display: block; }.analysis-rail > header strong { color: #c6d2d5; font-size: 10px; }.analysis-rail > header small { margin-top: 3px; color: #536b75; font-size: 8.5px; }.analysis-rail-collapse { height: 26px; padding: 0 7px; border: 1px solid var(--ops-line); border-radius: 6px; color: #70868e; background: #0c1b24; font-size: 7.5px; font-weight: 700; letter-spacing: .25px; cursor: pointer; }.analysis-rail-collapse:hover { color: var(--ops-green); border-color: rgba(101,214,170,.32); }
.analysis-rail-handle { position: absolute; z-index: 24; left: 10px; top: 10px; height: 31px; padding: 0 9px; border: 1px solid rgba(101,214,170,.28); border-radius: 7px; color: #81979e; background: rgba(8,20,29,.96); box-shadow: 0 8px 22px rgba(0,0,0,.28); font-size: 8px; font-weight: 700; letter-spacing: .3px; cursor: pointer; }.analysis-rail-handle[hidden] { display: none !important; }.analysis-rail-handle span { margin-right: 6px; color: var(--ops-green); }.analysis-rail-handle:hover { color: #d8e2e4; border-color: rgba(101,214,170,.5); }
.analysis-rail .analysis-tool[hidden],.analysis-rail .analysis-group[hidden] { display:none!important; }
.tool-search { margin: 9px 11px 7px; padding: 0 9px; display: grid; grid-template-columns: 13px 1fr; gap: 6px; align-items: center; border: 1px solid var(--ops-line); border-radius: 7px; background: #0b1821; }.tool-search > span { width: 8px; height: 8px; position: relative; border: 1px solid #657b84; border-radius: 50%; }.tool-search > span::after { content: ""; position: absolute; width: 4px; height: 1px; right: -4px; bottom: -2px; background: #657b84; transform: rotate(45deg); }.tool-search input { width: 100%; border: 0; outline: 0; color: #b9c7ca; background: transparent; font-size: 9.5px; }.tool-search input::placeholder { color: #506771; }
#analysis-tools { min-height: 0; padding: 4px 9px 18px; overflow-y: auto; scrollbar-width: thin; scrollbar-color: #20343d transparent; }.analysis-group { margin: 13px 7px 5px; color: #415b66; font-size: 8.5px; font-weight: 700; letter-spacing: .75px; text-transform: uppercase; }.analysis-group:first-child { margin-top: 4px; }
.analysis-tool { width: 100%; min-height: 39px; padding: 5px 7px; display: grid; grid-template-columns: 25px 1fr 5px; gap: 8px; align-items: center; border: 0; border-radius: 7px; color: #73878f; background: transparent; text-align: left; cursor: pointer; }.analysis-tool:hover { background: rgba(255,255,255,.025); }.analysis-tool.active { color: #d5dfe1; background: rgba(101,214,170,.065); }.analysis-tool > span { width: 23px; height: 23px; display: grid; place-items: center; border: 1px solid var(--ops-line); border-radius: 5px; color: #718892; font-size: 8.5px; font-weight: 700; }.analysis-tool.active > span { border-color: rgba(101,214,170,.25); color: var(--ops-green); background: rgba(101,214,170,.055); }.analysis-tool strong { overflow: hidden; font-size: 9px; font-weight: 500; text-overflow: ellipsis; white-space: nowrap; }.analysis-tool > i { width: 4px; height: 4px; border-radius: 50%; background: #314952; }.analysis-tool.active > i { background: var(--ops-green); }
.analysis-tool.canonical-migrated > i { width:5px; height:5px; background:var(--ops-green); box-shadow:0 0 0 3px rgba(101,214,170,.08),0 0 8px rgba(101,214,170,.35); }
.analysis-main { min-width: 0; min-height: 0; display: grid; grid-template-rows: 60px minmax(0,1fr); }
.analysis-print-cover { display: none; }
.analysis-filters { padding: 8px 14px; display: grid; grid-template-columns: minmax(115px,1fr) 95px 75px 75px minmax(170px,1.2fr) minmax(170px,1.2fr) 66px; gap: 7px; align-items: stretch; border-bottom: 1px solid var(--ops-line); background: #0a151d; }.analysis-filters label { padding: 7px 8px; display: flex; flex-direction: column; justify-content: center; border: 1px solid var(--ops-line); border-radius: 6px; background: #0c1922; }.analysis-filters label > span:first-child { color: #4e6670; font-size: 8px; letter-spacing: .5px; }.analysis-filters select,.analysis-filters input { width: 100%; margin-top: 2px; border: 0; outline: 0; color: #aebdc1; background: transparent; font-size: 9.5px; }.analysis-filters select option { background: #0c1922; }.analysis-filters button { border: 1px solid rgba(101,214,170,.25); border-radius: 6px; color: var(--ops-green); background: rgba(101,214,170,.07); font-size: 8.5px; font-weight: 700; cursor: pointer; }
.analysis-content { min-height: 0; padding: 16px 18px 25px; overflow-y: auto; }
.analysis-heading { height: 46px; margin-bottom: 12px; display: flex; align-items: center; justify-content: space-between; }.analysis-heading > div:first-child { display: flex; gap: 10px; align-items: center; }.analysis-heading > div:first-child > span { width: 34px; height: 34px; display: grid; place-items: center; border: 1px solid rgba(101,214,170,.23); border-radius: 8px; color: var(--ops-green); background: rgba(101,214,170,.05); font-size: 9.5px; font-weight: 700; }.analysis-heading p { margin: 0 0 2px; color: #506974; font-size: 8.5px; letter-spacing: .7px; }.analysis-heading h2 { margin: 0; color: #dce5e7; font: 600 18px "Manrope",sans-serif; letter-spacing: -.35px; }.analysis-source { padding: 7px 9px; display: grid; grid-template-columns: 7px 1fr; gap: 7px; align-items: center; border: 1px solid var(--ops-line); border-radius: 7px; background: #0b1821; }.analysis-source > i { width: 6px; height: 6px; border-radius: 50%; background: var(--ops-green); }.analysis-source.pending > i { background: var(--ops-amber); }.analysis-source small,.analysis-source strong { display: block; }.analysis-source small { color: #4e6670; font-size: 8px; }.analysis-source strong { margin-top: 2px; color: #8fa2a8; font-size: 8.5px; }
.analysis-kpis { margin-bottom: 12px; display: grid; grid-template-columns: repeat(4,1fr); gap: 8px; }.analysis-kpis article { min-height: 70px; padding: 11px 12px; border: 1px solid var(--ops-line); border-radius: 8px; background: #0b1720; }.analysis-kpis small,.analysis-kpis strong,.analysis-kpis span { display: block; }.analysis-kpis small { color: #516a74; font-size: 8.5px; letter-spacing: .45px; }.analysis-kpis strong { margin-top: 7px; color: #dbe4e6; font: 600 16px/1 "Manrope",sans-serif; }.analysis-kpis span { margin-top: 5px; color: #667c85; font-size: 8.5px; }
.analysis-kpis.engineering { grid-template-columns:repeat(6,minmax(0,1fr)); }.analysis-kpis.engineering article:nth-child(3),.analysis-kpis.engineering article:nth-child(4),.analysis-kpis.engineering article:nth-child(5) { border-color:rgba(69,183,231,.16); background:linear-gradient(145deg,rgba(69,183,231,.035),#0b1720 62%); }
.analysis-grid { display: grid; grid-template-columns: minmax(0,1.55fr) minmax(280px,.7fr); gap: 10px; }
.analysis-panel { min-width: 0; border: 1px solid var(--ops-line); border-radius: 9px; background: #0b1720; overflow: hidden; }.analysis-panel > header { min-height: 48px; padding: 0 12px; display: flex; align-items: center; justify-content: space-between; border-bottom: 1px solid rgba(166,195,204,.1); }.analysis-panel header small { color: #4f6872; font-size: 8px; letter-spacing: .55px; }.analysis-panel header h3 { margin: 3px 0 0; color: #bfcdd0; font-size: 10px; font-weight: 600; }.chart-panel { min-height: 300px; }.canvas-wrap { height: 250px; position: relative; }.canvas-wrap canvas { display: block; }.chart-legend { display: flex; gap: 8px; color: #6d828b; font-size: 8.5px; }.chart-legend span { display: flex; gap: 4px; align-items: center; }.chart-legend i { width: 11px; height: 2px; background: var(--ops-green); }.chart-legend i.p15 { background: var(--ops-amber); }.chart-legend i.p50 { background: var(--ops-violet); }.chart-legend i.p85 { background: var(--ops-blue); }
.chart-empty { position: absolute; inset: 0; display: grid; place-content: center; gap: 5px; text-align: center; }.chart-empty strong { color: #82979e; font-size: 10px; }.chart-empty small { color: #536b74; font-size: 9px; }
.chart-empty[hidden] { display: none; }
.road-profile-tooltip { position: fixed; z-index: 80; width: 280px; padding: 10px 11px; border: 1px solid rgba(101,214,170,.28); border-radius: 8px; color: #8da2a8; background: rgba(6,17,25,.97); box-shadow: 0 12px 32px rgba(0,0,0,.38); pointer-events: none; }.road-profile-tooltip[hidden] { display: none; }.road-profile-tooltip strong,.road-profile-tooltip > span,.road-profile-tooltip em,.road-profile-tooltip > i { display: block; }.road-profile-tooltip strong { color: #e0e9eb; font-size: 10px; }.road-profile-tooltip > span { margin-top: 4px; color: #6f8790; font-size: 9.5px; }.road-profile-tooltip-values { margin-top: 8px; display: grid; grid-template-columns: repeat(3,1fr); gap: 5px; }.road-profile-tooltip-values b { padding: 6px; border: 1px solid rgba(166,195,204,.09); border-radius: 5px; color: #c7d5d8; background: #0a1821; font-size: 10px; }.road-profile-tooltip-values small { display: block; margin-bottom: 3px; color: #526b75; font-size: 8.5px; font-weight: 700; }.road-profile-tooltip em { margin-top: 7px; color: #75cdb3; font-size: 9px; font-style: normal; }.road-profile-tooltip > i { margin-top: 5px; color: #526b75; font-size: 8.5px; font-style: normal; line-height: 1.4; }.road-profile-tooltip-focus { margin-top: 7px !important; padding-top: 6px; border-top: 1px solid rgba(166,195,204,.09); color: #e2bc6b !important; }
.road-profile-tooltip:has(.road-profile-engineering) { width: 345px; }.road-profile-engineering { margin-top: 7px; padding: 7px; border: 1px solid rgba(69,183,231,.14); border-radius: 6px; background: rgba(69,183,231,.035); }.road-profile-engineering > strong { color: #74c8ed; font-size: 8.5px; }.road-profile-engineering > span { margin-top: 5px; display: grid; grid-template-columns: repeat(3,1fr); gap: 4px; }.road-profile-engineering b { color: #9fb1b6; font-size: 8px; font-weight: 500; }.road-profile-engineering small { display: block; margin-top: 5px; color: #5e7780; font-size: 7.7px; line-height: 1.35; }
.summary-panel { min-height: 300px; }.reliability-grid { padding: 10px; display: grid; grid-template-columns: repeat(2,1fr); gap: 7px; }.reliability-grid article { min-height: 72px; padding: 9px; border: 1px solid rgba(166,195,204,.09); border-radius: 7px; background: #0a151e; }.reliability-grid small,.reliability-grid strong,.reliability-grid span { display: block; }.reliability-grid small { color: #4e6670; font-size: 8px; }.reliability-grid strong { margin-top: 7px; color: #d0dcde; font: 600 16px "Manrope",sans-serif; }.reliability-grid span { margin-top: 3px; color: #5d747e; font-size: 8.5px; }.source-audit { padding: 0 10px 10px; }.source-audit div { min-height: 27px; display: flex; align-items: center; justify-content: space-between; border-top: 1px solid rgba(166,195,204,.075); }.source-audit span { color: #4f6771; font-size: 8px; }.source-audit strong { color: #778d95; font-size: 8.5px; }
.profile-panel { min-height: 190px; }.profile-panel > header > span { color: #647b84; font-size: 8.5px; }.profile-matrix { padding: 12px; }.matrix-row { height: 24px; display: grid; grid-template-columns: 42px 1fr; gap: 7px; align-items: center; }.matrix-row > strong { color: #5b737d; font-size: 8.5px; }.matrix-row > div { height: 14px; display: flex; gap: 1px; overflow: hidden; }.matrix-row i { min-width: 2px; flex: 1; border-radius: 1px; background: var(--color); opacity: .88; }.profile-matrix > footer { margin: 5px 0 0 49px; display: flex; justify-content: space-between; color: #526a74; font-size: 8px; }.matrix-empty,.table-empty { min-height: 98px; display: grid; place-items: center; color: #5c737d; font-size: 9px; }.event-summary { display: grid; grid-template-columns: repeat(3,1fr); gap: 8px; }.event-summary span { min-height: 76px; padding: 10px; display: flex; flex-direction: column; justify-content: center; border: 1px solid rgba(166,195,204,.09); border-radius: 7px; background: #0a151e; }.event-summary b { color: #607781; font-size: 8.5px; }.event-summary strong { margin-top: 7px; color: #d2dddf; font: 600 15px "Manrope",sans-serif; }.trip-summary { display: grid; grid-template-columns: repeat(4,1fr); gap: 7px; }.trip-summary article { min-height: 70px; padding: 9px; border: 1px solid rgba(166,195,204,.09); border-radius: 7px; background: #0a151e; }.trip-summary small,.trip-summary strong { display: block; }.trip-summary small { color: #506872; font-size: 8px; }.trip-summary strong { margin-top: 8px; color: #c3d0d3; font-size: 9.5px; }
.matrix-row.engineering { border-top:1px solid rgba(166,195,204,.035); }.matrix-row.engineering > strong { width:44px; color:#748d9a; font-size:7.5px; }.profile-panel:has(.matrix-row.engineering) { min-height:300px; }
.table-panel { min-height: 190px; }.table-panel > header button { height: 26px; padding: 0 9px; border: 1px solid var(--ops-line); border-radius: 6px; color: #748a93; background: #0d1c25; font-size: 8.5px; }.analysis-table { padding: 5px 11px 10px; }.table-row { min-height: 31px; display: grid; grid-template-columns: 1.35fr .55fr .65fr 1fr; gap: 8px; align-items: center; border-bottom: 1px solid rgba(166,195,204,.07); color: #71868f; font-size: 8.5px; }.table-row.head { color: #485f69; font-size: 8px; }.table-row strong { color: #9eafb4; font-size: 8.5px; }.table-row b { color: #748991; font-size: 8.5px; font-weight: 500; }.speed-value { color: var(--c); font-weight: 700; }
.table-row.engineering { min-width:760px; grid-template-columns:1.25fr .72fr .62fr .82fr .95fr 1fr; }.table-row.engineering b:last-child { color:#9ebbb4; }

.analysis-main.congestion-active { grid-template-rows: minmax(0,1fr); }
.analysis-main.congestion-active > .analysis-filters,.analysis-main.congestion-active > .analysis-content { display: none; }
.contract-matrix-workspace[hidden],.contract-case-workspace[hidden],.corridor-monitor-workspace[hidden],.congestion-workspace[hidden],.forecast-workspace[hidden],.scenario-workspace[hidden],.day-type-workspace[hidden],.bottleneck-workspace[hidden],.works-workspace[hidden],.corridor-speed-workspace[hidden],.performance-workspace[hidden],.event-profile-workspace[hidden],.speed-alert-workspace[hidden],.itinerary-workspace[hidden],.od-workspace[hidden],.count-workspace[hidden],.congestion-loading[hidden],.congestion-tooltip[hidden],.count-tooltip[hidden] { display: none !important; }
.contract-matrix-workspace,.contract-case-workspace,.corridor-monitor-workspace,.congestion-workspace,.forecast-workspace,.scenario-workspace,.day-type-workspace,.bottleneck-workspace,.works-workspace,.corridor-speed-workspace,.performance-workspace,.event-profile-workspace,.speed-alert-workspace,.itinerary-workspace,.od-workspace,.count-workspace { min-width: 0; min-height: 0; position: relative; padding: 14px 16px 28px; overflow-y: auto; background: #071018; }
.contract-matrix-workspace,.contract-case-workspace { font-family: Roboto,"Helvetica Neue",Arial,sans-serif; }
.contract-heading { height:auto; min-height:48px; }.contract-heading .congestion-title { min-width:0; }.contract-heading .congestion-title p { margin:4px 0 0; color:#667d86; font-size:10px; }.contract-heading .congestion-source { min-width:270px; }.contract-heading .congestion-source div small,.contract-heading .congestion-source div strong,.contract-heading .congestion-source div span { display:block; }.contract-heading .congestion-source div small { color:#4f6872; font-size:8.5px; letter-spacing:.55px; }.contract-heading .congestion-source div strong { margin-top:2px; color:#a8b9bd; font-size:10px; }.contract-heading .congestion-source div span { margin-top:3px; color:#617983; font-size:8.5px; }
.contract-matrix-toolbar { margin:10px 0 9px; padding:8px; display:grid; grid-template-columns:minmax(220px,1.5fr) minmax(130px,.65fr) minmax(160px,.75fr) 150px; gap:7px; border:1px solid var(--ops-line); border-radius:9px; background:#0a151d; }.contract-matrix-toolbar label { min-width:0; min-height:48px; padding:6px 9px; display:flex; flex-direction:column; justify-content:center; border:1px solid rgba(166,195,204,.12); border-radius:6px; background:#0c1922; }.contract-matrix-toolbar label > span { color:#506973; font-size:8.5px; font-weight:700; letter-spacing:.5px; }.contract-matrix-toolbar :is(input,select) { width:100%; min-width:0; margin-top:4px; border:0; outline:0; color:#b4c2c5; background:transparent; font:500 10px Roboto,sans-serif; }.contract-matrix-toolbar select option { background:#0c1922; }.contract-matrix-toolbar button { border:1px solid rgba(101,214,170,.27); border-radius:6px; color:var(--ops-green); background:rgba(101,214,170,.07); cursor:pointer; }.contract-matrix-toolbar button span,.contract-matrix-toolbar button small { display:block; }.contract-matrix-toolbar button span { font-size:9px; font-weight:700; }.contract-matrix-toolbar button small { margin-top:3px; color:#6d897f; font-size:8.5px; }
.contract-matrix-kpis { margin-bottom:9px; display:grid; grid-template-columns:repeat(5,1fr); gap:7px; }.contract-matrix-kpis article { min-height:66px; padding:10px 11px; border:1px solid var(--ops-line); border-radius:8px; background:#0b1720; }.contract-matrix-kpis small,.contract-matrix-kpis strong,.contract-matrix-kpis span { display:block; }.contract-matrix-kpis small { color:#526b75; font-size:8.5px; letter-spacing:.42px; }.contract-matrix-kpis strong { margin-top:6px; color:#dbe5e7; font-size:18px; }.contract-matrix-kpis span { margin-top:4px; color:#667d85; font-size:8.5px; }
.contract-matrix-card { border:1px solid var(--ops-line); border-radius:9px; background:#0a161f; overflow:hidden; }.contract-matrix-card > header { height:48px; padding:0 12px; display:flex; align-items:center; justify-content:space-between; border-bottom:1px solid var(--ops-line); }.contract-matrix-card header small,.contract-matrix-card header h3 { display:block; }.contract-matrix-card header small { color:#506a74; font-size:8.5px; letter-spacing:.6px; }.contract-matrix-card header h3 { margin:3px 0 0; color:#bdcbce; font-size:11px; }.contract-matrix-card header > span { color:#71878f; font-size:9px; }.contract-matrix-scroll { max-height:calc(100vh - 330px); overflow:auto; }.contract-matrix-card table { width:100%; min-width:1040px; table-layout:fixed; border-collapse:collapse; }.contract-matrix-card th { position:sticky; z-index:2; top:0; padding:10px 11px; border-right:1px solid rgba(166,195,204,.13); color:#d8e4e7; background:#17384c; font-size:9px; letter-spacing:.32px; text-align:left; text-transform:uppercase; }.contract-matrix-card th:first-child { width:27%; }.contract-matrix-card th:nth-child(2) { width:23%; }.contract-matrix-card th:nth-child(3) { width:25%; }.contract-matrix-card th:last-child { width:25%; border-right:0; }.contract-matrix-card td { padding:11px; border-right:1px solid rgba(166,195,204,.085); border-bottom:1px solid rgba(166,195,204,.085); color:#899da3; font-size:9.5px; line-height:1.5; vertical-align:top; }.contract-matrix-card tr:nth-child(even) td { background:rgba(255,255,255,.012); }.contract-matrix-card td:last-child { border-right:0; }.contract-case-cell > div { display:flex; gap:5px; align-items:center; }.contract-kind,.contract-status { padding:3px 5px; border-radius:4px; font-size:7.5px; font-weight:700; letter-spacing:.45px; }.contract-kind { color:#7fb9d5; background:rgba(69,183,231,.08); }.contract-status.operational { color:var(--ops-green); background:rgba(101,214,170,.09); }.contract-status.partial { color:var(--ops-amber); background:rgba(240,168,79,.09); }.contract-status.source-required { color:#f1788b; background:rgba(217,71,95,.1); }.contract-case-cell > strong { display:block; margin-top:7px; color:#c6d4d7; font-size:10.5px; line-height:1.35; }.contract-case-cell p { margin:5px 0 0; color:#718890; }.contract-case-cell button { margin-top:8px; padding:5px 7px; border:1px solid rgba(101,214,170,.18); border-radius:4px; color:#78cbb0; background:rgba(101,214,170,.04); font:700 8px Roboto,sans-serif; cursor:pointer; }.contract-missing { display:block; margin-top:8px; padding-top:7px; border-top:1px dashed rgba(240,168,79,.22); color:#d8a85c; font-size:8.5px; line-height:1.45; }.contract-empty { padding:28px !important; color:#607882 !important; text-align:center; }.contract-matrix-foot { min-height:45px; padding:9px 11px; display:flex; gap:12px; align-items:center; color:#657c85; font-size:8.5px; }.contract-matrix-foot strong { color:#9cafb3; }.contract-matrix-foot span { display:flex; gap:5px; align-items:center; white-space:nowrap; }.contract-matrix-foot i { width:7px; height:7px; border-radius:50%; background:#728891; }.contract-matrix-foot i.operational { background:var(--ops-green); }.contract-matrix-foot i.partial { background:var(--ops-amber); }.contract-matrix-foot i.source-required { background:#d9475f; }.contract-matrix-foot p { margin:0 0 0 auto; max-width:430px; text-align:right; line-height:1.4; }
.contract-case-workspace { padding-bottom:30px; }.contract-case-heading .contract-case-state { min-width:245px; padding:8px 10px; display:grid; grid-template-columns:7px 1fr; gap:8px; align-items:center; border:1px solid var(--ops-line); border-radius:7px; background:#0a1821; }.contract-case-state > i { width:7px; height:7px; border-radius:50%; background:#71868e; }.contract-case-state.operational > i { background:var(--ops-green); box-shadow:0 0 8px rgba(101,214,170,.45); }.contract-case-state.partial > i { background:var(--ops-amber); }.contract-case-state.source-required > i { background:#d9475f; }.contract-case-state small,.contract-case-state strong,.contract-case-state span { display:block; }.contract-case-state small { color:#526b74; font-size:8px; }.contract-case-state strong { margin-top:2px; color:#bac8cb; font-size:10px; }.contract-case-state span { margin-top:3px; color:#667c85; font-size:8.5px; }
.contract-case-kpis { margin:11px 0 9px; display:grid; grid-template-columns:repeat(4,1fr); gap:7px; }.contract-case-kpis article { min-height:72px; padding:11px 12px; border:1px solid var(--ops-line); border-radius:8px; background:#0b1720; }.contract-case-kpis strong,.contract-case-kpis span { display:block; }.contract-case-kpis strong { color:#dce6e8; font-size:18px; }.contract-case-kpis span { margin-top:7px; color:#647c84; font-size:9px; }
.contract-case-grid { display:grid; grid-template-columns:minmax(0,1.25fr) minmax(320px,.75fr); gap:8px; }.contract-case-panel { min-width:0; border:1px solid var(--ops-line); border-radius:9px; background:#0b1720; overflow:hidden; }.contract-case-panel > header { min-height:48px; padding:0 12px; display:flex; align-items:center; justify-content:space-between; border-bottom:1px solid rgba(166,195,204,.09); }.contract-case-panel header small,.contract-case-panel header h3 { display:block; }.contract-case-panel header small { color:#506a74; font-size:8.5px; letter-spacing:.55px; }.contract-case-panel header h3 { margin:3px 0 0; color:#bdcbce; font-size:10.5px; }.contract-case-panel header > span { color:#728991; font-size:8.5px; }.contract-case-panel.readiness > div { padding:8px; display:grid; grid-template-columns:1fr 1fr; gap:7px; }.contract-data-card { min-height:91px; padding:9px; display:grid; grid-template-columns:27px 1fr; gap:9px; border:1px solid rgba(166,195,204,.09); border-radius:7px; background:#09161e; }.contract-data-card > span { width:25px; height:25px; display:grid; place-items:center; border-radius:5px; color:#79cbb1; background:rgba(101,214,170,.08); font-size:8px; font-weight:700; }.contract-data-card.pending > span { color:#e3ab57; background:rgba(240,168,79,.08); }.contract-data-card.rule > span { color:#7fb9dd; background:rgba(69,183,231,.08); }.contract-data-card small,.contract-data-card strong { display:block; }.contract-data-card small { color:#526b75; font-size:8px; letter-spacing:.38px; }.contract-data-card strong { margin-top:6px; color:#90a4aa; font-size:9px; font-weight:500; line-height:1.55; }
.contract-case-panel.method ol { margin:0; padding:9px 11px; list-style:none; }.contract-case-panel.method li { min-height:42px; display:grid; grid-template-columns:25px 1fr; gap:8px; align-items:center; border-bottom:1px solid rgba(166,195,204,.07); }.contract-case-panel.method li b { color:#6ccdad; font-size:8px; }.contract-case-panel.method li span { color:#7e939a; font-size:9px; line-height:1.35; }.contract-case-panel.method > p { margin:0; padding:10px 12px; color:#748a92; background:#09161e; font-size:9px; line-height:1.5; }.contract-case-panel.method > p strong { display:block; margin-bottom:4px; color:#aebdc1; }.contract-case-panel.sources { min-height:210px; }.contract-case-panel.sources > p { margin:0; padding:14px; color:#82969d; font-size:9.5px; line-height:1.6; }.contract-case-dependency { margin:0 12px 12px; padding:10px; border:1px solid rgba(240,168,79,.18); border-radius:7px; background:rgba(240,168,79,.035); }.contract-case-dependency span,.contract-case-dependency strong { display:block; }.contract-case-dependency span { color:#d9a252; font-size:8px; font-weight:700; letter-spacing:.45px; }.contract-case-dependency strong { margin-top:6px; color:#9f8c70; font-size:9px; line-height:1.45; }.contract-case-panel.sources > button { margin:0 12px 12px; padding:8px 10px; border:1px solid rgba(101,214,170,.25); border-radius:5px; color:var(--ops-green); background:rgba(101,214,170,.06); font:700 8.5px Roboto,sans-serif; cursor:pointer; }.contract-case-panel.related > div { padding:8px; display:grid; grid-template-columns:repeat(2,1fr); gap:7px; }.contract-case-panel.related button { min-height:59px; padding:7px; display:grid; grid-template-columns:27px 1fr; grid-template-rows:1fr 1fr; gap:1px 8px; align-items:center; border:1px solid rgba(166,195,204,.09); border-radius:7px; color:#83989f; background:#09161e; text-align:left; cursor:pointer; }.contract-case-panel.related button > span { grid-row:1/3; width:27px; height:27px; display:grid; place-items:center; border:1px solid rgba(101,214,170,.2); border-radius:5px; color:var(--ops-green); background:rgba(101,214,170,.05); font-size:8px; font-weight:700; }.contract-case-panel.related button strong { align-self:end; color:#aebdc1; font-size:9px; }.contract-case-panel.related button small { align-self:start; color:#58717a; font-size:7.5px; }
.contract-matrix-card td { font-size:10.2px; }.contract-kind,.contract-status { font-size:8px; }.contract-case-cell > strong { font-size:11.2px; }.contract-case-cell p { font-size:9.8px; }.contract-case-cell button { font-size:8.5px; }.contract-missing,.contract-matrix-foot { font-size:9px; }

/* UC07 · iluminación, tráfico y seguridad */
.lighting-loading { min-height:460px; display:grid; place-content:center; justify-items:center; gap:10px; color:#718993; text-align:center; }.lighting-loading i { width:30px; height:30px; border:3px solid rgba(101,214,170,.16); border-top-color:#65d6aa; border-radius:50%; animation:ops-spin .8s linear infinite; }.lighting-loading strong { color:#c8d6d9; font-size:14px; }.lighting-loading span { max-width:470px; font-size:11px; line-height:1.55; }
.lighting-heading { gap:16px; }.lighting-heading > button { min-height:40px; padding:0 13px; border:1px solid rgba(101,214,170,.28); border-radius:7px; color:#7addbb; background:rgba(101,214,170,.06); font:700 10px Roboto,sans-serif; cursor:pointer; white-space:nowrap; }
.lighting-method-warning { margin:10px 0; padding:10px 12px; display:grid; grid-template-columns:max-content 1fr; gap:12px; align-items:center; border:1px solid rgba(240,168,79,.22); border-radius:8px; background:rgba(240,168,79,.045); }.lighting-method-warning b { color:#efb561; font-size:10px; letter-spacing:.45px; }.lighting-method-warning span { color:#9b8f7e; font-size:11px; line-height:1.45; }
.lighting-query { margin-bottom:9px; padding:9px; display:grid; grid-template-columns:minmax(170px,1.4fr) minmax(120px,.7fr) minmax(120px,.7fr) auto auto; gap:7px; align-items:end; border:1px solid var(--ops-line); border-radius:8px; background:#0a161f; }.lighting-query > label > span { display:block; margin:0 0 5px 2px; color:#627a84; font-size:9px; font-weight:700; letter-spacing:.55px; }.lighting-query select { width:100%; height:38px; padding:0 10px; border:1px solid rgba(166,195,204,.15); border-radius:6px; color:#c4d2d5; background:#09151d; font:500 11px Roboto,sans-serif; }.lighting-query fieldset { height:38px; padding:0 9px; display:flex; gap:9px; align-items:center; border:1px solid rgba(166,195,204,.12); border-radius:6px; }.lighting-query fieldset label { display:flex; gap:5px; align-items:center; color:#849aa1; font-size:10px; white-space:nowrap; }.lighting-query fieldset input { accent-color:#65d6aa; }.lighting-query > button { height:38px; padding:0 11px; border:1px solid rgba(101,214,170,.25); border-radius:6px; color:#74cfb0; background:rgba(101,214,170,.055); font:700 9px Roboto,sans-serif; cursor:pointer; }
.lighting-safety-kpis { margin-bottom:9px; display:grid; grid-template-columns:repeat(5,minmax(0,1fr)); gap:7px; }.lighting-safety-kpis article { min-height:79px; padding:10px 11px; border:1px solid var(--ops-line); border-radius:8px; background:#0b1720; }.lighting-safety-kpis small,.lighting-safety-kpis strong,.lighting-safety-kpis span { display:block; }.lighting-safety-kpis small { color:#617983; font-size:9px; font-weight:700; letter-spacing:.45px; }.lighting-safety-kpis strong { margin-top:7px; color:#e0e9eb; font-size:19px; }.lighting-safety-kpis span { margin-top:5px; color:#7f949b; font-size:10px; line-height:1.35; }
.lighting-main-grid { display:grid; grid-template-columns:minmax(0,1.5fr) minmax(290px,.5fr); gap:8px; }.lighting-map-card,.lighting-road-card,.lighting-profile-card,.lighting-ranking-card,.lighting-gap-card { min-width:0; border:1px solid var(--ops-line); border-radius:9px; background:#0b1720; overflow:hidden; }.lighting-map-card > header,.lighting-profile-card > header,.lighting-ranking-card > header,.lighting-gap-card > header,.lighting-road-card > header { min-height:51px; padding:8px 11px; display:flex; align-items:center; justify-content:space-between; gap:9px; border-bottom:1px solid rgba(166,195,204,.09); }.lighting-map-card header small,.lighting-profile-card header small,.lighting-ranking-card header small,.lighting-gap-card header small,.lighting-road-card header small { display:block; color:#59717a; font-size:9px; font-weight:700; letter-spacing:.5px; }.lighting-map-card header h3,.lighting-profile-card header h3,.lighting-ranking-card header h3,.lighting-gap-card header h3,.lighting-road-card header h3 { margin:4px 0 0; color:#c5d2d5; font-size:12px; }.lighting-map-card header > span,.lighting-profile-card header > span,.lighting-ranking-card header > span,.lighting-road-card header > span { color:#718991; font-size:9px; text-align:right; }
#lighting-safety-map { height:370px; background:#071018; }.lighting-map-card > footer { min-height:34px; padding:6px 9px; display:flex; gap:13px; align-items:center; flex-wrap:wrap; border-top:1px solid rgba(166,195,204,.08); }.lighting-map-card > footer span,.lighting-profile-legend span { display:flex; gap:5px; align-items:center; color:#748b93; font-size:9.5px; }.lighting-map-card > footer i,.lighting-profile-legend i { width:8px; height:8px; border-radius:50%; background:#7f95a0; }.lighting-map-card i.led,.lighting-profile-legend i.led { background:#75c8ff; }.lighting-map-card i.vsap,.lighting-profile-legend i.vsap { background:#f2bd62; }.lighting-map-card i.gap,.lighting-profile-legend i.gap { width:14px; border-radius:1px; background:repeating-linear-gradient(135deg,#ef6179 0 2px,transparent 2px 4px); }
.lighting-map-popup { min-width:220px; display:grid; gap:5px; font-family:Roboto,sans-serif; }.lighting-map-popup small { color:#4e727c; font-size:9px; font-weight:700; letter-spacing:.4px; }.lighting-map-popup strong { color:#123a45; font-size:12px; }.lighting-map-popup span { color:#48626b; font-size:10px; }.lighting-map-popup em { color:#9a624b; font-size:9px; font-style:normal; line-height:1.4; }
.lighting-road-card > header { display:block; }.lighting-road-card > header span { display:block; margin-top:5px; text-align:left; }.lighting-road-card dl { margin:0; padding:7px 11px; }.lighting-road-card dl > div { min-height:37px; padding:7px 0; display:grid; grid-template-columns:1fr auto; gap:8px; align-items:center; border-bottom:1px solid rgba(166,195,204,.075); }.lighting-road-card dt { color:#768e96; font-size:10px; line-height:1.35; }.lighting-road-card dd { margin:0; color:#b9c9cc; font-size:10px; font-weight:600; text-align:right; }.lighting-road-card > footer,.lighting-gap-card > footer { padding:10px 11px; color:#887d6c; background:rgba(240,168,79,.035); font-size:9.5px; line-height:1.45; }.lighting-priority { padding:4px 6px; border-radius:4px; color:#65d6aa; background:rgba(101,214,170,.07); font-size:9px; }.lighting-priority.medium { color:#f0a84f; background:rgba(240,168,79,.08); }.lighting-priority.high { color:#ef7288; background:rgba(217,71,95,.09); }
.lighting-profile-card { margin-top:8px; }.lighting-profile-card > div { min-height:168px; padding:12px 16px 18px; }.lighting-profile-legend { display:flex; gap:14px; align-items:center; flex-wrap:wrap; }.lighting-map-card i.intersection { background:#ebf3f5; border:2px solid #58c79f; }.lighting-profile-track { position:relative; height:90px; margin:23px 8px 0; }.lighting-profile-track > b { position:absolute; z-index:1; top:31px; left:0; width:100%; height:8px; border-radius:5px; background:#405963; box-shadow:0 0 0 3px #071018; }.lighting-profile-gap { position:absolute; z-index:2; top:27px; height:16px; border:1px solid rgba(239,97,121,.65); background:repeating-linear-gradient(135deg,rgba(239,97,121,.42) 0 4px,rgba(239,97,121,.08) 4px 8px); }.lighting-profile-gap.medium { border-color:rgba(240,168,79,.65); background:repeating-linear-gradient(135deg,rgba(240,168,79,.42) 0 4px,rgba(240,168,79,.08) 4px 8px); }.lighting-profile-gap.low { border-color:rgba(101,214,170,.55); background:repeating-linear-gradient(135deg,rgba(101,214,170,.35) 0 4px,rgba(101,214,170,.06) 4px 8px); }.lighting-profile-point { position:absolute; z-index:5; top:25px; width:3px; height:20px; margin-left:-1px; border-radius:2px; background:#f2bd62; }.lighting-profile-point.led { background:#75c8ff; }.lighting-profile-tick { position:absolute; z-index:7; top:49px; transform:translateX(-50%); }.lighting-profile-tick b { display:block; width:1px; height:8px; margin:auto; background:#45606b; }.lighting-profile-tick span { display:block; margin-top:5px; color:#637b84; font-size:9px; white-space:nowrap; }
.lighting-bottom-grid { margin-top:8px; display:grid; grid-template-columns:minmax(0,1.25fr) minmax(300px,.75fr); gap:8px; }.lighting-ranking-card > header { min-height:58px; }.lighting-ranking-card > header > span { max-width:260px; line-height:1.35; }.lighting-ranking-card > div { max-height:400px; padding:6px; overflow:auto; }.lighting-ranking-card button { width:100%; min-height:47px; padding:6px 8px; display:grid; grid-template-columns:26px 1fr 37px; gap:8px; align-items:center; border:0; border-bottom:1px solid rgba(166,195,204,.07); color:#879da4; background:transparent; text-align:left; cursor:pointer; }.lighting-ranking-card button:hover,.lighting-ranking-card button.active { border-radius:5px; background:rgba(101,214,170,.055); }.lighting-ranking-card button > b { color:#4e6872; font-size:9px; }.lighting-ranking-card button span strong,.lighting-ranking-card button span small { display:block; }.lighting-ranking-card button span strong { color:#b9c8cb; font-size:11px; }.lighting-ranking-card button span small { margin-top:4px; color:#69818a; font-size:9.5px; }.lighting-ranking-card button em { padding:5px 4px; border-radius:4px; color:#65d6aa; background:rgba(101,214,170,.07); font-size:10px; font-style:normal; font-weight:700; text-align:center; }.lighting-ranking-card button em.medium { color:#f0a84f; background:rgba(240,168,79,.08); }.lighting-ranking-card button em.high { color:#ef7288; background:rgba(217,71,95,.09); }
.lighting-gap-card ol { margin:0; padding:7px 11px; list-style:none; }.lighting-gap-card li { min-height:42px; padding:7px 0; display:grid; grid-template-columns:1fr auto; gap:8px; align-items:center; border-bottom:1px solid rgba(166,195,204,.07); }.lighting-gap-card li strong,.lighting-gap-card li small { display:block; }.lighting-gap-card li strong { color:#aebfc3; font-size:10px; }.lighting-gap-card li small { margin-top:4px; color:#617983; font-size:9px; }.lighting-gap-card li > b { color:#ef8798; font-size:10px; }.lighting-gap-card li.empty { grid-template-columns:1fr; }

@media (max-width:1180px) { .lighting-query { grid-template-columns:1fr 1fr 1fr; }.lighting-query fieldset,.lighting-query > button { align-self:end; }.lighting-safety-kpis { grid-template-columns:repeat(3,1fr); }.lighting-main-grid { grid-template-columns:1fr; }.lighting-road-card dl { display:grid; grid-template-columns:1fr 1fr; gap:0 16px; } }
@media (max-width:760px) { .lighting-heading { align-items:flex-start; flex-direction:column; }.lighting-query { grid-template-columns:1fr; }.lighting-safety-kpis,.lighting-bottom-grid { grid-template-columns:1fr; }.lighting-road-card dl { display:block; }.lighting-method-warning { grid-template-columns:1fr; } #lighting-safety-map { height:330px; }.lighting-profile-card > div { overflow-x:auto; }.lighting-profile-track { min-width:720px; } }
.congestion-heading { height: 42px; margin-bottom: 10px; display: flex; align-items: center; justify-content: space-between; }
.congestion-heading > div:first-child { display: flex; gap: 10px; align-items: center; }.congestion-heading > div:first-child > span { width: 34px; height: 34px; display: grid; place-items: center; border: 1px solid rgba(101,214,170,.25); border-radius: 8px; color: var(--ops-green); background: rgba(101,214,170,.06); font-size: 9.5px; font-weight: 700; }
.congestion-heading small,.congestion-heading h2 { display: block; }.congestion-heading small { color: #526b75; font-size: 8.5px; letter-spacing: .7px; }.congestion-heading h2 { margin: 3px 0 0; color: #e0e8ea; font: 600 18px/1 "Manrope",sans-serif; letter-spacing: -.35px; }
.congestion-source { padding: 7px 10px; display: grid; grid-template-columns: 7px 1fr; gap: 8px; align-items: center; border: 1px solid var(--ops-line); border-radius: 7px; background: #0a1821; }.congestion-source > i { width: 6px; height: 6px; border-radius: 50%; background: var(--ops-green); box-shadow: 0 0 7px rgba(101,214,170,.45); }.congestion-source span small,.congestion-source span strong { display: block; }.congestion-source span small { color: #4f6872; font-size: 8px; }.congestion-source span strong { margin-top: 2px; color: #8ea2a8; font-size: 8.5px; }
.congestion-query { padding: 8px; display: grid; grid-template-columns: repeat(12,minmax(0,1fr)); gap: 6px; border: 1px solid var(--ops-line); border-radius: 9px; background: #0a151d; }
.congestion-query > label { min-width: 0; height: 47px; padding: 6px 7px; display: flex; flex-direction: column; justify-content: center; border: 1px solid rgba(166,195,204,.13); border-radius: 6px; background: #0c1922; }.congestion-query > label.wide { grid-column: span 2; }.congestion-query label > span { color: #4e6771; font-size: 8px; font-weight: 700; letter-spacing: .48px; }.congestion-query input,.congestion-query select { width: 100%; min-width: 0; margin-top: 3px; border: 0; outline: 0; color: #b5c3c6; background: transparent; font: 500 9px "DM Sans",sans-serif; }.congestion-query select option { background: #0c1922; }.congestion-query input::-webkit-calendar-picker-indicator { filter: invert(1); opacity: .45; }.inline-control { min-width: 0; display: grid; grid-template-columns: minmax(0,1fr) auto; gap: 4px; align-items: center; }.inline-control button { height: 22px; padding: 0 5px; border: 1px solid rgba(101,214,170,.22); border-radius: 4px; color: var(--ops-green); background: rgba(101,214,170,.055); font-size: 8px; cursor: pointer; }
.waze-analysis-filter { border-color: rgba(51,204,255,.2) !important; background: linear-gradient(135deg,rgba(51,204,255,.055),rgba(12,25,34,.96)) !important; }.waze-analysis-control { min-width:0; margin-top:2px; display:flex; flex-direction:row !important; gap:5px; align-items:center; color:#b5c6ca !important; font-size:9px !important; letter-spacing:0 !important; white-space:nowrap; }.waze-analysis-control input { flex:0 0 auto; width:12px !important; height:12px; margin:0 !important; accent-color:#33ccff; }.waze-analysis-control img { width:17px; height:19px; object-fit:contain; }.waze-analysis-filter:has(input:checked) { border-color:rgba(51,204,255,.46) !important; box-shadow:inset 0 0 0 1px rgba(51,204,255,.08); }.waze-analysis-filter:has(input:checked) > span:first-child { color:#55d8ff; }
.fcd-analysis-filter { border-color:rgba(177,92,255,.2) !important; background:linear-gradient(135deg,rgba(177,92,255,.06),rgba(12,25,34,.96)) !important; }.fcd-analysis-filter > small { margin-top:1px; overflow:hidden; color:#725b87; font-size:7px; line-height:1; text-overflow:ellipsis; white-space:nowrap; }.fcd-analysis-control { min-width:0; margin-top:2px; display:flex; flex-direction:row !important; gap:5px; align-items:center; color:#b5c6ca !important; font-size:9px !important; letter-spacing:0 !important; white-space:nowrap; }.fcd-analysis-control input { flex:0 0 auto; width:12px !important; height:12px; margin:0 !important; accent-color:#b15cff; }.fcd-analysis-control i { position:relative; flex:0 0 19px; height:12px; }.fcd-analysis-control i::before { content:""; position:absolute; inset:5px 0 auto; height:2px; border-radius:2px; background:linear-gradient(90deg,#d9475f,#f08d4f,#f2cf5b,#65d6aa,#45b7e7); transform:rotate(-13deg); box-shadow:0 0 5px rgba(101,214,170,.45); }.fcd-analysis-control i::after { content:""; position:absolute; right:0; top:1px; width:4px; height:4px; border:1px solid #fff; border-radius:50%; background:#45b7e7; }.fcd-analysis-filter:has(input:checked) { border-color:rgba(177,92,255,.48) !important; box-shadow:inset 0 0 0 1px rgba(177,92,255,.09); }.fcd-analysis-filter:has(input:checked) > span:first-child { color:#c596ff; }.fcd-overlay-summary { display:block; margin-top:3px; color:#9f78cc; font-size:7.5px; font-weight:700; letter-spacing:.25px; }.fcd-overlay-summary.error { color:#f08b9b; }
.congestion-run { grid-column: span 1; min-width: 0; border: 1px solid rgba(101,214,170,.27); border-radius: 6px; color: var(--ops-green); background: rgba(101,214,170,.075); cursor: pointer; }.congestion-run span,.congestion-run small { display: block; }.congestion-run span { font-size: 8.5px; font-weight: 700; }.congestion-run small { margin-top: 3px; color: #6f8c83; font-size: 8px; }
.congestion-corridor { min-height: 35px; padding: 5px 7px; display: flex; gap: 5px; align-items: center; border-bottom: 1px solid var(--ops-line); }.congestion-corridor > span { margin-right: 3px; color: #4d6570; font-size: 8px; font-weight: 700; letter-spacing: .55px; }.congestion-corridor button { height: 23px; padding: 0 7px 0 4px; display: flex; gap: 5px; align-items: center; border: 1px solid rgba(101,214,170,.2); border-radius: 5px; color: #9db0b4; background: rgba(101,214,170,.045); font-size: 8.5px; cursor: pointer; }.congestion-corridor button strong { width: 15px; height: 15px; display: grid; place-items: center; border-radius: 3px; color: var(--ops-green); background: rgba(101,214,170,.1); font-size: 8px; }.congestion-corridor button i { color: #617881; font-style: normal; }.congestion-corridor button:disabled i { display: none; }.congestion-corridor > small { margin-left: auto; color: #506872; font-size: 8px; }
.congestion-kpis { margin: 9px 0; display: grid; grid-template-columns: repeat(5,1fr); gap: 7px; }.congestion-kpis article { min-height: 63px; padding: 9px 11px; border: 1px solid var(--ops-line); border-radius: 8px; background: #0b1720; }.congestion-kpis small,.congestion-kpis strong,.congestion-kpis span { display: block; }.congestion-kpis small { color: #506973; font-size: 8px; letter-spacing: .45px; }.congestion-kpis strong { margin-top: 6px; color: #dce5e7; font: 600 15px/1 "Manrope",sans-serif; }.congestion-kpis span { margin-top: 4px; color: #607780; font-size: 8.5px; }
.congestion-kpis.capacity-aware { grid-template-columns:repeat(7,minmax(0,1fr)); }.bottleneck-kpis.capacity-aware { grid-template-columns:repeat(6,minmax(0,1fr)); }.congestion-kpis.capacity-aware article:nth-child(3),.congestion-kpis.capacity-aware article:nth-child(4),.congestion-kpis.capacity-aware article:nth-child(5),.congestion-kpis.capacity-aware article:nth-child(6) { border-color:rgba(69,183,231,.16); background:linear-gradient(145deg,rgba(69,183,231,.035),#0b1720 62%); }
.congestion-controls { min-height: 39px; padding: 5px 8px; display: grid; grid-template-columns: minmax(240px,1fr) auto minmax(180px,310px) auto; gap: 12px; align-items: center; border: 1px solid var(--ops-line); border-bottom: 0; border-radius: 8px 8px 0 0; background: #0a161f; }.congestion-controls > div strong,.congestion-controls > div span { display: block; }.congestion-controls > div strong { color: #9cafb4; font-size: 8.5px; }.congestion-controls > div span { margin-top: 2px; color: #536b75; font-size: 8px; white-space: nowrap; overflow: hidden; text-overflow: ellipsis; }.congestion-controls label { display: grid; grid-template-columns: auto 1fr auto; gap: 7px; align-items: center; }.congestion-controls label span { color: #58707a; font-size: 8px; }.congestion-controls input { width: 100%; accent-color: var(--ops-green); }.congestion-controls label b { color: #94a8ad; font-size: 8.5px; }.congestion-controls > button { height: 26px; padding: 0 9px; border: 1px solid var(--ops-line); border-radius: 5px; color: #7f959d; background: #0d1d27; font-size: 8px; font-weight: 700; cursor: pointer; }.congestion-background-control { min-height:26px; padding:0 9px; grid-template-columns:auto auto auto !important; border:1px solid rgba(101,214,170,.22); border-radius:5px; background:rgba(101,214,170,.055); cursor:pointer; }.congestion-background-control input { width:12px !important; height:12px; margin:0; }.congestion-background-control span { color:#8da5a8 !important; font-weight:700; letter-spacing:.25px; }.congestion-background-control b { min-width:42px; color:var(--ops-green) !important; text-align:right; }.congestion-background-control:has(input:not(:checked)) { border-color:rgba(127,157,166,.16); background:rgba(127,157,166,.035); }.congestion-background-control:has(input:not(:checked)) b { color:#637881 !important; }
.congestion-stage { height: 470px; display: grid; grid-template-columns: minmax(270px,1fr) minmax(250px,.72fr) minmax(270px,1fr); border: 1px solid var(--ops-line); background: #09151d; }
.congestion-stage > article { min-width: 0; min-height:0; height:100%; overflow:hidden; border-right: 1px solid var(--ops-line); }.congestion-stage > article:last-child { border-right: 0; }.congestion-stage > article.congestion-heatmap { display:grid; grid-template-rows:48px minmax(0,1fr); }.congestion-stage article > header { height: 48px; min-height:0; box-sizing:border-box; padding: 0 10px; display: flex; align-items: center; justify-content: space-between; border-bottom: 1px solid rgba(166,195,204,.1); }.congestion-stage header small,.congestion-stage header h3 { display: block; }.congestion-stage header small { color: #4e6872; font-size: 8px; letter-spacing: .55px; }.congestion-stage header h3 { margin: 3px 0 0; color: #aebfc3; font-size: 9.5px; }.congestion-stage header > span,.congestion-stage header > time { color: #647b84; font-size: 8.5px; }.congestion-map-panel header > time { padding: 5px 7px; border: 1px solid rgba(101,214,170,.18); border-radius: 4px; color: var(--ops-green); background: rgba(101,214,170,.05); font-weight: 700; }
.congestion-canvas-wrap { min-height:0; height:auto; overflow:hidden; }.congestion-canvas-wrap canvas { width:100%; height:100%; display: block; cursor: crosshair; }.congestion-map-panel { position: relative; }.congestion-map-panel #congestion-map { height: calc(100% - 48px); background: #08131c; }.congestion-map-legend { position: absolute; z-index: 2; left: 8px; bottom: 8px; height: 25px; padding: 0 7px; display: flex; gap: 4px; align-items: center; border: 1px solid var(--ops-line); border-radius: 5px; background: rgba(7,18,26,.92); }.congestion-map-legend span { margin-right: 2px; color: #59717b; font-size: 8px; }.congestion-map-legend i { width: 12px; height: 3px; border-radius: 2px; }.congestion-map-legend i.free { background: var(--ops-green); }.congestion-map-legend i.medium { background: #e5c657; }.congestion-map-legend i.severe { background: var(--ops-red); }.congestion-map-legend small { color: #657c84; font-size: 8px; }
.congestion-detail-row { margin-top: 8px; display: grid; grid-template-columns: minmax(300px,1fr) minmax(260px,.8fr) minmax(300px,1fr); gap: 8px; }.congestion-detail-row > article { min-height: 139px; border: 1px solid var(--ops-line); border-radius: 8px; background: #0b1720; overflow: hidden; }.congestion-detail-row article > header { height: 43px; padding: 0 10px; display: flex; align-items: center; justify-content: space-between; border-bottom: 1px solid rgba(166,195,204,.09); }.congestion-detail-row header small { color: #4e6771; font-size: 8px; }.congestion-detail-row header h3 { margin: 3px 0 0; color: #aebfc2; font-size: 9px; }.congestion-detail-row header button { border: 0; color: var(--ops-green); background: transparent; font-size: 8px; cursor: pointer; }.congestion-inspector > div { padding: 9px 10px; }.congestion-inspector > div > span { color: #617882; font-size: 8.5px; }.congestion-inspector dl { margin: 0; display: grid; grid-template-columns: repeat(5,1fr); gap: 5px; }.congestion-inspector dl div { padding: 6px; border: 1px solid rgba(166,195,204,.08); border-radius: 5px; background: #0a151e; }.congestion-inspector dt { color: #506872; font-size: 8px; }.congestion-inspector dd { margin: 5px 0 0; color: #c0ced1; font-size: 9px; font-weight: 600; }.congestion-events header > span { padding: 4px 6px; border-radius: 4px; color: #c49054; background: rgba(240,168,79,.07); font-size: 8px; }.congestion-events header > span.active { color:#55d8ff; background:rgba(51,204,255,.08); }.congestion-events p { margin: 0; padding: 8px 12px 12px; color: #657b84; font-size: 8.5px; line-height: 1.5; }.waze-analysis-legend { min-height:28px; padding:5px 10px 0; display:flex; flex-wrap:wrap; gap:7px; }.waze-analysis-legend span { display:flex; gap:3px; align-items:center; color:#6e858d; font-size:8px; }.waze-analysis-legend img { width:15px; height:17px; object-fit:contain; }.waze-analysis-legend b { color:#c6d2d5; }.congestion-worst > div { padding: 4px 8px 8px; }.congestion-worst button { width: 100%; min-height: 27px; display: grid; grid-template-columns: 1fr 43px 42px; gap: 7px; align-items: center; border: 0; border-bottom: 1px solid rgba(166,195,204,.065); color: #6c828a; background: transparent; text-align: left; cursor: pointer; }.congestion-worst button:hover { background: rgba(255,255,255,.018); }.congestion-worst button strong { color: #95a8ad; font-size: 8.5px; }.congestion-worst button span { font-size: 8.5px; }.congestion-worst button b { color: var(--ops-red); font-size: 8.5px; text-align: right; }
.congestion-loading { position: absolute; z-index: 12; inset: 120px 16px 28px; display: grid; place-content: center; gap: 9px; border: 1px solid var(--ops-line); border-radius: 9px; background: rgba(7,16,24,.86); backdrop-filter: blur(4px); text-align: center; }.congestion-loading > span { width: 20px; height: 20px; margin: auto; border: 2px solid rgba(101,214,170,.15); border-top-color: var(--ops-green); border-radius: 50%; animation: congestion-spin .8s linear infinite; }.congestion-loading strong { color: #8fa4a9; font-size: 9.5px; }.congestion-loading.error > span { width: 8px; height: 8px; border: 0; background: var(--ops-red); animation: none; }.congestion-tooltip { position: absolute; z-index: 20; width: 185px; padding: 8px 9px; border: 1px solid var(--ops-line-2); border-radius: 6px; color: #91a5aa; background: rgba(7,18,26,.97); box-shadow: 0 9px 25px rgba(0,0,0,.35); pointer-events: none; }.congestion-tooltip strong,.congestion-tooltip span,.congestion-tooltip b { display: block; }.congestion-tooltip strong { color: #c7d4d7; font-size: 9px; }.congestion-tooltip span { margin-top: 3px; color: #617983; font-size: 8.5px; }.congestion-tooltip b { margin-top: 5px; color: var(--ops-green); font-size: 8.5px; }
@keyframes congestion-spin { to { transform: rotate(360deg); } }

.corridor-add-period { border-color: rgba(69,183,231,.24); color: var(--ops-blue); background: rgba(69,183,231,.065); }.corridor-add-period:disabled { opacity:.42; cursor:not-allowed; }
.corridor-periods { min-height: 49px; padding: 5px 7px; display: grid; grid-template-columns: auto minmax(260px,1fr) auto minmax(180px,.55fr); gap: 7px; align-items: center; border-bottom: 1px solid var(--ops-line); }.corridor-periods > span { color: #4d6570; font-size: 8px; font-weight: 700; letter-spacing: .55px; }.corridor-period-list { min-width:0; display:flex; gap:5px; overflow-x:auto; scrollbar-width:thin; }.corridor-period-item { min-width:154px; height:34px; position:relative; display:grid; grid-template-columns:1fr 18px; border:1px solid var(--ops-line); border-radius:6px; background:#0a1720; overflow:hidden; }.corridor-period-item.active { border-color:rgba(101,214,170,.35); background:rgba(101,214,170,.055); }.corridor-period-item > button:first-child { min-width:0; padding:0 4px; display:grid; grid-template-columns:20px 1fr; grid-template-rows:1fr 1fr; gap:0 5px; align-items:center; border:0; color:#7d9299; background:transparent; text-align:left; cursor:pointer; }.corridor-period-item i,.corridor-reference-pill i { width:19px; height:19px; grid-row:1/3; display:grid; place-items:center; border-radius:4px; color:var(--period-color,var(--ops-green)); background:color-mix(in srgb,var(--period-color,var(--ops-green)) 12%,transparent); font-size:8.5px; font-style:normal; font-weight:700; }.corridor-period-item strong,.corridor-period-item small { min-width:0; display:block; overflow:hidden; text-overflow:ellipsis; white-space:nowrap; }.corridor-period-item strong { align-self:end; color:#a6b7bb; font-size:8.5px; }.corridor-period-item small { align-self:start; margin-top:2px; color:#536b74; font-size:8px; }.corridor-period-remove { width:18px; border:0; border-left:1px solid rgba(166,195,204,.08); color:#607781; background:transparent; cursor:pointer; }.corridor-period-remove:hover { color:var(--ops-red); background:rgba(217,71,95,.06); }.corridor-reference-pill { min-width:128px; height:34px; padding:0 7px 0 5px; display:grid; grid-template-columns:20px 1fr; gap:5px; align-items:center; border:1px dashed rgba(166,195,204,.16); border-radius:6px; }.corridor-reference-pill span strong,.corridor-reference-pill span small { display:block; }.corridor-reference-pill strong { color:#879ba1; font-size:8.5px; }.corridor-reference-pill small { margin-top:2px; color:#4f6770; font-size:8px; }.corridor-periods > b { color:#536b75; font-size:8px; font-weight:500; line-height:1.35; text-align:right; }
.corridor-bin-toolbar { min-height: 42px; padding: 5px 8px; display: grid; grid-template-columns: minmax(175px,.7fr) 1fr auto; gap: 10px; align-items: center; border: 1px solid var(--ops-line); border-bottom: 0; border-radius: 8px 8px 0 0; background: #0a161f; }.corridor-bin-toolbar small,.corridor-bin-toolbar strong { display: block; }.corridor-bin-toolbar small { color: #4f6872; font-size: 8px; letter-spacing: .5px; }.corridor-bin-toolbar strong { margin-top: 2px; color: #9cafb4; font-size: 9px; }.corridor-bin-actions { display:flex; gap:8px; align-items:center; }.corridor-bin-actions span { color:#5f767f; font-size:8px; font-weight:700; letter-spacing:.35px; }.corridor-bin-actions button { height: 26px; padding: 0 9px; border: 1px solid var(--ops-line); border-radius: 5px; color: #7f959d; background: #0d1d27; font-size: 8px; font-weight: 700; cursor: pointer; }.corridor-bin-legend { min-width:0; display: flex; gap: 8px; align-items: center; justify-content: center; overflow-x:auto; }.corridor-bin-legend span { flex:0 0 auto; display: flex; gap: 4px; align-items: center; color: #647b84; font-size: 8px; }.corridor-bin-legend i { width: 13px; height: 4px; border-radius: 2px; background: var(--c); }
.corridor-speed-stage { height: 430px; min-height:430px; display: grid; grid-template-columns: minmax(270px,1fr) minmax(250px,.72fr) minmax(270px,1fr); border: 1px solid var(--ops-line); background: #09151d; overflow:hidden; }.corridor-speed-stage > article { min-width: 0; min-height:0; height:100%; overflow:hidden; border-right: 1px solid var(--ops-line); }.corridor-speed-stage > article:last-child { border-right: 0; }.corridor-speed-stage > article.corridor-bin-panel { display:grid; grid-template-rows:47px minmax(0,1fr); }.corridor-speed-stage article > header { height: 47px; min-height:47px; box-sizing:border-box; padding: 0 10px; display: flex; align-items: center; justify-content: space-between; border-bottom: 1px solid rgba(166,195,204,.1); }.corridor-speed-stage header small,.corridor-speed-stage header h3 { display: block; }.corridor-speed-stage header small { color: #4e6872; font-size: 8px; letter-spacing: .55px; }.corridor-speed-stage header h3 { margin: 3px 0 0; color: #aebfc3; font-size: 9.5px; }.corridor-speed-stage header > span { color: #647b84; font-size: 8.5px; }.corridor-bin-canvas { min-height:0; height:auto; overflow:hidden; }.corridor-bin-canvas canvas { width:100%; height:100%; display: block; cursor: crosshair; }.corridor-speed-map-panel { position: relative; }.corridor-speed-map-panel #corridor-speed-map { height: calc(100% - 47px); background: #08131c; }.corridor-map-note { position: absolute; z-index: 2; left: 8px; bottom: 8px; min-height: 25px; padding: 0 7px; display: flex; gap: 6px; align-items: center; border: 1px solid var(--ops-line); border-radius: 5px; background: rgba(7,18,26,.92); }.corridor-map-note i { width: 13px; height: 4px; border-radius: 2px; background: linear-gradient(90deg,var(--ops-red),#e5c657,var(--ops-green),var(--ops-blue)); }.corridor-map-note span { color: #5e757e; font-size: 8px; }
.corridor-speed-bottom { margin-top: 8px; display: grid; grid-template-columns: minmax(420px,1.4fr) minmax(270px,.8fr) minmax(280px,.8fr); gap: 8px; }.corridor-speed-bottom > article { min-width: 0; min-height:0; height: 225px; border: 1px solid var(--ops-line); border-radius: 8px; background: #0b1720; overflow: hidden; }.corridor-speed-bottom article > header { height: 44px; min-height:44px; box-sizing:border-box; padding: 0 10px; display: flex; align-items: center; justify-content: space-between; border-bottom: 1px solid rgba(166,195,204,.09); }.corridor-speed-bottom header small { color: #4e6771; font-size: 8px; }.corridor-speed-bottom header h3 { margin: 3px 0 0; color: #aebfc2; font-size: 9px; }.corridor-profile-panel { display:grid; grid-template-rows:44px minmax(0,1fr); }.corridor-profile-panel header > div:last-child { display: flex; gap: 9px; }.corridor-profile-panel header > div:last-child span { display: flex; gap: 4px; align-items: center; color: #637a83; font-size: 8px; }.corridor-profile-panel header i { width: 12px; height: 2px; background: #65d6aa; }.corridor-profile-panel header i.reference { background: #6b8290; }.corridor-profile-panel > div:last-child { min-height:0; height:auto; overflow:hidden; }.corridor-profile-panel canvas { width:100%; height:100%; display: block; }.corridor-inspector > div { padding: 9px 10px; }.corridor-inspector > div > span { color: #617882; font-size: 8.5px; line-height: 1.5; }.corridor-inspector dl { margin: 0; display: grid; grid-template-columns: repeat(2,1fr); gap: 5px; }.corridor-inspector dl div { padding: 6px; border: 1px solid rgba(166,195,204,.08); border-radius: 5px; background: #0a151e; }.corridor-inspector dt { color: #506872; font-size: 8px; }.corridor-inspector dd { margin: 4px 0 0; color: #c0ced1; font-size: 8.5px; font-weight: 600; }.corridor-critical > div { padding: 4px 8px 8px; }.corridor-critical button { width: 100%; min-height: 25px; display: grid; grid-template-columns: 1fr 55px 38px; gap: 7px; align-items: center; border: 0; border-bottom: 1px solid rgba(166,195,204,.065); color: #6c828a; background: transparent; text-align: left; cursor: pointer; }.corridor-critical button:hover { background: rgba(255,255,255,.018); }.corridor-critical button strong { color: #95a8ad; font-size: 8.5px; }.corridor-critical button span { font-size: 8px; }.corridor-critical button b { color: var(--ops-red); font-size: 8.5px; text-align: right; }

.event-profile-workspace,.event-profile-workspace * { font-family: Roboto,Arial,sans-serif; }.event-profile-query { padding:8px; display:grid; grid-template-columns:minmax(135px,1.5fr) repeat(2,minmax(72px,.65fr)) repeat(2,minmax(102px,.85fr)) repeat(2,minmax(82px,.65fr)) minmax(130px,1.15fr) minmax(78px,.6fr) minmax(90px,.7fr); gap:6px; border:1px solid var(--ops-line); border-radius:9px; background:#0a151d; }.event-profile-query > label { min-width:0; height:47px; padding:6px 8px; display:flex; flex-direction:column; justify-content:center; border:1px solid rgba(166,195,204,.13); border-radius:6px; background:#0c1922; }.event-profile-query label > span { color:#4e6771; font-size:8px; font-weight:700; letter-spacing:.48px; }.event-profile-query input,.event-profile-query select { width:100%; min-width:0; margin-top:3px; border:0; outline:0; color:#b5c3c6; background:transparent; font:500 9px Roboto,Arial,sans-serif; }.event-profile-query select option { background:#0c1922; }.event-profile-truth { min-height:34px; margin-top:7px; padding:5px 8px; display:grid; grid-template-columns:auto 1fr auto; gap:10px; align-items:center; border:1px solid rgba(101,214,170,.17); border-radius:7px; background:rgba(101,214,170,.035); }.event-profile-truth > span { display:flex; gap:6px; align-items:center; color:#65d6aa; font-size:8px; letter-spacing:.45px; }.event-profile-truth > span i { width:6px; height:6px; border-radius:50%; background:#65d6aa; box-shadow:0 0 8px #65d6aa; }.event-profile-truth p { margin:0; color:#607881; font-size:8px; line-height:1.4; }.event-profile-truth button { height:25px; padding:0 8px; border:1px solid var(--ops-line); border-radius:5px; color:#789099; background:#0d1d27; font-size:8px; cursor:pointer; }.event-profile-kpis { grid-template-columns:repeat(6,1fr); margin-bottom:8px; }.event-profile-stage { display:grid; grid-template-columns:minmax(520px,1.7fr) minmax(210px,.58fr) minmax(220px,.62fr); gap:8px; }.event-profile-stage > article,.event-profile-bottom > article { min-width:0; border:1px solid var(--ops-line); border-radius:8px; background:#0b1720; overflow:hidden; }.event-profile-stage article > header,.event-profile-bottom article > header { height:46px; padding:0 10px; display:flex; align-items:center; justify-content:space-between; border-bottom:1px solid rgba(166,195,204,.09); }.event-profile-stage header small,.event-profile-bottom header small { color:#4e6771; font-size:8px; letter-spacing:.5px; }.event-profile-stage header h3,.event-profile-bottom header h3 { margin:3px 0 0; color:#aebfc2; font-size:9px; }.event-profile-stage header > span,.event-profile-bottom header > span { color:#647b84; font-size:8px; }.event-profile-main-card { height:410px; }.event-profile-main-card > div { height:325px; }.event-profile-main-card canvas,.event-profile-hourly canvas { display:block; cursor:crosshair; }.event-profile-main-card > footer { height:38px; padding:0 10px; display:flex; align-items:center; justify-content:space-between; border-top:1px solid rgba(166,195,204,.07); color:#596f78; font-size:8px; }.event-profile-legend { display:flex; gap:10px; }.event-profile-legend span { display:flex; gap:5px; align-items:center; color:#617881; font-size:8px; }.event-profile-legend i { width:9px; height:9px; border-radius:2px; background:rgba(101,214,170,.7); }.event-profile-legend b { width:17px; height:2px; background:#f0a84f; }.event-profile-types,.event-profile-imd { height:410px; }.event-profile-types > div { padding:6px 8px; }.event-type-row { min-height:48px; position:relative; display:grid; grid-template-columns:7px 1fr auto; gap:7px; align-items:center; border-bottom:1px solid rgba(166,195,204,.065); overflow:hidden; }.event-type-row > i { width:6px; height:23px; border-radius:4px; background:var(--event-color); opacity:.85; }.event-type-row span strong,.event-type-row span small { display:block; }.event-type-row span strong { color:#9eb1b5; font-size:8.5px; }.event-type-row span small { margin-top:3px; color:#566e77; font-size:8px; }.event-type-row > b { color:#8ea3a9; font-size:8.5px; }.event-type-row > em { position:absolute; left:14px; bottom:4px; width:var(--share); height:1px; background:var(--event-color); opacity:.45; }.event-profile-imd-state.available { color:#65d6aa; }.event-profile-imd > div { padding:11px; }.event-profile-imd dl { margin:0; }.event-profile-imd dl > div { min-height:37px; display:flex; align-items:center; justify-content:space-between; gap:9px; border-bottom:1px solid rgba(166,195,204,.07); }.event-profile-imd dt { color:#506872; font-size:8px; }.event-profile-imd dd { margin:0; color:#a5b7bb; font-size:8.5px; text-align:right; }.event-profile-imd p { margin:12px 0 0; color:#617881; font-size:8px; line-height:1.55; }.event-profile-imd small { color:#536b74; font-size:8px; }.event-profile-bottom { margin-top:8px; display:grid; grid-template-columns:minmax(440px,1.25fr) minmax(230px,.65fr) minmax(250px,.72fr); gap:8px; }.event-profile-bottom > article { min-height:230px; }.event-profile-hourly > div { height:184px; }.event-profile-daily > div { padding:8px 10px; }.event-profile-daily > div > div { min-height:25px; display:grid; grid-template-columns:55px 1fr 35px; gap:7px; align-items:center; color:#687f87; font-size:8px; }.event-profile-daily i { height:4px; border-radius:3px; background:#122630; overflow:hidden; }.event-profile-daily i b { display:block; height:100%; border-radius:3px; background:#718bf0; }.event-profile-daily strong { color:#9aadb1; text-align:right; }.event-profile-ranking > div { padding:5px 8px; }.event-profile-ranking button { width:100%; min-height:27px; display:grid; grid-template-columns:20px 1fr 38px; gap:6px; align-items:center; border:0; border-bottom:1px solid rgba(166,195,204,.06); color:#667d85; background:transparent; text-align:left; cursor:pointer; }.event-profile-ranking button:hover { background:rgba(255,255,255,.018); }.event-profile-ranking button > i { color:#4e6871; font-size:8px; font-style:normal; }.event-profile-ranking button strong,.event-profile-ranking button small { display:block; }.event-profile-ranking button strong { color:#9cafb3; font-size:8.5px; }.event-profile-ranking button small { margin-top:2px; color:#566e77; font-size:8px; }.event-profile-ranking button > b { color:#65d6aa; font-size:8.5px; text-align:right; }.event-profile-tooltip { width:235px; }.event-profile-tooltip small { display:block; margin-top:6px; color:#607982; font-size:8px; line-height:1.5; }
.itinerary-query { padding: 8px; display: grid; grid-template-columns: minmax(175px,2fr) repeat(2,minmax(80px,.75fr)) minmax(220px,2fr) minmax(90px,.7fr); gap: 6px; border: 1px solid var(--ops-line); border-radius: 9px; background: #0a151d; }.itinerary-query > label { min-width: 0; height: 47px; padding: 6px 8px; display: flex; flex-direction: column; justify-content: center; border: 1px solid rgba(166,195,204,.13); border-radius: 6px; background: #0c1922; }.itinerary-query label > span { color: #4e6771; font-size: 8px; font-weight: 700; letter-spacing: .48px; }.itinerary-query input,.itinerary-query select { width: 100%; min-width: 0; margin-top: 3px; border: 0; outline: 0; color: #b5c3c6; background: transparent; font: 500 9px Roboto,Arial,sans-serif; }.itinerary-query select option { background: #0c1922; }.itinerary-query .congestion-run { grid-column: auto; }.itinerary-periods { margin-top: 7px; display: grid; grid-template-columns: minmax(350px,1fr) 34px minmax(350px,1fr) minmax(155px,.38fr); gap: 7px; align-items: stretch; }.itinerary-periods fieldset { min-width: 0; margin: 0; padding: 6px 8px 8px; display: grid; grid-template-columns: repeat(4,minmax(0,1fr)); gap: 6px; border: 1px solid var(--ops-line); border-radius: 8px; background: #0a161f; }.itinerary-periods fieldset legend { grid-column: 1/-1; width: calc(100% - 2px); padding: 0 1px 5px; display: flex; gap: 7px; align-items: center; color: #9badb2; }.itinerary-periods legend i { width: 20px; height: 20px; display: grid; place-items: center; border-radius: 4px; font-size: 8.5px; font-style: normal; }.period-a legend i { color: var(--ops-green); background: rgba(101,214,170,.1); }.period-b legend i { color: #f05d9a; background: rgba(240,93,154,.1); }.itinerary-periods legend strong,.itinerary-periods legend small { display: block; }.itinerary-periods legend strong { font-size: 9px; }.itinerary-periods legend small { margin-top: 1px; color: #536b74; font-size: 8px; }.itinerary-periods fieldset label { min-width: 0; padding: 4px 6px; border: 1px solid rgba(166,195,204,.09); border-radius: 5px; background: #0c1922; }.itinerary-periods label span { display: block; color: #4f6771; font-size: 8px; }.itinerary-periods input { width: 100%; min-width: 0; margin-top: 3px; border: 0; outline: 0; color: #aebdc1; background: transparent; font-size: 8.5px; }.itinerary-periods input::-webkit-calendar-picker-indicator { filter: invert(1); opacity: .4; }.itinerary-versus { display: grid; grid-template-rows: 1fr auto 1fr; gap: 5px; place-items: center; }.itinerary-versus span { width: 1px; height: 100%; background: var(--ops-line); }.itinerary-versus b { width: 26px; height: 26px; display: grid; place-items: center; border: 1px solid var(--ops-line-2); border-radius: 50%; color: #71868f; background: #0b1922; font-size: 8.5px; }.itinerary-period-note { padding: 9px 10px; display: flex; flex-direction: column; justify-content: center; border: 1px solid var(--ops-line); border-radius: 8px; background: #0a161f; }.itinerary-period-note small,.itinerary-period-note strong,.itinerary-period-note span { display: block; }.itinerary-period-note small { color: #4f6871; font-size: 8px; }.itinerary-period-note strong { margin-top: 5px; color: var(--ops-green); font-size: 9.5px; }.itinerary-period-note span { margin-top: 5px; color: #5f757e; font-size: 8px; line-height: 1.45; }.itinerary-kpis { margin-bottom: 8px; }.itinerary-toolbar { min-height: 42px; padding: 5px 8px; display: grid; grid-template-columns: minmax(210px,1fr) auto auto; gap: 16px; align-items: center; border: 1px solid var(--ops-line); border-bottom: 0; border-radius: 8px 8px 0 0; background: #0a161f; }.itinerary-toolbar small,.itinerary-toolbar strong { display: block; }.itinerary-toolbar small { color: #4f6872; font-size: 8px; letter-spacing: .55px; }.itinerary-toolbar strong { margin-top: 3px; color: #9fb1b5; font-size: 9px; }.itinerary-legend { display: flex; gap: 11px; }.itinerary-legend span { display: flex; gap: 5px; align-items: center; color: #667d85; font-size: 8px; }.itinerary-legend i { width: 17px; height: 2px; border-radius: 2px; background: var(--ops-green); }.itinerary-legend i.b { background: #f05d9a; }.itinerary-legend i.reference { height: 1px; background: repeating-linear-gradient(90deg,#627986 0 3px,transparent 3px 5px); }.itinerary-toolbar button { height: 27px; padding: 0 9px; border: 1px solid var(--ops-line); border-radius: 5px; color: #7f959d; background: #0d1d27; font-size: 8px; font-weight: 700; cursor: pointer; }
.itinerary-readiness { margin: 7px 0 8px; border: 1px solid rgba(101,214,170,.16); border-radius: 8px; background: linear-gradient(90deg,rgba(101,214,170,.025),rgba(8,20,28,.96)); overflow: hidden; }.itinerary-readiness summary { min-height: 38px; padding: 6px 10px; display: flex; align-items: center; justify-content: space-between; cursor: pointer; list-style: none; }.itinerary-readiness summary::-webkit-details-marker { display: none; }.itinerary-readiness summary small,.itinerary-readiness summary strong { display: block; }.itinerary-readiness summary small { color: #4e6e75; font-size: 8px; letter-spacing: .55px; }.itinerary-readiness summary strong { margin-top: 3px; color: #aabcc0; font-size: 9px; }.itinerary-readiness summary > b { padding: 4px 7px; border-radius: 4px; color: var(--ops-amber); background: rgba(240,168,79,.08); font-size: 8px; }.itinerary-readiness summary > b.ready { color: var(--ops-green); background: rgba(101,214,170,.08); }.itinerary-readiness-grid { padding: 0 8px 7px; display: grid; grid-template-columns: repeat(auto-fit,minmax(165px,1fr)); gap: 6px; }.itinerary-readiness-grid article { min-width: 0; min-height: 48px; padding: 6px 7px; display: grid; grid-template-columns: 7px minmax(0,1fr); gap: 7px; align-items: center; border: 1px solid rgba(166,195,204,.09); border-radius: 6px; background: #0a1821; }.itinerary-readiness-grid article > span { min-width: 0; }.itinerary-readiness-grid article > i { width: 6px; height: 6px; border-radius: 50%; background: var(--ops-amber); box-shadow: 0 0 8px rgba(240,168,79,.28); }.itinerary-readiness-grid article.ready > i { background: var(--ops-green); box-shadow: 0 0 8px rgba(101,214,170,.35); }.itinerary-readiness-grid small,.itinerary-readiness-grid strong,.itinerary-readiness-grid em { display: block; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }.itinerary-readiness-grid small { color: #4f6a72; font-size: 7.5px; letter-spacing: .35px; }.itinerary-readiness-grid strong { margin-top: 3px; color: #a4b7bb; font-size: 8.5px; }.itinerary-readiness-grid em { margin-top: 3px; color: #5c747c; font-size: 8px; font-style: normal; }.itinerary-readiness > p { margin: 0; padding: 7px 10px 9px; border-top: 1px solid rgba(166,195,204,.07); color: #688087; font-size: 8.5px; line-height: 1.5; }.itinerary-readiness > p strong { color: #9db0b4; font-weight: 600; }
.itinerary-stage { height: 420px; display: grid; grid-template-columns: minmax(300px,1fr) minmax(225px,.64fr) minmax(300px,1fr); border: 1px solid var(--ops-line); border-radius: 0 0 9px 9px; background: #09151d; overflow: hidden; }.itinerary-stage > article { min-width: 0; border-right: 1px solid var(--ops-line); }.itinerary-stage > article:last-child { border-right: 0; }.itinerary-stage article > header { height: 52px; padding: 0 12px; display: flex; align-items: center; justify-content: space-between; border-bottom: 1px solid rgba(166,195,204,.1); }.itinerary-stage header small,.itinerary-stage header h3 { display: block; }.itinerary-stage header small { color: #5e7781; font-size: 8.5px; letter-spacing: .55px; }.itinerary-stage header h3 { margin: 4px 0 0; color: #c0ced1; font-size: 10px; }.itinerary-stage header > span { color: #748b93; font-size: 9px; }.itinerary-chart-panel > div { height: calc(100% - 52px); }.itinerary-chart-panel canvas { display: block; cursor: crosshair; }.itinerary-spine-panel { background: radial-gradient(circle at 50% 42%,rgba(101,214,170,.055),transparent 48%),#0a171f; }.itinerary-spine-panel > header { text-align: center; }.itinerary-spine { height: calc(100% - 82px); position: relative; overflow: hidden; background: linear-gradient(90deg,rgba(255,255,255,.02),transparent 28%,transparent 72%,rgba(255,255,255,.02)); }.itinerary-roadway { position: absolute; left: 50%; top: 54px; bottom: 15px; width: 86px; border: 1px solid #34464e; border-radius: 4px; background: linear-gradient(90deg,#111c22 0 49%,#132128 49% 51%,#111c22 51%); box-shadow: inset 0 0 0 3px rgba(255,255,255,.01),0 0 22px rgba(0,0,0,.18); transform: translateX(-50%); }.itinerary-roadway::before,.itinerary-roadway::after { content:""; position:absolute; top:0; bottom:0; width:1px; background:#41545b; }.itinerary-roadway::before { left: 27px; }.itinerary-roadway::after { right: 27px; }.itinerary-roadway > i { position:absolute; top:0; bottom:0; left:50%; border-left:1px dashed rgba(219,229,231,.42); }.itinerary-roadway > i + i { left:auto; right:12px; border-color:rgba(101,214,170,.28); }.itinerary-roadway span { position:absolute; left:5px; right:5px; color:#7a9098; font-size:8.5px; font-weight:600; letter-spacing:.15px; text-align:center; }.itinerary-roadway .up { top:8px; }.itinerary-roadway .down { bottom:8px; }.itinerary-route-shield { position:absolute; z-index:4; left:50%; top:8px; min-width:84px; padding:6px 10px; border:1px solid rgba(101,214,170,.38); border-radius:7px; background:#0c473d; box-shadow:0 7px 20px rgba(0,0,0,.33); text-align:center; transform:translateX(-50%); }.itinerary-route-shield small,.itinerary-route-shield strong,.itinerary-route-shield span { display:block; }.itinerary-route-shield small { color:#8fc5b2; font-size:8px; letter-spacing:.55px; }.itinerary-route-shield strong { margin-top:2px; color:#e3f3ed; font-size:10px; }.itinerary-route-shield span { margin-top:2px; color:#7fb19f; font-size:8px; }.itinerary-spine-tick { position:absolute; z-index:2; left:50%; top:calc(60px + (100% - 82px) * var(--position) / 100); width:172px; height:20px; display:flex; align-items:center; transform:translate(-50%,-50%); }.itinerary-spine-tick b { z-index:2; min-width:48px; padding:4px 5px; border:1px solid rgba(101,214,170,.2); border-radius:4px; color:#a8bbb6; background:#0d2e29; box-shadow:0 2px 7px rgba(0,0,0,.2); font-size:9px; font-weight:600; text-align:center; }.itinerary-spine-tick i { position:absolute; left:47px; right:0; height:1px; background:rgba(101,214,170,.22); }.itinerary-spine-tick.major b { border-color:rgba(101,214,170,.38); color:#d4e7e0; background:#104138; }.itinerary-spine-tick.major i { height:2px; background:rgba(101,214,170,.34); }.itinerary-spine-tick.endpoint b { border-color:rgba(240,168,79,.4); color:#efd2a8; background:#3a2b1d; }.itinerary-spine-tick.endpoint i { background:rgba(240,168,79,.34); }.itinerary-spine-panel > footer { height:30px; padding:0 12px; display:flex; align-items:center; gap:8px; border-top:1px solid rgba(166,195,204,.08); color:#6a818a; font-size:8.5px; }.itinerary-spine-panel footer i { flex:1; height:2px; background:linear-gradient(90deg,#f05d9a,var(--ops-green)); }
.itinerary-bottom { margin-top:8px; display:grid; grid-template-columns:minmax(520px,1.4fr) minmax(275px,.75fr) minmax(250px,.62fr); gap:8px; }.itinerary-bottom > article { min-width:0; min-height:170px; border:1px solid var(--ops-line); border-radius:8px; background:#0b1720; overflow:hidden; }.itinerary-bottom article > header { height:43px; padding:0 10px; display:flex; align-items:center; border-bottom:1px solid rgba(166,195,204,.09); }.itinerary-bottom header small { color:#4e6771; font-size:8px; }.itinerary-bottom header h3 { margin:3px 0 0; color:#aebfc2; font-size:9px; }.itinerary-table-head,.itinerary-table-row { min-height:31px; padding:0 9px; display:grid; grid-template-columns:1.05fr 1.05fr repeat(5,1fr); gap:7px; align-items:center; border-bottom:1px solid rgba(166,195,204,.065); }.itinerary-table-head { min-height:25px; color:#4f6771; background:#0a151e; font-size:8px; }.itinerary-table-row strong { color:#9eb0b4; font-size:8.5px; }.itinerary-table-row span { color:#71868e; font-size:8px; }.itinerary-table-row.partial { background:rgba(240,168,79,.025); }.itinerary-table-row.partial span:nth-child(2) { color:#d19d61; }.itinerary-critical > div { padding:4px 8px 8px; }.itinerary-critical button { width:100%; min-height:25px; display:grid; grid-template-columns:1fr 42px 47px; gap:6px; align-items:center; border:0; border-bottom:1px solid rgba(166,195,204,.065); color:#667d85; background:transparent; text-align:left; cursor:pointer; }.itinerary-critical button:hover { background:rgba(255,255,255,.018); }.itinerary-critical button strong { color:#95a8ad; font-size:8.5px; }.itinerary-critical button span { font-size:8px; }.itinerary-critical button b { color:#f05d9a; font-size:8.5px; text-align:right; }.itinerary-method p { margin:0; padding:13px 12px; color:#667d85; font-size:8.5px; line-height:1.65; }.itinerary-tooltip { width:205px; }.itinerary-tooltip b i { display:inline-grid; width:15px; height:15px; place-items:center; border-radius:3px; color:var(--ops-green); background:rgba(101,214,170,.09); font-style:normal; }.itinerary-tooltip b i.b { color:#f05d9a; background:rgba(240,93,154,.09); }.itinerary-tooltip b em { margin:0 4px; color:#607780; font-style:normal; }

.speed-alert-status { min-height: 48px; margin-top: 8px; padding: 6px 9px; display: grid; grid-template-columns: minmax(185px,1.1fr) minmax(165px,.8fr) 105px minmax(210px,1fr); gap: 8px; align-items: center; border: 1px solid var(--ops-line); border-radius: 8px; background: #09161e; }.speed-alert-status > div { min-width: 0; min-height: 30px; padding-left: 9px; display: flex; flex-direction: column; justify-content: center; border-left: 1px solid rgba(166,195,204,.08); }.speed-alert-status > div:first-child { padding-left: 0; display: grid; grid-template-columns: 7px 1fr; gap: 7px; align-items: center; border-left: 0; }.speed-alert-status i { width: 6px; height: 6px; border-radius: 50%; background: var(--ops-green); box-shadow: 0 0 8px rgba(101,214,170,.45); }.speed-alert-status .stale i { background: var(--ops-amber); box-shadow: 0 0 8px rgba(240,168,79,.45); }.speed-alert-status .offline i { background: #d9475f; }.speed-alert-status small,.speed-alert-status strong { display: block; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }.speed-alert-status small { color: #4e6771; font-size: 8px; letter-spacing: .5px; }.speed-alert-status strong { margin-top: 3px; color: #94a8ad; font-size: 8.5px; }
.speed-alert-builder { margin-top: 8px; display: grid; grid-template-columns: minmax(420px,1.08fr) minmax(430px,.92fr); gap: 8px; align-items: stretch; }.speed-alert-map-card,.speed-alert-form { min-width: 0; min-height: 515px; border: 1px solid var(--ops-line); border-radius: 8px; background: #0a161f; overflow: hidden; }.speed-alert-map-card { position: relative; }.speed-alert-map-card > header,.speed-alert-form > header,.speed-alert-monitor article > header,.speed-alert-bottom article > header { height: 46px; padding: 0 10px; display: flex; align-items: center; justify-content: space-between; border-bottom: 1px solid rgba(166,195,204,.09); }.speed-alert-map-card header small,.speed-alert-form header small,.speed-alert-monitor header small,.speed-alert-bottom header small { color: #4e6771; font-size: 8px; letter-spacing: .55px; }.speed-alert-map-card header h3,.speed-alert-form header h3,.speed-alert-monitor header h3,.speed-alert-bottom header h3 { margin: 3px 0 0; color: #acbdc1; font-size: 9.5px; }.speed-alert-map-card header > span { padding: 4px 7px; border: 1px solid rgba(101,214,170,.18); border-radius: 4px; color: var(--ops-green); background: rgba(101,214,170,.05); font-size: 8px; }.speed-alert-map-card header > span.alert { border-color: rgba(217,71,95,.3); color: #ef7588; background: rgba(217,71,95,.06); }.speed-alert-map-card #speed-alert-map { height: 407px; }.speed-alert-map-card > footer { height: 33px; padding: 0 9px; display: flex; align-items: center; justify-content: space-between; border-top: 1px solid rgba(166,195,204,.08); color: #5c737c; font-size: 8px; }.speed-alert-map-card footer button,.speed-alert-form header button { height: 23px; padding: 0 7px; border: 1px solid var(--ops-line); border-radius: 4px; color: #70868e; background: #0d1d26; font-size: 8px; font-weight: 700; cursor: pointer; }.speed-alert-map-legend { position: absolute; z-index: 2; left: 9px; bottom: 40px; margin: 0; padding: 6px 7px; display: flex; gap: 8px; border: 1px solid var(--ops-line); border-radius: 5px; background: rgba(8,20,28,.9); }.speed-alert-map-legend span { display: flex; gap: 4px; align-items: center; color: #667c84; font-size: 8px; }.speed-alert-map-legend i { width: 12px; height: 3px; border-radius: 2px; }.speed-alert-map-legend .normal { background: #516e78; }.speed-alert-map-legend .candidate { background: #f0a84f; }.speed-alert-map-legend .confirmed { background: #d9475f; }
.speed-alert-form { display: grid; grid-template-rows: 46px 1fr 48px; }.speed-alert-form-body { padding: 8px; display: grid; grid-template-columns: 1fr 1fr; gap: 6px; align-content: start; overflow-y: auto; }.speed-alert-form-body > label { min-width: 0; min-height: 42px; padding: 6px 7px; display: flex; flex-direction: column; justify-content: center; border: 1px solid rgba(166,195,204,.1); border-radius: 5px; background: #0c1922; }.speed-alert-form-body > label.full { grid-column: 1/-1; }.speed-alert-form-body label > span,.speed-alert-threshold > div > span { color: #4e6670; font-size: 8px; letter-spacing: .4px; }.speed-alert-form-body select,.speed-alert-form-body input { width: 100%; min-width: 0; margin-top: 3px; border: 0; outline: 0; color: #aabbbf; background: transparent; font: 500 8.5px "Roboto",sans-serif; }.speed-alert-form-body select option { background: #0c1922; }.speed-alert-form-body input::-webkit-calendar-picker-indicator { filter: invert(1); opacity: .4; }.speed-alert-days,.speed-alert-threshold,.speed-alert-channels { grid-column: 1/-1; min-width: 0; margin: 0; padding: 7px; border: 1px solid rgba(166,195,204,.1); border-radius: 5px; background: #0b1821; }.speed-alert-days legend,.speed-alert-threshold legend,.speed-alert-channels legend { padding: 0 4px; color: #4e6670; font-size: 8px; letter-spacing: .4px; }.speed-alert-days { display: flex; gap: 5px; }.speed-alert-days label { flex: 1; position: relative; }.speed-alert-days input { position: absolute; opacity: 0; }.speed-alert-days span { height: 24px; display: grid; place-items: center; border: 1px solid rgba(166,195,204,.12); border-radius: 4px; color: #5f7680; background: #0d1b24; font-size: 8px; cursor: pointer; }.speed-alert-days input:checked + span { border-color: rgba(101,214,170,.28); color: var(--ops-green); background: rgba(101,214,170,.07); }.speed-alert-threshold { display: grid; grid-template-columns: 1fr 1fr 1.25fr; gap: 6px; align-items: stretch; }.speed-alert-threshold > label { padding: 6px; display: flex; gap: 5px; align-items: center; border: 1px solid rgba(166,195,204,.09); border-radius: 4px; color: #71868e; font-size: 8px; }.speed-alert-threshold input[type=radio] { width: 10px; height: 10px; margin: 0; accent-color: var(--ops-green); }.speed-alert-threshold > div { padding: 5px 7px; display: grid; grid-template-columns: 1fr auto; align-items: end; border: 1px solid rgba(101,214,170,.14); border-radius: 4px; background: rgba(101,214,170,.025); }.speed-alert-threshold > div span { grid-column: 1/-1; }.speed-alert-threshold > div input { margin-top: 3px; color: var(--ops-green); font-size: 11px; font-weight: 600; }.speed-alert-threshold > div b { color: #718b84; font-size: 8px; }.speed-alert-channels { display: grid; grid-template-columns: 1fr 1fr; gap: 5px; }.speed-alert-channels label { min-height: 28px; padding: 0 6px; display: grid; grid-template-columns: 11px 1fr auto; gap: 5px; align-items: center; border: 1px solid rgba(166,195,204,.09); border-radius: 4px; color: #768b92; font-size: 8px; }.speed-alert-channels label input { width: 10px; height: 10px; margin: 0; accent-color: var(--ops-green); }.speed-alert-channels label b { color: var(--ops-amber); font-size: 8px; }.speed-alert-channels label.connected b { color: var(--ops-green); }.speed-alert-channels > input { height: 27px; margin: 0; padding: 0 7px; border: 1px solid rgba(166,195,204,.09); border-radius: 4px; background: #0c1922; }.speed-alert-channels > input:disabled { opacity: .35; }.speed-alert-form > footer { padding: 6px 8px; display: grid; grid-template-columns: 1fr 1fr; gap: 6px; border-top: 1px solid rgba(166,195,204,.09); }.speed-alert-form > footer button { border: 1px solid var(--ops-line); border-radius: 5px; color: #738890; background: #0d1c25; cursor: pointer; }.speed-alert-form > footer button.primary { border-color: rgba(101,214,170,.27); color: var(--ops-green); background: rgba(101,214,170,.065); }.speed-alert-form footer span,.speed-alert-form footer small { display: block; }.speed-alert-form footer span { font-size: 8px; font-weight: 700; }.speed-alert-form footer small { margin-top: 2px; color: #526a73; font-size: 8px; }
.speed-alert-kpis { margin: 8px 0; grid-template-columns: repeat(5,1fr); }.speed-alert-monitor { height: 270px; display: grid; grid-template-columns: minmax(520px,1.35fr) minmax(310px,.65fr); gap: 8px; }.speed-alert-monitor > article,.speed-alert-bottom > article { min-width: 0; border: 1px solid var(--ops-line); border-radius: 8px; background: #0a161f; overflow: hidden; }.speed-alert-monitor header > span,.speed-alert-bottom header > span { color: #607780; font-size: 8px; }.speed-alert-timeline-actions { display:flex; gap:8px; align-items:center; }.speed-alert-timeline-actions > span { color:#607780; font-size:8px; }.speed-alert-timeline > div { height: calc(100% - 46px); }.speed-alert-timeline canvas { display: block; cursor: crosshair; }.speed-alert-episodes > div { height: calc(100% - 46px); padding: 4px 7px 8px; overflow-y: auto; }.speed-alert-episodes button { width: 100%; min-height: 42px; display: grid; grid-template-columns: 4px 1fr 39px 52px; gap: 7px; align-items: center; border: 0; border-bottom: 1px solid rgba(166,195,204,.065); color: inherit; background: transparent; text-align: left; cursor: pointer; }.speed-alert-episodes button > i { width: 3px; height: 28px; border-radius: 2px; background: #d9475f; }.speed-alert-episodes strong,.speed-alert-episodes small { display: block; }.speed-alert-episodes strong { color: #9daeb3; font-size: 8px; }.speed-alert-episodes small { margin-top: 3px; color: #5f767f; font-size: 8px; }.speed-alert-episodes b { color: #f0a84f; font-size: 8px; }.speed-alert-episodes em { color: #ef7588; font-size: 8px; font-style: normal; text-align: right; }.speed-alert-episodes p,.speed-alert-rules p,.speed-alert-engine-list p { margin: 0; padding: 15px 11px; color: #637982; font-size: 8.5px; line-height: 1.55; }
.speed-alert-bottom { margin-top: 8px; display: grid; grid-template-columns: minmax(440px,1.15fr) minmax(340px,.9fr) minmax(270px,.65fr); gap: 8px; }.speed-alert-bottom > article { min-height: 220px; }.speed-alert-rules > div,.speed-alert-engine-list > div { max-height: 245px; padding: 4px 7px 8px; overflow-y: auto; }.speed-alert-rule { margin: 4px 0; border: 1px solid rgba(166,195,204,.09); border-radius: 5px; background: #0c1922; }.speed-alert-rule.paused { opacity: .58; }.speed-alert-rule-main { width: 100%; min-height: 42px; padding: 4px 7px; display: grid; grid-template-columns: 5px 1fr auto; gap: 7px; align-items: center; border: 0; color: inherit; background: transparent; text-align: left; cursor: pointer; }.speed-alert-rule-main > i { width: 4px; height: 28px; border-radius: 2px; background: var(--ops-green); }.speed-alert-rule.paused .speed-alert-rule-main > i { background: #607780; }.speed-alert-rule-main strong,.speed-alert-rule-main small { display: block; }.speed-alert-rule-main strong { color: #a6b6ba; font-size: 8.5px; }.speed-alert-rule-main small { margin-top: 3px; color: #607780; font-size: 8px; }.speed-alert-rule-main b { color: var(--ops-green); font-size: 8px; }.speed-alert-rule > div { min-height: 25px; padding: 3px 6px; display: flex; gap: 5px; align-items: center; border-top: 1px solid rgba(166,195,204,.06); }.speed-alert-rule > div span { padding: 3px 5px; border-radius: 3px; color: var(--ops-green); background: rgba(101,214,170,.06); font-size: 8px; }.speed-alert-rule > div span.pending { color: var(--ops-amber); background: rgba(240,168,79,.06); }.speed-alert-rule > div button { margin-left: auto; border: 0; color: #6c828a; background: transparent; font-size: 8px; cursor: pointer; }.speed-alert-rule > div button+button { margin-left: 0; }.speed-alert-rule > div button.delete { color: #c76676; }.speed-alert-engine-list > div > div { min-height: 42px; display: grid; grid-template-columns: 7px 1fr 45px; gap: 7px; align-items: center; border-bottom: 1px solid rgba(166,195,204,.065); }.speed-alert-engine-list i { width: 6px; height: 6px; border-radius: 50%; background: #f0a84f; }.speed-alert-engine-list i.critical { background: #d9475f; }.speed-alert-engine-list strong,.speed-alert-engine-list small { display: block; }.speed-alert-engine-list strong { color: #9aadb1; font-size: 8px; }.speed-alert-engine-list small { margin-top: 3px; color: #5e757e; font-size: 8px; }.speed-alert-engine-list b { color: #d27b88; font-size: 8px; text-align: right; text-transform: uppercase; }.speed-alert-method ol { margin: 0; padding: 11px 12px 7px 27px; color: #637a83; font-size: 8px; line-height: 1.6; }.speed-alert-method > div { margin: 5px 10px 10px; padding: 8px; border: 1px solid rgba(240,168,79,.13); border-radius: 5px; background: rgba(240,168,79,.025); }.speed-alert-method > div span,.speed-alert-method > div strong,.speed-alert-method > div small { display: block; }.speed-alert-method > div span { color: var(--ops-amber); font-size: 8px; }.speed-alert-method > div strong { margin-top: 4px; color: #9c8c79; font-size: 8.5px; }.speed-alert-method > div small { margin-top: 4px; color: #627780; font-size: 8px; line-height: 1.4; }.speed-alert-tooltip { width: 205px; }
.speed-alert-channels label.unavailable { opacity:.58;cursor:not-allowed; }.speed-alert-channels label.unavailable b { color:#d3a15f; }.speed-alert-channels input:disabled { cursor:not-allowed; }.speed-alert-engine-list > header > span.offline { color:#e18492;border-color:rgba(217,71,95,.25);background:rgba(217,71,95,.06); }
.speed-alert-channels > button { min-height:28px;border:1px solid rgba(101,214,170,.18);border-radius:4px;color:var(--ops-green);background:rgba(101,214,170,.045);font:700 8px Roboto,sans-serif;cursor:pointer; }.speed-alert-engine-list { transition:border-color .25s,box-shadow .25s; }.speed-alert-engine-list.attention { border-color:rgba(101,214,170,.55);box-shadow:0 0 0 2px rgba(101,214,170,.08),0 0 22px rgba(101,214,170,.1); }
.speed-alert-engine-list > div > button { width:100%;min-height:48px;padding:4px 2px;display:grid;grid-template-columns:7px minmax(0,1fr) 47px 39px;gap:7px;align-items:center;border:0;border-bottom:1px solid rgba(166,195,204,.065);color:inherit;background:transparent;text-align:left;cursor:pointer; }.speed-alert-engine-list > div > button:hover { background:rgba(101,214,170,.045); }.speed-alert-engine-list > div > button em { color:var(--ops-green);font-size:7px;font-style:normal;text-align:right;letter-spacing:.35px; }.speed-alert-engine-list i.high { background:#ef7588; }.speed-alert-engine-list i.low { background:#67bcd9; }

.performance-query { margin-top: 8px; display: grid; grid-template-columns: minmax(125px,1.1fr) repeat(2,minmax(68px,.5fr)) repeat(4,minmax(78px,.6fr)) minmax(78px,.6fr) minmax(145px,1.2fr) minmax(105px,.75fr) 80px; gap: 6px; }.performance-query label { min-width: 0; min-height: 48px; padding: 7px 8px; display: flex; flex-direction: column; justify-content: center; border: 1px solid var(--ops-line); border-radius: 6px; background: #0b1821; }.performance-query label span { color: #4d6670; font-size: 8px; letter-spacing: .45px; }.performance-query select,.performance-query input { width: 100%; min-width: 0; margin-top: 4px; border: 0; outline: 0; color: #aebdc1; background: transparent; font: 500 9px "Roboto",sans-serif; }.performance-query select option { background: #0b1821; }.performance-query input::-webkit-calendar-picker-indicator { filter: invert(1); opacity: .42; }.performance-query .congestion-run { grid-column: auto; }
.performance-series-bar { min-height: 51px; margin-top: 7px; padding: 6px 8px; display: grid; grid-template-columns: minmax(165px,.38fr) minmax(0,1.62fr); gap: 9px; align-items: center; border: 1px solid var(--ops-line); border-radius: 8px; background: #09161e; }.performance-series-bar > div:first-child small,.performance-series-bar > div:first-child strong { display: block; }.performance-series-bar > div:first-child small { color: #4c6670; font-size: 8px; letter-spacing: .55px; }.performance-series-bar > div:first-child strong { margin-top: 4px; color: #6d838b; font-size: 8.5px; font-weight: 500; }.performance-series-list { min-width: 0; display: flex; gap: 5px; overflow-x: auto; scrollbar-width: thin; scrollbar-color: #20343d transparent; }.performance-series-chip { flex: 0 0 105px; height: 36px; padding: 3px 5px; display: grid; grid-template-columns: 13px 1fr; gap: 4px; align-items: center; border: 1px solid rgba(166,195,204,.1); border-radius: 6px; background: #0c1922; }.performance-series-chip.focus { border-color: color-mix(in srgb,var(--ops-green) 35%,transparent); background: rgba(101,214,170,.035); }.performance-series-chip > input { width: 10px; height: 10px; accent-color: var(--ops-green); }.performance-series-chip button { min-width: 0; padding: 0; display: grid; grid-template-columns: 5px 1fr; gap: 5px; align-items: center; border: 0; color: inherit; background: transparent; text-align: left; cursor: pointer; }.performance-series-chip button > i { width: 4px; height: 24px; border-radius: 3px; background: var(--series-color); }.performance-series-chip strong,.performance-series-chip small { display: block; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }.performance-series-chip strong { color: #9cafb3; font-size: 8.5px; }.performance-series-chip small { margin-top: 2px; color: #5d747d; font-size: 8px; }
.performance-kpis { margin: 8px 0; grid-template-columns: repeat(5,1fr); }.performance-toolbar { min-height: 42px; padding: 6px 8px; display: grid; grid-template-columns: minmax(315px,1fr) auto auto; gap: 12px; align-items: center; border: 1px solid var(--ops-line); border-radius: 8px 8px 0 0; background: #0a161f; }.performance-chart-types { display: flex; gap: 4px; }.performance-chart-types button,.performance-export button { height: 26px; padding: 0 9px; border: 1px solid var(--ops-line); border-radius: 5px; color: #71868e; background: #0d1d27; font-size: 8px; font-weight: 700; cursor: pointer; }.performance-chart-types button.active { border-color: rgba(101,214,170,.3); color: var(--ops-green); background: rgba(101,214,170,.07); }.performance-band-controls { display: flex; gap: 8px; align-items: center; }.performance-band-controls label { display: flex; gap: 4px; align-items: center; color: #617880; font-size: 8px; white-space: nowrap; }.performance-band-controls input { width: 10px; height: 10px; accent-color: var(--ops-green); }.performance-band-controls .incident-band i { width: 13px; height: 8px; border: 1px solid rgba(240,93,120,.4); background: repeating-linear-gradient(135deg,rgba(240,93,120,.35) 0 1px,transparent 1px 4px); }.performance-band-controls > small { max-width: 120px; color: #506873; font-size: 8px; line-height: 1.25; }.performance-export { display: flex; gap: 4px; }.performance-export button { min-width: 38px; }
.waze-analysis-summary { min-height:22px; padding:0 6px; display:inline-flex; gap:4px; align-items:center; border:1px solid rgba(51,204,255,.2); border-radius:5px; color:#55d8ff !important; background:rgba(51,204,255,.055); font-size:8px !important; font-weight:700; white-space:nowrap; }.waze-analysis-summary[hidden] { display:none !important; }.waze-analysis-summary img { width:14px; height:16px; object-fit:contain; }
.performance-stage { height: 355px; min-height:355px; display: grid; grid-template-columns: 1fr 1fr; border: 1px solid var(--ops-line); border-top: 0; background: #09151d; overflow:hidden; }.performance-chart-panel { min-width: 0; min-height:0; height:100%; display:grid; grid-template-rows:46px minmax(0,1fr); overflow:hidden; border-right: 1px solid var(--ops-line); }.performance-chart-panel:last-child { border-right: 0; }.performance-chart-panel > header { height: 46px; min-height:46px; box-sizing:border-box; padding: 0 10px; display: flex; align-items: center; justify-content: space-between; border-bottom: 1px solid rgba(166,195,204,.09); }.performance-chart-panel header small,.performance-chart-panel header h3 { display: block; }.performance-chart-panel header small { color: #4e6872; font-size: 8px; letter-spacing: .55px; }.performance-chart-panel header h3 { margin: 3px 0 0; color: #aebfc3; font-size: 9px; }.performance-chart-panel header > span { color: #607780; font-size: 8px; }.performance-chart-panel > div { min-height:0; height:auto; overflow:hidden; }.performance-chart-panel canvas { width:100%; height:100%; display: block; cursor: crosshair; }
.performance-bottom { margin-top: 8px; display: grid; grid-template-columns: minmax(570px,1.55fr) minmax(245px,.64fr) minmax(245px,.62fr); gap: 8px; }.performance-bottom > article { min-width: 0; min-height: 184px; border: 1px solid var(--ops-line); border-radius: 8px; background: #0b1720; overflow: hidden; }.performance-bottom article > header { height: 43px; padding: 0 10px; display: flex; align-items: center; border-bottom: 1px solid rgba(166,195,204,.09); }.performance-bottom header small { color: #4e6771; font-size: 8px; }.performance-bottom header h3 { margin: 3px 0 0; color: #aebfc2; font-size: 9px; }.performance-table-head,.performance-table-row { min-height: 28px; padding: 0 9px; display: grid; grid-template-columns: 1.05fr .62fr .72fr 1fr 1fr .55fr; gap: 6px; align-items: center; border-bottom: 1px solid rgba(166,195,204,.065); }.performance-table-head { min-height: 24px; color: #4e6670; background: #09151d; font-size: 8px; }.performance-table-row { color: #687f87; font-size: 8px; }.performance-table-row strong { display: flex; gap: 5px; align-items: center; color: #9eb0b4; font-size: 8px; }.performance-table-row strong i,.performance-critical i { width: 4px; height: 15px; border-radius: 2px; background: var(--series-color); }.performance-table-row b { color: #bdc9cc; font-size: 8px; }.performance-critical > div { padding: 4px 8px 8px; }.performance-critical > div > div { min-height: 25px; display: grid; grid-template-columns: 4px 1fr 38px 52px; gap: 6px; align-items: center; border-bottom: 1px solid rgba(166,195,204,.065); }.performance-critical strong { color: #97aaae; font-size: 8px; }.performance-critical span { color: #607780; font-size: 8px; }.performance-critical b { color: #f0a84f; font-size: 8px; text-align: right; }.performance-method p { margin: 0; padding: 12px; color: #657b84; font-size: 8.5px; line-height: 1.65; }.performance-tooltip { width: 225px; }.performance-tooltip small { display: block; margin-top: 5px; color: #607780; font-size: 8px; line-height: 1.45; }

.source-dialog { width: min(470px,calc(100vw - 30px)); padding: 0; border: 1px solid var(--ops-line-2); border-radius: 11px; color: var(--ops-text); background: #0a1720; box-shadow: 0 25px 80px rgba(0,0,0,.55); }.source-dialog::backdrop { background: rgba(3,9,13,.72); backdrop-filter: blur(3px); }.source-dialog form > header { height: 57px; padding: 0 15px; display: flex; align-items: center; justify-content: space-between; border-bottom: 1px solid var(--ops-line); }.source-dialog header small,.source-dialog header h3 { display: block; }.source-dialog header small { color: #506872; font-size: 8.5px; }.source-dialog header h3 { margin: 3px 0 0; color: #c9d5d7; font-size: 11px; }.source-dialog header button { border: 0; color: #71858e; background: transparent; font-size: 18px; cursor: pointer; }.source-row { min-height: 65px; padding: 8px 15px; display: grid; grid-template-columns: 45px 1fr auto; gap: 10px; align-items: center; border-bottom: 1px solid rgba(166,195,204,.08); }.source-row > span { width: 43px; height: 27px; display: grid; place-items: center; border: 1px solid var(--ops-line); border-radius: 6px; color: #77909a; background: #0d1b25; font-size: 8.5px; font-weight: 700; }.source-row strong,.source-row small { display: block; }.source-row strong { color: #aebdc1; font-size: 9.5px; }.source-row small { margin-top: 4px; color: #5a727c; font-size: 8.5px; }.source-row > b { color: var(--ops-amber); font-size: 8px; }.source-dialog form > footer { min-height: 44px; padding: 0 15px; display: flex; gap: 7px; align-items: center; }.source-dialog footer span { width: 6px; height: 6px; border-radius: 50%; background: var(--ops-amber); }.source-dialog footer small { color: #607680; font-size: 8.5px; }
.source-row > b.connected { color: var(--ops-green); }
.ops-toast { position: fixed; z-index: 100; left: 50%; bottom: 22px; padding: 10px 13px; border: 1px solid var(--ops-line-2); border-radius: 8px; color: #a9b9bd; background: #0a1821; box-shadow: 0 14px 40px rgba(0,0,0,.4); font-size: 9.5px; opacity: 0; pointer-events: none; transform: translate(-50%,8px); transition: .18s; }.ops-toast.show { opacity: 1; transform: translate(-50%,0); }

@media(max-width:1180px){
  body.cam-platform .app-shell { grid-template-columns: 72px minmax(0,1fr); }
  body.cam-platform .sidebar { padding: 20px 9px 14px; }.cam-nav { grid-template-columns: 1fr !important; }.cam-nav > span:last-child,.brand-copy,.sidebar-health div,.sidebar-settings div { display: none; }.cam-nav-code { margin: auto; }.sidebar-health,.sidebar-settings { grid-template-columns: 1fr; }.analysis-view { grid-template-columns: 205px minmax(0,1fr); }.analysis-grid { grid-template-columns: minmax(0,1.35fr) minmax(260px,.75fr); }.ops-time { width: min(700px,calc(100% - 250px)); }.congestion-query { grid-template-columns: repeat(6,minmax(0,1fr)); }.congestion-stage,.corridor-speed-stage { grid-template-columns: minmax(240px,1fr) minmax(215px,.65fr) minmax(240px,1fr); }.congestion-detail-row { grid-template-columns: 1fr 1fr; }.congestion-worst { grid-column: 1/-1; }.corridor-speed-bottom { grid-template-columns: 1fr 1fr; }.corridor-profile-panel { grid-column: 1/-1; }.itinerary-periods { grid-template-columns:minmax(310px,1fr) 28px minmax(310px,1fr); }.itinerary-period-note { display:none; }.itinerary-stage { grid-template-columns:minmax(250px,1fr) minmax(160px,.5fr) minmax(250px,1fr); }.itinerary-bottom { grid-template-columns:1fr 1fr; }.itinerary-method { grid-column:1/-1; }
}

@media(max-width:900px){
  body.cam-platform { overflow: auto; } body.cam-platform .app-shell { display: block; } body.cam-platform .sidebar { position: fixed; left: 0; right: 0; bottom: 0; z-index: 40; height: 61px; padding: 5px 8px; display: block; border-top: 1px solid var(--ops-line); }.brand,.sidebar-bottom { display: none; } body.cam-platform .main-nav { display: flex; height: 50px; gap: 5px; }.cam-nav { min-width: 94px !important; min-height: 50px !important; display: grid !important; grid-template-columns: 25px 1fr !important; }.cam-nav > span:last-child { display: block; font-size: 9px; }.cam-nav.active::before { left: 15px !important; right: 15px; top: -5px; width: auto !important; height: 2px !important; }.cam-nav-code { margin: 0; } body.cam-platform .main-stage { height: calc(100vh - 61px); }.ops-kpis { grid-template-columns:minmax(165px,1.35fr) repeat(4,minmax(105px,1fr)); overflow-x:auto; overflow-y:hidden; }.ops-layers { width: 238px; }.ops-time { left: 14px; right: 14px; width: auto; grid-template-columns: 24px 165px 1fr 65px 24px; transform: none; }.analysis-view { grid-template-columns: 180px minmax(0,1fr); }.analysis-filters { grid-template-columns: 1fr 85px 75px 75px 62px; }.analysis-filters .period { display: none; }.analysis-grid { grid-template-columns: 1fr; }.summary-panel { min-height: 0; }.analysis-content { padding-bottom: 85px; }.congestion-controls { grid-template-columns: 1fr auto; }.congestion-controls > label { display: none; }.congestion-stage,.corridor-speed-stage { overflow-x: auto; }.congestion-kpis { grid-template-columns: repeat(3,1fr); }.corridor-bin-toolbar { grid-template-columns: 1fr auto; }.corridor-bin-legend { display: none; }.itinerary-query { grid-template-columns:repeat(2,minmax(0,1fr)); }.itinerary-query .road,.itinerary-query .metric,.itinerary-query .congestion-run { grid-column:span 2; }.itinerary-periods { display:block; overflow:visible; }.itinerary-versus { height:34px; display:flex; }.itinerary-versus span { flex:1; width:auto; height:1px; }.itinerary-periods fieldset { margin-bottom:7px; grid-template-columns:repeat(2,minmax(0,1fr)); }.itinerary-period-note { display:flex; }.itinerary-toolbar { grid-template-columns:1fr auto; }.itinerary-legend { display:none; }.itinerary-stage { height:auto; display:block; overflow:visible; }.itinerary-stage > article { height:370px; border-right:0; border-bottom:1px solid var(--ops-line); }.itinerary-bottom { display:block; }.itinerary-bottom > article { margin-top:7px; }
}

@media(max-width:640px){
  body.cam-platform .topbar { height: 58px; padding: 0 12px; }.page-heading { display: block !important; }.page-heading .eyebrow { display: none; } body.cam-platform #page-title { font-size: 13px; }.top-source { display: none; }
  .ops-kpis { left: 8px; right: 8px; top: 8px; height: 58px; grid-template-columns:minmax(145px,1.25fr) repeat(4,minmax(92px,1fr)); overflow-x: auto; overflow-y: hidden; }.ops-kpis article { padding: 6px 9px; }.ops-kpis article:nth-child(n+4) { display: flex; }.ops-kpis strong { font-size: 14px; }.ops-kpis .source > small,.ops-kpis .source > span { display:none; }.ops-kpi-mode { margin-top:0; }.ops-kpi-mode select { height:30px; }.ops-layers { left: 8px; top: 76px; width: 220px; }.ops-query { right: 8px; top: 76px; width: calc(100% - 246px); grid-template-columns: repeat(2,minmax(92px,1fr)) auto; }.ops-query .road,#fit-network { display: none; }.ops-selection { right: 8px; top: 145px; }.ops-fire-status { right: 8px; bottom: 76px; width: 220px; }.ops-legend { left: 8px; bottom: 76px; }.ops-time { left: 8px; right: 8px; bottom: 11px; grid-template-columns: 10px minmax(130px,1fr) minmax(105px,.7fr); }.ops-time button,.ops-time input,.ops-time > div small,.ops-time-coverage { display: none; }.ops-time > div { min-width: 0; }.ops-time strong { overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
  .analysis-view.active { display: block !important; overflow-y: auto; }.analysis-rail { height: 100px; display: block; border-right: 0; border-bottom: 1px solid var(--ops-line); }.analysis-rail > header { height: 38px; }.tool-search { display: none; } #analysis-tools { height: 61px; padding: 5px 8px; display: flex; gap: 5px; overflow-x: auto; overflow-y: hidden; }.analysis-group { display: none !important; }.analysis-tool { flex: 0 0 82px; min-height: 48px; grid-template-columns: 21px 1fr; padding: 4px; }.analysis-tool > i { display: none; }.analysis-tool strong { white-space: normal; font-size: 8.5px; line-height: 1.2; }.analysis-main { display: block; }.analysis-filters { height: auto; padding: 7px; grid-template-columns: 1fr 78px 55px; position: sticky; top: 0; z-index: 5; }.analysis-filters label:nth-of-type(3),.analysis-filters label:nth-of-type(4),.analysis-filters .period { display: none; }.analysis-content { padding: 10px 9px 90px; overflow: visible; }.analysis-heading { height: 42px; }.analysis-heading h2 { font-size: 14px; }.analysis-source { display: none; }.analysis-kpis { grid-template-columns: repeat(2,1fr); }.analysis-grid { display: block; }.analysis-panel { margin-bottom: 8px; }.chart-panel { min-height: 270px; }.canvas-wrap { height: 220px; }.trip-summary { grid-template-columns: repeat(2,1fr); }.table-row { min-width: 510px; }.analysis-table { overflow-x: auto; }.congestion-workspace,.corridor-speed-workspace,.itinerary-workspace { padding: 10px 8px 85px; overflow: visible; }.congestion-heading { position: sticky; top: 0; z-index: 6; background: #071018; }.congestion-source { display: none; }.congestion-query { grid-template-columns: repeat(2,minmax(0,1fr)); }.congestion-query > label.wide,.congestion-run { grid-column: span 2; }.congestion-corridor { overflow-x: auto; }.congestion-corridor > small { display: none; }.congestion-kpis { grid-template-columns: repeat(2,1fr); }.congestion-stage,.corridor-speed-stage,.itinerary-stage { height: auto; display: block; overflow: visible; }.congestion-stage > article,.corridor-speed-stage > article,.itinerary-stage > article { height: 350px; border-right: 0; border-bottom: 1px solid var(--ops-line); }.congestion-detail-row,.corridor-speed-bottom,.itinerary-bottom { display: block; }.congestion-detail-row > article,.corridor-speed-bottom > article,.itinerary-bottom > article { margin-top: 7px; }.congestion-worst { grid-column: auto; }.congestion-inspector dl { grid-template-columns: repeat(2,1fr); }.corridor-periods { overflow-x: auto; }.corridor-periods > b { display: none; }.corridor-profile-panel { grid-column: auto; }.itinerary-query { grid-template-columns:repeat(2,minmax(0,1fr)); }.itinerary-query .road,.itinerary-query .metric,.itinerary-query .congestion-run { grid-column:span 2; }.itinerary-periods { display:block; overflow:visible; }.itinerary-versus { height:34px; display:flex; }.itinerary-versus span { flex:1; width:auto; height:1px; }.itinerary-periods fieldset { margin-bottom:7px; grid-template-columns:repeat(2,minmax(0,1fr)); }.itinerary-period-note { display:flex; }.itinerary-table-head,.itinerary-table-row { min-width:650px; }.itinerary-direction-summary > div { overflow-x:auto; }
}

@media(max-width:900px){.corridor-periods{grid-template-columns:auto minmax(0,1fr) auto}.corridor-periods>b{display:none}}
@media(max-width:900px){.congestion-controls{grid-template-columns:minmax(0,1fr) auto auto}.congestion-controls>label.congestion-background-control{display:grid}}
@media(max-width:640px){.corridor-periods{grid-template-columns:auto minmax(0,1fr)}.corridor-reference-pill{display:none}.corridor-bin-actions span{display:none}.itinerary-readiness-grid{grid-template-columns:repeat(2,minmax(0,1fr))}}
@media(max-width:1200px){.congestion-kpis.capacity-aware,.bottleneck-kpis.capacity-aware{grid-template-columns:repeat(4,minmax(0,1fr));}}
@media(max-width:900px){.congestion-kpis.capacity-aware,.bottleneck-kpis.capacity-aware{grid-template-columns:repeat(3,minmax(0,1fr));}}
@media(max-width:640px){.congestion-kpis.capacity-aware,.bottleneck-kpis.capacity-aware{grid-template-columns:repeat(2,minmax(0,1fr));}}
@media(max-width:640px){.ops-panel-handle-layers{left:8px;top:76px}.ops-panel-handle-selection{right:8px;top:145px}.ops-panel-handle-fire{right:8px;bottom:76px}}
@media(max-width:1180px){.performance-query{grid-template-columns:repeat(5,minmax(0,1fr))}.performance-query .road,.performance-query .metric{grid-column:span 2}.performance-kpis{grid-template-columns:repeat(3,1fr)}.performance-bottom{grid-template-columns:1fr 1fr}.performance-table-panel{grid-column:1/-1}.performance-toolbar{grid-template-columns:1fr auto}.performance-band-controls{grid-column:1/-1}.performance-export{grid-column:2;grid-row:1}}
@media(max-width:900px){.performance-query{grid-template-columns:repeat(3,minmax(0,1fr))}.performance-query .road,.performance-query .metric{grid-column:auto}.performance-series-bar{grid-template-columns:140px minmax(0,1fr)}.performance-stage{height:auto;display:block}.performance-chart-panel{height:335px;border-right:0;border-bottom:1px solid var(--ops-line)}.performance-bottom{display:block}.performance-bottom>article{margin-top:7px}.performance-table-panel>div{overflow-x:auto}.performance-table-head,.performance-table-row{min-width:610px}}
@media(max-width:640px){.performance-workspace{padding:10px 8px 85px;overflow:visible}.performance-query{grid-template-columns:repeat(2,minmax(0,1fr))}.performance-query .road,.performance-query .metric,.performance-query .congestion-run{grid-column:span 2}.performance-series-bar{display:block}.performance-series-list{margin-top:6px}.performance-kpis{grid-template-columns:repeat(2,1fr)}.performance-toolbar{grid-template-columns:1fr auto;overflow-x:auto}.performance-chart-types{min-width:330px}.performance-export{display:none}.performance-chart-panel{height:330px}}
@media(max-width:1180px){.speed-alert-status{grid-template-columns:repeat(2,minmax(0,1fr))}.speed-alert-builder{grid-template-columns:minmax(360px,1fr) minmax(370px,1fr)}.speed-alert-monitor{grid-template-columns:minmax(430px,1.25fr) minmax(270px,.75fr)}.speed-alert-bottom{grid-template-columns:1fr 1fr}.speed-alert-method{grid-column:1/-1}}
@media(max-width:900px){.speed-alert-builder,.speed-alert-monitor,.speed-alert-bottom{height:auto;display:block}.speed-alert-form,.speed-alert-monitor>article,.speed-alert-bottom>article{margin-top:8px}.speed-alert-map-card,.speed-alert-form{min-height:515px}.speed-alert-timeline,.speed-alert-episodes{height:280px}.speed-alert-kpis{grid-template-columns:repeat(3,1fr)}.speed-alert-bottom>article{min-height:210px}}
@media(max-width:640px){.speed-alert-workspace{padding:10px 8px 85px;overflow:visible}.speed-alert-status{grid-template-columns:repeat(2,minmax(0,1fr))}.speed-alert-status>div{padding:5px;border-left:0;border-top:1px solid rgba(166,195,204,.08)}.speed-alert-status>div:nth-child(-n+2){border-top:0}.speed-alert-map-card,.speed-alert-form{min-height:0}.speed-alert-map-card #speed-alert-map{height:330px}.speed-alert-form-body{grid-template-columns:1fr}.speed-alert-form-body>label,.speed-alert-form-body>label.full,.speed-alert-days,.speed-alert-threshold,.speed-alert-channels{grid-column:1}.speed-alert-threshold{grid-template-columns:1fr 1fr}.speed-alert-threshold>div{grid-column:1/-1}.speed-alert-channels{grid-template-columns:1fr}.speed-alert-days{gap:3px}.speed-alert-days span{font-size:8px}.speed-alert-kpis{grid-template-columns:repeat(2,1fr)}.speed-alert-timeline,.speed-alert-episodes{height:310px}.speed-alert-map-legend{max-width:calc(100% - 18px);flex-wrap:wrap}}

/* Matriz origen-destino · viajes observados */
.od-heading > div:first-child > span { border-color: rgba(75,167,232,.3); color: #75c6ef; background: rgba(75,167,232,.07); }
.od-query { margin-top: 8px; padding: 8px; display: grid; grid-template-columns: repeat(7,minmax(105px,1fr)); gap: 6px; border: 1px solid var(--ops-line); border-radius: 8px; background: #09161e; }
.od-query > label,.od-query > fieldset { min-width: 0; min-height: 43px; margin: 0; padding: 6px 8px; display: flex; flex-direction: column; justify-content: center; border: 1px solid rgba(166,195,204,.11); border-radius: 6px; background: #0c1922; }
.od-query > [hidden] { display: none !important; }
.od-query > label.disabled { opacity: .45; }
.od-query > label > span,.od-query legend { color: #4e6771; font-size: 8px; font-weight: 700; letter-spacing: .48px; }
.od-query select,.od-query input { width: 100%; min-width: 0; margin-top: 4px; border: 0; outline: 0; color: #aebfc3; background: transparent; font-size: 9px; }
.od-query select option { background: #0c1922; }.od-query input::-webkit-calendar-picker-indicator { filter: invert(1); opacity: .42; }
.od-query .od-road-field[hidden] { display: none; }
.od-days { grid-column: span 2; display: grid !important; grid-template-columns: repeat(7,1fr); gap: 3px; align-items: end; }
.od-days legend { grid-column: 1/-1; padding: 0; }.od-days label { height: 18px; position: relative; display: grid; place-items: center; border: 1px solid rgba(166,195,204,.11); border-radius: 4px; cursor: pointer; }.od-days input { position: absolute; opacity: 0; }.od-days span { color: #607780; font-size: 8px; font-weight: 700; }.od-days label:has(input:checked) { border-color: rgba(101,214,170,.28); background: rgba(101,214,170,.07); }.od-days input:checked + span { color: var(--ops-green); }
.od-query .od-intrazonal { display: grid; grid-template-columns: 13px 1fr; gap: 7px; align-items: center; }.od-intrazonal input { width: 11px; height: 11px; margin: 0; accent-color: var(--ops-green); }.od-intrazonal span { line-height: 1.35; }
.od-query .congestion-run { min-height: 43px; border: 1px solid rgba(101,214,170,.3); border-radius: 6px; color: var(--ops-green); background: rgba(101,214,170,.075); cursor: pointer; }.od-query .congestion-run span,.od-query .congestion-run small { display: block; }.od-query .congestion-run span { font-size: 8.5px; font-weight: 700; }.od-query .congestion-run small { margin-top: 3px; color: #5d7b78; font-size: 8px; }.od-query .congestion-run:disabled { opacity: .46; cursor: wait; }

/* Inspector operativo del tramo · velocidad FCD y aforo oficial CM */
.segment-inspector { width: 430px; max-height: calc(100% - 245px); padding: 0; overflow-x: hidden; overflow-y: auto; scrollbar-width: thin; scrollbar-color: #29404b transparent; background: rgba(7,18,27,.97); }
.segment-inspector[hidden] { display: none; }
.segment-inspector-header { min-height: 65px; padding: 13px 44px 11px 15px; position: relative; border-bottom: 1px solid var(--ops-line); background: linear-gradient(105deg,rgba(101,214,170,.055),transparent 70%); }
.segment-inspector-header small { color: #617a84; font-size: 8.5px; font-weight: 700; letter-spacing: .65px; }
.segment-inspector .segment-inspector-header h3 { margin: 5px 0 3px; color: #e1e9eb; font: 600 15px/1.1 "Roboto",Arial,sans-serif; letter-spacing: -.15px; }
.segment-inspector-header p { margin: 0; display: flex; gap: 7px; align-items: center; color: #80959c; font-size: 9px; }
.segment-inspector-header p i { width: 3px; height: 3px; border-radius: 50%; background: #46606b; }
.segment-inspector .close { right: 11px; top: 10px; width: 28px; height: 28px; display: grid; place-items: center; border: 1px solid rgba(166,195,204,.12); border-radius: 7px; color: #799099; background: rgba(10,27,37,.8); font-size: 16px; line-height: 1; }
.segment-live-kpis { display: grid; grid-template-columns: 1.1fr repeat(3,1fr); border-bottom: 1px solid var(--ops-line); }
.segment-live-kpis article { min-width: 0; min-height: 68px; padding: 10px 11px; display: flex; flex-direction: column; justify-content: center; border-right: 1px solid rgba(166,195,204,.09); }
.segment-live-kpis article:last-child { border-right: 0; }
.segment-live-kpis small,.segment-live-kpis strong,.segment-live-kpis span { display: block; }
.segment-live-kpis small { min-height: 15px; color: #506b76; font-size: 8px; font-weight: 700; line-height: 1.3; letter-spacing: .35px; }
.segment-live-kpis strong { margin-top: 5px; color: #dbe5e7; font: 600 15px/1 "Roboto",Arial,sans-serif; white-space: nowrap; }
.segment-live-kpis span { margin-top: 4px; color: #5d747e; font-size: 8.5px; }
.segment-live-kpis .selection-speed { display: flex; gap: 4px; align-items: baseline; }
.segment-live-kpis .selection-speed strong { color: var(--ops-green); font: 600 24px/1 "Roboto",Arial,sans-serif; }
.segment-live-kpis .selection-speed span { font-size: 8.5px; }
.segment-tabs { height: 36px; padding: 5px; display: grid; grid-template-columns: 1fr 1fr; gap: 4px; border-bottom: 1px solid rgba(166,195,204,.08); background: #08151e; }
.segment-tabs button { border: 1px solid transparent; border-radius: 6px; color: #5c747e; background: transparent; font-size: 8.5px; font-weight: 700; letter-spacing: .4px; cursor: pointer; }
.segment-tabs button.active { border-color: rgba(101,214,170,.22); color: var(--ops-green); background: rgba(101,214,170,.065); }
.segment-tab-panel { min-height: 245px; }
.segment-tab-panel[hidden] { display: none; }
.segment-tab-panel > header { min-height: 45px; padding: 8px 12px 7px; display: flex; align-items: center; justify-content: space-between; border-bottom: 1px solid rgba(166,195,204,.07); }
.segment-tab-panel header small,.segment-tab-panel header strong { display: block; }
.segment-tab-panel header small { color: #506873; font-size: 8px; letter-spacing: .45px; }
.segment-tab-panel header strong { margin-top: 3px; color: #9fb2b7; font-size: 9px; }
.segment-tab-panel header > span { color: #65827f; font-size: 8px; font-weight: 700; }
.segment-tab-panel header label { min-width: 105px; padding: 4px 7px; border: 1px solid rgba(166,195,204,.1); border-radius: 6px; background: #0b1a24; }
.segment-tab-panel header label span { display: block; color: #4c6570; font-size: 8px; }
.segment-tab-panel header select { width: 100%; margin-top: 2px; border: 0; outline: 0; color: #9db0b5; background: transparent; font-size: 8.5px; }
.segment-tab-panel header select option { background: #0b1a24; }
.segment-chart-wrap { height: 180px; position: relative; }
.segment-chart-wrap canvas { width: 100%; height: 100%; display: block; }
.segment-chart-empty { position: absolute; inset: 0; display: grid; place-items: center; padding: 20px; color: #5d747e; background: rgba(8,21,30,.88); font-size: 9px; line-height: 1.5; text-align: center; }
.segment-chart-empty[hidden] { display: none; }
.segment-chart-legend { min-height: 25px; padding: 0 13px; display: flex; gap: 15px; align-items: center; border-top: 1px solid rgba(166,195,204,.06); color: #627984; font-size: 8.5px; }
.segment-chart-legend span::before { content: ""; width: 13px; height: 2px; margin-right: 5px; display: inline-block; vertical-align: middle; border-radius: 2px; background: var(--legend-color); }
.segment-chart-legend .observed { --legend-color: var(--ops-green); }.segment-chart-legend .reference { --legend-color: #718bf0; }.segment-chart-legend .count { --legend-color: var(--ops-blue); }
.segment-inspector .segment-metadata { margin: 0; padding: 0 12px; border-top: 1px solid var(--ops-line); }
.segment-inspector .segment-metadata div { min-height: 31px; grid-template-columns: 112px 1fr; }
.segment-inspector .segment-metadata dt { font-size: 8.5px; }.segment-inspector .segment-metadata dd { font-size: 8.5px; }
.segment-metadata .legacy-detail { display: none !important; }
.segment-inspector > footer { min-height: 38px; margin: 0; padding: 8px 12px; display: flex; gap: 10px; align-items: center; justify-content: space-between; border-top: 1px solid var(--ops-line); background: rgba(101,214,170,.022); }
.segment-inspector > footer span { display: flex; gap: 6px; align-items: center; color: #778c93; font-size: 8.5px; white-space: nowrap; }.segment-inspector > footer span i { width: 5px; height: 5px; border-radius: 50%; background: var(--ops-green); box-shadow: 0 0 6px rgba(101,214,170,.45); }
.segment-inspector > footer small { color: #536b75; font-size: 8px; line-height: 1.35; text-align: right; }
.segment-inspector.is-fire { width: 370px; }.segment-inspector.is-fire .segment-analysis,.segment-inspector.is-fire .segment-metadata { display: none; }.segment-inspector.is-fire .segment-live-kpis { grid-template-columns: repeat(2,1fr); }.segment-inspector.is-fire .segment-live-kpis article { min-height: 61px; }.segment-inspector.is-fire .segment-live-kpis article:nth-child(2n) { border-right: 0; }.segment-inspector.is-fire .segment-live-kpis article:nth-child(-n+2) { border-bottom: 1px solid rgba(166,195,204,.09); }.segment-inspector.is-fire .segment-live-kpis .selection-speed strong { color: #ff806c; font-size: 17px; }.segment-inspector.is-fire .segment-inspector-header { background: linear-gradient(105deg,rgba(255,93,76,.1),transparent 72%); }
.fire-impact-detail[hidden] { display: none; }.fire-impact-detail { padding: 11px 13px 12px; border-bottom: 1px solid var(--ops-line); background: rgba(255,111,71,.025); }.fire-impact-detail header small,.fire-impact-detail header strong { display: block; }.fire-impact-detail header small { color: #886c64; font-size: 8px; font-weight: 700; letter-spacing: .5px; }.fire-impact-detail header strong { margin-top: 4px; color: #d1dcde; font-size: 10px; line-height: 1.35; }.fire-impact-detail ul { margin: 9px 0 0; padding: 0; list-style: none; }.fire-impact-detail li { min-height: 25px; padding: 5px 0 5px 10px; position: relative; border-top: 1px solid rgba(166,195,204,.07); color: #91a4aa; font-size: 8.5px; line-height: 1.35; }.fire-impact-detail li::before { content: ""; position: absolute; left: 0; top: 9px; width: 4px; height: 4px; border-radius: 50%; background: #ff765e; }.fire-impact-detail > p { margin: 9px 0 0; color: #72868d; font-size: 8.5px; line-height: 1.45; }.fire-impact-detail dl { margin: 9px 0 0; }.fire-impact-detail dl div { min-height: 25px; display: grid; grid-template-columns: 1fr auto; gap: 10px; align-items: center; border-top: 1px solid rgba(166,195,204,.07); }.fire-impact-detail dt { color: #667b83; font-size: 8.5px; }.fire-impact-detail dd { margin: 0; color: #aebdc0; font-size: 8.5px; font-weight: 600; text-align: right; }.fire-impact-detail footer { margin-top: 9px; padding-top: 8px; border-top: 1px solid rgba(255,139,95,.12); color: #806e68; font-size: 8px; line-height: 1.45; }
.segment-inspector.is-dgt { width: 340px; }.segment-inspector.is-dgt .segment-analysis { display: none; }.segment-inspector.is-dgt .segment-inspector-header { background: linear-gradient(105deg,rgba(226,68,92,.09),transparent 72%); }.segment-inspector.is-dgt .segment-live-kpis { grid-template-columns: repeat(2,1fr); }.segment-inspector.is-dgt .segment-live-kpis article:nth-child(2) { border-right: 0; }.segment-inspector.is-dgt .segment-live-kpis article:nth-child(-n+2) { border-bottom: 1px solid rgba(166,195,204,.09); }.segment-inspector.is-dgt .segment-live-kpis .selection-speed strong { color: #f08072; font-size: 15px; }.segment-inspector.is-dgt .segment-metadata dd { max-width: 205px; overflow-wrap: anywhere; }.segment-inspector.is-dgt footer i { background: #e2445c; box-shadow: 0 0 7px rgba(226,68,92,.48); }
.segment-inspector.is-count .segment-tabs { grid-template-columns: 1fr; }
.segment-inspector.is-count .segment-tabs [data-segment-tab="speed"] { display: none; }
.segment-inspector.is-count .segment-tab-panel[data-segment-panel="speed"] { display: none !important; }
.segment-inspector.is-count .segment-inspector-header { background: linear-gradient(105deg,rgba(69,183,231,.075),transparent 70%); }
.segment-inspector.is-count .segment-live-kpis .selection-speed strong { color: var(--ops-blue); }

@media(max-width:900px){.segment-inspector{width:390px;max-height:calc(100% - 245px)}}
@media(max-width:640px){.segment-inspector{left:8px;right:8px;width:auto;max-height:calc(100% - 225px)}.segment-live-kpis{grid-template-columns:repeat(2,1fr)}.segment-live-kpis article:nth-child(2){border-right:0}.segment-live-kpis article:nth-child(-n+2){border-bottom:1px solid rgba(166,195,204,.09)}.segment-inspector.is-fire{left:8px;right:8px;width:auto}.segment-inspector.is-dgt{left:8px;right:8px;width:auto}}
.od-source-strip { min-height: 48px; margin-top: 7px; display: grid; grid-template-columns: repeat(6,1fr); border: 1px solid var(--ops-line); border-radius: 8px; background: #09161e; overflow: hidden; }.od-source-strip > div { padding: 8px 10px; display: flex; flex-direction: column; justify-content: center; border-right: 1px solid rgba(166,195,204,.09); }.od-source-strip > div:last-child { border-right: 0; }.od-source-strip small,.od-source-strip strong { display: block; }.od-source-strip small { color: #4c6570; font-size: 8px; letter-spacing: .45px; }.od-source-strip strong { margin-top: 4px; color: #91a5aa; font-size: 8.5px; }.od-source-strip .pending strong { color: var(--ops-amber); }
.od-kpis { margin: 8px 0; grid-template-columns: repeat(5,1fr); }
.od-stage { height: 455px; display: grid; grid-template-columns: minmax(350px,1.05fr) minmax(340px,.95fr) minmax(255px,.7fr); border: 1px solid var(--ops-line); border-radius: 8px; background: #09151d; overflow: hidden; }
.od-stage > article { min-width: 0; min-height: 0; border-right: 1px solid var(--ops-line); }.od-stage > article:last-child { border-right: 0; }.od-stage article > header,.od-bottom article > header { min-height: 46px; padding: 0 10px; display: flex; align-items: center; justify-content: space-between; border-bottom: 1px solid rgba(166,195,204,.09); }.od-stage header small,.od-stage header h3,.od-bottom header small,.od-bottom header h3 { display: block; }.od-stage header small,.od-bottom header small { color: #4d6670; font-size: 8px; letter-spacing: .52px; }.od-stage header h3,.od-bottom header h3 { margin: 3px 0 0; color: #acbdc1; font-size: 9px; }.od-stage header > span,.od-bottom header > span { color: #617983; font-size: 8px; }
.od-matrix-card { display: grid; grid-template-rows: 46px minmax(0,1fr) 31px; }.od-matrix-grid { min-width: 0; min-height: 0; padding: 8px; overflow: auto; scrollbar-width: thin; scrollbar-color: #20343d transparent; }.od-matrix-table { min-width: calc(76px + var(--od-columns)*47px); display: grid; grid-template-columns: 72px repeat(var(--od-columns),minmax(43px,1fr)); gap: 2px; }.od-corner,.od-column-head,.od-row-head { display: grid; place-items: center; min-height: 27px; color: #607985; background: #0b1a23; font-size: 8px; font-weight: 700; }.od-row-head { padding: 0 6px; justify-items: start; }.od-cell { min-height: 31px; border: 1px solid rgba(101,214,170,calc(.04 + var(--intensity)*.22)); border-radius: 3px; color: rgba(223,239,235,calc(.36 + var(--intensity)*.64)); background: rgba(41,174,132,calc(.025 + var(--intensity)*.72)); font-size: 8.5px; font-weight: 600; cursor: pointer; transition: .12s; }.od-cell:hover,.od-cell.selected { position: relative; z-index: 1; border-color: #dfeceb; color: #fff; box-shadow: 0 0 0 1px rgba(255,255,255,.22),0 0 14px rgba(101,214,170,.16); }.od-cell.suppressed { border-style: dashed; color: var(--ops-amber); background: rgba(240,168,79,.035); }.od-matrix-card > footer { padding: 0 9px; display: flex; gap: 12px; align-items: center; border-top: 1px solid rgba(166,195,204,.08); color: #5a727c; font-size: 8px; }.od-matrix-card footer i { width: 20px; height: 5px; display: inline-block; margin-right: 4px; border-radius: 2px; background: linear-gradient(90deg,rgba(41,174,132,.06),rgba(41,174,132,.75)); }.od-matrix-card footer b { margin-right: 4px; color: var(--ops-amber); }
.od-map-card { display: grid; grid-template-rows: 46px minmax(0,1fr) 31px; }.od-map-card header button,.od-ranking-card header button { height: 24px; padding: 0 8px; border: 1px solid var(--ops-line); border-radius: 5px; color: #728891; background: #0d1c26; font-size: 8px; font-weight: 700; cursor: pointer; }.od-map-card #od-flow-map { min-height: 0; background: #08131c; }.od-map-card > footer { padding: 0 9px; display: flex; align-items: center; justify-content: space-between; border-top: 1px solid rgba(166,195,204,.08); color: #5a727c; font-size: 8px; }
.od-chord-card { display: grid; grid-template-rows: 46px minmax(0,1fr) auto; }.od-chord-card header > span { padding: 4px 6px; border: 1px solid rgba(101,214,170,.2); border-radius: 99px; color: var(--ops-green); background: rgba(101,214,170,.05); }.od-chord-card header > span.suppressed { border-color: rgba(240,168,79,.24); color: var(--ops-amber); background: rgba(240,168,79,.05); }.od-chord-card > div { min-height: 0; }.od-chord-card canvas,.od-profile-card canvas { display: block; width: 100%; height: 100%; }.od-chord-card dl { margin: 0; padding: 4px 9px 8px; border-top: 1px solid rgba(166,195,204,.08); }.od-chord-card dl div { min-height: 24px; display: grid; grid-template-columns: 92px 1fr; gap: 7px; align-items: center; border-bottom: 1px solid rgba(166,195,204,.055); }.od-chord-card dl div:last-child { border-bottom: 0; }.od-chord-card dt { color: #4f6872; font-size: 8px; }.od-chord-card dd { margin: 0; overflow: hidden; color: #91a4aa; font-size: 8px; text-align: right; text-overflow: ellipsis; white-space: nowrap; }
.od-bottom { margin-top: 8px; display: grid; grid-template-columns: minmax(360px,1.2fr) minmax(280px,.85fr) minmax(330px,1fr) minmax(250px,.72fr); gap: 8px; }.od-bottom > article { min-width: 0; height: 245px; border: 1px solid var(--ops-line); border-radius: 8px; background: #0b1720; overflow: hidden; }.od-profile-card { display: grid; grid-template-rows: 46px minmax(0,1fr); }.od-profile-card > div { min-height: 0; }.od-ranking-card { display: grid; grid-template-rows: 46px minmax(0,1fr); }.od-ranking-card header > div:last-child { display: flex; gap: 4px; }.od-ranking-card > div { min-height: 0; padding: 4px 8px 8px; overflow-y: auto; scrollbar-width: thin; scrollbar-color: #20343d transparent; }.od-ranking-card > div > button { width: 100%; min-height: 36px; padding: 3px 2px; display: grid; grid-template-columns: 19px 1fr 43px; gap: 7px; align-items: center; border: 0; border-bottom: 1px solid rgba(166,195,204,.065); color: inherit; background: transparent; text-align: left; cursor: pointer; }.od-ranking-card button:hover { background: rgba(101,214,170,.035); }.od-ranking-card button > i { width: 17px; height: 17px; display: grid; place-items: center; border: 1px solid var(--ops-line); border-radius: 50%; color: #607984; font-size: 8px; font-style: normal; }.od-ranking-card strong,.od-ranking-card small { display: block; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }.od-ranking-card strong { color: #91a5aa; font-size: 8px; }.od-ranking-card small { margin-top: 3px; color: #526a74; font-size: 8px; }.od-ranking-card b { color: var(--ops-green); font-size: 8.5px; text-align: right; }.od-ranking-card p { padding: 10px; color: #617983; font-size: 8.5px; line-height: 1.5; }
.od-method p { margin: 0; padding: 12px; color: #657b84; font-size: 8.5px; line-height: 1.65; }.od-method > div { margin: 0 12px; padding: 9px; border: 1px solid rgba(240,168,79,.14); border-radius: 6px; background: rgba(240,168,79,.035); }.od-method > div span,.od-method > div strong { display: block; }.od-method > div span { color: #7c6a4d; font-size: 8px; }.od-method > div strong { margin-top: 4px; color: #b39b76; font-size: 8px; }
.od-socio-card #od-socio-context { height: calc(100% - 67px); margin: 10px; padding: 0; display: grid; grid-template-columns: 1fr 1fr; gap: 7px; border: 0; background: transparent; overflow: auto; }.od-socio-card section { min-width: 0; padding: 8px; border: 1px solid rgba(101,214,170,.13); border-radius: 6px; background: rgba(101,214,170,.025); }.od-socio-card section > small { color: #547069; font-size: 8px; letter-spacing: .45px; }.od-socio-card h4 { margin: 4px 0 8px; color: #a9c7bf; font-size: 9px; line-height: 1.3; }.od-socio-card dl { margin: 0; }.od-socio-card dl div { display: flex; justify-content: space-between; gap: 7px; padding: 3px 0; border-top: 1px solid rgba(166,195,204,.055); }.od-socio-card dt,.od-socio-card dd { margin: 0; font-size: 7.5px; }.od-socio-card dt { color: #526a74; }.od-socio-card dd { color: #91aaa3; font-weight: 700; text-align: right; }.od-socio-card section p { padding: 7px 0 0; color: #526a74; font-size: 7.5px; line-height: 1.35; }

/* Lectura interactiva de rendimiento: todas las series bajo el cursor. */
.performance-tooltip { width: 310px; max-height: 330px; padding: 0; overflow: hidden; }
.performance-tooltip > header { padding: 8px 10px 7px; border-bottom: 1px solid rgba(166,195,204,.1); background: #0a1821; }
.performance-tooltip > header strong { color: #c9d5d8; font-size: 9px; }
.performance-tooltip > header span { margin-top: 3px; color: #617983; font-size: 8px; }
.performance-tooltip-incident { min-height: 34px; padding: 6px 10px; display: grid; grid-template-columns: 9px 1fr; gap: 0 7px; align-items: center; border-bottom: 1px solid rgba(240,93,120,.12); background: rgba(240,93,120,.035); }.performance-tooltip-incident i { grid-row: 1/3; width: 8px; height: 22px; border: 1px solid rgba(240,93,120,.4); background: repeating-linear-gradient(135deg,rgba(240,93,120,.38) 0 1px,transparent 1px 4px); }.performance-tooltip-incident strong { color: #df8797; font-size: 8px; }.performance-tooltip-incident span { margin: 2px 0 0; overflow: hidden; color: #80656b; font-size: 8px; text-overflow: ellipsis; white-space: nowrap; }
.performance-tooltip-values { max-height: 270px; padding: 4px 8px 7px; overflow-y: auto; scrollbar-width: thin; scrollbar-color: #27404a transparent; }
.performance-tooltip-row { min-height: 29px; padding: 4px 2px; display: grid; grid-template-columns: 4px minmax(0,1fr) auto; gap: 7px; align-items: center; border-bottom: 1px solid rgba(166,195,204,.07); }
.performance-tooltip-row:last-child { border-bottom: 0; }
.performance-tooltip-row > i { width: 4px; height: 22px; border-radius: 3px; background: var(--series-color); }
.performance-tooltip-row > span { min-width: 0; margin: 0; }
.performance-tooltip-row strong { overflow: hidden; color: #98adb1; font-size: 8px; text-overflow: ellipsis; white-space: nowrap; }
.performance-tooltip-row.focused strong { color: #d4dfe1; }
.performance-tooltip-row small { display: block; margin-top: 2px; color: #586f79; font-size: 8px; line-height: 1.35; }
.performance-tooltip-row > b { margin: 0; color: #d5e2df; font-size: 8.5px; white-space: nowrap; }
.performance-tooltip-row.focused > b { color: var(--ops-green); }
.congestion-tooltip.is-waze { width:330px; padding:0; overflow:hidden; border-color:rgba(51,204,255,.25); }.waze-tooltip-head { min-height:47px; padding:7px 9px; display:grid; grid-template-columns:31px minmax(0,1fr); gap:8px; align-items:center; border-bottom:1px solid rgba(51,204,255,.12); background:linear-gradient(135deg,rgba(51,204,255,.08),rgba(9,21,29,.98)); }.waze-tooltip-head > img { width:28px; height:33px; object-fit:contain; }.waze-tooltip-head > span { min-width:0; margin:0; }.waze-tooltip-head strong { color:#d7e6e9; font-size:9px; }.waze-tooltip-head small { display:block; margin-top:3px; color:#66818b; font-size:8px; }.waze-tooltip-row { min-height:38px; padding:5px 9px; display:grid; grid-template-columns:25px minmax(0,1fr); gap:7px; align-items:center; border-bottom:1px solid rgba(166,195,204,.07); }.waze-tooltip-row > img { width:23px; height:27px; object-fit:contain; }.waze-tooltip-row > span { min-width:0; margin:0; }.waze-tooltip-row strong { overflow:hidden; color:#acbec2; font-size:8.5px; text-overflow:ellipsis; white-space:nowrap; }.waze-tooltip-row small { display:block; margin-top:3px; overflow:hidden; color:#607981; font-size:8px; text-overflow:ellipsis; white-space:nowrap; }.congestion-tooltip.is-waze > p { margin:0; padding:6px 9px; color:#607981; font-size:8px; }
.congestion-tooltip.is-fcd { width:310px; border-color:rgba(177,92,255,.38); background:linear-gradient(145deg,rgba(35,20,49,.98),rgba(7,18,26,.98)); }.congestion-tooltip.is-fcd strong { display:flex; gap:7px; align-items:center; }.congestion-tooltip.is-fcd strong i { width:8px; height:8px; border:1px solid #fff; border-radius:50%; background:var(--trajectory-color); box-shadow:0 0 9px var(--trajectory-color); }.congestion-tooltip.is-fcd span { color:#bd92ee; }.congestion-tooltip.is-fcd small { display:block; margin-top:5px; color:#7e708c; font-size:8px; line-height:1.35; }

/* Lectura dirigida del mapa y del diagrama de relaciones OD. */
.od-map-shell { position: relative; min-width: 0; min-height: 0; overflow: hidden; }
.od-map-card #od-flow-map { width: 100%; height: 100%; }
.od-map-legend { position: absolute; z-index: 2; left: 8px; bottom: 8px; width: 154px; padding: 7px 8px; display: grid; gap: 4px; border: 1px solid rgba(166,195,204,.17); border-radius: 6px; background: rgba(7,18,26,.92); box-shadow: 0 7px 20px rgba(0,0,0,.22); pointer-events: none; }
.od-map-legend strong { color: #9caeb3; font-size: 8px; letter-spacing: .45px; }
.od-map-legend span { display: flex; gap: 6px; align-items: center; color: #71878f; font-size: 8px; }
.od-map-legend i { position: relative; flex: 0 0 19px; height: 7px; display: block; }
.od-map-legend i.flow::before { content: ""; position: absolute; left: 0; right: 4px; top: 3px; height: 2px; border-radius: 2px; background: var(--ops-green); }
.od-map-legend i.flow::after { content: ""; position: absolute; right: 0; top: 1px; border-width: 3px 0 3px 5px; border-style: solid; border-color: transparent transparent transparent #dfe8ea; }
.od-map-legend i.origin::before,.od-map-legend i.destination::before { content: ""; position: absolute; left: 6px; top: 0; width: 7px; height: 7px; box-sizing: border-box; border-radius: 50%; }
.od-map-legend i.origin::before { background: var(--ops-green); }
.od-map-legend i.destination::before { border: 1.5px solid #e5edef; background: #09151d; }
.od-map-legend small { margin-top: 2px; color: #4f6871; font-size: 8px; line-height: 1.35; }
.od-chord-visual { position: relative; overflow: hidden; }
.od-chord-card canvas { cursor: crosshair; }
.od-chord-guide { position: absolute; left: 7px; bottom: 6px; padding: 5px 6px; display: grid; grid-template-columns: auto auto; gap: 3px 7px; border: 1px solid rgba(166,195,204,.11); border-radius: 5px; background: rgba(7,18,26,.83); pointer-events: none; }
.od-chord-guide span { display: flex; gap: 4px; align-items: center; color: #657b84; font-size: 8px; }
.od-chord-guide i { width: 12px; height: 2px; border-radius: 2px; background: var(--ops-green); }
.od-chord-guide b { color: #dfe8ea; font-size: 9.5px; line-height: 5px; }
.od-chord-guide small { grid-column: 1/-1; color: #4c6570; font-size: 8px; }
.od-tooltip { width: 255px; padding: 0; overflow: hidden; }
.od-tooltip > header { padding: 8px 9px 7px; border-bottom: 1px solid rgba(166,195,204,.1); background: #0a1821; }
.od-tooltip > header strong { overflow: hidden; color: #d1dcde; font-size: 8.5px; text-overflow: ellipsis; white-space: nowrap; }
.od-tooltip > header span { color: #607780; font-size: 8px; }
.od-tooltip-main { padding: 7px 9px; border-bottom: 1px solid rgba(166,195,204,.08); }
.od-tooltip-main b { margin: 0; color: var(--ops-green); font-size: 9px; }
.od-tooltip-main small { display: block; margin-top: 3px; color: #526b75; font-size: 8px; }
.od-tooltip-metrics { padding: 6px 9px; display: grid; grid-template-columns: repeat(3,1fr); gap: 5px; }
.od-tooltip-metrics > span { min-width: 0; margin: 0; }
.od-tooltip-metrics small,.od-tooltip-metrics strong { display: block; }
.od-tooltip-metrics small { color: #506973; font-size: 8px; white-space: nowrap; }
.od-tooltip-metrics strong { margin-top: 3px; color: #aebec2; font-size: 8px; }
.od-tooltip > footer { padding: 6px 9px; border-top: 1px solid rgba(166,195,204,.08); color: #617983; background: rgba(101,214,170,.025); font-size: 8px; }

@media(max-width:1180px){.od-query{grid-template-columns:repeat(5,minmax(105px,1fr))}.od-stage{height:auto;grid-template-columns:1fr 1fr}.od-matrix-card,.od-map-card{height:430px}.od-chord-card{grid-column:1/-1;height:390px;border-top:1px solid var(--ops-line)}.od-bottom{grid-template-columns:1fr 1fr}.od-method{grid-column:1/-1}.od-source-strip{grid-template-columns:repeat(3,1fr)}}
@media(max-width:900px){.od-query{grid-template-columns:repeat(3,minmax(100px,1fr))}.od-kpis{grid-template-columns:repeat(3,1fr)}.od-stage{display:block;overflow:visible;border:0}.od-stage>article{height:410px;margin-top:7px;border:1px solid var(--ops-line);border-radius:8px;overflow:hidden}.od-chord-card{height:400px}.od-bottom{display:block}.od-bottom>article{margin-top:7px}.od-source-strip{grid-template-columns:repeat(2,1fr)}}
@media(max-width:640px){.od-workspace{padding:10px 8px 85px;overflow:visible}.od-query{grid-template-columns:repeat(2,minmax(0,1fr))}.od-days{grid-column:span 2}.od-query .congestion-run{grid-column:span 2}.od-source-strip{grid-template-columns:1fr 1fr}.od-kpis{grid-template-columns:repeat(2,1fr)}.od-stage>article{height:370px}.od-matrix-card{height:415px!important}.od-chord-card{height:430px!important}.od-bottom>article{height:285px}.od-method{height:auto!important;min-height:250px}.od-source-strip>div{border-bottom:1px solid rgba(166,195,204,.07)}}

/* Aforos oficiales CM · lectura, validación y calibración trazable */
.count-heading > div:first-child > span { border-color: rgba(98,185,230,.32); color: #72c7ef; background: rgba(98,185,230,.075); }
.count-heading { height: 56px; }
.count-heading .congestion-title p { margin: 3px 0 0; color: #647b84; font-size: 8.5px; }
.count-heading .congestion-source strong,.count-heading .congestion-source span { display: block; }
.count-query { margin-top: 8px; padding: 8px; display: grid; grid-template-columns: minmax(105px,.75fr) minmax(155px,1.25fr) minmax(115px,.85fr) minmax(105px,.8fr) minmax(105px,.75fr); gap: 6px; border: 1px solid var(--ops-line); border-radius: 8px; background: #09161e; }
.count-query > label { min-width: 0; min-height: 43px; padding: 6px 8px; display: flex; flex-direction: column; justify-content: center; border: 1px solid rgba(166,195,204,.11); border-radius: 6px; background: #0c1922; }
.count-query label > span { color: #4e6771; font-size: 8px; font-weight: 700; letter-spacing: .48px; }
.count-query select { width: 100%; min-width: 0; margin-top: 4px; border: 0; outline: 0; color: #aebfc3; background: transparent; font-size: 9px; }
.count-query select option { background: #0c1922; }
.count-query .congestion-run { min-height: 43px; border: 1px solid rgba(101,214,170,.3); border-radius: 6px; color: var(--ops-green); background: rgba(101,214,170,.075); cursor: pointer; }
.count-query .congestion-run span,.count-query .congestion-run small { display: block; }.count-query .congestion-run span { font-size: 8.5px; font-weight: 700; }.count-query .congestion-run small { margin-top: 3px; color: #5d7b78; font-size: 8px; }.count-query .congestion-run:disabled { opacity: .46; cursor: wait; }
.count-source-strip { min-height: 56px; margin-top: 7px; display: grid; grid-template-columns: repeat(4,1fr); border: 1px solid var(--ops-line); border-radius: 8px; background: #09161e; overflow: hidden; }
.count-source-strip article { padding: 8px 11px; display: flex; flex-direction: column; justify-content: center; border-right: 1px solid rgba(166,195,204,.09); }.count-source-strip article:last-child { border-right: 0; }
.count-source-strip small,.count-source-strip strong,.count-source-strip span { display: block; }.count-source-strip small { color: #4c6570; font-size: 8px; letter-spacing: .45px; }.count-source-strip strong { margin-top: 4px; color: #98adb2; font-size: 8.5px; }.count-source-strip span { margin-top: 3px; color: #536d77; font-size: 8px; }
.count-kpis { margin: 8px 0; grid-template-columns: repeat(5,1fr); }
.count-stage { height: 340px; display: grid; grid-template-columns: minmax(480px,1.45fr) minmax(330px,.8fr); border: 1px solid var(--ops-line); border-radius: 8px; background: #09151d; overflow: hidden; }
.count-stage > article { min-width: 0; min-height: 0; border-right: 1px solid var(--ops-line); }.count-stage > article:last-child { border-right: 0; }
.count-stage article > header,.count-bottom article > header { min-height: 46px; padding: 0 11px; display: flex; align-items: center; justify-content: space-between; border-bottom: 1px solid rgba(166,195,204,.09); }
.count-stage header small,.count-stage header h3,.count-bottom header small,.count-bottom header h3 { display: block; }.count-stage header small,.count-bottom header small { color: #4d6670; font-size: 8px; letter-spacing: .52px; }.count-stage header h3,.count-bottom header h3 { margin: 3px 0 0; color: #acbdc1; font-size: 9px; }.count-stage header > span,.count-bottom header > span { color: #617983; font-size: 8px; }
.count-curve-card { display: grid; grid-template-rows: 46px minmax(0,1fr) 28px; }.count-curve-card > div { min-height: 0; }.count-curve-card canvas { width: 100%; height: 100%; display: block; cursor: crosshair; }.count-curve-card > footer { padding: 0 11px; display: flex; align-items: center; justify-content: space-between; border-top: 1px solid rgba(166,195,204,.07); color: #5a727c; font-size: 8px; }
.count-chart-legend { display: flex; gap: 10px; }.count-chart-legend span { color: #71868e; font-size: 8px; }.count-chart-legend span::before { content: ""; width: 11px; height: 2px; margin-right: 4px; display: inline-block; vertical-align: middle; border-radius: 2px; background: var(--line); }.count-chart-legend .total { --line:#d9e4e6; }.count-chart-legend .ascending { --line:#65d6aa; }.count-chart-legend .descending { --line:#62b9e6; }
.count-heat-card { display: grid; grid-template-rows: 46px minmax(0,1fr) 28px; }.count-heatmap { min-height: 0; padding: 12px 10px 8px; display: grid; align-content: stretch; gap: 4px; }
.count-heat-hours,.count-heat-row { min-width: 0; display: grid; grid-template-columns: 24px repeat(24,minmax(4px,1fr)); gap: 2px; align-items: center; }.count-heat-hours small { color: #4e6771; font-size: 8px; text-align: center; }.count-heat-row strong { color: #607983; font-size: 8px; font-weight: 600; }.count-heat-row button { width: 100%; height: 100%; min-height: 19px; padding: 0; border: 1px solid rgba(255,255,255,.025); border-radius: 2px; background: var(--count-heat); cursor: crosshair; transition: transform .1s,border-color .1s; }.count-heat-row button:hover { z-index: 1; border-color: rgba(255,255,255,.66); transform: scale(1.35); }
.count-heat-card > footer { padding: 0 11px; display: flex; gap: 13px; align-items: center; border-top: 1px solid rgba(166,195,204,.07); color: #5a727c; font-size: 8px; }.count-heat-card footer i,.count-heat-card footer b { width: 20px; height: 5px; margin-right: 4px; display: inline-block; border-radius: 2px; }.count-heat-card footer i { background: rgba(48,151,125,.3); }.count-heat-card footer b { background: rgba(221,81,83,.8); }
.count-bottom { margin-top: 8px; display: grid; grid-template-columns: minmax(250px,.72fr) minmax(390px,1.05fr) minmax(380px,1.12fr); gap: 8px; }
.count-bottom > article { min-width: 0; height: 260px; border: 1px solid var(--ops-line); border-radius: 8px; background: #0b1720; overflow: hidden; }
.count-inventory-bars { padding: 8px 11px; }.count-inventory-bars > div { min-height: 40px; position: relative; display: grid; grid-template-columns: 1fr 35px; gap: 8px; align-items: center; border-bottom: 1px solid rgba(166,195,204,.06); }.count-inventory-bars span strong,.count-inventory-bars span small { display: block; }.count-inventory-bars span strong { color: #8fa4aa; font-size: 8.5px; }.count-inventory-bars span small { margin-top: 3px; color: #536b75; font-size: 8px; }.count-inventory-bars > div > b { color: #c4d1d4; font-size: 9px; text-align: right; }.count-inventory-bars > div > i { position: absolute; left: 0; right: calc(100% - var(--share)); bottom: 0; height: 2px; background: var(--ops-blue); }.count-inventory-bars > p { margin: 9px 0 0; color: #5e747d; font-size: 8px; line-height: 1.5; }.count-inventory-bars > p strong { color: #78bde2; }
.count-quality-card { display: grid; grid-template-rows: 46px minmax(0,1fr); }.count-quality-card header button { height: 24px; padding: 0 9px; border: 1px solid var(--ops-line); border-radius: 5px; color: #738a93; background: #0d1c26; font-size: 8px; font-weight: 700; cursor: pointer; }.count-table { min-width: 0; min-height: 0; overflow: auto; scrollbar-width: thin; scrollbar-color: #20343d transparent; }.count-table-head,.count-table-row { min-width: 430px; min-height: 28px; padding: 0 9px; display: grid; grid-template-columns: 50px repeat(3,1fr) 1.1fr 68px; gap: 5px; align-items: center; border-bottom: 1px solid rgba(166,195,204,.06); }.count-table-head { position: sticky; z-index: 1; top: 0; min-height: 26px; color: #4f6872; background: #0a1821; font-size: 8px; }.count-table-row span,.count-table-row strong,.count-table-row b { font-size: 8px; }.count-table-row span { color: #637b84; }.count-table-row strong { color: #d4dfe1; }.count-table-row b { color: var(--ops-green); font-weight: 600; }
.count-calibration-card header > span { padding: 4px 7px; border: 1px solid rgba(240,168,79,.28); border-radius: 99px; color: var(--ops-amber); background: rgba(240,168,79,.055); font-size: 8px; font-weight: 700; }.count-calibration-flow { min-height: 74px; padding: 10px 11px 7px; display: grid; grid-template-columns: 1fr 14px 1fr 14px 1fr; gap: 5px; align-items: center; }.count-calibration-flow > div { min-width: 0; padding: 7px; border: 1px solid rgba(166,195,204,.09); border-radius: 6px; background: #09161e; }.count-calibration-flow small,.count-calibration-flow strong,.count-calibration-flow span { display: block; }.count-calibration-flow small { color: #4e6872; font-size: 8px; }.count-calibration-flow strong { margin-top: 4px; overflow: hidden; color: #9fb1b5; font-size: 8.5px; text-overflow: ellipsis; white-space: nowrap; }.count-calibration-flow span { margin-top: 3px; color: #526b75; font-size: 8px; }.count-calibration-flow > i { color: #536b75; font-size: 10px; font-style: normal; text-align: center; }.count-calibration-flow .result { border-style: dashed; border-color: rgba(240,168,79,.2); }.count-calibration-flow .result strong { color: var(--ops-amber); }.count-calibration-card > p { margin: 0; padding: 0 11px 8px; color: #617780; font-size: 8px; line-height: 1.45; }.count-calibration-card dl { margin: 0 11px; border-top: 1px solid rgba(166,195,204,.07); }.count-calibration-card dl div { min-height: 25px; display: grid; grid-template-columns: 95px 1fr; gap: 6px; align-items: center; border-bottom: 1px solid rgba(166,195,204,.055); }.count-calibration-card dt { color: #536b75; font-size: 8px; }.count-calibration-card dd { margin: 0; color: #879ba1; font-size: 8px; text-align: right; }
.count-tooltip { position: absolute; z-index: 20; width: 195px; padding: 0; overflow: hidden; border: 1px solid rgba(166,195,204,.23); border-radius: 7px; background: rgba(7,18,26,.98); box-shadow: 0 12px 28px rgba(0,0,0,.38); pointer-events: none; }.count-tooltip header { padding: 8px 9px 7px; border-bottom: 1px solid rgba(166,195,204,.09); background: #0a1821; }.count-tooltip header strong,.count-tooltip header span { display: block; }.count-tooltip header strong { color: #d2dddf; font-size: 8.5px; }.count-tooltip header span { margin-top: 3px; color: #58717b; font-size: 8px; }.count-tooltip > div { min-height: 27px; padding: 0 9px; display: flex; align-items: center; justify-content: space-between; border-bottom: 1px solid rgba(166,195,204,.06); }.count-tooltip > div:last-child { border-bottom: 0; }.count-tooltip > div span { color: #647b84; font-size: 8px; }.count-tooltip > div strong { color: #cbd7d9; font-size: 8px; }

@media(max-width:1180px){.count-query{grid-template-columns:repeat(3,minmax(110px,1fr))}.count-stage{height:auto;grid-template-columns:1fr}.count-stage>article{height:335px;border-right:0;border-bottom:1px solid var(--ops-line)}.count-bottom{grid-template-columns:1fr 1fr}.count-calibration-card{grid-column:1/-1}.count-source-strip{grid-template-columns:repeat(2,1fr)}}
@media(max-width:900px){.count-kpis{grid-template-columns:repeat(3,1fr)}.count-bottom{display:block}.count-bottom>article{height:auto;min-height:255px;margin-top:7px}.count-source-strip article{border-bottom:1px solid rgba(166,195,204,.07)}}
@media(max-width:640px){.count-workspace{padding:10px 8px 85px;overflow:visible}.count-query{grid-template-columns:repeat(2,minmax(0,1fr))}.count-query .station,.count-query .congestion-run{grid-column:span 2}.count-source-strip{grid-template-columns:1fr 1fr}.count-kpis{grid-template-columns:repeat(2,1fr)}.count-stage{border:0;overflow:visible}.count-stage>article{height:330px;margin-top:7px;border:1px solid var(--ops-line);border-radius:8px;overflow:hidden}.count-heat-hours,.count-heat-row{grid-template-columns:20px repeat(24,minmax(3px,1fr));gap:1px}.count-heat-row button{min-height:18px}.count-chart-legend{display:none}.count-calibration-flow{grid-template-columns:1fr}.count-calibration-flow>i{transform:rotate(90deg)}.count-bottom>article{min-height:280px}}

/* Paneles operativos plegables: al ocultarlos siempre queda un tirador visible. */
#live-temporal-form[hidden] { display: none !important; }

/* Cuellos de botella · persistencia espacial y temporal sobre perfiles FCD observados. */
.bottleneck-heading > div:first-child > span { border-color: rgba(240,168,79,.34); color: var(--ops-amber); background: rgba(240,168,79,.07); }
.bottleneck-heading .congestion-source > i { background: var(--ops-amber); box-shadow: 0 0 8px rgba(240,168,79,.45); }
.bottleneck-query { padding: 8px; display: grid; grid-template-columns: minmax(100px,1fr) minmax(88px,.72fr) minmax(150px,1.2fr) repeat(2,minmax(64px,.54fr)) repeat(2,minmax(98px,.84fr)) repeat(2,minmax(70px,.6fr)) repeat(2,minmax(86px,.7fr)) minmax(82px,.68fr); gap: 6px; border: 1px solid var(--ops-line); border-radius: 9px; background: #0a151d; }
.bottleneck-query .section-type { border-color: rgba(240,168,79,.2); background: linear-gradient(135deg,rgba(240,168,79,.045),#0c1922 58%); }
.bottleneck-query > label { min-width: 0; height: 47px; padding: 6px 7px; display: flex; flex-direction: column; justify-content: center; border: 1px solid rgba(166,195,204,.13); border-radius: 6px; background: #0c1922; }
.bottleneck-query label > span { color: #4e6771; font-size: 8px; font-weight: 700; letter-spacing: .42px; }
.bottleneck-query input,.bottleneck-query select { width: 100%; min-width: 0; margin-top: 3px; border: 0; outline: 0; color: #b5c3c6; background: transparent; font-size: 9px; }
.bottleneck-query select option { background: #0c1922; }
.bottleneck-query input::-webkit-calendar-picker-indicator { filter: invert(1); opacity: .45; }
.bottleneck-query .congestion-run { min-height: 47px; border-color: rgba(240,168,79,.32); color: var(--ops-amber); background: rgba(240,168,79,.075); }
.bottleneck-query .congestion-run small { color: #846e51; }
.bottleneck-definition { min-height: 48px; margin-top: 7px; padding: 6px 8px 6px 11px; display: grid; grid-template-columns: minmax(200px,.72fr) auto minmax(320px,1.4fr) auto; gap: 12px; align-items: center; border: 1px solid var(--ops-line); border-radius: 8px; background: #09161e; }
.bottleneck-definition small,.bottleneck-definition strong { display: block; }.bottleneck-definition small { color: #4d6670; font-size: 8px; letter-spacing: .48px; }.bottleneck-definition strong { margin-top: 3px; color: #b6c3c6; font-size: 8.5px; }
.bottleneck-definition > span { padding: 4px 7px; border: 1px solid rgba(240,168,79,.22); border-radius: 99px; color: var(--ops-amber); background: rgba(240,168,79,.055); font-size: 8px; font-weight: 700; }
.bottleneck-definition p { margin: 0; color: #607780; font-size: 8px; line-height: 1.45; }
.bottleneck-definition button,.bottleneck-map-card header button { height: 27px; padding: 0 9px; border: 1px solid var(--ops-line); border-radius: 5px; color: #80949c; background: #0d1d27; font-size: 8px; font-weight: 700; cursor: pointer; }
.bottleneck-kpis { margin: 8px 0; }
.bottleneck-stage { height: 398px; display: grid; grid-template-columns: minmax(390px,1.05fr) minmax(470px,1.25fr); border: 1px solid var(--ops-line); border-radius: 8px; background: #09151d; overflow: hidden; }
.bottleneck-stage > article { min-width: 0; min-height: 0; border-right: 1px solid var(--ops-line); }.bottleneck-stage > article:last-child { border-right: 0; }
.bottleneck-stage article > header,.bottleneck-bottom article > header { height: 46px; padding: 0 10px; display: flex; align-items: center; justify-content: space-between; border-bottom: 1px solid rgba(166,195,204,.09); }
.bottleneck-stage header small,.bottleneck-stage header h3,.bottleneck-bottom header small,.bottleneck-bottom header h3 { display: block; }.bottleneck-stage header small,.bottleneck-bottom header small { color: #4e6771; font-size: 8px; letter-spacing: .52px; }.bottleneck-stage header h3,.bottleneck-bottom header h3 { margin: 3px 0 0; color: #acbdc1; font-size: 9px; }.bottleneck-stage header > span,.bottleneck-bottom header > span { color: #617983; font-size: 8px; }
.bottleneck-map-card { position: relative; }.bottleneck-map-card #bottleneck-map { height: calc(100% - 46px); background: #08131c; }
.bottleneck-map-legend { position: absolute; z-index: 2; left: 8px; bottom: 8px; min-height: 28px; padding: 0 8px; display: flex; gap: 5px; align-items: center; border: 1px solid var(--ops-line); border-radius: 5px; color: #617983; background: rgba(7,18,26,.93); font-size: 8px; }
.bottleneck-map-legend > span { color: #526b75; font-size: 8px; font-weight: 700; }.bottleneck-map-legend i { width: 15px; height: 4px; border-radius: 2px; }.bottleneck-map-legend i.moderate { background: #4f9c83; }.bottleneck-map-legend i.high { background: #ef754d; }.bottleneck-map-legend i.critical { background: #d9475f; }.bottleneck-map-legend b { margin-left: 4px; color: #748991; font-size: 8px; font-weight: 500; }
.bottleneck-matrix-card { display: grid; grid-template-rows: 46px minmax(0,1fr) 31px; }.bottleneck-matrix-card > div { min-height: 0; }.bottleneck-matrix-card canvas { width: 100%; height: 100%; display: block; cursor: crosshair; }
.bottleneck-matrix-card > footer { padding: 0 9px; display: flex; gap: 10px; align-items: center; border-top: 1px solid rgba(166,195,204,.07); color: #5d747e; font-size: 8px; }.bottleneck-matrix-card footer span { display: flex; gap: 4px; align-items: center; }.bottleneck-matrix-card footer i,.bottleneck-matrix-card footer b { width: 14px; height: 4px; display: inline-block; border-radius: 2px; }.bottleneck-matrix-card footer i { background: #14252d; }.bottleneck-matrix-card footer b { background: linear-gradient(90deg,#d4bd55,#ef754d,#d9475f); }.bottleneck-matrix-card footer small { margin-left: auto; color: #4d6670; font-size: 8px; }
.bottleneck-bottom { margin-top: 8px; display: grid; grid-template-columns: minmax(330px,.88fr) minmax(410px,1.15fr) minmax(300px,.85fr); gap: 8px; }
.bottleneck-bottom > article { min-width: 0; height: 262px; border: 1px solid var(--ops-line); border-radius: 8px; background: #0b1720; overflow: hidden; }
.bottleneck-ranking-card > div { height: calc(100% - 46px); padding: 3px 7px 7px; overflow-y: auto; scrollbar-width: thin; scrollbar-color: #20343d transparent; }
.bottleneck-ranking-card button { width: 100%; min-height: 39px; padding: 4px 3px; display: grid; grid-template-columns: 20px minmax(0,1fr) 37px 58px; gap: 7px; align-items: center; border: 0; border-bottom: 1px solid rgba(166,195,204,.065); color: inherit; background: transparent; text-align: left; cursor: pointer; }.bottleneck-ranking-card button:hover,.bottleneck-ranking-card button.selected { background: rgba(240,168,79,.045); }.bottleneck-ranking-card button.selected { box-shadow: inset 2px 0 var(--ops-amber); }
.bottleneck-ranking-card button > i { width: 18px; height: 18px; display: grid; place-items: center; border: 1px solid var(--ops-line); border-radius: 50%; color: #667d86; font-size: 8px; font-style: normal; }.bottleneck-ranking-card strong,.bottleneck-ranking-card small { display: block; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }.bottleneck-ranking-card strong { color: #9bafb3; font-size: 8px; }.bottleneck-ranking-card small { margin-top: 3px; color: #526b75; font-size: 8px; }.bottleneck-ranking-card b { color: var(--ops-amber); font-size: 8.5px; text-align: right; }.bottleneck-ranking-card em { color: #dd6d5b; font-size: 8px; font-style: normal; text-align: right; }.bottleneck-ranking-card p { margin: 0; padding: 12px; color: #607780; font-size: 8.5px; line-height: 1.55; }
.bottleneck-profile-card { display: grid; grid-template-rows: 46px minmax(0,1fr); }.bottleneck-profile-card header > div:last-child { display: flex; gap: 9px; }.bottleneck-profile-card header > div:last-child span { display: flex; gap: 4px; align-items: center; color: #647b84; font-size: 8px; }.bottleneck-profile-card header i { width: 12px; height: 6px; background: rgba(98,185,230,.38); }.bottleneck-profile-card header b { width: 12px; height: 2px; background: var(--ops-amber); }.bottleneck-profile-card > div { min-height: 0; }.bottleneck-profile-card canvas { width: 100%; height: 100%; display: block; cursor: crosshair; }
.bottleneck-detail-card { display: grid; grid-template-rows: 46px minmax(0,1fr) auto; }.bottleneck-detail-card header > span { padding: 4px 6px; border: 1px solid rgba(240,168,79,.22); border-radius: 99px; color: var(--ops-amber); background: rgba(240,168,79,.045); font-size: 8px; font-weight: 700; }.bottleneck-detail-card > div { padding: 7px 9px; overflow-y: auto; }.bottleneck-detail-card > div > p { margin: 0; color: #617983; font-size: 8px; line-height: 1.55; }.bottleneck-detail-card dl { margin: 0; display: grid; grid-template-columns: repeat(2,1fr); gap: 5px; }.bottleneck-detail-card dl div { padding: 6px; border: 1px solid rgba(166,195,204,.08); border-radius: 5px; background: #09161e; }.bottleneck-detail-card dt { color: #506a74; font-size: 8px; }.bottleneck-detail-card dd { margin: 4px 0 0; color: #bdcbce; font-size: 8px; font-weight: 600; }.bottleneck-detail-card > footer { padding: 7px 9px; display: grid; grid-template-columns: auto 1fr; gap: 7px; border-top: 1px solid rgba(166,195,204,.08); color: #5f767f; background: rgba(240,168,79,.018); font-size: 8px; line-height: 1.4; }.bottleneck-detail-card footer strong { color: #9a7b55; font-size: 8px; }
.bottleneck-tooltip { width: 225px; }.bottleneck-tooltip strong,.bottleneck-tooltip span,.bottleneck-tooltip b { display: block; }.bottleneck-tooltip strong { color: #d6e0e2; font-size: 8.5px; }.bottleneck-tooltip span { margin-top: 4px; color: #667e87; font-size: 8px; }.bottleneck-tooltip b { margin-top: 6px; color: var(--ops-amber); font-size: 8.5px; }

@media(max-width:1180px){.bottleneck-query{grid-template-columns:repeat(5,minmax(100px,1fr))}.bottleneck-query .congestion-run{grid-column:span 5}.bottleneck-definition{grid-template-columns:1fr auto}.bottleneck-definition p{grid-column:1/2}.bottleneck-stage{height:auto;grid-template-columns:1fr}.bottleneck-stage>article{height:390px;border-right:0;border-bottom:1px solid var(--ops-line)}.bottleneck-bottom{grid-template-columns:1fr 1fr}.bottleneck-detail-card{grid-column:1/-1}}
@media(max-width:900px){.bottleneck-query{grid-template-columns:repeat(3,minmax(95px,1fr))}.bottleneck-query .congestion-run{grid-column:span 3}.bottleneck-kpis{grid-template-columns:repeat(3,1fr)}.bottleneck-bottom{display:block}.bottleneck-bottom>article{height:280px;margin-top:7px}}
@media(max-width:640px){.ops-panel-handle-filters{right:8px;top:76px}.bottleneck-workspace{padding:10px 8px 85px;overflow:visible}.bottleneck-query{grid-template-columns:repeat(2,minmax(0,1fr))}.bottleneck-query .road,.bottleneck-query .congestion-run{grid-column:span 2}.bottleneck-definition{grid-template-columns:1fr auto}.bottleneck-definition p{grid-column:1/-1}.bottleneck-definition button{grid-column:1/-1}.bottleneck-kpis{grid-template-columns:repeat(2,1fr)}.bottleneck-stage{border:0;overflow:visible}.bottleneck-stage>article{height:360px;margin-top:7px;border:1px solid var(--ops-line);border-radius:8px;overflow:hidden}.bottleneck-matrix-card>footer small{display:none}.bottleneck-bottom>article{height:300px}.bottleneck-detail-card dl{grid-template-columns:1fr 1fr}}

/* Obras y cortes · publicación operativa DGT DATEX II 3.7. */
.works-heading > div:first-child > span { border-color: rgba(226,68,92,.34); color: #ee6b7f; background: rgba(226,68,92,.07); }
.works-heading .congestion-source > i { background: #e2445c; box-shadow: 0 0 8px rgba(226,68,92,.5); }
.works-query { padding: 8px; display: grid; grid-template-columns: minmax(150px,.85fr) minmax(125px,.7fr) minmax(190px,1.2fr) minmax(110px,.55fr); gap: 7px; border: 1px solid var(--ops-line); border-radius: 9px; background: #0a151d; }
.works-query > label { min-width: 0; height: 47px; padding: 6px 8px; display: flex; flex-direction: column; justify-content: center; border: 1px solid rgba(166,195,204,.13); border-radius: 6px; background: #0c1922; }
.works-query label > span { color: #4e6771; font-size: 8px; font-weight: 700; letter-spacing: .45px; }
.works-query select { width: 100%; min-width: 0; margin-top: 4px; border: 0; outline: 0; color: #b5c3c6; background: transparent; font-size: 9px; }
.works-query select option { background: #0c1922; }
.works-query .congestion-run { min-height: 47px; border: 1px solid rgba(226,68,92,.32); border-radius: 6px; color: #ef7587; background: rgba(226,68,92,.07); cursor: pointer; }
.works-query .congestion-run span,.works-query .congestion-run small { display: block; }.works-query .congestion-run span { font-size: 8.5px; font-weight: 700; }.works-query .congestion-run small { margin-top: 3px; color: #865963; font-size: 8px; }
.works-live-strip { min-height: 42px; margin-top: 7px; padding: 0 11px; display: grid; grid-template-columns: auto auto minmax(230px,1fr) auto; gap: 11px; align-items: center; border: 1px solid var(--ops-line); border-radius: 8px; background: #09161e; }
.works-live-strip > span { display: flex; gap: 6px; align-items: center; color: #d66b7c; font-size: 8px; font-weight: 700; letter-spacing: .42px; }.works-live-strip > span i { width: 6px; height: 6px; border-radius: 50%; background: #e2445c; box-shadow: 0 0 0 3px rgba(226,68,92,.11); animation: opsPulse 2s infinite; }
.works-live-strip > strong { color: #9cadb1; font-size: 8.5px; }.works-live-strip > small { color: #556e78; font-size: 8px; }.works-live-strip > b { padding: 4px 7px; border: 1px solid rgba(226,68,92,.2); border-radius: 99px; color: #d66b7c; background: rgba(226,68,92,.04); font-size: 8px; white-space: nowrap; }
.works-kpis { margin: 8px 0; }
.works-stage { height: 426px; display: grid; grid-template-columns: minmax(430px,1.28fr) minmax(300px,.72fr); border: 1px solid var(--ops-line); border-radius: 8px; background: #09151d; overflow: hidden; }
.works-stage > article { min-width: 0; min-height: 0; border-right: 1px solid var(--ops-line); }.works-stage > article:last-child { border-right: 0; }
.works-stage article > header,.works-bottom article > header { height: 46px; padding: 0 10px; display: flex; align-items: center; justify-content: space-between; border-bottom: 1px solid rgba(166,195,204,.09); }
.works-stage header small,.works-stage header h3,.works-bottom header small,.works-bottom header h3 { display: block; }.works-stage header small,.works-bottom header small { color: #4e6771; font-size: 8px; letter-spacing: .52px; }.works-stage header h3,.works-bottom header h3 { margin: 3px 0 0; color: #acbdc1; font-size: 9px; }.works-stage header > span,.works-bottom header > span { color: #617983; font-size: 8px; }
.works-map-card { position: relative; }.works-map-card #works-map { height: calc(100% - 46px); background: #08131c; }.works-map-card header button { height: 27px; padding: 0 9px; border: 1px solid var(--ops-line); border-radius: 5px; color: #80949c; background: #0d1d27; font-size: 8px; font-weight: 700; cursor: pointer; }.works-map-actions { display: flex; gap: 5px; }.works-map-actions button.active { border-color: rgba(101,214,170,.35); color: var(--ops-green); background: rgba(101,214,170,.07); }.works-map-actions button i { width: 12px; height: 3px; margin-right: 5px; display: inline-block; border-radius: 2px; background: linear-gradient(90deg,#d9475f,#f0a84f,#65d6aa,#45b7e7); vertical-align: 1px; }
.works-map-legend { position: absolute; z-index: 2; left: 8px; bottom: 8px; min-height: 29px; padding: 0 8px; display: flex; gap: 8px; align-items: center; border: 1px solid var(--ops-line); border-radius: 5px; color: #617983; background: rgba(7,18,26,.94); box-shadow: 0 6px 16px rgba(0,0,0,.22); font-size: 8px; pointer-events: none; }.works-map-legend span { display: flex; gap: 4px; align-items: center; }.works-map-legend i { width: 7px; height: 7px; border-radius: 50%; }.works-map-legend .speed { width: 14px; height: 3px; border-radius: 2px; background: linear-gradient(90deg,#d9475f,#f0a84f,#65d6aa,#45b7e7); }.works-map-legend .closure { background: #e2445c; }.works-map-legend .roadworks { background: #e5c657; }.works-map-legend .obstruction { background: #9c8cff; }.works-map-legend .weather { background: #45b7e7; }
.works-list-card { display: grid; grid-template-rows: 46px minmax(0,1fr); }.works-list-card > div { min-height: 0; padding: 3px 7px 7px; overflow-y: auto; scrollbar-width: thin; scrollbar-color: #20343d transparent; }
.works-list-card button { width: 100%; min-height: 53px; padding: 6px 4px; display: grid; grid-template-columns: 9px minmax(0,1fr) 47px 64px; gap: 7px; align-items: center; border: 0; border-bottom: 1px solid rgba(166,195,204,.065); color: inherit; background: transparent; text-align: left; cursor: pointer; }.works-list-card button:hover,.works-list-card button.selected { background: rgba(226,68,92,.038); }.works-list-card button.selected { box-shadow: inset 2px 0 #e2445c; }
.works-list-card button > i { width: 7px; height: 26px; border-radius: 4px; background: #90a6ae; }.works-list-card button > i.closure { background: #e2445c; }.works-list-card button > i.roadworks { background: #e5c657; }.works-list-card button > i.obstruction { background: #9c8cff; }.works-list-card button > i.weather { background: #45b7e7; }.works-list-card button > i.accident { background: #f25a8b; }.works-list-card button > i.congestion { background: #f0a84f; }
.works-list-card button strong,.works-list-card button small,.works-list-card button em { display: block; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }.works-list-card button strong { color: #a7b8bc; font-size: 8.5px; }.works-list-card button small { margin-top: 3px; color: #5a727c; font-size: 8px; }.works-list-card button em { margin-top: 3px; color: #71868e; font-size: 8px; font-style: normal; }.works-list-card button > b { padding: 3px 4px; border: 1px solid currentColor; border-radius: 99px; font-size: 8px; text-align: center; }.works-list-card button > b.critical { color: #ef657b; }.works-list-card button > b.high { color: #ee8b62; }.works-list-card button > b.medium { color: #e2c45c; }.works-list-card button > b.low { color: #65bfa1; }.works-list-card button time { color: #526b75; font-size: 8px; line-height: 1.3; text-align: right; }
.works-empty { height: 100%; display: grid; place-content: center; gap: 5px; color: #607780; text-align: center; }.works-empty strong { color: #91a5aa; font-size: 8.5px; }.works-empty span { font-size: 8px; }
.works-traffic-stage { height: 410px; margin-top: 8px; position: relative; display: grid; grid-template-columns: minmax(450px,1.34fr) minmax(280px,.66fr); gap: 8px; }
.works-traffic-stage > article { min-width: 0; min-height: 0; border: 1px solid var(--ops-line); border-radius: 8px; background: #0b1720; overflow: hidden; }
.works-traffic-stage article > header { height: 48px; padding: 0 10px; display: flex; align-items: center; justify-content: space-between; border-bottom: 1px solid rgba(166,195,204,.09); }
.works-traffic-stage header small,.works-traffic-stage header h3 { display: block; }.works-traffic-stage header small { color: #4e6771; font-size: 8px; letter-spacing: .5px; }.works-traffic-stage header h3 { margin: 3px 0 0; color: #acbdc1; font-size: 9px; }
.works-traffic-heatmap-card { display: grid; grid-template-rows: 48px minmax(0,1fr) 34px; }.works-traffic-heatmap-card header label { width: 112px; height: 34px; padding: 5px 7px; display: flex; flex-direction: column; justify-content: center; border: 1px solid rgba(166,195,204,.12); border-radius: 5px; background: #0d1d27; }.works-traffic-heatmap-card header label span { color: #506a74; font-size: 8px; font-weight: 700; }.works-traffic-heatmap-card header select { margin-top: 2px; border: 0; outline: 0; color: #aab9bd; background: transparent; font-size: 8px; }.works-traffic-heatmap-card header option { background: #0d1d27; }
.works-traffic-canvas-wrap,.works-traffic-timeline-wrap { min-width: 0; min-height: 0; position: relative; }.works-traffic-canvas-wrap canvas,.works-traffic-timeline-wrap canvas { width: 100%; height: 100%; display: block; cursor: crosshair; }
.works-traffic-empty { position: absolute; inset: 0; display: grid; place-content: center; gap: 5px; padding: 25px; color: #607780; text-align: center; }.works-traffic-empty[hidden] { display: none; }.works-traffic-empty strong { color: #a0b1b5; font-size: 9px; }.works-traffic-empty span { max-width: 310px; font-size: 8px; line-height: 1.5; }
.works-traffic-heatmap-card > footer { padding: 0 10px; display: flex; gap: 12px; align-items: center; border-top: 1px solid rgba(166,195,204,.08); }.works-traffic-heatmap-card footer small { margin-left: auto; color: #536b75; font-size: 8px; white-space: nowrap; }.works-traffic-speed-key,.works-traffic-incident-key { display: flex; gap: 5px; align-items: center; color: #607780; font-size: 8px; }.works-traffic-speed-key i { width: 62px; height: 5px; border-radius: 3px; background: linear-gradient(90deg,#d9475f,#eb6f4e,#f0a84f,#e2d45c,#65d6aa,#45b7e7); }.works-traffic-incident-key i { width: 18px; height: 9px; border: 1px dashed rgba(240,93,120,.72); background: repeating-linear-gradient(135deg,rgba(240,93,120,.2) 0 1px,transparent 1px 4px); }
.works-traffic-timeline-card { display: grid; grid-template-rows: 48px 218px minmax(0,1fr); }.works-traffic-header-actions { display:flex; gap:8px; align-items:center; }.works-traffic-header-actions > span { padding: 4px 7px; border: 1px solid currentColor; border-radius: 99px; color: #607780; font-size: 8px; font-weight: 700; }.works-traffic-header-actions > span.matched { color: #ee7387; }.works-traffic-header-actions > span.outside { color: #d4a15f; }
.works-traffic-kpis { min-height: 0; padding: 7px; display: grid; grid-template-columns: repeat(2,1fr); gap: 5px; overflow-y: auto; }.works-traffic-kpis > article { min-width: 0; padding: 6px; border: 1px solid rgba(166,195,204,.075); border-radius: 5px; background: #09161e; }.works-traffic-kpis article small,.works-traffic-kpis article strong,.works-traffic-kpis article span { display: block; }.works-traffic-kpis article small { color: #506a74; font-size: 8px; }.works-traffic-kpis article strong { margin-top: 3px; color: #b8c6c9; font-size: 8.5px; }.works-traffic-kpis article span { margin-top: 3px; color: #5c737c; font-size: 8px; }.works-traffic-kpis > p { grid-column: 1/-1; margin: 0; padding: 7px; color: #607780; font-size: 8px; line-height: 1.45; }.works-traffic-kpis .works-traffic-truth { border: 1px solid rgba(240,168,79,.12); border-radius: 5px; background: rgba(240,168,79,.025); color: #87745e; }
.works-traffic-loading { position: absolute; z-index: 3; inset: 0; display: grid; place-content: center; gap: 8px; border: 1px solid var(--ops-line); border-radius: 8px; color: #91a4a9; background: rgba(7,16,24,.86); text-align: center; }.works-traffic-loading[hidden] { display: none; }.works-traffic-loading span { width: 20px; height: 20px; margin: auto; border: 2px solid rgba(101,214,170,.15); border-top-color: #65d6aa; border-radius: 50%; animation: opsSpin .85s linear infinite; }.works-traffic-loading strong { font-size: 8.5px; }
.works-traffic-tooltip { z-index: 15; width: 235px; }.works-traffic-tooltip em { display: block; margin-top: 7px; padding: 6px 7px; border: 1px solid rgba(240,93,120,.25); border-radius: 5px; color: #e47b8d; background: repeating-linear-gradient(135deg,rgba(240,93,120,.08) 0 2px,transparent 2px 6px); font-size: 8px; font-style: normal; line-height: 1.45; }
.works-impact-panel { margin-top:8px;border:1px solid rgba(101,214,170,.15);border-radius:9px;background:linear-gradient(145deg,#0a1720,#09131b);overflow:hidden;box-shadow:0 14px 38px rgba(0,0,0,.15); }.works-impact-panel[hidden]{display:none}.works-impact-panel>header{min-height:54px;padding:8px 12px;display:flex;align-items:center;justify-content:space-between;border-bottom:1px solid rgba(166,195,204,.09);background:linear-gradient(90deg,rgba(101,214,170,.035),transparent)}.works-impact-panel>header small,.works-impact-panel>header h3{display:block}.works-impact-panel>header small{color:#547079;font-size:8px;letter-spacing:.65px}.works-impact-panel>header h3{margin:4px 0 0;color:#c2d0d2;font-size:10px}.works-impact-panel>header>div:last-child{display:flex;align-items:center;gap:7px}.works-impact-panel>header span,.works-impact-panel>header b{padding:5px 8px;border:1px solid currentColor;border-radius:99px;font-size:8px;letter-spacing:.35px}.works-impact-panel>header span.observed{color:#65d6aa}.works-impact-panel>header span.modeled{color:#f0a84f}.works-impact-panel>header b.low{color:#65d6aa}.works-impact-panel>header b.medium{color:#e5c657}.works-impact-panel>header b.high{color:#f0a84f}.works-impact-panel>header b.critical{color:#e24b64}
.works-impact-kpis{display:grid;grid-template-columns:repeat(6,minmax(0,1fr));border-bottom:1px solid rgba(166,195,204,.08)}.works-impact-kpis article{min-width:0;padding:10px 11px;border-right:1px solid rgba(166,195,204,.07)}.works-impact-kpis article:last-child{border-right:0}.works-impact-kpis article small,.works-impact-kpis article strong,.works-impact-kpis article span{display:block}.works-impact-kpis article small{color:#547079;font-size:8px}.works-impact-kpis article strong{margin-top:5px;color:#d0dcde;font-size:12px}.works-impact-kpis article span{margin-top:4px;color:#667f88;font-size:8px;white-space:normal}
.works-impact-body{min-height:245px;display:grid;grid-template-columns:minmax(240px,.72fr) minmax(320px,1.05fr) minmax(285px,.9fr);gap:0}.works-impact-body>article{min-width:0;display:grid;grid-template-rows:42px minmax(0,1fr);border-right:1px solid rgba(166,195,204,.08)}.works-impact-body>article:last-child{border-right:0}.works-impact-body article>header{padding:8px 10px;border-bottom:1px solid rgba(166,195,204,.07)}.works-impact-body article>header small,.works-impact-body article>header strong{display:block}.works-impact-body article>header small{color:#4e6973;font-size:8px;letter-spacing:.5px}.works-impact-body article>header strong{margin-top:4px;color:#9fb2b7;font-size:9px}.works-impact-lanes{grid-template-rows:42px minmax(0,1fr) 34px!important}.works-impact-lanes>footer{padding:7px 10px;border-top:1px solid rgba(166,195,204,.07);color:#6d8186;font-size:8px;line-height:1.35}.works-impact-lanes>div{min-height:0;padding:10px}.works-lane-track{height:78px;display:flex;align-items:stretch;justify-content:center;gap:5px;padding:7px;border:1px solid rgba(166,195,204,.09);border-radius:7px;background:linear-gradient(#1d2930,#111d24)}.works-lane-track span{width:42px;position:relative;display:flex;align-items:flex-end;justify-content:center;border:1px solid rgba(255,255,255,.08);border-radius:4px;background:repeating-linear-gradient(90deg,transparent 0 17px,rgba(255,255,255,.25) 17px 19px,transparent 19px 36px);overflow:hidden}.works-lane-track span i{position:absolute;inset:auto 0 0;background:rgba(101,214,170,.32);border-top:2px solid #65d6aa}.works-lane-track span.partial i{background:rgba(240,168,79,.28);border-color:#f0a84f}.works-lane-track span.closed i{height:100%!important;background:repeating-linear-gradient(135deg,rgba(226,75,100,.35) 0 4px,rgba(226,75,100,.08) 4px 8px);border-color:#e24b64}.works-lane-track span b,.works-lane-track span small{position:relative;z-index:1}.works-lane-track span b{margin-bottom:20px;color:#e3e9ea;font-size:9px}.works-lane-track span small{position:absolute;bottom:5px;color:#a8b7ba;font-size:7px}.works-impact-lanes dl{margin:9px 0 0;display:grid;grid-template-columns:1fr 1fr;gap:5px}.works-impact-lanes dl div{padding:5px;border:1px solid rgba(166,195,204,.06);border-radius:4px}.works-impact-lanes dt{color:#536d76;font-size:7px}.works-impact-lanes dd{margin:3px 0 0;color:#a8b9bc;font-size:8px}.works-impact-chart-card>div{min-height:0}.works-impact-chart-card canvas{width:100%;height:100%;display:block;cursor:crosshair}.works-impact-audit>div{min-height:0;padding:8px;overflow:auto}.works-impact-audit section{margin-bottom:6px;padding:7px;border:1px solid rgba(166,195,204,.07);border-radius:5px;background:rgba(5,15,22,.32)}.works-impact-audit section small,.works-impact-audit section strong,.works-impact-audit section span{display:block}.works-impact-audit section small{color:#4f6b74;font-size:7px}.works-impact-audit section strong{margin-top:4px;color:#afbec1;font-size:8.5px}.works-impact-audit section span{margin-top:4px;color:#647b84;font-size:8px;line-height:1.4}.works-impact-audit ul{margin:7px 0 0;padding-left:16px;color:#71858b;font-size:8px;line-height:1.45}.works-impact-audit li+li{margin-top:4px}
.works-bottom { margin-top: 8px; display: grid; grid-template-columns: minmax(220px,.72fr) minmax(320px,1.16fr) minmax(240px,.82fr); gap: 8px; }
.works-bottom > article { min-width: 0; height: 258px; border: 1px solid var(--ops-line); border-radius: 8px; background: #0b1720; overflow: hidden; }
.works-breakdown > div { padding: 8px 11px; }.works-breakdown > div > div { min-height: 27px; display: grid; grid-template-columns: 90px minmax(70px,1fr) 24px; gap: 7px; align-items: center; border-bottom: 1px solid rgba(166,195,204,.055); }.works-breakdown span { color: #71868e; font-size: 8px; }.works-breakdown i { height: 5px; border-radius: 3px; background: #13242d; overflow: hidden; }.works-breakdown i b { height: 100%; display: block; border-radius: inherit; background: #90a6ae; }.works-breakdown i b.closure { background: #e2445c; }.works-breakdown i b.roadworks { background: #e5c657; }.works-breakdown i b.obstruction { background: #9c8cff; }.works-breakdown i b.weather { background: #45b7e7; }.works-breakdown i b.accident { background: #f25a8b; }.works-breakdown i b.congestion { background: #f0a84f; }.works-breakdown > div > div > strong { color: #b8c6c9; font-size: 8px; text-align: right; }.works-breakdown p { color: #607780; font-size: 8px; }
.works-detail { display: grid; grid-template-rows: 46px minmax(0,1fr); }.works-detail header > span { padding: 4px 7px; border: 1px solid currentColor; border-radius: 99px; color: #7e949c; font-size: 8px; font-weight: 700; }.works-detail header > span.critical { color: #ef657b; }.works-detail header > span.high { color: #ee8b62; }.works-detail header > span.medium { color: #e2c45c; }.works-detail header > span.low { color: #65bfa1; }.works-detail > div { min-height: 0; padding: 7px 9px; overflow-y: auto; }.works-detail > div > p { color: #607780; font-size: 8px; line-height: 1.5; }.works-detail dl { margin: 0; display: grid; grid-template-columns: repeat(2,1fr); gap: 5px; }.works-detail dl div { min-width: 0; padding: 6px; border: 1px solid rgba(166,195,204,.08); border-radius: 5px; background: #09161e; }.works-detail dt { color: #506a74; font-size: 8px; }.works-detail dd { margin: 4px 0 0; overflow-wrap: anywhere; color: #bdcbce; font-size: 8px; font-weight: 600; line-height: 1.35; }.works-segment-analysis { margin-top: 7px; padding: 7px; display: grid; grid-template-columns: minmax(0,1fr) auto; gap: 7px; align-items: center; border: 1px solid rgba(101,214,170,.16); border-radius: 6px; background: rgba(101,214,170,.025); }.works-segment-analysis small,.works-segment-analysis strong,.works-segment-analysis span { display: block; }.works-segment-analysis small { color: #53736d; font-size: 8px; letter-spacing: .35px; }.works-segment-analysis strong { margin-top: 3px; color: #a8c5bc; font-size: 8.5px; }.works-segment-analysis span { margin-top: 3px; color: #607a79; font-size: 8px; }.works-segment-analysis button { height: 31px; padding: 0 9px; border: 1px solid rgba(101,214,170,.28); border-radius: 5px; color: var(--ops-green); background: rgba(101,214,170,.06); font-size: 8px; font-weight: 700; cursor: pointer; }.works-segment-analysis.unmatched { border-color: rgba(166,195,204,.09); background: #09161e; }.works-segment-analysis.unmatched button { display: none; }
.works-method > p { margin: 0; padding: 10px 11px; color: #647b84; font-size: 8px; line-height: 1.55; }.works-method > p strong { color: #9cacb0; }.works-method > div { margin: 0 11px; padding: 9px; border: 1px solid rgba(226,68,92,.1); border-radius: 6px; background: rgba(226,68,92,.025); }.works-method > div span,.works-method > div strong,.works-method > div small { display: block; }.works-method > div span { color: #6f6268; font-size: 8px; }.works-method > div strong { margin-top: 4px; color: #d37a89; font-size: 8.5px; }.works-method > div small { margin-top: 5px; color: #536b75; font-size: 8px; line-height: 1.45; }
.works-map-popup { min-width: 190px; max-width: 255px; padding: 7px 8px; }.works-map-popup small,.works-map-popup strong,.works-map-popup span,.works-map-popup b,.works-map-popup em { display: block; }.works-map-popup small { color: #d46677; font-size: 9.5px; letter-spacing: .4px; }.works-map-popup strong { margin-top: 4px; color: #d5dfe1; font-size: 10px; }.works-map-popup span { margin-top: 4px; color: #789099; font-size: 10px; }.works-map-popup b { margin-top: 6px; color: #a7b7bb; font-size: 10px; }.works-map-popup em { margin-top: 5px; color: #5c747e; font-size: 9.5px; font-style: normal; }

@media(max-width:1180px){.works-stage{height:auto;grid-template-columns:1fr}.works-stage>article{height:390px;border-right:0;border-bottom:1px solid var(--ops-line)}.works-traffic-stage{height:auto;grid-template-columns:1fr}.works-traffic-stage>article{height:400px}.works-impact-kpis{grid-template-columns:repeat(3,1fr)}.works-impact-body{grid-template-columns:1fr 1fr}.works-impact-audit{grid-column:1/-1;min-height:220px;border-top:1px solid rgba(166,195,204,.08)}.works-bottom{grid-template-columns:1fr 1fr}.works-method{grid-column:1/-1}.works-live-strip{grid-template-columns:auto auto 1fr}.works-live-strip>small{display:none}}
@media(max-width:900px){.works-query{grid-template-columns:repeat(2,minmax(0,1fr))}.works-query .congestion-run{grid-column:span 2}.works-kpis{grid-template-columns:repeat(3,1fr)}.works-bottom{display:block}.works-bottom>article{height:265px;margin-top:7px}.works-traffic-heatmap-card>footer small{display:none}}
@media(max-width:640px){.works-workspace{padding:10px 8px 85px;overflow:visible}.works-query{grid-template-columns:1fr 1fr}.works-query .road,.works-query .congestion-run{grid-column:span 2}.works-live-strip{grid-template-columns:1fr auto}.works-live-strip>strong{display:none}.works-kpis{grid-template-columns:repeat(2,1fr)}.works-stage{border:0;overflow:visible}.works-stage>article{height:360px;margin-top:7px;border:1px solid var(--ops-line);border-radius:8px;overflow:hidden}.works-traffic-stage{display:block}.works-traffic-stage>article{height:380px;margin-top:7px}.works-impact-panel>header{align-items:flex-start;gap:8px}.works-impact-panel>header>div:last-child{flex-direction:column;align-items:flex-end}.works-impact-kpis{grid-template-columns:repeat(2,1fr)}.works-impact-body{display:block}.works-impact-body>article{min-height:250px;border-right:0;border-bottom:1px solid rgba(166,195,204,.08)}.works-list-card button{grid-template-columns:7px minmax(0,1fr) 43px}.works-list-card button time{display:none}.works-map-legend{gap:5px;flex-wrap:wrap}.works-detail dl{grid-template-columns:1fr 1fr}.works-traffic-incident-key{display:none}}

/* Velocidades tipo · comparación semanal sobre perfiles FCD observados. */
.day-type-heading > div:first-child > span { border-color: rgba(156,140,255,.35); color: #a99bff; background: rgba(156,140,255,.07); }
.day-type-heading .congestion-source > i { background: #9c8cff; box-shadow: 0 0 8px rgba(156,140,255,.48); }
.day-type-query { padding: 8px; display: grid; grid-template-columns: minmax(120px,1fr) minmax(100px,.8fr) repeat(2,minmax(70px,.55fr)) repeat(2,minmax(92px,.68fr)) minmax(92px,.7fr) minmax(100px,.78fr) minmax(92px,.68fr); gap: 6px; border: 1px solid var(--ops-line); border-radius: 9px; background: #0a151d; }
.day-type-query > label { min-width: 0; height: 47px; padding: 6px 7px; display: flex; flex-direction: column; justify-content: center; border: 1px solid rgba(166,195,204,.13); border-radius: 6px; background: #0c1922; }
.day-type-query label > span { color: #4e6771; font-size: 8px; font-weight: 700; letter-spacing: .43px; }
.day-type-query input,.day-type-query select { width: 100%; min-width: 0; margin-top: 3px; border: 0; outline: 0; color: #b5c3c6; background: transparent; font-size: 8.5px; }.day-type-query select option { background: #0c1922; }.day-type-query input::-webkit-calendar-picker-indicator { filter: invert(1); opacity: .42; }
.day-type-query .congestion-run { min-height: 47px; border: 1px solid rgba(156,140,255,.31); border-radius: 6px; color: #aa9eff; background: rgba(156,140,255,.07); cursor: pointer; }.day-type-query .congestion-run span,.day-type-query .congestion-run small { display: block; }.day-type-query .congestion-run span { font-size: 8.5px; font-weight: 700; }.day-type-query .congestion-run small { margin-top: 3px; color: #6d668f; font-size: 8px; }
.day-type-days { min-height: 48px; margin-top: 7px; padding: 6px 10px; display: grid; grid-template-columns: minmax(150px,.72fr) minmax(390px,1.45fr) auto; gap: 12px; align-items: center; border: 1px solid var(--ops-line); border-radius: 8px; background: #09161e; }.day-type-days > div:first-child small,.day-type-days > div:first-child strong { display: block; }.day-type-days > div:first-child small { color: #4d6670; font-size: 8px; letter-spacing: .48px; }.day-type-days > div:first-child strong { margin-top: 3px; color: #7b9097; font-size: 8px; font-weight: 500; }
#day-type-day-toggles { min-width: 0; display: grid; grid-template-columns: repeat(7,1fr); gap: 4px; }#day-type-day-toggles button { height: 29px; padding: 0 6px; display: flex; gap: 5px; align-items: center; justify-content: center; border: 1px solid rgba(166,195,204,.11); border-radius: 5px; color: #586f79; background: #0b1922; font-size: 8px; font-weight: 700; cursor: pointer; opacity: .48; }#day-type-day-toggles button i { width: 6px; height: 6px; border-radius: 50%; background: var(--day-color); }#day-type-day-toggles button.active { border-color: color-mix(in srgb,var(--day-color) 45%,transparent); color: #a5b5b9; opacity: 1; }#day-type-day-toggles button.baseline { box-shadow: inset 0 -2px var(--day-color); }#day-type-day-toggles button.focus { background: color-mix(in srgb,var(--day-color) 8%,#0b1922); }#day-type-day-toggles button:disabled { cursor: not-allowed; filter: grayscale(1); }
.day-type-days > span { padding: 4px 7px; border: 1px solid rgba(156,140,255,.18); border-radius: 99px; color: #8f83d3; background: rgba(156,140,255,.035); font-size: 8px; white-space: nowrap; }.day-type-kpis { margin: 8px 0; }
.day-type-stage { height: 416px; display: grid; grid-template-columns: minmax(610px,1.38fr) minmax(340px,.62fr); border: 1px solid var(--ops-line); border-radius: 8px; background: #09151d; overflow: hidden; }.day-type-stage > article { min-width: 0; min-height: 0; border-right: 1px solid var(--ops-line); }.day-type-stage > article:last-child { border-right: 0; }
.day-type-stage article > header,.day-type-bottom article > header { height: 46px; padding: 0 10px; display: flex; align-items: center; justify-content: space-between; border-bottom: 1px solid rgba(166,195,204,.09); }.day-type-stage header small,.day-type-stage header h3,.day-type-bottom header small,.day-type-bottom header h3 { display: block; }.day-type-stage header small,.day-type-bottom header small { color: #4e6771; font-size: 8px; letter-spacing: .51px; }.day-type-stage header h3,.day-type-bottom header h3 { margin: 3px 0 0; color: #acbdc1; font-size: 9px; }.day-type-stage header > span,.day-type-bottom header > span { color: #617983; font-size: 8px; }
.day-type-chart-card { display: grid; grid-template-rows: 46px minmax(0,1fr) 40px; }.day-type-chart-actions { display:flex; gap:8px; align-items:center; }.day-type-chart-card .day-type-metric-control { min-width: 115px; height: 30px; padding: 4px 7px; border: 1px solid rgba(166,195,204,.1); border-radius: 5px; background: #0d1b24; }.day-type-chart-card .day-type-metric-control span { display: block; color: #4e6771; font-size: 8px; }.day-type-chart-card header select { width: 100%; margin-top: 2px; border: 0; outline: 0; color: #9aadb1; background: transparent; font-size: 8px; }.day-type-chart-card header option { background: #0d1b24; }.day-type-chart-card > div,.day-type-heatmap-card > div,.day-type-delta-card > div { min-height: 0; }.day-type-chart-card canvas,.day-type-heatmap-card canvas,.day-type-delta-card canvas { width: 100%; height: 100%; display: block; cursor: crosshair; }
.day-type-chart-card > footer { padding: 0 10px; display: grid; grid-template-columns: minmax(0,1fr) auto; gap: 8px; align-items: center; border-top: 1px solid rgba(166,195,204,.07); }.day-type-chart-card footer > small { max-width: 235px; color: #4f6872; font-size: 8px; line-height: 1.35; text-align: right; }#day-type-legend { min-width: 0; display: flex; gap: 4px; overflow-x: auto; }#day-type-legend button { height: 24px; padding: 0 6px; display: flex; gap: 4px; align-items: center; border: 1px solid transparent; border-radius: 4px; color: #657b84; background: transparent; font-size: 8px; cursor: pointer; white-space: nowrap; }#day-type-legend button i { width: 12px; height: 2px; border-radius: 2px; background: var(--day-color); }#day-type-legend button.focus { border-color: rgba(166,195,204,.12); color: #a5b5b9; background: rgba(255,255,255,.025); }#day-type-legend button.baseline i { background: repeating-linear-gradient(90deg,var(--day-color) 0 3px,transparent 3px 5px); }#day-type-legend button b { color: var(--day-color); font-size: 8px; }
.day-type-heatmap-card { display: grid; grid-template-rows: 46px minmax(0,1fr) 29px; }.day-type-heatmap-card > footer { padding: 0 10px; display: grid; grid-template-columns: auto minmax(90px,1fr) auto; gap: 7px; align-items: center; border-top: 1px solid rgba(166,195,204,.07); color: #536b75; font-size: 8px; }.day-type-heatmap-card footer i { height: 5px; border-radius: 3px; background: linear-gradient(90deg,#d9475f,#f0a84f,#e2d45c,#65d6aa,#45b7e7,#718bf0); }
.day-type-bottom { margin-top: 8px; display: grid; grid-template-columns: minmax(470px,1.12fr) minmax(360px,.9fr) minmax(285px,.72fr); gap: 8px; }.day-type-bottom > article { min-width: 0; height: 274px; border: 1px solid var(--ops-line); border-radius: 8px; background: #0b1720; overflow: hidden; }.day-type-ranking-card { display: grid; grid-template-rows: 46px minmax(0,1fr); }.day-type-ranking-card header button { height: 26px; padding: 0 8px; border: 1px solid var(--ops-line); border-radius: 5px; color: #80949c; background: #0d1d27; font-size: 8px; font-weight: 700; cursor: pointer; }.day-type-ranking-card > div { min-height: 0; overflow-y: auto; scrollbar-width: thin; scrollbar-color: #20343d transparent; }.day-type-ranking-head,.day-type-ranking-card > div > button { min-width: 470px; min-height: 27px; padding: 0 8px; display: grid; grid-template-columns: 1.2fr .75fr .85fr .78fr .85fr .72fr; gap: 6px; align-items: center; border: 0; border-bottom: 1px solid rgba(166,195,204,.06); }.day-type-ranking-head { position: sticky; z-index: 1; top: 0; color: #4f6872; background: #0a1821; font-size: 8px; }.day-type-ranking-card > div > button { min-height: 29px; color: #637b84; background: transparent; font-size: 8px; text-align: left; cursor: pointer; }.day-type-ranking-card > div > button:hover,.day-type-ranking-card > div > button.focus { background: rgba(156,140,255,.035); }.day-type-ranking-card > div > button.focus { box-shadow: inset 2px 0 var(--day-color); }.day-type-ranking-card button > strong { display: flex; gap: 6px; align-items: center; color: #9aadb1; font-size: 8px; }.day-type-ranking-card button > strong i { width: 6px; height: 18px; border-radius: 4px; background: var(--day-color); }.day-type-ranking-card button > strong span,.day-type-ranking-card button > strong small { display: block; }.day-type-ranking-card button > strong small { margin-top: 2px; color: #526b75; font-size: 8px; font-weight: 500; }.day-type-ranking-card button > b { color: #c4d1d4; font-size: 8px; }.day-type-ranking-card button > em { font-size: 8px; font-style: normal; }.day-type-ranking-card button > em.positive { color: #65bfa1; }.day-type-ranking-card button > em.negative { color: #df6b7b; }
.day-type-delta-card { display: grid; grid-template-rows: 46px minmax(0,1fr); }.day-type-delta-card header > span { padding: 4px 7px; border: 1px solid rgba(156,140,255,.18); border-radius: 99px; color: #958bd0; background: rgba(156,140,255,.035); white-space: nowrap; }
.day-type-method > p { margin: 0; padding: 10px 11px; color: #647b84; font-size: 8px; line-height: 1.55; }.day-type-method dl { margin: 0 11px; border-top: 1px solid rgba(166,195,204,.07); }.day-type-method dl div { min-height: 29px; display: grid; grid-template-columns: 88px 1fr; gap: 6px; align-items: center; border-bottom: 1px solid rgba(166,195,204,.055); }.day-type-method dt { color: #536b75; font-size: 8px; }.day-type-method dd { margin: 0; color: #91a3a8; font-size: 8px; text-align: right; }
.day-type-tooltip { width: 305px; padding: 0; overflow: hidden; }.day-type-tooltip > header { padding: 8px 9px 7px; border-bottom: 1px solid rgba(166,195,204,.09); background: #0a1821; }.day-type-tooltip > header strong,.day-type-tooltip > header span { display: block; }.day-type-tooltip > header strong { color: #d1dcde; font-size: 8.5px; }.day-type-tooltip > header span { margin-top: 3px; color: #607780; font-size: 8px; }.day-type-tooltip-row { min-height: 35px; padding: 5px 9px; display: grid; grid-template-columns: 9px minmax(0,1fr) auto; gap: 6px; align-items: center; border-bottom: 1px solid rgba(166,195,204,.06); }.day-type-tooltip-row > i { width: 7px; height: 20px; border-radius: 4px; background: var(--day-color); }.day-type-tooltip-row.legal-limit > i { border-radius:0; background:repeating-linear-gradient(180deg,#ef4444 0 5px,transparent 5px 8px); }.day-type-tooltip-row.legal-limit > b { color:#ef4444; }.day-type-tooltip-row span strong,.day-type-tooltip-row span small { display: block; }.day-type-tooltip-row span strong { color: #9fb1b5; font-size: 8px; }.day-type-tooltip-row span small { margin-top: 3px; color: #536b75; font-size: 8px; }.day-type-tooltip-row > b { color: #d2dddf; font-size: 8px; }.day-type-tooltip-grid { padding: 7px 9px; display: grid; grid-template-columns: repeat(3,1fr); gap: 5px; }.day-type-tooltip-grid > span { padding: 6px; border: 1px solid rgba(166,195,204,.075); border-radius: 4px; color: #58717b; background: #09161e; font-size: 8px; }.day-type-tooltip-grid > span strong { display: block; margin-top: 4px; color: #bdcbce; font-size: 8px; }

@media(max-width:1180px){.day-type-query{grid-template-columns:repeat(5,minmax(95px,1fr))}.day-type-query .congestion-run{grid-column:span 5}.day-type-stage{height:auto;grid-template-columns:1fr}.day-type-stage>article{height:390px;border-right:0;border-bottom:1px solid var(--ops-line)}.day-type-bottom{grid-template-columns:1fr 1fr}.day-type-method{grid-column:1/-1}.day-type-days{grid-template-columns:140px 1fr}.day-type-days>span{display:none}}
@media(max-width:900px){.day-type-query{grid-template-columns:repeat(3,minmax(90px,1fr))}.day-type-query .congestion-run{grid-column:span 3}.day-type-days{grid-template-columns:1fr}.day-type-days>div:first-child{display:none}.day-type-kpis{grid-template-columns:repeat(3,1fr)}.day-type-bottom{display:block}.day-type-bottom>article{height:275px;margin-top:7px}}
@media(max-width:640px){.day-type-workspace{padding:10px 8px 85px;overflow:visible}.day-type-query{grid-template-columns:repeat(2,minmax(0,1fr))}.day-type-query .road,.day-type-query .congestion-run{grid-column:span 2}.day-type-days{overflow-x:auto}#day-type-day-toggles{min-width:430px}.day-type-kpis{grid-template-columns:repeat(2,1fr)}.day-type-stage{border:0;overflow:visible}.day-type-stage>article{height:360px;margin-top:7px;border:1px solid var(--ops-line);border-radius:8px;overflow:hidden}.day-type-chart-card>footer{grid-template-columns:1fr}.day-type-chart-card footer>small{display:none}.day-type-bottom>article{height:300px}.day-type-method{height:auto!important;min-height:270px}}

/* Producto de monitorización de corredores · adaptación del flujo operativo Servei. */
.corridor-monitor-heading { height: 58px; }.corridor-monitor-heading > div:first-child > span { border-color: rgba(101,214,170,.34); color: var(--ops-green); background: rgba(101,214,170,.07); }.corridor-monitor-heading > div:first-child p { margin: 3px 0 0; color: #617983; font-size: 8px; }.corridor-monitor-heading .congestion-source > i { background: var(--ops-green); box-shadow: 0 0 8px rgba(101,214,170,.45); }
.corridor-monitor-query { padding: 8px; display: grid; grid-template-columns: minmax(112px,1fr) minmax(100px,.75fr) repeat(2,minmax(70px,.55fr)) minmax(105px,.78fr) minmax(82px,.58fr) minmax(130px,1fr) minmax(105px,.75fr); gap: 6px; border: 1px solid var(--ops-line); border-radius: 9px; background: #0a151d; }.corridor-monitor-query > label { min-width: 0; height: 47px; padding: 6px 7px; display: flex; flex-direction: column; justify-content: center; border: 1px solid rgba(166,195,204,.13); border-radius: 6px; background: #0c1922; }.corridor-monitor-query label > span { color: #4e6771; font-size: 8px; font-weight: 700; letter-spacing: .42px; }.corridor-monitor-query input,.corridor-monitor-query select { width: 100%; min-width: 0; margin-top: 3px; border: 0; outline: 0; color: #b5c3c6; background: transparent; font-size: 8.5px; }.corridor-monitor-query select option { background: #0c1922; }.corridor-monitor-query input::-webkit-calendar-picker-indicator { filter: invert(1); opacity: .42; }.corridor-monitor-query .congestion-run { min-height: 47px; border: 1px solid rgba(101,214,170,.32); border-radius: 6px; color: var(--ops-green); background: rgba(101,214,170,.075); cursor: pointer; }.corridor-monitor-query .congestion-run span,.corridor-monitor-query .congestion-run small { display: block; }.corridor-monitor-query .congestion-run span { font-size: 8.5px; font-weight: 700; }.corridor-monitor-query .congestion-run small { margin-top: 3px; color: #5d7b78; font-size: 8px; }.corridor-monitor-query .congestion-run:disabled { opacity: .48; cursor: wait; }
.corridor-monitor-truth { min-height: 39px; margin-top: 7px; padding: 0 8px 0 11px; display: grid; grid-template-columns: auto 1fr auto; gap: 12px; align-items: center; border: 1px solid rgba(240,168,79,.16); border-radius: 7px; background: rgba(240,168,79,.025); }.corridor-monitor-truth > span { display: flex; gap: 6px; align-items: center; color: #c99a60; font-size: 8px; white-space: nowrap; }.corridor-monitor-truth > span i { width: 6px; height: 6px; border-radius: 50%; background: var(--ops-amber); box-shadow: 0 0 7px rgba(240,168,79,.5); }.corridor-monitor-truth p { margin: 0; color: #637983; font-size: 8px; line-height: 1.35; }.corridor-monitor-truth button,.corridor-monitor-map-card header button { height: 25px; padding: 0 8px; border: 1px solid var(--ops-line); border-radius: 5px; color: #7f939a; background: #0d1d27; font-size: 8px; font-weight: 700; cursor: pointer; }.corridor-monitor-kpis { margin: 8px 0; grid-template-columns: repeat(6,1fr); }
.corridor-monitor-stage { height: 416px; display: grid; grid-template-columns: minmax(540px,1.22fr) minmax(390px,.78fr); border: 1px solid var(--ops-line); border-radius: 8px; background: #09151d; overflow: hidden; }.corridor-monitor-stage > article { min-width: 0; min-height: 0; border-right: 1px solid var(--ops-line); }.corridor-monitor-stage > article:last-child { border-right: 0; }.corridor-monitor-stage article > header,.corridor-monitor-bottom article > header { height: 46px; padding: 0 10px; display: flex; align-items: center; justify-content: space-between; border-bottom: 1px solid rgba(166,195,204,.09); }.corridor-monitor-stage header small,.corridor-monitor-stage header h3,.corridor-monitor-bottom header small,.corridor-monitor-bottom header h3 { display: block; }.corridor-monitor-stage header small,.corridor-monitor-bottom header small { color: #4e6771; font-size: 8px; letter-spacing: .51px; }.corridor-monitor-stage header h3,.corridor-monitor-bottom header h3 { margin: 3px 0 0; color: #acbdc1; font-size: 9px; }
.corridor-monitor-map-card { position: relative; }.corridor-monitor-map-card #corridor-monitor-map { height: calc(100% - 46px); background: #08131c; }.corridor-monitor-map-legend { position: absolute; z-index: 2; left: 8px; bottom: 8px; min-height: 29px; padding: 0 8px; display: flex; gap: 8px; align-items: center; border: 1px solid var(--ops-line); border-radius: 5px; color: #687f88; background: rgba(7,18,26,.94); font-size: 8px; }.corridor-monitor-map-legend span { display: flex; gap: 4px; align-items: center; }.corridor-monitor-map-legend i { width: 14px; height: 4px; border-radius: 2px; }.corridor-monitor-map-legend .fluid { background: #65d6aa; }.corridor-monitor-map-legend .dense { background: #f2cf5b; }.corridor-monitor-map-legend .slow { background: #f08d4f; }.corridor-monitor-map-legend .severe { background: #d9475f; }.corridor-monitor-map-legend small { padding-left: 5px; border-left: 1px solid var(--ops-line); color: #4f6872; font-size: 8px; }
.corridor-monitor-status-card { display: grid; grid-template-rows: 46px 28px 124px minmax(0,1fr); }.corridor-monitor-status-card > header > span { padding: 4px 7px; border: 1px solid currentColor; border-radius: 99px; font-size: 8px; font-weight: 700; }.corridor-monitor-status-card > header > span.fluid { color: #65d6aa; background: rgba(101,214,170,.05); }.corridor-monitor-status-card > header > span.dense { color: #e2cb61; background: rgba(226,203,97,.05); }.corridor-monitor-status-card > header > span.slow { color: #f08d4f; background: rgba(240,141,79,.05); }.corridor-monitor-status-card > header > span.severe { color: #df5b70; background: rgba(223,91,112,.05); }.corridor-monitor-status-card > header > span.no-data { color: #6b8189; }.corridor-monitor-ribbon { min-width: 0; padding: 7px 8px; display: flex; gap: 1px; border-bottom: 1px solid rgba(166,195,204,.075); overflow: hidden; }.corridor-monitor-ribbon button { min-width: 2px; height: 14px; flex: var(--segment-grow) 1 0; padding: 0; border: 0; border-radius: 1px; background: var(--segment-color); cursor: pointer; opacity: .72; }.corridor-monitor-ribbon button:hover,.corridor-monitor-ribbon button.selected { z-index: 1; outline: 1px solid #f0f6f7; opacity: 1; transform: scaleY(1.25); }
.corridor-monitor-selected { min-height: 0; padding: 8px 9px; border-bottom: 1px solid rgba(166,195,204,.08); background: rgba(255,255,255,.01); }.corridor-monitor-selected > p { color: #607780; font-size: 8px; }.corridor-monitor-selected > header { height: auto!important; padding: 0!important; display: grid!important; grid-template-columns: 5px minmax(0,1fr) auto; gap: 7px; border: 0!important; }.corridor-monitor-selected > header > span { height: 28px; border-radius: 3px; background: var(--segment-color); }.corridor-monitor-selected header small,.corridor-monitor-selected header strong { display: block; }.corridor-monitor-selected header small { color: #526a74; font-size: 8px; }.corridor-monitor-selected header strong { margin-top: 3px; color: #a8b9bd; font-size: 8px; }.corridor-monitor-selected header b { color: #778e96; font-size: 8px; }.corridor-monitor-selected dl { margin: 7px 0 0; display: grid; grid-template-columns: repeat(3,1fr); gap: 4px; }.corridor-monitor-selected dl div { min-width: 0; padding: 5px; border: 1px solid rgba(166,195,204,.065); border-radius: 4px; background: #09161e; }.corridor-monitor-selected dt { color: #506a74; font-size: 8px; }.corridor-monitor-selected dd { margin: 3px 0 0; color: #a8b8bc; font-size: 8px; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
.corridor-monitor-ranking { min-height: 0; overflow-y: auto; scrollbar-width: thin; scrollbar-color: #20343d transparent; }.corridor-monitor-ranking > header { position: sticky; z-index: 1; top: 0; min-height: 27px; padding: 0 8px; display: flex; align-items: center; justify-content: space-between; color: #506a74; background: #0a1821; font-size: 8px; }.corridor-monitor-ranking > button { width: 100%; min-height: 36px; padding: 4px 8px; display: grid; grid-template-columns: 19px minmax(0,1fr) 40px; gap: 7px; align-items: center; border: 0; border-bottom: 1px solid rgba(166,195,204,.055); color: inherit; background: transparent; text-align: left; cursor: pointer; }.corridor-monitor-ranking > button:hover,.corridor-monitor-ranking > button.selected { background: rgba(101,214,170,.035); }.corridor-monitor-ranking > button.selected { box-shadow: inset 2px 0 var(--ops-green); }.corridor-monitor-ranking button > i { width: 18px; height: 18px; display: grid; place-items: center; border: 1px solid var(--segment-color); border-radius: 50%; color: var(--segment-color); font-size: 8px; font-style: normal; }.corridor-monitor-ranking button strong,.corridor-monitor-ranking button small { display: block; }.corridor-monitor-ranking button strong { color: #9dafb3; font-size: 8px; }.corridor-monitor-ranking button small { margin-top: 3px; color: #536b75; font-size: 8px; }.corridor-monitor-ranking button b { color: #d68163; font-size: 8px; text-align: right; }
.corridor-monitor-bottom { margin-top: 8px; display: grid; grid-template-columns: minmax(380px,1fr) minmax(380px,1fr) minmax(310px,.76fr); gap: 8px; }.corridor-monitor-bottom > article { min-width: 0; height: 294px; border: 1px solid var(--ops-line); border-radius: 8px; background: #0b1720; overflow: hidden; }.corridor-monitor-chart-card { display: grid; grid-template-rows: 46px minmax(0,1fr); }.corridor-monitor-chart-card > div { min-height: 0; }.corridor-monitor-chart-card canvas { width: 100%; height: 100%; display: block; cursor: crosshair; }.corridor-monitor-chart-card header > span { color: var(--ops-amber); font-size: 8px; }.corridor-monitor-legend { display: flex; gap: 8px; }.corridor-monitor-legend span { color: #6a818a; font-size: 8px; }.corridor-monitor-legend span::before { content: ""; width: 11px; height: 2px; margin-right: 4px; display: inline-block; vertical-align: middle; background: var(--legend-color); }.corridor-monitor-legend .observed { --legend-color:#65d6aa; }.corridor-monitor-legend .typical { --legend-color:#9c8cff; }.corridor-monitor-legend .free { --legend-color:#718bf0; }
.corridor-monitor-context-card { display: grid; grid-template-rows: 46px minmax(0,1fr) auto; }.corridor-monitor-context-card > header > span { color: #607780; font-size: 8px; }.corridor-monitor-context-card > div { min-height: 0; padding: 5px 8px; overflow-y: auto; }.corridor-monitor-context-card section { margin-bottom: 7px; }.corridor-monitor-context-card section > header { min-height: 25px; padding: 0; display: flex; align-items: center; justify-content: space-between; border-bottom: 1px solid rgba(166,195,204,.065); }.corridor-monitor-context-card section > header strong { color: #5d747d; font-size: 8px; }.corridor-monitor-context-card section > header span { color: #8da1a6; font-size: 8px; }.corridor-monitor-context-card section > div { min-height: 34px; display: grid; grid-template-columns: 7px minmax(0,1fr); gap: 7px; align-items: center; border-bottom: 1px solid rgba(166,195,204,.05); }.corridor-monitor-context-card section > div > i { width: 6px; height: 6px; border-radius: 50%; }.corridor-monitor-context-card section > div.incident > i { background: #f05d78; }.corridor-monitor-context-card section > div.count > i { background: #45b7e7; }.corridor-monitor-context-card section strong,.corridor-monitor-context-card section small { display: block; }.corridor-monitor-context-card section > div strong { color: #91a4a9; font-size: 8px; }.corridor-monitor-context-card section > div small { margin-top: 3px; color: #536c76; font-size: 8px; white-space: nowrap; overflow: hidden; text-overflow: ellipsis; }.corridor-monitor-context-card section > p { margin: 7px 0; color: #586f78; font-size: 8px; line-height: 1.45; }.corridor-monitor-context-card > footer { padding: 7px 9px; border-top: 1px solid rgba(166,195,204,.07); color: #5b727b; background: rgba(240,168,79,.018); font-size: 8px; line-height: 1.4; }
.corridor-monitor-tooltip { width: 260px; padding: 9px; }.corridor-monitor-tooltip strong,.corridor-monitor-tooltip span { display: block; }.corridor-monitor-tooltip > strong { color: #d5dfe1; font-size: 8.5px; }.corridor-monitor-tooltip > span { margin-top: 4px; color: #617983; font-size: 8px; }.corridor-monitor-tooltip dl { margin: 8px 0 0; display: grid; grid-template-columns: repeat(2,1fr); gap: 4px; }.corridor-monitor-tooltip dl div { padding: 5px; border: 1px solid rgba(166,195,204,.075); border-radius: 4px; background: #09161e; }.corridor-monitor-tooltip dt { color: #536b75; font-size: 8px; }.corridor-monitor-tooltip dd { margin: 3px 0 0; color: #b8c6c9; font-size: 8px; }
@media(max-width:1180px){.corridor-monitor-query{grid-template-columns:repeat(4,minmax(100px,1fr))}.corridor-monitor-query .congestion-run{grid-column:span 4}.corridor-monitor-stage{height:auto;grid-template-columns:1fr}.corridor-monitor-stage>article{height:400px;border-right:0;border-bottom:1px solid var(--ops-line)}.corridor-monitor-bottom{grid-template-columns:1fr 1fr}.corridor-monitor-context-card{grid-column:1/-1}.corridor-monitor-kpis{grid-template-columns:repeat(3,1fr)}}
@media(max-width:760px){.corridor-monitor-workspace{padding:10px 8px 85px;overflow:visible}.corridor-monitor-query{grid-template-columns:repeat(2,minmax(0,1fr))}.corridor-monitor-query .road,.corridor-monitor-query .baseline,.corridor-monitor-query .congestion-run{grid-column:span 2}.corridor-monitor-truth{grid-template-columns:1fr auto}.corridor-monitor-truth p{grid-column:1/-1;padding-bottom:6px}.corridor-monitor-kpis{grid-template-columns:repeat(2,1fr)}.corridor-monitor-stage{border:0;overflow:visible}.corridor-monitor-stage>article{height:380px;margin-top:7px;border:1px solid var(--ops-line);border-radius:8px;overflow:hidden}.corridor-monitor-bottom{display:block}.corridor-monitor-bottom>article{height:300px;margin-top:7px}.corridor-monitor-context-card{height:330px!important}.corridor-monitor-map-legend small{display:none}}

@media(max-width:1400px){.event-profile-query{grid-template-columns:repeat(5,minmax(105px,1fr))}.event-profile-query .congestion-run{grid-column:span 5}.event-profile-stage{grid-template-columns:1fr 1fr}.event-profile-main-card{grid-column:1/-1}.event-profile-bottom{grid-template-columns:1fr 1fr}.event-profile-ranking{grid-column:1/-1}.event-profile-kpis{grid-template-columns:repeat(3,1fr)}}
@media(max-width:900px){.event-profile-query{grid-template-columns:repeat(3,minmax(95px,1fr))}.event-profile-query .road,.event-profile-query .congestion-run{grid-column:span 3}.event-profile-stage{grid-template-columns:1fr 1fr}.event-profile-main-card{grid-column:1/-1}.event-profile-bottom{display:block}.event-profile-bottom>article{height:250px;margin-top:7px}.event-profile-kpis{grid-template-columns:repeat(3,1fr)}}
@media(max-width:640px){.event-profile-workspace{padding:10px 8px 85px;overflow:visible}.event-profile-query{grid-template-columns:repeat(2,minmax(0,1fr))}.event-profile-query .road,.event-profile-query .congestion-run{grid-column:span 2}.event-profile-truth{grid-template-columns:1fr auto}.event-profile-truth p{grid-column:1/-1;padding-bottom:5px}.event-profile-kpis{grid-template-columns:repeat(2,1fr)}.event-profile-stage{display:block}.event-profile-stage>article{height:360px;margin-top:7px}.event-profile-main-card>div{height:276px}.event-profile-bottom>article{height:280px}}

/* Perfil de eventos: barras apiladas y lectura cromática por tipología. */
.event-profile-legend { max-width: 72%; min-width: 0; flex-wrap: nowrap; justify-content: flex-end; gap: 4px; overflow-x: auto; scrollbar-width: none; }
.event-profile-legend::-webkit-scrollbar { display: none; }
.event-profile-legend button { min-width: max-content; height: 25px; padding: 0 7px; display: inline-flex; gap: 4px; align-items: center; border: 1px solid rgba(166,195,204,.14); border-radius: 5px; color: #617881; background: #0a1720; font: 700 8.5px Roboto,Arial,sans-serif; cursor: pointer; transition: opacity .16s ease,border-color .16s ease,background .16s ease; }
.event-profile-legend button:hover,.event-profile-legend button:focus-visible { border-color: rgba(101,214,170,.5); outline: 0; background: #0d2029; }
.event-profile-legend button:not(.active):not(.reset) { opacity: .36; }
.event-profile-legend button:not(.active):not(.reset) i { background: transparent; box-shadow: inset 0 0 0 1px var(--event-color,rgba(101,214,170,.7)); }
.event-profile-legend i { width: 7px; height: 7px; display: block; border-radius: 2px; background: var(--event-color,rgba(101,214,170,.7)); }
.event-profile-legend button.cumulative { color: #8b7b62; }
.event-profile-legend button.cumulative b { width: 15px; height: 2px; display: block; background: #f0a84f; }
.event-profile-legend button.cumulative:not(.active) b { background: repeating-linear-gradient(90deg,#f0a84f 0 3px,transparent 3px 5px); }
.event-profile-legend button.reset { border-color: transparent; color: #65d6aa; background: transparent; letter-spacing: .35px; }
.event-profile-tooltip { width: 245px; }
.event-profile-tooltip-types { margin-top: 7px; padding-top: 4px; border-top: 1px solid rgba(166,195,204,.1); }
.event-profile-tooltip-type { min-height: 18px; display: grid; grid-template-columns: 7px 1fr auto; gap: 6px; align-items: center; color: #647c84; font-size: 8px; }
.event-profile-tooltip-type i { width: 6px; height: 10px; border-radius: 2px; background: var(--event-color); }
.event-profile-tooltip-type b { color: #91a5aa; font-size: 8px; }
.event-profile-tooltip-type.active { color: #d6e2e4; }
.event-profile-tooltip-type.active b { color: #fff; }

/* Escala tipográfica operativa: los textos de interfaz deben leerse sin ampliar la página. */
body.cam-platform .cam-nav > span:last-child { font-size: 10px; }
body.cam-platform .page-heading .eyebrow { font-size: 9.5px; }
body.cam-platform .top-source small { font-size: 9px; }
body.cam-platform .top-source strong { font-size: 9.5px; }
body.cam-platform .analysis-rail > header small { font-size: 9px; }
body.cam-platform .analysis-rail > header strong { font-size: 11px; }
body.cam-platform .tool-search input { font-size: 10px; }
body.cam-platform .analysis-group { font-size: 9px; }
body.cam-platform .analysis-tool { min-height: 43px; }
body.cam-platform .analysis-tool > span { font-size: 9px; }
body.cam-platform .analysis-tool strong { font-size: 10px; }
body.cam-platform .analysis-filters label > span:first-child { font-size: 9px; }
body.cam-platform .analysis-filters select,
body.cam-platform .analysis-filters input { font-size: 10px; }
body.cam-platform .analysis-filters button { font-size: 9px; }
body.cam-platform .analysis-heading p,
body.cam-platform .congestion-heading small { font-size: 9px; }
body.cam-platform .analysis-source small,
body.cam-platform .congestion-source span small { font-size: 8.5px; }
body.cam-platform .analysis-source strong,
body.cam-platform .congestion-source span strong { font-size: 9.5px; }
body.cam-platform .analysis-kpis small,
body.cam-platform .congestion-kpis small { font-size: 9px; }
body.cam-platform .analysis-kpis span,
body.cam-platform .congestion-kpis span { font-size: 9px; }
body.cam-platform .ops-layers header small { font-size: 9px; }
body.cam-platform .ops-layers header strong { font-size: 11px; }
body.cam-platform .ops-layers header .ops-panel-collapse { font-size: 8.5px; }
body.cam-platform .ops-layer strong { font-size: 10px; }
body.cam-platform .ops-layer small { font-size: 9px; }
body.cam-platform .ops-layer > b { font-size: 9px; }
body.cam-platform .ops-layer-group { font-size: 8.5px; }
body.cam-platform .ops-layers footer strong { font-size: 9.5px; }
body.cam-platform .ops-layers footer small { font-size: 9px; }
body.cam-platform .ops-query label span { font-size: 9px; }
body.cam-platform .ops-query select { font-size: 10px; }
body.cam-platform .ops-query button { font-size: 9px; }

body.cam-platform :is(.congestion-workspace,.forecast-workspace,.scenario-workspace,.corridor-speed-workspace,.itinerary-workspace,.performance-workspace,.speed-alert-workspace,.od-workspace,.count-workspace,.bottleneck-workspace,.works-workspace,.day-type-workspace,.corridor-monitor-workspace,.event-profile-workspace) form label > span,
body.cam-platform :is(.congestion-workspace,.forecast-workspace,.scenario-workspace,.corridor-speed-workspace,.itinerary-workspace,.performance-workspace,.speed-alert-workspace,.od-workspace,.count-workspace,.bottleneck-workspace,.works-workspace,.day-type-workspace,.corridor-monitor-workspace,.event-profile-workspace) form legend { font-size: 9px; }
body.cam-platform :is(.congestion-workspace,.forecast-workspace,.scenario-workspace,.corridor-speed-workspace,.itinerary-workspace,.performance-workspace,.speed-alert-workspace,.od-workspace,.count-workspace,.bottleneck-workspace,.works-workspace,.day-type-workspace,.corridor-monitor-workspace,.event-profile-workspace) form :is(input,select) { font-size: 9.5px; }
body.cam-platform :is(.congestion-workspace,.forecast-workspace,.scenario-workspace,.corridor-speed-workspace,.itinerary-workspace,.performance-workspace,.speed-alert-workspace,.od-workspace,.count-workspace,.bottleneck-workspace,.works-workspace,.day-type-workspace,.corridor-monitor-workspace,.event-profile-workspace) form button :is(span,strong) { font-size: 9px; }
body.cam-platform :is(.congestion-workspace,.forecast-workspace,.scenario-workspace,.corridor-speed-workspace,.itinerary-workspace,.performance-workspace,.speed-alert-workspace,.od-workspace,.count-workspace,.bottleneck-workspace,.works-workspace,.day-type-workspace,.corridor-monitor-workspace,.event-profile-workspace) form button small { font-size: 8.5px; }
body.cam-platform :is(.congestion-workspace,.forecast-workspace,.scenario-workspace,.corridor-speed-workspace,.itinerary-workspace,.performance-workspace,.speed-alert-workspace,.od-workspace,.count-workspace,.bottleneck-workspace,.works-workspace,.day-type-workspace,.corridor-monitor-workspace,.event-profile-workspace) article > header small { font-size: 8.5px; }
body.cam-platform :is(.congestion-workspace,.forecast-workspace,.scenario-workspace,.corridor-speed-workspace,.itinerary-workspace,.performance-workspace,.speed-alert-workspace,.od-workspace,.count-workspace,.bottleneck-workspace,.works-workspace,.day-type-workspace,.corridor-monitor-workspace,.event-profile-workspace) article > header h3 { font-size: 10px; }
body.cam-platform :is(.congestion-workspace,.forecast-workspace,.scenario-workspace,.corridor-speed-workspace,.itinerary-workspace,.performance-workspace,.speed-alert-workspace,.od-workspace,.count-workspace,.bottleneck-workspace,.works-workspace,.day-type-workspace,.corridor-monitor-workspace,.event-profile-workspace) article > header > span { font-size: 9px; }
body.cam-platform :is(.itinerary-toolbar,.performance-toolbar,.corridor-bin-toolbar) small { font-size: 8.5px; }
body.cam-platform :is(.itinerary-toolbar,.performance-toolbar,.corridor-bin-toolbar) strong { font-size: 9.5px; }
body.cam-platform :is(.itinerary-toolbar,.performance-toolbar,.corridor-bin-toolbar) button,
body.cam-platform :is(.itinerary-legend,.performance-band-controls,.corridor-bin-legend) span { font-size: 9px; }
body.cam-platform .itinerary-periods legend strong { font-size: 9.5px; }
body.cam-platform .itinerary-periods legend small { font-size: 8.5px; }
body.cam-platform .itinerary-period-note small { font-size: 8.5px; }
body.cam-platform .itinerary-period-note strong { font-size: 10px; }
body.cam-platform .itinerary-period-note span { font-size: 9px; }
body.cam-platform .itinerary-table-head { font-size: 8.5px; }
body.cam-platform .itinerary-table-row strong { font-size: 9px; }
body.cam-platform .itinerary-table-row span { font-size: 9px; }
body.cam-platform .itinerary-critical button strong,
body.cam-platform .itinerary-critical button b { font-size: 9px; }
body.cam-platform .itinerary-critical button span { font-size: 8.5px; }
body.cam-platform .itinerary-method p { font-size: 9px; line-height: 1.6; }

@media(max-width:640px){
  body.cam-platform .analysis-tool strong { font-size: 9px; }
  body.cam-platform .cam-nav > span:last-child { font-size: 9.5px; }
  body.cam-platform .itinerary-spine-tick { width: 150px; }
}

/* Posicionamiento de hitos compatible y ancho equilibrado del comparador. */
body.cam-platform .itinerary-stage { grid-template-columns: minmax(280px,1fr) minmax(215px,.68fr) minmax(280px,1fr); }
body.cam-platform .itinerary-spine-tick { top: calc(60px + var(--position) - var(--edge-offset)); }

@media(max-width:900px){
  body.cam-platform .itinerary-stage { display: block; }
}

/* Selector viario: búsqueda textual y categoría oficial de la malla CM. */
body.cam-platform .ops-query { width: min(1180px,calc(100% - 330px)); }
body.cam-platform .ops-query-pane.realtime { grid-template-columns: minmax(100px,.68fr) minmax(120px,.82fr) minmax(140px,.95fr) minmax(100px,.68fr) minmax(120px,.82fr) minmax(135px,.85fr) auto; }
body.cam-platform .ops-query-pane.period { grid-template-columns: repeat(5,minmax(0,1fr)); align-content: center; }
body.cam-platform .ops-query-pane.period > #apply-live-period { grid-column: 3/6; width: 100%; min-height: 34px; }
body.cam-platform .ops-query .road-search { position: relative; padding-right: 66px; }
body.cam-platform .ops-query .road-search input { font-weight: 600; }
body.cam-platform .ops-query .road-search input::placeholder { color: #526a74; font-weight: 400; }
body.cam-platform .ops-query .road-search small { position: absolute; right: 7px; bottom: 8px; max-width: 58px; overflow: hidden; color: #65a690; font-size: 8.5px; line-height: 1; text-align: right; text-overflow: ellipsis; white-space: nowrap; }
body.cam-platform .ops-query .road-category select { color: #7fd6b5; font-weight: 600; }

/* Capa analítica reutilizable: límite legal Overture ajustado a la Malla viaria CM. */
body.cam-platform .speed-limit-layer { min-height: 20px; display: inline-flex; gap: 5px; align-items: center; color: #d88b8b; font: 500 8.5px Roboto,Arial,sans-serif; white-space: nowrap; cursor: pointer; }
body.cam-platform .speed-limit-layer input { width: 11px; height: 11px; margin: 0; accent-color: #ef4444; cursor: pointer; }
body.cam-platform .speed-limit-layer i { width: 18px; height: 2px; display: inline-block; border-radius: 0; background: repeating-linear-gradient(90deg,#ef4444 0 7px,transparent 7px 11px); }
body.cam-platform .speed-limit-layer:has(input:not(:checked)) { opacity: .48; }

/* Fichas GetFeatureInfo de las capas ambientales WMS. */
.environmental-popup .maplibregl-popup-content { width: min(430px,calc(100vw - 28px)); max-height: min(620px,calc(100vh - 100px)); padding: 0; overflow: hidden; border: 1px solid rgba(101,214,170,.28); border-radius: 12px; color: #dce9eb; background: #091720; box-shadow: 0 18px 44px rgba(0,0,0,.48); }
.environmental-popup .maplibregl-popup-tip { border-top-color: #091720; }
.environmental-popup .maplibregl-popup-close-button { z-index: 3; padding: 7px 10px; color: #dce9eb; font-size: 19px; }
.environment-info-popup > header { padding: 13px 38px 11px 14px; border-bottom: 1px solid rgba(166,195,204,.11); background: linear-gradient(135deg,rgba(101,214,170,.08),rgba(69,183,231,.035)); }
.environment-info-popup > header small,.environment-info-popup > header strong,.environment-info-popup > header span { display: block; }
.environment-info-popup > header small { color: #6eaa97; font-size: 9px; font-weight: 700; letter-spacing: .65px; }
.environment-info-popup > header strong { margin-top: 4px; color: #e0eaeb; font-size: 12px; }
.environment-info-popup > header span { margin-top: 4px; color: #69818a; font-size: 9px; }
.environment-info-popup > div { max-height: 470px; padding: 7px; overflow-y: auto; scrollbar-width: thin; scrollbar-color: #29404b transparent; }
.environment-info-layer { margin-bottom: 7px; border: 1px solid rgba(166,195,204,.11); border-radius: 7px; background: #0b1a23; overflow: hidden; }
.environment-info-layer:last-child { margin-bottom: 0; }
.environment-info-layer > header { min-height: 48px; padding: 7px 9px; display: grid; grid-template-columns: 5px minmax(0,1fr) auto; gap: 8px; align-items: center; }
.environment-info-layer > header > i { width: 4px; height: 30px; border-radius: 3px; background: #65d6aa; }
.environment-info-layer.empty > header > i { background: #627a84; }
.environment-info-layer header small,.environment-info-layer header strong { display: block; }
.environment-info-layer header small { color: #58717a; font-size: 8.5px; }
.environment-info-layer header strong { margin-top: 3px; color: #b7c6c9; font-size: 9.5px; }
.environment-info-layer header b { padding: 4px 6px; border-radius: 4px; color: #65d6aa; background: rgba(101,214,170,.07); font-size: 8.5px; }
.environment-info-layer.empty header b { color: #718790; background: rgba(113,135,144,.07); }
.environment-info-layer dl { margin: 0; padding: 0 9px 7px; }
.environment-info-layer dl div { min-height: 28px; display: grid; grid-template-columns: minmax(105px,.8fr) minmax(0,1.2fr); gap: 9px; align-items: center; border-top: 1px solid rgba(166,195,204,.07); }
.environment-info-layer dt { color: #59717b; font-size: 8.5px; text-transform: capitalize; }
.environment-info-layer dd { margin: 0; overflow-wrap: anywhere; color: #a8b8bc; font-size: 9px; text-align: right; }
.environment-info-layer p { margin: 0; padding: 0 9px 9px; color: #667e87; font-size: 9px; line-height: 1.45; }
.environment-info-layer > a { padding: 8px 9px; display: block; border-top: 1px solid rgba(166,195,204,.07); color: #65c7a3; background: rgba(101,214,170,.025); font-size: 9px; text-decoration: none; }
.environment-info-popup > footer { padding: 9px 11px; border-top: 1px solid rgba(166,195,204,.09); color: #5c747d; background: #08151e; font-size: 8.5px; line-height: 1.45; }
.environment-info-loading { min-height: 92px; display: grid; place-content: center; gap: 9px; color: #718890; font-size: 9px; text-align: center; }
.environment-info-loading i { width: 20px; height: 20px; margin: auto; border: 2px solid rgba(101,214,170,.14); border-top-color: #65d6aa; border-radius: 50%; animation: congestion-spin .8s linear infinite; }
.environment-info-popup.error > header strong { color: #ee8292; }

/* Lectura guiada del detector de cuellos de botella. */
.bottleneck-explainer { min-height: 78px; margin-top: 7px; padding: 8px 10px; display: grid; grid-template-columns: minmax(180px,1fr) 18px minmax(180px,1fr) 18px minmax(180px,1fr) minmax(250px,1.18fr); gap: 8px; align-items: stretch; border: 1px solid rgba(240,168,79,.14); border-radius: 8px; background: linear-gradient(90deg,rgba(240,168,79,.025),rgba(10,22,30,.92)); }
.bottleneck-explainer > article { min-width: 0; display: grid; grid-template-columns: 25px minmax(0,1fr); gap: 8px; align-items: center; }
.bottleneck-explainer > article > b { width: 24px; height: 24px; display: grid; place-items: center; border: 1px solid rgba(240,168,79,.28); border-radius: 50%; color: #f0a84f; background: rgba(240,168,79,.07); font-size: 9px; }
.bottleneck-explainer small,.bottleneck-explainer strong,.bottleneck-explainer span { display: block; }
.bottleneck-explainer article small,.bottleneck-explainer aside small { color: #58717a; font-size: 8px; letter-spacing: .43px; }
.bottleneck-explainer article strong { margin-top: 3px; color: #afbec1; font-size: 8.5px; }
.bottleneck-explainer article span { margin-top: 4px; color: #627982; font-size: 8px; line-height: 1.4; }
.bottleneck-explainer > i { position: relative; align-self: center; height: 1px; background: rgba(240,168,79,.25); }
.bottleneck-explainer > i::after { content: ""; position: absolute; right: -1px; top: -3px; border-left: 5px solid rgba(240,168,79,.4); border-top: 3px solid transparent; border-bottom: 3px solid transparent; }
.bottleneck-explainer > aside { min-width: 0; padding: 8px 10px; display: flex; flex-direction: column; justify-content: center; border: 1px solid rgba(101,214,170,.13); border-radius: 6px; background: rgba(101,214,170,.025); }
.bottleneck-explainer aside strong { margin-top: 4px; color: #b8c8ca; font-size: 8.5px; line-height: 1.35; }
.bottleneck-explainer aside span { margin-top: 5px; color: #65b996; font-size: 8px; }

/* Radar del Perfil de eventos: relaciones acotadas, no un falso índice de riesgo. */
.event-profile-bottom { grid-template-columns: minmax(285px,.82fr) minmax(390px,1.12fr) minmax(220px,.64fr) minmax(235px,.7fr); }
.event-profile-radar { min-height: 258px !important; display: grid; grid-template-rows: 46px minmax(0,1fr) 34px; }
.event-profile-radar > div { min-height: 0; }
.event-profile-radar canvas { width: 100%; height: 100%; display: block; cursor: crosshair; }
.event-profile-radar > footer { padding: 0 10px; display: flex; align-items: center; border-top: 1px solid rgba(166,195,204,.07); color: #657d85; background: rgba(156,140,255,.018); font-size: 8px; line-height: 1.35; }
.event-profile-hourly > div { height: 212px; }

@media(max-width:1500px){
  .event-profile-bottom { grid-template-columns: 1fr 1.2fr; }
  .event-profile-ranking { grid-column: auto; }
}
@media(max-width:1180px){
  .bottleneck-explainer { grid-template-columns: 1fr 18px 1fr 18px 1fr; }
  .bottleneck-explainer > aside { grid-column: 1/-1; }
}
@media(max-width:900px){
  .bottleneck-explainer { grid-template-columns: 1fr; }
  .bottleneck-explainer > i { display: none; }
  .bottleneck-explainer > aside { grid-column: auto; }
}
@media(max-width:640px){
  .event-profile-bottom { display: block; }
  .event-profile-radar { height: 300px !important; }
}

@media(max-width:1400px){
  body.cam-platform .ops-query { grid-template-columns: 74px minmax(0,1fr) auto 27px; }
  body.cam-platform .ops-query-pane { overflow: visible; }
  body.cam-platform .ops-query-pane.realtime { grid-template-columns: minmax(82px,.62fr) minmax(96px,.72fr) minmax(112px,.86fr) minmax(86px,.65fr) minmax(105px,.78fr) auto; }
  body.cam-platform .ops-query-pane.realtime .ops-filter-context { display: none; }
  body.cam-platform .ops-query-pane.period { grid-template-columns: repeat(5,minmax(0,1fr)); }
  body.cam-platform .ops-query-pane.period > #apply-live-period { grid-column: 3/6; width: 100%; min-height: 34px; }
  body.cam-platform .ops-query:has(.ops-query-pane.period:not([hidden])) { min-height: 112px; }
}
@media(max-width:640px){
  body.cam-platform .ops-query .road-category,body.cam-platform .ops-query .road-search { display: none; }
  body.cam-platform .ops-query-pane.period { grid-template-columns: repeat(2,minmax(0,1fr)); }
  body.cam-platform .ops-query-pane.period > #apply-live-period { grid-column: 1/-1; }
  body.cam-platform .ops-query:has(.ops-query-pane.period:not([hidden])) { min-height: 164px; }
}

.chart-legend { flex-wrap:wrap; justify-content:flex-end; gap:7px 9px; }.road-context-layer { display:flex; gap:4px; align-items:center; cursor:pointer; white-space:nowrap; }.road-context-layer input { width:10px; height:10px; margin:0; accent-color:var(--ops-green); }.road-context-layer i { width:14px; height:8px; border:1px solid rgba(193,140,255,.42); background:repeating-linear-gradient(135deg,rgba(193,140,255,.28) 0 1px,transparent 1px 4px); }
.engineering-layer { display:flex; gap:4px; align-items:center; cursor:pointer; white-space:nowrap; }.engineering-layer input { width:10px; height:10px; margin:0; accent-color:#8ea8d8; }.engineering-layer i { width:13px; height:2px; background:#a6bfe9; }.engineering-layer.grade i { height:7px; border-radius:2px; background:linear-gradient(90deg,#65d6aa 0 48%,#f08a63 52%); }.engineering-layer.lanes i { background:#c18cff; }
.engineering-layer.curvature i { height:4px; background:radial-gradient(circle,#a6bfe9 0 1.2px,transparent 1.35px) 0 50%/4px 4px repeat-x; }
.bottleneck-capacity-note { display:block; margin-top:8px; padding:7px 8px; border:1px solid rgba(69,183,231,.14); border-radius:5px; color:#67818b; background:rgba(69,183,231,.035); font-size:8px; line-height:1.45; }
.road-profile-context { margin-top:7px; display:grid; grid-template-columns:1fr 1fr; gap:5px; }.road-profile-context span { min-height:34px; padding:5px 6px; display:flex; flex-direction:column; justify-content:center; border:1px solid rgba(166,195,204,.08); border-radius:5px; color:#5d737c; background:#091720; font-size:8.5px; line-height:1.3; }.road-profile-context span b { margin-bottom:2px; color:#657b84; font-size:7.5px; letter-spacing:.35px; }.road-profile-context span.active { border-color:rgba(193,140,255,.25); color:#d9c3ef; background:rgba(193,140,255,.055); }.road-profile-context span.active b { color:#c18cff; }.road-profile-context span.active.danger { border-color:rgba(240,93,120,.3); color:#f4bac5; background:rgba(240,93,120,.06); }.road-profile-context span.active.danger b { color:#f05d78; }
.road-profile-context span.sector { grid-column:1/-1; border-color:rgba(69,183,231,.25); color:#b9ddea; background:rgba(69,183,231,.055); }.road-profile-context span.sector b { color:#45b7e7; }
.road-context-detail section { grid-template-columns:1fr 1fr; }

@page { size: A4 landscape; margin: 9mm; }
.itinerary-legend span.traversia-section i {
  width: 25px;
  height: 11px;
  border: 1px solid rgba(193,140,255,.8);
  border-radius: 2px;
  background: repeating-linear-gradient(135deg,rgba(193,140,255,.35) 0 4px,rgba(193,140,255,.08) 4px 8px);
}
.itinerary-traversia-band {
  position: absolute;
  z-index: 1;
  left: calc(50% - 42px);
  top: calc(60px + (100% - 82px) * var(--position) / 100);
  width: 84px;
  height: max(3px,calc((100% - 82px) * var(--span) / 100));
  border-top: 1px solid rgba(193,140,255,.8);
  border-bottom: 1px solid rgba(193,140,255,.8);
  background: repeating-linear-gradient(135deg,rgba(193,140,255,.2) 0 4px,rgba(193,140,255,.07) 4px 8px);
  box-shadow: inset 3px 0 rgba(193,140,255,.65),inset -3px 0 rgba(193,140,255,.65);
  cursor: help;
  pointer-events: auto;
}
.itinerary-traversia-band > span {
  position: absolute;
  left: 50%;
  top: 50%;
  max-width: 76px;
  padding: 2px 4px;
  overflow: hidden;
  border-radius: 3px;
  color: #eadcff;
  background: rgba(43,26,60,.92);
  font-size: 7px;
  font-weight: 700;
  line-height: 1.1;
  text-align: center;
  text-overflow: ellipsis;
  white-space: nowrap;
  transform: translate(-50%,-50%);
}
/* Gestión y previsión de zonas congestionadas */
.forecast-workspace,.scenario-workspace { font-family: Roboto,"Helvetica Neue",Arial,sans-serif; }
.forecast-heading,.scenario-heading { height:62px; min-height:62px; }
.forecast-heading > div:first-child,.scenario-heading > div:first-child { min-width:0; }
.forecast-heading > div:first-child > div,.scenario-heading > div:first-child > div { min-width:0; }
.forecast-heading h2,.scenario-heading h2 { font:600 17px/1.15 Roboto,sans-serif; }
.forecast-heading > div:first-child p,.scenario-heading > div:first-child p { margin:3px 0 0; color:#617983; font-size:8.5px; }
.forecast-heading .congestion-source,.scenario-heading .congestion-source { max-width:49%; }
.forecast-heading .congestion-source :is(small,strong,span),.scenario-heading .congestion-source :is(small,strong,span) { display:block; }
.forecast-heading .congestion-source strong,.scenario-heading .congestion-source strong { margin-top:2px; color:#b8c8cb; font-size:9.5px; line-height:1.2; }
.forecast-heading .congestion-source span,.scenario-heading .congestion-source span { margin-top:2px; color:#647b84; font-size:8px; line-height:1.2; }
.forecast-heading .congestion-title > span { color:#45b7e7; border-color:rgba(69,183,231,.34); background:rgba(69,183,231,.08); }
.scenario-heading .congestion-title > span { color:#c18cff; border-color:rgba(193,140,255,.34); background:rgba(193,140,255,.08); }
.forecast-query,.scenario-query { margin-top:8px; padding:8px; display:grid; gap:6px; grid-template-columns:repeat(12,minmax(0,1fr)); border:1px solid var(--ops-line); border-radius:9px; background:#0a151d; }
.forecast-query > label,.scenario-query > label { min-width:0; height:48px; padding:6px 8px; display:flex; flex-direction:column; justify-content:center; grid-column:span 1; border:1px solid rgba(166,195,204,.12); border-radius:6px; background:#0c1922; }
.forecast-query .road,.scenario-query .road,.scenario-query .project { grid-column:span 2; }
.forecast-query input,.forecast-query select,.scenario-query input,.scenario-query select { width:100%; min-width:0; margin-top:3px; border:0; outline:0; color:#c4d1d4; background:transparent; font:500 10px Roboto,sans-serif; }
.forecast-query select option,.scenario-query select option { background:#0c1922; }
.forecast-query input::-webkit-calendar-picker-indicator,.scenario-query input::-webkit-calendar-picker-indicator { filter:invert(1); opacity:.5; }
.forecast-query .congestion-run,.scenario-query .congestion-run { min-width:0; grid-column:span 2; border:1px solid rgba(101,214,170,.32); border-radius:6px; color:#85e6c1; background:linear-gradient(135deg,rgba(101,214,170,.12),rgba(69,183,231,.07)); cursor:pointer; }
.forecast-query .congestion-run:disabled,.scenario-query .congestion-run:disabled { opacity:.45; cursor:wait; }
.forecast-truth,.scenario-status { min-height:47px; margin-top:7px; padding:7px 10px; display:grid; grid-template-columns:auto minmax(0,1fr) auto; gap:12px; align-items:center; border:1px solid rgba(69,183,231,.16); border-radius:8px; background:rgba(69,183,231,.035); }
.forecast-truth > span,.scenario-status > span { display:flex; gap:7px; align-items:center; color:#85bcd2; font-size:9px; letter-spacing:.35px; white-space:nowrap; }
.forecast-truth > span i,.scenario-status > span i { width:7px; height:7px; border-radius:50%; background:#45b7e7; box-shadow:0 0 9px rgba(69,183,231,.75); }
.forecast-truth p,.scenario-status p { margin:0; color:#789099; font-size:9.5px; line-height:1.42; }
.forecast-truth > b,.scenario-status > b { padding:5px 7px; border:1px solid rgba(69,183,231,.18); border-radius:4px; color:#6ca8bf; background:rgba(69,183,231,.05); font-size:8px; letter-spacing:.35px; white-space:nowrap; }
.forecast-runtime{margin-top:7px;border:1px solid rgba(69,183,231,.18);border-radius:9px;overflow:hidden;background:linear-gradient(135deg,#0a171f,#08141c 58%,rgba(69,183,231,.035));box-shadow:inset 0 1px rgba(255,255,255,.015)}.forecast-runtime.running{border-color:rgba(101,214,170,.3);box-shadow:0 0 22px rgba(101,214,170,.035),inset 0 1px rgba(255,255,255,.02)}.forecast-runtime>header{min-height:56px;padding:8px 10px;display:flex;align-items:center;justify-content:space-between;gap:14px;border-bottom:1px solid rgba(166,195,204,.08)}.forecast-runtime>header small,.forecast-runtime>header h3{display:block}.forecast-runtime>header small{color:#55727c;font-size:7.5px;font-weight:700;letter-spacing:.55px}.forecast-runtime>header h3{margin:4px 0 0;display:flex;align-items:center;gap:7px;color:#8ea4aa;font-size:10.5px}.forecast-runtime>header h3 i{width:8px;height:8px;border-radius:50%;background:#607780;box-shadow:0 0 0 4px rgba(96,119,128,.08)}.forecast-runtime.running>header h3{color:#8fe0c2}.forecast-runtime.running>header h3 i{background:#65d6aa;box-shadow:0 0 0 4px rgba(101,214,170,.1),0 0 14px rgba(101,214,170,.8);animation:forecast-runtime-pulse 1.35s ease-in-out infinite}.forecast-runtime-actions{display:flex;align-items:end;gap:6px}.forecast-runtime-actions>button{height:31px;padding:0 9px;border:1px solid rgba(69,183,231,.2);border-radius:5px;color:#72b5ce;background:rgba(69,183,231,.05);font:700 7.5px Roboto,sans-serif;cursor:pointer}.forecast-runtime-actions>button:first-child{border-color:rgba(101,214,170,.24);color:#72d2ae;background:rgba(101,214,170,.06)}.forecast-runtime-actions>button.running{border-color:rgba(239,97,121,.22);color:#e68c9a;background:rgba(239,97,121,.055)}.forecast-runtime-actions label{height:31px;min-width:92px;padding:4px 7px;display:flex;flex-direction:column;justify-content:center;border:1px solid rgba(166,195,204,.1);border-radius:5px;background:#0b1922}.forecast-runtime-actions label span{color:#526b74;font-size:6px}.forecast-runtime-actions select{margin-top:1px;border:0;outline:0;color:#aebfc2;background:transparent;font:600 8px Roboto,sans-serif}.forecast-runtime-telemetry{display:grid;grid-template-columns:1.15fr repeat(4,1fr);border-bottom:1px solid rgba(166,195,204,.08)}.forecast-runtime-telemetry article{min-width:0;padding:8px 10px;border-right:1px solid rgba(166,195,204,.07);background:rgba(8,21,29,.42)}.forecast-runtime-telemetry article:last-child{border-right:0}.forecast-runtime-telemetry small,.forecast-runtime-telemetry strong,.forecast-runtime-telemetry span{display:block}.forecast-runtime-telemetry small{color:#536c75;font-size:6.8px;letter-spacing:.35px}.forecast-runtime-telemetry strong{margin-top:4px;color:#d4e0e2;font-size:12px;font-variant-numeric:tabular-nums}.forecast-runtime-telemetry span{margin-top:3px;color:#50666f;font-size:7px}.forecast-runtime.running #forecast-runtime-countdown{color:#65d6aa}.forecast-runtime-pipeline{padding:7px 9px;display:grid;grid-template-columns:repeat(4,minmax(0,1fr));gap:7px}.forecast-runtime-pipeline>span{position:relative;min-width:0;padding:7px 8px 7px 25px;border:1px solid rgba(166,195,204,.07);border-radius:6px;background:#091820}.forecast-runtime-pipeline>span:after{content:"";position:absolute;left:100%;top:50%;width:8px;height:1px;background:rgba(166,195,204,.12)}.forecast-runtime-pipeline>span:last-child:after{display:none}.forecast-runtime-pipeline i{position:absolute;left:9px;top:50%;width:7px;height:7px;border:1px solid #536b74;border-radius:50%;transform:translateY(-50%)}.forecast-runtime-pipeline b,.forecast-runtime-pipeline small{display:block}.forecast-runtime-pipeline b{color:#71868e;font-size:7.5px}.forecast-runtime-pipeline small{margin-top:3px;color:#4e646d;font-size:7px}.forecast-runtime-pipeline>span.active{border-color:rgba(69,183,231,.28);background:rgba(69,183,231,.045)}.forecast-runtime-pipeline>span.active i{border-color:#45b7e7;background:#45b7e7;box-shadow:0 0 10px rgba(69,183,231,.65)}.forecast-runtime-pipeline>span.active b{color:#79c5e2}.forecast-runtime-pipeline>span.done i{border-color:#65d6aa;background:#65d6aa}.forecast-runtime-pipeline>span.done b{color:#79bca5}.forecast-runtime>footer{min-height:29px;padding:0 10px;display:flex;align-items:center;justify-content:space-between;gap:12px;border-top:1px solid rgba(166,195,204,.07);color:#5d747c;font-size:7.5px}.forecast-runtime>footer b{padding:3px 5px;border-radius:3px;color:#e5b56e;background:rgba(240,168,79,.08);font-size:6.5px}.forecast-runtime>footer strong{color:#577e71;font-size:7px;letter-spacing:.35px;white-space:nowrap}@keyframes forecast-runtime-pulse{50%{opacity:.5;box-shadow:0 0 0 7px rgba(101,214,170,0),0 0 7px rgba(101,214,170,.4)}}
@media(max-width:1080px){.forecast-runtime>header{align-items:flex-start;flex-direction:column}.forecast-runtime-actions{width:100%;flex-wrap:wrap}.forecast-runtime-telemetry{grid-template-columns:repeat(3,minmax(0,1fr))}.forecast-runtime-telemetry article:nth-child(3){border-right:0}.forecast-runtime-telemetry article:nth-child(n+4){border-top:1px solid rgba(166,195,204,.07)}}
@media(max-width:700px){.forecast-runtime-actions>button{flex:1}.forecast-runtime-actions label{flex:1}.forecast-runtime-telemetry{grid-template-columns:repeat(2,minmax(0,1fr))}.forecast-runtime-telemetry article:nth-child(3){border-right:1px solid rgba(166,195,204,.07)}.forecast-runtime-telemetry article:nth-child(2n){border-right:0}.forecast-runtime-pipeline{grid-template-columns:repeat(2,minmax(0,1fr))}.forecast-runtime-pipeline>span:after{display:none}.forecast-runtime>footer{padding:7px 10px;align-items:flex-start;flex-direction:column}}
.forecast-kpis,.scenario-kpis { grid-template-columns:repeat(6,minmax(0,1fr)); }
.forecast-stage { height:350px; display:grid; grid-template-columns:minmax(0,2.25fr) minmax(280px,.75fr); border:1px solid var(--ops-line); border-radius:9px; overflow:hidden; background:#09151d; }
.forecast-stage > article,.forecast-bottom > article,.scenario-stage > article,.scenario-bottom > article { min-width:0; min-height:0; border-right:1px solid var(--ops-line); background:#0a161e; }
.forecast-stage > article:last-child,.forecast-bottom > article:last-child,.scenario-stage > article:last-child,.scenario-bottom > article:last-child { border-right:0; }
.forecast-stage article > header,.forecast-bottom article > header,.scenario-stage article > header,.scenario-bottom article > header { min-height:46px; padding:8px 10px; display:flex; align-items:center; justify-content:space-between; gap:8px; border-bottom:1px solid rgba(166,195,204,.08); }
.forecast-stage article > header small,.forecast-bottom article > header small,.scenario-stage article > header small,.scenario-bottom article > header small { display:block; color:#4f6972; font-size:8px; letter-spacing:.48px; }
.forecast-stage article > header h3,.forecast-bottom article > header h3,.scenario-stage article > header h3,.scenario-bottom article > header h3 { margin:3px 0 0; color:#cbd7d9; font-size:11px; font-weight:600; }
.forecast-heat-card { display:grid; grid-template-rows:48px minmax(0,1fr) 27px; }
.forecast-heat-card > div,.forecast-timeline-card > div,.scenario-demand-card > div,.scenario-performance-card > div { min-height:0; position:relative; }
.forecast-heat-card canvas,.forecast-timeline-card canvas,.scenario-demand-card canvas,.scenario-performance-card canvas { width:100%; height:100%; display:block; cursor:crosshair; }
.forecast-heat-card > footer,.forecast-zones-card > footer,.scenario-demand-card > footer,.scenario-performance-card > footer { padding:0 10px; display:flex; align-items:center; justify-content:space-between; border-top:1px solid rgba(166,195,204,.07); color:#607781; font-size:8px; }
.forecast-legend,.scenario-legend { display:flex; gap:10px; align-items:center; color:#728890; font-size:8px; }
.forecast-legend span,.scenario-legend span { display:flex; gap:4px; align-items:center; white-space:nowrap; }
.forecast-legend i,.scenario-legend i { width:14px; height:7px; display:block; border-radius:1px; background:#3d9d83; }
.forecast-legend .predicted i { background:#d8924a; }
.forecast-legend .validation i { height:3px; background:#eef5f6; }
.forecast-zones-card { display:grid; grid-template-rows:48px minmax(0,1fr) 27px; }
.forecast-zones-card > header > span { color:#79a0ad; font-size:8px; }
#forecast-zone-list { min-height:0; padding:6px; overflow-y:auto; }
#forecast-zone-list > button { width:100%; min-height:48px; margin-bottom:5px; padding:6px; display:grid; grid-template-columns:24px minmax(0,1fr) auto 35px; gap:6px; align-items:center; border:1px solid rgba(166,195,204,.08); border-radius:6px; color:#aebfc2; background:#0a1821; text-align:left; cursor:pointer; }
#forecast-zone-list > button:hover,#forecast-zone-list > button.active { border-color:rgba(69,183,231,.35); background:rgba(69,183,231,.055); }
#forecast-zone-list button > b { color:#405963; font-size:9px; }
#forecast-zone-list button span strong,#forecast-zone-list button span small { display:block; }
#forecast-zone-list button span strong { color:#cbd8da; font-size:9.5px; }
#forecast-zone-list button span small { margin-top:3px; color:#607780; font-size:8px; }
#forecast-zone-list button i { padding:3px 4px; border-radius:3px; color:#e5c657; background:rgba(229,198,87,.09); font-size:7px; font-style:normal; }
#forecast-zone-list button i.alta { color:#ef9a68; background:rgba(239,117,77,.1); }
#forecast-zone-list button i.severa { color:#ef8091; background:rgba(217,71,95,.12); }
#forecast-zone-list button em { color:#e0e9ea; font-size:10px; font-style:normal; text-align:right; }
.forecast-no-zones { height:100%; padding:20px; display:grid; place-content:center; text-align:center; }
.forecast-no-zones strong { color:#89a0a7; font-size:11px; }.forecast-no-zones span { max-width:260px; margin-top:5px; color:#536b74; font-size:9px; line-height:1.4; }
.forecast-bottom { min-height:264px; margin-top:8px; display:grid; grid-template-columns:minmax(0,1.35fr) minmax(245px,.72fr) minmax(260px,.78fr); border:1px solid var(--ops-line); border-radius:9px; overflow:hidden; }
.forecast-timeline-card { display:grid; grid-template-rows:48px minmax(0,1fr); }
.forecast-timeline-card > header > span { color:#75a8bb; font-size:8px; }
.forecast-response-card > header > span { padding:4px 6px; border-radius:3px; color:#75909a; background:rgba(117,144,154,.08); font-size:7px; }.forecast-response-card > header > span.alta,.forecast-response-card > header > span.severa { color:#ef8c79; background:rgba(239,117,77,.1); }
#forecast-response { padding:8px 10px; }
#forecast-response > p { color:#5f7780; font-size:9px; }
#forecast-response ol { margin:0; padding:0; display:grid; gap:6px; list-style:none; }
#forecast-response li { display:grid; grid-template-columns:25px 1fr; gap:7px; align-items:start; }
#forecast-response li > b { width:24px; height:24px; display:grid; place-items:center; border:1px solid rgba(69,183,231,.18); border-radius:50%; color:#5e9bb3; font-size:7px; }
#forecast-response li strong,#forecast-response li span { display:block; }#forecast-response li strong { margin-bottom:2px; color:#b8c8ca; font-size:9px; }#forecast-response li span { color:#637b84; font-size:8.5px; line-height:1.35; }
#forecast-response > div { margin-top:8px; padding:7px; border:1px solid rgba(101,214,170,.12); border-radius:5px; background:rgba(101,214,170,.025); }#forecast-response > div small,#forecast-response > div strong { display:block; }#forecast-response > div small { color:#579178; font-size:7px; }#forecast-response > div strong { margin-top:3px; color:#88a49c; font-size:8px; line-height:1.35; }
.forecast-method-card dl { margin:0; padding:7px 10px; display:grid; gap:5px; }.forecast-method-card dl div { padding-bottom:5px; border-bottom:1px solid rgba(166,195,204,.06); }.forecast-method-card dt { color:#72909a; font-size:8px; font-weight:700; }.forecast-method-card dd { margin:2px 0 0; color:#607781; font-size:8.5px; line-height:1.35; }

/* Simulación de escenarios e infraestructuras */
.scenario-query { grid-template-columns:repeat(12,minmax(0,1fr)); }
.scenario-query .road,.scenario-query .project,.scenario-query .congestion-run { grid-column:span 2; }
.scenario-assumptions { margin-top:7px; padding:7px; display:grid; grid-template-columns:repeat(6,minmax(0,1fr)); gap:6px; border:1px solid var(--ops-line); border-radius:8px; background:#09151d; }
.scenario-assumptions > label { min-width:0; min-height:68px; padding:7px 8px; display:flex; flex-direction:column; justify-content:center; border:1px solid rgba(166,195,204,.09); border-radius:6px; background:#0b1821; }
.scenario-assumptions > label > span { color:#526b74; font-size:7.5px; font-weight:700; letter-spacing:.38px; }
.scenario-assumptions > label > div { height:25px; margin-top:3px; display:flex; gap:5px; align-items:center; }
.scenario-assumptions input { width:100%; min-width:0; border:0; border-bottom:1px solid rgba(166,195,204,.14); outline:0; color:#d5dfe1; background:transparent; font:600 13px Roboto,sans-serif; }
.scenario-assumptions b { color:#789098; font-size:8px; white-space:nowrap; }
.scenario-assumptions small { margin-top:4px; color:#4e656e; font-size:7.5px; line-height:1.25; }
.scenario-status { border-color:rgba(193,140,255,.16); background:rgba(193,140,255,.025); }
.scenario-status > span { color:#ad8dcc; }.scenario-status > span i { background:#c18cff; box-shadow:0 0 9px rgba(193,140,255,.6); }.scenario-status > b { border-color:rgba(193,140,255,.18); color:#a88fc0; background:rgba(193,140,255,.05); }
.scenario-stage { min-height:342px; display:grid; grid-template-columns:minmax(0,1fr) minmax(0,1fr) minmax(285px,.7fr); border:1px solid var(--ops-line); border-radius:9px; overflow:hidden; }
.scenario-demand-card,.scenario-performance-card { display:grid; grid-template-rows:48px minmax(0,1fr) 27px; }
.scenario-legend .baseline i { height:2px; background:#73858b; }.scenario-legend .project i { height:2px; background:#65d6aa; }.scenario-legend .limit i { height:1px; background:repeating-linear-gradient(90deg,#ef5c68 0 4px,transparent 4px 7px); }
.scenario-diagnostic-card > header > span { padding:4px 6px; border-radius:3px; color:#6fae92; background:rgba(101,214,170,.07); font-size:7px; }.scenario-diagnostic-card > header > span.warning { color:#d9be5d; background:rgba(229,198,87,.08); }.scenario-diagnostic-card > header > span.danger { color:#eb7e72; background:rgba(239,117,77,.1); }
#scenario-diagnostic { padding:9px 10px; }.scenario-headline { padding-bottom:8px; border-bottom:1px solid rgba(166,195,204,.07); }.scenario-headline strong,.scenario-headline span { display:block; }.scenario-headline strong { color:#d0dade; font-size:11px; }.scenario-headline span { margin-top:3px; color:#607781; font-size:8px; }
#scenario-diagnostic dl { margin:8px 0 0; display:grid; grid-template-columns:1fr 1fr; gap:5px; }#scenario-diagnostic dl div { padding:6px; border:1px solid rgba(166,195,204,.07); border-radius:4px; background:#09161e; }#scenario-diagnostic dt { color:#516a73; font-size:7px; }#scenario-diagnostic dd { margin:3px 0 0; color:#b9c8cb; font-size:9px; }#scenario-diagnostic > p { margin:8px 0 0; color:#667e87; font-size:8.5px; line-height:1.4; }
.scenario-bottom { min-height:228px; margin-top:8px; display:grid; grid-template-columns:1fr 1fr 1fr; border:1px solid var(--ops-line); border-radius:9px; overflow:hidden; }

/* Predicción espaciotemporal multi-horizonte */
.forecast-horizon-fixed strong { margin-top:5px; color:#8fdcbf; font-size:11px; font-weight:700; letter-spacing:.25px; }
.forecast-horizons { margin:7px 0; display:grid; grid-template-columns:repeat(3,minmax(0,1fr)); gap:7px; }
.forecast-horizons article { min-width:0; padding:9px 11px; display:grid; grid-template-columns:auto minmax(0,1fr) auto; gap:3px 10px; align-items:center; border:1px solid rgba(69,183,231,.16); border-radius:7px; background:linear-gradient(135deg,rgba(69,183,231,.055),rgba(101,214,170,.025)); }
.forecast-horizons small { grid-row:1/3; color:#60a6bf; font-size:10px; font-weight:800; letter-spacing:.5px; }
.forecast-horizons strong { color:#d7e5e7; font-size:17px; font-weight:600; }.forecast-horizons strong em { color:#688089; font-size:8px; font-style:normal; font-weight:500; }
.forecast-horizons span { color:#748d96; font-size:9px; }.forecast-horizons b { justify-self:end; padding:4px 6px; border-radius:3px; color:#d98c80; background:rgba(217,71,95,.07); font-size:8px; }.forecast-horizons b.good { color:#6bd8ad; background:rgba(101,214,170,.07); }
.forecast-bottom { grid-template-columns:minmax(0,1.25fr) minmax(220px,.68fr) minmax(230px,.68fr) minmax(250px,.74fr); }
.forecast-model-card { display:grid; grid-template-rows:48px minmax(125px,1fr) auto; }.forecast-model-card > div { min-height:0; position:relative; }.forecast-model-card canvas { width:100%; height:100%; display:block; cursor:crosshair; }.forecast-model-card > header > span { color:#65d6aa; font-size:8px; }.forecast-model-card > footer { padding:7px 9px; display:flex; flex-wrap:wrap; gap:4px 8px; border-top:1px solid rgba(166,195,204,.07); color:#607781; font-size:7.5px; }.forecast-model-card > footer b { color:#a4b8bc; }
.forecast-mlops { margin-top:8px; border:1px solid rgba(101,214,170,.18); border-radius:9px; overflow:hidden; background:linear-gradient(135deg,#0a171f,#08141c); }
.forecast-mlops > header { min-height:66px; padding:10px 12px; display:flex; align-items:center; justify-content:space-between; gap:16px; border-bottom:1px solid rgba(166,195,204,.09); }
.forecast-mlops > header small { color:#4d8e78; font-size:8px; font-weight:700; letter-spacing:.65px; }.forecast-mlops > header h3 { margin:3px 0 0; color:#d2dfe1; font-size:13px; }.forecast-mlops > header p { margin:4px 0 0; color:#6f878f; font-size:9px; }
#forecast-mlops-status { padding:6px 9px; border:1px solid rgba(101,214,170,.25); border-radius:4px; color:#73dcb4; background:rgba(101,214,170,.07); font-size:8px; font-weight:800; letter-spacing:.35px; white-space:nowrap; }
#forecast-mlops-status.rejected { border-color:rgba(217,71,95,.28); color:#ef8091; background:rgba(217,71,95,.08); }#forecast-mlops-status.validated-shadow { border-color:rgba(69,183,231,.28); color:#76c7e8; background:rgba(69,183,231,.07); }
.forecast-mlops-stages { padding:8px; display:grid; grid-template-columns:repeat(4,minmax(0,1fr)); gap:7px; border-bottom:1px solid rgba(166,195,204,.07); }
.forecast-mlops-stages article { min-width:0; min-height:54px; padding:7px 8px; display:grid; grid-template-columns:27px 1fr; gap:7px; align-items:center; border:1px solid rgba(166,195,204,.08); border-radius:6px; background:#0a1821; }.forecast-mlops-stages b { width:26px; height:26px; display:grid; place-items:center; border:1px solid rgba(101,214,170,.22); border-radius:50%; color:#5ab68f; font-size:8px; }.forecast-mlops-stages strong,.forecast-mlops-stages small { display:block; }.forecast-mlops-stages strong { color:#b8c8ca; font-size:9px; }.forecast-mlops-stages small { margin-top:3px; color:#5c737c; font-size:8px; line-height:1.25; }
.forecast-mlops-body { min-height:196px; display:grid; grid-template-columns:minmax(250px,.72fr) minmax(0,1.65fr); }
#forecast-mlops-summary { margin:0; padding:9px; display:grid; grid-template-columns:1fr 1fr; gap:7px; border-right:1px solid rgba(166,195,204,.08); }#forecast-mlops-summary > div { min-width:0; padding:8px; border:1px solid rgba(166,195,204,.07); border-radius:5px; background:#09161e; }#forecast-mlops-summary dt { color:#526c75; font-size:8px; font-weight:700; }#forecast-mlops-summary dd { margin:4px 0 0; color:#bccacc; font-size:9.5px; font-weight:600; line-height:1.25; }#forecast-mlops-summary dd small { margin-top:4px; display:block; color:#5e757e; font-size:8px; font-weight:400; }
.forecast-mlops-audit { min-width:0; padding:9px; }.forecast-mlops-audit table { width:100%; border-collapse:collapse; color:#84999f; font-size:8.5px; }.forecast-mlops-audit th,.forecast-mlops-audit td { height:30px; padding:5px 7px; border:1px solid rgba(166,195,204,.08); text-align:left; }.forecast-mlops-audit thead th { color:#607982; background:#0b1a23; font-size:7.5px; letter-spacing:.3px; text-transform:uppercase; }.forecast-mlops-audit tbody th { color:#8fa4aa; font-weight:600; }.forecast-mlops-audit td b.good { color:#65d6aa; }.forecast-mlops-audit td b.bad { color:#ef8091; }.forecast-gate-list { display:grid; gap:3px; }.forecast-gate-list span { display:block; white-space:nowrap; }.forecast-gate-list .pass { color:#65d6aa; }.forecast-gate-list .fail { color:#ef8091; }.forecast-gate-result td { color:#c2d0d2; font-weight:700; }
.forecast-mlops-audit > div { margin-top:8px; display:flex; justify-content:flex-end; gap:6px; }.forecast-mlops-audit button { min-height:28px; padding:0 9px; border:1px solid rgba(101,214,170,.2); border-radius:4px; color:#75cba9; background:rgba(101,214,170,.05); font:700 8px Roboto,sans-serif; cursor:pointer; }.forecast-mlops-audit button:last-child { border-color:rgba(69,183,231,.18); color:#6da9bf; background:rgba(69,183,231,.04); }.forecast-mlops-audit button:disabled { opacity:.45; cursor:wait; }
.forecast-mlops > footer { min-height:31px; padding:0 11px; display:flex; align-items:center; justify-content:space-between; gap:12px; border-top:1px solid rgba(166,195,204,.07); color:#5c737b; font-size:8px; }.forecast-mlops > footer span { color:#4e8975; font-weight:700; letter-spacing:.25px; }.forecast-mlops > footer strong { color:#758b91; font-weight:500; }

/* Mapa territorial de escenarios */
.scenario-stage { min-height:930px; grid-template-columns:minmax(0,1.1fr) minmax(0,1fr); grid-template-rows:350px 320px 260px; }
.scenario-map-card { grid-column:1/-1; display:grid; grid-template-rows:52px minmax(0,1fr) 30px; border-bottom:1px solid var(--ops-line); }
.scenario-map-card > header { position:relative; z-index:2; }.scenario-map-card > #scenario-map { min-height:0; position:relative; background:#07131a; }
.scenario-map-card > footer { padding:0 11px; display:flex; align-items:center; justify-content:space-between; gap:12px; border-top:1px solid rgba(166,195,204,.08); color:#607781; font-size:8px; }
.scenario-map-switch { display:flex; gap:4px; }.scenario-map-switch button { padding:5px 7px; border:1px solid rgba(166,195,204,.12); border-radius:4px; color:#6d858e; background:#0b1921; font:700 8px Roboto,sans-serif; cursor:pointer; }.scenario-map-switch button.active { border-color:rgba(101,214,170,.34); color:#80dfbb; background:rgba(101,214,170,.08); }
.scenario-map-legend { display:flex; gap:10px; }.scenario-map-legend span { display:flex; align-items:center; gap:4px; }.scenario-map-legend i { width:16px; height:4px; border-radius:2px; }.scenario-map-legend .los-a { background:#42c996; }.scenario-map-legend .los-c { background:#a6cf65; }.scenario-map-legend .los-d { background:#e5c657; }.scenario-map-legend .los-e { background:#ef884d; }.scenario-map-legend .los-f { background:#d9475f; }
.scenario-diagnostic-card { grid-column:1/-1; }.scenario-map-popup { min-width:230px; color:#1e3138; font:11px Roboto,sans-serif; }.scenario-map-popup small,.scenario-map-popup strong { display:block; }.scenario-map-popup small { color:#60777f; font-size:9px; }.scenario-map-popup strong { margin:3px 0 7px; color:#14272e; font-size:13px; }.scenario-map-popup dl { margin:0; display:grid; gap:5px; }.scenario-map-popup dl div { padding-top:5px; border-top:1px solid #dce4e6; }.scenario-map-popup dt { color:#72858b; font-size:9px; }.scenario-map-popup dd { margin:2px 0 0; color:#22383f; font-weight:600; }

@media (max-width:1300px) {
  .forecast-bottom { grid-template-columns:1fr 1fr; }.forecast-method-card,.forecast-timeline-card { min-height:235px; }.forecast-horizons article { grid-template-columns:auto 1fr; }.forecast-horizons b { grid-column:1/-1; justify-self:start; }
}
@media (max-width:820px) {
  .forecast-horizons { grid-template-columns:1fr; }.forecast-bottom { display:block; }.forecast-mlops-stages { grid-template-columns:1fr 1fr; }.forecast-mlops-body { display:block; }.forecast-mlops-summary { border-right:0; border-bottom:1px solid rgba(166,195,204,.08); }.scenario-stage { min-height:0; display:block; }.scenario-stage > article { min-height:300px; }.scenario-map-card { min-height:430px !important; }.scenario-map-switch { flex-wrap:wrap; }.scenario-map-card > footer { height:auto; min-height:36px; flex-wrap:wrap; }
}
.scenario-definition-card > div { padding:8px 10px; display:grid; gap:6px; }.scenario-definition-card p { margin:0; padding:7px; border:1px solid rgba(166,195,204,.07); border-radius:5px; background:#09161e; }.scenario-definition-card p strong,.scenario-definition-card p span { display:block; }.scenario-definition-card p strong { color:#c2d0d2; font-size:9px; }.scenario-definition-card p span { margin-top:3px; color:#607780; font-size:8.5px; line-height:1.35; }
.scenario-engine-card ol { margin:0; padding:8px 10px; display:grid; gap:6px; list-style:none; }.scenario-engine-card li { min-height:31px; display:grid; grid-template-columns:23px 1fr; gap:7px; align-items:center; }.scenario-engine-card li b { width:22px; height:22px; display:grid; place-items:center; border:1px solid rgba(193,140,255,.2); border-radius:50%; color:#b08bd3; font-size:8px; }.scenario-engine-card li span { color:#70868e; font-size:8.5px; line-height:1.3; }
.scenario-audit-card dl { margin:0; padding:8px 10px; display:grid; grid-template-columns:1fr 1fr; gap:5px; }.scenario-audit-card dl div { padding:6px; border:1px solid rgba(166,195,204,.07); border-radius:4px; background:#09161e; }.scenario-audit-card dt { color:#536c75; font-size:7px; }.scenario-audit-card dd { margin:3px 0 0; color:#8ca0a6; font-size:8px; line-height:1.3; }

/* Cobertura contractual y hoja de ruta del dato */
.contract-matrix-toolbar { grid-template-columns:minmax(220px,1.35fr) repeat(3,minmax(130px,.65fr)) 150px; }
.contract-matrix-kpis { grid-template-columns:repeat(6,minmax(0,1fr)); }
.contract-matrix-kpis article.coverage { border-color:rgba(69,183,231,.2); background:linear-gradient(135deg,#0b1720,rgba(69,183,231,.045)); }
.contract-matrix-kpis article.coverage strong { color:#78c8e8; }
.contract-matrix-kpis article.priority { border-color:rgba(240,168,79,.22); background:linear-gradient(135deg,#0b1720,rgba(240,168,79,.045)); }
.contract-matrix-kpis article.priority strong { color:#e7b264; }
.contract-roadmap { margin-bottom:9px; border:1px solid rgba(240,168,79,.16); border-radius:9px; overflow:hidden; background:linear-gradient(135deg,#0a161f,#09141c); }
.contract-roadmap > header { min-height:49px; padding:8px 12px; display:flex; align-items:center; justify-content:space-between; gap:15px; border-bottom:1px solid rgba(166,195,204,.08); }
.contract-roadmap > header small,.contract-roadmap > header h3 { display:block; }.contract-roadmap > header small { color:#9b794c; font-size:8.5px; font-weight:700; letter-spacing:.55px; }.contract-roadmap > header h3 { margin:3px 0 0; color:#d1dcde; font-size:12px; }.contract-roadmap > header > span { color:#6d8289; font-size:8.5px; }
#contract-roadmap { padding:7px; display:grid; grid-template-columns:repeat(2,minmax(0,1fr)); gap:6px; }
#contract-roadmap button { min-width:0; min-height:94px; padding:9px; display:grid; grid-template-columns:27px minmax(0,1fr) 76px; gap:9px; align-items:start; border:1px solid rgba(166,195,204,.09); border-radius:6px; color:inherit; background:#0b1821; text-align:left; cursor:pointer; }
#contract-roadmap button:hover { border-color:rgba(101,214,170,.28); background:#0c1b24; }
.contract-roadmap-rank { width:26px; height:26px; display:grid; place-items:center; border:1px solid rgba(240,168,79,.25); border-radius:50%; color:#dba65d; font-size:8px; font-weight:700; }
.contract-roadmap-copy { min-width:0; }.contract-roadmap-copy small,.contract-roadmap-copy strong,.contract-roadmap-copy em { display:block; }.contract-roadmap-copy small { color:#9a7447; font-size:8px; font-weight:700; letter-spacing:.35px; }.contract-roadmap-copy strong { margin-top:3px; color:#c4d2d5; font-size:10.3px; line-height:1.3; }.contract-roadmap-copy em { margin-top:5px; color:#758b92; font-size:9.2px; font-style:normal; line-height:1.42; }
.contract-roadmap-score { display:grid; justify-items:end; gap:5px; }.contract-roadmap-score b { color:#e4ecee; font-size:15px; }.contract-roadmap-score i { padding:4px 5px; border-radius:3px; font-size:6.5px; font-style:normal; font-weight:800; letter-spacing:.25px; white-space:nowrap; }.contract-roadmap-score i.integrated { color:#6ed9af; background:rgba(101,214,170,.08); }.contract-roadmap-score i.pilot { color:#e2ae61; background:rgba(240,168,79,.08); }.contract-roadmap-score i.blocked { color:#eb7889; background:rgba(217,71,95,.09); }
#contract-roadmap > p { grid-column:1/-1; margin:1px 4px 0; color:#576e77; font-size:8px; text-align:right; }
.contract-matrix-card table { min-width:1380px; }.contract-matrix-card th:first-child { width:22%; }.contract-matrix-card th:nth-child(2) { width:17%; }.contract-matrix-card th:nth-child(3) { width:18%; }.contract-matrix-card th:nth-child(4) { width:20%; }.contract-matrix-card th:nth-child(5) { width:23%; }
.contract-evidence { margin-top:7px; padding:6px 7px; display:block; border-left:2px solid rgba(101,214,170,.34); color:#6f9588; background:rgba(101,214,170,.025); font-size:8.2px; line-height:1.4; }
.contract-coverage-cell > div { display:flex; align-items:baseline; justify-content:space-between; gap:8px; }.contract-coverage-cell > div span { color:#5e7680; font-size:7.5px; font-weight:700; letter-spacing:.35px; }.contract-coverage-cell > div strong { color:#d7e1e3; font-size:14px; }
.contract-coverage-cell > b { height:4px; margin:5px 0 7px; display:block; overflow:hidden; border-radius:2px; background:#172832; }.contract-coverage-cell > b i { height:100%; display:block; border-radius:2px; background:linear-gradient(90deg,#45b7e7,#65d6aa); }
.contract-coverage-cell > small { display:inline-block; padding:4px 5px; border-radius:3px; font-size:7px; font-weight:800; letter-spacing:.25px; }.contract-coverage-cell > small.integrated { color:#6ed9af; background:rgba(101,214,170,.08); }.contract-coverage-cell > small.pilot { color:#e2ae61; background:rgba(240,168,79,.08); }.contract-coverage-cell > small.blocked { color:#eb7889; background:rgba(217,71,95,.09); }
.contract-coverage-cell p { margin:7px 0 0; color:#81969c; font-size:9px; line-height:1.45; }

@media(max-width:1500px){
  .forecast-query,.scenario-query { grid-template-columns:repeat(12,minmax(0,1fr)); }.forecast-query .road,.forecast-query .congestion-run { grid-column:span 2; }.scenario-assumptions { grid-template-columns:repeat(3,minmax(0,1fr)); }
  .forecast-bottom { grid-template-columns:1.25fr .75fr; }.forecast-method-card { grid-column:1/-1; min-height:190px; }.forecast-method-card dl { grid-template-columns:repeat(4,1fr); }
  .scenario-stage { grid-template-columns:1fr 1fr; }.scenario-diagnostic-card { grid-column:1/-1; min-height:230px; }
}
@media(max-width:980px){
  .forecast-query,.scenario-query { grid-template-columns:repeat(4,minmax(0,1fr)); }.forecast-query > label,.scenario-query > label { grid-column:span 1; }.forecast-query .road,.scenario-query .road,.scenario-query .project,.forecast-query .congestion-run,.scenario-query .congestion-run { grid-column:span 2; }
  .forecast-kpis,.scenario-kpis { grid-template-columns:repeat(3,1fr); }.forecast-stage,.scenario-stage { height:auto; display:block; }.forecast-stage > article,.scenario-stage > article { min-height:330px; border-right:0; border-bottom:1px solid var(--ops-line); }.forecast-bottom,.scenario-bottom { display:block; }.forecast-bottom > article,.scenario-bottom > article { min-height:245px; border-right:0; border-bottom:1px solid var(--ops-line); }.scenario-assumptions { grid-template-columns:repeat(2,1fr); }.forecast-method-card dl { grid-template-columns:1fr 1fr; }.forecast-truth,.scenario-status { grid-template-columns:1fr auto; }.forecast-truth p,.scenario-status p { grid-column:1/-1; }
}
@media(max-width:640px){
  .forecast-workspace,.scenario-workspace { padding:10px 8px 85px; overflow:visible; }.forecast-query,.scenario-query { grid-template-columns:repeat(2,minmax(0,1fr)); }.forecast-query .road,.scenario-query .road,.scenario-query .project,.forecast-query .congestion-run,.scenario-query .congestion-run { grid-column:1/-1; }.scenario-assumptions { grid-template-columns:1fr; }.forecast-kpis,.scenario-kpis { grid-template-columns:repeat(2,1fr); }.forecast-truth,.scenario-status { grid-template-columns:1fr; }.forecast-truth > b,.scenario-status > b { justify-self:start; }.forecast-method-card dl,.scenario-audit-card dl { grid-template-columns:1fr; }
}

@media(max-width:1180px){
  .contract-matrix-toolbar { grid-template-columns:1fr 1fr 1fr; }.contract-matrix-toolbar button { min-height:48px; grid-column:span 2; }.contract-matrix-kpis { grid-template-columns:repeat(3,1fr); }.contract-case-grid { grid-template-columns:1fr; }
}
@media(max-width:640px){
  .contract-matrix-workspace,.contract-case-workspace { padding:10px 8px 85px; overflow:visible; }.contract-matrix-toolbar { grid-template-columns:1fr; }.contract-matrix-toolbar button { grid-column:auto; }.contract-matrix-kpis,.contract-case-kpis { grid-template-columns:repeat(2,1fr); }.contract-matrix-scroll { max-height:none; }.contract-matrix-foot { flex-wrap:wrap; }.contract-matrix-foot p { width:100%; max-width:none; margin:0; text-align:left; }.contract-case-panel.readiness > div { grid-template-columns:1fr; }.contract-case-panel.related > div { grid-template-columns:1fr; }.contract-case-heading .contract-case-state { display:none; }#contract-roadmap { grid-template-columns:1fr; }.contract-roadmap > header { align-items:flex-start; flex-direction:column; }.contract-roadmap > header > span { margin-top:-4px; }
}

@media print {
  html,body,body.cam-platform { width: auto !important; height: auto !important; overflow: visible !important; background: #071018 !important; print-color-adjust: exact; -webkit-print-color-adjust: exact; }
  body.cam-platform .app-shell { height: auto !important; display: block !important; }
  body.cam-platform .sidebar,body.cam-platform .topbar,.analysis-rail,.analysis-rail-handle,.analysis-report-button,.ops-toast,.congestion-loading,.congestion-tooltip,.count-tooltip,.road-profile-tooltip { display: none !important; }
  body.cam-platform .main-stage { height: auto !important; min-height: 0 !important; display: block !important; }
  body.cam-platform .cam-view { display: none !important; }
  body.cam-platform #view-analysis { height: auto !important; min-height: 0 !important; display: block !important; background: #071018 !important; }
  body.cam-platform .analysis-main { display: block !important; min-height: 0 !important; }
  body.cam-platform .analysis-main > section[hidden],body.cam-platform .analysis-main > div[hidden] { display: none !important; }
  body.cam-platform .analysis-main.congestion-active > .analysis-content,body.cam-platform .analysis-main.congestion-active > .analysis-filters { display: none !important; }
  body.cam-platform .analysis-filters { display: none !important; }
  body.cam-platform .analysis-content,body.cam-platform .contract-matrix-workspace,body.cam-platform .contract-case-workspace,body.cam-platform .corridor-monitor-workspace,body.cam-platform .congestion-workspace,body.cam-platform .forecast-workspace,body.cam-platform .scenario-workspace,body.cam-platform .day-type-workspace,body.cam-platform .bottleneck-workspace,body.cam-platform .works-workspace,body.cam-platform .corridor-speed-workspace,body.cam-platform .performance-workspace,body.cam-platform .event-profile-workspace,body.cam-platform .speed-alert-workspace,body.cam-platform .itinerary-workspace,body.cam-platform .od-workspace,body.cam-platform .count-workspace { height: auto !important; max-height: none !important; overflow: visible !important; padding: 0 !important; }
  body.cam-platform .contract-matrix-scroll { max-height:none !important; overflow:visible !important; }body.cam-platform .contract-matrix-card table { min-width:0 !important; font-size:7px; }body.cam-platform .contract-matrix-card th,body.cam-platform .contract-matrix-card td { padding:5px; }body.cam-platform .contract-matrix-foot { display:none !important; }
  body.cam-platform .analysis-print-cover { margin: 0 0 10mm; padding: 0 0 5mm; display: block !important; border-bottom: 1px solid rgba(166,195,204,.22); color: #dfe8ea; }
  .analysis-print-cover > header { min-height: 42px; display: flex; align-items: center; justify-content: space-between; }.analysis-print-cover > header > div { display: flex; gap: 10px; align-items: center; }.analysis-print-cover .brand-mark { width: 38px; height: 38px; margin: 0; object-fit: contain; filter: drop-shadow(0 5px 9px rgba(7,120,97,.2)); }.analysis-print-cover header strong,.analysis-print-cover header small { display: block; }.analysis-print-cover header strong { color: #eef5f6; font-size: 15px; }.analysis-print-cover header small { margin-top: 3px; color: #69818a; font-size: 8px; letter-spacing: .5px; }.analysis-print-cover time { color: #7b9299; font-size: 9px; }.analysis-print-cover h1 { margin: 6mm 0 1.5mm; color: #f1f6f7; font-size: 24px; }.analysis-print-cover > p { margin: 0; color: #7d949b; font-size: 9px; }.analysis-print-cover > div > h2 { margin: 5mm 0 2mm; color: #799189; font-size: 9px; letter-spacing: .6px; text-transform: uppercase; }
  .analysis-print-filters { display: grid; grid-template-columns: repeat(4,minmax(0,1fr)); gap: 2mm; }.analysis-print-filters article { min-height: 13mm; padding: 2.4mm 3mm; border: 1px solid rgba(166,195,204,.16); border-radius: 2mm; background: #0b1720; }.analysis-print-filters small,.analysis-print-filters strong { display: block; }.analysis-print-filters small { color: #59727b; font-size: 7px; letter-spacing: .35px; }.analysis-print-filters strong { margin-top: 1.5mm; color: #c8d5d7; font-size: 9px; line-height: 1.3; }
  body.cam-platform .analysis-main button,body.cam-platform .analysis-main form { display: none !important; }
  body.cam-platform .analysis-main article,body.cam-platform .analysis-main canvas,body.cam-platform .analysis-main .analysis-kpis,body.cam-platform .analysis-main .congestion-kpis { break-inside: avoid; page-break-inside: avoid; }
  body.cam-platform canvas { max-width: 100% !important; }
  body.cam-platform .maplibregl-control-container { display: none !important; }
}

/* Legibilidad, transiciones y acceso profesional. */
@media screen {
  body.cam-platform #view-analysis :is(section,article,header,footer,div,label,form,aside,nav) { min-width:0; }
  body.cam-platform #view-analysis :is(h1,h2,h3,h4,p,strong,small,span,b,em,li,dt,dd,th,td,button,label) { max-width:100%; overflow-wrap:anywhere; word-break:normal; }
  body.cam-platform #view-analysis :is(.analysis-panel,.contract-case-panel,.contract-matrix-card,.corridor-monitor-context-card,.forecast-method-card,.scenario-diagnostic-card) > header { gap:10px; align-items:flex-start; }
  body.cam-platform #view-analysis :is(.analysis-panel,.contract-case-panel,.contract-matrix-card) > header > :is(div,span) { min-width:0; }
  body.cam-platform #view-analysis :is(.analysis-panel,.contract-case-panel,.contract-matrix-card) > header h3 { white-space:normal; }
  body.cam-platform #view-analysis :is(.analysis-tool,.congestion-query button,.forecast-query button,.scenario-query button,.day-type-query button,.bottleneck-query button,.works-query button,.performance-query button,.event-profile-query button,.itinerary-query button,.od-query button,.count-query button) { white-space:normal; }
  body.cam-platform #view-analysis :is(.analysis-kpis,.congestion-kpis,.contract-matrix-kpis,.contract-case-kpis,.corridor-monitor-kpis,.event-profile-kpis,.forecast-kpis,.scenario-kpis) article { min-width:0; }
  body.cam-platform #view-analysis :is(.analysis-kpis,.congestion-kpis,.contract-matrix-kpis,.contract-case-kpis,.corridor-monitor-kpis,.event-profile-kpis,.forecast-kpis,.scenario-kpis) :is(small,strong,span) { white-space:normal; }
  body.cam-platform .xouba-entering { animation:xouba-enter .38s cubic-bezier(.2,.8,.2,1) both; }
  body.cam-platform .top-user { position:relative; display:grid; place-items:center; color:#b9cbc9; border-color:rgba(101,214,170,.24); background:linear-gradient(145deg,#10252d,#091821); box-shadow:inset 0 1px 0 rgba(255,255,255,.05),0 6px 18px rgba(0,0,0,.18); transition:transform .18s ease,border-color .18s ease,box-shadow .18s ease; }
  body.cam-platform .top-user:hover { transform:translateY(-1px); border-color:rgba(101,214,170,.58); box-shadow:0 8px 24px rgba(0,0,0,.24),0 0 0 3px rgba(101,214,170,.05); }
  body.cam-platform .top-user > span { font-size:9.5px; font-weight:800; letter-spacing:.3px; }
  body.cam-platform .top-user > i { position:absolute; right:-1px; bottom:0; width:8px; height:8px; border:2px solid #07141d; border-radius:50%; background:#687e86; }
  body.cam-platform .top-user > i[data-tone="ready"],body.cam-platform .top-user > i[data-tone="authenticated"] { background:#65d6aa; box-shadow:0 0 8px rgba(101,214,170,.65); }
  body.cam-platform .top-user > i[data-tone="warning"] { background:#f0a84f; }
  body.cam-platform .top-user > i[data-tone="error"] { background:#ee6578; }
}

@keyframes xouba-enter { from { opacity:.15; transform:translateY(7px) scale(.998); } to { opacity:1; transform:none; } }

#identity-dialog { width:min(980px,calc(100vw - 32px)); max-width:none; height:min(720px,calc(100vh - 32px)); max-height:none; padding:0; border:1px solid rgba(125,219,188,.23); border-radius:18px; color:#d8e4e2; background:#07141d; box-shadow:0 34px 100px rgba(0,0,0,.62); font-family:Roboto,"Helvetica Neue",Arial,sans-serif; overflow:hidden; }
#identity-dialog::backdrop { background:rgba(2,8,12,.72); backdrop-filter:blur(8px) saturate(.78); }
#identity-dialog .identity-shell { height:100%; display:grid; grid-template-rows:auto auto minmax(0,1fr) auto; background:radial-gradient(circle at 82% 10%,rgba(50,155,133,.13),transparent 34%),linear-gradient(145deg,#091a24,#07131c 62%); }
#identity-dialog .identity-shell > header { min-height:90px; padding:18px 22px; display:flex; align-items:center; justify-content:space-between; gap:18px; border-bottom:1px solid rgba(166,195,204,.1); }
#identity-dialog .identity-brand { min-width:0; display:flex; align-items:center; gap:14px; }
#identity-dialog .identity-brand > img { width:50px; height:50px; flex:0 0 50px; display:block; object-fit:contain; filter:drop-shadow(0 8px 14px rgba(7,120,97,.24)); }
#identity-dialog :is(h3,h4,p) { margin:0; overflow-wrap:anywhere; }
#identity-dialog .identity-brand small { color:#65d6aa; font-size:9px; font-weight:700; letter-spacing:1.15px; }
#identity-dialog .identity-brand h3 { margin-top:4px; color:#e2ecea; font-size:20px; font-weight:600; }
#identity-dialog .identity-brand p { margin-top:4px; color:#708890; font-size:11px; line-height:1.45; }
#identity-dialog .identity-shell > header > button { width:34px; height:34px; flex:0 0 auto; border:1px solid rgba(166,195,204,.13); border-radius:10px; color:#92a6aa; background:#0b1c25; font-size:20px; cursor:pointer; }
#identity-dialog .identity-status-line { min-height:46px; padding:9px 22px; display:grid; grid-template-columns:8px minmax(0,1fr) auto; gap:9px; align-items:center; border-bottom:1px solid rgba(166,195,204,.08); background:rgba(255,255,255,.012); }
#identity-dialog .identity-status-line > span { width:7px; height:7px; border-radius:50%; background:#6a7e86; }
#identity-dialog .identity-status-line[data-tone="ready"] > span,#identity-dialog .identity-status-line[data-tone="authenticated"] > span { background:#65d6aa; box-shadow:0 0 9px rgba(101,214,170,.6); }
#identity-dialog .identity-status-line[data-tone="warning"] > span { background:#f0a84f; } #identity-dialog .identity-status-line[data-tone="error"] > span { background:#ee6578; }
#identity-dialog .identity-status-line strong { min-width:0; color:#afc0c1; font-size:11px; font-weight:600; overflow-wrap:anywhere; }
#identity-dialog .identity-status-line small { color:#5f747c; font-size:9px; text-align:right; overflow-wrap:anywhere; }
#identity-dialog .identity-shell > section { min-height:0; overflow:auto; }
#identity-dialog .identity-login,#identity-dialog .identity-bootstrap { grid-template-columns:minmax(0,1fr) minmax(330px,.78fr); gap:46px; align-items:center; padding:42px 58px; }
#identity-dialog .identity-login:not([hidden]),#identity-dialog .identity-bootstrap:not([hidden]) { display:grid; }
#identity-dialog .identity-login-copy small,#identity-dialog .identity-bootstrap > div small { color:#65d6aa; font-size:9px; font-weight:700; letter-spacing:1px; }
#identity-dialog .identity-login-copy h4,#identity-dialog .identity-bootstrap > div h4 { margin-top:10px; color:#ecf3f1; font-size:30px; line-height:1.12; font-weight:500; }
#identity-dialog .identity-login-copy p,#identity-dialog .identity-bootstrap > div p { max-width:510px; margin-top:14px; color:#82969b; font-size:13px; line-height:1.6; }
#identity-dialog .identity-login-copy ul { margin:21px 0 0; padding:0; display:grid; gap:9px; list-style:none; color:#9eb0b2; font-size:11px; }
#identity-dialog .identity-login-copy li::before { content:"✓"; margin-right:9px; color:#65d6aa; }
#identity-dialog :is(.identity-login,.identity-bootstrap,.identity-admin) form { min-width:0; padding:20px; display:grid; gap:13px; border:1px solid rgba(166,195,204,.11); border-radius:13px; background:rgba(9,26,35,.72); box-shadow:0 18px 45px rgba(0,0,0,.2); }
#identity-dialog form label { min-width:0; display:grid; gap:6px; }
#identity-dialog form label > span { color:#708890; font-size:8.5px; font-weight:700; letter-spacing:.65px; }
#identity-dialog :is(input,select) { width:100%; min-width:0; height:40px; padding:0 11px; border:1px solid rgba(166,195,204,.14); border-radius:7px; outline:0; color:#d8e5e2; background:#081720; font:500 11px Roboto,sans-serif; }
#identity-dialog :is(input,select):focus { border-color:rgba(101,214,170,.56); box-shadow:0 0 0 3px rgba(101,214,170,.07); }
#identity-dialog form button { min-height:40px; border:1px solid rgba(101,214,170,.34); border-radius:7px; color:#092119; background:#65d6aa; font:800 9px Roboto,sans-serif; letter-spacing:.5px; cursor:pointer; transition:transform .16s ease,filter .16s ease; }
#identity-dialog form button:hover { transform:translateY(-1px); filter:brightness(1.06); }
#identity-dialog form button:disabled { cursor:wait; opacity:.56; transform:none; }
#identity-dialog form > small { color:#5e747b; font-size:9px; line-height:1.45; }
#identity-dialog form output { min-height:14px; color:#65d6aa; font-size:9.5px; line-height:1.4; overflow-wrap:anywhere; }
#identity-dialog form output[data-error="true"] { color:#ee7b8b; }
#identity-dialog .identity-account:not([hidden]) { display:block; padding:24px 28px 34px; }
#identity-dialog .identity-account > header { min-height:74px; display:grid; grid-template-columns:50px minmax(0,1fr) auto auto; gap:13px; align-items:center; }
#identity-dialog .identity-avatar { width:50px; height:50px; display:grid; place-items:center; border:1px solid rgba(101,214,170,.35); border-radius:14px; color:#65d6aa; background:rgba(101,214,170,.08); font-size:14px; font-weight:800; }
#identity-dialog .identity-account > header small { color:#688088; font-size:8px; letter-spacing:.65px; } #identity-dialog .identity-account > header h4 { margin-top:3px; color:#dce8e5; font-size:18px; } #identity-dialog .identity-account > header p { margin-top:3px; color:#71858c; font-size:10px; }
#identity-dialog .identity-account > header > span { padding:7px 10px; border:1px solid rgba(101,214,170,.18); border-radius:99px; color:#65d6aa; background:rgba(101,214,170,.05); font-size:8.5px; font-weight:700; text-transform:uppercase; }
#identity-dialog .identity-account > header > button,#identity-dialog .identity-admin > header button { min-height:32px; padding:0 11px; border:1px solid rgba(166,195,204,.14); border-radius:7px; color:#8da2a6; background:#0a1a23; font:700 8.5px Roboto,sans-serif; cursor:pointer; }
#identity-dialog .identity-permissions { margin:13px 0 20px; display:flex; flex-wrap:wrap; gap:6px; }
#identity-dialog .identity-permissions span { padding:6px 8px; border-radius:5px; color:#7f9599; background:#0b1c25; font-size:8.5px; }
#identity-dialog .identity-admin { border-top:1px solid rgba(166,195,204,.09); }
#identity-dialog .identity-admin > header { min-height:54px; display:flex; align-items:center; justify-content:space-between; gap:12px; }
#identity-dialog .identity-admin > header small { color:#65d6aa; font-size:8px; letter-spacing:.65px; } #identity-dialog .identity-admin > header h4 { margin-top:3px; color:#b9c9c8; font-size:13px; }
#identity-dialog .identity-user-list { display:grid; gap:5px; }
#identity-dialog .identity-user-list article { min-width:0; min-height:52px; padding:7px 9px; display:grid; grid-template-columns:30px minmax(0,1fr) 78px 58px 64px auto; gap:9px; align-items:center; border:1px solid rgba(166,195,204,.08); border-radius:7px; background:#091821; }
#identity-dialog .identity-user-list article > span { width:28px; height:28px; display:grid; place-items:center; border-radius:7px; color:#65d6aa; background:rgba(101,214,170,.08); font-size:8px; font-weight:800; }
#identity-dialog .identity-user-list :is(strong,small) { display:block; overflow-wrap:anywhere; } #identity-dialog .identity-user-list strong { color:#adbec0; font-size:10px; } #identity-dialog .identity-user-list small { margin-top:2px; color:#596f77; font-size:8.5px; }
#identity-dialog .identity-user-list b,#identity-dialog .identity-user-list em,#identity-dialog .identity-user-list i { color:#71878e; font-size:8px; font-style:normal; font-weight:500; text-align:right; overflow-wrap:anywhere; } #identity-dialog .identity-user-list em.active { color:#65d6aa; }
#identity-dialog .identity-user-actions { display:flex; justify-content:flex-end; gap:5px; }
#identity-dialog .identity-user-actions button { min-height:28px; padding:0 8px; border:1px solid rgba(101,214,170,.2); border-radius:6px; color:#7fcdb2; background:rgba(101,214,170,.045); font:800 7px Roboto,sans-serif; letter-spacing:.35px; cursor:pointer; }
#identity-dialog .identity-user-actions button:hover { color:#bff4df; border-color:rgba(101,214,170,.42); background:rgba(101,214,170,.1); }
#identity-dialog .identity-user-actions button.danger { color:#e48794; border-color:rgba(238,101,120,.2); background:rgba(238,101,120,.04); }
#identity-dialog .identity-user-actions button.danger:hover { color:#ffb4bf; border-color:rgba(238,101,120,.42); background:rgba(238,101,120,.1); }
#identity-dialog .identity-user-actions button:disabled { opacity:.26; cursor:not-allowed; }
#identity-dialog .identity-admin form { margin-top:10px; padding:10px; grid-template-columns:1fr 1.15fr .75fr 1fr auto; align-items:end; }
#identity-dialog .identity-admin form output { grid-column:1/-1; }
#identity-dialog .identity-admin form button { padding:0 13px; }
#identity-dialog .identity-tool-selector { min-width:0; grid-column:1/-1; margin:2px 0 0; padding:13px; border:1px solid rgba(101,214,170,.16); border-radius:11px; background:linear-gradient(145deg,rgba(101,214,170,.045),rgba(6,20,29,.72)); }
#identity-dialog .identity-tool-selector legend { width:100%; padding:0 2px 9px; display:flex; align-items:end; justify-content:space-between; gap:12px; }
#identity-dialog .identity-tool-selector legend :is(small,strong) { display:block; }
#identity-dialog .identity-tool-selector legend small { color:#65d6aa; font-size:7.5px; font-weight:800; letter-spacing:.75px; }
#identity-dialog .identity-tool-selector legend strong { margin-top:3px; color:#c9d8d6; font-size:11px; }
#identity-dialog .identity-tool-selector legend output { min-height:0; padding:5px 8px; border:1px solid rgba(101,214,170,.18); border-radius:99px; color:#65d6aa; background:rgba(101,214,170,.06); font-size:8px; font-weight:800; white-space:nowrap; }
#identity-dialog .identity-tool-presets { display:flex; gap:6px; margin-bottom:10px; }
#identity-dialog .identity-tool-presets button { min-height:28px; padding:0 9px; border-color:rgba(166,195,204,.13); color:#82999d; background:#091a23; font-size:7.5px; }
#identity-dialog .identity-tool-presets button:hover { border-color:rgba(101,214,170,.32); color:#65d6aa; background:rgba(101,214,170,.06); }
#identity-dialog .identity-tool-grid { max-height:268px; padding-right:5px; display:grid; grid-template-columns:repeat(3,minmax(0,1fr)); gap:8px; overflow:auto; scrollbar-width:thin; scrollbar-color:#284650 transparent; }
#identity-dialog .identity-tool-grid section { min-width:0; padding:9px; border:1px solid rgba(166,195,204,.075); border-radius:8px; background:rgba(7,21,29,.7); }
#identity-dialog .identity-tool-grid h6 { margin:0 0 6px; color:#657c83; font-size:7.5px; letter-spacing:.65px; text-transform:uppercase; }
#identity-dialog .identity-tool-grid label { min-width:0; min-height:29px; padding:4px 5px; display:grid; grid-template-columns:14px minmax(0,1fr); gap:7px; align-items:center; border-radius:6px; cursor:pointer; }
#identity-dialog .identity-tool-grid label:hover { background:rgba(101,214,170,.055); }
#identity-dialog .identity-tool-grid input[type="checkbox"] { appearance:none; width:13px; height:13px; min-width:13px; padding:0; border:1px solid #35505a; border-radius:4px; background:#07151d; cursor:pointer; }
#identity-dialog .identity-tool-grid input[type="checkbox"]:checked { border-color:#65d6aa; background:#65d6aa; box-shadow:inset 0 0 0 3px #0a1b23; }
#identity-dialog .identity-tool-grid label > span { min-width:0; margin:0; display:grid; grid-template-columns:22px minmax(0,1fr); gap:4px; align-items:center; color:inherit; letter-spacing:0; }
#identity-dialog .identity-tool-grid label b { color:#65d6aa; font-size:7px; }
#identity-dialog .identity-tool-grid label strong { color:#9fb2b3; font-size:8.3px; font-weight:500; line-height:1.25; overflow-wrap:anywhere; }
#identity-dialog .identity-tool-selector > p { margin:9px 0 0; color:#5f757c; font-size:8px; line-height:1.45; }
#identity-dialog .identity-tool-selector[data-selection="none"] legend output { color:#ee7b8b; border-color:rgba(238,123,139,.22); background:rgba(238,123,139,.06); }
#identity-dialog .identity-tool-selector[data-locked="true"] .identity-tool-grid,#identity-dialog .identity-tool-selector[data-locked="true"] .identity-tool-presets { opacity:.48; }
#identity-dialog .identity-tool-selector[data-locked="true"] > p::before { content:"Administrador · acceso completo obligatorio. "; color:#65d6aa; }
#identity-dialog .identity-create-submit { grid-column:1/-1; justify-self:end; min-width:180px; }
#identity-dialog .identity-permissions .analysis-access { color:#65d6aa; border:1px solid rgba(101,214,170,.15); background:rgba(101,214,170,.06); }
#identity-dialog .identity-user-list i small { margin-top:2px; color:#65d6aa; font-size:7px; text-align:right; }
#identity-dialog .identity-empty { margin:12px 0; color:#71868c; font-size:10px; }
#identity-dialog .identity-edit-user-form[hidden] { display:none; }
#identity-dialog .identity-admin form.identity-edit-user-form:not([hidden]) { margin-top:10px; padding:13px; display:grid; grid-template-columns:170px minmax(0,1fr); gap:10px 13px; align-items:end; border-color:rgba(101,214,170,.24); background:linear-gradient(145deg,rgba(101,214,170,.07),rgba(9,26,35,.86)); }
#identity-dialog .identity-edit-user-form > header { grid-column:1/-1; display:flex; align-items:center; justify-content:space-between; gap:12px; }
#identity-dialog .identity-edit-user-form > header :is(small,strong,span) { display:block; }
#identity-dialog .identity-edit-user-form > header small { color:#65d6aa; font-size:7.5px; font-weight:800; letter-spacing:.75px; }
#identity-dialog .identity-edit-user-form > header strong { margin-top:3px; color:#cbdad8; font-size:11px; }
#identity-dialog .identity-edit-user-form > header span { margin-top:2px; color:#627981; font-size:8.5px; }
#identity-dialog .identity-edit-user-form > header button,#identity-dialog .identity-edit-actions button:first-child { min-height:30px; color:#83989c; border-color:rgba(166,195,204,.14); background:#0a1a23; }
#identity-dialog .identity-edit-user-form .identity-tool-selector { grid-column:2; grid-row:2 / span 2; margin:0; }
#identity-dialog .identity-edit-actions { grid-column:1; display:grid; gap:6px; align-self:start; }
#identity-dialog .identity-edit-user-form > output { grid-column:1/-1; }
#identity-dialog .identity-shell > footer { min-height:52px; padding:10px 20px; display:flex; align-items:center; gap:10px; border-top:1px solid rgba(166,195,204,.09); color:#627981; background:#07131b; }
#identity-dialog .identity-shell > footer > span { display:flex; gap:7px; align-items:center; color:#7e9397; font-size:9px; } #identity-dialog .identity-shell > footer > span i { width:6px; height:6px; border-radius:50%; background:#65d6aa; }
#identity-dialog .identity-shell > footer small { margin-left:auto; color:#536a72; font-size:8.5px; overflow-wrap:anywhere; }
#identity-dialog .identity-shell > footer button { min-height:30px; padding:0 10px; border:1px solid rgba(166,195,204,.13); border-radius:6px; color:#8ba0a5; background:#0a1a23; font:700 8px Roboto,sans-serif; cursor:pointer; }

@media(max-width:760px) {
  #identity-dialog { width:calc(100vw - 14px); height:calc(100vh - 14px); border-radius:12px; }
  #identity-dialog .identity-login,#identity-dialog .identity-bootstrap { grid-template-columns:1fr; gap:20px; padding:24px 18px; }
  #identity-dialog .identity-login-copy h4,#identity-dialog .identity-bootstrap > div h4 { font-size:23px; }
  #identity-dialog .identity-status-line { grid-template-columns:8px 1fr; } #identity-dialog .identity-status-line small { display:none; }
  #identity-dialog .identity-account > header { grid-template-columns:50px 1fr; } #identity-dialog .identity-account > header > :is(span,button) { justify-self:start; }
  #identity-dialog .identity-user-list article { grid-template-columns:30px 1fr auto; } #identity-dialog .identity-user-list article > :is(b,em,i) { display:none; } #identity-dialog .identity-user-actions { grid-column:2/-1; }
  #identity-dialog .identity-admin form { grid-template-columns:1fr; }
  #identity-dialog .identity-admin form.identity-edit-user-form:not([hidden]) { grid-template-columns:1fr; } #identity-dialog .identity-edit-user-form .identity-tool-selector,#identity-dialog .identity-edit-actions { grid-column:1; grid-row:auto; }
  #identity-dialog .identity-tool-grid { grid-template-columns:1fr; max-height:330px; }
  #identity-dialog .identity-create-submit { width:100%; justify-self:stretch; }
  #identity-dialog .identity-shell > footer small { display:none; }
}

@media(prefers-reduced-motion:reduce) {
  body.cam-platform *,body.cam-platform *::before,body.cam-platform *::after { scroll-behavior:auto !important; animation-duration:.001ms !important; animation-iteration-count:1 !important; transition-duration:.001ms !important; }
}

.top-help { height:39px;padding:0 10px 0 8px;display:grid;grid-template-columns:28px minmax(0,1fr);gap:8px;align-items:center;border:1px solid rgba(101,214,170,.2);border-radius:9px;color:#81979f;background:linear-gradient(135deg,rgba(101,214,170,.075),#0b1821 58%);box-shadow:inset 0 1px rgba(255,255,255,.025),0 7px 18px rgba(0,0,0,.12);text-align:left;cursor:pointer;transition:border-color .2s ease,transform .2s ease,background .2s ease; }
.top-help > .top-help-mark { width:28px;height:28px;position:relative;display:grid;place-items:center;border:1px solid rgba(101,214,170,.32);border-radius:9px;color:var(--ops-green);background:radial-gradient(circle at 35% 25%,rgba(115,233,193,.18),rgba(101,214,170,.045));font:700 12px "Roboto",Arial,sans-serif;box-shadow:0 0 15px rgba(101,214,170,.09); }
.top-help-mark > i { position:absolute;right:3px;top:3px;width:5px;height:5px;border-radius:50%;background:#66ddb7;box-shadow:0 0 8px #66ddb7; }.top-help-mark > b { font-size:12px;font-weight:800; }
.top-help strong,.top-help small { display:block;min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap; }.top-help strong { color:#bdd0d2;font-size:8.5px;letter-spacing:.5px; }.top-help small { max-width:116px;margin-top:2px;color:#66818a;font-size:8px; }.top-help:hover { transform:translateY(-1px);border-color:rgba(101,214,170,.48);background:linear-gradient(135deg,rgba(101,214,170,.13),#0b1821 62%); }
.help-center { width:min(1240px,calc(100vw - 34px));height:min(820px,calc(100vh - 34px));padding:0;border:1px solid rgba(166,195,204,.2);border-radius:13px;color:#aebdc1;background:#08151e;box-shadow:0 28px 90px rgba(0,0,0,.62);font-family:"Roboto",Arial,sans-serif; }
.help-center::backdrop { background:rgba(2,8,12,.78);backdrop-filter:blur(4px); }.help-center > form { height:100%;display:grid;grid-template-rows:76px minmax(0,1fr) 52px; }
.help-center > form > header { padding:0 20px;display:flex;align-items:center;justify-content:space-between;border-bottom:1px solid rgba(166,195,204,.11);background:linear-gradient(90deg,rgba(101,214,170,.055),transparent 55%); }
.help-center > form > header small,.help-center > form > header h3,.help-center > form > header p { display:block; }.help-center > form > header small { color:var(--ops-green);font-size:8.5px;letter-spacing:.7px; }.help-center > form > header h3 { margin:4px 0 0;color:#d8e2e4;font-size:17px; }.help-center > form > header p { margin:4px 0 0;color:#637c85;font-size:9.5px; }
.help-center > form > header > button { width:31px;height:31px;border:1px solid rgba(166,195,204,.14);border-radius:7px;color:#70868f;background:#0b1922;font-size:18px;cursor:pointer; }
.help-center-layout { min-height:0;display:grid;grid-template-columns:205px minmax(0,1fr); }.help-center-layout > aside { padding:14px 10px;border-right:1px solid rgba(166,195,204,.1);background:#091720; }
.help-center-layout > aside button { width:100%;min-height:41px;margin-bottom:5px;padding:0 11px;border:0;border-radius:7px;color:#718790;background:transparent;font:500 10px "Roboto",Arial,sans-serif;text-align:left;cursor:pointer; }
.help-center-layout > aside button:hover,.help-center-layout > aside button.active { color:#d4e0de;background:rgba(101,214,170,.075); }.help-center-layout > aside button.active { box-shadow:inset 2px 0 var(--ops-green); }
.help-center-layout > main { min-width:0;min-height:0;padding:14px 18px 24px;overflow-y:auto;scrollbar-width:thin;scrollbar-color:#29404b transparent; }
.help-search { position:sticky;z-index:3;top:-14px;height:39px;padding:0 11px;display:grid;grid-template-columns:17px minmax(0,1fr);gap:6px;align-items:center;border:1px solid rgba(166,195,204,.16);border-radius:8px;background:rgba(9,23,32,.98);box-shadow:0 8px 18px rgba(3,9,13,.24); }
.help-search span { color:var(--ops-green);font-size:15px; }.help-search input { width:100%;border:0;outline:0;color:#c7d4d7;background:transparent;font:500 10.5px "Roboto",Arial,sans-serif; }.help-search input::placeholder { color:#58717a; }
.help-section > header { margin:20px 0 14px; }.help-section > header small { color:#57cba5;font-size:8.5px;font-weight:700;letter-spacing:.7px; }.help-section > header h4 { margin:5px 0 0;color:#d6e1e3;font-size:18px; }.help-section > header p { max-width:760px;margin:6px 0 0;color:#748b93;font-size:10px;line-height:1.55; }
.help-start-grid,.help-steps { display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:9px; }.help-start-grid article,.help-steps article,.help-tool-card,.help-glossary article { padding:14px;border:1px solid rgba(166,195,204,.1);border-radius:8px;background:#0b1922; }
.help-start-grid article { display:grid;grid-template-columns:32px minmax(0,1fr);grid-template-rows:auto auto auto;column-gap:10px; }.help-start-grid article > span { grid-row:1/4;width:32px;height:32px;display:grid;place-items:center;border:1px solid rgba(101,214,170,.22);border-radius:7px;color:var(--ops-green);font-size:9px;font-weight:700; }
.help-start-grid strong,.help-steps strong { color:#c2d0d3;font-size:11px; }.help-start-grid p,.help-steps p,.help-tool-card p,.help-tool-card li,.help-glossary p { margin:5px 0 0;color:#6f8790;font-size:9.5px;line-height:1.5; }
.help-start-grid button,.help-tool-card button { width:max-content;margin-top:10px;padding:0;border:0;color:var(--ops-green);background:transparent;font:700 8.5px "Roboto",Arial,sans-serif;letter-spacing:.4px;cursor:pointer; }
.help-steps article { min-height:91px;position:relative;padding-left:48px; }.help-steps article > b { position:absolute;left:13px;top:14px;width:24px;height:24px;display:grid;place-items:center;border-radius:50%;color:#071018;background:var(--ops-green);font-size:9px; }
.help-warning { margin-top:11px;padding:11px 13px;display:grid;grid-template-columns:92px 1fr;gap:10px;border:1px solid rgba(240,189,77,.2);border-radius:8px;background:rgba(240,189,77,.045); }.help-warning strong { color:#e7c267;font-size:9.5px; }.help-warning span { color:#7e8b84;font-size:9.5px;line-height:1.45; }
.help-tool-grid { display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:9px; }.help-tool-card[hidden],.help-glossary article[hidden] { display:none!important; }.help-tool-card header { display:grid;grid-template-columns:28px 1fr;gap:9px;align-items:center; }.help-tool-card header > span { width:28px;height:28px;display:grid;place-items:center;border:1px solid rgba(101,214,170,.2);border-radius:6px;color:var(--ops-green);font-size:8.5px;font-weight:700; }.help-tool-card header small,.help-tool-card header strong { display:block; }.help-tool-card header small { color:#526d76;font-size:8px;text-transform:uppercase; }.help-tool-card header strong { margin-top:3px;color:#becdd0;font-size:10px; }.help-tool-card ol { margin:9px 0 0;padding-left:17px; }.help-tool-card li { margin-top:3px; }
.help-tool-card-rich { padding:0;overflow:hidden; }.help-tool-card-rich > figure { height:120px;position:relative;margin:0;overflow:hidden;border-bottom:1px solid rgba(166,195,204,.1);background:#07131b; }.help-tool-card-rich > figure img { width:100%;height:100%;display:block;object-fit:cover;object-position:top center;filter:brightness(.76) saturate(.92);transition:transform .25s ease,filter .25s ease; }.help-tool-card-rich:hover > figure img { transform:scale(1.025);filter:brightness(.92) saturate(1.02); }.help-tool-card-rich > figure figcaption { position:absolute;right:8px;top:8px;padding:4px 6px;border:1px solid rgba(101,214,170,.2);border-radius:4px;color:#77deb9;background:rgba(5,17,23,.88);font-size:7px;font-weight:700;letter-spacing:.45px; }.help-tool-card-rich > header { padding:11px 12px 7px; }.help-tool-card-rich > dl { margin:0;padding:0 12px; }.help-tool-card-rich > dl > div { padding:7px 0;display:grid;grid-template-columns:62px minmax(0,1fr);gap:8px;border-top:1px solid rgba(166,195,204,.07); }.help-tool-card-rich dt { color:#58737c;font-size:7.5px;font-weight:700;letter-spacing:.35px; }.help-tool-card-rich dd { margin:0;color:#788d94;font-size:8.8px;line-height:1.4; }.help-tool-card-rich > footer { min-height:39px;margin-top:8px;padding:0 12px;display:flex;align-items:center;justify-content:flex-end;gap:13px;border-top:1px solid rgba(166,195,204,.08); }.help-tool-card-rich > footer button { margin:0; }.help-tool-card-rich > footer button:last-child { padding:6px 9px;border:1px solid rgba(101,214,170,.23);border-radius:5px;background:rgba(101,214,170,.045); }
.help-glossary { columns:2;column-gap:9px; }.help-glossary article { margin:0 0 9px;break-inside:avoid; }.help-glossary strong { color:#bcd0cc;font-size:10.5px; }.help-search-empty { margin-top:14px;padding:22px;border:1px dashed rgba(166,195,204,.15);border-radius:8px;text-align:center; }.help-search-empty strong,.help-search-empty span { display:block; }.help-search-empty strong { color:#a1b2b6;font-size:11px; }.help-search-empty span { margin-top:5px;color:#607983;font-size:9.5px; }
.help-center > form > footer { padding:0 16px 0 20px;display:grid;grid-template-columns:auto 1fr auto;gap:12px;align-items:center;border-top:1px solid rgba(166,195,204,.1);background:#091720; }.help-center > form > footer span { color:#82979e;font-size:9px;font-weight:700; }.help-center > form > footer small { color:#536d76;font-size:8.5px; }.help-center > form > footer button { height:29px;padding:0 12px;border:1px solid rgba(101,214,170,.26);border-radius:6px;color:var(--ops-green);background:rgba(101,214,170,.06);font-size:8.5px;font-weight:700;cursor:pointer; }
.help-reopen-onboarding { width:max-content;margin-top:12px;padding:8px 10px;border:1px solid rgba(101,214,170,.25);border-radius:7px;color:#65d6aa;background:rgba(101,214,170,.055);font:800 8.5px Roboto,Arial,sans-serif;letter-spacing:.45px;cursor:pointer; }

/* Bienvenida de primer acceso: orienta sin interrumpir las siguientes sesiones. */
.xouba-entry-notice { width:min(690px,calc(100vw - 30px));max-width:none;padding:0;border:1px solid rgba(101,214,170,.27);border-radius:20px;color:#dce8e6;background:#07141d;box-shadow:0 36px 120px rgba(0,0,0,.7);font-family:Roboto,"Helvetica Neue",Arial,sans-serif;overflow:hidden; }
.xouba-entry-notice::backdrop { background:rgba(2,8,12,.84);backdrop-filter:blur(11px) saturate(.72); }
.entry-notice-shell { background:radial-gradient(circle at 88% 8%,rgba(101,214,170,.16),transparent 34%),linear-gradient(145deg,#0a1c26,#07131c 70%); }
.entry-notice-shell > header { min-height:76px;padding:0 22px;display:flex;align-items:center;justify-content:space-between;gap:18px;border-bottom:1px solid rgba(166,195,204,.1); }
.entry-notice-shell > header > div { display:flex;align-items:center;gap:12px; }.entry-notice-shell > header img { width:44px;height:44px;object-fit:contain;filter:drop-shadow(0 8px 17px rgba(37,197,152,.24)); }.entry-notice-shell > header small,.entry-notice-shell > header strong { display:block; }.entry-notice-shell > header small { color:#65d6aa;font-size:8px;font-weight:800;letter-spacing:1.15px; }.entry-notice-shell > header strong { margin-top:4px;color:#d9e6e3;font-size:13px; }.entry-notice-shell > header > b { padding:7px 10px;border:1px solid rgba(101,214,170,.22);border-radius:99px;color:#65d6aa;background:rgba(101,214,170,.055);font-size:8px;letter-spacing:.7px; }
.entry-notice-shell > main { padding:32px 34px 30px;display:grid;grid-template-columns:78px minmax(0,1fr);gap:24px;align-items:start; }.entry-notice-code { width:68px;height:68px;display:grid;place-items:center;border:1px solid rgba(101,214,170,.26);border-radius:19px;color:#65d6aa;background:linear-gradient(145deg,rgba(101,214,170,.13),rgba(101,214,170,.035));font-size:9px;font-weight:800;letter-spacing:.8px;box-shadow:inset 0 1px rgba(255,255,255,.045); }.entry-notice-shell > main small { color:#65d6aa;font-size:8px;font-weight:800;letter-spacing:1px; }.entry-notice-shell > main h2 { margin:8px 0 0;color:#eef6f3;font-size:29px;font-weight:500;letter-spacing:-.5px; }.entry-notice-shell > main p { margin:13px 0 0;max-width:520px;color:#91a6a9;font-size:13px;line-height:1.65; }.entry-notice-shell > main aside { margin-top:18px;padding:11px 13px;display:flex;align-items:center;gap:10px;border:1px solid rgba(166,195,204,.09);border-radius:10px;color:#667f85;background:rgba(5,18,26,.55);font-size:9.5px;line-height:1.45; }.entry-notice-shell > main aside i { width:7px;height:7px;flex:0 0 auto;border-radius:50%;background:#65d6aa;box-shadow:0 0 9px rgba(101,214,170,.56); }
.entry-notice-shell > main .entry-notice-contact { margin-top:14px;color:#708a8f;font-size:10px;line-height:1.45; }.entry-notice-contact a { border-radius:3px;color:#9ddfc7;font-weight:700;text-decoration:none; }.entry-notice-contact a:hover,.entry-notice-contact a:focus-visible { color:#c7f3e2;text-decoration:underline; }.entry-notice-contact a:focus-visible { outline:2px solid rgba(101,214,170,.62);outline-offset:3px; }
.entry-notice-shell > footer { min-height:68px;padding:0 22px;display:flex;align-items:center;justify-content:space-between;gap:20px;border-top:1px solid rgba(166,195,204,.1);background:rgba(7,21,29,.78); }.entry-notice-shell > footer > span { color:#5f7880;font-size:9px; }.entry-notice-shell > footer button { min-height:39px;padding:0 15px;border:1px solid rgba(101,214,170,.38);border-radius:10px;color:#082018;background:#65d6aa;font:800 8.5px Roboto,Arial,sans-serif;letter-spacing:.45px;cursor:pointer;box-shadow:0 8px 20px rgba(39,172,133,.14); }.entry-notice-shell > footer button:hover { background:#83e5be; }.entry-notice-shell > footer button:focus-visible { outline:2px solid #baf2dd;outline-offset:3px; }.entry-notice-shell > footer button b { margin-left:8px;font-size:13px; }
[data-theme="light"] .xouba-entry-notice { color:#17352f;background:#f5faf8;border-color:rgba(28,119,93,.2);box-shadow:0 34px 100px rgba(30,58,51,.24); }[data-theme="light"] .entry-notice-shell { background:radial-gradient(circle at 88% 8%,rgba(34,178,134,.12),transparent 34%),linear-gradient(145deg,#fbfdfc,#eef6f3 72%); }[data-theme="light"] .entry-notice-shell > header strong,[data-theme="light"] .entry-notice-shell > main h2 { color:#17352f; }[data-theme="light"] .entry-notice-shell > main p { color:#59736d; }[data-theme="light"] .entry-notice-contact a { color:#237a61; }[data-theme="light"] .entry-notice-shell > main aside { color:#6d837e;background:rgba(255,255,255,.7); }[data-theme="light"] .entry-notice-shell > footer { background:rgba(244,249,247,.88); }
.xouba-onboarding { width:min(1120px,calc(100vw - 34px));height:min(720px,calc(100vh - 34px));max-width:none;max-height:none;padding:0;border:1px solid rgba(101,214,170,.24);border-radius:22px;color:#dce8e6;background:#07141d;box-shadow:0 36px 120px rgba(0,0,0,.68);font-family:Roboto,"Helvetica Neue",Arial,sans-serif;overflow:hidden; }
.xouba-onboarding::backdrop { background:rgba(2,8,12,.8);backdrop-filter:blur(10px) saturate(.76); }
.onboarding-shell { height:100%;display:grid;grid-template-rows:76px auto minmax(0,1fr) 66px;background:radial-gradient(circle at 84% 12%,rgba(101,214,170,.14),transparent 34%),radial-gradient(circle at 9% 78%,rgba(76,138,211,.09),transparent 30%),linear-gradient(145deg,#091a24,#07131c 64%); }
.onboarding-shell :is(h3,p) { margin:0; }.onboarding-shell > header { padding:0 24px;display:grid;grid-template-columns:minmax(0,1fr) auto 34px;gap:16px;align-items:center;border-bottom:1px solid rgba(166,195,204,.1); }
.onboarding-brand { display:flex;align-items:center;gap:12px; }.onboarding-brand img { width:45px;height:45px;object-fit:contain;filter:drop-shadow(0 8px 16px rgba(37,197,152,.24)); }.onboarding-brand small,.onboarding-brand strong { display:block; }.onboarding-brand small { color:#65d6aa;font-size:8px;font-weight:800;letter-spacing:1.15px; }.onboarding-brand strong { margin-top:4px;color:#d9e6e3;font-size:13px;font-weight:600; }
.onboarding-shell > header > span { padding:7px 10px;border:1px solid rgba(101,214,170,.15);border-radius:99px;color:#7eb39f;background:rgba(101,214,170,.045);font-size:8px;font-weight:800;letter-spacing:.55px; }.onboarding-shell > header > button { width:34px;height:34px;border:1px solid rgba(166,195,204,.13);border-radius:10px;color:#80949a;background:#0b1c25;font-size:20px;cursor:pointer; }
.onboarding-hero { padding:27px 32px 22px;display:grid;grid-template-columns:minmax(360px,.92fr) minmax(300px,.78fr);gap:42px;align-items:end;border-bottom:1px solid rgba(166,195,204,.075); }.onboarding-hero > div > p { color:#6edbb5;font-size:8.5px;font-weight:800;letter-spacing:1.1px; }.onboarding-hero h3 { margin-top:8px;color:#ecf4f1;font-size:34px;font-weight:400;line-height:1.02;letter-spacing:-1px; }.onboarding-hero h3 span { color:#65d6aa; }.onboarding-hero > p { max-width:520px;color:#81959a;font-size:12px;line-height:1.62; }
.onboarding-layout { min-height:0;padding:20px 26px 22px;display:grid;grid-template-columns:minmax(0,1.08fr) minmax(340px,.92fr);gap:18px; }.onboarding-pillars { display:grid;gap:9px; }.onboarding-pillars > button { min-width:0;min-height:85px;padding:13px 15px;display:grid;grid-template-columns:42px minmax(0,1fr) 22px;gap:13px;align-items:center;border:1px solid rgba(166,195,204,.105);border-radius:13px;color:inherit;background:linear-gradient(110deg,rgba(13,35,46,.95),rgba(9,27,37,.72));text-align:left;cursor:pointer;transition:transform .18s ease,border-color .18s ease,background .18s ease; }.onboarding-pillars > button:hover { transform:translateX(4px);border-color:rgba(101,214,170,.38);background:linear-gradient(110deg,rgba(101,214,170,.11),rgba(9,27,37,.8)); }.onboarding-pillars > button > span { width:42px;height:42px;display:grid;place-items:center;border:1px solid rgba(101,214,170,.25);border-radius:12px;color:#65d6aa;background:rgba(101,214,170,.065);font-size:10px;font-weight:800; }.onboarding-pillars > button small,.onboarding-pillars > button strong { display:block; }.onboarding-pillars > button small { color:#597780;font-size:7.5px;font-weight:800;letter-spacing:.65px; }.onboarding-pillars > button strong { margin-top:4px;color:#d1dfdc;font-size:13px; }.onboarding-pillars > button p { margin-top:4px;color:#70888e;font-size:9.5px;line-height:1.4; }.onboarding-pillars > button > b { color:#65d6aa;font-size:17px;font-weight:400; }
.onboarding-guide { min-width:0;padding:15px;border:1px solid rgba(166,195,204,.095);border-radius:13px;background:rgba(6,20,28,.58); }.onboarding-guide > header { min-height:43px;padding:0 4px 10px;border-bottom:1px solid rgba(166,195,204,.08); }.onboarding-guide > header small,.onboarding-guide > header strong { display:block; }.onboarding-guide > header small { color:#65d6aa;font-size:7.5px;font-weight:800;letter-spacing:.7px; }.onboarding-guide > header strong { margin-top:4px;color:#c7d5d3;font-size:12px; }.onboarding-guide > article,.onboarding-guide > button { width:100%;min-width:0;min-height:72px;padding:11px 4px;display:grid;grid-template-columns:44px minmax(0,1fr) auto;gap:11px;align-items:center;border:0;border-bottom:1px solid rgba(166,195,204,.065);color:inherit;background:transparent;text-align:left; }.onboarding-guide > button { cursor:pointer; }.onboarding-guide > button:hover { background:rgba(101,214,170,.035); }.onboarding-guide b,.onboarding-guide p { display:block; }.onboarding-guide b { color:#aebfbe;font-size:8.5px;letter-spacing:.35px; }.onboarding-guide p { margin-top:5px;color:#657e85;font-size:9px;line-height:1.4; }.onboarding-guide em { color:#65d6aa;font-size:7.5px;font-style:normal;font-weight:800; }
.guide-nav { width:42px;height:37px;display:flex;align-items:center;justify-content:center;gap:2px;border:1px solid rgba(101,214,170,.15);border-radius:9px;background:#091b24; }.guide-nav i { color:#65d6aa;font-size:6.5px;font-style:normal;font-weight:800; }.guide-profile,.guide-help { width:37px;height:37px;position:relative;display:grid;place-items:center;border:1px solid rgba(101,214,170,.2);border-radius:11px;color:#65d6aa;background:rgba(101,214,170,.055);font-size:9px;font-weight:800; }.guide-profile i { position:absolute;right:3px;bottom:3px;width:5px;height:5px;border-radius:50%;background:#65d6aa;box-shadow:0 0 7px #65d6aa; }.guide-help { font-size:14px; }
.onboarding-shell > footer { padding:0 24px;display:flex;align-items:center;justify-content:space-between;gap:20px;border-top:1px solid rgba(166,195,204,.1);background:rgba(8,23,32,.82); }.onboarding-shell > footer > div { min-width:0;display:flex;align-items:center;gap:9px;color:#637c83;font-size:9px; }.onboarding-shell > footer > div > i { width:7px;height:7px;flex:0 0 auto;border-radius:50%;background:#65d6aa;box-shadow:0 0 9px rgba(101,214,170,.65); }.onboarding-shell > footer > button { min-height:37px;padding:0 14px;border:1px solid rgba(101,214,170,.36);border-radius:9px;color:#082018;background:#65d6aa;font:800 8.5px Roboto,Arial,sans-serif;letter-spacing:.45px;cursor:pointer;box-shadow:0 8px 20px rgba(39,172,133,.13); }.onboarding-shell > footer > button b { margin-left:8px;font-size:13px; }
[data-theme="light"] .xouba-onboarding { color:#17352f;background:#f5faf8;border-color:rgba(28,119,93,.2);box-shadow:0 34px 100px rgba(30,58,51,.24); }[data-theme="light"] .onboarding-shell { background:radial-gradient(circle at 84% 12%,rgba(34,178,134,.12),transparent 34%),linear-gradient(145deg,#fbfdfc,#eef6f3 70%); }[data-theme="light"] .onboarding-brand strong,[data-theme="light"] .onboarding-hero h3 { color:#17352f; }[data-theme="light"] .onboarding-hero > p,[data-theme="light"] .onboarding-pillars > button p,[data-theme="light"] .onboarding-guide p,[data-theme="light"] .onboarding-shell > footer > div { color:#617a74; }[data-theme="light"] .onboarding-pillars > button,[data-theme="light"] .onboarding-guide { background:rgba(255,255,255,.78); }[data-theme="light"] .onboarding-pillars > button strong,[data-theme="light"] .onboarding-guide :is(b,strong) { color:#294b43; }
@media (max-width:760px) { .top-help div{display:none}.help-center{width:calc(100vw - 14px);height:calc(100vh - 14px)}.help-center-layout{grid-template-columns:1fr}.help-center-layout>aside{padding:7px;display:flex;gap:4px;overflow-x:auto;border-right:0;border-bottom:1px solid rgba(166,195,204,.1)}.help-center-layout>aside button{min-width:122px;margin:0}.help-start-grid,.help-steps,.help-tool-grid{grid-template-columns:1fr}.help-glossary{columns:1}.help-center>form>footer small{display:none} }
@media (max-width:760px) { .xouba-entry-notice{width:calc(100vw - 14px);border-radius:15px}.entry-notice-shell>header{min-height:66px;padding:0 15px}.entry-notice-shell>header>b{display:none}.entry-notice-shell>main{padding:24px 18px;display:block}.entry-notice-code{width:48px;height:48px;border-radius:14px;margin-bottom:18px}.entry-notice-shell>main h2{font-size:25px}.entry-notice-shell>footer{padding:12px 15px;display:block}.entry-notice-shell>footer>span{display:none}.entry-notice-shell>footer button{width:100%}.xouba-onboarding{width:calc(100vw - 14px);height:calc(100vh - 14px);border-radius:15px}.onboarding-shell{grid-template-rows:64px auto minmax(0,1fr) 62px}.onboarding-shell>header{padding:0 14px;grid-template-columns:1fr 32px}.onboarding-shell>header>span{display:none}.onboarding-brand img{width:38px;height:38px}.onboarding-hero{padding:18px;display:block}.onboarding-hero h3{font-size:27px}.onboarding-hero>p{margin-top:13px;font-size:10px}.onboarding-layout{padding:12px 14px;display:block;overflow-y:auto}.onboarding-pillars>button{min-height:76px}.onboarding-guide{margin-top:12px}.onboarding-shell>footer{padding:0 14px}.onboarding-shell>footer>div{display:none}.onboarding-shell>footer>button{width:100%} }

/* Legibilidad y adaptación de las herramientas de análisis. */
body.cam-platform #view-analysis { font-family:Roboto,"Helvetica Neue",Arial,sans-serif; }
body.cam-platform #view-analysis .analysis-rail { grid-template-rows:58px 50px minmax(0,1fr); }
body.cam-platform #view-analysis .analysis-tool { min-height:44px; padding:6px 7px; align-items:center; }
body.cam-platform #view-analysis .analysis-tool strong { display:-webkit-box; overflow:hidden; font-size:10.5px; font-weight:500; line-height:1.3; text-overflow:ellipsis; white-space:normal; overflow-wrap:anywhere; -webkit-box-orient:vertical; -webkit-line-clamp:2; }
body.cam-platform #view-analysis .analysis-group { margin-top:15px; font-size:9.5px; }
body.cam-platform #view-analysis :is(.analysis-heading,.congestion-heading) { height:auto; min-height:54px; gap:14px; }
body.cam-platform #view-analysis :is(.analysis-heading,.congestion-heading) > div:first-child { min-width:0; }
body.cam-platform #view-analysis :is(.analysis-heading,.congestion-heading) h2 { font:600 19px/1.18 Roboto,"Helvetica Neue",Arial,sans-serif; overflow-wrap:anywhere; }
body.cam-platform #view-analysis :is(.analysis-heading,.congestion-heading) :is(p,small) { font-size:9.5px; line-height:1.4; }
body.cam-platform #view-analysis .congestion-source { min-width:230px; max-width:42%; height:auto; min-height:40px; }
body.cam-platform #view-analysis .congestion-source :is(strong,span,small),body.cam-platform #view-analysis .analysis-source :is(strong,span,small) { font-size:9.5px; line-height:1.35; white-space:normal; overflow-wrap:anywhere; }
body.cam-platform #view-analysis :is(.analysis-kpis,.congestion-kpis,.contract-matrix-kpis,.contract-case-kpis,.corridor-monitor-kpis,.event-profile-kpis,.forecast-kpis,.scenario-kpis) article { min-width:0; min-height:76px; padding:11px 12px; }
body.cam-platform #view-analysis :is(.analysis-kpis,.congestion-kpis,.contract-matrix-kpis,.contract-case-kpis,.corridor-monitor-kpis,.event-profile-kpis,.forecast-kpis,.scenario-kpis) small { font-size:9.5px; line-height:1.25; overflow-wrap:anywhere; }
body.cam-platform #view-analysis :is(.analysis-kpis,.congestion-kpis,.contract-matrix-kpis,.contract-case-kpis,.corridor-monitor-kpis,.event-profile-kpis,.forecast-kpis,.scenario-kpis) span { font-size:9.5px; line-height:1.3; overflow-wrap:anywhere; }
body.cam-platform #view-analysis :is(.contract-matrix-workspace,.contract-case-workspace,.corridor-monitor-workspace,.congestion-workspace,.forecast-workspace,.scenario-workspace,.day-type-workspace,.bottleneck-workspace,.works-workspace,.corridor-speed-workspace,.performance-workspace,.event-profile-workspace,.speed-alert-workspace,.itinerary-workspace,.od-workspace,.count-workspace) article > header { height:auto; min-height:52px; padding:8px 11px; gap:10px; flex-wrap:wrap; }
body.cam-platform #view-analysis :is(.contract-matrix-workspace,.contract-case-workspace,.corridor-monitor-workspace,.congestion-workspace,.forecast-workspace,.scenario-workspace,.day-type-workspace,.bottleneck-workspace,.works-workspace,.corridor-speed-workspace,.performance-workspace,.event-profile-workspace,.speed-alert-workspace,.itinerary-workspace,.od-workspace,.count-workspace) article > header > div { min-width:0; }
body.cam-platform #view-analysis :is(.contract-matrix-workspace,.contract-case-workspace,.corridor-monitor-workspace,.congestion-workspace,.forecast-workspace,.scenario-workspace,.day-type-workspace,.bottleneck-workspace,.works-workspace,.corridor-speed-workspace,.performance-workspace,.event-profile-workspace,.speed-alert-workspace,.itinerary-workspace,.od-workspace,.count-workspace) article > header small { font-size:9px; line-height:1.3; }
body.cam-platform #view-analysis :is(.contract-matrix-workspace,.contract-case-workspace,.corridor-monitor-workspace,.congestion-workspace,.forecast-workspace,.scenario-workspace,.day-type-workspace,.bottleneck-workspace,.works-workspace,.corridor-speed-workspace,.performance-workspace,.event-profile-workspace,.speed-alert-workspace,.itinerary-workspace,.od-workspace,.count-workspace) article > header h3 { font-size:11px; line-height:1.3; overflow-wrap:anywhere; }
body.cam-platform #view-analysis :is(.contract-matrix-workspace,.contract-case-workspace,.corridor-monitor-workspace,.congestion-workspace,.forecast-workspace,.scenario-workspace,.day-type-workspace,.bottleneck-workspace,.works-workspace,.corridor-speed-workspace,.performance-workspace,.event-profile-workspace,.speed-alert-workspace,.itinerary-workspace,.od-workspace,.count-workspace) article > header > span { font-size:9.5px; line-height:1.3; white-space:normal; }
body.cam-platform #view-analysis :is(.corridor-monitor-truth,.event-profile-truth,.forecast-truth,.scenario-status,.itinerary-method,.performance-method,.contract-matrix-foot) :is(p,span,strong,small) { font-size:9.5px; line-height:1.45; }
body.cam-platform #view-analysis :is(.contract-matrix-toolbar,.contract-case-workspace,.corridor-monitor-query,.congestion-query,.forecast-query,.scenario-query,.day-type-query,.bottleneck-query,.works-query,.performance-query,.event-profile-query,.speed-alert-workspace,.itinerary-query,.od-query,.count-query) :is(label,fieldset,button) { min-width:0; }
body.cam-platform #view-analysis :is(.contract-matrix-toolbar,.corridor-monitor-query,.congestion-query,.forecast-query,.scenario-query,.day-type-query,.bottleneck-query,.works-query,.performance-query,.event-profile-query,.itinerary-query,.od-query,.count-query) label > span { font-size:9.5px; line-height:1.25; }
body.cam-platform #view-analysis :is(.contract-matrix-toolbar,.corridor-monitor-query,.congestion-query,.forecast-query,.scenario-query,.day-type-query,.bottleneck-query,.works-query,.performance-query,.event-profile-query,.itinerary-query,.od-query,.count-query) :is(input,select) { font-size:10.5px; }
body.cam-platform #view-analysis :is(.contract-matrix-toolbar,.corridor-monitor-query,.congestion-query,.forecast-query,.scenario-query,.day-type-query,.bottleneck-query,.works-query,.performance-query,.event-profile-query,.itinerary-query,.od-query,.count-query) button :is(span,strong) { font-size:9.5px; }
body.cam-platform #view-analysis :is(.contract-matrix-toolbar,.corridor-monitor-query,.congestion-query,.forecast-query,.scenario-query,.day-type-query,.bottleneck-query,.works-query,.performance-query,.event-profile-query,.itinerary-query,.od-query,.count-query) button small { font-size:9px; }
body.cam-platform #view-analysis :is(.contract-data-card,.contract-case-panel,.forecast-method-card,.scenario-diagnostic-card,.corridor-monitor-context-card,.event-profile-risk-card) :is(p,li,dd,dt,strong,span,small) { overflow-wrap:anywhere; }

/* Visor operativo despejado: el mapa manda y los controles persistentes forman un HUD de borde. */
body.cam-platform #view-live .ops-kpis {
  left:auto;
  right:10px;
  top:10px;
  width:min(720px,calc(100% - 20px));
  height:46px;
  grid-template-columns:145px repeat(4,minmax(92px,1fr));
  border-radius:8px;
  background:rgba(8,20,29,.88);
  box-shadow:0 7px 20px rgba(0,0,0,.2);
}
body.cam-platform #view-live .ops-kpis article { padding:5px 10px; }
body.cam-platform #view-live .ops-kpis small { font-size:7.5px; letter-spacing:.45px; }
body.cam-platform #view-live .ops-kpis strong { margin-top:3px; font-size:13px; }
body.cam-platform #view-live .ops-kpis article:not(.source) > span,
body.cam-platform #view-live .ops-kpis .source > small,
body.cam-platform #view-live .ops-kpis .source > span { display:none; }
body.cam-platform #view-live .ops-kpi-mode { margin-top:0; }
body.cam-platform #view-live .ops-kpi-mode select { height:27px; font-size:9px; }

body.cam-platform #view-live .ops-panel-handle { top:66px; height:30px; padding:0 9px; background:rgba(8,20,29,.9); }
body.cam-platform #view-live .ops-panel-handle-layers { left:10px; }
body.cam-platform #view-live .ops-panel-handle-filters { right:10px; }
body.cam-platform #view-live .ops-layers { left:10px; top:66px; bottom:52px; width:270px; }
body.cam-platform #view-live .ops-query { right:10px; top:66px; width:min(980px,calc(100% - 310px)); }

body.cam-platform #view-live .ops-legend {
  left:10px;
  bottom:10px;
  height:30px;
  padding:0 9px;
  gap:5px;
  border-radius:7px;
  background:rgba(8,20,29,.88);
  box-shadow:0 6px 18px rgba(0,0,0,.2);
}
body.cam-platform #view-live .ops-legend > span { font-size:7.5px; }
body.cam-platform #view-live .ops-legend i { width:15px; }
body.cam-platform #view-live .ops-legend small { font-size:7.5px; }

body.cam-platform #view-live .ops-time {
  left:auto;
  right:10px;
  bottom:10px;
  width:min(570px,calc(100% - 370px));
  height:36px;
  padding:0 10px;
  grid-template-columns:8px minmax(145px,.8fr) minmax(220px,1.2fr) minmax(95px,.58fr);
  gap:8px;
  transform:none;
  border-radius:7px;
  background:rgba(8,20,29,.88);
  box-shadow:0 6px 18px rgba(0,0,0,.2);
}
body.cam-platform #view-live .ops-time small { display:none; }
body.cam-platform #view-live .ops-time strong { margin-top:0; font-size:8px; white-space:nowrap; overflow:hidden; text-overflow:ellipsis; }
body.cam-platform #view-live .ops-time-coverage { padding-left:9px; }
body.cam-platform #view-live .ops-time time { font-size:8px; white-space:nowrap; }

body.cam-platform #view-live #live-temporal-form[hidden] ~ .ops-selection { top:66px; }
body.cam-platform #view-live #live-temporal-form:not([hidden]) ~ .ops-selection { top:146px; }
body.cam-platform #view-live #live-temporal-form:has(.ops-query-pane.period:not([hidden])) ~ .ops-selection { top:190px; }

@media(max-width:1050px){
  body.cam-platform #view-live .ops-kpis { left:10px; right:10px; width:auto; grid-template-columns:130px repeat(4,minmax(88px,1fr)); overflow-x:auto; }
  body.cam-platform #view-live .ops-query { width:calc(100% - 20px); }
  body.cam-platform #view-live .ops-time { width:min(520px,calc(100% - 300px)); grid-template-columns:8px minmax(125px,.8fr) minmax(180px,1.2fr) 90px; }
  body.cam-platform #view-live .ops-legend > span { display:none; }
}
@media(max-width:720px){
  body.cam-platform #view-live .ops-kpis { grid-template-columns:118px repeat(4,minmax(82px,1fr)); }
  body.cam-platform #view-live .ops-kpis article { padding:5px 8px; }
  body.cam-platform #view-live .ops-kpis small { font-size:7px; }
  body.cam-platform #view-live .ops-kpis strong { font-size:12px; }
  body.cam-platform #view-live .ops-layers { width:min(270px,calc(100% - 20px)); }
  body.cam-platform #view-live .ops-legend { bottom:52px; }
  body.cam-platform #view-live .ops-time { left:10px; right:10px; width:auto; grid-template-columns:8px minmax(130px,1fr) minmax(95px,.65fr); }
  body.cam-platform #view-live .ops-time-coverage { display:none; }
}

@media(max-width:1350px){
  body.cam-platform #view-analysis :is(.corridor-monitor-query,.congestion-query,.forecast-query,.scenario-query,.day-type-query,.bottleneck-query,.works-query,.performance-query,.event-profile-query,.itinerary-query,.od-query,.count-query) { grid-template-columns:repeat(4,minmax(112px,1fr)); }
  body.cam-platform #view-analysis :is(.corridor-monitor-query,.congestion-query,.forecast-query,.scenario-query,.day-type-query,.bottleneck-query,.works-query,.performance-query,.event-profile-query,.itinerary-query,.od-query,.count-query) :is(.road,.wide,.project,.baseline,.metric,.congestion-run) { grid-column:span 2; }
  body.cam-platform #view-analysis.analysis-view { grid-template-columns:228px minmax(0,1fr); }
  body.cam-platform #view-analysis.analysis-view.analysis-rail-collapsed { grid-template-columns:minmax(0,1fr); }
}
@media(max-width:820px){
  body.cam-platform #view-analysis :is(.corridor-monitor-query,.congestion-query,.forecast-query,.scenario-query,.day-type-query,.bottleneck-query,.works-query,.performance-query,.event-profile-query,.itinerary-query,.od-query,.count-query) { grid-template-columns:repeat(2,minmax(105px,1fr)); }
  body.cam-platform #view-analysis :is(.analysis-heading,.congestion-heading) { align-items:flex-start; flex-direction:column; }
  body.cam-platform #view-analysis .congestion-source { width:100%; max-width:none; }
}

/* Informe PDF/impresión: composición A4 apaisada, clara y auditable. */
@page { size:A4 landscape; margin:11mm 12mm 12mm; }
@media print {
  html,body,body.cam-platform { color:#223842 !important; background:#fff !important; font-family:Roboto,"Helvetica Neue",Arial,sans-serif !important; }
  body.cam-platform #view-analysis,body.cam-platform .analysis-main,body.cam-platform .analysis-content,body.cam-platform :is(.contract-matrix-workspace,.contract-case-workspace,.corridor-monitor-workspace,.congestion-workspace,.forecast-workspace,.scenario-workspace,.day-type-workspace,.bottleneck-workspace,.works-workspace,.corridor-speed-workspace,.performance-workspace,.event-profile-workspace,.speed-alert-workspace,.itinerary-workspace,.od-workspace,.count-workspace,.network-state-workspace) { color:#223842 !important; background:#fff !important; }
  body.cam-platform .analysis-print-cover { margin:0 0 7mm !important; padding:0 0 5mm !important; border:0 !important; color:#17313d !important; }
  body.cam-platform .analysis-print-cover > header { min-height:19mm !important; margin:0 0 5mm; padding:4mm 5mm; border-radius:3mm; color:#fff; background:linear-gradient(105deg,#0b2b3a 0%,#124b55 62%,#17735e 100%) !important; }
  body.cam-platform .analysis-print-cover .brand-mark { width:10mm; height:10mm; object-fit:contain; filter:none; }
  body.cam-platform .analysis-print-cover header strong { color:#fff !important; font-size:17px; }
  body.cam-platform .analysis-print-cover header small { color:#b9ded6 !important; font-size:8px; }
  body.cam-platform .analysis-print-cover time { color:#d7e9e5 !important; font-size:9px; }
  body.cam-platform .analysis-print-meta { display:flex; gap:2mm; }
  body.cam-platform .analysis-print-meta span { padding:1.4mm 2.2mm; border:1px solid #b9d4d0; border-radius:99px; color:#315963 !important; background:#f0f8f6 !important; font-size:7px; font-weight:700; letter-spacing:.45px; }
  body.cam-platform .analysis-print-cover h1 { margin:4mm 0 1.5mm !important; color:#102f3c !important; font-size:26px !important; line-height:1.15; }
  body.cam-platform .analysis-print-cover > p { max-width:245mm; color:#506b75 !important; font-size:9px !important; line-height:1.45; }
  body.cam-platform .analysis-print-method { margin-top:3mm; padding:2.5mm 3mm; display:grid; grid-template-columns:32mm 1fr; gap:3mm; align-items:start; border-left:1.2mm solid #58c79f; border-radius:1.5mm; background:#f3f8f8 !important; }
  body.cam-platform .analysis-print-method small { color:#527078 !important; font-size:7px; font-weight:700; letter-spacing:.45px; }
  body.cam-platform .analysis-print-method strong { color:#29444e !important; font-size:8.5px; font-weight:500; line-height:1.45; }
  body.cam-platform .analysis-print-cover > div > h2 { margin:4mm 0 2mm !important; color:#315d61 !important; font-size:8px !important; }
  body.cam-platform .analysis-print-filters { grid-template-columns:repeat(4,minmax(0,1fr)); gap:2mm; }
  body.cam-platform .analysis-print-filters article { min-height:12mm; padding:2.5mm 3mm; border:1px solid #d5e2e5 !important; border-radius:2mm; background:#fff !important; box-shadow:0 .6mm 2mm rgba(22,54,64,.045); }
  body.cam-platform .analysis-print-filters small { color:#698087 !important; font-size:7px !important; }
  body.cam-platform .analysis-print-filters strong { color:#213d48 !important; font-size:9px !important; overflow-wrap:anywhere; }
  body.cam-platform .analysis-print-summary { display:grid; grid-template-columns:repeat(6,minmax(0,1fr)); gap:2mm; }
  body.cam-platform .analysis-print-summary article { min-height:18mm; padding:2.6mm 3mm; border:1px solid #d4e2e4 !important; border-top:1.1mm solid #58c79f !important; border-radius:2mm; background:#f9fbfb !important; }
  body.cam-platform .analysis-print-summary small,body.cam-platform .analysis-print-summary strong,body.cam-platform .analysis-print-summary span { display:block; }
  body.cam-platform .analysis-print-summary small { color:#647c84 !important; font-size:7px; line-height:1.25; }
  body.cam-platform .analysis-print-summary strong { margin-top:2mm; color:#113b45 !important; font-size:15px; line-height:1.05; }
  body.cam-platform .analysis-print-summary span { margin-top:1.4mm; color:#71868d !important; font-size:7px; line-height:1.3; }
  body.cam-platform .analysis-print-cover > footer { margin-top:4mm; padding-top:2.5mm; display:flex; justify-content:space-between; gap:8mm; border-top:1px solid #dbe6e8; color:#6c8187; font-size:7px; }
  body.cam-platform .analysis-print-cover > footer strong { color:#4d666e; font-weight:500; text-align:right; }
  body.cam-platform :is(.analysis-heading,.congestion-heading) { display:none !important; }
  body.cam-platform .analysis-main :is(article,.analysis-panel,.contract-matrix-card,.contract-case-panel) { color:#263e48 !important; border-color:#d3dfe2 !important; background:#fff !important; box-shadow:none !important; }
  body.cam-platform .analysis-main article > header { border-color:#dbe5e7 !important; background:#f5f8f9 !important; }
  body.cam-platform .analysis-main :is(h2,h3,strong,b) { color:#173743 !important; }
  body.cam-platform .analysis-main :is(p,small,span,li,dt,dd,td,th) { color:#536b74 !important; }
  body.cam-platform .analysis-main :is(.analysis-kpis,.congestion-kpis,.contract-matrix-kpis,.contract-case-kpis,.corridor-monitor-kpis,.event-profile-kpis,.forecast-kpis,.scenario-kpis) article { border-top:1mm solid #58c79f !important; background:#f9fbfb !important; }
  body.cam-platform .analysis-main :is(.analysis-kpis,.congestion-kpis,.contract-matrix-kpis,.contract-case-kpis,.corridor-monitor-kpis,.event-profile-kpis,.forecast-kpis,.scenario-kpis) strong { color:#123d47 !important; }
  body.cam-platform .analysis-main canvas { max-width:100% !important; background:#fff !important; }
  body.cam-platform .analysis-main canvas[data-print-snapshot="ready"] { display:none !important; }
  body.cam-platform .analysis-main .analysis-print-chart-image { width:100%;max-width:100%;max-height:132mm;display:block !important;object-fit:contain;border:1px solid #d7e3e5;border-radius:2mm;background:#071018;break-inside:avoid;page-break-inside:avoid; }
  body.cam-platform .analysis-main .analysis-png-button,body.cam-platform .analysis-main .analysis-fullscreen-button { display:none !important; }
  body.cam-platform .analysis-main :is(.congestion-loading,.congestion-tooltip,.count-tooltip,.road-profile-tooltip,.event-profile-tooltip,.forecast-tooltip,.scenario-tooltip,.network-state-tooltip) { display:none !important; }
  body.cam-platform .analysis-main article,body.cam-platform .analysis-main canvas,body.cam-platform .analysis-main :is(.analysis-kpis,.congestion-kpis,.contract-matrix-kpis,.contract-case-kpis,.corridor-monitor-kpis,.event-profile-kpis,.forecast-kpis,.scenario-kpis) { break-inside:avoid; page-break-inside:avoid; }
  body.cam-platform .contract-matrix-card table { color:#334d57 !important; background:#fff !important; }
  body.cam-platform .contract-matrix-card th { color:#fff !important; background:#17475b !important; }
  body.cam-platform .contract-matrix-card td { color:#415b64 !important; background:#fff !important; }
}

body.cam-platform #view-analysis .network-state-chart-card>header>.network-state-chart-legend{display:flex;align-items:center;justify-content:flex-end;flex-wrap:wrap;gap:8px}
body.cam-platform #view-analysis .network-state-chart-card>header>.network-state-chart-legend span{display:inline-flex;align-items:center;gap:5px;white-space:nowrap}

@media(max-width:900px){
  body.cam-platform .top-municipality-search{width:min(238px,27vw);margin-left:12px}
  body.cam-platform .top-municipality-search label small{display:none}
  .analysis-fullscreen-button{min-width:31px;width:31px;padding:0}.analysis-fullscreen-button strong{display:none}
}
@media(max-width:640px){
  body.cam-platform .top-municipality-search{min-width:0;width:auto;flex:1;margin-left:8px}
  body.cam-platform .top-municipality-search label{grid-template-columns:16px minmax(0,1fr);padding:0 6px}
  body.cam-platform .top-municipality-search button{width:34px;padding:0;font-size:0}
  body.cam-platform .top-municipality-search button::after{content:'→';font-size:13px}
}

/* Producto definitivo: separación auditable entre evidencia real, cálculo y DEMO. */
.contract-truth-model{margin:10px 0 8px;padding:9px;display:grid;grid-template-columns:repeat(4,minmax(150px,1fr));gap:7px;border:1px solid rgba(166,195,204,.12);border-radius:10px;background:linear-gradient(135deg,#0a171f,#08131b)}
.contract-truth-model article{min-width:0;min-height:52px;padding:8px 9px;display:grid;grid-template-columns:29px minmax(0,1fr);gap:9px;align-items:center;border:1px solid rgba(166,195,204,.1);border-radius:7px;background:#0b1922}
.contract-truth-model article>b{width:28px;height:28px;display:grid;place-items:center;border-radius:7px;color:#75d9ba;background:rgba(101,214,170,.09);font-size:8px}
.contract-truth-model article.official>b{color:#72c6ea;background:rgba(69,183,231,.09)}
.contract-truth-model article.derived>b{color:#e2b166;background:rgba(240,168,79,.09)}
.contract-truth-model article.demo{border-color:rgba(191,137,255,.23);background:linear-gradient(135deg,rgba(191,137,255,.08),rgba(14,24,35,.9))}
.contract-truth-model article.demo>b{color:#d3b0ff;background:rgba(191,137,255,.13)}
.contract-truth-model article strong,.contract-truth-model article small{display:block}.contract-truth-model article strong{color:#bdcbce;font-size:9.5px;letter-spacing:.35px}.contract-truth-model article small{margin-top:3px;color:#6c838c;font-size:8.5px;line-height:1.3}
.contract-truth-model>p{grid-column:1/-1;margin:1px 2px 0;padding:7px 9px;border-left:2px solid #bf89ff;color:#788f98;background:rgba(191,137,255,.035);font-size:9px;line-height:1.4}.contract-truth-model>p strong{color:#c9a6f3}
.contract-matrix-toolbar{grid-template-columns:minmax(220px,1.3fr) repeat(4,minmax(125px,.62fr)) 150px}
.contract-matrix-kpis article.functional{border-color:rgba(101,214,170,.22);background:linear-gradient(135deg,#0b1720,rgba(101,214,170,.05))}.contract-matrix-kpis article.functional strong{color:#6ed9af}
.contract-matrix-kpis article.demo{border-color:rgba(191,137,255,.23);background:linear-gradient(135deg,#0b1720,rgba(191,137,255,.055))}.contract-matrix-kpis article.demo strong{color:#cba5f5}
.contract-roadmap-score i.demo{color:#cba6f5;background:rgba(191,137,255,.1)}
.contract-data-badge{display:inline-flex!important;align-items:center;padding:3px 5px;border-radius:4px;font-size:7px!important;font-weight:800;letter-spacing:.3px}.contract-data-badge.demo{color:#d1adfb;background:rgba(191,137,255,.11)}
.contract-data-badge.professional{color:#76d7ba;background:rgba(101,214,170,.1)}.contract-professional-dependency{display:block;margin-top:8px;padding:6px 7px;border-left:2px solid rgba(101,214,170,.48);color:#75a99a;background:rgba(101,214,170,.04);font-size:8.2px;line-height:1.42}.contract-coverage-cell>small.professional{margin-left:4px;color:#79d2b7;background:rgba(101,214,170,.08)}
.contract-demo-dependency{display:block;margin-top:8px;padding:6px 7px;border-left:2px solid rgba(191,137,255,.48);color:#a78cc2;background:rgba(191,137,255,.04);font-size:8.2px;line-height:1.42}
.contract-coverage-cell.has-demo>b i{background:linear-gradient(90deg,#9a6ad0,#65d6aa)}
.contract-production-line{margin:1px 0 6px;padding-top:6px;border-top:1px solid rgba(166,195,204,.09)}.contract-coverage-cell .contract-production-line strong{color:#a6b6ba;font-size:11px}.contract-coverage-cell>small.demo{margin-left:4px;color:#cda9f6;background:rgba(191,137,255,.1)}
.contract-matrix-foot i.demo{background:#bf89ff}
.contract-data-card.demo{border-color:rgba(191,137,255,.2);background:linear-gradient(135deg,rgba(191,137,255,.07),#09161e)}.contract-data-card.demo>span{color:#d1adfb;background:rgba(191,137,255,.13)}.contract-data-card.demo strong{color:#aa91c3}

.contract-demo-stage{position:relative;margin:10px 0;padding:11px;border:1px solid rgba(191,137,255,.26);border-radius:11px;background:linear-gradient(145deg,rgba(191,137,255,.075),#0a1720 38%,#08141c);overflow:hidden}
.contract-demo-stage::after{content:'DEMO';position:absolute;right:-15px;top:67px;color:rgba(207,171,249,.035);font:800 82px/1 Roboto,sans-serif;letter-spacing:-5px;transform:rotate(-90deg);pointer-events:none}
.contract-demo-stage>header{position:relative;z-index:1;min-height:46px;padding:0 3px 9px;display:flex;align-items:center;justify-content:space-between;gap:16px;border-bottom:1px solid rgba(191,137,255,.15)}
.contract-demo-mark{display:flex;align-items:center;gap:10px}.contract-demo-mark>b{min-width:50px;height:31px;display:grid;place-items:center;border:1px solid rgba(191,137,255,.35);border-radius:7px;color:#dbbaff;background:rgba(191,137,255,.13);font-size:10px;letter-spacing:.6px}.contract-demo-mark strong,.contract-demo-mark small,.contract-demo-stage>header>div:last-child small,.contract-demo-stage>header>div:last-child strong{display:block}.contract-demo-mark strong{color:#d7c0eb;font-size:10px;letter-spacing:.35px}.contract-demo-mark small{margin-top:3px;color:#8e78a2;font-size:9px}.contract-demo-stage>header>div:last-child{text-align:right}.contract-demo-stage>header>div:last-child small{color:#76658a;font-size:7.5px;letter-spacing:.35px}.contract-demo-stage>header>div:last-child strong{margin-top:3px;color:#c9a7ed;font-size:10px}
.contract-demo-disclaimer{position:relative;z-index:1;margin:8px 0;padding:7px 9px;border-left:2px solid #bf89ff;color:#a58eb8;background:rgba(191,137,255,.035);font-size:9.2px;line-height:1.45}
.contract-demo-toolbar{position:relative;z-index:1;margin-bottom:7px;padding:7px;display:grid;grid-template-columns:minmax(360px,1fr) minmax(180px,.55fr) auto;gap:8px;align-items:center;border:1px solid rgba(166,195,204,.09);border-radius:8px;background:rgba(7,18,27,.72)}
.contract-demo-toolbar>div{display:flex;gap:5px}.contract-demo-toolbar>div button{min-height:31px;padding:0 9px;border:1px solid rgba(166,195,204,.12);border-radius:6px;color:#788b94;background:#0c1a23;font:700 7.8px Roboto,sans-serif;letter-spacing:.3px;cursor:pointer}.contract-demo-toolbar>div button:hover,.contract-demo-toolbar>div button.active{border-color:rgba(191,137,255,.4);color:#d3aff9;background:rgba(191,137,255,.1)}
.contract-demo-toolbar>span{min-width:0;display:grid;grid-template-columns:8px minmax(0,1fr);gap:7px;align-items:center}.contract-demo-toolbar>span i{width:7px;height:7px;border-radius:50%;background:#bf89ff;box-shadow:0 0 0 4px rgba(191,137,255,.08)}.contract-demo-toolbar>span strong{overflow:hidden;color:#9b87ad;font-size:8.7px;text-overflow:ellipsis;white-space:nowrap}
.contract-demo-export{min-height:35px;padding:0 9px;display:grid;grid-template-columns:auto auto;gap:2px 6px;align-content:center;border:1px solid rgba(101,214,170,.2);border-radius:7px;color:#78d6b9;background:rgba(101,214,170,.06);cursor:pointer}.contract-demo-export b{grid-row:1/3;font-size:13px}.contract-demo-export span{font-size:8px;font-weight:800}.contract-demo-export small{color:#68847b;font-size:7px}.contract-demo-export:hover{border-color:rgba(101,214,170,.45);background:rgba(101,214,170,.1)}
.contract-demo-kpis{position:relative;z-index:1;display:grid;grid-template-columns:repeat(4,minmax(0,1fr));gap:7px}.contract-demo-kpis article{min-height:60px;padding:9px;border:1px solid rgba(191,137,255,.13);border-radius:7px;background:rgba(7,18,27,.62)}.contract-demo-kpis strong,.contract-demo-kpis span,.contract-demo-kpis small{display:block}.contract-demo-kpis strong{color:#e0d1ed;font-size:16px}.contract-demo-kpis span{margin-top:4px;color:#8e7b9e;font-size:9px}.contract-demo-kpis small{margin-top:5px;color:#bf89ff;font-size:7px;font-weight:800;letter-spacing:.45px}
.contract-demo-product{position:relative;z-index:1;margin-top:7px;display:grid;grid-template-columns:minmax(310px,.9fr) minmax(300px,.85fr) minmax(390px,1.15fr);gap:7px}.contract-demo-product>article{min-width:0;border:1px solid rgba(166,195,204,.1);border-radius:8px;background:rgba(7,18,27,.72);overflow:hidden}.contract-demo-product article>header{min-height:43px;padding:7px 10px;display:flex;align-items:center;justify-content:space-between;gap:12px;border-bottom:1px solid rgba(166,195,204,.08)}.contract-demo-product header small,.contract-demo-product header h3{display:block}.contract-demo-product header small{color:#725f84;font-size:7.8px;letter-spacing:.45px}.contract-demo-product header h3{margin:3px 0 0;color:#bda8cd;font-size:10px}.contract-demo-product header>span{color:#aa84d0;font-size:7.5px;font-weight:700}
.contract-demo-series>div{height:185px;padding:12px 9px 8px;display:flex;align-items:stretch;justify-content:space-around;gap:5px}.contract-demo-bar{min-width:0;flex:1;margin:0;padding:0;display:grid;grid-template-rows:minmax(104px,1fr) auto auto;gap:3px;border:0;border-radius:5px;color:inherit;background:transparent;text-align:center;cursor:pointer}.contract-demo-bar:hover,.contract-demo-bar.active{background:rgba(191,137,255,.045);box-shadow:inset 0 0 0 1px rgba(191,137,255,.12)}.contract-demo-bar>span{min-height:104px;display:flex;align-items:flex-end;justify-content:center;border-bottom:1px solid rgba(166,195,204,.11)}.contract-demo-bar i{width:min(18px,60%);min-height:5px;display:block;border-radius:3px 3px 1px 1px;background:linear-gradient(180deg,#d4b1fa,#8060aa);box-shadow:0 0 12px rgba(191,137,255,.1);transition:height .28s ease,filter .2s}.contract-demo-bar:hover i,.contract-demo-bar.active i{filter:brightness(1.25);box-shadow:0 0 18px rgba(191,137,255,.28)}.contract-demo-bar strong{color:#b8a7c5;font-size:8.5px}.contract-demo-bar small{overflow:hidden;color:#695c73;font-size:7.5px;text-overflow:ellipsis;white-space:nowrap}
.contract-demo-spatial>div{position:relative;height:185px;overflow:hidden;background:radial-gradient(circle at 50% 50%,rgba(69,183,231,.045),transparent 62%),linear-gradient(rgba(166,195,204,.025) 1px,transparent 1px),linear-gradient(90deg,rgba(166,195,204,.025) 1px,transparent 1px);background-size:auto,25px 25px,25px 25px}.contract-demo-spatial svg{position:absolute;inset:0;width:100%;height:100%}.contract-demo-spatial path{fill:none;stroke:rgba(95,128,139,.28);stroke-width:4;stroke-linecap:round}.contract-demo-spatial path:nth-child(2){stroke:#8060aa;stroke-width:2.5;stroke-dasharray:8 8}.contract-demo-spatial path:nth-child(3),.contract-demo-spatial path:nth-child(4){stroke:rgba(101,214,170,.18);stroke-width:2}
.contract-demo-spatial button{position:absolute;left:var(--demo-x);top:var(--demo-y);padding:0;border:0;color:#9b89aa;background:transparent;cursor:pointer;transform:translate(-50%,-50%)}.contract-demo-spatial button i{width:14px;height:14px;display:block;border:3px solid #d2adf8;border-radius:50%;background:#241a30;box-shadow:0 0 0 5px rgba(191,137,255,.08),0 0 18px rgba(191,137,255,.24)}.contract-demo-spatial button span{position:absolute;left:18px;top:-1px;padding:3px 5px;border:1px solid rgba(191,137,255,.18);border-radius:4px;background:rgba(8,18,27,.88);font-size:7.5px;white-space:nowrap}.contract-demo-spatial button small{position:absolute;left:-5px;top:-8px;width:12px;height:12px;display:grid;place-items:center;border-radius:50%;color:#071018;background:#d2adf8;font-size:6px;font-weight:800}.contract-demo-spatial button:hover,.contract-demo-spatial button.active{z-index:3;color:#e1d1ee}.contract-demo-spatial button:hover i,.contract-demo-spatial button.active i{border-color:#65d6aa;box-shadow:0 0 0 6px rgba(101,214,170,.1),0 0 20px rgba(101,214,170,.26)}.contract-demo-spatial button:hover small,.contract-demo-spatial button.active small{background:#65d6aa}.contract-demo-spatial em{position:absolute;left:8px;right:8px;bottom:6px;color:#536973;font-size:6.8px;font-style:normal;text-align:center}
.contract-demo-ranking table{width:100%;border-collapse:collapse}.contract-demo-ranking td{padding:8px 7px;border-bottom:1px solid rgba(166,195,204,.07);color:#748892;font-size:8.5px}.contract-demo-ranking tr:last-child td{border-bottom:0}.contract-demo-ranking td:first-child{width:25px;color:#725f83}.contract-demo-ranking td:nth-child(2){min-width:120px}.contract-demo-ranking td:last-child{text-align:right;white-space:nowrap}.contract-demo-ranking td strong,.contract-demo-ranking td small{display:block}.contract-demo-ranking td strong{color:#a99bb2;font-size:8.8px}.contract-demo-ranking td small{margin-top:2px;color:#62566d;font-size:7.7px}.contract-demo-ranking td b{color:#d3b0f7;font-size:9px}
.contract-demo-ranking tr[role=button]{cursor:pointer;outline:0}.contract-demo-ranking tr[role=button]:hover td,.contract-demo-ranking tr[role=button].active td{background:rgba(191,137,255,.045)}.contract-demo-ranking tr[role=button]:focus td{box-shadow:inset 0 0 0 1px rgba(191,137,255,.22)}
.contract-demo-selection{position:relative;z-index:1;margin-top:7px;padding:8px 10px;display:grid;grid-template-columns:30px minmax(0,1fr) auto;gap:10px;align-items:center;border:1px solid rgba(101,214,170,.14);border-radius:8px;background:linear-gradient(90deg,rgba(101,214,170,.04),rgba(191,137,255,.025))}.contract-demo-selection>b{width:29px;height:29px;display:grid;place-items:center;border:1px solid rgba(101,214,170,.22);border-radius:8px;color:#70d0b3;background:rgba(101,214,170,.07);font-size:8px}.contract-demo-selection small,.contract-demo-selection strong,.contract-demo-selection em{display:block}.contract-demo-selection small{color:#5a7c72;font-size:7px;letter-spacing:.4px}.contract-demo-selection strong{margin-top:2px;color:#b9c8ca;font-size:9.5px}.contract-demo-selection em{margin-top:2px;color:#788d94;font-size:8.3px;font-style:normal}.contract-demo-selection>i{color:#6a5d75;font-size:7.5px;font-style:normal}
.contract-demo-stage>footer{position:relative;z-index:1;margin-top:7px;padding:8px;display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:7px;border:1px solid rgba(166,195,204,.08);border-radius:7px;background:rgba(7,18,27,.6)}.contract-demo-stage>footer span{min-width:0}.contract-demo-stage>footer small,.contract-demo-stage>footer strong{display:block}.contract-demo-stage>footer small{color:#665875;font-size:7.5px;letter-spacing:.3px}.contract-demo-stage>footer strong{margin-top:3px;color:#9484a1;font-size:8.5px;line-height:1.35;overflow-wrap:anywhere}.contract-demo-stage>footer p{grid-column:1/-1;margin:0;padding-top:6px;border-top:1px solid rgba(166,195,204,.07);color:#697e87;font-size:8.5px;line-height:1.4}

@media(max-width:1280px){.contract-matrix-toolbar{grid-template-columns:repeat(3,minmax(0,1fr))}.contract-matrix-toolbar button{min-height:48px}.contract-demo-product{grid-template-columns:1fr 1fr}.contract-demo-ranking{grid-column:1/-1}.contract-demo-ranking table{min-width:0}}
@media(max-width:820px){.contract-truth-model,.contract-demo-kpis{grid-template-columns:repeat(2,minmax(0,1fr))}.contract-demo-stage>footer{grid-template-columns:1fr}.contract-demo-stage>footer p{grid-column:auto}.contract-demo-product{grid-template-columns:minmax(0,1fr)}.contract-demo-ranking{grid-column:auto}.contract-demo-toolbar{grid-template-columns:1fr}.contract-demo-selection{grid-template-columns:30px 1fr}.contract-demo-selection>i{grid-column:2}}
@media(max-width:540px){.contract-truth-model,.contract-demo-kpis,.contract-matrix-toolbar{grid-template-columns:1fr}.contract-demo-stage>header{align-items:flex-start;flex-direction:column}.contract-demo-stage>header>div:last-child{text-align:left}.contract-demo-series>div{overflow-x:auto}.contract-demo-bar{min-width:40px}.contract-demo-toolbar>div{overflow-x:auto}.contract-demo-toolbar>div button{white-space:nowrap}}

@media print{
  body.cam-platform .contract-truth-model,body.cam-platform .contract-demo-stage{display:block!important;border-color:#b79acd!important;background:#fff!important;break-inside:avoid;page-break-inside:avoid}
  body.cam-platform .contract-demo-stage::after{color:rgba(120,77,155,.06)!important}
  body.cam-platform .contract-demo-stage :is(strong,h3,b){color:#49315c!important}
  body.cam-platform .contract-demo-stage :is(p,span,small,td){color:#665873!important}
  body.cam-platform .contract-demo-product{display:grid!important;grid-template-columns:1fr 1fr!important}
  body.cam-platform .contract-demo-bar i{background:#986bbb!important}
}

/* Productos contractuales profesionales: explotación real con estimaciones trazables. */
.professional-case-heading{align-items:center}.professional-case-version{min-width:255px;padding:9px 11px;border:1px solid rgba(101,214,170,.18);border-radius:8px;background:linear-gradient(135deg,rgba(101,214,170,.06),rgba(69,183,231,.035));text-align:right}.professional-case-version small,.professional-case-version strong,.professional-case-version span{display:block}.professional-case-version small{color:#638179;font-size:7.5px;letter-spacing:.45px}.professional-case-version strong{margin-top:4px;color:#90d9c2;font-size:9px}.professional-case-version span{margin-top:3px;color:#5f737b;font-size:8px}
.professional-truth{margin:8px 0;display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:6px}.professional-truth span{min-height:35px;padding:0 10px;display:flex;align-items:center;gap:7px;border:1px solid rgba(166,195,204,.1);border-radius:7px;color:#778c94;background:#0a171f;font-size:8.5px}.professional-truth span i{width:8px;height:8px;border-radius:50%}.professional-truth span b{font-size:8px;letter-spacing:.4px}.professional-truth .observed i{background:#45b7e7}.professional-truth .observed b{color:#72c6ea}.professional-truth .derived i{background:#f0a84f}.professional-truth .derived b{color:#e2b166}.professional-truth .estimated i{background:#bf89ff}.professional-truth .estimated b{color:#d1adfb}
.professional-case-toolbar{margin:8px 0;padding:8px;display:grid;grid-template-columns:repeat(3,minmax(150px,1fr)) auto;gap:7px;border:1px solid rgba(166,195,204,.1);border-radius:8px;background:#08141c}.professional-case-toolbar label{min-width:0;display:block}.professional-case-toolbar label span{display:block;margin:0 0 4px 3px;color:#596e76;font-size:7px;letter-spacing:.45px}.professional-case-toolbar select{width:100%;height:34px;padding:0 28px 0 9px;border:1px solid rgba(166,195,204,.12);border-radius:6px;color:#b6c7ca;background:#0c1b24;font:500 9px Roboto,sans-serif}.professional-case-toolbar>button{align-self:end;height:34px;padding:0 11px;border:1px solid rgba(101,214,170,.2);border-radius:6px;color:#70d0b3;background:rgba(101,214,170,.06);font:700 8px Roboto,sans-serif;cursor:pointer}.professional-case-toolbar>button:hover{border-color:rgba(101,214,170,.45);background:rgba(101,214,170,.1)}
.professional-case-kpis{display:grid;grid-template-columns:repeat(5,minmax(0,1fr));gap:6px}.professional-case-kpis article{min-height:64px;padding:9px;border:1px solid rgba(166,195,204,.1);border-top:2px solid #4eb995;border-radius:7px;background:linear-gradient(145deg,#0b1821,#08141c)}.professional-case-kpis article.estimated{border-top-color:#bf89ff}.professional-case-kpis small,.professional-case-kpis strong,.professional-case-kpis span{display:block}.professional-case-kpis small{color:#657a82;font-size:7.5px;text-transform:uppercase}.professional-case-kpis strong{margin-top:6px;color:#d8e5e6;font-size:16px;line-height:1}.professional-case-kpis span{margin-top:6px;color:#55716a;font-size:6.8px;letter-spacing:.3px}.professional-case-kpis article.estimated span{color:#a782c8}
.professional-case-main{margin-top:7px;display:grid;grid-template-columns:minmax(430px,1.08fr) minmax(390px,.92fr);gap:7px}.professional-case-main>article,.professional-case-bottom>article,.professional-method-card{min-width:0;border:1px solid rgba(166,195,204,.1);border-radius:8px;background:#08151d;overflow:hidden}.professional-case-main article>header,.professional-case-bottom article>header,.professional-method-card>header{min-height:44px;padding:7px 10px;display:flex;align-items:center;justify-content:space-between;gap:12px;border-bottom:1px solid rgba(166,195,204,.08);background:#0a1821}.professional-case-main header small,.professional-case-main header h3,.professional-case-bottom header small,.professional-case-bottom header h3,.professional-method-card header small,.professional-method-card header h3{display:block}.professional-case-main header small,.professional-case-bottom header small,.professional-method-card header small{color:#60757d;font-size:7px;letter-spacing:.45px}.professional-case-main header h3,.professional-case-bottom header h3,.professional-method-card header h3{margin:3px 0 0;color:#bdcbce;font-size:10.5px}.professional-case-main header>span,.professional-case-bottom header>span,.professional-method-card header>span{color:#71878e;font-size:7.5px}.professional-map-card #professional-case-map{height:330px;background:#071018}.professional-case-main article>footer{min-height:30px;padding:7px 9px;color:#60747c;font-size:7.5px;line-height:1.35;border-top:1px solid rgba(166,195,204,.07)}
.professional-chart-wrap{position:relative;height:330px}.professional-chart-wrap canvas{width:100%;height:100%;display:block}.professional-case-tooltip{position:absolute;z-index:4;min-width:175px;padding:8px 9px;border:1px solid rgba(101,214,170,.25);border-radius:6px;background:rgba(5,14,20,.96);box-shadow:0 8px 25px rgba(0,0,0,.28);pointer-events:none}.professional-case-tooltip small,.professional-case-tooltip strong,.professional-case-tooltip span{display:block}.professional-case-tooltip small{color:#62827a;font-size:7px}.professional-case-tooltip strong{margin-top:4px;color:#bfe5d9;font-size:9.5px}.professional-case-tooltip span{margin-top:4px;color:#6d838b;font-size:7.5px}
.professional-case-bottom{margin-top:7px;display:grid;grid-template-columns:minmax(380px,.86fr) minmax(480px,1.14fr);gap:7px}.professional-ranking-card>div{height:350px;overflow:auto}.professional-ranking-card button{width:100%;min-height:58px;padding:8px;display:grid;grid-template-columns:26px minmax(0,1fr) 48px;gap:9px;align-items:center;border:0;border-bottom:1px solid rgba(166,195,204,.07);color:inherit;background:transparent;text-align:left;cursor:pointer}.professional-ranking-card button:hover,.professional-ranking-card button.active{background:rgba(101,214,170,.045)}.professional-ranking-card button>b{width:25px;height:25px;display:grid;place-items:center;border-radius:6px;color:#60767e;background:#0c1c25;font-size:7px}.professional-ranking-card button span{min-width:0}.professional-ranking-card button strong,.professional-ranking-card button small,.professional-ranking-card button em{display:block;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.professional-ranking-card button strong{color:#b9c8ca;font-size:9.5px}.professional-ranking-card button small{margin-top:3px;color:#6f838b;font-size:8px}.professional-ranking-card button em{margin-top:3px;color:#a97d74;font-size:7px;font-style:normal}.professional-ranking-card button mark{padding:5px;border-radius:5px;color:#f2c2ca;background:rgba(239,97,121,.09);font:700 10px Roboto,sans-serif;text-align:center}
.professional-detail-card{min-height:395px;padding:0}.professional-detail-card>header{min-height:56px!important}.professional-detail-card>header h3{font-size:12px}.professional-detail-card>header p{margin:3px 0 0;color:#71868d;font-size:8px}.professional-detail-card>header>span{padding:6px 8px;border-radius:6px;font-size:10px;font-weight:800}.professional-detail-card>header .score-high{color:#f19aaa;background:rgba(239,97,121,.1)}.professional-detail-card>header .score-medium{color:#e5b56e;background:rgba(240,168,79,.1)}.professional-detail-card>header .score-low{color:#70d2b4;background:rgba(101,214,170,.08)}.professional-detail-metrics{padding:8px;display:grid;grid-template-columns:repeat(4,minmax(0,1fr));gap:6px}.professional-detail-metrics article{min-height:59px;padding:7px;border:1px solid rgba(166,195,204,.08);border-radius:6px;background:#091820}.professional-detail-metrics small,.professional-detail-metrics strong,.professional-detail-metrics span{display:block}.professional-detail-metrics small{color:#667b83;font-size:7px;line-height:1.25}.professional-detail-metrics strong{margin-top:5px;color:#c2d0d2;font-size:10px}.professional-detail-metrics span{margin-top:5px;font-size:6.5px;font-weight:800;letter-spacing:.35px}.professional-detail-metrics .observed span{color:#65bee5}.professional-detail-metrics .derived span{color:#dda75c}.professional-detail-metrics .estimated{border-color:rgba(191,137,255,.14)}.professional-detail-metrics .estimated span{color:#c69cec}.professional-detail-card>section{margin:0 8px 8px;padding:9px;border-left:2px solid #65d6aa;background:rgba(101,214,170,.035)}.professional-detail-card>section small,.professional-detail-card>section strong{display:block}.professional-detail-card>section small{color:#5a8175;font-size:7px}.professional-detail-card>section strong{margin-top:4px;color:#afc5bf;font-size:9px;line-height:1.4}.professional-detail-card>footer{padding:8px;display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:6px;border-top:1px solid rgba(166,195,204,.07)}.professional-detail-card>footer span{padding:6px;color:#6b8088;background:#07141c;font-size:7.5px;line-height:1.35}.professional-detail-card>footer b{display:block;margin-bottom:3px;color:#83979e;font-size:7px}
.professional-method-card{margin-top:7px}.professional-method-card>ol{margin:0;padding:9px;display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:7px;list-style:none}.professional-method-card li{min-height:58px;padding:8px;display:grid;grid-template-columns:25px minmax(0,1fr);gap:8px;align-items:start;border:1px solid rgba(166,195,204,.08);border-radius:6px;background:#091820}.professional-method-card li>b{width:24px;height:24px;display:grid;place-items:center;border-radius:6px;color:#66caaa;background:rgba(101,214,170,.07);font-size:7px}.professional-method-card li span{color:#7c9198;font-size:8.5px;line-height:1.45}.professional-method-card>footer{padding:8px;display:grid;grid-template-columns:repeat(3,minmax(100px,.35fr)) minmax(340px,1fr);gap:7px;border-top:1px solid rgba(166,195,204,.07)}.professional-method-card>footer span{padding:7px;border-radius:6px;background:#07141c;color:#71858d;font-size:7.5px}.professional-method-card>footer span b{display:block;margin-bottom:2px;color:#b6c7c9;font-size:12px}.professional-method-card>footer p{margin:0;padding:7px 9px;border-left:2px solid #bf89ff;color:#82718f;background:rgba(191,137,255,.035);font-size:8px;line-height:1.4}.professional-case-empty{padding:25px;color:#758a92;font-size:9px;text-align:center}.professional-case-empty strong,.professional-case-empty span{display:block}.professional-case-empty strong{color:#aebfc2}.professional-case-empty span{margin-top:5px}.professional-map-popup small,.professional-map-popup strong,.professional-map-popup span,.professional-map-popup em{display:block}.professional-map-popup small{color:#55776c;font-size:8px}.professional-map-popup strong{margin-top:4px;color:#1a4244;font-size:11px}.professional-map-popup span{margin-top:4px;color:#577077;font-size:9px}.professional-map-popup em{margin-top:5px;color:#a24f5d;font-size:8px;font-style:normal}
@media(max-width:1280px){.professional-case-kpis{grid-template-columns:repeat(3,minmax(0,1fr))}.professional-case-main,.professional-case-bottom{grid-template-columns:1fr}.professional-case-toolbar{grid-template-columns:repeat(2,minmax(0,1fr))}.professional-map-card #professional-case-map,.professional-chart-wrap{height:300px}}
@media(max-width:760px){.professional-case-version{display:none}.professional-truth,.professional-case-kpis,.professional-case-toolbar,.professional-method-card>ol,.professional-method-card>footer{grid-template-columns:1fr}.professional-detail-metrics,.professional-detail-card>footer{grid-template-columns:repeat(2,minmax(0,1fr))}}
@media print{body.cam-platform .professional-case-toolbar{display:none!important}body.cam-platform .professional-case-main,body.cam-platform .professional-case-bottom{display:grid!important;grid-template-columns:1fr!important}body.cam-platform .professional-map-card #professional-case-map{height:105mm!important}body.cam-platform .professional-ranking-card>div{height:auto!important;max-height:none!important}body.cam-platform .professional-ranking-card button:nth-child(n+11){display:none!important}body.cam-platform .professional-truth span,body.cam-platform .professional-case-kpis article,body.cam-platform .professional-case-main>article,body.cam-platform .professional-case-bottom>article,body.cam-platform .professional-method-card{background:#fff!important;border-color:#d4e1e3!important}body.cam-platform .professional-method-card>ol{display:grid!important;grid-template-columns:1fr 1fr 1fr!important}}

/* Productos contractuales diferenciados por dominio. */
.professional-case-toolbar.ev-toolbar{grid-template-columns:minmax(250px,1.35fr) repeat(3,minmax(145px,1fr)) auto}.professional-case-toolbar input{width:100%;height:34px;padding:0 9px;border:1px solid rgba(166,195,204,.12);border-radius:6px;outline:0;color:#c4d2d4;background:#0c1b24;font:500 9.5px Roboto,sans-serif}.professional-case-toolbar input:focus{border-color:rgba(101,214,170,.42)}
.professional-case-kpis article.observed{border-top-color:#45b7e7}.professional-case-kpis article.derived{border-top-color:#f0a84f}.professional-case-kpis article.estimated{border-top-color:#bf89ff}.professional-case-kpis article.observed span{color:#66aeca}.professional-case-kpis article.derived span{color:#a8895e}.professional-case-kpis article.estimated span{color:#a782c8}
.professional-product-grid{margin-top:7px;display:grid;grid-template-columns:repeat(12,minmax(0,1fr));gap:7px;align-items:stretch}.professional-product-card{min-width:0;border:1px solid rgba(166,195,204,.1);border-radius:9px;background:#08151d;overflow:hidden}.professional-product-card>header{min-height:48px;padding:8px 11px;display:flex;align-items:center;justify-content:space-between;gap:12px;border-bottom:1px solid rgba(166,195,204,.08);background:linear-gradient(115deg,#0b1a23,#091720)}.professional-product-card>header small,.professional-product-card>header h3{display:block}.professional-product-card>header small{color:#647981;font-size:7.5px;font-weight:700;letter-spacing:.55px}.professional-product-card>header h3{margin:3px 0 0;color:#c6d4d6;font-size:11.5px}.professional-product-card>header>span{padding:4px 6px;border-radius:5px;color:#7f949b;background:rgba(255,255,255,.025);font-size:7.5px;font-weight:700;letter-spacing:.35px}.professional-product-card>footer{min-height:31px;padding:8px 10px;border-top:1px solid rgba(166,195,204,.07);color:#667b83;background:#07131b;font-size:8px;line-height:1.4}.professional-product-grid .professional-map-card #professional-case-map{height:390px}.professional-product-grid .professional-chart-wrap{height:320px}.professional-product-grid .professional-ranking-card>div{height:320px}.professional-product-grid .professional-detail-card{min-height:360px}
.mobility-map-card{grid-column:1/8}.mobility-structure-card{grid-column:8/13}.mobility-demand-card{grid-column:1/9}.mobility-product-grid>.professional-ranking-card{grid-column:9/13}.mobility-product-grid>.professional-detail-card{grid-column:1/13}.mobility-scenario-control{display:block;margin:11px;padding:9px;border:1px solid rgba(69,183,231,.13);border-radius:8px;background:rgba(69,183,231,.035)}.mobility-scenario-control span{display:block;margin-bottom:5px;color:#6f878f;font-size:7.5px}.mobility-scenario-control select{width:100%;height:32px;padding:0 8px;border:1px solid rgba(166,195,204,.14);border-radius:6px;color:#b9c9cb;background:#0c1b24;font:500 9.5px Roboto,sans-serif}.mobility-structure-card h4,.vulnerable-risk-card h4{margin:15px 12px 8px;color:#9dafb4;font-size:9px}.professional-measure{margin:8px 12px}.professional-measure>span{display:flex;justify-content:space-between;gap:10px}.professional-measure b{color:#879ba1;font-size:8.5px}.professional-measure em{color:#c7d5d7;font-size:8.5px;font-style:normal;font-variant-numeric:tabular-nums}.professional-measure>i{height:6px;display:block;margin-top:5px;border-radius:5px;background:#0d202a;overflow:hidden}.professional-measure u{height:100%;display:block;border-radius:5px;background:#65d6aa;text-decoration:none}.professional-measure u.coral{background:#ef6179}.professional-measure u.cyan{background:#45b7e7}.professional-measure u.mint{background:#65d6aa}.professional-measure u.amber{background:#f0a84f}.professional-measure u.violet{background:#bf89ff}.professional-data-note{display:block;margin:10px 12px;color:#687c84;font-size:7.8px;line-height:1.4}.mobility-flow-pair{margin:8px 12px 13px;display:grid;grid-template-columns:1fr auto 1fr;gap:8px;align-items:end}.mobility-flow-pair>span{min-width:0;padding:9px;border-radius:7px;background:#091b24}.mobility-flow-pair small,.mobility-flow-pair strong,.mobility-flow-pair i{display:block}.mobility-flow-pair small{color:#627981;font-size:7px}.mobility-flow-pair strong{margin:5px 0;color:#d5e0e2;font-size:14px}.mobility-flow-pair i{height:3px;border-radius:3px;background:#45b7e7}.mobility-flow-pair>span:last-child i{background:#65d6aa}.mobility-flow-pair>b{padding:5px 7px;border-radius:5px;font-size:7.5px;white-space:nowrap}.mobility-flow-pair>b.attractor{color:#74d4b7;background:rgba(101,214,170,.08)}.mobility-flow-pair>b.producer{color:#efa2ae;background:rgba(239,97,121,.08)}
.maintenance-matrix-card{grid-column:1/8}.maintenance-deterioration-card{grid-column:8/13}.maintenance-map-card{grid-column:1/7}.maintenance-segment-card{grid-column:7/13}.maintenance-product-grid>.professional-ranking-card{grid-column:1/5}.maintenance-product-grid>.professional-detail-card{grid-column:5/13}.professional-secondary-chart{position:relative;height:290px}.professional-secondary-chart canvas{width:100%;height:100%;display:block}.maintenance-matrix-card #maintenance-matrix-summary{display:grid;grid-template-columns:repeat(5,minmax(0,1fr));border-top:1px solid rgba(166,195,204,.08)}#maintenance-matrix-summary>span{min-width:0;padding:9px;border-right:1px solid rgba(166,195,204,.07)}#maintenance-matrix-summary>span:last-child{border-right:0}#maintenance-matrix-summary small,#maintenance-matrix-summary strong{display:block}#maintenance-matrix-summary small{color:#647981;font-size:7px}#maintenance-matrix-summary strong{margin-top:4px;overflow:hidden;color:#b9c8cb;font-size:8.5px;text-overflow:ellipsis;white-space:nowrap}.maintenance-segment-card #maintenance-segment-study{padding:10px}.maintenance-segment-identity{padding:10px 11px;display:flex;align-items:flex-start;justify-content:space-between;gap:10px;border-left:3px solid #65d6aa;border-radius:7px;background:rgba(101,214,170,.035)}.maintenance-segment-identity small,.maintenance-segment-identity h4,.maintenance-segment-identity p{display:block}.maintenance-segment-identity small{color:#5f887c;font-size:7px;font-weight:800;letter-spacing:.45px}.maintenance-segment-identity h4{margin:4px 0 0;color:#d4e0e2;font-size:12px}.maintenance-segment-identity p{margin:4px 0 0;color:#70858c;font-size:8px;line-height:1.35}.maintenance-segment-identity mark{padding:7px 8px;border-radius:7px;font-size:10px;font-weight:800;white-space:nowrap}.maintenance-segment-identity .score-high{color:#f3a1ae;background:rgba(239,97,121,.1)}.maintenance-segment-identity .score-medium{color:#e8b671;background:rgba(240,168,79,.1)}.maintenance-segment-identity .score-low{color:#77d7b9;background:rgba(101,214,170,.08)}.maintenance-segment-components{margin:9px 0;padding:7px 0;border:1px solid rgba(166,195,204,.07);border-radius:7px;background:#07141c}.maintenance-segment-components h4{margin:2px 12px 7px;color:#8ca0a6;font-size:8.5px}.maintenance-segment-components .professional-measure{margin:7px 12px}.maintenance-direction-state{border:1px solid rgba(166,195,204,.08);border-radius:7px;overflow:hidden}.maintenance-direction-state>header{padding:7px 9px;display:flex;justify-content:space-between;gap:8px;background:#091820}.maintenance-direction-state>header small{color:#7c9299;font-size:7px;font-weight:800}.maintenance-direction-state>header span{color:#647b83;font-size:7px}.maintenance-direction-state>div{display:grid;grid-template-columns:1fr 1fr}.maintenance-direction-state article{padding:8px 9px;border-right:1px solid rgba(166,195,204,.07)}.maintenance-direction-state article:last-child{border-right:0}.maintenance-direction-state small,.maintenance-direction-state strong,.maintenance-direction-state span{display:block}.maintenance-direction-state small{color:#687f87;font-size:7px}.maintenance-direction-state strong{margin-top:4px;color:#c7d4d6;font-size:11px}.maintenance-direction-state span{margin-top:3px;font-size:7px;font-weight:800}.maintenance-direction-state .condition-bad span{color:#ef7c8f}.maintenance-direction-state .condition-medium span{color:#e8ae61}.maintenance-direction-state .condition-good span{color:#65d6aa}.maintenance-direction-state .condition-none span{color:#71858c}.maintenance-segment-facts{margin:9px 0 0;display:grid;grid-template-columns:1fr 1fr;border:1px solid rgba(166,195,204,.08);border-radius:7px;overflow:hidden}.maintenance-segment-facts>div{padding:7px 8px;border-right:1px solid rgba(166,195,204,.07);border-bottom:1px solid rgba(166,195,204,.07)}.maintenance-segment-facts>div:nth-child(2n){border-right:0}.maintenance-segment-facts>div:nth-last-child(-n+2){border-bottom:0}.maintenance-segment-facts dt{color:#637981;font-size:7px}.maintenance-segment-facts dd{margin:3px 0 0;color:#aebfc2;font-size:8px;line-height:1.35}.maintenance-segment-decision{margin-top:9px;padding:9px 10px;border-left:2px solid #bf89ff;background:rgba(191,137,255,.035)}.maintenance-segment-decision small,.maintenance-segment-decision strong,.maintenance-segment-decision p{display:block}.maintenance-segment-decision small{color:#967ab0;font-size:7px}.maintenance-segment-decision strong{margin-top:4px;color:#cfb7e5;font-size:9px}.maintenance-segment-decision p{margin:4px 0 0;color:#82768b;font-size:8px;line-height:1.4}.maintenance-segment-card #maintenance-segment-study>footer{margin:9px -10px -10px;padding:8px 10px;border-top:1px solid rgba(166,195,204,.07);color:#647a82;background:#07131b;font-size:7.5px;line-height:1.35}
.vulnerable-map-card{grid-column:1/8}.vulnerable-risk-card{grid-column:8/13}.vulnerable-exposure-card{grid-column:1/9}.vulnerable-product-grid>.professional-ranking-card{grid-column:9/13}.vulnerable-product-grid>.professional-detail-card{grid-column:1/13}.vulnerable-risk-card #vulnerable-protection-matrix{margin-top:12px;padding:1px 12px 12px;border-top:1px solid rgba(166,195,204,.08)}#vulnerable-protection-matrix>div{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:5px}#vulnerable-protection-matrix span{padding:6px;display:flex;align-items:center;gap:6px;border:1px solid rgba(166,195,204,.08);border-radius:6px;background:#091922}#vulnerable-protection-matrix i{width:17px;height:17px;display:grid;place-items:center;border-radius:50%;font-size:8px;font-style:normal}#vulnerable-protection-matrix b{font-size:8px}#vulnerable-protection-matrix .available i{color:#65d6aa;background:rgba(101,214,170,.09)}#vulnerable-protection-matrix .available b{color:#91b6aa}#vulnerable-protection-matrix .missing i{color:#ef6179;background:rgba(239,97,121,.09)}#vulnerable-protection-matrix .missing b{color:#aa8389}
.freight-profile-card{grid-column:1/8}.freight-balance-card{grid-column:8/13}.freight-map-card{grid-column:1/8}.freight-product-grid>.professional-ranking-card{grid-column:8/13}.freight-product-grid>.professional-detail-card{grid-column:1/13}.freight-balance-card #freight-supply-demand{padding:16px}.freight-balance-hero{display:grid;grid-template-columns:1fr auto 1fr;gap:9px;align-items:end}.freight-balance-hero>span{padding:12px;border-radius:9px;background:#091b25}.freight-balance-hero small,.freight-balance-hero strong,.freight-balance-hero em{display:block}.freight-balance-hero small{color:#657b83;font-size:7px}.freight-balance-hero strong{margin-top:7px;color:#d7e3e5;font-size:22px}.freight-balance-hero em{margin-top:3px;color:#71868e;font-size:7.5px;font-style:normal}.freight-balance-hero>b{padding:6px;border-radius:6px;font-size:7px;text-align:center}.freight-balance-hero>b.deficit{color:#ef91a0;background:rgba(239,97,121,.09)}.freight-balance-hero>b.covered{color:#65d6aa;background:rgba(101,214,170,.08)}.freight-capacity-track{margin:13px 0}.freight-capacity-track i{height:7px;display:block;margin:5px 0;border-radius:5px;background:#0c202a;overflow:hidden}.freight-capacity-track u{display:block;height:100%;text-decoration:none}.freight-capacity-track .demand{background:#44b7e8}.freight-capacity-track .supply{background:#65d6aa}.freight-balance-card dl{margin:0;display:grid;grid-template-columns:1fr 1fr;border:1px solid rgba(166,195,204,.08);border-radius:8px;overflow:hidden}.freight-balance-card dl>div{padding:9px;border-right:1px solid rgba(166,195,204,.07);border-bottom:1px solid rgba(166,195,204,.07)}.freight-balance-card dl>div:nth-child(2n){border-right:0}.freight-balance-card dl>div:nth-last-child(-n+2){border-bottom:0}.freight-balance-card dt{color:#697f87;font-size:7.5px}.freight-balance-card dd{margin:4px 0 0;color:#b9c8cb;font-size:8.5px}.freight-balance-card p{margin:11px 0 0;color:#6f838a;font-size:8px;line-height:1.4}
.ev-data-contract{margin:7px 0;display:grid;grid-template-columns:1fr 1fr;gap:6px}.ev-data-contract span{padding:8px 10px;display:flex;align-items:center;gap:7px;border:1px solid rgba(166,195,204,.09);border-radius:7px;color:#70858d;background:#091720;font-size:8px}.ev-data-contract i{width:7px;height:7px;border-radius:50%;background:#45b7e7}.ev-data-contract span:last-child i{background:#bf89ff}.ev-data-contract b{color:#aebfc2;font-size:7.5px}.ev-map-card{grid-column:1/8}.ev-locator-card{grid-column:8/13}.ev-occupancy-card{grid-column:1/7}.ev-facility-card{grid-column:7/13}.ev-product-grid>.professional-detail-card{grid-column:1/13}.ev-locator-card #ev-charger-list{height:421px;overflow:auto;scrollbar-width:thin}.ev-charger-row{border-bottom:1px solid rgba(166,195,204,.07)}.ev-charger-row>button{width:100%;padding:9px 10px;display:grid;grid-template-columns:6px minmax(0,1fr) 52px;gap:9px;align-items:center;border:0;color:inherit;background:transparent;text-align:left;cursor:pointer}.ev-charger-row>button:hover,.ev-charger-row.active>button{background:rgba(101,214,170,.045)}.ev-power-dot{width:5px;height:32px;border-radius:4px;background:linear-gradient(#65d6aa,#44b7e8)}.ev-charger-row span{min-width:0}.ev-charger-row strong,.ev-charger-row small,.ev-charger-row em{display:block;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.ev-charger-row strong{color:#c1d0d2;font-size:9.5px}.ev-charger-row span small{margin-top:3px;color:#758990;font-size:8px}.ev-charger-row em{margin-top:3px;color:#698a81;font-size:7px;font-style:normal}.ev-charger-row>button>b{color:#65d6aa;font-size:13px;text-align:right}.ev-charger-row>button>b small{color:#678078;font-size:6.5px}.ev-facility-card #ev-selected-facility{padding:13px}.ev-facility-identity{position:relative;padding:11px 115px 11px 12px;border-left:3px solid #45b7e7;border-radius:7px;background:rgba(69,183,231,.04)}.ev-facility-identity span{color:#66b9dc;font-size:7px;font-weight:700}.ev-facility-identity h4{margin:5px 0 3px;color:#d0dcde;font-size:13px}.ev-facility-identity address{color:#758a91;font-size:8.5px;font-style:normal}.ev-facility-identity a{position:absolute;right:10px;top:50%;padding:7px 9px;border:1px solid rgba(101,214,170,.2);border-radius:6px;color:#65d6aa;background:rgba(101,214,170,.055);font-size:7.5px;font-weight:700;text-decoration:none;transform:translateY(-50%)}.ev-facility-facts{margin:10px 0 0;display:grid;grid-template-columns:repeat(2,minmax(0,1fr));border:1px solid rgba(166,195,204,.08);border-radius:8px;overflow:hidden}.ev-facility-facts>div{padding:8px;border-right:1px solid rgba(166,195,204,.07);border-bottom:1px solid rgba(166,195,204,.07)}.ev-facility-facts>div:nth-child(2n){border-right:0}.ev-facility-facts>div:nth-last-child(-n+2){border-bottom:0}.ev-facility-facts dt{color:#667b83;font-size:7px}.ev-facility-facts dd{margin:4px 0 0;color:#b8c7ca;font-size:8.5px;line-height:1.35}.ev-estimated-strip{margin-top:9px;padding:8px 10px;border:1px solid rgba(191,137,255,.12);border-radius:7px;background:rgba(191,137,255,.035)}.ev-estimated-strip span,.ev-estimated-strip b{display:block}.ev-estimated-strip span{color:#b48bd7;font-size:7px}.ev-estimated-strip b{margin-top:4px;color:#9b8ca8;font-size:8.5px}
@media(max-width:1280px){.professional-case-toolbar.ev-toolbar{grid-template-columns:repeat(2,minmax(0,1fr))}.professional-product-grid{grid-template-columns:1fr 1fr}.professional-product-grid>.professional-product-card{grid-column:auto}.professional-product-grid>.professional-detail-card{grid-column:1/-1}.professional-product-grid .professional-map-card #professional-case-map{height:340px}.mobility-flow-pair,.freight-balance-hero{grid-template-columns:1fr}.mobility-flow-pair>b,.freight-balance-hero>b{justify-self:start}.professional-secondary-chart{height:260px}}
@media(max-width:800px){.professional-product-grid,.professional-case-toolbar.ev-toolbar,.ev-data-contract{grid-template-columns:1fr}.professional-product-grid>.professional-product-card,.professional-product-grid>.professional-detail-card{grid-column:1}.maintenance-matrix-card #maintenance-matrix-summary{grid-template-columns:1fr 1fr}.professional-product-grid .professional-map-card #professional-case-map{height:320px}.professional-product-grid .professional-chart-wrap{height:280px}.ev-facility-identity{padding-right:12px}.ev-facility-identity a{position:static;display:inline-block;margin-top:9px;transform:none}}

/* Nudos y movimientos · grafo, capacidad y reparto de giros. */
.junction-workspace{min-width:0;padding:12px 14px 32px;color:#aebfc2}.junction-heading>div:first-child{align-items:flex-start}.junction-heading p{margin:4px 0 0;color:#6d8289;font-size:9px}.junction-query{margin-top:8px;padding:8px;display:grid;grid-template-columns:minmax(180px,.8fr) minmax(330px,1.65fr) 128px 104px 170px 132px;gap:7px;border:1px solid rgba(166,195,204,.09);border-radius:9px;background:#08161e}.junction-query label{min-width:0}.junction-query label>span{display:block;margin:0 0 5px;color:#647981;font-size:7px;font-weight:800;letter-spacing:.45px}.junction-query input,.junction-query select{width:100%;height:34px;padding:0 9px;border:1px solid rgba(166,195,204,.13);border-radius:6px;outline:0;color:#c3d0d2;background:#0c1b24;font:500 9.5px Roboto,sans-serif}.junction-query input:focus,.junction-query select:focus{border-color:rgba(101,214,170,.45)}.junction-query .congestion-run{height:52px;align-self:end}.junction-truth{margin-top:7px;padding:7px 10px;display:flex;align-items:center;gap:14px;border:1px solid rgba(166,195,204,.08);border-radius:8px;background:#07131b}.junction-truth>span{display:flex;align-items:center;gap:5px;color:#758a91;font-size:7.5px;white-space:nowrap}.junction-truth>span i{width:7px;height:7px;border-radius:50%;background:#45b7e7}.junction-truth .official i{background:#65d6aa}.junction-truth .modeled i{background:#bf89ff}.junction-truth b{color:#9eb0b4;font-size:7px}.junction-truth p{margin:0 0 0 auto;color:#6a7d84;font-size:7.5px;text-align:right}.junction-kpis{grid-template-columns:repeat(6,minmax(0,1fr));margin-top:7px}.junction-stage{margin-top:7px;display:grid;grid-template-columns:minmax(520px,1.15fr) minmax(460px,.85fr);gap:7px}.junction-stage>article,.junction-lower>article{min-width:0;border:1px solid rgba(166,195,204,.1);border-radius:9px;background:#08151d;overflow:hidden}.junction-stage>article>header,.junction-lower>article>header{min-height:48px;padding:8px 11px;display:flex;align-items:center;justify-content:space-between;gap:10px;border-bottom:1px solid rgba(166,195,204,.08);background:linear-gradient(115deg,#0b1a23,#091720)}.junction-stage header small,.junction-stage header h3,.junction-lower header small,.junction-lower header h3{display:block}.junction-stage header small,.junction-lower header small{color:#637981;font-size:7px;font-weight:800;letter-spacing:.5px}.junction-stage header h3,.junction-lower header h3{margin:3px 0 0;color:#c5d2d5;font-size:11px}.junction-stage header button{padding:6px 8px;border:1px solid rgba(101,214,170,.2);border-radius:5px;color:#65d6aa;background:rgba(101,214,170,.04);font:700 7px Roboto,sans-serif;cursor:pointer}.junction-map-card{position:relative}.junction-map-card #junction-map{height:420px}.junction-map-legend{position:absolute;left:9px;bottom:9px;padding:6px 8px;display:flex;align-items:center;gap:6px;border:1px solid rgba(166,195,204,.13);border-radius:6px;color:#71868d;background:rgba(6,17,24,.9);font-size:7px}.junction-map-legend>span{display:inline-flex;align-items:center;gap:4px;color:#8fa1a6;font-weight:800}.junction-map-legend i{width:17px;height:3px;border-radius:3px}.junction-map-legend .malla{display:inline-block;background:linear-gradient(90deg,#65d6aa 0 48%,#55b6e7 52% 100%);box-shadow:0 0 5px rgba(101,214,170,.28)}.junction-map-legend .free{background:#65d6aa}.junction-map-legend .dense{background:#f0a84f}.junction-map-legend .critical{background:#ef6179}.junction-map-legend b{margin-left:4px;color:#728890;font-size:6.8px}.junction-schematic-card>div{position:relative;height:420px}.junction-schematic-card canvas{width:100%;height:100%;display:block}.junction-schematic-card>footer{padding:8px 10px;border-top:1px solid rgba(166,195,204,.07);color:#667b82;font-size:7.5px}.junction-schematic-card header>span{color:#729087;font-size:7px}.junction-tooltip{z-index:4}.junction-lower{margin-top:7px;display:grid;grid-template-columns:minmax(410px,.9fr) minmax(500px,1.1fr);gap:7px}.junction-approaches-card>div{height:360px;padding:7px;display:grid;grid-template-columns:1fr 1fr;gap:6px;align-content:start;overflow:auto;scrollbar-width:thin}.junction-approaches-card>div>article{border:1px solid rgba(166,195,204,.08);border-left:3px solid #526b74;border-radius:7px;background:#07141c;overflow:hidden}.junction-approaches-card>div>article.free{border-left-color:#65d6aa}.junction-approaches-card>div>article.dense{border-left-color:#f0a84f}.junction-approaches-card>div>article.critical{border-left-color:#ef6179}.junction-approaches-card article>header{padding:7px 8px;display:flex;align-items:center;justify-content:space-between;background:#091820}.junction-approaches-card article>header span b,.junction-approaches-card article>header span small{display:block}.junction-approaches-card article>header b{color:#c5d2d4;font-size:10px}.junction-approaches-card article>header small{margin-top:2px;color:#6c8289;font-size:7px}.junction-approaches-card article>header em{padding:4px 6px;border-radius:5px;color:#9db1b5;background:rgba(255,255,255,.03);font-size:7px;font-style:normal}.junction-approaches-card article>div{display:grid;grid-template-columns:repeat(3,1fr)}.junction-approaches-card article>div>span{padding:6px 7px;border-right:1px solid rgba(166,195,204,.06);border-bottom:1px solid rgba(166,195,204,.06)}.junction-approaches-card article>div>span:nth-child(3n){border-right:0}.junction-approaches-card article>div small,.junction-approaches-card article>div strong{display:block}.junction-approaches-card article>div small{color:#60767e;font-size:6.5px}.junction-approaches-card article>div strong{margin-top:3px;color:#aebfc2;font-size:9px}.junction-approaches-card article>div i{color:#667d84;font-size:6px;font-style:normal}.junction-approaches-card article>footer{padding:6px 8px;display:flex;justify-content:space-between;gap:8px;color:#677c83;font-size:6.8px}.junction-approaches-card article>footer b{color:#7c9198;font-weight:500}.junction-matrix-card .junction-matrix-scroll{height:360px;overflow:auto;scrollbar-width:thin}.junction-matrix-card table{width:100%;border-collapse:separate;border-spacing:0;font-size:7px}.junction-matrix-card th{position:sticky;top:0;z-index:2;padding:7px;border-right:1px solid rgba(166,195,204,.07);border-bottom:1px solid rgba(166,195,204,.08);color:#71878e;background:#0a1921;text-align:left}.junction-matrix-card tbody th{left:0;z-index:1;min-width:90px}.junction-matrix-card th b,.junction-matrix-card th small{display:block}.junction-matrix-card th b{color:#aebfc2;font-size:8px}.junction-matrix-card th small{margin-top:2px;font-size:6px}.junction-matrix-card td{min-width:108px;padding:3px;border-right:1px solid rgba(166,195,204,.05);border-bottom:1px solid rgba(166,195,204,.05)}.junction-matrix-card td.empty{color:#435860;text-align:center}.junction-matrix-card td button{width:100%;padding:6px;border:1px solid transparent;border-radius:5px;color:#778c93;background:#0a1921;text-align:left;cursor:pointer}.junction-matrix-card td button:hover,.junction-matrix-card td button.selected{border-color:rgba(255,255,255,.25);background:#0e222c}.junction-matrix-card td button.free{box-shadow:inset 2px 0 #65d6aa}.junction-matrix-card td button.dense{box-shadow:inset 2px 0 #f0a84f}.junction-matrix-card td button.critical{box-shadow:inset 2px 0 #ef6179}.junction-matrix-card td small,.junction-matrix-card td strong,.junction-matrix-card td span{display:block}.junction-matrix-card td small{overflow:hidden;font-size:6.5px;text-overflow:ellipsis;white-space:nowrap}.junction-matrix-card td strong{margin-top:3px;color:#b8c7ca;font-size:9px}.junction-matrix-card td i{font-size:6px;font-style:normal}.junction-matrix-card td span{margin-top:2px;font-size:6.5px}.junction-matrix-card>footer{padding:7px 9px;color:#687d84;background:#07131b;font-size:7px}.junction-ranking-card>div{height:330px;overflow:auto;scrollbar-width:thin}.junction-ranking-card button{width:100%;padding:7px 8px;display:grid;grid-template-columns:24px minmax(0,1fr) 38px;gap:7px;align-items:center;border:0;border-bottom:1px solid rgba(166,195,204,.06);color:inherit;background:transparent;text-align:left;cursor:pointer}.junction-ranking-card button:hover,.junction-ranking-card button.active{background:rgba(101,214,170,.04)}.junction-ranking-card button>b{color:#536b73;font-size:8px}.junction-ranking-card button span strong,.junction-ranking-card button span small{display:block;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.junction-ranking-card button span strong{color:#b6c5c8;font-size:8.5px}.junction-ranking-card button span small{margin-top:3px;color:#687e85;font-size:7px}.junction-ranking-card button>em{padding:5px 4px;border-radius:5px;color:#88a19a;background:rgba(101,214,170,.06);font-size:8px;font-style:normal;text-align:center}.junction-ranking-card button.dense>em{color:#d8ac68;background:rgba(240,168,79,.08)}.junction-ranking-card button.critical>em{color:#df8492;background:rgba(239,97,121,.08)}.junction-detail-card>div{min-height:330px;padding:10px}.junction-detail-score{padding:8px;display:flex;align-items:center;justify-content:space-between;border-radius:7px;background:#07141c}.junction-detail-score small,.junction-detail-score strong{display:block}.junction-detail-score small{color:#667c83;font-size:7px}.junction-detail-score strong{margin-top:3px;color:#d3dfe1;font-size:18px}.junction-detail-score em{padding:7px 9px;border-radius:6px;font-size:8px;font-style:normal}.junction-detail-score em.free{color:#65d6aa;background:rgba(101,214,170,.08)}.junction-detail-score em.dense{color:#f0a84f;background:rgba(240,168,79,.08)}.junction-detail-score em.critical{color:#ef6179;background:rgba(239,97,121,.08)}.junction-detail-card dl{margin:8px 0 0;display:grid;grid-template-columns:1fr 1fr;border:1px solid rgba(166,195,204,.08);border-radius:7px;overflow:hidden}.junction-detail-card dl>div{padding:7px 8px;border-right:1px solid rgba(166,195,204,.06);border-bottom:1px solid rgba(166,195,204,.06)}.junction-detail-card dl>div:nth-child(2n){border-right:0}.junction-detail-card dt{color:#657b83;font-size:6.8px}.junction-detail-card dd{margin:3px 0 0;color:#adbdc0;font-size:8px}.junction-detail-card aside{margin-top:8px;padding:8px;border-left:2px solid #bf89ff;background:rgba(191,137,255,.035)}.junction-detail-card aside b,.junction-detail-card aside span{display:block}.junction-detail-card aside b{color:#aa89c8;font-size:7px}.junction-detail-card aside span{margin-top:3px;color:#81758a;font-size:7px}.junction-detail-card>footer{padding:8px 10px;color:#667b82;background:#07131b;font-size:7px}.junction-detail-card header>span{padding:4px 6px;border-radius:5px;color:#b38bd6;background:rgba(191,137,255,.07);font-size:6.5px}.junction-detail-card header>span.validated{color:#65d6aa;background:rgba(101,214,170,.07)}.junction-map-popup small,.junction-map-popup strong,.junction-map-popup span{display:block}.junction-map-popup small{color:#617d74;font-size:8px}.junction-map-popup strong{margin-top:4px;color:#173b3c;font-size:10px}.junction-map-popup span{margin-top:4px;color:#5f747a;font-size:8px}
@media(max-width:1450px){.junction-query{grid-template-columns:minmax(160px,1fr) minmax(260px,1.6fr) minmax(120px,.8fr)}.junction-stage{grid-template-columns:1fr}.junction-map-card #junction-map,.junction-schematic-card>div{height:380px}}
@media(max-width:1100px){.junction-query{grid-template-columns:1fr 1.5fr 1fr}.junction-kpis{grid-template-columns:repeat(3,1fr)}.junction-lower{grid-template-columns:1fr}.junction-approaches-card>div{height:auto;max-height:430px}.junction-matrix-card .junction-matrix-scroll{height:420px}}
@media(max-width:700px){.junction-query,.junction-kpis,.junction-approaches-card>div{grid-template-columns:1fr}.junction-truth{align-items:flex-start;flex-direction:column}.junction-truth p{margin-left:0;text-align:left}.junction-map-card #junction-map,.junction-schematic-card>div{height:330px}}
@media print{body.cam-platform .junction-query{display:none!important}body.cam-platform .junction-stage,body.cam-platform .junction-lower{display:grid!important;grid-template-columns:1fr!important}body.cam-platform .junction-map-card #junction-map,body.cam-platform .junction-schematic-card>div{height:105mm!important}body.cam-platform .junction-approaches-card>div,body.cam-platform .junction-matrix-card .junction-matrix-scroll,body.cam-platform .junction-ranking-card>div{height:auto!important;max-height:none!important;overflow:visible!important}}

/* Inventario maestro de intersecciones y glorietas */
.junction-query{grid-template-columns:minmax(170px,1.2fr) minmax(170px,1.2fr) minmax(130px,.75fr) minmax(150px,.8fr) minmax(230px,1.4fr) minmax(125px,.72fr);grid-template-areas:"search search type direction element element" "datefrom dateto timefrom timeto metric run"}
.junction-search{grid-area:search}.junction-asset-type{grid-area:type}.junction-directionality{grid-area:direction}.junction-select{grid-area:element}.junction-date-from{grid-area:datefrom}.junction-date-to{grid-area:dateto}.junction-time-from{grid-area:timefrom}.junction-time-to{grid-area:timeto}.junction-metric{grid-area:metric}.junction-run{grid-area:run}
.junction-schematic-viewport{position:relative;height:420px;overflow:hidden;touch-action:none;user-select:none}.junction-schematic-card canvas{cursor:grab}.junction-schematic-card canvas.dragging{cursor:grabbing!important}.junction-schematic-controls{position:absolute;z-index:5;top:10px;right:10px;padding:4px;display:flex;align-items:center;gap:3px;border:1px solid rgba(166,195,204,.16);border-radius:8px;background:rgba(5,17,24,.9);box-shadow:0 6px 22px rgba(0,0,0,.2);backdrop-filter:blur(10px)}.junction-schematic-controls button{width:28px;height:28px;padding:0;border:1px solid rgba(101,214,170,.16)!important;border-radius:5px;color:#79dfb6!important;background:rgba(101,214,170,.045)!important;font:800 14px Roboto,sans-serif!important}.junction-schematic-controls button:last-child{margin-left:3px;color:#b7c8cb!important}.junction-schematic-controls output{min-width:42px;color:#9cafb3;font:700 8px Roboto,sans-serif;text-align:center}.junction-schematic-hint{position:absolute;z-index:3;left:10px;bottom:10px;padding:5px 7px;border:1px solid rgba(166,195,204,.09);border-radius:5px;color:#698087;background:rgba(5,17,24,.78);font:700 6.5px Roboto,sans-serif;letter-spacing:.3px;pointer-events:none;backdrop-filter:blur(7px)}
.junction-inventory-context{margin-top:7px;border:1px solid rgba(166,195,204,.1);border-radius:9px;background:linear-gradient(115deg,#081820,#07141c);overflow:hidden}
.junction-inventory-context>p{margin:0;padding:10px;color:#6d8289;font-size:8px}
.junction-inventory-context>header{padding:8px 10px;display:flex;align-items:center;gap:9px;border-bottom:1px solid rgba(166,195,204,.07)}
.junction-inventory-context>header>span{padding:5px 7px;border-radius:5px;color:#65d6aa;background:rgba(101,214,170,.08);font-size:7px;font-weight:800;letter-spacing:.4px}
.junction-inventory-context>header>span.roundabout{color:#f0a84f;background:rgba(240,168,79,.09)}
.junction-inventory-context>header div{min-width:0}.junction-inventory-context>header small,.junction-inventory-context>header strong{display:block;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.junction-inventory-context>header small{color:#60777f;font-size:6.7px}.junction-inventory-context>header strong{margin-top:3px;color:#bdcbce;font-size:9px}
.junction-inventory-context>header em{margin-left:auto;padding:5px 7px;border-radius:5px;color:#89a49b;background:rgba(101,214,170,.05);font-size:6.8px;font-style:normal;white-space:nowrap}
.junction-inventory-context>div{display:grid;grid-template-columns:repeat(4,minmax(0,1fr))}
.junction-inventory-context article{min-width:0;padding:7px 9px;border-right:1px solid rgba(166,195,204,.06);border-bottom:1px solid rgba(166,195,204,.05)}
.junction-inventory-context article:nth-child(4n){border-right:0}.junction-inventory-context article small,.junction-inventory-context article strong{display:block}
.junction-inventory-context article small{color:#60777f;font-size:6.4px}.junction-inventory-context article strong{margin-top:3px;color:#aebfc2;font-size:7.8px;line-height:1.35}
.junction-inventory-context>footer{padding:7px 10px;display:flex;gap:18px;color:#667c83;background:#07131b;font-size:6.8px}.junction-inventory-context>footer b{color:#95aaa5}
@media(max-width:1450px){.junction-query{grid-template-columns:repeat(3,minmax(0,1fr));grid-template-areas:"search search search" "type direction element" "datefrom dateto timefrom" "timeto metric run"}.junction-inventory-context>div{grid-template-columns:repeat(2,minmax(0,1fr))}.junction-inventory-context article:nth-child(2n){border-right:0}}
@media(max-width:1100px){.junction-query{grid-template-columns:repeat(2,minmax(0,1fr));grid-template-areas:"search search" "type direction" "element element" "datefrom dateto" "timefrom timeto" "metric run"}}
@media(max-width:700px){.junction-query{grid-template-columns:1fr;grid-template-areas:"search" "type" "direction" "element" "datefrom" "dateto" "timefrom" "timeto" "metric" "run"}.junction-inventory-context>div{grid-template-columns:1fr}.junction-inventory-context article{border-right:0}.junction-inventory-context>footer{align-items:flex-start;flex-direction:column;gap:5px}.junction-schematic-hint{display:none}}
.junction-kpis{grid-template-columns:repeat(7,minmax(125px,1fr));overflow-x:auto}.junction-kpi-direction{box-shadow:inset 0 2px #60747c}.junction-kpi-direction.bidirectional{box-shadow:inset 0 2px #65d6aa}.junction-kpi-direction.unidirectional{box-shadow:inset 0 2px #ef6179}.junction-kpi-direction.mixed{box-shadow:inset 0 2px #f0a84f}.junction-direction-badge,.junction-flow-badge{display:inline-flex!important;align-items:center;width:max-content;padding:3px 5px;border-radius:4px;color:#91a5aa;background:rgba(145,165,170,.08);font-size:6.4px!important;font-weight:800;letter-spacing:.15px}.junction-direction-badge.bidirectional,.junction-flow-badge.bidirectional{color:#65d6aa;background:rgba(101,214,170,.09)}.junction-direction-badge.unidirectional,.junction-flow-badge.unidirectional{color:#ef7f91;background:rgba(239,97,121,.09)}.junction-direction-badge.mixed,.junction-flow-badge.mixed{color:#f0b769;background:rgba(240,168,79,.09)}.junction-approaches-card article>header .junction-flow-badge{margin:0 6px 0 auto;white-space:nowrap}.junction-map-legend u{color:#f7fbfb;font-size:10px;font-weight:900;text-decoration:none;transform:translateY(-1px)}
@media(max-width:1100px){.junction-kpis{grid-template-columns:repeat(3,minmax(125px,1fr))}}@media(max-width:700px){.junction-kpis{grid-template-columns:1fr}}

/* Nudos: la Malla digitalizada CM v2 permanece como referencia; el color solo codifica el rol del flujo. */
.junction-map-legend .entry{background:#55b7e7;box-shadow:0 0 6px rgba(85,183,231,.36)}
.junction-map-legend .exit{background:#f0a84f;box-shadow:0 0 6px rgba(240,168,79,.34)}
@media(max-width:1450px){.junction-truth{align-items:flex-start;flex-wrap:wrap}.junction-truth p{flex:1 0 100%;margin:0;text-align:left;line-height:1.45;overflow-wrap:anywhere}}

/* Cockpit de tiempo real: los KPI viven en la cabecera y liberan el lienzo cartográfico. */
body.cam-platform .topbar > .top-live-kpis{
  position:static;
  z-index:auto;
  left:auto;
  right:auto;
  top:auto;
  min-width:400px;
  width:auto;
  max-width:610px;
  height:46px;
  margin-left:auto;
  flex:1 1 520px;
  grid-template-columns:112px repeat(4,minmax(68px,1fr));
  border-color:rgba(166,195,204,.13);
  border-radius:8px;
  background:linear-gradient(115deg,rgba(11,27,37,.96),rgba(8,20,29,.9));
  box-shadow:none;
  backdrop-filter:none;
}
body.cam-platform .topbar > .top-live-kpis[hidden]{display:none!important}
body.cam-platform .topbar > .top-live-kpis article{min-width:0;padding:5px 9px;border-right-color:rgba(166,195,204,.09)}
body.cam-platform .topbar > .top-live-kpis small{overflow:hidden;color:#6d838b;font-size:8px;line-height:1.05;letter-spacing:.38px;text-overflow:ellipsis;white-space:nowrap}
body.cam-platform .topbar > .top-live-kpis strong{margin-top:4px;overflow:hidden;color:#e0eaeb;font-size:15px;line-height:1;text-overflow:ellipsis;white-space:nowrap;font-variant-numeric:tabular-nums}
body.cam-platform .topbar > .top-live-kpis article:not(.source)>span,
body.cam-platform .topbar > .top-live-kpis .source>small,
body.cam-platform .topbar > .top-live-kpis .source>span{display:none}
body.cam-platform .topbar > .top-live-kpis .source{padding:5px 7px}
body.cam-platform .topbar > .top-live-kpis .ops-kpi-mode{margin:0}
body.cam-platform .topbar > .top-live-kpis .ops-kpi-mode select{height:30px;padding-left:8px;border-color:rgba(101,214,170,.22);font-size:9.5px}

/* Sin la franja superpuesta, capas y filtros arrancan en el borde superior del mapa. */
body.cam-platform #view-live .ops-panel-handle{top:10px}
body.cam-platform #view-live .ops-layers{top:10px}
body.cam-platform #view-live .ops-query{top:10px}
body.cam-platform #view-live #live-temporal-form[hidden]~.ops-selection{top:10px}
body.cam-platform #view-live #live-temporal-form:not([hidden])~.ops-selection{top:90px}
body.cam-platform #view-live #live-temporal-form:has(.ops-query-pane.period:not([hidden]))~.ops-selection{top:134px}

@media(max-width:1500px){
  body.cam-platform .topbar{gap:10px}
  body.cam-platform .top-municipality-search{width:min(250px,22vw);margin-left:6px}
  body.cam-platform .topbar > .top-live-kpis{min-width:370px;max-width:520px;flex-basis:440px;grid-template-columns:98px repeat(4,minmax(62px,1fr))}
  body.cam-platform .topbar > .top-live-kpis article{padding-inline:7px}
  body.cam-platform .top-source{display:none}
  body.cam-platform .top-help{width:40px;padding:0 5px;display:grid;grid-template-columns:28px;flex:0 0 40px}
  body.cam-platform .top-help>div{display:none}
}
@media(max-width:1120px){
  body.cam-platform .top-municipality-search{width:min(220px,24vw)}
  body.cam-platform .topbar > .top-live-kpis{min-width:300px;grid-template-columns:94px repeat(3,minmax(62px,1fr))}
  body.cam-platform .topbar > .top-live-kpis article:last-child{display:none}
}
@media(max-width:900px){
  body.cam-platform .top-municipality-search{display:none!important}
  body.cam-platform .topbar > .top-live-kpis{min-width:0;max-width:none;margin-left:4px;grid-template-columns:92px repeat(2,minmax(62px,1fr))}
  body.cam-platform .topbar > .top-live-kpis article:nth-child(n+4){display:none}
}
@media(max-width:640px){
  body.cam-platform .topbar > .top-live-kpis{height:42px;grid-template-columns:82px repeat(2,minmax(55px,1fr))}
  body.cam-platform .topbar > .top-live-kpis article{padding:4px 6px}
  body.cam-platform .topbar > .top-live-kpis small{font-size:7px}
  body.cam-platform .topbar > .top-live-kpis strong{font-size:13px}
  body.cam-platform .topbar > .top-live-kpis .ops-kpi-mode select{height:27px;font-size:8px}
  body.cam-platform #view-live .ops-layers{top:10px}
  body.cam-platform #view-live .ops-query{top:10px}
  body.cam-platform #view-live .ops-panel-handle-layers,
  body.cam-platform #view-live .ops-panel-handle-filters{top:10px}
}

/* Priorización de inversiones · ponderación multicriterio y radar */
body.cam-platform .maintenance-weight-card{grid-column:1/13;overflow:visible}
body.cam-platform .maintenance-weight-layout{display:grid;grid-template-columns:minmax(430px,1.05fr) minmax(430px,.95fr);gap:0;border-top:1px solid rgba(166,195,204,.08)}
body.cam-platform .maintenance-weight-controls{min-width:0;padding:14px 16px 12px;border-right:1px solid rgba(166,195,204,.08);background:linear-gradient(145deg,rgba(101,214,170,.025),rgba(7,19,27,0) 62%)}
body.cam-platform .maintenance-weight-presets{display:flex;align-items:center;gap:7px;flex-wrap:wrap;margin-bottom:13px}
body.cam-platform .maintenance-weight-presets>span{margin-right:3px;color:#6f848b;font:800 8px Roboto,sans-serif;letter-spacing:.55px}
body.cam-platform .maintenance-weight-presets button{min-height:29px;padding:0 10px;border:1px solid rgba(166,195,204,.13);border-radius:999px;color:#91a5aa;background:#0a1921;font:700 8.5px Roboto,sans-serif;cursor:pointer;transition:.18s ease}
body.cam-platform .maintenance-weight-presets button:hover,body.cam-platform .maintenance-weight-presets button.active{border-color:rgba(101,214,170,.5);color:#8ce5c8;background:rgba(101,214,170,.09);box-shadow:0 0 0 3px rgba(101,214,170,.025)}
body.cam-platform .maintenance-weight-sliders{display:grid;grid-template-columns:1fr;gap:10px}
body.cam-platform .maintenance-weight-sliders label{display:grid;grid-template-columns:minmax(145px,.75fr) minmax(180px,1.25fr) 80px;align-items:center;gap:12px;padding:7px 9px;border:1px solid rgba(166,195,204,.075);border-radius:7px;background:rgba(5,17,24,.55)}
body.cam-platform .maintenance-weight-sliders label>span{display:flex;align-items:baseline;justify-content:space-between;gap:7px;min-width:0}
body.cam-platform .maintenance-weight-sliders b{overflow:hidden;color:#bdcdd0;font:700 10px Roboto,sans-serif;text-overflow:ellipsis;white-space:nowrap}
body.cam-platform .maintenance-weight-sliders em{color:#74d7b8;font:800 10px Roboto,sans-serif;font-style:normal;white-space:nowrap}
body.cam-platform .maintenance-weight-sliders small{color:#697f86;font:500 8px Roboto,sans-serif;text-align:right;white-space:nowrap}
body.cam-platform .maintenance-weight-sliders input[type=range]{width:100%;height:4px;margin:0;accent-color:#65d6aa;cursor:pointer}
body.cam-platform .maintenance-weight-controls>footer{margin:13px -16px -12px;padding:10px 16px;display:flex;align-items:center;justify-content:space-between;gap:14px;border-top:1px solid rgba(166,195,204,.07);color:#6f848b;background:#07131b;font:500 8px Roboto,sans-serif}
body.cam-platform .maintenance-weight-controls>footer span{display:flex;align-items:center;gap:7px}
body.cam-platform .maintenance-weight-controls>footer i{width:6px;height:6px;border-radius:50%;background:#65d6aa;box-shadow:0 0 9px rgba(101,214,170,.75)}
body.cam-platform .maintenance-weight-controls>footer strong{color:#b8c8cb;font-size:9px;text-align:right}
body.cam-platform .maintenance-radar-panel{min-width:0;padding:11px 13px 9px;background:radial-gradient(circle at 50% 45%,rgba(191,137,255,.055),transparent 58%)}
body.cam-platform .maintenance-radar-panel>header{display:flex;align-items:flex-start;justify-content:space-between;gap:12px;padding:0 3px 8px}
body.cam-platform .maintenance-radar-panel>header small{display:block;color:#7e6c96;font:800 7.5px Roboto,sans-serif;letter-spacing:.55px}
body.cam-platform .maintenance-radar-panel>header h4{margin:4px 0 0;color:#c9d5d6;font:700 11px Roboto,sans-serif}
body.cam-platform .maintenance-radar-panel>header>span{padding:4px 6px;border-radius:4px;color:#c9a6ed;background:rgba(191,137,255,.08);font:800 8px Roboto,sans-serif}
body.cam-platform .maintenance-radar-wrap{position:relative;height:330px;min-height:300px}
body.cam-platform .maintenance-radar-wrap canvas{display:block;width:100%;height:100%}
body.cam-platform .maintenance-radar-panel>footer{display:flex;align-items:center;gap:14px;flex-wrap:wrap;padding:8px 3px 0;border-top:1px solid rgba(166,195,204,.07);color:#778b91;font:600 8px Roboto,sans-serif}
body.cam-platform .maintenance-radar-panel>footer span{display:flex;align-items:center;gap:6px}
body.cam-platform .maintenance-radar-panel>footer i{width:18px;height:3px;border-radius:2px}
body.cam-platform .maintenance-radar-panel>footer i.raw{background:#65d6aa}
body.cam-platform .maintenance-radar-panel>footer i.weighted{background:#bf89ff}
body.cam-platform .maintenance-radar-panel>footer strong{margin-left:auto;color:#b5c4c7;font-size:8px}
body.cam-platform .maintenance-contribution{display:block;margin:-4px 12px 7px;color:#61767d;font:600 7px Roboto,sans-serif;text-align:right}

@media(max-width:1180px){body.cam-platform .maintenance-weight-layout{grid-template-columns:1fr}body.cam-platform .maintenance-weight-controls{border-right:0;border-bottom:1px solid rgba(166,195,204,.08)}}
@media(max-width:720px){body.cam-platform .maintenance-weight-sliders label{grid-template-columns:1fr}body.cam-platform .maintenance-weight-sliders small{text-align:left}body.cam-platform .maintenance-weight-controls>footer{align-items:flex-start;flex-direction:column}body.cam-platform .maintenance-radar-wrap{height:300px}}

/* Nudos: el área especializada mantiene su propio desplazamiento vertical. */
body.cam-platform .analysis-main.congestion-active>.junction-workspace:not([hidden]){min-width:0;min-height:0;height:100%;overflow-x:hidden;overflow-y:auto;overscroll-behavior:contain;scrollbar-width:thin;scrollbar-color:#29404b transparent}

/* Nudos: selector inequívoco entre flujos de entrada y de salida. */
body.cam-platform .junction-schematic-card>header{flex-wrap:wrap}
body.cam-platform .junction-flow-selector{margin-left:auto;display:flex;align-items:stretch;gap:4px;padding:3px;border:1px solid rgba(166,195,204,.1);border-radius:7px;background:#06131b}
body.cam-platform .junction-flow-selector button{min-width:104px;height:34px;padding:0 8px;display:flex;align-items:center;gap:7px;border:1px solid transparent!important;border-radius:5px!important;color:#71868d!important;background:transparent!important;box-shadow:none;cursor:pointer;transition:border-color .18s ease,background .18s ease,color .18s ease,transform .18s ease}
body.cam-platform .junction-flow-selector button:hover{transform:translateY(-1px)}
body.cam-platform .junction-flow-selector button i{width:22px;height:22px;display:grid;place-items:center;border:1px solid rgba(85,183,231,.28);border-radius:50%;color:#80d7ff;background:rgba(85,183,231,.08);font:900 13px Roboto,sans-serif;font-style:normal}
body.cam-platform .junction-flow-selector button:last-child i{border-color:rgba(240,168,79,.3);color:#ffc06f;background:rgba(240,168,79,.08)}
body.cam-platform .junction-flow-selector button span,body.cam-platform .junction-flow-selector button b,body.cam-platform .junction-flow-selector button small{display:block;text-align:left}
body.cam-platform .junction-flow-selector button b{color:inherit;font:900 7.5px Roboto,sans-serif;letter-spacing:.45px}
body.cam-platform .junction-flow-selector button small{margin-top:2px;color:#60757c;font:600 6.5px Roboto,sans-serif;letter-spacing:0}
body.cam-platform .junction-flow-selector button.active[data-junction-flow-mode=entry]{border-color:rgba(85,183,231,.5)!important;color:#b9eaff!important;background:rgba(85,183,231,.11)!important;box-shadow:inset 0 0 0 1px rgba(85,183,231,.08),0 0 12px rgba(85,183,231,.06)}
body.cam-platform .junction-flow-selector button.active[data-junction-flow-mode=exit]{border-color:rgba(240,168,79,.5)!important;color:#ffd49a!important;background:rgba(240,168,79,.11)!important;box-shadow:inset 0 0 0 1px rgba(240,168,79,.08),0 0 12px rgba(240,168,79,.06)}
body.cam-platform .junction-flow-selector button.active small{color:currentColor;opacity:.7}
body.cam-platform .junction-schematic-card>header>#junction-schematic-state{flex:1 0 100%;padding-top:5px;text-align:right}
body.cam-platform .junction-schematic-card>footer b:first-child{color:#80d7ff}body.cam-platform .junction-schematic-card>footer b:nth-of-type(2){color:#ffc06f}
@media(max-width:700px){body.cam-platform .junction-flow-selector{width:100%;margin-left:0}body.cam-platform .junction-flow-selector button{flex:1;min-width:0}body.cam-platform .junction-schematic-card>header>#junction-schematic-state{text-align:left}}

/* Centro de calidad y cobertura del producto canónico */
.data-quality-workspace{position:relative;min-width:0;padding:18px 20px 36px;color:#d9e7e9;background:radial-gradient(circle at 76% 0,rgba(52,211,153,.075),transparent 30%),#07121a}
.data-quality-heading .congestion-title>span{border-color:rgba(101,214,170,.42);background:linear-gradient(145deg,rgba(101,214,170,.2),rgba(18,73,67,.25));color:#6ce0b3}
.data-quality-query{display:grid;grid-template-columns:minmax(150px,1.25fr) minmax(120px,.8fr) 90px 90px minmax(220px,1.3fr) minmax(220px,1.3fr) 120px 128px 58px;gap:8px;margin:12px 0;padding:10px;border:1px solid rgba(116,169,178,.18);border-radius:10px;background:rgba(7,23,31,.84);box-shadow:0 16px 42px rgba(0,0,0,.12)}
.data-quality-query label{display:flex;min-width:0;flex-direction:column;gap:5px}.data-quality-query label>span:first-child{color:#5c7b84;font-size:9px;font-weight:800;letter-spacing:.08em}.data-quality-query :is(input,select){width:100%;min-width:0;height:38px;border:1px solid rgba(112,164,173,.2);border-radius:6px;padding:0 10px;color:#d4e4e7;background:#091a23;font:600 11px Roboto,sans-serif}.data-quality-query .date-time-pair{display:grid;grid-template-columns:1fr 82px;gap:5px}.data-quality-query button{min-height:48px;align-self:end;border-radius:6px;font:800 10px Roboto,sans-serif;letter-spacing:.04em}.data-quality-revalidate,.data-quality-export{border:1px solid rgba(101,214,170,.28);color:#79d9b7;background:rgba(20,70,63,.22)}.data-quality-revalidate span,.data-quality-revalidate small{display:block}.data-quality-revalidate small{margin-top:3px;color:#66848b;font-size:8px}.data-quality-export{height:48px}
.data-quality-truth{margin:0 0 10px}.data-quality-kpis{display:grid;grid-template-columns:repeat(6,minmax(0,1fr));margin:0 0 10px;border:1px solid rgba(116,169,178,.16);border-radius:9px;overflow:hidden;background:rgba(8,24,32,.84)}.data-quality-kpis article{min-width:0;padding:12px 14px;border-right:1px solid rgba(116,169,178,.12)}.data-quality-kpis article:last-child{border:0}.data-quality-kpis small,.data-quality-kpis span{display:block;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.data-quality-kpis small{color:#5b7881;font-size:8px;font-weight:800;letter-spacing:.07em}.data-quality-kpis strong{display:block;margin:5px 0 3px;color:#e2eeee;font-size:17px}.data-quality-kpis span{color:#5f7880;font-size:9px}
.data-quality-alerts{margin-bottom:10px;border:1px solid rgba(116,169,178,.15);border-radius:9px;background:rgba(8,24,32,.78)}.data-quality-alerts>header,.data-quality-card>header{display:flex;align-items:center;justify-content:space-between;gap:12px;padding:11px 13px;border-bottom:1px solid rgba(116,169,178,.12)}.data-quality-alerts header small,.data-quality-card header small{color:#55757f;font-size:8px;font-weight:800;letter-spacing:.08em}.data-quality-alerts h3,.data-quality-card h3{margin:3px 0 0;color:#cfe0e3;font-size:12px}.data-quality-alerts header>span,.data-quality-card header>span{color:#63818a;font-size:9px}.data-quality-alerts>div{display:flex;gap:7px;overflow-x:auto;padding:9px}.data-quality-alerts button{display:grid;grid-template-columns:28px minmax(120px,1fr) auto;align-items:center;gap:8px;min-width:205px;border:1px solid rgba(116,169,178,.14);border-radius:7px;padding:7px 9px;color:#bcd0d4;text-align:left;background:rgba(8,29,38,.78)}.data-quality-alerts button>i{display:grid;width:26px;height:26px;place-items:center;border-radius:50%;color:#08151b;font-style:normal;font-size:9px;font-weight:900;background:#66818a}.data-quality-alerts button.warning>i{background:#f2b84b}.data-quality-alerts button.critical>i{background:#ff5a72}.data-quality-alerts button.info>i{background:#66d8b0}.data-quality-alerts button span>*{display:block}.data-quality-alerts button strong{font-size:10px}.data-quality-alerts button small{margin-top:2px;color:#55727b;font-size:7.5px}.data-quality-alerts button b{font-size:15px}.data-quality-alerts p{margin:6px;color:#64818a;font-size:10px}
.data-quality-stage{display:grid;grid-template-columns:minmax(0,1fr) minmax(0,1fr);gap:10px}.data-quality-card{min-width:0;overflow:hidden;border:1px solid rgba(116,169,178,.16);border-radius:9px;background:rgba(8,23,31,.88);box-shadow:0 16px 46px rgba(0,0,0,.12)}.data-quality-map-card{grid-row:span 2}.data-quality-map-card #data-quality-map{height:450px;background:#0a1821}.data-quality-map-legend{display:flex;align-items:center;gap:14px;padding:8px 12px;color:#718c94;font-size:9px}.data-quality-map-legend i{display:inline-block;width:20px;height:4px;margin-right:5px;border-radius:4px}.data-quality-map-legend i.ok{background:#62d8ae}.data-quality-map-legend i.warning{background:#f2b84b}.data-quality-map-legend i.critical{background:#ff526d}.data-quality-map-legend small{margin-left:auto}.data-quality-popup{display:grid;gap:3px;min-width:190px;color:#bcd0d4;font:10px Roboto,sans-serif}.data-quality-popup small{color:#67d8af;font-size:8px;font-weight:800}.data-quality-popup strong{color:#e1edef;font-size:11px}.data-quality-popup em{color:#638089;font-size:8px}
.data-quality-timeline-card>div,.data-quality-profile-card>div{position:relative;height:205px}.data-quality-timeline-card canvas,.data-quality-profile-card canvas{display:block;width:100%;height:100%}.data-quality-tooltip{z-index:8;max-width:300px}.data-quality-table-card{grid-column:1/-1}.data-quality-table{max-height:390px;overflow:auto}.data-quality-table-row{display:grid;grid-template-columns:minmax(220px,1.45fr) 78px 75px 90px 90px 80px minmax(160px,1fr);align-items:center;gap:10px;width:100%;min-height:45px;border:0;border-bottom:1px solid rgba(112,164,173,.1);padding:7px 12px;color:#8da7ad;text-align:left;background:transparent;font:10px Roboto,sans-serif}.data-quality-table-row:not(.head):hover{background:rgba(101,214,170,.055)}.data-quality-table-row.head{position:sticky;top:0;z-index:2;min-height:30px;color:#52717a;background:#0a1b24;font-size:8px;font-weight:800}.data-quality-table-row span>*{display:block}.data-quality-table-row span strong{color:#c6d9dc;font-size:9px}.data-quality-table-row span small{margin-top:3px;color:#56737c;font-size:8px}.data-quality-table-row b{color:#dbe8ea}.data-quality-table-row em{justify-self:start;border:1px solid currentColor;border-radius:9px;padding:2px 6px;font-style:normal;font-size:7.5px;font-weight:800}.data-quality-table-row em.ok{color:#60d2aa}.data-quality-table-row em.warning{color:#e8b249}.data-quality-table-row em.critical{color:#ff6279}
.data-quality-detail-card>header button{width:27px;height:27px;border:1px solid rgba(112,164,173,.18);border-radius:50%;color:#7c9aa1;background:transparent;font-size:18px}.data-quality-detail-card>div{padding:12px}.data-quality-detail-score{display:flex;align-items:center;gap:10px;margin-bottom:10px;padding:10px;border-left:3px solid #64d6ad;background:rgba(101,214,170,.06)}.data-quality-detail-score.warning{border-color:#f2b84b}.data-quality-detail-score.critical{border-color:#ff526d}.data-quality-detail-score>strong{font-size:26px}.data-quality-detail-score span>*{display:block}.data-quality-detail-score b{font-size:10px}.data-quality-detail-score small{margin-top:3px;color:#648089;font-size:8px}.data-quality-detail-card dl{display:grid;grid-template-columns:1fr 1fr;gap:0;margin:0}.data-quality-detail-card dl>div{min-width:0;padding:7px;border-bottom:1px solid rgba(112,164,173,.09)}.data-quality-detail-card dt{color:#587780;font-size:8px}.data-quality-detail-card dd{overflow:hidden;margin:3px 0 0;color:#bcd0d4;font-size:9px;text-overflow:ellipsis}.data-quality-detail-card section{padding:10px 7px}.data-quality-detail-card section>strong{color:#7f9aa1;font-size:9px}.data-quality-detail-flags{display:flex;flex-wrap:wrap;gap:5px;margin-top:7px}.data-quality-detail-flags span{padding:5px 7px;border:1px solid rgba(242,184,75,.2);border-radius:5px;color:#d0bd85;background:rgba(242,184,75,.045);font-size:8px}.data-quality-detail-flags small{display:block;margin-top:2px;color:#685f4b;font-size:6.8px}
.data-quality-jobs-card>div{max-height:330px;overflow:auto}.data-quality-jobs-card>div>div{display:grid;grid-template-columns:minmax(0,1fr) 85px 65px 110px;align-items:center;gap:8px;padding:9px 12px;border-bottom:1px solid rgba(112,164,173,.09);font-size:9px}.data-quality-jobs-card span>*{display:block}.data-quality-jobs-card strong{color:#bfd3d6}.data-quality-jobs-card small{margin-top:3px;color:#5e7b83}.data-quality-jobs-card em{color:#67d8af;font-style:normal;font-weight:800}.data-quality-jobs-card b{color:#d5e4e6}.data-quality-jobs-card time{color:#66828a}.data-quality-jobs-card p{padding:12px;color:#638089;font-size:9px}
.data-quality-operations-card{grid-column:1/-1}.data-quality-operations-card>header button{border:1px solid rgba(101,214,170,.25);border-radius:5px;padding:7px 9px;color:#71ddb5;font-size:8px;font-weight:800;letter-spacing:.04em;background:rgba(101,214,170,.06);cursor:pointer}.data-quality-operations-kpis{display:grid;grid-template-columns:repeat(5,minmax(0,1fr));border-bottom:1px solid rgba(112,164,173,.1)}.data-quality-operations-kpis>span{min-width:0;padding:10px 12px;border-right:1px solid rgba(112,164,173,.09)}.data-quality-operations-kpis small,.data-quality-operations-kpis strong{display:block}.data-quality-operations-kpis small{color:#57757e;font-size:7.5px;font-weight:800;letter-spacing:.05em}.data-quality-operations-kpis strong{margin-top:4px;color:#d4e5e7;font-size:14px}.data-quality-sources{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:1px;background:rgba(112,164,173,.08)}.data-quality-sources article{position:relative;display:grid;grid-template-columns:6px minmax(0,1fr) auto;gap:9px;min-height:92px;padding:11px 12px;background:#0a1922}.data-quality-sources article>i{width:5px;height:100%;border-radius:5px;background:#65d6aa}.data-quality-sources article.delayed>i,.data-quality-sources article.configured>i{background:#f0b74b}.data-quality-sources article.missing>i{background:#ff526d}.data-quality-sources article.pending-feed>i{background:#6c8490}.data-quality-sources article span>*{display:block}.data-quality-sources article strong{color:#c8dadd;font-size:10px;line-height:1.3}.data-quality-sources article span small{margin-top:3px;color:#5f7c84;font-size:7.5px;line-height:1.35}.data-quality-sources article span em{margin-top:7px;color:#789199;font-size:8px;font-style:normal;line-height:1.4}.data-quality-sources article>b{align-self:start;color:#6fdcb3;font-size:8px;text-align:right;white-space:nowrap}.data-quality-sources article.delayed>b,.data-quality-sources article.configured>b{color:#efb64b}.data-quality-sources article.missing>b{color:#ff647b}.data-quality-sources article.pending-feed>b{color:#80969d}.data-quality-sources article>b small{display:block;margin-top:5px;color:#5c7780;font-size:7px;font-weight:500}.data-quality-operations-card>footer{padding:8px 12px;color:#607d85;font-size:8px;line-height:1.45}
.data-quality-runtime-card{grid-column:1/-1}.data-quality-runtime-card>header>span{color:#6fdcb3;font-size:8px;font-weight:900;letter-spacing:.06em}.data-quality-runtime-card>header>span.guarded{color:#efb64b}.data-quality-runtime-kpis{display:grid;grid-template-columns:repeat(5,minmax(0,1fr));border-bottom:1px solid rgba(112,164,173,.1)}.data-quality-runtime-kpis>span{padding:10px 12px;border-right:1px solid rgba(112,164,173,.09)}.data-quality-runtime-kpis small,.data-quality-runtime-kpis strong{display:block}.data-quality-runtime-kpis small{color:#57757e;font-size:7.5px;font-weight:800;letter-spacing:.05em}.data-quality-runtime-kpis strong{margin-top:4px;color:#d4e5e7;font-size:14px}.data-quality-runtime-groups{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:1px;background:rgba(112,164,173,.08)}.data-quality-runtime-groups article{display:grid;grid-template-columns:minmax(0,1fr) 100px auto;align-items:center;gap:12px;padding:13px;background:#0a1922}.data-quality-runtime-groups strong,.data-quality-runtime-groups small{display:block}.data-quality-runtime-groups strong{color:#c8dadd;font-size:10px}.data-quality-runtime-groups small{margin-top:3px;color:#607d85;font-size:8px}.data-quality-runtime-groups article>span{height:5px;overflow:hidden;border-radius:4px;background:rgba(112,164,173,.13)}.data-quality-runtime-groups article>span i{display:block;height:100%;border-radius:inherit;background:#65d6aa}.data-quality-runtime-groups b{color:#80a2aa;font-size:8px;white-space:nowrap}.data-quality-runtime-card>footer{padding:8px 12px;color:#607d85;font-size:8px;line-height:1.45}
[data-theme="light"] .data-quality-workspace{color:#294941;background:radial-gradient(circle at 76% 0,rgba(37,177,134,.09),transparent 30%),#f4f8f7}[data-theme="light"] .data-quality-query,[data-theme="light"] .data-quality-kpis,[data-theme="light"] .data-quality-alerts,[data-theme="light"] .data-quality-card{border-color:rgba(47,103,90,.16);background:rgba(255,255,255,.9);box-shadow:0 14px 40px rgba(46,82,73,.08)}[data-theme="light"] .data-quality-query :is(input,select){border-color:rgba(47,103,90,.18);color:#294b43;background:#fbfdfc}[data-theme="light"] .data-quality-alerts h3,[data-theme="light"] .data-quality-card h3,[data-theme="light"] .data-quality-kpis strong,[data-theme="light"] .data-quality-table-row span strong{color:#294b43}[data-theme="light"] .data-quality-alerts button{color:#405f57;background:#fbfdfc}[data-theme="light"] .data-quality-table-row.head{background:#eef6f3}[data-theme="light"] .data-quality-table-row{color:#58736c}[data-theme="light"] .data-quality-map-card #data-quality-map{background:#e8efed}
[data-theme="light"] .data-quality-sources{background:rgba(47,103,90,.09)}[data-theme="light"] .data-quality-sources article{background:#fbfdfc}[data-theme="light"] .data-quality-sources article strong,[data-theme="light"] .data-quality-operations-kpis strong{color:#294b43}
[data-theme="light"] .data-quality-runtime-groups{background:rgba(47,103,90,.09)}[data-theme="light"] .data-quality-runtime-groups article{background:#fbfdfc}[data-theme="light"] .data-quality-runtime-groups strong,[data-theme="light"] .data-quality-runtime-kpis strong{color:#294b43}
@media(max-width:1450px){.data-quality-query{grid-template-columns:repeat(4,minmax(130px,1fr))}.data-quality-query button{min-height:40px}.data-quality-kpis{grid-template-columns:repeat(3,1fr)}.data-quality-kpis article:nth-child(3){border-right:0}.data-quality-kpis article:nth-child(-n+3){border-bottom:1px solid rgba(116,169,178,.12)}}
@media(max-width:980px){.data-quality-workspace{padding:12px}.data-quality-query{grid-template-columns:1fr 1fr}.data-quality-stage{grid-template-columns:1fr}.data-quality-map-card,.data-quality-table-card,.data-quality-operations-card,.data-quality-runtime-card{grid-column:auto;grid-row:auto}.data-quality-map-card #data-quality-map{height:360px}.data-quality-kpis{grid-template-columns:repeat(2,1fr)}.data-quality-operations-kpis,.data-quality-runtime-kpis{grid-template-columns:repeat(2,1fr)}.data-quality-sources,.data-quality-runtime-groups{grid-template-columns:1fr}.data-quality-table-row{grid-template-columns:minmax(180px,1.4fr) 72px 65px 82px 82px}.data-quality-table-row>*:nth-child(n+6){display:none}}
.load-recovery-panel { position: fixed; right: 16px; bottom: 20px; z-index: 180; box-sizing: border-box; width: min(470px, calc(100vw - 32px)); max-height: 38vh; overflow: auto; padding: 14px; border: 1px solid #766340; border-radius: 14px; background: #102027; color: #e8f0ed; box-shadow: 0 12px 38px #0005; }
.load-recovery-panel[hidden] { display: none; }
.load-recovery-panel > header { display: flex; justify-content: space-between; gap: 12px; padding-bottom: 10px; color: #f0c889; font-size: 13px; }
.load-recovery-panel > header span { font-size: 11px; }
.load-recovery-panel article { display: flex; align-items: center; gap: 14px; padding: 12px 0; border-top: 1px solid #ffffff18; }
.load-recovery-panel article > div { flex: 1; min-width: 0; }
.load-recovery-panel b { font-size: 13px; }
.load-recovery-panel p { margin: 6px 0; font-size: 12px; line-height: 1.45; color: #cad7d4; }
.load-recovery-panel small { display: block; font-size: 11px; line-height: 1.4; color: #a8bdba; overflow-wrap: anywhere; }
.load-recovery-panel button { flex-shrink: 0; padding: 10px 12px; border: 1px solid #68d8b2; border-radius: 8px; background: #183f35; color: #a6f3d8; font: inherit; font-size: 12px; font-weight: 600; cursor: pointer; }
.load-recovery-panel button:focus-visible { outline: 2px solid #e8f0ed; outline-offset: 3px; }
.load-recovery-panel button:disabled { opacity: .65; cursor: wait; }
[data-theme="light"] .load-recovery-panel { background: #fffcf5; color: #172b31; border-color: #c3a16a; box-shadow: 0 12px 38px #1233; }
[data-theme="light"] .load-recovery-panel > header { color: #725016; }
[data-theme="light"] .load-recovery-panel article { border-color: #172b311c; }
[data-theme="light"] .load-recovery-panel p, [data-theme="light"] .load-recovery-panel small { color: #465c60; }
[data-theme="light"] .load-recovery-panel button { background: #e2f5eb; color: #174c3b; border-color: #4b9c7f; }
[data-theme="light"] .load-recovery-panel button:focus-visible { outline-color: #174c3b; }
@media print { .load-recovery-panel { display: none !important; } }

/* Independent analysis sources: compact, truthful, retained in reports. */
.analysis-source-status { display:flex; align-items:center; flex-wrap:wrap; gap:6px 14px; grid-column:1/-1; flex:0 0 auto; padding:9px 12px; border:1px solid #6eaba82d; border-radius:8px; color:#c9dfdb; background:#0d2127; font-size:11px; line-height:1.5; }
.analysis-source-status>strong { font-weight:600; font-size:11px; color:#8ce3c4; }
.analysis-source-status[data-primary="failed"]>strong { color:#f0bb7f; }
.analysis-source-badges { display:flex; flex-wrap:wrap; align-items:center; gap:5px 12px; }
.analysis-source-badge { display:inline-flex; align-items:center; gap:5px; }
.analysis-source-badge i { width:6px; height:6px; border-radius:50%; background:#90aab3; flex-shrink:0; }
.analysis-source-badge.ready i { background:#65d6aa; }
.analysis-source-badge.failed { color:#f0bb7f; }
.analysis-source-badge.failed i { background:#f0bb7f; }
.analysis-source-badge button { padding:2px 7px; border:1px solid #65d6aa75; border-radius:5px; background:transparent; color:#a4edd5; font:inherit; cursor:pointer; }
.analysis-source-badge button:focus-visible { outline:2px solid currentColor; outline-offset:2px; }
[data-theme="light"] .analysis-source-status { color:#43635c; background:#f0f8f5; border-color:#c8ddd5; }
[data-theme="light"] .analysis-source-status>strong,[data-theme="light"] .analysis-source-badge button { color:#156247; }
[data-theme="light"] .analysis-source-badge.failed,[data-theme="light"] .analysis-source-status[data-primary="failed"]>strong { color:#885312; }
@media print { .analysis-source-status { display:flex!important; color:#244138!important; background:#f3f7f5!important; border:1px solid #bbcfc5!important; break-inside:avoid; } .analysis-source-status>strong,.analysis-source-badge { color:#244138!important; } .analysis-source-badge button { display:none!important; } }
