diff --git a/CORRECTION_carte_likes.md b/CORRECTION_carte_likes.md
new file mode 100644
index 0000000..f876801
--- /dev/null
+++ b/CORRECTION_carte_likes.md
@@ -0,0 +1,115 @@
+# đ§ Correction â pourquoi ton projet ne s'affiche plus
+
+Ton commit le dit bien : « + de bugs » đ
. Pas de panique, le diagnostic est simple : tu as **mélangé deux façons** de gérer les likes, et du coup `Carte.jsx` utilise des choses qui n'existent pas chez elle.
+
+---
+
+## đ Ce qui cloche dans `Carte.jsx`
+
+```jsx
+import { useState } from "react";
+function Carte(props) {
+ return (
+ ...
+
+```
+
+Deux problĂšmes :
+1. **Erreur de syntaxe** : ta fonction `() => { ... }` n'est jamais refermĂ©e par `)`. Ă elle seule, ça **empĂȘche l'app de s'afficher** (page blanche / erreur de build).
+2. **`likes` et `setLikes` n'existent pas dans `Carte`** : tu as déplacé les likes dans le **parent** (`App` a bien `useState({...})`), donc `Carte` n'a plus de `useState`. Elle essaie d'utiliser des variables qui ne sont plus là .
+
+> đ§ **La cause de fond :** tu as commencĂ© l'approche « **les likes vivent dans le parent** » (bien !) mais tu as gardĂ© des bouts de l'ancienne approche « les likes dans la carte ». Il faut **choisir une seule** approche. On garde celle du parent (c'est celle de la correction prĂ©cĂ©dente).
+
+---
+
+## â
La rĂšgle : `Carte` ne fait qu'**afficher** ce qu'on lui donne
+
+Dans l'approche « parent », la carte **n'a pas d'état** : elle reçoit `likes` et `onLike` en **props**, c'est tout.
+
+### `Carte.jsx` corrigé (remplace tout le fichier)
+```jsx
+function Carte(props) {
+ return (
+
+
{props.titre}
+
{props.niveaux}
+
+
+ );
+}
+
+export default Carte;
+```
+> đ Plus de `import { useState }`, plus de `setLikes`, **un seul** `` (tu en avais deux : `titre` ET `nom`), et plus de `props.createur` inutile. La carte affiche `props.likes` et, au clic, appelle `props.onLike` â point.
+
+---
+
+## â
CÎté `App.jsx` : finir l'approche « parent »
+
+Tu as encore l'**ancien** `total` muté qui traßne. On le supprime et on **recalcule** le total.
+
+```jsx
+function App() {
+ const [likes, setLikes] = useState({}); // {} au départ (pas {1:3, 4:1})
+ const [recherche, setRecherche] = useState("");
+ // â SUPPRIME : const [total, setTotal] = useState(0);
+
+ // incrémente le like d'UNE trilogie (par son id)
+ function liker(id) {
+ setLikes((prev) => ({ ...prev, [id]: (prev[id] || 0) + 1 }));
+ }
+
+ // le total se RECALCULE Ă partir des likes
+ const total = Object.values(likes).reduce((s, n) => s + n, 0);
+
+ const filtrees = trilogies.filter((t) =>
+ t.nom.toLowerCase().includes(recherche.toLowerCase())
+ );
+
+ return (
+
+
+
setRecherche(e.target.value)}
+ />
+
đ Total de likes : {total}
+ {filtrees.length === 0 &&
Aucune trilogie trouvée
}
+
+ {filtrees.map((trilo) => (
+
liker(trilo.id)} // incrémente SON like
+ />
+ ))}
+
+
+ );
+}
+```
+
+**â
Test :** l'app s'affiche de nouveau. Chaque carte montre son â€ïž, et le « Total de likes » = la somme, toujours juste.
+
+> đĄ **Ă retenir :** dans une appli React, **une donnĂ©e vit Ă UN seul endroit**. Les likes vivent dans `App` ; `Carte` ne fait que les **afficher** (props) et **signaler** un clic (`onLike`). Ne mĂ©lange jamais « Ă©tat dans le parent » et « Ă©tat dans l'enfant » pour la mĂȘme donnĂ©e â c'est ce qui t'a mis dedans.
+
+---
+
+## â
Récap
+
+- [ ] `Carte.jsx` : version « affichage seul » (props `titre`, `niveaux`, `likes`, `onLike`), un seul ``, plus de `useState`
+- [ ] `App.jsx` : supprimer l'ancien `total`, ajouter `liker(id)`, recalculer `total` avec `reduce`
+- [ ] Tester : l'app s'affiche, likes par carte + total correct
+
+Quand c'est rĂ©parĂ©, tu peux passer Ă **`ENONCE_react_3_services.md`** (la suite). đ
diff --git a/ENONCE_react_3_services.md b/ENONCE_react_3_services.md
new file mode 100644
index 0000000..ec80a64
--- /dev/null
+++ b/ENONCE_react_3_services.md
@@ -0,0 +1,164 @@
+# đź ĂnoncĂ© React #3 â formulaire, tri & plusieurs pages
+
+(à attaquer une fois ton projet réparé via `CORRECTION_carte_likes.md`.)
+
+Tu sais maintenant : composants, props, état local, **lifting state up**, `useEffect`. On monte d'un cran avec **3 nouveaux gros morceaux**. Comme avant : explications + mini-exemples, à toi d'appliquer sur tes trilogies.
+
+| Module | Tu apprends | Niveau |
+|---|---|---|
+| I | **Formulaire d'ajout** : modifier une liste en state | ââ |
+| J | **Trier** la liste (select contrĂŽlĂ© + `sort`) | ââ |
+| K | **Plusieurs pages** avec React Router | âââ |
+
+---
+
+## đ Module I â Ajouter une trilogie via un formulaire
+
+### I.1 â D'abord, rendre la liste **modifiable**
+Aujourd'hui `trilogies` est un `const` figé. Pour pouvoir **ajouter**, il doit devenir un **état** :
+```jsx
+const donneesInitiales = [ /* tes 5 trilogies */ ];
+
+function App() {
+ const [trilogies, setTrilogies] = useState(donneesInitiales);
+ // ...
+}
+```
+
+### I.2 â Un formulaire contrĂŽlĂ©
+```jsx
+const [nom, setNom] = useState("");
+const [niveaux, setNiveaux] = useState("");
+
+function ajouter(e) {
+ e.preventDefault(); // empĂȘche le rechargement de page
+ if (nom.trim() === "") return; // on n'ajoute pas du vide
+ const nouvelle = { id: Date.now(), nom, niveaux }; // id unique simple
+ setTrilogies([...trilogies, nouvelle]); // đ NOUVEAU tableau = ancien + la nouvelle
+ setNom(""); // on vide les champs
+ setNiveaux("");
+}
+
+return (
+
+);
+```
+
+> đ§© **Le point clĂ© :** on ne « pousse » pas dans le tableau existant (`trilogies.push(...)` â). On crĂ©e un **nouveau tableau** avec `[...trilogies, nouvelle]` et on le donne Ă `setTrilogies`. React ne rĂ©affiche que si on lui passe une **nouvelle** valeur. C'est la rĂšgle de l'**immutabilitĂ©** : on remplace, on ne modifie pas sur place.
+
+**â
Test :** remplis le formulaire, clique « Ajouter » â la carte apparaĂźt en bas, les champs se vident, la page ne recharge pas.
+
+> đ Bonus : un bouton « đïž Supprimer » sur chaque carte â `setTrilogies(trilogies.filter((t) => t.id !== id))` (un nouveau tableau **sans** celle-lĂ ).
+
+---
+
+## đ Module J â Trier la liste
+
+Un `