diff --git a/app/globals.css b/app/globals.css
index eeb3716..8b722c4 100644
--- a/app/globals.css
+++ b/app/globals.css
@@ -178,6 +178,16 @@ body {
line-height: var(--lh-prose-leading);
}
+/* Session-name weight (owner, fix wave round 3): with the serif toggle
+ OFF, --font-title resolves to the prose font — Source Sans 3 is loaded
+ as a VARIABLE font, and without an explicit weight the titles render at
+ 400, a whisper next to CMU's bold-only face. Request 900: the variable
+ font takes it, and CMU (a single 700 face) snaps to its nearest
+ available weight — the same rendering it already had. */
+.font-title {
+ font-weight: 900;
+}
+
.lh-prose :where(strong, b) {
color: var(--lh-ink-strong);
font-weight: 700;
diff --git a/components/dictation.tsx b/components/dictation.tsx
index 01cea08..9851359 100644
--- a/components/dictation.tsx
+++ b/components/dictation.tsx
@@ -459,7 +459,9 @@ export function DictationBar({ dictation }: { dictation: Dictation }) {
title={error ?? "Dictate into the composer"}
aria-label={error ? `Dictation failed: ${error}` : "Start dictation"}
data-testid="dictation-toggle"
- className="flex h-7 w-full items-center justify-center gap-1.5 rounded-md border border-border/50 text-xs text-muted-foreground/70 transition-colors hover:border-border hover:text-muted-foreground"
+ // Same blurring as the floating chrome (owner, fix wave round 3),
+ // but lower opacity — the mic stays quieter than the model pills.
+ className="flex h-7 w-full items-center justify-center gap-1.5 rounded-md border border-border/50 bg-card/50 text-xs text-muted-foreground/70 shadow-lg backdrop-blur transition-colors hover:border-border hover:text-muted-foreground"
>
{error ?? "Dictate"}
diff --git a/components/model-picker.tsx b/components/model-picker.tsx
index 96dac5a..63fda83 100644
--- a/components/model-picker.tsx
+++ b/components/model-picker.tsx
@@ -247,7 +247,11 @@ export function ModelControl() {
onClick={() => openMenu("model")}
aria-expanded={open === "model"}
title="Strong tier model (prober + teacher) — set app-wide"
- className="flex items-center gap-1.5 rounded-full border border-border/60 bg-card/70 px-2.5 py-1 transition-colors hover:border-border hover:bg-muted"
+ // Chrome look (owner, fix wave round 3): matches the graph
+ // view's floating top-right buttons (import notes, gear,
+ // coverage) — blurred, fuller opacity, shadowed — so the
+ // graph no longer bleeds through these pills.
+ className="flex items-center gap-1.5 rounded-full border bg-card/85 px-2.5 py-1 shadow-lg backdrop-blur transition-colors hover:border-border hover:bg-muted"
>
{effectiveId ? prettyModel(effectiveId) : "—"}
▾
@@ -263,7 +267,11 @@ export function ModelControl() {
}}
aria-expanded={open === "thinking"}
title="Strong tier thinking level — set app-wide"
- className="flex items-center gap-1.5 rounded-full border border-border/60 bg-card/70 px-2.5 py-1 transition-colors hover:border-border hover:bg-muted"
+ // Chrome look (owner, fix wave round 3): matches the graph
+ // view's floating top-right buttons (import notes, gear,
+ // coverage) — blurred, fuller opacity, shadowed — so the
+ // graph no longer bleeds through these pills.
+ className="flex items-center gap-1.5 rounded-full border bg-card/85 px-2.5 py-1 shadow-lg backdrop-blur transition-colors hover:border-border hover:bg-muted"
>
{/* Just the level — the button reads like the model button reads
the model name (owner, stats-control round 1). */}