Aller au contenu
Démarrer un projet
Menu

Page Réalisations

Les cas en grille : le bandeau à badges, les cartes vitrine, les cas en largeur, les petites cartes, l’appel sur l’encre, le mur des clients.

Le déroulé

Six blocs, d’après la maquette validée par JB le 12 octobre, sur le modèle de la page des clients de baseten.co : l’en-tête, un bandeau de logos, la grille des cas en rythmes différents, le mur des clients, la bande, le contact. Les textes viennent de pages-v3 et accueil-v3, les cas de leurs fiches ; la page n’écrit aucun texte.

src/pages/realisations/index.astro, bloc par bloc
BlocComposantDonnée
L’en-têteEnTetePage sans scène : FilAriane, h1, chapô, un boutonfil Réalisations ; P.realisations.titre, lead ; V3.cta vers /contact/ ; le titre de l’onglet et la description : P.realisations.title et description
Le bandeauSection tr-logos + Logos, sans étiquette, avec badgeles noms du mur, dans son ordre ; P.realisations.badge sur les clients dont le cas a sa page
La grille des casSection #cas tr-cases-sec, un h2 masqué, puis Grille tr-cases : CarteCas, AppelCas, cases videsP.realisations.catalogue.etiquette (le h2 masqué) ; la table de la page, les fiches ; V3.realisations.offreLibelle ; P.realisations.lireCas, voirSite, reserve ; P.realisations.appel et V3.cta
Le murSection tr-murl-sec + MurLogosP.realisations.mur.titre, surligne ; les clients avec accord (ceux dont le cas a sa page d’abord, dans l’ordre des fiches), puis ceux de V3.logos.ordre qui manquent ; P.realisations.badge
La bandeBande motif baucune : décorative
Le contactSection #contact tr-contact + ContactV3.contact.surtitre, P.realisations.contact.titre et sousTitre, V3.cta, V3.contact.types ; aucun type présélectionné

La page précédente posait tous les cas, sous une tête, dans la grille tr-cas, une photo en réserve par carte ; le bandeau des clients venait après, avec son étiquette, ses logos chargés à la demande. Les cartes de l’accueil et des pages d’offre gardent cette carte (Cas.astro, voir Cartes) : celles des pages d’offre avec leur photo en réserve, celles de l’accueil, depuis le 13 octobre, avec la vitrine du cas au format des petites cartes de cette page. La page Réalisations a la sienne, CarteCas, avec la vitrine du cas.

Le bandeau à badges

Le bandeau des clients, juste sous l’en-tête, sans étiquette : le titre du mur la porte plus bas. Il défile comme sur l’accueil ; un petit badge marque les clients dont le cas a sa page.

  • Renault
SpécimenLe bandeau de la page : 9 clients, dans l’ordre du mur. Le badge « cas » sur Bosco Services, Cathédrale de Nantes, PepPsy, La Grande Table, Mes Jardiniers, Clotilde Davenne, Builders ; sans badge : IE Architecture, Renault. Le bouton pause, au bout, apparaît avec le script, hors mouvement réduit.
Appelsrc/components/trame/Logos.astro
<Section classe="tr-logos">
  <Logos noms={mur.map((c) => c.nom)} badge={P.realisations.badge} />
</Section>
Le bandeau de la page Réalisations
ClasseZoneValeur
Logos noms badgela listeles noms du mur, puis, comme partout, les cas qui ont l’accord du client et un logo s’ils n’y sont pas déjà ; un badge pour chaque client dont le cas a sa page (page, accord, pas de masque)
sans etiquettepas de titrele titre du mur dit déjà « Ils nous ont confié leur projet. » ; .tr-logos__tete--seul pose le bouton pause, sans fond, au bout du bandeau, au milieu de sa hauteur ; le bandeau reste sur le blanc de la page (la maquette le posait sur le gris)
.tr-logos__defilele fondusans étiquette, hors mouvement réduit : les logos s’effacent à gauche sur 6 % ; à droite, ils s’effacent entre 120 px et 46 px du bord, et le bouton pause occupe le bout
.tr-badgele badgedans le coin haut droit de la case (10 px du haut, 12 px de la droite ; 8 et 8 jusqu’à 480 px) ; Inter 600 9 px, capitales, .14em ; vert profond sur le pâle, filet vert (4,81:1), comme l’étiquette ; pointer-events none
.tr-logos:has(+ .tr-cases-sec) .tr-logos__cadrele bas du bandeaupas de trait en bas : la ligne de la section des cas, juste dessous, suffit

