:root{font-family:Arial,"Helvetica Neue",Helvetica,sans-serif;color:#15232c;background:#f3f6f8;font-synthesis:none;--accent:#00a6d6;--link:#006f91;--muted:#586a75;--line:#dce3e8}
*{box-sizing:border-box}body{margin:0}button,select,input{font:inherit}button,select,a{touch-action:manipulation}button:focus-visible,select:focus-visible,input:focus-visible,a:focus-visible,summary:focus-visible{outline:2px solid #0076a8;outline-offset:3px}[hidden]{display:none!important}
a{color:var(--link)}.topbar{height:58px;padding:0 28px;display:flex;justify-content:space-between;align-items:center;background:#fff;border-top:4px solid var(--accent);border-bottom:1px solid var(--line)}.brand{display:flex;align-items:center;gap:16px;color:#101820;text-decoration:none;font-size:22px;font-weight:750;letter-spacing:-.7px}.brand span,.tag,.eyebrow{font-size:10px;letter-spacing:1.2px;font-weight:600;color:var(--muted)}.brand span{border-left:2px solid var(--accent);padding-left:16px}main{max-width:1440px;margin:auto;padding:24px 28px}.intro{display:flex;align-items:center;justify-content:space-between;gap:20px;margin-bottom:16px}.intro>div:first-child{min-width:0}h1,h2,p{margin-top:0}h1{margin-bottom:0;font-size:30px;line-height:1.15;font-weight:600;letter-spacing:-1px}h2{font-size:17px;letter-spacing:-.3px;font-weight:600;margin:0}.eyebrow{margin-bottom:6px}.actions,.view-controls,.spread-form,.reference-inputs{display:flex;align-items:flex-end;gap:10px;flex-wrap:wrap}label{display:grid;gap:5px;font-size:11px;color:var(--muted)}select,input,button{height:36px;border:1px solid var(--line);border-radius:3px;padding:7px 10px;color:#15232c;background:#fff;font-size:12px;max-width:100%}button{cursor:pointer;background:var(--accent);border-color:var(--accent);color:#002b3b;font-weight:600;white-space:nowrap}button:hover{filter:brightness(.94)}button:disabled{opacity:.45;cursor:default}button.secondary{background:#fff;color:var(--link);border-color:var(--line)}#thing{max-width:230px}input{width:145px}.statusbar{display:flex;justify-content:space-between;gap:12px;font-size:11px;color:var(--muted);padding:9px 0;border-top:1px solid var(--line);border-bottom:1px solid var(--line)}#status{color:var(--link)}.notice{padding:10px 13px;margin:12px 0;border:1px solid #e5d3a8;border-radius:3px;background:#fff7e5;color:#78581f;font-size:12px;line-height:1.5}.notice.error{background:#fff0eb;border-color:#e9c4b7;color:#813b27}
.overview{display:grid;grid-template-columns:1.1fr 1.4fr;gap:14px;margin:16px 0}.latest-measurement{display:flex;align-items:center;justify-content:space-between;gap:20px;min-width:0;padding:20px 22px;border-radius:3px;border:1px solid #cbdfe9;border-left:4px solid var(--accent);background:#fff;color:#006f91;box-shadow:0 2px 8px rgba(0,111,145,.05)}.latest-measurement h2{font-size:20px}.latest-measurement .eyebrow{margin:8px 0 0;color:#526b7a;font-size:9px}.latest-measurement strong{display:block;font-size:44px;line-height:1.1;font-weight:600;letter-spacing:-1.5px;margin-top:8px;font-variant-numeric:tabular-nums;overflow-wrap:anywhere}.latest-measurement>div{min-width:0}.latest-context{font-size:11px;line-height:1.6;max-width:215px;color:#526b7a}.latest-context p{margin:3px 0}.metrics{display:grid;grid-template-columns:repeat(4,minmax(0,1fr));gap:10px}.metrics article{padding:17px 13px;background:#fff;border:1px solid var(--line);border-radius:3px;min-width:0}.metrics p{font-size:11px;color:var(--muted);margin:0 0 14px}.metrics strong{display:block;font-size:23px;font-weight:600;letter-spacing:-.5px;font-variant-numeric:tabular-nums;overflow-wrap:anywhere}.metrics strong.date{font-size:16px;line-height:1.5}.metrics span{display:block;color:var(--muted);font-size:10px;line-height:1.5;margin-top:7px}
.panel{background:#fff;border:1px solid var(--line);border-radius:3px;margin:14px 0;padding:18px}.panel-heading{display:flex;align-items:center;justify-content:space-between;gap:12px}.muted,.chart-note{font-size:11px;color:var(--muted);line-height:1.5;margin:7px 0 0}.settings-row{display:flex;align-items:flex-end;gap:20px;flex-wrap:wrap}.filter-meta{display:flex;align-items:baseline;gap:20px;flex-wrap:wrap;margin-top:7px}.filter-meta details{font-size:11px;color:var(--muted);max-width:560px}.filter-meta p{margin:8px 0 0;line-height:1.6}summary{cursor:pointer;font-weight:600;color:#233b49}.reference-details{border-top:1px solid var(--line);margin-top:12px;padding-top:11px;font-size:12px}.reference-form{padding-top:12px}.reference-equals{align-self:center;padding-top:16px;color:var(--muted)}.legend{font-size:10px;color:var(--link)}.controls-layout{display:grid;grid-template-columns:minmax(0,1.35fr) minmax(270px,1fr);gap:14px;margin:14px 0;align-items:stretch}.controls-layout>.panel{margin:0}.chart-layout>.panel{margin:0}.chart{height:380px;display:flex;align-items:center;justify-content:center;margin-top:10px}.chart svg{display:block;width:100%;height:100%}.station-map{display:block;width:100%;height:165px;position:relative;z-index:0;margin-top:10px;border:1px solid var(--line);border-radius:3px;background:#f3f6f8}.station-map .leaflet-control-attribution{font-size:9px}.map-name{font-size:12px;margin:9px 0 0}.map-link{font-size:11px;text-decoration:none}.map-link:hover{text-decoration:underline}.location-panel .muted{font-size:10px;margin-top:3px}.table-wrap{overflow:auto;max-height:350px;margin:13px -18px 0}table{border-collapse:collapse;width:100%;font-size:11px;white-space:nowrap}th{background:#f1f5f8;color:var(--muted);font-size:10px;font-weight:600;text-align:left;position:sticky;top:0;z-index:1}th,td{padding:10px 16px;border-bottom:1px solid #e9eef2;font-variant-numeric:tabular-nums}td:last-child{white-space:normal;min-width:155px}td.flag{color:#936828}.empty{font-size:12px;color:var(--muted);text-align:center;padding:22px 12px}.details{padding:13px 18px;font-size:12px;line-height:1.6;background:transparent}.details p{margin:8px 0 0;max-width:850px}.details ol{padding-left:20px;margin-bottom:8px}.details li{margin:5px 0}footer{display:flex;justify-content:space-between;gap:12px;color:var(--muted);font-size:10px;margin:16px 0 0}.login-panel{max-width:390px;margin:9vh auto;padding:26px;background:#fff;border:1px solid var(--line);border-radius:3px}.login-panel{border-top:4px solid var(--accent)}.login-panel h1{font-size:25px}.login-panel form{display:grid;gap:15px;margin-top:22px}.login-panel input{width:100%}.login-panel label{font-size:12px}.login-panel button,.login-panel input{height:40px}
@media(max-width:1200px){.overview{grid-template-columns:1fr}.latest-measurement{padding:17px 20px}.metrics article{padding:13px}.metrics p{margin-bottom:8px}.metrics span{margin-top:5px}.intro{align-items:flex-start;flex-direction:column;gap:12px}.latest-context{max-width:none}.metrics{gap:8px}}
@media(max-width:720px){main{padding:18px 16px}.topbar{padding:0 16px;height:50px}.brand span{display:none}h1{font-size:26px}.controls-layout{grid-template-columns:1fr}.station-map{height:185px}.latest-measurement strong{font-size:36px}.latest-measurement{gap:14px}.latest-measurement h2{font-size:18px}.metrics{grid-template-columns:repeat(2,minmax(0,1fr))}.metrics strong{font-size:21px}.settings-row{gap:12px}.view-controls,.spread-form{width:100%;display:grid;grid-template-columns:repeat(2,minmax(0,1fr))}.view-controls select,.spread-form input{width:100%;min-width:0}.spread-form button{justify-self:start}.reference-inputs{display:grid;grid-template-columns:repeat(2,minmax(0,1fr))}.reference-inputs input{width:100%;min-width:0}.reference-equals{display:none}.reference-inputs button{width:100%}.actions{gap:8px}.actions label:first-child{flex:1;min-width:185px}.actions label:nth-child(2){flex:1;min-width:130px}#thing{max-width:none;width:100%}.panel{padding:14px}.table-wrap{margin-left:-14px;margin-right:-14px}.tag{font-size:9px}.latest-context{font-size:10px}.statusbar{flex-wrap:wrap;gap:4px}.filter-meta{gap:8px 20px}.legend{max-width:140px;text-align:right}.chart{height:280px}footer{flex-wrap:wrap}.login-panel{margin:30px 16px;max-width:none}}
@media(max-width:420px){.latest-measurement{align-items:flex-start;flex-direction:column;gap:10px;padding:17px}.latest-measurement>div:first-child{display:grid;grid-template-columns:1fr auto;gap:0 12px;width:100%}.latest-measurement h2{grid-column:1 / -1}.latest-measurement .eyebrow{align-self:center}.latest-measurement strong{font-size:34px}.latest-context p{display:block;margin:2px 0}.panel-heading{align-items:flex-start}}
@media(max-width:720px){.actions{width:100%;min-width:0}.actions select{width:100%;min-width:0}}

#battery-card[data-battery="good"]{background:#eef8f0;border-color:#bcdcc5}#battery-card[data-battery="good"] strong{color:#21753b}#battery-card[data-battery="good"] span{color:#39764c}#battery-card[data-battery="low"]{background:#fff7e7;border-color:#e6cea1}#battery-card[data-battery="low"] strong,#battery-card[data-battery="low"] span{color:#96611c}#battery-card[data-battery="good"]>p::before,#battery-card[data-battery="low"]>p::before{content:"";display:inline-block;width:7px;height:7px;margin-right:6px;border-radius:50%;background:#2d8b49}#battery-card[data-battery="low"]>p::before{background:#ba812c}

.topbar{height:74px;gap:20px}.header-identity{display:flex;align-items:center;gap:28px}.university-logos{display:flex;align-items:center;gap:22px;flex-shrink:0}.university-logos a{display:flex;align-items:center}.university-logos img{display:block;object-fit:contain}.logo-delft{width:105px;height:41px}.logo-unza{width:auto;height:48px}
@media(max-width:720px){.topbar{height:62px;gap:12px}.header-identity{gap:0}.header-identity .tag{display:none}.university-logos{gap:18px}.logo-delft{width:92px;height:36px}.logo-unza{height:40px}}

.table-actions{display:flex;align-items:center;gap:16px;flex-wrap:wrap}.table-toggle{display:flex;align-items:center;gap:8px;position:relative;cursor:pointer;color:var(--link);font-size:12px;white-space:nowrap}.table-toggle input{position:absolute;width:34px;height:20px;margin:0;opacity:0;cursor:pointer}.switch-track{width:34px;height:20px;border-radius:12px;background:#dce3e8;border:1px solid #9faeb7;transition:background .15s}.switch-track::after{content:"";display:block;width:14px;height:14px;margin:2px;border-radius:50%;background:#fff;box-shadow:0 1px 2px #0002;transition:transform .15s}.table-toggle input:checked+.switch-track{background:var(--link);border-color:var(--link)}.table-toggle input:checked+.switch-track::after{transform:translateX(14px)}.table-toggle input:focus-visible+.switch-track{outline:2px solid var(--link);outline-offset:3px}
@media(max-width:720px){.panel-heading:has(.table-actions){flex-wrap:wrap}.table-actions{gap:12px}}

.view-tabs{display:flex;gap:8px;margin-bottom:18px}.station-health{display:flex;align-items:center;gap:14px;flex-wrap:wrap;margin:16px 0 0}.station-health .muted{margin:0}.station-badge{font-size:12px;font-weight:600}.station-badge[data-state="online"]{color:#237445}.station-badge[data-state="delayed"]{color:#986515}.station-badge[data-state="offline"]{color:#b03434}.station-badge[data-state="unknown"]{color:#586a75}.trend-panel{display:grid;grid-template-columns:1fr 1fr 1fr;gap:16px;background:white;border:1px solid var(--line);border-radius:3px;padding:16px 20px;margin:14px 0}.trend-panel>div{display:flex;flex-direction:column;gap:6px;min-width:0}.trend-panel strong{font-size:23px;color:var(--link);font-variant-numeric:tabular-nums}.trend-panel>div:first-child strong{font-size:18px}.trend-panel .eyebrow,.trend-panel .muted{margin:0}.trend-explanation{grid-column:1/-1!important;margin:0;padding-top:10px;border-top:1px solid var(--line);font-size:11px;color:var(--muted)}.trend-explanation .chart-note{margin:0}.trend-explanation details{line-height:1.5}.trend-explanation details p{margin:8px 0 0}.network-heading{margin:22px 0 14px}.network-heading h2{font-size:24px}.network-map{height:360px;border:1px solid var(--line);border-radius:3px;z-index:0}.network-stations{display:grid;grid-template-columns:repeat(auto-fit,minmax(260px,1fr));gap:14px;margin:16px 0}.network-card{padding:20px;background:#fff;border:1px solid var(--line);border-radius:3px}.network-card h3{margin:12px 0 18px;font-size:18px}.network-value{display:block;font-size:32px;color:var(--link)}.network-change{font-size:13px;margin:14px 0 0;color:var(--link)}.network-card button{margin-top:18px}.network-card .muted{margin-top:5px}
@media(max-width:720px){.trend-panel{grid-template-columns:1fr 1fr;padding:14px;gap:14px}.trend-panel>div:first-child{grid-column:1/-1}.trend-panel strong{font-size:21px}.network-map{height:280px}.network-heading h2{font-size:22px}.network-stations{grid-template-columns:1fr}}

#dashboard[data-view="network"] .intro>div:first-child,#dashboard[data-view="network"] .actions label,#dashboard[data-view="network"] .statusbar,#dashboard[data-view="network"] #warning{display:none}#dashboard[data-view="network"] .intro{align-items:flex-end}#dashboard[data-view="network"] .actions{justify-content:flex-end}

.trend-visibility{display:flex;align-items:center;gap:8px;font-size:12px;color:var(--link);margin:14px 0;cursor:pointer;width:fit-content}.trend-visibility input{height:16px;width:16px;margin:0;accent-color:var(--link)}.settings-heading{display:flex;align-items:center;justify-content:space-between;gap:16px;padding-bottom:14px;border-bottom:1px solid var(--line)}.settings-heading label{min-width:180px}.quality-settings{padding-top:14px}.quality-heading{display:flex;align-items:baseline;justify-content:space-between;gap:14px;flex-wrap:wrap}.quality-heading h3{font-size:13px;margin:0}.quality-rules{font-size:11px;color:var(--muted)}.quality-rules p{max-width:520px;line-height:1.5;margin:8px 0}.settings-help{font-size:11px;color:var(--muted);line-height:1.5;margin:7px 0 12px}.view-settings .spread-form{gap:12px}.view-settings .reference-details{margin-top:16px;padding-top:14px}.chart-heading{flex-wrap:wrap}.chart-heading .table-toggle{flex-shrink:0}
@media(max-width:720px){.settings-heading{align-items:flex-start;flex-direction:column;gap:12px}.settings-heading label{width:100%;min-width:0}.settings-heading select{width:100%}.view-settings .spread-form{gap:10px}.chart-heading{gap:12px}}

.date-range-form{display:flex;align-items:flex-end;gap:12px;flex-wrap:wrap;margin:0 0 16px;padding:14px;background:#fff;border:1px solid var(--line)}.date-range-form input{width:155px}.date-range-form .muted{align-self:center}.packet-quality{font-size:11px;color:var(--muted);margin:7px 0 0}.packet-quality[data-quality="passed"]{color:#237445}.packet-quality[data-quality="warning"]{color:#986515}.download-panel{border:1px solid #cbdfe9;background:#f5fafd;padding:16px;margin-top:14px;border-radius:3px}.download-panel h3{margin:0;font-size:15px}.download-panel>p{font-size:12px;line-height:1.6;white-space:pre-line}.download-panel .muted{font-size:11px}#dashboard[data-view="network"] .date-range-form{display:none}
@media(max-width:720px){.date-range-form{gap:10px}.date-range-form label{flex:1;min-width:120px}.date-range-form input{width:100%}.download-panel .table-actions{align-items:stretch;flex-direction:column}}

.actions .values-control{color:var(--link);font-weight:600}.values-control select{min-width:205px;color:var(--link);border-color:#91bed1;background:#fff;font-weight:600}.location-panel{display:flex;flex-direction:column}.location-panel .station-map{height:auto;min-height:240px;flex:1}.settings-heading{padding-bottom:12px}
@media(max-width:720px){.actions .values-control{flex:1 0 100%}.values-control select{width:100%;min-width:0}.location-panel .station-map{height:240px;min-height:240px;flex:none}}

.values-panel{display:flex;align-items:center;justify-content:space-between;gap:16px;background:#fff;border:1px solid #b6d7e5;border-left:4px solid var(--accent);border-radius:3px;padding:16px 20px;margin:16px 0}.values-panel .values-control{display:flex;align-items:center;gap:16px;color:var(--link);font-size:17px;font-weight:600}.values-panel select{height:44px;min-width:250px;font-size:16px;padding:9px 12px;border:2px solid var(--link);color:var(--link)}.values-panel .muted{margin:0;max-width:340px}
@media(max-width:720px){.values-panel{align-items:stretch;flex-direction:column;padding:14px;gap:10px}.values-panel .values-control{align-items:stretch;flex-direction:column;gap:8px}.values-panel select{width:100%;min-width:0}}

.filters-title{font-size:24px;margin:0 0 18px;color:#15232c}.view-settings .spread-form,.view-settings .reference-inputs{align-items:flex-end}.view-settings .reference-equals{display:flex;align-items:center;align-self:flex-end;height:36px;padding:0;font-size:18px}.view-settings .reference-details{margin-top:18px;padding-top:16px}.view-settings .reference-details>h3{font-size:17px;font-weight:600;margin:0}.view-settings #spread-status:empty,.view-settings #reference-status:empty{display:none}.view-settings #reference-status{margin-top:10px}
@media(max-width:720px){.view-settings .reference-inputs{grid-template-columns:minmax(0,1fr) 16px minmax(0,1fr)}.reference-inputs button[type="submit"]{grid-column:1}.view-settings #clear-reference{grid-column:3}}

.metrics .metric-history{height:auto;min-width:0;padding:17px 13px;background:#fff;border:1px solid var(--line);border-radius:3px;text-align:left;white-space:normal;font-weight:400;display:flex;flex-direction:column;align-items:flex-start}
.metrics .metric-history:hover{filter:none;border-color:var(--link);box-shadow:0 2px 8px #006f9115}
.metrics .metric-label{font-size:11px;margin:0 0 14px;line-height:normal}
.metrics .history-link{color:var(--link);font-weight:600;margin-top:auto;padding-top:10px}
#battery-card[data-battery="good"]>.metric-label::before,#battery-card[data-battery="low"]>.metric-label::before{content:"";display:inline-block;width:7px;height:7px;margin-right:6px;border-radius:50%;background:#2d8b49}
#battery-card[data-battery="low"]>.metric-label::before{background:#ba812c}
.history-dialog{width:min(900px,calc(100% - 32px));max-height:calc(100dvh - 32px);overflow:auto;padding:24px;border:1px solid var(--line);border-radius:6px;background:#fff;color:#15232c;box-shadow:0 18px 70px #15232c40}
.history-dialog::backdrop{background:#15232c80}
.history-dialog h2{font-size:22px}
.history-dialog .chart{height:clamp(220px,48vh,380px)}
.chart{position:relative}
.chart-point{cursor:pointer;outline:none;touch-action:manipulation}
.chart-point:hover,.chart-point:focus-visible{stroke:#008bb53d;stroke-width:12;fill-opacity:1}
.chart-point:focus-visible{stroke:#006f9170}
.chart-tooltip{position:absolute;z-index:2;max-width:min(330px,100%);padding:10px 12px;border:1px solid #cbdfe9;border-radius:4px;background:#fff;color:#15232c;box-shadow:0 3px 14px #15232c25;font-size:11px;line-height:1.6;white-space:pre-line;pointer-events:none}
.selected-measurement{background:#e0f4fc;outline:2px solid var(--link);outline-offset:-2px;scroll-margin-block:44px}
.selected-measurement td:first-child{box-shadow:inset 4px 0 var(--link)}
.measurement-selection{display:flex;align-items:center;justify-content:space-between;gap:16px;margin-top:14px;padding:10px 12px;background:#eaf7fc;border:1px solid #cbdfe9;border-radius:3px}
.measurement-selection p{margin:0;font-size:11px;line-height:1.6;color:var(--link)}
.table-pagination{display:flex;justify-content:flex-end;align-items:center;gap:14px;margin-top:14px}
.table-pagination .muted{margin:0}
@media(max-width:1200px){.metrics .metric-history{padding:13px}.metrics .metric-label{margin-bottom:8px}}
@media(max-width:720px){.history-dialog{padding:16px}.history-dialog h2{font-size:19px}.measurement-selection{align-items:flex-start;flex-direction:column;gap:8px}}
