Today’s forecast
{{ forecast.condition }}
{{ forecast.synopsis }}
+Hours 1–{{ 8 if hour_count > 8 else hour_count }} of {{ hour_count }}
@@ -91,7 +97,7 @@diff --git a/docs/user_guide.md b/docs/user_guide.md index 88af7f2..92c46b6 100644 --- a/docs/user_guide.md +++ b/docs/user_guide.md @@ -480,6 +480,18 @@ Google Account when the hub is retired or no longer uses that account. #### Weather Forecast +Both forecast tiles include a forecast synopsis. Open-Meteo and MET Norway +summaries are assembled from hourly conditions, temperature range, maximum wind, +and peak precipitation chance, using the selected display units. NWS supplies +its own period narrative when available; the period name is shown and its text +keeps the provider’s original units. If that optional text is unavailable, +Sensorius builds the same hourly summary used for the other providers. + +The Caelus forecast card also shows temperature, humidity, and wind ranges and +hourly humidity and wind alongside precipitation chances. Both cards retain +their existing footprint; focus or scroll the synopsis to read longer text. +Missing provider values appear as dashes rather than a zero forecast. + The full-screen forecast is titled **Living Weather**, with the Caelus icon and “Created by Peace Hill Studios” beneath the title. The Biodynamic Calendar includes this credit in the central calendar icon. The settings menu displays diff --git a/sensorius/__init__.py b/sensorius/__init__.py index 9a9e649..d06c6ca 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.253.1" +__version__ = "v0.26.253.5" diff --git a/sensorius/saiHtml.py b/sensorius/saiHtml.py index 60380ae..eddd3f9 100644 --- a/sensorius/saiHtml.py +++ b/sensorius/saiHtml.py @@ -1751,7 +1751,7 @@ def _status_color_hex(status: str) -> str: yield "#weatherForecastBox .astro-title{width:100%;text-align:center;color:var(--forecast-ink);text-shadow:0 1px 2px rgba(0,0,0,.24);}" yield ".forecast-status{font-size:.55rem;line-height:1.1;text-align:center;color:var(--forecast-muted);min-height:1.1em;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;}" yield ".forecast-current{border:1px solid var(--forecast-border);border-radius:8px;background:var(--forecast-panel);padding:.42rem .48rem;display:flex;flex-direction:column;gap:.3rem;min-width:0;backdrop-filter:blur(3px);}" - yield ".forecast-current-summary{font-size:.68rem;line-height:1.16;color:var(--forecast-ink);text-align:center;min-height:2.35em;overflow-wrap:anywhere;}" + yield ".forecast-current-summary{font-size:.68rem;line-height:1.16;color:var(--forecast-ink);text-align:center;height:2.35em;overflow:auto;overflow-wrap:anywhere;}" yield ".forecast-current-grid{display:grid;grid-template-columns:auto minmax(0,1fr);gap:.15rem .4rem;align-items:start;font-size:.64rem;line-height:1.12;}" yield ".forecast-current-grid dt{font-weight:700;color:var(--forecast-muted);margin:0;}" yield ".forecast-current-grid dd{margin:0;color:var(--forecast-ink);overflow-wrap:anywhere;}" @@ -1946,7 +1946,7 @@ def _status_color_hex(status: str) -> str: yield " " yield "
" yield "Today’s forecast
{{ forecast.synopsis }}
+Hours 1–{{ 8 if hour_count > 8 else hour_count }} of {{ hour_count }}
@@ -91,7 +97,7 @@