Created
March 27, 2025 15:27
-
-
Save caminashell/ef7bf9f74f1122d56f58c20769bcb356 to your computer and use it in GitHub Desktop.
Discord Styles (2025.03)
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
/* | |
* Caminashell rebased styles (removed a lot of unused) | |
* stable 382355 (e3770fd) Build Override: N/A | |
* Vencord b3bff83 (Vesktop v1.5.5) | |
* Electron 34.1.0 | |
* Chromium 132.0.6834.194 | |
*/ | |
/* | |
* Yes, this codebase is near unreadable. Why? | |
* I designed this mainly as a test to see how viable avoidance of straight out class selectors would be. | |
* The codebase was never designed to be pretty, it was designed to require as little maintenance as possible. | |
*/ | |
@import url('https://fonts.googleapis.com/css2?family=Karla:wght@400;500;600;700&display=swap'); | |
@import url('https://mwittrien.github.io/BetterDiscordAddons/Themes/BlurpleRecolor/BlurpleRecolor.css'); | |
@import url('https://discord-custom-covers.github.io/usrbg/dist/usrbg.css'); | |
button { | |
--accentcolor: var(--accent-alt); | |
} | |
/* Root Variables */ | |
:root { | |
/* --font-primary: 'Karla', sans-serif; */ | |
/* --font-display: var(--font-primary) !important; */ | |
/* Dark Matter Variables */ | |
--avatar-size: 32px; | |
/* --background-image: url('https://i.imgur.com/7SbtKvw.png'); */ | |
/* --home-image: url('https://i.imgur.com/233d55Y.gif'); */ | |
--background-solid: #222224; | |
--background-solid-dark: #101218; | |
--background-solid-darker: #0c0e12; | |
--accent: 37, 172, 232; | |
--accent-alt: 29, 101, 134; | |
--md-black: 0, 0, 0; | |
--dm-white: 255, 255, 255; | |
/* BlurpleRecolor */ | |
--accentcolor: var(--accent); | |
--vaccentcolor-hover: rgb(var(--accent)); | |
--vaccentcolor-active: rgb(var(--accent)); | |
} | |
:not(div[class*="userProfile"][class*="unThemed"]).theme-dark, | |
:not(div[class*="userProfile"]).theme-light, | |
div[class*="userProfile"][class*="unThemed"].theme-light { | |
/* Discord vars */ | |
--background-primary: var(--background-solid); | |
--background-mobile-primary: var(--background-primary); | |
--background-secondary: var(--background-solid); | |
--background-mobile-secondary: var(--background-secondary); | |
--background-secondary-alt: var(--background-solid); | |
--background-tertiary: var(--background-solid); | |
--background-floating: var(--background-solid); | |
--background-secondary: var(--background-solid); | |
--background-accent: var(--background-solid); | |
--background-message-hover: rgba(var(--md-black), 0.4); | |
--channeltextarea-background: transparent; | |
--activity-card-background: rgba(var(--dm-white), 0.05); | |
--deprecated-store-bg: transparent; | |
--background-modifier-hover: rgba(var(--md-black), 0.3); | |
--background-modifier-active: rgba(var(--md-black), 0.3); | |
--background-modifier-selected: rgba(var(--md-black), 0.6); | |
--elevation-low: inset 0 -1px 0 0 rgba(var(--md-black), 0.3); | |
--channels-default: rgba(var(--dm-white), 0.3); | |
--deprecated-quickswitcher-input-background: var(--background-solid); | |
--header-primary: rgba(var(--dm-white), 1); | |
--header-secondary: rgba(var(--dm-white), 0.6); | |
--text-normal: rgba(var(--dm-white), 0.6); | |
--text-muted: #8a8e94; | |
--interactive-muted: rgba(var(--dm-white), 0.15); | |
--interactive-normal: rgba(var(--dm-white), 0.5); | |
--interactive-hover: rgba(var(--dm-white), 0.75); | |
--interactive-active: rgba(var(--dm-white), 1); | |
--deprecated-card-bg: rgba(var(--dm-white), 0.05); | |
--text-link: rgba(var(--accent), 1); | |
--focus-primary: rgba(var(--accent), 1); | |
--modal-background: var(--background-solid); | |
--modal-footer-background: var(--background-solid-darker); | |
} | |
::selection { | |
background-color: rgba(var(--accent-alt), 0.5); | |
} | |
/* Scrollbars */ | |
/* ::-webkit-scrollbar { | |
width: 14px !important; | |
} | |
::-webkit-scrollbar-thumb { | |
border-radius: 8px !important; | |
border: 3px solid transparent !important; | |
background-color: rgba(var(--accent-alt), 1) !important; | |
} | |
::-webkit-scrollbar-track { | |
visibility: visible !important; | |
border-radius: 8px !important; | |
border: 3px solid transparent !important; | |
background-color: rgba(0, 0, 0, 0.3) !important; | |
background-clip: padding-box !important; | |
} | |
.none-2Eo-qx::-webkit-scrollbar { | |
display: none !important; | |
} */ | |
/* Titlebar */ | |
/* div[class*="typeWindows-"] { | |
--background-modifier-hover: rgba(var(--dm-white), 0.05); | |
--background-modifier-active: rgba(var(--dm-white), 0.075); | |
height: 26px; | |
} | |
div[class*="typeWindows-"]>div:first-child { | |
display: none; | |
} | |
div[class*="typeWindows-"]>div[role="button"] { | |
height: 30px; | |
width: 36px; | |
} | |
div[class*="typeWindows-"]::after { | |
content: 'Discord'; | |
font-weight: 5000; | |
line-height: 31px; | |
color: var(--text-muted); | |
font-size: 14px; | |
position: absolute; | |
padding: 0 12px; | |
top: 0; | |
left: 0; | |
width: 100%; | |
height: 30px; | |
background: rgba(var(--md-black), 0.85); | |
z-index: -1; | |
} */ | |
/* Guilds */ | |
/* nav[class*="guilds-"] { | |
background: transparent; | |
} | |
ul[data-list-id='guildsnav'] { | |
--background-secondary: var(--background-solid); | |
--background-primary: rgba(var(--dm-white), 0.1); | |
margin-bottom: 70px; | |
background-color: rgba(var(--md-black), 0.6); | |
border-right: 1px solid rgba(var(--md-black), 0.2); | |
box-shadow: inset -10px 0px 20px -10px rgba(var(--md-black), 0.3); | |
} | |
ul[data-list-id='guildsnav'] ::-webkit-scrollbar { | |
display: none; | |
} | |
ul[data-list-id='guildsnav']>div[dir] { | |
padding-top: 18px; | |
} | |
ul[data-list-id='guildsnav'] [class^="pill-"], | |
ul[data-list-id='guildsnav'] [class^="pill-"]>div { | |
height: 40px !important; | |
} | |
ul[data-list-id='guildsnav'] div[style*="height: 56"], | |
ul[id^="folder-items-"] { | |
height: auto !important; | |
} | |
ul[data-list-id='guildsnav'] [class^="pill-"] span { | |
width: 10px; | |
margin-left: -5px; | |
border-radius: 20px; | |
} | |
[data-list-id='guildsnav'] [class^="pill-"] span[style^="opacity: 1; height: 40"] { | |
--header-primary: rgba(var(--accent), 1); | |
} | |
span[class^="expandedFolderBackground-"] { | |
--background-secondary: rgba(var(--md-black), 0.25); | |
border-radius: 14px; | |
width: 40px; | |
left: 16px; | |
} | |
.wrapper-28eC3z, | |
[data-list-id='guildsnav'] [data-dnd-name] > div, | |
[data-list-id='guildsnav'] svg[width="48"] { | |
width: 40px; | |
height: 40px; | |
} | |
div[data-list-item-id="guildsnav___home"] { | |
background: var(--home-image) top center/110% no-repeat; | |
} | |
div[class^="unreadMentionsIndicatorBottom-"] { | |
bottom: 70px; | |
} | |
#app-mount [data-list-item-id="guildsnav___home"]>div { | |
color: transparent; | |
background-color: transparent; | |
} | |
div[data-list-item-id="guildsnav___create-join-button"], | |
div[data-list-item-id="guildsnav___guild-discover-button"] { | |
transition: 150ms ease; | |
opacity: 0.5; | |
background-color: var(--background-solid) !important; | |
color: rgba(var(--dm-white), 0.3) !important; | |
border: 1px dashed rgba(var(--dm-white), 0.3); | |
border-radius: 50px; | |
} | |
div[data-list-item-id="guildsnav___create-join-button"]:hover, | |
div[data-list-item-id="guildsnav___guild-discover-button"]:hover { | |
opacity: 1; | |
} */ | |
/* Sidebar */ | |
/* .platform-win [class^="sidebar-"] { | |
border-radius: 0; | |
background-color: transparent; | |
} | |
div[class^="sidebar-"] nav, | |
#private-channels { | |
background: var(--background-secondary) !important; | |
--background-tertiary: rgba(var(--md-black), 0.35); | |
} | |
div[class^="sidebar-"]>nav>div[class^="searchBar"] { | |
height: 54px; | |
} */ | |
/* members wrapper */ | |
/* .container-2o3qEW { | |
--background-secondary: rgba(var(--md-black), 0.4); | |
--background-modifier-hover: rgba(var(--dm-white), 0.07); | |
--background-modifier-active: var(--background-modifier-hover); | |
--background-modifier-selected: rgba(var(--dm-white), 0.07); | |
background: rgb(var(--md-black), 0.9); | |
} | |
div[data-list-id^="members-"][class*="scrollerBase-"] { | |
background: transparent; | |
} | |
div[data-list-id^="members-"] [class*="placeholder"] { | |
--backgorund-primary: var(--text-normal); | |
} | |
div[class^='nowPlayingColumn'] { | |
--background-secondary: transparent; | |
--background-primary: rgba(var(--md-black), 0.5); | |
--background-modifier-hover: rgba(var(--dm-white), 0.075); | |
} | |
div[class^="members-"] div[class^="member-"] { | |
background-color: transparent; | |
} | |
#channels div[class^="unread-"] { | |
--interactive-active: rgba(var(--accent), 1); | |
} */ | |
/* Sidebar Header */ | |
/* nav[aria-label]>div>header { | |
display: flex; | |
flex-direction: column; | |
justify-content: center; | |
height: 54px; | |
--background-accent: rgba(var(--accent), 1); | |
--background-modifier-hover: rgba(var(--md-black), 0.25); | |
} */ | |
/* Outer containers */ | |
/* body { | |
background: var(--background-image) center/cover no-repeat; | |
} | |
#app-mount { | |
background-color: transparent; | |
--background-tertiary: transparent; | |
--background-secondary: transparent; | |
} | |
#app-mount>div[class^="appDevToolsWrapper-"] { | |
--background-primary: transparent; | |
--background-tertiary: transparent; | |
--background-secondary: rgba(var(--md-black), 0.7); | |
background-color: rgba(var(--md-black), 0.4); | |
} | |
div[class^="notAppAsidePanel-"]>div[class^="app-"]>div[class^="app-"], | |
div[class^="app-"]>div[class^="bg-"] { | |
background-color: transparent; | |
} | |
div[class*="baseLayer-"]>div[class^="container-"] { | |
background-color: rgb(var(--md-black), 0.4); | |
} | |
nav+div [class^='sidebar-'], | |
nav+div[class^='base-'] { | |
overflow: visible !important; | |
position: relative; | |
max-width: calc(100% - 72px); | |
} | |
nav+div[class^='base-'] > div[class^="notice"] { | |
border-radius: 0; | |
} | |
div[class^='base-']>div, | |
section[class*="themed-"] { | |
--background-secondary: rgba(var(--md-black), 0.7); | |
--background-tertiary: rgba(var(--dm-white), 0.05); | |
--background-primary: rgba(var(--md-black), 0.8); | |
} | |
#app-mount>div:not([class^="appDevToolsWrapper-"]), | |
.autocomplete-1vrmpx { | |
--background-primary: var(--background-solid); | |
--background-secondary: var(--background-solid-dark); | |
--background-secondary-alt: var(--background-solid-darker); | |
--background-tertiary: var(--background-solid-darker); | |
} */ | |
/* Header */ | |
/* section[class*="themed-"] { | |
height: 54px; | |
box-shadow: var(--elevation-low); | |
background-color: rgb(var(--md-black), 0.925) !important; | |
--background-secondary: rgba(var(--dm-white), 0.1); | |
} | |
section>div>a[href*="support.discord.com"] { | |
display: none; | |
} | |
section[class*="themed-"]::before, | |
section[class*="themed-"] ::after { | |
content: none; | |
} | |
section div[class^="toolbar"]>div[role] { | |
margin: 0 4px; | |
transition: 150ms ease; | |
display: flex; | |
align-items: center; | |
justify-content: center; | |
border-radius: 3px; | |
width: 28px; | |
height: 28px; | |
} | |
section div[class^="toolbar"]>div[role] svg { | |
width: 22px; | |
} | |
section div[class^="toolbar"]>div[role][class*="selected-"] { | |
background-color: rgba(var(--dm-white), 0.1); | |
} */ | |
/* Panels */ | |
/* div[class^='sidebar-']>section { | |
--background-primary: rgba(var(--dm-white), 0.07); | |
--background-secondary: rgba(var(--dm-white), 0.1); | |
--background-secondary-alt: rgba(var(--md-black), 0.95); | |
margin-bottom: 70px; | |
} | |
div[class^='sidebar-']>section>div:last-child { | |
background-color: var(--background-secondary-alt); | |
box-sizing: border-box; | |
height: 70px; | |
padding: 0 18px; | |
width: calc(100% + 72px); | |
position: absolute; | |
left: -72px; | |
bottom: 0; | |
} | |
div[class^="sidebar-"]>section>div:last-child [class^="avatarWrapper-"] { | |
flex: 1; | |
} */ | |
/* Content */ | |
div[class^='chat'] { | |
--background-floating: rgba(var(--md-black), 0.5); | |
background: transparent; | |
} | |
div[class^="container-"][id^="chat-messages-"] { | |
--background-modifier-hover: var(--background-solid-dark); | |
} | |
div[class^='chat'] main form { | |
margin-top: 0; | |
} | |
div[class^='chat'] main form::before { | |
content: none; | |
} | |
div[data-list-id="chat-messages"] { | |
--background-primary: transparent; | |
--background-secondary: rgba(var(--dm-white), 0.05); | |
--background-accent: rgba(var(--dm-white), 0.1); | |
} | |
div[class^="channelTextArea-"] { | |
--background-secondary: transparent; | |
box-shadow: inset 0 0 0 2px rgba(var(--dm-white), 0.1); | |
transition: 250ms ease; | |
margin-bottom: 24px; | |
margin-top: 12px; | |
border-radius: 5px; | |
} | |
div[id^="chat-messages-"]+div:not([id]):last-child { | |
height: 8px; | |
} | |
div[id^="chat-messages-"][class*="cozy-"] { | |
padding-left: calc(var(--avatar-size) * 2); | |
} | |
div[id^="chat-messages-"] { | |
margin-left: 8px; | |
margin-right: 8px; | |
border-radius: 4px; | |
} | |
div[id^="chat-messages-"]>div[class^="buttonContainer-"] { | |
transform: scale(.85); | |
top: 1px; | |
} | |
div[id^="chat-messages-"] { | |
--background-primary: rgba(var(--md-black), 0.5); | |
} | |
div[id^="chat-messages-"]>div>[class^="avatar-"] { | |
margin-top: 6px; | |
width: var(--avatar-size); | |
height: var(--avatar-size); | |
} | |
div[id^="chat-messages-"][class*="cozy-"] div::before { | |
--gutter: 13px; | |
} | |
.mention { | |
transition: 150ms ease; | |
color: rgba(var(--accent), 1) !important; | |
background-color: rgba(var(--accent), 0.3); | |
padding: 3px 5px; | |
border-radius: 5px; | |
} | |
.mention:hover { | |
background-color: rgba(var(--accent), 0.3) !important; | |
} | |
#app-mount .container-2cd8Mz { | |
background: var(--background-primary); | |
} | |
div[class*="barBase-"] { | |
padding-bottom: 0; | |
background-color: rgba(var(--accent-alt), 0.9); | |
} | |
/* Codeblocks */ | |
html pre { | |
border-radius: 0; | |
background: transparent; | |
border-color: rgba(255, 255, 255, 0.1); | |
} | |
pre code.hljs { | |
border: none; | |
background-color: rgba(var(--dm-white), 0.1); | |
color: rgba(var(--dm-white), 0.7); | |
padding: 1em; | |
} | |
html code.inline, | |
html code.inline { | |
background: rgba(var(--dm-white), 0.1); | |
color: rgba(var(--dm-white), 0.7); | |
padding: 0.3em 0.6em; | |
border-radius: 3px; | |
} | |
/* Settings */ | |
/* div[aria-label*="_SETTINGS"], | |
div[aria-label*="_DEBUG"] { | |
--background-primary: transparent; | |
--background-secondary: rgba(var(--md-black), 0.7); | |
} | |
div[class^="sidebarRegionScroller-"]>nav { | |
--background-secondary: transparent; | |
} | |
div[class^="contentRegion-"] { | |
--background-primary: rgba(var(--md-black), 0.8); | |
} | |
div[class^="contentRegion-"] div[style^="overflow: hidden scroll"] { | |
background-color: transparent; | |
--background-primary: rgba(var(--md-black), 0.1); | |
--background-secondary: rgba(var(--md-black), 0.2); | |
--background-secondary-alt: rgba(var(--md-black), 0.25); | |
--background-tertiary: rgba(var(--dm-white), 0.1); | |
} | |
div[aria-label*="_SETTINGS"] aside>div { | |
--background-primary: transparent; | |
} | |
div[aria-label*="_SETTINGS"] aside>div::-webkit-scrollbar-track { | |
visibility: hidden !important; | |
} | |
.bd-addon-list { | |
--background-secondary: var(--background-solid); | |
--background-secondary-alt: var(--background-solid-dark); | |
} */ | |
/* Tab Bar */ | |
/* div[class*="topPill"], | |
nav>div[role="tablist"], | |
.bd-tab-bar { | |
--background-accent: rgba(var(--accent)); | |
--background-modifier-hover: rgba(var(--dm-white), 0.05); | |
--background-modifier-active: rgba(var(--dm-white), 0.075); | |
--background-modifier-selected: rgba(var(--accent), 0.25); | |
} */ | |
/* Server Discovery */ | |
/* div[class^="sidebar"]+[class^="pageWrapper"] { | |
--background-secondary: rgba(var(--md-black), 0.8); | |
background-color: var(--background-secondary); | |
} */ | |
/* Crash Page */ | |
/* div[class*="errorPage"] { | |
--background-secondary: rgba(var(--md-black), 0.7) !important; | |
} */ | |
/* Tooltips */ | |
/* div[class^="tooltip-"] { | |
--background-floating: rgba(var(--accent-alt), 1); | |
--text-normal: #e0e0e0; | |
} */ | |
/* Buttons */ | |
/* button[class*="button-"][class*="color"], | |
.bd-button { | |
--vaccentcolor: var(--accent-alt); | |
} */ | |
/* .bd-button { | |
--bd-blue: rgba(var(--accent-alt), 1); | |
} */ | |
/* Context Menu */ | |
/* div[role="menuitem"] { | |
--vaccentcolor: var(--accent-alt); | |
} | |
div[role="menuitem"]:active { | |
--vaccentcolor: var(--accent); | |
} */ | |
/* Depreceated Components */ | |
/* These use hardcoded colors, no need to bother with strange selectors */ | |
#app-mount .footer-2gL1pp, | |
#app-mount .footer-3mqk7D { | |
background-color: var(--background-secondary); | |
box-shadow: none; | |
} | |
#app-mount .root-1gCeng, | |
#app-mount .addGamePopout-2RY8Ju, | |
#app-mount .keyboardShortcutsModal-3piNz7, | |
#app-mount .emojiAliasInput-1y-NBz .emojiInput-1aLNse, | |
.perksModal-fSYqOq .perk-2WeBWW, | |
#app-mount .uploadModal-2ifh8j, | |
#app-mount .contentWrapper-3WC1ID, | |
#app-mount .contentWarningPopout-n5JsIs { | |
background-color: var(--background-primary); | |
} | |
#app-mount .codeRedemptionRedirect-1wVR4b, | |
#app-mount .userSettingsVoice-iwdUCU .previewOverlay-2O7_KC, | |
#app-mount .inset-3sAvek { | |
background-color: var(--background-tertiary); | |
border: none; | |
} | |
#app-mount .paymentPane-3bwJ6A, | |
#app-mount .tierBody-x9kBBp, | |
#app-mount .tierBody-16Chc9, | |
#app-mount .barBackground-2EEiLw, | |
#app-mount .body-3iLsc4, | |
#app-mount .footer-1fjuF6, | |
#app-mount .container-3ayLPN, | |
#app-mount .colorPickerCustom-2CWBn2, | |
#app-mount .tierMarkerBackground-3q29am, | |
.css-3vaxre-menu, | |
.css-dwar6a-menu, | |
#app-mount .autocomplete-1vrmpx, | |
.categoryHeader-O1zU94, | |
#app-mount .popoutList-T9CKZQ, | |
#app-mount .quickSelectPopout-X1hvgV, | |
.colorable-1bkp8v.primaryDark-3mSFDl, | |
.tile-2naSqK, | |
.videoWrapper-2v09vt, | |
#app-mount .spoilerText-3p6IlD.hidden-HHr2R9 { | |
background-color: var(--background-solid); | |
} | |
#app-mount .expandedInfo-3kfShd, | |
#app-mount .tierHeaderLocked-1a2opw, | |
#app-mount .tierHeaderLocked-1s2JJz, | |
#app-mount .headerNormal-T_seeN, | |
#app-mount .focused-2bY0OD, | |
.colorable-1bkp8v.primaryDark-3mSFDl:hover { | |
background-color: var(--background-solid-dark); | |
} | |
#app-mount .payment-xT17Mq { | |
background-color: transparent; | |
border-bottom-color: rgba(var(--dm-white), 0.025); | |
} | |
#app-mount .bottomDivider-1K9Gao, | |
#app-mount .focused-2bY0OD { | |
border-bottom-color: var(--background-solid-dark); | |
} | |
#app-mount div[data-list-id="billing-history"], | |
#app-mount div[data-list-id^="private-channels-"], | |
#app-mount .media-engine-video, | |
.react-datepicker, | |
.react-datepicker__header, | |
.react-datepicker__day--outside-month, | |
.react-datepicker__day--disabled, | |
div[data-list-id^="members-"], | |
div[data-list-id^="members-"]>div { | |
background-color: transparent !important; | |
} | |
.react-datepicker__day--disabled { | |
opacity: .6; | |
} | |
#app-mount .react-datepicker__day { | |
border-top-color: var(--background-secondary); | |
border-left-color: var(--background-secondary); | |
} | |
#app-mount .background-3xPPFc, | |
#app-mount .tierInProgress-3mBoXq { | |
color: var(--background-solid); | |
} | |
.option-96V44q:after { | |
content: none; | |
} | |
#app-mount .option-96V44q.selected-rZcOL-, | |
#app-mount .selected-1Tbx07, | |
#app-mount .quickSelectPopoutOption-opKBx9:hover, | |
#app-mount .outer-1AjyKL.active-1xchHY, | |
#app-mount .outer-1AjyKL.interactive-3B9GmY:hover { | |
background-color: var(--background-modifier-hover); | |
} | |
.css-3vaxre-menu, | |
.tierMarker-5HkGJ_[style] { | |
border-color: rgba(var(--dm-white), 0.025) !important; | |
} | |
#app-mount .searchAnswer-3Dz2-q, | |
#app-mount .searchFilter-2ESiM3, | |
#app-mount .option-1B5ZV8, | |
#app-mount .pill-2pQByF { | |
background-color: rgba(var(--accent-alt), 1); | |
color: #fff; | |
} | |
#app-mount .keybindShortcut-1BD6Z1 span { | |
background: var(--background-solid-dark); | |
box-shadow: inset 0 -4px 0 var(--background-solid-darker); | |
} | |
#app-mount .perksModal-fSYqOq { | |
background: rgba(var(--md-black), 0.7); | |
} | |
#app-mount .card-FDVird:before { | |
background: var(--background-modifier-hover); | |
border: none; | |
} | |
/* Login Page */ | |
div[class^="splashBackground"] canvas, | |
div[class^="splashBackground"] img { | |
display: none; | |
} | |
/* Modals */ | |
div[class*="footerSeparator"] { | |
box-shadow: none !important; | |
} | |
/* Forums */ | |
.container-3wLKDe { | |
background: var(--background-primary); | |
} | |
li[class^="card-"]>div[class^="container-"] { | |
background: var(--background-floating) | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment