← La bibliothèque

Brightfold

Portfolio d’une page pour un studio de design

Template complet Réservé aux membres Ouvrir la démo Débloquer la bibliothèque
Aperçu du template Brightfold : une page d’accueil de portfolio en noir et blanc, un grand titre au-dessus d’une photographie d’intérieur ensoleillé, et une rangée de logos clients en dessous.

Ce que c’est

Un site complet pour un studio de design : travaux sélectionnés, savoir-faire, un tarif unique, résultats clients, articles, FAQ et appel final. Une page, un fichier HTML, écrit à la main — aucune dépendance, aucune étape de build, aucun CDN.

Ce qui fait ce template, c’est ce qu’il refuse de faire. L’original sert une vidéo de fond en 1920 × 1080 dans deux formats — 12 Mo de MP4 et 36 Mo de WebM, soit 48 Mo, pour un bloc qui mesure 1220 × 612. Ici c’est une photographie fixe animée d’une dérive CSS de 34 secondes. Le dossier entier pèse désormais une fraction de ce seul fichier. Tous les autres choix de la page suivent la même règle : garder l’intention, laisser le coût.

Le dessin vient d’un gabarit Webflow pour un studio de design dont il ne reste aucune image : les photographies ont été régénérées pour ce template. Chaque ligne de code a été réécrite — jQuery, GSAP et son greffon SplitText, le moteur d’animation propriétaire IX2, le CSS minifié, et le style="opacity:0" posé en ligne sur chaque bloc animé, que bloque une politique de sécurité stricte, laissant une page blanche.

C’est tout l’intérêt : 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 — il n’y a pas d’accent, et c’est voulu

L’original n’a aucune couleur de marque : noir, blanc et cinq gris. Toute la couleur de la page vient des photographies. C’est un parti pris, pas un oubli, et il est conservé — y ajouter une teinte de marque casserait le dessin en croyant l’habiller.

--ink:        #0A0A0A;  /* titres — 19,3:1 sur blanc */
--body:       #3D3D3D;  /* texte courant — 10,4:1 */
--muted:      #6E6E6E;  /* texte secondaire — 5,3:1 */
--faint:      #9B9B9B;  /* 2,7:1 — libellés seulement, jamais seul */
--surface:    #F2F2F2;  /* cartes */

Le décalage se fait donc là où la couleur est : les photographies de l’original tirent vers le bleu froid — ciel, ombres cyan — et celles de Brightfold vers l’ambre et le sable, à luminosité et contraste équivalents. #9B9B9B passe sous le seuil de 4,5:1 : il ne sert qu’à des libellés de 14 px accompagnés d’un autre repère, jamais à porter une information seul.

Le nom

Chercher « Brightfold » dans index.html : l’en-tête, l’accueil, le bloc à-propos, les avis, le pied de page, le <title> et la description. Aucun nom de classe ne contient la marque — un rechercher-remplacer ne peut rien casser. Le logo est un SVG de six lignes dans l’en-tête.

Les tailles

L’échelle typographique est déclarée une fois, puis redéclarée à chaque point de rupture et nulle part ailleurs : changer --h1-size suffit, toute la page suit. Aucun titre ne porte sa propre requête de média.

Les animations, et comment elles sont faites

Les réglages de l’original n’ont pas été devinés, ils ont été lus : un export Webflow garde durées, courbes, délais et déclencheurs dans son moteur d’animation, à ix2.store.getState().ixData. 219 événements y sont déclarés, qui se dédoublonnent en 51 effets réellement distincts — l’éditeur crée un événement par élément de collection.

EffetRéglages d’origineComment
Apparition au défilement (121 blocs)opacité 0 → 1 et translation Y 100 px → 0, 1000 ms, courbe outQuart, délais de 300 à 700 ms, déclenchement au premier pixel visiblemême durée, même courbe (cubic-bezier(.25,1,.5,1)), délais ramenés à 0/90/180/270 ms, déclenchement à 15 % du bas de l’écran
Parallaxe des visuels de projet (6 cartes)une image de 635 px dans un cadre de 541, qui glisse dans ces 94 px, lissage 96repris à l’identique — le script écrit la position au fil du défilement
En-tête escamotabletranslation Y 0 ↔ −100 %, 500 ms, au sens du défilementidentique, avec un seuil à 200 px et une bande morte de 6 px
Rubans de logos (3)translation X 0 → −100 % en 20 s, en boucleliste doublée et translation de −50 % en 40 s : même vitesse, et la boucle n’a pas de couture
Accordéons (savoir-faire, FAQ)onglets Webflow, taille et rotation en 500 ms ease<details name> natif, hauteur animée en 500 ms
Constellation (appel final)9 vignettes passant de l’échelle 1 à 0 en 500 ms inOutQuint, en boucleune animation CSS de 14 s, les 9 vignettes décalées de 1,5 s
Menu plein écrantranslation Y −100 % → 0 en 700 ms outExpoidentique (cubic-bezier(.16,1,.3,1))
Survol d’une carteéchelle 1,135 en 400 mséchelle 1,04 en 600 ms : à 1,135 sur une image de 600 px, le recadrage se voit
Texte qui se remplit (valeurs)GSAP SplitText, lettre par lettre, 310 à 760 ms, power1.outmot à mot, piloté par la position de défilement plutôt que par une durée

