diff --git a/src/app/insights/catalog/page.tsx b/src/app/insights/catalog/page.tsx
index 5f050dee2..db106235c 100644
--- a/src/app/insights/catalog/page.tsx
+++ b/src/app/insights/catalog/page.tsx
@@ -122,8 +122,10 @@ function CatalogRowSkeleton() {
data-slot="catalog-row-skeleton"
className="flex items-start justify-between gap-3 py-2"
>
-
-
+ {/* Sized to the loaded row (a 22 px name-and-badge line over a 16 px
+ source line), so the groups below do not move when it lands. */}
+
+
diff --git a/src/components/insights/derived/delta-sparkline.tsx b/src/components/insights/derived/delta-sparkline.tsx
index 9736cbd67..2e7462786 100644
--- a/src/components/insights/derived/delta-sparkline.tsx
+++ b/src/components/insights/derived/delta-sparkline.tsx
@@ -62,7 +62,14 @@ export function DeltaSparkline({
const hasComparison = data.some((point) => point.b !== undefined);
return (
-
+ {/* A sparkline is decoration inside an aria-hidden wrapper: without
+ the accessibility layer Recharts puts a focusable surface in it,
+ and a focus stop nobody can perceive is an axe failure. */}
+