*{box-sizing:border-box}html,body{margin:0;min-height:100%;font-family:Arial,sans-serif;background:#0b1018;color:#f5f7fa}body{padding:28px 28px 70px;background:radial-gradient(circle at 70% 0,#17273a 0,#0b1018 38%)}header{display:flex;justify-content:space-between;align-items:center;margin-bottom:28px}h1{margin:0;font-size:38px}header span{color:#98a5b5}.clock{font-size:48px;font-weight:700}.hero{display:grid;grid-template-columns:1fr 1fr;gap:14px}.big{display:flex;gap:15px;align-items:center;padding:22px;background:#151d28;border:1px solid #253244;border-radius:24px}.big .ico{font-size:42px}.big label,.big small{display:block;color:#8e9baa}.big strong{display:block;font-size:35px;margin:5px 0}.flow{margin:18px 0;padding:20px;background:#111925;border-radius:26px;display:flex;justify-content:space-around;align-items:center;text-align:center}.flow span,.flow b,.flow strong{display:block}.flow span{font-size:34px}.flow strong{font-size:20px;margin-top:4px}.line{font-size:32px;color:#70a7ff}h2{font-size:20px;color:#aab5c3;margin:25px 5px 12px}.cards{display:grid;grid-template-columns:repeat(3,1fr);gap:12px}.cards article{padding:17px 10px;text-align:center;background:#151d28;border-radius:20px}.cards article span{display:block;font-size:25px}.cards strong{display:block;font-size:25px;margin:8px}.cards small{color:#8996a5}.actions{display:grid;grid-template-columns:1fr 1fr;gap:12px}.actions button{border:1px solid #29394c;background:#151d28;color:white;border-radius:22px;padding:22px;font-size:30px}.actions button span{display:block;font-size:16px;margin-top:8px}footer{position:fixed;bottom:0;left:0;right:0;padding:15px 28px;background:#0b1018eF;color:#8d9aaa;font-size:13px}.dot{display:inline-block;width:9px;height:9px;border-radius:50%;background:#e35b5b;margin-right:8px}.dot.ok{background:#58d68d}#updated{float:right}@media(max-width:600px){body{padding:18px 14px 65px}.hero{grid-template-columns:1fr}.clock{font-size:38px}.big strong{font-size:31px}}
.weather{display:flex;justify-content:space-between;align-items:center;background:#151d28;border:1px solid #253244;border-radius:24px;padding:18px 22px;margin-bottom:18px}.weather-main{display:flex;align-items:center;gap:14px}.weather-main>span{font-size:44px}.weather-main b{display:block;font-size:32px}.weather-main small{color:#8e9baa}.weather-stats{display:grid;grid-template-columns:1fr 1fr;gap:8px 18px;color:#8e9baa}.weather-stats b{color:#fff}.flow small{display:block;color:#8e9baa;margin-top:5px}.energy-cards{display:grid;grid-template-columns:repeat(3,1fr);gap:10px;margin-top:12px}.energy-cards article{background:#151d28;border-radius:16px;padding:13px}.energy-cards small{display:block;color:#8e9baa}.energy-cards b{font-size:18px}.overlay{display:none;position:fixed;inset:0;background:#000a;z-index:20}.overlay.show{display:block}.drawer{position:absolute;left:12px;right:12px;bottom:12px;max-height:80vh;overflow:auto;background:#111925;border:1px solid #304158;border-radius:26px;padding:18px}.drawer-head{display:flex;justify-content:space-between;align-items:center;position:sticky;top:-18px;background:#111925;padding:10px 0;z-index:2}.drawer-head h2{margin:0;color:#fff;font-size:26px}.drawer-head button{background:#273446;color:#fff;border:0;border-radius:50%;width:44px;height:44px;font-size:20px}.device{display:flex;align-items:center;justify-content:space-between;gap:10px;background:#182230;border-radius:18px;padding:14px;margin:9px 0}.device-name{font-size:17px;font-weight:bold}.device-state{font-size:12px;color:#91a0b1}.device-controls{display:flex;gap:7px}.device-controls button{border:0;border-radius:12px;padding:11px 14px;background:#293a50;color:white;font-weight:bold}.device-controls button.primary{background:#315e94}.device-controls button.danger{background:#66373b}@media(max-width:600px){.weather{display:block}.weather-stats{margin-top:12px}.energy-cards{grid-template-columns:1fr 1fr}.flow{padding:14px 7px}.flow .arrow{font-size:22px}}
.energy-head{display:flex;align-items:center;justify-content:space-between;gap:15px}.energy-head h2{margin:12px 5px}.energy-badge{display:flex;align-items:center;gap:10px;padding:10px 16px;border-radius:18px;background:#253244;min-width:220px}.energy-badge>span{font-size:28px}.energy-badge b,.energy-badge small{display:block}.energy-badge small{color:#b6c0cc;margin-top:2px}.energy-badge.solar{background:#5b4b18}.energy-badge.grid{background:#193653}.energy-badge.export{background:#174b3a}.flow.modern{padding:22px 14px}.flow-node{min-width:120px;padding:12px;border-radius:18px}.flow-node>span{font-size:38px}.flow-node strong{font-size:25px;margin-top:7px}.flow-link{font-size:32px;color:#6da7e8}.energy-summary{display:grid;grid-template-columns:repeat(3,1fr);gap:11px}.energy-summary>div{position:relative;background:#151d28;border:1px solid #253244;border-radius:20px;padding:16px}.energy-summary>div>span{font-size:23px;float:right}.energy-summary small,.energy-summary b,.energy-summary em{display:block}.energy-summary small{color:#8e9baa}.energy-summary b{font-size:21px;margin-top:6px}.energy-summary em{font-size:12px;color:#778696;font-style:normal;margin-top:4px}@media(max-width:600px){.energy-head{align-items:stretch;flex-direction:column}.energy-badge{min-width:0}.energy-summary{grid-template-columns:1fr 1fr 1fr}.energy-summary>div{padding:12px 8px}.energy-summary b{font-size:16px}.flow-node{min-width:80px}.flow-node strong{font-size:20px}}
/* Energy status: readable from across the kitchen */
.energy-head{display:block}.energy-head h2{margin-bottom:10px}.energy-badge{width:100%;min-height:92px;justify-content:center;text-align:center;border:2px solid #40546d;border-radius:24px;padding:14px 20px}.energy-badge>span{font-size:44px;margin-right:8px}.energy-badge b{font-size:27px;line-height:1.05;text-transform:uppercase;letter-spacing:.5px}.energy-badge small{font-size:16px;margin-top:7px;color:#eef3f8}.energy-badge.solar{background:#725c0e;border-color:#e2bd32;box-shadow:0 0 22px #e2bd3233}.energy-badge.export{background:#126044;border-color:#48d597;box-shadow:0 0 24px #48d59744}.energy-badge.grid{background:#174a73;border-color:#55a8e8;box-shadow:0 0 22px #55a8e833}@media(max-width:600px){.energy-badge{min-height:105px}.energy-badge b{font-size:25px}.energy-badge small{font-size:15px}}
.ecs-title{display:flex;justify-content:space-between;align-items:center}.ecs-title h2{margin-bottom:10px}.ecs-pill{padding:7px 13px;border-radius:99px;background:#273446;font-weight:bold}.ecs-pill.on{background:#8b3b25}.ecs-pill.off{background:#244938}.ecs-card{background:#151d28;border:1px solid #2b3a4d;border-radius:22px;padding:16px}.ecs-live{display:grid;grid-template-columns:1fr 1fr;gap:12px}.ecs-live>div{background:#101720;border-radius:16px;padding:14px}.ecs-live small,.ecs-live strong,.ecs-live span{display:block}.ecs-live small{color:#8e9baa}.ecs-live strong{font-size:25px;margin:5px 0}.ecs-live span{font-size:13px;color:#a9b5c2}.ecs-actions{display:grid;grid-template-columns:1fr 1fr;gap:10px;margin-top:12px}.ecs-actions button{min-height:58px;border:0;border-radius:15px;background:#315e94;color:white;font-size:17px;font-weight:bold}.ecs-actions button:last-child{background:#734a2d}.ecs-actions button:disabled{opacity:.45}
.energy-trend{margin-top:12px;background:#111925;border:1px solid #253244;border-radius:20px;padding:12px 14px}.trend-head{display:flex;justify-content:space-between;align-items:center;margin-bottom:5px}.trend-head span,.energy-trend>small{font-size:11px;color:#8e9baa}.trend-head i{display:inline-block;width:9px;height:9px;border-radius:50%;margin:0 4px 0 10px}.trend-head i.pv{background:#f7c948}.trend-head i.house{background:#58a6ff}.trend-head i.net{background:#7ee2a8}#energyChart{display:block;width:100%;height:105px}.flow-link span{display:inline-block;animation:flowPulse 1.4s ease-in-out infinite}@keyframes flowPulse{0%,100%{opacity:.35;transform:scale(.9)}50%{opacity:1;transform:scale(1.15)}}
.chart-wrap{position:relative;height:132px;padding-left:42px}.chart-wrap #energyChart{height:120px}.chart-scale{position:absolute;left:0;top:2px;bottom:10px;width:38px;color:#718094;font-size:10px}.chart-scale span{position:absolute;right:4px;transform:translateY(-50%)}.chart-foot{display:flex;justify-content:space-between;color:#718094;font-size:11px;padding-left:42px}.chart-foot #energyDelta{font-weight:bold;color:#aab8c8}.energy-wire{position:relative;width:72px;height:10px;border-radius:10px;background:rgba(110,140,170,.18);overflow:hidden}.energy-wire i{position:absolute;top:2px;width:6px;height:6px;border-radius:50%;background:#72b7ff;box-shadow:0 0 8px currentColor;animation:energyDot var(--flow-speed,1.5s) linear infinite}.energy-wire i:nth-child(2){animation-delay:calc(var(--flow-speed,1.5s) / -3)}.energy-wire i:nth-child(3){animation-delay:calc(var(--flow-speed,1.5s) * -2 / 3)}.pv-flow .energy-wire i{background:#f7c948}.grid-flow.export .energy-wire i{background:#65e6a7}.flow-link.reverse .energy-wire i{animation-name:energyDotReverse}.flow-link.idle .energy-wire i{display:none}@keyframes energyDot{from{left:-8px}to{left:74px}}@keyframes energyDotReverse{from{left:74px}to{left:-8px}}.flow-link>span{font-size:18px;margin-top:4px}.flow-link{display:flex;flex-direction:column;align-items:center;justify-content:center}
/* Compact energy chart typography for Family Hub */
.chart-scale{font-size:8px;width:34px}.chart-wrap{padding-left:38px}.chart-foot{padding-left:38px;font-size:9px;align-items:center}.chart-foot #energyDelta{font-size:11px}.trend-head b{font-size:13px}.trend-head span{font-size:9px}.energy-trend>small{font-size:9px}
/* Family Hub chart v2: compact labels */
.energy-trend{padding:10px 12px}.trend-head{margin-bottom:2px}.trend-head b{font-size:11px}.trend-head span{font-size:8px}.trend-head i{width:6px;height:6px;margin-left:6px}.chart-wrap{height:112px;padding-left:30px}.chart-wrap #energyChart{height:104px}.chart-scale{width:27px;font-size:7px}.chart-foot{padding-left:30px;font-size:7px;line-height:1.1}.chart-foot #energyDelta{font-size:8px;font-weight:600}
/* Samsung/Tizen: prevent automatic text inflation inside chart */
html{-webkit-text-size-adjust:100%;text-size-adjust:100%}.chart-scale span{font-size:9px!important;line-height:1!important;white-space:nowrap}.chart-foot,#chartNow,#energyDelta{font-size:9px!important;line-height:12px!important;white-space:nowrap}.chart-foot{height:14px}.chart-wrap{padding-left:34px}.chart-scale{width:31px}

/* Family Hub v3 - compact but highly visible energy status */
.energy-badge{min-height:64px;padding:8px 18px;border-radius:19px;justify-content:center;gap:10px}
.energy-badge>span{font-size:32px;margin-right:4px}
.energy-badge b{font-size:23px;line-height:1}
.energy-badge small{font-size:14px;margin-top:4px}
@media(max-width:600px){.energy-badge{min-height:68px;padding:8px 14px}.energy-badge b{font-size:22px}.energy-badge small{font-size:13px}}

/* Dashboard v3 — useful context, no stale environmental sensors on main screen */
.daily-summary{margin-top:12px}.daily-summary h2{margin-top:12px}.daily-grid{display:grid;grid-template-columns:repeat(4,1fr);gap:8px}.daily-grid>div{background:#151d28;border:1px solid #253244;border-radius:15px;padding:10px 6px;text-align:center}.daily-grid span,.daily-grid small,.daily-grid b{display:block}.daily-grid span{font-size:20px}.daily-grid small{font-size:10px;color:#8e9baa;margin:3px 0}.daily-grid b{font-size:12px}.daily-autonomy{display:flex;justify-content:space-between;align-items:center;margin-top:7px;padding:8px 12px;background:#101720;border-radius:12px;color:#9eabb9;font-size:11px}.daily-autonomy b{color:#fff}.house-alert{margin:10px 0 2px;padding:11px 14px;border:1px solid #c89237;background:#493718;border-radius:14px;font-weight:700;text-align:center}.hidden{display:none!important}
@media(max-width:600px){.daily-grid{grid-template-columns:repeat(4,1fr)}.daily-grid>div{padding:8px 3px}.daily-grid b{font-size:11px}}
/* Dashboard v4 — control summaries, global actions, ECS boost, night mode */
.actions button small{display:block;margin-top:5px;font-size:11px;color:#8fa0b3}.global-action{width:100%;border:1px solid #40536a;background:#223247;color:#fff;border-radius:14px;padding:12px;margin:2px 0 10px;font-weight:700}.boost-stop{grid-column:1/-1;background:#66373b!important}.stale{opacity:.65}
@media (prefers-color-scheme:dark){body{transition:filter .5s}}
body.night .energy-badge{box-shadow:none!important}body.night .energy-wire i,body.night .flow-link span{animation-duration:3s!important}body.night{filter:brightness(.82)}
/* Dashboard v5 - denser Family Hub layout */
body{padding:18px 20px 54px}header{margin-bottom:14px}h1{font-size:30px}.clock{font-size:38px}h2{font-size:17px;margin:16px 4px 8px}.weather{padding:11px 15px;margin-bottom:10px;border-radius:18px}.weather-main>span{font-size:34px}.weather-main b{font-size:26px}.weather-stats{gap:5px 13px;font-size:12px}.energy-badge{min-height:54px;padding:6px 14px;border-radius:16px}.energy-badge>span{font-size:27px}.energy-badge b{font-size:19px}.energy-badge small{font-size:12px;margin-top:3px}.flow.modern{margin:6px 0;padding:8px 8px;border-radius:19px}.flow-node{min-width:90px;padding:7px}.flow-node>span{font-size:29px}.flow-node strong{font-size:19px;margin-top:3px}.flow-node small{font-size:10px}.energy-trend{margin-top:7px;padding:7px 9px;border-radius:15px}.chart-wrap{height:82px}.chart-wrap #energyChart{height:76px}.daily-summary{margin-top:7px}.daily-grid{gap:5px}.daily-grid>div{padding:6px 3px;border-radius:11px}.daily-grid span{font-size:16px}.daily-grid small{font-size:9px;margin:1px 0}.daily-grid b{font-size:11px}.daily-autonomy{margin-top:4px;padding:5px 9px}.ecs-card{padding:10px;border-radius:16px}.ecs-live{gap:7px}.ecs-live>div{padding:8px;border-radius:12px}.ecs-live strong{font-size:20px;margin:3px 0}.ecs-actions{gap:7px;margin-top:7px}.ecs-actions button{min-height:45px;font-size:14px}.actions{grid-template-columns:repeat(3,1fr);gap:7px}.actions button{padding:12px 6px;border-radius:16px;font-size:24px;min-height:72px}.actions button span{font-size:13px;margin-top:4px}.actions button small{font-size:9px;margin-top:2px}footer{padding:9px 20px;font-size:11px}.house-alert{margin:6px 0;padding:8px 10px}
@keyframes wasteBreath{0%,100%{background:#241b10;border-color:#6b4b22;box-shadow:0 0 0 rgba(255,166,54,0)}50%{background:#3a2712;border-color:#f0a13c;box-shadow:0 0 18px rgba(255,166,54,.38),inset 0 0 14px rgba(255,166,54,.08)}}.waste-notice{display:flex;align-items:center;gap:10px;margin:7px 0;padding:8px 12px;background:#241b10;border:1px solid #6b4b22;border-radius:13px;animation:wasteBreath 2.8s ease-in-out infinite}.waste-notice>span{font-size:24px}.waste-notice small,.waste-notice b,.waste-notice em{display:block}.waste-notice small{font-size:9px;color:#ffc36f;font-weight:700}.waste-notice b{font-size:13px;margin-top:2px}.waste-notice em{font-size:9px;margin-top:3px;color:#a9c9b9;font-style:italic;opacity:.88}
/* Eli quick lights — compact, part of Controls header */
.controls-title{display:flex;align-items:center;justify-content:space-between;gap:8px}.controls-title h2{margin-right:auto}.eli-quick{display:flex;align-items:center;gap:5px}.eli-quick>span{font-size:11px;color:#91a1b3}.eli-quick button{border:1px solid #2d3b4d;background:#172231;color:#dbe6f2;border-radius:10px;padding:6px 8px;font-size:10px;font-weight:700}.eli-quick button.on{background:#6b581d;border-color:#b79732;color:#fff}.eli-quick button:disabled{opacity:.55}
/* v7 — ECS + Eli compact utility row */
.utility-row{display:grid;grid-template-columns:minmax(0,1.65fr) minmax(150px,.75fr);gap:8px;align-items:stretch;margin-top:8px}.utility-row .ecs-section{margin:0;min-width:0}.utility-row .ecs-section h2,.eli-tile h2{margin-top:0}.eli-tile{background:#111923;border:1px solid #253244;border-radius:16px;padding:9px;display:flex;flex-direction:column;min-width:0}.eli-title{display:flex;align-items:center;justify-content:space-between;gap:5px;margin-bottom:7px}.eli-title h2{font-size:16px;margin:0}.eli-title span{font-size:9px;color:#8292a5}.eli-buttons{display:grid;grid-template-columns:1fr 1fr;gap:6px;flex:1}.eli-buttons button{min-height:74px;border:1px solid #304056;background:#182433;color:#eef4fa;border-radius:13px;padding:7px 4px;display:flex;flex-direction:column;align-items:center;justify-content:center;gap:5px}.eli-buttons button>span{font-size:25px}.eli-buttons button b{font-size:11px;line-height:1.15}.eli-buttons button.on{background:#66541c;border-color:#c4a33a;box-shadow:0 0 12px rgba(255,205,73,.12)}.eli-buttons button:active{transform:scale(.97)}
@media(max-width:600px){.utility-row{grid-template-columns:minmax(0,1.55fr) minmax(142px,.8fr);gap:6px}.eli-tile{padding:7px}.eli-buttons{gap:4px}.eli-buttons button{min-height:68px;padding:5px 2px}.eli-buttons button>span{font-size:23px}.eli-buttons button b{font-size:10px}}
/* v8 — unmistakable Eli light state */
.eli-buttons button{position:relative;transition:background .2s,border-color .2s,box-shadow .2s}.eli-state{display:block;margin-top:1px;padding:3px 6px;border-radius:8px;font-size:8px!important;font-weight:800;letter-spacing:.35px;white-space:nowrap}.eli-state.state-off{background:#202b37;color:#9cabb9}.eli-state.state-on{background:#f2c94c;color:#231d08}.eli-state.state-unknown{background:#2a3038;color:#8793a0}.eli-buttons button.on{background:linear-gradient(145deg,#5d4a16,#312a18);border-color:#e2bd42;box-shadow:inset 0 0 0 1px rgba(255,215,80,.15),0 0 15px rgba(255,202,55,.18)}.eli-buttons button.on>span{filter:drop-shadow(0 0 5px rgba(255,215,80,.7))}.eli-buttons button.on b{color:#fff3bd}.eli-buttons button.unknown{border-style:dashed}
/* v9 — named icons + active device highlight */
.device{border:1px solid transparent;transition:background .18s,border-color .18s,box-shadow .18s}.device-main{display:flex;align-items:center;gap:11px;min-width:0}.device-icon{display:flex;align-items:center;justify-content:center;width:38px;height:38px;flex:0 0 38px;border-radius:12px;background:#222e3d;font-size:21px}.device.active{background:linear-gradient(100deg,#3a321c,#1b2631);border-color:#9b8232;box-shadow:inset 3px 0 0 #e4bd42,0 0 12px rgba(240,194,55,.07)}.device.active .device-icon{background:#5d4b19;filter:drop-shadow(0 0 4px rgba(255,211,73,.25))}.device.active .device-state{color:#e7c85d;font-weight:800}.device-state{margin-top:3px}
/* v10 — daily energy today / yesterday */
.daily-head{display:flex;align-items:center;justify-content:space-between;gap:8px}.daily-head h2{margin-bottom:8px}.day-tabs{display:flex;gap:3px;background:#111923;border-radius:10px;padding:3px}.day-tabs button{border:0;background:transparent;color:#8997a8;border-radius:8px;padding:5px 8px;font-size:10px;font-weight:700}.day-tabs button.active{background:#29394d;color:#fff}.energy-day-grid>div:nth-child(1) span{filter:grayscale(.1)}.energy-day-grid>div:nth-child(2) span{filter:drop-shadow(0 0 3px rgba(255,210,60,.25))}
/* v11 — PV instantaneous capacity vs 9.9 kW max */
.pv-cap{height:4px;width:72px;max-width:100%;margin:4px auto 2px;background:#2b3038;border-radius:4px;overflow:hidden}.pv-cap i{display:block;height:100%;width:0;background:#e4bd42;border-radius:4px;transition:width .5s ease}.solar-node #solarCapacity{font-size:9px;color:#d8bd61;margin-top:2px}
/* v12 — visible electric PV gauge */
.pv-cap.electric{position:relative;width:92px;height:14px;background:#151b22;border:1px solid #3d4650;border-radius:7px;margin:4px auto 2px;overflow:hidden}.pv-cap.electric i{position:absolute;inset:0 auto 0 0;background:linear-gradient(90deg,#8b6e13,#f1c933);box-shadow:0 0 8px rgba(241,201,51,.55);transition:width .5s ease}.pv-cap.electric span{position:absolute;inset:0;display:flex;align-items:center;justify-content:center;font-size:10px;line-height:14px;letter-spacing:-.5px;color:#fff6bf;text-shadow:0 1px 2px #000;z-index:1}
/* v13 — solar production forecast */
.solar-forecast{margin:9px 0 5px;padding:10px 12px;border:1px solid #37404a;border-radius:16px;background:linear-gradient(110deg,#20291e,#18222c)}.solar-forecast-head{display:flex;align-items:center;justify-content:space-between}.solar-forecast-head div{display:flex;align-items:baseline;gap:8px}.solar-forecast-head small{font-size:9px;color:#d7bc5d;font-weight:800}.solar-forecast-head b{font-size:13px}.solar-forecast-head strong{font-size:20px;color:#f0d36b}.sf-chart{height:35px;display:flex;align-items:flex-end;gap:2px;margin:7px 0 5px;border-bottom:1px solid #3b4650}.sf-chart i{flex:1;min-width:2px;border-radius:2px 2px 0 0;background:linear-gradient(#f1cc49,#75621e);box-shadow:0 0 3px rgba(241,204,73,.18)}.sf-foot{display:flex;gap:12px;align-items:center;font-size:10px;color:#aab6c3}.sf-foot #sfQuality{margin-left:auto;color:#dbc866;font-weight:800}
/* v15 — solar forecast time landmarks */
.sf-chart{height:43px;padding-bottom:9px;position:relative}.sf-chart .sf-bar{height:34px;flex:1;min-width:2px;display:flex;align-items:flex-end;position:relative}.sf-chart .sf-bar>i{width:100%;display:block;border-radius:2px 2px 0 0;background:linear-gradient(#f1cc49,#75621e);box-shadow:0 0 3px rgba(241,204,73,.18)}.sf-chart .sf-bar>em{position:absolute;top:35px;left:50%;transform:translateX(-50%);font-size:8px;font-style:normal;color:#71808e;white-space:nowrap}.sf-chart>i{display:none}
/* v16 — clearer solar forecast hour markers */
.sf-chart .sf-bar>em{font-size:10px;font-weight:700;color:#aab6c3;top:35px;text-shadow:0 1px 2px #000}
/* v19 — best solar appliance window */
.sf-machine{margin-top:7px;padding-top:6px;border-top:1px solid #34404a;font-size:11px;font-weight:800;color:#e4c85e;text-align:center;letter-spacing:.1px}
/* v20 — forecast comparison + forecast vs actual */
.sf-reality{margin-top:4px;font-size:10px;color:#8d9aa6;text-align:center;font-weight:600}
#sfCompare{white-space:nowrap;font-weight:800;color:#c7d0d8}
/* v21 — tomorrow weather + clothing advice */
.weather{gap:14px}.weather-today{display:flex;align-items:center;justify-content:space-between;gap:16px;flex:1}.weather-tomorrow{min-width:310px;max-width:390px;padding-left:16px;border-left:1px solid #344151}.wt-head{display:flex;align-items:center;gap:8px}.wt-head small{font-size:9px;font-weight:900;color:#8e9baa;letter-spacing:.8px}.wt-head span{font-size:23px}.wt-head b{font-size:20px}.wt-forecast{font-size:10px;color:#9aa8b7;margin:2px 0 5px}.wt-clothes{display:flex;align-items:center;gap:7px;background:#1d2835;border-radius:10px;padding:6px 8px}.wt-clothes span{font-size:20px}.wt-clothes b{font-size:11px;line-height:1.2;color:#e5e9ed}.weather-stats{min-width:225px}@media(max-width:760px){.weather{display:block}.weather-today{display:flex}.weather-tomorrow{max-width:none;min-width:0;border-left:0;border-top:1px solid #344151;padding:8px 0 0;margin-top:8px}}
/* v22 — larger, clearer tomorrow panel */
.weather-today{flex:.85}.weather-tomorrow{flex:1.15;min-width:390px;max-width:none;padding:8px 10px 8px 20px}.wt-head{gap:10px}.wt-head small{font-size:11px}.wt-head span{font-size:30px}.wt-head b{font-size:25px}.wt-forecast{font-size:12px;margin:3px 0 7px;color:#b3bfca}.wt-clothes{padding:8px 10px;min-height:42px}.wt-clothes span{font-size:27px;min-width:52px;text-align:center}.wt-clothes b{font-size:13px;line-height:1.25}.weather-stats{min-width:205px}@media(max-width:760px){.weather-tomorrow{min-width:0;padding:9px 0 0}}
/* v23 — unmistakable today / tomorrow weather headings */
.weather-today{position:relative;padding-top:17px}.weather-now-label{position:absolute;top:-2px;left:0;font-size:10px;font-weight:900;letter-spacing:1px;color:#77b9f4}.weather-tomorrow{position:relative}.wt-head small{font-size:12px;color:#e0c765;background:#2b2a20;border:1px solid #514b2b;border-radius:7px;padding:3px 7px;letter-spacing:1px}.weather-now-label{background:#172738;border:1px solid #284762;border-radius:7px;padding:3px 7px}
/* v24 — align Today / Tomorrow weather headers */
.weather{align-items:stretch}.weather-today{padding-top:0;display:grid;grid-template-columns:auto 1fr;grid-template-rows:30px auto;align-items:center;column-gap:14px}.weather-now-label{position:static;grid-column:1 / -1;grid-row:1;justify-self:start;align-self:start;margin:0}.weather-main{grid-column:1;grid-row:2}.weather-stats{grid-column:2;grid-row:2}.weather-tomorrow{padding-top:0;display:grid;grid-template-rows:30px auto auto;align-content:start}.wt-head{grid-row:1;align-items:start}.wt-head small{margin:0}.wt-forecast{grid-row:2}.wt-clothes{grid-row:3}@media(max-width:760px){.weather-today{display:grid}.weather-tomorrow{display:grid}}
/* v25 — Family Hub: keep Today + Tomorrow on one compact row */
.weather{display:grid!important;grid-template-columns:minmax(0,.82fr) minmax(0,1.18fr);gap:8px;padding:9px 11px!important;align-items:stretch}.weather-today{min-width:0;grid-template-columns:auto minmax(130px,1fr);column-gap:8px}.weather-tomorrow{min-width:0!important;padding:0 0 0 10px!important}.weather-main{gap:7px}.weather-main>span{font-size:27px!important}.weather-main b{font-size:21px!important;white-space:nowrap}.weather-main small{font-size:9px}.weather-stats{min-width:0!important;gap:2px 7px!important;font-size:10px!important;grid-template-columns:auto auto}.weather-stats span,.weather-stats b{white-space:nowrap}.wt-head{gap:6px}.wt-head small{font-size:9px;padding:2px 5px}.wt-head span{font-size:22px}.wt-head b{font-size:20px;white-space:nowrap}.wt-forecast{font-size:9px;margin:0 0 3px}.wt-clothes{min-height:30px;padding:4px 6px;gap:4px}.wt-clothes span{font-size:19px;min-width:38px}.wt-clothes b{font-size:10px;line-height:1.12}@media(max-width:760px){.weather{display:grid!important;grid-template-columns:minmax(0,.82fr) minmax(0,1.18fr)!important}.weather-tomorrow{border-left:1px solid #344151!important;border-top:0!important;margin-top:0!important;padding:0 0 0 10px!important}}
/* v28 — compact family ephemeris */
.ephemeris{margin-top:3px;font-size:10px;color:#8795a5;max-width:680px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.ephemeris::first-letter{color:#d6bd61}@media(max-width:760px){.ephemeris{max-width:520px;font-size:9px}}
/* v33 — ephemeris: two very compact lines, no truncation */
.ephemeris{margin-top:2px;font-size:9px;line-height:1.12;max-width:760px;white-space:normal;overflow:hidden;text-overflow:clip;display:-webkit-box;-webkit-box-orient:vertical;-webkit-line-clamp:2;max-height:21px}
@media(max-width:760px){.ephemeris{max-width:610px;font-size:8.5px;line-height:1.08;max-height:19px}}
/* v34 — balanced ephemeris + reclaim a few vertical pixels */
.ephemeris{display:grid!important;grid-template-rows:auto auto;gap:0;margin-top:1px!important;max-height:19px!important;line-height:1.05!important;-webkit-line-clamp:unset!important}.ephemeris span{display:block;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}header{margin-bottom:11px!important}h2{margin-top:14px!important}.weather{margin-bottom:8px!important}
@media(max-width:760px){.ephemeris{max-height:18px!important;line-height:1.03!important}}
/* v35 — EliOS version badge */
.eli-version{margin-right:12px;color:#b9a7e8;font-weight:700}.eli-version b{color:#e6ddff;font-weight:800}

header h1{font-size:25px!important;line-height:1.05}
/* EliOS v0.38 — hidden changelog */
button.eli-version{border:0;background:transparent;padding:0;margin:0 12px 0 0;color:#b9a7e8;font:inherit;font-weight:700;cursor:pointer}button.eli-version b{color:#e6ddff}.changelog{display:none;position:fixed;inset:0;z-index:9999;background:#05080db8;align-items:center;justify-content:center;padding:20px}.changelog.open{display:flex}.changelog-card{width:min(520px,92vw);max-height:70vh;overflow:auto;background:#121a25;border:1px solid #34445a;border-radius:18px;padding:14px 16px;box-shadow:0 18px 55px #0009}.changelog-head{display:flex;align-items:center;justify-content:space-between;color:#e6ddff;font-size:15px}.changelog-head button{border:0;background:#202b39;color:#fff;border-radius:9px;padding:5px 9px}.changelog-list{margin-top:10px}.changelog-list p{margin:6px 0;padding:6px 8px;background:#18222f;border-radius:8px;color:#aeb9c6;font-size:11px}.changelog-list p b{color:#d9cbff;margin-right:6px}
\n
/* v43 — Eli_Sport compact animated header chip */
header>div:first-child{min-width:0}.header-alerts{display:inline-flex;vertical-align:middle;margin-left:10px;max-width:62%}
.sport-chip{position:relative;display:inline-flex;align-items:center;gap:8px;min-height:38px;padding:5px 12px 5px 7px;border:1px solid #3d77a8;border-radius:14px;background:linear-gradient(110deg,#12334e,#172a3d);box-shadow:0 0 14px rgba(62,161,231,.14);overflow:hidden}
.sport-chip.gym{border-color:#9b6bc0;background:linear-gradient(110deg,#3a204b,#22243d);box-shadow:0 0 14px rgba(183,112,224,.14)}.sport-chip.tomorrow{opacity:.78;box-shadow:none}
.sport-chip small,.sport-chip b{display:block;white-space:nowrap}.sport-chip small{font-size:8px;line-height:1;color:#79c9ff;font-weight:900;letter-spacing:.7px}.sport-chip.gym small{color:#d9a8ff}.sport-chip b{font-size:12px;line-height:1.15;margin-top:3px;color:#f2f7fb}
.sport-anim{display:inline-flex;align-items:center;justify-content:center;width:29px;height:29px;font-size:22px;transform-origin:center;animation:swimBob 1.8s ease-in-out infinite}.sport-chip.gym .sport-anim{animation:gymFlip 2.4s ease-in-out infinite}.sport-spark{position:absolute;right:3px;top:1px;font-size:8px;color:#8ed8ff;animation:spark 1.3s ease-in-out infinite}
@keyframes swimBob{0%,100%{transform:translateY(2px) rotate(-5deg)}50%{transform:translateY(-3px) rotate(7deg)}}@keyframes gymFlip{0%,55%,100%{transform:rotate(0deg) scale(1)}72%{transform:rotate(180deg) scale(1.08)}88%{transform:rotate(360deg) scale(1)}}@keyframes spark{0%,100%{opacity:.2;transform:scale(.7)}50%{opacity:1;transform:scale(1.25)}}
@media(max-width:760px){.header-alerts{display:flex;margin:5px 0 0;max-width:100%}.sport-chip{min-height:34px}.sport-chip b{font-size:11px}}body.night .sport-chip{box-shadow:none}.sport-chip.tomorrow .sport-anim{animation-duration:3.4s}

/* v44 — compact ECS + Eli row: save vertical space on Family Hub */
.utility-row{gap:7px;margin-top:5px}
.ecs-title h2{margin:0 4px 5px;font-size:15px}
.ecs-pill{padding:5px 11px;font-size:12px}
.ecs-card{padding:7px 8px;border-radius:14px}
.ecs-live{gap:6px}
.ecs-live>div{padding:6px 8px;border-radius:10px}
.ecs-live small{font-size:10px}
.ecs-live strong{font-size:17px;margin:1px 0}
.ecs-live span{font-size:10px}
.ecs-actions{gap:6px;margin-top:5px}
.ecs-actions button{min-height:34px;border-radius:11px;font-size:12px}
.eli-tile{padding:7px;border-radius:14px}
.eli-title{margin-bottom:5px}
.eli-title h2{font-size:14px}
.eli-title span{font-size:8px}
.eli-buttons{gap:5px}
.eli-buttons button{min-height:58px;padding:4px 3px;border-radius:11px;gap:2px}
.eli-buttons button>span{font-size:20px}
.eli-buttons button b{font-size:9px;line-height:1.05}
.eli-state{padding:2px 5px;font-size:7px!important}
@media(max-width:600px){
 .utility-row{margin-top:4px}
 .ecs-card{padding:6px}
 .ecs-actions button{min-height:32px}
 .eli-buttons button{min-height:55px}
}

/* v45 — weather symmetry, same panel height */
.weather-tomorrow{display:grid!important;grid-template-rows:30px auto auto!important;align-content:start}
.weather-tomorrow-label{grid-row:1;justify-self:start;align-self:start;margin:0;background:#2b2a20;border:1px solid #514b2b;border-radius:7px;padding:2px 5px;font-size:9px;line-height:normal;font-weight:900;color:#e0c765;letter-spacing:1px}
.wt-head{grid-row:2;display:flex;align-items:center;gap:7px;min-height:31px}
.wt-head .wt-condition{font-size:10px;color:#b3bfca;white-space:nowrap;margin-left:3px;padding-left:8px;border-left:1px solid #405064;line-height:22px}
.wt-clothes{grid-row:3}

/* v46 — harmonised Today/Tomorrow weather layout, unchanged overall height */
.weather-today{display:grid!important;grid-template-columns:1fr!important;grid-template-rows:30px auto!important;align-content:start!important;column-gap:0!important}
.weather-now-label{grid-column:1!important;grid-row:1!important}
.weather-now-body{grid-row:2;display:grid;grid-template-columns:minmax(145px,.95fr) minmax(190px,1.05fr);align-items:center;gap:8px;min-width:0}
.weather-main{grid-column:1!important;grid-row:auto!important}
.weather-stats{grid-column:2!important;grid-row:auto!important;display:grid;grid-template-columns:1fr 1fr!important;gap:3px 8px!important}
.weather-stats span{display:flex;align-items:center;gap:3px;min-width:0}
.weather-stats i{display:inline-flex;width:17px;justify-content:center;font-style:normal;font-size:12px}
.weather-stats b{margin-left:1px}
@media(max-width:760px){.weather-now-body{display:grid;grid-template-columns:minmax(130px,.9fr) minmax(175px,1.1fr)}}

/* v47 — current weather packs naturally; no fixed empty column */
.weather-now-body{
  display:flex!important;
  align-items:center!important;
  justify-content:flex-start!important;
  gap:10px!important;
  min-width:0;
}
.weather-main{
  flex:0 0 auto!important;
  width:auto!important;
  min-width:0!important;
  padding-right:10px;
  border-right:1px solid #405064;
}
.weather-stats{
  flex:0 1 auto!important;
  width:auto!important;
  min-width:0!important;
  grid-template-columns:max-content max-content!important;
  column-gap:9px!important;
  row-gap:3px!important;
}
.weather-stats span{width:auto!important}
@media(max-width:760px){
  .weather-now-body{display:flex!important;gap:7px!important}
  .weather-main{padding-right:7px}
  .weather-stats{grid-template-columns:max-content max-content!important;column-gap:6px!important}
}

/* v48 — responsive current-weather stats: 2x2 normally, 1x4 when squeezed */
.weather-today{container-type:inline-size}
.weather-stats{
  display:grid!important;
  grid-template-columns:max-content max-content!important;
  grid-auto-flow:row!important;
  align-content:center;
}
@container (max-width: 390px){
  .weather-now-body{gap:6px!important}
  .weather-main{padding-right:6px!important}
  .weather-stats{
    grid-template-columns:max-content!important;
    grid-template-rows:repeat(4,auto)!important;
    row-gap:1px!important;
    column-gap:0!important;
  }
  .weather-stats span{font-size:9px!important;line-height:1.12}
  .weather-stats i{font-size:10px;width:14px}
}
@container (max-width: 330px){
  .weather-main>span{font-size:24px!important}
  .weather-main b{font-size:19px!important}
  .weather-main small{font-size:8px!important}
  .weather-stats span{font-size:8.5px!important}
}

/* v49 — compact whole weather panel, keep readability */
.weather{
  padding-top:6px!important;
  padding-bottom:6px!important;
  margin-bottom:7px!important;
}
.weather-today,.weather-tomorrow{
  grid-template-rows:25px auto!important;
}
.weather-now-label,.weather-tomorrow-label{
  padding-top:2px!important;
  padding-bottom:2px!important;
}
.weather-now-body{align-self:center}
.weather-main>span{line-height:1}
.weather-main b{line-height:1.05}
.weather-main small{line-height:1.05;margin-top:2px}
.weather-stats{line-height:1.05}
.weather-tomorrow{grid-template-rows:25px 27px auto!important}
.wt-head{min-height:27px!important}
.wt-head span:not(.wt-condition){line-height:1}
.wt-head b{line-height:1}
.wt-head .wt-condition{line-height:19px}
.wt-clothes{min-height:27px!important;padding-top:3px!important;padding-bottom:3px!important}

/* v50 — explicit tomorrow min/max, zero extra panel height */
.wt-temp-source{display:none!important}
.wt-range{display:flex;align-items:center;gap:5px;white-space:nowrap}
.wt-range>span{display:flex;align-items:baseline;gap:2px}
.wt-range small{font-size:6px;font-weight:900;letter-spacing:.5px;color:#8192a5}
.wt-range b{font-size:17px;line-height:1;color:#f4f7fa}
.wt-range>span:first-child b{color:#9fd2ff}
.wt-range>span:last-child b{color:#ffd66b}
.wt-range i{font-style:normal;font-size:10px;color:#63778c}

/* v51 — Samsung Family Hub post-update viewport compensation
   Chez Nous is fridge-only: restore the apparent pre-update scale globally. */
:root{--familyhub-scale:1.25}
html{overflow-x:hidden}
body{
  width:calc(100% / var(--familyhub-scale));
  min-height:calc(100vh / var(--familyhub-scale));
  transform:scale(var(--familyhub-scale));
  transform-origin:top left;
}

/* v52 — Family Hub adaptive sizing
   No guessed zoom: size the fridge UI from the viewport Samsung actually exposes. */
:root{--familyhub-scale:1}
html{overflow-x:hidden}
body{width:auto;min-height:100vh;transform:none;transform-origin:initial}
@media (min-width:900px){
  :root{--fh-base-width:1280}
  body{
    width:calc(100vw * var(--fh-base-width) / 100vw);
    zoom:clamp(1, calc(100vw / var(--fh-base-width)), 1.35);
  }
}

/* v53 - Family Hub calibrated at browser-equivalent 136% */
@media (min-width:900px){body{zoom:1.36;width:73.5294118%}}

/* v54 — Tesla live charging integrated into existing utility tile */
.tesla-live{position:relative;display:grid;grid-template-columns:30px 1fr 22px;align-items:center;gap:7px;min-height:46px;margin:-1px -1px 5px;padding:4px 7px;border:1px solid #303b49;border-radius:11px;background:linear-gradient(110deg,#171d25,#121820);overflow:hidden;transition:border-color .35s,background .35s,box-shadow .35s}
.tesla-mark{display:flex;align-items:center;justify-content:center;width:28px;height:28px;border-radius:9px;background:#252c35;color:#8d99a6;font-size:18px;font-weight:900;font-family:Arial,sans-serif}.tesla-copy{min-width:0}.tesla-copy small,.tesla-copy strong,.tesla-copy span{display:block}.tesla-copy small{font-size:7px;font-weight:900;letter-spacing:1.1px;color:#8d99a6}.tesla-copy strong{font-size:16px;line-height:1.05;margin:1px 0;color:#dfe6ed}.tesla-copy span{font-size:8px;color:#84919f}.tesla-bolt{font-size:22px;color:#4b5662;text-align:center}
.tesla-live.charging{border-color:#a8323b;background:linear-gradient(110deg,#35191d,#171b23);box-shadow:inset 3px 0 0 #e82127,0 0 12px rgba(232,33,39,.12)}.tesla-live.charging .tesla-mark{background:#e82127;color:#fff;box-shadow:0 0 10px rgba(232,33,39,.3)}.tesla-live.charging .tesla-copy small{color:#ef7b80}.tesla-live.charging .tesla-copy strong{color:#fff}.tesla-live.charging .tesla-copy span{color:#e4a4a7}.tesla-live.charging .tesla-bolt{color:#ffcc45;animation:teslaPulse 1.15s ease-in-out infinite}
@keyframes teslaPulse{0%,100%{opacity:.45;transform:scale(.9)}50%{opacity:1;transform:scale(1.12)}}
.utility-row .eli-tile{padding:6px}.utility-row .eli-title{margin-bottom:3px}.utility-row .eli-buttons button{min-height:45px}.utility-row .eli-buttons button>span{font-size:17px}
body.night .tesla-live.charging{box-shadow:inset 3px 0 0 #e82127}

/* v55 — vivid coded Tesla illustration + live plug power */
.tesla-live{grid-template-columns:58px 1fr 24px;min-height:54px;background:linear-gradient(120deg,#26171e 0%,#152235 48%,#102a2c 100%);border-color:#45566a}
.tesla-car{position:relative;width:54px;height:34px;filter:drop-shadow(0 5px 5px rgba(0,0,0,.3));transform:translateY(1px)}.tesla-car .car-roof{position:absolute;left:15px;top:5px;width:27px;height:16px;background:linear-gradient(145deg,#ec3841,#a71320);border-radius:15px 16px 3px 3px;transform:skewX(-12deg)}.tesla-car .car-roof:after{content:"";position:absolute;left:6px;top:3px;width:17px;height:8px;background:linear-gradient(145deg,#76b6d5,#24384d);border-radius:9px 9px 2px 2px}.tesla-car .car-body{position:absolute;left:3px;top:16px;width:49px;height:13px;background:linear-gradient(#ef3942,#9e111d);border-radius:12px 15px 6px 6px}.tesla-car .car-body:before{content:"T";position:absolute;left:25px;top:1px;color:#fff;font:900 7px Arial}.tesla-car .car-body:after{content:"";position:absolute;right:2px;top:3px;width:5px;height:3px;background:#fff4ad;border-radius:4px;box-shadow:0 0 6px #ffe17b}.tesla-car .wheel{position:absolute;top:24px;width:10px;height:10px;background:#111;border:2px solid #68717b;border-radius:50%;z-index:3}.tesla-car .w1{left:10px}.tesla-car .w2{right:7px}
.tesla-live.charging{background:linear-gradient(115deg,#49171c 0%,#192238 53%,#113a32 100%);border-color:#d63b43}.tesla-live.charging:after{content:"";position:absolute;left:-35%;bottom:0;width:35%;height:2px;background:linear-gradient(90deg,transparent,#58e0a5,transparent);animation:teslaChargeLine 1.8s linear infinite}.tesla-live.charging .wheel{animation:teslaWheel 1.1s linear infinite}@keyframes teslaChargeLine{to{left:110%}}@keyframes teslaWheel{to{transform:rotate(360deg)}}
.device-power{display:inline-block;margin-left:7px;padding:2px 6px;border-radius:7px;background:#193428;border:1px solid #2e6650;color:#72dda9;font-size:9px;font-weight:900;vertical-align:1px;white-space:nowrap}.device.active .device-power{background:#21402e;border-color:#477354;color:#91e3b5}

/* v56 — P1 tariff badge + white Model 3-style 3/4 coded illustration */
.tariff-badge{display:inline-flex;align-items:center;gap:4px;margin-top:4px;padding:3px 6px;border-radius:8px;font-size:8px;font-weight:900;white-space:nowrap;border:1px solid #46505d;background:#222a34;color:#aeb9c5}.tariff-badge i{font-style:normal;font-size:10px}.tariff-badge.offpeak{background:#142c45;border-color:#275c87;color:#83c8ff}.tariff-badge.peak{background:#463717;border-color:#80652a;color:#ffd66f}
.tesla-car.white-m3{width:57px;height:35px;transform:perspective(80px) rotateY(-7deg) translateY(1px);filter:drop-shadow(0 6px 5px rgba(0,0,0,.32))}
.tesla-car.white-m3 .car-roof{left:16px;top:5px;width:29px;height:17px;background:linear-gradient(145deg,#fff,#dce2e8);border-radius:18px 19px 3px 4px;transform:skewX(-14deg);box-shadow:inset 0 1px #fff}.tesla-car.white-m3 .car-roof:after{display:none}
.tesla-car.white-m3 .car-glass{position:absolute;left:20px;top:7px;width:21px;height:10px;background:linear-gradient(145deg,#91bed5,#243746);clip-path:polygon(15% 0,80% 0,100% 100%,0 100%);border-radius:8px 9px 2px 2px;z-index:2}
.tesla-car.white-m3 .car-body{left:3px;top:16px;width:51px;height:13px;background:linear-gradient(#fff,#d9dee3);border-radius:14px 17px 6px 7px;box-shadow:inset 0 -3px 0 #b9c0c7}.tesla-car.white-m3 .car-body:before{content:"";left:28px;top:6px;width:7px;height:1px;background:#929aa2;border-radius:2px}.tesla-car.white-m3 .car-body:after{display:none}
.tesla-car.white-m3 .car-light{position:absolute;right:2px;top:19px;width:7px;height:3px;background:#fff4a8;border-radius:5px;box-shadow:0 0 7px #ffe77c;z-index:4}.tesla-car.white-m3 .wheel{top:24px;background:#101317;border-color:#89919a}
/* v57 — vraie Model 3 + tarif ORES discret */
.tesla-photo{display:block;width:58px;height:38px;object-fit:contain;object-position:center;filter:drop-shadow(0 5px 5px rgba(0,0,0,.32))}
.grid-node .tariff-badge,.grid-node .tariff-badge.offpeak,.grid-node .tariff-badge.peak,.grid-node .tariff-badge.unknown{display:inline-flex;align-items:center;justify-content:center;gap:3px;margin-top:2px;padding:0;border:0;border-radius:0;background:none;box-shadow:none;font-size:7px!important;font-weight:500;line-height:1;color:#788696;opacity:.9;white-space:nowrap;text-transform:lowercase}.flow-node.grid-node .tariff-badge>span{font-size:7px!important;line-height:1!important}.grid-node .tariff-badge i{font-style:normal;font-size:9px!important;line-height:1}.grid-node .tariff-badge.offpeak i{color:#74baff}.grid-node .tariff-badge.peak i{color:#e9bd50}.grid-node .tariff-badge.unknown i{color:#7e8995}
@keyframes activePowerPulse{0%,100%{color:#77e3a8;text-shadow:0 0 2px rgba(91,224,150,.15)}50%{color:#b4ffd2;text-shadow:0 0 9px rgba(91,224,150,.65)}}
.power-active{animation:activePowerPulse 1.8s ease-in-out infinite}

/* Energy status ribbon — compact and integrated */
.energy-head{margin:3px 0 6px}.energy-badge{position:relative;overflow:hidden;width:100%;min-height:48px!important;padding:6px 14px!important;border-width:1px!important;border-radius:14px!important;justify-content:flex-start!important;text-align:left!important;gap:10px!important;background:#151d28!important;box-shadow:none!important}.energy-badge:before{content:'';position:absolute;left:0;top:7px;bottom:7px;width:3px;border-radius:0 4px 4px 0;background:#657386}.energy-badge>span{font-size:25px!important;margin:0!important;width:34px;text-align:center;filter:drop-shadow(0 0 5px rgba(255,255,255,.12))}.energy-badge>div{min-width:0}.energy-badge b{font-size:15px!important;line-height:1.05!important;letter-spacing:.5px!important}.energy-badge small{font-size:10px!important;margin-top:3px!important;color:#aebbc8!important}.energy-badge.export{border-color:#285a47!important;background:linear-gradient(90deg,#14251f,#151d28 48%)!important}.energy-badge.export:before{background:#55dda0;box-shadow:0 0 9px rgba(85,221,160,.65)}.energy-badge.export>span{animation:energySunPulse 2.4s ease-in-out infinite}.energy-badge.solar{border-color:#5d5127!important;background:linear-gradient(90deg,#292617,#151d28 48%)!important}.energy-badge.solar:before{background:#e3bd45}.energy-badge.grid{border-color:#294d69!important;background:linear-gradient(90deg,#172838,#151d28 48%)!important}.energy-badge.grid:before{background:#58a6e8}@keyframes energySunPulse{0%,100%{transform:scale(1);filter:drop-shadow(0 0 2px rgba(85,221,160,.15))}50%{transform:scale(1.1);filter:drop-shadow(0 0 7px rgba(85,221,160,.5))}}

/* Energy live banner v2 */
.energy-head{margin:4px 0 7px}.energy-badge{position:relative;isolation:isolate;overflow:hidden;width:100%;min-height:58px!important;padding:7px 16px!important;border:1px solid #304054!important;border-radius:17px!important;display:flex!important;justify-content:center!important;align-items:center!important;text-align:center!important;gap:11px!important;background:#131c27!important}.energy-badge:before{content:'';position:absolute!important;z-index:-2;inset:0!important;width:auto!important;border-radius:inherit!important;background:linear-gradient(110deg,#172330,#1c3340,#172330)!important;background-size:220% 100%!important;animation:energyBannerFlow 5s linear infinite!important;box-shadow:none!important}.energy-badge:after{content:'';position:absolute;z-index:-1;top:0;bottom:0;width:34%;left:-40%;background:linear-gradient(90deg,transparent,rgba(255,255,255,.08),transparent);transform:skewX(-18deg);animation:energySweep 4.2s ease-in-out infinite}.energy-badge>span{font-size:30px!important;width:auto!important;margin:0 2px 0 0!important}.energy-badge>div{min-width:0}.energy-badge b{font-size:17px!important;line-height:1.05!important;letter-spacing:.55px!important}.energy-badge small{font-size:10px!important;margin-top:4px!important;color:#c3cfda!important}.energy-badge.export{border-color:#347b5d!important}.energy-badge.export:before{background:linear-gradient(110deg,#10251c,#15573b,#1b6b49,#10251c)!important;background-size:260% 100%!important}.energy-badge.export b{color:#b9ffd8}.energy-badge.export>span{animation:energyIconPulse 2s ease-in-out infinite}.energy-badge.solar{border-color:#88732c!important}.energy-badge.solar:before{background:linear-gradient(110deg,#292311,#5b4913,#78611a,#292311)!important;background-size:260% 100%!important}.energy-badge.solar b{color:#ffe59a}.energy-badge.mixed{border-color:#557d82!important}.energy-badge.mixed:before{background:linear-gradient(110deg,#283017,#5a5018,#244b57,#283017)!important;background-size:260% 100%!important}.energy-badge.mixed b{color:#e9f2b5}.energy-badge.grid{border-color:#326b98!important}.energy-badge.grid:before{background:linear-gradient(110deg,#102335,#164c75,#17638f,#102335)!important;background-size:260% 100%!important}.energy-badge.grid b{color:#c7e8ff}.energy-badge.grid>span{animation:energyIconPulse 1.5s ease-in-out infinite}@keyframes energyBannerFlow{0%{background-position:0 50%}100%{background-position:220% 50%}}@keyframes energySweep{0%,55%{left:-40%}85%,100%{left:120%}}@keyframes energyIconPulse{0%,100%{transform:scale(1);filter:drop-shadow(0 0 2px rgba(255,255,255,.15))}50%{transform:scale(1.13);filter:drop-shadow(0 0 9px rgba(255,255,255,.45))}}

/* ECS live redesign — same vertical footprint */
.ecs-card{position:relative;overflow:hidden;transition:border-color .4s,box-shadow .4s,background .4s}.ecs-layout{display:grid;grid-template-columns:82px minmax(0,1fr) 145px;align-items:stretch;gap:7px;height:100%}.ecs-tank-wrap{display:flex;flex-direction:column;align-items:center;justify-content:center;background:#101720;border-radius:11px;padding:4px}.ecs-tank-wrap small{font-size:8px;color:#8191a2;text-align:center;margin-top:2px}.ecs-tank{position:relative;overflow:hidden;width:35px;height:65px;border:2px solid #8ea0b3;border-radius:12px 12px 9px 9px;background:#0a1119;box-shadow:inset 0 0 8px rgba(255,255,255,.08),0 0 7px rgba(80,160,220,.1)}.ecs-tank:before{content:'';position:absolute;z-index:3;left:4px;right:4px;top:4px;height:5px;border-radius:50%;background:rgba(255,255,255,.28)}.ecs-tank>span{position:absolute;z-index:4;left:0;right:0;top:20px;text-align:center;font-size:15px;color:white;text-shadow:0 1px 4px #000}.ecs-heat{position:absolute;z-index:1;left:0;right:0;bottom:0;height:12%;min-height:7px;background:linear-gradient(0deg,#1678db 0%,#25c6e8 38%,#f2c94c 70%,#ff6b35 100%);transition:height 1.4s ease;box-shadow:0 -3px 10px rgba(38,198,232,.35)}.ecs-tank-shine{position:absolute;z-index:2;inset:0;background:linear-gradient(90deg,rgba(255,255,255,.15),transparent 30%,transparent 70%,rgba(255,255,255,.06));pointer-events:none}.ecs-live{grid-template-columns:1fr 1fr!important;gap:6px!important}.ecs-live>div{display:flex;flex-direction:column;justify-content:center}.ecs-actions{display:grid!important;grid-template-columns:1fr!important;grid-template-rows:1fr 1fr!important;gap:6px!important;margin-top:0!important}.ecs-actions button{min-height:0!important;height:auto!important;font-size:12px!important;border:1px solid #4389d0!important;background:linear-gradient(135deg,#214d7b,#3476b8)!important;box-shadow:inset 0 0 12px rgba(92,176,255,.08);transition:transform .2s,box-shadow .3s,border-color .3s}.ecs-actions button:active{transform:scale(.97)}.ecs-actions .boost-stop{grid-row:1/3;background:linear-gradient(135deg,#65351f,#a55328)!important;border-color:#d27a45!important}.ecs-card.heating{border-color:#b85c31;box-shadow:0 0 15px rgba(255,103,49,.16),inset 0 0 20px rgba(255,103,49,.04);background:linear-gradient(105deg,#151d28,#241b19,#151d28);background-size:200% 100%;animation:ecsWarmFlow 4s linear infinite}.ecs-card.heating .ecs-tank{border-color:#ff9a62;box-shadow:0 0 12px rgba(255,103,49,.4)}.ecs-card.heating .ecs-heat{animation:ecsWater 1.8s ease-in-out infinite}.ecs-card.boosting{border-color:#e78445;box-shadow:0 0 17px rgba(255,130,55,.24)}@keyframes ecsWarmFlow{0%{background-position:0 50%}100%{background-position:200% 50%}}@keyframes ecsWater{0%,100%{filter:brightness(1)}50%{filter:brightness(1.35);box-shadow:0 -5px 14px rgba(255,110,50,.55)}}

/* Utility row balance: ECS ~60%, Tesla/Eli ~40% */
.utility-row{grid-template-columns:minmax(0,1.45fr) minmax(0,1fr)!important}.ecs-layout{grid-template-columns:72px minmax(0,1fr) 126px}.ecs-live>div{padding-left:6px!important;padding-right:6px!important}.ecs-live strong{font-size:16px!important}.ecs-live span{font-size:9px!important}.eli-tile{min-width:0}.tesla-live{width:100%}
@media(max-width:600px){.utility-row{grid-template-columns:minmax(0,1.4fr) minmax(0,1fr)!important}.ecs-layout{grid-template-columns:64px minmax(0,1fr) 112px}.ecs-actions button{font-size:11px!important}}

/* ECS state integrated in card */
.ecs-card{padding-top:7px!important}.ecs-pill-inline{position:absolute;z-index:6;top:7px;right:8px;padding:3px 8px!important;font-size:9px;line-height:1.2;border:1px solid transparent;box-shadow:none}.ecs-pill-inline.off{background:rgba(36,73,56,.72);border-color:#356b50;color:#bdf5d4}.ecs-pill-inline.on{background:rgba(139,59,37,.82);border-color:#d06b43;color:#ffe0d2;animation:ecsStatePulse 1.8s ease-in-out infinite}.ecs-layout{padding-top:0}.ecs-title{justify-content:flex-start!important}@keyframes ecsStatePulse{0%,100%{box-shadow:0 0 0 rgba(255,112,61,0)}50%{box-shadow:0 0 8px rgba(255,112,61,.35)}}

/* ECS state belongs to Ballon ECS tile */
.ecs-main-state>small{display:flex!important;align-items:center;gap:5px;flex-wrap:wrap}.ecs-main-state .ecs-pill-inline{position:static!important;display:inline-flex!important;align-items:center;padding:2px 6px!important;font-size:8px!important;line-height:1!important;margin:0!important;vertical-align:middle}.ecs-main-state .ecs-pill-inline.off{background:rgba(36,73,56,.72);border:1px solid #356b50;color:#bdf5d4}.ecs-main-state .ecs-pill-inline.on{background:rgba(139,59,37,.82);border:1px solid #d06b43;color:#ffe0d2}

/* Utility row unified height v64 */
.utility-row{align-items:stretch!important}.utility-row>.ecs-section,.utility-row>.eli-tile{height:100%;box-sizing:border-box}.ecs-section{display:flex;min-height:0}.ecs-card{width:100%;height:100%;box-sizing:border-box;display:flex;align-items:stretch}.ecs-layout{width:100%;min-height:0;align-items:stretch}.ecs-tank-wrap,.ecs-live>div,.ecs-actions button{height:100%;box-sizing:border-box}.eli-tile{display:grid!important;grid-template-rows:auto auto 1fr;align-content:stretch}.tesla-live{box-sizing:border-box}.eli-buttons{align-items:stretch}.eli-buttons button{height:100%;box-sizing:border-box}

.sf-tabs{display:flex!important;gap:2px!important;padding:2px;background:#111a22;border:1px solid #36414b;border-radius:9px}.sf-tabs button{border:0;background:transparent;color:#82909d;font-size:9px;font-weight:800;padding:4px 7px;border-radius:6px;cursor:pointer}.sf-tabs button.active{background:#d9b943;color:#18202a;box-shadow:0 1px 5px rgba(0,0,0,.25)}

/* ECS 100%: cocotte-minute visuelle, sans changer le gabarit */
.ecs-card.ecs-full{border-color:#ff4d3f;box-shadow:0 0 20px rgba(255,55,35,.30),inset 0 0 24px rgba(255,35,20,.08);background:linear-gradient(105deg,#151d28,#351817,#151d28);background-size:200% 100%;animation:ecsWarmFlow 2.2s linear infinite}
.ecs-card.ecs-full .ecs-tank-wrap{background:radial-gradient(circle at 50% 45%,rgba(255,45,28,.18),#101720 66%)}
.ecs-card.ecs-full .ecs-tank{border-color:#ff6555;background:#1d0b0b;box-shadow:0 0 9px #ff392b,0 0 20px rgba(255,45,30,.45),inset 0 0 12px rgba(255,225,190,.18);overflow:visible;animation:ecsPressureShake .17s linear infinite}
.ecs-card.ecs-full .ecs-heat{height:100%!important;background:linear-gradient(0deg,#d71913 0%,#ff3425 42%,#ff6540 72%,#ff9a62 100%);box-shadow:inset 0 0 10px rgba(255,230,180,.35),0 -2px 14px rgba(255,45,25,.8);animation:ecsBoil .7s ease-in-out infinite}
.ecs-card.ecs-full .ecs-tank:after{content:'💨';position:absolute;z-index:8;top:-17px;right:-13px;font-size:14px;filter:drop-shadow(0 0 5px rgba(255,255,255,.45));animation:ecsSteam 1.15s ease-out infinite}
.ecs-card.ecs-full .ecs-tank>span{color:#fff2e8;text-shadow:0 0 7px #ff2d20,0 1px 3px #000;animation:ecsHotPulse .55s ease-in-out infinite alternate}
.ecs-card.ecs-full .ecs-tank-wrap small{color:#ff776b;font-weight:800;text-shadow:0 0 7px rgba(255,50,35,.35)}
@keyframes ecsPressureShake{0%,100%{transform:translate(0,0) rotate(0)}25%{transform:translate(-1px,.4px) rotate(-.7deg)}50%{transform:translate(1px,-.4px) rotate(.7deg)}75%{transform:translate(-.5px,-.3px) rotate(.35deg)}}
@keyframes ecsBoil{0%,100%{filter:brightness(1);transform:scaleY(1)}50%{filter:brightness(1.22);transform:scaleY(.985)}}
@keyframes ecsSteam{0%{opacity:0;transform:translate(0,4px) scale(.65)}30%{opacity:1}100%{opacity:0;transform:translate(7px,-10px) scale(1.2)}}
@keyframes ecsHotPulse{from{transform:scale(1)}to{transform:scale(1.12)}}

/* ECS: ambiance visuelle progressive selon le niveau estimé */
.ecs-card.ecs-cold .ecs-tank{border-color:#6daee8;box-shadow:0 0 8px rgba(50,145,230,.28),inset 0 0 8px rgba(255,255,255,.08)}
.ecs-card.ecs-cold .ecs-heat{background:linear-gradient(0deg,#116fc7,#20aee5 62%,#65d6f1);box-shadow:0 -3px 9px rgba(32,174,229,.32)}
.ecs-card.ecs-warm .ecs-tank{border-color:#e2a34d;box-shadow:0 0 10px rgba(242,169,65,.30),inset 0 0 8px rgba(255,255,255,.09)}
.ecs-card.ecs-warm .ecs-heat{background:linear-gradient(0deg,#168bd7 0%,#e6bd43 58%,#ff923d 100%);box-shadow:0 -3px 11px rgba(255,146,61,.36)}
.ecs-card.ecs-hot{border-color:#8e573c;box-shadow:0 0 13px rgba(255,105,55,.13),inset 0 0 16px rgba(255,100,45,.025)}
.ecs-card.ecs-hot .ecs-tank{border-color:#ff8a55;box-shadow:0 0 12px rgba(255,92,45,.38),inset 0 0 9px rgba(255,235,205,.12)}
.ecs-card.ecs-hot .ecs-heat{background:linear-gradient(0deg,#e95b27 0%,#ff7135 55%,#ffae55 100%);box-shadow:0 -4px 13px rgba(255,91,38,.48);animation:ecsGentleBoil 1.45s ease-in-out infinite}
.ecs-card.ecs-hot .ecs-tank>span{color:#fff1df;text-shadow:0 0 6px rgba(255,100,40,.65),0 1px 3px #000}
@keyframes ecsGentleBoil{0%,100%{filter:brightness(1)}50%{filter:brightness(1.14);box-shadow:0 -5px 15px rgba(255,95,35,.58)}}

#grid.grid-import{color:#ff6258!important;text-shadow:0 0 8px rgba(255,70,60,.24)}#grid.grid-export{color:#63e59a!important;text-shadow:0 0 8px rgba(70,230,140,.22)}

/* v66 — Tesla SOC + Auto/Manual */
.tesla-side{display:flex;flex-direction:column;align-items:center;justify-content:center;gap:2px}.tesla-battery{font-style:normal;margin-left:4px;color:#8fd8b2;font-size:7px;letter-spacing:0}.tesla-mode{border:0;border-radius:5px;padding:2px 4px;font-size:6px;font-weight:900;letter-spacing:.35px;line-height:1.1;cursor:pointer}.tesla-mode.auto{background:#173b31;color:#72ddb1;box-shadow:inset 0 0 0 1px #28594b}.tesla-mode.manual{background:#49361c;color:#ffc66e;box-shadow:inset 0 0 0 1px #74562c}.tesla-mode:disabled{opacity:.45}.tesla-live{grid-template-columns:58px 1fr 34px}.tesla-live.charging .tesla-battery{color:#8ff0bd}

.tesla-cost{border:0;border-radius:5px;padding:2px 4px;font-size:6px;font-weight:800;cursor:pointer;background:#202b36;color:#9fc4df;box-shadow:inset 0 0 0 1px #34495c}.tesla-cost.warn{background:#493f1c;color:#ffd66e}.tesla-cost.danger{background:#4b2020;color:#ff8585;animation:teslaCostPulse 1.2s infinite}@keyframes teslaCostPulse{50%{opacity:.6}}
