Redesign: gemeinsames Design-System für Frontend und Backend
Some checks failed
CI / PHP Lint (push) Waiting to run
CI / PHP Lint-1 (push) Waiting to run
CI / Unit Tests & Static Analysis (push) Waiting to run
CI / PHP Lint (pull_request) Has been cancelled
CI / PHP Lint-1 (pull_request) Has been cancelled
CI / Unit Tests & Static Analysis (pull_request) Has been cancelled

Frontend, Login/Installer/Updater und der komplette Admin-Bereich nutzen
jetzt ein einziges Stylesheet (assets/global.css) statt pro Seite
dupliziertem Inline-CSS.

Design-System
- Tokens für Flächen, Text, Linien, Marke, Status, Radien, Schatten und
  Layout-Maße; Dark Mode ausschließlich über Tokens (keine !important-
  Overrides mehr)
- Komponenten: Buttons, Formularfelder, Cards, Tabellen, Badges, Alerts,
  Tabs, Pagination, Modals, Toasts, Statistik-Kacheln, Empty States
- Schrift Inter mit System-Fallback

Oberfläche
- Admin-Shell neu: durchgehende Sidebar mit Marke, gruppierter Navigation
  und Benutzerbereich; schlanke Topbar mit Breadcrumb
- Dashboard: ruhige KPI-Kacheln mit Icon-Chips, Charts an Theme-Farben
  gekoppelt
- Öffentliche Voucher-Seite: App-Topbar, klare Formularstruktur und
  Ticket-Darstellung des erstellten Codes inkl. QR-Code
- Login/Passwort/2FA: zweispaltiges Auth-Layout bzw. Fokus-Karten
- Updater und Wartungsmodus im gleichen Look (Wartungsseite bleibt
  bewusst eigenständig ohne externe Abhängigkeiten)
- Emoji-Icons in der UI durch Font-Awesome-Icons ersetzt

Nebenbei behoben
- Falscher SRI-Hash blockierte qrcode.min.js – QR-Codes wurden auf der
  Voucher-Seite und bei der 2FA-Einrichtung nie gerendert
- assets/global.css wurde in mehreren Admin-Seiten über einen falschen
  Pfad eingebunden ($adminBase = '' statt '../')
- TinyMCE lädt ohne API-Key jetzt die GPL-Variante von cdnjs – kein
  "valid API key required"-Banner mehr im Einstellungs-Editor
- Tabellen in Cards scrollen horizontal statt zu überlaufen

Screenshots in docs/screenshots neu erstellt, README aktualisiert (neuer
Abschnitt "Design-System", Version 2.5.0).

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
This commit is contained in:
Friederich Loheide 2026-09-22 20:33:52 +00:00
parent bad70a631f
commit 498c7e28e0
43 changed files with 2165 additions and 1740 deletions

View file

@ -1,6 +1,9 @@
<?php
return [
// Navigation
'nav_group_overview'=> 'Übersicht',
'nav_group_manage' => 'Verwaltung',
'nav_group_system' => 'System',
'nav_dashboard' => 'Dashboard',
'nav_sites' => 'Sites verwalten',
'nav_users' => 'Benutzer verwalten',
@ -98,7 +101,9 @@ return [
'voucher_email_hint' => 'gast@example.com',
'voucher_create_btn' => 'Voucher erstellen',
'voucher_creating' => 'Erstelle Voucher...',
'voucher_success_title' => '✓ Ihr Zugangs-Code',
'voucher_success_title' => 'Zugangs-Code erstellt',
'voucher_copy_hint' => 'Code antippen zum Kopieren',
'app_subtitle' => 'WLAN-Zugangscodes in Sekunden erstellen für Gäste, Teams und Events.',
'voucher_validity' => 'Gültig für {minutes} Minuten ab Erstellung',
'voucher_qr_label' => 'QR-Code scannen zum Verbinden',
'voucher_print_btn' => 'Code ausdrucken',
@ -119,6 +124,7 @@ return [
'bulk_success' => '{count} Vouchers erfolgreich erstellt!',
'bulk_print_all' => 'Alle ausdrucken',
'bulk_results' => 'Erstellte Vouchers ({count})',
'bulk_results_hint' => 'Alle Codes sind sofort gültig und können gedruckt oder kopiert werden.',
// Templates
'templates_title' => 'Voucher-Profile',
@ -244,13 +250,18 @@ return [
// Login / Auth
'login_title' => 'Anmelden',
'auth_claim_title' => 'WLAN-Gastzugänge, zentral verwaltet.',
'auth_claim_text' => 'Vouchers für alle UniFi-Sites erstellen, versenden und auswerten aus einer Oberfläche.',
'auth_feature_1' => 'Voucher per E-Mail, SMS oder QR-Code',
'auth_feature_2' => 'Rollen, 2FA und vollständiges Audit-Log',
'auth_feature_3' => 'Live-Statistiken je Site und Benutzer',
'login_subtitle' => 'Melden Sie sich an, um fortzufahren',
'login_email' => 'E-Mail',
'login_password' => 'Passwort',
'login_btn' => 'Anmelden',
'login_ms' => 'Mit Microsoft anmelden',
'login_local' => 'Mit Benutzername und Passwort anmelden',
'login_back' => 'Zurück zur Code-Erstellung',
'login_back' => 'Zurück zur Code-Erstellung',
'login_forgot' => 'Passwort vergessen?',
'login_error_empty' => 'Bitte E-Mail und Passwort eingeben',
'login_error_rate' => 'Zu viele Fehlversuche. Bitte warten Sie 10 Minuten.',
@ -262,7 +273,7 @@ return [
'reset_email_label' => 'E-Mail-Adresse',
'reset_send_btn' => 'Reset-Link senden',
'reset_success' => 'Falls ein Konto mit dieser E-Mail existiert, erhalten Sie in Kürze eine E-Mail.',
'reset_back_login' => 'Zurück zum Login',
'reset_back_login' => 'Zurück zum Login',
'reset_new_pw' => 'Neues Passwort festlegen',
'reset_new_pw_label'=> 'Neues Passwort',
'reset_confirm_label'=> 'Passwort bestätigen',