diff --git a/TODO.md b/TODO.md
index 0beb0c1..8216407 100644
--- a/TODO.md
+++ b/TODO.md
@@ -4,3 +4,4 @@
- [x] Replace `mb_strlen`/`mb_substr` with `strlen`/`substr` in TfeController, SearchController, Parsedown — mbstring extension not available on production server
- [x] system.css: retheme to site light palette — remove all `--sys-bg/border/text` dark tokens from variables.css; replace with standard `--bg-*`, `--border-*`, `--text-*` tokens; remap `--sys-syntax-*` to light-appropriate colours; remove dark terminal aesthetic
- [x] SystemController: PHP-FPM status check — dynamically probe `phpX.Y-fpm` unit derived from running PHP version before static fallback list; add `php8.4-fpm` to cover current production PHP 8.4
+- [x] Favicon: replace SVG placeholder with full PNG/ICO favicon set from `public/assets/favicon/` in `templates/head.php`
diff --git a/public/assets/admin_favicon.svg b/public/assets/admin_favicon.svg
deleted file mode 100644
index 4bb0557..0000000
--- a/public/assets/admin_favicon.svg
+++ /dev/null
@@ -1,65 +0,0 @@
-
-
diff --git a/public/assets/favicon.svg b/public/assets/favicon.svg
deleted file mode 100644
index fd8cc00..0000000
--- a/public/assets/favicon.svg
+++ /dev/null
@@ -1,5 +0,0 @@
-
diff --git a/public/assets/favicon/android-chrome-192x192.png b/public/assets/favicon/android-chrome-192x192.png
new file mode 100644
index 0000000..0c80f7f
Binary files /dev/null and b/public/assets/favicon/android-chrome-192x192.png differ
diff --git a/public/assets/favicon/android-chrome-512x512.png b/public/assets/favicon/android-chrome-512x512.png
new file mode 100644
index 0000000..5c2e8b2
Binary files /dev/null and b/public/assets/favicon/android-chrome-512x512.png differ
diff --git a/public/assets/favicon/apple-touch-icon-152x152.png b/public/assets/favicon/apple-touch-icon-152x152.png
new file mode 100644
index 0000000..fcbf01b
Binary files /dev/null and b/public/assets/favicon/apple-touch-icon-152x152.png differ
diff --git a/public/assets/favicon/apple-touch-icon-167x167.png b/public/assets/favicon/apple-touch-icon-167x167.png
new file mode 100644
index 0000000..97a65d1
Binary files /dev/null and b/public/assets/favicon/apple-touch-icon-167x167.png differ
diff --git a/public/assets/favicon/apple-touch-icon-180x180.png b/public/assets/favicon/apple-touch-icon-180x180.png
new file mode 100644
index 0000000..c105ed7
Binary files /dev/null and b/public/assets/favicon/apple-touch-icon-180x180.png differ
diff --git a/public/assets/favicon/favicon-128x128.png b/public/assets/favicon/favicon-128x128.png
new file mode 100644
index 0000000..2e13e12
Binary files /dev/null and b/public/assets/favicon/favicon-128x128.png differ
diff --git a/public/assets/favicon/favicon-16x16.png b/public/assets/favicon/favicon-16x16.png
new file mode 100644
index 0000000..4273f24
Binary files /dev/null and b/public/assets/favicon/favicon-16x16.png differ
diff --git a/public/assets/favicon/favicon-32x32.png b/public/assets/favicon/favicon-32x32.png
new file mode 100644
index 0000000..eb54eaf
Binary files /dev/null and b/public/assets/favicon/favicon-32x32.png differ
diff --git a/public/assets/favicon/favicon-48x48.png b/public/assets/favicon/favicon-48x48.png
new file mode 100644
index 0000000..ff2ba61
Binary files /dev/null and b/public/assets/favicon/favicon-48x48.png differ
diff --git a/public/assets/favicon/favicon-64x64.png b/public/assets/favicon/favicon-64x64.png
new file mode 100644
index 0000000..5fe6dce
Binary files /dev/null and b/public/assets/favicon/favicon-64x64.png differ
diff --git a/public/assets/favicon/favicon-96x96.png b/public/assets/favicon/favicon-96x96.png
new file mode 100644
index 0000000..e297917
Binary files /dev/null and b/public/assets/favicon/favicon-96x96.png differ
diff --git a/public/assets/favicon/favicon.ico b/public/assets/favicon/favicon.ico
new file mode 100644
index 0000000..5314244
Binary files /dev/null and b/public/assets/favicon/favicon.ico differ
diff --git a/public/assets/favicon/favicon_html.txt b/public/assets/favicon/favicon_html.txt
new file mode 100644
index 0000000..bf62596
--- /dev/null
+++ b/public/assets/favicon/favicon_html.txt
@@ -0,0 +1,10 @@
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/public/assets/favicon/site.webmanifest b/public/assets/favicon/site.webmanifest
new file mode 100644
index 0000000..ace3be7
--- /dev/null
+++ b/public/assets/favicon/site.webmanifest
@@ -0,0 +1,19 @@
+{
+ "name": "",
+ "short_name": "",
+ "icons": [
+ {
+ "src": "/favicons/android-chrome-192x192.png",
+ "sizes": "192x192",
+ "type": "image/png"
+ },
+ {
+ "src": "/favicons/android-chrome-512x512.png",
+ "sizes": "512x512",
+ "type": "image/png"
+ }
+ ],
+ "theme_color": "#ffffff",
+ "background_color": "#ffffff",
+ "display": "standalone"
+}
\ No newline at end of file
diff --git a/templates/head.php b/templates/head.php
index 01e55f1..0b8cd14 100644
--- a/templates/head.php
+++ b/templates/head.php
@@ -57,7 +57,13 @@
-
+
+
+
+
+
+
+