Le défilement, l’arrêt au survol, le bouton pause et le mouvement réduit sont ceux du bandeau de l’accueil : voir Logos. Le badge est un mot de la copie (P.realisations.badge) : dans la piste lue, il suit le nom du client (l’alt du logo, ou le nom écrit) ; la seconde piste est muette. Les cases du bandeau ne sont pas des liens : ce sont celles du mur qui mènent aux cas.

La grille des cas

Six colonnes dès 861 px, une seule en dessous. Les cas se posent dans l’ordre d’une table écrite dans la page, chacun avec sa forme : par deux en carte vitrine, seul en largeur, par trois en petite carte. La cellule d’appel ferme la dernière rangée.

La table de src/pages/realisations/index.astro (TABLE), et ce que chaque fiche y devient
RangFicheFormeAujourd’hui
1bosco-servicescarte vitrinecarte liée à sa page
2cathedrale-de-nantescarte vitrinecarte liée à sa page
3mes-jardiniersen largeurcarte liée à sa page
4peppsycarte vitrinecarte liée à sa page
5la-grande-tablecarte vitrinecarte liée à sa page
6buildersen largeurcarte liée à sa page
7clotilde-davennepetite cartecarte liée à sa page
8ie-architecturepetite cartecarte sans lien, avec « Voir le site »
La grille d’aujourd’hui, recalculée comme la page
RangéeLes cases, dès 861 px
1Bosco Services (carte vitrine), Cathédrale de Nantes (carte vitrine)
2Mes Jardiniers (en largeur)
3PepPsy (carte vitrine), La Grande Table (carte vitrine)
4Builders (en largeur)
5Clotilde Davenne (petite carte), IE Architecture (petite carte), la cellule d’appel

Une carte vitrine prend trois colonnes, un cas en largeur six, une petite carte et l’appel deux. Une rangée ne mélange pas les formes : quand la forme change, ou que la place manque, une case vide finit la rangée. Sous 861 px, tout passe sur une colonne, dans le même ordre, et les cases vides disparaissent.

Appelsrc/components/trame/CarteCas.astro
<Section id="cas" classe="tr-cases-sec" titreId="tr-cas">
  <h2 class="sr-only" id="tr-cas">{P.realisations.catalogue.etiquette}</h2>
  <Grille classe="tr-cases" stagger={null}>
    <CarteCas slug={cas.id} cas={cas.data} forme="vitrine" nom={v.nom} logo={v.logo} href={v.href} site={v.site} anonyme={v.anonyme}
      etiquette={V3.realisations.offreLibelle[cas.data.expertise] ?? cas.data.expertise}
      lire={P.realisations.lireCas} voirSite={P.realisations.voirSite} reserve={P.realisations.reserve} eager={eager} />
    <!-- … une carte par cas, dans l’ordre de la table ; forme="large" ou forme="petite" -->
    <li class="tr-cel tr-cc tr-cc--vide" style="--span:3" aria-hidden="true"></li>
    <AppelCas etiquette={P.realisations.appel.etiquette} titre={P.realisations.appel.titre} texte={P.realisations.appel.texte}
      bouton={{ href: '/contact/', libelle: V3.cta }} />
  </Grille>
</Section>
La grille
ClasseZoneValeur
.tr-cases-sec > .tr-inla sectionpadding haut et bas à 0 : la grille touche le bandeau et la section suivante
.tr-casesla grilleune colonne ; dès 861 px, six ; margin-bottom -1 px et clip-path : la dernière rangée perd son trait du bas, celui de la section suivante le remplace
.tr-cc--vitrineune carte vitrinetrois colonnes sur six : deux par rangée
.tr-cc--largeun cas en largeurtoute la rangée
.tr-cc--petite, .tr-cc--appelune petite carte, l’appeldeux colonnes sur six : trois par rangée
.tr-cc--videune case videaria-hidden ; finit une rangée incomplète sur --span colonnes ; masquée sous 861 px
Grille stagger nulll’apparitionles cartes apparaissent chacune quand elle entre dans l’écran (data-reveal), sans décalage de rang ; les traits se tracent

La carte vitrine

Le logo à gauche et « Lire le cas » à droite, l’offre en voix d’étiquette, un titre, puis la vitrine du cas. Quand le cas a sa page, toute la carte est le lien, et pâlit au survol.

