{"id":4043,"date":"2026-04-13T10:42:15","date_gmt":"2026-04-13T08:42:15","guid":{"rendered":"https:\/\/camping-lestaubiere.fr\/elaia-metadatas\/"},"modified":"2026-10-20T15:07:08","modified_gmt":"2026-10-20T13:07:08","slug":"elaia-metadatas","status":"publish","type":"page","link":"https:\/\/camping-lestaubiere.fr\/fr\/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\":\"Bergerac\",\"description\":\"Bergerac est une charmante ville situ\u00e9e sur les bords de la Dordogne, connue pour ses vins et son centre historique.\",\"image\":\"https:\/\/camping-lestaubiere.fr\/wp-content\/uploads\/2021\/09\/camping-bergerac-vieille-ville.jpg\",\"geo\":{\"@type\":\"GeoCoordinates\",\"latitude\":44.85006,\"longitude\":0.48476},\"additionalProperty\":[{\"@type\":\"PropertyValue\",\"name\":\"Nom de la ville\",\"value\":\"Bergerac\"},{\"@type\":\"PropertyValue\",\"name\":\"Type de la ville (ville \/ villages \/ bourg...)\",\"value\":\"Ville\"},{\"@type\":\"PropertyValue\",\"name\":\"D\u00e9partement\",\"value\":\"Dordogne\"},{\"@type\":\"PropertyValue\",\"name\":\"Distance depuis le camping (km)\",\"value\":\"40\"},{\"@type\":\"PropertyValue\",\"name\":\"Temps de route depuis le camping (min.)\",\"value\":\"45\"},{\"@type\":\"PropertyValue\",\"name\":\"Points d'int\u00e9r\u00eats\",\"value\":\"Centre historique, vignobles, mus\u00e9e du tabac\"},{\"@type\":\"PropertyValue\",\"name\":\"Coups de coeur des g\u00e9rants\",\"value\":\"La balade au bord de la Dordogne au coucher du soleil.\"}]}},{\"@type\":\"ListItem\",\"position\":2,\"item\":{\"@type\":\"Thing\",\"name\":\"Vergt\",\"description\":\"Verdt est un village charmant avec un march\u00e9 local r\u00e9put\u00e9 qui se tient tous les vendredis matins.\",\"image\":\"https:\/\/elaia-public.s3.fr-par.scw.cloud\/metadata_images\/image_6a7ee96b50051.png\",\"geo\":{\"@type\":\"GeoCoordinates\",\"latitude\":45.0280556,\"longitude\":0.7191667},\"additionalProperty\":[{\"@type\":\"PropertyValue\",\"name\":\"Nom de la ville\",\"value\":\"Vergt\"},{\"@type\":\"PropertyValue\",\"name\":\"Type de la ville (ville \/ villages \/ bourg...)\",\"value\":\"Village\"},{\"@type\":\"PropertyValue\",\"name\":\"D\u00e9partement\",\"value\":\"Dordogne\"},{\"@type\":\"PropertyValue\",\"name\":\"Distance depuis le camping (km)\",\"value\":\"10\"},{\"@type\":\"PropertyValue\",\"name\":\"Temps de route depuis le camping (min.)\",\"value\":\"15\"},{\"@type\":\"PropertyValue\",\"name\":\"Points d'int\u00e9r\u00eats\",\"value\":\"March\u00e9 artisanal du vendredi, petits commerces locaux\"},{\"@type\":\"PropertyValue\",\"name\":\"Coups de coeur des g\u00e9rants\",\"value\":\"Participer au march\u00e9 pour d\u00e9couvrir les produits r\u00e9gionaux.\"}]}},{\"@type\":\"ListItem\",\"position\":3,\"item\":{\"@type\":\"Thing\",\"name\":\"Castelnaud-la-Chapelle\",\"description\":\"Ce village est c\u00e9l\u00e8bre pour son ch\u00e2teau m\u00e9di\u00e9val surplombant la Dordogne et ses paysages pittoresques.\",\"image\":\"https:\/\/elaia-public.s3.fr-par.scw.cloud\/metadata_images\/image_6a7ee9b29c97b.jpeg\",\"geo\":{\"@type\":\"GeoCoordinates\",\"latitude\":44.8158333,\"longitude\":1.1494444},\"additionalProperty\":[{\"@type\":\"PropertyValue\",\"name\":\"Nom de la ville\",\"value\":\"Castelnaud-la-Chapelle\"},{\"@type\":\"PropertyValue\",\"name\":\"Type de la ville (ville \/ villages \/ bourg...)\",\"value\":\"Village\"},{\"@type\":\"PropertyValue\",\"name\":\"D\u00e9partement\",\"value\":\"Dordogne\"},{\"@type\":\"PropertyValue\",\"name\":\"Distance depuis le camping (km)\",\"value\":\"55\"},{\"@type\":\"PropertyValue\",\"name\":\"Temps de route depuis le camping (min.)\",\"value\":\"60\"},{\"@type\":\"PropertyValue\",\"name\":\"Points d'int\u00e9r\u00eats\",\"value\":\"Ch\u00e2teau de Castelnaud, base nautique, sentiers de randonn\u00e9e\"},{\"@type\":\"PropertyValue\",\"name\":\"Coups de coeur des g\u00e9rants\",\"value\":\"Faire une balade en kayak sur la Dordogne et visiter le ch\u00e2teau.\"}]}},{\"@type\":\"ListItem\",\"position\":4,\"item\":{\"@type\":\"Thing\",\"name\":\"Sarlat-la-Can\u00e9da\",\"description\":\"Sarlat est une ville m\u00e9di\u00e9vale r\u00e9put\u00e9e pour son architecture pr\u00e9serv\u00e9e, ses march\u00e9s et son ambiance festive.\",\"image\":\"https:\/\/elaia-public.s3.fr-par.scw.cloud\/metadata_images\/image_6a7ee90b75e53.jpeg\",\"geo\":{\"@type\":\"GeoCoordinates\",\"latitude\":44.892778,\"longitude\":1.215278},\"additionalProperty\":[{\"@type\":\"PropertyValue\",\"name\":\"Nom de la ville\",\"value\":\"Sarlat-la-Can\u00e9da\"},{\"@type\":\"PropertyValue\",\"name\":\"Type de la ville (ville \/ villages \/ bourg...)\",\"value\":\"Ville\"},{\"@type\":\"PropertyValue\",\"name\":\"D\u00e9partement\",\"value\":\"Dordogne\"},{\"@type\":\"PropertyValue\",\"name\":\"Distance depuis le camping (km)\",\"value\":\"50\"},{\"@type\":\"PropertyValue\",\"name\":\"Temps de route depuis le camping (min.)\",\"value\":\"55\"},{\"@type\":\"PropertyValue\",\"name\":\"Points d'int\u00e9r\u00eats\",\"value\":\"Place de la Libert\u00e9, march\u00e9 m\u00e9di\u00e9val, \u00e9glise Sainte-Marie\"},{\"@type\":\"PropertyValue\",\"name\":\"Coups de coeur des g\u00e9rants\",\"value\":\"Le march\u00e9 du samedi matin avec ses produits du terroir.\"}]}},{\"@type\":\"ListItem\",\"position\":5,\"item\":{\"@type\":\"Thing\",\"name\":\"P\u00e9rigueux\",\"description\":\"P\u00e9rigueux est une ville historique situ\u00e9e \u00e0 proximit\u00e9 du camping. Elle est reconnue pour sa vieille ville m\u00e9di\u00e9vale, sa cath\u00e9drale Saint-Front et ses ruelles pittoresques.\",\"image\":\"https:\/\/elaia-public.s3.fr-par.scw.cloud\/metadata_images\/image_6a7ee857e16c6.jpeg\",\"geo\":{\"@type\":\"GeoCoordinates\",\"latitude\":45.18399,\"longitude\":0.715783},\"additionalProperty\":[{\"@type\":\"PropertyValue\",\"name\":\"Nom de la ville\",\"value\":\"P\u00e9rigueux\"},{\"@type\":\"PropertyValue\",\"name\":\"Type de la ville (ville \/ villages \/ bourg...)\",\"value\":\"Ville\"},{\"@type\":\"PropertyValue\",\"name\":\"D\u00e9partement\",\"value\":\"Dordogne\"},{\"@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\":\"Points d'int\u00e9r\u00eats\",\"value\":\"Cath\u00e9drale Saint-Front, mus\u00e9e Vesunna, vieille ville m\u00e9di\u00e9vale\"},{\"@type\":\"PropertyValue\",\"name\":\"Coups de coeur des g\u00e9rants\",\"value\":\"D\u00e9couvrir le march\u00e9 local et fl\u00e2ner dans les rues pleines de charme.\"}]}}]},{\"@type\":\"ItemList\",\"name\":\"Activit\u00e9s aux alentours \",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"item\":{\"@type\":\"Thing\",\"name\":\"Randonn\u00e9e : Boucle des cr\u00eates\",\"description\":\"Une randonn\u00e9e p\u00e9destre accessible qui conduit sur une boucle offrant de magnifiques vues panoramiques sur les cr\u00eates autour de Villamblard. Adapt\u00e9e \u00e0 diff\u00e9rents niveaux, cette balade permet de d\u00e9couvrir la nature environnante dans un cadre paisible.\",\"image\":\"https:\/\/elaia-public.s3.fr-par.scw.cloud\/metadata_images\/image_6a7eec1aadbaf.png\",\"geo\":{\"@type\":\"GeoCoordinates\",\"latitude\":45.0177,\"longitude\":0.5408},\"additionalProperty\":[{\"@type\":\"PropertyValue\",\"name\":\"Nom de l'activit\u00e9\",\"value\":\"Randonn\u00e9e : Boucle des cr\u00eates\"},{\"@type\":\"PropertyValue\",\"name\":\"Distance depuis le camping (km)\",\"value\":\"6\"},{\"@type\":\"PropertyValue\",\"name\":\"Temps de route depuis le camping (min.)\",\"value\":\"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\":\"Famille, Enfants, Senior, Ado\"},{\"@type\":\"PropertyValue\",\"name\":\"R\u00e9servation ? (oui \/ non)\",\"value\":\"non\"},{\"@type\":\"PropertyValue\",\"name\":\"Horaires\",\"value\":\"Libre, \u00e0 faire de jour\"},{\"@type\":\"PropertyValue\",\"name\":\"Informations et contact\",\"value\":\"Office de tourisme de Villamblard\"},{\"@type\":\"PropertyValue\",\"name\":\"Langues parl\u00e9es \",\"value\":\"Fran\u00e7ais\"},{\"@type\":\"PropertyValue\",\"name\":\"Animaux accept\u00e9 (oui \/ non)\",\"value\":\"oui\"}]}},{\"@type\":\"ListItem\",\"position\":2,\"item\":{\"@type\":\"Thing\",\"name\":\"Golf de la Marterie\",\"description\":\"Parcours de golf situ\u00e9 \u00e0 Saint-F\u00e9lix-de-Reillac-et-Mortemart, offrant un cadre naturel agr\u00e9able pour les passionn\u00e9s de golf de tous niveaux.\",\"geo\":{\"@type\":\"GeoCoordinates\",\"latitude\":44.9991612,\"longitude\":0.8796141},\"additionalProperty\":[{\"@type\":\"PropertyValue\",\"name\":\"Nom de l'activit\u00e9\",\"value\":\"Golf de la Marterie\"},{\"@type\":\"PropertyValue\",\"name\":\"Distance depuis le camping (km)\",\"value\":\"30\"},{\"@type\":\"PropertyValue\",\"name\":\"Temps de route depuis le camping (min.)\",\"value\":\"35\"},{\"@type\":\"PropertyValue\",\"name\":\"Type d'activit\u00e9 (nature, sport, culture, etc.)\",\"value\":\"Sport\"},{\"@type\":\"PropertyValue\",\"name\":\"Cat\u00e9gorie de public (Famille, Enfants, Senior, Ado, etc.)\",\"value\":\"Adultes, Senior\"},{\"@type\":\"PropertyValue\",\"name\":\"R\u00e9servation ? (oui \/ non)\",\"value\":\"oui\"},{\"@type\":\"PropertyValue\",\"name\":\"Horaires\",\"value\":\"X\"},{\"@type\":\"PropertyValue\",\"name\":\"Informations et contact\",\"value\":\"Golf de la Marterie, 0553056100\"},{\"@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\":\"Cano\u00eb \/ Paddle : Roxane Cano\u00eb\",\"description\":\"Location de cano\u00ebs et paddles \u00e0 Bergerac pour profiter des activit\u00e9s nautiques sur la rivi\u00e8re Dordogne. Id\u00e9al pour d\u00e9couvrir la r\u00e9gion autrement et en famille ou entre amis.\",\"image\":\"https:\/\/elaia-public.s3.fr-par.scw.cloud\/metadata_images\/image_6a7eed641adb5.png\",\"geo\":{\"@type\":\"GeoCoordinates\",\"latitude\":44.8491928,\"longitude\":0.4767077},\"additionalProperty\":[{\"@type\":\"PropertyValue\",\"name\":\"Nom de l'activit\u00e9\",\"value\":\"Cano\u00eb \/ Paddle : Roxane Cano\u00eb\"},{\"@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, Nautique\"},{\"@type\":\"PropertyValue\",\"name\":\"Cat\u00e9gorie de public (Famille, Enfants, Senior, Ado, etc.)\",\"value\":\"Famille, Enfants, Ado, Adultes\"},{\"@type\":\"PropertyValue\",\"name\":\"R\u00e9servation ? (oui \/ non)\",\"value\":\"oui\"},{\"@type\":\"PropertyValue\",\"name\":\"Horaires\",\"value\":\"9h00 - 19h00\"},{\"@type\":\"PropertyValue\",\"name\":\"Informations et contact\",\"value\":\"Roxane Cano\u00eb, 05 53 57 22 19, contact@roxanecanoe.fr\"},{\"@type\":\"PropertyValue\",\"name\":\"Langues parl\u00e9es \",\"value\":\"Fran\u00e7ais, Anglais\"},{\"@type\":\"PropertyValue\",\"name\":\"Animaux accept\u00e9 (oui \/ non)\",\"value\":\"non\"}]}},{\"@type\":\"ListItem\",\"position\":4,\"item\":{\"@type\":\"Thing\",\"name\":\"Randonn\u00e9e : Boucle des cr\u00eates\",\"description\":\"Une randonn\u00e9e p\u00e9destre accessible qui conduit sur une boucle offrant de magnifiques vues panoramiques sur les cr\u00eates autour de Villamblard. Adapt\u00e9e \u00e0 diff\u00e9rents niveaux, cette balade permet de d\u00e9couvrir la nature environnante dans un cadre paisible.\",\"image\":\"https:\/\/elaia-public.s3.fr-par.scw.cloud\/metadata_images\/image_6a7eec1aadbaf.png\",\"geo\":{\"@type\":\"GeoCoordinates\",\"latitude\":45.0177,\"longitude\":0.5408},\"additionalProperty\":[{\"@type\":\"PropertyValue\",\"name\":\"Nom de l'activit\u00e9\",\"value\":\"Randonn\u00e9e : Boucle des cr\u00eates\"},{\"@type\":\"PropertyValue\",\"name\":\"Distance depuis le camping (km)\",\"value\":\"6\"},{\"@type\":\"PropertyValue\",\"name\":\"Temps de route depuis le camping (min.)\",\"value\":\"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\":\"Famille, Enfants, Senior, Ado\"},{\"@type\":\"PropertyValue\",\"name\":\"R\u00e9servation ? (oui \/ non)\",\"value\":\"non\"},{\"@type\":\"PropertyValue\",\"name\":\"Horaires\",\"value\":\"Libre, \u00e0 faire de jour\"},{\"@type\":\"PropertyValue\",\"name\":\"Informations et contact\",\"value\":\"Office de tourisme de Villamblard\"},{\"@type\":\"PropertyValue\",\"name\":\"Langues parl\u00e9es \",\"value\":\"Fran\u00e7ais\"},{\"@type\":\"PropertyValue\",\"name\":\"Animaux accept\u00e9 (oui \/ non)\",\"value\":\"oui\"}]}},{\"@type\":\"ListItem\",\"position\":5,\"item\":{\"@type\":\"Thing\",\"name\":\"Visite de Bergerac\",\"description\":\"Visite guid\u00e9e ou libre de Bergerac, charmante ville historique avec ses ruelles, maisons \u00e0 colombages, mus\u00e9es et monuments, notamment autour de la place P\u00e9lissi\u00e8re.\",\"image\":\"https:\/\/camping-lestaubiere.fr\/wp-content\/uploads\/2021\/09\/camping-bergerac-vieille-ville.jpg\",\"geo\":{\"@type\":\"GeoCoordinates\",\"latitude\":44.85006,\"longitude\":0.48476},\"additionalProperty\":[{\"@type\":\"PropertyValue\",\"name\":\"Nom de l'activit\u00e9\",\"value\":\"Visite de Bergerac\"},{\"@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\":\"Culture, Patrimoine\"},{\"@type\":\"PropertyValue\",\"name\":\"Cat\u00e9gorie de public (Famille, Enfants, Senior, Ado, etc.)\",\"value\":\"Famille, Senior, Ado, Adultes\"},{\"@type\":\"PropertyValue\",\"name\":\"R\u00e9servation ? (oui \/ non)\",\"value\":\"non\"},{\"@type\":\"PropertyValue\",\"name\":\"Horaires\",\"value\":\"Toute la journ\u00e9e, mieux conseill\u00e9 le matin ou l'apr\u00e8s-midi\"},{\"@type\":\"PropertyValue\",\"name\":\"Informations et contact\",\"value\":\"Office de Tourisme de Bergerac, +33 5 53 57 17 44\"},{\"@type\":\"PropertyValue\",\"name\":\"Langues parl\u00e9es \",\"value\":\"Fran\u00e7ais, Anglais\"},{\"@type\":\"PropertyValue\",\"name\":\"Animaux accept\u00e9 (oui \/ non)\",\"value\":\"oui\"}]}},{\"@type\":\"ListItem\",\"position\":6,\"item\":{\"@type\":\"Thing\",\"name\":\"Port miniature\",\"description\":\"Parc miniature exposant des reproductions r\u00e9duites de bateaux, situ\u00e9 \u00e0 Bergerac, id\u00e9al pour une visite ludique et culturelle.\",\"image\":\"https:\/\/elaia-public.s3.fr-par.scw.cloud\/metadata_images\/image_6a7eede0d982c.png\",\"geo\":{\"@type\":\"GeoCoordinates\",\"latitude\":44.8488551,\"longitude\":0.501941},\"additionalProperty\":[{\"@type\":\"PropertyValue\",\"name\":\"Nom de l'activit\u00e9\",\"value\":\"Port miniature\"},{\"@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\":\"Culture, Loisirs\"},{\"@type\":\"PropertyValue\",\"name\":\"Cat\u00e9gorie de public (Famille, Enfants, Senior, Ado, etc.)\",\"value\":\"Famille, Enfants, Senior, Ado\"},{\"@type\":\"PropertyValue\",\"name\":\"R\u00e9servation ? (oui \/ non)\",\"value\":\"oui\"},{\"@type\":\"PropertyValue\",\"name\":\"Horaires\",\"value\":\"X\"},{\"@type\":\"PropertyValue\",\"name\":\"Informations et contact\",\"value\":\"Port Miniature Bergerac, 0635217937\"},{\"@type\":\"PropertyValue\",\"name\":\"Langues parl\u00e9es \",\"value\":\"Fran\u00e7ais\"},{\"@type\":\"PropertyValue\",\"name\":\"Animaux accept\u00e9 (oui \/ non)\",\"value\":\"non\"}]}},{\"@type\":\"ListItem\",\"position\":7,\"item\":{\"@type\":\"Thing\",\"name\":\"Visite de Bergerac\",\"description\":\"Visite guid\u00e9e ou libre de Bergerac, charmante ville historique avec ses ruelles, maisons \u00e0 colombages, mus\u00e9es et monuments, notamment autour de la place P\u00e9lissi\u00e8re.\",\"image\":\"https:\/\/camping-lestaubiere.fr\/wp-content\/uploads\/2021\/09\/camping-bergerac-vieille-ville.jpg\",\"geo\":{\"@type\":\"GeoCoordinates\",\"latitude\":44.85006,\"longitude\":0.48476},\"additionalProperty\":[{\"@type\":\"PropertyValue\",\"name\":\"Nom de l'activit\u00e9\",\"value\":\"Visite de Bergerac\"},{\"@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\":\"Culture, Patrimoine\"},{\"@type\":\"PropertyValue\",\"name\":\"Cat\u00e9gorie de public (Famille, Enfants, Senior, Ado, etc.)\",\"value\":\"Famille, Senior, Ado, Adultes\"},{\"@type\":\"PropertyValue\",\"name\":\"R\u00e9servation ? (oui \/ non)\",\"value\":\"non\"},{\"@type\":\"PropertyValue\",\"name\":\"Horaires\",\"value\":\"Toute la journ\u00e9e, mieux conseill\u00e9 le matin ou l'apr\u00e8s-midi\"},{\"@type\":\"PropertyValue\",\"name\":\"Informations et contact\",\"value\":\"Office de Tourisme de Bergerac, +33 5 53 57 17 44\"},{\"@type\":\"PropertyValue\",\"name\":\"Langues parl\u00e9es \",\"value\":\"Fran\u00e7ais, Anglais\"},{\"@type\":\"PropertyValue\",\"name\":\"Animaux accept\u00e9 (oui \/ non)\",\"value\":\"oui\"}]}},{\"@type\":\"ListItem\",\"position\":8,\"item\":{\"@type\":\"Thing\",\"name\":\"Golf de la Marterie\",\"description\":\"Parcours de golf situ\u00e9 \u00e0 Saint-F\u00e9lix-de-Reillac-et-Mortemart, offrant un cadre naturel agr\u00e9able pour les passionn\u00e9s de golf de tous niveaux.\",\"geo\":{\"@type\":\"GeoCoordinates\",\"latitude\":44.9991612,\"longitude\":0.8796141},\"additionalProperty\":[{\"@type\":\"PropertyValue\",\"name\":\"Nom de l'activit\u00e9\",\"value\":\"Golf de la Marterie\"},{\"@type\":\"PropertyValue\",\"name\":\"Distance depuis le camping (km)\",\"value\":\"30\"},{\"@type\":\"PropertyValue\",\"name\":\"Temps de route depuis le camping (min.)\",\"value\":\"35\"},{\"@type\":\"PropertyValue\",\"name\":\"Type d'activit\u00e9 (nature, sport, culture, etc.)\",\"value\":\"Sport\"},{\"@type\":\"PropertyValue\",\"name\":\"Cat\u00e9gorie de public (Famille, Enfants, Senior, Ado, etc.)\",\"value\":\"Adultes, Senior\"},{\"@type\":\"PropertyValue\",\"name\":\"R\u00e9servation ? (oui \/ non)\",\"value\":\"oui\"},{\"@type\":\"PropertyValue\",\"name\":\"Horaires\",\"value\":\"X\"},{\"@type\":\"PropertyValue\",\"name\":\"Informations et contact\",\"value\":\"Golf de la Marterie, 0553056100\"},{\"@type\":\"PropertyValue\",\"name\":\"Langues parl\u00e9es \",\"value\":\"Fran\u00e7ais\"},{\"@type\":\"PropertyValue\",\"name\":\"Animaux accept\u00e9 (oui \/ non)\",\"value\":\"non\"}]}},{\"@type\":\"ListItem\",\"position\":9,\"item\":{\"@type\":\"Thing\",\"name\":\"Cano\u00eb \/ Paddle : Roxane Cano\u00eb\",\"description\":\"Location de cano\u00ebs et paddles \u00e0 Bergerac pour profiter des activit\u00e9s nautiques sur la rivi\u00e8re Dordogne. Id\u00e9al pour d\u00e9couvrir la r\u00e9gion autrement et en famille ou entre amis.\",\"image\":\"https:\/\/elaia-public.s3.fr-par.scw.cloud\/metadata_images\/image_6a7eed641adb5.png\",\"geo\":{\"@type\":\"GeoCoordinates\",\"latitude\":44.8491928,\"longitude\":0.4767077},\"additionalProperty\":[{\"@type\":\"PropertyValue\",\"name\":\"Nom de l'activit\u00e9\",\"value\":\"Cano\u00eb \/ Paddle : Roxane Cano\u00eb\"},{\"@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, Nautique\"},{\"@type\":\"PropertyValue\",\"name\":\"Cat\u00e9gorie de public (Famille, Enfants, Senior, Ado, etc.)\",\"value\":\"Famille, Enfants, Ado, Adultes\"},{\"@type\":\"PropertyValue\",\"name\":\"R\u00e9servation ? (oui \/ non)\",\"value\":\"oui\"},{\"@type\":\"PropertyValue\",\"name\":\"Horaires\",\"value\":\"9h00 - 19h00\"},{\"@type\":\"PropertyValue\",\"name\":\"Informations et contact\",\"value\":\"Roxane Cano\u00eb, 05 53 57 22 19, contact@roxanecanoe.fr\"},{\"@type\":\"PropertyValue\",\"name\":\"Langues parl\u00e9es \",\"value\":\"Fran\u00e7ais, Anglais\"},{\"@type\":\"PropertyValue\",\"name\":\"Animaux accept\u00e9 (oui \/ non)\",\"value\":\"non\"}]}},{\"@type\":\"ListItem\",\"position\":10,\"item\":{\"@type\":\"Thing\",\"name\":\"Port miniature\",\"description\":\"Parc miniature exposant des reproductions r\u00e9duites de bateaux, situ\u00e9 \u00e0 Bergerac, id\u00e9al pour une visite ludique et culturelle.\",\"image\":\"https:\/\/elaia-public.s3.fr-par.scw.cloud\/metadata_images\/image_6a7eede0d982c.png\",\"geo\":{\"@type\":\"GeoCoordinates\",\"latitude\":44.8488551,\"longitude\":0.501941},\"additionalProperty\":[{\"@type\":\"PropertyValue\",\"name\":\"Nom de l'activit\u00e9\",\"value\":\"Port miniature\"},{\"@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\":\"Culture, Loisirs\"},{\"@type\":\"PropertyValue\",\"name\":\"Cat\u00e9gorie de public (Famille, Enfants, Senior, Ado, etc.)\",\"value\":\"Famille, Enfants, Senior, Ado\"},{\"@type\":\"PropertyValue\",\"name\":\"R\u00e9servation ? (oui \/ non)\",\"value\":\"oui\"},{\"@type\":\"PropertyValue\",\"name\":\"Horaires\",\"value\":\"X\"},{\"@type\":\"PropertyValue\",\"name\":\"Informations et contact\",\"value\":\"Port Miniature Bergerac, 0635217937\"},{\"@type\":\"PropertyValue\",\"name\":\"Langues parl\u00e9es \",\"value\":\"Fran\u00e7ais\"},{\"@type\":\"PropertyValue\",\"name\":\"Animaux accept\u00e9 (oui \/ non)\",\"value\":\"non\"}]}}]}]}<\/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:\/\/camping-lestaubiere.fr\/wp-content\/uploads\/2021\/09\/camping-bergerac-vieille-ville.jpg)\">\n        <div class=\"mv-hero-inner\">\n      <h1 class=\"mv-hero-title\">\u00c0 d\u00e9couvrir autour de vous<\/h1>\n      <p class=\"mv-hero-text\">Villages, plages, balades, bonnes adresses et exp\u00e9riences s\u00e9lectionn\u00e9s autour de votre s\u00e9jour.<\/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          Autour de <strong>Camping Lestaubi\u00e8re<\/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=\"Rechercher un lieu, une activit\u00e9, un village\u2026\" aria-label=\"Rechercher\">\n    <\/label>\n          <div class=\"mv-seg\" role=\"group\" aria-label=\"Distance maximale\" 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\">Tout<\/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=\"Cat\u00e9gories pr\u00e9c\u00e9dentes\"><span>\u2039<\/span><\/button>\n    <div class=\"mv-cats\" id=\"mv-cats\" role=\"group\" aria-label=\"Cat\u00e9gories\"><\/div>\n    <button type=\"button\" class=\"mv-cats-arrow mv-cats-arrow--right\" aria-label=\"Cat\u00e9gories suivantes\"><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=\"Affichage\" id=\"mv-view\">\n      <button type=\"button\" data-view=\"list\">Liste<\/button>\n      <button type=\"button\" data-view=\"map\" class=\"is-active\">Carte<\/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>Bergerac<\/strong> \u2014 Bergerac est une charmante ville situ\u00e9e sur les bords de la Dordogne, connue pour ses vins et son centre historique.<\/li>\n              <li><strong>Vergt<\/strong> \u2014 Verdt est un village charmant avec un march\u00e9 local r\u00e9put\u00e9 qui se tient tous les vendredis matins.<\/li>\n              <li><strong>Castelnaud-la-Chapelle<\/strong> \u2014 Ce village est c\u00e9l\u00e8bre pour son ch\u00e2teau m\u00e9di\u00e9val surplombant la Dordogne et ses paysages pittoresques.<\/li>\n              <li><strong>Sarlat-la-Can\u00e9da<\/strong> \u2014 Sarlat est une ville m\u00e9di\u00e9vale r\u00e9put\u00e9e pour son architecture pr\u00e9serv\u00e9e, ses march\u00e9s et son ambiance festive.<\/li>\n              <li><strong>P\u00e9rigueux<\/strong> \u2014 P\u00e9rigueux est une ville historique situ\u00e9e \u00e0 proximit\u00e9 du camping. Elle est reconnue pour sa vieille ville m\u00e9di\u00e9vale, sa cath\u00e9drale Saint-Front et ses ruelles pittoresques.<\/li>\n              <li><strong>Randonn\u00e9e : Boucle des cr\u00eates<\/strong> \u2014 Une randonn\u00e9e p\u00e9destre accessible qui conduit sur une boucle offrant de magnifiques vues panoramiques sur les cr\u00eates autour de Villamblard. Adapt\u00e9e \u00e0 diff\u00e9rents niveaux, cette balade permet de d\u00e9couvrir la\u2026<\/li>\n              <li><strong>Cano\u00eb \/ Paddle : Roxane Cano\u00eb<\/strong> \u2014 Location de cano\u00ebs et paddles \u00e0 Bergerac pour profiter des activit\u00e9s nautiques sur la rivi\u00e8re Dordogne. Id\u00e9al pour d\u00e9couvrir la r\u00e9gion autrement et en famille ou entre amis.<\/li>\n              <li><strong>Randonn\u00e9e : Boucle des cr\u00eates<\/strong> \u2014 Une randonn\u00e9e p\u00e9destre accessible qui conduit sur une boucle offrant de magnifiques vues panoramiques sur les cr\u00eates autour de Villamblard. Adapt\u00e9e \u00e0 diff\u00e9rents niveaux, cette balade permet de d\u00e9couvrir la\u2026<\/li>\n              <li><strong>Visite de Bergerac<\/strong> \u2014 Visite guid\u00e9e ou libre de Bergerac, charmante ville historique avec ses ruelles, maisons \u00e0 colombages, mus\u00e9es et monuments, notamment autour de la place P\u00e9lissi\u00e8re.<\/li>\n              <li><strong>Port miniature<\/strong> \u2014 Parc miniature exposant des reproductions r\u00e9duites de bateaux, situ\u00e9 \u00e0 Bergerac, id\u00e9al pour une visite ludique et culturelle.<\/li>\n              <li><strong>Visite de Bergerac<\/strong> \u2014 Visite guid\u00e9e ou libre de Bergerac, charmante ville historique avec ses ruelles, maisons \u00e0 colombages, mus\u00e9es et monuments, notamment autour de la place P\u00e9lissi\u00e8re.<\/li>\n              <li><strong>Cano\u00eb \/ Paddle : Roxane Cano\u00eb<\/strong> \u2014 Location de cano\u00ebs et paddles \u00e0 Bergerac pour profiter des activit\u00e9s nautiques sur la rivi\u00e8re Dordogne. Id\u00e9al pour d\u00e9couvrir la r\u00e9gion autrement et en famille ou entre amis.<\/li>\n              <li><strong>Port miniature<\/strong> \u2014 Parc miniature exposant des reproductions r\u00e9duites de bateaux, situ\u00e9 \u00e0 Bergerac, id\u00e9al pour une visite ludique et culturelle.<\/li>\n              <li><strong>Golf de la Marterie<\/strong> \u2014 Parcours de golf situ\u00e9 \u00e0 Saint-F\u00e9lix-de-Reillac-et-Mortemart, offrant un cadre naturel agr\u00e9able pour les passionn\u00e9s de golf de tous niveaux.<\/li>\n              <li><strong>Golf de la Marterie<\/strong> \u2014 Parcours de golf situ\u00e9 \u00e0 Saint-F\u00e9lix-de-Reillac-et-Mortemart, offrant un cadre naturel agr\u00e9able pour les passionn\u00e9s de golf de tous niveaux.<\/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=\"Fermer\">\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\":\"Bergerac\",\"image\":\"https:\\\/\\\/camping-lestaubiere.fr\\\/wp-content\\\/uploads\\\/2021\\\/09\\\/camping-bergerac-vieille-ville.jpg\",\"credit\":\"\",\"description\":\"Bergerac est une charmante ville situ\\u00e9e sur les bords de la Dordogne, connue pour ses vins et son centre historique.\",\"city\":\"\",\"address\":\"\",\"km\":40,\"min\":45,\"lat\":44.85006,\"lng\":0.48476,\"tags\":[],\"fields\":[{\"label\":\"Nom de la ville\",\"value\":\"Bergerac\"},{\"label\":\"Type de la ville (ville \\\/ villages \\\/ bourg...)\",\"value\":\"Ville\"},{\"label\":\"D\\u00e9partement\",\"value\":\"Dordogne\"},{\"label\":\"Distance depuis le camping (km)\",\"value\":\"40\"},{\"label\":\"Temps de route depuis le camping (min.)\",\"value\":\"45\"},{\"label\":\"Points d'int\\u00e9r\\u00eats\",\"value\":\"Centre historique, vignobles, mus\\u00e9e du tabac\"},{\"label\":\"Coups de coeur des g\\u00e9rants\",\"value\":\"La balade au bord de la Dordogne au coucher du soleil.\"}],\"link\":\"\",\"event\":\"\",\"faq\":[{\"question\":\"Y'a t il des commerces essentiels ?\",\"answer\":\"Oui, Bergerac poss\\u00e8de tous les commerces n\\u00e9cessaires, y compris des march\\u00e9s locaux.\"},{\"question\":\"Quel est le meilleur moment pour visiter la ville ?\",\"answer\":\"L'\\u00e9t\\u00e9 offre de nombreuses animations en plein air et march\\u00e9s nocturnes.\"},{\"question\":\"O\\u00f9 manger sans se tromper ?\",\"answer\":\"Essayez \\\"Les Arcades\\\" pour une cuisine r\\u00e9gionale raffin\\u00e9e.\"},{\"question\":\"O\\u00f9 se garer facilement ?\",\"answer\":\"Il y a plusieurs parkings gratuits en p\\u00e9riph\\u00e9rie du centre.\"},{\"question\":\"Le centre ville est il accessible aux PMR et poussettes ?\",\"answer\":\"Le centre-ville est accessible avec quelques zones pav\\u00e9es, mais globalement praticable.\"},{\"question\":\"Que faire quand il pleut dans la ville ?\",\"answer\":\"Visitez le mus\\u00e9e du tabac et profitez des caf\\u00e9s et boutiques du centre.\"}],\"video_url\":\"\",\"video_embed\":null,\"documents\":[],\"gallery\":[]},{\"id\":1,\"featurable\":true,\"type\":\"villes-aux-alentours\",\"name\":\"Vergt\",\"image\":\"https:\\\/\\\/elaia-public.s3.fr-par.scw.cloud\\\/metadata_images\\\/image_6a7ee96b50051.png\",\"credit\":\"\",\"description\":\"Verdt est un village charmant avec un march\\u00e9 local r\\u00e9put\\u00e9 qui se tient tous les vendredis matins.\",\"city\":\"\",\"address\":\"\",\"km\":10,\"min\":15,\"lat\":45.0280556,\"lng\":0.7191667,\"tags\":[],\"fields\":[{\"label\":\"Nom de la ville\",\"value\":\"Vergt\"},{\"label\":\"Type de la ville (ville \\\/ villages \\\/ bourg...)\",\"value\":\"Village\"},{\"label\":\"D\\u00e9partement\",\"value\":\"Dordogne\"},{\"label\":\"Distance depuis le camping (km)\",\"value\":\"10\"},{\"label\":\"Temps de route depuis le camping (min.)\",\"value\":\"15\"},{\"label\":\"Points d'int\\u00e9r\\u00eats\",\"value\":\"March\\u00e9 artisanal du vendredi, petits commerces locaux\"},{\"label\":\"Coups de coeur des g\\u00e9rants\",\"value\":\"Participer au march\\u00e9 pour d\\u00e9couvrir les produits r\\u00e9gionaux.\"}],\"link\":\"\",\"event\":\"\",\"faq\":[{\"question\":\"Y'a t il des commerces essentiels ?\",\"answer\":\"Oui, une sup\\u00e9rette, un coiffeur, un garagiste, un bar et un restaurant sont pr\\u00e9sents au village.\"},{\"question\":\"Quel est le meilleur moment pour visiter la ville ?\",\"answer\":\"Le vendredi matin pour profiter pleinement du march\\u00e9 local.\"},{\"question\":\"O\\u00f9 manger sans se tromper ?\",\"answer\":\"Le restaurant \\\"Le Bistrot du Village\\\" offre une cuisine traditionnelle appr\\u00e9ci\\u00e9e.\"},{\"question\":\"O\\u00f9 se garer facilement ?\",\"answer\":\"Le stationnement est facile et gratuit pr\\u00e8s du march\\u00e9 et du centre.\"},{\"question\":\"Le centre ville est il accessible aux PMR et poussettes ?\",\"answer\":\"Oui, le village est accessible \\u00e0 pied, simple \\u00e0 parcourir avec poussette ou fauteuil.\"},{\"question\":\"Que faire quand il pleut dans la ville ?\",\"answer\":\"Profitez des petits commerces ou d'un caf\\u00e9 convivial pour vous d\\u00e9tendre.\"}],\"video_url\":\"\",\"video_embed\":null,\"documents\":[],\"gallery\":[]},{\"id\":2,\"featurable\":true,\"type\":\"villes-aux-alentours\",\"name\":\"Castelnaud-la-Chapelle\",\"image\":\"https:\\\/\\\/elaia-public.s3.fr-par.scw.cloud\\\/metadata_images\\\/image_6a7ee9b29c97b.jpeg\",\"credit\":\"\",\"description\":\"Ce village est c\\u00e9l\\u00e8bre pour son ch\\u00e2teau m\\u00e9di\\u00e9val surplombant la Dordogne et ses paysages pittoresques.\",\"city\":\"\",\"address\":\"\",\"km\":55,\"min\":60,\"lat\":44.8158333,\"lng\":1.1494444,\"tags\":[],\"fields\":[{\"label\":\"Nom de la ville\",\"value\":\"Castelnaud-la-Chapelle\"},{\"label\":\"Type de la ville (ville \\\/ villages \\\/ bourg...)\",\"value\":\"Village\"},{\"label\":\"D\\u00e9partement\",\"value\":\"Dordogne\"},{\"label\":\"Distance depuis le camping (km)\",\"value\":\"55\"},{\"label\":\"Temps de route depuis le camping (min.)\",\"value\":\"60\"},{\"label\":\"Points d'int\\u00e9r\\u00eats\",\"value\":\"Ch\\u00e2teau de Castelnaud, base nautique, sentiers de randonn\\u00e9e\"},{\"label\":\"Coups de coeur des g\\u00e9rants\",\"value\":\"Faire une balade en kayak sur la Dordogne et visiter le ch\\u00e2teau.\"}],\"link\":\"\",\"event\":\"\",\"faq\":[{\"question\":\"Y'a t il des commerces essentiels ?\",\"answer\":\"Il y a quelques commerces de proximit\\u00e9 et restaurants dans le village.\"},{\"question\":\"Quel est le meilleur moment pour visiter la ville ?\",\"answer\":\"Le printemps et l'\\u00e9t\\u00e9 pour pleinement profiter des activit\\u00e9s en plein air.\"},{\"question\":\"O\\u00f9 manger sans se tromper ?\",\"answer\":\"Le restaurant \\\"La Flamb\\u00e9e\\\" est une valeur s\\u00fbre pour go\\u00fbter la cuisine locale.\"},{\"question\":\"O\\u00f9 se garer facilement ?\",\"answer\":\"Des parkings sont pr\\u00e9sents \\u00e0 l'entr\\u00e9e du village et pr\\u00e8s du ch\\u00e2teau.\"},{\"question\":\"Le centre ville est il accessible aux PMR et poussettes ?\",\"answer\":\"L'accessibilit\\u00e9 est partielle, pr\\u00e9voir quelques difficult\\u00e9s sur les pav\\u00e9s et pentes.\"},{\"question\":\"Que faire quand il pleut dans la ville ?\",\"answer\":\"Visitez le ch\\u00e2teau et sa collection d'armes, puis d\\u00e9tendez-vous au caf\\u00e9 local.\"}],\"video_url\":\"\",\"video_embed\":null,\"documents\":[],\"gallery\":[]},{\"id\":3,\"featurable\":true,\"type\":\"villes-aux-alentours\",\"name\":\"Sarlat-la-Can\\u00e9da\",\"image\":\"https:\\\/\\\/elaia-public.s3.fr-par.scw.cloud\\\/metadata_images\\\/image_6a7ee90b75e53.jpeg\",\"credit\":\"\",\"description\":\"Sarlat est une ville m\\u00e9di\\u00e9vale r\\u00e9put\\u00e9e pour son architecture pr\\u00e9serv\\u00e9e, ses march\\u00e9s et son ambiance festive.\",\"city\":\"\",\"address\":\"\",\"km\":50,\"min\":55,\"lat\":44.892778,\"lng\":1.215278,\"tags\":[],\"fields\":[{\"label\":\"Nom de la ville\",\"value\":\"Sarlat-la-Can\\u00e9da\"},{\"label\":\"Type de la ville (ville \\\/ villages \\\/ bourg...)\",\"value\":\"Ville\"},{\"label\":\"D\\u00e9partement\",\"value\":\"Dordogne\"},{\"label\":\"Distance depuis le camping (km)\",\"value\":\"50\"},{\"label\":\"Temps de route depuis le camping (min.)\",\"value\":\"55\"},{\"label\":\"Points d'int\\u00e9r\\u00eats\",\"value\":\"Place de la Libert\\u00e9, march\\u00e9 m\\u00e9di\\u00e9val, \\u00e9glise Sainte-Marie\"},{\"label\":\"Coups de coeur des g\\u00e9rants\",\"value\":\"Le march\\u00e9 du samedi matin avec ses produits du terroir.\"}],\"link\":\"\",\"event\":\"\",\"faq\":[{\"question\":\"Y'a t il des commerces essentiels ?\",\"answer\":\"Oui, Sarlat dispose de commerces essentiels et d'un march\\u00e9 local tr\\u00e8s pris\\u00e9.\"},{\"question\":\"Quel est le meilleur moment pour visiter la ville ?\",\"answer\":\"Le printemps et l'\\u00e9t\\u00e9 pour profiter des march\\u00e9s et animations.\"},{\"question\":\"O\\u00f9 manger sans se tromper ?\",\"answer\":\"Le \\\"Bistrot de l'Octroi\\\" est une excellente adresse pour la gastronomie locale.\"},{\"question\":\"O\\u00f9 se garer facilement ?\",\"answer\":\"Utilisez les parkings autour de la ville et acc\\u00e9dez au centre \\u00e0 pied.\"},{\"question\":\"Le centre ville est il accessible aux PMR et poussettes ?\",\"answer\":\"Certaines ruelles pav\\u00e9es peuvent \\u00eatre difficiles, mais le centre reste accessible.\"},{\"question\":\"Que faire quand il pleut dans la ville ?\",\"answer\":\"Visitez les petites boutiques d'artisanat et les mus\\u00e9es locaux.\"}],\"video_url\":\"\",\"video_embed\":null,\"documents\":[],\"gallery\":[]},{\"id\":4,\"featurable\":true,\"type\":\"villes-aux-alentours\",\"name\":\"P\\u00e9rigueux\",\"image\":\"https:\\\/\\\/elaia-public.s3.fr-par.scw.cloud\\\/metadata_images\\\/image_6a7ee857e16c6.jpeg\",\"credit\":\"\",\"description\":\"P\\u00e9rigueux est une ville historique situ\\u00e9e \\u00e0 proximit\\u00e9 du camping. Elle est reconnue pour sa vieille ville m\\u00e9di\\u00e9vale, sa cath\\u00e9drale Saint-Front et ses ruelles pittoresques.\",\"city\":\"\",\"address\":\"\",\"km\":25,\"min\":30,\"lat\":45.18399,\"lng\":0.715783,\"tags\":[],\"fields\":[{\"label\":\"Nom de la ville\",\"value\":\"P\\u00e9rigueux\"},{\"label\":\"Type de la ville (ville \\\/ villages \\\/ bourg...)\",\"value\":\"Ville\"},{\"label\":\"D\\u00e9partement\",\"value\":\"Dordogne\"},{\"label\":\"Distance depuis le camping (km)\",\"value\":\"25\"},{\"label\":\"Temps de route depuis le camping (min.)\",\"value\":\"30\"},{\"label\":\"Points d'int\\u00e9r\\u00eats\",\"value\":\"Cath\\u00e9drale Saint-Front, mus\\u00e9e Vesunna, vieille ville m\\u00e9di\\u00e9vale\"},{\"label\":\"Coups de coeur des g\\u00e9rants\",\"value\":\"D\\u00e9couvrir le march\\u00e9 local et fl\\u00e2ner dans les rues pleines de charme.\"}],\"link\":\"\",\"event\":\"\",\"faq\":[{\"question\":\"Y'a t il des commerces essentiels ?\",\"answer\":\"Oui, P\\u00e9rigueux dispose de commerces essentiels tels que supermarch\\u00e9s, pharmacies et boulangeries.\"},{\"question\":\"Quel est le meilleur moment pour visiter la ville ?\",\"answer\":\"Le printemps et l'automne sont id\\u00e9aux pour visiter P\\u00e9rigueux, quand le climat est doux et agr\\u00e9able.\"},{\"question\":\"O\\u00f9 manger sans se tromper ?\",\"answer\":\"Le restaurant \\\"Le Petit Parisien\\\" est tr\\u00e8s recommand\\u00e9 pour sa cuisine locale authentique.\"},{\"question\":\"O\\u00f9 se garer facilement ?\",\"answer\":\"Des parkings publics sont disponibles pr\\u00e8s du centre-ville, facilitant l'acc\\u00e8s.\"},{\"question\":\"Le centre ville est il accessible aux PMR et poussettes ?\",\"answer\":\"Oui, le centre-ville est en grande partie accessible aux personnes \\u00e0 mobilit\\u00e9 r\\u00e9duite et aux poussettes.\"},{\"question\":\"Que faire quand il pleut dans la ville ?\",\"answer\":\"Visitez le mus\\u00e9e Vesunna et profitez des caf\\u00e9s locaux pour des pauses agr\\u00e9ables.\"}],\"video_url\":\"\",\"video_embed\":null,\"documents\":[],\"gallery\":[]},{\"id\":5,\"featurable\":true,\"type\":\"activites-aux-alentours\",\"name\":\"Randonn\\u00e9e : Boucle des cr\\u00eates\",\"image\":\"https:\\\/\\\/elaia-public.s3.fr-par.scw.cloud\\\/metadata_images\\\/image_6a7eec1aadbaf.png\",\"credit\":\"\",\"description\":\"Une randonn\\u00e9e p\\u00e9destre accessible qui conduit sur une boucle offrant de magnifiques vues panoramiques sur les cr\\u00eates autour de Villamblard. Adapt\\u00e9e \\u00e0 diff\\u00e9rents niveaux, cette balade permet de d\\u00e9couvrir la nature environnante dans un cadre paisible.\",\"city\":\"\",\"address\":\"\",\"km\":6,\"min\":15,\"lat\":45.0177,\"lng\":0.5408,\"tags\":[],\"fields\":[{\"label\":\"Nom de l'activit\\u00e9\",\"value\":\"Randonn\\u00e9e : Boucle des cr\\u00eates\"},{\"label\":\"Distance depuis le camping (km)\",\"value\":\"6\"},{\"label\":\"Temps de route depuis le camping (min.)\",\"value\":\"15\"},{\"label\":\"Type d'activit\\u00e9 (nature, sport, culture, etc.)\",\"value\":\"Nature\"},{\"label\":\"Cat\\u00e9gorie de public (Famille, Enfants, Senior, Ado, etc.)\",\"value\":\"Famille, Enfants, Senior, Ado\"},{\"label\":\"R\\u00e9servation ? (oui \\\/ non)\",\"value\":\"non\"},{\"label\":\"Horaires\",\"value\":\"Libre, \\u00e0 faire de jour\"},{\"label\":\"Informations et contact\",\"value\":\"Office de tourisme de Villamblard\"},{\"label\":\"Langues parl\\u00e9es \",\"value\":\"Fran\\u00e7ais\"},{\"label\":\"Animaux accept\\u00e9 (oui \\\/ non)\",\"value\":\"oui\"}],\"link\":\"\",\"event\":\"\",\"faq\":[{\"question\":\"Cette activit\\u00e9 est-elle adapt\\u00e9e aux d\\u00e9butants ?\",\"answer\":\"Oui, la boucle des cr\\u00eates est adapt\\u00e9e aux d\\u00e9butants avec un parcours bien balis\\u00e9 et accessible sans difficult\\u00e9 majeure.\"},{\"question\":\"Quel est le tarif moyen ?\",\"answer\":\"Gratuit, c'est une activit\\u00e9 nature libre d'acc\\u00e8s.\"},{\"question\":\"Cette activit\\u00e9 est-elle praticable par mauvais temps ?\",\"answer\":\"L'activit\\u00e9 est d\\u00e9conseill\\u00e9e par temps de pluie ou mauvais temps en raison des sentiers potentiellement glissants.\"}],\"video_url\":\"\",\"video_embed\":null,\"documents\":[],\"gallery\":[]},{\"id\":7,\"featurable\":true,\"type\":\"activites-aux-alentours\",\"name\":\"Cano\\u00eb \\\/ Paddle : Roxane Cano\\u00eb\",\"image\":\"https:\\\/\\\/elaia-public.s3.fr-par.scw.cloud\\\/metadata_images\\\/image_6a7eed641adb5.png\",\"credit\":\"\",\"description\":\"Location de cano\\u00ebs et paddles \\u00e0 Bergerac pour profiter des activit\\u00e9s nautiques sur la rivi\\u00e8re Dordogne. Id\\u00e9al pour d\\u00e9couvrir la r\\u00e9gion autrement et en famille ou entre amis.\",\"city\":\"\",\"address\":\"\",\"km\":25,\"min\":30,\"lat\":44.8491928,\"lng\":0.4767077,\"tags\":[],\"fields\":[{\"label\":\"Nom de l'activit\\u00e9\",\"value\":\"Cano\\u00eb \\\/ Paddle : Roxane Cano\\u00eb\"},{\"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, Nautique\"},{\"label\":\"Cat\\u00e9gorie de public (Famille, Enfants, Senior, Ado, etc.)\",\"value\":\"Famille, Enfants, Ado, Adultes\"},{\"label\":\"R\\u00e9servation ? (oui \\\/ non)\",\"value\":\"oui\"},{\"label\":\"Horaires\",\"value\":\"9h00 - 19h00\"},{\"label\":\"Informations et contact\",\"value\":\"Roxane Cano\\u00eb, 05 53 57 22 19, contact@roxanecanoe.fr\"},{\"label\":\"Langues parl\\u00e9es \",\"value\":\"Fran\\u00e7ais, Anglais\"},{\"label\":\"Animaux accept\\u00e9 (oui \\\/ non)\",\"value\":\"non\"}],\"link\":\"\",\"event\":\"\",\"faq\":[{\"question\":\"Cette activit\\u00e9 est-elle adapt\\u00e9e aux d\\u00e9butants ?\",\"answer\":\"Oui, les d\\u00e9butants peuvent louer des cano\\u00ebs et paddles avec un briefing initial.\"},{\"question\":\"Quel est le tarif moyen ?\",\"answer\":\"La location d'un cano\\u00eb co\\u00fbte environ 15 euros de l'heure.\"},{\"question\":\"Cette activit\\u00e9 est-elle praticable par mauvais temps ?\",\"answer\":\"Non, cette activit\\u00e9 est g\\u00e9n\\u00e9ralement annul\\u00e9e en cas de mauvais temps pour des raisons de s\\u00e9curit\\u00e9.\"}],\"video_url\":\"\",\"video_embed\":null,\"documents\":[],\"gallery\":[]},{\"id\":8,\"featurable\":true,\"type\":\"activites-aux-alentours\",\"name\":\"Randonn\\u00e9e : Boucle des cr\\u00eates\",\"image\":\"https:\\\/\\\/elaia-public.s3.fr-par.scw.cloud\\\/metadata_images\\\/image_6a7eec1aadbaf.png\",\"credit\":\"\",\"description\":\"Une randonn\\u00e9e p\\u00e9destre accessible qui conduit sur une boucle offrant de magnifiques vues panoramiques sur les cr\\u00eates autour de Villamblard. Adapt\\u00e9e \\u00e0 diff\\u00e9rents niveaux, cette balade permet de d\\u00e9couvrir la nature environnante dans un cadre paisible.\",\"city\":\"\",\"address\":\"\",\"km\":6,\"min\":15,\"lat\":45.0177,\"lng\":0.5408,\"tags\":[],\"fields\":[{\"label\":\"Nom de l'activit\\u00e9\",\"value\":\"Randonn\\u00e9e : Boucle des cr\\u00eates\"},{\"label\":\"Distance depuis le camping (km)\",\"value\":\"6\"},{\"label\":\"Temps de route depuis le camping (min.)\",\"value\":\"15\"},{\"label\":\"Type d'activit\\u00e9 (nature, sport, culture, etc.)\",\"value\":\"Nature\"},{\"label\":\"Cat\\u00e9gorie de public (Famille, Enfants, Senior, Ado, etc.)\",\"value\":\"Famille, Enfants, Senior, Ado\"},{\"label\":\"R\\u00e9servation ? (oui \\\/ non)\",\"value\":\"non\"},{\"label\":\"Horaires\",\"value\":\"Libre, \\u00e0 faire de jour\"},{\"label\":\"Informations et contact\",\"value\":\"Office de tourisme de Villamblard\"},{\"label\":\"Langues parl\\u00e9es \",\"value\":\"Fran\\u00e7ais\"},{\"label\":\"Animaux accept\\u00e9 (oui \\\/ non)\",\"value\":\"oui\"}],\"link\":\"\",\"event\":\"\",\"faq\":[{\"question\":\"Cette activit\\u00e9 est-elle adapt\\u00e9e aux d\\u00e9butants ?\",\"answer\":\"Oui, la boucle des cr\\u00eates est adapt\\u00e9e aux d\\u00e9butants avec un parcours bien balis\\u00e9 et accessible sans difficult\\u00e9 majeure.\"},{\"question\":\"Quel est le tarif moyen ?\",\"answer\":\"Gratuit, c'est une activit\\u00e9 nature libre d'acc\\u00e8s.\"},{\"question\":\"Cette activit\\u00e9 est-elle praticable par mauvais temps ?\",\"answer\":\"L'activit\\u00e9 est d\\u00e9conseill\\u00e9e par temps de pluie ou mauvais temps en raison des sentiers potentiellement glissants.\"}],\"video_url\":\"\",\"video_embed\":null,\"documents\":[],\"gallery\":[]},{\"id\":9,\"featurable\":true,\"type\":\"activites-aux-alentours\",\"name\":\"Visite de Bergerac\",\"image\":\"https:\\\/\\\/camping-lestaubiere.fr\\\/wp-content\\\/uploads\\\/2021\\\/09\\\/camping-bergerac-vieille-ville.jpg\",\"credit\":\"\",\"description\":\"Visite guid\\u00e9e ou libre de Bergerac, charmante ville historique avec ses ruelles, maisons \\u00e0 colombages, mus\\u00e9es et monuments, notamment autour de la place P\\u00e9lissi\\u00e8re.\",\"city\":\"\",\"address\":\"\",\"km\":25,\"min\":30,\"lat\":44.85006,\"lng\":0.48476,\"tags\":[],\"fields\":[{\"label\":\"Nom de l'activit\\u00e9\",\"value\":\"Visite de Bergerac\"},{\"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\":\"Culture, Patrimoine\"},{\"label\":\"Cat\\u00e9gorie de public (Famille, Enfants, Senior, Ado, etc.)\",\"value\":\"Famille, Senior, Ado, Adultes\"},{\"label\":\"R\\u00e9servation ? (oui \\\/ non)\",\"value\":\"non\"},{\"label\":\"Horaires\",\"value\":\"Toute la journ\\u00e9e, mieux conseill\\u00e9 le matin ou l'apr\\u00e8s-midi\"},{\"label\":\"Informations et contact\",\"value\":\"Office de Tourisme de Bergerac, +33 5 53 57 17 44\"},{\"label\":\"Langues parl\\u00e9es \",\"value\":\"Fran\\u00e7ais, Anglais\"},{\"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 visites peuvent \\u00eatre adapt\\u00e9es \\u00e0 tous les niveaux de connaissances.\"},{\"question\":\"Quel est le tarif moyen ?\",\"answer\":\"Gratuit pour une visite libre, les visites guid\\u00e9es co\\u00fbtent environ 10 euros par personne.\"},{\"question\":\"Cette activit\\u00e9 est-elle praticable par mauvais temps ?\",\"answer\":\"Oui, vous pouvez visiter les mus\\u00e9es et monuments m\\u00eame par mauvais temps.\"}],\"video_url\":\"\",\"video_embed\":null,\"documents\":[],\"gallery\":[]},{\"id\":10,\"featurable\":true,\"type\":\"activites-aux-alentours\",\"name\":\"Port miniature\",\"image\":\"https:\\\/\\\/elaia-public.s3.fr-par.scw.cloud\\\/metadata_images\\\/image_6a7eede0d982c.png\",\"credit\":\"\",\"description\":\"Parc miniature exposant des reproductions r\\u00e9duites de bateaux, situ\\u00e9 \\u00e0 Bergerac, id\\u00e9al pour une visite ludique et culturelle.\",\"city\":\"\",\"address\":\"\",\"km\":25,\"min\":30,\"lat\":44.8488551,\"lng\":0.501941,\"tags\":[],\"fields\":[{\"label\":\"Nom de l'activit\\u00e9\",\"value\":\"Port miniature\"},{\"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\":\"Culture, Loisirs\"},{\"label\":\"Cat\\u00e9gorie de public (Famille, Enfants, Senior, Ado, etc.)\",\"value\":\"Famille, Enfants, Senior, Ado\"},{\"label\":\"R\\u00e9servation ? (oui \\\/ non)\",\"value\":\"oui\"},{\"label\":\"Horaires\",\"value\":\"X\"},{\"label\":\"Informations et contact\",\"value\":\"Port Miniature Bergerac, 0635217937\"},{\"label\":\"Langues parl\\u00e9es \",\"value\":\"Fran\\u00e7ais\"},{\"label\":\"Animaux accept\\u00e9 (oui \\\/ non)\",\"value\":\"non\"}],\"link\":\"\",\"event\":\"\",\"faq\":[{\"question\":\"Cette activit\\u00e9 est-elle adapt\\u00e9e aux d\\u00e9butants ?\",\"answer\":\"Oui, accessible \\u00e0 tous, y compris aux enfants.\"},{\"question\":\"Quel est le tarif moyen ?\",\"answer\":\"Environ 5 euros par personne.\"},{\"question\":\"Cette activit\\u00e9 est-elle praticable par mauvais temps ?\",\"answer\":\"Oui, l'exposition est en int\\u00e9rieur, donc praticable par mauvais temps.\"}],\"video_url\":\"\",\"video_embed\":null,\"documents\":[],\"gallery\":[]},{\"id\":11,\"featurable\":true,\"type\":\"activites-aux-alentours\",\"name\":\"Visite de Bergerac\",\"image\":\"https:\\\/\\\/camping-lestaubiere.fr\\\/wp-content\\\/uploads\\\/2021\\\/09\\\/camping-bergerac-vieille-ville.jpg\",\"credit\":\"\",\"description\":\"Visite guid\\u00e9e ou libre de Bergerac, charmante ville historique avec ses ruelles, maisons \\u00e0 colombages, mus\\u00e9es et monuments, notamment autour de la place P\\u00e9lissi\\u00e8re.\",\"city\":\"\",\"address\":\"\",\"km\":25,\"min\":30,\"lat\":44.85006,\"lng\":0.48476,\"tags\":[],\"fields\":[{\"label\":\"Nom de l'activit\\u00e9\",\"value\":\"Visite de Bergerac\"},{\"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\":\"Culture, Patrimoine\"},{\"label\":\"Cat\\u00e9gorie de public (Famille, Enfants, Senior, Ado, etc.)\",\"value\":\"Famille, Senior, Ado, Adultes\"},{\"label\":\"R\\u00e9servation ? (oui \\\/ non)\",\"value\":\"non\"},{\"label\":\"Horaires\",\"value\":\"Toute la journ\\u00e9e, mieux conseill\\u00e9 le matin ou l'apr\\u00e8s-midi\"},{\"label\":\"Informations et contact\",\"value\":\"Office de Tourisme de Bergerac, +33 5 53 57 17 44\"},{\"label\":\"Langues parl\\u00e9es \",\"value\":\"Fran\\u00e7ais, Anglais\"},{\"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 visites peuvent \\u00eatre adapt\\u00e9es \\u00e0 tous les niveaux de connaissances.\"},{\"question\":\"Quel est le tarif moyen ?\",\"answer\":\"Gratuit pour une visite libre, les visites guid\\u00e9es co\\u00fbtent environ 10 euros par personne.\"},{\"question\":\"Cette activit\\u00e9 est-elle praticable par mauvais temps ?\",\"answer\":\"Oui, vous pouvez visiter les mus\\u00e9es et monuments m\\u00eame par mauvais temps.\"}],\"video_url\":\"\",\"video_embed\":null,\"documents\":[],\"gallery\":[]},{\"id\":13,\"featurable\":true,\"type\":\"activites-aux-alentours\",\"name\":\"Cano\\u00eb \\\/ Paddle : Roxane Cano\\u00eb\",\"image\":\"https:\\\/\\\/elaia-public.s3.fr-par.scw.cloud\\\/metadata_images\\\/image_6a7eed641adb5.png\",\"credit\":\"\",\"description\":\"Location de cano\\u00ebs et paddles \\u00e0 Bergerac pour profiter des activit\\u00e9s nautiques sur la rivi\\u00e8re Dordogne. Id\\u00e9al pour d\\u00e9couvrir la r\\u00e9gion autrement et en famille ou entre amis.\",\"city\":\"\",\"address\":\"\",\"km\":25,\"min\":30,\"lat\":44.8491928,\"lng\":0.4767077,\"tags\":[],\"fields\":[{\"label\":\"Nom de l'activit\\u00e9\",\"value\":\"Cano\\u00eb \\\/ Paddle : Roxane Cano\\u00eb\"},{\"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, Nautique\"},{\"label\":\"Cat\\u00e9gorie de public (Famille, Enfants, Senior, Ado, etc.)\",\"value\":\"Famille, Enfants, Ado, Adultes\"},{\"label\":\"R\\u00e9servation ? (oui \\\/ non)\",\"value\":\"oui\"},{\"label\":\"Horaires\",\"value\":\"9h00 - 19h00\"},{\"label\":\"Informations et contact\",\"value\":\"Roxane Cano\\u00eb, 05 53 57 22 19, contact@roxanecanoe.fr\"},{\"label\":\"Langues parl\\u00e9es \",\"value\":\"Fran\\u00e7ais, Anglais\"},{\"label\":\"Animaux accept\\u00e9 (oui \\\/ non)\",\"value\":\"non\"}],\"link\":\"\",\"event\":\"\",\"faq\":[{\"question\":\"Cette activit\\u00e9 est-elle adapt\\u00e9e aux d\\u00e9butants ?\",\"answer\":\"Oui, les d\\u00e9butants peuvent louer des cano\\u00ebs et paddles avec un briefing initial.\"},{\"question\":\"Quel est le tarif moyen ?\",\"answer\":\"La location d'un cano\\u00eb co\\u00fbte environ 15 euros de l'heure.\"},{\"question\":\"Cette activit\\u00e9 est-elle praticable par mauvais temps ?\",\"answer\":\"Non, cette activit\\u00e9 est g\\u00e9n\\u00e9ralement annul\\u00e9e en cas de mauvais temps pour des raisons de s\\u00e9curit\\u00e9.\"}],\"video_url\":\"\",\"video_embed\":null,\"documents\":[],\"gallery\":[]},{\"id\":14,\"featurable\":true,\"type\":\"activites-aux-alentours\",\"name\":\"Port miniature\",\"image\":\"https:\\\/\\\/elaia-public.s3.fr-par.scw.cloud\\\/metadata_images\\\/image_6a7eede0d982c.png\",\"credit\":\"\",\"description\":\"Parc miniature exposant des reproductions r\\u00e9duites de bateaux, situ\\u00e9 \\u00e0 Bergerac, id\\u00e9al pour une visite ludique et culturelle.\",\"city\":\"\",\"address\":\"\",\"km\":25,\"min\":30,\"lat\":44.8488551,\"lng\":0.501941,\"tags\":[],\"fields\":[{\"label\":\"Nom de l'activit\\u00e9\",\"value\":\"Port miniature\"},{\"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\":\"Culture, Loisirs\"},{\"label\":\"Cat\\u00e9gorie de public (Famille, Enfants, Senior, Ado, etc.)\",\"value\":\"Famille, Enfants, Senior, Ado\"},{\"label\":\"R\\u00e9servation ? (oui \\\/ non)\",\"value\":\"oui\"},{\"label\":\"Horaires\",\"value\":\"X\"},{\"label\":\"Informations et contact\",\"value\":\"Port Miniature Bergerac, 0635217937\"},{\"label\":\"Langues parl\\u00e9es \",\"value\":\"Fran\\u00e7ais\"},{\"label\":\"Animaux accept\\u00e9 (oui \\\/ non)\",\"value\":\"non\"}],\"link\":\"\",\"event\":\"\",\"faq\":[{\"question\":\"Cette activit\\u00e9 est-elle adapt\\u00e9e aux d\\u00e9butants ?\",\"answer\":\"Oui, accessible \\u00e0 tous, y compris aux enfants.\"},{\"question\":\"Quel est le tarif moyen ?\",\"answer\":\"Environ 5 euros par personne.\"},{\"question\":\"Cette activit\\u00e9 est-elle praticable par mauvais temps ?\",\"answer\":\"Oui, l'exposition est en int\\u00e9rieur, donc praticable par mauvais temps.\"}],\"video_url\":\"\",\"video_embed\":null,\"documents\":[],\"gallery\":[]},{\"id\":6,\"featurable\":true,\"type\":\"activites-aux-alentours\",\"name\":\"Golf de la Marterie\",\"image\":\"\",\"credit\":\"\",\"description\":\"Parcours de golf situ\\u00e9 \\u00e0 Saint-F\\u00e9lix-de-Reillac-et-Mortemart, offrant un cadre naturel agr\\u00e9able pour les passionn\\u00e9s de golf de tous niveaux.\",\"city\":\"\",\"address\":\"\",\"km\":30,\"min\":35,\"lat\":44.9991612,\"lng\":0.8796141,\"tags\":[],\"fields\":[{\"label\":\"Nom de l'activit\\u00e9\",\"value\":\"Golf de la Marterie\"},{\"label\":\"Distance depuis le camping (km)\",\"value\":\"30\"},{\"label\":\"Temps de route depuis le camping (min.)\",\"value\":\"35\"},{\"label\":\"Type d'activit\\u00e9 (nature, sport, culture, etc.)\",\"value\":\"Sport\"},{\"label\":\"Cat\\u00e9gorie de public (Famille, Enfants, Senior, Ado, etc.)\",\"value\":\"Adultes, Senior\"},{\"label\":\"R\\u00e9servation ? (oui \\\/ non)\",\"value\":\"oui\"},{\"label\":\"Horaires\",\"value\":\"X\"},{\"label\":\"Informations et contact\",\"value\":\"Golf de la Marterie, 0553056100\"},{\"label\":\"Langues parl\\u00e9es \",\"value\":\"Fran\\u00e7ais\"},{\"label\":\"Animaux accept\\u00e9 (oui \\\/ non)\",\"value\":\"non\"}],\"link\":\"\",\"event\":\"\",\"faq\":[{\"question\":\"Cette activit\\u00e9 est-elle adapt\\u00e9e aux d\\u00e9butants ?\",\"answer\":\"Non, c'est principalement recommand\\u00e9 aux joueurs initi\\u00e9s.\"},{\"question\":\"Quel est le tarif moyen ?\",\"answer\":\"Environ 40 euros le green fee pour 18 trous.\"},{\"question\":\"Cette activit\\u00e9 est-elle praticable par mauvais temps ?\",\"answer\":\"Non, le golf n'est pas praticable sous la pluie ou mauvais temps.\"}],\"video_url\":\"\",\"video_embed\":null,\"documents\":[],\"gallery\":[]},{\"id\":12,\"featurable\":true,\"type\":\"activites-aux-alentours\",\"name\":\"Golf de la Marterie\",\"image\":\"\",\"credit\":\"\",\"description\":\"Parcours de golf situ\\u00e9 \\u00e0 Saint-F\\u00e9lix-de-Reillac-et-Mortemart, offrant un cadre naturel agr\\u00e9able pour les passionn\\u00e9s de golf de tous niveaux.\",\"city\":\"\",\"address\":\"\",\"km\":30,\"min\":35,\"lat\":44.9991612,\"lng\":0.8796141,\"tags\":[],\"fields\":[{\"label\":\"Nom de l'activit\\u00e9\",\"value\":\"Golf de la Marterie\"},{\"label\":\"Distance depuis le camping (km)\",\"value\":\"30\"},{\"label\":\"Temps de route depuis le camping (min.)\",\"value\":\"35\"},{\"label\":\"Type d'activit\\u00e9 (nature, sport, culture, etc.)\",\"value\":\"Sport\"},{\"label\":\"Cat\\u00e9gorie de public (Famille, Enfants, Senior, Ado, etc.)\",\"value\":\"Adultes, Senior\"},{\"label\":\"R\\u00e9servation ? (oui \\\/ non)\",\"value\":\"oui\"},{\"label\":\"Horaires\",\"value\":\"X\"},{\"label\":\"Informations et contact\",\"value\":\"Golf de la Marterie, 0553056100\"},{\"label\":\"Langues parl\\u00e9es \",\"value\":\"Fran\\u00e7ais\"},{\"label\":\"Animaux accept\\u00e9 (oui \\\/ non)\",\"value\":\"non\"}],\"link\":\"\",\"event\":\"\",\"faq\":[{\"question\":\"Cette activit\\u00e9 est-elle adapt\\u00e9e aux d\\u00e9butants ?\",\"answer\":\"Non, c'est principalement recommand\\u00e9 aux joueurs initi\\u00e9s.\"},{\"question\":\"Quel est le tarif moyen ?\",\"answer\":\"Environ 40 euros le green fee pour 18 trous.\"},{\"question\":\"Cette activit\\u00e9 est-elle praticable par mauvais temps ?\",\"answer\":\"Non, le golf n'est pas praticable sous la pluie ou mauvais temps.\"}],\"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:\\\/\\\/camping-lestaubiere.fr\\\/wp-content\\\/uploads\\\/2021\\\/09\\\/camping-bergerac-vieille-ville.jpg\"},\"activites-aux-alentours\":{\"key\":\"activites-aux-alentours\",\"label\":\"Activit\\u00e9s aux alentours \",\"adhoc\":false,\"color\":\"#2563eb\",\"count\":10,\"image\":\"https:\\\/\\\/elaia-public.s3.fr-par.scw.cloud\\\/metadata_images\\\/image_6a7eec1aadbaf.png\"}};\n    \/\/ Textes d'interface dans la langue de la page (includes\/i18n.php)\n    var T = {\"hero_title\":\"\\u00c0 d\\u00e9couvrir autour de vous\",\"hero_text\":\"Villages, plages, balades, bonnes adresses et exp\\u00e9riences s\\u00e9lectionn\\u00e9s autour de votre s\\u00e9jour.\",\"around\":\"Autour de\",\"search_placeholder\":\"Rechercher un lieu, une activit\\u00e9, un village\\u2026\",\"search\":\"Rechercher\",\"max_distance\":\"Distance maximale\",\"all\":\"Tout\",\"prev_categories\":\"Cat\\u00e9gories pr\\u00e9c\\u00e9dentes\",\"next_categories\":\"Cat\\u00e9gories suivantes\",\"categories\":\"Cat\\u00e9gories\",\"display\":\"Affichage\",\"list\":\"Liste\",\"map\":\"Carte\",\"close\":\"Fermer\",\"featured\":\"\\u00c0 la une\",\"discover\":\"D\\u00e9couvrir\",\"idea\":\"id\\u00e9e\",\"ideas\":\"id\\u00e9es\",\"around_you\":\"autour de vous\",\"no_result\":\"Aucun r\\u00e9sultat\",\"no_result_hint\":\"Essayez une autre recherche, cat\\u00e9gorie ou distance.\",\"pagination\":\"Pagination des id\\u00e9es\",\"prev_page\":\"Page pr\\u00e9c\\u00e9dente\",\"next_page\":\"Page suivante\",\"ideas_title\":\"Id\\u00e9es selon vos envies\",\"ideas_sub\":\"Des suggestions pour composer votre s\\u00e9jour id\\u00e9al.\",\"reset_view\":\"Revenir \\u00e0 la vue d\\u2019ensemble\",\"map_hint\":\"Cliquez sur un rep\\u00e8re de la carte pour afficher la fiche ici.\",\"official_site\":\"Site officiel\",\"video\":\"Vid\\u00e9o\",\"gallery\":\"Galerie\",\"documents\":\"Documents\",\"faq\":\"Questions fr\\u00e9quentes\",\"no_answer\":\"Pas encore de r\\u00e9ponse.\",\"see_on_maps\":\"Voir sur Google Maps\",\"see_place_on_maps\":\"Voir l\\u2019\\u00e9tablissement sur Google Maps\",\"yes\":\"Oui\",\"no\":\"Non\",\"practical_info\":\"Infos pratiques\",\"reviews\":\"avis\",\"read_more\":\"Lire la suite\",\"prev_review\":\"Avis pr\\u00e9c\\u00e9dent\",\"next_review\":\"Avis suivant\",\"prev_item\":\"Pr\\u00e9c\\u00e9dent\",\"next_item\":\"Suivant\",\"photo_credit\":\"Photo\\u00a0: %s\",\"directions\":\"Itin\\u00e9raire\",\"read_less\":\"R\\u00e9duire\",\"stars_out_of_5\":\"%s \\u00e9toiles sur 5\",\"owner_reply\":\"R\\u00e9ponse de l'\\u00e9tablissement\",\"customer\":\"Client\",\"customer_reviews\":\"Avis clients\",\"rating_label\":\"Note %1$s sur 5, %2$s avis \\u2014 voir les avis\",\"reviews_by\":\"Avis pr\\u00e9sent\\u00e9s par Elaia\",\"powered_by\":\"Propuls\\u00e9 par\",\"today\":\"Aujourd'hui\",\"today_lc\":\"aujourd'hui\",\"tomorrow\":\"Demain\",\"until\":\"Jusqu'au %s\",\"from_to\":\"Du %1$s au %2$s\",\"registration\":\"Sur inscription\",\"full\":\"Complet\",\"all_animations\":\"Voir toutes les animations \\u2192\",\"ago_day\":\"il y a %d jour\",\"ago_days\":\"il y a %d jours\",\"ago_week\":\"il y a %d semaine\",\"ago_weeks\":\"il y a %d semaines\",\"ago_month\":\"il y a %d mois\",\"ago_months\":\"il y a %d mois\",\"ago_year\":\"il y a %d an\",\"ago_years\":\"il y a %d ans\",\"anim_unavailable\":\"Le programme est momentan\\u00e9ment indisponible\",\"anim_eyebrow\":\"Vivez des moments inoubliables\",\"anim_title\":\"Animations & \\u00e9v\\u00e9nements\",\"anim_hero_text\":\"Retrouvez toutes les activit\\u00e9s du moment, les temps forts de la semaine et les \\u00e9v\\u00e9nements \\u00e0 venir pendant votre s\\u00e9jour.\",\"anim_sections\":\"Sections de la page\",\"anim_nav_today\":\"Aujourd\\u2019hui\",\"anim_nav_week\":\"Cette semaine\",\"anim_nav_upcoming\":\"\\u00c0 venir\",\"anim_nav_calendar\":\"Calendrier\",\"anim_where\":\"O\\u00f9 ?\",\"anim_onsite\":\"Sur place\",\"anim_nearby\":\"Aux alentours\",\"anim_no_onsite\":\"Aucune activit\\u00e9 sur place pour le moment\",\"anim_no_nearby\":\"Aucun \\u00e9v\\u00e9nement aux alentours pour le moment\",\"anim_all_day\":\"Toute la journ\\u00e9e\",\"anim_at\":\"\\u00e0 %s\",\"anim_see_detail\":\"voir le d\\u00e9tail\",\"anim_live\":\"En cours\",\"anim_onsite_spot\":\"Sur place \\u00b7 %s\",\"anim_badge_until\":\"Jusqu'au\",\"anim_badge_from\":\"Du\",\"anim_badge_today\":\"Auj.\",\"anim_filter_cat\":\"Filtrer par cat\\u00e9gorie\",\"anim_all_f\":\"Toutes\",\"anim_prev_day\":\"Jour pr\\u00e9c\\u00e9dent\",\"anim_next_day\":\"Jour suivant\",\"anim_today_title\":\"Activit\\u00e9s du jour\",\"anim_tomorrow_title\":\"Activit\\u00e9s de demain\",\"anim_day_title\":\"Activit\\u00e9s du %s\",\"anim_relax_today\":\"Journ\\u00e9e d\\u00e9tente aujourd\\u2019hui\",\"anim_nothing_day\":\"Rien de pr\\u00e9vu ce jour-l\\u00e0\",\"anim_next_on\":\"Prochain rendez-vous le %s.\",\"anim_soon\":\"Le programme sera bient\\u00f4t mis \\u00e0 jour.\",\"anim_see_day\":\"Voir ce jour-l\\u00e0\",\"anim_prev_acts\":\"Activit\\u00e9s pr\\u00e9c\\u00e9dentes\",\"anim_next_acts\":\"Activit\\u00e9s suivantes\",\"anim_prev_week\":\"Semaine pr\\u00e9c\\u00e9dente\",\"anim_next_week\":\"Semaine suivante\",\"anim_week_title\":\"Les temps forts de la semaine\",\"anim_next_week_title\":\"La semaine prochaine\",\"anim_week_of\":\"Semaine du %s\",\"anim_week_days\":\"Jours de la semaine\",\"anim_today_paren\":\"(aujourd\\u2019hui)\",\"anim_activity\":\"%d activit\\u00e9\",\"anim_activities\":\"%d activit\\u00e9s\",\"anim_nothing\":\"rien de pr\\u00e9vu\",\"anim_pick_day\":\"S\\u00e9lectionnez un autre jour pour voir son programme.\",\"anim_sort\":\"Trier les \\u00e9v\\u00e9nements\",\"anim_sort_date\":\"Trier par date\",\"anim_sort_name\":\"Trier par nom\",\"anim_upcoming_title\":\"Tous les \\u00e9v\\u00e9nements \\u00e0 venir\",\"anim_no_upcoming\":\"Aucun \\u00e9v\\u00e9nement \\u00e0 venir\",\"anim_try_cat\":\"Essayez une autre cat\\u00e9gorie.\",\"anim_more\":\"Voir plus d\\u2019\\u00e9v\\u00e9nements (%d)\",\"anim_hide_cal\":\"Masquer le calendrier\",\"anim_show_cal\":\"Voir le calendrier complet\",\"anim_cal_title\":\"Calendrier du mois\",\"anim_cal_sub\":\"Tous les rendez-vous du mois en un coup d\\u2019\\u0153il.\",\"anim_prev_month\":\"Mois pr\\u00e9c\\u00e9dent\",\"anim_next_month\":\"Mois suivant\",\"anim_more_info\":\"Plus d\\u2019informations\",\"anim_new_tab\":\"(nouvel onglet)\",\"date_locale\":\"fr-FR\",\"page_faq\":\"FAQ\",\"page_metadatas\":\"D\\u00e9couvrez autour de vous\",\"page_animations\":\"Animations et \\u00e9v\\u00e9nements\",\"page_corpus\":\"Informations pratiques\",\"anim_event\":\"\\u00c9v\\u00e9nement\"};\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":{"_acf_changed":false,"footnotes":""},"class_list":["post-4043","page","type-page","status-publish","hentry"],"acf":[],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v28.7 - https:\/\/yoast.com\/product\/yoast-seo-wordpress\/ -->\n<title>D\u00e9couvrez autour de vous - Camping Lestaubi\u00e8re<\/title>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/camping-lestaubiere.fr\/fr\/elaia-metadatas\/\" \/>\n<meta property=\"og:locale\" content=\"fr_FR\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"D\u00e9couvrez autour de vous - Camping Lestaubi\u00e8re\" \/>\n<meta property=\"og:url\" content=\"https:\/\/camping-lestaubiere.fr\/fr\/elaia-metadatas\/\" \/>\n<meta property=\"og:site_name\" content=\"Camping Lestaubi\u00e8re\" \/>\n<meta property=\"article:modified_time\" content=\"2026-10-20T13:07:08+00:00\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\\\/\\\/schema.org\",\"@graph\":[{\"@type\":\"WebPage\",\"@id\":\"https:\\\/\\\/camping-lestaubiere.fr\\\/fr\\\/elaia-metadatas\\\/\",\"url\":\"https:\\\/\\\/camping-lestaubiere.fr\\\/fr\\\/elaia-metadatas\\\/\",\"name\":\"D\u00e9couvrez autour de vous - Camping Lestaubi\u00e8re\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/camping-lestaubiere.fr\\\/fr\\\/#website\"},\"datePublished\":\"2026-04-13T08:42:15+00:00\",\"dateModified\":\"2026-10-20T13:07:08+00:00\",\"breadcrumb\":{\"@id\":\"https:\\\/\\\/camping-lestaubiere.fr\\\/fr\\\/elaia-metadatas\\\/#breadcrumb\"},\"inLanguage\":\"fr-FR\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\\\/\\\/camping-lestaubiere.fr\\\/fr\\\/elaia-metadatas\\\/\"]}]},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\\\/\\\/camping-lestaubiere.fr\\\/fr\\\/elaia-metadatas\\\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Camping Dordogne\",\"item\":\"https:\\\/\\\/camping-lestaubiere.fr\\\/fr\\\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"D\u00e9couvrez autour de vous\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\\\/\\\/camping-lestaubiere.fr\\\/fr\\\/#website\",\"url\":\"https:\\\/\\\/camping-lestaubiere.fr\\\/fr\\\/\",\"name\":\"Camping Lestaubi\u00e8re\",\"description\":\"\",\"publisher\":{\"@id\":\"https:\\\/\\\/camping-lestaubiere.fr\\\/fr\\\/#organization\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\\\/\\\/camping-lestaubiere.fr\\\/fr\\\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"fr-FR\"},{\"@type\":\"Organization\",\"@id\":\"https:\\\/\\\/camping-lestaubiere.fr\\\/fr\\\/#organization\",\"name\":\"Camping Lestaubiere\",\"url\":\"https:\\\/\\\/camping-lestaubiere.fr\\\/fr\\\/\",\"logo\":{\"@type\":\"ImageObject\",\"inLanguage\":\"fr-FR\",\"@id\":\"https:\\\/\\\/camping-lestaubiere.fr\\\/fr\\\/#\\\/schema\\\/logo\\\/image\\\/\",\"url\":\"https:\\\/\\\/camping-lestaubiere.fr\\\/wp-content\\\/uploads\\\/2021\\\/09\\\/logo-camping-lestaubiere.png\",\"contentUrl\":\"https:\\\/\\\/camping-lestaubiere.fr\\\/wp-content\\\/uploads\\\/2021\\\/09\\\/logo-camping-lestaubiere.png\",\"width\":259,\"height\":89,\"caption\":\"Camping Lestaubiere\"},\"image\":{\"@id\":\"https:\\\/\\\/camping-lestaubiere.fr\\\/fr\\\/#\\\/schema\\\/logo\\\/image\\\/\"}}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"D\u00e9couvrez autour de vous - Camping Lestaubi\u00e8re","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/camping-lestaubiere.fr\/fr\/elaia-metadatas\/","og_locale":"fr_FR","og_type":"article","og_title":"D\u00e9couvrez autour de vous - Camping Lestaubi\u00e8re","og_url":"https:\/\/camping-lestaubiere.fr\/fr\/elaia-metadatas\/","og_site_name":"Camping Lestaubi\u00e8re","article_modified_time":"2026-10-20T13:07:08+00:00","twitter_card":"summary_large_image","schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"WebPage","@id":"https:\/\/camping-lestaubiere.fr\/fr\/elaia-metadatas\/","url":"https:\/\/camping-lestaubiere.fr\/fr\/elaia-metadatas\/","name":"D\u00e9couvrez autour de vous - Camping Lestaubi\u00e8re","isPartOf":{"@id":"https:\/\/camping-lestaubiere.fr\/fr\/#website"},"datePublished":"2026-04-13T08:42:15+00:00","dateModified":"2026-10-20T13:07:08+00:00","breadcrumb":{"@id":"https:\/\/camping-lestaubiere.fr\/fr\/elaia-metadatas\/#breadcrumb"},"inLanguage":"fr-FR","potentialAction":[{"@type":"ReadAction","target":["https:\/\/camping-lestaubiere.fr\/fr\/elaia-metadatas\/"]}]},{"@type":"BreadcrumbList","@id":"https:\/\/camping-lestaubiere.fr\/fr\/elaia-metadatas\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Camping Dordogne","item":"https:\/\/camping-lestaubiere.fr\/fr\/"},{"@type":"ListItem","position":2,"name":"D\u00e9couvrez autour de vous"}]},{"@type":"WebSite","@id":"https:\/\/camping-lestaubiere.fr\/fr\/#website","url":"https:\/\/camping-lestaubiere.fr\/fr\/","name":"Camping Lestaubi\u00e8re","description":"","publisher":{"@id":"https:\/\/camping-lestaubiere.fr\/fr\/#organization"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/camping-lestaubiere.fr\/fr\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"fr-FR"},{"@type":"Organization","@id":"https:\/\/camping-lestaubiere.fr\/fr\/#organization","name":"Camping Lestaubiere","url":"https:\/\/camping-lestaubiere.fr\/fr\/","logo":{"@type":"ImageObject","inLanguage":"fr-FR","@id":"https:\/\/camping-lestaubiere.fr\/fr\/#\/schema\/logo\/image\/","url":"https:\/\/camping-lestaubiere.fr\/wp-content\/uploads\/2021\/09\/logo-camping-lestaubiere.png","contentUrl":"https:\/\/camping-lestaubiere.fr\/wp-content\/uploads\/2021\/09\/logo-camping-lestaubiere.png","width":259,"height":89,"caption":"Camping Lestaubiere"},"image":{"@id":"https:\/\/camping-lestaubiere.fr\/fr\/#\/schema\/logo\/image\/"}}]}},"_links":{"self":[{"href":"https:\/\/camping-lestaubiere.fr\/fr\/wp-json\/wp\/v2\/pages\/4043","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/camping-lestaubiere.fr\/fr\/wp-json\/wp\/v2\/pages"}],"about":[{"href":"https:\/\/camping-lestaubiere.fr\/fr\/wp-json\/wp\/v2\/types\/page"}],"author":[{"embeddable":true,"href":"https:\/\/camping-lestaubiere.fr\/fr\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/camping-lestaubiere.fr\/fr\/wp-json\/wp\/v2\/comments?post=4043"}],"version-history":[{"count":1,"href":"https:\/\/camping-lestaubiere.fr\/fr\/wp-json\/wp\/v2\/pages\/4043\/revisions"}],"predecessor-version":[{"id":4269,"href":"https:\/\/camping-lestaubiere.fr\/fr\/wp-json\/wp\/v2\/pages\/4043\/revisions\/4269"}],"wp:attachment":[{"href":"https:\/\/camping-lestaubiere.fr\/fr\/wp-json\/wp\/v2\/media?parent=4043"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}