diff --git a/assets/js/theme/body.js b/assets/js/theme/body.js
index e6d95ba15de290f1d37cfbdcacc5f821bbae15dc..657d633363a356498890f33ef3757b0f269db3eb 100644
--- a/assets/js/theme/body.js
+++ b/assets/js/theme/body.js
@@ -1,3 +1,6 @@
 window.addEventListener('load', () => {
     document.body.classList.add('is-loaded');
 });
+window.addEventListener('DOMContentLoaded', (event) => {
+    new PagefindUI({ element: "#search", showSubResults: true });
+});
diff --git a/layouts/partials/head/csp.html b/layouts/partials/head/csp.html
index 83ca573f9a4e875adb685e71befab90ccff45e85..ac8482b0a467a6049ead337d5a328474a0d393e6 100644
--- a/layouts/partials/head/csp.html
+++ b/layouts/partials/head/csp.html
@@ -1,5 +1,10 @@
 {{- with site.Data.website.external_domains -}}
-<meta
-  http-equiv="-Content-Security-Policy"
-  content="default-src 'self' {{ delimit . " " }} {{ if not hugo.IsProduction }}'unsafe-inline'{{ end }};{{ if site.Params.search.active }} img-src * 'self' data: https:;{{ end }}"/>
+<meta http-equiv="-Content-Security-Policy" 
+      content="
+        default-src 'self' {{ delimit . " " }} {{ if not hugo.IsProduction }}'unsafe-inline'{{ end }};
+        {{ if site.Params.search.active }} 
+          script-src 'unsafe-eval';
+          img-src * 'self' data: https:;
+        {{ end }}
+      " />
 {{- end -}}
\ No newline at end of file
diff --git a/layouts/partials/header/search.html b/layouts/partials/header/search.html
index 175db5bf159852a4685b787e46e79bf44e0acbd7..ce06120ebf2b7a270d5d110e483b6650011e728a 100644
--- a/layouts/partials/header/search.html
+++ b/layouts/partials/header/search.html
@@ -1,9 +1,6 @@
 <script src="/pagefind/pagefind-ui.js"></script>
-  <div id="search" class="search__modal" aria-hidden="true" aria-modal="true" role="dialog">
-    <button class="search__close" aria-label="{{ i18n "commons.search.close" }}">{{ i18n "commons.search.close" }}</button>
-  </div>
-  <script>
-    window.addEventListener('DOMContentLoaded', (event) => {
-        new PagefindUI({ element: "#search", showSubResults: true });
-    });
-</script>
\ No newline at end of file
+<div id="search" class="search__modal" aria-hidden="true" aria-modal="true" role="dialog">
+  <button class="search__close" aria-label="{{ i18n "commons.search.close" }}">
+    {{ i18n "commons.search.close" }}
+  </button>
+</div>
\ No newline at end of file
diff --git a/package.json b/package.json
index 8fab964e65cee807df4ce755796c0a1220149611..79b8a0a42bfaecd545d6a2b9cced2361924d7d5b 100644
--- a/package.json
+++ b/package.json
@@ -15,7 +15,8 @@
     "@splidejs/splide": "^3.6.12",
     "glightbox": "^3.1.0",
     "intersection-observer": "^0.12.0",
-    "leaflet": "^1.9.4"
+    "leaflet": "^1.9.4",
+    "pagefind": "^1.0.3"
   },
   "bin": "./bin/osuny.js"
 }
diff --git a/yarn.lock b/yarn.lock
index 13c69f76a81f759101d90ea899c26ed996ff4710..706e6a356bdc7de500587d7f361eb398405ecbea 100644
--- a/yarn.lock
+++ b/yarn.lock
@@ -2,6 +2,31 @@
 # yarn lockfile v1
 
 
