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