elektrofoni/style.css

461 lines
9 KiB
CSS

@font-face {
font-family: "Open Sans";
src: url("./priv/assets/fonts/Open_Sans/OpenSans-VariableFont_wdth\,wght.ttf")
format("truetype") tech("variations");
src: url("./priv/assets/fonts/Open_Sans/OpenSans-VariableFont_wdth\,wght.ttf")
format("truetype-variations");
font-weight: 300 800;
font-stretch: 75% 100%;
}
:root {
--font-family: "Open Sans", ui-sans-serif;
--background-gradient-bottom: rgb(131, 58, 180, 1);
--background-gradient-middle: rgba(253, 29, 29, 1);
--background-gradient-top: rgba(252, 176, 69, 1);
--text-color: #123456;
--glass-opacity: 0.5;
--glass-opacity-active: 0.2;
--glass-shadow-opacity: 0.1;
--glass-background: rgba(255, 255, 255, var(--glass-opacity));
--glass-blur: 10px;
--glass-border-color: rgba(255, 255, 255, var(--glass-opacity));
--glass-border: 1px solid var(--glass-border-color);
--glass-shadow: 0 4px 30px rgba(0, 0, 0, var(--glass-shadow-opacity));
--border-radius: 10px;
--button-border-radius-small: calc(var(--border-radius) / 2);
--button-border-radius: var(--border-radius);
--side-margin: 5px;
--double-margin: calc(var(--side-margin) * 2);
--track-thumb-size: 20px;
--track-scale-factor: 4;
--library-top-nav-height: 50px;
--search-size: 1.6rem;
}
.glass-bg,
.glass-button,
.glass-input {
background: var(--glass-background);
}
.glass-button:active {
background: rgba(255, 255, 255, var(--glass-opacity-active));
}
.glass-shadow,
.glass-button,
.glass-input {
box-shadow: var(--glass-shadow);
}
.glass-blur,
.glass-button,
.glass-input {
backdrop-filter: blur(var(--glass-blur));
-webkit-backdrop-filter: blur(var(--glass-blur));
}
.glass-border,
.glass-button,
.glass-input {
border: var(--glass-border);
}
.glass-button {
border-radius: var(--button-border-radius);
text-align: center;
}
.button-small,
.glass-input {
border-radius: var(--button-border-radius-small);
}
.glass-button,
.glass-input {
padding: var(--side-margin);
}
.button-group {
display: flex;
flex-direction: row;
justify-content: space-around;
align-items: stretch;
}
.button-group > * {
flex: 1;
}
.button-group .glass-button {
border-radius: 0;
border-right: none;
}
.button-group .glass-button:first-child {
border-radius: var(--button-border-radius) 0 0 var(--button-border-radius);
}
.button-group .glass-button:last-child {
border-radius: 0 var(--button-border-radius) var(--button-border-radius) 0;
border-right: var(--glass-border);
}
.hidden {
display: none;
}
html {
font-family: var(--font-family);
}
body {
background-color: var(--background-gradient-bottom);
background: linear-gradient(
0deg,
var(--background-gradient-bottom) 0%,
var(--background-gradient-middle) 50%,
var(--background-gradient-top) 100%
);
color: var(--text-color);
overflow-y: hidden;
}
main {
margin: var(--side-margin);
overflow-y: hidden;
}
a {
color: var(--text-color);
text-decoration: none;
}
tracks-view,
albums-view,
artists-view,
single-artist-view,
single-album-view {
display: block;
margin-top: calc(var(--library-top-nav-height) + var(--side-margin));
overflow-y: hidden;
height: calc(
100vh - (var(--library-top-nav-height) + var(--side-margin)) -
var(--double-margin)
);
border-radius: var(--border-radius);
}
#authed-view-wrapper {
height: calc(100vh - 2 * var(--side-margin));
overflow-y: hidden;
}
#authed-view-library {
flex: 1 1;
overflow-y: auto;
}
#authed-view-wrapper[data-player-status="closed"] .player-wrapper {
display: none;
}
#small-player-wrapper {
position: absolute;
bottom: 0;
left: 0;
width: 100%;
padding: var(--side-margin);
display: grid;
grid-template: "art track" "art artist" "art album" "controls controls" auto / 2fr 8fr;
gap: var(--side-margin);
font-weight: 100;
border-radius: 10px 10px 0 0;
border-bottom: none;
}
#small-player-track-name,
#small-player-artist-name,
#small-player-album-name {
white-space: nowrap;
text-overflow: ellipsis;
overflow-x: hidden;
}
#small-player-track-name,
#full-player-track-name {
grid-area: track;
font-weight: normal;
}
#small-player-artist-name,
#full-player-artist-name {
grid-area: artist;
}
#small-player-album-name,
#full-player-album-name {
grid-area: album;
}
#small-player-artwork-wrapper,
#full-player-artwork-wrapper {
grid-area: art;
}
#full-player-wrapper {
position: absolute;
bottom: 0;
left: 0;
top: 0;
right: 0;
width: 100%;
height: 100%;
padding: var(--double-margin);
display: grid;
grid-template:
"art art"
"track track"
"artist artist"
"album album"
"meta meta"
". ." 1fr
"controls controls" auto
/ 1fr 1fr;
gap: var(--double-margin);
text-align: center;
font-weight: 100;
font-size: 125%;
}
#full-player-artwork-wrapper img {
margin: 0 auto;
padding-bottom: var(--double-margin);
}
#full-player-metas {
grid-area: meta;
display: grid;
gap: var(--double-margin);
grid-template-columns: repeat(auto-fit, minmax(150px, 1fr));
}
#player-controls {
grid-area: controls;
display: grid;
grid-template: "elapsed track total" "buttons buttons buttons" / auto 1fr auto;
gap: var(--side-margin);
}
#player-controls-buttons {
grid-area: buttons;
justify-content: center;
font-size: 1.5rem;
}
#player-controls-buttons button {
padding: calc(var(--side-margin) * 2) calc(var(--side-margin) * 3);
}
#player-time-elapsed {
grid-area: elapsed;
}
#player-time-total {
grid-area: total;
}
#player-track {
grid-area: track;
}
#player-track::-webkit-slider-thumb {
appearance: none;
border: var(--glass-border);
height: var(--track-thumb-size);
width: var(--track-thumb-size);
border-radius: 50%;
background: var(--glass-background);
cursor: pointer;
box-shadow: var(--glass-shadow);
transform: translateY(
calc(
-50% - 0.5px + var(--track-thumb-size) / (var(--track-scale-factor) * 2)
)
);
}
#player-track::-moz-range-thumb {
appearance: none;
border: var(--glass-border);
height: var(--track-thumb-size);
width: var(--track-thumb-size);
border-radius: 50%;
background: var(--glass-background);
cursor: pointer;
box-shadow: var(--glass-shadow);
}
#player-track::-webkit-slider-runnable-track {
width: calc(100% - var(--track-thumb-size));
height: calc(var(--track-thumb-size) / var(--track-scale-factor));
cursor: pointer;
box-shadow: var(--glass-shadow);
background: var(--glass-background);
border-radius: 1.3px;
border: 0.2px solid var(--glass-border-color);
}
#player-track::-moz-range-track {
width: calc(100% - var(--track-thumb-size));
height: calc(var(--track-thumb-size) / var(--track-scale-factor));
cursor: pointer;
box-shadow: var(--glass-shadow);
background: var(--glass-background);
border-radius: 1.3px;
border: 0.2px solid var(--glass-border-color);
}
#library-top-nav {
position: fixed;
top: var(--side-margin);
left: var(--side-margin);
right: var(--side-margin);
height: var(--library-top-nav-height);
}
#library-top-nav .button-group {
width: 100%;
height: 100%;
}
#library-top-nav .glass-button {
padding: 0;
font-size: 2rem;
line-height: var(--library-top-nav-height);
}
#library-loading-indicator {
position: absolute;
top: 50%;
left: 0;
width: 100vw;
text-align: center;
font-size: 1.5rem;
}
#search-bar {
position: absolute;
top: calc(var(--library-top-nav-height) + var(--side-margin) * 3);
right: var(--double-margin);
display: flex;
flex-direction: row;
justify-content: flex-end;
align-items: stretch;
gap: var(--double-margin);
}
#search-bar button {
border-radius: 100%;
width: calc(var(--search-size) * 2);
height: calc(var(--search-size) * 2);
font-size: var(--search-size);
}
#search-bar-input-wrapper {
flex: 1 0;
}
#search-bar-input-wrapper input {
/* 3 double margins: left side, flex gap, right side */
width: calc(100vw - var(--double-margin) * 3 - var(--search-size) * 2);
height: 100%;
font-size: var(--search-size);
}
#search-bar-input-wrapper input::-webkit-search-cancel-button {
font-size: var(--search-size);
}
.library-header {
padding: var(--side-margin);
overflow-x: hidden;
text-wrap: nowrap;
text-overflow: ellipsis;
font-size: 2rem;
}
#library-list {
height: 100%;
overflow-y: auto;
padding-bottom: 0;
}
#authed-view-wrapper[data-player-status="open"] #library-list {
padding-bottom: 100vh;
}
#artists-view #library-list,
#albums-view #library-list,
#single-artist-view #library-list {
display: grid;
grid-template-columns: repeat(auto-fit, minmax(150px, 1fr));
grid-auto-flow: dense;
/* Ensure the grid doesn't stretch when there's only a few elements */
grid-auto-rows: min-content;
gap: var(--double-margin);
padding: var(--double-margin);
}
.track-item {
padding-left: var(--side-margin);
padding-right: var(--side-margin);
}
.library-list-shuffle-all {
grid-column: 1 / -1;
padding: var(--double-margin) var(--side-margin);
}
.library-item-thumbnail {
aspect-ratio: 1 / 1;
}
.library-item {
cursor: pointer;
}
.library-item:active {
background: var(--glass-background);
}
.library-item h3 {
overflow-wrap: break-word;
}