/* ══════════════════════════════════════════════════════════
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 + ' ' +
'
';
marker.bindPopup(popupHtml);
marker._ilx = m;
markers.push(marker);
});
// Forcer un invalidate apres init pour eviter carte grise
setTimeout(function () { map.invalidateSize(); }, 200);
// ────────────────────────────────────────────────
// Filtre par jour
// ────────────────────────────────────────────────
var btns = document.querySelectorAll('.ilx-jour-btn');
var resultsContainer = document.getElementById('ilx-marches-results');
function renderResults(filtered) {
if (!resultsContainer) return;
if (filtered.length === 0) {
resultsContainer.innerHTML = 'Aucun marché ce jour-là dans la province. Essayez un autre jour.
';
return;
}
resultsContainer.innerHTML = filtered.map(function (m) {
return '' +
'' +
'
' + m.nom + '
' +
'
' + m.lieu + '
' +
'
' + m.freq + ' · ' + m.horaire + '
' +
'
' + m.type + ' ' +
'
';
}).join('');
}
function applyFilter(jour) {
var visible = [];
markers.forEach(function (mk) {
var m = mk._ilx;
var ok = (jour === 'tous') || (m.jours.indexOf(jour) !== -1);
if (ok) { mk.addTo(map); visible.push(m); }
else { map.removeLayer(mk); }
});
renderResults(visible);
}
btns.forEach(function (b) {
b.addEventListener('click', function () {
btns.forEach(function (x) { x.classList.remove('is-active'); });
b.classList.add('is-active');
applyFilter(b.getAttribute('data-jour'));
});
});
applyFilter('tous');
var compteurs = { lundi:0, mardi:0, mercredi:0, jeudi:0, vendredi:0, samedi:0, dimanche:0, tous: MARCHES.length };
MARCHES.forEach(function (m) {
m.jours.forEach(function (j) {
if (compteurs.hasOwnProperty(j)) compteurs[j]++;
});
});
btns.forEach(function (b) {
var j = b.getAttribute('data-jour');
var c = compteurs[j];
var span = b.querySelector('.count');
if (span && typeof c !== 'undefined') span.textContent = c;
});
}
if (document.readyState === 'loading') {
document.addEventListener('DOMContentLoaded', init);
} else {
init();
}
})();
Festival Concerts d’artistes féminines.
HOSHI
Hoshi : Le grand public a fait sa connaissance avec son premier album porté par Ta Marinière .
L’association Be Real s’engage toujours à 100 % à proposer des concerts aux jeunes, aux familles et aux seniors. Les Instants Suspendus sont ensuite répartis sur quelques jours, offrant une ambiance et un public différents pour chaque concert. Du rap urbain de Tessae, aux chansons françaises des Frangines, en passant par les musiques du monde d’Ayo, notre spectacle éclectique se situe quelque part entre la nouvelle version et le classique de la scène féminine française. Découvréz sur info-lux nos reportages photos sur ce Festival et ses artistes.
Article structuré et optimisé SEO avec l’aide d’un outil d’intelligence artificielle, sous supervision éditoriale.
Les infos de votre Région Gratuite
Souhaitez-vous recevoir des notifications sur les dernières mises à jour ?
Non
oui
0 Comments