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); | |
| } |