Design System felec v2
Tous les composants du design system felec v2, inspiré de NerdWallet. Chaque composant montre le rendu, sa classe CSS, et le code HTML/Blade à copier. Polices : Fraunces (display) + Inter (body) + JetBrains Mono (mono).
Couleurs
Palette de marque felec v2. Bleu primaire (#017BB2), orange accent (#E6A838). Utilisez toujours les tokens CSS --fe-*, jamais de hex hardcodées.
Bleu (primaire)
Orange (accent)
Sémantiques
Neutrals (ink)
Typographie .fe-prose
Hiérarchie de titres et styles de texte dans .fe-prose. Fraunces pour les titres (display), Inter pour le corps. Règle : un seul H1 par page, au moins 2 sous-titres sous chaque parent.
Titre H2 — Section principale
Titre H3 — Sous-section
Paragraphe courant avec du texte en gras et un lien vers une autre page. Le corps de l'article utilise Inter en 17px avec une hauteur de ligne de 1.7 pour un confort de lecture maximal.
- Les puces utilisent la couleur orange via
li::marker; - Les listes sont un format essentiel pour la lisibilité.
Code HTML
<div class="fe-prose">
<h2>Titre H2</h2>
<h3>Titre H3</h3>
<p>Paragraphe avec <strong>gras</strong> et <a href="#">lien</a>.</p>
<ul>
<li>Item avec puce orange ;</li>
<li>Deuxième item.</li>
</ul>
</div>
/* Fonts :
--fe-font-display: Fraunces (titres, quotes, stats)
--fe-font-body: Inter (corps, UI)
--fe-font-mono: JetBrains Mono (chiffres, code, labels) */Ombres
Trois niveaux d'ombre pour la profondeur. Toutes basées sur un bleu foncé (rgba(15,59,95,...)) pour rester cohérent avec la palette.
--fe-shadow-xs
--fe-shadow-sm
--fe-shadow-md
Conseil / Astuce .fe-tip
Bloc conseil bleu (défaut) ou astuce verte (variante .astuce). Utilisable via le composant Blade <x-fe-tip> avec les props label, title, variant.
Variante bleue (défaut)
Le changement de fournisseur d'électricité est gratuit, sans coupure et sans engagement. Enedis assure la continuité de l'alimentation quelle que soit l'offre choisie.
Variante verte (astuce)
Si votre compteur est en option heures creuses, privilégiez les offres avec un écart significatif entre HP et HC : vous pouvez économiser jusqu'à 200 €/an.
Code Blade
<!-- Variante bleue (défaut) -->
<x-fe-tip label="Bon à savoir" title="Titre optionnel">
<p>Contenu du conseil.</p>
</x-fe-tip>
<!-- Variante verte (astuce) -->
<x-fe-tip label="Notre petite astuce" title="Titre" variant="astuce">
<p>Contenu de l'astuce.</p>
</x-fe-tip>
<!-- HTML natif -->
<div class="fe-tip"> <!-- ou class="fe-tip astuce" pour le vert -->
<div class="fe-tip-ico"><svg>...</svg></div>
<div>
<div class="fe-tip-label">Bon à savoir</div>
<div class="fe-tip-title">Titre optionnel</div>
<div class="fe-tip-body"><p>Contenu.</p></div>
</div>
</div>Avertissement .fe-warn
Bloc d'avertissement orange (défaut) ou rouge vif (variante .bold). Composant Blade : <x-fe-warn> avec les props label, title, variant.
Variante orange (défaut)
Le prix du kWh des offres indexées évolue chaque mois en suivant le tarif réglementé d'EDF. Votre facture peut augmenter ou baisser sans préavis.
Variante rouge (bold)
Des appels téléphoniques non sollicités proposant des offres d'électricité « immédiates » constituent un démarchage abusif. Raccrochez et signalez sur Bloctel.
Code Blade
<!-- Orange (défaut) -->
<x-fe-warn label="Attention" title="Titre optionnel">
<p>Contenu de l'avertissement.</p>
</x-fe-warn>
<!-- Rouge (bold) -->
<x-fe-warn label="Attention" title="Titre" variant="bold">
<p>Contenu critique.</p>
</x-fe-warn>Bon à savoir .fe-insight
Bloc neutre gris clair avec pastille orange. Pour les informations complémentaires qui ne nécessitent pas l'attention d'un warning. Composant Blade : <x-fe-insight>.
Le compteur Linky est un compteur communicant installé par Enedis. Il ne modifie ni le prix du kWh, ni l'abonnement. Son rôle est de relever automatiquement votre consommation et de permettre des interventions à distance (changement de puissance, mise en service).
Code Blade
<x-fe-insight label="Bon à savoir" title="Titre optionnel">
<p>Contenu factuel.</p>
</x-fe-insight>
<!-- HTML natif -->
<div class="fe-insight">
<div class="fe-insight-label"><span class="dot"></span> Bon à savoir</div>
<div class="fe-insight-title">Titre optionnel</div>
<div class="fe-insight-body"><p>Contenu.</p></div>
</div>Avis d'expert .fe-expert
Verdict éditorial d'un rédacteur Selectra. Avatar + badge vérifié + citation. Le composant Blade <x-fe-expert> charge automatiquement la config auteur et le nombre d'articles.
Code Blade
<x-fe-expert author="misitia-ravaloson">
Texte du verdict éditorial.
</x-fe-expert>
<!-- Props disponibles :
author (slug) — charge avatar, nom, rôle, nb articles
name — override du nom
role — override du rôle
verified — bool, badge "Expert certifié" -->
<!-- HTML natif -->
<div class="fe-expert">
<div class="fe-expert-avatar">MR</div>
<div>
<div class="fe-expert-label">L'avis de l'expert</div>
<div class="fe-expert-name">Nom <span class="fe-expert-verified">Expert certifié</span></div>
<div class="fe-expert-role">Rôle · X articles</div>
<blockquote class="fe-expert-quote">Texte du verdict.</blockquote>
</div>
</div>Chiffres clés .fe-stat
Grille de 2 à 4 métriques phares. Chiffres en Fraunces bleu 42px, unité en Inter gris. Fond gradient bleu clair vers blanc.
Code HTML
<div class="fe-stat">
<div class="fe-stat-grid">
<div>
<div class="fe-stat-num">0,1740<span class="unit">€/kWh</span></div>
<div class="fe-stat-label">Libellé du chiffre</div>
<div class="fe-stat-source">Source</div>
</div>
</div>
</div>
<!-- Responsive : < 640px passe en 1 colonne -->Pour / Contre .fe-proscons
Comparaison avantages/inconvénients d'un fournisseur ou d'une offre. Deux colonnes vert/rouge avec pastilles + coches/croix. Responsive 1 colonne sous 640px.
- Prix du kWh compétitif à 0,1632 €
- 100 % électricité verte certifiée
- Sans engagement, souscription en ligne
- Service client parfois difficile à joindre
- Pas de tarif fixe sur plus d'1 an
- Application mobile perfectible
Code HTML
<div class="fe-proscons">
<div class="fe-proscons-grid">
<div class="fe-proscons-col pros">
<div class="fe-proscons-header">
<span class="fe-proscons-badge pros"><svg>...</svg></span>
Avantages
</div>
<ul>
<li><span class="fe-proscons-dot pros"><svg>...</svg></span> Item</li>
</ul>
</div>
<div class="fe-proscons-col cons">
<div class="fe-proscons-header">
<span class="fe-proscons-badge cons"><svg>...</svg></span>
Inconvénients
</div>
<ul>
<li><span class="fe-proscons-dot cons"><svg>...</svg></span> Item</li>
</ul>
</div>
</div>
</div>Etapes numérotées .fe-ordered
Liste numérotée avec gros chiffres Fraunces orange. Chaque item est une carte blanche avec hover sur la bordure orange.
Code HTML
<div class="fe-ordered">
<div class="fe-ordered-item">
<div class="fe-ordered-num">01</div>
<div>
<div class="fe-ordered-title">Titre de l'étape</div>
<div class="fe-ordered-text">Description.</div>
</div>
</div>
</div>Canaux de contact .fe-channels
Grille de cartes de contact (téléphone, email, espace client, courrier). Hover avec élévation douce. Grille 2 colonnes via .fe-channels-cols-2.
Code HTML
<div class="fe-channels fe-channels-cols-2">
<div class="fe-channel">
<div class="fe-channel-head">
<div class="fe-channel-ico"><svg>...</svg></div>
<div class="fe-channel-label">Par téléphone</div>
</div>
<div class="fe-channel-body">Contenu.</div>
</div>
</div>Tableau de données .fe-table
Tableau éditorial avec bande bleue en tête, zebra striping, chiffres en tabular-nums. Classe .num sur les cellules numériques pour alignement à droite et police mono.
| Puissance | Abonnement/an | kWh Base | kWh HP | kWh HC |
|---|---|---|---|---|
| 3 kVA | 115,56 € | 0,1740 | — | — |
| 6 kVA | 151,20 € | 0,1740 | 0,1841 | 0,1470 |
| 9 kVA | 189,48 € | 0,1740 | 0,1841 | 0,1470 |
| 12 kVA | 228,48 € | 0,1740 | 0,1841 | 0,1470 |
Code HTML
<div class="fe-table-wrap">
<table class="fe-table">
<thead>
<tr>
<th>Libellé</th>
<th class="num">Valeur</th>
</tr>
</thead>
<tbody>
<tr>
<td>Libellé</td>
<td class="num">0,1740</td>
</tr>
</tbody>
<caption>Source et date.</caption>
</table>
</div>
<!-- .num aligne à droite + JetBrains Mono tabular-nums
<caption> en bas, 12px gris -->Grille tarifaire interactive .pg-grid
Grille de prix interactive avec 3 vues : Heatmap (échelle de couleurs), Ma facture (composition détaillée) et Coût annuel (bar chart comparatif). Onglets automatiques selon les options de l'offre (Base, HP·HC, Tempo, etc.). Sélection de puissance cliquable. Accepte les presentPrices bruts de l'API. Tout en Alpine.js, zéro dépendance externe.
Détail au prix unitaire
Facture annuelle TTC selon la puissance souscrite
Pour la consommation moyenne d'un foyer français à chaque puissance.
Code Blade (Alpine.js)
{{-- Le composant fetch les prix depuis l'API via l'offer ID --}}
{{-- CSS : classes .pg-* dans felec-v2.css --}}
{{-- JS : pricingGrid() enregistré dans app.js --}}
{{-- Usage 1 : avec offer ID (fetch automatique depuis l'API) --}}
{{-- copier le HTML ci-dessus (HEAD, HEATMAP, FACTURE, ANNUEL, FOOTER) --}}
{{-- Usage 2 : avec données inline (si presentPrices déjà disponible côté serveur) --}}
{{-- même HTML --}}
{{-- Propriétés Alpine exposées : --}}
{{-- consoLegend — légende de répartition conso (Base/HPHC/Tempo) --}}
{{-- sourceLabel — "Prix TTC en vigueur en {mois année}." --}}
{{-- selectedRow.cols[c.key] — prix unitaire par colonne --}}
Exemple gaz (Prix Repère Gaz)
Pour le gaz, le composant détecte automatiquement le format (tranches de conso au lieu de kVA). Les 3 mêmes vues fonctionnent : Heatmap, Ma facture, Coût annuel. Le header affiche "Classe" au lieu de "Puissance".
Accordéon mid-article x-accordion
Composant partagé <x-accordion> pour déplier du contenu éditorial en cours d'article (critères de comparaison, détails techniques, conditions). Chaque item a son propre état — plusieurs peuvent être ouverts simultanément. Chevron text-primary, séparateurs divide-y.
Le prix du kWh varie selon le fournisseur, la puissance souscrite et l'option tarifaire (Base ou Heures Creuses). L'abonnement, lui, est quasi identique chez tous les fournisseurs car fixé par les tarifs d'acheminement d'Enedis.
- En option Base 6 kVA, le kWh au TRV est à 0,1740 € ;
- Les offres de marché proposent jusqu'à 20 % de réduction sur le prix du kWh.
Une offre verte garantit que le fournisseur injecte sur le réseau une quantité d'électricité d'origine renouvelable équivalente à votre consommation, via des Garanties d'Origine (GO). Certaines offres financent directement des producteurs français (éolien, solaire, hydraulique).
Deux options principales existent au tarif réglementé :
- Option Base : un prix unique du kWh, quelle que soit l'heure ;
- Option Heures Creuses : un prix réduit 8h par jour (généralement la nuit), compensé par un prix plus élevé en heures pleines.
L'option HC est rentable si vous pouvez décaler au moins 26 % de votre consommation en heures creuses.
Un prix fixe est garanti pendant 1 à 3 ans : votre kWh ne bouge pas, même si le TRV augmente. Un prix indexé suit l'évolution du tarif réglementé avec une réduction garantie (ex : -15 % vs TRV). Le prix indexé est souvent moins cher au départ mais peut monter.
Code Blade
@php $items = [
[
'title' => 'Titre de la section',
'content' => 'Contenu HTML riche avec gras, listes, liens.
',
],
[
'title' => 'Autre section',
'content' => 'Autre contenu.
',
],
]; @endphp
{{-- Mode multi-items (le plus courant) --}}
{{-- Mode single-item (slot) --}}
Contenu directement dans le slot.
{{-- Avec schéma JSON-LD FAQPage (rare en mid-article) --}}
FAQ fin d'article .fe-faq-item
Section FAQ placée en fin d'article. Reprend le pattern de la home : un seul x-data partagé avec open: null — un seul item ouvert à la fois. Le schéma JSON-LD FAQPage est injecté en <head> depuis le même tableau PHP. H2 en text-3xl lg:text-4xl + mb-8.
Questions fréquentes
Le changement est gratuit, sans coupure et sans engagement. Souscrivez chez le nouveau fournisseur, il résilie automatiquement votre ancien contrat. Délai moyen : 21 jours.
Le tarif réglementé (TRV) est fixé par les pouvoirs publics et vendu exclusivement par EDF. Les offres de marché sont proposées par tous les fournisseurs alternatifs, souvent à un prix 10 à 15 % inférieur.
Linky est le compteur communicant déployé par Enedis. Il transmet automatiquement les relevés de consommation et permet les interventions à distance (changement de puissance, mise en service).
Pas nécessairement. Certaines offres vertes sont même moins chères que le TRV. Le surcoût moyen d'une offre verte est de 1 à 3 % par rapport à l'équivalent non-vert chez le même fournisseur.
Code Blade
@php $faqs = [
['Question 1 ?', 'Réponse avec HTML.
'],
['Question 2 ?', 'Réponse 2.
'],
]; @endphp
{{-- Schéma JSON-LD FAQPage --}}
@push('head')
@endpush
{{-- Un seul x-data partagé → un seul item ouvert à la fois --}}
Questions fréquentes
@foreach($faqs as $j => $faq)
{!! $faq[1] !!}
@endforeach
Simulateur .fe-sim
Shell de simulateur interactif. Header bleu clair avec icône, étapes numérotées, champs de formulaire (.fe-field, .fe-input, .fe-seg), et panneau de résultats bleu foncé. Variante 3 colonnes (.fe-sim-3col) pour les simulateurs avancés avec sliders + donut.
Code HTML (structure)
<div class="fe-sim">
<div class="fe-sim-header">
<div class="fe-sim-header-title">
<div class="fe-sim-ico"><svg>...</svg></div>
<div>
<span class="fe-sim-eyebrow">Simulateur</span>
<div class="fe-sim-title">Titre</div>
</div>
</div>
</div>
<div class="fe-sim-steps">
<div class="fe-sim-step">
<div class="fe-sim-step-num">1</div>
<div>
<div class="fe-field">
<label class="fe-field-label">Label</label>
<input type="text" class="fe-input">
</div>
<div class="fe-seg">
<button class="active">Option</button>
</div>
</div>
</div>
</div>
<div class="fe-sim-result">
<div class="fe-sim-result-item">
<div class="label">Label</div>
<div class="value">1 143<span class="unit">€/an</span></div>
</div>
</div>
</div>Split CTA .fe-split
Bloc de redirection vers le comparateur. Colonne gauche bleue (icône + texte), colonne droite blanche (select + bouton). Responsive 1 colonne sous 640px.
Comparez toutes les offres d'électricité disponibles à votre adresse en 2 minutes.
Code HTML
<div class="fe-split">
<div class="fe-split-left">
<div class="fe-split-ico"><svg>...</svg></div>
<div>
<div class="fe-split-title">Titre</div>
<p class="fe-split-body">Description.</p>
</div>
</div>
<div class="fe-split-right">
<select class="fe-split-select">...</select>
<a href="#" class="fe-btn fe-btn-primary fe-btn-full">CTA</a>
</div>
</div>Sommaire latéral .fe-side-toc
Table des matières sticky en sidebar droite. Progression dynamique : les items se révèlent au scroll (.revealed), l'item courant est marqué .active (pastille bleue + fond bleu clair), les items passés en .passed. Barre de progression animée en CSS.
Code HTML
<div class="fe-side-toc">
<div class="fe-side-toc-head">Sommaire</div>
<ul class="fe-side-toc-list">
<div class="fe-side-toc-progress"></div>
<li class="fe-side-toc-item revealed passed"><a href="#">Section passée</a></li>
<li class="fe-side-toc-item revealed active"><a href="#">Section courante</a></li>
<li class="fe-side-toc-item revealed"><a href="#">Section à venir</a></li>
<li class="fe-side-toc-item revealed sub"><a href="#">Sous-section (H3)</a></li>
<li class="fe-side-toc-item"><a href="#">Section non révélée</a></li>
</ul>
<div class="fe-side-toc-footer">
<span><span class="count">3</span> / 6 sections</span>
</div>
</div>
<!-- Classes dynamiques (JS) :
.revealed — item visible (fade-in)
.active — section en cours de lecture (pastille bleue)
.passed — section déjà lue (pastille grise)
.sub — sous-section H3 (indentée, plus petite) -->CTA Monétisation large .fe-mon-large
Bloc CTA principal avec fond gradient bleu-orange, grille micro en arrière-plan. Composant Blade : <x-fe-mon>. Le bouton téléphone est toujours en bg-primary (bleu).
Service Selectra gratuit, sans engagement.
Code Blade
<x-fe-mon
title="Titre du CTA"
phone="09 75 18 41 65"
href="/selection/fr-ei-cc-felec"
disclaimer="Service gratuit, sans engagement."
statNum="350"
statLabel="€ d'économies max/an"
/>
<!-- Props disponibles :
title — Titre en Fraunces 20px
phone — Numéro affiché dans le bouton CTA
href — Lien du bouton (défaut : /selection/fr-ei-cc-felec)
disclaimer — Texte en italique sous le bouton
statNum — Chiffre à droite (mono 42px)
statLabel — Label sous le chiffre -->CTA Comparateur .fe-mon-compare
Variante avec dropdown de sélection + bouton de redirection vers le comparateur. Même fond gradient que .fe-mon-large. Composant Blade : <x-fe-mon-compare>.
Code Blade
<x-fe-mon-compare
title="Titre"
body="Description."
href="/contrat-electricite-gaz/comparatif"
cta="Voir les meilleures offres"
:options="[
['value', 'Label'],
]"
/>
<!-- Props disponibles :
title — Titre 20px bold
body — Description 14.5px
href — Lien cible (défaut : /contrat-electricite-gaz/comparatif)
cta — Texte du bouton
options — Array de [value, label] pour le dropdown -->Hero article .fe-hero
Header d'article avec gradient bleu + overlay orange. Layout 2 colonnes : contenu principal à gauche (breadcrumb, eyebrow pill, titre Fraunces 46px, auteurs, lede), carte blanche CTA à droite. Responsive 1 colonne sous 980px.
Code HTML (structure)
<div class="fe-hero">
<div class="fe-hero-inner">
<div class="fe-hero-main">
<nav class="fe-hero-crumb">...</nav>
<div class="fe-hero-eyebrow">
<span class="fe-hero-eyebrow-dot"></span>
Guide complet
</div>
<h1 class="fe-hero-title">Titre de l'article</h1>
<div class="fe-hero-meta">
<div class="fe-hero-avatars">...</div>
<div class="fe-hero-authors">...</div>
</div>
<p class="fe-hero-lede">Chapô de l'article.</p>
</div>
<div class="fe-hero-card">
<div class="fe-hero-card-trust">...</div>
<div class="fe-hero-card-body">
<div class="fe-hero-card-title">CTA titre</div>
<ul class="fe-hero-card-list">...</ul>
<a href="tel:..." class="fe-hero-card-cta">Numéro</a>
</div>
</div>
</div>
</div>