:root{--color-background:white;--color-foreground:var(--color-background);--color-base:black;--color-muted:var(--color-base);--color-accent:var(--color-base);--color-highlight:var(--color-base);--color-success:var(--color-base);--color-error:var(--color-base);--color-warn:var(--color-base);--color-info:var(--color-base);--font-base:sans-serif;--font-highlight:var(--font-base)}.success{color:var(--color-success)!important}.error{color:var(--color-error)!important}.warn{color:var(--color-warn)!important}.info{color:var(--color-info)!important}@media (orientation:landscape){.mobile-only{display:none!important}}@media (orientation:portrait){.desktop-only{display:none!important}}[hidden]{display:none!important}[disabled]{opacity:.5!important;cursor:not-allowed!important}*,:before,:after{box-sizing:border-box;margin:0}body{font-family:var(--font-base);background-color:var(--color-background);color:var(--color-base);display:flex}@media (orientation:portrait){body{flex-direction:column}}article{background-color:var(--color-foreground);position:relative}h1,h2,h3,h4,h5,h6{font-family:var(--font-highlight);color:var(--color-highlight);margin-bottom:.5em}a{color:var(--color-highlight)}menu li a{align-items:center;gap:.5em;text-decoration:none;display:inline-flex}button,input[type=button],input[type=reset],input[type=submit],.button{background-color:color-mix(currentcolor, transparent);color:inherit;font:inherit;cursor:pointer;border:0;justify-content:center;gap:.5em;padding:.5em 1em;display:inline-flex}details>summary{color:var(--color-highlight);cursor:pointer}fieldset{border:0;flex-direction:column;gap:.5em;margin:1em 0;padding:0;display:flex}label,select,input,output{font:inherit;vertical-align:middle}label select,label input:not([type=checkbox]):not([type=radio]){width:100%;height:2em}label select[multiple]{height:unset}label input[type=checkbox],label input[type=radio]{margin-right:.5em}label :has(+[required]):after{content:"*"}.columns{display:grid}@media (orientation:landscape){.columns{grid-template-columns:1fr 1fr}}.navbar{flex-direction:column;align-items:start;display:flex}@media (orientation:portrait){.navbar{flex-direction:row;justify-content:space-between;align-items:center}}.navbar>*{padding:.5em}.navbar>img{max-width:200px}.navbar>details>summary{color:unset;font-size:smaller}.navbar>details>:not(summary){flex-direction:column;gap:1em;display:flex}main:not(#dashboard){height:fit-content;padding:1em 2em}main:not(#dashboard) .columns{gap:1em 2em;margin-bottom:2em}#login header img{max-width:320px}#login output{margin:1em}#login footer{gap:1em 3em}#dashboard h1,#dashboard h2,#dashboard h3,#dashboard h4,#dashboard h5,#dashboard h6{font-size:unset;margin:0}#dashboard .title-panel{gap:.5em}#dashboard .notifications-panel time{text-align:center;display:block}#dashboard .notifications-panel time:first-of-type{font-weight:700}#dashboard .notifications-panel time:last-of-type{font-size:small}#dashboard .plot-panel{position:relative}#dashboard .plot-panel .feature-data{min-height:100%;animation:.4s feature-slide;position:absolute;top:0;left:0;right:0}#dashboard .plot-panel .feature-data .close-button{padding:.25em}#dashboard .weather-panel img{margin-right:.5em}#dashboard .weather-panel p{font-size:small}#dashboard .weather-panel data{font-weight:700}#dashboard .widgets-panel{flex-direction:column;gap:.5em;max-height:40vh;display:flex;overflow-y:auto}#dashboard .widgets-panel article{padding:.75em 1em}#dashboard .widgets-panel data{font-weight:700}@media (orientation:portrait){#dashboard{grid-template:"weather-panel notifications-panel""alerts-panel alerts-panel""widgets-panel widgets-panel""title-panel title-panel""map-panel map-panel"100vw"plot-panel plot-panel"minmax(100vw,auto)/auto auto}#dashboard .title-panel{padding:.5em}#dashboard .notifications-panel time{text-align:right}#dashboard .weather-panel img{height:2em}#dashboard .weather-panel p:first-of-type data:first-of-type{font-size:medium}}@media (orientation:landscape){#dashboard{grid-template:"title-panel title-panel notifications-panel""map-panel map-panel plot-panel"1fr"weather-panel alerts-panel plot-panel""widgets-panel widgets-panel plot-panel"/min-content min-content 1fr;gap:.5em;padding:.5em}#dashboard .map-panel article{width:50vw}#dashboard .plot-panel{margin-right:-.5em;padding-right:.5em}#dashboard .weather-panel p:first-of-type data:first-of-type{font-size:x-large}}@keyframes feature-slide{0%{left:100%;right:-100%}}@media (orientation:portrait){main#dashboard.fullscreen-map{grid-template:"title-panel notifications-panel""map-panel map-panel"1fr/1fr auto}}@media (orientation:landscape){main#dashboard.fullscreen-map{grid-template:"title-panel notifications-panel""map-panel map-panel"1fr/1fr auto}main#dashboard.fullscreen-map .map-panel article{width:100%}}#dashboard{box-sizing:border-box;width:100%;max-width:100%;overflow-x:hidden}#dashboard h1{margin-bottom:1.5rem;font-size:1.75rem;font-weight:700}.dashboard-controls{background:#ffffff05;border:1px solid #ffffff0d;border-radius:8px;flex-wrap:wrap;justify-content:space-between;align-items:flex-end;gap:1rem;margin-bottom:2rem;padding:1rem;display:flex}.date-range-group{flex-wrap:wrap;align-items:flex-end;gap:.75rem;display:flex}.field-label{opacity:.75;margin-bottom:.35rem;font-size:.8rem;font-weight:600}.dashboard-controls input[type=date],.dashboard-controls select{color:inherit;background:#ffffff0d;border:1px solid #ffffff26;border-radius:6px;outline:none;padding:.5rem .75rem;font-size:.9rem;transition:border-color .2s}.dashboard-controls input[type=date]:focus,.dashboard-controls select:focus{border-color:#3b82f6}.sensor-group{margin-bottom:2.5rem}.sensor-group-header{align-items:baseline;gap:.5rem;margin-bottom:.75rem;display:flex}.sensor-group-header h2{margin:0;font-size:1.2rem;font-weight:700}.sensor-group-id{opacity:.5;font-size:.8rem}.panel-empty{text-align:center;opacity:.6;background:#ffffff05;border-radius:8px;padding:2rem}.panel-stack{flex-direction:column;gap:1rem;display:flex}.metric-panel{background:#ffffff08;border:1px solid #ffffff1a;border-radius:10px;padding:1.25rem;overflow:hidden;box-shadow:0 2px 6px #00000026}.metric-panel-title{opacity:.75;margin-bottom:.75rem;font-size:.85rem;font-weight:600}.metric-panel-body{align-items:stretch;gap:1.5rem;display:flex}.metric-stat-list{border-right:1px solid #ffffff14;flex-direction:column;flex:0 0 140px;justify-content:center;gap:1.25rem;padding-right:1.25rem;display:flex}.metric-stat{flex-direction:column;justify-content:center;gap:.1rem;display:flex}.metric-stat-label{opacity:.7;font-size:.75rem}.metric-value{font-size:2.1rem;font-weight:700;line-height:1.1}.metric-unit{opacity:.65;font-size:.8rem}.metric-delta{opacity:.75;margin-top:.25rem;font-size:.8rem}.metric-chart{flex:1;width:100%;min-width:0;overflow:hidden}plot-panel{width:100%;max-width:100%;display:block;overflow:hidden}:is(plot-panel :deep(.js-plotly-plot),plot-panel :deep(.plot-container),plot-panel :deep(.svg-container)){width:100%!important;max-width:100%!important}.metric-chart,.metric-panel-windrose{flex:auto;width:100%;min-width:0}@media (width<=768px){.dashboard-controls{flex-direction:column;align-items:stretch}.date-range-group{justify-content:space-between;width:100%}.date-range-group label{flex:1}.date-range-group input{box-sizing:border-box;width:100%}.metric-panel-body{flex-direction:column;gap:1rem}.metric-stat-list{border-bottom:1px solid #ffffff14;border-right:none;flex-flow:wrap;flex:none;gap:1.5rem;padding-bottom:1rem;padding-right:0}.metric-stat{min-width:100px}}@media (width<=480px){#dashboard{padding:.75rem}.date-range-group{flex-direction:column;gap:.75rem}.metric-value{font-size:1.75rem}}.sensor-card-grid[data-v-d41f6ec1]{grid-template-columns:repeat(auto-fit,minmax(260px,1fr));gap:.75rem;width:100%;display:grid}.sensor-card[data-v-d41f6ec1]{background:#ffffff05;border:1px solid #ffffff14;border-radius:6px;flex-direction:column;gap:.5rem;padding:1rem;display:flex}.sensor-card-header[data-v-d41f6ec1]{align-items:flex-start;gap:.5rem;display:flex}.sensor-status-dot[data-v-d41f6ec1]{background:#888;border-radius:50%;flex-shrink:0;width:.5rem;height:.5rem;margin-top:.4rem}.sensor-status-dot.fresh[data-v-d41f6ec1]{background:#3fbf5f}.sensor-status-dot.stale[data-v-d41f6ec1]{background:#e0a72e}.sensor-status-dot.old[data-v-d41f6ec1]{background:#d9534f}.sensor-card-title[data-v-d41f6ec1]{flex-direction:column;min-width:0;display:flex}.sensor-card-name[data-v-d41f6ec1]{font-weight:600}.sensor-card-id[data-v-d41f6ec1]{opacity:.5;font-size:.72rem}.sensor-card-primary[data-v-d41f6ec1]{flex-direction:column;padding:.35rem 0 .15rem;display:flex}.sensor-card-primary-value[data-v-d41f6ec1]{font-variant-numeric:tabular-nums;font-size:1.9rem;font-weight:600;line-height:1.1}.sensor-card-primary-label[data-v-d41f6ec1]{opacity:.6;margin-top:.1rem;font-size:.75rem}.sensor-card-fields[data-v-d41f6ec1]{grid-template-columns:1fr auto;gap:.25rem .5rem;margin:0;font-size:.82rem;display:grid}.sensor-card-fields dt[data-v-d41f6ec1]{opacity:.55}.sensor-card-fields dd[data-v-d41f6ec1]{text-align:right;font-variant-numeric:tabular-nums;margin:0}.sensor-card-unit[data-v-d41f6ec1]{opacity:.55;font-size:.8em}.sensor-card-meta[data-v-d41f6ec1]{opacity:.5;border-top:1px solid #ffffff0f;justify-content:space-between;gap:.5rem;margin-top:.1rem;padding-top:.5rem;font-size:.72rem;display:flex}.sensor-modal-overlay{box-sizing:border-box;z-index:10;background:#00000073;justify-content:center;align-items:center;padding:1rem 1rem 5rem;display:flex;position:absolute;inset:0}.sensor-modal{background:var(--dashboard-bg,#1c1f21);color:inherit;border-radius:8px;width:min(900px,92%);max-height:100%;padding:1rem 1.25rem;overflow-y:auto}.sensor-modal-header{justify-content:space-between;align-items:flex-start;margin-bottom:.75rem;display:flex}.sensor-modal-close{cursor:pointer;color:inherit;background:0 0;border:none;padding:.25rem;font-size:1.2rem;line-height:1}.sensor-marker{cursor:pointer;box-sizing:border-box;background-color:#2fa8e0;border:3px solid #fff;border-radius:50%;outline:none;width:18px;height:18px;margin:0;padding:0;transition:transform .2s,background-color .2s,box-shadow .2s;animation:.25s cubic-bezier(.175,.885,.32,1.275) sensor-marker-pop;box-shadow:0 2px 6px #00000073}.sensor-marker:hover{background-color:#1b87ba;transform:scale(1.35);box-shadow:0 4px 10px #0000008c}.sensor-marker.active{z-index:10;background-color:#ff6a3d;border-color:#fff;transform:scale(1.5);box-shadow:0 0 0 4px #ff6a3d66,0 4px 12px #00000080}@keyframes sensor-marker-pop{0%{opacity:0;transform:scale(0)}to{opacity:1;transform:scale(1)}}
