21c4e9f007
"Angaben zum Anbieter"/"Umsatzsteuer"/"Handelsregister"/"Geschäftsführung"/ "Verantwortlich für den Inhalt" used to be hand-typed into the Impressum's richText content (seed-legal-pages.ts) with no connection to the same seller data the invoice PDFs and every email footer already pull from company-settings — an admin updating one had no reason to remember the other existed, and the old text was already stale in one concrete way: it never showed Handelsregister/Geschäftsführung at all even though company-settings has modeled both since the legal-form work shipped. Now rendered by a new AnbieterAngaben component, straight from getCompanySettings(), positioned above the CMS richText (which keeps only genuinely editorial content: Kontakt, Haftung für Inhalte, Haftung für Links, Urheberrecht). Same "structural/brand elements in code, only pull the actual numbers/copy that need single-sourcing from data" pattern this page's own Nachhaltigkeit sidebar card already used. RichText.tsx's headingId() is now exported so the new block's headings get the exact same id-assignment logic as CMS-driven ones, keeping the SectionTOC sidebar's ids in sync with both sources. /impressum moves from static to dynamic rendering (it now fetches live company-settings data, cache: "no-store") — an acceptable tradeoff for a legally-required page to never show stale seller info. Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>