MotionDrive
06 11 08 77 84 Parlons de votre projetParlons-en

Catalogue · édition 2026

Design system

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.

jeton

Couleurs

src/styles/dp/deco-punk-tokens.css · tokens.ext.css

Scène

  • Abysse--dp-bgFond de page surface
  • Encre 800--dp-ink-800Fond de scène, bandeau surface
  • Encre 700--dp-ink-700Surface de carte surface
  • Encre 600--dp-ink-600Surface haute surface
  • Filet--dp-lineBordures, séparateurs surface

Laiton

  • Laiton--dp-goldStructure, cadres, filets 9.5:1
  • Laiton clair--dp-gold-lightTitres, valeurs 18.1:1
  • Laiton sombre--dp-gold-darkOmbres du métal surface

Laiton allumé

  • Laiton allumé--litTout ce qui brille : tubes, liens, focus, station courante 14.3:1
  • Comète--lit-cometPointe du tube de laiton surface

Vert « allez-y »

  • Vert--goCanal des boutons, feux, états validés 14.9:1
  • Vert texte--go-textÉtats validés seulement 8.4:1

Texte

  • Texte--dp-textCorps de texte 16.7:1
  • Texte atténué--dp-text-mutedDescriptions, légendes 7.9:1
  • Texte discret--dp-text-dimNotes (corrigé pour l’AA) 6.2:1
  • Danger--dp-danger-textErreurs de formulaire 7.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.

jeton

Matières

--mat-brass · --mat-lacquer · --mat-glass · --mat-glass-screen
Laiton--mat-brass
Laque--mat-lacquer
Verre--mat-glass
Verre allumé--mat-glass-screen

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.

jeton

Lumière

tokens.ext.css (--light-*, --halo-*, --glass-dome, --phosphor, --scan, --t-*) · kit.css (.dp-halo, .dp-lit-in, .dp-sweep)

Lisible dès la première image.

Un balayage, une fois
  • --t-light 0 s
  • --t-title .08 s
  • --t-object .25 s
  • --t-cta .4 s

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.

classe CSS

.dp-plate · .dp-plaque · .dp-nose · .dp-tube

src/styles/dp/kit.css

Étiquette

gravée

En lien

s’allume

Centrée

étage

tight

base

bold

neon

sun

Étiquette Badge Actif Plein Chip

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.

PropTypeDéfautRôle
--slongueurvar(--step-m)Taille d’un gradin d’angle (deux marches). Trois crans : --step-s 4 px, --step-m 6 px, --step-l 9 px.
--edgelongueur2pxÉpaisseur de l’arête de laiton.
--padlongueur1.75remMarge intérieure de la plaque.
--edge-bgfondvar(--brass-grad)Matière de l’arête : --brass-grad (laiton), --neon-edge (tube de laiton allumé), --dp-line (arête sombre).
--facefondvar(--lacquer)Matière de la face : --lacquer (laque en retrait), ou la variante .dp-plate--sun (rayons gravés).
--plaque-bgfondvar(--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

Machine · Courier PrimePromesse 03 / 03 · 06 11 08 77 84

  • --fs-labelLe feu vertÉtiquettes, folios, plaques (13 px, plancher)
  • --fs-smallLe feu vertNotes, légendes
  • --fs-bodyLe feu vertCorps de texte (17 à 19 px)
  • --fs-leadLe feu vertChapeau (20 à 24 px)
  • --fs-h3Le feu vertTitre de carte, en capitales
  • --fs-title-sLe feu vertTitre de bloc (28 à 36 px)
  • --fs-h2Le feu vertTitre de section (36 à 72 px)
  • --fs-h1Le feu vertTitre de page (44 à 112 px)
  • --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).

.ma-carte {
  padding: var(--dp-space-5);
  border: var(--dp-border-gold-soft);
  box-shadow: var(--dp-shadow-1);
  transition: box-shadow var(--dp-dur) var(--dp-ease);
}

jeton

Grille et seuils

