Tidal initial commit

This commit is contained in:
o5pxels 2021-05-03 14:53:02 -05:00
parent eea80310ae
commit 161534029b
3 changed files with 823 additions and 0 deletions

68
Tidal/README.md Normal file
View File

@ -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)

18
Tidal/color.ini Normal file
View File

@ -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

737
Tidal/user.css Normal file
View File

@ -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;
}