diff --git a/public/icon-192-maskable.png b/public/icon-192-maskable.png deleted file mode 100644 index 3a0fd07..0000000 Binary files a/public/icon-192-maskable.png and /dev/null differ diff --git a/public/icon-192-maskable.webp b/public/icon-192-maskable.webp new file mode 100644 index 0000000..7925fcf Binary files /dev/null and b/public/icon-192-maskable.webp differ diff --git a/public/icon-192.png b/public/icon-192.png deleted file mode 100644 index b216c08..0000000 Binary files a/public/icon-192.png and /dev/null differ diff --git a/public/icon-192.webp b/public/icon-192.webp new file mode 100644 index 0000000..45bb834 Binary files /dev/null and b/public/icon-192.webp differ diff --git a/public/icon-512-maskable.png b/public/icon-512-maskable.png deleted file mode 100644 index badfd6c..0000000 Binary files a/public/icon-512-maskable.png and /dev/null differ diff --git a/public/icon-512-maskable.webp b/public/icon-512-maskable.webp new file mode 100644 index 0000000..e96e889 Binary files /dev/null and b/public/icon-512-maskable.webp differ diff --git a/public/icon-512.png b/public/icon-512.png deleted file mode 100644 index c7ab6d3..0000000 Binary files a/public/icon-512.png and /dev/null differ diff --git a/public/icon-512.webp b/public/icon-512.webp new file mode 100644 index 0000000..c847a1b Binary files /dev/null and b/public/icon-512.webp differ diff --git a/public/images/accessories/pudu-conveyor-single-layer.png b/public/images/accessories/pudu-conveyor-single-layer.png deleted file mode 100644 index 5d75a94..0000000 Binary files a/public/images/accessories/pudu-conveyor-single-layer.png and /dev/null differ diff --git a/public/images/accessories/pudu-conveyor-single-layer.webp b/public/images/accessories/pudu-conveyor-single-layer.webp new file mode 100644 index 0000000..e958ff9 Binary files /dev/null and b/public/images/accessories/pudu-conveyor-single-layer.webp differ diff --git a/public/images/accessories/pudu-elevator-control-module.png b/public/images/accessories/pudu-elevator-control-module.png deleted file mode 100644 index 8db0f77..0000000 Binary files a/public/images/accessories/pudu-elevator-control-module.png and /dev/null differ diff --git a/public/images/accessories/pudu-elevator-control-module.webp b/public/images/accessories/pudu-elevator-control-module.webp new file mode 100644 index 0000000..883b1fa Binary files /dev/null and b/public/images/accessories/pudu-elevator-control-module.webp differ diff --git a/public/images/accessories/pudu-gate-control-module.png b/public/images/accessories/pudu-gate-control-module.png deleted file mode 100644 index 6c7741d..0000000 Binary files a/public/images/accessories/pudu-gate-control-module.png and /dev/null differ diff --git a/public/images/accessories/pudu-gate-control-module.webp b/public/images/accessories/pudu-gate-control-module.webp new file mode 100644 index 0000000..aedec04 Binary files /dev/null and b/public/images/accessories/pudu-gate-control-module.webp differ diff --git a/public/images/accessories/pudu-mobile-water-station.png b/public/images/accessories/pudu-mobile-water-station.png deleted file mode 100644 index 252ed1a..0000000 Binary files a/public/images/accessories/pudu-mobile-water-station.png and /dev/null differ diff --git a/public/images/accessories/pudu-mobile-water-station.webp b/public/images/accessories/pudu-mobile-water-station.webp new file mode 100644 index 0000000..e149a54 Binary files /dev/null and b/public/images/accessories/pudu-mobile-water-station.webp differ diff --git a/public/images/accessories/pudu-pager.png b/public/images/accessories/pudu-pager.png deleted file mode 100644 index 9743507..0000000 Binary files a/public/images/accessories/pudu-pager.png and /dev/null differ diff --git a/public/images/accessories/pudu-pager.webp b/public/images/accessories/pudu-pager.webp new file mode 100644 index 0000000..9e268f0 Binary files /dev/null and b/public/images/accessories/pudu-pager.webp differ diff --git a/public/images/accessories/pudu-protection-case.png b/public/images/accessories/pudu-protection-case.png deleted file mode 100644 index 39a1c0d..0000000 Binary files a/public/images/accessories/pudu-protection-case.png and /dev/null differ diff --git a/public/images/accessories/pudu-protection-case.webp b/public/images/accessories/pudu-protection-case.webp new file mode 100644 index 0000000..fb562eb Binary files /dev/null and b/public/images/accessories/pudu-protection-case.webp differ diff --git a/public/images/accessories/pudu-reflective-post.png b/public/images/accessories/pudu-reflective-post.png deleted file mode 100644 index 30cb0e7..0000000 Binary files a/public/images/accessories/pudu-reflective-post.png and /dev/null differ diff --git a/public/images/accessories/pudu-reflective-post.webp b/public/images/accessories/pudu-reflective-post.webp new file mode 100644 index 0000000..f23b609 Binary files /dev/null and b/public/images/accessories/pudu-reflective-post.webp differ diff --git a/public/images/accessories/pudu-retractable-tray-baffle.png b/public/images/accessories/pudu-retractable-tray-baffle.png deleted file mode 100644 index 57ef7ad..0000000 Binary files a/public/images/accessories/pudu-retractable-tray-baffle.png and /dev/null differ diff --git a/public/images/accessories/pudu-retractable-tray-baffle.webp b/public/images/accessories/pudu-retractable-tray-baffle.webp new file mode 100644 index 0000000..dd2a9a5 Binary files /dev/null and b/public/images/accessories/pudu-retractable-tray-baffle.webp differ diff --git a/public/images/accessories/pudu-self-cleaning-dock.png b/public/images/accessories/pudu-self-cleaning-dock.png deleted file mode 100644 index 442435f..0000000 Binary files a/public/images/accessories/pudu-self-cleaning-dock.png and /dev/null differ diff --git a/public/images/accessories/pudu-self-cleaning-dock.webp b/public/images/accessories/pudu-self-cleaning-dock.webp new file mode 100644 index 0000000..a0ad057 Binary files /dev/null and b/public/images/accessories/pudu-self-cleaning-dock.webp differ diff --git a/public/images/accessories/unitree-d1-t.jpg b/public/images/accessories/unitree-d1-t.jpg deleted file mode 100644 index 0aa406a..0000000 Binary files a/public/images/accessories/unitree-d1-t.jpg and /dev/null differ diff --git a/public/images/accessories/unitree-d1-t.png b/public/images/accessories/unitree-d1-t.png deleted file mode 100644 index 069120b..0000000 Binary files a/public/images/accessories/unitree-d1-t.png and /dev/null differ diff --git a/public/images/accessories/unitree-d1-t.webp b/public/images/accessories/unitree-d1-t.webp new file mode 100644 index 0000000..881803e Binary files /dev/null and b/public/images/accessories/unitree-d1-t.webp differ diff --git a/public/images/accessories/unitree-dex1-1.png b/public/images/accessories/unitree-dex1-1.png deleted file mode 100644 index fafef2b..0000000 Binary files a/public/images/accessories/unitree-dex1-1.png and /dev/null differ diff --git a/public/images/accessories/unitree-dex1-1.webp b/public/images/accessories/unitree-dex1-1.webp new file mode 100644 index 0000000..10aa277 Binary files /dev/null and b/public/images/accessories/unitree-dex1-1.webp differ diff --git a/public/images/accessories/unitree-dex1-1/diagram.png b/public/images/accessories/unitree-dex1-1/diagram.png deleted file mode 100644 index 9f2273e..0000000 Binary files a/public/images/accessories/unitree-dex1-1/diagram.png and /dev/null differ diff --git a/public/images/accessories/unitree-dex1-1/diagram.webp b/public/images/accessories/unitree-dex1-1/diagram.webp new file mode 100644 index 0000000..2c229b0 Binary files /dev/null and b/public/images/accessories/unitree-dex1-1/diagram.webp differ diff --git a/public/images/accessories/unitree-dex2-5.jpg b/public/images/accessories/unitree-dex2-5.jpg deleted file mode 100644 index 0daf407..0000000 Binary files a/public/images/accessories/unitree-dex2-5.jpg and /dev/null differ diff --git a/public/images/accessories/unitree-dex2-5.webp b/public/images/accessories/unitree-dex2-5.webp new file mode 100644 index 0000000..5cf43ed Binary files /dev/null and b/public/images/accessories/unitree-dex2-5.webp differ diff --git a/public/images/accessories/unitree-dex3-1.jpg b/public/images/accessories/unitree-dex3-1.jpg deleted file mode 100644 index 2f09d72..0000000 Binary files a/public/images/accessories/unitree-dex3-1.jpg and /dev/null differ diff --git a/public/images/accessories/unitree-dex5-1.png b/public/images/accessories/unitree-dex5-1.png deleted file mode 100644 index 63f9368..0000000 Binary files a/public/images/accessories/unitree-dex5-1.png and /dev/null differ diff --git a/public/images/accessories/unitree-dex5-1.webp b/public/images/accessories/unitree-dex5-1.webp new file mode 100644 index 0000000..f77db20 Binary files /dev/null and b/public/images/accessories/unitree-dex5-1.webp differ diff --git a/public/images/accessories/unitree-dex5-1/hero.png b/public/images/accessories/unitree-dex5-1/hero.png deleted file mode 100644 index 63f9368..0000000 Binary files a/public/images/accessories/unitree-dex5-1/hero.png and /dev/null differ diff --git a/public/images/accessories/unitree-dex5-1/hero.webp b/public/images/accessories/unitree-dex5-1/hero.webp new file mode 100644 index 0000000..f77db20 Binary files /dev/null and b/public/images/accessories/unitree-dex5-1/hero.webp differ diff --git a/public/images/accessories/unitree-dex5-1/params.png b/public/images/accessories/unitree-dex5-1/params.png deleted file mode 100644 index 2353fff..0000000 Binary files a/public/images/accessories/unitree-dex5-1/params.png and /dev/null differ diff --git a/public/images/accessories/unitree-dex5-1/params.webp b/public/images/accessories/unitree-dex5-1/params.webp new file mode 100644 index 0000000..ad13f2c Binary files /dev/null and b/public/images/accessories/unitree-dex5-1/params.webp differ diff --git a/public/images/accessories/unitree-l2.jpg b/public/images/accessories/unitree-l2.jpg deleted file mode 100644 index 6780b88..0000000 Binary files a/public/images/accessories/unitree-l2.jpg and /dev/null differ diff --git a/public/images/accessories/unitree-z1.png b/public/images/accessories/unitree-z1.png deleted file mode 100644 index 6618c4a..0000000 Binary files a/public/images/accessories/unitree-z1.png and /dev/null differ diff --git a/public/images/accessories/unitree-z1.webp b/public/images/accessories/unitree-z1.webp new file mode 100644 index 0000000..7682cf1 Binary files /dev/null and b/public/images/accessories/unitree-z1.webp differ diff --git a/public/images/brands/ys-lootah-robotics-logo.png b/public/images/brands/ys-lootah-robotics-logo.png deleted file mode 100644 index f21914e..0000000 Binary files a/public/images/brands/ys-lootah-robotics-logo.png and /dev/null differ diff --git a/public/images/brands/ys-lootah-robotics-logo.webp b/public/images/brands/ys-lootah-robotics-logo.webp new file mode 100644 index 0000000..83663c3 Binary files /dev/null and b/public/images/brands/ys-lootah-robotics-logo.webp differ diff --git a/public/images/robots/featured-bellabot-pro.png b/public/images/robots/featured-bellabot-pro.png deleted file mode 100644 index 295bece..0000000 Binary files a/public/images/robots/featured-bellabot-pro.png and /dev/null differ diff --git a/public/images/robots/featured-bellabot-pro.webp b/public/images/robots/featured-bellabot-pro.webp new file mode 100644 index 0000000..d16790c Binary files /dev/null and b/public/images/robots/featured-bellabot-pro.webp differ diff --git a/public/images/robots/featured-go2.png b/public/images/robots/featured-go2.png deleted file mode 100644 index b5a5eb9..0000000 Binary files a/public/images/robots/featured-go2.png and /dev/null differ diff --git a/public/images/robots/featured-go2.webp b/public/images/robots/featured-go2.webp new file mode 100644 index 0000000..75ef17a Binary files /dev/null and b/public/images/robots/featured-go2.webp differ diff --git a/public/images/robots/pudu-bellabot.png b/public/images/robots/pudu-bellabot.png deleted file mode 100644 index 4beb03c..0000000 Binary files a/public/images/robots/pudu-bellabot.png and /dev/null differ diff --git a/public/images/robots/pudu-bellabot.webp b/public/images/robots/pudu-bellabot.webp new file mode 100644 index 0000000..ea2de70 Binary files /dev/null and b/public/images/robots/pudu-bellabot.webp differ diff --git a/public/images/robots/pudu-cc1.png b/public/images/robots/pudu-cc1.png deleted file mode 100644 index a6e6c09..0000000 Binary files a/public/images/robots/pudu-cc1.png and /dev/null differ diff --git a/public/images/robots/pudu-cc1.webp b/public/images/robots/pudu-cc1.webp new file mode 100644 index 0000000..1042172 Binary files /dev/null and b/public/images/robots/pudu-cc1.webp differ diff --git a/public/images/robots/pudu-d7.png b/public/images/robots/pudu-d7.png deleted file mode 100644 index 6781874..0000000 Binary files a/public/images/robots/pudu-d7.png and /dev/null differ diff --git a/public/images/robots/pudu-d7.webp b/public/images/robots/pudu-d7.webp new file mode 100644 index 0000000..9a75d02 Binary files /dev/null and b/public/images/robots/pudu-d7.webp differ diff --git a/public/images/robots/pudu-d9.png b/public/images/robots/pudu-d9.png deleted file mode 100644 index e4cdec7..0000000 Binary files a/public/images/robots/pudu-d9.png and /dev/null differ diff --git a/public/images/robots/pudu-d9.webp b/public/images/robots/pudu-d9.webp new file mode 100644 index 0000000..2eb9966 Binary files /dev/null and b/public/images/robots/pudu-d9.webp differ diff --git a/public/images/robots/pudu-flashbot-max.png b/public/images/robots/pudu-flashbot-max.png deleted file mode 100644 index 2c14fac..0000000 Binary files a/public/images/robots/pudu-flashbot-max.png and /dev/null differ diff --git a/public/images/robots/pudu-flashbot-max.webp b/public/images/robots/pudu-flashbot-max.webp new file mode 100644 index 0000000..c829a40 Binary files /dev/null and b/public/images/robots/pudu-flashbot-max.webp differ diff --git a/public/images/robots/pudu-flashbot.png b/public/images/robots/pudu-flashbot.png deleted file mode 100644 index d358c0e..0000000 Binary files a/public/images/robots/pudu-flashbot.png and /dev/null differ diff --git a/public/images/robots/pudu-flashbot.webp b/public/images/robots/pudu-flashbot.webp new file mode 100644 index 0000000..172b4bc Binary files /dev/null and b/public/images/robots/pudu-flashbot.webp differ diff --git a/public/images/robots/pudu-holabot.png b/public/images/robots/pudu-holabot.png deleted file mode 100644 index 17b8ef6..0000000 Binary files a/public/images/robots/pudu-holabot.png and /dev/null differ diff --git a/public/images/robots/pudu-holabot.webp b/public/images/robots/pudu-holabot.webp new file mode 100644 index 0000000..17f0ee9 Binary files /dev/null and b/public/images/robots/pudu-holabot.webp differ diff --git a/public/images/robots/pudu-kettybot.png b/public/images/robots/pudu-kettybot.png deleted file mode 100644 index 17cacac..0000000 Binary files a/public/images/robots/pudu-kettybot.png and /dev/null differ diff --git a/public/images/robots/pudu-kettybot.webp b/public/images/robots/pudu-kettybot.webp new file mode 100644 index 0000000..b105d86 Binary files /dev/null and b/public/images/robots/pudu-kettybot.webp differ diff --git a/public/images/robots/pudu-mt1.png b/public/images/robots/pudu-mt1.png deleted file mode 100644 index 6e49ca5..0000000 Binary files a/public/images/robots/pudu-mt1.png and /dev/null differ diff --git a/public/images/robots/pudu-mt1.webp b/public/images/robots/pudu-mt1.webp new file mode 100644 index 0000000..030aab2 Binary files /dev/null and b/public/images/robots/pudu-mt1.webp differ diff --git a/public/images/robots/pudu-pudubot2.png b/public/images/robots/pudu-pudubot2.png deleted file mode 100644 index 9d85e77..0000000 Binary files a/public/images/robots/pudu-pudubot2.png and /dev/null differ diff --git a/public/images/robots/pudu-pudubot2.webp b/public/images/robots/pudu-pudubot2.webp new file mode 100644 index 0000000..74c41f4 Binary files /dev/null and b/public/images/robots/pudu-pudubot2.webp differ diff --git a/public/images/robots/pudu-sh1.png b/public/images/robots/pudu-sh1.png deleted file mode 100644 index ab148ae..0000000 Binary files a/public/images/robots/pudu-sh1.png and /dev/null differ diff --git a/public/images/robots/pudu-sh1.webp b/public/images/robots/pudu-sh1.webp new file mode 100644 index 0000000..28de4b2 Binary files /dev/null and b/public/images/robots/pudu-sh1.webp differ diff --git a/public/images/robots/pudu-t300.png b/public/images/robots/pudu-t300.png deleted file mode 100644 index ebfa206..0000000 Binary files a/public/images/robots/pudu-t300.png and /dev/null differ diff --git a/public/images/robots/pudu-t300.webp b/public/images/robots/pudu-t300.webp new file mode 100644 index 0000000..7b77220 Binary files /dev/null and b/public/images/robots/pudu-t300.webp differ diff --git a/public/images/robots/unitree-a1.png b/public/images/robots/unitree-a1.png deleted file mode 100644 index 7e4f05a..0000000 Binary files a/public/images/robots/unitree-a1.png and /dev/null differ diff --git a/public/images/robots/unitree-a1.webp b/public/images/robots/unitree-a1.webp new file mode 100644 index 0000000..50973e1 Binary files /dev/null and b/public/images/robots/unitree-a1.webp differ diff --git a/public/images/robots/unitree-a2-w.jpg b/public/images/robots/unitree-a2-w.jpg deleted file mode 100644 index 33df967..0000000 Binary files a/public/images/robots/unitree-a2-w.jpg and /dev/null differ diff --git a/public/images/robots/unitree-a2-w.webp b/public/images/robots/unitree-a2-w.webp new file mode 100644 index 0000000..0fe437c Binary files /dev/null and b/public/images/robots/unitree-a2-w.webp differ diff --git a/public/images/robots/unitree-a2.png b/public/images/robots/unitree-a2.png deleted file mode 100644 index 53b0c93..0000000 Binary files a/public/images/robots/unitree-a2.png and /dev/null differ diff --git a/public/images/robots/unitree-a2.webp b/public/images/robots/unitree-a2.webp new file mode 100644 index 0000000..ac9ad04 Binary files /dev/null and b/public/images/robots/unitree-a2.webp differ diff --git a/public/images/robots/unitree-aliengo.png b/public/images/robots/unitree-aliengo.png deleted file mode 100644 index 1c4af18..0000000 Binary files a/public/images/robots/unitree-aliengo.png and /dev/null differ diff --git a/public/images/robots/unitree-aliengo.webp b/public/images/robots/unitree-aliengo.webp new file mode 100644 index 0000000..736550f Binary files /dev/null and b/public/images/robots/unitree-aliengo.webp differ diff --git a/public/images/robots/unitree-as2.png b/public/images/robots/unitree-as2.png deleted file mode 100644 index 7629eaa..0000000 Binary files a/public/images/robots/unitree-as2.png and /dev/null differ diff --git a/public/images/robots/unitree-as2.webp b/public/images/robots/unitree-as2.webp new file mode 100644 index 0000000..093abef Binary files /dev/null and b/public/images/robots/unitree-as2.webp differ diff --git a/public/images/robots/unitree-b1.png b/public/images/robots/unitree-b1.png deleted file mode 100644 index 8bf7600..0000000 Binary files a/public/images/robots/unitree-b1.png and /dev/null differ diff --git a/public/images/robots/unitree-b1.webp b/public/images/robots/unitree-b1.webp new file mode 100644 index 0000000..0da41c8 Binary files /dev/null and b/public/images/robots/unitree-b1.webp differ diff --git a/public/images/robots/unitree-b2-w.jpg b/public/images/robots/unitree-b2-w.jpg deleted file mode 100644 index 2f5cae7..0000000 Binary files a/public/images/robots/unitree-b2-w.jpg and /dev/null differ diff --git a/public/images/robots/unitree-b2-w.webp b/public/images/robots/unitree-b2-w.webp new file mode 100644 index 0000000..7060beb Binary files /dev/null and b/public/images/robots/unitree-b2-w.webp differ diff --git a/public/images/robots/unitree-b2.png b/public/images/robots/unitree-b2.png deleted file mode 100644 index f9fb8c4..0000000 Binary files a/public/images/robots/unitree-b2.png and /dev/null differ diff --git a/public/images/robots/unitree-b2.webp b/public/images/robots/unitree-b2.webp new file mode 100644 index 0000000..c4b7b2b Binary files /dev/null and b/public/images/robots/unitree-b2.webp differ diff --git a/public/images/robots/unitree-g1.png b/public/images/robots/unitree-g1.png deleted file mode 100644 index 07d8373..0000000 Binary files a/public/images/robots/unitree-g1.png and /dev/null differ diff --git a/public/images/robots/unitree-g1.webp b/public/images/robots/unitree-g1.webp new file mode 100644 index 0000000..b76f3ff Binary files /dev/null and b/public/images/robots/unitree-g1.webp differ diff --git a/public/images/robots/unitree-go1.png b/public/images/robots/unitree-go1.png deleted file mode 100644 index 0f3b075..0000000 Binary files a/public/images/robots/unitree-go1.png and /dev/null differ diff --git a/public/images/robots/unitree-go1.webp b/public/images/robots/unitree-go1.webp new file mode 100644 index 0000000..02c17a3 Binary files /dev/null and b/public/images/robots/unitree-go1.webp differ diff --git a/public/images/robots/unitree-go2.png b/public/images/robots/unitree-go2.png deleted file mode 100644 index e8a3b61..0000000 Binary files a/public/images/robots/unitree-go2.png and /dev/null differ diff --git a/public/images/robots/unitree-go2.webp b/public/images/robots/unitree-go2.webp new file mode 100644 index 0000000..409a783 Binary files /dev/null and b/public/images/robots/unitree-go2.webp differ diff --git a/public/images/robots/unitree-h1.jpg b/public/images/robots/unitree-h1.jpg deleted file mode 100644 index 423e398..0000000 Binary files a/public/images/robots/unitree-h1.jpg and /dev/null differ diff --git a/public/images/robots/unitree-h1.webp b/public/images/robots/unitree-h1.webp new file mode 100644 index 0000000..87b47de Binary files /dev/null and b/public/images/robots/unitree-h1.webp differ diff --git a/public/images/robots/unitree-h2.png b/public/images/robots/unitree-h2.png deleted file mode 100644 index 30ffccd..0000000 Binary files a/public/images/robots/unitree-h2.png and /dev/null differ diff --git a/public/images/robots/unitree-h2.webp b/public/images/robots/unitree-h2.webp new file mode 100644 index 0000000..a5bea67 Binary files /dev/null and b/public/images/robots/unitree-h2.webp differ diff --git a/public/images/robots/unitree-r1.png b/public/images/robots/unitree-r1.png deleted file mode 100644 index 089de12..0000000 Binary files a/public/images/robots/unitree-r1.png and /dev/null differ diff --git a/public/images/robots/unitree-r1.webp b/public/images/robots/unitree-r1.webp new file mode 100644 index 0000000..e6c3223 Binary files /dev/null and b/public/images/robots/unitree-r1.webp differ diff --git a/public/images/robots/unitree/b2-shop-1.jpg b/public/images/robots/unitree/b2-shop-1.jpg deleted file mode 100644 index e155bc4..0000000 Binary files a/public/images/robots/unitree/b2-shop-1.jpg and /dev/null differ diff --git a/public/images/robots/unitree/b2-shop-1.webp b/public/images/robots/unitree/b2-shop-1.webp new file mode 100644 index 0000000..9e69fca Binary files /dev/null and b/public/images/robots/unitree/b2-shop-1.webp differ diff --git a/public/images/robots/unitree/g1-shop-1.jpg b/public/images/robots/unitree/g1-shop-1.jpg deleted file mode 100644 index 8a0af06..0000000 Binary files a/public/images/robots/unitree/g1-shop-1.jpg and /dev/null differ diff --git a/public/images/robots/unitree/g1-shop-1.webp b/public/images/robots/unitree/g1-shop-1.webp new file mode 100644 index 0000000..7de27c2 Binary files /dev/null and b/public/images/robots/unitree/g1-shop-1.webp differ diff --git a/public/images/robots/unitree/go2-shop-2.png b/public/images/robots/unitree/go2-shop-2.png deleted file mode 100644 index ae3e23d..0000000 Binary files a/public/images/robots/unitree/go2-shop-2.png and /dev/null differ diff --git a/public/images/robots/unitree/go2-shop-2.webp b/public/images/robots/unitree/go2-shop-2.webp new file mode 100644 index 0000000..1bd9e13 Binary files /dev/null and b/public/images/robots/unitree/go2-shop-2.webp differ diff --git a/public/industries/cards/security-surveillance.jpg b/public/industries/cards/security-surveillance.jpg deleted file mode 100644 index a9d3093..0000000 Binary files a/public/industries/cards/security-surveillance.jpg and /dev/null differ diff --git a/public/industries/cards/security-surveillance.webp b/public/industries/cards/security-surveillance.webp new file mode 100644 index 0000000..71bbaec Binary files /dev/null and b/public/industries/cards/security-surveillance.webp differ diff --git a/public/industries/unitree/ai-patrol.jpg b/public/industries/unitree/ai-patrol.jpg deleted file mode 100644 index b4cb1a2..0000000 Binary files a/public/industries/unitree/ai-patrol.jpg and /dev/null differ diff --git a/public/industries/unitree/ai-patrol.webp b/public/industries/unitree/ai-patrol.webp new file mode 100644 index 0000000..0983d98 Binary files /dev/null and b/public/industries/unitree/ai-patrol.webp differ diff --git a/public/industries/unitree/analytics.jpg b/public/industries/unitree/analytics.jpg deleted file mode 100644 index 1eb804d..0000000 Binary files a/public/industries/unitree/analytics.jpg and /dev/null differ diff --git a/public/industries/unitree/analytics.webp b/public/industries/unitree/analytics.webp new file mode 100644 index 0000000..dd4c737 Binary files /dev/null and b/public/industries/unitree/analytics.webp differ diff --git a/public/industries/unitree/b2-render.png b/public/industries/unitree/b2-render.png deleted file mode 100644 index ada38b8..0000000 Binary files a/public/industries/unitree/b2-render.png and /dev/null differ diff --git a/public/industries/unitree/b2-render.webp b/public/industries/unitree/b2-render.webp new file mode 100644 index 0000000..de04706 Binary files /dev/null and b/public/industries/unitree/b2-render.webp differ diff --git a/public/industries/unitree/cloud.jpg b/public/industries/unitree/cloud.jpg deleted file mode 100644 index 9080815..0000000 Binary files a/public/industries/unitree/cloud.jpg and /dev/null differ diff --git a/public/industries/unitree/cloud.webp b/public/industries/unitree/cloud.webp new file mode 100644 index 0000000..5b4fefb Binary files /dev/null and b/public/industries/unitree/cloud.webp differ diff --git a/public/industries/unitree/cost-efficiency.jpg b/public/industries/unitree/cost-efficiency.jpg deleted file mode 100644 index 9eb2c05..0000000 Binary files a/public/industries/unitree/cost-efficiency.jpg and /dev/null differ diff --git a/public/industries/unitree/cost-efficiency.webp b/public/industries/unitree/cost-efficiency.webp new file mode 100644 index 0000000..4567e2c Binary files /dev/null and b/public/industries/unitree/cost-efficiency.webp differ diff --git a/public/industries/unitree/digital-twin.jpg b/public/industries/unitree/digital-twin.jpg deleted file mode 100644 index 738e1d0..0000000 Binary files a/public/industries/unitree/digital-twin.jpg and /dev/null differ diff --git a/public/industries/unitree/digital-twin.webp b/public/industries/unitree/digital-twin.webp new file mode 100644 index 0000000..44494a7 Binary files /dev/null and b/public/industries/unitree/digital-twin.webp differ diff --git a/public/industries/unitree/endurance.jpg b/public/industries/unitree/endurance.jpg deleted file mode 100644 index ec81d8f..0000000 Binary files a/public/industries/unitree/endurance.jpg and /dev/null differ diff --git a/public/industries/unitree/endurance.webp b/public/industries/unitree/endurance.webp new file mode 100644 index 0000000..4868498 Binary files /dev/null and b/public/industries/unitree/endurance.webp differ diff --git a/public/industries/unitree/flight-path.jpg b/public/industries/unitree/flight-path.jpg deleted file mode 100644 index 686e3dc..0000000 Binary files a/public/industries/unitree/flight-path.jpg and /dev/null differ diff --git a/public/industries/unitree/flight-path.webp b/public/industries/unitree/flight-path.webp new file mode 100644 index 0000000..f61ff1d Binary files /dev/null and b/public/industries/unitree/flight-path.webp differ diff --git a/public/industries/unitree/go2-render.png b/public/industries/unitree/go2-render.png deleted file mode 100644 index e4d9f4c..0000000 Binary files a/public/industries/unitree/go2-render.png and /dev/null differ diff --git a/public/industries/unitree/go2-render.webp b/public/industries/unitree/go2-render.webp new file mode 100644 index 0000000..b25d4c0 Binary files /dev/null and b/public/industries/unitree/go2-render.webp differ diff --git a/public/industries/unitree/industrial-park.jpg b/public/industries/unitree/industrial-park.jpg deleted file mode 100644 index 5d4cdfa..0000000 Binary files a/public/industries/unitree/industrial-park.jpg and /dev/null differ diff --git a/public/industries/unitree/industrial-park.webp b/public/industries/unitree/industrial-park.webp new file mode 100644 index 0000000..c734d41 Binary files /dev/null and b/public/industries/unitree/industrial-park.webp differ diff --git a/public/industries/unitree/modular.jpg b/public/industries/unitree/modular.jpg deleted file mode 100644 index 740269b..0000000 Binary files a/public/industries/unitree/modular.jpg and /dev/null differ diff --git a/public/industries/unitree/modular.webp b/public/industries/unitree/modular.webp new file mode 100644 index 0000000..b67cfcb Binary files /dev/null and b/public/industries/unitree/modular.webp differ diff --git a/public/industries/unitree/patrol-system.png b/public/industries/unitree/patrol-system.png deleted file mode 100644 index 446968f..0000000 Binary files a/public/industries/unitree/patrol-system.png and /dev/null differ diff --git a/public/industries/unitree/patrol-system.webp b/public/industries/unitree/patrol-system.webp new file mode 100644 index 0000000..4d509a4 Binary files /dev/null and b/public/industries/unitree/patrol-system.webp differ diff --git a/public/industries/unitree/pipeline.jpg b/public/industries/unitree/pipeline.jpg deleted file mode 100644 index 92331f8..0000000 Binary files a/public/industries/unitree/pipeline.jpg and /dev/null differ diff --git a/public/industries/unitree/pipeline.webp b/public/industries/unitree/pipeline.webp new file mode 100644 index 0000000..c5cf1dc Binary files /dev/null and b/public/industries/unitree/pipeline.webp differ diff --git a/public/industries/unitree/quad-render.png b/public/industries/unitree/quad-render.png deleted file mode 100644 index b68f8b4..0000000 Binary files a/public/industries/unitree/quad-render.png and /dev/null differ diff --git a/public/industries/unitree/quad-render.webp b/public/industries/unitree/quad-render.webp new file mode 100644 index 0000000..9dc230b Binary files /dev/null and b/public/industries/unitree/quad-render.webp differ diff --git a/public/industries/unitree/sensor-overview.png b/public/industries/unitree/sensor-overview.png deleted file mode 100644 index 127f839..0000000 Binary files a/public/industries/unitree/sensor-overview.png and /dev/null differ diff --git a/public/industries/unitree/sensor-overview.webp b/public/industries/unitree/sensor-overview.webp new file mode 100644 index 0000000..d200526 Binary files /dev/null and b/public/industries/unitree/sensor-overview.webp differ diff --git a/public/industries/unitree/substation.jpg b/public/industries/unitree/substation.jpg deleted file mode 100644 index 353d298..0000000 Binary files a/public/industries/unitree/substation.jpg and /dev/null differ diff --git a/public/industries/unitree/substation.webp b/public/industries/unitree/substation.webp new file mode 100644 index 0000000..25cefff Binary files /dev/null and b/public/industries/unitree/substation.webp differ diff --git a/public/industries/unitree/terrain-day.jpg b/public/industries/unitree/terrain-day.jpg deleted file mode 100644 index 2ee10a9..0000000 Binary files a/public/industries/unitree/terrain-day.jpg and /dev/null differ diff --git a/public/industries/unitree/terrain-day.webp b/public/industries/unitree/terrain-day.webp new file mode 100644 index 0000000..7dd3918 Binary files /dev/null and b/public/industries/unitree/terrain-day.webp differ diff --git a/public/industries/unitree/terrain-night.jpg b/public/industries/unitree/terrain-night.jpg deleted file mode 100644 index 4037866..0000000 Binary files a/public/industries/unitree/terrain-night.jpg and /dev/null differ diff --git a/public/industries/unitree/terrain-night.webp b/public/industries/unitree/terrain-night.webp new file mode 100644 index 0000000..8687792 Binary files /dev/null and b/public/industries/unitree/terrain-night.webp differ diff --git a/public/industries/unitree/terrain.jpg b/public/industries/unitree/terrain.jpg deleted file mode 100644 index 72950dd..0000000 Binary files a/public/industries/unitree/terrain.jpg and /dev/null differ diff --git a/public/industries/unitree/terrain.webp b/public/industries/unitree/terrain.webp new file mode 100644 index 0000000..209a0f5 Binary files /dev/null and b/public/industries/unitree/terrain.webp differ diff --git a/public/industries/unitree/utility-room.jpg b/public/industries/unitree/utility-room.jpg deleted file mode 100644 index a12637a..0000000 Binary files a/public/industries/unitree/utility-room.jpg and /dev/null differ diff --git a/public/industries/unitree/utility-room.webp b/public/industries/unitree/utility-room.webp new file mode 100644 index 0000000..cdfa466 Binary files /dev/null and b/public/industries/unitree/utility-room.webp differ diff --git a/scripts/convert-to-webp.mjs b/scripts/convert-to-webp.mjs new file mode 100644 index 0000000..6f83087 --- /dev/null +++ b/scripts/convert-to-webp.mjs @@ -0,0 +1,74 @@ +import { promises as fs } from 'node:fs'; +import path from 'node:path'; +import sharp from 'sharp'; + +const ROOT = path.resolve('public'); +// Files NOT to touch +const SKIP = new Set(['favicon.ico', 'apple-touch-icon.png', 'icon.png', 'apple-icon.png']); +const SKIP_EXACT_PATHS = new Set([ + 'public/favicon.ico', + 'public/apple-touch-icon.png', +]); + +const exts = new Set(['.jpg', '.jpeg', '.png', '.gif']); +const results = { converted: 0, savedBytes: 0, skipped: 0, failed: 0 }; + +async function walk(dir) { + const entries = await fs.readdir(dir, { withFileTypes: true }); + for (const e of entries) { + const p = path.join(dir, e.name); + if (e.isDirectory()) { + await walk(p); + } else if (exts.has(path.extname(p).toLowerCase())) { + await convert(p); + } + } +} + +async function convert(input) { + const ext = path.extname(input).toLowerCase(); + const base = input.slice(0, -ext.length); + const output = base + '.webp'; + const relRoot = path.relative(process.cwd(), input).split(path.sep).join('/'); + if (SKIP.has(path.basename(input)) || SKIP_EXACT_PATHS.has(relRoot)) { + results.skipped++; + console.log(`SKIP ${relRoot}`); + return; + } + try { + const stIn = await fs.stat(input); + // Output options per type + const isPng = ext === '.png'; + const isGif = ext === '.gif'; + const opts = isPng + ? { quality: 86, alphaQuality: 90, effort: 5, nearLossless: false } + : isGif + ? { quality: 80, effort: 5, loop: 0 } // animated -> animated webp + : { quality: 82, effort: 5 }; + let pipeline = sharp(input, { animated: isGif }); + await pipeline.webp(opts).toFile(output); + const stOut = await fs.stat(output); + if (stOut.size >= stIn.size) { + // worse than original — keep original, remove webp + await fs.unlink(output); + results.skipped++; + console.log(`KEEP ${relRoot} (webp larger: ${stOut.size} vs ${stIn.size})`); + return; + } + await fs.unlink(input); + results.converted++; + results.savedBytes += stIn.size - stOut.size; + const inKB = (stIn.size / 1024).toFixed(0); + const outKB = (stOut.size / 1024).toFixed(0); + console.log(`OK ${relRoot} ${inKB}KB -> ${outKB}KB`); + } catch (err) { + results.failed++; + console.log(`FAIL ${relRoot}: ${err.message}`); + } +} + +await walk(ROOT); +const savedMB = (results.savedBytes / 1024 / 1024).toFixed(2); +console.log('\n---'); +console.log(`converted: ${results.converted} skipped: ${results.skipped} failed: ${results.failed}`); +console.log(`saved: ${savedMB} MB`); diff --git a/scripts/fix-image-refs.mjs b/scripts/fix-image-refs.mjs new file mode 100644 index 0000000..3c86613 --- /dev/null +++ b/scripts/fix-image-refs.mjs @@ -0,0 +1,70 @@ +import { promises as fs } from 'node:fs'; +import path from 'node:path'; + +// Build map: relative path that ORIGINALLY existed but now only has .webp +// Walk /public for .webp files, compute their candidate original ext (.jpg/.png/.gif) +// If the candidate no longer exists on disk, that's a swap target. + +const PUBLIC_ROOT = path.resolve('public'); +const SRC_ROOT = path.resolve('src'); + +async function walk(dir, out) { + const entries = await fs.readdir(dir, { withFileTypes: true }); + for (const e of entries) { + const p = path.join(dir, e.name); + if (e.isDirectory()) await walk(p, out); + else out.push(p); + } +} + +// 1. Find .webp files and detect which original ext is missing +const all = []; +await walk(PUBLIC_ROOT, all); +const webps = all.filter((p) => p.toLowerCase().endsWith('.webp')); +const existing = new Set(all.map((p) => p.toLowerCase())); + +const swaps = []; // { from: /images/foo.jpg, to: /images/foo.webp } +for (const wp of webps) { + const base = wp.slice(0, -5); // strip .webp + for (const ext of ['.jpg', '.jpeg', '.png', '.gif']) { + const candidate = base + ext; + if (!existing.has(candidate.toLowerCase())) { + // Candidate gone => it was converted + const rel = '/' + path.relative(PUBLIC_ROOT, candidate).split(path.sep).join('/'); + const relWebp = '/' + path.relative(PUBLIC_ROOT, wp).split(path.sep).join('/'); + swaps.push({ from: rel, to: relWebp }); + } + } +} + +console.log(`detected ${swaps.length} swap pairs`); + +// 2. Walk /src for ts/tsx/js/jsx/json/md/css and apply replacements +const srcExts = new Set(['.ts', '.tsx', '.js', '.jsx', '.json', '.md', '.css', '.html', '.mjs']); +const srcFiles = []; +await walk(SRC_ROOT, srcFiles); +const targets = srcFiles.filter((p) => srcExts.has(path.extname(p).toLowerCase())); + +let totalReplacements = 0; +let touchedFiles = 0; +for (const file of targets) { + let text = await fs.readFile(file, 'utf8'); + let count = 0; + for (const s of swaps) { + if (text.includes(s.from)) { + const before = text; + text = text.split(s.from).join(s.to); + const occurrences = (before.length - text.length) / (s.from.length - s.to.length); + count += occurrences; + } + } + if (count > 0) { + await fs.writeFile(file, text, 'utf8'); + totalReplacements += count; + touchedFiles++; + const rel = path.relative(process.cwd(), file).split(path.sep).join('/'); + console.log(`UPDATE ${rel} (${count} swaps)`); + } +} +console.log('---'); +console.log(`replaced ${totalReplacements} references across ${touchedFiles} files`); diff --git a/src/app/bu-sunaidah/page.tsx b/src/app/bu-sunaidah/page.tsx index 3e35d41..2421a1e 100644 --- a/src/app/bu-sunaidah/page.tsx +++ b/src/app/bu-sunaidah/page.tsx @@ -116,7 +116,7 @@ export default async function BuSunaidahPage() { {BU_SUNAIDAH_REEL == null ? (