diff --git a/docs/user_guide.md b/docs/user_guide.md
index 1be0374..fb3a7da 100644
--- a/docs/user_guide.md
+++ b/docs/user_guide.md
@@ -25,6 +25,9 @@ peach-and-brown palette therefore continue behind and through the dialog views.
names, locations, metrics, switch channels, forecast source, selected theme,
and live values will vary by installation.
+The dashboard header centers the Sensorius image between individual pill buttons for
+the full-screen graph (left) and General Settings (right).
+
The dashboard presents:
### Interface Icons
@@ -32,7 +35,7 @@ The dashboard presents:
**Graph icon**—a blue line graph on horizontal and vertical axes—opens
the full-screen **Sensorius Graphum** workspace.
-
The
- **Settings icon (gear)** beside **Sensorius AI** opens General Settings.
+ **Settings icon (gear)** to the right of the **Sensorius image** opens General Settings.
Other gear icons open settings for the associated sensor or switch, or open
the timer control for a Switch Tile.
diff --git a/sensorius/__init__.py b/sensorius/__init__.py
index fb5f775..6e44693 100644
--- a/sensorius/__init__.py
+++ b/sensorius/__init__.py
@@ -4,4 +4,4 @@
release notes, and supporting tooling can report a consistent build identity.
"""
-__version__ = "v0.26.251.8"
+__version__ = "v0.26.251.13"
diff --git a/sensorius/saiHtml.py b/sensorius/saiHtml.py
index 7a700e5..e70d84b 100644
--- a/sensorius/saiHtml.py
+++ b/sensorius/saiHtml.py
@@ -1686,7 +1686,7 @@ def _status_color_hex(status: str) -> str:
yield "
"
yield ""
@@ -2371,7 +2371,7 @@ def _format_stat_value(stat_value):
yield " const ts = document.getElementById('update_time');"
yield " if (ts) {"
yield " const formatted = now.toLocaleString('en-CA', { year:'numeric', month:'2-digit', day:'2-digit', hour:'2-digit', minute:'2-digit', second:'2-digit' }).replace(',', '');"
- yield " const weekday = now.toLocaleDateString('en-CA', { weekday:'long' });"
+ yield " const weekday = now.toLocaleDateString('en-CA', { weekday:'short' });"
yield " ts.textContent = `${weekday} ${formatted}`;"
yield " }"
yield " const biodynamicMinuteKey = `${now.getFullYear()}-${now.getMonth()+1}-${now.getDate()}-${now.getHours()}-${now.getMinutes()}`;"
@@ -4360,9 +4360,8 @@ def _format_stat_value(stat_value):
yield ""
yield " const existingRow = document.querySelector('.sensor-row');"
yield " const byGraphModal = document.getElementById('graphModal')?.parentElement || null;"
- yield " const overviewFooter = document.getElementById('dashboard-overview-footer');"
yield " const dashboard = document.querySelector('.dashboard');"
- yield " const parent = (overviewFooter && overviewFooter.parentElement) || (existingRow && existingRow.parentElement) || dashboard || byGraphModal || document.body;"
+ yield " const parent = document.querySelector('.dashboard-content') || (existingRow && existingRow.parentElement) || dashboard || byGraphModal || document.body;"
yield " const switchGroup = document.getElementById('group_switches');"
yield ""
@@ -4378,7 +4377,6 @@ def _format_stat_value(stat_value):
yield " group.style.flex = '0 0 100%';"
yield " group.style.display = 'block';"
yield " if (switchGroup && switchGroup.parentElement === parent) parent.insertBefore(group, switchGroup);"
- yield " else if (overviewFooter && overviewFooter.parentElement === parent) parent.insertBefore(group, overviewFooter);"
yield " else parent.appendChild(group);"
yield " }"
yield ""
@@ -6689,36 +6687,21 @@ def _format_stat_value(stat_value):
yield " if (btn) btn.setAttribute('aria-expanded', 'false');"
yield " });"
yield "};"
- yield "window.pinDashboardOverviewFooter = function(){"
- yield " const overviewFooter = document.getElementById('dashboard-overview-footer');"
- yield " if (!overviewFooter) return;"
- yield " const sensorGroup = document.querySelector('.sensor-group[data-sensor-id]');"
- yield " const dashboardContent = (sensorGroup && sensorGroup.parentElement) || overviewFooter.parentElement || document.querySelector('.dashboard-content');"
- yield " if (!dashboardContent) return;"
- yield " if (overviewFooter.parentElement !== dashboardContent || dashboardContent.lastElementChild !== overviewFooter) dashboardContent.appendChild(overviewFooter);"
- yield "};"
yield "window.applySensorGroupOrder = function(order){"
yield " if (!Array.isArray(order) || !order.length) return;"
- yield " const overviewFooter = document.getElementById('dashboard-overview-footer');"
yield " const firstSensorGroup = document.querySelector('.sensor-group[data-sensor-id]');"
- yield " const dashboardContent = (firstSensorGroup && firstSensorGroup.parentElement) || (overviewFooter && overviewFooter.parentElement) || document.querySelector('.dashboard-content');"
+ yield " const dashboardContent = (firstSensorGroup && firstSensorGroup.parentElement) || document.querySelector('.dashboard-content');"
yield " if (!dashboardContent) return;"
- yield " const insertBeforeFooter = (el) => {"
- yield " if (!el) return;"
- yield " if (overviewFooter && overviewFooter.parentElement === dashboardContent) dashboardContent.insertBefore(el, overviewFooter);"
- yield " else dashboardContent.appendChild(el);"
- yield " };"
yield " const groups = new Map();"
yield " dashboardContent.querySelectorAll('.sensor-group[data-sensor-id]').forEach((el) => {"
yield " groups.set(el.getAttribute('data-sensor-id') || '', el);"
yield " });"
yield " order.forEach((sid) => {"
yield " const el = groups.get(String(sid || ''));"
- yield " if (el) insertBeforeFooter(el);"
+ yield " if (el) dashboardContent.appendChild(el);"
yield " });"
yield " const switchGroup = document.getElementById('group_switches');"
- yield " if (switchGroup) insertBeforeFooter(switchGroup);"
- yield " window.pinDashboardOverviewFooter();"
+ yield " if (switchGroup) dashboardContent.appendChild(switchGroup);"
yield "};"
yield "window.reorderSensorGroup = async function(sensorId, direction){"
yield " const sid = String(sensorId || '').trim();"
@@ -8172,9 +8155,6 @@ def _format_stat_value(stat_value):
yield ""
- yield ""
yield "
"
yield "
"
yield "