--dp-container · --dp-gutter · --dp-bp-*
--dp-container
1160 px, largeur maximale du contenu
--dp-gutter
1,15 à 2 rem, marge latérale fluide
--dp-bp-sm · --dp-bp-md
640 px et 900 px : une colonne, deux colonnes, composition complète
--dp-tap
44 px, hauteur minimale de toute zone cliquable
--dp-section-y
3,5 à 7 rem, respiration verticale entre sections

02

Actions

Un seul appel à l’action principal par écran.

composant

CallButton

src/components/ui/CallButton.astro

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).

PropTypeDéfautRôle
hrefstring—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).
substring—La sous-ligne en machine, sous le libellé : « réponse sous 48 h ouvrées ». Fait partie du nom accessible.
magneticbooleanfalseLe bouton suit légèrement le pointeur fin.
cursorstring—Libellé des équerres du curseur au survol (data-cursor) : « Feu vert », « On y va »…
data-ctastring—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>

composant

Button

src/components/ui/Button.astro

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.

PropTypeDéfautRôle
hrefstring—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.
magneticbooleanfalseLa plaque suit légèrement le pointeur fin.
cursorstring—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.
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.

PropTypeDéfautRôle
name · valuestring—Ceux de la case à cocher (value : « oui » par défaut).
checkedbooleanfalseLevier enclenché à l’arrivée.
idstring—Identifiant de la case.
slot—Le texte, à droite du levier.

composant

ContactForm

src/components/blocks/ContactForm.astro

Les champs marqués d’un astérisque sont obligatoires.

Quelques mots suffisent, même si c’est encore flou. Si vous les avez : l’objectif, l’échéance, un ordre de grandeur de budget.

Précisions (facultatif)
Rendez-vous

Gratuit et sans engagement · réponse sous 48 heures ouvrées · jamais de démarchage.

Vos coordonnées servent uniquement à vous répondre : politique de confidentialité.

Vous préférez un contact direct ? 06 11 08 77 84 ou 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.

composant

ServiceCard

src/components/blocks/ServiceCard.astro

Motion design et vidéo

Faire tenir un message en trente secondes.

  • Films d’entreprise et institutionnels
  • Motion design explicatif
  • Habillages et génériques

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.

PropTypeDéfautRôle
serviceCollectionEntry<'services'>—Entrée de la collection services.
indexnumber0Rang : décale le flottement et l’entrée.
---
const service = (await getEntry('services', 'motion-design-video'))!;
---
<ServiceCard service={service} index={0} />

composant

Sign

src/components/ui/Sign.astro

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.

PropTypeDéfautRôle
whostring—Le public, gravé en petit sur la face « voix ».
voicestring—La phrase du client, en texte (les guillemets français sont posés par <q>).
deststring—L’enseigne : le service, en capitales de laiton ; c’est le lien et son nom accessible.
hrefstring—La page du service.
indexnumber0Le rang (0 à 3) : le décalage du retournement (--i × 120 ms).
flatbooleanfalseLes 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, PME On ne me trouve pas sur Google.
  • Dirigeants On 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.

PropTypeDéfautRôle
whostring—Le public, en machine, au-dessus de la phrase.
voicestring—La phrase du client, en Jost italique (les guillemets français sont posés par <q>). Une citation lue, jamais un lien.
indexnumber0Le rang (0 à 3).
thresholdnumber0La progression du récit (--story-p, 0 à 1) à laquelle la voix parle : elle s’allume, son voyant aussi.
nextnumber1Le seuil de la voix suivante : passé, la voix a été entendue (à demi).

composant

DoorLine

src/components/ui/DoorLine.astro

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.

PropTypeDéfautRôle
deststring—Le service, en affiche : c’est le lien et son nom accessible.
hrefstring—La page du service.
indexnumber0Le rang (0 à 3) : le décalage d’entrée (--i × 90 ms) et l’ordre d’allumage du tube.

composant

CasePoster

src/components/blocks/CasePoster.astro

Identité visuelle · PAO · 2024

L’identité du symposium Cyb’Air Sud

Une qualité alignée sur les attentes, et des délais tenus scrupuleusement.

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.

