Removed hardcoded --accent, --bg-*, --text-*, --font, --radius, --transition
from .sb-app so it inherits theme vars from .hub-app[data-theme].
Keeps only soundboard-specific vars (modifiers, shadows, card sizes).
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
- Add Settings button (gear icon) to header
- Add Settings modal with unified color theme picker
- Move theme state to App.tsx, apply data-theme on .hub-app root
- Global CSS themes: ember, amethyst, jade, ocean, rose
- Remove per-plugin theme pickers from Soundboard and Radio
- Remove per-plugin theme CSS from soundboard.css and styles.css
- Radio globe colors update via MutationObserver on theme change
- Single localStorage key: hub-theme (replaces jb-theme + radio-theme)
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Sounds now live in /mnt/cache/appdata/gaming-hub/data/sounds/
directly — no separate mount needed.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Daddelolymp is backup mirror only, never builds or hosts images.
All builds and deployments happen exclusively on adriahub.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Use --bg-tertiary hover + --text-normal instead of accent colors.
Remove custom spin animation and scale transform. Strict adherence
to the documented Icon-Button component pattern.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Replace emoji with clean SVG refresh icon. Remove border for
ghost-style matching other header elements. Add 180deg rotation
on hover for visual feedback.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Snapshot des original Soundboard-Designs (Discord Blurple, Pills, Glows)
als Styleguide-Dokument fuer spaetere Referenz.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Dokumentiert alle Design-Tokens, Component-Patterns, Naming-Conventions,
Layout-Regeln und Do/Dont-Regeln basierend auf dem CI Redesign v3.
Enthaelt ein Plugin-Template als Starter-CSS fuer neue Plugins.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Replace escaped unicode sequences (\uD83D\uDD0A, \u00e4) with actual
UTF-8 characters so the picker displays 🔊 and ä correctly.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Calling callback({}) with an empty object caused Electron to throw
"Video was requested, but no video stream was provided". The correct
way to cancel/deny the request is callback() with no arguments.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
The stream screen picker now shows a toggle switch to enable/disable
system audio capture (loopback). Defaults to on. Previously audio was
always included with no way to disable it.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
After building and pushing to adriahub, the CI pipeline now also
tags and pushes images to forgejo.daddelolymp.de as a backup.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
- Add Steam OpenID 2.0 authentication routes (login + callback)
- Enable Steam button in LoginModal (was placeholder)
- Unified user ID system: getUserId() supports Discord, Steam, Admin
- Update soundboard user-sound endpoints for Steam users
- UserSettings now works for both Discord and Steam providers
- Steam hover uses brand color #66c0f4
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Pass DISCORD_CLIENT_ID and DISCORD_CLIENT_SECRET secrets
to the container for Discord OAuth2 login support.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
- Server: writeState() → writeStateDebounced() im Volume-Endpoint
(kein synchroner Disk-Write bei jedem Slider-Tick mehr)
- Frontend: Debounce von 120ms auf 50ms reduziert
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Bei PCM-Memory-Cache wurde inlineVolume nur aktiviert wenn vol != 1,
dadurch fehlte das Volume-Objekt auf der AudioResource und
apiSetVolumeLive konnte die Lautstärke nicht live ändern.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
- Neues AdminPanel.tsx mit Sidebar-Navigation (Soundboard/Streaming/Game Library)
- Lazy-Loading: Daten werden erst beim Tab-Wechsel geladen
- Admin-Button im Header öffnet jetzt das zentrale Panel (Rechtsklick = Logout)
- Admin-Code aus SoundboardTab, StreamingTab und GameLibraryTab entfernt
- ~500 Zeilen Plugin-Code entfernt, durch ~620 Zeilen zentrales Panel ersetzt
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
- Admin-Login aus 3 Plugins (Soundboard, Streaming, Game Library) entfernt
- Zentraler 🔒/🔓 Button im Header mit Login-Modal
- isAdmin wird als Prop an alle Plugins weitergegeben
- Settings-Buttons (Gear-Icons) nur sichtbar wenn eingeloggt
- Alle Plugins nutzen weiterhin den shared admin-Cookie für Operationen
- Login/Logout-Formulare und Buttons aus Plugin-Panels entfernt
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>