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



-
+

@@ -45,8 +45,6 @@
- 💾 **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)
-- 🏷️ **Login-Seite individualisierbar** – Firmenname, Logo, Texte, Hintergrundbild bzw. Farbverlauf
- 🌗 **Dark Mode** – umschaltbar, Einstellung wird im Browser gespeichert
- 🌐 **Mehrsprachig** – Deutsch / Englisch per Umschalter (`lang/`)
- 📱 **Responsive Admin-Layout** mit Hamburger-Menü & Sidebar-Overlay
@@ -61,35 +59,31 @@
## 📸 Screenshots
-> Alle Screenshots stammen aus der Oberfläche in Version 2.5.0 (neues Design-System).
-
### Anmeldung & Voucher-Erstellung
-
-

-

-
+### Bulk-Erstellung & Dark Mode
-

-
-
-### Administration
-
-
-
+### Administration & Updater
+
+
+
+

+
### REST-API, 2FA & Integrationen
@@ -103,17 +97,6 @@
-### Updater & Wartungsmodus
-
-
-

-

-
-
-
-

-
-
---
## 📋 Anforderungen
@@ -237,57 +220,6 @@ 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.
-
-### Login-Seite individualisieren
-
-Unter **Administration → Einstellungen → Login-Seite** lässt sich die Anmeldeseite
-ohne Code-Änderung an das eigene Haus anpassen. Leere Felder verwenden jeweils den
-Standardwert – eine frische Installation sieht also unverändert aus.
-
-| Einstellung | Wirkung |
-|---|---|
-| Linke Bildspalte anzeigen | Split-Screen an/aus. Aus = zentrierte Anmeldekarte |
-| Firmenname | Name neben dem Logo bzw. in der Fußzeile (leer = Anwendungstitel) |
-| Logo (URL) | Eigenes Logo in der Bildspalte (leer = allgemeines Logo) |
-| Überschrift / Beschreibungstext | Claim in der Bildspalte |
-| Stichpunkte | Liste mit Haken – ein Stichpunkt pro Zeile, leer = keine Liste |
-| Fußzeile | z. B. `© 2026 Muster GmbH · Datenschutz · Impressum` |
-| Hintergrundbild (URL) | Formatfüllendes Bild der Bildspalte |
-| Verlauf Start-/Endfarbe | Farbverlauf, wenn kein Bild gesetzt ist |
-| Abdunklung (%) | Dunkle Ebene über dem Bild, damit der Text lesbar bleibt |
-
-Über **„Vorschau öffnen"** lässt sich die Login-Seite als angemeldeter Administrator
-ansehen (`login.php?preview=1`), ohne sich abzumelden.
-
----
-
## 🛡️ Sicherheit
Das Tool ist auf einen sicheren Standardbetrieb ausgelegt:
@@ -446,12 +378,11 @@ 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.5.0** · Autor: **Friederich Loheide** · Lizenz: **MIT**
+**Version 2.4.0** · Autor: **Friederich Loheide** · Lizenz: **MIT**
diff --git a/admin/api_keys.php b/admin/api_keys.php
index 4817b71..a2bbbfb 100644
--- a/admin/api_keys.php
+++ b/admin/api_keys.php
@@ -68,12 +68,28 @@ $adminBase = '';
API-Schlüssel – = htmlspecialchars($appTitle) ?>
-
+
+
+
+🔑 API-Schlüssel
= htmlspecialchars($error) ?>
= htmlspecialchars($success) ?>
@@ -114,7 +130,6 @@ $adminBase = '';
Noch keine API-Schlüssel angelegt.
-
| Name | Präfix | Scope | Limit | Status | Zuletzt genutzt | Erstellt von | |
@@ -124,16 +139,15 @@ $adminBase = '';
= ($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'] ? date('d.m.Y H:i', strtotime($k['last_used_at'])) : '–' ?> |
+ = $k['last_used_at'] ? htmlspecialchars($k['last_used_at']) : '–' ?> |
= htmlspecialchars($k['creator'] ?? '–') ?> |
= $k['is_active'] ? 'Sperren' : 'Aktivieren' ?>
- Löschen
+ Löschen
|
-
@@ -151,7 +165,7 @@ curl https://IHRE-DOMAIN/api/sites.php -H "X-API-Key: uvt_…"
OpenAPI-Spezifikation (Import in Postman/Swagger): /api/openapi.php
-
+