soulsync/webui/static/style.css
Broque Thomas a167a00a0a Add enhanced search with categorized dropdown UI
Implements an enhanced search endpoint in the backend that unifies Spotify and local database results, returning categorized artists, albums, and tracks. Updates the frontend with a new dropdown overlay for live search, debounced input, categorized result rendering, and direct integration with the main results area for album/track selection. Adds new CSS for the dropdown and result cards, and updates the Track dataclass to include image URLs for richer UI display.
2025-12-29 09:56:32 -08:00

19899 lines
441 KiB
CSS

/* SoulSync WebUI - Replicating PyQt6 GUI Styling */
/* Reset and Base Styles */
* {
margin: 0;
padding: 0;
box-sizing: border-box;
}
body {
font-family: 'SF Pro Display', 'SF Pro Text', -apple-system, BlinkMacSystemFont, 'Segoe UI', 'Roboto', 'Helvetica Neue', Arial, sans-serif;
background: linear-gradient(135deg,
rgba(8, 8, 8, 1) 0%,
rgba(12, 12, 12, 1) 50%,
rgba(16, 16, 16, 1) 100%);
color: #ffffff;
overflow: hidden;
height: 100vh;
}
.hidden {
display: none !important;
}
/* Main Container Layout */
.main-container {
display: flex;
height: 100vh;
width: 100vw;
}
/* ======================================
SIDEBAR STYLING - Premium Glassmorphic Design
====================================== */
.sidebar {
width: 240px;
/* Apple-style liquid glassmorphic foundation */
background: linear-gradient(135deg,
rgba(20, 20, 20, 0.65) 0%,
rgba(12, 12, 12, 0.75) 100%);
backdrop-filter: blur(40px) saturate(1.8);
-webkit-backdrop-filter: blur(40px) saturate(1.8);
/* Soft translucent borders */
border-right: 1px solid rgba(255, 255, 255, 0.08);
border-top: 1px solid rgba(255, 255, 255, 0.12);
border-top-right-radius: 24px;
border-bottom-right-radius: 24px;
/* Soft floating shadow with inner glow */
box-shadow:
0 8px 32px rgba(0, 0, 0, 0.3),
0 4px 16px rgba(0, 0, 0, 0.2),
0 0 60px rgba(29, 185, 84, 0.06),
inset 0 1px 0 rgba(255, 255, 255, 0.1),
inset 0 -1px 0 rgba(0, 0, 0, 0.2);
display: flex;
flex-direction: column;
overflow-y: auto;
overflow-x: hidden;
/* Custom scrollbar styling */
scrollbar-width: thin;
scrollbar-color: rgba(29, 185, 84, 0.4) rgba(255, 255, 255, 0.03);
}
/* Sidebar scrollbar webkit styling */
.sidebar::-webkit-scrollbar {
width: 6px;
}
.sidebar::-webkit-scrollbar-track {
background: rgba(255, 255, 255, 0.05);
border-radius: 10px;
}
.sidebar::-webkit-scrollbar-thumb {
background: rgba(29, 185, 84, 0.5);
border-radius: 10px;
transition: background 0.3s ease;
}
.sidebar::-webkit-scrollbar-thumb:hover {
background: rgba(29, 185, 84, 0.7);
}
/* Sidebar Header */
.sidebar-header {
height: 95px;
background: linear-gradient(180deg,
rgba(29, 185, 84, 0.12) 0%,
rgba(29, 185, 84, 0.08) 30%,
rgba(29, 185, 84, 0.03) 70%,
transparent 100%);
border-bottom: 1px solid rgba(255, 255, 255, 0.08);
border-top-right-radius: 20px;
padding: 28px 24px;
display: flex;
flex-direction: column;
justify-content: center;
gap: 6px;
position: relative;
/* Subtle inner glow */
box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.1);
}
.app-name {
font-family: 'SF Pro Display', -apple-system, sans-serif;
font-size: 20px;
font-weight: 700;
background: linear-gradient(90deg, #ffffff 0%, #1ed760 60%, #1db954 100%);
-webkit-background-clip: text;
-webkit-text-fill-color: transparent;
background-clip: text;
letter-spacing: -0.8px;
margin: 0;
}
.app-subtitle {
font-family: 'SF Pro Text', -apple-system, sans-serif;
font-size: 10px;
font-weight: 500;
color: rgba(255, 255, 255, 0.65);
letter-spacing: 0.2px;
margin: 0;
margin-top: 2px;
}
/* Navigation Buttons */
.sidebar-nav {
padding: 25px 12px;
display: flex;
flex-direction: column;
gap: 8px;
}
.nav-button {
height: 52px;
width: 216px;
background: transparent;
border: 1px solid transparent;
border-radius: 16px;
cursor: pointer;
display: flex;
align-items: center;
gap: 16px;
padding: 0 18px;
transition: all 0.3s cubic-bezier(0.4, 0, 0.2, 1);
font-family: 'SF Pro Text', -apple-system, sans-serif;
font-size: 12px;
font-weight: 500;
position: relative;
overflow: hidden;
}
.nav-button:hover {
background: linear-gradient(135deg,
rgba(255, 255, 255, 0.06) 0%,
rgba(255, 255, 255, 0.03) 100%);
backdrop-filter: blur(20px);
-webkit-backdrop-filter: blur(20px);
border: 1px solid rgba(255, 255, 255, 0.1);
transform: translateX(4px);
box-shadow:
0 4px 12px rgba(0, 0, 0, 0.2),
inset 0 1px 0 rgba(255, 255, 255, 0.08);
}
.nav-button.active {
background: linear-gradient(135deg,
rgba(29, 185, 84, 0.16) 0%,
rgba(29, 185, 84, 0.12) 50%,
rgba(29, 185, 84, 0.08) 100%);
backdrop-filter: blur(20px) saturate(1.6);
-webkit-backdrop-filter: blur(20px) saturate(1.6);
border: 1px solid rgba(29, 185, 84, 0.25);
transform: translateX(6px);
box-shadow:
0 4px 16px rgba(29, 185, 84, 0.25),
0 2px 8px rgba(0, 0, 0, 0.2),
inset 0 1px 0 rgba(255, 255, 255, 0.12),
inset -1px 0 0 rgba(29, 185, 84, 0.6);
}
.nav-button.active:hover {
background: linear-gradient(135deg,
rgba(29, 185, 84, 0.22) 0%,
rgba(29, 185, 84, 0.18) 50%,
rgba(29, 185, 84, 0.12) 100%);
backdrop-filter: blur(20px) saturate(1.8);
-webkit-backdrop-filter: blur(20px) saturate(1.8);
border: 1px solid rgba(29, 185, 84, 0.35);
transform: translateX(8px);
box-shadow:
0 6px 20px rgba(29, 185, 84, 0.3),
0 3px 10px rgba(0, 0, 0, 0.2),
inset 0 1px 0 rgba(255, 255, 255, 0.15),
inset -1px 0 0 rgba(29, 185, 84, 0.7);
}
.nav-icon {
width: 28px;
height: 28px;
display: flex;
align-items: center;
justify-content: center;
font-size: 16px;
font-weight: 600;
border-radius: 10px;
background: linear-gradient(135deg,
rgba(255, 255, 255, 0.08) 0%,
rgba(255, 255, 255, 0.04) 100%);
backdrop-filter: blur(10px);
-webkit-backdrop-filter: blur(10px);
border: 1px solid rgba(255, 255, 255, 0.06);
color: rgba(255, 255, 255, 0.8);
transition: all 0.3s cubic-bezier(0.4, 0, 0.2, 1);
box-shadow:
0 2px 4px rgba(0, 0, 0, 0.15),
inset 0 1px 0 rgba(255, 255, 255, 0.08);
}
.nav-button.active .nav-icon {
color: #1ed760;
background: linear-gradient(135deg,
rgba(29, 185, 84, 0.25) 0%,
rgba(30, 215, 96, 0.20) 100%);
backdrop-filter: blur(10px) saturate(1.6);
-webkit-backdrop-filter: blur(10px) saturate(1.6);
border: 1px solid rgba(29, 185, 84, 0.3);
font-weight: 700;
box-shadow:
0 3px 8px rgba(29, 185, 84, 0.3),
0 1px 4px rgba(29, 185, 84, 0.2),
inset 0 1px 0 rgba(255, 255, 255, 0.15);
}
.nav-text {
color: rgba(255, 255, 255, 0.8);
letter-spacing: 0.1px;
}
.nav-button.active .nav-text {
color: #1ed760;
font-weight: 600;
}
/* Sidebar Spacer */
.sidebar-spacer {
flex: 1;
}
/* Media Player Section - Premium Glassmorphic Design */
.media-player {
background: linear-gradient(180deg,
rgba(28, 28, 28, 0.95) 0%,
rgba(20, 20, 20, 0.98) 50%,
rgba(14, 14, 14, 1.0) 100%);
backdrop-filter: blur(12px) saturate(1.1);
border: 1px solid rgba(255, 255, 255, 0.08);
border-top: 1px solid rgba(255, 255, 255, 0.12);
border-radius: 16px;
margin: 12px 14px;
padding: 20px;
min-height: 150px;
transition: all 0.4s cubic-bezier(0.4, 0, 0.2, 1);
box-shadow:
0 8px 24px rgba(0, 0, 0, 0.4),
0 4px 12px rgba(0, 0, 0, 0.3),
inset 0 1px 0 rgba(255, 255, 255, 0.1);
}
.media-player:hover {
border: 1px solid rgba(29, 185, 84, 0.25);
border-top: 1px solid rgba(29, 185, 84, 0.3);
background: linear-gradient(180deg,
rgba(29, 185, 84, 0.10) 0%,
rgba(28, 28, 28, 0.95) 40%,
rgba(20, 20, 20, 0.98) 70%,
rgba(14, 14, 14, 1.0) 100%);
box-shadow:
0 12px 32px rgba(0, 0, 0, 0.5),
0 6px 16px rgba(29, 185, 84, 0.2),
0 4px 12px rgba(0, 0, 0, 0.3),
inset 0 1px 0 rgba(255, 255, 255, 0.15);
}
.loading-animation {
height: 12px;
margin-bottom: 12px;
position: relative;
}
.loading-bar {
height: 4px;
background: #2a2a2a;
border-radius: 2px;
overflow: hidden;
position: relative;
}
.loading-progress {
height: 100%;
background: linear-gradient(90deg, #1db954 0%, #1ed760 100%);
border-radius: 2px;
width: 0%;
transition: width 0.3s ease;
}
.loading-text {
position: absolute;
top: 0;
left: 50%;
transform: translateX(-50%);
font-family: 'Segoe UI', sans-serif;
font-size: 7px;
font-weight: 500;
color: #b4b4b4;
line-height: 8px;
}
.media-header {
display: flex;
align-items: flex-start;
gap: 16px;
margin-bottom: 10px;
}
.media-info {
flex: 1;
min-width: 0;
display: flex;
flex-direction: column;
gap: 4px;
padding-top: 2px;
}
.track-title {
font-family: 'Spotify Circular', 'SF Pro Display', -apple-system, sans-serif;
font-size: 15px;
font-weight: 700;
color: #ffffff;
letter-spacing: -0.2px;
line-height: 1.3;
cursor: pointer;
white-space: nowrap;
overflow: hidden;
margin: 0;
transition: color 0.2s ease;
position: relative;
width: 100%;
}
.track-title .title-text {
display: inline-block;
transition: transform 0.3s ease;
}
.track-title.scrolling .title-text {
animation: marquee-scroll 10s linear infinite;
animation-delay: 1.5s;
}
.track-title.scrolling:hover .title-text {
animation-play-state: paused;
}
@keyframes marquee-scroll {
0% {
transform: translateX(0px);
}
20% {
transform: translateX(0px);
}
80% {
transform: translateX(var(--scroll-distance));
}
100% {
transform: translateX(var(--scroll-distance));
}
}
.track-title:hover {
color: #1ed760;
}
.artist-name {
font-family: 'Spotify Circular', -apple-system, sans-serif;
font-size: 12px;
font-weight: 500;
color: #a7a7a7;
letter-spacing: 0.1px;
white-space: nowrap;
overflow: hidden;
text-overflow: ellipsis;
margin: 0;
opacity: 0.9;
}
.play-button {
width: 40px;
height: 40px;
border-radius: 20px;
background: #1ed760;
border: none;
color: #000000;
font-size: 16px;
font-weight: 900;
cursor: pointer;
display: flex;
align-items: center;
justify-content: center;
transition: all 0.2s ease;
}
.play-button:hover:not(:disabled) {
background: #1fdf64;
transform: scale(1.05);
}
.play-button:active:not(:disabled) {
background: #1ca851;
transform: scale(0.95);
}
.play-button:disabled {
background: #535353;
color: #b3b3b3;
cursor: not-allowed;
}
.media-expanded {
margin-top: 8px;
padding-top: 8px;
border-top: 1px solid rgba(255, 255, 255, 0.08);
}
.album-name {
font-family: 'Spotify Circular', -apple-system, sans-serif;
font-size: 11px;
font-weight: 500;
color: #999999;
letter-spacing: 0.1px;
margin-bottom: 12px;
white-space: nowrap;
overflow: hidden;
text-overflow: ellipsis;
font-style: italic;
opacity: 0.8;
}
/* Progress Section Styling */
.progress-section {
margin-bottom: 12px;
}
.time-display {
display: flex;
justify-content: space-between;
align-items: center;
margin-bottom: 6px;
font-family: 'Spotify Circular', -apple-system, monospace;
font-size: 10px;
color: #b3b3b3;
font-weight: 400;
}
.current-time, .total-time {
min-width: 32px;
text-align: center;
}
.time-separator {
color: #666666;
}
.progress-bar-container {
position: relative;
width: 100%;
height: 20px;
}
.progress-track {
position: absolute;
top: 50%;
left: 0;
right: 0;
height: 3px;
background: #4f4f4f;
border-radius: 2px;
transform: translateY(-50%);
z-index: 1;
}
.progress-fill {
height: 100%;
background: #1db954; /* Green accent color */
border-radius: 2px;
width: 0%;
transition: width 0.1s ease;
}
.progress-bar {
top: 0;
left: 0;
width: 100%;
height: 20px;
background: transparent;
outline: none;
cursor: pointer;
-webkit-appearance: none;
appearance: none;
z-index: 2;
}
.progress-bar::-webkit-slider-track {
width: 100%;
height: 3px;
background: transparent;
border-radius: 2px;
}
.progress-bar::-webkit-slider-thumb {
-webkit-appearance: none;
appearance: none;
width: 12px;
height: 12px;
background: #1db954;
border-radius: 50%;
cursor: pointer;
border: none;
box-shadow: 0 2px 4px rgba(0, 0, 0, 0.3);
transition: all 0.15s ease;
}
.progress-bar::-webkit-slider-thumb:hover {
background: #1ed760;
transform: scale(1.1);
}
.progress-bar::-webkit-slider-thumb:active {
transform: scale(1.15);
box-shadow: 0 0 0 3px rgba(29, 185, 84, 0.3);
}
/* Firefox progress bar styling */
.progress-bar::-moz-range-track {
width: 100%;
height: 3px;
background: transparent;
border-radius: 2px;
border: none;
}
.progress-bar::-moz-range-thumb {
width: 12px;
height: 12px;
background: #1db954;
border-radius: 50%;
cursor: pointer;
border: none;
box-shadow: 0 2px 4px rgba(0, 0, 0, 0.3);
}
.progress-bar::-moz-range-thumb:hover {
background: #1ed760;
}
.media-controls {
display: flex;
align-items: center;
justify-content: space-between;
margin-top: 0px;
}
.volume-control {
display: flex;
align-items: center;
gap: 10px;
}
.volume-icon {
color: #b3b3b3;
font-size: 13px;
}
.volume-slider {
width: 80px;
height: 20px;
background: transparent;
outline: none;
cursor: pointer;
}
.volume-slider::-webkit-slider-track {
width: 100%;
height: 3px;
background: #4f4f4f;
border-radius: 1px;
}
.volume-slider::-webkit-slider-thumb {
appearance: none;
width: 12px;
height: 12px;
background: #ffffff;
border-radius: 50%;
cursor: pointer;
margin-top: -4px;
}
.volume-slider::-webkit-slider-thumb:hover {
background: #1ed760;
}
.volume-slider::-webkit-slider-runnable-track {
background: linear-gradient(to right, #1ed760 0%, #1ed760 var(--volume-percent, 70%), #4f4f4f var(--volume-percent, 70%), #4f4f4f 100%);
}
.stop-button {
width: 32px;
height: 32px;
border-radius: 16px;
background: rgba(255, 255, 255, 0.08);
border: 1px solid #b3b3b3;
color: #ffffff;
font-size: 12px;
cursor: pointer;
display: flex;
align-items: center;
justify-content: center;
transition: all 0.2s ease;
}
.stop-button:hover:not(:disabled) {
background: rgba(255, 255, 255, 0.15);
border: 1px solid #ffffff;
}
.stop-button:active:not(:disabled) {
background: rgba(255, 255, 255, 0.25);
}
.stop-button:disabled {
background: transparent;
border: 1px solid #2a2a2a;
color: #535353;
cursor: not-allowed;
}
.no-track-message {
color: #888888;
font-size: 13px;
font-weight: 500;
text-align: center;
padding: 24px 20px;
letter-spacing: 0.1px;
font-family: 'Spotify Circular', -apple-system, sans-serif;
line-height: 1.5;
opacity: 0.85;
}
/* Crypto Donation Section - Premium Glassmorphic Design */
.crypto-donation {
background: linear-gradient(180deg,
rgba(18, 18, 18, 0.95) 0%,
rgba(22, 22, 22, 0.98) 50%,
rgba(16, 16, 16, 1.0) 100%);
backdrop-filter: blur(8px) saturate(1.1);
border-top: 1px solid rgba(255, 255, 255, 0.12);
border-radius: 12px;
margin: 8px 14px;
padding: 18px 20px;
box-shadow:
0 4px 16px rgba(0, 0, 0, 0.3),
0 2px 8px rgba(0, 0, 0, 0.2),
inset 0 1px 0 rgba(255, 255, 255, 0.08);
}
.donation-header {
display: flex;
align-items: center;
justify-content: space-between;
padding: 0 20px 8px 20px;
}
.donation-title {
font-family: 'SF Pro Text', -apple-system, sans-serif;
font-size: 10px;
font-weight: 600;
color: rgba(255, 255, 255, 0.9);
letter-spacing: 0.2px;
}
.toggle-button {
width: 40px;
height: 20px;
background: rgba(255, 255, 255, 0.1);
border: 1px solid rgba(255, 255, 255, 0.2);
border-radius: 10px;
color: rgba(255, 255, 255, 0.7);
font-size: 8px;
font-weight: 500;
cursor: pointer;
transition: all 0.2s ease;
}
.toggle-button:hover {
background: rgba(255, 255, 255, 0.15);
border: 1px solid rgba(255, 255, 255, 0.3);
color: rgba(255, 255, 255, 0.9);
}
.donation-addresses {
padding: 0 12px;
}
.donation-item {
height: 32px;
display: flex;
align-items: center;
justify-content: space-between;
padding: 4px 12px;
margin: 0 0 4px 0;
border-radius: 8px;
cursor: pointer;
transition: all 0.2s ease;
}
.donation-item:hover {
background: rgba(255, 255, 255, 0.06);
border: 1px solid rgba(255, 255, 255, 0.1);
}
.donation-name {
font-family: 'SF Pro Text', -apple-system, sans-serif;
font-size: 9px;
font-weight: 500;
color: rgba(255, 255, 255, 0.8);
}
.donation-address, .donation-link {
font-family: 'Courier New', monospace;
font-size: 8px;
color: rgba(255, 255, 255, 0.5);
}
.donation-link {
font-family: 'SF Pro Text', -apple-system, sans-serif;
font-style: italic;
}
/* Version Section - Premium Glassmorphic Design */
.version-section {
height: 45px;
background: linear-gradient(180deg,
rgba(18, 18, 18, 0.95) 0%,
rgba(14, 14, 14, 0.98) 100%);
backdrop-filter: blur(8px) saturate(1.1);
border-top: 1px solid rgba(255, 255, 255, 0.08);
border-radius: 12px;
margin: 8px 14px;
display: flex;
align-items: center;
justify-content: center;
padding: 12px 20px;
box-shadow:
0 3px 12px rgba(0, 0, 0, 0.25),
0 1px 6px rgba(0, 0, 0, 0.15),
inset 0 1px 0 rgba(255, 255, 255, 0.06);
}
.version-button {
background: transparent;
border: none;
color: rgba(255, 255, 255, 0.6);
font-family: 'SF Pro Text', -apple-system, sans-serif;
font-size: 10px;
font-weight: 500;
letter-spacing: 0.1px;
padding: 2px 8px;
border-radius: 4px;
cursor: pointer;
transition: all 0.2s ease;
border: 1px solid transparent;
}
.version-button:hover {
color: #1ed760;
background: rgba(29, 185, 84, 0.1);
border: 1px solid rgba(29, 185, 84, 0.2);
}
.version-button:active {
background: rgba(29, 185, 84, 0.15);
}
/* Status Section - Premium Glassmorphic Design */
.status-section {
height: fit-content;
background: linear-gradient(180deg,
rgba(18, 18, 18, 0.95) 0%,
rgba(14, 14, 14, 0.98) 100%);
backdrop-filter: blur(8px) saturate(1.1);
border-top: 1px solid rgba(255, 255, 255, 0.08);
border-bottom-right-radius: 20px;
border-radius: 12px;
margin: 8px 14px 0 14px;
padding: 24px 0;
box-shadow:
0 4px 16px rgba(0, 0, 0, 0.3),
0 2px 8px rgba(0, 0, 0, 0.2),
inset 0 1px 0 rgba(255, 255, 255, 0.08);
}
.status-title {
font-family: 'SF Pro Text', -apple-system, sans-serif;
font-size: 11px;
font-weight: 600;
color: rgba(255, 255, 255, 0.9);
letter-spacing: 0.2px;
padding: 0 20px 8px 20px;
margin-bottom: 8px;
}
.status-indicator {
height: 38px;
display: flex;
align-items: center;
gap: 14px;
padding: 8px 20px;
}
.status-dot {
width: 18px;
height: 18px;
border-radius: 9px;
border: 1px solid rgba(255, 255, 255, 0.1);
display: flex;
align-items: center;
justify-content: center;
font-size: 10px;
font-weight: 700;
}
.status-dot.connected {
color: #1ed760;
background: linear-gradient(135deg, rgba(29, 185, 84, 0.2) 0%, rgba(30, 215, 96, 0.15) 100%);
border: 1px solid rgba(29, 185, 84, 0.3);
}
.status-dot.connected::before {
content: "●";
}
.status-dot.disconnected {
color: #ff6b6b;
background: linear-gradient(135deg, rgba(255, 107, 107, 0.15) 0%, rgba(255, 107, 107, 0.1) 100%);
border: 1px solid rgba(255, 107, 107, 0.2);
}
.status-dot.disconnected::before {
content: "●";
}
.status-name {
font-family: 'SF Pro Text', -apple-system, sans-serif;
font-size: 10px;
letter-spacing: 0.1px;
min-width: 85px;
}
.status-indicator:has(.connected) .status-name {
color: rgba(255, 255, 255, 0.95);
font-weight: 500;
}
.status-indicator:has(.disconnected) .status-name {
color: rgba(255, 255, 255, 0.5);
font-weight: 400;
}
/* =====================================
MAIN CONTENT AREA STYLING
===================================== */
.main-content {
flex: 1;
background: linear-gradient(135deg,
rgba(12, 12, 12, 0.6) 0%,
rgba(16, 16, 16, 0.7) 50%,
rgba(8, 8, 8, 0.6) 100%);
backdrop-filter: blur(40px) saturate(1.8);
-webkit-backdrop-filter: blur(40px) saturate(1.8);
overflow: auto;
}
.page {
display: none;
height: 100%;
padding: 40px;
}
.page.active {
display: block;
}
.page-header {
display: flex;
justify-content: space-between;
align-items: center;
margin-bottom: 30px;
border-bottom: 1px solid rgba(255, 255, 255, 0.1);
padding-bottom: 20px;
}
.page-header h2 {
font-family: 'SF Pro Display', -apple-system, sans-serif;
font-size: 28px;
font-weight: 700;
color: #ffffff;
margin: 0;
letter-spacing: -0.5px;
}
/* Dashboard Page Styling */
.dashboard-content {
display: flex;
gap: 40px;
height: calc(100vh - 150px);
}
.activity-section {
flex: 1;
background: rgba(255, 255, 255, 0.02);
border-radius: 12px;
padding: 24px;
border: 1px solid rgba(255, 255, 255, 0.05);
}
.activity-section h3 {
font-family: 'SF Pro Text', -apple-system, sans-serif;
font-size: 16px;
font-weight: 600;
color: rgba(255, 255, 255, 0.9);
margin-bottom: 16px;
}
.activity-feed {
max-height: 400px;
overflow-y: auto;
}
.activity-item {
display: flex;
gap: 12px;
padding: 12px 0;
border-bottom: 1px solid rgba(255, 255, 255, 0.05);
}
.activity-time {
font-size: 11px;
color: rgba(255, 255, 255, 0.5);
min-width: 80px;
}
.activity-text {
font-size: 12px;
color: rgba(255, 255, 255, 0.8);
flex: 1;
}
.activity-separator {
height: 1px;
background: rgba(255, 255, 255, 0.05);
margin: 8px 0;
}
.stats-grid {
display: grid;
grid-template-columns: 1fr;
gap: 16px;
width: 300px;
}
.stat-card {
background: linear-gradient(135deg, rgba(29, 185, 84, 0.08) 0%, rgba(255, 255, 255, 0.03) 100%);
backdrop-filter: blur(20px) saturate(1.5);
-webkit-backdrop-filter: blur(20px) saturate(1.5);
border: 1px solid rgba(29, 185, 84, 0.15);
border-radius: 16px;
padding: 24px;
text-align: center;
box-shadow:
0 4px 16px rgba(0, 0, 0, 0.2),
inset 0 1px 0 rgba(255, 255, 255, 0.1);
transition: all 0.3s cubic-bezier(0.4, 0, 0.2, 1);
}
.stat-card:hover {
transform: translateY(-2px);
box-shadow:
0 8px 24px rgba(0, 0, 0, 0.3),
0 0 20px rgba(29, 185, 84, 0.1),
inset 0 1px 0 rgba(255, 255, 255, 0.15);
border-color: rgba(29, 185, 84, 0.25);
}
.stat-value {
font-family: 'SF Pro Display', -apple-system, sans-serif;
font-size: 32px;
font-weight: 700;
color: #1ed760;
line-height: 1;
margin-bottom: 8px;
}
.stat-label {
font-size: 12px;
color: rgba(255, 255, 255, 0.7);
font-weight: 500;
}
/* Settings Page Styling - Three Column Layout */
.settings-content {
width: 100%;
display: flex;
flex-direction: column;
}
.settings-columns {
display: flex;
gap: 24px;
margin-bottom: 32px;
}
.settings-left-column, .settings-right-column, .settings-third-column {
flex: 1;
min-width: 380px;
display: flex;
flex-direction: column;
gap: 18px;
}
.settings-group {
background: #282828;
border: 1px solid #404040;
border-radius: 8px;
padding: 16px 16px 16px 16px;
}
.settings-group h3 {
font-family: 'SF Pro Text', -apple-system, sans-serif;
font-size: 14px;
font-weight: 600;
color: #ffffff;
margin-bottom: 15px;
margin-top: 10px;
padding-left: 10px;
padding-right: 5px;
}
/* API Service Frames */
.api-service-frame {
background: #333333;
border: 1px solid #444444;
border-radius: 8px;
padding: 8px 12px 12px 12px;
margin-bottom: 12px;
}
.service-title {
font-family: 'Arial', sans-serif;
font-size: 12px;
font-weight: bold;
margin-bottom: 8px;
margin-top: 0;
}
.spotify-title {
color: #1db954;
}
.tidal-title {
color: #ff6600;
}
.soulseek-title {
color: #5dade2;
}
.listenbrainz-title {
color: #eb743b;
}
/* Server Toggle Buttons */
.server-toggle-container {
display: flex;
gap: 8px;
margin-bottom: 16px;
}
.server-toggle-btn {
flex: 1;
padding: 8px 16px;
background: rgba(255, 255, 255, 0.05);
border: 1px solid rgba(255, 255, 255, 0.2);
border-radius: 6px;
color: rgba(255, 255, 255, 0.8);
font-size: 12px;
font-weight: 500;
cursor: pointer;
transition: all 0.2s ease;
display: flex;
align-items: center;
gap: 8px;
justify-content: center;
flex-direction: column;
}
.server-logo {
width: 100%;
opacity: 0.8;
transition: opacity 0.2s ease;
}
.server-toggle-btn.active {
background: rgba(29, 185, 84, 0.2);
border-color: rgba(29, 185, 84, 0.5);
color: #1ed760;
font-weight: 600;
}
.server-toggle-btn:hover {
background: rgba(255, 255, 255, 0.1);
color: #ffffff;
}
.server-toggle-btn:hover .server-logo {
opacity: 1.0;
}
.server-toggle-btn.active:hover {
background: rgba(29, 185, 84, 0.3);
}
.server-toggle-btn.active .server-logo {
opacity: 1.0;
}
.server-config-container {
padding-top: 8px;
}
/* Callback Info Styling */
.callback-info {
margin: 8px 0;
}
.callback-label {
color: #ffffff;
font-size: 11px;
margin-top: 8px;
margin-bottom: 4px;
}
.callback-url {
color: #1db954;
font-size: 11px;
font-family: 'Courier New', monospace;
background-color: rgba(29, 185, 84, 0.1);
border: 1px solid rgba(29, 185, 84, 0.3);
border-radius: 4px;
padding: 6px 8px;
margin-bottom: 6px;
user-select: all;
cursor: text;
}
.callback-help {
color: #ffffff;
font-size: 10px;
font-style: italic;
line-height: 1.3;
}
.setting-help-text {
color: #b3b3b3;
font-size: 11px;
font-style: italic;
line-height: 1.4;
margin-top: 6px;
padding: 8px 12px;
background: rgba(255, 255, 255, 0.03);
border-left: 2px solid rgba(29, 185, 84, 0.3);
border-radius: 4px;
}
/* Form Styling */
.form-group {
margin-bottom: 12px;
}
.form-group{
option{
color: black;
&:hover{
color: white;
}
}
}
.form-group label {
display: block;
font-size: 11px;
font-weight: 500;
color: rgba(255, 255, 255, 0.8);
margin-bottom: 4px;
}
.form-group input, .form-group select {
width: 100%;
padding: 8px 12px;
background: rgba(255, 255, 255, 0.05);
border: 1px solid rgba(255, 255, 255, 0.1);
border-radius: 6px;
color: #ffffff;
font-size: 12px;
transition: all 0.2s ease;
}
.form-group input:focus, .form-group select:focus {
outline: none;
border-color: #1ed760;
background: rgba(29, 185, 84, 0.05);
}
/* Checkbox Styling */
.checkbox-label {
display: flex !important;
align-items: center;
gap: 8px;
cursor: pointer;
font-size: 12px !important;
margin-bottom: 0 !important;
}
.checkbox-label input[type="checkbox"] {
width: 16px !important;
height: 16px !important;
margin: 0 !important;
accent-color: #1ed760;
cursor: pointer;
}
/* Help Text */
.help-text {
color: #ffffff;
font-size: 10px;
font-style: italic;
line-height: 1.3;
margin-top: 4px;
}
/* Supported Formats */
.supported-formats {
color: #ffffff;
font-size: 11px;
background: transparent;
border: none;
padding: 4px 0;
}
/* Read-only Fields */
.readonly-field {
padding: 8px 12px;
background: rgba(255, 255, 255, 0.02);
border: 1px solid rgba(255, 255, 255, 0.05);
border-radius: 6px;
color: rgba(255, 255, 255, 0.8);
font-size: 12px;
font-family: 'Courier New', monospace;
}
/* Form Actions */
.form-actions {
display: flex;
gap: 8px;
margin-top: 8px;
}
.test-button, .detect-button {
padding: 6px 12px;
border-radius: 6px;
font-size: 11px;
font-weight: 500;
cursor: pointer;
transition: all 0.2s ease;
border: none;
white-space: nowrap;
}
/* ===== QUALITY PROFILE STYLES ===== */
.quality-presets {
margin-bottom: 20px;
}
.quality-presets label {
display: block;
margin-bottom: 8px;
color: rgba(255, 255, 255, 0.9);
font-size: 12px;
font-weight: 500;
}
.preset-buttons {
display: flex;
gap: 8px;
}
.preset-button {
flex: 1;
padding: 10px 12px;
background: rgba(255, 255, 255, 0.05);
border: 1px solid rgba(255, 255, 255, 0.1);
border-radius: 8px;
color: rgba(255, 255, 255, 0.7);
font-size: 11px;
font-weight: 500;
cursor: pointer;
transition: all 0.3s ease;
white-space: nowrap;
}
.preset-button:hover {
background: rgba(29, 185, 84, 0.1);
border-color: rgba(29, 185, 84, 0.3);
color: #1ed760;
}
.preset-button.active {
background: rgba(29, 185, 84, 0.15);
border-color: rgba(29, 185, 84, 0.5);
color: #1ed760;
font-weight: 600;
}
.quality-tier {
margin-bottom: 16px;
padding: 12px;
background: rgba(255, 255, 255, 0.03);
border: 1px solid rgba(255, 255, 255, 0.08);
border-radius: 8px;
}
.quality-tier-header {
display: flex;
justify-content: space-between;
align-items: center;
margin-bottom: 10px;
}
.quality-tier-name {
color: rgba(255, 255, 255, 0.95);
font-size: 12px;
font-weight: 600;
}
.quality-tier-priority {
color: rgba(255, 255, 255, 0.5);
font-size: 10px;
font-weight: 500;
}
.quality-tier-sliders {
padding-left: 24px;
opacity: 1;
transition: opacity 0.3s ease;
}
.quality-tier-sliders.disabled {
opacity: 0.4;
pointer-events: none;
}
.slider-group {
margin-top: 8px;
}
.slider-group label {
display: block;
margin-bottom: 8px;
color: rgba(255, 255, 255, 0.7);
font-size: 11px;
}
.dual-slider-container {
position: relative;
height: 40px;
margin: 10px 0;
}
.range-slider {
position: absolute;
width: 100%;
height: 4px;
-webkit-appearance: none;
appearance: none;
background: transparent;
outline: none;
pointer-events: none;
}
.range-slider::-webkit-slider-track {
width: 100%;
height: 4px;
background: rgba(255, 255, 255, 0.1);
border-radius: 2px;
}
.range-slider::-webkit-slider-thumb {
-webkit-appearance: none;
appearance: none;
width: 16px;
height: 16px;
border-radius: 50%;
background: #1ed760;
cursor: pointer;
pointer-events: all;
border: 2px solid #0a0a0a;
box-shadow: 0 2px 6px rgba(0, 0, 0, 0.3);
}
.range-slider::-webkit-slider-thumb:hover {
background: #1fdf64;
transform: scale(1.1);
}
.range-slider::-moz-range-track {
width: 100%;
height: 4px;
background: rgba(255, 255, 255, 0.1);
border-radius: 2px;
}
.range-slider::-moz-range-thumb {
width: 16px;
height: 16px;
border-radius: 50%;
background: #1ed760;
cursor: pointer;
pointer-events: all;
border: 2px solid #0a0a0a;
box-shadow: 0 2px 6px rgba(0, 0, 0, 0.3);
}
.range-slider::-moz-range-thumb:hover {
background: #1fdf64;
transform: scale(1.1);
}
.range-slider-track {
position: absolute;
top: 18px;
width: 100%;
height: 4px;
background: rgba(29, 185, 84, 0.3);
border-radius: 2px;
pointer-events: none;
}
.slider-values {
display: flex;
justify-content: space-between;
align-items: center;
margin-top: 8px;
color: rgba(255, 255, 255, 0.6);
font-size: 11px;
font-weight: 500;
}
.slider-values span:first-child,
.slider-values span:last-child {
color: #1ed760;
font-weight: 600;
}
/* ===== END QUALITY PROFILE STYLES ===== */
.test-button {
background: rgba(29, 185, 84, 0.1);
color: #1ed760;
border: 1px solid rgba(29, 185, 84, 0.3);
}
.test-button:hover {
background: rgba(29, 185, 84, 0.2);
border-color: rgba(29, 185, 84, 0.5);
}
.detect-button {
background: rgba(255, 255, 255, 0.05);
color: rgba(255, 255, 255, 0.8);
border: 1px solid rgba(255, 255, 255, 0.2);
}
.detect-button:hover {
background: rgba(255, 255, 255, 0.1);
color: #ffffff;
}
/* Save Button */
.save-button {
background: #1db954;
border: none;
border-radius: 22px;
color: #000000;
font-size: 14px;
font-weight: bold;
padding: 12px 32px;
cursor: pointer;
transition: all 0.2s ease;
}
.save-button:hover {
background: #1ed760;
}
.settings-actions {
display: flex;
justify-content: center;
padding-top: 20px;
}
/* Additional Settings Components */
.path-input-group {
display: flex;
gap: 8px;
}
.path-input-group input {
flex: 1;
}
.browse-button {
padding: 10px 16px;
background: rgba(255, 255, 255, 0.05);
color: rgba(255, 255, 255, 0.8);
border: 1px solid rgba(255, 255, 255, 0.2);
border-radius: 8px;
font-size: 14px;
cursor: pointer;
white-space: nowrap;
}
.browse-button:hover {
background: rgba(255, 255, 255, 0.1);
color: #ffffff;
}
.auth-button {
background: #1db954;
color: #ffffff;
padding: 10px 20px;
border: none;
border-radius: 8px;
font-size: 14px;
font-weight: 500;
cursor: pointer;
}
.auth-button {
background: #1db954;
color: #ffffff;
padding: 10px 20px;
border: none;
border-radius: 15px;
font-size: 11px;
font-weight: 500;
cursor: pointer;
margin-top: 8px;
}
.auth-button:hover {
background: #1ed760;
}
.tidal-title + * .auth-button {
background: #ff6600;
}
.tidal-title + * .auth-button:hover {
background: #e55500;
}
/* API Test Buttons */
.api-test-buttons {
display: flex;
gap: 8px;
margin-top: 16px;
flex-wrap: wrap;
}
.api-test-buttons .test-button {
flex: 1;
min-width: 120px;
max-width: calc(33.333% - 6px);
}
/* Server Test Section */
.server-test-section {
margin-top: 16px;
text-align: center;
}
.server-test-btn {
width: 100%;
}
.reset-button, .export-button, .import-button {
padding: 10px 20px;
border-radius: 8px;
font-size: 14px;
font-weight: 500;
cursor: pointer;
transition: all 0.2s ease;
border: none;
}
.reset-button {
background: rgba(255, 107, 107, 0.1);
color: #ff6b6b;
border: 1px solid rgba(255, 107, 107, 0.3);
}
.reset-button:hover {
background: rgba(255, 107, 107, 0.2);
}
.export-button, .import-button {
background: rgba(255, 255, 255, 0.05);
color: rgba(255, 255, 255, 0.8);
border: 1px solid rgba(255, 255, 255, 0.2);
}
.export-button:hover, .import-button:hover {
background: rgba(255, 255, 255, 0.1);
color: #ffffff;
}
.cancel-button {
padding: 6px 12px;
background: rgba(255, 107, 107, 0.1);
color: #ff6b6b;
border: 1px solid rgba(255, 107, 107, 0.3);
border-radius: 6px;
font-size: 12px;
cursor: pointer;
margin-top: 8px;
}
.cancel-button:hover {
background: rgba(255, 107, 107, 0.2);
}
.status-display {
margin-top: 12px;
padding: 8px 12px;
background: rgba(255, 255, 255, 0.02);
border: 1px solid rgba(255, 255, 255, 0.05);
border-radius: 6px;
font-size: 12px;
}
.status-display .status-text {
color: rgba(255, 255, 255, 0.7);
}
.status-display.connected .status-text {
color: #1ed760;
}
.status-display.error .status-text {
color: #ff6b6b;
}
.detection-progress {
margin-top: 12px;
padding: 12px;
background: rgba(255, 255, 255, 0.02);
border: 1px solid rgba(255, 255, 255, 0.05);
border-radius: 8px;
}
.detection-progress .progress-bar {
width: 100%;
height: 6px;
background: rgba(255, 255, 255, 0.1);
border-radius: 3px;
overflow: hidden;
margin-bottom: 8px;
}
.detection-progress .progress-fill {
height: 100%;
background: linear-gradient(90deg, #1db954 0%, #1ed760 100%);
width: 0%;
transition: width 0.3s ease;
animation: pulse 2s infinite;
}
@keyframes pulse {
0%, 100% { opacity: 1; }
50% { opacity: 0.7; }
}
.detection-progress .progress-text {
font-size: 12px;
color: rgba(255, 255, 255, 0.8);
margin-bottom: 8px;
}
/* Form styling improvements */
.form-group input[type="checkbox"] {
width: auto;
margin-right: 8px;
accent-color: #1ed760;
}
.form-group input[type="number"] {
width: 120px;
}
.form-group select {
width: 200px;
}
/* Sync Page Styling */
.sync-content {
max-width: 600px;
display: flex;
flex-direction: column;
gap: 24px;
}
.playlist-section {
background: rgba(255, 255, 255, 0.02);
border: 1px solid rgba(255, 255, 255, 0.05);
border-radius: 12px;
padding: 24px;
}
.playlist-section h3 {
font-size: 16px;
color: rgba(255, 255, 255, 0.9);
margin-bottom: 16px;
}
.playlist-selector {
width: 100%;
padding: 12px 16px;
background: rgba(255, 255, 255, 0.05);
border: 1px solid rgba(255, 255, 255, 0.1);
border-radius: 8px;
color: #ffffff;
font-size: 14px;
margin-bottom: 16px;
}
.sync-button {
background: #1ed760;
color: #000000;
padding: 12px 24px;
border: none;
border-radius: 8px;
font-size: 14px;
font-weight: 600;
cursor: pointer;
}
.sync-button:hover {
background: #1fdf64;
}
.sync-progress {
background: rgba(255, 255, 255, 0.02);
border: 1px solid rgba(255, 255, 255, 0.05);
border-radius: 12px;
padding: 24px;
}
.progress-bar {
width: 100%;
height: 8px;
background: rgba(255, 255, 255, 0.1);
border-radius: 4px;
overflow: hidden;
margin-bottom: 12px;
}
.progress-fill {
height: 100%;
background: linear-gradient(90deg, #1db954 0%, #1ed760 100%);
width: 0%;
transition: width 0.3s ease;
}
.progress-text {
text-align: center;
color: rgba(255, 255, 255, 0.8);
font-size: 14px;
}
/* ======================================================= */
/* == STYLES FOR DOWNLOADS PAGE == */
/* ======================================================= */
/* Main Layout: Replicates QSplitter */
.downloads-content {
display: grid;
grid-template-columns: 1fr 370px; /* Left panel is flexible, right is fixed */
gap: 24px;
height: calc(100vh - 80px); /* Fill page height, accounting for padding */
padding: 0 40px 40px 40px;
}
.downloads-main-panel, .downloads-side-panel {
display: flex;
flex-direction: column;
gap: 16px;
overflow: hidden; /* Prevent content from overflowing panels */
}
.downloads-side-panel{
margin-top: 100px;
overflow-y: scroll;
}
/* Header: Replicates create_elegant_header() */
.downloads-header {
padding: 16px 0;
}
.downloads-header .downloads-title {
font-family: 'Segoe UI', sans-serif;
font-size: 28px;
font-weight: 700;
color: #ffffff;
letter-spacing: 1px;
}
.downloads-header .downloads-subtitle {
font-family: 'Segoe UI', sans-serif;
font-size: 13px;
color: rgba(255, 255, 255, 0.85);
font-weight: 300;
margin-top: 4px;
}
/* Search Bar: Replicates create_elegant_search_bar() */
.search-bar-container {
background: linear-gradient(to bottom, rgba(50, 50, 50, 0.8), rgba(40, 40, 40, 0.9));
border-radius: 12px;
border: 1px solid rgba(29, 185, 84, 0.3);
padding: 16px 20px;
display: flex;
gap: 16px;
align-items: center;
}
#downloads-search-input {
flex-grow: 1;
height: 40px;
background: rgba(60, 60, 60, 0.7);
border: 2px solid rgba(100, 100, 100, 0.3);
border-radius: 20px;
padding: 0 20px;
color: #ffffff;
font-size: 14px;
font-weight: 500;
outline: none;
transition: all 0.2s ease;
}
#downloads-search-input:focus {
border-color: rgba(29, 185, 84, 0.8);
background: rgba(70, 70, 70, 0.9);
}
#downloads-search-btn, #downloads-cancel-btn {
height: 40px;
border: none;
border-radius: 20px;
font-size: 13px;
font-weight: bold;
cursor: pointer;
transition: background 0.2s ease;
}
#downloads-search-btn {
background: linear-gradient(to bottom, #1ed760, #1db954);
color: #000000;
width: 120px;
}
#downloads-search-btn:hover { background: linear-gradient(to bottom, #1fdf64, #1ed760); }
#downloads-cancel-btn {
background: linear-gradient(to bottom, rgba(220, 53, 69, 0.9), rgba(200, 43, 58, 0.9));
color: #ffffff;
width: 100px;
}
#downloads-cancel-btn:hover {
background: linear-gradient(to bottom, rgba(240, 73, 89, 1.0), rgba(220, 63, 79, 1.0));
}
/* Search Status Bar */
.search-status-container {
background: linear-gradient(to right, rgba(29, 185, 84, 0.12), rgba(29, 185, 84, 0.08));
border-radius: 10px;
border: 1px solid rgba(29, 185, 84, 0.25);
padding: 8px 10px;
display: flex;
align-items: center;
gap: 12px;
}
#search-status-text {
color: rgba(255, 255, 255, 0.7);
font-size: 11px;
}
/* Search Results Area */
.search-results-container {
background: rgba(20, 20, 20, 0.3);
border-radius: 12px;
border: 1px solid rgba(64, 64, 64, 0.2);
padding: 16px;
display: flex;
flex-direction: column;
flex-grow: 1; /* Take remaining vertical space */
overflow: hidden;
}
.search-results-header h3 {
color: rgba(255, 255, 255, 0.95);
font-size: 14px;
font-weight: 600;
margin-bottom: 12px;
}
.search-results-scroll-area {
overflow-y: auto;
flex-grow: 1;
padding-right: 5px; /* Space for scrollbar */
}
.search-results-placeholder {
text-align: center;
padding: 50px;
color: rgba(255, 255, 255, 0.4);
font-size: 14px;
}
/* SearchResultItem (Single Track) Styling */
.search-result-item {
background: linear-gradient(to bottom, rgba(48, 48, 52, 0.95), rgba(38, 38, 42, 0.98));
border-radius: 18px;
border: 1px solid rgba(70, 70, 76, 0.5);
margin-bottom: 8px;
padding: 16px;
display: flex;
align-items: center;
justify-content: space-between;
transition: all 0.2s ease;
}
.search-result-item:hover {
border-color: rgba(29, 185, 84, 0.8);
transform: translateY(-2px);
}
.result-item__main-content {
display: flex;
align-items: center;
gap: 16px;
flex-grow: 1;
min-width: 0; /* Prevents text overflow issues */
}
.result-item__icon {
width: 44px;
height: 44px;
border-radius: 22px;
background: linear-gradient(to bottom right, rgba(29, 185, 84, 0.3), rgba(24, 156, 71, 0.2));
border: 2px solid rgba(29, 185, 84, 0.4);
font-size: 18px;
color: #1ed760;
display: flex;
align-items: center;
justify-content: center;
flex-shrink: 0;
}
.result-item__info {
display: flex;
flex-direction: column;
gap: 2px;
min-width: 0;
}
.result-item__title-row {
display: flex;
align-items: center;
gap: 8px;
}
.result-item__title {
font-size: 12px;
font-weight: bold;
color: #ffffff;
white-space: nowrap;
overflow: hidden;
text-overflow: ellipsis;
}
.result-item__secondary-info {
font-size: 9px;
color: rgba(179, 179, 179, 0.8);
white-space: nowrap;
overflow: hidden;
text-overflow: ellipsis;
}
.result-item__actions { display: flex; gap: 8px; }
.action-btn {
width: 46px; height: 46px; border-radius: 23px;
border: 2px solid; font-size: 18px; font-weight: bold;
cursor: pointer; transition: all 0.2s ease;
display: flex; align-items: center; justify-content: center;
}
.action-btn:hover { transform: scale(1.1); }
.action-btn--stream {
background: linear-gradient(to bottom, #ffc107, #ff9800);
border-color: rgba(255, 193, 7, 0.3);
color: #000;
}
.action-btn--download {
background: linear-gradient(to bottom, #1ed760, #1db954);
border-color: rgba(29, 185, 84, 0.3);
color: #000;
}
.action-btn--matched {
background: linear-gradient(to bottom, #9333ea, #7c28c0);
border-color: rgba(147, 51, 234, 0.3);
color: #fff;
}
/* AlbumResultItem Styling */
.album-result-item {
background: linear-gradient(to bottom, rgba(52, 52, 58, 0.95), rgba(42, 42, 48, 0.98));
border-radius: 20px;
border: 1px solid rgba(75, 75, 82, 0.5);
margin-bottom: 10px;
padding: 0;
display: flex;
flex-direction: column;
transition: all 0.2s ease;
}
.album-result-item:hover {
border-color: rgba(29, 185, 84, 0.8);
}
.album-item__header {
display: flex;
align-items: center;
gap: 16px;
padding: 16px;
cursor: pointer;
}
.album-item__icon-container { text-align: center; }
.album-item__icon {
width: 48px; height: 48px; border-radius: 24px;
background: linear-gradient(to bottom right, rgba(29, 185, 84, 0.2), rgba(24, 156, 71, 0.15));
border: 2px solid rgba(29, 185, 84, 0.4);
font-size: 24px; color: #1ed760;
display: flex; align-items: center; justify-content: center;
}
.album-item__expand-indicator {
color: rgba(29, 185, 84, 0.9); font-size: 14px; font-weight: bold;
background: rgba(29, 185, 84, 0.1); border-radius: 10px;
width: 20px; height: 20px; line-height: 20px; margin: 4px auto 0;
transition: transform 0.3s ease;
}
.album-item__info { flex-grow: 1; min-width: 0; }
.album-item__title { font-size: 12px; font-weight: bold; color: #fff; }
.album-item__details { font-size: 10px; color: rgba(179, 179, 179, 0.9); margin: 2px 0; }
.album-item__user { font-size: 9px; color: rgba(29, 185, 84, 0.8); }
.album-item__actions { display: flex; flex-direction: column; gap: 4px; }
.album-action-btn {
height: 36px; width: 160px; border-radius: 18px; border: 2px solid;
font-size: 12px; font-weight: bold; cursor: pointer; transition: background 0.2s ease;
}
.album-action-btn--download {
background: linear-gradient(to bottom, #1ed760, #1db954);
border-color: rgba(29, 185, 84, 0.3); color: #000;
}
.album-action-btn--download:hover {
background: linear-gradient(to bottom, #1fdf64, #1ed760);
}
.album-action-btn--matched {
background: linear-gradient(to bottom, #9333ea, #7c28c0);
border-color: rgba(147, 51, 234, 0.3); color: #fff;
}
.album-action-btn--matched:hover {
background: linear-gradient(to bottom, #a747fe, #903fdd);
}
/* Album Expansion and TrackItem Styling */
.album-item__tracks-container {
max-height: 0;
overflow: hidden;
transition: max-height 0.4s ease-in-out;
}
.album-result-item.expanded .album-item__tracks-container {
max-height: 1000px; /* Large value to allow content to expand */
}
.album-result-item.expanded .album-item__expand-indicator {
transform: rotate(90deg);
}
.track-item {
background: rgba(40, 40, 40, 0.5); border-radius: 8px;
border: 1px solid rgba(60, 60, 60, 0.3); margin: 2px 16px 6px 80px;
padding: 8px 12px; display: flex; align-items: center; justify-content: space-between;
}
.track-item:hover { background: rgba(50, 50, 50, 0.7); border-color: rgba(29, 185, 84, 0.5); }
.track-item__info { flex-grow: 1; min-width: 0; }
.track-item__title { display: block; font-size: 11px; font-weight: bold; color: #fff; }
.track-item__details { display: block; font-size: 9px; color: rgba(179, 179, 179, 0.8); }
.track-item__actions { display: flex; gap: 8px; }
.track-item .action-btn { width: 32px; height: 32px; border-radius: 16px; font-size: 12px; }
/* Right Panel: Controls & Download Queue */
.controls-panel {
background: linear-gradient(to bottom, rgba(40, 40, 40, 0.85), rgba(25, 25, 25, 0.95));
border-radius: 18px;
border: 1px solid rgba(80, 80, 80, 0.4);
padding: 14px 8px;
flex-shrink: 0; /* Prevent this panel from shrinking */
}
.controls-panel__header {
font-size: 12px; font-weight: bold; color: rgba(255, 255, 255, 0.9);
padding: 6px 14px;
}
.controls-panel__stats {
background: linear-gradient(to bottom, rgba(45, 45, 45, 0.7), rgba(35, 35, 35, 0.8));
border-radius: 10px; border: 1px solid rgba(80, 80, 80, 0.3);
padding: 8px 10px; margin: 0 6px;
font-size: 9px; color: rgba(255, 255, 255, 0.8);
}
.controls-panel__actions { padding: 6px; }
.controls-panel__clear-btn {
width: 100%; height: 28px;
background: linear-gradient(to bottom, rgba(220, 53, 69, 0.4), rgba(220, 53, 69, 0.25));
border: 1px solid rgba(220, 53, 69, 0.8); color: #dc3545;
border-radius: 14px; font-size: 10px; font-weight: 600; cursor: pointer;
transition: background 0.2s ease;
}
.controls-panel__clear-btn:hover {
background: linear-gradient(to bottom, rgba(220, 53, 69, 0.5), rgba(220, 53, 69, 0.35));
}
/* Download Manager (Tabs & Queue) */
.download-manager { flex-grow: 1; display: flex; flex-direction: column; }
.download-manager__tabs { display: flex; }
.tab-btn {
flex-grow: 1; padding: 6px 12px;
background: #404040; color: #ffffff;
border: 1px solid #606060; border-bottom: none;
font-size: 10px; font-weight: bold; cursor: pointer;
transition: background 0.2s ease;
}
.tab-btn:first-child { border-top-left-radius: 8px; }
.tab-btn:last-child { border-top-right-radius: 8px; }
.tab-btn.active {
background: #1db954; color: #000000; border-color: #1db954;
}
.tab-btn:hover:not(.active) {
background: #505050;
}
.download-manager__content {
background: #282828; border: 1px solid #404040;
border-bottom-left-radius: 8px; border-bottom-right-radius: 8px;
padding: 8px; flex-grow: 1;
}
.download-queue { display: none; }
.download-queue.active { display: block; }
.download-queue__empty-message { text-align: center; padding: 20px; color: rgba(255, 255, 255, 0.5); font-size: 12px; }
/* Download Queue Item */
.download-item {
background: rgba(45, 45, 45, 0.95); border-radius: 6px;
border: 1px solid rgba(60, 60, 60, 0.6); padding: 12px; margin-bottom: 6px;
}
.download-item__title {
font-size: 10px; font-weight: 500; color: #fff;
white-space: nowrap; overflow: hidden; text-overflow: ellipsis;
}
.download-item__bottom-row {
display: flex; align-items: center; justify-content: space-between; gap: 10px;
margin-top: 10px;
}
.download-item__uploader {
font-size: 9px; color: #b8b8b8; flex-grow: 1;
white-space: nowrap; overflow: hidden; text-overflow: ellipsis;
}
.download-item__progress-container { width: 90px; text-align: center; }
.progress-bar {
height: 6px; background: rgba(60, 60, 60, 0.8);
border-radius: 3px; overflow: hidden;
}
.progress-fill {
height: 100%; background: #1ed760; border-radius: 3px;
width: 0%; transition: width 0.2s linear;
}
.progress-text { font-size: 8px; color: #c0c0c0; }
.download-item__cancel-btn {
width: 60px; height: 35px; background: rgba(220, 53, 69, 0.9);
color: white; border: 1px solid rgba(220, 53, 69, 0.6);
border-radius: 4px; font-size: 9px; font-weight: 500; cursor: pointer;
transition: background 0.2s ease;
}
.download-item__cancel-btn:hover {
background: rgba(240, 73, 89, 1.0);
}
.download-item__status-container { width: auto; text-align: right; }
.download-item__open-btn {
width: 60px; height: 35px; background: rgba(40, 167, 69, 0.9);
color: white; border: 1px solid rgba(29, 185, 84, 0.6);
border-radius: 4px; font-size: 9px; font-weight: 500; cursor: pointer;
transition: background 0.2s ease;
}
.download-item__open-btn:hover {
background: rgba(50, 187, 79, 1.0);
}
.download-item__status-text { font-weight: bold; font-size: 10px; }
.status--cancelled { color: #ffa500; }
/* Artists Page Styling */
.artists-content {
height: calc(100vh - 150px);
overflow-y: auto;
}
.artists-grid {
display: grid;
grid-template-columns: repeat(auto-fill, minmax(200px, 1fr));
gap: 20px;
}
/* Loading Overlay */
.loading-overlay {
position: fixed;
top: 0;
left: 0;
width: 100%;
height: 100%;
background: rgba(0, 0, 0, 0.8);
display: flex;
flex-direction: column;
align-items: center;
justify-content: center;
z-index: 9999;
}
.loading-spinner {
width: 40px;
height: 40px;
border: 4px solid rgba(255, 255, 255, 0.1);
border-top: 4px solid #1ed760;
border-radius: 50%;
animation: spin 1s linear infinite;
}
@keyframes spin {
0% { transform: rotate(0deg); }
100% { transform: rotate(360deg); }
}
.loading-message {
color: rgba(255, 255, 255, 0.8);
margin-top: 16px;
font-size: 14px;
}
/* Toast Notifications */
.toast-container {
position: fixed;
bottom: 20px;
left: 50%;
transform: translateX(-50%);
z-index: 10000;
display: flex;
flex-direction: column;
align-items: center;
}
.toast {
background: rgba(26, 26, 26, 0.95);
border: 1px solid rgba(29, 185, 84, 0.3);
border-radius: 8px;
padding: 16px 20px;
margin-bottom: 8px;
color: #ffffff;
font-size: 14px;
box-shadow: 0 4px 12px rgba(0, 0, 0, 0.3);
animation: slideIn 0.3s ease-out;
}
.toast.success {
border-color: rgba(29, 185, 84, 0.5);
background: linear-gradient(135deg, rgba(29, 185, 84, 0.1) 0%, rgba(26, 26, 26, 0.95) 100%);
}
.toast.error {
border-color: rgba(255, 107, 107, 0.5);
background: linear-gradient(135deg, rgba(255, 107, 107, 0.1) 0%, rgba(26, 26, 26, 0.95) 100%);
}
@keyframes slideIn {
from {
transform: translateY(100%);
opacity: 0;
}
to {
transform: translateY(0);
opacity: 1;
}
}
/* Desktop-Only Optimizations */
.main-container {
min-width: 1200px; /* Ensure minimum desktop width */
}
.sidebar {
min-width: 240px; /* Fixed sidebar width for desktop */
max-width: 240px;
}
.main-content {
min-width: 960px; /* Ensure content area has enough space */
}
/* Optimize for larger screens */
@media (min-width: 1440px) {
.stats-grid {
width: 350px; /* Wider stats on large monitors */
}
.settings-content {
max-width: 900px; /* Wider settings forms */
}
}
/* ===== VERSION MODAL STYLES ===== */
.version-modal-overlay {
position: fixed;
top: 0;
left: 0;
width: 100vw;
height: 100vh;
background: rgba(0, 0, 0, 0.75);
backdrop-filter: blur(8px);
z-index: 9999;
display: flex;
align-items: center;
justify-content: center;
opacity: 1;
transition: opacity 0.3s ease-in-out;
}
.version-modal-overlay.hidden {
opacity: 0;
pointer-events: none;
}
.version-modal {
background: #1a1a1a;
border-radius: 12px;
border: 1px solid rgba(255, 255, 255, 0.1);
width: 600px;
max-width: 90vw;
height: 500px;
max-height: 90vh;
display: flex;
flex-direction: column;
box-shadow: 0 20px 60px rgba(0, 0, 0, 0.5);
transform: scale(1);
transition: transform 0.3s ease-in-out;
}
.version-modal-overlay.hidden .version-modal {
transform: scale(0.9);
}
/* Header */
.version-modal-header {
padding: 30px 30px 15px 30px;
border-bottom: 1px solid rgba(255, 255, 255, 0.1);
border-top-left-radius: 12px;
border-top-right-radius: 12px;
background: #1a1a1a;
}
.version-modal-title {
color: #ffffff;
font-size: 18px;
font-weight: 700;
letter-spacing: -0.5px;
margin: 0 0 5px 0;
font-family: 'SF Pro Display', -apple-system, BlinkMacSystemFont, 'Segoe UI', 'Roboto', sans-serif;
}
.version-modal-subtitle {
color: rgba(255, 255, 255, 0.7);
font-size: 11px;
font-weight: 500;
letter-spacing: 0.1px;
margin: 0;
font-family: 'SF Pro Text', -apple-system, BlinkMacSystemFont, 'Segoe UI', 'Roboto', sans-serif;
}
/* Content Area */
.version-modal-content {
flex: 1;
padding: 0;
overflow-y: auto;
background: #1a1a1a;
}
.version-modal-content::-webkit-scrollbar {
width: 8px;
}
.version-modal-content::-webkit-scrollbar-track {
background: #2a2a2a;
border-radius: 4px;
}
.version-modal-content::-webkit-scrollbar-thumb {
background: #555555;
border-radius: 4px;
}
.version-modal-content::-webkit-scrollbar-thumb:hover {
background: #666666;
}
.version-content-container {
padding: 25px 30px;
}
/* Feature Sections */
.version-feature-section {
margin-bottom: 25px;
padding: 18px 20px;
border-left: 3px solid rgba(29, 185, 84, 0.4);
margin-left: 5px;
background: transparent;
}
.version-section-title {
color: #1ed760;
font-size: 14px;
font-weight: 600;
letter-spacing: -0.2px;
margin: 0 0 8px 0;
font-family: 'SF Pro Text', -apple-system, BlinkMacSystemFont, 'Segoe UI', 'Roboto', sans-serif;
}
.version-section-description {
color: rgba(255, 255, 255, 0.8);
font-size: 11px;
line-height: 1.4;
margin: 0 0 12px 0;
font-family: 'SF Pro Text', -apple-system, BlinkMacSystemFont, 'Segoe UI', 'Roboto', sans-serif;
}
.version-feature-list {
list-style: none;
padding: 0;
margin: 0;
}
.version-feature-item {
color: rgba(255, 255, 255, 0.7);
font-size: 10px;
line-height: 1.5;
padding: 2px 0 2px 8px;
margin: 2px 0;
font-family: 'SF Pro Text', -apple-system, BlinkMacSystemFont, 'Segoe UI', 'Roboto', sans-serif;
}
.version-usage-note {
color: #1ed760;
font-size: 10px;
line-height: 1.4;
margin: 8px 0 0 0;
padding: 8px 0;
font-style: italic;
font-family: 'SF Pro Text', -apple-system, BlinkMacSystemFont, 'Segoe UI', 'Roboto', sans-serif;
}
/* Footer */
.version-modal-footer {
padding: 15px 30px;
border-top: 1px solid rgba(255, 255, 255, 0.08);
border-bottom-left-radius: 12px;
border-bottom-right-radius: 12px;
background: rgba(255, 255, 255, 0.02);
display: flex;
justify-content: flex-end;
}
.version-modal-close {
background: #1db954;
color: white;
border: none;
border-radius: 6px;
padding: 8px 25px;
font-size: 10px;
font-weight: 500;
letter-spacing: 0.1px;
cursor: pointer;
transition: background-color 0.2s ease;
font-family: 'SF Pro Text', -apple-system, BlinkMacSystemFont, 'Segoe UI', 'Roboto', sans-serif;
}
.version-modal-close:hover {
background: #1ed760;
}
.version-modal-close:active {
background: #169c46;
}
/* Animation for modal appearance */
@keyframes modalFadeIn {
from {
opacity: 0;
transform: scale(0.9);
}
to {
opacity: 1;
transform: scale(1);
}
}
.version-modal-overlay:not(.hidden) .version-modal {
animation: modalFadeIn 0.3s ease-out;
}
/* ===== MATCHED DOWNLOAD MODAL STYLES ===== */
.modal-overlay {
position: fixed;
top: 0;
left: 0;
width: 100vw;
height: 100vh;
background: rgba(18, 18, 18, 0.85);
backdrop-filter: blur(12px);
z-index: 10000;
display: flex;
align-items: center;
justify-content: center;
opacity: 1;
transition: opacity 0.4s ease-in-out;
}
.modal-overlay.hidden {
opacity: 0;
pointer-events: none;
}
.matching-modal {
background: linear-gradient(135deg, #1a1a1a 0%, #121212 100%);
border-radius: 20px;
border: 1px solid rgba(29, 185, 84, 0.2);
width: 1100px;
max-width: 95vw;
height: 750px;
max-height: 95vh;
display: flex;
flex-direction: column;
box-shadow: 0 25px 80px rgba(0, 0, 0, 0.7), 0 0 0 1px rgba(29, 185, 84, 0.1);
transform: scale(1);
transition: transform 0.4s ease-in-out;
overflow: hidden;
}
.modal-overlay.hidden .matching-modal {
transform: scale(0.9);
}
/* Modal Header */
.matching-modal-header {
padding: 30px 40px 20px 40px;
border-bottom: 1px solid rgba(29, 185, 84, 0.15);
background: linear-gradient(90deg, rgba(29, 185, 84, 0.03) 0%, transparent 50%);
display: flex;
justify-content: space-between;
align-items: center;
border-top-left-radius: 20px;
border-top-right-radius: 20px;
}
#matching-modal-title {
color: #ffffff;
font-size: 24px;
font-weight: 700;
letter-spacing: -0.5px;
margin: 0;
font-family: 'SF Pro Display', -apple-system, BlinkMacSystemFont, sans-serif;
}
.matching-modal-close {
background: rgba(255, 255, 255, 0.1);
color: rgba(255, 255, 255, 0.8);
border: none;
border-radius: 50%;
width: 36px;
height: 36px;
font-size: 16px;
cursor: pointer;
transition: all 0.2s ease;
display: flex;
align-items: center;
justify-content: center;
}
.matching-modal-close:hover {
background: rgba(255, 255, 255, 0.2);
color: #ffffff;
transform: scale(1.1);
}
/* Modal Content */
.matching-modal-content {
flex: 1;
padding: 30px 40px;
overflow-y: auto;
background: #121212;
}
.matching-modal-content::-webkit-scrollbar {
width: 8px;
}
.matching-modal-content::-webkit-scrollbar-track {
background: rgba(255, 255, 255, 0.05);
border-radius: 4px;
}
.matching-modal-content::-webkit-scrollbar-thumb {
background: rgba(29, 185, 84, 0.3);
border-radius: 4px;
}
.matching-modal-content::-webkit-scrollbar-thumb:hover {
background: rgba(29, 185, 84, 0.5);
}
/* Selection Stages */
.selection-stage {
opacity: 1;
transform: translateY(0);
transition: all 0.4s ease-in-out;
}
.selection-stage.hidden {
opacity: 0;
transform: translateY(20px);
pointer-events: none;
}
.stage-header {
margin-bottom: 30px;
}
.stage-header h3 {
color: #1db954;
font-size: 22px;
font-weight: 700;
margin-bottom: 8px;
font-family: 'SF Pro Display', -apple-system, BlinkMacSystemFont, sans-serif;
}
.stage-subtitle {
color: rgba(255, 255, 255, 0.7);
font-size: 16px;
font-weight: 400;
margin: 0;
font-family: 'SF Pro Text', -apple-system, BlinkMacSystemFont, sans-serif;
}
/* Suggestions Sections */
.suggestions-section, .manual-search-section {
margin-bottom: 40px;
}
.suggestions-title {
color: rgba(255, 255, 255, 0.9);
font-size: 16px;
font-weight: 600;
margin-bottom: 20px;
font-family: 'SF Pro Text', -apple-system, BlinkMacSystemFont, sans-serif;
}
.suggestions-container {
display: flex;
gap: 20px;
flex-wrap: wrap;
justify-content: flex-start;
align-items: flex-start;
min-height: 140px;
}
.suggestions-container.loading {
justify-content: center;
align-items: center;
}
/* Suggestion Cards */
.suggestion-card {
width: 220px;
height: 130px;
background: linear-gradient(135deg, #1e1e1e 0%, #2a2a2a 100%);
border: 2px solid rgba(255, 255, 255, 0.1);
border-radius: 16px;
cursor: pointer;
transition: all 0.3s ease;
overflow: hidden;
position: relative;
display: flex;
flex-direction: column;
}
.suggestion-card:hover {
border-color: rgba(29, 185, 84, 0.6);
transform: translateY(-2px);
box-shadow: 0 8px 25px rgba(29, 185, 84, 0.2);
}
.suggestion-card.selected {
border-color: #1db954;
background: linear-gradient(135deg, rgba(29, 185, 84, 0.1) 0%, rgba(29, 185, 84, 0.05) 100%);
box-shadow: 0 0 20px rgba(29, 185, 84, 0.4);
}
.suggestion-card-image {
width: 100%;
height: 80px;
object-fit: cover;
border-radius: 14px 14px 0 0;
}
.suggestion-card-overlay {
position: absolute;
top: 0;
left: 0;
right: 0;
bottom: 0;
background: linear-gradient(to bottom,
rgba(18, 18, 18, 0.3) 0%,
rgba(18, 18, 18, 0.6) 60%,
rgba(18, 18, 18, 0.9) 100%);
border-radius: 16px;
}
.suggestion-card-content {
position: absolute;
bottom: 0;
left: 0;
right: 0;
padding: 12px;
z-index: 1;
}
.suggestion-card-name {
color: #ffffff;
font-size: 16px;
font-weight: 700;
margin-bottom: 4px;
line-height: 1.2;
overflow: hidden;
text-overflow: ellipsis;
white-space: nowrap;
font-family: 'SF Pro Display', -apple-system, BlinkMacSystemFont, sans-serif;
}
.suggestion-card-details {
color: rgba(255, 255, 255, 0.7);
font-size: 12px;
font-weight: 500;
line-height: 1.2;
font-family: 'SF Pro Text', -apple-system, BlinkMacSystemFont, sans-serif;
}
.suggestion-card-confidence {
background: rgba(29, 185, 84, 0.2);
color: #1db954;
padding: 2px 8px;
border-radius: 8px;
font-size: 11px;
font-weight: 600;
display: inline-block;
margin-top: 4px;
}
/* Loading Cards */
.loading-card {
width: 220px;
height: 130px;
background: linear-gradient(135deg, #1e1e1e 0%, #2a2a2a 100%);
border: 2px solid rgba(255, 255, 255, 0.1);
border-radius: 16px;
display: flex;
align-items: center;
justify-content: center;
color: rgba(255, 255, 255, 0.6);
font-size: 14px;
font-weight: 500;
font-family: 'SF Pro Text', -apple-system, BlinkMacSystemFont, sans-serif;
}
.loading-card::before {
content: '';
width: 20px;
height: 20px;
border: 2px solid rgba(29, 185, 84, 0.3);
border-top: 2px solid #1db954;
border-radius: 50%;
animation: spin 1s linear infinite;
margin-right: 10px;
}
@keyframes spin {
0% { transform: rotate(0deg); }
100% { transform: rotate(360deg); }
}
/* Search Input */
.search-input {
width: 100%;
background: rgba(255, 255, 255, 0.05);
border: 2px solid rgba(255, 255, 255, 0.1);
border-radius: 16px;
color: #ffffff;
padding: 14px 20px;
font-size: 16px;
font-weight: 400;
margin-bottom: 20px;
transition: border-color 0.2s ease;
font-family: 'SF Pro Text', -apple-system, BlinkMacSystemFont, sans-serif;
}
.search-input:focus {
outline: none;
border-color: #1db954;
box-shadow: 0 0 0 3px rgba(29, 185, 84, 0.1);
}
.search-input::placeholder {
color: rgba(255, 255, 255, 0.5);
}
/* Modal Actions */
.matching-modal-actions {
padding: 20px 40px 30px 40px;
border-top: 1px solid rgba(29, 185, 84, 0.15);
background: linear-gradient(90deg, rgba(29, 185, 84, 0.02) 0%, transparent 50%);
display: flex;
justify-content: space-between;
align-items: center;
border-bottom-left-radius: 20px;
border-bottom-right-radius: 20px;
}
.modal-button {
padding: 12px 24px;
border: none;
border-radius: 12px;
font-size: 14px;
font-weight: 600;
cursor: pointer;
transition: all 0.2s ease;
font-family: 'SF Pro Text', -apple-system, BlinkMacSystemFont, sans-serif;
}
.modal-button--primary {
background: #1db954;
color: #ffffff;
min-width: 140px;
}
.modal-button--primary:hover:not(:disabled) {
background: #1ed760;
transform: translateY(-1px);
}
.modal-button--primary:disabled {
background: rgba(255, 255, 255, 0.1);
color: rgba(255, 255, 255, 0.4);
cursor: not-allowed;
}
.modal-button--secondary {
background: rgba(255, 255, 255, 0.1);
color: rgba(255, 255, 255, 0.8);
}
.modal-button--secondary:hover {
background: rgba(255, 255, 255, 0.2);
color: #ffffff;
}
.modal-button--cancel {
background: rgba(255, 65, 54, 0.1);
color: #ff4136;
}
.modal-button--cancel:hover {
background: rgba(255, 65, 54, 0.2);
color: #ff6b5a;
}
/* Modal Animation */
@keyframes matchingModalFadeIn {
from {
opacity: 0;
transform: scale(0.9) translateY(20px);
}
to {
opacity: 1;
transform: scale(1) translateY(0);
}
}
.modal-overlay:not(.hidden) .matching-modal {
animation: matchingModalFadeIn 0.4s ease-out;
}
/* GUI-Matching Search Results Styling */
/* Single Track Card (SearchResultItem) */
.track-result-card {
/* Premium glassmorphic foundation matching modal */
background: linear-gradient(135deg,
rgba(26, 26, 26, 0.95) 0%,
rgba(18, 18, 18, 0.98) 100%);
backdrop-filter: blur(12px) saturate(1.1);
border-radius: 20px;
border: 1px solid rgba(255, 255, 255, 0.08);
border-top: 1px solid rgba(255, 255, 255, 0.12);
margin: 12px 8px;
padding: 20px;
display: flex;
align-items: center;
gap: 18px;
position: relative;
overflow: hidden;
/* Neumorphic depth shadows - elevated card effect */
box-shadow:
/* Main depth shadow */
0 15px 35px rgba(0, 0, 0, 0.6),
/* Subtle green glow like modal */
0 0 0 1px rgba(29, 185, 84, 0.08),
/* Inner highlight for glass effect */
inset 0 1px 0 rgba(255, 255, 255, 0.06),
/* Inner shadow for depth */
inset 0 -1px 0 rgba(0, 0, 0, 0.1);
transition: all 0.3s cubic-bezier(0.4, 0, 0.2, 1);
transform: translateZ(0);
}
.track-result-card:hover {
/* Enhanced glassmorphic hover state */
background: linear-gradient(135deg,
rgba(30, 30, 30, 0.98) 0%,
rgba(22, 22, 22, 1.0) 100%);
backdrop-filter: blur(16px) saturate(1.2);
border-color: rgba(29, 185, 84, 0.3);
border-top-color: rgba(29, 185, 84, 0.4);
/* More dramatic elevated effect */
box-shadow:
0 20px 45px rgba(0, 0, 0, 0.7),
0 0 0 1px rgba(29, 185, 84, 0.15),
inset 0 1px 0 rgba(255, 255, 255, 0.1),
inset 0 -1px 0 rgba(0, 0, 0, 0.15);
transform: translateY(-2px) translateZ(0);
}
.track-icon {
background: linear-gradient(to bottom right,
rgba(29, 185, 84, 0.3),
rgba(24, 156, 71, 0.2));
border-radius: 22px;
border: 2px solid rgba(29, 185, 84, 0.4);
font-size: 18px;
color: rgba(29, 185, 84, 1.0);
width: 44px;
height: 44px;
display: flex;
align-items: center;
justify-content: center;
flex-shrink: 0;
}
.track-info {
flex: 1;
min-width: 0;
}
.track-title {
font-size: 14px;
font-weight: bold;
color: #ffffff;
margin-bottom: 2px;
}
.track-artist {
font-size: 12px;
color: #b3b3b3;
margin-bottom: 2px;
}
.track-details {
font-size: 10px;
color: #888888;
margin-bottom: 2px;
}
.track-uploader {
font-size: 10px;
color: rgba(29, 185, 84, 1.0);
font-weight: 500;
}
.track-actions {
flex-shrink: 0;
}
/* Track download button now uses shared neo-button styling above */
/* Album Card (AlbumResultItem) */
.album-result-card {
/* Premium glassmorphic foundation matching modal */
background: linear-gradient(135deg,
rgba(26, 26, 26, 0.95) 0%,
rgba(18, 18, 18, 0.98) 100%);
backdrop-filter: blur(12px) saturate(1.1);
border-radius: 24px;
border: 1px solid rgba(255, 255, 255, 0.08);
border-top: 1px solid rgba(255, 255, 255, 0.12);
margin: 12px 8px;
padding: 24px;
position: relative;
overflow: hidden;
/* Neumorphic depth shadows - elevated card effect */
box-shadow:
/* Main depth shadow */
0 18px 40px rgba(0, 0, 0, 0.6),
/* Subtle green glow like modal */
0 0 0 1px rgba(29, 185, 84, 0.08),
/* Inner highlight for glass effect */
inset 0 1px 0 rgba(255, 255, 255, 0.06),
/* Inner shadow for depth */
inset 0 -1px 0 rgba(0, 0, 0, 0.1);
transition: all 0.3s cubic-bezier(0.4, 0, 0.2, 1);
transform: translateZ(0);
}
.album-result-card:hover {
/* Enhanced glassmorphic hover state */
background: linear-gradient(135deg,
rgba(30, 30, 30, 0.98) 0%,
rgba(22, 22, 22, 1.0) 100%);
backdrop-filter: blur(16px) saturate(1.2);
border-color: rgba(29, 185, 84, 0.3);
border-top-color: rgba(29, 185, 84, 0.4);
/* More dramatic elevated effect */
box-shadow:
0 25px 50px rgba(0, 0, 0, 0.7),
0 0 0 1px rgba(29, 185, 84, 0.15),
inset 0 1px 0 rgba(255, 255, 255, 0.1),
inset 0 -1px 0 rgba(0, 0, 0, 0.15);
transform: translateY(-3px) translateZ(0);
}
.album-card-header {
display: flex;
align-items: center;
gap: 18px;
}
.album-icon {
font-size: 28px;
background: linear-gradient(to bottom right,
rgba(29, 185, 84, 0.2),
rgba(24, 156, 71, 0.15));
border-radius: 28px;
border: 2px solid rgba(29, 185, 84, 0.4);
width: 56px;
height: 56px;
display: flex;
align-items: center;
justify-content: center;
color: rgba(29, 185, 84, 1.0);
flex-shrink: 0;
}
.album-info {
flex: 1;
min-width: 0;
}
.album-title {
font-size: 16px;
font-weight: bold;
color: #ffffff;
margin-bottom: 3px;
}
.album-artist {
font-size: 13px;
color: #b3b3b3;
margin-bottom: 3px;
}
.album-details {
font-size: 11px;
color: #888888;
margin-bottom: 3px;
}
.album-uploader {
font-size: 11px;
color: rgba(29, 185, 84, 1.0);
font-weight: 500;
}
.album-actions {
flex-shrink: 0;
}
/* Album download button now uses shared neo-button styling above */
/* Album Expansion Functionality */
.album-card-header {
cursor: pointer;
position: relative;
}
.album-expand-indicator {
position: absolute;
left: -12px;
top: 50%;
transform: translateY(-50%);
font-size: 12px;
color: rgba(29, 185, 84, 0.8);
transition: transform 0.2s ease;
}
.album-result-card.expanded .album-expand-indicator {
transform: translateY(-50%) rotate(90deg);
}
/* Track List within Albums */
.album-track-list {
margin-top: 16px;
padding-top: 16px;
border-top: 1px solid rgba(255, 255, 255, 0.08);
}
/* Individual Track Items (TrackItem) - Subtle glassmorphism */
.track-item {
background: linear-gradient(135deg,
rgba(255, 255, 255, 0.03) 0%,
rgba(255, 255, 255, 0.01) 100%);
backdrop-filter: blur(8px);
border-radius: 12px;
border: 1px solid rgba(255, 255, 255, 0.05);
padding: 12px;
margin-bottom: 8px;
display: flex;
align-items: center;
justify-content: space-between;
/* Subtle inner depth */
box-shadow:
inset 0 1px 0 rgba(255, 255, 255, 0.03),
inset 0 -1px 0 rgba(0, 0, 0, 0.05);
transition: all 0.2s cubic-bezier(0.4, 0, 0.2, 1);
}
.track-item:hover {
background: linear-gradient(135deg,
rgba(255, 255, 255, 0.06) 0%,
rgba(255, 255, 255, 0.02) 100%);
backdrop-filter: blur(10px);
border-color: rgba(29, 185, 84, 0.2);
/* Enhanced subtle depth */
box-shadow:
inset 0 1px 0 rgba(255, 255, 255, 0.05),
inset 0 -1px 0 rgba(0, 0, 0, 0.08),
0 2px 8px rgba(0, 0, 0, 0.1);
}
.track-item-info {
flex: 1;
min-width: 0;
}
.track-item-title {
font-size: 12px;
font-weight: bold;
color: #ffffff;
margin-bottom: 2px;
white-space: nowrap;
overflow: hidden;
text-overflow: ellipsis;
}
.track-item-details {
font-size: 10px;
color: #888888;
}
.track-item-actions {
flex-shrink: 0;
margin-left: 8px;
}
/* Sophisticated Download Tracking Styles */
/* Download Queue Items */
.download-item {
background: linear-gradient(to bottom,
rgba(45, 45, 50, 0.95),
rgba(35, 35, 40, 0.98));
border: 1px solid rgba(65, 65, 70, 0.5);
border-radius: 12px;
margin: 6px 0;
padding: 12px;
transition: all 0.2s ease;
}
.download-item:hover {
background: linear-gradient(to bottom,
rgba(50, 50, 55, 0.98),
rgba(40, 40, 45, 1.0));
border-color: rgba(29, 185, 84, 0.6);
}
.download-item__header {
display: flex;
justify-content: space-between;
align-items: center;
margin-bottom: 8px;
}
.download-item__title {
font-size: 13px;
font-weight: 600;
color: #ffffff;
max-width: 200px;
white-space: nowrap;
overflow: hidden;
text-overflow: ellipsis;
}
.download-item__uploader {
font-size: 10px;
padding-left: 15px;
color: rgba(29, 185, 84, 1.0);
font-weight: 500;
}
.download-item__content {
display: flex;
justify-content: center;
flex-direction: row;
gap: 15px;
}
/* Progress Bar Styles */
.download-item__progress-container {
display: flex;
flex-direction: column;
gap: 4px;
}
.progress-bar {
width: 100%;
height: 6px;
background: rgba(255, 255, 255, 0.1);
border-radius: 3px;
overflow: hidden;
}
.progress-fill {
height: 100%;
background: linear-gradient(90deg, #1ed760, #1db954);
border-radius: 3px;
transition: width 0.3s ease;
}
.progress-text {
font-size: 10px;
color: #b3b3b3;
display: flex;
justify-content: space-between;
align-items: center;
}
/* Action Buttons */
.download-item__cancel-btn {
background: linear-gradient(to bottom,
rgba(255, 69, 58, 0.9),
rgba(255, 45, 85, 0.8));
border: 1px solid rgba(255, 69, 58, 0.4);
border-radius: 6px;
color: #ffffff;
font-size: 11px;
font-weight: 600;
padding: 12px 12px!important;
cursor: pointer;
transition: all 0.2s ease;
align-self: flex-start;
width: fit-content!important;
height: fit-content!important;
}
.download-item__cancel-btn:hover {
background: linear-gradient(to bottom,
rgba(255, 69, 58, 1.0),
rgba(255, 45, 85, 0.9));
border-color: rgba(255, 69, 58, 0.6);
}
.download-item__status-container {
display: flex;
align-items: center;
gap: 8px;
}
.download-item__status-text {
font-size: 11px;
font-weight: 500;
padding: 4px 8px;
border-radius: 4px;
}
.download-item__status-text.status--completed {
background: rgba(29, 185, 84, 0.2);
color: #1ed760;
border: 1px solid rgba(29, 185, 84, 0.4);
}
.download-item__status-text.status--cancelled {
background: rgba(255, 159, 10, 0.2);
color: #ff9f0a;
border: 1px solid rgba(255, 159, 10, 0.4);
}
.download-item__status-text.status--failed {
background: rgba(255, 69, 58, 0.2);
color: #ff453a;
border: 1px solid rgba(255, 69, 58, 0.4);
}
.download-item__open-btn {
background: rgba(29, 185, 84, 0.1);
color: rgba(29, 185, 84, 0.6);
border: 1px solid rgba(29, 185, 84, 0.2);
border-radius: 6px;
font-size: 11px;
padding: 6px 12px;
cursor: not-allowed;
opacity: 0.6;
}
/* Tab Management */
.download-manager__tabs {
display: flex;
gap: 4px;
margin-bottom: 8px;
}
.download-manager__tabs .tab-btn {
background: rgba(255, 255, 255, 0.05);
color: rgba(255, 255, 255, 0.7);
border: 1px solid rgba(255, 255, 255, 0.1);
border-radius: 8px;
padding: 10px 16px;
cursor: pointer;
font-size: 12px;
font-weight: 500;
transition: all 0.2s ease;
flex: 1;
text-align: center;
white-space: nowrap;
}
.download-manager__tabs .tab-btn.active {
background: linear-gradient(to bottom,
rgba(29, 185, 84, 0.2),
rgba(29, 185, 84, 0.1));
color: #1ed760;
border-color: rgba(29, 185, 84, 0.4);
}
.download-manager__tabs .tab-btn:hover:not(.active) {
background: rgba(255, 255, 255, 0.08);
border-color: rgba(255, 255, 255, 0.2);
}
/* Queue Content */
.download-queue {
display: none;
max-height: 100%;
overflow-y: auto;
padding: 8px;
}
.download-queue.active {
display: block;
}
.download-queue__empty-message {
text-align: center;
color: rgba(255, 255, 255, 0.5);
font-size: 12px;
padding: 20px;
font-style: italic;
}
/* Scrollbar Styling for Download Queue */
.download-queue::-webkit-scrollbar {
width: 6px;
}
.download-queue::-webkit-scrollbar-track {
background: rgba(255, 255, 255, 0.05);
border-radius: 3px;
}
.download-queue::-webkit-scrollbar-thumb {
background: rgba(29, 185, 84, 0.3);
border-radius: 3px;
}
.download-queue::-webkit-scrollbar-thumb:hover {
background: rgba(29, 185, 84, 0.5);
}
/* APPEND THIS CSS SNIPPET */
/* ======================================================= */
/* == STYLES FOR FILTERS PANEL == */
/* ======================================================= */
.filters-container {
background: linear-gradient(to bottom, rgba(45, 45, 45, 0.6), rgba(35, 35, 35, 0.8));
border-radius: 10px;
border: 1px solid rgba(80, 80, 80, 0.25);
padding: 8px 16px;
transition: max-height 0.4s ease-in-out;
max-height: fit-content; /* Collapsed height */
margin-top: 16px;
}
.filters-container.expanded {
max-height: fit-content; /* Expanded height */
}
.filters-container:not(.expanded) .filter-content {
display: none;
}
.filter-toggle-header {
display: flex;
}
.filter-toggle-btn {
background: linear-gradient(to bottom, rgba(80, 80, 80, 0.9), rgba(70, 70, 70, 0.95));
border: 1px solid rgba(100, 100, 100, 0.3);
border-radius: 6px;
color: rgba(255, 255, 255, 0.8);
font-size: 11px;
font-weight: 600;
padding: 6px 12px;
cursor: pointer;
transition: all 0.2s ease;
}
.filter-toggle-btn:hover {
background: linear-gradient(to bottom, rgba(90, 90, 90, 0.9), rgba(80, 80, 80, 0.95));
}
.filter-content {
padding-top: 10px;
}
.filter-group {
display: flex;
align-items: center;
gap: 8px;
margin-bottom: 8px;
}
.filter-label {
color: rgba(255, 255, 255, 0.8);
font-size: 11px;
font-weight: 600;
}
.filter-btn {
background: linear-gradient(to bottom, rgba(80, 80, 80, 0.4), rgba(60, 60, 60, 0.6));
border: 1px solid rgba(120, 120, 120, 0.3);
border-radius: 16px;
color: rgba(255, 255, 255, 0.8);
font-size: 11px;
font-weight: 500;
padding: 4px 12px;
cursor: pointer;
transition: all 0.2s ease;
}
.filter-btn:hover {
background: linear-gradient(to bottom, rgba(100, 100, 100, 0.5), rgba(80, 80, 80, 0.7));
border-color: rgba(140, 140, 140, 0.4);
}
.filter-btn.active {
background: linear-gradient(to bottom, #1ed760, #1db954);
border-color: transparent;
color: #000000;
font-weight: 700;
}
.sort-order-btn {
width: 28px;
height: 28px;
padding: 0;
font-size: 14px;
}
/* ===============================
MODAL-STYLE BUTTON STYLES
=============================== */
/* Modal-style button foundation */
.track-stream-btn,
.track-download-btn,
.track-matched-btn,
.album-download-btn,
.album-matched-btn {
/* Modal button styling */
padding: 10px 18px;
border: none;
border-radius: 12px;
font-size: 14px;
font-weight: 600;
cursor: pointer;
transition: all 0.2s ease;
font-family: 'SF Pro Text', -apple-system, BlinkMacSystemFont, sans-serif;
outline: none;
user-select: none;
-webkit-user-select: none;
position: relative;
overflow: hidden;
display: inline-flex;
align-items: center;
justify-content: center;
gap: 6px;
min-width: 80px;
}
/* Stream buttons - secondary modal style */
.track-stream-btn {
background: rgba(255, 255, 255, 0.1);
color: rgba(255, 255, 255, 0.8);
}
.track-stream-btn:hover {
background: rgba(255, 255, 255, 0.2);
color: #ffffff;
transform: translateY(-1px);
}
/* Download buttons - primary modal style */
.track-download-btn,
.album-download-btn {
background: #1db954;
color: #ffffff;
}
.track-download-btn:hover,
.album-download-btn:hover {
background: #1ed760;
transform: translateY(-1px);
}
/* Matched buttons - accent modal style */
.track-matched-btn,
.album-matched-btn {
background: rgba(147, 51, 234, 0.9);
color: #ffffff;
}
.track-matched-btn:hover,
.album-matched-btn:hover {
background: #9333ea;
transform: translateY(-1px);
}
/* Active states - simple pressed effect like modal */
.track-stream-btn:active,
.track-download-btn:active,
.track-matched-btn:active,
.album-download-btn:active,
.album-matched-btn:active {
transform: translateY(0);
}
/* Album stream buttons - modal style */
.album-stream-btn {
padding: 10px 18px;
border: none;
border-radius: 12px;
font-size: 14px;
font-weight: 600;
cursor: pointer;
transition: all 0.2s ease;
font-family: 'SF Pro Text', -apple-system, BlinkMacSystemFont, sans-serif;
outline: none;
user-select: none;
display: inline-flex;
align-items: center;
gap: 6px;
margin-right: 8px;
background: rgba(255, 255, 255, 0.1);
color: rgba(255, 255, 255, 0.8);
}
.album-stream-btn:hover {
background: rgba(255, 255, 255, 0.2);
color: #ffffff;
transform: translateY(-1px);
}
/* Disabled states - modal style */
.track-stream-btn:disabled,
.track-download-btn:disabled,
.track-matched-btn:disabled,
.album-stream-btn:disabled,
.album-download-btn:disabled,
.album-matched-btn:disabled {
background: rgba(255, 255, 255, 0.1);
color: rgba(255, 255, 255, 0.4);
cursor: not-allowed;
transform: none;
}
/* Playing states - modal style */
.track-stream-btn.playing,
.album-stream-btn.playing {
background: #1db954;
color: #ffffff;
}
/* Loading states - modal style */
.track-stream-btn.loading,
.album-stream-btn.loading {
background: rgba(255, 193, 7, 0.9);
color: #000000;
animation: pulse-loading 1.5s infinite;
}
@keyframes pulse-loading {
0% { opacity: 0.7; }
50% { opacity: 1; }
100% { opacity: 0.7; }
}
/* ======================================================= */
/* == STYLES FOR DASHBOARD PAGE == */
/* ======================================================= */
/* Main Dashboard Layout */
.dashboard-container {
display: flex;
flex-direction: column;
gap: 25px; /* Spacing between sections */
padding: 28px 24px 30px 24px;
/* Apple-style liquid glassmorphic foundation */
background: linear-gradient(135deg,
rgba(20, 20, 20, 0.55) 0%,
rgba(12, 12, 12, 0.65) 100%);
backdrop-filter: blur(40px) saturate(1.8);
-webkit-backdrop-filter: blur(40px) saturate(1.8);
border-radius: 24px;
border: 1px solid rgba(255, 255, 255, 0.08);
border-top: 1px solid rgba(255, 255, 255, 0.12);
margin: 20px;
/* Soft floating shadow */
box-shadow:
0 8px 32px rgba(0, 0, 0, 0.3),
0 4px 16px rgba(0, 0, 0, 0.2),
inset 0 1px 0 rgba(255, 255, 255, 0.08);
}
.dashboard-section {
display: flex;
flex-direction: column;
gap: 15px; /* Spacing within a section (e.g., between title and content) */
padding: 20px 0;
border-bottom: 1px solid rgba(255, 255, 255, 0.08);
}
.dashboard-section:last-child {
border-bottom: none;
}
.section-title {
font-family: 'SF Pro Display', -apple-system, sans-serif;
font-size: 22px;
font-weight: 700;
color: #ffffff;
margin: 0 0 8px 0;
line-height: 1.2;
padding-bottom: 5px;
border-bottom: 1px solid rgba(255, 255, 255, 0.1);
}
/* Header Styling */
.dashboard-header {
display: flex;
align-items: flex-start;
justify-content: space-between;
padding: 0 0 16px 0;
border-bottom: 1px solid rgba(255, 255, 255, 0.08);
margin-bottom: 20px;
}
.header-text {
display: flex;
flex-direction: column;
gap: 5px;
}
.header-title {
font-size: 28px;
font-weight: 700;
color: #ffffff;
margin: 0 0 8px 0;
line-height: 1.2;
}
.header-subtitle {
font-size: 14px;
color: #b3b3b3;
line-height: 1.5;
}
.header-spacer {
flex-grow: 1; /* Pushes buttons to the right */
}
.header-actions {
display: flex;
gap: 10px;
}
.header-button {
height: 45px;
border: none;
border-radius: 22px;
color: #000000;
font-size: 14px;
font-weight: 600;
padding: 12px 24px;
cursor: pointer;
transition: all 0.2s ease;
font-family: 'SF Pro Text', -apple-system, BlinkMacSystemFont, sans-serif;
outline: none;
user-select: none;
/* Enhanced glassmorphic effect */
backdrop-filter: blur(8px) saturate(1.2);
border: 1px solid rgba(255, 255, 255, 0.1);
box-shadow:
0 8px 20px rgba(0, 0, 0, 0.3),
inset 0 1px 0 rgba(255, 255, 255, 0.2);
}
.header-button:hover {
transform: translateY(-1px);
box-shadow:
0 6px 20px rgba(0, 0, 0, 0.4),
0 4px 16px rgba(0, 0, 0, 0.3),
inset 0 1px 0 rgba(255, 255, 255, 0.2);
}
.wishlist-button {
background: linear-gradient(135deg, #1db954 0%, #1ed760 100%);
}
.wishlist-button:hover {
background: linear-gradient(135deg, #1ed760 0%, #22ff6b 100%);
}
/* Wishlist button states based on count */
.wishlist-button.wishlist-inactive {
background: linear-gradient(135deg, #404040 0%, #505050 100%);
color: #888888;
}
.wishlist-button.wishlist-inactive:hover {
background: linear-gradient(135deg, #505050 0%, #666666 100%);
color: #999999;
}
.wishlist-button.wishlist-active {
background: linear-gradient(135deg, #1db954 0%, #1ed760 100%);
color: #000000;
}
.wishlist-button.wishlist-active:hover {
background: linear-gradient(135deg, #1ed760 0%, #22ff6b 100%);
}
.watchlist-button {
background: linear-gradient(135deg, #ffc107 0%, #ffca28 100%);
}
.watchlist-button:hover {
background: linear-gradient(135deg, #ffca28 0%, #ffd54f 100%);
}
/* Service Status Grid */
.service-status-grid {
display: grid;
grid-template-columns: repeat(auto-fill, minmax(250px, 1fr));
gap: 20px;
}
.service-card {
/* Enhanced glassmorphic foundation matching modal */
background: linear-gradient(135deg,
rgba(20, 20, 20, 0.95) 0%,
rgba(12, 12, 12, 0.98) 100%);
backdrop-filter: blur(20px) saturate(1.2);
border-radius: 20px;
border: 1px solid rgba(255, 255, 255, 0.12);
border-top: 1px solid rgba(255, 255, 255, 0.18);
padding: 20px;
position: relative;
overflow: hidden;
/* Premium shadow effect matching modal */
box-shadow:
0 20px 60px rgba(0, 0, 0, 0.6),
0 8px 32px rgba(0, 0, 0, 0.4),
0 0 40px rgba(29, 185, 84, 0.1),
inset 0 1px 0 rgba(255, 255, 255, 0.15);
display: flex;
flex-direction: column;
gap: 8px;
transition: all 0.2s ease;
transform: translateZ(0);
}
.service-card:hover {
transform: translateY(-1px);
border-color: rgba(255, 255, 255, 0.18);
box-shadow:
0 24px 70px rgba(0, 0, 0, 0.7),
0 10px 38px rgba(0, 0, 0, 0.5),
0 0 48px rgba(29, 185, 84, 0.15),
inset 0 1px 0 rgba(255, 255, 255, 0.2);
}
.service-card-header {
display: flex;
justify-content: space-between;
align-items: center;
}
.service-card-title {
font-size: 14px;
font-weight: 700;
color: #ffffff;
}
.service-card-indicator {
font-size: 18px;
}
.service-card-indicator.connected {
color: #1db954; /* Green */
}
.service-card-indicator.disconnected {
color: #ff4444; /* Red */
}
.service-card-status-text {
font-size: 12px;
color: #b3b3b3;
}
.service-card-response-time {
font-size: 11px;
color: #888888;
}
.service-card-footer {
margin-top: auto; /* Pushes button to the bottom */
padding-top: 8px;
}
.service-card-button {
/* Modal-style button matching new button system */
width: 100%;
padding: 10px 16px;
border: none;
border-radius: 12px;
font-size: 14px;
font-weight: 600;
cursor: pointer;
transition: all 0.2s ease;
font-family: 'SF Pro Text', -apple-system, BlinkMacSystemFont, sans-serif;
outline: none;
user-select: none;
/* Secondary modal style */
background: rgba(255, 255, 255, 0.1);
color: rgba(255, 255, 255, 0.8);
}
.service-card-button:hover {
background: rgba(255, 255, 255, 0.2);
color: #ffffff;
transform: translateY(-1px);
}
/* System Stats Grid */
.stats-grid-dashboard {
display: grid;
grid-template-columns: repeat(auto-fill, minmax(200px, 1fr));
gap: 20px;
}
.stat-card-dashboard {
/* Enhanced glassmorphic foundation matching modal */
background: linear-gradient(135deg,
rgba(20, 20, 20, 0.95) 0%,
rgba(12, 12, 12, 0.98) 100%);
backdrop-filter: blur(20px) saturate(1.2);
border-radius: 20px;
border: 1px solid rgba(255, 255, 255, 0.12);
border-top: 1px solid rgba(255, 255, 255, 0.18);
padding: 24px 20px;
position: relative;
overflow: hidden;
/* Premium shadow effect matching modal */
box-shadow:
0 20px 60px rgba(0, 0, 0, 0.6),
0 8px 32px rgba(0, 0, 0, 0.4),
0 0 40px rgba(29, 185, 84, 0.1),
inset 0 1px 0 rgba(255, 255, 255, 0.15);
display: flex;
flex-direction: column;
gap: 5px;
transition: all 0.2s ease;
transform: translateZ(0);
}
.stat-card-dashboard:hover {
transform: translateY(-1px);
border-color: rgba(255, 255, 255, 0.18);
box-shadow:
0 24px 70px rgba(0, 0, 0, 0.7),
0 10px 38px rgba(0, 0, 0, 0.5),
0 0 48px rgba(29, 185, 84, 0.15),
inset 0 1px 0 rgba(255, 255, 255, 0.2);
}
.stat-card-title {
font-size: 12px;
color: #b3b3b3;
}
.stat-card-value {
font-size: 26px;
font-weight: 700;
color: #ffffff;
}
.stat-card-subtitle {
font-size: 11px;
color: #888888;
}
/* Tools & Operations Grid */
.tools-grid {
display: grid;
grid-template-columns: repeat(auto-fill, minmax(400px, 1fr));
gap: 20px;
}
.tool-card {
/* Enhanced glassmorphic foundation matching modal */
background: linear-gradient(135deg,
rgba(20, 20, 20, 0.95) 0%,
rgba(12, 12, 12, 0.98) 100%);
backdrop-filter: blur(20px) saturate(1.2);
border-radius: 20px;
border: 1px solid rgba(255, 255, 255, 0.12);
border-top: 1px solid rgba(255, 255, 255, 0.18);
padding: 24px;
position: relative;
overflow: hidden;
/* Premium shadow effect matching modal */
box-shadow:
0 20px 60px rgba(0, 0, 0, 0.6),
0 8px 32px rgba(0, 0, 0, 0.4),
0 0 40px rgba(29, 185, 84, 0.1),
inset 0 1px 0 rgba(255, 255, 255, 0.15);
display: flex;
flex-direction: column;
gap: 12px;
transition: all 0.2s ease;
transform: translateZ(0);
}
.tool-card:hover {
transform: translateY(-1px);
border-color: rgba(255, 255, 255, 0.18);
box-shadow:
0 24px 70px rgba(0, 0, 0, 0.7),
0 10px 38px rgba(0, 0, 0, 0.5),
0 0 48px rgba(29, 185, 84, 0.15),
inset 0 1px 0 rgba(255, 255, 255, 0.2);
}
.tool-card-title {
font-size: 16px;
font-weight: 700;
color: #ffffff;
}
.tool-card-info {
font-size: 12px;
color: #b3b3b3;
min-height: 2em; /* Reserve space for two lines */
}
.tool-card-controls {
display: flex;
gap: 10px;
align-items: center;
}
.tool-card-controls select {
flex-grow: 1;
padding: 10px 16px;
background: linear-gradient(135deg,
rgba(51, 51, 51, 0.95) 0%,
rgba(34, 34, 34, 0.98) 100%);
border: 1px solid rgba(255, 255, 255, 0.1);
border-radius: 12px;
color: #ffffff;
font-size: 14px;
font-family: 'SF Pro Text', -apple-system, BlinkMacSystemFont, sans-serif;
outline: none;
transition: all 0.2s ease;
}
.tool-card-controls select:hover {
border-color: rgba(255, 255, 255, 0.2);
background: linear-gradient(135deg,
rgba(58, 58, 58, 0.95) 0%,
rgba(40, 40, 40, 0.98) 100%);
}
.tool-card-controls select option {
background: #333333;
color: #ffffff;
}
.tool-card-controls button {
/* Modal-style primary button */
padding: 10px 20px;
border: none;
border-radius: 12px;
font-size: 14px;
font-weight: 600;
cursor: pointer;
transition: all 0.2s ease;
font-family: 'SF Pro Text', -apple-system, BlinkMacSystemFont, sans-serif;
outline: none;
user-select: none;
/* Primary modal style */
background: #1db954;
color: #ffffff;
min-width: 140px;
}
.tool-card-controls button:hover:not(:disabled) {
background: #1ed760;
transform: translateY(-1px);
}
.tool-card-controls button:disabled {
background: rgba(255, 255, 255, 0.1);
color: rgba(255, 255, 255, 0.4);
cursor: not-allowed;
transform: none;
}
/* Media Scan Button Styling */
.media-scan-btn {
display: flex;
align-items: center;
justify-content: center;
gap: 10px;
background: linear-gradient(135deg, #667eea, #764ba2) !important;
padding: 14px 24px !important;
font-size: 15px !important;
box-shadow: 0 4px 16px rgba(102, 126, 234, 0.3);
width: 100%;
}
.media-scan-btn:hover:not(:disabled) {
background: linear-gradient(135deg, #7c8ff0, #8a5ab8) !important;
box-shadow: 0 6px 20px rgba(102, 126, 234, 0.4);
transform: translateY(-2px);
}
.media-scan-btn .scan-icon {
font-size: 18px;
animation: pulse 2s ease-in-out infinite;
}
.media-scan-btn:disabled .scan-icon {
animation: spin 1s linear infinite;
}
@keyframes pulse {
0%, 100% { opacity: 1; transform: scale(1); }
50% { opacity: 0.7; transform: scale(1.1); }
}
@keyframes spin {
from { transform: rotate(0deg); }
to { transform: rotate(360deg); }
}
.tool-card-progress-section {
padding-top: 10px;
border-top: 1px solid #404040;
display: flex;
flex-direction: column;
gap: 8px;
}
.progress-phase-label {
font-size: 12px;
color: #b3b3b3;
}
.progress-details-label {
font-size: 11px;
color: #888888;
text-align: center;
}
.progress-bar-container {
height: 8px;
background: #555555;
border-radius: 4px;
overflow: hidden;
}
.progress-bar-fill {
height: 100%;
background: #1db954;
border-radius: 4px;
width: 0%;
transition: width 0.3s ease;
}
/* Activity Feed */
.activity-feed-container {
/* Premium glassmorphic foundation */
background: linear-gradient(135deg,
rgba(26, 26, 26, 0.95) 0%,
rgba(18, 18, 18, 0.98) 100%);
backdrop-filter: blur(12px) saturate(1.1);
border-radius: 16px;
border: 1px solid rgba(255, 255, 255, 0.08);
border-top: 1px solid rgba(255, 255, 255, 0.12);
padding: 8px;
position: relative;
overflow: hidden;
/* Neumorphic depth shadows */
box-shadow:
0 18px 40px rgba(0, 0, 0, 0.6),
0 0 0 1px rgba(29, 185, 84, 0.08),
inset 0 1px 0 rgba(255, 255, 255, 0.06),
inset 0 -1px 0 rgba(0, 0, 0, 0.1);
max-height: 350px;
overflow-y: auto;
}
.activity-item {
display: flex;
align-items: center;
gap: 15px;
padding: 10px 15px;
border-bottom: 1px solid #404040;
}
.activity-item:last-child {
border-bottom: none;
}
.activity-icon {
font-size: 18px;
width: 32px;
height: 32px;
background: rgba(29, 185, 84, 0.1);
border-radius: 16px;
display: flex;
align-items: center;
justify-content: center;
}
.activity-text-content {
flex-grow: 1;
}
.activity-title {
font-size: 12px;
font-weight: 500;
color: #ffffff;
}
.activity-subtitle {
font-size: 11px;
color: #b3b3b3;
}
.activity-time {
font-size: 11px;
color: #b3b3b3;
white-space: nowrap;
}
/* Responsive Design Enhancements */
@media (max-width: 1200px) {
.tools-grid {
grid-template-columns: 1fr;
}
.service-status-grid {
grid-template-columns: repeat(auto-fill, minmax(220px, 1fr));
}
.stats-grid-dashboard {
grid-template-columns: repeat(auto-fill, minmax(180px, 1fr));
}
}
@media (max-width: 768px) {
.dashboard-header {
flex-direction: column;
align-items: flex-start;
gap: 15px;
}
.header-actions {
width: 100%;
justify-content: flex-start;
}
.header-button {
flex: 1;
min-width: 120px;
}
.service-status-grid,
.stats-grid-dashboard {
grid-template-columns: 1fr;
gap: 15px;
}
.tool-card-controls {
flex-direction: column;
align-items: stretch;
}
.tool-card-controls button {
width: 100%;
min-width: auto;
}
}
/* Custom Scrollbar for Activity Feed */
.activity-feed-container::-webkit-scrollbar {
width: 8px;
}
.activity-feed-container::-webkit-scrollbar-track {
background: rgba(255, 255, 255, 0.05);
border-radius: 4px;
}
.activity-feed-container::-webkit-scrollbar-thumb {
background: rgba(29, 185, 84, 0.3);
border-radius: 4px;
}
.activity-feed-container::-webkit-scrollbar-thumb:hover {
background: rgba(29, 185, 84, 0.5);
}
/* Enhanced Progress Bar Animation */
.progress-bar-fill {
height: 100%;
background: linear-gradient(90deg,
#1db954 0%,
#1ed760 50%,
#22ff6b 100%);
border-radius: 4px;
width: 0%;
transition: width 0.3s ease;
position: relative;
}
/* Progress bar shimmer effect when active */
.progress-bar-fill:not([style*="width: 0%"])::after {
content: '';
position: absolute;
top: 0;
left: -100%;
width: 100%;
height: 100%;
background: linear-gradient(90deg,
transparent 0%,
rgba(255, 255, 255, 0.2) 50%,
transparent 100%);
animation: shimmer 2s infinite;
}
@keyframes shimmer {
0% { left: -100%; }
100% { left: 100%; }
}
/* Styles for Stats inside the DB Updater Tool Card */
.tool-card-stats {
display: grid;
grid-template-columns: 1fr 1fr;
gap: 8px;
padding: 10px;
background: rgba(0, 0, 0, 0.2);
border-radius: 6px;
margin-top: 5px; /* Add some space above */
margin-bottom: 5px; /* Add some space below */
}
.stat-item {
display: flex;
justify-content: space-between;
align-items: center;
font-size: 12px;
}
.stat-item-label {
color: #b3b3b3;
}
.stat-item-value {
color: #ffffff;
font-weight: 600;
background-color: rgba(29, 185, 84, 0.1);
border-radius: 4px;
padding: 2px 6px;
}
/* ======================================================= */
/* == STYLES FOR SYNC PAGE (REDESIGNED) == */
/* ======================================================= */
/* Main Sync Page Layout */
.sync-header {
margin-bottom: 25px;
}
.sync-title {
font-size: 28px;
font-weight: 700;
color: #ffffff;
}
.sync-subtitle {
font-size: 14px;
color: #b3b3b3;
margin-top: 5px;
}
.sync-content-area {
display: grid;
grid-template-columns: 2.5fr 0.75fr; /* More space for main panel, smaller sidebar */
gap: 25px;
/* min-height: calc(90vh - 200px); Minimum height, but allow expansion */
height: 95%;
}
/* Hide sidebar on laptop and smaller screens */
@media (max-width: 1300px) {
.sync-content-area {
grid-template-columns: 1fr; /* Single column - main panel takes full width */
gap: 0;
}
.sync-sidebar {
display: none !important; /* Hide sidebar completely - use !important to override other rules */
}
}
.sync-main-panel, .sync-sidebar {
background: linear-gradient(135deg, rgba(26, 26, 26, 0.95), rgba(18, 18, 18, 0.98));
backdrop-filter: blur(10px);
border-radius: 16px;
border: 1px solid rgba(255, 255, 255, 0.08);
padding: 20px;
display: flex;
flex-direction: column;
box-shadow: 0 15px 35px rgba(0,0,0,0.5);
}
.sync-main-panel {
overflow-y: auto;
overflow-x: hidden;
}
.sync-sidebar {
overflow: hidden;
}
/* Tab System */
.sync-tabs {
display: flex;
gap: 2px;
margin-bottom: 15px;
background: rgba(0,0,0,0.2);
border-radius: 12px;
padding: 4px;
}
.sync-tab-button {
flex: 1;
padding: 12px;
background: transparent;
color: #b3b3b3;
border: none;
border-radius: 10px;
font-size: 13px;
font-weight: bold;
cursor: pointer;
transition: all 0.3s ease;
display: flex;
align-items: center;
justify-content: center;
gap: 8px;
}
.sync-tab-button.active {
background: #1db954;
color: #000000;
box-shadow: 0 4px 15px rgba(29, 185, 84, 0.3);
}
.sync-tab-button[data-tab="tidal"].active { background: #ff6600; color: #fff; box-shadow: 0 4px 15px rgba(255, 102, 0, 0.3); }
.sync-tab-button[data-tab="youtube"].active { background: #ff0000; color: #fff; box-shadow: 0 4px 15px rgba(255, 0, 0, 0.3); }
.sync-tab-button:hover:not(.active) {
background: rgba(255, 255, 255, 0.1);
color: #ffffff;
}
.tab-icon {
width: 16px;
height: 16px;
background-size: contain;
background-repeat: no-repeat;
background-position: center;
}
.spotify-icon {
background-image: url('data:image/svg+xml;charset=utf-8,<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="%231db954"><path d="M12 0C5.4 0 0 5.4 0 12s5.4 12 12 12 12-5.4 12-12S18.66 0 12 0zm5.521 17.34c-.24.359-.66.48-1.021.24-2.82-1.74-6.36-2.101-10.561-1.141-.418.122-.779-.179-.899-.539-.12-.421.18-.78.54-.9 4.56-1.021 8.52-.6 11.64 1.32.42.18.479.659.301 1.02zm1.44-3.3c-.301.42-.841.6-1.262.3-3.239-1.98-8.159-2.58-11.939-1.38-.479.12-1.02-.12-1.14-.6-.12-.48.12-1.021.6-1.141C9.6 9.9 15 10.561 18.72 12.84c.361.181.48.78.241 1.2zm.12-3.36C15.24 8.4 8.82 8.16 5.16 9.301c-.6.179-1.2-.181-1.38-.721-.18-.601.18-1.2.72-1.381 4.26-1.26 11.28-1.02 15.721 1.621.539.3.719 1.02.42 1.56-.299.421-1.02.599-1.559.3z"/></svg>');
}
.tidal-icon {
background-image: url('data:image/svg+xml;charset=utf-8,<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="%23ffffff"><path d="M12.012 3.992L8.008 7.996 12.012 12l4.004-4.004-4.004-4.004zm7.996 8.008L16.004 8.004 12 12.008l4.004 4.004L20.008 12zm-16.008 0L8.004 16.004 12 12l-4.004-4.004L3.996 12zm8.004 4.004L8.004 20.008 12.012 24l4.004-4.004-4.004-3.996z"/></svg>');
}
.youtube-icon {
background-image: url('data:image/svg+xml;charset=utf-8,<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="%23ff0000"><path d="M23.498 6.186a3.016 3.016 0 0 0-2.122-2.136C19.505 3.545 12 3.545 12 3.545s-7.505 0-9.377.505A3.017 3.017 0 0 0 .502 6.186C0 8.07 0 12 0 12s0 3.93.502 5.814a3.016 3.016 0 0 0 2.122 2.136c1.871.505 9.376.505 9.376.505s7.505 0 9.377-.505a3.015 3.015 0 0 0 2.122-2.136C24 15.93 24 12 24 12s0-3.93-.502-5.814zM9.545 15.568V8.432L15.818 12l-6.273 3.568z"/></svg>');
}
.beatport-icon {
background-image: url('data:image/svg+xml;charset=utf-8,<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="%2301FF95"><path d="M2 6h20v2H2zm0 5h20v2H2zm0 5h20v2H2z"/></svg>');
}
/* Active tab icons - make them white for better contrast */
.sync-tab-button.active .spotify-icon {
background-image: url('data:image/svg+xml;charset=utf-8,<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="%23ffffff"><path d="M12 0C5.4 0 0 5.4 0 12s5.4 12 12 12 12-5.4 12-12S18.66 0 12 0zm5.521 17.34c-.24.359-.66.48-1.021.24-2.82-1.74-6.36-2.101-10.561-1.141-.418.122-.779-.179-.899-.539-.12-.421.18-.78.54-.9 4.56-1.021 8.52-.6 11.64 1.32.42.18.479.659.301 1.02zm1.44-3.3c-.301.42-.841.6-1.262.3-3.239-1.98-8.159-2.58-11.939-1.38-.479.12-1.02-.12-1.14-.6-.12-.48.12-1.021.6-1.141C9.6 9.9 15 10.561 18.72 12.84c.361.181.48.78.241 1.2zm.12-3.36C15.24 8.4 8.82 8.16 5.16 9.301c-.6.179-1.2-.181-1.38-.721-.18-.601.18-1.2.72-1.381 4.26-1.26 11.28-1.02 15.721 1.621.539.3.719 1.02.42 1.56-.299.421-1.02.599-1.559.3z"/></svg>');
}
.sync-tab-button.active .youtube-icon {
background-image: url('data:image/svg+xml;charset=utf-8,<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="%23ffffff"><path d="M23.498 6.186a3.016 3.016 0 0 0-2.122-2.136C19.505 3.545 12 3.545 12 3.545s-7.505 0-9.377.505A3.017 3.017 0 0 0 .502 6.186C0 8.07 0 12 0 12s0 3.93.502 5.814a3.016 3.016 0 0 0 2.122 2.136c1.871.505 9.376.505 9.376.505s7.505 0 9.377-.505a3.015 3.015 0 0 0 2.122-2.136C24 15.93 24 12 24 12s0-3.93-.502-5.814zM9.545 15.568V8.432L15.818 12l-6.273 3.568z"/></svg>');
}
.sync-tab-button.active .beatport-icon {
background-image: url('data:image/svg+xml;charset=utf-8,<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="%23ffffff"><path d="M2 6h20v2H2zm0 5h20v2H2zm0 5h20v2H2z"/></svg>');
}
.sync-tab-content {
display: none;
flex-direction: column;
gap: 15px;
flex-grow: 1;
overflow: hidden;
}
.sync-tab-content.active {
display: flex;
}
/* Playlist Section Styling */
.playlist-header {
display: flex;
justify-content: space-between;
align-items: center;
padding: 10px;
}
.playlist-header h3 {
font-size: 16px;
font-weight: bold;
color: #ffffff;
}
.refresh-button {
background: #1db954;
border: none;
border-radius: 17px;
color: #000000;
font-size: 11px;
font-weight: bold;
padding: 8px 16px;
cursor: pointer;
transition: all 0.2s ease;
}
.refresh-button:hover { transform: scale(1.05); }
.refresh-button.tidal { background: #ff6600; color: #fff; }
.refresh-button.tidal:hover { background: #ff7700; }
.refresh-button.beatport { background: #01FF95; color: #000; }
.refresh-button.beatport:hover { background: #00E085; }
/* ================================= */
/* BEATPORT NESTED TABS SYSTEM */
/* ================================= */
.beatport-tabs {
display: flex;
gap: 5px;
margin-bottom: 20px;
padding: 5px;
background: rgba(20, 20, 20, 0.6);
border-radius: 12px;
border: 1px solid rgba(255, 255, 255, 0.08);
}
.beatport-tab-button {
flex: 1;
background: transparent;
border: none;
padding: 12px 20px;
border-radius: 8px;
color: #888;
font-size: 13px;
font-weight: 500;
cursor: pointer;
transition: all 0.3s ease;
display: flex;
align-items: center;
justify-content: center;
gap: 8px;
}
.beatport-tab-button:hover {
background: rgba(1, 255, 149, 0.1);
color: #01FF95;
}
.beatport-tab-button.active {
background: linear-gradient(135deg, #01FF95 0%, #00E085 100%);
color: #000;
font-weight: 600;
}
.beatport-tab-button .tab-icon {
width: 14px;
height: 14px;
}
.browse-icon {
background-image: url('data:image/svg+xml;charset=utf-8,<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="%23888888"><path d="M12 2l3.09 6.26L22 9.27l-5 4.87 1.18 6.88L12 17.77l-6.18 3.25L7 14.14 2 9.27l6.91-1.01L12 2z"/></svg>');
}
.beatport-tab-button.active .browse-icon {
background-image: url('data:image/svg+xml;charset=utf-8,<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="%23000000"><path d="M12 2l3.09 6.26L22 9.27l-5 4.87 1.18 6.88L12 17.77l-6.18 3.25L7 14.14 2 9.27l6.91-1.01L12 2z"/></svg>');
}
.playlist-icon {
background-image: url('data:image/svg+xml;charset=utf-8,<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="%23888888"><path d="M3 13h2v-2H3v2zm0 4h2v-2H3v2zm0-8h2V7H3v2zm4 4h14v-2H7v2zm0 4h14v-2H7v2zM7 7v2h14V7H7z"/></svg>');
}
.beatport-tab-button.active .playlist-icon {
background-image: url('data:image/svg+xml;charset=utf-8,<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="%23000000"><path d="M3 13h2v-2H3v2zm0 4h2v-2H3v2zm0-8h2V7H3v2zm4 4h14v-2H7v2zm0 4h14v-2H7v2zM7 7v2h14V7H7z"/></svg>');
}
.rebuild-icon {
background-image: url('data:image/svg+xml;charset=utf-8,<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="%23888888"><path d="M17.65 6.35C16.2 4.9 14.21 4 12 4c-4.42 0-7.99 3.58-7.99 8s3.57 8 7.99 8c3.73 0 6.84-2.55 7.73-6h-2.08c-.82 2.33-3.04 4-5.65 4-3.31 0-6-2.69-6-6s2.69-6 6-6c1.66 0 3.14.69 4.22 1.78L13 11h7V4l-2.35 2.35z"/></svg>');
}
.beatport-tab-button.active .rebuild-icon {
background-image: url('data:image/svg+xml;charset=utf-8,<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="%23000000"><path d="M17.65 6.35C16.2 4.9 14.21 4 12 4c-4.42 0-7.99 3.58-7.99 8s3.57 8 7.99 8c3.73 0 6.84-2.55 7.73-6h-2.08c-.82 2.33-3.04 4-5.65 4-3.31 0-6-2.69-6-6s2.69-6 6-6c1.66 0 3.14.69 4.22 1.78L13 11h7V4l-2.35 2.35z"/></svg>');
}
.beatport-tab-content {
display: none;
overflow-y: auto;
overflow-x: hidden;
flex: 1;
}
.beatport-tab-content.active {
display: flex;
flex-direction: column;
}
/* Hide Browse Charts tab */
.beatport-tab-button[data-beatport-tab="browse"] {
display: none;
}
/* ================================= */
/* BEATPORT REBUILD TAB STYLES */
/* ================================= */
/* Beatport Rebuild Slider Container */
.beatport-rebuild-slider-container {
flex: 1;
padding: 30px;
}
/* Loading State */
.beatport-rebuild-loading {
width: 100%;
height: 400px;
display: flex;
align-items: center;
justify-content: center;
background: linear-gradient(135deg,
rgba(20, 20, 20, 0.95) 0%,
rgba(12, 12, 12, 0.98) 100%);
border-radius: 20px;
text-align: center;
}
.beatport-rebuild-loading-content h2 {
color: #01FF95;
font-size: 24px;
margin-bottom: 10px;
animation: pulse 2s ease-in-out infinite;
}
.beatport-rebuild-loading-content p {
color: rgba(255, 255, 255, 0.7);
font-size: 16px;
}
@keyframes pulse {
0%, 100% { opacity: 1; }
50% { opacity: 0.5; }
}
.beatport-rebuild-slider {
position: relative;
width: 100%;
height: 500px;
border-radius: 20px;
overflow: hidden;
box-shadow:
0 20px 60px rgba(0, 0, 0, 0.4),
0 8px 32px rgba(0, 0, 0, 0.3),
0 0 40px rgba(1, 255, 149, 0.1);
background: linear-gradient(135deg,
rgba(20, 20, 20, 0.95) 0%,
rgba(12, 12, 12, 0.98) 100%);
}
.beatport-rebuild-slider-track {
position: relative;
width: 100%;
height: 100%;
transition: transform 0.8s cubic-bezier(0.25, 0.46, 0.45, 0.94);
}
/* Individual Slides */
.beatport-rebuild-slide {
position: absolute;
top: 0;
left: 0;
width: 100%;
height: 100%;
opacity: 0;
transform: translateX(100px);
transition: all 0.8s cubic-bezier(0.25, 0.46, 0.45, 0.94);
display: flex;
align-items: center;
justify-content: center;
}
.beatport-rebuild-slide.active {
opacity: 1;
z-index: 10;
transform: translateX(0);
}
.beatport-rebuild-slide.prev {
transform: translateX(-100px);
}
.beatport-rebuild-slide.next {
transform: translateX(100px);
}
/* Slide Background */
.beatport-rebuild-slide-background {
opacity: .6;
position: absolute;
top: 0;
left: 0;
width: 100%;
height: 100%;
background: linear-gradient(45deg,
rgba(1, 255, 149, 0.1) 0%,
rgba(0, 224, 133, 0.08) 25%,
rgba(29, 185, 84, 0.06) 50%,
rgba(0, 185, 112, 0.04) 75%,
rgba(1, 255, 149, 0.02) 100%);
z-index: 1;
}
/* Dynamic background images from Beatport */
.beatport-rebuild-slide[data-image]::before {
content: '';
position: absolute;
top: 0;
left: 0;
width: 100%;
height: 100%;
background-image: var(--slide-bg-image);
background-size: cover;
background-position: center;
background-repeat: no-repeat;
opacity: 0.3;
z-index: 0;
}
.beatport-rebuild-slide-gradient {
position: absolute;
top: 0;
left: 0;
width: 100%;
height: 100%;
background:
radial-gradient(circle at 30% 40%, rgba(1, 255, 149, 0.15) 0%, transparent 50%),
radial-gradient(circle at 70% 60%, rgba(0, 224, 133, 0.1) 0%, transparent 50%),
linear-gradient(135deg,
rgba(20, 20, 20, 0.8) 0%,
rgba(12, 12, 12, 0.9) 100%);
}
/* Slide Content */
.beatport-rebuild-slide-content {
position: relative;
z-index: 2;
text-align: center;
padding: 40px;
max-width: 1000px;
}
.beatport-rebuild-track-info {
margin-bottom: 25px;
}
.beatport-rebuild-track-title {
font-size: 36px;
font-weight: 800;
color: #01FF95;
margin: 0 0 12px 0;
letter-spacing: -1px;
text-shadow: 0 2px 20px rgba(1, 255, 149, 0.3);
line-height: 1.2;
}
.beatport-rebuild-artist-name {
font-size: 24px;
font-weight: 600;
color: #ffffff;
margin: 0 0 8px 0;
letter-spacing: -0.5px;
}
.beatport-rebuild-album-name {
font-size: 18px;
font-weight: 400;
color: rgba(255, 255, 255, 0.8);
margin: 0;
font-style: italic;
}
.beatport-rebuild-track-meta {
display: flex;
gap: 20px;
justify-content: center;
align-items: center;
}
.beatport-rebuild-genre,
.beatport-rebuild-year {
padding: 8px 16px;
background: rgba(1, 255, 149, 0.15);
border: 1px solid rgba(1, 255, 149, 0.3);
border-radius: 20px;
font-size: 12px;
font-weight: 600;
color: #01FF95;
text-transform: uppercase;
letter-spacing: 0.5px;
}
/* Navigation Buttons */
.beatport-rebuild-slider-nav {
position: absolute;
top: 50%;
transform: translateY(-50%);
z-index: 100;
width: 100%;
display: flex;
justify-content: space-between;
padding: 0 25px;
pointer-events: none;
}
.beatport-rebuild-nav-btn {
width: 50px;
height: 50px;
border: none;
border-radius: 50%;
background: rgba(1, 255, 149, 0.2);
backdrop-filter: blur(10px);
color: #01FF95;
font-size: 24px;
font-weight: 600;
cursor: pointer;
transition: all 0.3s ease;
pointer-events: all;
display: flex;
align-items: center;
justify-content: center;
box-shadow: 0 4px 20px rgba(0, 0, 0, 0.3);
}
.beatport-rebuild-nav-btn:hover {
background: rgba(1, 255, 149, 0.3);
transform: scale(1.1);
box-shadow: 0 6px 25px rgba(1, 255, 149, 0.4);
}
.beatport-rebuild-nav-btn:active {
transform: scale(0.95);
}
/* Slider Indicators */
.beatport-rebuild-slider-indicators {
position: absolute;
bottom: 25px;
left: 50%;
transform: translateX(-50%);
z-index: 100;
display: flex;
gap: 12px;
}
.beatport-rebuild-indicator {
width: 12px;
height: 12px;
border: none;
border-radius: 50%;
background: rgba(255, 255, 255, 0.3);
cursor: pointer;
transition: all 0.3s ease;
}
.beatport-rebuild-indicator.active {
background: #01FF95;
box-shadow: 0 0 15px rgba(1, 255, 149, 0.6);
transform: scale(1.2);
}
.beatport-rebuild-indicator:hover:not(.active) {
background: rgba(1, 255, 149, 0.6);
transform: scale(1.1);
}
/* Responsive Design */
@media (max-width: 768px) {
.beatport-rebuild-slider {
height: 320px;
}
.beatport-rebuild-track-title {
font-size: 28px;
}
.beatport-rebuild-artist-name {
font-size: 20px;
}
.beatport-rebuild-album-name {
font-size: 16px;
}
.beatport-rebuild-slide-content {
padding: 30px 20px;
}
}
/* ================================= */
/* BEATPORT HERO SECTION */
/* ================================= */
.beatport-hero {
position: relative;
height: fit-content;
border-radius: 20px;
margin-bottom: 40px;
overflow: hidden;
display: flex;
align-items: center;
justify-content: center;
/* Premium shadow effect matching modal hero sections */
box-shadow:
0 20px 60px rgba(0, 0, 0, 0.5),
0 8px 32px rgba(1, 255, 149, 0.15),
inset 0 1px 0 rgba(255, 255, 255, 0.1);
}
.beatport-hero-bg {
position: absolute;
top: 0;
left: 0;
right: 0;
bottom: 0;
/* Premium glassmorphic foundation matching modal hero backgrounds */
background: linear-gradient(135deg,
rgba(26, 26, 26, 0.95) 0%,
rgba(18, 18, 18, 0.98) 50%,
rgba(12, 12, 12, 0.99) 100%);
backdrop-filter: blur(24px) saturate(1.3);
/* Enhanced borders matching modal hero */
border: 1px solid rgba(1, 255, 149, 0.3);
border-top: 1px solid rgba(1, 255, 149, 0.4);
}
.beatport-hero-bg::after {
content: '';
position: absolute;
top: 0;
left: 0;
right: 0;
bottom: 0;
/* Enhanced ambient lighting effects matching modal backgrounds */
background:
radial-gradient(circle at 25% 25%, rgba(1, 255, 149, 0.15) 0%, transparent 60%),
radial-gradient(circle at 75% 75%, rgba(0, 224, 133, 0.12) 0%, transparent 60%),
radial-gradient(circle at 50% 50%, rgba(1, 255, 149, 0.08) 0%, transparent 80%);
opacity: 0.8;
}
.beatport-hero-content {
position: relative;
z-index: 2;
text-align: center;
color: #ffffff;
padding: 32px;
max-width: 800px;
}
.beatport-hero-content h2 {
/* Enhanced typography matching modal hero titles */
font-size: 42px;
font-weight: 700;
margin: 0 0 16px 0;
line-height: 1.1;
letter-spacing: -0.5px;
/* Premium gradient text effect */
background: linear-gradient(135deg, #01FF95 0%, #00E085 50%, #1ed760 100%);
-webkit-background-clip: text;
-webkit-text-fill-color: transparent;
background-clip: text;
/* Subtle text shadow for depth */
text-shadow: 0 4px 8px rgba(1, 255, 149, 0.2);
}
.beatport-hero-content p {
/* Enhanced subtitle styling matching modal metadata */
font-size: 18px;
color: #e0e0e0;
margin: 0 0 24px 0;
font-weight: 500;
opacity: 0.9;
line-height: 1.4;
letter-spacing: 0.2px;
}
.beatport-stats {
display: flex;
align-items: center;
justify-content: center;
gap: 16px;
margin-top: 12px;
}
.beatport-hero .stat-item {
/* Premium badge styling matching modal detail badges - scoped to Beatport hero only */
background: rgba(1, 255, 149, 0.15);
color: #01FF95;
font-size: 14px;
font-weight: 600;
padding: 8px 16px;
border-radius: 12px;
border: 1px solid rgba(1, 255, 149, 0.3);
/* Subtle shadow for depth */
box-shadow:
0 4px 12px rgba(1, 255, 149, 0.2),
0 2px 6px rgba(0, 0, 0, 0.2);
/* Glassmorphic effect */
backdrop-filter: blur(8px);
transition: all 0.3s ease;
}
.beatport-hero .stat-item:hover {
background: rgba(1, 255, 149, 0.2);
border-color: rgba(1, 255, 149, 0.4);
transform: translateY(-2px) scale(1.05);
box-shadow:
0 6px 16px rgba(1, 255, 149, 0.3),
0 3px 8px rgba(0, 0, 0, 0.3);
}
.stat-divider {
color: rgba(255, 255, 255, 0.3);
font-weight: 300;
}
/* ================================= */
/* BEATPORT NAVIGATION CARDS */
/* ================================= */
.beatport-navigation {
flex: 1;
overflow-y: auto;
padding: 0 5px;
}
.beatport-category-cards {
display: grid;
grid-template-columns: repeat(auto-fit, minmax(300px, 1fr));
gap: 20px;
padding: 10px 0;
}
.beatport-category-card {
/* Premium glassmorphic foundation matching add-to-wishlist modal */
background: linear-gradient(135deg,
rgba(26, 26, 26, 0.95) 0%,
rgba(18, 18, 18, 0.98) 100%);
backdrop-filter: blur(20px) saturate(1.2);
/* Enhanced borders matching modal */
border-radius: 20px;
border: 1px solid rgba(255, 255, 255, 0.12);
border-top: 1px solid rgba(255, 255, 255, 0.18);
padding: 28px;
cursor: pointer;
transition: all 0.4s cubic-bezier(0.4, 0, 0.2, 1);
position: relative;
overflow: hidden;
/* Premium shadow effect matching modal */
box-shadow:
0 20px 60px rgba(0, 0, 0, 0.5),
0 8px 32px rgba(0, 0, 0, 0.3),
inset 0 1px 0 rgba(255, 255, 255, 0.1);
}
.beatport-category-card::before {
content: '';
position: absolute;
top: 0;
left: 0;
right: 0;
bottom: 0;
background: linear-gradient(135deg,
rgba(1, 255, 149, 0.1) 0%,
transparent 50%);
opacity: 0;
transition: opacity 0.3s ease;
}
.beatport-category-card:hover {
/* Enhanced glassmorphic hover state matching modal patterns */
background: linear-gradient(135deg,
rgba(30, 30, 30, 0.98) 0%,
rgba(22, 22, 22, 1.0) 100%);
backdrop-filter: blur(24px) saturate(1.3);
transform: translateY(-6px) scale(1.02);
border-color: rgba(1, 255, 149, 0.4);
border-top-color: rgba(1, 255, 149, 0.6);
/* Premium enhanced shadow matching modal hover */
box-shadow:
0 32px 80px rgba(0, 0, 0, 0.6),
0 16px 48px rgba(0, 0, 0, 0.4),
0 0 40px rgba(1, 255, 149, 0.3),
inset 0 1px 0 rgba(255, 255, 255, 0.15);
}
.beatport-category-card:hover::before {
opacity: 1;
}
.category-icon {
width: 48px;
height: 48px;
background: linear-gradient(135deg, #01FF95 0%, #00E085 100%);
border-radius: 12px;
margin-bottom: 15px;
display: flex;
align-items: center;
justify-content: center;
position: relative;
}
.beatport-category-card h3 {
font-size: 18px;
font-weight: 600;
color: #ffffff;
margin: 0 0 8px 0;
position: relative;
z-index: 2;
}
.beatport-category-card p {
font-size: 14px;
color: #888;
margin: 0 0 15px 0;
line-height: 1.4;
position: relative;
z-index: 2;
}
.category-count {
display: inline-block;
background: rgba(1, 255, 149, 0.15);
color: #01FF95;
font-size: 12px;
font-weight: 600;
padding: 6px 12px;
border-radius: 20px;
border: 1px solid rgba(1, 255, 149, 0.3);
position: relative;
z-index: 2;
}
/* ================================= */
/* BEATPORT NAVIGATION VIEWS */
/* ================================= */
.beatport-main-view,
.beatport-sub-view {
display: none;
height: 100%;
overflow-y: auto;
padding: 0 5px;
}
.beatport-main-view.active,
.beatport-sub-view.active {
display: block;
}
/* ================================= */
/* BEATPORT BREADCRUMB NAVIGATION */
/* ================================= */
.beatport-breadcrumb {
display: flex;
align-items: center;
gap: 20px;
margin-bottom: 30px;
padding: 20px 24px;
/* Premium glassmorphic foundation matching modal header */
background: linear-gradient(135deg,
rgba(26, 26, 26, 0.95) 0%,
rgba(18, 18, 18, 0.98) 100%);
backdrop-filter: blur(20px) saturate(1.2);
/* Enhanced borders matching modal */
border-radius: 16px;
border: 1px solid rgba(255, 255, 255, 0.12);
border-top: 1px solid rgba(255, 255, 255, 0.18);
/* Premium shadow effect matching modal sections */
box-shadow:
0 8px 24px rgba(0, 0, 0, 0.4),
0 4px 12px rgba(0, 0, 0, 0.3),
inset 0 1px 0 rgba(255, 255, 255, 0.1);
}
.breadcrumb-back {
/* Premium button matching modal action buttons */
background: linear-gradient(135deg, #01FF95 0%, #00E085 100%);
border: 1px solid rgba(1, 255, 149, 0.3);
border-radius: 12px;
color: #000000;
font-size: 14px;
font-weight: 700;
padding: 12px 20px;
cursor: pointer;
transition: all 0.4s cubic-bezier(0.4, 0, 0.2, 1);
white-space: nowrap;
/* Premium shadow matching modal buttons */
box-shadow:
0 4px 16px rgba(1, 255, 149, 0.3),
0 2px 8px rgba(0, 0, 0, 0.2);
}
.breadcrumb-back:hover {
/* Enhanced hover state matching modal button hover */
background: linear-gradient(135deg, #00E085 0%, #01FF95 100%);
transform: translateY(-3px) scale(1.05);
border-color: rgba(1, 255, 149, 0.5);
/* Premium enhanced shadow matching modal hover */
box-shadow:
0 8px 24px rgba(1, 255, 149, 0.4),
0 4px 12px rgba(0, 0, 0, 0.3);
}
.breadcrumb-path {
/* Enhanced text styling matching modal metadata */
color: #e0e0e0;
font-size: 16px;
font-weight: 500;
opacity: 0.9;
letter-spacing: 0.3px;
}
/* ================================= */
/* BEATPORT CHART LIST VIEW */
/* ================================= */
.beatport-chart-list {
display: flex;
flex-direction: column;
gap: 15px;
}
.beatport-chart-item {
/* Premium glassmorphic foundation matching modal hero sections */
background: linear-gradient(135deg,
rgba(26, 26, 26, 0.95) 0%,
rgba(18, 18, 18, 0.98) 100%);
backdrop-filter: blur(20px) saturate(1.2);
/* Enhanced borders matching modal */
border-radius: 16px;
border: 1px solid rgba(255, 255, 255, 0.12);
border-top: 1px solid rgba(255, 255, 255, 0.18);
padding: 24px;
cursor: pointer;
transition: all 0.4s cubic-bezier(0.4, 0, 0.2, 1);
display: flex;
align-items: center;
gap: 24px;
position: relative;
overflow: hidden;
/* Premium shadow effect matching modal cards */
box-shadow:
0 8px 24px rgba(0, 0, 0, 0.4),
0 4px 12px rgba(0, 0, 0, 0.3),
inset 0 1px 0 rgba(255, 255, 255, 0.1);
}
.beatport-chart-item::before {
content: '';
position: absolute;
top: 0;
left: 0;
right: 0;
bottom: 0;
background: linear-gradient(135deg,
rgba(1, 255, 149, 0.1) 0%,
transparent 50%);
opacity: 0;
transition: opacity 0.3s ease;
}
.beatport-chart-item:hover {
/* Enhanced glassmorphic hover state matching modal hero hover */
background: linear-gradient(135deg,
rgba(30, 30, 30, 0.98) 0%,
rgba(22, 22, 22, 1.0) 100%);
backdrop-filter: blur(24px) saturate(1.3);
transform: translateY(-4px) scale(1.02);
border-color: rgba(1, 255, 149, 0.4);
border-top-color: rgba(1, 255, 149, 0.6);
/* Premium enhanced shadow matching modal hover */
box-shadow:
0 20px 48px rgba(0, 0, 0, 0.5),
0 8px 24px rgba(0, 0, 0, 0.4),
0 0 32px rgba(1, 255, 149, 0.3),
inset 0 1px 0 rgba(255, 255, 255, 0.15);
}
.beatport-chart-item:hover::before {
opacity: 1;
}
.chart-icon {
font-size: 32px;
width: 60px;
height: 60px;
display: flex;
align-items: center;
justify-content: center;
background: linear-gradient(135deg, #01FF95 0%, #00E085 100%);
border-radius: 12px;
flex-shrink: 0;
position: relative;
z-index: 2;
}
.chart-info {
flex: 1;
position: relative;
z-index: 2;
}
.chart-info h3 {
font-size: 18px;
font-weight: 600;
color: #ffffff;
margin: 0 0 5px 0;
}
.chart-info p {
font-size: 14px;
color: #888;
margin: 0 0 8px 0;
line-height: 1.4;
}
.track-count {
display: inline-block;
background: rgba(1, 255, 149, 0.15);
color: #01FF95;
font-size: 12px;
font-weight: 600;
padding: 4px 10px;
border-radius: 15px;
border: 1px solid rgba(1, 255, 149, 0.3);
}
/* ================================= */
/* BEATPORT GENRE GRID VIEW */
/* ================================= */
.beatport-genre-grid {
display: grid;
grid-template-columns: repeat(auto-fill, minmax(200px, 1fr));
gap: 20px;
padding: 10px 0;
}
.beatport-genre-item {
background: linear-gradient(135deg,
rgba(25, 25, 25, 0.95) 0%,
rgba(15, 15, 15, 0.98) 100%);
backdrop-filter: blur(20px);
border-radius: 12px;
border: 1px solid rgba(255, 255, 255, 0.08);
border-top: 1px solid rgba(255, 255, 255, 0.12);
padding: 20px;
cursor: pointer;
transition: all 0.3s ease;
text-align: center;
position: relative;
overflow: hidden;
min-height: 120px;
display: flex;
flex-direction: column;
align-items: center;
justify-content: center;
gap: 10px;
}
.beatport-genre-item::before {
content: '';
position: absolute;
top: 0;
left: 0;
right: 0;
bottom: 0;
background: linear-gradient(135deg,
rgba(1, 255, 149, 0.1) 0%,
transparent 50%);
opacity: 0;
transition: opacity 0.3s ease;
}
.beatport-genre-item:hover {
transform: translateY(-5px);
border-color: rgba(1, 255, 149, 0.3);
box-shadow:
0 15px 30px rgba(0, 0, 0, 0.3),
0 0 20px rgba(1, 255, 149, 0.2);
}
.beatport-genre-item:hover::before {
opacity: 1;
}
.genre-icon {
font-size: 28px;
width: 50px;
height: 50px;
display: flex;
align-items: center;
justify-content: center;
background: linear-gradient(135deg, #01FF95 0%, #00E085 100%);
border-radius: 10px;
position: relative;
z-index: 2;
}
.beatport-genre-item h3 {
font-size: 16px;
font-weight: 600;
color: #ffffff;
margin: 0;
position: relative;
z-index: 2;
text-align: center;
line-height: 1.2;
}
.genre-track-count {
display: inline-block;
background: rgba(1, 255, 149, 0.15);
color: #01FF95;
font-size: 11px;
font-weight: 600;
padding: 4px 8px;
border-radius: 12px;
border: 1px solid rgba(1, 255, 149, 0.3);
position: relative;
z-index: 2;
}
/* Dynamic Genre Loading States */
.genre-loading-placeholder,
.genre-error-placeholder {
grid-column: 1 / -1;
display: flex;
flex-direction: column;
align-items: center;
justify-content: center;
padding: 40px 20px;
text-align: center;
color: #888;
}
.genre-loading-placeholder .loading-spinner {
width: 40px;
height: 40px;
border: 3px solid rgba(1, 255, 149, 0.2);
border-top: 3px solid #01FF95;
border-radius: 50%;
animation: spin 1s linear infinite;
margin-bottom: 15px;
}
@keyframes spin {
0% { transform: rotate(0deg); }
100% { transform: rotate(360deg); }
}
.refresh-genres-btn {
background: linear-gradient(135deg, #01FF95 0%, #00E085 100%);
color: #000;
border: none;
padding: 10px 20px;
border-radius: 8px;
font-weight: 600;
cursor: pointer;
font-size: 14px;
margin-top: 15px;
transition: all 0.3s ease;
}
.refresh-genres-btn:hover {
transform: translateY(-2px);
box-shadow: 0 5px 15px rgba(1, 255, 149, 0.3);
}
/* Genre Images */
.beatport-genre-item .genre-image {
width: 50px;
height: 50px;
border-radius: 12px;
background-size: cover;
background-position: center;
background-repeat: no-repeat;
border: 2px solid rgba(1, 255, 149, 0.3);
box-shadow: 0 4px 12px rgba(0, 0, 0, 0.3);
transition: all 0.3s ease;
position: relative;
z-index: 2;
}
.beatport-genre-item:hover .genre-image {
transform: scale(1.1);
border-color: rgba(1, 255, 149, 0.6);
box-shadow:
0 6px 20px rgba(0, 0, 0, 0.4),
0 0 20px rgba(1, 255, 149, 0.3);
}
/* ================================= */
/* BEATPORT GENRE DETAIL VIEW */
/* ================================= */
.genre-detail-header {
margin-bottom: 30px;
padding: 20px 0;
border-bottom: 1px solid rgba(255, 255, 255, 0.1);
}
.genre-detail-info h2 {
font-size: 32px;
font-weight: 700;
color: #ffffff;
margin: 0 0 8px 0;
background: linear-gradient(135deg, #01ff95, #00d4ff);
-webkit-background-clip: text;
-webkit-text-fill-color: transparent;
background-clip: text;
}
.genre-detail-info p {
font-size: 16px;
color: rgba(255, 255, 255, 0.7);
margin: 0;
}
/* Section Styling */
.genre-main-charts-section,
.genre-releases-section,
.genre-editorial-section,
.genre-new-charts-section,
.homepage-genre-section,
.homepage-main-charts-section,
.homepage-releases-section,
.homepage-hype-section,
.homepage-dj-charts-section,
.homepage-featured-charts-section {
margin-bottom: 40px;
padding: 28px;
/* Premium glassmorphic foundation matching modal design */
background: linear-gradient(135deg,
rgba(20, 20, 20, 0.95) 0%,
rgba(12, 12, 12, 0.98) 100%);
backdrop-filter: blur(20px) saturate(1.2);
/* Enhanced borders */
border-radius: 20px;
border: 1px solid rgba(255, 255, 255, 0.12);
border-top: 1px solid rgba(255, 255, 255, 0.18);
/* Premium shadow effect matching modal */
box-shadow:
0 20px 60px rgba(0, 0, 0, 0.5),
0 8px 32px rgba(0, 0, 0, 0.3),
inset 0 1px 0 rgba(255, 255, 255, 0.1);
}
.section-title {
font-size: 20px;
font-weight: 600;
color: #ffffff;
margin: 0 0 16px 0;
display: flex;
align-items: center;
gap: 8px;
}
.section-description {
font-size: 14px;
color: rgba(255, 255, 255, 0.6);
margin: 0 0 20px 0;
font-style: italic;
}
/* Chart Types Grid */
.genre-chart-types-grid {
display: grid;
grid-template-columns: repeat(auto-fit, minmax(280px, 1fr));
gap: 16px;
}
/* Chart Type Cards */
.genre-chart-type-card {
/* Premium glassmorphic foundation matching modal section design */
background: linear-gradient(135deg,
rgba(26, 26, 26, 0.95) 0%,
rgba(18, 18, 18, 0.98) 100%);
backdrop-filter: blur(20px) saturate(1.2);
/* Enhanced borders matching modal */
border-radius: 16px;
border: 1px solid rgba(255, 255, 255, 0.12);
border-top: 1px solid rgba(255, 255, 255, 0.18);
padding: 24px;
display: flex;
align-items: center;
gap: 20px;
cursor: pointer;
transition: all 0.4s cubic-bezier(0.4, 0, 0.2, 1);
position: relative;
overflow: hidden;
/* Premium shadow effect matching modal sections */
box-shadow:
0 8px 24px rgba(0, 0, 0, 0.4),
0 4px 12px rgba(0, 0, 0, 0.3),
inset 0 1px 0 rgba(255, 255, 255, 0.1);
}
.genre-chart-type-card::before {
content: '';
position: absolute;
top: 0;
left: 0;
right: 0;
bottom: 0;
background: linear-gradient(135deg,
rgba(1, 255, 149, 0.1) 0%,
transparent 50%);
opacity: 0;
transition: opacity 0.3s ease;
}
.genre-chart-type-card:hover {
/* Enhanced glassmorphic hover state matching modal section hover */
background: linear-gradient(135deg,
rgba(30, 30, 30, 0.98) 0%,
rgba(22, 22, 22, 1.0) 100%);
backdrop-filter: blur(24px) saturate(1.3);
transform: translateY(-4px) scale(1.02);
border-color: rgba(1, 255, 149, 0.4);
border-top-color: rgba(1, 255, 149, 0.6);
/* Premium enhanced shadow matching modal hover */
box-shadow:
0 20px 48px rgba(0, 0, 0, 0.5),
0 8px 24px rgba(0, 0, 0, 0.4),
0 0 32px rgba(1, 255, 149, 0.3),
inset 0 1px 0 rgba(255, 255, 255, 0.15);
}
.genre-chart-type-card:hover::before {
opacity: 1;
}
.chart-type-icon {
font-size: 32px;
min-width: 50px;
height: 50px;
display: flex;
align-items: center;
justify-content: center;
background: linear-gradient(135deg,
rgba(1, 255, 149, 0.2) 0%,
rgba(0, 212, 255, 0.2) 100%);
border-radius: 12px;
border: 1px solid rgba(1, 255, 149, 0.3);
position: relative;
z-index: 2;
}
.chart-type-info {
flex: 1;
position: relative;
z-index: 2;
}
.chart-type-info h3 {
font-size: 18px;
font-weight: 600;
color: #ffffff;
margin: 0 0 4px 0;
}
.chart-type-info p {
font-size: 14px;
color: rgba(255, 255, 255, 0.7);
margin: 0 0 8px 0;
}
.track-count {
font-size: 12px;
color: rgba(1, 255, 149, 0.8);
font-weight: 500;
background: rgba(1, 255, 149, 0.1);
padding: 4px 8px;
border-radius: 6px;
display: inline-block;
}
/* Special Chart Card (New Charts) */
.genre-new-charts-container {
display: flex;
justify-content: center;
}
.genre-chart-type-card.special-chart {
background: linear-gradient(135deg,
rgba(30, 20, 40, 0.95) 0%,
rgba(20, 15, 30, 0.98) 100%);
border: 2px solid rgba(138, 43, 226, 0.3);
max-width: 400px;
position: relative;
}
.genre-chart-type-card.special-chart::before {
background: linear-gradient(135deg,
rgba(138, 43, 226, 0.15) 0%,
transparent 50%);
}
.genre-chart-type-card.special-chart:hover {
border-color: rgba(138, 43, 226, 0.5);
box-shadow:
0 12px 30px rgba(0, 0, 0, 0.4),
0 0 20px rgba(138, 43, 226, 0.3);
}
.genre-chart-type-card.special-chart .chart-type-icon {
background: linear-gradient(135deg,
rgba(138, 43, 226, 0.3) 0%,
rgba(75, 0, 130, 0.3) 100%);
border-color: rgba(138, 43, 226, 0.4);
}
.special-badge {
position: absolute;
top: 8px;
right: 8px;
background: linear-gradient(135deg, #8a2be2, #4b0082);
color: #ffffff;
font-size: 10px;
font-weight: 600;
padding: 4px 8px;
border-radius: 6px;
text-transform: uppercase;
letter-spacing: 0.5px;
}
/* Empty Section Placeholder */
.empty-section-placeholder {
display: flex;
align-items: center;
gap: 20px;
padding: 40px 20px;
background: linear-gradient(135deg,
rgba(30, 30, 30, 0.5) 0%,
rgba(20, 20, 20, 0.7) 100%);
border-radius: 12px;
border: 2px dashed rgba(255, 255, 255, 0.15);
text-align: center;
opacity: 0.8;
transition: all 0.3s ease;
min-height: 120px;
justify-content: center;
}
.empty-section-placeholder:hover {
opacity: 1;
border-color: rgba(255, 255, 255, 0.25);
background: linear-gradient(135deg,
rgba(35, 35, 35, 0.6) 0%,
rgba(25, 25, 25, 0.8) 100%);
}
.empty-section-icon {
font-size: 48px;
opacity: 0.6;
filter: grayscale(1);
}
.empty-section-text h4 {
font-size: 18px;
font-weight: 600;
color: rgba(255, 255, 255, 0.8);
margin: 0 0 8px 0;
}
.empty-section-text p {
font-size: 14px;
color: rgba(255, 255, 255, 0.5);
margin: 0;
font-style: italic;
}
.expand-indicator {
position: absolute;
top: 50%;
right: 12px;
transform: translateY(-50%);
font-size: 16px;
color: rgba(138, 43, 226, 0.8);
transition: transform 0.3s ease;
z-index: 5;
background: rgba(0, 0, 0, 0.3);
padding: 4px;
border-radius: 4px;
}
.expand-indicator.expanded {
transform: translateY(-50%) rotate(180deg);
}
/* Always Visible New Charts Content */
.new-charts-content {
margin-top: 20px;
padding: 20px;
background: linear-gradient(135deg,
rgba(35, 25, 45, 0.9) 0%,
rgba(25, 20, 35, 0.95) 100%);
border-radius: 12px;
border: 1px solid rgba(138, 43, 226, 0.15);
}
@keyframes expandDown {
from {
opacity: 0;
max-height: 0;
padding-top: 0;
padding-bottom: 0;
}
to {
opacity: 1;
max-height: 1000px;
padding-top: 20px;
padding-bottom: 20px;
}
}
.charts-loading-inline {
text-align: center;
padding: 40px 20px;
color: rgba(255, 255, 255, 0.6);
}
.charts-loading-inline .loading-spinner-small {
width: 30px;
height: 30px;
border: 3px solid rgba(138, 43, 226, 0.3);
border-top: 3px solid #8a2be2;
border-radius: 50%;
animation: spin 1s linear infinite;
margin: 0 auto 12px auto;
}
.charts-loading-inline p {
font-size: 14px;
margin: 0;
}
.new-charts-grid,
.dj-charts-grid,
.featured-charts-grid {
display: grid;
grid-template-columns: repeat(4, 1fr);
gap: 16px;
}
.new-chart-item {
/* Premium glassmorphic foundation matching modal card design */
background: linear-gradient(135deg,
rgba(26, 26, 26, 0.95) 0%,
rgba(18, 18, 18, 0.98) 100%);
backdrop-filter: blur(20px) saturate(1.2);
/* Enhanced borders matching modal */
border-radius: 16px;
border: 1px solid rgba(138, 43, 226, 0.3);
border-top: 1px solid rgba(138, 43, 226, 0.4);
padding: 20px;
cursor: pointer;
transition: all 0.4s cubic-bezier(0.4, 0, 0.2, 1);
position: relative;
overflow: hidden;
/* Premium shadow effect matching modal cards */
box-shadow:
0 8px 24px rgba(138, 43, 226, 0.2),
0 4px 12px rgba(0, 0, 0, 0.3),
inset 0 1px 0 rgba(255, 255, 255, 0.1);
}
.new-chart-item::before {
content: '';
position: absolute;
top: 0;
left: 0;
right: 0;
bottom: 0;
background: linear-gradient(135deg,
rgba(138, 43, 226, 0.1) 0%,
transparent 50%);
opacity: 0;
transition: opacity 0.3s ease;
}
.new-chart-item:hover {
/* Enhanced glassmorphic hover state matching modal card hover */
background: linear-gradient(135deg,
rgba(30, 30, 30, 0.98) 0%,
rgba(22, 22, 22, 1.0) 100%);
backdrop-filter: blur(24px) saturate(1.3);
transform: translateY(-4px) scale(1.02);
border-color: rgba(138, 43, 226, 0.5);
border-top-color: rgba(138, 43, 226, 0.7);
/* Premium enhanced shadow matching modal hover */
box-shadow:
0 16px 40px rgba(138, 43, 226, 0.3),
0 8px 24px rgba(0, 0, 0, 0.4),
0 0 32px rgba(138, 43, 226, 0.25),
inset 0 1px 0 rgba(255, 255, 255, 0.15);
}
.new-chart-item:hover::before {
opacity: 1;
}
.new-chart-header {
display: flex;
align-items: center;
gap: 10px;
margin-bottom: 10px;
position: relative;
z-index: 2;
}
.new-chart-icon {
width: 32px;
height: 32px;
background: linear-gradient(135deg,
rgba(138, 43, 226, 0.3) 0%,
rgba(75, 0, 130, 0.3) 100%);
border-radius: 6px;
display: flex;
align-items: center;
justify-content: center;
font-size: 14px;
border: 1px solid rgba(138, 43, 226, 0.4);
}
.new-chart-title {
flex: 1;
}
.new-chart-title h5 {
font-size: 14px;
font-weight: 600;
color: #ffffff;
margin: 0 0 2px 0;
line-height: 1.3;
}
.new-chart-artist {
font-size: 12px;
color: rgba(138, 43, 226, 0.8);
margin: 0;
font-weight: 500;
}
.new-chart-description {
font-size: 11px;
color: rgba(255, 255, 255, 0.5);
margin: 0 0 10px 0;
line-height: 1.4;
position: relative;
z-index: 2;
}
.new-chart-footer {
display: flex;
justify-content: space-between;
align-items: center;
position: relative;
z-index: 2;
}
.new-chart-type {
font-size: 9px;
background: rgba(138, 43, 226, 0.2);
color: rgba(138, 43, 226, 0.9);
padding: 3px 6px;
border-radius: 4px;
text-transform: uppercase;
font-weight: 600;
letter-spacing: 0.5px;
}
.new-chart-action {
font-size: 10px;
color: rgba(1, 255, 149, 0.8);
font-weight: 500;
display: flex;
align-items: center;
gap: 3px;
}
.new-charts-empty {
text-align: center;
padding: 40px 20px;
color: rgba(255, 255, 255, 0.6);
}
.new-charts-empty h4 {
font-size: 16px;
margin: 0 0 8px 0;
color: rgba(255, 255, 255, 0.8);
}
.new-charts-empty p {
font-size: 12px;
margin: 0;
line-height: 1.4;
}
/* ================================= */
/* BEATPORT GENRE CHARTS LIST VIEW */
/* ================================= */
.genre-charts-list-header {
margin-bottom: 30px;
padding: 20px 0;
border-bottom: 1px solid rgba(255, 255, 255, 0.1);
}
.genre-charts-list-info h2 {
font-size: 28px;
font-weight: 700;
color: #ffffff;
margin: 0 0 8px 0;
background: linear-gradient(135deg, #8a2be2, #4b0082);
-webkit-background-clip: text;
-webkit-text-fill-color: transparent;
background-clip: text;
}
.genre-charts-list-info p {
font-size: 16px;
color: rgba(255, 255, 255, 0.7);
margin: 0;
}
.genre-charts-list-container {
position: relative;
min-height: 400px;
}
.charts-loading-placeholder {
position: absolute;
top: 50%;
left: 50%;
transform: translate(-50%, -50%);
text-align: center;
color: rgba(255, 255, 255, 0.6);
}
.charts-loading-placeholder .loading-spinner {
width: 40px;
height: 40px;
border: 4px solid rgba(138, 43, 226, 0.3);
border-top: 4px solid #8a2be2;
border-radius: 50%;
animation: spin 1s linear infinite;
margin: 0 auto 16px auto;
}
@keyframes spin {
0% { transform: rotate(0deg); }
100% { transform: rotate(360deg); }
}
.charts-loading-placeholder p {
font-size: 16px;
margin: 0;
}
.genre-charts-grid {
display: grid;
grid-template-columns: repeat(auto-fill, minmax(320px, 1fr));
gap: 20px;
padding: 10px 0;
}
.genre-chart-item {
/* Premium glassmorphic foundation matching modal card design */
background: linear-gradient(135deg,
rgba(26, 26, 26, 0.95) 0%,
rgba(18, 18, 18, 0.98) 100%);
backdrop-filter: blur(20px) saturate(1.2);
/* Enhanced borders matching modal */
border-radius: 16px;
border: 1px solid rgba(138, 43, 226, 0.3);
border-top: 1px solid rgba(138, 43, 226, 0.4);
padding: 24px;
cursor: pointer;
transition: all 0.4s cubic-bezier(0.4, 0, 0.2, 1);
position: relative;
overflow: hidden;
/* Premium shadow effect matching modal cards */
box-shadow:
0 8px 24px rgba(138, 43, 226, 0.2),
0 4px 12px rgba(0, 0, 0, 0.3),
inset 0 1px 0 rgba(255, 255, 255, 0.1);
}
.genre-chart-item::before {
content: '';
position: absolute;
top: 0;
left: 0;
right: 0;
bottom: 0;
background: linear-gradient(135deg,
rgba(138, 43, 226, 0.1) 0%,
transparent 50%);
opacity: 0;
transition: opacity 0.3s ease;
}
.genre-chart-item:hover {
/* Enhanced glassmorphic hover state matching modal card hover */
background: linear-gradient(135deg,
rgba(30, 30, 30, 0.98) 0%,
rgba(22, 22, 22, 1.0) 100%);
backdrop-filter: blur(24px) saturate(1.3);
transform: translateY(-6px) scale(1.02);
border-color: rgba(138, 43, 226, 0.5);
border-top-color: rgba(138, 43, 226, 0.7);
/* Premium enhanced shadow matching modal hover */
box-shadow:
0 20px 48px rgba(138, 43, 226, 0.3),
0 8px 24px rgba(0, 0, 0, 0.4),
0 0 40px rgba(138, 43, 226, 0.25),
inset 0 1px 0 rgba(255, 255, 255, 0.15);
}
.genre-chart-item:hover::before {
opacity: 1;
}
.chart-item-header {
display: flex;
align-items: center;
gap: 12px;
margin-bottom: 12px;
position: relative;
z-index: 2;
}
.chart-item-icon {
width: 40px;
height: 40px;
background: linear-gradient(135deg,
rgba(138, 43, 226, 0.3) 0%,
rgba(75, 0, 130, 0.3) 100%);
border-radius: 8px;
display: flex;
align-items: center;
justify-content: center;
font-size: 18px;
border: 1px solid rgba(138, 43, 226, 0.4);
}
.chart-item-title {
flex: 1;
}
.chart-item-title h4 {
font-size: 16px;
font-weight: 600;
color: #ffffff;
margin: 0 0 4px 0;
line-height: 1.3;
}
.chart-item-artist {
font-size: 14px;
color: rgba(138, 43, 226, 0.8);
margin: 0;
font-weight: 500;
}
.chart-item-description {
font-size: 13px;
color: rgba(255, 255, 255, 0.6);
margin: 0 0 12px 0;
line-height: 1.4;
position: relative;
z-index: 2;
}
.chart-item-footer {
display: flex;
justify-content: space-between;
align-items: center;
position: relative;
z-index: 2;
}
.chart-item-type {
font-size: 11px;
background: rgba(138, 43, 226, 0.2);
color: rgba(138, 43, 226, 0.9);
padding: 4px 8px;
border-radius: 6px;
text-transform: uppercase;
font-weight: 600;
letter-spacing: 0.5px;
}
.chart-item-action {
font-size: 12px;
color: rgba(1, 255, 149, 0.8);
font-weight: 500;
display: flex;
align-items: center;
gap: 4px;
}
.genre-charts-empty {
text-align: center;
padding: 60px 20px;
color: rgba(255, 255, 255, 0.6);
}
.genre-charts-empty h3 {
font-size: 20px;
margin: 0 0 12px 0;
color: rgba(255, 255, 255, 0.8);
}
.genre-charts-empty p {
font-size: 14px;
margin: 0;
line-height: 1.5;
}
/* ================================= */
/* RESPONSIVE DESIGN */
/* ================================= */
@media (max-width: 768px) {
.beatport-genre-grid {
grid-template-columns: repeat(auto-fill, minmax(150px, 1fr));
gap: 15px;
}
/* Genre Detail Responsive */
.genre-detail-info h2 {
font-size: 24px;
}
.genre-chart-types-grid {
grid-template-columns: 1fr;
gap: 12px;
}
.genre-chart-type-card {
padding: 16px;
gap: 12px;
}
.chart-type-icon {
font-size: 28px;
min-width: 40px;
height: 40px;
}
.chart-type-info h3 {
font-size: 16px;
}
.section-title {
font-size: 18px;
}
.genre-main-charts-section,
.genre-releases-section,
.genre-editorial-section,
.genre-new-charts-section,
.homepage-genre-section,
.homepage-main-charts-section,
.homepage-releases-section,
.homepage-hype-section {
margin-bottom: 24px;
padding: 16px;
}
/* Genre Charts List Responsive */
.genre-charts-list-info h2 {
font-size: 22px;
}
.genre-charts-grid {
grid-template-columns: 1fr;
gap: 16px;
}
.genre-chart-item {
padding: 16px;
}
.chart-item-header {
gap: 10px;
}
.chart-item-icon {
width: 35px;
height: 35px;
font-size: 16px;
}
.chart-item-title h4 {
font-size: 15px;
}
.beatport-chart-item {
flex-direction: column;
text-align: center;
gap: 15px;
}
.chart-icon {
width: 50px;
height: 50px;
font-size: 24px;
}
.beatport-breadcrumb {
flex-direction: column;
align-items: stretch;
gap: 10px;
}
.breadcrumb-back {
text-align: center;
}
}
.playlist-scroll-container {
flex-grow: 1;
overflow-y: auto;
background: rgba(0,0,0,0.2);
border-radius: 8px;
padding: 10px;
}
.playlist-placeholder {
text-align: center;
color: #b3b3b3;
font-size: 14px;
padding: 40px;
}
.youtube-input-section {
display: flex;
gap: 10px;
}
#youtube-url-input {
flex-grow: 1;
background: #3a3a3a;
border: 1px solid #555555;
border-radius: 6px;
padding: 10px;
color: #ffffff;
}
#youtube-parse-btn {
width: 150px;
background: #ff0000;
color: #fff;
border: none;
border-radius: 6px;
font-weight: bold;
cursor: pointer;
}
/* Right Sidebar */
.sync-sidebar {
gap: 20px;
}
.sidebar-section {
display: flex;
flex-direction: column;
gap: 10px;
}
.sidebar-section h4 {
font-size: 14px;
font-weight: bold;
color: #ffffff;
}
#selection-info {
font-size: 12px;
color: #b3b3b3;
text-align: center;
}
.neo-button {
width: 100%;
padding: 12px;
background: #1db954;
border: none;
border-radius: 22px;
color: #000000;
font-size: 14px;
font-weight: bold;
cursor: pointer;
transition: all 0.2s ease;
box-shadow: 0 5px 15px rgba(29, 185, 84, 0.2);
}
.neo-button:hover:not(:disabled) {
transform: translateY(-2px);
box-shadow: 0 8px 20px rgba(29, 185, 84, 0.3);
}
.neo-button:disabled {
background: #404040;
color: #666666;
cursor: not-allowed;
box-shadow: none;
}
.sync-sidebar .progress-section {
flex-grow: 1;
overflow: hidden;
display: flex;
flex-direction: column;
}
#sync-progress-text {
font-size: 11px;
color: #b3b3b3;
}
#sync-log-area {
flex-grow: 1;
background: #181818;
border: 1px solid #404040;
border-radius: 4px;
color: #b3b3b3;
font-size: 10px;
font-family: monospace;
padding: 8px;
resize: none;
}
/* Playlist Cards Styling - Premium Glassmorphic Design */
.playlist-card {
/* Premium glassmorphic foundation matching search results */
background: linear-gradient(135deg,
rgba(26, 26, 26, 0.95) 0%,
rgba(18, 18, 18, 0.98) 100%);
backdrop-filter: blur(12px) saturate(1.1);
border-radius: 20px;
border: 1px solid rgba(255, 255, 255, 0.08);
border-top: 1px solid rgba(255, 255, 255, 0.12);
margin: 12px 8px;
padding: 24px;
cursor: pointer;
position: relative;
/* Premium shadow effect */
box-shadow:
0 8px 32px rgba(0, 0, 0, 0.4),
0 2px 8px rgba(0, 0, 0, 0.2),
inset 0 1px 0 rgba(255, 255, 255, 0.1);
/* Smooth transitions */
transition: all 0.4s cubic-bezier(0.4, 0, 0.2, 1);
}
.playlist-card:hover {
/* Enhanced glassmorphic hover state */
background: linear-gradient(135deg,
rgba(30, 30, 30, 0.98) 0%,
rgba(22, 22, 22, 1.0) 100%);
backdrop-filter: blur(16px) saturate(1.2);
border-color: rgba(29, 185, 84, 0.3);
border-top-color: rgba(29, 185, 84, 0.4);
/* More dramatic elevated effect */
box-shadow:
0 16px 48px rgba(0, 0, 0, 0.5),
0 8px 16px rgba(0, 0, 0, 0.3),
0 0 20px rgba(29, 185, 84, 0.15),
inset 0 1px 0 rgba(255, 255, 255, 0.15);
transform: translateY(-4px) scale(1.02);
}
.playlist-card.selected {
/* Selection state with Spotify green accent */
border-color: rgba(29, 185, 84, 0.5);
border-top-color: rgba(29, 185, 84, 0.6);
background: linear-gradient(135deg,
rgba(29, 185, 84, 0.08) 0%,
rgba(26, 26, 26, 0.98) 50%);
box-shadow:
0 12px 36px rgba(0, 0, 0, 0.4),
0 4px 12px rgba(0, 0, 0, 0.25),
0 0 24px rgba(29, 185, 84, 0.25),
inset 0 1px 0 rgba(255, 255, 255, 0.12);
}
.playlist-card-main {
display: flex;
align-items: center;
justify-content: space-between;
width: 100%;
}
.playlist-card-content {
flex: 1;
min-width: 0; /* Prevents text overflow issues */
}
.playlist-card-name {
font-size: 18px;
font-weight: 600;
color: #ffffff;
margin-bottom: 8px;
line-height: 1.3;
}
.playlist-card-info {
font-size: 14px;
color: #b3b3b3;
margin-bottom: 8px;
}
.playlist-card-status {
font-weight: 600;
padding: 6px 12px;
border-radius: 8px;
font-size: 11px;
text-transform: uppercase;
letter-spacing: 0.5px;
/* Glassmorphic badge styling */
backdrop-filter: blur(8px);
border: 1px solid rgba(255, 255, 255, 0.1);
box-shadow:
0 2px 8px rgba(0, 0, 0, 0.2),
inset 0 1px 0 rgba(255, 255, 255, 0.1);
}
.status-never-synced {
background: linear-gradient(135deg,
rgba(128, 128, 128, 0.3) 0%,
rgba(96, 96, 96, 0.4) 100%);
color: #e0e0e0;
border-color: rgba(128, 128, 128, 0.2);
}
.status-synced {
background: linear-gradient(135deg,
rgba(29, 185, 84, 0.3) 0%,
rgba(24, 158, 72, 0.4) 100%);
color: #1ed760;
border-color: rgba(29, 185, 84, 0.3);
box-shadow:
0 2px 8px rgba(29, 185, 84, 0.2),
inset 0 1px 0 rgba(255, 255, 255, 0.1);
}
.status-needs-sync {
background: linear-gradient(135deg,
rgba(255, 149, 0, 0.3) 0%,
rgba(230, 130, 0, 0.4) 100%);
color: #ffb84d;
border-color: rgba(255, 149, 0, 0.3);
box-shadow:
0 2px 8px rgba(255, 149, 0, 0.2),
inset 0 1px 0 rgba(255, 255, 255, 0.1);
}
.playlist-card-actions {
flex-shrink: 0;
margin-left: 20px;
}
.playlist-card-actions button {
/* Premium glassmorphic button matching search results */
background: linear-gradient(135deg,
rgba(29, 185, 84, 0.9) 0%,
rgba(24, 158, 72, 0.95) 100%);
backdrop-filter: blur(8px);
border: 1px solid rgba(29, 185, 84, 0.3);
border-top: 1px solid rgba(29, 185, 84, 0.5);
color: #ffffff;
padding: 10px 20px;
border-radius: 12px;
cursor: pointer;
font-size: 13px;
font-weight: 600;
/* Premium shadow effect */
box-shadow:
0 4px 16px rgba(29, 185, 84, 0.25),
0 2px 4px rgba(0, 0, 0, 0.2),
inset 0 1px 0 rgba(255, 255, 255, 0.2);
transition: all 0.3s cubic-bezier(0.4, 0, 0.2, 1);
}
.playlist-card-actions button:hover {
/* Enhanced hover state */
background: linear-gradient(135deg,
rgba(29, 185, 84, 1.0) 0%,
rgba(24, 158, 72, 1.0) 100%);
border-color: rgba(29, 185, 84, 0.6);
border-top-color: rgba(29, 185, 84, 0.8);
box-shadow:
0 6px 20px rgba(29, 185, 84, 0.35),
0 3px 6px rgba(0, 0, 0, 0.25),
inset 0 1px 0 rgba(255, 255, 255, 0.25);
transform: translateY(-2px);
}
.sync-progress-indicator {
font-size: 12px;
color: #1db954;
margin-top: 8px;
display: none;
}
/* ===============================
YOUTUBE PLAYLIST CARD STYLES
=============================== */
.youtube-playlist-card {
/* Premium glassmorphic foundation matching existing cards */
background: linear-gradient(135deg,
rgba(26, 26, 26, 0.95) 0%,
rgba(18, 18, 18, 0.98) 100%);
backdrop-filter: blur(12px) saturate(1.1);
border-radius: 20px;
border: 1px solid rgba(255, 0, 0, 0.15); /* Red YouTube border */
border-top: 1px solid rgba(255, 0, 0, 0.25);
margin: 12px 8px;
padding: 24px;
cursor: pointer;
position: relative;
height: 80px;
display: flex;
align-items: center;
/* Premium shadow effect with YouTube red accent */
box-shadow:
0 8px 32px rgba(255, 0, 0, 0.15),
0 2px 8px rgba(0, 0, 0, 0.2),
inset 0 1px 0 rgba(255, 255, 255, 0.1);
transition: all 0.4s cubic-bezier(0.4, 0, 0.2, 1);
}
.youtube-playlist-card:hover {
/* Enhanced glassmorphic hover state */
background: linear-gradient(135deg,
rgba(30, 30, 30, 0.98) 0%,
rgba(22, 22, 22, 1.0) 100%);
border-color: rgba(255, 0, 0, 0.25);
border-top-color: rgba(255, 0, 0, 0.4);
box-shadow:
0 12px 40px rgba(255, 0, 0, 0.2),
0 4px 12px rgba(0, 0, 0, 0.3),
inset 0 1px 0 rgba(255, 255, 255, 0.15);
transform: translateY(-3px);
}
.youtube-playlist-card .playlist-card-icon {
width: 48px;
height: 48px;
border-radius: 8px;
background: linear-gradient(135deg, #ff0000 0%, #cc0000 100%);
border: 2px solid rgba(255, 0, 0, 0.3);
display: flex;
align-items: center;
justify-content: center;
font-size: 20px;
color: #ffffff;
margin-right: 20px;
flex-shrink: 0;
box-shadow:
0 4px 16px rgba(255, 0, 0, 0.3),
inset 0 1px 0 rgba(255, 255, 255, 0.2);
}
.youtube-playlist-card .playlist-card-content {
flex: 1;
min-width: 0;
}
.youtube-playlist-card .playlist-card-name {
font-size: 18px;
font-weight: 600;
color: #ffffff;
margin-bottom: 4px;
line-height: 1.3;
}
.youtube-playlist-card .playlist-card-info {
font-size: 14px;
color: #b3b3b3;
display: flex;
align-items: center;
gap: 12px;
}
.youtube-playlist-card .playlist-card-track-count {
color: #ffffff;
}
.youtube-playlist-card .playlist-card-phase-text {
font-weight: 500;
}
.youtube-playlist-card .playlist-card-progress {
font-size: 13px;
color: #ff6b6b;
margin-top: 6px;
font-weight: 500;
}
.youtube-playlist-card .playlist-card-action-btn {
/* YouTube-themed action button */
background: linear-gradient(135deg,
rgba(255, 0, 0, 0.9) 0%,
rgba(204, 0, 0, 0.95) 100%);
backdrop-filter: blur(8px);
border: 1px solid rgba(255, 0, 0, 0.3);
border-top: 1px solid rgba(255, 0, 0, 0.5);
color: #ffffff;
padding: 10px 20px;
border-radius: 12px;
cursor: pointer;
font-size: 13px;
font-weight: 600;
box-shadow:
0 4px 16px rgba(255, 0, 0, 0.25),
0 2px 4px rgba(0, 0, 0, 0.2),
inset 0 1px 0 rgba(255, 255, 255, 0.2);
transition: all 0.3s cubic-bezier(0.4, 0, 0.2, 1);
margin-left: 20px;
flex-shrink: 0;
}
.youtube-playlist-card .playlist-card-action-btn:hover:not(:disabled) {
background: linear-gradient(135deg,
rgba(255, 0, 0, 1.0) 0%,
rgba(204, 0, 0, 1.0) 100%);
border-color: rgba(255, 0, 0, 0.6);
border-top-color: rgba(255, 0, 0, 0.8);
box-shadow:
0 6px 20px rgba(255, 0, 0, 0.35),
0 3px 6px rgba(0, 0, 0, 0.25),
inset 0 1px 0 rgba(255, 255, 255, 0.25);
transform: translateY(-2px);
}
.youtube-playlist-card .playlist-card-action-btn:disabled {
background: rgba(255, 255, 255, 0.1);
border: 1px solid rgba(255, 255, 255, 0.1);
color: rgba(255, 255, 255, 0.5);
cursor: not-allowed;
box-shadow: none;
transform: none;
}
/* ===============================
TIDAL PLAYLIST CARD STYLES (extends YouTube card styles)
===============================*/
.tidal-playlist-card .playlist-card-icon {
background: rgba(255, 102, 0, 0.2);
border: 1px solid #ff6600;
color: #ff6600;
font-size: 16px;
}
.tidal-playlist-card:hover .playlist-card-icon {
background: rgba(255, 102, 0, 0.3);
border: 1px solid #ff7700;
}
.tidal-playlist-card .playlist-card-action-btn {
background: linear-gradient(135deg, #ff6600, #ff7700);
border: 1px solid #ff6600;
}
.tidal-playlist-card .playlist-card-action-btn:hover:not(:disabled) {
background: linear-gradient(135deg, #ff7700, #ff8800);
border: 1px solid #ff7700;
box-shadow: 0 4px 15px rgba(255, 102, 0, 0.3);
}
/* ===============================
YOUTUBE DISCOVERY MODAL STYLES
=============================== */
.youtube-discovery-modal {
max-width: 1200px;
width: 90%;
max-height: 90vh;
display: flex;
flex-direction: column;
/* Premium glassmorphic foundation */
background: linear-gradient(135deg,
rgba(20, 20, 20, 0.95) 0%,
rgba(12, 12, 12, 0.98) 100%);
backdrop-filter: blur(20px) saturate(1.2);
border-radius: 20px;
border: 1px solid rgba(255, 0, 0, 0.2);
border-top: 1px solid rgba(255, 0, 0, 0.3);
box-shadow:
0 20px 60px rgba(0, 0, 0, 0.5),
0 8px 32px rgba(255, 0, 0, 0.1),
inset 0 1px 0 rgba(255, 255, 255, 0.1);
}
.youtube-discovery-modal .modal-header {
padding: 30px;
border-bottom: 1px solid rgba(255, 255, 255, 0.1);
position: relative;
}
.youtube-discovery-modal .modal-header h2 {
color: #ffffff;
font-size: 24px;
font-weight: 700;
margin: 0 0 8px 0;
}
.youtube-discovery-modal .modal-subtitle {
color: rgba(255, 255, 255, 0.8);
font-size: 16px;
margin: 0 0 4px 0;
}
.youtube-discovery-modal .modal-description {
color: rgba(255, 255, 255, 0.6);
font-size: 14px;
margin: 0;
}
.youtube-discovery-modal .modal-close-btn {
position: absolute;
top: 30px;
right: 30px;
background: rgba(255, 255, 255, 0.1);
border: 1px solid rgba(255, 255, 255, 0.2);
color: #ffffff;
width: 32px;
height: 32px;
border-radius: 16px;
cursor: pointer;
display: flex;
align-items: center;
justify-content: center;
font-size: 16px;
transition: all 0.2s ease;
}
.youtube-discovery-modal .modal-close-btn:hover {
background: rgba(255, 0, 0, 0.2);
border-color: rgba(255, 0, 0, 0.4);
}
.youtube-discovery-modal .modal-body {
flex: 1;
padding: 30px;
overflow: hidden;
display: flex;
flex-direction: column;
gap: 20px;
}
.youtube-discovery-modal .progress-section {
background: rgba(255, 255, 255, 0.05);
border-radius: 12px;
padding: 20px;
}
.youtube-discovery-modal .progress-label {
color: #ffffff;
font-size: 16px;
font-weight: 600;
margin-bottom: 12px;
}
.youtube-discovery-modal .progress-bar-container {
background: rgba(0, 0, 0, 0.3);
border-radius: 8px;
overflow: hidden;
height: 20px!important;
margin-bottom: 8px;
}
.youtube-discovery-modal .progress-bar-fill {
height: 100%;
background: linear-gradient(90deg, #1db954 0%, #1ed760 100%);
width: 0%;
transition: width 0.5s ease;
}
.youtube-discovery-modal .progress-text {
color: rgba(255, 255, 255, 0.8);
font-size: 14px;
text-align: center;
}
.youtube-discovery-modal .discovery-table-container {
flex: 1;
overflow: auto;
background: rgba(0, 0, 0, 0.2);
border-radius: 12px;
border: 1px solid rgba(255, 255, 255, 0.1);
}
.youtube-discovery-modal .discovery-table {
width: 100%;
border-collapse: collapse;
table-layout: fixed; /* Enable fixed layout for consistent column widths */
}
.youtube-discovery-modal .discovery-table th {
background: rgba(255, 255, 255, 0.1);
color: #ffffff;
font-weight: 600;
padding: 12px 8px;
text-align: left;
border-bottom: 1px solid rgba(255, 255, 255, 0.1);
font-size: 14px;
position: sticky;
top: 0;
z-index: 1;
overflow: hidden;
text-overflow: ellipsis;
white-space: nowrap;
}
/* Column width distribution for balanced layout */
.youtube-discovery-modal .discovery-table th:nth-child(1), /* YT Track */
.youtube-discovery-modal .discovery-table td:nth-child(1) {
width: 17.5%;
}
.youtube-discovery-modal .discovery-table th:nth-child(2), /* YT Artist */
.youtube-discovery-modal .discovery-table td:nth-child(2) {
width: 15%;
}
.youtube-discovery-modal .discovery-table th:nth-child(3), /* Status */
.youtube-discovery-modal .discovery-table td:nth-child(3) {
width: 12%;
}
.youtube-discovery-modal .discovery-table th:nth-child(4), /* Spotify Track */
.youtube-discovery-modal .discovery-table td:nth-child(4) {
width: 17.5%;
}
.youtube-discovery-modal .discovery-table th:nth-child(5), /* Spotify Artist */
.youtube-discovery-modal .discovery-table td:nth-child(5) {
width: 15%;
}
.youtube-discovery-modal .discovery-table th:nth-child(6), /* Album */
.youtube-discovery-modal .discovery-table td:nth-child(6) {
width: 13%;
}
.youtube-discovery-modal .discovery-table th:nth-child(7), /* Duration */
.youtube-discovery-modal .discovery-table td:nth-child(7) {
width: 10%;
text-align: center;
}
.youtube-discovery-modal .discovery-table td {
padding: 10px 8px;
border-bottom: 1px solid rgba(255, 255, 255, 0.05);
font-size: 13px;
overflow: hidden;
text-overflow: ellipsis;
white-space: nowrap;
}
.youtube-discovery-modal .discovery-table .yt-track,
.youtube-discovery-modal .discovery-table .yt-artist {
color: rgba(255, 255, 255, 0.8);
}
.youtube-discovery-modal .discovery-table .discovery-status.found {
color: #1ed760;
font-weight: 600;
}
.youtube-discovery-modal .discovery-table .discovery-status.not-found {
color: #ff6b6b;
font-weight: 600;
}
.youtube-discovery-modal .discovery-table .discovery-status.error {
color: #ffb84d;
font-weight: 600;
}
.youtube-discovery-modal .discovery-table .spotify-track,
.youtube-discovery-modal .discovery-table .spotify-artist,
.youtube-discovery-modal .discovery-table .spotify-album {
color: #ffffff;
}
.youtube-discovery-modal .modal-footer {
padding: 30px;
border-top: 1px solid rgba(255, 255, 255, 0.1);
display: flex;
align-items: center;
justify-content: space-between;
}
.youtube-discovery-modal .modal-footer-left {
display: flex;
gap: 12px;
align-items: center;
}
.youtube-discovery-modal .modal-footer-right {
display: flex;
gap: 12px;
}
.youtube-discovery-modal .modal-btn {
padding: 12px 24px;
border-radius: 12px;
font-size: 14px;
font-weight: 600;
cursor: pointer;
transition: all 0.3s ease;
border: none;
}
.youtube-discovery-modal .modal-btn-secondary {
background: rgba(255, 255, 255, 0.1);
color: #ffffff;
border: 1px solid rgba(255, 255, 255, 0.2);
}
.youtube-discovery-modal .modal-btn-secondary:hover {
background: rgba(255, 255, 255, 0.2);
border-color: rgba(255, 255, 255, 0.3);
}
.youtube-discovery-modal .modal-btn-primary {
background: linear-gradient(135deg, #1db954 0%, #1ed760 100%);
color: #ffffff;
border: 1px solid rgba(29, 185, 84, 0.3);
}
.youtube-discovery-modal .modal-btn-primary:hover {
background: linear-gradient(135deg, #1ed760 0%, #1fbc56 100%);
border-color: rgba(29, 185, 84, 0.5);
transform: translateY(-2px);
box-shadow: 0 4px 12px rgba(29, 185, 84, 0.3);
}
.youtube-discovery-modal .modal-btn-danger {
background: linear-gradient(135deg, #ff6b6b 0%, #ff5555 100%);
color: #ffffff;
border: 1px solid rgba(255, 107, 107, 0.3);
}
.youtube-discovery-modal .modal-btn-danger:hover {
background: linear-gradient(135deg, #ff5555 0%, #ff4444 100%);
border-color: rgba(255, 107, 107, 0.5);
transform: translateY(-2px);
box-shadow: 0 4px 12px rgba(255, 107, 107, 0.3);
}
.youtube-discovery-modal .sync-progress-display {
color: #1ed760;
font-size: 14px;
font-weight: 500;
padding: 8px 12px;
background: rgba(29, 185, 84, 0.1);
border-radius: 8px;
border: 1px solid rgba(29, 185, 84, 0.2);
}
/* Modal state management */
.modal-overlay.hidden {
display: none !important;
}
/* Playlist Details Modal - Clean Premium Design */
.playlist-modal {
max-width: 900px;
width: 90%;
max-height: 90vh;
display: flex;
flex-direction: column;
/* Premium glassmorphic foundation */
background: linear-gradient(135deg,
rgba(20, 20, 20, 0.95) 0%,
rgba(12, 12, 12, 0.98) 100%);
backdrop-filter: blur(20px) saturate(1.2);
border-radius: 20px;
border: 1px solid rgba(255, 255, 255, 0.12);
border-top: 1px solid rgba(255, 255, 255, 0.18);
/* Premium shadow effect */
box-shadow:
0 20px 60px rgba(0, 0, 0, 0.6),
0 8px 32px rgba(0, 0, 0, 0.4),
0 0 40px rgba(29, 185, 84, 0.1),
inset 0 1px 0 rgba(255, 255, 255, 0.15);
overflow: hidden;
}
.playlist-modal-header {
display: flex;
align-items: flex-start;
justify-content: space-between;
padding: 24px 28px 16px 28px;
border-bottom: 1px solid rgba(255, 255, 255, 0.08);
}
.playlist-header-content h2 {
color: #ffffff;
font-size: 22px;
font-weight: 700;
margin: 0 0 8px 0;
line-height: 1.2;
}
.playlist-quick-info {
display: flex;
gap: 16px;
font-size: 14px;
}
.playlist-track-count {
color: #1ed760;
font-weight: 600;
}
.playlist-owner {
color: #b3b3b3;
}
.playlist-modal-close {
color: #b3b3b3;
font-size: 28px;
cursor: pointer;
line-height: 1;
transition: all 0.2s ease;
padding: 4px;
margin: -4px;
}
.playlist-modal-close:hover {
color: #ffffff;
transform: scale(1.1);
}
.playlist-modal-body {
flex: 1;
padding: 0 28px;
padding-left: 0;
overflow: hidden;
display: flex;
flex-direction: column;
}
.playlist-description {
color: #e0e0e0;
font-size: 14px;
line-height: 1.5;
margin-bottom: 20px;
padding: 16px;
background: rgba(29, 185, 84, 0.05);
border-radius: 12px;
border-left: 3px solid #1ed760;
}
.playlist-tracks-container {
flex: 1;
overflow: hidden;
display: flex;
flex-direction: column;
}
.playlist-tracks-list {
flex: 1;
overflow-y: auto;
margin: 0; /* Negative margin for better scrolling */
padding: 0 12px;
}
/* Custom scrollbar for playlist tracks list */
*::-webkit-scrollbar {
width: 12px;
}
*::-webkit-scrollbar-track {
background: rgba(255, 255, 255, 0.1);
border-radius: 6px;
}
*::-webkit-scrollbar-thumb {
background: rgba(255, 255, 255, 0.3);
border-radius: 6px;
border: 2px solid rgba(255, 255, 255, 0.1);
}
*::-webkit-scrollbar-thumb:hover {
background: rgba(255, 255, 255, 0.5);
}
.playlist-track-item {
display: flex;
align-items: center;
padding: 12px 16px;
border-radius: 8px;
margin-bottom: 2px;
transition: all 0.2s ease;
}
.playlist-track-item:hover {
background: rgba(255, 255, 255, 0.05);
}
.playlist-track-number {
width: 32px;
text-align: center;
color: #666666;
font-size: 13px;
font-weight: 500;
}
.playlist-track-info {
flex: 1;
margin-left: 16px;
min-width: 0;
}
.playlist-track-name {
color: #ffffff;
font-size: 14px;
font-weight: 500;
margin-bottom: 3px;
line-height: 1.3;
white-space: nowrap;
overflow: hidden;
text-overflow: ellipsis;
}
.playlist-track-artists {
color: #b3b3b3;
font-size: 12px;
line-height: 1.2;
white-space: nowrap;
overflow: hidden;
text-overflow: ellipsis;
}
.playlist-track-duration {
color: #b3b3b3;
font-size: 12px;
font-weight: 500;
margin-left: 16px;
min-width: 40px;
text-align: right;
}
.playlist-modal-footer {
padding: 20px 28px 24px 28px;
border-top: 1px solid rgba(255, 255, 255, 0.08);
display: flex;
gap: 12px;
justify-content: space-between;
align-items: center;
}
.playlist-modal-footer-left {
display: flex;
gap: 12px;
}
.playlist-modal-footer-right {
display: flex;
gap: 12px;
}
.playlist-modal-btn {
padding: 12px 24px;
border-radius: 10px;
font-size: 14px;
font-weight: 600;
cursor: pointer;
transition: all 0.2s ease;
border: none;
min-width: 100px;
}
.playlist-modal-btn-secondary {
background: rgba(255, 255, 255, 0.08);
color: #e0e0e0;
border: 1px solid rgba(255, 255, 255, 0.12);
}
.playlist-modal-btn-secondary:hover {
background: rgba(255, 255, 255, 0.12);
color: #ffffff;
transform: translateY(-1px);
}
.playlist-modal-btn-primary {
background: linear-gradient(135deg, #1db954, #1ed760);
color: #000000;
font-weight: 700;
box-shadow: 0 4px 16px rgba(29, 185, 84, 0.3);
}
.playlist-modal-btn-primary:hover {
transform: translateY(-1px);
box-shadow: 0 6px 20px rgba(29, 185, 84, 0.4);
}
.playlist-modal-btn-tertiary {
background: #404040;
color: #ffffff;
border: 1px solid #666666;
}
.playlist-modal-btn-tertiary:hover {
background: #505050;
border-color: #777777;
transform: translateY(-1px);
}
.playlist-modal-btn-danger {
background: linear-gradient(135deg, #dc2626, #ef4444);
color: #ffffff;
font-weight: 700;
box-shadow: 0 4px 16px rgba(220, 38, 38, 0.3);
}
.playlist-modal-btn-danger:hover {
background: linear-gradient(135deg, #b91c1c, #dc2626);
transform: translateY(-1px);
box-shadow: 0 6px 20px rgba(220, 38, 38, 0.4);
}
.playlist-modal-btn-warning {
background: linear-gradient(135deg, #f59e0b, #fbbf24);
color: #000000;
font-weight: 700;
box-shadow: 0 4px 16px rgba(245, 158, 11, 0.3);
}
.playlist-modal-btn-warning:hover {
background: linear-gradient(135deg, #d97706, #f59e0b);
transform: translateY(-1px);
box-shadow: 0 6px 20px rgba(245, 158, 11, 0.4);
}
/* Watchlist Modal Styles */
.watchlist-artists-list {
max-height: 400px;
overflow-y: auto;
margin-top: 20px;
padding: 30px;
}
.watchlist-artist-item {
display: flex;
align-items: center;
justify-content: space-between;
padding: 16px 20px 16px 24px;
margin-bottom: 12px;
background: rgba(255, 255, 255, 0.03);
border: 1px solid rgba(255, 255, 255, 0.08);
border-radius: 12px;
transition: all 0.2s ease;
}
.watchlist-artist-item:hover {
background: rgba(255, 255, 255, 0.06);
border-color: rgba(29, 185, 84, 0.2);
transform: translateY(-1px);
}
/* Watchlist Search */
.watchlist-search-container {
padding: 0 30px;
}
.watchlist-search-input {
width: 100%;
padding: 12px 16px;
background: rgba(255, 255, 255, 0.05);
border: 1px solid rgba(255, 255, 255, 0.1);
border-radius: 10px;
color: #ffffff;
font-size: 14px;
font-family: inherit;
transition: all 0.2s ease;
}
.watchlist-search-input:focus {
outline: none;
background: rgba(255, 255, 255, 0.08);
border-color: rgba(29, 185, 84, 0.4);
box-shadow: 0 0 0 3px rgba(29, 185, 84, 0.1);
}
.watchlist-search-input::placeholder {
color: rgba(255, 255, 255, 0.4);
}
/* Artist Image */
.watchlist-artist-image {
width: 56px;
height: 56px;
border-radius: 50%;
object-fit: cover;
margin-right: 16px;
flex-shrink: 0;
border: 2px solid rgba(255, 255, 255, 0.1);
transition: all 0.2s ease;
}
.watchlist-artist-item:hover .watchlist-artist-image {
border-color: rgba(29, 185, 84, 0.4);
transform: scale(1.05);
}
.watchlist-artist-image-placeholder {
width: 56px;
height: 56px;
border-radius: 50%;
margin-right: 16px;
flex-shrink: 0;
background: linear-gradient(135deg, rgba(29, 185, 84, 0.2), rgba(29, 185, 84, 0.05));
border: 2px solid rgba(29, 185, 84, 0.3);
display: flex;
align-items: center;
justify-content: center;
font-size: 24px;
transition: all 0.2s ease;
}
.watchlist-artist-item:hover .watchlist-artist-image-placeholder {
background: linear-gradient(135deg, rgba(29, 185, 84, 0.3), rgba(29, 185, 84, 0.1));
border-color: rgba(29, 185, 84, 0.5);
transform: scale(1.05);
}
/* ===== WISHLIST OVERVIEW MODAL STYLES ===== */
/* Category Grid */
.wishlist-category-grid {
display: grid;
grid-template-columns: repeat(2, 1fr);
gap: 20px;
padding: 28px;
}
/* Category Card */
.wishlist-category-card {
background: linear-gradient(135deg,
rgba(26, 26, 26, 0.95) 0%,
rgba(18, 18, 18, 0.98) 100%);
border-radius: 16px;
border: 1px solid rgba(255, 255, 255, 0.08);
padding: 32px 24px;
text-align: center;
cursor: pointer;
transition: all 0.3s ease;
position: relative;
overflow: hidden;
min-height: 250px;
display: flex;
align-items: center;
justify-content: center;
}
/* Mosaic Background with Scrolling Rows */
.wishlist-mosaic-background {
position: absolute;
top: 0;
left: 0;
width: 100%;
height: 100%;
display: flex;
flex-direction: column;
z-index: 0;
}
.wishlist-mosaic-row-wrapper {
flex: 1;
overflow: hidden;
position: relative;
}
.wishlist-mosaic-row {
display: flex;
width: fit-content;
height: 100%;
opacity: 0;
animation: fadeInRow 1s ease-out forwards, infiniteScroll var(--speed, 30s) linear infinite;
}
.wishlist-mosaic-row.scroll-right {
animation-direction: normal, reverse;
}
.wishlist-mosaic-tile {
width: 80px;
height: 100%;
flex-shrink: 0;
overflow: hidden;
}
.wishlist-mosaic-image {
width: 100%;
height: 100%;
background-size: cover;
background-position: center;
transition: transform 0.5s ease;
}
/* Fallback gradient for small collections */
.wishlist-mosaic-fallback {
position: absolute;
top: 0;
left: 0;
width: 100%;
height: 100%;
background: linear-gradient(135deg,
rgba(29, 185, 84, 0.35) 0%,
rgba(138, 43, 226, 0.35) 50%,
rgba(255, 20, 147, 0.35) 100%);
background-size: 200% 200%;
animation: gradientShift 8s ease infinite;
z-index: 0;
opacity: 0;
animation: fadeInRow 1s ease-out forwards, gradientShift 8s ease infinite;
}
@keyframes gradientShift {
0%, 100% {
background-position: 0% 50%;
}
50% {
background-position: 100% 50%;
}
}
/* Overlay for text readability */
.wishlist-mosaic-overlay {
position: absolute;
top: 0;
left: 0;
width: 100%;
height: 100%;
background: linear-gradient(135deg,
rgba(0, 0, 0, 0.85) 0%,
rgba(0, 0, 0, 0.75) 100%);
z-index: 1;
pointer-events: none;
}
/* Content layer above mosaic */
.wishlist-category-content {
position: relative;
z-index: 2;
width: 100%;
}
/* Fade in rows initially */
@keyframes fadeInRow {
0% {
opacity: 0;
}
100% {
opacity: 0.7;
}
}
/* Infinite scrolling animation */
/* Content is duplicated 3x, animation moves by -33.333% (one set) for seamless loop */
@keyframes infiniteScroll {
0% {
transform: translateX(0);
}
100% {
transform: translateX(-33.333%);
}
}
.wishlist-category-card::before {
content: '';
position: absolute;
top: 0;
left: 0;
right: 0;
height: 4px;
background: linear-gradient(90deg, #1db954, #1ed760);
opacity: 0;
transition: opacity 0.3s ease;
}
.wishlist-category-card:hover::before {
opacity: 1;
}
.wishlist-category-card:hover {
border-color: rgba(29, 185, 84, 0.3);
transform: translateY(-4px);
box-shadow: 0 8px 24px rgba(29, 185, 84, 0.2);
}
.wishlist-category-card:hover .wishlist-mosaic-image {
transform: scale(1.1);
}
.wishlist-category-card:hover .wishlist-mosaic-overlay {
background: linear-gradient(135deg,
rgba(29, 185, 84, 0.2) 0%,
rgba(0, 0, 0, 0.8) 100%);
}
.wishlist-category-card.next-in-queue {
border-color: rgba(29, 185, 84, 0.4);
background: linear-gradient(135deg,
rgba(29, 185, 84, 0.08) 0%,
rgba(18, 18, 18, 0.98) 100%);
}
.wishlist-category-icon {
font-size: 48px;
margin-bottom: 16px;
filter: drop-shadow(0 4px 12px rgba(29, 185, 84, 0.3));
}
.wishlist-category-title {
font-size: 20px;
font-weight: 600;
color: #ffffff;
margin-bottom: 8px;
}
.wishlist-category-count {
font-size: 32px;
font-weight: 700;
color: #1ed760;
margin: 12px 0;
}
.wishlist-category-badge {
display: inline-block;
background: rgba(29, 185, 84, 0.2);
border: 1px solid rgba(29, 185, 84, 0.4);
color: #1ed760;
font-size: 12px;
font-weight: 600;
padding: 6px 12px;
border-radius: 20px;
margin-top: 12px;
}
/* Category Tracks View */
.wishlist-category-tracks {
padding: 0 28px;
display: flex;
flex-direction: column;
height: 100%;
}
.wishlist-category-header {
display: flex;
align-items: center;
gap: 16px;
padding: 16px 0;
border-bottom: 1px solid rgba(255, 255, 255, 0.08);
margin-bottom: 16px;
}
.wishlist-back-btn {
background: rgba(255, 255, 255, 0.08);
border: 1px solid rgba(255, 255, 255, 0.12);
color: #e0e0e0;
padding: 8px 16px;
border-radius: 8px;
font-size: 14px;
font-weight: 600;
cursor: pointer;
transition: all 0.2s ease;
}
.wishlist-back-btn:hover {
background: rgba(255, 255, 255, 0.12);
color: #ffffff;
transform: translateX(-2px);
}
.wishlist-category-name {
font-size: 18px;
font-weight: 600;
color: #ffffff;
}
.loading-indicator {
text-align: center;
padding: 60px 20px;
color: #b3b3b3;
font-size: 16px;
}
.empty-state {
text-align: center;
padding: 60px 20px;
color: #b3b3b3;
font-size: 16px;
}
.playlist-tracks-scroll {
flex: 1;
overflow-y: auto;
max-height: 600px;
padding-right: 8px;
}
.playlist-tracks-scroll::-webkit-scrollbar {
width: 8px;
}
.playlist-tracks-scroll::-webkit-scrollbar-track {
background: rgba(255, 255, 255, 0.05);
border-radius: 4px;
}
.playlist-tracks-scroll::-webkit-scrollbar-thumb {
background: rgba(29, 185, 84, 0.4);
border-radius: 4px;
}
.playlist-tracks-scroll::-webkit-scrollbar-thumb:hover {
background: rgba(29, 185, 84, 0.6);
}
/* Album Grouping Cards */
.wishlist-album-grid {
display: flex;
flex-direction: column;
gap: 12px;
padding: 8px 0;
}
.wishlist-album-card {
background: linear-gradient(135deg, rgba(26, 26, 26, 0.95) 0%, rgba(18, 18, 18, 0.98) 100%);
border: 1px solid rgba(255, 255, 255, 0.08);
border-radius: 12px;
overflow: hidden;
transition: all 0.3s ease;
cursor: pointer;
}
.wishlist-album-card:hover {
border-color: rgba(29, 185, 84, 0.3);
transform: translateY(-2px);
box-shadow: 0 4px 12px rgba(29, 185, 84, 0.15);
}
.wishlist-album-header {
display: flex;
align-items: center;
padding: 16px;
gap: 16px;
}
.wishlist-album-image {
width: 64px;
height: 64px;
background-size: cover;
background-position: center;
background-color: rgba(255, 255, 255, 0.05);
border-radius: 8px;
flex-shrink: 0;
}
.wishlist-album-info {
flex: 1;
min-width: 0;
}
.wishlist-album-name {
font-size: 16px;
font-weight: 600;
color: #ffffff;
margin-bottom: 4px;
overflow: hidden;
text-overflow: ellipsis;
white-space: nowrap;
}
.wishlist-album-artist {
font-size: 14px;
color: #b3b3b3;
margin-bottom: 4px;
overflow: hidden;
text-overflow: ellipsis;
white-space: nowrap;
}
.wishlist-album-track-count {
font-size: 12px;
color: #1db954;
font-weight: 500;
}
.wishlist-album-expand-icon {
font-size: 14px;
color: #b3b3b3;
transition: transform 0.3s ease;
flex-shrink: 0;
}
.wishlist-album-tracks {
border-top: 1px solid rgba(255, 255, 255, 0.05);
padding: 0;
background: rgba(0, 0, 0, 0.2);
}
.wishlist-album-track {
padding: 12px 16px;
border-bottom: 1px solid rgba(255, 255, 255, 0.03);
transition: background 0.2s ease;
}
.wishlist-album-track:last-child {
border-bottom: none;
}
.wishlist-album-track:hover {
background: rgba(29, 185, 84, 0.05);
}
.wishlist-album-track-name {
font-size: 14px;
color: #e0e0e0;
}
/* Singles Track Items with Images */
.playlist-track-item-with-image {
display: flex;
align-items: center;
gap: 12px;
padding: 12px;
border-radius: 8px;
transition: background 0.2s ease;
border-bottom: 1px solid rgba(255, 255, 255, 0.03);
}
.playlist-track-item-with-image:hover {
background: rgba(29, 185, 84, 0.05);
}
.playlist-track-image {
width: 48px;
height: 48px;
background-size: cover;
background-position: center;
background-color: rgba(255, 255, 255, 0.05);
border-radius: 6px;
flex-shrink: 0;
}
/* Wishlist Delete Buttons */
.wishlist-track-item {
position: relative;
}
.wishlist-delete-btn {
position: absolute;
right: 12px;
top: 50%;
transform: translateY(-50%);
background: rgba(220, 53, 69, 0.9);
border: none;
border-radius: 6px;
padding: 8px 12px;
font-size: 16px;
cursor: pointer;
transition: all 0.2s ease;
opacity: 0;
pointer-events: none;
z-index: 10;
}
.wishlist-track-item:hover .wishlist-delete-btn {
opacity: 1;
pointer-events: all;
}
.wishlist-delete-btn:hover {
background: rgba(220, 53, 69, 1);
transform: translateY(-50%) scale(1.1);
}
.wishlist-delete-btn:active {
transform: translateY(-50%) scale(0.95);
}
/* Smaller delete button for tracks within albums */
.wishlist-delete-btn-small {
padding: 6px 10px;
font-size: 14px;
}
/* Album header delete button */
.wishlist-album-header {
position: relative;
}
.wishlist-delete-album-btn {
position: absolute;
right: 40px;
top: 50%;
transform: translateY(-50%);
background: rgba(220, 53, 69, 0.9);
border: none;
border-radius: 6px;
padding: 8px 12px;
font-size: 16px;
cursor: pointer;
transition: all 0.2s ease;
opacity: 0;
pointer-events: none;
z-index: 10;
}
.wishlist-album-card:hover .wishlist-delete-album-btn {
opacity: 1;
pointer-events: all;
}
.wishlist-delete-album-btn:hover {
background: rgba(220, 53, 69, 1);
transform: translateY(-50%) scale(1.1);
}
.wishlist-delete-album-btn:active {
transform: translateY(-50%) scale(0.95);
}
/* Ensure album track items have proper positioning for delete button */
.wishlist-album-track.wishlist-track-item {
position: relative;
display: flex;
align-items: center;
justify-content: space-between;
}
.wishlist-album-track.wishlist-track-item .wishlist-album-track-name {
flex: 1;
}
/* Confirmation Modal - Higher z-index to show above wishlist modal */
.confirmation-modal-overlay {
position: fixed;
top: 0;
left: 0;
width: 100vw;
height: 100vh;
background: rgba(0, 0, 0, 0.7);
backdrop-filter: blur(8px);
z-index: 12000;
display: flex;
align-items: center;
justify-content: center;
opacity: 0;
pointer-events: none;
transition: opacity 0.2s ease;
}
.confirmation-modal-overlay.show {
opacity: 1;
pointer-events: all;
}
.confirmation-modal {
background: #1a1a1a;
border: 1px solid rgba(29, 185, 84, 0.3);
border-radius: 12px;
padding: 32px;
max-width: 400px;
width: 90%;
box-shadow: 0 8px 32px rgba(0, 0, 0, 0.6);
transform: scale(0.9);
transition: transform 0.2s ease;
}
.confirmation-modal-overlay.show .confirmation-modal {
transform: scale(1);
}
.confirmation-modal-icon {
font-size: 48px;
text-align: center;
margin-bottom: 16px;
}
.confirmation-modal-title {
font-size: 20px;
font-weight: 600;
color: #ffffff;
text-align: center;
margin-bottom: 12px;
}
.confirmation-modal-message {
font-size: 14px;
color: #b3b3b3;
text-align: center;
margin-bottom: 24px;
line-height: 1.5;
}
.confirmation-modal-buttons {
display: flex;
gap: 12px;
justify-content: center;
}
.confirmation-modal-btn {
padding: 12px 32px;
border-radius: 8px;
border: none;
font-size: 14px;
font-weight: 600;
cursor: pointer;
transition: all 0.2s ease;
min-width: 100px;
}
.confirmation-modal-btn-cancel {
background: rgba(255, 255, 255, 0.1);
color: #ffffff;
}
.confirmation-modal-btn-cancel:hover {
background: rgba(255, 255, 255, 0.15);
}
.confirmation-modal-btn-confirm {
background: #dc3545;
color: #ffffff;
}
.confirmation-modal-btn-confirm:hover {
background: #c82333;
transform: scale(1.05);
}
.confirmation-modal-btn:active {
transform: scale(0.95);
}
/* Mobile Responsive */
@media (max-width: 768px) {
.wishlist-category-grid {
grid-template-columns: 1fr;
gap: 16px;
padding: 20px;
}
.wishlist-category-card {
padding: 24px 20px;
min-height: 200px;
}
.wishlist-mosaic-tile {
width: 60px; /* Smaller tiles on mobile */
}
.wishlist-category-icon {
font-size: 36px;
}
.wishlist-category-title {
font-size: 18px;
}
.wishlist-category-count {
font-size: 28px;
}
}
.watchlist-artist-info {
display: flex;
flex-direction: column;
gap: 4px;
flex: 1;
}
.watchlist-artist-name {
font-size: 16px;
font-weight: 600;
color: #ffffff;
margin-bottom: 4px;
}
.watchlist-artist-date {
font-size: 13px;
color: rgba(255, 255, 255, 0.6);
font-weight: 400;
}
.watchlist-artist-scan {
font-size: 12px;
color: rgba(29, 185, 84, 0.7);
font-weight: 500;
}
.watchlist-actions {
display: flex;
gap: 12px;
align-items: center;
justify-content: center;
padding: 20px 0;
border-bottom: 1px solid rgba(255, 255, 255, 0.08);
}
/* ===== WATCHLIST ARTIST CONFIG MODAL STYLES ===== */
#watchlist-artist-config-modal-overlay {
z-index: 11000; /* Higher than default modal-overlay to appear on top of watchlist modal */
}
.watchlist-artist-config-modal {
background: linear-gradient(135deg,
rgba(26, 26, 26, 0.98) 0%,
rgba(18, 18, 18, 0.98) 100%);
border-radius: 24px;
box-shadow: 0 25px 80px rgba(0, 0, 0, 0.6);
max-width: 580px;
width: 90%;
max-height: 90vh;
overflow: hidden;
display: flex;
flex-direction: column;
border: 1px solid rgba(255, 255, 255, 0.1);
}
.watchlist-artist-config-header {
position: relative;
background: linear-gradient(180deg,
rgba(29, 185, 84, 0.15) 0%,
rgba(29, 185, 84, 0.05) 50%,
transparent 100%);
border-bottom: 1px solid rgba(255, 255, 255, 0.08);
}
.watchlist-artist-config-hero {
padding: 32px 28px;
display: flex;
align-items: center;
gap: 24px;
}
.watchlist-artist-config-hero-image {
width: 100px;
height: 100px;
border-radius: 50%;
object-fit: cover;
border: 3px solid rgba(29, 185, 84, 0.3);
box-shadow: 0 8px 24px rgba(29, 185, 84, 0.2);
flex-shrink: 0;
}
.watchlist-artist-config-hero-info {
flex: 1;
min-width: 0;
}
.watchlist-artist-config-hero-name {
font-size: 28px;
font-weight: 700;
color: #ffffff;
margin-bottom: 8px;
text-shadow: 0 2px 8px rgba(0, 0, 0, 0.3);
}
.watchlist-artist-config-hero-stats {
display: flex;
gap: 20px;
margin-top: 12px;
flex-wrap: wrap;
}
.watchlist-artist-config-stat {
display: flex;
flex-direction: column;
gap: 2px;
}
.watchlist-artist-config-stat-value {
font-size: 18px;
font-weight: 600;
color: rgba(29, 185, 84, 1);
}
.watchlist-artist-config-stat-label {
font-size: 12px;
color: rgba(255, 255, 255, 0.5);
text-transform: uppercase;
letter-spacing: 0.5px;
}
.watchlist-artist-config-hero-genres {
margin-top: 12px;
display: flex;
flex-wrap: wrap;
gap: 8px;
}
.watchlist-artist-config-genre-tag {
padding: 4px 12px;
background: rgba(29, 185, 84, 0.15);
border: 1px solid rgba(29, 185, 84, 0.3);
border-radius: 12px;
font-size: 12px;
color: rgba(29, 185, 84, 1);
font-weight: 500;
}
.watchlist-artist-config-close {
position: absolute;
top: 20px;
right: 20px;
font-size: 32px;
color: rgba(255, 255, 255, 0.6);
cursor: pointer;
transition: all 0.2s ease;
line-height: 1;
width: 36px;
height: 36px;
display: flex;
align-items: center;
justify-content: center;
border-radius: 8px;
background: rgba(0, 0, 0, 0.3);
}
.watchlist-artist-config-close:hover {
color: #ffffff;
background: rgba(255, 59, 48, 0.2);
transform: scale(1.1);
}
.watchlist-artist-config-content {
flex: 1;
overflow-y: auto;
display: flex;
flex-direction: column;
}
.watchlist-artist-config-body {
padding: 28px;
flex: 1;
}
.config-section {
margin-bottom: 24px;
}
.config-section-title {
font-size: 20px;
font-weight: 600;
color: #ffffff;
margin-bottom: 8px;
}
.config-section-subtitle {
font-size: 14px;
color: rgba(255, 255, 255, 0.6);
margin-bottom: 24px;
}
.config-options {
display: flex;
flex-direction: column;
gap: 16px;
}
.config-option {
display: flex;
align-items: center;
padding: 20px;
background: rgba(255, 255, 255, 0.03);
border: 2px solid rgba(255, 255, 255, 0.08);
border-radius: 16px;
cursor: pointer;
transition: all 0.3s ease;
position: relative;
}
.config-option:hover {
background: rgba(255, 255, 255, 0.05);
border-color: rgba(29, 185, 84, 0.3);
transform: translateY(-2px);
}
.config-option input[type="checkbox"] {
width: 24px;
height: 24px;
margin-right: 16px;
cursor: pointer;
accent-color: #1db954;
flex-shrink: 0;
}
.config-option-content {
display: flex;
align-items: center;
flex: 1;
gap: 16px;
}
.config-option-icon {
font-size: 32px;
flex-shrink: 0;
}
.config-option-text {
display: flex;
flex-direction: column;
gap: 4px;
}
.config-option-title {
font-size: 16px;
font-weight: 600;
color: #ffffff;
}
.config-option-description {
font-size: 13px;
color: rgba(255, 255, 255, 0.5);
}
.config-option input[type="checkbox"]:checked + .config-option-content {
opacity: 1;
}
.config-option input[type="checkbox"]:not(:checked) + .config-option-content {
opacity: 0.5;
}
.watchlist-artist-config-footer {
padding: 20px 28px;
border-top: 1px solid rgba(255, 255, 255, 0.08);
background: rgba(0, 0, 0, 0.2);
}
.config-modal-actions {
display: flex;
gap: 12px;
justify-content: flex-end;
}
.config-modal-btn {
padding: 12px 28px;
border-radius: 12px;
font-size: 15px;
font-weight: 600;
cursor: pointer;
transition: all 0.2s ease;
border: none;
outline: none;
}
.config-modal-btn-primary {
background: linear-gradient(135deg, #1ed760, #1db954);
color: #000;
box-shadow: 0 4px 16px rgba(29, 185, 84, 0.3);
}
.config-modal-btn-primary:hover {
background: linear-gradient(135deg, #1fdf64, #1ed760);
box-shadow: 0 6px 20px rgba(29, 185, 84, 0.4);
transform: translateY(-1px);
}
.config-modal-btn-primary:active {
transform: translateY(0);
}
.config-modal-btn-primary:disabled {
opacity: 0.5;
cursor: not-allowed;
}
.config-modal-btn-secondary {
background: rgba(255, 255, 255, 0.08);
color: #ffffff;
border: 1px solid rgba(255, 255, 255, 0.15);
}
.config-modal-btn-secondary:hover {
background: rgba(255, 255, 255, 0.12);
border-color: rgba(255, 255, 255, 0.25);
}
/* Mobile Responsive */
@media (max-width: 640px) {
.watchlist-artist-config-modal {
width: 95%;
max-width: none;
}
.watchlist-artist-config-hero {
flex-direction: column;
text-align: center;
padding: 24px 20px;
}
.watchlist-artist-config-hero-stats {
justify-content: center;
}
.config-modal-actions {
flex-direction: column-reverse;
}
.config-modal-btn {
width: 100%;
}
}
/* Add these styles to the end of style.css */
.sync-progress-indicator {
margin-top: 10px;
display: none; /* Hidden by default */
}
.progress-bar-sync {
height: 8px;
background-color: rgba(255, 255, 255, 0.1);
border-radius: 4px;
overflow: hidden;
}
.progress-fill-sync {
height: 100%;
background-color: #1ed760;
width: 0%;
border-radius: 4px;
transition: width 0.5s ease-in-out;
}
.progress-text-sync {
font-size: 11px;
color: #b3b3b3;
text-align: center;
margin-top: 4px;
white-space: nowrap;
overflow: hidden;
text-overflow: ellipsis;
max-width: 100%;
line-height: 1.2;
}
/* Modal sync status display (matches GUI) */
.playlist-modal-sync-status {
background: rgba(29, 185, 84, 0.1);
border: 1px solid rgba(29, 185, 84, 0.3);
border-radius: 12px;
padding: 8px 12px;
margin-top: 8px;
display: flex;
align-items: center;
gap: 8px;
font-size: 12px;
font-weight: 500;
}
.sync-stat.total-tracks {
color: #ffa500;
}
.sync-stat.matched-tracks {
color: #1db954;
}
.sync-stat.failed-tracks {
color: #e22134;
}
.sync-stat.percentage {
color: #1db954;
font-weight: 700;
}
.sync-separator {
color: #666666;
}
/* Playlist card sync status display */
.playlist-card-sync-status {
background: rgba(29, 185, 84, 0.08);
border: 1px solid rgba(29, 185, 84, 0.2);
border-radius: 8px;
padding: 4px 8px;
margin-bottom: 6px;
display: flex;
align-items: center;
justify-content: center;
gap: 6px;
font-size: 11px;
font-weight: 500;
}
/* ==============================================
DOWNLOAD MISSING TRACKS MODAL STYLES
============================================== */
#download-missing-modal {
display: none;
position: fixed;
top: 0;
left: 0;
width: 100vw;
height: 100vh;
background: rgba(18, 18, 18, 0.85);
backdrop-filter: blur(12px);
z-index: 10000;
align-items: center;
justify-content: center;
opacity: 1;
transition: opacity 0.4s ease-in-out;
}
.download-missing-modal-content {
/* Premium glassmorphic foundation matching playlist modal */
background: linear-gradient(135deg,
rgba(20, 20, 20, 0.95) 0%,
rgba(12, 12, 12, 0.98) 100%);
backdrop-filter: blur(20px) saturate(1.2);
border-radius: 20px;
border: 1px solid rgba(255, 255, 255, 0.12);
border-top: 1px solid rgba(255, 255, 255, 0.18);
/* Premium shadow effect */
box-shadow:
0 25px 80px rgba(0, 0, 0, 0.7),
0 10px 40px rgba(0, 0, 0, 0.5),
0 0 50px rgba(29, 185, 84, 0.15),
inset 0 1px 0 rgba(255, 255, 255, 0.15);
width: 1400px;
height: 900px;
max-width: 95vw;
max-height: 95vh;
display: flex;
flex-direction: column;
overflow: hidden;
/* Smooth animation */
transform: scale(1);
transition: transform 0.4s ease-in-out;
}
.download-missing-modal-header {
/* Enhanced gradient with subtle transparency and glow */
background: linear-gradient(135deg,
rgba(45, 45, 45, 0.8) 0%,
rgba(26, 26, 26, 0.9) 100%);
border-bottom: 1px solid rgba(255, 255, 255, 0.08);
padding: 0;
display: flex;
flex-direction: column;
overflow: hidden;
/* Subtle inner glow */
box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.1);
}
/* Hero Section for Context-Aware Display */
.download-missing-modal-hero {
display: flex;
align-items: center;
padding: 20px 28px;
gap: 20px;
position: relative;
min-height: 110px;
}
/* Hero Background Image (for artist/album context) */
.download-missing-modal-hero-bg {
position: absolute;
top: 0;
left: 0;
right: 0;
bottom: 0;
background-size: cover;
background-position: center;
opacity: 0.15;
filter: blur(8px);
z-index: 1;
}
.download-missing-modal-hero-bg::after {
content: '';
position: absolute;
top: 0;
left: 0;
right: 0;
bottom: 0;
background: linear-gradient(135deg,
rgba(0, 0, 0, 0.7) 0%,
rgba(0, 0, 0, 0.3) 100%);
}
/* Hero Content */
.download-missing-modal-hero-content {
display: flex;
align-items: center;
gap: 20px;
position: relative;
z-index: 2;
flex: 1;
}
/* Hero Images Container */
.download-missing-modal-hero-images {
display: flex;
align-items: center;
gap: 16px;
flex-shrink: 0;
}
.download-missing-modal-hero-image {
width: 80px;
height: 80px;
border-radius: 12px;
object-fit: cover;
box-shadow:
0 8px 24px rgba(0, 0, 0, 0.4),
0 4px 12px rgba(0, 0, 0, 0.2),
inset 0 1px 0 rgba(255, 255, 255, 0.1);
border: 1px solid rgba(255, 255, 255, 0.1);
transition: all 0.3s ease;
}
.download-missing-modal-hero-image:hover {
transform: scale(1.05);
box-shadow:
0 12px 32px rgba(0, 0, 0, 0.5),
0 6px 16px rgba(0, 0, 0, 0.3),
inset 0 1px 0 rgba(255, 255, 255, 0.2);
}
/* Artist Image (circular) */
.download-missing-modal-hero-image.artist {
border-radius: 50%;
width: 70px;
height: 70px;
}
/* Album Image (rounded square) */
.download-missing-modal-hero-image.album {
border-radius: 12px;
width: 80px;
height: 80px;
}
/* Hero Icon (for wishlist/playlist without images) */
.download-missing-modal-hero-icon {
width: 80px;
height: 80px;
display: flex;
align-items: center;
justify-content: center;
background: linear-gradient(135deg,
rgba(29, 185, 84, 0.2) 0%,
rgba(30, 215, 96, 0.1) 100%);
border-radius: 12px;
font-size: 40px;
color: #1ed760;
border: 1px solid rgba(29, 185, 84, 0.3);
box-shadow:
0 8px 24px rgba(29, 185, 84, 0.2),
inset 0 1px 0 rgba(255, 255, 255, 0.1);
}
/* Hero Metadata */
.download-missing-modal-hero-metadata {
flex: 1;
display: flex;
flex-direction: column;
gap: 8px;
min-width: 0;
}
.download-missing-modal-hero-title {
color: #ffffff;
font-size: 22px;
font-weight: 700;
margin: 0;
line-height: 1.2;
text-shadow: 0 2px 8px rgba(0, 0, 0, 0.3);
overflow: hidden;
text-overflow: ellipsis;
white-space: nowrap;
}
.download-missing-modal-hero-subtitle {
color: #e0e0e0;
font-size: 16px;
font-weight: 500;
margin: 0;
opacity: 0.9;
overflow: hidden;
text-overflow: ellipsis;
white-space: nowrap;
}
.download-missing-modal-hero-details {
display: flex;
gap: 16px;
font-size: 14px;
margin-top: 4px;
}
.download-missing-modal-hero-detail {
color: #1ed760;
font-weight: 600;
padding: 4px 8px;
background: rgba(29, 185, 84, 0.1);
border-radius: 6px;
border: 1px solid rgba(29, 185, 84, 0.2);
text-transform: uppercase;
letter-spacing: 0.5px;
font-size: 12px;
}
/* Header Actions (close button) */
.download-missing-modal-header-actions {
position: relative;
z-index: 3;
padding: 16px 24px 0 0;
display: flex;
justify-content: flex-end;
}
/* ===============================
CONTEXT-SPECIFIC STYLING
=============================== */
/* Artist Album Context - Music theme with artist/album colors */
.download-missing-modal-content[data-context="artist_album"] .download-missing-modal-hero-bg {
opacity: 0.2;
}
.download-missing-modal-content[data-context="artist_album"] .download-missing-modal-hero {
background: linear-gradient(135deg,
rgba(45, 45, 45, 0.9) 0%,
rgba(26, 26, 26, 0.95) 100%);
}
.download-missing-modal-content[data-context="artist_album"] .download-missing-modal-hero-detail {
background: rgba(29, 185, 84, 0.15);
border-color: rgba(29, 185, 84, 0.3);
box-shadow: 0 0 10px rgba(29, 185, 84, 0.2);
}
/* Playlist Context - Spotify green theme */
.download-missing-modal-content[data-context="playlist"] .download-missing-modal-hero {
background: linear-gradient(135deg,
rgba(29, 185, 84, 0.1) 0%,
rgba(26, 26, 26, 0.95) 100%);
}
.download-missing-modal-content[data-context="playlist"] .download-missing-modal-hero-icon {
background: linear-gradient(135deg,
rgba(29, 185, 84, 0.25) 0%,
rgba(30, 215, 96, 0.15) 100%);
border-color: rgba(29, 185, 84, 0.4);
box-shadow: 0 8px 24px rgba(29, 185, 84, 0.25);
}
.download-missing-modal-content[data-context="playlist"] .download-missing-modal-hero-detail {
background: rgba(29, 185, 84, 0.12);
border-color: rgba(29, 185, 84, 0.25);
}
/* Wishlist Context - Eye/watch theme with purple accents */
.download-missing-modal-content[data-context="wishlist"] .download-missing-modal-hero {
background: linear-gradient(135deg,
rgba(123, 31, 162, 0.1) 0%,
rgba(26, 26, 26, 0.95) 100%);
}
.download-missing-modal-content[data-context="wishlist"] .download-missing-modal-hero-icon {
background: linear-gradient(135deg,
rgba(123, 31, 162, 0.25) 0%,
rgba(142, 36, 170, 0.15) 100%);
border-color: rgba(123, 31, 162, 0.4);
color: #DA70D6;
box-shadow: 0 8px 24px rgba(123, 31, 162, 0.25);
}
.download-missing-modal-content[data-context="wishlist"] .download-missing-modal-hero-detail {
background: rgba(123, 31, 162, 0.12);
border-color: rgba(123, 31, 162, 0.25);
color: #DA70D6;
}
.download-missing-modal-content[data-context="wishlist"] .stat-total .dashboard-stat-number {
color: #DA70D6;
text-shadow: 0 0 20px rgba(218, 112, 214, 0.4);
}
/* ===============================
ANIMATIONS & POLISH
=============================== */
/* Modal entrance animation */
@keyframes modalFadeIn {
0% {
opacity: 0;
transform: scale(0.9) translateY(20px);
filter: blur(4px);
}
100% {
opacity: 1;
transform: scale(1) translateY(0);
filter: blur(0px);
}
}
@keyframes modalOverlayFadeIn {
0% {
opacity: 0;
backdrop-filter: blur(0px);
}
100% {
opacity: 1;
backdrop-filter: blur(12px);
}
}
/* Apply entrance animations */
#download-missing-modal:not(.hidden) {
animation: modalOverlayFadeIn 0.4s ease-out;
}
#download-missing-modal:not(.hidden) .download-missing-modal-content {
animation: modalFadeIn 0.4s ease-out;
}
/* Hero section animations */
.download-missing-modal-hero-image {
animation: imageSlideIn 0.6s ease-out 0.2s both;
}
@keyframes imageSlideIn {
0% {
opacity: 0;
transform: translateX(-20px) scale(0.8);
}
100% {
opacity: 1;
transform: translateX(0) scale(1);
}
}
.download-missing-modal-hero-metadata {
animation: textSlideIn 0.6s ease-out 0.3s both;
}
@keyframes textSlideIn {
0% {
opacity: 0;
transform: translateY(10px);
}
100% {
opacity: 1;
transform: translateY(0);
}
}
.download-missing-modal-hero-detail {
animation: detailPop 0.4s ease-out 0.5s both;
}
@keyframes detailPop {
0% {
opacity: 0;
transform: scale(0.8);
}
100% {
opacity: 1;
transform: scale(1);
}
}
/* Stats dashboard animation */
.dashboard-stat {
animation: statSlideUp 0.5s ease-out calc(0.4s + var(--stat-index, 0) * 0.1s) both;
}
@keyframes statSlideUp {
0% {
opacity: 0;
transform: translateY(20px);
}
100% {
opacity: 1;
transform: translateY(0);
}
}
/* Progress section animation */
.progress-item {
animation: progressSlideIn 0.5s ease-out calc(0.6s + var(--progress-index, 0) * 0.1s) both;
}
@keyframes progressSlideIn {
0% {
opacity: 0;
transform: translateX(-20px);
}
100% {
opacity: 1;
transform: translateX(0);
}
}
/* Enhanced hover effects */
.dashboard-stat:hover .dashboard-stat-number {
transform: scale(1.1);
filter: brightness(1.2);
}
.download-missing-modal-hero-detail:hover {
transform: translateY(-2px) scale(1.05);
box-shadow: 0 4px 12px rgba(29, 185, 84, 0.3);
}
/* Subtle pulse animation for active elements */
.progress-fill {
position: relative;
overflow: hidden;
}
.progress-fill::before {
content: '';
position: absolute;
top: 0;
left: -100%;
width: 100%;
height: 100%;
background: linear-gradient(90deg,
transparent 0%,
rgba(255, 255, 255, 0.3) 50%,
transparent 100%);
animation: progressShimmer 2s infinite;
}
@keyframes progressShimmer {
0% {
left: -100%;
}
100% {
left: 100%;
}
}
/* ===============================
RESPONSIVE DESIGN
=============================== */
/* Large screens (1600px+) */
@media (min-width: 1600px) {
.download-missing-modal-content {
width: 1500px;
height: 90vh;
}
.download-missing-modal-hero {
min-height: 140px;
padding: 28px 32px;
}
.download-missing-modal-hero-image.album {
width: 90px;
height: 90px;
}
.download-missing-modal-hero-image.artist {
width: 80px;
height: 80px;
}
}
/* Medium screens (1200px - 1599px) */
@media (max-width: 1599px) and (min-width: 1200px) {
.download-missing-modal-content {
width: 1200px;
height: 90vh;
}
}
/* Small screens (768px - 1199px) */
@media (max-width: 1199px) and (min-width: 768px) {
.download-missing-modal-content {
width: 95vw;
height: 90vh;
max-width: 1000px;
}
.download-dashboard-stats {
grid-template-columns: repeat(2, 1fr);
gap: 20px;
}
.download-missing-modal-hero {
min-height: 100px;
padding: 20px 24px;
}
.download-missing-modal-hero-image.album {
width: 70px;
height: 70px;
}
.download-missing-modal-hero-image.artist {
width: 60px;
height: 60px;
}
.download-missing-modal-hero-icon {
width: 70px;
height: 70px;
font-size: 32px;
}
.download-missing-modal-hero-title {
font-size: 20px;
}
.download-missing-modal-hero-subtitle {
font-size: 14px;
}
}
/* Mobile screens (767px and below) */
@media (max-width: 767px) {
.download-missing-modal-content {
width: 95vw;
height: 95vh;
max-width: none;
border-radius: 16px;
}
.download-missing-modal-hero {
flex-direction: column;
text-align: center;
min-height: auto;
padding: 20px;
gap: 16px;
}
.download-missing-modal-hero-content {
flex-direction: column;
gap: 16px;
}
.download-missing-modal-hero-images {
justify-content: center;
}
.download-missing-modal-hero-image.album,
.download-missing-modal-hero-image.artist {
width: 60px;
height: 60px;
}
.download-missing-modal-hero-icon {
width: 60px;
height: 60px;
font-size: 28px;
margin: 0 auto;
}
.download-missing-modal-hero-title {
font-size: 18px;
white-space: normal;
text-align: center;
}
.download-missing-modal-hero-subtitle {
font-size: 14px;
white-space: normal;
text-align: center;
}
.download-missing-modal-hero-details {
justify-content: center;
flex-wrap: wrap;
}
.download-missing-modal-body {
padding: 0 20px 20px 20px;
gap: 20px;
}
.download-dashboard-stats {
grid-template-columns: repeat(2, 1fr);
gap: 16px;
padding: 20px;
}
.dashboard-stat-number {
font-size: 28px;
}
.dashboard-stat-label {
font-size: 12px;
}
.download-missing-modal-footer {
padding: 20px;
flex-direction: column;
gap: 16px;
}
.download-phase-controls {
width: 100%;
justify-content: center;
}
.download-control-btn {
flex: 1;
max-width: 200px;
}
}
/* Legacy title styling - now handled by hero section */
.download-missing-modal-title {
color: #ffffff;
font-size: 18px;
font-weight: 700;
margin: 0;
line-height: 1.2;
text-shadow: 0 2px 8px rgba(0, 0, 0, 0.3);
}
.download-missing-modal-close {
color: #b3b3b3;
font-size: 28px;
font-weight: 300;
cursor: pointer;
transition: all 0.3s ease;
line-height: 1;
width: 40px;
height: 40px;
display: flex;
align-items: center;
justify-content: center;
border-radius: 50%;
padding: 4px;
margin: -4px;
}
.download-missing-modal-close:hover {
color: #ffffff;
background: rgba(255, 255, 255, 0.15);
transform: scale(1.1);
box-shadow: 0 4px 12px rgba(0, 0, 0, 0.3);
}
.download-missing-modal-body {
flex: 1;
display: flex;
flex-direction: column;
padding: 16px 28px 25px 28px;
gap: 20px;
overflow-y: auto; /* Allow vertical scrolling */
overflow-x: hidden;
}
/* Dashboard Stats Section */
.download-dashboard-stats {
/* Premium glassmorphic card */
background: linear-gradient(135deg,
rgba(35, 35, 35, 0.7) 0%,
rgba(25, 25, 25, 0.8) 100%);
backdrop-filter: blur(10px) saturate(1.1);
border: 1px solid rgba(255, 255, 255, 0.1);
border-top: 1px solid rgba(255, 255, 255, 0.15);
border-radius: 16px;
padding: 24px;
display: grid;
grid-template-columns: repeat(4, 1fr);
gap: 24px;
/* Premium shadow with subtle glow */
box-shadow:
0 8px 32px rgba(0, 0, 0, 0.4),
0 4px 16px rgba(0, 0, 0, 0.2),
0 0 20px rgba(29, 185, 84, 0.08),
inset 0 1px 0 rgba(255, 255, 255, 0.1);
}
.dashboard-stat {
text-align: center;
padding: 8px;
border-radius: 12px;
transition: all 0.3s ease;
}
.dashboard-stat:hover {
background: rgba(255, 255, 255, 0.05);
transform: translateY(-2px);
}
.dashboard-stat-number {
font-size: 32px;
font-weight: 700;
margin-bottom: 8px;
text-shadow: 0 2px 8px rgba(0, 0, 0, 0.3);
transition: all 0.3s ease;
}
.dashboard-stat-label {
font-size: 14px;
color: #e0e0e0;
font-weight: 600;
text-transform: uppercase;
letter-spacing: 0.5px;
opacity: 0.9;
}
/* Enhanced stat colors with glow effects */
.stat-total .dashboard-stat-number {
color: #1ed760;
text-shadow: 0 0 20px rgba(30, 215, 96, 0.4);
}
.stat-found .dashboard-stat-number {
color: #4CAF50;
text-shadow: 0 0 20px rgba(76, 175, 80, 0.4);
}
.stat-missing .dashboard-stat-number {
color: #FF6B35;
text-shadow: 0 0 20px rgba(255, 107, 53, 0.4);
}
.stat-downloaded .dashboard-stat-number {
color: #2196F3;
text-shadow: 0 0 20px rgba(33, 150, 243, 0.4);
}
/* Progress Section */
.download-progress-section {
/* Premium glassmorphic card matching stats */
background: linear-gradient(135deg,
rgba(35, 35, 35, 0.7) 0%,
rgba(25, 25, 25, 0.8) 100%);
backdrop-filter: blur(10px) saturate(1.1);
border: 1px solid rgba(255, 255, 255, 0.1);
border-top: 1px solid rgba(255, 255, 255, 0.15);
border-radius: 16px;
padding: 20px;
display: flex;
flex-direction: column;
gap: 16px;
/* Premium shadow with subtle glow */
box-shadow:
0 8px 32px rgba(0, 0, 0, 0.4),
0 4px 16px rgba(0, 0, 0, 0.2),
0 0 20px rgba(29, 185, 84, 0.08),
inset 0 1px 0 rgba(255, 255, 255, 0.1);
}
.progress-item {
display: flex;
flex-direction: column;
gap: 8px;
padding: 2px 0;
}
.progress-label {
font-size: 14px;
font-weight: 600;
color: #e8e8e8;
display: flex;
align-items: center;
gap: 10px;
text-shadow: 0 1px 2px rgba(0, 0, 0, 0.3);
}
.progress-bar {
background: rgba(64, 64, 64, 0.8);
border-radius: 10px;
height: 10px;
overflow: hidden;
box-shadow:
inset 0 2px 4px rgba(0, 0, 0, 0.3),
0 1px 2px rgba(0, 0, 0, 0.2);
}
.progress-fill {
background: linear-gradient(90deg, #1db954, #1ed760);
height: 100%;
border-radius: 10px;
transition: width 0.4s cubic-bezier(0.25, 0.46, 0.45, 0.94);
width: 0%;
box-shadow:
0 0 15px rgba(29, 185, 84, 0.6),
inset 0 1px 2px rgba(255, 255, 255, 0.3);
position: relative;
}
.progress-fill::after {
content: '';
position: absolute;
top: 0;
left: 0;
right: 0;
height: 50%;
background: linear-gradient(180deg, rgba(255, 255, 255, 0.3) 0%, transparent 100%);
border-radius: 10px 10px 0 0;
}
.progress-fill.analysis {
background: linear-gradient(90deg, #2196F3, #21CBF3);
box-shadow:
0 0 15px rgba(33, 150, 243, 0.6),
inset 0 1px 2px rgba(255, 255, 255, 0.3);
}
.progress-fill.download {
background: linear-gradient(90deg, #FF6B35, #FF8A35);
box-shadow:
0 0 15px rgba(255, 107, 53, 0.6),
inset 0 1px 2px rgba(255, 255, 255, 0.3);
}
/* Track Table Section */
.download-tracks-section {
/* Premium glassmorphic card matching other sections */
background: linear-gradient(135deg,
rgba(35, 35, 35, 0.7) 0%,
rgba(25, 25, 25, 0.8) 100%);
backdrop-filter: blur(10px) saturate(1.1);
border: 1px solid rgba(255, 255, 255, 0.1);
border-top: 1px solid rgba(255, 255, 255, 0.15);
border-radius: 16px;
flex: 1;
display: flex;
flex-direction: column;
overflow: hidden;
/* Premium shadow with subtle glow */
box-shadow:
0 8px 32px rgba(0, 0, 0, 0.4),
0 4px 16px rgba(0, 0, 0, 0.2),
0 0 20px rgba(29, 185, 84, 0.08),
inset 0 1px 0 rgba(255, 255, 255, 0.1);
}
.download-tracks-header {
padding: 18px 24px;
border-bottom: 1px solid rgba(255, 255, 255, 0.08);
background: linear-gradient(135deg,
rgba(40, 40, 40, 0.8) 0%,
rgba(30, 30, 30, 0.9) 100%);
}
.download-tracks-title {
font-size: 16px;
font-weight: 700;
color: #ffffff;
margin: 0;
display: flex;
align-items: center;
gap: 10px;
text-shadow: 0 1px 2px rgba(0, 0, 0, 0.3);
}
.download-tracks-table-container {
flex: 1;
overflow-y: auto;
}
.download-tracks-table {
width: 100%;
border-collapse: collapse;
table-layout: fixed; /* Enable fixed layout for even column distribution */
}
.download-tracks-table th {
background: #404040;
color: #ffffff;
font-weight: 600;
font-size: 12px;
text-align: center;
padding: 12px 15px;
border-bottom: 1px solid #555555;
position: sticky;
top: 0;
z-index: 10;
}
.download-tracks-table td {
padding: 12px 15px;
border-bottom: 1px solid #333333;
color: #e0e0e0;
font-size: 13px;
}
.download-tracks-table tr:hover {
background: rgba(29, 185, 84, 0.05);
}
.track-number {
color: #888888;
font-weight: 500;
width: 5%; /* 5% for track numbers */
text-align: center;
}
.track-name {
font-weight: 600;
color: #ffffff;
width: 25%; /* 25% for track names */
overflow: hidden;
text-overflow: ellipsis;
white-space: nowrap;
}
.track-artist {
color: #cccccc;
width: 20%; /* 20% for artist names */
overflow: hidden;
text-overflow: ellipsis;
white-space: nowrap;
}
.track-duration {
color: #999999;
text-align: center;
width: 8%; /* 8% for duration */
}
.track-match-status {
text-align: center;
width: 15%; /* 15% for library match status */
font-weight: 600;
overflow: hidden;
text-overflow: ellipsis;
white-space: nowrap;
}
.match-found { color: #4CAF50; }
.match-missing { color: #FF6B35; }
.match-checking { color: #2196F3; }
.track-download-status {
text-align: center;
width: 20%; /* 20% for download status with progress */
font-weight: 500;
overflow: hidden;
text-overflow: ellipsis;
white-space: nowrap;
}
.download-searching { color: #2196F3; }
.download-downloading { color: #FF6B35; }
.download-complete { color: #4CAF50; }
.download-failed { color: #f44336; }
.track-actions {
text-align: center;
width: 7%; /* 7% for action buttons */
}
.track-result-card .track-actions{
width: auto;
}
.cancel-track-btn {
background: #f44336;
color: #ffffff;
border: none;
border-radius: 6px;
padding: 4px 8px;
font-size: 11px;
cursor: pointer;
transition: all 0.2s ease;
}
.cancel-track-btn:hover {
background: #d32f2f;
transform: scale(1.05);
}
/* Modal Footer */
.download-missing-modal-footer {
background: linear-gradient(135deg,
rgba(42, 42, 42, 0.9) 0%,
rgba(30, 30, 30, 0.95) 100%);
border-top: 1px solid rgba(255, 255, 255, 0.08);
padding: 24px 28px;
display: flex;
align-items: center;
justify-content: space-between;
/* Subtle inner glow */
box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.1);
}
.download-phase-controls {
display: flex;
align-items: center;
gap: 12px;
}
.download-control-btn {
padding: 12px 20px;
border-radius: 10px;
font-size: 14px;
font-weight: 600;
cursor: pointer;
transition: all 0.2s ease;
border: none;
min-width: 120px;
}
.download-control-btn.primary {
background: linear-gradient(135deg, #1db954, #1ed760);
color: #000000;
box-shadow: 0 4px 16px rgba(29, 185, 84, 0.3);
}
.download-control-btn.primary:hover {
transform: translateY(-1px);
box-shadow: 0 6px 20px rgba(29, 185, 84, 0.4);
}
.download-control-btn.secondary {
background: #404040;
color: #ffffff;
border: 1px solid #666666;
}
.download-control-btn.secondary:hover {
background: #505050;
border-color: #777777;
transform: translateY(-1px);
}
.download-control-btn.danger {
background: #f44336;
color: #ffffff;
}
.download-control-btn.danger:hover {
background: #d32f2f;
transform: translateY(-1px);
}
.download-control-btn.export {
background: linear-gradient(135deg, #667eea, #764ba2);
color: #ffffff;
border: 1px solid rgba(118, 75, 162, 0.3);
box-shadow: 0 4px 16px rgba(102, 126, 234, 0.25);
}
.download-control-btn.export:hover {
background: linear-gradient(135deg, #7c8ff0, #8a5ab8);
transform: translateY(-1px);
box-shadow: 0 6px 20px rgba(102, 126, 234, 0.35);
}
.download-control-btn:disabled {
background: #333333;
color: #666666;
cursor: not-allowed;
transform: none;
box-shadow: none;
}
/* Force Download Toggle Styling */
.force-download-toggle-container {
display: flex;
align-items: center;
justify-content: center;
padding: 8px 16px;
background: rgba(255, 255, 255, 0.03);
border: 1px solid rgba(255, 255, 255, 0.08);
border-radius: 8px;
transition: all 0.2s ease;
}
.force-download-toggle-container:hover {
background: rgba(255, 255, 255, 0.05);
border-color: rgba(255, 255, 255, 0.12);
}
.force-download-toggle {
display: flex;
align-items: center;
gap: 12px;
cursor: pointer;
user-select: none;
}
.force-download-toggle span {
font-size: 13px;
font-weight: 500;
color: rgba(255, 255, 255, 0.8);
transition: color 0.2s ease;
}
/* Toggle Switch */
.force-download-toggle input[type="checkbox"] {
position: relative;
width: 48px;
height: 24px;
appearance: none;
background: rgba(255, 255, 255, 0.1);
border: 1px solid rgba(255, 255, 255, 0.2);
border-radius: 12px;
cursor: pointer;
transition: all 0.3s ease;
outline: none;
}
.force-download-toggle input[type="checkbox"]:before {
content: '';
position: absolute;
top: 2px;
left: 2px;
width: 18px;
height: 18px;
background: #ffffff;
border-radius: 50%;
transition: all 0.3s ease;
box-shadow: 0 2px 4px rgba(0, 0, 0, 0.2);
}
.force-download-toggle input[type="checkbox"]:checked {
background: linear-gradient(135deg, #1db954, #1ed760);
border-color: rgba(29, 185, 84, 0.4);
box-shadow: 0 0 12px rgba(29, 185, 84, 0.3);
}
.force-download-toggle input[type="checkbox"]:checked:before {
transform: translateX(24px);
background: #ffffff;
}
.force-download-toggle input[type="checkbox"]:checked + span {
color: #1ed760;
font-weight: 600;
}
.force-download-toggle:hover input[type="checkbox"] {
border-color: rgba(255, 255, 255, 0.3);
}
.force-download-toggle:hover input[type="checkbox"]:checked {
border-color: rgba(29, 185, 84, 0.6);
box-shadow: 0 0 16px rgba(29, 185, 84, 0.4);
}
.modal-close-section {
display: flex;
align-items: center;
gap: 12px;
}
/* ==============================================
PERSISTENT DOWNLOAD MODAL STYLES
============================================== */
.download-missing-modal {
display: none; /* Hidden by default */
position: fixed;
top: 0;
left: 0;
width: 100vw;
height: 100vh;
background: rgba(0, 0, 0, 0.8);
backdrop-filter: blur(8px);
z-index: 9000;
align-items: center;
justify-content: center;
}
.playlist-card-actions button {
background: transparent;
border: 1px solid #1db954;
border-radius: 15px;
color: #1db954;
font-size: 10px;
font-weight: bold;
padding: 8px 16px;
cursor: pointer;
transition: all 0.2s ease;
}
.playlist-card-actions .view-progress-btn {
background: #1db954;
color: #000000;
}
.playlist-card-actions button:hover {
background: #1db954;
color: #000000;
}
.playlist-card-actions .view-progress-btn {
background: #1db954;
color: #000000;
}
.playlist-card-actions .view-progress-btn:hover {
background: #1ed760;
}
/* Download Complete Styling - Ready for Review State */
.playlist-card.download-complete {
/* Add subtle green left border to indicate completion */
border-left: 4px solid #28a745;
background: linear-gradient(135deg,
rgba(40, 167, 69, 0.05) 0%,
rgba(26, 26, 26, 0.95) 20%,
rgba(18, 18, 18, 0.98) 100%);
}
.playlist-card.download-complete:hover {
/* Enhanced hover for completed cards */
background: linear-gradient(135deg,
rgba(40, 167, 69, 0.08) 0%,
rgba(30, 30, 30, 0.98) 20%,
rgba(22, 22, 22, 1.0) 100%);
box-shadow:
0 8px 32px rgba(40, 167, 69, 0.15),
0 2px 8px rgba(0, 0, 0, 0.4),
inset 0 1px 0 rgba(255, 255, 255, 0.15);
}
/* ============================================================================ */
/* ARTISTS PAGE STYLES - ELEGANT GLASSMORPHIC DESIGN */
/* ============================================================================ */
/* Artists Search State - Initial centered interface with downloads section support */
.artists-search-state {
display: flex;
flex-direction: column;
align-items: center;
gap: 10vh;
justify-content: center;
min-height: 70vh;
padding: 40px 20px;
opacity: 1;
transition: all 0.4s cubic-bezier(0.4, 0, 0.2, 1);
gap: 32px;
}
.artists-search-state.fade-out {
opacity: 0;
transform: translateY(-20px);
}
.artists-search-container {
max-width: 600px;
width: 100%;
text-align: center;
margin-top: auto;
margin-bottom: auto;
}
/* When downloads section is present, adjust positioning */
.artists-search-state:has(.artist-downloads-section) .artists-search-container {
margin-top: 0;
margin-bottom: 0;
}
.artists-welcome-section {
margin-bottom: 40px;
}
.artists-welcome-title {
font-size: 36px;
font-weight: 700;
color: #ffffff;
margin-bottom: 12px;
font-family: 'SF Pro Display', -apple-system, BlinkMacSystemFont, sans-serif;
}
.artists-welcome-subtitle {
font-size: 16px;
color: rgba(255, 255, 255, 0.7);
font-weight: 400;
line-height: 1.5;
font-family: 'SF Pro Text', -apple-system, BlinkMacSystemFont, sans-serif;
}
.artists-search-input-container {
position: relative;
margin-bottom: 20px;
}
.artists-search-input {
width: 100%;
padding: 18px 24px 18px 60px;
font-size: 16px;
font-weight: 500;
color: #ffffff;
font-family: 'SF Pro Text', -apple-system, BlinkMacSystemFont, sans-serif;
/* Premium glassmorphic foundation */
background: linear-gradient(135deg,
rgba(26, 26, 26, 0.9) 0%,
rgba(18, 18, 18, 0.95) 100%);
backdrop-filter: blur(12px) saturate(1.1);
border-radius: 24px;
border: 1px solid rgba(255, 255, 255, 0.1);
border-top: 1px solid rgba(255, 255, 255, 0.15);
/* Elegant shadow system */
box-shadow:
0 8px 32px rgba(0, 0, 0, 0.4),
0 0 0 1px rgba(29, 185, 84, 0.05),
inset 0 1px 0 rgba(255, 255, 255, 0.08),
inset 0 -1px 0 rgba(0, 0, 0, 0.1);
transition: all 0.3s cubic-bezier(0.4, 0, 0.2, 1);
outline: none;
}
.artists-search-input:focus {
background: linear-gradient(135deg,
rgba(30, 30, 30, 0.95) 0%,
rgba(22, 22, 22, 1.0) 100%);
border-color: rgba(29, 185, 84, 0.3);
border-top-color: rgba(29, 185, 84, 0.4);
box-shadow:
0 12px 40px rgba(0, 0, 0, 0.5),
0 0 0 1px rgba(29, 185, 84, 0.15),
0 0 20px rgba(29, 185, 84, 0.1),
inset 0 1px 0 rgba(255, 255, 255, 0.12),
inset 0 -1px 0 rgba(0, 0, 0, 0.15);
transform: translateY(-1px);
}
.artists-search-input::placeholder {
color: rgba(255, 255, 255, 0.5);
font-weight: 400;
}
.artists-search-icon {
position: absolute;
left: 22px;
top: 50%;
transform: translateY(-50%);
font-size: 18px;
color: rgba(255, 255, 255, 0.6);
pointer-events: none;
transition: color 0.3s ease;
}
.artists-search-input:focus + .artists-search-icon {
color: rgba(29, 185, 84, 0.8);
}
.artists-search-status {
font-size: 14px;
color: rgba(255, 255, 255, 0.6);
font-weight: 400;
min-height: 20px;
font-family: 'SF Pro Text', -apple-system, BlinkMacSystemFont, sans-serif;
transition: all 0.3s ease;
}
.artists-search-status.searching {
color: rgba(29, 185, 84, 0.8);
}
.artists-search-status.error {
color: rgba(255, 65, 54, 0.8);
}
/* Artists Results State */
.artists-results-state {
opacity: 0;
transform: translateY(20px);
transition: all 0.4s cubic-bezier(0.4, 0, 0.2, 1);
padding: 20px;
}
.artists-results-state.show {
opacity: 1;
transform: translateY(0);
}
.artists-results-header {
display: flex;
align-items: center;
justify-content: space-between;
margin-bottom: 30px;
gap: 20px;
}
.artists-back-button {
display: flex;
align-items: center;
gap: 8px;
padding: 12px 20px;
font-size: 14px;
font-weight: 600;
color: rgba(255, 255, 255, 0.8);
background: rgba(255, 255, 255, 0.08);
border: 1px solid rgba(255, 255, 255, 0.12);
border-radius: 16px;
cursor: pointer;
transition: all 0.2s ease;
outline: none;
font-family: 'SF Pro Text', -apple-system, BlinkMacSystemFont, sans-serif;
}
.artists-back-button:hover {
background: rgba(255, 255, 255, 0.12);
color: #ffffff;
transform: translateY(-1px);
}
.back-icon {
font-size: 16px;
}
.artists-search-header {
flex: 1;
max-width: 400px;
}
.artists-header-search-input {
width: 100%;
padding: 12px 20px;
font-size: 14px;
font-weight: 500;
color: #ffffff;
font-family: 'SF Pro Text', -apple-system, BlinkMacSystemFont, sans-serif;
background: rgba(255, 255, 255, 0.08);
backdrop-filter: blur(8px);
border: 1px solid rgba(255, 255, 255, 0.12);
border-radius: 16px;
transition: all 0.2s ease;
outline: none;
}
.artists-header-search-input:focus {
background: rgba(255, 255, 255, 0.12);
border-color: rgba(29, 185, 84, 0.3);
box-shadow: 0 0 0 3px rgba(29, 185, 84, 0.1);
}
.artists-header-search-input::placeholder {
color: rgba(255, 255, 255, 0.5);
}
.artists-results-content {
margin-bottom: 40px;
}
.artists-results-title {
font-size: 20px;
font-weight: 600;
color: #ffffff;
margin-bottom: 20px;
font-family: 'SF Pro Display', -apple-system, BlinkMacSystemFont, sans-serif;
}
.artists-cards-container {
display: flex;
gap: 20px;
overflow-x: auto;
overflow-y: visible;
padding: 30px;
scroll-behavior: smooth;
/* Custom scrollbar styling */
scrollbar-width: thin;
scrollbar-color: rgba(29, 185, 84, 0.6) rgba(255, 255, 255, 0.1);
}
.artists-cards-container::-webkit-scrollbar {
height: 8px;
}
.artists-cards-container::-webkit-scrollbar-track {
background: rgba(255, 255, 255, 0.1);
border-radius: 4px;
}
.artists-cards-container::-webkit-scrollbar-thumb {
background: rgba(29, 185, 84, 0.6);
border-radius: 4px;
transition: background 0.3s ease;
}
.artists-cards-container::-webkit-scrollbar-thumb:hover {
background: rgba(29, 185, 84, 0.8);
}
/* Artist Card Styles with Background Images */
.artist-card {
position: relative;
width: 280px;
height: 350px;
flex-shrink: 0;
border-radius: 20px;
overflow: hidden;
cursor: pointer;
transition: all 0.3s cubic-bezier(0.4, 0, 0.2, 1);
/* Premium glassmorphic foundation */
background: linear-gradient(135deg,
rgba(26, 26, 26, 0.95) 0%,
rgba(18, 18, 18, 0.98) 100%);
border: 1px solid rgba(255, 255, 255, 0.08);
border-top: 1px solid rgba(255, 255, 255, 0.12);
/* Elegant shadow system */
box-shadow:
0 10px 20px rgba(0, 0, 0, 0.5),
0 0 0 1px rgba(29, 185, 84, 0.05),
inset 0 1px 0 rgba(255, 255, 255, 0.06);
}
.artist-card:hover {
transform: translateY(-5px) scale(1.01);
z-index: 10;
box-shadow:
0 12px 15px rgba(0, 0, 0, 0.4),
0 0 0 1px rgba(29, 185, 84, 0.15),
0 0 20px rgba(29, 185, 84, 0.08),
inset 0 1px 0 rgba(255, 255, 255, 0.1);
}
/* Dynamic glow effects based on image colors */
.artist-card.has-dynamic-glow {
position: relative;
transition: all 0.3s cubic-bezier(0.4, 0, 0.2, 1),
filter 0.5s cubic-bezier(0.4, 0, 0.2, 1);
}
.artist-card.has-dynamic-glow:hover {
filter: drop-shadow(0 0 8px var(--glow-color-1, #1db954))
drop-shadow(0 0 16px var(--glow-color-2, #1ed760));
border-color: var(--glow-color-1, rgba(29, 185, 84, 0.3));
}
.artist-card-background {
position: absolute;
top: 0;
left: 0;
width: 100%;
height: 100%;
background-size: cover;
background-position: center;
background-repeat: no-repeat;
opacity: 0.6;
transition: all 0.3s ease;
}
.artist-card:hover .artist-card-background {
opacity: 0.8;
transform: scale(1.05);
}
.artist-card-overlay {
position: absolute;
top: 0;
left: 0;
width: 100%;
height: 100%;
background: linear-gradient(
0deg,
rgba(0, 0, 0, 0.9) 0%,
rgba(0, 0, 0, 0.3) 40%,
rgba(0, 0, 0, 0.1) 70%,
transparent 100%
);
}
.artist-card-content {
position: absolute;
bottom: 0;
left: 0;
right: 0;
padding: 30px 24px;
z-index: 2;
}
.artist-card-name {
font-size: 24px;
font-weight: 700;
color: #ffffff;
margin-bottom: 8px;
line-height: 1.2;
font-family: 'SF Pro Display', -apple-system, BlinkMacSystemFont, sans-serif;
}
.artist-card-genres {
font-size: 14px;
color: rgba(255, 255, 255, 0.8);
font-weight: 500;
margin-bottom: 12px;
line-height: 1.3;
font-family: 'SF Pro Text', -apple-system, BlinkMacSystemFont, sans-serif;
}
.artist-card-popularity {
display: flex;
align-items: center;
gap: 6px;
font-size: 13px;
color: rgba(29, 185, 84, 0.9);
font-weight: 600;
font-family: 'SF Pro Text', -apple-system, BlinkMacSystemFont, sans-serif;
}
.popularity-icon {
font-size: 12px;
}
/* Artist Card Actions (Watchlist) */
.artist-card-actions {
margin-top: 16px;
padding-top: 16px;
border-top: 1px solid rgba(255, 255, 255, 0.1);
}
.watchlist-toggle-btn {
display: flex;
align-items: center;
gap: 8px;
padding: 10px 16px;
border: none;
border-radius: 10px;
background: rgba(255, 255, 255, 0.08);
color: #e0e0e0;
font-size: 13px;
font-weight: 500;
cursor: pointer;
transition: all 0.2s ease;
width: 100%;
justify-content: center;
font-family: 'SF Pro Text', -apple-system, BlinkMacSystemFont, sans-serif;
border: 1px solid rgba(255, 255, 255, 0.12);
}
.watchlist-toggle-btn:hover:not(:disabled) {
background: rgba(29, 185, 84, 0.15);
color: #ffffff;
border-color: rgba(29, 185, 84, 0.3);
transform: translateY(-1px);
}
.watchlist-toggle-btn.watching {
background: rgba(255, 193, 7, 0.15);
color: #ffc107;
border-color: rgba(255, 193, 7, 0.3);
}
.watchlist-toggle-btn.watching:hover:not(:disabled) {
background: rgba(255, 193, 7, 0.25);
color: #ffffff;
border-color: rgba(255, 193, 7, 0.5);
}
.watchlist-toggle-btn:disabled {
opacity: 0.6;
cursor: not-allowed;
transform: none;
}
.watchlist-icon {
font-size: 14px;
}
.watchlist-text {
flex: 1;
text-align: center;
}
/* Artist Card Animation States */
.artist-card.loading {
animation: artistCardPulse 2s ease-in-out infinite;
pointer-events: none;
}
.artist-card.loading .artist-card-background {
background: linear-gradient(
90deg,
rgba(26, 26, 26, 0.8) 0%,
rgba(40, 40, 40, 0.8) 50%,
rgba(26, 26, 26, 0.8) 100%
) !important;
background-size: 200% 100%;
animation: artistCardShimmer 1.5s ease-in-out infinite;
}
@keyframes artistCardPulse {
0%, 100% {
opacity: 1;
}
50% {
opacity: 0.7;
}
}
@keyframes artistCardShimmer {
0% {
background-position: -200% 0;
}
100% {
background-position: 200% 0;
}
}
/* Search loading indicator */
.artists-search-status.searching::after {
content: '';
display: inline-block;
width: 12px;
height: 12px;
margin-left: 8px;
border: 2px solid rgba(29, 185, 84, 0.3);
border-radius: 50%;
border-top-color: rgba(29, 185, 84, 0.8);
animation: searchSpinner 0.8s ease-in-out infinite;
}
@keyframes searchSpinner {
to {
transform: rotate(360deg);
}
}
/* Responsive adjustments */
@media (max-width: 768px) {
.artists-cards-container {
gap: 16px;
padding: 15px 0 25px 0;
}
.artist-card {
width: 250px;
height: 300px;
}
.artist-card-name {
font-size: 20px;
}
}
/* Artist Detail State */
.artist-detail-state {
opacity: 0;
transform: translateY(20px);
transition: all 0.4s cubic-bezier(0.4, 0, 0.2, 1);
padding: 20px;
}
.artist-detail-state.show {
opacity: 1;
transform: translateY(0);
}
.artist-detail-header {
display: flex;
align-items: center;
justify-content: space-between;
gap: 30px;
margin-bottom: 40px;
padding-bottom: 30px;
border-bottom: 1px solid rgba(255, 255, 255, 0.1);
}
.artist-detail-header-left {
display: flex;
align-items: center;
gap: 30px;
flex: 1;
}
.artist-detail-back-button {
display: flex;
align-items: center;
gap: 8px;
padding: 12px 20px;
font-size: 14px;
font-weight: 600;
color: rgba(255, 255, 255, 0.8);
background: rgba(255, 255, 255, 0.08);
border: 1px solid rgba(255, 255, 255, 0.12);
border-radius: 16px;
cursor: pointer;
transition: all 0.2s ease;
outline: none;
font-family: 'SF Pro Text', -apple-system, BlinkMacSystemFont, sans-serif;
}
.artist-detail-back-button:hover {
background: rgba(255, 255, 255, 0.12);
color: #ffffff;
transform: translateY(-1px);
}
.artist-detail-watchlist-btn {
display: flex;
align-items: center;
gap: 8px;
padding: 12px 18px;
font-size: 14px;
font-weight: 600;
color: #e0e0e0;
background: rgba(255, 255, 255, 0.08);
border: 1px solid rgba(255, 255, 255, 0.12);
border-radius: 16px;
cursor: pointer;
transition: all 0.2s ease;
outline: none;
font-family: 'SF Pro Text', -apple-system, BlinkMacSystemFont, sans-serif;
}
.artist-detail-watchlist-btn:hover:not(:disabled) {
background: rgba(29, 185, 84, 0.15);
color: #ffffff;
border-color: rgba(29, 185, 84, 0.3);
transform: translateY(-1px);
}
.artist-detail-watchlist-btn.watching {
background: rgba(255, 193, 7, 0.15);
color: #ffc107;
border-color: rgba(255, 193, 7, 0.3);
}
.artist-detail-watchlist-btn.watching:hover:not(:disabled) {
background: rgba(255, 193, 7, 0.25);
color: #ffffff;
border-color: rgba(255, 193, 7, 0.5);
}
.artist-detail-watchlist-btn:disabled {
opacity: 0.6;
cursor: not-allowed;
transform: none;
}
/* Library Artist Watchlist Button */
.library-artist-watchlist-btn {
display: flex;
align-items: center;
gap: 8px;
padding: 12px 18px;
font-size: 14px;
font-weight: 600;
color: #e0e0e0;
background: rgba(255, 255, 255, 0.08);
border: 1px solid rgba(255, 255, 255, 0.12);
border-radius: 16px;
cursor: pointer;
transition: all 0.2s ease;
outline: none;
font-family: 'SF Pro Text', -apple-system, BlinkMacSystemFont, sans-serif;
}
.library-artist-watchlist-btn:hover:not(:disabled) {
background: rgba(29, 185, 84, 0.15);
color: #ffffff;
border-color: rgba(29, 185, 84, 0.3);
transform: translateY(-1px);
}
.library-artist-watchlist-btn.watching {
background: rgba(255, 193, 7, 0.15);
color: #ffc107;
border-color: rgba(255, 193, 7, 0.3);
}
.library-artist-watchlist-btn.watching:hover:not(:disabled) {
background: rgba(255, 193, 7, 0.25);
color: #ffffff;
border-color: rgba(255, 193, 7, 0.5);
}
.library-artist-watchlist-btn:disabled {
opacity: 0.6;
cursor: not-allowed;
transform: none;
}
.artist-detail-info {
display: flex;
align-items: center;
gap: 24px;
flex: 1;
}
.artist-detail-image {
width: 80px;
height: 80px;
border-radius: 40px;
background-size: cover;
background-position: center;
background-repeat: no-repeat;
border: 3px solid rgba(29, 185, 84, 0.3);
box-shadow: 0 8px 24px rgba(0, 0, 0, 0.4);
/* Fallback gradient if no image */
background-image: linear-gradient(135deg,
rgba(29, 185, 84, 0.3) 0%,
rgba(24, 156, 71, 0.2) 100%);
}
.artist-detail-name {
font-size: 32px;
font-weight: 700;
color: #ffffff;
margin-bottom: 8px;
line-height: 1.2;
font-family: 'SF Pro Display', -apple-system, BlinkMacSystemFont, sans-serif;
}
.artist-detail-genres {
font-size: 16px;
color: rgba(255, 255, 255, 0.7);
font-weight: 500;
font-family: 'SF Pro Text', -apple-system, BlinkMacSystemFont, sans-serif;
}
.artist-detail-content {
margin-bottom: 40px;
}
.artist-detail-tabs {
display: flex;
gap: 8px;
margin-bottom: 30px;
padding: 6px;
background: rgba(255, 255, 255, 0.06);
border-radius: 20px;
border: 1px solid rgba(255, 255, 255, 0.1);
}
.artist-tab {
display: flex;
align-items: center;
gap: 10px;
padding: 14px 24px;
font-size: 14px;
font-weight: 600;
font-family: 'SF Pro Text', -apple-system, BlinkMacSystemFont, sans-serif;
background: transparent;
color: rgba(255, 255, 255, 0.6);
border: none;
border-radius: 16px;
cursor: pointer;
transition: all 0.3s cubic-bezier(0.4, 0, 0.2, 1);
outline: none;
}
.artist-tab.active {
background: linear-gradient(135deg,
rgba(29, 185, 84, 0.2) 0%,
rgba(24, 156, 71, 0.15) 100%);
color: rgba(29, 185, 84, 1.0);
box-shadow:
0 4px 12px rgba(29, 185, 84, 0.2),
inset 0 1px 0 rgba(255, 255, 255, 0.1);
}
.artist-tab:not(.active):hover {
background: rgba(255, 255, 255, 0.08);
color: rgba(255, 255, 255, 0.8);
transform: translateY(-1px);
}
.tab-icon {
font-size: 16px;
}
.artist-detail-discography {
min-height: 400px;
}
.tab-content {
display: none;
opacity: 0;
transform: translateY(10px);
transition: all 0.3s ease;
}
.tab-content.active {
display: block;
opacity: 1;
transform: translateY(0);
}
.album-cards-container,
.singles-cards-container {
display: grid;
grid-template-columns: repeat(auto-fill, minmax(200px, 1fr));
gap: 24px;
}
/* Album Card Styles */
.album-card {
position: relative;
background: linear-gradient(135deg,
rgba(26, 26, 26, 0.95) 0%,
rgba(18, 18, 18, 0.98) 100%);
border-radius: 16px;
border: 1px solid rgba(255, 255, 255, 0.08);
overflow: hidden;
cursor: pointer;
transition: all 0.3s cubic-bezier(0.4, 0, 0.2, 1);
box-shadow:
0 8px 24px rgba(0, 0, 0, 0.4),
0 0 0 1px rgba(29, 185, 84, 0.05),
inset 0 1px 0 rgba(255, 255, 255, 0.06);
}
.album-card:hover {
transform: translateY(-6px) scale(1.03);
box-shadow:
0 16px 40px rgba(0, 0, 0, 0.5),
0 0 0 1px rgba(29, 185, 84, 0.15),
0 0 20px rgba(29, 185, 84, 0.08),
inset 0 1px 0 rgba(255, 255, 255, 0.1);
}
/* Dynamic glow effects for album cards */
.album-card.has-dynamic-glow {
position: relative;
transition: all 0.3s cubic-bezier(0.4, 0, 0.2, 1),
filter 0.4s cubic-bezier(0.4, 0, 0.2, 1);
}
.album-card.has-dynamic-glow:hover {
filter: drop-shadow(0 0 6px var(--glow-color-1, #1db954))
drop-shadow(0 0 12px var(--glow-color-2, #1ed760));
border-color: var(--glow-color-1, rgba(29, 185, 84, 0.3));
}
.album-card-image {
width: 100%;
aspect-ratio: 1;
background-size: cover;
background-position: center;
background-repeat: no-repeat;
position: relative;
/* Fallback gradient if no image */
background-image: linear-gradient(135deg,
rgba(29, 185, 84, 0.2) 0%,
rgba(24, 156, 71, 0.1) 100%);
}
.album-card-image::after {
content: '';
position: absolute;
top: 0;
left: 0;
width: 100%;
height: 100%;
background: linear-gradient(
180deg,
transparent 0%,
transparent 60%,
rgba(0, 0, 0, 0.3) 100%
);
opacity: 0;
transition: opacity 0.3s ease;
}
.album-card:hover .album-card-image::after {
opacity: 1;
}
.album-card-content {
padding: 20px;
}
.album-card-name {
font-size: 16px;
font-weight: 700;
color: #ffffff;
margin-bottom: 6px;
line-height: 1.3;
font-family: 'SF Pro Display', -apple-system, BlinkMacSystemFont, sans-serif;
/* Text overflow handling */
white-space: nowrap;
overflow: hidden;
text-overflow: ellipsis;
}
.album-card-year {
font-size: 13px;
color: rgba(255, 255, 255, 0.6);
font-weight: 500;
margin-bottom: 8px;
font-family: 'SF Pro Text', -apple-system, BlinkMacSystemFont, sans-serif;
}
.album-card-type {
display: inline-block;
padding: 4px 10px;
font-size: 11px;
font-weight: 600;
text-transform: uppercase;
letter-spacing: 0.5px;
background: rgba(29, 185, 84, 0.15);
color: rgba(29, 185, 84, 0.9);
border-radius: 8px;
border: 1px solid rgba(29, 185, 84, 0.2);
font-family: 'SF Pro Text', -apple-system, BlinkMacSystemFont, sans-serif;
}
/* Completion Status Overlay */
.completion-overlay {
position: absolute;
top: 12px;
right: 12px;
padding: 6px 12px;
font-size: 11px;
font-weight: 700;
text-transform: uppercase;
letter-spacing: 0.8px;
border-radius: 12px;
backdrop-filter: blur(8px);
border: 1px solid;
z-index: 10;
font-family: 'SF Pro Text', -apple-system, BlinkMacSystemFont, sans-serif;
/* Smooth entrance animation */
animation: completionOverlayFadeIn 0.6s cubic-bezier(0.4, 0, 0.2, 1);
box-shadow: 0 4px 12px rgba(0, 0, 0, 0.3);
}
/* Completion status variants */
.completion-overlay.completed {
background: linear-gradient(135deg,
rgba(46, 204, 64, 0.9) 0%,
rgba(34, 139, 47, 0.95) 100%);
color: #ffffff;
border-color: rgba(46, 204, 64, 0.6);
box-shadow:
0 4px 12px rgba(0, 0, 0, 0.3),
0 0 0 1px rgba(46, 204, 64, 0.2),
inset 0 1px 0 rgba(255, 255, 255, 0.2);
}
.completion-overlay.nearly_complete {
background: linear-gradient(135deg,
rgba(255, 193, 7, 0.9) 0%,
rgba(255, 152, 0, 0.95) 100%);
color: #ffffff;
border-color: rgba(255, 193, 7, 0.6);
box-shadow:
0 4px 12px rgba(0, 0, 0, 0.3),
0 0 0 1px rgba(255, 193, 7, 0.2),
inset 0 1px 0 rgba(255, 255, 255, 0.2);
}
.completion-overlay.partial {
background: linear-gradient(135deg,
rgba(255, 111, 97, 0.9) 0%,
rgba(255, 87, 51, 0.95) 100%);
color: #ffffff;
border-color: rgba(255, 111, 97, 0.6);
box-shadow:
0 4px 12px rgba(0, 0, 0, 0.3),
0 0 0 1px rgba(255, 111, 97, 0.2),
inset 0 1px 0 rgba(255, 255, 255, 0.2);
}
.completion-overlay.missing {
background: linear-gradient(135deg,
rgba(108, 117, 125, 0.9) 0%,
rgba(73, 80, 87, 0.95) 100%);
color: rgba(255, 255, 255, 0.9);
border-color: rgba(108, 117, 125, 0.6);
box-shadow:
0 4px 12px rgba(0, 0, 0, 0.3),
0 0 0 1px rgba(108, 117, 125, 0.2),
inset 0 1px 0 rgba(255, 255, 255, 0.1);
}
.completion-overlay.downloading {
background: linear-gradient(135deg,
rgba(255, 165, 0, 0.9) 0%,
rgba(255, 140, 0, 0.95) 100%);
color: #ffffff;
border-color: rgba(255, 165, 0, 0.6);
box-shadow:
0 4px 12px rgba(0, 0, 0, 0.3),
0 0 0 1px rgba(255, 165, 0, 0.2),
inset 0 1px 0 rgba(255, 255, 255, 0.2);
animation: downloadingPulse 2s ease-in-out infinite;
}
@keyframes downloadingPulse {
0%, 100% {
transform: scale(1);
box-shadow:
0 4px 12px rgba(0, 0, 0, 0.3),
0 0 0 1px rgba(255, 165, 0, 0.2),
inset 0 1px 0 rgba(255, 255, 255, 0.2);
}
50% {
transform: scale(1.02);
box-shadow:
0 6px 16px rgba(0, 0, 0, 0.4),
0 0 0 1px rgba(255, 165, 0, 0.4),
inset 0 1px 0 rgba(255, 255, 255, 0.3),
0 0 12px rgba(255, 165, 0, 0.3);
}
}
.completion-overlay.downloaded {
background: linear-gradient(135deg,
rgba(40, 167, 69, 0.9) 0%,
rgba(34, 139, 58, 0.95) 100%);
color: #ffffff;
border-color: rgba(40, 167, 69, 0.6);
box-shadow:
0 4px 12px rgba(0, 0, 0, 0.3),
0 0 0 1px rgba(40, 167, 69, 0.2),
inset 0 1px 0 rgba(255, 255, 255, 0.2);
}
.completion-overlay.error {
background: linear-gradient(135deg,
rgba(220, 53, 69, 0.9) 0%,
rgba(176, 42, 55, 0.95) 100%);
color: #ffffff;
border-color: rgba(220, 53, 69, 0.6);
box-shadow:
0 4px 12px rgba(0, 0, 0, 0.3),
0 0 0 1px rgba(220, 53, 69, 0.2),
inset 0 1px 0 rgba(255, 255, 255, 0.2);
}
/* Hover effects for completion overlays */
.album-card:hover .completion-overlay,
.artist-card:hover .completion-overlay {
transform: scale(1.05);
box-shadow:
0 6px 16px rgba(0, 0, 0, 0.4),
0 0 0 1px currentColor,
inset 0 1px 0 rgba(255, 255, 255, 0.25);
}
/* Loading state for completion overlay */
.completion-overlay.checking {
background: linear-gradient(135deg,
rgba(29, 185, 84, 0.9) 0%,
rgba(24, 156, 71, 0.95) 100%);
color: #ffffff;
border-color: rgba(29, 185, 84, 0.6);
animation: completionOverlayPulse 2s ease-in-out infinite;
}
/* Progress indicator inside overlay for detailed completion info */
.completion-overlay .completion-progress {
display: block;
font-size: 9px;
margin-top: 2px;
opacity: 0.8;
font-weight: 500;
}
/* Completion overlay animations */
@keyframes completionOverlayFadeIn {
from {
opacity: 0;
transform: translateY(-4px) scale(0.8);
}
to {
opacity: 1;
transform: translateY(0) scale(1);
}
}
@keyframes completionOverlayPulse {
0%, 100% {
opacity: 1;
transform: scale(1);
}
50% {
opacity: 0.7;
transform: scale(1.05);
}
}
/* Loading states for album cards */
.album-card.loading .album-card-image {
background: linear-gradient(
90deg,
rgba(26, 26, 26, 0.8) 0%,
rgba(40, 40, 40, 0.8) 50%,
rgba(26, 26, 26, 0.8) 100%
);
background-size: 200% 100%;
animation: albumCardShimmer 1.5s ease-in-out infinite;
}
@keyframes albumCardShimmer {
0% {
background-position: -200% 0;
}
100% {
background-position: 200% 0;
}
}
/* Responsive adjustments for detail view */
@media (max-width: 768px) {
.artist-detail-header {
flex-direction: column;
align-items: flex-start;
gap: 20px;
}
.artist-detail-info {
width: 100%;
}
.artist-detail-name {
font-size: 24px;
}
.album-cards-container,
.singles-cards-container {
grid-template-columns: repeat(auto-fill, minmax(160px, 1fr));
gap: 16px;
}
.artist-detail-tabs {
overflow-x: auto;
padding-bottom: 5px;
}
}
/* ===============================
ARTIST DOWNLOADS MANAGEMENT STYLES
=============================== */
/* Artist Downloads Section */
.artist-downloads-section {
max-width: 800px;
padding: 0 20px;
animation: fadeInUp 0.5s ease-out;
width: 100%;
}
.artist-downloads-header {
margin-bottom: 20px;
text-align: center;
}
.artist-downloads-title {
font-size: 20px;
font-weight: 700;
color: rgba(255, 255, 255, 0.9);
margin: 0 0 8px;
font-family: "SF Pro Display", -apple-system, BlinkMacSystemFont, sans-serif;
}
.artist-downloads-subtitle {
font-size: 14px;
color: rgba(255, 255, 255, 0.6);
margin: 0;
}
.artist-bubble-container {
display: flex;
flex-wrap: wrap;
gap: 24px;
justify-content: center;
align-items: center;
padding: 12px;
}
/* Artist Bubble Card */
.artist-bubble-card {
position: relative;
width: 150px;
height: 150px;
border-radius: 50%;
cursor: pointer;
transition: all 0.3s cubic-bezier(0.4, 0, 0.2, 1);
background: linear-gradient(135deg,
rgba(26, 26, 26, 0.95) 0%,
rgba(18, 18, 18, 0.98) 100%);
border: 2px solid rgba(255, 255, 255, 0.1);
box-shadow:
0 4px 12px rgba(0, 0, 0, 0.4),
0 0 0 1px rgba(29, 185, 84, 0.05),
inset 0 1px 0 rgba(255, 255, 255, 0.06);
}
.artist-bubble-card:hover {
transform: translateY(-3px) scale(1.05);
border-color: rgba(29, 185, 84, 0.3);
box-shadow:
0 8px 20px rgba(0, 0, 0, 0.5),
0 0 0 1px rgba(29, 185, 84, 0.2),
0 0 15px rgba(29, 185, 84, 0.1),
inset 0 1px 0 rgba(255, 255, 255, 0.1);
}
.artist-bubble-card.all-completed {
border-color: rgba(34, 197, 94, 0.4);
}
.artist-bubble-card.all-completed:hover {
border-color: rgba(34, 197, 94, 0.6);
box-shadow:
0 8px 20px rgba(0, 0, 0, 0.5),
0 0 0 1px rgba(34, 197, 94, 0.3),
0 0 15px rgba(34, 197, 94, 0.15),
inset 0 1px 0 rgba(255, 255, 255, 0.1);
}
.artist-bubble-image {
position: absolute;
inset: 0;
background-size: cover;
background-position: center;
background-repeat: no-repeat;
border-radius: 50%;
overflow: hidden;
}
.artist-bubble-overlay {
position: absolute;
inset: 0;
background: linear-gradient(135deg,
rgba(0, 0, 0, 0.3) 0%,
rgba(0, 0, 0, 0.6) 100%);
border-radius: 50%;
}
.artist-bubble-content {
position: absolute;
inset: 0;
display: flex;
flex-direction: column;
justify-content: center;
align-items: center;
padding: 8px;
text-align: center;
z-index: 2;
}
.artist-bubble-name {
font-size: 10px;
font-weight: 600;
color: rgba(255, 255, 255, 0.95);
line-height: 1.2;
margin-bottom: 2px;
display: -webkit-box;
-webkit-line-clamp: 2;
-webkit-box-orient: vertical;
overflow: hidden;
}
.artist-bubble-status {
font-size: 8px;
color: rgba(255, 255, 255, 0.7);
line-height: 1.1;
display: -webkit-box;
-webkit-line-clamp: 2;
-webkit-box-orient: vertical;
overflow: hidden;
}
.bulk-complete-indicator {
position: absolute;
top: -4px;
right: -4px;
width: 24px;
height: 24px;
background: linear-gradient(135deg,
rgba(34, 197, 94, 0.95) 0%,
rgba(21, 128, 61, 0.95) 100%);
border-radius: 50%;
border: 2px solid rgba(255, 255, 255, 0.9);
display: flex;
align-items: center;
justify-content: center;
cursor: pointer;
z-index: 3;
transition: all 0.2s ease;
box-shadow:
0 2px 8px rgba(34, 197, 94, 0.4),
0 0 0 1px rgba(34, 197, 94, 0.2);
}
.bulk-complete-indicator:hover {
transform: scale(1.1);
box-shadow:
0 4px 12px rgba(34, 197, 94, 0.6),
0 0 0 1px rgba(34, 197, 94, 0.3);
}
.bulk-complete-icon {
font-size: 12px;
color: white;
}
/* Artist Download Management Modal */
.artist-download-management-modal {
position: fixed;
top: 0;
left: 0;
width: 100%;
height: 100%;
z-index: 10000;
display: flex;
align-items: center;
justify-content: center;
animation: modalOverlayFadeIn 0.4s ease-out;
}
.artist-download-modal-overlay {
position: absolute;
inset: 0;
background: rgba(18, 18, 18, 0.85);
backdrop-filter: blur(12px);
z-index: 1;
}
.artist-download-modal-content {
position: relative;
/* Premium glassmorphic foundation matching download modal */
background: linear-gradient(135deg,
rgba(20, 20, 20, 0.95) 0%,
rgba(12, 12, 12, 0.98) 100%);
backdrop-filter: blur(20px) saturate(1.2);
border-radius: 20px;
border: 1px solid rgba(255, 255, 255, 0.12);
border-top: 1px solid rgba(255, 255, 255, 0.18);
width: 700px;
max-width: 95vw;
max-height: 80vh;
z-index: 2;
overflow: hidden;
display: flex;
flex-direction: column;
/* Premium shadow effect */
box-shadow:
0 25px 80px rgba(0, 0, 0, 0.7),
0 10px 40px rgba(0, 0, 0, 0.5),
0 0 50px rgba(29, 185, 84, 0.15),
inset 0 1px 0 rgba(255, 255, 255, 0.15);
/* Smooth animation */
transform: scale(1);
transition: transform 0.4s ease-in-out;
animation: modalFadeIn 0.4s ease-out;
}
.artist-download-modal-header {
padding: 0;
display: flex;
flex-direction: column;
overflow: hidden;
/* Enhanced gradient with subtle transparency and glow */
background: linear-gradient(135deg,
rgba(45, 45, 45, 0.8) 0%,
rgba(26, 26, 26, 0.9) 100%);
border-bottom: 1px solid rgba(255, 255, 255, 0.08);
/* Subtle inner glow */
box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.1);
}
/* Artist Modal Hero Section */
.artist-download-modal-hero {
display: flex;
align-items: center;
padding: 20px 28px;
gap: 20px;
position: relative;
min-height: 100px;
}
.artist-download-modal-hero-bg {
position: absolute;
top: 0;
left: 0;
right: 0;
bottom: 0;
background-size: cover;
background-position: center;
opacity: 0.15;
filter: blur(8px);
z-index: 1;
}
.artist-download-modal-hero-bg::after {
content: '';
position: absolute;
top: 0;
left: 0;
right: 0;
bottom: 0;
background: linear-gradient(135deg,
rgba(0, 0, 0, 0.7) 0%,
rgba(0, 0, 0, 0.3) 100%);
}
.artist-download-modal-hero-content {
display: flex;
align-items: center;
gap: 20px;
position: relative;
z-index: 2;
flex: 1;
}
.artist-download-modal-hero-image {
width: 70px;
height: 70px;
border-radius: 50%;
object-fit: cover;
box-shadow:
0 8px 24px rgba(0, 0, 0, 0.4),
0 4px 12px rgba(0, 0, 0, 0.2),
inset 0 1px 0 rgba(255, 255, 255, 0.1);
border: 1px solid rgba(255, 255, 255, 0.1);
transition: all 0.3s ease;
flex-shrink: 0;
}
.artist-download-modal-hero-image:hover {
transform: scale(1.05);
box-shadow:
0 12px 32px rgba(0, 0, 0, 0.5),
0 6px 16px rgba(0, 0, 0, 0.3),
inset 0 1px 0 rgba(255, 255, 255, 0.2);
}
.artist-download-modal-hero-avatar {
position: relative;
z-index: 2;
flex-shrink: 0;
}
.artist-download-modal-hero-fallback {
width: 70px;
height: 70px;
border-radius: 50%;
background: linear-gradient(135deg,
rgba(60, 60, 60, 0.9) 0%,
rgba(30, 30, 30, 0.9) 100%);
display: flex;
align-items: center;
justify-content: center;
font-size: 24px;
color: #999;
border: 1px solid rgba(255, 255, 255, 0.1);
box-shadow:
0 8px 24px rgba(0, 0, 0, 0.4),
0 4px 12px rgba(0, 0, 0, 0.2),
inset 0 1px 0 rgba(255, 255, 255, 0.1);
}
.artist-download-modal-hero-info {
flex: 1;
display: flex;
flex-direction: column;
gap: 6px;
min-width: 0;
}
.artist-download-modal-hero-overlay {
display: flex;
align-items: center;
position: relative;
z-index: 2;
width: 100%;
}
.artist-download-modal-hero-title {
color: #ffffff;
font-size: 20px;
font-weight: 700;
margin: 0;
line-height: 1.2;
text-shadow: 0 2px 8px rgba(0, 0, 0, 0.3);
overflow: hidden;
text-overflow: ellipsis;
white-space: nowrap;
}
.artist-download-modal-hero-subtitle {
color: #e0e0e0;
font-size: 14px;
font-weight: 500;
margin: 0;
opacity: 0.9;
}
.artist-download-modal-header-actions {
position: relative;
z-index: 3;
padding: 16px 24px 0 0;
display: flex;
justify-content: flex-end;
}
.artist-download-modal-title {
font-size: 20px;
font-weight: 700;
color: rgba(255, 255, 255, 0.95);
margin: 0;
flex: 1;
font-family: "SF Pro Display", -apple-system, BlinkMacSystemFont, sans-serif;
}
.artist-download-modal-close {
font-size: 24px;
color: rgba(255, 255, 255, 0.6);
cursor: pointer;
padding: 4px;
border-radius: 6px;
transition: all 0.2s ease;
line-height: 1;
}
.artist-download-modal-close:hover {
color: rgba(255, 255, 255, 0.9);
background: rgba(255, 255, 255, 0.1);
}
.artist-download-modal-body {
flex: 1;
padding: 16px 28px 25px 28px;
overflow-y: auto;
display: flex;
flex-direction: column;
}
.artist-download-items {
display: flex;
flex-direction: column;
gap: 16px;
}
.artist-download-item {
display: flex;
align-items: center;
padding: 20px;
gap: 16px;
/* Premium glassmorphic card matching download modal */
background: linear-gradient(135deg,
rgba(35, 35, 35, 0.7) 0%,
rgba(25, 25, 25, 0.8) 100%);
backdrop-filter: blur(10px) saturate(1.1);
border: 1px solid rgba(255, 255, 255, 0.1);
border-top: 1px solid rgba(255, 255, 255, 0.15);
border-radius: 16px;
transition: all 0.3s ease;
/* Premium shadow with subtle glow */
box-shadow:
0 8px 32px rgba(0, 0, 0, 0.4),
0 4px 16px rgba(0, 0, 0, 0.2),
0 0 20px rgba(29, 185, 84, 0.08),
inset 0 1px 0 rgba(255, 255, 255, 0.1);
}
.artist-download-item:hover {
transform: translateY(-2px);
background: linear-gradient(135deg,
rgba(40, 40, 40, 0.8) 0%,
rgba(30, 30, 30, 0.9) 100%);
border-color: rgba(255, 255, 255, 0.15);
box-shadow:
0 12px 40px rgba(0, 0, 0, 0.5),
0 6px 20px rgba(0, 0, 0, 0.3),
0 0 25px rgba(29, 185, 84, 0.12),
inset 0 1px 0 rgba(255, 255, 255, 0.15);
}
/* Album artwork in download items */
.download-item-artwork {
position: relative;
flex-shrink: 0;
}
.download-item-image {
width: 50px;
height: 50px;
border-radius: 12px;
object-fit: cover;
box-shadow:
0 4px 12px rgba(0, 0, 0, 0.3),
0 2px 6px rgba(0, 0, 0, 0.2),
inset 0 1px 0 rgba(255, 255, 255, 0.1);
border: 1px solid rgba(255, 255, 255, 0.1);
transition: all 0.3s ease;
}
.artist-download-item:hover .download-item-image {
transform: scale(1.05);
box-shadow:
0 6px 16px rgba(0, 0, 0, 0.4),
0 3px 8px rgba(0, 0, 0, 0.3),
inset 0 1px 0 rgba(255, 255, 255, 0.15);
}
/* Fallback icon when no album image */
.download-item-fallback {
width: 50px;
height: 50px;
border-radius: 12px;
display: flex;
align-items: center;
justify-content: center;
background: linear-gradient(135deg,
rgba(29, 185, 84, 0.2) 0%,
rgba(30, 215, 96, 0.1) 100%);
border: 1px solid rgba(29, 185, 84, 0.3);
font-size: 18px;
color: rgba(29, 185, 84, 0.8);
transition: all 0.3s ease;
}
.artist-download-item:hover .download-item-fallback {
background: linear-gradient(135deg,
rgba(29, 185, 84, 0.3) 0%,
rgba(30, 215, 96, 0.2) 100%);
border-color: rgba(29, 185, 84, 0.4);
color: rgba(29, 185, 84, 1);
transform: scale(1.05);
box-shadow:
0 4px 12px rgba(29, 185, 84, 0.2),
inset 0 1px 0 rgba(255, 255, 255, 0.1);
}
.download-item-info {
flex: 1;
}
.download-item-name {
font-size: 14px;
font-weight: 600;
color: rgba(255, 255, 255, 0.9);
margin-bottom: 4px;
line-height: 1.3;
}
.download-item-type {
font-size: 12px;
color: rgba(255, 255, 255, 0.6);
text-transform: capitalize;
}
.download-item-actions {
margin-left: 16px;
}
.download-item-btn {
padding: 8px 16px;
border-radius: 8px;
border: none;
font-size: 12px;
font-weight: 600;
cursor: pointer;
transition: all 0.2s ease;
min-width: 100px;
}
.download-item-btn.active {
background: linear-gradient(135deg,
rgba(29, 185, 84, 0.9) 0%,
rgba(24, 156, 71, 0.9) 100%);
color: white;
box-shadow: 0 2px 8px rgba(29, 185, 84, 0.3);
}
.download-item-btn.active:hover {
background: linear-gradient(135deg,
rgba(29, 185, 84, 1.0) 0%,
rgba(24, 156, 71, 1.0) 100%);
box-shadow: 0 4px 12px rgba(29, 185, 84, 0.4);
transform: translateY(-1px);
}
.download-item-btn.completed {
background: linear-gradient(135deg,
rgba(34, 197, 94, 0.9) 0%,
rgba(21, 128, 61, 0.9) 100%);
color: white;
box-shadow: 0 2px 8px rgba(34, 197, 94, 0.3);
}
.download-item-btn.completed:hover {
background: linear-gradient(135deg,
rgba(34, 197, 94, 1.0) 0%,
rgba(21, 128, 61, 1.0) 100%);
box-shadow: 0 4px 12px rgba(34, 197, 94, 0.4);
transform: translateY(-1px);
}
/* Dynamic glow effects for artist bubble cards */
.artist-bubble-card.has-dynamic-glow {
transition: all 0.3s cubic-bezier(0.4, 0, 0.2, 1),
filter 0.4s cubic-bezier(0.4, 0, 0.2, 1);
}
.artist-bubble-card.has-dynamic-glow:hover {
filter: drop-shadow(0 0 6px var(--glow-color-1, #1db954))
drop-shadow(0 0 12px var(--glow-color-2, #1ed760));
border-color: var(--glow-color-1, rgba(29, 185, 84, 0.4));
}
/* Responsive design for artist download modal */
@media (max-width: 768px) {
.artist-download-modal-content {
width: 95vw;
max-height: 90vh;
margin: 16px;
border-radius: 16px;
}
.artist-download-modal-hero {
padding: 16px 20px;
min-height: 80px;
}
.artist-download-modal-hero-content {
gap: 16px;
}
.artist-download-modal-hero-image,
.artist-download-modal-hero-fallback {
width: 60px;
height: 60px;
}
.artist-download-modal-hero-fallback {
font-size: 20px;
}
.artist-download-modal-hero-title {
font-size: 18px;
}
.artist-download-modal-hero-subtitle {
font-size: 13px;
}
.artist-download-modal-body {
padding: 12px 20px 20px 20px;
}
.artist-download-items {
gap: 12px;
}
.artist-download-item {
padding: 16px;
gap: 12px;
border-radius: 12px;
}
.download-item-image,
.download-item-fallback {
width: 40px;
height: 40px;
border-radius: 8px;
}
.download-item-fallback {
font-size: 14px;
}
.download-item-name {
font-size: 13px;
}
.download-item-type {
font-size: 11px;
}
.download-item-btn {
padding: 6px 12px;
font-size: 11px;
min-width: 80px;
}
.download-item-actions {
margin-left: 8px;
}
}
@media (max-width: 480px) {
.artist-download-modal-content {
width: 98vw;
margin: 8px;
border-radius: 12px;
}
.artist-download-modal-hero {
padding: 12px 16px;
min-height: 70px;
}
.artist-download-modal-hero-image,
.artist-download-modal-hero-fallback {
width: 50px;
height: 50px;
}
.artist-download-modal-hero-title {
font-size: 16px;
}
.artist-download-modal-body {
padding: 8px 16px 16px 16px;
}
.artist-download-item {
padding: 12px;
gap: 10px;
flex-direction: column;
text-align: center;
}
.download-item-artwork {
order: 1;
align-self: center;
}
.download-item-info {
order: 2;
text-align: center;
}
.download-item-actions {
order: 3;
margin-left: 0;
margin-top: 8px;
align-self: center;
}
.download-item-btn {
padding: 8px 16px;
min-width: 90px;
}
}
#metadata-updater-card{
justify-content: space-between;
}
/* ===============================
LIBRARY PAGE STYLING
=============================== */
.library-container {
height: 100%;
display: flex;
flex-direction: column;
padding: 20px;
gap: 20px;
}
/* Library Header */
.library-header {
display: flex;
justify-content: space-between;
align-items: center;
padding: 20px 0;
border-bottom: 1px solid rgba(255, 255, 255, 0.1);
}
.library-header-content {
flex: 1;
}
.library-title {
font-size: 28px;
font-weight: 700;
color: #ffffff;
margin: 0 0 8px 0;
background: linear-gradient(135deg, #1ed760, #1db954);
-webkit-background-clip: text;
-webkit-text-fill-color: transparent;
background-clip: text;
}
.library-subtitle {
font-size: 16px;
color: rgba(255, 255, 255, 0.7);
margin: 0;
font-weight: 500;
}
.library-stats {
display: flex;
gap: 24px;
}
.library-stat {
text-align: center;
}
.stat-number {
display: block;
font-size: 24px;
font-weight: 700;
color: #1ed760;
line-height: 1;
}
.stat-label {
display: block;
font-size: 12px;
color: rgba(255, 255, 255, 0.6);
text-transform: uppercase;
letter-spacing: 0.5px;
margin-top: 4px;
}
/* Library Controls */
.library-controls {
display: flex;
flex-direction: column;
gap: 16px;
}
/* Search Container */
.library-search-container {
position: relative;
max-width: 500px;
}
.library-search-input {
width: 100%;
padding: 14px 20px 14px 50px;
border: 1px solid rgba(255, 255, 255, 0.1);
border-radius: 12px;
background: rgba(255, 255, 255, 0.05);
color: #ffffff;
font-size: 15px;
font-weight: 500;
transition: all 0.3s ease;
outline: none;
}
.library-search-input:focus {
border-color: rgba(29, 185, 84, 0.6);
background: rgba(255, 255, 255, 0.08);
box-shadow: 0 0 16px rgba(29, 185, 84, 0.2);
}
.library-search-input::placeholder {
color: rgba(255, 255, 255, 0.5);
}
.library-search-icon {
position: absolute;
left: 16px;
top: 50%;
transform: translateY(-50%);
font-size: 16px;
color: rgba(255, 255, 255, 0.6);
pointer-events: none;
}
/* Alphabet Selector - Apple Style Design */
.alphabet-selector {
overflow-x: auto;
-webkit-overflow-scrolling: touch;
scrollbar-width: none;
-ms-overflow-style: none;
}
.alphabet-selector::-webkit-scrollbar {
display: none;
}
.alphabet-selector-inner {
display: flex;
gap: 12px;
padding: 16px;
min-width: max-content;
justify-content: center;
align-items: center;
}
.alphabet-btn {
padding: 0;
border: none;
background: transparent;
color: rgba(255, 255, 255, 0.4);
font-size: 16px;
font-weight: 600;
font-family: -apple-system, BlinkMacSystemFont, 'SF Pro Display', 'Segoe UI', system-ui, sans-serif;
cursor: pointer;
transition: all 0.2s ease-out;
min-width: 20px;
height: 32px;
text-align: center;
display: flex;
align-items: center;
justify-content: center;
transform: scale(1);
text-shadow: none;
padding-top: 30px;
padding-bottom: 30px;
}
.alphabet-btn:hover {
color: #ffffff;
transform: scale(2.5);
margin-left: 15px;
margin-right: 15px;
text-shadow: 0 0 8px rgba(255, 255, 255, 0.8);
}
/* Neighbor scaling effect */
.alphabet-btn:hover + .alphabet-btn,
.alphabet-btn:has(+ .alphabet-btn:hover) {
transform: scale(1.8);
color: rgba(255, 255, 255, 0.7);
text-shadow: 0 0 4px rgba(255, 255, 255, 0.4);
}
.alphabet-btn:hover + .alphabet-btn + .alphabet-btn,
.alphabet-btn:has(+ .alphabet-btn + .alphabet-btn:hover) {
transform: scale(1.4);
color: rgba(255, 255, 255, 0.6);
}
.alphabet-btn.active {
color: #ffffff;
transform: scale(1.2);
text-shadow: 0 0 6px rgba(255, 255, 255, 0.6);
}
/* Library Content */
.library-content {
flex: 1;
display: flex;
flex-direction: column;
min-height: 0;
}
/* Artists Grid */
.library-artists-grid {
display: grid;
grid-template-columns: repeat(auto-fill, minmax(200px, 1fr));
gap: 20px;
padding: 20px 0;
flex: 1;
}
/* Library Artist Card */
.library-artist-card {
background: linear-gradient(135deg,
rgba(26, 26, 26, 0.95) 0%,
rgba(18, 18, 18, 0.98) 100%);
backdrop-filter: blur(12px) saturate(1.1);
border-radius: 16px;
border: 1px solid rgba(255, 255, 255, 0.08);
border-top: 1px solid rgba(255, 255, 255, 0.12);
padding: 20px;
cursor: pointer;
transition: all 0.3s ease;
display: flex;
flex-direction: column;
align-items: center;
text-align: center;
gap: 12px;
position: relative;
overflow: hidden;
}
.library-artist-card:hover {
transform: translateY(-4px);
border-color: rgba(29, 185, 84, 0.3);
box-shadow: 0 8px 32px rgba(0, 0, 0, 0.4),
0 0 20px rgba(29, 185, 84, 0.1);
}
.library-artist-card:active {
transform: translateY(-2px);
}
/* Artist Image */
.library-artist-image {
width: 120px;
height: 120px;
border-radius: 50%;
overflow: hidden;
position: relative;
background: linear-gradient(135deg,
rgba(255, 255, 255, 0.1) 0%,
rgba(255, 255, 255, 0.05) 100%);
border: 2px solid rgba(255, 255, 255, 0.1);
transition: all 0.3s ease;
}
.library-artist-card:hover .library-artist-image {
border-color: rgba(29, 185, 84, 0.4);
box-shadow: 0 0 20px rgba(29, 185, 84, 0.2);
}
.library-artist-image img {
width: 100%;
height: 100%;
object-fit: cover;
transition: all 0.3s ease;
}
.library-artist-card:hover .library-artist-image img {
transform: scale(1.05);
}
/* Artist Image Fallback */
.library-artist-image-fallback {
width: 100%;
height: 100%;
display: flex;
align-items: center;
justify-content: center;
font-size: 48px;
color: rgba(255, 255, 255, 0.4);
background: linear-gradient(135deg,
rgba(255, 255, 255, 0.08) 0%,
rgba(255, 255, 255, 0.03) 100%);
}
/* Artist Info */
.library-artist-info {
flex: 1;
display: flex;
flex-direction: column;
gap: 4px;
min-height: 0;
}
.library-artist-name {
font-size: 16px;
font-weight: 700;
color: #ffffff;
margin: 0;
line-height: 1.3;
overflow: hidden;
text-overflow: ellipsis;
white-space: nowrap;
max-width: 100%;
}
.library-artist-stats {
font-size: 13px;
color: rgba(255, 255, 255, 0.6);
font-weight: 500;
display: flex;
justify-content: center;
gap: 8px;
flex-wrap: wrap;
}
.library-artist-stat {
white-space: nowrap;
}
/* Empty State */
.library-empty {
display: flex;
flex-direction: column;
align-items: center;
justify-content: center;
flex: 1;
gap: 16px;
padding: 60px 20px;
}
.empty-icon {
font-size: 64px;
opacity: 0.3;
}
.empty-title {
font-size: 24px;
font-weight: 700;
color: rgba(255, 255, 255, 0.8);
}
.empty-subtitle {
font-size: 16px;
color: rgba(255, 255, 255, 0.5);
text-align: center;
max-width: 400px;
}
/* Pagination */
.library-pagination {
display: flex;
justify-content: center;
align-items: center;
gap: 20px;
padding: 20px 0;
margin-top: auto;
}
.pagination-btn {
padding: 10px 16px;
border: 1px solid rgba(255, 255, 255, 0.1);
border-radius: 8px;
background: rgba(255, 255, 255, 0.05);
color: rgba(255, 255, 255, 0.8);
font-size: 14px;
font-weight: 600;
cursor: pointer;
transition: all 0.2s ease;
}
.pagination-btn:hover:not(:disabled) {
background: rgba(255, 255, 255, 0.1);
border-color: rgba(255, 255, 255, 0.2);
color: #ffffff;
}
.pagination-btn:disabled {
opacity: 0.4;
cursor: not-allowed;
}
.pagination-info {
color: rgba(255, 255, 255, 0.7);
font-size: 14px;
font-weight: 500;
}
/* Responsive Design */
@media (max-width: 1200px) {
.library-artists-grid {
grid-template-columns: repeat(auto-fill, minmax(180px, 1fr));
gap: 16px;
}
.library-artist-image {
width: 100px;
height: 100px;
}
}
@media (max-width: 768px) {
.library-container {
padding: 16px;
gap: 16px;
}
.library-header {
flex-direction: column;
align-items: flex-start;
gap: 12px;
}
.library-stats {
align-self: stretch;
justify-content: center;
}
.library-artists-grid {
grid-template-columns: repeat(auto-fill, minmax(150px, 1fr));
gap: 12px;
}
.library-artist-card {
padding: 16px;
}
.library-artist-image {
width: 80px;
height: 80px;
}
.library-artist-name {
font-size: 14px;
}
.library-artist-stats {
font-size: 12px;
}
}
/* ========================================
Artist Detail Page Styles
======================================== */
.artist-detail-header {
display: flex;
align-items: center;
gap: 20px;
width: 100%;
}
.back-btn {
background: linear-gradient(135deg, rgba(26, 26, 26, 0.95) 0%, rgba(18, 18, 18, 0.98) 100%);
backdrop-filter: blur(12px) saturate(1.1);
border: 1px solid rgba(255, 255, 255, 0.1);
border-radius: 12px;
padding: 12px 20px;
color: #ffffff;
font-family: 'SF Pro Text', -apple-system, sans-serif;
font-size: 14px;
font-weight: 500;
cursor: pointer;
transition: all 0.2s cubic-bezier(0.4, 0.0, 0.2, 1);
text-decoration: none;
display: flex;
align-items: center;
gap: 8px;
flex-shrink: 0;
}
.back-btn:hover {
background: linear-gradient(135deg, rgba(40, 40, 40, 0.95) 0%, rgba(30, 30, 30, 0.98) 100%);
border-color: rgba(255, 255, 255, 0.15);
transform: translateY(-1px);
box-shadow: 0 8px 25px rgba(0, 0, 0, 0.4);
}
.artist-detail-title {
flex-grow: 1;
min-width: 0;
}
.artist-detail-title h2 {
font-size: 28px;
font-weight: 700;
color: #ffffff;
margin: 0 0 8px 0;
line-height: 1.2;
overflow: hidden;
text-overflow: ellipsis;
white-space: nowrap;
}
.artist-detail-stats {
display: flex;
gap: 16px;
flex-wrap: wrap;
}
.artist-stat {
color: #b3b3b3;
font-size: 14px;
font-weight: 500;
}
/* Artist Detail Content */
.artist-detail-content {
flex: 1;
display: flex;
flex-direction: column;
overflow: hidden;
}
.artist-detail-loading,
.artist-detail-error {
display: flex;
flex-direction: column;
align-items: center;
justify-content: center;
flex: 1;
text-align: center;
padding: 40px 20px;
}
.artist-detail-loading .loading-spinner {
width: 40px;
height: 40px;
border: 3px solid rgba(255, 255, 255, 0.1);
border-top: 3px solid #1db954;
border-radius: 50%;
animation: spin 1s linear infinite;
margin-bottom: 20px;
}
.artist-detail-error .error-icon {
font-size: 48px;
margin-bottom: 16px;
}
.artist-detail-error h3 {
color: #ffffff;
font-size: 20px;
margin: 0 0 8px 0;
}
.artist-detail-error p {
color: #b3b3b3;
margin: 0 0 20px 0;
}
.retry-btn {
background: linear-gradient(135deg, #1db954 0%, #1ed760 100%);
border: none;
border-radius: 12px;
padding: 12px 24px;
color: #ffffff;
font-family: 'SF Pro Text', -apple-system, sans-serif;
font-size: 14px;
font-weight: 600;
cursor: pointer;
transition: all 0.2s cubic-bezier(0.4, 0.0, 0.2, 1);
}
.retry-btn:hover {
background: linear-gradient(135deg, #1ed760 0%, #1db954 100%);
transform: translateY(-1px);
box-shadow: 0 8px 25px rgba(29, 185, 84, 0.3);
}
/* Artist Info Section */
.artist-info-section {
display: flex;
gap: 30px;
padding: 30px 0;
border-bottom: 1px solid rgba(255, 255, 255, 0.1);
margin-bottom: 30px;
background: linear-gradient(135deg, rgba(26, 26, 26, 0.3) 0%, rgba(18, 18, 18, 0.5) 100%);
border-radius: 20px;
padding: 32px;
backdrop-filter: blur(8px);
border: 1px solid rgba(255, 255, 255, 0.05);
}
.artist-image-container {
position: relative;
flex-shrink: 0;
}
.artist-detail-image {
width: 200px;
height: 200px;
border-radius: 16px;
object-fit: cover;
border: 1px solid rgba(255, 255, 255, 0.1);
}
.artist-image-fallback {
width: 200px;
height: 200px;
border-radius: 16px;
background: linear-gradient(135deg, rgba(26, 26, 26, 0.95) 0%, rgba(18, 18, 18, 0.98) 100%);
border: 1px solid rgba(255, 255, 255, 0.1);
display: flex;
align-items: center;
justify-content: center;
font-size: 64px;
}
.artist-info {
flex: 1;
min-width: 0;
}
.artist-info h1 {
font-size: 48px;
font-weight: 800;
color: #ffffff;
margin: 0 0 12px 0;
line-height: 1.1;
overflow: hidden;
text-overflow: ellipsis;
white-space: nowrap;
}
.artist-genres {
display: flex;
flex-wrap: wrap;
gap: 8px;
margin-bottom: 24px;
}
.genre-tag {
background: rgba(255, 255, 255, 0.1);
border: 1px solid rgba(255, 255, 255, 0.15);
border-radius: 20px;
padding: 6px 14px;
color: #ffffff;
font-size: 12px;
font-weight: 500;
text-transform: capitalize;
}
.artist-summary-stats {
display: flex;
gap: 40px;
flex-wrap: wrap;
}
.summary-stat {
display: flex;
flex-direction: column;
align-items: center;
text-align: center;
}
.stat-number {
font-size: 32px;
font-weight: 800;
color: #1db954;
line-height: 1;
margin-bottom: 6px;
}
.stat-label {
font-size: 14px;
color: #b3b3b3;
font-weight: 500;
text-transform: uppercase;
letter-spacing: 0.5px;
}
/* Discography Sections */
.discography-sections {
display: flex;
flex-direction: column;
gap: 40px;
}
.discography-section {
opacity: 1; /* Show immediately instead of animation for now */
}
/* Animation keyframes for future use */
@keyframes fadeInUp {
from {
opacity: 0;
transform: translateY(20px);
}
to {
opacity: 1;
transform: translateY(0);
}
}
.section-header {
display: flex;
align-items: center;
justify-content: space-between;
margin-bottom: 20px;
padding-bottom: 12px;
border-bottom: 1px solid rgba(255, 255, 255, 0.1);
}
.section-header h3 {
font-size: 24px;
font-weight: 700;
color: #ffffff;
margin: 0;
}
.section-stats {
display: flex;
gap: 16px;
color: #b3b3b3;
font-size: 14px;
font-weight: 500;
}
.releases-grid {
display: grid;
grid-template-columns: repeat(auto-fill, minmax(180px, 1fr));
gap: 16px;
padding: 8px 0;
}
/* Release Cards */
.release-card {
background: linear-gradient(135deg, rgba(26, 26, 26, 0.95) 0%, rgba(18, 18, 18, 0.98) 100%);
backdrop-filter: blur(12px) saturate(1.1);
border: 1px solid rgba(255, 255, 255, 0.1);
border-radius: 16px;
padding: 14px;
cursor: pointer;
transition: all 0.3s cubic-bezier(0.4, 0.0, 0.2, 1);
position: relative;
overflow: hidden;
display: flex;
flex-direction: column;
height: 280px; /* Fixed height for consistent layout */
}
.release-card:hover {
background: linear-gradient(135deg, rgba(40, 40, 40, 0.95) 0%, rgba(30, 30, 30, 0.98) 100%);
border-color: rgba(255, 255, 255, 0.15);
transform: translateY(-4px);
box-shadow: 0 12px 35px rgba(0, 0, 0, 0.4);
}
.release-card.missing {
opacity: 0.6;
background: linear-gradient(135deg, rgba(60, 60, 60, 0.3) 0%, rgba(40, 40, 40, 0.5) 100%);
border-color: rgba(255, 255, 255, 0.05);
}
.release-card.missing:hover {
opacity: 0.8;
background: linear-gradient(135deg, rgba(70, 70, 70, 0.4) 0%, rgba(50, 50, 50, 0.6) 100%);
}
.release-image {
width: 100%;
aspect-ratio: 1;
border-radius: 12px;
object-fit: cover;
margin-bottom: 12px;
border: 1px solid rgba(255, 255, 255, 0.1);
flex-shrink: 0;
}
.release-image-fallback {
width: 100%;
aspect-ratio: 1;
border-radius: 12px;
background: linear-gradient(135deg, rgba(60, 60, 60, 0.6) 0%, rgba(40, 40, 40, 0.8) 100%);
border: 1px solid rgba(255, 255, 255, 0.1);
display: flex;
align-items: center;
justify-content: center;
font-size: 28px;
margin-bottom: 12px;
flex-shrink: 0;
color: rgba(255, 255, 255, 0.6);
}
.release-title {
font-size: 16px;
font-weight: 600;
color: #ffffff;
margin: 0 0 6px 0;
line-height: 1.3;
overflow: hidden;
text-overflow: ellipsis;
white-space: nowrap;
}
.release-year {
font-size: 14px;
color: #b3b3b3;
margin: 0 0 8px 0;
}
.release-completion {
display: flex;
align-items: center;
justify-content: space-between;
font-size: 11px;
margin-top: auto;
padding-top: 8px;
border-top: 1px solid rgba(255, 255, 255, 0.05);
}
.completion-text {
color: #b3b3b3;
}
.completion-text.complete {
color: #1db954;
font-weight: 600;
}
.completion-text.partial {
color: #ffa500;
font-weight: 600;
}
.completion-text.missing {
color: #ff6b6b;
font-weight: 600;
}
.completion-bar {
width: 60px;
height: 4px;
background: rgba(255, 255, 255, 0.1);
border-radius: 2px;
overflow: hidden;
}
.completion-fill {
height: 100%;
border-radius: 2px;
transition: width 0.3s cubic-bezier(0.4, 0.0, 0.2, 1);
}
.completion-fill.complete {
background: linear-gradient(90deg, #1db954, #1ed760);
}
.completion-fill.partial {
background: linear-gradient(90deg, #ffa500, #ffb347);
}
.completion-fill.missing {
background: linear-gradient(90deg, #ff6b6b, #ff8e8e);
width: 0%;
}
/* Responsive Design */
@media (max-width: 768px) {
.artist-detail-header {
flex-direction: column;
align-items: flex-start;
gap: 16px;
}
.artist-detail-title h2 {
font-size: 24px;
white-space: normal;
}
.artist-info-section {
flex-direction: column;
align-items: center;
text-align: center;
gap: 20px;
}
.artist-detail-image,
.artist-image-fallback {
width: 150px;
height: 150px;
}
.artist-info h1 {
font-size: 36px;
white-space: normal;
text-align: center;
}
.artist-summary-stats {
justify-content: center;
gap: 30px;
}
.section-header {
flex-direction: column;
align-items: flex-start;
gap: 8px;
}
.releases-grid {
grid-template-columns: repeat(auto-fill, minmax(150px, 1fr));
gap: 16px;
}
.release-card {
padding: 12px;
}
}
/* ===============================
ARTIST HERO SECTION (Modal-inspired design)
=============================== */
.artist-hero-section {
background: linear-gradient(135deg, rgba(26, 26, 26, 0.95) 0%, rgba(18, 18, 18, 0.98) 100%);
backdrop-filter: blur(12px) saturate(1.1);
border: 1px solid rgba(255, 255, 255, 0.08);
border-radius: 12px;
margin: 20px 20px 20px 20px;
padding: 20px;
box-shadow: 0 8px 24px rgba(0, 0, 0, 0.3);
}
.artist-hero-content {
display: flex;
align-items: center;
gap: 20px;
}
.artist-image-container {
position: relative;
flex-shrink: 0;
}
.artist-image {
width: 100px;
height: 100px;
border-radius: 12px;
object-fit: cover;
border: 2px solid rgba(29, 185, 84, 0.3);
box-shadow: 0 4px 16px rgba(0, 0, 0, 0.3);
display: block;
}
.artist-image-fallback {
width: 100px;
height: 100px;
border-radius: 12px;
background: linear-gradient(135deg, rgba(29, 185, 84, 0.2) 0%, rgba(30, 215, 96, 0.1) 100%);
border: 2px solid rgba(29, 185, 84, 0.3);
box-shadow: 0 4px 16px rgba(0, 0, 0, 0.3);
display: flex;
align-items: center;
justify-content: center;
font-size: 40px;
color: rgba(255, 255, 255, 0.6);
position: absolute;
top: 0;
left: 0;
}
.artist-image:not([src=""]):not([src]) + .artist-image-fallback,
.artist-image[src]:not([src=""]) + .artist-image-fallback {
display: none;
}
.artist-info {
flex: 1;
min-width: 0;
}
.artist-name {
font-size: 32px;
font-weight: 700;
color: #ffffff;
margin: 0 0 16px 0;
line-height: 1.1;
font-family: 'SF Pro Display', -apple-system, BlinkMacSystemFont, sans-serif;
letter-spacing: -0.3px;
}
.artist-genres-container {
display: flex;
flex-wrap: wrap;
gap: 8px;
margin-bottom: 24px;
}
.collection-overview {
display: flex;
flex-direction: column;
gap: 12px;
}
.collection-category {
background: rgba(255, 255, 255, 0.04);
border: 1px solid rgba(255, 255, 255, 0.08);
border-radius: 8px;
padding: 12px 16px;
transition: all 0.3s ease;
}
.collection-category:hover {
background: rgba(255, 255, 255, 0.06);
border-color: rgba(29, 185, 84, 0.2);
}
.category-header {
display: flex;
justify-content: space-between;
align-items: center;
margin-bottom: 8px;
}
.category-label {
color: #ffffff;
font-weight: 700;
font-size: 16px;
font-family: 'SF Pro Display', -apple-system, BlinkMacSystemFont, sans-serif;
}
.category-stats {
color: #b3b3b3;
font-size: 14px;
font-weight: 500;
font-family: 'SF Pro Text', -apple-system, BlinkMacSystemFont, sans-serif;
}
.completion-section {
display: flex;
align-items: center;
gap: 16px;
}
.completion-bar {
flex: 1;
height: 8px;
background: rgba(255, 255, 255, 0.1);
border-radius: 4px;
overflow: hidden;
position: relative;
}
.completion-fill {
height: 100%;
background: linear-gradient(90deg, #1db954 0%, #1ed760 100%);
transition: width 0.8s cubic-bezier(0.4, 0, 0.2, 1);
border-radius: 4px;
position: relative;
}
.completion-fill::after {
content: '';
position: absolute;
top: 0;
left: 0;
right: 0;
bottom: 0;
background: linear-gradient(90deg, transparent 0%, rgba(255, 255, 255, 0.2) 50%, transparent 100%);
animation: shimmer 2s infinite;
}
@keyframes shimmer {
0% { transform: translateX(-100%); }
100% { transform: translateX(100%); }
}
.completion-text {
color: #ffffff;
font-size: 16px;
font-weight: 700;
min-width: 45px;
text-align: right;
font-family: 'SF Pro Text', -apple-system, BlinkMacSystemFont, sans-serif;
}
/* Mobile responsiveness */
@media (max-width: 768px) {
.artist-hero-section {
margin: 15px;
padding: 20px;
}
.artist-hero-content {
flex-direction: column;
align-items: center;
text-align: center;
gap: 20px;
}
.artist-image,
.artist-image-fallback {
width: 120px;
height: 120px;
}
.artist-name {
font-size: 32px;
text-align: center;
}
.category-header {
flex-direction: column;
align-items: flex-start;
gap: 4px;
margin-bottom: 8px;
}
.completion-section {
gap: 12px;
}
}
/* ================================================
ADD TO WISHLIST MODAL STYLES
================================================ */
/* Modal Overlay and Container */
.add-to-wishlist-modal {
display: flex;
flex-direction: column;
width: 900px;
max-width: 90vw;
max-height: 85vh;
border-radius: 20px;
overflow: hidden;
position: relative;
/* Premium glassmorphic foundation matching download modal */
background: linear-gradient(135deg,
rgba(20, 20, 20, 0.95) 0%,
rgba(12, 12, 12, 0.98) 100%);
backdrop-filter: blur(20px) saturate(1.2);
/* Enhanced borders */
border: 1px solid rgba(255, 255, 255, 0.12);
/* Premium shadow effect matching download modal */
box-shadow:
0 20px 60px rgba(0, 0, 0, 0.6),
0 8px 32px rgba(0, 0, 0, 0.4),
0 0 40px rgba(29, 185, 84, 0.1),
inset 0 1px 0 rgba(255, 255, 255, 0.15);
transform: scale(0.9);
opacity: 0;
transition: all 0.4s cubic-bezier(0.4, 0, 0.2, 1);
}
#add-to-wishlist-modal-overlay:not(.hidden) .add-to-wishlist-modal {
transform: scale(1);
opacity: 1;
}
/* Modal Header */
.add-to-wishlist-modal-header {
/* Enhanced gradient with subtle transparency and glow */
background: linear-gradient(135deg,
rgba(45, 45, 45, 0.8) 0%,
rgba(26, 26, 26, 0.9) 100%);
border-bottom: 1px solid rgba(255, 255, 255, 0.08);
border-top-left-radius: 20px;
border-top-right-radius: 20px;
position: relative;
overflow: hidden;
}
/* Hero Section */
.add-to-wishlist-modal-hero {
display: flex;
align-items: center;
padding: 20px 28px;
gap: 20px;
position: relative;
z-index: 2;
min-height: 120px;
}
.add-to-wishlist-modal-hero-bg {
position: absolute;
top: 0;
left: 0;
right: 0;
bottom: 0;
background-size: cover;
background-position: center;
opacity: 0.3;
filter: blur(20px);
z-index: 1;
}
.add-to-wishlist-modal-hero-bg::after {
content: '';
position: absolute;
top: 0;
left: 0;
right: 0;
bottom: 0;
background: linear-gradient(135deg,
rgba(26, 26, 26, 0.7) 0%,
rgba(18, 18, 18, 0.8) 100%);
}
.add-to-wishlist-modal-hero-content {
display: flex;
align-items: center;
gap: 20px;
position: relative;
z-index: 2;
width: 100%;
}
.add-to-wishlist-modal-hero-images {
display: flex;
align-items: center;
gap: 16px;
flex-shrink: 0;
}
.add-to-wishlist-modal-hero-image {
border-radius: 12px;
object-fit: cover;
box-shadow:
0 8px 24px rgba(0, 0, 0, 0.4),
0 4px 12px rgba(0, 0, 0, 0.3),
inset 0 1px 0 rgba(255, 255, 255, 0.1);
transition: all 0.3s cubic-bezier(0.4, 0, 0.2, 1);
}
.add-to-wishlist-modal-hero-image:hover {
transform: scale(1.05);
box-shadow:
0 12px 32px rgba(0, 0, 0, 0.5),
0 6px 16px rgba(0, 0, 0, 0.3),
inset 0 1px 0 rgba(255, 255, 255, 0.2);
}
.add-to-wishlist-modal-hero-image.artist {
border-radius: 50%;
width: 70px;
height: 70px;
}
.add-to-wishlist-modal-hero-image.album {
border-radius: 12px;
width: 80px;
height: 80px;
}
.add-to-wishlist-modal-hero-icon {
width: 80px;
height: 80px;
display: flex;
align-items: center;
justify-content: center;
font-size: 36px;
border-radius: 12px;
background: linear-gradient(135deg,
rgba(255, 255, 255, 0.1) 0%,
rgba(255, 255, 255, 0.05) 100%);
border: 1px solid rgba(255, 255, 255, 0.1);
box-shadow: 0 8px 24px rgba(0, 0, 0, 0.3);
}
.add-to-wishlist-modal-hero-metadata {
flex: 1;
display: flex;
flex-direction: column;
gap: 8px;
min-width: 0;
}
.add-to-wishlist-modal-hero-title {
color: #ffffff;
font-size: 22px;
font-weight: 700;
margin: 0;
line-height: 1.2;
overflow: hidden;
text-overflow: ellipsis;
white-space: nowrap;
}
.add-to-wishlist-modal-hero-subtitle {
color: #e0e0e0;
font-size: 16px;
font-weight: 500;
margin: 0;
opacity: 0.9;
overflow: hidden;
text-overflow: ellipsis;
white-space: nowrap;
}
.add-to-wishlist-modal-hero-details {
display: flex;
gap: 16px;
font-size: 14px;
margin-top: 4px;
}
.add-to-wishlist-modal-hero-detail {
color: #1ed760;
font-weight: 600;
padding: 4px 8px;
background: rgba(29, 185, 84, 0.1);
border-radius: 6px;
border: 1px solid rgba(29, 185, 84, 0.2);
box-shadow: 0 2px 6px rgba(29, 185, 84, 0.1);
transition: all 0.3s ease;
}
/* Header Actions */
.add-to-wishlist-modal-header-actions {
position: absolute;
top: 16px;
right: 24px;
z-index: 3;
}
.add-to-wishlist-modal-close {
color: #b3b3b3;
font-size: 28px;
font-weight: 300;
cursor: pointer;
transition: all 0.3s ease;
width: 36px;
height: 36px;
display: flex;
align-items: center;
justify-content: center;
border-radius: 50%;
background: rgba(0, 0, 0, 0.3);
border: 1px solid rgba(255, 255, 255, 0.1);
backdrop-filter: blur(10px);
}
.add-to-wishlist-modal-close:hover {
color: #ffffff;
background: rgba(255, 255, 255, 0.15);
transform: scale(1.1);
box-shadow: 0 4px 12px rgba(0, 0, 0, 0.3);
}
/* Modal Content */
.add-to-wishlist-modal-content {
flex: 1;
display: flex;
flex-direction: column;
overflow: hidden;
}
.add-to-wishlist-modal-body {
flex: 1;
padding: 24px 28px;
overflow-y: auto;
background: #121212;
}
.add-to-wishlist-modal-body::-webkit-scrollbar {
width: 8px;
}
.add-to-wishlist-modal-body::-webkit-scrollbar-track {
background: rgba(255, 255, 255, 0.05);
border-radius: 4px;
}
.add-to-wishlist-modal-body::-webkit-scrollbar-thumb {
background: rgba(29, 185, 84, 0.3);
border-radius: 4px;
}
.add-to-wishlist-modal-body::-webkit-scrollbar-thumb:hover {
background: rgba(29, 185, 84, 0.5);
}
/* Track List Container */
.wishlist-track-list-container {
display: flex;
flex-direction: column;
gap: 20px;
}
.wishlist-track-list-header {
text-align: center;
border-bottom: 1px solid rgba(255, 255, 255, 0.1);
padding-bottom: 20px;
}
.wishlist-track-list-header h3 {
color: #ffffff;
font-size: 20px;
font-weight: 700;
margin: 0 0 8px 0;
}
.wishlist-track-list-subtitle {
color: rgba(255, 255, 255, 0.7);
font-size: 14px;
margin: 0;
}
/* Track List */
.wishlist-track-list {
display: flex;
flex-direction: column;
gap: 12px;
max-height: 400px;
overflow-y: auto;
padding-right: 8px;
}
.wishlist-track-list::-webkit-scrollbar {
width: 6px;
}
.wishlist-track-list::-webkit-scrollbar-track {
background: rgba(255, 255, 255, 0.05);
border-radius: 3px;
}
.wishlist-track-list::-webkit-scrollbar-thumb {
background: rgba(29, 185, 84, 0.3);
border-radius: 3px;
}
.wishlist-track-item {
display: flex;
align-items: center;
padding: 12px 16px;
background: linear-gradient(135deg,
rgba(255, 255, 255, 0.05) 0%,
rgba(255, 255, 255, 0.02) 100%);
border: 1px solid rgba(255, 255, 255, 0.08);
border-radius: 12px;
transition: all 0.3s cubic-bezier(0.4, 0, 0.2, 1);
gap: 12px;
}
.wishlist-track-item:hover {
background: linear-gradient(135deg,
rgba(29, 185, 84, 0.08) 0%,
rgba(29, 185, 84, 0.03) 100%);
border-color: rgba(29, 185, 84, 0.2);
transform: translateX(4px);
}
.wishlist-track-number {
width: 30px;
text-align: center;
color: rgba(255, 255, 255, 0.6);
font-size: 14px;
font-weight: 500;
}
.wishlist-track-info {
flex: 1;
display: flex;
flex-direction: column;
gap: 4px;
min-width: 0;
}
.wishlist-track-name {
color: #ffffff;
font-size: 15px;
font-weight: 600;
overflow: hidden;
text-overflow: ellipsis;
white-space: nowrap;
}
.wishlist-track-artists {
color: rgba(255, 255, 255, 0.7);
font-size: 13px;
overflow: hidden;
text-overflow: ellipsis;
white-space: nowrap;
}
.wishlist-track-duration {
color: rgba(255, 255, 255, 0.6);
font-size: 13px;
font-weight: 500;
min-width: 40px;
text-align: right;
}
/* Modal Footer */
.add-to-wishlist-modal-footer {
background: linear-gradient(135deg,
rgba(42, 42, 42, 0.9) 0%,
rgba(30, 30, 30, 0.95) 100%);
border-top: 1px solid rgba(255, 255, 255, 0.08);
padding: 24px 28px;
border-bottom-left-radius: 20px;
border-bottom-right-radius: 20px;
}
.wishlist-modal-actions {
display: flex;
justify-content: flex-end;
gap: 12px;
}
.wishlist-modal-btn {
padding: 12px 24px;
border: none;
border-radius: 12px;
font-size: 14px;
font-weight: 600;
cursor: pointer;
transition: all 0.3s cubic-bezier(0.4, 0, 0.2, 1);
min-width: 120px;
}
.wishlist-modal-btn-secondary {
background: rgba(255, 255, 255, 0.1);
color: rgba(255, 255, 255, 0.8);
border: 1px solid rgba(255, 255, 255, 0.2);
}
.wishlist-modal-btn-secondary:hover {
background: rgba(255, 255, 255, 0.2);
color: #ffffff;
border-color: rgba(255, 255, 255, 0.3);
}
.wishlist-modal-btn-primary {
background: linear-gradient(135deg, #1db954 0%, #1ed760 100%);
color: #ffffff;
border: 1px solid rgba(29, 185, 84, 0.3);
}
.wishlist-modal-btn-primary:hover {
background: linear-gradient(135deg, #1ed760 0%, #22e167 100%);
transform: translateY(-1px);
box-shadow: 0 8px 24px rgba(29, 185, 84, 0.4);
}
.wishlist-modal-btn-primary:active {
transform: translateY(0);
box-shadow: 0 4px 12px rgba(29, 185, 84, 0.3);
}
/* Loading State */
.wishlist-modal-btn-primary.loading {
background: rgba(255, 193, 7, 0.9);
color: #000000;
animation: pulse-loading 1.5s infinite;
cursor: not-allowed;
}
.wishlist-modal-btn-primary:disabled {
background: rgba(255, 255, 255, 0.1);
color: rgba(255, 255, 255, 0.4);
cursor: not-allowed;
transform: none;
box-shadow: none;
}
/* Animation for modal appearance */
@keyframes wishlistModalFadeIn {
from {
opacity: 0;
transform: scale(0.9) translateY(20px);
}
to {
opacity: 1;
transform: scale(1) translateY(0);
}
}
#add-to-wishlist-modal-overlay:not(.hidden) .add-to-wishlist-modal {
animation: wishlistModalFadeIn 0.4s ease-out;
}
/* Mobile Responsiveness */
@media (max-width: 768px) {
.add-to-wishlist-modal {
width: 95vw;
max-height: 90vh;
border-radius: 16px;
}
.add-to-wishlist-modal-hero {
flex-direction: column;
text-align: center;
min-height: auto;
padding: 20px;
gap: 16px;
}
.add-to-wishlist-modal-hero-content {
flex-direction: column;
gap: 16px;
}
.add-to-wishlist-modal-hero-images {
justify-content: center;
}
.add-to-wishlist-modal-hero-image.album,
.add-to-wishlist-modal-hero-image.artist {
width: 60px;
height: 60px;
}
.add-to-wishlist-modal-hero-icon {
width: 60px;
height: 60px;
font-size: 28px;
margin: 0 auto;
}
.add-to-wishlist-modal-hero-title {
font-size: 18px;
white-space: normal;
text-align: center;
}
.add-to-wishlist-modal-hero-subtitle {
font-size: 14px;
white-space: normal;
text-align: center;
}
.add-to-wishlist-modal-hero-details {
justify-content: center;
flex-wrap: wrap;
}
.add-to-wishlist-modal-body {
padding: 20px;
}
.add-to-wishlist-modal-footer {
padding: 20px;
}
.wishlist-modal-actions {
flex-direction: column;
gap: 12px;
}
.wishlist-modal-btn {
width: 100%;
}
}
/* =======================================
BEATPORT TOP 10 LISTS SECTION
======================================= */
.beatport-top10-section {
margin-top: 40px;
padding: 0 30px;
margin-bottom: 40px;
}
.beatport-top10-header {
text-align: center;
margin-bottom: 40px;
}
.beatport-top10-title {
font-size: 36px;
font-weight: 700;
color: #ffffff;
margin-bottom: 8px;
text-shadow: 0 2px 4px rgba(0, 0, 0, 0.5);
}
.beatport-top10-subtitle {
font-size: 16px;
color: rgba(255, 255, 255, 0.7);
margin: 0;
}
/* Two-column container for both lists */
.beatport-top10-container {
display: grid;
grid-template-columns: 1fr 1fr;
gap: 40px;
max-width: 1400px;
border-radius: 20px;
margin: 0 auto;
overflow: hidden; /* Prevent overflow */
}
/* Individual list styling */
.beatport-top10-list, .beatport-hype10-list {
background: linear-gradient(135deg,
rgba(18, 18, 18, 0.95),
rgba(30, 30, 30, 0.9));
border-radius: 20px;
padding: 30px;
backdrop-filter: blur(20px);
border: 1px solid rgba(255, 255, 255, 0.1);
box-shadow:
0 20px 40px rgba(0, 0, 0, 0.5),
inset 0 1px 0 rgba(255, 255, 255, 0.1);
width: 100%;
min-width: 0; /* Allow shrinking */
overflow: hidden; /* Prevent content overflow */
transition: all 0.3s cubic-bezier(0.4, 0, 0.2, 1),
filter 0.5s cubic-bezier(0.4, 0, 0.2, 1);
cursor: pointer;
}
/* Color-coded themes */
.beatport-top10-list {
border-left: 4px solid #00ff88;
box-shadow:
0 20px 40px rgba(0, 0, 0, 0.5),
0 0 20px rgba(0, 255, 136, 0.15),
inset 0 1px 0 rgba(255, 255, 255, 0.1);
}
.beatport-hype10-list {
border-left: 4px solid #ff3366;
box-shadow:
0 20px 40px rgba(0, 0, 0, 0.5),
0 0 20px rgba(255, 51, 102, 0.15),
inset 0 1px 0 rgba(255, 255, 255, 0.1);
}
/* Hover Effects for Top 10 Lists */
.beatport-top10-list:hover {
filter: drop-shadow(0 0 4px rgba(0, 255, 136, 0.3))
drop-shadow(0 0 8px rgba(0, 255, 136, 0.2))
drop-shadow(0 0 16px rgba(0, 255, 136, 0.1));
border-left-color: rgba(0, 255, 136, 0.6);
background: linear-gradient(135deg,
rgba(0, 255, 136, 0.04),
rgba(18, 18, 18, 0.95),
rgba(30, 30, 30, 0.9));
}
.beatport-hype10-list:hover {
filter: drop-shadow(0 0 4px rgba(255, 51, 102, 0.3))
drop-shadow(0 0 8px rgba(255, 51, 102, 0.2))
drop-shadow(0 0 16px rgba(255, 51, 102, 0.1));
border-left-color: rgba(255, 51, 102, 0.6);
background: linear-gradient(135deg,
rgba(255, 51, 102, 0.04),
rgba(18, 18, 18, 0.95),
rgba(30, 30, 30, 0.9));
}
/* List headers */
.beatport-top10-list-header, .beatport-hype10-list-header {
text-align: center;
margin-bottom: 25px;
padding-bottom: 15px;
border-bottom: 1px solid rgba(255, 255, 255, 0.1);
}
.beatport-top10-list-title, .beatport-hype10-list-title {
font-size: 24px;
font-weight: 600;
color: #ffffff;
margin-bottom: 5px;
text-shadow: 0 1px 3px rgba(0, 0, 0, 0.5);
}
.beatport-top10-list-subtitle, .beatport-hype10-list-subtitle {
font-size: 14px;
color: rgba(255, 255, 255, 0.6);
margin: 0;
}
/* Track containers */
.beatport-top10-tracks, .beatport-hype10-tracks {
display: flex;
flex-direction: column;
gap: 12px;
}
/* Individual track cards - CORRECTED CLASS NAMES */
.beatport-top10-card, .beatport-hype10-card {
display: flex;
align-items: center;
background: linear-gradient(135deg,
rgba(25, 25, 25, 0.9),
rgba(35, 35, 35, 0.8));
border-radius: 16px;
padding: 16px;
border: 1px solid rgba(255, 255, 255, 0.08);
backdrop-filter: blur(10px);
transition: all 0.4s cubic-bezier(0.25, 0.46, 0.45, 0.94);
cursor: pointer;
position: relative;
overflow: hidden;
width: 100%;
min-width: 0; /* Allow shrinking */
box-sizing: border-box;
min-height: 80px; /* Consistent height */
max-height: 80px; /* Prevent expansion */
}
/* Hover animations for cards */
.beatport-top10-card:hover {
background: linear-gradient(135deg,
rgba(0, 255, 136, 0.12),
rgba(35, 35, 35, 0.95));
border-color: rgba(0, 255, 136, 0.3);
transform: translateY(-3px);
box-shadow:
0 12px 32px rgba(0, 0, 0, 0.5),
0 0 20px rgba(0, 255, 136, 0.2);
}
.beatport-hype10-card:hover {
background: linear-gradient(135deg,
rgba(255, 51, 102, 0.12),
rgba(35, 35, 35, 0.95));
border-color: rgba(255, 51, 102, 0.3);
transform: translateY(-3px);
box-shadow:
0 12px 32px rgba(0, 0, 0, 0.5),
0 0 20px rgba(255, 51, 102, 0.2);
}
/* Track rank number */
.beatport-top10-card-rank {
font-size: 20px;
font-weight: 800;
color: #00ff88;
min-width: 35px;
text-align: center;
margin-right: 16px;
text-shadow: 0 2px 6px rgba(0, 255, 136, 0.3);
background: linear-gradient(135deg, rgba(0, 255, 136, 0.1), rgba(0, 255, 136, 0.05));
border-radius: 12px;
padding: 8px 0;
border: 1px solid rgba(0, 255, 136, 0.2);
}
.beatport-hype10-card-rank {
font-size: 20px;
font-weight: 800;
color: #ff3366;
min-width: 35px;
text-align: center;
margin-right: 16px;
text-shadow: 0 2px 6px rgba(255, 51, 102, 0.3);
background: linear-gradient(135deg, rgba(255, 51, 102, 0.1), rgba(255, 51, 102, 0.05));
border-radius: 12px;
padding: 8px 0;
border: 1px solid rgba(255, 51, 102, 0.2);
}
/* Track artwork */
.beatport-top10-card-artwork, .beatport-hype10-card-artwork {
width: 56px;
height: 56px;
border-radius: 12px;
margin-right: 16px;
overflow: hidden;
position: relative;
box-shadow: 0 6px 16px rgba(0, 0, 0, 0.4);
border: 2px solid rgba(255, 255, 255, 0.1);
}
.beatport-top10-card-artwork img, .beatport-hype10-card-artwork img {
width: 100%;
height: 100%;
object-fit: cover;
transition: transform 0.4s ease;
}
.beatport-top10-card:hover .beatport-top10-card-artwork img,
.beatport-hype10-card:hover .beatport-hype10-card-artwork img {
transform: scale(1.15);
}
/* Artwork placeholder */
.beatport-top10-card-placeholder, .beatport-hype10-card-placeholder {
width: 100%;
height: 100%;
display: flex;
align-items: center;
justify-content: center;
font-size: 24px;
background: linear-gradient(135deg, rgba(40, 40, 40, 0.8), rgba(60, 60, 60, 0.6));
color: rgba(255, 255, 255, 0.4);
}
/* Track info */
.beatport-top10-card-info, .beatport-hype10-card-info {
flex: 1;
min-width: 0; /* Critical for text truncation */
display: flex;
flex-direction: column;
gap: 4px;
overflow: hidden; /* Prevent text overflow */
width: 100%;
}
.beatport-top10-card-title, .beatport-hype10-card-title {
font-size: 15px;
font-weight: 700;
color: #ffffff;
line-height: 1.2;
overflow: hidden;
text-overflow: ellipsis;
white-space: nowrap;
text-shadow: 0 1px 3px rgba(0, 0, 0, 0.8);
max-width: 100%;
width: 100%;
}
.beatport-top10-card-artist, .beatport-hype10-card-artist {
font-size: 13px;
color: rgba(255, 255, 255, 0.8);
font-weight: 500;
overflow: hidden;
text-overflow: ellipsis;
white-space: nowrap;
max-width: 100%;
width: 100%;
}
.beatport-top10-card-label {
font-size: 11px;
color: rgba(0, 255, 136, 0.9);
font-weight: 600;
overflow: hidden;
text-overflow: ellipsis;
white-space: nowrap;
text-transform: uppercase;
letter-spacing: 0.5px;
max-width: 100%;
width: 100%;
}
.beatport-hype10-card-label {
font-size: 11px;
color: rgba(255, 51, 102, 0.9);
font-weight: 600;
overflow: hidden;
text-overflow: ellipsis;
white-space: nowrap;
text-transform: uppercase;
letter-spacing: 0.5px;
max-width: 100%;
width: 100%;
}
/* Error states */
.beatport-top10-error {
display: flex;
flex-direction: column;
align-items: center;
justify-content: center;
min-height: 200px;
background: linear-gradient(135deg,
rgba(255, 51, 51, 0.1),
rgba(40, 40, 40, 0.8));
border-radius: 16px;
border: 1px solid rgba(255, 51, 51, 0.2);
text-align: center;
padding: 30px;
}
.beatport-top10-error h3 {
color: #ff3366;
font-size: 18px;
margin-bottom: 8px;
}
.beatport-top10-error p {
color: rgba(255, 255, 255, 0.7);
font-size: 14px;
margin: 0;
}
/* Loading states */
.beatport-top10-loading, .beatport-hype10-loading {
display: flex;
align-items: center;
justify-content: center;
min-height: 300px;
background: linear-gradient(135deg,
rgba(16, 16, 16, 0.6),
rgba(24, 24, 24, 0.4));
border-radius: 16px;
border: 1px solid rgba(255, 255, 255, 0.05);
}
.beatport-top10-loading-content, .beatport-hype10-loading-content {
text-align: center;
}
.beatport-top10-loading-content h4, .beatport-hype10-loading-content h4 {
font-size: 18px;
color: #ffffff;
margin-bottom: 8px;
text-shadow: 0 1px 3px rgba(0, 0, 0, 0.8);
}
.beatport-top10-loading-content p, .beatport-hype10-loading-content p {
font-size: 14px;
color: rgba(255, 255, 255, 0.6);
margin: 0;
}
/* Top 10 Lists Responsive Design */
@media (max-width: 1300px) {
.beatport-top10-card-title, .beatport-hype10-card-title {
font-size: 14px;
}
.beatport-top10-card-artist, .beatport-hype10-card-artist {
font-size: 12px;
}
.beatport-top10-card-label, .beatport-hype10-card-label {
font-size: 10px;
}
.beatport-top10-card-rank, .beatport-hype10-card-rank {
font-size: 18px;
}
}
@media (max-width: 1200px) {
.beatport-top10-container {
gap: 30px;
max-width: 1200px;
}
.beatport-top10-list, .beatport-hype10-list {
padding: 25px;
max-width: 100%;
}
.beatport-top10-card, .beatport-hype10-card {
min-height: 75px;
max-height: 75px;
}
.beatport-top10-card-artwork, .beatport-hype10-card-artwork {
width: 48px;
height: 48px;
}
}
@media (max-width: 900px) {
.beatport-top10-container {
grid-template-columns: 1fr;
gap: 25px;
}
.beatport-top10-section {
padding: 0 20px;
}
.beatport-top10-title {
font-size: 28px;
}
.beatport-top10-list-title, .beatport-hype10-list-title {
font-size: 20px;
}
.beatport-top10-card, .beatport-hype10-card {
padding: 12px;
min-height: 70px;
max-height: 70px;
}
.beatport-top10-card-artwork, .beatport-hype10-card-artwork {
width: 42px;
height: 42px;
margin-right: 12px;
}
.beatport-top10-card-rank, .beatport-hype10-card-rank {
font-size: 16px;
min-width: 30px;
margin-right: 12px;
padding: 6px 0;
}
}
@media (max-width: 600px) {
.beatport-top10-section {
padding: 0 15px;
margin-top: 30px;
margin-bottom: 30px;
}
.beatport-top10-header {
margin-bottom: 30px;
}
.beatport-top10-title {
font-size: 24px;
}
.beatport-top10-list, .beatport-hype10-list {
padding: 20px;
}
.beatport-top10-list-title, .beatport-hype10-list-title {
font-size: 18px;
}
.beatport-top10-card, .beatport-hype10-card {
padding: 10px;
min-height: 65px;
max-height: 65px;
}
.beatport-top10-card-artwork, .beatport-hype10-card-artwork {
width: 38px;
height: 38px;
margin-right: 10px;
}
.beatport-top10-card-rank, .beatport-hype10-card-rank {
font-size: 14px;
min-width: 26px;
padding: 4px 0;
margin-right: 10px;
}
.beatport-top10-card-title, .beatport-hype10-card-title {
font-size: 13px;
}
.beatport-top10-card-artist, .beatport-hype10-card-artist {
font-size: 11px;
}
.beatport-top10-card-label, .beatport-hype10-card-label {
font-size: 9px;
}
}
/* =======================================
BEATPORT TOP 10 RELEASES SECTION
======================================= */
.beatport-releases-top10-section {
margin-top: 40px;
padding: 0 30px;
margin-bottom: 40px;
}
.beatport-releases-top10-header {
text-align: center;
margin-bottom: 40px;
}
.beatport-releases-top10-title {
font-size: 36px;
font-weight: 700;
color: #ffffff;
margin-bottom: 8px;
text-shadow: 0 2px 4px rgba(0, 0, 0, 0.5);
}
.beatport-releases-top10-subtitle {
font-size: 16px;
color: rgba(255, 255, 255, 0.7);
margin: 0;
}
/* Single column container for releases */
.beatport-releases-top10-container {
max-width: 1500px;
margin: 0 auto;
}
/* List styling with unique design */
.beatport-releases-top10-list {
background: linear-gradient(135deg,
rgba(20, 20, 20, 0.95),
rgba(35, 35, 35, 0.9));
border-radius: 24px;
padding: 40px;
backdrop-filter: blur(25px);
border: 1px solid rgba(255, 255, 255, 0.12);
box-shadow:
0 25px 50px rgba(0, 0, 0, 0.6),
0 0 25px rgba(138, 43, 226, 0.1),
inset 0 1px 0 rgba(255, 255, 255, 0.15);
border-left: 4px solid #8a2be2;
overflow: hidden;
}
/* Track containers with grid layout for releases */
.beatport-releases-top10-tracks {
display: grid;
grid-template-columns: repeat(auto-fit, minmax(40%, 1fr));
gap: 20px;
}
/* Individual release cards - unique design with images */
.beatport-releases-top10-card {
display: flex;
align-items: center;
background: linear-gradient(135deg,
rgba(30, 30, 30, 0.9),
rgba(45, 45, 45, 0.85));
border-radius: 20px;
padding: 20px;
border: 1px solid rgba(255, 255, 255, 0.1);
backdrop-filter: blur(15px);
transition: all 0.5s cubic-bezier(0.23, 1, 0.32, 1);
cursor: pointer;
position: relative;
overflow: hidden;
box-shadow: 0 8px 20px rgba(0, 0, 0, 0.3);
min-height: 120px;
max-height: 120px;
width: 100%;
min-width: 0;
box-sizing: border-box;
}
/* Hover animations for release cards */
.beatport-releases-top10-card:hover {
background: linear-gradient(135deg,
rgba(138, 43, 226, 0.15),
rgba(45, 45, 45, 0.95));
border-color: rgba(138, 43, 226, 0.4);
transform: translateY(-5px) scale(1.02);
box-shadow:
0 20px 40px rgba(0, 0, 0, 0.6),
0 0 30px rgba(138, 43, 226, 0.25);
}
/* Release rank number */
.beatport-releases-top10-card-rank {
font-size: 24px;
font-weight: 900;
color: #8a2be2;
min-width: 40px;
text-align: center;
margin-right: 20px;
text-shadow: 0 3px 8px rgba(138, 43, 226, 0.4);
background: linear-gradient(135deg, rgba(138, 43, 226, 0.15), rgba(138, 43, 226, 0.08));
border-radius: 16px;
padding: 12px 0;
border: 2px solid rgba(138, 43, 226, 0.3);
backdrop-filter: blur(10px);
}
/* Release artwork - larger since these have images */
.beatport-releases-top10-card-artwork {
width: 80px;
height: 80px;
border-radius: 16px;
margin-right: 20px;
overflow: hidden;
position: relative;
box-shadow: 0 8px 20px rgba(0, 0, 0, 0.5);
border: 3px solid rgba(255, 255, 255, 0.15);
backdrop-filter: blur(5px);
}
.beatport-releases-top10-card-artwork img {
width: 100%;
height: 100%;
object-fit: cover;
transition: transform 0.5s ease;
}
.beatport-releases-top10-card:hover .beatport-releases-top10-card-artwork img {
transform: scale(1.2) rotate(2deg);
}
/* Artwork placeholder for releases */
.beatport-releases-top10-card-placeholder {
width: 100%;
height: 100%;
display: flex;
align-items: center;
justify-content: center;
font-size: 28px;
background: linear-gradient(135deg, rgba(138, 43, 226, 0.2), rgba(80, 80, 80, 0.8));
color: rgba(255, 255, 255, 0.6);
}
/* Release info */
.beatport-releases-top10-card-info {
flex: 1;
min-width: 0;
display: flex;
flex-direction: column;
gap: 6px;
overflow: hidden;
width: 100%;
}
.beatport-releases-top10-card-title {
font-size: 18px;
font-weight: 800;
color: #ffffff;
line-height: 1.3;
overflow: hidden;
text-overflow: ellipsis;
white-space: nowrap;
text-shadow: 0 2px 4px rgba(0, 0, 0, 0.9);
max-width: 100%;
width: 100%;
}
.beatport-releases-top10-card-artist {
font-size: 15px;
color: rgba(255, 255, 255, 0.9);
font-weight: 600;
overflow: hidden;
text-overflow: ellipsis;
white-space: nowrap;
max-width: 100%;
width: 100%;
}
.beatport-releases-top10-card-label {
font-size: 13px;
color: white;
font-weight: 700;
overflow: hidden;
text-overflow: ellipsis;
white-space: nowrap;
text-transform: uppercase;
letter-spacing: 0.8px;
max-width: 100%;
width: 100%;
transition: .5s;
}
.beatport-releases-top10-card:hover .beatport-releases-top10-card-label{
color: rgba(138, 43, 226, 0.95);
transition: .5s;
}
/* Loading states for releases */
.beatport-releases-top10-loading {
display: flex;
align-items: center;
justify-content: center;
min-height: 200px;
background: linear-gradient(135deg,
rgba(20, 20, 20, 0.7),
rgba(30, 30, 30, 0.5));
border-radius: 20px;
border: 1px solid rgba(255, 255, 255, 0.08);
}
.beatport-releases-top10-loading-content {
text-align: center;
}
.beatport-releases-top10-loading-content h4 {
font-size: 20px;
color: #ffffff;
margin-bottom: 10px;
text-shadow: 0 1px 3px rgba(0, 0, 0, 0.8);
}
.beatport-releases-top10-loading-content p {
font-size: 15px;
color: rgba(255, 255, 255, 0.7);
margin: 0;
}
/* Error states for releases */
.beatport-releases-top10-error {
display: flex;
flex-direction: column;
align-items: center;
justify-content: center;
min-height: 200px;
background: linear-gradient(135deg,
rgba(255, 51, 51, 0.12),
rgba(45, 45, 45, 0.9));
border-radius: 20px;
border: 1px solid rgba(255, 51, 51, 0.25);
text-align: center;
padding: 40px;
}
.beatport-releases-top10-error h3 {
color: #ff3366;
font-size: 20px;
margin-bottom: 10px;
}
.beatport-releases-top10-error p {
color: rgba(255, 255, 255, 0.8);
font-size: 15px;
margin: 0;
}
/* Responsive Design for Top 10 Releases */
@media (max-width: 1300px) {
.beatport-releases-top10-card-title {
font-size: 16px;
}
.beatport-releases-top10-card-artist {
font-size: 14px;
}
.beatport-releases-top10-card-label {
font-size: 12px;
}
.beatport-releases-top10-card-rank {
font-size: 20px;
}
}
@media (max-width: 1200px) {
.beatport-releases-top10-tracks {
grid-template-columns: repeat(auto-fit, minmax(280px, 1fr));
gap: 16px;
}
.beatport-releases-top10-list {
padding: 30px;
}
.beatport-releases-top10-card {
min-height: 110px;
max-height: 110px;
padding: 16px;
}
.beatport-releases-top10-card-artwork {
width: 70px;
height: 70px;
}
}
@media (max-width: 900px) {
.beatport-releases-top10-tracks {
grid-template-columns: 1fr;
gap: 14px;
}
.beatport-releases-top10-section {
padding: 0 20px;
}
.beatport-releases-top10-title {
font-size: 28px;
}
.beatport-releases-top10-card {
min-height: 100px;
max-height: 100px;
padding: 14px;
}
.beatport-releases-top10-card-artwork {
width: 60px;
height: 60px;
margin-right: 16px;
}
.beatport-releases-top10-card-rank {
font-size: 18px;
min-width: 35px;
margin-right: 16px;
padding: 8px 0;
}
}
@media (max-width: 600px) {
.beatport-releases-top10-section {
padding: 0 15px;
margin-top: 30px;
margin-bottom: 30px;
}
.beatport-releases-top10-header {
margin-bottom: 30px;
}
.beatport-releases-top10-list {
padding: 20px;
}
.beatport-releases-top10-title {
font-size: 24px;
}
.beatport-releases-top10-card {
min-height: 90px;
max-height: 90px;
padding: 12px;
}
.beatport-releases-top10-card-artwork {
width: 50px;
height: 50px;
margin-right: 12px;
}
.beatport-releases-top10-card-rank {
font-size: 16px;
min-width: 30px;
margin-right: 12px;
padding: 6px 0;
}
.beatport-releases-top10-card-title {
font-size: 14px;
}
.beatport-releases-top10-card-artist {
font-size: 12px;
}
.beatport-releases-top10-card-label {
font-size: 10px;
}
}
/* ================================
BEATPORT NEW RELEASES SECTION
================================ */
.beatport-releases-section {
margin-top: 40px;
padding: 0 20px;
}
.beatport-releases-header {
text-align: center;
margin-bottom: 30px;
}
.beatport-releases-title {
font-size: 32px;
font-weight: bold;
background: linear-gradient(135deg, #1db954, #1ed760, #00d4aa);
-webkit-background-clip: text;
-webkit-text-fill-color: transparent;
background-clip: text;
margin-bottom: 8px;
text-shadow: 0 2px 4px rgba(0, 0, 0, 0.3);
}
.beatport-releases-subtitle {
font-size: 16px;
color: rgba(255, 255, 255, 0.7);
margin: 0;
}
.beatport-releases-slider-container {
position: relative;
background: linear-gradient(135deg,
rgba(18, 18, 18, 0.95),
rgba(30, 30, 30, 0.9));
border-radius: 20px;
padding: 30px;
backdrop-filter: blur(20px);
border: 1px solid rgba(255, 255, 255, 0.1);
box-shadow:
0 20px 40px rgba(0, 0, 0, 0.5),
inset 0 1px 0 rgba(255, 255, 255, 0.1);
}
.beatport-releases-slider {
position: relative;
border-radius: 16px;
}
.beatport-releases-slider-track {
position: relative;
height: 425px;
}
.beatport-releases-loading {
display: flex;
align-items: center;
justify-content: center;
min-height: 400px;
background: linear-gradient(135deg,
rgba(29, 185, 84, 0.1),
rgba(30, 215, 96, 0.05));
border-radius: 16px;
border: 2px dashed rgba(29, 185, 84, 0.3);
}
.beatport-releases-loading-content {
text-align: center;
}
.beatport-releases-loading-content h3 {
font-size: 24px;
color: #1db954;
margin-bottom: 8px;
font-weight: 600;
}
.beatport-releases-loading-content p {
color: rgba(255, 255, 255, 0.6);
font-size: 14px;
margin: 0;
}
/* Individual Slide (contains 10 cards in 5x2 grid) */
.beatport-releases-slide {
position: absolute;
top: 0;
left: 0;
width: 100%;
height: 100%;
opacity: 0;
transition: all 0.6s cubic-bezier(0.25, 0.46, 0.45, 0.94);
transform: translateX(100px);
}
.beatport-releases-slide.active {
opacity: 1;
z-index: 10;
transform: translateX(0);
}
.beatport-releases-slide.prev {
transform: translateX(-100px);
}
.beatport-releases-slide.next {
transform: translateX(100px);
}
.beatport-releases-grid {
display: grid;
grid-template-columns: repeat(5, 1fr);
grid-template-rows: repeat(2, 1fr);
gap: 20px;
padding: 20px;
background: linear-gradient(135deg,
rgba(16, 16, 16, 0.6),
rgba(24, 24, 24, 0.4));
border-radius: 16px;
border: 1px solid rgba(255, 255, 255, 0.08);
justify-items: center;
align-items: center;
margin: 0 auto;
}
/* Release Card Styling */
.beatport-release-card {
background: linear-gradient(145deg,
rgba(40, 40, 40, 0.9),
rgba(28, 28, 28, 0.95));
border-radius: 12px;
padding: 16px;
border: 1px solid rgba(255, 255, 255, 0.1);
cursor: pointer;
transition: all 0.3s cubic-bezier(0.25, 0.46, 0.45, 0.94);
position: relative;
overflow: hidden;
backdrop-filter: blur(10px);
box-shadow:
0 4px 16px rgba(0, 0, 0, 0.3),
inset 0 1px 0 rgba(255, 255, 255, 0.1);
width: 100%;
height: 160px;
min-height: 160px;
max-height: 160px;
display: flex;
flex-direction: column;
justify-content: center;
align-items: center;
}
.beatport-release-card::before {
content: '';
position: absolute;
top: 0;
left: 0;
right: 0;
bottom: 0;
background: var(--card-bg-image, none);
background-size: cover;
background-position: center;
opacity: 0.15;
border-radius: 12px;
z-index: 0;
}
.beatport-release-card:hover {
transform: translateY(-2px) scale(1.05);
background: linear-gradient(145deg,
rgba(29, 185, 84, 0.15),
rgba(40, 40, 40, 0.95));
border-color: rgba(29, 185, 84, 0.4);
box-shadow:
0 8px 24px rgba(0, 0, 0, 0.4),
0 0 16px rgba(29, 185, 84, 0.3),
inset 0 1px 0 rgba(255, 255, 255, 0.15);
z-index: 10;
}
.beatport-release-card-content {
position: relative;
z-index: 1;
text-align: center;
}
.beatport-release-artwork {
width: 80px;
height: 80px;
border-radius: 8px;
margin: 0 auto 12px auto;
background: linear-gradient(135deg, #333, #555);
border: 2px solid rgba(255, 255, 255, 0.1);
overflow: hidden;
position: relative;
}
.beatport-release-artwork img {
width: 100%;
height: 100%;
object-fit: cover;
transition: transform 0.3s ease;
}
.beatport-release-card:hover .beatport-release-artwork img {
transform: scale(1.1);
}
.beatport-release-info {
text-align: center;
}
.beatport-release-title {
font-size: 11px;
font-weight: 600;
color: #ffffff;
margin-bottom: 4px;
line-height: 1.2;
overflow: hidden;
text-overflow: ellipsis;
white-space: nowrap;
}
.beatport-release-artist {
font-size: 11px;
color: rgba(255, 255, 255, 0.7);
margin-bottom: 4px;
overflow: hidden;
text-overflow: ellipsis;
white-space: nowrap;
}
.beatport-release-label {
font-size: 10px;
color: rgba(29, 185, 84, 0.8);
font-weight: 500;
overflow: hidden;
text-overflow: ellipsis;
white-space: nowrap;
}
/* Placeholder Card Styling */
.beatport-release-placeholder {
opacity: 0.3;
cursor: default;
pointer-events: none;
}
.beatport-release-placeholder .placeholder-icon {
font-size: 32px;
display: flex;
align-items: center;
justify-content: center;
height: 100%;
color: rgba(255, 255, 255, 0.5);
}
.beatport-release-placeholder:hover {
transform: none;
background: linear-gradient(145deg,
rgba(40, 40, 40, 0.9),
rgba(28, 28, 28, 0.95));
}
/* Navigation Buttons */
.beatport-releases-slider-nav {
position: absolute;
top: 50%;
width: 100%;
display: flex;
justify-content: space-between;
transform: translateY(-50%);
pointer-events: none;
z-index: 10;
}
.beatport-releases-nav-btn {
pointer-events: all;
background: linear-gradient(135deg,
rgba(29, 185, 84, 0.9),
rgba(30, 215, 96, 0.8));
border: none;
border-radius: 50%;
width: 50px;
height: 50px;
color: white;
font-size: 24px;
font-weight: bold;
cursor: pointer;
display: flex;
align-items: center;
justify-content: center;
backdrop-filter: blur(10px);
box-shadow: 0 6px 20px rgba(29, 185, 84, 0.4);
transition: all 0.3s ease;
border: 2px solid rgba(255, 255, 255, 0.2);
}
.beatport-releases-nav-btn:hover {
transform: scale(1.1);
background: linear-gradient(135deg,
rgba(29, 185, 84, 1),
rgba(30, 215, 96, 0.9));
box-shadow: 0 8px 25px rgba(29, 185, 84, 0.6);
}
.beatport-releases-prev-btn {
margin-left: -25px;
}
.beatport-releases-next-btn {
margin-right: -25px;
}
/* Slider Indicators */
.beatport-releases-slider-indicators {
display: flex;
justify-content: center;
gap: 12px;
margin-top: 25px;
}
.beatport-releases-indicator {
width: 12px;
height: 12px;
border-radius: 50%;
background: rgba(255, 255, 255, 0.3);
border: 2px solid rgba(255, 255, 255, 0.1);
cursor: pointer;
transition: all 0.3s ease;
}
.beatport-releases-indicator.active {
background: linear-gradient(135deg, #1db954, #1ed760);
border-color: rgba(29, 185, 84, 0.6);
box-shadow: 0 0 15px rgba(29, 185, 84, 0.5);
transform: scale(1.2);
}
.beatport-releases-indicator:hover {
background: rgba(255, 255, 255, 0.5);
transform: scale(1.1);
}
/* Responsive Design */
@media (max-width: 1100px) {
.beatport-releases-grid {
grid-template-columns: repeat(4, 1fr);
grid-template-rows: repeat(2, 1fr);
}
}
@media (max-width: 1200px) {
.beatport-releases-grid {
grid-template-columns: repeat(3, 1fr);
grid-template-rows: repeat(2, 1fr);
gap: 16px;
}
.beatport-release-artwork {
width: 70px;
height: 70px;
}
}
@media (max-width: 900px) {
.beatport-releases-grid {
grid-template-columns: repeat(2, 1fr);
grid-template-rows: repeat(3, 1fr);
gap: 14px;
}
.beatport-releases-slider-container {
padding: 20px;
}
}
@media (max-width: 600px) {
.beatport-releases-grid {
grid-template-columns: 1fr;
grid-template-rows: repeat(5, 1fr);
gap: 12px;
}
.beatport-releases-section {
padding: 0 15px;
}
.beatport-releases-title {
font-size: 24px;
}
}
/* ==================== HYPE PICKS SLIDER STYLES ==================== */
.beatport-hype-picks-section {
margin-top: 40px;
padding: 0 20px;
}
.beatport-hype-picks-header {
text-align: center;
margin-bottom: 30px;
}
.beatport-hype-picks-title {
font-size: 32px;
font-weight: bold;
background: linear-gradient(135deg, #ff6b6b, #ff8787, #ffa8a8);
-webkit-background-clip: text;
-webkit-text-fill-color: transparent;
background-clip: text;
margin-bottom: 8px;
text-shadow: 0 2px 4px rgba(0, 0, 0, 0.3);
}
.beatport-hype-picks-subtitle {
font-size: 16px;
color: rgba(255, 255, 255, 0.7);
margin: 0;
}
.beatport-hype-picks-slider-container {
position: relative;
background: linear-gradient(135deg,
rgba(18, 18, 18, 0.95),
rgba(30, 30, 30, 0.9));
border-radius: 20px;
padding: 30px;
backdrop-filter: blur(20px);
border: 1px solid rgba(255, 255, 255, 0.1);
box-shadow:
0 20px 40px rgba(0, 0, 0, 0.5),
inset 0 1px 0 rgba(255, 255, 255, 0.1);
}
.beatport-hype-picks-slider {
position: relative;
border-radius: 16px;
}
.beatport-hype-picks-slider-track {
position: relative;
height: 425px;
}
.beatport-hype-picks-loading {
display: flex;
align-items: center;
justify-content: center;
min-height: 400px;
background: linear-gradient(135deg,
rgba(255, 107, 107, 0.1),
rgba(255, 135, 135, 0.05));
border-radius: 16px;
border: 2px dashed rgba(255, 107, 107, 0.3);
}
.beatport-hype-picks-loading-content {
text-align: center;
}
.beatport-hype-picks-loading-content h3 {
font-size: 24px;
color: #ff6b6b;
margin-bottom: 8px;
font-weight: 600;
}
.beatport-hype-picks-loading-content p {
color: rgba(255, 255, 255, 0.6);
font-size: 14px;
margin: 0;
}
/* Individual Slide (contains 10 cards in 5x2 grid) */
.beatport-hype-picks-slide {
position: absolute;
top: 0;
left: 0;
width: 100%;
height: 100%;
opacity: 0;
transition: all 0.6s cubic-bezier(0.25, 0.46, 0.45, 0.94);
transform: translateX(100px);
}
.beatport-hype-picks-slide.active {
opacity: 1;
z-index: 10;
transform: translateX(0);
}
.beatport-hype-picks-slide.prev {
transform: translateX(-100px);
}
.beatport-hype-picks-slide.next {
transform: translateX(100px);
}
.beatport-hype-picks-grid {
display: grid;
grid-template-columns: repeat(5, 1fr);
grid-template-rows: repeat(2, 1fr);
gap: 20px;
padding: 20px;
background: linear-gradient(135deg,
rgba(16, 16, 16, 0.6),
rgba(24, 24, 24, 0.4));
border-radius: 16px;
border: 1px solid rgba(255, 255, 255, 0.08);
justify-items: center;
align-items: center;
margin: 0 auto;
}
/* Hype Pick Card Styling */
.beatport-hype-pick-card {
background: linear-gradient(145deg,
rgba(40, 40, 40, 0.9),
rgba(28, 28, 28, 0.95));
border-radius: 12px;
padding: 16px;
border: 1px solid rgba(255, 255, 255, 0.1);
cursor: pointer;
transition: all 0.3s cubic-bezier(0.25, 0.46, 0.45, 0.94);
position: relative;
overflow: hidden;
backdrop-filter: blur(10px);
box-shadow:
0 4px 16px rgba(0, 0, 0, 0.3),
inset 0 1px 0 rgba(255, 255, 255, 0.1);
width: 100%;
height: 160px;
min-height: 160px;
max-height: 160px;
display: flex;
flex-direction: column;
justify-content: center;
align-items: center;
}
.beatport-hype-pick-card::before {
content: '';
position: absolute;
top: 0;
left: 0;
right: 0;
bottom: 0;
background: var(--card-bg-image, none);
background-size: cover;
background-position: center;
opacity: 0.15;
border-radius: 12px;
z-index: 0;
}
.beatport-hype-pick-card:hover {
transform: translateY(-2px) scale(1.05);
background: linear-gradient(145deg,
rgba(255, 107, 107, 0.15),
rgba(40, 40, 40, 0.95));
border-color: rgba(255, 107, 107, 0.4);
box-shadow:
0 8px 24px rgba(0, 0, 0, 0.4),
0 0 16px rgba(255, 107, 107, 0.3),
inset 0 1px 0 rgba(255, 255, 255, 0.15);
z-index: 10;
}
.beatport-hype-pick-card-content {
position: relative;
z-index: 1;
text-align: center;
}
.beatport-hype-pick-artwork {
width: 80px;
height: 80px;
border-radius: 8px;
margin: 0 auto 12px auto;
background: linear-gradient(135deg, #333, #555);
border: 2px solid rgba(255, 255, 255, 0.1);
overflow: hidden;
position: relative;
}
.beatport-hype-pick-artwork img {
width: 100%;
height: 100%;
object-fit: cover;
transition: transform 0.3s ease;
}
.beatport-hype-pick-card:hover .beatport-hype-pick-artwork img {
transform: scale(1.1);
}
.beatport-hype-pick-info {
text-align: center;
}
.beatport-hype-pick-title {
font-size: 11px;
font-weight: 600;
color: #ffffff;
margin-bottom: 4px;
line-height: 1.2;
overflow: hidden;
text-overflow: ellipsis;
white-space: nowrap;
}
.beatport-hype-pick-artist {
font-size: 11px;
color: rgba(255, 255, 255, 0.7);
margin-bottom: 4px;
overflow: hidden;
text-overflow: ellipsis;
white-space: nowrap;
}
.beatport-hype-pick-label {
font-size: 10px;
color: rgba(255, 107, 107, 0.8);
font-weight: 500;
overflow: hidden;
text-overflow: ellipsis;
white-space: nowrap;
}
/* Placeholder Card Styling */
.beatport-hype-pick-placeholder {
opacity: 0.3;
cursor: default;
pointer-events: none;
}
.beatport-hype-pick-placeholder .placeholder-icon {
font-size: 32px;
display: flex;
align-items: center;
justify-content: center;
height: 100%;
color: rgba(255, 255, 255, 0.5);
}
.beatport-hype-pick-placeholder:hover {
transform: none;
background: linear-gradient(145deg,
rgba(40, 40, 40, 0.9),
rgba(28, 28, 28, 0.95));
}
/* Navigation Buttons */
.beatport-hype-picks-slider-nav {
position: absolute;
top: 50%;
width: 100%;
display: flex;
justify-content: space-between;
transform: translateY(-50%);
pointer-events: none;
z-index: 10;
}
.beatport-hype-picks-nav-btn {
pointer-events: all;
background: linear-gradient(135deg,
rgba(255, 107, 107, 0.9),
rgba(255, 135, 135, 0.8));
border: none;
border-radius: 50%;
width: 50px;
height: 50px;
color: white;
font-size: 24px;
font-weight: bold;
cursor: pointer;
display: flex;
align-items: center;
justify-content: center;
backdrop-filter: blur(10px);
box-shadow: 0 6px 20px rgba(255, 107, 107, 0.4);
transition: all 0.3s ease;
border: 2px solid rgba(255, 255, 255, 0.2);
}
.beatport-hype-picks-nav-btn:hover {
transform: scale(1.1);
background: linear-gradient(135deg,
rgba(255, 107, 107, 1),
rgba(255, 135, 135, 0.9));
box-shadow: 0 8px 25px rgba(255, 107, 107, 0.6);
}
.beatport-hype-picks-prev-btn {
margin-left: -25px;
}
.beatport-hype-picks-next-btn {
margin-right: -25px;
}
/* Slider Indicators */
.beatport-hype-picks-slider-indicators {
display: flex;
justify-content: center;
gap: 12px;
margin-top: 25px;
}
.beatport-hype-picks-indicator {
width: 12px;
height: 12px;
border-radius: 50%;
background: rgba(255, 255, 255, 0.3);
border: 2px solid rgba(255, 255, 255, 0.1);
cursor: pointer;
transition: all 0.3s ease;
}
.beatport-hype-picks-indicator.active {
background: linear-gradient(135deg, #ff6b6b, #ff8787);
border-color: rgba(255, 107, 107, 0.6);
box-shadow: 0 0 15px rgba(255, 107, 107, 0.5);
transform: scale(1.2);
}
.beatport-hype-picks-indicator:hover {
background: rgba(255, 255, 255, 0.5);
transform: scale(1.1);
}
/* Responsive Design */
@media (max-width: 1100px) {
.beatport-hype-picks-grid {
grid-template-columns: repeat(4, 1fr);
grid-template-rows: repeat(2, 1fr);
}
}
@media (max-width: 1200px) {
.beatport-hype-picks-grid {
grid-template-columns: repeat(3, 1fr);
grid-template-rows: repeat(2, 1fr);
gap: 16px;
}
.beatport-hype-pick-artwork {
width: 70px;
height: 70px;
}
}
@media (max-width: 900px) {
.beatport-hype-picks-grid {
grid-template-columns: repeat(2, 1fr);
grid-template-rows: repeat(3, 1fr);
gap: 14px;
}
.beatport-hype-picks-slider-container {
padding: 20px;
}
}
@media (max-width: 600px) {
.beatport-hype-picks-grid {
grid-template-columns: 1fr;
grid-template-rows: repeat(5, 1fr);
gap: 12px;
}
.beatport-hype-picks-section {
padding: 0 15px;
}
.beatport-hype-picks-title {
font-size: 24px;
}
}
/* ==================== FEATURED CHARTS SLIDER STYLES ==================== */
/* Charts Section */
.beatport-charts-section {
margin-top: 40px;
padding: 0 30px;
}
.beatport-charts-header {
text-align: center;
margin-bottom: 30px;
}
.beatport-charts-title {
font-size: 32px;
font-weight: 700;
color: #ffffff;
margin-bottom: 8px;
text-shadow: 0 2px 4px rgba(0, 0, 0, 0.5);
}
.beatport-charts-subtitle {
font-size: 16px;
color: rgba(255, 255, 255, 0.8);
margin: 0;
}
/* Charts Slider Container */
.beatport-charts-slider-container {
position: relative;
background: linear-gradient(135deg,
rgba(16, 16, 16, 0.4),
rgba(24, 24, 24, 0.2));
border-radius: 20px;
border: 1px solid rgba(255, 255, 255, 0.06);
backdrop-filter: blur(15px);
min-height: 600px;
padding: 30px;
}
.beatport-charts-slider {
position: relative;
width: 100%;
height: 100%;
overflow: hidden;
border-radius: 16px;
}
.beatport-charts-slider-track {
position: relative;
height: 550px;
}
.beatport-charts-slide {
position: absolute;
top: 0;
left: 0;
width: 100%;
height: 100%;
opacity: 0;
transition: all 0.6s cubic-bezier(0.25, 0.46, 0.45, 0.94);
transform: translateX(100px);
}
.beatport-charts-slide.active {
opacity: 1;
transform: translateX(0);
z-index: 10;
}
.beatport-charts-slide.prev {
opacity: 0;
transform: translateX(-100px);
}
.beatport-charts-slide.next {
opacity: 0;
transform: translateX(100px);
}
/* Charts Grid */
.beatport-charts-grid {
display: grid;
grid-template-columns: repeat(5, 1fr);
grid-template-rows: repeat(2, 1fr);
gap: 20px;
padding: 20px;
background: linear-gradient(135deg,
rgba(16, 16, 16, 0.6),
rgba(24, 24, 24, 0.4));
border-radius: 16px;
border: 1px solid rgba(255, 255, 255, 0.08);
justify-items: center;
align-items: center;
margin: 0 auto;
}
/* Chart Card Styling - Large Background Photo Design */
.beatport-chart-card {
position: relative;
width: 100%;
height: 200px;
min-height: 200px;
max-height: 200px;
border-radius: 16px;
cursor: pointer;
transition: all 0.4s cubic-bezier(0.25, 0.46, 0.45, 0.94);
overflow: hidden;
box-shadow:
0 8px 32px rgba(0, 0, 0, 0.4),
inset 0 1px 0 rgba(255, 255, 255, 0.1);
}
.beatport-chart-card::before {
content: '';
position: absolute;
top: 0;
left: 0;
right: 0;
bottom: 0;
background: var(--chart-bg-image, linear-gradient(135deg, #1db954, #191414));
background-size: cover;
background-position: center;
border-radius: 16px;
z-index: 1;
}
.beatport-chart-card::after {
content: '';
position: absolute;
top: 0;
left: 0;
right: 0;
bottom: 0;
background: linear-gradient(
135deg,
rgba(0, 0, 0, 0.2) 0%,
rgba(0, 0, 0, 0.4) 50%,
rgba(0, 0, 0, 0.7) 100%
);
border-radius: 16px;
z-index: 2;
}
.beatport-chart-card:hover {
transform: translateY(-12px) scale(1.08);
box-shadow:
0 25px 50px rgba(0, 0, 0, 0.7),
0 0 40px rgba(29, 185, 84, 0.5),
inset 0 1px 0 rgba(255, 255, 255, 0.3);
z-index: 20;
}
.beatport-chart-card:hover::after {
background: linear-gradient(
135deg,
rgba(29, 185, 84, 0.2) 0%,
rgba(0, 0, 0, 0.2) 50%,
rgba(0, 0, 0, 0.5) 100%
);
}
.beatport-chart-card:hover .beatport-chart-name {
color: rgba(29, 185, 84, 0.95);
text-shadow: 0 2px 12px rgba(0, 0, 0, 0.9);
transform: translateY(-2px);
}
.beatport-chart-card:hover .beatport-chart-creator {
color: #ffffff;
text-shadow: 0 1px 8px rgba(0, 0, 0, 0.9);
transform: translateY(-1px);
}
.beatport-chart-card-content {
position: absolute;
bottom: 0;
left: 0;
right: 0;
padding: 20px;
z-index: 3;
text-align: left;
}
.beatport-chart-name {
font-size: 15px;
font-weight: 700;
color: #ffffff;
margin-bottom: 8px;
line-height: 1.2;
text-shadow: 0 2px 8px rgba(0, 0, 0, 0.8);
overflow: hidden;
text-overflow: ellipsis;
white-space: nowrap;
transition: all 0.4s cubic-bezier(0.25, 0.46, 0.45, 0.94);
}
.beatport-chart-creator {
font-size: 12px;
color: rgba(255, 255, 255, 0.9);
font-weight: 500;
text-shadow: 0 1px 4px rgba(0, 0, 0, 0.8);
overflow: hidden;
text-overflow: ellipsis;
white-space: nowrap;
transition: all 0.4s cubic-bezier(0.25, 0.46, 0.45, 0.94);
}
/* Charts Loading State */
.beatport-charts-loading {
display: flex;
align-items: center;
justify-content: center;
height: 500px;
background: linear-gradient(135deg,
rgba(29, 185, 84, 0.1),
rgba(16, 16, 16, 0.8));
border-radius: 16px;
border: 1px solid rgba(29, 185, 84, 0.2);
}
.beatport-charts-loading-content {
text-align: center;
color: #ffffff;
}
.beatport-charts-loading-content h3 {
font-size: 24px;
margin-bottom: 8px;
color: rgba(29, 185, 84, 0.9);
}
.beatport-charts-loading-content p {
font-size: 16px;
color: rgba(255, 255, 255, 0.7);
margin: 0;
}
/* Charts Navigation */
.beatport-charts-slider-nav {
position: absolute;
top: 50%;
left: 0;
right: 0;
transform: translateY(-50%);
display: flex;
justify-content: space-between;
padding: 0 20px;
pointer-events: none;
z-index: 100;
}
.beatport-charts-nav-btn {
background: linear-gradient(135deg,
rgba(29, 185, 84, 0.9),
rgba(29, 185, 84, 0.7));
border: none;
color: #ffffff;
font-size: 24px;
font-weight: 600;
width: 50px;
height: 50px;
border-radius: 50%;
cursor: pointer;
transition: all 0.3s cubic-bezier(0.25, 0.46, 0.45, 0.94);
backdrop-filter: blur(10px);
border: 2px solid rgba(255, 255, 255, 0.2);
box-shadow:
0 4px 16px rgba(0, 0, 0, 0.3),
inset 0 1px 0 rgba(255, 255, 255, 0.2);
pointer-events: auto;
display: flex;
align-items: center;
justify-content: center;
}
.beatport-charts-nav-btn:hover {
background: linear-gradient(135deg,
rgba(29, 185, 84, 1),
rgba(24, 160, 72, 0.9));
transform: scale(1.1);
box-shadow:
0 8px 24px rgba(0, 0, 0, 0.4),
0 0 20px rgba(29, 185, 84, 0.5),
inset 0 1px 0 rgba(255, 255, 255, 0.3);
}
.beatport-charts-nav-btn:active {
transform: scale(0.95);
}
/* Charts Indicators */
.beatport-charts-slider-indicators {
position: absolute;
bottom: 20px;
left: 50%;
transform: translateX(-50%);
display: flex;
gap: 12px;
z-index: 10;
}
.beatport-charts-indicator {
width: 12px;
height: 12px;
border-radius: 50%;
background: rgba(255, 255, 255, 0.4);
border: none;
cursor: pointer;
transition: all 0.3s ease;
}
.beatport-charts-indicator.active {
background: rgba(29, 185, 84, 0.9);
transform: scale(1.2);
box-shadow: 0 0 10px rgba(29, 185, 84, 0.5);
}
.beatport-charts-indicator:hover {
background: rgba(255, 255, 255, 0.6);
transform: scale(1.1);
}
/* Charts Responsive Design */
@media (max-width: 1100px) {
.beatport-charts-grid {
grid-template-columns: repeat(4, 1fr);
grid-template-rows: repeat(2, 1fr);
}
}
@media (max-width: 1200px) {
.beatport-charts-grid {
grid-template-columns: repeat(3, 1fr);
grid-template-rows: repeat(2, 1fr);
gap: 16px;
}
.beatport-chart-card {
height: 180px;
min-height: 180px;
max-height: 180px;
}
}
@media (max-width: 900px) {
.beatport-charts-grid {
grid-template-columns: repeat(2, 1fr);
grid-template-rows: repeat(3, 1fr);
gap: 14px;
}
.beatport-charts-slider-container {
padding: 20px;
}
}
@media (max-width: 600px) {
.beatport-charts-grid {
grid-template-columns: 1fr;
grid-template-rows: repeat(5, 1fr);
gap: 12px;
}
.beatport-charts-section {
padding: 0 15px;
}
.beatport-charts-title {
font-size: 24px;
}
}
/* ==================== DJ CHARTS SLIDER STYLES ==================== */
/* DJ Section */
.beatport-dj-section {
margin-top: 40px;
padding: 0 30px;
}
.beatport-dj-header {
text-align: center;
margin-bottom: 30px;
}
.beatport-dj-title {
font-size: 32px;
font-weight: 700;
color: #ffffff;
margin-bottom: 8px;
text-shadow: 0 2px 4px rgba(0, 0, 0, 0.5);
}
.beatport-dj-subtitle {
font-size: 16px;
color: rgba(255, 255, 255, 0.8);
margin: 0;
}
/* DJ Slider Container */
.beatport-dj-slider-container {
position: relative;
background: linear-gradient(135deg,
rgba(147, 51, 234, 0.1),
rgba(79, 70, 229, 0.05));
border-radius: 20px;
border: 1px solid rgba(147, 51, 234, 0.2);
backdrop-filter: blur(15px);
min-height: 300px;
padding: 30px;
}
.beatport-dj-slider {
position: relative;
width: 100%;
height: 100%;
overflow: hidden;
border-radius: 16px;
}
.beatport-dj-slider-track {
position: relative;
height: 300px;
}
.beatport-dj-slide {
position: absolute;
top: 0;
left: 0;
width: 100%;
height: 100%;
opacity: 0;
transition: all 0.6s cubic-bezier(0.25, 0.46, 0.45, 0.94);
transform: translateX(100px);
}
.beatport-dj-slide.active {
opacity: 1;
z-index: 10;
transform: translateX(0);
}
.beatport-dj-slide.prev {
opacity: 0;
transform: translateX(-100px);
}
.beatport-dj-slide.next {
opacity: 0;
transform: translateX(100px);
}
/* DJ Cards Layout - 3 cards per slide */
.beatport-dj-grid {
display: grid;
grid-template-columns: repeat(3, 1fr);
gap: 25px;
padding: 20px;
background: linear-gradient(135deg,
rgba(16, 16, 16, 0.6),
rgba(24, 24, 24, 0.4));
border-radius: 16px;
border: 1px solid rgba(147, 51, 234, 0.15);
justify-items: center;
align-items: center;
margin: 0 auto;
}
/* DJ Chart Card Styling - Unique vertical design */
.beatport-dj-card {
position: relative;
width: 100%;
height: 220px;
min-height: 220px;
max-height: 220px;
border-radius: 20px;
cursor: pointer;
transition: all 0.4s cubic-bezier(0.25, 0.46, 0.45, 0.94);
overflow: hidden;
background: linear-gradient(135deg,
rgba(147, 51, 234, 0.8),
rgba(79, 70, 229, 0.6));
box-shadow:
0 8px 32px rgba(0, 0, 0, 0.4),
inset 0 1px 0 rgba(255, 255, 255, 0.1);
}
.beatport-dj-card::before {
content: '';
position: absolute;
top: 0;
left: 0;
right: 0;
bottom: 0;
background: var(--dj-bg-image, linear-gradient(135deg, #9333ea, #4f46e5));
background-size: cover;
background-position: center;
border-radius: 20px;
z-index: 1;
}
.beatport-dj-card::after {
content: '';
position: absolute;
top: 0;
left: 0;
right: 0;
bottom: 0;
background: linear-gradient(
180deg,
rgba(147, 51, 234, 0.3) 0%,
rgba(0, 0, 0, 0.4) 50%,
rgba(0, 0, 0, 0.8) 100%
);
border-radius: 20px;
z-index: 2;
}
.beatport-dj-card:hover {
transform: translateY(-15px) scale(1.1);
box-shadow:
0 30px 60px rgba(0, 0, 0, 0.8),
0 0 50px rgba(147, 51, 234, 0.6),
inset 0 1px 0 rgba(255, 255, 255, 0.3);
z-index: 25;
}
.beatport-dj-card:hover::after {
background: linear-gradient(
180deg,
rgba(147, 51, 234, 0.4) 0%,
rgba(0, 0, 0, 0.2) 50%,
rgba(0, 0, 0, 0.6) 100%
);
}
.beatport-dj-card:hover .beatport-dj-name {
color: rgba(147, 51, 234, 0.95);
text-shadow: 0 2px 15px rgba(0, 0, 0, 0.9);
transform: translateY(-3px);
}
.beatport-dj-card:hover .beatport-dj-creator {
color: #ffffff;
text-shadow: 0 1px 10px rgba(0, 0, 0, 0.9);
transform: translateY(-2px);
}
.beatport-dj-card-content {
position: absolute;
bottom: 0;
left: 0;
right: 0;
padding: 25px;
z-index: 3;
text-align: center;
}
.beatport-dj-name {
font-size: 20px;
font-weight: 700;
color: #ffffff;
margin-bottom: 10px;
line-height: 1.2;
text-shadow: 0 2px 10px rgba(0, 0, 0, 0.8);
overflow: hidden;
text-overflow: ellipsis;
white-space: nowrap;
transition: all 0.4s cubic-bezier(0.25, 0.46, 0.45, 0.94);
}
.beatport-dj-creator {
display: none;
font-size: 16px;
color: rgba(255, 255, 255, 0.9);
font-weight: 500;
text-shadow: 0 1px 6px rgba(0, 0, 0, 0.8);
overflow: hidden;
text-overflow: ellipsis;
white-space: nowrap;
transition: all 0.4s cubic-bezier(0.25, 0.46, 0.45, 0.94);
}
/* DJ Loading State */
.beatport-dj-loading {
display: flex;
align-items: center;
justify-content: center;
height: 300px;
background: linear-gradient(135deg,
rgba(147, 51, 234, 0.1),
rgba(16, 16, 16, 0.8));
border-radius: 16px;
border: 1px solid rgba(147, 51, 234, 0.2);
}
.beatport-dj-loading-content {
text-align: center;
color: #ffffff;
}
.beatport-dj-loading-content h3 {
font-size: 24px;
margin-bottom: 8px;
color: rgba(147, 51, 234, 0.9);
}
.beatport-dj-loading-content p {
font-size: 16px;
color: rgba(255, 255, 255, 0.7);
margin: 0;
}
/* DJ Navigation */
.beatport-dj-slider-nav {
position: absolute;
top: 50%;
left: 0;
right: 0;
transform: translateY(-50%);
display: flex;
justify-content: space-between;
padding: 0 20px;
pointer-events: none;
z-index: 100;
}
.beatport-dj-nav-btn {
background: linear-gradient(135deg,
rgba(147, 51, 234, 0.9),
rgba(79, 70, 229, 0.8));
border: none;
color: #ffffff;
font-size: 24px;
font-weight: 600;
width: 50px;
height: 50px;
border-radius: 50%;
cursor: pointer;
transition: all 0.3s cubic-bezier(0.25, 0.46, 0.45, 0.94);
backdrop-filter: blur(10px);
border: 2px solid rgba(255, 255, 255, 0.2);
box-shadow:
0 4px 16px rgba(0, 0, 0, 0.3),
inset 0 1px 0 rgba(255, 255, 255, 0.2);
pointer-events: auto;
display: flex;
align-items: center;
justify-content: center;
}
.beatport-dj-nav-btn:hover {
background: linear-gradient(135deg,
rgba(147, 51, 234, 1),
rgba(79, 70, 229, 0.9));
transform: scale(1.1);
box-shadow:
0 8px 24px rgba(0, 0, 0, 0.4),
0 0 20px rgba(147, 51, 234, 0.5),
inset 0 1px 0 rgba(255, 255, 255, 0.3);
}
.beatport-dj-nav-btn:active {
transform: scale(0.95);
}
/* DJ Indicators */
.beatport-dj-slider-indicators {
position: absolute;
bottom: 20px;
left: 50%;
transform: translateX(-50%);
display: flex;
gap: 8px;
z-index: 10;
}
.beatport-dj-indicator {
width: 12px;
height: 12px;
border-radius: 50%;
background: rgba(255, 255, 255, 0.4);
border: none;
cursor: pointer;
transition: all 0.3s ease;
}
.beatport-dj-indicator.active {
background: rgba(147, 51, 234, 0.9);
transform: scale(1.2);
box-shadow: 0 0 10px rgba(147, 51, 234, 0.5);
}
.beatport-dj-indicator:hover {
background: rgba(255, 255, 255, 0.6);
transform: scale(1.1);
}
/* DJ Responsive Design */
/* Larger screens: make DJ cards taller */
@media (min-width: 1300px) {
.beatport-dj-card {
height: 330px;
min-height: 330px;
max-height: 330px;
}
.beatport-dj-grid {
align-items: stretch; /* Allow cards to use full height instead of centering */
min-height: 370px; /* Accommodate taller cards + padding + gap */
}
.beatport-dj-slider {
min-height: 410px; /* Ensure slider container is tall enough */
}
.beatport-dj-slider-track {
height: 410px; /* Increase to accommodate taller grid */
}
}
@media (max-width: 1200px) {
.beatport-dj-grid {
grid-template-columns: repeat(2, 1fr);
gap: 20px;
}
.beatport-dj-card {
height: 200px;
min-height: 200px;
max-height: 200px;
}
}
@media (max-width: 900px) {
.beatport-dj-grid {
grid-template-columns: 1fr;
gap: 16px;
}
.beatport-dj-slider-container {
padding: 20px;
}
.beatport-dj-card {
height: 180px;
min-height: 180px;
max-height: 180px;
}
}
@media (max-width: 600px) {
.beatport-dj-section {
padding: 0 15px;
}
.beatport-dj-title {
font-size: 24px;
}
}
/* ======================================
BEATPORT NAVIGATION BUTTONS SECTION
====================================== */
.beatport-nav-buttons-section {
padding: 30px 20px;
margin-bottom: 20px;
}
.beatport-nav-buttons-container {
display: flex;
gap: 20px;
justify-content: center;
align-items: center;
max-width: 900px;
margin: 0 auto;
}
.beatport-nav-button {
flex: 1;
max-width: 280px;
min-height: 70px;
padding: 16px 24px;
border: none;
border-radius: 12px;
background: linear-gradient(135deg,
rgba(1, 255, 149, 0.1) 0%,
rgba(0, 224, 133, 0.08) 100%);
backdrop-filter: blur(10px);
border: 1px solid rgba(255, 20, 147, 0.4);
color: #ffffff;
font-family: inherit;
font-size: 15px;
font-weight: 600;
cursor: pointer;
transition: all 0.3s ease;
display: flex;
align-items: center;
justify-content: center;
gap: 12px;
position: relative;
overflow: hidden;
}
.beatport-nav-button::before {
content: '';
position: absolute;
top: 0;
left: -100%;
width: 100%;
height: 100%;
background: linear-gradient(90deg,
transparent,
rgba(1, 255, 149, 0.1),
transparent);
transition: left 0.5s ease;
}
.beatport-nav-button:hover {
background: linear-gradient(135deg,
rgba(1, 255, 149, 0.2) 0%,
rgba(0, 224, 133, 0.15) 100%);
border-color: rgba(255, 20, 147, 0.6);
transform: translateY(-2px);
box-shadow: 0 8px 25px rgba(138, 43, 226, 0.3);
color: #01FF95;
}
.beatport-nav-button:hover::before {
left: 100%;
}
.beatport-nav-button:active {
transform: translateY(0);
transition: transform 0.1s ease;
}
.beatport-nav-icon {
width: 20px;
height: 20px;
background-size: contain;
background-repeat: no-repeat;
background-position: center;
flex-shrink: 0;
transition: all 0.3s ease;
}
.beatport-nav-text {
font-weight: 600;
white-space: nowrap;
}
/* Icons for navigation buttons */
.genre-icon {
background-image: url('data:image/svg+xml;charset=utf-8,<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="%23ffffff"><path d="M12 2l3.09 6.26L22 9.27l-5 4.87 1.18 6.88L12 17.77l-6.18 3.25L7 14.14 2 9.27l6.91-1.01L12 2z"/></svg>');
}
.top100-icon {
background-image: url('data:image/svg+xml;charset=utf-8,<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="%23ffffff"><path d="M16 6l2.29 2.29-4.88 4.88-4-4L2 16.59 3.41 18l6-6 4 4 6.3-6.29L22 12V6z"/></svg>');
}
.hype-icon {
background-image: url('data:image/svg+xml;charset=utf-8,<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="%23ffffff"><path d="M13.5.67s.74 2.65.74 4.8c0 2.06-1.35 3.73-3.41 3.73-2.07 0-3.63-1.67-3.63-3.73l.03-.36C5.21 7.51 4 10.62 4 14c0 4.42 3.58 8 8 8s8-3.58 8-8C20 8.61 17.41 3.8 13.5.67zM11.71 19c-1.78 0-3.22-1.4-3.22-3.14 0-1.62 1.05-2.76 2.81-3.12 1.77-.36 3.6-1.21 4.62-2.58.39 1.29.59 2.65.59 4.04 0 2.65-2.15 4.8-4.8 4.8z"/></svg>');
}
.beatport-nav-button:hover .genre-icon {
background-image: url('data:image/svg+xml;charset=utf-8,<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="%2301FF95"><path d="M12 2l3.09 6.26L22 9.27l-5 4.87 1.18 6.88L12 17.77l-6.18 3.25L7 14.14 2 9.27l6.91-1.01L12 2z"/></svg>');
}
.beatport-nav-button:hover .top100-icon {
background-image: url('data:image/svg+xml;charset=utf-8,<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="%2301FF95"><path d="M16 6l2.29 2.29-4.88 4.88-4-4L2 16.59 3.41 18l6-6 4 4 6.3-6.29L22 12V6z"/></svg>');
}
.beatport-nav-button:hover .hype-icon {
background-image: url('data:image/svg+xml;charset=utf-8,<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="%2301FF95"><path d="M13.5.67s.74 2.65.74 4.8c0 2.06-1.35 3.73-3.41 3.73-2.07 0-3.63-1.67-3.63-3.73l.03-.36C5.21 7.51 4 10.62 4 14c0 4.42 3.58 8 8 8s8-3.58 8-8C20 8.61 17.41 3.8 13.5.67zM11.71 19c-1.78 0-3.22-1.4-3.22-3.14 0-1.62 1.05-2.76 2.81-3.12 1.77-.36 3.6-1.21 4.62-2.58.39 1.29.59 2.65.59 4.04 0 2.65-2.15 4.8-4.8 4.8z"/></svg>');
}
/* Responsive design for navigation buttons */
@media (max-width: 768px) {
.beatport-nav-buttons-container {
flex-direction: column;
gap: 15px;
}
.beatport-nav-button {
max-width: none;
width: 100%;
}
}
@media (max-width: 600px) {
.beatport-nav-buttons-section {
padding: 20px 15px;
}
.beatport-nav-button {
min-height: 60px;
padding: 12px 20px;
font-size: 14px;
}
.beatport-nav-icon {
width: 18px;
height: 18px;
}
}
/* ================================= */
/* GENRE BROWSER MODAL STYLES */
/* ================================= */
.genre-browser-modal-overlay {
position: fixed;
top: 0;
left: 0;
width: 100%;
height: 100%;
background: rgba(0, 0, 0, 0.85);
backdrop-filter: blur(10px);
display: none;
justify-content: center;
align-items: center;
z-index: 8888;
animation: genreBrowserFadeIn 0.3s ease-out;
}
.genre-browser-modal-overlay.active {
display: flex;
}
.genre-browser-modal-container {
background: linear-gradient(135deg,
rgba(15, 15, 15, 0.95) 0%,
rgba(20, 20, 20, 0.95) 50%,
rgba(25, 25, 25, 0.95) 100%);
border-radius: 20px;
box-shadow: 0 20px 60px rgba(0, 0, 0, 0.8);
width: 95vw;
height: 90vh;
max-width: 1600px;
display: flex;
flex-direction: column;
overflow: hidden;
border: 1px solid rgba(255, 255, 255, 0.1);
animation: genreBrowserSlideIn 0.4s ease-out;
}
.genre-browser-modal-header {
display: flex;
justify-content: space-between;
align-items: center;
padding: 25px 30px;
border-bottom: 1px solid rgba(255, 255, 255, 0.1);
background: linear-gradient(90deg,
rgba(30, 30, 30, 0.8) 0%,
rgba(40, 40, 40, 0.8) 100%);
}
.genre-browser-modal-title {
font-size: 28px;
font-weight: 700;
color: #ffffff;
margin: 0;
text-shadow: 0 2px 4px rgba(0, 0, 0, 0.5);
}
.genre-browser-modal-close {
background: rgba(255, 255, 255, 0.1);
border: none;
border-radius: 50%;
width: 40px;
height: 40px;
display: flex;
align-items: center;
justify-content: center;
cursor: pointer;
transition: all 0.3s ease;
backdrop-filter: blur(10px);
}
.genre-browser-modal-close:hover {
background: rgba(255, 255, 255, 0.2);
transform: scale(1.1);
}
.genre-browser-close-icon {
font-size: 24px;
color: #ffffff;
font-weight: 300;
}
.genre-browser-modal-content {
flex: 1;
padding: 30px;
overflow-y: auto;
display: flex;
flex-direction: column;
gap: 25px;
}
.genre-browser-search-section {
width: 100%;
}
.genre-browser-search-container {
position: relative;
max-width: 500px;
margin: 0 auto;
}
.genre-browser-search-input {
width: 100%;
padding: 15px 20px 15px 50px;
border: 2px solid rgba(255, 255, 255, 0.1);
border-radius: 25px;
background: rgba(20, 20, 20, 0.8);
color: #ffffff;
font-size: 16px;
outline: none;
transition: all 0.3s ease;
backdrop-filter: blur(10px);
}
.genre-browser-search-input:focus {
border-color: #1db954;
box-shadow: 0 0 20px rgba(29, 185, 84, 0.3);
}
.genre-browser-search-input::placeholder {
color: rgba(255, 255, 255, 0.5);
}
.genre-browser-search-icon {
position: absolute;
left: 18px;
top: 50%;
transform: translateY(-50%);
font-size: 18px;
color: rgba(255, 255, 255, 0.6);
}
.genre-browser-genres-section {
flex: 1;
}
.genre-browser-genres-grid {
display: grid;
grid-template-columns: repeat(auto-fill, minmax(280px, 1fr));
gap: 20px;
padding: 10px 0;
}
.genre-browser-loading-container {
grid-column: 1 / -1;
display: flex;
flex-direction: column;
align-items: center;
justify-content: center;
padding: 60px 20px;
color: rgba(255, 255, 255, 0.7);
}
.genre-browser-loading-spinner {
width: 40px;
height: 40px;
border: 3px solid rgba(255, 255, 255, 0.1);
border-top: 3px solid #1db954;
border-radius: 50%;
animation: genreBrowserSpin 1s linear infinite;
margin-bottom: 20px;
}
.genre-browser-loading-text {
font-size: 16px;
text-align: center;
margin: 0;
}
.genre-browser-card {
background: linear-gradient(135deg,
rgba(25, 25, 25, 0.9) 0%,
rgba(35, 35, 35, 0.9) 100%);
border-radius: 16px;
overflow: hidden;
border: 1px solid rgba(255, 255, 255, 0.1);
transition: all 0.3s ease;
cursor: pointer;
position: relative;
height: 200px;
backdrop-filter: blur(10px);
}
.genre-browser-card:hover {
transform: translateY(-5px);
box-shadow: 0 15px 40px rgba(0, 0, 0, 0.6);
border-color: rgba(29, 185, 84, 0.5);
}
.genre-browser-card-image {
width: 100%;
height: 120px;
object-fit: cover;
transition: all 0.3s ease;
}
.genre-browser-card:hover .genre-browser-card-image {
transform: scale(1.05);
}
.genre-browser-card-content {
padding: 20px;
position: relative;
z-index: 2;
}
.genre-browser-card-title {
font-size: 18px;
font-weight: 600;
color: #ffffff;
margin: 0 0 8px 0;
text-shadow: 0 2px 4px rgba(0, 0, 0, 0.7);
}
.genre-browser-card-subtitle {
font-size: 14px;
color: rgba(255, 255, 255, 0.7);
margin: 0;
}
.genre-browser-card-fallback {
background: linear-gradient(135deg,
rgba(30, 30, 30, 0.9) 0%,
rgba(45, 45, 45, 0.9) 100%);
}
.genre-browser-card-fallback .genre-browser-card-image {
background: linear-gradient(135deg,
rgba(40, 40, 40, 1) 0%,
rgba(60, 60, 60, 1) 100%);
display: flex;
align-items: center;
justify-content: center;
font-size: 48px;
color: rgba(255, 255, 255, 0.6);
}
/* Responsive Design */
@media (max-width: 768px) {
.genre-browser-modal-container {
width: 95vw;
height: 90vh;
border-radius: 15px;
}
.genre-browser-modal-header {
padding: 20px;
}
.genre-browser-modal-title {
font-size: 22px;
}
.genre-browser-modal-content {
padding: 20px;
gap: 20px;
}
.genre-browser-genres-grid {
grid-template-columns: repeat(auto-fill, minmax(250px, 1fr));
gap: 15px;
}
.genre-browser-card {
height: 180px;
}
}
@media (max-width: 480px) {
.genre-browser-genres-grid {
grid-template-columns: 1fr;
gap: 12px;
}
.genre-browser-card {
height: 160px;
}
}
/* Animations */
@keyframes genreBrowserFadeIn {
from {
opacity: 0;
}
to {
opacity: 1;
}
}
@keyframes genreBrowserSlideIn {
from {
opacity: 0;
transform: scale(0.9) translateY(20px);
}
to {
opacity: 1;
transform: scale(1) translateY(0);
}
}
@keyframes genreBrowserSpin {
0% {
transform: rotate(0deg);
}
100% {
transform: rotate(360deg);
}
}
/* === GENRE PAGE VIEW STYLES === */
.genre-page-content {
display: none;
width: 100%;
height: 100%;
animation: genreBrowserSlideIn 0.3s ease;
}
.genre-page-header {
display: flex;
align-items: center;
gap: 15px;
margin-bottom: 25px;
padding-bottom: 15px;
border-bottom: 1px solid rgba(255, 255, 255, 0.1);
}
.genre-back-button {
display: flex;
align-items: center;
gap: 8px;
padding: 8px 16px;
background: linear-gradient(135deg,
rgba(30, 30, 30, 0.8) 0%,
rgba(20, 20, 20, 0.9) 100%);
border: 1px solid rgba(255, 255, 255, 0.15);
border-radius: 10px;
color: rgba(255, 255, 255, 0.9);
font-size: 14px;
cursor: pointer;
transition: all 0.2s ease;
}
.genre-back-button:hover {
background: linear-gradient(135deg,
rgba(40, 40, 40, 0.9) 0%,
rgba(30, 30, 30, 0.95) 100%);
border-color: rgba(255, 255, 255, 0.25);
transform: translateX(-2px);
}
.back-icon {
font-size: 16px;
transition: transform 0.2s ease;
}
.genre-back-button:hover .back-icon {
transform: translateX(-2px);
}
.genre-page-title {
font-size: 24px;
font-weight: 600;
color: #ffffff;
margin: 0;
}
.genre-hero-slider-container {
width: 100%;
height: fit-content;
overflow-y: auto;
}
.genre-loading-container {
display: flex;
flex-direction: column;
align-items: center;
justify-content: center;
padding: 60px 20px;
color: rgba(255, 255, 255, 0.7);
}
.genre-loading-spinner {
width: 40px;
height: 40px;
border: 3px solid rgba(255, 255, 255, 0.1);
border-top: 3px solid #1db954;
border-radius: 50%;
animation: genreBrowserSpin 1s linear infinite;
margin-bottom: 15px;
}
.genre-loading-text {
font-size: 16px;
margin: 0;
text-align: center;
}
.genre-error-container {
display: flex;
flex-direction: column;
align-items: center;
justify-content: center;
padding: 60px 20px;
text-align: center;
}
.genre-error-text {
font-size: 18px;
color: #ff6b6b;
margin: 0 0 10px 0;
}
.genre-error-details {
font-size: 14px;
color: rgba(255, 255, 255, 0.6);
margin: 0 0 20px 0;
}
.genre-retry-button {
padding: 10px 20px;
background: linear-gradient(135deg,
rgba(30, 30, 30, 0.8) 0%,
rgba(20, 20, 20, 0.9) 100%);
border: 1px solid rgba(255, 255, 255, 0.15);
border-radius: 10px;
color: rgba(255, 255, 255, 0.9);
font-size: 14px;
cursor: pointer;
transition: all 0.2s ease;
}
.genre-retry-button:hover {
background: linear-gradient(135deg,
rgba(40, 40, 40, 0.9) 0%,
rgba(30, 30, 30, 0.95) 100%);
border-color: rgba(255, 255, 255, 0.25);
}
/* === GENRE NAV BUTTONS SECTION === */
.genre-nav-buttons-section {
margin-top: 30px;
padding: 20px 0;
border-top: 1px solid rgba(255, 255, 255, 0.1);
}
.genre-nav-buttons-container {
display: flex;
justify-content: center;
align-items: center;
gap: 20px;
}
/* The button styles are already defined in the main .beatport-nav-button class */
/* This ensures the genre page button looks identical to the main page buttons */
/* Responsive adjustments for genre page */
@media (max-width: 768px) {
.genre-page-header {
flex-direction: column;
align-items: flex-start;
gap: 10px;
}
.genre-page-title {
font-size: 20px;
}
.genre-nav-buttons-section {
margin-top: 20px;
padding: 15px 0;
}
}
/* ============================================================================
DISCOVERY FIX MODAL STYLING
============================================================================ */
/* Fix modal overlay - nested inside discovery modal */
.discovery-fix-modal-overlay {
position: fixed;
top: 0;
left: 0;
width: 100%;
height: 100%;
background: rgba(0, 0, 0, 0.85);
backdrop-filter: blur(8px);
display: flex;
justify-content: center;
align-items: center;
z-index: 1000; /* Above parent modal content */
transition: opacity 0.2s ease;
}
.discovery-fix-modal-overlay.hidden {
display: none;
}
.discovery-fix-modal {
background: linear-gradient(135deg, rgba(20, 20, 20, 0.98) 0%, rgba(12, 12, 12, 0.99) 100%);
backdrop-filter: blur(20px);
border-radius: 16px;
padding: 0;
width: 700px;
max-width: 90vw;
max-height: 85vh;
overflow: hidden;
box-shadow: 0 8px 32px rgba(0, 0, 0, 0.6),
0 0 1px rgba(255, 255, 255, 0.1) inset;
border: 1px solid rgba(255, 255, 255, 0.1);
display: flex;
flex-direction: column;
}
.discovery-fix-modal-header {
background: linear-gradient(135deg, rgba(29, 185, 84, 0.15) 0%, rgba(29, 185, 84, 0.05) 100%);
border-bottom: 1px solid rgba(255, 255, 255, 0.1);
padding: 20px 24px;
display: flex;
justify-content: space-between;
align-items: center;
}
.discovery-fix-modal-header h2 {
font-size: 20px;
font-weight: 600;
color: rgba(255, 255, 255, 0.95);
margin: 0;
}
.discovery-fix-modal-content {
padding: 24px;
overflow-y: auto;
flex: 1;
}
.source-track-info {
background: rgba(255, 255, 255, 0.03);
border: 1px solid rgba(255, 255, 255, 0.08);
border-radius: 12px;
padding: 16px;
margin-bottom: 24px;
}
.source-track-info h3 {
font-size: 14px;
font-weight: 600;
color: rgba(255, 255, 255, 0.6);
margin-bottom: 12px;
text-transform: uppercase;
letter-spacing: 0.5px;
}
.source-track-display {
display: flex;
flex-direction: column;
gap: 8px;
}
.source-field {
display: flex;
align-items: baseline;
gap: 12px;
}
.source-field label {
font-size: 13px;
font-weight: 500;
color: rgba(255, 255, 255, 0.5);
min-width: 60px;
}
.source-field span {
font-size: 14px;
color: rgba(255, 255, 255, 0.9);
font-weight: 500;
}
.search-inputs-section {
margin-bottom: 24px;
}
.search-inputs-section h3 {
font-size: 14px;
font-weight: 600;
color: rgba(255, 255, 255, 0.6);
margin-bottom: 12px;
text-transform: uppercase;
letter-spacing: 0.5px;
}
.search-input-group {
display: flex;
gap: 12px;
align-items: stretch;
}
.fix-modal-input {
flex: 1;
background: rgba(255, 255, 255, 0.05);
border: 1px solid rgba(255, 255, 255, 0.1);
border-radius: 8px;
padding: 10px 14px;
color: rgba(255, 255, 255, 0.9);
font-size: 14px;
font-family: inherit;
transition: all 0.2s ease;
}
.fix-modal-input:focus {
outline: none;
background: rgba(255, 255, 255, 0.08);
border-color: rgba(29, 185, 84, 0.5);
box-shadow: 0 0 0 3px rgba(29, 185, 84, 0.1);
}
.fix-modal-input::placeholder {
color: rgba(255, 255, 255, 0.3);
}
.search-btn {
background: linear-gradient(135deg, rgba(29, 185, 84, 0.9) 0%, rgba(29, 185, 84, 0.7) 100%);
border: 1px solid rgba(29, 185, 84, 0.3);
border-radius: 8px;
padding: 10px 20px;
color: white;
font-size: 14px;
font-weight: 500;
cursor: pointer;
transition: all 0.2s ease;
white-space: nowrap;
}
.search-btn:hover {
background: linear-gradient(135deg, rgba(29, 185, 84, 1) 0%, rgba(29, 185, 84, 0.8) 100%);
transform: translateY(-1px);
box-shadow: 0 4px 12px rgba(29, 185, 84, 0.3);
}
.search-btn:active {
transform: translateY(0);
}
.search-results-section h3 {
font-size: 14px;
font-weight: 600;
color: rgba(255, 255, 255, 0.6);
margin-bottom: 12px;
text-transform: uppercase;
letter-spacing: 0.5px;
}
.fix-modal-results {
display: flex;
flex-direction: column;
gap: 8px;
max-height: 400px;
overflow-y: auto;
}
.fix-result-card {
background: rgba(255, 255, 255, 0.03);
border: 1px solid rgba(255, 255, 255, 0.08);
border-radius: 10px;
padding: 14px 16px;
cursor: pointer;
transition: all 0.2s ease;
}
.fix-result-card:hover {
background: rgba(29, 185, 84, 0.1);
border-color: rgba(29, 185, 84, 0.3);
transform: translateX(4px);
}
.fix-result-card-content {
display: flex;
flex-direction: column;
gap: 4px;
}
.fix-result-title {
font-size: 15px;
font-weight: 600;
color: rgba(255, 255, 255, 0.95);
}
.fix-result-artist {
font-size: 13px;
color: rgba(255, 255, 255, 0.7);
}
.fix-result-album {
font-size: 12px;
color: rgba(255, 255, 255, 0.5);
}
.fix-result-duration {
font-size: 12px;
color: rgba(255, 255, 255, 0.4);
margin-top: 2px;
}
.discovery-fix-modal-footer {
background: rgba(255, 255, 255, 0.02);
border-top: 1px solid rgba(255, 255, 255, 0.08);
padding: 16px 24px;
display: flex;
justify-content: flex-end;
gap: 12px;
}
.modal-btn {
padding: 10px 20px;
border-radius: 8px;
font-size: 14px;
font-weight: 500;
cursor: pointer;
transition: all 0.2s ease;
border: none;
font-family: inherit;
}
.modal-btn.secondary {
background: rgba(255, 255, 255, 0.05);
border: 1px solid rgba(255, 255, 255, 0.15);
color: rgba(255, 255, 255, 0.7);
}
.modal-btn.secondary:hover {
background: rgba(255, 255, 255, 0.08);
color: rgba(255, 255, 255, 0.9);
}
/* Action buttons in discovery table */
.discovery-actions {
text-align: center;
}
.fix-match-btn,
.rematch-btn {
background: linear-gradient(135deg, rgba(29, 185, 84, 0.2) 0%, rgba(29, 185, 84, 0.1) 100%);
border: 1px solid rgba(29, 185, 84, 0.3);
border-radius: 6px;
padding: 6px 12px;
color: rgba(29, 185, 84, 0.95);
font-size: 13px;
font-weight: 500;
cursor: pointer;
transition: all 0.2s ease;
white-space: nowrap;
}
.fix-match-btn:hover,
.rematch-btn:hover {
background: linear-gradient(135deg, rgba(29, 185, 84, 0.3) 0%, rgba(29, 185, 84, 0.2) 100%);
border-color: rgba(29, 185, 84, 0.5);
transform: translateY(-1px);
box-shadow: 0 2px 8px rgba(29, 185, 84, 0.2);
}
.fix-match-btn:active,
.rematch-btn:active {
transform: translateY(0);
}
.rematch-btn {
background: linear-gradient(135deg, rgba(255, 255, 255, 0.08) 0%, rgba(255, 255, 255, 0.04) 100%);
border-color: rgba(255, 255, 255, 0.15);
color: rgba(255, 255, 255, 0.7);
padding: 4px 10px;
font-size: 16px;
}
.rematch-btn:hover {
background: linear-gradient(135deg, rgba(255, 255, 255, 0.12) 0%, rgba(255, 255, 255, 0.08) 100%);
border-color: rgba(255, 255, 255, 0.25);
color: rgba(255, 255, 255, 0.9);
}
/* Loading and error states */
.fix-modal-results .loading,
.fix-modal-results .error-message,
.fix-modal-results .no-results {
text-align: center;
padding: 40px 20px;
color: rgba(255, 255, 255, 0.5);
font-size: 14px;
}
.fix-modal-results .error-message {
color: rgba(239, 68, 68, 0.9);
}
/* ===============================================
Similar Artists Section - Artists Page
=============================================== */
.similar-artists-section {
margin-top: 60px;
padding: 40px 0;
border-top: 1px solid rgba(255, 255, 255, 0.06);
}
.similar-artists-header {
margin-bottom: 32px;
}
.similar-artists-title {
font-size: 28px;
font-weight: 700;
color: #ffffff;
margin: 0 0 8px 0;
font-family: 'SF Pro Display', -apple-system, BlinkMacSystemFont, sans-serif;
letter-spacing: -0.5px;
}
.similar-artists-subtitle {
font-size: 15px;
color: rgba(255, 255, 255, 0.6);
margin: 0;
font-weight: 500;
font-family: 'SF Pro Text', -apple-system, BlinkMacSystemFont, sans-serif;
}
/* Loading State */
.similar-artists-loading {
display: flex;
align-items: center;
justify-content: center;
gap: 12px;
padding: 60px 20px;
color: rgba(255, 255, 255, 0.6);
font-size: 15px;
font-weight: 500;
}
.loading-spinner-small {
width: 20px;
height: 20px;
border: 2px solid rgba(255, 255, 255, 0.1);
border-top-color: #1db954;
border-radius: 50%;
animation: spin 0.8s linear infinite;
}
/* Error State */
.similar-artists-error {
display: flex;
align-items: center;
justify-content: center;
gap: 10px;
padding: 60px 20px;
color: rgba(239, 68, 68, 0.8);
font-size: 15px;
font-weight: 500;
}
.similar-artists-error .error-icon {
font-size: 20px;
}
/* Bubbles Container - Horizontal Scroll */
.similar-artists-bubbles-container {
display: grid;
grid-auto-flow: column;
grid-auto-columns: calc((100% - (5 * 24px)) / 6); /* Each item is 1/6th of container width */
gap: 24px;
overflow-x: auto;
padding: 20px 0 30px 0;
scroll-behavior: smooth;
/* Custom scrollbar */
scrollbar-width: thin;
scrollbar-color: rgba(255, 255, 255, 0.2) rgba(255, 255, 255, 0.05);
}
.similar-artists-bubbles-container::-webkit-scrollbar {
height: 8px;
}
.similar-artists-bubbles-container::-webkit-scrollbar-track {
background: rgba(255, 255, 255, 0.05);
border-radius: 10px;
}
.similar-artists-bubbles-container::-webkit-scrollbar-thumb {
background: rgba(255, 255, 255, 0.2);
border-radius: 10px;
transition: background 0.2s ease;
}
.similar-artists-bubbles-container::-webkit-scrollbar-thumb:hover {
background: rgba(255, 255, 255, 0.3);
}
/* Artist Bubble Card */
.similar-artist-bubble {
display: flex;
flex-direction: column;
align-items: center;
gap: 12px;
padding: 20px 16px;
border-radius: 16px;
cursor: pointer;
transition: all 0.3s cubic-bezier(0.4, 0, 0.2, 1);
/* Subtle background */
background: linear-gradient(135deg,
rgba(26, 26, 26, 0.6) 0%,
rgba(18, 18, 18, 0.7) 100%);
border: 1px solid rgba(255, 255, 255, 0.06);
/* Elegant shadow */
box-shadow:
0 4px 12px rgba(0, 0, 0, 0.3),
inset 0 1px 0 rgba(255, 255, 255, 0.05);
/* Progressive load animation */
opacity: 0;
transform: translateY(20px);
animation: fadeInUp 0.5s cubic-bezier(0.4, 0, 0.2, 1) forwards;
}
/* Keyframe animation for bubbles */
@keyframes fadeInUp {
from {
opacity: 0;
transform: translateY(20px);
}
to {
opacity: 1;
transform: translateY(0);
}
}
.similar-artist-bubble:hover {
transform: translateY(-6px) scale(1.02);
background: linear-gradient(135deg,
rgba(32, 32, 32, 0.8) 0%,
rgba(24, 24, 24, 0.9) 100%);
border-color: rgba(29, 185, 84, 0.3);
box-shadow:
0 8px 20px rgba(0, 0, 0, 0.4),
0 0 20px rgba(29, 185, 84, 0.15),
inset 0 1px 0 rgba(255, 255, 255, 0.08);
}
/* Circular Image Container */
.similar-artist-bubble-image {
position: relative;
width: 120px;
height: 120px;
margin: 0 auto;
border-radius: 50%;
overflow: hidden;
/* Premium border */
border: 3px solid rgba(255, 255, 255, 0.1);
box-shadow:
0 4px 15px rgba(0, 0, 0, 0.4),
inset 0 2px 4px rgba(0, 0, 0, 0.3);
transition: all 0.3s cubic-bezier(0.4, 0, 0.2, 1);
}
.similar-artist-bubble:hover .similar-artist-bubble-image {
border-color: rgba(29, 185, 84, 0.5);
box-shadow:
0 6px 20px rgba(0, 0, 0, 0.5),
0 0 25px rgba(29, 185, 84, 0.2),
inset 0 2px 4px rgba(0, 0, 0, 0.3);
transform: scale(1.05);
}
.similar-artist-bubble-image img {
width: 100%;
height: 100%;
object-fit: cover;
display: block;
}
/* Fallback for images that fail to load */
.similar-artist-bubble-image-fallback {
width: 100%;
height: 100%;
display: flex;
align-items: center;
justify-content: center;
background: linear-gradient(135deg,
rgba(29, 185, 84, 0.2) 0%,
rgba(30, 215, 96, 0.15) 100%);
font-size: 40px;
}
/* Artist Name */
.similar-artist-bubble-name {
text-align: center;
font-size: 14px;
font-weight: 600;
color: #ffffff;
line-height: 1.3;
width: 100%;
/* Truncate long names */
display: -webkit-box;
-webkit-line-clamp: 2;
-webkit-box-orient: vertical;
overflow: hidden;
text-overflow: ellipsis;
font-family: 'SF Pro Text', -apple-system, BlinkMacSystemFont, sans-serif;
}
.similar-artist-bubble:hover .similar-artist-bubble-name {
color: #1db954;
}
/* Genres (Optional - hidden by default for cleaner look) */
.similar-artist-bubble-genres {
font-size: 11px;
color: rgba(255, 255, 255, 0.5);
text-align: center;
width: 100%;
/* Truncate */
white-space: nowrap;
overflow: hidden;
text-overflow: ellipsis;
font-family: 'SF Pro Text', -apple-system, BlinkMacSystemFont, sans-serif;
}
/* Responsive adjustments */
@media (max-width: 1400px) {
.similar-artists-bubbles-container {
grid-auto-columns: calc((100% - (4 * 24px)) / 5);
}
}
@media (max-width: 1200px) {
.similar-artists-bubbles-container {
grid-auto-columns: calc((100% - (3 * 24px)) / 4);
}
}
@media (max-width: 900px) {
.similar-artists-bubbles-container {
grid-auto-columns: calc((100% - (2 * 24px)) / 3);
}
}
@media (max-width: 768px) {
.similar-artists-section {
margin-top: 40px;
padding: 30px 0;
}
.similar-artists-title {
font-size: 24px;
}
.similar-artists-bubbles-container {
grid-auto-columns: calc((100% - 16px) / 2);
gap: 16px;
}
.similar-artist-bubble {
padding: 16px 12px;
}
.similar-artist-bubble-image {
width: 100px;
height: 100px;
}
.similar-artist-bubble-name {
font-size: 13px;
}
}
/* ====================================
Tool Help Button & Modal
==================================== */
.tool-card-header {
display: flex;
justify-content: space-between;
align-items: center;
margin-bottom: 8px;
}
.tool-card-header .tool-card-title {
margin: 0;
}
.tool-help-button {
width: 24px;
height: 24px;
border-radius: 50%;
border: 2px solid #666;
background-color: transparent;
color: #666;
font-size: 14px;
font-weight: bold;
cursor: pointer;
display: flex;
align-items: center;
justify-content: center;
padding: 0;
transition: all 0.2s ease;
flex-shrink: 0;
}
.tool-help-button:hover {
background-color: #1db954;
border-color: #1db954;
color: #fff;
transform: scale(1.1);
}
.tool-help-modal {
display: none;
position: fixed;
z-index: 10000;
left: 0;
top: 0;
width: 100%;
height: 100%;
background-color: rgba(0, 0, 0, 0.6);
backdrop-filter: blur(4px);
animation: fadeIn 0.2s ease;
}
.tool-help-modal.active {
display: flex;
align-items: center;
justify-content: center;
}
.tool-help-modal-content {
background-color: #1a1a1a;
border-radius: 12px;
max-width: 600px;
width: 90%;
max-height: 80vh;
overflow-y: auto;
box-shadow: 0 10px 40px rgba(0, 0, 0, 0.5);
animation: slideUp 0.3s ease;
}
@keyframes fadeIn {
from { opacity: 0; }
to { opacity: 1; }
}
@keyframes slideUp {
from {
transform: translateY(30px);
opacity: 0;
}
to {
transform: translateY(0);
opacity: 1;
}
}
.tool-help-modal-header {
display: flex;
justify-content: space-between;
align-items: center;
padding: 20px 24px;
border-bottom: 1px solid #333;
}
.tool-help-modal-header h3 {
margin: 0;
font-size: 20px;
color: #fff;
}
.tool-help-modal-close {
background: none;
border: none;
color: #999;
font-size: 32px;
cursor: pointer;
padding: 0;
width: 32px;
height: 32px;
display: flex;
align-items: center;
justify-content: center;
transition: color 0.2s ease;
line-height: 1;
}
.tool-help-modal-close:hover {
color: #fff;
}
.tool-help-modal-body {
padding: 24px;
color: #ccc;
line-height: 1.6;
}
.tool-help-modal-body h4 {
color: #1db954;
margin-top: 20px;
margin-bottom: 10px;
font-size: 16px;
}
.tool-help-modal-body h4:first-child {
margin-top: 0;
}
.tool-help-modal-body ul {
margin: 10px 0;
padding-left: 20px;
}
.tool-help-modal-body li {
margin: 8px 0;
}
.tool-help-modal-body p {
margin: 10px 0;
}
.tool-help-modal-body code {
background-color: #2a2a2a;
padding: 2px 6px;
border-radius: 4px;
font-family: 'Courier New', monospace;
font-size: 13px;
color: #1db954;
}
.tool-help-modal-body strong {
color: #fff;
}
/* ====================================
Discover Page Styles
==================================== */
.discover-container {
width: 100%;
max-width: 1600px;
margin: 0 auto;
padding: 0;
}
/* Hero Section */
.discover-hero {
position: relative;
width: 100%;
height: 550px;
border-radius: 16px;
overflow: hidden;
margin-bottom: 40px;
box-shadow: 0 8px 32px rgba(0, 0, 0, 0.3);
}
.discover-hero-background {
position: absolute;
top: 0;
left: 0;
width: 100%;
height: 100%;
background: linear-gradient(135deg, #667eea 0%, #764ba2 100%);
background-size: cover;
background-position: center;
filter: blur(0px);
}
.discover-hero-overlay {
position: absolute;
top: 0;
left: 0;
width: 100%;
height: 100%;
background: linear-gradient(90deg, rgba(0,0,0,0.8) 0%, rgba(0,0,0,0.4) 70%, transparent 100%);
}
.discover-hero-content {
position: relative;
height: 100%;
display: flex;
align-items: center;
justify-content: space-between;
padding: 60px;
gap: 40px;
}
.discover-hero-info {
flex: 1;
max-width: 600px;
z-index: 1;
}
.discover-hero-label {
font-size: 13px;
font-weight: 700;
letter-spacing: 3px;
color: #1db954;
margin-bottom: 16px;
text-transform: uppercase;
display: inline-block;
padding: 6px 16px;
background: rgba(29, 185, 84, 0.15);
border-radius: 20px;
border: 1px solid rgba(29, 185, 84, 0.3);
}
.discover-hero-title {
font-size: 64px;
font-weight: 900;
color: #fff;
margin: 0 0 20px 0;
line-height: 1.05;
text-shadow: 0 4px 16px rgba(0,0,0,0.5);
letter-spacing: -1px;
}
.discover-hero-subtitle {
font-size: 19px;
color: rgba(255, 255, 255, 0.9);
margin-bottom: 20px;
line-height: 1.7;
font-weight: 400;
}
/* Hero Meta Section (Popularity & Genres) */
.discover-hero-meta {
margin-bottom: 28px;
}
.discover-hero-meta-content {
display: flex;
align-items: center;
gap: 20px;
flex-wrap: wrap;
}
.hero-meta-item {
display: flex;
align-items: center;
gap: 8px;
}
.hero-popularity {
padding: 8px 16px;
background: rgba(255, 255, 255, 0.1);
border-radius: 20px;
font-size: 14px;
font-weight: 600;
}
.hero-popularity.high {
background: linear-gradient(135deg, #f093fb 0%, #f5576c 100%);
}
.hero-popularity.medium {
background: linear-gradient(135deg, #667eea 0%, #764ba2 100%);
}
.hero-popularity.low {
background: linear-gradient(135deg, #4facfe 0%, #00f2fe 100%);
}
.hero-popularity .meta-icon {
font-size: 16px;
}
.hero-popularity .meta-value {
font-weight: 700;
}
.hero-popularity .meta-label {
opacity: 0.8;
font-size: 12px;
}
.hero-genres {
gap: 10px;
}
.genre-tag {
padding: 6px 14px;
background: rgba(255, 255, 255, 0.15);
border-radius: 16px;
font-size: 13px;
font-weight: 500;
color: rgba(255, 255, 255, 0.95);
backdrop-filter: blur(10px);
transition: all 0.2s ease;
}
.genre-tag:hover {
background: rgba(255, 255, 255, 0.25);
transform: translateY(-2px);
}
.discover-hero-actions {
display: flex;
gap: 16px;
align-items: center;
flex-wrap: wrap;
}
.discover-hero-button {
display: flex;
align-items: center;
gap: 10px;
padding: 16px 36px;
border: none;
border-radius: 50px;
font-size: 16px;
font-weight: 600;
cursor: pointer;
transition: all 0.3s cubic-bezier(0.4, 0, 0.2, 1);
box-shadow: 0 4px 12px rgba(0, 0, 0, 0.15);
position: relative;
overflow: hidden;
z-index: 1;
}
.discover-hero-button::before {
content: '';
position: absolute;
top: 50%;
left: 50%;
width: 0;
height: 0;
border-radius: 50%;
background: rgba(255, 255, 255, 0.2);
transform: translate(-50%, -50%);
transition: width 0.6s, height 0.6s;
}
.discover-hero-button:hover::before {
width: 300px;
height: 300px;
}
/* Discography button - prominent and large */
.discover-hero-button.secondary {
background-color: rgba(255, 255, 255, 0.12);
color: #fff;
border: 2px solid rgba(255, 255, 255, 0.25);
backdrop-filter: blur(10px);
padding: 18px 48px !important;
font-size: 17px !important;
font-weight: 700 !important;
gap: 12px !important;
}
.discover-hero-button.secondary .button-icon {
font-size: 20px !important;
}
.discover-hero-button.secondary .button-text {
font-size: 17px !important;
font-weight: 700 !important;
}
/* Watchlist button - smaller and subtle */
.discover-hero-button.primary.watchlist-toggle-btn {
background-color: #1db954;
color: #fff;
padding: 9px 16px !important;
font-size: 13px !important;
font-weight: 600 !important;
gap: 6px !important;
}
.discover-hero-button.primary.watchlist-toggle-btn .watchlist-icon {
font-size: 13px !important;
}
.discover-hero-button.primary.watchlist-toggle-btn .watchlist-text {
flex: none !important;
text-align: left !important;
font-size: 13px !important;
}
.discover-hero-button.primary.watchlist-toggle-btn:hover {
background-color: #1ed760;
transform: translateY(-2px);
box-shadow: 0 8px 20px rgba(29, 185, 84, 0.4);
}
.discover-hero-button.primary.watchlist-toggle-btn:active {
transform: translateY(0);
}
.discover-hero-button.secondary:hover {
background-color: rgba(255, 255, 255, 0.2);
border-color: rgba(255, 255, 255, 0.4);
transform: translateY(-2px);
box-shadow: 0 8px 20px rgba(255, 255, 255, 0.15);
}
.discover-hero-button.secondary:active {
transform: translateY(0);
}
.discover-hero-button.primary.watchlist-toggle-btn.watching {
background-color: rgba(29, 185, 84, 0.2) !important;
border: 2px solid rgba(29, 185, 84, 0.5) !important;
color: #1db954 !important;
}
.discover-hero-button.primary.watchlist-toggle-btn.watching:hover {
background-color: rgba(29, 185, 84, 0.3) !important;
border-color: rgba(29, 185, 84, 0.7) !important;
}
.discover-hero-image {
flex-shrink: 0;
width: 360px;
height: 360px;
border-radius: 16px;
overflow: hidden;
box-shadow: 0 24px 80px rgba(0, 0, 0, 0.6);
border: 3px solid rgba(255, 255, 255, 0.1);
transition: transform 0.3s ease;
}
.discover-hero-image:hover {
transform: scale(1.02);
}
.hero-image-placeholder {
width: 100%;
height: 100%;
display: flex;
align-items: center;
justify-content: center;
font-size: 120px;
background: linear-gradient(135deg, #667eea 0%, #764ba2 100%);
}
.discover-hero-image img {
width: 100%;
height: 100%;
object-fit: cover;
}
/* Hero Navigation Arrows - Hidden by default, show on hover */
.discover-hero-nav {
position: absolute;
top: 50%;
transform: translateY(-50%);
z-index: 10;
background: rgba(0, 0, 0, 0.5);
backdrop-filter: blur(10px);
border: 1px solid rgba(255, 255, 255, 0.1);
color: #fff;
width: 50px;
height: 50px;
border-radius: 50%;
display: flex;
align-items: center;
justify-content: center;
cursor: pointer;
transition: all 0.3s ease;
font-size: 28px;
line-height: 1;
padding: 0;
opacity: 0;
pointer-events: none;
}
.discover-hero:hover .discover-hero-nav {
opacity: 1;
pointer-events: auto;
}
.discover-hero-nav:hover {
background: rgba(0, 0, 0, 0.7);
border-color: rgba(255, 255, 255, 0.3);
transform: translateY(-50%) scale(1.1);
}
.discover-hero-nav:active {
transform: translateY(-50%) scale(0.95);
}
.discover-hero-nav-prev {
left: 20px;
}
.discover-hero-nav-next {
right: 20px;
}
/* Hero Slideshow Indicators */
.discover-hero-indicators {
position: absolute;
bottom: 24px;
left: 50%;
transform: translateX(-50%);
z-index: 10;
display: flex;
gap: 10px;
padding: 12px 20px;
background: rgba(0, 0, 0, 0.3);
backdrop-filter: blur(10px);
border-radius: 20px;
border: 1px solid rgba(255, 255, 255, 0.1);
}
.hero-indicator {
width: 8px;
height: 8px;
border-radius: 50%;
background: rgba(255, 255, 255, 0.4);
border: none;
padding: 0;
cursor: pointer;
transition: all 0.3s ease;
}
.hero-indicator:hover {
background: rgba(255, 255, 255, 0.7);
transform: scale(1.2);
}
.hero-indicator.active {
background: #1db954;
width: 24px;
border-radius: 4px;
}
/* Discover Sections */
.discover-section {
margin-bottom: 50px;
padding: 0 20px;
}
.discover-section-header {
margin-bottom: 24px;
display: flex;
justify-content: space-between;
align-items: flex-start;
gap: 20px;
}
.discover-section-title {
font-size: 28px;
font-weight: 700;
color: #fff;
margin: 0 0 8px 0;
}
.discover-section-subtitle {
font-size: 14px;
color: #999;
margin: 0;
}
.discover-section-actions {
display: flex;
gap: 10px;
flex-shrink: 0;
}
.discover-section-actions .action-button {
display: flex;
align-items: center;
gap: 6px;
padding: 8px 16px;
border-radius: 6px;
border: none;
font-size: 14px;
font-weight: 500;
cursor: pointer;
transition: all 0.2s ease;
}
.discover-section-actions .action-button .button-icon {
font-size: 16px;
}
.discover-section-actions .action-button.primary {
background: linear-gradient(135deg, #667eea 0%, #764ba2 100%);
color: #fff;
}
.discover-section-actions .action-button.primary:hover {
transform: translateY(-2px);
box-shadow: 0 4px 12px rgba(102, 126, 234, 0.4);
}
.discover-section-actions .action-button.secondary {
background: rgba(255, 255, 255, 0.05);
color: #fff;
border: 1px solid rgba(255, 255, 255, 0.1);
}
.discover-section-actions .action-button.secondary:hover {
background: rgba(255, 255, 255, 0.1);
transform: translateY(-2px);
}
/* Sync Status Display */
.discover-sync-status {
margin: 16px 20px 20px 20px;
padding: 16px 20px;
background: rgba(102, 126, 234, 0.1);
border: 1px solid rgba(102, 126, 234, 0.3);
border-radius: 8px;
animation: slideDown 0.3s ease;
}
@keyframes slideDown {
from {
opacity: 0;
transform: translateY(-10px);
}
to {
opacity: 1;
transform: translateY(0);
}
}
.sync-status-content {
display: flex;
align-items: center;
justify-content: space-between;
gap: 20px;
}
.sync-status-label {
display: flex;
align-items: center;
gap: 8px;
color: #fff;
font-size: 14px;
font-weight: 500;
}
.sync-icon {
display: inline-block;
font-size: 18px;
animation: spin 1s linear infinite;
transform-origin: center center;
}
@keyframes spin {
from {
transform: rotate(0deg);
}
to {
transform: rotate(360deg);
}
}
.sync-status-stats {
display: flex;
align-items: center;
gap: 8px;
font-size: 14px;
color: #fff;
font-family: 'Courier New', monospace;
}
.sync-stat {
font-weight: 600;
}
.sync-separator {
color: rgba(255, 255, 255, 0.3);
font-weight: 300;
}
/* Carousel Styles */
.discover-carousel {
display: flex;
gap: 20px;
overflow-x: auto;
padding-bottom: 20px;
scroll-behavior: smooth;
}
.discover-carousel::-webkit-scrollbar {
height: 8px;
}
.discover-carousel::-webkit-scrollbar-track {
background: #2a2a2a;
border-radius: 4px;
}
.discover-carousel::-webkit-scrollbar-thumb {
background: #555;
border-radius: 4px;
}
.discover-carousel::-webkit-scrollbar-thumb:hover {
background: #666;
}
/* Playlist Grid */
.discover-playlists-grid {
display: grid;
grid-template-columns: repeat(auto-fill, minmax(200px, 1fr));
gap: 20px;
}
/* Loading State */
.discover-loading {
display: flex;
flex-direction: column;
align-items: center;
justify-content: center;
padding: 60px 20px;
color: #999;
}
.discover-loading .loading-spinner {
width: 40px;
height: 40px;
border: 4px solid #333;
border-top-color: #1db954;
border-radius: 50%;
animation: spin 1s linear infinite;
margin-bottom: 16px;
}
@keyframes spin {
to { transform: rotate(360deg); }
}
.discover-loading p {
margin: 0;
font-size: 14px;
}
/* Responsive adjustments */
@media (max-width: 768px) {
.discover-hero {
height: auto;
min-height: 400px;
}
.discover-hero-content {
flex-direction: column;
padding: 40px 20px;
text-align: center;
}
.discover-hero-title {
font-size: 36px;
}
.discover-hero-image {
width: 240px;
height: 240px;
}
.discover-hero-actions {
justify-content: center;
}
.discover-section {
padding: 0 16px;
}
}
/* Discover Cards */
.discover-card {
flex-shrink: 0;
width: 200px;
background: #1a1a1a;
border-radius: 8px;
overflow: hidden;
cursor: pointer;
transition: transform 0.2s ease, box-shadow 0.2s ease;
}
.discover-card:hover {
transform: translateY(-4px);
box-shadow: 0 8px 24px rgba(0, 0, 0, 0.5);
}
.discover-card-image {
width: 100%;
height: 200px;
overflow: hidden;
}
.discover-card-image img {
width: 100%;
height: 100%;
object-fit: cover;
}
.discover-card-info {
padding: 12px;
}
.discover-card-title {
font-size: 14px;
font-weight: 600;
color: #fff;
margin: 0 0 4px 0;
overflow: hidden;
text-overflow: ellipsis;
white-space: nowrap;
}
.discover-card-subtitle {
font-size: 12px;
color: #999;
margin: 0 0 4px 0;
overflow: hidden;
text-overflow: ellipsis;
white-space: nowrap;
}
.discover-card-meta {
font-size: 11px;
color: #666;
margin: 0;
}
/* Discover Empty State */
.discover-empty {
text-align: center;
padding: 60px 20px;
color: #999;
}
/* Discover Playlist Tracks */
.discover-playlist-tracks {
background: #1a1a1a;
border-radius: 8px;
overflow: hidden;
}
.discover-playlist-track {
display: grid;
grid-template-columns: 40px 50px 1fr 2fr 80px;
gap: 16px;
align-items: center;
padding: 12px 16px;
border-bottom: 1px solid #2a2a2a;
cursor: pointer;
transition: background-color 0.2s ease;
}
.discover-playlist-track:hover {
background-color: #2a2a2a;
}
.playlist-track-number {
font-size: 14px;
color: #999;
text-align: center;
}
.playlist-track-image {
width: 50px;
height: 50px;
border-radius: 4px;
overflow: hidden;
}
.playlist-track-image img {
width: 100%;
height: 100%;
object-fit: cover;
}
.playlist-track-info {
min-width: 0;
}
.playlist-track-name {
font-size: 14px;
font-weight: 500;
color: #fff;
margin-bottom: 4px;
overflow: hidden;
text-overflow: ellipsis;
white-space: nowrap;
}
.playlist-track-artist {
font-size: 12px;
color: #999;
overflow: hidden;
text-overflow: ellipsis;
white-space: nowrap;
}
.playlist-track-album {
font-size: 12px;
color: #999;
overflow: hidden;
text-overflow: ellipsis;
white-space: nowrap;
}
.playlist-track-duration {
font-size: 12px;
color: #999;
text-align: right;
}
/* Compact Playlist Layout */
.discover-playlist-container.compact {
max-height: 500px;
overflow-y: auto;
background: #1a1a1a;
border-radius: 8px;
}
.discover-playlist-tracks-compact {
background: #1a1a1a;
border-radius: 8px;
overflow: hidden;
}
.discover-playlist-track-compact {
display: grid;
grid-template-columns: 30px 40px 1fr 1.5fr 60px;
gap: 12px;
align-items: center;
padding: 8px 12px;
border-bottom: 1px solid #2a2a2a;
cursor: pointer;
transition: background-color 0.2s ease;
}
.discover-playlist-track-compact:hover {
background-color: #2a2a2a;
}
.track-compact-number {
font-size: 13px;
color: #999;
text-align: center;
}
.track-compact-image {
width: 40px;
height: 40px;
border-radius: 4px;
overflow: hidden;
}
.track-compact-image img {
width: 100%;
height: 100%;
object-fit: cover;
}
.track-compact-info {
min-width: 0;
}
.track-compact-name {
font-size: 13px;
font-weight: 500;
color: #fff;
margin-bottom: 2px;
overflow: hidden;
text-overflow: ellipsis;
white-space: nowrap;
}
.track-compact-artist {
font-size: 11px;
color: #999;
overflow: hidden;
text-overflow: ellipsis;
white-space: nowrap;
}
.track-compact-album {
font-size: 11px;
color: #999;
overflow: hidden;
text-overflow: ellipsis;
white-space: nowrap;
}
.track-compact-duration {
font-size: 11px;
color: #999;
text-align: right;
}
/* Discover Playlist Cards */
.discover-playlist-card {
background: #1a1a1a;
border-radius: 8px;
overflow: hidden;
cursor: pointer;
transition: transform 0.2s ease, box-shadow 0.2s ease;
}
.discover-playlist-card:hover {
transform: translateY(-4px);
box-shadow: 0 8px 24px rgba(0, 0, 0, 0.5);
}
.discover-playlist-cover {
position: relative;
width: 100%;
padding-bottom: 100%;
overflow: hidden;
}
.discover-playlist-cover img {
position: absolute;
top: 0;
left: 0;
width: 100%;
height: 100%;
object-fit: cover;
}
.playlist-play-overlay {
position: absolute;
bottom: 12px;
right: 12px;
width: 48px;
height: 48px;
background-color: #1db954;
border-radius: 50%;
display: flex;
align-items: center;
justify-content: center;
font-size: 20px;
color: #fff;
opacity: 0;
transform: translateY(8px);
transition: all 0.2s ease;
}
.discover-playlist-card:hover .playlist-play-overlay {
opacity: 1;
transform: translateY(0);
}
.discover-playlist-info {
padding: 16px;
}
.discover-playlist-name {
font-size: 16px;
font-weight: 600;
color: #fff;
margin: 0 0 8px 0;
}
.discover-playlist-description {
font-size: 13px;
color: #999;
margin: 0 0 8px 0;
line-height: 1.4;
}
.discover-playlist-count {
font-size: 12px;
color: #666;
margin: 0;
}
/* ===============================
DISCOVER DOWNLOAD BAR
=============================== */
/* Fixed bottom download bar */
/* ===============================
DISCOVER DOWNLOAD SIDEBAR
Right sidebar for active downloads
=============================== */
.discover-download-sidebar {
position: fixed;
top: 0;
right: 0;
width: 140px;
height: 100vh;
background: linear-gradient(270deg,
rgba(18, 18, 18, 0.98) 0%,
rgba(12, 12, 12, 0.99) 100%);
border-left: 1px solid rgba(255, 255, 255, 0.08);
padding: 20px 12px;
z-index: 9999;
transform: translateX(0);
transition: transform 0.3s cubic-bezier(0.4, 0, 0.2, 1),
opacity 0.3s ease;
box-shadow: -4px 0 20px rgba(0, 0, 0, 0.4);
backdrop-filter: blur(20px);
opacity: 1;
display: flex;
flex-direction: column;
gap: 16px;
overflow-y: auto;
overflow-x: hidden;
}
/* Hidden state */
.discover-download-sidebar.hidden {
transform: translateX(100%);
opacity: 0;
pointer-events: none;
}
/* Sidebar header */
.discover-download-sidebar-header {
display: flex;
flex-direction: column;
align-items: center;
gap: 8px;
padding-bottom: 12px;
border-bottom: 1px solid rgba(255, 255, 255, 0.1);
}
.discover-download-sidebar-icon {
font-size: 20px;
animation: pulse 2s ease-in-out infinite;
}
@keyframes pulse {
0%, 100% { opacity: 1; transform: scale(1); }
50% { opacity: 0.7; transform: scale(1.1); }
}
.discover-download-sidebar-title {
font-size: 12px;
font-weight: 600;
color: rgba(255, 255, 255, 0.9);
font-family: 'SF Pro Display', -apple-system, BlinkMacSystemFont, sans-serif;
text-align: center;
}
.discover-download-sidebar-count {
background: linear-gradient(135deg, #1db954 0%, #1ed760 100%);
color: white;
font-size: 11px;
font-weight: 700;
padding: 2px 8px;
border-radius: 12px;
min-width: 20px;
text-align: center;
}
/* Download bubbles container */
.discover-download-bubbles {
display: flex;
flex-direction: column;
gap: 20px;
align-items: center;
}
/* Individual download bubble - 100x100px circular */
.discover-download-bubble {
display: flex;
flex-direction: column;
align-items: center;
gap: 8px;
width: 100%;
}
.discover-download-bubble-card {
position: relative;
width: 100px;
height: 100px;
border-radius: 50%;
cursor: pointer;
transition: all 0.3s cubic-bezier(0.4, 0, 0.2, 1);
flex-shrink: 0;
background: linear-gradient(135deg,
rgba(26, 26, 26, 0.95) 0%,
rgba(18, 18, 18, 0.98) 100%);
border: 2px solid rgba(29, 185, 84, 0.3);
box-shadow:
0 4px 12px rgba(0, 0, 0, 0.4),
0 0 0 1px rgba(29, 185, 84, 0.05),
inset 0 1px 0 rgba(255, 255, 255, 0.06);
overflow: hidden;
}
.discover-download-bubble-card:hover {
transform: scale(1.08);
border-color: rgba(29, 185, 84, 0.5);
box-shadow:
0 8px 20px rgba(0, 0, 0, 0.5),
0 0 0 1px rgba(29, 185, 84, 0.2),
0 0 15px rgba(29, 185, 84, 0.15),
inset 0 1px 0 rgba(255, 255, 255, 0.1);
}
.discover-download-bubble-card.completed {
border-color: rgba(34, 197, 94, 0.4);
}
.discover-download-bubble-card.completed:hover {
border-color: rgba(34, 197, 94, 0.6);
box-shadow:
0 8px 20px rgba(0, 0, 0, 0.5),
0 0 0 1px rgba(34, 197, 94, 0.3),
0 0 15px rgba(34, 197, 94, 0.15),
inset 0 1px 0 rgba(255, 255, 255, 0.1);
}
/* Bubble card background image */
.discover-download-bubble-image {
position: absolute;
inset: 0;
background-size: cover;
background-position: center;
background-repeat: no-repeat;
border-radius: 50%;
}
/* Bubble card overlay */
.discover-download-bubble-overlay {
position: absolute;
inset: 0;
background: linear-gradient(135deg,
rgba(0, 0, 0, 0.2) 0%,
rgba(0, 0, 0, 0.5) 100%);
border-radius: 50%;
}
/* Bubble card content (icon/status) */
.discover-download-bubble-content {
position: absolute;
inset: 0;
display: flex;
flex-direction: column;
align-items: center;
justify-content: center;
z-index: 2;
padding: 8px;
}
.discover-download-bubble-icon {
font-size: 28px;
filter: drop-shadow(0 2px 4px rgba(0, 0, 0, 0.8));
}
/* Bubble name (below the card) */
.discover-download-bubble-name {
font-size: 10px;
font-weight: 600;
color: rgba(255, 255, 255, 0.95);
text-align: center;
line-height: 1.2;
width: 100%;
overflow: hidden;
text-overflow: ellipsis;
display: -webkit-box;
-webkit-line-clamp: 2;
-webkit-box-orient: vertical;
text-shadow: 0 1px 3px rgba(0, 0, 0, 0.6);
}
/* Bubble status text (optional, below name) */
.discover-download-bubble-status {
font-size: 8px;
color: rgba(255, 255, 255, 0.7);
text-align: center;
margin-top: 2px;
}
/* Scrollbar styling */
.discover-download-sidebar::-webkit-scrollbar {
width: 4px;
}
.discover-download-sidebar::-webkit-scrollbar-track {
background: transparent;
}
.discover-download-sidebar::-webkit-scrollbar-thumb {
background: rgba(255, 255, 255, 0.2);
border-radius: 2px;
}
.discover-download-sidebar::-webkit-scrollbar-thumb:hover {
background: rgba(255, 255, 255, 0.3);
}
/* ===============================
BUILD A PLAYLIST STYLES
=============================== */
.build-playlist-container {
background: #1a1a1a;
border-radius: 12px;
padding: 24px;
margin-top: 20px;
}
.build-playlist-search-section {
position: relative;
margin-bottom: 24px;
}
#build-playlist-search {
width: 100%;
padding: 12px 16px;
background: #2a2a2a;
border: 1px solid #3a3a3a;
border-radius: 8px;
color: #fff;
font-size: 14px;
outline: none;
transition: border-color 0.2s ease;
}
#build-playlist-search:focus {
border-color: #1db954;
}
.build-playlist-search-results {
position: absolute;
top: 100%;
left: 0;
right: 0;
background: #2a2a2a;
border: 1px solid #3a3a3a;
border-radius: 8px;
margin-top: 8px;
max-height: 300px;
overflow-y: auto;
z-index: 1000;
display: none;
}
.build-playlist-search-result {
display: flex;
align-items: center;
gap: 12px;
padding: 12px;
cursor: pointer;
transition: background-color 0.2s ease;
border-bottom: 1px solid #3a3a3a;
}
.build-playlist-search-result:last-child {
border-bottom: none;
}
.build-playlist-search-result:hover {
background-color: #3a3a3a;
}
.build-playlist-search-result img {
width: 40px;
height: 40px;
border-radius: 50%;
object-fit: cover;
}
.build-playlist-search-result span {
color: #fff;
font-size: 14px;
}
.build-playlist-no-results {
padding: 16px;
text-align: center;
color: #999;
font-size: 14px;
}
.build-playlist-selected-section {
margin-bottom: 24px;
}
.build-playlist-selected-section h3 {
color: #fff;
font-size: 16px;
margin: 0 0 12px 0;
}
.build-playlist-selected-artists {
display: flex;
flex-wrap: wrap;
gap: 12px;
min-height: 60px;
}
.build-playlist-selected-artist {
display: flex;
align-items: center;
gap: 8px;
background: #2a2a2a;
border: 1px solid #3a3a3a;
border-radius: 8px;
padding: 8px 12px;
}
.build-playlist-selected-artist img {
width: 32px;
height: 32px;
border-radius: 50%;
object-fit: cover;
}
.build-playlist-selected-artist span {
color: #fff;
font-size: 14px;
}
.build-playlist-remove-artist {
background: none;
border: none;
color: #ff4444;
font-size: 20px;
cursor: pointer;
padding: 0;
margin-left: 4px;
width: 20px;
height: 20px;
display: flex;
align-items: center;
justify-content: center;
transition: color 0.2s ease;
}
.build-playlist-remove-artist:hover {
color: #ff6666;
}
.build-playlist-no-selection {
color: #999;
font-size: 14px;
padding: 16px;
text-align: center;
}
.build-playlist-actions {
display: flex;
align-items: center;
gap: 16px;
margin-bottom: 24px;
}
.build-playlist-generate-btn {
background: #1db954;
color: #fff;
border: none;
border-radius: 8px;
padding: 12px 24px;
font-size: 14px;
font-weight: 600;
cursor: pointer;
transition: all 0.2s ease;
}
.build-playlist-generate-btn:not(:disabled):hover {
background: #1ed760;
transform: scale(1.02);
}
.build-playlist-generate-btn:disabled {
cursor: not-allowed;
}
.build-playlist-loading {
display: flex;
align-items: center;
gap: 12px;
}
.build-playlist-loading p {
color: #999;
font-size: 14px;
margin: 0;
}
.build-playlist-metadata {
background: #2a2a2a;
border-radius: 8px;
padding: 16px;
margin-bottom: 16px;
display: grid;
grid-template-columns: repeat(3, 1fr);
gap: 16px;
}
.build-playlist-metadata p {
color: #fff;
font-size: 13px;
margin: 0;
}
.build-playlist-metadata strong {
color: #1db954;
}
/* =======================
DECADE BROWSER SECTION - Modern Style matching Recent Releases
======================= */
.decade-card-modern {
/* Inherits from .discover-card */
}
.decade-card-image {
background: linear-gradient(135deg, #1a1a2e 0%, #16213e 100%);
display: flex;
align-items: center;
justify-content: center;
position: relative;
overflow: hidden;
}
.decade-card-image::before {
content: '';
position: absolute;
inset: 0;
background: linear-gradient(135deg,
rgba(102, 126, 234, 0.1) 0%,
rgba(118, 75, 162, 0.1) 100%);
opacity: 1;
transition: opacity 0.3s ease;
}
.decade-card-modern:hover .decade-card-image::before {
opacity: 0.3;
}
.decade-icon-large {
font-size: 96px;
line-height: 1;
position: relative;
z-index: 1;
transition: transform 0.3s ease;
}
.decade-card-modern:hover .decade-icon-large {
transform: scale(1.1) rotate(5deg);
}
/* =======================
Genre Browser Cards
======================= */
.genre-card-modern {
/* Inherits from .discover-card */
}
.genre-card-image {
background: linear-gradient(135deg, #1a1a2e 0%, #16213e 100%);
display: flex;
align-items: center;
justify-content: center;
position: relative;
overflow: hidden;
}
.genre-card-image::before {
content: '';
position: absolute;
inset: 0;
background: linear-gradient(135deg,
rgba(102, 126, 234, 0.1) 0%,
rgba(118, 75, 162, 0.1) 100%);
opacity: 1;
transition: opacity 0.3s ease;
}
.genre-card-modern:hover .genre-card-image::before {
opacity: 0.3;
}
.genre-icon-large {
font-size: 96px;
line-height: 1;
position: relative;
z-index: 1;
transition: transform 0.3s ease;
}
.genre-card-modern:hover .genre-icon-large {
transform: scale(1.1) rotate(5deg);
}
/* ===============================
TIME MACHINE (DECADE TABS)
=============================== */
.decade-tabs,
.genre-tabs {
display: flex;
gap: 8px;
margin-bottom: 20px;
border-bottom: 2px solid rgba(255, 255, 255, 0.1);
padding-bottom: 0;
flex-wrap: wrap;
}
.decade-tab,
.genre-tab {
background: transparent;
border: none;
color: #999;
padding: 12px 20px;
font-size: 15px;
font-weight: 500;
cursor: pointer;
transition: all 0.3s ease;
border-bottom: 3px solid transparent;
position: relative;
bottom: -2px;
white-space: nowrap;
}
.decade-tab:hover,
.genre-tab:hover {
color: #fff;
background: rgba(255, 255, 255, 0.05);
}
.decade-tab.active,
.genre-tab.active {
color: #fff;
border-bottom-color: #667eea;
}
.decade-tab-content,
.genre-tab-content {
display: none;
}
.decade-tab-content.active,
.genre-tab-content.active {
display: block;
}
.decade-actions,
.genre-actions {
margin-bottom: 20px;
}
/* Responsive adjustments for Decade/Genre tabs */
@media (max-width: 768px) {
.decade-tabs,
.genre-tabs {
gap: 4px;
}
.decade-tab,
.genre-tab {
padding: 10px 14px;
font-size: 13px;
}
}
/* ===============================
LISTENBRAINZ PLAYLIST CARDS
=============================== */
.listenbrainz-tabs {
margin-top: 20px;
margin-bottom: 20px;
}
.listenbrainz-tab-content .discover-section-subsection {
margin-bottom: 40px;
}
.listenbrainz-tab-content .discover-section-subsection:not(:first-child) {
margin-top: 60px;
}
.listenbrainz-playlist-card {
background: linear-gradient(135deg, #eb743b 0%, #d26230 100%);
display: flex;
align-items: center;
justify-content: center;
position: relative;
overflow: hidden;
}
.listenbrainz-playlist-card::before {
content: '';
position: absolute;
top: -50%;
left: -50%;
width: 200%;
height: 200%;
background: radial-gradient(circle, rgba(255,255,255,0.1) 0%, transparent 70%);
animation: pulse 3s ease-in-out infinite;
}
.listenbrainz-icon {
font-size: 48px;
position: relative;
z-index: 1;
filter: drop-shadow(0 2px 4px rgba(0,0,0,0.2));
}
@keyframes pulse {
0%, 100% {
opacity: 0.5;
}
50% {
opacity: 0.8;
}
}
/* ========================================= */
/* SEARCH MODE TOGGLE SYSTEM */
/* ========================================= */
/* Toggle Container */
.search-mode-toggle-container {
display: flex;
justify-content: center;
margin: 20px 0;
}
.search-mode-toggle {
position: relative;
background: rgba(30, 30, 30, 0.8);
border-radius: 12px;
padding: 4px;
display: inline-flex;
gap: 4px;
border: 1px solid rgba(64, 64, 64, 0.4);
box-shadow: 0 4px 12px rgba(0, 0, 0, 0.3);
}
.search-mode-btn {
position: relative;
z-index: 2;
background: transparent;
border: none;
padding: 10px 24px;
border-radius: 8px;
cursor: pointer;
transition: all 0.3s cubic-bezier(0.4, 0, 0.2, 1);
display: flex;
align-items: center;
gap: 8px;
font-family: 'Segoe UI', sans-serif;
font-size: 14px;
font-weight: 500;
color: rgba(255, 255, 255, 0.6);
}
.search-mode-btn:hover {
color: rgba(255, 255, 255, 0.9);
}
.search-mode-btn.active {
color: #ffffff;
}
.mode-icon {
font-size: 16px;
transition: transform 0.3s ease;
}
.search-mode-btn.active .mode-icon {
transform: scale(1.1);
}
.toggle-slider {
position: absolute;
top: 4px;
left: 4px;
width: calc(50% - 4px);
height: calc(100% - 8px);
background: linear-gradient(135deg, rgba(29, 185, 84, 0.9), rgba(24, 156, 71, 0.9));
border-radius: 8px;
transition: transform 0.3s cubic-bezier(0.4, 0, 0.2, 1);
z-index: 1;
box-shadow: 0 2px 8px rgba(29, 185, 84, 0.4);
}
.search-mode-toggle[data-active="enhanced"] .toggle-slider {
transform: translateX(100%);
background: linear-gradient(135deg, rgba(138, 43, 226, 0.9), rgba(123, 31, 162, 0.9));
box-shadow: 0 2px 8px rgba(138, 43, 226, 0.4);
}
/* Search Section Visibility */
.search-section {
display: none;
}
.search-section.active {
display: block;
}
/* ========================================= */
/* ENHANCED SEARCH STYLING */
/* ========================================= */
/* Enhanced Search Input Wrapper (relative for dropdown positioning) */
.enhanced-search-input-wrapper {
position: relative;
margin-bottom: 20px;
}
/* Enhanced Search Bar */
.enhanced-search-bar-container {
background: linear-gradient(135deg, rgba(138, 43, 226, 0.15), rgba(75, 0, 130, 0.15));
border-radius: 16px;
border: 2px solid rgba(138, 43, 226, 0.3);
padding: 20px;
display: flex;
gap: 16px;
align-items: center;
box-shadow: 0 8px 24px rgba(138, 43, 226, 0.2);
backdrop-filter: blur(10px);
}
.enhanced-search-wrapper {
flex-grow: 1;
position: relative;
display: flex;
align-items: center;
background: rgba(20, 20, 20, 0.6);
border-radius: 12px;
border: 1px solid rgba(138, 43, 226, 0.4);
padding: 0 16px;
transition: all 0.3s ease;
}
.enhanced-search-wrapper:focus-within {
border-color: rgba(138, 43, 226, 0.8);
box-shadow: 0 0 0 3px rgba(138, 43, 226, 0.2);
}
.enhanced-search-icon {
font-size: 20px;
margin-right: 12px;
animation: sparkle 2s ease-in-out infinite;
}
@keyframes sparkle {
0%, 100% { opacity: 1; transform: scale(1); }
50% { opacity: 0.7; transform: scale(1.1); }
}
#enhanced-search-input {
flex-grow: 1;
background: transparent;
border: none;
outline: none;
font-family: 'Segoe UI', sans-serif;
font-size: 15px;
color: #ffffff;
padding: 14px 0;
}
#enhanced-search-input::placeholder {
color: rgba(255, 255, 255, 0.5);
}
.enhanced-cancel-btn {
background: rgba(138, 43, 226, 0.3);
border: none;
border-radius: 6px;
padding: 6px 12px;
color: #ffffff;
cursor: pointer;
font-size: 14px;
transition: all 0.2s ease;
}
.enhanced-cancel-btn:hover {
background: rgba(138, 43, 226, 0.5);
}
.enhanced-search-btn {
background: linear-gradient(135deg, rgba(138, 43, 226, 0.9), rgba(123, 31, 162, 0.9));
border: none;
border-radius: 12px;
padding: 14px 28px;
color: #ffffff;
font-family: 'Segoe UI', sans-serif;
font-size: 14px;
font-weight: 600;
cursor: pointer;
display: flex;
align-items: center;
gap: 8px;
transition: all 0.3s ease;
box-shadow: 0 4px 12px rgba(138, 43, 226, 0.3);
}
.enhanced-search-btn:hover {
transform: translateY(-2px);
box-shadow: 0 6px 16px rgba(138, 43, 226, 0.4);
}
.enhanced-search-btn:active {
transform: translateY(0);
}
.btn-icon {
font-size: 16px;
}
/* Enhanced Search Status */
.enhanced-search-status {
display: flex;
align-items: center;
gap: 12px;
padding: 12px 20px;
margin-top: 16px;
background: rgba(20, 20, 20, 0.4);
border-radius: 10px;
border-left: 3px solid rgba(138, 43, 226, 0.8);
}
.enhanced-status-indicator {
width: 8px;
height: 8px;
border-radius: 50%;
background: rgba(138, 43, 226, 0.8);
animation: pulse-glow 2s ease-in-out infinite;
}
@keyframes pulse-glow {
0%, 100% { box-shadow: 0 0 4px rgba(138, 43, 226, 0.6); }
50% { box-shadow: 0 0 12px rgba(138, 43, 226, 0.9); }
}
#enhanced-search-status-text {
font-family: 'Segoe UI', sans-serif;
font-size: 13px;
color: rgba(255, 255, 255, 0.8);
margin: 0;
}
/* Enhanced Search Results */
.enhanced-search-results-container {
background: rgba(20, 20, 20, 0.3);
border-radius: 16px;
border: 2px solid rgba(138, 43, 226, 0.2);
padding: 20px;
margin-top: 20px;
display: flex;
flex-direction: column;
flex-grow: 1;
overflow: hidden;
}
.enhanced-results-header {
display: flex;
justify-content: space-between;
align-items: center;
margin-bottom: 16px;
padding-bottom: 12px;
border-bottom: 1px solid rgba(138, 43, 226, 0.2);
}
.enhanced-results-header h3 {
color: rgba(255, 255, 255, 0.95);
font-size: 16px;
font-weight: 600;
margin: 0;
}
.results-count-badge {
background: linear-gradient(135deg, rgba(138, 43, 226, 0.3), rgba(123, 31, 162, 0.3));
border: 1px solid rgba(138, 43, 226, 0.5);
border-radius: 20px;
padding: 6px 14px;
font-size: 12px;
font-weight: 600;
color: rgba(255, 255, 255, 0.9);
}
.enhanced-results-scroll-area {
overflow-y: auto;
flex-grow: 1;
padding-right: 8px;
}
.enhanced-results-scroll-area::-webkit-scrollbar {
width: 8px;
}
.enhanced-results-scroll-area::-webkit-scrollbar-track {
background: rgba(20, 20, 20, 0.3);
border-radius: 4px;
}
.enhanced-results-scroll-area::-webkit-scrollbar-thumb {
background: linear-gradient(to bottom, rgba(138, 43, 226, 0.6), rgba(123, 31, 162, 0.6));
border-radius: 4px;
}
.enhanced-results-scroll-area::-webkit-scrollbar-thumb:hover {
background: linear-gradient(to bottom, rgba(138, 43, 226, 0.8), rgba(123, 31, 162, 0.8));
}
/* Enhanced Results Placeholder */
.enhanced-results-placeholder {
display: flex;
flex-direction: column;
align-items: center;
justify-content: center;
padding: 60px 20px;
text-align: center;
}
.placeholder-icon {
font-size: 48px;
margin-bottom: 16px;
animation: sparkle 2s ease-in-out infinite;
}
.placeholder-title {
font-size: 18px;
font-weight: 600;
color: rgba(255, 255, 255, 0.9);
margin: 0 0 8px 0;
}
.placeholder-subtitle {
font-size: 13px;
color: rgba(255, 255, 255, 0.6);
margin: 0;
}
/* ========================================= */
/* ENHANCED SEARCH DROPDOWN OVERLAY */
/* ========================================= */
.enhanced-dropdown {
position: absolute;
top: 100%;
left: 0;
right: 0;
margin-top: 8px;
background: rgba(24, 24, 24, 0.98);
border: 1px solid rgba(255, 255, 255, 0.1);
border-radius: 8px;
box-shadow: 0 8px 24px rgba(0, 0, 0, 0.6);
max-height: 600px;
overflow: hidden;
z-index: 1000;
backdrop-filter: blur(40px);
animation: slideDown 0.15s ease-out;
}
@keyframes slideDown {
from {
opacity: 0;
transform: translateY(-10px);
}
to {
opacity: 1;
transform: translateY(0);
}
}
.enhanced-dropdown-content {
max-height: 600px;
overflow-y: auto;
padding: 16px 20px;
}
.enhanced-dropdown-content::-webkit-scrollbar {
width: 6px;
}
.enhanced-dropdown-content::-webkit-scrollbar-track {
background: transparent;
}
.enhanced-dropdown-content::-webkit-scrollbar-thumb {
background: rgba(255, 255, 255, 0.2);
border-radius: 3px;
}
.enhanced-dropdown-content::-webkit-scrollbar-thumb:hover {
background: rgba(255, 255, 255, 0.3);
}
/* Loading and Empty States */
.enhanced-loading,
.enhanced-empty {
text-align: center;
padding: 40px 20px;
color: rgba(255, 255, 255, 0.7);
}
.enhanced-loading .spinner {
width: 40px;
height: 40px;
margin: 0 auto 16px;
border: 3px solid rgba(138, 43, 226, 0.2);
border-top-color: rgba(138, 43, 226, 0.8);
border-radius: 50%;
animation: spin 1s linear infinite;
}
@keyframes spin {
to { transform: rotate(360deg); }
}
.empty-icon {
font-size: 48px;
margin-bottom: 12px;
opacity: 0.5;
}
/* Dropdown Sections */
.enh-dropdown-section {
margin-bottom: 24px;
}
.enh-dropdown-section:last-child {
margin-bottom: 0;
}
.enh-section-header {
display: flex;
align-items: center;
gap: 0;
padding: 0;
margin-bottom: 12px;
}
.enh-section-icon {
display: none;
}
.enh-section-title {
flex-grow: 1;
font-size: 16px;
font-weight: 700;
color: #ffffff;
margin: 0;
text-transform: none;
letter-spacing: -0.2px;
}
.enh-section-count {
display: none;
}
/* ========================================= */
/* ARTIST CARDS - Clean Spotify Style */
/* ========================================= */
.enh-artists-wrapper {
display: grid;
grid-template-columns: 1fr 1fr;
gap: 20px;
margin-bottom: 24px;
}
.enh-artist-section {
margin-bottom: 0 !important;
}
.enh-compact-list.artists-grid {
display: flex;
gap: 16px;
flex-wrap: nowrap;
overflow-x: auto;
padding-bottom: 4px;
}
.enh-compact-list.artists-grid::-webkit-scrollbar {
height: 4px;
}
.enh-compact-list.artists-grid::-webkit-scrollbar-thumb {
background: rgba(255, 255, 255, 0.2);
border-radius: 2px;
}
.enh-compact-item.artist-card {
display: flex;
flex-direction: column;
position: relative;
width: 170px;
height: 170px;
background: linear-gradient(135deg, #1e1e1e 0%, #2a2a2a 100%);
border-radius: 8px;
cursor: pointer;
transition: all 0.2s ease;
border: 1px solid rgba(255, 255, 255, 0.1);
flex-shrink: 0;
overflow: hidden;
}
.enh-compact-item.artist-card:hover {
transform: translateY(-2px);
box-shadow: 0 8px 16px rgba(0, 0, 0, 0.4);
border-color: rgba(255, 255, 255, 0.2);
}
.enh-item-image.artist-image {
width: 100%;
height: 110px;
object-fit: cover;
border-radius: 8px 8px 0 0;
border: none;
}
.enh-item-image-placeholder.artist-placeholder {
width: 100%;
height: 110px;
background: rgba(40, 40, 40, 1);
display: flex;
align-items: center;
justify-content: center;
font-size: 40px;
border: none;
border-radius: 8px 8px 0 0;
}
.enh-compact-item.artist-card .enh-item-info {
position: absolute;
bottom: 0;
left: 0;
right: 0;
padding: 10px 12px;
background: linear-gradient(to top, rgba(0, 0, 0, 0.9) 0%, rgba(0, 0, 0, 0.6) 70%, transparent 100%);
}
.enh-compact-item.artist-card .enh-item-name {
font-size: 14px;
font-weight: 600;
color: #ffffff;
margin-bottom: 2px;
overflow: hidden;
text-overflow: ellipsis;
white-space: nowrap;
width: 100%;
}
.enh-compact-item.artist-card .enh-item-meta {
display: block;
font-size: 12px;
font-weight: 500;
color: rgba(255, 255, 255, 0.7);
overflow: hidden;
text-overflow: ellipsis;
white-space: nowrap;
}
.enh-compact-item.artist-card .enh-item-badge {
display: none;
}
/* ========================================= */
/* ALBUM CARDS - Clean Grid */
/* ========================================= */
.enh-compact-list.albums-grid {
display: grid;
grid-template-columns: repeat(auto-fill, minmax(170px, 1fr));
gap: 16px;
}
.enh-compact-item.album-card {
display: flex;
flex-direction: column;
padding: 12px;
background: transparent;
border-radius: 8px;
cursor: pointer;
transition: background 0.2s ease;
border: none;
}
.enh-compact-item.album-card:hover {
background: rgba(255, 255, 255, 0.1);
}
.enh-item-image.album-cover {
width: 100%;
aspect-ratio: 1;
border-radius: 4px;
object-fit: cover;
margin-bottom: 12px;
box-shadow: 0 4px 12px rgba(0, 0, 0, 0.5);
}
.enh-item-image-placeholder.album-placeholder {
width: 100%;
aspect-ratio: 1;
border-radius: 4px;
background: rgba(40, 40, 40, 1);
display: flex;
align-items: center;
justify-content: center;
font-size: 56px;
margin-bottom: 12px;
box-shadow: 0 4px 12px rgba(0, 0, 0, 0.5);
}
.enh-compact-item.album-card .enh-item-name {
font-size: 14px;
font-weight: 600;
color: #ffffff;
margin-bottom: 4px;
overflow: hidden;
text-overflow: ellipsis;
display: -webkit-box;
-webkit-line-clamp: 2;
-webkit-box-orient: vertical;
line-height: 1.3;
max-height: 2.6em;
}
.enh-compact-item.album-card .enh-item-meta {
font-size: 13px;
color: rgba(255, 255, 255, 0.6);
overflow: hidden;
text-overflow: ellipsis;
display: -webkit-box;
-webkit-line-clamp: 2;
-webkit-box-orient: vertical;
line-height: 1.3;
}
/* ========================================= */
/* TRACK ITEMS - Two Column Grid */
/* ========================================= */
.enh-compact-list.tracks-list {
display: grid;
grid-template-columns: repeat(2, 1fr);
gap: 4px 12px;
}
.enh-compact-item.track-item {
display: flex;
align-items: center;
gap: 12px;
padding: 8px 12px;
background: transparent;
border-radius: 4px;
cursor: pointer;
transition: background 0.2s ease;
border: none;
}
.enh-compact-item.track-item:hover {
background: rgba(255, 255, 255, 0.1);
}
.enh-item-image.track-cover {
width: 48px;
height: 48px;
border-radius: 4px;
object-fit: cover;
flex-shrink: 0;
box-shadow: 0 2px 8px rgba(0, 0, 0, 0.4);
}
.enh-item-image-placeholder.track-placeholder {
width: 48px;
height: 48px;
border-radius: 4px;
flex-shrink: 0;
background: rgba(40, 40, 40, 1);
display: flex;
align-items: center;
justify-content: center;
font-size: 24px;
box-shadow: 0 2px 8px rgba(0, 0, 0, 0.4);
}
.enh-item-info {
flex-grow: 1;
min-width: 0;
}
.enh-compact-item.track-item .enh-item-name {
font-size: 14px;
font-weight: 500;
color: #ffffff;
margin-bottom: 4px;
overflow: hidden;
text-overflow: ellipsis;
white-space: nowrap;
}
.enh-compact-item.track-item .enh-item-meta {
font-size: 13px;
color: rgba(255, 255, 255, 0.6);
overflow: hidden;
text-overflow: ellipsis;
white-space: nowrap;
}
/* ========================================= */
/* ENHANCED SEARCH CATEGORIZED RESULTS */
/* (OLD - REMOVE IF NOT NEEDED) */
/* ========================================= */
/* Categorized Container */
.enh-sr-categorized-container {
display: flex;
flex-direction: column;
gap: 24px;
}
/* Category Section */
.enh-sr-category-section {
background: rgba(30, 30, 30, 0.5);
border-radius: 12px;
padding: 20px;
border: 1px solid rgba(138, 43, 226, 0.2);
}
.enh-sr-category-header {
display: flex;
align-items: center;
gap: 12px;
margin-bottom: 16px;
padding-bottom: 12px;
border-bottom: 1px solid rgba(138, 43, 226, 0.2);
}
.enh-sr-category-icon {
font-size: 20px;
}
.enh-sr-category-title {
flex-grow: 1;
font-size: 16px;
font-weight: 600;
color: rgba(255, 255, 255, 0.95);
margin: 0;
}
.enh-sr-category-count {
background: linear-gradient(135deg, rgba(138, 43, 226, 0.4), rgba(123, 31, 162, 0.4));
border: 1px solid rgba(138, 43, 226, 0.5);
border-radius: 12px;
padding: 4px 10px;
font-size: 12px;
font-weight: 600;
color: rgba(255, 255, 255, 0.9);
}
/* Artist Grid (for both DB and Spotify artists) */
.enh-sr-artist-grid {
display: grid;
grid-template-columns: repeat(auto-fill, minmax(140px, 1fr));
gap: 16px;
}
.enh-sr-artist-card {
background: linear-gradient(135deg, rgba(40, 40, 40, 0.8), rgba(30, 30, 30, 0.8));
border-radius: 12px;
padding: 16px;
cursor: pointer;
transition: all 0.3s ease;
border: 2px solid transparent;
display: flex;
flex-direction: column;
align-items: center;
text-align: center;
}
.enh-sr-artist-card:hover {
transform: translateY(-4px);
border-color: rgba(138, 43, 226, 0.6);
box-shadow: 0 8px 24px rgba(138, 43, 226, 0.3);
}
.enh-sr-artist-image-container {
width: 80px;
height: 80px;
border-radius: 50%;
overflow: hidden;
margin-bottom: 12px;
border: 3px solid rgba(138, 43, 226, 0.3);
}
.enh-sr-artist-image {
width: 100%;
height: 100%;
object-fit: cover;
}
.enh-sr-artist-placeholder {
width: 100%;
height: 100%;
display: flex;
align-items: center;
justify-content: center;
background: linear-gradient(135deg, rgba(138, 43, 226, 0.4), rgba(123, 31, 162, 0.4));
font-size: 36px;
}
.enh-sr-artist-name {
font-size: 14px;
font-weight: 600;
color: rgba(255, 255, 255, 0.95);
margin-bottom: 6px;
word-wrap: break-word;
}
.enh-sr-artist-badge {
font-size: 11px;
padding: 4px 8px;
border-radius: 8px;
font-weight: 600;
}
.enh-sr-artist-badge-library {
background: linear-gradient(135deg, rgba(29, 185, 84, 0.3), rgba(24, 156, 71, 0.3));
border: 1px solid rgba(29, 185, 84, 0.5);
color: rgba(29, 185, 84, 1);
}
.enh-sr-artist-badge-spotify {
background: linear-gradient(135deg, rgba(138, 43, 226, 0.3), rgba(123, 31, 162, 0.3));
border: 1px solid rgba(138, 43, 226, 0.5);
color: rgba(138, 43, 226, 1);
}
/* Album Grid */
.enh-sr-album-grid {
display: grid;
grid-template-columns: repeat(auto-fill, minmax(160px, 1fr));
gap: 16px;
}
.enh-sr-album-card {
background: linear-gradient(135deg, rgba(40, 40, 40, 0.8), rgba(30, 30, 30, 0.8));
border-radius: 12px;
padding: 12px;
cursor: pointer;
transition: all 0.3s ease;
border: 2px solid transparent;
}
.enh-sr-album-card:hover {
transform: translateY(-4px);
border-color: rgba(138, 43, 226, 0.6);
box-shadow: 0 8px 24px rgba(138, 43, 226, 0.3);
}
.enh-sr-album-cover {
width: 100%;
aspect-ratio: 1;
border-radius: 8px;
overflow: hidden;
margin-bottom: 12px;
background: linear-gradient(135deg, rgba(138, 43, 226, 0.3), rgba(123, 31, 162, 0.3));
}
.enh-sr-album-cover img {
width: 100%;
height: 100%;
object-fit: cover;
}
.enh-sr-album-placeholder {
width: 100%;
height: 100%;
display: flex;
align-items: center;
justify-content: center;
font-size: 48px;
}
.enh-sr-album-name {
font-size: 14px;
font-weight: 600;
color: rgba(255, 255, 255, 0.95);
margin-bottom: 4px;
overflow: hidden;
text-overflow: ellipsis;
white-space: nowrap;
}
.enh-sr-album-artist {
font-size: 12px;
color: rgba(255, 255, 255, 0.6);
overflow: hidden;
text-overflow: ellipsis;
white-space: nowrap;
margin-bottom: 6px;
}
.enh-sr-album-meta {
font-size: 11px;
color: rgba(255, 255, 255, 0.5);
display: flex;
justify-content: space-between;
}
/* Track List */
.enh-sr-track-list {
display: flex;
flex-direction: column;
gap: 8px;
}
.enh-sr-track-item {
background: linear-gradient(135deg, rgba(40, 40, 40, 0.6), rgba(30, 30, 30, 0.6));
border-radius: 10px;
padding: 12px 16px;
cursor: pointer;
transition: all 0.2s ease;
border: 2px solid transparent;
display: flex;
align-items: center;
gap: 12px;
}
.enh-sr-track-item:hover {
border-color: rgba(138, 43, 226, 0.6);
background: linear-gradient(135deg, rgba(50, 50, 50, 0.8), rgba(40, 40, 40, 0.8));
transform: translateX(4px);
}
.enh-sr-track-cover {
width: 48px;
height: 48px;
border-radius: 6px;
overflow: hidden;
flex-shrink: 0;
background: linear-gradient(135deg, rgba(138, 43, 226, 0.3), rgba(123, 31, 162, 0.3));
}
.enh-sr-track-cover img {
width: 100%;
height: 100%;
object-fit: cover;
}
.enh-sr-track-placeholder {
width: 100%;
height: 100%;
display: flex;
align-items: center;
justify-content: center;
font-size: 24px;
}
.enh-sr-track-info {
flex-grow: 1;
min-width: 0;
}
.enh-sr-track-name {
font-size: 14px;
font-weight: 600;
color: rgba(255, 255, 255, 0.95);
margin-bottom: 4px;
overflow: hidden;
text-overflow: ellipsis;
white-space: nowrap;
}
.enh-sr-track-meta {
font-size: 12px;
color: rgba(255, 255, 255, 0.6);
overflow: hidden;
text-overflow: ellipsis;
white-space: nowrap;
}
.enh-sr-track-duration {
font-size: 12px;
color: rgba(255, 255, 255, 0.5);
flex-shrink: 0;
margin-left: 12px;
}
/* ========================================= */
/* SLSKD SEARCH RESULTS VIEW */
/* ========================================= */
.enh-sr-slskd-view {
display: flex;
flex-direction: column;
gap: 16px;
}
.enh-sr-back-btn {
background: rgba(40, 40, 40, 0.8);
border: 1px solid rgba(138, 43, 226, 0.4);
border-radius: 10px;
padding: 10px 20px;
color: rgba(255, 255, 255, 0.9);
font-size: 14px;
font-weight: 600;
cursor: pointer;
display: flex;
align-items: center;
gap: 8px;
transition: all 0.2s ease;
align-self: flex-start;
}
.enh-sr-back-btn:hover {
background: rgba(50, 50, 50, 0.9);
border-color: rgba(138, 43, 226, 0.6);
transform: translateX(-4px);
}
.enh-sr-back-icon {
font-size: 16px;
}
.enh-sr-slskd-header {
background: linear-gradient(135deg, rgba(138, 43, 226, 0.15), rgba(75, 0, 130, 0.15));
border-radius: 12px;
padding: 20px;
display: flex;
justify-content: space-between;
align-items: center;
border: 1px solid rgba(138, 43, 226, 0.3);
}
.enh-sr-slskd-title {
font-size: 16px;
font-weight: 600;
color: rgba(255, 255, 255, 0.95);
margin: 0;
}
.enh-sr-slskd-badge {
background: linear-gradient(135deg, rgba(138, 43, 226, 0.4), rgba(123, 31, 162, 0.4));
border: 1px solid rgba(138, 43, 226, 0.5);
border-radius: 12px;
padding: 6px 12px;
font-size: 12px;
font-weight: 600;
color: rgba(255, 255, 255, 0.9);
}
.enh-sr-slskd-list {
display: flex;
flex-direction: column;
gap: 12px;
}
/* Slskd Result Item (reuses download manager card styles with enh-sr prefix) */
.enh-sr-download-card {
background: linear-gradient(135deg, rgba(40, 40, 40, 0.8), rgba(30, 30, 30, 0.8));
border-radius: 12px;
padding: 16px;
border: 2px solid rgba(138, 43, 226, 0.2);
transition: all 0.3s ease;
}
.enh-sr-download-card:hover {
border-color: rgba(138, 43, 226, 0.5);
transform: translateY(-2px);
box-shadow: 0 6px 20px rgba(138, 43, 226, 0.2);
}
.enh-sr-download-card-header {
display: flex;
justify-content: space-between;
align-items: flex-start;
margin-bottom: 12px;
}
.enh-sr-download-title {
font-size: 14px;
font-weight: 600;
color: rgba(255, 255, 255, 0.95);
margin: 0;
flex-grow: 1;
}
.enh-sr-download-btn {
background: linear-gradient(135deg, rgba(138, 43, 226, 0.8), rgba(123, 31, 162, 0.8));
border: none;
border-radius: 8px;
padding: 8px 16px;
color: #ffffff;
font-size: 12px;
font-weight: 600;
cursor: pointer;
transition: all 0.2s ease;
margin-left: 12px;
}
.enh-sr-download-btn:hover {
background: linear-gradient(135deg, rgba(138, 43, 226, 1), rgba(123, 31, 162, 1));
transform: translateY(-2px);
box-shadow: 0 4px 12px rgba(138, 43, 226, 0.4);
}
.enh-sr-download-meta {
display: flex;
flex-wrap: wrap;
gap: 8px;
font-size: 11px;
color: rgba(255, 255, 255, 0.6);
}
.enh-sr-meta-badge {
background: rgba(50, 50, 50, 0.6);
border-radius: 6px;
padding: 4px 8px;
}