Neues client/src/lib/theme.ts verwaltet die Wahl (system/light/dark) in
localStorage. Umschalter-Button im Header (zyklisch: System -> Hell -> Dunkel),
Icon zeigt den aktuellen Modus. CSS-Variablen (--bg/--card/--text/--muted/
--bor/--cyan) bekommen einen Hell-Override über [data-theme="light"] bzw.
@media(prefers-color-scheme:light) ohne explizites [data-theme="dark"] - so
gewinnt eine manuelle Wahl in beide Richtungen gegen die Systemeinstellung.
Header/Tabs/Login bleiben bewusst immer dunkel-navy (Markenidentität), nur
der Content-Bereich wechselt. Inline-Script in index.html verhindert ein
kurzes Aufblitzen des falschen Farbschemas vor dem ersten Paint.
Temporärer test-build-only.yml Workflow zur Verifikation ohne Registry-Push.
Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
sessionStorage wird geleert, sobald die (installierte) PWA am Handy
geschlossen wird - deshalb war nach jedem Neustart ein erneuter Login nötig.
Sowohl MSAL-Cache als auch das lokale Login-Token liegen jetzt in
localStorage, MSAL erneuert den Token beim Start still im Hintergrund
(acquireTokenSilent), das lokale Token ist 30 Tage gültig.
Temporärer test-build-only.yml Workflow zur Verifikation ohne Registry-Push.
Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
Materialliste war auf schmalen Screens nur per Seitwärts-Scrollen lesbar.
Ab 680px Breite wird jede Zeile jetzt als Karte dargestellt (CSS Grid mit
benannten Areas, Bezeichnung prominent oben, Menge/Einheit/Art.-Nr./Notiz
darunter beschriftet, Position + Löschen-Button in der Kopfzeile der Karte).
Die Grid-Areas ordnen die Felder unabhängig von der DOM-Reihenfolge um, die
Desktop-Tabelle bleibt unverändert in der ursprünglichen Spaltenreihenfolge.
Temporärer test-build-only.yml Workflow zur Verifikation ohne Registry-Push.
Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
Neues "users"-Table (bcrypt-Hash, nie Klartext), POST /api/auth/login gibt ein
selbst-signiertes JWT (HS256) aus. requireAuth unterscheidet MSAL- (RS256) und
lokale Tokens (HS256) anhand des alg-Headers. Server legt beim Start optional
ein erstes lokales Konto an, wenn SEED_ADMIN_USERNAME/SEED_ADMIN_PASSWORD als
Stack-Env gesetzt sind (idempotent, Klartext-Passwort landet nie im Repo).
Frontend: Login-Screen hat jetzt einen Alternativ-Link zu Benutzername/Passwort,
App.tsx kombiniert MSAL- und lokalen Auth-Status.
Temporärer test-build-only.yml Workflow zur Docker-Build-Verifikation ohne
Registry-Push (wird nach dem Test wieder entfernt).
Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
Materialschein & Kabelrechner für BergVOLT Elektrotechnik, portiert von der
vorherigen Single-File-HTML-Version. Microsoft-Entra-ID-Login (MSAL), Projekt-
Dashboard statt einer Datei pro Kunde, Retour-Buchen-Zusammenführung, 111
Kabeltypen aus den offiziellen Meinhart-Datenblättern. gitops/ nach
PROX/deploy-standard: git-backed Portainer-Stack, versionierte Docker-Images,
CI-Commit-back auf gitops/stack.yml.
Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>