.dashboard-body{min-height:100vh;background:var(--canvas);overflow-x:hidden}.dashboard-shell{display:grid;grid-template-columns:248px minmax(0,1fr);min-height:100vh}
.sidebar{position:sticky;top:0;height:100vh;display:flex;flex-direction:column;padding:26px 18px;background:var(--navy-950);color:#fff}.sidebar-brand{display:block;padding:0 12px 28px;border-bottom:1px solid rgba(255,255,255,.1)}.sidebar-brand img{width:174px;filter:brightness(0) invert(1)}.sidebar-label{margin:30px 12px 10px;color:#7695aa;font-size:.68rem;font-weight:800;letter-spacing:.14em;text-transform:uppercase}.sidebar-nav{display:grid;gap:6px}.sidebar-nav a{display:flex;align-items:center;gap:12px;padding:11px 12px;border-radius:10px;color:#bcd0dd;font-size:.88rem;font-weight:700}.sidebar-nav a:hover,.sidebar-nav a.active{background:rgba(31,197,201,.12);color:#fff}.nav-icon{width:8px;height:8px;border:2px solid currentColor;border-radius:50%}.sidebar-foot{margin-top:auto;padding:20px 12px 0;border-top:1px solid rgba(255,255,255,.1);color:#819db0;font-size:.7rem}.sidebar-foot strong{display:block;color:var(--cyan-300);font-size:.75rem}
.dashboard-main{min-width:0}.topbar{position:sticky;top:0;z-index:30;min-height:76px;display:flex;align-items:center;justify-content:space-between;gap:24px;padding:14px 34px;background:rgba(243,247,249,.9);border-bottom:1px solid var(--line);backdrop-filter:blur(14px)}.topbar-title small{display:block;color:var(--muted);font-size:.72rem}.topbar-title strong{color:var(--navy-950)}.topbar-actions{display:flex;align-items:center;gap:10px}.connection{display:flex;align-items:center;gap:8px;padding:7px 11px;border:1px solid var(--line);border-radius:999px;background:#fff;font-size:.73rem;font-weight:750}
.dashboard-content{max-width:1560px;margin:auto;padding:30px 34px 70px}.overview-hero{display:grid;grid-template-columns:minmax(0,1.2fr) minmax(330px,.8fr);gap:18px;margin-bottom:18px}.overview-copy{position:relative;overflow:hidden;padding:34px;border-radius:var(--radius-lg);background:linear-gradient(120deg,var(--navy-950),var(--navy-800));color:#fff;box-shadow:var(--shadow)}.overview-copy::after{content:"";position:absolute;width:380px;height:380px;border-radius:50%;right:-150px;top:-220px;border:1px solid rgba(114,226,228,.28);box-shadow:0 0 0 65px rgba(31,197,201,.035),0 0 0 130px rgba(31,197,201,.025)}.overview-copy>*{position:relative;z-index:1}.overview-copy .eyebrow{color:var(--cyan-300)}.overview-copy h1{margin:0 0 12px;font-size:clamp(2.1rem,4vw,3.7rem);line-height:1.04;letter-spacing:-.04em}.overview-copy p:last-child{max-width:700px;margin:0;color:#bed0dc}.overview-status{display:grid;grid-template-columns:repeat(2,1fr);gap:10px}.summary-card{padding:20px;border:1px solid var(--line);border-radius:var(--radius);background:#fff;box-shadow:var(--shadow-sm)}.summary-card span{display:block;color:var(--muted);font-size:.74rem;font-weight:700}.summary-card strong{display:block;margin-top:8px;color:var(--navy-950);font-size:2rem;line-height:1}.summary-card em{display:flex;align-items:center;gap:7px;margin-top:10px;color:var(--muted);font-size:.7rem;font-style:normal}
.panel{min-width:0;margin-top:18px;padding:24px;border:1px solid var(--line);border-radius:var(--radius);background:rgba(255,255,255,.94);box-shadow:var(--shadow-sm)}.panel-header{display:flex;align-items:flex-end;justify-content:space-between;gap:20px;margin-bottom:20px}.panel-header h2{margin:3px 0 0;color:var(--navy-950);font-size:1.35rem}.panel-header p{margin:0;color:var(--muted);font-size:.84rem}.filters{display:flex;gap:8px;flex-wrap:wrap}.filters input,.filters select,.range-select{min-height:40px;padding:0 12px;border:1px solid var(--line);border-radius:10px;background:#fff;color:var(--ink);font-size:.82rem}
.map-layout{display:grid;grid-template-columns:minmax(0,1.45fr) minmax(310px,.55fr);gap:18px}.map{height:450px;border-radius:15px;background:#e8f0f3;overflow:hidden}.map-aside{display:flex;flex-direction:column;gap:10px}.map-note{padding:18px;border-radius:14px;background:var(--ice-100)}.map-note strong{display:block;color:var(--navy-950)}.map-note span{color:var(--muted);font-size:.8rem}.legend{display:grid;grid-template-columns:1fr 1fr;gap:9px;padding:16px;border:1px solid var(--line);border-radius:14px}.legend span{display:flex;align-items:center;gap:8px;font-size:.75rem}
.device-grid{display:grid;grid-template-columns:repeat(3,1fr);gap:12px}.device-card{position:relative;display:flex;flex-direction:column;min-height:240px;padding:20px;border:1px solid var(--line);border-radius:16px;background:#fff;cursor:pointer;transition:.2s}.device-card:hover{transform:translateY(-3px);border-color:#abdfe3;box-shadow:var(--shadow-sm)}.device-card-top{display:flex;justify-content:space-between;gap:15px}.device-card h3{margin:18px 0 5px;color:var(--navy-950);font-size:1.08rem}.device-card p{margin:0;color:var(--muted);font-size:.8rem}.device-meta{display:flex;gap:6px;flex-wrap:wrap;margin-top:13px}.tag{padding:4px 8px;border-radius:999px;background:var(--ice-100);color:var(--blue-600);font-size:.66rem;font-weight:750}.device-stats{display:grid;grid-template-columns:1fr 1fr;gap:8px;margin-top:auto;padding-top:20px}.device-stat{padding:10px;border-radius:10px;background:#f6f9fa}.device-stat small{display:block;color:var(--muted);font-size:.63rem}.device-stat strong{font-size:.78rem;color:var(--navy-950)}
.detail{min-width:0;scroll-margin-top:95px}.detail[hidden]{display:none}.detail-banner{position:relative;overflow:hidden;padding:28px;border-radius:18px;background:linear-gradient(120deg,var(--navy-900),#16567d);color:#fff}.detail-banner-top{display:flex;justify-content:space-between;gap:20px}.detail-banner h2{margin:6px 0 8px;font-size:2rem}.detail-banner p{margin:0;color:#c7d8e3}.detail-meta{display:flex;gap:8px;flex-wrap:wrap;margin-top:18px}.detail-meta .tag{background:rgba(255,255,255,.1);color:#dff}.detail-columns{display:grid;grid-template-columns:minmax(0,1.35fr) minmax(300px,.65fr);gap:18px}.detail-columns>*{min-width:0}.measurement-categories,.category{min-width:0}.measurement-categories{display:grid;gap:18px}.category h3{margin:0 0 10px;color:var(--navy-950);font-size:.9rem}.measurement-grid{display:grid;grid-template-columns:repeat(auto-fit,minmax(min(190px,100%),1fr));gap:10px}.measurement{min-width:0;min-height:142px;display:flex;flex-direction:column;padding:16px;border:1px solid var(--line);border-radius:14px;background:#fff;overflow-wrap:anywhere}.measurement-head{display:flex;align-items:flex-start;justify-content:space-between;gap:8px}.measurement-label{min-width:0;color:var(--muted);font-size:.74rem;font-weight:720}.measurement-value{min-width:0;margin:auto 0 5px;color:var(--navy-950);font-size:clamp(1.45rem,2.2vw,1.9rem);font-weight:820;line-height:1;overflow-wrap:anywhere}.measurement-value small{margin-left:4px;color:var(--muted);font-size:.72rem}.measurement-time{color:#8a9ba7;font-size:.63rem}.modules{min-width:0;display:grid;gap:8px}.module{min-width:0;padding:15px;border:1px solid var(--line);border-radius:13px;background:#fff;overflow-wrap:anywhere}.module strong{display:block;color:var(--navy-950);font-size:.83rem}.module p{margin:4px 0 8px;color:var(--muted);font-size:.71rem}.module small{color:var(--blue-600);font-size:.66rem}
.chart-grid{display:grid;grid-template-columns:repeat(2,1fr);gap:12px}.chart-card{min-height:330px;padding:18px;border:1px solid var(--line);border-radius:14px;background:#fff}.chart-title{display:flex;align-items:start;justify-content:space-between;gap:12px}.chart-title h3{margin:0;color:var(--navy-950);font-size:.9rem}.chart-stats{display:flex;gap:12px}.chart-stats span{color:var(--muted);font-size:.62rem}.chart-stats b{display:block;color:var(--ink);font-size:.72rem}.chart-canvas{height:230px;margin-top:15px}
.empty{grid-column:1/-1;padding:45px 20px;text-align:center;color:var(--muted);border:1px dashed var(--line);border-radius:14px}.loading-shimmer{min-height:120px;background:linear-gradient(90deg,#f1f5f7,#fff,#f1f5f7);background-size:200%;animation:shimmer 1.2s linear infinite}@keyframes shimmer{to{background-position:-200% 0}}
.map-pin{width:18px;height:18px;border:3px solid #fff;border-radius:50%;background:var(--grey);box-shadow:0 2px 10px rgba(7,29,51,.35)}.map-pin.normal{background:var(--green)}.map-pin.warning{background:var(--amber)}.map-pin.alert,.map-pin.offline{background:var(--red)}
.leaflet-popup-content-wrapper{border-radius:13px}.popup h3{margin:0 0 4px;color:var(--navy-950);font-size:.92rem}.popup p{margin:0 0 8px;color:var(--muted);font-size:.72rem}.popup button{border:0;background:var(--navy-900);color:#fff;border-radius:7px;padding:6px 9px;font-size:.68rem;cursor:pointer}
@media(max-width:1180px){.overview-hero,.map-layout,.detail-columns{grid-template-columns:minmax(0,1fr)}.device-grid{grid-template-columns:repeat(2,minmax(0,1fr))}}
@media(max-width:850px){.dashboard-shell{display:block}.sidebar{position:static;height:auto;padding:15px 20px;flex-direction:row;align-items:center}.sidebar-brand{padding:0;border:0}.sidebar-brand img{width:145px}.sidebar-label,.sidebar-foot{display:none}.sidebar-nav{display:none}.topbar{top:0;padding:12px 20px}.dashboard-content{padding:22px 18px 55px}.overview-status{grid-template-columns:repeat(2,1fr)}.device-grid,.chart-grid{grid-template-columns:1fr}}
@media(max-width:560px){.topbar-title small,.connection span{display:none}.overview-copy{padding:25px}.overview-copy h1{font-size:2.25rem}.overview-status{grid-template-columns:1fr 1fr}.summary-card{padding:15px}.summary-card strong{font-size:1.55rem}.panel{padding:17px}.panel-header{align-items:flex-start;flex-direction:column}.filters{width:100%}.filters input,.filters select{width:100%}.map{height:360px}.measurement-grid{grid-template-columns:1fr}.detail-banner-top{flex-direction:column}.chart-stats{display:none}}

/* 3.2 — plataforma orientada a clientes */
.sidebar-foot a{display:block;margin-top:4px;color:var(--cyan-300);font-weight:800}
.overview-hero{grid-template-columns:minmax(0,1.35fr) minmax(340px,.65fr)}
.overview-status{grid-template-columns:repeat(3,1fr);align-content:stretch}
.summary-card{display:flex;min-width:0;flex-direction:column;justify-content:center;border-radius:20px}
.map-layout{grid-template-columns:minmax(0,1fr) 280px}.map{height:560px;border-radius:18px}.panel{border-radius:22px}
.device-grid{grid-template-columns:repeat(3,minmax(0,1fr))}.device-card{min-height:280px;padding:22px;border-radius:20px}
.station-location{max-width:55%;color:var(--muted);font-size:.74rem;text-align:right}
.card-readings{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:8px;margin:22px 0}
.card-reading{min-width:0;padding:12px;border-radius:14px;background:#f3f8fa}.card-reading small{display:block;overflow:hidden;color:var(--muted);font-size:.67rem;text-overflow:ellipsis;white-space:nowrap}.card-reading strong{display:block;margin-top:5px;color:var(--navy-950);font-size:1.05rem}.card-reading i{color:var(--muted);font-size:.7rem;font-style:normal}
.device-card footer{display:flex;justify-content:space-between;margin-top:auto;padding-top:14px;border-top:1px solid var(--line);color:var(--muted);font-size:.7rem}.device-card footer strong{color:var(--blue-600)}
.current-values{margin-bottom:18px}.measurement-grid{grid-template-columns:repeat(3,minmax(0,1fr))}.popup-values{display:grid;gap:4px;margin:8px 0 12px}.popup-values span{display:flex;justify-content:space-between;gap:14px;color:var(--muted);font-size:.75rem}.popup-values b{color:var(--navy-950)}
@media(max-width:1180px){.overview-hero{grid-template-columns:1fr}.device-grid{grid-template-columns:repeat(2,minmax(0,1fr))}.map-layout{grid-template-columns:1fr}.map-aside{display:grid;grid-template-columns:1fr 1fr}.measurement-grid{grid-template-columns:repeat(2,minmax(0,1fr))}}
@media(max-width:760px){.overview-status,.device-grid,.measurement-grid,.chart-grid,.map-aside{grid-template-columns:1fr}.map{height:430px}.card-readings{grid-template-columns:repeat(2,minmax(0,1fr))}.dashboard-content{padding:20px 14px 50px}}

/* 3.2.1 — vista ejecutiva por dispositivo */
.dashboard-body{background:#eef4f6}
.device-selector{display:flex;align-items:center;gap:8px;padding:5px 6px 5px 12px;border:1px solid var(--line);border-radius:14px;background:#fff}
.device-selector span{color:var(--muted);font-size:.68rem;font-weight:750}.device-selector select{min-width:150px;border:0;background:#fff;color:var(--navy-950);font:inherit;font-size:.78rem;font-weight:800;outline:0}
.selected-overview{padding:26px;border-radius:24px;background:linear-gradient(135deg,#082d38,#0b5660);color:#fff;box-shadow:0 18px 50px rgba(7,29,51,.12)}
.selected-heading{display:flex;align-items:flex-start;justify-content:space-between;gap:24px}.selected-heading .eyebrow{color:#5de0df}.selected-heading h1{margin:5px 0 6px;font-size:clamp(2rem,4vw,3.5rem);letter-spacing:-.04em}.selected-heading p:last-child{margin:0;color:#aed0d4}.selected-heading .status-pill{background:rgba(255,255,255,.1);border-color:rgba(255,255,255,.18);color:#fff}
.quick-metrics{display:grid;grid-template-columns:repeat(5,minmax(0,1fr));gap:10px;margin-top:26px}
.quick-metric{position:relative;overflow:hidden;min-width:0;padding:18px;border:1px solid rgba(255,255,255,.13);border-radius:17px;background:rgba(2,28,35,.45)}
.quick-metric::after{content:"";position:absolute;right:-12px;bottom:-18px;width:78px;height:6px;border-radius:999px;background:var(--metric,#42d7d3);box-shadow:0 0 18px var(--metric,#42d7d3)}
.quick-metric>span{display:block;min-height:30px;color:#9ec6ca;font-size:.68rem;font-weight:750}.quick-metric strong{display:block;margin:9px 0 8px;overflow-wrap:anywhere;font-size:clamp(1.35rem,2.3vw,2rem);line-height:1}.quick-metric strong small{margin-left:4px;color:#b9d5d7;font-size:.68rem}.quick-metric em{color:#8fb6ba;font-size:.62rem;font-style:normal}.metric-blue{--metric:#3b9ee8}.metric-green{--metric:#55d49f}.metric-amber{--metric:#f4c15d}.metric-violet{--metric:#a28af0}
.single-map{height:440px}.current-values .measurement-grid{grid-template-columns:repeat(5,minmax(0,1fr))}.current-values .measurement{min-height:125px;background:#f8fbfc}.trends-panel{background:#fff}.chart-card{border-radius:18px}.chart-canvas{height:250px}
@media(max-width:1250px){.quick-metrics,.current-values .measurement-grid{grid-template-columns:repeat(3,minmax(0,1fr))}}
@media(max-width:900px){.topbar{align-items:flex-start}.topbar-actions{flex-wrap:wrap;justify-content:flex-end}.quick-metrics,.current-values .measurement-grid{grid-template-columns:repeat(2,minmax(0,1fr))}}
@media(max-width:600px){.topbar-title{display:none}.topbar-actions{width:100%;justify-content:stretch}.device-selector{flex:1}.device-selector select{width:100%;min-width:0}.connection{display:none}.selected-heading{flex-direction:column}.quick-metrics,.current-values .measurement-grid{grid-template-columns:1fr 1fr}.single-map{height:360px}}
