.dashboard-kpis{display:grid;grid-template-columns:repeat(6,minmax(110px,1fr));gap:8px;margin-bottom:13px}.dashboard-kpis>div{display:grid;gap:5px;padding:11px 12px;background:#fff;border:1px solid #e5eeea;border-radius:9px}.dashboard-kpis small{font-size:9px;color:#8a9e96}.dashboard-kpis strong{font-size:17px;color:#315e55}.dashboard-kpis strong.has-alert{color:#b65346}.dashboard-top-grid{display:grid;grid-template-columns:minmax(0,1.35fr) minmax(270px,.65fr);gap:12px;margin-bottom:12px}.dashboard-map-panel,.dashboard-routes-panel,.dashboard-latest-panel{padding:0;overflow:hidden}.dashboard-panel-heading{display:flex;align-items:center;justify-content:space-between;padding:14px 16px;border-bottom:1px solid #edf2f0}.dashboard-panel-heading h2{margin:4px 0 0;font-size:15px;color:#315e55}.dashboard-live{display:flex;align-items:center;gap:5px;color:#4f9a80;font-size:9px}.dashboard-live i{width:6px;height:6px;border-radius:50%;background:#63b78f;box-shadow:0 0 0 3px #e2f2e9}.dashboard-map-panel #dashboard-map{height:390px;width:100%;background:#eef4f1}.dashboard-routes-panel{min-height:390px}.dashboard-route{padding:13px 15px;border-bottom:1px solid #f0f4f2}.dashboard-route:last-child{border-bottom:0}.dashboard-route-head{display:flex;justify-content:space-between;align-items:center;font-size:11px;color:#315e55}.dashboard-route-head span{font-size:10px;color:#5b9380}.dashboard-route-bar{height:7px;border-radius:999px;background:#e9efec;margin:8px 0 6px;overflow:hidden}.dashboard-route-bar i{display:block;height:100%;border-radius:999px;background:#62ad8f}.dashboard-route small{font-size:9px;color:#82938e}.dashboard-table-scroll{overflow:auto}.dashboard-latest-panel table{min-width:900px}.dashboard-latest-panel tbody td small{display:block;margin-top:3px;color:#71848a}.dashboard-reading-state{display:inline-flex;padding:4px 7px;border-radius:999px;font-size:9px;font-weight:650}.dashboard-reading-state.ok{background:#edf7f1;color:#398268}.dashboard-reading-state.alert{background:#fff0ec;color:#b65346}.leaflet-popup-content{font-size:11px;line-height:1.5}@media(max-width:1050px){.dashboard-kpis{grid-template-columns:repeat(3,1fr)}}@media(max-width:760px){.dashboard-top-grid{grid-template-columns:1fr}.dashboard-map-panel #dashboard-map{height:300px}.dashboard-kpis{grid-template-columns:repeat(3,140px);overflow:auto}}
.dashboard-routes-panel table,.dashboard-readers-panel table{min-width:680px}.dashboard-routes-panel tbody td small,.dashboard-readers-panel tbody td small{display:block;margin-top:3px;color:#71848a}.dashboard-pagination{display:flex;align-items:center;justify-content:space-between;gap:8px;padding:10px 13px;border-top:1px solid #edf2f0;color:#82938e;font-size:9px}.dashboard-pagination>div{display:flex;align-items:center;gap:8px}.dashboard-pagination button{width:24px;height:23px;border:1px solid #dce9e4;border-radius:6px;background:#fff;color:#3d7468;cursor:pointer}.dashboard-pagination button:disabled{opacity:.4;cursor:default}.dashboard-pagination strong{color:#557a70;font-weight:600}.dashboard-route-state{display:inline-flex;padding:4px 7px;border-radius:999px;background:#edf5f1;color:#5c8475;font-size:9px;font-weight:650}.dashboard-route-state.en_ejecucion{background:#e8f5ef;color:#318266}.dashboard-route-state.con_pendientes{background:#fff0ec;color:#b65346}.dashboard-pending{color:#b65346;font-weight:700}.dashboard-progress{display:inline-block;width:58px;height:6px;border-radius:999px;background:#e9efec;overflow:hidden;vertical-align:middle;margin-right:4px}.dashboard-progress i{display:block;height:100%;border-radius:999px;background:#62ad8f}
.dashboard-map-marker{display:grid;place-items:center;background:#3f9b7c;border:3px solid #fff;border-radius:50%;box-shadow:0 2px 8px #173d3355;color:#fff;font-size:10px;font-weight:700}.dashboard-map-marker.is-alert{background:#c76c62}
.dashboard-route-row{cursor:pointer}.dashboard-route-row:hover,.dashboard-route-row.is-selected{background:#eef8f4!important}.dashboard-route-row.is-selected td:first-child{box-shadow:inset 3px 0 #43a287}
.dashboard-map-panel .leaflet-control-attribution{display:none!important}
.dashboard-latest-panel th[data-latest-sort]{cursor:pointer;user-select:none}.dashboard-latest-panel th[data-latest-sort]:hover{color:#428c7c!important;background:#f5faf7!important}
