/* Shared module: base — auto-split from the old single styles.css, 54 rule block(s). Do not duplicate class names across files. */

:root{--bg:#f2f7fb;--panel:#fff;--ink:#102235;--muted:#687b8d;--line:#d9e5ee;--primary:#0b6ea8;--primary2:#0a4f7b;--cyan:#16a3b6;--good:#178c5c;--warn:#d28a14;--danger:#c53a42;--sidebar:270px;--top:74px;--shadow:0 12px 30px rgba(15,60,90,.08)}

*{box-sizing:border-box}

html,body{margin:0;height:100%;color:var(--ink);background:linear-gradient(135deg,#eef6fb,#f8fbfd)}

body{overflow:hidden}

button,input,select{font:inherit}

@keyframes toastIn{from{transform:translateY(12px);opacity:0}to{transform:none;opacity:1}}

@media (max-width:900px){
:root{--sidebar:240px}
}

:root{--secura-top:72px;--secura-side:292px;--secura-bg:#061a2b;--secura-bg2:#08243a;--secura-panel:#0b2a43;--secura-line:#123e5a;--secura-cyan:#08b9f0;--secura-text:#e9f6ff;--secura-muted:#8eb1c6}

body{background:#eef6fb;overflow:hidden}

@media (max-width:1050px){
:root{--secura-side:250px}
}

body[data-theme="dark"]{
 --bg:#061521;--panel:#0b2132;--ink:#e8f3f8;--muted:#91aebe;--line:#234052;--primary:#159bc8;--primary2:#0d7ca7;--shadow:0 12px 30px rgba(0,0,0,.22);
 --surface:#0b2132;--surface-2:#0d283a;--border:#234052;
 background:#061521;color:var(--ink)
}

body[data-theme="dark"] input::placeholder,body[data-theme="dark"] textarea::placeholder{color:#6f91a3}

:root{
  --icon3d-top:#ffffff;
  --icon3d-mid:#dff5ff;
  --icon3d-bottom:#8dd7f2;
  --icon3d-edge:#5db7d8;
  --icon3d-shadow:rgba(0,35,58,.34);
  --icon3d-glow:rgba(62,202,244,.28);
}

@keyframes routeDash{to{stroke-dashoffset:-16}}

@keyframes routeFocusFlash{0%,100%{box-shadow:0 0 0 0 rgba(61,205,246,0)}50%{box-shadow:0 0 0 4px rgba(61,205,246,.45)}}

@keyframes routeLabelEditPulse{
  0%,100%{box-shadow:0 5px 15px rgba(0,25,40,.34),0 0 0 0 rgba(255,186,36,.25)!important}
  50%{box-shadow:0 5px 15px rgba(0,25,40,.34),0 0 0 6px rgba(255,186,36,0)!important}
}

:root{
  --platform-font: Tahoma, Arial, "Segoe UI", sans-serif;
}

body{
  font-family:var(--platform-font)!important;
  font-weight:400!important;
  text-rendering:optimizeLegibility;
  -webkit-font-smoothing:antialiased;
  -moz-osx-font-smoothing:grayscale;
}

p,
span,
small,
label,
td,
input,
select,
option,
textarea{
  font-weight:400!important;
}

button,
input,
select,
option,
textarea{
  font-family:var(--platform-font)!important;
}

svg text,
svg tspan{
  font-family:Tahoma, Arial, "Segoe UI", sans-serif!important;
  font-weight:500!important;
}

[style*="font-weight:700"],
[style*="font-weight: 700"],
[style*="font-weight:800"],
[style*="font-weight: 800"],
[style*="font-weight:900"],
[style*="font-weight: 900"]{
  font-weight:500!important;
}

table b,
table strong{
  font-weight:500!important;
}

@keyframes ww77PulseBorder{
  0%{box-shadow:0 0 0 0 rgba(42,190,255,.0)}
  20%{box-shadow:0 0 0 3px rgba(42,190,255,.35)}
  60%{box-shadow:0 0 0 6px rgba(42,190,255,.12)}
  100%{box-shadow:0 0 0 0 rgba(42,190,255,0)}
}

@keyframes pumpSpin{from{transform:rotate(0deg)}to{transform:rotate(360deg)}}

@keyframes pumpPulse{0%,100%{opacity:.35;transform:translateX(0)}50%{opacity:1;transform:translateX(4px)}}

@keyframes pumpBubble{0%{opacity:.15;transform:translate(0,0) scale(.9)}50%{opacity:1;transform:translate(6px,-2px) scale(1.15)}100%{opacity:.2;transform:translate(12px,-4px) scale(.9)}}

@keyframes gateWater{from{stroke-dasharray:6 9;stroke-dashoffset:0}to{stroke-dasharray:6 9;stroke-dashoffset:-30}}

@keyframes gateActuator{from{filter:brightness(1)}to{filter:brightness(1.35)}}

@keyframes v161CriticalPulse{0%,100%{opacity:1;filter:brightness(1);transform:scale(1)}50%{opacity:.58;filter:brightness(1.7);transform:scale(1.035)}}

@keyframes gateBeacon{0%,100%{transform:scale(1);opacity:1}50%{transform:scale(1.16);opacity:.55}}

@keyframes gateSpark{from{transform:translateY(0);filter:brightness(1)}to{transform:translateY(-1px);filter:brightness(1.25)}}

@keyframes gatePour{from{transform:scaleY(.92)}to{transform:scaleY(1.08)}}

@keyframes gateArrowPulse{0%,100%{transform:translateY(0);opacity:.95}50%{transform:translateY(2px);opacity:.55}}

@keyframes sirenPulse{0%,100%{transform:translateY(0);filter:brightness(1)}50%{transform:translateY(-1px);filter:brightness(1.08)}}

body:not([data-theme="dark"]){
  --muted:#51697b;
}

@keyframes v199NumberLift{0%{opacity:.45;transform:translateY(7px) scale(.955);filter:blur(.45px)}38%{opacity:1;transform:translateY(-3px) scale(1.065);filter:blur(0)}72%{transform:translateY(1px) scale(.992)}100%{opacity:1;transform:translateY(0) scale(1);filter:blur(0)}}

@keyframes v199MetricCard{0%{transform:translateY(0) scale(1)}35%{transform:translateY(-3px) scale(1.012)}100%{transform:translateY(0) scale(1)}}

@keyframes v199MetricSweep{0%{transform:translateX(-125%);opacity:0}15%{opacity:1}100%{transform:translateX(125%);opacity:0}}

@keyframes routeAddPulse{0%,100%{opacity:.82}50%{opacity:1}}

@keyframes pendingManholePulse{0%,100%{transform:scale(.94)}50%{transform:scale(1.08)}}

@keyframes mhSensorPickPulse{from{filter:brightness(1)}to{filter:brightness(1.18)}}

@keyframes manholeDryArrowPulse{0%,100%{opacity:.42}50%{opacity:1}}

@keyframes manholeBlockagePulse{0%,100%{transform:scale(.9);box-shadow:0 0 0 0 rgba(239,68,68,.55)}50%{transform:scale(1.08);box-shadow:0 0 0 7px rgba(239,68,68,0)}}

@keyframes legendWetArrow{0%{transform:translateX(5px);opacity:.55}50%{opacity:1}100%{transform:translateX(-5px);opacity:.55}}

@keyframes blockageSegmentPulse{0%,100%{opacity:.38}50%{opacity:.92}}

@keyframes scadaPumpRunning{0%,100%{transform:scale(1)}50%{transform:scale(1.025)}}

@keyframes scadaPumpFlow{0%{opacity:.12;transform:translateX(-3px)}45%{opacity:1}100%{opacity:.08;transform:translateX(5px)}}

@keyframes scadaPumpFault{0%,100%{transform:translateX(0)}50%{transform:translateX(.8px)}}

@keyframes scadaPipeFlowRight{0%{opacity:.18;transform:translateX(-8px) scale(.82)}50%{opacity:1;transform:translateX(1px) scale(1)}100%{opacity:.18;transform:translateX(10px) scale(.82)}}

@keyframes scadaPipeFlowUp{0%{opacity:.18;transform:translateY(8px) scale(.82)}50%{opacity:1;transform:translateY(0) scale(1)}100%{opacity:.18;transform:translateY(-8px) scale(.82)}}

@keyframes scadaFaultLed{0%,45%{opacity:1}46%,100%{opacity:.25}}

@keyframes mapPumpRun{0%,100%{transform:scale(1)}50%{transform:scale(1.06)}}

@keyframes mapPumpFault{0%,100%{transform:scale(1)}50%{transform:scale(.95)}}
