- Dark theme for Spicetify + Dark theme for Spicetify v2
@@ -17,6 +17,7 @@
+## Info + +With the new versions of Spotify and Spicetify the main branch theme became outdated and doesn't work anymore. Using this version (v2), you can enjoy all Spotify functionalities from new releases using the Omni theme. + ## Install All instructions can be found at [INSTALL.md](./INSTALL.md). ## Team -This theme is maintained by the following person(s) and a bunch of [awesome contributors](https://github.com/getomni/spicetify/graphs/contributors). +This theme version (v2) is maintained by the following person(s) and a bunch of [awesome contributors](https://github.com/getomni/spicetify/graphs/contributors). -| [![João Inácio](https://github.com/birobirobiro.png?size=100)](https://github.com/birobirobiro) | -| ----------------------------------------------------------------------------------------------- | -| [João Inácio](https://github.com/birobirobiro) | +| [![Ian Libânio](https://github.com/ianlibanio.png?size=100)](https://github.com/ianlibanio) | +| ------------------------------------------------------------------------------------------- | +| [Ian Libânio](https://github.com/ianlibanio) | ## License -[GPL-3.0 License](./LICENSE.md) +[MIT License](./LICENSE.md) --- -Based on [Dribbblish](https://github.com/morpheusthewhite/spicetify-themes/tree/master/Dribbblish) +Based on [Dribbblish v2](https://github.com/morpheusthewhite/spicetify-themes/tree/v2/Dribbblish) diff --git a/assets/glue-resources/fonts/Roboto.woff2 b/assets/glue-resources/fonts/Roboto.woff2 index 7e854e6..9a0064e 100644 Binary files a/assets/glue-resources/fonts/Roboto.woff2 and b/assets/glue-resources/fonts/Roboto.woff2 differ diff --git a/assets/glue-resources/fonts/RobotoMedium.woff2 b/assets/glue-resources/fonts/RobotoMedium.woff2 index 8dceabc..6a88805 100644 Binary files a/assets/glue-resources/fonts/RobotoMedium.woff2 and b/assets/glue-resources/fonts/RobotoMedium.woff2 differ diff --git a/color.ini b/color.ini index d37533c..3f12393 100644 --- a/color.ini +++ b/color.ini @@ -1,17 +1,17 @@ [base] - main_fg =E1E1E6 - secondary_fg =E1E1E6 - main_bg =191622 - sidebar_and_player_bg =191622 - cover_overlay_and_shadow =000000 - indicator_fg_and_button_bg =5A4B81 - pressing_fg =FF5C86 - slider_bg =191622 - sidebar_indicator_and_hover_button_bg =F7F7FB - scrollbar_fg_and_selected_row_bg =5A4B81 - pressing_button_fg =F7F7FB - pressing_button_bg =191622 - selected_button =67e480 - miscellaneous_bg =5A4B81 - miscellaneous_hover_bg =5A4B81 - preserve_1 =FFFFFF +text = E1E1E6 +subtext = E1E1E6 +sidebar-text = F7F7FB +main = 191622 +sidebar = 191622 +player = 191622 +card = 191622 +shadow = 000000 +selected-row = 988BC7 +button = 5A4B81 +button-active = 988BC7 +button-disabled = 5A4B81 +tab-active = 5A4B81 +notification = 5A4B81 +notification-error = E96379 +misc = FFFFFF diff --git a/omni.js b/omni.js index 2516ead..f394a0b 100644 --- a/omni.js +++ b/omni.js @@ -1,139 +1,226 @@ -// Hide popover message -document.getElementById("popover-container").style.height = 0; - -function waitForElement(els, func, timeout = 100) { - const queries = els.map(el => document.querySelector(el)); - if (queries.every(a => a)) { - func(queries); - } else if (timeout > 0) { - setTimeout(waitForElement, 300, els, func, --timeout); - } -} - -// Add "Open User Profile" item in profile menu -new Spicetify.Menu.Item(window.__spotify.username, false, () => window.open(window.__spotify.userUri)).register(); - -waitForElement([".LeftSidebar", ".LeftSidebar__section--rootlist .SidebarList__list"], (queries) => { - /** Replace Playlist name with their pictures */ - function loadPlaylistImage() { - const sidebarItem = queries[1].childNodes; - - for (let i = 0; i < sidebarItem.length; i++) { - const item = sidebarItem[i]; - let link = item.getElementsByTagName("a"); - if (!link || !link[0]) continue; - link = link[0]; - - let href = link.href.replace("app:", ""); - - if (href.indexOf("playlist-folder") != -1) { - const button = item.getElementsByTagName("button")[0] - button.classList.add("Button", "Button--style-icon-background", "Button--size-28",); - item.setAttribute("data-tooltip", item.innerText); - link.firstChild.innerText = item.innerText.slice(0, 3); - continue; - } - - if (href.indexOf("chart") != -1) { - href = href.replace("chart:", "user:spotifycharts:playlist:"); - } - - Spicetify.CosmosAPI.resolver.get({ - url: `sp://core-playlist/v1/playlist/${href}/metadata`, - body: { policy: { picture: true } }, - }, (err, res) => { - if (err) return; - const meta = res.getJSONBody().metadata; - item.firstChild.className = "playlist-picture" - item.firstChild.style.backgroundImage = `url(${meta.picture})`; - item.firstChild.setAttribute("data-tooltip", item.textContent); - }); - } - } - - loadPlaylistImage(); - - new MutationObserver(loadPlaylistImage) - .observe(queries[1], {childList: true}); - - /** Replace Apps name with icons */ - - /** List of avaiable icons to use: - addfollow filter more skipforward15 - addfollowers flag newradio sort - addsuggestedsong follow notifications sortdown - album fullscreen offline sortup - artist gears pause spotifylogo - attach headphones play star - block heart playlist stations - bluetooth helpcircle plus subtitles - browse home podcasts tag - camera inbox queue time - check instagram radio track - collection lightning refresh trending - copy localfile released user - devices locked repeat video - discover lyrics repeatonce volume - download menu search watch - downloaded messages share x - edit mic shuffle helpcircle - email minimise skip - events mix skipback15 - */ - - function replaceTextWithIcon(el, iconName) { - if (iconName) { - el.classList.add(`spoticon-${iconName}-24`); - } - - el.parentNode.setAttribute("data-tooltip", el.innerText); - el.innerText = ""; - } - - queries[0].querySelectorAll(".LeftSidebar__section:not(.LeftSidebar__section--rootlist) [href]") - .forEach(item => { - let icon = ((app) => {switch (app) { - case "genius": return "lyrics"; - case "JQBX": return "addsuggestedsong"; - case "bookmark": return "tag"; - case "reddit": return "discover"; - case "made-for-you": return "user"; - case "recently-played": return "time"; - case "collection-songs": return "collection"; - case "collection:albums": return "album"; - case "collection:artists": return "artist"; - case "collection:podcasts": return "podcasts"; - case "playlist:local-files": return "localfile"; - case "stations": return "stations"; - /** - * Uncomment 3 lines below if you're using old version of Spotify that - * does not have Home/Browse/Radio app icons by default. - */ - //case "home": return "home"; - //case "browse": return "browse"; - //case "radio": return "radio"; - }})(item.href.replace("spotify:app:", "")); - - replaceTextWithIcon(item.firstChild, icon); - }); - - waitForElement([`[href="spotify:app:recently-played"]`], ([query]) => { - replaceTextWithIcon(query.firstChild, "time"); - }); -}); - -waitForElement(["#search-input"], (queries) => { - queries[0].setAttribute("placeholder", ""); -}); - -waitForElement(["#main-container"], (queries) => { - const shadow = document.createElement("div"); - shadow.id = "dribbblish-back-shadow"; - queries[0].prepend(shadow); -}); - -waitForElement([".LeftSidebar"], (queries) => { - const fade = document.createElement("div"); - fade.id = "dribbblish-sidebar-fade-in"; - queries[0].append(fade); -}); +// Hide popover message +// document.getElementById("popover-container").style.height = 0; +const DribbblishShared = { + configMenu: new Spicetify.Menu.SubMenu("Dribbblish", []), + rightBigCover: localStorage.getItem("dribs-right-big-cover") === "true", + setRightBigCover: () => { + if (DribbblishShared.rightBigCover) { + document.documentElement.classList.add("right-expanded-cover"); + } else { + document.documentElement.classList.remove("right-expanded-cover"); + } + } +}; + +DribbblishShared.configMenu.register(); +DribbblishShared.configMenu.addItem(new Spicetify.Menu.Item( + "Right expanded cover", + DribbblishShared.rightBigCover, + (self) => { + self.isEnabled = !self.isEnabled; + DribbblishShared.rightBigCover = self.isEnabled; + localStorage.setItem("dribs-right-big-cover", self.isEnabled); + DribbblishShared.setRightBigCover(); + } +)); +DribbblishShared.setRightBigCover(); + +function waitForElement(els, func, timeout = 100) { + const queries = els.map(el => document.querySelector(el)); + if (queries.every(a => a)) { + func(queries); + } else if (timeout > 0) { + setTimeout(waitForElement, 300, els, func, --timeout); + } +} + +waitForElement([ + `.main-rootlist-rootlistPlaylistsScrollNode ul[tabindex="0"]`, + `.main-rootlist-rootlistPlaylistsScrollNode ul[tabindex="0"] li` +], ([root, firstItem]) => { + const listElem = firstItem.parentElement; + root.classList.add("dribs-playlist-list"); + + /** Replace Playlist name with their pictures */ + function loadPlaylistImage() { + for (const item of listElem.children) { + let link = item.querySelector("a"); + if (!link) continue; + + let [_, app, uid ] = link.pathname.split("/"); + let uri; + if (app === "playlist") { + uri = Spicetify.URI.playlistV2URI(uid); + } else if (app === "folder") { + const base64 = localStorage.getItem("dribbblish:folder-image:" + uid); + let img = link.querySelector("img"); + if (!img) { + img = document.createElement("img"); + img.classList.add("playlist-picture"); + link.prepend(img); + } + img.src = base64 || "/images/tracklist-row-song-fallback.svg"; + continue; + } + + Spicetify.CosmosAsync.get( + `sp://core-playlist/v1/playlist/${uri.toURI()}/metadata`, + { policy: { picture: true } } + ).then(res => { + const meta = res.metadata; + let img = link.querySelector("img"); + if (!img) { + img = document.createElement("img"); + img.classList.add("playlist-picture"); + link.prepend(img); + } + img.src = meta.picture || "/images/tracklist-row-song-fallback.svg"; + }); + } + } + + DribbblishShared.loadPlaylistImage = loadPlaylistImage; + loadPlaylistImage(); + + new MutationObserver(loadPlaylistImage) + .observe(listElem, {childList: true}); +}); + +waitForElement([".Root__main-view"], ([mainView]) => { + const shadow = document.createElement("div"); + shadow.id = "dribbblish-back-shadow"; + mainView.prepend(shadow); +}); + +waitForElement([".main-rootlist-rootlistPlaylistsScrollNode"], (queries) => { + const fade = document.createElement("div"); + fade.id = "dribbblish-sidebar-fade-in"; + queries[0].append(fade); +}); + +waitForElement([ + ".Root__nav-bar .LayoutResizer__input, .Root__nav-bar .LayoutResizer__resize-bar input" +], ([resizer]) => { + const observer = new MutationObserver(updateVariable); + observer.observe(resizer, { attributes: true, attributeFilter: ["value"]}); + function updateVariable() { + let value = resizer.value; + if (value < 121) { + value = 72; + document.documentElement.classList.add("sidebar-hide-text"); + } else { + document.documentElement.classList.remove("sidebar-hide-text"); + } + document.documentElement.style.setProperty( + "--sidebar-width", value + "px"); + } + updateVariable(); +}); + +waitForElement([".Root__main-view .os-resize-observer-host"], ([resizeHost]) => { + const observer = new ResizeObserver(updateVariable); + observer.observe(resizeHost); + function updateVariable([ event ]) { + document.documentElement.style.setProperty( + "--main-view-width", event.contentRect.width + "px"); + document.documentElement.style.setProperty( + "--main-view-height", event.contentRect.height + "px"); + if (event.contentRect.width < 700) { + document.documentElement.classList.add("minimal-player"); + } else { + document.documentElement.classList.remove("minimal-player"); + } + if (event.contentRect.width < 550) { + document.documentElement.classList.add("extra-minimal-player"); + } else { + document.documentElement.classList.remove("extra-minimal-player"); + } + } +}); + +(function Dribbblish() { + const progBar = document.querySelector(".playback-bar"); + + if (!Spicetify.Player.origin || !progBar) { + setTimeout(Dribbblish, 300); + return; + } + + const tooltip = document.createElement("div"); + tooltip.className = "prog-tooltip"; + progBar.append(tooltip); + + const progKnob = progBar.querySelector(".progress-bar__slider"); + + Spicetify.Player.addEventListener("onprogress", ({ data: e }) => { + const offsetX = progKnob.offsetLeft + progKnob.offsetWidth / 2; + const maxWidth = progBar.offsetWidth; + const curWidth = Spicetify.Player.getProgressPercent() * maxWidth; + const ttWidth = tooltip.offsetWidth / 2; + if (curWidth < ttWidth) { + tooltip.style.left = String(offsetX) + "px"; + } else if (curWidth > maxWidth - ttWidth) { + tooltip.style.left = String(offsetX - ttWidth * 2) + "px"; + } else { + tooltip.style.left = String(offsetX - ttWidth) + "px"; + } + tooltip.innerText = Spicetify.Player.formatTime(e) + " / " + + Spicetify.Player.formatTime(Spicetify.Player.getDuration()); + }); + + const filePickerForm = document.createElement("form"); + filePickerForm.setAttribute("aria-hidden", true); + filePickerForm.innerHTML = ''; + document.body.appendChild(filePickerForm); + /** @type {HTMLInputElement} */ + const filePickerInput = filePickerForm.childNodes[0]; + filePickerInput.accept = [ + "image/jpeg", + "image/apng", + "image/avif", + "image/gif", + "image/png", + "image/svg+xml", + "image/webp" + ].join(","); + + filePickerInput.onchange = () => { + if (!filePickerInput.files.length) return; + + const file = filePickerInput.files[0]; + const reader = new FileReader; + reader.onload = (event) => { + const result = event.target.result; + const id = Spicetify.URI.from(filePickerInput.uri).id; + try { + localStorage.setItem( + "dribbblish:folder-image:" + id, + result + ); + } catch { + Spicetify.showNotification("File too large"); + } + DribbblishShared.loadPlaylistImage?.call(); + } + reader.readAsDataURL(file); + } + + new Spicetify.ContextMenu.Item("Remove folder image", + ([uri]) => { + const id = Spicetify.URI.from(uri).id; + localStorage.removeItem("dribbblish:folder-image:" + id); + DribbblishShared.loadPlaylistImage?.call(); + }, + ([uri]) => Spicetify.URI.isFolder(uri), + "x", + ).register(); + new Spicetify.ContextMenu.Item("Choose folder image", + ([uri]) => { + filePickerInput.uri = uri; + filePickerForm.reset(); + filePickerInput.click(); + }, + ([uri]) => Spicetify.URI.isFolder(uri), + "edit", + ).register(); +})(); diff --git a/screenshot.png b/screenshot.png index bd03ba5..e76d244 100644 Binary files a/screenshot.png and b/screenshot.png differ diff --git a/user.css b/user.css index ce68fad..01d01ac 100644 --- a/user.css +++ b/user.css @@ -1,1509 +1,861 @@ :root { - --bar-height: 70px; - --bar-cover-art-size: 40px; - --cover-border-radius: 8px; - --section-border-radius: 8px; - --sidebar-width: 85px; - --main-corner-radius: 15px; - --main-gap: 10px; - /* If you are using SpotifyNoControl.exe, set this variable to 0 */ - --os-windows-icon-dodge: 1; -} - -div#popover-container::before { - content: "You haven't installed 'dribbblish.js' extension. Please run follow instruction on theme README page."; - font-size: 30px; + --bar-height: 70px; + --bar-cover-art-size: 40px; + --main-gap: 10px; + --main-corner-radius: 10px; + --scrollbar-vertical-size: 8px; + --cover-border-radius: 8px; + --os-windows-icon-dodge: 0; } @font-face { font-family: "Google Sans Display"; - src: url("https://local_resource_host/fonts/GoogleSansDisplayRegular.woff2") format("woff2"); + src: url("glue-resources/fonts/GoogleSansDisplayRegular.woff2") format("woff2"); font-style: normal; font-weight: 400; } @font-face { font-family: "Google Sans Display"; - src: url("https://local_resource_host/fonts/GoogleSansDisplayMedium.woff2") format("woff2"); + src: url("glue-resources/fonts/GoogleSansDisplayMedium.woff2") format("woff2"); font-style: normal; font-weight: 500; } @font-face { font-family: "Roboto"; - src: url("https://local_resource_host/fonts/Roboto.woff2") format("woff2"); + src: url("glue-resources/fonts/Roboto.woff2") format("woff2"); font-style: normal; font-weight: 400; } @font-face { font-family: "Roboto"; - src: url("https://local_resource_host/fonts/RobotoMedium.woff2") format("woff2"); + src: url("glue-resources/fonts/RobotoMedium.woff2") format("woff2"); font-style: normal; font-weight: 500; } body { - --glue-font-family: "Google Sans Display", "spotify-circular", "Noto Sans CJK JP Bold", "spotify-circular-cyrillic", "spotify-circular-arabic", "spotify-circular-hebrew", "Helvetica Neue", Helvetica, Arial, "Hiragino Kaku Gothic Pro", "Meiryo", "MS Gothic", sans-serif; - --info-font-family: "Roboto", "spotify-circular", "Noto Sans CJK JP Thin", "spotify-circular-cyrillic", "spotify-circular-arabic", "spotify-circular-hebrew", "Helvetica Neue", Helvetica, Arial, "Hiragino Kaku Gothic Pro", "Meiryo", "MS Gothic", sans-serif; - letter-spacing: 0; -} - -/*Round corner cover image*/ - -.card-image, -.card-placeholder-wrapper, -.card-image-content-wrapper, -.card-image-wrapper, -.Card .Card__image, -.Card .Card__image-wrapper { - border-radius: var(--cover-border-radius) !important; - overflow: hidden !important; -} - -/*Hide some annoying elements like profile name and pic, upgrade button and device connect bar at bottom */ - -.profile.content-top-bar__profile-link, -.upgrade-button, -.view-player .remote-playback-bar { - display: none !important; -} - -/*Thinner scrollbar*/ - -::-webkit-scrollbar { - height: 6px !important; - width: 6px !important; - background-color: transparent; -} - -::-webkit-scrollbar-track { - background-color: transparent !important; -} - -/*Round corner scrollbar*/ - -::-webkit-scrollbar-thumb { - border-radius: 3px !important; -} - -/*Hide top and bottom buttons of scrollbar. Who uses those, lol*/ - -::-webkit-scrollbar-button { - display: none !important; -} - -/*Hide cover image overlay*/ - -.card-overlay, -.Card__overlay { - visibility: visible; - opacity: 0; - background: linear-gradient(transparent, rgba(var(--modspotify_rgb_cover_overlay_and_shadow), 0.5)); - border-radius: var(--cover-border-radius) !important; - transition: opacity cubic-bezier(0.175, 0.885, 0.32, 1.275) 0.4s; -} - -.card .card-button-add, -.card .card-button-play, -.card .card-button-more { - visibility: visible; - opacity: 0; - transition: opacity cubic-bezier(0.175, 0.885, 0.32, 1.275) 0.4s; -} - -.card.playing .card-button-play, -.playing .card .card-button-play { - opacity: 1 !important; -} - -.Card__image-hit-area:hover .Card__add-button, -.Card__image-hit-area:hover .Card__more-button, -.Card__image-hit-area:hover .Card__overlay, -.Card__image-hit-area:hover .Card__play-button { - opacity: 1; -} - -.card-image-hit-area:hover .card-overlay, -.card-image-hit-area:hover .card-button-add, -.card-image-hit-area:hover .card-button-play, -.card-image-hit-area:hover .card-button-more { - opacity: 1; -} - -.glue-page-header__content .glue-page-header__image-inner { - border-radius: var(--cover-border-radius); - box-shadow: unset !important; -} - -.glue-page-header__full-description-overlay { - box-shadow: unset !important; -} - -.card-placeholder-wrapper { - background: transparent !important; -} - -/*Spice up search input background*/ - -.SearchInput { - color: var(--modspotify_main_fg); -} - -.SearchInput__input { - color: var(--modspotify_secondary_fg); - background-color: transparent; - padding-left: 34px; - border-radius: 0; - border-bottom: 0; -} - -/* Remove gradient background */ - -.glue-page-header__background-color { - background-image: none !important; - background: var(--modspotify_main_bg); -} - -.Carousel__grid-wrapper::after { - border: 2px solid var(--modspotify_scrollbar_fg_and_selected_row_bg); - border-radius: var(--section-border-radius); -} - -.GlueSectionDivider, -.section-divider { - padding: 48px 0 14px; -} - -.section-divider>* { - color: var(--modspotify_secondary_fg); -} - -.card-info-subtitle-metadata, -.card-info-subtitle-description, -.Card__info-subtitle-description, -.Card__info-subtitle-metadata { - letter-spacing: 0; - font-size: 12px; -} - -.GlueSectionDivider__description { - display: none; -} - -.card-info-title a, -.card-horizontal .card-info-title span, -.Card__info-title a { - letter-spacing: 0; - font-weight: 500; - font-size: 15px; - color: var(--modspotify_secondary_fg); -} - -.tracklist-station-container::after { - background: transparent !important; -} - -.GlueHeader__background-overlay { - background: var(--modspotify_main_bg) !important; -} - -/* Move navigation buttons and search field to the right and down */ - -.browser-navigation-top-bar { - margin-top: 15px !important; - margin-left: 8px; -} - -.SearchInput__input, -.SearchInput__searchIcon, -.SearchInput__clearButton { - margin-top: 15px !important; -} - -.content-top-bar__profile-menu-button { - margin-top: 15px !important; -} - -.body-container--windows:not(.with-buddy-list):not(.messagebar) .content-top-bar__profile { - margin-right: calc(var(--os-windows-icon-dodge) * 110px) !important; - margin-top: calc(var(--os-windows-icon-dodge) * -5px); -} - -/* Spice up Fullscreen mode */ - -#view-player .album-art .album-art__image { - border-radius: 30px !important; - box-shadow: 0 10px 70px rgba(var(--modspotify_rgb_cover_overlay_and_shadow), .5) !important; -} - -#view-player .album-art .album-art__image .card-image-content-wrapper, -#view-player .album-art .album-art__image .card-image-content-wrapper .card-image { - border-radius: 30px !important; -} - -#video-player .album-art__foreground { - flex-direction: row; - text-align: left; -} - -#video-player .album-art__background { - background-color: initial; -} - -#video-player .album-art__track-details { - padding-left: 50px; - line-height: initial; - max-width: 50%; -} - -#video-player .album-art__track-title { - font-size: 84px; - margin-top: 0; - line-height: initial; - transition: color cubic-bezier(0.075, 0.82, 0.165, 1) 1s; -} - -#video-player .album-art__artist-name { - font-size: 54px; - margin-top: 0; - line-height: initial; - transition: color cubic-bezier(0.075, 0.82, 0.165, 1) 1s; -} - -/* Remove section divider */ - -.section-divider { - border-bottom: 0 !important; + --glue-font-family: "Google Sans Display","Roboto",spotify-circular,spotify-circular-cyrillic,spotify-circular-arabic,spotify-circular-hebrew,Helvetica Neue,helvetica,arial,Hiragino Kaku Gothic Pro,Meiryo,MS Gothic,sans-serif; + --info-font-family: "Roboto",spotify-circular,spotify-circular-cyrillic,spotify-circular-arabic,spotify-circular-hebrew,Helvetica Neue,helvetica,arial,Hiragino Kaku Gothic Pro,Meiryo,MS Gothic,sans-serif; + font-family: var(--glue-font-family); + letter-spacing: normal; } -/* Adjust Position of border active tab in Nav bar at top */ - -.nav.navbar-nav li { - margin: 0; +.main-type-mesto, +.main-type-mestoBold, +.main-type-ballad, +.main-type-balladBold, +.main-type-canon { + font-family: var(--info-font-family); + letter-spacing: normal; } -.nav.navbar-nav a { - overflow: visible !important; - padding: 0; - margin-right: 64px; - color: var(--modspotify_secondary_fg); - text-transform: uppercase; +.main-type-ballad { font-weight: 500; - font-size: 16px; - letter-spacing: 0; -} - -.nav>li.active>a { - color: var(--modspotify_secondary_fg); -} - -.nav.navbar-nav a::after { - bottom: 0px; - width: 12px; - height: 4px; - border-radius: 4px; - z-index: -1; - background-color: transparent; - transition: 0.2s ease-in; - transition-property: width, background-color; -} - -.nav.navbar-nav li.active a::after { - background-color: var(--modspotify_main_fg); } -.nav.navbar-nav a:focus:not(.button):active::after { - background-color: var(--modspotify_main_fg); - width: 100%; -} - -/* Notification bar */ - -#content-wrapper #view-message-bar { - position: absolute !important; - width: calc(100% - 160px) !important; - margin-left: 80px !important; - border-radius: 0 0 10px 10px !important; +.lyrics-lyricsContainer-LyricsContainer { + --lyrics-color-background: var(--spice-main) !important; + --lyrics-color-inactive: rgba(var(--spice-main), 0.9) !important; } -.alert, -.alert a, -.alert .close { - color: var(--modspotify_secondary_fg) !important; +.lyrics-lyricsContainer-LyricsLine { + font-family: var(--glue-font-family); + letter-spacing: -.03em !important; } -/* Small cover Big cover mechanism */ - -.now-playing.cover-size-transition.active.image-expanded #now-playing-image-small { +.main-rootlist-rootlistDivider { display: none; } -.now-playing.cover-size-transition.active.image-expanded .cover-image-link-wrapper { - flex: 0 1 10px; -} - -#view-now-playing a.image { - overflow: visible !important; -} - -/* Profile arrow in top left */ - -.content-top-bar__profile-menu-button .dropdown { - position: fixed !important; - top: 10px !important; - -webkit-app-region: no-drag !important; +input { + background-color: unset !important; + border-bottom: solid 1px var(--spice-text) !important; + border-radius: 0 !important; + padding: 6px 10px 6px 48px; + color: var(--spice-text) !important; } -/* [WINDOWS] Change Profile menu horizontal position */ - -body.body-container--windows .content-top-bar__profile-menu-button .dropdown { - right: calc(var(--os-windows-icon-dodge) * 170px + 20px) !important; +.x-searchInput-searchInputSearchIcon, +.x-searchInput-searchInputClearButton { + color: var(--spice-text) !important; } -body:not(.body-container--windows) .content-top-bar__profile-menu-button .dropdown { - right: 20px !important; +.main-home-homeHeader, +.x-entityHeader-overlay, +.x-actionBarBackground-background, +.main-actionBarBackground-background, +.main-entityHeader-overlay, +.main-entityHeader-backgroundColor +{ + background-color: unset !important; + background-image: unset !important; } -/* Small tooltip */ - -#tooltip, -.Tooltip { - box-shadow: 0 0 4px rgba(0, 0, 0, 0.2) !important; - border-radius: 4px !important; - background-color: var(--modspotify_secondary_fg); - color: var(--modspotify_main_bg); - padding: 10px 10px; +.main-playButton-PlayButton.main-playButton-primary { + color: white; } -.tooltip-arrow-top, -.tooltip-arrow-bottom, -.Tooltip__arrow { - display: none !important; +.connect-title, .connect-header { + display: none; } -/* Home page */ - -.tracklist-podcast .tl-progress .row-progress__bar { - background-color: var(--modspotify_main_fg); +.connect-device-list { + margin: 0px -5px; } -.Header__background-color { +/* Remove Topbar background colour */ +.main-topBar-background { background-color: unset !important; - background-image: unset; } - -.Header__background-overlay { - background: unset; +.main-topBar-overlay { + background-color: var(--spice-main); } -/* Button */ - -.Button, -.button { - font-weight: 500; - text-transform: capitalize; - font-size: 14px; - letter-spacing: 0; -} - -.Button.Button--style-green, -.Button.Button--style-stroke, -.Button.Button--style-icon-stroke, -.Button.Button--style-icon-background, -.button.button-green, -.button.button-white, -.button.button-with-stroke, -.button.button-icon-with-stroke { - border-radius: 20px; - border: 0; - background-color: var(--modspotify_indicator_fg_and_button_bg); - color: var(--modspotify_secondary_fg) !important; - box-shadow: 0 1px 5px 0 rgba(0, 0, 0, 0.06), 0 1px 2px 0 rgba(0, 0, 0, 0.16) !important; -} - -.Button.Button--style-icon-stroke, -.Button.Button--style-icon-background { - border-radius: 50%; +.main-entityHeader-shadow, +.main-contextMenu-menu, +.connect-device-list-container { + box-shadow: 0 4px 20px #21212130; } -.Button--style-green:hover, -.Button--style-stroke:hover, -.Button--style-icon-stroke:hover, -.Button--style-icon-background:hover, -.button.button-green:hover, -.button.button-white:hover, -.button.button-with-stroke:hover, -.Button--style-icon-background:hover, -.button.button-icon-with-stroke:hover { - transform: none !important; - background-color: var(--modspotify_indicator_fg_and_button_bg) !important; - box-shadow: 0 1px 8px 0 rgba(0, 0, 0, 0.1), 0 1px 3px 0 rgba(0, 0, 0, 0.26) !important; +.main-trackList-playingIcon { + filter: grayscale(1); } -.Button.Button--style-stroke::after, -.Button.Button--style-icon-stroke::after, -.Button.Button--style-icon-background::after, -.button.button-with-stroke::after, -.button.button-icon-with-stroke::after { - box-shadow: none !important; +span.artist-artistVerifiedBadge-badge svg > path:first-of-type { + fill: var(--spice-button); } - -.glue-page-header__title-text, -.Header__title-text { - color: var(--modspotify_secondary_fg) !important; +span.artist-artistVerifiedBadge-badge svg > path:last-of-type { + fill: var(--spice-text); } -.glue-page-header .glue-page-header__content-inner .glue-page-header__button { - margin-top: 40px; +/* Full window artist background */ +.main-entityHeader-background.main-entityHeader-gradient { + opacity: 0.3; } -.glue-page-header__content-inner, -.glue-page-header__data, -.glue-page-header__title, -.Header__content-inner, -.Header__data, -.Header__title, -.Header__title-text, -.Header__title-text-inner { - overflow: visible !important; +.main-entityHeader-container.main-entityHeader-withBackgroundImage, +.main-entityHeader-background, +.main-entityHeader-background.main-entityHeader-overlay:after { + height: 100vh; } -/* Context menus */ - -.context-menu, -.Menu, -.dropdown-menu, -.dropdown-interior-menu { - box-shadow: 0 8px 10px 1px rgba(0, 0, 0, 0.14), 0 3px 14px 2px rgba(0, 0, 0, 0.12), 0 5px 5px -3px rgba(0, 0, 0, 0.1); - border-radius: 8px !important; - padding: 0; - border: 1px solid rgba(var(--modspotify_rgb_sidebar_indicator_and_hover_button_bg), 0.2); - background-color: rgba(var(--modspotify_rgb_sidebar_and_player_bg), 0.85); - backdrop-filter: blur(25px); +.main-entityHeader-withBackgroundImage .main-entityHeader-headerText { + justify-content: center; } -.context-menu .item, -.Menu .MenuItem { - padding: 0 30px; - font-size: 14px !important; - line-height: 40px !important; - font-family: var(--info-font-family); +.main-entityHeader-container.main-entityHeader-nonWrapped.main-entityHeader-withBackgroundImage { + padding-left: 9%; } -.context-menu .item.parent:after { - top: 0; +.main-entityHeader-background.main-entityHeader-overlay:after { + background-image: linear-gradient(transparent,transparent),linear-gradient(var(--spice-main), var(--spice-main)); } -.context-menu .item.with-icon-svg:before { - top: 0; - height: 40px; - background-position: center; +.artist-artistOverview-overview .main-entityHeader-withBackgroundImage h1 { + font-size: 120px !important; + line-height: 120px !important; } -.context-menu .sep { - margin: 0 0; - height: 0; +/** Hightlight selected playlist */ +.main-rootlist-rootlistItemLink.main-rootlist-rootlistItemLinkActive { + background: var(--spice-button); + border-radius: 4px; } -.context-menu .item.hover:not(.disabled), -.Menu .MenuItem.selected, -.dropdown-interior-menu>li.selected, -.dropdown-interior-menu>li>a:focus, -.dropdown-menu>li.selected, -.dropdown-menu>li>a:focus, -.dropdown-submenu:focus>a, -.dropdown-menu>.active>a, -.dropdown-menu>.active.selected, -.dropdown-menu>.active>a:focus, -.dropdown-interior-menu>.active>a, -.dropdown-interior-menu>.active.selected, -.dropdown-interior-menu>.active>a:focus { - background-color: rgba(var(--modspotify_rgb_sidebar_indicator_and_hover_button_bg), 0.2); +.main-navBar-navBarLinkActive { + background: var(--spice-button); } -.context-menu .item:first-child, -.Menu .MenuItem:first-child { - border-radius: 8px 8px 0 0; +.main-contextMenu-menu { + background-color: var(--spice-button); } -.context-menu .item:last-child, -.Menu .MenuItem:last-child { - border-radius: 0 0 8px 8px; +.main-contextMenu-menuHeading, +.main-contextMenu-menuItemButton, +.main-contextMenu-menuItemButton:not(.main-contextMenu-disabled):focus, +.main-contextMenu-menuItemButton:not(.main-contextMenu-disabled):hover { + color: var(--spice-main); } -.Menu__title { - letter-spacing: 0; - font-weight: 500; - text-align: left; +.main-playPauseButton-button { + background-color: var(--spice-button); + color: white; } -.navbar-overflow .selected a { - background-color: transparent; +/** Queue page header */ +.queue-queue-title, +.queue-playHistory-title { + color: var(--spice-text) !important; } -.PopoverMenu__arrow { - display: none; +/** Artist page */ +.artist-artistOverview-heading { + color: var(--spice-text) !important; } - -#menu-wrapper ::-webkit-scrollbar { - display: none; +.artist-artistAbout-content .artist-artistAbout-cityBlock div, +.artist-artistAbout-content .artist-artistAbout-stats div { + color: var(--spice-text) !important; } - -.glue-page-header__label span, -.Header__label span { - color: var(--modspotify_secondary_fg); - padding: 5px 0; +.artist-artistAbout-content div { + color: var(--spice-text) !important; } -.glue-page-header__label .header-verified-check { +/** Cards */ +.main-cardImage-imageWrapper { background-color: transparent; -} - -body.remotebar .view-player .player-bar-wrapper { - height: 100%; -} - -.Header__image-inner { box-shadow: unset; + -webkit-box-shadow: unset; } -/* Change info font */ - -.Card__info-wrapper, -.card-info-wrapper { - font-family: var(--info-font-family); - margin-top: 20px; -} - -/* Section title font color */ - -.GlueSectionDivider__title, -.section-divider-title { - color: var(--modspotify_secondary_fg); - font-family: var(--glue-font-family); - font-weight: 500; +.main-cardImage-imagePlaceholder, .main-cardImage-image { + border-radius: var(--cover-border-radius); } -.section-divider-description { - padding-top: 6px; +.main-rootlist-rootlistDivider { + background-color: unset; } -/* Sidebar */ -.LeftSidebar { - width: var(--sidebar-width); +.main-nowPlayingBar-nowPlayingBar { + height: var(--bar-height); } -.LeftSidebar .SidebarListItem { - font-weight: 400; -} - -.LeftSidebar .SidebarListItem.SidebarListItem--is-active, -.RootlistItem--is-active { - font-weight: 500; +.Root__top-bar { + border-radius: var(--main-corner-radius) var(--main-corner-radius) 0 0; } -.LeftSidebar .SidebarListItem, -.RootlistItem { - padding-top: 12px; - padding-bottom: 12px; +.main-topBar-background { + border-radius: var(--main-corner-radius) var(--main-corner-radius) 0 0; } -.scrollbar-style-visible-linux .RootlistItem, -.scrollbar-style-visible-mac .RootlistItem, -.scrollbar-style-visible-windows .RootlistItem { - padding-right: var(--left-sidebar-padding-right); - padding-left: var(--left-sidebar-padding-left); +.Root__main-view { + background-color: var(--spice-main); + border-radius: var(--main-corner-radius) var(--main-corner-radius) 0 0; + overflow: hidden; } -.SidebarListItem--is-active:after, -.RootlistItem--is-active:before { - background-color: var(--modspotify_pressing_button_fg); - opacity: 0.2; - bottom: unset; - height: 50px; - width: 50px; - border-radius: 10px; - left: 17px; - z-index: -1; +.main-buddyFeed-buddyFeed { + box-shadow: unset; + -webkit-box-shadow: unset; + z-index: 0; } -.LeftSidebar__section .SidebarListItem--is-active:after { - top: 6px; +.main-buddyFeed-headerTitle, +.main-buddyFeed-activityMetadata .main-buddyFeed-username a { + color: var(--spice-sidebar-text); } -.LeftSidebar__scroll-section .SidebarListItem--is-active:after { - top: 3px; +.main-buddyFeed-activityMetadata .main-buddyFeed-artistAndTrackName a, +.main-buddyFeed-activityMetadata .main-buddyFeed-playbackContextLink, +.main-buddyFeed-activityMetadata .main-buddyFeed-timestamp { + color: rgba(var(--spice-rgb-sidebar-text), 0.8); } -.body-container--mac .sidebar-top-items__drag-area, -.body-container--windows .sidebar-top-items__drag-area { - height: 0; +.main-buddyFeed-buddyFeedRoot .main-avatar-avatar, +.main-buddyFeed-buddyFeedRoot .main-buddyFeed-overlay { + width: 32px !important; + height: 32px !important; } -.body-container--windows .LeftSidebar { - margin-top: calc(var(--os-windows-icon-dodge) * 30px); +.main-avatar-avatar.main-avatar-withBadge:after { + box-shadow: 0 0 0 2px var(--spice-sidebar); + background-color: var(--spice-notification); + right: 0; } -.RootlistItem--is-active:before { - top: 3px; +.Root__now-playing-bar { + border-radius: 0 0 var(--main-corner-radius) var(--main-corner-radius); + background-color: unset; } -.SidebarListItem__inner { - align-items: center; +.main-nowPlayingBar-container { + border-radius: 0 0 var(--main-corner-radius) var(--main-corner-radius); + background-color: unset; + background: radial-gradient(ellipse at right 50% bottom -80px, rgba(var(--spice-rgb-sidebar), 0.55), var(--spice-main) 60%); + border-top: 0; + min-width: 518px; } -.SidebarList__title { - display: none; +.main-connectBar-connectBar { + border-radius: 0 0 var(--main-corner-radius) var(--main-corner-radius); + border: 2px solid var(--spice-main); + border-top: 0; + color: var(--spice-sidebar-text); } -.SidebarListItem__play-button, -.RootlistItemPlaylist__play-button { - z-index: 3; - position: absolute; - margin-left: 15px; - margin-top: 15px; +.Root__nav-bar { + height: 100%; + z-index: 1; + width: var(--sidebar-width) !important; } -.SidebarListItem__play-button .Button { - width: 32px; - height: 32px; +.main-buddyFeed-buddyFeedRoot { + height: 100%; } -/* Mood card */ - -.gc-image-container, -.gc-image { - border-radius: var(--cover-border-radius) !important; +.main-buddyFeed-buddyFeedRoot .os-content { + padding-top: 0 !important; } -.gc-label-text-wrapper { - overflow: unset; +html, +.Root__nav-bar, +.main-buddyFeed-buddyFeed { + background-color: var(--spice-sidebar) !important; } -.gc-label-text { - font-size: 14px; - font-family: var(--info-font-family); - font-weight: 400; - color: var(--modspotify_main_bg); - border-radius: 4px; - background-color: var(--modspotify_secondary_fg); - padding: 4px 8px; +html { + background-position: center; + background-repeat: no-repeat; } -.genre-card:hover .gc-label-text { - border: 0; +.Root__nav-bar .link-subtle, +.main-rootlist-rootlistItemLink:link, +.main-rootlist-rootlistItemLink:visited, +.main-rootlist-rootlistContent span, +.main-navBar-entryPoints span { + color: var(--spice-sidebar-text) } -/* Playlist item */ - -.tl-cell, -.TableCell { - font-family: var(--info-font-family); - font-weight: 400; - height: 50px; +.main-navBar-navBarItem svg { + width: 24px !important; + height: 24px !important; } -.tl-cell:not(.tl-number), -.tl-cell a:link, -.tl-highlight, -.TableCell:not(.tl-number), -.TableCell a:link { - color: var(--modspotify_secondary_fg); +.main-navBar-navBarItem { + padding: 0 8px; } -.tl-row.selected .tl-cell, -.tl-row.selected:hover .tl-cell, -.TableRow.TableRow--is-selected .TableCell { - background-color: rgba(var(--modspotify_rgb_sidebar_indicator_and_hover_button_bg), 0.2) !important; +#spicetify-show-list >* { + padding: 0 8px; } -.tl-row .tl-cell:first-child, -.TableRow .TableCell:first-child { - border-radius: 4px 0 0 4px; +.main-rootlist-statusIcons { + color: var(--spice-sidebar-text); + padding-right: 16px; } -.tl-row .tl-cell:last-child, -.TableRow .TableCell:last-child { - border-radius: 0 4px 4px 0; +.main-rootlist-statusIcons .main-playButton-button { + color: var(--spice-sidebar-text); } -@media screen and (max-width: 950px) { - .tl-cell.tl-more { - border-radius: 0 4px 4px 0; - } +.main-rootlist-expandArrow { + position: absolute; + top: 20px; + right: 12px; + width: 16px; + height: 16px; + color: var(--spice-sidebar-text) !important; + background-color: var(--spice-button); + border-radius: 50%; + box-shadow: 0 0 0 2px var(--spice-sidebar); + opacity: 0; } -.tl-explicit .label, -.tl-premium .label { - color: var(--modspotify_slider_bg); - border: 1px solid var(--modspotify_slider_bg); +li.GlueDropTarget:hover .main-rootlist-expandArrow { + opacity: 1; } -.tl-row.current .tl-cell:not(.tl-number), -.tl-row.current .tl-cell a:link, -.tl-row.current .tl-highlight, -.TableCellSong--track-is-playing .TableCellSong__featuredArtist, -.TableCellSong--track-is-playing .TableCellSong__text-truncator, -.TableCellSong--track-is-playing .TableCellSong__track-name { - color: var(--modspotify_main_fg); +html:not(.sidebar-hide-text) .main-rootlist-expandArrow { + opacity: 1; } -.TableCell { - border-top: 0; +.main-rootlist-expandArrow::before { + font-size: 10px; + padding-bottom: 3px; } -.tl-attention-highlight { - height: 50px; +html.sidebar-hide-text .main-rootlist-expandArrow { + right: 4px; } -/* Sort element: color, remove label */ - -.section-divider .GlueDropdown, -select { - color: var(--modspotify_secondary_fg); - font-weight: 400; - border-radius: 4px; - padding: 0 5px; - margin-left: 0; +html.sidebar-hide-text .main-navBar-navBarItem span, +html.sidebar-hide-text .main-rootlist-rootlistContent span, +html.sidebar-hide-text .main-rootlist-rootlistItem span, +html.sidebar-hide-text .main-rootlist-statusIcons, +html.sidebar-hide-text .GlueDropTarget span { + display: none; } -[data-ta-id="sorting-wrapper"] { - float: right !important; +.main-rootlist-rootlist { + margin-top: 0; } -[data-ta-id="sorting-wrapper"] label { +.Root__nav-bar .os-scrollbar-vertical, +.main-buddyFeed-buddyFeedRoot .os-scrollbar-vertical { display: none; } -/* Search bar in app */ - -.h-search { - border-bottom: 1px solid var(--modspotify_main_fg); - border-radius: 0; +/** */ +.main-topBar-historyButtons .main-topBar-button { + background-color: unset; + width: 24px; + height: 24px; } -.focus .h-search, -.h-search:focus { - background: none; +.main-topBar-historyButtons svg { + color: var(--spice-button); + fill: var(--spice-button); } -/* Card buttons */ - -.Card__play-button, -.card .card-button-play { - left: unset !important; - top: unset !important; - right: 10px; - bottom: 10px; - width: 45px; - height: 45px; - border-radius: 50%; -} - -.card .card-button-play.button-play::before, -.card .button-play.playing::before { - line-height: 45px !important; - font-size: 20px !important; - padding-left: 13px !important; +.playback-bar__progress-time, +.main-playbackBarRemainingTime-container { + display: none; } -.card-button-more { - left: unset !important; - top: 10px !important; - right: 0; - transform: none !important; - margin: 0; +.playback-bar { + position: absolute; + width: var(--main-view-width); + left: var(--sidebar-width); + bottom: calc(var(--main-gap) + var(--bar-height) - 12px / 2); } -.card-button-more::before { - padding-left: 0; - text-align: center; - transform: rotate(90deg); +.Root.is-connectBarVisible .playback-bar { + bottom: calc(var(--main-gap) + var(--bar-height) + 24px - 12px / 2); } -.card-button-add { - left: unset !important; - top: unset !important; - bottom: 15px; - right: 60px; - transform: none !important; - margin: 0; +.main-nowPlayingWidget-coverArt .cover-art { + width: var(--bar-cover-art-size) !important; + height: var(--bar-cover-art-size) !important; } -.card-button-add::before { - padding-left: 0; - text-align: left; +.player-controls__buttons { + margin-bottom: 0; + width: 192px; } -.Card__play-button { - left: unset !important; - top: unset !important; - right: 10px; - bottom: 10px; - transform: none !important; +.progress-bar { + --progress-bar-height: 2px; + --fg-color: var(--spice-button); + --bg-color: rgba(var(--spice-rgb-text), .2); } -.Card__play-button .Button.Button--style-icon-background, -.Card__play-button .Button.Button--style-icon-stroke { - width: 45px !important; - height: 45px !important; +.minimal-player .player-controls__buttons { + width: 120px; + gap: 0px; } -.Card__play-button .Button.Button--style-icon-stroke:before, -.Card__play-button .Button.Button--style-icon-background:before { - line-height: 45px !important; - font-size: 20px !important; +.minimal-player .player-controls__left, +.minimal-player .player-controls__right { + --button-size: 16px !important; + gap: 0px; } -.Card__add-button { - left: unset !important; - top: unset !important; - bottom: 10px; - right: 60px; - transform: none !important; +.minimal-player .volume-bar { + flex: 0 1 70px; } - -.Card__more-button { - left: unset !important; - top: 0 !important; - right: 0; - transform: rotate(90deg); +.extra-minimal-player .player-controls__buttons { + width: 64px; } - -/* Concert page */ - -.concert-title span { - color: var(--modspotify_secondary_fg) !important; +.extra-minimal-player .main-shuffleButton-button, +.extra-minimal-player .main-repeatButton-button, +.extra-minimal-player .ExtraControls__connect-device-picker, +.extra-minimal-player .volume-bar .progress-bar-wrapper { + display: none; } - -.location__container .location__name { - letter-spacing: 0; - font-weight: 500; - color: var(--modspotify_secondary_fg); +.extra-minimal-player .volume-bar { + flex: 0 0 32px; } -#concerts h1 { +.main-trackInfo-name { font-weight: 500; - color: var(--modspotify_secondary_fg); -} - -/* Bio page */ - -.biography__container { - margin-top: 30px; - padding: 16px; - border-radius: var(--section-border-radius); - border: 2px solid var(--modspotify_scrollbar_fg_and_selected_row_bg); -} - -.biography__container .section-divider { - padding: 0; } -.rankings__container { - margin-top: 30px; - padding: 16px; - border-radius: var(--section-border-radius); - border: 2px solid var(--modspotify_scrollbar_fg_and_selected_row_bg); +.main-topBar-topbarContent .main-playButton-PlayButton { + --size: 35px !important; } -.rankings__container h4 { - margin: 0; - padding: 0; - letter-spacing: 0 !important; - color: var(--modspotify_secondary_fg) !important; - font-family: var(--glue-font-family) !important; - font-weight: 500 !important; +.main-entityHeader-image { + border-radius: 5px; } -.rankings__topcities.title { - padding: 32px 0 16px; +.main-entityHeader-metaDataText, +.main-duration-container { + color: var(--spice-subtext); } -.section-divider.section-divider-borderless { - margin-bottom: 16px; +/** Sidebar */ +.main-rootlist-rootlist .os-content { + padding: 0 0 8px 0 !important; } -.section-divider.section-divider-borderless h2 { - color: var(--modspotify_secondary_fg) !important; - font-family: var(--glue-font-family); - font-weight: 500; - letter-spacing: 0; +.main-rootlist-rootlistDividerContainer { + display: none; } -.biography__container .biography__image-carousel { - border-radius: var(--cover-border-radius); - overflow: hidden; - margin-bottom: 32px; +.main-rootlist-rootlistItem a { + align-items: center; + border-radius: 4px; + display: flex; + height: 56px; + padding: 0 12px; } -.biography__container .bio-show { - margin-left: 0; +img.playlist-picture { + width: 32px; + height: 32px; + flex: 0 0 32px; + background-size: cover; + background-position: center; + border-radius: 50%; } -.biography__container .listening { - margin-bottom: 0; +.main-rootlist-rootlistItem a span { + margin-left: 24px; } -.rankings__info { - padding-top: 0; - margin-bottom: 32px; +.main-rootlist-rootlistItem { + padding-left: calc(var(--indentation)*var(--left-sidebar-item-indentation-width)); + padding-right: 0; + transition: padding-left .5s ease; } -/* Toggle button */ - -.slider { - background: var(--modspotify_secondary_fg); - border: 0; - height: 18px; - border-radius: 9px; +html.sidebar-hide-text .main-rootlist-rootlistItem { + padding: 0; } -.slider.enabled { - background: var(--modspotify_sidebar_indicator_and_hover_button_bg); +.main-rootlist-dropIndicator { + background: var(--spice-selected-row); + height: 2px; } -.slider.enabled div { - background: var(--modspotify_main_fg); +.main-navBar-navBarLink { + height: 56px; } -.slider div { - transition: all 0.3s ease; - background: var(--modspotify_secondary_fg); - box-shadow: 0 1px 3px rgba(0, 0, 0, 0.4); - border-radius: 11px; +.main-navBar-navBarLink .icon, +.main-collectionLinkButton-icon, +.main-createPlaylistButton-icon, +.main-collectionLinkButton-icon { + margin-right: 24px; } -/* Friend list */ - -.buddy-list-title h3 { - font-weight: 500; - color: var(--modspotify_secondary_fg); +li.GlueDropTarget { + padding: 0 8px; } -.buddy-list-title { - padding-top: 16px; +/** OS-specific window controls dodge */ +.spotify__os--is-windows .main-navBar-navBar { + padding-top: calc(var(--os-windows-icon-dodge) * 24px); } -.friend .user .name { - font-weight: 500; - font-family: var(--info-font-family); - color: var(--modspotify_secondary_fg); +.spotify__container--is-desktop:not(.fullscreen).spotify__os--is-windows .main-navBar-entryPoints { + padding-top: calc(var(--os-windows-icon-dodge) * 12px + 12px); } -.friend .context a, -.friend .song-artist a, -.friend .song-title a { - font-weight: 400; - font-family: var(--info-font-family); - color: var(--modspotify_secondary_fg); +.spotify__os--is-windows .main-buddyFeed-header { + padding-top: calc(var(--os-windows-icon-dodge) * 32px); } -.buddy-card .card .button { - right: 0; - bottom: 0; +.spotify__container--is-desktop.spotify__os--is-windows[dir=ltr] .main-topBar-container { + padding-right: calc(var(--os-windows-icon-dodge) * 135px + 32px); } -.buddy-card .card .button:before { - font-size: 16px !important; - line-height: 40px !important; +.main-topBar-container { + max-width: unset; } -/*Force player bar to has fixed height*/ - -.view-player { - height: var(--bar-height) !important; - border-top: 0; - padding: 0 15px; - width: calc(100% - var(--sidebar-width) - var(--main-gap)); +/** Custom elements */ +#dribbblish-sidebar-fade-in { position: absolute; - bottom: var(--main-gap); - left: var(--sidebar-width); - border-radius: 0 0 var(--main-corner-radius) var(--main-corner-radius); - z-index: 2; - /* Glowing effect */ - background: radial-gradient(ellipse at right 50% bottom -80px, rgba(var(--modspotify_rgb_main_bg), 0.85), var(--modspotify_main_bg) 70%); -} - -body.video-full-screen .view-player { - left: 0; + bottom: 0; width: 100%; + height: 15%; + background: linear-gradient(to top, var(--spice-sidebar) 10%, transparent); + z-index: 3; + pointer-events: none; } - -/* Player Progress bar */ - -.view-player .now-playing { - overflow: unset; -} - -.view-player .now-playing-container .button-add { - color: var(--modspotify_main_fg) !important; -} - -.progress-container .progress-bar, -.progress-container .inner { - top: 0 !important; - margin-top: 0 !important; - height: 2px; -} - -.progress-container .progress-bar-wrapper { - top: 4px !important; - height: 6px; -} - -.progress-container .progress-bar-wrapper:hover .inner, -.progress-container .progress-bar-wrapper:hover .progress-bar, -.progress-container .progress-bar-wrapper.active .inner, -.progress-container .progress-bar-wrapper.active .progress-bar { - height: 6px; +.dribs-playlist-list { + padding-bottom: 56px; } - -.view-player .player-controls-container .progress-container { +#dribbblish-back-shadow { position: fixed; - width: calc(100% - var(--sidebar-width) - var(--main-gap)); - bottom: calc(var(--bar-height) + var(--main-gap)); - margin: 0; - left: var(--sidebar-width); + width: var(--main-view-width); + height: calc(var(--main-view-height) + var(--bar-height)); + box-shadow: 0 0 10px 3px #0000003b; + border-radius: var(--main-corner-radius); + z-index: 2; + pointer-events: none; } -body.video-full-screen .view-player .player-controls-container .progress-container { - width: 100%; - left: 0; +.playback-bar .prog-tooltip { + position: absolute; + min-width: 100px; + width: unset; + height: 25px; + top: -35px; + padding: 0 5px; + border-radius: 4px; + text-align: center; + color: var(--spice-text); + background-color: var(--spice-button); + opacity: 0; + transition: opacity,left 0.2s ease; } -.progress-container .inner { - background-color: var(--modspotify_main_fg) !important; +.playback-bar:hover .prog-tooltip { + opacity: 1; } -#player-text-elapsed, -#player-text-remaining { - display: none; +/** Rearrange player bar */ +.main-nowPlayingBar-left { + order: 1; + flex: 1; + width: auto; + min-width: 0 !important; } -/* Player Control buttons */ - -.view-player .player-controls-container { - text-align: left; - flex: 1 1; +.main-nowPlayingBar-center { order: 0; - min-width: 220px; + flex: 1; + width: auto; + min-width: unset !important; } -.view-player .player-bar-spacer { - display: none; -} - -.view-player .now-playing-container { - flex: 2 1; +.main-nowPlayingBar-right { order: 2; - min-width: 0; + flex: 1; + width: auto; + min-width: unset !important; } -.view-player .now-playing-container .caption { - align-items: center; +.main-nowPlayingWidget-nowPlaying { justify-content: center; - font-family: var(--info-font-family); } -.view-player .track { - letter-spacing: 0; -} - -.view-player .track a { - color: var(--modspotify_secondary_fg); - font-weight: 500; +.player-controls { + justify-content: flex-start; + flex-direction: row; } -.view-player .text-container .text-item-container-track { - height: 20px; +.main-playPauseButton-button { + background-color: transparent; } -.view-player .now-playing-container .caption .text-container, -.view-player .now-playing .cover-image-link-wrapper { - flex: unset; +.main-playPauseButton-button svg { + width: 32px !important; + height: 32px !important; + color: var(--spice-button); } -.view-player .extra-controls-container { - flex: 1 1; - order: 3; - padding-right: 0; - min-width: 220px; +/** Main container */ +.contentSpacing, +.artist-artistDiscography-headerContainer { + padding-left: 64px; + padding-right: 64px; } -@media (max-width:900px) { - #video-fullscreen-button { - display: none; - } - .volumebar-container { - width: 80px; +@media (min-width: 1024px) { + .contentSpacing, + .artist-artistDiscography-headerContainer { + padding-left: 128px; + padding-right: 128px; } - .view-player .player-controls-container .button { - margin: 2px; - } -} - -.view-player .player-controls-container .controls { - margin-top: 4px; - display: flex; -} - -button#player-button-previous { - order: 1; -} - -button#player-button-play { - order: 2; -} - -.skip-button-container { - order: 3; -} - -button#player-button-shuffle, -#player-button-thumbs-down, -.view-player button[data-interaction-intent="skip-back"] { - order: 4; -} - -button#player-button-repeat, -#player-button-thumbs-up, -.view-player button[data-interaction-target="skip-forward-button"] { - order: 5; } -.view-player .player-controls-container .controls .button-repeat.active, -.view-player .player-controls-container .controls .button-shuffle.active, -.view-player .player-controls-container .controls .button-thumbs-down.active, -.view-player .player-controls-container .controls .button-thumbs-up.active { - color: var(--modspotify_active_control_fg); -} - -.view-player .player-controls-container .controls .button-play, -.view-player .player-controls-container .controls .button-play:after { - box-shadow: unset !important; - border-radius: 0 !important; - width: 35px; - height: 35px; -} - -.view-player .player-controls-container .controls .button-play:before { - font-size: 35px !important; - border-radius: 0 !important; - padding-left: 0 !important; -} - -/* Player cover art */ - -.view-player .now-playing-container .caption .cover-image-link { - flex-basis: var(--bar-cover-art-size); - width: var(--bar-cover-art-size); - height: var(--bar-cover-art-size); -} - -.view-player .now-playing .cover-image-link figure { - width: var(--bar-cover-art-size); - height: var(--bar-cover-art-size); - border-radius: 3px; - overflow: hidden; -} - -.view-player .now-playing .cover-image-link-wrapper { - width: var(--bar-cover-art-size); - height: var(--bar-cover-art-size); -} - -/* Input form */ - -.form-control, -.form-control:focus { - color: var(--modspotify_secondary_fg); - background-color: var(--modspotify_indicator_fg_and_button_bg); - font-family: var(--info-font-family); -} - -#view-modal .playlist-annotate .description-field-wrapper { - color: var(--modspotify_secondary_fg); -} - -/* Connect Device Popup */ - -.ConnectDevicePicker__button--with-badge:after { - background-color: var(--modspotify_main_fg); -} - -/* Cannot edit svg colors, hide it away */ - -.ConnectPopup__devices-image { - display: none; -} - -.ConnectPopup { - box-shadow: 0 8px 10px 1px rgba(0, 0, 0, 0.14), 0 3px 14px 2px rgba(0, 0, 0, 0.12), 0 5px 5px -3px rgba(0, 0, 0, 0.2); - border-radius: 3px !important; -} - -.button.button-blue { - background-color: var(--modspotify_main_fg); - color: var(--modspotify_secondary_fg); +.main-collectionLinkButton-collectionLinkButton .main-collectionLinkButton-icon, +.main-collectionLinkButton-collectionLinkButton .main-collectionLinkButton-collectionLinkText, +.main-createPlaylistButton-button { + opacity: 1; } -/* Volume bar */ - -.view-player .extra-controls-container .volumebar-container .progress-bar-wrapper.active .inner, -.view-player .extra-controls-container .volumebar-container:hover .inner { - background-color: var(--modspotify_sidebar_indicator_and_hover_button_bg); +.main-likedSongsButton-likedSongsIcon, +.main-yourEpisodesButton-yourEpisodesIcon, +.main-createPlaylistButton-createPlaylistIcon { + background: unset !important; } -/* Search page */ - -.SearchHeader__sticky-wrapper { - background-image: unset; - background-color: unset; - border-bottom: 0; +.main-createPlaylistButton-icon, +.main-collectionLinkButton-icon, +.main-createPlaylistButton-icon { + height: 40px; } -.SearchInput__searchIcon { - color: var(--modspotify_main_fg); +.main-likedSongsButton-likedSongsIcon svg, +.main-yourEpisodesButton-yourEpisodesIcon svg, +.main-createPlaylistButton-createPlaylistIcon svg { + fill: var(--spice-sidebar-text); + width: 32px; + height: 32px; } - -/* Notification */ -.notification-bubble-container>div { - background: var(--modspotify_main_fg); - color: var(--modspotify_secondary_fg); +.main-yourEpisodesButton-yourEpisodesIcon svg path { + fill: var(--spice-sidebar-text); } -.view-player .text-container .text-item-container .text-item .scroll-text-container:after { - background: unset; +/** Grid */ +.Root__top-container { + grid-template-areas: + "nav-bar main-view buddy-feed" + "nav-bar now-playing-bar buddy-feed"; + padding: var(--main-gap) 0; } -.view-player .player-bar-wrapper { - padding-top: 2px; +html:not(.buddyfeed-visible) .Root__top-container { + padding-right: var(--main-gap); } -.view-player .player-controls-container .button-repeat.active:after, -.view-player .player-controls-container .button-shuffle.active:after { +/** Minimal profile button */ +span.main-userWidget-displayName, +.main-userWidget-box svg { display: none; } -.view-player .extra-controls-container .volumebar-container .progress-bar .inner { - background-color: var(--modspotify_main_fg); -} - -#now-playing-image-large { - z-index: 9999; +/** Sidebar config */ +#dribs-hidden-list { + background-color: rgba(var(--spice-rgb-main), .3); } -#view-now-playing { - /* position: absolute; */ - max-width: 300px; - max-height: 300px; - width: unset; - height: unset; - position: absolute; +#dribs-sidebar-config { + position: relative; + width: 100%; + height: 0; + display: flex; + justify-content: space-evenly; + align-items: center; + top: -30px; + left: 0; } -.now-playing-large { - border-top: 0; +#dribs-sidebar-config button { + min-width: 60px; + border-radius: 3px; + background-color: var(--spice-main); + color: var(--spice-text); + border: 1px solid var(--spice-text); } - -#view-now-playing.expanded, -#view-now-playing.expanded .large.image { - width: 300px; - height: 300px; +#dribs-sidebar-config button:disabled { + color: var(--spice-button-disabled); } -#view-now-playing.expanded { - bottom: calc(var(--bar-height) + var(--main-gap)); - left: var(--sidebar-width); +.main-navBar-entryPoints { + --left-sidebar-padding-left: 24px; + --left-sidebar-padding-right: 24px; } -#view-now-playing a.image.large figure, -#view-now-playing a.image.large figure .cover-image { - height: 100% !important; +div.GlueDropTarget.personal-library { + padding: 0 8px; } - -.playlist-picture { - width: var(--left-sidebar-item-height); - height: var(--left-sidebar-item-height); - background-size: cover; - border-radius: 50%; - margin: 0 auto; +div.GlueDropTarget.personal-library >* { + padding: 0 16px; + height: 56px; + border-radius: 4px; } -.playlist-picture span { - display: none !important; +div.GlueDropTarget.personal-library >*.active { + background: var(--spice-button); } - -.SidebarListItemLink { +/** Big cover, small cover */ +.main-coverSlotExpanded-container { + position: fixed; z-index: 2; - justify-content: center; -} - -.RootlistItem__link .SidebarListItemLink { - margin-left: 0; -} - -.RootlistItemFolder__arrow:hover { - color: var(--modspotify_main_bg); -} - -.SidebarListItemLink:link, -.SidebarListItemLink:visited, -.RootlistItem__link { - padding-left: 0; - color: var(--modspotify_main_bg); -} - -.RootlistItemFolder__arrow { - color: var(--modspotify_main_bg); - padding: 0; - position: absolute; - z-index: 3; - margin-left: 15px; - margin-top: 15px; - width: 28px; - height: 28px; -} - -.LeftSidebar__section { - margin: 0; -} - -.LeftSidebar__section.LeftSidebar__section--rootlist { - padding: 18px 0; + width: 250px; + height: 250px; + bottom: calc(var(--main-gap) + var(--bar-height) + 10px); + left: calc(var(--sidebar-width) + 10px); } -#new-playlist-button-mount-point { - display: none; -} - -#menu-wrapper { - width: 100%; - min-width: 100%; +.Root.is-connectBarVisible .main-coverSlotExpanded-container { + bottom: calc(var(--main-gap) + var(--bar-height) + 24px + 10px); } -.lyrics-color-container { - background-color: transparent !important; +html.right-expanded-cover .main-coverSlotExpanded-container { + right: calc(var(--main-gap) + 10px); + left: unset; } -.lyrics-lines-container .no-lyrics-message { - color: var(--modspotify_secondary_fg); +html.right-expanded-cover.buddyfeed-visible .main-coverSlotExpanded-container { + right: calc(var(--main-gap) + var(--buddy-feed-width) + 10px); + left: unset; } -.RootlistItemPlaylist__offline-indicator { - display: none; +.main-coverSlotExpanded-container img { + border-radius: 4px; } -.online-container { - color: var(--modspotify_secondary_fg); +.cover-art { + border-radius: 4px; } -.lyrics-lines-container .lyrics-list-animated .lyrics-line[data-animation-index="2"], -.lyrics-lines-container .lyrics-list-animated .lyrics-line[data-animation-index="3"] { - color: var(--modspotify_secondary_fg); +.main-nowPlayingWidget-coverExpanded .main-coverSlotCollapsed-container { + opacity: 0; } -.SidebarListItemLink:before { - color: var(--modspotify_preserve_1); - margin-right: 0; +.main-nowPlayingWidget-coverExpanded { + transform: translateX(-27px); } -.SidebarListItem__label { - overflow: unset; +/** Mini dribbblish */ +.x-categoryCard-CategoryCard > div { + background-color: var(--spice-main); + width: calc(100% - 14px); + height: calc(100% - 6px); + margin: 3px 10px; + border-radius: 5px; } -.SidebarListItem__label:before { - color: var(--modspotify_preserve_1); +.x-categoryCard-CategoryCard { + height: 100px; } -.sidebar .sidebar-navbar { - background-color: var(--modspotify_secondary_bg); - padding-bottom: 10px; - z-index: 0; +.x-categoryCard-image { + width: 50px !important; + height: 50px !important; } -.LeftSidebar__scroll-section { - background-color: unset; +.x-heroCategoryCard-HeroCategoryCard > div { + background-color: var(--spice-main); + width: calc(100% - 20px); + height: calc(100% - 6px); + margin: 3px 16px; + border-radius: 5px; } -.main-view-wrapper { - position: absolute; - width: calc(100% - var(--sidebar-width) - var(--main-gap)); - height: calc(100% - var(--bar-height) - var(--main-gap) * 2); - left: var(--sidebar-width); - top: var(--main-gap); - border-radius: var(--main-corner-radius) var(--main-corner-radius) 0 0; - overflow: hidden; +.main-dropDown-dropDown, +.x-sortBox-sortDropdown { + background-color: rgba(var(--spice-rgb-selected-row), .1) !important; } -.SidebarListItemLink:focus, -.SidebarListItemLink:hover, -.SidebarListItemLink--is-highlighted:hover, -.SidebarListItemLink--is-highlighted:link, -.SidebarListItemLink--is-highlighted:visited { - color: unset; +.connect-device-list-item:focus, +.connect-device-list-item:hover { + background-color: rgba(var(--spice-rgb-selected-row), .3); } -/* Large artist image */ -.glue-page-header--with-responsive-height-large { - height: calc(100vh + 44px); - max-height: unset; +/* 1.1.56 */ +.main-navBar-navBar { + width: var(--sidebar-width) !important; } -.glue-page-header--with-responsive-height-large .glue-page-header__content-wrapper { - justify-content: center; - padding-left: 70px; +.main-entityHeader-container.main-entityHeader-nonWrapped { + padding-left: 64px; + padding-right: 64px; } -.glue-page-header--with-responsive-height-large .glue-page-header__content .glue-page-header__count-label { - position: relative; - right: unset; - left: 0; - text-align: left; -} - -.glue-page-header__content .glue-page-header__label { - padding-top: 0; +@media (min-width: 1024px) { + .main-entityHeader-container.main-entityHeader-nonWrapped { + padding-left: 128px; + padding-right: 128px; + } } -.glue-page-header__top-bar { - background: unset; +.main-userWidget-dropDownMenu > li > button { + color: rgba(var(--spice-rgb-selected-row), .7); + padding-left: 8px; + text-decoration: none; } - -.container, -.glue-page-wrapper { - padding-left: 60px; - padding-right: 60px; +.main-userWidget-dropDownMenu > li > button:hover, +.main-userWidget-dropDownMenu > li > button:focus { + color: var(--spice-text); } -button[data-button=add-recommendation] { - background-color: var(--modspotify_pressing_button_bg); - color: var(--modspotify_main_bg); +.main-userWidget-dropDownMenu svg { + position: unset; } - -/* Custom Elements added by extensions */ - -#dribbblish-back-shadow { +.main-userWidget-dropDownMenu > li svg { position: absolute; - width: calc(100% - var(--sidebar-width) - var(--main-gap)); - height: calc(100% - var(--main-gap) * 2); - left: var(--sidebar-width); - top: var(--main-gap); - box-shadow: 0 0 10px 3px #0000003b; - border-radius: var(--main-corner-radius); - z-index: 1; } - -#dribbblish-sidebar-fade-in { - position: absolute; - bottom: 0; - width: var(--sidebar-width); - height: 10%; - background: linear-gradient(to top, var(--modspotify_secondary_bg) 10%, transparent); - z-index: 3; - pointer-events: none; +.main-buddyFeed-buddyFeed.main-buddyFeed-buddyFeed-expanded { + z-index: 4; }