- Add 2 dark palettes (Nuit, Ocean) to DisplaySettings with full SVG
theme tokens — all hardcoded SVG colors (grids, legends, text fills,
pills, dot strokes, drag handles) replaced with reactive bindings
- Update scoped CSS to use var(--color-*) and var(--svg-*) throughout
- Add Woodpecker CI pipeline (.woodpecker.yml): build → docker push → deploy
- Add multi-stage Dockerfiles for backend (Python) and frontend (Nuxt)
- Add production docker-compose with Traefik labels + dev override
- Remove old single-stage Dockerfiles and root docker-compose.yml
- Update Makefile with docker-dev target
- Exclude data files (pdf, xls, ipynb) from git
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Reorganize the citizen page (/commune/[slug]) for voters: full-width
interactive chart with "Population" zoom by default, separate auth and
vote sections, countdown timer for vote deadline.
Backend: add vote_deadline column to communes with Alembic migration.
Admin: add deadline configuration card with datetime-local input.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
CMS editor: formatting toolbar with H1-H3, bold, italic, strikethrough,
links, images, lists, blockquotes, code blocks, horizontal rules.
Keyboard shortcuts (Ctrl+B/I/D/K). Improved markdown preview rendering.
Import page: shows current data summary with year badge, stats grid,
last import date. Year input for new imports. Preview with sample table.
Backend: added data_year and data_imported_at fields to TariffParams,
returned in stats endpoint. Import sets data_imported_at automatically.
Seed sets data_year=2018.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>