:root{--rail-navy:#12395b;--rail-blue:#1769aa;--rail-blue-soft:#eef5fb;--rail-border:#dce4eb;--rail-text:#22313f;--rail-muted:#687786;--rail-bg:#f4f7fa}html,body{min-height:100%}body{color:var(--rail-text);background:var(--rail-bg);font-family:Inter,system-ui,-apple-system,"Segoe UI",Roboto,Arial,sans-serif}.app-navbar{background:#fff;border-bottom:1px solid var(--rail-border);box-shadow:0 2px 10px rgba(22,48,70,.06)}.navbar-brand{color:var(--rail-navy)!important;line-height:1.1}.navbar-brand strong{display:block;font-size:1rem;letter-spacing:.01em}.navbar-brand small{display:block;color:var(--rail-muted);font-size:.68rem;font-weight:500;margin-top:.15rem}.brand-mark{width:36px;height:36px;border-radius:.55rem;background:var(--rail-navy);color:#fff;display:grid;place-items:center;font-size:.78rem;font-weight:800;letter-spacing:.06em}.navbar-meta{color:var(--rail-muted);font-size:.82rem}.live-indicator{display:inline-flex;align-items:center;gap:.45rem;padding:.38rem .65rem;border:1px solid #b9dfca;background:#f2fbf6;color:#187448;border-radius:50rem;font-size:.75rem;font-weight:700;text-transform:uppercase;letter-spacing:.04em}.live-indicator i{width:.45rem;height:.45rem;border-radius:50%;background:#20a464;box-shadow:0 0 0 3px rgba(32,164,100,.12)}.page-shell{max-width:1920px}.section-eyebrow{color:var(--rail-blue);font-size:.72rem;font-weight:800;text-transform:uppercase;letter-spacing:.11em;margin-bottom:.25rem}.page-title{font-size:1.75rem;font-weight:700;color:var(--rail-navy)}.page-subtitle{color:var(--rail-muted);font-size:.95rem}.metric-card,.panel-card{border:1px solid var(--rail-border);box-shadow:0 3px 12px rgba(31,56,77,.055);border-radius:.75rem}.metric-card .card-body{display:flex;align-items:center;gap:1rem;padding:1.15rem}.metric-icon{width:42px;height:42px;display:grid;place-items:center;flex:0 0 auto;border-radius:.65rem;background:var(--rail-blue-soft);color:var(--rail-blue);font-weight:800}.metric-icon.danger{background:#fff1f1;color:#c93636}.metric-label{color:var(--rail-muted);font-size:.7rem;text-transform:uppercase;letter-spacing:.075em;font-weight:700}.metric-value{font-size:1.9rem;line-height:1.1;font-weight:750;color:var(--rail-navy)}.metric-note{font-size:.74rem;color:#8a97a3;margin-top:.2rem}.dashboard-row{min-height:620px}.panel-card>.card-header{background:#fff;border-bottom:1px solid var(--rail-border);padding:.85rem 1rem;display:flex;align-items:center;justify-content:space-between}.panel-title{display:block;font-weight:700;color:var(--rail-navy);font-size:.93rem}.panel-title+small,.card-header small{display:block;color:var(--rail-muted);font-size:.7rem;margin-top:.1rem}.map-card{min-height:620px;overflow:hidden}.map-card #map{height:calc(100vh - 335px);min-height:540px;background:#e9eef2}.disruptions-card{min-height:620px;max-height:calc(100vh - 225px);overflow:hidden}.operations-feed{overflow:auto;min-height:0;background:#f8fafc}.layer-list label{cursor:pointer;border-color:var(--rail-border);font-size:.88rem;color:#40515f;padding:.78rem 1rem}.layer-list label:hover{background:#f8fafc}.form-check-input:checked{background-color:var(--rail-blue);border-color:var(--rail-blue)}.status-dot{display:inline-block;width:.55rem;height:.55rem;border-radius:50%;margin-top:.35rem;flex:0 0 auto}.status-dot.good{background:#198754}.status-dot.warn{background:#e6a700}.status-dot.bad{background:#dc3545}.health-row{display:flex;gap:.65rem;padding:.75rem 1rem;border-top:1px solid var(--rail-border);background:#fff}.health-row span{min-width:0;flex:1}.health-row b{display:block;text-transform:capitalize;font-size:.82rem}.health-row small{display:block;color:var(--rail-muted);white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.health-row em{font-style:normal;font-weight:700;color:var(--rail-navy)}.coverage-meter>div{height:.45rem;background:#e7edf2;border-radius:50rem;overflow:hidden}.coverage-meter>div span{display:block;height:100%;width:0;background:var(--rail-blue);transition:width .3s}.coverage-meter small{display:block;color:var(--rail-muted);margin-top:.45rem}.intel-tabs{border-bottom:1px solid var(--rail-border);background:#fff}.intel-tabs .nav-link{font-size:.78rem;color:#536574;border-radius:.45rem;padding:.45rem .7rem;border:0}.intel-tabs .nav-link.active{background:var(--rail-navy);color:#fff}.ops-card{margin:.75rem;border:1px solid var(--rail-border);border-left:4px solid #e0a800;border-radius:.65rem;background:#fff;cursor:pointer;transition:box-shadow .15s,transform .15s}.ops-card:hover{box-shadow:0 5px 16px rgba(31,56,77,.1);transform:translateY(-1px)}.ops-card.critical{border-left-color:#c92a2a}.ops-card.high{border-left-color:#e56717}.ops-card.medium{border-left-color:#d9a300}.ops-card.low{border-left-color:#2787b7}.ops-card-inner{padding:.9rem 1rem}.ops-card-top{display:flex;align-items:center;gap:.45rem;margin-bottom:.65rem}.sequence{color:#8a97a3;font-size:.68rem;font-weight:700}.source-tag{font-size:.65rem;background:#edf2f6;color:#526474;padding:.22rem .45rem;border-radius:.28rem;max-width:140px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.severity-chip{font-size:.66rem;margin-left:auto;padding:.25rem .5rem;border-radius:50rem;font-weight:750;background:#f0f2f4;color:#495057}.severity-chip.critical{background:#fee8e8;color:#a41f1f}.severity-chip.high{background:#fff0e5;color:#b64c0b}.severity-chip.medium{background:#fff7d6;color:#7f6200}.severity-chip.low{background:#e8f6fb;color:#17627f}.ops-card h3{font-size:.98rem;line-height:1.35;margin:0 0 .55rem;color:var(--rail-navy);font-weight:700}.alert-summary{font-size:.84rem;line-height:1.55;color:#465865;margin:0}.alert-summary p{margin:0 0 .5rem}.alert-summary p:last-child{margin-bottom:0}.alert-locations{margin-top:.7rem;padding:.55rem .65rem;background:#f6f8fa;border-radius:.4rem;color:#526474;font-size:.76rem;line-height:1.4}.alert-locations strong{color:#354957}.ops-card footer{display:flex;justify-content:space-between;align-items:center;gap:.5rem;margin-top:.75rem;padding-top:.65rem;border-top:1px solid #edf1f4;font-size:.7rem;color:var(--rail-muted)}.ops-card footer b{font-weight:700;color:#526474}.empty-state{text-align:center;padding:3rem 1rem;color:var(--rail-muted)}.empty-state strong,.empty-state span{display:block}.empty-state strong{color:var(--rail-navy);font-size:.9rem}.empty-state span{font-size:.8rem;margin-top:.4rem}.ops-popup{min-width:260px}.ops-popup h3{font-size:1rem;line-height:1.35;margin:.35rem 0;color:var(--rail-navy)}.ops-popup .alert-body{font-size:.82rem;line-height:1.55;color:#425462;margin:.7rem 0}.ops-popup .alert-body p{margin:0 0 .55rem}.ops-popup dl{display:grid;grid-template-columns:auto 1fr;gap:.3rem .75rem;font-size:.76rem;margin:.75rem 0 0;padding-top:.65rem;border-top:1px solid #e5ebef}.ops-popup dt{color:var(--rail-muted);font-weight:600}.ops-popup dd{margin:0;color:#344957}.popup-kicker{font-size:.62rem;text-transform:uppercase;color:var(--rail-blue);font-weight:800;letter-spacing:.08em}.station-icon{width:28px;height:28px;border-radius:50%;display:grid;place-items:center;background:#198754;color:#fff;border:2px solid #fff;box-shadow:0 1px 4px rgba(0,0,0,.35);font-size:.75rem;font-weight:700}.disruption-marker{width:42px;height:42px;border-radius:50%;display:grid;place-items:center;color:#fff;border:3px solid #fff;box-shadow:0 2px 8px rgba(0,0,0,.28);font-weight:800;font-size:1.1rem}.disruption-marker.critical{background:#c92a2a}.disruption-marker.high{background:#e56717}.disruption-marker.medium{background:#d9a300}.disruption-marker.low{background:#2787b7}.asset-icon{display:flex;flex-direction:column;align-items:center}.asset-icon i{width:30px;height:30px;border-radius:50%;display:grid;place-items:center;background:#6f42c1;color:#fff;border:2px solid #fff;box-shadow:0 1px 5px rgba(0,0,0,.3)}.asset-icon svg{width:16px;height:16px;fill:currentColor}.asset-icon span{font-size:.55rem;background:#fff;border:1px solid var(--rail-border);border-radius:.2rem;padding:.1rem .25rem;margin-top:.15rem;color:#212529}.leaflet-popup-content-wrapper,.leaflet-popup-tip{box-shadow:0 4px 18px rgba(0,0,0,.16)}.leaflet-popup-content{margin:14px 16px}.alert-tooltip{font-size:.78rem;font-weight:600}.has-error #statusText{color:#b02a37}.working{opacity:.7}.fault{color:#b02a37!important}#statusbar{border-color:var(--rail-border)!important;background:#fff!important}.btn-primary{background-color:var(--rail-navy);border-color:var(--rail-navy)}.btn-primary:hover{background-color:#0d2e4a;border-color:#0d2e4a}.btn-outline-primary{color:var(--rail-navy);border-color:#9fb2c2}.btn-outline-primary:hover{background:var(--rail-navy);border-color:var(--rail-navy)}@media(max-width:1199.98px){.map-card #map{height:600px}.disruptions-card{max-height:none}.dashboard-row{min-height:0}}@media(max-width:575.98px){.map-card #map{height:500px;min-height:500px}.metric-value{font-size:1.55rem}.metric-card .card-body{padding:.9rem;gap:.7rem}.metric-icon{width:36px;height:36px}.page-title{font-size:1.4rem}}

/* Full-screen operational map layout */
body.dashboard-only{height:100vh;min-height:620px;overflow:hidden;background:#eef3f7}
.dashboard-shell{height:100vh;max-width:none}
.dashboard-layout{height:100%;min-height:0}
.map-column,.alerts-column{height:100%;min-height:0}
.dashboard-only .panel-card{border-radius:.7rem;overflow:hidden}
.dashboard-only .map-card{min-height:0}
.dashboard-only .map-card #map{height:calc(100vh - 78px);min-height:0;width:100%;background:#dcecf5}
.dashboard-only .disruptions-card{min-height:0;max-height:none;display:flex;flex-direction:column}
.dashboard-only .operations-feed{flex:1;min-height:0;overflow-y:auto;scrollbar-gutter:stable}
.dashboard-only .panel-card>.card-header{min-height:66px;padding:.8rem 1rem}
.dashboard-only .panel-title{font-size:1rem}
.dashboard-only .panel-title+small,.dashboard-only .card-header small{text-transform:uppercase;letter-spacing:.035em;font-size:.67rem}
.live-indicator.compact{padding:.35rem .62rem;background:#fff;border-color:var(--rail-border);color:#243646}
.refresh-map-button{font-size:.73rem;color:var(--rail-navy);background:#fff}
.dashboard-only .leaflet-container{font-family:inherit}
.dashboard-only .leaflet-control-zoom{border:0!important;box-shadow:0 2px 8px rgba(22,48,70,.18)!important}
.dashboard-only .leaflet-control-zoom a{border-color:var(--rail-border)!important;color:#111;background:#fff}
.dashboard-only .leaflet-control-scale-line{background:rgba(255,255,255,.9);border-color:#45525c;color:#1b2832}
@media(min-width:1200px){
 body.dashboard-only{min-height:560px}
 .dashboard-only .map-card #map{height:calc(100vh - 86px)}
}
@media(max-width:1199.98px){
 body.dashboard-only{height:auto;min-height:100vh;overflow:auto}
 .dashboard-shell{height:auto;min-height:100vh}
 .dashboard-layout{height:auto}
 .map-column{height:auto}
 .alerts-column{height:680px}
 .dashboard-only .map-card #map{height:72vh;min-height:560px}
}
@media(max-width:575.98px){
 .dashboard-only .map-card #map{height:65vh;min-height:460px}
 .alerts-column{height:620px}
 .dashboard-only .panel-card>.card-header{min-height:60px}
}


/* Navbar restoration and popup stacking fix */
.dashboard-navbar{position:relative;z-index:1100;min-height:62px;flex:0 0 auto}
body.dashboard-only.with-navbar{display:flex;flex-direction:column;height:100vh;min-height:620px}
body.dashboard-only.with-navbar .dashboard-shell{height:auto;flex:1;min-height:0}
body.dashboard-only.with-navbar .dashboard-layout,
body.dashboard-only.with-navbar .map-column,
body.dashboard-only.with-navbar .alerts-column{height:100%;min-height:0}
body.dashboard-only.with-navbar .map-card #map{height:calc(100vh - 148px)}

/* Always keep open information boxes above disruption and cluster icons. */
.dashboard-only .leaflet-popup-pane{z-index:1000!important}
.dashboard-only .leaflet-tooltip-pane{z-index:1010!important}
.dashboard-only .leaflet-popup{z-index:1000!important}
.dashboard-only .leaflet-marker-pane,
.dashboard-only .leaflet-shadow-pane{z-index:auto}

@media(max-width:1199.98px){
 body.dashboard-only.with-navbar{height:auto;min-height:100vh;overflow:auto}
 body.dashboard-only.with-navbar .dashboard-shell{height:auto;min-height:0;flex:none}
 body.dashboard-only.with-navbar .map-card #map{height:72vh;min-height:560px}
}
@media(max-width:767.98px){
 .dashboard-navbar .navbar-brand small{display:none}
 .dashboard-navbar .navbar-brand strong{font-size:.9rem}
 .dashboard-navbar .brand-mark{width:32px;height:32px}
}
@media(max-width:575.98px){
 .dashboard-navbar .navbar-brand span:last-child{display:none}
 body.dashboard-only.with-navbar .map-card #map{height:65vh;min-height:460px}
}

/* TfL Tube, London Trams and IFS Cloud Cable Car overlay */
.tfl-map-legend{display:grid;gap:.28rem;padding:.55rem .65rem;background:rgba(255,255,255,.94);border:1px solid var(--rail-border);border-radius:.45rem;box-shadow:0 2px 8px rgba(22,48,70,.14);font-size:.68rem;color:#334655}
.tfl-map-legend strong{font-size:.7rem;color:var(--rail-navy);margin-bottom:.05rem}
.tfl-map-legend span{display:flex;align-items:center;gap:.4rem;white-space:nowrap}
.tfl-map-legend i{display:inline-block;width:22px;height:4px;border-radius:4px;background:#003688}
.tfl-map-legend i.tram{background:#84b817}
.tfl-map-legend i.cable{background:#e21836}
@media(max-width:575.98px){.tfl-map-legend{display:none}}

/* Bootstrap admin asset editor */
.admin-filter-bar{display:grid;grid-template-columns:minmax(240px,1fr) 130px 140px;gap:.5rem;min-width:min(100%,600px)}
.metric-card{height:100%;padding:1rem 1.1rem;background:#fff}
.admin-assets-table thead th{font-size:.7rem;text-transform:uppercase;letter-spacing:.055em;color:var(--rail-muted);background:#f8fafc;border-bottom-color:var(--rail-border);white-space:nowrap}
.admin-assets-table td{font-size:.84rem;border-color:#edf1f4;padding:.8rem 1rem}
.asset-address{max-width:440px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.asset-type-badge,.status-pill{display:inline-flex;align-items:center;justify-content:center;border-radius:50rem;font-size:.65rem;font-weight:800;letter-spacing:.04em;padding:.3rem .52rem}
.asset-type-badge{min-width:48px;background:#edf2f6;color:#405566}.asset-type-badge.bwv{background:#f3edfb;color:#6f42c1}.asset-type-badge.cctv{background:#eaf3fb;color:#1769aa}
.status-pill.online{background:#e8f7ef;color:#187448}.status-pill.offline{background:#feecec;color:#aa2d2d}.status-pill.unknown{background:#eef1f3;color:#64717c}
.address-picker{z-index:20}.address-results{top:calc(100% - 1.1rem);z-index:1080;max-height:300px;overflow:auto;background:#fff;border-radius:.5rem}.address-option{text-align:left}.address-option:focus{z-index:2}.address-picker.is-searching .input-group-text{animation:adminPulse .8s infinite alternate}@keyframes adminPulse{to{opacity:.35}}
.modal .address-results{top:calc(100% - 1.1rem)}
@media(max-width:767.98px){.admin-filter-bar{grid-template-columns:1fr 1fr}.admin-filter-bar input{grid-column:1/-1}.admin-assets-table td{padding:.7rem}.asset-address{max-width:220px}}
