diff --git a/Readme.md b/Readme.md
index 7019def..ba33425 100644
--- a/Readme.md
+++ b/Readme.md
@@ -8,7 +8,7 @@



-
+

@@ -45,6 +45,7 @@
- 💾 **Config-Backup & -Restore** (JSON Export/Import)
- 🐳 **Docker** – Dockerfile + docker-compose (MariaDB)
- 🌍 **Öffentlicher Modus** – optional ohne Login nutzbar (mit CSRF-Schutz & Throttle)
+- 🎨 **Einheitliches Design-System** – ein Stylesheet für Frontend, Login und Backend (Tokens, Komponenten, Light/Dark)
- 🌗 **Dark Mode** – umschaltbar, Einstellung wird im Browser gespeichert
- 🌐 **Mehrsprachig** – Deutsch / Englisch per Umschalter (`lang/`)
- 📱 **Responsive Admin-Layout** mit Hamburger-Menü & Sidebar-Overlay
@@ -59,31 +60,30 @@
## 📸 Screenshots
+> Alle Screenshots stammen aus der Oberfläche in Version 2.5.0 (neues Design-System).
+
### Anmeldung & Voucher-Erstellung
-### Bulk-Erstellung & Dark Mode
-
-### Administration & Updater
+### Administration
### REST-API, 2FA & Integrationen
@@ -97,6 +97,17 @@
+### Updater & Wartungsmodus
+
+
+

+

+
+
+
+

+
+
---
## 📋 Anforderungen
@@ -220,6 +231,36 @@ Den Token finden Sie unter **Administration → Einstellungen → Cron**.
---
+## 🎨 Design-System
+
+Frontend, Login-Seiten, Installer, Updater und der gesamte Admin-Bereich nutzen ein
+gemeinsames Stylesheet: **`assets/global.css`**.
+
+- **Design-Tokens** (`:root` bzw. `[data-theme="dark"]`) für Flächen, Text, Linien,
+ Markenfarbe, Statusfarben, Radien, Schatten und Layout-Maße
+- **Komponenten** darauf aufgebaut: Buttons, Formularfelder, Cards, Tabellen, Badges,
+ Alerts, Tabs, Pagination, Modals, Toasts, Statistik-Kacheln, Sidebar/Topbar
+- **Dark Mode** ausschließlich über Tokens – keine `!important`-Overrides mehr
+- **Schriftart** Inter (via Google Fonts) mit System-Font-Fallback
+
+Eigenes Branding lässt sich meist mit wenigen Zeilen umsetzen – z. B. in einer
+eigenen CSS-Datei oder direkt in `assets/global.css`:
+
+```css
+:root {
+ --accent: #0f766e; /* Primärfarbe (Buttons, aktive Navigation) */
+ --accent-hover: #0d5f59;
+ --accent-soft: #e6f4f2; /* Flächen für aktive Zustände */
+ --brand-gradient: linear-gradient(135deg, #0f766e 0%, #0ea5e9 100%);
+ --r-lg: 14px; /* Eckenradius für Cards */
+}
+```
+
+Logo und Favicon werden nicht über CSS, sondern unter
+**Administration → Einstellungen → Allgemein** gesetzt.
+
+---
+
## 🛡️ Sicherheit
Das Tool ist auf einen sicheren Standardbetrieb ausgelegt:
@@ -378,11 +419,12 @@ setzen (`DB_*`, `APP_KEY`).
- [x] Docker-Container
- [x] Erweiterte Reporting-Funktionen (CSV/PDF) + Health-Endpoint
- [x] 2FA-Recovery-Codes, API-Scopes/Rate-Limit/OpenAPI, Test-Suite (PHPUnit/PHPStan)
+- [x] Gemeinsames Design-System für Frontend, Login und Backend
---
-**Version 2.4.0** · Autor: **Friederich Loheide** · Lizenz: **MIT**
+**Version 2.5.0** · Autor: **Friederich Loheide** · Lizenz: **MIT**
diff --git a/admin/api_keys.php b/admin/api_keys.php
index a2bbbfb..4817b71 100644
--- a/admin/api_keys.php
+++ b/admin/api_keys.php
@@ -68,28 +68,12 @@ $adminBase = '';
API-Schlüssel – = htmlspecialchars($appTitle) ?>
-
-
-
-🔑 API-Schlüssel
+
= htmlspecialchars($error) ?>
= htmlspecialchars($success) ?>
@@ -130,6 +114,7 @@ code { font-family:monospace; background:var(--bg-hover); padding:2px 6px; borde
Noch keine API-Schlüssel angelegt.
+
| Name | Präfix | Scope | Limit | Status | Zuletzt genutzt | Erstellt von | |
@@ -139,15 +124,16 @@ code { font-family:monospace; background:var(--bg-hover); padding:2px 6px; borde
= ($k['scope'] ?? 'write') === 'read' ? 'nur Lesen' : 'Lesen+Erstellen' ?> |
= (int)($k['rate_limit'] ?? 0) === 0 ? '∞' : (int)$k['rate_limit'] . '/min' ?> |
= $k['is_active'] ? 'aktiv' : 'gesperrt' ?> |
- = $k['last_used_at'] ? htmlspecialchars($k['last_used_at']) : '–' ?> |
+ = $k['last_used_at'] ? date('d.m.Y H:i', strtotime($k['last_used_at'])) : '–' ?> |
= htmlspecialchars($k['creator'] ?? '–') ?> |
= $k['is_active'] ? 'Sperren' : 'Aktivieren' ?>
- Löschen
+ Löschen
|
+
@@ -165,7 +151,7 @@ curl https://IHRE-DOMAIN/api/sites.php -H "X-API-Key: uvt_…"
OpenAPI-Spezifikation (Import in Postman/Swagger): /api/openapi.php
-
+