{# ProjectDetail content block - paragraphs (repeatable) + image. ProjectDetail-only block type, no Actualité equivalent - see "Repeatable Block Templates (Exception)" in spec-driven-development/rules/section-component-architecture.md. Parameters: - block (object): block data with `id`, `type`, `fields.{paragraphs[], image, imagePath}` (`paragraphs[]` = `{title, subtitle, text}[]`; `image` = media UUID for the editor's data-media-id, `imagePath` = resolved file path for , set by ProjectDetailPageEnricher's generic `fields.image` -> `fields.imagePath` resolution) Two-column layout (repeatable list left, sticky image right) reuses the Expertise page's `components/_expertise-list.html.twig` shell via {% embed %}, overriding its `items` and `image` blocks - same grid/sticky/aspect-ratio visual as Expertise's list (see assets/styles/components/_expertise-list.scss, imported by both assets/expertise.ts and assets/project-detail.ts). Only the paragraph-specific typography/remove-button/add-button styling stays block-local (`.project-detail-block-paragraphs-image__paragraph*` / `__add`, in assets/styles/pages/_project-detail.scss). Left column's paragraph list is RepeatableObjectListEditor-managed in edit mode (assets/admin/editor/RepeatableObjectListEditor.ts), instantiated per-block-instance by BlockListEditor.bindBlockControls() (mirrors bindGalleryControls()'s block-scoping). `data-field="paragraphs[N][title|subtitle|text]"`, index-contiguous. The paragraph item's hidden