diff --git a/efx/docs/fr/intro.md b/efx/docs/fr/intro.md
new file mode 100644
index 0000000..3b35e13
--- /dev/null
+++ b/efx/docs/fr/intro.md
@@ -0,0 +1,136 @@
+# EFx
+
+efx — moteur de templates UI déclaratif en Rust
+`efx!` est une macro procédurale qui transforme un balisage compact de type XML en appels de méthodes vers votre UI (par ex. des wrappers autour de `egui/eframe`).
+
+## Exemple minimal
+
+```rust
+use efx_core::doc_prelude::*;
+use efx::*;
+
+efx!(Ui::default(), r#"
+
+
+
+
+
+"#);
+```
+
+**Fonctionnalités principales 0.5**
+
+* Tags : `Column`, `Row`, `Label`, `Separator`, `Button`.
+* Insertion d’expressions : `{expr}` dans le texte.
+* Échappement : `{{` → `{`, `}}` → `}`.
+* Les attributs de tags sont **analysés**.
+
+---
+
+### EFx Sandbox (aire de jeu locale)
+
+`efx-sandbox` est un crate binaire utilitaire inclus dans ce dépôt. Il est utilisé pour tester manuellement les tags et comme exemple “vivant” de l’utilisation de la macro de templating dans une application `egui` réelle.
+
+**Pourquoi l’utiliser**
+
+* Vérifier rapidement le comportement des tags dans une fenêtre native (`eframe/egui`).
+* Conserver des exemples riches et des “scènes” en dehors des doctests (pas de limitations de test harness).
+* Démontrer comment `efx!` s’intègre avec l’état de l’application.
+
+**Où il se trouve**
+
+`/efx-sandbox`
+
+Ce crate fait partie du workspace et n’est **pas publié**.
+
+**Comment l’exécuter**
+
+```bash
+cargo run -p efx-sandbox
+```
+
+> Assurez-vous que les versions de `eframe/egui` correspondent à celles utilisées par EFx (nous fixons `eframe = "0.32"` pour `egui 0.32.x`).
+
+**Exemple minimal de `main.rs`**
+
+```rust,ignore
+use eframe::{egui, NativeOptions};
+use efx::*; // la macro efx!
+use efx_core::doc_prelude::*; // prélude pratique pour egui
+
+fn main() -> eframe::Result<()> {
+ eframe::run_native(
+ "EFx Sandbox",
+ NativeOptions::default(),
+ Box::new(|_cc| Box::new(App::default())),
+ )
+}
+
+#[derive(Default)]
+struct App {
+ counter: i32,
+ input: String,
+}
+
+impl eframe::App for App {
+ fn update(&mut self, ctx: &egui::Context, _frame: &mut eframe::Frame) {
+ egui::CentralPanel::default().show(ctx, |ui| {
+ // En-tête
+ let _ = efx!(ui, r#"
+
+
+
+
+ "#);
+
+ // Boutons renvoyant Response
+ ui.horizontal(|ui| {
+ let inc = efx!(ui, r#""#);
+ if inc.clicked() { self.counter += 1; }
+
+ let dec = efx!(ui, r#""#);
+ if dec.clicked() { self.counter -= 1; }
+ });
+
+ // Texte dynamique
+ let _ = efx!(ui, r#""#);
+
+ // Champ de texte
+ let _ = efx!(ui, r#""#);
+
+ // Scroll + liens + boutons stylés
+ let _ = efx!(ui, r#"
+
+
+
+
+
+ À propos
+
+
+
+
+
+
+
+
+
+ "#);
+ });
+ }
+}
+```
+
+**Conseils**
+
+* Gardez plusieurs “scènes” d’exemple comme `&'static str` et changez-les via un `ComboBox` pour tester différents ensembles de tags.
+* Préférez les attributs en **snake\_case** (`max_height`, `always_show`, `stroke_width`, …). Si un tag supporte aussi les alias en kebab-case, sa section le mentionnera.
+* Les couleurs sont au format `#RRGGBB` ou `#RRGGBBAA` (les formats courts `#RGB/#RGBA` ne sont pas encore supportés).
+
+**Pourquoi un sandbox au lieu des doctests**
+
+Les doctests sont excellents pour la syntaxe et les messages d’erreur, mais `egui` nécessite une vraie boucle de rendu (`Context::run()`), que les doctests ne fournissent pas. Le sandbox exécute une vraie application, tandis que les exemples de cette documentation sont marqués `rust,ignore` pour éviter leur exécution.
+
+---
+
+Pour plus d’informations, voir les sections suivantes : **Supported Tags** et **Syntax Guide**.