Aller au contenu
Démarrer un projet
Menu

Images et réserves

La photo dans sa cellule, et la réserve qui la remplace tant qu’elle manque.

La réserve

Une photo attendue a sa place avant d’exister. Le composant EmplacementPhoto vérifie à la construction si le fichier est dans public/assets/<dossier>/ : s’il y est, la photo s’affiche ; sinon, la réserve prend sa place et dit ce qu’elle attend.

Emploi
Toute photo d’équipe, de lieu, de réalisation ou éditoriale : le même composant pose la photo ou sa réserve.
Moment
Dès qu’une photo est prévue, même si personne ne l’a encore prise : la réserve sert de brief au photographe.
Jamais
Pour un dessin, une scène ou un logo : ils ont leurs composants. Jamais une image d’emprunt à la place.
SpécimenUne réserve de réalisation, en 16/10, variante courte : le statut, le format, le brief.
Appelsrc/components/EmplacementPhoto.astro
<EmplacementPhoto dossier="realisations" fichier="exemple" ratio="16/10" variante="courte" brief="Le produit en service, chez le client." />
SpécimenUne réserve éditoriale carrée, variante normale : la taille attendue s’ajoute au format. Le fichier interlocuteur est celui de la notice public/assets/photos/DEPOSER-ICI.md.
Appelsrc/components/EmplacementPhoto.astro
<EmplacementPhoto dossier="photos" fichier="interlocuteur" ratio="1/1" taille="1600 × 1600" brief="La personne qui suit un projet, en rendez-vous avec un client. Cadrage serré." />

Les props

PropRôleValeur
dossierle sous-dossier de public/assetsequipe, lieux, photos (par défaut) ou realisations
fichierle nom du fichier attendu, sans extensioncelui de la notice DEPOSER-ICI.md du dossier
ratiole ratio d’affichagenotation CSS : 16/10, 1/1, 4/5 ; posé en --r, affiché « 16:10 » dans la réserve
ratioMobilele ratio sous 860 pxposé en --rm
briefce qu’il faut photographieraffiché dans la réserve seulement, jamais avec la photo
statutl’état de la photo« à produire » par défaut ; « à fournir » quand elle existe déjà ; « à obtenir » ou « après accord du client » sur les réalisations
taillela taille attendue du fichiertexte libre, affiché après le format, variante normale seulement
cadragele point de cadrageobject-position ; center par défaut
altle texte de remplacement de la photovide par défaut : à renseigner dès que la photo a un sens
variantela densité de la réservenormale, courte (étiquette réduite), mini (l’icône seule)
prioritela photo du premier écranloading eager et fetchpriority high ; lazy sinon

Ce que la réserve affiche

D’après le composant : une icône d’appareil photo, « Photo » suivi du statut, le format (et la taille en variante normale), puis le brief. Son commentaire décrit un gris chaud sous le papier millimétré et des traits de coupe aux quatre coins. Les variables existent (--photo et --papier à la racine, redéfinies sur la trame) et le bloc .ph de grinn.css les pose : fond papier sur --photo, gris chaud hors de la trame, vert pâle sur la trame depuis le 12 octobre, traits de coupe de 16 px aux quatre coins (10 px du bord), icône de 18 px, étiquette en capitales, format à droite, brief en bas ; la variante courte réduit tout (padding 12 px, icône 15 px, traits de 10 px), la variante mini ne garde que l’icône, centrée.

ClasseZoneValeur
--photole fond des réserves#ECEAE6, gris chaud, à la racine ; sur la trame (.tr), var(--color-grinn-pale), #F5FAF5, depuis le 12 octobre (les verts en relief ; #F2F0EC avant)
--papierle papier millimétréquatre dégradés : un pas de 24 px (--millim), un trait fort tous les quatre ; à l’encre à 6 % et 3 % à la racine, en vert profond à 9 % et 4,5 % sur la trame
.phla réserveflex en colonne, espace entre haut et bas, aspect-ratio var(--r), padding clamp(16px,2vw,26px), fond var(--papier) sur var(--photo) ; sous 860 px, aspect-ratio var(--rm, var(--r))
.ph::beforeles traits de coupehuit dégradés de 16 × 1 px et 1 × 16 px aux coins, à 10 px du bord, encre à 45 %
.ph--courtela variante courtepadding 12 px, traits de 10 px à 6 px du bord, étiquette 10 px, icône 15 px, brief 13 px
.ph--minila variante minigrille centrée sans padding, traits de 8 px, l’icône seule en ink-3
.tr-cas__it .phdans une carte de réalisationmargin-top auto, padding-top 0 ; .tr-cas__photo : 8 px au-dessus
.tr-equipe__photo .phdans la grille équipehauteur 100 %, au ratio de la prop (16/10, 4/3 jusqu’à 860 px) ; dès 1000 px, aspect-ratio 2/1, toute la largeur, hauteur auto

La photo quand elle existe

Déposer le fichier suffit : le composant le trouve au prochain build et remplace la réserve par une image. Rien d’autre à changer dans la page.

