├── .gitignore
├── LICENSE
├── README.md
├── assets
├── 2024-01-14-022114_hyprshot.png
├── 2024-01-14-022145_hyprshot.png
├── 2024-01-14-022241_hyprshot.png
├── 2024-01-14-022423_hyprshot.png
├── nix1.png
├── nix2.png
├── nix3.png
├── nix4.png
├── nix5.png
├── preview.gif
├── swappy-20240810_031322.png
├── swappy-20240810_031551.png
├── swappy-20240810_031610.png
├── swappy-20240810_031628.png
├── swappy-20240810_031657.png
├── swappy-20240924_214828.png
├── swappy-20241011_013212.png
├── swappy-20241011_013305.png
├── swappy-20241011_013320.png
├── swappy-20241011_013333.png
├── swappy-20241011_013405.png
├── swappy-20241011_013421.png
├── swappy-20241011_013439.png
├── swappy-20241011_013456.png
├── swappy-20241011_013514.png
└── swappy-20241011_013532.png
├── build-themecord.sh
├── css
├── Themecord.css
├── ThemecordFiller.css
├── ThemecordFiller2nd.css
├── dark_theme.css
├── hellwal
│ └── discord-colors.css
├── light_theme.css
├── pywal
│ └── discord-colors.css
└── wallust
│ ├── discord-colors.css
│ └── wallust.toml
├── default.nix
├── example
├── example.sh
└── test-wallpaper.jpg
├── flake.lock
├── flake.nix
├── midnight.css
├── nix
├── hellwal.nix
├── pywal.nix
└── wallust.nix
├── scripts
└── themecord.sh
└── themecord
/.gitignore:
--------------------------------------------------------------------------------
1 | *result/*
2 |
--------------------------------------------------------------------------------
/LICENSE:
--------------------------------------------------------------------------------
1 | MIT License
2 |
3 | Copyright (c) 2024 danihek
4 |
5 | Permission is hereby granted, free of charge, to any person obtaining a copy
6 | of this software and associated documentation files (the "Software"), to deal
7 | in the Software without restriction, including without limitation the rights
8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9 | copies of the Software, and to permit persons to whom the Software is
10 | furnished to do so, subject to the following conditions:
11 |
12 | The above copyright notice and this permission notice shall be included in all
13 | copies or substantial portions of the Software.
14 |
15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21 | SOFTWARE.
22 |
--------------------------------------------------------------------------------
/README.md:
--------------------------------------------------------------------------------
1 | # Themecord
2 |
3 | Discord theme that will always match your wallpaper!
4 |
5 |
6 |
7 |
8 | Click to expand star history
9 |
10 |
14 |
15 |
16 |
17 | ## Why?
18 | Because why not, I like having same theme on everything I thought it's cool.
19 |
20 | ## Dependecies
21 | - Compatible discord client
22 | - One of color palettes generators:
23 | - [hellwal](https://github.com/danihek/hellwal)
24 | - [python-pywal](https://github.com/dylanaraps/pywal)
25 | - [wallust](https://codeberg.org/onemoresuza/wallust)
26 |
27 | ## Supported Clients:
28 | - Vencord
29 | - Vesktop
30 |
31 | ## Installation
32 |
33 | ### AUR
34 | ``yay -S themecord``
35 |
36 | ### Manual
37 |
38 | 1. Install supported discord client
39 | 2. Download themecord from [release](https://github.com/danihek/Themecord/releases) page
40 | 3. Look into **# Generating colorscheme** Section
41 | 4. In your discord client, go to themes and select Themecord from available themes.
42 | 5. Now after you run hellwal, pywal or wallust run ``./themecord`` and your discord theme will be applied.
43 |
44 | You can put it in ``/usr/local/bin/`` for ease of use
45 |
46 | ### NixOS
47 | 1. Add themecord to inputs(just like home-manager) in your config flake:
48 | ```
49 | themecord = {
50 | url = "github:danihek/themecord";
51 | inputs.nixpkgs.follows = "nixpkgs";
52 | };
53 | ```
54 |
55 | 2. Add as a module:
56 | ```
57 | ({ config, pkgs, ... }: {
58 | environment.systemPackages = with pkgs; [
59 | themecord.packages.x86_64-linux.default
60 | ];
61 | })
62 | ```
63 | (Example from my config)
64 |
65 | 
66 |
67 | 3. Rebuild your configuration and run ``themecord``
68 |
69 | 4. Go to discord client and select Themecord from available themes
70 |
71 | 
72 |
73 | 6. Now after you run hellwal, pywal or wallust run ``./themecord`` and your discord theme will be applied.
74 | and your discord client will update it's theme.
75 |
76 | ## Nix
77 | In folder ``./nix`` you can see example how I added to my flake hellwal, wallust and pywal templates.
78 |
79 | ---
80 |
81 | ## Generating colorscheme
82 | Before you even start doing **ANYTHING**, you have to choose if you wanna use pywal or wallust
83 |
84 | ### In case of hellwal you have to copy css file:
85 | ``./css/hellwal/discord-colors.css`` to ``~/.config/hellwal/templates/`` folder
86 |
87 | ### in case of pywal:
88 | ``./css/pywal/discord-colors.css`` to ``~/.config/wal/templates/`` folder
89 |
90 | ### and in case of wallust:
91 | ``./css/wallust/discord-colors.css`` to ``~/.config/wallust/templates/`` folder
92 |
93 | also add to ``~/.config/wallust/wallust.toml`` required config:
94 |
95 | ```
96 | [templates]
97 | themecord.template = "discord-colors.css"
98 | themecord.target = '~/.cache/wallust/discord-colors.css'
99 | ```
100 |
101 | ## Example usage
102 |
103 | In folder ``./example`` you see example script which you can use as your template in your own script/config for changing wallpapers and edit to your needs.
104 |
105 | ## Light mode
106 |
107 | You can use `-l` flag to use light mode like this (**hellwal** as backend ):
108 |
109 | ```sh
110 | themecord -l
111 | ```
112 |
113 | # Enjoy theme'in!!
114 |
115 | ## Showcase
116 |
117 | 
118 | 
119 | 
120 | 
121 | 
122 | 
123 | 
124 | 
125 | 
126 | 
127 | 
128 | 
129 | 
130 |
131 | ## Special thanks
132 |
133 | - [dylanaraps](https://github.com/dylanaraps) for creating pywal and inspiration for other programmers
134 | - [refact0r](https://github.com/refact0r) for fixing miserable discord update and providing pretty and well-built discord theme
135 |
--------------------------------------------------------------------------------
/assets/2024-01-14-022114_hyprshot.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/danihek/Themecord/2117717f830c4847eafc450319de26ae09ac9277/assets/2024-01-14-022114_hyprshot.png
--------------------------------------------------------------------------------
/assets/2024-01-14-022145_hyprshot.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/danihek/Themecord/2117717f830c4847eafc450319de26ae09ac9277/assets/2024-01-14-022145_hyprshot.png
--------------------------------------------------------------------------------
/assets/2024-01-14-022241_hyprshot.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/danihek/Themecord/2117717f830c4847eafc450319de26ae09ac9277/assets/2024-01-14-022241_hyprshot.png
--------------------------------------------------------------------------------
/assets/2024-01-14-022423_hyprshot.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/danihek/Themecord/2117717f830c4847eafc450319de26ae09ac9277/assets/2024-01-14-022423_hyprshot.png
--------------------------------------------------------------------------------
/assets/nix1.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/danihek/Themecord/2117717f830c4847eafc450319de26ae09ac9277/assets/nix1.png
--------------------------------------------------------------------------------
/assets/nix2.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/danihek/Themecord/2117717f830c4847eafc450319de26ae09ac9277/assets/nix2.png
--------------------------------------------------------------------------------
/assets/nix3.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/danihek/Themecord/2117717f830c4847eafc450319de26ae09ac9277/assets/nix3.png
--------------------------------------------------------------------------------
/assets/nix4.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/danihek/Themecord/2117717f830c4847eafc450319de26ae09ac9277/assets/nix4.png
--------------------------------------------------------------------------------
/assets/nix5.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/danihek/Themecord/2117717f830c4847eafc450319de26ae09ac9277/assets/nix5.png
--------------------------------------------------------------------------------
/assets/preview.gif:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/danihek/Themecord/2117717f830c4847eafc450319de26ae09ac9277/assets/preview.gif
--------------------------------------------------------------------------------
/assets/swappy-20240810_031322.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/danihek/Themecord/2117717f830c4847eafc450319de26ae09ac9277/assets/swappy-20240810_031322.png
--------------------------------------------------------------------------------
/assets/swappy-20240810_031551.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/danihek/Themecord/2117717f830c4847eafc450319de26ae09ac9277/assets/swappy-20240810_031551.png
--------------------------------------------------------------------------------
/assets/swappy-20240810_031610.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/danihek/Themecord/2117717f830c4847eafc450319de26ae09ac9277/assets/swappy-20240810_031610.png
--------------------------------------------------------------------------------
/assets/swappy-20240810_031628.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/danihek/Themecord/2117717f830c4847eafc450319de26ae09ac9277/assets/swappy-20240810_031628.png
--------------------------------------------------------------------------------
/assets/swappy-20240810_031657.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/danihek/Themecord/2117717f830c4847eafc450319de26ae09ac9277/assets/swappy-20240810_031657.png
--------------------------------------------------------------------------------
/assets/swappy-20240924_214828.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/danihek/Themecord/2117717f830c4847eafc450319de26ae09ac9277/assets/swappy-20240924_214828.png
--------------------------------------------------------------------------------
/assets/swappy-20241011_013212.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/danihek/Themecord/2117717f830c4847eafc450319de26ae09ac9277/assets/swappy-20241011_013212.png
--------------------------------------------------------------------------------
/assets/swappy-20241011_013305.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/danihek/Themecord/2117717f830c4847eafc450319de26ae09ac9277/assets/swappy-20241011_013305.png
--------------------------------------------------------------------------------
/assets/swappy-20241011_013320.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/danihek/Themecord/2117717f830c4847eafc450319de26ae09ac9277/assets/swappy-20241011_013320.png
--------------------------------------------------------------------------------
/assets/swappy-20241011_013333.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/danihek/Themecord/2117717f830c4847eafc450319de26ae09ac9277/assets/swappy-20241011_013333.png
--------------------------------------------------------------------------------
/assets/swappy-20241011_013405.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/danihek/Themecord/2117717f830c4847eafc450319de26ae09ac9277/assets/swappy-20241011_013405.png
--------------------------------------------------------------------------------
/assets/swappy-20241011_013421.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/danihek/Themecord/2117717f830c4847eafc450319de26ae09ac9277/assets/swappy-20241011_013421.png
--------------------------------------------------------------------------------
/assets/swappy-20241011_013439.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/danihek/Themecord/2117717f830c4847eafc450319de26ae09ac9277/assets/swappy-20241011_013439.png
--------------------------------------------------------------------------------
/assets/swappy-20241011_013456.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/danihek/Themecord/2117717f830c4847eafc450319de26ae09ac9277/assets/swappy-20241011_013456.png
--------------------------------------------------------------------------------
/assets/swappy-20241011_013514.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/danihek/Themecord/2117717f830c4847eafc450319de26ae09ac9277/assets/swappy-20241011_013514.png
--------------------------------------------------------------------------------
/assets/swappy-20241011_013532.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/danihek/Themecord/2117717f830c4847eafc450319de26ae09ac9277/assets/swappy-20241011_013532.png
--------------------------------------------------------------------------------
/build-themecord.sh:
--------------------------------------------------------------------------------
1 | #!/usr/bin/env bash
2 |
3 | set -xe
4 |
5 | TARGET=themecord
6 |
7 | echo "#!/usr/bin/env sh" > themecord
8 | echo -e "\n#This is generated by themecord builder!" >> themecord
9 |
10 | # first filler
11 | echo "themecordFiller=\$(cat << 'EOF'" >> themecord
12 | cat ./css/ThemecordFiller.css >> themecord
13 | echo -e "EOF\n)\n" >> themecord
14 |
15 | # dark theme variable
16 | echo "dark_theme=\$(cat << 'EOF'" >> themecord
17 | cat ./css/dark_theme.css >> themecord
18 | echo -e "EOF\n)\n" >> themecord
19 |
20 | # light theme variable
21 | echo "light_theme=\$(cat << 'EOF'" >> themecord
22 | cat ./css/light_theme.css >> themecord
23 | echo -e "EOF\n)\n" >> themecord
24 |
25 | # filler after root { css section
26 | echo "themecordFiller2=\$(cat << 'EOF'" >> themecord
27 | cat ./css/ThemecordFiller2nd.css >> themecord
28 | echo -e "EOF\n)\n" >> themecord
29 |
30 | echo "themecordBase=\$(cat << 'EOF'" >> themecord
31 | cat ./css/Themecord.css >> themecord
32 | echo -e "EOF\n)\n" >> themecord
33 |
34 | cat ./scripts/themecord.sh >> themecord
35 |
36 | chmod +x themecord
37 |
--------------------------------------------------------------------------------
/css/Themecord.css:
--------------------------------------------------------------------------------
1 | /**
2 | * @name Themecord
3 | * @author danihek
4 | * @version 1.1.0
5 | * @description Discord theme compatible with your wallpaper!
6 | * @authorId 518107210803576852
7 | * @source https://github.com/danihek/Themecord
8 | */
9 |
--------------------------------------------------------------------------------
/css/ThemecordFiller.css:
--------------------------------------------------------------------------------
1 | }
2 |
3 | /* main.css */
4 | @import url('https://fonts.googleapis.com/css2?family=Figtree:ital,wght@0,300;0,400;0,500;0,600;0,700;0,800;0,900;1,300;1,400;1,500;1,600;1,700;1,800;1,900&display=swap');
5 |
6 | :root {
7 | container-name: root;
8 | --custom-guild-list-padding: 12px;
9 | --panel-backdrop-filter: none;
10 | }
11 |
12 | body {
13 | container-name: body;
14 |
15 | /* font, change to '' for default discord font */
16 | --font: 'figtree';
17 |
18 | /* sizes */
19 | --gap: 12px; /* spacing between panels */
20 | --divider-thickness: 4px; /* thickness of unread messages divider and highlighted message borders */
21 | }
22 |
23 | .visual-refresh {
24 | /* panel separation */
25 | .guilds_c48ade /* server list */,
26 | .sidebarList_c48ade /* channel list (includes dm list) */,
27 | .panels_c48ade /* user panel */,
28 | .chat_f75fb0 > .subtitleContainer_f75fb0 /* chat titlebar */,
29 | .chatContent_f75fb0 /* chat */,
30 | .container_c8ffbb /* member list */,
31 | .content_f75fb0 > .membersWrap_c8ffbb /* forum post member list */,
32 | .container__133bf > .container__9293f /* friends titlebar */,
33 | .container_f391e3 > .container__9293f /* message requests titlebar */,
34 | .homeWrapper__0920e > .container__9293f /* nitro page titlebar */,
35 | .container__01ae2 > .container__9293f /* vc chat titlebar */,
36 | .container_fb64c9 > .container__9293f /* new thread panel */,
37 | .peopleColumn__133bf /* online friends */,
38 | .nowPlayingColumn__133bf /* active now */,
39 | .scroller_c880e8 /* nitro page */,
40 | .container_f391e3 > .content_f75fb0 /* message requests */,
41 | .shop__6db1d /* shop */,
42 | .outer_c0bea0.panel_c0bea0 /* dm user panel */,
43 | .searchResultsWrap_a9e706 /* search results */,
44 | .container_f369db /* forum */,
45 | .chat_fb64c9 /* new thread panel */,
46 | .container_a592e1 /* server discovery */,
47 | .callContainer_cb9592 /* vc container */,
48 | .callContainer__722ff /* stage */ {
49 | background-color: var(--background-base-lower);
50 | border-radius: var(--radius-lg);
51 | border: 1px solid var(--border-subtle);
52 | backdrop-filter: var(--panel-backdrop-filter);
53 | }
54 |
55 | .base_c48ade /* base grid */ {
56 | display: grid;
57 | grid-template-columns: [start] min-content [guildsEnd] min-content [channelsEnd] 1fr [end];
58 | grid-template-rows: [top] var(--custom-app-top-bar-height) [titleBarEnd] min-content [noticeEnd] 1fr [contentEnd] min-content [end];
59 | grid-template-areas:
60 | 'titleBar titleBar titleBar'
61 | 'guildsList notice notice'
62 | 'guildsList channelsList page'
63 | 'userPanel userPanel page';
64 | gap: 0 var(--gap);
65 | }
66 |
67 | .panels_c48ade /* user panel */ {
68 | width: 100%;
69 | position: static;
70 | grid-area: userPanel;
71 | margin: var(--gap) 0 0 0;
72 | overflow: hidden;
73 | max-width: calc(var(--custom-guild-sidebar-width) + var(--gap) + 4px);
74 | }
75 |
76 | .sidebar_c48ade /* server list + channel list + user panel group */ {
77 | margin: 0 0 var(--gap) var(--gap);
78 | }
79 |
80 | .guilds_c48ade /* server list */ {
81 | margin-bottom: 0;
82 | }
83 | .scroller_ef3116 /* server list inner scroller */ {
84 | padding-top: var(--custom-guild-list-padding);
85 | }
86 |
87 | .container__2637a /* channel list inner */ {
88 | padding-bottom: 0;
89 | }
90 | .clickable_f37cb1,
91 | .container__2637a /* channel list inner */,
92 | .header_f37cb1 /* server name */ {
93 | background: none;
94 | }
95 |
96 | /* fix discord's idiotic server banners */
97 | .bannerImage_f37cb1,
98 | .bannerImg_f37cb1 {
99 | width: 100%;
100 | }
101 | .bannerVisible_f37cb1 .headerEllipseBackdrop_f37cb1 {
102 | display: none;
103 | }
104 | .headerGlass_f37cb1 {
105 | top: 0;
106 | left: 0;
107 | right: 0;
108 | width: auto;
109 | border-radius: var(--radius-lg) var(--radius-lg) 0 0;
110 | }
111 |
112 | .sidebar_c48ade:after /* server list + channel list bottom shadow */ {
113 | display: none;
114 | }
115 |
116 | .chat_f75fb0 /* chat group outer */ {
117 | border: none !important;
118 | background: none;
119 | }
120 | .container__133bf /* friends page group outer */,
121 | .page_c48ade {
122 | padding-bottom: var(--gap);
123 | padding-right: var(--gap);
124 | border: none !important;
125 | background: none;
126 | }
127 | .page_c48ade > .chat_f75fb0,
128 | .page_c48ade > .container__133bf {
129 | padding: 0;
130 | }
131 |
132 | .container__9293f /* friends, message requests, + other stuff titlebar */ {
133 | margin-bottom: var(--gap);
134 | }
135 |
136 | .subtitleContainer_f75fb0 /* chat titlebar */ {
137 | margin-bottom: var(--gap);
138 | }
139 | .title_f75fb0 /* chat titlebar inner */ {
140 | border: none;
141 | background: none;
142 | margin-bottom: 0;
143 | }
144 |
145 | .chatContent_f75fb0 /* chat */ {
146 | overflow: hidden;
147 | }
148 |
149 | .container_c8ffbb /* member list */ {
150 | margin-left: var(--gap);
151 | overflow: hidden;
152 | height: auto;
153 | min-width: var(--custom-member-list-width);
154 | }
155 | .content_f75fb0 > .membersWrap_c8ffbb /* forum post member list */ {
156 | margin-left: var(--gap);
157 | overflow: hidden;
158 | height: auto;
159 | }
160 | .members_c8ffbb /* member list inner */,
161 | .member_c8ffbb /* member list item */ {
162 | background: none;
163 | }
164 |
165 | .resizeHandle__01ae2 /* resize handle */ {
166 | background: transparent;
167 | }
168 |
169 | .privateChannels__35e86 /* dm list */,
170 | .scroller__99e7c /* dm list inner */ {
171 | background: none;
172 | }
173 | .scroller__99e7c /* dm list inner */ {
174 | margin-bottom: 0;
175 | }
176 |
177 | .tabBody__133bf /* online friends + active now group outer */ {
178 | background: none;
179 | }
180 |
181 | .nowPlayingColumn__133bf /* active now */ {
182 | margin-left: var(--gap);
183 | }
184 | .container__7d20c /* active now inner */ {
185 | background: none;
186 | }
187 | .scroller__7d20c /* active now inner */ {
188 | border: none;
189 | }
190 |
191 | .homeWrapper__0920e /* nitro page group inner */ {
192 | border: none;
193 | background: none;
194 | }
195 | .applicationStore_f07d62 /* nitro page group outer */ {
196 | background: none;
197 | }
198 |
199 | .shop__6db1d /* shop */ {
200 | overflow: hidden;
201 | height: auto;
202 | }
203 | .shop__08415 /* shop inner scroller */ {
204 | margin-top: calc(var(--custom-channel-header-height) * -1 - 16px);
205 | }
206 |
207 | .outer_c0bea0.panel_c0bea0 /* dm user panel */ {
208 | margin-left: var(--gap);
209 | overflow: hidden;
210 | height: auto;
211 | min-width: 340px;
212 | }
213 |
214 | .searchResultsWrap_a9e706 /* search results */ {
215 | margin-left: var(--gap);
216 | }
217 |
218 | .notice__6e2b9 /* notice banner */ {
219 | margin: 0 var(--gap) var(--gap) 0;
220 | border-radius: var(--radius-md);
221 | }
222 |
223 | .container__01ae2 /* vc chat + titlebar group */ {
224 | border: none;
225 | background: none;
226 | }
227 | .chat_ee72fa::before /* vc chat shadow */ {
228 | display: none;
229 | }
230 | .channelChatWrapper_cb9592 /* vc chat + titlebar group outer */ {
231 | background: none;
232 | }
233 |
234 | .page_c48ade > div > .chatLayerWrapper__01ae2 /* forum/thread chat outer */ {
235 | margin: 0 var(--gap) var(--gap) 0;
236 | height: calc(100% - var(--gap));
237 | }
238 | .container__01ae2 /* forum/thread chat */ {
239 | padding-left: calc((var(--gap) - var(--chat-resize-handle-width)));
240 | }
241 |
242 | .container_fb64c9 /* new thread panel */ {
243 | background: none;
244 | }
245 | .chat_fb64c9::before /* new thread panel chat shadow */ {
246 | display: none;
247 | }
248 |
249 | .container_a592e1 /* server discovery */ {
250 | overflow: hidden;
251 | }
252 | .backdrop__8a7fc /* server discovery top bar */ {
253 | background-color: var(--background-base-lower);
254 | }
255 |
256 | .wrapper_cb9592 /* dm vc wrapper */ {
257 | background: none;
258 | margin-bottom: var(--gap);
259 | }
260 |
261 | /* remove excess background from settings */
262 | .standardSidebarView__23e6b,
263 | .contentRegion__23e6b,
264 | .sidebarRegionScroller__23e6b,
265 | .contentRegionScroller__23e6b {
266 | background: none;
267 | }
268 | .standardSidebarView__23e6b {
269 | backdrop-filter: var(--panel-backdrop-filter);
270 | }
271 |
272 | /* remove excess backgrounds */
273 | .wrapper_d852db /* message loading placeholders */,
274 | .wrapper_d852db > .wrapper_fc8177 {
275 | background: none;
276 | }
277 |
278 | .newMessagesBar__0f481 /* unread messages bar */ {
279 | top: 12px;
280 | left: 12px;
281 | right: 12px;
282 | border-radius: var(--radius-sm);
283 | padding: 0 8px;
284 | }
285 |
286 | .bottom__7aaec /* channel list new unreads pill */ {
287 | bottom: 12px;
288 | }
289 |
290 | .unreadMentionsIndicatorBottom_ef3116 /* server list new pill */,
291 | .unreadMentionsIndicatorTop_ef3116 {
292 | width: calc(var(--guildbar-avatar-size) + var(--custom-guild-list-padding) * 2);
293 | padding: calc(var(--custom-guild-list-padding) / 2);
294 | }
295 |
296 | /* jank ass solution to only apply padding to treatment 3 */
297 | .form_f75fb0 /* chat bar outer form */ {
298 | --space-8: 16px;
299 | }
300 | .channelBottomBarArea_f75fb0 /* chat bar inner */ {
301 | --space-8: 8px;
302 | }
303 |
304 | /* get rid of extra space in treatment 2 */
305 | .accessoryBar__74017 {
306 | padding-top: 0;
307 | }
308 |
309 | /* general chat bar improvements */
310 | .channelTextArea_f75fb0 /* chat bar */ {
311 | border-radius: var(--radius-md);
312 | }
313 | .themedBackground__74017 /* chat bar inner */ {
314 | background: none;
315 | }
316 | .slateTextArea_ec4baf /* actual typing area */ {
317 | margin-left: 2px;
318 | }
319 |
320 | /* improve unread divider */
321 | .divider__908e2 {
322 | border-width: var(--divider-thickness);
323 | border-radius: var(--divider-thickness);
324 | }
325 | .endCap__908e2 {
326 | margin-top: calc(var(--divider-thickness) / -2);
327 | }
328 | .divider__908e2 .content__908e2 {
329 | margin-top: calc(var(--divider-thickness) - var(--divider-thickness) * 2);
330 | }
331 |
332 | /* improve highlight message left edge */
333 | .message__5126c.mentioned__5126c::before,
334 | .replying__5126c::before,
335 | .ephemeral__5126c::before {
336 | width: var(--divider-thickness);
337 | border-radius: var(--divider-thickness);
338 | height: calc(100% - 2 * var(--radius-sm));
339 | top: var(--radius-sm);
340 | left: calc(var(--divider-thickness) / -2 + 1px);
341 | left: calc(var(--radius-sm) / 2);
342 | }
343 |
344 | .message__5126c {
345 | border-radius: var(--radius-md);
346 | margin-left: 4px;
347 | }
348 |
349 | /* improve server selected marker */
350 | .pill_e5445c.wrapper__58105 {
351 | width: calc((var(--custom-guild-list-padding) - 4px) / 2 + 4px);
352 | }
353 | .item__58105 {
354 | width: 4px;
355 | border-radius: 4px;
356 | margin-left: calc((var(--custom-guild-list-padding) - 4px) / 2);
357 | }
358 |
359 | /* improve embeds */
360 | .embedFull__623de {
361 | border: 4px solid var(--border-normal);
362 | border-top-color: var(--border-subtle) !important;
363 | border-top-width: 1px;
364 | border-bottom-color: var(--border-subtle) !important;
365 | border-bottom-width: 1px;
366 | border-right-color: var(--border-subtle) !important;
367 | border-right-width: 1px;
368 | }
369 |
370 | /* improve borders */
371 | .reaction__23977 /* message reactions */,
372 | .reactionBtn__23977.forceShow__23977 /* add reaction button */ {
373 | border-width: 2px;
374 | }
375 |
376 | /* roundness */
377 | .embedFull__623de /* embeds */,
378 | .hljs /* code block */,
379 | .imageWrapper_af017a /* image */,
380 | .container__9271d /* thread link */ {
381 | border-radius: var(--radius-md);
382 | }
383 |
384 | .outer_c0bea0 /* profile outer */,
385 | .contentWrapper__08434 /* gif panel */ {
386 | border-radius: var(--radius-lg);
387 | }
388 | .inner_c0bea0 /* profile inner */ {
389 | border-radius: calc(var(--radius-lg) - 4px);
390 | }
391 |
392 | .outer_c0bea0 /* profile outer */ {
393 | border: 1px solid var(--border-subtle);
394 | }
395 | .root__24502 {
396 | background: none;
397 | }
398 |
399 | /* remove unnecessary backgrounds */
400 | .app__160d8,
401 | #app-mount,
402 | body {
403 | background: transparent !important;
404 | }
405 | }
406 |
407 | body {
408 | --font-primary: var(--font), 'gg sans';
409 | --font-display: var(--font), 'gg sans';
410 | }
411 |
412 | [class*='scroll'] {
413 | will-change: scroll-position;
414 | }
415 | .burstGlow__23977 {
416 | display: none;
417 | }
418 |
419 | /* animations.css */
420 | @property --animations {
421 | syntax: 'on | off';
422 | inherits: false;
423 | initial-value: on;
424 | }
425 |
426 | body {
427 | --list-item-transition: 0.2s ease; /* transition for list items */
428 | --dms-icon-svg-transition: 0.4s ease; /* transition for the dms icon */
429 | }
430 |
431 | @container body style(--animations: on) {
432 | .visual-refresh {
433 | /* list hover animations */
434 | .wrapper__2ea32 .link__2ea32 /* channels */,
435 | .container__91a9d /* members */,
436 | .channel__972a0 /* dms */,
437 | .side_b3f026 .item_b3f026 /* settings */ {
438 | transition: margin-left var(--list-item-transition);
439 | will-change: margin-left;
440 | }
441 | .wrapper__2ea32:hover .link__2ea32,
442 | .side_b3f026 .item_b3f026:hover {
443 | margin-left: 10px;
444 | }
445 | .container__91a9d:hover,
446 | .channel__972a0:hover {
447 | margin-left: 18px;
448 | }
449 | /* list hover channel dot */
450 | .unread__2ea32 {
451 | border-radius: 50%;
452 | width: 8px;
453 | height: 8px;
454 | margin-left: -4px;
455 | transition: var(--list-item-transition);
456 | will-change: margin-left;
457 | }
458 | .wrapper__2ea32:hover .unread__2ea32 {
459 | margin-left: 4px;
460 | }
461 | .typeThread__2ea32 .unread__2ea32 {
462 | left: -31px;
463 | }
464 | }
465 | }
466 |
467 | /* background-image.css */
468 | @property --background-image {
469 | syntax: 'on | off';
470 | inherits: false;
471 | initial-value: off;
472 | }
473 |
474 | body {
475 | --background-image-url: url('');
476 | }
477 |
478 | @container body style(--background-image: on) {
479 | .visual-refresh .bg__960e4 {
480 | background: var(--background-image-url);
481 | background-size: cover;
482 | background-position: center;
483 | }
484 | }
485 |
486 | /* colors.css */
487 | @property --colors {
488 | syntax: 'on | off';
489 | inherits: false;
490 | initial-value: on;
491 | }
492 |
493 |
--------------------------------------------------------------------------------
/css/ThemecordFiller2nd.css:
--------------------------------------------------------------------------------
1 | @container root style(--colors: on) {
2 | .visual-refresh body,
3 | .visual-refresh .theme-dark,
4 | .visual-refresh .theme-light:not(.custom-profile-theme) {
5 | --activity-card-background: red;
6 | --alert-bg: red;
7 | --autocomplete-bg: var(--bg-3);
8 |
9 | --background-accent: var(--bg-2);
10 | --background-floating: var(--bg-3);
11 | --background-nested-floating: var(--bg-4);
12 | --background-mentioned: var(--mention);
13 | --background-mentioned-hover: var(--mention-hover);
14 | --background-message-automod: red;
15 | --background-message-automod-hover: red;
16 | --background-message-highlight: var(--reply);
17 | --background-message-highlight-hover: var(--reply-hover);
18 | --background-message-hover: var(--message-hover);
19 |
20 | --background-primary: var(--bg-4);
21 | --background-secondary: var(--bg-3);
22 | --background-secondary-alt: var(--bg-3);
23 | --background-tertiary: var(--bg-4);
24 |
25 | --bg-base-primary: var(--bg-4); /* screenshare window? */
26 | --bg-base-secondary: var(--bg-4);
27 | --bg-base-tertiary: var(--bg-3);
28 | --background-mod-subtle: var(--bg-3);
29 | --background-mod-normal: var(--bg-3);
30 | --background-mod-strong: var(--bg-3);
31 | --background-base-low: var(--bg-4);
32 | --background-base-lower: var(--bg-4);
33 | --background-base-lowest: var(--bg-4);
34 | --background-surface-high: var(--bg-3);
35 | --background-surface-higher: var(--bg-3);
36 | --background-surface-highest: var(--bg-3);
37 | --bg-surface-overlay: var(--bg-4);
38 | --bg-surface-raised: var(--bg-3);
39 | --chat-background-default: var(--bg-3);
40 | --input-background: var(--bg-3);
41 | --modal-background: var(--bg-4);
42 | --modal-footer-background: var(--bg-4);
43 |
44 | --background-modifier-accent: var(--hover);
45 | --background-modifier-active: var(--active);
46 | --background-modifier-hover: var(--hover);
47 | --background-modifier-selected: var(--active);
48 |
49 | --bg-mod-faint: var(--hover);
50 | --bg-mod-subtle: var(--bg-2);
51 | --bg-mod-strong: var(--bg-2);
52 | --bg-brand: var(--accent-2);
53 |
54 | --border-faint: var(--border-light);
55 | --border-subtle: var(--border);
56 | --border-normal: var(--border);
57 | --border-strong: var(--border);
58 | --input-border: var(--border);
59 |
60 | --button-danger-background: var(--red-3);
61 | --button-danger-background-active: var(--red-5);
62 | --button-danger-background-hover: var(--red-4);
63 | --button-danger-background-disabled: var(--red-5);
64 | --button-danger-border: var(--button-border);
65 |
66 | --button-filled-brand-text: var(--text-0);
67 | --button-filled-brand-background: var(--accent-3);
68 | --button-filled-brand-background-active: var(--accent-5);
69 | --button-filled-brand-background-hover: var(--accent-4);
70 | --button-filled-brand-border: var(--button-border);
71 |
72 | --button-filled-brand-inverted-background: var(--text-1);
73 | --button-filled-brand-inverted-background-active: var(--text-3);
74 | --button-filled-brand-inverted-background-hover: var(--text-2);
75 | --button-filled-brand-inverted-text: var(--bg-4);
76 | --button-filled-white-background: var(--text-1);
77 | --button-filled-white-background-active: var(--text-3);
78 | --button-filled-white-background-hover: var(--text-2);
79 | --button-filled-white-text: var(--bg-4);
80 |
81 | --button-outline-danger-background: var(--bg-2);
82 | --button-outline-danger-background-active: var(--text-5);
83 | --button-outline-danger-background-hover: var(--bg-1);
84 | --button-outline-danger-border: var(--border-light);
85 | --button-outline-danger-border-active: var(--border-light);
86 | --button-outline-danger-border-hover: var(--border-light);
87 | --button-outline-danger-text: var(--red-1);
88 | --button-outline-danger-text-active: var(--red-1);
89 | --button-outline-danger-text-hover: var(--red-1);
90 |
91 | --button-outline-primary-background: red;
92 | --button-outline-primary-background-active: var(--active);
93 | --button-outline-primary-background-hover: var(--hover);
94 | --button-outline-primary-border: var(--text-5);
95 | --button-outline-primary-border-active: var(--text-5);
96 | --button-outline-primary-border-hover: var(--text-5);
97 | --button-outline-primary-text: var(--text-3);
98 | --button-outline-primary-text-active: var(--text-3);
99 | --button-outline-primary-text-hover: var(--text-3);
100 |
101 | --button-outline-positive-background: red;
102 | --button-outline-positive-background-active: var(--green-4);
103 | --button-outline-positive-background-hover: var(--green-3);
104 | --button-outline-positive-border: var(--green-2);
105 | --button-outline-positive-border-active: var(--green-4);
106 | --button-outline-positive-border-hover: var(--green-3);
107 | --button-outline-positive-text: var(--text-3);
108 | --button-outline-positive-text-active: var(--text-0);
109 | --button-outline-positive-text-hover: var(--text-0);
110 |
111 | --button-positive-background: var(--green-2);
112 | --button-positive-background-active: var(--green-4);
113 | --button-positive-background-hover: var(--green-3);
114 | --button-positive-background-disabled: var(--green-4);
115 | --button-positive-border: var(--button-border);
116 |
117 | --button-secondary-background: var(--bg-2);
118 | --button-secondary-background-active: var(--text-5);
119 | --button-secondary-background-hover: var(--bg-1);
120 | --button-secondary-background-disabled: var(--bg-3);
121 | --button-secondary-text: var(--text-3);
122 |
123 | --button-transparent-background: var(--hover);
124 | --button-transparent-background-active: var(--active-2);
125 | --button-transparent-background-hover: var(--active);
126 | --button-transparent-text: var(--text-3);
127 |
128 | --redesign-button-secondary-text: var(--text-3);
129 |
130 | --polls-voted-fill: color-mix(in hsl, var(--accent-2), transparent 90%);
131 | --polls-victor-fill: color-mix(in hsl, var(--green-2), transparent 90%);
132 |
133 | --card-primary-bg: var(--bg-3);
134 | --card-secondary-bg: var(--bg-2);
135 | --channel-icon: var(--text-4);
136 | --channels-default: var(--text-4);
137 |
138 | --embed-title: var(--text-2);
139 |
140 | --header-primary: var(--text-2);
141 | --header-secondary: var(--text-4);
142 | --header-muted: var(--text-4);
143 |
144 | --icon-muted: var(--text-5);
145 | --icon-primary: var(--text-3);
146 | --icon-secondary: var(--text-4);
147 | --icon-tertiary: var(--text-4);
148 |
149 | --info-danger-background: red;
150 | --info-danger-text: red;
151 | --info-help-background: color-mix(in hsl, var(--blue-2), transparent 80%);
152 | --info-help-foreground: var(--blue-1);
153 | --info-help-text: var(--blue-1);
154 | --info-positive-background: color-mix(in hsl, var(--yellow-1), transparent 80%);
155 | --info-positive-text: var(--green-1);
156 | --info-warning-background: color-mix(in hsl, var(--yellow-2), transparent 80%);
157 | --info-warning-text: var(--yellow-1);
158 |
159 | --text-brand: var(--accent-1);
160 | --text-danger: var(--red-1);
161 | --text-link: var(--accent-1);
162 | --text-link-low-saturation: red;
163 | --text-low-contrast: var(--text-4);
164 | --text-message-preview-low-sat: red;
165 | --text-muted: var(--text-5);
166 | --text-muted-on-default: var(--text-4);
167 | --text-normal: var(--text-3);
168 | --text-positive: var(--green-1);
169 | --text-primary: var(--text-3);
170 | --text-secondary: var(--text-4);
171 | --text-warning: var(--yellow-1);
172 | --text-default: var(--text-3);
173 | --text-feedback-critical: var(--red-1);
174 | --text-feedback-positive: var(--green-1);
175 | --text-feedback-info: red;
176 | --text-feedback-warning: red;
177 | --text-tertiary: var(--text-4);
178 |
179 | --status-danger: var(--red-2);
180 | --status-danger-background: var(--red-3);
181 | --status-danger-text: var(--white);
182 | --status-dnd: var(--dnd); /* server profiles */
183 | --status-idle: var(--idle);
184 | --status-offline: var(--offline);
185 | --status-online: var(--online);
186 | --status-positive: var(--green-2);
187 | --status-positive-background: var(--green-2);
188 | --status-positive-text: var(--white);
189 | --status-speaking: var(--green-2);
190 | --status-warning: var(--yellow-2);
191 | --status-warning-background: red;
192 | --status-warning-text: var(--black);
193 |
194 | --background-feedback-critical: color-mix(in hsl, var(--red-2), transparent 80%);
195 | --background-feedback-info: color-mix(in hsl, var(--blue-2), transparent 80%);
196 | --background-feedback-positive: color-mix(in hsl, var(--green-2), transparent 80%);
197 | --background-feedback-warning: color-mix(in hsl, var(--yellow-2), transparent 80%);
198 |
199 | --interactive-normal: var(--text-4);
200 | --interactive-hover: var(--text-3);
201 | --interactive-active: var(--text-3);
202 | --interactive-muted: var(--text-5);
203 |
204 | --mention-foreground: var(--accent-1);
205 | --mention-background: color-mix(in hsl, var(--accent-2), transparent 90%);
206 |
207 | --channel-text-area-placeholder: var(--text-5);
208 |
209 | --message-reacted-text: var(--text-2);
210 | --message-reacted-background: color-mix(in hsl, var(--accent-2), transparent 80%);
211 |
212 | --custom-channel-members-bg: var(--bg-4);
213 |
214 | --redesign-input-control-selected: var(--accent-2);
215 |
216 | --scrollbar-auto-thumb: var(--bg-3);
217 | --scrollbar-auto-track: transparent;
218 | --scrollbar-thin-thumb: var(--bg-3);
219 | --scrollbar-thin-track: transparent;
220 |
221 | --white: var(--text-0);
222 | --white-500: var(--text-0);
223 | --redesign-button-overlay-alpha-text: var(--text-2);
224 |
225 | --brand-360: var(--accent-2);
226 | --brand-500: var(--accent-2);
227 | --blurple-50: var(--accent-2);
228 |
229 | --red-400: var(--red-2);
230 | --red-500: var(--red-3);
231 |
232 | --green-360: var(--green-2); /* seems to be mostly used by vencord plugins */
233 | --primary-400: var(--text-4);
234 | }
235 |
236 | .visual-refresh {
237 | ::placeholder {
238 | color: var(--text-5);
239 | }
240 |
241 | .modeUnreadImportant__2ea32 .icon__2ea32,
242 | .wrapper__2ea32:hover .icon__2ea32 /* correct channel icon color */ {
243 | color: var(--text-3);
244 | }
245 |
246 | .text_b88801 > strong /* xxx is typing.. */ {
247 | color: var(--text-3);
248 | }
249 |
250 | .folder__48112[aria-expanded="false"] > .folderIconWrapper__48112 /* collapsed folders */ {
251 | --background-primary: var(--bg-3);
252 | }
253 |
254 | .panel__5dec7 /* game activity panel */,
255 | #vc-spotify-player /* vencord spotify plugin */,
256 | .container__722ff /* background between vc and vc chat */ {
257 | background: none;
258 | }
259 |
260 | .side_b3f026 .item_b3f026:hover /* settings tab */ {
261 | background-color: var(--bg-3) !important;
262 | }
263 | .side_b3f026 .item_b3f026:active,
264 | .side_b3f026 .item_b3f026.selected_b3f026 {
265 | background-color: var(--bg-2) !important;
266 | }
267 |
268 | .quickSelectPopout_ebaca5 /* dm vc region select popout */,
269 | .participantsButton__211d1 /* vc participants button */,
270 | .voiceBar__7aaec /* n in voice bar (channel list) */,
271 | .mainCard_f369db /* form posts */ {
272 | background-color: var(--bg-3);
273 | }
274 |
275 | .colorable_f1ceac.primaryDark_f1ceac,
276 | .reaction_f8896c /* forum post reaction */ {
277 | background-color: var(--bg-2);
278 | }
279 |
280 | .expandedFolderIconWrapper__48112 > svg[style="color: rgb(88, 101, 242);"] /* folder icon */ {
281 | color: var(--accent-2) !important;
282 | }
283 | .colorPickerSwatch__459fb[style="background-color: rgb(88, 101, 242);"] /* folder color picker swatch */,
284 | .newBadge_faa96b /* forum post new badge */,
285 | .mentioned__5126c:before /* mention message left edge */ {
286 | background-color: var(--accent-2) !important;
287 | }
288 | .replying__5126c:before /* reply message left edge */ {
289 | background-color: var(--text-2) !important;
290 | }
291 |
292 | #app-mount .message__5126c.replying__5126c:hover /* override fix for message reply hover */ {
293 | background: var(--reply-hover);
294 | }
295 |
296 | .visual-refresh .voiceBar__7aaec .barText__7aaec, .visual-refresh .voiceChannelsIcon__7aaec /* x in voice bar text */ {
297 | color: var(--accent-2);
298 | }
299 |
300 | .ephemeral__5126c /* ephemeral messages */ {
301 | background: var(--mention) !important;
302 | }
303 | .ephemeral__5126c:hover {
304 | background: var(--mention-hover) !important;
305 | }
306 |
307 | .botTagRegular__82f07 /* bot tag */ {
308 | background-color: var(--accent-2);
309 | }
310 | .botTagOP__82f07 /* forum post op tag */ {
311 | color: var(--text-0);
312 | }
313 |
314 | .container__87bf1 /* settings checkbutton background */ {
315 | background-color: var(--bg-1) !important;
316 | transition: background-color 0.2s ease;
317 | }
318 | .container__87bf1.checked__87bf1 /* settings checkbutton background */ {
319 | background-color: var(--accent-2) !important;
320 | }
321 | .container__87bf1 .slider__87bf1 > svg > path /* settings checkbutton check */ {
322 | fill: var(--bg-1) !important;
323 | transition: fill 0.2s ease;
324 | }
325 | .container__87bf1.checked__87bf1 .slider__87bf1 > svg > path /* settings checkbutton check */ {
326 | fill: var(--accent-2) !important;
327 | }
328 | .container__87bf1 rect[fill='white'] /* settings checkbutton slider */ {
329 | fill: var(--text-3) !important;
330 | transition: fill 0.2s ease;
331 | }
332 | .container__87bf1.checked__87bf1 rect[fill='white'] /* settings checkbutton slider */ {
333 | fill: var(--text-0) !important;
334 | }
335 |
336 | .refreshIcon__001a7 /* settings radiobutton center */ {
337 | fill: var(--text-0);
338 | }
339 |
340 | .categoryText_d02962 /* gif chooser category names */,
341 | .bannerColor_fb7f94 /* profile banner button */,
342 | .backButton_e4cb9a /* stream preview back button */,
343 | .viewersIcon_d6b206 /* stream preview viewers icon */,
344 | .bottomControls_e4cb9a /* stream preview viewer number */,
345 | .pictureInPictureVideo_e4cb9a .controlIcon_f1ceac /* stream preview control icon */,
346 | .bannerVisible_f37cb1 .name_f37cb1 /* server name over banner image */,
347 | .dropdownButtonBannerVisible__2637a /* server name over banner dropdown button */ {
348 | color: var(--text-1);
349 | }
350 | .headerText_e4cb9a.base_eb1a4c /* stream preview header text */,
351 | .participantName__2cdb8 /* stream preview participant name */ {
352 | color: var(--text-1) !important;
353 | }
354 | .playPausePopIcon_cf09d8 > path /* video play/pause popup */ {
355 | fill: var(--text-1);
356 | }
357 | .headerTitle_e4cb9a:hover /* stream preview header title hover underline */ {
358 | border-color: var(--text-1) !important;
359 | }
360 | .controlIcon_cf09d8 /* video play button */,
361 | .wrapper_cf09d8 /* video time */,
362 | .iconWrapper__6eb54 /* video initial play button */,
363 | .wrapper__926d7 /* youtube embed play button */,
364 | .viewersIcon_d6b206:hover /* stream preview viewers icon */ ,
365 | .headerTitle_e4cb9a:hover .backButton_e4cb9a /* stream preview back button hover */,
366 | .viewersIcon_d6b206:hover /* stream preview viewers icon */,
367 | .pictureInPictureVideo_e4cb9a .controlIcon_f1ceac:hover /* stream preview control icon */ {
368 | color: var(--text-2);
369 | }
370 | .wrapper__926d7 a:link,
371 | .wrapper__926d7 a:visited,
372 | .headerTitle_e4cb9a:hover .headerText_e4cb9a.base_eb1a4c /* stream preview back button hover */ {
373 | color: var(--text-2) !important;
374 | }
375 | .downloadHoverButtonIcon__6c706 /* video download button */,
376 | .iconContainer__211d1>svg /* vc participants button icon */,
377 | .selectedIcon__2f4f7 /* vc selected camera icon */,
378 | .colorable_f1ceac.primaryDark_f1ceac .centerIcon_f1ceac /* vc icon button */,
379 | .colorable_f1ceac.primaryDark_f1ceac /* vc icon button nub */,
380 | .iconBadge__650eb.base__2b1f5 /* server vc badge */,
381 | #app-mount .akaBadge__488b1 /* aka badge */,
382 | .message_fcf29c /* you have unsaved settings message */,
383 | .friendRequestsButton__523aa .base__2b1f5 /* inbox friend request number */,
384 | .textBadge__2b1f5[style='background-color: var(--background-accent);'],
385 | .tooltipBlack__382e7 /* server boost tooltip */,
386 | .colorable_f1ceac.experimentDark_f1ceac, .colorable_f1ceac.experimentDark_f1ceac .centerIcon_f1ceac /* vc buttons */ {
387 | color: var(--text-3);
388 | }
389 | .status__2f4f7 path[fill='var(--white)'],
390 | .emptyChannelIcon__00de6 path[fill='var(--white)'] /* channel start icon */ {
391 | fill: var(--text-3);
392 | }
393 | .grabber_a562c8 /* vc volume slider grabber */ {
394 | background-color: var(--text-3);
395 | }
396 | .textBadge__2b1f5 /* new text badge (right click on person in vc) */ {
397 | color: var(--text-0);
398 | }
399 |
400 | .unread__3b95d /* new unreads bar (channel list */ {
401 | color: var(--text-4);
402 | }
403 |
404 | .colorable_f1ceac.white_f1ceac /* vc icon button nub when white */ {
405 | background-color: var(--primary-130);
406 | color: var(--bg-4);
407 | }
408 |
409 | .iconBadge__650eb.isCurrentUserConnected__650eb /* green vc badge when connected */ {
410 | color: var(--text-0);
411 | }
412 |
413 | .container__37e49 /* user panel buttons */,
414 | .numberBadge__2b1f5 /* unread number badge */,
415 | .toolbar__9293f /* toolbar button strikethroughs */ {
416 | --status-danger: var(--accent-new);
417 | }
418 |
419 | .container__37e49 .button__67645.redGlow__67645 /* user panel button backgrounds*/ {
420 | background-color: color-mix(in hsl, var(--accent-new), transparent 90%);
421 | }
422 | .container__37e49 .button__67645.enabled__67645.redGlow__67645:hover /* user panel button backgrounds hover */ {
423 | background-color: color-mix(in hsl, var(--accent-new), transparent 80%);
424 | }
425 |
426 | .divider__5126c /* unread divider */ {
427 | --divider-color: var(--accent-new);
428 | }
429 |
430 | .iconBadge__9293f /* icon badge */,
431 | .mentionsBar__7aaec /* new mention pill */,
432 | .mention__3b95d /* server list new mention pill */ {
433 | background-color: var(--accent-new);
434 | }
435 |
436 | .newMessagesBar__0f481 /* unread bar */ {
437 | background-color: var(--accent-3);
438 | }
439 | .barButtonAlt__0f481 /* unread bar mark as read button */ {
440 | --button-secondary-background: var(--accent-3);
441 | --button-secondary-background-hover: var(--accent-4);
442 | }
443 |
444 | .updateIconForeground__49676 /* update button */ {
445 | fill: var(--green-1);
446 | }
447 |
448 | .colorable_f1ceac.red_f1ceac:hover /* vc disconnect button hover */ {
449 | background-color: var(--red-4);
450 | }
451 | .button_f7ecac.dangerous_f7ecac:hover /* image attachment delete button hover in chat bar */ {
452 | color: var(--red-4);
453 | }
454 | .contentWrapper__08434 ::-webkit-scrollbar-thumb /* gif picker scrollbar */ {
455 | background-color: var(--bg-1);
456 | }
457 |
458 | .circleIconButton__5bc7e /* new server button */ {
459 | color: var(--text-3);
460 | }
461 | .circleIconButton__5bc7e:hover {
462 | color: var(--bg-4);
463 | }
464 |
465 | .tooltipGrey__382e7 /* spotify plugin time tooltip */ {
466 | color: var(--text-3);
467 | background-color: var(--bg-3);
468 | }
469 |
470 | .textContentFooter__9a337 /* forum post image fade */ {
471 | background: linear-gradient(0deg, var(--bg-4), transparent);
472 | }
473 |
474 | .result__2dc39:after /* remove gif hover overlay */ {
475 | display: none;
476 | }
477 | .result__2dc39:hover /* gif hover */ {
478 | outline: 2px solid var(--accent-2);
479 | }
480 |
481 | .reactionBtn__23977.forceShow__23977:hover /* fix add reaction button border hover */ {
482 | border-color: var(--bg-2);
483 | }
484 |
485 | .flash__03436[data-flash=true] /* reply message flash */ {
486 | background: var(--background-message-highlight);
487 | }
488 |
489 | /* status indicators */
490 | rect[fill='#83838b'] {
491 | fill: var(--offline);
492 | }
493 | .status_a423bd[style='background-color: rgb(131, 131, 139);'] {
494 | background-color: var(--offline) !important;
495 | }
496 | rect[fill='#43a25a'],
497 | path[fill='#43a25a'] /* status activity icon */,
498 | .vc-platform-indicator > svg[fill="#43a25a"] {
499 | fill: var(--online);
500 | }
501 | .status_a423bd[style='background-color: rgb(67, 162, 90);'] {
502 | background-color: var(--online) !important;
503 | }
504 | rect[fill='#ca9654'],
505 | .vc-platform-indicator > svg[fill='#ca9654'] {
506 | fill: var(--idle);
507 | }
508 | .status_a423bd[style='background-color: rgb(201, 150, 86);'] {
509 | background-color: var(--idle) !important;
510 | }
511 | rect[fill='#d83a42'],
512 | .vc-platform-indicator > svg[fill='#d83a42'] {
513 | fill: var(--dnd);
514 | }
515 | .status_a423bd[style='background-color: rgb(216, 58, 66);'] {
516 | background-color: var(--dnd) !important;
517 | }
518 | rect[fill='#9147ff'] {
519 | fill: var(--streaming);
520 | }
521 | div[style='display: flex; justify-content: center; align-items: center; border-radius: 5px; background-color: rgb(67, 162, 90); height: 10px; width: 25px;'] {
522 | background-color: var(--online) !important;
523 | }
524 |
525 | /* fix radio bar button colors */
526 | .radioBar__001a7[style='--radio-bar-accent-color: var(--yellow-360); padding: 10px;'] {
527 | --radio-bar-accent-color: var(--yellow-2) !important;
528 | }
529 | .radioBar__001a7[style='--radio-bar-accent-color: var(--green-360); padding: 10px;'] {
530 | --radio-bar-accent-color: var(--green-2) !important;
531 | }
532 | .radioBar__001a7[style='--radio-bar-accent-color: var(--red-400); padding: 10px;'] {
533 | --radio-bar-accent-color: var(--red-2) !important;
534 | }
535 |
536 | #vc-spotify-player {
537 | --vc-spotify-green: var(--accent-2);
538 | }
539 |
540 | ::selection,
541 | .highlight {
542 | background: var(--accent-3);
543 | color: var(--text-0);
544 | }
545 | }
546 | }
547 |
548 | /* dms-button.css */
549 | @property --dms-icon {
550 | syntax: 'default | off | on';
551 | inherits: false;
552 | initial-value: on;
553 | }
554 |
555 | body {
556 | --dms-icon-svg-url: url('https://upload.wikimedia.org/wikipedia/commons/c/c4/Font_Awesome_5_solid_moon.svg'); /* icon svg url. MUST BE A SVG. */
557 | --dms-icon-svg-size: 90%; /* size of the svg (css mask-size) */
558 | --dms-icon-color-before: var(--icon-secondary);
559 | --dms-icon-color-after: var(--white);
560 | --dms-background-image-url: url('https://raw.githubusercontent.com/catppuccin/catppuccin/main/assets/logos/exports/1544x1544_circle.png');
561 | --dms-background-image-size: cover; /* size of the background image (css background-size) */
562 | --dms-background-color: linear-gradient(70deg, var(--blue-2), var(--purple-2), var(--red-2)); /* color of the background image (css background) */
563 | }
564 |
565 | @container body style(--dms-icon: on) {
566 | .wrapper__6e9f8[data-list-item-id='guildsnav___home'] > .childWrapper__6e9f8 > svg {
567 | display: none;
568 | }
569 | .wrapper__6e9f8[data-list-item-id='guildsnav___home'] > .childWrapper__6e9f8::before {
570 | content: '';
571 | display: block;
572 | position: absolute;
573 | width: 65%;
574 | height: 65%;
575 | background: var(--dms-icon-color-before);
576 | mask-image: var(--dms-icon-svg-url);
577 | mask-size: var(--dms-icon-svg-size);
578 | mask-position: center;
579 | mask-repeat: no-repeat;
580 | transition: background-color 0.15s ease-out;
581 | }
582 | .wrapper__6e9f8[data-list-item-id='guildsnav___home']:hover > .childWrapper__6e9f8::before {
583 | transform: rotate(0deg) scale(1);
584 | }
585 | .wrapper__6e9f8[data-list-item-id='guildsnav___home']:hover > .childWrapper__6e9f8::before,
586 | .wrapper__6e9f8[data-list-item-id='guildsnav___home'].selected__6e9f8 > .childWrapper__6e9f8::before {
587 | background: var(--dms-icon-color-after);
588 | transform: rotate(-360deg) scale(0.8);
589 | }
590 |
591 | @container body style(--animations: on) {
592 | .wrapper__6e9f8[data-list-item-id='guildsnav___home'] .childWrapper__6e9f8::before {
593 | transition: background-color 0.15s ease-out, transform var(--dms-icon-svg-transition);
594 | }
595 | }
596 | }
597 |
598 | @container body style(--dms-icon: off) {
599 | .wrapper__6e9f8[data-list-item-id='guildsnav___home'] > .childWrapper__6e9f8 > svg {
600 | display: none;
601 | }
602 | }
603 |
604 | @property --dms-background {
605 | syntax: 'off | image | color';
606 | inherits: false;
607 | initial-value: off;
608 | }
609 |
610 | @container body style(--dms-background: image) {
611 | .wrapper__6e9f8[data-list-item-id='guildsnav___home'] > .childWrapper__6e9f8 {
612 | background-image: var(--dms-background-image-url);
613 | background-color: transparent !important;
614 | background-size: var(--dms-background-image-size);
615 | background-position: center;
616 | background-repeat: no-repeat;
617 | }
618 | }
619 |
620 | @container body style(--dms-background: color) {
621 | .wrapper__6e9f8[data-list-item-id='guildsnav___home'] > .childWrapper__6e9f8 {
622 | background: var(--dms-background-color);
623 | }
624 | }
625 |
626 | /* flipped-chatbar.css */
627 | @property --flipped-chatbar {
628 | syntax: 'on | off';
629 | inherits: false;
630 | initial-value: on;
631 | }
632 |
633 | body {
634 | --chatbar-height: 47px; /* height of the chatbar */
635 | --chatbar-padding: 8px; /* padding of the chatbar */
636 | --custom-channel-textarea-text-area-height: var(--chatbar-height);
637 | }
638 |
639 | @container body style(--flipped-chatbar: on) {
640 | .visual-refresh {
641 | .form_f75fb0 {
642 | margin: 0 var(--chatbar-padding) var(--chatbar-padding) var(--chatbar-padding);
643 | padding: 0;
644 | --chatbar-border-color: var(--border-faint);
645 | }
646 | .channelTextArea_f75fb0 {
647 | margin: 0;
648 | border-color: var(--chatbar-border-color);
649 | transition: none;
650 | }
651 | .base_b88801 {
652 | top: -24px;
653 | left: 0;
654 | right: 0;
655 | background-color: var(--chat-background-default);
656 | padding: 0 8px;
657 | border-radius: var(--radius-md) var(--radius-md) 0 0;
658 | border: 1px solid var(--chatbar-border-color);
659 | border-bottom: none;
660 | transition: none;
661 | box-sizing: border-box;
662 | }
663 | .stackedBars__74017,
664 | .threadSuggestionBar__841c8 {
665 | border-color: var(--chatbar-border-color) !important;
666 | }
667 | .stackedBars__74017 {
668 | background: none !important;
669 | }
670 | .form_f75fb0:has(.base_b88801) {
671 | .channelTextArea_f75fb0,
672 | .wrapper__44df5 {
673 | border-radius: 0 0 var(--radius-md) var(--radius-md);
674 | }
675 | }
676 | .form_f75fb0:has(.channelTextArea__74017:focus-within) {
677 | --chatbar-border-color: var(--border-subtle);
678 | }
679 | .scrollerSpacer__36d07 {
680 | height: calc(24px + var(--chatbar-padding));
681 | }
682 | .scroller__36d07::-webkit-scrollbar-track {
683 | margin-bottom: calc(20px + var(--chatbar-padding));
684 | }
685 | .bottomBar__0f481 {
686 | margin-bottom: 24px;
687 | }
688 | .wrapper__44df5 /* phone verification bar */ {
689 | margin: 0;
690 | border-radius: var(--radius-md);
691 | }
692 | }
693 | }
694 |
695 | /* top-bar.css */
696 | @property --move-top-bar-buttons {
697 | syntax: 'on | off';
698 | inherits: false;
699 | initial-value: off;
700 | }
701 |
702 | @container body style(--move-top-bar-buttons: on) {
703 | .visual-refresh {
704 | /* remove help button */
705 | .trailing_c38106 > a[href="https://support.discord.com"]
706 | {
707 | display: none;
708 | }
709 |
710 | /* make server list inner scroll */
711 | .stack_dbd263 {
712 | overflow: hidden scroll;
713 | scrollbar-width: none;
714 | }
715 | /* create space for inbox button */
716 | .tutorialContainer__1f388 {
717 | margin-bottom: 48px;
718 | }
719 | /* move inbox button */
720 | .recentsIcon_c99c29 {
721 | position: fixed;
722 | width: 40px;
723 | height: 40px;
724 | top: calc(var(--custom-app-top-bar-height) + 1px + var(--custom-guild-list-padding) + 48px);
725 | left: calc(var(--gap) + 1px + var(--custom-guild-list-padding));
726 | }
727 | /* style inbox button */
728 | .recentsIcon_c99c29 .button__85643 {
729 | width: 100%;
730 | height: 100%;
731 | background-color: var(--background-surface-higher);
732 | border-radius: var(--radius-md);
733 | transition: background-color 0.15s ease-out;
734 |
735 | &:hover {
736 | background-color: var(--bg-brand);
737 |
738 | .icon__9293f {
739 | color: var(--white);
740 | }
741 | }
742 | }
743 | .recentsIcon_c99c29 .svg__2338f {
744 | transition: color 0.15s ease-out;
745 | width: 24px;
746 | height: 24px;
747 | }
748 | /* shift inbox popup panel into view */
749 | .recentMentionsPopout__95796 {
750 | transform: translateX(100%);
751 | }
752 | /* move top bar title */
753 | .title_c38106 {
754 | padding-left: var(--gap);
755 | justify-content: flex-start;
756 | }
757 | .title__85643 {
758 | gap: 4px;
759 | }
760 | /* style top bar title */
761 | .title__85643 .icon_f34534 {
762 | width: 16px;
763 | height: 16px;
764 | display: none;
765 | }
766 | .title__85643 .text-sm\/medium_cf4812 {
767 | line-height: 90%;
768 | color: var(--text-muted);
769 | font-weight: 700;
770 | }
771 |
772 | /* fix settings animation transform */
773 | .layer__960e4.baseLayer__960e4 {
774 | transform: none !important;
775 | }
776 | .layers__960e4 > .layer__960e4.animating__960e4 {
777 | will-change: opacity;
778 | }
779 |
780 | /* unread icon */
781 | .recentsIcon_c99c29 .iconBadge__9293f {
782 | --custom-icon-offset: 8px;
783 | width: 10px;
784 | height: 10px;
785 | transition: background 0.15s ease-out;
786 | }
787 |
788 | .recentsIcon_c99c29:hover .iconBadge__9293f {
789 | background: var(--white);
790 | }
791 | }
792 | }
793 |
794 | /* transparency-blur.css */
795 | @property --panel-blur {
796 | syntax: 'on | off';
797 | inherits: false;
798 | initial-value: off;
799 | }
800 |
801 | @container body style(--panel-blur: on) {
802 | .visual-refresh {
803 | #app-mount {
804 | --panel-backdrop-filter: blur(var(--blur-amount));
805 | }
806 |
807 | .popoverReactionHoverBar_f84418 /* message hover quick action bar */,
808 | .tooltip__382e7 /* tooltips */ {
809 | background: var(--bg-floating);
810 | }
811 | .menu_c1e9c4 /* context menus */,
812 | .contentWrapper__08434 /* emoji/gif panel */,
813 | .root__49fc1 /* modals like invite */,
814 | .outer_c0bea0.biteSize_c0bea0:not(.custom-theme-background) /* small profile popup */,
815 | .autocomplete__6b0e0 /* autocomplete */,
816 | .container__55c99 /* search suggestions */,
817 | .messagesPopoutWrap__45690 /* inbox */,
818 | .popout__76f04 /* channel hover popout */ {
819 | background: var(--bg-floating);
820 | }
821 | }
822 | }
823 |
824 | @property --transparency-tweaks {
825 | syntax: 'on | off';
826 | inherits: false;
827 | initial-value: off;
828 | }
829 |
830 | @container body style(--transparency-tweaks: on) {
831 | .visual-refresh {
832 | .formWithLoadedChatInput_f75fb0:before,
833 | .children__9293f:after {
834 | display: none;
835 | }
836 | }
837 | }
838 |
839 | @property --remove-bg-layer {
840 | syntax: 'on | off';
841 | inherits: false;
842 | initial-value: off;
843 | }
844 |
845 | @container body style(--remove-bg-layer: on) {
846 | .bg__960e4 {
847 | background: transparent !important;
848 | }
849 | }
850 |
851 | /* user-panel.css */
852 | @property --small-user-panel {
853 | syntax: 'on | off';
854 | inherits: false;
855 | initial-value: off;
856 | }
857 |
858 | @container body style(--small-user-panel: on) {
859 | .visual-refresh {
860 | .base_c48ade {
861 | grid-template-areas:
862 | 'titleBar titleBar titleBar'
863 | 'guildsList notice notice'
864 | 'guildsList channelsList page'
865 | 'guildsList userPanel page';
866 | }
867 | .panels_c48ade {
868 | max-width: calc(var(--custom-guild-sidebar-width) - var(--custom-guild-list-width));
869 | }
870 | }
871 | }
872 |
873 | /* window-controls.css */
874 | @property --custom-window-controls {
875 | syntax: 'on | off';
876 | inherits: false;
877 | initial-value: off;
878 | }
879 |
880 | body {
881 | --window-control-size: 14px;
882 | }
883 |
884 | @container body style(--custom-window-controls: on) {
885 | .winButtons_c38106 {
886 | gap: 0;
887 | padding-right: calc(var(--gap) - (var(--window-control-size) / 2) + 1px);
888 | }
889 | .winButtons_c38106::before {
890 | margin-right: calc(var(--custom-app-top-bar-height) / 4);
891 | }
892 | .winButton_c38106 > svg {
893 | display: none;
894 | }
895 | .winButton_c38106 {
896 | background: none !important;
897 | width: calc(var(--window-control-size) * 2);
898 | height: var(--custom-app-top-bar-height);
899 | }
900 | .winButton_c38106::after {
901 | display: block;
902 | content: '';
903 | height: var(--window-control-size);
904 | width: var(--window-control-size);
905 | border-radius: 50%;
906 | }
907 | .winButton_c38106:hover::after {
908 | filter: brightness(0.7);
909 | }
910 | .winButton_c38106:active::after {
911 | transform: scale(0.9);
912 | }
913 | .winButtonClose_c38106::after {
914 | background-color: var(--dnd) !important;
915 | }
916 | .winButtonMinMax_c38106:nth-child(1)::after {
917 | background-color: var(--idle) !important;
918 | }
919 | .winButtonMinMax_c38106:nth-child(2)::after {
920 | background-color: var(--online) !important;
921 | }
922 | }
923 |
--------------------------------------------------------------------------------
/css/dark_theme.css:
--------------------------------------------------------------------------------
1 |
2 | :root {
3 | /* text colors */
4 | --text-0: var(--color13);
5 | --text-1: var(--color13);
6 | --text-2: var(--color14);
7 | --text-3: var(--color15);
8 | --text-4: var(--color15);
9 | --text-5: var(--color14);
10 |
11 | /* background and dark colors */
12 | --bg-1: var(--color5);
13 | --bg-2: var(--color4);
14 | --bg-3: var(--color2);
15 | --bg-4: var(--color8);
16 |
17 | /* hover and active states, smoother for better user experience */
18 | --hover: color-mix(in srgb, var(--color14) 20%, transparent);
19 | --active: color-mix(in srgb, var(--color14) 30%, transparent);
20 | --active-2: color-mix(in srgb, var(--color14) 50%, transparent);
21 | --message-hover: color-mix(in srgb, white 15%, transparent);
22 |
23 | /* accent colors (muted and balanced) */
24 | --red-1: color-mix(in srgb, #fff 50%, var(--color6));
25 | --red-2: color-mix(in srgb, #ff4d4d 50%, transparent);
26 | --red-3: color-mix(in srgb, #ff4d4d 40%, var(--color5));
27 | --red-4: color-mix(in srgb, #ff4d4d 30%, var(--color5));
28 | --red-5: color-mix(in srgb, #ff4d4d 20%, var(--color5));
29 |
30 | --green-1: color-mix(in srgb, #b2f2bb 30%, var(--color1));
31 | --green-2: color-mix(in srgb, #70e09c 30%, var(--color2));
32 | --green-3: color-mix(in srgb, #43a25a 30%, var(--color3));
33 | --green-4: color-mix(in srgb, #33834a 30%, var(--color4));
34 | --green-5: color-mix(in srgb, #2c6d3e 30%, var(--color5));
35 |
36 | --blue-1: var(--color3);
37 | --blue-2: var(--color4);
38 | --blue-3: var(--color5);
39 | --blue-4: var(--color6);
40 | --blue-5: var(--color7);
41 |
42 | /* yellow tones, subtly muted for dark mode */
43 | --yellow-1: color-mix(in srgb, #ffe29a 40%, var(--color2));
44 | --yellow-2: color-mix(in srgb, #ffd166 40%, var(--color3));
45 | --yellow-3: color-mix(in srgb, #e6b34f 40%, var(--color4));
46 | --yellow-4: color-mix(in srgb, #ca9654 40%, var(--color5));
47 | --yellow-5: color-mix(in srgb, #a57433 40%, var(--color6));
48 |
49 | --purple-1: color-mix(in srgb, #d3b3ff 60%, var(--color2));
50 | --purple-2: color-mix(in srgb, #b47aff 40%, var(--color3));
51 | --purple-3: color-mix(in srgb, #8c4dff 40%, var(--color4));
52 | --purple-4: color-mix(in srgb, #6a36d9 40%, var(--color5));
53 | --purple-5: color-mix(in srgb, #593695 40%, var(--color6));
54 |
55 | /* status indicator colors */
56 | --online: var(--green-2);
57 | --dnd: var(--red-2);
58 | --idle: var(--yellow-2);
59 | --streaming: var(--purple-2);
60 | --offline: var(--text-4);
61 |
62 | /* border colors (light but defined) */
63 | --border-light: color-mix(in srgb, var(--color15) 15%, transparent); /* Soft border */
64 | --border: color-mix(in srgb, var(--color15) 25%, transparent);
65 | --button-border: color-mix(in srgb, var(--color15) 15%, transparent);
66 |
67 | /* accent colors */
68 | --accent-1: var(--blue-5);
69 | --accent-2: var(--blue-2);
70 | --accent-3: var(--blue-3);
71 | --accent-4: var(--blue-4);
72 | --accent-5: var(--blue-1);
73 | --accent-new: var(--blue-2);
74 |
75 | /* gradients (subtle, soft tones) */
76 | --mention: linear-gradient(to right, color-mix(in srgb, var(--blue-2) 15%, transparent) 50%, transparent);
77 | --mention-hover: linear-gradient(to right, color-mix(in srgb, var(--blue-2) 10%, transparent) 50%, transparent);
78 | --reply: linear-gradient(to right, color-mix(in srgb, var(--text-3) 15%, transparent) 50%, transparent);
79 | --reply-hover: linear-gradient(to right, color-mix(in srgb, var(--text-3) 10%, transparent) 50%, transparent);
80 | }
81 |
--------------------------------------------------------------------------------
/css/hellwal/discord-colors.css:
--------------------------------------------------------------------------------
1 | --background: #%% background.hex %%;
2 | --foreground: #%% foreground.hex %%;
3 | --cursor: #%% cursor.hex %%;
4 | --border: #%% border.hex %%;
5 |
6 | --color0: #%% color0.hex %%;
7 | --color1: #%% color1.hex %%;
8 | --color2: #%% color2.hex %%;
9 | --color3: #%% color3.hex %%;
10 | --color4: #%% color4.hex %%;
11 | --color5: #%% color5.hex %%;
12 | --color6: #%% color6.hex %%;
13 | --color7: #%% color7.hex %%;
14 | --color8: #%% color8.hex %%;
15 | --color9: #%% color9.hex %%;
16 | --color10: #%% color10.hex %%;
17 | --color11: #%% color11.hex %%;
18 | --color12: #%% color12.hex %%;
19 | --color13: #%% color13.hex %%;
20 | --color14: #%% color14.hex %%;
21 | --color15: #%% color15.hex %%;
22 |
--------------------------------------------------------------------------------
/css/light_theme.css:
--------------------------------------------------------------------------------
1 | :root {
2 | /* text colors */
3 | --text-0: var(--color1);
4 | --text-1: var(--color5);
5 | --text-2: var(--color3);
6 | --text-3: var(--color2);
7 | --text-4: var(--color1);
8 | --text-5: var(--color0);
9 |
10 | /* background */
11 | --bg-1: var(--color9);
12 | --bg-2: var(--color8);
13 | --bg-3: var(--color7);
14 | --bg-4: var(--color6);
15 | --hover: color-mix(in srgb, var(--color4) 15%, transparent);
16 | --active: color-mix(in srgb, var(--color4) 25%, transparent);
17 | --active-2: color-mix(in srgb, var(--color4) 35%, transparent);
18 | --message-hover: color-mix(in srgb, black 10%, transparent);
19 |
20 | --red-1: color-mix(in srgb, #fff 40%, var(--color6));
21 | --red-2: color-mix(in srgb, #ff4d4d 85%, transparent);
22 | --red-3: color-mix(in srgb, #ff4d4d 70%, var(--color10));
23 | --red-4: color-mix(in srgb, #ff4d4d 55%, var(--color10));
24 | --red-5: color-mix(in srgb, #ff4d4d 40%, var(--color10));
25 |
26 | --green-1: color-mix(in srgb, #b2f2bb 80%, var(--color1));
27 | --green-2: color-mix(in srgb, #70e09c 80%, var(--color2));
28 | --green-3: color-mix(in srgb, #43a25a 80%, var(--color3));
29 | --green-4: color-mix(in srgb, #33834a 80%, var(--color4));
30 | --green-5: color-mix(in srgb, #2c6d3e 80%, var(--color5));
31 |
32 | --blue-1: var(--color2);
33 | --blue-2: var(--color3);
34 | --blue-3: var(--color4);
35 | --blue-4: var(--color5);
36 | --blue-5: var(--color6);
37 |
38 | --yellow-1: color-mix(in srgb, #ffe29a 100%, var(--color2));
39 | --yellow-2: color-mix(in srgb, #ffd166 80%, var(--color3));
40 | --yellow-3: color-mix(in srgb, #e6b34f 80%, var(--color4));
41 | --yellow-4: color-mix(in srgb, #ca9654 80%, var(--color5));
42 | --yellow-5: color-mix(in srgb, #a57433 80%, var(--color6));
43 |
44 | --purple-1: color-mix(in srgb, #d3b3ff 100%, var(--color2));
45 | --purple-2: color-mix(in srgb, #b47aff 80%, var(--color3));
46 | --purple-3: color-mix(in srgb, #8c4dff 80%, var(--color4));
47 | --purple-4: color-mix(in srgb, #6a36d9 80%, var(--color5));
48 | --purple-5: color-mix(in srgb, #593695 80%, var(--color6));
49 |
50 | /* status indicator colors */
51 | --online: var(--green-2);
52 | --dnd: var(--red-2);
53 | --idle: var(--yellow-2);
54 | --streaming: var(--purple-2);
55 | --offline: var(--text-4);
56 |
57 | /* border colors */
58 | --border-light: color-mix(in srgb, var(--color3) 20%, transparent);
59 | --border: color-mix(in srgb, var(--color3) 30%, transparent);
60 | --button-border: color-mix(in srgb, var(--color0) 15%, transparent);
61 |
62 | /* accent colors */
63 | --accent-1: var(--blue-1);
64 | --accent-2: var(--blue-2);
65 | --accent-3: var(--blue-3);
66 | --accent-4: var(--blue-4);
67 | --accent-5: var(--blue-5);
68 | --accent-new: var(--blue-2);
69 |
70 | /* gradients */
71 | --mention: linear-gradient(to right, color-mix(in srgb, var(--blue-2) 20%, transparent) 40%, transparent);
72 | --mention-hover: linear-gradient(to right, color-mix(in srgb, var(--blue-2) 15%, transparent) 40%, transparent);
73 | --reply: linear-gradient(to right, color-mix(in srgb, var(--text-3) 20%, transparent) 40%, transparent);
74 | --reply-hover: linear-gradient(to right, color-mix(in srgb, var(--text-3) 15%, transparent) 40%, transparent);
75 | }
76 |
77 |
--------------------------------------------------------------------------------
/css/pywal/discord-colors.css:
--------------------------------------------------------------------------------
1 | --color0: {color0};
2 | --color1: {color1};
3 | --color2: {color2};
4 | --color3: {color3};
5 | --color4: {color4};
6 | --color5: {color5};
7 | --color6: {color6};
8 | --color7: {color7};
9 | --color8: {color8};
10 | --color9: {color9};
11 | --color10: {color10};
12 | --color11: {color11};
13 | --color12: {color12};
14 | --color13: {color13};
15 | --color14: {color14};
16 | --color15: {color15};
17 |
--------------------------------------------------------------------------------
/css/wallust/discord-colors.css:
--------------------------------------------------------------------------------
1 | --color0: {{ color0 }};
2 | --color1: {{ color1 }};
3 | --color2: {{ color2 }};
4 | --color3: {{ color3 }};
5 | --color4: {{ color4 }};
6 | --color5: {{ color5 }};
7 | --color6: {{ color6 }};
8 | --color7: {{ color7 }};
9 | --color8: {{ color8 }};
10 | --color9: {{ color9 }};
11 | --color10: {{ color10 }};
12 | --color11: {{ color11 }};
13 | --color12: {{ color12 }};
14 | --color13: {{color13 }};
15 | --color14: {{color14 }};
16 | --color15: {{color15 }};
17 |
--------------------------------------------------------------------------------
/css/wallust/wallust.toml:
--------------------------------------------------------------------------------
1 | [templates]
2 | themecord.template = "colors-discord.css"
3 | themecord.target = '~/.cache/wallust/colors-discord.css'
4 |
--------------------------------------------------------------------------------
/default.nix:
--------------------------------------------------------------------------------
1 | { pkgs, ... }:
2 |
3 | let
4 | themecordFiller = builtins.readFile ./css/ThemecordFiller.css;
5 | themecordFiller2 = builtins.readFile ./css/ThemecordFiller2nd.css;
6 |
7 | dark_theme = builtins.readFile ./css/dark_theme.css;
8 | light_theme = builtins.readFile ./css/light_theme.css;
9 |
10 | themecordBase = builtins.readFile ./css/Themecord.css;
11 | discordColorsContent = builtins.readFile ./scripts/themecord.sh;
12 |
13 | pywalTemplate = pkgs.writeTextFile {
14 | name = "pywal-template";
15 | destination = "~/.config/wal/templates/colors-discord.css";
16 | text = builtins.readFile ./css/pywal/colors-discord.css;
17 | };
18 |
19 | wallustConfig = pkgs.writeTextFile {
20 | name = "wallust-config";
21 | destination = "~/.config/wallust/wallust.toml";
22 | text = builtins.readFile ./css/wallust/wallust.toml;
23 | };
24 |
25 | wallustTemplate = pkgs.writeTextFile {
26 | name = "wallust-template";
27 | destination = "~/.config/wallust/templates/colors-discord.css";
28 | text = builtins.readFile ./css/wallust/colors-discord.css;
29 | };
30 |
31 | in
32 | pkgs.writeScriptBin "themecord" ''
33 | #!/usr/bin/env bash
34 |
35 | # Generated by nix
36 | themecordFiller=$(cat << 'EOF'
37 | ${themecordFiller}
38 | EOF
39 | )
40 | themecordFiller2=$(cat << 'EOF'
41 | ${themecordFiller2}
42 | EOF
43 | )
44 | dark_theme=$(cat << 'EOF'
45 | ${dark_theme}
46 | EOF
47 | )
48 | light_theme=$(cat << 'EOF'
49 | ${light_theme}
50 | EOF
51 | )
52 | themecordBase=$(cat << 'EOF'
53 | ${themecordBase}
54 | EOF
55 | )
56 | ${discordColorsContent}
57 | ''
58 |
59 |
--------------------------------------------------------------------------------
/example/example.sh:
--------------------------------------------------------------------------------
1 | #!/usr/bin/env sh
2 |
3 | # pick some wallpaper (for example this one)
4 | wallpaper=./test-wallpaper.jpg
5 |
6 | # Use hellwal
7 | hellwal -i $wallpaper
8 | themecord -g # -g for hellwal - Generate Themecord.css from new color palette
9 |
10 |
11 |
12 | # Use pywal
13 | wal -i $wallpaper
14 | themecord -p # -p for pywal - Generate Themecord.css from new color palette
15 |
16 |
17 |
18 | # Use wallust
19 | wallust run $wallpaper
20 | themecord -w # -w for wallust - Generate Themecord.css from new color palette
21 |
22 |
23 |
24 | # Use wallpaper daemon of your choice and change wallpaper
25 |
26 | # WAYLAND
27 | # swww img $wallpaper
28 | # swaybg -i $wallpaper
29 | # hyprpaper wallpaper $wallpaper
30 |
31 | # X
32 | # feh --bg-scale $wallpaper
33 |
34 | # next reload your bar, wm etc. etc.
35 |
--------------------------------------------------------------------------------
/example/test-wallpaper.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/danihek/Themecord/2117717f830c4847eafc450319de26ae09ac9277/example/test-wallpaper.jpg
--------------------------------------------------------------------------------
/flake.lock:
--------------------------------------------------------------------------------
1 | {
2 | "nodes": {
3 | "nixpkgs": {
4 | "locked": {
5 | "lastModified": 1730200266,
6 | "narHash": "sha256-l253w0XMT8nWHGXuXqyiIC/bMvh1VRszGXgdpQlfhvU=",
7 | "owner": "nixos",
8 | "repo": "nixpkgs",
9 | "rev": "807e9154dcb16384b1b765ebe9cd2bba2ac287fd",
10 | "type": "github"
11 | },
12 | "original": {
13 | "owner": "nixos",
14 | "ref": "nixos-unstable",
15 | "repo": "nixpkgs",
16 | "type": "github"
17 | }
18 | },
19 | "root": {
20 | "inputs": {
21 | "nixpkgs": "nixpkgs"
22 | }
23 | }
24 | },
25 | "root": "root",
26 | "version": 7
27 | }
28 |
--------------------------------------------------------------------------------
/flake.nix:
--------------------------------------------------------------------------------
1 | {
2 | description = "Themecord flake.nix";
3 |
4 | inputs =
5 | {
6 | nixpkgs.url = "github:nixos/nixpkgs/nixos-unstable";
7 | };
8 |
9 | outputs = { self, nixpkgs }:
10 | let
11 | system = "x86_64-linux";
12 | pkgs = nixpkgs.legacyPackages.${system};
13 | in
14 | {
15 | packages.${system}.default = (import ./default.nix {
16 | inherit pkgs;
17 | });
18 | };
19 | }
20 |
21 |
--------------------------------------------------------------------------------
/midnight.css:
--------------------------------------------------------------------------------
1 | /* main.css */
2 | @import url('https://fonts.googleapis.com/css2?family=Figtree:ital,wght@0,300;0,400;0,500;0,600;0,700;0,800;0,900;1,300;1,400;1,500;1,600;1,700;1,800;1,900&display=swap');
3 |
4 | :root {
5 | container-name: root;
6 | --custom-guild-list-padding: 12px;
7 | --panel-backdrop-filter: none;
8 | }
9 |
10 | body {
11 | container-name: body;
12 |
13 | /* font, change to '' for default discord font */
14 | --font: 'figtree';
15 |
16 | /* sizes */
17 | --gap: 12px; /* spacing between panels */
18 | --divider-thickness: 4px; /* thickness of unread messages divider and highlighted message borders */
19 | }
20 |
21 | .visual-refresh {
22 | /* panel separation */
23 | .guilds_c48ade /* server list */,
24 | .sidebarList_c48ade /* channel list (includes dm list) */,
25 | .panels_c48ade /* user panel */,
26 | .chat_f75fb0 > .subtitleContainer_f75fb0 /* chat titlebar */,
27 | .chatContent_f75fb0 /* chat */,
28 | .container_c8ffbb /* member list */,
29 | .content_f75fb0 > .membersWrap_c8ffbb /* forum post member list */,
30 | .container__133bf > .container__9293f /* friends titlebar */,
31 | .container_f391e3 > .container__9293f /* message requests titlebar */,
32 | .homeWrapper__0920e > .container__9293f /* nitro page titlebar */,
33 | .container__01ae2 > .container__9293f /* vc chat titlebar */,
34 | .container_fb64c9 > .container__9293f /* new thread panel */,
35 | .peopleColumn__133bf /* online friends */,
36 | .nowPlayingColumn__133bf /* active now */,
37 | .scroller_c880e8 /* nitro page */,
38 | .container_f391e3 > .content_f75fb0 /* message requests */,
39 | .shop__6db1d /* shop */,
40 | .outer_c0bea0.panel_c0bea0 /* dm user panel */,
41 | .searchResultsWrap_a9e706 /* search results */,
42 | .container_f369db /* forum */,
43 | .chat_fb64c9 /* new thread panel */,
44 | .container_a592e1 /* server discovery */,
45 | .callContainer_cb9592 /* vc container */,
46 | .callContainer__722ff /* stage */ {
47 | background-color: var(--background-base-lower);
48 | border-radius: var(--radius-lg);
49 | border: 1px solid var(--border-subtle);
50 | backdrop-filter: var(--panel-backdrop-filter);
51 | }
52 |
53 | .base_c48ade /* base grid */ {
54 | display: grid;
55 | grid-template-columns: [start] min-content [guildsEnd] min-content [channelsEnd] 1fr [end];
56 | grid-template-rows: [top] var(--custom-app-top-bar-height) [titleBarEnd] min-content [noticeEnd] 1fr [contentEnd] min-content [end];
57 | grid-template-areas:
58 | 'titleBar titleBar titleBar'
59 | 'guildsList notice notice'
60 | 'guildsList channelsList page'
61 | 'userPanel userPanel page';
62 | gap: 0 var(--gap);
63 | }
64 |
65 | .panels_c48ade /* user panel */ {
66 | width: 100%;
67 | position: static;
68 | grid-area: userPanel;
69 | margin: var(--gap) 0 0 0;
70 | overflow: hidden;
71 | max-width: calc(var(--custom-guild-sidebar-width) + var(--gap) + 4px);
72 | }
73 |
74 | .sidebar_c48ade /* server list + channel list + user panel group */ {
75 | margin: 0 0 var(--gap) var(--gap);
76 | }
77 |
78 | .guilds_c48ade /* server list */ {
79 | margin-bottom: 0;
80 | }
81 | .scroller_ef3116 /* server list inner scroller */ {
82 | padding-top: var(--custom-guild-list-padding);
83 | }
84 |
85 | .container__2637a /* channel list inner */ {
86 | padding-bottom: 0;
87 | }
88 | .clickable_f37cb1,
89 | .container__2637a /* channel list inner */,
90 | .header_f37cb1 /* server name */ {
91 | background: none;
92 | }
93 |
94 | /* fix discord's idiotic server banners */
95 | .bannerImage_f37cb1,
96 | .bannerImg_f37cb1 {
97 | width: 100%;
98 | }
99 | .bannerVisible_f37cb1 .headerEllipseBackdrop_f37cb1 {
100 | display: none;
101 | }
102 | .headerGlass_f37cb1 {
103 | top: 0;
104 | left: 0;
105 | right: 0;
106 | width: auto;
107 | border-radius: var(--radius-lg) var(--radius-lg) 0 0;
108 | }
109 |
110 | .sidebar_c48ade:after /* server list + channel list bottom shadow */ {
111 | display: none;
112 | }
113 |
114 | .chat_f75fb0 /* chat group outer */ {
115 | border: none !important;
116 | background: none;
117 | }
118 | .container__133bf /* friends page group outer */,
119 | .page_c48ade {
120 | padding-bottom: var(--gap);
121 | padding-right: var(--gap);
122 | border: none !important;
123 | background: none;
124 | }
125 | .page_c48ade > .chat_f75fb0,
126 | .page_c48ade > .container__133bf {
127 | padding: 0;
128 | }
129 |
130 | .container__9293f /* friends, message requests, + other stuff titlebar */ {
131 | margin-bottom: var(--gap);
132 | }
133 |
134 | .subtitleContainer_f75fb0 /* chat titlebar */ {
135 | margin-bottom: var(--gap);
136 | }
137 | .title_f75fb0 /* chat titlebar inner */ {
138 | border: none;
139 | background: none;
140 | margin-bottom: 0;
141 | }
142 |
143 | .chatContent_f75fb0 /* chat */ {
144 | overflow: hidden;
145 | }
146 |
147 | .container_c8ffbb /* member list */ {
148 | margin-left: var(--gap);
149 | overflow: hidden;
150 | height: auto;
151 | min-width: var(--custom-member-list-width);
152 | }
153 | .content_f75fb0 > .membersWrap_c8ffbb /* forum post member list */ {
154 | margin-left: var(--gap);
155 | overflow: hidden;
156 | height: auto;
157 | }
158 | .members_c8ffbb /* member list inner */,
159 | .member_c8ffbb /* member list item */ {
160 | background: none;
161 | }
162 |
163 | .resizeHandle__01ae2 /* resize handle */ {
164 | background: transparent;
165 | }
166 |
167 | .privateChannels__35e86 /* dm list */,
168 | .scroller__99e7c /* dm list inner */ {
169 | background: none;
170 | }
171 | .scroller__99e7c /* dm list inner */ {
172 | margin-bottom: 0;
173 | }
174 |
175 | .tabBody__133bf /* online friends + active now group outer */ {
176 | background: none;
177 | }
178 |
179 | .nowPlayingColumn__133bf /* active now */ {
180 | margin-left: var(--gap);
181 | }
182 | .container__7d20c /* active now inner */ {
183 | background: none;
184 | }
185 | .scroller__7d20c /* active now inner */ {
186 | border: none;
187 | }
188 |
189 | .homeWrapper__0920e /* nitro page group inner */ {
190 | border: none;
191 | background: none;
192 | }
193 | .applicationStore_f07d62 /* nitro page group outer */ {
194 | background: none;
195 | }
196 |
197 | .shop__6db1d /* shop */ {
198 | overflow: hidden;
199 | height: auto;
200 | }
201 | .shop__08415 /* shop inner scroller */ {
202 | margin-top: calc(var(--custom-channel-header-height) * -1 - 16px);
203 | }
204 |
205 | .outer_c0bea0.panel_c0bea0 /* dm user panel */ {
206 | margin-left: var(--gap);
207 | overflow: hidden;
208 | height: auto;
209 | min-width: 340px;
210 | }
211 |
212 | .searchResultsWrap_a9e706 /* search results */ {
213 | margin-left: var(--gap);
214 | }
215 |
216 | .notice__6e2b9 /* notice banner */ {
217 | margin: 0 var(--gap) var(--gap) 0;
218 | border-radius: var(--radius-md);
219 | }
220 |
221 | .container__01ae2 /* vc chat + titlebar group */ {
222 | border: none;
223 | background: none;
224 | }
225 | .chat_ee72fa::before /* vc chat shadow */ {
226 | display: none;
227 | }
228 | .channelChatWrapper_cb9592 /* vc chat + titlebar group outer */ {
229 | background: none;
230 | }
231 |
232 | .page_c48ade > div > .chatLayerWrapper__01ae2 /* forum/thread chat outer */ {
233 | margin: 0 var(--gap) var(--gap) 0;
234 | height: calc(100% - var(--gap));
235 | }
236 | .container__01ae2 /* forum/thread chat */ {
237 | padding-left: calc((var(--gap) - var(--chat-resize-handle-width)));
238 | }
239 |
240 | .container_fb64c9 /* new thread panel */ {
241 | background: none;
242 | }
243 | .chat_fb64c9::before /* new thread panel chat shadow */ {
244 | display: none;
245 | }
246 |
247 | .container_a592e1 /* server discovery */ {
248 | overflow: hidden;
249 | }
250 | .backdrop__8a7fc /* server discovery top bar */ {
251 | background-color: var(--background-base-lower);
252 | }
253 |
254 | .wrapper_cb9592 /* dm vc wrapper */ {
255 | background: none;
256 | margin-bottom: var(--gap);
257 | }
258 |
259 | /* remove excess background from settings */
260 | .standardSidebarView__23e6b,
261 | .contentRegion__23e6b,
262 | .sidebarRegionScroller__23e6b,
263 | .contentRegionScroller__23e6b {
264 | background: none;
265 | }
266 | .standardSidebarView__23e6b {
267 | backdrop-filter: var(--panel-backdrop-filter);
268 | }
269 |
270 | /* remove excess backgrounds */
271 | .wrapper_d852db /* message loading placeholders */,
272 | .wrapper_d852db > .wrapper_fc8177 {
273 | background: none;
274 | }
275 |
276 | .newMessagesBar__0f481 /* unread messages bar */ {
277 | top: 12px;
278 | left: 12px;
279 | right: 12px;
280 | border-radius: var(--radius-sm);
281 | padding: 0 8px;
282 | }
283 |
284 | .bottom__7aaec /* channel list new unreads pill */ {
285 | bottom: 12px;
286 | }
287 |
288 | .unreadMentionsIndicatorBottom_ef3116 /* server list new pill */,
289 | .unreadMentionsIndicatorTop_ef3116 {
290 | width: calc(var(--guildbar-avatar-size) + var(--custom-guild-list-padding) * 2);
291 | padding: calc(var(--custom-guild-list-padding) / 2);
292 | }
293 |
294 | /* jank ass solution to only apply padding to treatment 3 */
295 | .form_f75fb0 /* chat bar outer form */ {
296 | --space-8: 16px;
297 | }
298 | .channelBottomBarArea_f75fb0 /* chat bar inner */ {
299 | --space-8: 8px;
300 | }
301 |
302 | /* get rid of extra space in treatment 2 */
303 | .accessoryBar__74017 {
304 | padding-top: 0;
305 | }
306 |
307 | /* general chat bar improvements */
308 | .channelTextArea_f75fb0 /* chat bar */ {
309 | border-radius: var(--radius-md);
310 | }
311 | .themedBackground__74017 /* chat bar inner */ {
312 | background: none;
313 | }
314 | .slateTextArea_ec4baf /* actual typing area */ {
315 | margin-left: 2px;
316 | }
317 |
318 | /* improve unread divider */
319 | .divider__908e2 {
320 | border-width: var(--divider-thickness);
321 | border-radius: var(--divider-thickness);
322 | }
323 | .endCap__908e2 {
324 | margin-top: calc(var(--divider-thickness) / -2);
325 | }
326 | .divider__908e2 .content__908e2 {
327 | margin-top: calc(var(--divider-thickness) - var(--divider-thickness) * 2);
328 | }
329 |
330 | /* improve highlight message left edge */
331 | .message__5126c.mentioned__5126c::before,
332 | .replying__5126c::before,
333 | .ephemeral__5126c::before {
334 | width: var(--divider-thickness);
335 | border-radius: var(--divider-thickness);
336 | height: calc(100% - 2 * var(--radius-sm));
337 | top: var(--radius-sm);
338 | left: calc(var(--divider-thickness) / -2 + 1px);
339 | left: calc(var(--radius-sm) / 2);
340 | }
341 |
342 | .message__5126c {
343 | border-radius: var(--radius-md);
344 | margin-left: 4px;
345 | }
346 |
347 | /* improve server selected marker */
348 | .pill_e5445c.wrapper__58105 {
349 | width: calc((var(--custom-guild-list-padding) - 4px) / 2 + 4px);
350 | }
351 | .item__58105 {
352 | width: 4px;
353 | border-radius: 4px;
354 | margin-left: calc((var(--custom-guild-list-padding) - 4px) / 2);
355 | }
356 |
357 | /* improve embeds */
358 | .embedFull__623de {
359 | border: 4px solid var(--border-normal);
360 | border-top-color: var(--border-subtle) !important;
361 | border-top-width: 1px;
362 | border-bottom-color: var(--border-subtle) !important;
363 | border-bottom-width: 1px;
364 | border-right-color: var(--border-subtle) !important;
365 | border-right-width: 1px;
366 | }
367 |
368 | /* improve borders */
369 | .reaction__23977 /* message reactions */,
370 | .reactionBtn__23977.forceShow__23977 /* add reaction button */ {
371 | border-width: 2px;
372 | }
373 |
374 | /* roundness */
375 | .embedFull__623de /* embeds */,
376 | .hljs /* code block */,
377 | .imageWrapper_af017a /* image */,
378 | .container__9271d /* thread link */ {
379 | border-radius: var(--radius-md);
380 | }
381 |
382 | .outer_c0bea0 /* profile outer */,
383 | .contentWrapper__08434 /* gif panel */ {
384 | border-radius: var(--radius-lg);
385 | }
386 | .inner_c0bea0 /* profile inner */ {
387 | border-radius: calc(var(--radius-lg) - 4px);
388 | }
389 |
390 | .outer_c0bea0 /* profile outer */ {
391 | border: 1px solid var(--border-subtle);
392 | }
393 | .root__24502 {
394 | background: none;
395 | }
396 |
397 | /* remove unnecessary backgrounds */
398 | .app__160d8,
399 | #app-mount,
400 | body {
401 | background: transparent !important;
402 | }
403 | }
404 |
405 | body {
406 | --font-primary: var(--font), 'gg sans';
407 | --font-display: var(--font), 'gg sans';
408 | }
409 |
410 | [class*='scroll'] {
411 | will-change: scroll-position;
412 | }
413 | .burstGlow__23977 {
414 | display: none;
415 | }
416 |
417 | /* animations.css */
418 | @property --animations {
419 | syntax: 'on | off';
420 | inherits: false;
421 | initial-value: on;
422 | }
423 |
424 | body {
425 | --list-item-transition: 0.2s ease; /* transition for list items */
426 | --dms-icon-svg-transition: 0.4s ease; /* transition for the dms icon */
427 | }
428 |
429 | @container body style(--animations: on) {
430 | .visual-refresh {
431 | /* list hover animations */
432 | .wrapper__2ea32 .link__2ea32 /* channels */,
433 | .container__91a9d /* members */,
434 | .channel__972a0 /* dms */,
435 | .side_b3f026 .item_b3f026 /* settings */ {
436 | transition: margin-left var(--list-item-transition);
437 | will-change: margin-left;
438 | }
439 | .wrapper__2ea32:hover .link__2ea32,
440 | .side_b3f026 .item_b3f026:hover {
441 | margin-left: 10px;
442 | }
443 | .container__91a9d:hover,
444 | .channel__972a0:hover {
445 | margin-left: 18px;
446 | }
447 | /* list hover channel dot */
448 | .unread__2ea32 {
449 | border-radius: 50%;
450 | width: 8px;
451 | height: 8px;
452 | margin-left: -4px;
453 | transition: var(--list-item-transition);
454 | will-change: margin-left;
455 | }
456 | .wrapper__2ea32:hover .unread__2ea32 {
457 | margin-left: 4px;
458 | }
459 | .typeThread__2ea32 .unread__2ea32 {
460 | left: -31px;
461 | }
462 | }
463 | }
464 |
465 | /* background-image.css */
466 | @property --background-image {
467 | syntax: 'on | off';
468 | inherits: false;
469 | initial-value: off;
470 | }
471 |
472 | body {
473 | --background-image-url: url('');
474 | }
475 |
476 | @container body style(--background-image: on) {
477 | .visual-refresh .bg__960e4 {
478 | background: var(--background-image-url);
479 | background-size: cover;
480 | background-position: center;
481 | }
482 | }
483 |
484 | /* colors.css */
485 | @property --colors {
486 | syntax: 'on | off';
487 | inherits: false;
488 | initial-value: on;
489 | }
490 |
491 | :root {
492 | /* text colors */
493 | --text-0: var(--bg-4); /* text on colored elements */
494 | --text-1: hsl(220, 45%, 95%); /* other normally white text */
495 | --text-2: hsl(220, 25%, 70%); /* headings and important text */
496 | --text-3: hsl(220, 20%, 60%); /* normal text */
497 | --text-4: hsl(220, 15%, 40%); /* icon buttons and channels */
498 | --text-5: hsl(220, 15%, 25%); /* muted channels/chats and timestamps */
499 |
500 | /* background and dark colors */
501 | --bg-1: hsl(220, 15%, 20%); /* dark buttons when clicked */
502 | --bg-2: hsl(220, 15%, 16%); /* dark buttons */
503 | --bg-3: hsl(220, 15%, 13%); /* spacing, secondary elements */
504 | --bg-4: hsl(220, 15%, 10%); /* main background color */
505 | --hover: hsla(221, 19%, 40%, 0.1); /* channels and buttons when hovered */
506 | --active: hsla(220, 19%, 40%, 0.2); /* channels and buttons when clicked or selected */
507 | --active-2: hsla(220, 19%, 40%, 0.3); /* extra state for transparent buttons */
508 | --message-hover: hsla(230, 0%, 0%, 0.1); /* messages when hovered */
509 |
510 | /* accent colors */
511 | --accent-1: var(--blue-1); /* links and other accent text */
512 | --accent-2: var(--blue-2); /* small accent elements */
513 | --accent-3: var(--blue-3); /* accent buttons */
514 | --accent-4: var(--blue-4); /* accent buttons when hovered */
515 | --accent-5: var(--blue-5); /* accent buttons when clicked */
516 | --accent-new: var(--blue-2); /* stuff that's normally red like mute/deafen buttons */
517 | --mention: linear-gradient(to right, color-mix(in hsl, var(--blue-2), transparent 90%) 40%, transparent); /* background of messages that mention you */
518 | --mention-hover: linear-gradient(to right, color-mix(in hsl, var(--blue-2), transparent 95%) 40%, transparent); /* background of messages that mention you when hovered */
519 | --reply: linear-gradient(to right, color-mix(in hsl, var(--text-3), transparent 90%) 40%, transparent); /* background of messages that reply to you */
520 | --reply-hover: linear-gradient(to right, color-mix(in hsl, var(--text-3), transparent 95%) 40%, transparent); /* background of messages that reply to you when hovered */
521 |
522 | /* status indicator colors */
523 | --online: var(--green-2); /* change to #43a25a for default */
524 | --dnd: var(--red-2); /* change to #d83a42 for default */
525 | --idle: var(--yellow-2); /* change to #ca9654 for default */
526 | --streaming: var(--purple-2); /* change to #593695 for default */
527 | --offline: var(--text-4); /* change to #83838b for default offline color */
528 |
529 | /* border colors */
530 | --border-light: hsl(230, 20%, 40%, 0.1); /* light border color */
531 | --border: hsl(230, 20%, 40%, 0.2); /* normal border color */
532 | --button-border: hsl(0, 0%, 100%, 0.1); /* neutral border color of buttons */
533 |
534 | /* base colors */
535 | --red-1: oklch(76% 0.12 0);
536 | --red-2: oklch(70% 0.12 0);
537 | --red-3: oklch(64% 0.12 0);
538 | --red-4: oklch(58% 0.12 0);
539 | --red-5: oklch(52% 0.12 0);
540 |
541 | --green-1: oklch(76% 0.11 170);
542 | --green-2: oklch(70% 0.11 170);
543 | --green-3: oklch(64% 0.11 170);
544 | --green-4: oklch(58% 0.11 170);
545 | --green-5: oklch(52% 0.11 160);
546 |
547 | --blue-1: oklch(76% 0.1 215);
548 | --blue-2: oklch(70% 0.1 215);
549 | --blue-3: oklch(64% 0.1 215);
550 | --blue-4: oklch(58% 0.1 215);
551 | --blue-5: oklch(52% 0.1 215);
552 |
553 | --yellow-1: oklch(80% 0.11 90);
554 | --yellow-2: oklch(74% 0.11 90);
555 | --yellow-3: oklch(68% 0.11 90);
556 | --yellow-4: oklch(62% 0.11 90);
557 | --yellow-5: oklch(56% 0.11 90);
558 |
559 | --purple-1: oklch(76% 0.11 310);
560 | --purple-2: oklch(70% 0.11 310);
561 | --purple-3: oklch(64% 0.11 310);
562 | --purple-4: oklch(58% 0.11 310);
563 | --purple-5: oklch(52% 0.11 310);
564 | }
565 |
566 | @container root style(--colors: on) {
567 | .visual-refresh body,
568 | .visual-refresh .theme-dark,
569 | .visual-refresh .theme-light:not(.custom-profile-theme) {
570 | --activity-card-background: red;
571 | --alert-bg: red;
572 | --autocomplete-bg: var(--bg-3);
573 |
574 | --background-accent: var(--bg-2);
575 | --background-floating: var(--bg-3);
576 | --background-nested-floating: var(--bg-4);
577 | --background-mentioned: var(--mention);
578 | --background-mentioned-hover: var(--mention-hover);
579 | --background-message-automod: red;
580 | --background-message-automod-hover: red;
581 | --background-message-highlight: var(--reply);
582 | --background-message-highlight-hover: var(--reply-hover);
583 | --background-message-hover: var(--message-hover);
584 |
585 | --background-primary: var(--bg-4);
586 | --background-secondary: var(--bg-3);
587 | --background-secondary-alt: var(--bg-3);
588 | --background-tertiary: var(--bg-4);
589 |
590 | --bg-base-primary: var(--bg-4); /* screenshare window? */
591 | --bg-base-secondary: var(--bg-4);
592 | --bg-base-tertiary: var(--bg-3);
593 | --background-mod-subtle: var(--bg-3);
594 | --background-mod-normal: var(--bg-3);
595 | --background-mod-strong: var(--bg-3);
596 | --background-base-low: var(--bg-4);
597 | --background-base-lower: var(--bg-4);
598 | --background-base-lowest: var(--bg-4);
599 | --background-surface-high: var(--bg-3);
600 | --background-surface-higher: var(--bg-3);
601 | --background-surface-highest: var(--bg-3);
602 | --bg-surface-overlay: var(--bg-4);
603 | --bg-surface-raised: var(--bg-3);
604 | --chat-background-default: var(--bg-3);
605 | --input-background: var(--bg-3);
606 | --modal-background: var(--bg-4);
607 | --modal-footer-background: var(--bg-4);
608 |
609 | --background-modifier-accent: var(--hover);
610 | --background-modifier-active: var(--active);
611 | --background-modifier-hover: var(--hover);
612 | --background-modifier-selected: var(--active);
613 |
614 | --bg-mod-faint: var(--hover);
615 | --bg-mod-subtle: var(--bg-2);
616 | --bg-mod-strong: var(--bg-2);
617 | --bg-brand: var(--accent-2);
618 |
619 | --border-faint: var(--border-light);
620 | --border-subtle: var(--border);
621 | --border-normal: var(--border);
622 | --border-strong: var(--border);
623 | --input-border: var(--border);
624 |
625 | --button-danger-background: var(--red-3);
626 | --button-danger-background-active: var(--red-5);
627 | --button-danger-background-hover: var(--red-4);
628 | --button-danger-background-disabled: var(--red-5);
629 | --button-danger-border: var(--button-border);
630 |
631 | --button-filled-brand-text: var(--text-0);
632 | --button-filled-brand-background: var(--accent-3);
633 | --button-filled-brand-background-active: var(--accent-5);
634 | --button-filled-brand-background-hover: var(--accent-4);
635 | --button-filled-brand-border: var(--button-border);
636 |
637 | --button-filled-brand-inverted-background: var(--text-1);
638 | --button-filled-brand-inverted-background-active: var(--text-3);
639 | --button-filled-brand-inverted-background-hover: var(--text-2);
640 | --button-filled-brand-inverted-text: var(--bg-4);
641 | --button-filled-white-background: var(--text-1);
642 | --button-filled-white-background-active: var(--text-3);
643 | --button-filled-white-background-hover: var(--text-2);
644 | --button-filled-white-text: var(--bg-4);
645 |
646 | --button-outline-danger-background: var(--bg-2);
647 | --button-outline-danger-background-active: var(--text-5);
648 | --button-outline-danger-background-hover: var(--bg-1);
649 | --button-outline-danger-border: var(--border-light);
650 | --button-outline-danger-border-active: var(--border-light);
651 | --button-outline-danger-border-hover: var(--border-light);
652 | --button-outline-danger-text: var(--red-1);
653 | --button-outline-danger-text-active: var(--red-1);
654 | --button-outline-danger-text-hover: var(--red-1);
655 |
656 | --button-outline-primary-background: red;
657 | --button-outline-primary-background-active: var(--active);
658 | --button-outline-primary-background-hover: var(--hover);
659 | --button-outline-primary-border: var(--text-5);
660 | --button-outline-primary-border-active: var(--text-5);
661 | --button-outline-primary-border-hover: var(--text-5);
662 | --button-outline-primary-text: var(--text-3);
663 | --button-outline-primary-text-active: var(--text-3);
664 | --button-outline-primary-text-hover: var(--text-3);
665 |
666 | --button-outline-positive-background: red;
667 | --button-outline-positive-background-active: var(--green-4);
668 | --button-outline-positive-background-hover: var(--green-3);
669 | --button-outline-positive-border: var(--green-2);
670 | --button-outline-positive-border-active: var(--green-4);
671 | --button-outline-positive-border-hover: var(--green-3);
672 | --button-outline-positive-text: var(--text-3);
673 | --button-outline-positive-text-active: var(--text-0);
674 | --button-outline-positive-text-hover: var(--text-0);
675 |
676 | --button-positive-background: var(--green-2);
677 | --button-positive-background-active: var(--green-4);
678 | --button-positive-background-hover: var(--green-3);
679 | --button-positive-background-disabled: var(--green-4);
680 | --button-positive-border: var(--button-border);
681 |
682 | --button-secondary-background: var(--bg-2);
683 | --button-secondary-background-active: var(--text-5);
684 | --button-secondary-background-hover: var(--bg-1);
685 | --button-secondary-background-disabled: var(--bg-3);
686 | --button-secondary-text: var(--text-3);
687 |
688 | --button-transparent-background: var(--hover);
689 | --button-transparent-background-active: var(--active-2);
690 | --button-transparent-background-hover: var(--active);
691 | --button-transparent-text: var(--text-3);
692 |
693 | --redesign-button-secondary-text: var(--text-3);
694 |
695 | --polls-voted-fill: color-mix(in hsl, var(--accent-2), transparent 90%);
696 | --polls-victor-fill: color-mix(in hsl, var(--green-2), transparent 90%);
697 |
698 | --card-primary-bg: var(--bg-3);
699 | --card-secondary-bg: var(--bg-2);
700 | --channel-icon: var(--text-4);
701 | --channels-default: var(--text-4);
702 |
703 | --embed-title: var(--text-2);
704 |
705 | --header-primary: var(--text-2);
706 | --header-secondary: var(--text-4);
707 | --header-muted: var(--text-4);
708 |
709 | --icon-muted: var(--text-5);
710 | --icon-primary: var(--text-3);
711 | --icon-secondary: var(--text-4);
712 | --icon-tertiary: var(--text-4);
713 |
714 | --info-danger-background: red;
715 | --info-danger-text: red;
716 | --info-help-background: color-mix(in hsl, var(--blue-2), transparent 80%);
717 | --info-help-foreground: var(--blue-1);
718 | --info-help-text: var(--blue-1);
719 | --info-positive-background: color-mix(in hsl, var(--yellow-1), transparent 80%);
720 | --info-positive-text: var(--green-1);
721 | --info-warning-background: color-mix(in hsl, var(--yellow-2), transparent 80%);
722 | --info-warning-text: var(--yellow-1);
723 |
724 | --text-brand: var(--accent-1);
725 | --text-danger: var(--red-1);
726 | --text-link: var(--accent-1);
727 | --text-link-low-saturation: red;
728 | --text-low-contrast: var(--text-4);
729 | --text-message-preview-low-sat: red;
730 | --text-muted: var(--text-5);
731 | --text-muted-on-default: var(--text-4);
732 | --text-normal: var(--text-3);
733 | --text-positive: var(--green-1);
734 | --text-primary: var(--text-3);
735 | --text-secondary: var(--text-4);
736 | --text-warning: var(--yellow-1);
737 | --text-default: var(--text-3);
738 | --text-feedback-critical: var(--red-1);
739 | --text-feedback-positive: var(--green-1);
740 | --text-feedback-info: red;
741 | --text-feedback-warning: red;
742 | --text-tertiary: var(--text-4);
743 |
744 | --status-danger: var(--red-2);
745 | --status-danger-background: var(--red-3);
746 | --status-danger-text: var(--white);
747 | --status-dnd: var(--dnd); /* server profiles */
748 | --status-idle: var(--idle);
749 | --status-offline: var(--offline);
750 | --status-online: var(--online);
751 | --status-positive: var(--green-2);
752 | --status-positive-background: var(--green-2);
753 | --status-positive-text: var(--white);
754 | --status-speaking: var(--green-2);
755 | --status-warning: var(--yellow-2);
756 | --status-warning-background: red;
757 | --status-warning-text: var(--black);
758 |
759 | --background-feedback-critical: color-mix(in hsl, var(--red-2), transparent 80%);
760 | --background-feedback-info: color-mix(in hsl, var(--blue-2), transparent 80%);
761 | --background-feedback-positive: color-mix(in hsl, var(--green-2), transparent 80%);
762 | --background-feedback-warning: color-mix(in hsl, var(--yellow-2), transparent 80%);
763 |
764 | --interactive-normal: var(--text-4);
765 | --interactive-hover: var(--text-3);
766 | --interactive-active: var(--text-3);
767 | --interactive-muted: var(--text-5);
768 |
769 | --mention-foreground: var(--accent-1);
770 | --mention-background: color-mix(in hsl, var(--accent-2), transparent 90%);
771 |
772 | --channel-text-area-placeholder: var(--text-5);
773 |
774 | --message-reacted-text: var(--text-2);
775 | --message-reacted-background: color-mix(in hsl, var(--accent-2), transparent 80%);
776 |
777 | --custom-channel-members-bg: var(--bg-4);
778 |
779 | --redesign-input-control-selected: var(--accent-2);
780 |
781 | --scrollbar-auto-thumb: var(--bg-3);
782 | --scrollbar-auto-track: transparent;
783 | --scrollbar-thin-thumb: var(--bg-3);
784 | --scrollbar-thin-track: transparent;
785 |
786 | --white: var(--text-0);
787 | --white-500: var(--text-0);
788 | --redesign-button-overlay-alpha-text: var(--text-2);
789 |
790 | --brand-360: var(--accent-2);
791 | --brand-500: var(--accent-2);
792 | --blurple-50: var(--accent-2);
793 |
794 | --red-400: var(--red-2);
795 | --red-500: var(--red-3);
796 |
797 | --green-360: var(--green-2); /* seems to be mostly used by vencord plugins */
798 | --primary-400: var(--text-4);
799 | }
800 |
801 | .visual-refresh {
802 | ::placeholder {
803 | color: var(--text-5);
804 | }
805 |
806 | .modeUnreadImportant__2ea32 .icon__2ea32,
807 | .wrapper__2ea32:hover .icon__2ea32 /* correct channel icon color */ {
808 | color: var(--text-3);
809 | }
810 |
811 | .text_b88801 > strong /* xxx is typing.. */ {
812 | color: var(--text-3);
813 | }
814 |
815 | .folder__48112[aria-expanded="false"] > .folderIconWrapper__48112 /* collapsed folders */ {
816 | --background-primary: var(--bg-3);
817 | }
818 |
819 | .panel__5dec7 /* game activity panel */,
820 | #vc-spotify-player /* vencord spotify plugin */,
821 | .container__722ff /* background between vc and vc chat */ {
822 | background: none;
823 | }
824 |
825 | .side_b3f026 .item_b3f026:hover /* settings tab */ {
826 | background-color: var(--bg-3) !important;
827 | }
828 | .side_b3f026 .item_b3f026:active,
829 | .side_b3f026 .item_b3f026.selected_b3f026 {
830 | background-color: var(--bg-2) !important;
831 | }
832 |
833 | .quickSelectPopout_ebaca5 /* dm vc region select popout */,
834 | .participantsButton__211d1 /* vc participants button */,
835 | .voiceBar__7aaec /* n in voice bar (channel list) */,
836 | .mainCard_f369db /* form posts */ {
837 | background-color: var(--bg-3);
838 | }
839 |
840 | .colorable_f1ceac.primaryDark_f1ceac,
841 | .reaction_f8896c /* forum post reaction */ {
842 | background-color: var(--bg-2);
843 | }
844 |
845 | .expandedFolderIconWrapper__48112 > svg[style="color: rgb(88, 101, 242);"] /* folder icon */ {
846 | color: var(--accent-2) !important;
847 | }
848 | .colorPickerSwatch__459fb[style="background-color: rgb(88, 101, 242);"] /* folder color picker swatch */,
849 | .newBadge_faa96b /* forum post new badge */,
850 | .mentioned__5126c:before /* mention message left edge */ {
851 | background-color: var(--accent-2) !important;
852 | }
853 | .replying__5126c:before /* reply message left edge */ {
854 | background-color: var(--text-2) !important;
855 | }
856 |
857 | #app-mount .message__5126c.replying__5126c:hover /* override fix for message reply hover */ {
858 | background: var(--reply-hover);
859 | }
860 |
861 | .visual-refresh .voiceBar__7aaec .barText__7aaec, .visual-refresh .voiceChannelsIcon__7aaec /* x in voice bar text */ {
862 | color: var(--accent-2);
863 | }
864 |
865 | .ephemeral__5126c /* ephemeral messages */ {
866 | background: var(--mention) !important;
867 | }
868 | .ephemeral__5126c:hover {
869 | background: var(--mention-hover) !important;
870 | }
871 |
872 | .botTagRegular__82f07 /* bot tag */ {
873 | background-color: var(--accent-2);
874 | }
875 | .botTagOP__82f07 /* forum post op tag */ {
876 | color: var(--text-0);
877 | }
878 |
879 | .container__87bf1 /* settings checkbutton background */ {
880 | background-color: var(--bg-1) !important;
881 | transition: background-color 0.2s ease;
882 | }
883 | .container__87bf1.checked__87bf1 /* settings checkbutton background */ {
884 | background-color: var(--accent-2) !important;
885 | }
886 | .container__87bf1 .slider__87bf1 > svg > path /* settings checkbutton check */ {
887 | fill: var(--bg-1) !important;
888 | transition: fill 0.2s ease;
889 | }
890 | .container__87bf1.checked__87bf1 .slider__87bf1 > svg > path /* settings checkbutton check */ {
891 | fill: var(--accent-2) !important;
892 | }
893 | .container__87bf1 rect[fill='white'] /* settings checkbutton slider */ {
894 | fill: var(--text-3) !important;
895 | transition: fill 0.2s ease;
896 | }
897 | .container__87bf1.checked__87bf1 rect[fill='white'] /* settings checkbutton slider */ {
898 | fill: var(--text-0) !important;
899 | }
900 |
901 | .refreshIcon__001a7 /* settings radiobutton center */ {
902 | fill: var(--text-0);
903 | }
904 |
905 | .categoryText_d02962 /* gif chooser category names */,
906 | .bannerColor_fb7f94 /* profile banner button */,
907 | .backButton_e4cb9a /* stream preview back button */,
908 | .viewersIcon_d6b206 /* stream preview viewers icon */,
909 | .bottomControls_e4cb9a /* stream preview viewer number */,
910 | .pictureInPictureVideo_e4cb9a .controlIcon_f1ceac /* stream preview control icon */,
911 | .bannerVisible_f37cb1 .name_f37cb1 /* server name over banner image */,
912 | .dropdownButtonBannerVisible__2637a /* server name over banner dropdown button */ {
913 | color: var(--text-1);
914 | }
915 | .headerText_e4cb9a.base_eb1a4c /* stream preview header text */,
916 | .participantName__2cdb8 /* stream preview participant name */ {
917 | color: var(--text-1) !important;
918 | }
919 | .playPausePopIcon_cf09d8 > path /* video play/pause popup */ {
920 | fill: var(--text-1);
921 | }
922 | .headerTitle_e4cb9a:hover /* stream preview header title hover underline */ {
923 | border-color: var(--text-1) !important;
924 | }
925 | .controlIcon_cf09d8 /* video play button */,
926 | .wrapper_cf09d8 /* video time */,
927 | .iconWrapper__6eb54 /* video initial play button */,
928 | .wrapper__926d7 /* youtube embed play button */,
929 | .viewersIcon_d6b206:hover /* stream preview viewers icon */ ,
930 | .headerTitle_e4cb9a:hover .backButton_e4cb9a /* stream preview back button hover */,
931 | .viewersIcon_d6b206:hover /* stream preview viewers icon */,
932 | .pictureInPictureVideo_e4cb9a .controlIcon_f1ceac:hover /* stream preview control icon */ {
933 | color: var(--text-2);
934 | }
935 | .wrapper__926d7 a:link,
936 | .wrapper__926d7 a:visited,
937 | .headerTitle_e4cb9a:hover .headerText_e4cb9a.base_eb1a4c /* stream preview back button hover */ {
938 | color: var(--text-2) !important;
939 | }
940 | .downloadHoverButtonIcon__6c706 /* video download button */,
941 | .iconContainer__211d1>svg /* vc participants button icon */,
942 | .selectedIcon__2f4f7 /* vc selected camera icon */,
943 | .colorable_f1ceac.primaryDark_f1ceac .centerIcon_f1ceac /* vc icon button */,
944 | .colorable_f1ceac.primaryDark_f1ceac /* vc icon button nub */,
945 | .iconBadge__650eb.base__2b1f5 /* server vc badge */,
946 | #app-mount .akaBadge__488b1 /* aka badge */,
947 | .message_fcf29c /* you have unsaved settings message */,
948 | .friendRequestsButton__523aa .base__2b1f5 /* inbox friend request number */,
949 | .textBadge__2b1f5[style='background-color: var(--background-accent);'],
950 | .tooltipBlack__382e7 /* server boost tooltip */,
951 | .colorable_f1ceac.experimentDark_f1ceac, .colorable_f1ceac.experimentDark_f1ceac .centerIcon_f1ceac /* vc buttons */ {
952 | color: var(--text-3);
953 | }
954 | .status__2f4f7 path[fill='var(--white)'],
955 | .emptyChannelIcon__00de6 path[fill='var(--white)'] /* channel start icon */ {
956 | fill: var(--text-3);
957 | }
958 | .grabber_a562c8 /* vc volume slider grabber */ {
959 | background-color: var(--text-3);
960 | }
961 | .textBadge__2b1f5 /* new text badge (right click on person in vc) */ {
962 | color: var(--text-0);
963 | }
964 |
965 | .unread__3b95d /* new unreads bar (channel list */ {
966 | color: var(--text-4);
967 | }
968 |
969 | .colorable_f1ceac.white_f1ceac /* vc icon button nub when white */ {
970 | background-color: var(--primary-130);
971 | color: var(--bg-4);
972 | }
973 |
974 | .iconBadge__650eb.isCurrentUserConnected__650eb /* green vc badge when connected */ {
975 | color: var(--text-0);
976 | }
977 |
978 | .container__37e49 /* user panel buttons */,
979 | .numberBadge__2b1f5 /* unread number badge */,
980 | .toolbar__9293f /* toolbar button strikethroughs */ {
981 | --status-danger: var(--accent-new);
982 | }
983 |
984 | .container__37e49 .button__67645.redGlow__67645 /* user panel button backgrounds*/ {
985 | background-color: color-mix(in hsl, var(--accent-new), transparent 90%);
986 | }
987 | .container__37e49 .button__67645.enabled__67645.redGlow__67645:hover /* user panel button backgrounds hover */ {
988 | background-color: color-mix(in hsl, var(--accent-new), transparent 80%);
989 | }
990 |
991 | .divider__5126c /* unread divider */ {
992 | --divider-color: var(--accent-new);
993 | }
994 |
995 | .iconBadge__9293f /* icon badge */,
996 | .mentionsBar__7aaec /* new mention pill */,
997 | .mention__3b95d /* server list new mention pill */ {
998 | background-color: var(--accent-new);
999 | }
1000 |
1001 | .newMessagesBar__0f481 /* unread bar */ {
1002 | background-color: var(--accent-3);
1003 | }
1004 | .barButtonAlt__0f481 /* unread bar mark as read button */ {
1005 | --button-secondary-background: var(--accent-3);
1006 | --button-secondary-background-hover: var(--accent-4);
1007 | }
1008 |
1009 | .updateIconForeground__49676 /* update button */ {
1010 | fill: var(--green-1);
1011 | }
1012 |
1013 | .colorable_f1ceac.red_f1ceac:hover /* vc disconnect button hover */ {
1014 | background-color: var(--red-4);
1015 | }
1016 | .button_f7ecac.dangerous_f7ecac:hover /* image attachment delete button hover in chat bar */ {
1017 | color: var(--red-4);
1018 | }
1019 | .contentWrapper__08434 ::-webkit-scrollbar-thumb /* gif picker scrollbar */ {
1020 | background-color: var(--bg-1);
1021 | }
1022 |
1023 | .circleIconButton__5bc7e /* new server button */ {
1024 | color: var(--text-3);
1025 | }
1026 | .circleIconButton__5bc7e:hover {
1027 | color: var(--bg-4);
1028 | }
1029 |
1030 | .tooltipGrey__382e7 /* spotify plugin time tooltip */ {
1031 | color: var(--text-3);
1032 | background-color: var(--bg-3);
1033 | }
1034 |
1035 | .textContentFooter__9a337 /* forum post image fade */ {
1036 | background: linear-gradient(0deg, var(--bg-4), transparent);
1037 | }
1038 |
1039 | .result__2dc39:after /* remove gif hover overlay */ {
1040 | display: none;
1041 | }
1042 | .result__2dc39:hover /* gif hover */ {
1043 | outline: 2px solid var(--accent-2);
1044 | }
1045 |
1046 | .reactionBtn__23977.forceShow__23977:hover /* fix add reaction button border hover */ {
1047 | border-color: var(--bg-2);
1048 | }
1049 |
1050 | .flash__03436[data-flash=true] /* reply message flash */ {
1051 | background: var(--background-message-highlight);
1052 | }
1053 |
1054 | /* status indicators */
1055 | rect[fill='#83838b'] {
1056 | fill: var(--offline);
1057 | }
1058 | .status_a423bd[style='background-color: rgb(131, 131, 139);'] {
1059 | background-color: var(--offline) !important;
1060 | }
1061 | rect[fill='#43a25a'],
1062 | path[fill='#43a25a'] /* status activity icon */,
1063 | .vc-platform-indicator > svg[fill="#43a25a"] {
1064 | fill: var(--online);
1065 | }
1066 | .status_a423bd[style='background-color: rgb(67, 162, 90);'] {
1067 | background-color: var(--online) !important;
1068 | }
1069 | rect[fill='#ca9654'],
1070 | .vc-platform-indicator > svg[fill='#ca9654'] {
1071 | fill: var(--idle);
1072 | }
1073 | .status_a423bd[style='background-color: rgb(201, 150, 86);'] {
1074 | background-color: var(--idle) !important;
1075 | }
1076 | rect[fill='#d83a42'],
1077 | .vc-platform-indicator > svg[fill='#d83a42'] {
1078 | fill: var(--dnd);
1079 | }
1080 | .status_a423bd[style='background-color: rgb(216, 58, 66);'] {
1081 | background-color: var(--dnd) !important;
1082 | }
1083 | rect[fill='#9147ff'] {
1084 | fill: var(--streaming);
1085 | }
1086 | div[style='display: flex; justify-content: center; align-items: center; border-radius: 5px; background-color: rgb(67, 162, 90); height: 10px; width: 25px;'] {
1087 | background-color: var(--online) !important;
1088 | }
1089 |
1090 | /* fix radio bar button colors */
1091 | .radioBar__001a7[style='--radio-bar-accent-color: var(--yellow-360); padding: 10px;'] {
1092 | --radio-bar-accent-color: var(--yellow-2) !important;
1093 | }
1094 | .radioBar__001a7[style='--radio-bar-accent-color: var(--green-360); padding: 10px;'] {
1095 | --radio-bar-accent-color: var(--green-2) !important;
1096 | }
1097 | .radioBar__001a7[style='--radio-bar-accent-color: var(--red-400); padding: 10px;'] {
1098 | --radio-bar-accent-color: var(--red-2) !important;
1099 | }
1100 |
1101 | #vc-spotify-player {
1102 | --vc-spotify-green: var(--accent-2);
1103 | }
1104 |
1105 | ::selection,
1106 | .highlight {
1107 | background: var(--accent-3);
1108 | color: var(--text-0);
1109 | }
1110 | }
1111 | }
1112 |
1113 | /* dms-button.css */
1114 | @property --dms-icon {
1115 | syntax: 'default | off | on';
1116 | inherits: false;
1117 | initial-value: on;
1118 | }
1119 |
1120 | body {
1121 | --dms-icon-svg-url: url('https://upload.wikimedia.org/wikipedia/commons/c/c4/Font_Awesome_5_solid_moon.svg'); /* icon svg url. MUST BE A SVG. */
1122 | --dms-icon-svg-size: 90%; /* size of the svg (css mask-size) */
1123 | --dms-icon-color-before: var(--icon-secondary);
1124 | --dms-icon-color-after: var(--white);
1125 | --dms-background-image-url: url('https://raw.githubusercontent.com/catppuccin/catppuccin/main/assets/logos/exports/1544x1544_circle.png');
1126 | --dms-background-image-size: cover; /* size of the background image (css background-size) */
1127 | --dms-background-color: linear-gradient(70deg, var(--blue-2), var(--purple-2), var(--red-2)); /* color of the background image (css background) */
1128 | }
1129 |
1130 | @container body style(--dms-icon: on) {
1131 | .wrapper__6e9f8[data-list-item-id='guildsnav___home'] > .childWrapper__6e9f8 > svg {
1132 | display: none;
1133 | }
1134 | .wrapper__6e9f8[data-list-item-id='guildsnav___home'] > .childWrapper__6e9f8::before {
1135 | content: '';
1136 | display: block;
1137 | position: absolute;
1138 | width: 65%;
1139 | height: 65%;
1140 | background: var(--dms-icon-color-before);
1141 | mask-image: var(--dms-icon-svg-url);
1142 | mask-size: var(--dms-icon-svg-size);
1143 | mask-position: center;
1144 | mask-repeat: no-repeat;
1145 | transition: background-color 0.15s ease-out;
1146 | }
1147 | .wrapper__6e9f8[data-list-item-id='guildsnav___home']:hover > .childWrapper__6e9f8::before {
1148 | transform: rotate(0deg) scale(1);
1149 | }
1150 | .wrapper__6e9f8[data-list-item-id='guildsnav___home']:hover > .childWrapper__6e9f8::before,
1151 | .wrapper__6e9f8[data-list-item-id='guildsnav___home'].selected__6e9f8 > .childWrapper__6e9f8::before {
1152 | background: var(--dms-icon-color-after);
1153 | transform: rotate(-360deg) scale(0.8);
1154 | }
1155 |
1156 | @container body style(--animations: on) {
1157 | .wrapper__6e9f8[data-list-item-id='guildsnav___home'] .childWrapper__6e9f8::before {
1158 | transition: background-color 0.15s ease-out, transform var(--dms-icon-svg-transition);
1159 | }
1160 | }
1161 | }
1162 |
1163 | @container body style(--dms-icon: off) {
1164 | .wrapper__6e9f8[data-list-item-id='guildsnav___home'] > .childWrapper__6e9f8 > svg {
1165 | display: none;
1166 | }
1167 | }
1168 |
1169 | @property --dms-background {
1170 | syntax: 'off | image | color';
1171 | inherits: false;
1172 | initial-value: off;
1173 | }
1174 |
1175 | @container body style(--dms-background: image) {
1176 | .wrapper__6e9f8[data-list-item-id='guildsnav___home'] > .childWrapper__6e9f8 {
1177 | background-image: var(--dms-background-image-url);
1178 | background-color: transparent !important;
1179 | background-size: var(--dms-background-image-size);
1180 | background-position: center;
1181 | background-repeat: no-repeat;
1182 | }
1183 | }
1184 |
1185 | @container body style(--dms-background: color) {
1186 | .wrapper__6e9f8[data-list-item-id='guildsnav___home'] > .childWrapper__6e9f8 {
1187 | background: var(--dms-background-color);
1188 | }
1189 | }
1190 |
1191 | /* flipped-chatbar.css */
1192 | @property --flipped-chatbar {
1193 | syntax: 'on | off';
1194 | inherits: false;
1195 | initial-value: on;
1196 | }
1197 |
1198 | body {
1199 | --chatbar-height: 47px; /* height of the chatbar */
1200 | --chatbar-padding: 8px; /* padding of the chatbar */
1201 | --custom-channel-textarea-text-area-height: var(--chatbar-height);
1202 | }
1203 |
1204 | @container body style(--flipped-chatbar: on) {
1205 | .visual-refresh {
1206 | .form_f75fb0 {
1207 | margin: 0 var(--chatbar-padding) var(--chatbar-padding) var(--chatbar-padding);
1208 | padding: 0;
1209 | --chatbar-border-color: var(--border-faint);
1210 | }
1211 | .channelTextArea_f75fb0 {
1212 | margin: 0;
1213 | border-color: var(--chatbar-border-color);
1214 | transition: none;
1215 | }
1216 | .base_b88801 {
1217 | top: -24px;
1218 | left: 0;
1219 | right: 0;
1220 | background-color: var(--chat-background-default);
1221 | padding: 0 8px;
1222 | border-radius: var(--radius-md) var(--radius-md) 0 0;
1223 | border: 1px solid var(--chatbar-border-color);
1224 | border-bottom: none;
1225 | transition: none;
1226 | box-sizing: border-box;
1227 | }
1228 | .stackedBars__74017,
1229 | .threadSuggestionBar__841c8 {
1230 | border-color: var(--chatbar-border-color) !important;
1231 | }
1232 | .stackedBars__74017 {
1233 | background: none !important;
1234 | }
1235 | .form_f75fb0:has(.base_b88801) {
1236 | .channelTextArea_f75fb0,
1237 | .wrapper__44df5 {
1238 | border-radius: 0 0 var(--radius-md) var(--radius-md);
1239 | }
1240 | }
1241 | .form_f75fb0:has(.channelTextArea__74017:focus-within) {
1242 | --chatbar-border-color: var(--border-subtle);
1243 | }
1244 | .scrollerSpacer__36d07 {
1245 | height: calc(24px + var(--chatbar-padding));
1246 | }
1247 | .scroller__36d07::-webkit-scrollbar-track {
1248 | margin-bottom: calc(20px + var(--chatbar-padding));
1249 | }
1250 | .bottomBar__0f481 {
1251 | margin-bottom: 24px;
1252 | }
1253 | .wrapper__44df5 /* phone verification bar */ {
1254 | margin: 0;
1255 | border-radius: var(--radius-md);
1256 | }
1257 | }
1258 | }
1259 |
1260 | /* top-bar.css */
1261 | @property --move-top-bar-buttons {
1262 | syntax: 'on | off';
1263 | inherits: false;
1264 | initial-value: off;
1265 | }
1266 |
1267 | @container body style(--move-top-bar-buttons: on) {
1268 | .visual-refresh {
1269 | /* remove help button */
1270 | .trailing_c38106 > a[href="https://support.discord.com"]
1271 | {
1272 | display: none;
1273 | }
1274 |
1275 | /* make server list inner scroll */
1276 | .stack_dbd263 {
1277 | overflow: hidden scroll;
1278 | scrollbar-width: none;
1279 | }
1280 | /* create space for inbox button */
1281 | .tutorialContainer__1f388 {
1282 | margin-bottom: 48px;
1283 | }
1284 | /* move inbox button */
1285 | .recentsIcon_c99c29 {
1286 | position: fixed;
1287 | width: 40px;
1288 | height: 40px;
1289 | top: calc(var(--custom-app-top-bar-height) + 1px + var(--custom-guild-list-padding) + 48px);
1290 | left: calc(var(--gap) + 1px + var(--custom-guild-list-padding));
1291 | }
1292 | /* style inbox button */
1293 | .recentsIcon_c99c29 .button__85643 {
1294 | width: 100%;
1295 | height: 100%;
1296 | background-color: var(--background-surface-higher);
1297 | border-radius: var(--radius-md);
1298 | transition: background-color 0.15s ease-out;
1299 |
1300 | &:hover {
1301 | background-color: var(--bg-brand);
1302 |
1303 | .icon__9293f {
1304 | color: var(--white);
1305 | }
1306 | }
1307 | }
1308 | .recentsIcon_c99c29 .svg__2338f {
1309 | transition: color 0.15s ease-out;
1310 | width: 24px;
1311 | height: 24px;
1312 | }
1313 | /* shift inbox popup panel into view */
1314 | .recentMentionsPopout__95796 {
1315 | transform: translateX(100%);
1316 | }
1317 | /* move top bar title */
1318 | .title_c38106 {
1319 | padding-left: var(--gap);
1320 | justify-content: flex-start;
1321 | }
1322 | .title__85643 {
1323 | gap: 4px;
1324 | }
1325 | /* style top bar title */
1326 | .title__85643 .icon_f34534 {
1327 | width: 16px;
1328 | height: 16px;
1329 | display: none;
1330 | }
1331 | .title__85643 .text-sm\/medium_cf4812 {
1332 | line-height: 90%;
1333 | color: var(--text-muted);
1334 | font-weight: 700;
1335 | }
1336 |
1337 | /* fix settings animation transform */
1338 | .layer__960e4.baseLayer__960e4 {
1339 | transform: none !important;
1340 | }
1341 | .layers__960e4 > .layer__960e4.animating__960e4 {
1342 | will-change: opacity;
1343 | }
1344 |
1345 | /* unread icon */
1346 | .recentsIcon_c99c29 .iconBadge__9293f {
1347 | --custom-icon-offset: 8px;
1348 | width: 10px;
1349 | height: 10px;
1350 | transition: background 0.15s ease-out;
1351 | }
1352 |
1353 | .recentsIcon_c99c29:hover .iconBadge__9293f {
1354 | background: var(--white);
1355 | }
1356 | }
1357 | }
1358 |
1359 | /* transparency-blur.css */
1360 | @property --panel-blur {
1361 | syntax: 'on | off';
1362 | inherits: false;
1363 | initial-value: off;
1364 | }
1365 |
1366 | @container body style(--panel-blur: on) {
1367 | .visual-refresh {
1368 | #app-mount {
1369 | --panel-backdrop-filter: blur(var(--blur-amount));
1370 | }
1371 |
1372 | .popoverReactionHoverBar_f84418 /* message hover quick action bar */,
1373 | .tooltip__382e7 /* tooltips */ {
1374 | background: var(--bg-floating);
1375 | }
1376 | .menu_c1e9c4 /* context menus */,
1377 | .contentWrapper__08434 /* emoji/gif panel */,
1378 | .root__49fc1 /* modals like invite */,
1379 | .outer_c0bea0.biteSize_c0bea0:not(.custom-theme-background) /* small profile popup */,
1380 | .autocomplete__6b0e0 /* autocomplete */,
1381 | .container__55c99 /* search suggestions */,
1382 | .messagesPopoutWrap__45690 /* inbox */,
1383 | .popout__76f04 /* channel hover popout */ {
1384 | background: var(--bg-floating);
1385 | }
1386 | }
1387 | }
1388 |
1389 | @property --transparency-tweaks {
1390 | syntax: 'on | off';
1391 | inherits: false;
1392 | initial-value: off;
1393 | }
1394 |
1395 | @container body style(--transparency-tweaks: on) {
1396 | .visual-refresh {
1397 | .formWithLoadedChatInput_f75fb0:before,
1398 | .children__9293f:after {
1399 | display: none;
1400 | }
1401 | }
1402 | }
1403 |
1404 | @property --remove-bg-layer {
1405 | syntax: 'on | off';
1406 | inherits: false;
1407 | initial-value: off;
1408 | }
1409 |
1410 | @container body style(--remove-bg-layer: on) {
1411 | .bg__960e4 {
1412 | background: transparent !important;
1413 | }
1414 | }
1415 |
1416 | /* user-panel.css */
1417 | @property --small-user-panel {
1418 | syntax: 'on | off';
1419 | inherits: false;
1420 | initial-value: off;
1421 | }
1422 |
1423 | @container body style(--small-user-panel: on) {
1424 | .visual-refresh {
1425 | .base_c48ade {
1426 | grid-template-areas:
1427 | 'titleBar titleBar titleBar'
1428 | 'guildsList notice notice'
1429 | 'guildsList channelsList page'
1430 | 'guildsList userPanel page';
1431 | }
1432 | .panels_c48ade {
1433 | max-width: calc(var(--custom-guild-sidebar-width) - var(--custom-guild-list-width));
1434 | }
1435 | }
1436 | }
1437 |
1438 | /* window-controls.css */
1439 | @property --custom-window-controls {
1440 | syntax: 'on | off';
1441 | inherits: false;
1442 | initial-value: off;
1443 | }
1444 |
1445 | body {
1446 | --window-control-size: 14px;
1447 | }
1448 |
1449 | @container body style(--custom-window-controls: on) {
1450 | .winButtons_c38106 {
1451 | gap: 0;
1452 | padding-right: calc(var(--gap) - (var(--window-control-size) / 2) + 1px);
1453 | }
1454 | .winButtons_c38106::before {
1455 | margin-right: calc(var(--custom-app-top-bar-height) / 4);
1456 | }
1457 | .winButton_c38106 > svg {
1458 | display: none;
1459 | }
1460 | .winButton_c38106 {
1461 | background: none !important;
1462 | width: calc(var(--window-control-size) * 2);
1463 | height: var(--custom-app-top-bar-height);
1464 | }
1465 | .winButton_c38106::after {
1466 | display: block;
1467 | content: '';
1468 | height: var(--window-control-size);
1469 | width: var(--window-control-size);
1470 | border-radius: 50%;
1471 | }
1472 | .winButton_c38106:hover::after {
1473 | filter: brightness(0.7);
1474 | }
1475 | .winButton_c38106:active::after {
1476 | transform: scale(0.9);
1477 | }
1478 | .winButtonClose_c38106::after {
1479 | background-color: var(--dnd) !important;
1480 | }
1481 | .winButtonMinMax_c38106:nth-child(1)::after {
1482 | background-color: var(--idle) !important;
1483 | }
1484 | .winButtonMinMax_c38106:nth-child(2)::after {
1485 | background-color: var(--online) !important;
1486 | }
1487 | }
1488 |
1489 |
--------------------------------------------------------------------------------
/nix/hellwal.nix:
--------------------------------------------------------------------------------
1 | { pkgs, ... }:
2 |
3 | let
4 | discord-colors = ''
5 | --background: #%% background.hex %%;
6 | --foreground: #%% foreground.hex %%;
7 | --cursor: #%% cursor.hex %%;
8 | --border: #%% border.hex %%;
9 |
10 | --color0: #%% color0.hex %%;
11 | --color1: #%% color1.hex %%;
12 | --color2: #%% color2.hex %%;
13 | --color3: #%% color3.hex %%;
14 | --color4: #%% color4.hex %%;
15 | --color5: #%% color5.hex %%;
16 | --color6: #%% color6.hex %%;
17 | --color7: #%% color7.hex %%;
18 | --color8: #%% color8.hex %%;
19 | --color9: #%% color9.hex %%;
20 | --color10: #%% color10.hex %%;
21 | --color11: #%% color11.hex %%;
22 | --color12: #%% color12.hex %%;
23 | --color13: #%% color13.hex %%;
24 | --color14: #%% color14.hex %%;
25 | --color15: #%% color15.hex %%;
26 | '';
27 | in {
28 | home.file = {
29 | ".config/hellwal/templates/discord-colors.css".text = ''${discord-colors}'';
30 | };
31 | }
32 |
--------------------------------------------------------------------------------
/nix/pywal.nix:
--------------------------------------------------------------------------------
1 | { pkgs, ... }:
2 |
3 | let
4 | discord-colors = ''
5 | --color0: {color0};
6 | --color1: {color1};
7 | --color2: {color2};
8 | --color3: {color3};
9 | --color4: {color4};
10 | --color5: {color5};
11 | --color6: {color6};
12 | --color7: {color7};
13 | --color8: {color8};
14 | --color9: {color9};
15 | --color10: {color10};
16 | --color11: {color11};
17 | --color12: {color12};
18 | --color13: {color13};
19 | --color14: {color14};
20 | --color15: {color15};
21 | '';
22 | in {
23 | home.file = {
24 | ".config/wal/templates/discord-colors.css".text = ''${discord-colors}'';
25 | };
26 | }
27 |
--------------------------------------------------------------------------------
/nix/wallust.nix:
--------------------------------------------------------------------------------
1 | { pkgs, lib, ... }:
2 |
3 | {
4 | home.packages = [ pkgs.wallust ];
5 |
6 | home.file.".config/wallust/wallust.toml".text = ''
7 | [templates]
8 | themecord.template = "discord-colors.css"
9 | themecord.target = '~/.cache/wallust/discord-colors.css'
10 | '';
11 |
12 | home.file.".config/wallust/templates/discord-colors.css" .text = ''
13 | --color0: {{ color0 }};
14 | --color1: {{ color1 }};
15 | --color2: {{ color2 }};
16 | --color3: {{ color3 }};
17 | --color4: {{ color4 }};
18 | --color5: {{ color5 }};
19 | --color6: {{ color6 }};
20 | --color7: {{ color7 }};
21 | --color8: {{ color8 }};
22 | --color9: {{ color9 }};
23 | --color10: {{ color10 }};
24 | --color11: {{ color11 }};
25 | --color12: {{ color12 }};
26 | --color13: {{ color13 }};
27 | --color14: {{ color14 }};
28 | --color15: {{ color15 }};
29 | '';
30 | }
31 |
--------------------------------------------------------------------------------
/scripts/themecord.sh:
--------------------------------------------------------------------------------
1 | #!/usr/bin/env sh
2 |
3 | # RUN THIS SCRIPT RIGHT AFTER ONE OF THE FOLLOWING:
4 | # - hellwal
5 | # - pywal
6 | # - wallust
7 | #
8 | # TO PROPERLY APPLY COLORS!
9 |
10 | confPath="/home/$USER/.config"
11 | supportedClients=("Vencord" "vesktop")
12 | availableClients=()
13 | generatedColors="hellwal" # default option is hellwal
14 | colosPath=""
15 | themeFiller="$dark_theme"
16 |
17 | show_help() {
18 | echo "Usage: themecord [OPTION]"
19 | echo "Discord theme will always match your wallpaper! "
20 | echo
21 | echo "Options:"
22 | echo " -h Display this message and exit"
23 | echo " -l use light mode instead of dark mode"
24 | echo
25 | echo "Select wallpaper palette backend:"
26 | echo " -g Use hellwal"
27 | echo " -p Use pywal"
28 | echo " -w Use wallust"
29 | echo
30 | echo " -f Provide path to generated discord colors"
31 | echo
32 | }
33 |
34 | while getopts ":hlwpgf:" opt; do
35 | case ${opt} in
36 | h )
37 | show_help
38 | exit 0
39 | ;;
40 | l )
41 | themeFiller="$light_theme"
42 | ;;
43 | w )
44 | generatedColors="wallust"
45 | ;;
46 | p )
47 | generatedColors="wal"
48 | ;;
49 | g )
50 | generatedColors="hellwal"
51 | colorsPath="$OPTARG"
52 | ;;
53 | f )
54 | colorsPath="$OPTARG"
55 | ;;
56 | \? )
57 | echo "Invalid option: -$OPTARG" 1>&2
58 | echo
59 | show_help
60 | exit 1
61 | ;;
62 | esac
63 | done
64 |
65 | function print_err() {
66 | echo "[ERROR] $1"
67 | echo "Exitting..."
68 | }
69 |
70 | for client in "${supportedClients[@]}"; do
71 | client_path=~/.config/$client
72 | if test -d $(realpath "$client_path"); then
73 | echo "[SUCCESS] $client DETECTED (path: $client_path)"
74 | availableClients+=("$client")
75 | continue
76 | else
77 | echo "[FAILURE] $client not DETECTED (path: $client_path)"
78 | continue
79 | fi
80 | done
81 |
82 | if [ -z "$availableClients" ]; then
83 | print_err "No compatible clients detected! In order to use this script you have to use compatible discord clients! Check out github page for more info: https://github.com/danihek/Themecord"
84 | exit
85 | fi
86 |
87 | for client in "${availableClients[@]}"; do
88 | themecordPath="/home/$USER/.config/$client/themes/Themecord.css"
89 |
90 | if test -f "$themecordPath"; then
91 | echo "[INFO] Themecord found in $client"
92 | else
93 | echo :root { > $themecordPath
94 | echo "}" >> $themecordPath
95 | printf '%s\n' "$themecordBase" >> $themecordPath
96 | echo "[INFO] Added themecord base to: $themecordPath"
97 | fi
98 | done
99 |
100 | if [ "$colorsPath" == "" ]; then
101 | colorsPath="/home/$USER/.cache/$generatedColors/discord-colors.css"
102 | fi
103 |
104 | if [ ! -f "$colorsPath" ]; then
105 | print_err "Cannot access $colorsPath"
106 | exit
107 | fi
108 | echo "[INFO] discord-colors.css path: $colorsPath"
109 |
110 | for client in "${availableClients[@]}"; do
111 | themecordPath="/home/$USER/.config/$client/themes/Themecord.css"
112 |
113 | echo "/* This discord theme is generated by Themecord! */" > $themecordPath
114 | echo :root { >> $themecordPath
115 | cat $colorsPath | while IFS= read -r line; do echo -e "\n\t"$line >> $themecordPath; done
116 |
117 | if [[ -v themecordFiller ]]; then
118 | printf '%s\n' "$themecordFiller" >> $themecordPath
119 | else
120 | print_err "Cannot access \$themecordFiller content."
121 | fi
122 |
123 | if [[ -v themeFiller ]]; then
124 | printf '%s\n' "$themeFiller " >> $themecordPath
125 | else
126 | print_err "Cannot access \$themeFiller content."
127 | fi
128 |
129 | if [[ -v themecordFiller2 ]]; then
130 | printf '%s\n' "$themecordFiller2" >> $themecordPath
131 | else
132 | print_err "Cannot access \$themecordFiller2 content."
133 | fi
134 |
135 | printf "%s\n" "$themecordBase" >> $themecordPath
136 | done
137 |
--------------------------------------------------------------------------------
/themecord:
--------------------------------------------------------------------------------
1 | #!/usr/bin/env sh
2 |
3 | #This is generated by themecord builder!
4 | themecordFiller=$(cat << 'EOF'
5 | }
6 |
7 | /* main.css */
8 | @import url('https://fonts.googleapis.com/css2?family=Figtree:ital,wght@0,300;0,400;0,500;0,600;0,700;0,800;0,900;1,300;1,400;1,500;1,600;1,700;1,800;1,900&display=swap');
9 |
10 | :root {
11 | container-name: root;
12 | --custom-guild-list-padding: 12px;
13 | --panel-backdrop-filter: none;
14 | }
15 |
16 | body {
17 | container-name: body;
18 |
19 | /* font, change to '' for default discord font */
20 | --font: 'figtree';
21 |
22 | /* sizes */
23 | --gap: 12px; /* spacing between panels */
24 | --divider-thickness: 4px; /* thickness of unread messages divider and highlighted message borders */
25 | }
26 |
27 | .visual-refresh {
28 | /* panel separation */
29 | .guilds_c48ade /* server list */,
30 | .sidebarList_c48ade /* channel list (includes dm list) */,
31 | .panels_c48ade /* user panel */,
32 | .chat_f75fb0 > .subtitleContainer_f75fb0 /* chat titlebar */,
33 | .chatContent_f75fb0 /* chat */,
34 | .container_c8ffbb /* member list */,
35 | .content_f75fb0 > .membersWrap_c8ffbb /* forum post member list */,
36 | .container__133bf > .container__9293f /* friends titlebar */,
37 | .container_f391e3 > .container__9293f /* message requests titlebar */,
38 | .homeWrapper__0920e > .container__9293f /* nitro page titlebar */,
39 | .container__01ae2 > .container__9293f /* vc chat titlebar */,
40 | .container_fb64c9 > .container__9293f /* new thread panel */,
41 | .peopleColumn__133bf /* online friends */,
42 | .nowPlayingColumn__133bf /* active now */,
43 | .scroller_c880e8 /* nitro page */,
44 | .container_f391e3 > .content_f75fb0 /* message requests */,
45 | .shop__6db1d /* shop */,
46 | .outer_c0bea0.panel_c0bea0 /* dm user panel */,
47 | .searchResultsWrap_a9e706 /* search results */,
48 | .container_f369db /* forum */,
49 | .chat_fb64c9 /* new thread panel */,
50 | .container_a592e1 /* server discovery */,
51 | .callContainer_cb9592 /* vc container */,
52 | .callContainer__722ff /* stage */ {
53 | background-color: var(--background-base-lower);
54 | border-radius: var(--radius-lg);
55 | border: 1px solid var(--border-subtle);
56 | backdrop-filter: var(--panel-backdrop-filter);
57 | }
58 |
59 | .base_c48ade /* base grid */ {
60 | display: grid;
61 | grid-template-columns: [start] min-content [guildsEnd] min-content [channelsEnd] 1fr [end];
62 | grid-template-rows: [top] var(--custom-app-top-bar-height) [titleBarEnd] min-content [noticeEnd] 1fr [contentEnd] min-content [end];
63 | grid-template-areas:
64 | 'titleBar titleBar titleBar'
65 | 'guildsList notice notice'
66 | 'guildsList channelsList page'
67 | 'userPanel userPanel page';
68 | gap: 0 var(--gap);
69 | }
70 |
71 | .panels_c48ade /* user panel */ {
72 | width: 100%;
73 | position: static;
74 | grid-area: userPanel;
75 | margin: var(--gap) 0 0 0;
76 | overflow: hidden;
77 | max-width: calc(var(--custom-guild-sidebar-width) + var(--gap) + 4px);
78 | }
79 |
80 | .sidebar_c48ade /* server list + channel list + user panel group */ {
81 | margin: 0 0 var(--gap) var(--gap);
82 | }
83 |
84 | .guilds_c48ade /* server list */ {
85 | margin-bottom: 0;
86 | }
87 | .scroller_ef3116 /* server list inner scroller */ {
88 | padding-top: var(--custom-guild-list-padding);
89 | }
90 |
91 | .container__2637a /* channel list inner */ {
92 | padding-bottom: 0;
93 | }
94 | .clickable_f37cb1,
95 | .container__2637a /* channel list inner */,
96 | .header_f37cb1 /* server name */ {
97 | background: none;
98 | }
99 |
100 | /* fix discord's idiotic server banners */
101 | .bannerImage_f37cb1,
102 | .bannerImg_f37cb1 {
103 | width: 100%;
104 | }
105 | .bannerVisible_f37cb1 .headerEllipseBackdrop_f37cb1 {
106 | display: none;
107 | }
108 | .headerGlass_f37cb1 {
109 | top: 0;
110 | left: 0;
111 | right: 0;
112 | width: auto;
113 | border-radius: var(--radius-lg) var(--radius-lg) 0 0;
114 | }
115 |
116 | .sidebar_c48ade:after /* server list + channel list bottom shadow */ {
117 | display: none;
118 | }
119 |
120 | .chat_f75fb0 /* chat group outer */ {
121 | border: none !important;
122 | background: none;
123 | }
124 | .container__133bf /* friends page group outer */,
125 | .page_c48ade {
126 | padding-bottom: var(--gap);
127 | padding-right: var(--gap);
128 | border: none !important;
129 | background: none;
130 | }
131 | .page_c48ade > .chat_f75fb0,
132 | .page_c48ade > .container__133bf {
133 | padding: 0;
134 | }
135 |
136 | .container__9293f /* friends, message requests, + other stuff titlebar */ {
137 | margin-bottom: var(--gap);
138 | }
139 |
140 | .subtitleContainer_f75fb0 /* chat titlebar */ {
141 | margin-bottom: var(--gap);
142 | }
143 | .title_f75fb0 /* chat titlebar inner */ {
144 | border: none;
145 | background: none;
146 | margin-bottom: 0;
147 | }
148 |
149 | .chatContent_f75fb0 /* chat */ {
150 | overflow: hidden;
151 | }
152 |
153 | .container_c8ffbb /* member list */ {
154 | margin-left: var(--gap);
155 | overflow: hidden;
156 | height: auto;
157 | min-width: var(--custom-member-list-width);
158 | }
159 | .content_f75fb0 > .membersWrap_c8ffbb /* forum post member list */ {
160 | margin-left: var(--gap);
161 | overflow: hidden;
162 | height: auto;
163 | }
164 | .members_c8ffbb /* member list inner */,
165 | .member_c8ffbb /* member list item */ {
166 | background: none;
167 | }
168 |
169 | .resizeHandle__01ae2 /* resize handle */ {
170 | background: transparent;
171 | }
172 |
173 | .privateChannels__35e86 /* dm list */,
174 | .scroller__99e7c /* dm list inner */ {
175 | background: none;
176 | }
177 | .scroller__99e7c /* dm list inner */ {
178 | margin-bottom: 0;
179 | }
180 |
181 | .tabBody__133bf /* online friends + active now group outer */ {
182 | background: none;
183 | }
184 |
185 | .nowPlayingColumn__133bf /* active now */ {
186 | margin-left: var(--gap);
187 | }
188 | .container__7d20c /* active now inner */ {
189 | background: none;
190 | }
191 | .scroller__7d20c /* active now inner */ {
192 | border: none;
193 | }
194 |
195 | .homeWrapper__0920e /* nitro page group inner */ {
196 | border: none;
197 | background: none;
198 | }
199 | .applicationStore_f07d62 /* nitro page group outer */ {
200 | background: none;
201 | }
202 |
203 | .shop__6db1d /* shop */ {
204 | overflow: hidden;
205 | height: auto;
206 | }
207 | .shop__08415 /* shop inner scroller */ {
208 | margin-top: calc(var(--custom-channel-header-height) * -1 - 16px);
209 | }
210 |
211 | .outer_c0bea0.panel_c0bea0 /* dm user panel */ {
212 | margin-left: var(--gap);
213 | overflow: hidden;
214 | height: auto;
215 | min-width: 340px;
216 | }
217 |
218 | .searchResultsWrap_a9e706 /* search results */ {
219 | margin-left: var(--gap);
220 | }
221 |
222 | .notice__6e2b9 /* notice banner */ {
223 | margin: 0 var(--gap) var(--gap) 0;
224 | border-radius: var(--radius-md);
225 | }
226 |
227 | .container__01ae2 /* vc chat + titlebar group */ {
228 | border: none;
229 | background: none;
230 | }
231 | .chat_ee72fa::before /* vc chat shadow */ {
232 | display: none;
233 | }
234 | .channelChatWrapper_cb9592 /* vc chat + titlebar group outer */ {
235 | background: none;
236 | }
237 |
238 | .page_c48ade > div > .chatLayerWrapper__01ae2 /* forum/thread chat outer */ {
239 | margin: 0 var(--gap) var(--gap) 0;
240 | height: calc(100% - var(--gap));
241 | }
242 | .container__01ae2 /* forum/thread chat */ {
243 | padding-left: calc((var(--gap) - var(--chat-resize-handle-width)));
244 | }
245 |
246 | .container_fb64c9 /* new thread panel */ {
247 | background: none;
248 | }
249 | .chat_fb64c9::before /* new thread panel chat shadow */ {
250 | display: none;
251 | }
252 |
253 | .container_a592e1 /* server discovery */ {
254 | overflow: hidden;
255 | }
256 | .backdrop__8a7fc /* server discovery top bar */ {
257 | background-color: var(--background-base-lower);
258 | }
259 |
260 | .wrapper_cb9592 /* dm vc wrapper */ {
261 | background: none;
262 | margin-bottom: var(--gap);
263 | }
264 |
265 | /* remove excess background from settings */
266 | .standardSidebarView__23e6b,
267 | .contentRegion__23e6b,
268 | .sidebarRegionScroller__23e6b,
269 | .contentRegionScroller__23e6b {
270 | background: none;
271 | }
272 | .standardSidebarView__23e6b {
273 | backdrop-filter: var(--panel-backdrop-filter);
274 | }
275 |
276 | /* remove excess backgrounds */
277 | .wrapper_d852db /* message loading placeholders */,
278 | .wrapper_d852db > .wrapper_fc8177 {
279 | background: none;
280 | }
281 |
282 | .newMessagesBar__0f481 /* unread messages bar */ {
283 | top: 12px;
284 | left: 12px;
285 | right: 12px;
286 | border-radius: var(--radius-sm);
287 | padding: 0 8px;
288 | }
289 |
290 | .bottom__7aaec /* channel list new unreads pill */ {
291 | bottom: 12px;
292 | }
293 |
294 | .unreadMentionsIndicatorBottom_ef3116 /* server list new pill */,
295 | .unreadMentionsIndicatorTop_ef3116 {
296 | width: calc(var(--guildbar-avatar-size) + var(--custom-guild-list-padding) * 2);
297 | padding: calc(var(--custom-guild-list-padding) / 2);
298 | }
299 |
300 | /* jank ass solution to only apply padding to treatment 3 */
301 | .form_f75fb0 /* chat bar outer form */ {
302 | --space-8: 16px;
303 | }
304 | .channelBottomBarArea_f75fb0 /* chat bar inner */ {
305 | --space-8: 8px;
306 | }
307 |
308 | /* get rid of extra space in treatment 2 */
309 | .accessoryBar__74017 {
310 | padding-top: 0;
311 | }
312 |
313 | /* general chat bar improvements */
314 | .channelTextArea_f75fb0 /* chat bar */ {
315 | border-radius: var(--radius-md);
316 | }
317 | .themedBackground__74017 /* chat bar inner */ {
318 | background: none;
319 | }
320 | .slateTextArea_ec4baf /* actual typing area */ {
321 | margin-left: 2px;
322 | }
323 |
324 | /* improve unread divider */
325 | .divider__908e2 {
326 | border-width: var(--divider-thickness);
327 | border-radius: var(--divider-thickness);
328 | }
329 | .endCap__908e2 {
330 | margin-top: calc(var(--divider-thickness) / -2);
331 | }
332 | .divider__908e2 .content__908e2 {
333 | margin-top: calc(var(--divider-thickness) - var(--divider-thickness) * 2);
334 | }
335 |
336 | /* improve highlight message left edge */
337 | .message__5126c.mentioned__5126c::before,
338 | .replying__5126c::before,
339 | .ephemeral__5126c::before {
340 | width: var(--divider-thickness);
341 | border-radius: var(--divider-thickness);
342 | height: calc(100% - 2 * var(--radius-sm));
343 | top: var(--radius-sm);
344 | left: calc(var(--divider-thickness) / -2 + 1px);
345 | left: calc(var(--radius-sm) / 2);
346 | }
347 |
348 | .message__5126c {
349 | border-radius: var(--radius-md);
350 | margin-left: 4px;
351 | }
352 |
353 | /* improve server selected marker */
354 | .pill_e5445c.wrapper__58105 {
355 | width: calc((var(--custom-guild-list-padding) - 4px) / 2 + 4px);
356 | }
357 | .item__58105 {
358 | width: 4px;
359 | border-radius: 4px;
360 | margin-left: calc((var(--custom-guild-list-padding) - 4px) / 2);
361 | }
362 |
363 | /* improve embeds */
364 | .embedFull__623de {
365 | border: 4px solid var(--border-normal);
366 | border-top-color: var(--border-subtle) !important;
367 | border-top-width: 1px;
368 | border-bottom-color: var(--border-subtle) !important;
369 | border-bottom-width: 1px;
370 | border-right-color: var(--border-subtle) !important;
371 | border-right-width: 1px;
372 | }
373 |
374 | /* improve borders */
375 | .reaction__23977 /* message reactions */,
376 | .reactionBtn__23977.forceShow__23977 /* add reaction button */ {
377 | border-width: 2px;
378 | }
379 |
380 | /* roundness */
381 | .embedFull__623de /* embeds */,
382 | .hljs /* code block */,
383 | .imageWrapper_af017a /* image */,
384 | .container__9271d /* thread link */ {
385 | border-radius: var(--radius-md);
386 | }
387 |
388 | .outer_c0bea0 /* profile outer */,
389 | .contentWrapper__08434 /* gif panel */ {
390 | border-radius: var(--radius-lg);
391 | }
392 | .inner_c0bea0 /* profile inner */ {
393 | border-radius: calc(var(--radius-lg) - 4px);
394 | }
395 |
396 | .outer_c0bea0 /* profile outer */ {
397 | border: 1px solid var(--border-subtle);
398 | }
399 | .root__24502 {
400 | background: none;
401 | }
402 |
403 | /* remove unnecessary backgrounds */
404 | .app__160d8,
405 | #app-mount,
406 | body {
407 | background: transparent !important;
408 | }
409 | }
410 |
411 | body {
412 | --font-primary: var(--font), 'gg sans';
413 | --font-display: var(--font), 'gg sans';
414 | }
415 |
416 | [class*='scroll'] {
417 | will-change: scroll-position;
418 | }
419 | .burstGlow__23977 {
420 | display: none;
421 | }
422 |
423 | /* animations.css */
424 | @property --animations {
425 | syntax: 'on | off';
426 | inherits: false;
427 | initial-value: on;
428 | }
429 |
430 | body {
431 | --list-item-transition: 0.2s ease; /* transition for list items */
432 | --dms-icon-svg-transition: 0.4s ease; /* transition for the dms icon */
433 | }
434 |
435 | @container body style(--animations: on) {
436 | .visual-refresh {
437 | /* list hover animations */
438 | .wrapper__2ea32 .link__2ea32 /* channels */,
439 | .container__91a9d /* members */,
440 | .channel__972a0 /* dms */,
441 | .side_b3f026 .item_b3f026 /* settings */ {
442 | transition: margin-left var(--list-item-transition);
443 | will-change: margin-left;
444 | }
445 | .wrapper__2ea32:hover .link__2ea32,
446 | .side_b3f026 .item_b3f026:hover {
447 | margin-left: 10px;
448 | }
449 | .container__91a9d:hover,
450 | .channel__972a0:hover {
451 | margin-left: 18px;
452 | }
453 | /* list hover channel dot */
454 | .unread__2ea32 {
455 | border-radius: 50%;
456 | width: 8px;
457 | height: 8px;
458 | margin-left: -4px;
459 | transition: var(--list-item-transition);
460 | will-change: margin-left;
461 | }
462 | .wrapper__2ea32:hover .unread__2ea32 {
463 | margin-left: 4px;
464 | }
465 | .typeThread__2ea32 .unread__2ea32 {
466 | left: -31px;
467 | }
468 | }
469 | }
470 |
471 | /* background-image.css */
472 | @property --background-image {
473 | syntax: 'on | off';
474 | inherits: false;
475 | initial-value: off;
476 | }
477 |
478 | body {
479 | --background-image-url: url('');
480 | }
481 |
482 | @container body style(--background-image: on) {
483 | .visual-refresh .bg__960e4 {
484 | background: var(--background-image-url);
485 | background-size: cover;
486 | background-position: center;
487 | }
488 | }
489 |
490 | /* colors.css */
491 | @property --colors {
492 | syntax: 'on | off';
493 | inherits: false;
494 | initial-value: on;
495 | }
496 |
497 | EOF
498 | )
499 |
500 | dark_theme=$(cat << 'EOF'
501 |
502 | :root {
503 | /* text colors */
504 | --text-0: var(--color13);
505 | --text-1: var(--color13);
506 | --text-2: var(--color14);
507 | --text-3: var(--color15);
508 | --text-4: var(--color15);
509 | --text-5: var(--color14);
510 |
511 | /* background and dark colors */
512 | --bg-1: var(--color5);
513 | --bg-2: var(--color4);
514 | --bg-3: var(--color2);
515 | --bg-4: var(--color8);
516 |
517 | /* hover and active states, smoother for better user experience */
518 | --hover: color-mix(in srgb, var(--color14) 20%, transparent);
519 | --active: color-mix(in srgb, var(--color14) 30%, transparent);
520 | --active-2: color-mix(in srgb, var(--color14) 50%, transparent);
521 | --message-hover: color-mix(in srgb, white 15%, transparent);
522 |
523 | /* accent colors (muted and balanced) */
524 | --red-1: color-mix(in srgb, #fff 50%, var(--color6));
525 | --red-2: color-mix(in srgb, #ff4d4d 50%, transparent);
526 | --red-3: color-mix(in srgb, #ff4d4d 40%, var(--color5));
527 | --red-4: color-mix(in srgb, #ff4d4d 30%, var(--color5));
528 | --red-5: color-mix(in srgb, #ff4d4d 20%, var(--color5));
529 |
530 | --green-1: color-mix(in srgb, #b2f2bb 30%, var(--color1));
531 | --green-2: color-mix(in srgb, #70e09c 30%, var(--color2));
532 | --green-3: color-mix(in srgb, #43a25a 30%, var(--color3));
533 | --green-4: color-mix(in srgb, #33834a 30%, var(--color4));
534 | --green-5: color-mix(in srgb, #2c6d3e 30%, var(--color5));
535 |
536 | --blue-1: var(--color3);
537 | --blue-2: var(--color4);
538 | --blue-3: var(--color5);
539 | --blue-4: var(--color6);
540 | --blue-5: var(--color7);
541 |
542 | /* yellow tones, subtly muted for dark mode */
543 | --yellow-1: color-mix(in srgb, #ffe29a 40%, var(--color2));
544 | --yellow-2: color-mix(in srgb, #ffd166 40%, var(--color3));
545 | --yellow-3: color-mix(in srgb, #e6b34f 40%, var(--color4));
546 | --yellow-4: color-mix(in srgb, #ca9654 40%, var(--color5));
547 | --yellow-5: color-mix(in srgb, #a57433 40%, var(--color6));
548 |
549 | --purple-1: color-mix(in srgb, #d3b3ff 60%, var(--color2));
550 | --purple-2: color-mix(in srgb, #b47aff 40%, var(--color3));
551 | --purple-3: color-mix(in srgb, #8c4dff 40%, var(--color4));
552 | --purple-4: color-mix(in srgb, #6a36d9 40%, var(--color5));
553 | --purple-5: color-mix(in srgb, #593695 40%, var(--color6));
554 |
555 | /* status indicator colors */
556 | --online: var(--green-2);
557 | --dnd: var(--red-2);
558 | --idle: var(--yellow-2);
559 | --streaming: var(--purple-2);
560 | --offline: var(--text-4);
561 |
562 | /* border colors (light but defined) */
563 | --border-light: color-mix(in srgb, var(--color15) 15%, transparent); /* Soft border */
564 | --border: color-mix(in srgb, var(--color15) 25%, transparent);
565 | --button-border: color-mix(in srgb, var(--color15) 15%, transparent);
566 |
567 | /* accent colors */
568 | --accent-1: var(--blue-5);
569 | --accent-2: var(--blue-2);
570 | --accent-3: var(--blue-3);
571 | --accent-4: var(--blue-4);
572 | --accent-5: var(--blue-1);
573 | --accent-new: var(--blue-2);
574 |
575 | /* gradients (subtle, soft tones) */
576 | --mention: linear-gradient(to right, color-mix(in srgb, var(--blue-2) 15%, transparent) 50%, transparent);
577 | --mention-hover: linear-gradient(to right, color-mix(in srgb, var(--blue-2) 10%, transparent) 50%, transparent);
578 | --reply: linear-gradient(to right, color-mix(in srgb, var(--text-3) 15%, transparent) 50%, transparent);
579 | --reply-hover: linear-gradient(to right, color-mix(in srgb, var(--text-3) 10%, transparent) 50%, transparent);
580 | }
581 | EOF
582 | )
583 |
584 | light_theme=$(cat << 'EOF'
585 | :root {
586 | /* text colors */
587 | --text-0: var(--color1);
588 | --text-1: var(--color5);
589 | --text-2: var(--color3);
590 | --text-3: var(--color2);
591 | --text-4: var(--color1);
592 | --text-5: var(--color0);
593 |
594 | /* background */
595 | --bg-1: var(--color9);
596 | --bg-2: var(--color8);
597 | --bg-3: var(--color7);
598 | --bg-4: var(--color6);
599 | --hover: color-mix(in srgb, var(--color4) 15%, transparent);
600 | --active: color-mix(in srgb, var(--color4) 25%, transparent);
601 | --active-2: color-mix(in srgb, var(--color4) 35%, transparent);
602 | --message-hover: color-mix(in srgb, black 10%, transparent);
603 |
604 | --red-1: color-mix(in srgb, #fff 40%, var(--color6));
605 | --red-2: color-mix(in srgb, #ff4d4d 85%, transparent);
606 | --red-3: color-mix(in srgb, #ff4d4d 70%, var(--color10));
607 | --red-4: color-mix(in srgb, #ff4d4d 55%, var(--color10));
608 | --red-5: color-mix(in srgb, #ff4d4d 40%, var(--color10));
609 |
610 | --green-1: color-mix(in srgb, #b2f2bb 80%, var(--color1));
611 | --green-2: color-mix(in srgb, #70e09c 80%, var(--color2));
612 | --green-3: color-mix(in srgb, #43a25a 80%, var(--color3));
613 | --green-4: color-mix(in srgb, #33834a 80%, var(--color4));
614 | --green-5: color-mix(in srgb, #2c6d3e 80%, var(--color5));
615 |
616 | --blue-1: var(--color2);
617 | --blue-2: var(--color3);
618 | --blue-3: var(--color4);
619 | --blue-4: var(--color5);
620 | --blue-5: var(--color6);
621 |
622 | --yellow-1: color-mix(in srgb, #ffe29a 100%, var(--color2));
623 | --yellow-2: color-mix(in srgb, #ffd166 80%, var(--color3));
624 | --yellow-3: color-mix(in srgb, #e6b34f 80%, var(--color4));
625 | --yellow-4: color-mix(in srgb, #ca9654 80%, var(--color5));
626 | --yellow-5: color-mix(in srgb, #a57433 80%, var(--color6));
627 |
628 | --purple-1: color-mix(in srgb, #d3b3ff 100%, var(--color2));
629 | --purple-2: color-mix(in srgb, #b47aff 80%, var(--color3));
630 | --purple-3: color-mix(in srgb, #8c4dff 80%, var(--color4));
631 | --purple-4: color-mix(in srgb, #6a36d9 80%, var(--color5));
632 | --purple-5: color-mix(in srgb, #593695 80%, var(--color6));
633 |
634 | /* status indicator colors */
635 | --online: var(--green-2);
636 | --dnd: var(--red-2);
637 | --idle: var(--yellow-2);
638 | --streaming: var(--purple-2);
639 | --offline: var(--text-4);
640 |
641 | /* border colors */
642 | --border-light: color-mix(in srgb, var(--color3) 20%, transparent);
643 | --border: color-mix(in srgb, var(--color3) 30%, transparent);
644 | --button-border: color-mix(in srgb, var(--color0) 15%, transparent);
645 |
646 | /* accent colors */
647 | --accent-1: var(--blue-1);
648 | --accent-2: var(--blue-2);
649 | --accent-3: var(--blue-3);
650 | --accent-4: var(--blue-4);
651 | --accent-5: var(--blue-5);
652 | --accent-new: var(--blue-2);
653 |
654 | /* gradients */
655 | --mention: linear-gradient(to right, color-mix(in srgb, var(--blue-2) 20%, transparent) 40%, transparent);
656 | --mention-hover: linear-gradient(to right, color-mix(in srgb, var(--blue-2) 15%, transparent) 40%, transparent);
657 | --reply: linear-gradient(to right, color-mix(in srgb, var(--text-3) 20%, transparent) 40%, transparent);
658 | --reply-hover: linear-gradient(to right, color-mix(in srgb, var(--text-3) 15%, transparent) 40%, transparent);
659 | }
660 |
661 | EOF
662 | )
663 |
664 | themecordFiller2=$(cat << 'EOF'
665 | @container root style(--colors: on) {
666 | .visual-refresh body,
667 | .visual-refresh .theme-dark,
668 | .visual-refresh .theme-light:not(.custom-profile-theme) {
669 | --activity-card-background: red;
670 | --alert-bg: red;
671 | --autocomplete-bg: var(--bg-3);
672 |
673 | --background-accent: var(--bg-2);
674 | --background-floating: var(--bg-3);
675 | --background-nested-floating: var(--bg-4);
676 | --background-mentioned: var(--mention);
677 | --background-mentioned-hover: var(--mention-hover);
678 | --background-message-automod: red;
679 | --background-message-automod-hover: red;
680 | --background-message-highlight: var(--reply);
681 | --background-message-highlight-hover: var(--reply-hover);
682 | --background-message-hover: var(--message-hover);
683 |
684 | --background-primary: var(--bg-4);
685 | --background-secondary: var(--bg-3);
686 | --background-secondary-alt: var(--bg-3);
687 | --background-tertiary: var(--bg-4);
688 |
689 | --bg-base-primary: var(--bg-4); /* screenshare window? */
690 | --bg-base-secondary: var(--bg-4);
691 | --bg-base-tertiary: var(--bg-3);
692 | --background-mod-subtle: var(--bg-3);
693 | --background-mod-normal: var(--bg-3);
694 | --background-mod-strong: var(--bg-3);
695 | --background-base-low: var(--bg-4);
696 | --background-base-lower: var(--bg-4);
697 | --background-base-lowest: var(--bg-4);
698 | --background-surface-high: var(--bg-3);
699 | --background-surface-higher: var(--bg-3);
700 | --background-surface-highest: var(--bg-3);
701 | --bg-surface-overlay: var(--bg-4);
702 | --bg-surface-raised: var(--bg-3);
703 | --chat-background-default: var(--bg-3);
704 | --input-background: var(--bg-3);
705 | --modal-background: var(--bg-4);
706 | --modal-footer-background: var(--bg-4);
707 |
708 | --background-modifier-accent: var(--hover);
709 | --background-modifier-active: var(--active);
710 | --background-modifier-hover: var(--hover);
711 | --background-modifier-selected: var(--active);
712 |
713 | --bg-mod-faint: var(--hover);
714 | --bg-mod-subtle: var(--bg-2);
715 | --bg-mod-strong: var(--bg-2);
716 | --bg-brand: var(--accent-2);
717 |
718 | --border-faint: var(--border-light);
719 | --border-subtle: var(--border);
720 | --border-normal: var(--border);
721 | --border-strong: var(--border);
722 | --input-border: var(--border);
723 |
724 | --button-danger-background: var(--red-3);
725 | --button-danger-background-active: var(--red-5);
726 | --button-danger-background-hover: var(--red-4);
727 | --button-danger-background-disabled: var(--red-5);
728 | --button-danger-border: var(--button-border);
729 |
730 | --button-filled-brand-text: var(--text-0);
731 | --button-filled-brand-background: var(--accent-3);
732 | --button-filled-brand-background-active: var(--accent-5);
733 | --button-filled-brand-background-hover: var(--accent-4);
734 | --button-filled-brand-border: var(--button-border);
735 |
736 | --button-filled-brand-inverted-background: var(--text-1);
737 | --button-filled-brand-inverted-background-active: var(--text-3);
738 | --button-filled-brand-inverted-background-hover: var(--text-2);
739 | --button-filled-brand-inverted-text: var(--bg-4);
740 | --button-filled-white-background: var(--text-1);
741 | --button-filled-white-background-active: var(--text-3);
742 | --button-filled-white-background-hover: var(--text-2);
743 | --button-filled-white-text: var(--bg-4);
744 |
745 | --button-outline-danger-background: var(--bg-2);
746 | --button-outline-danger-background-active: var(--text-5);
747 | --button-outline-danger-background-hover: var(--bg-1);
748 | --button-outline-danger-border: var(--border-light);
749 | --button-outline-danger-border-active: var(--border-light);
750 | --button-outline-danger-border-hover: var(--border-light);
751 | --button-outline-danger-text: var(--red-1);
752 | --button-outline-danger-text-active: var(--red-1);
753 | --button-outline-danger-text-hover: var(--red-1);
754 |
755 | --button-outline-primary-background: red;
756 | --button-outline-primary-background-active: var(--active);
757 | --button-outline-primary-background-hover: var(--hover);
758 | --button-outline-primary-border: var(--text-5);
759 | --button-outline-primary-border-active: var(--text-5);
760 | --button-outline-primary-border-hover: var(--text-5);
761 | --button-outline-primary-text: var(--text-3);
762 | --button-outline-primary-text-active: var(--text-3);
763 | --button-outline-primary-text-hover: var(--text-3);
764 |
765 | --button-outline-positive-background: red;
766 | --button-outline-positive-background-active: var(--green-4);
767 | --button-outline-positive-background-hover: var(--green-3);
768 | --button-outline-positive-border: var(--green-2);
769 | --button-outline-positive-border-active: var(--green-4);
770 | --button-outline-positive-border-hover: var(--green-3);
771 | --button-outline-positive-text: var(--text-3);
772 | --button-outline-positive-text-active: var(--text-0);
773 | --button-outline-positive-text-hover: var(--text-0);
774 |
775 | --button-positive-background: var(--green-2);
776 | --button-positive-background-active: var(--green-4);
777 | --button-positive-background-hover: var(--green-3);
778 | --button-positive-background-disabled: var(--green-4);
779 | --button-positive-border: var(--button-border);
780 |
781 | --button-secondary-background: var(--bg-2);
782 | --button-secondary-background-active: var(--text-5);
783 | --button-secondary-background-hover: var(--bg-1);
784 | --button-secondary-background-disabled: var(--bg-3);
785 | --button-secondary-text: var(--text-3);
786 |
787 | --button-transparent-background: var(--hover);
788 | --button-transparent-background-active: var(--active-2);
789 | --button-transparent-background-hover: var(--active);
790 | --button-transparent-text: var(--text-3);
791 |
792 | --redesign-button-secondary-text: var(--text-3);
793 |
794 | --polls-voted-fill: color-mix(in hsl, var(--accent-2), transparent 90%);
795 | --polls-victor-fill: color-mix(in hsl, var(--green-2), transparent 90%);
796 |
797 | --card-primary-bg: var(--bg-3);
798 | --card-secondary-bg: var(--bg-2);
799 | --channel-icon: var(--text-4);
800 | --channels-default: var(--text-4);
801 |
802 | --embed-title: var(--text-2);
803 |
804 | --header-primary: var(--text-2);
805 | --header-secondary: var(--text-4);
806 | --header-muted: var(--text-4);
807 |
808 | --icon-muted: var(--text-5);
809 | --icon-primary: var(--text-3);
810 | --icon-secondary: var(--text-4);
811 | --icon-tertiary: var(--text-4);
812 |
813 | --info-danger-background: red;
814 | --info-danger-text: red;
815 | --info-help-background: color-mix(in hsl, var(--blue-2), transparent 80%);
816 | --info-help-foreground: var(--blue-1);
817 | --info-help-text: var(--blue-1);
818 | --info-positive-background: color-mix(in hsl, var(--yellow-1), transparent 80%);
819 | --info-positive-text: var(--green-1);
820 | --info-warning-background: color-mix(in hsl, var(--yellow-2), transparent 80%);
821 | --info-warning-text: var(--yellow-1);
822 |
823 | --text-brand: var(--accent-1);
824 | --text-danger: var(--red-1);
825 | --text-link: var(--accent-1);
826 | --text-link-low-saturation: red;
827 | --text-low-contrast: var(--text-4);
828 | --text-message-preview-low-sat: red;
829 | --text-muted: var(--text-5);
830 | --text-muted-on-default: var(--text-4);
831 | --text-normal: var(--text-3);
832 | --text-positive: var(--green-1);
833 | --text-primary: var(--text-3);
834 | --text-secondary: var(--text-4);
835 | --text-warning: var(--yellow-1);
836 | --text-default: var(--text-3);
837 | --text-feedback-critical: var(--red-1);
838 | --text-feedback-positive: var(--green-1);
839 | --text-feedback-info: red;
840 | --text-feedback-warning: red;
841 | --text-tertiary: var(--text-4);
842 |
843 | --status-danger: var(--red-2);
844 | --status-danger-background: var(--red-3);
845 | --status-danger-text: var(--white);
846 | --status-dnd: var(--dnd); /* server profiles */
847 | --status-idle: var(--idle);
848 | --status-offline: var(--offline);
849 | --status-online: var(--online);
850 | --status-positive: var(--green-2);
851 | --status-positive-background: var(--green-2);
852 | --status-positive-text: var(--white);
853 | --status-speaking: var(--green-2);
854 | --status-warning: var(--yellow-2);
855 | --status-warning-background: red;
856 | --status-warning-text: var(--black);
857 |
858 | --background-feedback-critical: color-mix(in hsl, var(--red-2), transparent 80%);
859 | --background-feedback-info: color-mix(in hsl, var(--blue-2), transparent 80%);
860 | --background-feedback-positive: color-mix(in hsl, var(--green-2), transparent 80%);
861 | --background-feedback-warning: color-mix(in hsl, var(--yellow-2), transparent 80%);
862 |
863 | --interactive-normal: var(--text-4);
864 | --interactive-hover: var(--text-3);
865 | --interactive-active: var(--text-3);
866 | --interactive-muted: var(--text-5);
867 |
868 | --mention-foreground: var(--accent-1);
869 | --mention-background: color-mix(in hsl, var(--accent-2), transparent 90%);
870 |
871 | --channel-text-area-placeholder: var(--text-5);
872 |
873 | --message-reacted-text: var(--text-2);
874 | --message-reacted-background: color-mix(in hsl, var(--accent-2), transparent 80%);
875 |
876 | --custom-channel-members-bg: var(--bg-4);
877 |
878 | --redesign-input-control-selected: var(--accent-2);
879 |
880 | --scrollbar-auto-thumb: var(--bg-3);
881 | --scrollbar-auto-track: transparent;
882 | --scrollbar-thin-thumb: var(--bg-3);
883 | --scrollbar-thin-track: transparent;
884 |
885 | --white: var(--text-0);
886 | --white-500: var(--text-0);
887 | --redesign-button-overlay-alpha-text: var(--text-2);
888 |
889 | --brand-360: var(--accent-2);
890 | --brand-500: var(--accent-2);
891 | --blurple-50: var(--accent-2);
892 |
893 | --red-400: var(--red-2);
894 | --red-500: var(--red-3);
895 |
896 | --green-360: var(--green-2); /* seems to be mostly used by vencord plugins */
897 | --primary-400: var(--text-4);
898 | }
899 |
900 | .visual-refresh {
901 | ::placeholder {
902 | color: var(--text-5);
903 | }
904 |
905 | .modeUnreadImportant__2ea32 .icon__2ea32,
906 | .wrapper__2ea32:hover .icon__2ea32 /* correct channel icon color */ {
907 | color: var(--text-3);
908 | }
909 |
910 | .text_b88801 > strong /* xxx is typing.. */ {
911 | color: var(--text-3);
912 | }
913 |
914 | .folder__48112[aria-expanded="false"] > .folderIconWrapper__48112 /* collapsed folders */ {
915 | --background-primary: var(--bg-3);
916 | }
917 |
918 | .panel__5dec7 /* game activity panel */,
919 | #vc-spotify-player /* vencord spotify plugin */,
920 | .container__722ff /* background between vc and vc chat */ {
921 | background: none;
922 | }
923 |
924 | .side_b3f026 .item_b3f026:hover /* settings tab */ {
925 | background-color: var(--bg-3) !important;
926 | }
927 | .side_b3f026 .item_b3f026:active,
928 | .side_b3f026 .item_b3f026.selected_b3f026 {
929 | background-color: var(--bg-2) !important;
930 | }
931 |
932 | .quickSelectPopout_ebaca5 /* dm vc region select popout */,
933 | .participantsButton__211d1 /* vc participants button */,
934 | .voiceBar__7aaec /* n in voice bar (channel list) */,
935 | .mainCard_f369db /* form posts */ {
936 | background-color: var(--bg-3);
937 | }
938 |
939 | .colorable_f1ceac.primaryDark_f1ceac,
940 | .reaction_f8896c /* forum post reaction */ {
941 | background-color: var(--bg-2);
942 | }
943 |
944 | .expandedFolderIconWrapper__48112 > svg[style="color: rgb(88, 101, 242);"] /* folder icon */ {
945 | color: var(--accent-2) !important;
946 | }
947 | .colorPickerSwatch__459fb[style="background-color: rgb(88, 101, 242);"] /* folder color picker swatch */,
948 | .newBadge_faa96b /* forum post new badge */,
949 | .mentioned__5126c:before /* mention message left edge */ {
950 | background-color: var(--accent-2) !important;
951 | }
952 | .replying__5126c:before /* reply message left edge */ {
953 | background-color: var(--text-2) !important;
954 | }
955 |
956 | #app-mount .message__5126c.replying__5126c:hover /* override fix for message reply hover */ {
957 | background: var(--reply-hover);
958 | }
959 |
960 | .visual-refresh .voiceBar__7aaec .barText__7aaec, .visual-refresh .voiceChannelsIcon__7aaec /* x in voice bar text */ {
961 | color: var(--accent-2);
962 | }
963 |
964 | .ephemeral__5126c /* ephemeral messages */ {
965 | background: var(--mention) !important;
966 | }
967 | .ephemeral__5126c:hover {
968 | background: var(--mention-hover) !important;
969 | }
970 |
971 | .botTagRegular__82f07 /* bot tag */ {
972 | background-color: var(--accent-2);
973 | }
974 | .botTagOP__82f07 /* forum post op tag */ {
975 | color: var(--text-0);
976 | }
977 |
978 | .container__87bf1 /* settings checkbutton background */ {
979 | background-color: var(--bg-1) !important;
980 | transition: background-color 0.2s ease;
981 | }
982 | .container__87bf1.checked__87bf1 /* settings checkbutton background */ {
983 | background-color: var(--accent-2) !important;
984 | }
985 | .container__87bf1 .slider__87bf1 > svg > path /* settings checkbutton check */ {
986 | fill: var(--bg-1) !important;
987 | transition: fill 0.2s ease;
988 | }
989 | .container__87bf1.checked__87bf1 .slider__87bf1 > svg > path /* settings checkbutton check */ {
990 | fill: var(--accent-2) !important;
991 | }
992 | .container__87bf1 rect[fill='white'] /* settings checkbutton slider */ {
993 | fill: var(--text-3) !important;
994 | transition: fill 0.2s ease;
995 | }
996 | .container__87bf1.checked__87bf1 rect[fill='white'] /* settings checkbutton slider */ {
997 | fill: var(--text-0) !important;
998 | }
999 |
1000 | .refreshIcon__001a7 /* settings radiobutton center */ {
1001 | fill: var(--text-0);
1002 | }
1003 |
1004 | .categoryText_d02962 /* gif chooser category names */,
1005 | .bannerColor_fb7f94 /* profile banner button */,
1006 | .backButton_e4cb9a /* stream preview back button */,
1007 | .viewersIcon_d6b206 /* stream preview viewers icon */,
1008 | .bottomControls_e4cb9a /* stream preview viewer number */,
1009 | .pictureInPictureVideo_e4cb9a .controlIcon_f1ceac /* stream preview control icon */,
1010 | .bannerVisible_f37cb1 .name_f37cb1 /* server name over banner image */,
1011 | .dropdownButtonBannerVisible__2637a /* server name over banner dropdown button */ {
1012 | color: var(--text-1);
1013 | }
1014 | .headerText_e4cb9a.base_eb1a4c /* stream preview header text */,
1015 | .participantName__2cdb8 /* stream preview participant name */ {
1016 | color: var(--text-1) !important;
1017 | }
1018 | .playPausePopIcon_cf09d8 > path /* video play/pause popup */ {
1019 | fill: var(--text-1);
1020 | }
1021 | .headerTitle_e4cb9a:hover /* stream preview header title hover underline */ {
1022 | border-color: var(--text-1) !important;
1023 | }
1024 | .controlIcon_cf09d8 /* video play button */,
1025 | .wrapper_cf09d8 /* video time */,
1026 | .iconWrapper__6eb54 /* video initial play button */,
1027 | .wrapper__926d7 /* youtube embed play button */,
1028 | .viewersIcon_d6b206:hover /* stream preview viewers icon */ ,
1029 | .headerTitle_e4cb9a:hover .backButton_e4cb9a /* stream preview back button hover */,
1030 | .viewersIcon_d6b206:hover /* stream preview viewers icon */,
1031 | .pictureInPictureVideo_e4cb9a .controlIcon_f1ceac:hover /* stream preview control icon */ {
1032 | color: var(--text-2);
1033 | }
1034 | .wrapper__926d7 a:link,
1035 | .wrapper__926d7 a:visited,
1036 | .headerTitle_e4cb9a:hover .headerText_e4cb9a.base_eb1a4c /* stream preview back button hover */ {
1037 | color: var(--text-2) !important;
1038 | }
1039 | .downloadHoverButtonIcon__6c706 /* video download button */,
1040 | .iconContainer__211d1>svg /* vc participants button icon */,
1041 | .selectedIcon__2f4f7 /* vc selected camera icon */,
1042 | .colorable_f1ceac.primaryDark_f1ceac .centerIcon_f1ceac /* vc icon button */,
1043 | .colorable_f1ceac.primaryDark_f1ceac /* vc icon button nub */,
1044 | .iconBadge__650eb.base__2b1f5 /* server vc badge */,
1045 | #app-mount .akaBadge__488b1 /* aka badge */,
1046 | .message_fcf29c /* you have unsaved settings message */,
1047 | .friendRequestsButton__523aa .base__2b1f5 /* inbox friend request number */,
1048 | .textBadge__2b1f5[style='background-color: var(--background-accent);'],
1049 | .tooltipBlack__382e7 /* server boost tooltip */,
1050 | .colorable_f1ceac.experimentDark_f1ceac, .colorable_f1ceac.experimentDark_f1ceac .centerIcon_f1ceac /* vc buttons */ {
1051 | color: var(--text-3);
1052 | }
1053 | .status__2f4f7 path[fill='var(--white)'],
1054 | .emptyChannelIcon__00de6 path[fill='var(--white)'] /* channel start icon */ {
1055 | fill: var(--text-3);
1056 | }
1057 | .grabber_a562c8 /* vc volume slider grabber */ {
1058 | background-color: var(--text-3);
1059 | }
1060 | .textBadge__2b1f5 /* new text badge (right click on person in vc) */ {
1061 | color: var(--text-0);
1062 | }
1063 |
1064 | .unread__3b95d /* new unreads bar (channel list */ {
1065 | color: var(--text-4);
1066 | }
1067 |
1068 | .colorable_f1ceac.white_f1ceac /* vc icon button nub when white */ {
1069 | background-color: var(--primary-130);
1070 | color: var(--bg-4);
1071 | }
1072 |
1073 | .iconBadge__650eb.isCurrentUserConnected__650eb /* green vc badge when connected */ {
1074 | color: var(--text-0);
1075 | }
1076 |
1077 | .container__37e49 /* user panel buttons */,
1078 | .numberBadge__2b1f5 /* unread number badge */,
1079 | .toolbar__9293f /* toolbar button strikethroughs */ {
1080 | --status-danger: var(--accent-new);
1081 | }
1082 |
1083 | .container__37e49 .button__67645.redGlow__67645 /* user panel button backgrounds*/ {
1084 | background-color: color-mix(in hsl, var(--accent-new), transparent 90%);
1085 | }
1086 | .container__37e49 .button__67645.enabled__67645.redGlow__67645:hover /* user panel button backgrounds hover */ {
1087 | background-color: color-mix(in hsl, var(--accent-new), transparent 80%);
1088 | }
1089 |
1090 | .divider__5126c /* unread divider */ {
1091 | --divider-color: var(--accent-new);
1092 | }
1093 |
1094 | .iconBadge__9293f /* icon badge */,
1095 | .mentionsBar__7aaec /* new mention pill */,
1096 | .mention__3b95d /* server list new mention pill */ {
1097 | background-color: var(--accent-new);
1098 | }
1099 |
1100 | .newMessagesBar__0f481 /* unread bar */ {
1101 | background-color: var(--accent-3);
1102 | }
1103 | .barButtonAlt__0f481 /* unread bar mark as read button */ {
1104 | --button-secondary-background: var(--accent-3);
1105 | --button-secondary-background-hover: var(--accent-4);
1106 | }
1107 |
1108 | .updateIconForeground__49676 /* update button */ {
1109 | fill: var(--green-1);
1110 | }
1111 |
1112 | .colorable_f1ceac.red_f1ceac:hover /* vc disconnect button hover */ {
1113 | background-color: var(--red-4);
1114 | }
1115 | .button_f7ecac.dangerous_f7ecac:hover /* image attachment delete button hover in chat bar */ {
1116 | color: var(--red-4);
1117 | }
1118 | .contentWrapper__08434 ::-webkit-scrollbar-thumb /* gif picker scrollbar */ {
1119 | background-color: var(--bg-1);
1120 | }
1121 |
1122 | .circleIconButton__5bc7e /* new server button */ {
1123 | color: var(--text-3);
1124 | }
1125 | .circleIconButton__5bc7e:hover {
1126 | color: var(--bg-4);
1127 | }
1128 |
1129 | .tooltipGrey__382e7 /* spotify plugin time tooltip */ {
1130 | color: var(--text-3);
1131 | background-color: var(--bg-3);
1132 | }
1133 |
1134 | .textContentFooter__9a337 /* forum post image fade */ {
1135 | background: linear-gradient(0deg, var(--bg-4), transparent);
1136 | }
1137 |
1138 | .result__2dc39:after /* remove gif hover overlay */ {
1139 | display: none;
1140 | }
1141 | .result__2dc39:hover /* gif hover */ {
1142 | outline: 2px solid var(--accent-2);
1143 | }
1144 |
1145 | .reactionBtn__23977.forceShow__23977:hover /* fix add reaction button border hover */ {
1146 | border-color: var(--bg-2);
1147 | }
1148 |
1149 | .flash__03436[data-flash=true] /* reply message flash */ {
1150 | background: var(--background-message-highlight);
1151 | }
1152 |
1153 | /* status indicators */
1154 | rect[fill='#83838b'] {
1155 | fill: var(--offline);
1156 | }
1157 | .status_a423bd[style='background-color: rgb(131, 131, 139);'] {
1158 | background-color: var(--offline) !important;
1159 | }
1160 | rect[fill='#43a25a'],
1161 | path[fill='#43a25a'] /* status activity icon */,
1162 | .vc-platform-indicator > svg[fill="#43a25a"] {
1163 | fill: var(--online);
1164 | }
1165 | .status_a423bd[style='background-color: rgb(67, 162, 90);'] {
1166 | background-color: var(--online) !important;
1167 | }
1168 | rect[fill='#ca9654'],
1169 | .vc-platform-indicator > svg[fill='#ca9654'] {
1170 | fill: var(--idle);
1171 | }
1172 | .status_a423bd[style='background-color: rgb(201, 150, 86);'] {
1173 | background-color: var(--idle) !important;
1174 | }
1175 | rect[fill='#d83a42'],
1176 | .vc-platform-indicator > svg[fill='#d83a42'] {
1177 | fill: var(--dnd);
1178 | }
1179 | .status_a423bd[style='background-color: rgb(216, 58, 66);'] {
1180 | background-color: var(--dnd) !important;
1181 | }
1182 | rect[fill='#9147ff'] {
1183 | fill: var(--streaming);
1184 | }
1185 | div[style='display: flex; justify-content: center; align-items: center; border-radius: 5px; background-color: rgb(67, 162, 90); height: 10px; width: 25px;'] {
1186 | background-color: var(--online) !important;
1187 | }
1188 |
1189 | /* fix radio bar button colors */
1190 | .radioBar__001a7[style='--radio-bar-accent-color: var(--yellow-360); padding: 10px;'] {
1191 | --radio-bar-accent-color: var(--yellow-2) !important;
1192 | }
1193 | .radioBar__001a7[style='--radio-bar-accent-color: var(--green-360); padding: 10px;'] {
1194 | --radio-bar-accent-color: var(--green-2) !important;
1195 | }
1196 | .radioBar__001a7[style='--radio-bar-accent-color: var(--red-400); padding: 10px;'] {
1197 | --radio-bar-accent-color: var(--red-2) !important;
1198 | }
1199 |
1200 | #vc-spotify-player {
1201 | --vc-spotify-green: var(--accent-2);
1202 | }
1203 |
1204 | ::selection,
1205 | .highlight {
1206 | background: var(--accent-3);
1207 | color: var(--text-0);
1208 | }
1209 | }
1210 | }
1211 |
1212 | /* dms-button.css */
1213 | @property --dms-icon {
1214 | syntax: 'default | off | on';
1215 | inherits: false;
1216 | initial-value: on;
1217 | }
1218 |
1219 | body {
1220 | --dms-icon-svg-url: url('https://upload.wikimedia.org/wikipedia/commons/c/c4/Font_Awesome_5_solid_moon.svg'); /* icon svg url. MUST BE A SVG. */
1221 | --dms-icon-svg-size: 90%; /* size of the svg (css mask-size) */
1222 | --dms-icon-color-before: var(--icon-secondary);
1223 | --dms-icon-color-after: var(--white);
1224 | --dms-background-image-url: url('https://raw.githubusercontent.com/catppuccin/catppuccin/main/assets/logos/exports/1544x1544_circle.png');
1225 | --dms-background-image-size: cover; /* size of the background image (css background-size) */
1226 | --dms-background-color: linear-gradient(70deg, var(--blue-2), var(--purple-2), var(--red-2)); /* color of the background image (css background) */
1227 | }
1228 |
1229 | @container body style(--dms-icon: on) {
1230 | .wrapper__6e9f8[data-list-item-id='guildsnav___home'] > .childWrapper__6e9f8 > svg {
1231 | display: none;
1232 | }
1233 | .wrapper__6e9f8[data-list-item-id='guildsnav___home'] > .childWrapper__6e9f8::before {
1234 | content: '';
1235 | display: block;
1236 | position: absolute;
1237 | width: 65%;
1238 | height: 65%;
1239 | background: var(--dms-icon-color-before);
1240 | mask-image: var(--dms-icon-svg-url);
1241 | mask-size: var(--dms-icon-svg-size);
1242 | mask-position: center;
1243 | mask-repeat: no-repeat;
1244 | transition: background-color 0.15s ease-out;
1245 | }
1246 | .wrapper__6e9f8[data-list-item-id='guildsnav___home']:hover > .childWrapper__6e9f8::before {
1247 | transform: rotate(0deg) scale(1);
1248 | }
1249 | .wrapper__6e9f8[data-list-item-id='guildsnav___home']:hover > .childWrapper__6e9f8::before,
1250 | .wrapper__6e9f8[data-list-item-id='guildsnav___home'].selected__6e9f8 > .childWrapper__6e9f8::before {
1251 | background: var(--dms-icon-color-after);
1252 | transform: rotate(-360deg) scale(0.8);
1253 | }
1254 |
1255 | @container body style(--animations: on) {
1256 | .wrapper__6e9f8[data-list-item-id='guildsnav___home'] .childWrapper__6e9f8::before {
1257 | transition: background-color 0.15s ease-out, transform var(--dms-icon-svg-transition);
1258 | }
1259 | }
1260 | }
1261 |
1262 | @container body style(--dms-icon: off) {
1263 | .wrapper__6e9f8[data-list-item-id='guildsnav___home'] > .childWrapper__6e9f8 > svg {
1264 | display: none;
1265 | }
1266 | }
1267 |
1268 | @property --dms-background {
1269 | syntax: 'off | image | color';
1270 | inherits: false;
1271 | initial-value: off;
1272 | }
1273 |
1274 | @container body style(--dms-background: image) {
1275 | .wrapper__6e9f8[data-list-item-id='guildsnav___home'] > .childWrapper__6e9f8 {
1276 | background-image: var(--dms-background-image-url);
1277 | background-color: transparent !important;
1278 | background-size: var(--dms-background-image-size);
1279 | background-position: center;
1280 | background-repeat: no-repeat;
1281 | }
1282 | }
1283 |
1284 | @container body style(--dms-background: color) {
1285 | .wrapper__6e9f8[data-list-item-id='guildsnav___home'] > .childWrapper__6e9f8 {
1286 | background: var(--dms-background-color);
1287 | }
1288 | }
1289 |
1290 | /* flipped-chatbar.css */
1291 | @property --flipped-chatbar {
1292 | syntax: 'on | off';
1293 | inherits: false;
1294 | initial-value: on;
1295 | }
1296 |
1297 | body {
1298 | --chatbar-height: 47px; /* height of the chatbar */
1299 | --chatbar-padding: 8px; /* padding of the chatbar */
1300 | --custom-channel-textarea-text-area-height: var(--chatbar-height);
1301 | }
1302 |
1303 | @container body style(--flipped-chatbar: on) {
1304 | .visual-refresh {
1305 | .form_f75fb0 {
1306 | margin: 0 var(--chatbar-padding) var(--chatbar-padding) var(--chatbar-padding);
1307 | padding: 0;
1308 | --chatbar-border-color: var(--border-faint);
1309 | }
1310 | .channelTextArea_f75fb0 {
1311 | margin: 0;
1312 | border-color: var(--chatbar-border-color);
1313 | transition: none;
1314 | }
1315 | .base_b88801 {
1316 | top: -24px;
1317 | left: 0;
1318 | right: 0;
1319 | background-color: var(--chat-background-default);
1320 | padding: 0 8px;
1321 | border-radius: var(--radius-md) var(--radius-md) 0 0;
1322 | border: 1px solid var(--chatbar-border-color);
1323 | border-bottom: none;
1324 | transition: none;
1325 | box-sizing: border-box;
1326 | }
1327 | .stackedBars__74017,
1328 | .threadSuggestionBar__841c8 {
1329 | border-color: var(--chatbar-border-color) !important;
1330 | }
1331 | .stackedBars__74017 {
1332 | background: none !important;
1333 | }
1334 | .form_f75fb0:has(.base_b88801) {
1335 | .channelTextArea_f75fb0,
1336 | .wrapper__44df5 {
1337 | border-radius: 0 0 var(--radius-md) var(--radius-md);
1338 | }
1339 | }
1340 | .form_f75fb0:has(.channelTextArea__74017:focus-within) {
1341 | --chatbar-border-color: var(--border-subtle);
1342 | }
1343 | .scrollerSpacer__36d07 {
1344 | height: calc(24px + var(--chatbar-padding));
1345 | }
1346 | .scroller__36d07::-webkit-scrollbar-track {
1347 | margin-bottom: calc(20px + var(--chatbar-padding));
1348 | }
1349 | .bottomBar__0f481 {
1350 | margin-bottom: 24px;
1351 | }
1352 | .wrapper__44df5 /* phone verification bar */ {
1353 | margin: 0;
1354 | border-radius: var(--radius-md);
1355 | }
1356 | }
1357 | }
1358 |
1359 | /* top-bar.css */
1360 | @property --move-top-bar-buttons {
1361 | syntax: 'on | off';
1362 | inherits: false;
1363 | initial-value: off;
1364 | }
1365 |
1366 | @container body style(--move-top-bar-buttons: on) {
1367 | .visual-refresh {
1368 | /* remove help button */
1369 | .trailing_c38106 > a[href="https://support.discord.com"]
1370 | {
1371 | display: none;
1372 | }
1373 |
1374 | /* make server list inner scroll */
1375 | .stack_dbd263 {
1376 | overflow: hidden scroll;
1377 | scrollbar-width: none;
1378 | }
1379 | /* create space for inbox button */
1380 | .tutorialContainer__1f388 {
1381 | margin-bottom: 48px;
1382 | }
1383 | /* move inbox button */
1384 | .recentsIcon_c99c29 {
1385 | position: fixed;
1386 | width: 40px;
1387 | height: 40px;
1388 | top: calc(var(--custom-app-top-bar-height) + 1px + var(--custom-guild-list-padding) + 48px);
1389 | left: calc(var(--gap) + 1px + var(--custom-guild-list-padding));
1390 | }
1391 | /* style inbox button */
1392 | .recentsIcon_c99c29 .button__85643 {
1393 | width: 100%;
1394 | height: 100%;
1395 | background-color: var(--background-surface-higher);
1396 | border-radius: var(--radius-md);
1397 | transition: background-color 0.15s ease-out;
1398 |
1399 | &:hover {
1400 | background-color: var(--bg-brand);
1401 |
1402 | .icon__9293f {
1403 | color: var(--white);
1404 | }
1405 | }
1406 | }
1407 | .recentsIcon_c99c29 .svg__2338f {
1408 | transition: color 0.15s ease-out;
1409 | width: 24px;
1410 | height: 24px;
1411 | }
1412 | /* shift inbox popup panel into view */
1413 | .recentMentionsPopout__95796 {
1414 | transform: translateX(100%);
1415 | }
1416 | /* move top bar title */
1417 | .title_c38106 {
1418 | padding-left: var(--gap);
1419 | justify-content: flex-start;
1420 | }
1421 | .title__85643 {
1422 | gap: 4px;
1423 | }
1424 | /* style top bar title */
1425 | .title__85643 .icon_f34534 {
1426 | width: 16px;
1427 | height: 16px;
1428 | display: none;
1429 | }
1430 | .title__85643 .text-sm\/medium_cf4812 {
1431 | line-height: 90%;
1432 | color: var(--text-muted);
1433 | font-weight: 700;
1434 | }
1435 |
1436 | /* fix settings animation transform */
1437 | .layer__960e4.baseLayer__960e4 {
1438 | transform: none !important;
1439 | }
1440 | .layers__960e4 > .layer__960e4.animating__960e4 {
1441 | will-change: opacity;
1442 | }
1443 |
1444 | /* unread icon */
1445 | .recentsIcon_c99c29 .iconBadge__9293f {
1446 | --custom-icon-offset: 8px;
1447 | width: 10px;
1448 | height: 10px;
1449 | transition: background 0.15s ease-out;
1450 | }
1451 |
1452 | .recentsIcon_c99c29:hover .iconBadge__9293f {
1453 | background: var(--white);
1454 | }
1455 | }
1456 | }
1457 |
1458 | /* transparency-blur.css */
1459 | @property --panel-blur {
1460 | syntax: 'on | off';
1461 | inherits: false;
1462 | initial-value: off;
1463 | }
1464 |
1465 | @container body style(--panel-blur: on) {
1466 | .visual-refresh {
1467 | #app-mount {
1468 | --panel-backdrop-filter: blur(var(--blur-amount));
1469 | }
1470 |
1471 | .popoverReactionHoverBar_f84418 /* message hover quick action bar */,
1472 | .tooltip__382e7 /* tooltips */ {
1473 | background: var(--bg-floating);
1474 | }
1475 | .menu_c1e9c4 /* context menus */,
1476 | .contentWrapper__08434 /* emoji/gif panel */,
1477 | .root__49fc1 /* modals like invite */,
1478 | .outer_c0bea0.biteSize_c0bea0:not(.custom-theme-background) /* small profile popup */,
1479 | .autocomplete__6b0e0 /* autocomplete */,
1480 | .container__55c99 /* search suggestions */,
1481 | .messagesPopoutWrap__45690 /* inbox */,
1482 | .popout__76f04 /* channel hover popout */ {
1483 | background: var(--bg-floating);
1484 | }
1485 | }
1486 | }
1487 |
1488 | @property --transparency-tweaks {
1489 | syntax: 'on | off';
1490 | inherits: false;
1491 | initial-value: off;
1492 | }
1493 |
1494 | @container body style(--transparency-tweaks: on) {
1495 | .visual-refresh {
1496 | .formWithLoadedChatInput_f75fb0:before,
1497 | .children__9293f:after {
1498 | display: none;
1499 | }
1500 | }
1501 | }
1502 |
1503 | @property --remove-bg-layer {
1504 | syntax: 'on | off';
1505 | inherits: false;
1506 | initial-value: off;
1507 | }
1508 |
1509 | @container body style(--remove-bg-layer: on) {
1510 | .bg__960e4 {
1511 | background: transparent !important;
1512 | }
1513 | }
1514 |
1515 | /* user-panel.css */
1516 | @property --small-user-panel {
1517 | syntax: 'on | off';
1518 | inherits: false;
1519 | initial-value: off;
1520 | }
1521 |
1522 | @container body style(--small-user-panel: on) {
1523 | .visual-refresh {
1524 | .base_c48ade {
1525 | grid-template-areas:
1526 | 'titleBar titleBar titleBar'
1527 | 'guildsList notice notice'
1528 | 'guildsList channelsList page'
1529 | 'guildsList userPanel page';
1530 | }
1531 | .panels_c48ade {
1532 | max-width: calc(var(--custom-guild-sidebar-width) - var(--custom-guild-list-width));
1533 | }
1534 | }
1535 | }
1536 |
1537 | /* window-controls.css */
1538 | @property --custom-window-controls {
1539 | syntax: 'on | off';
1540 | inherits: false;
1541 | initial-value: off;
1542 | }
1543 |
1544 | body {
1545 | --window-control-size: 14px;
1546 | }
1547 |
1548 | @container body style(--custom-window-controls: on) {
1549 | .winButtons_c38106 {
1550 | gap: 0;
1551 | padding-right: calc(var(--gap) - (var(--window-control-size) / 2) + 1px);
1552 | }
1553 | .winButtons_c38106::before {
1554 | margin-right: calc(var(--custom-app-top-bar-height) / 4);
1555 | }
1556 | .winButton_c38106 > svg {
1557 | display: none;
1558 | }
1559 | .winButton_c38106 {
1560 | background: none !important;
1561 | width: calc(var(--window-control-size) * 2);
1562 | height: var(--custom-app-top-bar-height);
1563 | }
1564 | .winButton_c38106::after {
1565 | display: block;
1566 | content: '';
1567 | height: var(--window-control-size);
1568 | width: var(--window-control-size);
1569 | border-radius: 50%;
1570 | }
1571 | .winButton_c38106:hover::after {
1572 | filter: brightness(0.7);
1573 | }
1574 | .winButton_c38106:active::after {
1575 | transform: scale(0.9);
1576 | }
1577 | .winButtonClose_c38106::after {
1578 | background-color: var(--dnd) !important;
1579 | }
1580 | .winButtonMinMax_c38106:nth-child(1)::after {
1581 | background-color: var(--idle) !important;
1582 | }
1583 | .winButtonMinMax_c38106:nth-child(2)::after {
1584 | background-color: var(--online) !important;
1585 | }
1586 | }
1587 | EOF
1588 | )
1589 |
1590 | themecordBase=$(cat << 'EOF'
1591 | /**
1592 | * @name Themecord
1593 | * @author danihek
1594 | * @version 1.1.0
1595 | * @description Discord theme compatible with your wallpaper!
1596 | * @authorId 518107210803576852
1597 | * @source https://github.com/danihek/Themecord
1598 | */
1599 | EOF
1600 | )
1601 |
1602 | #!/usr/bin/env sh
1603 |
1604 | # RUN THIS SCRIPT RIGHT AFTER ONE OF THE FOLLOWING:
1605 | # - hellwal
1606 | # - pywal
1607 | # - wallust
1608 | #
1609 | # TO PROPERLY APPLY COLORS!
1610 |
1611 | confPath="/home/$USER/.config"
1612 | supportedClients=("Vencord" "vesktop")
1613 | availableClients=()
1614 | generatedColors="hellwal" # default option is hellwal
1615 | colosPath=""
1616 | themeFiller="$dark_theme"
1617 |
1618 | show_help() {
1619 | echo "Usage: themecord [OPTION]"
1620 | echo "Discord theme will always match your wallpaper! "
1621 | echo
1622 | echo "Options:"
1623 | echo " -h Display this message and exit"
1624 | echo " -l use light mode instead of dark mode"
1625 | echo
1626 | echo "Select wallpaper palette backend:"
1627 | echo " -g Use hellwal"
1628 | echo " -p Use pywal"
1629 | echo " -w Use wallust"
1630 | echo
1631 | echo " -f Provide path to generated discord colors"
1632 | echo
1633 | }
1634 |
1635 | while getopts ":hlwpgf:" opt; do
1636 | case ${opt} in
1637 | h )
1638 | show_help
1639 | exit 0
1640 | ;;
1641 | l )
1642 | themeFiller="$light_theme"
1643 | ;;
1644 | w )
1645 | generatedColors="wallust"
1646 | ;;
1647 | p )
1648 | generatedColors="wal"
1649 | ;;
1650 | g )
1651 | generatedColors="hellwal"
1652 | colorsPath="$OPTARG"
1653 | ;;
1654 | f )
1655 | colorsPath="$OPTARG"
1656 | ;;
1657 | \? )
1658 | echo "Invalid option: -$OPTARG" 1>&2
1659 | echo
1660 | show_help
1661 | exit 1
1662 | ;;
1663 | esac
1664 | done
1665 |
1666 | function print_err() {
1667 | echo "[ERROR] $1"
1668 | echo "Exitting..."
1669 | }
1670 |
1671 | for client in "${supportedClients[@]}"; do
1672 | client_path=~/.config/$client
1673 | if test -d $(realpath "$client_path"); then
1674 | echo "[SUCCESS] $client DETECTED (path: $client_path)"
1675 | availableClients+=("$client")
1676 | continue
1677 | else
1678 | echo "[FAILURE] $client not DETECTED (path: $client_path)"
1679 | continue
1680 | fi
1681 | done
1682 |
1683 | if [ -z "$availableClients" ]; then
1684 | print_err "No compatible clients detected! In order to use this script you have to use compatible discord clients! Check out github page for more info: https://github.com/danihek/Themecord"
1685 | exit
1686 | fi
1687 |
1688 | for client in "${availableClients[@]}"; do
1689 | themecordPath="/home/$USER/.config/$client/themes/Themecord.css"
1690 |
1691 | if test -f "$themecordPath"; then
1692 | echo "[INFO] Themecord found in $client"
1693 | else
1694 | echo :root { > $themecordPath
1695 | echo "}" >> $themecordPath
1696 | printf '%s\n' "$themecordBase" >> $themecordPath
1697 | echo "[INFO] Added themecord base to: $themecordPath"
1698 | fi
1699 | done
1700 |
1701 | if [ "$colorsPath" == "" ]; then
1702 | colorsPath="/home/$USER/.cache/$generatedColors/discord-colors.css"
1703 | fi
1704 |
1705 | if [ ! -f "$colorsPath" ]; then
1706 | print_err "Cannot access $colorsPath"
1707 | exit
1708 | fi
1709 | echo "[INFO] discord-colors.css path: $colorsPath"
1710 |
1711 | for client in "${availableClients[@]}"; do
1712 | themecordPath="/home/$USER/.config/$client/themes/Themecord.css"
1713 |
1714 | echo "/* This discord theme is generated by Themecord! */" > $themecordPath
1715 | echo :root { >> $themecordPath
1716 | cat $colorsPath | while IFS= read -r line; do echo -e "\n\t"$line >> $themecordPath; done
1717 |
1718 | if [[ -v themecordFiller ]]; then
1719 | printf '%s\n' "$themecordFiller" >> $themecordPath
1720 | else
1721 | print_err "Cannot access \$themecordFiller content."
1722 | fi
1723 |
1724 | if [[ -v themeFiller ]]; then
1725 | printf '%s\n' "$themeFiller " >> $themecordPath
1726 | else
1727 | print_err "Cannot access \$themeFiller content."
1728 | fi
1729 |
1730 | if [[ -v themecordFiller2 ]]; then
1731 | printf '%s\n' "$themecordFiller2" >> $themecordPath
1732 | else
1733 | print_err "Cannot access \$themecordFiller2 content."
1734 | fi
1735 |
1736 | printf "%s\n" "$themecordBase" >> $themecordPath
1737 | done
1738 |
--------------------------------------------------------------------------------