import { cn } from "@/lib/utils"; import { flags } from "@/lib/site"; import { about as aboutDe, type HomeContent } from "@/content/home"; import { Section } from "@/components/layout/Section"; import { Lines } from "@/components/motion/Lines"; import { Reveal } from "@/components/motion/Reveal"; import { Rule } from "@/components/motion/Rule"; import { Eyebrow } from "@/components/ui/Eyebrow"; import { Ledger } from "@/components/ui/Ledger"; import { Marginalia } from "@/components/ui/Marginalia"; import { Portrait } from "@/components/ui/Portrait"; export interface AboutProps { /** `getPhotos().portrait` – `null` renders the documented variant B (no photo). */ photo: string | null; /** Inhalt der Sektion. Ohne Angabe die deutsche Fassung – die englische reicht sie durch. */ content?: HomeContent["about"]; } /* H2 on ivory: Playfair 400, max 14ch (spec §3.2 / §6.5). */ const H2 = "font-display text-[clamp(2.25rem,1.4rem+3.2vw,4.75rem)] font-normal leading-[1.02] tracking-[-0.01em] text-fg [text-wrap:balance] max-w-[14ch]"; /* Body: Jost 400, 18 px, max 36rem, paragraph gap 1.25em, German hyphenation. */ const BODY = "max-w-[36rem] font-sans text-[1.125rem] leading-[1.6] text-fg [hyphens:auto]"; /** * 04 · Über Anelia (ivory – spec §6.5). First person, a portrait that stays * in view while reading, the Werdegang as a ledger, marginalia with * verifiable facts. No counters, no logos. * * With photo: Portrait cols 3–6 (sticky) · text + ledger cols 7–12 · marginalia cols 10–12. * Without: text cols 3–8 · ledger cols 3–9 · marginalia under the ledger * (no monogram vignette – see below). */ export function About({ photo, content: about = aboutDe }: AboutProps) { const paragraphs = about.paragraphs.map((p, i) => i === about.paragraphs.length - 1 && flags.showTwins ? `${p} ${about.twins}` : p, ); const hasPhoto = Boolean(photo); return (