Hide RichText heading underline on PDPs; more breathing room after Hero

- der-eine's original "Was kann er?" heading was plain text, no
  decoration — RichText.tsx's shared heading converter always appends a
  small brand-underline span (wanted on blog/legal pages, not here).
  Hidden via a scoped CSS selector, same approach as the earlier icon-
  color overrides, not touching the shared component.
- Generic block spacing bumped from py-8 sm:py-12 to py-12 md:py-16,
  matching der-eine's own original Focus.tsx rhythm — felt too tight
  right after the Hero (reported 2026-08-30).

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_013Eg6h91yngXmSnM51wxXM8
This commit is contained in:
Marco
2026-08-30 00:18:07 +00:00
parent a4606d26ad
commit cefe2531d4
+12 -2
View File
@@ -99,7 +99,10 @@ export async function ProductBlocks({ product }: { product: Product }) {
return <div key={block.id}>{renderProductBlock(block, ctx)}</div>;
}
return (
<Reveal key={block.id} className="w-full px-[var(--layout-padding-x)] py-8 sm:py-12">
// 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).
<Reveal key={block.id} className="w-full px-[var(--layout-padding-x)] py-12 md:py-16">
{renderProductBlock(block, ctx)}
</Reveal>
);
@@ -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 (
<div key={block.id} className="max-w-[48rem] mx-auto">
<div key={block.id} className="max-w-[48rem] mx-auto [&_h2>span]:hidden">
<RichText content={block.content} />
</div>
);