feat: kiosk-mode hides server, agents, guardian panels + HA/agents/memory/proxmox from bottom bar

- Adds body.kiosk-mode class on fullscreen entry/exit
- Hides: #server-panel, #tab-agents, #tab-guardian, tab buttons
- Hides bottom bar: Home Assistant, Agents, Memory, Proxmox
- Falls back to INTEL tab if agents/guardian was active on kiosk entry
- All elements remain visible in normal/tablet mode
This commit is contained in:
2026-06-21 04:07:32 +00:00
parent 52ddee3e78
commit 45845a1f61
3 changed files with 33 additions and 5 deletions
+20
View File
@@ -1364,3 +1364,23 @@ body.tablet-mode .alert-item { font-size:0.75rem; padding:9px 11px; }
/* ── BOTTOM BAR ─────────────────────────────────────────────────── */ /* ── BOTTOM BAR ─────────────────────────────────────────────────── */
body.tablet-mode #bottomBar { font-size:0.7rem; height:34px; } body.tablet-mode #bottomBar { font-size:0.7rem; height:34px; }
/* ════════════════════════════════════════════════════════════════════════
KIOSK MODE — hide noisy panels, keep it clean on Fire tablet
Only active when body.kiosk-mode (fullscreen + tablet)
════════════════════════════════════════════════════════════════════════ */
/* Hide server stats, agents tab, guardian tab in kiosk */
body.kiosk-mode #server-panel { display:none !important; }
body.kiosk-mode #tab-btn-agents { display:none !important; }
body.kiosk-mode #tab-btn-guardian { display:none !important; }
body.kiosk-mode #tab-agents { display:none !important; }
body.kiosk-mode #tab-guardian { display:none !important; }
/* Hide bottom bar: Home Assistant, Agents, Memory, Proxmox */
body.kiosk-mode #bb-ha-item { display:none !important; }
body.kiosk-mode #bb-agents-item { display:none !important; }
body.kiosk-mode #bb-memory-item { display:none !important; }
body.kiosk-mode #bb-pve-item { display:none !important; }
/* If agents or guardian was the active tab, switch to intel */
+8
View File
@@ -1783,11 +1783,18 @@ async function toggleKiosk() {
if ("wakeLock" in navigator) { if ("wakeLock" in navigator) {
try { _wakeLock = await navigator.wakeLock.request("screen"); } catch(e) {} try { _wakeLock = await navigator.wakeLock.request("screen"); } catch(e) {}
} }
document.body.classList.add("kiosk-mode");
// Switch away from hidden tabs if one is active
const activeTab = document.querySelector(".tab-pane.active");
if (activeTab && (activeTab.id === "tab-agents" || activeTab.id === "tab-guardian")) {
switchTab("intel");
}
if (btn) { btn.textContent = "⧞ EXIT"; btn.style.color = "var(--cyan)"; } if (btn) { btn.textContent = "⧞ EXIT"; btn.style.color = "var(--cyan)"; }
} else { } else {
const ex = document.exitFullscreen || document.webkitExitFullscreen || document.mozCancelFullScreen || document.msExitFullscreen; const ex = document.exitFullscreen || document.webkitExitFullscreen || document.mozCancelFullScreen || document.msExitFullscreen;
if (ex) ex.call(document).catch(() => {}); if (ex) ex.call(document).catch(() => {});
if (_wakeLock) { _wakeLock.release().catch(() => {}); _wakeLock = null; } if (_wakeLock) { _wakeLock.release().catch(() => {}); _wakeLock = null; }
document.body.classList.remove("kiosk-mode");
if (btn) { btn.textContent = "⧞ KIOSK"; btn.style.color = ""; } if (btn) { btn.textContent = "⧞ KIOSK"; btn.style.color = ""; }
if (!isTablet()) document.body.classList.remove("tablet-mode"); if (!isTablet()) document.body.classList.remove("tablet-mode");
} }
@@ -1803,6 +1810,7 @@ function _onFsChange() {
const btn = document.getElementById("kioskBtn"); const btn = document.getElementById("kioskBtn");
if (!document.fullscreenElement && !document.webkitFullscreenElement) { if (!document.fullscreenElement && !document.webkitFullscreenElement) {
if (_wakeLock) { _wakeLock.release().catch(() => {}); _wakeLock = null; } if (_wakeLock) { _wakeLock.release().catch(() => {}); _wakeLock = null; }
document.body.classList.remove("kiosk-mode");
if (btn) { btn.textContent = "⧞ KIOSK"; btn.style.color = ""; } if (btn) { btn.textContent = "⧞ KIOSK"; btn.style.color = ""; }
if (!isTablet()) document.body.classList.remove("tablet-mode"); if (!isTablet()) document.body.classList.remove("tablet-mode");
} }
+5 -5
View File
@@ -103,7 +103,7 @@
</div> </div>
<div id="weather-forecast" style="display:grid;grid-template-columns:repeat(4,1fr);gap:4px"></div> <div id="weather-forecast" style="display:grid;grid-template-columns:repeat(4,1fr);gap:4px"></div>
</div> </div>
<div class="panel"> <div class="panel" id="server-panel">
<div class="panel-title">JARVIS SERVER <span style="font-size:0.5rem;color:var(--text-dim)">10.48.200.211</span><div class="indicator"></div></div> <div class="panel-title">JARVIS SERVER <span style="font-size:0.5rem;color:var(--text-dim)">10.48.200.211</span><div class="indicator"></div></div>
<!-- Metric bars + sparklines --> <!-- Metric bars + sparklines -->
@@ -228,7 +228,7 @@
<div class="tab active" onclick="switchTab('ha')">HOME</div> <div class="tab active" onclick="switchTab('ha')">HOME</div>
<div class="tab" onclick="switchTab('alerts')">ALERTS</div> <div class="tab" onclick="switchTab('alerts')">ALERTS</div>
<div class="tab" onclick="switchTab('news')">NEWS</div> <div class="tab" onclick="switchTab('news')">NEWS</div>
<div class="tab" onclick="switchTab('agents')">AGENTS</div> <div class="tab" id="tab-btn-agents" onclick="switchTab('agents')">AGENTS</div>
<div class="tab" onclick="switchTab('sites')">SITES</div> <div class="tab" onclick="switchTab('sites')">SITES</div>
<div class="tab" id="tab-btn-intel" onclick="switchTab('intel')">INTEL</div> <div class="tab" id="tab-btn-intel" onclick="switchTab('intel')">INTEL</div>
<div class="tab" id="tab-btn-comms" onclick="switchTab('comms')">COMMS</div> <div class="tab" id="tab-btn-comms" onclick="switchTab('comms')">COMMS</div>
@@ -302,15 +302,15 @@
<div class="bb-dot" id="bb-do-dot"></div> <div class="bb-dot" id="bb-do-dot"></div>
<span>JARVIS VM</span> <span id="bb-do-status">CHECKING</span> <span>JARVIS VM</span> <span id="bb-do-status">CHECKING</span>
</div> </div>
<div class="bb-item"> <div class="bb-item" id="bb-pve-item">
<div class="bb-dot" id="bb-pve-dot"></div> <div class="bb-dot" id="bb-pve-dot"></div>
<span>PROXMOX</span> <span id="bb-pve-status">CHECKING</span> <span>PROXMOX</span> <span id="bb-pve-status">CHECKING</span>
</div> </div>
<div class="bb-item"> <div class="bb-item" id="bb-ha-item">
<div class="bb-dot" id="bb-ha-dot"></div> <div class="bb-dot" id="bb-ha-dot"></div>
<span>HOME ASSISTANT</span> <span id="bb-ha-status">CHECKING</span> <span>HOME ASSISTANT</span> <span id="bb-ha-status">CHECKING</span>
</div> </div>
<div class="bb-item"> <div class="bb-item" id="bb-agents-item">
<div class="bb-dot" id="bb-agent-dot"></div> <div class="bb-dot" id="bb-agent-dot"></div>
<span>AGENTS</span> <span id="bb-agent-status">--</span> <span>AGENTS</span> <span id="bb-agent-status">--</span>
</div> </div>