Spaces:
Sleeping
Sleeping
:root { | |
--primary-color: #4CAF50; | |
--primary-hover: #45a049; | |
--primary-active: #3d8b40; | |
--accent-color: #FF4081; | |
--accent-hover: #f50057; | |
--bg-color: #0a0a0a; | |
--surface-color: rgba(15, 23, 42, 0.8); | |
--surface-light: rgba(255, 255, 255, 0.1); | |
--text-primary: #ffffff; | |
--text-secondary: rgba(255, 255, 255, 0.7); | |
--error-color: #ff4444; | |
--success-color: #00C853; | |
--warning-color: #FFA000; | |
/* Animation durations */ | |
--transition-fast: 0.15s; | |
--transition-normal: 0.25s; | |
--transition-slow: 0.35s; | |
/* Shadows */ | |
--shadow-sm: 0 2px 4px rgba(0, 0, 0, 0.1); | |
--shadow-md: 0 4px 8px rgba(0, 0, 0, 0.12); | |
--shadow-lg: 0 8px 16px rgba(0, 0, 0, 0.15); | |
/* Border radius */ | |
--radius-sm: 4px; | |
--radius-md: 8px; | |
--radius-lg: 12px; | |
--radius-xl: 16px; | |
} | |
/* Light theme variables */ | |
[data-theme="light"] { | |
--bg-color: #f5f5f5; | |
--surface-color: rgba(255, 255, 255, 0.9); | |
--surface-light: rgba(0, 0, 0, 0.1); | |
--text-primary: #1a1a1a; | |
--text-secondary: rgba(0, 0, 0, 0.7); | |
} | |
/* Loading screen */ | |
.loading-screen { | |
position: fixed; | |
top: 0; | |
left: 0; | |
width: 100%; | |
height: 100%; | |
background: var(--bg-color); | |
display: flex; | |
justify-content: center; | |
align-items: center; | |
z-index: 1000; | |
opacity: 1; | |
transition: opacity var(--transition-normal); | |
} | |
.loading-screen.hidden { | |
opacity: 0; | |
pointer-events: none; | |
} | |
.loader { | |
display: flex; | |
flex-direction: column; | |
align-items: center; | |
gap: 1rem; | |
} | |
.loader-circle { | |
width: 48px; | |
height: 48px; | |
border: 3px solid var(--surface-light); | |
border-top-color: var(--primary-color); | |
border-radius: 50%; | |
animation: spin 1s linear infinite; | |
} | |
.loader-text { | |
color: var(--text-secondary); | |
font-size: 0.9rem; | |
} | |
/* Header styles */ | |
.app-header { | |
position: fixed; | |
top: 0; | |
left: 0; | |
right: 0; | |
display: flex; | |
justify-content: space-between; | |
align-items: center; | |
padding: 1rem 1.5rem; | |
background: var(--surface-color); | |
backdrop-filter: blur(12px); | |
z-index: 100; | |
box-shadow: var(--shadow-md); | |
border-bottom: 1px solid var(--surface-light); | |
} | |
.logo { | |
display: flex; | |
align-items: center; | |
gap: 0.75rem; | |
font-size: 1.5rem; | |
font-weight: 700; | |
color: var(--primary-color); | |
transition: transform var(--transition-fast); | |
} | |
.logo:hover { | |
transform: scale(1.05); | |
} | |
/* Header controls */ | |
.header-controls { | |
display: flex; | |
align-items: center; | |
gap: 0.5rem; | |
} | |
.header-btn { | |
position: relative; | |
width: 40px; | |
height: 40px; | |
border-radius: 50%; | |
background: var(--surface-light); | |
color: var(--text-primary); | |
transition: all var(--transition-fast); | |
} | |
.header-btn:hover { | |
background: var(--surface-light); | |
transform: translateY(-2px); | |
} | |
.header-btn.active { | |
background: var(--primary-color); | |
color: white; | |
} | |
/* Tooltips */ | |
.tooltip { | |
position: absolute; | |
bottom: -30px; | |
left: 50%; | |
transform: translateX(-50%); | |
background: var(--surface-color); | |
color: var(--text-primary); | |
padding: 0.5rem 0.75rem; | |
border-radius: var(--radius-sm); | |
font-size: 0.8rem; | |
white-space: nowrap; | |
opacity: 0; | |
visibility: hidden; | |
transition: all var(--transition-fast); | |
box-shadow: var(--shadow-md); | |
} | |
.header-btn:hover .tooltip { | |
opacity: 1; | |
visibility: visible; | |
transform: translateX(-50%) translateY(0); | |
} | |
/* Main content area */ | |
.main-content { | |
position: fixed; | |
top: 80px; | |
right: -420px; | |
width: 400px; | |
max-height: calc(100vh - 180px); | |
z-index: 10; | |
transition: all var(--transition-normal); | |
padding: 1rem; | |
pointer-events: none; | |
} | |
.main-content.visible { | |
right: 1rem; | |
pointer-events: all; | |
} | |
/* Upload area */ | |
.upload-area { | |
background: var(--surface-color); | |
border-radius: var(--radius-lg); | |
padding: 2rem; | |
text-align: center; | |
transition: all var(--transition-normal); | |
opacity: 0; | |
transform: translateY(-20px); | |
display: none; | |
} | |
.upload-area.visible { | |
opacity: 1; | |
transform: translateY(0); | |
display: block; | |
} | |
.upload-area.dragover { | |
background: var(--surface-light); | |
border: 2px dashed var(--primary-color); | |
} | |
.upload-content { | |
display: flex; | |
flex-direction: column; | |
align-items: center; | |
gap: 1.5rem; | |
} | |
.upload-content i { | |
font-size: 3rem; | |
color: var(--primary-color); | |
} | |
.upload-text h3 { | |
margin: 0; | |
font-size: 1.2rem; | |
font-weight: 600; | |
color: var(--text-primary); | |
} | |
.upload-progress { | |
width: 100%; | |
display: none; | |
} | |
.upload-progress.visible { | |
display: block; | |
} | |
/* Progress bar container */ | |
.progress-container { | |
width: 100%; | |
margin: 1rem 0; | |
position: relative; | |
} | |
/* Main progress bar */ | |
.progress-bar { | |
position: relative; | |
width: 100%; | |
height: 4px; | |
background: var(--surface-light); | |
border-radius: 2px; | |
cursor: pointer; | |
overflow: visible; | |
} | |
/* Progress fill */ | |
.progress { | |
position: absolute; | |
left: 0; | |
top: 0; | |
height: 100%; | |
background: var(--primary-color); | |
border-radius: 2px; | |
transition: width 0.1s ease; | |
} | |
/* Progress handle */ | |
.progress-handle { | |
position: absolute; | |
top: 50%; | |
left: 0; | |
width: 12px; | |
height: 12px; | |
background: var(--primary-color); | |
border: 2px solid white; | |
border-radius: 50%; | |
transform: translate(-50%, -50%); | |
box-shadow: var(--shadow-sm); | |
pointer-events: none; | |
z-index: 2; | |
transition: transform 0.1s ease; | |
} | |
/* Progress handle hover effect */ | |
.progress-bar:hover .progress-handle { | |
transform: translate(-50%, -50%) scale(1.2); | |
} | |
/* Hide the default range input but keep it functional */ | |
.seek-slider { | |
position: absolute; | |
top: 0; | |
left: 0; | |
width: 100%; | |
height: 100%; | |
opacity: 0; | |
cursor: pointer; | |
margin: 0; | |
z-index: 1; | |
} | |
/* Active states for progress bar */ | |
.progress-bar:active .progress-handle, | |
.progress-bar.dragging .progress-handle { | |
transform: translate(-50%, -50%) scale(1.3); | |
background: var(--primary-hover); | |
} | |
/* Mobile optimization */ | |
@media (max-width: 768px) { | |
.progress-handle { | |
width: 16px; | |
height: 16px; | |
} | |
.progress-bar { | |
height: 6px; | |
} | |
} | |
/* Playlist styles */ | |
.playlist-container { | |
background: var(--surface-color); | |
border-radius: var(--radius-lg); | |
overflow: hidden; | |
opacity: 0; | |
transform: translateY(-20px); | |
display: none; | |
transition: all var(--transition-normal); | |
} | |
.playlist-container.visible { | |
opacity: 1; | |
transform: translateY(0); | |
display: block; | |
} | |
.playlist-header { | |
display: flex; | |
justify-content: space-between; | |
align-items: center; | |
padding: 1rem 1.5rem; | |
border-bottom: 1px solid var(--surface-light); | |
} | |
.playlist-controls { | |
display: flex; | |
gap: 0.5rem; | |
} | |
.playlist-btn { | |
width: 36px; | |
height: 36px; | |
border-radius: 50%; | |
color: var(--text-primary); | |
background: var(--surface-light); | |
border: 1px solid var(--surface-light); | |
transition: all var(--transition-fast); | |
display: flex; | |
align-items: center; | |
justify-content: center; | |
cursor: pointer; | |
} | |
.playlist-btn:hover { | |
background: var(--surface-light); | |
transform: translateY(-2px); | |
color: var(--primary-color); | |
} | |
.playlist-btn.active { | |
background: var(--primary-color); | |
border-color: var(--primary-color); | |
color: white; | |
} | |
/* Light theme adjustments */ | |
[data-theme="light"] .playlist-btn { | |
background: var(--surface-light); | |
border-color: var(--surface-light); | |
color: var(--text-primary); | |
} | |
[data-theme="light"] .playlist-btn:hover { | |
background: var(--surface-light); | |
color: var(--primary-color); | |
} | |
[data-theme="light"] .playlist-btn.active { | |
background: var(--primary-color); | |
border-color: var(--primary-color); | |
color: white; | |
} | |
/* Track list */ | |
.tracks-list { | |
max-height: 400px; | |
overflow-y: auto; | |
padding: 0.5rem; | |
} | |
.playlist-item { | |
padding: 0.75rem 1rem; | |
border-radius: var(--radius-md); | |
cursor: pointer; | |
transition: all var(--transition-fast); | |
} | |
.playlist-item:hover { | |
background: var(--surface-light); | |
transform: translateX(4px); | |
} | |
.playlist-item.active { | |
background: var(--primary-color); | |
color: white; | |
} | |
/* Player controls */ | |
.controls-container { | |
position: fixed; | |
bottom: 2rem; | |
left: 50%; | |
transform: translateX(-50%); | |
width: 90%; | |
max-width: 800px; | |
background: var(--surface-color); | |
backdrop-filter: blur(12px); | |
border-radius: var(--radius-lg); | |
padding: 1.5rem; | |
box-shadow: var(--shadow-lg); | |
border: 1px solid var(--surface-light); | |
z-index: 100; | |
} | |
.now-playing-info { | |
display: flex; | |
align-items: center; | |
gap: 1rem; | |
margin-bottom: 1rem; | |
} | |
.track-artwork { | |
width: 48px; | |
height: 48px; | |
min-width: 48px; | |
border-radius: var(--radius-md); | |
background: var(--surface-light); | |
display: flex; | |
align-items: center; | |
justify-content: center; | |
overflow: hidden; | |
border: 1px solid var(--surface-light); | |
} | |
.track-artwork i { | |
font-size: 1.5rem; | |
color: var(--text-secondary); | |
} | |
.track-artwork img { | |
width: 100%; | |
height: 100%; | |
object-fit: cover; | |
} | |
.music-controls { | |
display: flex; | |
align-items: center; | |
justify-content: center; | |
gap: 1rem; | |
margin-top: 1rem; | |
} | |
.control-btn { | |
width: 40px; | |
height: 40px; | |
border-radius: 50%; | |
color: var(--text-primary); | |
transition: all var(--transition-fast); | |
} | |
.control-btn:hover:not(:disabled) { | |
background: var(--surface-light); | |
transform: scale(1.1); | |
} | |
.play-pause-btn { | |
width: 48px; | |
height: 48px; | |
background: var(--primary-color); | |
color: white; | |
} | |
.play-pause-btn:hover:not(:disabled) { | |
background: var(--primary-hover); | |
} | |
/* Volume control */ | |
.volume-control { | |
position: relative; | |
margin-left: auto; | |
} | |
.volume-slider-container { | |
position: absolute; | |
bottom: 100%; | |
left: 50%; | |
transform: translateX(-50%); | |
width: 120px; | |
padding: 1rem; | |
background: var(--surface-color); | |
border: 1px solid var(--surface-light); | |
border-radius: var(--radius-md); | |
box-shadow: var(--shadow-md); | |
opacity: 0; | |
visibility: hidden; | |
transition: all var(--transition-fast); | |
display: flex; | |
align-items: center; | |
justify-content: center; | |
} | |
.volume-control:hover .volume-slider-container { | |
opacity: 1; | |
visibility: visible; | |
transform: translateX(-50%) translateY(-8px); | |
} | |
/* Volume slider track */ | |
.volume-slider-container .volume-track { | |
position: relative; | |
width: 100%; | |
height: 4px; | |
background: var(--surface-light); | |
border-radius: 2px; | |
overflow: hidden; | |
} | |
/* Volume progress bar */ | |
.volume-progress { | |
position: absolute; | |
left: 0; | |
top: 0; | |
height: 100%; | |
background: var(--primary-color); | |
border-radius: 2px; | |
pointer-events: none; | |
} | |
/* Volume handle */ | |
.volume-handle { | |
position: absolute; | |
top: 50%; | |
transform: translate(-50%, -50%); | |
width: 12px; | |
height: 12px; | |
background: var(--primary-color); | |
border: 2px solid white; | |
border-radius: 50%; | |
box-shadow: var(--shadow-sm); | |
pointer-events: none; | |
} | |
/* Volume input range styling */ | |
#volume { | |
position: absolute; | |
top: 0; | |
left: 0; | |
width: 100%; | |
height: 100%; | |
opacity: 0; | |
cursor: pointer; | |
margin: 0; | |
padding: 0; | |
} | |
/* Keyboard shortcuts */ | |
.keyboard-shortcuts { | |
position: fixed; | |
bottom: 2rem; | |
left: 2rem; | |
background: var(--surface-color); | |
backdrop-filter: blur(12px); | |
border-radius: var(--radius-lg); | |
padding: 1.5rem; | |
box-shadow: var(--shadow-lg); | |
border: 1px solid var(--surface-light); | |
z-index: 90; | |
} | |
.shortcut-list { | |
display: flex; | |
flex-direction: column; | |
gap: 0.75rem; | |
margin-top: 1rem; | |
} | |
.shortcut-item { | |
display: flex; | |
align-items: center; | |
gap: 1rem; | |
} | |
.key { | |
background: var(--surface-light); | |
padding: 0.25rem 0.5rem; | |
border-radius: var(--radius-sm); | |
font-size: 0.9rem; | |
min-width: 24px; | |
text-align: center; | |
} | |
/* Mobile responsiveness */ | |
@media (max-width: 768px) { | |
.main-content { | |
width: 100%; | |
right: -100%; | |
padding: 1rem; | |
} | |
.main-content.visible { | |
right: 0; | |
} | |
.controls-container { | |
bottom: 0; | |
border-radius: var(--radius-lg) var(--radius-lg) 0 0; | |
padding: 1rem; | |
} | |
.keyboard-shortcuts { | |
display: none; | |
} | |
.volume-control { | |
display: none; | |
} | |
} | |
/* Animations */ | |
@keyframes spin { | |
to { | |
transform: rotate(360deg); | |
} | |
} | |
@keyframes pulse { | |
0% { | |
transform: scale(1); | |
} | |
50% { | |
transform: scale(1.05); | |
} | |
100% { | |
transform: scale(1); | |
} | |
} | |
/* Scrollbar styling */ | |
::-webkit-scrollbar { | |
width: 8px; | |
} | |
::-webkit-scrollbar-track { | |
background: var(--surface-light); | |
border-radius: 4px; | |
} | |
::-webkit-scrollbar-thumb { | |
background: var(--text-secondary); | |
border-radius: 4px; | |
} | |
::-webkit-scrollbar-thumb:hover { | |
background: var(--text-primary); | |
} | |
/* Fix visualization dropdown */ | |
.viz-type-dropdown { | |
position: fixed; | |
top: 70px; | |
right: 16px; | |
background: var(--surface-color); | |
backdrop-filter: blur(12px); | |
border-radius: var(--radius-lg); | |
padding: 1rem; | |
box-shadow: var(--shadow-lg); | |
z-index: 99; | |
width: 200px; | |
opacity: 0; | |
visibility: hidden; | |
transform: translateY(-10px); | |
transition: all var(--transition-normal); | |
border: 1px solid var(--surface-light); | |
} | |
.viz-type-dropdown.visible { | |
opacity: 1; | |
visibility: visible; | |
transform: translateY(0); | |
} | |
.viz-type-options { | |
display: flex; | |
flex-direction: column; | |
gap: 0.5rem; | |
} | |
.viz-type-options button { | |
display: flex; | |
align-items: center; | |
gap: 0.75rem; | |
background: transparent; | |
border: none; | |
color: var(--text-primary); | |
padding: 0.75rem 1rem; | |
text-align: left; | |
border-radius: var(--radius-md); | |
cursor: pointer; | |
transition: all var(--transition-fast); | |
width: 100%; | |
} | |
.viz-type-options button:hover { | |
background: var(--surface-light); | |
} | |
.viz-type-options button.active { | |
background: var(--primary-color); | |
color: white; | |
} | |
.viz-type-options button i { | |
width: 20px; | |
text-align: center; | |
} | |
/* Fix main content area */ | |
.main-content { | |
position: fixed; | |
top: 80px; | |
right: -420px; | |
width: 400px; | |
max-height: calc(100vh - 180px); | |
z-index: 10; | |
transition: all var(--transition-normal); | |
padding: 1rem; | |
pointer-events: none; | |
} | |
.main-content.visible { | |
right: 1rem; | |
pointer-events: all; | |
} | |
/* Fix upload area and playlist container */ | |
.upload-area, | |
.playlist-container { | |
background: var(--surface-color); | |
border-radius: var(--radius-lg); | |
border: 1px solid var(--surface-light); | |
backdrop-filter: blur(12px); | |
margin-bottom: 1rem; | |
overflow: hidden; | |
} | |
/* Fix controls container */ | |
.controls-container { | |
position: fixed; | |
bottom: 2rem; | |
left: 50%; | |
transform: translateX(-50%); | |
width: 90%; | |
max-width: 800px; | |
background: var(--surface-color); | |
backdrop-filter: blur(12px); | |
border-radius: var(--radius-lg); | |
padding: 1.5rem; | |
box-shadow: var(--shadow-lg); | |
border: 1px solid var(--surface-light); | |
z-index: 100; | |
} | |
/* Fix header */ | |
.app-header { | |
position: fixed; | |
top: 0; | |
left: 0; | |
right: 0; | |
display: flex; | |
justify-content: space-between; | |
align-items: center; | |
padding: 1rem 1.5rem; | |
background: var(--surface-color); | |
backdrop-filter: blur(12px); | |
z-index: 100; | |
box-shadow: var(--shadow-md); | |
border-bottom: 1px solid var(--surface-light); | |
} | |
/* Fix buttons and controls */ | |
.header-btn, | |
.control-btn, | |
.playlist-btn { | |
display: flex; | |
align-items: center; | |
justify-content: center; | |
border: 1px solid var(--surface-light); | |
} | |
/* Fix progress bars */ | |
.progress-bar { | |
background: var(--surface-light); | |
border: 1px solid var(--surface-light); | |
overflow: hidden; | |
} | |
.progress-handle { | |
width: 16px; | |
height: 16px; | |
background: var(--primary-color); | |
border: 2px solid white; | |
box-shadow: var(--shadow-md); | |
} | |
/* Fix volume control */ | |
.volume-slider-container { | |
width: 120px; | |
padding: 1rem; | |
background: var(--surface-color); | |
border: 1px solid var(--surface-light); | |
} | |
/* Fix tooltips */ | |
.tooltip { | |
background: var(--surface-color); | |
border: 1px solid var(--surface-light); | |
padding: 0.5rem 0.75rem; | |
font-size: 0.85rem; | |
white-space: nowrap; | |
pointer-events: none; | |
} | |
/* Fix keyboard shortcuts panel */ | |
.keyboard-shortcuts { | |
position: fixed; | |
bottom: 2rem; | |
left: 2rem; | |
background: var(--surface-color); | |
backdrop-filter: blur(12px); | |
border-radius: var(--radius-lg); | |
padding: 1.5rem; | |
box-shadow: var(--shadow-lg); | |
border: 1px solid var(--surface-light); | |
z-index: 90; | |
} | |
/* Fix toast notifications */ | |
.error-toast { | |
position: fixed; | |
top: 90px; | |
left: 50%; | |
transform: translateX(-50%) translateY(-100%); | |
background: var(--surface-color); | |
backdrop-filter: blur(12px); | |
border-radius: var(--radius-md); | |
padding: 1rem 2rem; | |
box-shadow: var(--shadow-lg); | |
border: 1px solid var(--surface-light); | |
z-index: 1000; | |
opacity: 0; | |
transition: all var(--transition-normal); | |
} | |
.error-toast.visible { | |
transform: translateX(-50%) translateY(0); | |
opacity: 1; | |
} | |
.error-toast.error { | |
border-color: var(--error-color); | |
color: var(--error-color); | |
} | |
.error-toast.success { | |
border-color: var(--success-color); | |
color: var(--success-color); | |
} | |
/* Fix light theme colors */ | |
[data-theme="light"] { | |
--surface-light: rgba(0, 0, 0, 0.1); | |
--surface-color: rgba(255, 255, 255, 0.9); | |
} | |
/* Prevent content shifting */ | |
body { | |
overflow: hidden; | |
margin: 0; | |
padding: 0; | |
font-family: 'Inter', sans-serif; | |
background: var(--bg-color); | |
color: var(--text-primary); | |
} | |
canvas { | |
position: fixed ; | |
top: 0; | |
left: 0; | |
z-index: 1; | |
} | |
/* Add these styles for the no-tracks message */ | |
.no-tracks-message { | |
display: flex; | |
flex-direction: column; | |
align-items: center; | |
justify-content: center; | |
padding: 2rem; | |
text-align: center; | |
color: var(--text-secondary); | |
} | |
.no-tracks-message i { | |
font-size: 2rem; | |
margin-bottom: 1rem; | |
} | |
.no-tracks-message p { | |
margin: 0 0 1rem 0; | |
} | |
.no-tracks-message .upload-btn { | |
padding: 0.5rem 1rem; | |
background: var(--primary-color); | |
color: white; | |
border: none; | |
border-radius: var(--radius-md); | |
cursor: pointer; | |
transition: all var(--transition-fast); | |
} | |
.no-tracks-message .upload-btn:hover { | |
background: var(--primary-hover); | |
transform: translateY(-2px); | |
} | |
/* Style the file input and upload button */ | |
#audio-upload { | |
display: none; /* Hide the default input */ | |
} | |
.upload-content .upload-btn, | |
.no-tracks-message .upload-btn { | |
padding: 0.75rem 1.5rem; | |
background: var(--primary-color); | |
color: white; | |
border: none; | |
border-radius: var(--radius-md); | |
cursor: pointer; | |
transition: all var(--transition-fast); | |
font-weight: 500; | |
display: flex; | |
align-items: center; | |
gap: 0.5rem; | |
} | |
.upload-content .upload-btn:hover, | |
.no-tracks-message .upload-btn:hover { | |
background: var(--primary-hover); | |
transform: translateY(-2px); | |
} | |
/* Fix dark mode control buttons */ | |
[data-theme="dark"] .control-btn { | |
background: var(--surface-light); | |
color: var(--text-primary); | |
border: 1px solid rgba(255, 255, 255, 0.1); | |
} | |
[data-theme="dark"] .control-btn:hover:not(:disabled) { | |
background: rgba(255, 255, 255, 0.15); | |
border-color: rgba(255, 255, 255, 0.2); | |
} | |
[data-theme="dark"] .control-btn:disabled { | |
opacity: 0.5; | |
cursor: not-allowed; | |
} | |
/* Fix volume button styling */ | |
.volume-btn { | |
width: 40px; | |
height: 40px; | |
border-radius: 50%; | |
background: var(--surface-light); | |
color: var(--text-primary); | |
border: 1px solid var(--surface-light); | |
transition: all var(--transition-fast); | |
display: flex; | |
align-items: center; | |
justify-content: center; | |
cursor: pointer; | |
} | |
.volume-btn:hover { | |
background: var(--surface-light); | |
transform: translateY(-2px); | |
} | |
/* Dark mode volume button */ | |
[data-theme="dark"] .volume-btn { | |
background: var(--surface-light); | |
color: var(--text-primary); | |
border: 1px solid rgba(255, 255, 255, 0.1); | |
} | |
[data-theme="dark"] .volume-btn:hover { | |
background: rgba(255, 255, 255, 0.15); | |
border-color: rgba(255, 255, 255, 0.2); | |
} | |
/* Volume slider improvements */ | |
.volume-slider-container { | |
width: 120px; | |
padding: 1rem; | |
background: var(--surface-color); | |
border: 1px solid var(--surface-light); | |
border-radius: var(--radius-md); | |
box-shadow: var(--shadow-md); | |
display: flex; | |
align-items: center; | |
gap: 0.5rem; | |
} | |
/* Volume progress bar */ | |
.volume-progress { | |
position: absolute; | |
left: 0; | |
top: 50%; | |
transform: translateY(-50%); | |
height: 4px; | |
background: var(--primary-color); | |
border-radius: 2px; | |
pointer-events: none; | |
} | |
/* Volume handle */ | |
.volume-handle { | |
position: absolute; | |
top: 50%; | |
transform: translate(-50%, -50%); | |
width: 12px; | |
height: 12px; | |
background: var(--primary-color); | |
border: 2px solid white; | |
border-radius: 50%; | |
box-shadow: var(--shadow-sm); | |
pointer-events: none; | |
} | |
/* Volume input range styling */ | |
#volume { | |
width: 100%; | |
-webkit-appearance: none; | |
background: transparent; | |
cursor: pointer; | |
} | |
#volume::-webkit-slider-runnable-track { | |
width: 100%; | |
height: 4px; | |
background: var(--surface-light); | |
border-radius: 2px; | |
border: none; | |
} | |
#volume::-webkit-slider-thumb { | |
-webkit-appearance: none; | |
height: 0; | |
width: 0; | |
} | |
#volume::-moz-range-track { | |
width: 100%; | |
height: 4px; | |
background: var(--surface-light); | |
border-radius: 2px; | |
border: none; | |
} | |
#volume::-moz-range-thumb { | |
height: 0; | |
width: 0; | |
border: none; | |
} | |
/* Playlist item artwork */ | |
.playlist-item .track-info { | |
display: flex; | |
align-items: center; | |
gap: 1rem; | |
width: 100%; | |
} | |
.playlist-item .track-number { | |
width: 24px; | |
text-align: center; | |
color: var(--text-secondary); | |
font-size: 0.9rem; | |
} | |
.playlist-item .track-artwork { | |
width: 40px; | |
height: 40px; | |
min-width: 40px; | |
} | |
/* Active track styling */ | |
.playlist-item.active .track-artwork { | |
border-color: var(--primary-color); | |
} | |
.playlist-item.active .track-artwork i { | |
color: var(--primary-color); | |
} | |
/* Now playing info artwork */ | |
.now-playing-info .track-artwork { | |
width: 48px; | |
height: 48px; | |
min-width: 48px; | |
border-radius: var(--radius-md); | |
} | |
.now-playing-info .track-artwork i { | |
font-size: 1.75rem; | |
} | |
/* Dark mode adjustments */ | |
[data-theme="dark"] .track-artwork { | |
border-color: rgba(255, 255, 255, 0.1); | |
} | |
[data-theme="dark"] .playlist-item.active .track-artwork { | |
border-color: var(--primary-color); | |
background: rgba(76, 175, 80, 0.1); | |
} |