{#
ProjectDetail content block - photo gallery (grid). 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.{title, images[], imagePaths[]}`
(`images[]` / `imagesDark[]` = Été / Hiver media UUIDs for the editor's data-media-id /
data-media-id-dark, index-aligned with `imagePaths[]` / `imageDarkPaths[]` - the resolved
file paths set by ProjectDetailPageEnricher for )
MediaSelectorModal (assets/admin/media/MediaSelectorModal.ts) has no native multi-select
support (one field = one picked media). Each gallery image is therefore its own
`[data-editable-image="true"]` slot rather than a bulk picker - "un slot par image +
bouton ajouter", per the fallback pattern documented in the redesign plan. Every slot
uses `data-field="images[]"`: the trailing `[]` is ContentSerializer.ts's convention for
"collect every element sharing this field name, within this block, into a single array"
(see ContentSerializer.serializeSectioned()), so N slots always serialize to
`fields.images = [uuid, uuid, ...]` regardless of N (including N=0/1, where a plain
per-count heuristic would be ambiguous).
#}