.alerts{display:flex;align-items:center;gap:12px;min-height:42px;margin:0 0 9px;padding:9px 12px;border:1px solid #9bd6c2;border-radius:9px;background:#eefaf6;color:#126c50;font-size:.75rem}
.alerts b{white-space:nowrap}.alerts span{color:#456771}.alerts.warn{border-color:#e6bd6d;background:#fff8e9;color:#9a6410}.alerts.critical{border-color:#e7a1a6;background:#fff1f2;color:#b3313c}.alerts.critical span,.alerts.warn span{color:inherit}.alerts .alert-more{margin-left:auto;font-size:.65rem;white-space:nowrap}
.common-pump-row{display:grid;grid-template-columns:150px 1fr 155px 1fr 170px;align-items:center;gap:8px;margin:4px 8% 8px;padding:7px 10px;border:1px solid #cddfe7;border-radius:10px;background:linear-gradient(90deg,#f5fbfd,#eaf7fb,#f5fbfd)}
.manifold-label{display:flex;flex-direction:column;text-align:center;color:#56727f;font-size:.55rem}.manifold-label b{font-size:.66rem;color:var(--text)}
.transfer-pump{padding:5px 7px;border-color:#8dc5da;background:#fff}.transfer-pump svg{width:64px;height:43px;fill:#e7f6fb;stroke:#087fb9;stroke-width:3;stroke-linejoin:round}.transfer-pump.running svg circle{animation:pumpSpin 2.6s linear infinite;transform-origin:39px 34px}.transfer-pump.interlocked{border-color:#e7bd73;background:#fff9ed}.transfer-pump.interlocked svg{stroke:#b77b1d;fill:#fff2ce}
@keyframes pumpSpin{to{transform:rotate(360deg)}}
.ward{cursor:pointer;min-height:77px;padding:3px 2px}.ward img{height:22px}.ward b{font-size:.46rem}.ward .mode-chip{display:inline-block;margin:2px 0 1px;padding:1px 3px;border-radius:4px;background:#dfeef4;color:#4a6e7e;font-size:.38rem;font-style:normal;font-weight:850}.demand-box{margin-top:2px;padding:3px 2px;border-radius:4px;background:#eef4f7;border:1px solid #d8e4e9}.ward.open .demand-box{background:#e8f8f2;border-color:#b2decf}.ward.command-open-no-supply .demand-box,.ward.shortfall .demand-box{background:#fff3dc;border-color:#e5c27f}.ward.fault .demand-box{background:#ffe8ea;border-color:#e8a5aa}.demand-box strong,.demand-box span{display:block;font-size:.39rem;line-height:1.35;white-space:nowrap}.demand-box span{color:#5e7682}
.oht{position:relative}.oht.low-level{border-color:#df9d3e;background:#fffaf0}.oht.trip-level{border-color:#d54b54;background:#fff2f3}.oht .feedback-badge{display:inline-flex;margin:1px 0 2px;padding:2px 5px;border-radius:99px;background:#e8f6fb;color:#087aaa;font-size:.43rem;font-weight:850}.trend.warn{color:#b56f0b}.trend.critical{color:var(--red)}
.level i.low,.gauge i.low{background:linear-gradient(#f1bd53,#db8219)}.level i.critical,.gauge i.critical{background:linear-gradient(#f28a91,#cc3541)}
.control-row select,.control-row input[type=number]{width:100%;margin-top:5px;border:1px solid var(--line);border-radius:6px;background:#fff;padding:6px;color:var(--text)}.control-grid{display:grid;grid-template-columns:1fr 1fr;gap:7px}.schedule-rule{margin-top:9px;padding:8px;border-left:3px solid var(--blue);background:#eef7fb;border-radius:5px;font-size:.65rem;line-height:1.45}.schedule-rule strong{display:block;color:#076f9f}.priority-list{margin:6px 0 0;padding-left:17px;color:var(--muted);font-size:.64rem;line-height:1.55}.state.warn{background:#fff5e5;color:#a76b0d}.state.critical{background:#fff0f1;color:var(--red)}.action:disabled{opacity:.45;cursor:not-allowed}.mini-pill{display:inline-block;padding:2px 6px;border-radius:99px;background:#e8f6fb;color:#087aaa;font-size:.58rem;font-weight:800}.model-note{margin-left:auto}
.pipe.on,.branch-rail.on{animation-duration:5.4s!important}.wardpipe.open:after{animation-duration:5.8s!important}
@media(max-width:1180px){.common-pump-row{margin-left:2%;margin-right:2%}.model-note{display:none}}
@media(max-width:820px){.alerts{align-items:flex-start;flex-direction:column;gap:3px}.alerts .alert-more{margin-left:0}.common-pump-row{grid-template-columns:125px 1fr 145px 1fr 145px}}

/* Revision 11: configurable capacity, pump/valve coordination, equity and pipe hydraulics. */
.layout{grid-template-columns:62px minmax(1120px,1fr) 340px}
.network{overflow-x:auto}.canvas{min-width:1500px;padding:14px}
.metrics{grid-template-columns:repeat(6,1fr)}.controls .equity.active{border-color:#087aaa;background:#e7f6fc;color:#076f9f}
.head h1{font-size:1.35rem}.head p{font-size:.9rem}.controls button{font-size:.86rem}
.metric strong{font-size:1.25rem}.metric span{font-size:.78rem}.network-head{font-size:.95rem}.network-head span{font-size:.82rem}
.label{font-size:.72rem;margin:7px 0 9px}.name{font-size:.84rem}.data{font-size:.72rem;line-height:1.4}.valve .name{font-size:.68rem}
.alerts{font-size:.86rem}.alerts .alert-more{font-size:.75rem}
.route-head{font-size:.7rem}.route-head b{font-size:.82rem}.flow-chip{font-size:.66rem;padding:3px 7px}
.storage-pump-routes{display:grid;grid-template-columns:1fr 1fr;gap:22px;margin:5px 7% 12px}
.pump-route-row{display:grid;grid-template-columns:105px 112px 1fr 165px 1fr 105px;align-items:center;gap:8px;padding:8px 10px;border:1px solid #cddfe7;border-radius:11px;background:linear-gradient(90deg,#f5fbfd,#eaf7fb,#f5fbfd)}
.manifold-label{font-size:.69rem}.manifold-label b{font-size:.82rem}.transfer-pump{padding:7px 9px}.transfer-pump .name{font-size:.8rem}.transfer-pump .data{font-size:.7rem}
.transfer-pump.running{border-color:#64bc9b;background:#edf9f4}.transfer-pump.stopped,.transfer-pump.interlocked{border-color:#df8f96;background:#fff0f1}.transfer-pump.stopped svg,.transfer-pump.interlocked svg{stroke:#bd3540;fill:#ffe3e6}
.storage-route-valve{padding:5px;min-height:76px}.storage-route-valve img{display:block;width:42px;height:46px;margin:0 auto;object-fit:contain}.storage-route-valve .name{font-size:.69rem}.storage-route-valve .data{font-size:.62rem}
.asset.hydraulic-blocked,.asset.stopped{border-color:#df8f96!important;background:#fff0f1!important;filter:none;opacity:1}.asset.hydraulic-blocked .data,.asset.stopped .data{color:#b3313c}
.oht{padding:8px;cursor:default}.oht.selected{border-color:var(--blue)}.oht h3{font-size:.82rem;margin:4px 0}.oht p{font-size:.68rem;margin:2px 0}.oht .feedback-badge{font-size:.58rem;padding:3px 7px}.trend{font-size:.67rem;margin:3px 0 6px}
.level{width:16px;height:66px}.oht-top{height:80px}.oht-top img{width:74px;height:78px}
.level i.green,.gauge i.green{background:linear-gradient(#58d99f,#15966c)}.level i.amber,.gauge i.amber{background:linear-gradient(#ffd069,#db8b19)}.level i.red,.gauge i.red{background:linear-gradient(#f28a91,#c93441)}
.level-status{display:inline-block;margin:2px 0 4px;padding:3px 7px;border-radius:99px;font-size:.6rem;font-weight:900}.level-status.green{background:#e5f7ef;color:#137b58}.level-status.amber{background:#fff3d8;color:#9b6410}.level-status.red{background:#ffe7e9;color:#b42e39}
.outlet-assembly{display:grid;grid-template-columns:38px 1fr;align-items:center;gap:6px;margin:6px 0 3px;padding:5px 7px;border:1px solid #86cbb2;border-radius:7px;background:#edf9f4;cursor:pointer;text-align:left}.outlet-assembly img{width:34px;height:42px;object-fit:contain}.outlet-assembly b,.outlet-assembly span{display:block;font-size:.64rem}.outlet-assembly span{color:#37715f}.outlet-assembly.closed,.outlet-assembly.trip{border-color:#dd8e95;background:#fff0f1}.outlet-assembly.closed span,.outlet-assembly.trip span{color:#b3313c}
.inlet-assembly{display:grid;grid-template-columns:38px 1fr;align-items:center;gap:6px;margin:0 0 3px;padding:5px 7px;border:1px solid #86cbb2;border-radius:7px;background:#edf9f4;cursor:pointer;text-align:left}.inlet-assembly img{width:34px;height:42px;object-fit:contain}.inlet-assembly b,.inlet-assembly span{display:block;font-size:.64rem}.inlet-assembly span{color:#37715f}.inlet-assembly.closed{border-color:#dd8e95;background:#fff0f1}.inlet-assembly.closed span{color:#b3313c}.oht-inlet-pipe{width:14px;height:18px;margin:0 auto 2px;border:2px solid #6093aa;border-radius:6px;background:#dce5e9;position:relative;overflow:hidden}.oht-inlet-pipe.charged{background:linear-gradient(90deg,#9fe5f4,#138fc8 58%,#0878b4)}.oht-inlet-pipe.flowing{background:linear-gradient(90deg,#9fe5f4,#138fc8 58%,#0878b4)}.oht-inlet-pipe.flowing:after{content:"";position:absolute;inset:2px;background:linear-gradient(180deg,transparent 0 42%,rgba(255,255,255,.7) 48%,transparent 54%);background-size:100% 50px;animation:waterDown 5.5s linear infinite}
.outlet-header{height:13px;border:2px solid #5f91a8;border-radius:7px;margin:3px 7px 6px;background:#dce6eb;overflow:hidden;position:relative}.outlet-header.charged,.feed-pipe.charged{background:linear-gradient(#9fe5f4,#138fc8 58%,#0878b4);box-shadow:inset 0 2px rgba(255,255,255,.45)}.outlet-header.flowing,.feed-pipe.flowing,.post-valve.flowing{background:linear-gradient(#9fe5f4,#138fc8 58%,#0878b4);position:relative;overflow:hidden}.outlet-header.flowing:after,.feed-pipe.flowing:after,.post-valve.flowing:after{content:"";position:absolute;inset:2px;background:linear-gradient(100deg,transparent 0 42%,rgba(255,255,255,.55) 48%,transparent 54%);background-size:100px 100%;animation:waterHighlights 5.5s linear infinite}
.wards{display:grid;grid-template-columns:1fr;gap:6px;margin-top:5px}.ward-branch{display:grid;grid-template-columns:22px 50px 21px minmax(74px,1fr);align-items:center;gap:5px;padding:5px;border:1px solid #dce7eb;border-radius:8px;background:#f7fafc}
.feed-pipe,.post-valve{height:13px;border:2px solid #6093aa;border-radius:6px;background:#dce5e9;position:relative;overflow:hidden}.feed-pipe{width:22px}.post-valve{width:21px}.post-valve.closed{border-color:#d89aa0;background:#f6dde0}
.subvalve{min-height:58px;padding:3px;border:1px solid #78c4a8;border-radius:7px;background:#edf9f4;cursor:pointer;text-align:center}.subvalve img{display:block;width:30px;height:34px;margin:0 auto;object-fit:contain}.subvalve b,.subvalve span{display:block;font-size:.58rem;line-height:1.3}.subvalve span{color:#28715a;font-weight:800}.subvalve.closed,.subvalve.fault{border-color:#db868e;background:#fff0f1}.subvalve.closed span,.subvalve.fault span{color:#b3313c}.subvalve.fault{box-shadow:inset 0 0 0 2px #edbec2}
.ward-entity{min-height:58px;padding:6px;border:1px solid #b8d5e1;border-radius:7px;background:#eef7fb;cursor:pointer;text-align:left}.ward-entity:hover,.ward-entity.selected,.subvalve.selected,.outlet-assembly.selected,.inlet-assembly.selected{border-color:var(--blue);box-shadow:0 0 0 2px rgba(7,137,204,.14)}.ward-entity b{display:block;font-size:.69rem}.ward-entity em{display:inline-block;margin:2px 0;padding:2px 4px;border-radius:4px;background:#dcecf3;color:#476d7e;font-size:.52rem;font-style:normal;font-weight:900}.ward-demand{font-size:.58rem;line-height:1.45;color:#526f7d}.ward-demand strong{color:var(--text)}.ward-demand .not-achievable{color:#b3313c;font-size:.54rem}.ward-entity.shortfall{border-color:#d75b64;background:#fff0f1}.ward-entity.no-supply{border-color:#df8f96;background:#fff0f1}
.key i.charged-key{width:25px;border-radius:5px;background:linear-gradient(#9fe5f4,#138fc8 58%,#0878b4)}.key i.level-green{background:#15966c}.key i.level-amber{background:#db8b19}.key i.level-red{background:#c93441}.legend{font-size:.75rem;flex-wrap:wrap;align-items:center}
aside{padding:18px}.eyebrow{font-size:.74rem}.ititle{font-size:1.25rem}.itype{font-size:.85rem}.state{font-size:.86rem}.section h3{font-size:.73rem}.prop{font-size:.84rem;margin:9px 0}.control-row label,.switchline{font-size:.82rem}.schedule-rule,.note{font-size:.76rem}.action{font-size:.84rem;padding:11px}
.state.stopped{background:#fff0f1;color:#b3313c}.state.interlock{border:2px solid #82000d;background:#d4001c;color:#fff;animation:autoInterlockFlash .68s steps(1,end) infinite}.action.danger{background:#c93441;color:#fff}
.auto-interlocked{position:relative;border:3px solid #78000c!important;background:#d4001c;animation:autoInterlockFlash .68s steps(1,end) infinite}.auto-interlocked:after{content:"AUTO";position:absolute;right:3px;top:3px;padding:2px 4px;border-radius:3px;background:#fff;color:#8f0010;font-size:.52rem;font-weight:950;letter-spacing:.04em}.auto-interlocked span,.auto-interlocked .data,.auto-interlocked b,.auto-interlocked .name{color:#fff!important}.auto-interlocked svg{stroke:#fff!important;fill:#a90017!important}
.flow-comparison{display:grid;grid-template-columns:1fr 1fr;gap:8px;margin:12px 0}.flow-comparison>div{padding:10px;border:1px solid #9bd6c2;border-radius:8px;background:#eefaf6}.flow-comparison>div.error{border-color:#e49aa1;background:#fff0f1}.flow-comparison span,.flow-comparison small{display:block;color:var(--muted);font-size:.7rem}.flow-comparison b{display:block;margin:3px 0;font-size:1.05rem}.flow-comparison .error b{color:#b3313c}.delivery-error{margin:8px 0 12px;padding:10px;border-left:4px solid #c93441;border-radius:6px;background:#fff0f1;color:#8d2932;font-size:.76rem;line-height:1.45}.delivery-error strong{display:block;margin-bottom:2px}.key i.interlock-key{width:18px;height:12px;border-radius:4px;background:#d4001c;border:2px solid #78000c;animation:autoInterlockFlash .68s steps(1,end) infinite}
.paused .outlet-header.flowing:after,.paused .feed-pipe.flowing:after,.paused .post-valve.flowing:after,.paused .oht-inlet-pipe.flowing:after,.paused .auto-interlocked,.paused .state.interlock{animation-play-state:paused!important}
@keyframes autoInterlockFlash{0%,100%{box-shadow:0 0 0 1px rgba(120,0,12,.35),0 0 14px rgba(255,0,32,.55);background-color:#d4001c;color:#fff}50%{box-shadow:0 0 0 5px rgba(255,0,32,.34),0 0 22px rgba(255,0,32,.9);background-color:#ff1838;color:#fff}}
@keyframes waterDown{to{background-position:0 50px}}
@media(prefers-reduced-motion:reduce){.auto-interlocked,.state.interlock,.key i.interlock-key{animation:none!important;border-style:dashed!important}}
@media(max-width:1180px){.storage-pump-routes{margin-left:2%;margin-right:2%}.layout{grid-template-columns:62px minmax(1050px,1fr) 320px}.metrics{grid-template-columns:repeat(3,1fr)}}
@media(max-width:820px){.storage-pump-routes{grid-template-columns:1fr}.pump-route-row{grid-template-columns:95px 105px 1fr 155px 1fr 95px}.canvas{min-width:1450px}.metrics{grid-template-columns:repeat(2,1fr)}}

/* Revision 12: unambiguous operating-state language.
   Red flash = fault/trip, amber flash = protective interlock,
   steady blue = programmed hold, solid red = manual stop, green = operating. */
.status-operating{border-color:#5fbe99!important;background:#e9f8f2!important;color:#117653!important;animation:none!important}
.status-operating span,.status-operating .data,.status-operating b,.status-operating .name{color:#117653!important}
.status-hold,.status-protective,.status-fault,.status-manual{position:relative!important}
.status-hold{border-color:#5e9dca!important;background:#e8f4fc!important;color:#155f8d!important;animation:none!important;box-shadow:inset 0 0 0 1px rgba(55,133,184,.12)!important}
.status-hold span,.status-hold .data,.status-hold b,.status-hold .name{color:#155f8d!important}
.status-manual{border-color:#c83b47!important;background:#ffe6e8!important;color:#a5232e!important;animation:none!important;box-shadow:inset 0 0 0 2px rgba(181,36,49,.12)!important}
.status-manual span,.status-manual .data,.status-manual b,.status-manual .name{color:#a5232e!important}
.status-protective{border:3px solid #b56d00!important;background:#f5a300!important;color:#3d2600!important;animation:protectiveInterlockFlash .9s steps(1,end) infinite!important}
.status-protective span,.status-protective .data,.status-protective b,.status-protective .name{color:#3d2600!important}
.status-protective svg{stroke:#5a3900!important;fill:#ffe0a3!important}
.status-fault{border:3px solid #76000b!important;background:#d4001c!important;color:#fff!important;animation:faultTripFlash .42s steps(1,end) infinite!important}
.status-fault span,.status-fault .data,.status-fault b,.status-fault .name{color:#fff!important}
.status-fault svg{stroke:#fff!important;fill:#a90017!important}
.status-hold:after,.status-protective:after,.status-fault:after,.status-manual:after{position:absolute;right:3px;top:3px;padding:2px 5px;border-radius:4px;background:#fff;font-size:.52rem;font-weight:950;letter-spacing:.05em;line-height:1.2}
.status-hold:after{content:"HOLD";color:#155f8d;border:1px solid #8fc1e2}
.status-protective:after{content:"AUTO";color:#815000;border:1px solid #e2a33c}
.status-fault:after{content:"TRIP";color:#960010;border:1px solid #ed8b95}
.status-manual:after{content:"MANUAL";color:#a5232e;border:1px solid #e3a3a8}
.state.status-hold,.state.status-protective,.state.status-fault,.state.status-manual,.state.status-operating{padding-right:64px}
.ward-entity.status-hold{border-color:#5e9dca;background:#e8f4fc}.ward-entity.status-hold .ward-demand,.ward-entity.status-hold .ward-demand strong{color:#155f8d!important}
.ward-entity.status-manual{border-color:#c83b47;background:#ffe6e8}.ward-entity.status-fault{border-color:#76000b;background:#d4001c}
.subvalve.status-manual,.outlet-assembly.status-manual,.inlet-assembly.status-manual,.asset.status-manual,.transfer-pump.status-manual{opacity:1!important;filter:none!important}
.key i.status-operating-key{background:#14966b}
.key i.status-hold-key{width:24px;height:13px;border-radius:4px;background:#e8f4fc;border:2px solid #5e9dca}
.key i.status-manual-key{width:24px;height:13px;border-radius:4px;background:#d54b54;border:2px solid #a5232e}
.key i.status-protective-key{width:24px;height:13px;border-radius:4px;background:#f5a300;border:2px solid #b56d00;animation:protectiveInterlockFlash .9s steps(1,end) infinite}
.key i.status-fault-key{width:24px;height:13px;border-radius:4px;background:#d4001c;border:2px solid #76000b;animation:faultTripFlash .42s steps(1,end) infinite}
@keyframes protectiveInterlockFlash{0%,100%{box-shadow:0 0 0 1px rgba(181,109,0,.3),0 0 10px rgba(245,163,0,.42);background-color:#f5a300}50%{box-shadow:0 0 0 4px rgba(245,163,0,.26),0 0 18px rgba(255,190,39,.75);background-color:#ffc13d}}
@keyframes faultTripFlash{0%,100%{box-shadow:0 0 0 1px rgba(118,0,11,.4),0 0 16px rgba(255,0,32,.72);background-color:#c90019;color:#fff}50%{box-shadow:0 0 0 6px rgba(255,0,32,.36),0 0 26px rgba(255,0,32,1);background-color:#ff102f;color:#fff}}
.paused .status-protective,.paused .status-fault,.paused .key i.status-protective-key,.paused .key i.status-fault-key{animation-play-state:paused!important}
@media(prefers-reduced-motion:reduce){.status-protective,.status-fault,.key i.status-protective-key,.key i.status-fault-key{animation:none!important;border-style:dashed!important}}
