{
  "formatVersion": "1.2",
  "currency": "EUR",
  "timezone": "Europe/Paris",
  "id": "demo-flanders-amsterdam",
  "name": "Flandre & Amsterdam · 4 jours",
  "subtitle": "Lille, Bruges, Amsterdam · un road trip en famille en voiture électrique",
  "start": "2026-10-23",
  "end": "2026-10-26",
  "cover": "https://upload.wikimedia.org/wikipedia/commons/thumb/8/8f/Rozenhoedkaai.jpg/960px-Rozenhoedkaai.jpg",
  "members": [
    {
      "id": "m1",
      "name": "Alex",
      "role": "owner",
      "kind": "adult",
      "dietary": [
        "vegetarian"
      ]
    },
    {
      "id": "m2",
      "name": "Sam",
      "role": "editor",
      "kind": "adult"
    },
    {
      "id": "m3",
      "name": "Léo",
      "role": "viewer",
      "kind": "teen",
      "age": 13
    },
    {
      "id": "m4",
      "name": "Mia",
      "role": "viewer",
      "kind": "child",
      "age": 9,
      "surpriseMode": "day"
    }
  ],
  "vehicles": [
    {
      "id": "v1",
      "name": "Électrique familiale",
      "kind": "car",
      "energy": "electric",
      "note": "≈ 380 km d’autonomie réelle · recharge rapide CCS"
    }
  ],
  "people": [
    {
      "id": "p1",
      "name": "Jonas",
      "role": "guide",
      "org": "Bruges by Foot",
      "languages": [
        "nl",
        "en",
        "fr"
      ],
      "phone": "+32 470 00 00 00",
      "sign": "Parapluie bleu, devant l’entrée du Beffroi",
      "note": "Balade familiale de 2 h, réservée via l’office de tourisme. Confirme la veille par WhatsApp."
    },
    {
      "id": "p2",
      "name": "Comptoir de location de vélos · MacBike Centraal",
      "role": "contact",
      "org": "MacBike",
      "languages": [
        "nl",
        "en"
      ],
      "note": "Demander un vélo enfant (24\"), pas besoin de siège bébé. Prévoir une pièce d’identité."
    }
  ],
  "days": [
    {
      "id": "d1",
      "index": 1,
      "date": "2026-10-23",
      "title": "Paris → Lille",
      "intro": "Première étape tranquille par l’A1. L’après-midi, montée au beffroi, gaufres chez Méert et flânerie dans le Vieux-Lille avant le dîner.",
      "stayBookingId": "b-lille",
      "route": {
        "km": 225,
        "drive": "2h30",
        "charge": "Aucune · charger à 100 % à la maison la veille au soir",
        "vehicleId": "v1"
      },
      "coords": {
        "lat": 50.6367,
        "lon": 3.0633,
        "label": "Lille"
      },
      "tip": "Se garer au Q-Park Grand-Place (souterrain, à 200 m de l’hôtel), moins cher avec le code soirée de l’hôtel.",
      "planB": "Jour de pluie : le musée La Piscine à Roubaix (piscine Art déco transformée en musée, 20 min en métro) à la place du beffroi.",
      "items": [
        {
          "id": "d1i1",
          "time": "09:30",
          "title": "Départ de Paris",
          "type": "drive",
          "status": "planned",
          "desc": "A1 direction nord. Pause café à mi-chemin si besoin (aire d’Assevillers).",
          "transport": {
            "vehicleId": "v1",
            "from": {
              "name": "Paris"
            },
            "to": {
              "name": "Lille",
              "coords": {
                "lat": 50.6367,
                "lon": 3.0633
              }
            }
          }
        },
        {
          "id": "d1i2",
          "time": "12:30",
          "title": "Déjeuner · Vieux-Lille",
          "type": "meal",
          "status": "planned",
          "place": "Rue de la Monnaie, Lille",
          "coords": {
            "lat": 50.6398,
            "lon": 3.0632
          },
          "options": [
            {
              "id": "d1o1",
              "title": "T'Rijsel",
              "desc": "Estaminet flamand, welsh, carbonnade, assiettes enfants.",
              "place": "25 rue de Gand, Lille"
            },
            {
              "id": "d1o2",
              "title": "La Chicorée",
              "desc": "Brasserie ouverte tout l’après-midi, pratique avec des enfants.",
              "place": "15 place Rihour, Lille"
            }
          ]
        },
        {
          "id": "d1i3",
          "time": "14:00",
          "title": "Arrivée · Hôtel L'Arbre Voyageur",
          "type": "checkin",
          "status": "planned",
          "bookingId": "b-lille",
          "place": "45 boulevard Carnot, Lille"
        },
        {
          "id": "d1i4",
          "time": "15:00",
          "endTime": "16:00",
          "title": "Montée au beffroi de Lille",
          "type": "heritage",
          "stars": 2,
          "status": "planned",
          "image": "https://upload.wikimedia.org/wikipedia/commons/thumb/5/5a/Beffroi_de_Lille.jpg/960px-Beffroi_de_Lille.jpg",
          "place": "Place Roger Salengro, Lille",
          "coords": {
            "lat": 50.6318,
            "lon": 3.0637
          },
          "desc": "104 m, le plus haut beffroi de France. Ascenseur pour les 100 premières marches, puis ~300 marches à pied. Superbe vue sur la Flandre.",
          "price": 24,
          "priceEstimated": true,
          "outfit": [
            "sport"
          ],
          "critical": "Dernière montée 30 min avant la fermeture (17:30 en octobre).",
          "alternatives": [
            {
              "id": "d1a1",
              "trigger": "closure",
              "title": "Cour de la Vieille Bourse",
              "desc": "Bouquinistes et joueurs d’échecs dans la bourse du XVIIe siècle."
            }
          ]
        },
        {
          "id": "d1i5",
          "time": "16:30",
          "title": "Gaufres chez Méert",
          "type": "meal",
          "stars": 1,
          "status": "planned",
          "place": "27 rue Esquermoise, Lille",
          "coords": {
            "lat": 50.6389,
            "lon": 3.062
          },
          "desc": "Gaufre à la crème vanillée, une institution depuis 1761, il y a la queue, mais ça avance vite.",
          "menuUrl": "https://www.meert.fr",
          "price": 18,
          "priceEstimated": true
        },
        {
          "id": "d1i6",
          "time": "17:00",
          "title": "Balade dans le Vieux-Lille",
          "type": "activity",
          "status": "planned",
          "image": "https://upload.wikimedia.org/wikipedia/commons/thumb/f/f1/Vieille_Bourse_Lille.jpg/960px-Vieille_Bourse_Lille.jpg",
          "place": "Grand'Place, Lille",
          "coords": {
            "lat": 50.6367,
            "lon": 3.0633
          },
          "desc": "Grand'Place → Vieille Bourse → rue de la Monnaie → Notre-Dame-de-la-Treille. Façades flamandes, pavés, chocolatiers.",
          "outfit": [
            "casual",
            "warm"
          ]
        },
        {
          "id": "d1i7",
          "time": "19:30",
          "title": "Dîner",
          "type": "meal",
          "status": "planned",
          "options": [
            {
              "id": "d1o3",
              "title": "Estaminet Chez la Vieille",
              "desc": "Potjevleesch, carbonnade, réserver à l’avance.",
              "place": "60 rue de Gand, Lille",
              "menuUrl": "https://www.estaminetlille.fr"
            },
            {
              "id": "d1o4",
              "title": "Le Barbier qui Fume",
              "desc": "Viandes fumées, grosses portions, ambiance décontractée.",
              "place": "69 rue de la Monnaie, Lille"
            }
          ]
        },
        {
          "id": "d1i8",
          "time": "21:30",
          "title": "La Grand'Place de nuit",
          "type": "free",
          "status": "planned",
          "desc": "La Vieille Bourse et la colonne de la Déesse illuminées, 15 minutes, puis au lit."
        },
        {
          "id": "d1i9",
          "title": "Nuit à Lille",
          "type": "night",
          "status": "planned",
          "bookingId": "b-lille"
        }
      ],
      "country": "FR"
    },
    {
      "id": "d2",
      "index": 2,
      "date": "2026-10-24",
      "title": "Lille → Bruges",
      "intro": "Une heure et demie jusqu’à Bruges. Croisière sur les canaux, chocolat, beffroi et béguinage, la cité médiévale se découvre à pied et en bateau.",
      "stayBookingId": "b-bruges",
      "route": {
        "km": 110,
        "drive": "1h30",
        "charge": "Aucune · largement assez d’autonomie",
        "vehicleId": "v1"
      },
      "coords": {
        "lat": 51.2085,
        "lon": 3.2245,
        "label": "Bruges"
      },
      "tip": "Le centre historique est sans voiture : se garer au Centrum 't Zand (souterrain, ≈ 3,50 €/24 h), navette gratuite jusqu’au Markt.",
      "planB": "Pluie toute la journée : Historium (musée immersif, Markt) + Choco-Story (musée du chocolat) à la place de la croisière et du beffroi.",
      "items": [
        {
          "id": "d2i1",
          "time": "08:30",
          "title": "Petit-déjeuner à l’hôtel",
          "type": "meal",
          "status": "planned",
          "desc": "Inclus, buffet à partir de 7:00."
        },
        {
          "id": "d2i2",
          "time": "10:00",
          "title": "Départ de l’hôtel & route vers Bruges",
          "type": "drive",
          "status": "planned",
          "bookingId": "b-lille",
          "transport": {
            "vehicleId": "v1",
            "from": {
              "name": "Lille"
            },
            "to": {
              "name": "Bruges · parking Centrum 't Zand",
              "coords": {
                "lat": 51.2049,
                "lon": 3.217
              }
            }
          }
        },
        {
          "id": "d2i3",
          "time": "11:45",
          "title": "Dépôt des bagages · Hôtel Ter Brughe",
          "type": "checkin",
          "status": "planned",
          "bookingId": "b-bruges",
          "place": "Oost-Gistelhof 2, Brugge",
          "desc": "Chambres à partir de 15:00 ; bagagerie à la réception."
        },
        {
          "id": "d2i4",
          "time": "12:30",
          "title": "Déjeuner sur le Markt",
          "type": "meal",
          "status": "planned",
          "place": "Markt, Brugge",
          "coords": {
            "lat": 51.2085,
            "lon": 3.2245
          },
          "options": [
            {
              "id": "d2o1",
              "title": "Frituur Chez Vincent",
              "desc": "De vraies frites belges, des moules, les enfants adorent.",
              "place": "Sint-Salvatorskerkhof 1, Brugge"
            },
            {
              "id": "d2o2",
              "title": "Brasserie De Halve Maan",
              "desc": "Brasserie de la dernière brasserie familiale du centre ; terrasse.",
              "place": "Walplein 26, Brugge",
              "menuUrl": "https://www.halvemaan.be"
            }
          ]
        },
        {
          "id": "d2i5",
          "time": "14:00",
          "endTime": "14:30",
          "title": "Croisière sur les canaux",
          "type": "boat",
          "stars": 3,
          "status": "planned",
          "image": "https://upload.wikimedia.org/wikipedia/commons/thumb/9/99/Bruges_canal.jpg/960px-Bruges_canal.jpg",
          "place": "Huidenvettersplein, Brugge",
          "coords": {
            "lat": 51.2072,
            "lon": 3.2266
          },
          "bookingId": "b-boat",
          "outfit": [
            "casual",
            "windproof"
          ],
          "desc": "30 minutes sur les Reien : le Rozenhoedkaai, le pont du béguinage, l’église Notre-Dame vue de l’eau.",
          "critical": "Départs toutes les 20 min jusqu’à 18:00, être à l’embarcadère 10 min en avance.",
          "alternatives": [
            {
              "id": "d2a1",
              "trigger": "rain",
              "title": "Bateau à pont couvert",
              "desc": "La plupart des bateaux ont un toit rétractable, la croisière est généralement maintenue."
            },
            {
              "id": "d2a2",
              "trigger": "wind",
              "windThreshold": 60,
              "title": "Musée Groeninge",
              "desc": "Les Primitifs flamands, 45 minutes à l’abri."
            }
          ]
        },
        {
          "id": "d2i6",
          "time": "15:00",
          "endTime": "17:00",
          "title": "Balade familiale avec un guide local",
          "type": "activity",
          "stars": 2,
          "status": "planned",
          "image": "https://upload.wikimedia.org/wikipedia/commons/thumb/4/40/Belfry_of_Bruges.jpg/960px-Belfry_of_Bruges.jpg",
          "place": "Markt 7 (entrée du Beffroi), Brugge",
          "coords": {
            "lat": 51.2083,
            "lon": 3.2247
          },
          "personIds": [
            "p1"
          ],
          "bookingId": "b-walk",
          "desc": "Beffroi, place du Burg, les cours cachées, arrivée au béguinage. Histoires adaptées aux enfants, questions façon chasse au trésor pour Mia."
        },
        {
          "id": "d2i7",
          "time": "17:15",
          "title": "Béguinage & Minnewater",
          "type": "nature",
          "stars": 1,
          "status": "planned",
          "image": "https://upload.wikimedia.org/wikipedia/commons/thumb/a/af/Begijnhof_Brugge.jpg/960px-Begijnhof_Brugge.jpg",
          "place": "Begijnhof, Brugge",
          "coords": {
            "lat": 51.202,
            "lon": 3.2225
          },
          "desc": "Béguinage classé à l’UNESCO (silence à l’intérieur), puis le lac d’Amour et ses cygnes. Photos à l’heure dorée."
        },
        {
          "id": "d2i8",
          "time": "18:15",
          "title": "Pause chocolat",
          "type": "shopping",
          "status": "planned",
          "options": [
            {
              "id": "d2o3",
              "title": "The Chocolate Line",
              "desc": "Dominique Persoone, saveurs audacieuses (bacon, cola…).",
              "place": "Simon Stevinplein 19, Brugge"
            },
            {
              "id": "d2o4",
              "title": "Chocolatier Dumon",
              "desc": "Minuscule boutique familiale, pralines classiques.",
              "place": "Eiermarkt 6, Brugge"
            }
          ]
        },
        {
          "id": "d2i9",
          "time": "19:30",
          "title": "Dîner",
          "type": "meal",
          "status": "planned",
          "options": [
            {
              "id": "d2o5",
              "title": "De Bottelier",
              "desc": "Chaleureux, de saison, options végétariennes, réserver.",
              "place": "Sint-Jakobsstraat 63, Brugge"
            },
            {
              "id": "d2o6",
              "title": "'t Zwart Huis",
              "desc": "Carbonnade flamande dans une maison du XVe siècle.",
              "place": "Kuipersstraat 23, Brugge"
            }
          ]
        },
        {
          "id": "d2i10",
          "time": "21:15",
          "title": "Les canaux illuminés",
          "type": "viewpoint",
          "status": "planned",
          "image": "https://upload.wikimedia.org/wikipedia/commons/thumb/8/8f/Rozenhoedkaai.jpg/960px-Rozenhoedkaai.jpg",
          "place": "Rozenhoedkaai, Brugge",
          "coords": {
            "lat": 51.2077,
            "lon": 3.227
          },
          "desc": "Rozenhoedkaai → Groenerei → Burg. Bruges la nuit, c’est la carte postale.",
          "outfit": [
            "warm"
          ]
        },
        {
          "id": "d2i11",
          "title": "Nuit à Bruges",
          "type": "night",
          "status": "planned",
          "bookingId": "b-bruges"
        }
      ],
      "country": "BE"
    },
    {
      "id": "d3",
      "index": 3,
      "date": "2026-10-25",
      "title": "Bruges → Amsterdam",
      "intro": "Le beffroi dès l’ouverture, puis la longue étape vers Amsterdam avec un déjeuner-recharge rapide près d’Anvers. Vélos et NEMO l’après-midi.",
      "stayBookingId": "b-ams",
      "route": {
        "km": 255,
        "drive": "2h50",
        "charge": "Fastned Antwerpen-Zuid · 20 min pendant le repas (CCS 300 kW)",
        "vehicleId": "v1"
      },
      "coords": {
        "lat": 52.3731,
        "lon": 4.8926,
        "label": "Amsterdam"
      },
      "tip": "Amsterdam a une zone à faibles émissions et un stationnement en voirie hors de prix : filer directement au parking de l’hôtel (Oosterdok) et y laisser la voiture jusqu’à lundi.",
      "planB": "Si le créneau du beffroi est manqué : l’Historium (Markt 1) ouvre à 10:00, 1 heure, pas de queue en automne.",
      "items": [
        {
          "id": "d3i1",
          "time": "09:30",
          "endTime": "10:15",
          "title": "Montée au beffroi de Bruges",
          "type": "heritage",
          "stars": 3,
          "status": "planned",
          "image": "https://upload.wikimedia.org/wikipedia/commons/thumb/4/40/Belfry_of_Bruges.jpg/960px-Belfry_of_Bruges.jpg",
          "place": "Markt 7, Brugge",
          "coords": {
            "lat": 51.2083,
            "lon": 3.2247
          },
          "bookingId": "b-belfry",
          "desc": "366 marches, 83 m, la salle du carillon à mi-hauteur. Billets horodatés, le premier créneau de la journée est le plus calme.",
          "outfit": [
            "sport"
          ],
          "critical": "Entrée à heure fixe : arriver 10 min avant l’horaire imprimé sur le billet."
        },
        {
          "id": "d3i2",
          "time": "10:45",
          "title": "Départ de l’hôtel Ter Brughe",
          "type": "checkout",
          "status": "planned",
          "bookingId": "b-bruges"
        },
        {
          "id": "d3i3",
          "time": "11:15",
          "title": "Route Bruges → Amsterdam",
          "type": "drive",
          "status": "planned",
          "desc": "E40 → ring d’Anvers → A16/A4 via Breda. Pas d’heure de pointe un dimanche.",
          "transport": {
            "vehicleId": "v1",
            "from": {
              "name": "Bruges"
            },
            "to": {
              "name": "Amsterdam · parking Centrum Oosterdok",
              "coords": {
                "lat": 52.3768,
                "lon": 4.9081
              }
            }
          }
        },
        {
          "id": "d3i4",
          "time": "12:30",
          "endTime": "13:15",
          "title": "Recharge rapide + déjeuner · Antwerpen-Zuid",
          "type": "charging",
          "status": "planned",
          "place": "Fastned Antwerpen-Zuid, E19",
          "coords": {
            "lat": 51.162,
            "lon": 4.381
          },
          "desc": "20 min à 300 kW redonnent ~250 km. Sandwichs de la boutique de la station ou du sac pique-nique.",
          "price": 28,
          "priceEstimated": true
        },
        {
          "id": "d3i5",
          "time": "14:45",
          "title": "Parking & arrivée · DoubleTree Centraal",
          "type": "checkin",
          "status": "planned",
          "bookingId": "b-ams",
          "place": "Oosterdoksstraat 4, Amsterdam",
          "coords": {
            "lat": 52.3767,
            "lon": 4.9078
          },
          "desc": "Le parking Centrum Oosterdok se trouve sous l’hôtel ; le ticket de parking est dans les Réservations."
        },
        {
          "id": "d3i6",
          "time": "15:30",
          "title": "Location de vélos · MacBike Centraal",
          "type": "bike",
          "status": "planned",
          "place": "Stationsplein 5, Amsterdam",
          "coords": {
            "lat": 52.3782,
            "lon": 4.9003
          },
          "personIds": [
            "p2"
          ],
          "desc": "4 vélos de ville dont un vélo enfant 24\", jusqu’à demain 13:00. Casque facultatif aux Pays-Bas ; on les prend quand même.",
          "price": 64,
          "priceEstimated": true,
          "outfit": [
            "sport",
            "windproof"
          ],
          "alternatives": [
            {
              "id": "d3a1",
              "trigger": "rain",
              "title": "Pass journée GVB (tram + ferry)",
              "desc": "Les trams 2/12 font la même boucle ; ferries gratuits derrière Centraal pour les enfants."
            }
          ]
        },
        {
          "id": "d3i7",
          "time": "16:00",
          "endTime": "17:30",
          "title": "NEMO Science Museum",
          "type": "activity",
          "stars": 3,
          "status": "planned",
          "image": "https://upload.wikimedia.org/wikipedia/commons/thumb/9/95/NEMO_Amsterdam.jpg/960px-NEMO_Amsterdam.jpg",
          "place": "Oosterdok 2, Amsterdam",
          "coords": {
            "lat": 52.3741,
            "lon": 4.9123
          },
          "bookingId": "b-nemo",
          "desc": "Cinq étages de science à manipuler ; le spectacle de réaction en chaîne à 15:00 et 17:00. Terrasse sur le toit avec vue sur le port.",
          "critical": "Ferme à 17:30, monter directement au dernier étage et redescendre."
        },
        {
          "id": "d3i8",
          "time": "18:00",
          "title": "Les canaux à vélo · Prinsengracht",
          "type": "bike",
          "status": "planned",
          "image": "https://upload.wikimedia.org/wikipedia/commons/thumb/0/00/Prinsengracht_Amsterdam.jpg/960px-Prinsengracht_Amsterdam.jpg",
          "place": "Prinsengracht, Amsterdam",
          "coords": {
            "lat": 52.3752,
            "lon": 4.884
          },
          "desc": "Boucle tranquille Prinsengracht → Jordaan → Westerkerk. Rester à droite, attention aux trams, les enfants au milieu."
        },
        {
          "id": "d3i9",
          "time": "19:30",
          "title": "Dîner dans le Jordaan",
          "type": "meal",
          "status": "planned",
          "options": [
            {
              "id": "d3o1",
              "title": "Moeders",
              "desc": "Cuisine néerlandaise familiale, murs couverts de photos de mamans, réserver.",
              "place": "Rozengracht 251, Amsterdam",
              "menuUrl": "https://www.moeders.com"
            },
            {
              "id": "d3o2",
              "title": "Foodhallen",
              "desc": "Halle gourmande couverte, chacun choisit son stand, sans réservation.",
              "place": "Bellamyplein 51, Amsterdam"
            }
          ]
        },
        {
          "id": "d3i10",
          "title": "Nuit à Amsterdam",
          "type": "night",
          "status": "planned",
          "bookingId": "b-ams"
        }
      ],
      "country": "NL"
    },
    {
      "id": "d4",
      "index": 4,
      "date": "2026-10-26",
      "title": "Les moulins, puis retour",
      "intro": "Train pour les moulins de Zaanse Schans dès l’ouverture, retour pour rendre les vélos, puis la longue route du retour avec une pause recharge.",
      "route": {
        "km": 510,
        "drive": "5h20",
        "charge": "Ionity aire de Ressons (A1) · 25 min",
        "vehicleId": "v1"
      },
      "coords": {
        "lat": 52.474,
        "lon": 4.818,
        "label": "Zaanse Schans"
      },
      "tip": "Acheter les billets de train NS dans l’appli la veille au soir (la carte bancaire sans contact marche aussi aux portiques).",
      "planB": "Mauvais temps : parcours famille du Rijksmuseum (la Ronde de nuit + les maisons de poupées) à la place des moulins, 2 heures, billets en ligne.",
      "items": [
        {
          "id": "d4i1",
          "time": "07:45",
          "title": "Petit-déjeuner & départ de l’hôtel",
          "type": "checkout",
          "status": "planned",
          "bookingId": "b-ams",
          "desc": "Laisser les bagages à la réception, la voiture reste au parking jusqu’à 14:00."
        },
        {
          "id": "d4i2",
          "time": "08:34",
          "endTime": "08:52",
          "title": "Train Amsterdam Centraal → Zaandijk Zaanse Schans",
          "type": "train",
          "status": "planned",
          "image": "https://upload.wikimedia.org/wikipedia/commons/thumb/a/a8/Amsterdam_Centraal.jpg/960px-Amsterdam_Centraal.jpg",
          "bookingId": "b-train",
          "transport": {
            "carrier": "NS",
            "number": "Sprinter 4816",
            "from": {
              "name": "Amsterdam Centraal",
              "platform": "4b"
            },
            "to": {
              "name": "Zaandijk Zaanse Schans"
            }
          },
          "desc": "17 minutes, toutes les 15 min. Puis 15 min à pied par le pont jusqu’aux moulins."
        },
        {
          "id": "d4i3",
          "time": "09:15",
          "endTime": "11:15",
          "title": "Les moulins de Zaanse Schans",
          "type": "heritage",
          "stars": 3,
          "status": "planned",
          "image": "https://upload.wikimedia.org/wikipedia/commons/thumb/e/ef/Zaanse_Schans_windmills.jpg/960px-Zaanse_Schans_windmills.jpg",
          "place": "Schansend 7, Zaandam",
          "coords": {
            "lat": 52.474,
            "lon": 4.818
          },
          "desc": "Moulins en activité (monter dans De Kat, le moulin à pigments), atelier de sabots, ferme fromagère avec dégustation. Promenade libre ; moulins ≈ 6 € chacun.",
          "price": 30,
          "priceEstimated": true,
          "outfit": [
            "warm",
            "windproof"
          ],
          "alternatives": [
            {
              "id": "d4a1",
              "trigger": "rain",
              "title": "Zaans Museum",
              "desc": "À l’abri, exposition chocolat & usine Verkade, atelier pour les enfants."
            }
          ]
        },
        {
          "id": "d4i4",
          "time": "11:40",
          "title": "Train retour vers Amsterdam Centraal",
          "type": "train",
          "status": "planned",
          "transport": {
            "carrier": "NS",
            "from": {
              "name": "Zaandijk Zaanse Schans"
            },
            "to": {
              "name": "Amsterdam Centraal"
            }
          }
        },
        {
          "id": "d4i5",
          "time": "12:15",
          "title": "Retour des vélos",
          "type": "bike",
          "status": "planned",
          "place": "Stationsplein 5, Amsterdam",
          "personIds": [
            "p2"
          ]
        },
        {
          "id": "d4i6",
          "time": "12:45",
          "title": "Déjeuner rapide",
          "type": "meal",
          "status": "planned",
          "options": [
            {
              "id": "d4o1",
              "title": "Stubbe's Haring",
              "desc": "Stand de harengs sur le pont, la spécialité locale.",
              "place": "Singel / Haarlemmersluis, Amsterdam"
            },
            {
              "id": "d4o2",
              "title": "Bakers & Roasters",
              "desc": "Assiettes brunch, grosses portions pour la route.",
              "place": "Kadijksplein 16, Amsterdam"
            }
          ]
        },
        {
          "id": "d4i7",
          "time": "14:00",
          "title": "Route du retour",
          "type": "drive",
          "status": "planned",
          "desc": "A4/A16 → Anvers → E19/A1. Objectif : être à la maison pour le dîner.",
          "transport": {
            "vehicleId": "v1",
            "from": {
              "name": "Amsterdam"
            },
            "to": {
              "name": "Paris"
            }
          }
        },
        {
          "id": "d4i8",
          "time": "17:00",
          "endTime": "17:30",
          "title": "Recharge · Ionity aire de Ressons (A1)",
          "type": "charging",
          "status": "planned",
          "coords": {
            "lat": 49.541,
            "lon": 2.759
          },
          "desc": "25 min pour rentrer confortablement. Goûter & toilettes.",
          "price": 32,
          "priceEstimated": true
        },
        {
          "id": "d4i9",
          "time": "19:30",
          "title": "Maison",
          "type": "free",
          "status": "planned"
        }
      ],
      "country": "NL"
    }
  ],
  "bookings": [
    {
      "id": "b-lille",
      "type": "stay",
      "status": "confirmed",
      "title": "Hôtel L'Arbre Voyageur · Lille",
      "hotelStars": 4,
      "dates": "Nuit du 23 au 24 octobre",
      "checkin": "15:00",
      "checkout": "11:00",
      "breakfastIncluded": true,
      "rooms": [
        {
          "label": "Chambre familiale (2 adultes + 2 enfants)",
          "memberIds": [
            "m1",
            "m2",
            "m3",
            "m4"
          ]
        }
      ],
      "address": "45 boulevard Carnot, 59800 Lille",
      "gpsAddress": "Q-Park Grand-Place, rue des Manneliers, Lille",
      "phone": "+33 3 20 20 62 62",
      "website": "https://www.hotellarbrevoyageur.com",
      "cancellation": "Annulation gratuite jusqu’au 21 octobre, 18:00",
      "instructions": "Arrivée anticipée possible si la chambre est prête ; demander le code de réduction parking à la réception.",
      "price": 189,
      "payment": {
        "status": "onsite"
      },
      "refs": [
        {
          "label": "Référence de réservation",
          "value": "LAV-20261023-4471"
        }
      ],
      "tickets": [],
      "reminder": {
        "date": "2026-10-21",
        "action": "Confirmer par téléphone l’arrivée anticipée à 14:00"
      }
    },
    {
      "id": "b-bruges",
      "type": "stay",
      "status": "confirmed",
      "title": "Hôtel Ter Brughe · Bruges",
      "hotelStars": 4,
      "dates": "Nuit du 24 au 25 octobre",
      "checkin": "15:00",
      "checkout": "11:00",
      "breakfastIncluded": true,
      "rooms": [
        {
          "label": "Double vue canal",
          "memberIds": [
            "m1",
            "m2"
          ]
        },
        {
          "label": "Twin (lits jumeaux)",
          "memberIds": [
            "m3",
            "m4"
          ]
        }
      ],
      "address": "Oost-Gistelhof 2, 8000 Brugge",
      "gpsAddress": "Parking Centrum 't Zand, 't Zand 12, Brugge",
      "phone": "+32 50 34 03 24",
      "website": "https://www.hotelterbrughe.com",
      "cancellation": "Annulation gratuite jusqu’au 22 octobre",
      "price": 262,
      "payment": {
        "status": "deposit",
        "deposit": 80
      },
      "refs": [
        {
          "label": "Numéro de réservation",
          "value": "TB-88412"
        },
        {
          "label": "Code de la porte (après 22:00)",
          "value": "4471#",
          "sensitive": true
        }
      ],
      "tickets": []
    },
    {
      "id": "b-boat",
      "type": "activity",
      "status": "confirmed",
      "title": "Croisière sur les canaux · embarcadère Huidenvettersplein",
      "dates": "24 octobre, 14:00",
      "address": "Huidenvettersplein 13, 8000 Brugge",
      "price": 48,
      "payment": {
        "status": "prepaid"
      },
      "refs": [
        {
          "label": "Réservation",
          "value": "CAN-2410-0142"
        }
      ],
      "tickets": [
        {
          "id": "t-boat",
          "label": "Famille (2 adultes + 2 enfants)",
          "code": "CAN-2410-0142",
          "memberId": "m1",
          "payload": "CAN|2410|0142|FAM4|20261024",
          "format": "qr",
          "date": "2026-10-24",
          "time": "14:00"
        }
      ]
    },
    {
      "id": "b-walk",
      "type": "activity",
      "status": "confirmed",
      "title": "Visite guidée en famille avec Jonas",
      "dates": "24 octobre, 15:00–17:00",
      "personIds": [
        "p1"
      ],
      "instructions": "Point de rendez-vous : devant l’entrée du Beffroi, Markt 7. Parapluie bleu. Régler le guide en espèces ou par carte à la fin.",
      "price": 90,
      "payment": {
        "status": "onsite"
      },
      "refs": [
        {
          "label": "Réf. office de tourisme",
          "value": "VB-7731"
        }
      ],
      "tickets": []
    },
    {
      "id": "b-belfry",
      "type": "activity",
      "status": "to_book",
      "title": "Beffroi de Bruges · billet horodaté 09:30",
      "dates": "25 octobre, 09:30",
      "address": "Markt 7, 8000 Brugge",
      "website": "https://www.museabrugge.be",
      "instructions": "Réserver le premier créneau en ligne (limité à 70 personnes à la fois). Gratuit pour les moins de 6 ans.",
      "price": 42,
      "priceEstimated": true,
      "refs": [],
      "tickets": [],
      "reminder": {
        "date": "2026-10-18",
        "action": "Acheter en ligne le créneau du beffroi de 09:30"
      }
    },
    {
      "id": "b-ams",
      "type": "stay",
      "status": "confirmed",
      "title": "DoubleTree by Hilton Amsterdam Centraal",
      "hotelStars": 4,
      "dates": "Nuit du 25 au 26 octobre",
      "checkin": "15:00",
      "checkout": "12:00",
      "breakfastIncluded": false,
      "rooms": [
        {
          "label": "Chambre familiale, 2 lits queen",
          "memberIds": [
            "m1",
            "m2",
            "m3",
            "m4"
          ]
        }
      ],
      "address": "Oosterdoksstraat 4, 1011 DK Amsterdam",
      "gpsAddress": "Parking Centrum Oosterdok, Oosterdokskade 5, Amsterdam",
      "phone": "+31 20 530 0800",
      "website": "https://www.hilton.com",
      "cancellation": "Tarif non remboursable",
      "instructions": "SkyLounge au 11e étage, accès gratuit pour les clients, superbe au coucher du soleil.",
      "price": 245,
      "payment": {
        "status": "prepaid"
      },
      "refs": [
        {
          "label": "Confirmation",
          "value": "HH-3392847106"
        }
      ],
      "tickets": []
    },
    {
      "id": "b-parking",
      "type": "parking",
      "status": "confirmed",
      "title": "Parking Centrum Oosterdok · 24 h",
      "dates": "25 oct. 14:30 → 26 oct. 14:00",
      "address": "Oosterdokskade 5, Amsterdam",
      "instructions": "Scanner le code aux barrières d’entrée et de sortie. Niveau -2, près de l’ascenseur de l’hôtel.",
      "price": 45,
      "payment": {
        "status": "prepaid"
      },
      "refs": [
        {
          "label": "E-billet",
          "value": "PCO-58201933"
        }
      ],
      "tickets": [
        {
          "id": "t-parking",
          "label": "E-billet parking",
          "code": "PCO-58201933",
          "payload": "PCO58201933",
          "format": "code128",
          "validUntil": "2026-10-26"
        }
      ]
    },
    {
      "id": "b-nemo",
      "type": "activity",
      "status": "confirmed",
      "title": "NEMO Science Museum",
      "dates": "25 octobre, entrée à 16:00",
      "address": "Oosterdok 2, 1011 VX Amsterdam",
      "website": "https://www.nemosciencemuseum.nl",
      "price": 70,
      "payment": {
        "status": "prepaid"
      },
      "refs": [
        {
          "label": "Commande",
          "value": "NEMO-77120345"
        }
      ],
      "tickets": [
        {
          "id": "t-nemo-1",
          "label": "Adulte",
          "code": "NEMO-77120345-1",
          "memberId": "m1",
          "payload": "NEMO77120345-01-A",
          "format": "qr",
          "date": "2026-10-25",
          "time": "16:00"
        },
        {
          "id": "t-nemo-2",
          "label": "Adulte",
          "code": "NEMO-77120345-2",
          "memberId": "m2",
          "payload": "NEMO77120345-02-A",
          "format": "qr",
          "date": "2026-10-25",
          "time": "16:00"
        },
        {
          "id": "t-nemo-3",
          "label": "Enfant 4–17 ans",
          "code": "NEMO-77120345-3",
          "memberId": "m3",
          "payload": "NEMO77120345-03-C",
          "format": "qr",
          "date": "2026-10-25",
          "time": "16:00"
        },
        {
          "id": "t-nemo-4",
          "label": "Enfant 4–17 ans",
          "code": "NEMO-77120345-4",
          "memberId": "m4",
          "payload": "NEMO77120345-04-C",
          "format": "qr",
          "date": "2026-10-25",
          "time": "16:00"
        }
      ]
    },
    {
      "id": "b-train",
      "type": "transport",
      "status": "optional",
      "title": "Train NS · Amsterdam Centraal ↔ Zaandijk Zaanse Schans",
      "dates": "26 octobre",
      "website": "https://www.ns.nl",
      "instructions": "Acheter dans l’appli NS la veille au soir, ou valider à l’entrée et à la sortie avec une carte bancaire sans contact. Enfants 4–11 ans : Railrunner 2,50 €.",
      "price": 22,
      "priceEstimated": true,
      "refs": [],
      "tickets": []
    }
  ],
  "checklists": [
    {
      "id": "c1",
      "title": "Bagages",
      "emoji": "🎒",
      "items": [
        {
          "id": "c1i1",
          "label": "Pièces d’identité pour nous quatre",
          "done": false
        },
        {
          "id": "c1i2",
          "label": "Vestes de pluie · c’est la Flandre en octobre",
          "done": false
        },
        {
          "id": "c1i3",
          "label": "Baskets pour les beffrois (700 marches au total)",
          "done": true
        },
        {
          "id": "c1i4",
          "label": "Sac pique-nique pour les pauses recharge",
          "done": false
        },
        {
          "id": "c1i5",
          "label": "Casques audio des enfants pour la voiture",
          "done": true
        }
      ]
    },
    {
      "id": "c2",
      "title": "Voiture",
      "emoji": "🔌",
      "items": [
        {
          "id": "c2i1",
          "label": "Charger à 100 % jeudi soir",
          "done": false
        },
        {
          "id": "c2i2",
          "label": "Cartes de recharge Fastned / Ionity + appli connectée",
          "done": true
        },
        {
          "id": "c2i3",
          "label": "Triangle & gilets (obligatoires en BE/NL)",
          "done": true
        }
      ]
    }
  ],
  "contacts": [
    {
      "id": "ct1",
      "name": "Numéro d’urgence européen",
      "phone": "112",
      "note": "Valable en France, en Belgique et aux Pays-Bas"
    },
    {
      "id": "ct2",
      "name": "Assistance dépannage (assureur)",
      "phone": "+33 1 00 00 00 00",
      "note": "Numéro de contrat dans la boîte à gants"
    }
  ],
  "logistics": [
    {
      "id": "l1",
      "emoji": "🅿️",
      "title": "Se garer à Bruges",
      "content": "Tout le centre est piéton. Parking Centrum 't Zand : environ 3,50 € par 24 h, navette gratuite jusqu’au Markt sur présentation du ticket de parking."
    },
    {
      "id": "l2",
      "emoji": "🚗",
      "title": "Zone à faibles émissions d’Amsterdam",
      "content": "Milieuzone dans le centre, aucun souci pour une électrique. Le stationnement en voirie est à 7,50 €/h : toujours utiliser le parking Oosterdok."
    },
    {
      "id": "l3",
      "emoji": "🚲",
      "title": "Le vélo à Amsterdam",
      "content": "Rouler à droite, signaler avec le bras, pas de téléphone. Les pistes cyclables sont réservées aux vélos, ne jamais y marcher. Fermer les deux antivols à l’arrêt."
    }
  ],
  "apps": [
    {
      "id": "a1",
      "name": "Visit Bruges",
      "emoji": "🧭",
      "desc": "Plans officiels de la ville et horaires d’ouverture",
      "url": "https://www.visitbruges.be"
    },
    {
      "id": "a2",
      "name": "NS",
      "emoji": "🚆",
      "desc": "Chemins de fer néerlandais · billets et départs en temps réel",
      "url": "https://www.ns.nl",
      "ios": "https://apps.apple.com/app/id370504240",
      "android": "https://play.google.com/store/apps/details?id=nl.ns.android.activity"
    },
    {
      "id": "a3",
      "name": "Fastned",
      "emoji": "⚡",
      "desc": "Bornes rapides BE/NL · lancer une session depuis l’appli",
      "url": "https://www.fastned.nl"
    }
  ]
}
