diff --git a/src/SharpClient.App/wwwroot/index.html b/src/SharpClient.App/wwwroot/index.html
index 4dad66f..b3ca941 100644
--- a/src/SharpClient.App/wwwroot/index.html
+++ b/src/SharpClient.App/wwwroot/index.html
@@ -5,9 +5,7 @@
SharpClient.App
-
-
-
+
diff --git a/src/SharpClient.UI/wwwroot/fonts.css b/src/SharpClient.UI/wwwroot/fonts.css
new file mode 100644
index 0000000..829c7fd
--- /dev/null
+++ b/src/SharpClient.UI/wwwroot/fonts.css
@@ -0,0 +1,77 @@
+/* Self-hosted fonts (SIL Open Font License) — no external CDN, works offline.
+ woff2 files live alongside this file under _content/SharpClient.UI/fonts/; the url()s are relative
+ to this stylesheet. Latin subset only (Fontsource) — non-latin glyphs fall back to the system
+ monospace/sans in the --mono/--ui stacks. Weights match what the UI uses: mono 400/700 (bold ANSI),
+ Space Grotesk 400/500/600 (UI chrome). font-display:swap so text paints immediately with the
+ fallback and re-lays out when the webfont loads. */
+
+/* JetBrains Mono — default output font */
+@font-face {
+ font-family: 'JetBrains Mono';
+ font-style: normal;
+ font-weight: 400;
+ font-display: swap;
+ src: url('fonts/jetbrains-mono-400.woff2') format('woff2');
+}
+@font-face {
+ font-family: 'JetBrains Mono';
+ font-style: normal;
+ font-weight: 700;
+ font-display: swap;
+ src: url('fonts/jetbrains-mono-700.woff2') format('woff2');
+}
+
+/* IBM Plex Mono — output font option */
+@font-face {
+ font-family: 'IBM Plex Mono';
+ font-style: normal;
+ font-weight: 400;
+ font-display: swap;
+ src: url('fonts/ibm-plex-mono-400.woff2') format('woff2');
+}
+@font-face {
+ font-family: 'IBM Plex Mono';
+ font-style: normal;
+ font-weight: 700;
+ font-display: swap;
+ src: url('fonts/ibm-plex-mono-700.woff2') format('woff2');
+}
+
+/* Space Mono — output font option */
+@font-face {
+ font-family: 'Space Mono';
+ font-style: normal;
+ font-weight: 400;
+ font-display: swap;
+ src: url('fonts/space-mono-400.woff2') format('woff2');
+}
+@font-face {
+ font-family: 'Space Mono';
+ font-style: normal;
+ font-weight: 700;
+ font-display: swap;
+ src: url('fonts/space-mono-700.woff2') format('woff2');
+}
+
+/* Space Grotesk — UI font */
+@font-face {
+ font-family: 'Space Grotesk';
+ font-style: normal;
+ font-weight: 400;
+ font-display: swap;
+ src: url('fonts/space-grotesk-400.woff2') format('woff2');
+}
+@font-face {
+ font-family: 'Space Grotesk';
+ font-style: normal;
+ font-weight: 500;
+ font-display: swap;
+ src: url('fonts/space-grotesk-500.woff2') format('woff2');
+}
+@font-face {
+ font-family: 'Space Grotesk';
+ font-style: normal;
+ font-weight: 600;
+ font-display: swap;
+ src: url('fonts/space-grotesk-600.woff2') format('woff2');
+}
diff --git a/src/SharpClient.UI/wwwroot/fonts/ibm-plex-mono-400.woff2 b/src/SharpClient.UI/wwwroot/fonts/ibm-plex-mono-400.woff2
new file mode 100644
index 0000000..0804aaf
Binary files /dev/null and b/src/SharpClient.UI/wwwroot/fonts/ibm-plex-mono-400.woff2 differ
diff --git a/src/SharpClient.UI/wwwroot/fonts/ibm-plex-mono-700.woff2 b/src/SharpClient.UI/wwwroot/fonts/ibm-plex-mono-700.woff2
new file mode 100644
index 0000000..5d7ff0c
Binary files /dev/null and b/src/SharpClient.UI/wwwroot/fonts/ibm-plex-mono-700.woff2 differ
diff --git a/src/SharpClient.UI/wwwroot/fonts/jetbrains-mono-400.woff2 b/src/SharpClient.UI/wwwroot/fonts/jetbrains-mono-400.woff2
new file mode 100644
index 0000000..5858873
Binary files /dev/null and b/src/SharpClient.UI/wwwroot/fonts/jetbrains-mono-400.woff2 differ
diff --git a/src/SharpClient.UI/wwwroot/fonts/jetbrains-mono-700.woff2 b/src/SharpClient.UI/wwwroot/fonts/jetbrains-mono-700.woff2
new file mode 100644
index 0000000..3a4e333
Binary files /dev/null and b/src/SharpClient.UI/wwwroot/fonts/jetbrains-mono-700.woff2 differ
diff --git a/src/SharpClient.UI/wwwroot/fonts/space-grotesk-400.woff2 b/src/SharpClient.UI/wwwroot/fonts/space-grotesk-400.woff2
new file mode 100644
index 0000000..0e63471
Binary files /dev/null and b/src/SharpClient.UI/wwwroot/fonts/space-grotesk-400.woff2 differ
diff --git a/src/SharpClient.UI/wwwroot/fonts/space-grotesk-500.woff2 b/src/SharpClient.UI/wwwroot/fonts/space-grotesk-500.woff2
new file mode 100644
index 0000000..0db251f
Binary files /dev/null and b/src/SharpClient.UI/wwwroot/fonts/space-grotesk-500.woff2 differ
diff --git a/src/SharpClient.UI/wwwroot/fonts/space-grotesk-600.woff2 b/src/SharpClient.UI/wwwroot/fonts/space-grotesk-600.woff2
new file mode 100644
index 0000000..a1db41a
Binary files /dev/null and b/src/SharpClient.UI/wwwroot/fonts/space-grotesk-600.woff2 differ
diff --git a/src/SharpClient.UI/wwwroot/fonts/space-mono-400.woff2 b/src/SharpClient.UI/wwwroot/fonts/space-mono-400.woff2
new file mode 100644
index 0000000..2752f60
Binary files /dev/null and b/src/SharpClient.UI/wwwroot/fonts/space-mono-400.woff2 differ
diff --git a/src/SharpClient.UI/wwwroot/fonts/space-mono-700.woff2 b/src/SharpClient.UI/wwwroot/fonts/space-mono-700.woff2
new file mode 100644
index 0000000..6563bad
Binary files /dev/null and b/src/SharpClient.UI/wwwroot/fonts/space-mono-700.woff2 differ
diff --git a/src/SharpClient.Web/Components/App.razor b/src/SharpClient.Web/Components/App.razor
index 20b1888..5d31766 100644
--- a/src/SharpClient.Web/Components/App.razor
+++ b/src/SharpClient.Web/Components/App.razor
@@ -6,9 +6,7 @@
-
-
-
+