Sprint 12: UI-Vereinheitlichung + Läufigkeits-Tracker

- by-tabs/by-tab: einheitliche Tab/Pill-Navigation in allen Seiten
- by-section-label, by-toolbar: einheitliche Section-Labels und Toolbars
- Design-Tokens: fehlende --c-amber, --c-primary-soft ergänzt, Fallback-Werte entfernt
- sitting.js: sitting-layout für konsistentes flush-Layout (wie walks)
- Läufigkeits-Tracker: neuer Health-Tab für Hündinnen mit Zyklusvorhersage,
  Timeline vergangener Läufigkeiten, Erinnerungen und auto-berechnetem Nächst-Datum
- emptyState-Bug: icon-Parameter muss SVG sein, nicht Icon-Name (dog/bell/warning gefixt)
- SW-Cache: by-v103, APP_VER: 79
This commit is contained in:
rene 2026-04-16 22:31:33 +02:00
parent 32d630d5a1
commit b58789373c
30 changed files with 4344 additions and 523 deletions

View file

@ -439,6 +439,9 @@ def _migrate(conn_factory):
# Events: Quelle + externe ID für gescrapte Events
("events", "quelle", "TEXT NOT NULL DEFAULT 'nutzer'"),
("events", "external_id", "TEXT"),
# Admin: User-Sperre
("users", "is_banned", "INTEGER NOT NULL DEFAULT 0"),
("users", "ban_reason", "TEXT"),
]
with conn_factory() as conn:
for table, column, col_type in migrations:
@ -525,6 +528,12 @@ def _migrate(conn_factory):
ON events(external_id) WHERE external_id IS NOT NULL;
""")
# Users: Eindeutiger Benutzername (case-insensitive via COLLATE NOCASE)
conn.executescript("""
CREATE UNIQUE INDEX IF NOT EXISTS idx_users_name_unique
ON users(name COLLATE NOCASE);
""")
# Wiki: User-Foto-Einreichungen
conn.executescript("""
CREATE TABLE IF NOT EXISTS wiki_foto_submissions (