
{"id":4299,"date":"2026-10-09T11:10:41","date_gmt":"2026-10-09T09:10:41","guid":{"rendered":"https:\/\/www.camping-mepillat.fr\/elaia-animations-2\/"},"modified":"2026-10-20T15:05:10","modified_gmt":"2026-10-20T13:05:10","slug":"elaia-animations","status":"publish","type":"page","link":"https:\/\/www.camping-mepillat.fr\/en\/elaia-animations\/","title":{"rendered":"Activities and events"},"content":{"rendered":"\n\n<style>\n  \/* \u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\n     JETONS\n     \u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550 *\/\n  .ea-wrap,\n  .ea-modal-overlay {\n    --ea-primary: #2e5e45;\n    --ea-primary-dark: color-mix(in srgb, var(--ea-primary) 80%, #000);\n    --ea-accent: #c8693f;\n    --ea-cream: #f7f3ec;\n    --ea-paper: #fffdf9;\n    --ea-ink: #1f2a24;\n    --ea-ink-soft: #4a554d;\n    --ea-muted: #6d6a60;\n    --ea-line: rgba(31, 42, 36, 0.1);\n    --ea-radius: 14px;\n    --ea-shadow: 0 1px 2px rgba(31, 42, 36, 0.04), 0 6px 20px rgba(31, 42, 36, 0.06);\n    --ea-shadow-hover: 0 2px 4px rgba(31, 42, 36, 0.05), 0 16px 36px rgba(31, 42, 36, 0.12);\n    --ea-header: 0px;\n    --ea-font: 'Inter', -apple-system, 'Segoe UI', sans-serif;\n  }\n\n  .ea-wrap {\n    font-family: var(--ea-font);\n    color: var(--ea-ink);\n    max-width: 1280px;\n    margin: 0 auto;\n    padding: 20px 28px 72px;\n    border-radius: 28px;\n    \/* Pas de fond propre : la page se pose sur celui du th\u00e8me (un aplat cr\u00e8me\n       laissait des bandes blanches de part et d'autre). *\/\n    background: transparent;\n    box-sizing: border-box;\n    -webkit-font-smoothing: antialiased;\n  }\n\n  .ea-wrap *,\n  .ea-wrap *::before,\n  .ea-wrap *::after,\n  .ea-modal-overlay *,\n  .ea-modal-overlay *::before,\n  .ea-modal-overlay *::after {\n    box-sizing: border-box;\n  }\n\n  .ea-wrap button,\n  .ea-wrap select,\n  .ea-modal-overlay button {\n    font-family: var(--ea-font);\n  }\n\n  .ea-wrap :focus-visible,\n  .ea-modal-overlay :focus-visible {\n    outline: 3px solid var(--ea-accent);\n    outline-offset: 3px;\n  }\n\n  .ea-icon {\n    display: inline-flex;\n    width: 1em;\n    height: 1em;\n    flex-shrink: 0;\n  }\n\n  .ea-icon svg {\n    width: 100%;\n    height: 100%;\n  }\n\n  .ea-sr {\n    position: absolute !important;\n    width: 1px;\n    height: 1px;\n    overflow: hidden;\n    clip: rect(0 0 0 0);\n    white-space: nowrap;\n  }\n\n  \/* \u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\n     1. BANDEAU\n     \u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550 *\/\n  .ea-hero {\n    position: relative;\n    display: flex;\n    align-items: center;\n    min-height: clamp(240px, 30vh, 320px);\n    overflow: hidden;\n    padding: 36px 48px;\n    border-radius: 22px;\n    background-color: var(--ea-primary);\n    background-image: radial-gradient(120% 90% at 85% 10%, rgba(255, 255, 255, 0.16), transparent 60%);\n    background-size: cover;\n    background-position: center;\n    color: #fff;\n  }\n\n  .ea-hero::before {\n    content: '';\n    position: absolute;\n    inset: 0;\n    background: linear-gradient(90deg, rgba(14, 22, 17, 0.8) 0%, rgba(14, 22, 17, 0.5) 45%, rgba(14, 22, 17, 0.1) 80%);\n  }\n\n  .ea-hero--plain::before {\n    background: linear-gradient(90deg, rgba(0, 0, 0, 0.2), rgba(0, 0, 0, 0));\n  }\n\n  .ea-hero-inner {\n    position: relative;\n    max-width: 560px;\n  }\n\n  .ea-eyebrow {\n    display: inline-block;\n    margin-bottom: 10px;\n    font-size: 11px;\n    font-weight: 700;\n    letter-spacing: 0.18em;\n    text-transform: uppercase;\n    color: #f6d9c4;\n  }\n\n  .ea-hero-title {\n    margin: 0 0 10px !important;\n    color: #fff !important;\n    font-size: clamp(26px, 3.2vw, 40px) !important;\n    line-height: 1.1 !important;\n  }\n\n  .ea-hero-text {\n    margin: 0 !important;\n    color: rgba(255, 255, 255, 0.9) !important;\n    font-size: 15px;\n    line-height: 1.55;\n  }\n\n\n  \/* \u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\n     2. NAVIGATION RAPIDE\n     \u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550 *\/\n  \/* Reste \u00e0 sa place : coll\u00e9e en haut, elle s'ajoutait aux en-t\u00eates et barres\n     fixes des th\u00e8mes (logo flottant de Camping Solaire\u2026) et masquait la page. *\/\n  .ea-nav {\n    position: relative;\n    z-index: 2;\n    display: flex;\n    justify-content: center;\n    margin-top: 18px;\n    pointer-events: none;\n  }\n\n  .ea-nav-inner {\n    display: flex;\n    gap: 4px;\n    max-width: 100%;\n    overflow-x: auto;\n    padding: 4px;\n    border: 1px solid var(--ea-line);\n    border-radius: 999px;\n    background: rgba(255, 253, 249, 0.95);\n    backdrop-filter: blur(10px);\n    box-shadow: 0 4px 14px rgba(31, 42, 36, 0.08);\n    scrollbar-width: none;\n    pointer-events: auto;\n  }\n\n  .ea-nav-inner::-webkit-scrollbar {\n    display: none;\n  }\n\n  .ea-nav-links {\n    display: flex;\n    gap: 4px;\n  }\n\n  .ea-nav a {\n    flex-shrink: 0;\n    display: inline-flex;\n    align-items: center;\n    gap: 7px;\n    min-height: 38px;\n    padding: 0 16px;\n    border-radius: 999px;\n    color: var(--ea-ink-soft) !important;\n    font-size: 14px;\n    font-weight: 600;\n    text-decoration: none !important;\n    white-space: nowrap;\n    transition: background 0.2s, color 0.2s;\n  }\n\n  .ea-nav a .ea-icon {\n    font-size: 15px;\n  }\n\n  .ea-nav a:hover {\n    background: rgba(31, 42, 36, 0.06);\n    color: var(--ea-ink) !important;\n  }\n\n  .ea-nav a[aria-current=\"true\"] {\n    background: var(--ea-primary);\n    color: #fff !important;\n  }\n\n  .ea-nav-sep {\n    flex-shrink: 0;\n    align-self: center;\n    width: 1px;\n    height: 22px;\n    margin: 0 4px;\n    background: var(--ea-line);\n  }\n\n  \/* Sur place \/ Aux alentours *\/\n  .ea-scope {\n    display: flex;\n    flex-shrink: 0;\n    gap: 2px;\n    padding: 2px;\n    border-radius: 999px;\n    background: #f1ece3;\n  }\n\n  .ea-scope button {\n    min-height: 34px;\n    padding: 0 14px;\n    border: 0;\n    border-radius: 999px;\n    background: transparent;\n    color: var(--ea-ink-soft);\n    font-size: 13px;\n    font-weight: 600;\n    white-space: nowrap;\n    cursor: pointer;\n  }\n\n  .ea-scope button:hover {\n    color: var(--ea-ink);\n  }\n\n  .ea-scope button:disabled {\n    opacity: 0.4;\n    cursor: not-allowed;\n  }\n\n  .ea-scope button:disabled:hover {\n    color: var(--ea-ink-soft);\n  }\n\n  .ea-scope button[aria-pressed=\"true\"] {\n    background: #fff;\n    color: var(--ea-primary);\n    box-shadow: 0 1px 3px rgba(31, 42, 36, 0.15);\n  }\n\n  \/* \u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\n     SECTIONS\n     \u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550 *\/\n  .ea-section {\n    padding-top: 44px;\n    scroll-margin-top: calc(var(--ea-header) + 64px);\n  }\n\n  .ea-section-head {\n    display: flex;\n    flex-wrap: wrap;\n    align-items: center;\n    justify-content: space-between;\n    gap: 10px 24px;\n    margin-bottom: 16px;\n  }\n\n  .ea-section-title {\n    display: flex;\n    align-items: center;\n    gap: 10px;\n    margin: 0 !important;\n    color: var(--ea-ink) !important;\n    font-size: clamp(21px, 2.2vw, 27px) !important;\n    line-height: 1.2 !important;\n  }\n\n  .ea-section-title .ea-icon {\n    color: var(--ea-accent);\n    font-size: 0.95em;\n  }\n\n  .ea-section-sub {\n    margin: 4px 0 0 !important;\n    color: var(--ea-muted);\n    font-size: 14px;\n  }\n\n  .ea-head-side {\n    display: flex;\n    flex-wrap: wrap;\n    align-items: center;\n    gap: 8px;\n    color: var(--ea-ink);\n    font-size: 14px;\n    font-weight: 500;\n  }\n\n  .ea-round {\n    display: inline-flex;\n    align-items: center;\n    justify-content: center;\n    width: 36px;\n    height: 36px;\n    border: 1px solid var(--ea-line);\n    border-radius: 50%;\n    background: var(--ea-paper);\n    color: var(--ea-ink);\n    font-size: 17px;\n    cursor: pointer;\n    transition: background 0.2s, border-color 0.2s;\n  }\n\n  .ea-round:hover:not(:disabled) {\n    border-color: var(--ea-primary);\n    background: #fff;\n  }\n\n  .ea-round:disabled {\n    opacity: 0.35;\n    cursor: not-allowed;\n  }\n\n  \/* \u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\n     CARTE \u00c9V\u00c9NEMENT (composant r\u00e9utilisable)\n     \u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550 *\/\n  .ea-grid {\n    display: grid;\n    grid-template-columns: repeat(3, minmax(0, 1fr));\n    gap: 16px;\n  }\n\n  .ea-grid--4 {\n    grid-template-columns: repeat(4, minmax(0, 1fr));\n  }\n\n  .ea-card {\n    position: relative;\n    display: flex;\n    flex-direction: column;\n    min-width: 0;\n    overflow: hidden;\n    border: 1px solid rgba(31, 42, 36, 0.06);\n    border-radius: 14px;\n    background: var(--ea-paper);\n    box-shadow: 0 1px 2px rgba(31, 42, 36, 0.04), 0 4px 12px rgba(31, 42, 36, 0.05);\n    cursor: pointer;\n    transition: box-shadow 0.25s ease, transform 0.25s ease;\n  }\n\n  .ea-card:hover {\n    box-shadow: var(--ea-shadow-hover);\n    transform: translateY(-2px);\n  }\n\n  .ea-card--ended {\n    opacity: 0.6;\n  }\n\n  .ea-card-media {\n    position: relative;\n    aspect-ratio: 16 \/ 9;\n    overflow: hidden;\n    background: #ece5d8;\n  }\n\n  .ea-grid--4 .ea-card-media {\n    aspect-ratio: 16 \/ 10;\n  }\n\n  .ea-card-media img {\n    display: block;\n    width: 100%;\n    height: 100%;\n    object-fit: cover;\n    transition: transform 0.5s ease;\n  }\n\n  .ea-card:hover .ea-card-media img {\n    transform: scale(1.04);\n  }\n\n  \/* Image par d\u00e9faut du chatbot (souvent un logo) : enti\u00e8re, sur fond doux *\/\n  .ea-card-media img.ea-img--default,\n  .ea-modal-img.ea-img--default {\n    object-fit: contain;\n    padding: 10%;\n    background: #efe8dc;\n  }\n\n  .ea-card:hover .ea-card-media img.ea-img--default {\n    transform: none;\n  }\n\n  \/* Cr\u00e9dit photo (obligatoire pour les images sous licence CC BY\u2026) *\/\n  .ea-credit {\n    position: absolute;\n    right: 6px;\n    bottom: 6px;\n    z-index: 2;\n    max-width: calc(100% - 12px);\n    padding: 2px 6px;\n    border-radius: 4px;\n    background: rgba(0, 0, 0, 0.55);\n    color: #fff;\n    font-size: 10px;\n    line-height: 1.3;\n    white-space: nowrap;\n    overflow: hidden;\n    text-overflow: ellipsis;\n    pointer-events: none;\n  }\n\n  .ea-modal-media {\n    position: relative;\n  }\n\n  .ea-card-fallback {\n    display: flex;\n    align-items: center;\n    justify-content: center;\n    width: 100%;\n    height: 100%;\n    background: linear-gradient(135deg, var(--ea-cat-bg), #efe8dc);\n    color: var(--ea-cat-fg);\n    font-size: 34px;\n  }\n\n  .ea-live {\n    position: absolute;\n    bottom: 10px;\n    left: 10px;\n    display: inline-flex;\n    align-items: center;\n    gap: 6px;\n    padding: 4px 10px;\n    border-radius: 6px;\n    background: #d9412b;\n    color: #fff;\n    font-size: 12px;\n    font-weight: 700;\n  }\n\n  .ea-live::before {\n    content: '';\n    width: 6px;\n    height: 6px;\n    border-radius: 50%;\n    background: #fff;\n  }\n\n  \/* Badge \u00ab Sur inscription \u00bb (en haut \u00e0 droite de l'image) *\/\n  .ea-reg {\n    position: absolute;\n    top: 10px;\n    right: 10px;\n    display: inline-flex;\n    align-items: center;\n    gap: 5px;\n    padding: 5px 10px;\n    border-radius: 999px;\n    background: #fff;\n    color: var(--ea-ink);\n    font-size: 12px;\n    font-weight: 700;\n    box-shadow: 0 2px 8px rgba(0, 0, 0, 0.18);\n  }\n\n  .ea-reg .ea-icon {\n    color: var(--ea-accent);\n    font-size: 14px;\n  }\n\n  \/* Filtres cat\u00e9gories (sous \u00ab Activit\u00e9s du jour \u00bb, valables pour toute la page) *\/\n  .ea-cats {\n    display: flex;\n    flex-wrap: wrap;\n    gap: 8px;\n    margin: -4px 0 18px;\n  }\n\n  .ea-cat {\n    display: inline-flex;\n    align-items: center;\n    gap: 6px;\n    min-height: 34px;\n    padding: 0 14px;\n    border: 1px solid transparent;\n    border-radius: 999px;\n    background: var(--ea-cat-bg, #fff);\n    color: var(--ea-cat-fg, var(--ea-ink));\n    font-size: 13px;\n    font-weight: 600;\n    cursor: pointer;\n    transition: border-color 0.2s, box-shadow 0.2s;\n  }\n\n  .ea-cat:hover {\n    border-color: currentColor;\n  }\n\n  .ea-cat[aria-pressed=\"true\"] {\n    border-color: currentColor;\n    box-shadow: inset 0 0 0 1px currentColor;\n  }\n\n  .ea-cat--all {\n    background: #fff;\n    color: var(--ea-ink);\n    border-color: var(--ea-line);\n  }\n\n  .ea-cat--all[aria-pressed=\"true\"] {\n    background: var(--ea-primary);\n    border-color: var(--ea-primary);\n    color: #fff;\n    box-shadow: none;\n  }\n\n  \/* Badge de date sur l'image : format unique (libell\u00e9 \/ jour \/ mois), taille fixe *\/\n  .ea-date {\n    position: absolute;\n    top: 10px;\n    left: 10px;\n    display: flex;\n    flex-direction: column;\n    align-items: center;\n    justify-content: center;\n    width: 64px;\n    height: 74px;\n    padding: 4px;\n    border-radius: 10px;\n    background: var(--ea-accent);\n    color: #fff;\n    text-align: center;\n    text-transform: uppercase;\n    box-shadow: 0 3px 8px rgba(0, 0, 0, 0.18);\n  }\n\n  .ea-date-top,\n  .ea-date-month {\n    display: block;\n    max-width: 100%;\n    font-size: 9.5px;\n    font-weight: 700;\n    line-height: 1.2;\n    letter-spacing: 0.04em;\n    white-space: nowrap;\n    overflow: hidden;\n    text-overflow: ellipsis;\n  }\n\n  \/* Couleurs par cas (le texte du badge dit aussi le cas : \u00ab Auj. \u00bb, \u00ab Du \u2026 \u2192 \u00bb, \u00ab Jusqu'au \u00bb) *\/\n  .ea-date--today {\n    background: var(--ea-primary);\n  }\n\n  .ea-date--period {\n    background: #3f5f7f;\n  }\n\n  .ea-date--ongoing {\n    background: #a36a12;\n  }\n\n  \/* Fin de p\u00e9riode, sous le d\u00e9but *\/\n  .ea-date-end {\n    display: block;\n    max-width: 100%;\n    margin-top: 3px;\n    padding-top: 3px;\n    border-top: 1px solid rgba(255, 255, 255, 0.45);\n    font-size: 9.5px;\n    font-weight: 700;\n    line-height: 1.1;\n    letter-spacing: 0.02em;\n    white-space: nowrap;\n    overflow: hidden;\n    text-overflow: ellipsis;\n  }\n\n  .ea-date-top {\n    opacity: 0.9;\n  }\n\n  .ea-date-day {\n    display: block;\n    font-size: 22px;\n    font-weight: 800;\n    line-height: 1.05;\n  }\n\n  .ea-card-body {\n    display: flex;\n    flex: 1;\n    flex-direction: column;\n    gap: 6px;\n    padding: 12px 14px 14px;\n  }\n\n  .ea-card-top {\n    display: flex;\n    flex-wrap: wrap;\n    align-items: center;\n    gap: 6px 10px;\n  }\n\n  .ea-when {\n    display: inline-flex;\n    align-items: center;\n    gap: 5px;\n    color: var(--ea-primary);\n    font-size: 14px;\n    font-weight: 700;\n  }\n\n  .ea-pill {\n    display: inline-flex;\n    align-items: center;\n    padding: 2px 9px;\n    border-radius: 999px;\n    background: var(--ea-cat-bg, #eef0ec);\n    color: var(--ea-cat-fg, #3c463f);\n    font-size: 11px;\n    font-weight: 600;\n  }\n\n  .ea-card-title {\n    margin: 0 !important;\n    color: var(--ea-ink) !important;\n    font-size: 17px !important;\n    font-weight: 600 !important;\n    line-height: 1.3 !important;\n    display: -webkit-box;\n    -webkit-line-clamp: 2;\n    -webkit-box-orient: vertical;\n    overflow: hidden;\n  }\n\n  .ea-grid--4 .ea-card-title {\n    font-size: 16px !important;\n  }\n\n  .ea-place {\n    display: flex;\n    align-items: center;\n    gap: 5px;\n    margin: 0 !important;\n    color: var(--ea-muted);\n    font-size: 13px;\n  }\n\n  .ea-place .ea-icon {\n    color: var(--ea-muted);\n  }\n\n  .ea-card-desc {\n    margin: 0 !important;\n    color: var(--ea-ink-soft);\n    font-size: 13px;\n    line-height: 1.5;\n    display: -webkit-box;\n    -webkit-line-clamp: 2;\n    -webkit-box-orient: vertical;\n    overflow: hidden;\n  }\n\n  .ea-cta {\n    display: inline-flex;\n    align-items: center;\n    align-self: flex-start;\n    gap: 6px;\n    margin-top: auto;\n    padding: 8px 16px;\n    border-radius: 999px;\n    background: color-mix(in srgb, var(--ea-primary) 12%, #fff);\n    color: var(--ea-primary);\n    font-size: 13px;\n    font-weight: 700;\n    transition: background 0.2s, color 0.2s;\n  }\n\n  \/* Bouton coll\u00e9 en bas, avec un peu d'air au-dessus *\/\n  .ea-card-body .ea-cta {\n    margin-top: auto;\n    transform: translateY(4px);\n  }\n\n  .ea-card:hover .ea-cta {\n    background: var(--ea-primary);\n    color: #fff;\n  }\n\n  .ea-cta .ea-icon {\n    transition: transform 0.2s ease;\n  }\n\n  .ea-card:hover .ea-cta .ea-icon {\n    transform: translateX(3px);\n  }\n\n  \/* \u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\n     BOUTONS\n     \u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550 *\/\n  .ea-btn {\n    display: inline-flex;\n    align-items: center;\n    justify-content: center;\n    gap: 7px;\n    min-height: 40px;\n    padding: 0 20px;\n    border: 0;\n    border-radius: 999px;\n    background: var(--ea-primary);\n    color: #fff !important;\n    font-size: 14px;\n    font-weight: 600;\n    text-decoration: none !important;\n    cursor: pointer;\n    transition: background 0.2s, filter 0.2s;\n  }\n\n  .ea-btn:hover {\n    background: var(--ea-primary-dark);\n  }\n\n  \/* Bouton secondaire : capsule terracotta douce *\/\n  .ea-btn--soft {\n    background: #f6e3d6;\n    color: var(--ea-ink) !important;\n  }\n\n  .ea-btn--soft:hover {\n    background: #f1d5c2;\n  }\n\n  \/* Carrousel (Activit\u00e9s du jour) *\/\n  .ea-carousel {\n    position: relative;\n  }\n\n  .ea-carousel-track {\n    display: grid;\n    grid-auto-flow: column;\n    grid-auto-columns: calc((100% - 32px) \/ 3);\n    gap: 16px;\n    overflow-x: auto;\n    scroll-snap-type: x mandatory;\n    scroll-behavior: smooth;\n    scrollbar-width: none;\n    padding: 4px 2px 8px;\n    margin: -4px -2px -8px;\n  }\n\n  .ea-carousel-track::-webkit-scrollbar {\n    display: none;\n  }\n\n  .ea-carousel--4 .ea-carousel-track {\n    grid-auto-columns: calc((100% - 48px) \/ 4);\n  }\n\n  .ea-carousel--4 .ea-card-media {\n    aspect-ratio: 16 \/ 10;\n  }\n\n  .ea-carousel--4 .ea-card-title {\n    font-size: 16px !important;\n  }\n\n  .ea-carousel-track > .ea-card {\n    scroll-snap-align: start;\n  }\n\n  .ea-carousel-btn {\n    position: absolute;\n    top: 38%;\n    z-index: 2;\n    display: inline-flex;\n    align-items: center;\n    justify-content: center;\n    width: 44px;\n    height: 44px;\n    border: 1px solid var(--ea-line);\n    border-radius: 50%;\n    background: var(--ea-paper);\n    color: var(--ea-ink);\n    font-size: 22px;\n    line-height: 1;\n    box-shadow: 0 6px 18px rgba(31, 42, 36, 0.18);\n    cursor: pointer;\n    transition: background 0.2s, color 0.2s;\n  }\n\n  .ea-carousel-btn:hover {\n    background: var(--ea-primary);\n    color: #fff;\n  }\n\n  .ea-carousel-btn[hidden] {\n    display: none;\n  }\n\n  .ea-carousel-btn--prev {\n    left: -18px;\n  }\n\n  .ea-carousel-btn--next {\n    right: -18px;\n  }\n\n  @media (max-width: 1100px) {\n    .ea-carousel--4 .ea-carousel-track {\n      grid-auto-columns: calc((100% - 32px) \/ 3);\n    }\n  }\n\n  @media (max-width: 900px) {\n    .ea-carousel-track,\n    .ea-carousel--4 .ea-carousel-track {\n      grid-auto-columns: calc((100% - 16px) \/ 2);\n    }\n  }\n\n  @media (max-width: 640px) {\n    .ea-carousel-track,\n    .ea-carousel--4 .ea-carousel-track {\n      grid-auto-columns: 85%;\n    }\n\n    .ea-carousel-btn {\n      display: none;\n    }\n  }\n\n  .ea-more {\n    display: flex;\n    justify-content: center;\n    margin-top: 22px;\n  }\n\n  \/* \u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\n     TEMPS FORTS \u2014 barre des jours\n     \u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550 *\/\n  .ea-days {\n    display: grid;\n    grid-template-columns: repeat(7, minmax(0, 1fr));\n    gap: 2px;\n    margin-bottom: 16px;\n    padding: 4px;\n    border-radius: 14px;\n    background: #efe9df;\n  }\n\n  .ea-day {\n    position: relative;\n    display: flex;\n    flex-direction: column;\n    align-items: center;\n    justify-content: center;\n    gap: 1px;\n    min-height: 52px;\n    padding: 6px 4px;\n    border: 0;\n    border-radius: 11px;\n    background: transparent;\n    color: var(--ea-ink);\n    text-align: center;\n    cursor: pointer;\n    transition: background 0.2s;\n  }\n\n  .ea-day:hover {\n    background: rgba(255, 253, 249, 0.7);\n  }\n\n  .ea-day-name {\n    font-size: 14px;\n    font-weight: 600;\n  }\n\n  .ea-day-date {\n    font-size: 12px;\n    color: var(--ea-muted);\n  }\n\n  \/* Petit point : ce jour a des activit\u00e9s (le nombre est dans l'aria-label) *\/\n  .ea-day.has-events::after {\n    content: '';\n    position: absolute;\n    top: 7px;\n    right: 9px;\n    width: 6px;\n    height: 6px;\n    border-radius: 50%;\n    background: var(--ea-accent);\n  }\n\n  .ea-day.is-today .ea-day-name {\n    color: var(--ea-accent);\n  }\n\n  .ea-day[aria-pressed=\"true\"] {\n    background: var(--ea-primary);\n    color: #fff;\n  }\n\n  .ea-day[aria-pressed=\"true\"] .ea-day-name,\n  .ea-day[aria-pressed=\"true\"] .ea-day-date {\n    color: #fff;\n  }\n\n  .ea-day[aria-pressed=\"true\"].has-events::after {\n    background: #fff;\n  }\n\n  \/* \u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\n     \u00c0 VENIR \u2014 listes d\u00e9roulantes\n     \u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550 *\/\n  .ea-select {\n    min-height: 38px;\n    padding: 0 32px 0 14px;\n    border: 1px solid var(--ea-line);\n    border-radius: 10px;\n    background-color: var(--ea-paper);\n    color: var(--ea-ink);\n    font-size: 13px;\n    font-weight: 600;\n    cursor: pointer;\n  }\n\n  \/* \u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\n     6. CALENDRIER (secondaire, repliable)\n     \u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550 *\/\n  .ea-cal-panel[hidden] {\n    display: none;\n  }\n\n  .ea-cal-toolbar {\n    display: flex;\n    align-items: center;\n    justify-content: space-between;\n    gap: 12px;\n    margin-bottom: 16px;\n  }\n\n  .ea-cal-month {\n    margin: 0 !important;\n    font-size: 17px !important;\n    color: var(--ea-ink) !important;\n  }\n\n  .ea-month {\n    overflow: hidden;\n    border-radius: var(--ea-radius);\n    background: var(--ea-paper);\n    box-shadow: var(--ea-shadow);\n  }\n\n  .ea-month-head {\n    display: grid;\n    grid-template-columns: repeat(7, minmax(0, 1fr));\n    border-bottom: 1px solid var(--ea-line);\n  }\n\n  .ea-month-head div {\n    padding: 12px 6px;\n    color: var(--ea-muted);\n    font-size: 12px;\n    font-weight: 700;\n    letter-spacing: 0.08em;\n    text-align: center;\n    text-transform: uppercase;\n  }\n\n  .ea-mrow {\n    display: grid;\n    grid-template-columns: repeat(7, minmax(0, 1fr));\n    grid-template-rows: 34px repeat(3, 26px) 22px;\n    border-bottom: 1px solid var(--ea-line);\n  }\n\n  .ea-mrow:last-child {\n    border-bottom: 0;\n  }\n\n  .ea-mcell {\n    grid-row: 1 \/ -1;\n    padding: 0;\n    border: 0;\n    border-left: 1px solid var(--ea-line);\n    background: transparent;\n    cursor: pointer;\n    transition: background 0.15s;\n  }\n\n  .ea-mcell:first-child {\n    border-left: 0;\n  }\n\n  .ea-mcell:hover {\n    background: rgba(31, 42, 36, 0.03);\n  }\n\n  .ea-mcell--out {\n    background: rgba(31, 42, 36, 0.025);\n  }\n\n  .ea-mcell--selected {\n    background: color-mix(in srgb, var(--ea-primary) 10%, transparent) !important;\n    box-shadow: inset 0 0 0 2px var(--ea-primary);\n  }\n\n  .ea-mnum {\n    grid-row: 1;\n    z-index: 1;\n    justify-self: start;\n    align-self: center;\n    display: inline-flex;\n    align-items: center;\n    justify-content: center;\n    width: 28px;\n    height: 28px;\n    margin-left: 6px;\n    border-radius: 50%;\n    color: var(--ea-ink);\n    font-size: 13px;\n    font-weight: 600;\n    pointer-events: none;\n  }\n\n  .ea-mnum--out {\n    color: #b8b2a6;\n  }\n\n  .ea-mnum--today {\n    background: var(--ea-primary);\n    color: #fff;\n  }\n\n  .ea-mbar {\n    z-index: 1;\n    min-width: 0;\n    margin: 2px 3px;\n    padding: 0 8px;\n    border: 0;\n    border-radius: 6px;\n    background: var(--ea-cat-bg);\n    color: var(--ea-cat-fg);\n    font-size: 12px;\n    font-weight: 600;\n    line-height: 22px;\n    text-align: left;\n    white-space: nowrap;\n    overflow: hidden;\n    text-overflow: ellipsis;\n    cursor: pointer;\n  }\n\n  .ea-mbar:hover {\n    filter: brightness(0.96);\n  }\n\n  .ea-mbar--from-before {\n    border-top-left-radius: 0;\n    border-bottom-left-radius: 0;\n  }\n\n  .ea-mbar--to-after {\n    border-top-right-radius: 0;\n    border-bottom-right-radius: 0;\n  }\n\n  .ea-mbar--ended {\n    opacity: 0.5;\n  }\n\n  .ea-mmore {\n    grid-row: 5;\n    z-index: 1;\n    align-self: center;\n    padding-left: 8px;\n    color: var(--ea-muted);\n    font-size: 12px;\n    font-weight: 600;\n    pointer-events: none;\n  }\n\n  .ea-daypanel {\n    margin-top: 24px;\n  }\n\n  .ea-daypanel-title {\n    margin: 0 0 14px !important;\n    color: var(--ea-ink) !important;\n    font-size: 19px !important;\n  }\n\n  \/* \u2500\u2500\u2500 \u00c9tats vides \u2500\u2500\u2500 *\/\n  .ea-empty {\n    display: flex;\n    flex-direction: column;\n    align-items: center;\n    gap: 6px;\n    padding: 28px 20px;\n    border-radius: var(--ea-radius);\n    background: var(--ea-paper);\n    color: var(--ea-ink-soft);\n    text-align: center;\n    font-size: 14px;\n  }\n\n  .ea-empty .ea-icon {\n    margin-bottom: 4px;\n    color: var(--ea-accent);\n    font-size: 24px;\n  }\n\n  .ea-empty strong {\n    color: var(--ea-ink);\n    font-size: 16px;\n  }\n\n  .ea-empty .ea-btn {\n    margin-top: 14px;\n  }\n\n  \/* \u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\n     MODAL (rattach\u00e9e au <body> en JS)\n     \u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550 *\/\n  .ea-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, 28, 22, 0.45);\n    backdrop-filter: blur(3px);\n  }\n\n  .ea-modal-overlay[hidden] {\n    display: none !important;\n  }\n\n  .ea-modal {\n    position: relative;\n    width: 100%;\n    max-width: 560px;\n    max-height: calc(100vh - 40px);\n    overflow-y: auto;\n    border-radius: 24px;\n    background: var(--ea-paper);\n    box-shadow: 0 30px 80px rgba(20, 28, 22, 0.35);\n    font-family: var(--ea-font);\n    color: var(--ea-ink);\n  }\n\n  .ea-modal-img {\n    display: block;\n    width: 100%;\n    height: 240px;\n    object-fit: cover;\n  }\n\n  .ea-modal-body {\n    display: flex;\n    flex-direction: column;\n    gap: 14px;\n    padding: 22px 24px 24px;\n  }\n\n  .ea-modal-title {\n    margin: 0 !important;\n    color: var(--ea-ink) !important;\n    font-size: 24px !important;\n    line-height: 1.2 !important;\n  }\n\n  .ea-modal-info {\n    display: flex;\n    flex-direction: column;\n    gap: 8px;\n    padding: 16px 18px;\n    border-radius: 14px;\n    background: var(--ea-cream);\n    color: var(--ea-ink);\n    font-size: 15px;\n  }\n\n  .ea-modal-info span {\n    display: flex;\n    align-items: center;\n    gap: 10px;\n  }\n\n  .ea-modal-info .ea-icon {\n    color: var(--ea-accent);\n    font-size: 18px;\n  }\n\n  .ea-modal-desc {\n    margin: 0 !important;\n    color: var(--ea-ink-soft);\n    font-size: 15px;\n    line-height: 1.65;\n    white-space: pre-line;\n  }\n\n  .ea-modal-body .ea-btn {\n    align-self: flex-start;\n  }\n\n  .ea-modal-close {\n    position: absolute;\n    top: 14px;\n    right: 14px;\n    z-index: 1;\n    width: 44px;\n    height: 44px;\n    border: 0;\n    border-radius: 50%;\n    background: rgba(255, 253, 249, 0.95);\n    color: var(--ea-ink);\n    font-size: 24px;\n    line-height: 1;\n    cursor: pointer;\n    box-shadow: 0 2px 8px rgba(0, 0, 0, 0.18);\n  }\n\n  \/* \u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\n     9. RESPONSIVE\n     \u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550 *\/\n  @media (max-width: 1100px) {\n    .ea-grid--4 {\n      grid-template-columns: repeat(3, minmax(0, 1fr));\n    }\n  }\n\n  @media (max-width: 900px) {\n    .ea-grid,\n    .ea-grid--4 {\n      grid-template-columns: repeat(2, minmax(0, 1fr));\n    }\n\n  }\n\n  @media (max-width: 640px) {\n    .ea-wrap {\n      padding: 10px 14px 44px;\n      border-radius: 0;\n    }\n\n    .ea-hero {\n      align-items: flex-end;\n      min-height: 280px;\n      padding: 22px 18px;\n      border-radius: 16px;\n    }\n\n    .ea-hero::before {\n      background: linear-gradient(0deg, rgba(14, 22, 17, 0.85) 0%, rgba(14, 22, 17, 0.35) 70%, rgba(14, 22, 17, 0.15) 100%);\n    }\n\n    .ea-hero-text {\n      font-size: 14px;\n    }\n\n\n    .ea-nav {\n      justify-content: flex-start;\n    }\n\n    .ea-nav a {\n      min-height: 34px;\n      padding: 0 10px;\n      font-size: 13px;\n    }\n\n    .ea-nav a .ea-icon {\n      display: none;\n    }\n\n    \/* Barre sur 2 lignes : sections (d\u00e9filantes) puis \u00ab Tout \/ Sur place \/ Aux alentours \u00bb *\/\n    .ea-nav-inner {\n      flex-wrap: wrap;\n      justify-content: center;\n      overflow: visible;\n      border-radius: 20px;\n    }\n\n    .ea-nav-sep {\n      display: none;\n    }\n\n    .ea-nav-links {\n      flex: 1 1 100%;\n      overflow-x: auto;\n      scrollbar-width: none;\n    }\n\n    .ea-nav-links::-webkit-scrollbar {\n      display: none;\n    }\n\n    .ea-nav-links a {\n      flex-shrink: 0;\n    }\n\n    .ea-scope {\n      flex: 1 1 100%;\n      justify-content: space-between;\n    }\n\n    .ea-scope button {\n      flex: 1;\n    }\n\n    .ea-section {\n      padding-top: 36px;\n    }\n\n    .ea-grid,\n    .ea-grid--4 {\n      grid-template-columns: minmax(0, 1fr);\n      gap: 14px;\n    }\n\n    .ea-cats {\n      flex-wrap: nowrap;\n      overflow-x: auto;\n      scrollbar-width: none;\n      padding-bottom: 2px;\n    }\n\n    .ea-cats::-webkit-scrollbar {\n      display: none;\n    }\n\n    .ea-cat {\n      flex-shrink: 0;\n    }\n\n    \/* Jours : d\u00e9filement horizontal *\/\n    .ea-days {\n      display: flex;\n      overflow-x: auto;\n      scrollbar-width: none;\n    }\n\n    .ea-days::-webkit-scrollbar {\n      display: none;\n    }\n\n    .ea-day {\n      flex: 0 0 64px;\n    }\n\n    \/* Calendrier : barres fines sans texte *\/\n    .ea-mrow {\n      grid-template-rows: 30px repeat(3, 8px) 18px;\n    }\n\n    .ea-mbar {\n      margin: 1px;\n      padding: 0;\n      font-size: 0;\n      line-height: 0;\n      background: var(--ea-cat-fg);\n      border-radius: 3px;\n    }\n\n    .ea-mnum {\n      margin-left: 2px;\n      font-size: 12px;\n    }\n\n    .ea-mmore {\n      padding-left: 3px;\n      font-size: 10px;\n    }\n\n    .ea-modal-img {\n      height: 190px;\n    }\n\n    .ea-modal-body {\n      padding: 20px 18px 22px;\n    }\n\n    .ea-modal-title {\n      font-size: 22px !important;\n    }\n  }\n\n  @media (prefers-reduced-motion: reduce) {\n    .ea-wrap *,\n    .ea-modal-overlay * {\n      transition: none !important;\n      scroll-behavior: auto !important;\n    }\n  }\n<\/style>\n\n\n<div class=\"ea-wrap\" id=\"ea-app\">\n\n  <!-- 1. Bandeau immersif -->\n  <section class=\"ea-hero\" style=\"background-image:url(https:\/\/decibelles-data.media.tourinsoft.eu\/upload\/Vente-a-la-ferme.jpg)\">\n    <div class=\"ea-hero-inner\">\n      <span class=\"ea-eyebrow\">Enjoy unforgettable moments<\/span>\n      <h1 class=\"ea-hero-title\">Activities &amp; events<\/h1>\n      <p class=\"ea-hero-text\">Find all current activities, this week&#039;s highlights and upcoming events during your stay.<\/p>\n    <\/div>\n  <\/section>\n\n  <!-- 2. Navigation rapide (collante) + filtre sur place \/ aux alentours -->\n  <nav class=\"ea-nav\" aria-label=\"Page sections\">\n    <div class=\"ea-nav-inner\">\n      <div class=\"ea-nav-links\">\n        <a href=\"#ea-sec-today\" aria-current=\"true\"><span class=\"ea-icon\" aria-hidden=\"true\"><svg viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\"><circle cx=\"12\" cy=\"12\" r=\"4\"\/><path d=\"M12 2v2M12 20v2M4.9 4.9l1.4 1.4M17.7 17.7l1.4 1.4M2 12h2M20 12h2M4.9 19.1l1.4-1.4M17.7 6.3l1.4-1.4\"\/><\/svg><\/span>Today<\/a>\n        <a href=\"#ea-sec-week\"><span class=\"ea-icon\" aria-hidden=\"true\"><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><\/span>This week<\/a>\n        <a href=\"#ea-sec-upcoming\"><span class=\"ea-icon\" aria-hidden=\"true\"><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><\/span>Upcoming<\/a>\n        <a href=\"#ea-sec-calendar\"><span class=\"ea-icon\" aria-hidden=\"true\"><svg viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\"><rect x=\"3\" y=\"5\" width=\"18\" height=\"16\" rx=\"2\"\/><path d=\"M3 10h18M8 14h2M12 14h2M16 14h2M8 17h2M12 17h2\"\/><\/svg><\/span>Calendar<\/a>\n      <\/div>\n              <span class=\"ea-nav-sep\" aria-hidden=\"true\"><\/span>\n        <div class=\"ea-scope\" role=\"group\" aria-label=\"Where?\">\n          <button type=\"button\" data-scope=\"all\" aria-pressed=\"true\">All<\/button>\n                    <button type=\"button\" data-scope=\"onsite\" aria-pressed=\"false\" disabled title=\"No on-site activity at the moment\">On site<\/button>\n          <button type=\"button\" data-scope=\"nearby\" aria-pressed=\"false\">Nearby<\/button>\n        <\/div>\n          <\/div>\n  <\/nav>\n\n  <!-- 3 \u2192 6. Sections (rendues en JS) -->\n  <section class=\"ea-section\" id=\"ea-sec-today\" aria-labelledby=\"ea-today-title\"><\/section>\n  <section class=\"ea-section\" id=\"ea-sec-week\" aria-labelledby=\"ea-week-title\"><\/section>\n  <section class=\"ea-section\" id=\"ea-sec-upcoming\" aria-labelledby=\"ea-upcoming-title\"><\/section>\n  <section class=\"ea-section\" id=\"ea-sec-calendar\" aria-labelledby=\"ea-calendar-title\"><\/section>\n\n  <noscript>\n    <ul>\n              <li><strong>Educational trail<\/strong> \u2014 Du 04\/06\/2025 au 04\/06\/2027 \u00e0 23:59 \u2014 71260 Vir\u00e9<\/li>\n              <li><strong>Equestrian activities<\/strong> \u2014 Du 01\/12\/2025 \u00e0 09:30 au 31\/12\/2026 \u00e0 23:59 \u2014 71870 Laiz\u00e9<\/li>\n              <li><strong>Polliat Market<\/strong> \u2014 Du 01\/01\/2026 au 31\/12\/2026 \u00e0 23:59 \u2014 01310 Polliat<\/li>\n              <li><strong>Weekly market<\/strong> \u2014 Du 01\/01\/2026 \u00e0 07:00 au 31\/12\/2026 \u00e0 23:59 \u2014 01570 Feillens<\/li>\n              <li><strong>Weekly market<\/strong> \u2014 Du 01\/01\/2026 \u00e0 07:00 au 31\/12\/2026 \u00e0 23:59 \u2014 01570 Manziat<\/li>\n              <li><strong>Jasseron market<\/strong> \u2014 Du 01\/01\/2026 \u00e0 08:00 au 31\/12\/2026 \u00e0 23:59 \u2014 01250 Jasseron<\/li>\n              <li><strong>Market<\/strong> \u2014 Du 01\/01\/2026 \u00e0 08:00 au 31\/12\/2026 \u00e0 23:59 \u2014 71500 Louhans<\/li>\n              <li><strong>Market<\/strong> \u2014 Du 01\/01\/2026 \u00e0 08:00 au 31\/12\/2026 \u00e0 23:59 \u2014 71290 Cuisery<\/li>\n              <li><strong>Meillonnas Market<\/strong> \u2014 Du 01\/01\/2026 \u00e0 08:00 au 31\/12\/2026 \u00e0 23:59 \u2014 01370 Meillonnas<\/li>\n              <li><strong>Poultry Market<\/strong> \u2014 Du 01\/01\/2026 \u00e0 08:00 au 31\/12\/2026 \u00e0 23:59 \u2014 71500 Louhans<\/li>\n              <li><strong>Saturday morning market<\/strong> \u2014 Du 01\/01\/2026 \u00e0 08:00 au 31\/12\/2026 \u00e0 23:59 \u2014 01340 Montrevel-en-Bresse<\/li>\n              <li><strong>Saturday morning market<\/strong> \u2014 Du 01\/01\/2026 \u00e0 08:00 au 31\/12\/2026 \u00e0 23:59 \u2014 01000 Bourg-en-Bresse<\/li>\n              <li><strong>Small weekly market<\/strong> \u2014 Du 01\/01\/2026 \u00e0 08:00 au 31\/12\/2026 \u00e0 23:59 \u2014 01560 Saint-Nizier-le-Bouchoux<\/li>\n              <li><strong>Sunday morning market<\/strong> \u2014 Du 01\/01\/2026 \u00e0 08:00 au 31\/12\/2026 \u00e0 23:59 \u2014 01340 Foissiat<\/li>\n              <li><strong>Treffort Market<\/strong> \u2014 Du 01\/01\/2026 \u00e0 08:00 au 31\/12\/2026 \u00e0 23:59 \u2014 01370 Val-Revermont<\/li>\n              <li><strong>Tuesday morning market<\/strong> \u2014 Du 01\/01\/2026 \u00e0 08:00 au 31\/12\/2026 \u00e0 23:59 \u2014 01340 Montrevel-en-Bresse<\/li>\n              <li><strong>Vennes Market<\/strong> \u2014 Du 01\/01\/2026 \u00e0 08:00 au 31\/12\/2026 \u00e0 23:59 \u2014 01000 Bourg-en-Bresse<\/li>\n              <li><strong>Wednesday morning market<\/strong> \u2014 Du 01\/01\/2026 \u00e0 08:00 au 31\/12\/2026 \u00e0 23:59 \u2014 01000 Bourg-en-Bresse<\/li>\n              <li><strong>Weekly Market<\/strong> \u2014 Du 01\/01\/2026 \u00e0 08:00 au 31\/12\/2026 \u00e0 23:59 \u2014 01190 Pont-de-Vaux<\/li>\n              <li><strong>Weekly market<\/strong> \u2014 Du 01\/01\/2026 \u00e0 08:00 au 31\/12\/2026 \u00e0 23:59 \u2014 01560 Saint-Trivier-de-Courtes<\/li>\n              <li><strong>Weekly market<\/strong> \u2014 Du 01\/01\/2026 \u00e0 08:00 au 31\/12\/2026 \u00e0 23:59 \u2014 01540 Vonnas<\/li>\n              <li><strong>Farmers&#039; market<\/strong> \u2014 Du 01\/01\/2026 \u00e0 08:30 au 31\/12\/2026 \u00e0 23:59 \u2014 01380 B\u00e2g\u00e9-Dommartin<\/li>\n              <li><strong>Small producers&#039; market in St Etienne du Bois<\/strong> \u2014 Du 01\/01\/2026 \u00e0 08:30 au 31\/12\/2026 \u00e0 23:59 \u2014 01370 Saint-\u00c9tienne-du-Bois<\/li>\n              <li><strong>Weekly market<\/strong> \u2014 Du 01\/01\/2026 \u00e0 09:00 au 31\/12\/2026 \u00e0 23:59 \u2014 01660 M\u00e9z\u00e9riat<\/li>\n              <li><strong>Direct sales at the Niermont farm<\/strong> \u2014 Du 01\/01\/2026 \u00e0 14:30 au 31\/12\/2026 \u00e0 23:59 \u2014 01380 B\u00e2g\u00e9-Dommartin<\/li>\n              <li><strong>Organic Local Producers&#039; Market<\/strong> \u2014 Du 01\/01\/2026 \u00e0 15:30 au 31\/12\/2026 \u00e0 23:59 \u2014 01000 Saint-Denis-l\u00e8s-Bourg<\/li>\n              <li><strong>Direct sales at Les jardins d&#039;Aestiv farm<\/strong> \u2014 Du 01\/01\/2026 \u00e0 16:00 au 31\/12\/2026 \u00e0 23:59 \u2014 01380 B\u00e2g\u00e9-Dommartin<\/li>\n              <li><strong>Farmers&#039; market<\/strong> \u2014 Du 01\/01\/2026 \u00e0 16:00 au 31\/12\/2026 \u00e0 23:59 \u2014 01380 B\u00e2g\u00e9-le-Ch\u00e2tel<\/li>\n              <li><strong>Sale of products from La Belle Plante distillery and beekeeper Marc Robin<\/strong> \u2014 Du 10\/06\/2026 au 31\/12\/2026 \u00e0 23:59 \u2014 39160 Montagna-le-Reconduit<\/li>\n              <li><strong>Photo exhibition - contest<\/strong> \u2014 Du 10\/10\/2026 au 14\/11\/2026 \u00e0 23:59 \u2014 01380 B\u00e2g\u00e9-le-Ch\u00e2tel<\/li>\n              <li><strong>Exhibition: My parents, screens and me<\/strong> \u2014 Du 24\/10\/2026 \u00e0 09:30 au 21\/11\/2026 \u00e0 23:59 \u2014 01380 B\u00e2g\u00e9-le-Ch\u00e2tel<\/li>\n              <li><strong>Exhibition: Us, Nannies<\/strong> \u2014 Du 03\/11\/2026 au 18\/11\/2026 \u00e0 23:59 \u2014 39160 Saint-Amour<\/li>\n              <li><strong>Local Producers&#039; Market<\/strong> \u2014 Du 04\/11\/2026 \u00e0 16:00 au 04\/11\/2026 \u00e0 23:59 \u2014 71700 Tournus<\/li>\n              <li><strong>Baby Readers<\/strong> \u2014 Du 06\/11\/2026 \u00e0 10:00 au 06\/11\/2026 \u00e0 23:59 \u2014 39190 Beaufort-Orbagna<\/li>\n              <li><strong>Video game evening<\/strong> \u2014 Du 06\/11\/2026 \u00e0 18:30 au 06\/11\/2026 \u00e0 23:59 \u2014 39160 Saint-Amour<\/li>\n              <li><strong>Musical show &quot;The mystery of the mermaid&quot;<\/strong> \u2014 Du 06\/11\/2026 \u00e0 20:00 au 06\/11\/2026 \u00e0 23:59 \u2014 01380 B\u00e2g\u00e9-le-Ch\u00e2tel<\/li>\n              <li><strong>&quot;J&#039;CAD&quot; in concert<\/strong> \u2014 Du 06\/11\/2026 \u00e0 20:30 au 06\/11\/2026 \u00e0 23:59 \u2014 71240 Gigny-sur-Sa\u00f4ne<\/li>\n              <li><strong>Not Always Gay to Be Firefighters \u2013 Croquignol &amp; Yoyo<\/strong> \u2014 Du 06\/11\/2026 \u00e0 20:30 au 06\/11\/2026 \u00e0 23:59 \u2014 71500 La Chapelle-Naude<\/li>\n              <li><strong>Weekly Market<\/strong> \u2014 Du 07\/11\/2026 \u00e0 08:30 au 07\/11\/2026 \u00e0 23:59 \u2014 71700 Tournus<\/li>\n              <li><strong>French Second Division Powerchair Football Championship (D2)<\/strong> \u2014 Du 07\/11\/2026 \u00e0 09:30 au 07\/11\/2026 \u00e0 23:59 \u2014 01000 Bourg-en-Bresse<\/li>\n              <li><strong>Board Game Day<\/strong> \u2014 Du 07\/11\/2026 \u00e0 10:00 au 07\/11\/2026 \u00e0 23:59 \u2014 01380 B\u00e2g\u00e9-Dommartin<\/li>\n              <li><strong>Activities at the media library: the show &quot;Familiarities&quot;<\/strong> \u2014 Du 07\/11\/2026 \u00e0 17:00 au 07\/11\/2026 \u00e0 23:59 \u2014 71700 Tournus<\/li>\n              <li><strong>Show &quot;Behind the Door&quot;<\/strong> \u2014 Du 07\/11\/2026 \u00e0 19:30 au 07\/11\/2026 \u00e0 23:59 \u2014 71580 Frontenaud<\/li>\n              <li><strong>Theatre evening<\/strong> \u2014 Du 07\/11\/2026 \u00e0 20:30 au 07\/11\/2026 \u00e0 23:59 \u2014 39320 Val Suran<\/li>\n              <li><strong>Jean Gloute de Braga at the Galpon<\/strong> \u2014 Du 07\/11\/2026 \u00e0 21:00 au 07\/11\/2026 \u00e0 23:59 \u2014 71700 Tournus<\/li>\n              <li><strong>Zangbeto at the Galpon<\/strong> \u2014 Du 12\/11\/2026 \u00e0 20:00 au 12\/11\/2026 \u00e0 23:59 \u2014 71700 Tournus<\/li>\n              <li><strong>Aperitif concert<\/strong> \u2014 Du 13\/11\/2026 \u00e0 19:30 au 13\/11\/2026 \u00e0 23:59 \u2014 01570 Manziat<\/li>\n              <li><strong>Musical, dance and eclectic show<\/strong> \u2014 Du 13\/11\/2026 \u00e0 20:30 au 13\/11\/2026 \u00e0 23:59 \u2014 39160 Saint-Amour<\/li>\n              <li><strong>Lego Expo B\u00e2g\u00e9-Dommartin in Bricks<\/strong> \u2014 Du 14\/11\/2026 au 15\/11\/2026 \u00e0 23:59 \u2014 01380 B\u00e2g\u00e9-Dommartin<\/li>\n              <li><strong>La sarrasine concert<\/strong> \u2014 Du 14\/11\/2026 \u00e0 15:30 au 14\/11\/2026 \u00e0 23:59 \u2014 01190 Pont-de-Vaux<\/li>\n              <li><strong>Craft Market<\/strong> \u2014 Du 15\/11\/2026 au 15\/11\/2026 \u00e0 23:59 \u2014 71700 Boyer<\/li>\n              <li><strong>Craft market<\/strong> \u2014 Du 15\/11\/2026 au 15\/11\/2026 \u00e0 23:59 \u2014 71700 Boyer<\/li>\n              <li><strong>The Sunday Morning Market<\/strong> \u2014 Du 15\/11\/2026 \u00e0 08:30 au 15\/11\/2026 \u00e0 23:59 \u2014 01851 Marboz<\/li>\n              <li><strong>Festive musical afternoon<\/strong> \u2014 Du 15\/11\/2026 \u00e0 15:00 au 15\/11\/2026 \u00e0 23:59 \u2014 01660 Chaveyriat<\/li>\n              <li><strong>Musical show &quot;Aux puces superphoniques&quot;<\/strong> \u2014 Du 15\/11\/2026 \u00e0 15:00 au 15\/11\/2026 \u00e0 23:59 \u2014 01190 Saint-B\u00e9nigne<\/li>\n              <li><strong>Travelling cinema<\/strong> \u2014 Du 17\/11\/2026 \u00e0 20:30 au 17\/11\/2026 \u00e0 23:59 \u2014 39160 Saint-Amour<\/li>\n              <li><strong>Wood club: the workshop for budding young sculptors<\/strong> \u2014 Du 18\/11\/2026 \u00e0 09:00 au 18\/11\/2026 \u00e0 23:59 \u2014 71290 Cuisery<\/li>\n              <li><strong>Family show<\/strong> \u2014 Du 20\/11\/2026 \u00e0 15:00 au 20\/11\/2026 \u00e0 23:59 \u2014 01190 Saint-\u00c9tienne-sur-Reyssouze<\/li>\n              <li><strong>Erwan Pinard in concert<\/strong> \u2014 Du 20\/11\/2026 \u00e0 21:00 au 20\/11\/2026 \u00e0 23:59 \u2014 71240 Gigny-sur-Sa\u00f4ne<\/li>\n              <li><strong>Les enchan&#039;T<\/strong> \u2014 Du 21\/11\/2026 \u00e0 20:00 au 21\/11\/2026 \u00e0 23:59 \u2014 01750 Replonges<\/li>\n              <li><strong>Play &quot;Votre maman&quot;<\/strong> \u2014 Du 21\/11\/2026 \u00e0 20:30 au 21\/11\/2026 \u00e0 23:59 \u2014 71290 Cuisery<\/li>\n              <li><strong>First waves at Galpon<\/strong> \u2014 Du 21\/11\/2026 \u00e0 21:00 au 21\/11\/2026 \u00e0 23:59 \u2014 71700 Tournus<\/li>\n              <li><strong>Choir gathering<\/strong> \u2014 Du 22\/11\/2026 \u00e0 15:00 au 22\/11\/2026 \u00e0 23:59 \u2014 01750 Replonges<\/li>\n              <li><strong>Tatanka at the Galpon<\/strong> \u2014 Du 22\/11\/2026 \u00e0 18:00 au 22\/11\/2026 \u00e0 23:59 \u2014 71700 Tournus<\/li>\n              <li><strong>World Video Game Day<\/strong> \u2014 Du 25\/11\/2026 \u00e0 09:30 au 25\/11\/2026 \u00e0 23:59 \u2014 39160 Saint-Amour<\/li>\n              <li><strong>Narrative video game creation workshop<\/strong> \u2014 Du 25\/11\/2026 \u00e0 14:00 au 25\/11\/2026 \u00e0 23:59 \u2014 39160 Saint-Amour<\/li>\n              <li><strong>Impro Sur Sa\u00f4ne<\/strong> \u2014 Du 27\/11\/2026 au 27\/11\/2026 \u00e0 23:59 \u2014 01190 Saint-B\u00e9nigne<\/li>\n              <li><strong>Activities at the media library: Baby readers for toddlers<\/strong> \u2014 Du 27\/11\/2026 \u00e0 10:00 au 27\/11\/2026 \u00e0 23:59 \u2014 71700 Tournus<\/li>\n              <li><strong>&quot;Super Eden&quot; Ello Papillon in concert<\/strong> \u2014 Du 27\/11\/2026 \u00e0 20:00 au 27\/11\/2026 \u00e0 23:59 \u2014 71240 Gigny-sur-Sa\u00f4ne<\/li>\n              <li><strong>Vin sur Vin Fair<\/strong> \u2014 Du 28\/11\/2026 au 29\/11\/2026 \u00e0 23:59 \u2014 71700 Tournus<\/li>\n              <li><strong>The Jeff Panacloc Company<\/strong> \u2014 Du 28\/11\/2026 \u00e0 20:00 au 28\/11\/2026 \u00e0 23:59 \u2014 71000 M\u00e2con<\/li>\n          <\/ul>\n  <\/noscript>\n<\/div>\n\n<div class=\"ea-modal-overlay\" id=\"ea-modal\" hidden>\n  <div class=\"ea-modal\" role=\"dialog\" aria-modal=\"true\" aria-labelledby=\"ea-modal-title\">\n    <button type=\"button\" class=\"ea-modal-close\" id=\"ea-modal-close\" aria-label=\"Close\">\u00d7<\/button>\n    <div id=\"ea-modal-content\"><\/div>\n  <\/div>\n<\/div>\n\n<script>\n  (function() {\n    var EVENTS = [{\"id\":10,\"name\":\"Educational trail\",\"type\":\"evenements-locaux-197\",\"category\":\"sport-hiking\",\"label\":\"Du 04\\\/06\\\/2025 au 04\\\/06\\\/2027 \\u00e0 23:59\",\"start\":\"2025-06-04\",\"end\":\"2027-06-04\",\"start_time\":\"\",\"end_time\":\"\",\"open_start\":false,\"city\":\"71260 Vir\\u00e9\",\"onsite\":false,\"spot\":\"\",\"registration\":false,\"description\":\"Come discover the habitats, orchard, fallow land and wildlife present on the site.\\nWalk 800 metres of trail and set off to discover the nature around us! Along the way, young and old alike can discover wildlife and its habitats thanks to the various features along the route: hedges, riparian woodland, flower cover, beehives and even an insect house. The entire trail is equipped with explanatory panels. A fun, educational route accessible to all to discover biodiversity.\\nExperts from the Federation offer guided tours every 2nd and 4th Tuesday from June to September at 2:30 p.m., or by reservation for groups.\\nCreated on the initiative of the Departmental Federation of Hunters of Sa\\u00f4ne-et-Loire, this trail offers an immersion in the richness of our natural heritage. Our aim is to share our knowledge of biodiversity, wildlife and our daily commitment to preserving their habitats.\\nSuitable for all audiences, from children to seniors, this trail is ideally located in the preserved environment of Moulin Gandin (Federation premises), in Vir\\u00e9.\\n\\nOn site, a large car park and picnic area are available, as well as a fully equipped room that can be rented to combine the trail visit with an activity \\\/ event.\",\"image\":\"\",\"credit\":\"\",\"link\":\"https:\\\/\\\/www.chasse-nature-71.fr\\\/\"},{\"id\":16,\"name\":\"Equestrian activities\",\"type\":\"evenements-locaux-197\",\"category\":\"family-friendly\",\"label\":\"Du 01\\\/12\\\/2025 \\u00e0 09:30 au 31\\\/12\\\/2026 \\u00e0 23:59\",\"start\":\"2025-12-01\",\"end\":\"2026-12-31\",\"start_time\":\"09:30\",\"end_time\":\"\",\"open_start\":false,\"city\":\"71870 Laiz\\u00e9\",\"onsite\":false,\"spot\":\"\",\"registration\":false,\"description\":\"Located near M\\u00e2con, Domaine de Laiz\\u00e9 offers, by prior appointment, many activities: classical riding, show jumping, cross-country, dressage, vaulting, hiking, equestrian stays and school holiday camps. A g\\u00eete with a capacity of 24 people welcomes families and groups in a green countryside setting.\",\"image\":\"\",\"credit\":\"\",\"link\":\"https:\\\/\\\/www.facebook.com\\\/p\\\/Poney-club-de-Laiz%C3%A9-100063721713955\\\/?locale=fr_FR\"},{\"id\":57,\"name\":\"Polliat Market\",\"type\":\"evenements-locaux-197\",\"category\":\"markets-fairs\",\"label\":\"Du 01\\\/01\\\/2026 au 31\\\/12\\\/2026 \\u00e0 23:59\",\"start\":\"2026-01-01\",\"end\":\"2026-12-31\",\"start_time\":\"\",\"end_time\":\"\",\"open_start\":false,\"city\":\"01310 Polliat\",\"onsite\":false,\"spot\":\"\",\"registration\":false,\"description\":\"Food market.\",\"image\":\"\",\"credit\":\"\",\"link\":\"https:\\\/\\\/www.polliat.fr\\\/\"},{\"id\":11,\"name\":\"Weekly market\",\"type\":\"evenements-locaux-197\",\"category\":\"markets-fairs\",\"label\":\"Du 01\\\/01\\\/2026 \\u00e0 07:00 au 31\\\/12\\\/2026 \\u00e0 23:59\",\"start\":\"2026-01-01\",\"end\":\"2026-12-31\",\"start_time\":\"07:00\",\"end_time\":\"\",\"open_start\":false,\"city\":\"01570 Feillens\",\"onsite\":false,\"spot\":\"\",\"registration\":false,\"description\":\"Lively and colorful, discover our markets steeped in tradition where you will find Bresse poultry, regional fruits and vegetables, and other local produce.\",\"image\":\"\",\"credit\":\"\",\"link\":\"\"},{\"id\":31,\"name\":\"Weekly market\",\"type\":\"evenements-locaux-197\",\"category\":\"markets-fairs\",\"label\":\"Du 01\\\/01\\\/2026 \\u00e0 07:00 au 31\\\/12\\\/2026 \\u00e0 23:59\",\"start\":\"2026-01-01\",\"end\":\"2026-12-31\",\"start_time\":\"07:00\",\"end_time\":\"\",\"open_start\":false,\"city\":\"01570 Manziat\",\"onsite\":false,\"spot\":\"\",\"registration\":false,\"description\":\"Lively and colorful, discover our markets steeped in tradition where you will find Bresse poultry, fruits and vegetables from the region, and other local produce.\",\"image\":\"\",\"credit\":\"\",\"link\":\"\"},{\"id\":12,\"name\":\"Jasseron market\",\"type\":\"evenements-locaux-197\",\"category\":\"markets-fairs\",\"label\":\"Du 01\\\/01\\\/2026 \\u00e0 08:00 au 31\\\/12\\\/2026 \\u00e0 23:59\",\"start\":\"2026-01-01\",\"end\":\"2026-12-31\",\"start_time\":\"08:00\",\"end_time\":\"\",\"open_start\":false,\"city\":\"01250 Jasseron\",\"onsite\":false,\"spot\":\"\",\"registration\":false,\"description\":\"The vendors offer you quality local food products as well as artisanal goods.\\r\\nThe market is a time for exchange and conviviality with all the residents.\",\"image\":\"\",\"credit\":\"\",\"link\":\"https:\\\/\\\/www.jasseron.fr\\\/\"},{\"id\":5,\"name\":\"Market\",\"type\":\"evenements-locaux-197\",\"category\":\"markets-fairs\",\"label\":\"Du 01\\\/01\\\/2026 \\u00e0 08:00 au 31\\\/12\\\/2026 \\u00e0 23:59\",\"start\":\"2026-01-01\",\"end\":\"2026-12-31\",\"start_time\":\"08:00\",\"end_time\":\"\",\"open_start\":false,\"city\":\"71500 Louhans\",\"onsite\":false,\"spot\":\"\",\"registration\":false,\"description\":\"Weekly market on Saturday morning. 12 vendors.\",\"image\":\"\",\"credit\":\"\",\"link\":\"\"},{\"id\":22,\"name\":\"Market\",\"type\":\"evenements-locaux-197\",\"category\":\"markets-fairs\",\"label\":\"Du 01\\\/01\\\/2026 \\u00e0 08:00 au 31\\\/12\\\/2026 \\u00e0 23:59\",\"start\":\"2026-01-01\",\"end\":\"2026-12-31\",\"start_time\":\"08:00\",\"end_time\":\"\",\"open_start\":false,\"city\":\"71290 Cuisery\",\"onsite\":false,\"spot\":\"\",\"registration\":false,\"description\":\"Weekly market on Tuesday morning. 15 vendors.\",\"image\":\"\",\"credit\":\"\",\"link\":\"\"},{\"id\":42,\"name\":\"Meillonnas Market\",\"type\":\"evenements-locaux-197\",\"category\":\"markets-fairs\",\"label\":\"Du 01\\\/01\\\/2026 \\u00e0 08:00 au 31\\\/12\\\/2026 \\u00e0 23:59\",\"start\":\"2026-01-01\",\"end\":\"2026-12-31\",\"start_time\":\"08:00\",\"end_time\":\"\",\"open_start\":false,\"city\":\"01370 Meillonnas\",\"onsite\":false,\"spot\":\"\",\"registration\":false,\"description\":\"Every Wednesday morning, a small market takes place in the town hall square.\",\"image\":\"\",\"credit\":\"\",\"link\":\"\"},{\"id\":69,\"name\":\"Poultry Market\",\"type\":\"evenements-locaux-197\",\"category\":\"markets-fairs\",\"label\":\"Du 01\\\/01\\\/2026 \\u00e0 08:00 au 31\\\/12\\\/2026 \\u00e0 23:59\",\"start\":\"2026-01-01\",\"end\":\"2026-12-31\",\"start_time\":\"08:00\",\"end_time\":\"\",\"open_start\":false,\"city\":\"71500 Louhans\",\"onsite\":false,\"spot\":\"\",\"registration\":false,\"description\":\"The market, every MONDAY MORNING, attracts large crowds. The poultry market is picturesque and very spectacular. Through the arcades, streets, and squares of the town, a wide variety of traders rub shoulders (food, organic, agricultural, etc.). More than 250 exhibitors. On Easter Monday and Whit Monday: poultry market and food market only in the morning, clothing market all day.\",\"image\":\"\",\"credit\":\"\",\"link\":\"http:\\\/\\\/www.bresse-bourguignonne.com\\\/\"},{\"id\":1,\"name\":\"Saturday morning market\",\"type\":\"evenements-locaux-197\",\"category\":\"markets-fairs\",\"label\":\"Du 01\\\/01\\\/2026 \\u00e0 08:00 au 31\\\/12\\\/2026 \\u00e0 23:59\",\"start\":\"2026-01-01\",\"end\":\"2026-12-31\",\"start_time\":\"08:00\",\"end_time\":\"\",\"open_start\":false,\"city\":\"01340 Montrevel-en-Bresse\",\"onsite\":false,\"spot\":\"\",\"registration\":false,\"description\":\"Food market.\",\"image\":\"\",\"credit\":\"\",\"link\":\"\"},{\"id\":6,\"name\":\"Saturday morning market\",\"type\":\"evenements-locaux-197\",\"category\":\"markets-fairs\",\"label\":\"Du 01\\\/01\\\/2026 \\u00e0 08:00 au 31\\\/12\\\/2026 \\u00e0 23:59\",\"start\":\"2026-01-01\",\"end\":\"2026-12-31\",\"start_time\":\"08:00\",\"end_time\":\"\",\"open_start\":false,\"city\":\"01000 Bourg-en-Bresse\",\"onsite\":false,\"spot\":\"\",\"registration\":false,\"description\":\"Food market only.\",\"image\":\"\",\"credit\":\"\",\"link\":\"https:\\\/\\\/www.bourgenbresse.fr\\\/129-commerces.htm\"},{\"id\":2,\"name\":\"Small weekly market\",\"type\":\"evenements-locaux-197\",\"category\":\"markets-fairs\",\"label\":\"Du 01\\\/01\\\/2026 \\u00e0 08:00 au 31\\\/12\\\/2026 \\u00e0 23:59\",\"start\":\"2026-01-01\",\"end\":\"2026-12-31\",\"start_time\":\"08:00\",\"end_time\":\"\",\"open_start\":false,\"city\":\"01560 Saint-Nizier-le-Bouchoux\",\"onsite\":false,\"spot\":\"\",\"registration\":false,\"description\":\"Weekly market in the village.\",\"image\":\"\",\"credit\":\"\",\"link\":\"https:\\\/\\\/www.saintnizierlebouchoux.com\\\/\"},{\"id\":23,\"name\":\"Sunday morning market\",\"type\":\"evenements-locaux-197\",\"category\":\"markets-fairs\",\"label\":\"Du 01\\\/01\\\/2026 \\u00e0 08:00 au 31\\\/12\\\/2026 \\u00e0 23:59\",\"start\":\"2026-01-01\",\"end\":\"2026-12-31\",\"start_time\":\"08:00\",\"end_time\":\"\",\"open_start\":false,\"city\":\"01340 Foissiat\",\"onsite\":false,\"spot\":\"\",\"registration\":false,\"description\":\"Food market.\",\"image\":\"\",\"credit\":\"\",\"link\":\"https:\\\/\\\/www.foissiat.com\\\/\"},{\"id\":48,\"name\":\"Treffort Market\",\"type\":\"evenements-locaux-197\",\"category\":\"markets-fairs\",\"label\":\"Du 01\\\/01\\\/2026 \\u00e0 08:00 au 31\\\/12\\\/2026 \\u00e0 23:59\",\"start\":\"2026-01-01\",\"end\":\"2026-12-31\",\"start_time\":\"08:00\",\"end_time\":\"\",\"open_start\":false,\"city\":\"01370 Val-Revermont\",\"onsite\":false,\"spot\":\"\",\"registration\":false,\"description\":\"Small village market at the foot of the Revermont.\",\"image\":\"\",\"credit\":\"\",\"link\":\"http:\\\/\\\/val-revermont.fr\\\/\"},{\"id\":3,\"name\":\"Tuesday morning market\",\"type\":\"evenements-locaux-197\",\"category\":\"markets-fairs\",\"label\":\"Du 01\\\/01\\\/2026 \\u00e0 08:00 au 31\\\/12\\\/2026 \\u00e0 23:59\",\"start\":\"2026-01-01\",\"end\":\"2026-12-31\",\"start_time\":\"08:00\",\"end_time\":\"\",\"open_start\":false,\"city\":\"01340 Montrevel-en-Bresse\",\"onsite\":false,\"spot\":\"\",\"registration\":false,\"description\":\"Food market, clothing and various products.\",\"image\":\"\",\"credit\":\"\",\"link\":\"\"},{\"id\":40,\"name\":\"Vennes Market\",\"type\":\"evenements-locaux-197\",\"category\":\"markets-fairs\",\"label\":\"Du 01\\\/01\\\/2026 \\u00e0 08:00 au 31\\\/12\\\/2026 \\u00e0 23:59\",\"start\":\"2026-01-01\",\"end\":\"2026-12-31\",\"start_time\":\"08:00\",\"end_time\":\"\",\"open_start\":false,\"city\":\"01000 Bourg-en-Bresse\",\"onsite\":false,\"spot\":\"\",\"registration\":false,\"description\":\"Discover the local charm at the Vennes Market in Bourg-en-Bresse! On the outskirts of the town, stroll among flower stalls and local produce. A picturesque open-air experience awaits you every week!\",\"image\":\"\",\"credit\":\"\",\"link\":\"https:\\\/\\\/www.bourgenbresse.fr\\\/129-commerces.htm\"},{\"id\":63,\"name\":\"Wednesday morning market\",\"type\":\"evenements-locaux-197\",\"category\":\"markets-fairs\",\"label\":\"Du 01\\\/01\\\/2026 \\u00e0 08:00 au 31\\\/12\\\/2026 \\u00e0 23:59\",\"start\":\"2026-01-01\",\"end\":\"2026-12-31\",\"start_time\":\"08:00\",\"end_time\":\"\",\"open_start\":false,\"city\":\"01000 Bourg-en-Bresse\",\"onsite\":false,\"spot\":\"\",\"registration\":false,\"description\":\"Discover the Wednesday morning market in Bourg-en-Bresse! A weekly meeting place where gastronomy, textiles, and bazaar goods come together in the heart of the town. Indoors or outdoors, an unmissable local experience!\",\"image\":\"\",\"credit\":\"\",\"link\":\"https:\\\/\\\/www.bourgenbresse.fr\\\/129-commerces.htm\"},{\"id\":45,\"name\":\"Weekly Market\",\"type\":\"evenements-locaux-197\",\"category\":\"markets-fairs\",\"label\":\"Du 01\\\/01\\\/2026 \\u00e0 08:00 au 31\\\/12\\\/2026 \\u00e0 23:59\",\"start\":\"2026-01-01\",\"end\":\"2026-12-31\",\"start_time\":\"08:00\",\"end_time\":\"\",\"open_start\":false,\"city\":\"01190 Pont-de-Vaux\",\"onsite\":false,\"spot\":\"\",\"registration\":false,\"description\":\"Lively and colourful, you will find Bresse poultry, fruit and vegetables, and other local produce. Clothing and tableware complete the list. 100 to 150 exhibitors depending on the season.\",\"image\":\"\",\"credit\":\"\",\"link\":\"\"},{\"id\":30,\"name\":\"Weekly market\",\"type\":\"evenements-locaux-197\",\"category\":\"markets-fairs\",\"label\":\"Du 01\\\/01\\\/2026 \\u00e0 08:00 au 31\\\/12\\\/2026 \\u00e0 23:59\",\"start\":\"2026-01-01\",\"end\":\"2026-12-31\",\"start_time\":\"08:00\",\"end_time\":\"\",\"open_start\":false,\"city\":\"01560 Saint-Trivier-de-Courtes\",\"onsite\":false,\"spot\":\"\",\"registration\":false,\"description\":\"Weekly village market: food, clothing, local products...\",\"image\":\"\",\"credit\":\"\",\"link\":\"http:\\\/\\\/www.saint-trivier-de-courtes.fr\\\/\"},{\"id\":60,\"name\":\"Weekly market\",\"type\":\"evenements-locaux-197\",\"category\":\"markets-fairs\",\"label\":\"Du 01\\\/01\\\/2026 \\u00e0 08:00 au 31\\\/12\\\/2026 \\u00e0 23:59\",\"start\":\"2026-01-01\",\"end\":\"2026-12-31\",\"start_time\":\"08:00\",\"end_time\":\"\",\"open_start\":false,\"city\":\"01540 Vonnas\",\"onsite\":false,\"spot\":\"\",\"registration\":false,\"description\":\"\",\"image\":\"\",\"credit\":\"\",\"link\":\"\"},{\"id\":59,\"name\":\"Farmers' market\",\"type\":\"evenements-locaux-197\",\"category\":\"markets-fairs\",\"label\":\"Du 01\\\/01\\\/2026 \\u00e0 08:30 au 31\\\/12\\\/2026 \\u00e0 23:59\",\"start\":\"2026-01-01\",\"end\":\"2026-12-31\",\"start_time\":\"08:30\",\"end_time\":\"\",\"open_start\":false,\"city\":\"01380 B\\u00e2g\\u00e9-Dommartin\",\"onsite\":false,\"spot\":\"\",\"registration\":false,\"description\":\"Fruit and vegetables from many vendors without pesticides.\",\"image\":\"\",\"credit\":\"\",\"link\":\"\"},{\"id\":27,\"name\":\"Small producers' market in St Etienne du Bois\",\"type\":\"evenements-locaux-197\",\"category\":\"markets-fairs\",\"label\":\"Du 01\\\/01\\\/2026 \\u00e0 08:30 au 31\\\/12\\\/2026 \\u00e0 23:59\",\"start\":\"2026-01-01\",\"end\":\"2026-12-31\",\"start_time\":\"08:30\",\"end_time\":\"\",\"open_start\":false,\"city\":\"01370 Saint-\\u00c9tienne-du-Bois\",\"onsite\":false,\"spot\":\"\",\"registration\":false,\"description\":\"Market on Sunday morning in Saint-Etienne-du-Bois from 9:30 a.m. to 12:30 p.m. Honey, cheeses, fruit, vegetables.\",\"image\":\"\",\"credit\":\"\",\"link\":\"http:\\\/\\\/www.st-etienne-du-bois.fr\\\/\"},{\"id\":32,\"name\":\"Weekly market\",\"type\":\"evenements-locaux-197\",\"category\":\"markets-fairs\",\"label\":\"Du 01\\\/01\\\/2026 \\u00e0 09:00 au 31\\\/12\\\/2026 \\u00e0 23:59\",\"start\":\"2026-01-01\",\"end\":\"2026-12-31\",\"start_time\":\"09:00\",\"end_time\":\"\",\"open_start\":false,\"city\":\"01660 M\\u00e9z\\u00e9riat\",\"onsite\":false,\"spot\":\"\",\"registration\":false,\"description\":\"Basic food products and, depending on the week, household items, garden items, and clothing\",\"image\":\"\",\"credit\":\"\",\"link\":\"http:\\\/\\\/www.mezeriat.fr\\\/\"},{\"id\":58,\"name\":\"Direct sales at the Niermont farm\",\"type\":\"evenements-locaux-197\",\"category\":\"markets-fairs\",\"label\":\"Du 01\\\/01\\\/2026 \\u00e0 14:30 au 31\\\/12\\\/2026 \\u00e0 23:59\",\"start\":\"2026-01-01\",\"end\":\"2026-12-31\",\"start_time\":\"14:30\",\"end_time\":\"\",\"open_start\":false,\"city\":\"01380 B\\u00e2g\\u00e9-Dommartin\",\"onsite\":false,\"spot\":\"\",\"registration\":false,\"description\":\"Discover our know-how through our oils, flours and cereal specialties.\",\"image\":\"\",\"credit\":\"\",\"link\":\"\"},{\"id\":43,\"name\":\"Organic Local Producers' Market\",\"type\":\"evenements-locaux-197\",\"category\":\"markets-fairs\",\"label\":\"Du 01\\\/01\\\/2026 \\u00e0 15:30 au 31\\\/12\\\/2026 \\u00e0 23:59\",\"start\":\"2026-01-01\",\"end\":\"2026-12-31\",\"start_time\":\"15:30\",\"end_time\":\"\",\"open_start\":false,\"city\":\"01000 Saint-Denis-l\\u00e8s-Bourg\",\"onsite\":false,\"spot\":\"\",\"registration\":false,\"description\":\"Organic producers' market every Friday afternoon on the Esplanade de la Libert\\u00e9 in Saint-Denis-l\\u00e8s-Bourg.\",\"image\":\"\",\"credit\":\"\",\"link\":\"\"},{\"id\":0,\"name\":\"Direct sales at Les jardins d'Aestiv farm\",\"type\":\"evenements-locaux-197\",\"category\":\"markets-fairs\",\"label\":\"Du 01\\\/01\\\/2026 \\u00e0 16:00 au 31\\\/12\\\/2026 \\u00e0 23:59\",\"start\":\"2026-01-01\",\"end\":\"2026-12-31\",\"start_time\":\"16:00\",\"end_time\":\"\",\"open_start\":false,\"city\":\"01380 B\\u00e2g\\u00e9-Dommartin\",\"onsite\":false,\"spot\":\"\",\"registration\":false,\"description\":\"We sell our organic farm products:\\nFlours, oils, dried vegetables, beef, cured meats, jarred dishes & fresh pasta.\\nAnd a gourmet selection to complete our mini market:\\nBread and pastries, eggs, honey & vinegars.\",\"image\":\"\",\"credit\":\"\",\"link\":\"http:\\\/\\\/www.lesjardinsdaestiv.eu\\\/\"},{\"id\":25,\"name\":\"Farmers' market\",\"type\":\"evenements-locaux-197\",\"category\":\"markets-fairs\",\"label\":\"Du 01\\\/01\\\/2026 \\u00e0 16:00 au 31\\\/12\\\/2026 \\u00e0 23:59\",\"start\":\"2026-01-01\",\"end\":\"2026-12-31\",\"start_time\":\"16:00\",\"end_time\":\"\",\"open_start\":false,\"city\":\"01380 B\\u00e2g\\u00e9-le-Ch\\u00e2tel\",\"onsite\":false,\"spot\":\"\",\"registration\":false,\"description\":\"Seasonal products from the region and beyond!\",\"image\":\"\",\"credit\":\"\",\"link\":\"\"},{\"id\":41,\"name\":\"Sale of products from La Belle Plante distillery and beekeeper Marc Robin\",\"type\":\"evenements-locaux-197\",\"category\":\"markets-fairs\",\"label\":\"Du 10\\\/06\\\/2026 au 31\\\/12\\\/2026 \\u00e0 23:59\",\"start\":\"2026-06-10\",\"end\":\"2026-12-31\",\"start_time\":\"\",\"end_time\":\"\",\"open_start\":false,\"city\":\"39160 Montagna-le-Reconduit\",\"onsite\":false,\"spot\":\"\",\"registration\":false,\"description\":\"Carine, farmer-distiller at La Belle Plante Distillery, and Marc Robin, beekeeper, welcome you to discover their gourmet products, alcoholic beverages and spirits: honey, mead, absinthe, gin, aperitif spreads, herbal teas, flavoured oils and sugars...\\n\\nThis farm sale will take place every Monday from 5 p.m. to 7 p.m. and every Saturday from 10 a.m. to 12 p.m. at La Belle Plante Distillery in Montagna-le-Reconduit.\\n\\nOn Mondays, a small friendly local producers' market is also offered. You can order your bread and vegetables. Do not hesitate to contact Carine for more information.\",\"image\":\"https:\\\/\\\/decibelles-data.media.tourinsoft.eu\\\/upload\\\/Vente-a-la-ferme.jpg\",\"credit\":\"distillerie la belle plante et miel robin\",\"link\":\"http:\\\/\\\/miel-robin.fr\\\/index.php\"},{\"id\":29,\"name\":\"Photo exhibition - contest\",\"type\":\"evenements-locaux-197\",\"category\":\"exhibitions\",\"label\":\"Du 10\\\/10\\\/2026 au 14\\\/11\\\/2026 \\u00e0 23:59\",\"start\":\"2026-10-10\",\"end\":\"2026-11-14\",\"start_time\":\"\",\"end_time\":\"\",\"open_start\":false,\"city\":\"01380 B\\u00e2g\\u00e9-le-Ch\\u00e2tel\",\"onsite\":false,\"spot\":\"\",\"registration\":false,\"description\":\"Open to amateur photographers only.\\r\\n2 themes:\\r\\n- \\\"Keep an eye on these communes\\\" (Sermoyer, Arbigny, Reyssouze, Pont-de-Vaux, Saint-B\\u00e9nigne, Chavannes-sur-Reyssouze, Gorrevod)\\r\\n- \\\"From dusk to dawn\\\"\",\"image\":\"\",\"credit\":\"\",\"link\":\"https:\\\/\\\/www.bage-pontdevaux-tourisme.com\\\/\"},{\"id\":50,\"name\":\"Exhibition: My parents, screens and me\",\"type\":\"evenements-locaux-197\",\"category\":\"exhibitions\",\"label\":\"Du 24\\\/10\\\/2026 \\u00e0 09:30 au 21\\\/11\\\/2026 \\u00e0 23:59\",\"start\":\"2026-10-24\",\"end\":\"2026-11-21\",\"start_time\":\"09:30\",\"end_time\":\"\",\"open_start\":false,\"city\":\"01380 B\\u00e2g\\u00e9-le-Ch\\u00e2tel\",\"onsite\":false,\"spot\":\"\",\"registration\":false,\"description\":\"An exhibition to reflect as a family on screen use.\",\"image\":\"\",\"credit\":\"\",\"link\":\"\"},{\"id\":72,\"name\":\"Exhibition: Us, Nannies\",\"type\":\"evenements-locaux-197\",\"category\":\"exhibitions\",\"label\":\"Du 03\\\/11\\\/2026 au 18\\\/11\\\/2026 \\u00e0 23:59\",\"start\":\"2026-11-03\",\"end\":\"2026-11-18\",\"start_time\":\"\",\"end_time\":\"\",\"open_start\":false,\"city\":\"39160 Saint-Amour\",\"onsite\":false,\"spot\":\"\",\"registration\":false,\"description\":\"From 3 to 18 November during the media library opening hours.\\nA photographic exhibition exploring the profession of childminder.\\nOpen to subscribers and non-subscribers - Free.\\nIn partnership with Relais Petite Enfance Porte du Jura and Mutualit\\u00e9 Fran\\u00e7aise.\",\"image\":\"\",\"credit\":\"\",\"link\":\"https:\\\/\\\/www.facebook.com\\\/MediathequeFirminGemier\"},{\"id\":54,\"name\":\"Activities at the media library: motor skills course\",\"type\":\"evenements-locaux-197\",\"category\":\"for-families\",\"label\":\"Du 03\\\/11\\\/2026 \\u00e0 10:00 au 03\\\/11\\\/2026 \\u00e0 23:59\",\"start\":\"2026-11-03\",\"end\":\"2026-11-03\",\"start_time\":\"10:00\",\"end_time\":\"\",\"open_start\":false,\"city\":\"71700 Tournus\",\"onsite\":false,\"spot\":\"\",\"registration\":false,\"description\":\"Come and share a moment of discovery and play with your child! On the programme: a fun course specially designed for toddlers to stimulate their motor skills, balance, coordination and self-confidence, in a safe environment adapted to their age.\\nFree admission - No registration required, subject to availability \\u2013 12 months to 4 years\",\"image\":\"\",\"credit\":\"\",\"link\":\"\"},{\"id\":44,\"name\":\"Baby Readers\",\"type\":\"evenements-locaux-197\",\"category\":\"family\",\"label\":\"Du 03\\\/11\\\/2026 \\u00e0 10:15 au 03\\\/11\\\/2026 \\u00e0 23:59\",\"start\":\"2026-11-03\",\"end\":\"2026-11-03\",\"start_time\":\"10:15\",\"end_time\":\"\",\"open_start\":false,\"city\":\"39160 Saint-Amour\",\"onsite\":false,\"spot\":\"\",\"registration\":false,\"description\":\"BABY READERS\\n\\nLittle ones aged 0 to 3 are invited with their parents and nannies to attend a reading session and discover the joys of books. Stories, nursery rhymes, finger games and a cheerful mood are on the programme!\\n\\nOne session at 9:30 a.m. and another at 10:15 a.m.\\n\\nFree. Registration required at the media library: on site, by phone or via the following link: https:\\\/\\\/xoyondo.com\\\/dp\\\/81xnj40v0wzjtmt\",\"image\":\"https:\\\/\\\/decibelles-data.media.tourinsoft.eu\\\/upload\\\/BEBES-LECTEURS-4.jpg\",\"credit\":\"OT CCPJ\",\"link\":\"https:\\\/\\\/www.facebook.com\\\/M%C3%A9diath%C3%A8que%20Firmin%20G%C3%A9mier\"},{\"id\":65,\"name\":\"Local Producers' Market\",\"type\":\"evenements-locaux-197\",\"category\":\"markets-fairs\",\"label\":\"Du 04\\\/11\\\/2026 \\u00e0 16:00 au 04\\\/11\\\/2026 \\u00e0 23:59\",\"start\":\"2026-11-04\",\"end\":\"2026-11-04\",\"start_time\":\"16:00\",\"end_time\":\"\",\"open_start\":false,\"city\":\"71700 Tournus\",\"onsite\":false,\"spot\":\"\",\"registration\":false,\"description\":\"The town of Tournus offers you a local producers' market every Wednesday.\",\"image\":\"https:\\\/\\\/decibelles-data.media.tourinsoft.eu\\\/upload\\\/marche-bio-1.JPG\",\"credit\":\"Ville de Tournus\",\"link\":\"\"},{\"id\":21,\"name\":\"Baby Readers\",\"type\":\"evenements-locaux-197\",\"category\":\"family\",\"label\":\"Du 06\\\/11\\\/2026 \\u00e0 10:00 au 06\\\/11\\\/2026 \\u00e0 23:59\",\"start\":\"2026-11-06\",\"end\":\"2026-11-06\",\"start_time\":\"10:00\",\"end_time\":\"\",\"open_start\":false,\"city\":\"39190 Beaufort-Orbagna\",\"onsite\":false,\"spot\":\"\",\"registration\":false,\"description\":\"Baby Readers\",\"image\":\"\",\"credit\":\"\",\"link\":\"https:\\\/\\\/www.facebook.com\\\/M%C3%A9diath%C3%A8que%20Firmin%20G%C3%A9mier\"},{\"id\":56,\"name\":\"Video game evening\",\"type\":\"evenements-locaux-197\",\"category\":\"for-families\",\"label\":\"Du 06\\\/11\\\/2026 \\u00e0 18:30 au 06\\\/11\\\/2026 \\u00e0 23:59\",\"start\":\"2026-11-06\",\"end\":\"2026-11-06\",\"start_time\":\"18:30\",\"end_time\":\"\",\"open_start\":false,\"city\":\"39160 Saint-Amour\",\"onsite\":false,\"spot\":\"\",\"registration\":false,\"description\":\"Video game evening at M\\u00e9diath\\u00e8que Firmin G\\u00e9mier!\\n\\nChallenge your loved ones and beat your best score!\\n\\nFree, registration required at the media library: on site, by phone or on the media library website.\\n\\nVideo game evenings from age 6: one Friday per month at 6:30 pm.\",\"image\":\"https:\\\/\\\/decibelles-data.media.tourinsoft.eu\\\/upload\\\/SOIREES-JV-3.jpg\",\"credit\":\"M\\u00e9diath\\u00e8que Firmin G\\u00e9mier\",\"link\":\"https:\\\/\\\/www.facebook.com\\\/PorteduJuraCommunautedeCommunes\"},{\"id\":19,\"name\":\"Musical show \\\"The mystery of the mermaid\\\"\",\"type\":\"evenements-locaux-197\",\"category\":\"spectacles-cinema\",\"label\":\"Du 06\\\/11\\\/2026 \\u00e0 20:00 au 06\\\/11\\\/2026 \\u00e0 23:59\",\"start\":\"2026-11-06\",\"end\":\"2026-11-06\",\"start_time\":\"20:00\",\"end_time\":\"\",\"open_start\":false,\"city\":\"01380 B\\u00e2g\\u00e9-le-Ch\\u00e2tel\",\"onsite\":false,\"spot\":\"\",\"registration\":false,\"description\":\"Captain Barbaboum, Nessee Williamns and Moustek, his loyal cabin boy, set off in search of their friend and virtuoso choreographer BarbaZik, who has disappeared since their last end-of-cruise party.\",\"image\":\"\",\"credit\":\"\",\"link\":\"\"},{\"id\":34,\"name\":\"\\\"J'CAD\\\" in concert\",\"type\":\"evenements-locaux-197\",\"category\":\"concerts-music-festivals\",\"label\":\"Du 06\\\/11\\\/2026 \\u00e0 20:30 au 06\\\/11\\\/2026 \\u00e0 23:59\",\"start\":\"2026-11-06\",\"end\":\"2026-11-06\",\"start_time\":\"20:30\",\"end_time\":\"\",\"open_start\":false,\"city\":\"71240 Gigny-sur-Sa\\u00f4ne\",\"onsite\":false,\"spot\":\"\",\"registration\":false,\"description\":\"J'CAD is an Irish folk music group.\\nThe concert is pay-what-you-want and pay-what-you-feel... which does not mean free...\\nFood:\\nwith reservation recommended before 04\\\/11 at 8:00 p.m.\\nPotato gratin Florentine-style\\nLarge plate, \\u20ac10. Small plate, \\u20ac5.\\nDessert: caramelized pudding, \\u20ac4\\nNo reservation required: charcuterie board (or vegetarian terrine) \\\/ cheese for 2 people for \\u20ac12.\",\"image\":\"\",\"credit\":\"\",\"link\":\"https:\\\/\\\/morarderic.wixsite.com\\\/fartfelu-fartfelien\\\/spectacles\"},{\"id\":39,\"name\":\"Not Always Gay to Be Firefighters \\u2013 Croquignol & Yoyo\",\"type\":\"evenements-locaux-197\",\"category\":\"shows-cinema\",\"label\":\"Du 06\\\/11\\\/2026 \\u00e0 20:30 au 06\\\/11\\\/2026 \\u00e0 23:59\",\"start\":\"2026-11-06\",\"end\":\"2026-11-06\",\"start_time\":\"20:30\",\"end_time\":\"\",\"open_start\":false,\"city\":\"71500 La Chapelle-Naude\",\"onsite\":false,\"spot\":\"\",\"registration\":false,\"description\":\"Croquignol & Yoyo present \\u201cNot Always Gay to Be Firefighters\\u201d, a popular, explosive and off-the-wall comedy set in the world of firefighters.\\nWith barracks spirit, misunderstandings, songs, absurd situations and gentle humour, the duo takes the audience on a lively and generous show, where blunders turn into hilarious disasters.\\nA moment of laughter, complicity and good cheer, accessible to all, carried by two larger-than-life characters.\\nHumour, fire and derision... with Croquignol & Yoyo!\",\"image\":\"\",\"credit\":\"\",\"link\":\"https:\\\/\\\/www.facebook.com\\\/profile.php?id=61585723845101\"},{\"id\":15,\"name\":\"Weekly Market\",\"type\":\"evenements-locaux-197\",\"category\":\"markets-fairs\",\"label\":\"Du 07\\\/11\\\/2026 \\u00e0 08:30 au 07\\\/11\\\/2026 \\u00e0 23:59\",\"start\":\"2026-11-07\",\"end\":\"2026-11-07\",\"start_time\":\"08:30\",\"end_time\":\"\",\"open_start\":false,\"city\":\"71700 Tournus\",\"onsite\":false,\"spot\":\"\",\"registration\":false,\"description\":\"Every Saturday morning, find the non-sedentary traders in the streets of Tournus. A large, typical market where you can buy food and other items. Fruit and vegetables, cheeses, charcuterie, poultry, as well as clothing, shoes...\",\"image\":\"https:\\\/\\\/decibelles-data.media.tourinsoft.eu\\\/upload\\\/marche-4x6.jpg\",\"credit\":\"\\u00a9ot-am\\u00e9lie\",\"link\":\"https:\\\/\\\/tournus.fr\\\/marche-hebdomadaire-du-samedi-matin\"},{\"id\":24,\"name\":\"French Second Division Powerchair Football Championship (D2)\",\"type\":\"evenements-locaux-197\",\"category\":\"sports-hiking\",\"label\":\"Du 07\\\/11\\\/2026 \\u00e0 09:30 au 07\\\/11\\\/2026 \\u00e0 23:59\",\"start\":\"2026-11-07\",\"end\":\"2026-11-07\",\"start_time\":\"09:30\",\"end_time\":\"\",\"open_start\":false,\"city\":\"01000 Bourg-en-Bresse\",\"onsite\":false,\"spot\":\"\",\"registration\":false,\"description\":\"French Powerchair Football Championship D2 - Come support Bresse handisport at home!\",\"image\":\"\",\"credit\":\"\",\"link\":\"\"},{\"id\":70,\"name\":\"Board Game Day\",\"type\":\"evenements-locaux-197\",\"category\":\"local-events\",\"label\":\"Du 07\\\/11\\\/2026 \\u00e0 10:00 au 07\\\/11\\\/2026 \\u00e0 23:59\",\"start\":\"2026-11-07\",\"end\":\"2026-11-07\",\"start_time\":\"10:00\",\"end_time\":\"\",\"open_start\":false,\"city\":\"01380 B\\u00e2g\\u00e9-Dommartin\",\"onsite\":false,\"spot\":\"\",\"registration\":false,\"description\":\"A friendly get-together around board games, with drinks and food available on site.\",\"image\":\"\",\"credit\":\"\",\"link\":\"\"},{\"id\":14,\"name\":\"Activities at the media library: the show \\\"Familiarities\\\"\",\"type\":\"evenements-locaux-197\",\"category\":\"shows-cinema\",\"label\":\"Du 07\\\/11\\\/2026 \\u00e0 17:00 au 07\\\/11\\\/2026 \\u00e0 23:59\",\"start\":\"2026-11-07\",\"end\":\"2026-11-07\",\"start_time\":\"17:00\",\"end_time\":\"\",\"open_start\":false,\"city\":\"71700 Tournus\",\"onsite\":false,\"spot\":\"\",\"registration\":false,\"description\":\"A theatrical tale that awakens personal memories in each of us. This show, performed by actor Pascal Carr\\u00e9, also speaks to us about our attachment to family photos and the way they bring up very particular emotions. Familiarities is a production by Les yeux bavards.\\nIn partnership with the intermunicipal social center.\\nFree entry - No registration required, subject to availability - From 8 years old - Capacity: 60 people\",\"image\":\"\",\"credit\":\"\",\"link\":\"\"},{\"id\":8,\"name\":\"Show \\\"Behind the Door\\\"\",\"type\":\"evenements-locaux-197\",\"category\":\"shows-cinema\",\"label\":\"Du 07\\\/11\\\/2026 \\u00e0 19:30 au 07\\\/11\\\/2026 \\u00e0 23:59\",\"start\":\"2026-11-07\",\"end\":\"2026-11-07\",\"start_time\":\"19:30\",\"end_time\":\"\",\"open_start\":false,\"city\":\"71580 Frontenaud\",\"onsite\":false,\"spot\":\"\",\"registration\":false,\"description\":\"A joyful, bold and informative show, based on moments of life gathered over the years by two Neztoiles, fairy-like characters who work in palliative care. Highly interactive and musical, the Unam and Belle Lurette show takes the audience on a deep yet light and colourful inner journey. They invite spectators on an astonishing journey that encourages everyone to reflect on life, on their own life, through an intimate dialogue with the audience. They move from confidences to true stories and may leave an indelible mark on the hearts of the spectators. This show also helps demystify advance directives and raise public awareness on this topic.\\n\\nThe Neztoiles offer an innovative approach to support in places of suffering, a wonderful form of caring art.\",\"image\":\"\",\"credit\":\"\",\"link\":\"https:\\\/\\\/www.helloasso.com\\\/associations\\\/safrasens\\\/evenements\\\/spectacle-derriere-la-porte\"},{\"id\":7,\"name\":\"Theatre evening\",\"type\":\"evenements-locaux-197\",\"category\":\"shows-cinema\",\"label\":\"Du 07\\\/11\\\/2026 \\u00e0 20:30 au 07\\\/11\\\/2026 \\u00e0 23:59\",\"start\":\"2026-11-07\",\"end\":\"2026-11-07\",\"start_time\":\"20:30\",\"end_time\":\"\",\"open_start\":false,\"city\":\"39320 Val Suran\",\"onsite\":false,\"spot\":\"\",\"registration\":false,\"description\":\"A 3-act comedy lasting 1 hour 30 minutes at the village hall in Saint Julien at 8:30 pm: Saturday 17 October, Friday 23 October, Saturday 24 October and Saturday 7 November\\n\\nReservations possible by phone.\\n\\n\\\"The wedding was supposed to be perfect... But nothing will go as planned! A crazy mother-in-law, an eccentric municipal employee... poor Mayor! You will never see weddings the same way again!\\\"\",\"image\":\"\",\"credit\":\"\",\"link\":\"\"},{\"id\":68,\"name\":\"Jean Gloute de Braga at the Galpon\",\"type\":\"evenements-locaux-197\",\"category\":\"shows-cinema\",\"label\":\"Du 07\\\/11\\\/2026 \\u00e0 21:00 au 07\\\/11\\\/2026 \\u00e0 23:59\",\"start\":\"2026-11-07\",\"end\":\"2026-11-07\",\"start_time\":\"21:00\",\"end_time\":\"\",\"open_start\":false,\"city\":\"71700 Tournus\",\"onsite\":false,\"spot\":\"\",\"registration\":false,\"description\":\"A vocal performance without instruments, where overtone singing, beatboxing, and movement explore the possibilities of the body as the only \\\"machine.\\\" Through his texts and those of some of his inspirations (Boby Lapointe, Boris Vian, Pierre Dac, Alain Damasio), Jean Gloute de Braga musically questions what brings us together more than what divides us. Between rap, sound poetry, and breath, he reactivates a rhythmic, funny, committed, and collective form of speech.\",\"image\":\"\",\"credit\":\"\",\"link\":\"https:\\\/\\\/legalpon.com\\\/event\\\/content\\\/\"},{\"id\":61,\"name\":\"Zangbeto at the Galpon\",\"type\":\"evenements-locaux-197\",\"category\":\"concerts-music-festivals\",\"label\":\"Du 12\\\/11\\\/2026 \\u00e0 20:00 au 12\\\/11\\\/2026 \\u00e0 23:59\",\"start\":\"2026-11-12\",\"end\":\"2026-11-12\",\"start_time\":\"20:00\",\"end_time\":\"\",\"open_start\":false,\"city\":\"71700 Tournus\",\"onsite\":false,\"spot\":\"\",\"registration\":false,\"description\":\"The Zangbeto group returns to the Galpon to present its new album V\\u00f4, \\\"freedom\\\" in the Ewe language. It was during the Togoville Jazz Festival, three years ago, that these exceptionally talented musicians first met. Over two years of adventure, three tours and a first album, Zangbeto has built a music shaped by the path travelled: music of transmission, dialogue and lived freedom, uniquely blending contemporary jazz, African grooves and Togolese musical traditions. A captivating musical experience and a sound journey that transcends cultural boundaries.\",\"image\":\"https:\\\/\\\/decibelles-data.media.tourinsoft.eu\\\/upload\\\/galpon-2.png\",\"credit\":\"@gourlier\",\"link\":\"\"},{\"id\":52,\"name\":\"Aperitif concert\",\"type\":\"evenements-locaux-197\",\"category\":\"concerts-music-festivals\",\"label\":\"Du 13\\\/11\\\/2026 \\u00e0 19:30 au 13\\\/11\\\/2026 \\u00e0 23:59\",\"start\":\"2026-11-13\",\"end\":\"2026-11-13\",\"start_time\":\"19:30\",\"end_time\":\"\",\"open_start\":false,\"city\":\"01570 Manziat\",\"onsite\":false,\"spot\":\"\",\"registration\":false,\"description\":\"Come listen to the guest band of the evening while enjoying charcuterie and cheese boards around a high table. A festive and warm atmosphere guaranteed!\",\"image\":\"\",\"credit\":\"\",\"link\":\"\"},{\"id\":62,\"name\":\"Musical, dance and eclectic show\",\"type\":\"evenements-locaux-197\",\"category\":\"shows-cinema\",\"label\":\"Du 13\\\/11\\\/2026 \\u00e0 20:30 au 13\\\/11\\\/2026 \\u00e0 23:59\",\"start\":\"2026-11-13\",\"end\":\"2026-11-13\",\"start_time\":\"20:30\",\"end_time\":\"\",\"open_start\":false,\"city\":\"39160 Saint-Amour\",\"onsite\":false,\"spot\":\"\",\"registration\":false,\"description\":\"\\\"Everything the swallows said\\\" is an intimate and eclectic musical and dance performance. It features a viola, a guitar, a singer, a singer, a mandolin, a tampura, a dancer: a duo. Two sensitive and sincere artists who take their audience on a journey through contrasting aesthetics, from poetic French song to Indian classical music, including Argentine traditional music, flamenco, medieval polyphony and minimalist music. Their itinerary is also emotional, a journey that gives a place to deep feelings as well as shared joy. For the pleasure of bringing little-known repertoires to life, with humor, and the airy perspective of a swallow.\",\"image\":\"\",\"credit\":\"\",\"link\":\"http:\\\/\\\/www.lalunealenvers.com\\\/\"},{\"id\":37,\"name\":\"Lego Expo B\\u00e2g\\u00e9-Dommartin in Bricks\",\"type\":\"evenements-locaux-197\",\"category\":\"exhibitions\",\"label\":\"Du 14\\\/11\\\/2026 au 15\\\/11\\\/2026 \\u00e0 23:59\",\"start\":\"2026-11-14\",\"end\":\"2026-11-15\",\"start_time\":\"\",\"end_time\":\"\",\"open_start\":false,\"city\":\"01380 B\\u00e2g\\u00e9-Dommartin\",\"onsite\":false,\"spot\":\"\",\"registration\":false,\"description\":\"With Novabrick, explore a world of creativity and LEGO\\u00ae inspiration! Come and share the love of building, creativity and inspiration that LEGO\\u00ae brings to everyone.\",\"image\":\"\",\"credit\":\"\",\"link\":\"\"},{\"id\":4,\"name\":\"La sarrasine concert\",\"type\":\"evenements-locaux-197\",\"category\":\"concerts-music-festivals\",\"label\":\"Du 14\\\/11\\\/2026 \\u00e0 15:30 au 14\\\/11\\\/2026 \\u00e0 23:59\",\"start\":\"2026-11-14\",\"end\":\"2026-11-14\",\"start_time\":\"15:30\",\"end_time\":\"\",\"open_start\":false,\"city\":\"01190 Pont-de-Vaux\",\"onsite\":false,\"spot\":\"\",\"registration\":false,\"description\":\"Accompanied by the Folkdanse group for the first part, second part unknown.\",\"image\":\"\",\"credit\":\"\",\"link\":\"\"},{\"id\":46,\"name\":\"Craft Market\",\"type\":\"evenements-locaux-197\",\"category\":\"markets-fairs\",\"label\":\"Du 15\\\/11\\\/2026 au 15\\\/11\\\/2026 \\u00e0 23:59\",\"start\":\"2026-11-15\",\"end\":\"2026-11-15\",\"start_time\":\"\",\"end_time\":\"\",\"open_start\":false,\"city\":\"71700 Boyer\",\"onsite\":false,\"spot\":\"\",\"registration\":false,\"description\":\"About twenty artisans. Refreshments. Waffle sales from 2 p.m. Raffle with your free entry ticket. Draw at 5:30 p.m.\",\"image\":\"\",\"credit\":\"\",\"link\":\"\"},{\"id\":35,\"name\":\"Craft market\",\"type\":\"evenements-locaux-197\",\"category\":\"markets-fairs\",\"label\":\"Du 15\\\/11\\\/2026 au 15\\\/11\\\/2026 \\u00e0 23:59\",\"start\":\"2026-11-15\",\"end\":\"2026-11-15\",\"start_time\":\"\",\"end_time\":\"\",\"open_start\":false,\"city\":\"71700 Boyer\",\"onsite\":false,\"spot\":\"\",\"registration\":false,\"description\":\"23 exhibitors\\nrefreshments - waffle sales \\nraffle: 2 bottles of cr\\u00e9mant, 2 bottles of aligot\\u00e9 + prizes offered by exhibitors; draw at 6:00 pm\",\"image\":\"\",\"credit\":\"\",\"link\":\"\"},{\"id\":36,\"name\":\"The Sunday Morning Market\",\"type\":\"evenements-locaux-197\",\"category\":\"markets-fairs\",\"label\":\"Du 15\\\/11\\\/2026 \\u00e0 08:30 au 15\\\/11\\\/2026 \\u00e0 23:59\",\"start\":\"2026-11-15\",\"end\":\"2026-11-15\",\"start_time\":\"08:30\",\"end_time\":\"\",\"open_start\":false,\"city\":\"01851 Marboz\",\"onsite\":false,\"spot\":\"\",\"registration\":false,\"description\":\"Meet local food traders and artisans in the village of Marboz.\",\"image\":\"\",\"credit\":\"\",\"link\":\"https:\\\/\\\/marboz.grandbourg.fr\\\/\"},{\"id\":51,\"name\":\"Festive musical afternoon\",\"type\":\"evenements-locaux-197\",\"category\":\"concerts-music-festivals\",\"label\":\"Du 15\\\/11\\\/2026 \\u00e0 15:00 au 15\\\/11\\\/2026 \\u00e0 23:59\",\"start\":\"2026-11-15\",\"end\":\"2026-11-15\",\"start_time\":\"15:00\",\"end_time\":\"\",\"open_start\":false,\"city\":\"01660 Chaveyriat\",\"onsite\":false,\"spot\":\"\",\"registration\":false,\"description\":\"Festive musical afternoon. 1st part Accordion Club of Bourg en Bresse, 2nd part local singers.\",\"image\":\"\",\"credit\":\"\",\"link\":\"\"},{\"id\":28,\"name\":\"Musical show \\\"Aux puces superphoniques\\\"\",\"type\":\"evenements-locaux-197\",\"category\":\"shows-cinema\",\"label\":\"Du 15\\\/11\\\/2026 \\u00e0 15:00 au 15\\\/11\\\/2026 \\u00e0 23:59\",\"start\":\"2026-11-15\",\"end\":\"2026-11-15\",\"start_time\":\"15:00\",\"end_time\":\"\",\"open_start\":false,\"city\":\"01190 Saint-B\\u00e9nigne\",\"onsite\":false,\"spot\":\"\",\"registration\":false,\"description\":\"Sound mechanisms, gears, inventive instrument making and various objects come to life under the fingers of the two musicians of the Bric \\u00e0 Brac Orchestra. With humor about objects and a love of words, they joyfully take us along in their superphonic revolution.\",\"image\":\"\",\"credit\":\"\",\"link\":\"\"},{\"id\":13,\"name\":\"Travelling cinema\",\"type\":\"evenements-locaux-197\",\"category\":\"shows-cinema\",\"label\":\"Du 17\\\/11\\\/2026 \\u00e0 20:30 au 17\\\/11\\\/2026 \\u00e0 23:59\",\"start\":\"2026-11-17\",\"end\":\"2026-11-17\",\"start_time\":\"20:30\",\"end_time\":\"\",\"open_start\":false,\"city\":\"39160 Saint-Amour\",\"onsite\":false,\"spot\":\"\",\"registration\":false,\"description\":\"The entertainment committee & the mobile screen presents its programme\\n- Our salvation\",\"image\":\"\",\"credit\":\"\",\"link\":\"\"},{\"id\":53,\"name\":\"Wood club: the workshop for budding young sculptors\",\"type\":\"evenements-locaux-197\",\"category\":\"en-famille\",\"label\":\"Du 18\\\/11\\\/2026 \\u00e0 09:00 au 18\\\/11\\\/2026 \\u00e0 23:59\",\"start\":\"2026-11-18\",\"end\":\"2026-11-18\",\"start_time\":\"09:00\",\"end_time\":\"\",\"open_start\":false,\"city\":\"71290 Cuisery\",\"onsite\":false,\"spot\":\"\",\"registration\":false,\"description\":\"The wood club, a workshop for young creative and curious minds!\\n\\nAre you between 9 and 15 years old? Do you enjoy making things with your hands and want to discover new things?\\nThen join the wood club at Centre Eden! Every month, come take part in a unique workshop where you'll learn to work with wood in all its forms.\\n\\nOn the agenda: discover and handle hand tools to carve wooden utensils; shape simple and fun objects; give free rein to your imagination by transforming the material!\\n\\nMeet Samuel from Centre Eden. Sign up quickly and come discover the passion for wood!\\nSession from 9:00 a.m. to 11:30 a.m. for 9-11 year-olds.\\nSession from 2:00 p.m. to 4:30 p.m. for 12-15 year-olds.\",\"image\":\"\",\"credit\":\"\",\"link\":\"https:\\\/\\\/www.instagram.com\\\/centre.eden71\\\/\"},{\"id\":64,\"name\":\"Family show\",\"type\":\"evenements-locaux-197\",\"category\":\"shows-cinema\",\"label\":\"Du 20\\\/11\\\/2026 \\u00e0 15:00 au 20\\\/11\\\/2026 \\u00e0 23:59\",\"start\":\"2026-11-20\",\"end\":\"2026-11-20\",\"start_time\":\"15:00\",\"end_time\":\"\",\"open_start\":false,\"city\":\"01190 Saint-\\u00c9tienne-sur-Reyssouze\",\"onsite\":false,\"spot\":\"\",\"registration\":false,\"description\":\"Stories, magic and a snack to share as a family in complete simplicity.\",\"image\":\"\",\"credit\":\"\",\"link\":\"\"},{\"id\":66,\"name\":\"Erwan Pinard in concert\",\"type\":\"evenements-locaux-197\",\"category\":\"concerts-music-festivals\",\"label\":\"Du 20\\\/11\\\/2026 \\u00e0 21:00 au 20\\\/11\\\/2026 \\u00e0 23:59\",\"start\":\"2026-11-20\",\"end\":\"2026-11-20\",\"start_time\":\"21:00\",\"end_time\":\"\",\"open_start\":false,\"city\":\"71240 Gigny-sur-Sa\\u00f4ne\",\"onsite\":false,\"spot\":\"\",\"registration\":false,\"description\":\"Building on his two previous albums: Planned Obsolescence and The Unutterable (thirteen sad songs), Erwan Pinard digs deeper into the grooves of romantic relationships, or rather what remains of them, while joyfully dynamiting the quirks of our contemporary lifestyles.\\nBetween dark and burlesque, lucidity and absurdity, it is first and foremost on stage that audiences will discover his latest unreleased songs in a new set with arrangements and staging as explosive as ever.\\n\\nMore than 400 concerts as a trio or solo in France, Belgium, Switzerland and Quebec, sometimes sharing the stage with artists including: Arno, Miossec, Barcella, Les Fatals Picards, Lo\\u00efc Lantoine, Ange, Nour, Cali, Pigalle, Ga\\u00ebtan Roussel, Didier Wampas, Yves Jamait, Batlik, Mellismell, Nicolas Jules, Bonbon Vaudou, Bancal Ch\\u00e9ri, Rachid Taha, L\\u00e9opoldine HH, Les ogres de Barback, David Lafore, Pierre Perret, Sarclo, Yoanna, Keith Kouna \\u2026.\\n\\nCatering without mandatory reservation: charcuterie board (or vegetarian terrine) \\\/ cheese for 2 people at \\u20ac12.\\n\\nShow with pay-what-you-want pricing...and with awareness...does not mean free...\",\"image\":\"\",\"credit\":\"\",\"link\":\"https:\\\/\\\/morarderic.wixsite.com\\\/fartfelu-fartfelien\\\/spectacles\"},{\"id\":33,\"name\":\"Les enchan'T\",\"type\":\"evenements-locaux-197\",\"category\":\"shows-cinema\",\"label\":\"Du 21\\\/11\\\/2026 \\u00e0 20:00 au 21\\\/11\\\/2026 \\u00e0 23:59\",\"start\":\"2026-11-21\",\"end\":\"2026-11-21\",\"start_time\":\"20:00\",\"end_time\":\"\",\"open_start\":false,\"city\":\"01750 Replonges\",\"onsite\":false,\"spot\":\"\",\"registration\":false,\"description\":\"Singing show.\",\"image\":\"\",\"credit\":\"\",\"link\":\"\"},{\"id\":67,\"name\":\"Play \\\"Votre maman\\\"\",\"type\":\"evenements-locaux-197\",\"category\":\"shows-cinema\",\"label\":\"Du 21\\\/11\\\/2026 \\u00e0 20:30 au 21\\\/11\\\/2026 \\u00e0 23:59\",\"start\":\"2026-11-21\",\"end\":\"2026-11-21\",\"start_time\":\"20:30\",\"end_time\":\"\",\"open_start\":false,\"city\":\"71290 Cuisery\",\"onsite\":false,\"spot\":\"\",\"registration\":false,\"description\":\"\\u201cFor the laughter and humor omnipresent right through to the final denouement. It is a jubilant, striking, brilliant work, a play that heals, between risqu\\u00e9 anecdotes and the memory of the Shoah, a work that makes people happy, that does them good because it triumphs over all negative feelings\\nTo create Beauty, goodness\\nFor the shock and the emotion\\nFor its links with our present\\nFor its links with the past\\u201d.\\n\\nAuthor: Jean-Claude Grumberg\\nDirected by: Vincent Dufieux\\nPlay for ages 14 and up\\nStarring Jordan Voland, Ma\\u00e9va Claire Voland, Fran\\u00e7oise Geny and, alternating with Vincent Duffieux, Christian Cretin.\",\"image\":\"\",\"credit\":\"\",\"link\":\"https:\\\/\\\/www.cuisery.fr\\\/events\\\/event\\\/\"},{\"id\":9,\"name\":\"First waves at Galpon\",\"type\":\"evenements-locaux-197\",\"category\":\"concerts-music-festivals\",\"label\":\"Du 21\\\/11\\\/2026 \\u00e0 21:00 au 21\\\/11\\\/2026 \\u00e0 23:59\",\"start\":\"2026-11-21\",\"end\":\"2026-11-21\",\"start_time\":\"21:00\",\"end_time\":\"\",\"open_start\":false,\"city\":\"71700 Tournus\",\"onsite\":false,\"spot\":\"\",\"registration\":false,\"description\":\"My boat and I, today, love each other very much. But that hasn't always been the case. For a long time, we ignored each other. There were even times when we downright hated each other. One day we said: hey, hey, hey, it might be a good idea to organise a little walk to tell people how we got used to each other, how we finally learned to sail together... And here we are. So, shall we board?\\nWith First waves, Pagaill tells the story of a journey aboard a craft that we learn to love. With the help of their sidekick KAA, they put on a guided tour to talk about transidentity to their parents, neighbours, siblings... The show is musical, accompanied by a moving rap in which the right words were sought to tell their story. First waves is above all a generous meeting full of sincerity, poetry and laughter.\",\"image\":\"\",\"credit\":\"\",\"link\":\"https:\\\/\\\/legalpon.com\\\/event\\\/abysskiss-orchestre-de-poche-retrofuturiste\\\/\"},{\"id\":47,\"name\":\"Choir gathering\",\"type\":\"evenements-locaux-197\",\"category\":\"concerts-music-festivals\",\"label\":\"Du 22\\\/11\\\/2026 \\u00e0 15:00 au 22\\\/11\\\/2026 \\u00e0 23:59\",\"start\":\"2026-11-22\",\"end\":\"2026-11-22\",\"start_time\":\"15:00\",\"end_time\":\"\",\"open_start\":false,\"city\":\"01750 Replonges\",\"onsite\":false,\"spot\":\"\",\"registration\":false,\"description\":\"Several choirs present their repertoire.\",\"image\":\"\",\"credit\":\"\",\"link\":\"http:\\\/\\\/www.blog4ever.com\\\/\"},{\"id\":71,\"name\":\"Tatanka at the Galpon\",\"type\":\"evenements-locaux-197\",\"category\":\"concerts-music-festivals\",\"label\":\"Du 22\\\/11\\\/2026 \\u00e0 18:00 au 22\\\/11\\\/2026 \\u00e0 23:59\",\"start\":\"2026-11-22\",\"end\":\"2026-11-22\",\"start_time\":\"18:00\",\"end_time\":\"\",\"open_start\":false,\"city\":\"71700 Tournus\",\"onsite\":false,\"spot\":\"\",\"registration\":false,\"description\":\"The Tatanka group invites you to celebrate the release of its new album with an exceptional concert, where jazz blends with Armenian musical colors and traditions.\\nJazz improvisations, mesmerizing rhythms, and Armenian instruments come together to create a unique, vibrant, and surprising musical world.\",\"image\":\"\",\"credit\":\"\",\"link\":\"https:\\\/\\\/legalpon.com\\\/event\\\/abysskiss-orchestre-de-poche-retrofuturiste\\\/\"},{\"id\":38,\"name\":\"World Video Game Day\",\"type\":\"evenements-locaux-197\",\"category\":\"local-events\",\"label\":\"Du 25\\\/11\\\/2026 \\u00e0 09:30 au 25\\\/11\\\/2026 \\u00e0 23:59\",\"start\":\"2026-11-25\",\"end\":\"2026-11-25\",\"start_time\":\"09:30\",\"end_time\":\"\",\"open_start\":false,\"city\":\"39160 Saint-Amour\",\"onsite\":false,\"spot\":\"\",\"registration\":false,\"description\":\"The media library becomes a gaming zone for a day!\\nCome and test consoles from all eras - Workshops from 2 p.m....\\nDuring the media library opening hours. Open to subscribers and non-subscribers, free of charge.\",\"image\":\"\",\"credit\":\"\",\"link\":\"https:\\\/\\\/www.facebook.com\\\/PorteduJuraCommunautedeCommunes\"},{\"id\":20,\"name\":\"Narrative video game creation workshop\",\"type\":\"evenements-locaux-197\",\"category\":\"flea-markets-garage-sales\",\"label\":\"Du 25\\\/11\\\/2026 \\u00e0 14:00 au 25\\\/11\\\/2026 \\u00e0 23:59\",\"start\":\"2026-11-25\",\"end\":\"2026-11-25\",\"start_time\":\"14:00\",\"end_time\":\"\",\"open_start\":false,\"city\":\"39160 Saint-Amour\",\"onsite\":false,\"spot\":\"\",\"registration\":false,\"description\":\"With Ga\\u00ebtan, come and create a narrative video game inspired by choose-your-own-adventure books. Two time slots: 2:00\\u20133:00 pm or 3:00\\u20134:00 pm, for ages 12 and up.\\nOpen to subscribers and non-subscribers. Free. Registration required by email, phone, or via the link: https:\\\/\\\/xoyondo.com\\\/dp\\\/mvd2it6fca7y3qb\",\"image\":\"https:\\\/\\\/decibelles-data.media.tourinsoft.eu\\\/upload\\\/Atelier-creation-jeu-video-narratif.jpg\",\"credit\":\"magnific\",\"link\":\"https:\\\/\\\/www.facebook.com\\\/PorteduJuraCommunautedeCommunes\"},{\"id\":18,\"name\":\"Impro Sur Sa\\u00f4ne\",\"type\":\"evenements-locaux-197\",\"category\":\"shows-cinema\",\"label\":\"Du 27\\\/11\\\/2026 au 27\\\/11\\\/2026 \\u00e0 23:59\",\"start\":\"2026-11-27\",\"end\":\"2026-11-27\",\"start_time\":\"\",\"end_time\":\"\",\"open_start\":false,\"city\":\"01190 Saint-B\\u00e9nigne\",\"onsite\":false,\"spot\":\"\",\"registration\":false,\"description\":\"For this theatrical improvisation festival, several improvisation troupes (les Oeufs, les Improvix, la Ligote, les Voleurs de sourire and Bresse Impro) come together to present several shows over several days.\",\"image\":\"\",\"credit\":\"\",\"link\":\"\"},{\"id\":26,\"name\":\"Activities at the media library: Baby readers for toddlers\",\"type\":\"evenements-locaux-197\",\"category\":\"family-friendly\",\"label\":\"Du 27\\\/11\\\/2026 \\u00e0 10:00 au 27\\\/11\\\/2026 \\u00e0 23:59\",\"start\":\"2026-11-27\",\"end\":\"2026-11-27\",\"start_time\":\"10:00\",\"end_time\":\"\",\"open_start\":false,\"city\":\"71700 Tournus\",\"onsite\":false,\"spot\":\"\",\"registration\":false,\"description\":\"Soft words, nursery rhymes for little ears.\\nFree entry - No registration required, subject to available places \\u2013 6 months to 3 years old\",\"image\":\"\",\"credit\":\"\",\"link\":\"\"},{\"id\":17,\"name\":\"\\\"Super Eden\\\" Ello Papillon in concert\",\"type\":\"evenements-locaux-197\",\"category\":\"concerts-music-festivals\",\"label\":\"Du 27\\\/11\\\/2026 \\u00e0 20:00 au 27\\\/11\\\/2026 \\u00e0 23:59\",\"start\":\"2026-11-27\",\"end\":\"2026-11-27\",\"start_time\":\"20:00\",\"end_time\":\"\",\"open_start\":false,\"city\":\"71240 Gigny-sur-Sa\\u00f4ne\",\"onsite\":false,\"spot\":\"\",\"registration\":false,\"description\":\"The musical universe is oriented towards electro-pop songs. Each track is a canvas with sound textures often inspired by the 1980s, featuring keyboards, dreamy guitar and looper. Ello's sensitive and warm voice is carried by melodies and enchanting backing vocals that\\nmake our souls dance.\\nElodie Bernigal (vocals, keyboards, guitar)\\nPhillip Meade (bass, guitar)\\nWith the support of La Cave \\u00e0 Musique (M\\u00e2con -71)\\nFood available without reservation required: Charcuterie board (or vegetarian terrine) and cheese for 2 people for \\u20ac12.\",\"image\":\"\",\"credit\":\"\",\"link\":\"https:\\\/\\\/morarderic.wixsite.com\\\/fartfelu-fartfelien\\\/spectacles\"},{\"id\":55,\"name\":\"Vin sur Vin Fair\",\"type\":\"evenements-locaux-197\",\"category\":\"markets-fairs\",\"label\":\"Du 28\\\/11\\\/2026 au 29\\\/11\\\/2026 \\u00e0 23:59\",\"start\":\"2026-11-28\",\"end\":\"2026-11-29\",\"start_time\":\"\",\"end_time\":\"\",\"open_start\":false,\"city\":\"71700 Tournus\",\"onsite\":false,\"spot\":\"\",\"registration\":false,\"description\":\"An unmissable autumn event, the VIN SUR VIN fair welcomes 25 independent winemakers representing the finest French appellations. Each has been selected by the association's members according to taste, price, and environmental standards (80% are certified organic). Every year, at least 3 new estates are added to the selection. On site, gourmet platters of charcuterie, cheeses, and oysters accompany your tastings. A raffle offers the chance to win many bottles from the fair.\",\"image\":\"\",\"credit\":\"\",\"link\":\"http:\\\/\\\/www.vinsurvin-tournus.com\\\/\"},{\"id\":49,\"name\":\"The Jeff Panacloc Company\",\"type\":\"evenements-locaux-197\",\"category\":\"shows-cinema\",\"label\":\"Du 28\\\/11\\\/2026 \\u00e0 20:00 au 28\\\/11\\\/2026 \\u00e0 23:59\",\"start\":\"2026-11-28\",\"end\":\"2026-11-28\",\"start_time\":\"20:00\",\"end_time\":\"\",\"open_start\":false,\"city\":\"71000 M\\u00e2con\",\"onsite\":false,\"spot\":\"\",\"registration\":false,\"description\":\"The Jeff Panacloc Company. Get ready to step through the doors of Jeff Panacloc\\u2019s secret office and dive into a world where humor flirts with the absurd. In \\u201cThe Jeff Panacloc Company,\\u201d each unhinged character promises you a wild and unforgettable evening. Join this fantastic troupe and enjoy a unique immersive experience that will leave you transformed and uplifted.\",\"image\":\"https:\\\/\\\/decibelles-data.media.tourinsoft.eu\\\/upload\\\/Jeff-Panacloc-Company-2025-affiche-40x60-generique-draft1.jpg\",\"credit\":\"production\",\"link\":\"https:\\\/\\\/www.fnacspectacles.com\\\/event\\\/the-jeff-panacloc-company-tournee-le-spot-macon-19339121\\\/?srsltid=AfmBOor_jlKHNnXInE-JEaLVWiO5hzuaDcT4Qb508rLq0949BqeN_8gk\"}];\n    var CATEGORIES = {\"markets-fairs\":{\"key\":\"markets-fairs\",\"label\":\"Markets & fairs\",\"color\":\"#ef4444\",\"count\":33},\"concerts-music-festivals\":{\"key\":\"concerts-music-festivals\",\"label\":\"Concerts, music & festivals\",\"color\":\"#3b82f6\",\"count\":10},\"shows-cinema\":{\"key\":\"shows-cinema\",\"label\":\"Shows & cinema\",\"color\":\"#10b981\",\"count\":13},\"sport-hiking\":{\"key\":\"sport-hiking\",\"label\":\"Sport & hiking\",\"color\":\"#f59e0b\",\"count\":1},\"family-friendly\":{\"key\":\"family-friendly\",\"label\":\"Family-friendly\",\"color\":\"#a855f7\",\"count\":2},\"spectacles-cinema\":{\"key\":\"spectacles-cinema\",\"label\":\"Spectacles & cin\\u00e9ma\",\"color\":\"#0891b2\",\"count\":1},\"flea-markets-garage-sales\":{\"key\":\"flea-markets-garage-sales\",\"label\":\"Flea markets & garage sales\",\"color\":\"#db2777\",\"count\":1},\"family\":{\"key\":\"family\",\"label\":\"Family\",\"color\":\"#65a30d\",\"count\":2},\"sports-hiking\":{\"key\":\"sports-hiking\",\"label\":\"Sports & hiking\",\"color\":\"#ea580c\",\"count\":1},\"exhibitions\":{\"key\":\"exhibitions\",\"label\":\"Exhibitions\",\"color\":\"#6366f1\",\"count\":4},\"local-events\":{\"key\":\"local-events\",\"label\":\"Local events\",\"color\":\"#ef4444\",\"count\":2},\"en-famille\":{\"key\":\"en-famille\",\"label\":\"En famille\",\"color\":\"#3b82f6\",\"count\":1},\"for-families\":{\"key\":\"for-families\",\"label\":\"For families\",\"color\":\"#10b981\",\"count\":2}};\n    var TODAY = \"2026-11-04\";\n    \/\/ Textes et format des dates dans la langue de la page (includes\/i18n.php)\n    var T = {\"blog_read_more\":\"Read the article\",\"blog_empty\":\"No articles yet.\",\"blog_newer\":\"Newer articles\",\"blog_older\":\"Older articles\",\"blog_label\":\"Articles\",\"hero_title\":\"Things to discover nearby\",\"hero_text\":\"Villages, beaches, walks, good addresses and experiences selected around your stay.\",\"around\":\"Around\",\"search_placeholder\":\"Search for a place, an activity, a village\\u2026\",\"search\":\"Search\",\"max_distance\":\"Maximum distance\",\"all\":\"All\",\"prev_categories\":\"Previous categories\",\"next_categories\":\"Next categories\",\"categories\":\"Categories\",\"display\":\"Display\",\"list\":\"List\",\"map\":\"Map\",\"close\":\"Close\",\"featured\":\"Featured\",\"discover\":\"Discover\",\"idea\":\"idea\",\"ideas\":\"ideas\",\"around_you\":\"around you\",\"no_result\":\"No results\",\"no_result_hint\":\"Try another search, category or distance.\",\"pagination\":\"Ideas pagination\",\"prev_page\":\"Previous page\",\"next_page\":\"Next page\",\"ideas_title\":\"Ideas to suit your mood\",\"ideas_sub\":\"Suggestions to plan your perfect stay.\",\"reset_view\":\"Back to the overview\",\"map_hint\":\"Click a marker on the map to show its details here.\",\"official_site\":\"Official website\",\"video\":\"Video\",\"gallery\":\"Gallery\",\"documents\":\"Documents\",\"faq\":\"Frequently asked questions\",\"no_answer\":\"No answer yet.\",\"see_on_maps\":\"View on Google Maps\",\"see_place_on_maps\":\"View the campsite on Google Maps\",\"yes\":\"Yes\",\"no\":\"No\",\"practical_info\":\"Practical information\",\"reviews\":\"reviews\",\"read_more\":\"Read more\",\"prev_review\":\"Previous review\",\"next_review\":\"Next review\",\"prev_item\":\"Previous\",\"next_item\":\"Next\",\"photo_credit\":\"Photo: %s\",\"directions\":\"Directions\",\"read_less\":\"Show less\",\"article_in_this\":\"In this article\",\"article_toc\":\"Article contents\",\"see_original\":\"Automatically translated \\u00b7 See original\",\"see_translation\":\"See translation\",\"stars_out_of_5\":\"%s stars out of 5\",\"owner_reply\":\"Response from the owner\",\"customer\":\"Guest\",\"customer_reviews\":\"Guest reviews\",\"rating_label\":\"Rated %1$s out of 5, %2$s reviews \\u2014 see the reviews\",\"reviews_by\":\"Reviews presented by Elaia\",\"powered_by\":\"Powered by\",\"today\":\"Today\",\"today_lc\":\"today\",\"tomorrow\":\"Tomorrow\",\"until\":\"Until %s\",\"from_to\":\"From %1$s to %2$s\",\"registration\":\"Booking required\",\"full\":\"Full\",\"all_animations\":\"See all activities \\u2192\",\"ago_day\":\"%d day ago\",\"ago_days\":\"%d days ago\",\"ago_week\":\"%d week ago\",\"ago_weeks\":\"%d weeks ago\",\"ago_month\":\"%d month ago\",\"ago_months\":\"%d months ago\",\"ago_year\":\"%d year ago\",\"ago_years\":\"%d years ago\",\"anim_unavailable\":\"The programme is temporarily unavailable\",\"content_unavailable\":\"This content is temporarily unavailable\",\"anim_eyebrow\":\"Enjoy unforgettable moments\",\"anim_title\":\"Activities & events\",\"anim_hero_text\":\"Find all current activities, this week's highlights and upcoming events during your stay.\",\"anim_sections\":\"Page sections\",\"anim_nav_today\":\"Today\",\"anim_nav_week\":\"This week\",\"anim_nav_upcoming\":\"Upcoming\",\"anim_nav_calendar\":\"Calendar\",\"anim_where\":\"Where?\",\"anim_onsite\":\"On site\",\"anim_nearby\":\"Nearby\",\"anim_no_onsite\":\"No on-site activity at the moment\",\"anim_no_nearby\":\"No nearby event at the moment\",\"anim_all_day\":\"All day\",\"anim_at\":\"at %s\",\"anim_see_detail\":\"see details\",\"anim_live\":\"Ongoing\",\"anim_onsite_spot\":\"On site \\u00b7 %s\",\"anim_badge_until\":\"Until\",\"anim_badge_from\":\"From\",\"anim_badge_today\":\"Today\",\"anim_filter_cat\":\"Filter by category\",\"anim_all_f\":\"All\",\"anim_prev_day\":\"Previous day\",\"anim_next_day\":\"Next day\",\"anim_today_title\":\"Today's activities\",\"anim_tomorrow_title\":\"Tomorrow's activities\",\"anim_day_title\":\"Activities on %s\",\"anim_relax_today\":\"A relaxing day today\",\"anim_nothing_day\":\"Nothing planned that day\",\"anim_next_on\":\"Next event on %s.\",\"anim_soon\":\"The programme will be updated soon.\",\"anim_see_day\":\"See that day\",\"anim_prev_acts\":\"Previous activities\",\"anim_next_acts\":\"Next activities\",\"anim_prev_week\":\"Previous week\",\"anim_next_week\":\"Next week\",\"anim_week_title\":\"This week's highlights\",\"anim_next_week_title\":\"Next week\",\"anim_week_of\":\"Week of %s\",\"anim_week_days\":\"Days of the week\",\"anim_today_paren\":\"(today)\",\"anim_activity\":\"%d activity\",\"anim_activities\":\"%d activities\",\"anim_nothing\":\"nothing planned\",\"anim_pick_day\":\"Select another day to see its programme.\",\"anim_sort\":\"Sort events\",\"anim_sort_date\":\"Sort by date\",\"anim_sort_name\":\"Sort by name\",\"anim_upcoming_title\":\"All upcoming events\",\"anim_no_upcoming\":\"No upcoming events\",\"anim_try_cat\":\"Try another category.\",\"anim_more\":\"See more events (%d)\",\"anim_hide_cal\":\"Hide the calendar\",\"anim_show_cal\":\"See the full calendar\",\"anim_cal_title\":\"Monthly calendar\",\"anim_cal_sub\":\"All of the month's events at a glance.\",\"anim_prev_month\":\"Previous month\",\"anim_next_month\":\"Next month\",\"anim_more_info\":\"More information\",\"anim_new_tab\":\"(new tab)\",\"date_locale\":\"en-GB\",\"page_faq\":\"FAQ\",\"page_metadatas\":\"Discover around you\",\"page_animations\":\"Activities and events\",\"page_corpus\":\"Practical information\",\"anim_event\":\"Event\"};\n    function tf(key) { var a = [].slice.call(arguments, 1), i = 0; return T[key].replace(\/%(\\d\\$)?[sd]\/g, function (m, pos) { return pos ? a[parseInt(pos, 10) - 1] : a[i++]; }); }\n    \/\/ Image par d\u00e9faut du chatbot, utilis\u00e9e quand une fiche n'a pas d'image\n    var DEFAULT_IMG = \"https:\\\/\\\/elaia-public.s3.fr-par.scw.cloud\\\/chatbot-defaults\\\/jlA42eQs9EhehOl6gfeCiqESZdsqwOGBtT2tbtXk.png\";\n\n    var app = document.getElementById('ea-app');\n    if (!app) return;\n\n    var TODAY_MAX = 3; \/\/ cartes \u00ab aujourd'hui \u00bb avant \u00ab Voir les autres \u00bb\n    var UPCOMING_STEP = 8;\n\n    var state = {\n      day: TODAY,\n      todayAll: false,\n      week: null,\n      weekDay: TODAY,\n      cat: 'all',\n      scope: 'all', \/\/ all | onsite | nearby\n      sort: 'date',\n      upcomingLimit: UPCOMING_STEP,\n      calendarOpen: false,\n      month: TODAY.slice(0, 7),\n      selectedDay: null\n    };\n\n    \/\/ \u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\n    \/\/ IC\u00d4NES (SVG statiques)\n    \/\/ \u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\n    var ICONS = {\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      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      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      external: '<svg viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\"><path d=\"M14 5h5v5M19 5l-8 8M18 14v5H5V6h5\"\/><\/svg>',\n      sun: '<svg viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\"><circle cx=\"12\" cy=\"12\" r=\"4\"\/><path d=\"M12 2v2M12 20v2M4.9 4.9l1.4 1.4M17.7 17.7l1.4 1.4M2 12h2M20 12h2M4.9 19.1l1.4-1.4M17.7 6.3l1.4-1.4\"\/><\/svg>',\n      pen: '<svg viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\"><path d=\"M9 11l2 2 4-4\"\/><rect x=\"4\" y=\"3\" width=\"16\" height=\"18\" rx=\"2\"\/><path d=\"M8 7h8\"\/><\/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=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linejoin=\"round\"><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      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      tent: '<svg viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"1.8\" stroke-linecap=\"round\" stroke-linejoin=\"round\"><path d=\"M12 4L3 20h18L12 4z\"\/><path d=\"M12 4v16M9 20l3-6 3 6\"\/><\/svg>'\n    };\n\n    \/\/ \u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\n    \/\/ CAT\u00c9GORIES \u2014 pastels harmonieux d\u00e9duits du libell\u00e9\n    \/\/ (le libell\u00e9 est toujours affich\u00e9 : l'info ne passe pas que par la couleur)\n    \/\/ \u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\n    var CAT_STYLES = [\n      [\/enfant|kid|junior\/, '#fff1c9', '#6f5200'],\n      [\/famil\/, '#fdf0d5', '#7a4e00'],\n      [\/bien.?etre|yoga|zen|detente|relax|spa\/, '#e3f1e6', '#24613a'],\n      [\/concert|musique|soiree|dj|bal\\b\/, '#ece6fa', '#4b3a8c'],\n      [\/spectacle|theatre|cinema|cirque|magie\/, '#fbe3e1', '#8f2d27'],\n      [\/sport|rando|velo|course|tournoi|petanque|nautique\/, '#dcefeb', '#1f5f55'],\n      [\/expo|musee|culture|patrimoine|visite\/, '#f3e6ef', '#7a2f5c'],\n      [\/march|brocante|vide.?grenier|artisan|terroir|degust\/, '#e8f0dc', '#3f5a1e'],\n      [\/animation|fete|festiv|atelier|jeu\/, '#fbe7d7', '#8e4214']\n    ];\n\n    function norm(s) {\n      return (s || '').toLowerCase().normalize('NFD').replace(\/[\u0300-\u036f]\/g, '');\n    }\n\n    function catStyle(key) {\n      var hay = norm(key + ' ' + (CATEGORIES[key] ? CATEGORIES[key].label : ''));\n      for (var i = 0; i < CAT_STYLES.length; i++) {\n        if (CAT_STYLES[i][0].test(hay)) return { bg: CAT_STYLES[i][1], fg: CAT_STYLES[i][2] };\n      }\n      return { bg: '#eceee8', fg: '#3c463f' };\n    }\n\n    function applyCat(node, key) {\n      var s = catStyle(key);\n      node.style.setProperty('--ea-cat-bg', s.bg);\n      node.style.setProperty('--ea-cat-fg', s.fg);\n    }\n\n    function catLabel(e) {\n      return CATEGORIES[e.category] ? CATEGORIES[e.category].label : '';\n    }\n\n    \/\/ \u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\n    \/\/ DATES \u2014 cha\u00eenes Y-m-d (pas de d\u00e9calage de fuseau)\n    \/\/ \u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\n    function toDate(ymd) {\n      var p = ymd.split('-');\n      return new Date(+p[0], +p[1] - 1, +p[2], 12);\n    }\n\n    function toYmd(d) {\n      return d.getFullYear() + '-' + String(d.getMonth() + 1).padStart(2, '0') + '-' + String(d.getDate()).padStart(2, '0');\n    }\n\n    function addDays(ymd, n) {\n      var d = toDate(ymd);\n      d.setDate(d.getDate() + n);\n      return toYmd(d);\n    }\n\n    function daysBetween(a, b) {\n      return Math.round((toDate(b) - toDate(a)) \/ 86400000);\n    }\n\n    function weekStart(ymd) {\n      var d = toDate(ymd);\n      d.setDate(d.getDate() - (d.getDay() + 6) % 7);\n      return toYmd(d);\n    }\n\n    function fmt(ymd, opts) {\n      return toDate(ymd).toLocaleDateString(T.date_locale, opts);\n    }\n\n    function ucfirst(s) {\n      return s.charAt(0).toUpperCase() + s.slice(1);\n    }\n\n    function shortDate(ymd) {\n      return fmt(ymd, { day: 'numeric', month: 'short' });\n    }\n\n    function byTime(a, b) {\n      return (a.start_time || '').localeCompare(b.start_time || '') || a.name.localeCompare(b.name, T.date_locale);\n    }\n\n    \/** Filtres globaux : sur place \/ aux alentours + cat\u00e9gorie *\/\n    function visible(e) {\n      if (state.scope === 'onsite' && !e.onsite) return false;\n      if (state.scope === 'nearby' && e.onsite) return false;\n      return state.cat === 'all' || e.category === state.cat;\n    }\n\n    function eventsOn(ymd) {\n      return EVENTS.filter(function(e) {\n        return visible(e) && e.start <= ymd && e.end >= ymd;\n      }).sort(byTime);\n    }\n\n    function eventsBetween(from, to) {\n      return EVENTS.filter(function(e) {\n        return visible(e) && e.start <= to && e.end >= from;\n      });\n    }\n\n    \/** Ligne horaire d'une carte vue depuis un jour donn\u00e9 *\/\n    function timeLabel(e, day) {\n      if (e.start === day && e.start_time) return e.start_time + (e.end_time && e.start === e.end ? ' \u2013 ' + e.end_time : '');\n      if (e.start !== e.end || e.open_start) return tf('until', shortDate(e.end));\n      return T.anim_all_day;\n    }\n\n    \/** Ligne date d'une carte \u00ab \u00e0 venir \u00bb *\/\n    function dateLabel(e) {\n      if (e.open_start) return tf('until', shortDate(e.end));\n      if (e.start !== e.end) return tf('from_to', shortDate(e.start), shortDate(e.end));\n      var d = ucfirst(fmt(e.start, { weekday: 'short', day: 'numeric', month: 'short' }));\n      return d + (e.start_time ? ' \u00b7 ' + e.start_time : '');\n    }\n\n    function fullWhenLabel(e) {\n      var opts = { weekday: 'long', day: 'numeric', month: 'long', year: 'numeric' };\n      if (e.open_start) return tf('until', fmt(e.end, opts));\n      var time = e.start_time ? ' ' + tf('anim_at', e.start_time) : '';\n      if (e.start === e.end) return ucfirst(fmt(e.start, opts)) + time + (e.end_time ? ' \u2013 ' + e.end_time : '');\n      return tf('from_to', fmt(e.start, { day: 'numeric', month: 'long' }) + time, fmt(e.end, opts) + (e.end_time ? ' ' + tf('anim_at', e.end_time) : ''));\n    }\n\n    \/\/ \u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\n    \/\/ DOM\n    \/\/ \u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\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', 'ea-icon');\n      s.setAttribute('aria-hidden', 'true');\n      s.innerHTML = ICONS[name];\n      return s;\n    }\n\n    \/** Image de la fiche \u2192 image par d\u00e9faut du chatbot \u2192 aplat illustr\u00e9 *\/\n    function media(e, cls) {\n      var fallback = function() {\n        var f = el('div', 'ea-card-fallback');\n        f.appendChild(icon('tent'));\n        return f;\n      };\n      if (!e.image && !DEFAULT_IMG) return fallback();\n      var img = el('img', cls);\n      var useDefault = !e.image;\n      img.src = useDefault ? DEFAULT_IMG : e.image;\n      img.alt = e.name;\n      img.loading = 'lazy';\n      img.decoding = 'async';\n      if (useDefault) img.classList.add('ea-img--default');\n      img.onerror = function() {\n        \/\/ Le cr\u00e9dit n'est plus celui de l'image affich\u00e9e\n        var cr = img.parentNode && img.parentNode.querySelector('.ea-credit');\n        if (cr) cr.remove();\n        if (!useDefault && DEFAULT_IMG) {\n          useDefault = true;\n          img.classList.add('ea-img--default');\n          img.src = DEFAULT_IMG;\n        } else if (img.parentNode) {\n          img.replaceWith(fallback());\n        }\n      };\n      return img;\n    }\n\n    \/** Cr\u00e9dit photo en bas \u00e0 droite de l'image (rien sans image propre) *\/\n    function credit(e) {\n      if (!e.image || !e.credit) return null;\n      var txt = \/^(\u00a9|\\(c\\))\/i.test(e.credit) ? e.credit : '\u00a9 ' + e.credit;\n      var c = el('span', 'ea-credit', txt);\n      c.title = txt;\n      return c;\n    }\n\n    function pill(e) {\n      var p = el('span', 'ea-pill', catLabel(e));\n      applyCat(p, e.category);\n      return p;\n    }\n\n    \/**\n     * Carte \u00e9v\u00e9nement (composant unique).\n     * @param {object} e\n     * @param {object} o { day: 'Y-m-d' \u2192 heure du jour | date: true \u2192 dates de l'\u00e9v\u00e9nement }\n     *\/\n    function card(e, o) {\n      o = o || {};\n      var c = el('article', 'ea-card' + (e.end < TODAY ? ' ea-card--ended' : ''));\n      c.tabIndex = 0;\n      c.setAttribute('role', 'button');\n      c.setAttribute('aria-label', e.name + ' \u2014 ' + (o.date ? dateLabel(e) : timeLabel(e, o.day)) + ' \u2014 ' + T.anim_see_detail);\n      applyCat(c, e.category);\n\n      var m = el('div', 'ea-card-media');\n      m.appendChild(media(e));\n      var cr = credit(e);\n      if (cr) m.appendChild(cr);\n      m.appendChild(dateBadge(e));\n      if (o.day === TODAY && e.start < TODAY && e.end >= TODAY) {\n        m.appendChild(el('span', 'ea-live', T.anim_live));\n      }\n      if (e.registration) {\n        var reg = el('span', 'ea-reg');\n        reg.appendChild(icon('pen'));\n        reg.appendChild(document.createTextNode(T.registration));\n        m.appendChild(reg);\n      }\n      c.appendChild(m);\n\n      var b = el('div', 'ea-card-body');\n      var top = el('div', 'ea-card-top');\n      if (!o.date) {\n        var w = el('span', 'ea-when');\n        w.appendChild(icon('clock'));\n        w.appendChild(document.createTextNode(timeLabel(e, o.day)));\n        top.appendChild(w);\n      }\n      if (top.childNodes.length) b.appendChild(top);\n      b.appendChild(el('h3', 'ea-card-title', e.name));\n      var where = placeLabel(e);\n      if (where) {\n        var p = el('p', 'ea-place');\n        p.appendChild(icon(e.onsite ? 'tent' : 'pin'));\n        p.appendChild(document.createTextNode(where));\n        b.appendChild(p);\n      }\n      if (e.description) b.appendChild(el('p', 'ea-card-desc', e.description));\n      var cta = el('span', 'ea-cta', T.discover);\n      cta.appendChild(icon('arrow'));\n      b.appendChild(cta);\n      c.appendChild(b);\n\n      c.addEventListener('click', function() {\n        openModal(e);\n      });\n      c.addEventListener('keydown', function(ev) {\n        if (ev.key === 'Enter' || ev.key === ' ') {\n          ev.preventDefault();\n          openModal(e);\n        }\n      });\n      return c;\n    }\n\n    \/** O\u00f9 : lieu dans l'\u00e9tablissement (sur place) ou ville (aux alentours) *\/\n    function placeLabel(e) {\n      if (e.onsite) return e.spot ? tf('anim_onsite_spot', e.spot) : T.anim_onsite;\n      return e.city;\n    }\n\n    \/**\n     * Badge date sur l'image, toujours sur 3 lignes et de taille fixe :\n     *   un jour     \u2192 LUN \/ 28 \/ SEPT\n     *   jusqu'au    \u2192 JUSQU'AU \/ 18 \/ OCT\n     *   p\u00e9riode     \u2192 25 SEPT \u2192 \/ 7 \/ OCT   (du 25 sept. au 7 oct.)\n     *\/\n    function dateBadge(e) {\n      var month = function(ymd) {\n        return fmt(ymd, { month: 'short' }).replace('.', '');\n      };\n      var top, day, end = '';\n      if (e.open_start) {\n        top = T.anim_badge_until;\n        day = e.end;\n      } else if (e.start !== e.end) {\n        \/\/ P\u00e9riode : le D\u00c9BUT en gros, la fin en petit dessous (\u2192 1 nov)\n        top = T.anim_badge_from;\n        day = e.start;\n        end = '\u2192 ' + toDate(e.end).getDate() + ' ' + month(e.end);\n      } else {\n        top = e.start === TODAY ? T.anim_badge_today : fmt(e.start, { weekday: 'short' }).replace('.', '');\n        day = e.start;\n      }\n      \/\/ Couleur selon le cas : aujourd'hui \/ un jour \u00e0 venir \/ p\u00e9riode \u00e0 venir \/ en cours\n      var kind = (e.start === e.end && !e.open_start) ? (e.start === TODAY ? 'today' : 'day') :\n        ((e.open_start || e.start <= TODAY) ? 'ongoing' : 'period');\n      var d = el('span', 'ea-date ea-date--' + kind);\n      d.setAttribute('aria-hidden', 'true');\n      d.appendChild(el('span', 'ea-date-top', top));\n      d.appendChild(el('span', 'ea-date-day', String(toDate(day).getDate())));\n      d.appendChild(el('span', 'ea-date-month', month(day)));\n      if (end) d.appendChild(el('span', 'ea-date-end', end));\n      return d;\n    }\n\n    function grid(list, o, four) {\n      var g = el('div', 'ea-grid' + (four ? ' ea-grid--4' : ''));\n      list.forEach(function(e) {\n        g.appendChild(card(e, o));\n      });\n      return g;\n    }\n\n    function head(id, iconName, title, sub, side) {\n      var h = el('div', 'ea-section-head');\n      var left = el('div');\n      var t = el('h2', 'ea-section-title');\n      if (iconName) t.appendChild(icon(iconName));\n      t.appendChild(document.createTextNode(title));\n      t.id = id;\n      left.appendChild(t);\n      if (sub) left.appendChild(el('p', 'ea-section-sub', sub));\n      h.appendChild(left);\n      if (side) h.appendChild(side);\n      return h;\n    }\n\n    function round(label, aria, onClick, disabled) {\n      var b = el('button', 'ea-round', label);\n      b.type = 'button';\n      b.setAttribute('aria-label', aria);\n      b.disabled = !!disabled;\n      b.addEventListener('click', onClick);\n      return b;\n    }\n\n    function empty(title, text, action) {\n      var box = el('div', 'ea-empty');\n      box.appendChild(icon('sun'));\n      box.appendChild(el('strong', null, title));\n      if (text) box.appendChild(el('span', null, text));\n      if (action) {\n        var b = el('button', 'ea-btn ea-btn--soft', action.label);\n        b.type = 'button';\n        b.addEventListener('click', action.onClick);\n        box.appendChild(b);\n      }\n      return box;\n    }\n\n    function nextEventDay(after) {\n      var next = null;\n      EVENTS.forEach(function(e) {\n        if (visible(e) && e.start > after && (!next || e.start < next)) next = e.start;\n      });\n      return next;\n    }\n\n    \/** Pastilles de cat\u00e9gories (filtre global de la page) *\/\n    function catFilters() {\n      var box = el('div', 'ea-cats');\n      box.setAttribute('role', 'group');\n      box.setAttribute('aria-label', T.anim_filter_cat);\n      \/\/ Cat\u00e9gories pr\u00e9sentes dans le p\u00e9rim\u00e8tre choisi (sur place \/ alentours)\n      var keys = Object.keys(CATEGORIES).filter(function(k) {\n        return EVENTS.some(function(e) {\n          return e.category === k && e.end >= TODAY &&\n            (state.scope === 'all' || (state.scope === 'onsite') === !!e.onsite);\n        });\n      });\n      if (keys.length < 2) return box;\n      var mk = function(key, label) {\n        var b = el('button', 'ea-cat' + (key === 'all' ? ' ea-cat--all' : ''), label);\n        b.type = 'button';\n        b.setAttribute('aria-pressed', state.cat === key ? 'true' : 'false');\n        if (key !== 'all') applyCat(b, key);\n        b.addEventListener('click', function() {\n          setCat(state.cat === key ? 'all' : key);\n          var again = document.querySelector('.ea-cat[aria-pressed=\"true\"]');\n          if (again) again.focus();\n        });\n        box.appendChild(b);\n      };\n      mk('all', T.anim_all_f);\n      keys.forEach(function(k) {\n        mk(k, CATEGORIES[k].label);\n      });\n      return box;\n    }\n\n    \/\/ \u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\n    \/\/ 3. AUJOURD'HUI\n    \/\/ \u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\n    function renderToday() {\n      var sec = document.getElementById('ea-sec-today');\n      sec.innerHTML = '';\n      var day = state.day;\n\n      var side = el('div', 'ea-head-side');\n      side.appendChild(el('span', null, ucfirst(fmt(day, { weekday: 'long', day: 'numeric', month: 'long' }))));\n      side.appendChild(round('\u2039', T.anim_prev_day, function() {\n        state.day = addDays(state.day, -1);\n        state.todayAll = false;\n        renderToday();\n      }, day <= TODAY));\n      side.appendChild(round('\u203a', T.anim_next_day, function() {\n        state.day = addDays(state.day, 1);\n        state.todayAll = false;\n        renderToday();\n      }));\n\n      \/\/ Titres neutres : la page sert aussi aux h\u00f4tels, mus\u00e9es, offices de tourisme\u2026\n      var title = day === TODAY ? T.anim_today_title :\n        (day === addDays(TODAY, 1) ? T.anim_tomorrow_title : tf('anim_day_title', fmt(day, { weekday: 'long', day: 'numeric', month: 'long' })));\n      sec.appendChild(head('ea-today-title', 'sun', title, null, side));\n      sec.appendChild(catFilters());\n\n      var list = eventsOn(day);\n      if (!list.length) {\n        var next = nextEventDay(day);\n        sec.appendChild(empty(\n          day === TODAY ? T.anim_relax_today : T.anim_nothing_day,\n          next ? tf('anim_next_on', fmt(next, { weekday: 'long', day: 'numeric', month: 'long' })) : T.anim_soon,\n          next ? {\n            label: T.anim_see_day,\n            onClick: function() {\n              state.day = next;\n              renderToday();\n            }\n          } : null));\n        return;\n      }\n\n      sec.appendChild(list.length > TODAY_MAX ? carousel(list, { day: day }) : grid(list, { day: day }));\n    }\n\n    \/**\n     * Carrousel horizontal (3 cartes visibles sur ordinateur, d\u00e9filement au doigt\n     * sur mobile), fl\u00e8ches affich\u00e9es seulement s'il reste des cartes de ce c\u00f4t\u00e9.\n     *\/\n    function carousel(list, o, four) {\n      var wrap = el('div', 'ea-carousel' + (four ? ' ea-carousel--4' : ''));\n      var track = el('div', 'ea-carousel-track');\n      track.setAttribute('role', 'list');\n      list.forEach(function(e) {\n        var c = card(e, o);\n        c.setAttribute('role', 'listitem');\n        track.appendChild(c);\n      });\n      var prev = el('button', 'ea-carousel-btn ea-carousel-btn--prev', '\u2039');\n      var next = el('button', 'ea-carousel-btn ea-carousel-btn--next', '\u203a');\n      prev.type = next.type = 'button';\n      prev.setAttribute('aria-label', T.anim_prev_acts);\n      next.setAttribute('aria-label', T.anim_next_acts);\n      var step = function(dir) {\n        var first = track.firstElementChild;\n        var w = first ? first.getBoundingClientRect().width + 16 : track.clientWidth;\n        track.scrollBy({ left: dir * w * Math.max(1, Math.floor(track.clientWidth \/ w)), behavior: 'smooth' });\n      };\n      prev.addEventListener('click', function() {\n        step(-1);\n      });\n      next.addEventListener('click', function() {\n        step(1);\n      });\n      var update = function() {\n        var max = track.scrollWidth - track.clientWidth;\n        prev.hidden = track.scrollLeft <= 4;\n        next.hidden = track.scrollLeft >= max - 4;\n      };\n      track.addEventListener('scroll', update, { passive: true });\n      window.addEventListener('resize', update);\n      wrap.appendChild(prev);\n      wrap.appendChild(track);\n      wrap.appendChild(next);\n      setTimeout(update, 0);\n      return wrap;\n    }\n\n    \/\/ \u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\n    \/\/ 4. TEMPS FORTS DE LA SEMAINE\n    \/\/ \u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\n    function firstBusyDay(from) {\n      for (var i = 0; i < 7; i++) {\n        var d = addDays(from, i);\n        if (d >= TODAY && eventsOn(d).length) return d;\n      }\n      return null;\n    }\n\n    function renderWeek() {\n      var sec = document.getElementById('ea-sec-week');\n      sec.innerHTML = '';\n      var thisWeek = weekStart(TODAY);\n      var from = state.week || thisWeek;\n      var to = addDays(from, 6);\n      if (state.weekDay < from || state.weekDay > to) state.weekDay = firstBusyDay(from) || from;\n\n      var side = el('div', 'ea-head-side');\n      side.appendChild(el('span', null, tf('from_to', shortDate(from), shortDate(to))));\n      side.appendChild(round('\u2039', T.anim_prev_week, function() {\n        state.week = addDays(from, -7);\n        state.weekDay = state.week === thisWeek ? TODAY : state.week;\n        renderWeek();\n      }, from <= thisWeek));\n      side.appendChild(round('\u203a', T.anim_next_week, function() {\n        state.week = addDays(from, 7);\n        state.weekDay = firstBusyDay(state.week) || state.week;\n        renderWeek();\n      }));\n\n      var title = from === thisWeek ? T.anim_week_title :\n        (from === addDays(thisWeek, 7) ? T.anim_next_week_title : tf('anim_week_of', fmt(from, { day: 'numeric', month: 'long' })));\n      sec.appendChild(head('ea-week-title', 'calendar', title, null, side));\n\n      var days = el('div', 'ea-days');\n      days.setAttribute('role', 'group');\n      days.setAttribute('aria-label', T.anim_week_days);\n      for (var i = 0; i < 7; i++) {\n        (function(day) {\n          var n = eventsOn(day).length;\n          var b = el('button', 'ea-day' + (day === TODAY ? ' is-today' : '') + (n ? ' has-events' : ''));\n          b.type = 'button';\n          b.setAttribute('aria-pressed', day === state.weekDay ? 'true' : 'false');\n          b.setAttribute('aria-label', fmt(day, { weekday: 'long', day: 'numeric', month: 'long' }) + (day === TODAY ? ' ' + T.anim_today_paren : '') + ' : ' + (n ? tf(n > 1 ? 'anim_activities' : 'anim_activity', n) : T.anim_nothing));\n          b.appendChild(el('span', 'ea-day-name', ucfirst(fmt(day, { weekday: 'short' }).replace('.', ''))));\n          b.appendChild(el('span', 'ea-day-date', shortDate(day)));\n          b.addEventListener('click', function() {\n            state.weekDay = day;\n            renderWeek();\n            var btn = document.querySelector('.ea-day[aria-pressed=\"true\"]');\n            if (btn) btn.focus();\n          });\n          days.appendChild(b);\n        })(addDays(from, i));\n      }\n      sec.appendChild(days);\n\n      var list = eventsOn(state.weekDay);\n      if (!list.length) {\n        sec.appendChild(empty(T.anim_nothing_day, T.anim_pick_day));\n        return;\n      }\n      \/\/ Au-del\u00e0 de 4 activit\u00e9s : carrousel (4 cartes visibles) au lieu d'une grille qui s'allonge\n      sec.appendChild(list.length > 4 ? carousel(list, { day: state.weekDay }, true) : grid(list, { day: state.weekDay }, true));\n    }\n\n    \/\/ \u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\n    \/\/ 5. TOUS LES \u00c9V\u00c9NEMENTS \u00c0 VENIR\n    \/\/ \u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\n    \/** Liste d\u00e9roulante accessible (libell\u00e9 masqu\u00e9) *\/\n    function selectBox(label, options, value, onChange) {\n      var wrap = el('label');\n      wrap.appendChild(el('span', 'ea-sr', label));\n      var sel = el('select', 'ea-select');\n      options.forEach(function(o) {\n        var opt = el('option', null, o[1]);\n        opt.value = o[0];\n        opt.selected = value === o[0];\n        sel.appendChild(opt);\n      });\n      sel.addEventListener('change', function() {\n        onChange(sel.value);\n      });\n      wrap.appendChild(sel);\n      return wrap;\n    }\n\n    function renderUpcoming() {\n      var sec = document.getElementById('ea-sec-upcoming');\n      sec.innerHTML = '';\n\n      \/\/ Tri (le filtre cat\u00e9gorie est global, sous \u00ab Activit\u00e9s du jour \u00bb)\n      var side = el('div', 'ea-head-side');\n      side.appendChild(selectBox(T.anim_sort, [\n        ['date', T.anim_sort_date],\n        ['name', T.anim_sort_name]\n      ], state.sort, function(v) {\n        state.sort = v;\n        renderUpcoming();\n        focusUpcoming(0);\n      }));\n      sec.appendChild(head('ea-upcoming-title', 'leaf', T.anim_upcoming_title, null, side));\n\n      var list = EVENTS.filter(function(e) {\n        return visible(e) && e.end >= TODAY;\n      }).sort(function(a, b) {\n        if (state.sort === 'name') return a.name.localeCompare(b.name, T.date_locale);\n        var sa = a.start < TODAY ? TODAY : a.start;\n        var sb = b.start < TODAY ? TODAY : b.start;\n        return sa.localeCompare(sb) || byTime(a, b);\n      });\n\n      if (!list.length) {\n        sec.appendChild(empty(T.anim_no_upcoming, state.cat === 'all' ? T.anim_soon : T.anim_try_cat));\n        return;\n      }\n\n      sec.appendChild(grid(list.slice(0, state.upcomingLimit), { date: true }, true));\n\n      if (list.length > state.upcomingLimit) {\n        var more = el('div', 'ea-more');\n        var b = el('button', 'ea-btn ea-btn--soft', tf('anim_more', list.length - state.upcomingLimit));\n        b.appendChild(icon('arrow'));\n        b.type = 'button';\n        b.addEventListener('click', function() {\n          state.upcomingLimit += UPCOMING_STEP;\n          renderUpcoming();\n        });\n        more.appendChild(b);\n        sec.appendChild(more);\n      }\n    }\n\n    function setCat(key) {\n      state.cat = key;\n      rerenderAll();\n    }\n\n    function setScope(scope) {\n      state.scope = scope;\n      state.cat = 'all';\n      app.querySelectorAll('.ea-scope button').forEach(function(b) {\n        b.setAttribute('aria-pressed', b.getAttribute('data-scope') === scope ? 'true' : 'false');\n      });\n      rerenderAll();\n    }\n\n    function rerenderAll() {\n      state.upcomingLimit = UPCOMING_STEP;\n      state.todayAll = false;\n      renderToday();\n      renderWeek();\n      renderUpcoming();\n      renderCalendar();\n    }\n\n    \/** Apr\u00e8s un re-rendu, garde le focus sur la liste d\u00e9roulante utilis\u00e9e *\/\n    function focusUpcoming(i) {\n      var sel = document.querySelectorAll('#ea-sec-upcoming .ea-select')[i];\n      if (sel) sel.focus();\n    }\n\n    \/\/ \u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\n    \/\/ 6. CALENDRIER DU MOIS (secondaire, repliable)\n    \/\/ \u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\n    var MAX_LANES = 3;\n\n    \/** Place les \u00e9v\u00e9nements d'une semaine en couloirs sans chevauchement *\/\n    function layoutLanes(from, to) {\n      var items = eventsBetween(from, to).map(function(e) {\n        var s = e.start < from ? from : e.start;\n        var t = e.end > to ? to : e.end;\n        return { e: e, col: daysBetween(from, s) + 1, span: daysBetween(s, t) + 1, fromBefore: e.start < from, toAfter: e.end > to };\n      });\n      items.sort(function(a, b) {\n        return (a.col - b.col) || (b.span - a.span) || (a.e.start_time || '').localeCompare(b.e.start_time || '');\n      });\n      var ends = [];\n      items.forEach(function(it) {\n        var lane = 0;\n        while (ends[lane] !== undefined && ends[lane] >= it.col) lane++;\n        ends[lane] = it.col + it.span - 1;\n        it.lane = lane;\n      });\n      return items;\n    }\n\n    function renderCalendar() {\n      var sec = document.getElementById('ea-sec-calendar');\n      sec.innerHTML = '';\n\n      var toggle = el('button', 'ea-btn ea-btn--soft', state.calendarOpen ? T.anim_hide_cal : T.anim_show_cal);\n      toggle.appendChild(icon('arrow'));\n      toggle.type = 'button';\n      toggle.setAttribute('aria-expanded', state.calendarOpen ? 'true' : 'false');\n      toggle.setAttribute('aria-controls', 'ea-cal-panel');\n      toggle.addEventListener('click', function() {\n        state.calendarOpen = !state.calendarOpen;\n        renderCalendar();\n        var b = document.querySelector('#ea-sec-calendar [aria-controls=\"ea-cal-panel\"]');\n        if (b) b.focus();\n      });\n      sec.appendChild(head('ea-calendar-title', 'calendar', T.anim_cal_title, T.anim_cal_sub, toggle));\n\n      var panel = el('div', 'ea-cal-panel');\n      panel.id = 'ea-cal-panel';\n      panel.hidden = !state.calendarOpen;\n      sec.appendChild(panel);\n      if (!state.calendarOpen) return;\n\n      var first = state.month + '-01';\n      var firstDate = toDate(first);\n      var lastDay = toYmd(new Date(firstDate.getFullYear(), firstDate.getMonth() + 1, 0, 12));\n      var gridStart = weekStart(first);\n      var gridEnd = addDays(weekStart(lastDay), 6);\n\n      var bar = el('div', 'ea-cal-toolbar');\n      bar.appendChild(el('h3', 'ea-cal-month', ucfirst(fmt(first, { month: 'long', year: 'numeric' }))));\n      var nav = el('div', 'ea-head-side');\n      nav.appendChild(round('\u2039', T.anim_prev_month, function() {\n        state.month = toYmd(new Date(firstDate.getFullYear(), firstDate.getMonth() - 1, 1, 12)).slice(0, 7);\n        state.selectedDay = null;\n        renderCalendar();\n      }));\n      nav.appendChild(round('\u203a', T.anim_next_month, function() {\n        state.month = toYmd(new Date(firstDate.getFullYear(), firstDate.getMonth() + 1, 1, 12)).slice(0, 7);\n        state.selectedDay = null;\n        renderCalendar();\n      }));\n      bar.appendChild(nav);\n      panel.appendChild(bar);\n\n      var month = el('div', 'ea-month');\n      var mh = el('div', 'ea-month-head');\n      \/\/ Lundi \u2192 dimanche, abr\u00e9g\u00e9s dans la langue de la page (5 janv. 2026 = un lundi)\n      [5, 6, 7, 8, 9, 10, 11].map(function(dd) { return ucfirst(fmt('2026-01-' + (dd < 10 ? '0' : '') + dd, { weekday: 'short' }).replace('.', '')); }).forEach(function(d) {\n        mh.appendChild(el('div', null, d));\n      });\n      month.appendChild(mh);\n      for (var ws = gridStart; ws <= gridEnd; ws = addDays(ws, 7)) month.appendChild(monthRow(ws));\n      panel.appendChild(month);\n\n      \/\/ D\u00e9tail uniquement apr\u00e8s un clic sur un jour\n      if (state.selectedDay) {\n        var dp = el('div', 'ea-daypanel');\n        dp.id = 'ea-daypanel';\n        dp.appendChild(el('h3', 'ea-daypanel-title', ucfirst(fmt(state.selectedDay, { weekday: 'long', day: 'numeric', month: 'long' }))));\n        var list = eventsOn(state.selectedDay);\n        dp.appendChild(list.length ? grid(list, { day: state.selectedDay }) : empty(T.anim_nothing_day));\n        panel.appendChild(dp);\n      }\n    }\n\n    function monthRow(from) {\n      var to = addDays(from, 6);\n      var items = layoutLanes(from, to);\n      var row = el('div', 'ea-mrow');\n      var hidden = [0, 0, 0, 0, 0, 0, 0];\n      items.forEach(function(it) {\n        if (it.lane >= MAX_LANES) {\n          for (var d = it.col; d < it.col + it.span; d++) hidden[d - 1]++;\n        }\n      });\n\n      for (var i = 0; i < 7; i++) {\n        (function(day, i) {\n          var inMonth = day.slice(0, 7) === state.month;\n          var cell = el('button', 'ea-mcell' + (inMonth ? '' : ' ea-mcell--out') + (day === state.selectedDay ? ' ea-mcell--selected' : ''));\n          cell.type = 'button';\n          cell.style.gridColumn = String(i + 1);\n          cell.setAttribute('aria-label', fmt(day, { weekday: 'long', day: 'numeric', month: 'long' }) + ' : ' + (function(n) { return n ? tf(n > 1 ? 'anim_activities' : 'anim_activity', n) : T.anim_nothing; })(eventsOn(day).length));\n          cell.addEventListener('click', function() {\n            state.selectedDay = day;\n            if (!inMonth) state.month = day.slice(0, 7);\n            renderCalendar();\n            var dp = document.getElementById('ea-daypanel');\n            if (dp && dp.scrollIntoView) dp.scrollIntoView({ behavior: 'smooth', block: 'nearest' });\n          });\n          row.appendChild(cell);\n\n          var num = el('span', 'ea-mnum' + (inMonth ? '' : ' ea-mnum--out') + (day === TODAY ? ' ea-mnum--today' : ''), String(toDate(day).getDate()));\n          num.style.gridColumn = String(i + 1);\n          row.appendChild(num);\n\n          if (hidden[i]) {\n            var more = el('span', 'ea-mmore', '+' + hidden[i]);\n            more.style.gridColumn = String(i + 1);\n            row.appendChild(more);\n          }\n        })(addDays(from, i), i);\n      }\n\n      items.forEach(function(it) {\n        if (it.lane >= MAX_LANES) return;\n        var e = it.e;\n        var b = el('button', 'ea-mbar' +\n          (it.fromBefore ? ' ea-mbar--from-before' : '') +\n          (it.toAfter ? ' ea-mbar--to-after' : '') +\n          (e.end < TODAY ? ' ea-mbar--ended' : ''), ((!it.fromBefore && e.start_time) ? e.start_time + ' ' : '') + e.name);\n        b.type = 'button';\n        b.title = e.name;\n        applyCat(b, e.category);\n        b.style.gridColumn = it.col + ' \/ span ' + it.span;\n        b.style.gridRow = String(it.lane + 2);\n        b.addEventListener('click', function() {\n          openModal(e);\n        });\n        row.appendChild(b);\n      });\n      return row;\n    }\n\n    \/\/ \u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\n    \/\/ MODAL \u2014 d\u00e9plac\u00e9e dans <body> pour \u00e9chapper \u00e0 la largeur max du contenu\n    \/\/ \u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\n    var modal = document.getElementById('ea-modal');\n    if (modal && modal.parentNode !== document.body) document.body.appendChild(modal);\n    var modalContent = document.getElementById('ea-modal-content');\n    var lastFocus = null;\n\n    function openModal(e) {\n      lastFocus = document.activeElement;\n      modalContent.innerHTML = '';\n\n      if (e.image || DEFAULT_IMG) {\n        var img = media(e, 'ea-modal-img');\n        img.loading = 'eager';\n        var mm = el('div', 'ea-modal-media');\n        mm.appendChild(img);\n        var mcr = credit(e);\n        if (mcr) mm.appendChild(mcr);\n        modalContent.appendChild(mm);\n      }\n\n      var body = el('div', 'ea-modal-body');\n      if (catLabel(e)) body.appendChild(pill(e));\n      var t = el('h2', 'ea-modal-title', e.name);\n      t.id = 'ea-modal-title';\n      body.appendChild(t);\n\n      var info = el('div', 'ea-modal-info');\n      var when = el('span');\n      when.appendChild(icon('calendar'));\n      when.appendChild(document.createTextNode(fullWhenLabel(e)));\n      info.appendChild(when);\n      if (placeLabel(e)) {\n        var where = el('span');\n        where.appendChild(icon(e.onsite ? 'tent' : 'pin'));\n        where.appendChild(document.createTextNode(placeLabel(e)));\n        info.appendChild(where);\n      }\n      if (e.registration) {\n        var reg = el('span');\n        reg.appendChild(icon('pen'));\n        reg.appendChild(el('strong', null, T.registration));\n        info.appendChild(reg);\n      }\n      body.appendChild(info);\n\n      if (e.description) body.appendChild(el('p', 'ea-modal-desc', e.description));\n\n      if (e.link) {\n        var a = el('a', 'ea-btn', T.anim_more_info);\n        a.href = e.link;\n        a.target = '_blank';\n        a.rel = 'noopener';\n        a.appendChild(icon('external'));\n        a.appendChild(el('span', 'ea-sr', T.anim_new_tab));\n        body.appendChild(a);\n      }\n      modalContent.appendChild(body);\n\n      modal.hidden = false;\n      document.documentElement.style.overflow = 'hidden';\n      document.getElementById('ea-modal-close').focus();\n    }\n\n    function closeModal() {\n      modal.hidden = true;\n      document.documentElement.style.overflow = '';\n      if (lastFocus && lastFocus.focus) lastFocus.focus();\n    }\n\n    document.getElementById('ea-modal-close').addEventListener('click', closeModal);\n    modal.addEventListener('click', function(ev) {\n      if (ev.target === modal) closeModal();\n    });\n    document.addEventListener('keydown', function(ev) {\n      if (modal.hidden) return;\n      if (ev.key === 'Escape') closeModal();\n      \/\/ Focus gard\u00e9 dans la modal\n      if (ev.key === 'Tab') {\n        var f = modal.querySelectorAll('button, a[href]');\n        if (!f.length) return;\n        var firstF = f[0],\n          lastF = f[f.length - 1];\n        if (ev.shiftKey && document.activeElement === firstF) {\n          ev.preventDefault();\n          lastF.focus();\n        } else if (!ev.shiftKey && document.activeElement === lastF) {\n          ev.preventDefault();\n          firstF.focus();\n        }\n      }\n    });\n\n    \/\/ \u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\n    \/\/ NAVIGATION RAPIDE + SUIVI DE SECTION\n    \/\/ \u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\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('#ea-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('--ea-header', Math.round(bottom) + 'px');\n      return bottom;\n    }\n\n    var navLinks = Array.prototype.slice.call(app.querySelectorAll('.ea-nav a'));\n\n    function setCurrent(id) {\n      navLinks.forEach(function(a) {\n        a.setAttribute('aria-current', a.getAttribute('href') === '#' + id ? 'true' : 'false');\n      });\n    }\n\n    navLinks.forEach(function(a) {\n      a.addEventListener('click', function(ev) {\n        var target = document.getElementById(a.getAttribute('href').slice(1));\n        if (!target) return;\n        ev.preventDefault();\n        if (a.getAttribute('href') === '#ea-sec-calendar' && !state.calendarOpen) {\n          state.calendarOpen = true;\n          renderCalendar();\n        }\n        setCurrent(target.id);\n        target.scrollIntoView({ behavior: 'smooth', block: 'start' });\n      });\n    });\n\n    if ('IntersectionObserver' in window) {\n      var io = new IntersectionObserver(function(entries) {\n        entries.forEach(function(en) {\n          if (en.isIntersecting) setCurrent(en.target.id);\n        });\n      }, { rootMargin: '-35% 0px -55% 0px' });\n      ['ea-sec-today', 'ea-sec-week', 'ea-sec-upcoming', 'ea-sec-calendar'].forEach(function(id) {\n        io.observe(document.getElementById(id));\n      });\n    }\n\n    var ticking = false;\n    window.addEventListener('scroll', function() {\n      if (ticking) return;\n      ticking = true;\n      requestAnimationFrame(function() {\n        headerOffset();\n        ticking = false;\n      });\n    }, { passive: true });\n    window.addEventListener('resize', headerOffset);\n\n    \/\/ Semaine : on ouvre sur le prochain jour anim\u00e9 (aujourd'hui est d\u00e9j\u00e0 en haut de page)\n    (function() {\n      var ws = weekStart(TODAY);\n      for (var d = addDays(TODAY, 1); d <= addDays(ws, 6); d = addDays(d, 1)) {\n        if (eventsOn(d).length) {\n          state.weekDay = d;\n          return;\n        }\n      }\n    })();\n\n    app.querySelectorAll('.ea-scope button').forEach(function(b) {\n      b.addEventListener('click', function() {\n        setScope(b.getAttribute('data-scope'));\n      });\n    });\n\n    headerOffset();\n    renderToday();\n    renderWeek();\n    renderUpcoming();\n    renderCalendar();\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":""},"sujet":[],"class_list":["post-4299","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>Activities and events - Domaine de M\u00e9pillat<\/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:\/\/www.camping-mepillat.fr\/en\/elaia-animations\/\" \/>\n<meta property=\"og:locale\" content=\"en_US\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Activities and events - Domaine de M\u00e9pillat\" \/>\n<meta property=\"og:url\" content=\"https:\/\/www.camping-mepillat.fr\/en\/elaia-animations\/\" \/>\n<meta property=\"og:site_name\" content=\"Domaine de M\u00e9pillat\" \/>\n<meta property=\"article:modified_time\" content=\"2026-10-20T13:05:10+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:\\\/\\\/www.camping-mepillat.fr\\\/en\\\/elaia-animations\\\/\",\"url\":\"https:\\\/\\\/www.camping-mepillat.fr\\\/en\\\/elaia-animations\\\/\",\"name\":\"Activities and events - Domaine de M\u00e9pillat\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/www.camping-mepillat.fr\\\/en\\\/#website\"},\"datePublished\":\"2026-10-09T09:10:41+00:00\",\"dateModified\":\"2026-10-20T13:05:10+00:00\",\"breadcrumb\":{\"@id\":\"https:\\\/\\\/www.camping-mepillat.fr\\\/en\\\/elaia-animations\\\/#breadcrumb\"},\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\\\/\\\/www.camping-mepillat.fr\\\/en\\\/elaia-animations\\\/\"]}]},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\\\/\\\/www.camping-mepillat.fr\\\/en\\\/elaia-animations\\\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Camping dans l'Ain\",\"item\":\"https:\\\/\\\/www.camping-mepillat.fr\\\/en\\\/welcome\\\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Activities and events\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\\\/\\\/www.camping-mepillat.fr\\\/en\\\/#website\",\"url\":\"https:\\\/\\\/www.camping-mepillat.fr\\\/en\\\/\",\"name\":\"Domaine de M\u00e9pillat\",\"description\":\"\",\"publisher\":{\"@id\":\"https:\\\/\\\/www.camping-mepillat.fr\\\/en\\\/#organization\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\\\/\\\/www.camping-mepillat.fr\\\/en\\\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"en-US\"},{\"@type\":\"Organization\",\"@id\":\"https:\\\/\\\/www.camping-mepillat.fr\\\/en\\\/#organization\",\"name\":\"Domaine de M\u00e9pillat\",\"url\":\"https:\\\/\\\/www.camping-mepillat.fr\\\/en\\\/\",\"logo\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\\\/\\\/www.camping-mepillat.fr\\\/en\\\/#\\\/schema\\\/logo\\\/image\\\/\",\"url\":\"https:\\\/\\\/www.camping-mepillat.fr\\\/wp-content\\\/uploads\\\/2024\\\/06\\\/cropped-logo-mepillat.webp\",\"contentUrl\":\"https:\\\/\\\/www.camping-mepillat.fr\\\/wp-content\\\/uploads\\\/2024\\\/06\\\/cropped-logo-mepillat.webp\",\"width\":1228,\"height\":705,\"caption\":\"Domaine de M\u00e9pillat\"},\"image\":{\"@id\":\"https:\\\/\\\/www.camping-mepillat.fr\\\/en\\\/#\\\/schema\\\/logo\\\/image\\\/\"}}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"Activities and events - Domaine de M\u00e9pillat","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:\/\/www.camping-mepillat.fr\/en\/elaia-animations\/","og_locale":"en_US","og_type":"article","og_title":"Activities and events - Domaine de M\u00e9pillat","og_url":"https:\/\/www.camping-mepillat.fr\/en\/elaia-animations\/","og_site_name":"Domaine de M\u00e9pillat","article_modified_time":"2026-10-20T13:05:10+00:00","twitter_card":"summary_large_image","schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"WebPage","@id":"https:\/\/www.camping-mepillat.fr\/en\/elaia-animations\/","url":"https:\/\/www.camping-mepillat.fr\/en\/elaia-animations\/","name":"Activities and events - Domaine de M\u00e9pillat","isPartOf":{"@id":"https:\/\/www.camping-mepillat.fr\/en\/#website"},"datePublished":"2026-10-09T09:10:41+00:00","dateModified":"2026-10-20T13:05:10+00:00","breadcrumb":{"@id":"https:\/\/www.camping-mepillat.fr\/en\/elaia-animations\/#breadcrumb"},"inLanguage":"en-US","potentialAction":[{"@type":"ReadAction","target":["https:\/\/www.camping-mepillat.fr\/en\/elaia-animations\/"]}]},{"@type":"BreadcrumbList","@id":"https:\/\/www.camping-mepillat.fr\/en\/elaia-animations\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Camping dans l'Ain","item":"https:\/\/www.camping-mepillat.fr\/en\/welcome\/"},{"@type":"ListItem","position":2,"name":"Activities and events"}]},{"@type":"WebSite","@id":"https:\/\/www.camping-mepillat.fr\/en\/#website","url":"https:\/\/www.camping-mepillat.fr\/en\/","name":"Domaine de M\u00e9pillat","description":"","publisher":{"@id":"https:\/\/www.camping-mepillat.fr\/en\/#organization"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/www.camping-mepillat.fr\/en\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"en-US"},{"@type":"Organization","@id":"https:\/\/www.camping-mepillat.fr\/en\/#organization","name":"Domaine de M\u00e9pillat","url":"https:\/\/www.camping-mepillat.fr\/en\/","logo":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/www.camping-mepillat.fr\/en\/#\/schema\/logo\/image\/","url":"https:\/\/www.camping-mepillat.fr\/wp-content\/uploads\/2024\/06\/cropped-logo-mepillat.webp","contentUrl":"https:\/\/www.camping-mepillat.fr\/wp-content\/uploads\/2024\/06\/cropped-logo-mepillat.webp","width":1228,"height":705,"caption":"Domaine de M\u00e9pillat"},"image":{"@id":"https:\/\/www.camping-mepillat.fr\/en\/#\/schema\/logo\/image\/"}}]}},"_links":{"self":[{"href":"https:\/\/www.camping-mepillat.fr\/en\/wp-json\/wp\/v2\/pages\/4299","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.camping-mepillat.fr\/en\/wp-json\/wp\/v2\/pages"}],"about":[{"href":"https:\/\/www.camping-mepillat.fr\/en\/wp-json\/wp\/v2\/types\/page"}],"author":[{"embeddable":true,"href":"https:\/\/www.camping-mepillat.fr\/en\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.camping-mepillat.fr\/en\/wp-json\/wp\/v2\/comments?post=4299"}],"version-history":[{"count":1,"href":"https:\/\/www.camping-mepillat.fr\/en\/wp-json\/wp\/v2\/pages\/4299\/revisions"}],"predecessor-version":[{"id":4300,"href":"https:\/\/www.camping-mepillat.fr\/en\/wp-json\/wp\/v2\/pages\/4299\/revisions\/4300"}],"wp:attachment":[{"href":"https:\/\/www.camping-mepillat.fr\/en\/wp-json\/wp\/v2\/media?parent=4299"}],"wp:term":[{"taxonomy":"sujet","embeddable":true,"href":"https:\/\/www.camping-mepillat.fr\/en\/wp-json\/wp\/v2\/sujet?post=4299"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}