diff --git a/app/globals.css b/app/globals.css
index af3eee1..ca56ace 100644
--- a/app/globals.css
+++ b/app/globals.css
@@ -82,10 +82,16 @@
@theme inline {
/* Fonts: chrome = JetBrains Mono, prose = Source Sans 3, titles = CMU
- Serif bold. The JetBrains/SourceSans variables attach in app/layout.tsx. */
+ Serif bold. The JetBrains/SourceSans variables attach in app/layout.tsx.
+ (owner, typography round) The Tailwind defaults are ALIASED to the app
+ fonts: `font-mono`/`font-sans` utilities would otherwise fall to the
+ SYSTEM stacks — a fourth font the app never chose — and streamdown's
+ code-block chrome + mermaid-error + demo-card all use them. */
--font-ui: var(--font-jetbrains), ui-monospace, SFMono-Regular, monospace;
--font-prose: var(--font-sans3), ui-sans-serif, system-ui, sans-serif;
--font-title: "lh-cmu", serif;
+ --font-mono: var(--font-jetbrains), ui-monospace, SFMono-Regular, monospace;
+ --font-sans: var(--font-sans3), ui-sans-serif, system-ui, sans-serif;
/* The modular type ladder — each size carries its own line-height.
Component sizes must pull from this ladder. */
--text-xxs: 10px;
diff --git a/components/sidebar.tsx b/components/sidebar.tsx
index 4324d0b..b046ed2 100644
--- a/components/sidebar.tsx
+++ b/components/sidebar.tsx
@@ -133,7 +133,12 @@ export function SessionRow({
>
- {chat.title}
+ {/* Titles are the learner's/teacher's WORDS — Source Sans 3, the
+ same voice the words were typed in (every input is lh-prose);
+ the meta line below stays JetBrains Mono (machine data). One
+ rule, finally applied to the picker too (owner, typography
+ round): mono = chrome, Source Sans = human words. */}
+ {chat.title}
{sessionMeta(chat)}