diff --git a/src/lib/components/sidebar/ArtifactSelectionPane.svelte b/src/lib/components/sidebar/ArtifactSelectionPane.svelte
new file mode 100644
index 00000000..2660a1e2
--- /dev/null
+++ b/src/lib/components/sidebar/ArtifactSelectionPane.svelte
@@ -0,0 +1,374 @@
+
+
+
+
+
+
+
+
+
+
+
+
+ {#if isLoading}
+
+
+
Loading artifacts...
+
+ {:else if isEmpty}
+
+
+
No artifacts in collection
+
+ {:else}
+ {#each allArtifacts as artifact (artifact.id)}
+ {@const isEquipped = artifact.id === currentArtifactId}
+ {@const imageUrl = getArtifactImage(artifact.artifact?.granblueId)}
+ {@const displayName = getDisplayName(artifact)}
+ {@const proficiency = getProficiency(artifact)}
+ {@const gradeLetter = artifact.grade?.letter}
+
+
+ {/each}
+
+ {#if showSentinel}
+
+ {/if}
+
+ {#if collectionQuery.isFetchingNextPage}
+
+
+ Loading more...
+
+ {/if}
+ {/if}
+
+
+
+
diff --git a/src/lib/components/sidebar/CharacterArtifactSection.svelte b/src/lib/components/sidebar/CharacterArtifactSection.svelte
new file mode 100644
index 00000000..d4065c46
--- /dev/null
+++ b/src/lib/components/sidebar/CharacterArtifactSection.svelte
@@ -0,0 +1,87 @@
+
+
+
+
+
+ {#if hasArtifact && artifact}
+
+
+ {#if editable}
+
+
+ Change
+
+
+ Remove
+
+
+ {/if}
+ {:else if editable}
+
+ {:else}
+
No artifact equipped
+ {/if}
+
+
+