PropTypeDéfautRôle
entryCollectionEntry<'cases'>—Entrée de la collection cases.
indexnumber0Rang, pour la teinte de l’affiche.
keystring—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 Lecointe Directeur opérationnel France, Locakase Recommandation LinkedIn

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.

PropTypeDéfautRôle
entryTestimonial—Recommandation de data/testimonials.ts.
indexnumber0Rang, 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.

PropTypeDéfautRôle
servicestring—Identifiant du service (ex. identite-visuelle-pao).
sizenumber220Taille en px.
activebooleanfalsePiè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
Croquis à l’aquarelle du marcheur, premier dessin du logo

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.

PropTypeDéfautRôle
variant'media' | 'panel''media'media : image sous l’arche ; panel : contenu seul.
imageImageMetadata—Image importée (variante media).
altstring''Texte alternatif ; vide si décorative.
prioritybooleanfalseChargement immédiat (image au-dessus de la ligne de flottaison).
fluidbooleanfalseS’étire à la largeur du parent.
positionstring'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.

PropTypeDéfautRôle
imageImageMetadata—Image masquée par l’arche (obligatoire).
altstring—Texte alternatif (obligatoire).
positionstring'xMidYMid'Cadrage SVG.

composant

BrassPlate

src/components/ui/BrassPlate.astro

Coordonnées

Fourmies, Nord · du lundi au vendredi

Avant de choisir

Voir ces services à l’œuvre →

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.

PropTypeDéfautRôle
capstring—Le texte gravé de la réglette de tête (facultatif, visible).
asstring'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.

PropTypeDéfautRôle
asstring'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.

PropTypeDéfautRôle
asstring'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.

PropTypeDéfautRô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.
sizestring'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.
classstring—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.

PropTypeDéfautRôle
raysnumber—Nombre de rayons.
origin'bottom' | 'center' | 'top-right''bottom'Point d’où partent les rayons.
tone'gold' | 'neon''gold'Couleur des rayons.
animateboolean—Rotation très lente (140 s), coupée en mouvement réduit.

composant

DiamondDivider · ChevronDivider · Fan

src/components/ornaments/{DiamondDivider,ChevronDivider,Fan}.astro

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.

PropTypeDéfautRôle
DiamondDivider · tone'gold' | 'neon''gold'Couleur du losange.
ChevronDivider · countnumber5Nombre de chevrons.
ChevronDivider · tone'gold' | 'neon''gold'Couleur.
Fan · bladesnumber7Nombre de nervures.
Fan · sizenumber120Largeur 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.

PropTypeDéfautRôle
side'left' | 'right''left'Côté du nez arrondi.
lengthnumber96Largeur 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.

PropTypeDéfautRôle
classstring—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.

PropTypeDéfautRôle
state'green' | 'gold''green'Lentille allumée.
sizenumber56Largeur 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.

PropTypeDéfautRôle
state'rouge' | 'vert' | 'eteint' | 'view''view'État figé, ou view : passe du rouge au vert à l’entrée dans l’écran.
heightstring—Hauteur affichée (valeur CSS).
altstring—Texte alternatif ; vide = décoratif.
eagerboolean—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).

PropTypeDéfautRô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.
heightstring—Hauteur affichée (valeur CSS).
altstring—Texte alternatif ; vide = décoratif.

composant

WalkLogo

src/components/ornaments/WalkLogo.astro
mark · still
mark · loop
Motion Drive
full · 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.

PropTypeDéfautRô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.
titlestring—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.

PropTypeDéfautRôle
playstring—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).
onstring—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).
mirrorbooleanfalseRetourné : present désigne un élément placé à sa gauche à l’écran (le bouton du guichet).
altstring—Description du personnage et du geste.
heightstring'clamp(220px, 30vw, 360px)'Hauteur affichée (CSS).

composant

SignalStudio

src/components/blocks/SignalStudio.astro
Le personnage-signal debout sur le sol laqué, affiche du studio.
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

L’affiche composée, utilisée quand un cas n’a pas de visuel livrable : soleil levant, nom du client, mention.

PropTypeDéfautRôle
clientstring—Nom du client, composé sur l’affiche.
mentionstring—Mention secondaire.
labelstring—Libellé accessible.

