Root fixes:
- .chip now has explicit color: var(--text) in base theme,
not just dark — buttons no longer use browser default
- All inputs/selects/textareas get background: var(--surface)
and color: var(--text) in both light and dark themes
- Removed color-scheme: dark on body (prevented browser from
forcing dark form controls regardless of data-theme)
- Dark mode input override only changes background shade now
This fixes: unreadable chip text and always-dark inputs.
Added explicit color: var(--text) on .chip and .badge selectors
in dark mode so unselected Home/Out chips and not-answered badges
are readable against the dark surface background.
- CSS variables for dark theme: surface, text, borders, accents
- Dark mode overrides for all hardcoded colors (buttons, tags,
flashes, inputs, table headers, code blocks)
- Toggle button (☀️/🌙) in navbar, saved to localStorage
- Inline script applies saved theme before page render (no flash)
- Applied to both base.html and public.html
- System color-scheme meta tag for native browser chrome
Add hard-to-guess public URLs (/public/<token>) that show a read-only
meal status dashboard for each household. Only people with the link can
see the data — no login required.
- models.py: public_token + public_enabled columns on households,
get_household_by_public_token(), generate_public_token(),
set_public_enabled()
- meals.py: /public/<token> route, /admin/public-link for
generate/disable/enable/regenerate
- templates/public.html: clean read-only public dashboard
- templates/public-not-found.html: 404 for invalid/disabled links
- templates/dashboard.html: admin UI with copy/regenerate/disable
- static/style.css: public page and URL box styles
- i18n.py: 18 new translation keys (en/fr/de)
- models.py: ORDER BY CASE so lunch always appears before dinner in the
dashboard table (was alphabetical, putting dinner first).
- style.css: add @media (max-width: 600px) with mobile-friendly layout:
stacked navbar, full-width dashboard header, reduced padding/margins,
larger touch targets for chips/buttons, stacked manage forms, and
compact table cells.
Add .manage-form label styling and .manage-form input[type="text"] rule
to match the existing password input styling, so the ntfy topic URL field
looks consistent with the rest of the UI.