diff --git a/CHANGELOG.md b/CHANGELOG.md index fcdc309..9b99252 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -7,6 +7,16 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 ## [Unreleased] +## [0.7.2] - 2026-04-04 + +### Accessibility +- Rename `#page-content` to `#main-content` so the existing skip-to-content link targets the semantic `
` landmark correctly +- Add `sr-only` priority labels to dashboard task items - screen readers now announce priority level instead of relying on color alone (WCAG 1.4.1) + +### Fixed +- Replace hardcoded hex values in greeting widget gradient with `--color-accent-active` / `--color-accent` tokens - dark mode now correctly themes the greeting banner +- Replace hardcoded `gap: 2px` with `--space-0h` token in greeting widget + ## [0.7.1] - 2026-04-04 ### Security diff --git a/package.json b/package.json index b061557..f4e323c 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "oikos", - "version": "0.7.1", + "version": "0.7.2", "description": "Self-hosted family planner - calendar, tasks, shopping, meal planning, budget and more. Private, open-source, no subscription.", "main": "server/index.js", "type": "module", diff --git a/public/pages/dashboard.js b/public/pages/dashboard.js index a13bcca..b355087 100644 --- a/public/pages/dashboard.js +++ b/public/pages/dashboard.js @@ -56,6 +56,13 @@ function formatDueDate(dateStr) { }; } +const PRIORITY_LABELS = () => ({ + urgent: t('tasks.priorityUrgent'), + high: t('tasks.priorityHigh'), + medium: t('tasks.priorityMedium'), + low: t('tasks.priorityLow'), +}); + const MEAL_LABELS = () => ({ breakfast: t('meals.typeBreakfast'), lunch: t('meals.typeLunch'), @@ -160,7 +167,8 @@ function renderUrgentTasks(tasks) { const due = formatDueDate(t.due_date); return `
-
+ + ${PRIORITY_LABELS()[t.priority] ?? t.priority}
${esc(t.title)}
${due ? `
${due.text}
` : ''} diff --git a/public/router.js b/public/router.js index 92fbd1c..862c298 100644 --- a/public/router.js +++ b/public/router.js @@ -177,13 +177,13 @@ async function renderPage(route, previousPath = null) { } // App-Shell einmalig aufbauen BEVOR render() aufgerufen wird - - // page-content muss im DOM existieren damit document.getElementById() + // main-content muss im DOM existieren damit document.getElementById() // in Seiten-Modulen funktioniert. if (!document.querySelector('.nav-bottom') && currentUser) { renderAppShell(app); } - const content = document.getElementById('page-content') || app; + const content = document.getElementById('main-content') || app; // Richtung bestimmen (previousPath ist der alte Pfad vor der Navigation) const direction = getDirection(previousPath, route.path); @@ -216,7 +216,7 @@ async function renderPage(route, previousPath = null) { */ function renderAppShell(container) { container.innerHTML = ` - ${t('common.skipToContent')} + ${t('common.skipToContent')} -
+