feat(admin): eigener Arbeitsbereich mit Dashboard, Zaehlern und Schnellsuche

- Admin ohne Shop-Kopf-/Fusszeile (HideOnAdmin); kein doppeltes <main> mehr
- Seitenleiste gruppiert (Verkauf, Sortiment, Kundschaft, Seite), aktive
  Seite als wandernde Flaeche mit Wabe, Zaehler fuer Wartendes: bezahlte
  offene Bestellungen, neue Retouren, unfreigegebene Bewertungen, neue
  Firmenanfragen (COUNT-Abfragen erst nach Admin-/2FA-Pruefung)
- Schnellsuche (Strg/Cmd+K): Seiten und haeufige Aktionen per Tastatur,
  tolerante Wortsuche, Ziele nur aus fester Liste
- Dashboard: Begruessung nach Tageszeit (Berliner Zeit), eine Leitzahl
  "Umsatz heute" mit Vergleich zu gestern und Mini-Verlauf, "Zu erledigen"
  mit direkten Links bzw. "Alles erledigt"-Siegel, ruhigere Kennzahl-Kacheln
- Diagramme nach dataviz-Skill: per Validator gepruefter Diagrammton
  #a0722f (>=3:1; #b88a44 erreichte nur 2,93:1), gerundete Balkenkappen,
  2px Luecke, Tooltip je Balken (auch per Tastatur), Meter mit Spur im
  selben Ton, Rang der Top-Produkte als Wabe
- Einheitliche Admin-Details zentral: groessere Ueberschriften,
  Tabellenkopf als Etikett, feste Ziffernbreite, eigene Auswahlpfeile

Co-Authored-By: Claude Opus 5.5 (1M context) <[email protected]>
This commit is contained in:
Nick SzaunigandClaude Opus 5.5 committed 2026-09-25 13:45:24 +02:00
1 parent 15ddceaa39
commit c95c713717
11 files changed
+762 -133

No files matched your search

+29
View File
@@ -1234,6 +1234,19 @@ export const de: Dictionary = {
noVouchersYet: "Noch keine Gutscheine eingelöst.",
usedCountLabel: (count, maxUses) => `${count}× genutzt${maxUses ? ` / ${maxUses}` : ""}`,
viewAllOrders: "Alle Bestellungen ansehen →",
greeting: (part, name) =>
`${part === "morning" ? "Guten Morgen" : part === "day" ? "Hallo" : "Guten Abend"}, ${name}.`,
todayRevenueLabel: "Umsatz heute",
monthRevenueLabel: "Umsatz diesen Monat",
vsYesterday: (delta, up) => `${up ? "↑" : "↓"} ${delta} gegenüber gestern`,
toDoHeading: "Zu erledigen",
toDoOrders: (count) => (count === 1 ? "1 Bestellung wartet auf Versand" : `${count} Bestellungen warten auf Versand`),
toDoReturns: (count) => (count === 1 ? "1 neue Retoure" : `${count} neue Retouren`),
toDoReviews: (count) => (count === 1 ? "1 Bewertung wartet auf Freigabe" : `${count} Bewertungen warten auf Freigabe`),
toDoInquiries: (count) => (count === 1 ? "1 neue Firmenanfrage" : `${count} neue Firmenanfragen`),
allDoneTitle: "Alles erledigt.",
allDoneText: "Gerade wartet nichts auf dich. Zeit für die Bienen.",
chartTooltip: (day, value) => `${day}: ${value}`,
},
adminContentPage: {
backToDashboard: "Zurück zum Dashboard",
@@ -1308,6 +1321,22 @@ export const de: Dictionary = {
closeMenu: "Menü schließen",
loggedInAs: (name) => `Angemeldet als ${name}`,
logout: "Abmelden",
groupSales: "Verkauf",
groupRange: "Sortiment",
groupCustomers: "Kundschaft",
groupSite: "Seite",
paletteOpen: "Schnellsuche",
paletteShortcut: "Strg K",
palettePlaceholder: "Wohin? Seite oder Aktion suchen …",
paletteNoResults: "Nichts gefunden.",
paletteSectionPages: "Seiten",
paletteSectionActions: "Aktionen",
actionNewProduct: "Neues Produkt anlegen",
actionNewVoucher: "Neuen Gutschein anlegen",
actionNewUser: "Neues Konto anlegen",
actionNewShippingTier: "Neue Versandstufe anlegen",
actionViewShop: "Shop ansehen",
badgeWaiting: (count) => `${count} warten`,
twoFactorWarning:
"Dieses Admin-Konto hat noch keine Zwei-Faktor-Authentifizierung aktiviert, empfohlen für Konten mit Zugriff auf Bestellungen, Rückerstattungen und Kundendaten.",
twoFactorSetupLink: "Jetzt einrichten →",