elektrofoni/style.css

424 lines
8.3 KiB
CSS
Raw Normal View History

2023-12-15 21:39:12 +00:00
@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%;
}
2023-10-08 09:53:43 +00:00
:root {
2023-12-15 21:39:12 +00:00
--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);
2023-10-08 09:53:43 +00:00
--text-color: #123456;
2023-12-15 21:39:12 +00:00
--glass-opacity: 0.3;
2023-12-28 10:43:41 +00:00
--glass-opacity-active: 0.2;
2023-12-15 21:39:12 +00:00
--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);
2023-12-15 21:39:12 +00:00
--side-margin: 5px;
--double-margin: calc(var(--side-margin) * 2);
2023-12-15 21:39:12 +00:00
--track-thumb-size: 20px;
--track-scale-factor: 4;
--library-top-nav-height: 45px;
--search-size: 1.6rem;
2023-12-15 21:39:12 +00:00
}
.glass-bg,
2023-12-15 22:31:52 +00:00
.glass-button,
.glass-input {
2023-12-15 21:39:12 +00:00
background: var(--glass-background);
}
2023-12-28 10:43:41 +00:00
.glass-button:active {
background: rgba(255, 255, 255, var(--glass-opacity-active));
}
2023-12-15 21:39:12 +00:00
.glass-shadow,
2023-12-15 22:31:52 +00:00
.glass-button,
.glass-input {
2023-12-15 21:39:12 +00:00
box-shadow: var(--glass-shadow);
}
.glass-blur,
2023-12-15 22:31:52 +00:00
.glass-button,
.glass-input {
2023-12-15 21:39:12 +00:00
backdrop-filter: blur(var(--glass-blur));
-webkit-backdrop-filter: blur(var(--glass-blur));
}
.glass-border,
2023-12-15 22:31:52 +00:00
.glass-button,
.glass-input {
2023-12-15 21:39:12 +00:00
border: var(--glass-border);
}
.glass-button {
border-radius: var(--button-border-radius);
2024-02-25 20:00:15 +00:00
text-align: center;
2023-12-15 21:39:12 +00:00
}
2023-12-15 22:31:52 +00:00
.button-small,
.glass-input {
2023-12-15 21:39:12 +00:00
border-radius: var(--button-border-radius-small);
}
2023-12-15 22:31:52 +00:00
.glass-button,
.glass-input {
padding: var(--side-margin);
}
2023-12-15 21:39:12 +00:00
.button-group {
display: flex;
flex-direction: row;
justify-content: space-around;
align-items: stretch;
}
2024-02-25 20:00:15 +00:00
.button-group > * {
flex: 1;
}
2023-12-15 21:39:12 +00:00
.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);
2023-10-08 09:53:43 +00:00
}
body {
2023-12-15 21:39:12 +00:00
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%
);
2023-10-08 09:53:43 +00:00
color: var(--text-color);
2023-12-15 21:39:12 +00:00
overflow-y: hidden;
2023-10-08 09:53:43 +00:00
}
main {
2023-12-15 21:39:12 +00:00
margin: var(--side-margin);
overflow-y: hidden;
}
a {
color: var(--text-color);
text-decoration: none;
}
2023-12-15 21:39:12 +00:00
tracks-view,
albums-view,
artists-view,
single-artist-view {
display: block;
2023-12-15 21:45:30 +00:00
margin-top: calc(var(--library-top-nav-height) + var(--side-margin));
2023-12-15 21:39:12 +00:00
overflow-y: hidden;
height: calc(
2023-12-15 21:45:30 +00:00
100vh - (var(--library-top-nav-height) + var(--side-margin)) -
var(--double-margin)
2023-12-15 21:39:12 +00:00
);
border-radius: var(--border-radius);
2023-10-08 09:53:43 +00:00
}
2023-10-14 20:17:24 +00:00
#authed-view-wrapper {
2023-12-15 21:39:12 +00:00
height: calc(100vh - 2 * var(--side-margin));
overflow-y: hidden;
}
2023-10-14 20:17:24 +00:00
2023-12-15 21:39:12 +00:00
#authed-view-library {
flex: 1 1;
overflow-y: auto;
}
/* Ensure that the view stack only shows the topmost view and the nav bar. */
#authed-view-library > *:not(:first-child, :last-child) {
display: none;
}
2023-12-15 21:39:12 +00:00
#authed-view-player {
position: absolute;
bottom: 0;
left: 0;
width: 100%;
padding: var(--side-margin);
border-radius: 10px 10px 0 0;
border-bottom: none;
}
#authed-view-wrapper[data-player-status="closed"] #authed-view-player {
display: none;
}
2023-12-15 21:39:12 +00:00
#player-wrapper {
2024-02-02 23:14:40 +00:00
display: grid;
grid-template: "art track" "art artist" "art album" "controls controls" auto / 2fr 8fr;
gap: var(--side-margin);
2023-10-08 09:53:43 +00:00
2023-12-15 21:39:12 +00:00
font-weight: 100;
2024-02-02 23:14:40 +00:00
}
#player-wrapper-track-name,
#player-wrapper-artist-name,
#player-wrapper-album-name {
2023-12-15 21:39:12 +00:00
white-space: nowrap;
text-overflow: ellipsis;
overflow-x: hidden;
2023-10-14 20:17:24 +00:00
}
2024-02-02 23:14:40 +00:00
#player-wrapper-track-name {
grid-area: track;
font-weight: normal;
}
#player-wrapper-artist-name {
grid-area: artist;
}
#player-wrapper-album-name {
grid-area: album;
}
#player-wrapper .thumbnail {
grid-area: art;
}
2023-12-15 21:39:12 +00:00
#player-controls {
2024-02-02 23:14:40 +00:00
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;
2023-12-15 21:39:12 +00:00
}
#player-track {
2024-02-02 23:14:40 +00:00
grid-area: track;
2023-12-15 21:39:12 +00:00
}
#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;
2023-12-15 21:45:30 +00:00
top: var(--side-margin);
left: var(--side-margin);
right: var(--side-margin);
2023-12-15 21:39:12 +00:00
height: var(--library-top-nav-height);
}
#library-top-nav .button-group {
width: 100%;
height: 100%;
}
2024-02-25 20:00:15 +00:00
#library-top-nav .glass-button {
font-size: 2rem;
2024-02-25 20:00:15 +00:00
padding: 0;
}
#library-loading-indicator {
position: absolute;
top: 50%;
left: 0;
width: 100vw;
text-align: center;
font-size: 1.5rem;
}
2023-10-08 09:53:43 +00:00
#search-bar {
position: absolute;
top: calc(var(--library-top-nav-height) + var(--side-margin) * 3);
2023-10-15 17:23:50 +00:00
left: 50%;
transform: translateX(-50%);
width: calc(100vw - 20px);
2023-10-08 09:53:43 +00:00
display: flex;
flex-direction: row;
justify-content: space-between;
align-items: stretch;
gap: var(--double-margin);
2023-10-08 09:53:43 +00:00
}
#search-bar button {
border-radius: 100%;
width: calc(var(--search-size) * 2);
height: calc(var(--search-size) * 2);
font-size: var(--search-size);
}
2023-10-08 09:53:43 +00:00
#search-bar-input-wrapper {
flex: 1 1;
}
#search-bar-input-wrapper input {
width: 100%;
height: 100%;
font-size: var(--search-size);
}
#search-bar-input-wrapper input::-webkit-search-cancel-button {
font-size: var(--search-size);
2023-10-08 09:53:43 +00:00
}
2023-10-28 16:32:38 +00:00
2023-12-15 21:39:12 +00:00
.library-list {
height: 100%;
overflow-y: auto;
padding-bottom: 0;
}
#authed-view-wrapper[data-player-status="open"] .library-list {
2024-02-02 23:14:40 +00:00
padding-bottom: 100vh;
2023-12-15 21:39:12 +00:00
}
2023-10-28 16:32:38 +00:00
#artists-view .library-list,
2023-11-13 17:44:32 +00:00
#albums-view .library-list,
#single-artist-view .library-list {
2023-10-28 16:32:38 +00:00
display: grid;
grid-template-columns: repeat(auto-fit, minmax(150px, 1fr));
2023-11-13 17:44:32 +00:00
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);
2023-10-28 16:32:38 +00:00
}
2023-12-15 21:39:12 +00:00
.track-item {
padding-left: var(--side-margin);
padding-right: var(--side-margin);
}
2023-11-13 17:44:32 +00:00
.library-list-shuffle-all {
grid-column: 1 / -1;
padding: var(--double-margin) var(--side-margin);
2023-11-13 17:44:32 +00:00
}
.library-item-thumbnail {
aspect-ratio: 1 / 1;
}
.library-item-expanded {
}
.library-item-expanded-contents {
grid-column: 1 / -1;
}
2023-12-28 10:48:09 +00:00
.library-item {
cursor: pointer;
2023-12-28 10:48:09 +00:00
}
.library-item:active {
background: var(--glass-background);
}
2023-10-28 16:32:38 +00:00
.library-item img {
}
.library-item h3 {
overflow-wrap: break-word;
}