Emploi
Présenter un cas sur la page Réalisations : son client, son offre, une phrase, et son produit dans sa vitrine.
Moment
Dans la grille tr-cases, par deux, à la place que lui donne la table de la page.
Jamais
Hors de la page Réalisations : l’accueil et les pages d’offre gardent la carte Cas. Avec un chiffre de résultat dans le titre ou dans la capture.
SpécimenLes deux premières cartes vitrine de la table : Bosco Services (navigateur, en réserve) et Cathédrale de Nantes (téléphone, sa capture). Les liens mènent ici à #.
La carte d’un cas
ClasseZoneValeur
.tr-ccla celluleflex en colonne, sans padding : le corps la remplit
.tr-cc__corpsle corpsun lien quand le cas a sa page, sinon un div ; flex en colonne, écart 16 px, padding clamp(20px, 2.4vw, 32px)
.tr-cc__tetela têtele logo à gauche, « Lire le cas » à droite (sans page, « Voir le site » si la fiche donne un site) ; 44 px de haut au moins
.tr-cc__logole logo30 px × --echelle, 58 % de la tête et 170 px au plus, calé à gauche ; alt : le nom du client
.tr-cc__nomsans logole nom en Outfit 700 20 px, encre ; trop long pour tenir à côté du bouton, il garde sa ligne et le bouton passe dessous (la tête passe en flex-wrap)
.tr-cc__lire« Lire le cas »un bouton au trait dessiné (un span, pas un lien) ; au survol ou au focus de la carte, son trait passe à l’encre et sa flèche sort
.tr-cc__offrel’offreun paragraphe en voix d’étiquette, sans pastille : Inter 600 11 px, capitales, .14em, encre troisième
.tr-cc h3le titrel’accroche de la fiche, à défaut son résumé (sans l’un ni l’autre, pas de titre) ; Outfit clamp(20px, 2vw, 26px), interligne 1,18, 30ch au plus
.tr-cc__vitla vitrineformat carte (16/10), poussée en bas : les vitrines d’une rangée s’alignent ; deux puces au plus, aucune sur une réserve ; sous 720 px, 4/3 et sans puce
.tr-cc--lienle survol, le focusla case passe au pâle ; le focus trace l’anneau vert profond dedans, à -4 px, car la grille coupe ce qui dépasse
a.tr-cc__corpsle nom du lienaria-labelledby : « Lire le cas » puis le logo (son alt) ou le nom ; aria-describedby : le titre

Le cas en largeur

Toute la rangée : le texte à gauche, avec une phrase d’appui et trois faits en grands chiffres, la vitrine à droite. Les faits disent la durée, l’année de mise en service, la stack ou ce qui est propre au cas : jamais un résultat.

SpécimenMes Jardiniers en largeur : l’accroche, l’appui, 3 faits (3 à 6 mois, 2026, Next.js), la vitrine haute et sa puce. La colonne de cette page est plus étroite que la grille de la page Réalisations, mais la disposition suit la largeur de la fenêtre : les faits y débordent de leur colonne.
Le cas en largeur
ClasseZoneValeur
.tr .tr-cc--large h3le titreclamp(24px, 2.6vw, 34px), 22ch au plus
.tr-cc__appuil’appuile champ appui de la fiche ; 14,5 px, interligne 1,55, encre seconde, 56ch au plus
.tr-cc__faitsles faitsles faits de la fiche (faits : valeur et légende, trois au plus d’après le schéma), jamais un résultat ; dès 861 px, sur une seule rangée
.tr-cc__valeurla valeurOutfit 600 clamp(24px, 2.4vw, 32px), interligne 1,05, -0,03em, encre, sur une ligne
.tr-cc__legendela légende13 px, interligne 1,4, encre troisième, 6 px sous la valeur
.tr-cc--large .tr-cc__corpsla dispositiondès 861 px, deux colonnes 1fr et 1,1fr, centrées en hauteur ; le texte à gauche, la vitrine à droite
Vitrine format hautela vitrine16/11 ; une seule puce, et jamais celle qui répète un fait

Les cas en largeur aujourd’hui : Mes Jardiniers, Builders. Sous 861 px, la carte s’empile comme les autres : le texte, les faits, puis la vitrine.

Les petites cartes et l’appel

La dernière rangée, par trois : les petites cartes, le bouton en bas, et la cellule d’appel sur l’encre, qui ferme la grille.

SpécimenLa dernière rangée : Clotilde Davenne (sa page), IE Architecture (sans page, « Voir le site »), puis l’appel.
Les petites cartes et l’appel
ClasseZoneValeur
.tr .tr-cc--petite h3le titreclamp(18px, 1.6vw, 21px)
.tr-cc--petite .btnle boutonen bas, calé à gauche : « Lire le cas » dessiné si le cas a sa page ; sinon « Voir le site », un vrai lien au trait, dans un nouvel onglet
Vitrine format petitela vitrine16/11, le navigateur à 84 %, aucune puce
.tr-cc--appella cellule d’appelfond encre (validé par JB le 12 octobre), texte blanc ; l’étiquette en haut, le bouton en bas, espace entre
.tr .tr-cc--appel h3son titrela taille des titres de carte, en blanc (17,5:1 sur l’encre) ; 12 px dessous
.tr-cc__appel psa phrase14,5 px, interligne 1,55, --on-dark #D6D3D1 (11,7:1 sur l’encre), 36ch au plus
.tr-cc__appel-btnson boutonplein, vert Grinn, texte à l’encre (10,3:1) ; au survol, il se remplit de blanc, bord blanc ; anneau de focus vert ; son libellé peut passer à la ligne jusqu’à 480 px, et de 861 à 960 px, où la cellule est étroite

