diff --git a/src/svelte-interface/components/Spinner.svelte b/src/svelte-interface/components/Spinner.svelte
new file mode 100644
index 00000000..a578633a
--- /dev/null
+++ b/src/svelte-interface/components/Spinner.svelte
@@ -0,0 +1,34 @@
+
+
+
+
+
+
\ No newline at end of file
diff --git a/src/svelte-interface/components/store/Backgrounds.svelte b/src/svelte-interface/components/store/Backgrounds.svelte
new file mode 100644
index 00000000..782aa602
--- /dev/null
+++ b/src/svelte-interface/components/store/Backgrounds.svelte
@@ -0,0 +1,389 @@
+
+
+
+
+
+
+
Categories
+
+ selectedCategory = 'All'}
+ >
+ All
+
+ selectedCategory = 'Featured'}
+ >
+ Featured
+
+
+
+
+ {#each categories as category}
+ selectedCategory = category}
+ >
+ {category}
+
+ {/each}
+
+
+
+
+
+
+
+
+
+
Explore Backgrounds
+
+
+ Newest
+ Most Popular
+ Name
+
+
+
+
+
+
+ {#each ['All', 'Installed', 'Photos', 'Videos'] as tab}
+ activeTab = tab.toLowerCase() as typeof activeTab}
+ >
+ {tab}
+
+ {/each}
+
+
+
+
+
+ {#if isLoading}
+
+ {#each Array(9) as _, i}
+
+ {/each}
+
+ {:else if error}
+
+ Error: {error}
+
+ {:else}
+
+ {#each filteredBackgrounds.filter((bg: Background) => {
+ if (activeTab === 'installed') return savedBackgrounds.includes(bg.id);
+ if (activeTab === 'photos') return bg.type === 'image';
+ if (activeTab === 'videos') return bg.type !== 'image';
+ return true;
+ }) as background (background.id)}
+
toggleBackgroundInstallation(background)}
+ onkeydown={(event) => {
+ if (event.key === 'Enter' || event.key === ' ') {
+ toggleBackgroundInstallation(background);
+ }
+ }}
+ role="button"
+ tabindex="0"
+ >
+ {#if background.type === 'image'}
+
+ {:else}
+
+ {/if}
+
+ {#if installingBackgrounds.has(background.id)}
+
+ {:else if savedBackgrounds.includes(background.id)}
+
+
+ Remove
+
+ {:else}
+
+
+ Install
+
+ {/if}
+
+
+
{background.name}
+
+
+ {/each}
+
+ {/if}
+
+
+
+
+ {#if showPreview && displayBackground}
+
e.key === 'Escape' && closePreview()}
+ >
+
e.stopPropagation()}
+ >
+
+
{displayBackground.name}
+
+
+
+
+
+
+ {#if displayBackground.type === 'image'}
+
+ {:else}
+
+ {/if}
+
+
+
{displayBackground.description}
+
+
+ toggleBackgroundInstallation(displayBackground)}
+ >
+ {savedBackgrounds.includes(displayBackground.id) ? 'Remove' : 'Install'}
+
+ {#if savedBackgrounds.includes(displayBackground.id)}
+ selectBackground(displayBackground.id)}
+ >
+ Apply
+
+ {/if}
+
+
+
+ {/if}
+
+
+{#if settingsState.devMode}
+
+
Debug Info:
+
{debugInfo}
+
Total backgrounds: {backgrounds.length}
+
Categories: {categories.join(', ') || ''}
+
Active Tab: {activeTab}
+
Selected Category: {selectedCategory}
+
+{/if}
+
diff --git a/src/svelte-interface/components/store/FilterPanel.svelte b/src/svelte-interface/components/store/FilterPanel.svelte
new file mode 100644
index 00000000..5ca3ad2f
--- /dev/null
+++ b/src/svelte-interface/components/store/FilterPanel.svelte
@@ -0,0 +1,63 @@
+
+
+
+
Filters
+
+
+
+
+
+
+ Clear Filters
+
+
\ No newline at end of file
diff --git a/src/svelte-interface/components/store/ThemeCard.svelte b/src/svelte-interface/components/store/ThemeCard.svelte
index a03778af..2bae7ad8 100644
--- a/src/svelte-interface/components/store/ThemeCard.svelte
+++ b/src/svelte-interface/components/store/ThemeCard.svelte
@@ -1,6 +1,4 @@