diff --git a/README.md b/README.md
index b19211b..c316a8f 100644
--- a/README.md
+++ b/README.md
@@ -57,6 +57,21 @@ Problem records deliberately leave `http_statuses`, `retryable`,
curated value. Clients should use the RFC 9457 response body, especially
`code`, `status`, and `detail`, for request-specific behavior.
+## Site design
+
+Human pages share one stylesheet and self-hosted font subsets (Public Sans,
+IBM Plex Mono) kept in `src/assets/`, following the registrystack.org design
+system. They are publisher-owned presentational machinery, not identifiers:
+`npm run import:catalog` never touches them, the build copies them to
+`public/assets/`, and the stylesheet is served under a content-hashed
+filename so it can cache safely. The OFL font licenses are kept beside the
+fonts in `src/assets/fonts/`.
+
+HTML pages carry `noindex`: the resolver is reached by following identifiers
+from responses and documentation, not by search, and human explanations stay
+with the product docs. Machine artifacts, catalogs, and `llms.txt` are
+unaffected.
+
## Local workflow
Import the catalog and artifacts from an exact Registry Stack commit:
diff --git a/public/404.html b/public/404.html
index 8b338be..abc293f 100644
--- a/public/404.html
+++ b/public/404.html
@@ -4,40 +4,85 @@
This path is not a registered Registry Stack identifier.
+
This path is not a registered Registry Stack identifier.
+
+
+
-
Authority Boundary
+
Authority boundary
This site publishes the current Registry Stack identifiers from a digest-bound source catalog. Product source and the actual service response remain authoritative for runtime behavior.