JULOS BEAUCARNE Le livre
JULOS BEAUCARNE Il faut s’aimer à tort et à travers NELLY GAY Préface de Phlippe Delerm Le livre...
Read More/* ══════════════════════════════════════════════════════════ ilx-marches — extension thématique pour l'article pilier "Marchés de la province de Luxembourg" ══════════════════════════════════════════════════════════ */ /* Hero magazine */ .ilx-pp .marches-hero { background: linear-gradient(135deg, #14532d 0%, #166534 45%, #f0a500 100%) !important; color: #fff; padding: 38px 36px; border-radius: 16px; margin: 0 0 1.8em; box-shadow: 0 10px 30px rgba(20,83,45,0.18); position: relative; overflow: hidden; } .ilx-pp .marches-hero::after { content: ""; position: absolute; inset: 0; background: radial-gradient(circle at 85% 20%, rgba(255,255,255,0.18), transparent 55%); pointer-events: none; } .ilx-pp .marches-hero h1 { color: #fff !important; font-size: 1.9em !important; margin: 0 0 12px; line-height: 1.2 !important; font-weight: 800; } .ilx-pp .marches-hero p { color: #f0fdf4 !important; font-size: 1.1em !important; margin: 0 0 18px; max-width: 720px; } .ilx-pp .marches-hero .badges { display: flex; flex-wrap: wrap; gap: 10px; } .ilx-pp .marches-hero .badge { display: inline-flex; align-items: center; gap: 6px; background: rgba(255,255,255,0.18); backdrop-filter: blur(6px); border: 1px solid rgba(255,255,255,0.25); padding: 7px 14px; border-radius: 20px; font-size: 0.88em; font-weight: 600; } /* ────── Carte interactive ────── */ .ilx-pp .ilx-marches-tool { background: #fff; border: 1px solid #e2e8f0; border-radius: 16px; padding: 24px; margin: 2em 0; box-shadow: 0 6px 20px rgba(15,23,42,0.06); } .ilx-pp .ilx-marches-tool h3 { color: #14532d !important; margin: 0 0 8px; font-size: 1.25em !important; border-bottom: none; } .ilx-pp .ilx-marches-tool .tool-sub { color: #475569; font-size: 0.95em !important; margin: 0 0 18px !important; } /* Filtre par jour */ .ilx-pp .ilx-jours-filter { display: flex; flex-wrap: wrap; gap: 8px; margin: 0 0 18px; } .ilx-pp .ilx-jour-btn { appearance: none; border: 2px solid #e2e8f0; background: #f8fafc; color: #475569; padding: 9px 16px; border-radius: 10px; font-size: 0.95em; font-weight: 600; cursor: pointer; transition: all 0.18s ease; font-family: inherit; } .ilx-pp .ilx-jour-btn:hover { border-color: #f0a500; color: #1a2744; transform: translateY(-1px); } .ilx-pp .ilx-jour-btn.is-active { background: linear-gradient(135deg, #14532d, #166534); color: #fff !important; border-color: #14532d; box-shadow: 0 4px 12px rgba(20,83,45,0.25); } .ilx-pp .ilx-jour-btn .count { display: inline-block; background: rgba(255,255,255,0.25); color: inherit; margin-left: 6px; padding: 1px 7px; border-radius: 8px; font-size: 0.78em; } .ilx-pp .ilx-jour-btn:not(.is-active) .count { background: #1a2744; color: #fff; } /* Conteneur carte Leaflet */ .ilx-pp #ilx-marches-map { width: 100%; height: 520px; border-radius: 12px; border: 1px solid #cbd5e1; margin: 0 0 18px; background: #f1f5f9; } .ilx-pp #ilx-marches-map .leaflet-popup-content { font-family: 'Segoe UI', Calibri, Arial, sans-serif; font-size: 13.5px; line-height: 1.55; } .ilx-pp #ilx-marches-map .leaflet-popup-content strong { color: #14532d; } /* Légende */ .ilx-pp .ilx-map-legend { display: flex; flex-wrap: wrap; gap: 14px; padding: 12px 16px; background: #f8fafc; border: 1px solid #e2e8f0; border-radius: 10px; font-size: 0.88em; color: #475569; } .ilx-pp .ilx-map-legend .legend-dot { display: inline-block; width: 14px; height: 14px; border-radius: 50%; margin-right: 6px; vertical-align: middle; border: 2px solid #fff; box-shadow: 0 0 0 1px rgba(0,0,0,0.15); } /* Liste filtrée des marchés du jour */ .ilx-pp .ilx-marches-results { display: grid; grid-template-columns: repeat(auto-fill, minmax(260px, 1fr)); gap: 14px; margin: 18px 0 0; min-height: 60px; } .ilx-pp .ilx-marche-card { background: #f8fafc; border: 1px solid #e2e8f0; border-left: 4px solid #14532d; border-radius: 10px; padding: 14px 16px; transition: transform 0.18s, box-shadow 0.18s; } .ilx-pp .ilx-marche-card:hover { transform: translateY(-2px); box-shadow: 0 6px 16px rgba(20,83,45,0.10); } .ilx-pp .ilx-marche-card .nom { font-weight: 700; color: #1a2744; font-size: 1.05em; margin: 0 0 4px; } .ilx-pp .ilx-marche-card .lieu { font-size: 0.88em; color: #475569; margin: 0 0 6px; } .ilx-pp .ilx-marche-card .horaire { font-size: 0.95em; color: #14532d; font-weight: 600; } .ilx-pp .ilx-marche-card .type-pill { display: inline-block; font-size: 0.72em; font-weight: 700; padding: 2px 9px; border-radius: 12px; margin-top: 6px; text-transform: uppercase; letter-spacing: 0.5px; } .ilx-pp .ilx-marche-card .type-hebdo { background: #14532d; color: #fff; } .ilx-pp .ilx-marche-card .type-mensuel { background: #f0a500; color: #1a2744; } .ilx-pp .ilx-marche-card .type-terroir { background: #8b5cf6; color: #fff; } .ilx-pp .ilx-marche-card .type-saisonnier { background: #3b82f6; color: #fff; } .ilx-pp .ilx-marche-card .type-annuel { background: #ef4444; color: #fff; } .ilx-pp .ilx-marches-empty { grid-column: 1 / -1; text-align: center; color: #64748b; padding: 30px; font-style: italic; background: #f8fafc; border-radius: 10px; } /* ────── Cards "marchés vedettes" (descriptions longues) ────── */ .ilx-pp .marche-vedette { background: linear-gradient(135deg, #fff 0%, #f0fdf4 100%); border: 1px solid #bbf7d0; border-left: 6px solid #14532d; border-radius: 14px; padding: 26px 30px; margin: 1.6em 0; box-shadow: 0 4px 16px rgba(20,83,45,0.08); } .ilx-pp .marche-vedette .vedette-head { display: flex; align-items: center; gap: 14px; flex-wrap: wrap; margin-bottom: 12px; } .ilx-pp .marche-vedette h3 { color: #14532d !important; margin: 0 !important; font-size: 1.35em !important; flex: 1; } .ilx-pp .marche-vedette .vedette-pill { display: inline-block; background: #14532d; color: #fff; font-size: 0.75em; font-weight: 700; padding: 4px 12px; border-radius: 12px; text-transform: uppercase; letter-spacing: 0.5px; } .ilx-pp .marche-vedette .vedette-meta { display: grid; grid-template-columns: repeat(auto-fit, minmax(180px, 1fr)); gap: 10px; margin: 14px 0; padding: 12px; background: #fff; border-radius: 10px; border: 1px solid #d1fae5; } .ilx-pp .marche-vedette .vm-item { font-size: 0.92em; } .ilx-pp .marche-vedette .vm-item .vm-label { display: block; font-size: 0.78em; text-transform: uppercase; letter-spacing: 0.6px; color: #14532d; font-weight: 700; margin-bottom: 2px; } .ilx-pp .marche-vedette .vm-item .vm-value { color: #1a2744; font-weight: 600; } /* Verifier-commune (badge téléphone) */ .ilx-pp .verifier-commune { display: inline-block; background: #fef3c7; color: #92400e; border: 1px dashed #f59e0b; padding: 4px 10px; border-radius: 8px; font-size: 0.85em; font-weight: 600; margin-left: 6px; } .ilx-pp .verifier-commune a { color: #92400e !important; text-decoration: none !important; } .ilx-pp .verifier-commune a:hover { text-decoration: underline !important; } /* Sous-régions : couleurs distinctives */ .ilx-pp .sousregion-arlon h2 { border-bottom-color: #f0a500 !important; } .ilx-pp .sousregion-gaume h2 { border-bottom-color: #16a34a !important; } .ilx-pp .sousregion-centre h2 { border-bottom-color: #8b5cf6 !important; } .ilx-pp .sousregion-famenne h2 { border-bottom-color: #3b82f6 !important; } .ilx-pp .sousregion-haute h2 { border-bottom-color: #ef4444 !important; } .ilx-pp .sousregion-tag { display: inline-block; font-size: 0.78em; font-weight: 700; padding: 4px 12px; border-radius: 12px; margin-bottom: 10px; text-transform: uppercase; letter-spacing: 0.6px; } .ilx-pp .sousregion-arlon .sousregion-tag { background: #f0a500; color: #1a2744; } .ilx-pp .sousregion-gaume .sousregion-tag { background: #16a34a; color: #fff; } .ilx-pp .sousregion-centre .sousregion-tag { background: #8b5cf6; color: #fff; } .ilx-pp .sousregion-famenne .sousregion-tag { background: #3b82f6; color: #fff; } .ilx-pp .sousregion-haute .sousregion-tag { background: #ef4444; color: #fff; } /* Tableau marchés : version optimisée */ .ilx-pp .table-marches td.col-jour { font-weight: 700; color: #14532d; white-space: nowrap; } .ilx-pp .table-marches td.col-type { font-size: 0.88em; } .ilx-pp .table-marches .pill { display: inline-block; font-size: 0.72em; font-weight: 700; padding: 2px 8px; border-radius: 10px; text-transform: uppercase; letter-spacing: 0.4px; } .ilx-pp .table-marches .pill-hebdo { background: #14532d; color: #fff; } .ilx-pp .table-marches .pill-mensuel { background: #f0a500; color: #1a2744; } .ilx-pp .table-marches .pill-terroir { background: #8b5cf6; color: #fff; } .ilx-pp .table-marches .pill-saisonnier { background: #3b82f6; color: #fff; } .ilx-pp .table-marches .pill-annuel { background: #ef4444; color: #fff; } /* Stats hero (chiffres clés en haut) */ .ilx-pp .stats-marches { display: grid; grid-template-columns: repeat(auto-fit, minmax(160px, 1fr)); gap: 14px; margin: 1.5em 0; } .ilx-pp .stat-card { background: #fff; border: 1px solid #e2e8f0; border-radius: 12px; padding: 18px; text-align: center; box-shadow: 0 2px 8px rgba(15,23,42,0.05); } .ilx-pp .stat-card .stat-num { font-size: 2em; font-weight: 800; color: #14532d; line-height: 1; margin-bottom: 4px; } .ilx-pp .stat-card .stat-label { font-size: 0.88em; color: #475569; text-transform: uppercase; letter-spacing: 0.5px; } /* Sommaire ancres */ .ilx-pp .sommaire-marches { background: #f0fdf4; border: 1px solid #bbf7d0; border-radius: 12px; padding: 20px 24px; margin: 1.8em 0; } .ilx-pp .sommaire-marches h3 { color: #14532d !important; margin: 0 0 12px !important; font-size: 1.1em !important; border-bottom: none; } .ilx-pp .sommaire-marches ul { columns: 2; column-gap: 30px; padding-left: 1.2em; margin: 0; } .ilx-pp .sommaire-marches li { margin-bottom: 6px; break-inside: avoid; font-size: 0.95em; } .ilx-pp .sommaire-marches li a { color: #14532d; text-decoration: none; font-weight: 600; } .ilx-pp .sommaire-marches li a:hover { color: #f0a500; text-decoration: underline; } /* Responsive */ @media (max-width: 768px) { .ilx-pp .marches-hero { padding: 24px 22px; } .ilx-pp .marches-hero h1 { font-size: 1.5em !important; } .ilx-pp #ilx-marches-map { height: 400px; } .ilx-pp .ilx-jour-btn { padding: 7px 12px; font-size: 0.88em; } .ilx-pp .marche-vedette { padding: 20px 18px; } .ilx-pp .sommaire-marches ul { columns: 1; } .ilx-pp .table-marches { font-size: 0.78em; } .ilx-pp .table-marches th, .ilx-pp .table-marches td { padding: 8px 10px; } } <!-- ============================================================ SNIPPET WPCODE - Carte interactive marches Province Luxembourg Type : HTML Snippet Emplacement : everywhere (footer-like via WPCode v2.x) Nom : "JS Marches Luxembourg Leaflet" ============================================================ - Leaflet est DEJA charge par le plugin Directories Pro sur info-lux.com (URL : /wp-content/plugins/directories-pro/assets/vendor/js/leaflet.min.js) - On retire le + qui etaient strippes par WP Rocket - On retry tant que `L` ou `#ilx-marches-map` ne sont pas dispo ============================================================ --> (function () { var attempts = 0; var MAX_ATTEMPTS = 60; // 60 * 250ms = 15s max function init() { attempts++; var mapEl = document.getElementById('ilx-marches-map'); // La div carte n'est pas dans le DOM (autre page) -> stop if (!mapEl && attempts > 4) return; // Pas encore charge OU Leaflet pas encore disponible if (!mapEl || typeof L === 'undefined') { if (attempts < MAX_ATTEMPTS) setTimeout(init, 250); return; } // Eviter double init si le script est inclus deux fois if (mapEl._ilxInited) return; mapEl._ilxInited = true; // ──────────────────────────────────────────────── // Donnees marches (source unique pour la carte + le filtre) // ──────────────────────────────────────────────── var MARCHES = [ // PAYS D'ARLON { nom: "Arlon - centre-ville", commune: "Arlon", lieu: "Place Léopold, Marché-aux-Légumes", lat: 49.6837, lng: 5.8163, jours: ["jeudi"], horaire: "Dès 8h", type: "hebdo", freq: "Tous les jeudis matin" }, { nom: "Brocante du Vieil Arlon", commune: "Arlon", lieu: "Centre historique", lat: 49.6843, lng: 5.8175, jours: ["dimanche"], horaire: "8h-16h", type: "mensuel", freq: "1er dimanche du mois" }, { nom: "Aubange - Athus", commune: "Aubange", lieu: "Rue des Jardins / rue du Commerce", lat: 49.5594, lng: 5.8336, jours: ["vendredi"], horaire: "6h-13h30", type: "hebdo", freq: "Tous les vendredis" }, { nom: "Aubange - Halanzy", commune: "Aubange", lieu: "Place Communale, Halanzy", lat: 49.5556, lng: 5.7861, jours: ["samedi"], horaire: "7h30-13h", type: "hebdo", freq: "Tous les samedis" }, { nom: "Habay-la-Neuve", commune: "Habay", lieu: "Place Pierre Nothomb", lat: 49.7236, lng: 5.6406, jours: ["mercredi"], horaire: "7h-13h", type: "hebdo", freq: "Tous les mercredis" }, { nom: "Saveurs Locales (Habay)", commune: "Habay", lieu: "Place Pierre Nothomb / Espace Bologne", lat: 49.7236, lng: 5.6411, jours: ["samedi"], horaire: "9h-12h", type: "terroir", freq: "Tous les samedis" }, { nom: "Marbehan", commune: "Habay", lieu: "Grand Rue, 6724 Marbehan", lat: 49.7019, lng: 5.5586, jours: ["mardi"], horaire: "Matin", type: "hebdo", freq: "Tous les mardis matin" }, // GAUME { nom: "Virton", commune: "Virton", lieu: "Place Nestor Outer", lat: 49.5681, lng: 5.5311, jours: ["vendredi"], horaire: "8h-12h", type: "hebdo", freq: "Tous les vendredis" }, { nom: "Étalle", commune: "Étalle", lieu: "Rue Saint-Antoine", lat: 49.6739, lng: 5.6014, jours: ["samedi"], horaire: "7h-13h", type: "saisonnier", freq: "Samedis (saison)" }, { nom: "Florenville (mensuel)", commune: "Florenville", lieu: "Place Albert 1er & Place des Trois Suzanne", lat: 49.6987, lng: 5.3072, jours: ["mercredi"], horaire: "Matin", type: "mensuel", freq: "1er mercredi du mois" }, { nom: "Florenville (été)", commune: "Florenville", lieu: "Place Albert 1er", lat: 49.6989, lng: 5.3074, jours: ["mercredi"], horaire: "9h-18h", type: "saisonnier", freq: "Mercredis juillet-août" }, { nom: "Chassepierre", commune: "Florenville", lieu: "Centre village, rue Antoine", lat: 49.7058, lng: 5.2675, jours: ["dimanche"], horaire: "8h-12h", type: "terroir", freq: "Tous les dimanches" }, { nom: "Jamoigne", commune: "Chiny", lieu: "Place de Jamoigne", lat: 49.7219, lng: 5.3408, jours: ["mardi"], horaire: "15h-18h30", type: "saisonnier", freq: "Mardis (saison)" }, { nom: "Halle de Han", commune: "Tintigny", lieu: "Halle de Han, Han 36, 6730 Tintigny", lat: 49.6917, lng: 5.5172, jours: ["vendredi"], horaire: "17h-20h", type: "terroir", freq: "Tous les vendredis" }, // CENTRE-ARDENNE { nom: "Bastogne - Foire aux camelots", commune: "Bastogne", lieu: "Rue des Récollets", lat: 50.0007, lng: 5.7167, jours: ["samedi"], horaire: "7h-13h", type: "hebdo", freq: "Samedi sur deux" }, { nom: "Bertrix", commune: "Bertrix", lieu: "Pl. des Trois Fers / Pl. de la Gare", lat: 49.8517, lng: 5.2569, jours: ["jeudi"], horaire: "8h-13h", type: "hebdo", freq: "Tous les jeudis" }, { nom: "Bertogne", commune: "Bertogne", lieu: "Place du Commerce", lat: 50.0167, lng: 5.6500, jours: ["mardi"], horaire: "14h-17h30", type: "saisonnier", freq: "Mardis (avril-octobre)" }, { nom: "Marché des 3 communes (Tenneville)", commune: "Tenneville", lieu: "Salle Le Foyer, sous l'église", lat: 50.1000, lng: 5.5333, jours: ["vendredi"], horaire: "17h-20h", type: "terroir", freq: "1er vendredi (sf jan/jui/août)" }, { nom: "Saint-Hubert", commune: "Saint-Hubert", lieu: "Place de l'Abbaye", lat: 50.0269, lng: 5.3717, jours: ["samedi"], horaire: "Matin", type: "mensuel", freq: "1er samedi du mois (à confirmer)" }, { nom: "Marché du Terroir Libramont", commune: "Libramont", lieu: "Place Communale", lat: 49.9203, lng: 5.3756, jours: ["vendredi"], horaire: "16h-20h", type: "terroir", freq: "2e & 4e vendredis (mars-oct)" }, { nom: "Marché du Terroir Neufchâteau", commune: "Neufchâteau", lieu: "Espace 29", lat: 49.8408, lng: 5.4358, jours: ["samedi"], horaire: "15h-19h", type: "terroir", freq: "Samedis (saisonnier)" }, { nom: "Marché du Terroir de Léglise", commune: "Léglise", lieu: "Place du Marché", lat: 49.8053, lng: 5.5364, jours: ["samedi"], horaire: "15h-19h (bar 20h)", type: "terroir", freq: "1er samedi (avril-octobre)" }, { nom: "Petits Marchés de Redu", commune: "Libin", lieu: "Place de l'Esro, Village du Livre", lat: 50.0064, lng: 5.1614, jours: ["samedi"], horaire: "13h30-18h30", type: "terroir", freq: "1er samedi (avril-octobre)" }, { nom: "Marché des Bastions de Bouillon", commune: "Bouillon", lieu: "Boulevard Heynens", lat: 49.7942, lng: 5.0681, jours: ["dimanche"], horaire: "8h-13h", type: "saisonnier", freq: "Dimanches (29 mars - 25 oct)" }, // FAMENNE-ARDENNE { nom: "Marche-en-Famenne", commune: "Marche-en-Famenne", lieu: "Place aux Foires + Bd du Midi", lat: 50.2289, lng: 5.3431, jours: ["lundi"], horaire: "Matin", type: "mensuel", freq: "1er & 3e lundis du mois" }, { nom: "Marché gourmand de Marche", commune: "Marche-en-Famenne", lieu: "Place du Roi Albert", lat: 50.2278, lng: 5.3422, jours: ["vendredi"], horaire: "15h-20h", type: "terroir", freq: "2e vendredi (juin-octobre)" }, { nom: "Marché 1900", commune: "Marche-en-Famenne", lieu: "Centre-ville", lat: 50.2289, lng: 5.3439, jours: ["jeudi","vendredi","samedi","dimanche","lundi","mardi","mercredi"], horaire: "Toute la journée", type: "annuel", freq: "15 août (annuel)" }, { nom: "Hotton", commune: "Hotton", lieu: "Rue Haute", lat: 50.2658, lng: 5.4467, jours: ["samedi"], horaire: "7h-13h", type: "hebdo", freq: "Samedi sur deux" }, { nom: "Barvaux-sur-Ourthe", commune: "Durbuy", lieu: "Place du Marché, Barvaux", lat: 50.3458, lng: 5.5083, jours: ["mercredi"], horaire: "Matin", type: "hebdo", freq: "Tous les mercredis" }, { nom: "Petite Batte de Bomal", commune: "Durbuy", lieu: "Bomal-sur-Ourthe", lat: 50.3800, lng: 5.5478, jours: ["dimanche"], horaire: "Matin", type: "hebdo", freq: "Tous les dimanches" }, { nom: "March'Heyd", commune: "Durbuy", lieu: "Rowe di Veule 7, Heyd", lat: 50.3553, lng: 5.5739, jours: ["vendredi"], horaire: "15h30-18h", type: "terroir", freq: "Vendredis (mai-décembre)" }, { nom: "Mini Marché de Jenneret", commune: "Durbuy", lieu: "Jenneret", lat: 50.3742, lng: 5.4906, jours: ["jeudi"], horaire: "Dès 17h", type: "saisonnier", freq: "Jeudis (belle saison)" }, { nom: "Marché de Rendeux", commune: "Rendeux", lieu: "Salle Schérès, Rendeux-Haut", lat: 50.2403, lng: 5.5472, jours: ["jeudi"], horaire: "15h30-18h30", type: "terroir", freq: "Jeudis (mi-mars à novembre)" }, { nom: "Forrières (Nassogne)", commune: "Nassogne", lieu: "Forrières", lat: 50.1264, lng: 5.2842, jours: ["samedi"], horaire: "Matin", type: "mensuel", freq: "2e & 4e samedis du mois" }, // HAUTE-ARDENNE { nom: "Petit Marché de Vielsalm", commune: "Vielsalm", lieu: "Place Bruyères-en-Vosges", lat: 50.2806, lng: 5.9117, jours: ["mardi"], horaire: "16h-18h30", type: "terroir", freq: "Tous les mardis" }, { nom: "Saveurs d'Ardenne (Farnières)", commune: "Vielsalm", lieu: "Domaine de Farnières, Grand-Halleux", lat: 50.3206, lng: 5.9603, jours: ["mardi"], horaire: "17h-21h", type: "saisonnier", freq: "Mardis (27 juin - 29 août)" }, { nom: "Houffalize", commune: "Houffalize", lieu: "Place Janvier 45", lat: 50.1300, lng: 5.7900, jours: ["samedi"], horaire: "7h30-13h30", type: "hebdo", freq: "Samedi sur deux" }, { nom: "Marché du Terroir Houffalize", commune: "Houffalize", lieu: "Place Janvier 45", lat: 50.1303, lng: 5.7906, jours: ["jeudi"], horaire: "17h-20h", type: "saisonnier", freq: "Certains jeudis (juin-sept)" }, { nom: "Gouvy", commune: "Gouvy", lieu: "Centre Gouvy", lat: 50.1903, lng: 5.9519, jours: ["jeudi"], horaire: "7h30-12h", type: "hebdo", freq: "Jeudi sur deux" } ]; var COULEURS_JOUR = { lundi: '#ef4444', mardi: '#f0a500', mercredi: '#16a34a', jeudi: '#3b82f6', vendredi: '#8b5cf6', samedi: '#14532d', dimanche: '#ec4899' }; // ──────────────────────────────────────────────── // Init carte (centree sur la province) // ──────────────────────────────────────────────── var map = L.map('ilx-marches-map', { center: [49.95, 5.55], zoom: 9, scrollWheelZoom: false }); map.on('click', function () { map.scrollWheelZoom.enable(); }); map.on('mouseout', function () { map.scrollWheelZoom.disable(); }); L.tileLayer('https://{s}.tile.openstreetmap.org/{z}/{x}/{y}.png', { maxZoom: 18, attribution: '© OpenStreetMap' }).addTo(map); function makeIcon(color) { return L.divIcon({ className: 'ilx-marker', html: '
', iconSize: [22, 22], iconAnchor: [11, 22], popupAnchor: [0, -22] }); } var markers = []; MARCHES.forEach(function (m) { var jourPrincipal = m.jours[0]; var couleur = COULEURS_JOUR[jourPrincipal] || '#64748b'; var marker = L.marker([m.lat, m.lng], { icon: makeIcon(couleur) }).addTo(map); var popupHtml = '' + m.nom + '
' + '' + m.lieu + '
' + '' + m.freq + ' · ' + m.horaire + '
' + '' + m.type + '' + '