/** * @name system24 * @description a tui-style discord theme. * @author refact0r * @version 2.0.0 * @invite nz87hXyvcy * @website https://github.com/refact0r/system24 * @source https://github.com/refact0r/system24/blob/master/theme/system24.theme.css * @authorId 508863359777505290 * @authorLink https://www.refact0r.dev */ /* import theme modules */ /* main.css */ @import url('https://refact0r.github.io/midnight-discord/build/midnight.css'); @import url('https://fonts.googleapis.com/css2?family=DM+Mono:ital,wght@0,300;0,400;0,500;1,300;1,400;1,500&display=swap'); @font-face { font-family: 'asciid'; font-style: normal; font-weight: 400; src: local('asciid'), url('https://refact0r.github.io/system24/assets/asciid.woff') format('woff'); } body { /* font, change to '' for default discord font */ --font: 'DM Mono'; /* change to '' for default discord font */ --code-font: 'DM Mono'; /* change to '' for default discord font */ font-weight: 300; /* text font weight. 300 is light, 400 is normal. DOES NOT AFFECT BOLD TEXT */ letter-spacing: -0.05ch; /* decreases letter spacing for better readability. recommended on monospace fonts.*/ /* sizes */ --gap: 12px; /* spacing between panels */ --divider-thickness: 4px; /* thickness of unread messages divider and highlighted message borders */ --border-thickness: 2px; /* thickness of borders around main panels. DOES NOT AFFECT OTHER BORDERS */ --border-hover-transition: 0.2s ease; /* transition for borders when hovered */ /* animation/transition options */ --animations: on; /* off: disable animations/transitions, on: enable animations/transitions */ --list-item-transition: 0.2s ease; /* transition for list items */ --dms-icon-svg-transition: 0.4s ease; /* transition for the dms icon */ /* top bar options */ --top-bar-height: var(--gap); /* height of the top bar (discord default is 36px, old discord style is 24px, var(--gap) recommended if button position is set to titlebar) */ --top-bar-button-position: titlebar; /* off: default position, hide: hide buttons completely, serverlist: move inbox button to server list, titlebar: move inbox button to channel titlebar (will hide title) */ --top-bar-title-position: off; /* off: default centered position, hide: hide title completely, left: left align title (like old discord) */ --subtle-top-bar-title: off; /* off: default, on: hide the icon and use subtle text color (like old discord) */ /* window controls */ --custom-window-controls: off; /* off: default window controls, on: custom window controls */ --window-control-size: 14px; /* size of custom window controls */ /* dms button options */ --custom-dms-icon: off; /* off: use default discord icon, hide: remove icon entirely, custom: use custom icon */ --dms-icon-svg-url: url(''); /* icon svg url. MUST BE A SVG. */ --dms-icon-svg-size: 90%; /* size of the svg (css mask-size property) */ --dms-icon-color-before: var(--icon-subtle); /* normal icon color */ --dms-icon-color-after: var(--white); /* icon color when button is hovered/selected */ --custom-dms-background: off; /* off to disable, image to use a background image (must set url variable below), color to use a custom color/gradient */ --dms-background-image-url: url(''); /* url of the background image */ --dms-background-image-size: cover; /* size of the background image (css background-size property) */ --dms-background-color: linear-gradient(70deg, var(--blue-2), var(--purple-2), var(--red-2)); /* fixed color/gradient (css background property) */ /* background image options */ --background-image: off; /* off: no background image, on: enable background image (must set url variable below) */ --background-image-url: url(''); /* url of the background image */ /* transparency/blur options */ /* NOTE: TO USE TRANSPARENCY/BLUR, YOU MUST HAVE TRANSPARENT BG COLORS. FOR EXAMPLE: --bg-4: hsla(220, 15%, 10%, 0.7); */ --transparency-tweaks: off; /* off: no changes, on: remove some elements for better transparency */ --remove-bg-layer: off; /* off: no changes, on: remove the base --bg-3 layer for use with window transparency (WILL OVERRIDE BACKGROUND IMAGE) */ --panel-blur: off; /* off: no changes, on: blur the background of panels */ --blur-amount: 12px; /* amount of blur */ --bg-floating: var(--bg-3); /* set this to a more opaque color if floating panels look too transparent. only applies if panel blur is on */ /* other options */ --small-user-panel: on; /* off: default user panel, on: smaller user panel like in old discord */ /* unrounding options */ --unrounding: on; /* off: default, on: remove rounded corners from panels */ /* styling options */ --custom-spotify-bar: on; /* off: default, on: custom text-like spotify progress bar */ --ascii-titles: on; /* off: default, on: use ascii font for titles at the start of a channel */ --ascii-loader: system24; /* off: default, system24: use system24 ascii loader, cats: use cats loader */ /* panel labels */ --panel-labels: on; /* off: default, on: add labels to panels */ --label-color: var(--text-muted); /* color of labels */ --label-font-weight: 500; /* font weight of labels */ } /* color options */ :root { --colors: on; /* off: discord default colors, on: midnight custom colors */ /* text colors */ --text-0: var(--bg-4); /* text on colored elements */ --text-1: oklch(95% 0 0); /* other normally white text */ --text-2: oklch(85% 0 0); /* headings and important text */ --text-3: oklch(75% 0 0); /* normal text */ --text-4: oklch(60% 0 0); /* icon buttons and channels */ --text-5: oklch(40% 0 0); /* muted channels/chats and timestamps */ /* background and dark colors */ --bg-1: oklch(31% 0 0); /* dark buttons when clicked */ --bg-2: oklch(27% 0 0); /* dark buttons */ --bg-3: oklch(23% 0 0); /* spacing, secondary elements */ --bg-4: oklch(19% 0 0); /* main background color */ --hover: oklch(54% 0 0 / 0.1); /* channels and buttons when hovered */ --active: oklch(54% 0 0 / 0.2); /* channels and buttons when clicked or selected */ --active-2: oklch(54% 0 0 / 0.3); /* extra state for transparent buttons */ --message-hover: var(--hover); /* messages when hovered */ /* accent colors */ --accent-1: var(--purple-1); /* links and other accent text */ --accent-2: var(--purple-2); /* small accent elements */ --accent-3: var(--purple-3); /* accent buttons */ --accent-4: var(--purple-4); /* accent buttons when hovered */ --accent-5: var(--purple-5); /* accent buttons when clicked */ --accent-new: var(--red-2); /* stuff that's normally red like mute/deafen buttons */ --mention: linear-gradient(to right, color-mix(in hsl, var(--accent-2), transparent 90%) 40%, transparent); /* background of messages that mention you */ --mention-hover: linear-gradient(to right, color-mix(in hsl, var(--accent-2), transparent 95%) 40%, transparent); /* background of messages that mention you when hovered */ --reply: linear-gradient(to right, color-mix(in hsl, var(--text-3), transparent 90%) 40%, transparent); /* background of messages that reply to you */ --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 */ /* status indicator colors */ --online: var(--green-2); /* change to #40a258 for default */ --dnd: var(--red-2); /* change to #d83a41 for default */ --idle: var(--yellow-2); /* change to #cc954c for default */ --streaming: var(--purple-2); /* change to ##9147ff for default */ --offline: var(--text-4); /* change to #82838b for default offline color */ /* border colors */ --border-light: var(--hover); /* general light border color */ --border: var(--active); /* general normal border color */ --border-hover: var(--accent-2); /* border color of panels when hovered */ --button-border: hsl(220, 0%, 100%, 0.1); /* neutral border color of buttons */ /* base colors */ --red-1: oklch(75% 0.13 0); --red-2: oklch(70% 0.13 0); --red-3: oklch(65% 0.13 0); --red-4: oklch(60% 0.13 0); --red-5: oklch(55% 0.13 0); --green-1: oklch(75% 0.12 170); --green-2: oklch(70% 0.12 170); --green-3: oklch(65% 0.12 170); --green-4: oklch(60% 0.12 170); --green-5: oklch(55% 0.12 160); --blue-1: oklch(75% 0.11 215); --blue-2: oklch(70% 0.11 215); --blue-3: oklch(65% 0.11 215); --blue-4: oklch(60% 0.11 215); --blue-5: oklch(55% 0.11 215); --yellow-1: oklch(80% 0.12 90); --yellow-2: oklch(75% 0.12 90); --yellow-3: oklch(70% 0.12 90); --yellow-4: oklch(65% 0.12 90); --yellow-5: oklch(60% 0.12 90); --purple-1: oklch(75% 0.12 310); --purple-2: oklch(70% 0.12 310); --purple-3: oklch(65% 0.12 310); --purple-4: oklch(60% 0.12 310); --purple-5: oklch(55% 0.12 310); } body { --custom-chatbar: separated !important; /* off: default chatbar, aligned: chatbar aligned with the user panel, separated: chatbar separated from chat */ --chatbar-height: 56px !important; /* height of the chatbar (52px by default, 47px recommended for aligned, 56px recommended for separated) */ } .visual-refresh { ._960e4207cea8323e-bg { background: var(--background-base-low); } ._01ae244280823725-container { background-color: var(--background-base-low); } ._37e49614b9f110a9-container { padding: 8px; } } /* ascii.css */ @property --ascii-titles { syntax: 'off | on'; inherits: false; initial-value: on; } @container body style(--ascii-titles: on) { h3[data-text-variant='heading-xxl/extrabold'] { font-family: 'asciid'; font-size: 50px; font-weight: 400; } } @property --ascii-loader { syntax: 'off | system24 | cats'; inherits: false; initial-value: system24; } @container body style(--ascii-loader: system24) { .a2f5142ba8328dfd-content { display: flex; flex-direction: column; align-items: center; gap: 20px; } .a2f5142ba8328dfd-content > .a2f5142ba8328dfd-spinner { display: none; } .a2f5142ba8328dfd-content::before { display: block; content: ' __ ___ __ __\A _______ _______/ /____ ____ ___ |__ \\/ // /\A / ___/ / / / ___/ __/ _ \\/ __ `__ \\__/ / // /_\A (__ ) /_/ (__ ) /_/ __/ / / / / / __/__ __/\A/____/\\__, /____/\\__/\\___/_/ /_/ /_/____/ /_/ \A /____/ '; font-size: 18px; font-family: monospace; white-space: pre; line-height: 1.2; background: linear-gradient(to right, var(--brand-360) 0%, var(--background-accent) 25%, var(--background-accent) 75%, var(--brand-360) 100%); -webkit-background-clip: text; -webkit-text-fill-color: transparent; background-size: 200% auto; animation: textShine 1.5s linear infinite reverse; } .a2f5142ba8328dfd-text { position: static; } @keyframes textShine { 0% { background-position: 0% 50%; } 50% { background-position: 100% 50%; } 50.0001% { background-position: -100%, 50%; } 100% { background-position: 0% 50%; } } } @container body style(--ascii-loader: cats) { .a2f5142ba8328dfd-content { display: flex; flex-direction: column; align-items: center; gap: 32px; position: static; } .a2f5142ba8328dfd-content > .a2f5142ba8328dfd-spinner { display: none; } .a2f5142ba8328dfd-content::before { display: block; content: url('https://raw.githubusercontent.com/refact0r/system24/refs/heads/main/assets/cats.gif'); } .a2f5142ba8328dfd-text { position: static; } } /* colors.css */ @container root style(--colors: on) { #app-mount ._44b0c28be7879b7b-wrapper, #app-mount ._1ce5d425feffd32a-container { --online-2: var(--online); --dnd-2: var(--dnd); --idle-2: var(--idle); --offline-2: var(--offline); --streaming-2: var(--streaming); } } /* panel-labels.css */ body { --label-color: var(--text-muted); --label-hover-color: var(--brand-360); --label-font-weight: 500; } @property --panel-labels { syntax: 'off | on'; inherits: false; initial-value: on; } @container body style(--panel-labels: on) { .visual-refresh { ._5e434347c823b592-guilds, ._5e434347c823b592-panels, ._5e434347c823b592-sidebarList, .f75fb00fb7356cbe-subtitleContainer, ._36d072eab2b2e737-messagesWrapper, .f75fb00fb7356cbe-channelTextArea, .f75fb00fb7356cbe-content > .c8ffbb79449f399c-membersWrap, .c8ffbb79449f399c-container, ._133bf5eea8e33a34-container > ._9293f6b2fc12398a-container, ._133bf5eea8e33a34-peopleColumn, ._133bf5eea8e33a34-nowPlayingColumn, ._01ae244280823725-container > ._9293f6b2fc12398a-container, .cb9592ad77576717-callContainer { &::after { display: block; color: var(--label-color); font-weight: var(--label-font-weight); position: absolute; top: -10px; left: 8px; background-color: var(--background-base-low); padding: 0 4px; z-index: 100; font-size: 16px; transition: color var(--border-hover-transition); } &:hover::after { color: var(--label-hover-color); } } ._5e434347c823b592-guilds::after { content: 'nav'; } ._5e434347c823b592-panels::after { content: 'user'; } ._5e434347c823b592-sidebarList::after { content: 'channels'; } .f75fb00fb7356cbe-subtitleContainer::after { content: 'channel'; } ._36d072eab2b2e737-messagesWrapper::after { content: 'chat'; } .f75fb00fb7356cbe-channelTextArea::after { content: 'input'; } .c8ffbb79449f399c-container::after, .f75fb00fb7356cbe-content > .c8ffbb79449f399c-membersWrap::after { content: 'members'; } ._133bf5eea8e33a34-container > ._9293f6b2fc12398a-container:after { content: 'friends'; } ._133bf5eea8e33a34-peopleColumn::after { content: 'list'; } ._133bf5eea8e33a34-nowPlayingColumn::after { content: 'activity'; } ._01ae244280823725-container > ._9293f6b2fc12398a-container::after { content: 'thread'; } .cb9592ad77576717-callContainer::after { content: 'vc'; } .f75fb00fb7356cbe-content > .c8ffbb79449f399c-membersWrap, ._5e434347c823b592-panels, ._5e434347c823b592-sidebar, ._5e434347c823b592-sidebarList, .f75fb00fb7356cbe-chat, ._5e434347c823b592-page, .f75fb00fb7356cbe-channelTextArea, ._133bf5eea8e33a34-container, .c8ffbb79449f399c-container, ._5e434347c823b592-guilds, ._133bf5eea8e33a34-peopleColumn, ._133bf5eea8e33a34-tabBody, ._01ae244280823725-container, .f75fb00fb7356cbe-chatContent, ._36d072eab2b2e737-messagesWrapper { overflow: visible !important; } ._5e434347c823b592-page, ._133bf5eea8e33a34-tabBody { min-height: 0; } ._133bf5eea8e33a34-peopleColumn { min-width: 0; } ._5e434347c823b592-sidebarList, .c8ffbb79449f399c-container, ._133bf5eea8e33a34-peopleColumn, ._133bf5eea8e33a34-nowPlayingColumn, ._36d072eab2b2e737-messagesWrapper, .f75fb00fb7356cbe-channelTextArea { position: relative; } ._36d072eab2b2e737-scroller { top: 8px; } .c8ffbb79449f399c-membersWrap { height: calc(100% - 8px); } .ef3116c2da186559-scroller { padding-top: calc(var(--custom-guild-list-padding) - 8px); } .f37cb1984c371ee5-animatedContainer, .f37cb1984c371ee5-headerGlass { left: 8px; right: 8px; width: auto; } .f37cb1984c371ee5-header { margin: 0 8px; } ._2637a2609f343032-container { overflow: hidden; } .f37cb1984c371ee5-headerEllipseForeground { display: none; } .cb9592ad77576717-callContainer { padding: 8px; } ._36d072eab2b2e737-messagesWrapper { mask: none !important; } } } /* spotify-bar.css */ @property --custom-spotify-bar { syntax: 'off | on'; inherits: false; initial-value: on; } @container body style(--custom-spotify-bar: on) { .visual-refresh { /* text-like spotify progress bar */ #vc-spotify-progress-bar { margin: 8px 0 0 0; } .vc-spotify-button-row { margin-top: 8px; } #app-mount #vc-spotify-progress-bar .a562c840daab72a7-bar { height: 22px !important; top: 0 !important; background-color: var(--background-surface-high); } #app-mount #vc-spotify-progress-bar .a562c840daab72a7-barFill { height: 22px !important; } #vc-spotify-progress-bar .vc-spotify-time-left, #vc-spotify-progress-bar .vc-spotify-time-right { z-index: 1; top: 0; margin-top: 0; mix-blend-mode: difference; font-size: 16px; line-height: 22px; pointer-events: none; } #vc-spotify-progress-bar .vc-spotify-time-left { left: 6px; } #vc-spotify-progress-bar .vc-spotify-time-right { right: 6px; } #vc-spotify-progress-bar .a562c840daab72a7-grabber { visibility: hidden; } } } body { /* font, change to '' for default discord font */ --font: 'DM Mono'; /* change to '' for default discord font */ --code-font: 'DM Mono'; /* change to '' for default discord font */ font-weight: 300; /* text font weight. 300 is light, 400 is normal. DOES NOT AFFECT BOLD TEXT */ letter-spacing: -0.05ch; /* decreases letter spacing for better readability. recommended on monospace fonts.*/ /* sizes */ --gap: 12px; /* spacing between panels */ --divider-thickness: 4px; /* thickness of unread messages divider and highlighted message borders */ --border-thickness: 2px; /* thickness of borders around main panels. DOES NOT AFFECT OTHER BORDERS */ --border-hover-transition: 0.2s ease; /* transition for borders when hovered */ /* animation/transition options */ --animations: on; /* off: disable animations/transitions, on: enable animations/transitions */ --list-item-transition: 0.2s ease; /* transition for list items */ --dms-icon-svg-transition: 0.4s ease; /* transition for the dms icon */ /* top bar options */ --top-bar-height: var(--gap); /* height of the top bar (discord default is 36px, old discord style is 24px, var(--gap) recommended if button position is set to titlebar) */ --top-bar-button-position: titlebar; /* off: default position, hide: hide buttons completely, serverlist: move inbox button to server list, titlebar: move inbox button to channel titlebar (will hide title) */ --top-bar-title-position: off; /* off: default centered position, hide: hide title completely, left: left align title (like old discord) */ --subtle-top-bar-title: off; /* off: default, on: hide the icon and use subtle text color (like old discord) */ /* window controls */ --custom-window-controls: off; /* off: default window controls, on: custom window controls */ --window-control-size: 14px; /* size of custom window controls */ /* dms button options */ --custom-dms-icon: off; /* off: use default discord icon, hide: remove icon entirely, custom: use custom icon */ --dms-icon-svg-url: url(''); /* icon svg url. MUST BE A SVG. */ --dms-icon-svg-size: 90%; /* size of the svg (css mask-size property) */ --dms-icon-color-before: var(--icon-subtle); /* normal icon color */ --dms-icon-color-after: var(--white); /* icon color when button is hovered/selected */ --custom-dms-background: off; /* off to disable, image to use a background image (must set url variable below), color to use a custom color/gradient */ --dms-background-image-url: url(''); /* url of the background image */ --dms-background-image-size: cover; /* size of the background image (css background-size property) */ --dms-background-color: linear-gradient(70deg, var(--blue-2), var(--purple-2), var(--red-2)); /* fixed color/gradient (css background property) */ /* background image options */ --background-image: off; /* off: no background image, on: enable background image (must set url variable below) */ --background-image-url: url(''); /* url of the background image */ /* transparency/blur options */ /* NOTE: TO USE TRANSPARENCY/BLUR, YOU MUST HAVE TRANSPARENT BG COLORS. FOR EXAMPLE: --bg-4: hsla(220, 15%, 10%, 0.7); */ --transparency-tweaks: off; /* off: no changes, on: remove some elements for better transparency */ --remove-bg-layer: off; /* off: no changes, on: remove the base --bg-3 layer for use with window transparency (WILL OVERRIDE BACKGROUND IMAGE) */ --panel-blur: off; /* off: no changes, on: blur the background of panels */ --blur-amount: 12px; /* amount of blur */ --bg-floating: var(--bg-3); /* set this to a more opaque color if floating panels look too transparent. only applies if panel blur is on */ /* other options */ --small-user-panel: on; /* off: default user panel, on: smaller user panel like in old discord */ /* unrounding options */ --unrounding: on; /* off: default, on: remove rounded corners from panels */ /* styling options */ --custom-spotify-bar: on; /* off: default, on: custom text-like spotify progress bar */ --ascii-titles: on; /* off: default, on: use ascii font for titles at the start of a channel */ --ascii-loader: system24; /* off: default, system24: use system24 ascii loader, cats: use cats loader */ /* panel labels */ --panel-labels: on; /* off: default, on: add labels to panels */ --label-color: var(--text-muted); /* color of labels */ --label-font-weight: 500; /* font weight of labels */ } /* color options */ :root { --colors: on; /* off: discord default colors, on: midnight custom colors */ /* text colors */ --text-0: var(--bg-4); /* text on colored elements */ --text-1: oklch(95% 0 0); /* other normally white text */ --text-2: oklch(85% 0 0); /* headings and important text */ --text-3: oklch(75% 0 0); /* normal text */ --text-4: oklch(60% 0 0); /* icon buttons and channels */ --text-5: oklch(40% 0 0); /* muted channels/chats and timestamps */ /* background and dark colors */ --bg-1: oklch(31% 0 0); /* dark buttons when clicked */ --bg-2: oklch(27% 0 0); /* dark buttons */ --bg-3: oklch(23% 0 0); /* spacing, secondary elements */ --bg-4: oklch(19% 0 0); /* main background color */ --hover: oklch(54% 0 0 / 0.1); /* channels and buttons when hovered */ --active: oklch(54% 0 0 / 0.2); /* channels and buttons when clicked or selected */ --active-2: oklch(54% 0 0 / 0.3); /* extra state for transparent buttons */ --message-hover: var(--hover); /* messages when hovered */ /* accent colors */ --accent-1: var(--purple-1); /* links and other accent text */ --accent-2: var(--purple-2); /* small accent elements */ --accent-3: var(--purple-3); /* accent buttons */ --accent-4: var(--purple-4); /* accent buttons when hovered */ --accent-5: var(--purple-5); /* accent buttons when clicked */ --accent-new: var(--red-2); /* stuff that's normally red like mute/deafen buttons */ --mention: linear-gradient(to right, color-mix(in hsl, var(--accent-2), transparent 90%) 40%, transparent); /* background of messages that mention you */ --mention-hover: linear-gradient(to right, color-mix(in hsl, var(--accent-2), transparent 95%) 40%, transparent); /* background of messages that mention you when hovered */ --reply: linear-gradient(to right, color-mix(in hsl, var(--text-3), transparent 90%) 40%, transparent); /* background of messages that reply to you */ --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 */ /* status indicator colors */ --online: var(--green-2); /* change to #40a258 for default */ --dnd: var(--red-2); /* change to #d83a41 for default */ --idle: var(--yellow-2); /* change to #cc954c for default */ --streaming: var(--purple-2); /* change to ##9147ff for default */ --offline: var(--text-4); /* change to #82838b for default offline color */ /* border colors */ --border-light: var(--hover); /* general light border color */ --border: var(--active); /* general normal border color */ --border-hover: var(--accent-2); /* border color of panels when hovered */ --button-border: hsl(220, 0%, 100%, 0.1); /* neutral border color of buttons */ /* base colors */ --red-1: oklch(75% 0.13 0); --red-2: oklch(70% 0.13 0); --red-3: oklch(65% 0.13 0); --red-4: oklch(60% 0.13 0); --red-5: oklch(55% 0.13 0); --green-1: oklch(75% 0.12 170); --green-2: oklch(70% 0.12 170); --green-3: oklch(65% 0.12 170); --green-4: oklch(60% 0.12 170); --green-5: oklch(55% 0.12 160); --blue-1: oklch(75% 0.11 215); --blue-2: oklch(70% 0.11 215); --blue-3: oklch(65% 0.11 215); --blue-4: oklch(60% 0.11 215); --blue-5: oklch(55% 0.11 215); --yellow-1: oklch(80% 0.12 90); --yellow-2: oklch(75% 0.12 90); --yellow-3: oklch(70% 0.12 90); --yellow-4: oklch(65% 0.12 90); --yellow-5: oklch(60% 0.12 90); --purple-1: oklch(75% 0.12 310); --purple-2: oklch(70% 0.12 310); --purple-3: oklch(65% 0.12 310); --purple-4: oklch(60% 0.12 310); --purple-5: oklch(55% 0.12 310); }