07

Structure

Ce qui organise une page : titres, fil d’Ariane, questions, étapes.

composant

SectionHeading

src/components/typo/SectionHeading.astro
axis

Méthode

Un seul interlocuteur

Axis : composition symétrique sur axe.

split

Méthode

Quatre étapes

Split : lecture asymétrique, numéral gravé.

bare

Moment nu

Sans ornement

Bare : aucun ornement, le titre seul.

marquee

Défilé

Vos besoins

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.

PropTypeDéfautRôle
eyebrowstring—Petite ligne au-dessus du titre.
titlestring—Titre de la section (obligatoire).
leadstring—Chapeau sous le titre.
variant'axis' | 'split' | 'bare' | 'marquee'selon alignQuatre compositions : aucune section ne ressemble à sa voisine.
numeralnumber—Numéral romain (axis, split).
level'h1' | 'h2''h2'Niveau de titre.
idstring—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

Drawer

src/components/blocks/Drawer.astro
Combien ç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.

Et 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).

PropTypeDéfautRôle
nstring—L’étiquette du tiroir (« 01 »), sur un carton crème.
qstring—La question, gravée sur la façade (le <summary>).
openbooleanfalseTiroir tiré à l’arrivée.
slot—La réponse, dans la fiche en carton crème.

composant

Faq

src/components/blocks/Faq.astro
Un indépendant, aurez-vous le temps pour moi ?

Réponse sous 48 heures ouvrées, et un seul interlocuteur pendant tout le projet.

Dois-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.

PropTypeDéfautRô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

Quatre règles pour un outil que l’on adopte

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.

  1. 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.

  2. 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.

  3. 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.

  4. 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.

    Moins de surprises à la livraison.

Les quatre règles en détail

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.

PropTypeDéfautRôle
idstring'h-ux'Identifiant du titre.
eyebrow · title · leadstring—Texte d’introduction ; les quatre règles sont fixes.

composant

ProcessSteps

src/components/sections/ProcessSteps.astro
  1. Cadrer

    On écrit ce qu’on fait. Et ce qu’on ne fera pas.

  2. Outiller

    Vos outils d’abord, zéro licence superflue.

  3. Encadrer

    RGPD, droits d’image, relecture humaine.

  4. Former

    Vos équipes repartent autonomes.

  5. 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.

PropTypeDéfautRôle
detailedbooleanfalseAffiche le détail de chaque étape de la méthode.

classe CSS

.dp-timeline

src/styles/dp/components/timeline.css
  1. Cadrage

    Besoin et périmètre validés

  2. Maquette

    Première version approuvée

  3. 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 du logo en hologramme néon, en rotation
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.

PropTypeDéfautRôle
idstring—Identifiant des fichiers /video/<id>.webm|mp4 et /media/<id>.avif.
ratiostring—Largeur / hauteur, ex. "600 / 720".
labelstring—Description accessible.
captionstring—Légende visible.

composant

FilmStrip

src/components/blocks/FilmStrip.astro
  • L’accueil du site Duo Émeraude
    01L’accueil
  • Les deux appartements présentés côte à côte : Le Refuge Malouin et L’Écrin Dinardais
    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.

PropTypeDéfautRôle
frames{ src, alt, label }[]—Les photogrammes : les steps d’une fiche de cas (de 2 à 4 colonnes).
labelstring'Les étapes du projet'Nom accessible de la liste.
idstring—Identifiant du bloc.

composant

Gazette

src/components/blocks/Gazette.astro

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.

PropTypeDéfautRô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 2023 : Le site de Locakase avant et après la refonte
Aujourd’hui : Le site de Locakase avant et après la refonte

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.

PropTypeDéfautRôle
before · afterImageMetadata—Les deux images, de même format.
beforeLabel · afterLabelstring—Étiquettes des deux côtés.
altstring—Description de la comparaison.
idstring'ba'Identifiant, si plusieurs sur la page.

composant

DecoScreen

src/components/blocks/DecoScreen.astro

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.

