feat(ui): Discord-style roles/channel perms + IDE themes
Split-pane role editor with tri-state channel overrides (roles/members). CSS-var themes (Gruvbox default + 9 IDE palettes) in top bar and settings.
This commit is contained in:
+29
-2
@@ -1,13 +1,40 @@
|
||||
<!doctype html>
|
||||
<html lang="en">
|
||||
<html lang="en" data-theme="gruvbox">
|
||||
<head>
|
||||
<meta charset="UTF-8" />
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1.0, viewport-fit=cover" />
|
||||
<script>
|
||||
// Apply saved theme before paint (migrates legacy light/dark).
|
||||
(function () {
|
||||
try {
|
||||
var t = localStorage.getItem('dumpster-theme');
|
||||
if (t === 'light') t = 'gruvbox-light';
|
||||
else if (t === 'dark' || !t) t = 'gruvbox';
|
||||
var ok = {
|
||||
gruvbox: 1,
|
||||
'gruvbox-light': 1,
|
||||
'one-dark': 1,
|
||||
dracula: 1,
|
||||
nord: 1,
|
||||
'tokyo-night': 1,
|
||||
catppuccin: 1,
|
||||
'solarized-dark': 1,
|
||||
monokai: 1,
|
||||
'github-dark': 1,
|
||||
};
|
||||
if (!ok[t]) t = 'gruvbox';
|
||||
document.documentElement.setAttribute('data-theme', t);
|
||||
document.documentElement.classList.add(t === 'gruvbox-light' ? 'light' : 'dark');
|
||||
} catch (e) {
|
||||
document.documentElement.setAttribute('data-theme', 'gruvbox');
|
||||
}
|
||||
})();
|
||||
</script>
|
||||
|
||||
<!-- PWA Meta Tags -->
|
||||
<meta name="theme-color" content="#282828" media="(prefers-color-scheme: dark)" />
|
||||
<meta name="theme-color" content="#282828" />
|
||||
<meta name="color-scheme" content="dark" />
|
||||
<meta name="color-scheme" content="dark light" />
|
||||
<meta name="description" content="A chaotic, self-hosted Discord-like platform" />
|
||||
|
||||
<!-- Apple -->
|
||||
|
||||
Reference in New Issue
Block a user