diff --git a/frontend/src/index.css b/frontend/src/index.css index 40cfa14..f076d2b 100644 --- a/frontend/src/index.css +++ b/frontend/src/index.css @@ -449,16 +449,18 @@ table.data tr:last-child td { border-bottom: none; } border: 1px solid var(--card-border); border-radius: 8px; padding: 10px 12px; font-size: 16px; } +/* One row, not two — the info line sits inline between the title and the + Select button rather than on its own line, to save vertical space. */ .kiosk-header { - display: flex; flex-direction: column; gap: 6px; + display: flex; align-items: center; gap: 16px; padding: 14px 18px; background: var(--navy); color: var(--text); flex-shrink: 0; } -.kiosk-header-row { display: flex; align-items: center; justify-content: space-between; gap: 12px; } -.kiosk-header-title { display: flex; align-items: center; gap: 8px; font-weight: 700; font-size: 16px; color: var(--gold); } +.kiosk-header-title { display: flex; align-items: center; gap: 8px; font-weight: 700; font-size: 16px; color: var(--gold); flex-shrink: 0; } /* Same weather-compensation summary as the Dashboard's banner (plus TRV default, which the kiosk has no Settings page to show separately) — see - buildInfoLine() in Kiosk.tsx. */ -.kiosk-header-info { font-size: 12px; color: var(--text-muted); } + buildInfoLine() in Kiosk.tsx. Takes the remaining space between the title + and the Select button, truncating with an ellipsis if it doesn't fit. */ +.kiosk-header-info { flex: 1; min-width: 0; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; text-align: center; font-size: 12px; color: var(--text-muted); } .kiosk-error { margin: 12px 16px 0; } diff --git a/frontend/src/pages/Kiosk.tsx b/frontend/src/pages/Kiosk.tsx index 948664e..55a8f10 100644 --- a/frontend/src/pages/Kiosk.tsx +++ b/frontend/src/pages/Kiosk.tsx @@ -87,7 +87,10 @@ export default function Kiosk() { const load = useCallback(() => { kioskFetchStatus() .then(s => { - setZones(s.zones.filter(z => liveDevicesOf(z).length > 0)) + // Every active zone shows, not just ones with a live device assigned yet + // (per user request, 2026-08-26) — KioskZoneBlock already renders "No + // live devices" for one that has none. + setZones(s.zones) setWeatherPeakC(s.weather_peak_c) setActiveAcTemplate(s.active_ac_template) setLoadError('') @@ -191,15 +194,13 @@ export default function Kiosk() { return (
No live-controllable devices assigned to a zone yet.
+No zones configured yet.
)}