# Story 3.7: Navigation mobile - Chemin Libre et Bottom Bar
Status: ready-for-dev
## 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
- [ ] **Task 1: Créer le composant ZoneCard** (AC: #1, #2, #5)
- [ ] Créer `frontend/app/components/feature/ZoneCard.vue`
- [ ] Props : zone (MapZone), isVisited, isLocked, isCurrent
- [ ] Afficher illustration, nom traduit, statut visuel
- [ ] Icône cadenas si verrouillé
- [ ] Badge "Nouveau" si non visité
- [ ] Checkmark si visité
- [ ] **Task 2: Créer le composant CheminLibre** (AC: #1, #3, #4)
- [ ] Créer `frontend/app/components/feature/CheminLibre.vue`
- [ ] Afficher les 5 zones en cards verticales
- [ ] Ligne décorative reliant les cards (SVG ou CSS)
- [ ] Scroll vertical natif
- [ ] Gestion du tap pour navigation
- [ ] **Task 3: Créer le composant BottomBar** (AC: #6, #7, #8)
- [ ] Créer `frontend/app/components/layout/BottomBar.vue`
- [ ] 3 boutons : Carte, Progression, Paramètres
- [ ] Touch targets minimum 48x48px
- [ ] Position fixe en bas
- [ ] Variable CSS --bottom-bar-height pour le spacing
- [ ] **Task 4: Intégrer le drawer Chemin Libre** (AC: #1)
- [ ] Au tap sur Carte dans BottomBar, ouvrir le CheminLibre
- [ ] Le CheminLibre s'affiche en slide-up depuis le bas
- [ ] Overlay pour fermer en tapant à l'extérieur
- [ ] Handle de glissement pour fermer
- [ ] **Task 5: Intégrer le modal Progression** (AC: #6)
- [ ] Au tap sur Progression, afficher le détail
- [ ] Réutiliser le composant ProgressIcon de Story 3.4
- [ ] Afficher la liste des sections visitées/restantes
- [ ] **Task 6: Intégrer les paramètres** (AC: #6)
- [ ] Au tap sur Paramètres, ouvrir un drawer
- [ ] Options : langue, mode Express/Aventure, réinitialiser
- [ ] Consentement RGPD accessible
- [ ] **Task 7: Gérer le positionnement du narrateur** (AC: #9)
- [ ] Variable CSS --bottom-bar-height définie
- [ ] Le NarratorBubble utilise cette variable pour son bottom
- [ ] Pas de chevauchement entre narrateur et bottom bar
- [ ] **Task 8: Responsive design**
- [ ] BottomBar visible uniquement < 768px
- [ ] CheminLibre adapté aux petits écrans
- [ ] Safe-area-inset pour les appareils avec notch
- [ ] **Task 9: Tests et validation**
- [ ] Tester sur mobile réel ou émulateur
- [ ] Vérifier les touch targets (48px minimum)
- [ ] Tester navigation entre zones
- [ ] Valider le drawer Chemin Libre
- [ ] Tester le positionnement du narrateur
## Dev Notes
### Composant ZoneCard
```vue
```
### Composant CheminLibre
```vue
{{ $t('cheminLibre.title') }}
```
### Composant BottomBar
```vue
```
### Composant ProgressDetail (pour le modal)
```vue