From 161534029b9c2b2c6a8dbe5771d4583f03f596a9 Mon Sep 17 00:00:00 2001 From: o5pxels Date: Mon, 3 May 2021 14:53:02 -0500 Subject: [PATCH] Tidal initial commit --- Tidal/README.md | 68 +++++ Tidal/color.ini | 18 ++ Tidal/user.css | 737 ++++++++++++++++++++++++++++++++++++++++++++++++ 3 files changed, 823 insertions(+) create mode 100644 Tidal/README.md create mode 100644 Tidal/color.ini create mode 100644 Tidal/user.css diff --git a/Tidal/README.md b/Tidal/README.md new file mode 100644 index 0000000..a30b968 --- /dev/null +++ b/Tidal/README.md @@ -0,0 +1,68 @@ +# Tidal + +Tidal is a Spicetify theme based on Tidal. This project is maintained at https://github.com/FivePixels/Tidal. + +## Features + - Colors match Tidal + - Font matches Tidal (not provided with theme) + - Buttons are clicky (your pointer interacts with the buttons like links) + - Scrollbars removed + +## More + +The font in the screenshots is called Nationale. If you don't have this font installed on your system, Spotify's default font will be used. + +## Screenshots + +### Search + - Search bar now expands to fit the width of the header. + +![Screen Recording 2021-05-03 at 11 37 30 AM](https://user-images.githubusercontent.com/37427166/116905153-39881b80-ac04-11eb-8a8c-0f902c726c6c.gif) + + +### Now playing bar + - Buttons are based on Tidal. + - No streaming bar below the player, the active devices button represents streaming. + - The head of the now playing progress is flat rather than round. + +![image](https://user-images.githubusercontent.com/37427166/116904444-4e17e400-ac03-11eb-81ed-c2797d220f1d.png) + +### Sidebar + - Any pages that were listed in bold are no longer in bold. All elements are in normal font weight. + - Headings are in sentence case, bold, and have an underline to separate. + +### Artist Page +- Modern verified artist label styling +- Monthly listeners in lowercase. + +![image](https://user-images.githubusercontent.com/37427166/116902387-ad282980-ac00-11eb-8253-a9882a71b19d.png) + +### Album Page + - Modern album label styling + +![image](https://user-images.githubusercontent.com/37427166/116898890-8e279880-abfc-11eb-87c4-5ded88d68bc5.png) + +### Browse Page +![image](https://user-images.githubusercontent.com/37427166/116898963-a4355900-abfc-11eb-81b2-f1c8ee97d808.png) + +### Following Page + - All artists are represented with square images rather than circles, and the same with users. This also happens when searching Spotify. + +![image](https://user-images.githubusercontent.com/37427166/116900498-6b967f00-abfe-11eb-96ef-0869d9d88044.png) + +### Home Page + - On hover, the covers overlay a play button, updated with the border removed + - Header bar is resized + +![image](https://user-images.githubusercontent.com/37427166/116898666-486ad000-abfc-11eb-9c52-1f9af08a6783.png) + +### Playlist Page + - Playlist followers text is re-formatted. + - Modern playlist label styling + +![image](https://user-images.githubusercontent.com/37427166/116902199-76eaaa00-ac00-11eb-8a52-b5f07f7addbe.png) + +### Fullscreen Player + - max-width is set to prevent text from overflowing off screen. + +![image](https://user-images.githubusercontent.com/37427166/116900726-b1534780-abfe-11eb-86fe-fd3b5ff6b4c7.png) diff --git a/Tidal/color.ini b/Tidal/color.ini new file mode 100644 index 0000000..250709e --- /dev/null +++ b/Tidal/color.ini @@ -0,0 +1,18 @@ +[Base] + +main_fg = FFFFFF +secondary_fg = 9898A6 +main_bg = 17171A +sidebar_and_player_bg = 242528 +cover_overlay_and_shadow = 000000 +indicator_fg_and_button_bg = FFFFFF +pressing_fg = 00FFFF +slider_bg = 555753 +sidebar_indicator_and_hover_button_bg = 00FFFF +scrollbar_fg_and_selected_row_bg = 5A5A5A +pressing_button_fg = F2EFEA +pressing_button_bg = 525253 +selected_button = FFFFFF +miscellaneous_bg = FFFFFF +miscellaneous_hover_bg = 00FFFF +preserve_1 = FFFFFF \ No newline at end of file diff --git a/Tidal/user.css b/Tidal/user.css new file mode 100644 index 0000000..10a967b --- /dev/null +++ b/Tidal/user.css @@ -0,0 +1,737 @@ +/* Set the font to Nationale if the user has it installed, otherwise rely on Spotify default */ +*, body { + font-family: Nationale, var(--glue-font-family), sans-serif; + -webkit-font-smoothing: antialiased; +} + +.button.button-green, +.GlueButton.GlueButton--style-green { + color: #000000 +} + +.view-player .now-playing-container .button-add { + color: #FFFFFF +} + +.listening .global-position__rectangle { + background-color: transparent; + padding-top: 5px; +} + +.SearchInput { + color: #29292F; + display: inline-block; + width:100%; +} +.SearchInput__input { + color: #9898A6; + background-color: #29292F; + width:100%; + min-width: 200px; +} +/* Home page */ + +.GlueCard__info-wrapper, +.Card__info-wrapper { + margin-bottom: 30px; +} + +.card-horizontal-interior-wrapper .card-info-title { + text-align: start !important; +} + +.tl-row.selected:hover .tl-cell { + background: var(--modspotify_scrollbar_fg_and_selected_row_bg) !important; +} + +.GlueTableRow--is-selected { + background-color: var(--modspotify_scrollbar_fg_and_selected_row_bg) !important; +} + +.tracklist-podcast .tl-progress .row-progress__bar { + background-color: var(--modspotify_main_fg); +} + +.Header__background-color{ + background-color: var(--modspotify_main_bg) !important; +} + + +.glue-page-header.glue-page-header--album .glue-page-header__content-inner .glue-page-header__title, +.glue-page-header.glue-page-header--artist .glue-page-header__content-inner .glue-page-header__title, +.glue-page-header.glue-page-header--dailymix .glue-page-header__content-inner .glue-page-header__title, +.glue-page-header.glue-page-header--playlist .glue-page-header__content-inner .glue-page-header__title { + margin-top: 10px; +} + +span.glue-page-header__title-text { + color: var(--modspotify_main_fg); +} + +.glue-page-header .glue-page-header__content-inner .glue-page-header__button { + margin-top: 40px; +} + + + +.glue-page-header__label .header-verified-check { + background-color: transparent; +} +::-webkit-scrollbar { + height : 0px !important; + width : 0px !important; + background-color: transparent; + } + +.lyrics-lines-container, +.message-container { + color: #FFFFFF !important; +} + +/* Set the bottom bar to 96px */ +:root { + --bar-height: 96px; +} + + +/*Exclude these elements from draggable property because it stops them from clickable*/ +.profile-items-container, +.profile { + -webkit-app-region: no-drag !important; +} + +/*Hide top and bottom buttons of scrollbar */ +/*who uses those, lol*/ +::-webkit-scrollbar-button { + display: none !important; +} + +/*Spice up search input background*/ +.SearchInput { + color: var(--modspotify_main_fg); +} +.SearchInput__input { + color: var(--modspotify_secondary_fg); + background-color: rgba(var(--modspotify_rgb_scrollbar_fg_and_selected_row_bg), 0.5) !important; + border-radius: 4px !important; + padding-left: 34px; +} + +.sidebar:hover .sidebar-navbar.sidebar-scroll-element { + opacity: 1!important; +} + +.view-player .player-controls-container, +.view-player .player-controls-container .controls { + overflow: visible !important; +} + +.view-player .player-controls-container .controls .button-play { + box-shadow: none !important; + height:50px !important; + background: transparent !important; + width:50px !important; + transition:none 0.3s cubic-bezier(.3,0,.7,1); +} + +.view-player .player-controls-container .controls .button-play:before{ + font-size:18px !important; + padding-left: 16px !important; + padding-top: 9px !important; +} + +.view-player .player-controls-container .controls .button-play:after { + box-shadow: unset !important; +} + + +.view-player .player-controls-container .controls { + width: 100% !important; + height: 100% !important; + align-items: center !important; + margin-top : 0px !important; +} + +/* +Hide the song duration and elapsed text. I dont know where to put those so I just hide them + +.view-player .player-controls-container .progress-container .elapsed, +.view-player .player-controls-container .progress-container .remaining { + display: none !important; +} +*/ + +/* +We use round corner on cover so they look weird in original +form, so I move last cover to the right 20px and first one to the left 20px +*/ +.card-puff__card-image:nth-child(1) { + right: 20px; + box-shadow: 0 0 0 0 !important; +} + +.card-puff__card-image:nth-child(3) { + left: 20px; +} + +#top-bar-profile-link-text { + display: none !important; +} + +.list-group-item.list-group-item-social .list-group-item-text-wrapper { + font-size: 18px; + text-transform: none; + letter-spacing: 0.015em; +} +span.list-group-item-text-wrapper.pull-bottom > span { + text-transform: capitalize; +} + +#notification-bubble-container > div > div { + background: #29292F; +} + +.list-group-item.list-group-item-social .list-group-item-text { + font-weight: var(--glue-font-weight-bold); +} + +.GlueToggle__toggle { + border: 2px solid var(--modspotify_slider_bg); +} + +.slider_enabled { + background: #29292F; +} + +.view-player .player-controls-container .button-repeat.active:after, .view-player .player-controls-container .button-shuffle.active:after { + display: none !important; +} + +#connect-picker > div.ConnectPopup__content > div.ConnectPopup__button > button { + background: white; +} + +#connect-picker > div.ConnectPopup__content > div.ConnectPopup__button > button > span { + color:black; +} + +.grid-overlay-label { + top: 140px !important; +} + +/**/ +.glue-page-header__background-color { + background-image: none !important; + background: var(--modspotify_main_bg); +} + +/* .glue-page-header__sticky { + padding-top: 60px !important; +} */ + +/* +Remove those title, cringy description and +meaningless followers number +*/ + +.carousel .card-info-subtitle-description, +.carousel .card-info-subtitle-metadata, +.carousel .card:not(.card-type-station).card-info-title, +.carousel .card.card-type-playlist.image-loaded .card-info-subtitle-description, +.carousel .card.card-type-playlist.image-loaded .card-info-subtitle-metadata { + display: none !important; +} + + +/* +In top of Browse usually has bunch of Playlist or Album cards, +and they has .carousel as a wrapper and it hides anything that +overflows from its zone, aka our shadow and lifting animation. +*/ +.carousel { + overflow: visible !important; +} + +/* +Button with text Play +*/ +.button.button-green, +.GlueButton.GlueButton--style-green { + color: var(--modspotify_main_bg) !important; +} + +/* +Change text color in playlist +*/ +.tl-explicit .label, +.tl-premium .label, +.tl-cell:not(.tl-number), +.tl-cell a:link, +.tl-highlight { + color: var(--modspotify_secondary_fg); +} + +.card-type-album .card-info-title, +.card-type-track .card-info-title, +.card-type-collection-album .card-info-title, +.card-type-episode .card-info-title { + font-size: 15px; + font-weight: 900 !important; + text-align: left !important; + width: 100% !important; +} + +.card-type-album .card-info-subtitle-links, +.card-type-track .card-info-subtitle-links, +.card-type-collection-album .card-info-subtitle-links, +.card-type-episode .card-info-subtitle-links { + text-align: left !important; + width: 100% !important; +} + +.card-info-subtitle-metadata { + font-size: 14px; + letter-spacing: 0.05em; + text-transform: capitalize; +} + +.card-type-artist .card-image, .card-type-artist .card-image-hit-area, .card-type-artist .card-overlay, .card-type-artist .card-placeholder-wrapper, .card-type-artist .card-image-link, .card-type-artist .card-hit-area-counter-scale, .card-type-collection-artist .card-image, .card-type-collection-artist .card-image-hit-area, .card-type-collection-artist .card-overlay, .card-type-collection-artist .card-placeholder-wrapper, .card-type-collection-artist .card-image-link, .card-type-collection-artist .card-hit-area-counter-scale, .card-type-user .card-image, .card-type-user .card-image-hit-area, .card-type-user .card-overlay, .card-type-user .card-placeholder-wrapper, .card-type-user .card-image-link, .card-type-user .card-hit-area-counter-scale { + border-radius: 0px; +} + +.Card--artist .Card__image, .Card--artist .Card__image-hit-area, .Card--artist .Card__overlay, .Card--artist .Card__placeholder, .Card--profile .Card__image, .Card--profile .Card__image-hit-area, .Card--profile .Card__overlay, .Card--profile .Card__placeholder { + border-radius: 0px; +} + +.button-add.added:not(.button-icon-only):not(.button-icon-with-stroke) { + background: #29292F; +} + +.view-player .track { + font-weight: var(--glue-font-weight-bold); +} + +.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; +} + +.rankings__topcities.listeners { + text-transform: capitalize; + letter-spacing: 0.05em; + font-size: 13px; +} + +.SearchInput__input, +.SearchInput__searchIcon, +.SearchInput__clearButton { + margin-top: 15px !important; +} + +/* Spice up Fullscreen mode */ +#view-player .album-art .album-art__image { + box-shadow: 0 10px 70px rgba(var(--modspotify_rgb_cover_overlay_and_shadow),.5) !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: 60%; +} + +#video-player .album-art__track-title { + font-size: 84px; + margin-top: 0; + line-height: initial; +} + +#video-player .album-art__artist-name { + font-size: 54px; + margin-top: 0; + line-height: initial; +} + +/* Daily mixes */ +.carousel .card-info-wrapper.card-info-with-description.card-info-with-metadata { + height: 50px !important; +} + +/* Remove section divider */ +.section-divider { + border-bottom: 0 !important; +} + + +.Button--style-icon.Button--size-32.spoticon-heart-active-16 { + color: #00FFFF; +} +.nav.navbar-nav a:focus:not(.button):active::after{ + background-color: var(--modspotify_pressing_fg) !important; +} + +/* 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; +} + +/* Small cover Big cover mechanism */ +.now-playing.cover-size-transition.active.image-expanded #now-playing-image-small { + 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; +} + + +.lyrics-lines-container, +.message-container { + color: #FFFFFF !important; +} + +/* Home page */ +.GlueCarousel__grid-wrapper::-webkit-scrollbar-thumb { + display: none; +} + +.GlueCard__info-wrapper, +.Card__info-wrapper { + margin-bottom: 30px; +} + +.card-horizontal-interior-wrapper .card-info-title { + text-align: start !important; +} + +.tl-row.selected:hover .tl-cell { + background: var(--modspotify_scrollbar_fg_and_selected_row_bg) !important; +} + +.GlueTableRow--is-selected { + background-color: var(--modspotify_scrollbar_fg_and_selected_row_bg) !important; +} + +.tracklist-podcast .tl-progress .row-progress__bar { + background-color: var(--modspotify_main_fg); +} + +.Header__background-color{ + background-color: var(--modspotify_main_bg) !important; +} + +.Button--style-green, +.button.button-green, .button.button-white { + cursor: pointer; + border-radius: 4px; + color: var(--modspotify_main_bg) !important; +} + +.CanonicalButton, .SidebarListItemLink:link, +.SidebarListItemLink:visited, +.profile, .button.button-icon-only, +.MenuItem, .slider, +.context-menu .item.hover:not(.disabled), +.view-player .extra-controls-container .button-queue, +.view-player .extra-controls-container .button-devices, +.button.button-with-stroke, +.button.button-icon-with-stroke, +.button.button-icon-only.button-add, +.tl-row:hover .button-play, +.tl-row.contextmenu-active .button-play { + cursor: pointer; +} + + +span.glue-page-header__title-text { + color: var(--modspotify_main_fg); +} + +.glue-page-header .glue-page-header__content-inner .glue-page-header__button { + margin-top: 40px; +} + +.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; +} + +#menu-wrapper { + min-width: 240px; +} + +/*Force player bar to has fixed height*/ +.view-player { + height: var(--bar-height) !important; + box-shadow: rgba(0, 0, 0, 0.24) 0px -6px 24px; + border-top: 0; +} + +.view-player .now-playing { + overflow: unset; +} + +#now-playing-image-small .cover-image { + box-shadow: rgba(0, 0, 0, 0.24) 0px -6px 24px; + border: 2px solid #2a2a2a; + border-radius: 4px; +} + +.text-container { + z-index: 3; +} + +.view-player .now-playing-container .button-add { + color: #00FFFF +} + +.view-player .player-controls-container .controls .button-shuffle.active, +.view-player .player-controls-container .controls .button-shuffle.active:hover, +.view-player .player-controls-container .controls .button-repeat.active, +.view-player .player-controls-container .controls .button-repeat.active:hover, +.view-player .extra-controls-container .button-devices.active, +.view-player .extra-controls-container .button-devices.active:hover { + color: var(--modspotify_sidebar_indicator_and_hover_button_bg); + cursor: pointer; + background-color: rgba(33, 254, 236, 0.16); + border-radius: 10px; +} + +.view-player .player-controls-container .controls .button-shuffle.active:not(:disabled):hover, +.view-player .player-controls-container .controls .button-repeat.active:not(:disabled):hover, +.view-player .extra-controls-container .button-devices.active:not(:disabled):hover, +.view-player .extra-controls-container .button-devices:active { + color: #00FFFF; +} +.view-player .player-controls-container .controls .previous, +.view-player .player-controls-container .controls .next { + cursor: pointer; + color: white; +} + +.view-player .player-controls-container .controls .button-shuffle, +.view-player .player-controls-container .controls .button-repeat, +.view-player .player-controls-container .controls .button-play { + color: white; + cursor: pointer; +} + +.ConnectPopup__device--active, .ConnectPopup__device--active .ConnectPopup__device-info, .ConnectPopup__device--active .ConnectPopup__device-title { + color: #00FFFF; +} + +#remote-playback-bar { + display: none !important; +} + + +/*.progress-container .progress-bar, +.progress-container .inner { + top: 0 !important; + margin-top: 0 !important; + height: 3px; +} + +.progress-container .progress-bar-wrapper { + top: 0 !important; + height: 1px; +} + + +.progress-container { + position: fixed !important; + width: 100% !important; + bottom: var(--bar-height) !important; + margin : 0 !important; +} +*/ +.progress-container .inner { + background-color: var(--modspotify_main_fg) !important; +} + +.glue-page-header__p2s-details, +.glue-page-header__p2s-followers { + display: none; +} + + +.main-view-wrapper { + overflow: unset; +} + +.Button--style-icon-stroke:after, +.Button--style-icon-stroke:hover:after, +.Button--style-icon-stroke, +.glue-page-header__button .button-icon-with-stroke, +.glue-page-header__button .button-icon-with-stroke::after { + box-shadow: unset; +} + +.glue-page-header.glue-page-header--artist .glue-page-header__label { + padding-top: 10px; +} + +.glue-page-header.glue-page-header--artist.has-custom-image .glue-page-header__label { + padding-top: 8px; +} + +.glue-page-header__content .glue-page-header__label { + margin-left: -2px; + z-index: 2; +} + +.glue-page-header__label span, +.Header__label span { + background-color: var(--modspotify_main_fg); + color: var(--modspotify_main_bg); + padding: 2px 10px; +} + +.glue-page-header__label .header-verified-check { + background-color: transparent; +} + +body.remotebar .view-player .player-bar-wrapper { + height: 100%; +} + +.Header__image-inner { + box-shadow: unset; +} + +.Card__info-subtitle-metadata { + font-size: 14px; + text-transform: capitalize; + letter-spacing: 0.05em; +} + +.slider.enabled { + border: 2px solid var(--modspotify_slider_bg); +} + +#creator-about > div > div.biography__container > section > div.monthly__wrapper > div > div, #creator-about > div > div.biography__container > section > div.monthly > div { + float: left; +} + + + +#creator-about > div > div.biography__container > section > div.monthly__wrapper > div > span, #creator-about > div > div.biography__container > section > div.monthly > span { + margin: 10px; +} + +#header > div.playlist-header-wrapper > header > div.glue-page-header__content-wrapper.container > div > div.glue-page-header__content-inner > div.glue-page-header__data > div.glue-page-header__count-label > div.glue-page-header__count-label-number, .glue-page-header__content .glue-page-header__count-label-text { + text-transform: capitalize; + letter-spacing: 0.05em; + margin-left: 5px; +} + +#header > div.playlist-header-wrapper > header > div.glue-page-header__content-wrapper.container > div > div.glue-page-header__content-inner > div.glue-page-header__data > div.glue-page-header__count-label > div.glue-page-header__count-label-text, #header > div.playlist-header-wrapper > header > div.glue-page-header__content-wrapper.container > div > div.glue-page-header__content-inner > div.glue-page-header__data > div.glue-page-header__count-label > div.glue-page-header__count-label-number { + float: right; + font-size: 14px; +} + +.tl-filter-highlight { + background-color: var(--modspotify_secondary_fg); +} + +#connect-picker > div.ConnectPopup__content > img { + display: none; +} + +.SidebarListItem { + font-weight: normal; +} + +html .SidebarList__title { + font-size: 14px; + letter-spacing: 0.05em; + font-weight: var(--glue-font-weight-black); + text-transform: capitalize; + border-bottom: 1px solid; + padding-bottom: 5px; +} +.content-top-bar__profile-area { + margin-top: 15px; +} + +.tl-row.added .tl-save .button { + color: #00FFFF; +} + +#header > div.content-top-bar__search-input > div > div > label { + width: 100% +} + +.content-top-bar__profile { + flex: unset !important; +} + +.progress-bar .handle { + height: 12px; + width: 4px; + border-radius: 50px; + box-shadow: 1px 1px 3px 1px rgba(0,0,0,.4); + transition: opacity .15s ease; + pointer-events: none; +} + +.view-player .extra-controls-container .button-devices:after { + opacity: 0; +} + +/* Change animation on card hover */ +.card-button-add, .card-button-play, .card-button-more, .card-overlay { + visibility: unset !important; + opacity: 0 !important; + transition: opacity 0.5s ease-in-out +} +.card-image-hit-area:not(.no-hover):hover .card-overlay, .card-image-hit-area:not(.no-hover):hover .card-button-add, .card-image-hit-area:not(.no-hover):hover .card-button-play, .card-image-hit-area:not(.no-hover):hover .card-button-more, .card-image-wrapper.contextmenu-active .card-overlay, .card-image-wrapper.contextmenu-active .card-button-add, .card-image-wrapper.contextmenu-active .card-button-play, .card-image-wrapper.contextmenu-active .card-button-more, .card:not(.card-horizontal).pressed .card-overlay, .card:not(.card-horizontal).pressed .card-button-add, .card:not(.card-horizontal).pressed .card-button-play, .card:not(.card-horizontal).pressed .card-button-more { + opacity: 1 !important; + transition: opacity 0.5s ease-in-out +} + +/* Magical search bar width changing, and animation */ + +.content-top-bar__search-input { + min-width: 24px !important; + flex: 100; + max-width: 100%; +} + +[aria-label="Search Spotify"][aria-hidden="true"] { + min-width: 24px !important; + width: 10% !important; + transition: width 0.5s; +} +[aria-label="Search Spotify"] { + transition: width 0.5s; +} \ No newline at end of file