← La bibliothèque

SprigHouse

Site d’agence de marketing pour associations

Template complet Réservé aux membres Ouvrir la démo
Aperçu du template SprigHouse : section d’accueil sur fond crème, titre « Build the house your mission grows in » dont le mot mission est surligné en vert citron, nuages dessinés et maison illustrée sur une colline verte.

Ce que c’est

Le site d’une agence qui construit des sites, des systèmes de collecte de dons et des CRM pour des associations : accueil illustré, chiffre clé, présentation, carrousel de dix-neuf avis, publics servis, bandeau de partenaires certifiés, études de cas, méthode en quatre étapes, formulaire de contact, appel à l’action, pied de page. Une seule page, un seul fichier HTML.

Le dessin, la structure, les textes et les images reprennent sprighouse.co. Tout le code a été réécrit. L’original est une application Next.js : React, Tailwind compilé, un bundle d’animation, un routeur client et une couche d’images optimisées côté serveur. Rien de tout ça n’est lisible, rien ne s’ouvre sans serveur, et rien ne survit à la politique de sécurité stricte de ce site.

Ce qui reste tient en trois fichiers : un HTML, une feuille de style, un script. C’est le point important : ce template n’est pas là pour être admiré, il est là pour être lu, cassé et remonté.

Ce que tu changes en premier

Les couleurs — six lignes

Tout en haut de assets/css/style.css :

--bg:      #f7f0e6;  /* fond de page, papier crème */
--surface: #f3ebdd;  /* sections qui avancent d’un cran */
--text:    #1d2b1f;  /* encre : texte, bordures, panneaux sombres */
--muted:   #5c6b5e;  /* texte secondaire sur le crème */
--primary: #bfea4b;  /* vert citron : boutons, surlignages, points */
--accent:  #b8331b;  /* astérisques des champs requis, erreurs */

Un piège à connaître avant d’y toucher : le vert citron est une couleur de fond, pas une couleur de texte. Sur le crème il donne 1,2:1 — illisible. Le mot « mission » du titre d’accueil ne tient que grâce à son contour d’encre de 1,5 px. Sur les panneaux sombres, ne compose jamais un rgba() à la main : prends --on-ink, --on-ink-soft ou --on-ink-faint, les trois seuls niveaux qui passent le contraste.

Le nom

Cherche « SprigHouse » dans index.html. Aucune classe CSS ne contient la marque : un rechercher-remplacer ne peut rien casser.

Les tailles

L’échelle typographique est déclarée une fois, en clamp() fluides mesurés sur l’original. Un titre n’a donc jamais sa propre media query : tu changes --fs-h2 et toute la page suit, à toutes les largeurs. La partie 9 de la feuille ne contient que des changements de mise en page.

Les quatorze effets, et comment ils sont faits

Tous relevés dans le code de l’original : les réglages du moteur d’animation sont dans les bundles, en clair — durées, courbes, décalages, seuils. Extraits par script, pas devinés à l’œil.

EffetRéglages d’origineComment
Entrée en cascade de l’accueildécalage 0,1 s, y 24→0, 0,5 squatre animation-delay, CSS pur — rien ne peut rester bloqué à opacity: 0
Cinq nuages qui flottent18 à 24 s, délais négatifs, quatre étapesun @keyframes, une variable d’amplitude par nuage
Oiseau qui traverse le ciel−42 % → 142 % en 30 s, fondu aux 7 %trois @keyframes sur deux éléments imbriqués
Bandeau des partenairestranslateX 0 → −50 % en 55 sla piste contient deux fois les huit logos ; pause au survol et au focus
Bulle d’aide sur un logoopacité 200 ms:hover et :focus-within. Le logo est un <button> : un appui au doigt ouvre la bulle, sans JavaScript
Apparition au scroll3 cartes, 0,42 s, décalage 50 msIntersectionObserver, déclenchement à 15 % du bas de l’écran
Zoom de l’aperçuscale(1.04), 700 msà l’identique
Carrousel de 19 avisdéfilement auto 7,2 s, fondu 0,35 spiste scroll-snap : elle glisse, se balaye et s’atteint au clavier sans JavaScript
Soulignement de navigationclip-path, 500 msune barre de 3 px qui se dévoile depuis la gauche, nette à toute largeur
Panneau déroulantouverture immédiate, fermeture à 200 msCSS seul, deux délais ; :has() teinte la barre en vert citron
Menu plein écranclip-path 0,42 s, cascade des entréesun <details> — il s’ouvre sans JavaScript
Boutons à ombre duresurvol +2 px, appui +3 px, 120 msà l’identique
Cartes qui se soulèvent−2 px, ombre 6 → 8 px, 180 msà l’identique
Flèche « Read → »translateX(4px), 200 msà l’identique

