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:
2026-07-15 21:46:07 -04:00
parent 11b1089126
commit 4da08d91bc
10 changed files with 1230 additions and 556 deletions
+183 -5
View File
@@ -2,8 +2,10 @@
@tailwind components;
@tailwind utilities;
/* Theme token sets — applied via html[data-theme="..."]. Default = gruvbox. */
@layer base {
:root {
:root,
[data-theme="gruvbox"] {
--gb-bg-h: #1d2021;
--gb-bg: #282828;
--gb-bg-s: #3c3836;
@@ -24,8 +26,7 @@
--gb-border: #665c54;
}
/* Light mode overrides */
.light {
[data-theme="gruvbox-light"] {
--gb-bg-h: #f9f5d7;
--gb-bg: #fbf1c7;
--gb-bg-s: #ebdbb2;
@@ -35,9 +36,187 @@
--gb-fg-s: #3c3836;
--gb-fg-t: #504945;
--gb-fg-f: #7c6f64;
--gb-red: #9d0006;
--gb-green: #79740e;
--gb-yellow: #b57614;
--gb-blue: #076678;
--gb-purple: #8f3f71;
--gb-aqua: #427b58;
--gb-orange: #af3a03;
--gb-gray: #928374;
--gb-border: #a89984;
}
/* Atom / VS Code One Dark Pro */
[data-theme="one-dark"] {
--gb-bg-h: #1e2127;
--gb-bg: #282c34;
--gb-bg-s: #21252b;
--gb-bg-t: #3e4451;
--gb-bg-f: #2c313a;
--gb-fg: #abb2bf;
--gb-fg-s: #9da5b4;
--gb-fg-t: #828997;
--gb-fg-f: #5c6370;
--gb-red: #e06c75;
--gb-green: #98c379;
--gb-yellow: #e5c07b;
--gb-blue: #61afef;
--gb-purple: #c678dd;
--gb-aqua: #56b6c2;
--gb-orange: #d19a66;
--gb-gray: #5c6370;
--gb-border: #3e4451;
}
[data-theme="dracula"] {
--gb-bg-h: #191a21;
--gb-bg: #282a36;
--gb-bg-s: #21222c;
--gb-bg-t: #44475a;
--gb-bg-f: #343746;
--gb-fg: #f8f8f2;
--gb-fg-s: #e2e2dc;
--gb-fg-t: #cfcfc2;
--gb-fg-f: #6272a4;
--gb-red: #ff5555;
--gb-green: #50fa7b;
--gb-yellow: #f1fa8c;
--gb-blue: #8be9fd;
--gb-purple: #bd93f9;
--gb-aqua: #8be9fd;
--gb-orange: #ffb86c;
--gb-gray: #6272a4;
--gb-border: #44475a;
}
[data-theme="nord"] {
--gb-bg-h: #242933;
--gb-bg: #2e3440;
--gb-bg-s: #3b4252;
--gb-bg-t: #434c5e;
--gb-bg-f: #3b4252;
--gb-fg: #d8dee9;
--gb-fg-s: #e5e9f0;
--gb-fg-t: #eceff4;
--gb-fg-f: #4c566a;
--gb-red: #bf616a;
--gb-green: #a3be8c;
--gb-yellow: #ebcb8b;
--gb-blue: #81a1c1;
--gb-purple: #b48ead;
--gb-aqua: #88c0d0;
--gb-orange: #d08770;
--gb-gray: #616e88;
--gb-border: #4c566a;
}
[data-theme="tokyo-night"] {
--gb-bg-h: #0f0f14;
--gb-bg: #1a1b26;
--gb-bg-s: #16161e;
--gb-bg-t: #292e42;
--gb-bg-f: #1f2335;
--gb-fg: #c0caf5;
--gb-fg-s: #a9b1d6;
--gb-fg-t: #9aa5ce;
--gb-fg-f: #565f89;
--gb-red: #f7768e;
--gb-green: #9ece6a;
--gb-yellow: #e0af68;
--gb-blue: #7aa2f7;
--gb-purple: #bb9af7;
--gb-aqua: #7dcfff;
--gb-orange: #ff9e64;
--gb-gray: #565f89;
--gb-border: #292e42;
}
[data-theme="catppuccin"] {
--gb-bg-h: #11111b;
--gb-bg: #1e1e2e;
--gb-bg-s: #181825;
--gb-bg-t: #313244;
--gb-bg-f: #24273a;
--gb-fg: #cdd6f4;
--gb-fg-s: #bac2de;
--gb-fg-t: #a6adc8;
--gb-fg-f: #6c7086;
--gb-red: #f38ba8;
--gb-green: #a6e3a1;
--gb-yellow: #f9e2af;
--gb-blue: #89b4fa;
--gb-purple: #cba6f7;
--gb-aqua: #94e2d5;
--gb-orange: #fab387;
--gb-gray: #6c7086;
--gb-border: #313244;
}
[data-theme="solarized-dark"] {
--gb-bg-h: #001f27;
--gb-bg: #002b36;
--gb-bg-s: #073642;
--gb-bg-t: #094959;
--gb-bg-f: #073642;
--gb-fg: #839496;
--gb-fg-s: #93a1a1;
--gb-fg-t: #eee8d5;
--gb-fg-f: #657b83;
--gb-red: #dc322f;
--gb-green: #859900;
--gb-yellow: #b58900;
--gb-blue: #268bd2;
--gb-purple: #d33682;
--gb-aqua: #2aa198;
--gb-orange: #cb4b16;
--gb-gray: #586e75;
--gb-border: #586e75;
}
[data-theme="monokai"] {
--gb-bg-h: #1a1b16;
--gb-bg: #272822;
--gb-bg-s: #1e1f1c;
--gb-bg-t: #3e3d32;
--gb-bg-f: #2d2e27;
--gb-fg: #f8f8f2;
--gb-fg-s: #e6e6e0;
--gb-fg-t: #cfcfc2;
--gb-fg-f: #75715e;
--gb-red: #f92672;
--gb-green: #a6e22e;
--gb-yellow: #e6db74;
--gb-blue: #66d9ef;
--gb-purple: #ae81ff;
--gb-aqua: #a1efe4;
--gb-orange: #fd971f;
--gb-gray: #75715e;
--gb-border: #49483e;
}
/* VS Code / GitHub Dark default-ish */
[data-theme="github-dark"] {
--gb-bg-h: #010409;
--gb-bg: #0d1117;
--gb-bg-s: #161b22;
--gb-bg-t: #30363d;
--gb-bg-f: #21262d;
--gb-fg: #e6edf3;
--gb-fg-s: #c9d1d9;
--gb-fg-t: #8b949e;
--gb-fg-f: #6e7681;
--gb-red: #f85149;
--gb-green: #3fb950;
--gb-yellow: #d29922;
--gb-blue: #58a6ff;
--gb-purple: #bc8cff;
--gb-aqua: #39c5cf;
--gb-orange: #db6d28;
--gb-gray: #8b949e;
--gb-border: #30363d;
}
html, body, #root {
@apply h-full w-full bg-gb-bg text-gb-fg font-mono;
font-size: 14px;
@@ -50,7 +229,6 @@
box-sizing: border-box;
}
/* Thin themed scrollbar for chat area */
*::-webkit-scrollbar {
width: 6px;
height: 6px;
@@ -98,7 +276,7 @@
}
.terminal-mention {
background-color: rgba(142, 192, 124, 0.12);
background-color: color-mix(in srgb, var(--gb-aqua) 12%, transparent);
color: var(--gb-aqua);
}
}