diff --git a/web/package.json b/web/package.json
index 12267282f..105b9ba31 100644
--- a/web/package.json
+++ b/web/package.json
@@ -86,9 +86,11 @@
"@tanstack/svelte-virtual": "^3.13.35",
"ansi_up": "^6.0.6",
"boneyard-js": "1.9.0",
+ "lucide": "^1.37.0",
"markdown-it": "^14.3.0",
"markdown-it-anchor": "^9.2.1",
"markdown-it-emoji": "^3.1.0",
+ "morphicons": "^1.7.1",
"sanitize-html": "^2.17.6",
"tailwind-merge": "^3.6.0",
"tailwind-variants": "^3.2.2"
diff --git a/web/pnpm-lock.yaml b/web/pnpm-lock.yaml
index 5a37080ef..69d12720f 100644
--- a/web/pnpm-lock.yaml
+++ b/web/pnpm-lock.yaml
@@ -56,6 +56,9 @@ importers:
boneyard-js:
specifier: 1.9.0
version: 1.9.0(patch_hash=e9bda6b0720bed34eefee605bd041784ac2849ae4d27120d9815663d342f694f)(react@19.2.8)(svelte@5.56.9(@typescript-eslint/types@8.64.0))(vite@8.1.4(@types/node@24.13.3)(esbuild@0.28.1)(jiti@2.7.0)(yaml@2.9.0))
+ lucide:
+ specifier: ^1.37.0
+ version: 1.37.0
markdown-it:
specifier: ^14.3.0
version: 14.3.0
@@ -65,6 +68,9 @@ importers:
markdown-it-emoji:
specifier: ^3.1.0
version: 3.1.0
+ morphicons:
+ specifier: ^1.7.1
+ version: 1.7.1(react@19.2.8)(svelte@5.56.9(@typescript-eslint/types@8.64.0))
sanitize-html:
specifier: ^2.17.6
version: 2.17.6
@@ -2768,6 +2774,9 @@ packages:
lru_map@0.4.1:
resolution: {integrity: sha512-I+lBvqMMFfqaV8CJCISjI3wbjmwVu/VyOoU7+qtu9d7ioW5klMgsTTiUOUp+DJvfTTzKXoPbyC6YfgkNcyPSOg==}
+ lucide@1.37.0:
+ resolution: {integrity: sha512-e6/YmVKk0dwJf1CVDlYfSZTLax/+a7tVPPo867aUC+VmWsGNMimWrFI/pGoDc9qkjiJqkVHar14rMwgOHMrTcw==}
+
lz-string@1.5.0:
resolution: {integrity: sha512-h5bgJWpxJNswbU7qCrV0tIKQCaS3blPDrqKWx+QxzuzL1zGUzij9XCWLrSLsJPu5t+eWA/ycetzYAO5IOMcWAQ==}
hasBin: true
@@ -2837,6 +2846,26 @@ packages:
mlly@1.8.2:
resolution: {integrity: sha512-d+ObxMQFmbt10sretNDytwt85VrbkhhUA/JBGm1MPaWJ65Cl4wOgLaB1NYvJSZ0Ef03MMEU/0xpPMXUIQ29UfA==}
+ morphicons@1.7.1:
+ resolution: {integrity: sha512-q5ylxy5/d7vBg0OAzanlooXf05PekovMYDuuQVpr6vAQZxl99lrJbaIi+jJ32PXQf9WEEaDO2pbNBsx1ZhEnFQ==}
+ peerDependencies:
+ react: '>=18'
+ react-native: '>=0.71'
+ react-native-svg: '>=14'
+ svelte: '>=5'
+ vue: '>=3.3'
+ peerDependenciesMeta:
+ react:
+ optional: true
+ react-native:
+ optional: true
+ react-native-svg:
+ optional: true
+ svelte:
+ optional: true
+ vue:
+ optional: true
+
mri@1.2.0:
resolution: {integrity: sha512-tzzskb3bG8LvYGFF/mDTpq3jpI6Q9wc3LEmBaghu+DdCssd1FakN7Bc0hVNmEyGq1bq3RgfkCb3cmQLpNPOroA==}
engines: {node: '>=4'}
@@ -5932,6 +5961,8 @@ snapshots:
lru_map@0.4.1: {}
+ lucide@1.37.0: {}
+
lz-string@1.5.0: {}
magic-string@0.30.21:
@@ -6024,6 +6055,11 @@ snapshots:
pkg-types: 1.3.1
ufo: 1.6.4
+ morphicons@1.7.1(react@19.2.8)(svelte@5.56.9(@typescript-eslint/types@8.64.0)):
+ optionalDependencies:
+ react: 19.2.8
+ svelte: 5.56.9(@typescript-eslint/types@8.64.0)
+
mri@1.2.0: {}
mrmime@2.0.1: {}
diff --git a/web/src/lib/components/ui/MorphIcon.svelte b/web/src/lib/components/ui/MorphIcon.svelte
new file mode 100644
index 000000000..87ce4c6a4
--- /dev/null
+++ b/web/src/lib/components/ui/MorphIcon.svelte
@@ -0,0 +1,18 @@
+
+
+