/** * Shared layout for legal pages (Privacy, Terms). Server component — renders a * header, a sticky table of contents and numbered sections. Brand-strict. * * @param {Object} props * @param {string} props.title * @param {string} props.updated Human date, e.g. "17 June 2026". * @param {string} [props.intro] * @param {{id:string, heading:string, blocks:(string|string[])[]}[]} props.sections * A block that is a string renders as a paragraph; an array renders as a bullet list. */ export default function LegalLayout({ title, updated, intro, sections }) { return (
{/* Decorative glow kept in its own clipped layer so it doesn't break the sticky TOC */}
{/* Header */}
Legal

{title}

Last updated {updated}

{intro &&

{intro}

}
{/* Table of contents */} {/* Content */}
{sections.map((s, i) => (

{i + 1}. {s.heading}

{s.blocks.map((b, j) => Array.isArray(b) ? (
    {b.map((li, k) => (
  • {li}
  • ))}
) : (

{b}

) )}
))}
); }