:root{--canvas:#f4f7fa;--surface:#fff;--surface-muted:#f7f9fb;--ink:#0b1f38;--ink-soft:#4f6175;--ink-faint:#7b8998;--line:#dfe6ed;--line-soft:#edf1f5;--navy:#0d2948;--navy-strong:#071d34;--water:#159bd7;--water-soft:#e8f7fd;--electricity:#f39a11;--electricity-soft:#fff5e4;--gas:#ee5039;--gas-soft:#fff0ed;--success:#13a267;--success-soft:#e7f7f0;--warning:#c27a09;--danger:#c83f35;--radius-lg:18px;--radius-md:13px}
*{box-sizing:border-box}html{background:var(--canvas)}body{margin:0;min-width:320px;color:var(--ink);background:var(--canvas);font-family:system-ui,-apple-system,"Segoe UI",Tahoma,Arial,sans-serif;font-size:15px;line-height:1.5}button,select,input{font:inherit}button,a,select,input{-webkit-tap-highlight-color:transparent}button:focus-visible,a:focus-visible,select:focus-visible,input:focus-visible{outline:3px solid rgba(21,155,215,.28);outline-offset:2px}
.appbar{min-height:74px;padding:12px clamp(20px,4vw,58px);display:flex;align-items:center;justify-content:space-between;gap:24px;background:rgba(255,255,255,.96);border-bottom:1px solid var(--line);position:sticky;top:0;z-index:20}.brand{display:flex;align-items:center;gap:11px;color:var(--ink);text-decoration:none}.brand-icon{width:38px;height:38px;display:grid;place-items:center;border-radius:11px;color:#fff;background:var(--navy);font-size:18px}.brand strong,.brand small{display:block}.brand strong{font-size:18px;line-height:1.15}.brand small{margin-top:2px;color:var(--ink-faint);font-size:10px}.appbar-meta,.system-state,.last-sync{display:flex;align-items:center}.appbar-meta{gap:13px}.system-state{gap:8px;color:var(--ink-soft);font-size:12px}.status-dot{width:8px;height:8px;border-radius:50%;background:#a4afb9}.system-state.online .status-dot{background:var(--success);box-shadow:0 0 0 4px var(--success-soft)}.system-state.warning .status-dot{background:var(--warning)}.header-divider{width:1px;height:30px;background:var(--line)}.last-sync{align-items:flex-start;flex-direction:column;line-height:1.25}.last-sync span{color:var(--ink-faint);font-size:9px}.last-sync strong{font-size:11px;font-weight:680}.icon-button{width:38px;height:38px;display:grid;place-items:center;color:var(--ink);background:var(--surface);border:1px solid var(--line);border-radius:11px;cursor:pointer;font-size:17px}.icon-button:hover{background:var(--surface-muted);border-color:#c9d4de}.icon-button:disabled{opacity:.5;cursor:wait}.icon-button.spinning i{animation:spin .9s linear infinite}@keyframes spin{to{transform:rotate(-360deg)}}
.dashboard-shell{width:min(1450px,calc(100% - 36px));margin:0 auto;padding:24px 0 38px}.hero{min-height:260px;padding:28px clamp(24px,3vw,42px);display:grid;grid-template-columns:minmax(230px,.78fr) minmax(0,2.22fr);align-items:stretch;gap:34px;overflow:hidden;color:#fff;background:var(--navy-strong);border:1px solid #183957;border-radius:var(--radius-lg)}.hero-intro{padding-left:26px;border-left:1px solid rgba(255,255,255,.16);display:flex;flex-direction:column;justify-content:center}.hero-kicker{display:inline-flex;align-items:center;gap:7px;color:#8fc9ed;font-size:11px;font-weight:750}.hero h1{margin:10px 0 8px;max-width:320px;font-size:clamp(27px,2.7vw,40px);line-height:1.2;letter-spacing:-.035em}.hero-intro>p{margin:0;max-width:330px;color:#adc0d2;font-size:12px}.hero-clock{margin-top:26px;display:grid;grid-template-columns:38px auto;column-gap:10px;align-items:center}.hero-clock>i{grid-row:1/3;width:38px;height:38px;display:grid;place-items:center;border:1px solid rgba(255,255,255,.23);border-radius:50%;font-size:18px}.hero-clock strong{direction:ltr;justify-self:start;font-size:20px;line-height:1}.hero-clock span{color:#91a9be;font-size:10px}.hero-meters{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));align-items:center;gap:0}.hero-meter{min-width:0;padding:12px clamp(15px,2vw,27px);color:#fff;background:transparent;border:0;border-right:1px solid rgba(255,255,255,.12);text-align:right;cursor:pointer}.hero-meter:last-child{border-right:0}.hero-meter:hover .hero-meter-icon,.hero-meter.selected .hero-meter-icon{transform:translateY(-2px);background:rgba(255,255,255,.11)}.hero-meter-top{display:flex;align-items:center;gap:11px}.hero-meter-icon{width:50px;height:50px;flex:0 0 50px;display:grid;place-items:center;color:var(--meter-color);border:2px solid currentColor;border-radius:50%;font-size:23px;transition:.18s ease}.hero-meter-name{display:block;font-size:14px;font-weight:750}.live-label{display:inline-flex;align-items:center;gap:5px;color:#89a4bb;font-size:9px}.live-label:before{content:"";width:5px;height:5px;background:var(--success);border-radius:50%}.live-label.offline:before{background:var(--danger)}.hero-reading{margin-top:15px;direction:ltr;text-align:right;white-space:nowrap}.hero-reading strong{font-size:clamp(27px,2.7vw,39px);letter-spacing:-.04em;line-height:1}.hero-reading small{margin-left:5px;color:#bac9d7;font-weight:700}.hero-meter-meta{margin-top:7px;display:flex;justify-content:space-between;gap:10px;color:#8fa8bc;font-size:9px}.hero-skeleton{min-height:150px;margin:12px;border-radius:14px;background:rgba(255,255,255,.06);animation:pulse 1.3s infinite alternate}@keyframes pulse{to{opacity:.46}}
.primary-grid,.secondary-grid{display:grid;gap:16px;margin-top:16px}.primary-grid{grid-template-columns:minmax(0,1.85fr) minmax(340px,.85fr)}.secondary-grid{grid-template-columns:minmax(0,1.55fr) minmax(360px,.75fr)}.surface{background:var(--surface);border:1px solid var(--line);border-radius:var(--radius-lg)}.trend-surface,.comparison-surface,.weekly-surface,.health-surface{padding:22px}.section-header{display:flex;align-items:flex-end;justify-content:space-between;gap:18px}.section-kicker{display:inline-flex;align-items:center;gap:6px;color:#47718e;font-size:10px;font-weight:760}.section-header h2{margin:3px 0 0;font-size:20px;line-height:1.25;letter-spacing:-.015em}.compact-header{align-items:center}.chart-controls{display:flex;align-items:center;justify-content:flex-end;gap:7px;flex-wrap:wrap}.segmented{display:inline-flex;padding:3px;background:#eef2f6;border-radius:10px}.segmented button{padding:6px 12px;color:var(--ink-soft);background:transparent;border:0;border-radius:8px;cursor:pointer;font-size:11px}.segmented button.active{color:#fff;background:var(--navy)}select{height:35px;padding:0 10px;color:var(--ink);background:#fff;border:1px solid var(--line);border-radius:10px;cursor:pointer;font-size:11px}.chart-metrics{display:flex;align-items:center;gap:25px;margin-top:20px;padding:10px 14px;background:var(--surface-muted);border:1px solid var(--line-soft);border-radius:11px}.chart-metrics div span{display:block;color:var(--ink-faint);font-size:9px}.chart-metrics div strong{direction:ltr;display:block;font-size:14px}.download-link{margin-right:auto;display:inline-flex;align-items:center;gap:6px;color:var(--navy);text-decoration:none;font-size:11px;font-weight:750}.chart-wrap{min-height:350px;padding-top:14px;direction:ltr;overflow-x:auto}.chart-wrap svg{width:100%;min-width:700px;height:340px;display:block;overflow:visible}.chart-grid-line{stroke:#e8edf2;stroke-width:1}.chart-axis-label{fill:#81909f;font-size:10px;font-family:system-ui,sans-serif}.chart-line{fill:none;stroke-width:3;stroke-linecap:round;stroke-linejoin:round}.chart-area{opacity:.1}.chart-point{stroke:#fff;stroke-width:2;transition:r .15s}.chart-point:hover{r:6}.chart-footer{display:flex;justify-content:space-between;align-items:center;gap:16px;color:var(--ink-faint);font-size:10px}.chart-footer>span{display:inline-flex;align-items:center;gap:7px}.series-dot{width:8px;height:8px;display:inline-block;border-radius:50%;background:var(--electricity)}.loading-state{min-height:230px;display:grid;place-items:center;color:var(--ink-faint);font-size:12px;text-align:center}.loading-state.compact{min-height:130px}.empty-state{min-height:260px;display:grid;place-items:center;text-align:center;color:var(--ink-faint);font-size:12px}.empty-state i{display:block;margin-bottom:8px;color:#b5c0ca;font-size:28px}.empty-state strong{display:block;margin-bottom:4px;color:var(--ink);font-size:15px}
.comparison-list{margin-top:17px;display:grid;gap:10px}.comparison-row{--meter-color:var(--water);--meter-soft:var(--water-soft);padding:14px;background:var(--surface-muted);border:1px solid var(--line-soft);border-radius:var(--radius-md)}.comparison-head{display:flex;align-items:center;justify-content:space-between;gap:10px}.comparison-id{display:flex;align-items:center;gap:9px}.comparison-icon{width:34px;height:34px;display:grid;place-items:center;color:var(--meter-color);background:var(--meter-soft);border-radius:10px;font-size:17px}.comparison-id strong{display:block;font-size:12px}.comparison-id small{display:block;direction:ltr;text-align:right;color:var(--ink-faint);font-size:8px}.comparison-values{margin-top:12px;display:grid;grid-template-columns:1fr auto 1fr;align-items:center;gap:8px;direction:ltr}.comparison-value{text-align:center}.comparison-value strong{display:block;font-size:15px}.comparison-value span{color:var(--ink-faint);font-size:8px}.comparison-track{width:90px;display:grid;gap:4px}.comparison-track i{display:block;height:5px;border-radius:8px;background:#d9e0e7}.comparison-track i.today{width:var(--today-width);margin-left:auto;background:var(--meter-color)}.comparison-track i.yesterday{width:var(--yesterday-width);margin-left:auto}.comparison-delta{margin-top:9px;display:flex;align-items:center;justify-content:center;gap:5px;color:var(--ink-faint);font-size:9px}.comparison-delta.good{color:var(--success)}.comparison-delta.up{color:var(--warning)}
.subtle-note{color:var(--ink-faint);font-size:9px}.weekly-grid{margin-top:18px;display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:12px}.weekly-card{--meter-color:var(--water);padding:14px;background:var(--surface-muted);border:1px solid var(--line-soft);border-radius:var(--radius-md)}.weekly-card-head{display:flex;justify-content:space-between;align-items:center;gap:8px}.weekly-card-head strong{font-size:12px}.weekly-card-head span{color:var(--ink-faint);font-size:9px;direction:ltr}.mini-chart{margin-top:9px;direction:ltr}.mini-chart svg{width:100%;height:118px;display:block;overflow:visible}.mini-bar{fill:var(--meter-color);opacity:.86}.mini-label{fill:#8996a3;font:8px system-ui,sans-serif}
.health-list{margin-top:15px}.health-row{display:grid;grid-template-columns:minmax(0,1fr) auto;gap:12px;align-items:center;padding:10px 0;border-bottom:1px solid var(--line-soft)}.health-name{display:flex;align-items:center;gap:10px;min-width:0}.health-icon{width:33px;height:33px;display:grid;place-items:center;color:var(--meter-color);background:var(--meter-soft);border-radius:10px}.health-name strong,.health-name small{display:block}.health-name strong{font-size:11px}.health-name small{color:var(--ink-faint);font-size:8px;direction:ltr;text-align:right}.health-meta{text-align:left}.health-meta strong{display:block;color:var(--success);font-size:10px}.health-meta strong.weak{color:var(--warning)}.health-meta strong.offline{color:var(--danger)}.health-meta span{color:var(--ink-faint);font-size:8px;direction:ltr}.readings-title{margin-top:15px;padding:8px 0;display:flex;justify-content:space-between;color:var(--ink-faint);border-bottom:1px solid var(--line);font-size:9px}.recent-reading{display:grid;grid-template-columns:minmax(0,1fr) auto;gap:10px;padding:9px 0;border-bottom:1px solid var(--line-soft)}.recent-reading:last-child{border-bottom:0}.recent-reading strong{font-size:10px}.recent-reading span{color:var(--ink-faint);font-size:8px}.recent-reading-value{direction:ltr;text-align:left;font-weight:760;font-size:10px}.footer{min-height:56px;padding:12px clamp(20px,4vw,58px);display:flex;align-items:center;justify-content:space-between;gap:20px;color:var(--ink-faint);background:#fff;border-top:1px solid var(--line);font-size:10px}.footer span{display:inline-flex;align-items:center;gap:6px}
.auth-page{min-height:100vh;background:#fff}.auth-layout{min-height:100vh;display:grid;grid-template-columns:minmax(370px,.9fr) minmax(420px,1.1fr)}.auth-story{padding:clamp(34px,6vw,82px);display:flex;flex-direction:column;justify-content:space-between;color:#fff;background:var(--navy-strong)}.auth-brand{display:flex;align-items:center;gap:9px;font-size:18px;font-weight:800}.auth-brand i{color:#91d1f2}.auth-story h1{margin:13px 0;font-size:clamp(36px,4vw,58px);line-height:1.15;letter-spacing:-.045em}.auth-story p{max-width:480px;margin:0;color:#a9bed1}.auth-meter-strip{display:flex;gap:11px}.auth-meter-strip span{width:42px;height:42px;display:grid;place-items:center;border:1px solid rgba(255,255,255,.17);border-radius:50%;font-size:18px}.auth-meter-strip .water{color:#55c6f3}.auth-meter-strip .electricity{color:#f7ae3b}.auth-meter-strip .gas{color:#ff715d}.auth-form-wrap{padding:34px;display:grid;place-items:center;background:var(--canvas)}.auth-card{width:min(420px,100%);padding:34px;background:#fff;border:1px solid var(--line);border-radius:20px}.auth-lock{width:44px;height:44px;display:grid;place-items:center;color:var(--navy);background:#eaf1f7;border-radius:13px;font-size:18px}.auth-card h2{margin:17px 0 2px;font-size:25px}.auth-card>p{margin:0 0 23px;color:var(--ink-faint);font-size:12px}.auth-card label{display:block;margin:13px 0 6px;color:var(--ink-soft);font-size:11px;font-weight:700}.input-wrap{height:46px;padding:0 13px;display:flex;align-items:center;gap:9px;background:var(--surface-muted);border:1px solid var(--line);border-radius:11px}.input-wrap i{color:var(--ink-faint)}.input-wrap input{width:100%;height:100%;padding:0;color:var(--ink);background:transparent;border:0;outline:0;direction:ltr;text-align:left}.auth-card .auth-error{min-height:18px;margin:8px 0 0;color:var(--danger);font-size:10px}.login-button{width:100%;height:46px;margin-top:6px;padding:0 16px;display:flex;align-items:center;justify-content:space-between;color:#fff;background:var(--navy);border:0;border-radius:11px;cursor:pointer;font-weight:750}.login-button:hover{background:#12395f}.login-button:disabled{opacity:.6;cursor:wait}.auth-card>small{margin-top:16px;display:block;color:var(--ink-faint);text-align:center;font-size:9px}
@media(max-width:1120px){.hero{grid-template-columns:1fr}.hero-intro{padding-left:0;padding-bottom:20px;border-left:0;border-bottom:1px solid rgba(255,255,255,.16)}.primary-grid,.secondary-grid{grid-template-columns:1fr}.comparison-list{grid-template-columns:repeat(3,1fr)}}@media(max-width:780px){.appbar{position:static;padding:10px 14px}.brand small,.system-state,.header-divider,.last-sync{display:none}.dashboard-shell{width:min(100% - 22px,1450px);padding-top:12px}.hero{padding:22px 18px}.hero-meters,.comparison-list,.weekly-grid{grid-template-columns:1fr}.hero-meter{border-right:0;border-bottom:1px solid rgba(255,255,255,.12)}.hero-meter:last-child{border-bottom:0}.section-header{align-items:flex-start;flex-direction:column}.chart-controls{width:100%;min-width:0;justify-content:flex-start}.segmented{width:100%;min-width:0;flex:1 0 100%}.segmented button{min-width:0;flex:1 1 0}.chart-metrics{flex-wrap:wrap}.chart-footer,.footer{align-items:flex-start;flex-direction:column}.auth-layout{grid-template-columns:1fr}.auth-story{min-height:300px}.auth-meter-strip{display:none}}@media(prefers-reduced-motion:reduce){*,*:before,*:after{scroll-behavior:auto!important;animation-duration:.01ms!important;transition-duration:.01ms!important}}
.surface,.trend-surface,.comparison-surface,.weekly-surface,.health-surface,.section-header{min-width:0}.chart-wrap{width:100%;max-width:100%;min-width:0}
.hero,.primary-grid,.secondary-grid,.hero-intro,.hero-meters,.surface{direction:ltr}.hero-intro{padding-left:0;padding-right:26px;border-left:0;border-right:1px solid rgba(255,255,255,.16)}.hero-meter,.hero-reading{text-align:left}.download-link{margin-right:0;margin-left:auto}.comparison-id small,.health-name small{text-align:left}.health-meta,.recent-reading-value{text-align:right}
@media(max-width:1120px){.hero-intro{padding-right:0;border-right:0}}

/* iPhone PWA: safe areas and touch-first layout without changing desktop. */
html{min-height:100%;-webkit-text-size-adjust:100%}body{min-height:100dvh;-webkit-overflow-scrolling:touch}.appbar{padding-top:max(12px,env(safe-area-inset-top));padding-right:max(clamp(20px,4vw,58px),env(safe-area-inset-right));padding-left:max(clamp(20px,4vw,58px),env(safe-area-inset-left))}.dashboard-shell{padding-bottom:calc(38px + env(safe-area-inset-bottom))}.footer{padding-right:max(clamp(20px,4vw,58px),env(safe-area-inset-right));padding-bottom:max(12px,env(safe-area-inset-bottom));padding-left:max(clamp(20px,4vw,58px),env(safe-area-inset-left))}.auth-story{padding-top:max(clamp(34px,6vw,82px),env(safe-area-inset-top));padding-left:max(clamp(34px,6vw,82px),env(safe-area-inset-left))}.auth-form-wrap{padding-right:max(34px,env(safe-area-inset-right));padding-bottom:max(34px,env(safe-area-inset-bottom));padding-left:max(34px,env(safe-area-inset-left))}
@media(max-width:780px){.appbar{padding-top:max(10px,env(safe-area-inset-top));padding-right:max(14px,env(safe-area-inset-right));padding-left:max(14px,env(safe-area-inset-left))}.dashboard-shell{width:100%;padding-right:max(11px,env(safe-area-inset-right));padding-left:max(11px,env(safe-area-inset-left))}.trend-surface,.comparison-surface,.weekly-surface,.health-surface{padding:18px}.chart-wrap{overscroll-behavior-x:contain;-webkit-overflow-scrolling:touch}.chart-wrap svg{min-width:560px}.icon-button{min-width:44px;min-height:44px}.auth-layout{display:block;min-height:100dvh;background:var(--canvas)}.auth-story{min-height:0;padding:calc(max(18px,env(safe-area-inset-top))) max(20px,env(safe-area-inset-right)) 18px max(20px,env(safe-area-inset-left))}.auth-story>div:nth-child(2),.auth-meter-strip{display:none}.auth-form-wrap{min-height:calc(100dvh - 75px);padding:28px max(18px,env(safe-area-inset-right)) max(28px,env(safe-area-inset-bottom)) max(18px,env(safe-area-inset-left));align-items:start}.auth-card{margin-top:clamp(8px,8vh,56px);padding:28px 22px}.input-wrap,.login-button{min-height:48px}}
@media(display-mode:standalone){body{overscroll-behavior-y:none}.appbar{position:sticky;top:0}.auth-page{overscroll-behavior-y:none}}
