diff --git a/.github/workflows/docker-publish.yml b/.github/workflows/docker-publish.yml
index 3700f17..03aa302 100644
--- a/.github/workflows/docker-publish.yml
+++ b/.github/workflows/docker-publish.yml
@@ -2,7 +2,9 @@ name: Build and publish Docker container
on:
push:
- branches: [ "master" ]
+ branches:
+ - master
+ - develop
# Publish semver tags as releases.
tags: [ 'v*.*.*' ]
pull_request:
@@ -37,11 +39,17 @@ jobs:
username: ${{ github.actor }}
password: ${{ secrets.GITHUB_TOKEN }}
- - name: Extract Docker metadata
+ - name: Docker meta
id: meta
- uses: docker/metadata-action@c1e51972afc2121e065aed6d45c65596fe445f3f # v5.8.0
+ uses: docker/metadata-action@v5
with:
images: ${{ env.REGISTRY }}/${{ env.IMAGE_NAME }}
+ tags: |
+ type=semver,pattern={{raw}},enable={{is_default_branch}}
+ type=ref,event=branch
+ type=ref,event=tag
+ type=ref,event=pr
+ type=raw,value=latest,enable={{is_default_branch}}
- name: Build and push Docker image
id: build-and-push
diff --git a/app/lib/jinja.py b/app/lib/jinja.py
index 2e7611c..1164ccb 100644
--- a/app/lib/jinja.py
+++ b/app/lib/jinja.py
@@ -153,4 +153,9 @@ def now():
return arrow.utcnow()
+@jglobal()
+def js_color(name):
+ return Markup(f'')
+
+
jglobal()(users_enabled)
diff --git a/app/screens/openweather/jinja.py b/app/screens/openweather/jinja.py
index 406ae61..530c6c2 100644
--- a/app/screens/openweather/jinja.py
+++ b/app/screens/openweather/jinja.py
@@ -94,6 +94,13 @@ def weather_convert(value, to_units, what, d=2, from_units='standard'):
return Markup(f'{value} {suffix}')
+@jfilter()
+@jglobal()
+def wi(name, extra_class=''):
+ url = url_for('fruitstand_openweather.static', filename=f'images/{name}.svg')
+ return Markup(f'')
+
+
@jglobal()
def get_conditions_image(forecast):
"""\
@@ -330,4 +337,4 @@ def get_conditions_image(forecast):
else:
image_name = 'wi-na'
- return url_for('fruitstand_openweather.static', filename=f'images/{image_name}.svg')
+ return image_name
diff --git a/app/screens/openweather/src/js/openweather.js b/app/screens/openweather/src/js/openweather.js
index 865b57d..14113ce 100644
--- a/app/screens/openweather/src/js/openweather.js
+++ b/app/screens/openweather/src/js/openweather.js
@@ -56,7 +56,7 @@ import Chart from 'chart.js/auto'
},
tooltip: {
enabled: false
- }
+ },
},
scales: {
x: {
@@ -117,7 +117,7 @@ import Chart from 'chart.js/auto'
data: window.graph_data.map(row => row.temp),
yAxisID: 'yTemp',
pointStyle: false,
- borderColor: '#000',
+ borderColor: js_color('.openweather.graph.temperature', 'color'),
borderWidth: 2,
order: 1,
},
@@ -126,7 +126,7 @@ import Chart from 'chart.js/auto'
label: 'Precipitation',
data: window.graph_data.map(row => row.precip * 100),
yAxisID: 'yPercent',
- backgroundColor: bgPattern(),
+ backgroundColor: js_color('.openweather.graph.precipitation', 'color', bgPattern()),
order: 2,
},
{
@@ -135,8 +135,8 @@ import Chart from 'chart.js/auto'
data: window.graph_data.map(row => row.humid * 100),
yAxisID: 'yPercent',
showLine: false,
- pointBackgroundColor: '#fff',
- pointBorderColor: '#000',
+ pointBackgroundColor: js_color('.openweather.graph.humidity', 'background-color', '#fff'),
+ pointBorderColor: js_color('.openweather.graph.humidity', 'color'),
order: 0,
},
]
diff --git a/app/screens/openweather/src/sass/_graph.scss b/app/screens/openweather/src/sass/_graph.scss
new file mode 100644
index 0000000..40301ca
--- /dev/null
+++ b/app/screens/openweather/src/sass/_graph.scss
@@ -0,0 +1,44 @@
+@use "colors" as *;
+
+// default - hide so not used
+#js_colors {
+ .openweather {
+ &.graph {
+ visibility: hidden;
+ }
+ }
+}
+
+.cs-3b, .cs-3b7 {
+ #js_colors {
+ .openweather {
+ &.graph {
+ visibility: visible;
+ &.humidity {
+ color: $c-3b-black;
+ background-color: $c-3b-green;
+ }
+ &.precipitation {
+ color: $c-3b-blue;
+ }
+ }
+ }
+ }
+}
+
+.cs-16b, .cs-full {
+ #js_colors {
+ .openweather {
+ &.graph {
+ visibility: visible;
+ &.humidity {
+ color: #444;
+ background-color: #62e941;
+ }
+ &.precipitation {
+ color: #4f8eff;
+ }
+ }
+ }
+ }
+}
diff --git a/app/screens/openweather/src/sass/_icons.scss b/app/screens/openweather/src/sass/_icons.scss
new file mode 100644
index 0000000..54f265a
--- /dev/null
+++ b/app/screens/openweather/src/sass/_icons.scss
@@ -0,0 +1,166 @@
+@use "colors" as *;
+
+svg {
+ // Default fill; suitable for B&W
+ path {
+ fill: black;
+ }
+}
+
+.cs-3b, .cs-3b7 {
+ svg {
+ #biohazard, #error, #radiation, #fire, #meteor, #flag-gale-1, #flag-gale-2, #flag-hurricane-1, #flag-hurricane-2, #flag-storm-1, #flag-small-craft-advisory-1, #thermometer-inner {
+ fill: $c-3b-red;
+ }
+ #error-text, #warning-text, #eye-pupil, #text, #line, #indicator, #horizon {
+ fill: $c-3b-black;
+ }
+ #eye {
+ fill: $c-3b-green;
+ }
+ #warning, #sun, #lightning, #star {
+ fill: $c-3b-yellow;
+ stroke: black;
+ stroke-width: 2%;
+ }
+ #wind, #dust2, #smoke {
+ fill: $c-3b-black;
+ }
+ #cloud, #hail {
+ fill: $c-3b-black;
+ }
+ #cloud2 {
+ fill: $c-3b-black;
+ }
+ #fog {
+ fill: $c-3b-blue;
+ }
+ #rain {
+ fill: $c-3b-blue;
+ }
+ #haze, #dust, #sand {
+ fill: $c-3b-black;
+ }
+ #lightning2 {
+ fill: $c-3b-yellow;
+ }
+ #sleet {
+ fill: $c-3b-blue;
+ }
+ #snow {
+ fill: $c-3b-blue;
+ }
+ #snowflake {
+ fill: $c-3b-blue;
+ }
+ #fire2 {
+ fill: $c-3b-red;
+ }
+ #water {
+ fill: $c-3b-blue;
+ }
+ #heat {
+ fill: $c-3b-red;
+ }
+ #hurricane {
+ fill: $c-3b-blue;
+ }
+ #moon {
+ fill: $c-3b-black;
+ }
+ #smog {
+ fill: $c-3b-black;
+ }
+ #alien {
+ fill: $c-3b-green;
+ }
+ }
+ .stats-item {
+ .wi-sunrise, .wi-sunset, .wi-day-sunny {
+ background: $c-3b-black;
+ border-radius: 50%;
+ #horizon {
+ fill: $c-3b-white;
+ }
+ }
+ svg {
+ #warning, #sun, #lightning, #star {
+ stroke-width: 0;
+ }
+ }
+ }
+}
+
+.cs-3b7 {
+ svg {
+ #haze, #dust, #sand, #wind {
+ fill: $c-3b7-dkyellow;
+ }
+ }
+}
+
+.cs-16b, .cs-full {
+ svg {
+ #biohazard, #error, #radiation, #fire, #meteor, #flag-gale-1, #flag-gale-2, #flag-hurricane-1, #flag-hurricane-2, #flag-storm-1, #flag-small-craft-advisory-1, #thermometer-inner {
+ fill: red;
+ }
+ #error-text, #warning-text, #eye, #eye-pupil, #text, #line, #indicator, #horizon {
+ fill: black;
+ }
+ #warning, #sun, #lightning, #star {
+ fill: #f6dd38;
+ }
+
+ #wind, #dust2, #smoke {
+ fill: gray;
+ }
+ #cloud, #hail {
+ fill: #ccc;
+ }
+ #cloud2 {
+ fill: #ddd;
+ }
+ #fog {
+ fill: #888;
+ }
+ #rain {
+ fill: #67b1ff;
+ }
+ #haze, #dust, #sand {
+ fill: tan;
+ }
+ #lightning2 {
+ fill: #f6d964;
+ }
+ #sleet {
+ fill: #4a5141;
+ }
+ #snow {
+ fill: #b8d4ff;
+ }
+ #snowflake {
+ fill: #7294ff;
+ }
+ #fire2 {
+ fill: #5f1604;
+ }
+ #water {
+ fill: #0031f7;
+ }
+ #heat {
+ fill: #fc5146;
+ }
+ #hurricane {
+ fill: blue;
+ }
+ #moon {
+ fill: #aae5ff;
+ }
+ #smog {
+ fill: #7f5e49;
+ }
+ #alien {
+ fill: green;
+ }
+ }
+}
\ No newline at end of file
diff --git a/app/screens/openweather/src/sass/openweather.scss b/app/screens/openweather/src/sass/openweather.scss
index 410fac2..5c2fcdb 100644
--- a/app/screens/openweather/src/sass/openweather.scss
+++ b/app/screens/openweather/src/sass/openweather.scss
@@ -1,4 +1,6 @@
@use "breakpoints" as *;
+@use "icons";
+@use "graph";
#weather {
display: block;
@@ -7,12 +9,16 @@
box-sizing: border-box;
padding: 0.5em;
+ .icon {
+ width: auto;
+ }
+
// Tiny screens
.row-2, .loc-forecast {
display: none;
}
.current {
- img {
+ .icon {
display: none;
}
.details {
@@ -46,7 +52,7 @@
.current {
display: grid;
grid-template-columns: repeat(2, 1fr);
- img {
+ .icon {
display: block;
}
.temp {
@@ -82,7 +88,7 @@
}
@include bp(xs) {
- .row-1 .loc-forecast .forecast-item img {
+ .row-1 .loc-forecast .forecast-item .icon {
max-height: 3em;
}
}
@@ -101,7 +107,7 @@
.current {
display: flex;
flex-direction: column;
- img {
+ .icon {
max-height: 4em;
}
.temp {
@@ -162,7 +168,7 @@
.icon {
display: inline-block;
vertical-align: middle;
- max-height: 1.5em;
+ max-height: 1.65em;
}
.stats-data {
display: inline-block;
@@ -191,7 +197,7 @@
display: grid;
grid-template-columns: repeat(2, 1fr);
align-items: center;
- img {
+ .icon {
max-height: unset;
}
.temp {
diff --git a/app/screens/openweather/static/css/openweather.css b/app/screens/openweather/static/css/openweather.css
index 2b8f298..c170562 100644
--- a/app/screens/openweather/static/css/openweather.css
+++ b/app/screens/openweather/static/css/openweather.css
@@ -1 +1 @@
-#weather{display:block;width:100%;height:100%;box-sizing:border-box;padding:.5em}#weather .row-2,#weather .loc-forecast{display:none}#weather .current img{display:none}#weather .current .details .temp{display:block;text-align:center;align-items:flex-end}#weather .current .details .temp .temp-number{font-size:4em;line-height:.85em}#weather .current .details .feelslike{text-align:center}#weather .current .details .feelslike .temp-prefix{font-size:.8em}@media(min-width: 240px){#weather .row-1{width:100%;height:100%;display:flex;flex-direction:column;justify-content:space-between;text-align:center;align-items:center}#weather .row-1 .current{display:grid;grid-template-columns:repeat(2, 1fr)}#weather .row-1 .current img{display:block}#weather .row-1 .current .temp .temp-number{line-height:unset}#weather .row-1 .loc-forecast{width:100%;display:flex;flex-direction:column;justify-content:space-between}#weather .row-1 .loc-forecast .location{display:none}#weather .row-1 .loc-forecast .date{font-size:.8em}#weather .row-1 .loc-forecast .forecast{width:100%;display:flex;justify-content:space-between}#weather .row-1 .loc-forecast .forecast .forecast-item{flex:1 1 0px}#weather .row-1 .loc-forecast .forecast .forecast-item .details{display:none}}@media(min-width: 320px){#weather .row-1 .loc-forecast .forecast-item img{max-height:3em}}@media(min-width: 480px){#weather{display:flex;flex-direction:column;max-height:100%}#weather .row-1{display:grid;grid-template-columns:1fr 4fr;gap:1em;height:unset;text-align:left;align-items:flex-start}#weather .row-1 .current{display:flex;flex-direction:column}#weather .row-1 .current img{max-height:4em}#weather .row-1 .current .temp .temp-number{font-size:3em}#weather .row-1 .current .feelslike{display:none}#weather .row-1 .loc-forecast{display:grid;grid-template-columns:repeat(2, 1fr);grid-template-areas:"loc date" "fc fc"}#weather .row-1 .loc-forecast .location{display:block;grid-area:loc;font-size:.9em}#weather .row-1 .loc-forecast .date{grid-area:date;font-size:.9em}#weather .row-1 .loc-forecast .forecast{grid-area:fc;text-align:center}#weather .row-1 .loc-forecast .forecast .forecast-item .details{display:block;font-size:.8em}#weather .row-2{display:block;flex:1}#weather .row-2 .stats{display:none}#weather .row-2 .graph{width:100%;height:100%}}@media(min-width: 600px){#weather .row-2{display:grid;grid-template-columns:1fr 3fr}#weather .row-2 .stats{display:block}#weather .row-2 .stats .stats-item .icon{display:inline-block;vertical-align:middle;max-height:1.5em}#weather .row-2 .stats .stats-item .stats-data{display:inline-block}#weather .row-2 .stats .stats-item .title{display:none}#weather .row-2 .stats .stats-item .details{white-space:nowrap}#weather .row-2 .stats .stats-item .details .icon{display:inline;max-height:.8em}}@media(min-width: 800px){#weather{row-gap:1em}#weather .row-1{grid-template-columns:1fr 2fr;align-items:center}#weather .row-1 .current{display:grid;grid-template-columns:repeat(2, 1fr);align-items:center}#weather .row-1 .current img{max-height:unset}#weather .row-1 .current .temp{white-space:nowrap}#weather .row-1 .current .temp .temp-number{font-size:6em;line-height:.8em}#weather .row-1 .current .feelslike{display:block}#weather .row-1 .loc-forecast{align-items:first baseline;column-gap:1em;row-gap:.5em}#weather .row-1 .loc-forecast .location{font-size:1.5em;justify-self:right}#weather .row-1 .loc-forecast .date{font-size:1.2em}#weather .row-2{grid-template-columns:2fr 3fr}#weather .row-2 .stats{display:grid;grid-template-columns:repeat(2, 1fr)}#weather .row-2 .stats .stats-item{display:grid;grid-template-columns:1fr 4fr}#weather .row-2 .stats .stats-item .title{display:block;font-size:.9em}#weather .row-2 .stats .stats-item .details{font-size:1.1em}#weather .row-2 .stats .stats-item .details .suffix{font-size:.8em}#weather .row-2 .stats .stats-item>.icon{max-height:1.7em}}
+svg path{fill:#000}.cs-3b svg #biohazard,.cs-3b svg #error,.cs-3b svg #radiation,.cs-3b svg #fire,.cs-3b svg #meteor,.cs-3b svg #flag-gale-1,.cs-3b svg #flag-gale-2,.cs-3b svg #flag-hurricane-1,.cs-3b svg #flag-hurricane-2,.cs-3b svg #flag-storm-1,.cs-3b svg #flag-small-craft-advisory-1,.cs-3b svg #thermometer-inner,.cs-3b7 svg #biohazard,.cs-3b7 svg #error,.cs-3b7 svg #radiation,.cs-3b7 svg #fire,.cs-3b7 svg #meteor,.cs-3b7 svg #flag-gale-1,.cs-3b7 svg #flag-gale-2,.cs-3b7 svg #flag-hurricane-1,.cs-3b7 svg #flag-hurricane-2,.cs-3b7 svg #flag-storm-1,.cs-3b7 svg #flag-small-craft-advisory-1,.cs-3b7 svg #thermometer-inner{fill:red}.cs-3b svg #error-text,.cs-3b svg #warning-text,.cs-3b svg #eye-pupil,.cs-3b svg #text,.cs-3b svg #line,.cs-3b svg #indicator,.cs-3b svg #horizon,.cs-3b7 svg #error-text,.cs-3b7 svg #warning-text,.cs-3b7 svg #eye-pupil,.cs-3b7 svg #text,.cs-3b7 svg #line,.cs-3b7 svg #indicator,.cs-3b7 svg #horizon{fill:#000}.cs-3b svg #eye,.cs-3b7 svg #eye{fill:lime}.cs-3b svg #warning,.cs-3b svg #sun,.cs-3b svg #lightning,.cs-3b svg #star,.cs-3b7 svg #warning,.cs-3b7 svg #sun,.cs-3b7 svg #lightning,.cs-3b7 svg #star{fill:#ff0;stroke:#000;stroke-width:2%}.cs-3b svg #wind,.cs-3b svg #dust2,.cs-3b svg #smoke,.cs-3b7 svg #wind,.cs-3b7 svg #dust2,.cs-3b7 svg #smoke{fill:#000}.cs-3b svg #cloud,.cs-3b svg #hail,.cs-3b7 svg #cloud,.cs-3b7 svg #hail{fill:#000}.cs-3b svg #cloud2,.cs-3b7 svg #cloud2{fill:#000}.cs-3b svg #fog,.cs-3b7 svg #fog{fill:blue}.cs-3b svg #rain,.cs-3b7 svg #rain{fill:blue}.cs-3b svg #haze,.cs-3b svg #dust,.cs-3b svg #sand,.cs-3b7 svg #haze,.cs-3b7 svg #dust,.cs-3b7 svg #sand{fill:#000}.cs-3b svg #lightning2,.cs-3b7 svg #lightning2{fill:#ff0}.cs-3b svg #sleet,.cs-3b7 svg #sleet{fill:blue}.cs-3b svg #snow,.cs-3b7 svg #snow{fill:blue}.cs-3b svg #snowflake,.cs-3b7 svg #snowflake{fill:blue}.cs-3b svg #fire2,.cs-3b7 svg #fire2{fill:red}.cs-3b svg #water,.cs-3b7 svg #water{fill:blue}.cs-3b svg #heat,.cs-3b7 svg #heat{fill:red}.cs-3b svg #hurricane,.cs-3b7 svg #hurricane{fill:blue}.cs-3b svg #moon,.cs-3b7 svg #moon{fill:#000}.cs-3b svg #smog,.cs-3b7 svg #smog{fill:#000}.cs-3b svg #alien,.cs-3b7 svg #alien{fill:lime}.cs-3b .stats-item .wi-sunrise,.cs-3b .stats-item .wi-sunset,.cs-3b .stats-item .wi-day-sunny,.cs-3b7 .stats-item .wi-sunrise,.cs-3b7 .stats-item .wi-sunset,.cs-3b7 .stats-item .wi-day-sunny{background:#000;border-radius:50%}.cs-3b .stats-item .wi-sunrise #horizon,.cs-3b .stats-item .wi-sunset #horizon,.cs-3b .stats-item .wi-day-sunny #horizon,.cs-3b7 .stats-item .wi-sunrise #horizon,.cs-3b7 .stats-item .wi-sunset #horizon,.cs-3b7 .stats-item .wi-day-sunny #horizon{fill:#fff}.cs-3b .stats-item svg #warning,.cs-3b .stats-item svg #sun,.cs-3b .stats-item svg #lightning,.cs-3b .stats-item svg #star,.cs-3b7 .stats-item svg #warning,.cs-3b7 .stats-item svg #sun,.cs-3b7 .stats-item svg #lightning,.cs-3b7 .stats-item svg #star{stroke-width:0}.cs-3b7 svg #haze,.cs-3b7 svg #dust,.cs-3b7 svg #sand,.cs-3b7 svg #wind{fill:orange}.cs-16b svg #biohazard,.cs-16b svg #error,.cs-16b svg #radiation,.cs-16b svg #fire,.cs-16b svg #meteor,.cs-16b svg #flag-gale-1,.cs-16b svg #flag-gale-2,.cs-16b svg #flag-hurricane-1,.cs-16b svg #flag-hurricane-2,.cs-16b svg #flag-storm-1,.cs-16b svg #flag-small-craft-advisory-1,.cs-16b svg #thermometer-inner,.cs-full svg #biohazard,.cs-full svg #error,.cs-full svg #radiation,.cs-full svg #fire,.cs-full svg #meteor,.cs-full svg #flag-gale-1,.cs-full svg #flag-gale-2,.cs-full svg #flag-hurricane-1,.cs-full svg #flag-hurricane-2,.cs-full svg #flag-storm-1,.cs-full svg #flag-small-craft-advisory-1,.cs-full svg #thermometer-inner{fill:red}.cs-16b svg #error-text,.cs-16b svg #warning-text,.cs-16b svg #eye,.cs-16b svg #eye-pupil,.cs-16b svg #text,.cs-16b svg #line,.cs-16b svg #indicator,.cs-16b svg #horizon,.cs-full svg #error-text,.cs-full svg #warning-text,.cs-full svg #eye,.cs-full svg #eye-pupil,.cs-full svg #text,.cs-full svg #line,.cs-full svg #indicator,.cs-full svg #horizon{fill:#000}.cs-16b svg #warning,.cs-16b svg #sun,.cs-16b svg #lightning,.cs-16b svg #star,.cs-full svg #warning,.cs-full svg #sun,.cs-full svg #lightning,.cs-full svg #star{fill:#f6dd38}.cs-16b svg #wind,.cs-16b svg #dust2,.cs-16b svg #smoke,.cs-full svg #wind,.cs-full svg #dust2,.cs-full svg #smoke{fill:gray}.cs-16b svg #cloud,.cs-16b svg #hail,.cs-full svg #cloud,.cs-full svg #hail{fill:#ccc}.cs-16b svg #cloud2,.cs-full svg #cloud2{fill:#ddd}.cs-16b svg #fog,.cs-full svg #fog{fill:#888}.cs-16b svg #rain,.cs-full svg #rain{fill:#67b1ff}.cs-16b svg #haze,.cs-16b svg #dust,.cs-16b svg #sand,.cs-full svg #haze,.cs-full svg #dust,.cs-full svg #sand{fill:tan}.cs-16b svg #lightning2,.cs-full svg #lightning2{fill:#f6d964}.cs-16b svg #sleet,.cs-full svg #sleet{fill:#4a5141}.cs-16b svg #snow,.cs-full svg #snow{fill:#b8d4ff}.cs-16b svg #snowflake,.cs-full svg #snowflake{fill:#7294ff}.cs-16b svg #fire2,.cs-full svg #fire2{fill:#5f1604}.cs-16b svg #water,.cs-full svg #water{fill:#0031f7}.cs-16b svg #heat,.cs-full svg #heat{fill:#fc5146}.cs-16b svg #hurricane,.cs-full svg #hurricane{fill:blue}.cs-16b svg #moon,.cs-full svg #moon{fill:#aae5ff}.cs-16b svg #smog,.cs-full svg #smog{fill:#7f5e49}.cs-16b svg #alien,.cs-full svg #alien{fill:green}#js_colors .openweather.graph{visibility:hidden}.cs-3b #js_colors .openweather.graph,.cs-3b7 #js_colors .openweather.graph{visibility:visible}.cs-3b #js_colors .openweather.graph.humidity,.cs-3b7 #js_colors .openweather.graph.humidity{color:#000;background-color:lime}.cs-3b #js_colors .openweather.graph.precipitation,.cs-3b7 #js_colors .openweather.graph.precipitation{color:blue}.cs-16b #js_colors .openweather.graph,.cs-full #js_colors .openweather.graph{visibility:visible}.cs-16b #js_colors .openweather.graph.humidity,.cs-full #js_colors .openweather.graph.humidity{color:#444;background-color:#62e941}.cs-16b #js_colors .openweather.graph.precipitation,.cs-full #js_colors .openweather.graph.precipitation{color:#4f8eff}#weather{display:block;width:100%;height:100%;box-sizing:border-box;padding:.5em}#weather .icon{width:auto}#weather .row-2,#weather .loc-forecast{display:none}#weather .current .icon{display:none}#weather .current .details .temp{display:block;text-align:center;align-items:flex-end}#weather .current .details .temp .temp-number{font-size:4em;line-height:.85em}#weather .current .details .feelslike{text-align:center}#weather .current .details .feelslike .temp-prefix{font-size:.8em}@media(min-width: 240px){#weather .row-1{width:100%;height:100%;display:flex;flex-direction:column;justify-content:space-between;text-align:center;align-items:center}#weather .row-1 .current{display:grid;grid-template-columns:repeat(2, 1fr)}#weather .row-1 .current .icon{display:block}#weather .row-1 .current .temp .temp-number{line-height:unset}#weather .row-1 .loc-forecast{width:100%;display:flex;flex-direction:column;justify-content:space-between}#weather .row-1 .loc-forecast .location{display:none}#weather .row-1 .loc-forecast .date{font-size:.8em}#weather .row-1 .loc-forecast .forecast{width:100%;display:flex;justify-content:space-between}#weather .row-1 .loc-forecast .forecast .forecast-item{flex:1 1 0px}#weather .row-1 .loc-forecast .forecast .forecast-item .details{display:none}}@media(min-width: 320px){#weather .row-1 .loc-forecast .forecast-item .icon{max-height:3em}}@media(min-width: 480px){#weather{display:flex;flex-direction:column;max-height:100%}#weather .row-1{display:grid;grid-template-columns:1fr 4fr;gap:1em;height:unset;text-align:left;align-items:flex-start}#weather .row-1 .current{display:flex;flex-direction:column}#weather .row-1 .current .icon{max-height:4em}#weather .row-1 .current .temp .temp-number{font-size:3em}#weather .row-1 .current .feelslike{display:none}#weather .row-1 .loc-forecast{display:grid;grid-template-columns:repeat(2, 1fr);grid-template-areas:"loc date" "fc fc"}#weather .row-1 .loc-forecast .location{display:block;grid-area:loc;font-size:.9em}#weather .row-1 .loc-forecast .date{grid-area:date;font-size:.9em}#weather .row-1 .loc-forecast .forecast{grid-area:fc;text-align:center}#weather .row-1 .loc-forecast .forecast .forecast-item .details{display:block;font-size:.8em}#weather .row-2{display:block;flex:1}#weather .row-2 .stats{display:none}#weather .row-2 .graph{width:100%;height:100%}}@media(min-width: 600px){#weather .row-2{display:grid;grid-template-columns:1fr 3fr}#weather .row-2 .stats{display:block}#weather .row-2 .stats .stats-item .icon{display:inline-block;vertical-align:middle;max-height:1.65em}#weather .row-2 .stats .stats-item .stats-data{display:inline-block}#weather .row-2 .stats .stats-item .title{display:none}#weather .row-2 .stats .stats-item .details{white-space:nowrap}#weather .row-2 .stats .stats-item .details .icon{display:inline;max-height:.8em}}@media(min-width: 800px){#weather{row-gap:1em}#weather .row-1{grid-template-columns:1fr 2fr;align-items:center}#weather .row-1 .current{display:grid;grid-template-columns:repeat(2, 1fr);align-items:center}#weather .row-1 .current .icon{max-height:unset}#weather .row-1 .current .temp{white-space:nowrap}#weather .row-1 .current .temp .temp-number{font-size:6em;line-height:.8em}#weather .row-1 .current .feelslike{display:block}#weather .row-1 .loc-forecast{align-items:first baseline;column-gap:1em;row-gap:.5em}#weather .row-1 .loc-forecast .location{font-size:1.5em;justify-self:right}#weather .row-1 .loc-forecast .date{font-size:1.2em}#weather .row-2{grid-template-columns:2fr 3fr}#weather .row-2 .stats{display:grid;grid-template-columns:repeat(2, 1fr)}#weather .row-2 .stats .stats-item{display:grid;grid-template-columns:1fr 4fr}#weather .row-2 .stats .stats-item .title{display:block;font-size:.9em}#weather .row-2 .stats .stats-item .details{font-size:1.1em}#weather .row-2 .stats .stats-item .details .suffix{font-size:.8em}#weather .row-2 .stats .stats-item>.icon{max-height:1.7em}}
diff --git a/app/screens/openweather/static/images/air_filter.svg b/app/screens/openweather/static/images/air_filter.svg
index 7b62f25..79fd60a 100644
--- a/app/screens/openweather/static/images/air_filter.svg
+++ b/app/screens/openweather/static/images/air_filter.svg
@@ -8,7 +8,7 @@
version="1.1"
id="svg12"
sodipodi:docname="air_filter.svg"
- inkscape:version="1.1.2 (0a00cf5339, 2022-02-04, custom)"
+ inkscape:version="1.4.3 (0d15f75, 2025-12-25)"
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
xmlns="http://www.w3.org/2000/svg"
@@ -24,37 +24,34 @@
inkscape:pageopacity="0.0"
inkscape:pagecheckerboard="0"
showgrid="false"
- inkscape:zoom="20.603629"
- inkscape:cx="7.7170871"
- inkscape:cy="13.78398"
- inkscape:window-width="1920"
- inkscape:window-height="1025"
- inkscape:window-x="0"
- inkscape:window-y="24"
+ inkscape:zoom="32"
+ inkscape:cx="13.609375"
+ inkscape:cy="19.4375"
+ inkscape:window-width="2560"
+ inkscape:window-height="1387"
+ inkscape:window-x="1352"
+ inkscape:window-y="25"
inkscape:window-maximized="1"
- inkscape:current-layer="svg12" />
-