diff --git a/app/components/ProductBlocks.tsx b/app/components/ProductBlocks.tsx
index 270a059..6b6b089 100644
--- a/app/components/ProductBlocks.tsx
+++ b/app/components/ProductBlocks.tsx
@@ -99,7 +99,10 @@ export async function ProductBlocks({ product }: { product: Product }) {
return
{renderProductBlock(block, ctx)}
;
}
return (
-
+ // py-12 md:py-16 — matches der-eine's own original Focus.tsx
+ // rhythm exactly (this system's reference template); py-8 sm:py-12
+ // read as too tight right after the hero (reported 2026-08-30).
+
{renderProductBlock(block, ctx)}
);
@@ -145,9 +148,16 @@ export function renderProductBlock(block: ProductBlock, ctx: ProductBlockContext
// below — without this, a heading/prose block sat edge-to-edge while
// the cards under it were capped, reading as "still not width-limited"
// even after the cards themselves were (reported 2026-08-30).
+ // [&_h2>span]:hidden — RichText's heading converter always appends a
+ // small brand-underline span under every h2 (shared with blog/legal
+ // pages, where it's wanted); der-eine's own original heading had no
+ // such decoration, plain text only (reported 2026-08-30). Hidden via
+ // CSS rather than a RichText prop, same "override scoped to
+ // ProductBlocks.tsx, don't touch the shared renderer" approach as the
+ // quote/stepRow cases.
case "richTextSection":
return (
-