diff --git a/src/components/SearchForm.astro b/src/components/SearchForm.astro
new file mode 100644
index 0000000..e29410d
--- /dev/null
+++ b/src/components/SearchForm.astro
@@ -0,0 +1,43 @@
+---
+/** The form of the search, its status and its results, which the search page and the dialog of the bar share. */
+import { TEXT } from '../content/site'
+import Icon from './Icon.astro'
+
+interface Props {
+ /** The id of the field, unique on the page. */
+ id: string
+ /** Whether the field takes the focus when the form appears. */
+ autofocus?: boolean
+}
+const { id, autofocus = false } = Astro.props
+const labels = TEXT.search
+---
+
+
+
diff --git a/src/components/SiteBar.astro b/src/components/SiteBar.astro
index c71ceef..16d51e7 100644
--- a/src/components/SiteBar.astro
+++ b/src/components/SiteBar.astro
@@ -1,11 +1,13 @@
---
/**
- * The bar on top of every page: the brand that leads home, the way to search, the organization on GitHub and
- * on Packagist, and the theme control.
+ * The bar on top of every page: the brand that leads home, the search, which opens as a dialog over the page
+ * and is a link to the search page where no script runs, the organization on GitHub and on Packagist, and
+ * the theme control.
*/
import { SITE, TEXT } from '../content/site'
import BrandMark from './BrandMark.astro'
import Icon from './Icon.astro'
+import SearchForm from './SearchForm.astro'
import ThemeToggle from './ThemeToggle.astro'
---
@@ -16,8 +18,17 @@ import ThemeToggle from './ThemeToggle.astro'
+
+
diff --git a/src/content/site.ts b/src/content/site.ts
index 8ef8f8a..f9c3ecc 100644
--- a/src/content/site.ts
+++ b/src/content/site.ts
@@ -74,6 +74,9 @@ export const TEXT = {
lede: 'Look up a class, a method, a pattern or a problem to solve.',
label: 'Search term',
placeholder: 'E.g. Collection, Instant, correlation id',
+ close: 'Close the search',
+ /** The keys that open the search from any page, shown beside the control of the bar. */
+ shortcut: 'Ctrl K',
idle: 'Type at least two letters.',
loading: 'Searching...',
empty: 'Nothing found. Try another word.',
diff --git a/src/layouts/BaseLayout.astro b/src/layouts/BaseLayout.astro
index 7ff94f9..0267dc4 100644
--- a/src/layouts/BaseLayout.astro
+++ b/src/layouts/BaseLayout.astro
@@ -96,6 +96,7 @@ const jsonLd = structuredData