:root{--ink:#0c3448;--ink-2:#16495f;--mint:#5de1cb;--paper:#f3f7f7;--white:#fff;--muted:#6b7e87;--line:#dbe6e7;--shadow:0 18px 48px rgba(12,52,72,.10);--selected:#0f9ca8}
*{box-sizing:border-box}
html{scroll-behavior:smooth}
body{margin:0;background:var(--paper);color:var(--ink);font-family:Inter,"Segoe UI",Arial,sans-serif;font-size:15px}
button{font:inherit}
.topbar{height:72px;padding:0 clamp(22px,4vw,68px);display:flex;align-items:center;justify-content:space-between;background:var(--white);border-bottom:1px solid var(--line);position:sticky;top:0;z-index:20}
.brand{display:flex;align-items:center;gap:12px;color:var(--ink);text-decoration:none}.brand-mark{display:grid;place-items:center;width:38px;height:38px;border-radius:10px;background:var(--ink);color:var(--mint);font-weight:900}.brand strong,.brand small{display:block}.brand strong{font-size:14px;letter-spacing:.14em}.brand small{margin-top:1px;color:var(--muted);font-size:11px;text-transform:uppercase;letter-spacing:.1em}
.study-tag{font-size:11px;font-weight:750;letter-spacing:.12em;color:var(--muted)}.study-tag span{display:inline-block;width:7px;height:7px;margin-right:8px;border-radius:50%;background:var(--mint);box-shadow:0 0 0 4px rgba(93,225,203,.18)}
main{max-width:1540px;margin:auto}.hero{padding:44px clamp(22px,4vw,68px) 26px;display:flex;align-items:end;justify-content:space-between;gap:30px}.hero-copy{max-width:720px}.eyebrow,.chart-kicker{margin:0 0 9px;font-size:10px;font-weight:800;letter-spacing:.17em;color:#53818e}.hero h1{max-width:670px;margin:0 0 12px;font-size:clamp(35px,4vw,62px);line-height:.98;letter-spacing:-.045em}.hero-copy>p:last-child{max-width:650px;margin:0;color:var(--muted);font-size:16px;line-height:1.55}
.selector{display:flex;gap:7px;align-items:center;flex-wrap:wrap;justify-content:flex-end}.selector button,.range-control button,.input-tabs button{border:1px solid var(--line);background:var(--white);color:var(--ink);border-radius:999px;padding:9px 14px;cursor:pointer;font-weight:720;font-size:12px;transition:.2s}.selector button:hover,.range-control button:hover,.input-tabs button:hover{border-color:#9fb8bd;transform:translateY(-1px)}.selector button.active{background:var(--ink);border-color:var(--ink);color:#fff;box-shadow:0 7px 20px rgba(12,52,72,.18)}.selector button:not(:first-child)::before{content:"";display:inline-block;width:7px;height:7px;border-radius:50%;margin-right:7px;background:var(--pipe-color)}
.network-shell{margin:0 clamp(14px,3vw,46px);display:grid;grid-template-columns:minmax(0,1fr) 340px;background:var(--white);border:1px solid var(--line);border-radius:22px;overflow:hidden;box-shadow:var(--shadow)}.network-panel{min-width:0}.panel-heading{height:82px;padding:20px 24px;display:flex;align-items:center;justify-content:space-between;border-bottom:1px solid var(--line)}.panel-heading h2,.boundary-panel h2,.section-heading h2,.inputs-heading h2{margin:0;font-size:21px;letter-spacing:-.02em}.map-actions{display:flex;align-items:center;gap:14px}.hint{font-size:11px;color:var(--muted)}.ghost-button{padding:8px 12px;border:1px solid var(--line);border-radius:9px;background:#fff;color:var(--ink);font-size:12px;font-weight:750;cursor:pointer}.map-wrap{height:610px;position:relative;background:radial-gradient(circle at 60% 40%,#fff 0,#f5f9f9 70%)}#networkCanvas{display:block;width:100%;height:100%;touch-action:none;cursor:grab}#networkCanvas:active{cursor:grabbing}.map-legend{position:absolute;left:18px;bottom:16px;padding:10px 13px;display:flex;gap:15px;flex-wrap:wrap;border:1px solid var(--line);border-radius:10px;background:rgba(255,255,255,.92);font-size:10px;color:var(--muted);box-shadow:0 6px 18px rgba(12,52,72,.08)}.map-legend span{display:flex;align-items:center;gap:6px}.map-legend i{display:inline-block}.line-base{width:18px;border-top:1px solid #9fb3b8}.line-selected{width:18px;border-top:3px solid var(--selected)}.pump-dot{width:7px;height:7px;border-radius:50%;background:var(--ink)}.reservoir-dot{width:8px;height:8px;border:2px solid var(--ink);background:#fff}.sensor-dot{width:9px;height:9px;border:2px solid #fff;border-radius:50%;background:#cf5968;box-shadow:0 0 0 1px #cf5968}
.boundary-panel{padding:25px 24px;background:#f8fbfb;border-left:1px solid var(--line);overflow:auto}.boundary-panel .lede{margin:12px 0 22px;color:var(--muted);line-height:1.55}.network-stats{display:grid;grid-template-columns:repeat(2,1fr);gap:8px;margin-bottom:22px}.stat{padding:13px;border:1px solid var(--line);border-radius:12px;background:#fff}.stat strong,.stat span{display:block}.stat strong{font-size:22px}.stat span{margin-top:2px;color:var(--muted);font-size:10px;text-transform:uppercase;letter-spacing:.09em}.route-list{display:grid;gap:8px}.route-row{display:grid;grid-template-columns:10px 1fr auto;align-items:center;gap:10px;padding:10px 11px;border:1px solid var(--line);border-radius:10px;background:#fff;cursor:pointer}.route-row:hover{border-color:#adc1c4}.route-row i{width:8px;height:8px;border-radius:50%;background:var(--route)}.route-row strong{font-size:12px}.route-row small{color:var(--muted)}
.boundary-detail{display:grid;gap:14px}.boundary-detail .pipe-id{display:inline-flex;align-items:center;gap:8px;font-size:11px;font-weight:800;letter-spacing:.15em}.boundary-detail .pipe-id i{width:9px;height:9px;border-radius:50%;background:var(--selected)}.boundary-detail h2{font-size:27px}.detail-block{padding:14px 0;border-top:1px solid var(--line)}.detail-block small{display:block;margin-bottom:6px;color:var(--muted);font-size:10px;font-weight:800;letter-spacing:.12em;text-transform:uppercase}.detail-block strong{display:block;line-height:1.4}.detail-block p{margin:5px 0 0;color:var(--muted);font-size:12px;line-height:1.5}.boundary-callout{padding:14px;border-radius:12px;background:var(--ink);color:#fff}.boundary-callout small{color:var(--mint)}
.detail-section{padding:48px clamp(14px,3vw,46px) 70px}.section-heading,.inputs-heading{display:flex;align-items:end;justify-content:space-between;gap:20px;margin-bottom:18px}.range-control,.input-tabs{display:flex;gap:6px}.range-control button,.input-tabs button{padding:7px 12px}.range-control button.active,.input-tabs button.active{background:var(--ink);border-color:var(--ink);color:#fff}.empty-state{min-height:350px;display:grid;place-items:center;align-content:center;text-align:center;border:1px dashed #bdcdcf;border-radius:20px;background:rgba(255,255,255,.5)}.empty-state span{display:grid;place-items:center;width:48px;height:48px;border-radius:50%;background:var(--ink);color:var(--mint);font-weight:800}.empty-state h3{margin:16px 0 6px;font-size:24px}.empty-state p{max-width:510px;margin:0;color:var(--muted);line-height:1.5}.hidden{display:none!important}
.chart-grid{display:grid;grid-template-columns:1fr 1fr;gap:16px}.chart-card{padding:20px;background:#fff;border:1px solid var(--line);border-radius:18px;box-shadow:0 10px 30px rgba(12,52,72,.05)}.chart-head{display:flex;justify-content:space-between;align-items:start;gap:16px;margin-bottom:14px}.chart-head h3{margin:0;font-size:18px}.chart-legend,.series-key{display:flex;align-items:center;gap:8px;flex-wrap:wrap;color:var(--muted);font-size:10px}.chart-legend span{width:15px;border-top:2px solid}.chart-legend .simulated{border-color:var(--selected)}.chart-legend .measured{width:7px;height:7px;border:0;border-radius:50%;background:var(--ink)}.chart-canvas{display:block;width:100%;height:300px}.inputs-heading{margin-top:44px}.input-card{padding-bottom:16px}.input-canvas{height:340px}.series-key span{display:flex;align-items:center;gap:5px}.series-key i{width:14px;border-top:2px solid var(--key)}.series-key .trace-key{width:100%;color:var(--ink);font-weight:700}.series-key .trace-key i{width:15px;border-color:var(--ink);position:relative}.series-key .trace-key i::after{content:"";position:absolute;width:5px;height:5px;border-radius:50%;background:var(--ink);right:-1px;top:-3px}.model-note{display:flex;gap:20px;align-items:start;margin-top:15px;padding:18px 20px;border-left:4px solid var(--selected);border-radius:0 12px 12px 0;background:#eaf2f2;color:var(--muted);line-height:1.55}.model-note strong{min-width:140px;color:var(--ink)}
.sensor-card{margin-top:16px}.sensor-canvas{height:330px}.sensor-list{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:7px;margin-top:15px}.sensor-row{display:grid;grid-template-columns:46px minmax(0,1fr) auto;gap:9px;align-items:center;padding:9px 10px;border-radius:9px;background:#f5f9f9;border:1px solid #e3ecec;transition:opacity .15s}.sensor-row.inactive{opacity:.38}.sensor-row strong{font-size:11px}.sensor-row span{min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;color:var(--muted);font-size:10px}.sensor-row small{color:var(--ink);font-size:10px;font-weight:700}.sensor-chip,.sensor-all{display:inline-flex!important;align-items:center;gap:6px;padding:4px 7px;border:1px solid var(--line);border-radius:7px;background:#fff;color:var(--muted);font-size:10px;font-weight:700;cursor:pointer;opacity:.48}.sensor-chip.active,.sensor-all.active{color:var(--ink);border-color:#a8bec2;opacity:1}.sensor-chip::before{content:"";width:7px;height:7px;border-radius:50%;background:var(--sensor)}
footer{max-width:1450px;margin:auto;padding:25px clamp(22px,4vw,68px) 40px;display:flex;justify-content:space-between;border-top:1px solid var(--line);color:var(--muted);font-size:10px;letter-spacing:.08em;text-transform:uppercase}
@media(max-width:1050px){.hero{align-items:start;flex-direction:column}.selector{justify-content:flex-start}.network-shell{grid-template-columns:1fr}.boundary-panel{border-left:0;border-top:1px solid var(--line)}.map-wrap{height:520px}.chart-grid{grid-template-columns:1fr}}
@media(max-width:680px){.study-tag{display:none}.topbar{height:62px}.hero{padding-top:30px}.hero h1{font-size:38px}.network-shell{margin-inline:8px;border-radius:14px}.panel-heading{height:auto;align-items:start}.hint{display:none}.map-wrap{height:430px}.map-legend{right:12px;gap:8px}.section-heading,.inputs-heading{align-items:start;flex-direction:column}.input-tabs{width:100%;overflow:auto}.chart-canvas{height:250px}.sensor-list{grid-template-columns:1fr}.model-note{flex-direction:column;gap:5px}footer{flex-direction:column;gap:8px}}