La cellule d’appel est la seule cellule de grille à l’encre. La règle « jamais d’aplat » tient pour les sections ; cette cellule, dans la grille et délimitée par son trait, est une exception validée par JB sur la maquette.

Le mur des clients

Le titre centré, un passage surligné, puis tous les clients en cases, cinq par rangée, deux au téléphone. Ceux dont le cas a sa page portent le badge et mènent à leur cas.

Ils nous ont confié leur projet.

SpécimenLe mur de la page : 9 clients. D’abord ceux dont le cas a sa page, dans l’ordre des fiches ; puis ceux qui ont donné leur accord sans page ; puis ceux de V3.logos.ordre qui manquent encore (Renault, sans logo, en nom).
Appelsrc/components/trame/MurLogos.astro
<Section classe="tr-murl-sec" titreId="tr-mur">
  <MurLogos clients={mur} titre={P.realisations.mur.titre} surligne={P.realisations.mur.surligne} badge={P.realisations.badge} id="tr-mur" />
</Section>
Le mur des clients
ClasseZoneValeur
Tete centrele titreP.realisations.mur.titre, « confié leur projet » surligné
.tr-murlla grilledeux colonnes ; cinq dès 861 px ; margin-bottom -1 px et clip-path, comme la grille des cas ; .tr-murl-sec > .tr-in n’a pas de padding bas ; les cases apparaissent l’une après l’autre (data-stagger 60) et les traits se tracent
.tr-murl__corpsune case96 px de haut au moins, padding 20 / 16 px, centrée ; un lien vers le cas quand il a sa page, sinon un span
.tr-murl__corps imgle logoclamp(26px, 2.2vw, 32px) × --echelle, 130 px au plus, opacité .9 (1 au survol d’une case lien) ; alt : le nom du client
.tr-murl__nomsans logole nom en Outfit 700 clamp(16px, 1.4vw, 20px), opacité .72
.tr-murl__case--lienle survol, le focusla case passe au pâle ; l’anneau vert profond dedans, à -4 px ; le badge dans le coin
.tr-murl__videles cases videsaria-hidden ; de quoi finir la dernière rangée à cinq dès 861 px, à deux dessous

Les cas limites

Ce que fait la page quand une fiche ne donne pas tout. La dernière colonne est calculée sur les fiches, à la construction de cette page.

CasCe que fait la pageAujourd’hui
Sans accord du clientsi Bosco Services, seul cas que la copie sait désigner sans le nommer (V3.realisations.anonyme), perd l’accord, sa carte reste : le nom « Une entreprise d’interventions », ni logo, ni lien, ni site, la vitrine en réserve sur sa matière, sans puce, et aucune case dans le mur ni dans le bandeau ; tout autre cas sans accord n’a pas de carte, et son nom ne paraît dans le mur et le bandeau que si V3.logos.ordre le portecarte anonyme : aucun ; sans carte : aucun
Masquépas de carte ; si V3.logos.ordre le nomme, son nom paraît quand même dans le mur et le bandeau, sans lien ni badgeRenault
L’accord, sans pagela carte n’est pas un lien ; « Voir le site » si la fiche donne un site ; une case du mur sans badgeIE Architecture
Absent de la tableil entre en carte vitrine, dans l’ordre des fiches, après les cas de la table et avant la rangée des petites cartes : l’appel ferme toujours la grilleaucun
Une rangée incomplèteune case vide la finit ; une rangée ne mélange pas les formesaucune
Sans capturela vitrine montre la réserve, P.realisations.reserve, sans puceBosco Services
Sans accrochele titre de la carte est le résuméaucun
En largeur, sans faits ou sans appuila carte garde sa forme ; ce qui manque ne s’affiche pasaucun
La puce d’un cas en largeurla première puce qui ne répète pas un faitMes Jardiniers : Réservation en ligne ; Builders : Builders Arcade
Sans logole nom en Outfit, dans la carte, le bandeau et le murcartes : aucun ; mur : Renault
Le premier écranles deux premières cartes chargent leur logo et leur vitrine tout de suite (eager) ; les autres attendentBosco Services, Cathédrale de Nantes

RègleUn cas se montre avec l’accord de son client, dans sa vitrine, et sans chiffre de résultat ; sans accord, la page ne le nomme pas.