PropTypeDéfautRô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é.
glowbooleanfalseL’é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é.
labelstring—Texte gravé sur la plaque du pied (moniteur) ou sous la lunette.
altstring—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.

  • Saint-Malo et Dinard
  • Découvrir les appartements
  • Préparer son séjour

Accueil et appartements

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.

PropTypeDéfautRôle
entryCollectionEntry<'cases'>—Fiche de réalisation : screen et steps fournissent les deux captures.
eyebrow · title · leadstring—Texte d’introduction (titre à l’échelle d’une section, pas monumental).
pointsstring[]—Trois puces : ce que l’outil change, en un mot chacune.
labelstring—Plaque gravée sous le moniteur.
captionstring—Légende sous les écrans.
reversebooleanfalseÉcrans à gauche, texte à droite (alterne avec le bloc voisin).
primary · secondary{ label: string; href: string }—Boutons d’action, laiton puis fantôme.
variant'tint' | 'plain''plain'Fond de la section.
idstring'h-app'Identifiant du titre, pour aria-labelledby.

composant

ServiceTower

src/components/blocks/ServiceTower.astro · src/styles/tower.css

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).

PropTypeDéfautRôle
servicesCollectionEntry<'services'>[]—Les services, du haut de la tour vers le bas (I à VIII) : un étage chacun.
labelstring'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.

PropTypeDéfautRô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.
densebooleanfalseLignes plus basses (tableau d’une fiche de cas, dans un écran).
labelstring'Tableau des départs'Nom accessible du tableau (nav).

composant

MediaFrame

src/components/ornaments/MediaFrame.astro
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.

PropTypeDéfautRôle
labelstring—Titre de la barre de fenêtre, aligné à droite.
chromebooleantrueBarre 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.

PropTypeDéfautRôle
labelstring'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.
hookedbooleantrueVrai : lazy-video.ts le révèle et le branche. Faux : visible d’emblée, le parent gère l’état (ClientMarquee).
pressedbooleanfalseÉtat initial : vrai = en lecture (icône pause).

composant

StationMark

src/components/ornaments/StationMark.astro

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.

PropTypeDéfautRôle
labelstring—Numéral romain (roman(i)).
size'sm' | 'md' | 'lg''md'30 px, 2,9 rem ou 4 rem. Réglable aussi par --sz.
litbooleanfalseLaiton allumé : l’étape est franchie ou aboutie.
lensbooleanfalseUne lentille de signal à la place du numéral (Line).

composant

StationSign

src/components/ornaments/StationSign.astro

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.

PropTypeDéfautRôle
nstring—Le numéral gravé sur la plaque (roman(i)).
size'md' | 'lg''md'Plaque de 3 rem ou de 3,7 rem.
litbooleanfalseLampe 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

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.

PropTypeDéfautRôle
floornumber—L’étage visé (1 à floors) : l’aiguille le rejoint par crans à l’arrivée, le numéral et la lampe s’allument.
floorsnumber3Le nombre d’étages.

composant

Flap

src/components/typo/Flap.astro

Destination : Fourmies

Voie libre

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.

PropTypeDéfautRôle
textstring—Le texte, tel qu’il doit être lu et indexé : il reste intact dans le DOM.
tilebooleanfalseVraies 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.
delaynumber0Retard en ms avant la première lettre (on="load").
offsetnumber0Dé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

1928 72 h

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é.

PropTypeDéfautRôle
valuenumber | 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

80 1928

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).

PropTypeDéfautRôle
valuenumber | 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.

Premier échange sans engagementFourmies · Depuis 2018

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.

