@@ -305,7 +305,7 @@ window.Page_poison = (() => {
- ${typ.icon} ${typ.label}
+ ${UI.icon(typ.icon)} ${typ.label}
${r.bestaetigt ? '✅ Bestätigt' : ''}
@@ -333,7 +333,7 @@ window.Page_poison = (() => {
`;
- UI.modal.open({ title: `${typ.icon} Giftköder-Meldung`, body });
+ UI.modal.open({ title: `${UI.icon(typ.icon)} Giftköder-Meldung`, body });
document.getElementById('detail-confirm')?.addEventListener('click', async () => {
try {
@@ -423,8 +423,8 @@ window.Page_poison = (() => {
}
const typOpts = Object.entries(TYPEN)
- .map(([val, { icon, label }]) =>
- `
`)
+ .map(([val, { label }]) =>
+ `
`)
.join('');
const body = `
diff --git a/backend/static/js/pages/trainingsplaene.js b/backend/static/js/pages/trainingsplaene.js
index e22c707..525444c 100644
--- a/backend/static/js/pages/trainingsplaene.js
+++ b/backend/static/js/pages/trainingsplaene.js
@@ -130,15 +130,16 @@ window.Page_trainingsplaene = (() => {
// ----------------------------------------------------------
function _renderPlanSelector() {
const plans = [
- { id: 'welpe', label: '🐶 Welpe', sub: '0–6 Monate' },
- { id: 'junior', label: '🐕 Junior', sub: '6–18 Monate' },
- { id: 'erwachsen',label: '🦮 Erwachsener Hund', sub: 'Grund- & Aufbaukurs' },
+ { id: 'welpe', label: 'Welpe', icon: 'dog', sub: '0–6 Monate' },
+ { id: 'junior', label: 'Junior', icon: 'dog', sub: '6–18 Monate' },
+ { id: 'erwachsen',label: 'Erwachsener Hund', icon: 'dog', sub: 'Grund- & Aufbaukurs' },
];
const btns = plans.map(p => `
`).join('');
return `
${btns}
`;
diff --git a/backend/static/js/pages/uebungen.js b/backend/static/js/pages/uebungen.js
index 0d8e48a..3455c9f 100644
--- a/backend/static/js/pages/uebungen.js
+++ b/backend/static/js/pages/uebungen.js
@@ -606,7 +606,8 @@ window.Page_uebungen = (() => {
'entdecken': { label: 'Auffrischen',bg: 'var(--c-primary-subtle)', border: 'var(--c-primary-light)', text: 'var(--c-primary)', icon: 'clock' },
'levelup': { label: 'Nächster Level', bg: 'rgba(234,179,8,0.10)', border: 'rgba(234,179,8,0.30)', text: '#facc15', icon: 'graduation-cap' },
};
- const TREND_ICON = { improving: '↑', declining: '↓', stable: '→', new: '★' };
+ const _phSm = n => `
`;
+ const TREND_ICON = { improving: _phSm('trend-up'), declining: _phSm('trend-down'), stable: _phSm('arrow-right'), new: _phSm('star') };
const TREND_COLOR = { improving: 'var(--c-success,#16a34a)', declining: '#dc2626', stable: 'var(--c-text-secondary)', new: 'var(--c-primary)' };
const cards = recs.map((r, i) => {
@@ -918,7 +919,8 @@ window.Page_uebungen = (() => {
const color = avg >= 75 ? '#15803d' : avg >= 50 ? '#c2410c' : '#dc2626';
const bg = avg >= 75 ? 'rgba(22,163,74,0.10)' : avg >= 50 ? 'rgba(234,88,12,0.10)' : 'rgba(220,38,38,0.10)';
const border = avg >= 75 ? 'rgba(22,163,74,0.30)' : avg >= 50 ? 'rgba(234,88,12,0.30)' : 'rgba(220,38,38,0.30)';
- const arrow = { improving: '↑', declining: '↓', stable: '→', new: '' }[stat.trend] || '';
+ const _phXs = n => `
`;
+ const arrow = { improving: _phXs('trend-up'), declining: _phXs('trend-down'), stable: _phXs('arrow-right'), new: '' }[stat.trend] || '';
return `
diff --git a/backend/static/sw.js b/backend/static/sw.js
index 7015a07..7b2355e 100644
--- a/backend/static/sw.js
+++ b/backend/static/sw.js
@@ -3,7 +3,7 @@
Offline-Cache + Push Notifications + Tile-Cache
============================================================ */
-const CACHE_VERSION = 'by-v414';
+const CACHE_VERSION = 'by-v415';
const CACHE_STATIC = `${CACHE_VERSION}-static`;
const CACHE_TILES = 'ban-yaro-tiles-v1'; // bleibt über SW-Updates erhalten