diff --git a/frontend/src/app.css b/frontend/src/app.css index d717db5..079ba0b 100644 --- a/frontend/src/app.css +++ b/frontend/src/app.css @@ -3,6 +3,22 @@ @custom-variant dark (&:is(.dark *)); +:root { + --app-bg: #110f0d; + --app-bg-soft: #181513; + --app-panel: #1d1a1f; + --app-panel-strong: #221e24; + --app-panel-muted: #171419; + --app-border: rgba(255, 255, 255, 0.08); + --app-border-strong: rgba(255, 166, 77, 0.22); + --app-text: #f6f2ee; + --app-text-muted: #b8aca1; + --app-accent: #ff8a3d; + --app-accent-strong: #ff6a00; + --app-accent-soft: rgba(255, 138, 61, 0.14); + --app-accent-glow: rgba(255, 138, 61, 0.28); +} + html, body, #root { min-height: 100%; } @@ -10,8 +26,11 @@ html, body, #root { body { margin: 0; font-family: Inter, ui-sans-serif, system-ui, -apple-system, BlinkMacSystemFont, "Segoe UI", sans-serif; - background: #111111; - color: #f5f5f7; + background: + radial-gradient(circle at top left, rgba(255, 106, 0, 0.12), transparent 22%), + radial-gradient(circle at top right, rgba(255, 138, 61, 0.08), transparent 18%), + linear-gradient(180deg, #0f0d0c 0%, #141110 100%); + color: var(--app-text); } * { @@ -56,8 +75,8 @@ input:focus, textarea:focus, select:focus { outline: none; - border-color: rgba(58, 150, 255, 0.9); - box-shadow: 0 0 0 3px rgba(58, 150, 255, 0.18); + border-color: var(--app-accent); + box-shadow: 0 0 0 3px rgba(255, 138, 61, 0.16); background: rgba(255, 255, 255, 0.08); } @@ -68,6 +87,88 @@ label { font-weight: 600; } +.surface-card { + background: linear-gradient(180deg, rgba(31, 27, 33, 0.96), rgba(23, 20, 25, 0.96)); + border: 1px solid var(--app-border); + box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.03); +} + +.surface-card-strong { + background: linear-gradient(180deg, rgba(36, 30, 24, 0.98), rgba(25, 21, 18, 0.98)); + border: 1px solid var(--app-border-strong); + box-shadow: + inset 0 1px 0 rgba(255, 255, 255, 0.03), + 0 18px 50px rgba(0, 0, 0, 0.28); +} + +.surface-card-muted { + background: rgba(255, 255, 255, 0.025); + border: 1px solid rgba(255, 255, 255, 0.06); +} + +.accent-text { + color: var(--app-accent); +} + +.accent-chip { + background: var(--app-accent-soft); + color: #ffb37f; + border: 1px solid rgba(255, 138, 61, 0.18); +} + +.accent-button { + background: linear-gradient(135deg, var(--app-accent) 0%, var(--app-accent-strong) 100%); + color: white; + border: 1px solid rgba(255, 166, 77, 0.45); + box-shadow: 0 10px 24px rgba(255, 106, 0, 0.18); +} + +.accent-button:hover { + filter: brightness(1.06); +} + +.accent-button-soft { + background: var(--app-accent-soft); + color: #ffbc8e; + border: 1px solid rgba(255, 138, 61, 0.18); +} + +.ghost-button { + background: rgba(255, 255, 255, 0.03); + border: 1px solid rgba(255, 255, 255, 0.09); + color: var(--app-text); +} + +.nav-button { + color: var(--app-text-muted); +} + +.nav-button:hover { + background: rgba(255, 138, 61, 0.08); + color: var(--app-text); +} + +.nav-button-active { + background: linear-gradient(135deg, rgba(255, 138, 61, 0.22), rgba(255, 106, 0, 0.24)); + color: white; + border: 1px solid rgba(255, 138, 61, 0.28); + box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.04); +} + +.sidebar-shell { + background: linear-gradient(180deg, rgba(16, 14, 13, 0.98), rgba(18, 15, 14, 0.98)); + border-right: 1px solid rgba(255, 255, 255, 0.05); +} + +.brand-mark { + background: linear-gradient(135deg, var(--app-accent) 0%, var(--app-accent-strong) 100%); + box-shadow: 0 12px 30px rgba(255, 106, 0, 0.22); +} + +.section-subtle { + color: var(--app-text-muted); +} + .scrollbar-thin { scrollbar-width: thin; scrollbar-color: rgba(255, 255, 255, 0.15) transparent; diff --git a/frontend/src/components/layout/Header.tsx b/frontend/src/components/layout/Header.tsx index ee511a3..c777222 100644 --- a/frontend/src/components/layout/Header.tsx +++ b/frontend/src/components/layout/Header.tsx @@ -1,5 +1,5 @@ import { Button, Chip, Tooltip, Dropdown, DropdownTrigger, DropdownMenu, DropdownItem, Avatar } from '@heroui/react'; -import { Moon, Sun, Bell, ChevronDown, LogOut, Settings } from 'lucide-react'; +import { Moon, Sun, ChevronDown, LogOut, Settings } from 'lucide-react'; import { useTheme } from '../../hooks/useTheme'; import { useApp } from '../../context/AppContext'; @@ -30,14 +30,14 @@ export function Header() { return (
-
- {section !== 'overview' && ( <> / - {navLabels[section] || section} + {navLabels[section] || section} )}
@@ -45,20 +45,20 @@ export function Header() {
{statusMessage && ( - + {statusMessage} )} - - - + {!collapsed && ( <>
{user?.username}
-
Angemeldet
+
Angemeldet
- diff --git a/frontend/src/components/shared/SectionCard.tsx b/frontend/src/components/shared/SectionCard.tsx index 2873afd..cd4c4f5 100644 --- a/frontend/src/components/shared/SectionCard.tsx +++ b/frontend/src/components/shared/SectionCard.tsx @@ -10,11 +10,11 @@ type Props = { export function SectionCard({ title, subtitle, children, action }: Props) { return ( - +
{title} - {subtitle && {subtitle}} + {subtitle && {subtitle}}
{action &&
{action}
}
diff --git a/frontend/src/components/shared/StatCard.tsx b/frontend/src/components/shared/StatCard.tsx index 8f733ba..977785b 100644 --- a/frontend/src/components/shared/StatCard.tsx +++ b/frontend/src/components/shared/StatCard.tsx @@ -13,10 +13,10 @@ export function StatCard({ icon, label, value, trend, color = 'primary' }: Props const chipColor = color === 'default' ? 'default' : color; return ( - +
- + {label} {trend && ( @@ -26,7 +26,7 @@ export function StatCard({ icon, label, value, trend, color = 'primary' }: Props )}
{value}
-
{label}
+
{label}
); diff --git a/frontend/src/pages/Dashboard.tsx b/frontend/src/pages/Dashboard.tsx index af42a04..9aa02da 100644 --- a/frontend/src/pages/Dashboard.tsx +++ b/frontend/src/pages/Dashboard.tsx @@ -22,7 +22,7 @@ export function Dashboard() { return (
- +
@@ -33,10 +33,10 @@ export function Dashboard() { Online
-
ID: {guildInfo?.id || selectedGuild?.id}
+
ID: {guildInfo?.id || selectedGuild?.id}
{Object.entries(moduleFlags).filter(([, v]) => v).map(([key]) => ( - + {key.replace('Enabled', '').replace(/([A-Z])/g, ' $1').trim()} ))} @@ -44,7 +44,7 @@ export function Dashboard() {
- }> + } className="accent-chip"> Ping: {guildInfo?.ping || '-'}ms
@@ -65,7 +65,7 @@ export function Dashboard() {
- +

Activity Bereich

@@ -80,25 +80,25 @@ export function Dashboard() { - +

Guild Logs

Letzte Ereignisse

-
{logs.length ? logs.slice(0, 15).map((log, i) => ( - +
{log.level === 'error' ? : log.level === 'warn' ? : @@ -131,7 +131,7 @@ export function Dashboard() { - +

Quick Actions

Schnellzugriff

@@ -140,10 +140,10 @@ export function Dashboard() { {quickActions.map((action) => ( -
@@ -88,7 +88,7 @@ export function SupportLogin() {
- +
Live Vorschau @@ -96,10 +96,10 @@ export function SupportLogin() {
- +
- +
{supportLogin?.config?.title || 'Support Login'} {supportLogin?.config?.description || 'Melde dich als Support an/ab.'} @@ -107,14 +107,14 @@ export function SupportLogin() {
- - + + - +
Aktive Supporter @@ -123,7 +123,7 @@ export function SupportLogin() { {supportLogin?.status?.active?.length ? supportLogin.status.active.map((s, i) => ( - + {s.username || s.userId} diff --git a/frontend/src/pages/Welcome.tsx b/frontend/src/pages/Welcome.tsx index 6173338..dc5520d 100644 --- a/frontend/src/pages/Welcome.tsx +++ b/frontend/src/pages/Welcome.tsx @@ -9,7 +9,7 @@ export function Welcome() { return (
- +
Welcome konfigurieren @@ -66,13 +66,13 @@ export function Welcome() { - - +
Live Vorschau @@ -80,22 +80,22 @@ export function Welcome() {
- +
- + {settings.welcomeConfig?.embedTitle || 'Willkommen!'}

{settings.welcomeConfig?.embedDescription || 'Willkommen auf dem Server!'}

{settings.welcomeConfig?.embedFooter && ( -

{settings.welcomeConfig.embedFooter}

+

{settings.welcomeConfig.embedFooter}

)}
-

+

Nutze {'{user}'} fuer den Benutzernamen und {'{server}'} fuer den Servernamen.