diff --git a/frontend/src/components/SpringboardWidget.contract.test.ts b/frontend/src/components/SpringboardWidget.contract.test.ts index 46d8cb0..66a936d 100644 --- a/frontend/src/components/SpringboardWidget.contract.test.ts +++ b/frontend/src/components/SpringboardWidget.contract.test.ts @@ -34,6 +34,15 @@ describe('SpringboardWidget UI contract', () => { expect(source).toContain('music.progress.value') }) + it('fades empty music artwork downward while keeping its message above the fade', () => { + expect(source).toContain('.home-widget--music-empty::after') + expect(source).toContain( + '.home-widget--music-empty .widget-music-placeholder', + ) + expect(source).toContain('-webkit-mask-image: linear-gradient(') + expect(source).toMatch(/\.widget-music-empty\s*{[\s\S]*?z-index:\s*2;/) + }) + it.each([ 'sunny', 'clear', diff --git a/frontend/src/components/SpringboardWidget.vue b/frontend/src/components/SpringboardWidget.vue index 5841869..ed79878 100644 --- a/frontend/src/components/SpringboardWidget.vue +++ b/frontend/src/components/SpringboardWidget.vue @@ -1076,6 +1076,39 @@ onBeforeUnmount(() => { background: rgb(39 39 42 / 95%); } +.home-widget--music-empty::after { + position: absolute; + z-index: 1; + inset: 0; + content: ''; + border-radius: inherit; + background: linear-gradient( + to bottom, + transparent 34%, + rgb(20 20 22 / 18%) 62%, + rgb(16 16 18 / 82%) 100% + ); + pointer-events: none; +} + +.home-widget--music-empty .widget-album, +.home-widget--music-empty .widget-music-placeholder { + -webkit-mask-image: linear-gradient( + to bottom, + #000 0%, + #000 42%, + rgb(0 0 0 / 42%) 72%, + transparent 100% + ); + mask-image: linear-gradient( + to bottom, + #000 0%, + #000 42%, + rgb(0 0 0 / 42%) 72%, + transparent 100% + ); +} + .home-widget-shell--large .home-widget--music { align-content: start; grid-template-columns: 1fr; @@ -1168,12 +1201,12 @@ onBeforeUnmount(() => { .widget-music-empty { position: absolute; right: 15px; - bottom: 11px; + bottom: 14px; left: 15px; - z-index: 0; + z-index: 2; margin: 0; color: rgb(255 255 255 / 72%); - font-size: 13px; + font-size: 14px; font-weight: 650; line-height: 17px; text-align: center;