/* Base Styles */ * { margin: 0; padding: 0; box-sizing: border-box; font-family: 'Helvetica Neue', Helvetica, Arial, sans-serif; } body { background-color: #121212; color: #ffffff; min-height: 100vh; line-height: 1.4; } /* Main App Container */ #app { max-width: 1200px; margin: 0 auto; padding: 20px; position: relative; z-index: 1; } /* Artist Header */ #artist-header { display: flex; gap: 20px; margin-bottom: 2rem; align-items: center; padding: 20px; border-bottom: 1px solid #2a2a2a; flex-wrap: wrap; border-radius: 8px; background: linear-gradient(135deg, rgba(0,0,0,0.5), transparent); } #artist-image { width: 200px; height: 200px; object-fit: cover; border-radius: 8px; flex-shrink: 0; box-shadow: 0 4px 8px rgba(0, 0, 0, 0.3); } #artist-info { flex: 1; min-width: 0; } #artist-name { font-size: 2rem; margin-bottom: 0.5rem; } #artist-stats { font-size: 1rem; color: #b3b3b3; margin-bottom: 0.5rem; } /* Albums Container */ #albums-container { margin-top: 2rem; } #albums-container h2 { font-size: 1.5rem; margin-bottom: 1rem; border-bottom: 1px solid #2a2a2a; padding-bottom: 0.5rem; } /* Album groups layout */ .album-groups { display: flex; flex-direction: column; gap: 2rem; } /* Album group section */ .album-group { margin-bottom: 1.5rem; } .album-group-header { display: flex; align-items: center; justify-content: space-between; margin-bottom: 1rem; } .album-group-header h3 { font-size: 1.3rem; position: relative; padding-bottom: 0.5rem; } .album-group-header h3::after { content: ''; position: absolute; left: 0; bottom: 0; width: 40px; height: 2px; background-color: var(--color-primary); } .group-download-btn { padding: 0.4rem 0.8rem; font-size: 0.9rem; } /* Albums grid layout */ .albums-list { display: grid; grid-template-columns: repeat(auto-fill, minmax(200px, 1fr)); gap: 1.5rem; margin-top: 1rem; } /* Album card styling */ .album-card { background-color: var(--color-surface); border-radius: var(--radius-md); overflow: hidden; transition: transform 0.2s ease, box-shadow 0.2s ease; position: relative; box-shadow: var(--shadow-sm); } .album-card:hover { transform: translateY(-5px); box-shadow: var(--shadow-md); } .album-cover { width: 100%; aspect-ratio: 1/1; object-fit: cover; transition: opacity 0.2s ease; } .album-info { padding: 0.75rem; } .album-title { font-weight: 600; margin-bottom: 0.25rem; white-space: nowrap; overflow: hidden; text-overflow: ellipsis; } .album-artist { font-size: 0.9rem; color: var(--color-text-secondary); white-space: nowrap; overflow: hidden; text-overflow: ellipsis; } /* Track Card (for Albums or Songs) */ .track { display: flex; align-items: center; padding: 1rem; background: #181818; border-radius: 8px; transition: background 0.3s ease; flex-wrap: wrap; box-shadow: 0 2px 4px rgba(0, 0, 0, 0.2); } .track:hover { background: #2a2a2a; } .track-number { width: 30px; font-size: 1rem; font-weight: 500; text-align: center; margin-right: 1rem; flex-shrink: 0; } .track-info { flex: 1; display: flex; flex-direction: column; min-width: 0; align-items: flex-start; } .track-name { font-size: 1rem; font-weight: bold; word-wrap: break-word; } .track-artist { font-size: 0.9rem; color: #b3b3b3; } .track-album { max-width: 200px; font-size: 0.9rem; color: #b3b3b3; margin-left: 1rem; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; text-align: right; } .track-duration { width: 60px; text-align: right; font-size: 0.9rem; color: #b3b3b3; margin-left: 1rem; flex-shrink: 0; } /* Loading and Error States */ .loading, .error { width: 100%; text-align: center; font-size: 1rem; padding: 1rem; } .error { color: #c0392b; } /* Utility Classes */ .hidden { display: none !important; } /* Unified Download Button Base Style */ .download-btn { background-color: #1db954; color: #fff; border: none; border-radius: 4px; padding: 0.5rem 1rem; font-size: 0.95rem; cursor: pointer; transition: background-color 0.2s ease, transform 0.2s ease; display: inline-flex; align-items: center; justify-content: center; margin: 0.5rem; } .download-btn:hover { background-color: #17a44b; } .download-btn:active { transform: scale(0.98); } /* Circular Variant for Compact Areas (e.g. album download buttons) */ .download-btn--circle { width: 32px; height: 32px; padding: 0; border-radius: 50%; font-size: 0; /* Hide any text */ background-color: #1db954; border: none; display: inline-flex; align-items: center; justify-content: center; cursor: pointer; transition: background-color 0.2s ease, transform 0.2s ease; margin: 0.5rem; } .download-btn--circle img { width: 20px; height: 20px; filter: brightness(0) invert(1); display: block; } .download-btn--circle:hover { background-color: #17a44b; transform: scale(1.05); } .download-btn--circle:active { transform: scale(0.98); } /* Home Button Styling */ .home-btn { background-color: transparent; border: none; cursor: pointer; margin-right: 1rem; padding: 0; } .home-btn img { width: 32px; height: 32px; filter: invert(1); transition: transform 0.2s ease; } .home-btn:hover img { transform: scale(1.05); } .home-btn:active img { transform: scale(0.98); } /* Watch Artist Button Styling */ .watch-btn { background-color: transparent; color: #ffffff; border: 1px solid #ffffff; border-radius: 4px; padding: 0.5rem 1rem; font-size: 0.95rem; cursor: pointer; transition: background-color 0.2s ease, color 0.2s ease, border-color 0.2s ease, transform 0.2s ease; display: inline-flex; align-items: center; justify-content: center; margin: 0.5rem; } .watch-btn:hover { background-color: #ffffff; color: #121212; border-color: #ffffff; } .watch-btn.watching { background-color: #1db954; /* Spotify green for "watching" state */ color: #ffffff; border-color: #1db954; } .watch-btn.watching:hover { background-color: #17a44b; /* Darker green on hover */ border-color: #17a44b; color: #ffffff; } .watch-btn:active { transform: scale(0.98); } /* Styling for icons within watch and sync buttons */ .watch-btn img, .sync-btn img { width: 16px; /* Adjust size as needed */ height: 16px; /* Adjust size as needed */ margin-right: 8px; /* Space between icon and text */ filter: brightness(0) invert(1); /* Make icons white */ } /* Responsive Styles */ /* Medium Devices (Tablets) */ @media (max-width: 768px) { #artist-header { flex-direction: column; align-items: center; text-align: center; } #artist-image { width: 180px; height: 180px; margin-bottom: 1rem; } .track { flex-direction: column; align-items: center; } .track-album, .track-duration { margin-left: 0; margin-top: 0.5rem; width: 100%; text-align: center; } .albums-list { grid-template-columns: repeat(auto-fill, minmax(160px, 1fr)); gap: 1rem; } .album-group-header { flex-direction: column; align-items: flex-start; } .group-download-btn { margin-top: 0.5rem; } } /* Small Devices (Mobile Phones) */ @media (max-width: 480px) { #app { padding: 10px; } #artist-name { font-size: 1.75rem; } .track { padding: 0.8rem; flex-direction: column; align-items: center; text-align: center; } .track-number { font-size: 0.9rem; margin-right: 0; margin-bottom: 0.5rem; } .track-info { align-items: center; } .track-album, .track-duration { margin-left: 0; margin-top: 0.5rem; width: 100%; text-align: center; } .albums-list { grid-template-columns: repeat(auto-fill, minmax(130px, 1fr)); gap: 0.75rem; } .album-info { padding: 0.5rem; } .album-title { font-size: 0.9rem; } .album-artist { font-size: 0.8rem; } } /* Prevent anchor links from appearing blue */ a { color: inherit; text-decoration: none; transition: color 0.2s ease; } a:hover, a:focus { color: #1db954; text-decoration: underline; } /* Toggle Known Status Button for Tracks/Albums */ .toggle-known-status-btn { background-color: transparent; border: 1px solid var(--color-text-secondary); color: var(--color-text-secondary); padding: 5px; border-radius: 50%; /* Make it circular */ cursor: pointer; display: flex; align-items: center; justify-content: center; width: 30px; /* Fixed size */ height: 30px; /* Fixed size */ transition: background-color 0.2s, border-color 0.2s, color 0.2s, opacity 0.2s; /* Added opacity */ /* opacity: 0; Initially hidden, JS will make it visible if artist is watched via persistent-album-action-btn */ } .toggle-known-status-btn img { width: 16px; /* Adjust icon size */ height: 16px; filter: brightness(0) invert(1); /* Make icon white consistently */ margin: 0; /* Ensure no accidental margin for centering */ } .toggle-known-status-btn:hover { border-color: var(--color-primary); background-color: rgba(var(--color-primary-rgb), 0.1); } .toggle-known-status-btn[data-status="known"] { /* Optional: specific styles if it's already known, e.g., a slightly different border */ border-color: var(--color-success); /* Green border for known items */ } .toggle-known-status-btn[data-status="missing"] { /* Optional: specific styles if it's missing, e.g., a warning color */ border-color: var(--color-warning); /* Orange border for missing items */ } .toggle-known-status-btn:active { transform: scale(0.95); } /* Ensure album download button also fits well within actions container */ .album-actions-container .album-download-btn { width: 30px; height: 30px; padding: 5px; /* Ensure padding doesn't make it too big */ } .album-actions-container .album-download-btn img { width: 16px; height: 16px; } /* Album actions container */ .album-actions-container { /* position: absolute; */ /* No longer needed if buttons are positioned individually */ /* bottom: 8px; */ /* right: 8px; */ /* display: flex; */ /* gap: 8px; */ /* background-color: rgba(0, 0, 0, 0.6); */ /* padding: 5px; */ /* border-radius: var(--radius-sm); */ /* opacity: 0; */ /* Ensure it doesn't hide buttons if it still wraps them elsewhere */ /* transition: opacity 0.2s ease-in-out; */ display: none; /* Hide this container if it solely relied on hover and now buttons are persistent */ } /* .album-card:hover .album-actions-container { */ /* opacity: 1; */ /* Remove this hover effect */ /* } */ /* Album card actions container - for persistent buttons at the bottom */ .album-card-actions { display: flex; justify-content: space-between; /* Pushes children to ends */ align-items: center; padding: 8px; /* Spacing around the buttons */ border-top: 1px solid var(--color-surface-darker, #2a2a2a); /* Separator line */ /* Ensure it takes up full width of the card if not already */ width: 100%; } /* Persistent action button (e.g., toggle known/missing) on album card - BOTTOM-LEFT */ .persistent-album-action-btn { /* position: absolute; */ /* No longer absolute */ /* bottom: 8px; */ /* left: 8px; */ /* z-index: 2; */ opacity: 1; /* Ensure it is visible */ /* Specific margin if needed, but flexbox space-between should handle it */ margin: 0; /* Reset any previous margins */ } /* Persistent download button on album card - BOTTOM-RIGHT */ .persistent-download-btn { /* position: absolute; */ /* No longer absolute */ /* bottom: 8px; */ /* right: 8px; */ /* z-index: 2; */ opacity: 1; /* Ensure it is visible */ /* Specific margin if needed, but flexbox space-between should handle it */ margin: 0; /* Reset any previous margins */ } .album-cover.album-missing-in-db { border: 3px dashed var(--color-warning); /* Example: orange dashed border */ opacity: 0.7; } /* NEW STYLES FOR BUTTON STATES */ .persistent-album-action-btn.status-missing { background-color: #d9534f; /* Bootstrap's btn-danger red */ border-color: #d43f3a; } .persistent-album-action-btn.status-missing:hover { background-color: #c9302c; border-color: #ac2925; } /* Ensure icon is white on colored background */ .persistent-album-action-btn.status-missing img { filter: brightness(0) invert(1); } .persistent-album-action-btn.status-known { background-color: #5cb85c; /* Bootstrap's btn-success green */ border-color: #4cae4c; } .persistent-album-action-btn.status-known:hover { background-color: #449d44; border-color: #398439; } /* Ensure icon is white on colored background */ .persistent-album-action-btn.status-known img { filter: brightness(0) invert(1); } /* END OF NEW STYLES */ /* Spinning Icon Animation */ @keyframes spin { 0% { transform: rotate(0deg); } 100% { transform: rotate(-360deg); } } .icon-spin { animation: spin 1s linear infinite; }