feat: Initialize the Electron frontend with core UI components and integrate Convex backend services.

This commit is contained in:
Bryan1029384756
2026-02-10 18:29:42 -06:00
parent 34e9790db9
commit 17790afa9b
64 changed files with 149216 additions and 628 deletions

View File

@@ -0,0 +1,360 @@
/* ============================================
Discord Theme System
4 themes: Light, Dark (default), Ash, Onyx
CSS class mapping:
Light → .theme-light
Dark → .theme-dark
Ash → .theme-darker
Onyx → .theme-midnight
============================================ */
/* ============================================
DARK THEME (default)
============================================ */
.theme-dark {
/* Backgrounds */
--background-base-low: #313338;
--background-base-lower: #2b2d31;
--background-base-lowest: #1e1f22;
--background-surface-high: #3c3e44;
--background-surface-higher: #3f4147;
--background-surface-highest: #43454b;
--chat-background: #313338;
--channeltextarea-background: #383a40;
--modal-background: #313338;
--panel-bg: #2b2d31;
--embed-background: #2f3136;
/* Text */
--text-default: #f2f3f5;
--text-strong: #f2f3f5;
--text-muted: #949ba4;
--text-subtle: #b5bac1;
--text-link: #00a8fc;
--channels-default: #949ba4;
--text-feedback-critical: #ed4245;
/* Interactive */
--interactive-background-hover: rgba(78, 80, 88, 0.3);
--interactive-background-active: rgba(78, 80, 88, 0.48);
--interactive-background-selected: rgba(78, 80, 88, 0.6);
--interactive-icon-default: #b5bac1;
--interactive-icon-hover: #dbdee1;
--interactive-icon-active: #ffffff;
--interactive-text-default: #b5bac1;
--interactive-text-hover: #dbdee1;
--interactive-text-active: #ffffff;
/* Borders */
--border-subtle: #1e1f22;
--border-muted: rgba(255, 255, 255, 0.04);
--border-normal: rgba(255, 255, 255, 0.2);
--border-strong: rgba(255, 255, 255, 0.44);
/* Icons */
--icon-default: #dbdee1;
--icon-strong: #ffffff;
--icon-muted: #949ba4;
--icon-subtle: #b5bac1;
/* Controls */
--control-primary-background-default: #5865f2;
--control-primary-background-hover: #4752c4;
--control-primary-background-active: #3b43a8;
--control-critical-primary-background-default: #ed4245;
/* Input */
--input-background-default: #383a40;
--input-border-default: rgba(255, 255, 255, 0.2);
--input-text-default: #dbdee1;
/* Scrollbar */
--scrollbar-auto-thumb: #1a1b1e;
--scrollbar-thin-thumb: #1a1b1e;
/* Message */
--message-background-hover: rgba(0, 0, 0, 0.06);
/* Compatibility aliases (map old names → new semantic names) */
--bg-primary: #313338;
--bg-secondary: #2b2d31;
--bg-tertiary: #1e1f22;
--text-normal: #dbdee1;
--header-primary: #f2f3f5;
--header-secondary: #b5bac1;
--interactive-normal: #b5bac1;
--interactive-hover: #dbdee1;
--interactive-active: #ffffff;
--brand-experiment: #5865f2;
--brand-experiment-hover: #4752c4;
--input-background: #383a40;
--danger: #ed4245;
--background-modifier-hover: rgba(78, 80, 88, 0.3);
--background-modifier-active: rgba(78, 80, 88, 0.48);
--background-modifier-selected: rgba(78, 80, 88, 0.6);
--div-border: #1e1f22;
}
/* ============================================
LIGHT THEME
============================================ */
.theme-light {
/* Backgrounds */
--background-base-low: #ffffff;
--background-base-lower: #f2f3f5;
--background-base-lowest: #e3e5e8;
--background-surface-high: #ffffff;
--background-surface-higher: #ffffff;
--background-surface-highest: #ffffff;
--chat-background: #ffffff;
--channeltextarea-background: #ebedef;
--modal-background: #ffffff;
--panel-bg: #f2f3f5;
--embed-background: #f2f3f5;
/* Text */
--text-default: #313338;
--text-strong: #060607;
--text-muted: #5c6470;
--text-subtle: #4e5058;
--text-link: #006ce7;
--channels-default: #5c6470;
--text-feedback-critical: #da373c;
/* Interactive */
--interactive-background-hover: rgba(116, 124, 138, 0.14);
--interactive-background-active: rgba(116, 124, 138, 0.22);
--interactive-background-selected: rgba(116, 124, 138, 0.30);
--interactive-icon-default: #4e5058;
--interactive-icon-hover: #313338;
--interactive-icon-active: #060607;
--interactive-text-default: #4e5058;
--interactive-text-hover: #313338;
--interactive-text-active: #060607;
/* Borders */
--border-subtle: rgba(0, 0, 0, 0.28);
--border-muted: rgba(0, 0, 0, 0.2);
--border-normal: rgba(0, 0, 0, 0.36);
--border-strong: rgba(0, 0, 0, 0.48);
/* Icons */
--icon-default: #313338;
--icon-strong: #060607;
--icon-muted: #5c6470;
--icon-subtle: #4e5058;
/* Controls */
--control-primary-background-default: #5865f2;
--control-primary-background-hover: #4752c4;
--control-primary-background-active: #3b43a8;
--control-critical-primary-background-default: #da373c;
/* Input */
--input-background-default: #e3e5e8;
--input-border-default: rgba(0, 0, 0, 0.36);
--input-text-default: #313338;
/* Scrollbar */
--scrollbar-auto-thumb: #c1c3c7;
--scrollbar-thin-thumb: #c1c3c7;
/* Message */
--message-background-hover: rgba(0, 0, 0, 0.06);
/* Compatibility aliases */
--bg-primary: #ffffff;
--bg-secondary: #f2f3f5;
--bg-tertiary: #e3e5e8;
--text-normal: #313338;
--header-primary: #060607;
--header-secondary: #4e5058;
--interactive-normal: #4e5058;
--interactive-hover: #313338;
--interactive-active: #060607;
--brand-experiment: #5865f2;
--brand-experiment-hover: #4752c4;
--input-background: #e3e5e8;
--danger: #da373c;
--background-modifier-hover: rgba(116, 124, 138, 0.14);
--background-modifier-active: rgba(116, 124, 138, 0.22);
--background-modifier-selected: rgba(116, 124, 138, 0.30);
--div-border: #e1e2e4;
}
/* ============================================
ASH THEME (theme-darker)
============================================ */
.theme-darker {
/* Backgrounds */
--background-base-low: #202225;
--background-base-lower: #1a1b1e;
--background-base-lowest: #111214;
--background-surface-high: #292b2f;
--background-surface-higher: #2e3035;
--background-surface-highest: #33363c;
--chat-background: #202225;
--channeltextarea-background: #252529;
--modal-background: #292b2f;
--panel-bg: #1a1b1e;
--embed-background: #242529;
/* Text */
--text-default: #f0f1f3;
--text-strong: #f5f5f7;
--text-muted: #858993;
--text-subtle: #a0a4ad;
--text-link: #00a8fc;
--channels-default: #858993;
--text-feedback-critical: #ed4245;
/* Interactive */
--interactive-background-hover: rgba(78, 80, 88, 0.15);
--interactive-background-active: rgba(78, 80, 88, 0.3);
--interactive-background-selected: rgba(78, 80, 88, 0.4);
--interactive-icon-default: #a0a4ad;
--interactive-icon-hover: #dddfe4;
--interactive-icon-active: #f5f5f7;
--interactive-text-default: #a0a4ad;
--interactive-text-hover: #dddfe4;
--interactive-text-active: #f5f5f7;
/* Borders */
--border-subtle: rgba(255, 255, 255, 0.12);
--border-muted: rgba(255, 255, 255, 0.04);
--border-normal: rgba(255, 255, 255, 0.2);
--border-strong: rgba(255, 255, 255, 0.44);
/* Icons */
--icon-default: #dddfe4;
--icon-strong: #f5f5f7;
--icon-muted: #858993;
--icon-subtle: #a0a4ad;
/* Controls */
--control-primary-background-default: #5865f2;
--control-primary-background-hover: #4752c4;
--control-primary-background-active: #3b43a8;
--control-critical-primary-background-default: #ed4245;
/* Input */
--input-background-default: #252529;
--input-border-default: rgba(255, 255, 255, 0.2);
--input-text-default: #dddfe4;
/* Scrollbar */
--scrollbar-auto-thumb: #15161a;
--scrollbar-thin-thumb: #15161a;
/* Message */
--message-background-hover: rgba(0, 0, 0, 0.08);
/* Compatibility aliases */
--bg-primary: #202225;
--bg-secondary: #1a1b1e;
--bg-tertiary: #111214;
--text-normal: #dddfe4;
--header-primary: #f5f5f7;
--header-secondary: #a0a4ad;
--interactive-normal: #a0a4ad;
--interactive-hover: #dddfe4;
--interactive-active: #f5f5f7;
--brand-experiment: #5865f2;
--brand-experiment-hover: #4752c4;
--input-background: #252529;
--danger: #ed4245;
--background-modifier-hover: rgba(78, 80, 88, 0.15);
--background-modifier-active: rgba(78, 80, 88, 0.3);
--background-modifier-selected: rgba(78, 80, 88, 0.4);
--div-border: #111214;
}
/* ============================================
ONYX THEME (theme-midnight)
============================================ */
.theme-midnight {
/* Backgrounds */
--background-base-low: #0c0c14;
--background-base-lower: #080810;
--background-base-lowest: #000000;
--background-surface-high: #141422;
--background-surface-higher: #1a1a2e;
--background-surface-highest: #202038;
--chat-background: #000000;
--channeltextarea-background: #1a1a2e;
--modal-background: #141422;
--panel-bg: #0c0c14;
--embed-background: #161626;
/* Text */
--text-default: #e0def0;
--text-strong: #f8f8fc;
--text-muted: #7a7687;
--text-subtle: #a8a5b5;
--text-link: #00a8fc;
--channels-default: #7a7687;
--text-feedback-critical: #ed4245;
/* Interactive */
--interactive-background-hover: rgba(78, 73, 106, 0.2);
--interactive-background-active: rgba(78, 73, 106, 0.36);
--interactive-background-selected: rgba(78, 73, 106, 0.48);
--interactive-icon-default: #a8a5b5;
--interactive-icon-hover: #e0def0;
--interactive-icon-active: #f8f8fc;
--interactive-text-default: #a8a5b5;
--interactive-text-hover: #e0def0;
--interactive-text-active: #f8f8fc;
/* Borders */
--border-subtle: rgba(255, 255, 255, 0.2);
--border-muted: rgba(255, 255, 255, 0.16);
--border-normal: rgba(255, 255, 255, 0.24);
--border-strong: rgba(255, 255, 255, 0.44);
/* Icons */
--icon-default: #e0def0;
--icon-strong: #f8f8fc;
--icon-muted: #7a7687;
--icon-subtle: #a8a5b5;
/* Controls */
--control-primary-background-default: #5865f2;
--control-primary-background-hover: #4752c4;
--control-primary-background-active: #3b43a8;
--control-critical-primary-background-default: #ed4245;
/* Input */
--input-background-default: #1a1a2e;
--input-border-default: rgba(255, 255, 255, 0.24);
--input-text-default: #e0def0;
/* Scrollbar */
--scrollbar-auto-thumb: #1a1a2e;
--scrollbar-thin-thumb: #1a1a2e;
/* Message */
--message-background-hover: rgba(0, 0, 0, 0.12);
/* Compatibility aliases */
--bg-primary: #0c0c14;
--bg-secondary: #080810;
--bg-tertiary: #000000;
--text-normal: #e0def0;
--header-primary: #f8f8fc;
--header-secondary: #a8a5b5;
--interactive-normal: #a8a5b5;
--interactive-hover: #e0def0;
--interactive-active: #f8f8fc;
--brand-experiment: #5865f2;
--brand-experiment-hover: #4752c4;
--input-background: #1a1a2e;
--danger: #ed4245;
--background-modifier-hover: rgba(78, 73, 106, 0.2);
--background-modifier-active: rgba(78, 73, 106, 0.36);
--background-modifier-selected: rgba(78, 73, 106, 0.48);
--div-border: #080810;
}