Chaque pièce du site, rendue en direct : jetons, classes, composants et sections, avec leurs variantes, leurs props et la règle qui dit quand s’en servir.
Ce n’est pas une maquette : ce sont les composants que le site importe. Ce qui change ici change partout. La philosophie, les sept lois, est sur la bible du style.
01
Fondations
Les jetons : une seule source, src/styles/dp/. Aucune valeur de couleur, d’espace ou de durée n’est écrite en dur dans un composant.
Texte discret--dp-text-dimNotes (corrigé pour l’AA)6.2:1
Danger--dp-danger-textErreurs de formulaire7.2:1
Le laiton construit et s’allume ; le vert dit allez-y : un bouton, un feu, un état validé. Tout le reste qui brille est du laiton. Les rapports de contraste sont calculés au build, sur le fond de la page.
Trois matières, pas une de plus : le laiton brossé pour la structure, la laque noire pour les surfaces, le verre pour ce qui s’allume. Le tube est du laiton allumé, l’écran est du verre allumé : la lumière n’est pas une matière, c’est ce qui sort des trois. Un ornement ne mélange pas deux matières.
Chaque page a une source lumineuse unique, le feu ou un écran : la section la pose (--light-x, --light-y) et .dp-halo en tire trois couches de halo blanc chaud, jamais vert. Une révélation se fait par la lumière, pas par le flou : .dp-lit-in part lisible (--reveal-from) et monte d’un cran ; .dp-sweep fait passer une barre de luminance une fois, au pointeur fin. Les quatre temps d’arrivée d’une page, --t-light, --t-title, --t-object et --t-cta, s’enchaînent en moins d’une demi-seconde.
Le socle commun, trois formes et quatre matières. La plaque à gradins contient (carte, citation, encadré, média) : un calque de laiton biseauté détouré en gradins, puis la laque, détourée en retrait. La plaque gravée (lot 30) encadre une fiche : la laque, un filet de laiton, l’étiquette en machine à cheval sur le filet — ni rivet ni bandeau plein, le laiton plein est réservé aux objets (le feu, les boutons, les gradins) ; elle remplace les réglettes rivetées du pied de page, du formulaire, des conseils, des bassins et de la plaque d’étage. Le corps streamline (ailette à gauche, nez arrondi à droite) se touche en une ligne : tag, badge, chip, champ. Le tube néon dit un état et ne s’allume que pour cela. Survolez les plaques : le reflet du laiton suit le pointeur, et sur les variantes à comète une impulsion parcourt l’arête.
Prop
Type
Défaut
Rôle
--s
longueur
var(--step-m)
Taille d’un gradin d’angle (deux marches). Trois crans : --step-s 4 px, --step-m 6 px, --step-l 9 px.
--edge
longueur
2px
Épaisseur de l’arête de laiton.
--pad
longueur
1.75rem
Marge intérieure de la plaque.
--edge-bg
fond
var(--brass-grad)
Matière de l’arête : --brass-grad (laiton), --neon-edge (tube de laiton allumé), --dp-line (arête sombre).
--face
fond
var(--lacquer)
Matière de la face : --lacquer (laque en retrait), ou la variante .dp-plate--sun (rayons gravés).
--plaque-bg
fond
var(--lacquer-flat)
Plaque gravée : le fond derrière l’étiquette, qui coupe le filet (la laque ; le papier sur une scène crème). .dp-plaque__cap--end et --center placent l’étiquette.
jeton
La casse
src/styles/fonts.css · src/styles/dp/tokens.ext.css (LA CASSE) · scripts/fonts/casse.py
Affiche · Bodoni Moda, graisse 400 à 900, taille optiqueLe feu vert pour vos projets
Affiche colossale · capitales serrées, une ligneTenu.
Voix · Jost, de 100 à 900Un seul interlocuteur, du premier appel à la livraison.
Capitale · Jost en capitales espacées : boutons, menus, étiquettesParlons de votre projet
--fs-displayLe feu vertPhrase monumentale (48 à 136 px)
La casse d’un imprimeur parisien de 1930, devenu 2026 : l’affiche (Bodoni Moda, le Didot) pour les titres en casse de phrase et le mot colossal en capitales, jamais sous 28 pixels ni en paragraphe ; la voix (Jost, le Futura) pour tout ce qui parle et se lit, et en capitales très espacées pour les sur-titres, les menus et les boutons ; la machine (Courier Prime, la machine à écrire de la rédaction) pour ce qui se compte : folios, index, numéros, téléphone, plaques. Trois familles, pas une de plus ; chacune imprime ses défauts de casse (un caractère décalé d’un rien, selon ses voisins).
jeton
Espacement
--dp-space-1 … --dp-space-9
--dp-space-10.25 rem
--dp-space-20.5 rem
--dp-space-30.75 rem
--dp-space-41 rem
--dp-space-51.5 rem
--dp-space-62 rem
--dp-space-73 rem
--dp-space-84 rem
--dp-space-96 rem
Échelle de 0,25 à 6 rem. Les écarts entre blocs prennent 5 à 7, jamais une valeur intermédiaire.
jeton
Rayons et filets
--dp-radius-* · --dp-border-*
radius-none
radius-sm
radius-md
radius-pill
border-hair
border-gold-thin
border-gold-soft
border-neon
Presque tout est à angle droit : l’Art déco est fait de gradins, pas de courbes. Seule exception : la gélule du bouton et des pastilles.
jeton
Ombres et lueurs
--dp-shadow-* · --dp-glow-*
Pose--dp-shadow-1
Élévation--dp-shadow-2
Lueur laiton--dp-glow-gold
Lueur néon, petite--dp-glow-neon-sm
Lueur néon--dp-glow-neon
L’ombre pose, la lueur signale. Une lueur néon n’apparaît qu’au survol, au focus ou sur un état actif.
jeton
Durées et courbe
--dp-dur-* · --dp-ease
--dp-dur-fast200 ms · Survol de lien, couleur
--dp-dur400 ms · Boutons, cartes
--dp-dur-slow600 ms · Reflets, profondeur
--dp-dur-xslow800 ms · Entrées de section
Survolez ou mettez le focus sur une ligne. Deux courbes nommées (lancer, freiner) ; en mouvement réduit, les durées tombent à zéro et seul l’état final reste. La typographie cinétique (lot 20, les presses) : .dp-compose et .dp-compose--view avec Compose (composer et encrer les titres), .dp-repere et data-text (le repérage des mots colossaux), .dp-emboss (le gaufrage, lumière au pointeur), data-rotative (la rotative des bandeaux).
Le bouton d’appel piéton du feu, devenu l’appel principal du site (lot 27) : un disque de laiton, boîtier de laque et lunette, un anneau de verre vert (le seul vert du bouton : « allez-y ») et le bouton de laiton au centre, qui s’enfonce à la pression par crans. Le libellé reste « Parlons de votre projet » ; la sous-ligne dit le délai. Le verre s’allume à l’arrivée (bégaiement, aligné sur le feu dans le hero), respire au pointeur fin tant que le bouton est à l’écran, et s’allume en plein sous la main ; sur l’accueil, la main dessus met le feu 3D au vert. Un seul par écran : le hero (deux temps), la finale, l’en-tête (sm, muet), la barre tactile (sm).
Prop
Type
Défaut
Rôle
href
string
—
La cible : toujours un lien (le contact, ou le contact avec un besoin pré-rempli).
size
'md' | 'sm'
'md'
Disque de 64 px, ou de 40 px (l’en-tête, la barre tactile : sans allumage ni respiration).
sub
string
—
La sous-ligne en machine, sous le libellé : « réponse sous 48 h ouvrées ». Fait partie du nom accessible.
magnetic
boolean
false
Le bouton suit légèrement le pointeur fin.
cursor
string
—
Libellé des équerres du curseur au survol (data-cursor) : « Feu vert », « On y va »…
data-cta
string
—
Nom du bouton dans la mesure des contacts (track.ts) ; hero, hero-fin et greenlight mettent aussi le feu 3D au vert.
<CallButton href="/contact/" sub="réponse sous 48 h ouvrées" magnetic cursor="Feu vert" data-cta="hero">Parlons de votre projet</CallButton>
<CallButton href="/contact/" size="sm" data-cta="header">Parlons-en</CallButton>
La plaque Streamline, pour les actions secondaires depuis le lot 27 : voir, comparer, appeler, envoyer (le formulaire). La plaque laiton garde son canal de verre vert et reste l’appel principal des pages intérieures (guichet, fiches de cas, services) tant que le bouton d’appel n’y est pas posé ; la plaque fantôme accompagne, jamais seule. Le canal s’anime au survol et au focus ; un spot blanc chaud suit le pointeur sur la face, le reflet brossé s’oriente, la plaque s’enfonce à la pression.
Prop
Type
Défaut
Rôle
href
string
—
Présent : rend un lien. Absent : un bouton.
variant
'gold' | 'neon' | 'ghost'
'gold'
Plaque d’appel laiton, plaque verte, ou plaque fantôme.
size
'md' | 'sm'
'md'
Hauteur de la plaque.
magnetic
boolean
false
La plaque suit légèrement le pointeur fin.
cursor
string
—
Libellé des équerres du curseur au survol (data-cursor) : « Feu vert », « Envoyer »…
type
'button' | 'submit'
'button'
Type du bouton, sans href.
<Button href="/realisations/" variant="ghost">Voir les réalisations</Button>
<Button type="submit" cursor="Envoyer">Envoyer ma demande</Button>
classe CSS
.dp-alert
src/styles/dp/components/alert.css
Message envoyé. Réponse sous 48 heures ouvrées.
Pour un projet urgent, appelez plutôt que d’écrire.
Adresse e-mail incomplète : il manque l’arobase.
Information neutre, filet laiton.
Un filet coloré à gauche, jamais une couleur de fond : le vert dit « reçu », le rouge dit « à corriger », le clair informe. Toujours avec un texte, la couleur ne porte pas seule le sens.
classe CSS
.dp-stat
src/styles/dp/components/stat.css
48 hDélai de réponse
3Boutiques pilotéesen service
1Interlocuteur
Un chiffre fourni par le client ou vérifiable, avec son unité et sa légende. Jamais de chiffre non sourcé : voir les règles d’usage.
03
Formulaires
Champs à étiquette visible, jamais un simple placeholder.
classe CSS
.dp-field · .dp-label · .dp-input · .dp-textarea
src/styles/dp/components/form.css
Il manque l’arobase.
Les champs nus du socle : une étiquette liée, une hauteur d’au moins 44 px, un état d’erreur porté par aria-invalid avec un message en texte. Le formulaire de contact les habille en console (ci-dessous).
composant
Switch
src/components/ui/Switch.astro
L’interrupteur à levier : une vraie case à cocher habillée d’un levier de laiton sur son socle ; la tige bascule par crans, la lampe s’allume blanc chaud. Pour une option qui change la suite du formulaire (le rappel par téléphone), jamais pour une liste de cases.
Prop
Type
Défaut
Rôle
name · value
string
—
Ceux de la case à cocher (value : « oui » par défaut).
checked
boolean
false
Levier enclenché à l’arrivée.
id
string
—
Identifiant de la case.
slot
—
Le texte, à droite du levier.
composant
ContactForm
src/components/blocks/ContactForm.astro
Le message n’a pas pu être envoyé : vérifiez les champs obligatoires (et votre numéro si vous demandez un rappel). Vous pouvez aussi écrire ou appeler directement : 06 11 08 77 84 · jerome@motiondrive.fr.
La console de contact (lot 9) : un pupitre de laque bordé de laiton, chaque champ derrière une fenêtre de verre en retrait avec sa plaque gravée et son voyant (vert quand le champ est bon), l’interrupteur du rappel, et le feu en 3D qui se tourne vers vous champ après champ : tourné au repos, de face et vert quand on peut envoyer, éteint pendant l’envoi. Tout fonctionne sans JavaScript (:has) ; le script n’ajoute que l’envoi en place. Un seul par site, sur /contact/.
04
Cartes
Chaque carte a un rôle : une offre, une preuve, un lieu, une voix.
La carte d’offre. Cadre laiton, laque en retrait, soleil gravé qui bouge à contresens du pointeur : tout le fond est peint dans un seul SVG, derrière le laiton. Trois par rangée au plus.
DirigeantsOn nous parle d’IA : par où commencer ?Le conseil IA→
La palette qui devient enseigne : une tuile de laque fendue en son milieu, cerclée de laiton, à deux faces. La voix (le public gravé, la phrase d’un client entre guillemets, un voyant blanc chaud) et l’enseigne (le service en capitales de laiton, la flèche, un tube qui s’allume au passage ou au focus). À plat (Services, Secteurs, mouvement réduit), les deux faces sont empilées. Le lien est l’enseigne : son nom accessible est le service. Depuis le lot 28, le hero de l’accueil raconte les voix et les portes autrement (VoiceLine, DoorLine, ci-dessous) ; la palette vit à plat.
Prop
Type
Défaut
Rôle
who
string
—
Le public, gravé en petit sur la face « voix ».
voice
string
—
La phrase du client, en texte (les guillemets français sont posés par <q>).
dest
string
—
L’enseigne : le service, en capitales de laiton ; c’est le lien et son nom accessible.
href
string
—
La page du service.
index
number
0
Le rang (0 à 3) : le décalage du retournement (--i × 120 ms).
flat
boolean
false
Les deux faces empilées, sans retournement (Services, Secteurs ; aussi le mouvement réduit et le sans-JavaScript).
composant
VoiceLine
src/components/ui/VoiceLine.astro
Commerçants, artisans, PMEOn ne me trouve pas sur Google.
DirigeantsOn nous parle d’IA : par où commencer ?
Une voix au feu rouge (lot 28) : le public en machine, la phrase du client en Jost italique, un voyant blanc chaud. Trois états lus dans --story-p : elle attend (en retrait), elle parle (pleine, voyant allumé), elle a été entendue (à demi). Une seule parle à la fois : c’est un dialogue entendu au feu rouge, pas une liste ; une citation lue, jamais un lien. Ici, à plat : toutes parlent.
Prop
Type
Défaut
Rôle
who
string
—
Le public, en machine, au-dessus de la phrase.
voice
string
—
La phrase du client, en Jost italique (les guillemets français sont posés par <q>). Une citation lue, jamais un lien.
index
number
0
Le rang (0 à 3).
threshold
number
0
La progression du récit (--story-p, 0 à 1) à laquelle la voix parle : elle s’allume, son voyant aussi.
next
number
1
Le seuil de la voix suivante : passé, la voix a été entendue (à demi).
Une porte de l’autre côté (lot 28) : le service en affiche, une flèche, un filet gravé et, dessus, un tube de laiton qui s’allume quand le récit passe le seuil de la porte, au survol et au focus. C’est le lien : son nom accessible est le service. Les quatre portes répondent aux quatre voix, dans le même ordre, et entrent l’une après l’autre.
Prop
Type
Défaut
Rôle
dest
string
—
Le service, en affiche : c’est le lien et son nom accessible.
href
string
—
La page du service.
index
number
0
Le rang (0 à 3) : le décalage d’entrée (--i × 90 ms) et l’ordre d’allumage du tube.
Une qualité alignée sur les attentes, et des délais tenus scrupuleusement.
Voir le cas →
La carte de preuve : une réalisation cliente. Sans visuel livrable, l’affiche est composée (soleil levant, chiffre clé) plutôt qu’illustrée par une image d’emprunt.
Prop
Type
Défaut
Rôle
entry
CollectionEntry<'cases'>
—
Entrée de la collection cases.
index
number
0
Rang, pour la teinte de l’affiche.
key
string
—
Chiffre ou mot clé composé sur l’affiche (par défaut : premier fait).
heading
'h2' | 'h3'
'h3'
Niveau du titre.
composant
Testimonial
src/components/blocks/Testimonial.astro
TélégrammeReçu le 23 avril 2024
Jérôme est un très bon designer de site internet : il est créatif, à l’écoute du client, très compétent en termes de graphisme, il maîtrise les animations à la perfection. […] Il nous a très bien accompagnés sur la rénovation graphique de notre site internet locakase.fr et nous allons continuer de travailler avec lui pour nos prochains projets.
Thomas LecointeDirecteur opérationnel France, LocakaseRecommandation LinkedInReçu
La carte de voix : une recommandation publique, fidèle à l’original, avec son auteur, son poste et sa date. Pas de note chiffrée, pas de balisage d’avis.
Prop
Type
Défaut
Rôle
entry
Testimonial
—
Recommandation de data/testimonials.ts.
index
number
0
Rang, pour l’entrée décalée.
classe CSS
.dp-card
src/styles/dp/components/card.css
Laiton
Surface standard.
Relevée
Surface haute.
Néon
Bordure de laiton allumé.
La surface générique à bordure ornementale, pour un bloc de contenu sans rôle éditorial. --gold relève la surface, --neon passe la bordure au laiton allumé.
composant
Emblem
src/components/ornaments/Emblem.astro
L’emblème d’un service : un médaillon à rayons. La pièce s’allume en laiton au survol, ou en permanence avec active pour l’élément courant.
Prop
Type
Défaut
Rôle
service
string
—
Identifiant du service (ex. identite-visuelle-pao).
size
number
220
Taille en px.
active
boolean
false
Pièce allumée en laiton en permanence.
05
Cadres
Ce qui encadre une image ou un bloc de texte.
composant
ArchFrame
src/components/ornaments/ArchFrame.astro
Variante panel : le contenu seul, sous l’arche.
L’arche : sommet arqué, double filet, épaulements étagés. Pour un portrait ou une image verticale ; la variante panel encadre du texte.
Prop
Type
Défaut
Rôle
variant
'media' | 'panel'
'media'
media : image sous l’arche ; panel : contenu seul.
image
ImageMetadata
—
Image importée (variante media).
alt
string
''
Texte alternatif ; vide si décorative.
priority
boolean
false
Chargement immédiat (image au-dessus de la ligne de flottaison).
fluid
boolean
false
S’étire à la largeur du parent.
position
string
'center'
object-position de l’image.
<ArchFrame image={photo} alt="Le lecteur de brochures en 3D" />
<OrnateFrame tone="neon" weight="tight"><p>Contenu</p></OrnateFrame>
composant
SignatureFrame
src/components/ornaments/SignatureFrame.astro
Le lecteur de brochures en 3D
Le cadre signature : celui du design system d’origine, tracés repris à l’identique. Un par page, pour l’image qui compte.
La plaque gravée (.dp-plaque, lot 30 ; réglette rivetée jusque-là) : la laque, un filet de laiton, l’étiquette en machine à cheval sur le filet. Le cadre commun des colonnes latérales (coordonnées du contact, « Où me trouver », livrables d’un service, engagements de la méthode) et des liens « plus » (Services, Réalisations) ; en lien, le filet s’allume d’un tube. Remplace OrnateFrame partout où le contenu est une fiche ; OrnateFrame reste pour la bible.
Prop
Type
Défaut
Rôle
cap
string
—
Le texte gravé de la réglette de tête (facultatif, visible).
as
string
'div'
La balise rendue : div, aside, li, a (en lien, la plaque s’allume au survol).
…rest
—
href, aria-*, data-* passent à la balise ; --bp-pad et --bp-gap règlent l’intérieur.
composant
OrnateFrame
src/components/ornaments/OrnateFrame.astro
tight
base
bold
neon
La bordure ornementale à angles, pour un encadré de texte. Trois épaisseurs, deux matières.
Prop
Type
Défaut
Rôle
as
string
'div'
Balise rendue.
tone
'gold' | 'neon'
'gold'
Matière du cadre.
weight
'tight' | 'base' | 'bold'
'base'
Épaisseur de la bordure.
composant
ZigguratCorners
src/components/ornaments/ZigguratCorners.astro
Laiton
Néon
Quatre angles en gradins autour d’un contenu court : un chiffre, une citation, un mot.
Prop
Type
Défaut
Rôle
as
string
'div'
Balise rendue.
tone
'gold' | 'neon'
'gold'
Matière des gradins.
06
Ornements
Ils n’ornent pas : chacun a une fonction. Séparer, guider, signaler, signer.
composant
CornerDeco
src/components/ornaments/CornerDeco.astro
Laiton
Papier
L’angle droit Deco Punk, tiré du dessin de Jérôme : trois barres emboîtées coupées en biseau et un carré dans le coin. Il cadre une ouverture comme une affiche (finale du feu vert ; en-tête d’une page intérieure seulement s’il n’a pas de fil d’Ariane : le mât de la locomotive tient alors l’angle). Laiton biseauté, deux tubes allumés au défilement, lentille de laque avec un losange allumé. Toujours décoratif, toujours dans les marges, jamais sur le texte.
Prop
Type
Défaut
Rôle
at
'tl' | 'tr' | 'bl' | 'br'
'tl'
Le coin où se pose l’angle. Le dessin est un angle haut-gauche, retourné par symétrie : le point le plus clair reste au coin extérieur.
size
string
'clamp(48px, 5.25vw, 88px)'
Largeur CSS (longueur). Se règle aussi par la variable --cn-s posée sur l’angle.
tone
'brass' | 'paper'
'brass'
brass : laiton biseauté, tubes allumés avec halo, pour page noire. paper : encre et laiton foncé, sans halo, pour une feuille crème.
class
string
—
Classe de placement (position absolue dans le parent).
composant
Sunburst
src/components/ornaments/Sunburst.astro
bottom
center
top-right · neon
Le soleil levant : le fond d’une ouverture ou d’une affiche. Trois origines, deux matières. Toujours derrière le contenu, jamais devant.
Prop
Type
Défaut
Rôle
rays
number
—
Nombre de rayons.
origin
'bottom' | 'center' | 'top-right'
'bottom'
Point d’où partent les rayons.
tone
'gold' | 'neon'
'gold'
Couleur des rayons.
animate
boolean
—
Rotation très lente (140 s), coupée en mouvement réduit.
Les séparateurs : un losange pour une pause, des chevrons pour une direction, l’éventail pour une tête de section. Ils se tracent à l’entrée dans l’écran.
Prop
Type
Défaut
Rôle
DiamondDivider · tone
'gold' | 'neon'
'gold'
Couleur du losange.
ChevronDivider · count
number
5
Nombre de chevrons.
ChevronDivider · tone
'gold' | 'neon'
'gold'
Couleur.
Fan · blades
number
7
Nombre de nervures.
Fan · size
number
120
Largeur en px.
Fan · tone
'gold' | 'neon'
'gold'
Couleur.
composant
SpeedLines
src/components/ornaments/SpeedLines.astro
Les lignes de vitesse des locomotives : elles ne suivent que ce qui bouge ou ce qui est lancé (un titre qui entre, un bouton). Jamais en décoration fixe.
Prop
Type
Défaut
Rôle
side
'left' | 'right'
'left'
Côté du nez arrondi.
length
number
96
Largeur en px ; la hauteur suit le dessin (4,83 pour 1).
tone
'gold' | 'neon'
'gold'
Couleur.
composant
Skyline · Avesnois-Thiérache
src/components/ornaments/Skyline.astro
Frise frontale 2D intégrée au footer : Avesnes, Fourmies, Trélon, La Capelle, Buire et Parfondeval. Le coupé Streamline séparé par Jérôme roule en boucle de 32 secondes, avec roues synchronisées et suspension discrète. Sources Illustrator : src/assets/svg/frise-avesnois-thierache-2d.svg (1800 × 350) et src/assets/svg/voiture.svg. Les exports restent intacts ; l’ancienne voiture fixe est retirée uniquement du rendu. Jusqu’à 700 px, le trajet continue de la première rangée à la seconde. Commande pause/reprise au clavier, pause hors écran ou onglet masqué. Voiture immobile sans JavaScript, en mouvement réduit ou économie de données.
Prop
Type
Défaut
Rôle
class
string
—
Classe CSS ajoutée.
composant
SignalLight
src/components/ornaments/SignalLight.astro
Le feu dessiné, version légère (SVG), pour un état dans une interface dense. Pour l’état d’une page entière, préférer Signal3D.
Prop
Type
Défaut
Rôle
state
'green' | 'gold'
'green'
Lentille allumée.
size
number
56
Largeur en px.
composant
Signal3D
src/components/ornaments/Signal3D.astro
rouge
eteint
vert
Le feu en laiton : trois images rendues une fois dans Blender, des lueurs en CSS, aucun moteur 3D. Rouge tant qu’il manque quelque chose, vert quand on peut y aller. Sans JavaScript ou en mouvement réduit : directement vert.
Prop
Type
Défaut
Rôle
state
'rouge' | 'vert' | 'eteint' | 'view'
'view'
État figé, ou view : passe du rouge au vert à l’entrée dans l’écran.
height
string
—
Hauteur affichée (valeur CSS).
alt
string
—
Texte alternatif ; vide = décoratif.
eager
boolean
—
Chargement immédiat des trois images.
<Signal3D state="rouge" height="260px" /> <!-- il manque quelque chose -->
<Signal3D state="vert" height="260px" /> <!-- tout est prêt -->
<Signal3D state="view" height="260px" /> <!-- rouge, puis vert à l'entrée dans l'écran -->
composant
Signal3DTurn
src/components/ornaments/Signal3DTurn.astro
Le feu qui tourne : treize poses rendues une fois dans Blender (la caméra fait un quart de tour de chaque côté de la vue de face du site, la pose 6), posées côte à côte dans une feuille ; les poses passent par crans, les halos suivent. Au défilement dans la finale (GreenLight), ou piloté par --pose dans la console de contact. Sur l’accueil, depuis le lot 17, le feu est une scène Three.js en temps réel (src/scripts/hero3d.ts) et le hero un récit au défilement (src/scripts/hero-story.ts, 280 svh, 380 au téléphone, scène épinglée) en cinq temps : l’arrivée (rouge), au feu rouge (les quatre voix, une à la fois ; le passant les écoute), le feu vert (« Passez. » ; il soulève son chapeau vers le feu), la traversée (il traverse la rue vers le visiteur au rythme du défilement, le pictogramme de la lentille marche avec lui), de l’autre côté (« Par où commencer ? », les quatre portes, le bouton ; il vous salue). Le passant (lots 38-41) est le personnage-signal du kit, en 3D temps réel. La pose fixe de Signal3DHero reste la première image et le repli (téléphones anciens, mouvement réduit, sans JavaScript).
Prop
Type
Défaut
Rôle
drive
'scroll' | 'var'
'scroll'
scroll : le feu tourne avec la section (timeline --gl, GreenLight). var : le parent choisit la pose avec --pose (0 à 12, 6 = de face), par exemple selon l’état d’un formulaire.
height
string
—
Hauteur affichée (valeur CSS).
alt
string
—
Texte alternatif ; vide = décoratif.
composant
WalkLogo
src/components/ornaments/WalkLogo.astro
mark · stillmark · loopMotion Drivefull · still
Le marcheur du logo : quelques kilo-octets de pièces animées en CSS, à la place d’un lecteur d’animation. Il marche au rythme de la lecture.
Prop
Type
Défaut
Rôle
variant
'mark' | 'full'
'mark'
Marcheur seul, ou avec le mot-symbole.
mode
'scroll' | 'loop' | 'hover' | 'still'
'scroll'
Ce qui le fait marcher : la lecture, une boucle, le survol, rien.
title
string
—
Nom accessible ; sans titre, décoratif.
composant
SignalCharacter
src/components/ornaments/SignalCharacter.astro
hat-salute
present
Le personnage-signal du brand system v1.6.0 : le marcheur du logo en volume, vert phosphore. Pose fixe de quelques kilo-octets, puis un atlas par geste (moins de 250 Ko) chargé à l’approche et joué une fois sur un canvas. Gestes aux droits sûrs seulement. Rare : le guichet, la 404, la page merci ; jamais sur fond clair ; dans la scène du feu de l'accueil, c'est le passant en 3D (src/scripts/character3d/passant.ts). Image fixe en mouvement réduit.
Prop
Type
Défaut
Rôle
play
string
—
La suite jouée une fois à l’entrée : gestes séparés par des virgules, walk*2 pour deux cycles (walk, stop, hat-salute, present).
on
string
—
Sélecteur d’un élément de la section qui déclenche onPlay au survol ou au focus.
onPlay
'present' | 'hat-salute' | 'stop' | 'walk'
—
Le geste joué une fois à l’approche de cet élément.
enter
'approach'
—
Il s’avance pendant la marche (la marche du kit est de face).
mirror
boolean
false
Retourné : present désigne un élément placé à sa gauche à l’écran (le bouton du guichet).
alt
string
—
Description du personnage et du geste.
height
string
'clamp(220px, 30vw, 360px)'
Hauteur affichée (CSS).
composant
SignalStudio
src/components/blocks/SignalStudio.astro
affiche (image 1, CRT à la phase 0)
Le personnage-signal en temps réel (lot 35), sur la page du service 3D seulement : une conversation captée (MocapOnline « Conversations 2 », environ une minute), calculée par le navigateur (src/scripts/character3d/ : peau à six influences, CRT du kit, bloom serré, sol laqué). Console en laiton : prise, position du mouvement, pause, Recommencer, angle de vue (ou glisser). Monté au premier geste, à l’approche ; téléphones et machines modestes : extrait précalculé de 22 s lu une fois, puis « Voir en 3D temps réel » ; mouvement réduit : l’affiche Blender ci-contre. Une prise ne boucle jamais ; changer de prise coupe net (la lumière garde sa phase). Ici en affiche seulement (pas de WebGL sur cette page).
composant
PosterArt
src/components/ornaments/PosterArt.astro
Votre nom iciAffiche composée
L’affiche composée, utilisée quand un cas n’a pas de visuel livrable : soleil levant, nom du client, mention.
Prop
Type
Défaut
Rôle
client
string
—
Nom du client, composé sur l’affiche.
mention
string
—
Mention secondaire.
label
string
—
Libellé accessible.
07
Structure
Ce qui organise une page : titres, fil d’Ariane, questions, étapes.
composant
SectionHeading
src/components/typo/SectionHeading.astro
axisII
Méthode
Unseulinterlocuteur
Axis : composition symétrique sur axe.
splitII
Méthode
Quatreétapes
Split : lecture asymétrique, numéral gravé.
bare
Moment nu
Sans ornement
Bare : aucun ornement, le titre seul.
marquee
Vos besoins◆Vos besoins◆Vos besoins◆Vos besoins◆Vos besoins◆Vos besoins◆
Défilé
Vosbesoins
Marquee : le vrai titre reste lisible dessous.
Quatre compositions, pour qu’aucune section ne ressemble à sa voisine : axis (symétrique), split (asymétrique, numéral gravé), bare (moment nu), marquee (le titre défile). On n’enchaîne jamais deux fois la même.
Prop
Type
Défaut
Rôle
eyebrow
string
—
Petite ligne au-dessus du titre.
title
string
—
Titre de la section (obligatoire).
lead
string
—
Chapeau sous le titre.
variant
'axis' | 'split' | 'bare' | 'marquee'
selon align
Quatre compositions : aucune section ne ressemble à sa voisine.
numeral
number
—
Numéral romain (axis, split).
level
'h1' | 'h2'
'h2'
Niveau de titre.
id
string
—
Identifiant du titre, pour aria-labelledby.
<SectionHeading variant="split" numeral={2}
eyebrow="Méthode" title="Du premier appel à la livraison"
lead="Quatre étapes, un seul interlocuteur." id="h-methode" />
composant
Breadcrumb
src/components/blocks/Breadcrumb.astro
Le fil d’Ariane, sur toute page de second niveau et au-delà : la locomotive decov4 vue de profil (le mât à deux filets, la caisse au nez arrondi qui porte le chemin, deux rails qui filent à l’entrée dans l’écran). Il alimente aussi les données structurées de la page.
Prop
Type
Défaut
Rôle
items
{ name: string; href: string }[]
—
Du plus général au plus précis ; le dernier n’est pas un lien.
composant
Drawer
src/components/blocks/Drawer.astro
01Combien ça va me coûter ?
Le premier rendez-vous ne coûte rien. Vous recevez ensuite un cadrage d’une page et un devis détaillé, poste par poste.
02Et si le projet dérape en cours de route ?
Le périmètre est écrit au départ, avec ce qui en est exclu, et la date de livraison figure au devis.
Le tiroir de classeur : une façade de laque cernée de laiton, l’étiquette sur un carton crème, la question gravée, une poignée-coquille. On tire (<details> natif : clavier, lecteur d’écran et recherche dans la page fonctionnent sans JavaScript) : la façade avance, la poignée s’allume, la fiche en carton crème se dresse avec la réponse. Empilés, les tiroirs forment un classeur (Objections, Faq).
Prop
Type
Défaut
Rôle
n
string
—
L’étiquette du tiroir (« 01 »), sur un carton crème.
q
string
—
La question, gravée sur la façade (le <summary>).
open
boolean
false
Tiroir tiré à l’arrivée.
slot
—
La réponse, dans la fiche en carton crème.
composant
Faq
src/components/blocks/Faq.astro
01Un indépendant, aurez-vous le temps pour moi ?
Réponse sous 48 heures ouvrées, et un seul interlocuteur pendant tout le projet.
02Dois-je fournir le texte et les images ?
Ce que vous avez suffit pour démarrer : on complète ensemble ce qui manque.
Des questions franches, avec des réponses courtes : un classeur de tiroirs (Drawer). Le JSON-LD FAQPage est émis par la page avec les mêmes items.
Prop
Type
Défaut
Rôle
items
{ q: string; a: string }[]
—
Questions et réponses ; chaque ligne est un tiroir (Drawer, <details> natif).
composant
UxPrinciples
src/components/blocks/UxPrinciples.astro
UI et UX
Quatrerèglespourunoutilquel’onadopte
Un logiciel utile, mais pénible, reste dans un tiroir. Chaque outil est conçu autour de ces quatre règles, vérifiées avec ceux qui s’en servent.
I
Simple
Une chose par écran
Chaque écran répond à une question. Ce qui n’aide pas à y répondre disparaît, ou se range un niveau plus loin.
Personne ne cherche où cliquer.
II
Efficace
Le chemin le plus court
Les actions fréquentes sont à un clic, pré-remplies, et au clavier aussi. On compte les clics comme on compte les minutes.
Chaque tâche prend moins de temps.
III
Lisible
Les mots de votre métier
Les libellés sont ceux de vos équipes, pas ceux de l’informatique. Un nouvel arrivant s’en sert sans longue formation.
Un nouvel arrivant s’y retrouve vite.
IV
Adopté
Fait avec ceux qui s’en servent
Une maquette cliquable est montrée aux utilisateurs avant le développement. On corrige sur l’écran, pas dans le code.
Les quatre règles de conception d’un outil : simple, efficace, lisible, adopté. Chaque plaque porte une mini-démonstration dont l’élément néon est ce que la règle met en avant, allumé au survol et au focus.
Prop
Type
Défaut
Rôle
id
string
'h-ux'
Identifiant du titre.
eyebrow · title · lead
string
—
Texte d’introduction ; les quatre règles sont fixes.
composant
ProcessSteps
src/components/sections/ProcessSteps.astro
I
Cadrer
On écrit ce qu’on fait. Et ce qu’on ne fera pas.
II
Outiller
Vos outils d’abord, zéro licence superflue.
III
Encadrer
RGPD, droits d’image, relecture humaine.
IV
Former
Vos équipes repartent autonomes.
V
Mesurer
Sinon, ce n’est qu’une démo.
La méthode en étapes numérotées en chiffres romains, alimentée par data/method.ts. detailed ajoute le détail de chaque étape.
Prop
Type
Défaut
Rôle
detailed
boolean
false
Affiche le détail de chaque étape de la méthode.
classe CSS
.dp-timeline
src/styles/dp/components/timeline.css
Cadrage
Besoin et périmètre validés
Maquette
Première version approuvée
Livraison
Mise en ligne
Une chronologie courte : jalons faits en néon, à venir en laiton.
08
Média et états
Ce qui montre un résultat.
composant
HoloStage
src/components/blocks/HoloStage.astro
Le marcheur, en volume
Un hologramme en vidéo légère sur socle de laque et de laiton, avec une image fixe de repli. La vidéo se lance à l’entrée dans l’écran et reste cliquable en pause.
Prop
Type
Défaut
Rôle
id
string
—
Identifiant des fichiers /video/<id>.webm|mp4 et /media/<id>.avif.
ratio
string
—
Largeur / hauteur, ex. "600 / 720".
label
string
—
Description accessible.
caption
string
—
Légende visible.
composant
FilmStrip
src/components/blocks/FilmStrip.astro
01L’accueil
02Les appartements
La pellicule (lot 9) : les étapes d’un projet comme les photogrammes d’une bande de film, perforations de laiton continues, chaque image derrière un biseau de laiton avec son numéro gravé. Les images sont projetées : sombres hors de l’écran, pleine lumière par paliers quand la bande entre, balayées une fois par la lanterne au pointeur fin. Rail à jauge sous 700 px.
Prop
Type
Défaut
Rôle
frames
{ src, alt, label }[]
—
Les photogrammes : les steps d’une fiche de cas (de 2 à 4 colonnes).
La gazette (lot 10) : les conseils comme des feuilles de journal épinglées sous des pinces de laiton, légèrement de travers ; manchette à filet double, numéro et date, titre en Jost, chapeau. À l’entrée la feuille descend de sa pince par crans ; au survol ou au clavier elle se soulève et la pince s’allume. Pour la liste des conseils, jamais pour des cartes de service.
Prop
Type
Défaut
Rôle
items
{ href, title, lead, date, n? }[]
—
Une feuille par article : numéro (rang par défaut), date, titre, chapeau ; toute la feuille est le lien.
composant
BeforeAfter
src/components/blocks/BeforeAfter.astro
Juillet 2023Aujourd’hui
Avant, après
Faites glisser le rideau : à gauche juillet 2023, à droite aujourd’hui.
La visionneuse (lot 9) : les deux captures derrière le verre d’un écran Deco, un rideau de laiton que l’on tire (souris, doigt, clavier : flèches), une poignée gravée, deux plaques dont celle du côté le plus visible s’allume. À l’entrée dans l’écran, le rideau se tire tout seul de la droite au milieu, par crans. Pour une refonte, jamais pour un simple changement de couleur.
Prop
Type
Défaut
Rôle
before · after
ImageMetadata
—
Les deux images, de même format.
beforeLabel · afterLabel
string
—
Étiquettes des deux côtés.
alt
string
—
Description de la comparaison.
id
string
'ba'
Identifiant, si plusieurs sur la page.
composant
DecoScreen
src/components/blocks/DecoScreen.astro
Accueil
Appartements
L’écran de la salle des machines : une lunette de laiton à gradins, un verre bombé (reflet, phosphore, balayage) et, derrière, une vraie capture. Il s’allume comme un tube cathodique quand il entre à l’écran. Toute capture d’interface du site vit dans un DecoScreen ; sa lumière est blanc chaud, jamais verte.
Prop
Type
Défaut
Rôle
format
'monitor' | 'tablet' | 'board'
'monitor'
Moniteur 16/10 avec son pied et sa plaque ; tablette 4/3 ; affichage de gare panoramique.
on
'view' | 'load' | 'none'
'view'
Allumage cathodique : à l’entrée dans l’écran, à l’arrivée de la page (après --t-object), ou déjà allumé.
glow
boolean
false
L’écran est la source de lumière de sa section : un halo blanc chaud déborde de la lunette, le tube de la fenêtre reste allumé.
label
string
—
Texte gravé sur la plaque du pied (moniteur) ou sous la lunette.
alt
string
—
Ce que montre l’écran, pour les lecteurs d’écran (la lunette est décorative).
composant
ScreenShowcase
src/components/blocks/ScreenShowcase.astro
Site internet
Deux adresses sur la Côte d’Émeraude
Un site réalisé pour un client de Saint-Malo, pour présenter ses locations de charme à Saint-Malo et Dinard et guider les visiteurs vers leur prochain séjour.
Un outil en service, sur ses écrans : un moniteur Deco (source de lumière de la section) et une tablette en retrait, avec les vraies captures de la fiche. Pour une réalisation logicielle livrée, jamais pour une maquette.
Prop
Type
Défaut
Rôle
entry
CollectionEntry<'cases'>
—
Fiche de réalisation : screen et steps fournissent les deux captures.
eyebrow · title · lead
string
—
Texte d’introduction (titre à l’échelle d’une section, pas monumental).
points
string[]
—
Trois puces : ce que l’outil change, en un mot chacune.
label
string
—
Plaque gravée sous le moniteur.
caption
string
—
Légende sous les écrans.
reverse
boolean
false
Écrans à gauche, texte à droite (alterne avec le bloc voisin).
La tour des services de l’accueil (lot 59) : un gratte-ciel Art déco de huit étages, un par service, huit étages pour une seule adresse. La couronne à arches en soleil levant, redessinée par Jérôme (lot 61) : le passant en ombre chinoise cernée de laiton, ailé, marche sur la corniche, le fanal sur le chapeau ; deux projecteurs ; entre deux piliers cannelés, chaque étage porte son numéral, l’emblème du service, son nom et sa promesse dans une baie vitrée ; le hall et son portail en bas. Les baies s’allument une à une au défilement ; la main sur un étage fait passer son voyant et le fanal au vert. Styles chargés après coup (sous la ligne de flottaison).
Prop
Type
Défaut
Rôle
services
CollectionEntry<'services'>[]
—
Les services, du haut de la tour vers le bas (I à VIII) : un étage chacun.
label
string
'Les huit services'
Nom accessible de la liste des étages.
composant
FlapBoard
src/components/blocks/FlapBoard.astro
Le tableau d’affichage à palettes d’une gare : voie, destination, en clair, lentille « à l’heure ». Chaque ligne est un lien ; la destination claque lettre à lettre quand la ligne entre à l’écran, ligne après ligne. Le texte reste entier dans le DOM ; statique au tactile et en mouvement réduit.
Prop
Type
Défaut
Rôle
rows
{ n?, label, text?, href, cursor? }[]
—
Une ligne par destination : voie (numéral romain par défaut), destination qui claque, en clair, lien.
head
[string, string, string]
['Voie', 'Destination', 'En clair']
Les intitulés des colonnes.
dense
boolean
false
Lignes plus basses (tableau d’une fiche de cas, dans un écran).
label
string
'Tableau des départs'
Nom accessible du tableau (nav).
composant
MediaFrame
src/components/ornaments/MediaFrame.astro
Tableau de bord
Le contenu du média
Le cadre d’un média qui n’est pas un écran : une fenêtre de laiton, plaque à gradins du socle, dont le contenu est détouré par les mêmes gradins. InSitu et LogoJourney l’emploient (depuis les lots 9 et 10, les étapes d’un cas sont une FilmStrip, l’avant/après et la carte de la zone sont des écrans). Jamais pour une capture d’interface : c’est le rôle de DecoScreen.
Prop
Type
Défaut
Rôle
label
string
—
Titre de la barre de fenêtre, aligné à droite.
chrome
boolean
true
Barre de fenêtre à losanges (le premier seul s’allume). Faux pour une vidéo ou une comparaison.
tone
'gold' | 'neon'
'gold'
Matière de l’arête.
composant
MediaToggle
src/components/ui/MediaToggle.astro
Le bouton lecture / pause unique du site (WCAG 2.2.2), en losange de laiton. Le même sur VideoCase, InSitu, HoloStage et le défilé des références. Au survol et au focus l’arête passe au tube néon.
Prop
Type
Défaut
Rôle
label
string
'Lire la vidéo'
Libellé lu par les lecteurs d’écran ; lazy-video.ts le met à jour.
place
'br' | 'bl' | 'none'
'br'
Coin du cadre parent où il se pose ; none = dans le flux.
hooked
boolean
true
Vrai : lazy-video.ts le révèle et le branche. Faux : visible d’emblée, le parent gère l’état (ClientMarquee).
pressed
boolean
false
État initial : vrai = en lecture (icône pause).
composant
StationMark
src/components/ornaments/StationMark.astro
IIIIII
Le marqueur compact d’une étape : losange de laiton, numéral ou lentille. Line et FlapBoard l’emploient (lentilles) ; les étapes de ProcessSteps et de Story portent désormais une plaque de station (StationSign, ci-dessous). Le laiton allumé dit « franchi » ou « abouti » ; le vert est réservé aux boutons, aux feux et aux états validés.
Prop
Type
Défaut
Rôle
label
string
—
Numéral romain (roman(i)).
size
'sm' | 'md' | 'lg'
'md'
30 px, 2,9 rem ou 4 rem. Réglable aussi par --sz.
lit
boolean
false
Laiton allumé : l’étape est franchie ou aboutie.
lens
boolean
false
Une lentille de signal à la place du numéral (Line).
composant
StationSign
src/components/ornaments/StationSign.astro
IIIIII
La plaque de station : une lampe sur le rail, un bras de laiton, une plaque de laque cernée de laiton aux angles en gradins, le numéral en lettres d’affiche. La lampe s’allume en laiton quand la station est franchie (défilement, CSS pur). ProcessSteps et Story l’emploient, posée sur leur rail.
Prop
Type
Défaut
Rôle
n
string
—
Le numéral gravé sur la plaque (roman(i)).
size
'md' | 'lg'
'md'
Plaque de 3 rem ou de 3,7 rem.
lit
boolean
false
Lampe et numéral allumés d’emblée (l’étape aboutie) ; sinon la lampe s’allume au passage, au défilement.
composant
FloorDial
src/components/ornaments/FloorDial.astro
IIIIII
Le cadran d’étage d’un ascenseur (lot 11) : un demi-cadran de laiton biseauté, des graduations, un numéral par étage ; l’aiguille part de la gauche et rejoint l’étage par crans, puis la lampe s’allume. En tête des pages de secteur (PageHero scene="secteur", floor), avec la plaque gravée de l’étage.
Prop
Type
Défaut
Rôle
floor
number
—
L’étage visé (1 à floors) : l’aiguille le rejoint par crans à l’arrivée, le numéral et la lampe s’allument.
floors
number
3
Le nombre d’étages.
composant
Flap
src/components/typo/Flap.astro
Destination:Fourmies
Voielibre
Le tableau des départs : chaque lettre défile dans l’alphabet avant de se poser sur la bonne. Zéro JavaScript, texte intact dans le DOM (les lettres qui défilent sont du contenu généré). Pour un mot-clé, un libellé de service ; jamais pour un paragraphe. Avec tile, chaque caractère est une vraie palette.
Prop
Type
Défaut
Rôle
text
string
—
Le texte, tel qu’il doit être lu et indexé : il reste intact dans le DOM.
tile
boolean
false
Vraies palettes : une tuile de laque fendue par caractère, qui bascule pendant que la lettre défile (FlapBoard).
on
'load' | 'view'
'load'
Au chargement (avec delay) ou au défilement, quand le mot entre à l’écran.
delay
number
0
Retard en ms avant la première lettre (on="load").
offset
number
0
Décalage de départ en % de l’entrée dans l’écran (on="view") : les lignes d’un tableau claquent l’une après l’autre.
composant
Odo
src/components/typo/Odo.astro
192872h
Le compteur à rouleaux : les chiffres montent à leur valeur quand le nombre entre à l’écran (CSS pur), les unités plus tard que les dizaines. La valeur finale est dans le HTML. Pour un chiffre réel, déjà publié.
Prop
Type
Défaut
Rôle
value
number | string
—
Le nombre. Chaque chiffre est un rouleau 0…9 ; le reste (« h », « + ») reste du texte en dégradé.
composant
Nixie
src/components/typo/Nixie.astro
801928
Tubes Nixie en verre à double paroi : reflets, supports de cathodes, chiffres en fil lumineux ivoire à halo ambre et douilles en laiton fileté. Aucun maillage sur le verre. Le comptage suit l’entrée dans l’écran ; la valeur finale reste lisible sans JavaScript et en mouvement réduit. Le nombre est annoncé une seule fois, les filaments sont décoratifs. Réservé aux chiffres clés réels (KpiRow nixie).
Prop
Type
Défaut
Rôle
value
number | string
—
Le nombre : un tube par chiffre, les cathodes comptent jusqu’à la valeur à l’entrée dans l’écran ; les signes (« + ») restent du texte en laiton.
composant
Crossing
src/components/ornaments/Crossing.astro
La traverse de la voie : notre coupé Streamline avance sur un rail de laiton au rythme du défilement, accompagné d’une trace lumineuse. À la place d’un séparateur muet, deux fois par page au plus.
09
Sections de page
Les grands blocs, pleine largeur. Ceux qui épinglent la page pendant le défilement sont décrits plutôt que rejoués ici.
composant
CtaBand
src/components/sections/CtaBand.astro
Le guichet
Motion Drive
Votre projet commence ici
Parlons de ce que vous voulez construire
Un premier échange ne coûte rien et n’engage à rien. Même si le besoin est encore flou, vous repartez avec un avis clair sur ce qui est faisable, dans quel ordre et pour quel budget.
Le guichet : cadre horizontal à gradins, laiton biseauté, laque et arc lumineux. Le personnage-signal de la marque (SignalCharacter) partage le cadre avec le texte et les boutons ; sur mobile il passe dessous. Il soulève son chapeau quand le guichet entre à l’écran, puis présente le bouton d’appel quand la main ou le focus s’en approche ; image fixe en mouvement réduit. Le bouton de contact allume le feu et l’arc en vert. Dernier appel des pages de contenu ; l’accueil conserve sa finale GreenLight.
Prop
Type
Défaut
Rôle
title
string
—
Titre de la bande.
text
string
—
Texte d’appui.
composant
KpiRow
src/components/sections/KpiRow.astro
25 ans
de métier, de 2001 à aujourd’hui
10 ans
en environnement critique : armée, ferroviaire
8 ans
à piloter des projets en indépendant
80+
professionnels formés à l’IA et à Adobe
19
écrans géants diffusés à Los Angeles
La rangée de repères chiffrés, alimentée par data/kpis.ts. Aucune métrique non validée n’est publiée. Trois rendus : les plaques gravées (ci-dessous), la prop paper (chiffres imprimés dans une colonne Pullman sur papier crème) et la prop nixie (accueil : la console de la salle des machines, un tube par chiffre, plaques gravées pour les légendes).
composant
ClientMarquee
src/components/sections/ClientMarquee.astro
Ils m’ont fait confiance
◆
MRO Consulting 33◆
◆
◆
◆
◆
Equivalenza◆
Trendfeeling◆
◆
◆
◆
◆
MRO Consulting 33◆
◆
◆
◆
◆
Equivalenza◆
Trendfeeling◆
◆
◆
◆
Le défilé des logos clients, en PNG monochromes teintés laiton, alimenté par data/clients.ts. Il s’arrête au survol et en mouvement réduit.
composant
ZoneMap
src/components/sections/ZoneMap.astro
Zone d’intervention de Motion Drive autour de FourmiesCarte schématique : Fourmies au centre, et les communes desservies dans le Nord et l’Aisne, dans un rayon d’environ 45 minutes de route.15 min30 min45 minNord · 59Aisne · 02FourmiesAvesnes-sur-HelpeLa CapelleTrélonHirsonLe Nouvion-en-ThiéracheVervinsAulnoye-AymeriesMaubeuge
Table lumineuse · 45 minutes autour de Fourmies
Carte schématique · anneaux de temps de trajet indicatifs depuis Fourmies
La table lumineuse (lot 10) : la carte stylisée de la zone derrière le verre d’un écran Deco (source de lumière de la section), trois anneaux de temps de trajet autour de Fourmies, communes placées sur la carte, et un balayage radar blanc chaud qui tourne par crans au pointeur fin.
Sections qui épinglent la page ou occupent tout l’écran
Section
Rôle
À voir sur
Hero
Ouverture : titre, promesse, appel à l’action, visuel incliné
Le télégramme : un témoignage à la fois, imprimé sur une bande crème qui sort du récepteur de laiton quand la section entre à l’écran ; défilement horizontal entre les télégrammes
Panneau à gradins : laiton texturé avec Adobe, cartouches à rivets, écrans noirs. Reflets au pointeur ; vert uniquement au survol et au focus. Trois liens clavier et image fixe de repli.
Le registre des annonces de presse de 1930 : papier crème, panneaux noirs encadrés, damier, hachures, étoiles. Il s’emploie à la demande : rien n’est crème tant qu’une section ne le déclare pas. Tout est dessiné en CSS, aucune image.
composant
PanelTall
src/components/ornaments/PanelTall.astro
Le panneau haut et étroit, à double filet. Sur papier : cadre en encre, hachures claires qui s’effacent vers le bas, pied en damier ou en gradins. Sur page noire (on=dark) : cadre, hachures et damier en laiton. Le contenu se centre ; sans label, il est décoratif.
Prop
Type
Défaut
Rôle
on
'paper' | 'dark'
'paper'
paper : sur feuille crème, cadre en encre. dark : sur page noire, cadre, hachures et damier en laiton.
hatch
boolean
true
Hachures croisées dans les deux sens, qui s’effacent vers le bas.
stars
0 | 1 | 2 | 3
0
Nombre d’étoiles à quatre branches, en tête du panneau.
foot
'checker' | 'stairs' | 'none'
'checker'
Deux rangées de damier, des gradins, ou rien.
label
string
''
Description lue par les lecteurs d’écran ; vide = décoratif (aria-hidden).
class
string
—
Classe CSS ajoutée.
<PanelTall stars={3} label="Panneau à hachures" />
<PanelTall on="dark" foot="stairs" />
composant
BrandColumn
src/components/typo/BrandColumn.astro
Motion Drive
le feu vert pour vos projets
Logiciels etconseil en IA
conçus sur mesure par un seul interlocuteur
25ans
de métier, depuis 2001
Jérôme Baube
Fourmies · Avesnois
Motion Drive
le feu vert pour vos projets
Logiciels etconseil en IA
conçus sur mesure par un seul interlocuteur
25ans
de métier, depuis 2001
Jérôme Baube
Fourmies · Avesnois
La colonne Pullman : marque en lettrage d’affiche, capitales géométriques très espacées avec leur « et » en minuscules, chiffre d’affiche, signature en capitales larges et fines, petits chevrons entre les groupes. Les couleurs sont héritées : elle tient sur noir comme sur crème. Seule la ville est affichée tant que la rue n’est pas renseignée.
Prop
Type
Défaut
Rôle
mark
string
—
La marque, en lettrage d’affiche (Bodoni Moda).
kicker
string
—
Phrase courte en minuscules espacées, sous la marque.
title · and · title2
string
and = 'et'
Titre en capitales géométriques très espacées ; « et » (par défaut) en minuscules, puis la seconde moitié.
lines
string[]
—
Lignes de texte en minuscules espacées.
figure
{ value; suffix?; note? }
—
Chiffre d’affiche en Bodoni Moda, avec son unité et sa légende.
seller
string
—
Signature, en capitales larges et fines.
address
boolean
false
Ville seulement (« Fourmies · Avesnois ») ; la rue s’ajoute quand elle est renseignée.
<BrandColumn mark="Motion Drive" kicker="le feu vert pour vos projets"
title="Logiciels" title2="conseil en IA"
lines={['conçus sur mesure', 'par un seul interlocuteur']}
figure={{ value: '25', suffix: 'ans', note: 'de métier, depuis 2001' }}
seller="Jérôme Baube" address />
Huit classes, en CSS pur (gradients et masques SVG en data-URI), environ 1 Ko compressé. Les couleurs viennent de currentColor ou de variables : --c, --ck-a, --ck-b pour le damier, --hc et --hp pour les hachures, --fr pour le cadre.
Un paragraphe posé sur le papier : encre sur crème, corps de lecture, interlignage généreux. Le lien en laiton sombre reste soulignable au clavier comme à la souris.
L’épreuve : une feuille sortie de la presse, entre deux bandes en gradins. Papier vergé, traits de coupe aux coins de la page, mires de repérage dans les marges, folio et colophon en machine, gamme de contrôle à l’encre noire et bronze (jamais de vert). Les jetons de texte y sont retournés en encre (le texte courant à l’encre douce), les plaques noires gardent les leurs ; les titres reçoivent le foulage.
Prop
Type
Défaut
Rôle
id · labelledby · label
string
—
Identifiant de la section, et ce qui la nomme : id d’un titre (aria-labelledby) ou texte (aria-label).
panels
'both' | 'left' | 'right' | 'none'
'both'
Panneaux latéraux ; sous 700 px, deux frises les remplacent.
edge
'stairs' | 'none'
'stairs'
Bandes en gradins en haut et en bas, dans la section.
foot
'checker' | 'none'
'checker'
Damier au pied de la feuille.
narrow
boolean
false
Panneaux latéraux plus étroits (à partir de 1100 px) pour un contenu en deux colonnes.
pin
boolean
false
Scène épinglée (Manifeste) : panneaux collants à la hauteur de l’écran, sans marge verticale autour de la colonne.
folio
string
—
Le folio en machine, en tête de page (« Épreuve 1 / 2 · … ») ; vide = pas de folio.
colophon
string
—
La ligne du pied, après la gamme de contrôle (défaut : « Motion Drive · Fourmies · 2026 »).
slots
défaut · foot
—
La page ; la ligne de pied, au-dessus de la gamme de contrôle.
<PaperScene labelledby="h-exemple" folio="Épreuve 1 / 2 · Spécimen">
<h2 class="dp-h2" id="h-exemple">Titre</h2>
<p class="dp-body">Texte en encre sur crème.</p>
</PaperScene>
classe CSS
Trois matières sombres
src/styles/base.css
Laque(par défaut)
Hachures.dp-section--hatch
Rideau.dp-section--curtain
Sur fond noir, trois matières pour que deux sections voisines ne se ressemblent pas : la laque (par défaut), les hachures de laiton à 3,5 % et le rideau cannelé à 4 %. Le motif est un calque sous le contenu, fondu en haut et en bas ; il ne verdit jamais le fond.
Ce qui ne dépend pas d’un composant et ne se négocie pas.
Le vert dit allez-y.Il n’apparaît que sur une action que l’on peut lancer (l’anneau de verre du bouton d’appel, le canal de verre de la plaque), un feu (3D ou SignalLight), un état validé ou terminé. Tout le reste qui brille est du laiton ; deux zones vertes animées par écran au plus.
Un appel principal par écran.Le bouton d’appel (ou, sur les pages intérieures, la plaque laiton) ; les autres actions sont en fantôme ou en lien.
Le mouvement informe.Il suit la lecture ou répond au pointeur. En mouvement réduit : l’état final, sans transition.
Contraste AA minimum.4,5:1 pour le texte courant. Le laiton allumé --lit fait plus de 12:1 sur la laque ; le texte vert --go-text est réservé aux états validés. Les anciens noms --dp-neon* et --tube-* désignent désormais le laiton allumé.
Zones cliquables de 44 px.Jamais moins, y compris pour les liens de pied de page sur mobile.
Clavier d’abord.Focus visible sur tout élément interactif ; details et liens natifs plutôt que du JavaScript.
Pas de chiffre sans source.Un chiffre publié est fourni par le client ou vérifiable ; aucune métrique non validée.
Pas de couleur en dur.Toute valeur vient d’un jeton ; une nouvelle valeur se déclare d’abord dans tokens.ext.css.