Skip to content

Commit d965942

Browse files
committed
feat: Enhance Now Playing tab background with new layered visual effects, including glass noise, specular highlights, and an animated shimmer.
1 parent a5ddf77 commit d965942

1 file changed

Lines changed: 64 additions & 28 deletions

File tree

client/src/Pages/Music/BottomPlayer/NowPlayingTab.jsx

Lines changed: 64 additions & 28 deletions
Original file line numberDiff line numberDiff line change
@@ -186,38 +186,54 @@ const NowPlayingTab = memo(({ currentSong }) => {
186186
const c1 = colors?.c1 || [35, 30, 45]
187187
const c2 = colors?.c2 || [30, 35, 40]
188188

189-
const imgShadowDesktop = `0 30px 80px rgba(0,0,0,0.5), 0 0 80px -20px rgba(${c1[0]},${c1[1]},${c1[2]},0.2)`
190-
const imgShadowMobile = `0 24px 60px rgba(0,0,0,0.5), 0 0 60px -15px rgba(${c1[0]},${c1[1]},${c1[2]},0.2)`
189+
const imgShadowDesktop = `0 30px 80px rgba(0,0,0,0.4), 0 0 0 1px rgba(255,255,255,0.05), 0 0 80px -20px rgba(${c1[0]},${c1[1]},${c1[2]},0.25)`
190+
const imgShadowMobile = `0 24px 60px rgba(0,0,0,0.4), 0 0 0 1px rgba(255,255,255,0.05), 0 0 60px -15px rgba(${c1[0]},${c1[1]},${c1[2]},0.25)`
191191

192192
const orbColor = (c, a) => ({
193193
background: `rgba(${c[0]},${c[1]},${c[2]},${a})`,
194194
transition: "background 2s ease-out",
195195
})
196196

197197
return (
198-
<div className="w-full h-full relative overflow-hidden bg-[#050505]">
199-
{/* Blurred album art background */}
198+
<div className="w-full h-full relative overflow-hidden bg-[#050508]">
199+
{/* Layer 1: Album art dissolved into pure color fields */}
200200
{images.previous && (
201201
<div
202202
className="absolute inset-0 bg-cover bg-center np-bg-fade-out"
203-
style={{ backgroundImage: `url(${images.previous})`, filter: "blur(60px) saturate(1.2) brightness(0.6)", transform: "scale(1.5)" }}
203+
style={{ backgroundImage: `url(${images.previous})`, filter: "blur(160px) saturate(1.4) brightness(0.65)", transform: "scale(2)" }}
204204
/>
205205
)}
206206
<div
207207
className={`absolute inset-0 bg-cover bg-center ${images.transitioning ? "np-bg-fade-in" : ""}`}
208-
style={{ backgroundImage: `url(${images.current})`, filter: "blur(60px) saturate(1.2) brightness(0.6)", transform: "scale(1.5)", transition: "background-image 0.5s ease" }}
208+
style={{ backgroundImage: `url(${images.current})`, filter: "blur(160px) saturate(1.4) brightness(0.65)", transform: "scale(2)", transition: "background-image 0.6s ease" }}
209209
/>
210210

211-
{/* Animated orbs for subtle movement */}
211+
{/* Layer 2: Glass noise texture */}
212+
<div className="absolute inset-0 np-glass-noise" />
213+
214+
{/* Layer 3: Specular highlights — top-left and bottom-right light catches */}
215+
<div className="absolute inset-0" style={{
216+
background: "radial-gradient(ellipse 70% 50% at 25% 20%, rgba(255,255,255,0.08) 0%, transparent 50%)"
217+
}} />
218+
<div className="absolute inset-0" style={{
219+
background: "radial-gradient(ellipse 50% 35% at 75% 75%, rgba(255,255,255,0.04) 0%, transparent 40%)"
220+
}} />
221+
222+
{/* Layer 4: Animated liquid shimmer */}
212223
<div className="absolute inset-0 np-orb-layer">
213-
<div className="np-orb np-o1" style={orbColor(c1, 0.25)} />
214-
<div className="np-orb np-o2" style={orbColor(c2, 0.2)} />
224+
<div className="np-orb np-o1" style={orbColor(c1, 0.18)} />
225+
<div className="np-orb np-o2" style={orbColor(c2, 0.14)} />
226+
<div className="np-shimmer" />
215227
</div>
216228

217-
{/* Dark overlay + vignette */}
218-
<div className="absolute inset-0 bg-black/40" />
229+
{/* Layer 5: Luminous depth — glass curvature effect */}
230+
<div className="absolute inset-0" style={{
231+
background: "radial-gradient(ellipse 120% 80% at 50% 40%, rgba(255,255,255,0.03) 0%, transparent 50%)"
232+
}} />
233+
234+
{/* Layer 6: Vignette */}
219235
<div className="absolute inset-0" style={{
220-
background: "radial-gradient(ellipse at 50% 45%, transparent 30%, rgba(5,5,5,0.4) 65%, rgba(5,5,5,0.85) 100%)"
236+
background: "radial-gradient(ellipse at 50% 45%, transparent 30%, rgba(5,5,8,0.3) 60%, rgba(5,5,8,0.85) 100%)"
221237
}} />
222238

223239
{/* Desktop layout */}
@@ -274,15 +290,15 @@ const NowPlayingTab = memo(({ currentSong }) => {
274290
<div className="lg:hidden relative z-10 h-full flex flex-col items-center justify-between px-6 sm:px-8 pt-16 pb-8">
275291
<div className="flex-1 flex flex-col items-center justify-center gap-5 w-full max-w-sm">
276292
<div
277-
className="shrink-0 transition-all duration-500 ease-out"
293+
className="transition-all duration-500 ease-out"
278294
style={{
279295
opacity: showEntrance ? 1 : 0,
280296
transform: showEntrance ? "scale(1)" : "scale(0.93)",
281297
}}
282298
>
283299
<CrossfadeAvatar
284300
images={images}
285-
size="min(80vw, 42vh, 360px)"
301+
size="min(90vw, 42vh, 360px)"
286302
shadow={imgShadowMobile}
287303
name={currentSong.name}
288304
/>
@@ -331,39 +347,59 @@ const NowPlayingTab = memo(({ currentSong }) => {
331347
</div>
332348

333349
<style>{`
350+
.np-glass-noise {
351+
background-image: url("data:image/svg+xml,%3Csvg viewBox='0 0 256 256' xmlns='http://www.w3.org/2000/svg'%3E%3Cfilter id='n'%3E%3CfeTurbulence type='fractalNoise' baseFrequency='0.9' numOctaves='4' stitchTiles='stitch'/%3E%3C/filter%3E%3Crect width='100%25' height='100%25' filter='url(%23n)'/%3E%3C/svg%3E");
352+
opacity: 0.03;
353+
mix-blend-mode: overlay;
354+
}
334355
.np-orb-layer {
335-
filter: blur(80px);
336-
transform: scale(1.3);
356+
filter: blur(100px);
357+
transform: scale(1.4);
337358
mix-blend-mode: soft-light;
338-
opacity: 0.8;
359+
opacity: 0.7;
339360
}
340361
.np-orb {
341362
position: absolute;
342363
border-radius: 50%;
343364
}
344365
.np-o1 {
345-
width: 60%;
346-
height: 65%;
366+
width: 55%;
367+
height: 60%;
347368
top: -10%;
348369
left: -10%;
349-
animation: npo1 24s ease-in-out infinite;
370+
animation: npo1 26s ease-in-out infinite;
350371
}
351372
.np-o2 {
352-
width: 55%;
353-
height: 55%;
373+
width: 50%;
374+
height: 50%;
354375
bottom: -10%;
355376
right: -10%;
356-
animation: npo2 28s ease-in-out infinite;
377+
animation: npo2 32s ease-in-out infinite;
378+
}
379+
.np-shimmer {
380+
position: absolute;
381+
width: 40%;
382+
height: 30%;
383+
top: 15%;
384+
left: 20%;
385+
border-radius: 50%;
386+
background: radial-gradient(ellipse, rgba(255,255,255,0.06) 0%, transparent 70%);
387+
animation: npShimmer 18s ease-in-out infinite;
357388
}
358389
@keyframes npo1 {
359390
0%, 100% { transform: translate(0, 0) scale(1); border-radius: 50%; }
360-
33% { transform: translate(12%, 18%) scale(1.06); border-radius: 44% 56% 52% 48%; }
361-
66% { transform: translate(6%, 10%) scale(0.97); border-radius: 48% 52% 46% 54%; }
391+
33% { transform: translate(10%, 15%) scale(1.05); border-radius: 44% 56% 52% 48%; }
392+
66% { transform: translate(5%, 8%) scale(0.97); border-radius: 48% 52% 46% 54%; }
362393
}
363394
@keyframes npo2 {
364395
0%, 100% { transform: translate(0, 0) scale(1); border-radius: 50%; }
365-
33% { transform: translate(-10%, -14%) scale(1.05); border-radius: 54% 46% 48% 52%; }
366-
66% { transform: translate(-16%, -6%) scale(0.96); border-radius: 47% 53% 52% 48%; }
396+
33% { transform: translate(-8%, -12%) scale(1.04); border-radius: 54% 46% 48% 52%; }
397+
66% { transform: translate(-14%, -5%) scale(0.96); border-radius: 47% 53% 52% 48%; }
398+
}
399+
@keyframes npShimmer {
400+
0%, 100% { transform: translate(0, 0); opacity: 0.6; }
401+
33% { transform: translate(30%, 10%); opacity: 1; }
402+
66% { transform: translate(-10%, 20%); opacity: 0.4; }
367403
}
368404
.np-bg-fade-in {
369405
animation: npBgIn 0.8s ease-out both;
@@ -403,7 +439,7 @@ const NowPlayingTab = memo(({ currentSong }) => {
403439
to { opacity: 1; transform: translateY(0); }
404440
}
405441
@media (prefers-reduced-motion: reduce) {
406-
.np-orb, .np-fade-in, .np-fade-out, .np-text-in, .np-bg-fade-in, .np-bg-fade-out { animation: none !important; }
442+
.np-orb, .np-fade-in, .np-fade-out, .np-text-in, .np-bg-fade-in, .np-bg-fade-out, .np-shimmer { animation: none !important; }
407443
.np-fade-in, .np-text-in, .np-bg-fade-in { opacity: 1 !important; }
408444
.np-fade-out, .np-bg-fade-out { opacity: 0 !important; }
409445
}

0 commit comments

Comments
 (0)