AttributZoneValeur
classl’imageph ph--photo, plus la classe passée
srcle fichier/assets/<dossier>/<fichier>.<ext> ; le premier trouvé dans l’ordre .avif, .webp, .jpg, .jpeg, .png (FORMATS, src/data/equipe.ts)
altle texte de remplacementla prop alt
loadingle chargementlazy ; eager avec priorite, et fetchpriority high
decodingle décodageasync
stylele cadrage--r (ratio), --rm (ratio mobile), object-position (cadrage)

La photo réelle prend la classe .ph--photo : bloc sans padding, object-fit cover au ratio --r (--rm jusqu’à 860 px), object-position posé par le cadrage, fond var(--line) le temps du chargement, et var(--photo), le vert pâle, sur la trame. Dans la grille équipe, elle garde son ratio, et passe en 2/1 dès 1000 px. Dans une cellule photo (.tr-cel--photo), la règle lui donne la hauteur de sa cellule, 260 px au moins, et libère le ratio.

Où vont les photos

Deux places sur l’accueil, la photo d’équipe et une réserve de portrait dans le mur de citations, puis les preuves des pages d’offre, les lieux et les portraits des pages intérieures. Les cas, eux, se montrent par leurs captures, sur l’accueil aussi depuis le 13 octobre.

OùAppelFormat
La photo d’équipeindex.astro et a-propos.astro, dans la cellule .tr-equipe__photo de la grille équipe (fondu seul à l’apparition) ; carrieres.astro en 4/5déposée le 12 octobre (groupe.webp) ; 16/10, 4/3 jusqu’à 860 px ; original 3:2 en 3000 × 2000, cadré center 18 % sur l’accueil, center 28 % sur la page de l’équipe ; dès 1000 px, la cellule prend toute la largeur et la photo passe en 2/1
Les réalisationsCas.astro, une par carte des preuves d’une page d’offre, sous le titre et la phrase ; plus sur l’accueil depuis le 13 octobre, où la carte montre la vitrine du cas16/10, variante courte, statut « à obtenir », ou « après accord du client » pour le cas anonyme ; sans brief (la liste BRIEFS de l’accueil est retirée le 13 octobre)
Les captures des casVitrine.astro : les cartes de cas de l’accueil (depuis le 13 octobre) et de la page Réalisations ; la tête, le point fort et le cas suivant d’une page de caspas des photos : des captures d’écran du produit, dans le cadre de leur support, sur la matière du client ; sans capture, la réserve de la vitrine, « Capture à fournir » (P.realisations.reserve), et non EmplacementPhoto. Voir Vitrine des cas
Le portrait du murMur.astro, .tr-dire__photo, sans composantrond de 32 px, bord tireté, fond --photo : une réserve, pas une photo
Les lieux et les portraitsa-propos.astro (les bureaux, dans une cellule photo ; six portraits en variante mini), contact.astro et carrieres.astro (un bureau par ville, en variante courte)en réserve tant que les fichiers manquent : bureaux 4/5 (4/3 jusqu’à 860 px), un bureau 4/3 sur la page contact et 16/10 sur la page carrières, portraits 1/1 ; les notices DEPOSER-ICI.md des dossiers lieux et equipe donnent les noms de fichier
Appelsrc/pages/index.astro
<EmplacementPhoto dossier="equipe" fichier={PHOTO_GROUPE} ratio="16/10" ratioMobile="4/3" statut="à fournir"
  taille="original 3:2, 3000 × 2000" cadrage="center 18%" alt="L’équipe Grinn, à Nantes"
  brief="L’équipe entière, dans le passage vitré, en sweat marine : la photo de groupe de la série." />

Sur la trame, aucune règle ne pose de filtre, de voile ni de coin arrondi sur une photo : le voile du héros précédent n’y revient pas. Le seul rond est le portrait du mur, et c’est une réserve de 32 px. La vitrine des cas est à part : elle ne montre pas de photo, mais une matière sous un voile commun et des captures d’écran dans des cadres arrondis, avec leur ombre, des objets posés dans l’image.

Les illustrations ne sont pas des photos non plus, et ne passent pas par EmplacementPhoto : depuis le 13 octobre, des schémas vectoriels en SVG (public/assets/illustrations), posés par Scene en balise img, sans filtre ni multiply ; la section IA de l’accueil, la dernière à garder une scène peinte en vidéo, a reçu le sien le même jour. Quand un nom n’a ni SVG ni ancienne scène, ou que la section IA (appelée avec v2Seulement) n’a pas son SVG, Scene pose sa propre réserve, « Scène à produire » et le nom du fichier : voir Scènes.

Rien d’emprunté

Pas de banque d’images, pas de visage d’emprunt, pas de capture d’écran factice. Quand une photo manque, c’est la réserve qui le dit, avec son format et son brief.

À faire
La réserve dit ce qu’elle attend : le statut, le format, le brief. Le photographe s’en sert, le lecteur ne la confond avec rien.
À éviter
Une case grise muette : elle ne dit ni ce qui manque, ni à qui le demander, et elle ressemble à une image qui n’a pas chargé.

Les notices le disent aussi : une photo chez un client ne se publie qu’avec son accord, et le portrait d’une personne citée qu’avec le sien. Les faux écrans du site précédent (le balisage .mk) ont été retirés le 16 septembre 2026 et le vérificateur refuse qu’ils reviennent.

RègleUne photo qui manque se marque en réserve, avec son format et son brief ; jamais une image d’emprunt à sa place.