/* ===== HOMIO — clean glassmorphism shared styles ===== */
:root{
  --glass:rgba(255,255,255,.08);
  --glass-strong:rgba(255,255,255,.14);
  --border:rgba(255,255,255,.14);
  --text:#f5f6f8;
  --text-dim:rgba(245,246,248,.62);
  --accent:#ffd35e;
  --on:#ffcf4d;
  --radius:26px;
}
*{box-sizing:border-box;margin:0;padding:0;}
body{
  font-family:"Hanken Grotesk",-apple-system,BlinkMacSystemFont,sans-serif;
  color:var(--text);min-height:100vh;
  background:
    radial-gradient(1200px 600px at 15% -10%,rgba(88,120,200,.35),transparent 60%),
    radial-gradient(900px 500px at 100% 0%,rgba(180,120,220,.25),transparent 55%),
    linear-gradient(160deg,#0d1220 0%,#131a2b 45%,#0b0f1a 100%);
  background-attachment:fixed;padding-bottom:40px;
}
.glass{
  background:var(--glass);border:1px solid var(--border);border-radius:var(--radius);
  backdrop-filter:blur(22px) saturate(140%);-webkit-backdrop-filter:blur(22px) saturate(140%);
  box-shadow:0 8px 40px rgba(0,0,0,.30);
}

/* ---- nav ---- */
nav{
  display:flex;align-items:center;gap:28px;padding:20px 34px;
  position:sticky;top:0;z-index:20;background:rgba(13,18,32,.55);
  backdrop-filter:blur(18px);border-bottom:1px solid var(--border);
}
.logo{font-weight:800;font-size:24px;letter-spacing:-.5px;display:flex;align-items:center;gap:8px;text-decoration:none;color:var(--text);}
.logo .dot{width:11px;height:11px;border-radius:50%;background:var(--accent);}
.nav-links{display:flex;gap:26px;margin-left:10px;}
.nav-links a{color:var(--text-dim);text-decoration:none;font-weight:500;font-size:15px;padding-bottom:6px;border-bottom:2px solid transparent;transition:.2s;}
.nav-links a.active{color:var(--text);border-bottom-color:#fff;}
.nav-links a:hover{color:var(--text);}
.clock{margin-left:auto;text-align:right;}
.clock .time{font-size:26px;font-weight:600;line-height:1;}
.clock .date{font-size:13px;color:var(--text-dim);margin-top:3px;}

.wrap{padding:26px 34px;display:flex;flex-direction:column;gap:26px;max-width:1500px;margin:0 auto;}
.section-title{font-size:15px;font-weight:600;color:var(--text-dim);text-transform:uppercase;letter-spacing:2px;margin:4px 2px -6px;}

/* ---- room page hero ---- */
.room-hero{height:220px;border-radius:var(--radius);position:relative;overflow:hidden;border:1px solid var(--border);box-shadow:0 8px 40px rgba(0,0,0,.35);}
.room-hero .bg{position:absolute;inset:0;background-size:cover;background-position:center;transform:scale(1.03);}
.room-hero .shade{position:absolute;inset:0;background:linear-gradient(180deg,rgba(0,0,0,.1),rgba(0,0,0,.72));}
.room-hero .rh-content{position:absolute;inset:0;padding:26px;display:flex;flex-direction:column;justify-content:flex-end;}
.room-hero h1{font-size:34px;font-weight:800;}
.room-hero .rh-sub{color:var(--text-dim);font-size:15px;margin-top:4px;}
.back{display:inline-flex;align-items:center;gap:6px;color:var(--text-dim);text-decoration:none;font-size:14px;margin-bottom:2px;}
.back:hover{color:var(--text);}

/* ---- weather hero (home) ---- */
.hero{display:flex;align-items:center;gap:30px;padding:28px 34px;}
.hero .wicon{font-size:64px;}
.hero .wtemp{font-size:58px;font-weight:300;line-height:1;}
.hero .wcond{font-size:18px;color:var(--text-dim);margin-top:4px;}
.hero .wmeta{margin-left:auto;display:flex;gap:34px;}
.hero .wmeta .m{text-align:center;}
.hero .wmeta .m .v{font-size:24px;font-weight:600;}
.hero .wmeta .m .l{font-size:12px;color:var(--text-dim);text-transform:uppercase;letter-spacing:1px;margin-top:3px;}

/* ---- room grid cards (home) ---- */
.rooms{display:flex;gap:20px;overflow-x:auto;padding:4px 2px 12px;scroll-snap-type:x mandatory;}
.rooms::-webkit-scrollbar{height:8px;}
.rooms::-webkit-scrollbar-thumb{background:rgba(255,255,255,.15);border-radius:4px;}
.room{flex:0 0 300px;height:210px;border-radius:var(--radius);position:relative;overflow:hidden;scroll-snap-align:start;
  border:1px solid var(--border);box-shadow:0 8px 40px rgba(0,0,0,.35);text-decoration:none;color:var(--text);display:block;}
.room .bg{position:absolute;inset:0;background-size:cover;background-position:center;transform:scale(1.02);transition:.4s;}
.room:hover .bg{transform:scale(1.08);}
.room .shade{position:absolute;inset:0;background:linear-gradient(180deg,rgba(0,0,0,.15) 0%,rgba(0,0,0,.75) 100%);}
.room .content{position:absolute;inset:0;padding:20px;display:flex;flex-direction:column;justify-content:space-between;}
.room .rtop{display:flex;justify-content:space-between;align-items:flex-start;}
.room .rname{font-size:21px;font-weight:700;}
.room .rstate{font-size:13px;color:var(--text-dim);margin-top:2px;}
.room .pill{background:var(--glass-strong);border:1px solid var(--border);border-radius:14px;padding:5px 11px;font-size:12px;font-weight:600;backdrop-filter:blur(8px);display:flex;align-items:center;gap:6px;}
.room .pill.on{background:rgba(255,207,77,.22);border-color:rgba(255,207,77,.4);color:#ffe6a3;}
.room .rbottom{display:flex;gap:16px;font-size:14px;}
.room .rbottom .stat{display:flex;align-items:center;gap:6px;}
.room .rbottom .stat .k{color:var(--text-dim);}
.room .arrow{position:absolute;bottom:18px;right:20px;font-size:20px;color:var(--text-dim);}

.grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(270px,1fr));gap:20px;}

/* ---- light slider card ---- */
.light-card{padding:20px;display:flex;flex-direction:column;gap:16px;}
.light-head{display:flex;align-items:center;gap:14px;}
.light-icon{width:46px;height:46px;border-radius:14px;display:flex;align-items:center;justify-content:center;font-size:22px;background:var(--glass-strong);}
.light-icon.on{background:radial-gradient(circle at 40% 35%,#ffe38a,#ff9d3d);color:#3a2400;box-shadow:0 0 24px rgba(255,190,80,.5);}
.light-name{font-size:16px;font-weight:600;}
.light-sub{font-size:13px;color:var(--text-dim);}
.slider{height:46px;border-radius:16px;background:rgba(255,255,255,.09);position:relative;overflow:hidden;}
.slider .fill{position:absolute;inset:0;width:var(--pct,0%);background:linear-gradient(90deg,#ff9d3d,#ffe38a);opacity:.9;}
.slider .lbl{position:absolute;inset:0;display:flex;align-items:center;padding:0 16px;font-weight:700;font-size:14px;color:#fff;}
.slider.off .fill{width:0;}
.slider.off .lbl{color:var(--text-dim);}
.slider.unavail{opacity:.45;}
.slider{cursor:pointer;}

/* ---- light extra controls (color temp + full color, injected by dashboard.js when supported) ---- */
.light-extra{display:flex;align-items:center;gap:12px;}
.light-extra .ct-slider{flex:1;-webkit-appearance:none;appearance:none;height:8px;border-radius:4px;
  background:linear-gradient(90deg,#ff9d3d,#fff6e0,#bcd6ff);outline:none;cursor:pointer;}
.light-extra .ct-slider::-webkit-slider-thumb{-webkit-appearance:none;width:18px;height:18px;border-radius:50%;
  background:#fff;border:2px solid rgba(0,0,0,.25);cursor:pointer;}
.light-extra .ct-slider::-moz-range-thumb{width:18px;height:18px;border-radius:50%;
  background:#fff;border:2px solid rgba(0,0,0,.25);cursor:pointer;}
.light-extra .color-swatch{width:34px;height:34px;border-radius:50%;border:2px solid var(--border);
  padding:0;cursor:pointer;background:none;flex:0 0 auto;}
.light-extra .color-swatch::-webkit-color-swatch-wrapper{padding:0;border-radius:50%;}
.light-extra .color-swatch::-webkit-color-swatch{border:none;border-radius:50%;}
.light-extra .color-swatch::-moz-color-swatch{border:none;border-radius:50%;}

/* ---- toggle row ---- */
.row{display:flex;align-items:center;gap:14px;padding:16px 20px;}
.row .light-icon{flex:0 0 auto;}
.row .r-name{flex:1;font-size:16px;font-weight:600;}
.row .r-sub{font-size:13px;color:var(--text-dim);}
.toggle{width:52px;height:30px;border-radius:15px;background:rgba(255,255,255,.14);position:relative;flex:0 0 auto;cursor:pointer;transition:.2s;}
.toggle::after{content:"";position:absolute;top:3px;left:3px;width:24px;height:24px;border-radius:50%;background:#c9ccd1;transition:.2s;}
.toggle.on{background:rgba(255,207,77,.5);}
.toggle.on::after{left:25px;background:var(--accent);}
.toggle.disabled{opacity:.4;}

/* ---- climate ---- */
.climate{padding:22px;text-align:center;}
.climate-name{font-size:16px;font-weight:600;margin-bottom:6px;}
.climate .ring{width:150px;height:150px;border-radius:50%;margin:6px auto 14px;display:flex;flex-direction:column;align-items:center;justify-content:center;
  border:10px solid rgba(255,255,255,.12);background:conic-gradient(from 220deg,#4a9dff 0deg,#ff7a59 200deg,rgba(255,255,255,.08) 200deg);}
.climate .ring .t{font-size:38px;font-weight:300;}
.climate .ring .s{font-size:12px;color:var(--text-dim);letter-spacing:1px;text-transform:uppercase;}
.climate-modes{display:flex;justify-content:center;gap:14px;margin-top:8px;}
.climate-modes .cm{width:44px;height:44px;border-radius:50%;background:var(--glass-strong);display:flex;align-items:center;justify-content:center;font-size:18px;color:var(--text-dim);border:1px solid var(--border);}

/* ---- blind ---- */
.blind-card{padding:20px;}
.blind-head{display:flex;align-items:center;gap:12px;margin-bottom:16px;}
.blind-visual{display:flex;justify-content:center;gap:20px;align-items:flex-end;}
.blind-shape{width:82px;height:120px;background:rgba(255,255,255,.08);border-radius:8px;position:relative;overflow:hidden;border:1px solid var(--border);}
.blind-shape .slat{position:absolute;top:0;left:0;right:0;background:repeating-linear-gradient(rgba(255,211,94,.85) 0 6px,rgba(255,190,60,.65) 6px 10px);}
.blind-shape .cap{position:absolute;bottom:6px;left:8px;font-size:11px;color:var(--text-dim);}
.blind-ctrls{display:flex;flex-direction:column;gap:10px;}
.blind-ctrls button{width:46px;height:46px;border-radius:14px;border:1px solid var(--border);background:var(--glass-strong);color:#fff;font-size:16px;cursor:pointer;}

/* ---- media ---- */
.media-card{padding:20px;display:flex;flex-direction:column;gap:16px;}
.media-top{display:flex;align-items:center;gap:14px;}
.media-art{width:56px;height:56px;border-radius:14px;background:linear-gradient(135deg,#1DB954,#0f7a37);display:flex;align-items:center;justify-content:center;font-size:26px;flex:0 0 auto;}
.media-title{font-size:16px;font-weight:600;}
.media-sub{font-size:13px;color:var(--text-dim);}
.media-ctrls{display:flex;justify-content:center;gap:26px;font-size:22px;color:var(--text-dim);}
.media-ctrls .play{color:var(--text);}

/* ---- fuel ---- */
.fuel-card{padding:20px;display:flex;flex-direction:column;gap:14px;}
.fuel-head{display:flex;align-items:center;gap:14px;}
.fuel-icon{width:46px;height:46px;border-radius:14px;display:flex;align-items:center;justify-content:center;font-size:22px;background:var(--glass-strong);flex:0 0 auto;}
.fuel-title{font-size:16px;font-weight:600;}
.fuel-sub{font-size:13px;color:var(--text-dim);}
.fuel-list{display:flex;flex-direction:column;}
.fuel-row{display:flex;align-items:center;justify-content:space-between;gap:10px;padding:8px 0;border-top:1px solid var(--border);}
.fuel-row:first-child{border-top:none;}
.fr-name{font-size:13px;font-weight:600;}
.fr-sub{font-size:12px;color:var(--text-dim);}
.fr-price{font-size:14px;font-weight:700;color:var(--accent);flex:0 0 auto;}

/* ---- tiles ---- */
.tile{padding:18px 20px;display:flex;align-items:center;gap:14px;}
.tile .tv{margin-left:auto;text-align:right;}
.tile .tv .big{font-size:20px;font-weight:600;}
.tile .tv .small{font-size:12px;color:var(--text-dim);}
.unavail-txt{color:rgba(255,140,120,.8);font-size:13px;font-style:italic;}

/* ---- camera ---- */
.camera{position:relative;border-radius:var(--radius);overflow:hidden;border:1px solid var(--border);}
.camera .ph{height:210px;background:linear-gradient(135deg,#20242c,#12151b);display:flex;align-items:center;justify-content:center;font-size:44px;color:rgba(255,255,255,.25);}
.camera .overlay{position:absolute;left:0;right:0;bottom:0;background:linear-gradient(transparent,rgba(0,0,0,.7));padding:22px 16px 12px;display:flex;justify-content:space-between;font-size:14px;}
.camera .live{color:#7ee08a;font-weight:700;}

footer{text-align:center;padding:24px 20px 10px;font-size:12px;color:var(--text-dim);}

@media(max-width:820px){
  nav{gap:14px;padding:16px 18px;}
  .nav-links{display:none;}
  .wrap{padding:18px;}
  .hero{flex-wrap:wrap;gap:18px;}
  .hero .wmeta{margin-left:0;width:100%;justify-content:space-between;}
}

/* ===== Kiosk panel pages (entry/bathroom/bedroom) =====
   Built for the Sonoff NSPanel Pro wall panels: 1334x750 physical, devicePixelRatio 1.5,
   so the real CSS viewport is a fixed 890x500 (confirmed live, 2026-09-22 — see a temp
   diagnostic page pushed to the entry panel). Scoped entirely under body.kiosk-page so it
   can't affect index/living-room/kitchen/balcony/cameras, which keep the original nav+hero
   design. Reuses the exact same tile class names (.light-card/.tile/.row/.blind-card/
   .media-card and their children) that dashboard.js already targets -- only sizing/layout
   changes here, no JS behavior changes. */
body.kiosk-page{height:100vh;overflow:hidden;padding-bottom:0;}

.kiosk-page .khead{
  height:56px;display:flex;align-items:center;gap:14px;padding:0 18px;
  border-bottom:1px solid var(--border);background:rgba(13,18,32,.55);backdrop-filter:blur(18px);
  flex:0 0 auto;
}
.kiosk-page .khead .khome{
  width:34px;height:34px;border-radius:10px;display:flex;align-items:center;justify-content:center;
  background:var(--glass-strong);color:var(--text);text-decoration:none;font-size:17px;flex:0 0 auto;
}
.kiosk-page .kicons{display:flex;gap:6px;flex:0 0 auto;}
.kiosk-page .kicons a{
  width:34px;height:34px;border-radius:10px;display:flex;align-items:center;justify-content:center;
  font-size:16px;text-decoration:none;color:var(--text-dim);background:transparent;border:1px solid transparent;
}
.kiosk-page .kicons a.active{background:var(--glass-strong);color:var(--text);border-color:var(--border);}
.kiosk-page .ktitle{font-size:21px;font-weight:800;margin-right:auto;}
.kiosk-page .kclock{text-align:right;flex:0 0 auto;}
.kiosk-page .kclock .time{font-size:19px;font-weight:700;line-height:1;}

.kiosk-page .wrap{
  height:calc(100vh - 56px);max-width:none;margin:0;padding:16px 20px;
  display:flex;flex-direction:column;overflow:hidden;
}
.kiosk-page .kgrid{
  display:grid;grid-template-columns:repeat(3,1fr);gap:16px;
  align-content:center;flex:1;min-height:0;
}
/* Fixed (not stretched) tile height, sized so the worst case -- bedroom's 5 tiles / 2 rows --
   fits inside the ~412px available with room to spare: 190*2 + 16 gap = 396px. Single-row
   pages (entry/bathroom, 3 tiles) end up centered with blank space above/below by design --
   a centered row of big buttons, not stretched-thin cards. */
.kiosk-page .kgrid > .glass{position:relative;height:190px;}

.kiosk-page .light-card{padding:16px;justify-content:center;gap:12px;}
.kiosk-page .light-head{gap:12px;}
.kiosk-page .light-icon{width:40px;height:40px;font-size:19px;}
.kiosk-page .light-name{font-size:15px;}
.kiosk-page .light-sub{font-size:12px;}
.kiosk-page .slider{height:40px;}
.kiosk-page .tile{padding:16px;height:100%;}
.kiosk-page .tile .tv .big{font-size:17px;}
.kiosk-page .row{padding:14px 16px;height:100%;}
.kiosk-page .blind-card{padding:14px;height:100%;display:flex;flex-direction:column;justify-content:center;}
.kiosk-page .blind-head{margin-bottom:10px;}
.kiosk-page .blind-shape{width:56px;height:80px;}
.kiosk-page .blind-ctrls button{width:38px;height:38px;font-size:14px;}
.kiosk-page .media-card{padding:14px;justify-content:center;gap:10px;height:100%;}
.kiosk-page .media-art{width:44px;height:44px;font-size:20px;}

/* Historical-usage highlight (usage.js) -- reorder-and-highlight only, nothing is ever
   hidden. Applied to at most one tile per room, only when the signal is clear. */
.kiosk-page .suggested{
  border-color:rgba(255,211,94,.55);
  box-shadow:0 0 0 2px rgba(255,211,94,.35),0 8px 40px rgba(0,0,0,.30);
}
.kiosk-page .likely-badge{
  position:absolute;top:8px;right:8px;background:rgba(255,211,94,.92);color:#3a2400;
  font-size:10px;font-weight:800;padding:4px 8px;border-radius:9px;letter-spacing:.3px;
}

/* Blind position presets (wireBlindPresets) -- living room panel's 0/25/50/75/100 row. */
.kiosk-page .bpresets{display:flex;gap:6px;margin-top:10px;}
.kiosk-page .bpreset{
  flex:1;height:40px;border-radius:12px;border:1px solid var(--border);background:var(--glass-strong);
  color:var(--text);font:600 13px "Hanken Grotesk",sans-serif;cursor:pointer;padding:0;
}
.kiosk-page .bpreset.active{background:rgba(255,211,94,.9);color:#3a2400;border-color:rgba(255,211,94,.9);}
.kiosk-page .blind-card.presets .blind-visual{justify-content:flex-start;align-items:center;gap:14px;}
.kiosk-page .blind-card.presets .blind-shape{width:44px;height:58px;}
.kiosk-page .tile .light-name{line-height:1.2;}
