Spaces:
Sleeping
Sleeping
| :root { | |
| /* Bootstrap-inspired color palette */ | |
| --primary-color: #0d6efd; | |
| --primary-hover: #0b5ed7; | |
| --secondary-color: #6c757d; | |
| --success-color: #198754; | |
| --info-color: #0dcaf0; | |
| --warning-color: #ffc107; | |
| --danger-color: #dc3545; | |
| --light-color: #f8f9fa; | |
| --dark-color: #212529; | |
| --body-bg: #f8f9fa; | |
| --sidebar-width: 250px; | |
| /* Additional theme colors */ | |
| --border-color: #dee2e6; | |
| --text-muted: #6c757d; | |
| --component-bg: #ffffff; | |
| --hover-bg: #e9ecef; | |
| } | |
| * { | |
| margin: 0; | |
| padding: 0; | |
| box-sizing: border-box; | |
| } | |
| body { | |
| font-family: system-ui, -apple-system, "Segoe UI", Roboto, "Helvetica Neue", Arial; | |
| background: var(--body-bg); | |
| color: var(--dark-color); | |
| line-height: 1.5; | |
| } | |
| .container { | |
| display: grid; | |
| grid-template-columns: var(--sidebar-width) 1fr; | |
| grid-template-rows: 1fr auto; | |
| min-height: 100vh; | |
| gap: 1rem; | |
| padding: 1rem; | |
| transition: all 0.3s ease; | |
| } | |
| .music-player { | |
| position: fixed; | |
| bottom: 0; | |
| left: 0; | |
| right: 0; | |
| background: var(--component-bg); | |
| padding: 1rem; | |
| box-shadow: 0 -2px 10px rgba(0, 0, 0, 0.1); | |
| z-index: 100; | |
| border-top: 1px solid var(--border-color); | |
| } | |
| .now-playing { | |
| display: grid; | |
| grid-template-columns: auto 1fr auto; | |
| gap: 1rem; | |
| align-items: center; | |
| } | |
| #album-art { | |
| width: 60px; | |
| height: 60px; | |
| border-radius: 8px; | |
| object-fit: cover; | |
| } | |
| .player-header h1 { | |
| margin-bottom: 2rem; | |
| color: #1a73e8; | |
| } | |
| .track-info { | |
| flex: 1; | |
| cursor: pointer; | |
| display: flex; | |
| flex-direction: column; | |
| gap: 0.25rem; | |
| } | |
| #track-title { | |
| font-size: 1.5rem; | |
| font-weight: bold; | |
| margin-bottom: 0.5rem; | |
| } | |
| #track-artist, #track-album { | |
| color: #666; | |
| margin-bottom: 0.5rem; | |
| } | |
| .player-controls { | |
| display: flex; | |
| flex-direction: column; | |
| gap: 0.5rem; | |
| padding: 0.5rem 0; | |
| } | |
| .control-buttons { | |
| display: flex; | |
| align-items: center; | |
| justify-content: center; | |
| gap: 1.5rem; | |
| } | |
| .play-btn { | |
| width: 50px; | |
| height: 50px; | |
| border-radius: 50%; | |
| background: var(--primary-color); | |
| color: white; | |
| border: none; | |
| display: flex; | |
| align-items: center; | |
| justify-content: center; | |
| cursor: pointer; | |
| transition: transform 0.2s ease; | |
| } | |
| .play-btn:hover { | |
| background: var(--primary-hover); | |
| transform: scale(1.1); | |
| } | |
| .time-control { | |
| display: flex; | |
| align-items: center; | |
| gap: 1rem; | |
| margin-bottom: 1rem; | |
| } | |
| #seek-slider { | |
| flex: 1; | |
| } | |
| button { | |
| background: none; | |
| border: none; | |
| cursor: pointer; | |
| font-size: 1.5rem; | |
| color: var(--primary-color); | |
| padding: 0.5rem; | |
| border-radius: 50%; | |
| transition: background-color 0.3s; | |
| } | |
| button:hover { | |
| background-color: var(--hover-bg); | |
| } | |
| .volume-control { | |
| display: flex; | |
| align-items: center; | |
| gap: 0.5rem; | |
| margin-left: 2rem; | |
| } | |
| #volume-slider { | |
| width: 100px; | |
| } | |
| .sidebar { | |
| background: var(--component-bg); | |
| border-radius: 12px; | |
| padding: 1rem; | |
| box-shadow: 0 4px 6px rgba(0, 0, 0, 0.1); | |
| height: calc(100vh - 2rem); | |
| position: sticky; | |
| top: 1rem; | |
| overflow-y: auto; | |
| border: 1px solid var(--border-color); | |
| } | |
| .nav-menu, .playlist-menu { | |
| list-style: none; | |
| padding: 0; | |
| margin: 1rem 0; | |
| } | |
| .nav-menu li a, .playlist-menu li a { | |
| display: block; | |
| padding: 0.75rem 1rem; | |
| color: var(--dark-color); | |
| text-decoration: none; | |
| border-radius: 6px; | |
| transition: background-color 0.3s; | |
| } | |
| .nav-menu li a:hover, .playlist-menu li a:hover { | |
| background-color: var(--hover-bg); | |
| } | |
| .nav-menu li a.active { | |
| background-color: var(--primary-color); | |
| color: white; | |
| } | |
| .btn-new-playlist { | |
| width: 100%; | |
| padding: 0.75rem; | |
| background: none; | |
| border: 1px solid var(--primary-color); | |
| color: var(--primary-color); | |
| border-radius: 6px; | |
| cursor: pointer; | |
| transition: all 0.3s; | |
| } | |
| .btn-new-playlist:hover { | |
| background: var(--primary-color); | |
| color: white; | |
| } | |
| .main-content { | |
| background: white; | |
| border-radius: 12px; | |
| padding: 1rem; | |
| box-shadow: 0 4px 6px rgba(0, 0, 0, 0.1); | |
| overflow-y: auto; | |
| } | |
| .view-header { | |
| display: flex; | |
| justify-content: space-between; | |
| align-items: center; | |
| margin-bottom: 2rem; | |
| } | |
| .search-box { | |
| position: relative; | |
| } | |
| .search-box input { | |
| padding: 0.5rem 2rem 0.5rem 1rem; | |
| border: 1px solid var(--border-color); | |
| border-radius: 20px; | |
| width: 200px; | |
| background: var(--component-bg); | |
| } | |
| .search-box i { | |
| position: absolute; | |
| right: 0.75rem; | |
| top: 50%; | |
| transform: translateY(-50%); | |
| color: #666; | |
| } | |
| .album-grid, .artist-grid { | |
| display: grid; | |
| grid-template-columns: repeat(auto-fill, minmax(160px, 1fr)); | |
| gap: 1.5rem; | |
| padding: 1rem; | |
| } | |
| .album-card, .artist-card { | |
| text-align: center; | |
| cursor: pointer; | |
| transition: transform 0.3s; | |
| background: var(--component-bg); | |
| padding: 1rem; | |
| border-radius: 8px; | |
| border: 1px solid var(--border-color); | |
| } | |
| .album-card:hover, .artist-card:hover { | |
| transform: translateY(-5px); | |
| } | |
| .album-art, .artist-image { | |
| width: 180px; | |
| height: 180px; | |
| border-radius: 8px; | |
| margin-bottom: 0.5rem; | |
| object-fit: cover; | |
| } | |
| .track-list { | |
| display: grid; | |
| gap: 0.5rem; | |
| padding: 1rem; | |
| } | |
| .music-item { | |
| display: grid; | |
| grid-template-columns: auto 1fr auto; | |
| align-items: center; | |
| padding: 0.75rem; | |
| border-radius: 8px; | |
| background: var(--component-bg); | |
| transition: transform 0.2s ease; | |
| border: 1px solid var(--border-color); | |
| } | |
| .music-item:hover { | |
| border-color: var(--primary-color); | |
| transform: translateX(5px); | |
| } | |
| .music-item.playing { | |
| background-color: var(--primary-color); | |
| color: white; | |
| } | |
| .music-item.playing .track-artist { | |
| color: rgba(255, 255, 255, 0.8); | |
| } | |
| input[type="range"] { | |
| -webkit-appearance: none; | |
| appearance: none; | |
| height: 5px; | |
| background: #ddd; | |
| border-radius: 5px; | |
| cursor: pointer; | |
| } | |
| input[type="range"]::-webkit-slider-thumb { | |
| -webkit-appearance: none; | |
| width: 15px; | |
| height: 15px; | |
| background: var(--primary-color); | |
| border-radius: 50%; | |
| } | |
| .modal { | |
| display: none; | |
| position: fixed; | |
| top: 0; | |
| left: 0; | |
| width: 100%; | |
| height: 100%; | |
| background: rgba(0, 0, 0, 0.5); | |
| align-items: center; | |
| justify-content: center; | |
| } | |
| .modal-content { | |
| background: var(--component-bg); | |
| padding: 2rem; | |
| border-radius: 12px; | |
| width: 400px; | |
| border: none; | |
| } | |
| .modal-content input { | |
| width: 100%; | |
| padding: 0.75rem; | |
| margin: 1rem 0; | |
| border: 1px solid #ddd; | |
| border-radius: 6px; | |
| } | |
| .modal-buttons { | |
| display: flex; | |
| justify-content: flex-end; | |
| gap: 1rem; | |
| } | |
| .modal-buttons button { | |
| padding: 0.5rem 1rem; | |
| border-radius: 6px; | |
| cursor: pointer; | |
| } | |
| #save-playlist { | |
| background: var(--primary-color); | |
| color: white; | |
| border: none; | |
| } | |
| #save-playlist:hover { | |
| background: var(--primary-hover); | |
| } | |
| #cancel-playlist { | |
| background: none; | |
| border: 1px solid #ddd; | |
| } | |
| .track-actions { | |
| display: flex; | |
| align-items: center; | |
| } | |
| .track-name { | |
| font-weight: 500; | |
| } | |
| .track-artist { | |
| color: var(--text-muted); | |
| font-size: 0.9em; | |
| } | |
| .playlist-menu-popup { | |
| background: white; | |
| border-radius: 8px; | |
| box-shadow: 0 2px 10px rgba(0, 0, 0, 0.1); | |
| z-index: 1000; | |
| min-width: 200px; | |
| } | |
| .menu-items { | |
| padding: 0.5rem; | |
| } | |
| .menu-item { | |
| padding: 0.75rem 1rem; | |
| cursor: pointer; | |
| border-radius: 4px; | |
| display: flex; | |
| align-items: center; | |
| gap: 0.5rem; | |
| } | |
| .menu-item:hover { | |
| background-color: var(--hover-bg); | |
| } | |
| .notification { | |
| position: fixed; | |
| bottom: 20px; | |
| right: 20px; | |
| background: var(--primary-color); | |
| color: white; | |
| padding: 0.75rem 1.5rem; | |
| border-radius: 4px; | |
| box-shadow: 0 2px 10px rgba(0, 0, 0, 0.1); | |
| animation: slide-in 0.3s ease-out; | |
| z-index: 1000; | |
| } | |
| .notification.fade-out { | |
| animation: fade-out 0.3s ease-out; | |
| } | |
| .playlist-grid { | |
| display: grid; | |
| grid-template-columns: repeat(auto-fill, minmax(200px, 1fr)); | |
| gap: 1.5rem; | |
| padding: 1rem; | |
| } | |
| .playlist-card { | |
| background: white; | |
| border-radius: 8px; | |
| padding: 1rem; | |
| text-align: center; | |
| cursor: pointer; | |
| position: relative; | |
| transition: transform 0.3s; | |
| } | |
| .playlist-card:hover { | |
| transform: translateY(-5px); | |
| } | |
| .playlist-art { | |
| width: 150px; | |
| height: 150px; | |
| background: #f0f2f5; | |
| border-radius: 8px; | |
| margin: 0 auto 1rem; | |
| display: flex; | |
| align-items: center; | |
| justify-content: center; | |
| } | |
| .playlist-art i { | |
| font-size: 3rem; | |
| color: #1a73e8; | |
| } | |
| .delete-playlist { | |
| position: absolute; | |
| top: 0.5rem; | |
| right: 0.5rem; | |
| background: none; | |
| border: none; | |
| color: #666; | |
| padding: 0.5rem; | |
| cursor: pointer; | |
| opacity: 0; | |
| transition: opacity 0.3s; | |
| } | |
| .playlist-card:hover .delete-playlist { | |
| opacity: 1; | |
| } | |
| @keyframes slide-in { | |
| from { | |
| transform: translateX(100%); | |
| opacity: 0; | |
| } | |
| to { | |
| transform: translateX(0); | |
| opacity: 1; | |
| } | |
| } | |
| @keyframes fade-out { | |
| from { | |
| transform: translateX(0); | |
| opacity: 1; | |
| } | |
| to { | |
| transform: translateX(100%); | |
| opacity: 0; | |
| } | |
| } | |
| .menu-trigger { | |
| padding: 0.5rem; | |
| opacity: 0; | |
| transition: opacity 0.3s; | |
| color: #666; | |
| } | |
| .music-item:hover .menu-trigger { | |
| opacity: 1; | |
| } | |
| .context-menu { | |
| background: white; | |
| border-radius: 8px; | |
| box-shadow: 0 2px 10px rgba(0, 0, 0, 0.1); | |
| z-index: 1000; | |
| min-width: 200px; | |
| overflow: hidden; | |
| } | |
| .menu-items { | |
| padding: 0.5rem 0; | |
| } | |
| .menu-item { | |
| padding: 0.75rem 1rem; | |
| cursor: pointer; | |
| display: flex; | |
| align-items: center; | |
| gap: 0.75rem; | |
| transition: background-color 0.2s; | |
| } | |
| .menu-item:hover { | |
| background-color: var(--hover-bg); | |
| } | |
| .menu-item i { | |
| width: 20px; | |
| text-align: center; | |
| color: #666; | |
| } | |
| .menu-separator { | |
| height: 1px; | |
| background-color: #eee; | |
| margin: 0.5rem 0; | |
| } | |
| .lyrics-container { | |
| flex: 1; | |
| max-width: 400px; | |
| margin-left: 2rem; | |
| display: flex; | |
| flex-direction: column; | |
| max-height: 200px; | |
| } | |
| .lyrics-header { | |
| display: flex; | |
| justify-content: space-between; | |
| align-items: center; | |
| margin-bottom: 1rem; | |
| } | |
| .lyrics-toggle { | |
| background: none; | |
| border: 1px solid #ddd; | |
| padding: 0.5rem 1rem; | |
| border-radius: 4px; | |
| font-size: 0.9rem; | |
| } | |
| .lyrics-content { | |
| flex: 1; | |
| overflow-y: auto; | |
| padding-right: 1rem; | |
| line-height: 1.6; | |
| scroll-behavior: smooth; | |
| padding: 1rem; | |
| } | |
| .lyrics-line { | |
| margin-bottom: 0.5rem; | |
| transition: all 0.3s ease; | |
| cursor: pointer; | |
| padding: 0.5rem 1rem; | |
| border-radius: 4px; | |
| opacity: 0.7; | |
| } | |
| .lyrics-line:hover { | |
| background-color: var(--hover-bg); | |
| opacity: 1; | |
| } | |
| .lyrics-line.active { | |
| color: var(--primary-color); | |
| font-weight: bold; | |
| opacity: 1; | |
| background-color: var(--primary-color); | |
| } | |
| .playlist-header { | |
| display: flex; | |
| justify-content: space-between; | |
| align-items: center; | |
| padding: 1rem; | |
| background: #f8f9fa; | |
| border-radius: 8px; | |
| margin-bottom: 1rem; | |
| } | |
| .playlist-info { | |
| display: flex; | |
| align-items: center; | |
| gap: 1rem; | |
| } | |
| .playlist-icon { | |
| font-size: 2.5rem; | |
| color: #1a73e8; | |
| background: #e8f0fe; | |
| padding: 1rem; | |
| border-radius: 8px; | |
| } | |
| .play-playlist { | |
| background: var(--primary-color); | |
| color: white; | |
| padding: 0.75rem 1.5rem; | |
| border-radius: 20px; | |
| font-size: 1rem; | |
| } | |
| .play-playlist:hover { | |
| background: var(--primary-hover); | |
| } | |
| .playlist-count { | |
| color: #666; | |
| font-size: 0.9em; | |
| margin-left: 0.5rem; | |
| } | |
| #playlist-list a { | |
| display: flex; | |
| align-items: center; | |
| justify-content: space-between; | |
| } | |
| #playlist-list i { | |
| margin-right: 0.5rem; | |
| } | |
| .album-art-container, .artist-art-container { | |
| position: relative; | |
| width: 180px; | |
| height: 180px; | |
| margin-bottom: 0.5rem; | |
| } | |
| .album-art, .artist-image { | |
| width: 100%; | |
| height: 100%; | |
| border-radius: 8px; | |
| object-fit: cover; | |
| } | |
| .play-overlay { | |
| position: absolute; | |
| top: 50%; | |
| left: 50%; | |
| transform: translate(-50%, -50%); | |
| background: rgba(26, 115, 232, 0.9); | |
| color: white; | |
| width: 50px; | |
| height: 50px; | |
| border-radius: 50%; | |
| display: flex; | |
| align-items: center; | |
| justify-content: center; | |
| opacity: 0; | |
| transition: opacity 0.3s; | |
| cursor: pointer; | |
| border: none; | |
| font-size: 1.2rem; | |
| } | |
| .album-art-container:hover .play-overlay, | |
| .artist-art-container:hover .play-overlay { | |
| opacity: 1; | |
| } | |
| .album-info, .artist-info { | |
| cursor: pointer; | |
| } | |
| .album-card, .artist-card { | |
| display: flex; | |
| flex-direction: column; | |
| align-items: center; | |
| text-align: center; | |
| } | |
| .artist-image { | |
| background-color: #e8f0fe; | |
| } | |
| .artist-image[src="data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIyMDAiIGhlaWdodD0iMjAwIiB2aWV3Qm94PSIwIDAgMjAwIDIwMCI+PHJlY3Qgd2lkdGg9IjIwMCIgaGVpZ2h0PSIyMDAiIGZpbGw9IiNlOWVjZWYiLz48dGV4dCB4PSI1MCUiIHk9IjUwJSIgc3R5bGU9ImZvbnQtZmFtaWx5OiBBcmlhbDsgZm9udC1zaXplOiAyMHB4OyBmaWxsOiAjNmM3NTdkOyBkb21pbmFudC1iYXNlbGluZTogbWlkZGxlOyB0ZXh0LWFuY2hvcjogbWlkZGxlOyI+Tm8gQWxidW0gQXJ0PC90ZXh0Pjwvc3ZnPg=="] { | |
| background: #e8f0fe; | |
| padding: 2rem; | |
| } | |
| .existing-playlists { | |
| max-height: 200px; | |
| overflow-y: auto; | |
| margin-bottom: 1rem; | |
| border-bottom: 1px solid #eee; | |
| } | |
| .existing-playlist-item { | |
| padding: 0.75rem; | |
| cursor: pointer; | |
| display: flex; | |
| align-items: center; | |
| gap: 0.5rem; | |
| border-radius: 4px; | |
| transition: background-color 0.2s; | |
| } | |
| .existing-playlist-item:hover { | |
| background-color: var(--hover-bg); | |
| } | |
| .existing-playlist-item i { | |
| color: #1a73e8; | |
| } | |
| .new-playlist-section { | |
| padding-top: 1rem; | |
| } | |
| .new-playlist-section h3 { | |
| margin-bottom: 0.75rem; | |
| font-size: 1rem; | |
| color: #666; | |
| } | |
| .album-header { | |
| padding: 2rem; | |
| margin-bottom: 2rem; | |
| background: #f8f9fa; | |
| border-radius: 12px; | |
| } | |
| .album-info-large { | |
| display: flex; | |
| gap: 2rem; | |
| align-items: flex-start; | |
| } | |
| .album-art-large { | |
| width: 200px; | |
| height: 200px; | |
| border-radius: 8px; | |
| object-fit: cover; | |
| } | |
| .album-details { | |
| flex: 1; | |
| } | |
| .album-details h2 { | |
| margin-bottom: 0.5rem; | |
| font-size: 2rem; | |
| } | |
| .album-details p { | |
| color: #666; | |
| margin-bottom: 0.5rem; | |
| } | |
| .play-album-btn { | |
| margin-top: 1rem; | |
| background: var(--primary-color); | |
| color: white; | |
| padding: 0.75rem 1.5rem; | |
| border-radius: 20px; | |
| font-size: 1rem; | |
| } | |
| .play-album-btn:hover { | |
| background: var(--primary-hover); | |
| } | |
| .track-number { | |
| color: #666; | |
| margin-right: 1rem; | |
| min-width: 2rem; | |
| } | |
| .music-item .track-info { | |
| display: flex; | |
| align-items: center; | |
| } | |
| /* Mobile menu button */ | |
| .mobile-menu-btn { | |
| display: none; | |
| position: fixed; | |
| top: 1rem; | |
| left: 1rem; | |
| z-index: 1000; | |
| background: var(--primary-color); | |
| border: none; | |
| padding: 0.5rem; | |
| border-radius: 50%; | |
| box-shadow: 0 2px 5px rgba(0, 0, 0, 0.2); | |
| cursor: pointer; | |
| color: white; | |
| } | |
| .mobile-menu-btn:hover { | |
| background: var(--primary-hover); | |
| } | |
| /* Media queries for responsive design */ | |
| @media (max-width: 768px) { | |
| .container { | |
| grid-template-columns: 1fr; | |
| } | |
| .mobile-menu-btn { | |
| display: block; | |
| } | |
| .sidebar { | |
| position: fixed; | |
| left: -100%; | |
| top: 0; | |
| bottom: 0; | |
| width: 80%; | |
| max-width: 300px; | |
| z-index: 1000; | |
| transition: left 0.3s ease; | |
| } | |
| .sidebar.active { | |
| left: 0; | |
| } | |
| .now-playing { | |
| grid-template-columns: auto 1fr; | |
| } | |
| .lyrics-container { | |
| display: none; | |
| } | |
| .main-content { | |
| margin-bottom: 120px; /* Space for player */ | |
| } | |
| } | |
| /* Dark mode support */ | |
| @media (prefers-color-scheme: dark) { | |
| :root { | |
| --body-bg: #212529; | |
| --component-bg: #343a40; | |
| --dark-color: #f8f9fa; | |
| --border-color: #495057; | |
| --hover-bg: #495057; | |
| --text-muted: #adb5bd; | |
| } | |
| .sidebar, | |
| .music-player, | |
| .music-item { | |
| background: var(--component-bg); | |
| } | |
| .modal-content { | |
| background: var(--component-bg); | |
| } | |
| input[type="text"] { | |
| background: var(--component-bg); | |
| color: var(--dark-color); | |
| border-color: var(--border-color); | |
| } | |
| .search-box input { | |
| background: var(--component-bg); | |
| color: var(--dark-color); | |
| } | |
| } | |
| .sidebar-overlay { | |
| position: fixed; | |
| top: 0; | |
| left: 0; | |
| right: 0; | |
| bottom: 0; | |
| background: rgba(0, 0, 0, 0.5); | |
| z-index: 999; | |
| display: none; | |
| } | |
| @media (max-width: 768px) { | |
| .sidebar-overlay { | |
| display: block; | |
| } | |
| } | |
| /* Improved mobile styles */ | |
| @media (max-width: 768px) { | |
| .mobile-menu-btn { | |
| background: var(--primary-color); | |
| color: white; | |
| } | |
| .mobile-menu-btn:hover { | |
| background: var(--primary-hover); | |
| } | |
| .sidebar { | |
| background: var(--component-bg); | |
| } | |
| .main-content { | |
| margin-top: 60px; | |
| } | |
| .music-player { | |
| padding: 0.75rem; | |
| } | |
| .volume-control { | |
| display: none; /* Hide volume on mobile */ | |
| } | |
| .control-buttons { | |
| padding: 0.5rem 0; | |
| } | |
| } | |
| /* Improved scrollbars */ | |
| ::-webkit-scrollbar { | |
| width: 8px; | |
| } | |
| ::-webkit-scrollbar-track { | |
| background: var(--body-bg); | |
| } | |
| ::-webkit-scrollbar-thumb { | |
| background: var(--secondary-color); | |
| border-radius: 4px; | |
| } | |
| ::-webkit-scrollbar-thumb:hover { | |
| background: var(--primary-color); | |
| } | |