Ce qu’il faut savoir

  • Aucune requête externe. Dix requêtes au premier écran, 280 Ko, toutes locales. Les six vignettes du menu déroulant ne sont téléchargées qu’à son ouverture — 74 Ko de moins au chargement.
  • L’apparition au scroll ne peut pas masquer le contenu. L’état caché n’existe que si le JavaScript a tourné. Vérifié en retirant les balises <script> : 19 titres sur 19 restent visibles, zéro bloc caché, et les dix-neuf avis se font défiler à la main.
  • Zéro style et zéro script en ligne. Le décalage des trois cartes d’études de cas est écrit en :nth-child() dans la feuille, pas en style="--reveal-delay: 50ms" : un attribut style serait bloqué par la politique de sécurité du site.
  • Le déclencheur est à 15 % du bas de l’écran, mesuré sur l’écran et non sur l’élément — l’original déclenchait au premier pixel visible, si bien qu’une carte avait fini d’apparaître avant qu’on la voie.
  • Deux couleurs ont été assombries pour passer le contraste AA : le texte secondaire (4,0 → 5,0:1) et l’astérisque des champs requis (4,4 → 5,0:1). L’écart est invisible à l’œil.
  • Accessibilité : lien d’évitement, états des menus portés nativement par les <summary>, position du carrousel annoncée, focus visible unique, décorations masquées aux lecteurs d’écran, animations coupées et délais remis à zéro si le système le demande.

Ce qui n’est pas parfait

Autant le dire ici plutôt que te le laisser découvrir.

  • La page fait 0,2 % de haut de plus que la référence à 1440 px, 1,7 % à 767 px, 1,8 % à 479 px et 3,3 % à 991 px. À 991 px, deux titres se répartissent sur une ligne de plus que dans l’original ; à 479 px, la carte du chiffre clé est centrée sur trois lignes au lieu de deux. Rien ne se chevauche à aucune des six largeurs mesurées.
  • Le carrousel d’avis glisse au lieu de faire un fondu. L’original enchaînait les avis en fondu, piloté par React : sans JavaScript, un seul restait à l’écran. Ici la piste est un scroll-snap natif, les dix-neuf avis sont atteignables dans tous les cas.
  • Une illustration a été remplacée. Le miroir du site ne contenait le fermier du bloc de contact qu’en JPEG 256 px sans couche alpha — un carré noir sur le crème. Une autre illustration de la même série, elle disponible en WebP transparent, prend sa place.
  • Le site d’origine compte une trentaine de pages ; celui-ci en a une. Tous les liens ont été ramenés à des ancres internes plutôt que de laisser des 404, y compris les deux panneaux déroulants du menu.
  • Le formulaire de contact n’a pas de serveur. Il valide nativement puis affiche un message renvoyant vers l’adresse e-mail. Branche action sur ton gestionnaire et supprime le bloc 5 de main.js.
  • Les huit logos de partenaires sont des marques déposées, et deux d’entre eux sont des badges de certification. Les trois aperçus d’études de cas sont des captures de sites de clients réels. Remplace-les. Les polices, elles, sont sous licence OFL et redistribuables — vérifié dans leur table name, pas supposé.

Prends-le, ouvre-le, casse-le.

SprigHouse est gratuit. La bibliothèque complète — les autres templates et les composants — est incluse dans l’abonnement, avec la formation.

Accès immédiat · Sans engagement · Annulation en 1 clic