Webinterface: Emojis durch Lucide-Icons ersetzt
Deploy / check (push) Has been cancelled
Deploy / deploy (push) Has been cancelled

Emojis werden vom Betriebssystem gerendert — auf Windows, Mac und Android
sehen sie unterschiedlich aus, und sie sind bunt. Im streng zweifarbigen
D4RKST3R-Look stachen sie entsprechend heraus.

Jetzt kommen die Symbole aus einem einzigen Set (Lucide, dünne Outlines),
zentral in src/icons.jsx gebündelt: eine Größe, eine Strichstärke, überall
gleich — und sie erben die Textfarbe, sind also Teil der Marke statt
Fremdkörper. Betroffen sind Navigation, Startseite, Server, Roadmap,
Profil, Level, Galerie, Devlogs, Lightbox, Composer und alle Setup-Tabs.

Bewusst Emojis geblieben sind:
- die Spiel-Presets der Server (landen als Icon im Discord-Embed)
- Rollen-Menü-Emojis und Platzhalter für Discord-Inhalte
- beschreibende Hinweise wie „🔔-Button am Post" oder „🟢/🔴 im Embed",
  die zeigen, wie etwas in Discord aussehen wird
- die selbst gepflegten Dienst-Icons im Portal

Dazu Detailarbeit: Server-Status als farbiger Punkt statt Emoji, Platz 1–3
der Bestenliste als Pokal in Gold/Silber/Bronze, Pagination mit Chevrons.
Bundle wächst um 19 kB (Tree-Shaking greift, nur die ~70 genutzten Icons).

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
This commit is contained in:
2026-07-31 14:37:25 +02:00
co-authored by Claude Fable 5
parent 6daa1f7d43
commit 1afbe9d238
20 changed files with 295 additions and 79 deletions
+7 -5
View File
@@ -15,6 +15,7 @@ import Home from './pages/Home.jsx';
import DevlogDetail from './pages/DevlogDetail.jsx';
import Impressum from './pages/Impressum.jsx';
import Datenschutz from './pages/Datenschutz.jsx';
import { IconChevronDown, IconMenu, IconX, IconLock } from './icons.jsx';
const COMMUNITY_LINKS = [
['/galerie', 'Galerie'],
@@ -35,7 +36,7 @@ function NavDropdown({ label, active, children }) {
return (
<div className={`nav-drop ${open ? 'open' : ''}`} ref={ref}>
<button className={`nav-drop-btn ${active ? 'active' : ''}`} onClick={() => setOpen((o) => !o)}>
{label} <span className="nav-caret"></span>
{label} <IconChevronDown size={13} className="nav-caret" />
</button>
{open && <div className="nav-drop-menu" onClick={() => setOpen(false)}>{children}</div>}
</div>
@@ -151,7 +152,7 @@ export default function App() {
</div>
<button className="burger" onClick={() => setDrawer((d) => !d)} aria-label="Menü">
{drawer ? '✕' : '☰'}
{drawer ? <IconX size={20} /> : <IconMenu size={20} />}
</button>
</header>
@@ -175,8 +176,9 @@ export default function App() {
<main className="main">
{gated && (
<div className="gate-banner">
<span>
🚪 Der Login ist Mitgliedern des Discord-Servers vorbehalten
<span className="with-icon">
<IconLock />
Der Login ist Mitgliedern des Discord-Servers vorbehalten
tritt erst dem Server bei und logg dich dann nochmal ein.
</span>
{invite && (
@@ -184,7 +186,7 @@ export default function App() {
Zum Discord
</a>
)}
<button className="card-delete" onClick={() => setGated(false)} title="Ausblenden"></button>
<button className="card-delete" onClick={() => setGated(false)} title="Ausblenden"><IconX size={15} /></button>
</div>
)}
<Routes>