PropTypeDéfautRôle
titlestring—Titre de la bande.
textstring—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

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 Fourmies Carte 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 min Nord · 59 Aisne · 02 Fourmies Avesnes-sur-Helpe La Capelle Trélon Hirson Le Nouvion-en-Thiérache Vervins Aulnoye-Aymeries Maubeuge

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
SectionRôleÀ voir sur
HeroOuverture : titre, promesse, appel à l’action, visuel inclinéAccueil
ManifestoAxiomes en pleine page, un par écran, la page se fige le temps de les lire (prop paper : scène crème, panneaux nus)Accueil
TrackLes services en rail horizontal piloté par le défilement verticalAccueil · Services
BillboardUn grand chiffre et une vidéo panoramique pour une réalisationRéalisations
LineLa ligne éditoriale en colonne épinglée et repères chiffrésÀ propos
ObjectionsLes questions franches avant de décrocher le téléphone : un classeur de tiroirs (Drawer) ; prop paper : scène crème, tamponAccueil
QuoteStageLe 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égrammesAccueil, fiches de cas
GreenLightLa finale : le feu passe du rouge au vert, puis l’appel à l’actionBas de chaque page
PageHeroOuverture des pages intérieures : fil d’Ariane, titre, promesseServices
ZoneSign3DPanneau à 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.Zone d’intervention

10

Papier et panneaux

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.

PropTypeDéfautRôle
on'paper' | 'dark''paper'paper : sur feuille crème, cadre en encre. dark : sur page noire, cadre, hachures et damier en laiton.
hatchbooleantrueHachures croisées dans les deux sens, qui s’effacent vers le bas.
stars0 | 1 | 2 | 30Nombre d’étoiles à quatre branches, en tête du panneau.
foot'checker' | 'stairs' | 'none''checker'Deux rangées de damier, des gradins, ou rien.
labelstring''Description lue par les lecteurs d’écran ; vide = décoratif (aria-hidden).
classstring—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.

PropTypeDéfautRôle
markstring—La marque, en lettrage d’affiche (Bodoni Moda).
kickerstring—Phrase courte en minuscules espacées, sous la marque.
title · and · title2stringand = 'et'Titre en capitales géométriques très espacées ; « et » (par défaut) en minuscules, puis la seconde moitié.
linesstring[]—Lignes de texte en minuscules espacées.
figure{ value; suffix?; note? }—Chiffre d’affiche en Bodoni Moda, avec son unité et sa légende.
sellerstring—Signature, en capitales larges et fines.
addressbooleanfalseVille 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 />

classe CSS

Motifs

src/styles/paper.css
.dp-checker damier
.dp-hatch hachures
.dp-chevrons séparateur
.dp-stars étoiles
.dp-pinstripe filets
.dp-fluted cannelures
.dp-framed double filet
.dp-paper papier

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.

<div class="dp-checker" style="--c:9px; --ck-a:#b68933; --ck-b:var(--panel)"></div>
<div class="dp-hatch" style="--hc:rgba(244,238,219,.4)">…</div>
<i class="dp-chevrons"></i>   <span class="dp-stars"></span>
<section class="dp-paper">…</section>

section

PaperScene

src/components/sections/PaperScene.astro

Spécimen

Écrit au devis, pas à l’oral

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.

Parlons de votre projet

Plaque noire à gradins, jetons sombres

Motion Drive · Fourmies

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

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.

PropTypeDéfautRôle
id · labelledby · labelstring—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.
narrowbooleanfalsePanneaux latéraux plus étroits (à partir de 1100 px) pour un contenu en deux colonnes.
pinbooleanfalseScène épinglée (Manifeste) : panneaux collants à la hauteur de l’écran, sans marge verticale autour de la colonne.
foliostring—Le folio en machine, en tête de page (« Épreuve 1 / 2 · … ») ; vide = pas de folio.
colophonstring—La ligne du pied, après la gamme de contrôle (défaut : « Motion Drive · Fourmies · 2026 »).
slotsdé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.

<section class="dp-section dp-section--hatch">…</section>
<section class="dp-section dp-section--curtain">…</section>

11

Règles d’usage

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.

Sommaire

    MD / CHEF D’ORCHESTRE Cinematic Focus · planning déco punk
    Série0
    ×1 Mise en route

    Accès réservé aux curieux

    Minuit
    Express.

    Votre planning devient une partition.
    Cadrage, production, livraison : enchaînez les tâches sur le temps.

    La vieille combinaison ouvre de nouvelles portes.

    ↑ ↑ ↓ ↓ ← → ← → B A

    En attente du signal · 0 / 10

    Appeler Écrire