+"@pagefind/darwin-arm64@1.0.3":
+  version "1.0.3"
+  resolved "https://registry.yarnpkg.com/@pagefind/darwin-arm64/-/darwin-arm64-1.0.3.tgz#5377ff2c3fca97125d0624da019b52cc2375edb9"
+  integrity sha512-vsHDtvao3W4iFCxVc4S0BVhpj3E2MAoIVM7RmuQfGp1Ng22nGLRaMP6FguLO8TMabRJdvp4SVr227hL4WGKOHA==
+
+"@pagefind/darwin-x64@1.0.3":
+  version "1.0.3"
+  resolved "https://registry.yarnpkg.com/@pagefind/darwin-x64/-/darwin-x64-1.0.3.tgz#c4bae6522e3bac09a9f58f48f89356dca931f5ca"
+  integrity sha512-NhEXHHYmB/hT6lx5rCcmnVTxH+uIkMAd43bzEqMwHQosqTZEIQfwihmV39H+m8yo7jFvz3zRbJNzhAh7G4PiwA==
+
+"@pagefind/linux-arm64@1.0.3":
+  version "1.0.3"
+  resolved "https://registry.yarnpkg.com/@pagefind/linux-arm64/-/linux-arm64-1.0.3.tgz#ada5ec030c7286f956d506aebe1e1e53ea826966"
+  integrity sha512-RGsMt4AmGT8WxCSeP09arU7Za6Vf/We4TWHVSbY7vDMuwWql9Ngoib/q1cP9dIAIMdkXh9ePG/S3mGnJYsdzuQ==
+
+"@pagefind/linux-x64@1.0.3":
+  version "1.0.3"
+  resolved "https://registry.yarnpkg.com/@pagefind/linux-x64/-/linux-x64-1.0.3.tgz#4f658bac9ce5e9fb22e0a4350ff933e621c6b916"
+  integrity sha512-o+VCKaqImL42scSH1n5gUfppYSNyu3BuGTvtKKgWHmycbL+A3fkFH+ZOFbaLeN7LVTvJqJIOYbk4j2yaq9784Q==
+
+"@pagefind/windows-x64@1.0.3":
+  version "1.0.3"
+  resolved "https://registry.yarnpkg.com/@pagefind/windows-x64/-/windows-x64-1.0.3.tgz#686c46cb274e087362d0a8d6ff03e89a10ee508e"
+  integrity sha512-S+Yq4FyvXJm4F+iN/wRiLvEEF8Xs9lTKGtQGaRHXJslQyl65dytDDPIULXJXIadrDbnMrnTt4C2YHmEUIyUIHg==
+
 "@splidejs/splide@^3.6.12":
   version "3.6.12"
   resolved "https://registry.yarnpkg.com/@splidejs/splide/-/splide-3.6.12.tgz#9b6bede5c99140fd06754990c91e474374566c30"
@@ -20,11 +45,6 @@ brace-expansion@^1.1.7:
     balanced-match "^1.0.0"
     concat-map "0.0.1"
 
-chalk@^5.3.0:
-  version "5.3.0"
-  resolved "https://registry.yarnpkg.com/chalk/-/chalk-5.3.0.tgz#67c20a7ebef70e7f3970a01f90fa210cb6860385"
-  integrity sha512-dLitG79d+GV1Nb/VYcCDFivJeK1hiukt9QjRNVOsUtTy1rR1YJsmpGGTZ3qJos+uw7WmWF4wUwBd9jxjocFC2w==
-
 concat-map@0.0.1:
   version "0.0.1"
   resolved "https://registry.yarnpkg.com/concat-map/-/concat-map-0.0.1.tgz#d8a96bd77fd68df7793a73036a3ba0d5405d477b"
@@ -113,6 +133,17 @@ once@^1.3.0:
   dependencies:
     wrappy "1"
 
+pagefind@^1.0.3:
+  version "1.0.3"
+  resolved "https://registry.yarnpkg.com/pagefind/-/pagefind-1.0.3.tgz#1ce2118408d42fbd303e8b567ed3fff134895138"
+  integrity sha512-ws7kmMxW6OuxzsOjj3YAx6TYq/54MiE3wfyBM3J5CInbZyBBvM2Z8c8IYvnMkBcb5v2EoB9DewXEekOEiDRu5g==
+  optionalDependencies:
+    "@pagefind/darwin-arm64" "1.0.3"
+    "@pagefind/darwin-x64" "1.0.3"
+    "@pagefind/linux-arm64" "1.0.3"
+    "@pagefind/linux-x64" "1.0.3"
+    "@pagefind/windows-x64" "1.0.3"
+
 path-is-absolute@^1.0.0:
   version "1.0.1"
   resolved "https://registry.yarnpkg.com/path-is-absolute/-/path-is-absolute-1.0.1.tgz#174b9268735534ffbc7ace6bf53a5a9e1b5c5f5f"