diff --git a/webui/static/script.js b/webui/static/script.js index 6382caea..33fc4636 100644 --- a/webui/static/script.js +++ b/webui/static/script.js @@ -1815,7 +1815,7 @@ function displayDownloadsResults(results) {
- +
`; diff --git a/webui/static/style.css b/webui/static/style.css index 0d167c57..759c65fb 100644 --- a/webui/static/style.css +++ b/webui/static/style.css @@ -2444,24 +2444,55 @@ body { /* Single Track Card (SearchResultItem) */ .track-result-card { - 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: 8px 4px; - padding: 16px; + /* 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: 16px; - transition: all 0.2s ease; + 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 { - background: linear-gradient(to bottom, - rgba(55, 55, 60, 0.98), - rgba(45, 45, 50, 1.0)); - border: 1px solid rgba(29, 185, 84, 0.8); + /* 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 { @@ -2514,40 +2545,56 @@ body { flex-shrink: 0; } -.track-download-btn { - background: linear-gradient(to bottom, - rgba(29, 185, 84, 0.95), - rgba(24, 156, 71, 0.9)); - border: 2px solid rgba(29, 185, 84, 0.3); - border-radius: 23px; - color: #000000; - font-size: 14px; - font-weight: bold; - padding: 8px 16px; - cursor: pointer; - transition: all 0.2s ease; -} - -.track-download-btn:hover { - background: linear-gradient(to bottom, - rgba(30, 215, 96, 1.0), - rgba(25, 180, 80, 1.0)); -} +/* Track download button now uses shared neo-button styling above */ /* Album Card (AlbumResultItem) */ .album-result-card { - 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: 8px 4px; - padding: 18px; - transition: all 0.2s ease; + /* 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 { - border: 1px solid rgba(29, 185, 84, 0.8); + /* 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 { @@ -2606,25 +2653,7 @@ body { flex-shrink: 0; } -.album-download-btn { - background: linear-gradient(to bottom, - rgba(29, 185, 84, 0.95), - rgba(24, 156, 71, 0.9)); - border: 2px solid rgba(29, 185, 84, 0.3); - border-radius: 23px; - color: #000000; - font-size: 15px; - font-weight: bold; - padding: 10px 20px; - cursor: pointer; - transition: all 0.2s ease; -} - -.album-download-btn:hover { - background: linear-gradient(to bottom, - rgba(30, 215, 96, 1.0), - rgba(25, 180, 80, 1.0)); -} +/* Album download button now uses shared neo-button styling above */ /* Album Expansion Functionality */ .album-card-header { @@ -2648,27 +2677,45 @@ body { /* Track List within Albums */ .album-track-list { - margin-top: 12px; - padding-top: 12px; - border-top: 1px solid rgba(75, 75, 82, 0.3); + margin-top: 16px; + padding-top: 16px; + border-top: 1px solid rgba(255, 255, 255, 0.08); } -/* Individual Track Items (TrackItem) */ +/* Individual Track Items (TrackItem) - Subtle glassmorphism */ .track-item { - background: rgba(40, 40, 40, 0.5); - border-radius: 8px; - border: 1px solid rgba(60, 60, 60, 0.3); - padding: 10px; - margin-bottom: 6px; + 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; - transition: all 0.2s ease; + + /* 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: rgba(50, 50, 50, 0.7); - border: 1px solid rgba(29, 185, 84, 0.5); + 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 { @@ -3009,83 +3056,133 @@ body { } /* =============================== - STREAMING BUTTON STYLES + MODAL-STYLE BUTTON STYLES =============================== */ - -/* Track stream buttons */ -.track-stream-btn { - background: linear-gradient(to bottom, rgba(29, 185, 84, 0.1), rgba(25, 155, 71, 0.2)); - border: 1px solid rgba(29, 185, 84, 0.4); - color: rgba(29, 185, 84, 0.9); - border-radius: 6px; - padding: 4px 8px; - font-size: 11px; +/* 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; - min-width: 24px; - height: 24px; + 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: linear-gradient(to bottom, rgba(29, 185, 84, 0.2), rgba(25, 155, 71, 0.3)); - border-color: rgba(29, 185, 84, 0.6); - color: rgba(29, 185, 84, 1); - transform: scale(1.05); + background: rgba(255, 255, 255, 0.2); + color: #ffffff; + transform: translateY(-1px); } -/* Album stream buttons */ +/* 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 { - background: linear-gradient(to bottom, rgba(29, 185, 84, 0.1), rgba(25, 155, 71, 0.2)); - border: 1px solid rgba(29, 185, 84, 0.4); - color: rgba(29, 185, 84, 0.9); - border-radius: 8px; - padding: 8px 16px; - font-size: 12px; + 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: linear-gradient(to bottom, rgba(29, 185, 84, 0.2), rgba(25, 155, 71, 0.3)); - border-color: rgba(29, 185, 84, 0.6); - color: rgba(29, 185, 84, 1); + background: rgba(255, 255, 255, 0.2); + color: #ffffff; transform: translateY(-1px); - box-shadow: 0 2px 8px rgba(29, 185, 84, 0.2); } -/* Loading states for stream buttons */ +/* Disabled states - modal style */ .track-stream-btn:disabled, -.album-stream-btn:disabled { - background: linear-gradient(to bottom, rgba(120, 120, 120, 0.2), rgba(100, 100, 100, 0.3)); - border-color: rgba(120, 120, 120, 0.3); +.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; } -/* Active/playing states */ +/* Playing states - modal style */ .track-stream-btn.playing, .album-stream-btn.playing { - background: linear-gradient(to bottom, rgba(29, 185, 84, 0.3), rgba(25, 155, 71, 0.4)); - border-color: rgba(29, 185, 84, 0.8); + background: #1db954; color: #ffffff; - box-shadow: 0 0 8px rgba(29, 185, 84, 0.4); } +/* Loading states - modal style */ .track-stream-btn.loading, .album-stream-btn.loading { - background: linear-gradient(to bottom, rgba(255, 193, 7, 0.2), rgba(255, 152, 0, 0.3)); - border-color: rgba(255, 193, 7, 0.5); - color: rgba(255, 193, 7, 0.9); + background: rgba(255, 193, 7, 0.9); + color: #000000; animation: pulse-loading 1.5s infinite; } @@ -3095,44 +3192,3 @@ body { 100% { opacity: 0.7; } } -.track-matched-btn { - background: linear-gradient(to bottom, #9333ea, #7c28c0); - border: 1px solid rgba(147, 51, 234, 0.3); - border-radius: 6px; - color: #fff; - padding: 4px 8px; - font-size: 11px; - font-weight: 600; - cursor: pointer; - transition: all 0.2s ease; - display: inline-flex; - align-items: center; - justify-content: center; - min-width: 24px; - height: 24px; -} - -.track-matched-btn:hover { - background: linear-gradient(to bottom, #a747fe, #903fdd); - transform: scale(1.05); -} - -.album-matched-btn { - background: linear-gradient(to bottom, #9333ea, #7c28c0); - border: 2px solid rgba(147, 51, 234, 0.3); - border-radius: 23px; - color: #fff; - padding: 10px 20px; - font-size: 15px; - font-weight: bold; - cursor: pointer; - transition: all 0.2s ease; - display: inline-flex; - align-items: center; - justify-content: center; -} - -.album-matched-btn:hover { - background: linear-gradient(to bottom, #a747fe, #903fdd); - transform: scale(1.05); -}