# Les 9 piliers TWAI pour planifier un voyage

## Guide de travail complet

Ce livre rassemble les contenus pédagogiques TWAI consacrés au processus des neuf piliers. Il sert de référence de préparation : partez d’un projet réel, consignez vos décisions, vérifiez les inguides importantes et adaptez le plan à vos besoins.

Les chapitres ci-dessous reprennent les ressources disponibles dans le parcontenu source, organisées par pilier. Les guides, formulaires, exercices, listes de vérification, prompts et références pratiques sont conservés dans leur forme détaillée afin de ne pas perdre les consignes et les outils. Les liens et recommandations qui concernent des services tiers peuvent évoluer; vérifiez toujours les inguides actuelles auprès de leurs sources officielles.

## Parcontenu en bref

1. **Inspiration et vision** — définir qui voyage, ce qui compte, le style, les intérêts et les envies à explorer.
2. **Planification** — transformer les envies en étapes, arbitrer les options, structurer l’itinéraire et prévoir des plans de rechange.
3. **Protection, santé et sécurité** — anticiper les besoins, les risques, les assurances, les soins et les recontenu.
4. **Finance et budget** — établir un budget réaliste, comparer les coûts, suivre les dépenses et préparer les moyens de paiement.
5. **Navigation** — préparer les cartes, itinéraires, outils en ligne et solutions hors connexion.
6. **Communication** — organiser la connectivité, les communications et la protection des appareils et des données.
7. **Logistique** — coordonner transports, hébergements, équipements, bagages, réservations et besoins particuliers.
8. **Documentation** — rassembler les inguides utiles, garder des traces et faciliter l’utilisation du dossier en voyage.
9. **Évaluation et autonomie** — faire le bilan, apprendre de l’expérience et améliorer la préparation des prochains voyages.

## Table des matières

- [Introduction — préparer avec méthode](#introduction--prparer-avec-mthode)
- [Pilier 1 — Inspiration et vision](#pilier-1--inspiration-et-vision)
- [Pilier 2 — Planification](#pilier-2--planification)
- [Pilier 3 — Protection, santé et sécurité](#pilier-3--protection-sant-et-scurit)
- [Pilier 4 — Finance et budget](#pilier-4--finance-et-budget)
- [Pilier 5 — Navigation](#pilier-5--navigation)
- [Pilier 6 — Communication](#pilier-6--communication)
- [Pilier 7 — Logistique](#pilier-7--logistique)
- [Pilier 8 — Documentation](#pilier-8--documentation)
- [Pilier 9 — Évaluation et autonomie](#pilier-9--valuation-et-autonomie)

---

# Introduction — préparer avec méthode

## Ressource — 1.1 intro index

<p align="center">
  <img src="/ebook-assets/debutant-couverture-voyageurs.png" alt="L'voyageur bien préparé" style="width:100%; border-radius: 15px; box-shadow: 0 4px 15px rgba(0,0,0,0.1);" />
</p>

# 🚀 Devenir un voyageur bien préparé

## Planifier & Voyager avec l'IA

Bienvenue dans un parcontenu qui transforme une envie de départ en voyage préparé, autonome et personnel. L'IA vous aide à rechercher, comparer et organiser ; vos préférences et votre jugement restent au centre de chaque décision.

## 🧭 Comment fonctionne la guide

La guide comporte neuf chapitres fondamentaux, suivis de deux spécialisations facultatives. Les chapitres se suivent naturellement, mais chaque voyage est différent : adaptez l'ordre à votre projet et revenez à une étape dès qu'une décision doit être précisée.

Chaque chapitre associe une méthode, des exemples et des exercices. Avancez à votre rythme : l'important est de repartir avec une décision, une liste d'actions ou un document utile pour votre voyage.

## Les étapes de votre parcontenu

### 1. Donner une direction à votre voyage

Vous commencez par vos envies, votre style et vos priorités. Vous les transformez ensuite en itinéraire réaliste, en tenant compte du temps, du rythme et des contraintes.

### 2. Partir préparé et autonome

Vous préparez votre protection, votre budget, vos outils de navigation et vos moyens de communication. Ces éléments constituent votre filet de sécurité avant et pendant le départ.

### 3. Faire fonctionner le voyage sur le terrain

Vous organisez les réservations, les bagages, les déplacements et les ressources nécessaires. Vous apprenez aussi à documenter vos expériences afin d'en garder une trace utile et personnelle.

### 4. Tirer les sections de l'expérience

Le bilan final vous aide à évaluer ce qui a fonctionné, à ajuster votre méthode et à préparer le voyage suivant avec davantage de confiance.

### 5. Approfondir selon votre projet

Deux spécialisations vous permettent d'aller plus loin si vous voyagez en véhicule récréatif ou si vous préparez une croisière autour du monde.

## 🛠️ Action immédiate

Choisissez un voyage réel, même encore vague, comme fil conducteur. Notez sa durée approximative, les personnes qui voyageront avec vous et ce que vous souhaitez vivre : vous pourrez affiner ces repères tout au long de la guide.

---

## Ressource — 1.2 faq chapitres

Vous avez des questions sur le fonctionnement de la guide ou sur la méthodologie de l'voyageur bien préparé ? Voici les réponses aux interrogations les plus fréquentes.

---

## 🚀 Généralités sur la guide

**Est-ce que cette guide est adaptée aux débutants en informatique ?**  
Absolument. Nous avons conçu le parcontenu pour accompagner aussi bien ceux qui découvrent l'IA que les utilisateurs avancés. Le "Pilier 0" (Introduction) sert justement à évaluer votre niveau pour vous proposer les bons outils.

**Combien de temps faut-il consacrer à la guide ?**  
Le programme est flexible. Chaque section prend environ 10 à 20 minutes. Vous pouvez progresser à votre rythme. Nous recommandons de suivre un chapitre par semaine pour bien assimiler et pratiquer les exercices.

**Dois-je acheter des logiciels ou des abonnements supplémentaires ?**  
La majorité des outils que nous présentons ont une version gratuite généreuse (ChatGPT, Google Maps, etc.). Pour certains outils spécialisés, nous vous indiquerons les meilleures options gratuites ou à faible coût. Votre abonnement à TWAI guide inclut déjà l'accès à notre Assistant IA propriétaire.

---

## 🧭 Méthodologie et Profilage

**Où remplir mes questionnaires de voyage ?**
Tous les questionnaires de profil et de préparation sont regroupés dans **Mes documents de voyage**, accessible depuis le menu principal. Créez un dossier pour chaque voyage et renseignez les profils des voyageurs. Dans la forge de prompts, sélectionnez ce dossier pour utiliser ses réponses enregistrées.

**Puis-je modifier mon profil voyageur plus tard ?**  
Oui. Modifiez vos réponses dans le dossier concerné, puis enregistrez-les. Vous pouvez aussi reprendre les profils dans un nouveau dossier pour préparer un autre voyage sans modifier le précédent.

---

## 🛠️ Utilisation de la plateforme

**Mes réponses aux formulaires sont-elles sauvegardées ?**  
Cliquez sur le bouton d’enregistrement du questionnaire pour conserver vos réponses dans le dossier choisi. Vous pouvez ensuite télécharger une copie texte, imprimer vos réponses ou les enregistrer en PDF. Le contexte destiné à une IA est filtré et peut être relu avant copie. La saisie et l’export sont inclus dans la guide; la production des livrables TWAI nécessite l’achat du service correspondant.

**Comment savoir si j'ai terminé une section ?**  
Une fois que vous avez lu le contenu et interagi avec les éléments de la page, cliquez sur le bouton **"Section suivante"** en bas de page. Un crochet vert ✅ apparaîtra alors dans la barre de navigation latérale.

**Que faire si je suis bloqué sur une notion technique ?**  
Plusieurs options s'offrent à vous :
1.  Consultez l'**Assistant IA TWAI** (disponible dans le menu Outils).
2.  Posez votre question dans la section **Communauté**.
3.  Utilisez le formulaire de support si vous rencontrez un bug technique sur la plateforme.

---

## 🐾 Santé, Animaux et Logistique

**Je voyage avec des contraintes de santé, la guide m'aide-t-elle ?**  
C'est l'un de nos points forts. Le Pilier 3 (Protection) et les formulaires de profilage santé permettent de générer des listes de vérification spécifiques à vos besoins (accès aux soins, qualité de l'air, transport de médicaments).

**Est-ce que vous couvrez les voyages en VR / Van-life ?**  
Oui, le Pilier 7 (Logistique) contient des sections dédiées aux voyageurs nomades en véhicule récréatif, incluant la gestion de l'énergie et de la connectivité en route.

---

> **Une question manque à cette liste ?** N'hésitez pas à nous la soumettre via le bouton de feedback en bas de page ou sur notre groupe communautaire !

---

## Ressource — 1.3 decouverte plateforme

# Comment utiliser cette plateforme ?

Bienvenue dans votre espace d'apprentissage ! Cette plateforme a été conçue pour être bien plus qu'une simple série de vidéos : c'est un véritable **tableau de bord interactif** pour votre transguide numérique.

Regardez la vidéo ci-dessous pour comprendre comment maximiser votre expérience :

<div class="video-container mb-4">
  <div class="ratio ratio-16x9 shadow-sm rounded-4 overflow-hidden border bg-light">
    <iframe src="https://drive.google.com/file/d/1GFGe7vyB5TY4m1ncAKu_16O8ruEMcqDC/preview" title="Introduction à la plateforme TWAI" loading="lazy" allow="autoplay; encrypted-media; fullscreen; picture-in-picture" allowfullscreen></iframe>
  </div>
</div>

## Structure d'une section type

Chaque section de "L'voyageur bien préparé" est structurée pour vous faire passer de la théorie à la pratique immédiatement :

1.  **L'Inguide Théorique** : Le contenu Markdown que vous lisez actuellement. Nous allons droit à l'essentiel avec des concepts clairs et illustrés.
2.  **Les Exercices & Actions** : Repérez les icônes ☑️. Ce sont vos listes de tâches. Elles ne sont pas là pour faire joli, mais pour marquer vos étapes de réflexion.
3.  **Votre dossier de voyage** : Les questionnaires de profil et de préparation sont regroupés dans **Mes documents de voyage**, accessible depuis le menu principal. Enregistrez vos réponses dans le dossier concerné; vous pourrez le sélectionner dans la forge de prompts. Les exercices et bilans pédagogiques restent dans la guide.
4.  **La Validation** : En bas de chaque page, le bouton "Section suivante" valide votre progression.

## Navigation et Progression

-   **La Sidebar (à gauche)** : Elle affiche votre progression en temps réel. Une icône ✅ apparaît dès qu'une section est complétée.
-   **Le Menu "Outils IA"** : Accessible en tout temps dans la barre de navigation, il contient des raccourcis vers les outils spécifiques dont nous parlerons durant la guide.
-   **Enregistrement des réponses** : Cliquez sur le bouton d’enregistrement de chaque questionnaire avant de le quitter. Vos réponses restent disponibles dans votre dossier et peuvent être exportées gratuitement.

---

# 🎬 Scénario du Vidéo (À EFFACER APRÈS TOURNAGE)

**Titre :** Maîtriser l'interface de l'voyageur bien préparé
**Durée estimée :** 3-4 minutes

### 1. Introduction (0:00 - 0:30)
*   **Visuel :** Gilles à l'écran, puis capture d'écran de la page d'accueil de la guide.
*   **Audio :** "Bonjour et bienvenue ! Avant de plonger dans le vif du sujet, je veux vous montrer comment cette plateforme va devenir votre meilleure alliée. On n'est pas ici pour juste 'regarder des vidéos', on est ici pour bâtir votre projet de voyage."

### 2. La Navigation et la Sidebar (0:30 - 1:15)
*   **Visuel :** Curseur montrant la sidebar à gauche, les chapitres qui s'ouvrent, les badges ✅.
*   **Audio :** "À votre gauche, vous avez votre carte routière. 9 chapitres, du profilage de départ à l'évaluation finale. Remarquez les petits cercles : ils se transforment en ✅ verts dès que vous terminez une section. C'est votre preuve de progression."

### 3. Le contenu interactif : Théorie et Action (1:15 - 2:00)
*   **Visuel :** Scroll sur une page avec du texte, puis zoom sur une case ☑️.
*   **Audio :** "Sous chaque vidéo ou texte, vous trouverez des zones d'action. Les icônes ☑️ marquent les étapes que vous devez valider mentalement ou physiquement. La théorie, c'est bien, mais l'voyageur bien préparé, c'est celui qui agit."

### 4. Les formulaires et la mémoire du système (2:00 - 3:00)
*   **Visuel :** Ouvrir « Mes documents de voyage » depuis le menu principal, choisir un dossier, enregistrer un profil, puis sélectionner ce dossier dans la forge.
*   **Audio :** "Vos questionnaires sont réunis dans Mes documents de voyage. Préparez un dossier pour votre séjour et enregistrez vos réponses. La forge pourra ensuite utiliser ce dossier pour personnaliser vos demandes à l'IA. Vous pouvez aussi conserver une copie de vos réponses."

### 5. Conclusion et Appel à l'action (3:00 - 3:30)
*   **Visuel :** Retour sur Gilles, puis plan sur le bouton "Section suivante" en bas de page.
*   **Audio :** "Prenez le temps d'explorer. Si vous avez fini de lire cette page, cliquez simplement sur 'Section suivante' en bas. On se retrouve tout de suite pour votre première grande étape : l'évaluation de vos compétences !"

---

## Ressource — 1.4 evaluation competences

<style>
    .btn-circle { width: 50px; height: 50px; padding: 10px 16px; border-radius: 25px; font-size: 18px; line-height: 1.33; }
    .btn-orange { background-color: #ff851b; border-color: #ff851b; color: white; }
    .btn-orange:hover { background-color: #e67716; border-color: #e67716; color: white; }
    .fab-container { position: fixed; bottom: 80px; right: 40px; z-index: 1000; }
    #eval-table-container { margin-bottom: 30px; background: #fff; padding: 15px; border-radius: 8px; box-shadow: 0 2px 4px rgba(0,0,0,0.05); }
</style>

> **Action Requise :** Ce formulaire permet de mesurer votre point de départ en tant que voyageur. En le remplissant, vous aidez l'IA à identifier les chapitres sur lesquels vous devriez passer plus de temps.

### 👥 Évaluations par voyageur
<div id="eval-table-container">
    <table class="table table-striped" id="eval-table">
        <thead>
            <tr>
                <th>Voyageur</th>
                <th>Expérience</th>
                <th>Score Moyen</th>
                <th>Actions</th>
            </tr>
        </thead>
        <tbody>
            <tr><td colspan="4" class="text-center">Chargement des évaluations...</td></tr>
        </tbody>
    </table>
</div>

---

### 📝 Réaliser une Évaluation
<form id="multi-eval-form" class="well">
    <input type="hidden" name="id" id="eval-id">
    
    <div class="form-group">
        <label>Nom du voyageur</label>
        <input type="text" name="nom_voyageur" id="field-nom_voyageur" class="form-control" placeholder="Ex: Yvan" required>
    </div>

    <h4>1. Expérience Globale</h4>
    <div class="form-group">
        <label>Votre niveau d'expérience global en voyage</label>
        <select name="exp_voyageur" id="field-exp_voyageur" class="form-control">
            <option value="debutant">Débutant (Peu de voyages en autonomie)</option>
            <option value="intermediaire">Intermédiaire (A déjà organisé quelques séjours)</option>
            <option value="avance">Avancé (Habitué aux longs voyages / Nomadisme)</option>
        </select>
    </div>

    <h4>2. Équipements maîtrisés</h4>
    <div class="form-group">
        <label>Cochez votre matériel actuel :</label><br>
        <label class="checkbox-inline"><input type="checkbox" name="equip_van" id="field-equip_van"> Van / VR</label>
        <label class="checkbox-inline"><input type="checkbox" name="equip_camping" id="field-equip_camping"> Tente / Bivouac</label>
        <label class="checkbox-inline"><input type="checkbox" name="equip_nautique" id="field-equip_nautique"> Kayak / Paddle</label>
        <label class="checkbox-inline"><input type="checkbox" name="equip_drone" id="field-equip_drone"> Drone / Caméra</label>
    </div>

    <h4>3. Auto-Évaluation (Note de 1 à 5)</h4>
    <p class="help-block">1 = Je ne sais pas faire | 5 = Je maîtrise parfaitement</p>
    
    <div class="form-group">
        <label>Planification d'un itinéraire complexe : <span class="range-value" id="val-planif" style="font-weight: bold; color: orange;">3</span></label>
        <input type="range" name="score_planification" id="field-score_planification" class="form-control" min="1" max="5" step="1" value="3" oninput="document.getElementById('val-planif').innerText = this.value">
    </div>

    <div class="form-group">
        <label>Gestion et suivi du budget : <span class="range-value" id="val-budget" style="font-weight: bold; color: orange;">3</span></label>
        <input type="range" name="score_budget" id="field-score_budget" class="form-control" min="1" max="5" step="1" value="3" oninput="document.getElementById('val-budget').innerText = this.value">
    </div>

    <div class="form-group">
        <label>Maîtrise des outils numériques : <span class="range-value" id="val-outils" style="font-weight: bold; color: orange;">3</span></label>
        <input type="range" name="score_outils_google" id="field-score_outils_google" class="form-control" min="1" max="5" step="1" value="3" oninput="document.getElementById('val-outils').innerText = this.value">
    </div>

    <div class="form-group">
        <label>Utilisation de l'IA pour le voyage : <span class="range-value" id="val-ia" style="font-weight: bold; color: orange;">3</span></label>
        <input type="range" name="score_ia" id="field-score_ia" class="form-control" min="1" max="5" step="1" value="3" oninput="document.getElementById('val-ia').innerText = this.value">
    </div>

    <div class="form-group">
        <label>Adaptation aux imprévus : <span class="range-value" id="val-adapt" style="font-weight: bold; color: orange;">3</span></label>
        <input type="range" name="score_adaptation" id="field-score_adaptation" class="form-control" min="1" max="5" step="1" value="3" oninput="document.getElementById('val-adapt').innerText = this.value">
    </div>

    <div class="form-group">
        <label>Quelle compétence souhaitez-vous améliorer en priorité ?</label>
        <textarea name="priorite_amelioration" id="field-priorite_amelioration" class="form-control" rows="3"></textarea>
    </div>

    <div style="margin-top: 30px;">
        <button type="submit" class="btn btn-primary btn-lg" id="submit-btn">💾 Enregistrer l'évaluation</button>
        <button type="button" class="btn btn-default btn-lg" onclick="clearForm()">Annuler</button>
    </div>
</form>

<div class="fab-container">
    <button class="btn btn-orange btn-circle btn-lg" onclick="clearForm()" title="Ajouter une évaluation">
        <span class="glyphicon glyphicon-plus"></span>
    </button>
</div>

<script>
    let evaluations = [];
    const formID = "evaluation-competences-initiale";

    document.addEventListener("DOMContentLoaded", function() {
        loadEvaluations();
        document.getElementById("multi-eval-form").addEventListener("submit", function(e) {
            e.preventDefault();
            saveCurrentEval();
        });
    });

    async function loadEvaluations() {
        try {
            const res = await fetch(`/fr/home/api/get-form/${formID}`);
            const response = await res.json();
            const data = response.data;
            if (data && data.evaluations) {
                evaluations = data.evaluations;
            } else if (data && Object.keys(data).length > 0) {
                evaluations = [{
                    id: "legacy-" + Date.now(),
                    nom_voyageur: "Principal",
                    exp_voyageur: data.exp_voyageur_principal || "debutant",
                    equip_van: !!data.equip_van,
                    equip_camping: !!data.equip_camping,
                    equip_nautique: !!data.equip_nautique,
                    equip_drone: !!data.equip_drone,
                    score_planification: data.score_planification || 3,
                    score_budget: data.score_budget || 3,
                    score_outils_google: data.score_outils_google || 3,
                    score_ia: data.score_ia || 3,
                    score_adaptation: data.score_adaptation || 3,
                    priorite_amelioration: data.priorite_amelioration || ""
                }];
            }
            renderTable();
        } catch (err) { console.error(err); }
    }

    function renderTable() {
        const tbody = document.querySelector("#eval-table tbody");
        if (evaluations.length === 0) {
            tbody.innerHTML = '<tr><td colspan="4" class="text-center">Aucune évaluation. Cliquez sur + pour en ajouter.</td></tr>';
            return;
        }
        tbody.innerHTML = "";
        evaluations.forEach(e => {
            const avg = (parseInt(e.score_planification) + parseInt(e.score_budget) + parseInt(e.score_outils_google) + parseInt(e.score_ia) + parseInt(e.score_adaptation)) / 5;
            const tr = document.createElement("tr");
            tr.innerHTML = `
                <td>${e.nom_voyageur || '-'}</td>
                <td>${e.exp_voyageur || '-'}</td>
                <td>${avg.toFixed(1)} / 5</td>
                <td>
                    <a href="javascript:void(0)" onclick="editEval('${e.id}')" class="btn btn-xs btn-default">Modifier</a>
                    <a href="javascript:void(0)" onclick="deleteEval('${e.id}')" class="btn btn-xs btn-danger">Supprimer</a>
                </td>
            `;
            tbody.appendChild(tr);
        });
    }

    function clearForm() {
        document.getElementById("eval-id").value = "";
        document.getElementById("multi-eval-form").reset();
        ["val-planif", "val-budget", "val-outils", "val-ia", "val-adapt"].forEach(id => {
            document.getElementById(id).innerText = "3";
        });
        document.getElementById("submit-btn").innerHTML = "💾 Enregistrer l'évaluation";
    }

    function editEval(id) {
        const e = evaluations.find(item => item.id === id);
        if (!e) return;
        document.getElementById("eval-id").value = e.id;
        document.getElementById("field-nom_voyageur").value = e.nom_voyageur || "";
        document.getElementById("field-exp_voyageur").value = e.exp_voyageur || "debutant";
        document.getElementById("field-equip_van").checked = !!e.equip_van;
        document.getElementById("field-equip_camping").checked = !!e.equip_camping;
        document.getElementById("field-equip_nautique").checked = !!e.equip_nautique;
        document.getElementById("field-equip_drone").checked = !!e.equip_drone;
        
        document.getElementById("field-score_planification").value = e.score_planification || 3;
        document.getElementById("val-planif").innerText = e.score_planification || 3;
        document.getElementById("field-score_budget").value = e.score_budget || 3;
        document.getElementById("val-budget").innerText = e.score_budget || 3;
        document.getElementById("field-score_outils_google").value = e.score_outils_google || 3;
        document.getElementById("val-outils").innerText = e.score_outils_google || 3;
        document.getElementById("field-score_ia").value = e.score_ia || 3;
        document.getElementById("val-ia").innerText = e.score_ia || 3;
        document.getElementById("field-score_adaptation").value = e.score_adaptation || 3;
        document.getElementById("val-adapt").innerText = e.score_adaptation || 3;
        
        document.getElementById("field-priorite_amelioration").value = e.priorite_amelioration || "";

        document.getElementById("submit-btn").innerHTML = "💾 Mettre à jour l'évaluation";
        document.getElementById("multi-eval-form").scrollIntoView({ behavior: 'smooth' });
    }

    async function deleteEval(id) {
        if (!confirm("Supprimer cette évaluation ?")) return;
        evaluations = evaluations.filter(e => e.id !== id);
        await saveAll();
        renderTable();
        if (document.getElementById("eval-id").value === id) clearForm();
    }

    async function saveCurrentEval() {
        const id = document.getElementById("eval-id").value;
        const evalData = {
            id: id || "ev-" + Date.now(),
            nom_voyageur: document.getElementById("field-nom_voyageur").value,
            exp_voyageur: document.getElementById("field-exp_voyageur").value,
            equip_van: document.getElementById("field-equip_van").checked,
            equip_camping: document.getElementById("field-equip_camping").checked,
            equip_nautique: document.getElementById("field-equip_nautique").checked,
            equip_drone: document.getElementById("field-equip_drone").checked,
            score_planification: document.getElementById("field-score_planification").value,
            score_budget: document.getElementById("field-score_budget").value,
            score_outils_google: document.getElementById("field-score_outils_google").value,
            score_ia: document.getElementById("field-score_ia").value,
            score_adaptation: document.getElementById("field-score_adaptation").value,
            priorite_amelioration: document.getElementById("field-priorite_amelioration").value
        };

        if (id) {
            const index = evaluations.findIndex(e => e.id === id);
            if (index !== -1) evaluations[index] = evalData;
        } else {
            evaluations.push(evalData);
        }

        await saveAll();
        renderTable();
        clearForm();
        alert("Évaluation enregistrée !");
    }

    async function saveAll() {
        const btn = document.getElementById("submit-btn");
        const originalText = btn.innerHTML;
        btn.disabled = true;
        btn.innerHTML = "⌛ Sauvegarde...";
        try {
            await fetch("/fr/home/api/save-form", {
                method: "POST",
                headers: { "Content-Type": "application/json" },
                body: JSON.stringify({ formID: formID, data: { evaluations: evaluations } })
            });
        } catch (err) { console.error(err); }
        finally {
            btn.disabled = false;
            btn.innerHTML = originalText;
        }
    }
</script>

---

### 🎯 Prochaine étape
Une fois sauvegardé, passez à l'évaluation de votre **Maturité Numérique (05)** pour compléter votre profil technique.

---

## Ressource — 1.5 formulaire maturite numerique

<style>
    .btn-circle { width: 50px; height: 50px; padding: 10px 16px; border-radius: 25px; font-size: 18px; line-height: 1.33; }
    .btn-orange { background-color: #ff851b; border-color: #ff851b; color: white; }
    .btn-orange:hover { background-color: #e67716; border-color: #e67716; color: white; }
    .fab-container { position: fixed; bottom: 80px; right: 40px; z-index: 1000; }
    #maturity-table-container { margin-bottom: 30px; background: #fff; padding: 15px; border-radius: 8px; box-shadow: 0 2px 4px rgba(0,0,0,0.05); }
</style>

> **Action Requise :** Avant de plonger dans les outils, nous devons savoir d’où vous partez techniquement. Cela permet à l’Assistant IA d’adapter son niveau de langage et la complexité de ses réponses.

### 👥 Diagnostics par voyageur
<div id="maturity-table-container">
    <table class="table table-striped" id="maturity-table">
        <thead>
            <tr>
                <th>Voyageur</th>
                <th>Appareil</th>
                <th>Niveau IA</th>
                <th>Actions</th>
            </tr>
        </thead>
        <tbody>
            <tr><td colspan="4" class="text-center">Chargement des diagnostics...</td></tr>
        </tbody>
    </table>
</div>

---

### 📝 Réaliser un Diagnostic Technique
<form id="multi-maturity-form" class="well">
    <input type="hidden" name="id" id="maturity-id">
    
    <div class="form-group">
        <label>Nom du voyageur</label>
        <input type="text" name="nom_voyageur" id="field-nom_voyageur" class="form-control" placeholder="Ex: Yvan" required>
    </div>

    <div class="form-group">
        <label>Utilisez-vous régulièrement un gestionnaire de mots de passe ?</label>
        <select name="gestionnaire_mdp" id="field-gestionnaire_mdp" class="form-control">
            <option value="non">Non, pas encore</option>
            <option value="oui">Oui (1Password, LastPass, etc.)</option>
            <option value="quoi">C'est quoi ?</option>
        </select>
    </div>

    <div class="form-group">
        <label>Avez-vous déjà utilisé un VPN sur un Wi-Fi public ?</label>
        <select name="usage_vpn" id="field-usage_vpn" class="form-control">
            <option value="non">Jamais</option>
            <option value="rarement">Rarement</option>
            <option value="frequent">Oui, systématiquement</option>
        </select>
    </div>

    <div class="form-group">
        <label>Savez-vous ce qu’est un fichier .GPX ou .KML ?</label>
        <select name="connaissance_gpx" id="field-connaissance_gpx" class="form-control">
            <option value="non">Inconnu</option>
            <option value="theorie">J'en ai entendu parler</option>
            <option value="pratique">Oui, j'en manipule déjà</option>
        </select>
    </div>

    <div class="form-group">
        <label>Niveau de familiarité avec ChatGPT / IA (1 à 5) : <span class="range-value" id="val-ia-maturity" style="font-weight: bold; color: orange;">3</span></label>
        <input type="range" name="niveau_ia" id="field-niveau_ia" class="form-control" min="1" max="5" step="1" value="3" oninput="document.getElementById('val-ia-maturity').innerText = this.value">
        <div class="help-block">1 = Jamais ouvert | 5 = Usage quotidien expert</div>
    </div>

    <div class="form-group">
        <label>Type d'appareil principal pour planifier</label><br>
        <label class="radio-inline"><input type="radio" name="appareil" id="app-ordinateur" value="ordinateur"> Ordinateur</label>
        <label class="radio-inline"><input type="radio" name="appareil" id="app-tablette" value="tablette"> Tablette</label>
        <label class="radio-inline"><input type="radio" name="appareil" id="app-smartphone" value="smartphone"> Smartphone</label>
    </div>

    <div style="margin-top: 30px;">
        <button type="submit" class="btn btn-primary btn-lg" id="submit-btn">💾 Enregistrer le diagnostic</button>
        <button type="button" class="btn btn-default btn-lg" onclick="clearForm()">Annuler</button>
    </div>
</form>

<div class="fab-container">
    <button class="btn btn-orange btn-circle btn-lg" onclick="clearForm()" title="Ajouter un diagnostic">
        <span class="glyphicon glyphicon-plus"></span>
    </button>
</div>

<script>
    let diagnostics = [];
    const formID = "maturite-numerique";

    document.addEventListener("DOMContentLoaded", function() {
        loadDiagnostics();
        document.getElementById("multi-maturity-form").addEventListener("submit", function(e) {
            e.preventDefault();
            saveCurrentMaturity();
        });
    });

    async function loadDiagnostics() {
        try {
            const res = await fetch(`/fr/home/api/get-form/${formID}`);
            const response = await res.json();
            const data = response.data;
            if (data && data.diagnostics) {
                diagnostics = data.diagnostics;
            } else if (data && Object.keys(data).length > 0) {
                diagnostics = [{
                    id: "legacy-" + Date.now(),
                    nom_voyageur: "Principal",
                    gestionnaire_mdp: data.gestionnaire_mdp || "non",
                    usage_vpn: data.usage_vpn || "non",
                    connaissance_gpx: data.connaissance_gpx || "non",
                    niveau_ia: data.niveau_ia || 3,
                    appareil: data.appareil || "ordinateur"
                }];
            }
            renderTable();
        } catch (err) { console.error(err); }
    }

    function renderTable() {
        const tbody = document.querySelector("#maturity-table tbody");
        if (diagnostics.length === 0) {
            tbody.innerHTML = '<tr><td colspan="4" class="text-center">Aucun diagnostic. Cliquez sur + pour en ajouter.</td></tr>';
            return;
        }
        tbody.innerHTML = "";
        diagnostics.forEach(d => {
            const tr = document.createElement("tr");
            tr.innerHTML = `
                <td>${d.nom_voyageur || '-'}</td>
                <td>${d.appareil || '-'}</td>
                <td>${d.niveau_ia || '-'} / 5</td>
                <td>
                    <a href="javascript:void(0)" onclick="editMaturity('${d.id}')" class="btn btn-xs btn-default">Modifier</a>
                    <a href="javascript:void(0)" onclick="deleteMaturity('${d.id}')" class="btn btn-xs btn-danger">Supprimer</a>
                </td>
            `;
            tbody.appendChild(tr);
        });
    }

    function clearForm() {
        document.getElementById("maturity-id").value = "";
        document.getElementById("multi-maturity-form").reset();
        document.getElementById("val-ia-maturity").innerText = "3";
        document.getElementById("submit-btn").innerHTML = "💾 Enregistrer le diagnostic";
    }

    function editMaturity(id) {
        const d = diagnostics.find(item => item.id === id);
        if (!d) return;
        document.getElementById("maturity-id").value = d.id;
        document.getElementById("field-nom_voyageur").value = d.nom_voyageur || "";
        document.getElementById("field-gestionnaire_mdp").value = d.gestionnaire_mdp || "non";
        document.getElementById("field-usage_vpn").value = d.usage_vpn || "non";
        document.getElementById("field-connaissance_gpx").value = d.connaissance_gpx || "non";
        document.getElementById("field-niveau_ia").value = d.niveau_ia || 3;
        document.getElementById("val-ia-maturity").innerText = d.niveau_ia || 3;
        
        if (d.appareil) {
            const radio = document.querySelector(`input[name="appareil"][value="${d.appareil}"]`);
            if (radio) radio.checked = true;
        }

        document.getElementById("submit-btn").innerHTML = "💾 Mettre à jour le diagnostic";
        document.getElementById("multi-maturity-form").scrollIntoView({ behavior: 'smooth' });
    }

    async function deleteMaturity(id) {
        if (!confirm("Supprimer ce diagnostic ?")) return;
        diagnostics = diagnostics.filter(d => d.id !== id);
        await saveAll();
        renderTable();
        if (document.getElementById("maturity-id").value === id) clearForm();
    }

    async function saveCurrentMaturity() {
        const id = document.getElementById("maturity-id").value;
        const appareilVal = document.querySelector('input[name="appareil"]:checked')?.value || "ordinateur";
        
        const maturityData = {
            id: id || "mat-" + Date.now(),
            nom_voyageur: document.getElementById("field-nom_voyageur").value,
            gestionnaire_mdp: document.getElementById("field-gestionnaire_mdp").value,
            usage_vpn: document.getElementById("field-usage_vpn").value,
            connaissance_gpx: document.getElementById("field-connaissance_gpx").value,
            niveau_ia: document.getElementById("field-niveau_ia").value,
            appareil: appareilVal
        };

        if (id) {
            const index = diagnostics.findIndex(d => d.id === id);
            if (index !== -1) diagnostics[index] = maturityData;
        } else {
            diagnostics.push(maturityData);
        }

        await saveAll();
        renderTable();
        clearForm();
        alert("Diagnostic enregistré !");
    }

    async function saveAll() {
        const btn = document.getElementById("submit-btn");
        const originalText = btn.innerHTML;
        btn.disabled = true;
        btn.innerHTML = "⌛ Sauvegarde...";
        try {
            await fetch("/fr/home/api/save-form", {
                method: "POST",
                headers: { "Content-Type": "application/json" },
                body: JSON.stringify({ formID: formID, data: { diagnostics: diagnostics } })
            });
        } catch (err) { console.error(err); }
        finally {
            btn.disabled = false;
            btn.innerHTML = originalText;
        }
    }
</script>

---

### 🎯 À quoi sert ce diagnostic ?
Vos réponses permettent à TWAI guide de :
- Ne pas vous ennuyer avec des tutoriels sur des choses que vous maîtrisez déjà.
- Vous proposer des raccourcis d'expert si vous êtes à l'aise.
- Adapter la complexité des prompts générés par la Forge.

---

# Pilier 1 — Inspiration et vision

## Ressource — 1.1 guide inspiration index

<p align="center">
  <img src="/public/img/guide-inspiration-hero.png" alt="Préparer un voyage à partir de ses inspirations" style="width:100%; border-radius: 15px; box-shadow: 0 4px 15px rgba(0,0,0,0.1);" />
</p>

Ce chapitre vous aide à transformer une simple envie de départ en un projet de voyage solide, cohérent et surtout, **aligné avec votre personnalité**.

---

## 🎯 Objectif pédagogique
À la fin de ce chapitre, vous serez capable de :
- Clarifier votre "Pourquoi" profond pour chaque voyage.
- Définir vos profils personnels, culinaires et sociaux pour guider l'IA.
- Utiliser des techniques de veille (YouTube, Guides) pour dénicher des lieux hors-piste.
- Créer un tableau d'inspiration (Moodboard) pour visualiser votre aventure.

---

## 🧭 Comment fonctionne la guide

La guide se suit comme un parcontenu progressif : chaque section vous fait avancer d'une idée de voyage vers un projet clair et personnel. Prenez le temps de réaliser les exercices proposés avant de passer à la suite : vos réponses serviront de fil conducteur pour les étapes suivantes et pour personnaliser l'aide de l'IA.

Vous n'avez pas besoin d'avoir déjà choisi une destination. L'objectif est d'abord de comprendre ce qui vous donne envie de voyager, puis de transformer cette envie en pistes concrètes.

## Les étapes du chapitre

### 1. Poser les fondations

Commencez par clarifier votre profil de voyageur : vos envies, votre rythme, vos priorités, vos goûts culinaires et la place que vous souhaitez donner aux rencontres. Prenez également un moment pour formuler votre intention de voyage et le style d'expérience que vous recherchez.

### 2. Nourrir votre inspiration

Rassemblez les images, lieux, activités, ambiances et thèmes qui vous attirent. Vous pouvez créer un tableau d'inspiration et noter vos sources préférées. Cette étape permet de faire émerger des idées de destinations et de voyages qui vous ressemblent vraiment.

### 3. Explorer et vérifier vos pistes

Approfondissez les idées retenues à l'aide de guides, de créateurs de contenu, de blogs et de ressources locales. Observez la culture, les réalités du pays, les possibilités d'aventure et les expériences proposées. Gardez ce qui correspond à vos critères et écartez ce qui s'en éloigne.

### 4. Comparer pour décider

Organisez vos découvertes sur une carte ou dans vos notes, puis comparez vos options selon vos priorités : budget, durée, saison, accessibilité, rythme, activités et type d'expérience. À ce stade, vous pouvez identifier une ou plusieurs destinations à explorer plus précisément.

### 5. Valider et faire le bilan

Terminez le chapitre en relisant vos préférences et vos choix. Le bilan vous permet de confirmer ce qui compte le plus pour vous et de partir vers le chapitre suivant avec une base solide pour construire votre voyage.

---

<p align="center">
  <img src="/public/img/guide-inspiration-moodboard.png" alt="Moodboard et carnet pour imaginer son voyage" style="width:100%; border-radius: 15px; box-shadow: 0 4px 15px rgba(0,0,0,0.1);" />
</p>

## 🛠️ Action immédiate

Commencez par définir votre profil et votre intention de voyage. Répondez simplement, sans chercher la réponse parfaite : cette première étape donnera une direction à tout le reste de votre parcontenu.

---

## Ressource — 1.10 youtube travel blogs

<style>
    .btn-circle { width: 56px; height: 56px; border-radius: 28px; display: flex; align-items: center; justify-content: center; box-shadow: 0 4px 10px rgba(0,0,0,0.2); }
    .fab-container { position: fixed; bottom: 80px; right: 40px; z-index: 1000; }
    .yt-icon { color: #FF0000; font-size: 1.2rem; }
    #yt-table-container { background: #fff; border-radius: 12px; box-shadow: 0 4px 12px rgba(0,0,0,0.05); overflow: hidden; margin-bottom: 40px; }
</style>

## 🎥 L'Inspiration en Mouvement
Les YouTubeurs de voyage ne sont pas seulement des créateurs de contenu ; ce sont des éclaireurs. Ils testent des itinéraires, dénichent des adresses secrètes et partagent des astuces logistiques précieuses. 

### 🌟 Quelques Références pour vous aider
Voici une sélection de chaînes reconnues pour la qualité de leurs conseils :

<div class="row g-3 mb-5">
    <div class="col-md-6">
        <div class="list-group shadow-sm">
            <a href="https://www.youtube.com/c/KaraandNate" target="_blank" class="list-group-item list-group-item-action d-flex justify-content-between align-items-center">
                <span><b>Kara and Nate</b> - Aventures mondiales</span>
                <i class="bi bi-youtube yt-icon"></i>
            </a>
            <a href="https://www.youtube.com/c/LostLeBlanc" target="_blank" class="list-group-item list-group-item-action d-flex justify-content-between align-items-center">
                <span><b>Lost LeBlanc</b> - Digital Nomad & Visuels</span>
                <i class="bi bi-youtube yt-icon"></i>
            </a>
            <a href="https://www.youtube.com/c/markwiens" target="_blank" class="list-group-item list-group-item-action d-flex justify-content-between align-items-center">
                <span><b>Mark Wiens</b> - Street Food & Gastronomie</span>
                <i class="bi bi-youtube yt-icon"></i>
            </a>
        </div>
    </div>
    <div class="col-md-6">
        <div class="list-group shadow-sm">
            <a href="https://www.youtube.com/c/ItchyBoots" target="_blank" class="list-group-item list-group-item-action d-flex justify-content-between align-items-center">
                <span><b>Itchy Boots</b> - Aventure Moto en Solo</span>
                <i class="bi bi-youtube yt-icon"></i>
            </a>
            <a href="https://www.youtube.com/@MountainTrekker" target="_blank" class="list-group-item list-group-item-action d-flex justify-content-between align-items-center">
                <span><b>Varun Vagish</b> - Treks & Petit budget</span>
                <i class="bi bi-youtube yt-icon"></i>
            </a>
            <a href="https://www.youtube.com/@MirandaGoesOutside" target="_blank" class="list-group-item list-group-item-action d-flex justify-content-between align-items-center">
                <span><b>Miranda Goes Outside</b> - Nature & Rando</span>
                <i class="bi bi-youtube yt-icon"></i>
            </a>
        </div>
    </div>
</div>

---

<div class="card border-warning shadow-sm mb-5">
    <div class="card-body p-4 p-md-5 text-center">
        <h3 class="card-title text-dark mb-3"><i class="bi bi-robot me-2 text-primary"></i> L'Analyse IA Automatisée</h3>
        <p class="lead mb-0"><b>Le saviez-vous ?</b> En enregistrant vos YouTubeurs préférés ci-dessous, vous pourriez permettre à l'IA de TWAI guide d'analyser automatiquement leurs dernières publications pour en extraire des données pertinentes.</p>
    </div>
</div>

<!-- trip-only:start -->

### 🚀 Vos YouTubeurs Inspirants
<div id="yt-table-container" class="border">
    <table class="table table-hover align-middle mb-0" id="yt-table">
        <thead class="table-light">
            <tr>
                <th>Nom du YouTubeur / Chaîne</th>
                <th>URL</th>
                <th class="text-end">Actions</th>
            </tr>
        </thead>
        <tbody>
            <tr><td colspan="3" class="text-center py-4"><div class="spinner-border spinner-border-sm text-primary me-2"></div>Chargement de votre liste...</td></tr>
        </tbody>
    </table>
</div>

---

<div class="card shadow-sm border-0 mb-5 overflow-hidden" id="form-container">
    <div class="card-header bg-dark text-white py-3 fw-bold">
        <i class="bi bi-plus-circle me-2 text-warning"></i> <span id="form-title">Ajouter un YouTubeur</span>
    </div>
    <div class="card-body p-4 p-md-5">
        <form id="multi-yt-form" class="local-form">
            <input type="hidden" name="id" id="yt-id">
            <div class="form-group mb-4">
                <label class="form-label">Nom du YouTubeur ou de la Chaîne</label>
                <input type="text" name="name" id="field-name" class="form-control form-control-lg border-0 bg-light" placeholder="Ex: Itchy Boots" required>
            </div>
            <div class="form-group mb-4">
                <label class="form-label">URL de la Chaîne ou d'une vidéo spécifique</label>
                <input type="url" name="url" id="field-url" class="form-control border-0 bg-light" placeholder="https://www.youtube.com/..." required>
            </div>
            <div class="form-group mb-5">
                <label class="form-label">Pourquoi cette chaîne vous inspire ? (Notes pour l'IA)</label>
                <textarea name="notes" id="field-notes" class="form-control border-0 bg-light" rows="3" placeholder="Ex: J'aime son approche du voyage en van et ses conseils sur l'autonomie électrique..."></textarea>
            </div>
            <div class="d-flex gap-3 pt-4 border-top">
                <button type="submit" class="btn btn-warning btn-lg px-5 shadow-sm fw-bold text-dark" id="submit-btn">
                    <i class="bi bi-save me-2"></i>Enregistrer pour l'analyse
                </button>
                <button type="button" class="btn btn-link text-muted btn-lg" onclick="clearForm()">Annuler</button>
            </div>
        </form>
    </div>
</div>

<div class="fab-container">
    <button class="btn btn-warning btn-circle btn-lg text-dark shadow" onclick="clearForm()" title="Ajouter une inspiration">
        <i class="bi bi-plus-lg fs-3"></i>
    </button>
</div>

<script>
    let streamers = [];
    const formID = "youtube-inspirations";
    document.addEventListener("DOMContentLoaded", function() {
        loadStreamers();
        document.getElementById("multi-yt-form").addEventListener("submit", function(e) {
            e.preventDefault();
            saveCurrentStreamer();
        });
    });
    async function loadStreamers() {
        try {
            const res = await fetch(`/fr/home/api/get-form/${formID}`);
            const response = await res.json();
            const data = response.data;
            if (data && data.streamers) {
                streamers = data.streamers;
            }
            renderList();
        } catch (err) { console.error(err); }
    }
    function renderList() {
        const tbody = document.querySelector("#yt-table tbody");
        if (!streamers || streamers.length === 0) {
            tbody.innerHTML = `<tr><td colspan="3" class="text-center py-4 text-muted">Aucun YouTubeur enregistré.</td></tr>`;
            return;
        }
        tbody.innerHTML = "";
        streamers.forEach(s => {
            const tr = document.createElement("tr");
            tr.innerHTML = `
                <td class="fw-bold text-dark">${s.name}</td>
                <td><a href="${s.url}" target="_blank" class="text-decoration-none small"><i class="bi bi-link-45deg me-1"></i>Lien chaîne</a></td>
                <td class="text-end">
                    <button onclick="editStreamer('${s.id}')" class="btn btn-sm btn-outline-primary me-1"><i class="bi bi-pencil"></i></button>
                    <button onclick="deleteStreamer('${s.id}')" class="btn btn-sm btn-outline-danger"><i class="bi bi-trash"></i></button>
                </td>`;
            tbody.appendChild(tr);
        });
    }
    function clearForm() {
        document.getElementById("yt-id").value = "";
        document.getElementById("multi-yt-form").reset();
        document.getElementById("form-title").innerText = "Ajouter un YouTubeur";
        document.getElementById("submit-btn").innerHTML = "<i class='bi bi-save me-2'></i>Enregistrer pour l'analyse";
        document.getElementById("form-container").scrollIntoView({ behavior: 'smooth' });
    }
    function editStreamer(id) {
        const s = streamers.find(item => item.id === id);
        if (!s) return;
        document.getElementById("yt-id").value = s.id;
        document.getElementById("field-name").value = s.name || "";
        document.getElementById("field-url").value = s.url || "";
        document.getElementById("field-notes").value = s.notes || "";
        document.getElementById("form-title").innerText = "Modifier : " + s.name;
        document.getElementById("submit-btn").innerHTML = "<i class='bi bi-save me-2'></i>Mettre à jour";
        document.getElementById("form-container").scrollIntoView({ behavior: 'smooth' });
    }
    async function deleteStreamer(id) {
        if (!confirm("Supprimer cette source ?")) return;
        streamers = streamers.filter(s => s.id !== id);
        await saveAll();
        renderList();
        if (document.getElementById("yt-id").value === id) clearForm();
    }
    async function saveCurrentStreamer() {
        const id = document.getElementById("yt-id").value;
        const sData = {
            id: id || "yt-" + Date.now(),
            name: document.getElementById("field-name").value,
            url: document.getElementById("field-url").value,
            notes: document.getElementById("field-notes").value
        };
        if (id) {
            const index = streamers.findIndex(s => s.id === id);
            if (index !== -1) streamers[index] = sData;
        } else {
            streamers.push(sData);
        }
        await saveAll();
        renderList();
        clearForm();
    }
    async function saveAll() {
        const btn = document.getElementById("submit-btn");
        const originalText = btn.innerHTML;
        btn.disabled = true;
        btn.innerHTML = "<span class='spinner-border spinner-border-sm me-2'></span>Synchronisation...";
        try {
            await fetch("/fr/home/api/save-form", {
                method: "POST",
                headers: { "Content-Type": "application/json" },
                body: JSON.stringify({ formID: formID, data: { streamers: streamers } })
            });
        } catch (err) { console.error(err); }
        finally { btn.disabled = false; btn.innerHTML = originalText; }
    }
</script>

<!-- trip-only:end -->

<div class="alert alert-info border-0 shadow-sm rounded-4 p-4 mt-5">
    <div class="d-flex align-items-center">
        <div class="flex-shrink-0"><i class="bi bi-lightbulb-fill text-warning display-6 me-4"></i></div>
        <div>
            <h5 class="alert-heading mb-1 fw-bold">Conseil d'Explorateur</h5>
            <p class="mb-0">Ne cherchez pas seulement les plus gros comptes. Parfois, un petit YouTubeur passionné par une région précise aura des inguides beaucoup plus actionnables pour votre planification IA.</p>
        </div>
    </div>
</div>

---

## Ressource — 1.11 travel by country

<style>
    .btn-circle { width: 56px; height: 56px; border-radius: 28px; display: flex; align-items: center; justify-content: center; box-shadow: 0 4px 10px rgba(0,0,0,0.2); }
    .fab-container { position: fixed; bottom: 80px; right: 40px; z-index: 1000; }
    .accordion-button:not(.collapsed) { background-color: #fff5e6; color: #333; }
    .accordion-button:focus { box-shadow: 0 0 0 0.25rem rgba(255, 133, 27, 0.25); }
    #country-table-container { background: #fff; border-radius: 12px; box-shadow: 0 4px 12px rgba(0,0,0,0.05); overflow: hidden; margin-bottom: 40px; }
</style>

## 🗺️ Ressources par Destination
Pour aller plus loin, vous avez besoin de données locales précises. Nous avons compilé pour vous les meilleures sources officielles et guides experts par région.

### 🔍 Bibliothèque de liens par zone
<div class="accordion shadow-sm mb-5" id="accordionCountries">
    <!-- AMÉRIQUE DU NORD -->
    <div class="accordion-item border-0 overflow-hidden">
        <h2 class="accordion-header">
            <button class="accordion-button collapsed fw-bold" type="button" data-bs-toggle="collapse" data-bs-target="#collapseNorthAm">
                <i class="bi bi-map me-2"></i> Canada & États-Unis
            </button>
        </h2>
        <div id="collapseNorthAm" class="accordion-collapse collapse" data-bs-parent="#accordionCountries">
            <div class="accordion-body bg-light">
                <div class="row">
                    <div class="col-md-6">
                        <h6>🇨🇦 Canada</h6>
                        <ul class="list-unstyled small">
                            <li><a href="https://www.quebecoriginal.com/fr-ca" target="_blank">Bonjour Québec</a></li>
                            <li><a href="https://authentik.com/fr-fr/destinations/canada" target="_blank">Authentik Canada</a></li>
                            <li><a href="https://www.tourisme-gaspesie.com/fr/" target="_blank">Gaspésie</a></li>
                            <li><a href="https://www.voyageraucanada.com/itineraire/" target="_blank">Itinéraires Canada</a></li>
                        </ul>
                    </div>
                    <div class="col-md-6">
                        <h6>🇺🇸 États-Unis</h6>
                        <ul class="list-unstyled small">
                            <li><a href="https://www.authentikusa.com/fr-fr/voyage/voyage-etats-unis" target="_blank">Authentik USA</a></li>
                            <li><a href="https://www.visitcalifornia.com/" target="_blank">Californie</a></li>
                            <li><a href="https://www.visitflorida.com/fr.html" target="_blank">Floride</a></li>
                            <li><a href="https://www.colorado.com/" target="_blank">Colorado</a></li>
                        </ul>
                    </div>
                </div>
            </div>
        </div>
    </div>
    <!-- EUROPE -->
    <div class="accordion-item border-0 overflow-hidden">
        <h2 class="accordion-header border-top">
            <button class="accordion-button collapsed fw-bold" type="button" data-bs-toggle="collapse" data-bs-target="#collapseEurope">
                <i class="bi bi-globe-europe-africa me-2"></i> Europe
            </button>
        </h2>
        <div id="collapseEurope" class="accordion-collapse collapse" data-bs-parent="#accordionCountries">
            <div class="accordion-body bg-light">
                <div class="row">
                    <div class="col-md-6">
                        <ul class="list-unstyled small">
                            <li><a href="https://authentik.com/fr-fr/destinations/espagne" target="_blank">Espagne - Authentik</a></li>
                            <li><a href="https://authentik.com/fr-fr/destinations/italie" target="_blank">Italie - Authentik</a></li>
                            <li><a href="https://authentik.com/fr-fr/destinations/portugal" target="_blank">Portugal - Authentik</a></li>
                        </ul>
                    </div>
                    <div class="col-md-6">
                        <ul class="list-unstyled small">
                            <li><a href="https://authentik.com/fr-fr/destinations/islande" target="_blank">Islande - Authentik</a></li>
                            <li><a href="https://authentik.com/fr-fr/destinations/norvege" target="_blank">Norvège - Authentik</a></li>
                            <li><a href="https://authentik.com/fr-fr/destinations/irlande" target="_blank">Irlande - Authentik</a></li>
                        </ul>
                    </div>
                </div>
            </div>
        </div>
    </div>
    <!-- AUTRES -->
    <div class="accordion-item border-0 overflow-hidden">
        <h2 class="accordion-header border-top">
            <button class="accordion-button collapsed fw-bold" type="button" data-bs-toggle="collapse" data-bs-target="#collapseOthers">
                <i class="bi bi-compass me-2"></i> Asie, Australie & Amérique du Sud
            </button>
        </h2>
        <div id="collapseOthers" class="accordion-collapse collapse" data-bs-parent="#accordionCountries">
            <div class="accordion-body bg-light">
                <ul class="list-unstyled small">
                    <li><a href="https://www.lonelyplanet.com/argentina" target="_blank">Argentine - Lonely Planet</a></li>
                    <li><a href="https://www.lonelyplanet.com/thailand" target="_blank">Thaïlande - Lonely Planet</a></li>
                    <li><a href="https://www.lonelyplanet.com/australia" target="_blank">Australie - Lonely Planet</a></li>
                </ul>
            </div>
        </div>
    </div>
</div>

---

<div class="card border-warning shadow-sm mb-5">
    <div class="card-body p-4 p-md-5 text-center">
        <h3 class="card-title text-dark mb-3"><i class="bi bi-lightning-charge me-2 text-primary"></i> Alimentez votre IA</h3>
        <p class="lead mb-0">Trouvez des inguides spécifiques à votre destination (festivals, météo locale, routes panoramiques) et enregistrez-les ci-dessous. L'IA de TWAI guide utilisera ces "pépites locales" pour raffiner votre itinéraire.</p>
    </div>
</div>

<!-- trip-only:start -->

### 💎 Vos Pépites par Destination
<div id="country-table-container" class="border">
    <table class="table table-hover align-middle mb-0" id="country-table">
        <thead class="table-light">
            <tr>
                <th>Région</th>
                <th>Titre / Info</th>
                <th class="text-end">Actions</th>
            </tr>
        </thead>
        <tbody>
            <tr><td colspan="3" class="text-center py-4 text-muted">Chargement de vos découvertes...</td></tr>
        </tbody>
    </table>
</div>

---

<div class="card shadow-sm border-0 mb-5 overflow-hidden" id="form-container">
    <div class="card-header bg-dark text-white py-3 fw-bold">
        <i class="bi bi-geo-alt-fill me-2 text-warning"></i> <span id="form-title">Ajouter une Info Locale</span>
    </div>
    <div class="card-body p-4 p-md-5">
        <form id="multi-country-form" class="local-form">
            <input type="hidden" name="id" id="discovery-id">
            <div class="form-group mb-4">
                <label class="form-label">Pays ou Région concerné</label>
                <input type="text" name="region" id="field-region" class="form-control form-control-lg border-0 bg-light" placeholder="Ex: Bretagne, France" required>
            </div>
            <div class="form-group mb-4">
                <label class="form-label">Titre de la découverte (Nom pour vous y retrouver)</label>
                <input type="text" name="name" id="field-name" class="form-control border-0 bg-light" placeholder="Ex: Marché de Vannes le samedi matin" required>
            </div>
            <div class="form-group mb-5">
                <label class="form-label">Détails pour l'IA (Pourquoi c'est important ?)</label>
                <textarea name="content" id="field-content" class="form-control border-0 bg-light" rows="4" placeholder="Ex: Mentionné dans le guide Michelin comme incontournable pour les produits locaux. Idéal pour le déjeuner..."></textarea>
            </div>
            <div class="d-flex gap-3 pt-4 border-top">
                <button type="submit" class="btn btn-warning btn-lg px-5 shadow-sm fw-bold text-dark" id="submit-btn">
                    <i class="bi bi-save me-2"></i>Enregistrer cette pépite
                </button>
                <button type="button" class="btn btn-link text-muted btn-lg" onclick="clearForm()">Annuler</button>
            </div>
        </form>
    </div>
</div>

<div class="fab-container">
    <button class="btn btn-warning btn-circle btn-lg text-dark shadow" onclick="clearForm()" title="Nouvelle info locale">
        <i class="bi bi-plus-lg fs-3"></i>
    </button>
</div>

<script>
    let countryDiscoveries = [];
    const formID = "decouvertes-pays";
    document.addEventListener("DOMContentLoaded", function() {
        loadCountryDiscoveries();
        document.getElementById("multi-country-form").addEventListener("submit", function(e) {
            e.preventDefault();
            saveCurrentCountryDiscovery();
        });
    });
    async function loadCountryDiscoveries() {
        try {
            const res = await fetch(`/fr/home/api/get-form/${formID}`);
            const response = await res.json();
            const data = response.data;
            if (data && data.discoveries) {
                countryDiscoveries = data.discoveries;
            }
            renderList();
        } catch (err) { console.error(err); }
    }
    function renderList() {
        const tbody = document.querySelector("#country-table tbody");
        if (!countryDiscoveries || countryDiscoveries.length === 0) {
            tbody.innerHTML = `<tr><td colspan="3" class="text-center py-4 text-muted">Aucune pépite locale enregistrée.</td></tr>`;
            return;
        }
        tbody.innerHTML = "";
        countryDiscoveries.forEach(d => {
            const tr = document.createElement("tr");
            tr.innerHTML = `
                <td><span class="badge bg-primary-subtle text-primary">${d.region}</span></td>
                <td class="fw-bold text-dark">${d.name}</td>
                <td class="text-end">
                    <button onclick="editDiscovery('${d.id}')" class="btn btn-sm btn-outline-primary me-1"><i class="bi bi-pencil"></i></button>
                    <button onclick="deleteDiscovery('${d.id}')" class="btn btn-sm btn-outline-danger"><i class="bi bi-trash"></i></button>
                </td>`;
            tbody.appendChild(tr);
        });
    }
    function clearForm() {
        document.getElementById("discovery-id").value = "";
        document.getElementById("multi-country-form").reset();
        document.getElementById("form-title").innerText = "Ajouter une Info Locale";
        document.getElementById("submit-btn").innerHTML = "<i class='bi bi-save me-2'></i>Enregistrer cette pépite";
        document.getElementById("form-container").scrollIntoView({ behavior: 'smooth' });
    }
    function editDiscovery(id) {
        const d = countryDiscoveries.find(item => item.id === id);
        if (!d) return;
        document.getElementById("discovery-id").value = d.id;
        document.getElementById("field-region").value = d.region || "";
        document.getElementById("field-name").value = d.name || "";
        document.getElementById("field-content").value = d.content || "";
        document.getElementById("form-title").innerText = "Modifier : " + d.name;
        document.getElementById("submit-btn").innerHTML = "<i class='bi bi-check-lg me-2'></i>Mettre à jour";
        document.getElementById("form-container").scrollIntoView({ behavior: 'smooth' });
    }
    async function deleteDiscovery(id) {
        if (!confirm("Supprimer cette inguide locale ?")) return;
        countryDiscoveries = countryDiscoveries.filter(d => d.id !== id);
        await saveAll();
        renderList();
        if (document.getElementById("discovery-id").value === id) clearForm();
    }
    async function saveCurrentCountryDiscovery() {
        const id = document.getElementById("discovery-id").value;
        const discoData = { id: id || "cd-" + Date.now(), region: document.getElementById("field-region").value, name: document.getElementById("field-name").value, content: document.getElementById("field-content").value };
        if (id) {
            const index = countryDiscoveries.findIndex(d => d.id === id);
            if (index !== -1) countryDiscoveries[index] = discoData;
        } else {
            countryDiscoveries.push(discoData);
        }
        await saveAll();
        renderList();
        clearForm();
    }
    async function saveAll() {
        const btn = document.getElementById("submit-btn");
        const originalText = btn.innerHTML;
        btn.disabled = true;
        btn.innerHTML = "<span class='spinner-border spinner-border-sm me-2'></span>Synchronisation...";
        try {
            await fetch("/fr/home/api/save-form", {
                method: "POST",
                headers: { "Content-Type": "application/json" },
                body: JSON.stringify({ formID: formID, data: { discoveries: countryDiscoveries } })
            });
        } catch (err) { console.error(err); }
        finally { btn.disabled = false; btn.innerHTML = originalText; }
    }
</script>

<!-- trip-only:end -->

<div class="alert alert-info border-0 shadow-sm rounded-4 p-4 mt-5">
    <div class="d-flex align-items-center">
        <div class="flex-shrink-0"><i class="bi bi-info-circle-fill text-primary display-6 me-4"></i></div>
        <div>
            <h5 class="alert-heading mb-1 fw-bold">Le rôle de l'IA</h5>
            <p class="mb-0">Ces inguides seront stockées dans votre "mémoire de voyage". Lors de la génération finale de votre itinéraire, l'IA privilégiera ces points d'intérêt pour s'assurer que votre voyage ne ressemble à aucun autre.</p>
        </div>
    </div>
</div>

---

## Ressource — 1.12 courts voyages de montreal

<style>
    .btn-circle { width: 56px; height: 56px; border-radius: 28px; display: flex; align-items: center; justify-content: center; box-shadow: 0 4px 10px rgba(0,0,0,0.2); }
    .fab-container { position: fixed; bottom: 80px; right: 40px; z-index: 1000; }
    #escapades-table-container { background: #fff; border-radius: 12px; box-shadow: 0 4px 12px rgba(0,0,0,0.05); overflow: hidden; margin-bottom: 40px; }
</style>

## 🚐 Micro-aventures au départ de Montréal
Parfois, l'inspiration se trouve juste à quelques heures de route. Ces destinations sont idéales pour tester votre équipement ou simplement vous évader le temps d'un week-end.

### 📍 Destinations suggérées
<div class="row g-3 mb-5">
    <div class="col-md-6">
        <div class="list-group shadow-sm">
            <a href="https://www.google.com/maps/place/Toronto+Islands" target="_blank" class="list-group-item list-group-item-action d-flex justify-content-between align-items-center">
                <span><b>Îles de Toronto</b> - Nature et vue urbaine</span>
                <i class="bi bi-geo-alt-fill text-danger"></i>
            </a>
            <a href="https://www.google.com/maps/place/Lake+Willoughby" target="_blank" class="list-group-item list-group-item-action d-flex justify-content-between align-items-center">
                <span><b>Lac Willoughby (Vermont)</b> - Paysages alpins</span>
                <i class="bi bi-geo-alt-fill text-danger"></i>
            </a>
            <a href="https://www.google.com/maps/place/The+Distillery+District" target="_blank" class="list-group-item list-group-item-action d-flex justify-content-between align-items-center">
                <span><b>Distillery District</b> - Histoire et art</span>
                <i class="bi bi-geo-alt-fill text-danger"></i>
            </a>
        </div>
    </div>
    <div class="col-md-6">
        <div class="list-group shadow-sm">
            <a href="https://www.google.com/maps/place/Scarborough+Bluffs" target="_blank" class="list-group-item list-group-item-action d-flex justify-content-between align-items-center">
                <span><b>Scarborough Bluffs</b> - Falaises et lac</span>
                <i class="bi bi-geo-alt-fill text-danger"></i>
            </a>
            <a href="https://www.google.com/maps/place/High+Park" target="_blank" class="list-group-item list-group-item-action d-flex justify-content-between align-items-center">
                <span><b>High Park</b> - Grand air en ville</span>
                <i class="bi bi-geo-alt-fill text-danger"></i>
            </a>
            <a href="https://www.tourisme-gaspesie.com/fr/" target="_blank" class="list-group-item list-group-item-action d-flex justify-content-between align-items-center">
                <span><b>La Gaspésie</b> - Le classique du VR</span>
                <i class="bi bi-geo-alt-fill text-danger"></i>
            </a>
        </div>
    </div>
</div>

<!-- trip-only:start -->

### 💎 Mes Escapades Préférées
<div id="escapades-table-container" class="border">
    <table class="table table-hover align-middle mb-0" id="escapades-table">
        <thead class="table-light">
            <tr>
                <th>Destination</th>
                <th class="text-end">Actions</th>
            </tr>
        </thead>
        <tbody>
            <tr><td colspan="2" class="text-center py-4"><div class="spinner-border spinner-border-sm text-primary me-2"></div>Chargement de vos projets...</td></tr>
        </tbody>
    </table>
</div>

---

<div class="card shadow-sm border-0 mb-5 overflow-hidden" id="form-container">
    <div class="card-header bg-dark text-white py-3 fw-bold">
        <i class="bi bi-pin-map-fill me-2 text-warning"></i> <span id="form-title">Ajouter un projet d'escapade</span>
    </div>
    <div class="card-body p-4 p-md-5">
        <form id="multi-escapade-form" class="local-form">
            <input type="hidden" name="id" id="escapade-id">
            <div class="form-group mb-4">
                <label class="form-label">Nom de la destination</label>
                <input type="text" name="name" id="field-name" class="form-control form-control-lg border-0 bg-light" placeholder="Ex: Baie-Saint-Paul" required>
            </div>
            <div class="form-group mb-4">
                <label class="form-label">Pourquoi cette escapade ?</label>
                <textarea name="notes" id="field-notes" class="form-control border-0 bg-light" rows="3" placeholder="Ex: Idéal pour un long week-end, beaucoup de producteurs locaux à visiter..."></textarea>
            </div>
            <div class="d-flex gap-3 pt-4 border-top">
                <button type="submit" class="btn btn-warning btn-lg px-5 shadow-sm fw-bold text-dark" id="submit-btn">
                    <i class="bi bi-save me-2"></i>Enregistrer mon escapade
                </button>
                <button type="button" class="btn btn-link text-muted btn-lg" onclick="clearForm()">Annuler</button>
            </div>
        </form>
    </div>
</div>

<div class="fab-container">
    <button class="btn btn-warning btn-circle btn-lg text-dark shadow" onclick="clearForm()" title="Nouvelle escapade">
        <i class="bi bi-plus-lg fs-3"></i>
    </button>
</div>

<script>
    let escapades = [];
    const formID = "escapades-montreal";
    document.addEventListener("DOMContentLoaded", function() {
        loadEscapades();
        document.getElementById("multi-escapade-form").addEventListener("submit", function(e) {
            e.preventDefault();
            saveCurrentEscapade();
        });
    });
    async function loadEscapades() {
        try {
            const res = await fetch(`/fr/home/api/get-form/${formID}`);
            const response = await res.json();
            const data = response.data;
            if (data && data.escapades) {
                escapades = data.escapades;
            }
            renderList();
        } catch (err) { console.error(err); }
    }
    function renderList() {
        const tbody = document.querySelector("#escapades-table tbody");
        if (!escapades || escapades.length === 0) {
            tbody.innerHTML = `<tr><td colspan="2" class="text-center py-4 text-muted">Aucune escapade enregistrée.</td></tr>`;
            return;
        }
        tbody.innerHTML = "";
        escapades.forEach(e => {
            const tr = document.createElement("tr");
            tr.innerHTML = `
                <td class="fw-bold text-dark">${e.name}</td>
                <td class="text-end">
                    <button onclick="editEscapade('${e.id}')" class="btn btn-sm btn-outline-primary me-1"><i class="bi bi-pencil"></i></button>
                    <button onclick="deleteEscapade('${e.id}')" class="btn btn-sm btn-outline-danger"><i class="bi bi-trash"></i></button>
                </td>`;
            tbody.appendChild(tr);
        });
    }
    function clearForm() {
        document.getElementById("escapade-id").value = "";
        document.getElementById("multi-escapade-form").reset();
        document.getElementById("form-title").innerText = "Ajouter un projet d'escapade";
        document.getElementById("submit-btn").innerHTML = "<i class='bi bi-save me-2'></i>Enregistrer mon escapade";
        document.getElementById("form-container").scrollIntoView({ behavior: 'smooth' });
    }
    function editEscapade(id) {
        const e = escapades.find(item => item.id === id);
        if (!e) return;
        document.getElementById("escapade-id").value = e.id;
        document.getElementById("field-name").value = e.name || "";
        document.getElementById("field-notes").value = e.notes || "";
        document.getElementById("form-title").innerText = "Modifier : " + e.name;
        document.getElementById("submit-btn").innerHTML = "<i class='bi bi-save me-2'></i>Mettre à jour";
        document.getElementById("form-container").scrollIntoView({ behavior: 'smooth' });
    }
    async function deleteEscapade(id) {
        if (!confirm("Supprimer cette escapade ?")) return;
        escapades = escapades.filter(e => e.id !== id);
        await saveAll();
        renderList();
        if (document.getElementById("escapade-id").value === id) clearForm();
    }
    async function saveCurrentEscapade() {
        const id = document.getElementById("escapade-id").value;
        const eData = { id: id || "esc-" + Date.now(), name: document.getElementById("field-name").value, notes: document.getElementById("field-notes").value };
        if (id) {
            const index = escapades.findIndex(e => e.id === id);
            if (index !== -1) escapades[index] = eData;
        } else {
            escapades.push(eData);
        }
        await saveAll();
        renderList();
        clearForm();
    }
    async function saveAll() {
        const btn = document.getElementById("submit-btn");
        const originalText = btn.innerHTML;
        btn.disabled = true;
        btn.innerHTML = "<span class='spinner-border spinner-border-sm me-2'></span>Mise à jour...";
        try {
            await fetch("/fr/home/api/save-form", {
                method: "POST",
                headers: { "Content-Type": "application/json" },
                body: JSON.stringify({ formID: formID, data: { escapades: escapades } })
            });
        } catch (err) { console.error(err); }
        finally { btn.disabled = false; btn.innerHTML = originalText; }
    }
</script>

<!-- trip-only:end -->

<div class="alert alert-info border-0 shadow-sm rounded-4 p-4 mt-5">
    <div class="d-flex align-items-center">
        <div class="flex-shrink-0"><i class="bi bi-info-circle-fill text-primary display-6 me-4"></i></div>
        <div>
            <h5 class="alert-heading mb-1 fw-bold">Testez votre autonomie</h5>
            <p class="mb-0">Ces micro-aventures sont le meilleur moyen de valider votre **Profil de Voyageur** avant de partir pour une grande expédition de plusieurs mois. Utilisez l'IA pour calculer vos besoins en énergie et en eau pour ces trajets courts.</p>
        </div>
    </div>
</div>

---

## Ressource — 1.13 formulaire preferences voyage

<style>
    .btn-circle { width: 56px; height: 56px; border-radius: 28px; display: flex; align-items: center; justify-content: center; box-shadow: 0 4px 10px rgba(0,0,0,0.2); }
    .btn-orange { background-color: #ff851b; border-color: #ff851b; color: white; }
    .btn-orange:hover { background-color: #e67716; border-color: #e67716; color: white; }
    .fab-container { position: fixed; bottom: 80px; right: 40px; z-index: 1000; }
    #prefs-table-container { margin-bottom: 40px; background: #fff; padding: 20px; border-radius: 12px; box-shadow: 0 4px 12px rgba(0,0,0,0.08); }
</style>

> **Action Requise :** Précisez votre style d’hébergement, votre budget quotidien et votre tolérance à l’imprévu. Ces choix permettront à l'IA de filtrer les suggestions d'itinéraires et de logements.

### 👥 Préférences par voyageur
<div id="prefs-table-container" class="border">
    <table class="table table-hover align-middle" id="prefs-table">
        <thead class="table-light">
            <tr>
                <th>Voyageur</th>
                <th>Hébergement</th>
                <th>Budget</th>
                <th class="text-end">Actions</th>
            </tr>
        </thead>
        <tbody>
            <tr><td colspan="4" class="text-center py-4"><div class="spinner-border spinner-border-sm text-primary me-2"></div>Chargement des préférences...</td></tr>
        </tbody>
    </table>
</div>

<hr class="my-5">

<div class="card shadow-sm border-0 mb-5 overflow-hidden" id="form-container">
    <div class="card-header bg-primary text-white py-3 fw-bold">
        <i class="bi bi-sliders me-2"></i> <span id="form-title">Éditer les Préférences de Voyage</span>
    </div>
    <div class="card-body p-4 p-md-5">
        <form id="multi-prefs-form" class="local-form">
            <input type="hidden" name="id" id="pref-id">
            <div class="form-group mb-4">
                <label class="form-label fs-5">Nom du voyageur (ou profil)</label>
                <input type="text" name="nom_voyageur" id="field-nom_voyageur" class="form-control form-control-lg border-0 bg-light" placeholder="Ex: Yvan" required>
            </div>
            <div class="form-group mb-4">
                <label class="form-label">Style d’hébergement privilégié</label>
                <select name="type_hebergement" id="field-type_hebergement" class="form-control form-control-lg border-0 bg-light">
                    <option value="vanlife">Vanlife / Bivouac rustique</option>
                    <option value="camping_parcs">Campings & Parcs Nationaux</option>
                    <option value="airbnb_appart">Appartements / Airbnb</option>
                    <option value="hotels_confort">Hôtels standards & Confort</option>
                    <option value="luxe">Luxe & Expériences haut de gamme</option>
                </select>
            </div>
            <div class="form-group mb-4">
                <label class="form-label">Budget quotidien estimé (par personne)</label>
                <select name="budget_quotidien" id="field-budget_quotidien" class="form-control form-control-lg border-0 bg-light">
                    <option value="economique">Moins de 50$ (Économique)</option>
                    <option value="standard">50$ à 150$ (Standard)</option>
                    <option value="confort">150$ à 300$ (Confort)</option>
                    <option value="premium">Plus de 300$ (Premium)</option>
                </select>
            </div>
            <div class="form-group mb-4">
                <label class="form-label">Rythme de voyage souhaité</label><br>
                <div class="d-flex gap-3">
                    <label class="radio-inline border px-3 py-2 rounded bg-white shadow-sm"><input type="radio" name="rythme" id="rythme-lent" value="lent" class="me-2"> Lent</label>
                    <label class="radio-inline border px-3 py-2 rounded bg-white shadow-sm"><input type="radio" name="rythme" id="rythme-equilibre" value="equilibre" class="me-2" checked> Modéré</label>
                    <label class="radio-inline border px-3 py-2 rounded bg-white shadow-sm"><input type="radio" name="rythme" id="rythme-intensif" value="intensif" class="me-2"> Intensif</label>
                </div>
            </div>
            <div class="form-group mb-4">
                <label class="form-label">Tolérance à l'imprévu (1 à 5) : <span class="badge bg-warning text-dark ms-2" id="range-val-display">3</span></label>
                <input type="range" name="tolerance_imprevu" id="field-tolerance_imprevu" class="form-range" min="1" max="5" step="1" value="3" oninput="document.getElementById('range-val-display').innerText = this.value">
                <div class="d-flex justify-content-between small text-muted mt-2">
                    <span>Tout doit être réservé</span>
                    <span>J'adore l'aventure totale</span>
                </div>
            </div>
            <div class="form-group mb-5">
                <label class="form-label">Besoins ou contraintes particulières</label>
                <textarea name="contraintes_speciales" id="field-contraintes_speciales" class="form-control border-0 bg-light" rows="3" placeholder="Ex: Accessibilité handicapé, alimentation spécifique, travail nomade..."></textarea>
            </div>
            <div class="d-flex gap-3 pt-4 border-top">
                <button type="submit" class="btn btn-primary btn-lg px-5 shadow-sm fw-bold" id="submit-btn">
                    <i class="bi bi-save me-2"></i>Enregistrer ces préférences
                </button>
                <button type="button" class="btn btn-outline-secondary btn-lg" onclick="clearForm()">Annuler</button>
            </div>
        </form>
    </div>
</div>

<div class="fab-container">
    <button class="btn btn-orange btn-circle btn-lg text-white" onclick="clearForm()" title="Ajouter des préférences">
        <i class="bi bi-plus-lg fs-3"></i>
    </button>
</div>

<script>
    let preferences = [];
    const formID = "preferences-voyage";
    document.addEventListener("DOMContentLoaded", function() {
        loadPreferences();
        document.getElementById("multi-prefs-form").addEventListener("submit", function(e) {
            e.preventDefault();
            saveCurrentPref();
        });
    });
    async function loadPreferences() {
        try {
            const res = await fetch(`/fr/home/api/get-form/${formID}`);
            const response = await res.json();
            const data = response.data;
            if (data && data.preferences) {
                preferences = data.preferences;
            } else if (data && Object.keys(data).length > 0) {
                preferences = [{
                    id: "legacy-" + Date.now(),
                    nom_voyageur: "Principal",
                    type_hebergement: data.type_hebergement || "vanlife",
                    budget_quotidien: data.budget_quotidien || "standard",
                    rythme: data.rythme || "equilibre",
                    tolerance_imprevu: data.tolerance_imprevu || 3,
                    contraintes_speciales: data.contraintes_speciales || ""
                }];
            }
            renderTable();
        } catch (err) { console.error(err); }
    }
    function renderTable() {
        const tbody = document.querySelector("#prefs-table tbody");
        if (preferences.length === 0) {
            tbody.innerHTML = '<tr><td colspan="4" class="text-center py-4 text-muted">Aucune préférence. Cliquez sur le bouton orange (+) pour en ajouter.</td></tr>';
            return;
        }
        tbody.innerHTML = "";
        preferences.forEach(p => {
            const tr = document.createElement("tr");
            tr.innerHTML = `
                <td class="fw-bold text-primary">${p.nom_voyageur || '-'}</td>
                <td>${p.type_hebergement || '-'}</td>
                <td>${p.budget_quotidien || '-'}</td>
                <td class="text-end">
                    <button onclick="editPref('${p.id}')" class="btn btn-sm btn-outline-primary me-1"><i class="bi bi-pencil"></i></button>
                    <button onclick="deletePref('${p.id}')" class="btn btn-sm btn-outline-danger"><i class="bi bi-trash"></i></button>
                </td>`;
            tbody.appendChild(tr);
        });
    }
    function clearForm() {
        document.getElementById("pref-id").value = "";
        document.getElementById("multi-prefs-form").reset();
        document.getElementById("range-val-display").innerText = "3";
        document.getElementById("form-title").innerText = "Éditer les Préférences de Voyage";
        document.getElementById("submit-btn").innerHTML = "<i class='bi bi-save me-2'></i>Enregistrer ces préférences";
        document.getElementById("form-container").scrollIntoView({ behavior: 'smooth' });
    }
    function editPref(id) {
        const p = preferences.find(item => item.id === id);
        if (!p) return;
        clearForm();
        document.getElementById("pref-id").value = p.id;
        document.getElementById("field-nom_voyageur").value = p.nom_voyageur || "";
        document.getElementById("field-type_hebergement").value = p.type_hebergement || "vanlife";
        document.getElementById("field-budget_quotidien").value = p.budget_quotidien || "standard";
        if (p.rythme) {
            const radio = document.querySelector(`input[name="rythme"][value="${p.rythme}"]`);
            if (radio) radio.checked = true;
        }
        document.getElementById("field-tolerance_imprevu").value = p.tolerance_imprevu || 3;
        document.getElementById("range-val-display").innerText = p.tolerance_imprevu || 3;
        document.getElementById("field-contraintes_speciales").value = p.contraintes_speciales || "";
        document.getElementById("form-title").innerText = "Modifier : " + p.nom_voyageur;
        document.getElementById("submit-btn").innerHTML = "<i class='bi bi-check-lg me-2'></i>Mettre à jour les préférences";
        document.getElementById("form-container").scrollIntoView({ behavior: 'smooth' });
    }
    async function deletePref(id) {
        if (!confirm("Supprimer ?")) return;
        preferences = preferences.filter(p => p.id !== id);
        await saveAll();
        renderTable();
        if (document.getElementById("pref-id").value === id) clearForm();
    }
    async function saveCurrentPref() {
        const id = document.getElementById("pref-id").value;
        const rythmeVal = document.querySelector('input[name="rythme"]:checked')?.value || "equilibre";
        const prefData = {
            id: id || "pr-" + Date.now(),
            nom_voyageur: document.getElementById("field-nom_voyageur").value,
            type_hebergement: document.getElementById("field-type_hebergement").value,
            budget_quotidien: document.getElementById("field-budget_quotidien").value,
            rythme: rythmeVal,
            tolerance_imprevu: document.getElementById("field-tolerance_imprevu").value,
            contraintes_speciales: document.getElementById("field-contraintes_speciales").value
        };
        if (id) {
            const index = preferences.findIndex(p => p.id === id);
            if (index !== -1) preferences[index] = prefData;
        } else {
            preferences.push(prefData);
        }
        await saveAll();
        renderTable();
        clearForm();
    }
    async function saveAll() {
        const btn = document.getElementById("submit-btn");
        const originalText = btn.innerHTML;
        btn.disabled = true;
        btn.innerHTML = "<span class='spinner-border spinner-border-sm me-2'></span>Sauvegarde...";
        try {
            const res = await fetch("/fr/home/api/save-form", {
                method: "POST",
                headers: { "Content-Type": "application/json" },
                body: JSON.stringify({ formID: formID, data: { preferences: preferences } })
            });
            const resData = await res.json();
            if (resData.status !== "success") alert("Erreur lors de la sauvegarde.");
        } catch (err) { console.error(err); }
        finally { btn.disabled = false; btn.innerHTML = originalText; }
    }
</script>

---

### 🎯 Pourquoi remplir ce formulaire ?
En scellant vos préférences ici :
1.  **L'Assistant IA** ne vous proposera pas d'hôtels de luxe si vous êtes en mode Vanlife.
2.  Le **Générateur de Budget** utilisera ces tranches pour ses calculs automatiques.
3.  Vous évitez la surcharge d'inguides en ne voyant que ce qui vous correspond.

---

## Ressource — 1.14 cruise forum

<style>
    .btn-circle { width: 56px; height: 56px; border-radius: 28px; display: flex; align-items: center; justify-content: center; box-shadow: 0 4px 10px rgba(0,0,0,0.2); }
    .fab-container { position: fixed; bottom: 80px; right: 40px; z-index: 1000; }
    .forum-card { transition: all 0.3s ease; border: 1px solid rgba(0,0,0,0.05) !important; border-radius: 15px; }
    .forum-card:hover { transform: translateY(-3px); box-shadow: 0 8px 15px rgba(0,0,0,0.1) !important; }
    #tips-table-container { background: #fff; border-radius: 12px; box-shadow: 0 4px 12px rgba(0,0,0,0.05); overflow: hidden; margin-bottom: 40px; }
</style>

## 🌊 L'Intelligence Collective en Mer
Les forums de croisières sont des mines d'or. Contrairement aux brochures officielles, vous y trouverez des avis "sans filtre" sur la qualité de la nourriture, le bruit dans certaines cabines ou les meilleures astuces pour les escales.

### 🏛️ Forums de Référence
<div class="row g-3 mb-5">
    <div class="col-md-4">
        <div class="card h-100 forum-card shadow-sm">
            <div class="card-body text-center p-4">
                <i class="bi bi-chat-dots fs-1 text-primary mb-3"></i>
                <h5 class="fw-bold">Cruise Critic</h5>
                <p class="small text-muted">La plus grande communauté mondiale. Idéal pour les avis sur les navires.</p>
                <a href="http://www.cruisecritic.com/" target="_blank" class="btn btn-outline-primary btn-sm">Visiter</a>
            </div>
        </div>
    </div>
    <div class="col-md-4">
        <div class="card h-100 forum-card shadow-sm">
            <div class="card-body text-center p-4">
                <i class="bi bi-people fs-1 text-primary mb-3"></i>
                <h5 class="fw-bold">Cruise Addicts</h5>
                <p class="small text-muted">Pour les nouvelles fraîches et les mises à jour des compagnies.</p>
                <a href="http://www.cruise-addicts.com/" target="_blank" class="btn btn-outline-primary btn-sm">Visiter</a>
            </div>
        </div>
    </div>
    <div class="col-md-4">
        <div class="card h-100 forum-card shadow-sm">
            <div class="card-body text-center p-4">
                <i class="bi bi-anchor fs-1 text-primary mb-3"></i>
                <h5 class="fw-bold">Cruisemates</h5>
                <p class="small text-muted">Excellent pour partager des expériences vécues et poser des questions.</p>
                <a href="http://www.cruisemates.com/" target="_blank" class="btn btn-outline-primary btn-sm">Visiter</a>
            </div>
        </div>
    </div>
</div>

<!-- trip-only:start -->

### 📌 Votre Carnet d'Astuces
<div id="tips-table-container" class="border">
    <table class="table table-hover align-middle mb-0" id="tips-table">
        <thead class="table-light">
            <tr>
                <th>Sujet / Thématique</th>
                <th class="text-end">Actions</th>
            </tr>
        </thead>
        <tbody>
            <tr><td colspan="2" class="text-center py-4 text-muted">Chargement de vos notes...</td></tr>
        </tbody>
    </table>
</div>

---

<div class="card shadow-sm border-0 mb-5 overflow-hidden" id="form-container">
    <div class="card-header bg-dark text-white py-3 fw-bold">
        <i class="bi bi-bookmark-star me-2 text-warning"></i> <span id="form-title">Noter une Astuce de Forum</span>
    </div>
    <div class="card-body p-4 p-md-5">
        <form id="multi-forum-tips-form" class="local-form">
            <input type="hidden" name="id" id="tip-id">
            <div class="form-group mb-4">
                <label class="form-label">Sujet (ex: Cabine, Escale, Forfait Boisson)</label>
                <input type="text" name="topic" id="field-topic" class="form-control form-control-lg border-0 bg-light" placeholder="Ex: Forfait internet sur le Wonder of the Seas" required>
            </div>
            <div class="form-group mb-5">
                <label class="form-label">L'astuce ou le conseil à retenir</label>
                <textarea name="tip" id="field-tip" class="form-control border-0 bg-light" rows="4" placeholder="Ex: Sur ce navire, les cabines du pont 8 sont les plus calmes car elles sont situées entre deux ponts de cabines..."></textarea>
            </div>
            <div class="d-flex gap-3 pt-4 border-top">
                <button type="submit" class="btn btn-primary btn-lg px-5 shadow-sm fw-bold" id="submit-btn">
                    <i class="bi bi-save me-2"></i>Mémoriser cette astuce
                </button>
                <button type="button" class="btn btn-link text-muted btn-lg" onclick="clearForm()">Annuler</button>
            </div>
        </form>
    </div>
</div>

<div class="fab-container">
    <button class="btn btn-warning btn-circle btn-lg text-dark shadow" onclick="clearForm()" title="Nouvelle astuce">
        <i class="bi bi-plus-lg fs-3"></i>
    </button>
</div>

<script>
    let forumTips = [];
    const formID = "astuces-forum";
    document.addEventListener("DOMContentLoaded", function() {
        loadTips();
        document.getElementById("multi-forum-tips-form").addEventListener("submit", function(e) {
            e.preventDefault();
            saveCurrentTip();
        });
    });
    async function loadTips() {
        try {
            const res = await fetch(`/fr/home/api/get-form/${formID}`);
            const response = await res.json();
            const data = response.data;
            if (data && data.tips) {
                forumTips = data.tips;
            }
            renderList();
        } catch (err) { console.error(err); }
    }
    function renderList() {
        const tbody = document.querySelector("#tips-table tbody");
        if (!forumTips || forumTips.length === 0) {
            tbody.innerHTML = `<tr><td colspan="2" class="text-center py-4 text-muted">Votre carnet est vide.</td></tr>`;
            return;
        }
        tbody.innerHTML = "";
        forumTips.forEach(t => {
            const tr = document.createElement("tr");
            tr.innerHTML = `
                <td class="fw-bold text-dark">${t.topic}</td>
                <td class="text-end">
                    <button onclick="editTip('${t.id}')" class="btn btn-sm btn-outline-primary me-1"><i class="bi bi-pencil"></i></button>
                    <button onclick="deleteTip('${t.id}')" class="btn btn-sm btn-outline-danger"><i class="bi bi-trash"></i></button>
                </td>`;
            tbody.appendChild(tr);
        });
    }
    function clearForm() {
        document.getElementById("tip-id").value = "";
        document.getElementById("multi-forum-tips-form").reset();
        document.getElementById("form-title").innerText = "Noter une Astuce de Forum";
        document.getElementById("submit-btn").innerHTML = "<i class='bi bi-save me-2'></i>Mémoriser cette astuce";
        document.getElementById("form-container").scrollIntoView({ behavior: 'smooth' });
    }
    function editTip(id) {
        const t = forumTips.find(item => item.id === id);
        if (!t) return;
        document.getElementById("tip-id").value = t.id;
        document.getElementById("field-topic").value = t.topic || "";
        document.getElementById("field-tip").value = t.tip || "";
        document.getElementById("form-title").innerText = "Modifier l'astuce";
        document.getElementById("submit-btn").innerHTML = "<i class='bi bi-check-lg me-2'></i>Mettre à jour";
        document.getElementById("form-container").scrollIntoView({ behavior: 'smooth' });
    }
    async function deleteTip(id) {
        if (!confirm("Supprimer cette note ?")) return;
        forumTips = forumTips.filter(t => t.id !== id);
        await saveAll();
        renderList();
        if (document.getElementById("tip-id").value === id) clearForm();
    }
    async function saveCurrentTip() {
        const id = document.getElementById("tip-id").value;
        const tipData = { id: id || "tip-" + Date.now(), topic: document.getElementById("field-topic").value, tip: document.getElementById("field-tip").value };
        if (id) {
            const index = forumTips.findIndex(t => t.id === id);
            if (index !== -1) forumTips[index] = tipData;
        } else {
            forumTips.push(tipData);
        }
        await saveAll();
        renderList();
        clearForm();
    }
    async function saveAll() {
        const btn = document.getElementById("submit-btn");
        const originalText = btn.innerHTML;
        btn.disabled = true;
        btn.innerHTML = "<span class='spinner-border spinner-border-sm me-2'></span>Sauvegarde...";
        try {
            await fetch("/fr/home/api/save-form", {
                method: "POST",
                headers: { "Content-Type": "application/json" },
                body: JSON.stringify({ formID: formID, data: { tips: forumTips } })
            });
        } catch (err) { console.error(err); }
        finally { btn.disabled = false; btn.innerHTML = originalText; }
    }
</script>

<!-- trip-only:end -->

<div class="alert alert-info border-0 shadow-sm rounded-4 p-4 mt-5">
    <div class="d-flex align-items-center">
        <div class="flex-shrink-0"><i class="bi bi-info-circle-fill text-primary display-6 me-4"></i></div>
        <div>
            <h5 class="alert-heading mb-1 fw-bold">Un conseil d'ami</h5>
            <p class="mb-0">Ne croyez pas tout ce que vous lisez. Si une inguide vous semble capitale (ex: un visa requis), vérifiez-la toujours sur un site officiel gouvernemental avant de l'ajouter à votre planification IA.</p>
        </div>
    </div>
</div>

---

## Ressource — 1.15 formulaire bilan chapitre 1

<p align="center">
    <i class="bi bi-trophy text-warning display-1"></i>
</p>

## 🚀 Félicitations !
Vous venez de franchir la première grande étape de votre transguide en voyageur bien préparé. Vous avez maintenant une vision plus claire de votre "Pourquoi" et de votre univers visuel.

---

<div class="card border-primary shadow-sm mb-5 overflow-hidden">
    <div class="card-header bg-primary text-white py-3 fw-bold text-center">
        <i class="bi bi-patch-check me-2"></i> VOTRE VALIDATION — PILIER 1
    </div>
    <div class="card-body p-4 p-md-5">
        <form class="local-form" data-form-id="bilan-pilier-1">
            <div class="form-group mb-4">
                <label class="form-label">Avez-vous terminé votre Moodboard visuel ?</label>
                <div class="d-flex gap-3">
                    <label class="radio-inline border px-3 py-2 rounded bg-white shadow-sm"><input type="radio" name="moodboard_status" value="oui" class="me-2" required> ✅ Oui, terminé</label>
                    <label class="radio-inline border px-3 py-2 rounded bg-white shadow-sm"><input type="radio" name="moodboard_status" value="encontenu" class="me-2"> ⏳ En contenu</label>
                </div>
            </div>
            <div class="form-group mb-4">
                <label class="form-label">Quel est votre plus grand "déclic" ou blocage restant ?</label>
                <textarea name="biggest_takeaway" class="form-control border-0 bg-light" rows="3" placeholder="Ex: J'ai compris que mon rythme était trop rapide..."></textarea>
            </div>
            <div class="form-group mb-5">
                <label class="form-label">Niveau d'excitation pour votre projet (1 à 10) : <span class="badge bg-warning text-dark ms-2" id="excitement-val">8</span></label>
                <input type="range" name="excitement_level" class="form-range" min="1" max="10" step="1" value="8" oninput="document.getElementById('excitement-val').innerText = this.value">
                <div class="d-flex justify-content-between small text-muted"><span>Calme</span><span>Totalement motivé !</span></div>
            </div>
            <div class="text-center pt-4 border-top">
                <button type="submit" class="btn btn-primary btn-lg px-5 shadow-sm fw-bold">
                    <i class="bi bi-award me-2"></i>VALIDER MON PILIER 1 & OBTENIR MON BADGE
                </button>
            </div>
        </form>
    </div>
</div>

<div class="alert alert-success border-0 shadow-sm rounded-4 p-4 text-center">
    <h5 class="alert-heading fw-bold mb-3"><i class="bi bi-rocket-takeoff me-2"></i> Prêt pour la suite ?</h5>
    <p class="mb-0">Une fois ce bilan enregistré, vous êtes officiellement prêt à passer au <b>Pilier 2 : La Planification IA</b>. C'est là que vos rêves commencent à se transformer en un itinéraire concret, seconde par seconde.</p>
</div>

---

## Ressource — 1.16 reseau solidaire francophone

# Réseau solidaire francophone&nbsp;- Ensemble, vivons l’aventure et l’entraide partout dans le monde

Le Réseau Solidaire Francophone (RSF) regroupe des expatriés francophones à travers le monde pour aider les voyageurs et nouveaux arrivants à s'intégrer.  
Le réseau fonctionne sur la solidarité et l’entraide, partageant conseils, inguides et ressources pour faciliter la vie dans le pays d’accueil, que ce soit pour le voyage, le volontariat ou l’expatriation.

- [Tout Costa Rica](https://www.toutcostarica.com/) 🇨🇷  Communauté francophone au Costa Rica aidant à trouver logement, démarches, infos locales et bons plans.
- [Tout Equateur](https://www.toutequateur.com) 🇪🇨  Pour les francophones vivant ou s’installant en Équateur, partage de culture locale et conseils pratiques.
- [Tout Pérou](https://toutperou.com) 🇵🇪  Plateforme d’entraide pour expatriés et voyageurs francophones : conseils, itinéraires, hébergements, transports et services locaux fiables.

---

### Témoignages ✨

Manon et moi avons voyagé avec **Tout Costa Rica** et **Tout Equateur**, et l’expérience a dépassé toutes nos attentes. Leur soutien a rendu notre voyage plus serein et ajouté une touche personnelle et chaleureuse. Grâce à leur expertise, nous avons vécu des moments inoubliables, que nous n’aurions jamais pu organiser seuls. Leur équipe est attentionnée, professionnelle et passionnée. Je recommande leurs services sans hésitation à tous ceux qui souhaitent vivre une expérience de voyage unique et enrichissante !

---

## Ressource — 1.2 formulaire profil personnel

<style>
    .btn-circle { width: 56px; height: 56px; border-radius: 28px; display: flex; align-items: center; justify-content: center; box-shadow: 0 4px 10px rgba(0,0,0,0.2); }
    .btn-orange { background-color: #ff851b; border-color: #ff851b; color: white; }
    .btn-orange:hover { background-color: #e67716; border-color: #e67716; color: white; }
    .fab-container { position: fixed; bottom: 80px; right: 40px; z-index: 1000; }
    #profiles-table-container { margin-bottom: 40px; background: #fff; padding: 20px; border-radius: 12px; box-shadow: 0 4px 12px rgba(0,0,0,0.08); }
    .no-ai { border-left: 3px solid #ff851b; }
</style>

> **Action Requise :** Pour que l’IA de TWAI guide puisse vous conseiller avec précision, elle a besoin de connaître vos bases (âge, langue, région, rythme souhaité).

### 👥 Profils de voyageurs enregistrés
<div id="profiles-table-container" class="border">
    <table class="table table-hover align-middle" id="profiles-table">
        <thead class="table-light">
            <tr>
                <th>Prénom</th>
                <th>Nom</th>
                <th>Âge</th>
                <th>Résidence</th>
                <th class="text-end">Actions</th>
            </tr>
        </thead>
        <tbody>
            <tr><td colspan="5" class="text-center py-4"><div class="spinner-border spinner-border-sm text-primary me-2"></div>Chargement des profils...</td></tr>
        </tbody>
    </table>
</div>

<hr class="my-5">

<div class="card shadow-sm border-0 mb-5 overflow-hidden">
    <div class="card-header bg-primary text-white py-3 fw-bold">
        <i class="bi bi-person-plus-fill me-2"></i> <span id="form-title">Éditer un Profil de Voyageur</span>
    </div>
    <div class="card-body p-4 p-md-5">
        <form id="multi-profile-form" class="local-form">
            <input type="hidden" name="id" id="profile-id">
            <div class="row mb-4">
                <div class="col-md-6">
                    <div class="form-group">
                        <label>Prénom</label>
                        <input type="text" name="prenom" id="field-prenom" class="form-control form-control-lg bg-light border-0" placeholder="Ex: Yvan" required>
                    </div>
                </div>
                <div class="col-md-6">
                    <div class="form-group no-ai-container">
                        <span class="no-ai-badge"><i class="bi bi-shield-lock-fill me-1"></i>HORS-IA</span>
                        <label>Nom de famille (Confidentiel)</label>
                        <input type="text" name="nom" id="field-nom" class="form-control form-control-lg no-ai bg-light border-0" placeholder="Ex: Ross">
                    </div>
                </div>
            </div>
            <div class="row mb-4">
                <div class="col-md-6">
                    <div class="form-group">
                        <label>Âge</label>
                        <input type="number" name="age" id="field-age" class="form-control form-control-lg bg-light border-0" placeholder="Ex: 56">
                    </div>
                </div>
                <div class="col-md-6">
                    <div class="form-group">
                        <label>Pays / Région de résidence</label>
                        <input type="text" name="residence" id="field-residence" class="form-control form-control-lg bg-light border-0" placeholder="Ex: Québec, Canada">
                    </div>
                </div>
            </div>
            <div class="form-group mb-4">
                <label>Langue préférée</label>
                <select name="langue" id="field-langue" class="form-control form-control-lg bg-light border-0">
                    <option value="fr">Français</option>
                    <option value="en">Anglais</option>
                    <option value="es">Espagnol</option>
                </select>
            </div>
            <div class="form-group mb-4">
                <label class="mb-3">Disponibilités pour voyager</label><br>
                <div class="d-flex flex-wrap gap-3">
                    <label class="checkbox-inline border px-3 py-2 rounded bg-white shadow-sm"><input type="checkbox" name="dispo_printemps" id="field-dispo_printemps" class="me-2"> Printemps</label>
                    <label class="checkbox-inline border px-3 py-2 rounded bg-white shadow-sm"><input type="checkbox" name="dispo_ete" id="field-dispo_ete" class="me-2"> Été</label>
                    <label class="checkbox-inline border px-3 py-2 rounded bg-white shadow-sm"><input type="checkbox" name="dispo_automne" id="field-dispo_automne" class="me-2"> Automne</label>
                    <label class="checkbox-inline border px-3 py-2 rounded bg-white shadow-sm"><input type="checkbox" name="dispo_hiver" id="field-dispo_hiver" class="me-2"> Hiver</label>
                </div>
            </div>
            <div class="form-group mb-5">
                <label class="mb-3">Intérêts principaux</label><br>
                <div class="d-flex flex-wrap gap-3">
                    <label class="checkbox-inline border px-3 py-2 rounded bg-white shadow-sm"><input type="checkbox" name="int_nature" id="field-int_nature" class="me-2"> Nature</label>
                    <label class="checkbox-inline border px-3 py-2 rounded bg-white shadow-sm"><input type="checkbox" name="int_culture" id="field-int_culture" class="me-2"> Culture</label>
                    <label class="checkbox-inline border px-3 py-2 rounded bg-white shadow-sm"><input type="checkbox" name="int_aventure" id="field-int_aventure" class="me-2"> Aventure</label>
                    <label class="checkbox-inline border px-3 py-2 rounded bg-white shadow-sm"><input type="checkbox" name="int_gastronomie" id="field-int_gastronomie" class="me-2"> Gastronomie</label>
                </div>
            </div>
            <div class="d-flex gap-3 pt-3">
                <button type="submit" class="btn btn-primary btn-lg px-5 shadow-sm fw-bold" id="submit-btn">
                    <i class="bi bi-save me-2"></i>Enregistrer le profil
                </button>
                <button type="button" class="btn btn-outline-secondary btn-lg" onclick="clearForm()">Annuler</button>
            </div>
        </form>
    </div>
</div>

<div class="fab-container">
    <button class="btn btn-orange btn-circle btn-lg text-white" onclick="clearForm()" title="Ajouter un profil">
        <i class="bi bi-plus-lg fs-3"></i>
    </button>
</div>

<script>
    let profiles = [];
    const formID = "profil-personnel";
    document.addEventListener("DOMContentLoaded", function() {
        loadProfiles();
        document.getElementById("multi-profile-form").addEventListener("submit", function(e) {
            e.preventDefault();
            saveCurrentProfile();
        });
    });
    async function loadProfiles() {
        try {
            const res = await fetch(`/fr/home/api/get-form/${formID}`);
            const response = await res.json();
            const data = response.data;
            if (data && data.profiles) {
                profiles = data.profiles;
            } else if (data && Object.keys(data).length > 0) {
                profiles = [{
                    id: "legacy-" + Date.now(),
                    prenom: data.nom_complet || "Principal",
                    nom: "",
                    age: data.age || "",
                    residence: data.residence || "",
                    langue: data.langue || "fr",
                    dispo_printemps: !!data.dispo_printemps,
                    dispo_ete: !!data.dispo_ete,
                    dispo_automne: !!data.dispo_automne,
                    dispo_hiver: !!data.dispo_hiver,
                    int_nature: !!data.int_nature,
                    int_culture: !!data.int_culture,
                    int_aventure: !!data.int_aventure,
                    int_gastronomie: !!data.int_gastronomie
                }];
            }
            renderTable();
        } catch (err) { console.error("Erreur chargement profils:", err); }
    }
    function renderTable() {
        const tbody = document.querySelector("#profiles-table tbody");
        if (profiles.length === 0) {
            tbody.innerHTML = '<tr><td colspan="5" class="text-center py-4 text-muted">Aucun profil enregistré. Cliquez sur le bouton orange (+) pour en ajouter un.</td></tr>';
            return;
        }
        tbody.innerHTML = "";
        profiles.forEach(p => {
            const tr = document.createElement("tr");
            tr.innerHTML = `
                <td class="fw-bold">${p.prenom || '-'}</td>
                <td>${p.nom || '-'}</td>
                <td>${p.age || '-'}</td>
                <td>${p.residence || '-'}</td>
                <td class="text-end">
                    <button onclick="editProfile('${p.id}')" class="btn btn-sm btn-outline-primary me-1"><i class="bi bi-pencil"></i></button>
                    <button onclick="deleteProfile('${p.id}')" class="btn btn-sm btn-outline-danger"><i class="bi bi-trash"></i></button>
                </td>`;
            tbody.appendChild(tr);
        });
    }
    function clearForm() {
        document.getElementById("profile-id").value = "";
        document.getElementById("multi-profile-form").reset();
        document.getElementById("form-title").innerText = "Ajouter un Nouveau Profil";
        document.getElementById("submit-btn").innerHTML = "<i class='bi bi-save me-2'></i>Enregistrer le profil";
        document.getElementById("field-prenom").focus();
        document.getElementById("form-title").scrollIntoView({ behavior: 'smooth' });
    }
    function editProfile(id) {
        const p = profiles.find(item => item.id === id);
        if (!p) return;
        document.getElementById("profile-id").value = p.id;
        document.getElementById("field-prenom").value = p.prenom || "";
        document.getElementById("field-nom").value = p.nom || "";
        document.getElementById("field-age").value = p.age || "";
        document.getElementById("field-residence").value = p.residence || "";
        document.getElementById("field-langue").value = p.langue || "fr";
        document.getElementById("field-dispo_printemps").checked = !!p.dispo_printemps;
        document.getElementById("field-dispo_ete").checked = !!p.dispo_ete;
        document.getElementById("field-dispo_automne").checked = !!p.dispo_automne;
        document.getElementById("field-dispo_hiver").checked = !!p.dispo_hiver;
        document.getElementById("field-int_nature").checked = !!p.int_nature;
        document.getElementById("field-int_culture").checked = !!p.int_culture;
        document.getElementById("field-int_aventure").checked = !!p.int_aventure;
        document.getElementById("field-int_gastronomie").checked = !!p.int_gastronomie;
        document.getElementById("form-title").innerText = "Modifier le Profil de " + p.prenom;
        document.getElementById("submit-btn").innerHTML = "<i class='bi bi-check-lg me-2'></i>Mettre à jour ce profil";
        document.getElementById("field-prenom").focus();
        document.getElementById("form-title").scrollIntoView({ behavior: 'smooth' });
    }
    async function deleteProfile(id) {
        if (!confirm("Supprimer ce profil ?")) return;
        profiles = profiles.filter(p => p.id !== id);
        await saveAll();
        renderTable();
        if (document.getElementById("profile-id").value === id) clearForm();
    }
    async function saveCurrentProfile() {
        const id = document.getElementById("profile-id").value;
        const profileData = {
            id: id || "p-" + Date.now(),
            prenom: document.getElementById("field-prenom").value,
            nom: document.getElementById("field-nom").value,
            age: document.getElementById("field-age").value,
            residence: document.getElementById("field-residence").value,
            langue: document.getElementById("field-langue").value,
            dispo_printemps: document.getElementById("field-dispo_printemps").checked,
            dispo_ete: document.getElementById("field-dispo_ete").checked,
            dispo_automne: document.getElementById("field-dispo_automne").checked,
            dispo_hiver: document.getElementById("field-dispo_hiver").checked,
            int_nature: document.getElementById("field-int_nature").checked,
            int_culture: document.getElementById("field-int_culture").checked,
            int_aventure: document.getElementById("field-int_aventure").checked,
            int_gastronomie: document.getElementById("field-int_gastronomie").checked
        };
        if (id) {
            const index = profiles.findIndex(p => p.id === id);
            if (index !== -1) profiles[index] = profileData;
        } else {
            profiles.push(profileData);
        }
        await saveAll();
        renderTable();
        clearForm();
    }
    async function saveAll() {
        const btn = document.getElementById("submit-btn");
        const originalText = btn.innerHTML;
        btn.disabled = true;
        btn.innerHTML = "<span class='spinner-border spinner-border-sm me-2'></span>Sauvegarde...";
        try {
            const res = await fetch("/fr/home/api/save-form", {
                method: "POST",
                headers: { "Content-Type": "application/json" },
                body: JSON.stringify({ formID: formID, data: { profiles: profiles } })
            });
            const resData = await res.json();
            if (resData.status !== "success") alert("Erreur lors de la sauvegarde.");
        } catch (err) { console.error("Save error:", err); }
        finally { btn.disabled = false; btn.innerHTML = originalText; }
    }
</script>

---

### 🎯 Pourquoi remplir ces infos ?
En sauvegardant ce formulaire localement :
1.  **L’Assistant IA** pourra lire ces données pour personnaliser ses réponses.
2.  Vos **Checklists** seront automatiquement filtrées selon vos intérêts.
3.  Vous pouvez revenir modifier ces inguides à tout moment.

---

## Ressource — 1.3 formulaire culinaire

<style>
    .btn-circle { width: 56px; height: 56px; border-radius: 28px; display: flex; align-items: center; justify-content: center; box-shadow: 0 4px 10px rgba(0,0,0,0.2); }
    .fab-container { position: fixed; bottom: 80px; right: 40px; z-index: 1000; }
    #cuisine-table-container { background: #fff; border-radius: 12px; box-shadow: 0 4px 12px rgba(0,0,0,0.05); overflow: hidden; margin-bottom: 40px; }
</style>

> **Action Requise :** Définissez vos habitudes alimentaires pour des conseils sur mesure. Ces détails aideront l'IA à vous suggérer des marchés ou des restaurants adaptés.

### 👥 Profils culinaires par voyageur
<div id="cuisine-table-container" class="border">
<table class="table table-hover align-middle mb-0" id="cuisine-table">
<thead class="table-light">
<tr>
<th>Voyageur</th>
<th>Régime</th>
<th class="text-end">Actions</th>
</tr>
</thead>
<tbody>
<tr><td colspan="3" class="text-center py-4 text-muted"><div class="spinner-border spinner-border-sm text-primary me-2"></div>Chargement des profils...</td></tr>
</tbody>
</table>
</div>

---

<div class="card shadow-sm border-0 mb-5 overflow-hidden" id="form-container">
<div class="card-header bg-primary text-white py-3 fw-bold">
<i class="bi bi-egg-fried me-2"></i> <span id="form-title">AJOUTER UN PROFIL CULINAIRE</span>
</div>
<div class="card-body p-4 p-md-5">
<form id="multi-cuisine-form" class="local-form">
<input type="hidden" name="id" id="cuisine-id">
<div class="form-group mb-4">
<label class="form-label fs-5">Nom du voyageur</label>
<input type="text" name="nom_voyageur" id="field-nom_voyageur" class="form-control form-control-lg border-0 bg-light" placeholder="Ex: Yvan" required>
</div>
<div class="form-group mb-4">
<label>Régime Alimentaire principal</label>
<select name="regime_alimentaire" id="field-regime_alimentaire" class="form-select form-select-lg border-0 bg-light">
<option value="omnivore">Omnivore (Mange de tout)</option>
<option value="flexitarien">Flexitarien (Peu de viande)</option>
<option value="vegetarien">Végétarien</option>
<option value="vegetalien">Végétalien / Vegan</option>
<option value="paleo_keto">Paléo / Keto</option>
<option value="sans_gluten">Sans Gluten</option>
</select>
</div>
<div class="form-group mb-4">
<label>Allergies culinaires ou aversions fortes</label>
<input type="text" name="allergies_culinaires" id="field-allergies_culinaires" class="form-control border-0 bg-light" placeholder="Ex: Arachides, Lactose, Coriandre...">
</div>
<div class="form-group mb-4">
<label>Préférences de préparation</label><br>
<div class="d-flex flex-wrap gap-2">
<label class="checkbox-inline border px-3 py-2 rounded bg-white shadow-sm"><input type="checkbox" name="pref_cuisine_autonome" id="field-pref_cuisine_autonome" class="me-2"> Cuisiner soi-même</label>
<label class="checkbox-inline border px-3 py-2 rounded bg-white shadow-sm"><input type="checkbox" name="pref_street_food" id="field-pref_street_food" class="me-2"> Street Food</label>
<label class="checkbox-inline border px-3 py-2 rounded bg-white shadow-sm"><input type="checkbox" name="pref_restos_locaux" id="field-pref_restos_locaux" class="me-2"> Petits restos locaux</label>
<label class="checkbox-inline border px-3 py-2 rounded bg-white shadow-sm"><input type="checkbox" name="pref_gastronomie" id="field-pref_gastronomie" class="me-2"> Gastronomie</label>
</div>
</div>
<div class="form-group mb-5">
<label>Intérêt pour les boissons locales (Vins, bières, thé...)</label>
<select name="interet_boissons" id="field-interet_boissons" class="form-select border-0 bg-light">
<option value="faible">Peu d'importance</option>
<option value="moyen">Aime découvrir</option>
<option value="eleve">Priorité (Dégustations)</option>
</select>
</div>
<div class="d-flex gap-3 pt-4 border-top">
<button type="submit" class="btn btn-primary btn-lg px-5 shadow-sm fw-bold" id="submit-btn">
<i class="bi bi-save me-2"></i>ENREGISTRER LE PROFIL
</button>
<button type="button" class="btn btn-link text-muted btn-lg" onclick="clearForm()">Annuler</button>
</div>
</form>
</div>
</div>

<div class="fab-container">
<button class="btn btn-orange btn-circle btn-lg text-white shadow" onclick="clearForm()" title="Ajouter un profil culinaire">
<i class="bi bi-plus-lg fs-3"></i>
</button>
</div>

<script>
    let cuisineProfiles = [];
    const formID = "profil-culinaire";
    document.addEventListener("DOMContentLoaded", function() {
        loadCuisine();
        document.getElementById("multi-cuisine-form").addEventListener("submit", function(e) {
            e.preventDefault();
            saveCurrentCuisine();
        });
    });
    async function loadCuisine() {
        try {
            const res = await fetch(`/fr/home/api/get-form/${formID}`);
            const response = await res.json();
            const data = response.data;
            if (data && data.profiles) {
                cuisineProfiles = data.profiles;
            } else if (data && Object.keys(data).length > 0) {
                cuisineProfiles = [{ id: "legacy-" + Date.now(), nom_voyageur: "Principal", ...data }];
            }
            renderTable();
        } catch (err) { console.error(err); }
    }
    function renderTable() {
        const tbody = document.querySelector("#cuisine-table tbody");
        if (!cuisineProfiles || cuisineProfiles.length === 0) {
            tbody.innerHTML = '<tr><td colspan="3" class="text-center py-4 text-muted">Aucun profil culinaire. Cliquez sur + pour en ajouter un.</td></tr>';
            return;
        }
        tbody.innerHTML = "";
        cuisineProfiles.forEach(p => {
            const tr = document.createElement("tr");
            tr.innerHTML = `
                <td class="fw-bold text-dark">${p.nom_voyageur}</td>
                <td class="text-capitalize">${p.regime_alimentaire}</td>
                <td class="text-end">
                    <button onclick="editCuisine('${p.id}')" class="btn btn-sm btn-outline-primary me-1"><i class="bi bi-pencil"></i></button>
                    <button onclick="deleteCuisine('${p.id}')" class="btn btn-sm btn-outline-danger"><i class="bi bi-trash"></i></button>
                </td>`;
            tbody.appendChild(tr);
        });
    }
    function clearForm() {
        document.getElementById("cuisine-id").value = "";
        document.getElementById("multi-cuisine-form").reset();
        document.getElementById("form-title").innerText = "AJOUTER UN PROFIL CULINAIRE";
        document.getElementById("submit-btn").innerHTML = "<i class='bi bi-save me-2'></i>ENREGISTRER LE PROFIL";
        document.getElementById("form-container").scrollIntoView({ behavior: 'smooth' });
    }
    function editCuisine(id) {
        const p = cuisineProfiles.find(item => item.id === id);
        if (!p) return;
        clearForm();
        document.getElementById("cuisine-id").value = p.id;
        document.getElementById("field-nom_voyageur").value = p.nom_voyageur || "";
        document.getElementById("field-regime_alimentaire").value = p.regime_alimentaire || "omnivore";
        document.getElementById("field-allergies_culinaires").value = p.allergies_culinaires || "";
        document.getElementById("field-pref_cuisine_autonome").checked = !!p.pref_cuisine_autonome;
        document.getElementById("field-pref_street_food").checked = !!p.pref_street_food;
        document.getElementById("field-pref_restos_locaux").checked = !!p.pref_restos_locaux;
        document.getElementById("field-pref_gastronomie").checked = !!p.pref_gastronomie;
        document.getElementById("field-interet_boissons").value = p.interet_boissons || "moyen";
        document.getElementById("form-title").innerText = "MODIFIER : " + p.nom_voyageur;
        document.getElementById("submit-btn").innerHTML = "<i class='bi bi-save me-2'></i>METTRE À JOUR";
        document.getElementById("form-container").scrollIntoView({ behavior: 'smooth' });
    }
    async function deleteCuisine(id) {
        if (!confirm("Supprimer ce profil ?")) return;
        cuisineProfiles = cuisineProfiles.filter(p => p.id !== id);
        await saveAll();
        renderTable();
        if (document.getElementById("cuisine-id").value === id) clearForm();
    }
    async function saveCurrentCuisine() {
        const id = document.getElementById("cuisine-id").value;
        const profileData = {
            id: id || "c-" + Date.now(),
            nom_voyageur: document.getElementById("field-nom_voyageur").value,
            regime_alimentaire: document.getElementById("field-regime_alimentaire").value,
            allergies_culinaires: document.getElementById("field-allergies_culinaires").value,
            pref_cuisine_autonome: document.getElementById("field-pref_cuisine_autonome").checked,
            pref_street_food: document.getElementById("field-pref_street_food").checked,
            pref_restos_locaux: document.getElementById("field-pref_restos_locaux").checked,
            pref_gastronomie: document.getElementById("field-pref_gastronomie").checked,
            interet_boissons: document.getElementById("field-interet_boissons").value
        };
        if (id) {
            const index = cuisineProfiles.findIndex(p => p.id === id);
            if (index !== -1) cuisineProfiles[index] = profileData;
        } else {
            cuisineProfiles.push(profileData);
        }
        await saveAll();
        renderTable();
        clearForm();
    }
    async function saveAll() {
        const btn = document.getElementById("submit-btn");
        const originalText = btn.innerHTML;
        btn.disabled = true;
        btn.innerHTML = "<span class='spinner-border spinner-border-sm me-2'></span>Sauvegarde...";
        try {
            await fetch("/fr/home/api/save-form", {
                method: "POST",
                headers: { "Content-Type": "application/json" },
                body: JSON.stringify({ formID: formID, data: { profiles: cuisineProfiles } })
            });
        } catch (err) { console.error(err); }
        finally { btn.disabled = false; btn.innerHTML = originalText; }
    }
</script>

---

<div class="alert alert-info border-0 shadow-sm rounded-4 p-4">
<div class="d-flex align-items-center">
<div class="flex-shrink-0"><i class="bi bi-info-circle-fill text-primary display-6 me-4"></i></div>
<div>
<h5 class="alert-heading mb-1 fw-bold">Optimisation Budgétaire</h5>
<p class="mb-0">En précisant si vous préférez cuisiner ou aller au restaurant, l'IA ajustera vos prévisions budgétaires quotidiennes pour refléter la réalité du terrain dans votre pays de destination.</p>
</div>
</div>
</div>

---

## Ressource — 1.4 formulaire social

<style>
    .btn-circle { width: 56px; height: 56px; border-radius: 28px; display: flex; align-items: center; justify-content: center; box-shadow: 0 4px 10px rgba(0,0,0,0.2); }
    .btn-orange { background-color: #ff851b; border-color: #ff851b; color: white; }
    .btn-orange:hover { background-color: #e67716; border-color: #e67716; color: white; }
    .fab-container { position: fixed; bottom: 80px; right: 40px; z-index: 1000; }
    #social-table-container { background: #fff; border-radius: 12px; box-shadow: 0 4px 12px rgba(0,0,0,0.05); overflow: hidden; margin-bottom: 40px; }
</style>

> **Action Requise :** Comment interagissez-vous avec les autres ? Ces détails aideront l'IA à vous suggérer des lieux de séjour adaptés à votre besoin de calme ou de rencontres.

### 👥 Profils sociaux par voyageur
<div id="social-table-container" class="border">
<table class="table table-hover align-middle mb-0" id="social-table">
<thead class="table-light">
<tr>
<th>Voyageur</th>
<th>Tempérament</th>
<th class="text-end">Actions</th>
</tr>
</thead>
<tbody>
<tr><td colspan="3" class="text-center py-4 text-muted"><div class="spinner-border spinner-border-sm text-primary me-2"></div>Chargement des profils...</td></tr>
</tbody>
</table>
</div>

---

<div class="card shadow-sm border-0 mb-5 overflow-hidden" id="form-container">
<div class="card-header bg-primary text-white py-3 fw-bold">
<i class="bi bi-people-fill me-2"></i> <span id="form-title">AJOUTER UN PROFIL SOCIAL</span>
</div>
<div class="card-body p-4 p-md-5">
<form id="multi-social-form" class="local-form">
<input type="hidden" name="id" id="social-id">
<div class="form-group mb-4">
<label class="form-label fs-5">Nom du voyageur</label>
<input type="text" name="nom_voyageur" id="field-nom_voyageur" class="form-control form-control-lg border-0 bg-light" placeholder="Ex: Yvan" required>
</div>
<div class="form-group mb-4">
<label>Tempérament global en voyage</label>
<select name="temperament" id="field-temperament" class="form-select form-select-lg border-0 bg-light">
<option value="introverti">Plutôt Introverti (Besoin de calme)</option>
<option value="ambiverti">Ambiverti (Équilibre)</option>
<option value="extraverti">Plutôt Extraverti (Besoin de monde)</option>
</select>
</div>
<div class="form-group mb-4">
<label>Besoin de solitude (1 à 5) : <span class="badge bg-warning text-dark ms-2" id="solitude-display">3</span></label>
<input type="range" name="besoin_solitude" id="field-besoin_solitude" class="form-range" min="1" max="5" step="1" value="3" oninput="document.getElementById('solitude-display').innerText = this.value">
<div class="d-flex justify-content-between small text-muted"><span>Social permanent</span><span>Seul au monde</span></div>
</div>
<div class="form-group mb-4">
<label>Style de prise de décision</label>
<select name="style_decision" id="field-style_decision" class="form-select border-0 bg-light">
<option value="leader">Leader (Je décide pour le groupe)</option>
<option value="suiveur">Suiveur (Je m'adapte aux autres)</option>
<option value="collaboratif">Collaboratif (On vote)</option>
<option value="solo">Solitaire (Chacun fait son choix)</option>
</select>
</div>
<div class="form-group mb-4">
<label>Ouverture aux rencontres locales</label><br>
<div class="d-flex gap-3">
<label class="radio-inline border px-3 py-2 rounded bg-white shadow-sm"><input type="radio" name="ouverture_rencontres" id="ouverture-elevee" value="elevee" class="me-2"> Très ouvert</label>
<label class="radio-inline border px-3 py-2 rounded bg-white shadow-sm"><input type="radio" name="ouverture_rencontres" id="ouverture-moderee" value="moderee" class="me-2" checked> Modéré</label>
<label class="radio-inline border px-3 py-2 rounded bg-white shadow-sm"><input type="radio" name="ouverture_rencontres" id="ouverture-reserve" value="reserve" class="me-2"> Réservé</label>
</div>
</div>
<div class="form-group mb-5">
<label>Taille de groupe idéale</label>
<select name="taille_groupe" id="field-taille_groupe" class="form-select border-0 bg-light">
<option value="seul">Seul</option>
<option value="duo">Duo</option>
<option value="petit_groupe">Petit groupe (3-6)</option>
<option value="grand_groupe">Grand groupe organisé</option>
</select>
</div>
<div class="d-flex gap-3 pt-4 border-top">
<button type="submit" class="btn btn-primary btn-lg px-5 shadow-sm fw-bold" id="submit-btn">
<i class="bi bi-save me-2"></i>ENREGISTRER LE PROFIL
</button>
<button type="button" class="btn btn-link text-muted btn-lg" onclick="clearForm()">Annuler</button>
</div>
</form>
</div>
</div>

<div class="fab-container">
<button class="btn btn-orange btn-circle btn-lg text-white shadow" onclick="clearForm()" title="Ajouter un profil">
<i class="bi bi-plus-lg fs-3"></i>
</button>
</div>

<script>
    let socialProfiles = [];
    const formID = "dynamique-sociale";
    document.addEventListener("DOMContentLoaded", function() {
        loadSocial();
        document.getElementById("multi-social-form").addEventListener("submit", function(e) {
            e.preventDefault();
            saveCurrentSocial();
        });
    });
    async function loadSocial() {
        try {
            const res = await fetch(`/fr/home/api/get-form/${formID}`);
            const response = await res.json();
            const data = response.data;
            if (data && data.profiles) {
                socialProfiles = data.profiles;
            } else if (data && Object.keys(data).length > 0) {
                socialProfiles = [{ id: "legacy-" + Date.now(), nom_voyageur: "Principal", ...data }];
            }
            renderTable();
        } catch (err) { console.error(err); }
    }
    function renderTable() {
        const tbody = document.querySelector("#social-table tbody");
        if (!socialProfiles || socialProfiles.length === 0) {
            tbody.innerHTML = '<tr><td colspan="3" class="text-center py-4 text-muted">Aucun profil social. Cliquez sur + pour en ajouter un.</td></tr>';
            return;
        }
        tbody.innerHTML = "";
        socialProfiles.forEach(p => {
            const tr = document.createElement("tr");
            tr.innerHTML = `
                <td class="fw-bold text-dark">${p.nom_voyageur}</td>
                <td class="text-capitalize">${p.temperament}</td>
                <td class="text-end">
                    <button onclick="editSocial('${p.id}')" class="btn btn-sm btn-outline-primary me-1"><i class="bi bi-pencil"></i></button>
                    <button onclick="deleteSocial('${p.id}')" class="btn btn-sm btn-outline-danger"><i class="bi bi-trash"></i></button>
                </td>`;
            tbody.appendChild(tr);
        });
    }
    function clearForm() {
        document.getElementById("social-id").value = "";
        document.getElementById("multi-social-form").reset();
        document.getElementById("solitude-display").innerText = "3";
        document.getElementById("form-title").innerText = "AJOUTER UN PROFIL SOCIAL";
        document.getElementById("submit-btn").innerHTML = "<i class='bi bi-save me-2'></i>ENREGISTRER LE PROFIL";
        document.getElementById("form-container").scrollIntoView({ behavior: 'smooth' });
    }
    function editSocial(id) {
        const p = socialProfiles.find(item => item.id === id);
        if (!p) return;
        clearForm();
        document.getElementById("social-id").value = p.id;
        document.getElementById("field-nom_voyageur").value = p.nom_voyageur || "";
        document.getElementById("field-temperament").value = p.temperament || "ambiverti";
        document.getElementById("field-besoin_solitude").value = p.besoin_solitude || 3;
        document.getElementById("solitude-display").innerText = p.besoin_solitude || 3;
        document.getElementById("field-style_decision").value = p.style_decision || "collaboratif";
        if (p.ouverture_rencontres) {
            const radio = document.querySelector(`input[name="ouverture_rencontres"][value="${p.ouverture_rencontres}"]`);
            if (radio) radio.checked = true;
        }
        document.getElementById("field-taille_groupe").value = p.taille_groupe || "duo";
        document.getElementById("form-title").innerText = "MODIFIER : " + p.nom_voyageur;
        document.getElementById("submit-btn").innerHTML = "<i class='bi bi-save me-2'></i>METTRE À JOUR";
        document.getElementById("form-container").scrollIntoView({ behavior: 'smooth' });
    }
    async function deleteSocial(id) {
        if (!confirm("Supprimer ce profil ?")) return;
        socialProfiles = socialProfiles.filter(p => p.id !== id);
        await saveAll();
        renderTable();
        if (document.getElementById("social-id").value === id) clearForm();
    }
    async function saveCurrentSocial() {
        const id = document.getElementById("social-id").value;
        const profileData = {
            id: id || "s-" + Date.now(),
            nom_voyageur: document.getElementById("field-nom_voyageur").value,
            temperament: document.getElementById("field-temperament").value,
            besoin_solitude: document.getElementById("field-besoin_solitude").value,
            style_decision: document.getElementById("field-style_decision").value,
            ouverture_rencontres: document.querySelector('input[name="ouverture_rencontres"]:checked')?.value || "moderee",
            taille_groupe: document.getElementById("field-taille_groupe").value
        };
        if (id) {
            const index = socialProfiles.findIndex(p => p.id === id);
            if (index !== -1) socialProfiles[index] = profileData;
        } else {
            socialProfiles.push(profileData);
        }
        await saveAll();
        renderTable();
        clearForm();
    }
    async function saveAll() {
        const btn = document.getElementById("submit-btn");
        const originalText = btn.innerHTML;
        btn.disabled = true;
        btn.innerHTML = "<span class='spinner-border spinner-border-sm me-2'></span>Sauvegarde...";
        try {
            await fetch("/fr/home/api/save-form", {
                method: "POST",
                headers: { "Content-Type": "application/json" },
                body: JSON.stringify({ formID: formID, data: { profiles: socialProfiles } })
            });
        } catch (err) { console.error(err); }
        finally { btn.disabled = false; btn.innerHTML = originalText; }
    }
</script>

---

<div class="alert alert-info border-0 shadow-sm rounded-4 p-4">
<div class="d-flex align-items-center">
<div class="flex-shrink-0"><i class="bi bi-info-circle-fill text-primary display-6 me-4"></i></div>
<div>
<h5 class="alert-heading mb-1 fw-bold">Bien-être Social</h5>
<p class="mb-0">En comprenant votre fonctionnement humain, l'IA pourra vous suggérer des hébergements et des activités qui respectent votre besoin de recharge, évitant ainsi la fatigue sociale en voyage.</p>
</div>
</div>
</div>

---

## Ressource — 1.5 pdf journal reflexion

<style>
    .btn-circle { width: 56px; height: 56px; border-radius: 28px; display: flex; align-items: center; justify-content: center; box-shadow: 0 4px 10px rgba(0,0,0,0.2); }
    .btn-orange { background-color: #ff851b; border-color: #ff851b; color: white; }
    .btn-orange:hover { background-color: #e67716; border-color: #e67716; color: white; }
    .fab-container { position: fixed; bottom: 80px; right: 40px; z-index: 1000; }
    .step-header { position: relative; padding-left: 20px; color: #2c3e50; font-weight: 800; margin-top: 3.5rem; margin-bottom: 2rem; letter-spacing: -0.5px; }
    .step-header::before { content: ""; position: absolute; left: 0; top: 5px; bottom: 5px; width: 6px; background: linear-gradient(to bottom, #ff851b, #ff4136); border-radius: 10px; }
    .journal-textarea { border: 1px solid #e0e0e0 !important; background-color: #fdfdfd !important; border-radius: 10px !important; padding: 15px !important; transition: all 0.2s ease; }
    .journal-textarea:focus { background-color: #fff !important; border-color: #ff851b !important; box-shadow: 0 5px 15px rgba(255, 133, 27, 0.1) !important; }
    #journal-table-container { background: #fff; border-radius: 12px; box-shadow: 0 4px 12px rgba(0,0,0,0.05); overflow: hidden; margin-bottom: 40px; }
</style>

## 🎯 L'Objectif
Avant de choisir une destination, il faut choisir une **intention**. Ce journal est votre espace sacré pour clarifier ce que ce voyage signifie réellement pour vous.

### 👥 Vos Intentions Enregistrées
<div id="journal-table-container" class="border">
    <table class="table table-hover align-middle mb-0" id="journal-table">
        <thead class="table-light">
            <tr>
                <th style="width: 30%;">Voyageur / Session</th>
                <th>Intention Finale</th>
                <th class="text-end" style="width: 150px;">Actions</th>
            </tr>
        </thead>
        <tbody>
            <tr><td colspan="3" class="text-center py-4 text-muted"><div class="spinner-border spinner-border-sm text-primary me-2"></div>Chargement des réflexions...</td></tr>
        </tbody>
    </table>
</div>

---

<div class="card shadow-sm border-0 mb-5 overflow-hidden" id="form-container">
    <div class="card-header bg-dark text-white py-3 d-flex justify-content-between align-items-center">
        <span class="fw-bold"><i class="bi bi-pencil-square me-2 text-warning"></i> <span id="form-title">Nouvelle Réflexion</span></span>
        <span class="badge bg-warning text-dark">Phase 1 : Vision</span>
    </div>
    <div class="card-body p-4 p-md-5">
        <form id="multi-journal-form" class="local-form">
            <input type="hidden" name="id" id="journal-id">
            <div class="form-group mb-5">
                <label class="form-label fs-5">Qui exprime cette intention ?</label>
                <input type="text" name="nom_session" id="field-nom_session" class="form-control form-control-lg border-0 bg-light" placeholder="Ex: Intention de Gilles" required>
                <div class="form-text">Cela peut être votre prénom ou le nom de votre projet.</div>
            </div>
            <div class="step-header fs-5">🧠 Étape 1 — L'Émotion & Le Pourquoi</div>
            <div class="form-group">
                <label>Qu’est-ce que je veux vivre ou ressentir pendant ce voyage ?</label>
                <textarea name="vivre_ressentir" id="field-vivre_ressentir" class="form-control journal-textarea" rows="3" placeholder="Ex: De la légèreté, de l'émerveillement face au silence..."></textarea>
            </div>
            <div class="form-group">
                <label>Est-ce que je veux fuir quelque chose ou aller vers quelque chose ?</label>
                <textarea name="fuir_aller_vers" id="field-fuir_aller_vers" class="form-control journal-textarea" rows="3" placeholder="Ex: Aller vers plus de simplicité, fuir le stress numérique..."></textarea>
            </div>
            <div class="form-group">
                <label>Qu’est-ce que je veux retrouver, découvrir ou transformer en moi ?</label>
                <textarea name="retrouver_transformer" id="field-retrouver_transformer" class="form-control journal-textarea" rows="3" placeholder="Ex: Retrouver mon goût pour la lecture, découvrir ma capacité d'adaptation..."></textarea>
            </div>
            <div class="step-header fs-5">💬 Étape 2 — Définir l'Expérience</div>
            <div class="form-group">
                <label>Voyager, pour moi, c’est...</label>
                <input type="text" name="voyager_c_est" id="field-voyager_c_est" class="form-control journal-textarea" placeholder="Ex: Respirer différemment.">
            </div>
            <div class="form-group">
                <label>Ce que je cherche à travers ce voyage, c’est...</label>
                <input type="text" name="cherche_voyage" id="field-cherche_voyage" class="form-control journal-textarea" placeholder="Ex: Des rencontres authentiques loin des circuits touristiques.">
            </div>
            <div class="form-group">
                <label>Ce que je veux éviter à tout prix pendant ce voyage, c’est...</label>
                <input type="text" name="eviter_voyage" id="field-eviter_voyage" class="form-control journal-textarea" placeholder="Ex: La foule, les horaires rigides, les zones trop chaudes.">
            </div>
            <div class="step-header fs-5">📜 Étape 3 — Vision Futuriste</div>
            <div class="alert bg-light border-0 small mb-4">
                <i class="bi bi-info-circle me-2 text-primary"></i> <strong>Astuce :</strong> Écrivez comme si vous parliez à vous-même depuis la fin du voyage.
            </div>
            <div class="form-group">
                <label>« Cher moi, je suis fier(e) de toi parce que... »</label>
                <textarea name="lettre_a_soi" id="field-lettre_a_soi" class="form-control journal-textarea" rows="5" placeholder="Ex: Parce que tu as osé sortir de ta zone de confort et que tu as pris le temps de ne rien faire..."></textarea>
            </div>
            <div class="step-header fs-5">🎯 Étape 4 — Le Manifeste</div>
            <div class="form-group mb-5">
                <label class="fs-5 text-primary">En une phrase, mon intention est :</label>
                <input type="text" name="intention_finale" id="field-intention_finale" class="form-control form-control-lg border-primary shadow-sm" style="border-width: 2px;" placeholder="Ex: Je voyage pour me reconnecter à l'essentiel.">
            </div>
            <div class="d-flex gap-3 pt-4 border-top mt-5">
                <button type="submit" class="btn btn-warning btn-lg px-5 shadow-sm fw-bold text-dark" id="submit-btn">
                    <i class="bi bi-cloud-check me-2"></i>Sceller mon intention
                </button>
                <button type="button" class="btn btn-link text-muted btn-lg" onclick="clearForm()">Réinitialiser</button>
            </div>
        </form>
    </div>
</div>

<div class="fab-container">
    <button class="btn btn-warning btn-circle btn-lg text-dark shadow" onclick="clearForm()" title="Nouvelle réflexion">
        <i class="bi bi-plus-lg fs-3"></i>
    </button>
</div>

<script>
    let entries = [];
    const formID = "journal-intention-voyage";
    document.addEventListener("DOMContentLoaded", function() {
        loadEntries();
        document.getElementById("multi-journal-form").addEventListener("submit", function(e) {
            e.preventDefault();
            saveCurrentEntry();
        });
    });
    async function loadEntries() {
        try {
            const res = await fetch(`/fr/home/api/get-form/${formID}`);
            const response = await res.json();
            const data = response.data;
            if (data && data.entries) {
                entries = data.entries;
            } else if (data && Object.keys(data).length > 0) {
                entries = [{ id: "legacy-" + Date.now(), nom_session: "Réflexion Initiale", ...data }];
            }
            renderList();
        } catch (err) { console.error(err); }
    }
    function renderList() {
        const tbody = document.querySelector("#journal-table tbody");
        if (!entries || entries.length === 0) {
            tbody.innerHTML = `<tr><td colspan="3" class="text-center py-4 text-muted">Aucune réflexion enregistrée.</td></tr>`;
            return;
        }
        tbody.innerHTML = "";
        entries.forEach(e => {
            const tr = document.createElement("tr");
            tr.innerHTML = `
                <td class="fw-bold text-dark">${e.nom_session}</td>
                <td class="small text-muted italic">${e.intention_finale || 'Non formulée'}</td>
                <td class="text-end">
                    <button onclick="editEntry('${e.id}')" class="btn btn-sm btn-outline-primary me-1"><i class="bi bi-pencil"></i></button>
                    <button onclick="deleteEntry('${e.id}')" class="btn btn-sm btn-outline-danger"><i class="bi bi-trash"></i></button>
                </td>`;
            tbody.appendChild(tr);
        });
    }
    function clearForm() {
        document.getElementById("journal-id").value = "";
        document.getElementById("multi-journal-form").reset();
        document.getElementById("form-title").innerText = "Nouvelle Réflexion";
        document.getElementById("submit-btn").innerHTML = "<i class='bi bi-cloud-check me-2'></i>Sceller mon intention";
        document.getElementById("form-container").scrollIntoView({ behavior: 'smooth' });
    }
    function editEntry(id) {
        const e = entries.find(item => item.id === id);
        if (!e) return;
        document.getElementById("journal-id").value = e.id;
        document.getElementById("field-nom_session").value = e.nom_session || "";
        document.getElementById("field-vivre_ressentir").value = e.vivre_ressentir || "";
        document.getElementById("field-fuir_aller_vers").value = e.fuir_aller_vers || "";
        document.getElementById("field-retrouver_transformer").value = e.retrouver_transformer || "";
        document.getElementById("field-voyager_c_est").value = e.voyager_c_est || "";
        document.getElementById("field-cherche_voyage").value = e.cherche_voyage || "";
        document.getElementById("field-eviter_voyage").value = e.eviter_voyage || "";
        document.getElementById("field-lettre_a_soi").value = e.lettre_a_soi || "";
        document.getElementById("field-intention_finale").value = e.intention_finale || "";
        document.getElementById("form-title").innerText = "Réviser l'intention de " + e.nom_session;
        document.getElementById("submit-btn").innerHTML = "<i class='bi bi-save me-2'></i>Mettre à jour mon intention";
        document.getElementById("form-container").scrollIntoView({ behavior: 'smooth' });
    }
    async function deleteEntry(id) {
        if (!confirm("Effacer cette réflexion ?")) return;
        entries = entries.filter(e => e.id !== id);
        await saveAll();
        renderList();
        if (document.getElementById("journal-id").value === id) clearForm();
    }
    async function saveCurrentEntry() {
        const id = document.getElementById("journal-id").value;
        const entryData = { id: id || "j-" + Date.now(), nom_session: document.getElementById("field-nom_session").value, vivre_ressentir: document.getElementById("field-vivre_ressentir").value, fuir_aller_vers: document.getElementById("field-fuir_aller_vers").value, retrouver_transformer: document.getElementById("field-retrouver_transformer").value, voyager_c_est: document.getElementById("field-voyager_c_est").value, cherche_voyage: document.getElementById("field-cherche_voyage").value, eviter_voyage: document.getElementById("field-eviter_voyage").value, lettre_a_soi: document.getElementById("field-lettre_a_soi").value, intention_finale: document.getElementById("field-intention_finale").value };
        if (id) {
            const index = entries.findIndex(e => e.id === id);
            if (index !== -1) entries[index] = entryData;
        } else {
            entries.push(entryData);
        }
        await saveAll();
        renderList();
        clearForm();
    }
    async function saveAll() {
        const btn = document.getElementById("submit-btn");
        const originalText = btn.innerHTML;
        btn.disabled = true;
        btn.innerHTML = "<span class='spinner-border spinner-border-sm me-2'></span>Gravure...";
        try {
            await fetch("/fr/home/api/save-form", {
                method: "POST",
                headers: { "Content-Type": "application/json" },
                body: JSON.stringify({ formID: formID, data: { entries: entries } })
            });
        } catch (err) { console.error(err); }
        finally { btn.disabled = false; btn.innerHTML = originalText; }
    }
</script>

<div class="alert alert-warning border-0 shadow-sm rounded-4 p-4 mt-5">
    <div class="d-flex align-items-center">
        <div class="flex-shrink-0"><i class="bi bi-lightbulb-fill text-dark display-6 me-4"></i></div>
        <div>
            <h5 class="alert-heading mb-1 fw-bold">Votre boussole émotionnelle</h5>
            <p class="mb-0">Ce journal est votre référence. Si, plus tard, vous hésitez entre deux itinéraires, relisez ce que vous avez écrit ici. L'option qui sert le mieux votre intention est la bonne.</p>
        </div>
    </div>
</div>

---

## Ressource — 1.6 pdf style voyage

<style>
    .btn-circle { width: 56px; height: 56px; border-radius: 28px; display: flex; align-items: center; justify-content: center; box-shadow: 0 4px 10px rgba(0,0,0,0.2); }
    .btn-orange { background-color: #ff851b; border-color: #ff851b; color: white; }
    .btn-orange:hover { background-color: #e67716; border-color: #e67716; color: white; }
    .fab-container { position: fixed; bottom: 80px; right: 40px; z-index: 1000; }
    #styles-table-container { margin-bottom: 40px; background: #fff; padding: 20px; border-radius: 12px; box-shadow: 0 4px 12px rgba(0,0,0,0.08); }
    .style-option { border: 1px solid #eee; padding: 15px; border-radius: 10px; margin-bottom: 10px; transition: all 0.2s; cursor: pointer; display: block; }
    .style-option:hover { background-color: #f8f9fa; border-color: #ff851b; }
    .btn-check:checked + .style-option { background-color: #fff5e6; border-color: #ff851b; box-shadow: 0 2px 8px rgba(255, 133, 27, 0.15); }
</style>

## 🎯 Objectif
Identifier votre style dominant pour créer un itinéraire cohérent avec vos envies, votre rythme et votre personnalité.

### 👥 Styles des Voyageurs
<div id="styles-table-container" class="border">
    <table class="table table-hover align-middle" id="styles-table">
        <thead class="table-light">
            <tr>
                <th>Voyageur</th>
                <th>Style Dominant</th>
                <th class="text-end">Actions</th>
            </tr>
        </thead>
        <tbody>
            <tr><td colspan="3" class="text-center py-4"><div class="spinner-border spinner-border-sm text-primary me-2"></div>Chargement des styles...</td></tr>
        </tbody>
    </table>
</div>

<hr class="my-5">

<div class="card shadow-sm border-0 mb-5 overflow-hidden" id="form-container">
    <div class="card-header bg-primary text-white py-3 fw-bold">
        <i class="bi bi-person-gear me-2"></i> <span id="form-title">Définissez votre Style de Voyage</span>
    </div>
    <div class="card-body p-4 p-md-5">
        <form id="multi-style-form" class="local-form">
            <input type="hidden" name="id" id="style-id">
            <div class="form-group mb-5">
                <label class="form-label fs-5">Nom du voyageur</label>
                <input type="text" name="nom_voyageur" id="field-nom_voyageur" class="form-control form-control-lg border-0 bg-light" placeholder="Ex: Claire" required>
            </div>
            <h5 class="border-bottom pb-2 mb-4 mt-5"><i class="bi bi-person-badge text-primary me-2"></i>Étape 1 — Votre style dominant</h5>
            <p class="text-muted mb-4">Choisissez le style qui vous ressemble le plus pour ce voyage :</p>
            <div class="form-group mb-5">
                <input type="radio" class="btn-check" name="style_dominant" id="style-contemplatif" value="contemplatif">
                <label class="style-option" for="style-contemplatif">
                    <span class="fs-5">🧘‍♀️ <b>Contemplatif</b></span><br>
                    <small class="text-muted">Ressourcement, paysages, pauses longues, introspection.</small>
                </label>
                <input type="radio" class="btn-check" name="style_dominant" id="style-explorateur" value="explorateur">
                <label class="style-option" for="style-explorateur">
                    <span class="fs-5">🧭 <b>Explorateur</b></span><br>
                    <small class="text-muted">Découverte, musées, randonnées, imprévus, curiosité.</small>
                </label>
                <input type="radio" class="btn-check" name="style_dominant" id="style-minimaliste" value="minimaliste">
                <label class="style-option" for="style-minimaliste">
                    <span class="fs-5">🧳 <b>Minimaliste</b></span><br>
                    <small class="text-muted">Slow travel, sac à dos, simplicité volontaire, essentiel.</small>
                </label>
                <input type="radio" class="btn-check" name="style_dominant" id="style-gourmet" value="gourmet">
                <label class="style-option" for="style-gourmet">
                    <span class="fs-5">🍷 <b>Gourmet</b></span><br>
                    <small class="text-muted">Saveurs, traditions, marchés, dégustations, plaisir local.</small>
                </label>
                <input type="radio" class="btn-check" name="style_dominant" id="style-connecte" value="connecte">
                <label class="style-option" for="style-connecte">
                    <span class="fs-5">📱 <b>Connecté</b></span><br>
                    <small class="text-muted">Documentation, partage, réseaux sociaux, Wi-Fi, nomade digital.</small>
                </label>
            </div>
            <h5 class="border-bottom pb-2 mb-4 mt-5"><i class="bi bi-star-fill text-primary me-2"></i>Étape 2 — Vos priorités (Classement de 1 à 5)</h5>
            <div class="row g-4 mb-5">
                <div class="col-md-6">
                    <div class="form-group mb-0">
                        <label>Découverte culturelle</label>
                        <input type="range" name="prio_culture" id="field-prio_culture" class="form-range" min="1" max="5" step="1">
                        <div class="d-flex justify-content-between small text-muted"><span>Peu</span><span>Essentiel</span></div>
                    </div>
                </div>
                <div class="col-md-6">
                    <div class="form-group mb-0">
                        <label>Nature et paysages</label>
                        <input type="range" name="prio_nature" id="field-prio_nature" class="form-range" min="1" max="5" step="1">
                        <div class="d-flex justify-content-between small text-muted"><span>Peu</span><span>Essentiel</span></div>
                    </div>
                </div>
                <div class="col-md-6">
                    <div class="form-group mb-0">
                        <label>Gastronomie</label>
                        <input type="range" name="prio_food" id="field-prio_food" class="form-range" min="1" max="5" step="1">
                        <div class="d-flex justify-content-between small text-muted"><span>Peu</span><span>Essentiel</span></div>
                    </div>
                </div>
                <div class="col-md-6">
                    <div class="form-group mb-0">
                        <label>Repos et ressourcement</label>
                        <input type="range" name="prio_repos" id="field-prio_repos" class="form-range" min="1" max="5" step="1">
                        <div class="d-flex justify-content-between small text-muted"><span>Peu</span><span>Essentiel</span></div>
                    </div>
                </div>
            </div>
            <h5 class="border-bottom pb-2 mb-4 mt-5"><i class="bi bi-chat-dots text-primary me-2"></i>Étape 3 — Notes personnelles</h5>
            <div class="form-group mb-5">
                <label>Qu'est-ce qui est indispensable pour que votre voyage soit réussi ?</label>
                <textarea name="notes_style" id="field-notes_style" class="form-control border-0 bg-light" rows="4" placeholder="Ex: Un café chaque matin en terrasse, 10km de marche par jour..."></textarea>
            </div>
            <div class="d-flex gap-3 pt-4 border-top">
                <button type="submit" class="btn btn-primary btn-lg px-5 shadow-sm fw-bold" id="submit-btn">
                    <i class="bi bi-save me-2"></i>Sauvegarder ce style
                </button>
                <button type="button" class="btn btn-outline-secondary btn-lg" onclick="clearForm()">Annuler</button>
            </div>
        </form>
    </div>
</div>

<div class="fab-container">
    <button class="btn btn-orange btn-circle btn-lg text-white" onclick="clearForm()" title="Ajouter un style">
        <i class="bi bi-plus-lg fs-3"></i>
    </button>
</div>

<script>
    let styles = [];
    const formID = "style-voyage";
    document.addEventListener("DOMContentLoaded", function() {
        loadStyles();
        document.getElementById("multi-style-form").addEventListener("submit", function(e) {
            e.preventDefault();
            saveCurrentStyle();
        });
    });
    async function loadStyles() {
        try {
            const res = await fetch(`/fr/home/api/get-form/${formID}`);
            const response = await res.json();
            const data = response.data;
            if (data && data.styles) {
                styles = data.styles;
            } else if (data && Object.keys(data).length > 0) {
                styles = [{
                    id: "legacy-" + Date.now(),
                    nom_voyageur: "Principal",
                    style_dominant: data.style_dominant || "explorateur",
                    prio_culture: data.prio_culture || "3",
                    prio_nature: data.prio_nature || "3",
                    prio_food: data.prio_food || "3",
                    prio_repos: data.prio_repos || "3",
                    notes_style: data.notes_style || ""
                }];
            }
            renderTable();
        } catch (err) { console.error(err); }
    }
    function renderTable() {
        const tbody = document.querySelector("#styles-table tbody");
        if (styles.length === 0) {
            tbody.innerHTML = '<tr><td colspan="3" class="text-center py-4 text-muted">Aucun style enregistré. Cliquez sur le bouton orange (+) pour en ajouter un.</td></tr>';
            return;
        }
        tbody.innerHTML = "";
        styles.forEach(s => {
            const tr = document.createElement("tr");
            tr.innerHTML = `
                <td class="fw-bold text-primary">${s.nom_voyageur || '-'}</td>
                <td class="text-capitalize">${s.style_dominant || '-'}</td>
                <td class="text-end">
                    <button onclick="editStyle('${s.id}')" class="btn btn-sm btn-outline-primary me-1"><i class="bi bi-pencil"></i></button>
                    <button onclick="deleteStyle('${s.id}')" class="btn btn-sm btn-outline-danger"><i class="bi bi-trash"></i></button>
                </td>`;
            tbody.appendChild(tr);
        });
    }
    function clearForm() {
        document.getElementById("style-id").value = "";
        document.getElementById("multi-style-form").reset();
        document.getElementById("form-title").innerText = "Définissez votre Style de Voyage";
        document.getElementById("submit-btn").innerHTML = "<i class='bi bi-save me-2'></i>Sauvegarder ce style";
        document.getElementById("form-container").scrollIntoView({ behavior: 'smooth' });
    }
    function editStyle(id) {
        const s = styles.find(item => item.id === id);
        if (!s) return;
        clearForm();
        document.getElementById("style-id").value = s.id;
        document.getElementById("field-nom_voyageur").value = s.nom_voyageur || "";
        if (s.style_dominant) {
            const radio = document.querySelector(`input[name="style_dominant"][value="${s.style_dominant}"]`);
            if (radio) radio.checked = true;
        }
        document.getElementById("field-prio_culture").value = s.prio_culture || "3";
        document.getElementById("field-prio_nature").value = s.prio_nature || "3";
        document.getElementById("field-prio_food").value = s.prio_food || "3";
        document.getElementById("field-prio_repos").value = s.prio_repos || "3";
        document.getElementById("field-notes_style").value = s.notes_style || "";
        document.getElementById("form-title").innerText = "Modifier le Style de " + s.nom_voyageur;
        document.getElementById("submit-btn").innerHTML = "<i class='bi bi-check-lg me-2'></i>Mettre à jour ce style";
        document.getElementById("form-container").scrollIntoView({ behavior: 'smooth' });
    }
    async function deleteStyle(id) {
        if (!confirm("Supprimer ce style ?")) return;
        styles = styles.filter(s => s.id !== id);
        await saveAll();
        renderTable();
        if (document.getElementById("style-id").value === id) clearForm();
    }
    async function saveCurrentStyle() {
        const id = document.getElementById("style-id").value;
        const styleDominantVal = document.querySelector('input[name="style_dominant"]:checked')?.value || "";
        const styleData = {
            id: id || "st-" + Date.now(),
            nom_voyageur: document.getElementById("field-nom_voyageur").value,
            style_dominant: styleDominantVal,
            prio_culture: document.getElementById("field-prio_culture").value,
            prio_nature: document.getElementById("field-prio_nature").value,
            prio_food: document.getElementById("field-prio_food").value,
            prio_repos: document.getElementById("field-prio_repos").value,
            notes_style: document.getElementById("field-notes_style").value
        };
        if (id) {
            const index = styles.findIndex(s => s.id === id);
            if (index !== -1) styles[index] = styleData;
        } else {
            styles.push(styleData);
        }
        await saveAll();
        renderTable();
        clearForm();
    }
    async function saveAll() {
        const btn = document.getElementById("submit-btn");
        const originalText = btn.innerHTML;
        btn.disabled = true;
        btn.innerHTML = "<span class='spinner-border spinner-border-sm me-2'></span>Sauvegarde...";
        try {
            const res = await fetch("/fr/home/api/save-form", {
                method: "POST",
                headers: { "Content-Type": "application/json" },
                body: JSON.stringify({ formID: formID, data: { styles: styles } })
            });
            const resData = await res.json();
            if (resData.status !== "success") alert("Erreur lors de la sauvegarde.");
        } catch (err) { console.error("Save error:", err); alert("Erreur de connexion."); }
        finally { btn.disabled = false; btn.innerHTML = originalText; }
    }
</script>

<div class="alert alert-info border-0 shadow-sm rounded-4 p-4 mt-5">
    <div class="d-flex align-items-center">
        <div class="flex-shrink-0"><i class="bi bi-info-circle-fill text-primary display-6 me-4"></i></div>
        <div>
            <h5 class="alert-heading mb-1 fw-bold">Pourquoi c'est important ?</h5>
            <p class="mb-0">Votre style définit votre <b>budget</b> (un gourmet dépense plus en restos qu'un minimaliste) et votre <b>logistique</b> (un contemplatif reste 3 nuits au même endroit, un explorateur change chaque jour).</p>
        </div>
    </div>
</div>

---

## Ressource — 1.7 pdf tableau inspiration

<style>
    .btn-circle { width: 56px; height: 56px; border-radius: 28px; display: flex; align-items: center; justify-content: center; box-shadow: 0 4px 10px rgba(0,0,0,0.2); }
    .fab-container { position: fixed; bottom: 80px; right: 40px; z-index: 1000; }
    #moodboards-table-container { background: #fff; border-radius: 12px; box-shadow: 0 4px 12px rgba(0,0,0,0.05); overflow: hidden; margin-bottom: 40px; }
</style>

## 🎯 L'Objectif
Pour que le voyage plaise à tout le monde, chaque participant doit exprimer son **univers visuel et émotionnel**. Utilisez cet outil pour capturer l'essence de ce que chacun recherche.

### 👥 Moodboards Enregistrés
<div id="moodboards-table-container" class="border">
    <table class="table table-hover align-middle mb-0" id="moodboards-table">
        <thead class="table-light">
            <tr>
                <th>Voyageur</th>
                <th class="text-end">Actions</th>
            </tr>
        </thead>
        <tbody>
            <tr><td colspan="2" class="text-center py-4 text-muted"><div class="spinner-border spinner-border-sm text-primary me-2"></div>Chargement des inspirations...</td></tr>
        </tbody>
    </table>
</div>

---

<div class="card shadow-sm border-0 mb-5 overflow-hidden" id="form-container">
    <div class="card-header bg-primary text-white py-3 fw-bold">
        <i class="bi bi-palette-fill me-2"></i> <span id="form-title">Créer un Nouveau Moodboard</span>
    </div>
    <div class="card-body p-4">
        <form id="multi-moodboard-form" class="local-form">
            <input type="hidden" name="id" id="moodboard-id">
            <div class="mb-4">
                <label class="form-label fw-bold">Nom du voyageur</label>
                <input type="text" name="nom_voyageur" id="field-nom_voyageur" class="form-control form-control-lg bg-light border-0" placeholder="Ex: Claire, Gilles..." required>
            </div>
            <h5 class="border-bottom pb-2 mb-4 mt-5"><i class="bi bi-hash text-primary me-2"></i>Étape 1 — Mots-Clés Émotionnels</h5>
            <div class="d-flex flex-wrap gap-2 justify-content-center mb-5">
                <input type="checkbox" class="btn-check" id="kw_nature" name="kw_nature">
                <label class="btn btn-outline-primary px-3 py-2" for="kw_nature">🌲 Nature</label>
                <input type="checkbox" class="btn-check" id="kw_liberte" name="kw_liberte">
                <label class="btn btn-outline-primary px-3 py-2" for="kw_liberte">🦅 Liberté</label>
                <input type="checkbox" class="btn-check" id="kw_lenteur" name="kw_lenteur">
                <label class="btn btn-outline-primary px-3 py-2" for="kw_lenteur">🐌 Lenteur</label>
                <input type="checkbox" class="btn-check" id="kw_aventure" name="kw_aventure">
                <label class="btn btn-outline-primary px-3 py-2" for="kw_aventure">🧗 Aventure</label>
                <input type="checkbox" class="btn-check" id="kw_culture" name="kw_culture">
                <label class="btn btn-outline-primary px-3 py-2" for="kw_culture">🏛️ Culture</label>
                <input type="checkbox" class="btn-check" id="kw_confort" name="kw_confort">
                <label class="btn btn-outline-primary px-3 py-2" for="kw_confort">🛋️ Confort</label>
                <input type="checkbox" class="btn-check" id="kw_silence" name="kw_silence">
                <label class="btn btn-outline-primary px-3 py-2" for="kw_silence">🤫 Silence</label>
                <input type="checkbox" class="btn-check" id="kw_rencontre" name="kw_rencontre">
                <label class="btn btn-outline-primary px-3 py-2" for="kw_rencontre">🤝 Rencontre</label>
            </div>
            <h5 class="border-bottom pb-2 mb-4 mt-5"><i class="bi bi-geo-alt text-primary me-2"></i>Étape 2 — Lieux et Ambiances</h5>
            <div class="row g-3">
                <div class="col-md-4"><input type="text" name="lieu_1" id="field-lieu_1" class="form-control bg-light border-0" placeholder="Lieu 1"></div>
                <div class="col-md-4"><input type="text" name="lieu_2" id="field-lieu_2" class="form-control bg-light border-0" placeholder="Lieu 2"></div>
                <div class="col-md-4"><input type="text" name="lieu_3" id="field-lieu_3" class="form-control bg-light border-0" placeholder="Lieu 3"></div>
            </div>
            <h5 class="border-bottom pb-2 mb-4 mt-5"><i class="bi bi-chat-quote text-primary me-2"></i>Étape 3 — Votre "Pourquoi"</h5>
            <textarea name="citation_perso" id="field-citation_perso" class="form-control bg-light border-0" rows="3" placeholder="Je veux voyager pour..."></textarea>
            <h5 class="border-bottom pb-2 mb-4 mt-5"><i class="bi bi-image text-primary me-2"></i>Étape 4 — Univers Visuel</h5>
            <div class="mb-3">
                <label class="form-label fw-bold small text-uppercase text-muted">Palette & Ambiance</label>
                <input type="text" name="palette_ambiance" id="field-palette_ambiance" class="form-control bg-light border-0" placeholder="Ex: Bois brut, terre ocre, bleu marin...">
            </div>
            <div class="mb-3">
                <label class="form-label fw-bold small text-uppercase text-muted">Lien Pinterest / Canva (Optionnel)</label>
                <input type="url" name="link_moodboard" id="field-link_moodboard" class="form-control bg-light border-0" placeholder="https://pinterest.com/...">
            </div>
            <div class="d-flex gap-3 mt-5 pt-4 border-top">
                <button type="submit" class="btn btn-primary btn-lg px-5 shadow-sm" id="submit-btn">
                    <i class="bi bi-check-lg me-2"></i>Enregistrer
                </button>
                <button type="button" class="btn btn-outline-secondary btn-lg" onclick="clearForm()">
                    Annuler
                </button>
            </div>
        </form>
    </div>
</div>

<div class="fab-container">
    <button class="btn btn-warning btn-circle btn-lg text-white shadow" onclick="clearForm()" title="Ajouter un moodboard">
        <i class="bi bi-plus-lg fs-3"></i>
    </button>
</div>

<script>
    let moodboards = [];
    const formID = "moodboard-inspiration";
    document.addEventListener("DOMContentLoaded", function() {
        loadMoodboards();
        document.getElementById("multi-moodboard-form").addEventListener("submit", function(e) {
            e.preventDefault();
            saveCurrentMoodboard();
        });
    });
    async function loadMoodboards() {
        try {
            const res = await fetch(`/fr/home/api/get-form/${formID}`);
            const response = await res.json();
            const data = response.data;
            if (data && data.moodboards) {
                moodboards = data.moodboards;
            } else if (data && Object.keys(data).length > 0) {
                moodboards = [{ id: "m-" + Date.now(), nom_voyageur: "Moi", ...data }];
            }
            renderList();
        } catch (err) { console.error(err); }
    }
    function renderList() {
        const tbody = document.querySelector("#moodboards-table tbody");
        if (!moodboards || moodboards.length === 0) {
            tbody.innerHTML = `<tr><td colspan="2" class="text-center py-4 text-muted">Aucun moodboard enregistré.</td></tr>`;
            return;
        }
        tbody.innerHTML = "";
        moodboards.forEach(m => {
            const tr = document.createElement("tr");
            tr.innerHTML = `
                <td class="fw-bold text-dark">${m.nom_voyageur}</td>
                <td class="text-end">
                    <button onclick="editMoodboard('${m.id}')" class="btn btn-sm btn-outline-primary me-1"><i class="bi bi-pencil"></i></button>
                    <button onclick="deleteMoodboard('${m.id}')" class="btn btn-sm btn-outline-danger"><i class="bi bi-trash"></i></button>
                </td>`;
            tbody.appendChild(tr);
        });
    }
    function clearForm() {
        document.getElementById("moodboard-id").value = "";
        document.getElementById("multi-moodboard-form").reset();
        document.getElementById("form-title").innerText = "Créer un Nouveau Moodboard";
        document.getElementById("submit-btn").innerHTML = "<i class='bi bi-check-lg me-2'></i>Enregistrer";
    }
    function editMoodboard(id) {
        const m = moodboards.find(item => item.id === id);
        if (!m) return;
        clearForm();
        document.getElementById("moodboard-id").value = m.id;
        document.getElementById("field-nom_voyageur").value = m.nom_voyageur || "";
        document.getElementById("field-lieu_1").value = m.lieu_1 || "";
        document.getElementById("field-lieu_2").value = m.lieu_2 || "";
        document.getElementById("field-lieu_3").value = m.lieu_3 || "";
        document.getElementById("field-citation_perso").value = m.citation_perso || "";
        document.getElementById("field-palette_ambiance").value = m.palette_ambiance || "";
        document.getElementById("field-link_moodboard").value = m.link_moodboard || "";
        document.querySelectorAll('input[type="checkbox"]').forEach(cb => {
            if (cb.name.startsWith('kw_')) { cb.checked = (m[cb.name] === true || m[cb.name] === "on"); }
        });
        document.getElementById("form-title").innerText = "Modifier le Moodboard de " + m.nom_voyageur;
        document.getElementById("submit-btn").innerHTML = "<i class='bi bi-save me-2'></i>Mettre à jour";
        document.getElementById("form-container").scrollIntoView({ behavior: 'smooth' });
    }
    async function deleteMoodboard(id) {
        if (!confirm("Supprimer ce moodboard ?")) return;
        moodboards = moodboards.filter(m => m.id !== id);
        await saveAll();
        renderList();
        if (document.getElementById("moodboard-id").value === id) clearForm();
    }
    async function saveCurrentMoodboard() {
        const id = document.getElementById("moodboard-id").value;
        const mData = { id: id || "m-" + Date.now(), nom_voyageur: document.getElementById("field-nom_voyageur").value };
        const formData = new FormData(document.getElementById("multi-moodboard-form"));
        formData.forEach((value, key) => { if (key !== "id" && key !== "nom_voyageur") mData[key] = value; });
        document.querySelectorAll('input[type="checkbox"]').forEach(cb => { if (cb.name.startsWith('kw_')) { mData[cb.name] = cb.checked; } });
        if (id) {
            const index = moodboards.findIndex(m => m.id === id);
            if (index !== -1) moodboards[index] = mData;
        } else {
            moodboards.push(mData);
        }
        await saveAll();
        renderList();
        clearForm();
    }
    async function saveAll() {
        const btn = document.getElementById("submit-btn");
        const originalText = btn.innerHTML;
        btn.disabled = true;
        btn.innerHTML = "<span class='spinner-border spinner-border-sm me-2'></span>Sauvegarde...";
        try {
            await fetch("/fr/home/api/save-form", {
                method: "POST",
                headers: { "Content-Type": "application/json" },
                body: JSON.stringify({ formID: formID, data: { moodboards: moodboards } })
            });
        } catch (err) { console.error(err); }
        finally { btn.disabled = false; btn.innerHTML = originalText; }
    }
</script>

<div class="alert alert-warning border-0 shadow-sm rounded-4 p-4 mt-5">
    <div class="d-flex align-items-center">
        <div class="flex-shrink-0">
            <i class="bi bi-people-fill display-6 me-4"></i>
        </div>
        <div>
            <h5 class="alert-heading mb-1 fw-bold">Travail d'Équipe</h5>
            <p class="mb-0">Idéalement, remplissez cette page ensemble. Comparez vos citations et vos mots-clés : c'est là que vous découvrirez les points communs (ou les compromis à faire) pour votre voyage.</p>
        </div>
    </div>
</div>

---

## Ressource — 1.8 formulaire inspiration

<style>
    .btn-circle { width: 56px; height: 56px; border-radius: 28px; display: flex; align-items: center; justify-content: center; box-shadow: 0 4px 10px rgba(0,0,0,0.2); }
    .fab-container { position: fixed; bottom: 80px; right: 40px; z-index: 1000; }
    #inspi-table-container { background: #fff; border-radius: 12px; box-shadow: 0 4px 12px rgba(0,0,0,0.05); overflow: hidden; margin-bottom: 40px; }
</style>

> **Action Requise :** Identifiez ce qui vous fait vibrer (nature, ville, culture, isolement) pour affiner vos suggestions de destinations. Ces données permettent à l'IA de sortir des sentiers battus.

### 👥 Inspirations du Groupe
<div id="inspi-table-container" class="border">
<table class="table table-hover align-middle mb-0" id="inspi-table">
<thead class="table-light">
<tr>
<th>Voyageur</th>
<th>Mots-clés</th>
<th class="text-end">Actions</th>
</tr>
</thead>
<tbody>
<tr><td colspan="3" class="text-center py-4 text-muted"><div class="spinner-border spinner-border-sm text-primary me-2"></div>Chargement des inspirations...</td></tr>
</tbody>
</table>
</div>

---

<div class="card shadow-sm border-0 mb-5 overflow-hidden" id="form-container">
<div class="card-header bg-primary text-white py-3 fw-bold">
<i class="bi bi-stars me-2"></i> <span id="form-title">AJOUTER VOTRE UNIVERS INSPIRATIF</span>
</div>
<div class="card-body p-4 p-md-5">
<form id="multi-inspi-form" class="local-form">
<input type="hidden" name="id" id="inspi-id">
<div class="form-group mb-4">
<label class="form-label fs-5">Nom du voyageur</label>
<input type="text" name="nom_voyageur" id="field-nom_voyageur" class="form-control form-control-lg border-0 bg-light" placeholder="Ex: Gilles" required>
</div>
<div class="form-group mb-4">
<label>Paysages de prédilection</label><br>
<div class="d-flex flex-wrap gap-2">
<label class="checkbox-inline border px-3 py-2 rounded bg-white shadow-sm"><input type="checkbox" name="paysage_montagne" id="field-paysage_montagne" class="me-2"> 🏔️ Montagnes</label>
<label class="checkbox-inline border px-3 py-2 rounded bg-white shadow-sm"><input type="checkbox" name="paysage_mer" id="field-paysage_mer" class="me-2"> 🏖️ Mer / Côte</label>
<label class="checkbox-inline border px-3 py-2 rounded bg-white shadow-sm"><input type="checkbox" name="paysage_foret" id="field-paysage_foret" class="me-2"> 🌲 Forêt / Jungle</label>
<label class="checkbox-inline border px-3 py-2 rounded bg-white shadow-sm"><input type="checkbox" name="paysage_desert" id="field-paysage_desert" class="me-2"> 🌵 Désert</label>
<label class="checkbox-inline border px-3 py-2 rounded bg-white shadow-sm"><input type="checkbox" name="paysage_urbain" id="field-paysage_urbain" class="me-2"> 🏙️ Ville</label>
<label class="checkbox-inline border px-3 py-2 rounded bg-white shadow-sm"><input type="checkbox" name="paysage_campagne" id="field-paysage_campagne" class="me-2"> 🚜 Campagne</label>
</div>
</div>
<div class="form-group mb-4">
<label>Activités "Coups de Cœur"</label><br>
<div class="row g-2">
<div class="col-md-6">
<label class="checkbox"><input type="checkbox" name="act_randonnee" id="field-act_randonnee"> Randonnée / Trekking</label>
<label class="checkbox"><input type="checkbox" name="act_musees" id="field-act_musees"> Musées / Histoire</label>
<label class="checkbox"><input type="checkbox" name="act_gastronomie" id="field-act_gastronomie"> Gastronomie / Marchés</label>
</div>
<div class="col-md-6">
<label class="checkbox"><input type="checkbox" name="act_photo" id="field-act_photo"> Photographie / Art</label>
<label class="checkbox"><input type="checkbox" name="act_sport" id="field-act_sport"> Sport / Sensations</label>
<label class="checkbox"><input type="checkbox" name="act_detente" id="field-act_detente"> Détente / Bien-être</label>
</div>
</div>
</div>
<div class="form-group mb-4">
<label>Niveau d’isolement recherché</label><br>
<div class="d-flex gap-3">
<label class="radio-inline border px-3 py-2 rounded bg-white shadow-sm"><input type="radio" name="isolement" value="total" class="me-2"> Très isolé</label>
<label class="radio-inline border px-3 py-2 rounded bg-white shadow-sm"><input type="radio" name="isolement" value="modere" class="me-2" checked> Modéré</label>
<label class="radio-inline border px-3 py-2 rounded bg-white shadow-sm"><input type="radio" name="isolement" value="urbain" class="me-2"> Animé</label>
</div>
</div>
<div class="form-group mb-4">
<label>Mots-clés qui définissent votre voyage idéal</label>
<input type="text" name="mots_cles" id="field-mots_cles" class="form-control border-0 bg-light" placeholder="Ex: Silence, découverte, épices, rencontre...">
</div>
<div class="form-group mb-5">
<label>Destinations de rêve en tête</label>
<textarea name="destinations_reve" id="field-destinations_reve" class="form-control border-0 bg-light" rows="3" placeholder="Listez les pays ou villes qui vous font vibrer..."></textarea>
</div>
<div class="d-flex gap-3 pt-4 border-top">
<button type="submit" class="btn btn-primary btn-lg px-5 shadow-sm fw-bold" id="submit-btn">
<i class="bi bi-save me-2"></i>ENREGISTRER L'INSPIRATION
</button>
<button type="button" class="btn btn-link text-muted btn-lg" onclick="clearForm()">Annuler</button>
</div>
</form>
</div>
</div>

<div class="fab-container">
<button class="btn btn-warning btn-circle btn-lg text-dark shadow" onclick="clearForm()" title="Nouvelle inspiration">
<i class="bi bi-plus-lg fs-3"></i>
</button>
</div>

<script>
    let inspirations = [];
    const formID = "inspiration-voyage";
    document.addEventListener("DOMContentLoaded", function() {
        loadInspirations();
        document.getElementById("multi-inspi-form").addEventListener("submit", function(e) {
            e.preventDefault();
            saveCurrentInspiration();
        });
    });
    async function loadInspirations() {
        try {
            const res = await fetch(`/fr/home/api/get-form/${formID}`);
            const response = await res.json();
            const data = response.data;
            if (data && data.inspirations) {
                inspirations = data.inspirations;
            } else if (data && Object.keys(data).length > 0) {
                inspirations = [{
                    id: "legacy-" + Date.now(),
                    nom_voyageur: "Moi",
                    ...data
                }];
            }
            renderList();
        } catch (err) { console.error(err); }
    }
    function renderList() {
        const tbody = document.querySelector("#inspi-table tbody");
        if (!inspirations || inspirations.length === 0) {
            tbody.innerHTML = `<tr><td colspan="3" class="text-center py-4 text-muted">Aucune inspiration enregistrée.</td></tr>`;
            return;
        }
        tbody.innerHTML = "";
        inspirations.forEach(i => {
            const tr = document.createElement("tr");
            tr.innerHTML = `
                <td class="fw-bold text-dark">${i.nom_voyageur}</td>
                <td class="small text-muted">${i.mots_cles || '-'}</td>
                <td class="text-end">
                    <button onclick="editInspiration('${i.id}')" class="btn btn-sm btn-outline-primary me-1"><i class="bi bi-pencil"></i></button>
                    <button onclick="deleteInspiration('${i.id}')" class="btn btn-sm btn-outline-danger"><i class="bi bi-trash"></i></button>
                </td>`;
            tbody.appendChild(tr);
        });
    }
    function clearForm() {
        document.getElementById("inspi-id").value = "";
        document.getElementById("multi-inspi-form").reset();
        document.getElementById("form-title").innerText = "AJOUTER VOTRE UNIVERS INSPIRATIF";
        document.getElementById("submit-btn").innerHTML = "<i class='bi bi-save me-2'></i>ENREGISTRER L'INSPIRATION";
        document.getElementById("form-container").scrollIntoView({ behavior: 'smooth' });
    }
    function editInspiration(id) {
        const i = inspirations.find(item => item.id === id);
        if (!i) return;
        clearForm();
        document.getElementById("inspi-id").value = i.id;
        document.getElementById("field-nom_voyageur").value = i.nom_voyageur || "";
        document.getElementById("field-mots_cles").value = i.mots_cles || "";
        document.getElementById("field-destinations_reve").value = i.destinations_reve || "";
        
        // Radios
        if (i.isolement) {
            const radio = document.querySelector(`input[name="isolement"][value="${i.isolement}"]`);
            if (radio) radio.checked = true;
        }
        
        // Checkboxes
        document.querySelectorAll('input[type="checkbox"]').forEach(cb => {
            cb.checked = (i[cb.name] === true || i[cb.name] === "on");
        });

        document.getElementById("form-title").innerText = "MODIFIER L'INSPIRATION DE " + i.nom_voyageur;
        document.getElementById("submit-btn").innerHTML = "<i class='bi bi-check-lg me-2'></i>METTRE À JOUR";
        document.getElementById("form-container").scrollIntoView({ behavior: 'smooth' });
    }
    async function deleteInspiration(id) {
        if (!confirm("Supprimer cette inspiration ?")) return;
        inspirations = inspirations.filter(i => i.id !== id);
        await saveAll();
        renderList();
        if (document.getElementById("inspi-id").value === id) clearForm();
    }
    async function saveCurrentInspiration() {
        const id = document.getElementById("inspi-id").value;
        const iData = {
            id: id || "insp-" + Date.now(),
            nom_voyageur: document.getElementById("field-nom_voyageur").value,
            isolement: document.querySelector('input[name="isolement"]:checked')?.value || "modere"
        };
        const formData = new FormData(document.getElementById("multi-inspi-form"));
        formData.forEach((value, key) => { if (key !== "id" && key !== "nom_voyageur" && key !== "isolement") iData[key] = value; });
        document.querySelectorAll('input[type="checkbox"]').forEach(cb => { iData[cb.name] = cb.checked; });
        
        if (id) {
            const index = inspirations.findIndex(i => i.id === id);
            if (index !== -1) inspirations[index] = iData;
        } else {
            inspirations.push(iData);
        }
        await saveAll();
        renderList();
        clearForm();
    }
    async function saveAll() {
        const btn = document.getElementById("submit-btn");
        const originalText = btn.innerHTML;
        btn.disabled = true;
        btn.innerHTML = "<span class='spinner-border spinner-border-sm me-2'></span>Sauvegarde...";
        try {
            await fetch("/fr/home/api/save-form", {
                method: "POST",
                headers: { "Content-Type": "application/json" },
                body: JSON.stringify({ formID: formID, data: { inspirations: inspirations } })
            });
        } catch (err) { console.error(err); }
        finally { btn.disabled = false; btn.innerHTML = originalText; }
    }
</script>

---

## Ressource — 1.9 travel guide inspirations

<style>
    .btn-circle { width: 56px; height: 56px; border-radius: 28px; display: flex; align-items: center; justify-content: center; box-shadow: 0 4px 10px rgba(0,0,0,0.2); }
    .fab-container { position: fixed; bottom: 80px; right: 40px; z-index: 1000; }
    #discoveries-table-container { background: #fff; border-radius: 12px; box-shadow: 0 4px 12px rgba(0,0,0,0.05); overflow: hidden; margin-bottom: 40px; }
</style>

## 🧭 L'Exploration Documentée
Le secret d'un voyage réussi ne réside pas seulement dans l'improvisation, mais dans la qualité de vos sources. Explorez les plateformes ci-dessous pour trouver des pépites à inclure dans votre projet.

### 📚 Les Sources Recommandées
<div class="row g-3 mb-5">
    <div class="col-md-6">
        <div class="list-group shadow-sm">
            <a href="https://www.lonelyplanet.com/" target="_blank" class="list-group-item list-group-item-action d-flex justify-content-between align-items-center">
                <span><b>Lonely Planet</b> - La référence mondiale</span>
                <i class="bi bi-box-arrow-up-right"></i>
            </a>
            <a href="https://www.guidesulysse.com/" target="_blank" class="list-group-item list-group-item-action d-flex justify-content-between align-items-center">
                <span><b>Guide Ulysse</b> - L'expertise québécoise</span>
                <i class="bi bi-box-arrow-up-right"></i>
            </a>
            <a href="https://guide.michelin.com/en/articles/travel" target="_blank" class="list-group-item list-group-item-action d-flex justify-content-between align-items-center">
                <span><b>Michelin Travel</b> - Gastronomie et Itinéraires</span>
                <i class="bi bi-box-arrow-up-right"></i>
            </a>
        </div>
    </div>
    <div class="col-md-6">
        <div class="list-group shadow-sm">
            <a href="https://www.theculturetrip.com/" target="_blank" class="list-group-item list-group-item-action d-flex justify-content-between align-items-center">
                <span><b>Culture Trip</b> - Immersion locale</span>
                <i class="bi bi-box-arrow-up-right"></i>
            </a>
            <a href="https://www.backpacker.com/" target="_blank" class="list-group-item list-group-item-action d-flex justify-content-between align-items-center">
                <span><b>Backpacker</b> - Aventure et Plein air</span>
                <i class="bi bi-box-arrow-up-right"></i>
            </a>
            <a href="https://www.roughguides.com/" target="_blank" class="list-group-item list-group-item-action d-flex justify-content-between align-items-center">
                <span><b>Rough Guides</b> - Détails et authenticité</span>
                <i class="bi bi-box-arrow-up-right"></i>
            </a>
        </div>
    </div>
</div>

<!-- trip-only:start -->

### 💎 Vos Découvertes Enregistrées
<div id="discoveries-table-container" class="border">
    <table class="table table-hover align-middle mb-0" id="discoveries-table">
        <thead class="table-light">
            <tr>
                <th>Nom de la découverte / Lieu</th>
                <th class="text-center">IA</th>
                <th class="text-end">Actions</th>
            </tr>
        </thead>
        <tbody>
            <tr><td colspan="3" class="text-center py-4"><div class="spinner-border spinner-border-sm text-primary me-2"></div>Chargement de vos trouvailles...</td></tr>
        </tbody>
    </table>
</div>

---

<div class="card shadow-sm border-0 mb-5 overflow-hidden" id="form-container">
    <div class="card-header bg-primary text-white py-3 fw-bold">
        <i class="bi bi-search me-2"></i> <span id="form-title">Ajouter une Découverte</span>
    </div>
    <div class="card-body p-4 p-md-5">
        <form id="multi-discovery-form" class="local-form">
            <input type="hidden" name="id" id="discovery-id">
            <div class="form-group mb-4">
                <label class="form-label">Nom de la découverte / Lieu</label>
                <input type="text" name="name" id="field-name" class="form-control form-control-lg border-0 bg-light" placeholder="Ex: Village de pêcheurs à Cadaqués" required>
            </div>
            <div class="form-group mb-4">
                <label class="form-label">Détails et notes (ce que l'IA doit savoir)</label>
                <textarea name="content" id="field-content" class="form-control border-0 bg-light" rows="4" placeholder="Décrivez ici ce que vous avez trouvé, les points d'intérêt, les conseils du guide..."></textarea>
            </div>
            <div class="form-group mb-5">
                <div class="form-check form-switch">
                    <input class="form-check-input" type="checkbox" role="switch" id="field-include_ia" name="include_ia" checked>
                    <label class="form-check-label fw-bold text-primary" for="field-include_ia">Inclure dans ma planification IA</label>
                </div>
                <div class="form-text mt-2">Si coché, l'IA utilisera cette inguide pour construire votre itinéraire final.</div>
            </div>
            <div class="d-flex gap-3 pt-4 border-top">
                <button type="submit" class="btn btn-primary btn-lg px-5 shadow-sm fw-bold" id="submit-btn">
                    <i class="bi bi-save me-2"></i>Enregistrer cette pépite
                </button>
                <button type="button" class="btn btn-outline-secondary btn-lg" onclick="clearForm()">Annuler</button>
            </div>
        </form>
    </div>
</div>

<div class="fab-container">
    <button class="btn btn-warning btn-circle btn-lg text-dark shadow" onclick="clearForm()" title="Nouvelle découverte">
        <i class="bi bi-plus-lg fs-3"></i>
    </button>
</div>

<script>
    let discoveries = [];
    const formID = "recherche-inspiration";
    document.addEventListener("DOMContentLoaded", function() {
        loadDiscoveries();
        document.getElementById("multi-discovery-form").addEventListener("submit", function(e) {
            e.preventDefault();
            saveCurrentDiscovery();
        });
    });
    async function loadDiscoveries() {
        try {
            const res = await fetch(`/fr/home/api/get-form/${formID}`);
            const response = await res.json();
            const data = response.data;
            if (data && data.discoveries) {
                discoveries = data.discoveries;
            } else if (data && data.findings) {
                discoveries = [{ id: "legacy-" + Date.now(), name: "Ma première recherche", content: data.findings, include_ia: true }];
            }
            renderList();
        } catch (err) { console.error(err); }
    }
    function renderList() {
        const tbody = document.querySelector("#discoveries-table tbody");
        if (!discoveries || discoveries.length === 0) {
            tbody.innerHTML = `<tr><td colspan="3" class="text-center py-4 text-muted">Aucune découverte enregistrée.</td></tr>`;
            return;
        }
        tbody.innerHTML = "";
        discoveries.forEach(d => {
            const tr = document.createElement("tr");
            tr.innerHTML = `
                <td class="fw-bold text-dark">${d.name}</td>
                <td class="text-center">${d.include_ia ? '<span class="text-success" title="Activé pour l\'IA"><i class="bi bi-robot"></i></span>' : '<span class="text-muted" title="En réserve"><i class="bi bi-dash-circle"></i></span>'}</td>
                <td class="text-end">
                    <button onclick="editDiscovery('${d.id}')" class="btn btn-sm btn-outline-primary me-1"><i class="bi bi-pencil"></i></button>
                    <button onclick="deleteDiscovery('${d.id}')" class="btn btn-sm btn-outline-danger"><i class="bi bi-trash"></i></button>
                </td>`;
            tbody.appendChild(tr);
        });
    }
    function clearForm() {
        document.getElementById("discovery-id").value = "";
        document.getElementById("multi-discovery-form").reset();
        document.getElementById("form-title").innerText = "Ajouter une Découverte";
        document.getElementById("submit-btn").innerHTML = "<i class='bi bi-save me-2'></i>Enregistrer cette pépite";
        document.getElementById("form-container").scrollIntoView({ behavior: 'smooth' });
    }
    function editDiscovery(id) {
        const d = discoveries.find(item => item.id === id);
        if (!d) return;
        document.getElementById("discovery-id").value = d.id;
        document.getElementById("field-name").value = d.name || "";
        document.getElementById("field-content").value = d.content || "";
        document.getElementById("field-include_ia").checked = !!d.include_ia;
        document.getElementById("form-title").innerText = "Modifier : " + d.name;
        document.getElementById("submit-btn").innerHTML = "<i class='bi bi-check-lg me-2'></i>Mettre à jour";
        document.getElementById("form-container").scrollIntoView({ behavior: 'smooth' });
    }
    async function deleteDiscovery(id) {
        if (!confirm("Voulez-vous supprimer cette découverte ?")) return;
        discoveries = discoveries.filter(d => d.id !== id);
        await saveAll();
        renderList();
        if (document.getElementById("discovery-id").value === id) clearForm();
    }
    async function saveCurrentDiscovery() {
        const id = document.getElementById("discovery-id").value;
        const discoData = {
            id: id || "d-" + Date.now(),
            name: document.getElementById("field-name").value,
            content: document.getElementById("field-content").value,
            include_ia: document.getElementById("field-include_ia").checked
        };
        if (id) {
            const index = discoveries.findIndex(d => d.id === id);
            if (index !== -1) discoveries[index] = discoData;
        } else {
            discoveries.push(discoData);
        }
        await saveAll();
        renderList();
        clearForm();
    }
    async function saveAll() {
        const btn = document.getElementById("submit-btn");
        const originalText = btn.innerHTML;
        btn.disabled = true;
        btn.innerHTML = "<span class='spinner-border spinner-border-sm me-2'></span>Sauvegarde...";
        try {
            await fetch("/fr/home/api/save-form", {
                method: "POST",
                headers: { "Content-Type": "application/json" },
                body: JSON.stringify({ formID: formID, data: { discoveries: discoveries } })
            });
        } catch (err) { console.error(err); }
        finally { btn.disabled = false; btn.innerHTML = originalText; }
    }
</script>

<!-- trip-only:end -->

<div class="alert alert-info border-0 shadow-sm rounded-4 p-4 mt-5">
    <div class="d-flex align-items-center">
        <div class="flex-shrink-0"><i class="bi bi-info-circle-fill text-primary display-6 me-4"></i></div>
        <div>
            <h5 class="alert-heading mb-1 fw-bold">Pourquoi plusieurs découvertes ?</h5>
            <p class="mb-0">Un voyage est un casse-tête composé de plusieurs pièces. En enregistrant vos coups de cœur séparément, vous pouvez tester différentes combinaisons avec l'Assistant IA en activant ou désactivant le bouton "Inclure dans ma planification IA".</p>
        </div>
    </div>
</div>

---

## Ressource — 2.1 inspiration masterclass

<style>
    .btn-circle { width: 56px; height: 56px; border-radius: 28px; display: flex; align-items: center; justify-content: center; box-shadow: 0 4px 10px rgba(0,0,0,0.2); }
    .fab-container { position: fixed; bottom: 80px; right: 40px; z-index: 1000; }
    #signatures-table-container { background: #fff; border-radius: 12px; box-shadow: 0 4px 12px rgba(0,0,0,0.05); overflow: hidden; margin-bottom: 40px; }
</style>

## 🎯 Devenir un Explorateur Thématique
Un voyageur bien préparé ne voyage pas seulement "vers un pays", il voyage **pour une passion**. Cette section vous apprendra à structurer votre recherche pour trouver des lieux que les touristes classiques ne voient jamais.

---

### 🏛️ Les 3 Piliers de la Veille
<div class="row g-4 mb-5">
<div class="col-md-4">
<div class="card h-100 border-0 shadow-sm rounded-4">
<div class="card-body p-4">
<div class="text-primary fs-1 mb-3"><i class="bi bi-people-fill"></i></div>
<h5 class="fw-bold">La Veille Humaine</h5>
<p class="small text-muted">Groupes Facebook "Français à..." et forums spécialisés comme Cruise Critic.</p>
</div>
</div>
</div>
<div class="col-md-4">
<div class="card h-100 border-0 shadow-sm rounded-4">
<div class="card-body p-4">
<div class="text-danger fs-1 mb-3"><i class="bi bi-youtube"></i></div>
<h5 class="fw-bold">La Veille Visuelle</h5>
<p class="small text-muted">YouTubeurs "éclaireurs" qui documentent la logistique et le terrain réel.</p>
</div>
</div>
</div>
<div class="col-md-4">
<div class="card h-100 border-0 shadow-sm rounded-4">
<div class="card-body p-4">
<div class="text-success fs-1 mb-3"><i class="bi bi-journal-check"></i></div>
<h5 class="fw-bold">La Veille Thématique</h5>
<p class="small text-muted">Blogs de niche (ex: Nomadic Matt pour le budget) et guides officiels.</p>
</div>
</div>
</div>
</div>

---

<!-- trip-only:start -->

### 🏛️ Vos Signatures Thématiques
<div id="signatures-table-container" class="border">
<table class="table table-hover align-middle mb-0" id="signatures-table">
<thead class="table-light">
<tr>
<th>Thématique / Passion</th>
<th>Pays Signature</th>
<th class="text-end">Actions</th>
</tr>
</thead>
<tbody>
<tr><td colspan="3" class="text-center py-4 text-muted"><div class="spinner-border spinner-border-sm text-primary me-2"></div>Chargement de vos signatures...</td></tr>
</tbody>
</table>
</div>

---

<div class="card border-primary shadow-sm mb-5 overflow-hidden" id="form-container">
<div class="card-header bg-primary text-white py-3 fw-bold">
<i class="bi bi-input-cursor-text me-2"></i> <span id="form-title">DÉFINIR UNE SIGNATURE</span>
</div>
<div class="card-body p-4 p-md-5">
<form id="multi-signature-form" class="local-form">
<input type="hidden" name="id" id="signature-id">
<div class="form-group mb-4">
<label class="form-label">Quelle thématique vous passionne réellement ?</label>
<input type="text" name="passion_theme" id="field-passion_theme" class="form-control form-control-lg border-0 bg-light" placeholder="Ex: Marchés d'épices, architecture brutaliste, surf..." required>
</div>
<div class="form-group mb-4">
<label class="form-label">Citez 2 sources (YouTube/Blog) expertes sur ce sujet :</label>
<textarea name="sources_niche" id="field-sources_niche" class="form-control border-0 bg-light" rows="2" placeholder="Ex: La chaîne de X et le blog de Y..."></textarea>
</div>
<div class="form-group mb-5">
<label class="form-label">Selon vos recherches, quel pays est le plus riche pour cette passion ?</label>
<input type="text" name="signature_country" id="field-signature_country" class="form-control border-0 bg-light" placeholder="Ex: Le Japon pour ses jardins zen...">
</div>
<div class="text-center pt-4 border-top">
<button type="submit" class="btn btn-primary btn-lg px-5 shadow-sm fw-bold" id="submit-btn">
<i class="bi bi-save me-2"></i>ENREGISTRER MA SIGNATURE
</button>
<button type="button" class="btn btn-link text-muted btn-lg ms-3" onclick="clearForm()">Annuler</button>
</div>
</form>
</div>
</div>

<div class="fab-container">
<button class="btn btn-warning btn-circle btn-lg text-dark shadow" onclick="clearForm()" title="Nouvelle signature">
<i class="bi bi-plus-lg fs-3"></i>
</button>
</div>

<script>
    let signatures = [];
    const formID = "theme-signature";
    document.addEventListener("DOMContentLoaded", function() {
        loadSignatures();
        document.getElementById("multi-signature-form").addEventListener("submit", function(e) {
            e.preventDefault();
            saveCurrentSignature();
        });
    });
    async function loadSignatures() {
        try {
            const res = await fetch(`/fr/home/api/get-form/${formID}`);
            const response = await res.json();
            const data = response.data;
            if (data && data.signatures) {
                signatures = data.signatures;
            } else if (data && Object.keys(data).length > 0) {
                signatures = [{
                    id: "legacy-" + Date.now(),
                    passion_theme: data.passion_theme || "",
                    sources_niche: data.sources_niche || "",
                    signature_country: data.signature_country || ""
                }];
            }
            renderList();
        } catch (err) { console.error(err); }
    }
    function renderList() {
        const tbody = document.querySelector("#signatures-table tbody");
        if (!signatures || signatures.length === 0) {
            tbody.innerHTML = `<tr><td colspan="3" class="text-center py-4 text-muted">Aucune signature enregistrée. Définissez votre première passion !</td></tr>`;
            return;
        }
        tbody.innerHTML = "";
        signatures.forEach(s => {
            const tr = document.createElement("tr");
            tr.innerHTML = `
                <td class="fw-bold text-dark">${s.passion_theme}</td>
                <td>${s.signature_country || '-'}</td>
                <td class="text-end">
                    <button onclick="editSignature('${s.id}')" class="btn btn-sm btn-outline-primary me-1"><i class="bi bi-pencil"></i></button>
                    <button onclick="deleteSignature('${s.id}')" class="btn btn-sm btn-outline-danger"><i class="bi bi-trash"></i></button>
                </td>`;
            tbody.appendChild(tr);
        });
    }
    function clearForm() {
        document.getElementById("signature-id").value = "";
        document.getElementById("multi-signature-form").reset();
        document.getElementById("form-title").innerText = "DÉFINIR UNE SIGNATURE";
        document.getElementById("submit-btn").innerHTML = "<i class='bi bi-save me-2'></i>ENREGISTRER MA SIGNATURE";
        document.getElementById("form-container").scrollIntoView({ behavior: 'smooth' });
    }
    function editSignature(id) {
        const s = signatures.find(item => item.id === id);
        if (!s) return;
        clearForm();
        document.getElementById("signature-id").value = s.id;
        document.getElementById("field-passion_theme").value = s.passion_theme || "";
        document.getElementById("field-sources_niche").value = s.sources_niche || "";
        document.getElementById("field-signature_country").value = s.signature_country || "";
        document.getElementById("form-title").innerText = "MODIFIER LA SIGNATURE";
        document.getElementById("submit-btn").innerHTML = "<i class='bi bi-save me-2'></i>METTRE À JOUR";
        document.getElementById("form-container").scrollIntoView({ behavior: 'smooth' });
    }
    async function deleteSignature(id) {
        if (!confirm("Supprimer cette signature thématique ?")) return;
        signatures = signatures.filter(s => s.id !== id);
        await saveAll();
        renderList();
        if (document.getElementById("signature-id").value === id) clearForm();
    }
    async function saveCurrentSignature() {
        const id = document.getElementById("signature-id").value;
        const sData = {
            id: id || "sig-" + Date.now(),
            passion_theme: document.getElementById("field-passion_theme").value,
            sources_niche: document.getElementById("field-sources_niche").value,
            signature_country: document.getElementById("field-signature_country").value
        };
        if (id) {
            const index = signatures.findIndex(s => s.id === id);
            if (index !== -1) signatures[index] = sData;
        } else {
            signatures.push(sData);
        }
        await saveAll();
        renderList();
        clearForm();
    }
    async function saveAll() {
        const btn = document.getElementById("submit-btn");
        const originalText = btn.innerHTML;
        btn.disabled = true;
        btn.innerHTML = "<span class='spinner-border spinner-border-sm me-2'></span>Sauvegarde...";
        try {
            await fetch("/fr/home/api/save-form", {
                method: "POST",
                headers: { "Content-Type": "application/json" },
                body: JSON.stringify({ formID: formID, data: { signatures: signatures } })
            });
        } catch (err) { console.error(err); }
        finally { btn.disabled = false; btn.innerHTML = originalText; }
    }
</script>

<!-- trip-only:end -->

<div class="alert alert-warning border-0 shadow-sm rounded-4 p-4 mt-5">
<div class="d-flex align-items-center">
<div class="flex-shrink-0"><i class="bi bi-lightbulb-fill text-dark display-6 me-4"></i></div>
<div>
<h5 class="alert-heading mb-1 fw-bold">Pourquoi une destination "Signature" ?</h5>
<p class="mb-0">C'est le point d'ancrage de votre voyage. L'IA de TWAI guide utilisera cette thématique comme "fil conducteur" pour suggérer des étapes intermédiaires qui respectent cette ambiance.</p>
</div>
</div>
</div>

---

## Ressource — 2.3 apprentissage google mymaps

<style>
    .map-preview { transition: all 0.3s ease; border: 1px solid rgba(0,0,0,0.05) !important; border-radius: 15px; background: #fff; }
    .map-preview:hover { transform: translateY(-3px); box-shadow: 0 8px 15px rgba(0,0,0,0.1) !important; border-color: #ff851b !important; }
</style>

## 🗺️ Pourquoi My Maps ?
Si l'IA est le cerveau de votre voyage, Google My Maps en est la **mémoire visuelle**. C'est ici que vous allez placer vos épingles pour les hébergements, les restaurants et les points d'intérêt avant même de savoir dans quel ordre vous allez les visiter.

---

### 🌟 Explorez nos Cartes Modèles
Inspirez-vous de ces cartes réelles bâties par la communauté de TWAI guide :

<div class="row g-4 mb-5">
    <div class="col-md-4">
        <a href="https://www.google.com/maps/d/u/0/edit?mid=1M4jtxyOlC4VbVudNi39M7D0mfyewSJk&usp=sharing" target="_blank" class="text-decoration-none">
            <div class="card h-100 map-preview shadow-sm">
                <div class="card-body text-center p-4">
                    <div class="fs-1 mb-2">🇨🇦</div>
                    <h6 class="fw-bold text-dark">Modèle Canada</h6>
                    <p class="small text-muted mb-0">Routes panoramiques et campings.</p>
                </div>
            </div>
        </a>
    </div>
    <div class="col-md-4">
        <a href="https://www.google.com/maps/d/u/0/edit?mid=13Hwetz7rFCe_GHXXu7RGxH1nEeVVh_k&usp=sharing" target="_blank" class="text-decoration-none">
            <div class="card h-100 map-preview shadow-sm">
                <div class="card-body text-center p-4">
                    <div class="fs-1 mb-2">🇮🇪</div>
                    <h6 class="fw-bold text-dark">Modèle Irlande</h6>
                    <p class="small text-muted mb-0">Points d'intérêt et zones sauvages.</p>
                </div>
            </div>
        </a>
    </div>
    <div class="col-md-4">
        <a href="https://www.google.com/maps/d/u/0/edit?mid=1Df7Hia4K4EUDt5VHinKfF771qkggPC0&usp=sharing" target="_blank" class="text-decoration-none">
            <div class="card h-100 map-preview shadow-sm">
                <div class="card-body text-center p-4">
                    <div class="fs-1 mb-2">🇺🇸</div>
                    <h6 class="fw-bold text-dark">Modèle USA</h6>
                    <p class="small text-muted mb-0">Planification de road-trip longue durée.</p>
                </div>
            </div>
        </a>
    </div>
</div>

---

<!-- trip-only:start -->

<div class="card border-primary shadow-sm mb-5 overflow-hidden">
    <div class="card-header bg-primary text-white py-3 fw-bold">
        <i class="bi bi-map-fill me-2"></i> VOTRE PROFIL CARTOGRAPHIQUE
    </div>
    <div class="card-body p-4 p-md-5">
        <form class="local-form" data-form-id="usage-mymaps">
            <div class="form-group mb-4">
                <label class="form-label">Quel est votre niveau actuel avec My Maps ?</label>
                <div class="d-flex flex-wrap gap-3">
                    <label class="radio-inline border px-3 py-2 rounded bg-white shadow-sm"><input type="radio" name="level" value="debutant" class="me-2"> Débutant (Jamais utilisé)</label>
                    <label class="radio-inline border px-3 py-2 rounded bg-white shadow-sm"><input type="radio" name="level" value="intermediaire" class="me-2"> Intermédiaire</label>
                    <label class="radio-inline border px-3 py-2 rounded bg-white shadow-sm"><input type="radio" name="level" value="avance" class="me-2"> Avancé (Je crée des calques)</label>
                </div>
            </div>
            <div class="form-group mb-4">
                <label class="form-label">Quels types de marqueurs utilisez-vous le plus ?</label>
                <div class="d-flex flex-wrap gap-2">
                    <label class="checkbox-inline border px-3 py-2 rounded bg-light small"><input type="checkbox" name="mark_hotel" class="me-2"> Hébergements</label>
                    <label class="checkbox-inline border px-3 py-2 rounded bg-light small"><input type="checkbox" name="mark_food" class="me-2"> Restaurants</label>
                    <label class="checkbox-inline border px-3 py-2 rounded bg-light small"><input type="checkbox" name="mark_nature" class="me-2"> Spots Nature</label>
                    <label class="checkbox-inline border px-3 py-2 rounded bg-light small"><input type="checkbox" name="mark_culture" class="me-2"> Culture</label>
                </div>
            </div>
            <div class="form-group mb-5">
                <label class="form-label">Lien vers votre carte d'inspiration actuelle (si vous en avez une)</label>
                <div class="input-group">
                    <span class="input-group-text border-0 bg-light"><i class="bi bi-link-45deg"></i></span>
                    <input type="url" name="user_map_url" class="form-control border-0 bg-light" placeholder="https://www.google.com/maps/d/...">
                </div>
            </div>
            <div class="text-center pt-4 border-top">
                <button type="submit" class="btn btn-primary btn-lg px-5 shadow-sm fw-bold">
                    <i class="bi bi-save me-2"></i>SAUVEGARDER MON PROFIL CARTE
                </button>
            </div>
        </form>
    </div>
</div>

<!-- trip-only:end -->

<div class="alert alert-info border-0 shadow-sm rounded-4 p-4">
    <div class="d-flex align-items-center">
        <div class="flex-shrink-0"><i class="bi bi-lightbulb-fill text-warning display-6 me-4"></i></div>
        <div>
            <h5 class="alert-heading mb-1 fw-bold">Conseil d'Explorateur</h5>
            <p class="mb-0">Utilisez des <b>calques</b> (layers) pour séparer vos envies : un calque <b>Incontournables</b>, un calque <b>Hébergements potentiels</b> et un calque <b>Plan B</b>. Cela facilitera l'analyse par l'IA lors de la phase de planification.</p>
        </div>
    </div>
</div>

---

## Ressource — 2.4 pdf grille analyse destination

<style>
    .dest-header { background-color: #f8f9fa; border-radius: 10px; padding: 20px; margin-bottom: 20px; border: 1px solid #eee; }
    .score-input { text-align: center; font-weight: bold; border: 1px solid #dee2e6 !important; }
    .score-input:focus { border-color: #ff851b !important; background-color: #fff5e6 !important; }
    .prompt-box { background-color: #f1f3f5; border: 1px dashed #adb5bd; border-radius: 8px; padding: 20px; font-family: monospace; white-space: pre-wrap; font-size: 0.9rem; }
</style>

## 🎯 Faire un choix sans regrets
L'inspiration peut être chaotique. Cette grille vous aide à passer de l'émotion à la raison en comparant objectivement deux destinations selon vos critères prioritaires.

---

<div class="card shadow-sm border-0 mb-5 overflow-hidden" id="form-container">
<div class="card-header bg-primary text-white py-3 fw-bold">
<i class="bi bi-grid-3x3 me-2"></i> COMPARATEUR STRATÉGIQUE
</div>
<div class="card-body p-4 p-md-5">
<form class="local-form" data-form-id="grille-analyse-destination" id="grille-form">
<h5 class="border-bottom pb-2 mb-4"><i class="bi bi-pin-map text-primary me-2"></i>Étape 1 — Vos candidates</h5>
<div class="row mb-5">
<div class="col-md-6">
<div class="form-group mb-0">
<label>Destination A</label>
<input type="text" name="dest_a_name" id="dest_a_name" class="form-control form-control-lg border-0 bg-light" placeholder="Ex: Norvège">
</div>
</div>
<div class="col-md-6">
<div class="form-group mb-0">
<label>Destination B</label>
<input type="text" name="dest_b_name" id="dest_b_name" class="form-control form-control-lg border-0 bg-light" placeholder="Ex: Portugal">
</div>
</div>
</div>
<h5 class="border-bottom pb-2 mb-4 mt-5"><i class="bi bi-robot text-primary me-2"></i>Étape 2 — Obtenir l'avis de l'IA</h5>
<p class="text-muted">Générez un prompt expert à copier-coller dans l'Assistant AI de TWAI guide pour obtenir une analyse comparative basée sur des données temps réel.</p>
<div class="text-center mb-4">
<button type="button" class="btn btn-warning fw-bold shadow-sm" onclick="generateAIPrompt()">
<i class="bi bi-lightning-charge-fill me-2"></i>GÉNÉRER MON PROMPT IA
</button>
</div>
<div id="prompt-container" style="display: none;">
<div class="prompt-box mb-3" id="ai-prompt-text"></div>
<div class="text-center mb-5">
<button type="button" class="btn btn-sm btn-secondary" onclick="copyPrompt()">
<i class="bi bi-clipboard me-2"></i>Copier le prompt
</button>
<a href="/tools/askAI" target="_blank" class="btn btn-sm btn-primary ms-2">
<i class="bi bi-robot me-2"></i>Ouvrir l'Assistant IA
</a>
</div>
</div>
<h5 class="border-bottom pb-2 mb-4 mt-5"><i class="bi bi-check2-circle text-primary me-2"></i>Étape 4 — Votre décision finale</h5>
<div class="form-group mb-5">
<label>Laquelle l'emporte et quel est l'argument décisif ?</label>
<textarea name="decision_finale" class="form-control border-0 bg-light" rows="3" placeholder="Ex: Le Portugal l'emporte pour son budget et sa gastronomie, malgré une météo plus incertaine..."></textarea>
</div>
<div class="text-center pt-4 border-top">
<button type="submit" class="btn btn-primary btn-lg px-5 shadow-sm fw-bold">
<i class="bi bi-save me-2"></i>ENREGISTRER MON ANALYSE
</button>
</div>
</form>
</div>
</div>

<script>
function generateAIPrompt() {
    const destA = document.getElementById('dest_a_name').value || '[Destination A]';
    const destB = document.getElementById('dest_b_name').value || '[Destination B]';
    
    const prompt = `En tant qu'expert en planification de voyage augmenté, j'ai besoin que tu m'aides à trancher entre deux destinations : ${destA} et ${destB}.

Peux-tu effectuer une analyse comparative détaillée sur les points suivants :
1. Accessibilité logistique (vols, complexité des transports internes).
2. Climat et météo pour un voyage prochainement.
3. Sécurité et stabilité sanitaire.
4. Coût de la vie réel (hébergement, nourriture, activités).
5. Qualité de l'expérience par rapport à mes intérêts (nature, culture, gastronomie).

Pour chaque point, donne un score sur 5 et conclus par une recommandation claire en fonction du profil d'voyageur bien préparé que tu connais de moi.`;

    document.getElementById('ai-prompt-text').innerText = prompt;
    document.getElementById('prompt-container').style.display = 'block';
    document.getElementById('prompt-container').scrollIntoView({ behavior: 'smooth' });
}

function copyPrompt() {
    const text = document.getElementById('ai-prompt-text').innerText;
    navigator.clipboard.writeText(text).then(() => {
        alert('Prompt copié dans le presse-papier !');
    });
}
</script>

<div class="alert alert-info border-0 shadow-sm rounded-4 p-4 mt-5">
<div class="d-flex align-items-center">
<div class="flex-shrink-0"><i class="bi bi-info-circle-fill text-primary display-6 me-4"></i></div>
<div>
<h5 class="alert-heading mb-1 fw-bold">Prochaine étape : Pilier 2</h5>
<p class="mb-0">Une fois votre destination "gagnante" choisie, vous êtes prêt à passer à la **Planification**. C'est là que l'IA prendra le relais pour transformer cette grille en un tracé GPS précis.</p>
</div>
</div>
</div>

---

## Ressource — 2.5 adventure travel platforms

<style>
    .btn-circle { width: 56px; height: 56px; border-radius: 28px; display: flex; align-items: center; justify-content: center; box-shadow: 0 4px 10px rgba(0,0,0,0.2); }
    .fab-container { position: fixed; bottom: 80px; right: 40px; z-index: 1000; }
    #adventures-table-container { background: #fff; border-radius: 12px; box-shadow: 0 4px 12px rgba(0,0,0,0.05); overflow: hidden; margin-bottom: 40px; }
</style>

## 🧗 Repousser vos limites
Les plateformes spécialisées en aventure sont idéales pour trouver des idées de treks, de routes cyclables ou d'expéditions hors-piste. Même si vous voyagez en solo, ces itinéraires "guidés" sont d'excellentes bases de données pour construire votre propre trajet.

### 🧭 Experts du terrain
<div class="row g-3 mb-5">
    <div class="col-md-6">
        <div class="list-group shadow-sm">
            <a href="https://www.gadventures.com/" target="_blank" class="list-group-item list-group-item-action d-flex justify-content-between align-items-center">
                <span><b>G Adventures</b> - Durabilité et petits groupes</span>
                <i class="bi bi-compass"></i>
            </a>
            <a href="https://www.intrepidtravel.com/" target="_blank" class="list-group-item list-group-item-action d-flex justify-content-between align-items-center">
                <span><b>Intrepid Travel</b> - Expériences ultra-locales</span>
                <i class="bi bi-compass"></i>
            </a>
            <a href="https://www.rei.com/adventures" target="_blank" class="list-group-item list-group-item-action d-flex justify-content-between align-items-center">
                <span><b>REI Adventures</b> - Experts du plein air</span>
                <i class="bi bi-compass"></i>
            </a>
        </div>
    </div>
    <div class="col-md-6">
        <div class="list-group shadow-sm">
            <a href="https://www.backpacker.com/" target="_blank" class="list-group-item list-group-item-action d-flex justify-content-between align-items-center">
                <span><b>Backpacker</b> - Itinéraires de trekking</span>
                <i class="bi bi-compass"></i>
            </a>
            <a href="https://www.worldexpeditions.com/" target="_blank" class="list-group-item list-group-item-action d-flex justify-content-between align-items-center">
                <span><b>World Expeditions</b> - Expéditions mondiales</span>
                <i class="bi bi-compass"></i>
            </a>
            <a href="https://www.trekamerica.com/" target="_blank" class="list-group-item list-group-item-action d-flex justify-content-between align-items-center">
                <span><b>Trek America</b> - Road-trips Amérique du Nord</span>
                <i class="bi bi-compass"></i>
            </a>
        </div>
    </div>
</div>

<!-- trip-only:start -->

### 🏔️ Mon Carnet d'Expéditions
<div id="adventures-table-container" class="border">
    <table class="table table-hover align-middle mb-0" id="adventures-table">
        <thead class="table-light">
            <tr>
                <th>Nom de l'expédition / Trek</th>
                <th class="text-end">Actions</th>
            </tr>
        </thead>
        <tbody>
            <tr><td colspan="2" class="text-center py-4 text-muted">Chargement de vos notes d'aventure...</td></tr>
        </tbody>
    </table>
</div>

---

<div class="card shadow-sm border-0 mb-5 overflow-hidden" id="form-container">
    <div class="card-header bg-dark text-white py-3 fw-bold">
        <i class="bi bi-lightning-charge me-2 text-warning"></i> <span id="form-title">Noter un Itinéraire d'Aventure</span>
    </div>
    <div class="card-body p-4 p-md-5">
        <form id="multi-adventure-form" class="local-form">
            <input type="hidden" name="id" id="adventure-id">
            <div class="form-group mb-4">
                <label class="form-label">Nom de l'expédition ou du trek</label>
                <input type="text" name="name" id="field-name" class="form-control form-control-lg border-0 bg-light" placeholder="Ex: Trek du camp de base de l'Everest" required>
            </div>
            <div class="form-group mb-5">
                <label class="form-label">Notes logistiques (Difficulté, matériel, saison)</label>
                <textarea name="notes" id="field-notes" class="form-control border-0 bg-light" rows="4" placeholder="Ex: Nécessite un permis spécial, meilleure saison en octobre..."></textarea>
            </div>
            <div class="d-flex gap-3 pt-4 border-top">
                <button type="submit" class="btn btn-warning btn-lg px-5 shadow-sm fw-bold text-dark" id="submit-btn">
                    <i class="bi bi-save me-2"></i>Mémoriser cette aventure
                </button>
                <button type="button" class="btn btn-link text-muted btn-lg" onclick="clearForm()">Annuler</button>
            </div>
        </form>
    </div>
</div>

<div class="fab-container">
    <button class="btn btn-warning btn-circle btn-lg text-dark shadow" onclick="clearForm()" title="Nouvelle aventure">
        <i class="bi bi-plus-lg fs-3"></i>
    </button>
</div>

<script>
    let adventures = [];
    const formID = "aventures-preferees";
    document.addEventListener("DOMContentLoaded", function() {
        loadAdventures();
        document.getElementById("multi-adventure-form").addEventListener("submit", function(e) {
            e.preventDefault();
            saveCurrentAdventure();
        });
    });
    async function loadAdventures() {
        try {
            const res = await fetch(`/fr/home/api/get-form/${formID}`);
            const response = await res.json();
            const data = response.data;
            if (data && data.adventures) {
                adventures = data.adventures;
            }
            renderList();
        } catch (err) { console.error(err); }
    }
    function renderList() {
        const tbody = document.querySelector("#adventures-table tbody");
        if (!adventures || adventures.length === 0) {
            tbody.innerHTML = `<tr><td colspan="2" class="text-center py-4 text-muted">Votre carnet d'expéditions est vide.</td></tr>`;
            return;
        }
        tbody.innerHTML = "";
        adventures.forEach(a => {
            const tr = document.createElement("tr");
            tr.innerHTML = `
                <td class="fw-bold text-dark">${a.name}</td>
                <td class="text-end">
                    <button onclick="editAdventure('${a.id}')" class="btn btn-sm btn-outline-primary me-1"><i class="bi bi-pencil"></i></button>
                    <button onclick="deleteAdventure('${a.id}')" class="btn btn-sm btn-outline-danger"><i class="bi bi-trash"></i></button>
                </td>`;
            tbody.appendChild(tr);
        });
    }
    function clearForm() {
        document.getElementById("adventure-id").value = "";
        document.getElementById("multi-adventure-form").reset();
        document.getElementById("form-title").innerText = "Noter un Itinéraire d'Aventure";
        document.getElementById("submit-btn").innerHTML = "<i class='bi bi-save me-2'></i>Mémoriser cette aventure";
        document.getElementById("form-container").scrollIntoView({ behavior: 'smooth' });
    }
    function editAdventure(id) {
        const a = adventures.find(item => item.id === id);
        if (!a) return;
        document.getElementById("adventure-id").value = a.id;
        document.getElementById("field-name").value = a.name || "";
        document.getElementById("field-notes").value = a.notes || "";
        document.getElementById("form-title").innerText = "Modifier l'aventure";
        document.getElementById("submit-btn").innerHTML = "<i class='bi bi-check-lg me-2'></i>Mettre à jour";
        document.getElementById("form-container").scrollIntoView({ behavior: 'smooth' });
    }
    async function deleteAdventure(id) {
        if (!confirm("Supprimer cette note d'aventure ?")) return;
        adventures = adventures.filter(a => a.id !== id);
        await saveAll();
        renderList();
        if (document.getElementById("adventure-id").value === id) clearForm();
    }
    async function saveCurrentAdventure() {
        const id = document.getElementById("adventure-id").value;
        const advData = { id: id || "adv-" + Date.now(), name: document.getElementById("field-name").value, notes: document.getElementById("field-notes").value };
        if (id) {
            const index = adventures.findIndex(a => a.id === id);
            if (index !== -1) adventures[index] = advData;
        } else {
            adventures.push(advData);
        }
        await saveAll();
        renderList();
        clearForm();
    }
    async function saveAll() {
        const btn = document.getElementById("submit-btn");
        const originalText = btn.innerHTML;
        btn.disabled = true;
        btn.innerHTML = "<span class='spinner-border spinner-border-sm me-2'></span>Synchronisation...";
        try {
            await fetch("/fr/home/api/save-form", {
                method: "POST",
                headers: { "Content-Type": "application/json" },
                body: JSON.stringify({ formID: formID, data: { adventures: adventures } })
            });
        } catch (err) { console.error(err); }
        finally { btn.disabled = false; btn.innerHTML = originalText; }
    }
</script>

<!-- trip-only:end -->

<div class="alert alert-info border-0 shadow-sm rounded-4 p-4 mt-5">
    <div class="d-flex align-items-center">
        <div class="flex-shrink-0"><i class="bi bi-info-circle-fill text-primary display-6 me-4"></i></div>
        <div>
            <h5 class="alert-heading mb-1 fw-bold">Analyse par l'IA</h5>
            <p class="mb-0">Lorsque vous enregistrez ces itinéraires d'aventure, l'IA de TWAI guide peut analyser les tracés techniques (dénivelés, points de ravitaillement) pour vous proposer des alternatives adaptées à votre niveau physique réel.</p>
        </div>
    </div>
</div>

---

## Ressource — 2.6 outilspdf

<style>
    .pdf-tool-card { transition: all 0.3s ease; border: 1px solid rgba(0,0,0,0.05) !important; border-radius: 15px; }
    .pdf-tool-card:hover { transform: translateY(-3px); box-shadow: 0 8px 15px rgba(0,0,0,0.1) !important; }
</style>

## 📄 Le PDF comme base de données
Beaucoup de guides de voyage experts ne sont disponibles qu'en format PDF. Pour l'voyageur bien préparé, un PDF n'est pas un document figé, c'est une source de données que l'on peut annoter, résumer par l'IA et convertir en itinéraire.

---

### 📚 Où trouver des guides PDF gratuits ?
<div class="row g-3 mb-5">
    <div class="col-md-6">
        <div class="list-group shadow-sm">
            <a href="https://www.pdfdrive.com" target="_blank" class="list-group-item list-group-item-action d-flex justify-content-between align-items-center">
                <span><b>PDFDrive</b> - Le plus vaste index mondial</span>
                <i class="bi bi-file-earmark-pdf text-danger"></i>
            </a>
            <a href="https://ebookhunter.org" target="_blank" class="list-group-item list-group-item-action d-flex justify-content-between align-items-center">
                <span><b>eBook Hunter</b> - Recherche par titre/ISBN</span>
                <i class="bi bi-file-earmark-pdf text-danger"></i>
            </a>
        </div>
    </div>
    <div class="col-md-6">
        <div class="list-group shadow-sm">
            <a href="https://www.pdfbooksworld.com" target="_blank" class="list-group-item list-group-item-action d-flex justify-content-between align-items-center">
                <span><b>PDFBooksWorld</b> - Guides classiques et publics</span>
                <i class="bi bi-file-earmark-pdf text-danger"></i>
            </a>
            <a href="https://readanybook.com" target="_blank" class="list-group-item list-group-item-action d-flex justify-content-between align-items-center">
                <span><b>ReadAnyBook</b> - Découverte par genres</span>
                <i class="bi bi-file-earmark-pdf text-danger"></i>
            </a>
        </div>
    </div>
</div>

### 🛠️ Outils d'Analyse (OCR & IA)
<div class="row g-4 mb-5">
    <div class="col-md-4">
        <div class="card h-100 pdf-tool-card shadow-sm border-0">
            <div class="card-body p-4 text-center">
                <div class="fs-1 text-primary mb-3"><i class="bi bi-magic"></i></div>
                <h6 class="fw-bold">UPDF</h6>
                <p class="small text-muted">La suite la plus complète avec fonctions IA intégrées (résumés, traduction).</p>
                <a href="https://www.updf.com" target="_blank" class="btn btn-sm btn-outline-primary">Visiter</a>
            </div>
        </div>
    </div>
    <div class="col-md-4">
        <div class="card h-100 pdf-tool-card shadow-sm border-0">
            <div class="card-body p-4 text-center">
                <div class="fs-1 text-primary mb-3"><i class="bi bi-scissors"></i></div>
                <h6 class="fw-bold">ILovePDF</h6>
                <p class="small text-muted">L'outil idéal pour fusionner, découper ou compresser des guides trop lourds.</p>
                <a href="https://www.ilovepdf.com" target="_blank" class="btn btn-sm btn-outline-primary">Visiter</a>
            </div>
        </div>
    </div>
    <div class="col-md-4">
        <div class="card h-100 pdf-tool-card shadow-sm border-0">
            <div class="card-body p-4 text-center">
                <div class="fs-1 text-primary mb-3"><i class="bi bi-lightning"></i></div>
                <h6 class="fw-bold">Smallpdf</h6>
                <p class="small text-muted">Annotation rapide et conversion vers d'autres formats en quelques clics.</p>
                <a href="https://smallpdf.com" target="_blank" class="btn btn-sm btn-outline-primary">Visiter</a>
            </div>
        </div>
    </div>
</div>

---

<!-- trip-only:start -->

<div class="card border-primary shadow-sm mb-5 overflow-hidden">
    <div class="card-header bg-primary text-white py-3 fw-bold">
        <i class="bi bi-save me-2"></i> MES OUTILS PDF DE RÉFÉRENCE
    </div>
    <div class="card-body p-4 p-md-5">
        <form class="local-form" data-form-id="selection-outils-pdf">
            <div class="form-group mb-4">
                <label class="form-label">Quel outil PDF utilisez-vous pour ce projet ?</label>
                <div class="d-flex flex-wrap gap-3">
                    <label class="checkbox-inline border px-3 py-2 rounded bg-white shadow-sm"><input type="checkbox" name="tool_updf" class="me-2"> UPDF</label>
                    <label class="checkbox-inline border px-3 py-2 rounded bg-white shadow-sm"><input type="checkbox" name="tool_ilovepdf" class="me-2"> ILovePDF</label>
                    <label class="checkbox-inline border px-3 py-2 rounded bg-white shadow-sm"><input type="checkbox" name="tool_smallpdf" class="me-2"> Smallpdf</label>
                    <label class="checkbox-inline border px-3 py-2 rounded bg-white shadow-sm"><input type="checkbox" name="tool_adobe" class="me-2"> Adobe</label>
                </div>
            </div>
            <div class="form-group mb-5">
                <label class="form-label">Notes sur votre flux de travail (ex: "J'utilise l'IA pour résumer le chapitre 4")</label>
                <textarea name="pdf_workflow" class="form-control border-0 bg-light" rows="3" placeholder="Décrivez comment vous gérez vos documents..."></textarea>
            </div>
            <div class="text-center pt-4 border-top">
                <button type="submit" class="btn btn-primary btn-lg px-5 shadow-sm fw-bold">
                    <i class="bi bi-check-lg me-2"></i>ENREGISTRER MON FLUX PDF
                </button>
            </div>
        </form>
    </div>
</div>

<!-- trip-only:end -->

<div class="alert alert-warning border-0 shadow-sm rounded-4 p-4">
    <div class="d-flex align-items-center">
        <div class="flex-shrink-0"><i class="bi bi-lightbulb-fill text-dark display-6 me-4"></i></div>
        <div>
            <h5 class="alert-heading mb-1 fw-bold">L'astuce de l'Expert</h5>
            <p class="mb-0">Si vous trouvez un guide scanné (non recherchable), passez-le toujours par un outil d'<b>OCR</b> (Reconnaissance Optique de Caractères). Cela permettra à l'IA de lire le texte et de vous aider à en extraire les points d'intérêt.</p>
        </div>
    </div>
</div>

---

## Ressource — 3.1 analyse predictive ia

<p align="center">
    <i class="bi bi-graph-up-arrow text-primary display-1"></i>
</p>

## 🚀 Le Futur du Voyage : La Prédiction
Passer du mode "réaction" (suivre les guides) au mode "prédiction" (anticiper les tendances) est ce qui sépare l'voyageur bien préparé du touriste classique. Cette section de niveau expert vous apprendra à utiliser l'Assistant IA pour croiser des données de masse et identifier vos propres "pépites de niche".

---

### 🧠 Le Concept : L'IA comme analyste de tendances
L'analyse prédictive consiste à utiliser les données historiques pour :
1. **Anticiper la saturation** : Prédire quand un lieu calme deviendra bondé.
2. **Optimiser le climat** : Analyser les micro-variations météo sur 10 ans pour trouver la "semaine parfaite".
3. **Détecter les perles** : Identifier les régions où l'investissement touristique commence à peine.

---

<div class="card border-warning shadow-sm mb-5 overflow-hidden">
    <div class="card-header bg-dark text-white py-3 fw-bold">
        <i class="bi bi-cone-striped me-2 text-warning"></i> chapitre EN DÉVELOPPEMENT
    </div>
    <div class="card-body p-4 p-md-5 text-center">
        <p class="lead">Nous finalisons actuellement les prompts de niveau 3 pour cette section.</p>
        
        <!-- trip-only:start -->

<form class="local-form" data-form-id="niche-interet">
            <div class="form-group mb-4">
                <label class="form-label">Quelle région du monde souhaiteriez-vous analyser en priorité avec l'IA ?</label>
                <input type="text" name="niche_target" class="form-control form-control-lg border-0 bg-light" placeholder="Ex: Les régions reculées d'Asie Centrale...">
            </div>
            <button type="submit" class="btn btn-warning fw-bold px-4">
                <i class="bi bi-envelope me-2"></i>M'AVERTIR QUAND CE chapitre EST PRÊT
            </button>
        </form>

<!-- trip-only:end -->
    </div>
</div>

<div class="alert alert-info border-0 shadow-sm rounded-4 p-4">
    <div class="d-flex align-items-center">
        <div class="flex-shrink-0"><i class="bi bi-lightbulb-fill text-warning display-6 me-4"></i></div>
        <div>
            <h5 class="alert-heading mb-1 fw-bold">Accès Anticipé</h5>
            <p class="mb-0">Les membres Premium peuvent déjà tester des prompts d'analyse de niche dans la <b>Forge de Prompts</b> (Section : Stratégie de Recherche).</p>
        </div>
    </div>
</div>

---

# Pilier 2 — Planification

## Ressource — 1.1 guide planification index

<p align="center">
  <img src="/public/img/optimal_road_trip_us_national_parks.webp" alt="Chapitre 2 Planification" style="width:100%; border-radius: 15px; box-shadow: 0 4px 15px rgba(0,0,0,0.1);" />
</p>

Passer de l'inspiration à un plan d'action concret. Ce chapitre vous enseigne une chaîne de planification : de vos contraintes à une carte exploitable sur le terrain.

## 🎯 Objectif pédagogique

À la fin de ce chapitre, vous serez capable de :

- Définir les contraintes d'un itinéraire réaliste.
- Organiser les étapes et les points d'intérêt sur une carte.
- Préparer une navigation utilisable avec ou sans connexion.
- Prévoir des solutions de repli lorsque le plan évolue.

## 🧭 Comment fonctionne ce chapitre

Vous partez d'une intention claire et transformez progressivement vos idées en un itinéraire vérifiable. L'IA accélère la recherche et la mise en forme, mais chaque proposition doit être contrôlée selon la saison, les distances, les horaires et vos priorités.

## 📚 Une progression en trois niveaux

### Niveau 1 — Découverte : donner une forme à votre projet

Vous clarifiez vos contraintes, apprenez à formuler une demande utile à l'IA et vérifiez les éléments essentiels avant de vous engager. À la fin de ce niveau, vous disposez d'une vision de voyage cohérente et d'un premier plan de repli.

### Niveau 2 — Autonomie : construire et tester l'itinéraire

Vous transformez vos idées en données, en carte et en étapes concrètes. Vous apprenez à organiser les points d'intérêt, à enrichir votre plan et à le tester sur un projet réel, y compris pour un voyage en groupe ou une escale.

### Niveau 3 — Maîtrise : relier les données et naviguer sur le terrain

Vous abordez les outils avancés : tableur, choix d'outils cartographiques, échanges de données et fichiers de navigation. Ce niveau convient aux itinéraires complexes, aux projets de longue durée et aux voyageurs qui souhaitent un système réutilisable.

## Les étapes du chapitre

### 1. Définir le cadre

Précisez la durée, le budget, le rythme, les moyens de transport et les incontournables. Distinguez ce qui est non négociable de ce qui peut changer : cette marge de manœuvre rendra votre plan plus robuste.

### 2. Produire des options

Imaginez un premier parcontenu et plusieurs variantes. Recherchez les étapes possibles, estimez les temps de déplacement et évitez de remplir chaque journée. Un bon itinéraire laisse de la place aux découvertes et au repos.

### 3. Visualiser et organiser

Placez vos lieux, réservations et points d'intérêt sur une carte. Classez-les par type et par priorité afin de voir les regroupements naturels, les détours inutiles et les journées trop chargées.

### 4. Préparer le terrain

Enregistrez les inguides utiles hors ligne : carte, adresses, horaires, billets et repères de navigation. Vérifiez les accès, les règles locales et les conditions susceptibles de modifier votre trajet.

### 5. Construire votre plan B

Pour chaque étape critique, prévoyez une alternative simple : un autre trajet, une activité de repli, un hébergement ou une réserve de temps. Votre itinéraire devient alors un guide, pas une contrainte.

## 🛠️ Action immédiate

Écrivez les trois contraintes les plus importantes de votre prochain voyage, puis les trois expériences que vous ne voulez pas manquer. Elles serviront de filtre à toutes vos décisions de planification.

---

## Ressource — 1.2 formulaire planification

<style>
    .btn-circle { width: 56px; height: 56px; border-radius: 28px; display: flex; align-items: center; justify-content: center; box-shadow: 0 4px 10px rgba(0,0,0,0.2); }
    .fab-container { position: fixed; bottom: 80px; right: 40px; z-index: 1000; }
    #plan-table-container { background: #fff; border-radius: 12px; box-shadow: 0 4px 12px rgba(0,0,0,0.05); overflow: hidden; margin-bottom: 40px; }
</style>

## 🎯 De l'Inspiration à la Réalité
Maintenant que vous savez *pourquoi* vous partez, nous allons définir *quand* et *comment*. Ce formulaire fixe les bases logistiques que l'IA utilisera pour générer vos itinéraires techniques.

### 👥 Projets ou Visions de Planification
<div id="plan-table-container" class="border">
<table class="table table-hover align-middle mb-0" id="plan-table">
<thead class="table-light">
<tr>
<th>Nom / Voyageur</th>
<th>Dates / Durée</th>
<th>Budget Cible</th>
<th class="text-end">Actions</th>
</tr>
</thead>
<tbody>
<tr><td colspan="4" class="text-center py-4 text-muted"><div class="spinner-border spinner-border-sm text-primary me-2"></div>Chargement des projets...</td></tr>
</tbody>
</table>
</div>

---

<div class="card shadow-sm border-0 mb-5 overflow-hidden" id="form-container">
<div class="card-header bg-primary text-white py-3 fw-bold">
<i class="bi bi-calendar-check me-2"></i> <span id="form-title">DÉFINIR UN PARAMÉTRAGE DE VOYAGE</span>
</div>
<div class="card-body p-4 p-md-5">
<form id="multi-plan-form">
<input type="hidden" name="id" id="plan-id">
<div class="form-group mb-4">
<label class="form-label fs-5">Nom du projet ou du voyageur</label>
<input type="text" name="name" id="field-name" class="form-control form-control-lg border-0 bg-light" placeholder="Ex: Tour d'Europe 2026 / Vision de Gilles" required>
</div>
<div class="row g-4 mb-4">
<div class="col-md-6">
<div class="form-group">
<label>Dates prévues</label>
<input type="text" name="dates" id="field-dates" class="form-control border-0 bg-light" placeholder="Ex: Juin à Août 2026">
</div>
</div>
<div class="col-md-6">
<div class="form-group">
<label>Type de calendrier</label>
<select name="flexibility" id="field-flexibility" class="form-select border-0 bg-light">
<option value="fixe">Dates Fixes (Contrainte forte)</option>
<option value="flexible">Dates Flexibles (+/- 1 semaine)</option>
<option value="total">Totalement Flexible (Saisonnière)</option>
</select>
</div>
</div>
</div>
<div class="row g-4 mb-4">
<div class="col-md-6">
<div class="form-group">
<label>Durée totale</label>
<select name="duration" id="field-duration" class="form-select border-0 bg-light">
<option value="weekend">Week-end (2-3 jours)</option>
<option value="court">1 à 2 semaines</option>
<option value="moyen">1 mois et plus</option>
<option value="long">Long terme (Nomadisme)</option>
</select>
</div>
</div>
<div class="col-md-6">
<div class="form-group">
<label>Budget quotidien cible ($)</label>
<input type="number" name="budget_target" id="field-budget_target" class="form-control border-0 bg-light" placeholder="Ex: 150">
</div>
</div>
</div>
<div class="form-group mb-4">
<label>Mode de transport principal envisagé</label><br>
<div class="d-flex flex-wrap gap-2">
<label class="checkbox-inline border px-3 py-2 rounded bg-white shadow-sm"><input type="radio" name="transport" value="vr" class="me-2" checked> 🚐 VR / Vanlife</label>
<label class="checkbox-inline border px-3 py-2 rounded bg-white shadow-sm"><input type="radio" name="transport" value="voiture" class="me-2"> 🚗 Voiture / Roadtrip</label>
<label class="checkbox-inline border px-3 py-2 rounded bg-white shadow-sm"><input type="radio" name="transport" value="avion" class="me-2"> ✈️ Avion + Transports locaux</label>
<label class="checkbox-inline border px-3 py-2 rounded bg-white shadow-sm"><input type="radio" name="transport" value="croisiere" class="me-2"> 🚢 Croisière</label>
</div>
</div>
<div class="form-group mb-5">
<label>Outil de gestion préféré</label>
<select name="mgmt_tool" id="field-mgmt_tool" class="form-select border-0 bg-light">
<option value="sheets">Google Sheets </option>
<option value="app">Application Mobile dédiée</option>
<option value="mixte">Hybride (IA + Papier)</option>
</select>
</div>
<h5 class="border-bottom pb-2 mb-4 mt-5"><i class="bi bi-file-earmark-spreadsheet text-primary me-2"></i>Étape 2 — Format d'exportation (CSV)</h5>
<div class="form-group mb-4">
<label class="form-label">Colonnes souhaitées pour votre itinéraire CSV</label>
<div class="d-flex flex-wrap gap-2">
<label class="checkbox-inline border px-3 py-2 rounded bg-white shadow-sm"><input type="checkbox" name="col_jour" class="me-2" checked> Jour</label>
<label class="checkbox-inline border px-3 py-2 rounded bg-white shadow-sm"><input type="checkbox" name="col_titre" class="me-2" checked> Titre/Nom</label>
<label class="checkbox-inline border px-3 py-2 rounded bg-white shadow-sm"><input type="checkbox" name="col_desc" class="me-2" checked> Description</label>
<label class="checkbox-inline border px-3 py-2 rounded bg-white shadow-sm"><input type="checkbox" name="col_cat" class="me-2" checked> Catégorie (Import MyMaps)</label>
<label class="checkbox-inline border px-3 py-2 rounded bg-white shadow-sm"><input type="checkbox" name="col_coord" class="me-2" checked> Coordonnées GPS</label>
<label class="checkbox-inline border px-3 py-2 rounded bg-white shadow-sm"><input type="checkbox" name="col_prix" class="me-2"> Budget Estimé</label>
<label class="checkbox-inline border px-3 py-2 rounded bg-white shadow-sm"><input type="checkbox" name="col_temps" class="me-2"> Temps de route</label>
</div>
</div>
<div class="form-group mb-5">
<label>Colonnes personnalisées supplémentaires</label>
<input type="text" name="custom_cols" id="field-custom_cols" class="form-control border-0 bg-light" placeholder="Ex: Type de prise électrique, Langue parlée...">
</div>
<div class="text-center pt-4 mb-4">
<button type="button" class="btn btn-warning fw-bold shadow-sm px-4" onclick="generatePlanPrompt()">
<i class="bi bi-lightning-charge-fill me-2"></i>GÉNÉRER LE PROMPT DE PLANIFICATION
</button>
</div>
<div id="plan-prompt-container" style="display: none;" class="mb-5">
<div class="prompt-box mb-3 bg-light border p-3 rounded font-monospace small" id="plan-prompt-text" style="white-space: pre-wrap;"></div>
<div class="text-center">
<button type="button" class="btn btn-sm btn-secondary" onclick="copyPlanPrompt()">
<i class="bi bi-clipboard me-2"></i>Copier le prompt
</button>
</div>
</div>
<div class="d-flex gap-3 pt-4 border-top">
<button type="submit" class="btn btn-primary btn-lg px-5 shadow-sm fw-bold" id="submit-btn">
<i class="bi bi-save me-2"></i>ENREGISTRER CE SCÉNARIO
</button>
<button type="button" class="btn btn-link text-muted btn-lg" onclick="clearForm()">Annuler</button>
</div>
</form>
</div>
</div>

<div class="fab-container">
<button class="btn btn-warning btn-circle btn-lg text-white shadow" onclick="clearForm()" title="Nouveau projet">
<i class="bi bi-plus-lg fs-3"></i>
</button>
</div>

<script>
    let projects = [];
    const formID = "formulaire_planification";
    document.addEventListener("DOMContentLoaded", function() {
        loadProjects();
        document.getElementById("multi-plan-form").addEventListener("submit", function(e) {
            e.preventDefault();
            saveCurrentProject();
        });
    });
    async function loadProjects() {
        try {
            const res = await fetch(`/fr/home/api/get-form/${formID}`);
            const response = await res.json();
            const data = response.data;
            if (data && data.projects) {
                projects = data.projects;
            }
            renderList();
        } catch (err) { console.error("Erreur chargement:", err); }
    }
    function renderList() {
        const tbody = document.querySelector("#plan-table tbody");
        if (!projects || projects.length === 0) {
            tbody.innerHTML = `<tr><td colspan="4" class="text-center py-4 text-muted">Aucun projet enregistré. Définissez votre vision de voyage !</td></tr>`;
            return;
        }
        tbody.innerHTML = "";
        projects.forEach(p => {
            const tr = document.createElement("tr");
            tr.innerHTML = `
                <td class="fw-bold text-dark">${p.name}</td>
                <td>${p.dates || '-'} <small class="text-muted">(${p.duration})</small></td>
                <td>${p.budget_target ? p.budget_target + ' $' : '-'}</td>
                <td class="text-end">
                    <button onclick="editProject('${p.id}')" class="btn btn-sm btn-outline-primary me-1"><i class="bi bi-pencil"></i></button>
                    <button onclick="deleteProject('${p.id}')" class="btn btn-sm btn-outline-danger"><i class="bi bi-trash"></i></button>
                </td>`;
            tbody.appendChild(tr);
        });
    }
    function clearForm() {
        document.getElementById("plan-id").value = "";
        document.getElementById("multi-plan-form").reset();
        document.getElementById("form-title").innerText = "DÉFINIR UN PARAMÉTRAGE DE VOYAGE";
        document.getElementById("submit-btn").innerHTML = "<i class='bi bi-save me-2'></i>ENREGISTRER CE SCÉNARIO";
        document.getElementById("plan-prompt-container").style.display = "none";
        document.getElementById("form-container").scrollIntoView({ behavior: 'smooth' });
    }
    function editProject(id) {
        const p = projects.find(item => item.id === id);
        if (!p) return;
        clearForm();
        document.getElementById("plan-id").value = p.id;
        document.getElementById("field-name").value = p.name || "";
        document.getElementById("field-dates").value = p.dates || "";
        document.getElementById("field-flexibility").value = p.flexibility || "fixe";
        document.getElementById("field-duration").value = p.duration || "court";
        document.getElementById("field-budget_target").value = p.budget_target || "";
        document.getElementById("field-mgmt_tool").value = p.mgmt_tool || "sheets";
        document.getElementById("field-custom_cols").value = p.custom_cols || "";
        if (p.transport) {
            const radio = document.querySelector(`input[name="transport"][value="${p.transport}"]`);
            if (radio) radio.checked = true;
        }
        document.querySelectorAll('input[name^="col_"]').forEach(cb => {
            cb.checked = !!p[cb.name];
        });
        document.getElementById("form-title").innerText = "MODIFIER : " + p.name;
        document.getElementById("submit-btn").innerHTML = "<i class='bi bi-save me-2'></i>METTRE À JOUR";
        document.getElementById("form-container").scrollIntoView({ behavior: 'smooth' });
    }
    async function deleteProject(id) {
        if (!confirm("Supprimer ce projet ?")) return;
        projects = projects.filter(p => p.id !== id);
        await saveAll();
        renderList();
        if (document.getElementById("plan-id").value === id) clearForm();
    }
    async function saveCurrentProject() {
        const id = document.getElementById("plan-id").value;
        const pData = {
            id: id || "plan-" + Date.now(),
            name: document.getElementById("field-name").value,
            dates: document.getElementById("field-dates").value,
            flexibility: document.getElementById("field-flexibility").value,
            duration: document.getElementById("field-duration").value,
            budget_target: document.getElementById("field-budget_target").value,
            mgmt_tool: document.getElementById("field-mgmt_tool").value,
            custom_cols: document.getElementById("field-custom_cols").value,
            transport: document.querySelector('input[name="transport"]:checked')?.value || "vr"
        };
        document.querySelectorAll('input[name^="col_"]').forEach(cb => {
            pData[cb.name] = cb.checked;
        });
        if (id) {
            const index = projects.findIndex(p => p.id === id);
            if (index !== -1) projects[index] = pData;
        } else {
            projects.push(pData);
        }
        await saveAll();
        renderList();
        clearForm();
    }
    async function saveAll() {
        const btn = document.getElementById("submit-btn");
        const originalText = btn.innerHTML;
        btn.disabled = true;
        btn.innerHTML = "<span class='spinner-border spinner-border-sm me-2'></span>Sauvegarde...";
        try {
            const res = await fetch("/fr/home/api/save-form", {
                method: "POST",
                headers: { "Content-Type": "application/json" },
                body: JSON.stringify({ formID: formID, data: { projects: projects } })
            });
            const resData = await res.json();
            if (resData.status === "success") {
                btn.innerHTML = "<i class='bi bi-check-lg me-2'></i>Sauvegardé !";
                setTimeout(() => { btn.innerHTML = originalText; btn.disabled = false; }, 2000);
            } else {
                alert("Erreur lors de la sauvegarde : " + (resData.message || "inconnue"));
                btn.disabled = false; btn.innerHTML = originalText;
            }
        } catch (err) { console.error("Erreur réseau:", err); btn.disabled = false; btn.innerHTML = originalText; }
    }
    function generatePlanPrompt() {
        const name = document.getElementById('field-name').value || '[Nom du projet]';
        const dates = document.getElementById('field-dates').value || '[Dates]';
        const transportEl = document.querySelector('input[name="transport"]:checked');
        const transport = transportEl ? transportEl.parentElement.innerText.trim() : '[Transport]';
        let cols = [];
        document.querySelectorAll('input[name^="col_"]:checked').forEach(cb => {
            cols.push(cb.parentElement.innerText.trim());
        });
        const customCols = document.getElementById('field-custom_cols').value;
        if (customCols) cols.push(customCols);
        const prompt = `En tant qu'expert en planification de voyage, génère un itinéraire détaillé pour mon projet "${name}".
Détails :
- Période : ${dates}
- Mode de transport : ${transport}

Format de sortie : Génère un tableau CSV valide (utilisant la virgule comme séparateur) incluant exactement les colonnes suivantes : ${cols.join(', ')}.
Assure-toi que la colonne "Catégorie" contient des valeurs simples (ex: Hébergement, Activité, Restaurant) pour faciliter l'import dans Google My Maps.
La règle d'or à respecter : Ajoute systématiquement 20% de marge au temps de route estimé par les algorithmes standards.`;
        document.getElementById('plan-prompt-text').innerText = prompt;
        document.getElementById('plan-prompt-container').style.display = 'block';
        document.getElementById('plan-prompt-container').scrollIntoView({ behavior: 'smooth' });
    }
    function copyPlanPrompt() {
        const text = document.getElementById('plan-prompt-text').innerText;
        navigator.clipboard.writeText(text).then(() => { alert('Prompt de planification copié !'); });
    }
</script>

<div class="alert alert-warning border-0 shadow-sm rounded-4 p-4 mt-5">
<div class="d-flex align-items-center">
<div class="flex-shrink-0"><i class="bi bi-lightbulb-fill text-dark display-6 me-4"></i></div>
<div>
<h5 class="alert-heading mb-1 fw-bold">La Règle d'Or de l'Explorateur</h5>
<p class="mb-0"><b>Ajoutez systématiquement 20% de marge</b> au temps indiqué par les GPS. Entre les pauses photos, les arrêts essence et les imprévus, la réalité dépasse toujours la théorie.</p>
</div>
</div>
</div>

<div class="alert alert-info border-0 shadow-sm rounded-4 p-4 mt-4">
<div class="d-flex align-items-center">
<div class="flex-shrink-0"><i class="bi bi-info-circle-fill text-primary display-6 me-4"></i></div>
<div>
<h5 class="alert-heading mb-1 fw-bold">Le rôle de cette étape</h5>
<p class="mb-0">En fixant ces paramètres, vous créez le "cadre" de votre voyage. L'IA pourra ensuite remplir ce cadre avec des étapes cohérentes, en respectant votre budget quotidien et votre rythme de déplacement.</p>
</div>
</div>
</div>

---

## Ressource — 1.3 ia masterclass itineraire

# 1.3 - Masterclass : Itinéraires avec l'IA

Planifier un voyage avec l'intelligence artificielle ne s'arrête pas à demander "Fais-moi un itinéraire pour le Japon". Pour obtenir des résultats vraiment utiles, vous devez apprendre à **guider** l'IA.

## Les 4 piliers d'un bon Prompt de Voyage

1. **Le Contexte Précis :** Donnez vos dates, votre point de départ, et surtout votre mode de transport (ex: Van, Train, Voiture de location).
2. **Vos Préférences (et celles de votre partenaire) :** Êtes-vous branché gastronomie, randonnée, ou musées d'art moderne ? L'IA doit savoir ce qui vous fait vibrer.
3. **Les Contraintes :** "Pas plus de 3 heures de route par jour", "Hébergements avec salle de bain privée uniquement", "Budget de 150€ par jour".
4. **La Météo et la Saison :** Demandez à l'IA de prendre en compte le climat pour éviter les mauvaises surprises (ex: mousson, canicule).

---

## 🛠️ Exemple de Prompt "Expert"

> *"Je planifie un voyage de 14 jours en Bretagne en juin avec ma partenaire. Nous voyageons en voiture et privilégions les petits villages authentiques et la gastronomie locale (fruits de mer). Nous souhaitons éviter les zones trop touristiques. Propose-moi un itinéraire détaillé qui inclut au moins 3 jours sur la côte de Granit Rose, avec des suggestions d'activités de marche légère de moins de 5km."*

---

## 💡 Optimisation Logistique
L'IA peut aussi vous aider à regrouper vos activités par proximité géographique. Une fois que vous avez une liste de lieux, demandez-lui :
> *"Réorganise cette liste de 12 lieux pour minimiser les déplacements en voiture et crée un planning quotidien cohérent."*

---

<div class="alert alert-success border-0 shadow-sm rounded-4 p-4 mt-5">
    <div class="d-flex align-items-center">
        <div class="flex-shrink-0"><i class="bi bi-robot text-success display-6 me-4"></i></div>
        <div>
            <h5 class="alert-heading mb-1 fw-bold">Le Saviez-vous ?</h5>
            <p class="mb-0">Vous pouvez aussi demander à l'IA de scanner les avis d'influenceurs ou de blogs de voyage pour dénicher des "joyaux cachés" que les guides classiques oublient souvent.</p>
        </div>
    </div>
</div>

<div class="text-center mt-5">
    <a href="/fr/home/fr/2-planification/GoogleSheet-contenue" class="btn btn-primary btn-lg px-5 shadow-sm fw-bold">
        étapes SUIVANTE : MAÎTRISER GOOGLE SHEETS <i class="bi bi-arrow-right ms-2"></i>
    </a>
</div>

---

## Ressource — 1.4 checklist preparation

## 🎯 Objectif
Valider les points critiques de votre plan avant de passer à la phase de réservation et d'exécution.

### 🎥 Le dernier check avant le départ
<div class="video-container mb-4">
  <div class="ratio ratio-16x9 shadow-sm rounded-4 overflow-hidden border bg-light">
    <iframe src="https://drive.google.com/file/d/1Yi3PkhnJf5_Cw3Gvw4PXdifHNT-125Bm/preview" title="Checklist de préparation d’itinéraire" loading="lazy" allow="autoplay; encrypted-media; fullscreen; picture-in-picture" allowfullscreen></iframe>
  </div>
</div>

---

### 📝 Votre Feuille de Route
<!-- trip-only:start -->

<form class="local-form" data-form-id="checklist-preparation-itineraire">
    
    <h4>📋 Points de Validation Logistique</h4>
    <div class="form-group">
        <label class="checkbox"><input type="checkbox" name="check_duree"> Durée totale cohérente avec les distances</label>
        <label class="checkbox"><input type="checkbox" name="check_equilibre"> Étapes équilibrées (pas plus de 4h de route en moyenne)</label>
        <label class="checkbox"><input type="checkbox" name="check_repos"> Temps de repos réel prévu (Jours off)</label>
        <label class="checkbox"><input type="checkbox" name="check_transport"> Moyens de transport locaux confirmés (disponibilité)</label>
    </div>

    <h4>✨ Alignement & Budget</h4>
    <div class="form-group">
        <label class="checkbox"><input type="checkbox" name="check_intention"> Activités alignées avec mon intention profonde (Pilier 1)</label>
        <label class="checkbox"><input type="checkbox" name="check_hebergement"> Hébergements repérés ou réservés selon mon style</label>
        <label class="checkbox"><input type="checkbox" name="check_budget"> Budget estimé par étape validé</label>
        <label class="checkbox"><input type="checkbox" name="check_flexibilite"> Zone de flexibilité prévue en cas d’imprévu</label>
    </div>

    <h4>📝 Notes & Ajustements de dernière minute</h4>
    <div class="form-group">
        <textarea name="notes_checklist" class="form-control" rows="3" placeholder="Notes sur les éléments à vérifier encore..."></textarea>
    </div>

    <div style="margin-top: 30px;">
        <button type="submit" class="btn btn-primary btn-lg">💾 Enregistrer mon état d'avancement</button>
    </div>
</form>

<!-- trip-only:end -->

---

### 🎯 Pourquoi cette liste ?
Un oubli en phase de planification se paye souvent en **temps perdu** ou en **stress** une fois sur place. Prenez 5 minutes pour tout cocher sereinement.

---

## Ressource — 1.5 plan b imprevu

## 🎯 Objectif
Anticiper les aléas du voyage (météo, pannes, fermetures) pour ne jamais se retrouver bloqué et garder son calme en toute circonstance.

### 🎥 L'imprévu fait partie du voyage
<div class="video-container mb-4">
  <div class="ratio ratio-16x9 shadow-sm rounded-4 overflow-hidden border bg-light">
    <iframe src="https://drive.google.com/file/d/13zaEYowSOUaay4FvPH_fTxGAF3pLoi5z/preview" title="Préparer un plan B" loading="lazy" allow="autoplay; encrypted-media; fullscreen; picture-in-picture" allowfullscreen></iframe>
  </div>
</div>

---

### 📝 Votre Stratégie de Secontenu
<!-- trip-only:start -->

<form class="local-form" data-form-id="plan-b-imprevus">
    
    <h4>🚧 Anticipation des Risques</h4>
    <div class="form-group">
        <label>Quels sont les 2 risques majeurs sur votre prochain itinéraire ?</label>
        <textarea name="risques_majeurs" class="form-control" rows="2" placeholder="Ex: Météo instable en montagne, zones sans Wi-Fi..."></textarea>
    </div>

    <h4>📱 Plan B Numérique</h4>
    <div class="form-group">
        <label>Avez-vous une seconde application de navigation installée ?</label><br>
        <label class="radio-inline"><input type="radio" name="check_second_app" value="oui"> Oui (Maps.me, Organic Maps...)</label>
        <label class="radio-inline"><input type="radio" name="check_second_app" value="non"> Non</label>
    </div>

    <h4>🔋 Énergie & Autonomie</h4>
    <div class="form-group">
        <label>Solution de secontenu pour la batterie (Cochez)</label><br>
        <label class="checkbox-inline"><input type="checkbox" name="secontenu_powerbank"> Batterie externe dédiée</label>
        <label class="checkbox-inline"><input type="checkbox" name="secontenu_papier"> Impression papier des adresses clés</label>
        <label class="checkbox-inline"><input type="checkbox" name="secontenu_solar"> Chargeur solaire</label>
    </div>

    <h4>🛠️ Votre Plan Personnel</h4>
    <div class="form-group">
        <label>Mes outils de secontenu prioritaires :</label>
        <input type="text" name="mes_outils_secontenu" class="form-control" placeholder="Ex: Boussole, Garmin InReach...">
    </div>

    <div class="form-group">
        <label>Mes contacts utiles (Hors téléphone) :</label>
        <textarea name="mes_contacts_secontenu" class="form-control" rows="2" placeholder="Nom et numéros écrits dans mon carnet physique..."></textarea>
    </div>

    <div style="margin-top: 30px;">
        <button type="submit" class="btn btn-primary btn-lg">💾 Sauvegarder mon Plan B</button>
    </div>
</form>

<!-- trip-only:end -->

---

### 💡 Le Mot de la Fin
Le **Plan B** n'est pas un aveu de faiblesse, c'est l'assurance d'une **sérénité totale**. Une fois ce formulaire rempli, oubliez les risques et profitez du moment présent !

---

## Ressource — 1.6 guide google maps voyage

> **Objectif :** devenir assez à l’aise avec Google Maps pour préparer, vivre et ajuster un voyage sans vous laisser guider aveuglément par l’application.

Google Maps est bien plus qu’un bouton « Itinéraire ». Utilisé avec méthode, il devient votre carnet de lieux, votre outil de repérage, votre assistant de déplacement et un filet de sécurité quand vous avez préparé le hors ligne. Plus vous le pratiquez avant le départ, plus il vous aide à rester serein pendant le voyage.

> **Interface évolutive :** les fonctions, noms de boutons et disponibilités changent selon l’appareil, le pays et la version de l’application. Testez les actions qui comptent pour votre voyage avant de partir et confirmez les données critiques auprès des sources locales.

## 1. Prendre ses repères dans la carte

Avant de planifier un vrai trajet, prenez quelques minutes pour manipuler la carte : pincez pour zoomer, faites-la pivoter avec deux doigts et inclinez-la pour comprendre le relief ou les bâtiments lorsque cette vue est disponible. Sur téléphone, le zoom à une main peut se faire en touchant deux fois l’écran puis en faisant glisser le doigt sans le lever.

Quand vous avez trouvé un lieu, utilisez **Itinéraire** pour comparer les modes proposés : voiture, marche, vélo, transports collectifs ou autres options locales. Démarrez la navigation seulement lorsque le trajet, son heure d’arrivée et ses contraintes vous conviennent. En conduisant, gardez le téléphone fixé ou hors de portée et utilisez les commandes vocales compatibles ; ne modifiez jamais la carte en roulant.

### Configurer la lecture qui vous convient

Certaines préférences rendent la carte plus simple à lire : garder le nord en haut, modifier la taille du texte dans les réglages d’accessibilité de l’appareil, ou choisir un avatar de véhicule lorsque l’option est présente. Ces petits détails réduisent la charge mentale dans une ville inconnue.

## 2. Construire votre bibliothèque de lieux

La vraie valeur de Maps apparaît quand vous commencez à enregistrer vos lieux. Ouvrez un hébergement, une gare, un restaurant, un camping, une station de recharge ou un musée, puis choisissez **Enregistrer** et placez-le dans une liste.

### Une structure de listes utile

Créez peu de listes et nommez-les avec une convention constante :

- `Portugal — incontournables`
- `Lisbonne — repas et cafés`
- `Road trip — eau, carburant et repli`
- `Japon — réservations confirmées`

À chaque lieu important, ajoutez une note : *pourquoi l’ai-je conservé ? qui me l’a recommandé ? pour quel jour ? quelle contrainte résout-il ?* Sans annotation, votre futur vous se retrouvera avec une carte pleine d’épingles inutiles.

Utilisez les étiquettes privées pour les adresses récurrentes ou difficiles à retenir. Vous pouvez ensuite retrouver vos lieux, listes, réservations et cartes depuis l’onglet **Vous**. Masquez les listes qui ne servent pas au trajet du jour : votre carte redevient lisible.

### Partager une liste, pas toute votre vie

Une liste peut être partagée avec un proche ou un groupe. Vérifiez d’abord les notes et les lieux inclus, puis créez un lien seulement pour les personnes concernées. Une liste privée peut rester votre espace de recherche ; une liste partagée sert au plan commun.

## 3. Préparer un itinéraire réaliste

Un itinéraire de voyage n’est presque jamais un simple trajet A vers B. Ajoutez les arrêts nécessaires : carburant, recharge, repas, point de vue, pharmacie, ravitaillement ou hébergement. Dans les options d’itinéraire, utilisez **Ajouter un arrêt**, puis faites glisser les étapes pour les remettre dans un ordre réaliste.

Avant d’appuyer sur Démarrer, vérifiez :

1. le mode de transport et l’heure d’arrivée ;
2. les péages, autoroutes, ferries ou zones à éviter ;
3. le trafic actuel et, lorsque disponible, les heures habituellement chargées ;
4. le stationnement et le temps nécessaire pour rejoindre réellement le lieu ;
5. un plan B si la météo, la fatigue ou un retard changent la journée.

Pendant la navigation, recherchez le long de l’itinéraire une station-service, une aire de repos, une épicerie, un restaurant ou une pharmacie. Évaluez le détour annoncé avant d’ajouter l’arrêt. Retirez-le si le plan redevient trop chargé.

### Trafic, économie d’énergie et véhicule électrique

Les couches de trafic et les prévisions d’affluence peuvent aider à choisir l’heure d’un trajet ou d’une visite. Les itinéraires économes en carburant ou en énergie, lorsqu’ils sont disponibles, tiennent compte du type de motorisation et de facteurs tels que relief et trafic. Ils restent des estimations : l’autonomie, la météo et les bornes réellement accessibles vous appartiennent.

Pour un véhicule électrique, recherchez les bornes, filtrez par connecteur si la fonction existe, et prévoyez une solution de repli. Ne planifiez pas une recharge critique sur la seule foi d’un marqueur de carte.

## 4. Repérer un lieu avant de vous y rendre

Street View peut vous aider à reconnaître l’entrée d’un hébergement, l’emplacement d’un arrêt de bus, la largeur d’une rue ou le chemin entre une gare et votre hôtel. Sur ordinateur, l’historique d’images peut parfois montrer l’évolution d’un lieu. C’est un outil de préparation, pas une preuve de l’état actuel : travaux, accès et commerces peuvent avoir changé.

Dans certains aéroports, gares, centres commerciaux ou grands bâtiments, Maps affiche plans intérieurs, répertoires ou fonctions de guidage. Essayez-les pour vous orienter, mais gardez du temps : tous les bâtiments et toutes les régions ne sont pas couverts.

Les inguides d’affluence, de stationnement, d’accessibilité, de qualité de l’air, de météo, de réservation ou de covoiturage peuvent aussi apparaître selon le lieu. Elles sont pratiques pour comparer des options, mais ne doivent pas décider seules d’une correspondance, d’une réservation ou de votre sécurité.

### Explorer autour de vous

Recherchez en langage simple : « pharmacie près de moi », « restaurant végétarien près de la gare », « station-service sur le trajet », « parc à proximité » ou « épicerie près de l’hôtel ». Consultez ensuite horaires, avis récents, distance et itinéraire avant de vous engager. L’onglet Explorer peut suggérer activités et lieux : considérez-les comme des pistes, pas comme des recommandations fiables.

## 5. Stationnement, transports et trajets urbains

Lorsque la fonction est proposée, enregistrez votre stationnement dès votre arrivée. Ajoutez niveau, zone, photo ou rappel si cela vous aide. Pour le retrouver, cherchez le stationnement enregistré. Ne comptez pas sur une suppression automatique : vérifiez que vous avez bien noté le lieu important.

Avant un déplacement urbain, Maps peut parfois indiquer difficulté de stationnement, stationnements proches, horaires de transport, accessibilité ou itinéraires combinant plusieurs modes. Ces données sont particulièrement utiles lors d’une escale courte, mais les horaires, fermetures et disponibilités doivent être confirmés sur le site de l’opérateur.

Si vous avez des besoins d’accessibilité, cherchez les options correspondantes dans les itinéraires de transport et les inguides du lieu. Elles peuvent signaler certaines entrées ou installations ; appelez le lieu lorsque l’accessibilité est déterminante.

## 6. Préparer le mode hors ligne

<p align="center"><img src="/public/img/google-maps-guide/google-maps-hors-ligne.png" alt="Zone cartographique téléchargée pour naviguer hors ligne" style="width:100%; max-width:900px; border-radius:15px;" /></p>

Avant de quitter le Wi-Fi ou le réseau mobile, ouvrez votre profil puis **Cartes hors connexion**. Choisissez une zone assez large pour couvrir route, détours et solution de repli, téléchargez-la et vérifiez que le téléchargement est complet. Contrôlez l’espace de stockage et mettez les cartes à jour avant le départ.

Le hors ligne est une sécurité, mais il ne reproduit pas tous les services connectés : trafic en direct, horaires, inguides commerciales, options de transport et certaines recherches peuvent manquer. Conservez aussi hors ligne vos réservations, adresses, billets, contacts d’urgence et instructions d’accès.

### Google My Maps : le complément de planification

Une carte créée dans **Google My Maps** peut être consultée dans Google Maps avec le même compte Google, dans vos cartes enregistrées. My Maps est l’outil pour importer et éditer des calques, CSV, KML, KMZ, GPX, XLSX ou données Google Sheets sur ordinateur ; Google Maps sert surtout à consulter votre travail sur mobile. Les sections de niveau 2 et 3 approfondissent cette chaîne de travail.

## 7. Communiquer et partager votre position avec prudence

Le partage de position est utile pour coordonner une caravane, retrouver un proche, indiquer votre progression ou rassurer quelqu’un à l’arrivée. Dans votre profil, ouvrez **Partage de position**, choisissez uniquement les contacts de confiance et définissez une durée précise. Vous pouvez arrêter le partage à tout moment depuis le même espace.

Pendant une navigation, une option de partage de progression peut parfois être proposée. Utilisez-la seulement si tout le groupe comprend le fonctionnement et si le lien n’est pas public.

> Ne partagez ni votre position continue, ni vos horaires, ni le lieu exact où vous dormez avec des inconnus. Convenez aussi à l’avance de ce qu’un proche doit faire si vous ne donnez pas de nouvelles.

### Chronologie et données personnelles

La chronologie Google Maps est facultative. Si vous l’activez, elle peut enregistrer vos visites et trajets afin de vous les faire retrouver. Prenez le temps de vérifier le paramètre de sauvegarde, la durée de conservation et la procédure de suppression. La chronologie est un choix de mémoire personnelle, pas une obligation de voyage.

## 8. Fonctions avancées : les pratiquer une à une

Les outils suivants ne doivent pas tous être maîtrisés avant le premier voyage. Gardez cette section comme un laboratoire : choisissez une fonction, essayez-la près de chez vous, puis intégrez-la à votre routine si elle vous sert réellement.

### Navigation vocale et mains libres

Si votre appareil et vos réglages le permettent, utilisez l’assistant vocal pour limiter les manipulations pendant la conduite. Les formulations varient, mais vous pouvez essayer :

- « Quelle est ma prochaine étape ? »
- « Comment est la circulation ? »
- « Trouve une station-service / une aire de repos / une pharmacie. »
- « Évite les péages » ou « Évite les autoroutes ».
- « Quel est mon temps d’arrivée ? »
- « Arrête la navigation. »

Vous pouvez aussi demander une recherche autour de vous : restaurant, hôtel, supermarché, stationnement, gare, plage, musée ou parc. L’assistant n’est pas infaillible et la reconnaissance vocale dépend de la langue, du réseau et du bruit ambiant. Vérifiez le résultat lorsque vous êtes arrêté ; le but est de garder les yeux sur la route, non de remplacer votre jugement.

### Itinéraires complexes et arrêts en contenu de route

Avant le départ, entrez destination et point de départ, ouvrez le menu d’itinéraire puis choisissez **Ajouter un arrêt**. Ajoutez vos étapes et faites-les glisser pour modifier l’ordre. Cette méthode sert autant à un road trip qu’à une journée banale : logement, café, station-service, activité et dîner.

Pendant la navigation, ouvrez la recherche le long du trajet pour ajouter une station-service, un restaurant, une épicerie ou un café. Maps indique normalement le détour estimé. Si vous changez d’avis, ouvrez le panneau de navigation, choisissez l’arrêt en contenu et supprimez-le. Pour les transports collectifs, les possibilités de multiples arrêts peuvent être différentes : vérifiez alors chaque correspondance séparément.

### Options de route et préparation automobile

Dans les options de navigation, vérifiez les préférences pertinentes pour votre journée : éviter péages, autoroutes ou ferries ; privilégier l’efficacité énergétique ; choisir le type de motorisation lorsque l’option existe. Ces choix sont utiles notamment en VR, sur une route de montagne ou dans un pays où les péages changent beaucoup le coût.

Google Maps peut proposer un itinéraire le plus rapide et un autre plus économe. Comparez le temps gagné, les kilomètres, le relief et votre marge de carburant. Aucun itinéraire ne connaît le gabarit de votre véhicule, vos contraintes de hauteur, l’état réel d’une petite route ou la disponibilité certaine d’une borne. Vérifiez ces éléments ailleurs lorsque c’est nécessaire.

### Transports publics, covoiturage et arrivée au bon endroit

Pour les déplacements sans voiture, sélectionnez le mode transport collectif et examinez heure de départ, durée, correspondances et arrêt d’arrivée. Vous pouvez aussi chercher une gare, une station de métro, un arrêt de bus, une station de taxi, une location de vélos ou de scooters près du lieu voulu. Dans certaines régions, Maps affiche des services de covoiturage ou des liens vers leurs applications ; disponibilité, prix et réservation relèvent toujours du prestataire.

Préparez particulièrement les gares et aéroports : repérez le terminal, la zone de dépose, l’arrêt de transport et le temps à pied jusqu’au quai ou à la porte. Lorsque des plans intérieurs ou Live View sont proposés, ils peuvent faciliter l’orientation, mais prévoyez une marge car ils ne couvrent pas tous les lieux.

### Marche, Live View et Street View

Pour un itinéraire piéton, choisissez le mode marche. Dans les zones compatibles, **Live View** peut superposer des indications sur l’image de la caméra. Utilisez-le à l’arrêt, dans un environnement sûr, et revenez à la carte ou à l’écoute vocale en marchant : regarder l’écran ne doit jamais vous faire ignorer la circulation ou le sol.

Street View sert à préparer une arrivée. Recherchez le lieu, ouvrez la photo ou la vue de rue, et observez le trottoir, l’entrée, le numéro, l’arrêt de bus ou la rue adjacente. Sur ordinateur, lorsque l’icône d’historique existe, comparez les images disponibles dans le temps. Ne déduisez jamais qu’un accès est ouvert aujourd’hui parce qu’une image ancienne le montre.

### Réservations, calendrier et documents de voyage

Si vous utilisez un compte Google et les services associés, Maps peut parfois afficher des réservations, événements ou inguides de voyage. Vérifiez que les droits d’accès conviennent à vos attentes de confidentialité et ne vous fiez jamais à cette seule vue : gardez confirmations, billets, numéros de réservation et conditions d’annulation hors ligne.

Vous pouvez envoyer un lieu ou un itinéraire préparé sur ordinateur vers un téléphone connecté au même compte lorsque l’option est proposée. Testez cette synchronisation avant le départ. Pour une réservation d’hôtel, de restaurant, d’activité, de vol ou de covoiturage présentée via Maps, lisez toujours les conditions sur le site du fournisseur avant de payer.

### Trouver le bon moment et le bon service

Le profil d’un lieu peut indiquer horaires, avis, photos, téléphone, site web, fourchette de prix, accessibilité et heures populaires. Utilisez ces données pour :

- choisir un créneau moins chargé pour un musée, une épicerie ou un restaurant ;
- vérifier si une attraction semble adaptée à vos contraintes alimentaires ou de mobilité ;
- trouver une épicerie, une laverie, une aire de repos, une pharmacie ou une station-service ;
- préparer un repas, une pause ou un ravitaillement le long d’un trajet.

Les inguides fournies par un établissement ou par les utilisateurs peuvent être incomplètes. Appelez directement pour une allergie, une accessibilité indispensable, une réservation importante ou une fermeture possible.

### Modifier et améliorer la carte commune

Si vous constatez une adresse, un horaire, un lieu ou une route incorrecte, utilisez **Suggérer une modification** ou l’outil de contribution disponible dans votre version de Maps. Expliquez le problème de façon factuelle et joignez seulement des inguides que vous êtes autorisé à publier. Une suggestion est soumise à vérification : ne supposez pas qu’elle sera visible immédiatement.

Vous pouvez aussi ajouter un avis ou une photo après votre voyage. Privilégiez les détails utiles — accès, réservation, saison, équipements, accessibilité — et évitez de publier des inguides personnelles, des lieux sensibles ou la position précise d’un bivouac fragile.

### Musique, affichage et confort d’utilisation

Selon l’appareil, un lecteur audio peut être intégré à la navigation. Préparez vos playlists et téléchargements avant de partir ; ne cherchez pas une chanson en conduisant. Ajustez la taille du texte, l’orientation nord, le volume des instructions et les notifications avant le trajet. Une interface calme et lisible est plus utile qu’une accumulation de fonctions ouvertes.

## 9. Checklist détaillée : avant, pendant et après

### Avant le voyage

- Créez une liste par ville, étape ou thème et adoptez une convention de nommage.
- Enregistrez hébergements, transports, activités, repas, services, stationnements et options de repli.
- Ajoutez une note à chaque point majeur : raison, source, horaire ou contrainte.
- Vérifiez Street View pour les arrivées compliquées et les grands terminaux.
- Construisez les itinéraires de chaque journée avec leurs arrêts nécessaires.
- Comparez trafic, péages, ferries, carburant, recharge et marge horaire.
- Téléchargez les zones hors ligne et testez-les en mode avion.
- Réglez votre appareil : taille du texte, voix, batterie, partage et données personnelles.

### Pendant le voyage

- Enregistrez votre stationnement dès l’arrivée si vous risquez de l’oublier.
- Recherchez les services le long du trajet, sans manipuler l’écran en conduisant.
- Consultez les horaires et l’affluence, puis confirmez localement ce qui est critique.
- Masquez les listes non pertinentes et gardez à l’écran seulement la journée en contenu.
- Utilisez le partage de position avec un objectif, des personnes choisies et une heure de fin.
- Ajoutez les bonnes adresses et les problèmes constatés pour votre prochaine visite.

### Après le voyage

- Conservez les lieux réellement recommandables et supprimez les doublons ou idées abandonnées.
- Complétez les notes tant que le souvenir est frais : accès, prix, saison et alternatives.
- Vérifiez vos partages de position et vos paramètres de chronologie.
- Transformez les inguides utiles en listes, carte My Maps ou itinéraire réutilisable.

## 10. Votre apprentissage en trois temps

### Avant le voyage

- Créez vos listes, étiquetez les lieux récurrents et ajoutez des notes.
- Préparez les journées importantes avec arrêts, alternatives et temps de retour.
- Téléchargez vos cartes hors connexion et testez-les en mode avion.
- Repérez visuellement les arrivées complexes : gare, terminal, parking, hôtel.

### Pendant le voyage

- Consultez trafic, horaires et services, puis comparez-les à la réalité locale.
- Gardez la carte propre en masquant les listes inutiles.
- Enregistrez le stationnement, notez les lieux réellement utiles et ajustez vos étapes.
- Utilisez le partage de position seulement lorsqu’il a une raison et une fin claire.

### Après le voyage

- Nettoyez les listes : gardez les bonnes adresses, supprimez les doublons et complétez vos notes.
- Consultez votre chronologie seulement si vous l’avez volontairement activée.
- Transformez les points les plus utiles en une carte ou un itinéraire réutilisable.

## Ressources officielles

- [Démarrer avec Google Maps](https://support.google.com/maps/answer/144349)
- [Enregistrer des lieux favoris](https://support.google.com/maps/answer/3184808)
- [Planifier un trajet et consulter le trafic](https://support.google.com/maps/answer/7565193)
- [Gérer la chronologie Google Maps](https://support.google.com/maps/answer/6258979)
- [Itinéraires économes en carburant ou énergie](https://support.google.com/maps/answer/11470237)

## 🛠️ Atelier : devenir autonome en 30 minutes

Préparez une journée réelle de voyage, puis testez-la :

1. Créez une liste et ajoutez départ, activité, repas, ravitaillement, stationnement et solution de repli.
2. Ajoutez une note utile à cinq lieux et masquez les autres listes.
3. Construisez l’itinéraire avec tous les arrêts indispensables ; observez trafic, options et heure d’arrivée.
4. Téléchargez la zone nécessaire et vérifiez-la en mode avion.
5. Enregistrez un stationnement près de chez vous, puis retrouvez-le.
6. Ouvrez Street View pour préparer l’arrivée à un lieu inconnu.
7. Si vous voyagez avec quelqu’un, faites un essai de partage de position limité à 15 minutes, puis arrêtez-le.

Vous ne mémorisez pas seulement des boutons : vous construisez des réflexes qui vous feront gagner du temps et de la sérénité avant et pendant chaque voyage.

---

## Ressource — 2.0 guide complet google my maps

> **Objectif de la section :** transformer vos listes de lieux en une carte de voyage structurée, partageable et réutilisable.

> **Note de fiabilité.** Cette section conserve le contenu fonctionnel de l’ebook source. Les menus, droits de partage, imports et options de Google My Maps peuvent évoluer selon le navigateur et le compte Google. Testez les étapes critiques sur votre propre carte avant le départ.

## 1. Cette section est-elle pour vous ?

Elle s’adresse autant aux personnes qui découvrent My Maps qu’aux utilisateurs de Google Maps qui possèdent déjà beaucoup de listes. Les listes enregistrées sont très utiles, mais elles ne suffisent pas toujours à visualiser, prioriser et optimiser un itinéraire complet. My Maps est particulièrement utile pour planifier un ou plusieurs voyages lorsque vous voulez regrouper toutes vos inguides dans une vue structurée.

## 2. Pourquoi utiliser Google My Maps ?

My Maps complète Google Maps par une carte personnalisable, composée de calques. Vous pouvez y organiser attractions, restaurants, hébergements, transports, activités et solutions de repli ; ajouter descriptions, notes et images ; collaborer avec des proches ; et voir l’ensemble des lieux sur une seule carte.

La consultation sur mobile permet de retrouver la carte pendant le voyage avec le même compte Google, mais l’édition et les imports se font principalement sur ordinateur. Pour une décision urgente sur téléphone, les lieux enregistrés dans Google Maps restent parfois plus rapides à modifier.

## 3. Créer votre première carte

1. Ouvrez [Google My Maps](https://www.google.com/maps/d/) dans un navigateur de bureau.
2. Vérifiez en haut à droite que vous utilisez le bon compte Google.
3. Cliquez sur **Créer une carte**.
4. Cliquez sur « Carte sans titre » pour lui donner un nom et une description.
5. Ouvrez **Carte de base** pour choisir le fond qui vous aide le mieux : terrain, politique léger, satellite ou autre style proposé.

Le style de fond choisi sur ordinateur peut ne pas se retrouver de la même façon lors de la consultation mobile : ne construisez pas votre code couleur sur ce seul fond.

## 4. Organiser les calques

Une nouvelle carte contient une première couche. Renommez-la en cliquant sur son titre ou sur le menu à trois points, où vous pouvez aussi la supprimer. Cliquez sur **Ajouter une couche** pour en créer d’autres.

Voici des calques utiles :

- Attractions touristiques ;
- Restaurants et cafés ;
- Hébergement ;
- Transports : gares, arrêts de bus, métro ;
- Activités : randonnée, shopping, visites guidées ;
- Plans de secontenu ;
- Itinéraires de chaque journée.

Vous pouvez aussi classer les activités selon leur importance : **incontournables**, **si vous avez du temps**, puis **plans de secontenu**. Une autre méthode consiste à créer « Itinéraire — Jour 1 », « Jour 2 », etc. Organiser en jours plutôt qu’en dates facilite l’adaptation si le calendrier du voyage bouge.

## 5. Ajouter, déplacer et personnaliser des repères

Sélectionnez d’abord le bon calque : il est signalé par une barre bleue. Ajoutez ensuite un repère de l’une de ces façons :

1. recherchez un lieu, une adresse ou des coordonnées latitude-longitude, puis choisissez **Ajouter à la carte** ;
2. utilisez **Ajouter un marqueur** pour placer une épingle à un endroit sans adresse précise ;
3. importez les repères depuis un fichier, comme décrit plus loin.

Pour supprimer une punaise, sélectionnez-la puis utilisez la corbeille. Pour la déplacer vers un autre calque, faites-la glisser dans la légende de la carte. Vérifiez toujours une petite entreprise, un départ de sentier ou un lieu sans adresse : les fiches Google peuvent être imprécises.

Cliquez sur une épingle puis sur le crayon pour modifier titre et notes. Avec le seau de peinture, changez couleur et icône ; « Autres icônes » donne accès à davantage de symboles. Vous pouvez attribuer une couleur par catégorie, par couche ou selon votre propre logique. L’icône appareil photo permet d’ajouter image ou vidéo pour enrichir la carte après une visite.

## 6. Ajouter un itinéraire à la carte

Un calque d’itinéraire affiche le trajet d’une promenade, d’un parcontenu vélo ou d’un road trip. Cliquez sur l’outil d’itinéraire sous la barre de recherche, choisissez le mode — conduite, marche ou vélo — puis indiquez les points A et B. Ajoutez des destinations supplémentaires depuis la légende ou en double-cliquant sur la carte.

Réorganisez les étapes par glisser-déposer. Vous pouvez faire glisser une portion de l’itinéraire pour emprunter une autre route, pratique pour une piste ou une route précise. Le menu de la couche peut afficher les étapes, la distance et le temps estimé.

> **Limite à connaître :** un calque d’itinéraire My Maps ne fournit pas une navigation pas à pas dans Google Maps. Pour naviguer, ouvrez une épingle, choisissez **Itinéraire**, puis utilisez la navigation standard de Google Maps.

Le ruban à mesurer sous la barre de recherche permet aussi de calculer la distance entre deux repères : cliquez sur le premier, puis sur le second.

## 7. Partager et consulter une carte

Pour partager, ouvrez la carte puis utilisez le bouton de partage au-dessus des calques. Vous pouvez donner un droit de consultation ou inviter des personnes précises à modifier la carte. L’intégration sur un site peut nécessiter un accès plus large : vérifiez soigneusement les droits avant de publier une carte contenant un hébergement, un itinéraire ou des inguides personnelles.

Sur iPhone ou Android, ouvrez Google Maps avec le même compte, accédez à **Vous** ou **Enregistrés**, puis à **Cartes**, et choisissez votre My Map. La légende permet d’activer ou masquer les calques ; touchez une épingle pour lire ses notes, voir ses images ou demander un itinéraire.

<p align="center"><img src="/public/img/google-my-maps-guide/google-my-maps-mobile.jpeg" alt="Carte Google My Maps consultée sur téléphone" style="max-width:360px; width:100%; border-radius:15px;" /></p>

## 8. Importer des lieux depuis Sheets, CSV ou Excel

L’import est utile lorsque vous avez beaucoup de lieux, que vos données sont déjà dans un tableau ou que vous voulez conserver des champs supplémentaires. Préparez une feuille avec, au minimum, un nom de lieu et une adresse ou des coordonnées latitude-longitude. Ajoutez si nécessaire catégorie, site web, téléphone, description et notes.

Dans une couche vierge, cliquez sur **Importer**. Téléversez un CSV ou XLSX, ou choisissez une feuille Google Sheets dans Drive. My Maps vous demande ensuite :

1. quelle colonne contient la localisation ;
2. quelle colonne contient le nom du lieu.

Pour styliser les points, ouvrez le style de la couche. Utilisez des styles individuels pour personnaliser point par point, ou regroupez les lieux selon une colonne de catégorie afin d’attribuer une couleur ou une icône à chaque catégorie.

Vous pouvez ajouter de nouvelles lignes au tableau puis utiliser le menu de la couche et **Réimporter et fusionner** / **Ajouter plus d’éléments** lorsque l’option est proposée. Les repères manuels restent possibles dans une couche importée. Les images insérées dans une cellule Sheets ne sont généralement pas importées comme image de repère ; gardez donc les liens ou ajoutez-les ensuite manuellement.

## 9. Importer un trajet KML ou GPX

My Maps peut importer des fichiers KML et GPX issus d’un GPS ou d’applications d’activité. C’est utile pour partager un trajet de marche, vélo ou conduite sans le retracer. La qualité dépend naturellement de la précision GPS du relevé.

L’ebook indique qu’un trajet de la chronologie Google Maps peut être exporté au format KML puis importé dans un nouveau calque. **Cette possibilité dépend désormais de la version de la chronologie et des paramètres de l’appareil : vérifiez l’option d’export dans votre compte avant de compter dessus.**

Après import, vous pouvez modifier couleur et épaisseur d’une ligne, icônes des arrêts et points de l’itinéraire. Un GPX obtenu depuis une application de fitness suit le même principe : exportez-le depuis cette application, créez un calque, puis choisissez **Importer**.

## 10. Exporter My Maps vers Google Sheets

My Maps exporte une carte ou un calque en KML/KMZ. Pour travailler les données dans Google Sheets :

1. ouvrez la carte et son menu ;
2. choisissez l’export KML/KMZ ;
3. enregistrez le fichier ;
4. convertissez-le en CSV avec un outil fiable ou une méthode adaptée ;
5. dans Google Sheets, utilisez **Fichier > Importer** ;
6. vérifiez, nettoyez et organisez les colonnes importées.

Cette conversion est particulièrement utile pour analyser, budgéter, partager ou enrichir les données. La section « Exporter de Google Sheets vers My Maps » approfondit ensuite le retour vers la carte.

## 11. Préparer le bon départ et réviser l’itinéraire

Pour arriver à une heure précise, créez l’itinéraire dans Google Maps sur ordinateur, puis utilisez l’option « Partir à » ou « Arrivée avant » si elle est disponible afin de consulter les conditions de trafic probables pour un jour et une heure donnés. Les notifications de trajets ou de déplacements réguliers peuvent aussi être configurées dans les réglages de Maps selon votre appareil.

Révisez vos itinéraires régulièrement : déplacez un point, supprimez-le, comparez les alternatives et mettez à jour ce qui a changé. Une carte de voyage est un document vivant, pas un programme rigide.

## 12. Créer une carte ou rester dans les lieux enregistrés ?

L’ebook émet une réserve juste : My Maps n’est pas toujours l’outil le plus rapide pour ajuster un voyage sur téléphone. Les lieux enregistrés de Google Maps sont moins personnalisables, mais plus faciles à modifier instantanément. Créez une My Map lorsque vous avez besoin de calques, d’icônes, de lignes personnalisées, d’imports de données ou de collaboration avec plusieurs personnes. Sinon, une liste Google Maps bien annotée peut suffire.

<p align="center"><img src="/public/img/google-my-maps-guide/google-my-maps-creation.png" alt="Création d’un itinéraire dans Google My Maps" style="width:100%; max-width:1000px; border-radius:15px;" /></p>

## 🛠️ Atelier : votre carte de voyage réutilisable

1. Créez une carte et nommez-la selon une destination réelle.
2. Ajoutez les calques Hébergements, Incontournables, Si vous avez du temps, Plans de secontenu et Jour 1.
3. Placez au moins cinq repères, ajoutez une note et personnalisez leurs icônes.
4. Ajoutez un itinéraire entre deux points et mesurez la distance d’une alternative.
5. Importez un petit CSV ou une feuille Sheets avec trois lieux catégorisés.
6. Consultez la carte sur votre téléphone, masquez un calque puis ouvrez une épingle dans Google Maps.
7. Partagez-la avec un proche en lecture seule, ou invitez-le comme éditeur sur une copie de test.

Vous disposez maintenant d’une structure complète : une carte lisible pour le voyage et des données que vous pourrez enrichir, partager et réutiliser.

---

## Ressource — 2.1 ia csv itinerary generation

## 🤖 L'IA comme Architecte de Voyage
L'un des plus grands gains de temps de l'voyageur bien préparé est la capacité de transformer une idée floue en un tableau de données structuré. Au lieu de copier-coller des inguides pendant des heures, nous demandons à l'IA de générer un fichier **CSV** (Comma Separated Values).

### 📝 Pourquoi le format CSV ?
Le CSV est un format universel que toutes les machines comprennent. Il permet :
1.  **L'import automatique** dans Google My Maps.
2.  **L'ouverture directe** dans Excel ou Google Sheets.
3.  **Le traitement massif** par l'IA pour ajouter des colonnes plus tard.

---

### 🛠️ La structure du Prompt "Master"
Pour que le résultat soit exploitable, votre prompt doit spécifier les colonnes exactes. Voici la structure recommandée :

> "Génère un itinéraire de [DURÉE] pour [DESTINATION] en mode [TRANSPORT]. 
> Donne-moi le résultat sous forme de **tableau CSV** (séparateur virgule) avec les colonnes : 
> **Jour, Titre, Description, Catégorie, Coordonnées GPS.**"

#### 💡 Le champ "Catégorie" : La clé de My Maps
Assurez-vous de demander à l'IA de classer chaque point dans une catégorie simple :
-   🏠 Hébergement
-   🍴 Restaurant
-   📸 Point de vue
-   🏛️ Culture
-   ⛽ Logistique

---

### 🎥 Démonstration : Du Prompt au Fichier
<div class="video-container mb-4">
  <div class="ratio ratio-16x9 shadow-sm rounded-4 overflow-hidden border bg-light">
    <iframe src="https://drive.google.com/file/d/1p88AG92g0PvuQ0B2ci063LNcBRKKWzw_/preview" title="Générer un itinéraire CSV avec l’IA" loading="lazy" allow="autoplay; encrypted-media; fullscreen; picture-in-picture" allowfullscreen></iframe>
  </div>
</div>

---

### ☑️ Exercice Rapide
1.  Ouvrez votre Assistant IA.
2.  Utilisez le prompt généré dans la section précédente.
3.  Copiez le résultat dans un bloc-notes et enregistrez-le sous le nom `itinéraire-[nom voyage].csv`.

> **Note de l'Expert :** Si l'IA refuse de donner les coordonnées GPS précises, demandez-lui les noms de lieux exacts. Vous pourrez les géolocaliser automatiquement lors de l'import.

---

## Ressource — 2.2 import csv google my maps

## 📍 La Magie de l'Importation
Maintenant que vous avez votre fichier CSV, il est temps de lui donner vie. Google My Maps permet d'importer des centaines de points d'un coup, vous épargnant ainsi des heures de recherche manuelle sur la carte.

---

### 🛠️ Étapes pas à pas
1.  Ouvrez [Google My Maps](https://www.google.com/maps/d/).
2.  Cliquez sur **"Créer une nouvelle carte"**.
3.  Dans le calque sans titre, cliquez sur le bouton bleu **"Importer"**.
4.  Faites glisser votre fichier `itinéraire-[nom voyage].csv`.
5.  **Configuration des colonnes :**
    -   *Positionner les repères* : Sélectionnez la colonne "Coordonnées GPS" ou "Titre".
    -   *Titre de vos repères* : Sélectionnez la colonne "Titre".

---

### 🎥 Tutoriel : De CSV à la Carte
<div class="video-container mb-4">
  <div class="ratio ratio-16x9 shadow-sm rounded-4 overflow-hidden border bg-light">
    <iframe src="https://drive.google.com/file/d/1ELKGGYdlZAoq4BtnM5vaHcVoz7m6fJTf/preview" title="Importer un CSV dans Google My Maps" loading="lazy" allow="autoplay; encrypted-media; fullscreen; picture-in-picture" allowfullscreen></iframe>
  </div>
</div>

---

### ⚠️ Résolution des problèmes courants
-   **Le fichier est refusé** : Vérifiez que vous avez bien utilisé la virgule (`,`) comme séparateur et non le point-virgule (`;`).
-   **Les points sont au milieu de l'océan** : Vos coordonnées GPS sont peut-être inversées (Latitude/Longitude).
-   **Certains points manquent** : Google My Maps a une limite de 2000 lignes par calque (largement suffisant pour nous !).

---

### ☑️ Action
Réalisez votre premier import maintenant avec le fichier généré à la section précédente. Si vous voyez vos épingles apparaître sur la carte, vous avez réussi l'une des étapes les plus techniques de la guide !

---

## Ressource — 2.3 manage my maps layers table

## 🛠️ Le Nettoyage de la Carte
Une fois l'importation terminée, l'itinéraire n'est pas encore parfait. Vous devez valider que chaque point correspond à vos attentes et organiser la visibilité de vos données.

---

### 📂 Maîtriser les Calques (Layers)
Les calques vous permettent de séparer les types d'inguides. Vous pouvez en créer jusqu'à 10 par carte.
-   **Conseil d'Explorateur** : Créez un calque par semaine de voyage ou par thématique (ex: "Hébergements" vs "Activités").
-   Vous pouvez activer ou désactiver un calque d'un simple clic pour ne pas surcharger la carte.

---

### 📊 L'Outil Secret : "Ouvrir la table de données"
Au lieu de cliquer sur chaque épingle une par une, utilisez la vue tableau :
1.  Cliquez sur les **3 petits points** à droite du nom de votre calque.
2.  Choisissez **"Ouvrir la table de données"**.
3.  Vous pouvez ici modifier directement les noms, les descriptions ou supprimer les lignes inutiles comme dans un fichier Excel.

---

### 🎥 Tutoriel : Édition Avancée
<div class="video-container mb-4">
  <div class="ratio ratio-16x9 shadow-sm rounded-4 overflow-hidden border bg-light">
    <iframe src="https://drive.google.com/file/d/1FOxOnmwVHhDKIQ2KIQOGvIG9-55wCB2Z/preview" title="Organiser et modifier les calques My Maps" loading="lazy" allow="autoplay; encrypted-media; fullscreen; picture-in-picture" allowfullscreen></iframe>
  </div>
</div>

---

### ☑️ Exercice pratique
1.  Ouvrez la table de données de votre carte.
2.  Supprimez 2 points qui vous semblent moins intéressants.
3.  Modifiez la description d'un hébergement pour y ajouter un lien vers son site web.
4.  Changez l'icône d'une catégorie complète (ex: mettre des tentes pour les campings) en utilisant le bouton **"Style"** (Pot de peinture).

---

## Ressource — 2.4 documenter voyage google my maps

## 🗺️ Pourquoi utiliser Google My Maps ?
Google My Maps est l'outil idéal pour transformer une liste d'idées ou un simple itinéraire en une carte de voyage vraiment exploitable. Contrairement aux listes Google Maps classiques, vous pouvez structurer vos lieux par calques, ajouter des notes utiles, partager la carte avec d'autres personnes et la consulter ensuite sur votre téléphone.

L'objectif n'est pas seulement de "mettre des épingles". L'objectif est de créer une carte de référence qui vous aide à préparer, décider et naviguer plus facilement pendant le voyage.

---

## 🎯 Ce que cette section va vous permettre de faire
À la fin de cette section, vous serez capable de :
- créer une carte My Maps dédiée à un voyage précis ;
- organiser vos lieux par catégories logiques ;
- documenter chaque étape avec des notes utiles ;
- partager la carte avec votre conjoint, vos amis ou vos clients ;
- consulter la carte sur votre téléphone pendant le déplacement.

---

## 🛠️ Étape 1 : créer la carte de base sur ordinateur
Google My Maps fonctionne surtout sur ordinateur pour la création et l'édition avancée.

1. Ouvrez [Google My Maps](https://www.google.com/maps/d/).
2. Cliquez sur **"Créer une nouvelle carte"**.
3. Renommez immédiatement la carte avec un nom clair, par exemple `Portugal 2026 - Circuit de 3 semaines`.
4. Ajoutez une courte description avec le contexte du voyage : dates, style de voyage, contraintes, priorités.

### Bon réflexe
Donnez un nom explicite à la carte et à chaque calque. Une carte bien nommée devient beaucoup plus simple à retrouver plus tard sur mobile.

---

## 📂 Étape 2 : organiser la carte en calques utiles
Les calques sont la clé d'une carte lisible. Ils évitent de tout mélanger.

Exemples de calques simples et efficaces :
- `Incontournables`
- `Hébergements`
- `Restaurants / cafés`
- `Plans B`
- `Stationnement / logistique`
- `Jour 1`, `Jour 2`, `Jour 3` si vous préférez une logique par étapes

### Conseil d'explorateur
Choisissez une seule logique d'organisation :
- soit par type de lieu ;
- soit par journée ;
- soit par zone géographique.

Évitez de mixer plusieurs logiques dans la même carte, sinon elle devient confuse.

---

## 📍 Étape 3 : ajouter et documenter les lieux
Vous pouvez ajouter un lieu en le recherchant, en cliquant sur **"Ajouter un repère"**, ou en important un fichier CSV dans les sections précédentes.

Pour chaque point important, ajoutez :
- un nom clair ;
- une courte description ;
- une note pratique ;
- un lien utile si nécessaire ;
- une icône ou une couleur cohérente.

### Exemples de notes vraiment utiles
- `Parking VR possible derrière l'épicerie`
- `Réservation obligatoire le matin`
- `Spot photo au coucher du soleil`
- `Prévoir 2 h minimum`
- `Fermé le mardi`

Une bonne carte My Maps sert à mémoriser ce qu'on oublierait une fois sur la route.

---

## 🎨 Étape 4 : rendre la carte visuelle et lisible
Une carte bien documentée doit aussi être facile à parcourir d'un coup d'œil.

Utilisez :
- une couleur par catégorie ;
- une icône par type de lieu ;
- des noms courts ;
- des descriptions utiles, mais pas trop longues.

Exemple :
- lit pour les hébergements ;
- couvert pour les restaurants ;
- étoile pour les incontournables ;
- point d'exclamation pour les plans B ou alertes.

---

## 🧭 Étape 5 : tracer un itinéraire ou mesurer une distance
Dans My Maps, vous pouvez aussi :
- tracer un itinéraire entre plusieurs étapes ;
- dessiner une ligne ou une forme ;
- mesurer la distance entre deux points.

Ces fonctions sont utiles pour :
- estimer une journée de route ;
- visualiser une randonnée ou une balade ;
- vérifier qu'un détour reste réaliste ;
- comparer plusieurs options de parcontenu.

Important : les tracés de My Maps sont excellents pour planifier, mais la navigation détaillée se fera ensuite dans Google Maps ou dans votre application GPS.

---

## 🤝 Étape 6 : partager la carte
Une carte My Maps devient encore plus utile lorsqu'elle est partagée.

Vous pouvez :
- donner un accès en lecture seule à un compagnon de voyage ;
- autoriser une autre personne à modifier la carte ;
- intégrer la carte dans un site si nécessaire.

### Bon usage
Avant de partager, vérifiez :
- que les calques sont bien nommés ;
- que les points inutiles ont été supprimés ;
- que les notes sont compréhensibles par une autre personne.

Si quelqu'un ouvre votre carte sans explication, il doit comprendre votre logique en moins de 30 secondes.

---

## 📱 Étape 7 : utiliser la carte sur votre téléphone
Sur mobile, vous consultez la carte depuis l'application Google Maps.

1. Ouvrez **Google Maps**.
2. Allez dans **Enregistrés**.
3. Descendez jusqu'à **Cartes**.
4. Ouvrez votre carte personnalisée.

Vous pourrez alors :
- afficher les repères ;
- ouvrir les notes ;
- activer ou désactiver certains calques ;
- lancer un itinéraire vers un point précis.

### Limite importante
La création et l'édition avancée sont beaucoup plus confortables sur ordinateur. Le téléphone sert surtout à consulter, retrouver et naviguer à partir des lieux enregistrés.

---

## 🧠 Bonnes pratiques pour une carte vraiment utile
- Créez une carte par voyage, pas une carte géante pour toute votre vie.
- Supprimez les points faibles ou obsolètes.
- Gardez les descriptions courtes et orientées terrain.
- Ajoutez les inguides critiques directement dans le point : horaires, coûts, réservation, stationnement, accès.
- Testez toujours votre carte sur téléphone avant le départ.

---

## 💻 Exercices à faire sur votre ordinateur
### Exercice 1 : construire votre carte de voyage
1. Créez une nouvelle carte My Maps pour un voyage réel ou fictif.
2. Ajoutez au moins 4 calques.
3. Placez au minimum 10 lieux.
4. Donnez une couleur différente à au moins 3 catégories.

### Exercice 2 : documenter intelligemment
1. Choisissez 5 lieux prioritaires.
2. Ajoutez une note pratique à chacun.
3. Ajoutez au moins 1 lien utile dans 2 repères.
4. Renommez vos points pour qu'ils soient compréhensibles sans contexte.

### Exercice 3 : préparer le partage
1. Partagez la carte avec une autre adresse Google ou un proche.
2. Demandez-lui si la structure est claire.
3. Corrigez les éléments qu'il ne comprend pas immédiatement.

---

## 📲 Exercices à faire sur votre portable
### Exercice 1 : retrouver la carte sur le terrain
1. Ouvrez Google Maps sur votre téléphone.
2. Retrouvez la carte dans **Enregistrés > Cartes**.
3. Ouvrez 3 repères différents et lisez vos notes.

### Exercice 2 : lancer une navigation utile
1. Choisissez un point de votre carte.
2. Appuyez sur **Itinéraire**.
3. Vérifiez que Google Maps lance bien la navigation vers le bon endroit.

### Exercice 3 : tester la lecture mobile
1. Activez un seul calque à la fois si votre carte est chargée.
2. Vérifiez si les noms sont lisibles sur petit écran.
3. Supprimez ou raccourcissez les intitulés trop longs depuis l'ordinateur si nécessaire.

---

## ⭐ Exercice bonus : documenter un déplacement réel
Après une sortie d'une demi-journée ou d'une journée :
1. Ajoutez les lieux réellement visités à votre carte.
2. Notez ce que vous referiez et ce que vous éviteriez.
3. Ajoutez un calque `Retours d'expérience`.

En répétant cet exercice, votre carte ne sert plus seulement à planifier. Elle devient une mémoire de voyage et une base d'amélioration continue.

---

## ☑️ Action immédiate
Créez maintenant une carte My Maps avec 3 calques minimum et 5 points bien documentés. Ouvrez-la ensuite sur votre téléphone pour vérifier qu'elle reste claire et exploitable en situation réelle.

---

## Ressource — 2.5 export mymaps ia enrichment

## 🔄 Le Cycle de Raffinement
La planification est un processus itératif. Parfois, vous avez placé vos points sur la carte, mais vous avez besoin de plus d'inguides (ex: les prix des musées, les horaires d'ouverture). Plutôt que de tout chercher manuellement, nous allons faire un "Export-Enrichissement-Import".

---

### 📥 Étape 1 : Exporter de My Maps vers CSV
1.  Dans votre carte Google My Maps, cliquez sur les **3 petits points** de la carte (à côté du titre).
2.  Choisissez **"Exporter au format KML/KMZ"**.
3.  Cochez **"Exporter au format CSV"** si l'option est proposée, sinon utilisez un convertisseur en ligne KML vers CSV.

---

### 🤖 Étape 2 : L'Enrichissement par l'IA
Maintenant, donnez ce fichier CSV (ou le texte du tableau) à l'Assistant IA avec ce prompt :

> "Voici mon itinéraire actuel en format tableau. Ajoute-moi trois colonnes supplémentaires : 
> **1. Prix d'entrée estimé ($)**
> **2. Temps de visite recommandé (Heures)**
> **3. Meilleur moment de la journée pour visiter.**"

L'IA va mouliner vos données géographiques et vous renvoyer un tableau beaucoup plus riche.

---

### 🎥 Démonstration : L'IA au service de vos données
<div class="video-container mb-4">
  <div class="ratio ratio-16x9 shadow-sm rounded-4 overflow-hidden border bg-light">
    <iframe src="https://drive.google.com/file/d/1Ze_JWasXJTwUpDFayziXZHUaZrn9JwpS/preview" title="Exporter et enrichir un itinéraire avec l’IA" loading="lazy" allow="autoplay; encrypted-media; fullscreen; picture-in-picture" allowfullscreen></iframe>
  </div>
</div>

---

### ☑️ Action
Prenez votre carte actuelle, exportez-la et demandez à l'IA d'y ajouter une colonne "Conseil de sécurité local" pour chaque point. Vous verrez instantanément la puissance de l'IA pour traiter de grandes quantités d'inguides géographiques.

---

## Ressource — 2.6 exercice pratique ia vers gpx

## 🛠️ Votre Défi : Planifier une escapade de 3 jours
Il est temps de mettre en pratique tout ce que vous avez appris. L'objectif est de réaliser la chaîne complète de planification pour un projet réel (même petit).

---

### 📋 Les étapes du défi
1.  **Génération (IA)** : Utilisez votre prompt personnalisé pour générer un itinéraire de 3 jours dans la région de votre choix. Demandez un format **CSV** avec les colonnes : Jour, Titre, Catégorie, Coordonnées GPS.
2.  **Conversion** : Copiez le texte de l'IA, enregistrez-le dans un fichier nommé `defi.csv`.
3.  **Visualisation (My Maps)** : Importez ce fichier dans une nouvelle carte Google My Maps.
4.  **Édition** : Changez les icônes par catégorie (ex: bleu pour l'eau, vert pour les parcs). Ajoutez un calque "Options de rechange".
5.  **Exportation & Navigation** : Exportez la carte et convertissez-la en **GPX**.
6.  **Test Final** : Ouvrez ce fichier GPX dans une application de navigation sur votre smartphone (OSMand, Organic Maps, Gaia).

---

### 🎥 Guide de l'exercice
<div class="video-container mb-4">
  <div class="ratio ratio-16x9 shadow-sm rounded-4 overflow-hidden border bg-light">
    <iframe src="https://drive.google.com/file/d/1vxWZYU093I6UxrdpuCPqztZMkRpuB6tL/preview" title="Exercice pratique : de l’IA au GPX" loading="lazy" allow="autoplay; encrypted-media; fullscreen; picture-in-picture" allowfullscreen></iframe>
  </div>
</div>

---

### 📝 Rapport de réussite
<form class="local-form" data-form-id="rapport-exercice-planif">
    <div class="form-group mb-4">
        <label>Avez-vous réussi à voir vos points sur votre téléphone en mode hors-ligne ?</label>
        <div class="d-flex gap-3">
            <label class="radio-inline border px-3 py-2 rounded bg-white shadow-sm"><input type="radio" name="success_gpx" value="oui" class="me-2"> ✅ Oui, tout fonctionne !</label>
            <label class="radio-inline border px-3 py-2 rounded bg-white shadow-sm"><input type="radio" name="success_gpx" value="non" class="me-2"> ❌ J'ai eu un problème technique</label>
        </div>
    </div>
    <div class="form-group mb-5">
        <label>Quelle a été l'étape la plus complexe pour vous ?</label>
        <textarea name="feedback_exercice" class="form-control border-0 bg-light" rows="3" placeholder="Dites-nous ce qui a bloqué pour que nous puissions améliorer le guide..."></textarea>
    </div>
    <button type="submit" class="btn btn-primary fw-bold px-5">ENREGISTRER MA RÉUSSITE</button>
</form>

---

## Ressource — 2.7 planification circuit caravane

<style>
    .btn-circle { width: 56px; height: 56px; border-radius: 28px; display: flex; align-items: center; justify-content: center; box-shadow: 0 4px 10px rgba(0,0,0,0.2); }
    .fab-container { position: fixed; bottom: 80px; right: 40px; z-index: 1000; }
    .prompt-box { background-color: #f1f3f5; border: 1px dashed #adb5bd; border-radius: 8px; padding: 20px; font-family: monospace; white-space: pre-wrap; font-size: 0.9rem; }
    .table-input { border: none !important; background: transparent !important; padding: 5px !important; width: 100%; }
    .table-input:focus { background: #fff !important; outline: 1px solid #ff851b !important; }
    #projects-table-container { background: #fff; border-radius: 12px; box-shadow: 0 4px 12px rgba(0,0,0,0.05); overflow: hidden; margin-bottom: 40px; }
</style>

## 🚐 L'Aventure Collective
Le circuit en caravane demande une logistique spécifique : gestion des emplacements de grande taille et rythme adapté au groupe. Utilisez cet outil pour préparer vos sorties en convoi.

---

### 🌟 Fournisseurs de Circuits Caravane Recommandés
Avant de créer votre propre itinéraire, vous pouvez vous inspirer des circuits proposés par ces organismes reconnus. Trouvez un parcontenu qui vous plaît et conservez vos choix dans votre dossier de voyage pour les personnaliser avec l’IA.

<div class="row g-3 mb-5">
    <div class="col-md-6">
        <div class="list-group shadow-sm">
            <a href="https://www.ffcc.fr/" target="_blank" class="list-group-item list-group-item-action d-flex justify-content-between align-items-center">
                <span><b>FFCC (France)</b> - Fédération Française de Camping et Caravaning</span>
                <i class="bi bi-box-arrow-up-right text-primary"></i>
            </a>
            <a href="https://www.campingcaravaningmag.ca/" target="_blank" class="list-group-item list-group-item-action d-flex justify-content-between align-items-center">
                <span><b>FQCC (Québec)</b> - Fédération Québécoise de Camping et de Caravaning</span>
                <i class="bi bi-box-arrow-up-right text-primary"></i>
            </a>
        </div>
    </div>
    <div class="col-md-6">
        <div class="list-group shadow-sm">
            <a href="https://www.adventurecaravans.com/" target="_blank" class="list-group-item list-group-item-action d-flex justify-content-between align-items-center">
                <span><b>Adventure Caravans</b> - Circuits guidés en Amérique du Nord</span>
                <i class="bi bi-box-arrow-up-right text-primary"></i>
            </a>
            <a href="https://www.fantasyrvtours.com/" target="_blank" class="list-group-item list-group-item-action d-flex justify-content-between align-items-center">
                <span><b>Fantasy RV Tours</b> - Convois organisés mondiaux</span>
                <i class="bi bi-box-arrow-up-right text-primary"></i>
            </a>
        </div>
    </div>
</div>

---

<!-- trip-only:start -->

### 👥 Vos Projets de Circuits
<div id="projects-table-container" class="border">
    <table class="table table-hover align-middle mb-0" id="projects-table">
        <thead class="table-light">
            <tr>
                <th>Nom du Circuit</th>
                <th>Véhicules</th>
                <th class="text-end">Actions</th>
            </tr>
        </thead>
        <tbody>
            <tr><td colspan="3" class="text-center py-4 text-muted"><div class="spinner-border spinner-border-sm text-primary me-2"></div>Chargement des circuits...</td></tr>
        </tbody>
    </table>
</div>

---

<div class="card shadow-sm border-0 mb-5 overflow-hidden" id="form-container">
    <div class="card-header bg-primary text-white py-3 fw-bold">
        <i class="bi bi-truck me-2"></i> <span id="form-title">DÉFINIR UN PROJET CARAVANE</span>
    </div>
    <div class="card-body p-4 p-md-5">
        <form id="caravane-form">
            <input type="hidden" name="id" id="project-id">
            <div class="form-group mb-4">
                <label class="form-label fs-5 fw-bold">Nom du circuit</label>
                <input type="text" name="name" id="field-name" class="form-control form-control-lg border-0 bg-light" placeholder="Ex: Gaspésie en convoi 2026" required>
            </div>
            <div class="row g-4 mb-4">
                <div class="col-md-6">
                    <div class="form-group">
                        <label class="fw-bold">Nombre de véhicules</label>
                        <input type="number" name="nb_vehicules" id="field-nb_vehicules" class="form-control border-0 bg-light" placeholder="Ex: 3">
                    </div>
                </div>
                <div class="col-md-6">
                    <div class="form-group">
                        <label class="fw-bold">Mode de communication</label>
                        <select name="comm_mode" id="field-comm_mode" class="form-select border-0 bg-light">
                            <option value="radio">Radio CB / Walkie-Talkie</option>
                            <option value="cell" selected>Cellulaire (WhatsApp/Zello)</option>
                            <option value="none">Aucune</option>
                        </select>
                    </div>
                </div>
            </div>
            <div class="form-group mb-5">
                <label class="fw-bold">Spécifications des véhicules (Dimensions)</label>
                <input type="text" name="vr_specs" id="field-vr_specs" class="form-control border-0 bg-light" placeholder="Ex: Fifth-wheel 30 pieds, Hauteur 12'6">
                <div class="form-text text-muted">Indispensable pour que l'IA évite les ponts bas.</div>
            </div>
            <h5 class="border-bottom pb-2 mb-4 fw-bold"><i class="bi bi-map text-primary me-2"></i>Ébauche de l'Itinéraire</h5>
            <div class="table-responsive mb-3">
                <table class="table table-bordered align-middle shadow-sm" id="itinerary-table">
                    <thead class="table-light">
                        <tr>
                            <th>Ville / Étape</th>
                            <th style="width: 100px;">Jours</th>
                            <th>Activités possibles</th>
                            <th style="width: 50px;"></th>
                        </tr>
                    </thead>
                    <tbody id="itinerary-body">
                        <!-- Lignes dynamiques -->
                    </tbody>
                </table>
            </div>
            <button type="button" class="btn btn-outline-primary btn-sm mb-5" onclick="addRow()">
                <i class="bi bi-plus-circle me-2"></i>Ajouter une étape
            </button>
            <div class="text-center pt-4 mb-4">
                <button type="button" class="btn btn-warning fw-bold shadow-sm px-4" onclick="generateCaravanePrompt()">
                    <i class="bi bi-lightning-charge-fill me-2"></i>GÉNÉRER LE PROMPT POUR L'IA
                </button>
            </div>
            <div id="prompt-container" style="display: none;" class="mb-5">
                <div class="prompt-box mb-3" id="ai-prompt-text"></div>
                <div class="text-center">
                    <button type="button" class="btn btn-sm btn-secondary" onclick="copyPrompt()">
                        <i class="bi bi-clipboard me-2"></i>Copier le prompt
                    </button>
                    <a href="/tools/askAI" target="_blank" class="btn btn-sm btn-primary ms-2">
                        <i class="bi bi-robot me-2"></i>Ouvrir l'Assistant IA
                    </a>
                </div>
            </div>
            <div class="text-center pt-4 border-top">
                <button type="submit" class="btn btn-primary btn-lg px-5 shadow-sm fw-bold" id="submit-btn">
                    <i class="bi bi-save me-2"></i>SAUVEGARDER CE PROJET
                </button>
                <button type="button" class="btn btn-link text-muted btn-lg ms-2" onclick="clearForm()">Annuler</button>
            </div>
        </form>
    </div>
</div>

<div class="fab-container">
    <button class="btn btn-warning btn-circle btn-lg text-white shadow" onclick="clearForm()" title="Nouveau projet">
        <i class="bi bi-plus-lg fs-3"></i>
    </button>
</div>

<script>
    let projects = [];
    const formID = "planif-caravane-groupes-v4";

    function addRow(city = '', days = '1', activities = '') {
        const tbody = document.getElementById('itinerary-body');
        const row = document.createElement('tr');
        row.innerHTML = `
            <td><input type="text" class="table-input city-input" value="${city}" placeholder="Ex: Québec"></td>
            <td><input type="number" class="table-input days-input" value="${days}" min="1"></td>
            <td><input type="text" class="table-input activities-input" value="${activities}" placeholder="Ex: Visite du Vieux-Québec"></td>
            <td class="text-center"><button type="button" class="btn btn-link text-danger p-0" onclick="this.closest('tr').remove()"><i class="bi bi-trash"></i></button></td>
        `;
        tbody.appendChild(row);
    }

    function getItineraryData() {
        const data = [];
        document.querySelectorAll('#itinerary-body tr').forEach(row => {
            const city = row.querySelector('.city-input').value;
            if (city) {
                data.push({
                    city: city,
                    days: row.querySelector('.days-input').value,
                    activities: row.querySelector('.activities-input').value
                });
            }
        });
        return data;
    }

    async function loadProjects() {
        try {
            const res = await fetch(`/fr/home/api/get-form/${formID}`);
            const response = await res.json();
            if (response.data && response.data.projects) {
                projects = response.data.projects;
            }
            renderList();
        } catch (err) { console.error("Erreur chargement:", err); }
    }

    function renderList() {
        const tbody = document.querySelector("#projects-table tbody");
        if (!projects || projects.length === 0) {
            tbody.innerHTML = `<tr><td colspan="3" class="text-center py-4 text-muted">Aucun circuit enregistré.</td></tr>`;
            return;
        }
        tbody.innerHTML = "";
        projects.forEach(p => {
            const tr = document.createElement("tr");
            tr.innerHTML = `
                <td class="fw-bold text-dark">${p.name}</td>
                <td>${p.nb_vehicules || '?'} véhicule(s)</td>
                <td class="text-end">
                    <button onclick="editProject('${p.id}')" class="btn btn-sm btn-outline-primary me-1"><i class="bi bi-pencil"></i></button>
                    <button onclick="deleteProject('${p.id}')" class="btn btn-sm btn-outline-danger"><i class="bi bi-trash"></i></button>
                </td>`;
            tbody.appendChild(tr);
        });
    }

    function clearForm() {
        document.getElementById("project-id").value = "";
        document.getElementById("caravane-form").reset();
        document.getElementById("itinerary-body").innerHTML = "";
        addRow();
        document.getElementById("form-title").innerText = "DÉFINIR UN PROJET CARAVANE";
        document.getElementById("submit-btn").innerHTML = "<i class='bi bi-save me-2'></i>SAUVEGARDER CE PROJET";
        document.getElementById("prompt-container").style.display = "none";
        document.getElementById("form-container").scrollIntoView({ behavior: 'smooth' });
    }

    function editProject(id) {
        const p = projects.find(item => item.id === id);
        if (!p) return;
        clearForm();
        document.getElementById("project-id").value = p.id;
        document.getElementById("field-name").value = p.name || "";
        document.getElementById("field-nb_vehicules").value = p.nb_vehicules || "";
        document.getElementById("field-comm_mode").value = p.comm_mode || "radio";
        document.getElementById("field-vr_specs").value = p.vr_specs || "";
        
        const tbody = document.getElementById('itinerary-body');
        tbody.innerHTML = "";
        if (p.itinerary && p.itinerary.length > 0) {
            p.itinerary.forEach(i => addRow(i.city, i.days, i.activities));
        } else {
            addRow();
        }

        document.getElementById("form-title").innerText = "MODIFIER : " + p.name;
        document.getElementById("submit-btn").innerHTML = "<i class='bi bi-save me-2'></i>METTRE À JOUR";
        document.getElementById("form-container").scrollIntoView({ behavior: 'smooth' });
    }

    async function deleteProject(id) {
        if (!confirm("Supprimer ce circuit ?")) return;
        projects = projects.filter(p => p.id !== id);
        await saveAll();
        renderList();
        if (document.getElementById("project-id").value === id) clearForm();
    }

    async function saveCurrentProject() {
        const id = document.getElementById("project-id").value;
        const pData = {
            id: id || "cp-" + Date.now(),
            name: document.getElementById("field-name").value,
            nb_vehicules: document.getElementById("field-nb_vehicules").value,
            comm_mode: document.getElementById("field-comm_mode").value,
            vr_specs: document.getElementById("field-vr_specs").value,
            itinerary: getItineraryData()
        };
        
        if (id) {
            const index = projects.findIndex(p => p.id === id);
            if (index !== -1) projects[index] = pData;
        } else {
            projects.push(pData);
        }
        await saveAll();
        renderList();
        clearForm();
    }

    async function saveAll() {
        const btn = document.getElementById("submit-btn");
        const originalText = btn.innerHTML;
        btn.disabled = true;
        btn.innerHTML = "<span class='spinner-border spinner-border-sm me-2'></span>Sauvegarde...";
        try {
            await fetch("/fr/home/api/save-form", {
                method: "POST",
                headers: { "Content-Type": "application/json" },
                body: JSON.stringify({ formID: formID, data: { projects: projects } })
            });
            const resData = await res.json();
            if (resData.status === "success") {
                btn.innerHTML = "<i class='bi bi-check-lg me-2'></i>Sauvegardé !";
                setTimeout(() => { btn.innerHTML = originalText; btn.disabled = false; }, 2000);
            }
        } catch (err) { console.error(err); btn.disabled = false; btn.innerHTML = originalText; }
    }

    function generateCaravanePrompt() {
        const name = document.getElementById('field-name').value || '[Nom du projet]';
        const vehicles = document.getElementById('field-nb_vehicules').value || '?';
        const specs = document.getElementById('field-vr_specs').value || 'standard';
        const comm = document.getElementById('field-comm_mode').value;
        const itinerary = getItineraryData();
        let itineraryStr = itinerary.map(i => `- ${i.city} (${i.days} jours) : ${i.activities}`).join('\n');
        
        const prompt = `En tant qu'expert en planification de convois de VR/caravanes, aide-moi à finaliser cet itinéraire pour le projet "${name}" regroupant ${vehicles} véhicules.
Spécifications techniques : ${specs}.
Mode de communication : ${comm}.

Voici l'ébauche de notre parcontenu :
${itineraryStr}

Peux-tu :
1. Valider la faisabilité des étapes (distances réalistes pour un convoi).
2. Suggérer des campings spécifiques acceptant les groupes et les VR de cette taille.
3. Proposer des points de ravitaillement (eau, vidange, essence) stratégiques.
4. Transformer cet itinéraire en format tableau CSV prêt pour Google My Maps avec les colonnes : Jour, Ville, Activité, Catégorie, Coordonnées GPS.`;

        document.getElementById('ai-prompt-text').innerText = prompt;
        document.getElementById('prompt-container').style.display = 'block';
        document.getElementById('prompt-container').scrollIntoView({ behavior: 'smooth' });
    }

    function copyPrompt() {
        const text = document.getElementById('ai-prompt-text').innerText;
        navigator.clipboard.writeText(text).then(() => { alert('Prompt copié !'); });
    }

    document.addEventListener("DOMContentLoaded", function() {
        loadProjects();
        document.getElementById('caravane-form').addEventListener('submit', function(e) {
            e.preventDefault();
            saveCurrentProject();
        });
    });
</script>

<!-- trip-only:end -->

<div class="alert alert-warning border-0 shadow-sm rounded-4 p-4 mt-5">
    <div class="d-flex align-items-center">
        <div class="flex-shrink-0"><i class="bi bi-lightbulb-fill text-dark display-6 me-4"></i></div>
        <div>
            <h5 class="alert-heading mb-1 fw-bold">Le Conseil Pro</h5>
            <p class="mb-0">En circuit caravane, la vitesse du groupe est celle du véhicule le plus lent. **Réduisez vos ambitions de distance de 30%** par rapport à un voyage en solo pour maintenir l'harmonie du groupe.</p>
        </div>
    </div>
</div>

---

## Ressource — 2.8 planification ia excursion croisiere

<style>
    .btn-circle { width: 56px; height: 56px; border-radius: 28px; display: flex; align-items: center; justify-content: center; box-shadow: 0 4px 10px rgba(0,0,0,0.2); }
    .fab-container { position: fixed; bottom: 80px; right: 40px; z-index: 1000; }
    .prompt-box { background-color: #f1f3f5; border: 1px dashed #adb5bd; border-radius: 8px; padding: 20px; font-family: monospace; white-space: pre-wrap; font-size: 0.9rem; }
    #escales-table-container { background: #fff; border-radius: 12px; box-shadow: 0 4px 12px rgba(0,0,0,0.05); overflow: hidden; margin-bottom: 40px; }
</style>

## 🌊 Dominer ses escales de croisière

Les excursions "officielles" sont souvent bondées et coûteuses. L'IA de TWAI guide vous permet de redevenir maître de votre temps à terre en créant vos propres guides d'escale.

---

### 🛠️ Le Workflow Expert pour une Escale
Pour chaque port, ne vous contentez pas d'une liste de lieux. Suivez cette méthode pour une intégration parfaite :
1.  **Génération (IA)** : Demandez à l'Assistant IA un itinéraire d'escale précis en spécifiant vos heures de débarquement et de rembarquement.
2.  **Format CSV** : Demandez à l'IA de sortir les points d'intérêt en format CSV (Nom, Description, Catégorie, Coordonnées).
3.  **Visualisation (My Maps)** : Importez ce CSV dans un calque dédié à l'escale sur votre carte de voyage.
4.  **Navigation** : Convertissez en GPX pour avoir vos points d'intérêt sur votre téléphone, même sans forfait data international au port.
  
---

<!-- trip-only:start -->

### ⚓ Vos Escales Planifiées
<div id="escales-table-container" class="border">
    <table class="table table-hover align-middle mb-0" id="escales-table">
        <thead class="table-light">
            <tr>
                <th>Port d'escale</th>
                <th>Temps (h)</th>
                <th>Intérêt majeur</th>
                <th class="text-end">Actions</th>
            </tr>
        </thead>
        <tbody>
            <tr><td colspan="4" class="text-center py-4 text-muted"><div class="spinner-border spinner-border-sm text-primary me-2"></div>Chargement des escales...</td></tr>
        </tbody>
    </table>
</div>

---

<div class="card shadow-sm border-0 mb-5 overflow-hidden" id="form-container">
    <div class="card-header bg-primary text-white py-3 fw-bold">
        <i class="bi bi-anchor me-2"></i> <span id="form-title">PRÉPARER UNE ESCALE</span>
    </div>
    <div class="card-body p-4 p-md-5">
        <form id="escale-form">
            <input type="hidden" name="id" id="escale-id">
            <div class="form-group mb-4">
                <label class="form-label fs-5 fw-bold">Nom du port d'escale</label>
                <input type="text" name="port_name" id="field-port_name" class="form-control form-control-lg border-0 bg-light" placeholder="Ex: Civitavecchia (Rome)" required>
            </div>
            <div class="row g-4 mb-4">
                <div class="col-md-6">
                    <div class="form-group">
                        <label class="fw-bold">Temps total à terre (Heures)</label>
                        <input type="number" name="shore_time" id="field-shore_time" class="form-control border-0 bg-light" placeholder="Ex: 8" required>
                    </div>
                </div>
                <div class="col-md-6">
                    <div class="form-group">
                        <label class="fw-bold">Intérêt majeur / Curiosité</label>
                        <input type="text" name="main_interest" id="field-main_interest" class="form-control border-0 bg-light" placeholder="Ex: Ruines romaines, Marchés" required>
                    </div>
                </div>
            </div>
            <div class="text-center pt-4 mb-4">
                <button type="button" class="btn btn-warning fw-bold shadow-sm px-4" onclick="generateEscalePrompt()">
                    <i class="bi bi-lightning-charge-fill me-2"></i>GÉNÉRER LE PROMPT D'ITINÉRAIRE
                </button>
            </div>
            <div id="prompt-container" style="display: none;" class="mb-5">
                <div class="prompt-box mb-3" id="ai-prompt-text"></div>
                <div class="text-center">
                    <button type="button" class="btn btn-sm btn-secondary" onclick="copyPrompt()">
                        <i class="bi bi-clipboard me-2"></i>Copier le prompt
                    </button>
                    <a href="/tools/askAI" target="_blank" class="btn btn-sm btn-primary ms-2">
                        <i class="bi bi-robot me-2"></i>Ouvrir l'Assistant IA
                    </a>
                </div>
            </div>
            <div class="text-center pt-4 border-top">
                <button type="submit" class="btn btn-primary btn-lg px-5 shadow-sm fw-bold" id="submit-btn">
                    <i class="bi bi-save me-2"></i>SAUVEGARDER CETTE ESCALE
                </button>
                <button type="button" class="btn btn-link text-muted btn-lg ms-2" onclick="clearForm()">Annuler</button>
            </div>
        </form>
    </div>
</div>
<div class="fab-container">
    <button class="btn btn-warning btn-circle btn-lg text-white shadow" onclick="clearForm()" title="Nouvelle escale">
        <i class="bi bi-plus-lg fs-3"></i>
    </button>
</div>
<script>
    let escales = [];
    const formID = "planification-escales-croisiere";
    async function loadEscales() {
        try {
            const res = await fetch(`/fr/home/api/get-form/${formID}`);
            const response = await res.json();
            if (response.data && response.data.escales) {
                escales = response.data.escales;
            } else if (response.data && response.data.port_name) {
                escales = [{ id: "legacy-" + Date.now(), ...response.data }];
            }
            renderList();
        } catch (err) { console.error("Erreur chargement:", err); }
    }
    function renderList() {
        const tbody = document.querySelector("#escales-table tbody");
        if (!escales || escales.length === 0) {
            tbody.innerHTML = `<tr><td colspan="4" class="text-center py-4 text-muted">Aucune escale planifiée. Préparez votre premier port !</td></tr>`;
            return;
        }
        tbody.innerHTML = "";
        escales.forEach(e => {
            const tr = document.createElement("tr");
            tr.innerHTML = `
                <td class="fw-bold text-dark">${e.port_name}</td>
                <td>${e.shore_time} h</td>
                <td>${e.main_interest || '-'}</td>
                <td class="text-end">
                    <button onclick="editEscale('${e.id}')" class="btn btn-sm btn-outline-primary me-1"><i class="bi bi-pencil"></i></button>
                    <button onclick="deleteEscale('${e.id}')" class="btn btn-sm btn-outline-danger"><i class="bi bi-trash"></i></button>
                </td>`;
            tbody.appendChild(tr);
        });
    }
    function clearForm() {
        document.getElementById("escale-id").value = "";
        document.getElementById("escale-form").reset();
        document.getElementById("form-title").innerText = "PRÉPARER UNE ESCALE";
        document.getElementById("submit-btn").innerHTML = "<i class='bi bi-save me-2'></i>SAUVEGARDER CETTE ESCALE";
        document.getElementById("prompt-container").style.display = "none";
        document.getElementById("form-container").scrollIntoView({ behavior: 'smooth' });
    }
    function editEscale(id) {
        const e = escales.find(item => item.id === id);
        if (!e) return;
        clearForm();
        document.getElementById("escale-id").value = e.id;
        document.getElementById("field-port_name").value = e.port_name || "";
        document.getElementById("field-shore_time").value = e.shore_time || "";
        document.getElementById("field-main_interest").value = e.main_interest || "";
        document.getElementById("form-title").innerText = "MODIFIER L'ESCALE : " + e.port_name;
        document.getElementById("submit-btn").innerHTML = "<i class='bi bi-save me-2'></i>METTRE À JOUR";
        document.getElementById("form-container").scrollIntoView({ behavior: 'smooth' });
    }
    async function deleteEscale(id) {
        if (!confirm("Supprimer cette escale ?")) return;
        escales = escales.filter(e => e.id !== id);
        await saveAll();
        renderList();
        if (document.getElementById("escale-id").value === id) clearForm();
    }
    async function saveCurrentEscale() {
        const id = document.getElementById("escale-id").value;
        const eData = {
            id: id || "esc-" + Date.now(),
            port_name: document.getElementById("field-port_name").value,
            shore_time: document.getElementById("field-shore_time").value,
            main_interest: document.getElementById("field-main_interest").value
        };
        if (id) {
            const index = escales.findIndex(e => e.id === id);
            if (index !== -1) escales[index] = eData;
        } else {
            escales.push(eData);
        }
        await saveAll();
        renderList();
        clearForm();
    }
    async function saveAll() {
        const btn = document.getElementById("submit-btn");
        const originalText = btn.innerHTML;
        btn.disabled = true;
        btn.innerHTML = "<span class='spinner-border spinner-border-sm me-2'></span>Sauvegarde...";
        try {
            await fetch("/fr/home/api/save-form", {
                method: "POST",
                headers: { "Content-Type": "application/json" },
                body: JSON.stringify({ formID: formID, data: { escales: escales } })
            });
            const resData = await res.json();
            if (resData.status === "success") {
                btn.innerHTML = "<i class='bi bi-check-lg me-2'></i>Sauvegardé !";
                setTimeout(() => { btn.innerHTML = originalText; btn.disabled = false; }, 2000);
            }
        } catch (err) { console.error(err); btn.disabled = false; btn.innerHTML = originalText; }
    }
    function generateEscalePrompt() {
        const port = document.getElementById('field-port_name').value || '[Nom du port]';
        const time = document.getElementById('field-shore_time').value || '?';
        const interest = document.getElementById('field-main_interest').value || 'les curiosités locales';
        const prompt = `En tant qu'expert en planification d'escales de croisière indépendantes, propose-moi un itinéraire optimisé pour le port de "${port}".\n\nDétails :\n- Temps total à terre : ${time} heures.\n- Intérêt majeur : ${interest}.\n\nPeux-tu :\n1. Proposer un itinéraire logique pour visiter ${interest} et d'autres points d'intérêt majeurs à proximité.\n2. Inclure les temps de transport estimés depuis le terminal de croisière.\n3. Respecter la "Marge de Sérénité" de 90 minutes avant le rembarquement.\n4. Fournir le résultat sous forme de tableau CSV avec les colonnes : Temps, Lieu, Activité, Adresse, Coordonnées GPS, Coût, Durée, Categorie`;
        document.getElementById('ai-prompt-text').innerText = prompt;
        document.getElementById('prompt-container').style.display = 'block';
        document.getElementById('prompt-container').scrollIntoView({ behavior: 'smooth' });
    }
    function copyPrompt() {
        const text = document.getElementById('ai-prompt-text').innerText;
        navigator.clipboard.writeText(text).then(() => { alert('Prompt copié !'); });
    }
    document.addEventListener("DOMContentLoaded", function() {
        loadEscales();
        document.getElementById('escale-form').addEventListener('submit', function(e) {
            e.preventDefault();
            saveCurrentEscale();
        });
    });
</script>

<!-- trip-only:end -->
<div class="alert alert-warning border-0 shadow-sm rounded-4 p-4 mt-5">
    <div class="d-flex align-items-center">
        <div class="flex-shrink-0"><i class="bi bi-shield-lock-fill text-dark display-6 me-4"></i></div>
        <div>
            <h5 class="alert-heading mb-1 fw-bold">La Marge de Sérénité</h5>
            <p class="mb-0">Appliquez la **Règle d'Or de l'Explorateur** : Prévoyez toujours d'être de retour au port **90 minutes** avant l'heure limite de remontée à bord. L'IA calculera vos itinéraires en intégrant cette marge de sécurité indispensable.</p>
        </div>
    </div>
</div>

---

## Ressource — 3.1 googlesheet contenue

Bienvenue dans ta guide **Google Sheets** !  
Tu vas apprendre à organiser, sauvegarder et analyser toutes tes inguides de voyage en toute simplicité. 🚐🌍  

---

## 🎯 Objectifs du contenu
- Créer un fichier centralisé pour gérer tes voyages.  
- Suivre tes étapes, dépenses et contacts.  
- Exporter et partager facilement tes données.  

---

## 📚 Contenu du contenu

### Découverte de Google Sheets

<div class="video-container mb-4">
  <div class="ratio ratio-16x9 shadow-sm rounded-4 overflow-hidden border bg-light">
    <iframe src="https://drive.google.com/file/d/1u2APF6OfnB9tccmm3yDsalUlgWm5eiZS/preview" title="Introduction à Google Sheets" loading="lazy" allow="autoplay; encrypted-media; fullscreen; picture-in-picture" allowfullscreen></iframe>
  </div>
</div>

- 🖥️ [Slides : Bases de Sheets](../slides/intro.html)  

---

### Créer ton tableau de planification

<div class="video-container mb-4">
  <div class="ratio ratio-16x9 shadow-sm rounded-4 overflow-hidden border bg-light">
    <iframe src="https://drive.google.com/file/d/1HWzcGkuJJMAgFyykGfj9akPJa7u5Dw3J/preview" title="Construire le tableau d’itinéraire" loading="lazy" allow="autoplay; encrypted-media; fullscreen; picture-in-picture" allowfullscreen></iframe>
  </div>
</div>

- 🖥️ [Slides : Organisation & filtres](../slides/planification.html)  
- 📂 [Modèle Sheets](../templates/itineraire-google-sheets.xlsx)  

---

### Astuces avancées

<div class="video-container mb-4">
  <div class="ratio ratio-16x9 shadow-sm rounded-4 overflow-hidden border bg-light">
    <iframe src="https://drive.google.com/file/d/1YHpKKI8pElkTz0Gr5SjkFHXjzU6VOjy6/preview" title="Fonctions utiles dans Google Sheets" loading="lazy" allow="autoplay; encrypted-media; fullscreen; picture-in-picture" allowfullscreen></iframe>
  </div>
</div>

- 🖥️ [Slides : Astuces avancées](../slides/astuces.html)  
- 📂 [Checklist Sheets](../templates/checklist-sheets.pdf)  

---

## 💡 Bonus
- 📂 [Template suivi budget voyage](../templates/suivi-budget.xlsx)  
- 📂 [Exemple liste de campings](../templates/liste-campings.xlsx)  

---

## 💬 Q&A Hebdomadaire
👉 [Lien Zoom pour la session live](../qna/zoom-link.md)  

- 📺 [Replay du 29 octobre 2025](../qna/replays/replay-2025-10-29.md)  
- 📺 [Replay du 5 novembre 2025](../qna/replays/replay-2025-11-05.md)  

---

✨ À la fin de cette guide, tu sauras planifier ton voyage du début à la fin avec un seul fichier **Google Sheets** 📊🚐.

> Intégration à Google Sheets
> Transfer liste Google maps dans google my map
> https://handsondataviz.org/convert-kmz.html
> http://xuzt5.mjt.lu

## Intégration de Ioverlander
Visitez le site Web suivant pour trouver des emplacements de camping en Irlande : https://ioverlander.com/places/search?countrycode%5B%5D=IRL&filter%5B%5D=campsite&filter%5B%5D=informal_campsite&filter%5B%5D=wild_campsite&filter%5B%5D=shorterm_parking&commit=Recherche.

---

## Ressource — 3.2 sheets csv mymaps export

## 🔄 La Boucle est bouclée
Une fois que vous avez affiné votre itinéraire et votre budget dans Google Sheets, vous voulez probablement que ces inguides (notamment les nouveaux prix ou notes) soient visibles sur votre carte Google My Maps.

### 🛠️ Étapes pour l'exportation
1.  Dans Google Sheets, allez dans **Fichier > Télécharger > Valeurs séparées par des virgules (.csv)**.
2.  Ouvrez votre carte dans **Google My Maps**.
3.  Supprimez l'ancien calque d'itinéraire (ou créez-en un nouveau).
4.  Cliquez sur **Importer** et sélectionnez votre nouveau fichier CSV enrichi.
5.  Lors de la configuration, assurez-vous de bien sélectionner la colonne **Coordonnées GPS** pour le placement.

---

### 🌟 Le Bénéfice : Une carte "Intelligente"
Désormais, quand vous cliquez sur un point sur votre téléphone (dans My Maps ou OSMand), vous voyez non seulement le nom du lieu, mais aussi :
-   Le budget que vous avez prévu.
-   Les notes d'IA sur comment économiser.
-   La catégorie de dépense.

---

### 🎥 Tutoriel : Synchronisation finale
<div class="video-container mb-4">
  <div class="ratio ratio-16x9 shadow-sm rounded-4 overflow-hidden border bg-light">
    <iframe src="https://drive.google.com/file/d/1dY7xXbUyVO5oYSPM70Uat_OjUc5PcY5f/preview" title="Exporter de Google Sheets vers My Maps" loading="lazy" allow="autoplay; encrypted-media; fullscreen; picture-in-picture" allowfullscreen></iframe>
  </div>
</div>

---

### ☑️ Action
Faites un test d'export/import maintenant. Modifiez le nom d'un lieu dans votre Sheet, exportez en CSV et voyez si le changement apparaît sur votre carte My Maps après l'import.

---

## Ressource — 3.3 choisir outil creer partager cartes

## 🗺️ Pourquoi cette section est utile
Créer une carte est facile. Choisir le bon outil pour le bon usage l'est beaucoup moins.

Selon votre besoin, vous ne choisirez pas la même solution :
- préparer un voyage personnel ;
- collaborer avec d'autres ;
- publier une carte interactive ;
- visualiser des données tabulaires ;
- construire une carte plus avancée ou plus technique.

Cette section vous aide à choisir rapidement l’outil adapté, sans tester 15 plateformes au hasard.

---

## 🎯 Objectifs pédagogiques
À la fin de cette section, vous serez capable de :
- distinguer les grands types d’outils cartographiques ;
- choisir la bonne solution selon votre usage réel ;
- comprendre les forces de Google My Maps par rapport aux autres options ;
- éviter de sur-outiller un besoin simple ;
- préparer une carte partageable et cohérente.

---

## 🧭 Les 4 grandes familles d’outils
### 1. Les outils simples pour voyageurs
Ils sont faits pour créer rapidement une carte ou un itinéraire compréhensible.

Exemples :
- `Google My Maps`
- `MapHub`
- `uMap`
- `Scribble Maps`

### 2. Les outils orientés données
Ils sont utiles si vous partez d’un tableau ou d’un fichier de points.

Exemples :
- `BatchGeo`
- `Mapline`
- `Mapping Sheets`

### 3. Les outils de publication ou de carte interactive avancée
Ils servent à créer une carte plus personnalisée, parfois destinée au public ou à un site web.

Exemples :
- `Mapbox`
- `Mapme`
- `Mapotic`

### 4. Les outils de navigation ou de fond de carte
Ils servent surtout comme base ou comme référence, pas forcément comme outil principal de création collaborative.

Exemples :
- `OpenStreetMap`
- `HERE WeGo`
- `MapQuest`
- `Sygic Maps`
- `Organic Maps`

---

## ✅ Quel outil choisir selon votre besoin
### Cas 1 : vous voulez planifier un voyage et partager la carte avec un proche
Choix recommandé :
- `Google My Maps`

Pourquoi :
- simple ;
- gratuit ;
- partage facile ;
- gestion des repères et calques ;
- consultation sur mobile via Google Maps.

### Cas 2 : vous avez un tableau d’adresses ou de coordonnées
Choix recommandé :
- `BatchGeo`
- `Mapping Sheets`
- `Google My Maps` après préparation du CSV

Pourquoi :
- logique orientée données ;
- rapide pour visualiser un grand nombre de points ;
- utile si vous travaillez déjà dans Google Sheets.

### Cas 3 : vous voulez publier une carte plus esthétique ou plus personnalisée
Choix recommandé :
- `Mapbox`
- `Mapme`
- `Mapotic`

Pourquoi :
- plus de contrôle visuel ;
- meilleures possibilités d’intégration web ;
- personnalisation plus poussée.

### Cas 4 : vous voulez une carte libre et simple, basée sur OpenStreetMap
Choix recommandé :
- `uMap`

Pourquoi :
- gratuit ;
- logique ouverte ;
- bon compromis pour partager une carte personnalisée sans dépendre de Google.

### Cas 5 : vous voulez surtout naviguer hors ligne
Choix recommandé :
- `Organic Maps`
- `Sygic Maps`

Pourquoi :
- usage terrain ;
- lecture hors connexion ;
- moins orienté collaboration, plus orienté déplacement réel.

---

## 🧠 Le bon réflexe : choisir par usage, pas par prestige
Beaucoup de voyageurs choisissent un outil trop puissant pour un besoin simple.

Exemples d’erreurs fréquentes :
- utiliser `Mapbox` pour une simple carte familiale ;
- s’éparpiller entre trop d’outils ;
- construire une carte très belle mais difficile à mettre à jour ;
- utiliser un outil de navigation comme s’il était un outil de documentation.

En pratique :
- `Google My Maps` couvre déjà une très grande partie des besoins de voyage ;
- les outils plus avancés deviennent utiles seulement si vous avez une exigence claire.

---

## 🔍 Comparatif rapide
### `Google My Maps`
À choisir si :
- vous voulez aller vite ;
- vous avez besoin de calques ;
- vous voulez partager facilement ;
- vous êtes déjà dans l’écosystème Google.

### `uMap`
À choisir si :
- vous préférez une base OpenStreetMap ;
- vous voulez une alternative ouverte ;
- vous cherchez une carte légère et simple.

### `BatchGeo` et `Mapping Sheets`
À choisir si :
- vous partez d’un tableau ;
- vous avez beaucoup de points ;
- vous voulez transformer des données en carte rapidement.

### `Mapbox`
À choisir si :
- vous avez un besoin web avancé ;
- vous voulez un design personnalisé ;
- vous acceptez plus de complexité.

### `Organic Maps`
À choisir si :
- votre priorité est le terrain et le hors ligne ;
- vous ne cherchez pas une carte collaborative complexe.

---

## 🧪 Méthode simple pour choisir
Posez-vous 5 questions :
1. Est-ce que je veux planifier, publier, analyser ou naviguer ?
2. Est-ce que je pars d’une carte vide ou d’un tableau ?
3. Est-ce que je dois collaborer avec d’autres personnes ?
4. Est-ce que la carte doit vivre seulement dans mon groupe ou être publique ?
5. Est-ce que j’ai vraiment besoin d’un outil avancé ?

Si vous répondez :
- `planifier + collaborer + simplicité`, choisissez souvent `Google My Maps` ;
- `données + tableau`, commencez par `BatchGeo`, `Sheets` ou `CSV` ;
- `publication + personnalisation`, regardez `Mapbox` ;
- `hors ligne + terrain`, allez vers `Organic Maps` ou un outil GPS dédié.

---

## 🧳 Recommandation pragmatique pour la guide
Dans le cadre de cette guide, l’ordre logique reste :
1. structurer vos données ;
2. importer dans `Google My Maps` ;
3. organiser les calques ;
4. partager la carte ;
5. exporter vers des outils plus avancés seulement si nécessaire.

Autrement dit : commencez simple, puis montez en sophistication uniquement si votre projet le justifie.

---

## 💻 Exercices à faire sur votre ordinateur
### Exercice 1 : choisir votre outil principal
1. Listez un projet de voyage réel.
2. Notez si votre besoin principal est : planifier, partager, publier ou naviguer.
3. Choisissez un outil principal.
4. Justifiez ce choix en une phrase.

### Exercice 2 : comparer 2 outils
1. Ouvrez `Google My Maps`.
2. Ouvrez un autre outil parmi `uMap`, `BatchGeo` ou `MapHub`.
3. Comparez la simplicité d’usage, l’importation et le partage.
4. Notez lequel vous semble le plus réaliste pour votre niveau actuel.

### Exercice 3 : partir d’un tableau
1. Préparez 10 à 20 lieux dans un tableau.
2. Importez-les dans un outil cartographique simple.
3. Vérifiez si le résultat est clair.
4. Décidez si cet outil vous convient pour la suite du projet.

---

## 📲 Exercices à faire sur votre téléphone
### Exercice 1 : consulter une carte partagée
1. Ouvrez une carte My Maps ou un lien de carte partagée.
2. Vérifiez si elle reste lisible sur mobile.
3. Notez les limites éventuelles.

### Exercice 2 : vérifier l’usage terrain
1. Ouvrez une carte ou une application sélectionnée.
2. Vérifiez si elle vous aide vraiment à retrouver un lieu ou un trajet.
3. Décidez si elle est adaptée au terrain ou seulement à la préparation.

### Exercice 3 : distinguer planification et navigation
1. Prenez un même besoin simple.
2. Identifiez quel outil vous utiliseriez pour préparer.
3. Identifiez quel outil vous utiliseriez pour naviguer.

---

## ⭐ Exercice bonus : votre pile cartographique personnelle
Définissez votre système minimal en 3 couches :
1. un outil pour préparer ;
2. un outil pour partager ;
3. un outil pour naviguer réellement.

Exemple :
- préparer dans `Google Sheets` ;
- partager dans `Google My Maps` ;
- naviguer dans `Google Maps` ou `Organic Maps`.

---

## ☑️ Action immédiate
Choisissez aujourd’hui votre outil cartographique principal pour les 3 prochains mois. Tant que vous n’avez pas une limite claire, restez sur l’option la plus simple et la plus partageable.

---

## Ressource — 3.4 expert advice gpx navigation

## 🛰️ GPX : Le Langage de la Liberté
Si le CSV est bon pour l'organisation, le **GPX** est l'outil indispensable pour la navigation sur le terrain (Vanlife, Trekking, Moto). Un fichier GPX permet d'afficher votre tracé exact sur une application comme **OSMand**, **Gaia GPS** ou **Garmin**, même sans connexion internet.

---

### 📥 Comment obtenir un fichier GPX ?
1.  **Depuis My Maps** : Exportez votre carte en KML, puis utilisez un convertisseur (ex: [GPSVisualizer](https://www.gpsvisualizer.com/convert_input)) pour le transformer en GPX.
2.  **Depuis l'IA** : Vous pouvez demander à l'Assistant AI de TWAI guide de générer directement le code d'un fichier GPX. Copiez ce code dans un fichier texte et enregistrez-le avec l'extension `.gpx`.

> **Prompt Expert** : "À partir de l'itinéraire ci-dessus, génère-moi un fichier GPX valide contenant tous les 'waypoints' avec leurs coordonnées."

---

### 🎥 Tutoriel : Afficher son itinéraire GPX
<div class="video-container mb-4">
  <div class="ratio ratio-16x9 shadow-sm rounded-4 overflow-hidden border bg-light">
    <iframe src="https://drive.google.com/file/d/1fKI7jBnV0CEH7mBe5QyFUtCqitf8O8O-/preview" title="Naviguer avec un fichier GPX" loading="lazy" allow="autoplay; encrypted-media; fullscreen; picture-in-picture" allowfullscreen></iframe>
  </div>
</div>

---

### 💡 L'astuce de l'voyageur bien préparé
Ne vous contentez pas de points (waypoints). Demandez à l'IA de générer un **"Track"** (une ligne continue) entre vos points majeurs. Cela vous permettra de suivre la route exacte sur votre GPS, ce qui est crucial dans les zones reculées où les routes ne sont pas toujours indiquées sur Google Maps.

---

### ☑️ Action
Essayez de générer un fichier GPX avec l'IA, téléchargez l'application **OSMand** (ou une équivalente) sur votre téléphone, et voyez si votre tracé s'affiche. C'est l'assurance de ne jamais être perdu !

---

# Pilier 3 — Protection, santé et sécurité

## Ressource — 1.1 guide protection index

<p align="center">
  <img src="/public/img/assurance.webp" alt="Chapitre 3 Protection" style="width:100%; border-radius: 15px; box-shadow: 0 4px 15px rgba(0,0,0,0.1);" />
</p>

Ce chapitre, surnommé « Le Bouclier », vous donne les clés pour protéger votre santé, vos finances et vos droits tout au long de votre aventure.

## 🎯 Objectif pédagogique

À la fin de ce chapitre, vous serez capable de :

- Évaluer les risques liés à votre destination et à votre manière de voyager.
- Préparer les inguides utiles à votre santé et à votre sécurité.
- Comparer une protection d'assurance selon vos besoins réels.
- Réagir méthodiquement face à un incident ou à un litige.

## 🧭 Comment fonctionne ce chapitre

La protection ne consiste pas à prévoir tous les problèmes ; elle consiste à savoir quoi faire lorsqu'ils surviennent. Vous construisez un dispositif simple, accessible et adapté à votre voyage avant de partir.

## Les étapes du chapitre

### 1. Évaluer votre exposition

Identifiez les risques liés à votre santé, aux activités prévues, au climat, aux transports et à vos équipements. Priorisez les risques plausibles plutôt que de chercher une sécurité absolue.

### 2. Préparer votre dossier essentiel

Rassemblez les ordonnances, inguides médicales, contacts d'urgence et copies de documents nécessaires. Conservez-les de façon sécurisée, disponible hors ligne et compréhensible par une personne de confiance.

### 3. Choisir vos protections

Comparez les garanties, exclusions, plafonds, franchises et procédures d'assistance. Une assurance utile correspond à votre durée de séjour, à vos activités et à votre état de santé, pas seulement à son prix.

### 4. Prévenir les incidents

Préparez une trousse adaptée, des habitudes de protection des biens et des données, ainsi que des règles simples pour vos déplacements. Réévaluez-les lorsque votre itinéraire change.

### 5. Connaître vos recontenu

En cas de problème, documentez les faits, gardez les reçus et contactez rapidement les interlocuteurs pertinents. Savoir quelles preuves conserver facilite toute demande d'assistance ou d'indemnisation.

## 🛠️ Action immédiate

Notez vos contacts d'urgence, vos inguides médicales essentielles et la personne qui pourra vous aider depuis chez vous. Vérifiez que ces inguides restent accessibles sans réseau.

---

## Ressource — 1.2 formulaire sante securite

<style>
    .btn-circle { width: 56px; height: 56px; border-radius: 28px; display: flex; align-items: center; justify-content: center; box-shadow: 0 4px 10px rgba(0,0,0,0.2); }
    .btn-orange { background-color: #ff851b; border-color: #ff851b; color: white; }
    .btn-orange:hover { background-color: #e67716; border-color: #e67716; color: white; }
    .fab-container { position: fixed; bottom: 80px; right: 40px; z-index: 1000; }
    #travelers-table-container { background: #fff; border-radius: 12px; box-shadow: 0 4px 12px rgba(0,0,0,0.05); overflow: hidden; margin-bottom: 40px; }
    .no-ai { border-left: 3px solid #ff851b; }
</style>

> **Action Requise :** Anticiper les besoins médicaux et les risques spécifiques pour un voyage sans stress. Ces inguides permettront à l'IA de personnaliser vos recommandations de trousse de secontenu et de sécurité.

### 👥 Voyageurs enregistrés
<div id="travelers-table-container" class="border">
<table class="table table-hover align-middle mb-0" id="travelers-table">
<thead class="table-light">
<tr>
<th class="text-center" style="width: 80px;">IA</th>
<th>Nom Complet</th>
<th class="text-end">Actions</th>
</tr>
</thead>
<tbody>
<tr><td colspan="3" class="text-center py-4 text-muted"><div class="spinner-border spinner-border-sm text-primary me-2"></div>Chargement des voyageurs...</td></tr>
</tbody>
</table>
</div>

---

<div class="card shadow-sm border-0 mb-5 overflow-hidden" id="form-container">
<div class="card-header bg-primary text-white py-3 fw-bold">
<i class="bi bi-shield-plus me-2"></i> <span id="form-title">AJOUTER UN PROFIL SANTÉ</span>
</div>
<div class="card-body p-4 p-md-5">
<form id="multi-traveler-form" class="local-form">
<input type="hidden" name="id" id="traveler-id">
<div class="row g-4 mb-4">
<div class="col-md-6">
<div class="form-group">
<label>Prénom</label>
<input type="text" name="prenom" id="field-prenom" class="form-control form-control-lg border-0 bg-light" placeholder="Ex: Jean" required>
</div>
</div>
<div class="col-md-6">
<div class="form-group no-ai-container">
<span class="no-ai-badge"><i class="bi bi-shield-lock-fill me-1"></i>HORS-IA</span>
<label>Nom de famille (Confidentiel)</label>
<input type="text" name="nom" id="field-nom" class="form-control form-control-lg no-ai border-0 bg-light" placeholder="Ex: Dupont" required>
</div>
</div>
</div>
<div class="row g-4 mb-4">
<div class="col-md-6">
<div class="form-group">
<label>Groupe Sanguin</label>
<select name="groupe_sanguin" id="field-groupe_sanguin" class="form-select form-select-lg border-0 bg-light">
<option value="inconnu">Je ne sais pas</option>
<option value="A+">A+</option>
<option value="A-">A-</option>
<option value="B+">B+</option>
<option value="B-">B-</option>
<option value="AB+">AB+</option>
<option value="AB-">AB-</option>
<option value="O+">O+</option>
<option value="O-">O-</option>
</select>
</div>
</div>
<div class="col-md-6">
<div class="form-group">
<label>Allergies Graves (Médicaments, Aliments)</label>
<input type="text" name="allergies" id="field-allergies" class="form-control form-control-lg border-0 bg-light" placeholder="Ex: Pénicilline, Arachides...">
</div>
</div>
</div>
<div class="form-group mb-4">
<label>Conditions Médicales Chroniques</label>
<textarea name="conditions_chroniques" id="field-conditions_chroniques" class="form-control border-0 bg-light" rows="2" placeholder="Ex: Diabète, Asthme, Hypertension..."></textarea>
</div>
<div class="form-group mb-4">
<label>Médicaments réguliers (Utilisez les noms des molécules)</label>
<input type="text" name="medicaments_reguliers" id="field-medicaments_reguliers" class="form-control border-0 bg-light" placeholder="Ex: Lévothyroxine, Salbutamol...">
<div class="form-text text-muted">Les marques changent selon les pays, mais la molécule reste la même.</div>
</div>
<div class="form-group mb-4">
<label>Modèle exact de votre Smartphone</label>
<input type="text" name="modele_tel" id="field-modele_tel" class="form-control border-0 bg-light" placeholder="Ex: iPhone 15 Pro, Samsung S24...">
<div class="form-text text-muted">Utile pour connaître vos capacités de secontenu par satellite (SOS).</div>
</div>
<div class="form-group mb-4 no-ai-container">
<span class="no-ai-badge"><i class="bi bi-shield-lock-fill me-1"></i>HORS-IA</span>
<label>Assurance Voyage (Compagnie et Police)</label>
<input type="text" name="assurance_infos" id="field-assurance_infos" class="form-control no-ai border-0 bg-light" placeholder="Ex: Croix Bleue, #1234567">
</div>
<div class="form-group mb-5">
<label>Besoins d'accessibilité particuliers</label><br>
<div class="d-flex flex-wrap gap-2">
<label class="checkbox-inline border px-3 py-2 rounded bg-white shadow-sm"><input type="checkbox" name="besoin_mobilite" id="field-besoin_mobilite" class="me-2"> Mobilité réduite</label>
<label class="checkbox-inline border px-3 py-2 rounded bg-white shadow-sm"><input type="checkbox" name="besoin_vision" id="field-besoin_vision" class="me-2"> Déficience visuelle</label>
<label class="checkbox-inline border px-3 py-2 rounded bg-white shadow-sm"><input type="checkbox" name="besoin_electricite" id="field-besoin_electricite" class="me-2"> Besoin électricité stable</label>
</div>
</div>
<div class="d-flex gap-3 pt-4 border-top">
<button type="submit" class="btn btn-primary btn-lg px-5 shadow-sm fw-bold" id="submit-btn">
<i class="bi bi-save me-2"></i>ENREGISTRER CE VOYAGEUR
</button>
<button type="button" class="btn btn-link text-muted btn-lg" onclick="clearForm()">Annuler</button>
</div>
</form>
</div>
</div>

<div class="fab-container">
<button class="btn btn-orange btn-circle btn-lg text-white shadow" onclick="clearForm()" title="Ajouter un voyageur">
<i class="bi bi-plus-lg fs-3"></i>
</button>
</div>

<script>
    let travelers = [];
    const formID = "sante-securite";
    document.addEventListener("DOMContentLoaded", function() {
        loadTravelers();
        document.getElementById("multi-traveler-form").addEventListener("submit", function(e) {
            e.preventDefault();
            saveCurrentTraveler();
        });
    });
    async function loadTravelers() {
        try {
            const res = await fetch(`/fr/home/api/get-form/${formID}`);
            const response = await res.json();
            const data = response.data;
            if (data && data.travelers) {
                travelers = data.travelers;
            } else if (data && Object.keys(data).length > 0) {
                travelers = [{ ...data, id: "legacy-" + Date.now(), prenom: "Principal", nom: "", inclus: true }];
            }
            renderTable();
        } catch (err) { console.error(err); }
    }
    function renderTable() {
        const tbody = document.querySelector("#travelers-table tbody");
        if (!travelers || travelers.length === 0) {
            tbody.innerHTML = '<tr><td colspan="3" class="text-center py-4 text-muted">Aucun voyageur enregistré. Cliquez sur + pour en ajouter un.</td></tr>';
            return;
        }
        tbody.innerHTML = "";
        travelers.forEach(t => {
            const tr = document.createElement("tr");
            tr.innerHTML = `
                <td class="text-center"><input type="checkbox" class="form-check-input" ${t.inclus ? 'checked' : ''} onclick="toggleInclus('${t.id}')"></td>
                <td class="fw-bold text-dark">${t.prenom} ${t.nom}</td>
                <td class="text-end">
                    <button onclick="editTraveler('${t.id}')" class="btn btn-sm btn-outline-primary me-1"><i class="bi bi-pencil"></i></button>
                    <button onclick="deleteTraveler('${t.id}')" class="btn btn-sm btn-outline-danger"><i class="bi bi-trash"></i></button>
                </td>`;
            tbody.appendChild(tr);
        });
    }
    function clearForm() {
        document.getElementById("traveler-id").value = "";
        document.getElementById("multi-traveler-form").reset();
        document.getElementById("form-title").innerText = "AJOUTER UN PROFIL SANTÉ";
        document.getElementById("submit-btn").innerHTML = "<i class='bi bi-save me-2'></i>ENREGISTRER CE VOYAGEUR";
        document.getElementById("form-container").scrollIntoView({ behavior: 'smooth' });
    }
    function editTraveler(id) {
        const t = travelers.find(item => item.id === id);
        if (!t) return;
        clearForm();
        document.getElementById("traveler-id").value = t.id;
        document.getElementById("field-prenom").value = t.prenom || "";
        document.getElementById("field-nom").value = t.nom || "";
        document.getElementById("field-groupe_sanguin").value = t.groupe_sanguin || "inconnu";
        document.getElementById("field-allergies").value = t.allergies || "";
        document.getElementById("field-conditions_chroniques").value = t.conditions_chroniques || "";
        document.getElementById("field-medicaments_reguliers").value = t.medicaments_reguliers || "";
        document.getElementById("field-modele_tel").value = t.modele_tel || "";
        document.getElementById("field-urgence_nom").value = t.urgence_nom || "";
        document.getElementById("field-urgence_tel").value = t.urgence_tel || "";
        document.getElementById("field-assurance_infos").value = t.assurance_infos || "";
        document.getElementById("field-besoin_mobilite").checked = !!t.besoin_mobilite;
        document.getElementById("field-besoin_vision").checked = !!t.besoin_vision;
        document.getElementById("field-besoin_electricite").checked = !!t.besoin_electricite;
        document.getElementById("form-title").innerText = "MODIFIER : " + t.prenom;
        document.getElementById("submit-btn").innerHTML = "<i class='bi bi-save me-2'></i>METTRE À JOUR";
        document.getElementById("form-container").scrollIntoView({ behavior: 'smooth' });
    }
    async function toggleInclus(id) {
        const t = travelers.find(item => item.id === id);
        if (t) { t.inclus = !t.inclus; await saveAll(); renderTable(); }
    }
    async function deleteTraveler(id) {
        if (!confirm("Supprimer ce voyageur ?")) return;
        travelers = travelers.filter(t => t.id !== id);
        await saveAll();
        renderList();
        if (document.getElementById("traveler-id").value === id) clearForm();
    }
    async function saveCurrentTraveler() {
        const id = document.getElementById("traveler-id").value;
        const tData = { id: id || "t-" + Date.now(), inclus: true };
        const formData = new FormData(document.getElementById("multi-traveler-form"));
        formData.forEach((value, key) => { if (key !== "id") tData[key] = value; });
        tData.besoin_mobilite = document.getElementById("field-besoin_mobilite").checked;
        tData.besoin_vision = document.getElementById("field-besoin_vision").checked;
        tData.besoin_electricite = document.getElementById("field-besoin_electricite").checked;
        if (id) {
            const index = travelers.findIndex(t => t.id === id);
            if (index !== -1) { tData.inclus = travelers[index].inclus; travelers[index] = tData; }
        } else {
            travelers.push(tData);
        }
        await saveAll();
        renderTable();
        clearForm();
    }
    async function saveAll() {
        const btn = document.getElementById("submit-btn");
        const originalText = btn.innerHTML;
        btn.disabled = true;
        btn.innerHTML = "<span class='spinner-border spinner-border-sm me-2'></span>Sauvegarde...";
        try {
            await fetch("/fr/home/api/save-form", {
                method: "POST",
                headers: { "Content-Type": "application/json" },
                body: JSON.stringify({ formID: formID, data: { travelers: travelers } })
            });
        } catch (err) { console.error(err); }
        finally { btn.disabled = false; btn.innerHTML = originalText; }
    }
</script>

---

<div class="alert alert-info border-0 shadow-sm rounded-4 p-4">
<div class="d-flex align-items-center">
<div class="flex-shrink-0"><i class="bi bi-info-circle-fill text-primary display-6 me-4"></i></div>
<div>
<h5 class="alert-heading mb-1 fw-bold">Utilité de ce profil</h5>
<p class="mb-0">En enregistrant ces données, l'IA pourra générer pour vous une <b>trousse médicale sur-mesure</b> et vérifier si vos destinations présentent des risques spécifiques pour vos conditions.</p>
</div>
</div>
</div>

---

## Ressource — 1.3 sante voyage masterclass

> **Objectif de la section :** À la fin de ce chapitre, vous saurez constituer une trousse médicale professionnelle adaptée à votre destination et connaîtrez les réflexes vitaux pour éviter les maladies courantes en zone tropicale.

---

## 1. L'Anticipation : Votre meilleure défense
Ne partez jamais sans avoir consulté la [Carte mondiale santé-voyage](https://www.inspq.qc.ca/sites/default/files/cartes/sante_voyage/index.html#). Elle vous indique en un clic les risques (Paludisme, Dengue, Fièvre Jaune) par zone géographique.

### Les 3 réflexes d'or avant le départ :
1.  **Check-up Vaccinal :** Certains vaccins (Hépatite A/B, Typhoïde) nécessitent plusieurs semaines pour être efficaces.
2.  **L'Ordonnance de Secontenu :** Demandez à votre médecin une copie en anglais de vos prescriptions habituelles.
3.  **L'Hygiène Alimentaire :** Rappelez-vous la règle d'or : *"Boil it, cook it, peel it or forget it!"* (Bouillez-le, cuisez-le, pelez-le ou oubliez-le).

## 2. Checklist : Votre Trousse Médicale "Elite"
Une trousse bien pensée tient dans une petite pochette et peut sauver votre voyage. Voici l'essentiel :

*   **💊 Médicaments :** Analgésiques (Paracétamol), Antihistaminiques (allergies), et surtout des sels de réhydratation orale (vitaux en cas de "Turista" sévère).
*   **🩹 Premier Secontenu :** Pansements adhésifs, désinfectant, et une pince à épiler (pour les échardes ou les tiques).
*   **🦟 Protection :** Répulsif haute efficacité (DEET 30-50%) et crème solaire.

## 3. Le Glossaire de survie (Les "Big Five" du voyageur)
Savoir identifier les symptômes peut accélérer votre prise en charge :
*   **Dengue/Zika :** Forte fièvre + douleurs articulaires ("la maladie des os brisés").
*   **Paludisme (Malaria) :** Fièvre cyclique et frissons. Nécessite une consultation immédiate.
*   **Hépatite A :** Fatigue extrême et jaunisse (souvent via l'eau contaminée).

---

## 🛠️ Exercice Pratique du Chapitre
**Votre mission :** 
1. Ouvrez la [Carte mondiale de l'INSPQ](https://www.inspq.qc.ca/sites/default/files/cartes/sante_voyage/index.html#).
2. Sélectionnez votre prochaine destination (ex: Thaïlande, Pérou ou Sénégal).
3. **Action :** Listez les 2 vaccins recommandés et le risque majeur (ex: Paludisme) pour cette zone.
4. **Inventaire :** Vérifiez la date de péremption de votre boîte de paracétamol à la maison.

---

*Bravo ! Vous avez maintenant les connaissances pour protéger votre capital le plus précieux : votre santé.*

---

## Ressource — 2.1 travel insurances for nomads

> **Objectif de la section :** À la fin de ce chapitre, vous saurez décoder un contrat d'assurance voyage et choisir la stratégie de franchise adaptée à votre budget pour éviter la faillite personnelle en cas d'accident majeur.

---

## 1. L'Assurance n'est pas une option, c'est un investissement
Un accident en mer ou une hospitalisation à l'étranger peut coûter entre **20 000 $ et 100 000 $**. Sans assurance, votre tour du monde s'arrête instantanément.

### La Réalité du terrain (Témoignage TWAI) :
Lors de notre croisière de 4 mois, nous avons vu 9 décès et de nombreuses blessures graves (tendons déchirés, fractures). Nous avions choisi une **franchise de 3 000 $** pour réduire le prix de la prime. 
*   **Résultat :** Nous avons payé 1 000 \$ de soins courants de notre poche, mais nous étions sereins : en cas de pépin à 50 000 $, nous étions couverts. 
*   **La Section :** L'assurance est là pour les catastrophes, pas pour le petit rhume.

## 2. Comparatif des Meilleurs Partenaires
Selon votre profil (Nomade, Croisiériste, Aventurier), le choix varie :

*   🏆 **Pour les Nomades Digitaux :** [SafetyWing](https://safetywing.com/). Flexible, abonnement mensuel, idéal pour le travail à distance.
*   🧭 **Pour l'Aventure & le Sport :** [World Nomads](https://www.worldnomads.com/). Couvre les activités à risque (trekking, plongée).
*   🚢 **Pour les Croisières & Familles :** [Croix Bleue](https://www.croixbleue.ca/) ou [Allianz Travel](https://www.allianztravelinsurance.com/). Excellente couverture médicale et rapatriement.
*   ⚖️ **Pour les Litiges Aériens :** [AirHelp](https://www.airhelp.com/). Pour récupérer vos indemnités en cas de vol annulé.

## 3. Les 3 points à vérifier AVANT de signer
1.  **Le Plafond de Frais Médicaux :** Il doit être d'au moins 100 000 \$ (idéalement 1 000 000 $ pour les USA).
2.  **Le Rapatriement Sanitaire :** Vérifiez qu'il est inclus de manière illimitée.
3.  **Les Exclusions :** Attention aux sports extrêmes ou aux pays en "zone rouge" (avis gouvernementaux).

---

## 🛠️ Exercice Pratique du Chapitre
**Votre mission :** 
1. Prenez votre carte de crédit actuelle (Visa, Mastercard, Amex).
2. Appelez votre banque ou consultez les conditions en ligne : **Combien de jours êtes-vous couvert à l'étranger ?** (Souvent seulement 15 à 30 jours).
3. **Action :** Faites une simulation sur [SafetyWing](https://safetywing.com/) ou [World Nomads](https://www.worldnomads.com/) pour la durée totale de votre projet de voyage.
4. **Décision :** Notez le montant de la prime et de la franchise. Est-ce acceptable pour votre budget ?

---

*Bravo ! Vous venez de sécuriser financièrement votre aventure.*

---

## Ressource — 3.1 compensation claims

> **Objectif de la section :** À la fin de ce chapitre, vous saurez identifier si vous avez droit à une indemnisation financière (jusqu'à 600 €) en cas de retard ou d'annulation de vol, et vous maîtriserez les plateformes pour déléguer le processus juridique.

---

## 1. Connaître ses Droits (Règlement EU 261/2004)
Peu de voyageurs le savent, mais si votre vol au départ ou à l'arrivée de l'Europe a plus de **3 heures de retard**, vous avez droit à une compensation forfaitaire. Ce n'est pas un remboursement, c'est un dédommagement pour le temps perdu.

### Les conditions de réclamation :
*   **Retard :** Plus de 3 heures à l'arrivée.
*   **Annulation :** Si vous n'avez pas été prévenu au moins 14 jours avant.
*   **Surréservation (Bumping) :** Si on vous refuse l'embarquement faute de place.
*   **Montant :** Entre 250 € et 600 € par passager selon la distance du vol.

## 2. Déléguer pour Gagner (Les "Chasseurs d'Indemnités")
S'attaquer seul à une compagnie aérienne est long et complexe. Des plateformes spécialisées le font pour vous en échange d'une commission (souvent 25 à 35 %) **uniquement si elles gagnent**.

*   🥇 **Le Leader Mondial :** [AirHelp](https://www.airhelp.com/fr/). Très efficace, interface simple, gère la majorité des compagnies.
*   🥈 **L'Alternative Européenne :** [Flightright](https://www.flightright.fr/) ou [ClaimCompass](https://www.claimcompass.eu/fr/). Excellents taux de réussite.
*   🥉 **Spécialiste France :** [Flight-Delayed](https://www.flight-delayed.fr/). Très réactif sur les dossiers complexes.

## 3. Le Conseil de l'Expert : Gardez vos preuves !
En cas de pépin à l'aéroport :
1.  **Prenez une photo de l'écran d'affichage** montrant le retard ou l'annulation.
2.  **Gardez votre carte d'embarquement** (même électronique).
3.  **Demandez une attestation de retard** au comptoir de la compagnie.
4.  **Notez vos dépenses :** Si vous devez payer un repas ou un hôtel, gardez tous les reçus. La compagnie doit vous les rembourser en plus de l'indemnité.

---

## 🛠️ Exercice Pratique du Chapitre
**Votre mission :** 
1. Fouillez dans vos emails de voyage des 3 dernières années.
2. Avez-vous eu un vol avec plus de 3 heures de retard ?
3. **Action :** Allez sur [AirHelp](https://www.airhelp.com/fr/) et entrez votre numéro de vol de l'époque. 
4. **Vérification :** L'outil vous dira instantanément si vous êtes encore éligible à une indemnisation (on peut remonter jusqu'à 3 ou 5 ans selon les pays !).

---

*Bravo ! Vous venez peut-être de trouver l'argent pour votre prochain billet d'avion.*

---

# Pilier 4 — Finance et budget

## Ressource — 1.1 guide budget index

<p align="center">
  <img src="/public/img/bankCard.webp" alt="Chapitre 4 Finance" style="width:100%; border-radius: 15px; box-shadow: 0 4px 15px rgba(0,0,0,0.1);" />
</p>

Ce chapitre vous apprend à transformer la gestion de l'argent d'une contrainte en un **outil de liberté**. Vous construisez un budget qui vous aide à décider avant le départ et à vous adapter pendant le voyage.

## 🎯 Objectif pédagogique

À la fin de ce chapitre, vous serez capable de :

- Estimer le coût complet d'un voyage selon votre style.
- Répartir votre budget entre dépenses prévues, variables et imprévus.
- Choisir des moyens de paiement adaptés et limiter les frais.
- Suivre vos dépenses sans perdre le plaisir de voyager.

## 🧭 Comment fonctionne ce chapitre

Vous ne cherchez pas un chiffre parfait : vous créez un système de décision. Il doit être assez simple pour être tenu sur la route et assez précis pour vous alerter avant qu'un dépassement ne devienne un problème.

## Les étapes du chapitre

### 1. Définir votre enveloppe

Évaluez les ressources disponibles, la durée du voyage et votre marge de sécurité. Fixez une enveloppe globale avant de détailler les choix ; elle donnera un cadre réaliste à l'itinéraire.

### 2. Répartir les dépenses

Séparez les dépenses fixes — transports, hébergements, assurances — des dépenses variables comme les repas, activités et déplacements locaux. Ajoutez une réserve d'urgence qui ne finance pas les plaisirs courants.

### 3. Préparer les paiements

Vérifiez les devises, les plafonds, les frais de retrait et les solutions de secontenu. Évitez de dépendre d'une seule carte, d'un seul compte ou d'une connexion permanente.

### 4. Suivre le réel

Consignez vos dépenses dans un format facile à relire. Regroupez-les par catégories utiles afin de comparer le plan avec la réalité et de comprendre ce qui influence vraiment votre budget.

### 5. Ajuster sans subir

Faites des points réguliers et arbitrez tôt : modifier un rythme, une activité ou un hébergement est plus simple que corriger un budget épuisé. Gardez le cap sur ce qui compte le plus pour vous.

## 🛠️ Action immédiate

Établissez trois montants pour votre prochain voyage : le budget total visé, la réserve d'urgence et le montant quotidien confortable. Ce sont vos premiers repères de décision.

---

## Ressource — 1.2 gestion financiere

<style>
    .prompt-box { background-color: #f1f3f5; border: 1px dashed #adb5bd; border-radius: 8px; padding: 20px; font-family: monospace; white-space: pre-wrap; font-size: 0.9rem; }
    .pro-badge { background-color: #e3f2fd; color: #0d47a1; padding: 4px 10px; border-radius: 20px; font-size: 0.85rem; font-weight: bold; }
    .validation-step { border-left: 4px solid #198754; padding-left: 20px; margin-bottom: 30px; }
    .roadmap-step { border-left: 3px solid #ff851b; padding-left: 20px; margin-bottom: 30px; position: relative; }
    .roadmap-step::before { content: ""; position: absolute; left: -8px; top: 0; width: 13px; height: 13px; background: #ff851b; border-radius: 50%; }
</style>

## 💰 L'Argent comme Outil de Liberté
Gérer ses finances en voyage n'est pas une question de restriction, mais d'**arbitrage**. Pour l'voyageur bien préparé, la maîtrise de l'argent commence par une compréhension profonde de sa situation actuelle pour financer ses rêves futurs en toute sérénité.

Cette section pose les trois piliers stratégiques de votre liberté financière :
1. **L'Analyse du Budget Familial** (Le passé réel).
2. **L'Approbation Professionnelle** (La validation du futur).
3. **Le Suivi Avant/Après** (La boucle de contrôle).

---

## Étape 1 : Le Budget Familial (Analyse du Passé)
Un budget de voyage réaliste ne commence pas par des rêves, mais par une analyse de vos habitudes réelles. L'IA de TWAI guide peut transformer vos relevés bancaires cryptiques en une vision claire de vos dépenses familiales.

### 🛠️ La Méthode : De la Banque à l'IA
Au lieu de saisir manuellement chaque transaction, nous utilisons la puissance de l'IA pour traiter vos relevés de compte et de carte de crédit.
1.  **Récupération** : Téléchargez vos relevés des 12 derniers mois en format **PDF** ou **CSV** depuis votre portail bancaire.
2.  **Extraction** : Si vous avez un relevé PDF, utilisez un outil comme **pdftotext** (voir section 2.1.1) pour extraire le texte en gardant la mise en page.
3.  **Analyse** : Soumettez les données à l'IA pour catégoriser vos dépenses (Alimentation, Logement, Loisirs, Transport).

### 📊 De l'IA à Google Sheets
Une fois le tableau généré par l'IA, importez-le dans Google Sheets (*Fichier > Importer*) pour créer votre vision comptable réelle via un **Tableau croisé dynamique** (voir section 2.1.3).

---

## Étape 2 : L'Approbation du Planificateur Financier
Un projet de "Voyage Augmenté" (plus long, plus fréquent, plus ambitieux) ne doit jamais mettre en péril votre sécurité financière à long terme, surtout si vous approchez de la retraite. Le **Planificateur Financier (Pl. Fin.)** est le seul professionnel capable de vous donner le "feu vert" final (voir section 2.2.1).

### 🧠 Pourquoi consulter un professionnel ?
1.  **Analyse de Couple** : Un bon planificateur doit analyser votre situation **en tant que couple** (patrimoine consolidé) et non individuellement, pour optimiser la fiscalité.
2.  **Simulation de Décaissement** : Est-ce préférable de piger dans le CELI, le REER ou le FEER pour financer votre projet ?
3.  **Portrait de Survie** : S'assurer que même après vos voyages de rêve, votre capital restant couvrira vos soins de santé futurs.


---

## Étape 3 : Budget Avant et Après Voyage
La planification ne s'arrête pas au départ. Pour devenir un expert, vous devez fermer la boucle de rétroaction.

-   **Avant (Théorie)** : Votre budget prévisionnel basé sur les estimations de l'IA et validé par votre planificateur.
-   **Pendant (Réalité)** : Votre suivi quotidien sur le terrain (voir section 2.4).
-   **Après (Ajustement)** : Analyse des écarts. Si vous avez dépensé 20% de plus en transport que prévu, l'IA ajustera vos futurs prompts pour être plus précise.

---

### 💡 La Règle du 70/20/10 en Voyage
Pour garder l'équilibre pendant vos périples, essayez de respecter cette répartition :
- **70%** : Incontournables (Hébergement, Transport, Nourriture de base).
- **20%** : Expériences "Plaisir" (Dégustations, Activités Premium, Musées).
- **10%** : Sécurité (Fonds d'imprévus, Frais divers).

---

<div class="alert alert-warning border-0 shadow-sm rounded-4 p-4 mt-5">
    <div class="d-flex align-items-center">
        <div class="flex-shrink-0"><i class="bi bi-shield-lock-fill text-dark display-6 me-4"></i></div>
        <div>
            <h5 class="alert-heading mb-1 fw-bold">Sécurité et IA</h5>
            <p class="mb-0"><b>Anonymisez toujours vos données</b> avant de les soumettre à une IA. Remplacez votre nom, votre numéro de compte et votre adresse par des "XXX". L'IA n'a besoin que des montants et des libellés de transactions.</p>
        </div>
    </div>
</div>

---

## Ressource — 2.1 pdf to texte layout

<style>
    .step-box { background-color: #f8f9fa; border-left: 5px solid #007bff; padding: 20px; margin-bottom: 25px; border-radius: 0 10px 10px 0; }
    .os-badge { font-size: 0.8rem; padding: 3px 8px; border-radius: 5px; font-weight: bold; text-transform: uppercase; }
    .badge-mac { background-color: #000; color: #fff; }
    .badge-win { background-color: #0078d4; color: #fff; }
</style>

## 📄 Le défi technique du PDF
Les relevés bancaires PDF sont conçus pour être lus par des humains, pas par des machines. Si vous faites un simple "copier-coller", les colonnes se mélangent et les données deviennent inutilisables. Pour que l'IA puisse créer un fichier CSV propre, nous devons extraire le texte en **conservant la mise en page (Layout)**.

---

### 🌐 Option 1 : Outils en ligne (Simple mais limité)
Si vous ne voulez rien installer et que vos fichiers ne sont pas trop sensibles, vous pouvez utiliser ces services :
-   **[Zamzar](https://www.zamzar.com/convert/pdf-to-txt/)** (PDF to TXT) : Très bon pour respecter les colonnes.
-   **[Tabula](https://tabula.technology/)** : L'outil de référence pour extraire des tableaux PDF vers CSV (Logiciel gratuit à télécharger).

---

### 💻 Option 2 : Conversion Locale (Recommandé)
Cette méthode est la plus sûre (vos données ne quittent pas votre ordinateur) et la plus puissante pour traiter **plusieurs fichiers à la fois**.

#### 🍎 Sur Mac
<div class="step-box">
    <span class="os-badge badge-mac">MacOS</span>
    <ol>
        <li>Ouvrez votre <b>Terminal</b> (Cmd + Espace, tapez "Terminal").</li>
        <li>Installez l'outil <i>Poppler</i> avec cette commande :<br><code>brew install poppler</code><br><small>(Si vous n'avez pas Homebrew, installez-le d'abord sur <a href="https://brew.sh/fr/" target="_blank">brew.sh</a>)</small></li>
        <li>Naviguez vers votre dossier de relevés :<br><code>cd Documents/Relevés_Bancaires</code></li>
        <li>Lancez la conversion en mode layout :<br><code>pdftotext -layout mon_releve.pdf</code></li>
    </ol>
</div>

#### 🪟 Sur Windows
<div class="step-box">
    <span class="os-badge badge-win">Windows</span>
    <ol>
        <li>Téléchargez les binaires de <b>Poppler pour Windows</b> : <a href="https://github.com/oschwartz10612/poppler-windows/releases/" target="_blank">Télécharger ici</a> (Prenez le fichier .zip).</li>
        <li>Extrayez le contenu dans un dossier (ex: <code>C:\poppler</code>).</li>
        <li>Ouvrez l'<b>Invite de commandes</b> (Touche Windows, tapez "cmd").</li>
        <li>Allez dans votre dossier de relevés :<br><code>cd C:\Users\Nom\Documents\Factures</code></li>
        <li>Utilisez l'outil en précisant le chemin (si non ajouté au PATH) :<br><code>C:\poppler\Library\bin\pdftotext.exe -layout mon_releve.pdf</code></li>
    </ol>
</div>

---

### 🚀 Astuce : Convertir TOUT un dossier en un clic
Une fois l'outil installé, vous pouvez transformer 12 mois de relevés en quelques secondes.

**Comment ouvrir votre terminal :**
- **Sur Mac 🍎** : Appuyez sur `Command (⌘) + Espace`, tapez **Terminal** et appuyez sur Entrée.
- **Sur Windows 🪟** : Appuyez sur la touche `Windows`, tapez **Invite de commandes** ou **cmd** et appuyez sur Entrée.

**Sur Mac :**
```bash
for f in *.pdf; do pdftotext -layout "$f"; done
```

**Sur Windows :**
```cmd
for %f in (*.pdf) do "C:\poppler\Library\bin\pdftotext.exe" -layout "%f"
```

---

### 🔍 Étape de Validation
Ouvrez le fichier `.txt` généré avec votre bloc-notes.
-   **Succès ✅** : Les dates, descriptions et montants sont bien alignés dans des colonnes distinctes, comme sur le papier.
-   **Échec ❌** : Le texte est tout mélangé ou illisible. (Vérifiez que vous avez bien utilisé l'option `-layout`).

---

### 🤖 Prochaine Étape
Une fois que vous avez vos fichiers texte "propres", copiez leur contenu et donnez-le à l'Assistant IA avec le prompt de la section **[Stratégie Financière (1.2)](/fr/home/fr/4-finance/gestion_financiere)**. L'IA pourra alors extraire les données et générer votre fichier CSV final.

<div class="alert alert-info border-0 shadow-sm rounded-4 p-4 mt-5">
    <div class="d-flex align-items-center">
        <div class="flex-shrink-0"><i class="bi bi-lightbulb-fill text-warning display-6 me-4"></i></div>
        <div>
            <h5 class="alert-heading mb-1 fw-bold">Pourquoi le format Texte ?</h5>
            <p class="mb-0">L'IA comprend beaucoup mieux une structure visuelle en texte brut (espaces et colonnes) qu'un fichier Excel mal importé. C'est la méthode la plus fiable pour éviter les erreurs de montants.</p>
        </div>
    </div>
</div>

---

## Ressource — 2.2 texte ia csv

<style>
    .terminal-box { background-color: #1e1e1e; color: #d4d4d4; padding: 15px; border-radius: 8px; font-family: 'Courier New', Courier, monospace; margin-bottom: 20px; font-size: 0.9rem; }
    .cmd { color: #4ec9b0; }
    .step-card { border-left: 5px solid #ff851b; background: #fffaf0; padding: 20px; margin-bottom: 25px; border-radius: 0 10px 10px 0; }
</style>

## 🤖 L'Intelligence Artificielle au service de la donnée
Dans la section précédente, nous avons extrait le texte de nos PDF. Maintenant, nous allons utiliser l'IA via une interface de ligne de commande (CLI) pour transformer ce texte en un tableau CSV parfait.

---

### 🛠️ Étape 1 : Installation de Gemini-CLI
Gemini-CLI permet de "parler" à l'IA directement depuis votre ordinateur sans passer par un navigateur.

#### 🍎 Sur Mac
<div class="step-card">
    <ol>
        <li>Assurez-vous d'avoir <b>Node.js</b> installé (<a href="https://nodejs.org" target="_blank">nodejs.org</a>).</li>
        <li>Ouvrez le <b>Terminal</b> (Appuyez sur <code>Command (⌘) + Espace</code>, tapez <b>Terminal</b> et appuyez sur Entrée) et tapez :<br>
            <div class="terminal-box"><span class="cmd">npm install -g @google/gemini-cli</span></div>
        </li>
        <li>Configurez votre clé API (obtenue sur <a href="https://aistudio.google.com/" target="_blank">Google AI Studio</a>) :<br>
            <div class="terminal-box"><span class="cmd">export GEMINI_API_KEY='VOTRE_CLE_ICI'</span></div>
        </li>
    </ol>
</div>

#### 🪟 Sur Windows
<div class="step-card">
    <ol>
        <li>Installez <b>Node.js</b> depuis <a href="https://nodejs.org" target="_blank">nodejs.org</a>.</li>
        <li>Ouvrez <b>PowerShell</b> en mode administrateur (Appuyez sur la touche <code>Windows</code>, tapez <b>PowerShell</b>, faites un clic droit sur "Windows PowerShell" et choisissez <b>Exécuter en tant qu'administrateur</b>) et tapez :<br>
            <div class="terminal-box"><span class="cmd">npm install -g @google/gemini-cli</span></div>
        </li>
        <li>Configurez votre clé API :<br>
            <div class="terminal-box"><span class="cmd">$env:GEMINI_API_KEY='VOTRE_CLE_ICI'</span></div>
        </li>
    </ol>
</div>

---

### 📝 Étape 2 : Le Prompt d'Extraction Maître
Le secret réside dans l'instruction que nous donnons à l'IA. Nous devons lui demander de gérer les descriptions sur plusieurs lignes.

**Créez un fichier `prompt.txt` avec ce contenu :**
> Agis comme un expert comptable. Analyse le texte fourni et extrait TOUTES les transactions.
> Certaines descriptions sont sur deux lignes : fusionne-les en une seule.
> Sortie uniquement en format CSV (séparateur virgule) avec ces colonnes exactes :
> dateOperation, moisOperation, categorie, sous-categorie, description, montant
> Le montant doit être positif pour une entrée et négatif pour une sortie.

---

### 🚀 Étape 3 : Traitement Automatique
Placez vos fichiers `.txt` (issus de la conversion PDF) et votre fichier `prompt.txt` dans un même dossier.

**Comment naviguer vers votre dossier dans le Terminal/PowerShell :**
- **Sur Mac 🍎** : Dans le Terminal, tapez <code>cd </code> (avec un espace après), puis glissez-déposez votre dossier de fichiers directement dans la fenêtre du Terminal et appuyez sur Entrée.
- **Sur Windows 🪟** : Ouvrez votre dossier dans l'Explorateur de fichiers. Faites un clic droit dans un espace vide du dossier et choisissez **Ouvrir dans le terminal** (ou "Ouvrir la fenêtre PowerShell ici").

**Une fois dans le dossier, lancez le traitement :**

**Sur Mac :**
<div class="terminal-box">
<span class="cmd">for f in *.txt; do gemini ask --system "$(cat prompt.txt)" --file "$f" > "${f%.txt}.csv"; done</span>
</div>

**Sur Windows (PowerShell) :**
<div class="terminal-box">
<span class="cmd">Get-ChildItem *.txt | ForEach-Object { $out = $_.Name.Replace(".txt", ".csv"); gemini ask --system (Get-Content prompt.txt -Raw) --file $_.FullName | Out-File -FilePath $out -Encoding utf8 }</span>
</div>

---

### 🔗 Étape 4 : Fusionner les résultats (La Super-Concaténation)
Si vous avez plusieurs fichiers CSV, vous pouvez les fusionner rapidement. Nous voulons un seul fichier `transactions.csv` avec une seule ligne de titre.

**Assurez-vous d'être toujours dans votre dossier (voir l'étape 3 pour ouvrir le terminal au bon endroit).**

#### 🍎 Sur Mac (terminal)
<div class="terminal-box">
<span class="cmd">cat *.csv > transactions.csv</span>
</div>

#### 🪟 Sur Windows (PowerShell)
<div class="terminal-box">
<span class="cmd">cat *.csv | Out-File -FilePath transactions.csv -Encoding utf8</span>
</div>

---

### 🔍 Étape 5 : Validation finale
Ouvrez `transactions.csv` dans Excel ou Google Sheets.
-   Vérifiez que la colonne **montant** est bien numérique.
-   Vérifiez que les descriptions longues n'ont pas créé de lignes vides ou de décalages.

<div class="alert alert-success border-0 shadow-sm rounded-4 p-4 mt-5">
    <div class="d-flex align-items-center">
        <div class="flex-shrink-0"><i class="bi bi-check-circle-fill display-6 me-4"></i></div>
        <div>
            <h5 class="alert-heading mb-1 fw-bold">Victoire !</h5>
            <p class="mb-0">Vous venez de transformer des documents papier complexes en une base de données propre. Vous êtes maintenant prêt pour la section suivante : <b>L'Importation dans Google Sheets</b>.</p>
        </div>
    </div>
</div>

---

## Ressource — 2.3 csv google sheet

<style>
    .info-card { background-color: #f0f7ff; border-left: 5px solid #007bff; padding: 20px; margin-bottom: 25px; border-radius: 0 10px 10px 0; }
    .practice-box { border: 2px dashed #28a745; background-color: #f8fff9; padding: 20px; border-radius: 12px; margin-top: 30px; }
</style>

## 📊 Transformer la donnée en Vision
Après avoir utilisé l'IA pour extraire vos transactions, vous disposez d'un fichier `transactions.csv`. Tout comme vous avez importé votre fichier `itinéraire-[nom voyage].csv` dans My Maps lors du chapitre précédent, nous allons ici importer vos données financières dans Google Sheets pour bâtir votre outil d'analyse.

---

### 📥 1. Importation du fichier CSV
1.  Ouvrez un nouveau [Google Sheets](https://sheets.new).
2.  Allez dans le menu **Fichier > Importer**.
3.  Sélectionnez l'onglet **Importer** et déposez votre fichier `transactions.csv`.
4.  Paramètres d'importation :
    -   **Emplacement** : Remplacer la feuille de calcul.
    -   **Type de séparateur** : Détecter automatiquement (ou Virgule).
5.  Cliquez sur **Importer les données**. Votre onglet source s'appelle maintenant "Transactions".

---

### 📉 2. Création du Tableau Croisé Dynamique (Pivot Table)
C'est ici que la magie opère pour obtenir votre résumé annuel :
1.  Sélectionnez toutes les données de votre feuille (cliquez sur le carré en haut à gauche entre A et 1).
2.  Allez dans **Insertion > Tableau croisé dynamique**.
3.  Cliquez sur **Créer** (dans une nouvelle feuille).
4.  Dans l'éditeur de tableau croisé (à droite), configurez ainsi :
    -   **Lignes** : Ajoutez `categorie`.
    -   **Colonnes** : Ajoutez `moisOperation`.
    -   **Valeurs** : Ajoutez `montant` (Assurez-vous que l'opération est **SUM** ou **SOMME**).

---

### 🔍 3. Analyse et Correction (Le Workflow Expert)

#### Le secret du "Drill-Down"
Si vous voyez un montant suspect dans votre tableau : **Double-cliquez** sur la cellule du montant. Google Sheets crée instantanément un nouvel onglet temporaire affichant le détail exact des transactions qui composent ce chiffre.

#### Comment corriger vos données
Si une dépense est mal classée (ex: un achat Amazon classé en "Loisirs" au lieu de "Santé") :
1.  **N'écrivez pas dans le tableau croisé dynamique.**
2.  Retournez dans l'onglet source **"Transactions"**.
3.  Modifiez la cellule de la catégorie directement dans la liste.
4.  **Pour rafraîchir** : Retournez sur votre tableau croisé, cliquez avec le bouton droit sur le tableau et sélectionnez **"Actualiser"**.

---

### 🚀 4. Analyse Avancée : Plus de Détail
Pour une vision plus fine, vous pouvez ajouter une hiérarchie dans vos lignes :
-   Dans l'éditeur, sous **Lignes**, ajoutez `sous-categorie` juste en dessous de `categorie`.
-   Vous pourrez alors "réduire" ou "développer" chaque catégorie pour voir le détail (ex: Alimentation > Épicerie vs Alimentation > Restaurant).

---

<div class="practice-box">
    <h4 class="text-success fw-bold"><i class="bi bi-pencil-square me-2"></i> Section Pratique : L'Analyse du Voyageur</h4>
    <p>Maintenant que votre tableau est prêt, essayez de répondre à ces questions :</p>
    <ol>
        <li><b>Dépenses de Voyage</b> : Cherchez la catégorie "Vacances" ou "Voyage". Quel est le mois où vous avez dépensé le plus ?</li>
        <li><b>Dépenses Fantômes</b> : Utilisez le double-clic sur votre catégorie la plus élevée. Y a-t-il des abonnements que vous pourriez annuler pour augmenter votre budget de voyage ?</li>
        <li><b>Moyenne</b> : Calculez votre dépense totale annuelle et divisez-la par 12. Est-ce que votre futur budget de voyage "voyageur bien préparé" est compatible avec cette réalité ?</li>
    </ol>
</div>

<div class="alert alert-info border-0 shadow-sm rounded-4 p-4 mt-5">
    <div class="d-flex align-items-center">
        <div class="flex-shrink-0"><i class="bi bi-lightbulb-fill text-primary display-6 me-4"></i></div>
        <div>
            <h5 class="alert-heading mb-1 fw-bold">Astuce de Pro</h5>
            <p class="mb-0">Une fois votre analyse terminée, cette feuille Google Sheets deviendra la base de votre <b>Tableau de Bord Financier (Dashboard)</b> que nous configurerons en section 2.3.2.</p>
        </div>
    </div>
</div>

---

## Ressource — 2.4 planificateur financier

<style>
    .pro-badge { background-color: #e3f2fd; color: #0d47a1; padding: 4px 10px; border-radius: 20px; font-size: 0.85rem; font-weight: bold; }
    .validation-step { border-left: 4px solid #198754; padding-left: 20px; margin-bottom: 30px; }
</style>

## 🏦 La validation de votre futur par un expert
Un projet de "Voyage Augmenté" (plus long, plus fréquent, plus ambitieux) ne doit jamais mettre en péril votre sécurité financière à long terme, surtout si vous approchez de la retraite. Le **Planificateur Financier (Pl. Fin.)** est le seul professionnel capable de vous donner le "feu vert" final.

---

### 🧠 Pourquoi consulter un professionnel ?
L'IA peut calculer le coût d'un voyage, mais elle ne peut pas prédire l'impact de ce décaissement sur votre patrimoine sur 25 ans.

1.  **Analyse de Couple** : Un bon planificateur doit analyser votre situation **en tant que couple** (patrimoine consolidé) et non individuellement, pour optimiser la fiscalité et les successions.
2.  **Simulation de Décaissement** : Est-ce préférable de piger dans le CELI, le REER ou le FEER pour financer votre projet ?
3.  **Portrait de Survie** : S'assurer que même après vos voyages de rêve, votre capital restant couvrira vos soins de santé futurs.

---

### ✅ Votre "Dossier Voyage" pour le rendez-vous
Préparez les documents suivants pour que l'analyse soit précise :

<div class="validation-step">
    <h5 class="fw-bold">1. Le Budget de Vie (Le "Passé")</h5>
    <p class="small">Remettez le <b>Budget Familial</b> que vous avez extrait via l'IA (section 1.2). Cela montre votre coût de vie réel actuel.</p>
</div>

<div class="validation-step">
    <h5 class="fw-bold">2. Le Budget de Rêve (Le "Futur")</h5>
    <p class="small">Présentez vos estimations de voyage annuel (ex: "Nous prévoyons 20 000$ de voyages par an").</p>
</div>

<div class="validation-step">
    <h5 class="fw-bold">3. L'État de Situation Net</h5>
    <p class="small">Apportez vos relevés de : <b>REER, FEER, CELI, Comptes bancaires, Hypothèques</b>.</p>
</div>

---

### 🔍 Comment vérifier votre professionnel (Québec)
Assurez-vous de faire affaire avec un expert certifié :
- **IQPF** : [Répertoire des Planificateurs Financiers](https://www.iqpf.org/recherche)
- **AMF** : [Registre des entreprises et individus autorisés à exercer](https://lautorite.qc.ca/grand-public/registres/)

---

### 📝 Note pour l'Explorateur
Ne demandez pas à votre banquier s'il est "d'accord" avec votre voyage. Demandez à votre **Pl. Fin.** : *"Si je dépense ce montant chaque année pour voyager, quel sera l'impact sur la valeur de mon patrimoine à 85 ans ?"* 

C'est cette réponse qui vous apportera la vraie sérénité en voyage.

---

## Ressource — 2.5 csv financial enrichment

## 💰 Chiffrer son itinéraire
Un itinéraire n'est complet que s'il est chiffré. Dans cette section, nous allons apprendre à transformer votre fichier **`itinéraire-[nom voyage].csv`** (généré au Chapitre 2) en un véritable outil de prévision budgétaire.

### 📊 Les colonnes à ajouter
Pour chaque étape de votre fichier **`itinéraire-[nom voyage].csv`**, demandez à l'IA d'estimer ou d'ajouter les colonnes suivantes :
1.  **Coût Transport ($)** : Estimation du carburant ou du billet.
2.  **Coût Hébergement ($)** : Prix moyen par nuit selon vos préférences.
3.  **Coût Activités ($)** : Entrées de musées, parcs, etc.
4.  **Devise Locale** : Pour anticiper les taux de change.

---

### 🤖 Le Prompt d'Enrichissement Financier
Copiez ce prompt dans l'Assistant IA en lui donnant votre fichier **`itinéraire-[nom voyage].csv`** :

> "Analyse mon itinéraire CSV ci-joint. Ajoute une colonne 'Coût Transport','Coût Hébergement', 'Coût Activités', 'Devise Locale' le tout en dollars canadien pour chaque ligne. Ajoute également une colonne 'Note_Économie' avec un conseil pour payer moins cher sur cette étape spécifique."

---

### ☑️ Action
Prenez votre fichier **`itinéraire-[nom voyage].csv`** que vous avez généré au Chapitre 2 et demandez à l'IA de le chiffrer. Vous obtiendrez alors une vision globale du coût de votre aventure avant même d'avoir ouvert votre portefeuille.

---

## Ressource — 2.6 google sheets finance intro

## 💻 Construire son Centre de Commandement Financier
L'IA génère les données (CSV), mais Google Sheets est votre **centre de commandement**. C'est ici que vous validez la viabilité de votre projet. Contrairement à une simple liste, un tableau de bord vous permet de simuler des scénarios (ex: "Et si je prenais cet hôtel plus cher ?") et d'en voir l'impact instantané sur votre budget total.

---

### 🛠️ Architecture de votre Système de Gestion Financière (SGV)
Pour une efficacité maximale, votre fichier Google Sheets doit être organisé en 3 onglets distincts utilisant une nomenclature de catégories unifiée.

#### 1. Onglet "Itinéraire Chiffré"
Base de données brute issue de l'IA.
- **Colonnes** : Jour, Ville, Activité, Catégorie, Coût Estimé, Note IA.

#### 2. Onglet "Tableau de Bord" (Synthèse)
Vue d'ensemble consolidée avec vos indicateurs de performance.
- **Champs de contrôle** : 
    - **Budget Total Alloué** : Votre enveloppe maximale.
    - **Total Prévisionnel** : Somme automatique de l'itinéraire.
    - **Écart (Balance)** : Montant restant (ou dépassement).
- **Répartition par Catégories** : Utilisez ces catégories standards pour votre tableau croisé :
    - ✈️ **Transport Long-courrier** (Vols, Train international, Frais de bagages)
    - 🚗 **Transport Local** (Location VR/Auto, Essence, Parking, Péages, Taxis, Transports en commun)
    - 🏠 **Hébergement** (Hôtels, Campings, Airbnb, Frais de ménage, Taxes de séjour)
    - 🍴 **Alimentation** (Restaurants, Épicerie, Alcool, Cafés, Pourboires)
    - 🎟️ **Activités** (Musées, Tours guidés, Parcs, Matériel de location sport)
    - 📡 **Tech & Comm** (eSIM, VPN, Satellite, Forfaits data)
    - 🛡️ **Protection** (Assurances, Santé, Pharmacie, Visas, Vaccins)
    - 🛍️ **Shopping & Divers** (Souvenirs, Vêtements, Cadeaux, Frais bancaires)
    - 🚨 **Imprévus** (Fonds de réserve 10-15%)

#### 3. Onglet "Suivi Réel"
Le journal de bord de vos dépenses sur le terrain.
- **Titres de colonnes (Headers)** :
    - **Date** : Date de la dépense.
    - **Description** : Libellé court (ex: "Déjeuner Split").
    - **Catégorie** : Menu déroulant (doit correspondre à la liste ci-dessus).
    - **Montant (Devise)** : Montant payé en monnaie locale.
    - **Taux de change** : Si applicable.
    - **Montant ($)** : Conversion automatique dans votre devise de référence.
    - **Moyen de paiement** : (ex: Wise, Cash, Carte Visa).

---

### 💡 Astuce Débutant : Gérer les Onglets
Pour organiser votre fichier comme décrit ci-dessus, vous devez créer plusieurs feuilles (onglets) en bas de votre écran :
1. **Créer un onglet** : Cliquez sur le petit bouton **"+"** (Ajouter une feuille) tout en bas à gauche de la fenêtre Google Sheets.
2. **Renommer un onglet** : Double-cliquez sur le nom actuel (ex: "Feuille1") en bas de l'écran, tapez le nouveau nom (ex: "Tableau de Bord") et appuyez sur **Entrée**.
3. **Changer la couleur** : Faites un clic droit sur le nom de l'onglet, choisissez **Modifier la couleur** pour mieux les repérer (ex: Rouge pour "Suivi Réel").

---

### 💡 Astuce : Créer un Menu Déroulant (Dropdown)
Pour éviter les erreurs de saisie dans l'onglet "Suivi Réel", nous allons créer un menu déroulant pour la colonne **Catégorie**.
1. **Sélectionner la colonne** : Cliquez sur la lettre en haut de votre colonne (ex: **C** pour Catégorie).
2. **Ouvrir l'outil** : Allez dans le menu **Données > Validation des données**.
3. **Ajouter une règle** : Cliquez sur **"+ Ajouter une règle"** dans le panneau à droite.
4. **Configurer le menu** :
   - Sous "Critères", choisissez **"Menu déroulant"**.
   - Saisissez vos catégories une par une (ex: Hébergement, Alimentation, Transport...) ou choisissez **"Menu déroulant (à partir d'une plage)"** si vous avez déjà listé vos catégories dans un autre onglet.
5. **Appliquer à toute la colonne** : Assurez-vous que la plage indiquée est bien `C:C` (ou `C2:C1000` pour ignorer le titre). Cliquez sur **OK**.


---

### 📈 Les Indicateurs Clés à Surveiller
Dans votre Tableau de Bord, assurez-vous de mettre en évidence ces inguides :

1.  **Le Coût Quotidien Moyen** : Divisez votre budget total par le nombre de jours. Est-ce que ce chiffre est réaliste pour la destination ?
2.  **La Marge de Sécurité** : Nous recommandons une réserve de **10 à 15%** du budget total pour les imprévus.
3.  **L'Objectif d'Économie IA** : Notez combien vous prévoyez économiser grâce aux conseils de l'IA sur les transports ou les activités.

---

### 💡 Le Conseil de l'Expert : La Mise en Forme Conditionnelle
La mise en forme conditionnelle permet de faire réagir visuellement vos données. Par exemple, faire en sorte que votre cellule "Écart" devienne rouge si vous dépassez votre budget.

**Comment faire :**
1. **Sélectionner une cellule ou une colonne** : Cliquez sur la lettre en haut d'une colonne (ex: **E**) pour la sélectionner en entier.
2. **Ouvrir l'outil** : Allez dans le menu **Format > Mise en forme conditionnelle**.
3. **Définir la règle** : Dans le panneau à droite, sous "Règles de mise en forme", choisissez **"Moins que"** et tapez **0**.
4. **Choisir le style** : Sélectionnez le remplissage rouge. Cliquez sur **OK**.
5. **Appliquer à toute la colonne** : Si vous n'avez sélectionné qu'une cellule au départ, vous pouvez étendre l'application en modifiant le champ **"Appliquer à la plage"** (ex: `E2:E1000` pour couvrir toutes vos lignes).

---

### ☑️ Votre Mission
1.  Ouvrez un nouveau [Google Sheets](https://sheets.new).
2.  Créez les 3 onglets décrits ci-dessus.
3.  Utilisez les **titres de colonnes** fournis pour l'onglet "Suivi Réel".
4.  Configurez une **Validation de données** (menu déroulant) pour la colonne Catégorie afin qu'elle corresponde exactement à vos catégories de planification.

> En structurant votre budget ainsi, vous passez du statut de "touriste qui dépense" à celui d'**Explorateur qui investit** dans son expérience.

---

## Ressource — 2.7 gestion budget

## 📱 Système de Suivi Hors-Ligne
En voyage, la connexion est capricieuse. Si vous attendez d'avoir du Wi-Fi pour noter vos dépenses, vous en oublierez 30 %. Le cumul de ces petits oublis est la raison n°1 pour laquelle les voyageurs rentrent plus tôt que prévu.

## 2. Le Choix de votre Arsenal Financier
Il existe deux approches selon votre profil. Voici les outils que j'ai rigoureusement sélectionnés pour leur fiabilité :

### A. L'Approche "Contrôle Total" (PC/Mac)
Idéal si vous voyagez avec un ordinateur et voulez des rapports précis.
*   **Outil recommandé :** [Money Manager EX](https://www.moneymanagerex.org).
*   **Pourquoi ?** C'est 100% hors ligne, gratuit et open-source. C'est l'équivalent d'un comptable personnel dans votre poche.

### B. L'Approche "Mobile & Rapide" (Smartphone)
Idéal pour noter son café ou son taxi en 3 secondes.
*   **Outil recommandé :** [AndroMoney](http://andromoney.com).
*   **Pourquoi ?** Optimisé pour le mobile, ultra rapide et fonctionne parfaitement dans l'avion ou le désert.
*   **💡 Note sur le partage :** AndroMoney permet de synchroniser un compte via Google Drive ou Dropbox, ce qui permet à un couple de voir les mêmes dépenses. Cependant, il ne gère pas nativement le "Qui doit quoi" entre amis. Si vous voyagez en groupe et voulez diviser les factures précisément, l'outil complémentaire idéal est **[Splitwise](https://www.splitwise.com)**.
    *   **Splitwise** : Fonctionne parfaitement **hors-ligne** pour saisir vos dépenses en direct. Il permet toujours l'**export CSV gratuit** (via leur site web sur ordinateur) pour récupérer vos données et les intégrer dans votre Google Sheets de suivi financier.

## 3. La Méthode TWAI guide: Le Système des Enveloppes Numériques
Pour ne pas dépasser votre budget, n'essayez pas de tout suivre globalement. Divisez votre budget en 3 enveloppes :
1.  **Enveloppe Fixe :** Hébergement et transports longue distance.
2.  **Enveloppe Quotidienne :** Nourriture, café, petits plaisirs. (C'est celle qu'il faut suivre chaque jour !)
3.  **Enveloppe Imprévus :** 15% de votre budget total pour les urgences.

> Enregistrer ou importer toutes les dépenses dans Google sheets.

---

## 🛠️ Exercice Pratique du Chapitre
**Votre mission :**
1. Installez **AndroMoney** (ou Money Lover) sur votre téléphone.
2. Créez 3 catégories : "Nourriture", "Logement", "Transport".
3. **Action :** Notez votre dernière dépense de la journée (même si c'est une baguette de pain !).
4. **Réflexion :** Quel est votre budget maximum par jour pour votre prochain voyage ? Écrivez ce chiffre dans votre journal de bord.

---

*Bravo ! Vous venez de faire le premier pas pour devenir un voyageur financièrement libre.*

---

## Ressource — 3.1 arbitrage fintech

## 🧠 La Stratégie du "Stacking" Financier
Pour l'Explorateur de niveau expert, l'argent n'est pas seulement une ressource à dépenser, c'est une donnée à optimiser. Le **Stacking** (empilement) consiste à combiner plusieurs outils pour réduire les frais à zéro et accumuler des avantages.

---

### 🏛️ Les 3 Couches du Stacking
<div class="row g-4 mb-5">
    <div class="col-md-4">
        <div class="card h-100 border-0 shadow-sm rounded-4">
            <div class="card-body p-4">
                <div class="text-primary fs-1 mb-3"><i class="bi bi-bank"></i></div>
                <h5 class="fw-bold">Couche 1 : Le Taux Réel</h5>
                <p class="small text-muted">Utilisez des banques comme <b>Wise</b> ou <b>Revolut</b> pour obtenir le taux interbancaire sans commission cachée.</p>
            </div>
        </div>
    </div>
    <div class="col-md-4">
        <div class="card h-100 border-0 shadow-sm rounded-4">
            <div class="card-body p-4">
                <div class="text-warning fs-1 mb-3"><i class="bi bi-credit-card-2-front"></i></div>
                <h5 class="fw-bold">Couche 2 : Le Cashback</h5>
                <p class="small text-muted">Payez avec des cartes offrant des remises en argent (ex: Wealthsimple au Canada) pour "gagner" en dépensant.</p>
            </div>
        </div>
    </div>
    <div class="col-md-4">
        <div class="card h-100 border-0 shadow-sm rounded-4">
            <div class="card-body p-4">
                <div class="text-success fs-1 mb-3"><i class="bi bi-gift"></i></div>
                <h5 class="fw-bold">Couche 3 : Les Points</h5>
                <p class="small text-muted">Optimisez vos gros achats (Vols, Location de VR) sur des cartes de crédit voyage pour financer vos futurs périples.</p>
            </div>
        </div>
    </div>
</div>

---

<!-- trip-only:start -->

### 🛠️ Exercice : Votre Arsenal Fintech
Identifiez les outils que vous allez "empiler" pour votre prochain voyage.

<div class="card border-primary shadow-sm mb-5 overflow-hidden">
<div class="card-header bg-primary text-white py-3 fw-bold">
<i class="bi bi-cpu me-2"></i> VOTRE CONFIGURATION EXPERTE
</div>
<div class="card-body p-4 p-md-5">
<form class="local-form" data-form-id="stacking-fintech">
<div class="form-group mb-4">
<label>Quelles banques Fintech possédez-vous déjà ?</label>
<div class="d-flex flex-wrap gap-2">
<label class="checkbox-inline border px-3 py-2 rounded bg-white shadow-sm"><input type="checkbox" name="has_wise" class="me-2"> Wise</label>
<label class="checkbox-inline border px-3 py-2 rounded bg-white shadow-sm"><input type="checkbox" name="has_revolut" class="me-2"> Revolut</label>
<label class="checkbox-inline border px-3 py-2 rounded bg-white shadow-sm"><input type="checkbox" name="has_wealthsimple" class="me-2"> Wealthsimple</label>
<label class="checkbox-inline border px-3 py-2 rounded bg-white shadow-sm"><input type="checkbox" name="has_n26" class="me-2"> N26</label>
</div>
</div>
<div class="form-group mb-5">
<label>Votre objectif principal d'arbitrage</label>
<select name="arbitrage_goal" class="form-select border-0 bg-light">
<option value="fees">Zéro frais de retrait (ATM)</option>
<option value="points">Maximiser les points voyage</option>
<option value="safety">Sécurité et isolation des comptes</option>
</select>
</div>
<div class="text-center pt-4 border-top">
<button type="submit" class="btn btn-primary btn-lg px-5 shadow-sm fw-bold">
<i class="bi bi-save me-2"></i>ENREGISTRER MON ARSENAL
</button>
</div>
</form>
</div>
</div>

<!-- trip-only:end -->

<div class="alert alert-warning border-0 shadow-sm rounded-4 p-4">
    <div class="d-flex align-items-center">
        <div class="flex-shrink-0"><i class="bi bi-exclamation-triangle-fill text-dark display-6 me-4"></i></div>
        <div>
            <h5 class="alert-heading mb-1 fw-bold">Attention à la Diversification</h5>
            <p class="mb-0">Ne mettez jamais tout votre argent sur une seule carte Fintech. En cas de blocage de compte (fréquent avec les banques en ligne), vous devez toujours avoir une solution de secontenu traditionnelle.</p>
        </div>
    </div>
</div>

---

## Ressource — 3.2 wise revolut guide

# 3.2 - Guide Pratique : Wise et Revolut

Les cartes bancaires traditionnelles sont souvent mal adaptées aux voyages internationaux, avec des frais de change cachés et des commissions sur chaque retrait. Les néo-banques comme **Wise** et **Revolut** ont révolutionné ce domaine.

## Pourquoi utiliser une carte multi-devises ?

1. **Sécurité accrue :** Ces cartes ne sont pas liées à votre compte bancaire principal. Vous les rechargez uniquement avec le montant nécessaire. En cas de vol, vos économies principales sont à l'abri.
2. **Taux de change réel :** Contrairement aux banques qui majorent le taux, Wise utilise le taux de change moyen du marché (celui que vous voyez sur Google).
3. **Multi-comptes :** Vous pouvez détenir des dollars canadiens, des euros, des dollars américains et des livres sterling simultanément sur la même carte.

---

### 🏛️ Comparatif Rapide

| Caractéristique | Wise | Revolut |
| :--- | :--- | :--- |
| **Idéal pour** | Transferts d'argent et comptes locaux | Gestion quotidienne et budget |
| **Coordonnées bancaires** | Oui (IBAN, US Account, etc.) | Oui |
| **Frais de retrait** | Gratuit jusqu'à 200€/mois | Gratuit jusqu'à 200€/mois (Plan Standard) |
| **Taux de change** | Taux moyen du marché + petite commission transparente | Taux moyen (frais le week-end) |

---

## Comment obtenir et utiliser votre carte Wise ?

1. **Inscription :** Téléchargez l'application Wise et créez votre compte gratuitement.
2. **Commande :** Commandez votre carte de débit physique (frais de livraison d'environ 10$).
3. **Rechargement :** Ajoutez des fonds depuis votre banque canadienne par virement Interac ou transfert bancaire.
4. **Conversion :** Convertissez vos CAD en EUR (ou autre) instantanément quand le taux est favorable.
5. **Paiement :** Utilisez la carte normalement partout dans le monde. Wise piochera automatiquement dans la devise locale si vous en possédez.

<div class="alert alert-info border-0 shadow-sm rounded-4 p-4 mt-5">
    <div class="d-flex align-items-center">
        <div class="flex-shrink-0"><i class="bi bi-lightbulb-fill text-info display-6 me-4"></i></div>
        <div>
            <h5 class="alert-heading mb-1 fw-bold">Astuce d'Expert</h5>
            <p class="mb-0">Pour Claire et Gilles : Wise est particulièrement utile si vous devez recevoir des paiements ou faire des virements en Europe. Vous aurez votre propre IBAN européen, comme si vous aviez un compte sur place !</p>
        </div>
    </div>
</div>

---

## 🛠️ Exercice : Simulation de frais
Utilisez le simulateur sur le site de Wise pour comparer ce qu'un transfert de 1000 CAD vers des EUR vous coûterait avec votre banque actuelle versus Wise. Vous serez surpris de la différence !

<div class="text-center mt-5">
    <a href="/fr/home/fr/4-finance/arbitrage-fintech" class="btn btn-outline-primary btn-lg px-5 shadow-sm">
        <i class="bi bi-arrow-left me-2"></i> RETOUR À L'ARBITRAGE
    </a>
</div>

---

# Pilier 5 — Navigation

## Ressource — 1.1 guide navigation index

<p align="center">
  <img src="/public/img/iphone_to_map.webp" alt="Chapitre 5 Navigation" style="width:100%; border-radius: 15px; box-shadow: 0 4px 15px rgba(0,0,0,0.1);" />
</p>

Ce chapitre transforme votre smartphone en centre de commandement mondial. Vous apprendrez à vous orienter avec précision, avec ou sans connexion internet, et à optimiser chaque déplacement.

## 🎯 Objectif pédagogique

À la fin de ce chapitre, vous serez capable de :

- Choisir un outil de navigation adapté à chaque type de déplacement.
- Préparer des cartes et des inguides accessibles hors ligne.
- Utiliser vos repères numériques sans perdre votre sens de l'orientation.
- Réagir calmement lorsqu'un trajet ne se déroule pas comme prévu.

## 🧭 Comment fonctionne ce chapitre

Une navigation fiable repose sur la redondance : une carte préparée, un appareil chargé, des repères simples et une solution de secontenu. Les outils complètent votre jugement sur le terrain ; ils ne le remplacent pas.

## Les étapes du chapitre

### 1. Définir vos besoins

Identifiez vos déplacements réels : ville, route, randonnée, mer ou transports collectifs. Choisissez des outils adaptés à votre niveau d'autonomie et à votre environnement.

### 2. Préparer vos repères

Enregistrez les adresses, points d'intérêt, hébergements, stationnements et itinéraires importants. Nommez-les clairement pour pouvoir les retrouver rapidement en situation de stress.

### 3. Rendre la navigation autonome

Téléchargez les cartes utiles et vérifiez qu'elles fonctionnent sans données mobiles. Chargez vos appareils, prévoyez une batterie externe et gardez un repère non numérique lorsque l'environnement l'exige.

### 4. Naviguer sur le terrain

Vérifiez régulièrement votre position, la progression et les conditions locales. Ajustez votre rythme avant que la fatigue, la météo ou l'heure ne réduisent vos options.

### 5. Gérer l'imprévu

Quand un trajet est fermé ou incertain, arrêtez-vous, confirmez les faits et choisissez une alternative sûre. Votre priorité reste la sécurité, pas le respect du plan initial.

## 🛠️ Action immédiate

Téléchargez une carte hors ligne de votre prochaine destination et testez-la en mode avion. Vous saurez immédiatement si votre système est réellement autonome.

---

## Ressource — 1.2 formulaire navigation

<style>
    .nav-card { border-left: 5px solid #007bff; background-color: #f8f9fa; }
    .security-card { border-left: 5px solid #dc3545; background-color: #fff5f5; }
</style>
## 🧭 Mieux vous connaître pour mieux vous guider

Avant de plonger dans les outils techniques, il est essentiel de définir votre profil de navigateur. Vos besoins ne sont pas les mêmes si vous traversez le Canada en VR ou si vous explorez les ruelles de Rome à pied.

---

<div class="card shadow-sm border-0 mb-5 overflow-hidden">
<div class="card-header bg-primary text-white py-3 fw-bold">
<i class="bi bi-person-badge me-2"></i> FORMULAIRE : EXPÉRIENCE ET PRÉFÉRENCES
</div>
<div class="card-body p-4 p-md-5">
<form class="local-form" data-form-id="profil-navigation-voyageur">

<h5 class="border-bottom pb-2 mb-4 text-primary"><i class="bi bi-star me-2"></i>Expérience et Confort</h5>
<div class="row g-4 mb-4">
<div class="col-md-6">
<div class="form-group">
<label class="fw-bold">Votre niveau d'aisance avec le GPS numérique</label>
<select name="nav_skill" class="form-select border-0 bg-light">
<option value="debutant">Débutant (Je suis souvent perdu)</option>
<option value="intermediaire" selected>Intermédiaire (Je me débrouille bien)</option>
<option value="expert">Expert (Je maîtrise les calques et le hors-ligne)</option>
</select>
</div>
</div>
<div class="col-md-6">
<div class="form-group">
<label class="fw-bold">Préférence de navigation</label>
<select name="nav_preference" class="form-select border-0 bg-light">
<option value="rapide">Le plus rapide (Autoroutes)</option>
<option value="panoramique">Le plus beau (Routes secondaires)</option>
<option value="aventure">Aventure (Chemins de terre / Hors-piste)</option>
</select>
</div>
</div>
</div>
<div class="form-group mb-4">
<label class="fw-bold">Modes de transport prévus (plusieurs choix possibles)</label>
<div class="d-flex flex-wrap gap-2 mt-2">
<label class="checkbox-inline border px-3 py-2 rounded bg-white shadow-sm"><input type="checkbox" name="mode_auto" class="me-2"> Voiture</label>
<label class="checkbox-inline border px-3 py-2 rounded bg-white shadow-sm"><input type="checkbox" name="mode_vr" class="me-2"> Van / VR</label>
<label class="checkbox-inline border px-3 py-2 rounded bg-white shadow-sm"><input type="checkbox" name="mode_velo" class="me-2"> Vélo / VTT</label>
<label class="checkbox-inline border px-3 py-2 rounded bg-white shadow-sm"><input type="checkbox" name="mode_pied" class="me-2"> À pied</label>
<label class="checkbox-inline border px-3 py-2 rounded bg-white shadow-sm"><input type="checkbox" name="mode_bateau" class="me-2"> Bateau</label>
</div>
</div>
<h5 class="border-bottom pb-2 mb-4 mt-5 text-danger"><i class="bi bi-shield-exclamation me-2"></i>Sécurité et Urgence</h5>
<div class="form-group mb-4">
<label class="fw-bold">Quels équipements de sécurité possédez-vous ?</label>
<div class="row mt-2">
<div class="col-md-6">
<div class="form-check mb-2">
<input class="form-check-input" type="checkbox" name="sec_medkit" id="sec1">
<label class="form-check-label" for="sec1">Trousse de premiers secontenu</label>
</div>
<div class="form-check mb-2">
<input class="form-check-input" type="checkbox" name="sec_light" id="sec2">
<label class="form-check-label" for="sec2">Lampe torche puissante</label>
</div>
</div>
<div class="col-md-6">
<div class="form-check mb-2">
<input class="form-check-input" type="checkbox" name="sec_vest" id="sec3">
<label class="form-check-label" for="sec3">Gilet réfléchissant</label>
</div>
<div class="form-check mb-2">
<input class="form-check-input" type="checkbox" name="sec_battery" id="sec4">
<label class="form-check-label" for="sec4">Batterie de secontenu (Powerbank)</label>
</div>
</div>
</div>
</div>
<div class="form-group mb-5">
<label class="fw-bold">En cas de panne totale de batterie/GPS, avez-vous un plan B ?</label><br/>
<textarea name="plan_b" class="form-control border-0 bg-light" rows="3" placeholder="Ex: J'ai toujours une carte papier de secontenu et une boussole..."></textarea>
</div>
<div class="text-center pt-4 border-top">
<button type="submit" class="btn btn-primary btn-lg px-5 shadow-sm fw-bold">
<i class="bi bi-save me-2"></i>ENREGISTRER MON PROFIL
</button>
</div>
</form>
</div>
</div>

---

### 💡 Pourquoi ce profil ?

Vos réponses permettront à l'Assistant IA de TWAI guide de personnaliser vos futurs itinéraires. Par exemple, si vous indiquez être en **VR (Véhicule Récréatif)**, l'IA évitera systématiquement les routes avec des ponts trop bas ou des virages trop serrés.

---

<div class="alert alert-warning border-0 shadow-sm rounded-4 p-4 mt-5">
<div class="d-flex align-items-center">
<div class="flex-shrink-0"><i class="bi bi-exclamation-triangle-fill text-warning display-6 me-4"></i></div>
<div>
<h5 class="alert-heading mb-1 fw-bold">Validation de Sécurité</h5>
<p class="mb-0">Si vous n'avez pas coché la <b>Batterie de secontenu</b> ou la <b>Trousse de secontenu</b>, nous vous recommandons fortement de les ajouter à votre liste d'achats avant le prochain chapitre.</p>
</div>
</div>
</div>

---

## Ressource — 1.3 outils navigation

---
ID: outils-navigation
Lang: fr
Draft: false
Title: "1.3 - Les Meilleurs Outils de Navigation"
TitleShort: "Outils Navigation"
Description: "Comparatif et sélection des meilleurs outils pour se repérer en voyage."
Niveau: 1
---

## 🎯 Objectif
Choisir les bons outils pour se repérer en voyage, en ligne ou hors ligne, selon son style et ses besoins. La navigation moderne combine des conseils en temps réel, des alertes de circulation et une optimisation d'itinéraire pour vous aider à atteindre vos destinations l'esprit tranquille.

---

## 📊 Tableau comparatif des principaux outils

| Outil        | Fonctionnalités clés                          | En ligne / Hors ligne | Avantages                          | Idéal pour…                      |
|--------------|-----------------------------------------------|------------------------|-------------------------------------|----------------------------------|
| **Google Maps** | Itinéraires, trafic, lieux, cartes hors ligne | Les deux               | Très précis, interface familière    | Voyages urbains, roadtrips       |
| **Maps.me**     | Cartes hors ligne, POI, rando, navigation      | Hors ligne             | Léger, très utile sans réseau       | Randonnées, zones rurales        |
| **AllTrails**   | Sentiers, avis, traces GPS, export GPX         | Les deux               | Très bon pour choisir un sentier connu | Randonnée pédestre              |
| **Komoot**      | Itinéraires outdoor, vélo, rando, stats       | Les deux               | Spécialisé plein air, très visuel   | Cyclistes, randonneurs           |
| **Rome2Rio**    | Multi-transports, estimation coûts, horaires  | En ligne               | Vue d’ensemble, très pratique       | Planification intermodale        |
| **OsmAnd**      | Cartes open source, navigation hors ligne     | Hors ligne             | Très personnalisable, open source   | Voyageurs tech, zones reculées   |
| **Waze**        | Trafic en temps réel, alertes routières       | En ligne               | Communautaire, très réactif         | Conducteurs en zone urbaine      |
| **Avenza Maps** | Cartes PDF géoréférencées, lecture terrain    | Hors ligne             | Idéal pour cartes spécialisées      | Parcs, sentiers, cartes papier numérisées |
| **GPSMyCity**   | Balades auto-guidées en ville                 | Hors ligne             | Très pratique pour visites à pied   | City-trips, tourisme urbain      |
| **HERE WeGo**   | Navigation routière et cartes hors ligne      | Les deux               | Bonne alternative simple            | Déplacements locaux, conduite    |

---

## 🔗 Liens et Ressources

- [Google Maps](https://www.google.ca/maps/preview) : Outil de planification complet avec recommandations personnalisées.
- [AllTrails](https://www.alltrails.com) : Base de sentiers avec avis, dénivelé et export de traces.
- [Avenza Maps](https://www.avenzamaps.com) : Lecture de cartes PDF géoréférencées hors ligne.
- [GPSMyCity](https://www.gpsmycity.com) : Guides de visite et parcontenu à pied pour les villes.
- [HERE WeGo](https://wego.here.com/) : Navigation simple avec cartes téléchargeables.
- [Komoot](https://www.komoot.com/) : Le spécialiste des activités de plein air (rando, vélo).
- [Rome2rio](https://www.rome2rio.com/) : Moteur de recherche multimodal (avion, train, bus, ferry).
- [Waze](https://www.waze.com/) : Navigation communautaire avec alertes de trafic en temps réel.
- [Zeo](https://www.zeorouteplanner.com/) : Outil pour optimiser et exécuter des itinéraires complexes.

---

## 🧠 Stratégie de Sélection

Pour un voyage serein, nous recommandons de ne pas dépendre d'un seul outil :
- **Voyage connecté** : Combinez **Google Maps** pour la précision et **Waze** pour le trafic.
- **Zones reculées / Sans réseau** : Téléchargez vos cartes sur **Maps.me** ou **OsmAnd** avant le départ.
- **Trajets complexes** : Utilisez **Rome2Rio** pour comparer les modes de transport (bus vs train vs avion).
- **Aventure en plein air** : Privilégiez **Komoot** pour sa cartographie topographique supérieure.

---

## 🧩 Outils spécialisés selon le contexte
- **Randonnée balisée** : **AllTrails** aide à choisir un sentier déjà documenté par la communauté.
- **Rando ou vélo sur mesure** : **Komoot** est souvent plus intéressant si vous voulez construire votre propre parcontenu.
- **Carte officielle de parc ou carte topo PDF** : **Avenza Maps** est excellent pour emporter des cartes géoréférencées hors ligne.
- **Visite urbaine à pied** : **GPSMyCity** peut servir de guide autonome sans dépendre d'une connexion constante.
- **Conduite locale avec alternative à Google** : **HERE WeGo** est un bon plan B simple pour les trajets routiers.

---

## Ressource — 2.1 google maps masterclass

<style>
    .tip-badge { background-color: #e8f0fe; color: #1967d2; padding: 2px 8px; border-radius: 5px; font-size: 0.8rem; font-weight: bold; text-transform: uppercase; }
    .master-card { border: none; box-shadow: 0 4px 12px rgba(0,0,0,0.05); border-radius: 15px; margin-bottom: 25px; transition: transform 0.2s; }
    .master-card:hover { transform: translateY(-3px); }
    .cmd-box { background-color: #f1f3f5; border-left: 4px solid #4285f4; padding: 10px 15px; font-family: monospace; font-size: 0.9rem; }
</style>

## 🗺️ Devenir un Expert de la Navigation

Google Maps n'est pas qu'un simple GPS. C'est une base de données mondiale surpuissante. Cette Masterclass compile les meilleures techniques pour transformer votre téléphone en un véritable centre de commandement pour vos voyages.

---

### 📱 Chapitre 1 : Gestes Avancés et Interface (Mobile)
Gagnez du temps et manipulez votre carte comme un pro, même avec une seule main.
<div class="row g-4 mb-4">
<div class="col-md-6">
<div class="card h-100 master-card">
<div class="card-body">
<span class="tip-badge">Navigation</span>
<h5 class="fw-bold mt-2">Maîtrise du zoom et vue</h5>
<ul>
<li><b>Zoom à un doigt</b> : Double-cliquez, puis faites glisser vers le haut ou le bas sans lever le doigt.</li>
<li><b>Rotation</b> : Placez l'index et le pouce et tournez pour changer l'orientation.</li>
<li><b>Perspective 3D</b> : Faites glisser deux doigts vers le haut pour la vue "survol" des bâtiments.</li>
<li><b>Toujours au Nord</b> : Activez "Conserver la carte au nord" dans les réglages de navigation.</li>
</ul>
</div>
</div>
</div>
<div class="col-md-6">
<div class="card h-100 master-card">
<div class="card-body">
<span class="tip-badge">Raccourci</span>
<h5 class="fw-bold mt-2">Accès ultra-rapide</h5>
<ul>
<li><b>Lancement direct</b> : Maintenez enfoncé le bouton bleu "Itinéraire" pour lancer la navigation instantanément sans valider les étapes.</li>
<li><b>Icône personnalisée</b> : Touchez la flèche bleue pendant la conduite pour la transformer en berline, pick-up ou SUV.</li>
<li><b>Widget Android</b> : Créez un raccourci "Domicile" sur votre écran d'accueil pour rentrer en un clic.</li>
</ul>
</div>
</div>
</div>
</div>

---
### 📅 Chapitre 2 : L'Art de la Planification Intelligente
Centralisez vos inguides pour ne plus avoir à chercher dans vos e-mails.
<div class="card master-card mb-4">
<div class="card-body">
<div class="row">
<div class="col-md-7">
<h5 class="fw-bold">Le Système de Listes et Étiquettes</h5>
<ul>
<li><b>Étiquettes sur mesure</b> : Renommez des lieux ("Entrée cachée camping", "Appart de Julie") pour les retrouver via l'assistant vocal.</li>
<li><b>Convention de nommage</b> : Nommez vos listes par <code>[Ville] + [Catégorie]</code> (ex: <i>Montréal - Restaurants</i>).</li>
<li><b>Notes contextuelles</b> : Ajoutez TOUJOURS une note (qui a recommandé ce lieu ? Pourquoi l'avoir enregistré ?).</li>
<li><b>Synchronisation Réservations</b> : Tapez "mes réservations" dans la barre de recherche pour voir vos vols, hôtels et voitures de location issus de Gmail.</li>
</ul>
</div>
<div class="col-md-5 bg-light p-3 rounded-3">
<h6 class="fw-bold"><i class="bi bi-clock-history me-2"></i>Voyage dans le temps</h6>
<p class="small">Sur ordinateur (et mobile pour certains lieux), accédez à l'historique <b>Street View</b> via l'icône horloge. Comparez l'évolution d'un quartier ou d'un hôtel sur les 10 dernières années.</p>
</div>
</div>
</div>
</div>

---
### 🚗 Chapitre 3 : Sur la Route et Logistique
Sécurité, économies et sérénité pendant vos déplacements.
<div class="row g-4">
<div class="col-md-6">
<div class="card h-100 master-card">
<div class="card-body">
<h5 class="fw-bold"><i class="bi bi-mic-fill text-primary me-2"></i>"OK Google" en conduite</h5>
<div class="cmd-box mb-3">
"Trouve des stations-service sur mon trajet"<br>
"Évite les péages et les autoroutes"<br>
"Quelle est ma prochaine étape ?"<br>
"Où est la pharmacie la plus proche ?"
</div>
<p class="small text-muted">L'assistant vous indiquera même le <b>prix des carburants</b> en temps réel.</p>
</div>
</div>
</div>
<div class="col-md-6">
<div class="card h-100 master-card">
<div class="card-body">
<h5 class="fw-bold"><i class="bi bi-p-square text-primary me-2"></i>Maîtrise du Stationnement</h5>
<ul>
<li><b>Enregistrer sa place</b> : Touchez le point bleu et "Enregistrer le stationnement". Ajoutez le niveau (P2) ou une photo.</li>
<li><b>Disponibilité</b> : Repérez l'icône [P] lors de vos recherches. Google indique s'il est <i>Limité</i>, <i>Moyen</i> ou <i>Facile</i>.</li>
<li><b>Rappel Parcmètre</b> : Définissez une alerte de fin de temps directement dans Maps.</li>
</ul>
</div>
</div>
</div>
</div>

---
### 🛠️ Chapitre 4 : Techniques d'Expert pour Explorateur
<div class="card border-0 shadow-sm p-4 bg-light">
<div class="row align-items-center">
<div class="col-md-8">
<h5 class="fw-bold">Multi-arrêts et Recherche contextuelle</h5>
<ul>
<li><b>Ajouter des arrêts</b> : Utilisez le menu [⋮] > "Ajouter un arrêt" pour vos trajets A -> Café -> B.</li>
<li><b>Recherche sur l'itinéraire</b> : Pendant la navigation, cliquez sur la loupe pour trouver des services sans quitter votre trajet.</li>
<li><b>Trajets économes</b> : Activez "Préférer les itinéraires économes en carburant" dans les réglages de navigation selon votre type de moteur (essence, diesel, électrique).</li>
<li><b>Live View (AR)</b> : Pour les piétons, utilisez la caméra pour voir des flèches virtuelles s'afficher sur les trottoirs.</li>
</ul>
</div>
</div>
</div>

---
### 🛡️ Chapitre 5 : Sécurité, Partage et Vie Privée
<div class="row g-4">
<div class="col-md-6">
<div class="card h-100 master-card border-warning">
<div class="card-body">
<h5 class="fw-bold">Sécurité du Groupe</h5>
<ul>
<li><b>Partage de position</b> : Utile pour les caravanes de VR. Partagez votre position en temps réel de 1h à 3 jours.</li>
<li><b>Alertes d'arrivée</b> : Configurez une notification pour être prévenu quand un ami arrive au restaurant ou au camping.</li>
<li><b>Plan B Hors-ligne</b> : Pour MyMaps, ouvrez la carte en Wi-Fi et <b>ne fermez jamais l'appli</b> pour garder le cache actif en zone blanche.</li>
</ul>
</div>
</div>
</div>
<div class="col-md-6">
<div class="card h-100 master-card">
<div class="card-body">
<h5 class="fw-bold">Vie Privée</h5>
<ul>
<li><b>Effacer l'historique</b> : Allez dans "Vos données dans Maps" pour supprimer vos trajets.</li>
<li><b>Suppression auto</b> : Configurez Google pour effacer vos données tous les 3, 18 ou 36 mois automatiquement.</li>
<li><b>Navigation privée</b> : Activez le mode incognito pour ne pas enregistrer vos recherches de lieux sensibles.</li>
</ul>
</div>
</div>
</div>
</div>

---
<div class="alert alert-success border-0 shadow-sm rounded-4 p-4 mt-5 text-center">
<h5 class="alert-heading fw-bold mb-3"><i class="bi bi-trophy-fill me-2"></i> Mission Finale</h5>
<p class="mb-0">Testez le <b>Zoom à un doigt</b> et lancez une navigation en maintenant le bouton <b>Itinéraire</b> enfoncé. Si vous maîtrisez ces deux gestes, vous avez déjà gagné des heures de manipulation fastidieuse sur l'année !</p>
</div>

---

## Ressource — 2.2 google maps terrain listes commandes

## 📍 Pourquoi cette section est utile
Google Maps ne sert pas seulement à lancer un itinéraire. Bien utilisé, il devient un assistant de terrain pour mémoriser des lieux, retrouver sa voiture, explorer une zone, garder des repères personnels et interagir sans quitter la route des yeux.

Cette section complète la masterclass Google Maps avec des usages très pratiques à adopter au quotidien pendant un voyage.

---

## 🎯 Objectifs de la section
À la fin de cette section, vous serez capable de :
- enregistrer des lieux dans des listes vraiment exploitables ;
- ajouter des étiquettes claires pour retrouver vos repères plus vite ;
- mémoriser et retrouver votre stationnement ;
- utiliser les commandes vocales utiles en déplacement ;
- exploiter l'historique et Street View pour mieux préparer un lieu.

---

## 🗂️ 1. Enregistrer les bons lieux dans les bonnes listes
L'erreur classique consiste à enregistrer des dizaines de lieux sans logique. Quelques semaines plus tard, la carte devient illisible.

Utilisez plutôt une méthode simple :
- une liste par ville ou région ;
- une catégorie claire par type d'usage ;
- une note systématique sur chaque lieu important.

### Exemples de conventions de nommage
- `Lisbonne - Restaurants`
- `Gaspesie - Campings`
- `Japon 2026 - Incontournables`
- `Valence - Cafes travail`

### Ce qu'il faut noter dans chaque lieu
- pourquoi vous l'avez enregistré ;
- qui vous l'a recommandé ;
- une info à ne pas oublier ;
- un détail concret sur le terrain.

Exemples :
- `Bon pour coucher de soleil`
- `Conseillé par Marc pour brunch`
- `Parking difficile apres 18 h`
- `Ideal si pluie`

Sans note, votre futur vous verra une épingle sans se souvenir de sa valeur.

---

## 🏷️ 2. Utiliser les étiquettes pour vos repères personnels
Les étiquettes servent à renommer un lieu avec votre propre logique. C'est très utile pour les endroits que vous devez retrouver rapidement.

Exemples d'étiquettes efficaces :
- `Appartement Julie`
- `Entree camping nord`
- `Stationnement VR`
- `Bureau visa`

### Quand utiliser une étiquette
- pour un lieu que vous revisitez souvent ;
- pour un lieu dont le nom officiel est peu clair ;
- pour un lieu stratégique à retrouver rapidement ;
- pour un repère logistique important pendant un voyage.

---

## 🚗 3. Enregistrer son stationnement
C'est une fonction simple, mais très utile dans les grandes villes, les parkings complexes, les centres commerciaux ou les zones touristiques.

### Comment faire
1. Touchez le point bleu de votre position.
2. Choisissez **Enregistrer le stationnement**.
3. Ajoutez si besoin :
   - une photo ;
   - un niveau ;
   - une zone ;
   - un rappel de parcmètre.

### Cas d'usage concrets
- parking souterrain avec plusieurs niveaux ;
- ville inconnue avec rues semblables ;
- long arrêt pendant une excursion ;
- location de voiture dans une zone dense.

---

## 🅿️ 4. Vérifier la difficulté de stationnement
Google Maps peut parfois afficher une indication de disponibilité du stationnement autour d'une destination.

Cela vous aide à anticiper :
- un délai supplémentaire ;
- un besoin de marcher davantage ;
- l'intérêt de choisir un autre mode de transport ;
- la nécessité de viser un horaire moins chargé.

Quand cette inguide apparaît, utilisez-la comme signal logistique, pas comme garantie.

---

## 🎙️ 5. Commander Google Maps à la voix
Pendant la conduite, la voix est souvent l'interface la plus sûre.

Exemples de commandes utiles :
- `Quelle est ma prochaine étape ?`
- `Comment est la circulation ?`
- `Trouve des stations-service`
- `Trouve un supermarché`
- `Où est la pharmacie la plus proche ?`
- `Évite les péages`
- `Évite les autoroutes`
- `Arrête la navigation`

### Bon réflexe
Préparez 4 ou 5 commandes que vous utiliserez vraiment. L'objectif n'est pas d'en connaître 50, mais d'automatiser celles qui vous évitent de manipuler l'écran.

---

## 📱 6. Gagner du temps avec quelques gestes clés
Voici les gestes les plus rentables sur mobile :
- zoom à un doigt : double-tapez puis glissez ;
- rotation de carte avec deux doigts ;
- vue inclinée avec deux doigts vers le haut ;
- appui prolongé sur **Itinéraire** pour lancer plus vite la navigation ;
- changement de l'icône du véhicule en touchant votre position durant la navigation.

Ces détails paraissent mineurs, mais ils rendent l'usage quotidien beaucoup plus fluide.

---

## 🕘 7. Exploiter l'historique et Street View
Google Maps peut aussi vous aider avant ou après le déplacement.

### Historique de localisation
Si vous l'activez, il peut servir à :
- revoir un déplacement ;
- retrouver un lieu visité ;
- reconstituer un parcontenu ;
- documenter un souvenir ou un incident.

### Street View historique sur ordinateur
Cette fonction permet de voir comment un lieu a évolué dans le temps. Elle est utile pour :
- vérifier l'environnement d'un hébergement ;
- observer un quartier avant arrivée ;
- estimer l'état d'un accès ou d'un stationnement ;
- comparer plusieurs années d'images.

Important : l'historique de localisation est utile, mais il touche à la vie privée. Il faut le gérer volontairement.

---

## 🔐 8. Gérer sa vie privée intelligemment
Si vous utilisez beaucoup Google Maps, prenez 5 minutes pour vérifier vos réglages.

À contrôler :
- historique des positions activé ou non ;
- suppression automatique des données ;
- période de conservation ;
- suppression manuelle si nécessaire.

L'objectif n'est pas de tout désactiver automatiquement. L'objectif est de choisir consciemment ce que vous acceptez de conserver.

---

## 🧠 Bonnes pratiques d'explorateur
- Gardez peu de listes, mais bien nommées.
- Ajoutez des notes courtes et concrètes.
- Utilisez les étiquettes pour les lieux personnels ou ambigus.
- Testez le stationnement enregistré avant un vrai voyage.
- Utilisez la voix pour les actions en route.
- Vérifiez sur ordinateur les lieux stratégiques avec Street View avant départ.

---

## 💻 Exercices à faire sur votre ordinateur
### Exercice 1 : préparer vos listes de voyage
1. Créez 3 listes Google Maps liées à un prochain voyage.
2. Donnez-leur une convention de nommage cohérente.
3. Ajoutez au moins 5 lieux dans chaque liste.
4. Ajoutez une note à au moins 5 lieux au total.

### Exercice 2 : vérifier un lieu avec Street View
1. Choisissez un hébergement ou un point logistique important.
2. Ouvrez Street View sur ordinateur.
3. Vérifiez l'accès, l'environnement et un repère visuel utile.
4. Notez dans votre liste ce que vous avez observé.

### Exercice 3 : organiser vos repères personnels
1. Identifiez 3 lieux qui gagneraient à être renommés.
2. Ajoutez une étiquette claire à chacun.
3. Vérifiez ensuite que vous pouvez les retrouver facilement par ce nouveau nom.

---

## 📲 Exercices à faire sur votre portable
### Exercice 1 : test de stationnement
1. Ouvrez Google Maps.
2. Enregistrez votre stationnement à un endroit réel.
3. Ajoutez un détail utile : photo, étage ou note.
4. Revenez le retrouver avec Google Maps un peu plus tard.

### Exercice 2 : commandes vocales
1. Lancez un itinéraire court.
2. Testez au moins 3 commandes vocales.
3. Vérifiez lesquelles sont les plus utiles pour vous.

### Exercice 3 : lecture rapide de vos lieux enregistrés
1. Ouvrez une de vos listes sur mobile.
2. Vérifiez si les noms et notes sont compréhensibles immédiatement.
3. Corrigez ce qui est flou ou trop long.

---

## ⭐ Exercice bonus : mini protocole avant départ
Avant un vrai trajet :
1. Enregistrez votre premier hébergement.
2. Enregistrez une pharmacie et une station-service proches.
3. Vérifiez Street View pour l'arrivée.
4. Préparez 3 commandes vocales que vous utiliserez sur la route.

Ce petit protocole améliore fortement votre confort dès le premier jour.

---

## ☑️ Action immédiate
Créez une liste Google Maps pour votre prochain déplacement, ajoutez 5 lieux avec notes, puis testez sur votre téléphone l'enregistrement de stationnement et une commande vocale pendant un trajet court.

---

## Ressource — 2.3 navigation offline tools

> **Objectif de la section :** À la fin de ce chapitre, vous saurez préparer vos cartes en amont et utiliser les meilleurs outils de navigation hors-ligne pour explorer les régions les plus isolées du globe en toute sécurité.

---

## 1. Pourquoi la Navigation Hors-Ligne est vitale ?
Compter uniquement sur la 4G est l'erreur n°1 du voyageur. En montagne, dans le désert ou en plein océan, votre téléphone perdra le réseau. Sans cartes pré-chargées, vous perdez votre orientation et votre sécurité.

## 2. Votre Arsenal "Zéro Réseau" (Le Match)

Selon votre type de voyage, choisissez l'outil adapté :

*   🥇 **Le Meilleur pour le Voyageur Urbain :** [Maps.me](https://maps.me) ou [Organic Maps](https://organicmaps.app). Basé sur OpenStreetMap, c'est gratuit, ultra rapide et les points d'intérêt (restaurants, fontaines, gares) sont très précis même sans internet.
*   🥈 **L'Expert Outdoor & Randonnée :** [Gaia GPS](https://gaiagps.com), [AllTrails+](https://alltrails.com) ou [Komoot](https://www.komoot.com). Indispensable pour voir les courbes de niveau, les sentiers de randonnée et ne pas s'égarer en forêt ou en montagne.
*   🗺️ **Le Spécialiste des Cartes PDF Terrain :** [Avenza Maps](https://www.avenzamaps.com). Très utile si vous voulez emporter les cartes officielles d'un parc, une carte topo PDF ou un plan détaillé géoréférencé.
*   🥉 **La Solution de Secontenu (High-Tech) :** [Garmin](https://www.garmin.com) ou [TomTom](https://www.tomtom.com). Un GPS dédié est la seule garantie de ne jamais tomber en panne de batterie au mauvais moment.

## 3. Le Conseil de l'Expert : La "Règle de Trois"
Pour ne jamais être bloqué, appliquez ma méthode de sécurité :
1.  **L'Appli Principale :** (ex: Google Maps avec zone téléchargée).
2.  **L'Appli de Secontenu :** (ex: [Organic Maps](https://organicmaps.app) avec les cartes du pays déjà installées).
3.  **L'Option "Physique" :** Prenez une capture d'écran de votre itinéraire final ou gardez un PDF hors-ligne. C'est votre dernier rempart si votre téléphone surchauffe ou si l'appli plante.

### Cas particulier : parc national, réserve ou longue randonnée
Si votre destination fournit une **carte officielle PDF**, chargez-la aussi dans **Avenza Maps**. Cela vous donne une couche de sécurité supplémentaire, surtout quand les sentiers, zones d'accès ou points d'eau sont mieux représentés sur les cartes locales que sur les applis généralistes.

---

## 🛠️ Exercice Pratique du Chapitre
**Votre mission :** 
1. Téléchargez [Organic Maps](https://organicmaps.app) (c'est gratuit et sans pub).
2. Recherchez votre ville ou votre prochaine destination.
3. **Action :** Téléchargez la carte complète de cette région (comptez entre 50 et 200 Mo).
4. **Test :** Mettez votre téléphone en **Mode Avion** et essayez de chercher un restaurant à proximité sur l'appli.
5. **Réflexion :** Quel sentiment d'autonomie ressentez-vous en sachant que vous n'avez plus besoin d'internet pour trouver votre chemin ?

---

*Bravo ! Vous venez d'acquérir une compétence de survie moderne.*

---

## Ressource — 3.1 cartographie sig avanced

<style>
    .kml-link { background-color: #e9ecef; border-radius: 8px; padding: 15px; margin-bottom: 20px; border-left: 5px solid #28a745; }
    .exercise-box { border: 2px solid #ff851b; background-color: #fff9f2; padding: 25px; border-radius: 15px; margin-top: 30px; }
    .sig-badge { font-size: 0.75rem; background-color: #007bff; color: white; padding: 2px 8px; border-radius: 10px; font-weight: bold; margin-right: 5px; }
    .terminal-box { background-color: #1e1e1e; color: #d4d4d4; padding: 15px; border-radius: 8px; font-family: 'Courier New', Courier, monospace; margin-bottom: 20px; font-size: 0.9rem; }
</style>

## 🧠 Au-delà de Google Maps : Le monde du SIG
Pour l'Explorateur de niveau 3, une carte n'est pas juste une image avec des points. C'est un **Système d'Inguide Géographique (SIG)**. En important des couches de données professionnelles, vous pouvez voir ce que les touristes ignorent : les limites des parcs nationaux, les zones de bivouac autorisé ou la pente exacte d'une route de montagne.

---

### 📂 Sources de Données Spécialisées (KML/KMZ)
Voici des répertoires de fichiers que vous pouvez télécharger et importer directement dans **Google My Maps** ou **Google Earth**.

#### 🌍 International & Monde
-   **Patrimoine Mondial (UNESCO)** : [Fichier KMZ Officiel](https://whc.unesco.org/en/list/kmz) (Tous les sites classés).
-   **Protected Planet (WDPA)** : [Base mondiale des zones protégées](https://www.protectedplanet.net) (La source ultime pour tous les parcs nationaux du monde).

#### 🇨🇦 Canada & Québec
-   **Parcs Canada** : [Limites officielles (KML)](https://open.canada.ca/data/en/dataset/9e15088b-dbb8-4ec6-9a31-c00fe9d6dd31) (Essentiel pour la réglementation fédérale).
-   **Données Québec (SIT)** : [Campings certifiés](https://www.donneesquebec.ca/recherche/dataset/etablissements-d-hebergement-touristique-campings).
-   **Terres Publiques Québec** : [Carte du domaine de l'État](https://terrespubliquesquebec.com/) (Boondocking légal).

#### 🇺🇸 États-Unis (USA)
-   **BLM (Bureau of Land Management)** : [Surface Management Agency](https://gbp-blm-egis.hub.arcgis.com/) (Camping sauvage gratuit).
-   **US Forest Service** : [National Forest Boundaries](https://data-usfs.hub.arcgis.com/).
-   **USGS PAD-US** : [Protected Areas Database](https://www.usgs.gov/programs/gap-analysis-project/science/pad-us-data-download) (KMZ par État).

#### 🇪🇺 Europe
-   **Natura 2000 (EEA)** : [European Protected Sites](https://hub.arcgis.com/datasets/eea::european-protected-sites-1) (La plus grande base de données de conservation en Europe, exportable en KML).
-   **France (INPN)** : [Inventaire du Patrimoine Naturel](https://inpn.mnhn.fr/telechargement/cartes-et-inguide-geographique) (Couches SIG pour les parcs nationaux et régionaux français).

#### 🌏 Asie
-   **Japon (MOE)** : [Biodiversity Center GIS](https://www.biodic.go.jp/english/kankyo/kml_en.html) (Données KML précises sur les 35 parcs nationaux japonais).
-   **Thaïlande** : [Thailand Protected Areas](https://thailand.opendevelopmentmekong.net/dataset/?id=thailand-protected-areas) (Limites des parcs nationaux et sanctuaires).

#### 🇦🇺 Océanie
-   **Australie (CAPAD)** : [Digital Atlas - Protected Areas](https://digital.atlas.gov.au/datasets/dccew::collaborative-australian-protected-areas-database-capad-terrestrial/about) (Export KML/KMZ pour tout le territoire australien).
-   **Nouvelle-Zélande (DOC)** : [DOC Open Spatial Data](https://opendata.doc.govt.nz/datasets/doc-campsites/explore) (KML officiel pour les campings, refuges et sentiers du DOC).

---

### ⚙️ Pipeline de Conversion Expert (KMZ -> KML -> CSV)
Parfois, les fichiers fournis par les gouvernements sont en format **KMZ** ou **KML** alors que vous en avez besoin en **CSV** pour un traitement de masse ou pour Google Sheets. Voici la méthode éprouvée par TWAI guide.

#### 1. Conversion KMZ vers KML
Le KMZ n'est qu'un fichier ZIP contenant un `doc.kml`.
- **Action** : Renommez votre fichier `.kmz` en `.zip`, puis extrayez-le pour obtenir le fichier `.kml`.

#### 2. Extraction IA vers CSV (via Gemini-CLI)
Pour transformer la structure XML complexe du KML en un tableau CSV propre, utilisez l'IA. 

**Le Prompt de Conversion :**
> "Analyse ce fichier KML et extrais tous les points d'intérêt en format CSV (séparateur virgule).
> **Contraintes de compatibilité et de nettoyage strictes :**
> 1. Les titres de colonnes doivent être UNIQUES et faire moins de 64 caractères.
> 2. Utilisez uniquement des LETTRES pour les noms de colonnes (pas de chiffres ni caractères spéciaux).
> 3. Supprimez tout espace de tête (leading spaces) dans les colonnes Latitude et Longitude.
> 4. Supprimez impérativement les retours chariots de type ^M (Carriage Returns).
> 5. Format de sortie : CSV pur sans texte superflu.
> Colonnes attendues : Nom, Description, Latitude, Longitude...."

**La Commande :**
<div class="terminal-box">
<code>gemini ask --system "Ton_Prompt_Ci_Dessus" --file mon_fichier.kml > resultats.csv</code>
</div>

---

### 🛠️ Analyse de Relief pour les Gros VR
Si vous conduisez un VR de 30 pieds ou plus, la topographie est votre ennemie.
1.  **Google Earth Pro** (PC/Mac) : Utilisez l'outil "Profil de dénivellation" (clic droit sur un trajet) pour voir la pente exacte.
2.  **Fatmap / Komoot** : Visualisez le terrain en 3D haute résolution avant de vous engager.

---

<div class="exercise-box">
    <h4 class="fw-bold text-orange"><i class="bi bi-geo-alt-fill me-2"></i> EXERCICE INTERACTIF : Enrichir sa Carte</h4>
    <p class="lead">Objectif : Importer les trésors nationaux sur votre itinéraire personnel.</p>
    <ol class="mt-3">
        <li><b>Téléchargement</b> : Téléchargez le fichier KML/KMZ de votre choix (ex: <a href="https://whc.unesco.org/en/list/kmz" target="_blank">UNESCO</a> ou <a href="https://opendata.doc.govt.nz/datasets/doc-campsites/explore" target="_blank">Nouvelle-Zélande DOC</a>).</li>
        <li><b>Préparation</b> : Ouvrez votre carte dans <a href="https://www.google.com/maps/d/" target="_blank">Google My Maps</a>.</li>
        <li><b>Importation</b> : Cliquez sur "Ajouter un calque", puis sur <b>Importer</b>.</li>
        <li><b>Action</b> : Déposez votre fichier téléchargé.</li>
        <li><b>Analyse</b> : Voyez-vous des sites d'intérêt ou des limites de parcs que vous ignoriez sur votre trajet actuel ?</li>
    </ol>
</div>

---

### 💡 Le Conseil de l'Expert
Ne surchargez pas votre carte principale. Créez des cartes "Sources" (ex: "Base de données Europe") et utilisez-les uniquement pour la consultation lors de la planification. Une carte dépassant les 2000 points ralentira considérablement votre téléphone en mode hors-ligne.

---

<div class="alert alert-warning border-0 shadow-sm rounded-4 p-4 mt-5">
    <div class="d-flex align-items-center">
        <div class="flex-shrink-0"><i class="bi bi-shield-lock-fill text-dark display-6 me-4"></i></div>
        <div>
            <h5 class="alert-heading mb-1 fw-bold">Validation Légale</h5>
            <p class="mb-0">Les fichiers KML gouvernementaux sont la seule preuve fiable en cas de litige sur un lieu de bivouac. Ayez toujours la couche officielle de la région visitée active si vous pratiquez le camping sauvage.</p>
        </div>
    </div>
</div>

---

# Pilier 6 — Communication

## Ressource — 1.1 guide communication index

<p align="center">
  <img src="/public/img/telecom.webp" alt="Chapitre 6 Communication" style="width:100%; border-radius: 15px; box-shadow: 0 4px 15px rgba(0,0,0,0.1);" />
</p>

Ce chapitre vous aide à rester en contact avec vos proches et vos outils de travail, tout en protégeant votre vie privée numérique pendant le voyage.

## 🎯 Objectif pédagogique

À la fin de ce chapitre, vous serez capable de :

- Choisir une solution de connexion proportionnée à vos besoins.
- Préparer une solution de secontenu pour les zones sans réseau.
- Sécuriser vos comptes et vos appareils sur les réseaux publics.
- Réagir rapidement en cas de perte ou de vol du téléphone.

## 🧭 Comment fonctionne ce chapitre

Vous construisez un plan de connectivité en trois niveaux : une solution principale, une solution de secontenu et un protocole d'urgence. Il doit fonctionner sans vous enfermer dans une dépendance coûteuse ou risquée aux réseaux publics.

## Les étapes du chapitre

### 1. Mesurer vos besoins

Évaluez la quantité de données, les appels, le travail à distance et les usages indispensables. Une solution simple est souvent plus fiable qu'un ensemble d'options rarement utilisées.

### 2. Choisir la connexion principale

Comparez les options disponibles selon votre pays, la durée du séjour, la couverture et le coût. Préparez-la avant le départ afin de pouvoir communiquer dès l'arrivée.

### 3. Prévoir l'absence de réseau

Gardez les inguides essentielles disponibles hors ligne et décidez de la manière dont vos proches sauront que tout va bien. Pour les zones isolées, prévoyez un moyen de signalement adapté.

### 4. Protéger vos accès

Utilisez des mots de passe uniques, l'authentification à deux facteurs et des mises à jour récentes. Sur un réseau public, limitez les opérations sensibles et vérifiez que votre appareil est protégé.

### 5. Préparer une réaction au vol ou à la perte

Activez la localisation, notez les numéros utiles et sachez comment bloquer rapidement une ligne ou un compte. Le bon moment pour préparer ce protocole est avant l'incident.

## 🛠️ Action immédiate

Écrivez votre plan de communication en une phrase : votre connexion principale, votre solution de secontenu et la personne à contacter en cas d'urgence.

## Pratiquer l’espagnol avant le départ

Pour préparer les échanges sur place, l’ensemble **Espagnol — les quatre profils IA** propose quatre façons de pratiquer : lecture et vocabulaire, écoute et répétition, conversation et grammaire. Les tutoriels montrent l’installation et la personnalisation avec vos propres préférences.

[Découvrir les quatre profils espagnols — 29 $ CA](https://www.twai.world/fr/home)

Cette offre se vend séparément de la guide Découverte. L’installation accompagnée de 30 minutes est proposée en option à 69 $ CA.

---

## Ressource — 1.2 telecom wifi

Si vous ne souhaitez pas acheter une carte SIM locale ou eSIM, utilisez les **réseaux Wi-Fi publics** disponibles dans les hôtels, cafés, restaurants, aéroports et attractions touristiques.

## Conseils pratiques 📝

- **Applications de localisation Wi-Fi** 📡  
  Trouvez des hotspots gratuits avec des apps comme :  
  - [WiFi Finder](https://apps.apple.com/us/app/wifi-finder-map/id946365975) (iOS) 🍏  
  - [WiFi Finder](https://play.google.com/store/apps/details?id=org.speedspot.wififinder) (Android) 🤖  
  - [Instabridge](https://instabridge.com/) 🌐  
  - [WiFi Map](https://www.wifimap.io/) 🗺️

- **Sécurité avant tout** 🔒  
  Évitez de saisir des inguides sensibles (banque, e-mails importants) sans protection, comme un [VPN]( /discover/blog?id=telecom-vpn).

## Applications recommandées pour Wi-Fi 📱💬

- [WhatsApp](https://www.whatsapp.com/) 💬  Messagerie et appels vocaux/vidéo via Wi-Fi.  
- [Skype](https://www.skype.com/) 📹  Appels vidéo et vocaux, y compris internationaux, via Wi-Fi.  
- [TextNow](https://www.textnow.com) ✉️📞  Textos et appels gratuits au Canada/USA via Wi-Fi, avec options internationales abordables.  
- [Facebook Messenger](https://www.messenger.com/) 💬  Messagerie instantanée, appels vocaux et vidéo via Wi-Fi.  
- [FaceTime](https://www.apple.com/facetime) 🍏📹  Appels vidéo pour utilisateurs Apple via Wi-Fi.  
- [Viber](https://www.viber.com/) 💬📹  Messagerie et appels vocaux/vidéo gratuits via Wi-Fi.

---

## Ressource — 1.3 airtag findmy

## Utilisateur
Meilleure AirTag pour le voyage

## Assistant
(Recommandations AirTag et accessoires...)

## Utilisateur
Portefeuille

## Assistant
(Sélection de trackers portefeuille...)

## Utilisateur
Pour iphone

## Assistant
(Trackers compatibles Apple Find My...)

## Utilisateur
Comment fonctionne les airtag

## Assistant
(Explication du fonctionnement des AirTag...)

## Utilisateur
Y a t’il différentes technologies

## Assistant
(Comparatif des technologies de localisation...)

## Utilisateur
Peut tu me trouver des tags sur Amazon.ca compatible avec find my au meilleure prix possible

## Assistant
(Listes de produits Amazon compatibles Find My...)

## Utilisateur
fait moi un tableau comparatif avec la technologie, prix, quantité, caractéristiques, lien amazon

## Assistant
(Tableau comparatif...)

## Utilisateur
oui

## Assistant
(Tableau portefeuille...)

## Utilisateur
ajouter l'inguide sur la batterie et l'autonomie dans le tableau

## Assistant
(Tableau mis à jour avec batterie et autonomie...)

---

## Ressource — 1.4 video conseils securite numerique

<div class="video-container mb-4">
  <div class="ratio ratio-16x9 shadow-sm rounded-4 overflow-hidden border bg-light">
    <iframe src="https://drive.google.com/file/d/1HgM7_tXuSNKprAmi7DuuYzNwu67gEWyK/preview" title="Sécurité numérique en voyage" loading="lazy" allow="autoplay; encrypted-media; fullscreen; picture-in-picture" allowfullscreen></iframe>
  </div>
</div>

## 🎙️ Script

🎵 (Musique calme, visuel de Wi-Fi public, téléphone, VPN)

« Tu es dans un café à l’étranger. Tu te connectes au Wi-Fi.  
Mais… qui d’autre est connecté?

Voici 3 réflexes simples pour protéger tes données en voyage :

1. Utilise toujours un VPN sur les réseaux publics.  
2. Active la double authentification sur tes comptes sensibles.  
3. Sauvegarde tes documents importants dans un cloud sécurisé.

Et surtout, garde une copie hors ligne de l’essentiel.  
Parce qu’un téléphone perdu, ce n’est pas la fin du monde…  
si tu es bien préparé(e). »

🖥️ Texte à l’écran :  
« Astuce : ProtonVPN, NordVPN, ou Surfshark sont de bonnes options gratuites ou abordables »

---

## Ressource — 1.5 formulaire carnet urgence

<style>
    .btn-circle { width: 50px; height: 50px; padding: 10px 16px; border-radius: 25px; font-size: 18px; line-height: 1.33; }
    .btn-orange { background-color: #ff851b; border-color: #ff851b; color: white; }
    .btn-orange:hover { background-color: #e67716; border-color: #e67716; color: white; }
    .fab-container { position: fixed; bottom: 80px; right: 40px; z-index: 1000; }
    #contacts-table-container { margin-bottom: 30px; background: #fff; padding: 15px; border-radius: 8px; box-shadow: 0 2px 4px rgba(0,0,0,0.05); }
    .info-section { background: #f8f9fa; border-radius: 12px; padding: 20px; margin-bottom: 20px; border-left: 5px solid #007bff; }

    @media print {
        /* Masquer tous les éléments d'interface */
        .nav-header, .progress-section, .training-sidebar, .sidebar, .fab-container, 
        .btn, hr, .alert, .video-container, .instruction-text, blockquote, 
        img, .d-print-none, #multi-contact-form {
            display: none !important;
        }
        
        body { background: white !important; color: black !important; padding: 0 !important; margin: 0 !important; }
        .container { width: 100% !important; max-width: 100% !important; margin: 0 !important; padding: 0 !important; }
        main { margin-left: 0 !important; padding: 0 !important; width: 100% !important; }
        .training-content { padding: 0 !important; margin: 0 !important; }
        
        /* Mise en page pour l'impression */
        .info-section-print { border: 1px solid #ddd !important; background: white !important; break-inside: avoid; margin-bottom: 20px !important; padding: 15px !important; border-radius: 8px; }
        #contacts-table-container { box-shadow: none !important; border: 1px solid #ddd !important; margin-bottom: 30px; }
        .table td, .table th { padding: 8px !important; border: 1px solid #eee !important; font-size: 10pt; }
        
        h1 { font-size: 24pt !important; margin-bottom: 20px !important; }
        h3 { font-size: 18pt !important; border-bottom: 2px solid #333 !important; padding-bottom: 5px !important; }
        .print-label { font-weight: bold; width: 220px; display: inline-block; color: #333; }
        .print-value { color: #000; font-family: monospace; }
        ul { list-style: none; padding-left: 0; }
        li { margin-bottom: 10px; border-bottom: 1px solid #f0f0f0; padding-bottom: 5px; font-size: 12pt; }
    }
</style>

> **Action Requise :** Ce carnet est votre "Fiche de Survie". L’IA utilisera ces données pour générer une note d'urgence synthétique (en français et dans la langue locale) que vous pourrez imprimer ou mettre en fond d'écran.

### 👥 1. Contacts de confiance (Proches)
<div id="contacts-table-container">
    <table class="table table-striped" id="contacts-table">
        <thead>
            <tr>
                <th>Nom Complet</th>
                <th>Relation</th>
                <th>Téléphone</th>
                <th>Courriel</th>
                <th class="d-print-none">Actions</th>
            </tr>
        </thead>
        <tbody>
            <tr><td colspan="5" class="text-center">Chargement des contacts...</td></tr>
        </tbody>
    </table>
</div>

---

<div class="d-none d-print-block">
    <div class="info-section-print">
        <h3>🛡️ Assurance et Urgences Locales</h3>
        <ul>
            <li><span class="print-label">Assurance Voyage :</span> <span class="print-value" id="print-assurance_police"></span></li>
            <li><span class="print-label">Tel. Assistance 24/7 :</span> <span class="print-value" id="print-assurance_tel"></span></li>
            <li><span class="print-label">Ambassade / Consulat :</span> <span class="print-value" id="print-ambassade_adresse"></span></li>
            <li><span class="print-label">Urgences Locales :</span> <span class="print-value" id="print-tel_urgences_locales"></span></li>
        </ul>
    </div>
    <div class="info-section-print">
        <h3>🏠 Hébergement / Contact Local</h3>
        <ul>
            <li><span class="print-label">Adresse :</span> <span class="print-value" id="print-local_stay_address"></span></li>
            <li><span class="print-label">Téléphone :</span> <span class="print-value" id="print-local_stay_tel"></span></li>
        </ul>
    </div>
</div>

<div class="d-print-none">

<h3> 📝 Gérer vos contacts et numéros locaux</h3>

</div>

<form id="multi-contact-form" class="well">
    <input type="hidden" name="id" id="contact-id">
    <div class="info-section d-print-none">
        <h5><i class="bi bi-person-plus me-2"></i>Ajouter un contact (Famille/Amis)</h5>
        <div class="row">
            <div class="col-md-6 mb-3">
                <label>Nom complet</label>
                <input type="text" name="nom" id="field-nom" class="form-control" placeholder="Ex: Marie Dupont">
            </div>
            <div class="col-md-6 mb-3">
                <label>Relation</label>
                <input type="text" name="relation" id="field-relation" class="form-control" placeholder="Ex: Épouse, Frère...">
            </div>
            <div class="col-md-6 mb-3 no-ai-container">
                <span class="no-ai-badge"><i class="bi bi-shield-lock-fill me-1"></i>HORS-IA</span>
                <label>Téléphone (avec +1, +33...)</label>
                <input type="tel" name="tel" id="field-tel" class="form-control no-ai" placeholder="+1 514 XXX-XXXX">
            </div>
            <div class="col-md-6 mb-3 no-ai-container">
                <span class="no-ai-badge"><i class="bi bi-shield-lock-fill me-1"></i>HORS-IA</span>
                <label>Courriel</label>
                <input type="email" name="email" id="field-email" class="form-control no-ai">
            </div>
        </div>
        <button type="button" class="btn btn-primary" onclick="saveCurrentContact()">💾 Enregistrer ce contact</button>
    </div>
    <hr class="d-print-none">
    <div class="row">
        <div class="col-md-6">
            <div class="info-section" style="border-left-color: #28a745;">
                <h5><i class="bi bi-shield-lock me-2"></i>Assurance Voyage</h5>
                <div class="mb-3 no-ai-container">
                    <span class="no-ai-badge"><i class="bi bi-shield-lock-fill me-1"></i>HORS-IA</span>
                    <label>Nom du fournisseur & N° Police</label>
                    <input type="text" name="assurance_police" id="field-assurance_police" class="form-control no-ai" placeholder="Ex: Croix Bleue #12345" oninput="syncPrint(this)">
                </div>
                <div class="mb-3 no-ai-container">
                    <span class="no-ai-badge"><i class="bi bi-shield-lock-fill me-1"></i>HORS-IA</span>
                    <label>Tel. Assistance 24/7</label>
                    <input type="tel" name="assurance_tel" id="field-assurance_tel" class="form-control no-ai" placeholder="+1 800 XXX XXXX" oninput="syncPrint(this)">
                </div>
            </div>
        </div>
        <div class="col-md-6">
            <div class="info-section" style="border-left-color: #dc3545;">
                <h5><i class="bi bi-geo-alt me-2"></i>Urgences Locales (Destination)</h5>
                <div class="mb-3">
                    <label>Ambassade / Consulat</label>
                    <input type="text" name="ambassade_adresse" id="field-ambassade_adresse" class="form-control" placeholder="Adresse et Tel" oninput="syncPrint(this)">
                </div>
                <div class="mb-3">
                    <label>Urgences Médicales / Police</label>
                    <input type="text" name="tel_urgences_locales" id="field-tel_urgences_locales" class="form-control" placeholder="Ex: 911 ou 112" oninput="syncPrint(this)">
                </div>
            </div>
        </div>
    </div>
    <div class="info-section" style="border-left-color: #ff851b;">
        <h5><i class="bi bi-house-check me-2"></i>Hébergement / Contact Local actuel</h5>
        <div class="row">
            <div class="col-md-8 no-ai-container">
                <span class="no-ai-badge"><i class="bi bi-shield-lock-fill me-1"></i>HORS-IA</span>
                <label>Nom de l'hôtel ou de l'hôte & Adresse</label>
                <input type="text" name="local_stay_address" id="field-local_stay_address" class="form-control no-ai" oninput="syncPrint(this)">
            </div>
            <div class="col-md-4 no-ai-container">
                <span class="no-ai-badge"><i class="bi bi-shield-lock-fill me-1"></i>HORS-IA</span>
                <label>Téléphone Local</label>
                <input type="tel" name="local_stay_tel" id="field-local_stay_tel" class="form-control no-ai" oninput="syncPrint(this)">
            </div>
        </div>
    </div>
    <div class="text-center mt-4 d-print-none">
        <button type="button" class="btn btn-success btn-lg px-5 shadow me-2" onclick="saveAllGlobal()">
            <i class="bi bi-cloud-upload me-2"></i>SAUVEGARDER
        </button>
        <button type="button" class="btn btn-dark btn-lg px-5 shadow" onclick="window.print()">
            <i class="bi bi-printer me-2"></i>IMPRIMER MA FICHE (PDF)
        </button>
    </div>
</form>


<script>
    let contacts = [];
    const formID = "carnet-urgence";

    document.addEventListener("DOMContentLoaded", loadData);

    function syncPrint(input) {
        const printId = input.id.replace('field-', 'print-');
        const printElem = document.getElementById(printId);
        if (printElem) printElem.innerText = input.value || '---';
    }

    async function loadData() {
        try {
            const res = await fetch(`/fr/home/api/get-form/${formID}`);
            const response = await res.json();
            const data = response.data;

            if (data) {
                contacts = data.contacts || [];
                const fields = [
                    'assurance_police', 'assurance_tel', 'ambassade_adresse', 
                    'tel_urgences_locales', 'local_stay_address', 'local_stay_tel'
                ];
                fields.forEach(f => {
                    const input = document.getElementById('field-' + f);
                    if(data[f] && input) {
                        input.value = data[f];
                        syncPrint(input);
                    }
                });
            }
            renderTable();
        } catch (err) { console.error("Erreur chargement:", err); }
    }

    function renderTable() {
        const tbody = document.querySelector("#contacts-table tbody");
        if (contacts.length === 0) {
            tbody.innerHTML = '<tr><td colspan="5" class="text-center">Aucun contact enregistré.</td></tr>';
            return;
        }
        tbody.innerHTML = "";
        contacts.forEach(c => {
            const tr = document.createElement("tr");
            tr.innerHTML = `
                <td>${c.nom || '-'}</td>
                <td>${c.relation || '-'}</td>
                <td>${c.tel || '-'}</td>
                <td>${c.email || '-'}</td>
                <td class="d-print-none">
                    <button type="button" onclick="editContact('${c.id}')" class="btn btn-xs btn-default">Mod.</button>
                    <button type="button" onclick="deleteContact('${c.id}')" class="btn btn-xs btn-danger">X</button>
                </td>
            `;
            tbody.appendChild(tr);
        });
    }

    async function saveCurrentContact() {
        const id = document.getElementById("contact-id").value;
        const contactData = {
            id: id || "c-" + Date.now(),
            nom: document.getElementById("field-nom").value,
            relation: document.getElementById("field-relation").value,
            tel: document.getElementById("field-tel").value,
            email: document.getElementById("field-email").value
        };
        if(!contactData.nom) return alert("Nom requis");

        if (id) {
            const idx = contacts.findIndex(c => c.id === id);
            if (idx !== -1) contacts[idx] = contactData;
        } else {
            contacts.push(contactData);
        }
        await saveAllGlobal();
        document.getElementById("contact-id").value = "";
        document.getElementById("field-nom").value = "";
        document.getElementById("field-relation").value = "";
        document.getElementById("field-tel").value = "";
        document.getElementById("field-email").value = "";
    }

    function editContact(id) {
        const c = contacts.find(item => item.id === id);
        if (!c) return;
        document.getElementById("contact-id").value = c.id;
        document.getElementById("field-nom").value = c.nom;
        document.getElementById("field-relation").value = c.relation;
        document.getElementById("field-tel").value = c.tel;
        document.getElementById("field-email").value = c.email;
        document.getElementById("field-nom").focus();
    }

    async function deleteContact(id) {
        if (!confirm("Supprimer ?")) return;
        contacts = contacts.filter(c => c.id !== id);
        await saveAllGlobal();
    }

    async function saveAllGlobal() {
        const data = {
            contacts: contacts,
            assurance_police: document.getElementById("field-assurance_police").value,
            assurance_tel: document.getElementById("field-assurance_tel").value,
            ambassade_adresse: document.getElementById("field-ambassade_adresse").value,
            tel_urgences_locales: document.getElementById("field-tel_urgences_locales").value,
            local_stay_address: document.getElementById("field-local_stay_address").value,
            local_stay_tel: document.getElementById("field-local_stay_tel").value
        };

        try {
            await fetch("/fr/home/api/save-form", {
                method: "POST",
                headers: { "Content-Type": "application/json" },
                body: JSON.stringify({ formID: formID, data: data })
            });
            renderTable();
        } catch (err) { console.error("Save error:", err); }
    }
</script>

---

### 🎯 Utilité de ce formulaire
En centralisant ces données ici :
1.  **Rédaction IA :** L'Assistant peut rédiger pour vous une note d'urgence dans la langue du pays de destination.
2.  **Fiche Papier :** Ces inguides sont prêtes à être imprimées. **Règle d'or :** En voyage, le papier ne tombe jamais en panne de batterie.

---

## Ressource — 2.1 communication

# 📡 Chapitre Communication en voyage

## Objectif
Rester connecté, partager et sécuriser les inguides pendant le voyage.

## Formulaire : Communication
- Moyens utilisés :
  - [ ] Smartphone
  - [ ] Satellite
  - [ ] Wi-Fi public
  - [ ] VPN
  - [ ] eSIM / SIM locale
- Applications favorites :
  - [ ] Messagerie
  - [ ] Appels vocaux
  - [ ] Appels vidéo
  - [ ] Emails
- Partage d’itinéraire / carte :
  - [ ] Oui
  - [ ] Non
- Sécurité :
  - [ ] VPN
  - [ ] Backup cloud
  - [ ] Protection mot de passe

### Lien avec autres chapitres
- Google My Maps → partager itinéraire
- Documentation → stocker inguides

---

## Ressource — 2.2 pdf comparatif solution connection

## 🎯 Objectif
Choisir la meilleure solution pour rester connecté(e) selon ta destination, ton budget et ton style de voyage.

---

## 📊 Tableau comparatif

| Solution             | Connexion | Coût estimé | Avantages                          | Inconvénients                      | Idéal pour…                      |
|----------------------|-----------|-------------|-------------------------------------|------------------------------------|----------------------------------|
| Carte SIM locale     | 4G/5G     | $10–30      | Économique, rapide, adaptée au pays | Nécessite déverrouillage du téléphone | Séjours longs dans un seul pays |
| eSIM (ex. Airalo)    | 4G/5G     | $5–50       | Activation rapide, pas de carte physique | Pas compatible avec tous les téléphones | Voyageurs numériques, multi-pays |
| Forfait international| 3G/4G     | $10–15/jour | Facile, pas de changement de carte  | Très coûteux à long terme          | Voyages courts, urgences         |
| Wi-Fi public         | Variable  | Gratuit     | Accessible dans cafés, hôtels, aéroports | Peu sécurisé, instable             | Usage ponctuel, zones urbaines   |
| Pocket Wi-Fi         | 4G        | $5–10/jour  | Connexion partagée, stable          | Location, batterie, caution        | Familles, groupes, roadtrips     |
| Satellite grand public | Messages / secontenu | Variable selon appareil et opérateur | Filet de sécurité intégré sur certains smartphones, utile hors réseau cellulaire | Fonctions limitées, compatibilité variable, pas équivalent à un vrai terminal satellite | Roadtrips, randonnée modérée, plan B |
| Satellite dédié      | SOS / messages / parfois voix / data | Plus élevé | Fonctionne dans les zones blanches sérieuses, solution la plus robuste | Coût du matériel et abonnement | Expéditions, mer, montagne, régions isolées |

---

## ☑️ À considérer

- [ ] Mon téléphone est-il compatible eSIM?
- [ ] Mon téléphone prend-il en charge une fonction satellite?
- [ ] Mon opérateur offre-t-il déjà un service satellite sur smartphone?
- [ ] Ai-je besoin d’une connexion stable tous les jours?
- [ ] Suis-je à l’aise avec les réglages techniques?
- [ ] Ai-je besoin de partager ma connexion avec d’autres?

---

## Ressource — 2.3 telecom esim

> **Objectif de la section :** À la fin de ce chapitre, vous serez capable d'activer une connexion internet haut débit dans n'importe quel pays en moins de 5 minutes, sans changer de carte SIM physique et sans frais d'itinérance.

---

## 1. Pourquoi l'eSIM est l'outil n°1 du voyageur moderne ?
Fini de chercher une boutique de télécom à l'aéroport ou de stresser parce que vous n'avez pas de réseau pour commander votre premier transport. L'eSIM (SIM virtuelle) vous permet de :
*   Avoir de la data **dès l'atterrissage**.
*   Garder votre numéro WhatsApp/Signal habituel.
*   Éviter les factures surprises de votre opérateur local (souvent +15€/Mo).

## 2. Plan d'Action : Activer sa connexion mondiale

### Étape A : Vérifier la compatibilité
Avant d'acheter, assurez-vous que votre téléphone est "déverrouillé" et compatible eSIM (iPhone XS ou plus récent, Samsung S20+, Google Pixel 3+).

### Étape B : Choisir son fournisseur selon sa destination
Chaque voyageur a des besoins différents. Voici ma sélection rigoureuse :
*   🏆 **Pour la simplicité globale :** [Airalo](https://airalo.tp.st/1Yp6iGVS) (200+ pays). Interface ultra simple.
*   🚢 **Pour les croisières et zones reculées :** [GigSky](https://www.gigsky.com/). C'est l'un des rares à proposer des plans spécifiques pour la haute mer.
*   ♾️ **Pour les gros consommateurs de data :** [Holafly](https://www.holafly.com/). Idéal pour le streaming ou le travail nomade (plans illimités).

### Étape C : Installation et Activation
#### 🍎 Sur iPhone (iOS)
1.  **Achetez votre forfait** via l'application du fournisseur (ex: Airalo).
2.  Allez dans **Réglages > Données cellulaires**.
3.  Appuyez sur **Ajouter une eSIM**.
4.  Choisissez **Utiliser un code QR** et scannez le code reçu par email (ou utilisez l'installation directe depuis l'application).
5.  **Étiquetage** : Nommez cette nouvelle ligne "Voyage" ou "Data".
6.  **Sélection** : Dans "Données cellulaires", sélectionnez votre ligne "Voyage" pour l'accès à internet, mais gardez votre ligne "Principale" pour les appels et SMS (attention aux frais d'itinérance sur les appels !).

#### 🤖 Sur Android (Samsung, Pixel, etc.)
1.  **Achetez votre forfait** via l'application.
2.  Allez dans **Paramètres > Connexions > Gestionnaire de carte SIM**.
3.  Appuyez sur **Ajouter un forfait mobile** ou **Ajouter une eSIM**.
4.  Sélectionnez **Scanner le code QR du fournisseur**.
5.  Une fois activée, allez dans les paramètres de données mobiles et choisissez votre nouvelle eSIM comme source par défaut pour internet.

**💡 Conseil de l'Expert :** Désactivez l'option "Commutation des données cellulaires" sur iPhone pour éviter que votre téléphone ne bascule sur votre forfait canadien/français coûteux si le signal eSIM faiblit.

## 3. Sécurité et Astuces avancées
*   **VPN Indispensable :** Lorsque vous utilisez un Wi-Fi public pour télécharger votre eSIM, activez toujours [Surfshark](https://surfshark.com/deals?coupon=surfshark) pour protéger vos données bancaires.
*   **Couverture :** Consultez la carte [nPerf - USA Cellular Signal Map](https://www.nperf.com/fr/map/US/-/-/signal?ll=20&lg=0&zoom=3) avant de partir en road-trip pour connaître les zones blanches.

---

## 🛠️ Exercice Pratique du Chapitre
**Votre mission :** 
1. Téléchargez l'application Airalo ou GigSky.
2. Recherchez votre prochaine destination de voyage.
3. Comparez le prix d'un forfait 1 Go avec les frais d'itinérance de votre opérateur actuel.
4. **Action :** Prenez une capture d'écran du forfait choisi et partagez-la dans la communauté des voyageurs !

---

*Félicitations ! Vous venez de sécuriser votre autonomie numérique pour votre prochain voyage.*

---

## Ressource — 2.4 telecom vpn

> **Objectif de la section :** À la fin de ce chapitre, vous saurez utiliser les réseaux Wi-Fi publics sans risque pour vos données bancaires et vous maîtriserez l'utilisation d'un VPN pour protéger votre vie privée et accéder à vos contenus habituels depuis l'étranger.

---

## 1. Le Danger Invisible du Wi-Fi Public
Lorsque vous vous connectez au Wi-Fi gratuit d'un aéroport ou d'un café, vous n'êtes pas seul. Un pirate informatique peut facilement "intercepter" ce que vous envoyez (mots de passe, emails, codes bancaires).

### Les 3 règles d'or du Wi-Fi Public :
1.  **Désactivez le partage :** Assurez-vous que votre ordinateur/téléphone ne "partage" pas ses fichiers sur le réseau.
2.  **Oubliez le réseau :** Une fois fini, cliquez sur "Oublier ce réseau" pour éviter que votre téléphone ne s'y reconnecte automatiquement plus tard.
3.  **Le Bouclier Obligatoire :** Ne vous connectez JAMAIS à votre banque sur un Wi-Fi public sans activer votre VPN.

---

## 2. Le VPN : Votre Tunnel Sécurisé
Un **VPN (Virtual Private Network)** crée un tunnel crypté entre votre appareil et internet. Personne, pas même le fournisseur du Wi-Fi, ne peut voir votre activité.

### Pourquoi utiliser un VPN en voyage ?
*   **Sécurité :** Cryptage total de vos données bancaires et personnelles.
*   **Confidentialité :** Empêche les sites web et les régies publicitaires de vous pister.
*   **Liberté (Géo-blocking) :** Faites croire à internet que vous êtes dans votre pays d'origine pour accéder à vos services de streaming (Netflix, Molotov, Tou.tv) ou à votre banque qui pourrait bloquer une connexion venant d'un pays étranger.

### Ma sélection rigoureuse :
*   🥇 **[Surfshark](https://surfshark.com/) :** Le meilleur rapport qualité/prix. Permet de connecter un nombre illimité d'appareils (toute la famille !). Inclut un bloqueur de pubs.
*   🥈 **[NordVPN](https://nordvpn.com/) :** La référence mondiale pour la rapidité. Options avancées comme le Double VPN.
*   🥉 **[ProtonVPN](https://protonvpn.com/) :** Basé en Suisse, l'option la plus respectueuse de la vie privée. Version gratuite disponible (plus lente).
*   🚀 **[ExpressVPN](https://www.expressvpn.com/) :** Très stable et facile à utiliser, excellent support client.

---

## 3. Communiquer gratuitement via Wi-Fi
Une fois sécurisé par votre VPN, le Wi-Fi public devient votre meilleur allié pour appeler vos proches sans frais :
*   **[WhatsApp](https://www.whatsapp.com/) / [Signal](https://signal.org/) :** Les standards pour les messages et appels vidéo.
*   **[Skype](https://www.skype.com/) / [TextNow](https://www.textnow.com) :** Pour appeler des numéros de téléphone fixes ou mobiles à l'étranger pour quelques centimes.

---

## 🛠️ Exercice Pratique du Chapitre
**Votre mission :** 
1. Si vous n'en avez pas, téléchargez une version d'essai ou gratuite de [Surfshark](https://surfshark.com/), [NordVPN](https://nordvpn.com/) ou [ProtonVPN](https://protonvpn.com/).
2. Connectez-vous à un Wi-Fi public (café, bibliothèque).
3. **Action :** Activez le VPN et choisissez un serveur dans un autre pays (ex: si vous êtes au Canada, choisissez la France).
4. **Vérification :** Allez sur [WhatIsMyIP.com](https://www.whatismyip.com/). Votre localisation affichée doit être celle du serveur VPN, pas celle du café !
5. **Réflexion :** Quel service (banque, streaming) utilisez-vous le plus et qui nécessite absolument un VPN ?

---

*Bravo ! Votre vie numérique est désormais sous haute protection.*

---

## Ressource — 2.5 securiser iphone vol

Voici **comment sécuriser au maximum ton iPhone contre le vol et les abus** 👍👇

---

## 🔐 1) Active **Find My** (Localiser) + Envoie la dernière position

➡️ C’est indispensable pour **retrouver ton iPhone même s’il est éteint** ou volé, grâce au réseau *Find My* d’Apple. ([Tom's Guide][1])

* Réglages → [ton nom] → *Localiser* → Active **Localiser mon iPhone**
* Active aussi **Envoyer la dernière position**

---

## 🚫 2) Bloque l’accès au **Centre de contrôle** dès l’écran verrouillé

➡️ Cela empêche quiconque d’activer le **mode avion** ou de couper la connexion sans Face ID/code. ([Tom's Guide][1])

* Réglages → **Face ID et code**
* Désactive **Centre de contrôle** dans *Autoriser l’accès lorsque verrouillé*

C’est très utile lorsque ton iPhone est perdu/volé car ça **maintient les connexions actives plus longtemps** pour le retrouver.

---

## 🛡️ 3) Active **Protection en cas de vol de l’appareil**

➡️ C’est une nouvelle fonction d’iOS (à activer avant un éventuel vol) qui **demande Face ID pour des actions cruciales même si quelqu’un connaît ton code** — impossible de désactiver *Localiser*, de changer ton Apple ID ou de désactiver la protection sans Face ID + délai de sécurité. ([Support Apple][2])

* Réglages → **Face ID et code**
* Active **Protection en cas de vol de l’appareil**
* Option **Toujours** pour exiger Face ID + délai de sécurité

---

## 🔑 4) Renforce ton code & biométrie

➡️ Met un **code plus long (alphanumérique)** plutôt qu’un simple 6 chiffres – beaucoup plus dur à deviner pour un voleur. ([Forbes][3])

Et garde **Face ID activé** pour tout déverrouillage.

---

## 🧨 5) Active l’effacement automatique après 10 tentatives

➡️ Si quelqu’un essaie de forcer ton code, l’iPhone peut **effacer toutes les données** après 10 échecs. ([Forbes][3])

* Réglages → **Face ID et code**
* Active **Effacer les données**

⚠️ Assure-toi d’avoir des **sauvegardes régulières** avant d’activer ça.

---

## 💳 6) Protège Apple Wallet & accessoires USB

➡️ Après un vol, quelqu’un pourrait essayer d’utiliser ta **carte dans Apple Wallet** ou de forcer le téléphone via USB. ([Forbes][3])

* Réglages → **Face ID et code** → Désactive l’accès Wallet quand l’écran est verrouillé
* Réglages → **Face ID et code** → **USB accessoires** → désactive

---

## 🧠 7) Procédure si ton iPhone est volé

1. **Connecte-toi à iCloud.com/find** depuis un autre appareil.
2. Active **Mode Perdu** pour verrouiller l’iPhone à distance et suspendre Apple Pay.
3. Si nécessaire, **efface l’appareil à distance**. ([Tom's Guide][1])

---

## 🧰 8) Protection physique (conseils pratiques)

Même les meilleurs réglages ne protègent pas contre un vol physique. Pense à :

✔ Housse avec bracelet / sangle<br/>
✔ Ne pas laisser l’iPhone à l’arrière-plan (poche arrière)<br/>
✔ Être vigilant dans les foules ou zones à risque ([IMEI.info][4])

---

### 🔎 En résumé — Priorités en cas de vol

📍 *Find My* + Envoyer dernière position<br/>
🔐 Protection en cas de vol active<br/>
🔒 Verrouillage impossible de Localiser / Apple ID sans Face ID<br/>
🚫 Centre de contrôle désactivé quand verrouillé

---

## Ressource — 2.6 securiser android vol

Voici **comment sécuriser au maximum ton smartphone Android contre le vol et les abus** 👍👇. *Note : Les noms des menus peuvent varier légèrement selon votre marque (Samsung, Pixel, Xiaomi), mais les fonctions Google sont identiques.*

---

## 🔐 1) Active "Localiser mon appareil" (Find My Device)
➡️ C'est la base pour retrouver votre téléphone, le faire sonner ou l'effacer à distance. Les versions récentes permettent même une localisation **hors-ligne**.

*   **Réglages** → **Google** → **Localiser mon appareil**.
*   Activez **Utiliser "Localiser mon appareil"**.
*   Choisissez l'option **"Hors connexion avec le réseau"** (pour utiliser le maillage mondial des appareils Android).

---

## 🛡️ 2) Activez le "Bouclier Antivol" (Nouveauté Google)
➡️ Google a déployé une suite de protections intelligentes basées sur l'IA pour verrouiller le téléphone instantanément en cas de vol à l'arraché.

*   **Réglages** → **Google** → **Tous les services** → **Protection contre le vol** (ou cherchez "Vol" dans les réglages).
*   Activez **Verrouillage en cas de détection de vol** : Utilise les capteurs pour détecter si quelqu'un vous arrache le téléphone des mains et s'enfuit en courant ou à vélo.
*   Activez **Verrouillage de l'appareil hors connexion** : Verrouille l'écran si le voleur coupe internet pour éviter la localisation.

---

## 👤 3) Activez la "Vérification d'identité" (Android 15+)
➡️ C'est l'équivalent de la protection iPhone : elle **oblige l'usage de l'empreinte ou du visage** pour modifier des réglages critiques (changer le code, désactiver le vol), même si le voleur connaît votre code PIN.

*   **Réglages** → **Google** → **Protection contre le vol** → **Vérification d'identité**.
*   Activez-le pour qu'il s'enclenche dès que vous n'êtes pas dans un "Lieu vérifié" (comme votre domicile).

---

## 🚫 4) Masquez le contenu sensible sur l'écran verrouillé
➡️ Empêchez un voleur de voir vos codes de récupération reçus par SMS ou email sans déverrouiller le téléphone.

*   **Réglages** → **Notifications** → **Notifications sur l'écran de verrouillage**.
*   Sélectionnez **"Afficher le contenu sensible uniquement une fois déverrouillé"**.

---

## 🔒 5) Verrouillez l'accès réseau (Spécifique Samsung)
➡️ Sur les téléphones Samsung, vous pouvez empêcher de couper le Wi-Fi ou les données mobiles sans le code.

*   **Réglages** → **Écran de verrouillage et sécurité** → **Paramètres de verrouillage sécurisé**.
*   Activez **Verrouiller réseau et sécurité**.

---

## 🧠 6) Procédure d'urgence : Le Verrouillage à distance
Si votre téléphone est volé et que vous n'avez pas accès à votre compte Google immédiatement :

1.  Allez sur **[android.com/lock](https://www.android.com/lock)** depuis le téléphone d'un ami.
2.  Entrez votre **numéro de téléphone**.
3.  Répondez à un défi de sécurité rapide pour **verrouiller votre écran instantanément**.

---

## 🧰 7) Protection physique (Rappel)
*   **Code PIN fort** : Évitez les 0000 ou 1234. Utilisez un schéma complexe ou, mieux, un mot de passe.
*   **Vérification SIM** : Mettez un code PIN sur votre carte SIM physique pour qu'on ne puisse pas l'utiliser dans un autre téléphone pour recevoir vos SMS de banque.

---

### 🔎 En résumé — Priorités Android
📍 **Localiser mon appareil** (mode réseau actif)<br/>
🤖 **Détection de vol IA** activée<br/>
🆔 **Vérification d'identité** biométrique (Android 15)<br/>
📡 **Réseau verrouillé** (si Samsung)

---

## Ressource — 2.7 raccourci securite

<!-- .slide: data-background-image="assets/4-communication-background.png" data-background-opacity="1" data-background-color="#9013FE" data-background-size="contain" data-audio-src="assets/audio/outils_et_techniques_pour_se_dplacer_sans_stress.webm"-->

## Chapitre 4 
## Communication et Sécurité
### 3 techniques pour protéger votre téléphone du vol
- Recharge Iphone
- LOST: perdu ou volé
- Urgence

<aside class="notes">
- Envoyer les coordonnées de localisation lorsque le téléphone est mis en charge
- Envoyer un message de type "LOST" pour indiquer que le téléphone est perdu
- Envoyer un message de type "URGENCE" pour indiquer que vous etes en danger
</aside>

---

<!-- .slide: data-background-image="assets/4-communication-background.png" data-background-opacity="1" data-background-color="#9013FE" data-background-size="contain" data-audio-src="assets/audio/outils_et_techniques_pour_se_dplacer_sans_stress.webm"-->

## Chapitre 4 
## Communication et Sécurité
## 1 de 3: Recharge Iphone
### 3 techniques pour protéger votre téléphone du vol
- Recharge Iphone
- LOST: perdu ou volé
- Urgence

<aside class="notes">
- Envoyer les coordonnées de localisation + photo avant lorsque le téléphone est mis en charge
</aside>

--

<!-- .slide:  data-background-image="assets/home.PNG" data-background-opacity="1" data-background-color="#9013FE" data-background-size="contain" -->
## Edition raccourci

<aside class="notes">
- On sélectionnne l'application Raccourcis pour afficher la liste des raccourcis
</aside>

--

<!-- .slide:  data-background-image="assets/racourcis.PNG" data-background-opacity="1" data-background-color="#9013FE" data-background-size="contain" -->
## Selection raccourci

<aside class="notes">
- selection Charging
</aside>

--

<!-- .slide:  data-background-image="assets/charging/IMG_9531.PNG" data-background-opacity="1" data-background-color="#9013FE" data-background-size="contain" -->
## Modifier raccourci {style="top: -9em; !important;"}
<aside class="notes">
- Modifier le raccourcis
</aside>

--

<!-- .slide:  data-background-image="assets/charging/IMG_9481.PNG" data-background-opacity="1" data-background-color="#9013FE" data-background-size="contain" -->

<aside class="notes">
- Explication du fonctionnement du raccourcis
</aside>

--

<!-- .slide:  data-background-image="assets/charging/IMG_9482.PNG" data-background-opacity="1" data-background-color="#9013FE" data-background-size="contain" -->

<aside class="notes">
- Explication du fonctionnement du raccourcis

</aside>

--

<!-- .slide:  data-background-image="assets/charging/IMG_9483.PNG" data-background-opacity="1" data-background-color="#9013FE" data-background-size="contain" -->

<aside class="notes">
- Explication du fonctionnement du raccourcis

</aside>

--

<!-- .slide:  data-background-image="assets/charging/IMG_9485.PNG" data-background-opacity="1" data-background-color="#9013FE" data-background-size="contain" -->

<aside class="notes">
- Explication du fonctionnement du raccourcis
</aside>

--

<!-- .slide:  data-background-image="assets/charging/IMG_9486.PNG" data-background-opacity="1" data-background-color="#9013FE" data-background-size="contain" -->

<aside class="notes">
- Explication du fonctionnement du raccourcis
</aside>

--

<!-- .slide:  data-background-image="assets/home.PNG" data-background-opacity="1" data-background-color="#9013FE" data-background-size="contain" -->

## Fichiers
<aside class="notes">
  - On ouvre l'application Fichiers pour retrouver le document texte créé
</aside>

--

<!-- .slide:  data-background-image="assets/IMG_B24CC0EB658A-1.jpeg" data-background-opacity="1" data-background-color="#9013FE" data-background-size="contain" -->
## Fichiers résultants  {style="top: 1em !important;"}
<aside class="notes">
- les photos et vidéos pris avec la caméra de l'iPhone sont automatiquement sauvegardées dans le répertoire LOST sur iCloud Drive
</aside>

---

<!-- .slide: data-background-image="assets/4-communication-background.png" data-background-opacity="1" data-background-color="#9013FE" data-background-size="contain" data-audio-src="assets/audio/outils_et_techniques_pour_se_dplacer_sans_stress.webm"-->

## Chapitre 4 
## Communication et Sécurité
## 2 de 3: LOST - perdu ou volé
### 3 techniques pour protéger votre téléphone du vol
- Recharge Iphone
- LOST: perdu ou volé
- Urgence

<aside class="notes">
- Envoyer un message de type "LOST" pour indiquer que le téléphone est perdu
- Envoyer un message de type "URGENCE" pour indiquer que vous etes en danger
</aside>

--

<!-- .slide:  data-background-image="assets/home.PNG" data-background-opacity="1" data-background-color="#9013FE" data-background-size="contain" -->

## Téléphone perdu ou volé

<aside class="notes">
- On sélectionnne l'application Raccourcis pour afficher la liste des raccourcis
</aside>

--

<!-- .slide:  data-background-image="assets/racourcis.PNG" data-background-opacity="1" data-background-color="#9013FE" data-background-size="contain" -->
## Selection Automatisation

<aside class="notes">
- selection automatisation en bas au centre de l'écran
</aside>

--

<!-- .slide:  data-background-image="assets/lost/lost-IMG_9427.PNG" data-background-opacity="1" data-background-color="#9013FE" data-background-size="contain" -->

<aside class="notes">
- selectionner lorsque je recois un message qui contient lost
</aside>

--

<!-- .slide:  data-background-image="assets/lost/lost-IMG_9428.PNG" data-background-opacity="1" data-background-color="#9013FE" data-background-size="contain" -->
## Détail automatisation  {style="top: -8em !important;"}
<aside class="notes">
- selectionner lorsque je recois un message qui contient lost
</aside>

--

<!-- .slide:  data-background-image="assets/lost/IMG_9429.PNG" data-background-opacity="1" data-background-color="#9013FE" data-background-size="contain" -->

<aside class="notes">
- explication du fonctionnement du raccourcis
</aside>

--

<!-- .slide:  data-background-image="assets/lost/IMG_9430.PNG" data-background-opacity="1" data-background-color="#9013FE" data-background-size="contain" -->

<aside class="notes">
- explication du fonctionnement du raccourcis
</aside>

--

<!-- .slide:  data-background-image="assets/lost/IMG_9431.PNg" data-background-opacity="1" data-background-color="#9013FE" data-background-size="contain" -->

<aside class="notes">
- explication du fonctionnement du raccourcis
</aside>

--

<!-- .slide:  data-background-image="assets/lost/IMG_9432.PNG" data-background-opacity="1" data-background-color="#9013FE" data-background-size="contain" -->

<aside class="notes">
- explication du fonctionnement du raccourcis
- pour tester, on peut cliquer sur le bouton de lecture en bas à droite
- </aside>

--

<!-- .slide:  data-background-image="assets/lost/IMG_9434.PNG" data-background-opacity="1" data-background-color="#9013FE" data-background-size="contain" -->
## Tester le raccourcis
<aside class="notes">
- pour tester, on peut envoyer un message texte contenant le mot LOST à notre numéro de téléphone
</aside>

--

<!-- .slide:  data-background-image="assets/lost/IMG_9536.PNG" data-background-opacity="1" data-background-color="#9013FE" data-background-size="contain" -->
## Message reçu  {style="top: 7em !important;"}
<aside class="notes">
- On recoit le message localiser mon iphone.
- Et un lien pour google maps avec la position GPS du téléphone
</aside>

--

<!-- .slide:  data-background-image="assets/lost/IMG_F46C7ED21D79-1.jpeg" data-background-opacity="1" data-background-color="#9013FE" data-background-size="contain" -->
## Coordonnées GPS reçues  {style="top: -7em !important;"}
<aside class="notes">
- On peut ainsi afficher la position GPS du téléphone sur google maps
</aside>

--

<!-- .slide:  data-background-image="assets/home.PNG" data-background-opacity="1" data-background-color="#9013FE" data-background-size="contain" -->

## Fichiers
<aside class="notes">
  - On ouvre l'application Fichiers pour retrouver le document texte créé
</aside>

--

<!-- .slide:  data-background-image="assets/IMG_B24CC0EB658A-1.jpeg" data-background-opacity="1" data-background-color="#9013FE" data-background-size="contain" -->

<aside class="notes">
- Le mode LOST prend une photo de la camera avant pour tenter d'identifier la personne qui a notre téléphone
- les noms de fichiers correspondent à la latitude, longitude, altitude
</aside>

---

<!-- .slide: data-background-image="assets/4-communication-background.png" data-background-opacity="1" data-background-color="#9013FE" data-background-size="contain" data-audio-src="assets/audio/outils_et_techniques_pour_se_dplacer_sans_stress.webm"-->

## Chapitre 4 
## Communication et Sécurité
## 3 de 3: Urgence
### 3 techniques pour protéger votre téléphone du vol
- Recharge Iphone
- LOST: perdu ou volé
- Urgence

<aside class="notes">
- Envoyer un message de type "URGENCE" pour indiquer que vous etes en danger
</aside>

--

<!-- .slide:  data-background-image="assets/urgence/IMG_9530.PNG" data-background-opacity="1" data-background-color="#9013FE" data-background-size="contain" -->
## Urgence par défault  {style="top: -9.5em !important;"}
<aside class="notes">
  - Bouton de droite a 5 reprises
  - La médhote la plus rapide pour lancer un appel d'urgence
</aside>

--

<!-- .slide:  data-background-image="assets/home.PNG" data-background-opacity="1" data-background-color="#9013FE" data-background-size="contain" -->
## Situation d'urgence

<aside class="notes">
- Pour lancer un message d'urgence à vos contacts d'urgence
  - on sélectionnne le raccourcie Urgence
  - Dis siri, urgence
  - Editer le raccourcis pour le personnaliser
</aside>

--

<!-- .slide:  data-background-image="assets/racourcis.PNG" data-background-opacity="1" data-background-color="#9013FE" data-background-size="contain" -->
## Selection urgence  {style="top: -9.5em !important;"}

<aside class="notes">
- selection urgence
</aside>

--

<!-- .slide:  data-background-image="assets/urgence/IMG_9495.PNG" data-background-opacity="1" data-background-color="#9013FE" data-background-size="contain" -->

## Modifier le raccourci  {style="top: -8em !important;"}

<aside class="notes">
- Sélecionner modifier pour éditer le raccourcis
- enlever le répéter et le attendre
</aside>

--

<!-- .slide:  data-background-image="assets/urgence/IMG_9496.PNG" data-background-opacity="1" data-background-color="#9013FE" data-background-size="contain" -->

<aside class="notes">
- expliquer le fonctionnement du raccourcis
</aside>

--

<!-- .slide:  data-background-image="assets/urgence/IMG_9497.PNG" data-background-opacity="1" data-background-color="#9013FE" data-background-size="contain" -->

<aside class="notes">
- expliquer le fonctionnement du raccourcis
</aside>

--

<!-- .slide:  data-background-image="assets/urgence/IMG_9498.PNG" data-background-opacity="1" data-background-color="#9013FE" data-background-size="contain" -->

<aside class="notes">
- expliquer le fonctionnement du raccourcis
</aside>

--

<!-- .slide:  data-background-image="assets/urgence/IMG_9499.PNG" data-background-opacity="1" data-background-color="#9013FE" data-background-size="contain" -->

<aside class="notes">
- expliquer le fonctionnement du raccourcis
- click sur le bouton de lecture en bas à droite pour tester le raccourcis
</aside>

--

<!-- .slide:  data-background-image="assets/urgence/IMG_C9ABB5C897F3-1.jpeg" data-background-opacity="1" data-background-color="#9013FE" data-background-size="contain" -->
## Éviter message accidentel  {style="top: -5em !important;"}

<aside class="notes">
- Validation pour ne pas l'ancer d'alerte sans fondemment
</aside>

--

<!-- .slide:  data-background-image="assets/urgence/IMG_9488.PNG" data-background-opacity="1" data-background-color="#9013FE" data-background-size="contain" -->
## Enregistrement audio  {style="top: -7em !important;"}
<aside class="notes">
- les coordonnées GPS sont déja envoyé mais on aimerais donner plus d'inguide sur la situation d'urgence
- on démarre un enregistrement audio avec le dictaphone
- On click à nouveau pour terminer l'enregistrement
</aside>

--

<!-- .slide:  data-background-image="assets/urgence/IMG_9489.PNG" data-background-opacity="1" data-background-color="#9013FE" data-background-size="contain" -->

<aside class="notes">
- Le message audio est envoyé aux contacts d'urgence
- on démarre un enregistrement vidéo avec la caméra avant pour donner plus d'inguide sur la situation d'urgence
</aside>

--

<!-- .slide:  data-background-image="assets/urgence/IMG_9490.PNG" data-background-opacity="1" data-background-color="#9013FE" data-background-size="contain" -->

<aside class="notes">
- On click sur le bouton de fin d'enregistrement pour terminer la vidéo
</aside>

--

<!-- .slide:  data-background-image="assets/urgence/IMG_9491.PNG" data-background-opacity="1" data-background-color="#9013FE" data-background-size="contain" -->

<aside class="notes">
- on click sur utiliser la vidéo pour envoyer la vidéo aux contacts d'urgence
</aside>

--

<!-- .slide:  data-background-image="assets/urgence/IMG_63F5D99A4513-1.jpeg" data-background-opacity="1" data-background-color="#9013FE" data-background-size="contain" -->

<aside class="notes">
- Résultats de l'appel d'urgence
</aside>

--

<!-- .slide:  data-background-image="assets/home.PNG" data-background-opacity="1" data-background-color="#9013FE" data-background-size="contain" -->

## Fichiers
<aside class="notes">
  - On ouvre l'application Fichiers pour retrouver le vidéo d'urgence créee
</aside>

--

<!-- .slide:  data-background-image="assets/IMG_B24CC0EB658A-1.jpeg" data-background-opacity="1" data-background-color="#9013FE" data-background-size="contain" -->

<aside class="notes">
- le guide est urgence_latitude_longitude_date
</aside>

---

<!-- .slide: data-background-image="assets/webinaire-gratuit.png" data-background-opacity="1" data-background-color="#9013FE" data-background-size="contain" -->

---

<!-- .slide: data-background-image="assets/5-documentation-background.png" data-background-opacity="1" data-background-color="#9013FE" data-background-size="contain" -->

## C'est à vous de jouer!

Le voyage de vos rêves est à portée de main.

Inscrivez-vous maintenant et commencez l'aventure !
- https://www.twai.world/fr/home
- https://ca.pinterest.com/twaiworld/
- https://www.facebook.com/profile.php?id=100067792869970"
- https://www.instagram.com/twaiworld
- https://www.linkedin.com/in/yvanross
- https://www.youtube.com/@twaiworld
- gestionprojetrossy@gmail.com

N'oubliez pas de cliquer sur j'aime, de vous abonner et de partager!

<style>

  h2 {
   margin-top: -20px !important;
      color: #000000 !important;
      background-color: #ffffff !important;
      position: relative !important;
      top: -350px !important;
      padding: 10px 10px !important;
      opacity: 0.75 !important;
      border-radius: 10px !important;

   }
   h3 {
      color: #FFFFFF !important;
   }
   .reveal {
      background-color: #000000 !important;
   }
	.reveal .slide-background::after {
	content: '';
	position: absolute;
	top: 10px;
	right: 20px;
	width: 100px;
	height: 100px;
	background-image: url('/public/img/twai_logo_blanc.webp');
   background-size: contain;
   background-repeat: no-repeat;
   }
   .reveal a {
      color: #FFFFFF !important;
      text-decoration: underline !important;
   }
   .reveal a:hover {
      color: #DDDDDD !important;
   }
   </style>

   <script>
  Reveal.initialize({
    transition: 'slide',
    backgroundTransition: 'fade', // optional, for backgrounds
    slideNumber: true
  });
</script>

---

## Ressource — 2.8 pdf checklist connection securite

> **Objectif :** Cette checklist interactive vous permet de suivre votre préparation étape par étape. Vos réponses sont sauvegardées automatiquement dans votre profil d'Explorateur.

---

<div class="card shadow-sm border-0 mb-5 overflow-hidden">
    <div class="card-header bg-primary text-white py-3 fw-bold">
        <i class="bi bi-shield-check me-2"></i> VOTRE CHECKLIST DE SÉCURITÉ
    </div>
    <div class="card-body p-4 p-md-5">
        <form class="local-form" data-form-id="checklist-communication-securite">
            <h5 class="border-bottom pb-2 mb-4 text-primary"><i class="bi bi-airplane-engines me-2"></i>1. Avant le départ (Préparation)</h5>
            <div class="form-check mb-3">
                <input class="form-check-input" type="checkbox" name="chk_unlocked" id="chk1">
                <label class="form-check-label" for="chk1">J’ai vérifié si mon téléphone est déverrouillé (tout opérateur)</label>
            </div>
            <div class="form-check mb-3">
                <input class="form-check-input" type="checkbox" name="chk_vpn" id="chk2">
                <label class="form-check-label" for="chk2">J’ai téléchargé et testé mon appli VPN (ex. ProtonVPN, NordVPN, Surfshark)</label>
            </div>
            <div class="form-check mb-3">
                <input class="form-check-input" type="checkbox" name="chk_2fa" id="chk3">
                <label class="form-check-label" for="chk3">J’ai activé la double authentification (2FA) sur mes comptes critiques (Banque, Email)</label>
            </div>
            <div class="form-check mb-3">
                <input class="form-check-input" type="checkbox" name="chk_cloud" id="chk4">
                <label class="form-check-label" for="chk4">J’ai sauvegardé mes documents importants (Passeport, Visas) dans un Cloud sécurisé</label>
            </div>
            <div class="form-check mb-3">
                <input class="form-check-input" type="checkbox" name="chk_pwd_mgr" id="chk5">
                <label class="form-check-label" for="chk5">J’ai noté mes mots de passe dans un gestionnaire sécurisé (et non sur un papier libre)</label>
            </div>
            <h5 class="border-bottom pb-2 mb-4 mt-5 text-primary"><i class="bi bi-globe2 me-2"></i>2. En voyage (Sur le terrain)</h5>
            <div class="form-check mb-3">
                <input class="form-check-input" type="checkbox" name="chk_vpn_usage" id="chk6">
                <label class="form-check-label" for="chk6">J’active systématiquement mon VPN sur les réseaux Wi-Fi publics</label>
            </div>
            <div class="form-check mb-3">
                <input class="form-check-input" type="checkbox" name="chk_disable_bt" id="chk7">
                <label class="form-check-label" for="chk7">Je désactive le Bluetooth et le partage de connexion quand je ne les utilise pas</label>
            </div>
            <div class="form-check mb-3">
                <input class="form-check-input" type="checkbox" name="chk_offline_doc" id="chk8">
                <label class="form-check-label" for="chk8">J’ai une copie hors-ligne (téléchargée) de mes documents de transport essentiels</label>
            </div>
            <h5 class="border-bottom pb-2 mb-4 mt-5 text-danger"><i class="bi bi-exclamation-octagon me-2"></i>3. Numéros et Contacts d'Urgence</h5>
            <p class="mb-4">Pour une sécurité maximale, tous vos numéros critiques (Ambassade, Assurance, Urgences Locales) doivent être centralisés dans votre Carnet d'Urgence.</p>
            <div class="alert alert-info border-0 shadow-sm rounded-4 p-4">
                <div class="d-flex align-items-center">
                    <div class="flex-shrink-0"><i class="bi bi-info-circle-fill text-info display-6 me-4"></i></div>
                    <div>
                        <h5 class="alert-heading mb-1 fw-bold">Action Requise</h5>
                        <p class="mb-0">Avez-vous bien rempli vos numéros de destination ? </p>
                        <p>Votre carnet d’urgence est accessible dans la liste des questionnaires de ce dossier.</p>
                    </div>
                </div>
            </div>
            <div class="form-check mb-3 mt-4">
                <input class="form-check-input" type="checkbox" name="chk_contacts_done" id="chk9">
                <label class="form-check-label" for="chk9 fw-bold text-success">J'ai centralisé mes contacts et numéros locaux dans mon Carnet d'Urgence.</label>
            </div>
            <div class="text-center pt-5 mt-4 border-top">
                <button type="submit" class="btn btn-primary btn-lg px-5 shadow-sm fw-bold">
                    <i class="bi bi-save me-2"></i>SAUVEGARDER MA CHECKLIST
                </button>
            </div>
        </form>
    </div>
</div>

---

### 🧠 Rappel de l'Expert
N'oubliez pas que cette checklist est votre dernière ligne de défense. Si vous avez un doute sur un point (comme l'installation d'une eSIM ou du VPN), revenez aux sections précédentes du chapitre avant de cocher la case. 

**Conseil :** Imprimez une version de secontenu de votre Carnet d'Urgence et glissez-la dans votre coque de téléphone ou votre portefeuille.

---

## Ressource — 3.1 telecom satellite

> **Objectif de la section :** À la fin de ce chapitre, vous saurez choisir l'équipement satellite adapté à votre type d'aventure (mer, montagne, désert) et vous comprendrez comment fonctionne le système de secontenu mondial SOS.

---

## 1. Pourquoi le satellite ? (Le filet de sécurité ultime)
Même avec la meilleure eSIM, 70 % de la surface de la Terre n'est pas couverte par le réseau cellulaire. Si vous prévoyez une traversée océanique, une randonnée en haute montagne ou un road-trip dans l'Outback australien, le satellite est votre **seule** option.

### Les deux types de besoins :
*   **📡 Besoin de Data (Internet) :** Pour travailler, envoyer des photos ou naviguer.
    *   🥇 **[Starlink](https://amzn.to/4f1OjmL) :** La révolution. Haut débit partout, même au milieu de l'Atlantique. Idéal pour les nomades en van ou sur un voilier.
*   **📩 Besoin de Messagerie & SOS :** Pour rassurer vos proches et prévenir les secontenu.
    *   🥇 **[Garmin inReach Mini 2](https://buy.garmin.com/en-US/US/p/753269) :** Le standard du voyageur d'aventure. Compact, robuste, autonomie immense.
    *   🥈 **[Zoleo](https://zoleo.com/fr/) :** La solution la plus économique pour la messagerie texte bidirectionnelle.

## 2. Le Bouton SOS : Comment ça marche ?
Tous ces appareils (Garmin, Spot, Zoleo) possèdent un bouton SOS protégé.
1.  **Activation :** En cas d'urgence vitale, vous pressez le bouton.
2.  **Centre GEOS :** Un signal avec votre position GPS exacte est envoyé au centre de coordination des secontenu mondial (IERCC).
3.  **Intervention :** Les secontenu locaux (hélicoptère, gardes-côtes) sont dépêchés sur place.
*   **Conseil de l'Expert :** Assurez-vous que votre assurance voyage (voir Chapitre 3) couvre les frais de recherche et sauvetage en mer/montagne !

## 3. Comparatif Rapide des Messagers
*   **[Spot X](https://www.findmespot.com/en-us/products-services/spot-x) :** Clavier complet, idéal pour ceux qui écrivent beaucoup.
*   **[Iridium GO!](https://www.iridium.com/products/iridium-go/) :** Transforme votre smartphone en téléphone satellite (appels voix possibles).
*   **[Motorola Defy](https://www.motorolarugged.com/pages/defy-satellite-link) :** Le plus léger, se connecte en Bluetooth à votre téléphone.

## 4. Le satellite grand public en 2026
Le changement majeur de ces dernières années, c'est que le satellite n'est plus réservé aux appareils spécialisés. En 2026, certains **smartphones grand public** peuvent déjà utiliser des services satellitaires modernes, avec des fonctions limitées mais très utiles en voyage.

### Ce qu'il faut comprendre
Il faut distinguer deux mondes :
*   **Le satellite dédié** : Garmin inReach, Zoleo, Iridium GO!, Starlink. C'est la solution la plus robuste pour les expéditions, la mer, la haute montagne ou les zones très isolées.
*   **Le satellite grand public** : certaines fonctions intégrées directement à des téléphones compatibles, sans acheter un appareil satellite séparé.

### Ce que permettent déjà certains appareils
Selon le marché et l'opérateur, ces services permettent progressivement :
*   l'envoi de **messages d'urgence** ;
*   l'envoi de **courts messages texte** ;
*   dans certains cas, l'accès à quelques **applications précises** ;
*   à terme, des **appels vocaux**, de la **vidéo** et davantage de connectivité.

### Exemples concrets mentionnés en 2026
*   **Apple** : depuis l'iPhone 14, certains iPhone peuvent envoyer des messages d'urgence par satellite. Apple a aussi ajouté cette fonction à l'Apple Watch Ultra 3. Pour l'instant, cela reste surtout un filet de sécurité.
*   **Google** : les Pixel récents ont ajouté des fonctions de communication satellite, d'abord pour l'urgence, puis avec des capacités élargies sur certains services de messagerie.
*   **Rogers** : propose déjà au Canada un service satellite mensuel sur certains téléphones compatibles, avec le 911 et quelques applications comme WhatsApp, Messenger, AllTrails, X et Google Maps.
*   **Bell et Telus** : prévoient ajouter des services semblables, mais le déploiement reste progressif.

### Ce que cela change pour un voyageur
Le satellite grand public est une excellente **couche de secontenu** si :
*   vous faites des randonnées modérées ;
*   vous roulez dans des zones partiellement couvertes ;
*   vous voulez un plan B sans transporter un second appareil.

Mais il ne remplace pas encore totalement un vrai équipement satellite si :
*   vous partez plusieurs jours hors réseau ;
*   vous traversez des zones extrêmes ;
*   vous avez besoin d'une autonomie maximale ;
*   vous voulez une solution éprouvée pour le SOS mondial.

### Règle simple
*   **Voyage classique ou roadtrip** : un smartphone compatible satellite peut devenir un excellent filet de sécurité.
*   **Expédition sérieuse ou zone blanche prolongée** : gardez un appareil satellite dédié.

---

## 🛠️ Exercice Pratique du Chapitre
**Votre mission :** 
1. Imaginez que vous partez traverser le Sahara ou naviguer vers les Açores.
2. Allez sur le site de [Garmin inReach](https://www.garmin.com/fr-CA/p/765374).
3. **Action :** Regardez le prix de l'abonnement mensuel "Liberté" (sans engagement).
4. **Réflexion :** Quel est le prix de votre sécurité ? Préférez-vous payer 20$/mois ou risquer de ne pas pouvoir appeler les secontenu en cas de problème ?

### Bonus 2026
1. Vérifiez si votre smartphone actuel prend en charge une fonction satellite.
2. Vérifiez si votre opérateur propose déjà un service de type direct-to-cell.
3. Décidez si votre usage relève d'un simple plan B ou d'un véritable besoin d'équipement satellite dédié.

---

*Bravo ! Vous êtes maintenant paré pour explorer les zones les plus sauvages du globe.*

---

## Ressource — 3.2 comparatif iphone zoleo

> **Objectif de la section :** choisir un moyen de communication satellite adapté à votre niveau d’isolement et préparer un plan de secontenu réellement utilisable.

> **À vérifier avant chaque départ.** La disponibilité, les fonctions compatibles, les restrictions locales et les prix changent. Cette section présente le cadre de décision ; consultez les pages officielles liées avant d’acheter ou de compter sur un service.

## Le choix en une phrase

Un **iPhone compatible** est un excellent filet de sécurité sans équipement supplémentaire pour une sortie occasionnelle dans une région prise en charge par Apple. Un **ZOLEO** devient plus pertinent lorsqu’il faut communiquer régulièrement hors réseau, voyager loin des zones prises en charge ou ne pas dépendre d’un seul téléphone.

Pour un itinéraire isolé, à risque élevé ou multi-pays, la solution la plus résiliente est souvent : **ZOLEO comme communicateur principal, iPhone comme redondance**. Ce n’est jamais une garantie de secontenu : les deux solutions exigent une vue dégagée du ciel, de l’énergie et une préparation préalable.

## Ce que permet chaque solution

### iPhone : le satellite intégré

Avec un iPhone 14 ou plus récent et un logiciel compatible, les fonctions satellite d’Apple peuvent, selon le pays ou la région :

* envoyer une demande par **Urgence SOS par satellite** ;
* partager une position avec **Localiser** ;
* demander une assistance routière là où elle est disponible ;
* échanger des messages non urgents avec Messages par satellite.

L’iPhone guide l’utilisateur à l’écran pour s’orienter vers le satellite. Il faut être dehors, avec une vue dégagée du ciel et de l’horizon. Le délai d’envoi varie : il peut être court en terrain dégagé, mais augmenter fortement sous les arbres ou près du relief. Ce n’est ni un téléphone satellite vocal ni un accès Internet général.

**Force :** il n’y a pas de boîtier à emporter si vous possédez déjà l’iPhone compatible.  
**Limite déterminante :** la batterie, l’état du téléphone et la disponibilité régionale concentrent plusieurs risques sur le même appareil.

> Les Messages par satellite ne remplacent pas Urgence SOS en situation d’urgence. Utilisez la fonction SOS adaptée lorsque votre sécurité est en jeu.

### ZOLEO : un communicateur Iridium séparé

ZOLEO utilise le réseau Iridium pour la messagerie mondiale. Avec un forfait actif, il permet la messagerie bidirectionnelle par SMS, courriel et application, des check-ins, le partage de position et un SOS surveillé 24 h/24, 7 j/7. Il peut envoyer un check-in ou déclencher un SOS depuis le boîtier ; la messagerie complète utilise normalement l’application ZOLEO.

**Force :** un appareil distinct, une batterie distincte et une couverture pensée pour les zones hors réseau.  
**Limites :** achat d’un boîtier, abonnement actif, recharge supplémentaire ; pas d’appels vocaux ni de données à haut débit.

> **Point critique :** un ZOLEO en pause ne peut pas transmettre de message, de check-in ou de SOS. Vérifiez le statut du forfait avant le départ.

## Comparer les risques, pas seulement les fonctions

| Critère | iPhone par satellite | ZOLEO |
|---|---|---|
| Couverture | Dépend du pays, de la fonction et du modèle | Mondiale via Iridium, sous réserve des conditions et restrictions locales |
| Alerte d’urgence | SOS guidé à l’écran | Bouton SOS et surveillance 24/7 avec forfait actif |
| Messagerie hors urgence | Oui, dans certaines régions et sous conditions | Oui : SMS, courriel et app à app |
| Sans téléphone | Non | SOS et check-in depuis le boîtier ; messagerie complète habituellement avec l’app |
| Redondance | Dépend de la batterie et de l’état de l’iPhone | Boîtier et batterie séparés |
| Voix / Internet général | Non | Non |
| Coût | Fonctions Apple incluses gratuitement pendant deux ans après l’activation d’un iPhone admissible | Boîtier et forfait actif requis ; vérifier prix et conditions en vigueur |

## Quel choix pour votre voyage ?

| Situation | Choix conseillé |
|---|---|
| Randonnée ponctuelle au Canada ou dans une zone Apple prise en charge | iPhone, avec batterie externe et cartes hors ligne |
| Voyage fréquent hors réseau, besoin de rassurer des proches ou de coordonner un groupe | ZOLEO avec un forfait adapté |
| Mer, régions polaires, itinéraire multi-pays ou destination sans fonctions Apple | ZOLEO |
| Voyage isolé à risque élevé | ZOLEO + iPhone, avec procédure de check-in et contacts d’urgence préparés |

## Votre protocole avant le départ

1. Vérifiez la couverture, la compatibilité de votre appareil et les règles du pays de destination. Un appareil acheté dans une autre région peut avoir des restrictions.
2. Faites la démonstration de connexion satellite de l’iPhone et configurez l’application ZOLEO avant de partir.
3. Définissez vos contacts, le message de check-in, sa fréquence, l’heure à laquelle un proche déclenche le plan d’urgence et l’itinéraire partagé.
4. Prévoyez une alimentation indépendante pour chaque appareil et testez le matériel dehors, avec une vue du ciel.
5. Si vous comptez sur ZOLEO pour le SOS, confirmez que le forfait est actif — ne le laissez pas en pause.

## Ressources officielles à consulter

* [Apple — Se connecter à un satellite avec l’iPhone](https://support.apple.com/fr-ca/105097)
* [Apple — Messages par satellite](https://support.apple.com/fr-ca/120930)
* [ZOLEO Canada — communicateur satellite](https://www.zoleo.com/fr-ca/product/zoleo-global-satellite-communicator)
* [ZOLEO Canada — forfaits et conditions](https://www.zoleo.com/fr-ca/plans)

---

## 🛠️ Exercice pratique

Choisissez votre prochain itinéraire hors réseau et rédigez votre décision en trois lignes :

1. **Mon moyen principal :** iPhone, ZOLEO ou les deux — et pourquoi.
2. **Mon check-in :** contact, message et fréquence.
3. **Mon plan si je manque un check-in :** qui agit, à partir de quelle heure et avec quelles inguides.

Conservez ce protocole dans votre carnet d’urgence et partagez-le avec vos contacts avant le départ.

---

# Pilier 7 — Logistique

## Ressource — 1.1 guide logistique index

<p align="center">
  <img src="/public/img/airportServices.webp" alt="Chapitre 7 Logistique" style="width:100%; border-radius: 15px; box-shadow: 0 4px 15px rgba(0,0,0,0.1);" />
</p>

Ce chapitre traite de l'exécution concrète de votre voyage : réservations, hébergements, déplacements, bagages et ressources sur place.

## 🎯 Objectif pédagogique

À la fin de ce chapitre, vous serez capable de :

- Organiser vos réservations selon vos priorités et votre niveau de flexibilité.
- Préparer des bagages cohérents avec le climat, les activités et le rythme du voyage.
- Anticiper les transferts et les déplacements locaux.
- Réagir aux changements de météo, de réservation ou de transport.

## 🧭 Comment fonctionne ce chapitre

La logistique met votre projet en mouvement. Vous apprenez à préparer les éléments qui ont le plus d'impact, sans surcharger votre voyage de réservations ou d'équipements inutiles.

## Les étapes du chapitre

### 1. Faire l'inventaire de vos besoins

Listez les équipements, documents, contraintes de mobilité et ressources dont vous disposez déjà. Cette base évite les achats doublons et révèle les besoins vraiment essentiels.

### 2. Réserver avec intention

Choisissez ce qui doit être réservé tôt et ce qui peut rester flexible. Comparez le prix, les conditions d'annulation, la localisation et le temps de transfert, pas seulement la note affichée.

### 3. Préparer les bagages et les ressources

Composez une liste adaptée à la météo, aux activités et aux possibilités de lessive ou de ravitaillement. Testez les objets critiques avant le départ et répartissez les essentiels de manière accessible.

### 4. Organiser les déplacements locaux

Repérez les arrivées, départs, points de prise en charge et solutions de repli. Prévoyez du temps pour les correspondances plutôt que de bâtir un programme au minute près.

### 5. Adapter le plan sur place

Suivez la météo, les alertes et les changements de réservation. Une journée légère et une alternative locale bien choisie font souvent la différence entre un contretemps et une expérience réussie.

## 🛠️ Action immédiate

Faites la liste des cinq éléments dont l'absence compromettrait votre voyage. Vérifiez pour chacun où il sera rangé, comment il sera protégé et par quoi il pourrait être remplacé.

---

## Ressource — 1.10 rechaud bois chaufferette

<p align="center">
  <img src="/public/img/rechaud.png" alt="réchaud à bois" style="width:100%; border-radius: 15px; box-shadow: 0 4px 15px rgba(0,0,0,0.1);" />
</p>

# Fabrication d'un réchaud à bois - Chaufferette

Ce projet est développé par le Laboratoire d'ingé nierie pour le développement durable [LIDD](https://www.etsmtl.ca/laboratoires/lidd) . Mme Lucie Richard-Duclos a réalise une partie de son projet de maitrise sur la conception et la diffusion du poêle Low tech pour les personnes en situation d'itinérance. 

Au sein du LIDD, les projets portent sur les Low Tech et Technologies Appropriées pour l'aide au développement en partenariat avec des ONG (Oxfam, ISF, CUSO, CREDIL)
 
Plus récemment, les besoins se sont fait sentir ici dans nos pays riches. Au sein du LIDD nous avons donc proposé de réfléchir à des solutions pour aider les personnes en situation d'itinérance. N'étant pas experts du sujet de l'itinérance, nous nous sommes entourés d'organismes qui interviennent auprès des plus vulnérables comme le RAPSIM, Dans la Rue, Le Cap St Barnabé, L'Anonyme. ... D'ou notre présence à la Nuit des sans Abri, pour un Atelier Low Tech.
 
Fort de plusieurs rencontres et discussions, nous avons analysé les problèmes (le froid par exemple), les besoins (se chauffer, cuire son repas), les verrous (règlement sur les feux à aire ouverte, accès au savoir, accès aux matériaux), les leviers (l'approche Low tech en est un)....
 
De là est né notre petit poêle Low Tech fabriqué exclusivement avec des matériaux:
Destinés au recyclage (Économie circulaire- boites de conserve) 
Disponibles facilement dans la rue (La cuisine collective du cap St Barnabé en dispose de centaines chaque mois)
Facile à mettre en œuvre sans, ou avec peu d'outils...
 
Il fallait un objet simple à fabriquer, à dupliquer, à utiliser, à transporter, à réparer....
 
On n’a presque rien inventé.... On a adapté au contexte, développé et modélisé un prototype, testé, mesuré la performance, adapté la fabrication.
 
On a ajouté un stockage thermique basé sur des roches 3/4  (un peu comme une chaufferette) pour que les usagers puissent se chauffer les mains, même lorsque le feu est éteint après utilisation. 
 
Cela permet de rentrer le poêle éteint, mais chaud, dans la tente du '' campeur'' sans risque d'incendie, sans risque d'intoxication au monoxyde de carbone. 
 
On se conforme en même temps au règlement: Ce n'est pas un feu à ciel ouvert et le système n'a pas de bonbonne de propane. On brule du bois, du carton, du journal... ce qui est disponible dans la rue. Pas de carburant fossile explosif.
 
On fait donc d'une pierre plusieurs coups:

-Chauffage de l'eau, de la nourriture
-Réchauffage des mains, des pieds
-Réduction des risques (incendie, intoxication)
-Amélioration de l'autonomie des gens
 
Bien sur vous pouvez tout faire circuler. Tout est libre de droit. L'idée est d'aider le plus de personnes possible.

# Aider les personnes en situation d'itinérance

Je trouve ce projet très intéressant pour les amateurs de camping.  Solution très intéressantes à un coût abordable.  Puisque ce projet est à la base développé pour les personnes en situation d'itinérance, je vous suggère d'imprimer plusieurs copie et de distribuer celles-ci lorsque vous rencontrer un itinérant durant vos voyages.  Nos voyages façonnent notre vision du monde.  Nous pouvons l'améliorer alors pourquoi hésiter.

La notice de fabrication est assez ''simple'', presque sans texte, car elle se doit d'être accessible pour tous, sans contraintes, peu importe la langue parlée. 

[Notice de fabrication](/public/pdf/fiche-rocket-stove.pdf)

---

## Ressource — 1.2 airport services

> **Objectif de la section :** À la fin de ce chapitre, vous saurez transformer vos temps d'attente en moments de repos, gérer vos bagages comme un professionnel et réserver vos transferts sans stress dès votre arrivée.

---

## 1. Le Confort de l'Escale : Les Salons (Lounges)
Ne restez plus assis sur une chaise en plastique pendant 4 heures. Même sans billet Business, vous pouvez accéder au confort.
*   🥇 **Le Sésame Mondial :** [Priority Pass](https://www.prioritypass.com/). Accès à 1 600+ salons avec douches, buffets et Wi-Fi haut débit.
*   🥈 **L'Option à la demande :** [Loungebuddy](https://www.loungebuddy.com/). Idéal pour acheter un accès ponctuel sans abonnement annuel.

## 2. La Gestion des Bagages : Libérez vos mains
Si vous avez une longue escale en ville ou si vous voulez envoyer vos valises directement à l'hôtel :
*   📦 **Consignes en ville :** [Stasher](https://stasher.com/) ou [Bounce](https://usebounce.com/). Utilisez ces services pour laisser vos sacs en sécurité dans des commerces partenaires et explorer la ville léger.
*   🚚 **Expédition de bagages :** [Luggage Forward](https://www.luggageforward.com/) ou [Send My Bag](https://www.sendmybag.com/). Parfait pour envoyer vos valises de ski ou de golf directement à destination.

## 3. Transferts : Éviter la cohue à l'arrivée
Réserver son transport à l'avance est le meilleur moyen d'éviter les arnaques de taxi.
*   🚕 **Transfert Privé :** [Welcome Pickups](https://www.welcomepickups.com/). Un chauffeur vous attend avec une pancarte, connaît votre vol et vous donne des conseils locaux.
*   🚐 **Navettes Partagées :** [SuperShuttle](https://www.supershuttle.com/). L'option économique pour les aéroports américains.

---

## 🛠️ Exercice Pratique du Chapitre
**Votre mission :** 
1. Choisissez votre prochain aéroport de transit (ex: JFK, Heathrow ou Dubaï).
2. Allez sur [Loungebuddy](https://www.loungebuddy.com/) et vérifiez s'il y a un salon accessible dans votre terminal.
3. **Action :** Regardez le prix d'un accès de 3 heures. 
4. **Réflexion :** Entre le prix d'un repas moyen à l'aéroport et le confort d'un salon avec buffet gratuit, quelle option est la plus rentable pour vous ?

---

*Bravo ! Vous avez maintenant les clés pour transformer vos transits en moments privilégiés.*

---

## Ressource — 1.3 bagages

<style>
    .btn-circle { width: 50px; height: 50px; padding: 10px 16px; border-radius: 25px; font-size: 18px; line-height: 1.33; }
    .btn-orange { background-color: #ff851b; border-color: #ff851b; color: white; }
    .btn-orange:hover { background-color: #e67716; border-color: #e67716; color: white; }
    .fab-container { position: fixed; bottom: 80px; right: 40px; z-index: 1000; }
    #bag-table-container { margin-bottom: 30px; background: #fff; padding: 15px; border-radius: 8px; box-shadow: 0 2px 4px rgba(0,0,0,0.05); }
    .checklist-progress { font-size: 0.8em; color: #666; }
</style>

## 🎯 Objectif
Ne rien oublier tout en restant léger. Cette liste interactive vous permet de préparer vos bagages étape par étape.

<!-- trip-only:start -->

### 👥 Mes Listes de Bagages
<div id="bag-table-container">
    <table class="table table-striped" id="bag-table">
        <thead>
            <tr>
                <th>Nom de la liste</th>
                <th>Progression</th>
                <th>Actions</th>
            </tr>
        </thead>
        <tbody>
            <tr><td colspan="3" class="text-center">Chargement des listes...</td></tr>
        </tbody>
    </table>
</div>

---

### 📝 Éditer une Liste de Bagages
<form id="multi-bag-form" class="well">
    <input type="hidden" name="id" id="bag-id">
    
    <div class="form-group">
        <label>Nom de la liste (ex: Sac de Gilles, Matériel Commun...)</label>
        <input type="text" name="nom_liste" id="field-nom_liste" class="form-control" placeholder="Ex: Mon sac à dos" required>
    </div>

    <h4>🎒 Bagage à main (Indispensables)</h4>
    <div class="form-group">
        <label class="checkbox"><input type="checkbox" name="item_passeport" id="field-item_passeport"> Passeport + Copies</label>
        <label class="checkbox"><input type="checkbox" name="item_assurance" id="field-item_assurance"> Attestation d'assurance</label>
        <label class="checkbox"><input type="checkbox" name="item_finances" id="field-item_finances"> Cartes bancaires + Cash</label>
        <label class="checkbox"><input type="checkbox" name="item_tech_base" id="field-item_tech_base"> Téléphone + Chargeur + Powerbank</label>
        <label class="checkbox"><input type="checkbox" name="item_sante_base" id="field-item_sante_base"> Médicaments + Ordonnances</label>
    </div>

    <h4>👕 Vêtements</h4>
    <div class="form-group">
        <label class="checkbox"><input type="checkbox" name="item_vet_sous" id="field-item_vet_sous"> Sous-vêtements (7j)</label>
        <label class="checkbox"><input type="checkbox" name="item_vet_base" id="field-item_vet_base"> Hauts légers / Respirants</label>
        <label class="checkbox"><input type="checkbox" name="item_vet_chaud" id="field-item_vet_chaud"> Couche chaude (Polaire/Doudoune)</label>
        <label class="checkbox"><input type="checkbox" name="item_vet_pluie" id="field-item_vet_pluie"> Coupe-vent / Imperméable</label>
    </div>

    <h4>🚿 Hygiène & Soins</h4>
    <div class="form-group">
        <label class="checkbox"><input type="checkbox" name="item_toilette_solide" id="field-item_toilette_solide"> Savon et Shampoing solides</label>
        <label class="checkbox"><input type="checkbox" name="item_serviette" id="field-item_item_serviette"> Serviette microfibre</label>
        <label class="checkbox"><input type="checkbox" name="item_solaire" id="field-item_item_solaire"> Crème solaire / Répulsif</label>
    </div>

    <h4>🛠️ Équipement Spécifique</h4>
    <div class="form-group">
        <label class="checkbox"><input type="checkbox" name="item_adaptateur" id="field-item_adaptateur"> Adaptateur universel</label>
        <label class="checkbox"><input type="checkbox" name="item_gourde" id="field-item_gourde"> Gourde filtrante</label>
        <label class="checkbox"><input type="checkbox" name="item_cadenas" id="field-item_cadenas"> Cadenas à code</label>
    </div>

    <div class="form-group">
        <label>Notes (Drone, matos rando...)</label>
        <textarea name="notes_bagages" id="field-notes_bagages" class="form-control" rows="3"></textarea>
    </div>

    <div style="margin-top: 30px;">
        <button type="submit" class="btn btn-primary btn-lg" id="submit-btn">💾 Enregistrer cette liste</button>
        <button type="button" class="btn btn-default btn-lg" onclick="clearForm()">Annuler</button>
    </div>
</form>

<div class="fab-container">
    <button class="btn btn-orange btn-circle btn-lg" onclick="clearForm()" title="Ajouter une liste">
        <span class="glyphicon glyphicon-plus"></span>
    </button>
</div>

<script>
    let checklists = [];
    const formID = "checklist-bagages-generique";
    const itemKeys = [
        "item_passeport", "item_assurance", "item_finances", "item_tech_base", "item_sante_base",
        "item_vet_sous", "item_vet_base", "item_vet_chaud", "item_vet_pluie",
        "item_toilette_solide", "item_serviette", "item_solaire",
        "item_adaptateur", "item_gourde", "item_cadenas"
    ];

    document.addEventListener("DOMContentLoaded", function() {
        loadChecklists();
        document.getElementById("multi-bag-form").addEventListener("submit", function(e) {
            e.preventDefault();
            saveCurrentBag();
        });
    });

    async function loadChecklists() {
        try {
            const res = await fetch(`/fr/home/api/get-form/${formID}`);
            const response = await res.json();
            const data = response.data;
            if (data && data.checklists) {
                checklists = data.checklists;
            } else if (data && Object.keys(data).length > 0) {
                const legacy = { id: "legacy-" + Date.now(), nom_liste: "Mon sac à dos", notes_bagages: data.notes_bagages || "" };
                itemKeys.forEach(k => legacy[k] = !!data[k]);
                checklists = [legacy];
            }
            renderTable();
        } catch (err) { console.error(err); }
    }

    function renderTable() {
        const tbody = document.querySelector("#bag-table tbody");
        if (checklists.length === 0) {
            tbody.innerHTML = '<tr><td colspan="3" class="text-center">Aucune liste. Cliquez sur + pour en ajouter.</td></tr>';
            return;
        }
        tbody.innerHTML = "";
        checklists.forEach(c => {
            let checkedCount = 0;
            itemKeys.forEach(k => { if (c[k]) checkedCount++; });
            const percent = Math.round((checkedCount / itemKeys.length) * 100);
            
            const tr = document.createElement("tr");
            tr.innerHTML = `
                <td>${c.nom_liste || '-'}</td>
                <td>
                    <div class="progress" style="margin-bottom:0; height:10px;">
                        <div class="progress-bar" style="width: ${percent}%;"></div>
                    </div>
                    <span class="checklist-progress">${percent}% (${checkedCount}/${itemKeys.length})</span>
                </td>
                <td>
                    <a href="javascript:void(0)" onclick="editBag('${c.id}')" class="btn btn-xs btn-default">Modifier</a>
                    <a href="javascript:void(0)" onclick="deleteBag('${c.id}')" class="btn btn-xs btn-danger">Supprimer</a>
                </td>
            `;
            tbody.appendChild(tr);
        });
    }

    function clearForm() {
        document.getElementById("bag-id").value = "";
        document.getElementById("multi-bag-form").reset();
        document.getElementById("submit-btn").innerHTML = "💾 Enregistrer cette liste";
    }

    function editBag(id) {
        const c = checklists.find(item => item.id === id);
        if (!c) return;
        document.getElementById("bag-id").value = c.id;
        document.getElementById("field-nom_liste").value = c.nom_liste || "";
        document.getElementById("field-notes_bagages").value = c.notes_bagages || "";
        itemKeys.forEach(k => {
            document.getElementById("field-" + k).checked = !!c[k];
        });
        document.getElementById("submit-btn").innerHTML = "💾 Mettre à jour cette liste";
        document.getElementById("multi-bag-form").scrollIntoView({ behavior: 'smooth' });
    }

    async function deleteBag(id) {
        if (!confirm("Supprimer cette liste ?")) return;
        checklists = checklists.filter(c => c.id !== id);
        await saveAll();
        renderTable();
        if (document.getElementById("bag-id").value === id) clearForm();
    }

    async function saveCurrentBag() {
        const id = document.getElementById("bag-id").value;
        const bagData = {
            id: id || "bg-" + Date.now(),
            nom_liste: document.getElementById("field-nom_liste").value,
            notes_bagages: document.getElementById("field-notes_bagages").value
        };
        itemKeys.forEach(k => {
            bagData[k] = document.getElementById("field-" + k).checked;
        });

        if (id) {
            const index = checklists.findIndex(c => c.id === id);
            if (index !== -1) checklists[index] = bagData;
        } else {
            checklists.push(bagData);
        }

        await saveAll();
        renderTable();
        clearForm();
        alert("Checklist enregistrée !");
    }

    async function saveAll() {
        const btn = document.getElementById("submit-btn");
        const originalText = btn.innerHTML;
        btn.disabled = true;
        btn.innerHTML = "⌛ Sauvegarde...";
        try {
            await fetch("/fr/home/api/save-form", {
                method: "POST",
                headers: { "Content-Type": "application/json" },
                body: JSON.stringify({ formID: formID, data: { checklists: checklists } })
            });
        } catch (err) { console.error(err); }
        finally {
            btn.disabled = false;
            btn.innerHTML = originalText;
        }
    }
</script>

<!-- trip-only:end -->

---

### 💡 Règle d'or : "Less is More"
Si vous hésitez pour un vêtement, **ne le prenez pas**. On trouve tout partout dans le monde, et chaque kilo en moins est une victoire pour votre dos et votre mobilité.

---

## Ressource — 1.4 taxi

Découvrez les principales applications pour réserver un taxi partout dans le monde. Ce guide présente les fonctionnalités, la disponibilité et les avantages de chaque service afin de vous aider à choisir la solution la mieux adaptée à vos besoins de transport.

- [Bolt](https://bolt.eu/)  Bolt est une plateforme de réservation de voitures disponible dans de nombreuses villes à travers le monde. Elle propose des services de transport à la demande, notamment des taxis et des trottinettes électriques.
- [Didi Chuxing](https://www.didiglobal.com/)  Didi Chuxing est la plus grande plateforme de réservation de voitures en Chine et a étendu ses services à d'autres pays.
- [Grab](https://www.grab.com/)   Grab est un service de réservation de voitures très répandu en Asie du Sud-Est. Il propose des options de taxi, de voiture privée, de moto et d'autres moyens de transport.
- [Lyft](https://www.lyft.com/)  Lyft est une autre application de réservation de voitures très populaire disponible dans de nombreuses villes à travers le monde. Elle offre des fonctionnalités similaires à Uber.
- [Ola](https://www.olacabs.com/)   Ola est l'un des services de réservation de voitures les plus importants en Inde. Il opère dans plusieurs villes et propose différentes catégories de véhicules.
- [Uber](https://www.uber.com/)   Uber est l'un des services de réservation de voitures les plus largement utilisés dans le monde. Il opère dans de nombreux pays et vous permet de réserver un taxi en quelques clics sur votre smartphone.

> La disponibilité peut varier selon votre emplacement. Vérifiez chaque application dans votre région et tenez compte des avis, tarifs et fonctionnalités de sécurité.

---

## Ressource — 1.5 guided tours activities

> **Objectif de la section :** À la fin de ce chapitre, vous saurez dénicher les expériences les plus authentiques, éviter les files d'attente interminables dans les musées et choisir la plateforme adaptée à votre soif d'aventure.

---

## 1. La Stratégie du "Passage Prioritaire"
Rien ne gâche plus un voyage que de passer 3 heures dans une file d'attente sous le soleil. Pour les grands classiques (Louvre, Colisée, Sagrada Familia), la réservation en amont est **obligatoire**.

*   🥇 **Le Géant Mondial :** [Viator](https://www.viator.com/) (Groupe TripAdvisor). Idéal pour comparer des milliers d'avis.
*   🥈 **L'Expert Européen :** [Tiqets](https://www.tiqets.com/). Le meilleur pour les billets "coupe-file" instantanés sur smartphone.
*   🥉 **L'Alternative Espagnole/Latine :** [Civitatis](https://www.civitatis.com/). Très fort pour les visites en français en Europe et en Amérique Latine.

## 2. Sortir des Sentiers Battus (Le Vrai Voyage)
Si vous cherchez l'insolite, la pépite cachée que personne d'autre ne voit, voici vos outils :

*   🕵️ **[Atlas Obscura](https://www.atlasobscura.com/) :** Le catalogue mondial des lieux étranges et fascinants. Indispensable pour l'explorateur curieux.
*   🗺️ **[GetYourGuide](https://www.getyourguide.com/) :** Parfait pour trouver des petits guides locaux qui vous racontent la "vrai" histoire de leur quartier.
*   🎒 **[Intrepid Travel](https://www.intrepidtravel.com/) :** Pour ceux qui veulent des circuits de plusieurs jours en petit groupe avec une éthique de voyage responsable.

## 3. Le Conseil de l'Expert : Les "Free Tours"
Dans presque toutes les grandes villes du monde, des guides proposent des "Free Walking Tours". 
*   **Le concept :** La visite est gratuite, vous donnez un pourboire à la fin selon votre satisfaction. 
*   **Pourquoi ?** C'est souvent la meilleure introduction à une ville le premier jour pour comprendre sa géographie et son histoire.

---

## 🛠️ Exercice Pratique du Chapitre
**Votre mission :** 
1. Choisissez une ville que vous ne connaissez pas encore.
2. Allez sur [Atlas Obscura](https://www.atlasobscura.com/) et trouvez **UN** lieu insolite dans cette ville.
3. Allez sur [Tiqets](https://www.tiqets.com/) et vérifiez le prix d'entrée du monument principal.
4. **Action :** Notez l'économie de temps réalisée en réservant un billet "Coupe-file" plutôt que d'attendre sur place.
5. **Réflexion :** Préférez-vous une visite guidée historique ou une expérience culinaire locale ? Pourquoi ?

---

*Bravo ! Vous avez maintenant les clés pour vivre des moments uniques.*

---

## Ressource — 1.6 weather forecast

> **Objectif de la section :** À la fin de ce chapitre, vous saurez interpréter les cartes météo professionnelles et utiliser les bons outils pour anticiper les tempêtes, les orages et les changements brusques de température.

---

## 1. La Météo : Un facteur de sécurité vital
Que vous soyez en mer, en montagne ou en ville, la météo dicte vos journées. Ignorer une prévision peut transformer une excursion idyllique en une situation de survie (hypothermie, crue subite, tempête en mer).

## 2. Votre Arsenal Météorologique (Le Match)

Selon votre besoin de précision, voici les outils à maîtriser :

*   🥇 **Le Plus Visuel & Professionnel :** [Ventusky.com](https://www.ventusky.com). C'est l'outil des experts. Il vous montre le mouvement des masses d'air, les fronts de pluie et les vents en temps réel. Indispensable pour voir "arriver" le mauvais temps.
*   🥈 **La Référence Mondiale (Fiabilité) :** [AccuWeather](https://www.accuweather.com). Très fort pour les prévisions locales à l'heure près et les alertes "RealFeel" (température ressentie selon le vent et l'humidité).
*   🥉 **L'Option "Navigation" :** [Weather.com](https://www.weather.com). Idéal pour une vue globale rapide avant un trajet en avion ou en voiture.

## 3. Le Conseil de l'Expert : La "Règle des Trois Sources"
Pour les activités à risque (rando, bateau, kayak), ne vous fiez jamais à une seule application.
*   **Action :** Croisez les données de [Ventusky](https://www.ventusky.com) (visuel) avec [AccuWeather](https://www.accuweather.com) (texte) et une application locale (ex: Météo France au pays). Si les trois sont d'accord, c'est fiable. Si elles divergent, soyez extrêmement prudent !

---

## 🛠️ Exercice Pratique du Chapitre
**Votre mission :** 
1. Allez sur [Ventusky.com](https://www.ventusky.com).
2. Recherchez votre ville ou votre prochaine étape de voyage.
3. **Action :** Activez la couche "Vitesse du vent" ou "Pluie" (précipitations).
4. **Observation :** Regardez l'évolution sur les 24 prochaines heures. Y a-t-il un front qui arrive ?
5. **Réflexion :** Comment cette inguide impacterait-elle votre planning de demain (ex: annulation d'une sortie bateau) ?

---

*Bravo ! Vous avez maintenant une longueur d'avance sur les éléments naturels.*

---

## Ressource — 1.7 formulaire animaux

<style>
    .btn-circle { width: 50px; height: 50px; padding: 10px 16px; border-radius: 25px; font-size: 18px; line-height: 1.33; }
    .btn-orange { background-color: #ff851b; border-color: #ff851b; color: white; }
    .btn-orange:hover { background-color: #e67716; border-color: #e67716; color: white; }
    .fab-container { position: fixed; bottom: 80px; right: 40px; z-index: 1000; }
    #pets-table-container { margin-bottom: 30px; background: #fff; padding: 15px; border-radius: 8px; box-shadow: 0 2px 4px rgba(0,0,0,0.05); }
</style>

> **Action Requise (Optionnelle) :** Si vous voyagez avec un chien, un chat ou un autre compagnon, précisez leurs besoins spécifiques. Ces inguides permettront à l'IA de filtrer les hébergements et de vous alerter sur les réglementations sanitaires locales.

### 🐾 Mes compagnons de voyage
<div id="pets-table-container">
    <table class="table table-striped" id="pets-table">
        <thead>
            <tr>
                <th>Nom</th>
                <th>Type</th>
                <th>Taille/Poids</th>
                <th>Actions</th>
            </tr>
        </thead>
        <tbody>
            <tr><td colspan="4" class="text-center">Chargement des profils...</td></tr>
        </tbody>
    </table>
</div>

---

### 📝 Profil d'un Animal
<form id="multi-pet-form" class="well">
    <input type="hidden" name="id" id="pet-id">
    
    <div class="row">
        <div class="col-md-6">
            <div class="form-group">
                <label>Nom de l'animal</label>
                <input type="text" name="nom" id="field-nom" class="form-control" placeholder="Ex: Rex" required>
            </div>
        </div>
        <div class="col-md-6">
            <div class="form-group">
                <label>Type d'animal</label>
                <select name="type_animal" id="field-type_animal" class="form-control">
                    <option value="aucun">- Choisir -</option>
                    <option value="chien">Chien</option>
                    <option value="chat">Chat</option>
                    <option value="autre">Autre (Oiseau, Reptile...)</option>
                </select>
            </div>
        </div>
    </div>

    <div class="form-group">
        <label>Taille et Poids</label>
        <input type="text" name="taille_poids" id="field-taille_poids" class="form-control" placeholder="Ex: Moyen, 15kg">
    </div>

    <div class="form-group">
        <label>État de santé et médicaments</label>
        <textarea name="sante" id="field-sante" class="form-control" rows="2" placeholder="Traitement en contenu, allergies..."></textarea>
    </div>

    <div class="form-group">
        <label>Documents à jour</label><br>
        <label class="checkbox-inline"><input type="checkbox" name="docs_passeport" id="field-docs_passeport"> Passeport International</label>
        <label class="checkbox-inline"><input type="checkbox" name="docs_vaccins" id="field-docs_vaccins"> Vaccins à jour</label>
        <label class="checkbox-inline"><input type="checkbox" name="docs_micropuce" id="field-docs_micropuce"> Micro-puce</label>
    </div>

    <div class="form-group" style="margin-top: 20px;">
        <label>Besoins spécifiques en déplacement</label>
        <textarea name="besoins_specifiques" id="field-besoins_specifiques" class="form-control" rows="3" placeholder="Ex: Peur des transports, besoin de pauses fréquentes..."></textarea>
    </div>

    <div style="margin-top: 30px;">
        <button type="submit" class="btn btn-primary btn-lg" id="submit-btn">💾 Enregistrer ce profil</button>
        <button type="button" class="btn btn-default btn-lg" onclick="clearForm()">Annuler</button>
    </div>
</form>

<div class="fab-container">
    <button class="btn btn-orange btn-circle btn-lg" onclick="clearForm()" title="Ajouter un animal">
        <span class="glyphicon glyphicon-plus"></span>
    </button>
</div>

<script>
    let pets = [];
    const formID = "profil-animaux";

    document.addEventListener("DOMContentLoaded", function() {
        loadPets();

        document.getElementById("multi-pet-form").addEventListener("submit", function(e) {
            e.preventDefault();
            saveCurrentPet();
        });
    });

    async function loadPets() {
        try {
            const res = await fetch(`/fr/home/api/get-form/${formID}`);
            const response = await res.json();
            const data = response.data;

            if (data && data.pets) {
                pets = data.pets;
            } else if (data && Object.keys(data).length > 0 && data.voyage_avec_animaux === "oui") {
                // Migration logic
                pets = [{
                    id: "legacy-" + Date.now(),
                    nom: "Mon Animal",
                    type_animal: data.type_animal || "aucun",
                    taille_poids: data.taille_poids_animal || "",
                    sante: data.sante_animale || "",
                    docs_passeport: !!data.docs_passeport_animal,
                    docs_vaccins: !!data.docs_vaccins_rage,
                    docs_micropuce: !!data.docs_micropuce,
                    besoins_specifiques: data.besoins_deplacement_animal || ""
                }];
            }
            renderTable();
        } catch (err) {
            console.error("Erreur chargement profils animaux:", err);
        }
    }

    function renderTable() {
        const tbody = document.querySelector("#pets-table tbody");
        if (pets.length === 0) {
            tbody.innerHTML = '<tr><td colspan="4" class="text-center">Aucun animal enregistré. Cliquez sur + pour en ajouter un.</td></tr>';
            return;
        }

        tbody.innerHTML = "";
        pets.forEach(p => {
            const tr = document.createElement("tr");
            tr.innerHTML = `
                <td>${p.nom || '-'}</td>
                <td>${p.type_animal || '-'}</td>
                <td>${p.taille_poids || '-'}</td>
                <td>
                    <a href="javascript:void(0)" onclick="editPet('${p.id}')" class="btn btn-xs btn-default">Modifier</a>
                    <a href="javascript:void(0)" onclick="deletePet('${p.id}')" class="btn btn-xs btn-danger">Supprimer</a>
                </td>
            `;
            tbody.appendChild(tr);
        });
    }

    function clearForm() {
        document.getElementById("pet-id").value = "";
        document.getElementById("multi-pet-form").reset();
        document.getElementById("submit-btn").innerHTML = "💾 Enregistrer ce profil";
        document.getElementById("field-nom").focus();
    }

    function editPet(id) {
        const p = pets.find(item => item.id === id);
        if (!p) return;

        document.getElementById("pet-id").value = p.id;
        document.getElementById("field-nom").value = p.nom || "";
        document.getElementById("field-type_animal").value = p.type_animal || "aucun";
        document.getElementById("field-taille_poids").value = p.taille_poids || "";
        document.getElementById("field-sante").value = p.sante || "";
        document.getElementById("field-besoins_specifiques").value = p.besoins_specifiques || "";
        
        document.getElementById("field-docs_passeport").checked = !!p.docs_passeport;
        document.getElementById("field-docs_vaccins").checked = !!p.docs_vaccins;
        document.getElementById("field-docs_micropuce").checked = !!p.docs_micropuce;

        document.getElementById("submit-btn").innerHTML = "💾 Mettre à jour ce profil";
        document.getElementById("field-nom").focus();
        
        // Scroll to form
        document.getElementById("multi-pet-form").scrollIntoView({ behavior: 'smooth' });
    }

    async function deletePet(id) {
        if (!confirm("Supprimer ce profil ?")) return;
        pets = pets.filter(p => p.id !== id);
        await saveAll();
        renderTable();
        if (document.getElementById("pet-id").value === id) {
            clearForm();
        }
    }

    async function saveCurrentPet() {
        const id = document.getElementById("pet-id").value;
        const petData = {
            id: id || "p-" + Date.now(),
            nom: document.getElementById("field-nom").value,
            type_animal: document.getElementById("field-type_animal").value,
            taille_poids: document.getElementById("field-taille_poids").value,
            sante: document.getElementById("field-sante").value,
            besoins_specifiques: document.getElementById("field-besoins_specifiques").value,
            docs_passeport: document.getElementById("field-docs_passeport").checked,
            docs_vaccins: document.getElementById("field-docs_vaccins").checked,
            docs_micropuce: document.getElementById("field-docs_micropuce").checked
        };

        if (id) {
            const index = pets.findIndex(p => p.id === id);
            if (index !== -1) pets[index] = petData;
        } else {
            pets.push(petData);
        }

        await saveAll();
        renderTable();
        clearForm();
        alert("Profil animalier enregistré !");
    }

    async function saveAll() {
        const btn = document.getElementById("submit-btn");
        const originalText = btn.innerHTML;
        btn.disabled = true;
        btn.innerHTML = "⌛ Sauvegarde...";

        try {
            const res = await fetch("/fr/home/api/save-form", {
                method: "POST",
                headers: { "Content-Type": "application/json" },
                body: JSON.stringify({ formID: formID, data: { pets: pets } })
            });
            const result = await res.json();
            if (result.status !== "success") {
                alert("Erreur lors de la sauvegarde.");
            }
        } catch (err) {
            console.error("Save error:", err);
            alert("Erreur de connexion.");
        } finally {
            btn.disabled = false;
            btn.innerHTML = originalText;
        }
    }
</script>

---

### 🎯 Utilité de ce formulaire
En informant l'IA sur vos compagnons à quatre pattes :
1.  **Hébergements filtrés :** L'Assistant recherchera exclusivement des lieux acceptant les animaux (Pet-Friendly).
2.  **Réglementations Sanitaires :** Le système vous alertera sur les tests sérologiques ou quarantaines obligatoires selon les pays traversés.
3.  **Logistique Adaptée :** Votre itinéraire inclura des suggestions de parcs ou zones de détente appropriées.

---

## Ressource — 1.8 slides chapitre 7

<!-- .slide: data-background-image="/public/img/outdoorGears.webp" data-background-opacity="0.1" -->
## Van-Life, Road-Trip et Vols

---

### Pirater les Billets d'Avion
- Algorithmes de réservation.
- Services aéroportuaires et salons.

---

### Bivouacs & Spots Secrets
- Trouver les meilleurs endroits pour son van ou camping-car.

---

### Action :
1. Télécharge la liste des équipements essentiels.
2. Compare ton prochain vol sur 3 plateformes.

---

## Ressource — 1.9 gadgets nomades experts

# 1.9 - Les Gadgets Nomades des Experts

Pour l'voyageur bien préparé, le bon équipement peut faire toute la différence entre un voyage correct et une expérience inoubliable. Voici quelques trouvailles technologiques et vestimentaires particulièrement utiles.

## 1. Milo : Le Communicateur de Groupe sans Réseau
Le **Milo Action Communicator** permet de parler à vos compagnons de voyage en direct, sans avoir besoin de réseau cellulaire. C'est idéal pour les randonnées, les balades à vélo, ou si vous explorez un nouveau lieu et que vous souhaitez rester en contact immédiat.

## 2. Rapid Radios : Des Talkies-Walkies à Longue Portée
Pour ceux qui voyagent en caravane ou en van, les **Rapid Radios** offrent une communication stable sur de longues distances, sans frais mensuels. C'est parfait pour se coordonner sur la route ou en forêt là où le signal cellulaire est inexistant.

## 3. Pantalons Thermiques de Haute Performance
Le confort thermique est essentiel. Des marques comme **POLAK™** proposent des pantalons d'hiver capables de résister à des températures allant jusqu'à -40 degrés tout en restant légers et performants. Un must pour les explorateurs qui n'ont pas peur du froid !

---

<div class="alert alert-info border-0 shadow-sm rounded-4 p-4 mt-5">
    <div class="d-flex align-items-center">
        <div class="flex-shrink-0"><i class="bi bi-shield-check text-info display-6 me-4"></i></div>
        <div>
            <h5 class="alert-heading mb-1 fw-bold">Note sur la Sécurité</h5>
            <p class="mb-0">Pour Gilles et Claire : Ces outils de communication (Milo/Radios) complètent parfaitement votre appareil Zoleo ou iPhone par satellite pour assurer une sécurité maximale, même en zone blanche.</p>
        </div>
    </div>
</div>

<div class="text-center mt-5">
    <a href="/fr/home/fr/7-logistique/expedition-overland-cargo" class="btn btn-primary btn-lg px-5 shadow-sm fw-bold">
        étapes SUIVANTE : EXPÉDITION OVERLAND ET CARGO <i class="bi bi-arrow-right ms-2"></i>
    </a>
</div>

---

## Ressource — 2.1 formulaire equipement

<style>
    .btn-circle { width: 50px; height: 50px; padding: 10px 16px; border-radius: 25px; font-size: 18px; line-height: 1.33; }
    .btn-orange { background-color: #ff851b; border-color: #ff851b; color: white; }
    .btn-orange:hover { background-color: #e67716; border-color: #e67716; color: white; }
    .fab-container { position: fixed; bottom: 80px; right: 40px; z-index: 1000; }
    #equip-table-container { margin-bottom: 30px; background: #fff; padding: 15px; border-radius: 8px; box-shadow: 0 2px 4px rgba(0,0,0,0.05); }
</style>

> **Action Requise :** Faites l’inventaire de vos outils technologiques et de votre autonomie logistique. Ces inguides permettront à l'IA d'affiner ses recommandations de bivouacs, de sécurité et de création de contenu.

### 🛠️ Mon Inventaire Matériel
<div id="equip-table-container">
    <table class="table table-striped" id="equip-table">
        <thead>
            <tr>
                <th>Catégorie</th>
                <th>Équipement / Modèle</th>
                <th>État/Notes</th>
                <th>Actions</th>
            </tr>
        </thead>
        <tbody>
            <tr><td colspan="4" class="text-center">Chargement de l'inventaire...</td></tr>
        </tbody>
    </table>
</div>

---

### 📝 Ajouter/Modifier un Équipement
<form id="multi-equip-form" class="well">
    <input type="hidden" name="id" id="equip-id">
    
    <div class="row">
        <div class="col-md-6">
            <div class="form-group">
                <label>Catégorie</label>
                <select name="categorie" id="field-categorie" class="form-control">
                    <option value="multimedia">Multimédia & Photo</option>
                    <option value="energie">Énergie & Autonomie</option>
                    <option value="eau">Eau & Survie</option>
                    <option value="comm">Communication Spécialisée</option>
                    <option value="outils">Outils & Divers</option>
                </select>
            </div>
        </div>
        <div class="col-md-6">
            <div class="form-group">
                <label>Nom de l'équipement / Modèle</label>
                <input type="text" name="nom" id="field-nom" class="form-control" placeholder="Ex: Drone DJI Mini 4 Pro" required>
            </div>
        </div>
    </div>

    <div class="form-group">
        <label>Caractéristiques ou État</label>
        <input type="text" name="notes" id="field-notes" class="form-control" placeholder="Ex: Neuf, 3 batteries, filtre ND...">
    </div>

    <div class="form-group">
        <label>Options d'autonomie</label><br>
        <label class="checkbox-inline"><input type="checkbox" name="opt_solar" id="field-opt_solar"> Panneaux Solaires</label>
        <label class="checkbox-inline"><input type="checkbox" name="opt_batt" id="field-opt_batt"> Batterie Haute Capacité</label>
        <label class="checkbox-inline"><input type="checkbox" name="opt_filter" id="field-opt_filter"> Filtre/Purificateur</label>
    </div>

    <div style="margin-top: 30px;">
        <button type="submit" class="btn btn-primary btn-lg" id="submit-btn">💾 Enregistrer cet équipement</button>
        <button type="button" class="btn btn-default btn-lg" onclick="clearForm()">Annuler</button>
    </div>
</form>

<div class="fab-container">
    <button class="btn btn-orange btn-circle btn-lg" onclick="clearForm()" title="Ajouter un équipement">
        <span class="glyphicon glyphicon-plus"></span>
    </button>
</div>

<script>
    let inventory = [];
    const formID = "profil-equipement";

    document.addEventListener("DOMContentLoaded", function() {
        loadInventory();
        document.getElementById("multi-equip-form").addEventListener("submit", function(e) {
            e.preventDefault();
            saveCurrentEquip();
        });
    });

    async function loadInventory() {
        try {
            const res = await fetch(`/fr/home/api/get-form/${formID}`);
            const response = await res.json();
            const data = response.data;
            if (data && data.inventory) {
                inventory = data.inventory;
            } else if (data && Object.keys(data).length > 0) {
                // Legacy migration
                if (data.equip_drone) inventory.push({ id: "l1", categorie: "multimedia", nom: "Drone", notes: "" });
                if (data.equip_camera_pro) inventory.push({ id: "l2", categorie: "multimedia", nom: "Caméra Pro", notes: "" });
                if (data.energy_solar) inventory.push({ id: "l3", categorie: "energie", nom: "Solaire", notes: "" });
            }
            renderTable();
        } catch (err) { console.error(err); }
    }

    function renderTable() {
        const tbody = document.querySelector("#equip-table tbody");
        if (inventory.length === 0) {
            tbody.innerHTML = '<tr><td colspan="4" class="text-center">Aucun équipement. Cliquez sur + pour en ajouter.</td></tr>';
            return;
        }
        tbody.innerHTML = "";
        inventory.forEach(e => {
            const tr = document.createElement("tr");
            tr.innerHTML = `
                <td>${e.categorie || '-'}</td>
                <td>${e.nom || '-'}</td>
                <td>${e.notes || '-'}</td>
                <td>
                    <a href="javascript:void(0)" onclick="editEquip('${e.id}')" class="btn btn-xs btn-default">Modifier</a>
                    <a href="javascript:void(0)" onclick="deleteEquip('${e.id}')" class="btn btn-xs btn-danger">Supprimer</a>
                </td>
            `;
            tbody.appendChild(tr);
        });
    }

    function clearForm() {
        document.getElementById("equip-id").value = "";
        document.getElementById("multi-equip-form").reset();
        document.getElementById("submit-btn").innerHTML = "💾 Enregistrer cet équipement";
    }

    function editEquip(id) {
        const e = inventory.find(item => item.id === id);
        if (!e) return;
        document.getElementById("equip-id").value = e.id;
        document.getElementById("field-categorie").value = e.categorie || "multimedia";
        document.getElementById("field-nom").value = e.nom || "";
        document.getElementById("field-notes").value = e.notes || "";
        document.getElementById("field-opt_solar").checked = !!e.opt_solar;
        document.getElementById("field-opt_batt").checked = !!e.opt_batt;
        document.getElementById("field-opt_filter").checked = !!e.opt_filter;
        document.getElementById("submit-btn").innerHTML = "💾 Mettre à jour cet équipement";
        document.getElementById("multi-equip-form").scrollIntoView({ behavior: 'smooth' });
    }

    async function deleteEquip(id) {
        if (!confirm("Supprimer cet équipement ?")) return;
        inventory = inventory.filter(e => e.id !== id);
        await saveAll();
        renderTable();
        if (document.getElementById("equip-id").value === id) clearForm();
    }

    async function saveCurrentEquip() {
        const id = document.getElementById("equip-id").value;
        const equipData = {
            id: id || "eq-" + Date.now(),
            categorie: document.getElementById("field-categorie").value,
            nom: document.getElementById("field-nom").value,
            notes: document.getElementById("field-notes").value,
            opt_solar: document.getElementById("field-opt_solar").checked,
            opt_batt: document.getElementById("field-opt_batt").checked,
            opt_filter: document.getElementById("field-opt_filter").checked
        };
        if (id) {
            const index = inventory.findIndex(e => e.id === id);
            if (index !== -1) inventory[index] = equipData;
        } else {
            inventory.push(equipData);
        }
        await saveAll();
        renderTable();
        clearForm();
        alert("Équipement enregistré !");
    }

    async function saveAll() {
        const btn = document.getElementById("submit-btn");
        const originalText = btn.innerHTML;
        btn.disabled = true;
        btn.innerHTML = "⌛ Sauvegarde...";
        try {
            await fetch("/fr/home/api/save-form", {
                method: "POST",
                headers: { "Content-Type": "application/json" },
                body: JSON.stringify({ formID: formID, data: { inventory: inventory } })
            });
        } catch (err) { console.error(err); }
        finally {
            btn.disabled = false;
            btn.innerHTML = originalText;
        }
    }
</script>

---

### 🎯 Pourquoi cet inventaire est-il vital ?
En connaissant vos ressources :
1.  **Recommandations de Bivouac :** L'IA ne vous proposera pas de bivouacs sauvages isolés si vous n'avez aucune autonomie en électricité ou en eau.
2.  **Réglementation Drone :** Le système vérifiera automatiquement les lois sur les drones pour votre prochaine destination.
3.  **Checklist de Sécurité :** Si vous possédez un messager satellite, l'IA l'intégrera dans votre protocole d'urgence personnalisé.

---

## Ressource — 2.2 travel booking platforms

> **Objectif de la section :** À la fin de ce chapitre, vous saurez identifier les meilleures plateformes pour économiser sur vos réservations de voyage et vous maîtriserez les techniques pour dénicher les tarifs "cachés" et les remises de dernière minute.

---

## 1. La Stratégie du "Guichet Unique"
Utiliser une plateforme tout-en-un (OTA - Online Travel Agency) peut être avantageux pour simplifier vos réservations et obtenir des remises sur les forfaits (Vol + Hôtel).

*   🥇 **Le Géant Européen :** [Booking.com](https://www.booking.com/). Inégalé pour sa base de données d'hôtels et ses politiques d'annulation flexibles.
*   🥈 **L'Option "Forfaits" :** [Expedia](https://www.expedia.com/). Très fort pour combiner vol, hôtel et voiture dans une seule transaction avec une remise globale.
*   🥉 **L'Alternative Asiatique :** [Trip.com](https://www.trip.com/). Souvent plus puissant pour les voyages en Asie, avec une interface ultra fluide.

## 2. Dénicher les "Tarifs Erreur" & Les Remises Cachées
Pour les voyageurs soucieux de leur budget, voici les outils secrets :

*   🕵️ **[Priceline](https://www.priceline.com/) :** Utilisez l'option *"Nommez votre propre prix"* ou les *"Hôtels Secrets"* pour obtenir des réductions allant jusqu'à 60 %.
*   ⚡ **[CheapOair](https://www.cheapoair.com/) :** Spécialisé dans les billets de dernière minute et les vols à prix réduit.
*   🔔 **[Dollar Flight Club](https://www.dollarflightclub.com/) :** Service d'abonnement qui vous prévient dès qu'une erreur de prix apparaît sur un vol majeur.

## 3. Le Conseil de l'Expert : L'Appel Direct
Même si ces plateformes sont pratiques, ne négligez jamais l'appel direct. 
*   **Action :** Une fois que vous avez trouvé l'hôtel idéal sur Booking, vérifiez son site web officiel ou appelez-les. 
*   **Pourquoi ?** Les hôtels paient 15 à 20 % de commission aux plateformes. Ils seront souvent ravis de vous offrir un petit-déjeuner gratuit ou un surclassement si vous réservez en direct au même prix.

---

## 🛠️ Exercice Pratique du Chapitre
**Votre mission :** 
1. Choisissez une destination et un hôtel qui vous plaît sur [Booking.com](https://www.booking.com/).
2. Notez le prix pour 3 nuits.
3. **Action :** Allez sur le site officiel de cet hôtel. 
4. **Vérification :** Le prix est-il le même ? Y a-t-il une offre spéciale (ex: "Reserve Direct & Save") ?
5. **Réflexion :** Quelle plateforme choisiriez-vous pour une réservation avec annulation gratuite à 24h du départ ?

---

*Bravo ! Vous venez d'acquérir les réflexes d'un voyageur averti qui sait optimiser chaque euro.*

---

## Ressource — 2.3 flight booking platforms

> **Objectif de la section :** À la fin de ce chapitre, vous saurez utiliser les moteurs de recherche de vols comme un professionnel pour dénicher des tarifs "erreur", éviter les hausses de prix liées aux cookies et choisir la plateforme adaptée à votre itinéraire.

---

## 1. La Règle d'Or : Le Mode Incognito
Les compagnies aériennes utilisent des "trackers" pour voir si vous revenez plusieurs fois sur le même vol. 
*   **Action :** Effectuez TOUJOURS vos recherches en **Mode Navigation Privée** (Incognito) pour éviter que les prix n'augmentent artificiellement lors de votre deuxième visite.

## 2. Votre Arsenal de Recherche (Les "Big Three")
Ne vous contentez pas d'un seul site. Voici les trois piliers pour comparer :

1.  🥇 **Le plus puissant :** [Google Flights](https://www.google.com/travel/flights). Indispensable pour voir les tendances de prix sur un calendrier et explorer des régions entières.
2.  🥈 **Le plus flexible :** [Skyscanner](https://www.skyscanner.com/). Idéal pour la recherche "Partout" quand vous n'avez pas de destination précise.
3.  🥉 **L'algorithme malin :** [Kiwi.com](https://www.kiwi.com/). Utilise le "Virtual Interlining" pour combiner des compagnies qui ne se parlent pas normalement (ex: Ryanair + Air Canada). *Attention : lisez bien les conditions de transfert !*

## 3. Les Chasseurs de "Tarifs Erreur"
Il arrive que les compagnies fassent des erreurs de prix (ex: un Paris-New York à 150€). Pour ne pas les rater, abonnez-vous à :
*   [Going (ex Scott's Cheap Flights)](https://www.going.com/) : Le leader mondial des alertes.
*   [Dollar Flight Club](https://www.dollarflightclub.com/) : Alertes par email sur les baisses soudaines.
*   [Yulair](https://www.yulair.com/) : Spécialisé sur les départs de Montréal (YUL).

## 4. Quand réserver en direct ?
Une fois le vol trouvé sur un comparateur (Kayak, Momondo, Expedia), je vous conseille souvent de **finaliser l'achat directement sur le site de la compagnie** (Air France, Air Canada, Emirates). 
*   **Pourquoi ?** En cas d'annulation ou de retard, la compagnie vous gérera plus facilement que si vous êtes passé par une agence tierce.

---

## 🛠️ Exercice Pratique du Chapitre
**Votre mission :** 
1. Ouvrez [Google Flights](https://www.google.com/travel/flights) en mode Incognito.
2. Saisissez votre ville de départ et tapez **"Europe"** ou **"Asie"** en destination.
3. **Action :** Utilisez la vue "Calendrier" pour trouver la date la moins chère sur les 6 prochains mois.
4. **Capture :** Notez l'écart de prix entre le vol le moins cher et le vol le plus cher. C'est votre gain potentiel !

---

*Félicitations ! Vous venez de pirater le système des prix aériens.*

---

## Ressource — 2.4 accommodation platforms

> **Objectif de la section :** À la fin de ce chapitre, vous saurez choisir la plateforme d'hébergement adaptée à votre budget et à votre type d'aventure, tout en minimisant les risques de mauvaises surprises.

---

## 1. La Stratégie du "Logement Intelligent"
En voyage long courrier, l'hébergement représente **30 à 50 % de votre budget**. Voici les 3 profils de recherche à maîtriser :

### A. Le Profil "Flexibilité & Sécurité" (Hôtels classiques)
Idéal pour les arrivées tardives ou les courtes escales.
*   **Plateforme recommandée :** [Hotels.com](https://www.hotels.com/). Profitez des programmes de fidélité (ex: une nuit gratuite après 10 nuits) et des politiques d'annulation flexibles.

### B. Le Profil "Authenticité & Immersion" (Locations privées)
Idéal pour des séjours de plus de 3 jours ou pour cuisiner soi-même.
*   **Plateformes recommandées :** [Airbnb](https://www.airbnb.com/) ou [Vrbo](https://www.vrbo.com/). Attention : lisez toujours les avis récents (moins de 6 mois) et vérifiez les frais de nettoyage !

### C. Le Profil "Budget & Communauté" (Économie & Rencontres)
Idéal pour les voyageurs solos ou les petits budgets.
*   🥇 **[Hostelworld](https://www.hostelworld.com/) :** Ne vous fiez pas aux clichés, les auberges proposent souvent des chambres privées avec une ambiance de salon commune.
*   🥇 **[Couchsurfing](https://www.couchsurfing.com/) :** Pour l'immersion totale chez l'habitant. Ce n'est pas qu'un lit gratuit, c'est une porte ouverte sur la culture locale.

## 2. Le Conseil de l'Expert : Vérifier sur Google Maps
Avant de réserver, faites toujours une "Marche Virtuelle" (Street View) autour de l'hébergement. 
*   **Action :** Est-ce que le quartier a l'air sûr ? Y a-t-il une épicerie à proximité ? Un arrêt de transport ? Une vue Google Maps de 6 mois peut vous éviter une zone de travaux bruyants !

---

## 🛠️ Exercice Pratique du Chapitre
**Votre mission :** 
1. Choisissez une ville étape de votre futur voyage (ex: Tokyo, Lisbonne ou Bogota).
2. Recherchez un logement sur [Hotels.com](https://www.hotels.com/) et le même type sur [Airbnb](https://www.airbnb.com/).
3. **Action :** Comparez les prix totaux (frais inclus) et les conditions d'annulation.
4. **Réflexion :** Quel hébergement choisiriez-vous pour une arrivée à 23h après 15h de vol ? Justifiez votre choix.

---

*Bravo ! Vous venez de sécuriser votre confort pour vos prochaines nuits mondiales.*

---

## Ressource — 2.5 car rental

Ces services aident les voyageurs à louer des voitures en comparant les prix.  
Ils s'adressent aux voyageurs routiers à la recherche de flexibilité, leur permettant d'explorer les destinations à leur propre rythme.

- [Discover Cars](https://www.discovercars.com/)  Plateforme comparant les prix des voitures de location de diverses entreprises dans plus de 140 pays.
- [Local Rent](https://localrent.com/)  Se concentre sur les options de location de voitures locales avec des prix compétitifs et une variété de véhicules.
- [Rentalcars.com](https://www.rentalcars.com/)  Grande plateforme comparant les prix de location de voitures de centaines de prestataires.

---

## Ressource — 2.6 car rental taxi

> **Objectif de la section :** À la fin de ce chapitre, vous saurez choisir entre la location de voiture et les applications de taxi selon votre destination, et vous maîtriserez les outils pour éviter les arnaques et les prix gonflés.

---

## 1. La Location de Voiture : Liberté Totale
La voiture est indispensable pour les road-trips (USA, Islande, Australie) mais peut être un fardeau dans les grandes métropoles (Paris, New York, Tokyo).

### Vos outils de comparaison :
*   🥇 **Le Leader Mondial :** [Rentalcars.com](https://www.rentalcars.com/). Idéal pour comparer les géants (Hertz, Avis, Sixt).
*   🥈 **L'Option "Budget" :** [Discover Cars](https://www.discovercars.com/). Souvent plus agressif sur les prix dans les pays moins touristiques.
*   🥉 **L'Expert Local :** [Local Rent](https://localrent.com/). Pour trouver des agences locales (souvent moins chères et plus flexibles) dans certains pays spécifiques.

## 2. Les "Apps" de Taxi : Sécurité & Transparence
Ne montez jamais dans un taxi sans compteur ou sans prix fixe annoncé. Les applications de VTC sont vos meilleures alliées pour éviter les mauvaises surprises.

### Votre Arsenal par Zone Géographique :
*   🌎 **USA & Europe :** [Uber](https://www.uber.com/) ou [Lyft](https://www.lyft.com/). Les classiques incontournables.
*   🇪🇺 **Europe de l'Est & Afrique :** [Bolt](https://bolt.eu/). Souvent moins cher qu'Uber dans ces régions.
*   🌏 **Asie du Sud-Est :** [Grab](https://www.grab.com/). Indispensable en Thaïlande, Vietnam ou Indonésie.
*   🇨🇳 **Chine :** [Didi Chuxing](https://www.didiglobal.com/). Le géant local.

## 3. Le Conseil de l'Expert : L'Arrivée à l'Aéroport
La première heure à destination est la plus vulnérable.
*   **Action :** Avant de décoller, téléchargez l'application locale de taxi de votre destination (ex: Grab pour Bangkok) et configurez votre carte bancaire.
*   **Astuce :** À l'aéroport, évitez les rabatteurs dans le hall. Suivez les panneaux officiels "Taxi" ou utilisez votre application pour commander un véhicule à un point de rendez-vous précis.

---

## 🛠️ Exercice Pratique du Chapitre
**Votre mission :** 
1. Imaginez que vous arrivez à **Bangkok** (Thaïlande) demain. 
2. Recherchez quelle application est la plus utilisée là-bas (Indice : c'est dans la liste ci-dessus).
3. **Action :** Allez sur [Rentalcars.com](https://www.rentalcars.com/) et simulez une location de voiture pour 3 jours à l'aéroport de Bangkok.
4. **Réflexion :** Au vu du trafic et du prix du taxi (très bas en Thaïlande), est-il plus malin de louer une voiture ou d'utiliser les taxis ? Justifiez votre réponse.

---

*Bravo ! Vous avez maintenant les clés d'une mobilité fluide et sécurisée.*

---

## Ressource — 2.7 outdoor exploration platform

> **Objectif de la section :** À la fin de ce chapitre, vous saurez choisir l'équipement technique adapté à votre aventure sans vous surcharger, et vous maîtriserez les plateformes pour dénicher les plus beaux sentiers du monde.

---

## 1. Choisir son Équipement : La Règle des "Trois Couches"
En outdoor, le poids est votre ennemi. Pour vos vêtements, appliquez toujours ce système :
1.  **Couche Respirante :** Pour évacuer la transpiration (synthétique ou laine mérinos).
2.  **Couche Isolante :** Pour garder la chaleur (polaire ou doudoune légère).
3.  **Couche Protectrice :** Pour vous protéger du vent et de la pluie (Gore-Tex ou équivalent).

### Où s'équiper ? (Mes marques de confiance) :
*   🥇 **Le Sac à Dos :** [Osprey](https://www.osprey.com/). Inégalé pour le confort de portage et la garantie à vie.
*   🥈 **Le Bivouac (Tentes/Sacs) :** [Marmot](https://www.marmot.com/) ou [Naturehike](https://naturehike.ca) (excellent rapport qualité/prix pour le vanlife).
*   🥉 **L'Équipement Technique :** [REI](https://www.rei.com/) (USA) ou [MEC](https://www.mec.ca) (Canada) pour les conseils d'experts.

## 2. Dénicher les plus beaux sentiers du monde
Ne vous contentez pas des sentiers balisés ultra-touristiques.
*   🥇 **La Bible du Randonneur :** [AllTrails](https://www.alltrails.com/). Indispensable pour voir les photos récentes des sentiers et les avis sur l'état du chemin.
*   🥈 **Le Planificateur Cycliste :** [Komoot](https://www.komoot.com/). Le meilleur algorithme pour créer des itinéraires à vélo ou à pied selon votre niveau de forme.
*   🥉 **L'Inspiration Locale :** Utilisez [GéoPleinAir](https://www.geopleinair.com) pour le Québec ou [Sentiers de randonnée au Québec](https://www.quebecoriginal.com/fr-ca/voir-et-faire/activites-de-plein-air/randonnee).

## 3. Le Conseil de l'Expert : Respecter la Nature
Appliquez toujours les principes du "Sans Trace" (Leave No Trace). 
*   Emportez TOUS vos déchets.
*   Restez sur les sentiers pour ne pas éroder le sol.
*   Respectez la faune (observez de loin).

---

## 🛠️ Exercice Pratique du Chapitre
**Votre mission :** 
1. Allez sur [AllTrails](https://www.alltrails.com/).
2. Recherchez une randonnée de "Niveau Modéré" près de chez vous ou de votre prochaine destination.
3. **Action :** Regardez les avis des 3 derniers jours. Y a-t-il de la boue ? Des arbres tombés ? 
4. **Inventaire :** Sortez vos chaussures de marche. Sont-elles encore en bon état pour 15 km ? Faut-il les imperméabiliser ?

---

*Bravo ! Vous êtes prêt à explorer le monde sauvage avec respect et efficacité.*

---

## Ressource — 2.8 outdoor gears

Explorez les meilleurs détaillants en plein air offrant des équipements et des vêtements de qualité pour vos aventures.  
De la randonnée au camping, trouvez tout ce dont vous avez besoin dans ces marques de confiance :

- [Amazon.ca](https://amzn.to/48bLwoE)  Vaste sélection d'équipements pour camping, randonnée et sports.
- [Amazon.com](https://amzn.to/3Yb6bnY)  Équipements de plein air pour toutes activités : tentes, sacs de couchage et plus.
- [Backcountry](https://www.backcountry.com/)  Équipements et vêtements spécialisés pour ski, snowboard, VTT et randonnée.
- [Cabela's](https://www.cabelas.com/)  Équipements extérieurs pour chasse, pêche et camping.
- [Cotopaxi](https://www.cotopaxi.com/)  Produits colorés et durables avec engagement social et environnemental.
- [Evo](https://www.evo.com/)  Affiliation pour promouvoir équipement ski, snowboard, surf et autres activités.
- [GearX](https://www.gearx.com)  Équipements et vêtements à prix réduits pour diverses activités de plein air.
- [GlobeTrott-Air](https://www.globetrott-air.com)  Éléments essentiels écoresponsables : cartes, serviettes, literie et sacs en cuir vintage.
- [Marmot](https://www.marmot.com/)  Vêtements et équipements de haute qualité : vestes, tentes et sacs de couchage.
- [Naturehike Canada](https://naturehike.ca)  Équipements pour camping, randonnée, glamping et vanlife, durables et confortables.
- [North Face](https://www.thenorthface.com/)  Vêtements, chaussures et équipements pour escalade, randonnée et sports d’hiver.
- [Osprey](https://www.osprey.com/)  Sacs à dos et équipements pour randonnée, escalade et voyages, confort et fonctionnalité.
- [REI](https://www.rei.com/)  Équipements et vêtements pour camping, randonnée, escalade et vélo. Conseils et soutien communautaire.

---

## Ressource — 3.1 expedition overland cargo

> **Objectif Avancé :** Passer d'un continent à l'autre avec son propre véhicule.

## 🧠 La Logistique Intercontinentale
Maîtriser l'expédition maritime de votre VR/4x4 :
1. Ro-Ro vs Conteneur : Avantages, inconvénients et coûts cachés.
2. Le Carnet de Passage en Douane (CPD) et les protocoles d'import temporaire.
3. Préparation technique du véhicule pour l'autonomie totale (Eau UV, Énergie).

---

*Contenu en contenu de rédaction...*

---

## Ressource — 3.2 receive pakcage

## Comment recevoir des colis en voyage

### 📦 USPS — Livraison générale
1. Recherchez : **« code postal de livraison générale pour [ville] »**
2. Utilisez **PostCodeBase.com** pour trouver le code postal correct.
3. Adressez votre colis :
Votre nom
LIVRAISON GÉNÉRALE
Ville, État, code postal
4. PostCodeBase.com indique également quel **bureau de poste** recevra le colis.
5. Récupérez avec une **photo d'identité**.

### 📦 FedEx — Conserver pour ramassage
1. Trouvez un **FedEx Print & Ship Center** (préférez les grands emplacements hub).
2. **Appelez à l'avance** pour confirmer qu'ils acceptent les colis à ramasser.
3. Adressez votre colis :
Votre nom
Adresse FedEx complète (exactement telle qu'indiquée)
4. Récupérez avec un **permis de conduire**.

---

# Pilier 8 — Documentation

## Ressource — 1.1 guide documentation index

<p align="center">
  <img src="/public/img/itinerary-with-photo.webp" alt="Chapitre 8 Documentation" style="width:100%; border-radius: 15px; box-shadow: 0 4px 15px rgba(0,0,0,0.1);" />
</p>

Ce chapitre vous apprend à capturer vos expériences pour qu'elles ne s'effacent jamais. Vous créez une méthode qui préserve les faits, les émotions et les inguides utiles sans vous éloigner de l'instant présent.

## 🎯 Objectif pédagogique

À la fin de ce chapitre, vous serez capable de :

- Choisir une méthode de documentation adaptée à vos habitudes.
- Structurer un carnet de bord facile à retrouver et à relire.
- Capturer les inguides et émotions importantes sans alourdir le voyage.
- Organiser vos médias pour les partager ou les réutiliser après le retour.

## 🧭 Comment fonctionne ce chapitre

Vous construisez un système léger en trois temps : capturer pendant le voyage, classer régulièrement et raconter après coup. Le meilleur outil est celui que vous utiliserez réellement, même les jours bien remplis.

## Les étapes du chapitre

### 1. Choisir votre format

Optez pour un carnet papier, une application, des notes vocales ou une méthode hybride. Tenez compte de la connexion disponible, de la discrétion souhaitée et du temps que vous êtes prêt à y consacrer.

### 2. Définir ce qui compte

Décidez à l'avance des éléments à conserver : lieux, rencontres, dépenses utiles, itinéraires, sensations, photos ou idées. Une courte liste de repères évite d'accumuler des contenus sans valeur personnelle.

### 3. Capturer sans interrompre l'expérience

Créez des gestes rapides : une note le soir, une photo accompagnée d'un mot, une note vocale après une visite. Donnez la priorité à ce que vous voudrez comprendre ou ressentir de nouveau plus tard.

### 4. Classer et sauvegarder

Rangez vos contenus par date, étape ou thème. Sauvegardez régulièrement les éléments irremplaçables et conservez une copie accessible hors ligne lorsque cela est nécessaire.

### 5. Transformer les traces en récit

Après le voyage, relisez, triez et reliez vos contenus. Vous pouvez en faire un carnet, une carte, un album ou un bilan qui améliorera vos futurs projets.

## 🛠️ Action immédiate

Choisissez un seul rituel de documentation pour votre prochain déplacement : par exemple, trois photos et trois phrases à la fin de chaque journée. Testez-le avant de partir.

---

## Ressource — 1.2 formulaire documentation

> **Action Requise :** Comment aimez-vous garder vos souvenirs et partager votre voyage ?

### 🎥 L’importance de la trace
<div class="video-container mb-4">
  <div class="ratio ratio-16x9 shadow-sm rounded-4 overflow-hidden border bg-light">
    <iframe src="https://drive.google.com/file/d/1h44s01IcfVbfzysi80a0NUDvDI99kShJ/preview" title="Pourquoi documenter son voyage" loading="lazy" allow="autoplay; encrypted-media; fullscreen; picture-in-picture" allowfullscreen></iframe>
  </div>
</div>

### 🎯 Définir vos habitudes de documentation
Réfléchissez à votre méthode de capture et à vos outils :
- Préférence entre Papier, Numérique ou Hybride.
- Usage privilégié de la voix, du texte ou de la photo.
- Intérêt pour le montage vidéo automatique et les réseaux sociaux.

---

## Ressource — 1.3 video intro documentation

<div class="video-container mb-4">
  <div class="ratio ratio-16x9 shadow-sm rounded-4 overflow-hidden border bg-light">
    <iframe src="https://drive.google.com/file/d/1C9O9nDnMVHbXiZO3_fDGx4527K9SGZer/preview" title="Introduction à la documentation du voyage" loading="lazy" allow="autoplay; encrypted-media; fullscreen; picture-in-picture" allowfullscreen></iframe>
  </div>
</div>

## 🎙️ Script

🎵 (Musique douce, visuel de carnet, photos, croquis)

« Voyager, c’est vivre.  
Mais documenter son voyage, c’est le revivre… encore et encore.

Dans ce chapitre, tu vas apprendre à créer ton carnet de bord,  
à capturer tes souvenirs, tes repères, tes émotions,  
et à organiser ton itinéraire pour ne rien oublier.

Que tu sois papier, numérique ou hybride,  
ton carnet sera ton compagnon de route,  
et peut-être… ton plus beau souvenir. »

🖥️ Texte à l’écran :  
« Chapitre 5 — Documentation : Créer ton carnet de bord de voyage »

---

## Ressource — 1.4 choisir format documentation

## 🎯 Objectif
Identifier le format de carnet de bord qui correspond à ton style de voyage et à tes besoins.

---

## 📊 Comparatif des formats

| Format        | Support        | Avantages                          | Limites                          | Idéal pour…                      |
|---------------|----------------|-------------------------------------|----------------------------------|----------------------------------|
| Papier        | Cahier, carnet | Sensoriel, intime, facile à annoter | Pas de sauvegarde, encombrant    | Voyageurs contemplatifs          |
| Numérique     | Appli, cloud   | Accessible partout, partage facile  | Dépend du réseau et de la batterie | Voyageurs connectés              |
| Hybride       | Mixte          | Flexibilité, double sauvegarde      | Nécessite organisation           | Voyageurs créatifs ou prudents   |

---

## ☑️ À considérer

- [ ] Est-ce que je veux écrire à la main?
- [ ] Est-ce que je veux inclure des photos ou des cartes?
- [ ] Est-ce que je veux partager mon carnet avec d’autres?
- [ ] Est-ce que je veux pouvoir le consulter hors ligne?

---

## 📝 Notes personnelles

🖋️ Mon format préféré : __________________________  
📌 Raisons de mon choix : __________________________

---

## Ressource — 1.5 pdf choisir format documentation

## 🎯 Objectif
Identifier le format de carnet de bord qui correspond à ton style de voyage et à tes besoins.

---

## 📊 Comparatif des formats

| Format        | Support        | Avantages                          | Limites                          | Idéal pour…                      |
|---------------|----------------|-------------------------------------|----------------------------------|----------------------------------|
| Papier        | Cahier, carnet | Sensoriel, intime, facile à annoter | Pas de sauvegarde, encombrant    | Voyageurs contemplatifs          |
| Numérique     | Appli, cloud   | Accessible partout, partage facile  | Dépend du réseau et de la batterie | Voyageurs connectés              |
| Hybride       | Mixte          | Flexibilité, double sauvegarde      | Nécessite organisation           | Voyageurs créatifs ou prudents   |

---

## ☑️ À considérer

- [ ] Est-ce que je veux écrire à la main?
- [ ] Est-ce que je veux inclure des photos ou des cartes?
- [ ] Est-ce que je veux partager mon carnet avec d’autres?
- [ ] Est-ce que je veux pouvoir le consulter hors ligne?

---

## 📝 Notes personnelles

🖋️ Mon format préféré : __________________________  
📌 Raisons de mon choix : __________________________

---

## Ressource — 1.6 historique post voyage

## Objectif
Conserver un historique complet du voyage, documenter les expériences, les succès, les erreurs, et tirer des enseignements pour améliorer les voyages futurs. Permet également de garder des souvenirs et de planifier les prochaines aventures.

---

## Formulaire Historique & Post-Voyage

### Inguides générales
- Date de début du voyage : ________  
- Date de fin du voyage : ________  
- Durée totale : ________ jours  
- Destinations principales visitées : ________  
- Compagnons de voyage : ________  

### Évaluation du voyage
- Qualité globale du voyage :
  - [ ] Excellent
  - [ ] Très bien
  - [ ] Bien
  - [ ] Moyenne
  - [ ] Décevante

- Points forts du voyage (cochez tout ce qui s’applique) :
  - [ ] Hébergement
  - [ ] Activités / loisirs
  - [ ] Transport / navigation
  - [ ] Nourriture
  - [ ] Expérience culturelle
  - [ ] Rencontre avec des locaux
  - [ ] Découverte de la nature / paysages
  - [ ] Autre : ___________

- Points à améliorer (cochez tout ce qui s’applique) :
  - [ ] Hébergement
  - [ ] Activités / loisirs
  - [ ] Transport / navigation
  - [ ] Nourriture
  - [ ] Expérience culturelle
  - [ ] Préparation / planification
  - [ ] Autre : ___________

### Souvenirs et documentation
- Photos et vidéos capturées :
  - [ ] Oui
  - [ ] Non
  - Lieux / moments préférés : ___________
- Notes et anecdotes personnelles :
  - 📝 Réponse libre : ___________
- Cartes / itinéraires enregistrés :
  - [ ] Oui
  - [ ] Non
  - Commentaires : ___________

### Analyse financière post-voyage
- Dépenses totales : ________ $
- Respect du budget prévu :
  - [ ] Oui
  - [ ] Partiellement
  - [ ] Non
- Dépenses imprévues / sections apprises :
  - 📝 Réponse libre : ___________

### Bien-être et satisfaction personnelle
- Niveau de satisfaction personnelle :
  - [ ] Très satisfait
  - [ ] Satisfait
  - [ ] Neutre
  - [ ] Insatisfait
  - [ ] Très insatisfait
- Santé physique / mentale pendant le voyage :
  - [ ] Excellente
  - [ ] Bonne
  - [ ] Moyenne
  - [ ] Fatigué / stressé
  - [ ] Autre : ___________
- Difficultés rencontrées (mobilité, handicap, météo, imprévus, etc.) :
  - 📝 Réponse libre : ___________

### Sections et recommandations
- Quelles pratiques souhaitez-vous garder pour vos futurs voyages ?  
  - 📝 Réponse libre : ___________
- Quelles erreurs souhaitez-vous éviter à l’avenir ?  
  - 📝 Réponse libre : ___________
- Suggestions pour améliorer votre expérience de voyage :  
  - 📝 Réponse libre : ___________

---

## Liens avec autres chapitres
- `01_profil_voyageur.md` → analyse du profil pour personnaliser les recommandations futures
- `02_inspiration.md` → comparer les destinations et activités préférées avec les nouvelles idées
- `03_planification.md` → ajuster les stratégies de planification pour le prochain voyage
- `04_navigation.md` → optimiser les itinéraires et moyens de transport pour le futur
- `05_google_sheets.md` → suivre les historiques et comparer les budgets
- `06_google_maps.md` → documenter les itinéraires et lieux visités
- `07_communication.md` → partager les souvenirs et le bilan avec proches
- `09_aspect_financier.md` → tirer des conclusions financières pour les futurs voyages

---

## Ressource — 1.7 slides documentation media

<!-- .slide:  data-background-opacity="1" data-background-color="#B4A088" data-background-size="contain" -->

### documenter ses voyages
- 🎙3 méthodes en mode différéfféré
- ⏱ 3 méthodes en mode temps réel
> 🎯 Ultra simple et rapide : capturez chaque moment, à votre rythme !

<aside class="notes">
- Les 3 méthodes sont : texte, dicter et dictaphone.

- En mode différé, on peut sauvegarder nos notes dans un documents dont le nom correspond au nom de la photo ou du vidéo sélectionné.

- En mode temps réel, on sauvegardes les notes avec la data et l'heure du moment.  Ce qui permettra de relier les notes aux photos et vidéos prises durant le voyage.  Cela nécessitera cependant un peu plus de travail de post-production et une validation de votre part pour vous assurer que les notes correspondent bien aux photos et vidéos.
</aside>

---

<!-- .slide:  data-background-opacity="1" data-background-color="#B4A088" data-background-size="contain" -->

## Chapitre 5
## Documenter ses voyages
## 1 de 6: Texte en mode différé
### 6 méthodes pour 
### documenter ses voyages
- 🎙3 méthodes en mode différéfféré
- ⏱ 3 méthodes en mode temps réel
> 🎯 Ultra simple et rapide : capturez chaque moment, à votre rythme !

<aside class="notes">
- En mode différé, on peut sauvegarder nos notes dans un documents dont le nom correspond au nom de la photo ou du vidéo sélectionné.
</aside>

--

<!-- .slide:  data-background-image="assets/home.PNG" data-background-opacity="1" data-background-color="#B4A088" data-background-size="contain" -->

## Méthode différée
## Texte

<aside class="notes">

- En mode différé, on peut sauvegarder nos notes dans un documents dont le nom correspond au nom de la photo ou du vidéo sélectionné.
  
- on sélectionnne le raccourcie photo:Texte
</aside>

--

<!-- .slide:  data-background-image="assets/IMG_2D233B9756C3-1.jpeg" data-background-opacity="1" data-background-color="#B4A088" data-background-size="contain" -->

## Selectionnner le média

<aside class="notes">

- On sélection la photo ou la vidéo que nous voulons documenter
</aside>

--

<!-- .slide:  data-background-image="assets/photo-texte/IMG_9440.PNG" data-background-opacity="1" data-background-color="#B4A088" data-background-size="contain" -->

## On écrit le texte {style="top: -2em !important;"}

<aside class="notes">

- On écrit simplement les commentaires que nous voulons associer à la photo ou la vidéo sélectionnée
- On peut aussi sélectionner le mode dicté en bas de l'écran du clavier pour dicter le texte au lieu de l'écrire
</aside>

--

<!-- .slide:  data-background-image="assets/photo-texte/IMG_9442.PNG" data-background-opacity="1" data-background-color="#B4A088" data-background-size="contain" -->

## On dicte le texte {style="top: -2em !important;"}

<aside class="notes">

- On dicte simplement les commentaires que nous voulons associer à la photo ou la vidéo sélectionnée
- On peut corriger le texte s'il y a des erreurs de transcription
- On termine en appuyant sur OK
</aside>

--

<!-- .slide:  data-background-image="assets/home.PNG" data-background-opacity="1" data-background-color="#B4A088" data-background-size="contain" -->

## Fichiers - Texte 

<aside class="notes">

- On ouvre l'application Fichiers pour retrouver le document texte créé
</aside>

--

<!-- .slide:  data-background-image="assets/fichiers.PNG" data-background-opacity="1" data-background-color="#B4A088" data-background-size="contain" -->
## Fichiers résultants {style="top: -9em !important;"}
<aside class="notes">

- On observe ici les fichiers sauvegardés quand on a utilisé la méthode texte
- Le nom du fichier correspond au nom de la photo ou de la vidéo sélectionnée
- On peut ouvrir le fichier pour voir le texte sauvegardé
- on peut exporter le fichier en sélection le mode de partage désiré en bas à gauche de l'écran
</aside>

--

<!-- .slide:  data-background-image="assets/photo-texte/IMG_DF820904A6A9-1.jpeg" data-background-opacity="1" data-background-color="#B4A088" data-background-size="contain" -->

<aside class="notes">

- On observe ici les fichiers sauvegardés quand on a utilisé la méthode texte
- Le nom du fichier correspond au nom de la photo ou de la vidéo sélectionnée
- On peut ouvrir le fichier pour voir le texte sauvegardé
- on peut exporter le fichier en sélection le mode de partage désiré en bas à gauche de l'écran
</aside>

--

<!-- .slide:  data-background-image="assets/home.PNG" data-background-opacity="1" data-background-color="#B4A088" data-background-size="contain" -->
## Édition du raccourci

<aside class="notes">

- On observe ici les fichiers sauvegardés quand on a utilisé la méthode texte
- Le nom du fichier correspond au nom de la photo ou de la vidéo sélectionnée
- On peut ouvrir le fichier pour voir le texte sauvegardé
- on peut exporter le fichier en sélection le mode de partage désiré en bas à gauche de l'écran
</aside>

--

<!-- .slide:  data-background-image="assets/racourcis.PNG" data-background-opacity="1" data-background-color="#B4A088" data-background-size="contain" -->
## Sélection du raccourci

<aside class="notes">

- selection photo:Texte
</aside>

--

<!-- .slide:  data-background-image="assets/photo-texte/IMG_9506.PNG" data-background-opacity="1" data-background-color="#B4A088" data-background-size="contain" -->
## Modifier raccourci

<aside class="notes">

- Modifier le raccourcis
</aside>

--

<!-- .slide:  data-background-image="assets/photo-texte/IMG_9507.PNG" data-background-opacity="1" data-background-color="#B4A088" data-background-size="contain" -->

<aside class="notes">

- Sélectionnner toutes les photos
- Sélectionner plusieurs à false
- Demander Texte aved Alerte
</aside>

--

<!-- .slide:  data-background-image="assets/photo-texte/IMG_9508.PNG" data-background-opacity="1" data-background-color="#B4A088" data-background-size="contain" -->

<aside class="notes">

- Ajjouter demander une entrée à Photo permet de sauvegarder le texte dans un document dont le nom correspond au nom de la photo ou de la vidéo sélectionnée
- On peut valider l'exécution du raccourcis en cliquant en bas à droite sur l'icône de lecture pour le faire exécuter immédiatement.
</aside>

--

<!-- .slide:  data-background-image="assets/photo-texte/IMG_9506.PNG" data-background-opacity="1" data-background-color="#B4A088" data-background-size="contain" -->
## Raccourci sur l'écran d'accueil

<aside class="notes">

- Selection détails pour pouvoir créer un raccourcie sur l'écran d'accueil
</aside>

--

<!-- .slide:  data-background-image="assets/photo-texte/IMG_9533.PNG" data-background-opacity="1" data-background-color="#B4A088" data-background-size="contain" onclick="Reveal.slide(9)" -->
## Création du raccourci {style="top: -10.5em !important;"}

<aside class="notes">

- Sélectionner ajouter sur l'écran d'accueil
- Ensuite on choisi l'icone et la couleur désirée
- On peut ensuite accéder au raccourcie directement depuis l'écran d'accueil de l'iPhone
- On peut déplacer l'icone où on le désire sur l'écran d'accueil en maintenant le doigt appuyé sur l'icone jusqu'à ce qu'elle se mette à bouger
- clic sur le titre pour sauter à la dernière diapo
- photo:texte https://www.icloud.com/shortcuts/2ce309c5a2524d28bee41702b77945e8
</aside>

---

<!-- .slide:  data-background-opacity="1" data-background-color="#B4A088" data-background-size="contain" -->

## Chapitre 5
## Documenter ses voyages
## 2 de 6: Dicter en mode différé
### 6 méthodes pour 
### documenter ses voyages
- 🎙3 méthodes en mode différé
- ⏱ 3 méthodes en mode temps réel
> 🎯 Ultra simple et rapide : capturez chaque moment, à votre rythme !
<aside class="notes">
En mode différé, on peut sauvegarder nos notes dans un documents dont le nom correspond au nom de la photo ou du vidéo sélectionné.
</aside>

--

<!-- .slide:  data-background-image="assets/home.PNG" data-background-opacity="1" data-background-color="#B4A088" data-background-size="contain" -->

## Méthode différée
## Dicté

<aside class="notes">

- on sélectionnne le raccourcie photo:Dicté

</aside>

--

<!-- .slide:  data-background-image="assets/IMG_2D233B9756C3-1.jpeg" data-background-opacity="1" data-background-color="#B4A088" data-background-size="contain" -->

## Selectionnner media

<aside class="notes">

- On sélection la photo ou la vidéo que nous voulons documenter
</aside>

--

<!-- .slide:  data-background-image="assets/photo-dicter/IMG_9445.PNG" data-background-opacity="1" data-background-color="#B4A088" data-background-size="contain" -->

## Mode dicté activé {style="top: -2em !important;"}

<aside class="notes">

</aside>

--

<!-- .slide:  data-background-image="assets/photo-dicter/IMG_9446.PNG" data-background-opacity="1" data-background-color="#B4A088" data-background-size="contain" -->

## On dicte le texte {style="top: -2em !important;"}

<aside class="notes">

- On dicte simplement les commentaires que nous voulons associer à la photo ou la vidéo sélectionnée
- On peut difficilement corriger le texte s'il y a des erreurs de transcription
- On termine en appuyant sur OK
</aside>

--

<!-- .slide:  data-background-image="assets/home.PNG" data-background-opacity="1" data-background-color="#B4A088" data-background-size="contain" -->

## Fichiers - Texte 

<aside class="notes">
- On ouvre l'application Fichiers pour retrouver le document texte créé

</aside>

--

<!-- .slide:  data-background-image="assets/fichiers.PNG" data-background-opacity="1" data-background-color="#B4A088" data-background-size="contain" -->
## Fichier résultants {style="top: -9em !important;"}

<aside class="notes">

- On observe ici les fichiers sauvegardés quand on a utilisé la méthode texte
- Le nom du fichier correspond au nom de la photo ou de la vidéo sélectionnée
- On peut ouvrir le fichier pour voir le texte sauvegardé
- on peut exporter le fichier en sélection le mode de partage désiré en bas à gauche de l'écran
</aside>

--

<!-- .slide:  data-background-image="assets/photo-dicter/IMG_9448.PNG" data-background-opacity="1" data-background-color="#B4A088" data-background-size="contain" -->

<aside class="notes">

- On observe ici les fichiers sauvegardés quand on a utilisé la méthode texte
- Le nom du fichier correspond au nom de la photo ou de la vidéo sélectionnée
- On peut ouvrir le fichier pour voir le texte sauvegardé
- on peut exporter le fichier en sélection le mode de partage désiré en bas à gauche de l'écran
</aside>

--

<!-- .slide:  data-background-image="assets/home.PNG" data-background-opacity="1" data-background-color="#B4A088" data-background-size="contain" -->
## Édition du raccourci

<aside class="notes">

- On peut éditer le raccourcis pour voir comment il fonctionne
</aside>

--

<!-- .slide:  data-background-image="assets/racourcis.PNG" data-background-opacity="1" data-background-color="#B4A088" data-background-size="contain" -->
## Sélection du raccourci

<aside class="notes">

- selection photo:Dicté
</aside>

--

<!-- .slide:  data-background-image="assets/photo-dicter/IMG_9458.PNG" data-background-opacity="1" data-background-color="#B4A088" data-background-size="contain" -->
## Modifier raccourci

<aside class="notes">

- Modifier le raccourcis
</aside>

--

<!-- .slide:  data-background-image="assets/photo-dicter/IMG_9459.PNG" data-background-opacity="1" data-background-color="#B4A088" data-background-size="contain" -->

<aside class="notes">

- Sélectionnner toutes les photos
- Sélectionner plusieurs à false
- Dicté du texte et mécanisme d'arrêt
</aside>

--

<!-- .slide:  data-background-image="assets/photo-dicter/IMG_9460.PNG" data-background-opacity="1" data-background-color="#B4A088" data-background-size="contain" -->

<aside class="notes">

- Enregistrement du texte dicté dans le répertoire souhaité
</aside>

--

<!-- .slide:  data-background-image="assets/photo-dicter/IMG_9458.PNG" data-background-opacity="1" data-background-color="#B4A088" data-background-size="contain" -->
## Raccourci sur l'écran d'accueil

<aside class="notes">

- Selection détails pour pouvoir créer un raccourcie sur l'écran d'accueil
</aside>

--

<!-- .slide:  data-background-image="assets/photo-dicter/IMG_DF069144D89E-1.jpeg" data-background-opacity="1" data-background-color="#B4A088" data-background-size="contain" onclick="Reveal.slide(9)"  -->
## Création du raccourci {style="top: -10.5em !important;"}

<aside class="notes">

- Sélectionner ajouter sur l'écran d'accueil
- Ensuite on choisi l'icone et la couleur désirée
- On peut ensuite accéder au raccourcie directement depuis l'écran d'accueil de l'iPhone
- On peut déplacer l'icone où on le désire sur l'écran d'accueil en maintenant le doigt appuyé sur l'icone jusqu'à ce qu'elle se mette à bouger
- clic sur le titre pour sauter à la dernière diapo
- photo:Dicté https://www.icloud.com/shortcuts/0e6687548bf443bb83095137c74a999c
</aside>

---

<!-- .slide:  data-background-opacity="1" data-background-color="#B4A088" data-background-size="contain" -->

## Chapitre 5
## Documenter ses voyages
## 3 de 6: Dictaphone en mode différé
### 6 méthodes pour 
### documenter ses voyages
- 🎙3 méthodes en mode différéfféré
- ⏱ 3 méthodes en mode temps réel
> 🎯 Ultra simple et rapide : capturez chaque moment, à votre rythme !
<aside class="notes">

En mode différé, on peut sauvegarder nos notes dans un documents dont le nom correspond au nom de la photo ou du vidéo sélectionné.
</aside>

--

<!-- .slide:  data-background-image="assets/home.PNG" data-background-opacity="1" data-background-color="#B4A088" data-background-size="contain" -->

## Méthode différée
## Dictaphone

<aside class="notes">

- on sélectionnne le raccourcie photo:Voix
</aside>

--

<!-- .slide:  data-background-image="assets/IMG_2D233B9756C3-1.jpeg" data-background-opacity="1" data-background-color="#B4A088" data-background-size="contain" -->

## Selectionnner média

<aside class="notes">

- On sélection la photo ou la vidéo que nous voulons documenter
</aside>

--

<!-- .slide:  data-background-image="assets/photo-dictaphone/IMG_9509.PNG" data-background-opacity="1" data-background-color="#B4A088" data-background-size="contain" -->

## Dictaphone activé {style="top: -10.25em !important;"}

<aside class="notes">

- visible en haut au centre de l'écran
</aside>

--

<!-- .slide:  data-background-image="assets/photo-dictaphone/IMG_9510.PNG" data-background-opacity="1" data-background-color="#B4A088" data-background-size="contain" -->

## On dicte le texte {style="top: -9.5em !important;"}

<aside class="notes">

- on click sur le haut de l'écran pour accéder à l'interface du dictaphone
- on clic sur ok pour arrêter l'enregistrement
</aside>

--

<!-- .slide:  data-background-image="assets/photo-dictaphone/IMG_9511.PNG" data-background-opacity="1" data-background-color="#B4A088" data-background-size="contain" -->
## on termine l'enregistrement {style="top: 2em !important;"}
<aside class="notes">

- On termine l'enregistrement en appuyant sur le bouton rouge en bas au centre de l'écran
- On obtiens une transcription audio associé à la photo ou la vidéo sélectionnée
- on peut écouter l'audio en cliquant sur le triangle de lecture
- on peut exporter le fichier en sélectionnant modifier en haut à droite
</aside>

--

<!-- .slide:  data-background-image="assets/home.PNG" data-background-opacity="1" data-background-color="#B4A088" data-background-size="contain" -->
## Édition du raccourci

<aside class="notes">

- On peut éditer le raccourcis pour voir comment il fonctionne
- selectionne Photo:voix
</aside>

--

<!-- .slide:  data-background-image="assets/racourcis.PNG" data-background-opacity="1" data-background-color="#B4A088" data-background-size="contain" -->
## Sélection du raccourci

<aside class="notes">

- selection photo:Dictaphone
</aside>

--

<!-- .slide:  data-background-image="assets/photo-dictaphone/IMG_9462.PNG" data-background-opacity="1" data-background-color="#B4A088" data-background-size="contain" -->

## Modifier le raccourci {style="top: -10em !important;"}

<aside class="notes">

- Modifier le raccourcis
</aside>

--

<!-- .slide:  data-background-image="assets/photo-dictaphone/IMG_9463.PNG" data-background-opacity="1" data-background-color="#B4A088" data-background-size="contain" -->

<aside class="notes">

- Enregistrement du texte dicté dans le répertoire souhaité
- On teste avec le bouton de lecture en bas à droite
</aside>

--

<!-- .slide:  data-background-image="assets/photo-dictaphone/IMG_9462.PNG" data-background-opacity="1" data-background-color="#B4A088" data-background-size="contain" -->
## Raccourci sur l'écran d'accueil {style="top: -10em !important;"}

<aside class="notes">

- Selection détails pour pouvoir créer un raccourcie sur l'écran d'accueil
</aside>

--

<!-- .slide:  data-background-image="assets/photo-dictaphone/IMG_3960F9DE7CB7-1.jpeg" data-background-opacity="1" data-background-color="#B4A088" data-background-size="contain" onclick="Reveal.slide(9)" -->
## Création du raccourci  {style="top: -10.5em !important;"}

<aside class="notes">

- Sélectionner ajouter sur l'écran d'accueil
- Ensuite on choisi l'icone et la couleur désirée
- On peut ensuite accéder au raccourcie directement depuis l'écran d'accueil de l'iPhone
- On peut déplacer l'icone où on le désire sur l'écran d'accueil en maintenant le doigt appuyé sur l'icone jusqu'à ce qu'elle se mette à bouger
-  clic sur le titre pour sauter à la dernière diapo
-  photo:dictaphone https://www.icloud.com/shortcuts/fdb1b65eacb94a589224f8e9ed36c8ef
</aside>

---

<!-- .slide:  data-background-opacity="1" data-background-color="#B4A088" data-background-size="contain" -->

## Chapitre 5
## Documenter ses voyages
## 4 de 6: Texte en temps réel
### 6 méthodes pour 
### documenter ses voyages
- 🎙3 méthodes en mode différéfféré
- ⏱ 3 méthodes en mode temps réel
> 🎯 Ultra simple et rapide : capturez chaque moment, à votre rythme !
<aside class="notes">

En mode temps réel, on sauvegardes les notes avec la date et l'heure du moment.  Ce qui permettra de relier les notes aux photos et vidéos prises durant le voyage.  Cela nécessitera cependant un peu plus de travail de post-production et une validation de votre part pour vous assurer que les notes correspondent bien aux photos et vidéos.
</aside>

--

<!-- .slide:  data-background-image="assets/home.PNG" data-background-opacity="1" data-background-color="#B4A088" data-background-size="contain" -->

## Méthode immédiate
## Texte

<aside class="notes">

- En mode immédiat, on peut sauvegarder nos notes dans un documents dont le nom correspond à la date et l'heure du moment.
- Ouvrir l'application photo
</aside>

--

<!-- .slide:  data-background-image="assets/assistivetouch/IMG_D18156F6F6F3-1.jpeg" data-background-opacity="1" data-background-color="#B4A088" data-background-size="contain" -->

## Boutton AssistiveTouch
<aside class="notes">

- On sélection la photo ou la vidéo que nous voulons documenter
- on click une seule fois sur le bouton Assistive Touch pour ouvrir le dialogue de texte
</aside>

--

<!-- .slide:  data-background-image="assets/photo-texte/IMG_9440.PNG" data-background-opacity="1" data-background-color="#B4A088" data-background-size="contain" -->

## On écrit le texte {style="top: -2em !important;"}

<aside class="notes">

- On écrit simplement les commentaires que nous voulons associer à la photo ou la vidéo sélectionnée
- On peut aussi sélectionner le mode dicté en bas de l'écran du clavier pour dicter le texte au lieu de l'écrire
</aside>

--

<!-- .slide:  data-background-image="assets/photo-texte/IMG_9442.PNG" data-background-opacity="1" data-background-color="#B4A088" data-background-size="contain" -->

## On dicte le texte {style="top: -2em !important;"}

<aside class="notes">

- On dicte simplement les commentaires que nous voulons associer à la photo ou la vidéo sélectionnée
- On peut corriger le texte s'il y a des erreurs de transcription
- On termine en appuyant sur OK
</aside>

--

<!-- .slide:  data-background-image="assets/home.PNG" data-background-opacity="1" data-background-color="#B4A088" data-background-size="contain" -->

## Fichiers - Texte 

<aside class="notes">

- On ouvre l'application Fichiers pour retrouver le document texte créé

</aside>

--

<!-- .slide:  data-background-image="assets/fichiers.PNG" data-background-opacity="1" data-background-color="#B4A088" data-background-size="contain" -->
## Fichiers résultants {style="top: -9em !important;"}
<aside class="notes">

- On observe ici les fichiers sauvegardés quand on a utilisé la méthode texte
- Le nom du fichier correspond à la date et l'heure du moment
- On peut ouvrir le fichier pour voir le texte sauvegardé
- on peut exporter le fichier en sélection le mode de partage désiré en bas à gauche de l'écran
</aside>

--

<!-- .slide:  data-background-image="assets/photo-texte/IMG_DF820904A6A9-1.jpeg" data-background-opacity="1" data-background-color="#B4A088" data-background-size="contain" -->

<aside class="notes">

- on peut voir le contenu du fichier texte créé en mode immédiat
</aside>

--

<!-- .slide:  data-background-image="assets/home.PNG" data-background-opacity="1" data-background-color="#B4A088" data-background-size="contain" -->
## Édition du raccourci

<aside class="notes">

- On click sur l'application Raccourcis pour éditer le raccourcis 
</aside>

--

<!-- .slide:  data-background-image="assets/racourcis.PNG" data-background-opacity="1" data-background-color="#B4A088" data-background-size="contain" -->
## Sélection du raccourci

<aside class="notes">

- selection texte:start
</aside>

--

<!-- .slide:  data-background-image="assets/start-texte/IMG_9454.PNG" data-background-opacity="1" data-background-color="#B4A088" data-background-size="contain" -->
## Modifier racourci

<aside class="notes">

- Click sur modifier pour editer le raccourcis
</aside>

--

<!-- .slide:  data-background-image="assets/start-texte/IMG_86AB2A9D5CC2-1.jpeg" data-background-opacity="1" data-background-color="#B4A088" data-background-size="contain" -->

<aside class="notes">

- Sélectionnner toutes les photos
- Sélectionner plusieurs à false
- Demander Texte aved Alerte
</aside>

--

<!-- .slide:  data-background-image="assets/assistivetouch/IMG_9474.PNG" data-background-opacity="1" data-background-color="#B4A088" data-background-size="contain" -->
## configuration assistive touch {style="top: 0.5em !important;"}
<aside class="notes">

- Reglage / Accessibiliter / Toucher / Assistive Touch

</aside>

--

<!-- .slide:  data-background-image="assets/assistivetouch/IMG_9475.PNG" data-background-opacity="1" data-background-color="#B4A088" data-background-size="contain" -->
## Détails AssistiveTouch {style="top: -9.25em !important;"}
<aside class="notes">

-  Assistive Touch
</aside>

--

<!-- .slide:  data-background-image="assets/assistivetouch/IMG_9477.PNG" data-background-opacity="1" data-background-color="#B4A088" data-background-size="contain" onclick="Reveal.slide(9)" -->
## Configuration boutton {style="top: -1.2em !important;"}
<aside class="notes">

-  configuration, 
-  clic sur le titre pour sauter à la dernière diapo
- texte:reel https://www.icloud.com/shortcuts/ed36ee74d68245f2822b244b0cf47020
</aside>

---

<!-- .slide:  data-background-opacity="1" data-background-color="#B4A088" data-background-size="contain" -->

## Chapitre 5
## Documenter ses voyages
## 5 de 6: Dicté en temps réel
### 6 méthodes pour 
### documenter ses voyages
- 🎙3 méthodes en mode différéfféré
- ⏱ 3 méthodes en mode temps réel
> 🎯 Ultra simple et rapide : capturez chaque moment, à votre rythme !
<aside class="notes">

En mode temps réel, on sauvegardes les notes avec la data et l'heure du moment.  Ce qui permettra de relier les notes aux photos et vidéos prises durant le voyage.  Cela nécessitera cependant un peu plus de travail de post-production et une validation de votre part pour vous assurer que les notes correspondent bien aux photos et vidéos.
</aside>

--

<!-- .slide:  data-background-image="assets/home.PNG" data-background-opacity="1" data-background-color="#B4A088" data-background-size="contain" -->

## Méthode immédiate
## Dicté

<aside class="notes">

= on ouvre l'application photo
</aside>

--

<!-- .slide:  data-background-image="assets/assistivetouch/IMG_D18156F6F6F3-1.jpeg" data-background-opacity="1" data-background-color="#B4A088" data-background-size="contain" -->

## Button Assistive Touch
<aside class="notes">

- On sélection la photo ou la vidéo que nous voulons documenter
- on double click le bouton Assistive Touch pour ouvrir le dialogue de texte
</aside>

--

<!-- .slide:  data-background-image="assets/photo-dicter/IMG_9445.PNG" data-background-opacity="1" data-background-color="#B4A088" data-background-size="contain" -->

## Mode dicté activé {style="top: -2em !important;"}

<aside class="notes">
</aside>

--

<!-- .slide:  data-background-image="assets/photo-dicter/IMG_9446.PNG" data-background-opacity="1" data-background-color="#B4A088" data-background-size="contain" -->

## On dicte le texte {style="top: -2em !important;"}

<aside class="notes">

- On dicte simplement les commentaires que nous voulons associer à la photo ou la vidéo sélectionnée
- On peut difficilement corriger le texte s'il y a des erreurs de transcription
- On termine en appuyant sur OK
</aside>

--

<!-- .slide:  data-background-image="assets/home.PNG" data-background-opacity="1" data-background-color="#B4A088" data-background-size="contain" -->

## Fichiers - Texte 

<aside class="notes">

- On ouvre l'application Fichiers pour retrouver le document texte créé

</aside>

--

<!-- .slide:  data-background-image="assets/fichiers.PNG" data-background-opacity="1" data-background-color="#B4A088" data-background-size="contain" -->
## Fichiers résultants {style="top: -9em !important;"}

<aside class="notes">

- On observe ici les fichiers sauvegardés quand on a utilisé la méthode texte
- Le nom du fichier correspond à la date et l'heure du moment
- On peut ouvrir le fichier pour voir le texte sauvegardé
- on peut exporter le fichier en sélection le mode de partage désiré en bas à gauche de l'écran
</aside>

--

<!-- .slide:  data-background-image="assets/photo-dicter/IMG_9448.PNG" data-background-opacity="1" data-background-color="#B4A088" data-background-size="contain" -->

<aside class="notes">

- On peut ouvrir le fichier pour voir le texte sauvegardé
- on peut exporter le fichier en sélection le mode de partage désiré en bas à gauche de l'écran
</aside>

--

<!-- .slide:  data-background-image="assets/home.PNG" data-background-opacity="1" data-background-color="#B4A088" data-background-size="contain" -->
## Édition du raccourci

<aside class="notes">

- On peut éditer le raccourcis pour voir comment il fonctionne
</aside>

--

<!-- .slide:  data-background-image="assets/racourcis.PNG" data-background-opacity="1" data-background-color="#B4A088" data-background-size="contain" -->
## Sélection du raccourci

<aside class="notes">

- selection Dicter: Start
</aside>

--

<!-- .slide:  data-background-image="assets/start-dicter/IMG_5FACDC5747E0-1.jpeg" data-background-opacity="1" data-background-color="#B4A088" data-background-size="contain" -->
## Modifier racourci {style="top: -10em !important;"}

<aside class="notes">

- Modifier le raccourcis
</aside>

--

<!-- .slide:  data-background-image="assets/start-dicter/IMG_9473.PNG" data-background-opacity="1" data-background-color="#B4A088" data-background-size="contain" -->

<aside class="notes">

- Sélectionnner toutes les photos
- Sélectionner plusieurs à false
- Dicté du texte et mécanisme d'arrêt
</aside>

--

<!-- .slide:  data-background-image="assets/assistivetouch/IMG_9474.PNG" data-background-opacity="1" data-background-color="#B4A088" data-background-size="contain" -->
## configuration assistiveTouch {style="top: 0.5em !important;"}
<aside class="notes">

- Reglage / Accessibiliter / Toucher / Assistive Touch

</aside>

--

<!-- .slide:  data-background-image="assets/assistivetouch/IMG_9475.PNG" data-background-opacity="1" data-background-color="#B4A088" data-background-size="contain" -->
## Détails AssistiveTouch {style="top: -9.25em !important;"}
<aside class="notes">

-  Assistive Touch
</aside>

--

<!-- .slide:  data-background-image="assets/assistivetouch/IMG_9477.PNG" data-background-opacity="1" data-background-color="#B4A088" data-background-size="contain" onclick="Reveal.slide(9)"  -->
## Configuration boutton {style="top: -1.2em !important;"}
<aside class="notes">

-  Expliquer la configuration click, double click, long click, 
-  clic sur le titre pour sauter à la dernière diapo
- dicter:reel https://www.icloud.com/shortcuts/8baaff8d839d40bb851060ae1c4da866
</aside>

---

<!-- .slide:  data-background-opacity="1" data-background-color="#B4A088" data-background-size="contain" -->

## Chapitre 5
## Documenter ses voyages
## 6 de 6: Dictaphone en temps réel
### 6 méthodes pour 
### documenter ses voyages
- 🎙3 méthodes en mode différéfféré
- ⏱ 3 méthodes en mode temps réel
> 🎯 Ultra simple et rapide : capturez chaque moment, à votre rythme !
<aside class="notes">

En mode temps réel, on sauvegardes les notes avec la data et l'heure du moment.  Ce qui permettra de relier les notes aux photos et vidéos prises durant le voyage.  Cela nécessitera cependant un peu plus de travail de post-production et une validation de votre part pour vous assurer que les notes correspondent bien aux photos et vidéos.
</aside>

--

<!-- .slide:  data-background-image="assets/home.PNG" data-background-opacity="1" data-background-color="#B4A088" data-background-size="contain" -->

## Méthode immediate
## Dictaphone

<aside class="notes">

- on sélectionnne le raccourcie photo:Voix
</aside>

--

<!-- .slide:  data-background-image="assets/assistivetouch/IMG_D18156F6F6F3-1.jpeg" data-background-opacity="1" data-background-color="#B4A088" data-background-size="contain" -->

## Button AssistiveTouch
<aside class="notes">

- On sélection la photo ou la vidéo que nous voulons documenter
- on fait un click long sur le bouton Assistive Touch pour demarer le dictaphone
</aside>

--

<!-- .slide:  data-background-image="assets/photo-dictaphone/IMG_9509.PNG" data-background-opacity="1" data-background-color="#B4A088" data-background-size="contain" -->

## Dictaphone activé {style="top: -10.25em !important;"}

<aside class="notes">

- visible en haut au centre de l'écran
- on click sur le haut de l'écran pour accéder à l'interface du dictaphone

</aside>

--

<!-- .slide:  data-background-image="assets/photo-dictaphone/IMG_9510.PNG" data-background-opacity="1" data-background-color="#B4A088" data-background-size="contain" -->

## On dicte le texte 

<aside class="notes">

- on clic sur ok pour arrêter l'enregistrement
</aside>

--

<!-- .slide:  data-background-image="assets/start-dictaphone/2026-01-01 à 15.02.40.jpeg" data-background-opacity="1" data-background-color="#B4A088" data-background-size="contain" -->
## Fichier résultants {style="top: 0em !important;"}
<aside class="notes">

- On obtiens une transcription audio associé à la photo ou la vidéo sélectionnée
- on peut écouter l'audio en cliquant sur le triangle de lecture
- Le nom du fichier correspond à la date et l'heure du moment puisque nous sommes en mode immédiat
- 
</aside>

--

<!-- .slide:  data-background-image="assets/home.PNG" data-background-opacity="1" data-background-color="#B4A088" data-background-size="contain" -->
## Édition du raccourci

<aside class="notes">

- On peut éditer le raccourcis pour voir comment il fonctionne
- selectionne Photo:voix
</aside>

--

<!-- .slide:  data-background-image="assets/racourcis.PNG" data-background-opacity="1" data-background-color="#B4A088" data-background-size="contain" -->
## Sélection du raccourci

<aside class="notes">

- selection Dictaphone:Start
</aside>

--

<!-- .slide:  data-background-image="assets/start-dictaphone/IMG_9467.PNG" data-background-opacity="1" data-background-color="#B4A088" data-background-size="contain" -->
## Modifier raccourci {style="top: -6em !important;"}

<aside class="notes">

- Modifier le raccourcis
</aside>

--

<!-- .slide:  data-background-image="assets/start-dictaphone/IMG_9468.PNG" data-background-opacity="1" data-background-color="#B4A088" data-background-size="contain" -->

<aside class="notes">

- Sélectionnner toutes les photos
- Sélectionner plusieurs à false
- Dicté du texte et mécanisme d'arrêt
</aside>

--

<!-- .slide:  data-background-image="assets/assistivetouch/IMG_9474.PNG" data-background-opacity="1" data-background-color="#B4A088" data-background-size="contain" -->
## Configuration assistiveTouch {style="top: 0.5em !important;"}
<aside class="notes">

- Reglage / Accessibiliter / Toucher / Assistive Touch

</aside>

--

<!-- .slide:  data-background-image="assets/assistivetouch/IMG_9475.PNG" data-background-opacity="1" data-background-color="#B4A088" data-background-size="contain" -->
## Détails AssistiveTouch {style="top: -9.25em !important;"}
<aside class="notes">

-  Assistive Touch
</aside>

--

<!-- .slide:  data-background-image="assets/assistivetouch/IMG_9477.PNG" data-background-opacity="1" data-background-color="#B4A088" data-background-size="contain"  onclick="Reveal.slide(9)" -->
## Configuration boutton {style="top: -1.2em !important;"}
<aside class="notes">

-  configuration
-  clic sur le titre pour sauter à la dernière diapo
-  dictation:start https://www.icloud.com/shortcuts/8466d329ed484be6830991c050297c4c
</aside>

---

<!-- .slide: data-background-image="assets/webinaire-gratuit.png" data-background-opacity="1" data-background-color="#9013FE" data-background-size="contain"  -->

--

<!-- .slide: data-background-image="assets/5-documentation-background.png" data-background-opacity="1" data-background-color="#B4A088" data-background-size="contain" -->

## Chapitre 5 
## Documenter ses voyages
<div style="position: absolute; top: -2em !important;">
C'est à vous de jouer!

Le voyage de vos rêves est à portée de main.

Inscrivez-vous maintenant à notre webinaire gratuit et commencez l'aventure 
https://www.twai.world/fr/home

Suivez nous sur les réseaux sociaux:

- https://ca.pinterest.com/twaiworld
- https://www.facebook.com/yvan.ross.5
- https://www.facebook.com/profile.php?id=100067792869970
- https://www.instagram.com/twaiworld
- https://www.linkedin.com/in/yvanross       
- https://www.youtube.com/@twaiworld
- mailto:gestionprojetrossy@gmail.com
      
N'oubliez pas d'ajouter un like et de vous abonner!

Voir tout ces liens dans les commentaires.
</div>

<style>

  h2 {
   margin-top: -20px !important;
      color: #000000 !important;
      background-color: #ffffff !important;
      position: relative !important;
      top: -350px !important;
      padding: 10px 10px !important;
      opacity: 0.75 !important;
      border-radius: 10px !important;

   }
   h3 {
      color: #FFFFFF !important;
   }
   .reveal {
      background-color: #000000 !important;
   }
	.reveal .slide-background::after {
	content: '';
	position: absolute;
	top: 10px;
	right: 20px;
	width: 100px;
	height: 100px;
	background-image: url('/public/img/twai_logo_blanc.webp');
   background-size: contain;
   background-repeat: no-repeat;
   }
   .reveal a {
      color: #FFFFFF !important;
      text-decoration: underline !important;
   }
   .reveal a:hover {
      color: #DDDDDD !important;
   }
   </style>

   <script>
  Reveal.initialize({
    transition: 'slide',
    backgroundTransition: 'fade', // optional, for backgrounds
    slideNumber: true
  });
</script>

---

## Ressource — 1.8 video conseils documenter emotion

<div class="video-container mb-4">
  <div class="ratio ratio-16x9 shadow-sm rounded-4 overflow-hidden border bg-light">
    <iframe src="https://drive.google.com/file/d/1TmunAwmFOPk5Ke5fbI4L1HFQg0r56bP2/preview" title="Documenter les émotions et les impressions" loading="lazy" allow="autoplay; encrypted-media; fullscreen; picture-in-picture" allowfullscreen></iframe>
  </div>
</div>

## 🎙️ Script

🎵 (Musique légère, visuel de carnet ouvert, photo + texte)

« Tu as pris une photo.  
Mais qu’as-tu ressenti à ce moment-là?

Documenter ton voyage, ce n’est pas juste noter où tu es allé.  
C’est capturer ce que tu as vécu.

Voici 3 façons de documenter l’émotion :

1. Écris une anecdote ou une impression chaque jour.  
2. Associe une photo à une phrase ou une citation.  
3. Note ce que tu as appris ou ressenti à chaque étape.

Ton carnet de bord, c’est ton miroir intérieur.  
Et parfois, c’est là que le vrai voyage commence. »

🖥️ Texte à l’écran :  
« Astuce : une émotion par jour = un souvenir inoubliable »

---

## Ressource — 1.9 formulaire feedback post voyage

> **Action Requise :** Vous revenez de voyage ? Félicitations ! Votre expérience est la ressource la plus précieuse pour les futurs explorateurs. Partagez ce qui a fonctionné et ce qui a échoué.

### 🎥 Boucler la boucle
<div class="video-container mb-4">
  <div class="ratio ratio-16x9 shadow-sm rounded-4 overflow-hidden border bg-light">
    <iframe src="https://drive.google.com/file/d/1OSdFAaR3tbWqfKQDzeW7NR5f-Qvb5IlE/preview" title="Faire le bilan après le voyage" loading="lazy" allow="autoplay; encrypted-media; fullscreen; picture-in-picture" allowfullscreen></iframe>
  </div>
</div>

### 🎯 Utilité de ce formulaire
Ce retour d’expérience permet à l’IA de :
- Valider ou corriger ses recommandations de lieux et d’itinéraires.
- Identifier les outils qui vous ont été les plus utiles.
- Préparer votre prochain projet sur la base de vos apprentissages réels.

---

### 📝 Questions pour votre bilan personnel
1. Quel outil de la guide a été votre "Game Changer" ?
2. Quelle recommandation de l’IA était la plus précise ?
3. Avez-vous rencontré un problème que nous n’avions pas anticipé ?
4. Sur une échelle de 1 à 10, quel a été votre niveau de sérénité grâce à votre planification ?
5. Un conseil "pépite" à donner à un voyageur qui part au même endroit que vous ?

---

## Ressource — 2.1 documentation

## Objectif
Capturer souvenirs et expériences de voyage.

## Formulaire : Documentation
- Types de contenus :
  - [ ] Photos
  - [ ] Vidéos
  - [ ] Notes / journal
  - [ ] Recettes locales
  - [ ] Cartes personnalisées
- Moyen de sauvegarde :
  - [ ] Cloud
  - [ ] Disque dur
  - [ ] Papier
- Partage :
  - [ ] Réseaux sociaux
  - [ ] Famille / amis
  - [ ] Blog personnel

### Lien avec autres chapitres
- Profil voyageur → personnaliser selon style
- Google My Maps → géolocaliser souvenirs

---

## Ressource — 2.2 application take notes

| Nom | Lien Web | Description | Forces | Faiblesses | Plateformes | Popularité (sur 5) | Export / Partage | Note personnalisée |
|--------|--------|--------|--------|--------|--------|--------|--------|--------|
| Joplin | [joplinapp.org](https://joplinapp.org) | Notes, carnets, tâches, support Markdown, pièces jointes | Open source, synchronisation flexible | Interface moins moderne | Windows, macOS, Linux, Android, iOS | 4.5 | Markdown, PDF, HTML, etc. | Idéal pour notes structurées et exportables |
| Obsidian | [obsidian.md](https://obsidian.md) | Notes interconnectées, Markdown, plugins puissants | Très personnalisable, graphes de liens | Certaines fonctions payantes | Windows, macOS, Linux, Android, iOS | 4.6 | Markdown, plugins | Parfait pour voyageurs qui aiment relier leurs idées |
| Evernote | [evernote.com](https://evernote.com) | Notes riches (texte, audio, images), rappels, balises | Multiplateforme, fonctionnalités avancées | Version gratuite limitée | Windows, macOS, Android, iOS | 4.2 | PDF, texte, partage | Classique, fiable, mais nécessite un compte |
| Notion | [notion.so](https://www.notion.so) | Base de données, notes, tableaux, checklists, modèles personnalisés | Ultra flexible, collaboration | Hors ligne partiel, apprentissage | Windows, macOS, Android, iOS | 4.4 | Markdown, PDF, CSV, partage | Idéal pour projets collaboratifs et organisation [optimisé](https://youtu.be/pj3_7Xg2Iwg?si=qpeTeukbB_rU9EOw) |
| Standard Notes | [standardnotes.com](https://standardnotes.com) | Simple, sécurisé, chiffré de bout en bout, fonctionne bien hors ligne | Sécurité, confidentialité, simplicité | Moins de fonctions avancées | Windows, macOS, Linux, Android, iOS | 4.1 | Texte, Markdown, partage | Parfait pour voyageurs soucieux de confidentialité |
| Google Keep | [keep.google.com](https://keep.google.com) | Notes rapides, audio, photos, rappels | Simplicité, intégration Google | Fonctionnalités limitées | Android, iOS | 4.0 | Texte, partage | Idéal pour prises de notes instantanées |
| Diaro | [diaroapp.com](https://www.diaroapp.com) | Journal intime avec localisation, météo, balises | Organisation par balises, localisation | Version gratuite limitée | Android, iOS, Web | 3.8 | Texte, PDF, partage | Pratique pour documenter ses voyages |
| Journey | [journey.cloud](https://journey.cloud) | Journal de voyage avec photo, météo, export PDF/Markdown | Interface agréable, export facile | Certaines fonctions payantes | Android, iOS, Web | 4.2 | PDF, Markdown, partage | Idéal pour garder trace de ses aventures |
| Day One | [dayoneapp.com](https://dayoneapp.com) | Journal intime avec photos, météo, rappel de lieux | Design premium, intégration Apple | iOS/macOS uniquement, payant | iOS, macOS | 4.5 | PDF, texte, partage | Référence pour journaux personnels sur Apple |

## Bonus – Applications photos + journal de voyage

| Nom | Lien Web | Description | Forces | Faiblesses | Plateformes | Popularité (sur 5) | Export / Partage | Note personnalisée |
|--------|--------|--------|--------|--------|--------|--------|--------|--------|
| Polarsteps | [polarsteps.com](https://www.polarsteps.com) | Suivi automatique du parcontenu, photos, textes | Très simple à utiliser, belle présentation | Fonctionnalités avancées payantes | Android, iOS, Web | 4.0 | Export GPX, partage social | Idéal pour documenter son voyage facilement |
| Travel Mapper | [travelmapper.io](https://www.travelmapper.io) | Cartographie, journal de voyage, photos | Interface claire, bonne personnalisation | Moins connu, fonctionnalités limitées | Web | 3.5 | Export GPX, partage | Bon outil web pour voyageurs connectés |
| FindPenguins | https://findpenguins.com | Plateforme de suivi et de journal de voyage pour enregistrer, cartographier et partager ses voyages avec photos et récits | Suivi GPS automatique, cartes esthétiques, livres photo, partage facile | Personnalisation limitée, certaines fonctionnalités payantes | Web, iOS, Android | 4/5 | Liens de partage, fil social, livre photo imprimé | Idéal pour les longs voyages et la vanlife afin de documenter visuellement les trajets et souvenirs |

## Applications pour notes vocales hors ligne

| Nom | Lien Web | Description | Forces | Faiblesses | Plateformes | Popularité (sur 5) | Export / Partage | Note personnalisée |
|--------|--------|--------|--------|--------|--------|--------|--------|--------|
| Easy Voice Recorder | [digipom.com/easy-voice-recorder](https://www.digipom.com/easy-voice-recorder/) | Enregistreur vocal simple et fiable | Facile à utiliser, fiable | Interface un peu basique | Android, iOS | 4.0 | Formats audio standards | Très utile pour capturer rapidement des idées |
| Otter.ai (premium) | [otter.ai](https://otter.ai) | Transcription IA, transcription en temps réel | Transcriptions automatiques précises | Hors ligne partiel, abonnement payant | Android, iOS | 4.2 | Export texte, partage | Idéal pour réunions ou interviews avec IA |
| Dictation (Dictée) | [Apple Support](https://support.apple.com/en-us/HT202584) | Reconnaissance vocale native Apple, hors ligne | Intégré macOS, rapide, sans app tierce | Limité à l’écosystème Apple | macOS | 4.3 | Texte copiable | Parfait pour utilisateurs Mac cherchant simplicité |

---

## Ressource — 2.3 structurer carnet bord

## 🎯 Objectif
Organiser ton carnet pour qu’il soit utile, agréable et facile à compléter pendant ton voyage.

---

## 🧭 Sections recommandées

- Page d’intention : pourquoi je voyage
- Itinéraire : étapes, dates, lieux
- Repères visuels : photos, croquis, cartes
- Journal quotidien : impressions, anecdotes, émotions
- Liste d’activités : à faire, à refaire, à éviter
- Contacts et infos utiles : hébergements, numéros, adresses
- Budget et dépenses : suivi simple
- Souvenirs : tickets, objets, citations

---

## ☑️ Conseils

- Prévois une section libre pour les imprévus
- Numérote les pages ou crée un sommaire
- Utilise des codes couleur ou des symboles
- Garde une copie numérique si possible

---

## 📝 Notes personnelles

📓 Mon carnet contiendra : __________________________  
🎨 Mon style visuel : __________________________  
🧠 Ce que je veux y retrouver : __________________________

---

## Ressource — 2.4 pdf structure carnet bord

## 🎯 Objectif
Organiser ton carnet pour qu’il soit utile, agréable et facile à compléter pendant ton voyage.

---

## 🧭 Sections recommandées

- Page d’intention : pourquoi je voyage
- Itinéraire : étapes, dates, lieux
- Repères visuels : photos, croquis, cartes
- Journal quotidien : impressions, anecdotes, émotions
- Liste d’activités : à faire, à refaire, à éviter
- Contacts et infos utiles : hébergements, numéros, adresses
- Budget et dépenses : suivi simple
- Souvenirs : tickets, objets, citations

---

## ☑️ Conseils

- Prévois une section libre pour les imprévus
- Numérote les pages ou crée un sommaire
- Utilise des codes couleur ou des symboles
- Garde une copie numérique si possible

---

## 📝 Notes personnelles

📓 Mon carnet contiendra : __________________________  
🎨 Mon style visuel : __________________________  
🧠 Ce que je veux y retrouver : __________________________

---

## Ressource — 2.5 video tuto carnet numerique

<div class="video-container mb-4">
  <div class="ratio ratio-16x9 shadow-sm rounded-4 overflow-hidden border bg-light">
    <iframe src="https://drive.google.com/file/d/1WuG_nZo9uDXDtpk_c86d672Jz5Gadbz8/preview" title="Créer un carnet de bord numérique" loading="lazy" allow="autoplay; encrypted-media; fullscreen; picture-in-picture" allowfullscreen></iframe>
  </div>
</div>

## 🎙️ Script

🎥 (Capture d’écran de Notion, Google Docs, Canva, ou autre outil)

« Dans ce tutoriel, je te montre comment créer un carnet de bord numérique simple et efficace.

1. Choisis ton outil : Notion, Google Docs, Canva, ou une appli dédiée.  
2. Crée des sections : itinéraire, journal, photos, contacts, budget.  
3. Ajoute des modèles ou des tableaux pour faciliter la saisie.  
4. Synchronise avec ton téléphone pour y accéder partout.  
5. Pense à sauvegarder régulièrement et à activer l’accès hors ligne.

Ton carnet numérique peut être aussi créatif qu’un carnet papier…  
et il tient dans ta poche. »

🧠 Astuce : utilise des emojis ou des couleurs pour repérer tes étapes plus facilement.

---

## Ressource — 2.6 documentation media guide

<!-- .slide:  data-background-opacity="1" data-background-color="#B4A088" data-background-size="contain" -->

### documenter ses voyages
- 🎙3 méthodes en mode différéfféré
- ⏱ 3 méthodes en mode temps réel
> 🎯 Ultra simple et rapide : capturez chaque moment, à votre rythme !

<aside class="notes">
- Les 3 méthodes sont : texte, dicter et dictaphone.

- En mode différé, on peut sauvegarder nos notes dans un documents dont le nom correspond au nom de la photo ou du vidéo sélectionné.

- En mode temps réel, on sauvegardes les notes avec la data et l'heure du moment.  Ce qui permettra de relier les notes aux photos et vidéos prises durant le voyage.  Cela nécessitera cependant un peu plus de travail de post-production et une validation de votre part pour vous assurer que les notes correspondent bien aux photos et vidéos.
</aside>

---

<!-- .slide:  data-background-opacity="1" data-background-color="#B4A088" data-background-size="contain" -->

## Chapitre 5
## Documenter ses voyages
## 1 de 6: Texte en mode différé
### 6 méthodes pour 
### documenter ses voyages
- 🎙3 méthodes en mode différéfféré
- ⏱ 3 méthodes en mode temps réel
> 🎯 Ultra simple et rapide : capturez chaque moment, à votre rythme !

<aside class="notes">
- En mode différé, on peut sauvegarder nos notes dans un documents dont le nom correspond au nom de la photo ou du vidéo sélectionné.
</aside>

--

<!-- .slide:  data-background-image="assets/home.PNG" data-background-opacity="1" data-background-color="#B4A088" data-background-size="contain" -->

## Méthode différée
## Texte

<aside class="notes">

- En mode différé, on peut sauvegarder nos notes dans un documents dont le nom correspond au nom de la photo ou du vidéo sélectionné.
  
- on sélectionnne le raccourcie photo:Texte
</aside>

--

<!-- .slide:  data-background-image="assets/IMG_2D233B9756C3-1.jpeg" data-background-opacity="1" data-background-color="#B4A088" data-background-size="contain" -->

## Selectionnner le média

<aside class="notes">

- On sélection la photo ou la vidéo que nous voulons documenter
</aside>

--

<!-- .slide:  data-background-image="assets/photo-texte/IMG_9440.PNG" data-background-opacity="1" data-background-color="#B4A088" data-background-size="contain" -->

## On écrit le texte {style="top: -2em !important;"}

<aside class="notes">

- On écrit simplement les commentaires que nous voulons associer à la photo ou la vidéo sélectionnée
- On peut aussi sélectionner le mode dicté en bas de l'écran du clavier pour dicter le texte au lieu de l'écrire
</aside>

--

<!-- .slide:  data-background-image="assets/photo-texte/IMG_9442.PNG" data-background-opacity="1" data-background-color="#B4A088" data-background-size="contain" -->

## On dicte le texte {style="top: -2em !important;"}

<aside class="notes">

- On dicte simplement les commentaires que nous voulons associer à la photo ou la vidéo sélectionnée
- On peut corriger le texte s'il y a des erreurs de transcription
- On termine en appuyant sur OK
</aside>

--

<!-- .slide:  data-background-image="assets/home.PNG" data-background-opacity="1" data-background-color="#B4A088" data-background-size="contain" -->

## Fichiers - Texte 

<aside class="notes">

- On ouvre l'application Fichiers pour retrouver le document texte créé
</aside>

--

<!-- .slide:  data-background-image="assets/fichiers.PNG" data-background-opacity="1" data-background-color="#B4A088" data-background-size="contain" -->
## Fichiers résultants {style="top: -9em !important;"}
<aside class="notes">

- On observe ici les fichiers sauvegardés quand on a utilisé la méthode texte
- Le nom du fichier correspond au nom de la photo ou de la vidéo sélectionnée
- On peut ouvrir le fichier pour voir le texte sauvegardé
- on peut exporter le fichier en sélection le mode de partage désiré en bas à gauche de l'écran
</aside>

--

<!-- .slide:  data-background-image="assets/photo-texte/IMG_DF820904A6A9-1.jpeg" data-background-opacity="1" data-background-color="#B4A088" data-background-size="contain" -->

<aside class="notes">

- On observe ici les fichiers sauvegardés quand on a utilisé la méthode texte
- Le nom du fichier correspond au nom de la photo ou de la vidéo sélectionnée
- On peut ouvrir le fichier pour voir le texte sauvegardé
- on peut exporter le fichier en sélection le mode de partage désiré en bas à gauche de l'écran
</aside>

--

<!-- .slide:  data-background-image="assets/home.PNG" data-background-opacity="1" data-background-color="#B4A088" data-background-size="contain" -->
## Édition du raccourci

<aside class="notes">

- On observe ici les fichiers sauvegardés quand on a utilisé la méthode texte
- Le nom du fichier correspond au nom de la photo ou de la vidéo sélectionnée
- On peut ouvrir le fichier pour voir le texte sauvegardé
- on peut exporter le fichier en sélection le mode de partage désiré en bas à gauche de l'écran
</aside>

--

<!-- .slide:  data-background-image="assets/racourcis.PNG" data-background-opacity="1" data-background-color="#B4A088" data-background-size="contain" -->
## Sélection du raccourci

<aside class="notes">

- selection photo:Texte
</aside>

--

<!-- .slide:  data-background-image="assets/photo-texte/IMG_9506.PNG" data-background-opacity="1" data-background-color="#B4A088" data-background-size="contain" -->
## Modifier raccourci

<aside class="notes">

- Modifier le raccourcis
</aside>

--

<!-- .slide:  data-background-image="assets/photo-texte/IMG_9507.PNG" data-background-opacity="1" data-background-color="#B4A088" data-background-size="contain" -->

<aside class="notes">

- Sélectionnner toutes les photos
- Sélectionner plusieurs à false
- Demander Texte aved Alerte
</aside>

--

<!-- .slide:  data-background-image="assets/photo-texte/IMG_9508.PNG" data-background-opacity="1" data-background-color="#B4A088" data-background-size="contain" -->

<aside class="notes">

- Ajjouter demander une entrée à Photo permet de sauvegarder le texte dans un document dont le nom correspond au nom de la photo ou de la vidéo sélectionnée
- On peut valider l'exécution du raccourcis en cliquant en bas à droite sur l'icône de lecture pour le faire exécuter immédiatement.
</aside>

--

<!-- .slide:  data-background-image="assets/photo-texte/IMG_9506.PNG" data-background-opacity="1" data-background-color="#B4A088" data-background-size="contain" -->
## Raccourci sur l'écran d'accueil

<aside class="notes">

- Selection détails pour pouvoir créer un raccourcie sur l'écran d'accueil
</aside>

--

<!-- .slide:  data-background-image="assets/photo-texte/IMG_9533.PNG" data-background-opacity="1" data-background-color="#B4A088" data-background-size="contain" onclick="Reveal.slide(9)" -->
## Création du raccourci {style="top: -10.5em !important;"}

<aside class="notes">

- Sélectionner ajouter sur l'écran d'accueil
- Ensuite on choisi l'icone et la couleur désirée
- On peut ensuite accéder au raccourcie directement depuis l'écran d'accueil de l'iPhone
- On peut déplacer l'icone où on le désire sur l'écran d'accueil en maintenant le doigt appuyé sur l'icone jusqu'à ce qu'elle se mette à bouger
- clic sur le titre pour sauter à la dernière diapo
- photo:texte https://www.icloud.com/shortcuts/2ce309c5a2524d28bee41702b77945e8
</aside>

---

<!-- .slide:  data-background-opacity="1" data-background-color="#B4A088" data-background-size="contain" -->

## Chapitre 5
## Documenter ses voyages
## 2 de 6: Dicter en mode différé
### 6 méthodes pour 
### documenter ses voyages
- 🎙3 méthodes en mode différé
- ⏱ 3 méthodes en mode temps réel
> 🎯 Ultra simple et rapide : capturez chaque moment, à votre rythme !
<aside class="notes">
En mode différé, on peut sauvegarder nos notes dans un documents dont le nom correspond au nom de la photo ou du vidéo sélectionné.
</aside>

--

<!-- .slide:  data-background-image="assets/home.PNG" data-background-opacity="1" data-background-color="#B4A088" data-background-size="contain" -->

## Méthode différée
## Dicté

<aside class="notes">

- on sélectionnne le raccourcie photo:Dicté

</aside>

--

<!-- .slide:  data-background-image="assets/IMG_2D233B9756C3-1.jpeg" data-background-opacity="1" data-background-color="#B4A088" data-background-size="contain" -->

## Selectionnner media

<aside class="notes">

- On sélection la photo ou la vidéo que nous voulons documenter
</aside>

--

<!-- .slide:  data-background-image="assets/photo-dicter/IMG_9445.PNG" data-background-opacity="1" data-background-color="#B4A088" data-background-size="contain" -->

## Mode dicté activé {style="top: -2em !important;"}

<aside class="notes">

</aside>

--

<!-- .slide:  data-background-image="assets/photo-dicter/IMG_9446.PNG" data-background-opacity="1" data-background-color="#B4A088" data-background-size="contain" -->

## On dicte le texte {style="top: -2em !important;"}

<aside class="notes">

- On dicte simplement les commentaires que nous voulons associer à la photo ou la vidéo sélectionnée
- On peut difficilement corriger le texte s'il y a des erreurs de transcription
- On termine en appuyant sur OK
</aside>

--

<!-- .slide:  data-background-image="assets/home.PNG" data-background-opacity="1" data-background-color="#B4A088" data-background-size="contain" -->

## Fichiers - Texte 

<aside class="notes">
- On ouvre l'application Fichiers pour retrouver le document texte créé

</aside>

--

<!-- .slide:  data-background-image="assets/fichiers.PNG" data-background-opacity="1" data-background-color="#B4A088" data-background-size="contain" -->
## Fichier résultants {style="top: -9em !important;"}

<aside class="notes">

- On observe ici les fichiers sauvegardés quand on a utilisé la méthode texte
- Le nom du fichier correspond au nom de la photo ou de la vidéo sélectionnée
- On peut ouvrir le fichier pour voir le texte sauvegardé
- on peut exporter le fichier en sélection le mode de partage désiré en bas à gauche de l'écran
</aside>

--

<!-- .slide:  data-background-image="assets/photo-dicter/IMG_9448.PNG" data-background-opacity="1" data-background-color="#B4A088" data-background-size="contain" -->

<aside class="notes">

- On observe ici les fichiers sauvegardés quand on a utilisé la méthode texte
- Le nom du fichier correspond au nom de la photo ou de la vidéo sélectionnée
- On peut ouvrir le fichier pour voir le texte sauvegardé
- on peut exporter le fichier en sélection le mode de partage désiré en bas à gauche de l'écran
</aside>

--

<!-- .slide:  data-background-image="assets/home.PNG" data-background-opacity="1" data-background-color="#B4A088" data-background-size="contain" -->
## Édition du raccourci

<aside class="notes">

- On peut éditer le raccourcis pour voir comment il fonctionne
</aside>

--

<!-- .slide:  data-background-image="assets/racourcis.PNG" data-background-opacity="1" data-background-color="#B4A088" data-background-size="contain" -->
## Sélection du raccourci

<aside class="notes">

- selection photo:Dicté
</aside>

--

<!-- .slide:  data-background-image="assets/photo-dicter/IMG_9458.PNG" data-background-opacity="1" data-background-color="#B4A088" data-background-size="contain" -->
## Modifier raccourci

<aside class="notes">

- Modifier le raccourcis
</aside>

--

<!-- .slide:  data-background-image="assets/photo-dicter/IMG_9459.PNG" data-background-opacity="1" data-background-color="#B4A088" data-background-size="contain" -->

<aside class="notes">

- Sélectionnner toutes les photos
- Sélectionner plusieurs à false
- Dicté du texte et mécanisme d'arrêt
</aside>

--

<!-- .slide:  data-background-image="assets/photo-dicter/IMG_9460.PNG" data-background-opacity="1" data-background-color="#B4A088" data-background-size="contain" -->

<aside class="notes">

- Enregistrement du texte dicté dans le répertoire souhaité
</aside>

--

<!-- .slide:  data-background-image="assets/photo-dicter/IMG_9458.PNG" data-background-opacity="1" data-background-color="#B4A088" data-background-size="contain" -->
## Raccourci sur l'écran d'accueil

<aside class="notes">

- Selection détails pour pouvoir créer un raccourcie sur l'écran d'accueil
</aside>

--

<!-- .slide:  data-background-image="assets/photo-dicter/IMG_DF069144D89E-1.jpeg" data-background-opacity="1" data-background-color="#B4A088" data-background-size="contain" onclick="Reveal.slide(9)"  -->
## Création du raccourci {style="top: -10.5em !important;"}

<aside class="notes">

- Sélectionner ajouter sur l'écran d'accueil
- Ensuite on choisi l'icone et la couleur désirée
- On peut ensuite accéder au raccourcie directement depuis l'écran d'accueil de l'iPhone
- On peut déplacer l'icone où on le désire sur l'écran d'accueil en maintenant le doigt appuyé sur l'icone jusqu'à ce qu'elle se mette à bouger
- clic sur le titre pour sauter à la dernière diapo
- photo:Dicté https://www.icloud.com/shortcuts/0e6687548bf443bb83095137c74a999c
</aside>

---

<!-- .slide:  data-background-opacity="1" data-background-color="#B4A088" data-background-size="contain" -->

## Chapitre 5
## Documenter ses voyages
## 3 de 6: Dictaphone en mode différé
### 6 méthodes pour 
### documenter ses voyages
- 🎙3 méthodes en mode différéfféré
- ⏱ 3 méthodes en mode temps réel
> 🎯 Ultra simple et rapide : capturez chaque moment, à votre rythme !
<aside class="notes">

En mode différé, on peut sauvegarder nos notes dans un documents dont le nom correspond au nom de la photo ou du vidéo sélectionné.
</aside>

--

<!-- .slide:  data-background-image="assets/home.PNG" data-background-opacity="1" data-background-color="#B4A088" data-background-size="contain" -->

## Méthode différée
## Dictaphone

<aside class="notes">

- on sélectionnne le raccourcie photo:Voix
</aside>

--

<!-- .slide:  data-background-image="assets/IMG_2D233B9756C3-1.jpeg" data-background-opacity="1" data-background-color="#B4A088" data-background-size="contain" -->

## Selectionnner média

<aside class="notes">

- On sélection la photo ou la vidéo que nous voulons documenter
</aside>

--

<!-- .slide:  data-background-image="assets/photo-dictaphone/IMG_9509.PNG" data-background-opacity="1" data-background-color="#B4A088" data-background-size="contain" -->

## Dictaphone activé {style="top: -10.25em !important;"}

<aside class="notes">

- visible en haut au centre de l'écran
</aside>

--

<!-- .slide:  data-background-image="assets/photo-dictaphone/IMG_9510.PNG" data-background-opacity="1" data-background-color="#B4A088" data-background-size="contain" -->

## On dicte le texte {style="top: -9.5em !important;"}

<aside class="notes">

- on click sur le haut de l'écran pour accéder à l'interface du dictaphone
- on clic sur ok pour arrêter l'enregistrement
</aside>

--

<!-- .slide:  data-background-image="assets/photo-dictaphone/IMG_9511.PNG" data-background-opacity="1" data-background-color="#B4A088" data-background-size="contain" -->
## on termine l'enregistrement {style="top: 2em !important;"}
<aside class="notes">

- On termine l'enregistrement en appuyant sur le bouton rouge en bas au centre de l'écran
- On obtiens une transcription audio associé à la photo ou la vidéo sélectionnée
- on peut écouter l'audio en cliquant sur le triangle de lecture
- on peut exporter le fichier en sélectionnant modifier en haut à droite
</aside>

--

<!-- .slide:  data-background-image="assets/home.PNG" data-background-opacity="1" data-background-color="#B4A088" data-background-size="contain" -->
## Édition du raccourci

<aside class="notes">

- On peut éditer le raccourcis pour voir comment il fonctionne
- selectionne Photo:voix
</aside>

--

<!-- .slide:  data-background-image="assets/racourcis.PNG" data-background-opacity="1" data-background-color="#B4A088" data-background-size="contain" -->
## Sélection du raccourci

<aside class="notes">

- selection photo:Dictaphone
</aside>

--

<!-- .slide:  data-background-image="assets/photo-dictaphone/IMG_9462.PNG" data-background-opacity="1" data-background-color="#B4A088" data-background-size="contain" -->

## Modifier le raccourci {style="top: -10em !important;"}

<aside class="notes">

- Modifier le raccourcis
</aside>

--

<!-- .slide:  data-background-image="assets/photo-dictaphone/IMG_9463.PNG" data-background-opacity="1" data-background-color="#B4A088" data-background-size="contain" -->

<aside class="notes">

- Enregistrement du texte dicté dans le répertoire souhaité
- On teste avec le bouton de lecture en bas à droite
</aside>

--

<!-- .slide:  data-background-image="assets/photo-dictaphone/IMG_9462.PNG" data-background-opacity="1" data-background-color="#B4A088" data-background-size="contain" -->
## Raccourci sur l'écran d'accueil {style="top: -10em !important;"}

<aside class="notes">

- Selection détails pour pouvoir créer un raccourcie sur l'écran d'accueil
</aside>

--

<!-- .slide:  data-background-image="assets/photo-dictaphone/IMG_3960F9DE7CB7-1.jpeg" data-background-opacity="1" data-background-color="#B4A088" data-background-size="contain" onclick="Reveal.slide(9)" -->
## Création du raccourci  {style="top: -10.5em !important;"}

<aside class="notes">

- Sélectionner ajouter sur l'écran d'accueil
- Ensuite on choisi l'icone et la couleur désirée
- On peut ensuite accéder au raccourcie directement depuis l'écran d'accueil de l'iPhone
- On peut déplacer l'icone où on le désire sur l'écran d'accueil en maintenant le doigt appuyé sur l'icone jusqu'à ce qu'elle se mette à bouger
-  clic sur le titre pour sauter à la dernière diapo
-  photo:dictaphone https://www.icloud.com/shortcuts/fdb1b65eacb94a589224f8e9ed36c8ef
</aside>

---

<!-- .slide:  data-background-opacity="1" data-background-color="#B4A088" data-background-size="contain" -->

## Chapitre 5
## Documenter ses voyages
## 4 de 6: Texte en temps réel
### 6 méthodes pour 
### documenter ses voyages
- 🎙3 méthodes en mode différéfféré
- ⏱ 3 méthodes en mode temps réel
> 🎯 Ultra simple et rapide : capturez chaque moment, à votre rythme !
<aside class="notes">

En mode temps réel, on sauvegardes les notes avec la date et l'heure du moment.  Ce qui permettra de relier les notes aux photos et vidéos prises durant le voyage.  Cela nécessitera cependant un peu plus de travail de post-production et une validation de votre part pour vous assurer que les notes correspondent bien aux photos et vidéos.
</aside>

--

<!-- .slide:  data-background-image="assets/home.PNG" data-background-opacity="1" data-background-color="#B4A088" data-background-size="contain" -->

## Méthode immédiate
## Texte

<aside class="notes">

- En mode immédiat, on peut sauvegarder nos notes dans un documents dont le nom correspond à la date et l'heure du moment.
- Ouvrir l'application photo
</aside>

--

<!-- .slide:  data-background-image="assets/assistivetouch/IMG_D18156F6F6F3-1.jpeg" data-background-opacity="1" data-background-color="#B4A088" data-background-size="contain" -->

## Boutton AssistiveTouch
<aside class="notes">

- On sélection la photo ou la vidéo que nous voulons documenter
- on click une seule fois sur le bouton Assistive Touch pour ouvrir le dialogue de texte
</aside>

--

<!-- .slide:  data-background-image="assets/photo-texte/IMG_9440.PNG" data-background-opacity="1" data-background-color="#B4A088" data-background-size="contain" -->

## On écrit le texte {style="top: -2em !important;"}

<aside class="notes">

- On écrit simplement les commentaires que nous voulons associer à la photo ou la vidéo sélectionnée
- On peut aussi sélectionner le mode dicté en bas de l'écran du clavier pour dicter le texte au lieu de l'écrire
</aside>

--

<!-- .slide:  data-background-image="assets/photo-texte/IMG_9442.PNG" data-background-opacity="1" data-background-color="#B4A088" data-background-size="contain" -->

## On dicte le texte {style="top: -2em !important;"}

<aside class="notes">

- On dicte simplement les commentaires que nous voulons associer à la photo ou la vidéo sélectionnée
- On peut corriger le texte s'il y a des erreurs de transcription
- On termine en appuyant sur OK
</aside>

--

<!-- .slide:  data-background-image="assets/home.PNG" data-background-opacity="1" data-background-color="#B4A088" data-background-size="contain" -->

## Fichiers - Texte 

<aside class="notes">

- On ouvre l'application Fichiers pour retrouver le document texte créé

</aside>

--

<!-- .slide:  data-background-image="assets/fichiers.PNG" data-background-opacity="1" data-background-color="#B4A088" data-background-size="contain" -->
## Fichiers résultants {style="top: -9em !important;"}
<aside class="notes">

- On observe ici les fichiers sauvegardés quand on a utilisé la méthode texte
- Le nom du fichier correspond à la date et l'heure du moment
- On peut ouvrir le fichier pour voir le texte sauvegardé
- on peut exporter le fichier en sélection le mode de partage désiré en bas à gauche de l'écran
</aside>

--

<!-- .slide:  data-background-image="assets/photo-texte/IMG_DF820904A6A9-1.jpeg" data-background-opacity="1" data-background-color="#B4A088" data-background-size="contain" -->

<aside class="notes">

- on peut voir le contenu du fichier texte créé en mode immédiat
</aside>

--

<!-- .slide:  data-background-image="assets/home.PNG" data-background-opacity="1" data-background-color="#B4A088" data-background-size="contain" -->
## Édition du raccourci

<aside class="notes">

- On click sur l'application Raccourcis pour éditer le raccourcis 
</aside>

--

<!-- .slide:  data-background-image="assets/racourcis.PNG" data-background-opacity="1" data-background-color="#B4A088" data-background-size="contain" -->
## Sélection du raccourci

<aside class="notes">

- selection texte:start
</aside>

--

<!-- .slide:  data-background-image="assets/start-texte/IMG_9454.PNG" data-background-opacity="1" data-background-color="#B4A088" data-background-size="contain" -->
## Modifier racourci

<aside class="notes">

- Click sur modifier pour editer le raccourcis
</aside>

--

<!-- .slide:  data-background-image="assets/start-texte/IMG_86AB2A9D5CC2-1.jpeg" data-background-opacity="1" data-background-color="#B4A088" data-background-size="contain" -->

<aside class="notes">

- Sélectionnner toutes les photos
- Sélectionner plusieurs à false
- Demander Texte aved Alerte
</aside>

--

<!-- .slide:  data-background-image="assets/assistivetouch/IMG_9474.PNG" data-background-opacity="1" data-background-color="#B4A088" data-background-size="contain" -->
## configuration assistive touch {style="top: 0.5em !important;"}
<aside class="notes">

- Reglage / Accessibiliter / Toucher / Assistive Touch

</aside>

--

<!-- .slide:  data-background-image="assets/assistivetouch/IMG_9475.PNG" data-background-opacity="1" data-background-color="#B4A088" data-background-size="contain" -->
## Détails AssistiveTouch {style="top: -9.25em !important;"}
<aside class="notes">

-  Assistive Touch
</aside>

--

<!-- .slide:  data-background-image="assets/assistivetouch/IMG_9477.PNG" data-background-opacity="1" data-background-color="#B4A088" data-background-size="contain" onclick="Reveal.slide(9)" -->
## Configuration boutton {style="top: -1.2em !important;"}
<aside class="notes">

-  configuration, 
-  clic sur le titre pour sauter à la dernière diapo
- texte:reel https://www.icloud.com/shortcuts/ed36ee74d68245f2822b244b0cf47020
</aside>

---

<!-- .slide:  data-background-opacity="1" data-background-color="#B4A088" data-background-size="contain" -->

## Chapitre 5
## Documenter ses voyages
## 5 de 6: Dicté en temps réel
### 6 méthodes pour 
### documenter ses voyages
- 🎙3 méthodes en mode différéfféré
- ⏱ 3 méthodes en mode temps réel
> 🎯 Ultra simple et rapide : capturez chaque moment, à votre rythme !
<aside class="notes">

En mode temps réel, on sauvegardes les notes avec la data et l'heure du moment.  Ce qui permettra de relier les notes aux photos et vidéos prises durant le voyage.  Cela nécessitera cependant un peu plus de travail de post-production et une validation de votre part pour vous assurer que les notes correspondent bien aux photos et vidéos.
</aside>

--

<!-- .slide:  data-background-image="assets/home.PNG" data-background-opacity="1" data-background-color="#B4A088" data-background-size="contain" -->

## Méthode immédiate
## Dicté

<aside class="notes">

= on ouvre l'application photo
</aside>

--

<!-- .slide:  data-background-image="assets/assistivetouch/IMG_D18156F6F6F3-1.jpeg" data-background-opacity="1" data-background-color="#B4A088" data-background-size="contain" -->

## Button Assistive Touch
<aside class="notes">

- On sélection la photo ou la vidéo que nous voulons documenter
- on double click le bouton Assistive Touch pour ouvrir le dialogue de texte
</aside>

--

<!-- .slide:  data-background-image="assets/photo-dicter/IMG_9445.PNG" data-background-opacity="1" data-background-color="#B4A088" data-background-size="contain" -->

## Mode dicté activé {style="top: -2em !important;"}

<aside class="notes">
</aside>

--

<!-- .slide:  data-background-image="assets/photo-dicter/IMG_9446.PNG" data-background-opacity="1" data-background-color="#B4A088" data-background-size="contain" -->

## On dicte le texte {style="top: -2em !important;"}

<aside class="notes">

- On dicte simplement les commentaires que nous voulons associer à la photo ou la vidéo sélectionnée
- On peut difficilement corriger le texte s'il y a des erreurs de transcription
- On termine en appuyant sur OK
</aside>

--

<!-- .slide:  data-background-image="assets/home.PNG" data-background-opacity="1" data-background-color="#B4A088" data-background-size="contain" -->

## Fichiers - Texte 

<aside class="notes">

- On ouvre l'application Fichiers pour retrouver le document texte créé

</aside>

--

<!-- .slide:  data-background-image="assets/fichiers.PNG" data-background-opacity="1" data-background-color="#B4A088" data-background-size="contain" -->
## Fichiers résultants {style="top: -9em !important;"}

<aside class="notes">

- On observe ici les fichiers sauvegardés quand on a utilisé la méthode texte
- Le nom du fichier correspond à la date et l'heure du moment
- On peut ouvrir le fichier pour voir le texte sauvegardé
- on peut exporter le fichier en sélection le mode de partage désiré en bas à gauche de l'écran
</aside>

--

<!-- .slide:  data-background-image="assets/photo-dicter/IMG_9448.PNG" data-background-opacity="1" data-background-color="#B4A088" data-background-size="contain" -->

<aside class="notes">

- On peut ouvrir le fichier pour voir le texte sauvegardé
- on peut exporter le fichier en sélection le mode de partage désiré en bas à gauche de l'écran
</aside>

--

<!-- .slide:  data-background-image="assets/home.PNG" data-background-opacity="1" data-background-color="#B4A088" data-background-size="contain" -->
## Édition du raccourci

<aside class="notes">

- On peut éditer le raccourcis pour voir comment il fonctionne
</aside>

--

<!-- .slide:  data-background-image="assets/racourcis.PNG" data-background-opacity="1" data-background-color="#B4A088" data-background-size="contain" -->
## Sélection du raccourci

<aside class="notes">

- selection Dicter: Start
</aside>

--

<!-- .slide:  data-background-image="assets/start-dicter/IMG_5FACDC5747E0-1.jpeg" data-background-opacity="1" data-background-color="#B4A088" data-background-size="contain" -->
## Modifier racourci {style="top: -10em !important;"}

<aside class="notes">

- Modifier le raccourcis
</aside>

--

<!-- .slide:  data-background-image="assets/start-dicter/IMG_9473.PNG" data-background-opacity="1" data-background-color="#B4A088" data-background-size="contain" -->

<aside class="notes">

- Sélectionnner toutes les photos
- Sélectionner plusieurs à false
- Dicté du texte et mécanisme d'arrêt
</aside>

--

<!-- .slide:  data-background-image="assets/assistivetouch/IMG_9474.PNG" data-background-opacity="1" data-background-color="#B4A088" data-background-size="contain" -->
## configuration assistiveTouch {style="top: 0.5em !important;"}
<aside class="notes">

- Reglage / Accessibiliter / Toucher / Assistive Touch

</aside>

--

<!-- .slide:  data-background-image="assets/assistivetouch/IMG_9475.PNG" data-background-opacity="1" data-background-color="#B4A088" data-background-size="contain" -->
## Détails AssistiveTouch {style="top: -9.25em !important;"}
<aside class="notes">

-  Assistive Touch
</aside>

--

<!-- .slide:  data-background-image="assets/assistivetouch/IMG_9477.PNG" data-background-opacity="1" data-background-color="#B4A088" data-background-size="contain" onclick="Reveal.slide(9)"  -->
## Configuration boutton {style="top: -1.2em !important;"}
<aside class="notes">

-  Expliquer la configuration click, double click, long click, 
-  clic sur le titre pour sauter à la dernière diapo
- dicter:reel https://www.icloud.com/shortcuts/8baaff8d839d40bb851060ae1c4da866
</aside>

---

<!-- .slide:  data-background-opacity="1" data-background-color="#B4A088" data-background-size="contain" -->

## Chapitre 5
## Documenter ses voyages
## 6 de 6: Dictaphone en temps réel
### 6 méthodes pour 
### documenter ses voyages
- 🎙3 méthodes en mode différéfféré
- ⏱ 3 méthodes en mode temps réel
> 🎯 Ultra simple et rapide : capturez chaque moment, à votre rythme !
<aside class="notes">

En mode temps réel, on sauvegardes les notes avec la data et l'heure du moment.  Ce qui permettra de relier les notes aux photos et vidéos prises durant le voyage.  Cela nécessitera cependant un peu plus de travail de post-production et une validation de votre part pour vous assurer que les notes correspondent bien aux photos et vidéos.
</aside>

--

<!-- .slide:  data-background-image="assets/home.PNG" data-background-opacity="1" data-background-color="#B4A088" data-background-size="contain" -->

## Méthode immediate
## Dictaphone

<aside class="notes">

- on sélectionnne le raccourcie photo:Voix
</aside>

--

<!-- .slide:  data-background-image="assets/assistivetouch/IMG_D18156F6F6F3-1.jpeg" data-background-opacity="1" data-background-color="#B4A088" data-background-size="contain" -->

## Button AssistiveTouch
<aside class="notes">

- On sélection la photo ou la vidéo que nous voulons documenter
- on fait un click long sur le bouton Assistive Touch pour demarer le dictaphone
</aside>

--

<!-- .slide:  data-background-image="assets/photo-dictaphone/IMG_9509.PNG" data-background-opacity="1" data-background-color="#B4A088" data-background-size="contain" -->

## Dictaphone activé {style="top: -10.25em !important;"}

<aside class="notes">

- visible en haut au centre de l'écran
- on click sur le haut de l'écran pour accéder à l'interface du dictaphone

</aside>

--

<!-- .slide:  data-background-image="assets/photo-dictaphone/IMG_9510.PNG" data-background-opacity="1" data-background-color="#B4A088" data-background-size="contain" -->

## On dicte le texte 

<aside class="notes">

- on clic sur ok pour arrêter l'enregistrement
</aside>

--

<!-- .slide:  data-background-image="assets/start-dictaphone/2026-01-01 à 15.02.40.jpeg" data-background-opacity="1" data-background-color="#B4A088" data-background-size="contain" -->
## Fichier résultants {style="top: 0em !important;"}
<aside class="notes">

- On obtiens une transcription audio associé à la photo ou la vidéo sélectionnée
- on peut écouter l'audio en cliquant sur le triangle de lecture
- Le nom du fichier correspond à la date et l'heure du moment puisque nous sommes en mode immédiat
- 
</aside>

--

<!-- .slide:  data-background-image="assets/home.PNG" data-background-opacity="1" data-background-color="#B4A088" data-background-size="contain" -->
## Édition du raccourci

<aside class="notes">

- On peut éditer le raccourcis pour voir comment il fonctionne
- selectionne Photo:voix
</aside>

--

<!-- .slide:  data-background-image="assets/racourcis.PNG" data-background-opacity="1" data-background-color="#B4A088" data-background-size="contain" -->
## Sélection du raccourci

<aside class="notes">

- selection Dictaphone:Start
</aside>

--

<!-- .slide:  data-background-image="assets/start-dictaphone/IMG_9467.PNG" data-background-opacity="1" data-background-color="#B4A088" data-background-size="contain" -->
## Modifier raccourci {style="top: -6em !important;"}

<aside class="notes">

- Modifier le raccourcis
</aside>

--

<!-- .slide:  data-background-image="assets/start-dictaphone/IMG_9468.PNG" data-background-opacity="1" data-background-color="#B4A088" data-background-size="contain" -->

<aside class="notes">

- Sélectionnner toutes les photos
- Sélectionner plusieurs à false
- Dicté du texte et mécanisme d'arrêt
</aside>

--

<!-- .slide:  data-background-image="assets/assistivetouch/IMG_9474.PNG" data-background-opacity="1" data-background-color="#B4A088" data-background-size="contain" -->
## Configuration assistiveTouch {style="top: 0.5em !important;"}
<aside class="notes">

- Reglage / Accessibiliter / Toucher / Assistive Touch

</aside>

--

<!-- .slide:  data-background-image="assets/assistivetouch/IMG_9475.PNG" data-background-opacity="1" data-background-color="#B4A088" data-background-size="contain" -->
## Détails AssistiveTouch {style="top: -9.25em !important;"}
<aside class="notes">

-  Assistive Touch
</aside>

--

<!-- .slide:  data-background-image="assets/assistivetouch/IMG_9477.PNG" data-background-opacity="1" data-background-color="#B4A088" data-background-size="contain"  onclick="Reveal.slide(9)" -->
## Configuration boutton {style="top: -1.2em !important;"}
<aside class="notes">

-  configuration
-  clic sur le titre pour sauter à la dernière diapo
-  dictation:start https://www.icloud.com/shortcuts/8466d329ed484be6830991c050297c4c
</aside>

---

<!-- .slide: data-background-image="assets/webinaire-gratuit.png" data-background-opacity="1" data-background-color="#9013FE" data-background-size="contain"  -->

--

<!-- .slide: data-background-image="assets/5-documentation-background.png" data-background-opacity="1" data-background-color="#B4A088" data-background-size="contain" -->

## Chapitre 5 
## Documenter ses voyages
<div style="position: absolute; top: -2em !important;">
C'est à vous de jouer!

Le voyage de vos rêves est à portée de main.

Inscrivez-vous maintenant à notre webinaire gratuit et commencez l'aventure 
https://www.twai.world/fr/home

Suivez nous sur les réseaux sociaux:

- https://ca.pinterest.com/twaiworld
- https://www.facebook.com/yvan.ross.5
- https://www.facebook.com/profile.php?id=100067792869970
- https://www.instagram.com/twaiworld
- https://www.linkedin.com/in/yvanross       
- https://www.youtube.com/@twaiworld
- mailto:gestionprojetrossy@gmail.com
      
N'oubliez pas d'ajouter un like et de vous abonner!

Voir tout ces liens dans les commentaires.
</div>

<style>

  h2 {
   margin-top: -20px !important;
      color: #000000 !important;
      background-color: #ffffff !important;
      position: relative !important;
      top: -350px !important;
      padding: 10px 10px !important;
      opacity: 0.75 !important;
      border-radius: 10px !important;

   }
   h3 {
      color: #FFFFFF !important;
   }
   .reveal {
      background-color: #000000 !important;
   }
	.reveal .slide-background::after {
	content: '';
	position: absolute;
	top: 10px;
	right: 20px;
	width: 100px;
	height: 100px;
	background-image: url('/public/img/twai_logo_blanc.webp');
   background-size: contain;
   background-repeat: no-repeat;
   }
   .reveal a {
      color: #FFFFFF !important;
      text-decoration: underline !important;
   }
   .reveal a:hover {
      color: #DDDDDD !important;
   }
   </style>

   <script>
  Reveal.initialize({
    transition: 'slide',
    backgroundTransition: 'fade', // optional, for backgrounds
    slideNumber: true
  });
</script>

---

## Ressource — 2.7 photos to video

<div class="alert alert-warning">
🚧 Contenu en évolution — Nous publions cette page dès maintenant pour vous offrir un avant-goût. Encore mieux très bientôt !
</div>

Donnez vie à vos souvenirs de voyage avec **PowerDirector 365** (Mac & Windows)
👉 Vidéos dynamiques, narration captivante, rendu professionnel — même si vous débutez

[PowerDirector 365 pour Mac](https://www.cyberlink.com/products/powerdirector-video-editing-software-mac/overview_en_CA.html)
[PowerDirector 365 pour Windows](https://www.cyberlink.com/products/powerdirector-video-editing-software/features_en_CA.html)

## 🎬 Pourquoi créer une vidéo de voyage ?

* Revivre votre aventure comme si vous y étiez
* Partager vos souvenirs avec émotion
* Conserver vos photos sous un format vivant et inspirant
* Créer un récit immersif, en quelques clics

## 🚀 Ce que vous allez apprendre

Une méthode simple, claire et efficace pour transformer vos images en vidéos captivantes :

- ☑️ Organiser vos photos & clips
- ☑️ Utiliser des effets, transitions et titrages
- ☑️ Ajouter musique, voix-off & ambiance sonore
- ☑️ Utiliser l'IA pour extraire le texte des photos & créer des sous-titres (SRT)
- ☑️ Ajouter des notes & infos de voyage directement dans la vidéo
- ☑️ Exporter & publier avec une qualité optimale

Bonus : **Comment intégrer la synthèse vocale** pour une narration fluide — sans avoir besoin d’enregistrer votre voix.

## 🧠 Un outil puissant + une méthode simple

Vous profitez de **PowerDirector 365** pour :

* Montage intuitif
* Titres animés & effets pro
* Modèles prêts à l'emploi
* IA intégrée (texte, voix, reconnaissance)

## 🌍 Et après ? Publiez & faites briller votre histoire

Je vous montrerai aussi comment je publie mes vidéos sur YouTube et optimise :

- 📈 Titre, description & mots-clés
- 🎵 Gestion des droits musicaux
- 🤖 Utilisation de l’IA pour le SEO vidéo
- 🎯 Miniature convaincante + storytelling

Pas besoin d’être expert : vous allez y arriver pas à pas.

## 🎁 Prochainement sur cette page

* Tutoriels vidéo étape-par-étape
* Modèles de montage & scripts narratifs
* Checklists & astuces pro
* Inspiration pour documenter vos voyages

### Prêt à donner une nouvelle vie à vos photos ? 🌅

Revenez bientôt — ou abonnez-vous pour recevoir la méthode complète dès sa sortie.

---

## Ressource — 2.8 checklist documentation

## 🎯 Objectif
Préparer ton carnet de bord avant le départ et le compléter efficacement pendant ton voyage.

---

## 📋 Avant le départ

- [ ] J’ai choisi mon format (papier, numérique, hybride)
- [ ] J’ai préparé les sections principales
- [ ] J’ai imprimé ou sauvegardé mon itinéraire
- [ ] J’ai prévu un espace pour les photos ou croquis
- [ ] J’ai noté mes intentions et objectifs de voyage

---

## ✍️ Pendant le voyage

- [ ] Je note mes impressions chaque jour ou chaque étape
- [ ] Je garde les tickets, cartes ou objets significatifs
- [ ] Je prends des photos des lieux et des repères
- [ ] Je note les contacts utiles rencontrés
- [ ] Je suis mon budget et mes dépenses

---

## 📝 Notes personnelles

📓 Ce que je veux documenter : __________________________  
📷 Mes outils de capture : __________________________  
🔄 Fréquence de mise à jour : __________________________

---

## Ressource — 2.9 pdf checklist documentation

## 🎯 Objectif
Préparer ton carnet de bord avant le départ et le compléter efficacement pendant ton voyage.

---

## 📋 Avant le départ

- [ ] J’ai choisi mon format (papier, numérique, hybride)
- [ ] J’ai préparé les sections principales
- [ ] J’ai imprimé ou sauvegardé mon itinéraire
- [ ] J’ai prévu un espace pour les photos ou croquis
- [ ] J’ai noté mes intentions et objectifs de voyage

---

## ✍️ Pendant le voyage

- [ ] Je note mes impressions chaque jour ou chaque étape
- [ ] Je garde les tickets, cartes ou objets significatifs
- [ ] Je prends des photos des lieux et des repères
- [ ] Je note les contacts utiles rencontrés
- [ ] Je suis mon budget et mes dépenses

---

## 📝 Notes personnelles

📓 Ce que je veux documenter : __________________________  
📷 Mes outils de capture : __________________________  
🔄 Fréquence de mise à jour : __________________________

---

## Ressource — 3.1 archivage storytelling ia

> **Objectif Avancé :** transformer 5000+ fichiers bruts en un récit structuré sans effort.

## 🧠 Le Workflow de l'Héritage
Mise en place d'une chaîne de production automatique :
1. Tri par métadonnées (Lieux/Dates) via scripts Python ou IA.
2. Utilisation de l'IA pour générer un premier jet de livre de voyage à partir de vos notes de bord.
3. Archivage "Froid" et "Chaud" (NAS vs Cloud) pour la pérennité sur 20 ans.

---

*Contenu en contenu de rédaction...*

---

## Ressource — 3.2 documenter itineraire historique gps iphone

## 🧭 Pourquoi cette section existe
Quand un voyage est déjà terminé, il manque souvent une chose essentielle : la trace réelle du déplacement. Les photos racontent des moments. Les notes racontent des impressions. Mais l'historique GPS raconte le mouvement.

Cette section vous montre comment récupérer ou reconstruire un itinéraire à partir des données de localisation de votre iPhone, puis comment le transformer en carte utile pour l'archivage, le partage ou l'analyse post-voyage.

---

## 🎯 Objectifs pédagogiques
À la fin de cette section, vous serez capable de :
- comprendre quelles sources de localisation un iPhone peut fournir ;
- identifier la bonne méthode selon votre historique réel ;
- exporter ou reconstruire une trace en `KML`, `GPX` ou `CSV` ;
- visualiser cette trace sur une carte interactive ;
- intégrer cette trace à votre documentation de voyage.

---

## 🧩 Les 4 scénarios possibles
Avant de commencer, identifiez votre situation.

### Scénario 1 : vous avez activé Google Maps Timeline
C'est la méthode la plus simple si l'historique des positions Google était déjà actif pendant le voyage.

### Scénario 2 : vous avez utilisé une application de suivi
Des applications comme `Strava`, `Gaia GPS`, `Polarsteps`, `MyTracks` ou `AllTrails` permettent souvent un export direct.

### Scénario 3 : vous ne disposez que des données natives de l’iPhone
Les `Lieux importants` d’iOS peuvent aider, mais ils restent limités et ne fournissent pas un suivi continu exploitable directement.

### Scénario 4 : vous voulez mettre en place un protocole pour les prochains voyages
Dans ce cas, la bonne approche consiste à choisir dès maintenant un système de journal GPS exportable.

---

## 🍏 Option 1 : exploiter les données natives de l’iPhone
L’iPhone enregistre certains déplacements dans les `Lieux importants`.

### Où les trouver
1. Ouvrez `Réglages`.
2. Allez dans `Confidentialité et sécurité`.
3. Ouvrez `Services de localisation`.
4. Descendez vers `Services système`.
5. Ouvrez `Lieux importants`.

### Ce que cette méthode permet
- revoir des villes ou lieux fréquemment visités ;
- confirmer certaines dates ;
- retrouver quelques repères de déplacement ;
- alimenter un carnet de bord post-voyage.

### Limites importantes
- pas d'export direct simple ;
- historique incomplet ;
- pas de tracé GPS continu ;
- données locales surtout utiles comme aide-mémoire.

Conclusion : utile pour retrouver des indices, insuffisant pour reconstituer un tracé détaillé.

---

## 🌍 Option 2 : utiliser Google Maps Timeline
Si Google Maps était installé et que l'historique des positions était activé, c'est généralement la meilleure piste.

### Ce que vous obtenez
- une chronologie par journée ;
- les lieux visités ;
- les heures de passage ;
- un tracé approximatif ou détaillé selon les cas ;
- une base exportable.

### Étapes
1. Ouvrez `https://www.google.com/maps/timeline` sur ordinateur.
2. Connectez-vous au bon compte Google.
3. Sélectionnez une journée de voyage.
4. Vérifiez si l'itinéraire apparaît correctement.

### Export
Pour un export plus complet :
1. Ouvrez `https://takeout.google.com/`.
2. Sélectionnez uniquement l’historique de localisation.
3. Exportez au format disponible, souvent `KML` ou `JSON`.
4. Archivez ce fichier brut avant toute conversion.

---

## 🏃 Option 3 : récupérer les traces d’une application tierce
Si vous utilisiez déjà une application de suivi, regardez d'abord là. C'est souvent plus propre que de reconstruire l'historique après coup.

Applications fréquentes :
- `Strava`
- `Gaia GPS`
- `Polarsteps`
- `AllTrails`
- `MyTracks`
- `Geofency`

### Ce qu’il faut chercher
- export `GPX` ;
- export `KML` ;
- export `CSV` ;
- historique par journée ;
- journal de position automatique.

### Pourquoi c’est souvent préférable
- meilleur niveau de détail ;
- export plus propre ;
- moins de perte d’inguide ;
- plus utile pour l’analyse terrain ou la randonnée.

---

## 🔄 Quel format choisir ?
Chaque format a son rôle.

### `GPX`
À privilégier si vous voulez :
- réutiliser la trace dans une application GPS ;
- archiver un parcontenu de randonnée, vélo ou route ;
- retravailler ensuite le tracé dans des outils spécialisés.

### `KML`
À privilégier si vous voulez :
- ouvrir la trace dans Google Earth ou My Maps ;
- travailler dans un environnement visuel proche de Google ;
- partager une carte annotée.

### `CSV`
À privilégier si vous voulez :
- analyser les données dans Google Sheets ;
- nettoyer ou enrichir les points ;
- croiser le trajet avec d'autres inguides.

---

## 🗺️ Visualiser et transformer la trace en carte utile
Une trace brute n'est pas encore une documentation.

Après export, vous pouvez :
- importer le fichier dans `Google My Maps` ;
- l’ouvrir dans `GPX Studio` ;
- le convertir si nécessaire ;
- l’annoter avec vos notes, photos et étapes importantes.

### Workflow recommandé
1. Conservez toujours le fichier source brut.
2. Convertissez-le dans le format le plus utile pour votre objectif.
3. Ouvrez-le dans une carte interactive.
4. Ajoutez des repères sur les moments clés.
5. Reliez la trace à vos photos, notes et souvenirs.

---

## 🧠 Méthode de reconstitution post-voyage
Si les données sont incomplètes, combinez plusieurs sources :
- historique Google ;
- photos géolocalisées ;
- notes de voyage ;
- courriels de réservation ;
- lieux enregistrés dans Maps ;
- souvenirs personnels.

Le but n'est pas d'atteindre une précision forensique. Le but est de reconstruire un itinéraire suffisamment fiable pour documenter le voyage intelligemment.

---

## 🔐 Vie privée et prudence
L’historique GPS est extrêmement sensible. Il révèle :
- vos horaires ;
- vos habitudes ;
- vos lieux de nuit ;
- vos déplacements précis.

Avant de partager une carte ou un export :
- vérifiez si le fichier contient votre domicile ;
- supprimez les segments sensibles ;
- retirez les lieux privés si nécessaire ;
- gardez une copie privée non partagée.

---

## 🧳 Mettre en place un bon système pour les prochains voyages
Si vous partez bientôt, ne comptez pas uniquement sur une reconstruction après coup.

Mettez en place un système simple :
- une application qui enregistre vos trajets ;
- un export régulier en `GPX` ou `KML` ;
- une carte My Maps pour les repères importants ;
- un carnet de bord avec dates, faits et impressions.

La combinaison `trace GPS + notes + photos` donne une documentation beaucoup plus riche qu’un simple album photo.

---

## 💻 Exercices à faire sur votre ordinateur
### Exercice 1 : audit de vos sources disponibles
1. Listez les applications de localisation utilisées pendant un voyage passé.
2. Vérifiez si vous avez accès à Google Timeline.
3. Vérifiez si vous avez des photos géolocalisées sur la période.
4. Notez quelle source est la plus exploitable.

### Exercice 2 : exporter une journée
1. Ouvrez une journée de déplacement dans Google Timeline ou dans une app tierce.
2. Exportez les données si possible.
3. Conservez le fichier brut dans un dossier d’archives.
4. Notez le format obtenu : `GPX`, `KML`, `CSV` ou `JSON`.

### Exercice 3 : visualiser la trace
1. Importez ce fichier dans Google My Maps ou un outil similaire.
2. Vérifiez si le trajet correspond à vos souvenirs.
3. Ajoutez 3 repères expliquant des moments importants du parcontenu.

---

## 📲 Exercices à faire sur votre iPhone
### Exercice 1 : vérifier les données natives
1. Ouvrez `Réglages > Confidentialité et sécurité > Services de localisation > Services système > Lieux importants`.
2. Vérifiez si les lieux utiles apparaissent.
3. Notez ce que cette source permet ou ne permet pas de retrouver.

### Exercice 2 : vérifier Google Maps
1. Ouvrez Google Maps.
2. Vérifiez si `Votre chronologie` est disponible.
3. Contrôlez si l'historique est activé pour votre compte principal.

### Exercice 3 : préparer le futur
1. Choisissez une application de suivi adaptée à vos usages.
2. Faites un test de déplacement court.
3. Vérifiez si un export est possible en fin de trajet.

---

## ⭐ Exercice bonus : créer un protocole de documentation hybride
Pour votre prochain voyage, préparez un système simple en 3 couches :
1. une application de trace GPS ;
2. une carte My Maps pour les repères et points d’intérêt ;
3. une note quotidienne avec vos impressions et apprentissages.

Ce protocole transforme un simple déplacement en archive exploitable pendant des années.

---

## ☑️ Action immédiate
Choisissez un voyage passé, identifiez la meilleure source de trace disponible, exportez une journée si possible, puis visualisez-la sur une carte pour commencer votre reconstitution documentaire.

---

## Ressource — 3.3 documenter itineraire depuis photos geolocalisees

## 📸 Pourquoi cette section est utile
Quand on revient d’un long voyage avec des milliers de photos, on possède souvent déjà une grande partie de l’itinéraire sans le savoir. Chaque image peut contenir :
- une date ;
- une heure ;
- des coordonnées GPS ;
- parfois un texte ou une légende ;
- parfois un contexte déductible à partir du nom du fichier ou de l’album.

Cette section vous montre comment transformer cette masse de photos en carte de voyage, en carnet visuel ou en archive interactive.

---

## 🎯 Objectifs pédagogiques
À la fin de cette section, vous serez capable de :
- vérifier si vos photos contiennent des coordonnées GPS exploitables ;
- choisir entre une solution prête à l’emploi et une approche personnalisée ;
- reconstruire un itinéraire chronologique à partir des métadonnées photo ;
- enrichir la carte avec du texte, des notes ou des légendes ;
- préparer une base réutilisable dans My Maps, Google Sheets ou un projet plus avancé.

---

## 🧩 Ce qu’une photo peut vous apporter
Une photo géolocalisée permet souvent de récupérer :
- la latitude et la longitude ;
- la date de prise de vue ;
- l’heure de prise de vue ;
- l’ordre approximatif du déplacement ;
- parfois un commentaire ou une légende ;
- parfois un lien avec un journal de voyage.

Avec quelques milliers de photos, on peut souvent reconstruire :
- un tracé général ;
- les arrêts majeurs ;
- les journées de déplacement ;
- les séquences importantes du voyage.

---

## 🛠️ Étape 1 : vérifier si vos photos sont géolocalisées
Avant d’aller plus loin, il faut valider la matière première.

### Ce qu’il faut contrôler
- présence de coordonnées GPS dans les métadonnées ;
- présence d’une date fiable ;
- cohérence de l’horloge de l’appareil ;
- présence éventuelle de doublons ou rafales ;
- formats utilisés : `JPG`, `HEIC`, `PNG`, vidéos, etc.

### Résultat possible
- si vos photos ont GPS + date : vous avez une base solide ;
- si elles n’ont que la date : vous pouvez encore reconstituer partiellement ;
- si elles n’ont ni GPS ni contexte : il faudra croiser avec d’autres sources.

---

## 🗺️ Étape 2 : choisir la bonne stratégie
Vous avez deux grandes approches.

### Option A : utiliser un outil existant
Approche recommandée si vous voulez aller vite.

Exemples de solutions utiles :
- `PhotoPrism` pour indexer une grande photothèque avec vue carte ;
- `HoudahGeo` pour le géotaggage et les exports ;
- `Lightroom Classic` si vous l’utilisez déjà ;
- `Google My Maps` si vous voulez surtout partager une carte simple ;
- des applications orientées journal de voyage comme `Polarsteps` ou `FindPenguins`.

### Option B : créer votre propre pipeline
Approche recommandée si vous voulez :
- un contrôle total sur le tri chronologique ;
- enrichir les points avec du texte personnalisé ;
- exporter dans plusieurs formats ;
- intégrer le résultat dans un site, une carte web ou un système maison.

---

## 🔄 Étape 3 : reconstruire le trajet
Le principe est simple :
1. lire les métadonnées des photos ;
2. extraire `date + heure + latitude + longitude` ;
3. trier les images par ordre chronologique ;
4. supprimer ou regrouper les doublons ;
5. produire une ligne de trajet ou une série de points structurés.

### À quoi sert le regroupement
Si vous avez 40 photos au même endroit en 15 minutes, vous ne voulez pas forcément 40 points sur la carte.

Il est souvent préférable de :
- regrouper les photos prises au même lieu ;
- garder un seul point représentatif ;
- compter le nombre de photos associées ;
- conserver les légendes ou notes importantes.

---

## 📝 Étape 4 : utiliser le texte associé aux photos
Le texte rend la carte beaucoup plus intéressante que le simple tracé.

Sources de texte possibles :
- légendes saisies dans une application photo ;
- commentaires manuels ;
- notes de voyage ;
- fichiers texte associés ;
- transcription vocale faite pendant le voyage ;
- OCR si le texte est visible sur l’image.

### Comment utiliser ce texte
Vous pouvez l’ajouter :
- dans la description du point sur la carte ;
- dans une colonne `Notes` ou `Légende` ;
- dans un carnet de bord lié à la photo ;
- dans une bulle d’inguide si vous publiez la carte en ligne.

---

## 📦 Étape 5 : choisir le bon format de sortie
Selon votre objectif, vous n’exporterez pas de la même manière.

### `CSV`
Utile pour :
- Google Sheets ;
- Google My Maps ;
- nettoyage manuel ;
- enrichissement avec d’autres colonnes.

### `GeoJSON`
Utile pour :
- cartes web modernes ;
- intégration dans Leaflet ou Mapbox ;
- publication plus technique.

### `GPX`
Utile pour :
- représentation de trajet ;
- réutilisation dans une application GPS ;
- archivage de parcontenu.

### `KML`
Utile pour :
- Google Earth ;
- Google My Maps ;
- partage visuel simple.

---

## 🧠 Workflow recommandé
Pour un résultat propre, utilisez cette logique :
1. Conservez les photos originales.
2. Extrayez les métadonnées dans un tableau.
3. Nettoyez les incohérences de dates et les doublons.
4. Regroupez les photos trop proches dans le temps ou l’espace.
5. Ajoutez une colonne de texte ou de légende.
6. Exportez en `CSV` ou `GeoJSON`.
7. Importez dans My Maps ou votre outil de visualisation.

---

## 🧪 Quand un script personnalisé devient pertinent
Un script devient utile si vous avez :
- plusieurs dizaines de milliers de photos ;
- des formats mixtes ;
- besoin de déduplication fine ;
- besoin de miniatures ;
- besoin de texte enrichi ;
- besoin d’un export multi-format ;
- envie d’intégrer le résultat dans un site ou une app.

Dans ce cas, le pipeline type est :
- scan du dossier ;
- lecture EXIF ;
- normalisation des dates ;
- tri ;
- regroupement ;
- export.

Cette logique peut être réalisée en `Go`, `Python` ou un autre langage, selon vos habitudes.

---

## ⚠️ Pièges fréquents
- coordonnées absentes sur une partie des photos ;
- fuseaux horaires incohérents ;
- photos modifiées qui ont perdu certaines métadonnées ;
- HEIC ou vidéos moins simples à traiter ;
- trop de points sur la carte ;
- texte associé mal relié au bon fichier ;
- publication de lieux privés sans filtrage.

---

## 🔐 Vie privée et tri avant partage
Avant de publier une carte créée depuis vos photos, vérifiez :
- si votre domicile apparaît ;
- si vos lieux de nuit sont visibles ;
- si certaines images ne devraient pas être partagées ;
- si les coordonnées exactes doivent être arrondies ou masquées.

Une carte personnelle peut être très riche. Une carte publique doit être filtrée.

---

## 💻 Exercices à faire sur votre ordinateur
### Exercice 1 : audit d’un dossier photo
1. Choisissez un petit lot de 100 à 300 photos d’un voyage.
2. Vérifiez lesquelles contiennent des coordonnées GPS.
3. Vérifiez si les dates sont cohérentes.
4. Notez les formats présents.

### Exercice 2 : reconstruction simple
1. Triez les photos par date de prise de vue.
2. Repérez les 10 à 20 lieux majeurs du trajet.
3. Créez un tableau avec `Date`, `Latitude`, `Longitude`, `Nom`, `Note`.
4. Importez ce tableau dans Google My Maps.

### Exercice 3 : enrichissement textuel
1. Sélectionnez 10 photos importantes.
2. Ajoutez une courte légende à chacune.
3. Reliez cette légende à votre tableau de points.
4. Vérifiez si la carte devient plus compréhensible et plus vivante.

---

## 📲 Exercices à faire sur votre téléphone
### Exercice 1 : vérifier les infos d’une photo
1. Ouvrez une photo de voyage.
2. Vérifiez si le lieu ou la carte apparaît.
3. Contrôlez si la date et l’heure semblent correctes.

### Exercice 2 : préparer les futurs voyages
1. Vérifiez que la localisation des photos est bien autorisée.
2. Faites une photo test.
3. Vérifiez ensuite qu’elle contient bien un emplacement.

### Exercice 3 : légender pendant le voyage
1. Choisissez 3 photos récentes.
2. Ajoutez une note, une légende ou un commentaire associé.
3. Observez à quel point cette inguide sera utile plus tard.

---

## ⭐ Exercice bonus : mini pipeline personnel
Construisez votre propre protocole en 4 briques :
1. prise de photo avec géolocalisation active ;
2. ajout d’une légende courte sur les photos clés ;
3. export périodique vers un tableau ou une carte ;
4. archivage dans un format réutilisable.

Ce système vous évite de repartir de zéro après le voyage.

---

## ☑️ Action immédiate
Prenez un petit lot de photos géolocalisées, extrayez-en les lieux majeurs, ajoutez quelques légendes, puis importez le tout dans une carte pour vérifier si votre itinéraire redevient lisible.

---

## Ressource — 3.4 film voyage masterclass

# 2.9 - Réaliser son premier film de voyage

Documenter un voyage, ce n'est pas seulement prendre des photos, c'est aussi capturer le mouvement, le son et l'émotion. Dans cette section, nous vous apprenons à structurer vos clips pour en faire un film mémorable.

## Le Guide Complet (PDF)
Nous avons préparé un guide détaillé pour vous accompagner dans la création de votre film. Il couvre tout, du cadrage au montage final.

<div class="card border-primary shadow-sm mb-5 p-4 text-center rounded-4">
    <div class="card-body">
        <div class="mb-3 display-4 text-primary"><i class="bi bi-file-pdf"></i></div>
        <h5 class="fw-bold mb-4">Téléchargez le Guide : Réaliser son premier film de voyage</h5>
        <a href="/public/pdf/Realiser_son_premier_film_de_voyage_OCT_2023.pdf" class="btn btn-primary btn-lg px-5 shadow-sm fw-bold" target="_blank">
            <i class="bi bi-download me-2"></i> TÉLÉCHARGER LE GUIDE PDF
        </a>
    </div>
</div>

---

## 🎬 Les 3 Étapes du Storytelling Visuel

1. **La Préparation :** Ne filmez pas tout. Choisissez des moments forts (le lever de soleil, une rencontre, un repas typique).
2. **La Captation :** Variez les plans (Large pour le contexte, Moyen pour l'action, Gros Plan pour les détails). Pensez à la stabilisation !
3. **Le Montage :** Utilisez des musiques qui correspondent à l'ambiance du lieu. Gardez vos clips courts (3 à 5 secondes par plan) pour maintenir le rythme.

---

<div class="alert alert-warning border-0 shadow-sm rounded-4 p-4">
    <div class="d-flex align-items-center">
        <div class="flex-shrink-0"><i class="bi bi-exclamation-triangle-fill text-dark display-6 me-4"></i></div>
        <div>
            <h5 class="alert-heading mb-1 fw-bold">Respect de la vie privée</h5>
            <p class="mb-0">N'oubliez pas de toujours demander la permission avant de filmer des personnes, surtout dans des contextes culturels sensibles.</p>
        </div>
    </div>
</div>

<div class="text-center mt-5">
    <a href="/fr/home/fr/8-documentation/archivage-storytelling-ia" class="btn btn-primary btn-lg px-5 shadow-sm fw-bold">
        étapes SUIVANTE : ARCHIVAGE ET STORYTELLING IA <i class="bi bi-arrow-right ms-2"></i>
    </a>
</div>

---

## Ressource — 3.5 documenter voyage iphone

# Documenter son voyage avec un iPhone : six méthodes

Une photo montre un paysage ; une note permet de retrouver le lieu, la rencontre, l’anecdote ou l’émotion qui lui donne son sens. Cette guide vous aide à créer une documentation facile à retrouver pour préparer ensuite un carnet de voyage, un album ou une vidéo souvenir.

À la fin de ce chapitre, vous saurez choisir entre texte, dictée et enregistrement vocal, utiliser les raccourcis présentés dans les démonstrations et retrouver les inguides liées à vos photos et vidéos.

## Deux façons de travailler

**En mode différé**, vous documentez un média déjà pris : vous sélectionnez une photo ou une vidéo, puis ajoutez votre commentaire. Les raccourcis présentés utilisent le nom du média sélectionné pour retrouver la note associée.

**En temps réel**, vous capturez votre commentaire au moment de la visite. Les fichiers sont repérés par la date et l’heure de leur création. Vous les rapprochez ensuite des photos et vidéos correspondantes, en vérifiant vous-même les associations.

La **dictée** transforme vos paroles en texte. Le **dictaphone** conserve un enregistrement de votre voix, à écouter ou à transcrire par la suite.

| Méthode | Moment | Inguide conservée | Utile pour |
| --- | --- | --- | --- |
| 1. Texte en mode différé | Après la prise de vue | Texte lié au média sélectionné | Rédiger un commentaire précis, au calme |
| 2. Dictée en mode différé | Après la prise de vue | Texte dicté lié au média sélectionné | Documenter plusieurs souvenirs sans tout taper |
| 3. Dictaphone en mode différé | Après la prise de vue | Enregistrement vocal associé au média | Conserver un récit, une émotion ou une anecdote |
| 4. Texte en temps réel | Pendant la visite | Texte repéré par date et heure | Noter un nom, une adresse ou un détail sur le moment |
| 5. Dictée en temps réel | Pendant la visite | Texte dicté repéré par date et heure | Capturer rapidement une observation |
| 6. Dictaphone en temps réel | Pendant la visite | Enregistrement vocal repéré par date et heure | Raconter ce que vous vivez sans interrompre longtemps la visite |

## Préparer son iPhone

Préparez l’application **Raccourcis**, l’accès à vos photos et le dossier où vous souhaitez conserver les notes et enregistrements. Pour les méthodes en temps réel, les démonstrations présentent aussi un déclenchement avec **AssistiveTouch**. Regardez la configuration dans chaque vidéo avant votre premier essai : les gestes et les noms des raccourcis correspondent aux réglages montrés par le formateur.

## 1 de 6 — Texte en mode différé

Vous choisissez une photo ou une vidéo déjà enregistrée, puis rédigez le commentaire à lui associer. Cette méthode vous laisse le temps de préciser le lieu, les personnes présentes et ce que vous souhaitez retenir. Le raccourci sauvegarde le texte dans un fichier dont le nom reprend celui du média sélectionné. Le clavier permet également de dicter le commentaire, puis de le corriger avant validation.

1. Lancez le raccourci de prise de notes présenté dans la vidéo et sélectionnez un média.
2. Écrivez votre commentaire, vérifiez-le et validez.
3. Retrouvez le document dans Fichiers et vérifiez que vous pouvez identifier le média associé.

**À essayer :** ajoutez à une photo le lieu, la date et une anecdote en trois phrases.

[Voir la vidéo 1 — Texte en mode différé](https://www.youtube.com/watch?v=fIyZQGclCWU&t=18s)

## 2 de 6 — Dictée en mode différé

Vous sélectionnez une photo ou une vidéo, puis dictez votre commentaire au lieu de le saisir au clavier. Le résultat est un document texte associé au média choisi. Cette approche convient pour documenter une série de souvenirs à la fin de la journée. Relisez le texte enregistré, particulièrement les noms de lieux et de personnes : la transcription peut comporter des erreurs et la correction pendant la dictée dépend du raccourci utilisé.

1. Lancez le raccourci de dictée et sélectionnez le média à documenter.
2. Dictez un commentaire court et terminez selon le mécanisme montré dans la vidéo.
3. Ouvrez le fichier texte créé et vérifiez son contenu et son association au média.

**À essayer :** dictez une description de 20 à 30 secondes pour une photo, puis corrigez les noms propres dans le texte obtenu.

[Voir la vidéo 2 — Dictée en mode différé](https://www.youtube.com/watch?v=x4DNUjKFhH0&t=8s)

## 3 de 6 — Dictaphone en mode différé

Vous choisissez un média existant, puis enregistrez un commentaire vocal à son sujet. Vous conservez ainsi votre voix et les nuances de votre récit. Cette méthode convient lorsqu’une anecdote ou une émotion se raconte plus facilement qu’elle ne s’écrit. L’enregistrement peut être réécouté, exporté ou utilisé pour produire une transcription lors de la préparation de votre carnet ou de votre vidéo souvenir.

1. Lancez le raccourci vocal et sélectionnez une photo ou une vidéo.
2. Racontez ce que vous voulez retenir et arrêtez l’enregistrement.
3. Réécoutez le fichier et vérifiez que vous retrouvez le média auquel il correspond.

**À essayer :** racontez en moins d’une minute ce qui rend une photo particulière pour vous.

[Voir la vidéo 3 — Dictaphone en mode différé](https://www.youtube.com/watch?v=lNcNXh0nDRU&t=8s)

## 4 de 6 — Texte et dictée immédiate

Vous notez une inguide pendant la visite, sans attendre de classer vos photos. La démonstration utilise un bouton AssistiveTouch pour lancer le raccourci et ouvrir la saisie du commentaire. Vous pouvez écrire le texte ou utiliser la dictée du clavier. Le fichier est repéré par la date et l’heure du moment ; vous devez ensuite l’associer aux images correspondantes.

1. Configurez le raccourci et son déclenchement AssistiveTouch comme dans la démonstration.
2. Pendant la visite, déclenchez la saisie et notez le lieu, le sujet et le détail à conserver.
3. Retrouvez le fichier horodaté et rapprochez-le de la photo ou de la vidéo concernée.

**À essayer :** prenez une photo, puis notez immédiatement une inguide que l’image seule ne montre pas.

[Voir la vidéo 4 — Texte et dictée immédiate](https://www.youtube.com/watch?v=JRLgPkVReao&t=7s)

## 5 de 6 — Dictée iPhone en temps réel

Vous capturez votre observation en parlant pendant la visite. Le raccourci transforme vos paroles en texte et les enregistre avec un repère de date et d’heure. Dans la configuration du support, un double appui sur AssistiveTouch déclenche cette méthode. Vous obtenez une note écrite rapidement, mais devez encore vérifier la transcription et retrouver les médias pris au même moment.

1. Configurez le raccourci de dictée et le geste AssistiveTouch montré dans la vidéo.
2. Déclenchez la dictée, décrivez votre observation et terminez l’entrée.
3. Relisez le texte et associez-le aux images pertinentes à l’aide de l’horodatage.

**À essayer :** dictez une observation en 15 secondes, en commençant par le lieu et le sujet.

[Voir la vidéo 5 — Dictée iPhone](https://www.youtube.com/watch?v=mmILoHJnBDY&t=7s)

## 6 de 6 — Dictaphone en temps réel

Vous enregistrez votre récit pendant que vous vivez l’expérience. Le support présente un appui long sur AssistiveTouch pour lancer le raccourci vocal. Le fichier est repéré par sa date et son heure, ce qui aide à le rapprocher ensuite de vos photos et vidéos. Cette méthode conserve vos impressions spontanées et votre voix ; elle demande ensuite un travail d’association, puis éventuellement de transcription ou de montage.

1. Configurez le raccourci vocal et son déclenchement comme dans la démonstration.
2. Lancez l’enregistrement, indiquez le lieu et racontez brièvement ce que vous vivez.
3. Arrêtez l’enregistrement, réécoutez-le et retrouvez les médias pris au même moment.

**À essayer :** enregistrez 30 secondes sur une découverte, en précisant le lieu, ce que vous avez remarqué et votre ressenti.

[Voir la vidéo 6 — Dictaphone en temps réel](https://www.youtube.com/watch?v=NPaXCYDAcLo&t=7s)

## Mise en pratique de niveau 3

Documentez une courte sortie avec **une méthode différée et une méthode en temps réel**. Pour chacune, conservez trois médias et leurs commentaires. Retrouvez ensuite chaque association sans vous fier uniquement à votre mémoire.

Votre exercice est réussi si vous pouvez identifier le lieu et le contexte de chaque média, retrouver la note ou l’enregistrement correspondant et expliquer quelle méthode vous souhaitez adopter pendant votre prochain voyage. Si vous utilisez l’IA pour transcrire ou organiser vos notes, vérifiez les noms propres et les associations avec les images avant de partager le résultat.

---

# Pilier 9 — Évaluation et autonomie

## Ressource — 1.1 guide evaluation index

<p align="center">
  <img src="/public/img/terre.webp" alt="Chapitre 9 Évaluation" style="width:100%; border-radius: 15px; box-shadow: 0 4px 15px rgba(0,0,0,0.1);" />
</p>

Félicitations : vous arrivez à l'étape qui transforme les apprentissages en méthode durable. Ce chapitre vous aide à observer votre progression et à préparer votre prochain voyage avec plus de clarté.

## 🎯 Objectifs de ce chapitre final

- Évaluer les compétences et décisions développées pendant le parcontenu.
- Reconnaître ce qui est acquis et ce qui mérite encore de la pratique.
- Mesurer l'effet de la guide sur votre manière de voyager.
- Construire une prochaine étape réaliste pour continuer à progresser.

## 🧭 Comment fonctionne ce chapitre

L'évaluation n'est pas un examen à réussir. C'est un temps de recul : vous comparez votre point de départ avec ce que vous savez maintenant décider, préparer et faire sur le terrain.

## 📈 Une évaluation par niveau

Votre progression est observée selon trois niveaux. Vous pouvez être très à l'aise dans un niveau et encore en apprentissage dans un autre : l'objectif est d'identifier votre prochaine étape, pas d'obtenir une note parfaite.

### Niveau 1 — Poser les fondations

Vous savez identifier vos envies, vos contraintes et les inguides essentielles à votre voyage. Vous pouvez comparer des options et expliquer vos choix.

### Niveau 2 — Construire un voyage cohérent

Vous transformez vos décisions en un plan réaliste : itinéraire, budget, protections, réservations et outils nécessaires. Vous savez aussi prévoir des alternatives raisonnables.

### Niveau 3 — Voyager de façon autonome

Vous utilisez votre système sur le terrain, vous vous adaptez aux imprévus et vous tirez des sections de l'expérience pour améliorer votre prochain voyage.

## Les étapes du bilan

### 1. Revenir à votre intention de départ

Relisez ce que vous vouliez vivre et les contraintes que vous aviez identifiées. Cela permet d'évaluer le parcontenu selon votre propre projet plutôt que selon une idée abstraite du voyage parfait.

### 2. Identifier vos acquis

Repérez les méthodes que vous pouvez maintenant appliquer seul : définir vos priorités, planifier, protéger votre voyage, gérer un budget ou vous orienter. Appuyez-vous sur des exemples concrets.

### 3. Nommer les zones à renforcer

Choisissez une ou deux compétences à retravailler. Un besoin précis — comme mieux préparer un plan B ou suivre les dépenses — est plus utile qu'un jugement global sur votre progression.

### 4. Recueillir votre retour d'expérience

Notez ce qui vous a été utile, ce qui était difficile et ce qui manque selon votre contexte. Ce regard nourrit à la fois votre propre méthode et l'amélioration de la guide.

### 5. Préparer la suite

Définissez une action concrète à appliquer à votre prochain voyage. La guide se termine, mais votre système de préparation continue à évoluer avec chaque expérience.

## 🛠️ Action immédiate

Écrivez trois réponses : « ce que je fais mieux », « ce que je veux approfondir » et « ce que j'appliquerai au prochain voyage ». Gardez-les comme point de départ de votre prochain projet.

---

## Ressource — 1.2 formulaire evaluation globale

## Niveau Découverte — Poser les fondations

Cette évaluation vérifie votre capacité à donner une direction à votre voyage. À ce niveau, l'objectif est de comprendre vos besoins et de savoir choisir des options adaptées, sans avoir à tout maîtriser sur le terrain.

<form class="local-form" data-form-id="evaluation-decouverte">
    <div class="form-group">
        <label>Je sais identifier mes envies, mes contraintes, mes priorités et les inguides essentielles à mon voyage (1 à 5) : <span class="range-value" style="font-weight: bold; color: orange;">-</span></label>
        <input type="range" name="projet_clair" class="form-control" min="1" max="5" step="1">
    </div>
    <div class="form-group">
        <label>Je sais comparer des destinations, des budgets ou des façons de voyager selon mes critères (1 à 5) : <span class="range-value" style="font-weight: bold; color: orange;">-</span></label>
        <input type="range" name="choix_informes" class="form-control" min="1" max="5" step="1">
    </div>
    <div class="form-group">
        <label>Je sais repérer les inguides essentielles avant un départ (1 à 5) : <span class="range-value" style="font-weight: bold; color: orange;">-</span></label>
        <input type="range" name="inguides_essentielles" class="form-control" min="1" max="5" step="1">
    </div>
    <div class="form-group">
        <label>Ma prochaine action pour mieux préparer mon projet</label>
        <textarea name="prochaine_action" class="form-control" rows="3" placeholder="Ex. : définir mon budget ou préciser mon rythme de voyage."></textarea>
    </div>
    <div style="margin-top: 40px; margin-bottom: 60px;">
        <button type="submit" class="btn btn-warning btn-lg btn-block">🚀 Enregistrer mon bilan Découverte</button>
    </div>
</form>

---

## Ressource — 2.1 evaluation autonomie

## Niveau Autonomie — Construire un voyage cohérent

Cette évaluation porte sur votre capacité à transformer vos choix en plan concret. À ce niveau, vous savez préparer un voyage réaliste, organiser vos ressources et prévoir les principaux imprévus.

<form class="local-form" data-form-id="evaluation-autonomie">
    <div class="form-group">
        <label>Je sais construire un itinéraire réaliste qui respecte mon temps, mon budget et mon rythme (1 à 5) : <span class="range-value" style="font-weight: bold; color: orange;">-</span></label>
        <input type="range" name="itineraire_realiste" class="form-control" min="1" max="5" step="1">
    </div>
    <div class="form-group">
        <label>Je sais organiser mon budget, mes réservations, mes documents et mes outils essentiels (1 à 5) : <span class="range-value" style="font-weight: bold; color: orange;">-</span></label>
        <input type="range" name="organisation_voyage" class="form-control" min="1" max="5" step="1">
    </div>
    <div class="form-group">
        <label>Je sais prévoir une alternative pour les étapes importantes de mon voyage (1 à 5) : <span class="range-value" style="font-weight: bold; color: orange;">-</span></label>
        <input type="range" name="plan_b" class="form-control" min="1" max="5" step="1">
    </div>
    <div class="form-group">
        <label>Ma prochaine action pour gagner en autonomie</label>
        <textarea name="prochaine_action" class="form-control" rows="3" placeholder="Ex. : préparer mes cartes hors ligne ou constituer ma réserve d'urgence."></textarea>
    </div>
    <div style="margin-top: 40px; margin-bottom: 60px;">
        <button type="submit" class="btn btn-warning btn-lg btn-block">🚀 Enregistrer mon bilan Autonomie</button>
    </div>
</form>

---

## Ressource — 3.1 evaluation maitrise

## Niveau Maîtrise — Voyager de façon autonome

Cette évaluation porte sur votre aisance sur le terrain. À ce niveau, vous savez utiliser vos outils, faire évoluer un plan et améliorer votre méthode grâce à l'expérience.

<form class="local-form" data-form-id="evaluation-maitrise">
    <div class="form-group">
        <label>Je sais utiliser mes outils de navigation, communication et suivi de budget en situation réelle (1 à 5) : <span class="range-value" style="font-weight: bold; color: orange;">-</span></label>
        <input type="range" name="outils_terrain" class="form-control" min="1" max="5" step="1">
    </div>
    <div class="form-group">
        <label>Je sais m'adapter aux imprévus tout en préservant ma sécurité et mes priorités (1 à 5) : <span class="range-value" style="font-weight: bold; color: orange;">-</span></label>
        <input type="range" name="adaptation_imprevus" class="form-control" min="1" max="5" step="1">
    </div>
    <div class="form-group">
        <label>Je sais tirer des sections de mes voyages pour améliorer le suivant (1 à 5) : <span class="range-value" style="font-weight: bold; color: orange;">-</span></label>
        <input type="range" name="amelioration_continue" class="form-control" min="1" max="5" step="1">
    </div>
    <div class="form-group">
        <label>La compétence que je souhaite approfondir</label>
        <textarea name="prochaine_action" class="form-control" rows="3" placeholder="Ex. : mieux gérer un long voyage, un voyage en véhicule récréatif ou une destination isolée."></textarea>
    </div>
    <div style="margin-top: 40px; margin-bottom: 60px;">
        <button type="submit" class="btn btn-warning btn-lg btn-block">🚀 Enregistrer mon bilan Maîtrise</button>
    </div>
</form>

---
