diff --git a/src/components/insights/coach-panel/coach-drawer.tsx b/src/components/insights/coach-panel/coach-drawer.tsx
index e993579f6..1db449ce7 100644
--- a/src/components/insights/coach-panel/coach-drawer.tsx
+++ b/src/components/insights/coach-panel/coach-drawer.tsx
@@ -186,7 +186,10 @@ export function CoachDrawer({
variant="ghost"
size="icon"
disabled
- aria-label={t("insights.coach.settings")}
+ // Match the visible disabled state — sighted users
+ // see a coming-soon tooltip; SR users hear the same
+ // copy instead of a working "Coach settings" label.
+ aria-label={t("insights.coach.settingsTooltip")}
data-slot="coach-drawer-settings"
className="size-8"
>
diff --git a/src/components/insights/coach-panel/sources-rail.tsx b/src/components/insights/coach-panel/sources-rail.tsx
index 20bbaa090..27e13e4b4 100644
--- a/src/components/insights/coach-panel/sources-rail.tsx
+++ b/src/components/insights/coach-panel/sources-rail.tsx
@@ -98,10 +98,13 @@ export function SourcesRail({ className }: SourcesRailProps) {
{t(row.metricKey)}
- {/* Fresh / stale indicator — v1.4.20 is a static dot.
- v1.4.21 will reuse . */}
+ {/* Fresh / stale indicator — v1.4.20 is a static dot
+ with no real freshness state behind it (v1.4.21 plugs
+ in ). aria-hidden so SR users
+ don't hear "Fresh" five times in a row for what is
+ actually a placeholder. */}
diff --git a/src/components/insights/correlation-card.tsx b/src/components/insights/correlation-card.tsx
index 98644418c..c06ab39a0 100644
--- a/src/components/insights/correlation-card.tsx
+++ b/src/components/insights/correlation-card.tsx
@@ -131,7 +131,11 @@ export function CorrelationCard({ result }: CorrelationCardProps) {