diff --git a/src/interface/libelles/plan.js b/src/interface/libelles/plan.js
index 637c633..333eeed 100644
--- a/src/interface/libelles/plan.js
+++ b/src/interface/libelles/plan.js
@@ -72,4 +72,21 @@ export const TABLE = new Map([
['plan.echelle.centimetres', 'cm'],
['plan.echelle.metres', 'm'],
['plan.echelle.kilometres', 'km'],
+
+ // --- La barre de vue (§ 7.2, § 7.7, § 8.4) ---------------------------------
+ // Le numéro d'un tour, dans le sélecteur, est une donnée : son option ne
+ // porte que lui.
+ ['plan.vue.barre', 'Vue du plan'],
+ ['plan.vue.tour', 'Tour affiché'],
+ ['plan.vue.zoomer', 'Zoom +'],
+ ['plan.vue.dezoomer', 'Zoom \u{2212}'],
+ ['plan.vue.ajuster', 'Ajuster'],
+ ['plan.vue.listes', 'Listes de noms'],
+ ['plan.vue.pleinEcran', 'Plein écran'],
+ ['plan.vue.dessin', 'Plan de salle'],
+
+ // --- Les panneaux latéraux (§ 2.1, étape 8) --------------------------------
+ ['plan.panneaux', 'Panneaux du plan'],
+ ['plan.listesTravail.titre', 'Listes de travail'],
+ ['plan.reserve.titre', 'Réserve'],
]);
diff --git a/src/interface/plan/BarreVue.svelte b/src/interface/plan/BarreVue.svelte
new file mode 100644
index 0000000..2459c8e
--- /dev/null
+++ b/src/interface/plan/BarreVue.svelte
@@ -0,0 +1,84 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/interface/plan/ListesTravail.svelte b/src/interface/plan/ListesTravail.svelte
new file mode 100644
index 0000000..5678a32
--- /dev/null
+++ b/src/interface/plan/ListesTravail.svelte
@@ -0,0 +1,22 @@
+
+
+
+
+
+ {t('plan.listesTravail.titre')}
+
+
+
diff --git a/src/interface/plan/PanneauPlace.svelte b/src/interface/plan/PanneauPlace.svelte
new file mode 100644
index 0000000..5803d8e
--- /dev/null
+++ b/src/interface/plan/PanneauPlace.svelte
@@ -0,0 +1,7 @@
+
+
+
diff --git a/src/interface/plan/PanneauTable.svelte b/src/interface/plan/PanneauTable.svelte
new file mode 100644
index 0000000..0c53c02
--- /dev/null
+++ b/src/interface/plan/PanneauTable.svelte
@@ -0,0 +1,7 @@
+
+
+
diff --git a/src/interface/plan/Plan.svelte b/src/interface/plan/Plan.svelte
new file mode 100644
index 0000000..006728b
--- /dev/null
+++ b/src/interface/plan/Plan.svelte
@@ -0,0 +1,181 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/interface/plan/Reserve.svelte b/src/interface/plan/Reserve.svelte
new file mode 100644
index 0000000..5853c51
--- /dev/null
+++ b/src/interface/plan/Reserve.svelte
@@ -0,0 +1,22 @@
+
+
+
+
+
+ {t('plan.reserve.titre')}
+
+
+
diff --git a/src/interface/plan/SectionPlan.svelte b/src/interface/plan/SectionPlan.svelte
index 615fcd7..3d0a244 100644
--- a/src/interface/plan/SectionPlan.svelte
+++ b/src/interface/plan/SectionPlan.svelte
@@ -2,12 +2,86 @@
License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl) -->
-
- {t('coquille.section.plan')}
+
+ {#if !$ui.pleinEcran}
+ {t('coquille.section.plan')}
+ {/if}
+
+ {#if evenement !== null}
+ {#key evenement}
+
+ {/key}
+ {/if}
+ {#if !$ui.pleinEcran}
+
+ {/if}
+
+
+
diff --git a/src/interface/plan/Vue.navigateur.test.js b/src/interface/plan/Vue.navigateur.test.js
new file mode 100644
index 0000000..7a524f0
--- /dev/null
+++ b/src/interface/plan/Vue.navigateur.test.js
@@ -0,0 +1,839 @@
+// © 2026 TechnoLibre (http://www.technolibre.ca)
+// License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl)
+
+// La vue du plan dans un vrai moteur de rendu (§ 7.2, § 7.3, § 7.7, § 8.2,
+// § 8.4, § 8.5, § 13.3, § 14.10) : l'oracle du moteur de rendu,
+// getScreenCTM().inverse(), confronté à dessinDepuisEcran à tout zoom et
+// sur une page défilée ; les trois invariants du