Deux réglages de l’original sont corrigés d’office. Ses apparitions se déclenchent au premier pixel visible puis attendent jusqu’à 700 ms avant une animation d’une seconde : cela fait 1,7 s entre le moment où un bloc entre dans l’écran et celui où il est lisible. Et son seuil est exprimé en pourcentage de l’élément — ce qui laisse invisible à jamais tout bloc plus haut que l’écran. Ici la marge est mesurée sur l’écran, et un filet révèle ce qui reste quand on atteint le bas de la page.

Ce qu’il faut savoir

Aucune dépendance, aucun build, aucun CDN, aucune requête externe. Mesuré : 35 requêtes au chargement, toutes locales.

Sans JavaScript, rien n’est caché. Tous les états masqués sont écrits sous html.js, et c’est enhance.js qui pose cette classe. Scripts retirés : 27 titres visibles, 0 bloc transparent, 0 bloc déplacé, les 15 accordéons s’ouvrent et les 3 rubans montrent leurs logos.

Le natif d’abord. <details name> pour les deux accordéons — ils s’ouvrent sans script, répondent au clavier et se laissent trouver par la recherche du navigateur.

Une seule police, pas deux. L’original charge « Inter Display », qui est le même dessin à une taille optique différente ; ici c’est l’axe variable opsz qui le donne, depuis un seul fichier.

Sous une politique de sécurité stricte (script-src 'self'; style-src 'self') : zéro violation, comptée en servant le dossier avec l’en-tête réel du site. Aucun style en ligne, aucun script en ligne, aucun onclick. Les apparitions passent par IntersectionObserver, jamais par animation-timeline — celle-ci n’existe que dans Chrome.

Accessibilité : lien d’évitement, aria-expanded sur le menu, focus gardé dans le panneau ouvert, Échap qui ferme, décorations en aria-hidden, un seul anneau de focus, et prefers-reduced-motion qui applique les états finaux — délais compris.

Ce qui n’est pas parfait

La vidéo d’accueil est devenue une image. 48 Mo pour un seul bloc, mille fois le poids de tout le reste du dossier, et le seul média qui posait encore une question de licence. Elle est remplacée par une image fixe animée d’une dérive lente de 34 s. Côte à côte avec l’original, l’écart se voit.

Le savoir-faire reste replié sur mobile. L’original déplie ses dix entrées sous 767 px : la section y fait 4 910 px de haut, et 6 411 px sous 480 px. Ici l’accordéon reste fermé et la section fait 1 348 px — un écart mesuré de −73 %, et assumé. Dix panneaux dépliés, c’est cinq écrans de défilement pour une liste de services.

Les avis passent en deux colonnes sous 767 px là où l’original les empile : −31 % de hauteur. Trois cartes au format portrait sur toute la largeur d’un téléphone, c’est 2 500 px pour trois chiffres.

Les parallaxes au pointeur et au défilement ne sont pas reprises. L’original en a quatre, avec un lissage de 95 à 96 — c’est-à-dire un déplacement qui poursuit le curseur avec beaucoup de retard. Sur une page qui n’a pas d’autre mouvement continu, elles se remarquent surtout à la lecture du code.

Écart de hauteur totale à 1440 px : +0,2 % — 11 413 px contre 11 391. Section par section : travaux +0 %, à-propos 0 %, avis +0 %, FAQ +1 %, pied de page 0 %, accueil +2 %, tarif +4 %, « founder » +5 %. Les deux seuls écarts au-delà de 5 % sont les deux choix décrits plus haut. Sur un téléphone l’écart s’inverse : 14 421 px à 479 px de large contre 20 176 pour l’original, soit −28 %, presque entièrement dû au savoir-faire replié.

Les fautes de l’original sont corrigées — « Project Inquary », « Parnarship », « Demund of Service », « Password Proteced », « 100+ Worldwide Client », et deux titres dont la syntaxe ne tenait pas. Une réponse de la FAQ qui répétait mot pour mot celle de la première question a été réécrite.

Les liens vers d’autres pages sont devenus des ancres. L’original renvoie vers /blog, /contact, /work, des mentions légales et un journal des modifications. Ce template est d’une seule page : tout pointe vers une section qui existe, plutôt que vers une 404.

Il t’attend dans la bibliothèque.

Brightfold est compris dans l’abonnement, avec le reste de la bibliothèque et la formation complète.

Accès immédiat · Sans engagement · Résiliable en un clic