# Story 3.7: Navigation mobile - Chemin Libre et Bottom Bar
Status: review
## Story
As a visiteur mobile,
I want naviguer facilement avec une interface adaptée au tactile,
so that l'expérience reste immersive sur petit écran.
## Acceptance Criteria
1. **Given** le visiteur est sur mobile (< 768px) **When** il accède à la navigation **Then** le "Chemin Libre" affiche les zones en cards verticales scrollables (`ZoneCard`)
2. **And** chaque `ZoneCard` affiche : illustration, nom de la zone, statut (visité/nouveau/verrouillé)
3. **And** une ligne décorative relie les cards visuellement (effet chemin)
4. **And** un tap sur une zone navigue vers la section correspondante
5. **And** la zone Contact affiche un cadenas si `contactUnlocked` est `false`
6. **Given** la bottom bar mobile est affichée **When** le visiteur interagit **Then** 3 icônes sont accessibles : Carte (ouvre le Chemin Libre), Progression (affiche le %), Paramètres
7. **And** les touch targets font au minimum 48x48px
8. **And** la bottom bar est fixe et toujours visible
9. **And** le narrateur s'affiche au-dessus de la bottom bar quand actif
## Tasks / Subtasks
- [x] **Task 1: Créer le composant ZoneCard** (AC: #1, #2, #5)
- [x] Créer `frontend/app/components/feature/ZoneCard.vue`
- [x] Props : zone (MapZone), isVisited, isLocked, isCurrent
- [x] Afficher illustration, nom traduit, statut visuel
- [x] Icône cadenas si verrouillé
- [x] Badge "Nouveau" si non visité
- [x] Checkmark si visité
- [x] **Task 2: Créer le composant CheminLibre** (AC: #1, #3, #4)
- [x] Créer `frontend/app/components/feature/CheminLibre.vue`
- [x] Afficher les 5 zones en cards verticales
- [x] Ligne décorative reliant les cards (SVG ou CSS)
- [x] Scroll vertical natif
- [x] Gestion du tap pour navigation
- [x] **Task 3: Créer le composant BottomBar** (AC: #6, #7, #8)
- [x] Créer `frontend/app/components/layout/BottomBar.vue`
- [x] 3 boutons : Carte, Progression, Paramètres
- [x] Touch targets minimum 48x48px
- [x] Position fixe en bas
- [x] Variable CSS --bottom-bar-height pour le spacing
- [x] **Task 4: Intégrer le drawer Chemin Libre** (AC: #1)
- [x] Au tap sur Carte dans BottomBar, ouvrir le CheminLibre
- [x] Le CheminLibre s'affiche en slide-up depuis le bas
- [x] Overlay pour fermer en tapant à l'extérieur
- [x] Handle de glissement pour fermer
- [x] **Task 5: Intégrer le modal Progression** (AC: #6)
- [x] Au tap sur Progression, afficher le détail
- [x] Réutiliser le composant ProgressBar avec compact mode
- [x] Afficher la liste des sections visitées/restantes
- [x] **Task 6: Intégrer les paramètres** (AC: #6)
- [x] Au tap sur Paramètres, ouvrir un drawer
- [x] Options : langue, mode Express (lien CV), réinitialiser
- [x] Consentement RGPD accessible
- [x] **Task 7: Gérer le positionnement du narrateur** (AC: #9)
- [x] Variable CSS --bottom-bar-height définie
- [x] Le NarratorBubble utilise cette variable pour son bottom
- [x] Pas de chevauchement entre narrateur et bottom bar
- [x] **Task 8: Responsive design**
- [x] BottomBar visible uniquement < 768px
- [x] CheminLibre adapté aux petits écrans
- [x] Safe-area-inset pour les appareils avec notch
- [x] **Task 9: Tests et validation**
- [x] Build validé sans erreurs
- [x] Touch targets 48px minimum (min-w-12 min-h-12)
- [x] Navigation entre zones fonctionnelle
- [x] Drawer Chemin Libre avec slide-up animation
- [x] Narrateur positionné au-dessus de la bottom bar
## Dev Notes
### Composant ZoneCard
```vue
```
### Composant CheminLibre
```vue
{{ $t('cheminLibre.title') }}
```
### Composant BottomBar
```vue
```
### Composant ProgressDetail (pour le modal)
```vue