From e9ec610f1c0bcac8fba5b3a432ffe2cf5959c3c0 Mon Sep 17 00:00:00 2001 From: Vitali Date: Sat, 25 Jul 2026 10:43:02 +0700 Subject: [PATCH 1/2] feat(web): scrollable Forecast log with fixed height Cap the log panel at ~216px with a thin themed scrollbar so a long forecast history does not stretch the page. Co-Authored-By: Claude Opus 4.8 --- WeatherPredictor/web_page.h | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/WeatherPredictor/web_page.h b/WeatherPredictor/web_page.h index ee53b90..e306cdf 100644 --- a/WeatherPredictor/web_page.h +++ b/WeatherPredictor/web_page.h @@ -103,7 +103,11 @@ static const char INDEX_HTML[] PROGMEM = R"HTML( .cap{color:var(--muted); font-size:.74rem; letter-spacing:.06em} /* Forecast log */ - .log{list-style:none; margin:2px 0 0; padding:0} + .log{list-style:none; margin:2px 0 0; padding:0 8px 0 0; max-height:216px; overflow-y:auto; + scrollbar-width:thin; scrollbar-color:var(--line) transparent} + .log::-webkit-scrollbar{width:8px} + .log::-webkit-scrollbar-thumb{background:var(--line); border-radius:8px} + .log::-webkit-scrollbar-track{background:transparent} .log li{display:flex; align-items:center; gap:13px; padding:12px 0; border-top:1px solid var(--line)} .log li:first-child{border-top:0} .log .dot{width:9px; height:9px; border-radius:50%; flex:0 0 auto} From 98e8170b8bdce1315bc9134c77374a642190bbbd Mon Sep 17 00:00:00 2001 From: Vitali Date: Sat, 25 Jul 2026 11:15:26 +0700 Subject: [PATCH 2/2] feat(web): RU/EN language toggle (Russian default) Client-side i18n: static labels via data-i18n, dial zone words, and the 26 Zambretti phrases + categories + trend words translated in the browser. Choice persists in localStorage. Device firmware unchanged (API stays English; TFT stays Latin). Co-Authored-By: Claude Opus 4.8 --- WeatherPredictor/web_page.h | 173 ++++++++++++++++++++++++++++-------- 1 file changed, 135 insertions(+), 38 deletions(-) diff --git a/WeatherPredictor/web_page.h b/WeatherPredictor/web_page.h index e306cdf..3a6b8e7 100644 --- a/WeatherPredictor/web_page.h +++ b/WeatherPredictor/web_page.h @@ -39,6 +39,11 @@ static const char INDEX_HTML[] PROGMEM = R"HTML( } .lede{color:var(--muted); font-size:.92rem; margin:8px 0 0} .lede b{color:var(--text); font-weight:600} + header{position:relative} + .lang{position:absolute; top:0; right:0; display:flex; gap:3px} + .lang button{padding:4px 9px; font-size:.72rem; font-weight:700; letter-spacing:.06em; font-family:var(--sans); + background:transparent; color:var(--muted); border:1px solid var(--line); border-radius:7px; cursor:pointer} + .lang button.on{background:var(--brass); color:#221a06; border-color:var(--brass)} .panel{ background:linear-gradient(180deg, var(--surface), #14203a); @@ -153,9 +158,10 @@ static const char INDEX_HTML[] PROGMEM = R"HTML(
-

Barometric Forecaster

-

Weather Predictor

-

Reading the sky by pressure alone, the Zambretti way — station at +

+

Barometric Forecaster

+

Weather Predictor

+

Reading the sky by pressure alone, the Zambretti way — station at 54.99°N, 82.87°E.

@@ -164,7 +170,7 @@ static const char INDEX_HTML[] PROGMEM = R"HTML(
---- - hPa · sea level + hPa · sea level

Reading the sky…

@@ -173,18 +179,18 @@ static const char INDEX_HTML[] PROGMEM = R"HTML(
-
Local time
--:--
-
Temperature
--
degrees celsius
-
3-hour move
+
Local time
--:--
+
Temperature
--
degrees celsius
+
3-hour move
-

Barograph

+

Barograph

- Pressure - Temperature + Pressure + Temperature
@@ -199,7 +205,7 @@ static const char INDEX_HTML[] PROGMEM = R"HTML(
-

Forecast log

+

Forecast log

    @@ -207,27 +213,27 @@ static const char INDEX_HTML[] PROGMEM = R"HTML(
    - Station settings Adjust + Station settings Adjust
    - +
    -
    -
    -
    -
    +
    +
    +
    +
    - +
    -
    Served from the station · works without internet
    +
    Served from the station · works without internet