diff --git a/themes/bonsai/CHANGELOG.md b/themes/bonsai/CHANGELOG.md
index 3c72035..5f3c4c3 100644
--- a/themes/bonsai/CHANGELOG.md
+++ b/themes/bonsai/CHANGELOG.md
@@ -7,6 +7,7 @@ All notable changes to this project are documented here. Format follows [Keep a
### Added
- **Favicon polish** — opt-in `params.faviconSvg` and `params.appleTouchIcon` for SVG and iOS home-screen icons. Default behavior unchanged when unset.
- **Demo-only gallery CSS** — `/themes/` and `/variants/` pages load a separate `static/css/gallery.css`; `static/css/bonsai.css` no longer ships gallery selectors to user sites. Saves ~1.9 KB raw / ~200 B gzipped on every real site. New `head_extra` block in `baseof.html` enables per-page stylesheet additions.
+- **10 new icons** — set grows from 35 to 45. Brand additions: `bandcamp`, `soundcloud`, `spotify`, `figma`, `dribbble`, `stackoverflow`, `matrix`. Utility additions: `bookopen`, `download`, `heart`. Vendored from Simple Icons v13 (CC0) and Lucide v0.460 (ISC) at the same versions; soft ceiling for v0-line is ~50.
### Changed
- **A11y** — sakura accent darkened `#d4456a → #c93f63` (4.04 → 4.49 vs bg) and koi accent darkened `#c8521e → #bd4c1c` (4.17 → 4.63 vs bg) to reach WCAG AA on the gallery accent chip. Brand intent preserved (cherry blossom pink / koi orange). README hex table synced.
diff --git a/themes/bonsai/README.md b/themes/bonsai/README.md
index 6ee369f..84b103d 100644
--- a/themes/bonsai/README.md
+++ b/themes/bonsai/README.md
@@ -16,7 +16,7 @@ Bonsai treats your bio page the same way: a quiet, well-pruned page that surface
- **Single-page bio** — name, avatar, tagline, links. Nothing else.
- **Data-driven links** — defined in `[[params.links]]`; no content files required.
-- **35 icons out of the box** — 25 brand (GitHub, Mastodon, Bluesky, X, Threads, LinkedIn, Instagram…) + 10 utility (mail, globe, rss…). Vendored from [Simple Icons](https://simpleicons.org) and [Lucide](https://lucide.dev).
+- **45 icons out of the box** — 32 brand (GitHub, Mastodon, Bluesky, Spotify, Figma, Matrix…) + 13 utility (mail, globe, rss, heart, download…). Vendored from [Simple Icons](https://simpleicons.org) and [Lucide](https://lucide.dev).
- **Light & dark mode** — respects `prefers-color-scheme`; optional toggle.
- **Zero JavaScript by default** — pure HTML + CSS; opt-in JS for theme toggle only.
- **Fast** — < 3 KB gzipped CSS, no web fonts (system stack), no runtime fetches.
@@ -167,7 +167,7 @@ Missing keys fall back to `en`. User content (`name`, `tagline`, `bio`, link `ti
## Available Icons
-Brand / Social (25)
+Brand / Social (32)
| Name | Source |
|------|--------|
@@ -196,11 +196,18 @@ Missing keys fall back to `en`. User content (`name`, `tagline`, `bio`, link `ti
| `patreon` | Simple Icons |
| `buymeacoffee` | Simple Icons |
| `paypal` | Simple Icons |
+| `bandcamp` | Simple Icons |
+| `soundcloud` | Simple Icons |
+| `spotify` | Simple Icons |
+| `figma` | Simple Icons |
+| `dribbble` | Simple Icons |
+| `stackoverflow` | Simple Icons |
+| `matrix` | Simple Icons |
-UI / Utility (10)
+UI / Utility (13)
| Name | Source |
|------|--------|
@@ -214,6 +221,9 @@ Missing keys fall back to `en`. User content (`name`, `tagline`, `bio`, link `ti
| `filetext` | Lucide |
| `extlink` | Lucide |
| `share` | Lucide |
+| `bookopen` | Lucide |
+| `download` | Lucide |
+| `heart` | Lucide |
diff --git a/themes/bonsai/assets/icons/brand/bandcamp.svg b/themes/bonsai/assets/icons/brand/bandcamp.svg
new file mode 100644
index 0000000..8bb9b92
--- /dev/null
+++ b/themes/bonsai/assets/icons/brand/bandcamp.svg
@@ -0,0 +1 @@
+
diff --git a/themes/bonsai/assets/icons/brand/dribbble.svg b/themes/bonsai/assets/icons/brand/dribbble.svg
new file mode 100644
index 0000000..a505921
--- /dev/null
+++ b/themes/bonsai/assets/icons/brand/dribbble.svg
@@ -0,0 +1 @@
+
diff --git a/themes/bonsai/assets/icons/brand/figma.svg b/themes/bonsai/assets/icons/brand/figma.svg
new file mode 100644
index 0000000..2bcf9f2
--- /dev/null
+++ b/themes/bonsai/assets/icons/brand/figma.svg
@@ -0,0 +1 @@
+
diff --git a/themes/bonsai/assets/icons/brand/matrix.svg b/themes/bonsai/assets/icons/brand/matrix.svg
new file mode 100644
index 0000000..4a5b837
--- /dev/null
+++ b/themes/bonsai/assets/icons/brand/matrix.svg
@@ -0,0 +1 @@
+
diff --git a/themes/bonsai/assets/icons/brand/soundcloud.svg b/themes/bonsai/assets/icons/brand/soundcloud.svg
new file mode 100644
index 0000000..337bafc
--- /dev/null
+++ b/themes/bonsai/assets/icons/brand/soundcloud.svg
@@ -0,0 +1 @@
+
diff --git a/themes/bonsai/assets/icons/brand/spotify.svg b/themes/bonsai/assets/icons/brand/spotify.svg
new file mode 100644
index 0000000..d4f5e5c
--- /dev/null
+++ b/themes/bonsai/assets/icons/brand/spotify.svg
@@ -0,0 +1 @@
+
diff --git a/themes/bonsai/assets/icons/brand/stackoverflow.svg b/themes/bonsai/assets/icons/brand/stackoverflow.svg
new file mode 100644
index 0000000..1dc6081
--- /dev/null
+++ b/themes/bonsai/assets/icons/brand/stackoverflow.svg
@@ -0,0 +1 @@
+
diff --git a/themes/bonsai/assets/icons/ui/book-open.svg b/themes/bonsai/assets/icons/ui/book-open.svg
new file mode 100644
index 0000000..d2fa1d5
--- /dev/null
+++ b/themes/bonsai/assets/icons/ui/book-open.svg
@@ -0,0 +1,15 @@
+
diff --git a/themes/bonsai/assets/icons/ui/download.svg b/themes/bonsai/assets/icons/ui/download.svg
new file mode 100644
index 0000000..3241598
--- /dev/null
+++ b/themes/bonsai/assets/icons/ui/download.svg
@@ -0,0 +1,16 @@
+
diff --git a/themes/bonsai/assets/icons/ui/heart.svg b/themes/bonsai/assets/icons/ui/heart.svg
new file mode 100644
index 0000000..8b163af
--- /dev/null
+++ b/themes/bonsai/assets/icons/ui/heart.svg
@@ -0,0 +1,14 @@
+
diff --git a/themes/bonsai/data/icons.yaml b/themes/bonsai/data/icons.yaml
index 762e89f..da8331b 100644
--- a/themes/bonsai/data/icons.yaml
+++ b/themes/bonsai/data/icons.yaml
@@ -30,6 +30,13 @@ kofi: { family: brand, slug: kofi }
patreon: { family: brand, slug: patreon }
buymeacoffee: { family: brand, slug: buymeacoffee }
paypal: { family: brand, slug: paypal }
+bandcamp: { family: brand, slug: bandcamp }
+soundcloud: { family: brand, slug: soundcloud }
+spotify: { family: brand, slug: spotify }
+figma: { family: brand, slug: figma }
+dribbble: { family: brand, slug: dribbble }
+stackoverflow: { family: brand, slug: stackoverflow }
+matrix: { family: brand, slug: matrix }
# --- UI / Utility ---
mail: { family: ui, slug: mail }
@@ -42,3 +49,6 @@ mappin: { family: ui, slug: map-pin }
filetext: { family: ui, slug: file-text }
extlink: { family: ui, slug: external-link }
share: { family: ui, slug: share-2 }
+bookopen: { family: ui, slug: book-open }
+download: { family: ui, slug: download }
+heart: { family: ui, slug: heart }
diff --git a/themes/bonsai/scripts/sync-icons.sh b/themes/bonsai/scripts/sync-icons.sh
index c4b8514..3b5ba96 100755
--- a/themes/bonsai/scripts/sync-icons.sh
+++ b/themes/bonsai/scripts/sync-icons.sh
@@ -31,6 +31,7 @@ BRAND_ICONS=(
github gitlab mastodon bluesky x threads linkedin instagram facebook
tiktok youtube twitch discord telegram signal whatsapp reddit medium
devdotto substack hashnode kofi patreon buymeacoffee paypal
+ bandcamp soundcloud spotify figma dribbble stackoverflow matrix
)
fetch_brand() {
@@ -64,6 +65,7 @@ done
# ---------------------------------------------------------------------------
UI_ICONS=(
mail globe link rss calendar phone map-pin file-text external-link share-2
+ book-open download heart
)
fetch_ui() {