- Spotify playlist, library, album and artist browsing with in-app playback - Song, playlist and album downloads via spotdl with YouTube and Bandcamp fallbacks - Electron desktop app (castLabs Widevine) with a permanent sidebar layout - Linux and Windows packaging scripts
118 lines
2.4 KiB
CSS
118 lines
2.4 KiB
CSS
@layer base {
|
|
.item {
|
|
border-radius: var(--radius);
|
|
background-color: var(--card);
|
|
color: var(--card-foreground);
|
|
overflow: hidden;
|
|
margin-bottom: var(--spacing-4);
|
|
box-shadow: var(--shadow);
|
|
transition: box-shadow var(--animation-duration-normal) ease;
|
|
}
|
|
|
|
.item:hover:not(:has(.trigger:disabled)) {
|
|
box-shadow: var(--shadow-md);
|
|
}
|
|
|
|
.item:has(.trigger:disabled) {
|
|
opacity: 0.6;
|
|
box-shadow: var(--shadow);
|
|
}
|
|
|
|
.header {
|
|
display: flex;
|
|
}
|
|
|
|
.trigger {
|
|
display: flex;
|
|
align-items: center;
|
|
justify-content: space-between;
|
|
width: 100%;
|
|
padding: var(--spacing-4) var(--spacing-6);
|
|
font-family: var(--font-family-heading);
|
|
font-weight: 400;
|
|
line-height: 1.5;
|
|
letter-spacing: -0.01em;
|
|
text-align: left;
|
|
background-color: transparent;
|
|
color: inherit;
|
|
border: none;
|
|
cursor: pointer;
|
|
transition: opacity var(--animation-duration-fast) ease;
|
|
}
|
|
|
|
.trigger:hover:not(:disabled) {
|
|
opacity: 0.8;
|
|
}
|
|
|
|
.trigger:active:not(:disabled) {
|
|
opacity: 0.7;
|
|
}
|
|
|
|
.trigger:disabled {
|
|
opacity: 0.6;
|
|
cursor: not-allowed;
|
|
color: var(--muted-foreground);
|
|
}
|
|
|
|
.trigger:focus-visible {
|
|
outline: 2px solid var(--primary);
|
|
outline-offset: 2px;
|
|
}
|
|
|
|
.icon {
|
|
width: 1rem;
|
|
height: 1rem;
|
|
transition: transform var(--animation-duration-normal)
|
|
cubic-bezier(0.16, 1, 0.3, 1);
|
|
flex-shrink: 0;
|
|
color: var(--muted-foreground);
|
|
}
|
|
|
|
.trigger:disabled .icon {
|
|
color: var(--muted-foreground);
|
|
opacity: 0.5;
|
|
}
|
|
|
|
.trigger[data-state="open"] .icon {
|
|
transform: rotate(180deg);
|
|
}
|
|
|
|
.content {
|
|
overflow: hidden;
|
|
background-color: transparent;
|
|
color: inherit;
|
|
animation: accordion-up var(--animation-duration-normal)
|
|
cubic-bezier(0.16, 1, 0.3, 1);
|
|
}
|
|
|
|
.content[data-state="open"] {
|
|
animation: accordion-down var(--animation-duration-normal)
|
|
cubic-bezier(0.16, 1, 0.3, 1);
|
|
}
|
|
|
|
.contentInner {
|
|
padding: var(--spacing-3) var(--spacing-6) var(--spacing-4);
|
|
color: var(--muted-foreground);
|
|
font-size: 0.95rem;
|
|
line-height: 1.6;
|
|
}
|
|
|
|
@keyframes accordion-up {
|
|
from {
|
|
height: var(--radix-accordion-content-height);
|
|
}
|
|
to {
|
|
height: 0;
|
|
}
|
|
}
|
|
|
|
@keyframes accordion-down {
|
|
from {
|
|
height: 0;
|
|
}
|
|
to {
|
|
height: var(--radix-accordion-content-height);
|
|
}
|
|
}
|
|
}
|