diff --git a/apps/extension/public/icon-with-shadow.svg b/apps/extension/public/icon-with-shadow.svg
deleted file mode 100644
index 9a36a6f..0000000
--- a/apps/extension/public/icon-with-shadow.svg
+++ /dev/null
@@ -1,29 +0,0 @@
-
diff --git a/apps/extension/public/icon/128.png b/apps/extension/public/icon/128.png
index 53e9353..c5dd545 100644
Binary files a/apps/extension/public/icon/128.png and b/apps/extension/public/icon/128.png differ
diff --git a/apps/extension/public/icon/16.png b/apps/extension/public/icon/16.png
index 3fe3674..b138f18 100644
Binary files a/apps/extension/public/icon/16.png and b/apps/extension/public/icon/16.png differ
diff --git a/apps/extension/public/icon/32.png b/apps/extension/public/icon/32.png
index d1063e5..12bee9b 100644
Binary files a/apps/extension/public/icon/32.png and b/apps/extension/public/icon/32.png differ
diff --git a/apps/extension/public/icon/48.png b/apps/extension/public/icon/48.png
index 6c5e5e1..7cb137a 100644
Binary files a/apps/extension/public/icon/48.png and b/apps/extension/public/icon/48.png differ
diff --git a/apps/extension/public/icon/96.png b/apps/extension/public/icon/96.png
index c71c80e..04eab05 100644
Binary files a/apps/extension/public/icon/96.png and b/apps/extension/public/icon/96.png differ
diff --git a/apps/web/index.html b/apps/web/index.html
index cc2efb1..4034144 100644
--- a/apps/web/index.html
+++ b/apps/web/index.html
@@ -2,9 +2,13 @@
-
+
+
+
+
+
- vite-app
+ HUMID
diff --git a/apps/web/public/apple-touch-icon.png b/apps/web/public/apple-touch-icon.png
new file mode 100644
index 0000000..b4c9855
Binary files /dev/null and b/apps/web/public/apple-touch-icon.png differ
diff --git a/apps/web/public/favicon.ico b/apps/web/public/favicon.ico
new file mode 100644
index 0000000..f2af79b
Binary files /dev/null and b/apps/web/public/favicon.ico differ
diff --git a/apps/web/public/favicon.svg b/apps/web/public/favicon.svg
new file mode 100644
index 0000000..64cfede
--- /dev/null
+++ b/apps/web/public/favicon.svg
@@ -0,0 +1,37 @@
+
+
diff --git a/apps/web/public/icon-192.png b/apps/web/public/icon-192.png
new file mode 100644
index 0000000..de9f8f6
Binary files /dev/null and b/apps/web/public/icon-192.png differ
diff --git a/apps/web/public/icon-512.png b/apps/web/public/icon-512.png
new file mode 100644
index 0000000..1b31878
Binary files /dev/null and b/apps/web/public/icon-512.png differ
diff --git a/apps/web/public/site.webmanifest b/apps/web/public/site.webmanifest
new file mode 100644
index 0000000..637ea18
--- /dev/null
+++ b/apps/web/public/site.webmanifest
@@ -0,0 +1,11 @@
+{
+ "name": "HUMID",
+ "short_name": "HUMID",
+ "icons": [
+ { "src": "/icon-192.png", "type": "image/png", "sizes": "192x192" },
+ { "src": "/icon-512.png", "type": "image/png", "sizes": "512x512" }
+ ],
+ "theme_color": "#090F19",
+ "background_color": "#090F19",
+ "display": "standalone"
+}
diff --git a/apps/web/public/vite.svg b/apps/web/public/vite.svg
deleted file mode 100644
index e7b8dfb..0000000
--- a/apps/web/public/vite.svg
+++ /dev/null
@@ -1 +0,0 @@
-
\ No newline at end of file
diff --git a/assets/brand/README.md b/assets/brand/README.md
new file mode 100644
index 0000000..80e5088
--- /dev/null
+++ b/assets/brand/README.md
@@ -0,0 +1,18 @@
+# Brand assets
+
+Masters — edit these, never the generated PNGs:
+
+| File | What it is |
+| ---------------------- | -------------------------------------------------------------- |
+| `humid-logo.svg` | Logo lockup as delivered by design (500×500 tile, `#090F19`) |
+| `humid-mark.svg` | Mark alone, transparent background, tight viewBox |
+| `humid-icon.svg` | App/extension icon — mark scaled to ~78% of the tile, for ≥48px |
+| `humid-icon-small.svg` | 16/32px variant — bubbles dropped, bowl scaled to ~80% |
+
+Everything rasterised (`apps/extension/public/icon/*.png`, `apps/web/public/favicon.*`,
+`apple-touch-icon.png`, `icon-{192,512}.png`) is generated and committed. Regenerate with:
+
+```sh
+brew install librsvg imagemagick
+./scripts/generate-icons.sh
+```
diff --git a/assets/brand/humid-icon-small.svg b/assets/brand/humid-icon-small.svg
new file mode 100644
index 0000000..704f70c
--- /dev/null
+++ b/assets/brand/humid-icon-small.svg
@@ -0,0 +1,30 @@
+
+
diff --git a/assets/brand/humid-icon.svg b/assets/brand/humid-icon.svg
new file mode 100644
index 0000000..64cfede
--- /dev/null
+++ b/assets/brand/humid-icon.svg
@@ -0,0 +1,37 @@
+
+
diff --git a/assets/brand/humid-logo.svg b/assets/brand/humid-logo.svg
new file mode 100644
index 0000000..6b264db
--- /dev/null
+++ b/assets/brand/humid-logo.svg
@@ -0,0 +1,33 @@
+
diff --git a/assets/brand/humid-mark.svg b/assets/brand/humid-mark.svg
new file mode 100644
index 0000000..ce749e1
--- /dev/null
+++ b/assets/brand/humid-mark.svg
@@ -0,0 +1,32 @@
+
diff --git a/scripts/generate-icons.sh b/scripts/generate-icons.sh
new file mode 100755
index 0000000..25dd3ad
--- /dev/null
+++ b/scripts/generate-icons.sh
@@ -0,0 +1,59 @@
+#!/usr/bin/env bash
+#
+# Regenerates every rasterised icon from the SVG masters in assets/brand/.
+# Run it after editing a master; the generated files are committed, so this is not part of the build.
+#
+# brew install librsvg imagemagick
+# ./scripts/generate-icons.sh
+#
+set -euo pipefail
+
+cd "$(dirname "$0")/.."
+
+for bin in rsvg-convert magick; do
+ command -v "$bin" >/dev/null || {
+ echo "missing $bin — brew install librsvg imagemagick" >&2
+ exit 1
+ }
+done
+
+BRAND=assets/brand
+ICON=$BRAND/humid-icon.svg
+ICON_SMALL=$BRAND/humid-icon-small.svg
+EXT=apps/extension/public/icon
+WEB=apps/web/public
+# Tile colour, kept in sync with the fill in the masters.
+BG='#090F19'
+
+png() { # png