diff --git a/web-player/src/lib/components/TopBar.svelte b/web-player/src/lib/components/TopBar.svelte
index b8bc201..12566e6 100644
--- a/web-player/src/lib/components/TopBar.svelte
+++ b/web-player/src/lib/components/TopBar.svelte
@@ -8,6 +8,7 @@
import ChevronLeft from '@lucide/svelte/icons/chevron-left';
import ChevronRight from '@lucide/svelte/icons/chevron-right';
import AccountMenu from './ui/AccountMenu.svelte';
+ import Avatar from './ui/Avatar.svelte';
interface Props {
user: SessionUser | null;
@@ -113,17 +114,14 @@
onclick={toggle}
aria-label="Tu cuenta"
aria-expanded={open}
- class="block h-8.25 w-8.25 shrink-0 overflow-hidden rounded-full border border-line-strong transition active:scale-95"
+ class="block shrink-0 rounded-full transition active:scale-95"
>
- {#if user.picture}
-

- {:else}
-
- {user.name.charAt(0)}
-
- {/if}
+
{/snippet}
diff --git a/web-player/src/lib/components/TrackContextMenu.svelte b/web-player/src/lib/components/TrackContextMenu.svelte
index f8a03e5..b793914 100644
--- a/web-player/src/lib/components/TrackContextMenu.svelte
+++ b/web-player/src/lib/components/TrackContextMenu.svelte
@@ -21,7 +21,7 @@
import { enhance } from '$app/forms';
import ListPlus from '@lucide/svelte/icons/list-plus';
import ChevronRight from '@lucide/svelte/icons/chevron-right';
- import PlaylistArt from '$lib/components/ui/PlaylistArt.svelte';
+ import Artwork from '$lib/components/ui/Artwork.svelte';
import GlassMenu from '$lib/components/ui/GlassMenu.svelte';
interface Props {
@@ -91,11 +91,10 @@
type="submit"
class="flex w-full items-center gap-3 rounded-control px-2 py-2.5 text-left text-sm font-medium text-fg transition hover:bg-hover"
>
-
{playlist.name}
diff --git a/web-player/src/lib/components/player/Queue.svelte b/web-player/src/lib/components/player/Queue.svelte
index da41e33..9194270 100644
--- a/web-player/src/lib/components/player/Queue.svelte
+++ b/web-player/src/lib/components/player/Queue.svelte
@@ -1,7 +1,7 @@
-
-
-
- {#if imageUrl}
-

- {:else}
-
-
{initials}
- {/if}
-
-
{name}
-
diff --git a/web-player/src/lib/components/ui/Artwork.svelte b/web-player/src/lib/components/ui/Artwork.svelte
new file mode 100644
index 0000000..471b578
--- /dev/null
+++ b/web-player/src/lib/components/ui/Artwork.svelte
@@ -0,0 +1,133 @@
+
+
+
+ {#if showSrc}
+
![]()
(srcFailed = true)}
+ class="h-full w-full object-cover"
+ />
+ {:else if showMosaic}
+
+ {#each trackIds.slice(0, 4) as id (id)}
+

((e.currentTarget as HTMLImageElement).style.visibility = 'hidden')}
+ class="h-full w-full object-cover"
+ />
+ {/each}
+
+ {:else if showSingle}
+

(singleFailed = true)}
+ class="h-full w-full object-cover"
+ />
+ {:else if fallback === 'music'}
+
+ {:else if fallback === 'gradient'}
+
+ {:else}
+
+ {/if}
+ {@render children?.()}
+
diff --git a/web-player/src/lib/components/ui/Avatar.svelte b/web-player/src/lib/components/ui/Avatar.svelte
new file mode 100644
index 0000000..d26b0b5
--- /dev/null
+++ b/web-player/src/lib/components/ui/Avatar.svelte
@@ -0,0 +1,60 @@
+
+
+
+ {#if src && !failed}
+
![]()
(failed = true)}
+ class="absolute inset-0 h-full w-full object-cover"
+ />
+ {:else}
+
{initials}
+ {/if}
+
diff --git a/web-player/src/lib/components/ui/Cover.svelte b/web-player/src/lib/components/ui/Cover.svelte
deleted file mode 100644
index 8c97aa9..0000000
--- a/web-player/src/lib/components/ui/Cover.svelte
+++ /dev/null
@@ -1,47 +0,0 @@
-
-
-
- {#if !failed}
-

(failed = true)}
- class="h-full w-full object-cover"
- />
- {/if}
- {@render children?.()}
-
diff --git a/web-player/src/lib/components/ui/MixArt.svelte b/web-player/src/lib/components/ui/MixArt.svelte
deleted file mode 100644
index f931d93..0000000
--- a/web-player/src/lib/components/ui/MixArt.svelte
+++ /dev/null
@@ -1,25 +0,0 @@
-
-
-{#if tiles.length >= 4}
-
- {#each tiles as item (mixItemKey(item))}
-
- {/each}
-
-{:else if tiles.length > 0}
-
-{:else}
-
-{/if}
diff --git a/web-player/src/lib/components/ui/MixTile.svelte b/web-player/src/lib/components/ui/MixTile.svelte
index 5f7c540..591d6b7 100644
--- a/web-player/src/lib/components/ui/MixTile.svelte
+++ b/web-player/src/lib/components/ui/MixTile.svelte
@@ -1,6 +1,6 @@
-
-{#if src && !coverFailed}
-
-
![]()
(coverFailed = true)}
- class="h-full w-full object-cover"
- />
-
-{:else if mosaic}
-
- {#each trackIds.slice(0, 4) as id (id)}
-
- {/each}
-
-{:else if single !== null}
-
-{:else}
-
-{/if}
diff --git a/web-player/src/lib/components/ui/PlaylistCard.svelte b/web-player/src/lib/components/ui/PlaylistCard.svelte
index bf00bf7..6950690 100644
--- a/web-player/src/lib/components/ui/PlaylistCard.svelte
+++ b/web-player/src/lib/components/ui/PlaylistCard.svelte
@@ -1,6 +1,6 @@
-
{#snippet content()}
diff --git a/web-player/src/lib/components/ui/TrackTitleCell.svelte b/web-player/src/lib/components/ui/TrackTitleCell.svelte
index 8c6f0f8..14dd3d8 100644
--- a/web-player/src/lib/components/ui/TrackTitleCell.svelte
+++ b/web-player/src/lib/components/ui/TrackTitleCell.svelte
@@ -1,6 +1,6 @@