{"id":3221,"date":"2026-06-15T12:16:03","date_gmt":"2026-06-15T10:16:03","guid":{"rendered":"https:\/\/www.lemoulindesurier.com\/elaia-metadatas\/"},"modified":"2026-10-20T15:07:58","modified_gmt":"2026-10-20T13:07:58","slug":"elaia-metadatas","status":"publish","type":"page","link":"https:\/\/www.lemoulindesurier.com\/en\/elaia-metadatas\/","title":{"rendered":"D\u00e9couvrez autour de vous"},"content":{"rendered":"\n\n<script type=\"application\/ld+json\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"ItemList\",\"name\":\"Villes aux alentours\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"item\":{\"@type\":\"Thing\",\"name\":\"Monpazier\",\"url\":\"https:\/\/www.pays-bergerac-tourisme.com\/fr\/decouvrir\/cote-pierres\/bastides\/monpazier\",\"image\":\"https:\/\/elaia-public.s3.fr-par.scw.cloud\/metadata_images\/image_6a5de4d34b3ef.png\",\"geo\":{\"@type\":\"GeoCoordinates\",\"latitude\":44.755,\"longitude\":0.929},\"additionalProperty\":[{\"@type\":\"PropertyValue\",\"name\":\"Distance depuis le camping (km)\",\"value\":\"18\"},{\"@type\":\"PropertyValue\",\"name\":\"Temps en voiture (min)\",\"value\":\"20\"},{\"@type\":\"PropertyValue\",\"name\":\"Lieux \/ Activit\u00e9s incontournables\",\"value\":\"Summer night market, historic bastide, the P\u00e9rigord Pourpre festival on August 4th.\"},{\"@type\":\"PropertyValue\",\"name\":\"March\u00e9s \/ \u00e9v\u00e9nements locaux\",\"value\":\"Night markets and gourmet markets in summer, summer music festival.\"},{\"@type\":\"PropertyValue\",\"name\":\"Restaurants \/ sp\u00e9cialit\u00e9s\",\"value\":\"Restaurants with local specialties around the bastide.\"},{\"@type\":\"PropertyValue\",\"name\":\"Commentaires ou tips perso\",\"value\":\"Charming bastide with summer entertainment and a music festival, perfect for a convivial evening.\"},{\"@type\":\"PropertyValue\",\"name\":\"Adresse compl\u00e8te\",\"value\":\"Monpazier, Dordogne, France\"}]}},{\"@type\":\"ListItem\",\"position\":2,\"item\":{\"@type\":\"Thing\",\"name\":\"Domme\",\"url\":\"https:\/\/www.vallee-dordogne.com\/dordogne\/domme\",\"image\":\"https:\/\/elaia-public.s3.fr-par.scw.cloud\/metadata_images\/image_6a5de75d4f6ee.png\",\"geo\":{\"@type\":\"GeoCoordinates\",\"latitude\":44.8111,\"longitude\":1.1222},\"additionalProperty\":[{\"@type\":\"PropertyValue\",\"name\":\"Distance depuis le camping (km)\",\"value\":\"25\"},{\"@type\":\"PropertyValue\",\"name\":\"Temps en voiture (min)\",\"value\":\"30\"},{\"@type\":\"PropertyValue\",\"name\":\"Lieux \/ Activit\u00e9s incontournables\",\"value\":\"Fortified bastide, panoramic views, markets under the arcades.\"},{\"@type\":\"PropertyValue\",\"name\":\"March\u00e9s \/ \u00e9v\u00e9nements locaux\",\"value\":\"Traditional markets and gourmet markets in season.\"},{\"@type\":\"PropertyValue\",\"name\":\"Restaurants \/ sp\u00e9cialit\u00e9s\",\"value\":\"Local specialties in village-center restaurants.\"},{\"@type\":\"PropertyValue\",\"name\":\"Commentaires ou tips perso\",\"value\":\"Fortified village with stunning views, perfect for cultural and culinary strolls.\"},{\"@type\":\"PropertyValue\",\"name\":\"Adresse compl\u00e8te\",\"value\":\"Domme, Dordogne, France\"}]}},{\"@type\":\"ListItem\",\"position\":3,\"item\":{\"@type\":\"Thing\",\"name\":\"Sarlat-la-Can\u00e9da\",\"url\":\"https:\/\/www.sarlat-tourisme.com\/\",\"image\":\"https:\/\/elaia-public.s3.fr-par.scw.cloud\/metadata_images\/image_6a5de6e611ebe.png\",\"geo\":{\"@type\":\"GeoCoordinates\",\"latitude\":44.8919,\"longitude\":1.2143},\"additionalProperty\":[{\"@type\":\"PropertyValue\",\"name\":\"Distance depuis le camping (km)\",\"value\":\"30\"},{\"@type\":\"PropertyValue\",\"name\":\"Temps en voiture (min)\",\"value\":\"35\"},{\"@type\":\"PropertyValue\",\"name\":\"Lieux \/ Activit\u00e9s incontournables\",\"value\":\"Medieval center, traditional markets, Ch\u00e2teau des Milandes.\"},{\"@type\":\"PropertyValue\",\"name\":\"March\u00e9s \/ \u00e9v\u00e9nements locaux\",\"value\":\"Traditional markets, cultural events throughout the seasons.\"},{\"@type\":\"PropertyValue\",\"name\":\"Restaurants \/ sp\u00e9cialit\u00e9s\",\"value\":\"P\u00e9rigord specialties, many quality restaurants.\"},{\"@type\":\"PropertyValue\",\"name\":\"Commentaires ou tips perso\",\"value\":\"Unmissable town for its medieval heritage and gastronomy, perfect for a day trip.\"},{\"@type\":\"PropertyValue\",\"name\":\"Adresse compl\u00e8te\",\"value\":\"Sarlat-la-Can\u00e9da, Dordogne, France\"}]}},{\"@type\":\"ListItem\",\"position\":4,\"item\":{\"@type\":\"Thing\",\"name\":\"Issigeac\",\"url\":\"https:\/\/www.pays-bergerac-tourisme.com\/fr\/decouvrir\/cote-pierres\/villages-de-caractere\/issigeac\",\"image\":\"https:\/\/elaia-public.s3.fr-par.scw.cloud\/metadata_images\/image_6a5de6ba3e03f.png\",\"geo\":{\"@type\":\"GeoCoordinates\",\"latitude\":44.7087,\"longitude\":0.9493},\"additionalProperty\":[{\"@type\":\"PropertyValue\",\"name\":\"Distance depuis le camping (km)\",\"value\":\"20\"},{\"@type\":\"PropertyValue\",\"name\":\"Temps en voiture (min)\",\"value\":\"25\"},{\"@type\":\"PropertyValue\",\"name\":\"Lieux \/ Activit\u00e9s incontournables\",\"value\":\"Medieval village, local markets on Sunday, strolling through the typical streets.\"},{\"@type\":\"PropertyValue\",\"name\":\"March\u00e9s \/ \u00e9v\u00e9nements locaux\",\"value\":\"Sunday market, traditional local events.\"},{\"@type\":\"PropertyValue\",\"name\":\"Restaurants \/ sp\u00e9cialit\u00e9s\",\"value\":\"Restaurants with regional specialties, warm village atmosphere.\"},{\"@type\":\"PropertyValue\",\"name\":\"Commentaires ou tips perso\",\"value\":\"Picturesque village with Provencal ambiance, ideal for discovering local terroir and craftsmanship.\"},{\"@type\":\"PropertyValue\",\"name\":\"Adresse compl\u00e8te\",\"value\":\"Issigeac, Dordogne, France\"}]}},{\"@type\":\"ListItem\",\"position\":5,\"item\":{\"@type\":\"Thing\",\"name\":\"Beaumont-du-P\u00e9rigord\",\"url\":\"https:\/\/www.pays-bergerac-tourisme.com\/fr\/decouvrir\/cote-pierres\/bastides\/beaumontois-en-perigord\",\"image\":\"https:\/\/elaia-public.s3.fr-par.scw.cloud\/metadata_images\/image_6a5de37429b44.png\",\"geo\":{\"@type\":\"GeoCoordinates\",\"latitude\":44.814,\"longitude\":0.9447},\"additionalProperty\":[{\"@type\":\"PropertyValue\",\"name\":\"Distance depuis le camping (km)\",\"value\":\"8\"},{\"@type\":\"PropertyValue\",\"name\":\"Temps en voiture (min)\",\"value\":\"10\"},{\"@type\":\"PropertyValue\",\"name\":\"Lieux \/ Activit\u00e9s incontournables\",\"value\":\"The bastides of Beaumont du P\u00e9rigord, the nocturnal gourmet market, flea markets, and summer events.\"},{\"@type\":\"PropertyValue\",\"name\":\"March\u00e9s \/ \u00e9v\u00e9nements locaux\",\"value\":\"Markets on Tuesdays and Saturdays, nocturnal gourmet market on Monday evenings in summer, annual garage sale on June 15, weekly flea markets in July-August.\"},{\"@type\":\"PropertyValue\",\"name\":\"Restaurants \/ sp\u00e9cialit\u00e9s\",\"value\":\"Le Jean Bistrot, Chez Claudette, local specialties of P\u00e9rigord.\"},{\"@type\":\"PropertyValue\",\"name\":\"Commentaires ou tips perso\",\"value\":\"Lively village with regular markets and events, friendly atmosphere in summer evenings, ideal for cycling visits.\"},{\"@type\":\"PropertyValue\",\"name\":\"Adresse compl\u00e8te\",\"value\":\"Beaumont-du-P\u00e9rigord, Dordogne, France\"}]}}]},{\"@type\":\"ItemList\",\"name\":\"Activit\u00e9s aux alentours \",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"item\":{\"@type\":\"Thing\",\"name\":\"Visit of medieval bastides and villages\",\"description\":\"Discover medieval bastides and villages such as Beaumont du P\u00e9rigord, Issigeac, and Monpazier, rich in history and architecture, with market and seasonal events.\",\"image\":\"https:\/\/elaia-public.s3.fr-par.scw.cloud\/metadata_images\/image_6a5dec0a03711.png\",\"additionalProperty\":[{\"@type\":\"PropertyValue\",\"name\":\"Nom de l'activit\u00e9\",\"value\":\"Visit of medieval bastides and villages\"},{\"@type\":\"PropertyValue\",\"name\":\"Distance depuis le camping (km)\",\"value\":\"10-30\"},{\"@type\":\"PropertyValue\",\"name\":\"Temps de route depuis le camping (min.)\",\"value\":\"15-30\"},{\"@type\":\"PropertyValue\",\"name\":\"Type d'activit\u00e9 (nature, sport, culture, etc.)\",\"value\":\"Culture, heritage\"},{\"@type\":\"PropertyValue\",\"name\":\"Cat\u00e9gorie de public (Famille, Enfants, Senior, Ado, etc.)\",\"value\":\"Family, Senior, Adults\"},{\"@type\":\"PropertyValue\",\"name\":\"R\u00e9servation ? (oui \/ non)\",\"value\":\"non\"},{\"@type\":\"PropertyValue\",\"name\":\"Horaires\",\"value\":\"Variable depending on sites, usually all day\"},{\"@type\":\"PropertyValue\",\"name\":\"Informations et contact\",\"value\":\"Local tourist office or campsite reception\"},{\"@type\":\"PropertyValue\",\"name\":\"Langues parl\u00e9es\",\"value\":\"French, English\"},{\"@type\":\"PropertyValue\",\"name\":\"Animaux accept\u00e9 (oui \/ non)\",\"value\":\"oui\"}]}},{\"@type\":\"ListItem\",\"position\":2,\"item\":{\"@type\":\"Thing\",\"name\":\"Accrobranche \u00e0 Vergtaventures\",\"description\":\"Passez une journ\u00e9e dans un parc accrobranche \u00e0 Vergtaventures, avec diff\u00e9rents parcours dans les arbres adapt\u00e9s \u00e0 tous les \u00e2ges et niveaux.\",\"image\":\"https:\/\/elaia-public.s3.fr-par.scw.cloud\/metadata_images\/image_6a5debae7f2f3.png\",\"additionalProperty\":[{\"@type\":\"PropertyValue\",\"name\":\"Nom de l'activit\u00e9\",\"value\":\"Accrobranche \u00e0 Vergtaventures\"},{\"@type\":\"PropertyValue\",\"name\":\"Distance depuis le camping (km)\",\"value\":\"25\"},{\"@type\":\"PropertyValue\",\"name\":\"Temps de route depuis le camping (min.)\",\"value\":\"30\"},{\"@type\":\"PropertyValue\",\"name\":\"Type d'activit\u00e9 (nature, sport, culture, etc.)\",\"value\":\"Sport, Nature\"},{\"@type\":\"PropertyValue\",\"name\":\"Cat\u00e9gorie de public (Famille, Enfants, Senior, Ado, etc.)\",\"value\":\"Famille, Enfants, Ado\"},{\"@type\":\"PropertyValue\",\"name\":\"R\u00e9servation ? (oui \/ non)\",\"value\":\"oui\"},{\"@type\":\"PropertyValue\",\"name\":\"Horaires\",\"value\":\"9h00 - 18h00\"},{\"@type\":\"PropertyValue\",\"name\":\"Informations et contact\",\"value\":\"R\u00e9servation via le site du parc ou \u00e0 l'accueil du camping\"},{\"@type\":\"PropertyValue\",\"name\":\"Langues parl\u00e9es\",\"value\":\"Fran\u00e7ais\"},{\"@type\":\"PropertyValue\",\"name\":\"Animaux accept\u00e9 (oui \/ non)\",\"value\":\"non\"}]}},{\"@type\":\"ListItem\",\"position\":3,\"item\":{\"@type\":\"Thing\",\"name\":\"Surf at Soulac-sur-Mer\",\"description\":\"Practice surfing on the beaches of Soulac-sur-Mer, known for their good waves. Several schools are available to learn or improve.\",\"image\":\"https:\/\/elaia-public.s3.fr-par.scw.cloud\/metadata_images\/image_6a5de9fa4a7c4.png\",\"additionalProperty\":[{\"@type\":\"PropertyValue\",\"name\":\"Nom de l'activit\u00e9\",\"value\":\"Surf at Soulac-sur-Mer\"},{\"@type\":\"PropertyValue\",\"name\":\"Distance depuis le camping (km)\",\"value\":\"75\"},{\"@type\":\"PropertyValue\",\"name\":\"Temps de route depuis le camping (min.)\",\"value\":\"60\"},{\"@type\":\"PropertyValue\",\"name\":\"Type d'activit\u00e9 (nature, sport, culture, etc.)\",\"value\":\"Water sport\"},{\"@type\":\"PropertyValue\",\"name\":\"Cat\u00e9gorie de public (Famille, Enfants, Senior, Ado, etc.)\",\"value\":\"Teen, Adults\"},{\"@type\":\"PropertyValue\",\"name\":\"R\u00e9servation ? (oui \/ non)\",\"value\":\"oui\"},{\"@type\":\"PropertyValue\",\"name\":\"Horaires\",\"value\":\"Variable depending on schools, usually 10:00 - 18:00\"},{\"@type\":\"PropertyValue\",\"name\":\"Informations et contact\",\"value\":\"Surf schools in Soulac-sur-Mer, reservations recommended\"},{\"@type\":\"PropertyValue\",\"name\":\"Langues parl\u00e9es\",\"value\":\"French, English\"},{\"@type\":\"PropertyValue\",\"name\":\"Animaux accept\u00e9 (oui \/ non)\",\"value\":\"non\"}]}},{\"@type\":\"ListItem\",\"position\":4,\"item\":{\"@type\":\"Thing\",\"name\":\"Hiking\",\"description\":\"Enjoy numerous hiking trails suitable for all levels around the campsite. These paths allow you to discover the surrounding nature, local wildlife, and remarkable landscapes, perfect for families as well as more experienced enthusiasts.\",\"image\":\"https:\/\/elaia-public.s3.fr-par.scw.cloud\/metadata_images\/image_6a5deb523ba44.jpg\",\"additionalProperty\":[{\"@type\":\"PropertyValue\",\"name\":\"Nom de l'activit\u00e9\",\"value\":\"Hiking\"},{\"@type\":\"PropertyValue\",\"name\":\"Distance depuis le camping (km)\",\"value\":\"0-10\"},{\"@type\":\"PropertyValue\",\"name\":\"Temps de route depuis le camping (min.)\",\"value\":\"0-15\"},{\"@type\":\"PropertyValue\",\"name\":\"Type d'activit\u00e9 (nature, sport, culture, etc.)\",\"value\":\"Nature\"},{\"@type\":\"PropertyValue\",\"name\":\"Cat\u00e9gorie de public (Famille, Enfants, Senior, Ado, etc.)\",\"value\":\"Family, Children, Senior, Teen\"},{\"@type\":\"PropertyValue\",\"name\":\"R\u00e9servation ? (oui \/ non)\",\"value\":\"non\"},{\"@type\":\"PropertyValue\",\"name\":\"Horaires\",\"value\":\"All day, at sunrise and sunset\"},{\"@type\":\"PropertyValue\",\"name\":\"Informations et contact\",\"value\":\"Information at the campsite reception\"},{\"@type\":\"PropertyValue\",\"name\":\"Langues parl\u00e9es\",\"value\":\"French, English\"},{\"@type\":\"PropertyValue\",\"name\":\"Animaux accept\u00e9 (oui \/ non)\",\"value\":\"oui\"}]}},{\"@type\":\"ListItem\",\"position\":5,\"item\":{\"@type\":\"Thing\",\"name\":\"River Kayaking\",\"description\":\"Discover the region from the water by canoe or kayak on the Dordogne or V\u00e9z\u00e8re. These river descents are accessible to beginners and offer stunning natural scenery.\",\"image\":\"https:\/\/elaia-public.s3.fr-par.scw.cloud\/metadata_images\/image_6a5deaba50022.png\",\"additionalProperty\":[{\"@type\":\"PropertyValue\",\"name\":\"Nom de l'activit\u00e9\",\"value\":\"River Kayaking\"},{\"@type\":\"PropertyValue\",\"name\":\"Distance depuis le camping (km)\",\"value\":\"15\"},{\"@type\":\"PropertyValue\",\"name\":\"Temps de route depuis le camping (min.)\",\"value\":\"20\"},{\"@type\":\"PropertyValue\",\"name\":\"Type d'activit\u00e9 (nature, sport, culture, etc.)\",\"value\":\"Water sport\"},{\"@type\":\"PropertyValue\",\"name\":\"Cat\u00e9gorie de public (Famille, Enfants, Senior, Ado, etc.)\",\"value\":\"Family, Teen, Adults\"},{\"@type\":\"PropertyValue\",\"name\":\"R\u00e9servation ? (oui \/ non)\",\"value\":\"oui\"},{\"@type\":\"PropertyValue\",\"name\":\"Horaires\",\"value\":\"9:00 AM - 6:00 PM off-season, 8:00 AM - 8:00 PM in summer\"},{\"@type\":\"PropertyValue\",\"name\":\"Informations et contact\",\"value\":\"Rental available through local partners, information at the camping reception\"},{\"@type\":\"PropertyValue\",\"name\":\"Langues parl\u00e9es\",\"value\":\"French, English\"},{\"@type\":\"PropertyValue\",\"name\":\"Animaux accept\u00e9 (oui \/ non)\",\"value\":\"non\"}]}}]},{\"@type\":\"ItemList\",\"name\":\"Evenements aux alentours\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"item\":{\"@type\":\"Thing\",\"name\":\"Open-air Cinema in Dordogne\",\"description\":\"Open-air screenings in several villages of P\u00e9rigord, offering a summer cinematic experience under the stars.\",\"image\":\"https:\/\/elaia-public.s3.fr-par.scw.cloud\/metadata_images\/image_6a5df2f024631.jpg\",\"geo\":{\"@type\":\"GeoCoordinates\",\"latitude\":44.8,\"longitude\":0.9},\"additionalProperty\":[{\"@type\":\"PropertyValue\",\"name\":\"Nom\",\"value\":\"Open-air Cinema in Dordogne\"},{\"@type\":\"PropertyValue\",\"name\":\"Cat\u00e9gorie d'\u00e9v\u00e9nement : (Musique, exposition, festival, foire, brocante, march\u00e9, etc.)\",\"value\":\"Open-air Screening \/ Cinema in the open air\"},{\"@type\":\"PropertyValue\",\"name\":\"Public cible : (Famille, enfants, adultes, seniors, adolescents, etc.)\",\"value\":\"Family, adults, children\"},{\"@type\":\"PropertyValue\",\"name\":\"R\u00e9servation (oui\/non)\",\"value\":\"Non\"},{\"@type\":\"PropertyValue\",\"name\":\"Horaires\",\"value\":\"June 20 \u2013 August 29, 2025\"},{\"@type\":\"PropertyValue\",\"name\":\"Informations pratiques et contact\",\"value\":\"Information from Dordogne P\u00e9rigord Tourism\"},{\"@type\":\"PropertyValue\",\"name\":\"Distance depuis l'h\u00f4tel : (en km)\",\"value\":\"10 to 50 depending on the village\"},{\"@type\":\"PropertyValue\",\"name\":\"Temps de route depuis l'h\u00f4tel (en min)\",\"value\":\"15 to 50\"},{\"@type\":\"PropertyValue\",\"name\":\"Informations et contact\",\"value\":\"Dordogne P\u00e9rigord Tourism, phone: +33 5 53 53 32 10\"},{\"@type\":\"PropertyValue\",\"name\":\"Langues parl\u00e9es\",\"value\":\"French\"},{\"@type\":\"PropertyValue\",\"name\":\"Animaux : (Accept\u00e9s ou non)\",\"value\":\"Not accepted\"}]}},{\"@type\":\"ListItem\",\"position\":2,\"item\":{\"@type\":\"Thing\",\"name\":\"Brikabrak - Circus \\u0026 street arts festival at Bugue\",\"description\":\"Festival with street performances, circus shows, and live art in a friendly atmosphere.\",\"image\":\"https:\/\/elaia-public.s3.fr-par.scw.cloud\/metadata_images\/image_6a5df2476f340.jpg\",\"geo\":{\"@type\":\"GeoCoordinates\",\"latitude\":44.9276,\"longitude\":0.9623},\"additionalProperty\":[{\"@type\":\"PropertyValue\",\"name\":\"Nom\",\"value\":\"Brikabrak - Circus \\u0026 street arts festival at Bugue\"},{\"@type\":\"PropertyValue\",\"name\":\"Cat\u00e9gorie d'\u00e9v\u00e9nement : (Musique, exposition, festival, foire, brocante, march\u00e9, etc.)\",\"value\":\"Festival\"},{\"@type\":\"PropertyValue\",\"name\":\"Public cible : (Famille, enfants, adultes, seniors, adolescents, etc.)\",\"value\":\"Family, adults, children\"},{\"@type\":\"PropertyValue\",\"name\":\"R\u00e9servation (oui\/non)\",\"value\":\"Non\"},{\"@type\":\"PropertyValue\",\"name\":\"Horaires\",\"value\":\"May 4 to 11, 2025\"},{\"@type\":\"PropertyValue\",\"name\":\"Informations pratiques et contact\",\"value\":\"Inquire at the Bugue tourism office or at the camping reception\"},{\"@type\":\"PropertyValue\",\"name\":\"Distance depuis l'h\u00f4tel : (en km)\",\"value\":\"25\"},{\"@type\":\"PropertyValue\",\"name\":\"Temps de route depuis l'h\u00f4tel (en min)\",\"value\":\"30\"},{\"@type\":\"PropertyValue\",\"name\":\"Informations et contact\",\"value\":\"Bugue Tourist Office, phone: +33 5 53 31 49 40\"},{\"@type\":\"PropertyValue\",\"name\":\"Langues parl\u00e9es\",\"value\":\"French\"},{\"@type\":\"PropertyValue\",\"name\":\"Animaux : (Accept\u00e9s ou non)\",\"value\":\"Not accepted\"}]}},{\"@type\":\"ListItem\",\"position\":3,\"item\":{\"@type\":\"Thing\",\"name\":\"P\u00e9rigord Pourpre Festival in Monpazier\",\"description\":\"Summer musical concert in the fortified town, a lively and friendly musical atmosphere for a summer evening.\",\"image\":\"https:\/\/elaia-public.s3.fr-par.scw.cloud\/metadata_images\/image_6a5df83a63f9a.png\",\"geo\":{\"@type\":\"GeoCoordinates\",\"latitude\":44.8218,\"longitude\":0.9123},\"additionalProperty\":[{\"@type\":\"PropertyValue\",\"name\":\"Nom\",\"value\":\"P\u00e9rigord Pourpre Festival in Monpazier\"},{\"@type\":\"PropertyValue\",\"name\":\"Cat\u00e9gorie d'\u00e9v\u00e9nement : (Musique, exposition, festival, foire, brocante, march\u00e9, etc.)\",\"value\":\"Music Festival\"},{\"@type\":\"PropertyValue\",\"name\":\"Public cible : (Famille, enfants, adultes, seniors, adolescents, etc.)\",\"value\":\"Family, adults\"},{\"@type\":\"PropertyValue\",\"name\":\"R\u00e9servation (oui\/non)\",\"value\":\"Non\"},{\"@type\":\"PropertyValue\",\"name\":\"Horaires\",\"value\":\"August 4, 2025\"},{\"@type\":\"PropertyValue\",\"name\":\"Informations pratiques et contact\",\"value\":\"Inquire with the Monpazier tourist office\"},{\"@type\":\"PropertyValue\",\"name\":\"Distance depuis l'h\u00f4tel : (en km)\",\"value\":\"18\"},{\"@type\":\"PropertyValue\",\"name\":\"Temps de route depuis l'h\u00f4tel (en min)\",\"value\":\"20\"},{\"@type\":\"PropertyValue\",\"name\":\"Informations et contact\",\"value\":\"Monpazier Tourist Office, phone: +33 5 53 27 97 63\"},{\"@type\":\"PropertyValue\",\"name\":\"Langues parl\u00e9es\",\"value\":\"French\"},{\"@type\":\"PropertyValue\",\"name\":\"Animaux : (Accept\u00e9s ou non)\",\"value\":\"Not allowed\"}]}},{\"@type\":\"ListItem\",\"position\":4,\"item\":{\"@type\":\"Thing\",\"name\":\"Macadam Jazz at P\u00e9rigueux\",\"description\":\"Free jazz festival with concerts in the streets and squares of P\u00e9rigueux during summer.\",\"image\":\"https:\/\/elaia-public.s3.fr-par.scw.cloud\/metadata_images\/image_6a5df2739c028.jpg\",\"geo\":{\"@type\":\"GeoCoordinates\",\"latitude\":45.1865,\"longitude\":0.7226},\"additionalProperty\":[{\"@type\":\"PropertyValue\",\"name\":\"Nom\",\"value\":\"Macadam Jazz at P\u00e9rigueux\"},{\"@type\":\"PropertyValue\",\"name\":\"Cat\u00e9gorie d'\u00e9v\u00e9nement : (Musique, exposition, festival, foire, brocante, march\u00e9, etc.)\",\"value\":\"Music festival\"},{\"@type\":\"PropertyValue\",\"name\":\"Public cible : (Famille, enfants, adultes, seniors, adolescents, etc.)\",\"value\":\"Family, adults, teenagers\"},{\"@type\":\"PropertyValue\",\"name\":\"R\u00e9servation (oui\/non)\",\"value\":\"Non\"},{\"@type\":\"PropertyValue\",\"name\":\"Horaires\",\"value\":\"July - August\"},{\"@type\":\"PropertyValue\",\"name\":\"Informations pratiques et contact\",\"value\":\"P\u00e9rigueux Tourist Office, contact at the camping reception\"},{\"@type\":\"PropertyValue\",\"name\":\"Distance depuis l'h\u00f4tel : (en km)\",\"value\":\"40\"},{\"@type\":\"PropertyValue\",\"name\":\"Temps de route depuis l'h\u00f4tel (en min)\",\"value\":\"45\"},{\"@type\":\"PropertyValue\",\"name\":\"Informations et contact\",\"value\":\"P\u00e9rigueux Tourist Office, +33 5 53 53 08 00\"},{\"@type\":\"PropertyValue\",\"name\":\"Langues parl\u00e9es\",\"value\":\"French\"},{\"@type\":\"PropertyValue\",\"name\":\"Animaux : (Accept\u00e9s ou non)\",\"value\":\"Not allowed\"}]}},{\"@type\":\"ListItem\",\"position\":5,\"item\":{\"@type\":\"Thing\",\"name\":\"European Heritage Days\",\"description\":\"Free or guided visits to historical monuments across the department, showcasing the local cultural heritage.\",\"image\":\"https:\/\/elaia-public.s3.fr-par.scw.cloud\/metadata_images\/image_6a5df6e074a1c.jpg\",\"additionalProperty\":[{\"@type\":\"PropertyValue\",\"name\":\"Nom\",\"value\":\"European Heritage Days\"},{\"@type\":\"PropertyValue\",\"name\":\"Cat\u00e9gorie d'\u00e9v\u00e9nement : (Musique, exposition, festival, foire, brocante, march\u00e9, etc.)\",\"value\":\"Heritage \/ Guided tours\"},{\"@type\":\"PropertyValue\",\"name\":\"Public cible : (Famille, enfants, adultes, seniors, adolescents, etc.)\",\"value\":\"Family, adults, seniors\"},{\"@type\":\"PropertyValue\",\"name\":\"R\u00e9servation (oui\/non)\",\"value\":\"Non\"},{\"@type\":\"PropertyValue\",\"name\":\"Horaires\",\"value\":\"September 20 and 21, 2025\"},{\"@type\":\"PropertyValue\",\"name\":\"Informations pratiques et contact\",\"value\":\"Campaign in P\u00e9rigord, contact at the camping reception\"},{\"@type\":\"PropertyValue\",\"name\":\"Distance depuis l'h\u00f4tel : (en km)\",\"value\":\"10 to 50 km depending on sites\"},{\"@type\":\"PropertyValue\",\"name\":\"Temps de route depuis l'h\u00f4tel (en min)\",\"value\":\"15 to 50\"},{\"@type\":\"PropertyValue\",\"name\":\"Informations et contact\",\"value\":\"Contact via Dordogne tourist office\"},{\"@type\":\"PropertyValue\",\"name\":\"Langues parl\u00e9es\",\"value\":\"French\"},{\"@type\":\"PropertyValue\",\"name\":\"Animaux : (Accept\u00e9s ou non)\",\"value\":\"Not accepted\"}]}},{\"@type\":\"ListItem\",\"position\":6,\"item\":{\"@type\":\"Thing\",\"name\":\"Bastides en F\u00eate at Beaumont du P\u00e9rigord\",\"description\":\"Large medieval gathering with craft markets, performances, and historical animations over a weekend.\",\"image\":\"https:\/\/elaia-public.s3.fr-par.scw.cloud\/metadata_images\/image_6a5df708543d9.png\",\"geo\":{\"@type\":\"GeoCoordinates\",\"latitude\":44.8462,\"longitude\":0.9452},\"additionalProperty\":[{\"@type\":\"PropertyValue\",\"name\":\"Nom\",\"value\":\"Bastides en F\u00eate at Beaumont du P\u00e9rigord\"},{\"@type\":\"PropertyValue\",\"name\":\"Cat\u00e9gorie d'\u00e9v\u00e9nement : (Musique, exposition, festival, foire, brocante, march\u00e9, etc.)\",\"value\":\"Medieval festival \/ Craft market\"},{\"@type\":\"PropertyValue\",\"name\":\"Public cible : (Famille, enfants, adultes, seniors, adolescents, etc.)\",\"value\":\"Family, adults, teenagers\"},{\"@type\":\"PropertyValue\",\"name\":\"R\u00e9servation (oui\/non)\",\"value\":\"Non\"},{\"@type\":\"PropertyValue\",\"name\":\"Horaires\",\"value\":\"October 25 and 26, 2025\"},{\"@type\":\"PropertyValue\",\"name\":\"Informations pratiques et contact\",\"value\":\"Inquire at the camping reception or tourist office\"},{\"@type\":\"PropertyValue\",\"name\":\"Distance depuis l'h\u00f4tel : (en km)\",\"value\":\"12\"},{\"@type\":\"PropertyValue\",\"name\":\"Temps de route depuis l'h\u00f4tel (en min)\",\"value\":\"15\"},{\"@type\":\"PropertyValue\",\"name\":\"Informations et contact\",\"value\":\"Aquitaine Online, Beaumont du P\u00e9rigord, +33 5 53 27 88 88\"},{\"@type\":\"PropertyValue\",\"name\":\"Langues parl\u00e9es\",\"value\":\"French\"},{\"@type\":\"PropertyValue\",\"name\":\"Animaux : (Accept\u00e9s ou non)\",\"value\":\"Not accepted\"}]}},{\"@type\":\"ListItem\",\"position\":7,\"item\":{\"@type\":\"Thing\",\"name\":\"Musique en P\u00e9rigord \/ Summer music in Bergerac\",\"description\":\"Open-air concerts and music evenings throughout the Dordogne department in June, July, and August.\",\"image\":\"https:\/\/elaia-public.s3.fr-par.scw.cloud\/metadata_images\/image_6a5df2ac40d54.png\",\"geo\":{\"@type\":\"GeoCoordinates\",\"latitude\":44.8491,\"longitude\":0.487},\"additionalProperty\":[{\"@type\":\"PropertyValue\",\"name\":\"Nom\",\"value\":\"Musique en P\u00e9rigord \/ Summer music in Bergerac\"},{\"@type\":\"PropertyValue\",\"name\":\"Cat\u00e9gorie d'\u00e9v\u00e9nement : (Musique, exposition, festival, foire, brocante, march\u00e9, etc.)\",\"value\":\"Music festival\"},{\"@type\":\"PropertyValue\",\"name\":\"Public cible : (Famille, enfants, adultes, seniors, adolescents, etc.)\",\"value\":\"Family, adults\"},{\"@type\":\"PropertyValue\",\"name\":\"R\u00e9servation (oui\/non)\",\"value\":\"Non\"},{\"@type\":\"PropertyValue\",\"name\":\"Horaires\",\"value\":\"June to August\"},{\"@type\":\"PropertyValue\",\"name\":\"Informations pratiques et contact\",\"value\":\"Inquire at the Bergerac tourist office\"},{\"@type\":\"PropertyValue\",\"name\":\"Distance depuis l'h\u00f4tel : (en km)\",\"value\":\"55\"},{\"@type\":\"PropertyValue\",\"name\":\"Temps de route depuis l'h\u00f4tel (en min)\",\"value\":\"55\"},{\"@type\":\"PropertyValue\",\"name\":\"Informations et contact\",\"value\":\"Bergerac Tourist Office, phone: +33 5 53 57 01 97\"},{\"@type\":\"PropertyValue\",\"name\":\"Langues parl\u00e9es\",\"value\":\"French\"},{\"@type\":\"PropertyValue\",\"name\":\"Animaux : (Accept\u00e9s ou non)\",\"value\":\"Not allowed\"}]}},{\"@type\":\"ListItem\",\"position\":8,\"item\":{\"@type\":\"Thing\",\"name\":\"Local Theater Festival in Villefranche en P\u00e9rigord\",\"description\":\"This theater festival runs from April to the end of May with various plays and activities in nearby villages. It's a great opportunity to discover local culture and regional talents in a friendly atmosphere.\",\"image\":\"https:\/\/elaia-public.s3.fr-par.scw.cloud\/metadata_images\/image_6a5df18b7f04a.png\",\"geo\":{\"@type\":\"GeoCoordinates\",\"latitude\":44.853,\"longitude\":0.913},\"additionalProperty\":[{\"@type\":\"PropertyValue\",\"name\":\"Nom\",\"value\":\"Local Theater Festival in Villefranche en P\u00e9rigord\"},{\"@type\":\"PropertyValue\",\"name\":\"Cat\u00e9gorie d'\u00e9v\u00e9nement : (Musique, exposition, festival, foire, brocante, march\u00e9, etc.)\",\"value\":\"Festival\"},{\"@type\":\"PropertyValue\",\"name\":\"Public cible : (Famille, enfants, adultes, seniors, adolescents, etc.)\",\"value\":\"Family, adults, teenagers\"},{\"@type\":\"PropertyValue\",\"name\":\"R\u00e9servation (oui\/non)\",\"value\":\"non\"},{\"@type\":\"PropertyValue\",\"name\":\"Horaires\",\"value\":\"Variable depending on performances, usually in the evening\"},{\"@type\":\"PropertyValue\",\"name\":\"Informations pratiques et contact\",\"value\":\"Information at the local tourist office or at the campsite\"},{\"@type\":\"PropertyValue\",\"name\":\"Distance depuis l'h\u00f4tel : (en km)\",\"value\":\"15\"},{\"@type\":\"PropertyValue\",\"name\":\"Temps de route depuis l'h\u00f4tel (en min)\",\"value\":\"20\"},{\"@type\":\"PropertyValue\",\"name\":\"Informations et contact\",\"value\":\"Tourist Office of Villefranche en P\u00e9rigord, phone: +33 5 53 58 57 60\"},{\"@type\":\"PropertyValue\",\"name\":\"Langues parl\u00e9es\",\"value\":\"French\"},{\"@type\":\"PropertyValue\",\"name\":\"Animaux : (Accept\u00e9s ou non)\",\"value\":\"non\"}]}},{\"@type\":\"ListItem\",\"position\":9,\"item\":{\"@type\":\"Thing\",\"name\":\"Night Gourmet Market in Beaumont du P\u00e9rigord\",\"description\":\"Night gourmet market with local products, shared meals at the table, and a friendly musical atmosphere.\",\"image\":\"https:\/\/elaia-public.s3.fr-par.scw.cloud\/metadata_images\/image_6a5df7d70a76c.png\",\"geo\":{\"@type\":\"GeoCoordinates\",\"latitude\":44.8462,\"longitude\":0.9452},\"additionalProperty\":[{\"@type\":\"PropertyValue\",\"name\":\"Nom\",\"value\":\"Night Gourmet Market in Beaumont du P\u00e9rigord\"},{\"@type\":\"PropertyValue\",\"name\":\"Cat\u00e9gorie d'\u00e9v\u00e9nement : (Musique, exposition, festival, foire, brocante, march\u00e9, etc.)\",\"value\":\"Gourmet market\"},{\"@type\":\"PropertyValue\",\"name\":\"Public cible : (Famille, enfants, adultes, seniors, adolescents, etc.)\",\"value\":\"Family, Adults\"},{\"@type\":\"PropertyValue\",\"name\":\"R\u00e9servation (oui\/non)\",\"value\":\"Non\"},{\"@type\":\"PropertyValue\",\"name\":\"Horaires\",\"value\":\"Every summer Monday, from June to September, from 6:30 PM \/ 7:00 PM\"},{\"@type\":\"PropertyValue\",\"name\":\"Informations pratiques et contact\",\"value\":\"Place Jean Moulin, Beaumont du P\u00e9rigord, contact at the camping reception\"},{\"@type\":\"PropertyValue\",\"name\":\"Distance depuis l'h\u00f4tel : (en km)\",\"value\":\"12\"},{\"@type\":\"PropertyValue\",\"name\":\"Temps de route depuis l'h\u00f4tel (en min)\",\"value\":\"15\"},{\"@type\":\"PropertyValue\",\"name\":\"Informations et contact\",\"value\":\"Tourist Office Beaumont du P\u00e9rigord, phone: +33 5 53 27 88 88\"},{\"@type\":\"PropertyValue\",\"name\":\"Langues parl\u00e9es\",\"value\":\"French\"},{\"@type\":\"PropertyValue\",\"name\":\"Animaux : (Accept\u00e9s ou non)\",\"value\":\"Not accepted\"}]}}]}]}<\/script>\n<style>\n  .mv-wrap {\n    --mv-accent: #2e5e45;\n    --mv-accent-soft: #2e5e451a;\n    --mv-cream: #faf7f2;\n    --mv-line: #ebe5da;\n    --mv-muted: #6b6559;\n    --mv-header: 0px;\n    font-family: 'Inter', -apple-system, sans-serif;\n    color: #1f2a24;\n    max-width: 1440px;\n    margin: 0 auto;\n    padding: 0 24px 56px;\n    box-sizing: border-box;\n  }\n\n  .mv-wrap *,\n  .mv-wrap *::before,\n  .mv-wrap *::after,\n  .mv-modal-overlay *,\n  .mv-modal-overlay *::before,\n  .mv-modal-overlay *::after {\n    box-sizing: border-box;\n  }\n\n  .mv-wrap button,\n  .mv-wrap input,\n  .mv-modal-overlay button {\n    font-family: 'Inter', -apple-system, sans-serif;\n  }\n\n  .mv-icon {\n    display: inline-flex;\n    width: 1em;\n    height: 1em;\n    flex-shrink: 0;\n  }\n\n  .mv-icon svg {\n    width: 100%;\n    height: 100%;\n  }\n\n  \/* \u2500\u2500\u2500 Bandeau \u2500\u2500\u2500 *\/\n  .mv-hero {\n    position: relative;\n    overflow: hidden;\n    margin: 16px 0 24px;\n    padding: 56px 48px;\n    border-radius: 24px;\n    background: var(--mv-cream);\n    background-size: cover;\n    background-position: center right;\n  }\n\n  .mv-hero::before {\n    content: '';\n    position: absolute;\n    inset: 0;\n    background: linear-gradient(90deg, rgba(250, 247, 242, 0.97) 0%, rgba(250, 247, 242, 0.88) 38%, rgba(250, 247, 242, 0.2) 70%, rgba(250, 247, 242, 0) 100%);\n  }\n\n  .mv-hero-inner {\n    position: relative;\n    max-width: 560px;\n  }\n\n  .mv-hero-title {\n    margin: 0 0 12px !important;\n    font-size: clamp(30px, 4vw, 48px) !important;\n    line-height: 1.1 !important;\n    color: #1c2b22 !important;\n  }\n\n  .mv-hero-text {\n    margin: 0 0 20px !important;\n    font-size: 17px;\n    line-height: 1.55;\n    color: #3b4a40;\n  }\n\n  .mv-hero-chip {\n    display: inline-flex;\n    align-items: center;\n    gap: 10px;\n    padding: 9px 16px;\n    border-radius: 999px;\n    background: #fff;\n    box-shadow: 0 2px 8px rgba(31, 42, 36, 0.1);\n    font-size: 14px;\n    color: #3b4a40;\n  }\n\n  .mv-hero-chip strong {\n    color: #1c2b22;\n  }\n\n  \/* \u2500\u2500\u2500 Recherche + distance \u2500\u2500\u2500 *\/\n  .mv-controls {\n    display: flex;\n    flex-wrap: wrap;\n    gap: 12px;\n    margin-bottom: 14px;\n  }\n\n  .mv-search {\n    position: relative;\n    flex: 1 1 360px;\n  }\n\n  .mv-search .mv-icon {\n    position: absolute;\n    left: 18px;\n    top: 50%;\n    transform: translateY(-50%);\n    font-size: 18px;\n    color: var(--mv-muted);\n  }\n\n  .mv-search input {\n    width: 100% !important;\n    height: 50px;\n    padding: 0 18px 0 48px !important;\n    border: 1px solid var(--mv-line) !important;\n    border-radius: 999px !important;\n    background: #fff !important;\n    font-size: 15px !important;\n    color: #1f2a24;\n    outline: none;\n    box-shadow: 0 1px 3px rgba(31, 42, 36, 0.05);\n  }\n\n  .mv-search input:focus {\n    border-color: var(--mv-accent) !important;\n    box-shadow: 0 0 0 3px var(--mv-accent-soft) !important;\n  }\n\n  .mv-seg {\n    display: inline-flex;\n    padding: 4px;\n    gap: 2px;\n    border: 1px solid var(--mv-line);\n    border-radius: 999px;\n    background: #fff;\n  }\n\n  .mv-seg button {\n    padding: 0 18px;\n    height: 40px;\n    border: 0;\n    border-radius: 999px;\n    background: transparent;\n    color: #3b4a40;\n    font-size: 14px;\n    font-weight: 600;\n    cursor: pointer;\n    white-space: nowrap;\n    transition: all 0.15s;\n  }\n\n  .mv-seg button:hover {\n    background: var(--mv-cream);\n  }\n\n  .mv-seg button.is-active {\n    background: var(--mv-accent);\n    color: #fff;\n  }\n\n  \/* \u2500\u2500\u2500 Cat\u00e9gories \u2500\u2500\u2500 *\/\n  \/* Cat\u00e9gories : une seule ligne qui d\u00e9file, fl\u00e8ches + fondu sur les bords *\/\n  .mv-cats-wrap {\n    position: relative;\n    margin-bottom: 18px;\n  }\n\n  .mv-cats {\n    display: flex;\n    flex-wrap: nowrap;\n    gap: 8px;\n    overflow-x: auto;\n    scroll-behavior: smooth;\n    scrollbar-width: none;\n    padding: 2px 0;\n  }\n\n  .mv-cats::-webkit-scrollbar {\n    display: none;\n  }\n\n  .mv-cat {\n    flex-shrink: 0;\n  }\n\n  .mv-cats-arrow {\n    position: absolute;\n    top: 0;\n    bottom: 0;\n    z-index: 1;\n    display: none;\n    align-items: center;\n    width: 64px;\n    padding: 0;\n    border: 0;\n    cursor: pointer;\n    font-size: 20px;\n    color: #1f2a24;\n  }\n\n  .mv-cats-arrow span {\n    display: inline-flex;\n    align-items: center;\n    justify-content: center;\n    width: 36px;\n    height: 36px;\n    border: 1px solid var(--mv-line);\n    border-radius: 50%;\n    background: #fff;\n    box-shadow: 0 2px 6px rgba(31, 42, 36, 0.12);\n  }\n\n  .mv-cats-arrow--left {\n    left: 0;\n    justify-content: flex-start;\n    background: linear-gradient(90deg, #fff 45%, rgba(255, 255, 255, 0));\n  }\n\n  .mv-cats-arrow--right {\n    right: 0;\n    justify-content: flex-end;\n    background: linear-gradient(270deg, #fff 45%, rgba(255, 255, 255, 0));\n  }\n\n  .mv-cats-wrap.can-left .mv-cats-arrow--left,\n  .mv-cats-wrap.can-right .mv-cats-arrow--right {\n    display: flex;\n  }\n\n  .mv-cat {\n    display: inline-flex;\n    align-items: center;\n    gap: 8px;\n    padding: 9px 16px;\n    border: 1px solid var(--mv-line);\n    border-radius: 999px;\n    background: #fff;\n    color: #2f3b33;\n    font-size: 14px;\n    font-weight: 500;\n    cursor: pointer;\n    transition: all 0.15s;\n  }\n\n  .mv-cat .mv-icon {\n    font-size: 17px;\n    color: var(--mv-cat);\n  }\n\n  .mv-cat:hover {\n    border-color: #d6cdbd;\n  }\n\n  .mv-cat.is-active {\n    background: var(--mv-accent);\n    border-color: var(--mv-accent);\n    color: #fff;\n  }\n\n  .mv-cat.is-active .mv-icon {\n    color: #fff;\n  }\n\n  \/* \u2500\u2500\u2500 Barre compteur + liste\/carte \u2500\u2500\u2500 *\/\n  .mv-bar {\n    display: flex;\n    align-items: center;\n    justify-content: space-between;\n    gap: 12px;\n    margin-bottom: 16px;\n  }\n\n  .mv-count {\n    margin: 0 !important;\n    font-size: 15px;\n    color: var(--mv-muted);\n  }\n\n  .mv-count strong {\n    color: #1f2a24;\n  }\n\n  \/* \u2500\u2500\u2500 Layout liste + carte \u2500\u2500\u2500 *\/\n  .mv-layout {\n    display: grid;\n    grid-template-columns: minmax(0, 1fr) minmax(340px, 38%);\n    gap: 24px;\n    align-items: start;\n  }\n\n  .mv-layout.is-list {\n    grid-template-columns: minmax(0, 1fr);\n  }\n\n  .mv-layout.is-list .mv-map-panel {\n    display: none;\n  }\n\n  .mv-grid {\n    display: grid;\n    grid-template-columns: repeat(auto-fill, minmax(250px, 1fr));\n    \/* dense : la fiche \u00ab \u00c0 la une \u00bb (2 colonnes) ne laisse pas de trou sur grand \u00e9cran *\/\n    grid-auto-flow: dense;\n    gap: 18px;\n  }\n\n  \/* Colonne carte (sticky) : carte carr\u00e9e + fiche du rep\u00e8re cliqu\u00e9 en dessous *\/\n  .mv-map-panel {\n    position: sticky;\n    top: calc(var(--mv-header) + 16px);\n    display: flex;\n    flex-direction: column;\n    gap: 12px;\n  }\n\n  .mv-map {\n    width: 100%;\n    aspect-ratio: 1 \/ 1;\n    max-height: max(300px, calc(100vh - var(--mv-header) - 290px));\n    \/* Certains th\u00e8mes rouvrent le d\u00e9bordement des cartes Leaflet : les tuiles\n       d\u00e9passaient alors de la page (camping de la Croze). On rogne quoi qu'il arrive. *\/\n    overflow: hidden !important;\n    contain: paint;\n    border: 1px solid var(--mv-line);\n    border-radius: 20px;\n    background: var(--mv-cream);\n  }\n\n  .mv-preview-hint {\n    display: flex;\n    align-items: center;\n    gap: 10px;\n    padding: 16px 18px;\n    border: 1px dashed #d6cdbd;\n    border-radius: 16px;\n    color: var(--mv-muted);\n    font-size: 14px;\n  }\n\n  .mv-preview-hint .mv-icon {\n    font-size: 20px;\n    color: var(--mv-accent);\n  }\n\n  \/* Fiche compacte (horizontale) sous la carte \u2014 s\u00e9lecteurs doubl\u00e9s pour\n     passer devant les r\u00e8gles .mv-card d\u00e9finies plus bas *\/\n  .mv-card.mv-card--mini {\n    flex-direction: row;\n    min-height: 0;\n    border-radius: 16px;\n  }\n\n  .mv-card.mv-card--mini:hover {\n    transform: none;\n  }\n\n  .mv-card.mv-card--mini .mv-card-media {\n    flex: 0 0 120px;\n    width: 120px;\n    aspect-ratio: auto;\n    min-height: 120px;\n  }\n\n  .mv-card.mv-card--mini .mv-card-noimg {\n    font-size: 28px;\n  }\n\n  .mv-card.mv-card--mini .mv-card-body {\n    gap: 4px;\n    min-width: 0;\n    padding: 10px 14px;\n  }\n\n  .mv-card.mv-card--mini .mv-card-title {\n    font-size: 16px !important;\n    -webkit-line-clamp: 1;\n  }\n\n  .mv-card.mv-card--mini .mv-meta {\n    font-size: 12px;\n  }\n\n  .mv-card.mv-card--mini .mv-card-desc {\n    font-size: 13px;\n    -webkit-line-clamp: 2;\n  }\n\n  .mv-card.mv-card--mini .mv-card-foot {\n    padding-top: 2px;\n  }\n\n  .mv-card.mv-card--mini .mv-discover {\n    padding: 5px 12px;\n    font-size: 13px;\n  }\n\n  .mv-card.mv-card--mini .mv-pill {\n    position: static;\n    align-self: flex-start;\n    padding: 2px 10px;\n    font-size: 11px;\n    box-shadow: none;\n  }\n\n  \/* \u2500\u2500\u2500 Carte (fiche) \u2500\u2500\u2500 *\/\n  \/* La liste change brutalement de hauteur au clic sur une cat\u00e9gorie :\n     l'ancrage de d\u00e9filement du navigateur \u00ab corrigeait \u00bb alors la position et\n     contrariait le d\u00e9filement vers les filtres. *\/\n  #mv-app {\n    overflow-anchor: none;\n  }\n\n  .mv-card {\n    position: relative;\n    display: flex;\n    flex-direction: column;\n    min-width: 0;\n    overflow: hidden;\n    border: 1px solid var(--mv-line);\n    border-radius: 18px;\n    background: #fff;\n    box-shadow: 0 1px 3px rgba(31, 42, 36, 0.05);\n    cursor: pointer;\n    transition: box-shadow 0.2s, transform 0.2s;\n  }\n\n  .mv-card:hover,\n  .mv-card.is-hover {\n    box-shadow: 0 12px 28px rgba(31, 42, 36, 0.12);\n    transform: translateY(-2px);\n  }\n\n  .mv-card-media {\n    position: relative;\n    \/* Hauteur fix\u00e9e par le format, jamais par la photo : sans flex-shrink ni\n       taille minimale de contenu, une photo en hauteur \u00e9tirait son cadre et\n       les cartes d'une m\u00eame rang\u00e9e n'avaient plus des images align\u00e9es. *\/\n    flex: 0 0 auto;\n    min-height: 0;\n    \/* Pas d'overflow: hidden ici : la pastille de cat\u00e9gorie est pos\u00e9e \u00e0 cheval\n       sur le bas de l'image. L'image, en absolu, ne d\u00e9borde pas de son cadre. *\/\n    aspect-ratio: 16 \/ 10;\n    background: var(--mv-cream);\n  }\n\n  .mv-card-media img {\n    position: absolute;\n    inset: 0;\n    display: block;\n    width: 100% !important;\n    max-width: none !important;\n    height: 100% !important;\n    object-fit: cover;\n  }\n\n  .mv-card-noimg {\n    display: flex;\n    align-items: center;\n    justify-content: center;\n    width: 100%;\n    height: 100%;\n    font-size: 42px;\n    color: var(--mv-cat);\n    background: color-mix(in srgb, var(--mv-cat) 10%, var(--mv-cream));\n  }\n\n  .mv-pill {\n    display: inline-flex;\n    align-items: center;\n    padding: 4px 12px;\n    border-radius: 999px;\n    background: #fff;\n    background: color-mix(in srgb, var(--mv-cat) 14%, #fff);\n    color: var(--mv-cat);\n    font-size: 12px;\n    font-weight: 600;\n    white-space: nowrap;\n  }\n\n  .mv-card-media .mv-pill {\n    position: absolute;\n    left: 12px;\n    bottom: -12px;\n    background: color-mix(in srgb, var(--mv-cat) 12%, #fff);\n    box-shadow: 0 2px 6px rgba(31, 42, 36, 0.12);\n  }\n\n  .mv-card-body {\n    display: flex;\n    flex: 1;\n    flex-direction: column;\n    gap: 7px;\n    padding: 22px 16px 16px;\n  }\n\n  .mv-card-title {\n    margin: 0 !important;\n    font-size: 18px !important;\n    line-height: 1.25 !important;\n    color: #1c2b22 !important;\n    display: -webkit-box;\n    -webkit-line-clamp: 2;\n    -webkit-box-orient: vertical;\n    overflow: hidden;\n  }\n\n  .mv-meta {\n    display: flex;\n    flex-wrap: wrap;\n    align-items: center;\n    gap: 6px 12px;\n    margin: 0 !important;\n    font-size: 13px;\n    color: var(--mv-muted);\n  }\n\n  .mv-meta span {\n    display: inline-flex;\n    align-items: center;\n    gap: 5px;\n  }\n\n  .mv-card-desc {\n    margin: 0 !important;\n    font-size: 14px;\n    line-height: 1.5;\n    color: #4b5850;\n    display: -webkit-box;\n    -webkit-line-clamp: 3;\n    -webkit-box-orient: vertical;\n    overflow: hidden;\n  }\n\n  .mv-tags {\n    display: flex;\n    flex-wrap: wrap;\n    gap: 6px;\n  }\n\n  .mv-tag {\n    padding: 3px 10px;\n    border-radius: 999px;\n    background: #f3efe8;\n    color: #4b5850;\n    font-size: 12px;\n    max-width: 100%;\n    overflow: hidden;\n    text-overflow: ellipsis;\n    white-space: nowrap;\n  }\n\n  .mv-card-foot {\n    display: flex;\n    justify-content: flex-end;\n    margin-top: auto;\n    padding-top: 6px;\n  }\n\n  .mv-discover {\n    display: inline-flex;\n    align-items: center;\n    gap: 6px;\n    padding: 8px 16px;\n    border: 0;\n    border-radius: 999px;\n    background: #f7ebe0;\n    color: #1c2b22;\n    font-size: 14px;\n    font-weight: 600;\n    cursor: pointer;\n    transition: background 0.15s;\n  }\n\n  .mv-card:hover .mv-discover {\n    background: #f1dcc9;\n  }\n\n  \/* Carte \u00ab \u00e0 la une \u00bb : grande, texte sur l'image *\/\n  .mv-card--featured {\n    grid-column: span 2;\n    min-height: 360px;\n  }\n\n  .mv-card--featured .mv-card-media {\n    position: absolute;\n    inset: 0;\n    aspect-ratio: auto;\n  }\n\n  .mv-card--featured .mv-card-media::after {\n    content: '';\n    position: absolute;\n    inset: 0;\n    background: linear-gradient(90deg, rgba(20, 24, 20, 0.72) 0%, rgba(20, 24, 20, 0.35) 55%, rgba(20, 24, 20, 0.05) 100%);\n  }\n\n  .mv-card--featured .mv-card-body {\n    position: relative;\n    justify-content: flex-end;\n    max-width: 480px;\n    padding: 28px;\n    color: #fff;\n  }\n\n  .mv-card--featured .mv-card-title {\n    font-size: 30px !important;\n    color: #fff !important;\n  }\n\n  .mv-card--featured .mv-card-desc,\n  .mv-card--featured .mv-meta {\n    color: rgba(255, 255, 255, 0.9);\n  }\n\n  .mv-card--featured .mv-card-foot {\n    justify-content: flex-start;\n    margin-top: 8px;\n  }\n\n  .mv-card--featured .mv-discover {\n    background: #fff;\n  }\n\n  .mv-flag {\n    align-self: flex-start;\n    display: inline-flex;\n    align-items: center;\n    gap: 6px;\n    margin-bottom: 6px;\n    padding: 6px 12px;\n    border-radius: 999px;\n    background: #c2410c;\n    color: #fff;\n    font-size: 12px;\n    font-weight: 700;\n    letter-spacing: 0.4px;\n    text-transform: uppercase;\n  }\n\n  \/* Pagination *\/\n  .mv-more {\n    display: flex;\n    flex-wrap: wrap;\n    justify-content: center;\n    align-items: center;\n    gap: 6px;\n    margin-top: 28px;\n  }\n\n  .mv-page {\n    min-width: 42px;\n    height: 42px;\n    padding: 0 12px;\n    border: 1px solid var(--mv-line);\n    border-radius: 999px;\n    background: #fff;\n    color: #2f3b33;\n    font-size: 14px;\n    font-weight: 600;\n    cursor: pointer;\n    transition: all 0.15s;\n  }\n\n  .mv-page:hover:not(:disabled):not([aria-current=\"page\"]) {\n    border-color: var(--mv-accent);\n    color: var(--mv-accent);\n  }\n\n  .mv-page[aria-current=\"page\"] {\n    background: var(--mv-accent);\n    border-color: var(--mv-accent);\n    color: #fff;\n    cursor: default;\n  }\n\n  .mv-page:disabled {\n    opacity: 0.4;\n    cursor: not-allowed;\n  }\n\n  .mv-page-gap {\n    padding: 0 4px;\n    color: var(--mv-muted);\n  }\n\n  \/* Bouton \u00ab Revenir \u00e0 la vue d'ensemble \u00bb (visible apr\u00e8s un zoom \/ d\u00e9placement) *\/\n  .mv-map {\n    position: relative;\n  }\n\n  \/* Pas de gros contour noir au clic sur la carte ; contour visible au clavier seulement *\/\n  .mv-map.leaflet-container:focus {\n    outline: none;\n  }\n\n  .mv-map.leaflet-container:focus-visible {\n    outline: 3px solid var(--mv-accent);\n    outline-offset: 2px;\n  }\n\n  .mv-reset {\n    position: absolute;\n    top: 12px;\n    left: 12px;\n    z-index: 500;\n    display: inline-flex;\n    align-items: center;\n    gap: 6px;\n    padding: 8px 14px;\n    border: 0;\n    border-radius: 999px;\n    background: #fff;\n    color: #1c2b22;\n    font-family: 'Inter', -apple-system, sans-serif;\n    font-size: 13px;\n    font-weight: 600;\n    box-shadow: 0 3px 10px rgba(0, 0, 0, 0.2);\n    cursor: pointer;\n  }\n\n  .mv-reset[hidden] {\n    display: none;\n  }\n\n  .mv-reset:hover {\n    background: var(--mv-accent);\n    color: #fff;\n  }\n\n  .mv-reset .mv-icon {\n    font-size: 15px;\n  }\n\n  \/* Rep\u00e8re de l'\u00e9tablissement (\u00ab vous \u00eates ici \u00bb) *\/\n  .mv-home {\n    background: none;\n    border: none;\n    pointer-events: none;\n  }\n\n  .mv-home-pin {\n    display: flex;\n    align-items: center;\n    justify-content: center;\n    width: 44px;\n    height: 44px;\n    border: 3px solid #fff;\n    border-radius: 50%;\n    background: #1c2b22;\n    color: #fff;\n    box-shadow: 0 0 0 5px rgba(28, 43, 34, 0.25), 0 4px 12px rgba(0, 0, 0, 0.35);\n  }\n\n  .mv-home-pin svg {\n    width: 22px;\n    height: 22px;\n  }\n\n  .mv-home-label.leaflet-tooltip {\n    padding: 5px 10px;\n    border: 0;\n    border-radius: 999px;\n    background: #1c2b22;\n    color: #fff;\n    font-family: 'Inter', -apple-system, sans-serif;\n    font-size: 12px;\n    font-weight: 700;\n    box-shadow: 0 3px 8px rgba(0, 0, 0, 0.25);\n  }\n\n  .mv-home-label.leaflet-tooltip-right::before {\n    border-right-color: #1c2b22;\n  }\n\n  .mv-btn {\n    display: inline-flex;\n    align-items: center;\n    justify-content: center;\n    gap: 8px;\n    padding: 12px 26px;\n    border: 0;\n    border-radius: 999px;\n    background: var(--mv-accent);\n    color: #fff !important;\n    font-size: 15px;\n    font-weight: 600;\n    text-decoration: none !important;\n    cursor: pointer;\n    transition: filter 0.15s;\n  }\n\n  .mv-btn:hover {\n    filter: brightness(0.92);\n  }\n\n  .mv-empty {\n    grid-column: 1 \/ -1;\n    padding: 40px 20px;\n    border: 1px dashed #d6cdbd;\n    border-radius: 18px;\n    background: #fff;\n    color: var(--mv-muted);\n    text-align: center;\n  }\n\n  .mv-empty strong {\n    display: block;\n    margin-bottom: 4px;\n    color: #1f2a24;\n  }\n\n  \/* \u2500\u2500\u2500 Id\u00e9es selon vos envies \u2500\u2500\u2500 *\/\n  .mv-ideas {\n    margin-top: 48px;\n  }\n\n  .mv-ideas-head {\n    display: flex;\n    flex-wrap: wrap;\n    align-items: baseline;\n    justify-content: space-between;\n    gap: 8px 24px;\n    margin-bottom: 16px;\n  }\n\n  .mv-ideas-title {\n    margin: 0 !important;\n    font-size: clamp(22px, 2.6vw, 30px) !important;\n    color: #1c2b22 !important;\n  }\n\n  .mv-ideas-sub {\n    margin: 0 !important;\n    color: var(--mv-muted);\n    font-size: 14px;\n  }\n\n  .mv-ideas-grid {\n    display: grid;\n    grid-template-columns: repeat(auto-fill, minmax(260px, 1fr));\n    gap: 16px;\n  }\n\n  .mv-idea {\n    display: flex;\n    align-items: stretch;\n    overflow: hidden;\n    min-height: 88px;\n    padding: 0;\n    border: 1px solid var(--mv-line);\n    border-radius: 16px;\n    background: #fff;\n    text-align: left;\n    cursor: pointer;\n    transition: box-shadow 0.2s;\n  }\n\n  .mv-idea:hover {\n    box-shadow: 0 8px 20px rgba(31, 42, 36, 0.1);\n  }\n\n  .mv-idea-img {\n    flex: 0 0 38%;\n    background: var(--mv-cream) center \/ cover no-repeat;\n  }\n\n  .mv-idea-body {\n    display: flex;\n    flex: 1;\n    align-items: center;\n    gap: 10px;\n    padding: 12px 14px;\n  }\n\n  .mv-idea-body .mv-icon {\n    font-size: 22px;\n    color: var(--mv-cat);\n  }\n\n  .mv-idea-text {\n    flex: 1;\n    min-width: 0;\n  }\n\n  .mv-idea-text strong {\n    display: block;\n    font-size: 14px;\n    color: #1c2b22;\n    line-height: 1.3;\n  }\n\n  .mv-idea-text span {\n    font-size: 13px;\n    color: var(--mv-muted);\n  }\n\n  \/* \u2500\u2500\u2500 Marqueurs carte \u2500\u2500\u2500 *\/\n  .mv-pin svg {\n    display: block;\n    overflow: visible;\n    transform-origin: 50% 100%;\n    transition: transform 0.15s ease;\n    filter: drop-shadow(0 2px 3px rgba(20, 24, 20, 0.35));\n  }\n\n  .mv-pin.is-hover svg {\n    transform: scale(1.3);\n  }\n\n  .mv-pin.is-selected svg {\n    transform: scale(1.4);\n    filter: drop-shadow(0 0 0 #fff) drop-shadow(0 3px 6px rgba(20, 24, 20, 0.45));\n  }\n\n  .mv-pin.is-selected {\n    z-index: 1001 !important;\n  }\n\n  \/* Pas de carr\u00e9 de focus Leaflet autour du rep\u00e8re cliqu\u00e9 *\/\n  .mv-pin:focus,\n  .mv-pin:focus-visible {\n    outline: none;\n  }\n\n  .mv-pin.is-hover {\n    z-index: 1000 !important;\n  }\n\n  .mv-cluster {\n    background: none;\n    border: none;\n  }\n\n  .mv-cluster span {\n    display: flex;\n    align-items: center;\n    justify-content: center;\n    border: 3px solid #fff;\n    border-radius: 50%;\n    background: var(--mv-accent, #2e5e45);\n    color: #fff;\n    font-size: 13px;\n    font-weight: 700;\n    box-shadow: 0 3px 8px rgba(20, 24, 20, 0.3);\n  }\n\n\n  \/* \u2500\u2500\u2500 Modal \u2500\u2500\u2500 *\/\n  .mv-modal-overlay {\n    position: fixed !important;\n    inset: 0 !important;\n    z-index: 99999 !important;\n    max-width: none !important;\n    width: auto !important;\n    margin: 0 !important;\n    display: flex;\n    align-items: center;\n    justify-content: center;\n    padding: 20px;\n    background: rgba(20, 24, 20, 0.4);\n    backdrop-filter: blur(2px);\n  }\n\n  .mv-modal-overlay[hidden] {\n    display: none !important;\n  }\n\n  .mv-modal {\n    position: relative;\n    width: 100%;\n    max-width: 1080px;\n    max-height: calc(100vh - 32px);\n    overflow-y: auto;\n    border-radius: 22px;\n    background: #fff;\n    box-shadow: 0 24px 60px rgba(20, 24, 20, 0.3);\n    font-family: 'Inter', -apple-system, sans-serif;\n    color: #1f2a24;\n  }\n\n  \/* Cr\u00e9dit photo : discret sur la carte (\u00a9, auteur au survol), lisible en fiche. *\/\n  .mv-credit {\n    position: absolute;\n    top: 8px;\n    right: 8px;\n    z-index: 2;\n    max-width: calc(100% - 16px);\n    padding: 2px 7px;\n    border-radius: 999px;\n    background: rgba(0, 0, 0, 0.45);\n    color: #fff;\n    font-size: 11px;\n    line-height: 1.5;\n    white-space: nowrap;\n    overflow: hidden;\n    text-overflow: ellipsis;\n    cursor: help;\n  }\n\n  .mv-card:hover .mv-credit::after,\n  .mv-credit:focus::after {\n    content: ' ' attr(data-credit);\n  }\n\n  \/* Bandeau : le cr\u00e9dit est \u00e9crit en clair (pas de survol sur une image de fond),\n     en bas \u00e0 droite, loin du titre. *\/\n  .mv-credit--hero {\n    top: auto;\n    bottom: 10px;\n    right: 12px;\n    max-width: 60%;\n    cursor: default;\n  }\n\n  .mv-modal-credit {\n    margin: 6px 2px 0 !important;\n    color: var(--mv-muted, #6b7280);\n    font-size: 12px !important;\n    line-height: 1.4 !important;\n  }\n\n  .mv-modal-img {\n    display: block;\n    width: 100%;\n    aspect-ratio: 4 \/ 3;\n    max-height: 52vh;\n    object-fit: cover;\n    border-radius: 14px;\n  }\n\n  \/* Modal large : contenu sur 2 colonnes (texte \/ m\u00e9dias) pour \u00e9viter de d\u00e9filer *\/\n  .mv-modal-cols {\n    display: grid;\n    grid-template-columns: minmax(0, 0.95fr) minmax(0, 1.05fr);\n    gap: 28px;\n    align-items: start;\n  }\n\n  \/* Colonne m\u00e9dias : reste visible pendant qu'on lit le texte *\/\n  .mv-modal-col--media {\n    position: sticky;\n    top: 0;\n  }\n\n  .mv-modal-body {\n    padding-top: 26px !important;\n  }\n\n  \/* Place pour le bouton de fermeture en haut \u00e0 droite *\/\n  .mv-modal-cols > .mv-modal-col:last-child {\n    padding-right: 36px;\n  }\n\n  .mv-modal-col {\n    display: flex;\n    flex-direction: column;\n    gap: 14px;\n    min-width: 0;\n  }\n\n  .mv-modal-actions {\n    display: flex;\n    flex-wrap: wrap;\n    gap: 10px;\n  }\n\n  .mv-btn--ghost {\n    background: #fff;\n    border: 1px solid var(--mv-line);\n    color: #1c2b22 !important;\n  }\n\n  .mv-btn--ghost:hover {\n    filter: none;\n    border-color: var(--mv-accent);\n  }\n\n  @media (max-width: 900px) {\n    .mv-modal-cols {\n      grid-template-columns: minmax(0, 1fr);\n      gap: 14px;\n    }\n\n    \/* Mobile : photo, puis texte, puis boutons \/ m\u00e9dias *\/\n    .mv-modal-cols {\n      display: flex;\n      flex-direction: column;\n    }\n\n    .mv-modal-col--media {\n      display: contents;\n    }\n\n    .mv-modal-col--media > .mv-modal-img {\n      order: -2;\n    }\n\n    .mv-modal-cols > .mv-modal-col:last-child {\n      order: -1;\n    }\n\n    .mv-modal-cols > .mv-modal-col:last-child {\n      padding-right: 0;\n    }\n  }\n\n  .mv-modal-body {\n    display: flex;\n    flex-direction: column;\n    gap: 14px;\n    padding: 22px 26px 26px;\n  }\n\n  .mv-modal-title {\n    margin: 0 !important;\n    font-size: 26px !important;\n    line-height: 1.2 !important;\n    color: #1c2b22 !important;\n  }\n\n  .mv-modal-desc {\n    margin: 0 !important;\n    font-size: 15px;\n    line-height: 1.65;\n    color: #4b5850;\n    white-space: pre-line;\n  }\n\n  .mv-modal-event {\n    display: inline-flex;\n    align-items: center;\n    gap: 8px;\n    align-self: flex-start;\n    padding: 7px 12px;\n    border-radius: 10px;\n    background: var(--mv-accent-soft);\n    color: var(--mv-accent);\n    font-size: 14px;\n    font-weight: 600;\n  }\n\n  .mv-fields {\n    display: grid;\n    grid-template-columns: repeat(auto-fill, minmax(200px, 1fr));\n    gap: 10px 20px;\n    padding: 14px 16px;\n    border-radius: 14px;\n    background: var(--mv-cream);\n  }\n\n  .mv-field span {\n    display: block;\n    margin-bottom: 2px;\n    font-size: 12px;\n    line-height: 1.35 !important;\n    color: var(--mv-muted);\n  }\n\n  .mv-field strong {\n    display: block;\n    font-size: 14px;\n    font-weight: 600;\n    line-height: 1.4 !important;\n    color: #1f2a24;\n    overflow-wrap: anywhere;\n  }\n\n  \/* \u2500\u2500\u2500 Agrandissement automatique par paliers (fiches tr\u00e8s remplies) \u2500\u2500\u2500\n     1. is-wide    : fen\u00eatre plus large, infos sur 3 colonnes, photo plus basse\n     2. is-compact : espacements et textes resserr\u00e9s *\/\n  .mv-modal.is-wide {\n    max-width: min(1320px, calc(100vw - 32px));\n  }\n\n  .mv-modal.is-wide .mv-fields {\n    grid-template-columns: repeat(3, minmax(0, 1fr));\n  }\n\n  .mv-modal.is-wide .mv-modal-img {\n    aspect-ratio: 16 \/ 10;\n    max-height: 36vh;\n  }\n\n  .mv-modal.is-compact .mv-modal-body {\n    gap: 10px;\n    padding: 18px 20px 20px !important;\n  }\n\n  .mv-modal.is-compact .mv-modal-col {\n    gap: 10px;\n  }\n\n  .mv-modal.is-compact .mv-modal-title {\n    font-size: 22px !important;\n  }\n\n  .mv-modal.is-compact .mv-modal-desc {\n    font-size: 14px;\n    line-height: 1.55;\n  }\n\n  .mv-modal.is-compact .mv-fields {\n    gap: 8px 16px;\n    padding: 12px 14px;\n  }\n\n  .mv-modal.is-compact .mv-field strong {\n    font-size: 13px;\n  }\n\n  .mv-modal.is-compact .mv-modal-img {\n    max-height: 30vh;\n  }\n\n  @media (max-width: 900px) {\n    .mv-modal.is-wide .mv-fields {\n      grid-template-columns: repeat(auto-fill, minmax(180px, 1fr));\n    }\n  }\n\n  .mv-modal-sub {\n    margin: 4px 0 0 !important;\n    font-size: 13px;\n    font-weight: 700;\n    letter-spacing: 0.4px;\n    text-transform: uppercase;\n    color: var(--mv-muted);\n  }\n\n  .mv-gallery {\n    display: grid;\n    grid-template-columns: repeat(auto-fill, minmax(110px, 1fr));\n    gap: 8px;\n  }\n\n  .mv-gallery img {\n    display: block;\n    width: 100%;\n    aspect-ratio: 1;\n    object-fit: cover;\n    border-radius: 10px;\n  }\n\n  .mv-docs a {\n    display: flex;\n    align-items: center;\n    gap: 8px;\n    padding: 8px 0;\n    color: var(--mv-accent);\n    font-weight: 600;\n    text-decoration: none;\n  }\n\n  .mv-video {\n    position: relative;\n    aspect-ratio: 16 \/ 9;\n    border-radius: 12px;\n    overflow: hidden;\n    background: #000;\n  }\n\n  .mv-video iframe,\n  .mv-video video {\n    position: absolute;\n    inset: 0;\n    width: 100%;\n    height: 100%;\n    border: 0;\n  }\n\n  .mv-faq details {\n    border-bottom: 1px solid var(--mv-line);\n    padding: 10px 0;\n  }\n\n  .mv-faq summary {\n    cursor: pointer;\n    font-size: 15px !important;\n    font-weight: 600;\n    line-height: 1.4 !important;\n    color: #1c2b22;\n  }\n\n  .mv-faq p {\n    margin: 8px 0 0 !important;\n    color: #4b5850;\n    line-height: 1.55;\n  }\n\n  .mv-modal-close {\n    position: absolute;\n    top: 12px;\n    right: 12px;\n    z-index: 2;\n    width: 40px;\n    height: 40px;\n    border: 0;\n    border-radius: 50%;\n    background: rgba(255, 255, 255, 0.95);\n    color: #1f2a24;\n    font-size: 22px;\n    line-height: 1;\n    cursor: pointer;\n    box-shadow: 0 2px 6px rgba(20, 24, 20, 0.2);\n  }\n\n  \/* \u2500\u2500\u2500 Responsive \u2500\u2500\u2500 *\/\n  @media (max-width: 1100px) {\n    .mv-layout {\n      grid-template-columns: minmax(0, 1fr);\n    }\n\n    .mv-map-panel {\n      position: relative;\n      top: 0;\n      order: -1;\n    }\n\n    .mv-map {\n      aspect-ratio: 4 \/ 3;\n      max-height: 420px;\n    }\n  }\n\n  @media (max-width: 720px) {\n    .mv-wrap {\n      padding: 0 12px 40px;\n    }\n\n    .mv-hero {\n      padding: 36px 22px;\n      border-radius: 18px;\n    }\n\n    .mv-hero::before {\n      background: linear-gradient(180deg, rgba(250, 247, 242, 0.95), rgba(250, 247, 242, 0.8));\n    }\n\n    .mv-seg {\n      width: 100%;\n    }\n\n    .mv-seg button {\n      flex: 1;\n      padding: 0 8px;\n    }\n\n\n\n    .mv-card--featured {\n      grid-column: auto;\n      min-height: 320px;\n    }\n\n    .mv-card--featured .mv-card-title {\n      font-size: 24px !important;\n    }\n\n    .mv-modal-img {\n      height: 200px;\n    }\n  }\n<\/style>\n\n\n<div class=\"mv-wrap\" id=\"mv-app\">\n\n  <section class=\"mv-hero\" style=\"background-image:url(https:\/\/elaia-public.s3.fr-par.scw.cloud\/metadata_images\/image_6a5de4d34b3ef.png)\">\n        <div class=\"mv-hero-inner\">\n      <h1 class=\"mv-hero-title\">Things to discover nearby<\/h1>\n      <p class=\"mv-hero-text\">Villages, beaches, walks, good addresses and experiences selected around your stay.<\/p>\n              <span class=\"mv-hero-chip\">\n          <span class=\"mv-icon\" aria-hidden=\"true\"><svg viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\"><path d=\"M12 21s-7-6.2-7-11.5a7 7 0 0 1 14 0C19 14.8 12 21 12 21z\"\/><circle cx=\"12\" cy=\"9.5\" r=\"2.5\"\/><\/svg><\/span>\n          Around <strong>Camping Le Moulin de Surier<\/strong>\n        <\/span>\n          <\/div>\n  <\/section>\n\n  <div class=\"mv-controls\">\n    <label class=\"mv-search\">\n      <span class=\"mv-icon\" aria-hidden=\"true\"><svg viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\"><circle cx=\"11\" cy=\"11\" r=\"7\"\/><path d=\"M21 21l-4.5-4.5\"\/><\/svg><\/span>\n      <input type=\"search\" id=\"mv-search\" placeholder=\"Search for a place, an activity, a village\u2026\" aria-label=\"Search\">\n    <\/label>\n          <div class=\"mv-seg\" role=\"group\" aria-label=\"Maximum distance\" id=\"mv-distance\">\n        <button type=\"button\" data-km=\"15\">15 km<\/button>\n        <button type=\"button\" data-km=\"30\">30 km<\/button>\n        <button type=\"button\" data-km=\"60\">60 km<\/button>\n        <button type=\"button\" data-km=\"0\" class=\"is-active\">All<\/button>\n      <\/div>\n      <\/div>\n\n  <div class=\"mv-cats-wrap\" id=\"mv-cats-wrap\">\n    <button type=\"button\" class=\"mv-cats-arrow mv-cats-arrow--left\" aria-label=\"Previous categories\"><span>\u2039<\/span><\/button>\n    <div class=\"mv-cats\" id=\"mv-cats\" role=\"group\" aria-label=\"Categories\"><\/div>\n    <button type=\"button\" class=\"mv-cats-arrow mv-cats-arrow--right\" aria-label=\"Next categories\"><span>\u203a<\/span><\/button>\n  <\/div>\n\n  <div class=\"mv-bar\">\n    <p class=\"mv-count\" id=\"mv-count\"><\/p>\n    <div class=\"mv-seg\" role=\"group\" aria-label=\"Display\" id=\"mv-view\">\n      <button type=\"button\" data-view=\"list\">List<\/button>\n      <button type=\"button\" data-view=\"map\" class=\"is-active\">Map<\/button>\n    <\/div>\n  <\/div>\n\n  <div class=\"mv-layout\" id=\"mv-layout\">\n    <div>\n      <div class=\"mv-grid\" id=\"mv-grid\"><\/div>\n      <div class=\"mv-more\" id=\"mv-more\"><\/div>\n    <\/div>\n    <aside class=\"mv-map-panel\">\n      <div class=\"mv-map\" id=\"mv-map\"><\/div>\n      <div id=\"mv-preview\" aria-live=\"polite\"><\/div>\n    <\/aside>\n  <\/div>\n\n  <section class=\"mv-ideas\" id=\"mv-ideas\" aria-labelledby=\"mv-ideas-title\"><\/section>\n\n  <noscript>\n    <ul>\n              <li><strong>Monpazier<\/strong> \u2014 Charming bastide with summer entertainment and a music festival, perfect for a convivial evening.<\/li>\n              <li><strong>Domme<\/strong> \u2014 Fortified village with stunning views, perfect for cultural and culinary strolls.<\/li>\n              <li><strong>Sarlat-la-Can\u00e9da<\/strong> \u2014 Unmissable town for its medieval heritage and gastronomy, perfect for a day trip.<\/li>\n              <li><strong>Issigeac<\/strong> \u2014 Picturesque village with Provencal ambiance, ideal for discovering local terroir and craftsmanship.<\/li>\n              <li><strong>Beaumont-du-P\u00e9rigord<\/strong> \u2014 Lively village with regular markets and events, friendly atmosphere in summer evenings, ideal for cycling visits.<\/li>\n              <li><strong>Visit of medieval bastides and villages<\/strong> \u2014 Discover medieval bastides and villages such as Beaumont du P\u00e9rigord, Issigeac, and Monpazier, rich in history and architecture, with market and seasonal events.<\/li>\n              <li><strong>Accrobranche \u00e0 Vergtaventures<\/strong> \u2014 Passez une journ\u00e9e dans un parc accrobranche \u00e0 Vergtaventures, avec diff\u00e9rents parcours dans les arbres adapt\u00e9s \u00e0 tous les \u00e2ges et niveaux.<\/li>\n              <li><strong>Surf at Soulac-sur-Mer<\/strong> \u2014 Practice surfing on the beaches of Soulac-sur-Mer, known for their good waves. Several schools are available to learn or improve.<\/li>\n              <li><strong>Hiking<\/strong> \u2014 Enjoy numerous hiking trails suitable for all levels around the campsite. These paths allow you to discover the surrounding nature, local wildlife, and remarkable landscapes, perfect for families as well&hellip;<\/li>\n              <li><strong>River Kayaking<\/strong> \u2014 Discover the region from the water by canoe or kayak on the Dordogne or V\u00e9z\u00e8re. These river descents are accessible to beginners and offer stunning natural scenery.<\/li>\n              <li><strong>Open-air Cinema in Dordogne<\/strong> \u2014 Open-air screenings in several villages of P\u00e9rigord, offering a summer cinematic experience under the stars.<\/li>\n              <li><strong>Brikabrak - Circus &amp; street arts festival at Bugue<\/strong> \u2014 Festival with street performances, circus shows, and live art in a friendly atmosphere.<\/li>\n              <li><strong>P\u00e9rigord Pourpre Festival in Monpazier<\/strong> \u2014 Summer musical concert in the fortified town, a lively and friendly musical atmosphere for a summer evening.<\/li>\n              <li><strong>Macadam Jazz at P\u00e9rigueux<\/strong> \u2014 Free jazz festival with concerts in the streets and squares of P\u00e9rigueux during summer.<\/li>\n              <li><strong>European Heritage Days<\/strong> \u2014 Free or guided visits to historical monuments across the department, showcasing the local cultural heritage.<\/li>\n              <li><strong>Bastides en F\u00eate at Beaumont du P\u00e9rigord<\/strong> \u2014 Large medieval gathering with craft markets, performances, and historical animations over a weekend.<\/li>\n              <li><strong>Musique en P\u00e9rigord \/ Summer music in Bergerac<\/strong> \u2014 Open-air concerts and music evenings throughout the Dordogne department in June, July, and August.<\/li>\n              <li><strong>Local Theater Festival in Villefranche en P\u00e9rigord<\/strong> \u2014 This theater festival runs from April to the end of May with various plays and activities in nearby villages. It&#039;s a great opportunity to discover local culture and regional talents&hellip;<\/li>\n              <li><strong>Night Gourmet Market in Beaumont du P\u00e9rigord<\/strong> \u2014 Night gourmet market with local products, shared meals at the table, and a friendly musical atmosphere.<\/li>\n          <\/ul>\n  <\/noscript>\n<\/div>\n\n<div class=\"mv-modal-overlay\" id=\"mv-modal\" hidden>\n  <div class=\"mv-modal\" role=\"dialog\" aria-modal=\"true\" aria-labelledby=\"mv-modal-title\">\n    <button type=\"button\" class=\"mv-modal-close\" id=\"mv-modal-close\" aria-label=\"Close\">\u00d7<\/button>\n    <div id=\"mv-modal-content\"><\/div>\n  <\/div>\n<\/div>\n\n<script>\n  (function() {\n    var ITEMS = [{\"id\":0,\"featurable\":true,\"type\":\"villes-aux-alentours\",\"name\":\"Monpazier\",\"image\":\"https:\\\/\\\/elaia-public.s3.fr-par.scw.cloud\\\/metadata_images\\\/image_6a5de4d34b3ef.png\",\"credit\":\"\",\"description\":\"Charming bastide with summer entertainment and a music festival, perfect for a convivial evening.\",\"city\":\"\",\"address\":\"Monpazier, Dordogne, France\",\"km\":18,\"min\":20,\"lat\":44.755,\"lng\":0.929,\"tags\":[],\"fields\":[{\"label\":\"Distance depuis le camping (km)\",\"value\":\"18\"},{\"label\":\"Temps en voiture (min)\",\"value\":\"20\"},{\"label\":\"Lieux \\\/ Activit\\u00e9s incontournables\",\"value\":\"Summer night market, historic bastide, the P\\u00e9rigord Pourpre festival on August 4th.\"},{\"label\":\"March\\u00e9s \\\/ \\u00e9v\\u00e9nements locaux\",\"value\":\"Night markets and gourmet markets in summer, summer music festival.\"},{\"label\":\"Restaurants \\\/ sp\\u00e9cialit\\u00e9s\",\"value\":\"Restaurants with local specialties around the bastide.\"},{\"label\":\"Adresse compl\\u00e8te\",\"value\":\"Monpazier, Dordogne, France\"}],\"link\":\"https:\\\/\\\/www.pays-bergerac-tourisme.com\\\/fr\\\/decouvrir\\\/cote-pierres\\\/bastides\\\/monpazier\",\"event\":\"\",\"faq\":[],\"video_url\":\"\",\"video_embed\":null,\"documents\":[],\"gallery\":[]},{\"id\":1,\"featurable\":true,\"type\":\"villes-aux-alentours\",\"name\":\"Domme\",\"image\":\"https:\\\/\\\/elaia-public.s3.fr-par.scw.cloud\\\/metadata_images\\\/image_6a5de75d4f6ee.png\",\"credit\":\"\",\"description\":\"Fortified village with stunning views, perfect for cultural and culinary strolls.\",\"city\":\"\",\"address\":\"Domme, Dordogne, France\",\"km\":25,\"min\":30,\"lat\":44.8111,\"lng\":1.1222,\"tags\":[],\"fields\":[{\"label\":\"Distance depuis le camping (km)\",\"value\":\"25\"},{\"label\":\"Temps en voiture (min)\",\"value\":\"30\"},{\"label\":\"Lieux \\\/ Activit\\u00e9s incontournables\",\"value\":\"Fortified bastide, panoramic views, markets under the arcades.\"},{\"label\":\"March\\u00e9s \\\/ \\u00e9v\\u00e9nements locaux\",\"value\":\"Traditional markets and gourmet markets in season.\"},{\"label\":\"Restaurants \\\/ sp\\u00e9cialit\\u00e9s\",\"value\":\"Local specialties in village-center restaurants.\"},{\"label\":\"Adresse compl\\u00e8te\",\"value\":\"Domme, Dordogne, France\"}],\"link\":\"https:\\\/\\\/www.vallee-dordogne.com\\\/dordogne\\\/domme\",\"event\":\"\",\"faq\":[],\"video_url\":\"\",\"video_embed\":null,\"documents\":[],\"gallery\":[]},{\"id\":2,\"featurable\":true,\"type\":\"villes-aux-alentours\",\"name\":\"Sarlat-la-Can\\u00e9da\",\"image\":\"https:\\\/\\\/elaia-public.s3.fr-par.scw.cloud\\\/metadata_images\\\/image_6a5de6e611ebe.png\",\"credit\":\"\",\"description\":\"Unmissable town for its medieval heritage and gastronomy, perfect for a day trip.\",\"city\":\"\",\"address\":\"Sarlat-la-Can\\u00e9da, Dordogne, France\",\"km\":30,\"min\":35,\"lat\":44.8919,\"lng\":1.2143,\"tags\":[],\"fields\":[{\"label\":\"Distance depuis le camping (km)\",\"value\":\"30\"},{\"label\":\"Temps en voiture (min)\",\"value\":\"35\"},{\"label\":\"Lieux \\\/ Activit\\u00e9s incontournables\",\"value\":\"Medieval center, traditional markets, Ch\\u00e2teau des Milandes.\"},{\"label\":\"March\\u00e9s \\\/ \\u00e9v\\u00e9nements locaux\",\"value\":\"Traditional markets, cultural events throughout the seasons.\"},{\"label\":\"Restaurants \\\/ sp\\u00e9cialit\\u00e9s\",\"value\":\"P\\u00e9rigord specialties, many quality restaurants.\"},{\"label\":\"Adresse compl\\u00e8te\",\"value\":\"Sarlat-la-Can\\u00e9da, Dordogne, France\"}],\"link\":\"https:\\\/\\\/www.sarlat-tourisme.com\\\/\",\"event\":\"\",\"faq\":[],\"video_url\":\"\",\"video_embed\":null,\"documents\":[],\"gallery\":[]},{\"id\":3,\"featurable\":true,\"type\":\"villes-aux-alentours\",\"name\":\"Issigeac\",\"image\":\"https:\\\/\\\/elaia-public.s3.fr-par.scw.cloud\\\/metadata_images\\\/image_6a5de6ba3e03f.png\",\"credit\":\"\",\"description\":\"Picturesque village with Provencal ambiance, ideal for discovering local terroir and craftsmanship.\",\"city\":\"\",\"address\":\"Issigeac, Dordogne, France\",\"km\":20,\"min\":25,\"lat\":44.7087,\"lng\":0.9493,\"tags\":[],\"fields\":[{\"label\":\"Distance depuis le camping (km)\",\"value\":\"20\"},{\"label\":\"Temps en voiture (min)\",\"value\":\"25\"},{\"label\":\"Lieux \\\/ Activit\\u00e9s incontournables\",\"value\":\"Medieval village, local markets on Sunday, strolling through the typical streets.\"},{\"label\":\"March\\u00e9s \\\/ \\u00e9v\\u00e9nements locaux\",\"value\":\"Sunday market, traditional local events.\"},{\"label\":\"Restaurants \\\/ sp\\u00e9cialit\\u00e9s\",\"value\":\"Restaurants with regional specialties, warm village atmosphere.\"},{\"label\":\"Adresse compl\\u00e8te\",\"value\":\"Issigeac, Dordogne, France\"}],\"link\":\"https:\\\/\\\/www.pays-bergerac-tourisme.com\\\/fr\\\/decouvrir\\\/cote-pierres\\\/villages-de-caractere\\\/issigeac\",\"event\":\"\",\"faq\":[],\"video_url\":\"\",\"video_embed\":null,\"documents\":[],\"gallery\":[]},{\"id\":4,\"featurable\":true,\"type\":\"villes-aux-alentours\",\"name\":\"Beaumont-du-P\\u00e9rigord\",\"image\":\"https:\\\/\\\/elaia-public.s3.fr-par.scw.cloud\\\/metadata_images\\\/image_6a5de37429b44.png\",\"credit\":\"\",\"description\":\"Lively village with regular markets and events, friendly atmosphere in summer evenings, ideal for cycling visits.\",\"city\":\"\",\"address\":\"Beaumont-du-P\\u00e9rigord, Dordogne, France\",\"km\":8,\"min\":10,\"lat\":44.814,\"lng\":0.9447,\"tags\":[],\"fields\":[{\"label\":\"Distance depuis le camping (km)\",\"value\":\"8\"},{\"label\":\"Temps en voiture (min)\",\"value\":\"10\"},{\"label\":\"Lieux \\\/ Activit\\u00e9s incontournables\",\"value\":\"The bastides of Beaumont du P\\u00e9rigord, the nocturnal gourmet market, flea markets, and summer events.\"},{\"label\":\"March\\u00e9s \\\/ \\u00e9v\\u00e9nements locaux\",\"value\":\"Markets on Tuesdays and Saturdays, nocturnal gourmet market on Monday evenings in summer, annual garage sale on June 15, weekly flea markets in July-August.\"},{\"label\":\"Restaurants \\\/ sp\\u00e9cialit\\u00e9s\",\"value\":\"Le Jean Bistrot, Chez Claudette, local specialties of P\\u00e9rigord.\"},{\"label\":\"Adresse compl\\u00e8te\",\"value\":\"Beaumont-du-P\\u00e9rigord, Dordogne, France\"}],\"link\":\"https:\\\/\\\/www.pays-bergerac-tourisme.com\\\/fr\\\/decouvrir\\\/cote-pierres\\\/bastides\\\/beaumontois-en-perigord\",\"event\":\"\",\"faq\":[],\"video_url\":\"\",\"video_embed\":null,\"documents\":[],\"gallery\":[]},{\"id\":5,\"featurable\":true,\"type\":\"activites-aux-alentours\",\"name\":\"Visit of medieval bastides and villages\",\"image\":\"https:\\\/\\\/elaia-public.s3.fr-par.scw.cloud\\\/metadata_images\\\/image_6a5dec0a03711.png\",\"credit\":\"\",\"description\":\"Discover medieval bastides and villages such as Beaumont du P\\u00e9rigord, Issigeac, and Monpazier, rich in history and architecture, with market and seasonal events.\",\"city\":\"\",\"address\":\"\",\"km\":10,\"min\":15,\"lat\":null,\"lng\":null,\"tags\":[],\"fields\":[{\"label\":\"Nom de l'activit\\u00e9\",\"value\":\"Visit of medieval bastides and villages\"},{\"label\":\"Distance depuis le camping (km)\",\"value\":\"10-30\"},{\"label\":\"Temps de route depuis le camping (min.)\",\"value\":\"15-30\"},{\"label\":\"Type d'activit\\u00e9 (nature, sport, culture, etc.)\",\"value\":\"Culture, heritage\"},{\"label\":\"Cat\\u00e9gorie de public (Famille, Enfants, Senior, Ado, etc.)\",\"value\":\"Family, Senior, Adults\"},{\"label\":\"R\\u00e9servation ? (oui \\\/ non)\",\"value\":\"non\"},{\"label\":\"Horaires\",\"value\":\"Variable depending on sites, usually all day\"},{\"label\":\"Informations et contact\",\"value\":\"Local tourist office or campsite reception\"},{\"label\":\"Langues parl\\u00e9es\",\"value\":\"French, English\"},{\"label\":\"Animaux accept\\u00e9 (oui \\\/ non)\",\"value\":\"oui\"}],\"link\":\"\",\"event\":\"\",\"faq\":[{\"question\":\"Is this activity suitable for beginners?\",\"answer\":\"Yes, these visits are accessible to everyone, with easy routes to follow.\"},{\"question\":\"What is the average price?\",\"answer\":\"Free for villages, some museums or guided tours may cost from 5 euros.\"},{\"question\":\"Is this activity feasible in bad weather?\",\"answer\":\"Yes, most villages also offer indoor sites like museums or churches, suitable for rainy weather.\"}],\"video_url\":\"\",\"video_embed\":null,\"documents\":[],\"gallery\":[]},{\"id\":6,\"featurable\":true,\"type\":\"activites-aux-alentours\",\"name\":\"Accrobranche \\u00e0 Vergtaventures\",\"image\":\"https:\\\/\\\/elaia-public.s3.fr-par.scw.cloud\\\/metadata_images\\\/image_6a5debae7f2f3.png\",\"credit\":\"\",\"description\":\"Passez une journ\\u00e9e dans un parc accrobranche \\u00e0 Vergtaventures, avec diff\\u00e9rents parcours dans les arbres adapt\\u00e9s \\u00e0 tous les \\u00e2ges et niveaux.\",\"city\":\"\",\"address\":\"\",\"km\":25,\"min\":30,\"lat\":null,\"lng\":null,\"tags\":[],\"fields\":[{\"label\":\"Nom de l'activit\\u00e9\",\"value\":\"Accrobranche \\u00e0 Vergtaventures\"},{\"label\":\"Distance depuis le camping (km)\",\"value\":\"25\"},{\"label\":\"Temps de route depuis le camping (min.)\",\"value\":\"30\"},{\"label\":\"Type d'activit\\u00e9 (nature, sport, culture, etc.)\",\"value\":\"Sport, Nature\"},{\"label\":\"Cat\\u00e9gorie de public (Famille, Enfants, Senior, Ado, etc.)\",\"value\":\"Famille, Enfants, Ado\"},{\"label\":\"R\\u00e9servation ? (oui \\\/ non)\",\"value\":\"oui\"},{\"label\":\"Horaires\",\"value\":\"9h00 - 18h00\"},{\"label\":\"Informations et contact\",\"value\":\"R\\u00e9servation via le site du parc ou \\u00e0 l'accueil du camping\"},{\"label\":\"Langues parl\\u00e9es\",\"value\":\"Fran\\u00e7ais\"},{\"label\":\"Animaux accept\\u00e9 (oui \\\/ non)\",\"value\":\"non\"}],\"link\":\"\",\"event\":\"\",\"faq\":[{\"question\":\"Is this activity suitable for beginners?\",\"answer\":\"Yes, the park offers courses for beginners and children.\"},{\"question\":\"What is the average price?\",\"answer\":\"Approximately 15-20 euros for an adult entry.\"},{\"question\":\"Is this activity possible in bad weather?\",\"answer\":\"The park closes in bad weather (rain or storm) for safety reasons.\"}],\"video_url\":\"\",\"video_embed\":null,\"documents\":[],\"gallery\":[]},{\"id\":7,\"featurable\":true,\"type\":\"activites-aux-alentours\",\"name\":\"Surf at Soulac-sur-Mer\",\"image\":\"https:\\\/\\\/elaia-public.s3.fr-par.scw.cloud\\\/metadata_images\\\/image_6a5de9fa4a7c4.png\",\"credit\":\"\",\"description\":\"Practice surfing on the beaches of Soulac-sur-Mer, known for their good waves. Several schools are available to learn or improve.\",\"city\":\"\",\"address\":\"\",\"km\":75,\"min\":60,\"lat\":null,\"lng\":null,\"tags\":[],\"fields\":[{\"label\":\"Nom de l'activit\\u00e9\",\"value\":\"Surf at Soulac-sur-Mer\"},{\"label\":\"Distance depuis le camping (km)\",\"value\":\"75\"},{\"label\":\"Temps de route depuis le camping (min.)\",\"value\":\"60\"},{\"label\":\"Type d'activit\\u00e9 (nature, sport, culture, etc.)\",\"value\":\"Water sport\"},{\"label\":\"Cat\\u00e9gorie de public (Famille, Enfants, Senior, Ado, etc.)\",\"value\":\"Teen, Adults\"},{\"label\":\"R\\u00e9servation ? (oui \\\/ non)\",\"value\":\"oui\"},{\"label\":\"Horaires\",\"value\":\"Variable depending on schools, usually 10:00 - 18:00\"},{\"label\":\"Informations et contact\",\"value\":\"Surf schools in Soulac-sur-Mer, reservations recommended\"},{\"label\":\"Langues parl\\u00e9es\",\"value\":\"French, English\"},{\"label\":\"Animaux accept\\u00e9 (oui \\\/ non)\",\"value\":\"non\"}],\"link\":\"\",\"event\":\"\",\"faq\":[{\"question\":\"Is this activity suitable for beginners?\",\"answer\":\"Yes, beginner courses are offered with professional supervision.\"},{\"question\":\"What is the average price?\",\"answer\":\"Courses start at around 30-40 euros for a one-hour session.\"},{\"question\":\"Is this activity feasible in bad weather?\",\"answer\":\"Surf depends on weather conditions; sessions are canceled in bad weather or rough sea.\"}],\"video_url\":\"\",\"video_embed\":null,\"documents\":[],\"gallery\":[]},{\"id\":8,\"featurable\":true,\"type\":\"activites-aux-alentours\",\"name\":\"Hiking\",\"image\":\"https:\\\/\\\/elaia-public.s3.fr-par.scw.cloud\\\/metadata_images\\\/image_6a5deb523ba44.jpg\",\"credit\":\"\",\"description\":\"Enjoy numerous hiking trails suitable for all levels around the campsite. These paths allow you to discover the surrounding nature, local wildlife, and remarkable landscapes, perfect for families as well as more experienced enthusiasts.\",\"city\":\"\",\"address\":\"\",\"km\":0,\"min\":0,\"lat\":null,\"lng\":null,\"tags\":[],\"fields\":[{\"label\":\"Nom de l'activit\\u00e9\",\"value\":\"Hiking\"},{\"label\":\"Distance depuis le camping (km)\",\"value\":\"0-10\"},{\"label\":\"Temps de route depuis le camping (min.)\",\"value\":\"0-15\"},{\"label\":\"Type d'activit\\u00e9 (nature, sport, culture, etc.)\",\"value\":\"Nature\"},{\"label\":\"Cat\\u00e9gorie de public (Famille, Enfants, Senior, Ado, etc.)\",\"value\":\"Family, Children, Senior, Teen\"},{\"label\":\"R\\u00e9servation ? (oui \\\/ non)\",\"value\":\"non\"},{\"label\":\"Horaires\",\"value\":\"All day, at sunrise and sunset\"},{\"label\":\"Informations et contact\",\"value\":\"Information at the campsite reception\"},{\"label\":\"Langues parl\\u00e9es\",\"value\":\"French, English\"},{\"label\":\"Animaux accept\\u00e9 (oui \\\/ non)\",\"value\":\"oui\"}],\"link\":\"\",\"event\":\"\",\"faq\":[{\"question\":\"Cette activit\\u00e9 est-elle adapt\\u00e9e aux d\\u00e9butants ?\",\"answer\":\"Oui, les sentiers comprennent des parcours pour d\\u00e9butants et familles, ainsi que des parcours plus techniques pour les randonneurs exp\\u00e9riment\\u00e9s.\"},{\"question\":\"Quel est le tarif moyen ?\",\"answer\":\"Cette activit\\u00e9 est g\\u00e9n\\u00e9ralement gratuite sauf si un guide est engag\\u00e9, alors pr\\u00e9voir environ 10 \\u00e0 30 euros par personne.\"},{\"question\":\"Cette activit\\u00e9 est-elle praticable par mauvais temps ?\",\"answer\":\"La randonn\\u00e9e peut \\u00eatre moins agr\\u00e9able sous la pluie, il est pr\\u00e9f\\u00e9rable de consulter la m\\u00e9t\\u00e9o avant de partir et de s'\\u00e9quiper correctement.\"}],\"video_url\":\"\",\"video_embed\":null,\"documents\":[],\"gallery\":[]},{\"id\":9,\"featurable\":true,\"type\":\"activites-aux-alentours\",\"name\":\"River Kayaking\",\"image\":\"https:\\\/\\\/elaia-public.s3.fr-par.scw.cloud\\\/metadata_images\\\/image_6a5deaba50022.png\",\"credit\":\"\",\"description\":\"Discover the region from the water by canoe or kayak on the Dordogne or V\\u00e9z\\u00e8re. These river descents are accessible to beginners and offer stunning natural scenery.\",\"city\":\"\",\"address\":\"\",\"km\":15,\"min\":20,\"lat\":null,\"lng\":null,\"tags\":[],\"fields\":[{\"label\":\"Nom de l'activit\\u00e9\",\"value\":\"River Kayaking\"},{\"label\":\"Distance depuis le camping (km)\",\"value\":\"15\"},{\"label\":\"Temps de route depuis le camping (min.)\",\"value\":\"20\"},{\"label\":\"Type d'activit\\u00e9 (nature, sport, culture, etc.)\",\"value\":\"Water sport\"},{\"label\":\"Cat\\u00e9gorie de public (Famille, Enfants, Senior, Ado, etc.)\",\"value\":\"Family, Teen, Adults\"},{\"label\":\"R\\u00e9servation ? (oui \\\/ non)\",\"value\":\"oui\"},{\"label\":\"Horaires\",\"value\":\"9:00 AM - 6:00 PM off-season, 8:00 AM - 8:00 PM in summer\"},{\"label\":\"Informations et contact\",\"value\":\"Rental available through local partners, information at the camping reception\"},{\"label\":\"Langues parl\\u00e9es\",\"value\":\"French, English\"},{\"label\":\"Animaux accept\\u00e9 (oui \\\/ non)\",\"value\":\"non\"}],\"link\":\"\",\"event\":\"\",\"faq\":[{\"question\":\"Is this activity suitable for beginners?\",\"answer\":\"Yes, suitable routes and a security briefing are provided for beginners.\"},{\"question\":\"What is the average price?\",\"answer\":\"About 15 to 25 euros per person for half a day's rental of a simple kayak.\"},{\"question\":\"Is this activity feasible in bad weather?\",\"answer\":\"The activity is suspended in bad weather, especially during storms or heavy rain for safety reasons.\"}],\"video_url\":\"\",\"video_embed\":null,\"documents\":[],\"gallery\":[]},{\"id\":10,\"featurable\":true,\"type\":\"evenements-aux-alentours\",\"name\":\"Open-air Cinema in Dordogne\",\"image\":\"https:\\\/\\\/elaia-public.s3.fr-par.scw.cloud\\\/metadata_images\\\/image_6a5df2f024631.jpg\",\"credit\":\"\",\"description\":\"Open-air screenings in several villages of P\\u00e9rigord, offering a summer cinematic experience under the stars.\",\"city\":\"\",\"address\":\"\",\"km\":10,\"min\":15,\"lat\":44.8,\"lng\":0.9,\"tags\":[],\"fields\":[{\"label\":\"Nom\",\"value\":\"Open-air Cinema in Dordogne\"},{\"label\":\"Cat\\u00e9gorie d'\\u00e9v\\u00e9nement : (Musique, exposition, festival, foire, brocante, march\\u00e9, etc.)\",\"value\":\"Open-air Screening \\\/ Cinema in the open air\"},{\"label\":\"Public cible : (Famille, enfants, adultes, seniors, adolescents, etc.)\",\"value\":\"Family, adults, children\"},{\"label\":\"R\\u00e9servation (oui\\\/non)\",\"value\":\"Non\"},{\"label\":\"Horaires\",\"value\":\"June 20 \\u2013 August 29, 2025\"},{\"label\":\"Informations pratiques et contact\",\"value\":\"Information from Dordogne P\\u00e9rigord Tourism\"},{\"label\":\"Distance depuis l'h\\u00f4tel : (en km)\",\"value\":\"10 to 50 depending on the village\"},{\"label\":\"Temps de route depuis l'h\\u00f4tel (en min)\",\"value\":\"15 to 50\"},{\"label\":\"Informations et contact\",\"value\":\"Dordogne P\\u00e9rigord Tourism, phone: +33 5 53 53 32 10\"},{\"label\":\"Langues parl\\u00e9es\",\"value\":\"French\"},{\"label\":\"Animaux : (Accept\\u00e9s ou non)\",\"value\":\"Not accepted\"}],\"link\":\"\",\"event\":\"\",\"faq\":[{\"question\":\"Is it necessary to buy tickets in advance?\",\"answer\":\"\"},{\"question\":\"Where can I find the full program?\",\"answer\":\"The full program is available from Dordogne P\\u00e9rigord Tourisme.\"},{\"question\":\"Is there a dedicated parking or shuttle service?\",\"answer\":\"\"},{\"question\":\"How long does the event last?\",\"answer\":\"\"},{\"question\":\"Is this event suitable for children?\",\"answer\":\"\"},{\"question\":\"Is it suitable for seniors or wheelchair users?\",\"answer\":\"\"},{\"question\":\"Is it mainly family, festive, or cultural?\",\"answer\":\"\"},{\"question\":\"Is there an age limit for certain activities?\",\"answer\":\"\"},{\"question\":\"Are there any discounted rates (families, children, seniors)?\",\"answer\":\"\"},{\"question\":\"Should a budget be planned on-site (food, drinks, artisans)?\",\"answer\":\"\"},{\"question\":\"Is there food or local producers on-site?\",\"answer\":\"\"},{\"question\":\"Can you find crafts or souvenirs there?\",\"answer\":\"\"},{\"question\":\"Is the event held indoors or outdoors?\",\"answer\":\"\"},{\"question\":\"What is the best time to arrive to avoid the crowds?\",\"answer\":\"\"}],\"video_url\":\"\",\"video_embed\":null,\"documents\":[],\"gallery\":[]},{\"id\":11,\"featurable\":true,\"type\":\"evenements-aux-alentours\",\"name\":\"Brikabrak - Circus & street arts festival at Bugue\",\"image\":\"https:\\\/\\\/elaia-public.s3.fr-par.scw.cloud\\\/metadata_images\\\/image_6a5df2476f340.jpg\",\"credit\":\"\",\"description\":\"Festival with street performances, circus shows, and live art in a friendly atmosphere.\",\"city\":\"\",\"address\":\"\",\"km\":25,\"min\":30,\"lat\":44.9276,\"lng\":0.9623,\"tags\":[],\"fields\":[{\"label\":\"Nom\",\"value\":\"Brikabrak - Circus & street arts festival at Bugue\"},{\"label\":\"Cat\\u00e9gorie d'\\u00e9v\\u00e9nement : (Musique, exposition, festival, foire, brocante, march\\u00e9, etc.)\",\"value\":\"Festival\"},{\"label\":\"Public cible : (Famille, enfants, adultes, seniors, adolescents, etc.)\",\"value\":\"Family, adults, children\"},{\"label\":\"R\\u00e9servation (oui\\\/non)\",\"value\":\"Non\"},{\"label\":\"Horaires\",\"value\":\"May 4 to 11, 2025\"},{\"label\":\"Informations pratiques et contact\",\"value\":\"Inquire at the Bugue tourism office or at the camping reception\"},{\"label\":\"Distance depuis l'h\\u00f4tel : (en km)\",\"value\":\"25\"},{\"label\":\"Temps de route depuis l'h\\u00f4tel (en min)\",\"value\":\"30\"},{\"label\":\"Informations et contact\",\"value\":\"Bugue Tourist Office, phone: +33 5 53 31 49 40\"},{\"label\":\"Langues parl\\u00e9es\",\"value\":\"French\"},{\"label\":\"Animaux : (Accept\\u00e9s ou non)\",\"value\":\"Not accepted\"}],\"link\":\"\",\"event\":\"\",\"faq\":[{\"question\":\"Do I need to buy my tickets in advance?\",\"answer\":\"\"},{\"question\":\"Where can I find the full schedule?\",\"answer\":\"\"},{\"question\":\"Is there a dedicated parking lot or shuttle service?\",\"answer\":\"\"},{\"question\":\"How long does the event last?\",\"answer\":\"\"},{\"question\":\"Is this event suitable for children?\",\"answer\":\"\"},{\"question\":\"Is it suitable for seniors or people with reduced mobility?\",\"answer\":\"\"},{\"question\":\"Is it more family-oriented, festive, or cultural?\",\"answer\":\"\"},{\"question\":\"Is there an age limit for certain activities?\",\"answer\":\"\"},{\"question\":\"Are there discounted rates (family, children, seniors)?\",\"answer\":\"\"},{\"question\":\"Should you budget on-site (food, drinks, artisans)?\",\"answer\":\"\"},{\"question\":\"Is there food or local producers on site?\",\"answer\":\"\"},{\"question\":\"Can you find crafts or souvenirs there?\",\"answer\":\"\"},{\"question\":\"Is the event held indoors or outdoors?\",\"answer\":\"\"},{\"question\":\"What time is it best to arrive to avoid the crowds?\",\"answer\":\"\"}],\"video_url\":\"\",\"video_embed\":null,\"documents\":[],\"gallery\":[]},{\"id\":12,\"featurable\":true,\"type\":\"evenements-aux-alentours\",\"name\":\"P\\u00e9rigord Pourpre Festival in Monpazier\",\"image\":\"https:\\\/\\\/elaia-public.s3.fr-par.scw.cloud\\\/metadata_images\\\/image_6a5df83a63f9a.png\",\"credit\":\"\",\"description\":\"Summer musical concert in the fortified town, a lively and friendly musical atmosphere for a summer evening.\",\"city\":\"\",\"address\":\"\",\"km\":18,\"min\":20,\"lat\":44.8218,\"lng\":0.9123,\"tags\":[],\"fields\":[{\"label\":\"Nom\",\"value\":\"P\\u00e9rigord Pourpre Festival in Monpazier\"},{\"label\":\"Cat\\u00e9gorie d'\\u00e9v\\u00e9nement : (Musique, exposition, festival, foire, brocante, march\\u00e9, etc.)\",\"value\":\"Music Festival\"},{\"label\":\"Public cible : (Famille, enfants, adultes, seniors, adolescents, etc.)\",\"value\":\"Family, adults\"},{\"label\":\"R\\u00e9servation (oui\\\/non)\",\"value\":\"Non\"},{\"label\":\"Horaires\",\"value\":\"August 4, 2025\"},{\"label\":\"Informations pratiques et contact\",\"value\":\"Inquire with the Monpazier tourist office\"},{\"label\":\"Distance depuis l'h\\u00f4tel : (en km)\",\"value\":\"18\"},{\"label\":\"Temps de route depuis l'h\\u00f4tel (en min)\",\"value\":\"20\"},{\"label\":\"Informations et contact\",\"value\":\"Monpazier Tourist Office, phone: +33 5 53 27 97 63\"},{\"label\":\"Langues parl\\u00e9es\",\"value\":\"French\"},{\"label\":\"Animaux : (Accept\\u00e9s ou non)\",\"value\":\"Not allowed\"}],\"link\":\"\",\"event\":\"\",\"faq\":[{\"question\":\"Should I buy my tickets in advance?\",\"answer\":\"\"},{\"question\":\"Where can I find the full program?\",\"answer\":\"\"},{\"question\":\"Is there a dedicated parking or shuttle service?\",\"answer\":\"\"},{\"question\":\"How long does the event last?\",\"answer\":\"\"},{\"question\":\"Is this event suitable for children?\",\"answer\":\"\"},{\"question\":\"Is it suitable for seniors or PWD?\",\"answer\":\"\"},{\"question\":\"Is it more family, festive, or cultural?\",\"answer\":\"\"},{\"question\":\"Is there an age limit for certain activities?\",\"answer\":\"\"},{\"question\":\"Are there discounted rates (family, children, seniors)?\",\"answer\":\"\"},{\"question\":\"Should a budget be prepared on-site (catering, refreshment bar, artisans)?\",\"answer\":\"\"},{\"question\":\"Is there on-site catering or local producers?\",\"answer\":\"\"},{\"question\":\"Can you find crafts or souvenirs there?\",\"answer\":\"\"},{\"question\":\"Is the event held indoors or outdoors?\",\"answer\":\"\"},{\"question\":\"What time is it best to arrive to avoid the crowds?\",\"answer\":\"\"}],\"video_url\":\"\",\"video_embed\":null,\"documents\":[],\"gallery\":[]},{\"id\":13,\"featurable\":true,\"type\":\"evenements-aux-alentours\",\"name\":\"Macadam Jazz at P\\u00e9rigueux\",\"image\":\"https:\\\/\\\/elaia-public.s3.fr-par.scw.cloud\\\/metadata_images\\\/image_6a5df2739c028.jpg\",\"credit\":\"\",\"description\":\"Free jazz festival with concerts in the streets and squares of P\\u00e9rigueux during summer.\",\"city\":\"\",\"address\":\"\",\"km\":40,\"min\":45,\"lat\":45.1865,\"lng\":0.7226,\"tags\":[],\"fields\":[{\"label\":\"Nom\",\"value\":\"Macadam Jazz at P\\u00e9rigueux\"},{\"label\":\"Cat\\u00e9gorie d'\\u00e9v\\u00e9nement : (Musique, exposition, festival, foire, brocante, march\\u00e9, etc.)\",\"value\":\"Music festival\"},{\"label\":\"Public cible : (Famille, enfants, adultes, seniors, adolescents, etc.)\",\"value\":\"Family, adults, teenagers\"},{\"label\":\"R\\u00e9servation (oui\\\/non)\",\"value\":\"Non\"},{\"label\":\"Horaires\",\"value\":\"July - August\"},{\"label\":\"Informations pratiques et contact\",\"value\":\"P\\u00e9rigueux Tourist Office, contact at the camping reception\"},{\"label\":\"Distance depuis l'h\\u00f4tel : (en km)\",\"value\":\"40\"},{\"label\":\"Temps de route depuis l'h\\u00f4tel (en min)\",\"value\":\"45\"},{\"label\":\"Informations et contact\",\"value\":\"P\\u00e9rigueux Tourist Office, +33 5 53 53 08 00\"},{\"label\":\"Langues parl\\u00e9es\",\"value\":\"French\"},{\"label\":\"Animaux : (Accept\\u00e9s ou non)\",\"value\":\"Not allowed\"}],\"link\":\"\",\"event\":\"\",\"faq\":[{\"question\":\"Is it necessary to buy tickets in advance?\",\"answer\":\"\"},{\"question\":\"Where can I find the full program?\",\"answer\":\"\"},{\"question\":\"Is there a dedicated parking or shuttle service?\",\"answer\":\"\"},{\"question\":\"How long does the event last?\",\"answer\":\"\"},{\"question\":\"Is this event suitable for children?\",\"answer\":\"\"},{\"question\":\"Is it suitable for seniors or persons with reduced mobility?\",\"answer\":\"\"},{\"question\":\"Is it more family-oriented, festive, or cultural?\",\"answer\":\"\"},{\"question\":\"Is there an age limit for certain activities?\",\"answer\":\"\"},{\"question\":\"Are there discounted rates (family, children, seniors)?\",\"answer\":\"\"},{\"question\":\"Should on-site budget be planned (catering, refreshment stand, artisans)?\",\"answer\":\"\"},{\"question\":\"Is there on-site catering or local producers?\",\"answer\":\"\"},{\"question\":\"Can craft or souvenirs be found there?\",\"answer\":\"\"},{\"question\":\"Is the event indoors or outdoors?\",\"answer\":\"\"},{\"question\":\"What is the best time to arrive to avoid the crowds?\",\"answer\":\"\"}],\"video_url\":\"\",\"video_embed\":null,\"documents\":[],\"gallery\":[]},{\"id\":14,\"featurable\":true,\"type\":\"evenements-aux-alentours\",\"name\":\"European Heritage Days\",\"image\":\"https:\\\/\\\/elaia-public.s3.fr-par.scw.cloud\\\/metadata_images\\\/image_6a5df6e074a1c.jpg\",\"credit\":\"\",\"description\":\"Free or guided visits to historical monuments across the department, showcasing the local cultural heritage.\",\"city\":\"\",\"address\":\"\",\"km\":10,\"min\":15,\"lat\":null,\"lng\":null,\"tags\":[],\"fields\":[{\"label\":\"Nom\",\"value\":\"European Heritage Days\"},{\"label\":\"Cat\\u00e9gorie d'\\u00e9v\\u00e9nement : (Musique, exposition, festival, foire, brocante, march\\u00e9, etc.)\",\"value\":\"Heritage \\\/ Guided tours\"},{\"label\":\"Public cible : (Famille, enfants, adultes, seniors, adolescents, etc.)\",\"value\":\"Family, adults, seniors\"},{\"label\":\"R\\u00e9servation (oui\\\/non)\",\"value\":\"Non\"},{\"label\":\"Horaires\",\"value\":\"September 20 and 21, 2025\"},{\"label\":\"Informations pratiques et contact\",\"value\":\"Campaign in P\\u00e9rigord, contact at the camping reception\"},{\"label\":\"Distance depuis l'h\\u00f4tel : (en km)\",\"value\":\"10 to 50 km depending on sites\"},{\"label\":\"Temps de route depuis l'h\\u00f4tel (en min)\",\"value\":\"15 to 50\"},{\"label\":\"Informations et contact\",\"value\":\"Contact via Dordogne tourist office\"},{\"label\":\"Langues parl\\u00e9es\",\"value\":\"French\"},{\"label\":\"Animaux : (Accept\\u00e9s ou non)\",\"value\":\"Not accepted\"}],\"link\":\"\",\"event\":\"\",\"faq\":[{\"question\":\"Should I buy my tickets in advance?\",\"answer\":\"\"},{\"question\":\"Where can I find the full program?\",\"answer\":\"\"},{\"question\":\"Is there dedicated parking or a shuttle service?\",\"answer\":\"\"},{\"question\":\"How long does the event last?\",\"answer\":\"\"},{\"question\":\"Is this event suitable for children?\",\"answer\":\"\"},{\"question\":\"Is it suitable for seniors or those with reduced mobility?\",\"answer\":\"\"},{\"question\":\"Is it more family-oriented, festive, or cultural?\",\"answer\":\"\"},{\"question\":\"Is there an age limit for certain activities?\",\"answer\":\"\"},{\"question\":\"Are there reduced rates (family, children, seniors)?\",\"answer\":\"\"},{\"question\":\"Is there a need to plan a budget on site (food, drinks, artisans)?\",\"answer\":\"\"},{\"question\":\"Is there local food or producers on site?\",\"answer\":\"\"},{\"question\":\"Can craft or souvenirs be found there?\",\"answer\":\"\"},{\"question\":\"Is the event indoors or outdoors?\",\"answer\":\"\"},{\"question\":\"What time is best to arrive to avoid the crowds?\",\"answer\":\"\"}],\"video_url\":\"\",\"video_embed\":null,\"documents\":[],\"gallery\":[]},{\"id\":15,\"featurable\":true,\"type\":\"evenements-aux-alentours\",\"name\":\"Bastides en F\\u00eate at Beaumont du P\\u00e9rigord\",\"image\":\"https:\\\/\\\/elaia-public.s3.fr-par.scw.cloud\\\/metadata_images\\\/image_6a5df708543d9.png\",\"credit\":\"\",\"description\":\"Large medieval gathering with craft markets, performances, and historical animations over a weekend.\",\"city\":\"\",\"address\":\"\",\"km\":12,\"min\":15,\"lat\":44.8462,\"lng\":0.9452,\"tags\":[],\"fields\":[{\"label\":\"Nom\",\"value\":\"Bastides en F\\u00eate at Beaumont du P\\u00e9rigord\"},{\"label\":\"Cat\\u00e9gorie d'\\u00e9v\\u00e9nement : (Musique, exposition, festival, foire, brocante, march\\u00e9, etc.)\",\"value\":\"Medieval festival \\\/ Craft market\"},{\"label\":\"Public cible : (Famille, enfants, adultes, seniors, adolescents, etc.)\",\"value\":\"Family, adults, teenagers\"},{\"label\":\"R\\u00e9servation (oui\\\/non)\",\"value\":\"Non\"},{\"label\":\"Horaires\",\"value\":\"October 25 and 26, 2025\"},{\"label\":\"Informations pratiques et contact\",\"value\":\"Inquire at the camping reception or tourist office\"},{\"label\":\"Distance depuis l'h\\u00f4tel : (en km)\",\"value\":\"12\"},{\"label\":\"Temps de route depuis l'h\\u00f4tel (en min)\",\"value\":\"15\"},{\"label\":\"Informations et contact\",\"value\":\"Aquitaine Online, Beaumont du P\\u00e9rigord, +33 5 53 27 88 88\"},{\"label\":\"Langues parl\\u00e9es\",\"value\":\"French\"},{\"label\":\"Animaux : (Accept\\u00e9s ou non)\",\"value\":\"Not accepted\"}],\"link\":\"\",\"event\":\"\",\"faq\":[{\"question\":\"Faut-il acheter ses billets \\u00e0 l'avance ?\",\"answer\":\"\"},{\"question\":\"O\\u00f9 trouver le programme complet ?\",\"answer\":\"\"},{\"question\":\"Y a-t-il un parking d\\u00e9di\\u00e9 ou un service de navette ?\",\"answer\":\"\"},{\"question\":\"How long does the event last?\",\"answer\":\"\"},{\"question\":\"Is this event suitable for children?\",\"answer\":\"\"},{\"question\":\"Is it suitable for seniors or PMR?\",\"answer\":\"\"},{\"question\":\"Is it more family, festive, or cultural?\",\"answer\":\"\"},{\"question\":\"Is there an age limit for certain activities?\",\"answer\":\"\"},{\"question\":\"Are there discounted rates (family, children, seniors)?\",\"answer\":\"\"},{\"question\":\"Should a budget be planned on-site (meals, drinks, artisans)?\",\"answer\":\"\"},{\"question\":\"Is there local food or local producers on-site?\",\"answer\":\"\"},{\"question\":\"Can artisanal crafts or souvenirs be found there?\",\"answer\":\"\"},{\"question\":\"Is the event held indoors or outdoors?\",\"answer\":\"\"},{\"question\":\"What time is best to arrive to avoid the crowds?\",\"answer\":\"\"}],\"video_url\":\"\",\"video_embed\":null,\"documents\":[],\"gallery\":[]},{\"id\":16,\"featurable\":true,\"type\":\"evenements-aux-alentours\",\"name\":\"Musique en P\\u00e9rigord \\\/ Summer music in Bergerac\",\"image\":\"https:\\\/\\\/elaia-public.s3.fr-par.scw.cloud\\\/metadata_images\\\/image_6a5df2ac40d54.png\",\"credit\":\"\",\"description\":\"Open-air concerts and music evenings throughout the Dordogne department in June, July, and August.\",\"city\":\"\",\"address\":\"\",\"km\":55,\"min\":55,\"lat\":44.8491,\"lng\":0.487,\"tags\":[],\"fields\":[{\"label\":\"Nom\",\"value\":\"Musique en P\\u00e9rigord \\\/ Summer music in Bergerac\"},{\"label\":\"Cat\\u00e9gorie d'\\u00e9v\\u00e9nement : (Musique, exposition, festival, foire, brocante, march\\u00e9, etc.)\",\"value\":\"Music festival\"},{\"label\":\"Public cible : (Famille, enfants, adultes, seniors, adolescents, etc.)\",\"value\":\"Family, adults\"},{\"label\":\"R\\u00e9servation (oui\\\/non)\",\"value\":\"Non\"},{\"label\":\"Horaires\",\"value\":\"June to August\"},{\"label\":\"Informations pratiques et contact\",\"value\":\"Inquire at the Bergerac tourist office\"},{\"label\":\"Distance depuis l'h\\u00f4tel : (en km)\",\"value\":\"55\"},{\"label\":\"Temps de route depuis l'h\\u00f4tel (en min)\",\"value\":\"55\"},{\"label\":\"Informations et contact\",\"value\":\"Bergerac Tourist Office, phone: +33 5 53 57 01 97\"},{\"label\":\"Langues parl\\u00e9es\",\"value\":\"French\"},{\"label\":\"Animaux : (Accept\\u00e9s ou non)\",\"value\":\"Not allowed\"}],\"link\":\"\",\"event\":\"\",\"faq\":[{\"question\":\"Is it necessary to buy tickets in advance?\",\"answer\":\"\"},{\"question\":\"Where can I find the full program?\",\"answer\":\"\"},{\"question\":\"Is there a dedicated parking or shuttle service?\",\"answer\":\"\"},{\"question\":\"How long does the event last?\",\"answer\":\"\"},{\"question\":\"Is this event suitable for children?\",\"answer\":\"\"},{\"question\":\"Is it suitable for seniors or disabled persons?\",\"answer\":\"\"},{\"question\":\"Is it mainly family-oriented, festive, or cultural?\",\"answer\":\"\"},{\"question\":\"Is there an age limit for certain activities?\",\"answer\":\"\"},{\"question\":\"Are there discounted rates (family, children, seniors)?\",\"answer\":\"\"},{\"question\":\"Should a budget be planned on-site (food, drinks, artisans)?\",\"answer\":\"\"},{\"question\":\"Is there catering or local producers on site?\",\"answer\":\"Le moulin de surier hosts its welcome drink with a local market made up of local producers. The guinguette opens from Tuesday to Sunday.\"},{\"question\":\"Can you find crafts or souvenirs there?\",\"answer\":\"Yes, it is possible to buy handcrafted products and souvenirs at the village's bastide.\"},{\"question\":\"Is the event held indoors or outdoors?\",\"answer\":\"\"},{\"question\":\"What is the best time to arrive to avoid the crowd?\",\"answer\":\"\"}],\"video_url\":\"\",\"video_embed\":null,\"documents\":[],\"gallery\":[]},{\"id\":17,\"featurable\":true,\"type\":\"evenements-aux-alentours\",\"name\":\"Local Theater Festival in Villefranche en P\\u00e9rigord\",\"image\":\"https:\\\/\\\/elaia-public.s3.fr-par.scw.cloud\\\/metadata_images\\\/image_6a5df18b7f04a.png\",\"credit\":\"\",\"description\":\"This theater festival runs from April to the end of May with various plays and activities in nearby villages. It's a great opportunity to discover local culture and regional talents in a friendly atmosphere.\",\"city\":\"\",\"address\":\"\",\"km\":15,\"min\":20,\"lat\":44.853,\"lng\":0.913,\"tags\":[],\"fields\":[{\"label\":\"Nom\",\"value\":\"Local Theater Festival in Villefranche en P\\u00e9rigord\"},{\"label\":\"Cat\\u00e9gorie d'\\u00e9v\\u00e9nement : (Musique, exposition, festival, foire, brocante, march\\u00e9, etc.)\",\"value\":\"Festival\"},{\"label\":\"Public cible : (Famille, enfants, adultes, seniors, adolescents, etc.)\",\"value\":\"Family, adults, teenagers\"},{\"label\":\"R\\u00e9servation (oui\\\/non)\",\"value\":\"non\"},{\"label\":\"Horaires\",\"value\":\"Variable depending on performances, usually in the evening\"},{\"label\":\"Informations pratiques et contact\",\"value\":\"Information at the local tourist office or at the campsite\"},{\"label\":\"Distance depuis l'h\\u00f4tel : (en km)\",\"value\":\"15\"},{\"label\":\"Temps de route depuis l'h\\u00f4tel (en min)\",\"value\":\"20\"},{\"label\":\"Informations et contact\",\"value\":\"Tourist Office of Villefranche en P\\u00e9rigord, phone: +33 5 53 58 57 60\"},{\"label\":\"Langues parl\\u00e9es\",\"value\":\"French\"},{\"label\":\"Animaux : (Accept\\u00e9s ou non)\",\"value\":\"non\"}],\"link\":\"\",\"event\":\"\",\"faq\":[{\"question\":\"Is it necessary to buy tickets in advance?\",\"answer\":\"It is recommended to reserve or buy tickets in advance to ensure your spot, especially on weekends.\"},{\"question\":\"Where can I find the full program?\",\"answer\":\"The full program is available at the Villefranche en P\\u00e9rigord tourist office and on their website.\"},{\"question\":\"Is there a dedicated parking or shuttle service?\",\"answer\":\"A parking lot is available near the performance venues, shuttles are not planned.\"},{\"question\":\"How long does the event last?\",\"answer\":\"The festival lasts about two months, from April to late May.\"},{\"question\":\"Is this event suitable for children?\",\"answer\":\"Yes, some shows are suitable for children aged 6 and up.\"},{\"question\":\"Is it suitable for seniors or people with disabilities?\",\"answer\":\"Yes, the event is suitable for seniors and people with reduced mobility, with accessible access.\"},{\"question\":\"Is it more family, festive, or cultural?\",\"answer\":\"This event is more cultural with a friendly atmosphere.\"},{\"question\":\"Is there an age limit for certain activities?\",\"answer\":\"Some pieces may not be suitable for very young children, check the program.\"},{\"question\":\"Are there discounted rates (family, children, seniors)?\",\"answer\":\"Yes, discounted rates are offered for children and seniors.\"},{\"question\":\"Should a budget be planned on site (food, drinks, artisans)?\",\"answer\":\"Plan a budget for local on-site catering.\"},{\"question\":\"Is there local catering or producers on site?\",\"answer\":\"Yes, local producers offer catering and artisanal products.\"},{\"question\":\"Can you find crafts or souvenirs there?\",\"answer\":\"Yes, you can find crafts and theatre-related souvenirs.\"},{\"question\":\"Is the event indoors or outdoors?\",\"answer\":\"Mostly indoors in theatre halls but sometimes street performances outdoors.\"},{\"question\":\"What is the best time to arrive to avoid the crowd?\",\"answer\":\"It is best to arrive 30 minutes before the show starts to avoid the crowds.\"}],\"video_url\":\"\",\"video_embed\":null,\"documents\":[],\"gallery\":[]},{\"id\":18,\"featurable\":true,\"type\":\"evenements-aux-alentours\",\"name\":\"Night Gourmet Market in Beaumont du P\\u00e9rigord\",\"image\":\"https:\\\/\\\/elaia-public.s3.fr-par.scw.cloud\\\/metadata_images\\\/image_6a5df7d70a76c.png\",\"credit\":\"\",\"description\":\"Night gourmet market with local products, shared meals at the table, and a friendly musical atmosphere.\",\"city\":\"\",\"address\":\"\",\"km\":12,\"min\":15,\"lat\":44.8462,\"lng\":0.9452,\"tags\":[],\"fields\":[{\"label\":\"Nom\",\"value\":\"Night Gourmet Market in Beaumont du P\\u00e9rigord\"},{\"label\":\"Cat\\u00e9gorie d'\\u00e9v\\u00e9nement : (Musique, exposition, festival, foire, brocante, march\\u00e9, etc.)\",\"value\":\"Gourmet market\"},{\"label\":\"Public cible : (Famille, enfants, adultes, seniors, adolescents, etc.)\",\"value\":\"Family, Adults\"},{\"label\":\"R\\u00e9servation (oui\\\/non)\",\"value\":\"Non\"},{\"label\":\"Horaires\",\"value\":\"Every summer Monday, from June to September, from 6:30 PM \\\/ 7:00 PM\"},{\"label\":\"Informations pratiques et contact\",\"value\":\"Place Jean Moulin, Beaumont du P\\u00e9rigord, contact at the camping reception\"},{\"label\":\"Distance depuis l'h\\u00f4tel : (en km)\",\"value\":\"12\"},{\"label\":\"Temps de route depuis l'h\\u00f4tel (en min)\",\"value\":\"15\"},{\"label\":\"Informations et contact\",\"value\":\"Tourist Office Beaumont du P\\u00e9rigord, phone: +33 5 53 27 88 88\"},{\"label\":\"Langues parl\\u00e9es\",\"value\":\"French\"},{\"label\":\"Animaux : (Accept\\u00e9s ou non)\",\"value\":\"Not accepted\"}],\"link\":\"\",\"event\":\"\",\"faq\":[{\"question\":\"Is it necessary to buy tickets in advance?\",\"answer\":\"\"},{\"question\":\"Where can I find the full program?\",\"answer\":\"\"},{\"question\":\"Is there a dedicated parking or shuttle service?\",\"answer\":\"\"},{\"question\":\"How long does the event last?\",\"answer\":\"\"},{\"question\":\"Is this event suitable for children?\",\"answer\":\"\"},{\"question\":\"Is it suitable for seniors or people with reduced mobility?\",\"answer\":\"\"},{\"question\":\"Is it more family-oriented, festive, or cultural?\",\"answer\":\"\"},{\"question\":\"Is there an age limit for certain activities?\",\"answer\":\"\"},{\"question\":\"Are there any reduced rates (family, children, seniors)?\",\"answer\":\"\"},{\"question\":\"Should a budget be planned on-site (catering, drinks, artisans)?\",\"answer\":\"\"},{\"question\":\"Is there catering or local producers on site?\",\"answer\":\"\"},{\"question\":\"Can you find crafts or souvenirs there?\",\"answer\":\"\"},{\"question\":\"Is the event held indoors or outdoors?\",\"answer\":\"\"},{\"question\":\"What is the best time to arrive to avoid the crowds?\",\"answer\":\"\"}],\"video_url\":\"\",\"video_embed\":null,\"documents\":[],\"gallery\":[]}];\n    var CATS = {\"villes-aux-alentours\":{\"key\":\"villes-aux-alentours\",\"label\":\"Villes aux alentours\",\"adhoc\":false,\"color\":\"#c2410c\",\"count\":5,\"image\":\"https:\\\/\\\/elaia-public.s3.fr-par.scw.cloud\\\/metadata_images\\\/image_6a5de4d34b3ef.png\"},\"activites-aux-alentours\":{\"key\":\"activites-aux-alentours\",\"label\":\"Activit\\u00e9s aux alentours \",\"adhoc\":false,\"color\":\"#2563eb\",\"count\":5,\"image\":\"https:\\\/\\\/elaia-public.s3.fr-par.scw.cloud\\\/metadata_images\\\/image_6a5dec0a03711.png\"},\"evenements-aux-alentours\":{\"key\":\"evenements-aux-alentours\",\"label\":\"Evenements aux alentours\",\"adhoc\":false,\"color\":\"#15803d\",\"count\":9,\"image\":\"https:\\\/\\\/elaia-public.s3.fr-par.scw.cloud\\\/metadata_images\\\/image_6a5df2f024631.jpg\"}};\n    \/\/ Textes d'interface dans la langue de la page (includes\/i18n.php)\n    var T = {\"hero_title\":\"Things to discover nearby\",\"hero_text\":\"Villages, beaches, walks, good addresses and experiences selected around your stay.\",\"around\":\"Around\",\"search_placeholder\":\"Search for a place, an activity, a village\\u2026\",\"search\":\"Search\",\"max_distance\":\"Maximum distance\",\"all\":\"All\",\"prev_categories\":\"Previous categories\",\"next_categories\":\"Next categories\",\"categories\":\"Categories\",\"display\":\"Display\",\"list\":\"List\",\"map\":\"Map\",\"close\":\"Close\",\"featured\":\"Featured\",\"discover\":\"Discover\",\"idea\":\"idea\",\"ideas\":\"ideas\",\"around_you\":\"around you\",\"no_result\":\"No results\",\"no_result_hint\":\"Try another search, category or distance.\",\"pagination\":\"Ideas pagination\",\"prev_page\":\"Previous page\",\"next_page\":\"Next page\",\"ideas_title\":\"Ideas to suit your mood\",\"ideas_sub\":\"Suggestions to plan your perfect stay.\",\"reset_view\":\"Back to the overview\",\"map_hint\":\"Click a marker on the map to show its details here.\",\"official_site\":\"Official website\",\"video\":\"Video\",\"gallery\":\"Gallery\",\"documents\":\"Documents\",\"faq\":\"Frequently asked questions\",\"no_answer\":\"No answer yet.\",\"see_on_maps\":\"View on Google Maps\",\"see_place_on_maps\":\"View the campsite on Google Maps\",\"yes\":\"Yes\",\"no\":\"No\",\"practical_info\":\"Practical information\",\"reviews\":\"reviews\",\"read_more\":\"Read more\",\"prev_review\":\"Previous review\",\"next_review\":\"Next review\",\"prev_item\":\"Previous\",\"next_item\":\"Next\",\"photo_credit\":\"Photo: %s\",\"directions\":\"Directions\",\"read_less\":\"Show less\",\"stars_out_of_5\":\"%s stars out of 5\",\"owner_reply\":\"Response from the owner\",\"customer\":\"Guest\",\"customer_reviews\":\"Guest reviews\",\"rating_label\":\"Rated %1$s out of 5, %2$s reviews \\u2014 see the reviews\",\"reviews_by\":\"Reviews presented by Elaia\",\"powered_by\":\"Powered by\",\"today\":\"Today\",\"today_lc\":\"today\",\"tomorrow\":\"Tomorrow\",\"until\":\"Until %s\",\"from_to\":\"From %1$s to %2$s\",\"registration\":\"Booking required\",\"full\":\"Full\",\"all_animations\":\"See all activities \\u2192\",\"ago_day\":\"%d day ago\",\"ago_days\":\"%d days ago\",\"ago_week\":\"%d week ago\",\"ago_weeks\":\"%d weeks ago\",\"ago_month\":\"%d month ago\",\"ago_months\":\"%d months ago\",\"ago_year\":\"%d year ago\",\"ago_years\":\"%d years ago\",\"anim_unavailable\":\"The programme is temporarily unavailable\",\"anim_eyebrow\":\"Enjoy unforgettable moments\",\"anim_title\":\"Activities & events\",\"anim_hero_text\":\"Find all current activities, this week's highlights and upcoming events during your stay.\",\"anim_sections\":\"Page sections\",\"anim_nav_today\":\"Today\",\"anim_nav_week\":\"This week\",\"anim_nav_upcoming\":\"Upcoming\",\"anim_nav_calendar\":\"Calendar\",\"anim_where\":\"Where?\",\"anim_onsite\":\"On site\",\"anim_nearby\":\"Nearby\",\"anim_no_onsite\":\"No on-site activity at the moment\",\"anim_no_nearby\":\"No nearby event at the moment\",\"anim_all_day\":\"All day\",\"anim_at\":\"at %s\",\"anim_see_detail\":\"see details\",\"anim_live\":\"Ongoing\",\"anim_onsite_spot\":\"On site \\u00b7 %s\",\"anim_badge_until\":\"Until\",\"anim_badge_from\":\"From\",\"anim_badge_today\":\"Today\",\"anim_filter_cat\":\"Filter by category\",\"anim_all_f\":\"All\",\"anim_prev_day\":\"Previous day\",\"anim_next_day\":\"Next day\",\"anim_today_title\":\"Today's activities\",\"anim_tomorrow_title\":\"Tomorrow's activities\",\"anim_day_title\":\"Activities on %s\",\"anim_relax_today\":\"A relaxing day today\",\"anim_nothing_day\":\"Nothing planned that day\",\"anim_next_on\":\"Next event on %s.\",\"anim_soon\":\"The programme will be updated soon.\",\"anim_see_day\":\"See that day\",\"anim_prev_acts\":\"Previous activities\",\"anim_next_acts\":\"Next activities\",\"anim_prev_week\":\"Previous week\",\"anim_next_week\":\"Next week\",\"anim_week_title\":\"This week's highlights\",\"anim_next_week_title\":\"Next week\",\"anim_week_of\":\"Week of %s\",\"anim_week_days\":\"Days of the week\",\"anim_today_paren\":\"(today)\",\"anim_activity\":\"%d activity\",\"anim_activities\":\"%d activities\",\"anim_nothing\":\"nothing planned\",\"anim_pick_day\":\"Select another day to see its programme.\",\"anim_sort\":\"Sort events\",\"anim_sort_date\":\"Sort by date\",\"anim_sort_name\":\"Sort by name\",\"anim_upcoming_title\":\"All upcoming events\",\"anim_no_upcoming\":\"No upcoming events\",\"anim_try_cat\":\"Try another category.\",\"anim_more\":\"See more events (%d)\",\"anim_hide_cal\":\"Hide the calendar\",\"anim_show_cal\":\"See the full calendar\",\"anim_cal_title\":\"Monthly calendar\",\"anim_cal_sub\":\"All of the month's events at a glance.\",\"anim_prev_month\":\"Previous month\",\"anim_next_month\":\"Next month\",\"anim_more_info\":\"More information\",\"anim_new_tab\":\"(new tab)\",\"date_locale\":\"en-GB\",\"page_faq\":\"FAQ\",\"page_metadatas\":\"Discover around you\",\"page_animations\":\"Activities and events\",\"page_corpus\":\"Practical information\",\"anim_event\":\"Event\"};\n    var DECIMAL = \".\";\n    function plural(n) { return n + ' ' + (n > 1 ? T.ideas : T.idea); }\n    var MAP = {\"tiles_url\":\"https:\\\/\\\/tile.openstreetmap.org\\\/{z}\\\/{x}\\\/{y}.png\",\"attribution\":\"&copy; <a href=\\\"https:\\\/\\\/www.openstreetmap.org\\\/copyright\\\">OpenStreetMap<\\\/a>\",\"home\":null};\n    var ACCENT = \"#2e5e45\";\n    var STEP = 12;\n    var BY_ID = {};\n    ITEMS.forEach(function(it) {\n      BY_ID[it.id] = it;\n    });\n\n    var app = document.getElementById('mv-app');\n    if (!app) return;\n\n    var state = { selected: null, page: 1, q: '', km: 0, cat: 'all', limit: STEP, view: window.matchMedia('(max-width: 1100px)').matches ? 'list' : 'map' };\n\n    \/\/ \u2550\u2550\u2550 Ic\u00f4nes (SVG statiques) + ic\u00f4ne d\u00e9duite de la cat\u00e9gorie \u2550\u2550\u2550\n    var ICONS = {\n      grid: '<svg viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\"><rect x=\"4\" y=\"4\" width=\"6\" height=\"6\" rx=\"1\"\/><rect x=\"14\" y=\"4\" width=\"6\" height=\"6\" rx=\"1\"\/><rect x=\"4\" y=\"14\" width=\"6\" height=\"6\" rx=\"1\"\/><rect x=\"14\" y=\"14\" width=\"6\" height=\"6\" rx=\"1\"\/><\/svg>',\n      home: '<svg viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linejoin=\"round\"><path d=\"M3 11l9-7 9 7\"\/><path d=\"M5 10v10h14V10\"\/><path d=\"M10 20v-6h4v6\"\/><\/svg>',\n      beach: '<svg viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\"><path d=\"M12 3a9 9 0 0 1 9 9H3a9 9 0 0 1 9-9z\"\/><path d=\"M12 12v9M8 21h8\"\/><\/svg>',\n      leaf: '<svg viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\"><path d=\"M5 19c0-8 5-14 15-14 0 10-6 15-14 15\"\/><path d=\"M5 19l7-7\"\/><\/svg>',\n      family: '<svg viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\"><circle cx=\"8\" cy=\"6\" r=\"2.5\"\/><circle cx=\"16\" cy=\"6\" r=\"2.5\"\/><path d=\"M4 21v-6a4 4 0 0 1 8 0v6M12 21v-6a4 4 0 0 1 8 0v6\"\/><\/svg>',\n      food: '<svg viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\"><path d=\"M7 3v8a2 2 0 0 0 4 0V3M9 11v10M17 3c-2 0-3 2-3 5s1 4 3 4v9\"\/><\/svg>',\n      shop: '<svg viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linejoin=\"round\"><path d=\"M4 9l1.5-5h13L20 9\"\/><path d=\"M4 9h16v2a3 3 0 0 1-6 0 3 3 0 0 1-4 0 3 3 0 0 1-6 0z\"\/><path d=\"M5 13v7h14v-7\"\/><\/svg>',\n      calendar: '<svg viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\"><rect x=\"3\" y=\"5\" width=\"18\" height=\"16\" rx=\"2\"\/><path d=\"M16 3v4M8 3v4M3 10h18\"\/><\/svg>',\n      wine: '<svg viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\"><path d=\"M8 3h8l-.5 6a3.5 3.5 0 0 1-7 0z\"\/><path d=\"M12 13v8M8 21h8\"\/><\/svg>',\n      walk: '<svg viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\"><circle cx=\"13\" cy=\"4\" r=\"2\"\/><path d=\"M9 21l3-7 3 3v5M8 12l2-4 4 1 3 3\"\/><\/svg>',\n      bed: '<svg viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\"><path d=\"M3 18V7M3 14h18v4M21 14v-3a3 3 0 0 0-3-3h-7v6\"\/><circle cx=\"7\" cy=\"11\" r=\"2\"\/><\/svg>',\n      pool: '<svg viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\"><path d=\"M2 17c2 0 2-1.5 4-1.5S8 17 10 17s2-1.5 4-1.5 2 1.5 4 1.5 2-1.5 4-1.5M8 14V5a2 2 0 0 1 4 0M14 14V5a2 2 0 0 1 4 0M8 9h6\"\/><\/svg>',\n      info: '<svg viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\"><circle cx=\"12\" cy=\"12\" r=\"9\"\/><path d=\"M12 11v6M12 7.5v.5\"\/><\/svg>',\n      pin: '<svg viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\"><path d=\"M12 21s-7-6.2-7-11.5a7 7 0 0 1 14 0C19 14.8 12 21 12 21z\"\/><circle cx=\"12\" cy=\"9.5\" r=\"2.5\"\/><\/svg>',\n      car: '<svg viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\"><path d=\"M5 17h14M5 17v2M19 17v2M4 13l2-6h12l2 6v4H4z\"\/><circle cx=\"8\" cy=\"14.5\" r=\"0.5\"\/><circle cx=\"16\" cy=\"14.5\" r=\"0.5\"\/><\/svg>',\n      clock: '<svg viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\"><circle cx=\"12\" cy=\"12\" r=\"9\"\/><path d=\"M12 7v5l3 2\"\/><\/svg>',\n      star: '<svg viewBox=\"0 0 24 24\" fill=\"currentColor\"><path d=\"M12 3l2.8 5.7 6.2.9-4.5 4.4 1.1 6.2L12 17.3 6.4 20.2l1.1-6.2L3 9.6l6.2-.9z\"\/><\/svg>',\n      arrow: '<svg viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2.2\" stroke-linecap=\"round\" stroke-linejoin=\"round\"><path d=\"M5 12h14M13 6l6 6-6 6\"\/><\/svg>',\n      home: '<svg viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2.2\" stroke-linecap=\"round\" stroke-linejoin=\"round\"><path d=\"M12 3L3 19h18L12 3z\"\/><path d=\"M12 3v16M9 19l3-6 3 6\"\/><\/svg>',\n      reset: '<svg viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\"><path d=\"M4 9V4h5M20 15v5h-5M4 4l6 6M20 20l-6-6M15 4h5v5M9 20H4v-5\"\/><\/svg>',\n      maps: '<svg viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\"><path d=\"M9 4L3 6v14l6-2 6 2 6-2V4l-6 2-6-2z\"\/><path d=\"M9 4v14M15 6v14\"\/><\/svg>',\n      doc: '<svg viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linejoin=\"round\"><path d=\"M6 3h8l4 4v14H6z\"\/><path d=\"M14 3v4h4\"\/><\/svg>'\n    };\n\n    var ICON_RULES = [\n      [\/ville|village|city|alentour\/, 'home'],\n      [\/plage|beach|mer\\b\/, 'beach'],\n      [\/nature|balade|rando|parc|jardin\/, 'leaf'],\n      [\/famil|enfant|kid\/, 'family'],\n      [\/restau|gastro|repas|snack|bar\\b\/, 'food'],\n      [\/march|boutique|commerce|shop\/, 'shop'],\n      [\/evenement|\u00e9v\u00e9nement|event|agenda|atelier|animation\/, 'calendar'],\n      [\/vin|boisson|cave|terroir|bodega\/, 'wine'],\n      [\/activit|sport|loisir|lieu\/, 'walk'],\n      [\/heberg|locatif|accom|mobil\/, 'bed'],\n      [\/piscine|pool|aqua|pataug\/, 'pool'],\n      [\/service|equipement|\u00e9quipement|info\/, 'info']\n    ];\n\n    function catIcon(key) {\n      var c = CATS[key];\n      var hay = (key + ' ' + (c ? c.label : '')).toLowerCase();\n      for (var i = 0; i < ICON_RULES.length; i++) {\n        if (ICON_RULES[i][0].test(hay)) return ICON_RULES[i][1];\n      }\n      return 'pin';\n    }\n\n    function el(tag, cls, text) {\n      var n = document.createElement(tag);\n      if (cls) n.className = cls;\n      if (text != null) n.textContent = text;\n      return n;\n    }\n\n    function icon(name) {\n      var s = el('span', 'mv-icon');\n      s.setAttribute('aria-hidden', 'true');\n      s.innerHTML = ICONS[name] || ICONS.pin;\n      return s;\n    }\n\n    function catColor(key) {\n      return CATS[key] ? CATS[key].color : ACCENT;\n    }\n\n    function norm(s) {\n      return (s || '').toLowerCase().normalize('NFD').replace(\/[\u0300-\u036f]\/g, '');\n    }\n\n    \/\/ \u2550\u2550\u2550 Filtrage \u2550\u2550\u2550\n    function filtered() {\n      var q = norm(state.q.trim());\n      return ITEMS.filter(function(it) {\n        if (state.cat !== 'all' && it.type !== state.cat) return false;\n        \/\/ Distance : seules les fiches qui ont une distance connue sont filtr\u00e9es\n        if (state.km && it.km !== null && it.km > state.km) return false;\n        if (q) {\n          var hay = norm([it.name, it.city, it.description, (CATS[it.type] || {}).label, it.tags.join(' ')].join(' '));\n          if (hay.indexOf(q) === -1) return false;\n        }\n        return true;\n      });\n    }\n\n    \/\/ \u2550\u2550\u2550 Cat\u00e9gories \u2550\u2550\u2550\n    function renderCats() {\n      var box = document.getElementById('mv-cats');\n      box.innerHTML = '';\n      var all = el('button', 'mv-cat' + (state.cat === 'all' ? ' is-active' : ''));\n      all.type = 'button';\n      all.appendChild(icon('grid'));\n      all.appendChild(document.createTextNode(T.all));\n      all.addEventListener('click', function() {\n        setCat('all');\n      });\n      box.appendChild(all);\n      Object.keys(CATS).forEach(function(key) {\n        var b = el('button', 'mv-cat' + (state.cat === key ? ' is-active' : ''));\n        b.type = 'button';\n        b.style.setProperty('--mv-cat', catColor(key));\n        b.appendChild(icon(catIcon(key)));\n        b.appendChild(document.createTextNode(CATS[key].label));\n        b.addEventListener('click', function() {\n          setCat(key);\n        });\n        box.appendChild(b);\n      });\n      updateCatArrows();\n      var active = box.querySelector('.is-active');\n      if (active && active.scrollIntoView && active.offsetLeft + active.offsetWidth > box.scrollLeft + box.clientWidth) {\n        box.scrollLeft = active.offsetLeft - 80;\n      }\n    }\n\n    \/\/ Fl\u00e8ches de la ligne de cat\u00e9gories (visibles seulement s'il reste \u00e0 d\u00e9filer)\n    var catsWrap = document.getElementById('mv-cats-wrap');\n    var catsRow = document.getElementById('mv-cats');\n\n    function updateCatArrows() {\n      var max = catsRow.scrollWidth - catsRow.clientWidth;\n      catsWrap.classList.toggle('can-left', catsRow.scrollLeft > 4);\n      catsWrap.classList.toggle('can-right', catsRow.scrollLeft < max - 4);\n    }\n    catsRow.addEventListener('scroll', updateCatArrows, { passive: true });\n    window.addEventListener('resize', updateCatArrows);\n    catsWrap.querySelector('.mv-cats-arrow--left').addEventListener('click', function() {\n      catsRow.scrollBy({ left: -catsRow.clientWidth * 0.7, behavior: 'smooth' });\n    });\n    catsWrap.querySelector('.mv-cats-arrow--right').addEventListener('click', function() {\n      catsRow.scrollBy({ left: catsRow.clientWidth * 0.7, behavior: 'smooth' });\n    });\n\n    function setCat(key) {\n      state.cat = key;\n      state.limit = STEP;\n      state.page = 1;\n      renderCats();\n      renderList();\n    }\n\n    \/\/ \u2550\u2550\u2550 Cartes \u2550\u2550\u2550\n    function picture(it) {\n      if (!it.image) {\n        var ph = el('div', 'mv-card-noimg');\n        ph.appendChild(icon(catIcon(it.type)));\n        return ph;\n      }\n      var img = el('img');\n      img.src = it.image;\n      img.alt = it.name;\n      img.loading = 'lazy';\n      img.onerror = function() {\n        img.replaceWith(picture({ type: it.type, image: '' }));\n      };\n      return img;\n    }\n\n    function metaLine(it) {\n      var m = el('p', 'mv-meta');\n      if (it.km !== null) {\n        var a = el('span');\n        a.appendChild(icon('car'));\n        a.appendChild(document.createTextNode(String(it.km).replace('.', DECIMAL) + ' km'));\n        m.appendChild(a);\n      }\n      if (it.min !== null) {\n        var b = el('span');\n        b.appendChild(icon('clock'));\n        b.appendChild(document.createTextNode(it.min + ' min'));\n        m.appendChild(b);\n      }\n      if (it.km === null && it.min === null && it.city) {\n        var c = el('span');\n        c.appendChild(icon('pin'));\n        c.appendChild(document.createTextNode(it.city));\n        m.appendChild(c);\n      }\n      return m.childNodes.length ? m : null;\n    }\n\n    function card(it, featured, mini) {\n      var c = el('article', 'mv-card' + (featured ? ' mv-card--featured' : '') + (mini ? ' mv-card--mini' : ''));\n      c.tabIndex = 0;\n      c.dataset.id = it.id;\n      c.style.setProperty('--mv-cat', catColor(it.type));\n\n      var media = el('div', 'mv-card-media');\n      media.appendChild(picture(it));\n      if (!featured && !mini && CATS[it.type]) media.appendChild(el('span', 'mv-pill', CATS[it.type].label));\n      \/\/ Les mini-cartes aussi : la photo y est petite, mais c'est la m\u00eame photo,\n      \/\/ et la licence ne pr\u00e9voit pas d'exception de taille.\n      if (it.credit) {\n        var cr = el('span', 'mv-credit', '\u00a9');\n        cr.title = 'Photo : ' + it.credit;\n        cr.setAttribute('aria-label', 'Photo : ' + it.credit);\n        cr.setAttribute('data-credit', 'Photo : ' + it.credit);\n        media.appendChild(cr);\n      }\n      c.appendChild(media);\n\n      var body = el('div', 'mv-card-body');\n      if (featured) {\n        var flag = el('span', 'mv-flag');\n        flag.appendChild(icon('star'));\n        flag.appendChild(document.createTextNode(T.featured));\n        body.appendChild(flag);\n      }\n      if (mini && CATS[it.type]) body.appendChild(el('span', 'mv-pill', CATS[it.type].label));\n      body.appendChild(el('h3', 'mv-card-title', it.name));\n      var meta = metaLine(it);\n      if (meta) body.appendChild(meta);\n      if (it.description) body.appendChild(el('p', 'mv-card-desc', it.description));\n      if (!featured && !mini && it.tags.length) {\n        var tags = el('div', 'mv-tags');\n        it.tags.forEach(function(t) {\n          tags.appendChild(el('span', 'mv-tag', t));\n        });\n        body.appendChild(tags);\n      }\n      var foot = el('div', 'mv-card-foot');\n      var btn = el('button', 'mv-discover', T.discover);\n      btn.type = 'button';\n      btn.appendChild(icon('arrow'));\n      foot.appendChild(btn);\n      body.appendChild(foot);\n      c.appendChild(body);\n\n      c.addEventListener('click', function() {\n        openModal(it);\n      });\n      c.addEventListener('keydown', function(e) {\n        if (e.key === 'Enter') openModal(it);\n      });\n      if (mini) return c;\n      c.addEventListener('mouseenter', function() {\n        highlightPin(it.id, true);\n      });\n      c.addEventListener('mouseleave', function() {\n        highlightPin(it.id, false);\n      });\n      return c;\n    }\n\n    function renderList() {\n      var list = filtered();\n      var grid = document.getElementById('mv-grid');\n      var more = document.getElementById('mv-more');\n      grid.innerHTML = '';\n      more.innerHTML = '';\n\n      var count = document.getElementById('mv-count');\n      count.innerHTML = '';\n      count.appendChild(el('strong', null, plural(list.length)));\n      count.appendChild(document.createTextNode(' ' + T.around_you));\n\n      if (!list.length) {\n        var empty = el('div', 'mv-empty');\n        empty.appendChild(el('strong', null, T.no_result));\n        empty.appendChild(document.createTextNode(T.no_result_hint));\n        grid.appendChild(empty);\n      }\n\n      \/\/ Pagination : 4 rang\u00e9es pleines par page, selon le nombre de colonnes affich\u00e9es.\n      \/\/ La fiche \u00ab \u00c0 la une \u00bb occupe 2 cases : la 1re page a donc une fiche de moins.\n      var cols = gridColumns();\n      var perPage = cols === 1 ? 8 : cols * 4;\n      var featuredOn = !state.q && list.length > 2 && !!list[0].image && !!list[0].featurable && cols > 1;\n      var first = featuredOn ? perPage - 1 : perPage;\n      var pages = list.length <= first ? 1 : 1 + Math.ceil((list.length - first) \/ perPage);\n      if (state.page > pages) state.page = pages;\n      var start = state.page === 1 ? 0 : first + (state.page - 2) * perPage;\n      var end = state.page === 1 ? first : start + perPage;\n\n      list.slice(start, end).forEach(function(it, i) {\n        grid.appendChild(card(it, featuredOn && state.page === 1 && i === 0));\n      });\n\n      if (pages > 1) renderPager(more, pages);\n\n      updateMap(list);\n    }\n\n    \/**\n     * Remonte au bloc demand\u00e9, sous l'en-t\u00eate fixe du th\u00e8me. Apr\u00e8s le rendu\n     * (image suivante) : la liste vient de changer de hauteur \u2014 28 pages qui\n     * deviennent une \u2014 et une position calcul\u00e9e avant tombait trop haut ou\n     * trop bas selon la cat\u00e9gorie cliqu\u00e9e.\n     *\/\n    var appRoot = document.getElementById('mv-app');\n    if (appRoot) appRoot.style.overflowAnchor = 'none';\n\n    function scrollToBlock(id) {\n      requestAnimationFrame(function() {\n        var target = document.getElementById(id);\n        if (!target) return;\n        var top = target.getBoundingClientRect().top + window.pageYOffset - headerOffset() - 16;\n        window.scrollTo({ top: Math.max(0, top), behavior: 'smooth' });\n      });\n    }\n\n    \/** Nombre de colonnes de la grille (d\u00e9pend de la largeur disponible) *\/\n    function gridColumns() {\n      var g = document.getElementById('mv-grid');\n      var n = g ? getComputedStyle(g).gridTemplateColumns.split(' ').filter(Boolean).length : 3;\n      return Math.max(1, n || 3);\n    }\n\n    function renderPager(box, pages) {\n      box.setAttribute('role', 'navigation');\n      box.setAttribute('aria-label', T.pagination);\n      var go = function(n) {\n        state.page = n;\n        try {\n          renderList();\n        } finally {\n          scrollToBlock('mv-count');\n        }\n      };\n      var btn = function(label, n, opts) {\n        var b = el('button', 'mv-page', label);\n        b.type = 'button';\n        if (opts.aria) b.setAttribute('aria-label', opts.aria);\n        if (opts.current) b.setAttribute('aria-current', 'page');\n        b.disabled = !!opts.disabled;\n        b.addEventListener('click', function() {\n          if (!opts.current) go(n);\n        });\n        box.appendChild(b);\n      };\n      btn('\u2039', state.page - 1, { disabled: state.page === 1, aria: T.prev_page });\n      var last = 0;\n      for (var p = 1; p <= pages; p++) {\n        if (p === 1 || p === pages || Math.abs(p - state.page) <= 1) {\n          if (p - last > 1) box.appendChild(el('span', 'mv-page-gap', '\u2026'));\n          btn(String(p), p, { current: p === state.page, aria: 'Page ' + p });\n          last = p;\n        }\n      }\n      btn('\u203a', state.page + 1, { disabled: state.page === pages, aria: T.next_page });\n    }\n\n    \/\/ \u2550\u2550\u2550 Id\u00e9es selon vos envies (cat\u00e9gories les plus fournies) \u2550\u2550\u2550\n    function renderIdeas() {\n      var sec = document.getElementById('mv-ideas');\n      \/\/ Les fiches sans gabarit (\u00ab Infos pratiques \u00bb) ne sont pas une envie.\n      var keys = Object.keys(CATS).filter(function(k) { return !CATS[k].adhoc; }).sort(function(a, b) {\n        return (CATS[b].image ? 1 : 0) - (CATS[a].image ? 1 : 0) || CATS[b].count - CATS[a].count;\n      }).slice(0, 4);\n      if (keys.length < 2) return;\n\n      var head = el('div', 'mv-ideas-head');\n      var h = el('h2', 'mv-ideas-title', T.ideas_title);\n      h.id = 'mv-ideas-title';\n      head.appendChild(h);\n      head.appendChild(el('p', 'mv-ideas-sub', T.ideas_sub));\n      sec.appendChild(head);\n\n      var grid = el('div', 'mv-ideas-grid');\n      keys.forEach(function(key) {\n        var c = CATS[key];\n        var b = el('button', 'mv-idea');\n        b.type = 'button';\n        b.style.setProperty('--mv-cat', c.color);\n        var img = el('span', 'mv-idea-img');\n        if (c.image) img.style.backgroundImage = 'url(\"' + c.image.replace(\/\"\/g, '%22') + '\")';\n        b.appendChild(img);\n        var body = el('span', 'mv-idea-body');\n        body.appendChild(icon(catIcon(key)));\n        var txt = el('span', 'mv-idea-text');\n        txt.appendChild(el('strong', null, c.label));\n        txt.appendChild(el('span', null, plural(c.count)));\n        body.appendChild(txt);\n        body.appendChild(icon('arrow'));\n        b.appendChild(body);\n        b.addEventListener('click', function() {\n          try {\n            setCat(key);\n          } finally {\n            scrollToBlock('mv-cats');\n          }\n        });\n        grid.appendChild(b);\n      });\n      sec.appendChild(grid);\n    }\n\n    \/\/ \u2550\u2550\u2550 Carte Leaflet \u2550\u2550\u2550\n    var map = null,\n      layer = null,\n      homeMarker = null,\n      radius = null,\n      resetBtn = null,\n      fitting = false, \/\/ cadrage lanc\u00e9 par le code (et non par l'utilisateur)\n      overview = null, \/\/ dernier cadrage \u00ab vue d'ensemble \u00bb\n      pins = {};\n\n    \/\/ Copie de Leaflet utilis\u00e9e pour TOUTE la carte. Sur certains sites (th\u00e8me qui\n    \/\/ d\u00e9place les scripts avec jQuery, WP Rocket\u2026) Leaflet s'ex\u00e9cute deux fois : la\n    \/\/ 2e copie \u00e9crase window.L alors que markercluster s'est attach\u00e9 \u00e0 la 1re.\n    \/\/ M\u00e9langer les deux copies rend les rep\u00e8res invisibles et casse le regroupement.\n    var Lf = null;\n\n    function resolveLeaflet() {\n      var cur = window.L;\n      if (!cur) return null;\n      if (typeof cur.markerClusterGroup === 'function' && typeof cur.MarkerClusterGroup === 'function') return cur;\n      if (typeof cur.noConflict === 'function') {\n        var current = cur.noConflict(); \/\/ window.L \u2190 copie pr\u00e9c\u00e9dente\n        var previous = window.L;\n        if (previous && previous !== current && typeof previous.MarkerClusterGroup === 'function') {\n          \/\/ markercluster lit window.L \u00e0 chaque action (clic, zoom) : on remet\n          \/\/ durablement la copie qui le porte (l'autre n'est qu'un doublon de la m\u00eame version).\n          \/\/ Sans \u00e7a, les identifiants internes des deux copies se m\u00e9langent et les\n          \/\/ clics sur les rep\u00e8res \/ groupes sont perdus.\n          window.L = previous;\n          return previous;\n        }\n        window.L = current;\n      }\n      return null;\n    }\n\n    function pinIcon(color, hover, selected) {\n      return Lf.divIcon({\n        className: 'mv-pin' + (hover ? ' is-hover' : '') + (selected ? ' is-selected' : ''),\n        html: '<svg width=\"30\" height=\"39\" viewBox=\"0 0 28 36\"><path d=\"M14 35C14 35 26 22.5 26 13.5A12 12 0 0 0 2 13.5C2 22.5 14 35 14 35Z\" fill=\"' + color + '\" stroke=\"#fff\" stroke-width=\"2\"\/><circle cx=\"14\" cy=\"13.5\" r=\"4.5\" fill=\"#fff\"\/><\/svg>',\n        iconSize: [30, 39],\n        iconAnchor: [15, 39],\n        popupAnchor: [0, -34]\n      });\n    }\n\n    var mapTries = 0;\n\n    function initMap() {\n      var elMap = document.getElementById('mv-map');\n      if (!elMap) return;\n      \/\/ Attend Leaflet + markercluster (scripts parfois diff\u00e9r\u00e9s), 8 s max ;\n      \/\/ au-del\u00e0, carte sans regroupement plut\u00f4t que pas de carte.\n      Lf = resolveLeaflet();\n      if (!Lf) {\n        if (++mapTries < 80) return setTimeout(initMap, 100);\n        if (!window.L) return;\n        Lf = window.L;\n      }\n      map = Lf.map(elMap, { zoomControl: false, scrollWheelZoom: false, attributionControl: false }).setView([46.6, 1.9], 6);\n      \/\/ Garde-fou : si le th\u00e8me r\u00e9ex\u00e9cute Leaflet plus tard, on remet la bonne copie\n      \/\/ juste avant toute interaction (markercluster lit window.L au moment du clic).\n      ['pointerdown', 'mousedown', 'touchstart', 'click', 'wheel'].forEach(function(t) {\n        elMap.addEventListener(t, function() {\n          if (window.L !== Lf) window.L = Lf;\n        }, true);\n      });\n      Lf.tileLayer(MAP.tiles_url, { maxZoom: 19 }).addTo(map);\n      Lf.control.zoom({ position: 'bottomright' }).addTo(map);\n      Lf.control.attribution({ position: 'bottomleft', prefix: false }).addAttribution(MAP.attribution).addTo(map);\n\n      \/\/ \u00ab Revenir \u00e0 la vue d'ensemble \u00bb : appara\u00eet d\u00e8s que l'utilisateur zoome \/ d\u00e9place la carte\n      resetBtn = el('button', 'mv-reset');\n      resetBtn.type = 'button';\n      resetBtn.hidden = true;\n      resetBtn.appendChild(icon('reset'));\n      resetBtn.appendChild(document.createTextNode(T.reset_view));\n      resetBtn.addEventListener('click', function() {\n        fitOverview();\n        resetBtn.hidden = true;\n      });\n      elMap.appendChild(resetBtn);\n      Lf.DomEvent.disableClickPropagation(resetBtn);\n      map.on('zoomstart movestart', function() {\n        if (!fitting && resetBtn) resetBtn.hidden = false;\n      });\n\n      \/\/ Rep\u00e8re de l'\u00e9tablissement, toujours visible (hors regroupement)\n      if (MAP.home) {\n        homeMarker = Lf.marker([MAP.home.lat, MAP.home.lng], {\n          icon: Lf.divIcon({ className: 'mv-home', html: '<span class=\"mv-home-pin\">' + ICONS.home + '<\/span>', iconSize: [44, 44], iconAnchor: [22, 22] }),\n          \/\/ Sous les rep\u00e8res et groupes : les fiches situ\u00e9es \u00e0 l'\u00e9tablissement m\u00eame\n          \/\/ (souvent nombreuses) restent visibles et cliquables par-dessus.\n          zIndexOffset: -1000,\n          keyboard: false,\n          interactive: false,\n          title: MAP.home.label\n        }).addTo(map);\n        homeMarker.bindTooltip(MAP.home.label, { permanent: true, direction: 'right', offset: [24, 0], className: 'mv-home-label' });\n      }\n\n      layer = (typeof Lf.markerClusterGroup === 'function') ? Lf.markerClusterGroup({\n        showCoverageOnHover: false,\n        maxClusterRadius: 45,\n        iconCreateFunction: function(cl) {\n          var n = cl.getChildCount();\n          var s = n < 10 ? 34 : (n < 50 ? 40 : 46);\n          return Lf.divIcon({ className: 'mv-cluster', html: '<span style=\"width:' + s + 'px;height:' + s + 'px;background:' + ACCENT + '\">' + n + '<\/span>', iconSize: [s, s] });\n        }\n      }) : Lf.layerGroup();\n      layer.addTo(map);\n      renderList();\n    }\n\n    \/**\n     * Met la carte \u00e0 jour sans jamais bloquer la page. Le th\u00e8me (ou WP Rocket)\n     * peut r\u00e9ex\u00e9cuter Leaflet apr\u00e8s coup : markercluster lit alors la mauvaise\n     * copie (\u00ab L.DistanceGrid is not a constructor \u00bb) au moment o\u00f9 la LISTE met\n     * la carte \u00e0 jour. On remet la bonne copie avant, et une erreur de carte\n     * n'emp\u00eache plus la liste ni le d\u00e9filement qui suivent.\n     *\/\n    function updateMap(list) {\n      if (!map || !layer) return;\n      if (Lf && window.L !== Lf) window.L = Lf;\n      try {\n        drawMap(list);\n      } catch (e) {\n        if (window.console) console.warn('Elaia \u2014 carte non mise \u00e0 jour :', e);\n      }\n    }\n\n    function drawMap(list) {\n      layer.clearLayers();\n      pins = {};\n      var bounds = [];\n      var markers = [];\n      list.forEach(function(it) {\n        if (it.lat === null) return;\n        var m = Lf.marker([it.lat, it.lng], { icon: pinIcon(catColor(it.type), false, it.id === state.selected), title: it.name });\n        m.on('click', function() {\n          selectItem(it.id);\n        });\n        markers.push(m);\n        pins[it.id] = m;\n        bounds.push([it.lat, it.lng]);\n      });\n      \/\/ Ajout group\u00e9 : un seul recalcul des regroupements (plus fiable que addLayer un par un)\n      if (typeof layer.addLayers === 'function') layer.addLayers(markers);\n      else markers.forEach(function(m) {\n        layer.addLayer(m);\n      });\n\n      \/\/ Rayon du filtre de distance autour de l'\u00e9tablissement\n      if (radius) {\n        map.removeLayer(radius);\n        radius = null;\n      }\n      if (MAP.home) {\n        bounds.push([MAP.home.lat, MAP.home.lng]);\n        if (state.km) {\n          radius = Lf.circle([MAP.home.lat, MAP.home.lng], {\n            radius: state.km * 1000,\n            color: ACCENT,\n            weight: 1.5,\n            dashArray: '6 6',\n            fillColor: ACCENT,\n            fillOpacity: 0.06,\n            interactive: false\n          }).addTo(map);\n        }\n      }\n\n      if (state.selected !== null && !pins[state.selected]) state.selected = null;\n      renderPreview();\n      overview = radius ? { bounds: radius.getBounds(), padding: [20, 20] } :\n        (bounds.length > 1 ? { bounds: bounds, padding: [40, 40] } :\n          (bounds.length === 1 ? { center: bounds[0] } : null));\n      fitOverview();\n      if (resetBtn) resetBtn.hidden = true;\n      setTimeout(function() {\n        map.invalidateSize();\n      }, 50);\n    }\n\n    \/** Cadre la carte sur la vue d'ensemble, sans afficher le bouton \u00ab Revenir\u2026 \u00bb *\/\n    function fitOverview() {\n      if (!map || !overview) return;\n      fitting = true;\n      if (overview.center) map.setView(overview.center, 13, { animate: false });\n      else map.fitBounds(overview.bounds, { padding: overview.padding, maxZoom: 13, animate: false });\n      setTimeout(function() {\n        fitting = false;\n      }, 50);\n    }\n\n    function highlightPin(id, on) {\n      var m = pins[id];\n      if (!m) return;\n      var it = BY_ID[id];\n      var selected = id === state.selected;\n      m.setIcon(pinIcon(catColor(it.type), on, selected));\n      m.setZIndexOffset(on || selected ? 1000 : 0);\n    }\n\n    \/** S\u00e9lectionne une fiche depuis la carte : rep\u00e8re mis en avant + fiche sous la carte *\/\n    function selectItem(id) {\n      var prev = state.selected;\n      state.selected = id;\n      if (prev !== null) highlightPin(prev, false);\n      highlightPin(id, false);\n      renderPreview();\n    }\n\n    function renderPreview() {\n      var box = document.getElementById('mv-preview');\n      if (!box) return;\n      box.innerHTML = '';\n      var it = state.selected !== null ? BY_ID[state.selected] : null;\n      if (!it) {\n        var hint = el('div', 'mv-preview-hint');\n        hint.appendChild(icon('pin'));\n        hint.appendChild(document.createTextNode(T.map_hint));\n        box.appendChild(hint);\n        return;\n      }\n      box.appendChild(card(it, false, true));\n    }\n\n    \/\/ \u2550\u2550\u2550 Modal \u2550\u2550\u2550\n    var modal = document.getElementById('mv-modal');\n    if (modal.parentNode !== document.body) document.body.appendChild(modal);\n    var content = document.getElementById('mv-modal-content');\n    content.style.setProperty('--mv-accent', ACCENT);\n    content.style.setProperty('--mv-accent-soft', ACCENT + '1a');\n    content.style.setProperty('--mv-cream', '#faf7f2');\n    content.style.setProperty('--mv-line', '#ebe5da');\n    content.style.setProperty('--mv-muted', '#6b6559');\n    var lastFocus = null;\n\n    function openModal(it) {\n      lastFocus = document.activeElement;\n      content.innerHTML = '';\n      content.style.setProperty('--mv-cat', catColor(it.type));\n\n      \/\/ Deux colonnes d\u00e8s le haut : m\u00e9dias \/ actions \u00e0 gauche, texte \u00e0 droite\n      var body = el('div', 'mv-modal-body');\n      var cols = el('div', 'mv-modal-cols');\n      var side = el('div', 'mv-modal-col mv-modal-col--media');\n      var main = el('div', 'mv-modal-col');\n      cols.appendChild(side);\n      cols.appendChild(main);\n      body.appendChild(cols);\n      var mainBody = body;\n\n      if (it.image) {\n        var img = el('img', 'mv-modal-img');\n        img.src = it.image;\n        img.alt = it.name;\n        img.onerror = function() {\n          img.remove();\n          if (cap) cap.remove();\n        };\n        side.appendChild(img);\n        var cap = null;\n        if (it.credit) {\n          cap = el('p', 'mv-modal-credit', 'Photo : ' + it.credit);\n          side.appendChild(cap);\n        }\n      }\n\n      body = main;\n      if (CATS[it.type]) {\n        var pill = el('span', 'mv-pill', CATS[it.type].label);\n        pill.style.alignSelf = 'flex-start';\n        body.appendChild(pill);\n      }\n      var t = el('h2', 'mv-modal-title', it.name);\n      t.id = 'mv-modal-title';\n      body.appendChild(t);\n      var meta = metaLine(it);\n      if (meta) body.appendChild(meta);\n      if (it.event) {\n        var ev = el('span', 'mv-modal-event');\n        ev.appendChild(icon('calendar'));\n        ev.appendChild(document.createTextNode(it.event));\n        body.appendChild(ev);\n      }\n      if (it.description) body.appendChild(el('p', 'mv-modal-desc', it.description));\n\n      if (it.fields.length) {\n        var f = el('div', 'mv-fields');\n        it.fields.forEach(function(fd) {\n          var d = el('div', 'mv-field');\n          d.appendChild(el('span', null, fd.label));\n          d.appendChild(el('strong', null, fd.value));\n          f.appendChild(d);\n        });\n        body.appendChild(f);\n      }\n\n      \/\/ Colonne m\u00e9dias (gauche)\n      body = side;\n      var actions = el('div', 'mv-modal-actions');\n      \/\/ Google Maps seulement si on sait o\u00f9 se trouve la fiche (sinon lien trompeur)\n      var gmTarget = mapsTarget(it);\n      if (gmTarget) {\n        var gm = el('a', 'mv-btn', gmTarget.label);\n        gm.href = gmTarget.url;\n        gm.target = '_blank';\n        gm.rel = 'noopener';\n        gm.insertBefore(icon('maps'), gm.firstChild);\n        actions.appendChild(gm);\n      }\n      if (it.link) {\n        var l = el('a', 'mv-btn mv-btn--ghost', T.official_site);\n        l.href = it.link;\n        l.target = '_blank';\n        l.rel = 'noopener';\n        l.appendChild(icon('arrow'));\n        actions.appendChild(l);\n      }\n      body.appendChild(actions);\n\n      if (it.video_url) {\n        body.appendChild(el('p', 'mv-modal-sub', T.video));\n        var e = it.video_embed;\n        if (e && (e.type === 'youtube' || e.type === 'vimeo') && e.src) {\n          var v = el('div', 'mv-video');\n          var fr = el('iframe');\n          fr.src = e.src;\n          fr.allowFullscreen = true;\n          fr.setAttribute('allow', 'accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture');\n          fr.referrerPolicy = 'strict-origin-when-cross-origin';\n          v.appendChild(fr);\n          body.appendChild(v);\n        } else if (e && e.type === 'file' && e.src) {\n          var vw = el('div', 'mv-video');\n          var vid = el('video');\n          vid.src = e.src;\n          vid.controls = true;\n          vid.preload = 'metadata';\n          vw.appendChild(vid);\n          body.appendChild(vw);\n        } else {\n          var vl = el('a', null, it.video_url);\n          vl.href = it.video_url;\n          vl.target = '_blank';\n          vl.rel = 'noopener';\n          body.appendChild(vl);\n        }\n      }\n\n      if (it.gallery.length) {\n        body.appendChild(el('p', 'mv-modal-sub', T.gallery));\n        var g = el('div', 'mv-gallery');\n        it.gallery.forEach(function(src) {\n          var a = el('a');\n          a.href = src;\n          a.target = '_blank';\n          a.rel = 'noopener';\n          var gi = el('img');\n          gi.src = src;\n          gi.alt = '';\n          gi.loading = 'lazy';\n          a.appendChild(gi);\n          g.appendChild(a);\n        });\n        body.appendChild(g);\n      }\n\n      var docs = it.documents.filter(function(d) {\n        return d && d.url;\n      });\n      if (docs.length) {\n        body.appendChild(el('p', 'mv-modal-sub', T.documents));\n        var dl = el('div', 'mv-docs');\n        docs.forEach(function(d) {\n          var a = el('a');\n          a.href = d.url;\n          a.target = '_blank';\n          a.rel = 'noopener';\n          a.appendChild(icon('doc'));\n          a.appendChild(document.createTextNode(d.nom || 'Document'));\n          dl.appendChild(a);\n        });\n        body.appendChild(dl);\n      }\n\n      if (it.faq.length) {\n        body = main; \/\/ la FAQ reste dans la colonne texte\n        body.appendChild(el('p', 'mv-modal-sub', T.faq));\n        var fq = el('div', 'mv-faq');\n        it.faq.forEach(function(qa) {\n          var det = el('details');\n          det.appendChild(el('summary', null, qa.question));\n          det.appendChild(el('p', null, qa.answer || T.no_answer));\n          fq.appendChild(det);\n        });\n        body.appendChild(fq);\n      }\n\n      content.appendChild(mainBody);\n      modal.hidden = false;\n      fitModal();\n      content.querySelectorAll('img, iframe, video').forEach(function(m) {\n        m.addEventListener('load', fitModal);\n        m.addEventListener('loadedmetadata', fitModal);\n      });\n      document.documentElement.style.overflow = 'hidden';\n      document.getElementById('mv-modal-close').focus();\n    }\n\n    \/**\n     * Agrandissement automatique : on passe au palier suivant tant que le contenu\n     * d\u00e9passe la hauteur disponible (sur grand \u00e9cran seulement).\n     *\/\n    function fitModal() {\n      var m = modal.querySelector('.mv-modal');\n      if (!m || modal.hidden) return;\n      m.classList.remove('is-wide', 'is-compact');\n      if (window.innerWidth <= 900) return;\n      var overflows = function() {\n        return m.scrollHeight > m.clientHeight + 2;\n      };\n      if (!overflows()) return;\n      m.classList.add('is-wide');\n      if (!overflows()) return;\n      m.classList.add('is-compact');\n    }\n    window.addEventListener('resize', function() {\n      if (!modal.hidden) fitModal();\n    });\n\n    \/** Lien Google Maps : coordonn\u00e9es si connues, sinon nom + ville \/ adresse *\/\n    \/**\n     * Cible Google Maps, par ordre de fiabilit\u00e9 :\n     *   1. coordonn\u00e9es de la fiche\n     *   2. nom + adresse (ou ville)\n     *   3. position de l'\u00e9tablissement (fiche sans lieu = \u00e9quipement sur place)\n     *   4. aucune \u2192 pas de bouton\n     *\/\n    function mapsTarget(it) {\n      var base = 'https:\/\/www.google.com\/maps\/search\/?api=1&query=';\n      if (it.lat !== null) return { url: base + encodeURIComponent(it.lat + ',' + it.lng), label: T.see_on_maps };\n      var where = it.address || it.city;\n      if (where) return { url: base + encodeURIComponent(it.name + ', ' + where), label: T.see_on_maps };\n      if (MAP.home) return { url: base + encodeURIComponent(MAP.home.lat + ',' + MAP.home.lng), label: T.see_place_on_maps };\n      return null;\n    }\n\n    function closeModal() {\n      modal.hidden = true;\n      document.documentElement.style.overflow = '';\n      if (lastFocus) lastFocus.focus();\n    }\n\n    document.getElementById('mv-modal-close').addEventListener('click', closeModal);\n    modal.addEventListener('click', function(e) {\n      if (e.target === modal) closeModal();\n    });\n    document.addEventListener('keydown', function(e) {\n      if (e.key === 'Escape' && !modal.hidden) closeModal();\n    });\n\n    \/\/ \u2550\u2550\u2550 Contr\u00f4les \u2550\u2550\u2550\n    \/**\n     * Hauteur occup\u00e9e en haut de l'\u00e9cran par les barres fixes \/ collantes du site\n     * (barre d'admin, en-t\u00eate, barre de r\u00e9servation\u2026), quelle que soit leur classe :\n     * on sonde le haut de l'\u00e9cran et on empile les barres trouv\u00e9es.\n     *\/\n    function headerOffset() {\n      var bottom = 0;\n      var vw = window.innerWidth,\n        vh = window.innerHeight;\n      var isBar = function(el) {\n        if (!el || el === document.body || el === document.documentElement) return false;\n        if (el.closest('#mv-app, .ea-modal-overlay, .mv-modal-overlay')) return false;\n        var pos = getComputedStyle(el).position;\n        if (pos !== 'fixed' && pos !== 'sticky') return false;\n        var r = el.getBoundingClientRect();\n        \/\/ vraie barre : large, pas trop haute (exclut bulles de chat, boutons flottants, popups)\n        return r.width >= vw * 0.3 && r.height > 0 && r.height < vh * 0.45;\n      };\n      for (var pass = 0; pass < 5; pass++) {\n        var y = bottom + 2,\n          found = 0;\n        if (y >= vh * 0.5) break;\n        [0.15, 0.5, 0.85].forEach(function(fx) {\n          (document.elementsFromPoint(vw * fx, y) || []).forEach(function(el) {\n            for (var n = el; n && n !== document.body; n = n.parentElement) {\n              if (isBar(n)) {\n                var r = n.getBoundingClientRect();\n                if (r.top <= y + 1 && r.bottom > found) found = r.bottom;\n                break;\n              }\n            }\n          });\n        });\n        if (found <= bottom) break;\n        bottom = found;\n      }\n      app.style.setProperty('--mv-header', Math.round(bottom) + 'px');\n      return bottom;\n    }\n\n    var searchTimer = null;\n    document.getElementById('mv-search').addEventListener('input', function(e) {\n      clearTimeout(searchTimer);\n      searchTimer = setTimeout(function() {\n        state.q = e.target.value;\n        state.limit = STEP;\n      state.page = 1;\n        renderList();\n      }, 150);\n    });\n\n    var dist = document.getElementById('mv-distance');\n    if (dist) {\n      dist.querySelectorAll('button').forEach(function(b) {\n        b.addEventListener('click', function() {\n          state.km = parseInt(b.getAttribute('data-km'), 10) || 0;\n          state.limit = STEP;\n      state.page = 1;\n          dist.querySelectorAll('button').forEach(function(x) {\n            x.classList.toggle('is-active', x === b);\n          });\n          renderList();\n        });\n      });\n    }\n\n    var viewSeg = document.getElementById('mv-view');\n    var layoutEl = document.getElementById('mv-layout');\n\n    function setView(v) {\n      state.view = v;\n      layoutEl.classList.toggle('is-list', v === 'list');\n      viewSeg.querySelectorAll('button').forEach(function(x) {\n        x.classList.toggle('is-active', x.getAttribute('data-view') === v);\n      });\n      if (map) setTimeout(function() {\n        map.invalidateSize();\n      }, 60);\n    }\n    viewSeg.querySelectorAll('button').forEach(function(b) {\n      b.addEventListener('click', function() {\n        setView(b.getAttribute('data-view'));\n      });\n    });\n\n    \/\/ Pas de carte si aucune fiche n'est g\u00e9olocalis\u00e9e\n    if (!ITEMS.some(function(it) {\n        return it.lat !== null;\n      })) {\n      viewSeg.style.display = 'none';\n      state.view = 'list';\n    }\n\n    headerOffset();\n    window.addEventListener('resize', headerOffset);\n    \/\/ Les barres du site peuvent appara\u00eetre au d\u00e9filement (barre de r\u00e9servation\u2026)\n    var hoTicking = false;\n    window.addEventListener('scroll', function() {\n      if (hoTicking) return;\n      hoTicking = true;\n      requestAnimationFrame(function() {\n        headerOffset();\n        hoTicking = false;\n      });\n    }, { passive: true });\n    var lastCols = null,\n      resizeTimer = null;\n    window.addEventListener('resize', function() {\n      clearTimeout(resizeTimer);\n      resizeTimer = setTimeout(function() {\n        var c = gridColumns();\n        if (lastCols !== null && c !== lastCols) renderList();\n        lastCols = c;\n      }, 200);\n    });\n    renderCats();\n    renderIdeas();\n    setView(state.view);\n    renderList();\n    renderPreview();\n    initMap();\n  })();\n<\/script>\n\n","protected":false},"excerpt":{"rendered":"","protected":false},"author":1,"featured_media":0,"parent":0,"menu_order":0,"comment_status":"closed","ping_status":"closed","template":"","meta":{"_seopress_titles_title":"","_seopress_titles_desc":"","_seopress_robots_index":"","_seopress_robots_follow":"","_seopress_robots_imageindex":"","_seopress_robots_snippet":"","_seopress_robots_primary_cat":"","_seopress_robots_breadcrumbs":"","_seopress_robots_freeze_modified_date":"","_seopress_robots_custom_modified_date":"","_seopress_robots_canonical":"","_seopress_social_fb_title":"","_seopress_social_fb_desc":"","_seopress_social_fb_img":"","_seopress_social_fb_img_attachment_id":0,"_seopress_social_fb_img_width":0,"_seopress_social_fb_img_height":0,"_seopress_social_twitter_title":"","_seopress_social_twitter_desc":"","_seopress_social_twitter_img":"","_seopress_social_twitter_img_attachment_id":0,"_seopress_social_twitter_img_width":0,"_seopress_social_twitter_img_height":0,"_seopress_redirections_value":"","_seopress_redirections_enabled":"","_seopress_redirections_enabled_regex":"","_seopress_redirections_logged_status":"","_seopress_redirections_param":"","_seopress_redirections_type":0,"_seopress_analysis_target_kw":"","_gt_ctv_global_id":"","_gt_ctv_id_group":false,"inline_featured_image":false,"gt_fse_maillage_image":"","gt_fse_maillage_titre":"D\u00e9couvrez autour de vous","gt_fse_maillage_alt":"D\u00e9couvrez autour de vous","gt_fse_maillage_resume":"","footnotes":""},"categories":[],"tags":[],"class_list":["post-3221","page","type-page","status-publish","hentry"],"_links":{"self":[{"href":"https:\/\/www.lemoulindesurier.com\/en\/wp-json\/wp\/v2\/pages\/3221","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.lemoulindesurier.com\/en\/wp-json\/wp\/v2\/pages"}],"about":[{"href":"https:\/\/www.lemoulindesurier.com\/en\/wp-json\/wp\/v2\/types\/page"}],"author":[{"embeddable":true,"href":"https:\/\/www.lemoulindesurier.com\/en\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.lemoulindesurier.com\/en\/wp-json\/wp\/v2\/comments?post=3221"}],"version-history":[{"count":1,"href":"https:\/\/www.lemoulindesurier.com\/en\/wp-json\/wp\/v2\/pages\/3221\/revisions"}],"predecessor-version":[{"id":3223,"href":"https:\/\/www.lemoulindesurier.com\/en\/wp-json\/wp\/v2\/pages\/3221\/revisions\/3223"}],"wp:attachment":[{"href":"https:\/\/www.lemoulindesurier.com\/en\/wp-json\/wp\/v2\/media?parent=3221"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.lemoulindesurier.com\/en\/wp-json\/wp\/v2\/categories?post=3221"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.lemoulindesurier.com\/en\/wp-json\/wp\/v2\/tags?post=3221"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}