{"id":3543,"date":"2026-10-20T21:58:25","date_gmt":"2026-10-20T19:58:25","guid":{"rendered":"https:\/\/www.camping-aubigny.com\/elaia-animations-2\/"},"modified":"2026-10-20T21:58:25","modified_gmt":"2026-10-20T19:58:25","slug":"elaia-animations","status":"publish","type":"page","link":"https:\/\/www.camping-aubigny.com\/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    background: var(--ea-cream);\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  .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 data-rsssl=1> 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 ea-hero--plain\">\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>March\u00e9 hebdomadaire Aubigny-sur-N\u00e8re<\/strong> \u2014 Du 31\/12\/2025 au 30\/12\/2026 \u00e0 23:59 \u2014 18700 Aubigny-sur-N\u00e8re<\/li>\n              <li><strong>Gien Market - Wednesday<\/strong> \u2014 Du 31\/12\/2025 \u00e0 08:00 au 30\/12\/2026 \u00e0 23:59 \u2014 45500 Gien<\/li>\n              <li><strong>March\u00e9 de Coullons - Vendredi<\/strong> \u2014 Du 31\/12\/2025 \u00e0 08:00 au 30\/12\/2026 \u00e0 23:59 \u2014 45720 Coullons<\/li>\n              <li><strong>Beaulieu-sur-Loire Market - Wednesday<\/strong> \u2014 Du 31\/12\/2025 \u00e0 08:30 au 30\/12\/2026 \u00e0 23:59 \u2014 45630 Ch\u00e2tillon-sur-Loire<\/li>\n              <li><strong>Briare Market - Friday<\/strong> \u2014 Du 31\/12\/2025 \u00e0 08:30 au 30\/12\/2026 \u00e0 23:59 \u2014 45250 Ch\u00e2tillon-sur-Loire<\/li>\n              <li><strong>Weekly Market Mery-es-Bois<\/strong> \u2014 Du 31\/12\/2025 \u00e0 16:00 au 30\/12\/2026 \u00e0 23:59 \u2014 18380 M\u00e9ry-\u00e8s-Bois<\/li>\n              <li><strong>Gien Market - Saturday<\/strong> \u2014 Du 13\/03\/2026 \u00e0 08:00 au 30\/12\/2026 \u00e0 23:59 \u2014 45500 Gien<\/li>\n              <li><strong>Exposition \u00c9closion<\/strong> \u2014 Du 20\/03\/2026 \u00e0 14:00 au 31\/10\/2026 \u00e0 23:59 \u2014 18250 Henrichemont<\/li>\n              <li><strong>Louiseon Rocard Exhibition<\/strong> \u2014 Du 31\/08\/2026 au 31\/10\/2026 \u00e0 23:59 \u2014 18250 Neuvy-Deux-Clochers<\/li>\n              <li><strong>Temporary exhibition: R\u00e9trogaming: return to space video games<\/strong> \u2014 Du 31\/08\/2026 \u00e0 13:30 au 02\/01\/2027 \u00e0 23:59 \u2014 18330 Nan\u00e7ay<\/li>\n              <li><strong>Vassil Ivanoff Exhibition<\/strong> \u2014 Du 31\/08\/2026 \u00e0 14:00 au 10\/11\/2026 \u00e0 23:59 \u2014 18250 Henrichemont<\/li>\n              <li><strong>Exposition Roland Sch\u00e4r<\/strong> \u2014 Du 31\/08\/2026 \u00e0 18:00 au 24\/10\/2026 \u00e0 23:59 \u2014 18260 Vailly-sur-Sauldre<\/li>\n              <li><strong>Exposition Jos\u00e9 Canon<\/strong> \u2014 Du 01\/09\/2026 au 29\/10\/2026 \u00e0 23:59 \u2014 18330 Neuvy-sur-Barangeon<\/li>\n              <li><strong>Exhibition &quot;Restoration of the Bridges on the Sauldre Canal at Brinon&quot;<\/strong> \u2014 Du 18\/09\/2026 au 23\/10\/2026 \u00e0 23:59 \u2014 18410 Brinon-sur-Sauldre<\/li>\n              <li><strong>visites compl\u00e8tes de l&#039;usine<\/strong> \u2014 Du 30\/09\/2026 \u00e0 10:00 au 27\/10\/2026 \u00e0 23:59 \u2014 45500 Gien<\/li>\n              <li><strong>Expositions d&#039;Automne<\/strong> \u2014 Du 02\/10\/2026 \u00e0 10:00 au 05\/12\/2026 \u00e0 23:59 \u2014 18330 Nan\u00e7ay<\/li>\n              <li><strong>Micro-Folie All Crazy in Japan!<\/strong> \u2014 Du 08\/10\/2026 \u00e0 10:00 au 20\/11\/2026 \u00e0 23:59 \u2014 45250 Briare<\/li>\n              <li><strong>&quot;The Beauty Will Save the World&quot; Exhibition<\/strong> \u2014 Du 15\/10\/2026 au 14\/11\/2026 \u00e0 23:59 \u2014 18380 Ennordres<\/li>\n              <li><strong>Halloween Trail in Gien<\/strong> \u2014 Du 16\/10\/2026 au 29\/10\/2026 \u00e0 23:59 \u2014 45500 Gien<\/li>\n              <li><strong>The Great Fires 2026<\/strong> \u2014 Du 16\/10\/2026 au 24\/10\/2026 \u00e0 23:59 \u2014 18250 Henrichemont<\/li>\n              <li><strong>Jeu en famille &quot;Le bateau fant\u00f4me de Briare&quot;<\/strong> \u2014 Du 16\/10\/2026 \u00e0 14:00 au 31\/10\/2026 \u00e0 23:59 \u2014 45250 Briare<\/li>\n              <li><strong>Cours de dessin et de pastel<\/strong> \u2014 Du 22\/10\/2026 \u00e0 14:30 au 22\/10\/2026 \u00e0 23:59 \u2014 45500 Saint-Brisson-sur-Loire<\/li>\n              <li><strong>50th Autumn Art Fair<\/strong> \u2014 Du 23\/10\/2026 au 31\/10\/2026 \u00e0 23:59 \u2014 45420 Bonny-sur-Loire<\/li>\n              <li><strong>Exhibition of Bruno Pinard&#039;s Works<\/strong> \u2014 Du 23\/10\/2026 \u00e0 14:00 au 20\/11\/2026 \u00e0 23:59 \u2014 45360 Ch\u00e2tillon-sur-Loire<\/li>\n              <li><strong>Creative Workshop: &quot;Arbracadabra&quot;<\/strong> \u2014 Du 23\/10\/2026 \u00e0 14:30 au 23\/10\/2026 \u00e0 23:59 \u2014 45500 Gien<\/li>\n              <li><strong>Guided Tour<\/strong> \u2014 Du 23\/10\/2026 \u00e0 14:30 au 23\/10\/2026 \u00e0 23:59 \u2014 45500 Saint-Gondon<\/li>\n              <li><strong>BOOGIE-WOOGIE Jazz Funk CONCERT - Ben TOURY and Johann FIOT<\/strong> \u2014 Du 23\/10\/2026 \u00e0 20:00 au 23\/10\/2026 \u00e0 23:59 \u2014 41600 Chaon<\/li>\n              <li><strong>Les Voix de Rivendell Vocal Ensemble Concert<\/strong> \u2014 Du 23\/10\/2026 \u00e0 20:30 au 23\/10\/2026 \u00e0 23:59 \u2014 45360 Ch\u00e2tillon-sur-Loire<\/li>\n              <li><strong>Bourse aux oiseaux<\/strong> \u2014 Du 24\/10\/2026 \u00e0 09:00 au 24\/10\/2026 \u00e0 23:59 \u2014 45360 Ch\u00e2tillon-sur-Loire<\/li>\n              <li><strong>Giennois Producers Market<\/strong> \u2014 Du 24\/10\/2026 \u00e0 09:00 au 24\/10\/2026 \u00e0 23:59 \u2014 45500 Poilly-lez-Gien<\/li>\n              <li><strong>Sauerbraten Meal Followed by a Dance Tea<\/strong> \u2014 Du 24\/10\/2026 \u00e0 12:00 au 24\/10\/2026 \u00e0 23:59 \u2014 45620 Cerdon<\/li>\n              <li><strong>Concert d&#039;automne<\/strong> \u2014 Du 24\/10\/2026 \u00e0 15:00 au 24\/10\/2026 \u00e0 23:59 \u2014 45360 Ch\u00e2tillon-sur-Loire<\/li>\n              <li><strong>Mushroom outing<\/strong> \u2014 Du 27\/10\/2026 \u00e0 10:00 au 27\/10\/2026 \u00e0 23:59 \u2014 18330 Neuvy-sur-Barangeon<\/li>\n              <li><strong>Guided tour: &quot;Candy Hunt&quot; 2026<\/strong> \u2014 Du 27\/10\/2026 \u00e0 14:30 au 27\/10\/2026 \u00e0 23:59 \u2014 45500 Gien<\/li>\n              <li><strong>Nom d&#039;un champignon !<\/strong> \u2014 Du 27\/10\/2026 \u00e0 16:00 au 27\/10\/2026 \u00e0 23:59 \u2014 18330 Neuvy-sur-Barangeon<\/li>\n              <li><strong>Halloween Laser Game<\/strong> \u2014 Du 29\/10\/2026 \u00e0 16:00 au 29\/10\/2026 \u00e0 23:59 \u2014 45500 Gien<\/li>\n              <li><strong>March\u00e9 d&#039;halloween<\/strong> \u2014 Du 29\/10\/2026 \u00e0 16:00 au 29\/10\/2026 \u00e0 23:59 \u2014 45500 Gien<\/li>\n              <li><strong>Halloween \u00e0 Villemurlin<\/strong> \u2014 Du 29\/10\/2026 \u00e0 18:00 au 29\/10\/2026 \u00e0 23:59 \u2014 45600 Villemurlin<\/li>\n              <li><strong>S\u00e9ance aquafitness sp\u00e9cial Halloween<\/strong> \u2014 Du 29\/10\/2026 \u00e0 19:00 au 29\/10\/2026 \u00e0 23:59 \u2014 45250 Briare<\/li>\n              <li><strong>The Night of the Burning<\/strong> \u2014 Du 29\/10\/2026 \u00e0 19:00 au 29\/10\/2026 \u00e0 23:59 \u2014 18240 Santranges<\/li>\n              <li><strong>Halloween at Blancafort Castle<\/strong> \u2014 Du 30\/10\/2026 \u00e0 10:00 au 30\/10\/2026 \u00e0 23:59 \u2014 18410 Blancafort<\/li>\n              <li><strong>Halloween<\/strong> \u2014 Du 30\/10\/2026 \u00e0 14:00 au 30\/10\/2026 \u00e0 23:59 \u2014 45420 Bonny-sur-Loire<\/li>\n              <li><strong>Soir\u00e9e Halloween<\/strong> \u2014 Du 30\/10\/2026 \u00e0 16:30 au 30\/10\/2026 \u00e0 23:59 \u2014 45630 Beaulieu-sur-Loire<\/li>\n              <li><strong>Night Tour of the City<\/strong> \u2014 Du 30\/10\/2026 \u00e0 17:30 au 30\/10\/2026 \u00e0 23:59 \u2014 45500 Gien<\/li>\n              <li><strong>Halloween<\/strong> \u2014 Du 30\/10\/2026 \u00e0 18:00 au 30\/10\/2026 \u00e0 23:59 \u2014 45360 Cernoy-en-Berry<\/li>\n              <li><strong>Halloween Detective Game<\/strong> \u2014 Du 30\/10\/2026 \u00e0 18:00 au 30\/10\/2026 \u00e0 23:59 \u2014 18700 Oizon<\/li>\n              <li><strong>XIT LIVE #2 - Halloween Party<\/strong> \u2014 Du 30\/10\/2026 \u00e0 18:00 au 30\/10\/2026 \u00e0 23:59 \u2014 18700 Aubigny-sur-N\u00e8re<\/li>\n              <li><strong>Halloween Evening<\/strong> \u2014 Du 30\/10\/2026 \u00e0 19:00 au 30\/10\/2026 \u00e0 23:59 \u2014 45360 Ch\u00e2tillon-sur-Loire<\/li>\n              <li><strong>Seed Swap<\/strong> \u2014 Du 31\/10\/2026 \u00e0 09:00 au 31\/10\/2026 \u00e0 23:59 \u2014 18330 Neuvy-sur-Barangeon<\/li>\n              <li><strong>Alex Pasqualini Exhibition<\/strong> \u2014 Du 02\/11\/2026 au 30\/12\/2026 \u00e0 23:59 \u2014 18330 Neuvy-sur-Barangeon<\/li>\n              <li><strong>George Sand, 150 Years of Modernity<\/strong> \u2014 Du 05\/11\/2026 au 27\/11\/2026 \u00e0 23:59 \u2014 18240 Belleville-sur-Loire<\/li>\n              <li><strong>Local Products Market<\/strong> \u2014 Du 05\/11\/2026 \u00e0 16:00 au 05\/11\/2026 \u00e0 23:59 \u2014 45360 Cernoy-en-Berry<\/li>\n              <li><strong>Guided tour of the biodiversity mill<\/strong> \u2014 Du 06\/11\/2026 \u00e0 09:00 au 06\/11\/2026 \u00e0 23:59 \u2014 18330 Neuvy-sur-Barangeon<\/li>\n              <li><strong>Croq\u2019Histoires<\/strong> \u2014 Du 06\/11\/2026 \u00e0 10:30 au 06\/11\/2026 \u00e0 23:59 \u2014 45500 Gien<\/li>\n              <li><strong>Festi&#039;Soupe<\/strong> \u2014 Du 06\/11\/2026 \u00e0 19:00 au 06\/11\/2026 \u00e0 23:59 \u2014 45360 Ch\u00e2tillon-sur-Loire<\/li>\n              <li><strong>Vide-grenier du 11 novembre<\/strong> \u2014 Du 10\/11\/2026 au 10\/11\/2026 \u00e0 23:59 \u2014 45360 Ch\u00e2tillon-sur-Loire<\/li>\n              <li><strong>Concert Le Nouveau Ch\u0153ur<\/strong> \u2014 Du 10\/11\/2026 \u00e0 17:00 au 10\/11\/2026 \u00e0 23:59 \u2014 18410 Argent-sur-Sauldre<\/li>\n              <li><strong>De Londres \u00e0 Edimbourg<\/strong> \u2014 Du 12\/11\/2026 \u00e0 18:30 au 12\/11\/2026 \u00e0 23:59 \u2014 18700 Aubigny-sur-N\u00e8re<\/li>\n              <li><strong>Bourse aux jouets<\/strong> \u2014 Du 13\/11\/2026 \u00e0 14:00 au 18\/12\/2026 \u00e0 23:59 \u2014 45420 Bonny-sur-Loire<\/li>\n              <li><strong>Gourmet Market<\/strong> \u2014 Du 13\/11\/2026 \u00e0 14:00 au 13\/11\/2026 \u00e0 23:59 \u2014 18240 Belleville-sur-Loire<\/li>\n              <li><strong>St. Cecilia Concert with Bonny-sur-Loire Harmony<\/strong> \u2014 Du 14\/11\/2026 au 14\/11\/2026 \u00e0 23:59 \u2014 45420 Bonny-sur-Loire<\/li>\n              <li><strong>Cyclo-cross<\/strong> \u2014 Du 14\/11\/2026 \u00e0 13:30 au 14\/11\/2026 \u00e0 23:59 \u2014 45360 Ch\u00e2tillon-sur-Loire<\/li>\n              <li><strong>[Concert] Effervescence &amp; Pop&amp;Choeurs Choir<\/strong> \u2014 Du 14\/11\/2026 \u00e0 15:00 au 14\/11\/2026 \u00e0 23:59 \u2014 18240 Savigny-en-Sancerre<\/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\":28,\"name\":\"March\\u00e9 hebdomadaire Aubigny-sur-N\\u00e8re\",\"type\":\"evenements-locaux-358\",\"category\":\"marches-foires\",\"label\":\"Du 31\\\/12\\\/2025 au 30\\\/12\\\/2026 \\u00e0 23:59\",\"start\":\"2025-12-31\",\"end\":\"2026-12-30\",\"start_time\":\"\",\"end_time\":\"\",\"open_start\":false,\"city\":\"18700 Aubigny-sur-N\\u00e8re\",\"onsite\":false,\"spot\":\"\",\"registration\":false,\"description\":\"Chaque samedi matin, le march\\u00e9 hebdomadaire d\\u2019Aubigny-sur-N\\u00e8re vous invite \\u00e0 une immersion gourmande et artisanale au c\\u0153ur de cette charmante cit\\u00e9 des Stuarts,  depuis le haut de la rue du Prieur\\u00e9 jusqu'\\u00e0 la place Adrien Arnoux. Entre produits du terroir, rencontres chaleureuses et ambiance pittoresque, ce march\\u00e9 est un incontournable pour les amateurs de saveurs locales et d\\u2019authenticit\\u00e9.\\n\\nLes rues d\\u2019Aubigny-sur-N\\u00e8re s\\u2019animent sous les \\u00e9tals color\\u00e9s des producteurs et artisans locaux. Fromages affin\\u00e9s, charcuteries savoureuses, pains croustillants, fruits et l\\u00e9gumes de saison, miel parfum\\u00e9 et autres douceurs vous attendent pour une exp\\u00e9rience gustative unique.\\n\\nDes parking sont \\u00e0 proximit\\u00e9, permettant d'acc\\u00e9der au march\\u00e9 \\u00e0 pied.\",\"image\":\"\",\"link\":\"\"},{\"id\":32,\"name\":\"Gien Market - Wednesday\",\"type\":\"evenements-locaux-358\",\"category\":\"markets-fairs\",\"label\":\"Du 31\\\/12\\\/2025 \\u00e0 08:00 au 30\\\/12\\\/2026 \\u00e0 23:59\",\"start\":\"2025-12-31\",\"end\":\"2026-12-30\",\"start_time\":\"08:00\",\"end_time\":\"\",\"open_start\":false,\"city\":\"45500 Gien\",\"onsite\":false,\"spot\":\"\",\"registration\":false,\"description\":\"Every Wednesday morning, Place Leclerc, in front of the Anne de Beaujeu center, a very friendly market where you can do most of your grocery shopping: fruits and vegetables, meat, cheese, fish... The vendors will be happy to present their quality products and production.\",\"image\":\"\",\"link\":\"https:\\\/\\\/www.mtonmarche.com\\\/marche\\\/212-gien-place-jean-jaures\"},{\"id\":25,\"name\":\"March\\u00e9 de Coullons - Vendredi\",\"type\":\"evenements-locaux-358\",\"category\":\"marches-foires\",\"label\":\"Du 31\\\/12\\\/2025 \\u00e0 08:00 au 30\\\/12\\\/2026 \\u00e0 23:59\",\"start\":\"2025-12-31\",\"end\":\"2026-12-30\",\"start_time\":\"08:00\",\"end_time\":\"\",\"open_start\":false,\"city\":\"45720 Coullons\",\"onsite\":false,\"spot\":\"\",\"registration\":false,\"description\":\"March\\u00e9 tous les vendredis matins sur la place du village\",\"image\":\"\",\"link\":\"https:\\\/\\\/www.mtonmarche.com\\\/marche\\\/236-coullons-place-du-monument\"},{\"id\":39,\"name\":\"Beaulieu-sur-Loire Market - Wednesday\",\"type\":\"evenements-locaux-358\",\"category\":\"marches-foires\",\"label\":\"Du 31\\\/12\\\/2025 \\u00e0 08:30 au 30\\\/12\\\/2026 \\u00e0 23:59\",\"start\":\"2025-12-31\",\"end\":\"2026-12-30\",\"start_time\":\"08:30\",\"end_time\":\"\",\"open_start\":false,\"city\":\"45630 Ch\\u00e2tillon-sur-Loire\",\"onsite\":false,\"spot\":\"\",\"registration\":false,\"description\":\"The market takes place on Wednesday mornings from 8:30 am to 12 pm. Traditional market in the heart of the medieval town, surrounded by all necessary local shops: pharmacy, bakery, restaurant, caf\\u00e9s... You will find dairy, cold cuts, meats, vegetables, and occasionally clothing.\",\"image\":\"\",\"link\":\"https:\\\/\\\/www.mtonmarche.com\\\/marche\\\/209-beaulieu-sur-loire-place-de-l-eglise\"},{\"id\":5,\"name\":\"Briare Market - Friday\",\"type\":\"evenements-locaux-358\",\"category\":\"markets-fairs\",\"label\":\"Du 31\\\/12\\\/2025 \\u00e0 08:30 au 30\\\/12\\\/2026 \\u00e0 23:59\",\"start\":\"2025-12-31\",\"end\":\"2026-12-30\",\"start_time\":\"08:30\",\"end_time\":\"\",\"open_start\":false,\"city\":\"45250 Ch\\u00e2tillon-sur-Loire\",\"onsite\":false,\"spot\":\"\",\"registration\":false,\"description\":\"The market is held on Friday mornings from 8:30 am to 12 pm. The Fairground is the must-see place. Local producers welcome you. You will find on their stalls: fruits and vegetables, poultry, fish, wines, flowers, tableware... Production region: Centre Val de Loire. Products: Cheeses, Fruits and vegetables, Fish, Charcuterie, Meats, Wines, Poultry. Accessibility for people with reduced mobility.\",\"image\":\"\",\"link\":\"https:\\\/\\\/www.mtonmarche.com\\\/marche\\\/233-briare-marche-place-du-champ-de-foire\"},{\"id\":33,\"name\":\"Weekly Market Mery-es-Bois\",\"type\":\"evenements-locaux-358\",\"category\":\"markets-fairs\",\"label\":\"Du 31\\\/12\\\/2025 \\u00e0 16:00 au 30\\\/12\\\/2026 \\u00e0 23:59\",\"start\":\"2025-12-31\",\"end\":\"2026-12-30\",\"start_time\":\"16:00\",\"end_time\":\"\",\"open_start\":false,\"city\":\"18380 M\\u00e9ry-\\u00e8s-Bois\",\"onsite\":false,\"spot\":\"\",\"registration\":false,\"description\":\"Our local artisans and merchants look forward to welcoming you!\",\"image\":\"\",\"link\":\"\"},{\"id\":24,\"name\":\"Gien Market - Saturday\",\"type\":\"evenements-locaux-358\",\"category\":\"marches-foires\",\"label\":\"Du 13\\\/03\\\/2026 \\u00e0 08:00 au 30\\\/12\\\/2026 \\u00e0 23:59\",\"start\":\"2026-03-13\",\"end\":\"2026-12-30\",\"start_time\":\"08:00\",\"end_time\":\"\",\"open_start\":false,\"city\":\"45500 Gien\",\"onsite\":false,\"spot\":\"\",\"registration\":false,\"description\":\"Every Saturday morning at Place de la Victoire. An average of 100 traders at the Market of Place de la Victoire where you can find all types of products, whether food or manufactured.\",\"image\":\"\",\"link\":\"https:\\\/\\\/www.mtonmarche.com\\\/marche\\\/248-gien-place-de-la-victoire\"},{\"id\":12,\"name\":\"Exposition \\u00c9closion\",\"type\":\"evenements-locaux-358\",\"category\":\"expositions\",\"label\":\"Du 20\\\/03\\\/2026 \\u00e0 14:00 au 31\\\/10\\\/2026 \\u00e0 23:59\",\"start\":\"2026-03-20\",\"end\":\"2026-10-31\",\"start_time\":\"14:00\",\"end_time\":\"\",\"open_start\":false,\"city\":\"18250 Henrichemont\",\"onsite\":false,\"spot\":\"\",\"registration\":false,\"description\":\"La Galerie Le Totem de La Borne accueille l\\u2019exposition \\u00ab \\u00c9closion \\u00bb, qui explore les diff\\u00e9rentes \\u00e9tapes de l\\u2019apparition et de la transformation des formes dans la cr\\u00e9ation artistique. Cette exposition collective r\\u00e9unit les artistes de la collective Les Argil\\u00e9es \\u2014 Livia Dalbouse, Sarah Davidoux, Oph\\u00e9lia Derely, H\\u00e9l\\u00e8ne Foucher et Lila Signolet Bigallet \\u2014 ainsi que \\u00c9lise Poivet et Greky. \\u00c0 travers leurs \\u0153uvres, ces artistes proposent des regards sensibles sur la mati\\u00e8re et le geste cr\\u00e9atif, au c\\u0153ur de la c\\u00e9ramique contemporaine. L\\u2019exposition invite les visiteurs \\u00e0 d\\u00e9couvrir la diversit\\u00e9 des approches et des univers artistiques pr\\u00e9sent\\u00e9s au Totem, lieu d\\u00e9di\\u00e9 \\u00e0 la c\\u00e9ramique et \\u00e0 la cr\\u00e9ation \\u00e0 La Borne.\",\"image\":\"\",\"link\":\"https:\\\/\\\/letotemdelaborne.com\\\/\"},{\"id\":22,\"name\":\"Louiseon Rocard Exhibition\",\"type\":\"evenements-locaux-358\",\"category\":\"exhibitions\",\"label\":\"Du 31\\\/08\\\/2026 au 31\\\/10\\\/2026 \\u00e0 23:59\",\"start\":\"2026-08-31\",\"end\":\"2026-10-31\",\"start_time\":\"\",\"end_time\":\"\",\"open_start\":false,\"city\":\"18250 Neuvy-Deux-Clochers\",\"onsite\":false,\"spot\":\"\",\"registration\":false,\"description\":\"Visual artist Louiseon Rocard offers an immersive experience blending images, objects, and devices to explore. His approach revolves around the figure of the avatar, regarded as a fictional double and a creation tool, allowing navigation between various mediums. Through clothing-sculptures, video loops, and character design research, the artist questions notions of protection and transformation. With the Towarian project, the Vespere Tower becomes a quest space inspired by role-playing game logic, where recomposed avatars and artifacts guide visitors in an exploration at the intersection of contemporary art and playful universes.\",\"image\":\"\",\"link\":\"https:\\\/\\\/www.latourdevesvre.fr\\\/\"},{\"id\":16,\"name\":\"Temporary exhibition: R\\u00e9trogaming: return to space video games\",\"type\":\"evenements-locaux-358\",\"category\":\"exhibitions\",\"label\":\"Du 31\\\/08\\\/2026 \\u00e0 13:30 au 02\\\/01\\\/2027 \\u00e0 23:59\",\"start\":\"2026-08-31\",\"end\":\"2027-01-02\",\"start_time\":\"13:30\",\"end_time\":\"\",\"open_start\":false,\"city\":\"18330 Nan\\u00e7ay\",\"onsite\":false,\"spot\":\"\",\"registration\":false,\"description\":\"The playable R\\u00e9trogaming exhibit: return to space video games promises an immersive and captivating experience! Grab the controllers and take command of iconic consoles such as the legendary Atari 2600, the classic Super Nintendo, or the legendary PlayStation 4.\\n\\nDesigned for an intergenerational audience, the R\\u00e9trogaming: return to space video games exhibition offers an interactive, educational, and friendly experience.\\n\\nPlaying Asteroid on a 1981 Atari console or discovering the Star Wars Battlefront II game on a 2017 PlayStation 4 console, you understand the evolution of a media that has become essential in France and abroad through experimentation.\",\"image\":\"\",\"link\":\"http:\\\/\\\/www.poledesetoiles.fr\\\/\"},{\"id\":30,\"name\":\"Vassil Ivanoff Exhibition\",\"type\":\"evenements-locaux-358\",\"category\":\"exhibitions\",\"label\":\"Du 31\\\/08\\\/2026 \\u00e0 14:00 au 10\\\/11\\\/2026 \\u00e0 23:59\",\"start\":\"2026-08-31\",\"end\":\"2026-11-10\",\"start_time\":\"14:00\",\"end_time\":\"\",\"open_start\":false,\"city\":\"18250 Henrichemont\",\"onsite\":false,\"spot\":\"\",\"registration\":false,\"description\":\"The La Borne Museum highlights Vassil Ivanoff (1897-1973) through a retrospective exhibition installed in the village chapel. Over 150 works trace the journey of this Bulgarian-born artist, settled in La Borne (since 1945), and a prominent figure in ceramics. This exhibition provides a better understanding of his work and his connection with this territory known for its pottery craftsmanship. A book dedicated to the artist is also available.\",\"image\":\"\",\"link\":\"\"},{\"id\":53,\"name\":\"Exposition Roland Sch\\u00e4r\",\"type\":\"evenements-locaux-358\",\"category\":\"expositions\",\"label\":\"Du 31\\\/08\\\/2026 \\u00e0 18:00 au 24\\\/10\\\/2026 \\u00e0 23:59\",\"start\":\"2026-08-31\",\"end\":\"2026-10-24\",\"start_time\":\"18:00\",\"end_time\":\"\",\"open_start\":false,\"city\":\"18260 Vailly-sur-Sauldre\",\"onsite\":false,\"spot\":\"\",\"registration\":false,\"description\":\"Cet \\u00e9t\\u00e9, Le Cerf poursuit sa vocation de lieu de rencontres et de d\\u00e9couvertes en ouvrant ses portes \\u00e0 l\\u2019artiste plasticien Roland Sch\\u00e4r.\\n\\nInstall\\u00e9 \\u00e0 Vailly-sur-Sauldre, @rolandschar d\\u00e9veloppe depuis de nombreuses ann\\u00e9es une \\u0153uvre sensible et singuli\\u00e8re, expos\\u00e9e en France comme \\u00e0 l\\u2019international. Son travail puise son inspiration dans les paysages travers\\u00e9s, les mat\\u00e9riaux naturels, les formes organiques et les g\\u00e9om\\u00e9tries qui structurent notre regard\\u2026\",\"image\":\"\",\"link\":\"https:\\\/\\\/lecerfvailly.fr\\\/\"},{\"id\":1,\"name\":\"Exposition Jos\\u00e9 Canon\",\"type\":\"evenements-locaux-358\",\"category\":\"expositions\",\"label\":\"Du 01\\\/09\\\/2026 au 29\\\/10\\\/2026 \\u00e0 23:59\",\"start\":\"2026-09-01\",\"end\":\"2026-10-29\",\"start_time\":\"\",\"end_time\":\"\",\"open_start\":false,\"city\":\"18330 Neuvy-sur-Barangeon\",\"onsite\":false,\"spot\":\"\",\"registration\":false,\"description\":\"S\\u00e9rie noire, photographies\",\"image\":\"\",\"link\":\"\"},{\"id\":21,\"name\":\"Exhibition \\\"Restoration of the Bridges on the Sauldre Canal at Brinon\\\"\",\"type\":\"evenements-locaux-358\",\"category\":\"exhibitions\",\"label\":\"Du 18\\\/09\\\/2026 au 23\\\/10\\\/2026 \\u00e0 23:59\",\"start\":\"2026-09-18\",\"end\":\"2026-10-23\",\"start_time\":\"\",\"end_time\":\"\",\"open_start\":false,\"city\":\"18410 Brinon-sur-Sauldre\",\"onsite\":false,\"spot\":\"\",\"registration\":false,\"description\":\"Immerse yourself in the history of the Sauldre Canal through the exhibition \\\"Restoration of the Bridges on the Sauldre Canal at Brinon\\\". Presented at the Maison de la For\\u00eat, it highlights restoration work on these emblematic structures of local heritage.\\n\\nAn ideal exhibition to discover the history and riches of the canal running through Brinon-sur-Sauldre.\\n\\nTake the opportunity to explore the Maison de la For\\u00eat and learn more about the natural and cultural heritage of Sologne.\",\"image\":\"\",\"link\":\"\"},{\"id\":8,\"name\":\"visites compl\\u00e8tes de l'usine\",\"type\":\"evenements-locaux-358\",\"category\":\"en-famille\",\"label\":\"Du 30\\\/09\\\/2026 \\u00e0 10:00 au 27\\\/10\\\/2026 \\u00e0 23:59\",\"start\":\"2026-09-30\",\"end\":\"2026-10-27\",\"start_time\":\"10:00\",\"end_time\":\"\",\"open_start\":false,\"city\":\"45500 Gien\",\"onsite\":false,\"spot\":\"\",\"registration\":false,\"description\":\"Dates : 1, 7, 15, 21 et 28 octobre \\u00e0 9h30\\nTarif : 18\\u20ac\\nR\\u00e9servation obligatoire au 02.38.05.21.06 ou museegien@gien.com\",\"image\":\"\",\"link\":\"https:\\\/\\\/www.gien.com\\\/fr\\\/contact-et-faq-musee\"},{\"id\":4,\"name\":\"Expositions d'Automne\",\"type\":\"evenements-locaux-358\",\"category\":\"expositions\",\"label\":\"Du 02\\\/10\\\/2026 \\u00e0 10:00 au 05\\\/12\\\/2026 \\u00e0 23:59\",\"start\":\"2026-10-02\",\"end\":\"2026-12-05\",\"start_time\":\"10:00\",\"end_time\":\"\",\"open_start\":false,\"city\":\"18330 Nan\\u00e7ay\",\"onsite\":false,\"spot\":\"\",\"registration\":false,\"description\":\"C\\u00e9ramique, estampe, orf\\u00e8vrerie, peinture, dessin, photographie, sculpture, verre : la galerie abrite en permanence plusieurs centaines d'oeuvres s\\u00e9lectionn\\u00e9es avec soin\\n\\nFond\\u00e9e en 1975 par G\\u00e9rard et Sophie Capazza, la galerie a \\u00e9t\\u00e9 reprise il y a onze ans par Laura et Denis Capazza-Durand ayant \\u00e0 c\\u0153ur, avec leur \\u00e9quipe, de partager avec vous leur passion. \\n\\nD\\u00e9couvre ce troisi\\u00e8me cycle d'exposition : \\n- J\\u00e9r\\u00e9mie Lenoir, photographe\\n- Joan Serra, c\\u00e9ramique\\n- Coco T\\u00e9x\\u00e8dre, peinture\\n- Christian Renonciat, sculpture - bois, dans le cadre du festival AR(t)CHIPEL, sur une proposition d'Anne-Laure Chamboissier\",\"image\":\"\",\"link\":\"\"},{\"id\":44,\"name\":\"Micro-Folie All Crazy in Japan!\",\"type\":\"evenements-locaux-358\",\"category\":\"exhibitions\",\"label\":\"Du 08\\\/10\\\/2026 \\u00e0 10:00 au 20\\\/11\\\/2026 \\u00e0 23:59\",\"start\":\"2026-10-08\",\"end\":\"2026-11-20\",\"start_time\":\"10:00\",\"end_time\":\"\",\"open_start\":false,\"city\":\"45250 Briare\",\"onsite\":false,\"spot\":\"\",\"registration\":false,\"description\":\"Embark on a journey to the heart of Japan without leaving Briare! From October 9 to November 21, 2026, Micro-Folie offers a rich and original program focused on Japanese culture. Discover the digital museum, exhibitions, games, workshops, the world of manga, and Japanese lifestyle. An entertaining and cultural experience to share with family or friends at Ch\\u00e2teau de Trousse- Barri\\u00e8re.\",\"image\":\"\",\"link\":\"\"},{\"id\":23,\"name\":\"\\\"The Beauty Will Save the World\\\" Exhibition\",\"type\":\"evenements-locaux-358\",\"category\":\"expositions\",\"label\":\"Du 15\\\/10\\\/2026 au 14\\\/11\\\/2026 \\u00e0 23:59\",\"start\":\"2026-10-15\",\"end\":\"2026-11-14\",\"start_time\":\"\",\"end_time\":\"\",\"open_start\":false,\"city\":\"18380 Ennordres\",\"onsite\":false,\"spot\":\"\",\"registration\":false,\"description\":\"What if art came to meet you around a street corner? From October 16 to November 15, 2026, Ennordres hosts the national exhibition The Beauty Will Save The World, dedicated to \\\"Portrait in Art\\\".\\n\\nThrough an artistic walk in the village to the Arrachis leisure base, discover reproductions of masterpieces and explore associated cultural mediations through QR codes. Ennordres, the smallest participating commune in this edition, fully illustrates the ambition of the system: to make art accessible to all, everywhere, by investing in public space.\\n\\nAn invitation to see art and your territory with a new look!\",\"image\":\"\",\"link\":\"https:\\\/\\\/www.labeautesauveralemonde.fr\\\/\"},{\"id\":20,\"name\":\"Halloween Trail in Gien\",\"type\":\"evenements-locaux-358\",\"category\":\"family\",\"label\":\"Du 16\\\/10\\\/2026 au 29\\\/10\\\/2026 \\u00e0 23:59\",\"start\":\"2026-10-16\",\"end\":\"2026-10-29\",\"start_time\":\"\",\"end_time\":\"\",\"open_start\":false,\"city\":\"45500 Gien\",\"onsite\":false,\"spot\":\"\",\"registration\":false,\"description\":\"Myths have deserted Gien, weakening its protective creatures. Since a curse transformed the princess into a witch, the city is under her influence. Find the hidden creatures, solve their riddles, and break the curse.\\n\\nGame booklet available at the Tourist Office.\\nSelf-guided trail.\\nIn partnership with the Giennois Traders Union.\",\"image\":\"\",\"link\":\"\"},{\"id\":10,\"name\":\"The Great Fires 2026\",\"type\":\"evenements-locaux-358\",\"category\":\"concerts-musique-festivals\",\"label\":\"Du 16\\\/10\\\/2026 au 24\\\/10\\\/2026 \\u00e0 23:59\",\"start\":\"2026-10-16\",\"end\":\"2026-10-24\",\"start_time\":\"\",\"end_time\":\"\",\"open_start\":false,\"city\":\"18250 Henrichemont\",\"onsite\":false,\"spot\":\"\",\"registration\":false,\"description\":\"From October 17 to 25, 2026, immerse yourself in ceramics at La Borne, a globally renowned village for wood firing.\\n\\nFiring, cooking, and unloading demonstrations will animate this new edition alongside workshops, visits, exhibitions, conferences, screenings, and activities for adults and children. Experienced ceramists, beginners, and the curious alike will meet and share their passion in a warm atmosphere.\\n\\nAlso discover the exhibitions of the Contemporary Ceramic Center, the creations of village artists, the solidarity operation of 1,000 bowls \\u201cGreat Fires 2026\\u201d with a local soup, and a festive, musical evening.\\n\\nA unique event to discover craftsmanship, meet artists, and fully experience the celebration.\",\"image\":\"\",\"link\":\"https:\\\/\\\/www.laborne.org\\\/\"},{\"id\":38,\"name\":\"Jeu en famille \\\"Le bateau fant\\u00f4me de Briare\\\"\",\"type\":\"evenements-locaux-358\",\"category\":\"en-famille\",\"label\":\"Du 16\\\/10\\\/2026 \\u00e0 14:00 au 31\\\/10\\\/2026 \\u00e0 23:59\",\"start\":\"2026-10-16\",\"end\":\"2026-10-31\",\"start_time\":\"14:00\",\"end_time\":\"\",\"open_start\":false,\"city\":\"45250 Briare\",\"onsite\":false,\"spot\":\"\",\"registration\":false,\"description\":\"\\u00c0 l\\u2019occasion des vacances de la Toussaint, partez \\u00e0 l\\u2019aventure au Mus\\u00e9e des 2 Marines et du Pont-Canal \\u00e0 Briare avec \\u00ab Le bateau fant\\u00f4me de Briare \\u00bb ! Du 17 octobre au 1er novembre 2026, petits et grands sont invit\\u00e9s \\u00e0 mener l\\u2019enqu\\u00eate et \\u00e0 retrouver les pi\\u00e8ces du bateau fant\\u00f4me gr\\u00e2ce \\u00e0 un jeu de d\\u00e9couverte \\u00e0 r\\u00e9aliser en toute autonomie dans le mus\\u00e9e. Une activit\\u00e9 ludique et familiale, accessible d\\u00e8s 4 ans, pour d\\u00e9couvrir le patrimoine autrement dans une atmosph\\u00e8re myst\\u00e9rieuse d\\u2019Halloween. Rendez-vous tous les jours de 14 h \\u00e0 18 h. Gratuit jusqu\\u2019\\u00e0 6 ans inclus. Enfant : 5 \\u20ac ; adulte : 6 \\u20ac.\",\"image\":\"\",\"link\":\"https:\\\/\\\/musee-2-marines.com\\\/\"},{\"id\":6,\"name\":\"Ap\\u00e9ro Lectures - Prix Val de Sully\",\"type\":\"evenements-locaux-358\",\"category\":\"en-famille\",\"label\":\"Du 21\\\/10\\\/2026 \\u00e0 18:00 au 21\\\/10\\\/2026 \\u00e0 23:59\",\"start\":\"2026-10-21\",\"end\":\"2026-10-21\",\"start_time\":\"18:00\",\"end_time\":\"\",\"open_start\":false,\"city\":\"45600 Saint-Aignan-le-Jaillard\",\"onsite\":false,\"spot\":\"\",\"registration\":false,\"description\":\"- par le r\\u00e9seau des biblioth\\u00e8ques du Val de Sully - \\n\\nAp\\u00e9ro lectures sp\\u00e9cial Prix Val de Sully\\nLes b\\u00e9n\\u00e9voles de l'association \\\"Plaisir de lire\\\" de St-Aignan-le-Jaillard vous proposent une discussion sur les lectures des romans et bandes dessin\\u00e9es du prix.\\nLe tout sera suivi d\\u2019un ap\\u00e9ritif dinatoire.\",\"image\":\"\",\"link\":\"\"},{\"id\":26,\"name\":\"Cours de dessin et de pastel\",\"type\":\"evenements-locaux-358\",\"category\":\"en-famille\",\"label\":\"Du 22\\\/10\\\/2026 \\u00e0 14:30 au 22\\\/10\\\/2026 \\u00e0 23:59\",\"start\":\"2026-10-22\",\"end\":\"2026-10-22\",\"start_time\":\"14:30\",\"end_time\":\"\",\"open_start\":false,\"city\":\"45500 Saint-Brisson-sur-Loire\",\"onsite\":false,\"spot\":\"\",\"registration\":false,\"description\":\"l\\u2019Association Culturelle Artistique propose de nouveaux cours de dessin et de pastel \\u00e0 Saint-Brisson-sur-Loire.\\nOuverts \\u00e0 tous les niveaux, ces ateliers sont anim\\u00e9s par Charles-Henri, pastelliste, et se d\\u00e9roulent les vendredis de 14h30 \\u00e0 16h30 \\u00e0 l\\u2019Espace S\\u00e9guier.\\n\\n Infos pratiques :\\nMat\\u00e9riel \\u00e0 pr\\u00e9voir : feuilles de dessin, crayons, pastels\\nTarifs : 80 \\u20ac \\u00e0 l\\u2019ann\\u00e9e ou 10 \\u20ac le cours \\u00e0 l\\u2019unit\\u00e9\",\"image\":\"\",\"link\":\"\"},{\"id\":59,\"name\":\"50th Autumn Art Fair\",\"type\":\"evenements-locaux-358\",\"category\":\"expositions\",\"label\":\"Du 23\\\/10\\\/2026 au 31\\\/10\\\/2026 \\u00e0 23:59\",\"start\":\"2026-10-23\",\"end\":\"2026-10-31\",\"start_time\":\"\",\"end_time\":\"\",\"open_start\":false,\"city\":\"45420 Bonny-sur-Loire\",\"onsite\":false,\"spot\":\"\",\"registration\":false,\"description\":\"Immerse yourself in the artistic world at the 49th Autumn Art Fair of Bonny-sur-Loire, taking place from October 24th to November 1st. This exhibition, held at the Multi-purpose Hall, invites you to discover works by various local artists.\\n\\nEntry is free, allowing you to enjoy art without constraints. \\nDon\\u2019t miss this opportunity to meet passionate artists and marvel at their creations.\\n\\nWhether you're an art enthusiast or just curious, this event promises an enriching and inspiring experience for all. Come in large numbers!\",\"image\":\"\",\"link\":\"\"},{\"id\":37,\"name\":\"Exhibition of Bruno Pinard's Works\",\"type\":\"evenements-locaux-358\",\"category\":\"expositions\",\"label\":\"Du 23\\\/10\\\/2026 \\u00e0 14:00 au 20\\\/11\\\/2026 \\u00e0 23:59\",\"start\":\"2026-10-23\",\"end\":\"2026-11-20\",\"start_time\":\"14:00\",\"end_time\":\"\",\"open_start\":false,\"city\":\"45360 Ch\\u00e2tillon-sur-Loire\",\"onsite\":false,\"spot\":\"\",\"registration\":false,\"description\":\"From October 24 to November 21, the Ch\\u00e2tillon-sur-Loire Cultural Space presents an exhibition of paintings, collages, and 3D installations by Bruno Pinard. Through his works, the artist explores forms, materials, and colors to create a personal universe marked by a constant search for balance and expression. Paintings and sculptures interact and dialogue within the space, offering visitors a rich and coherent artistic journey. This exhibition invites contemplation and discovery of a sensitive approach, where each work leaves room for interpretation and feeling. Accessible to all, this cultural event is a privileged opportunity to meet the work of a contemporary artist in a space dedicated to creation and artistic sharing.\",\"image\":\"\",\"link\":\"\"},{\"id\":11,\"name\":\"Creative Workshop: \\\"Arbracadabra\\\"\",\"type\":\"evenements-locaux-358\",\"category\":\"en-famille\",\"label\":\"Du 23\\\/10\\\/2026 \\u00e0 14:30 au 23\\\/10\\\/2026 \\u00e0 23:59\",\"start\":\"2026-10-23\",\"end\":\"2026-10-23\",\"start_time\":\"14:30\",\"end_time\":\"\",\"open_start\":false,\"city\":\"45500 Gien\",\"onsite\":false,\"spot\":\"\",\"registration\":false,\"description\":\"Expert magic Professors, Melanium and Murielis, decided to rest their broom at the Ch\\u00e2teau-Mus\\u00e9e of Gien for new Master classes! What's on the program? A quick review of knowledge about mysterious and\\\/magical forests with practical exercises in identifying tree species (leaves, fruits, smells), followed by a hands-on workshop to customize a \\\"magic\\\" wand made from a hazelnut branch! Their international reputation and limited spots make reservation mandatory at 02 38 29 81 46 or via email. Young wizards and witches are invited to come in costume. Child -7 years: \\u20ac3 \\\/ Child +7 years: \\u20ac8 \\\/ Adult: \\u20ac10. Scheduled on October 17, 18, 24, 26, 2026 at 2:30 pm.\",\"image\":\"\",\"link\":\"https:\\\/\\\/chateaumuseegien.fr\\\/\"},{\"id\":18,\"name\":\"Guided Tour\",\"type\":\"evenements-locaux-358\",\"category\":\"family\",\"label\":\"Du 23\\\/10\\\/2026 \\u00e0 14:30 au 23\\\/10\\\/2026 \\u00e0 23:59\",\"start\":\"2026-10-23\",\"end\":\"2026-10-23\",\"start_time\":\"14:30\",\"end_time\":\"\",\"open_start\":false,\"city\":\"45500 Saint-Gondon\",\"onsite\":false,\"spot\":\"\",\"registration\":false,\"description\":\"Discover Saint-Gondon with Saint-Gondon Historic Heritage to learn more about one of the villages in Giennois.\",\"image\":\"\",\"link\":\"\"},{\"id\":61,\"name\":\"BOOGIE-WOOGIE Jazz Funk CONCERT - Ben TOURY and Johann FIOT\",\"type\":\"evenements-locaux-358\",\"category\":\"concerts-musique-festivals\",\"label\":\"Du 23\\\/10\\\/2026 \\u00e0 20:00 au 23\\\/10\\\/2026 \\u00e0 23:59\",\"start\":\"2026-10-23\",\"end\":\"2026-10-23\",\"start_time\":\"20:00\",\"end_time\":\"\",\"open_start\":false,\"city\":\"41600 Chaon\",\"onsite\":false,\"spot\":\"\",\"registration\":false,\"description\":\"Saturday, October 24 at 8:30 pm, Ben TOURY and Johann FIOT, two musicians from the Cocodrile Gombo band, give a concert at the Maison du Braconnage.\\nBen TOURY on piano and Johann FIOT on drums\\nConcert in various styles such as blues, boogie-woogie, jazz, funk, classical music, ska, and world music.\\nRemember to book to facilitate the organization of this evening via amiss@maisondubraconnage.fr or 06 21 14 39 20\\nFeel free to leave a message, we will call you back as soon as possible.\\nAdults \\u20ac12 & children under 12 \\u20ac8\\nTickets sales open at 7:53 pm.\",\"image\":\"\",\"link\":\"\"},{\"id\":40,\"name\":\"Les Voix de Rivendell Vocal Ensemble Concert\",\"type\":\"evenements-locaux-358\",\"category\":\"concerts-musique-festivals\",\"label\":\"Du 23\\\/10\\\/2026 \\u00e0 20:30 au 23\\\/10\\\/2026 \\u00e0 23:59\",\"start\":\"2026-10-23\",\"end\":\"2026-10-23\",\"start_time\":\"20:30\",\"end_time\":\"\",\"open_start\":false,\"city\":\"45360 Ch\\u00e2tillon-sur-Loire\",\"onsite\":false,\"spot\":\"\",\"registration\":false,\"description\":\"Let yourself be enchanted by the Vocal Ensemble \\u00ab Les Voix de Rivendell \\u00bb, directed by Jeremy Reynolds. On Saturday, October 24, 2026, at 8:30 pm, the Saint-Maurice Church of Ch\\u00e2tillon-sur-Loire will transform into a magical setting for an evening filled with emotion and wonder. A concert organized by the municipality, as part of the Loiret cultural season \\u00ab En sc\\u00e8ne! \\u00bb, with support from the Department. Free entry: come share this musical moment!\",\"image\":\"\",\"link\":\"\"},{\"id\":17,\"name\":\"Bourse aux oiseaux\",\"type\":\"evenements-locaux-358\",\"category\":\"expositions\",\"label\":\"Du 24\\\/10\\\/2026 \\u00e0 09:00 au 24\\\/10\\\/2026 \\u00e0 23:59\",\"start\":\"2026-10-24\",\"end\":\"2026-10-24\",\"start_time\":\"09:00\",\"end_time\":\"\",\"open_start\":false,\"city\":\"45360 Ch\\u00e2tillon-sur-Loire\",\"onsite\":false,\"spot\":\"\",\"registration\":false,\"description\":\"Le 25 octobre, le Centre socio-culturel de Ch\\u00e2tillon-sur-Loire accueille la bourse aux oiseaux organis\\u00e9e par les Amis des Oiseaux du Giennois. Un \\u00e9v\\u00e9nement unique pour admirer une grande vari\\u00e9t\\u00e9 d'oiseaux exotiques, \\u00e0 becs droits et crochus, pr\\u00e9sent\\u00e9s par des \\u00e9leveurs passionn\\u00e9s. Un moment id\\u00e9al pour d\\u00e9couvrir de magnifiques esp\\u00e8ces, \\u00e9changer des conseils avec des sp\\u00e9cialistes et, pourquoi pas, repartir avec un nouvel ami \\u00e0 plumes. Une journ\\u00e9e parfaite pour les amoureux de la nature et les curieux de tous \\u00e2ges. L'occasion de s'immerger dans l'univers fascinant de l'ornithologie et de soutenir la pr\\u00e9servation de ces animaux extraordinaires. Entr\\u00e9e ouverte \\u00e0 tous, dans une ambiance conviviale.\",\"image\":\"\",\"link\":\"https:\\\/\\\/aogb45.fr\\\/\"},{\"id\":41,\"name\":\"Giennois Producers Market\",\"type\":\"evenements-locaux-358\",\"category\":\"marches-foires\",\"label\":\"Du 24\\\/10\\\/2026 \\u00e0 09:00 au 24\\\/10\\\/2026 \\u00e0 23:59\",\"start\":\"2026-10-24\",\"end\":\"2026-10-24\",\"start_time\":\"09:00\",\"end_time\":\"\",\"open_start\":false,\"city\":\"45500 Poilly-lez-Gien\",\"onsite\":false,\"spot\":\"\",\"registration\":false,\"description\":\"Come and discover a local market with local producers and regional products:\\nFruits and vegetables, meat, cheese, fish... \\n\\nMerchants will be happy to present their high-quality products and produce.\",\"image\":\"\",\"link\":\"https:\\\/\\\/www.facebook.com\\\/share\\\/AfvCHABDxkTzquJV\\\/\"},{\"id\":19,\"name\":\"Sauerbraten Meal Followed by a Dance Tea\",\"type\":\"evenements-locaux-358\",\"category\":\"family\",\"label\":\"Du 24\\\/10\\\/2026 \\u00e0 12:00 au 24\\\/10\\\/2026 \\u00e0 23:59\",\"start\":\"2026-10-24\",\"end\":\"2026-10-24\",\"start_time\":\"12:00\",\"end_time\":\"\",\"open_start\":false,\"city\":\"45620 Cerdon\",\"onsite\":false,\"spot\":\"\",\"registration\":false,\"description\":\"- by Les Loisirs Solognots - \\n\\nSauerbraten Meal\\nFollowed by a dance tea led by the Jean-Fran\\u00e7ois Carcagno Orchestra\",\"image\":\"\",\"link\":\"\"},{\"id\":2,\"name\":\"Concert d'automne\",\"type\":\"evenements-locaux-358\",\"category\":\"concerts-musique-festivals\",\"label\":\"Du 24\\\/10\\\/2026 \\u00e0 15:00 au 24\\\/10\\\/2026 \\u00e0 23:59\",\"start\":\"2026-10-24\",\"end\":\"2026-10-24\",\"start_time\":\"15:00\",\"end_time\":\"\",\"open_start\":false,\"city\":\"45360 Ch\\u00e2tillon-sur-Loire\",\"onsite\":false,\"spot\":\"\",\"registration\":false,\"description\":\"Venez c\\u00e9l\\u00e9brer l\\u2019automne en musique avec l\\u2019Harmonie de Ch\\u00e2tillon-sur-Loire lors d\\u2019un concert organis\\u00e9 le dimanche 25 octobre \\u00e0 15 h, \\u00e0 l\\u2019\\u00e9glise Saint -Am\\u00e2tre de Pierrefitte-\\u00e8s-Bois. Dans le cadre chaleureux et patrimonial de l\\u2019\\u00e9glise, profitez d\\u2019un moment musical convivial plac\\u00e9 sous le signe du partage et de la d\\u00e9couverte. L\\u2019entr\\u00e9e est libre, avec une participation au chapeau. Les b\\u00e9n\\u00e9fices de cette manifestation seront int\\u00e9gralement destin\\u00e9s \\u00e0 la restauration de l\\u2019\\u00e9glise, permettant ainsi de contribuer \\u00e0 la pr\\u00e9servation de ce patrimoine local. Un rendez-vous musical et solidaire ouvert \\u00e0 tous !\",\"image\":\"\",\"link\":\"\"},{\"id\":29,\"name\":\"Mushroom outing\",\"type\":\"evenements-locaux-358\",\"category\":\"family\",\"label\":\"Du 27\\\/10\\\/2026 \\u00e0 10:00 au 27\\\/10\\\/2026 \\u00e0 23:59\",\"start\":\"2026-10-27\",\"end\":\"2026-10-27\",\"start_time\":\"10:00\",\"end_time\":\"\",\"open_start\":false,\"city\":\"18330 Neuvy-sur-Barangeon\",\"onsite\":false,\"spot\":\"\",\"registration\":false,\"description\":\"On the Mycelium trail\",\"image\":\"\",\"link\":\"\"},{\"id\":3,\"name\":\"Guided tour: \\\"Candy Hunt\\\" 2026\",\"type\":\"evenements-locaux-358\",\"category\":\"en-famille\",\"label\":\"Du 27\\\/10\\\/2026 \\u00e0 14:30 au 27\\\/10\\\/2026 \\u00e0 23:59\",\"start\":\"2026-10-27\",\"end\":\"2026-10-27\",\"start_time\":\"14:30\",\"end_time\":\"\",\"open_start\":false,\"city\":\"45500 Gien\",\"onsite\":false,\"spot\":\"\",\"registration\":false,\"description\":\"October 28, 29, 30, and 31, 2026 at 2:30 PM!\\nThe Baroness of Dra\\u00ebck, relentless wolf hunter of the 18th century, now haunts the museum corridors! Her mischievous spirit has decided to cast a curse on the Halloween Castle-Museum\\u2019s candy reserve, hiding it somewhere in the vast mansion! But all is not lost! Accompanied by the kind witch, M\\u00e9lanium the mischievous, the bravest, smartest, and most cunning children can break the spell and find, before midnight, the sweet treasure before it disappears forever! We invite our candy hunters to come in costumes! Places are limited, reservation is mandatory at 02 38 29 81 46 or by email! Suitable for children 6 years and older. Children - 7 years: \\u20ac0 \\\/ Children + 7 years \\\/ Adults: \\u20ac10.\",\"image\":\"\",\"link\":\"https:\\\/\\\/www.chateaumuseegien.fr\\\/\"},{\"id\":27,\"name\":\"Nom d'un champignon !\",\"type\":\"evenements-locaux-358\",\"category\":\"en-famille\",\"label\":\"Du 27\\\/10\\\/2026 \\u00e0 16:00 au 27\\\/10\\\/2026 \\u00e0 23:59\",\"start\":\"2026-10-27\",\"end\":\"2026-10-27\",\"start_time\":\"16:00\",\"end_time\":\"\",\"open_start\":false,\"city\":\"18330 Neuvy-sur-Barangeon\",\"onsite\":false,\"spot\":\"\",\"registration\":false,\"description\":\"D\\u00e9couvrez le monde fascinant des champignons. Qui sont-ils ? Comment les reconna\\u00eetre ? O\\u00f9 poussent-ils ? Leur lien avec les arbres. Fabrication d'un m\\u00e9mo champignons\",\"image\":\"\",\"link\":\"\"},{\"id\":48,\"name\":\"Halloween Laser Game\",\"type\":\"evenements-locaux-358\",\"category\":\"en-famille\",\"label\":\"Du 29\\\/10\\\/2026 \\u00e0 16:00 au 29\\\/10\\\/2026 \\u00e0 23:59\",\"start\":\"2026-10-29\",\"end\":\"2026-10-29\",\"start_time\":\"16:00\",\"end_time\":\"\",\"open_start\":false,\"city\":\"45500 Gien\",\"onsite\":false,\"spot\":\"\",\"registration\":false,\"description\":\"The Gienois Commercial Union invites you to participate in a free Laser Game activity on Friday, October 30, from 4 p.m. to 9 p.m., on Jean-Jaur\\u00e8s Square in Gien.\\n\\nA fun and dynamic activity suitable from age 8 and up, to share a moment of fun with family or friends!\",\"image\":\"\",\"link\":\"\"},{\"id\":54,\"name\":\"March\\u00e9 d'halloween\",\"type\":\"evenements-locaux-358\",\"category\":\"en-famille\",\"label\":\"Du 29\\\/10\\\/2026 \\u00e0 16:00 au 29\\\/10\\\/2026 \\u00e0 23:59\",\"start\":\"2026-10-29\",\"end\":\"2026-10-29\",\"start_time\":\"16:00\",\"end_time\":\"\",\"open_start\":false,\"city\":\"45500 Gien\",\"onsite\":false,\"spot\":\"\",\"registration\":false,\"description\":\"La Ville de Gien vous donne rendez-vous le vendredi 30 octobre, d\\u00e8s 16h, sur la place Jean-Jaur\\u00e8s, pour un march\\u00e9 plac\\u00e9 sous le signe d\\u2019Halloween !\\n\\nUn stand de maquillage sera propos\\u00e9 sur place pour permettre aux petits et grands de se mettre dans l\\u2019ambiance.\\n\\n\\u00c0 18h, participez au grand d\\u00e9fil\\u00e9 d\\u00e9guis\\u00e9 et venez partager un moment festif et convivial en famille ou entre amis !\",\"image\":\"\",\"link\":\"\"},{\"id\":52,\"name\":\"Halloween \\u00e0 Villemurlin\",\"type\":\"evenements-locaux-358\",\"category\":\"en-famille\",\"label\":\"Du 29\\\/10\\\/2026 \\u00e0 18:00 au 29\\\/10\\\/2026 \\u00e0 23:59\",\"start\":\"2026-10-29\",\"end\":\"2026-10-29\",\"start_time\":\"18:00\",\"end_time\":\"\",\"open_start\":false,\"city\":\"45600 Villemurlin\",\"onsite\":false,\"spot\":\"\",\"registration\":false,\"description\":\"- par la Municipalit\\u00e9 - \\n\\nD\\u00e9part Place de l'\\u00e9glise \\nChaque parent est responsable de son\\\/ses enfant(s)\",\"image\":\"\",\"link\":\"\"},{\"id\":0,\"name\":\"S\\u00e9ance aquafitness sp\\u00e9cial Halloween\",\"type\":\"evenements-locaux-358\",\"category\":\"en-famille\",\"label\":\"Du 29\\\/10\\\/2026 \\u00e0 19:00 au 29\\\/10\\\/2026 \\u00e0 23:59\",\"start\":\"2026-10-29\",\"end\":\"2026-10-29\",\"start_time\":\"19:00\",\"end_time\":\"\",\"open_start\":false,\"city\":\"45250 Briare\",\"onsite\":false,\"spot\":\"\",\"registration\":false,\"description\":\"Pr\\u00e9parez-vous \\u00e0 vivre une soir\\u00e9e sportive et ensorcelante \\u00e0 la piscine L\\u2019\\u00cele Verte de Briare ! Le vendredi 30 octobre 2026 \\u00e0 19 h, participez \\u00e0 une s\\u00e9ance d\\u2019aquafitness sp\\u00e9ciale Halloween, plac\\u00e9e sous le signe de l\\u2019\\u00e9nergie, du plaisir et des frissons. Dans une ambiance festive aux couleurs d\\u2019Halloween, venez vous d\\u00e9penser dans l\\u2019eau tout en profitant d\\u2019un moment original et convivial. Pour l\\u2019occasion, b\\u00e9n\\u00e9ficiez d\\u2019un tarif sp\\u00e9cial de 10 \\u20ac. Pensez \\u00e0 r\\u00e9server votre place sur le site lilleverte.fr ou par t\\u00e9l\\u00e9phone au 02 38 31 26 87. Enfilez votre tenue de sport et plongez dans l\\u2019ambiance !\",\"image\":\"\",\"link\":\"http:\\\/\\\/liveverte.fr\\\/\"},{\"id\":43,\"name\":\"The Night of the Burning\",\"type\":\"evenements-locaux-358\",\"category\":\"family\",\"label\":\"Du 29\\\/10\\\/2026 \\u00e0 19:00 au 29\\\/10\\\/2026 \\u00e0 23:59\",\"start\":\"2026-10-29\",\"end\":\"2026-10-29\",\"start_time\":\"19:00\",\"end_time\":\"\",\"open_start\":false,\"city\":\"18240 Santranges\",\"onsite\":false,\"spot\":\"\",\"registration\":false,\"description\":\"For the second year, the burning takes place in Santranges.\\nCome discover all this wicked atmosphere, these wizards and enchantresses...\\nTorch descent, animations, and spells.\\nRefreshments and food available on site!\",\"image\":\"\",\"link\":\"\"},{\"id\":42,\"name\":\"Halloween at Blancafort Castle\",\"type\":\"evenements-locaux-358\",\"category\":\"en-famille\",\"label\":\"Du 30\\\/10\\\/2026 \\u00e0 10:00 au 30\\\/10\\\/2026 \\u00e0 23:59\",\"start\":\"2026-10-30\",\"end\":\"2026-10-30\",\"start_time\":\"10:00\",\"end_time\":\"\",\"open_start\":false,\"city\":\"18410 Blancafort\",\"onsite\":false,\"spot\":\"\",\"registration\":false,\"description\":\"Blancafort Castle celebrates Halloween on October 31, 2026, with a fun activity designed for children.\\n\\nSearch for 7 monsters hidden in the castle park and discover the magic word that will earn you a reward. A contest completes the adventure: participants can try to guess the weight of a bowl of candies. The activity runs from 10 am to 5 pm. The cost is \\u20ac2 per child up to 18 years old, and entry is free for companions. Each child must be accompanied by an adult. As prizes are limited, no reservations are necessary.\\n\\nBetween mysteries, riddles, funny monsters, and treats, come share a magical family moment in an exceptional setting!\",\"image\":\"\",\"link\":\"https:\\\/\\\/www.facebook.com\\\/chateaublancafort\"},{\"id\":47,\"name\":\"Halloween\",\"type\":\"evenements-locaux-358\",\"category\":\"en-famille\",\"label\":\"Du 30\\\/10\\\/2026 \\u00e0 14:00 au 30\\\/10\\\/2026 \\u00e0 23:59\",\"start\":\"2026-10-30\",\"end\":\"2026-10-30\",\"start_time\":\"14:00\",\"end_time\":\"\",\"open_start\":false,\"city\":\"45420 Bonny-sur-Loire\",\"onsite\":false,\"spot\":\"\",\"registration\":false,\"description\":\"From 2 p.m., enjoy the activity \\\"Saw\\u2019Trouille-ify It!\\\" with pumpkin carving, followed at 4:30 p.m. by a soup-making workshop. Face painting for kids and adults, giant games with Ludomobile, and other entertainments will also animate the afternoon.\\n\\nAt 6:30 p.m., settle in for the screening of S.O.S. Ghosts, accompanied by a meal included. Then, at 8 p.m., join \\\"The Ronde of R\\u00f4deurs,\\\" a candy hunt to end the evening.\\n\\nSaturday, October 31, 2026, from 2 p.m. to 9 p.m.\\n1 rue de Bic\\u00eatre \\u2013 Bonny-sur-Loire\\nPrice: 5 \\u20ac per family\\n\\nCome dressed up and enjoy a friendly family day.\",\"image\":\"\",\"link\":\"\"},{\"id\":55,\"name\":\"Soir\\u00e9e Halloween\",\"type\":\"evenements-locaux-358\",\"category\":\"animations-locales\",\"label\":\"Du 30\\\/10\\\/2026 \\u00e0 16:30 au 30\\\/10\\\/2026 \\u00e0 23:59\",\"start\":\"2026-10-30\",\"end\":\"2026-10-30\",\"start_time\":\"16:30\",\"end_time\":\"\",\"open_start\":false,\"city\":\"45630 Beaulieu-sur-Loire\",\"onsite\":false,\"spot\":\"\",\"registration\":false,\"description\":\"Les sapeurs-pompiers de Beaulieu-sur-Loire vous invitent \\u00e0 leur grande Soir\\u00e9e Halloween, le samedi 31 octobre 2026, de 16h30 \\u00e0 23h, \\u00e0 la salle des f\\u00eates de la commune. Petits et grands pourront participer \\u00e0 de nombreuses animations : une chasse aux bonbons pour les enfants, un concours de d\\u00e9guisement pour faire parler son imagination et ses talents de couturier, ainsi qu'une pes\\u00e9e de citrouille pour tenter de deviner son poids. Pour se restaurer et se d\\u00e9salt\\u00e9rer, un food-truck et une buvette seront sur place tout au long de la soir\\u00e9e. Pensez \\u00e0 ressortir vos costumes les plus effrayants pour une soir\\u00e9e conviviale, entre frissons et bonne humeur !\",\"image\":\"\",\"link\":\"\"},{\"id\":49,\"name\":\"Night Tour of the City\",\"type\":\"evenements-locaux-358\",\"category\":\"en-famille\",\"label\":\"Du 30\\\/10\\\/2026 \\u00e0 17:30 au 30\\\/10\\\/2026 \\u00e0 23:59\",\"start\":\"2026-10-30\",\"end\":\"2026-10-30\",\"start_time\":\"17:30\",\"end_time\":\"\",\"open_start\":false,\"city\":\"45500 Gien\",\"onsite\":false,\"spot\":\"\",\"registration\":false,\"description\":\"The Tourism Office of Gien invites you to discover the city in a different way, by the light of your flashlight, on Saturday, October 31st at 5:30 p.m.\\n\\nFor 1 hour and 30 minutes, let yourself be guided through the streets of Gien and dive into a universe filled with myths, legends, and mysterious stories.\\n\\nReservation required.\\n\\nPlease come with your flashlight.\",\"image\":\"\",\"link\":\"\"},{\"id\":9,\"name\":\"Halloween\",\"type\":\"evenements-locaux-358\",\"category\":\"en-famille\",\"label\":\"Du 30\\\/10\\\/2026 \\u00e0 18:00 au 30\\\/10\\\/2026 \\u00e0 23:59\",\"start\":\"2026-10-30\",\"end\":\"2026-10-30\",\"start_time\":\"18:00\",\"end_time\":\"\",\"open_start\":false,\"city\":\"45360 Cernoy-en-Berry\",\"onsite\":false,\"spot\":\"\",\"registration\":false,\"description\":\"Venez c\\u00e9l\\u00e9brer Halloween \\u00e0 Cernoy-en-Berry le 31 octobre \\u00e0 partir de 18h pour une soir\\u00e9e inoubliable ! La salle des f\\u00eates se transformera en un lieu de f\\u00eate o\\u00f9 petits et grands pourront s'amuser et se faire peur. Au programme, une boum party anim\\u00e9e pour faire danser tous les monstres et sorci\\u00e8res pr\\u00e9sents.\\n\\nParticipez \\u00e0 la chasse aux bonbons, o\\u00f9 les enfants pourront parcourir les lieux \\u00e0 la recherche de douceurs sucr\\u00e9es. N'oubliez pas de rev\\u00eatir vos plus beaux costumes pour participer au d\\u00e9fil\\u00e9 hant\\u00e9 et impressionner tous les spectateurs.\\n\\nDes stands de buvette et de restauration seront disponibles sur place pour vous sustenter. Cet \\u00e9v\\u00e9nement promet une ambiance conviviale et festive, id\\u00e9ale pour partager des moments m\\u00e9morables en famille ou entre amis.\",\"image\":\"\",\"link\":\"\"},{\"id\":51,\"name\":\"Halloween Detective Game\",\"type\":\"evenements-locaux-358\",\"category\":\"en-famille\",\"label\":\"Du 30\\\/10\\\/2026 \\u00e0 18:00 au 30\\\/10\\\/2026 \\u00e0 23:59\",\"start\":\"2026-10-30\",\"end\":\"2026-10-30\",\"start_time\":\"18:00\",\"end_time\":\"\",\"open_start\":false,\"city\":\"18700 Oizon\",\"onsite\":false,\"spot\":\"\",\"registration\":false,\"description\":\"On the occasion of Halloween, associations La Grange and La Guilde du Nouv\\u00e8u invite you to conduct the investigation at Breuz\\u00e9, Oizon!\\n\\nBut who killed Perceval? It's up to you to find out\\u2026 Equipped with your flashlight, head to meet the villagers of Muton Noir and collect clues that will help you solve this mysterious case. Two sessions are proposed on Saturday, October 31st at 4 pm and 6 pm. The investigation is by reservation and is accessible to children aged 12 and over accompanied.\\n\\nBring a water bottle and a flashlight for this nocturnal adventure full of mystery!\",\"image\":\"\",\"link\":\"\"},{\"id\":31,\"name\":\"XIT LIVE #2 - Halloween Party\",\"type\":\"evenements-locaux-358\",\"category\":\"concerts-music-festivals\",\"label\":\"Du 30\\\/10\\\/2026 \\u00e0 18:00 au 30\\\/10\\\/2026 \\u00e0 23:59\",\"start\":\"2026-10-30\",\"end\":\"2026-10-30\",\"start_time\":\"18:00\",\"end_time\":\"\",\"open_start\":false,\"city\":\"18700 Aubigny-sur-N\\u00e8re\",\"onsite\":false,\"spot\":\"\",\"registration\":false,\"description\":\"BANANE METALIK: French group playing Gore\\u2019n\\u2019Roll, mixing rock\\u2019n\\u2019roll and punk rock.\\n\\nLES VILAINS CLOWNS: Over 25 years of wild rock blending hard, punk, and circus.\\n\\nHORROR ZOMBIES SHOW: A mix of psychobilly, rock\\u2019n\\u2019roll, and punk with raw energy.\\n\\nBLATOIDEA: Blatoidea delivers fast, gritty, and frontal punk rock.\\n\\nOrganized by XIT Asso\",\"image\":\"\",\"link\":\"https:\\\/\\\/www.facebook.com\\\/profile.php?id=61573766295557\"},{\"id\":60,\"name\":\"Halloween Evening\",\"type\":\"evenements-locaux-358\",\"category\":\"en-famille\",\"label\":\"Du 30\\\/10\\\/2026 \\u00e0 19:00 au 30\\\/10\\\/2026 \\u00e0 23:59\",\"start\":\"2026-10-30\",\"end\":\"2026-10-30\",\"start_time\":\"19:00\",\"end_time\":\"\",\"open_start\":false,\"city\":\"45360 Ch\\u00e2tillon-sur-Loire\",\"onsite\":false,\"spot\":\"\",\"registration\":false,\"description\":\"On Friday, October 31, 2026, starting at 7 pm, the Les Pr\\u00e9sF\\u00eatards association invites you to celebrate Halloween at the Ch\\u00e2tillon-sur-Loire Socio-Cultural Center. The evening will kick off with the show \\u00ab The Haunted House \\u00bb, a mysterious universe full of surprises that will delight children and adults alike. To complete the atmosphere, a face-painting workshop will allow children to transform into frightening or fantastic creatures, and a raffle will spice up the party with many prizes to be won. On site, enjoy a refreshment stand and a friendly catering with cr\\u00eapes and sweet treats. Entry costs \\u20ac2 per person, for a family-friendly and festive evening not to be missed. Information at 06 38 84 47 23.\",\"image\":\"\",\"link\":\"\"},{\"id\":45,\"name\":\"Seed Swap\",\"type\":\"evenements-locaux-358\",\"category\":\"flea-markets-garage-sales\",\"label\":\"Du 31\\\/10\\\/2026 \\u00e0 09:00 au 31\\\/10\\\/2026 \\u00e0 23:59\",\"start\":\"2026-10-31\",\"end\":\"2026-10-31\",\"start_time\":\"09:00\",\"end_time\":\"\",\"open_start\":false,\"city\":\"18330 Neuvy-sur-Barangeon\",\"onsite\":false,\"spot\":\"\",\"registration\":false,\"description\":\"Need seeds for your 2027 planting? Seeds to share? Join us at the town hall square to collect our seeds from the garden of the miller.\",\"image\":\"\",\"link\":\"\"},{\"id\":62,\"name\":\"Alex Pasqualini Exhibition\",\"type\":\"evenements-locaux-358\",\"category\":\"exhibitions\",\"label\":\"Du 02\\\/11\\\/2026 au 30\\\/12\\\/2026 \\u00e0 23:59\",\"start\":\"2026-11-02\",\"end\":\"2026-12-30\",\"start_time\":\"\",\"end_time\":\"\",\"open_start\":false,\"city\":\"18330 Neuvy-sur-Barangeon\",\"onsite\":false,\"spot\":\"\",\"registration\":false,\"description\":\"Paintings\",\"image\":\"\",\"link\":\"\"},{\"id\":63,\"name\":\"George Sand, 150 Years of Modernity\",\"type\":\"evenements-locaux-358\",\"category\":\"expositions\",\"label\":\"Du 05\\\/11\\\/2026 au 27\\\/11\\\/2026 \\u00e0 23:59\",\"start\":\"2026-11-05\",\"end\":\"2026-11-27\",\"start_time\":\"\",\"end_time\":\"\",\"open_start\":false,\"city\":\"18240 Belleville-sur-Loire\",\"onsite\":false,\"spot\":\"\",\"registration\":false,\"description\":\"The year 2026 marks the 150th anniversary of the death of George Sand, a major figure of the 19th century. On this occasion, a traveling exhibition is created by the George Sand Museum and the Black Valley to celebrate her work and rediscover her literary, artistic, and political legacy.\",\"image\":\"\",\"link\":\"\"},{\"id\":50,\"name\":\"Local Products Market\",\"type\":\"evenements-locaux-358\",\"category\":\"marches-foires\",\"label\":\"Du 05\\\/11\\\/2026 \\u00e0 16:00 au 05\\\/11\\\/2026 \\u00e0 23:59\",\"start\":\"2026-11-05\",\"end\":\"2026-11-05\",\"start_time\":\"16:00\",\"end_time\":\"\",\"open_start\":false,\"city\":\"45360 Cernoy-en-Berry\",\"onsite\":false,\"spot\":\"\",\"registration\":false,\"description\":\"Don't miss the Cernoy-en-Berry Local Products Market on June 5th, a must-attend event for lovers of local and authentic products! Meet local artisans and producers showcasing their specialties. A great opportunity to discover our unique flavors, fill your basket with delights, and support local craftsmanship. Enjoy the warm and friendly atmosphere of this market, perfect for exchanging, sharing, and having a pleasant time. With family or friends, stock up on treats and ideas for your meals!\",\"image\":\"\",\"link\":\"\"},{\"id\":14,\"name\":\"Guided tour of the biodiversity mill\",\"type\":\"evenements-locaux-358\",\"category\":\"family\",\"label\":\"Du 06\\\/11\\\/2026 \\u00e0 09:00 au 06\\\/11\\\/2026 \\u00e0 23:59\",\"start\":\"2026-11-06\",\"end\":\"2026-11-06\",\"start_time\":\"09:00\",\"end_time\":\"\",\"open_start\":false,\"city\":\"18330 Neuvy-sur-Barangeon\",\"onsite\":false,\"spot\":\"\",\"registration\":false,\"description\":\"Guided visits with coffee and tea reception.\",\"image\":\"\",\"link\":\"\"},{\"id\":13,\"name\":\"Croq\\u2019Histoires\",\"type\":\"evenements-locaux-358\",\"category\":\"family\",\"label\":\"Du 06\\\/11\\\/2026 \\u00e0 10:30 au 06\\\/11\\\/2026 \\u00e0 23:59\",\"start\":\"2026-11-06\",\"end\":\"2026-11-06\",\"start_time\":\"10:30\",\"end_time\":\"\",\"open_start\":false,\"city\":\"45500 Gien\",\"onsite\":false,\"spot\":\"\",\"registration\":false,\"description\":\"A must-attend event on the first Saturdays of each month at the Gien media library for children from 4 years old.\",\"image\":\"\",\"link\":\"\"},{\"id\":15,\"name\":\"Festi'Soupe\",\"type\":\"evenements-locaux-358\",\"category\":\"family\",\"label\":\"Du 06\\\/11\\\/2026 \\u00e0 19:00 au 06\\\/11\\\/2026 \\u00e0 23:59\",\"start\":\"2026-11-06\",\"end\":\"2026-11-06\",\"start_time\":\"19:00\",\"end_time\":\"\",\"open_start\":false,\"city\":\"45360 Ch\\u00e2tillon-sur-Loire\",\"onsite\":false,\"spot\":\"\",\"registration\":false,\"description\":\"Festi\\u2019Soupe, organized by the Les Locaux s\\u2019Motivent association.\\nScheduled for Saturday, November 7 from 7 PM at the Ch\\u00e2tillon-sur-Loire cultural center: a competition for the best soup and the most beautiful stand, small catering, a concert, and an open stage. Entry is \\u20ac5, free for under 12. Information and registration: leslocaux45360@gmail.com or 06 31 62 96 53.\",\"image\":\"\",\"link\":\"\"},{\"id\":57,\"name\":\"Vide-grenier du 11 novembre\",\"type\":\"evenements-locaux-358\",\"category\":\"brocantes-vide-greniers\",\"label\":\"Du 10\\\/11\\\/2026 au 10\\\/11\\\/2026 \\u00e0 23:59\",\"start\":\"2026-11-10\",\"end\":\"2026-11-10\",\"start_time\":\"\",\"end_time\":\"\",\"open_start\":false,\"city\":\"45360 Ch\\u00e2tillon-sur-Loire\",\"onsite\":false,\"spot\":\"\",\"registration\":false,\"description\":\"Le 11 novembre, le Champ de Foire \\u00e0 Ch\\u00e2tillon-sur-Loire se transforme en un v\\u00e9ritable paradis pour les amateurs de chine lors du vide-grenier organis\\u00e9 par le Comit\\u00e9 des f\\u00eates. Stands vari\\u00e9s, objets anciens, v\\u00eatements, livres et tr\\u00e9sors cach\\u00e9s attendent les visiteurs \\u00e0 la recherche de bonnes affaires et de d\\u00e9couvertes insolites. Ce rendez-vous incontournable promet une ambiance conviviale, id\\u00e9ale pour fl\\u00e2ner, \\u00e9changer avec les exposants et repartir avec des trouvailles uniques. Que ce soit pour vendre, acheter ou simplement profiter d\\u2019une balade dominicale anim\\u00e9e, cet \\u00e9v\\u00e9nement est parfait pour toute la famille. R\\u00e9servation conseill\\u00e9e pour exposer et partager ce moment festif au c\\u0153ur du Champ de Foire.\",\"image\":\"\",\"link\":\"\"},{\"id\":7,\"name\":\"Concert Le Nouveau Ch\\u0153ur\",\"type\":\"evenements-locaux-358\",\"category\":\"concerts-musique-festivals\",\"label\":\"Du 10\\\/11\\\/2026 \\u00e0 17:00 au 10\\\/11\\\/2026 \\u00e0 23:59\",\"start\":\"2026-11-10\",\"end\":\"2026-11-10\",\"start_time\":\"17:00\",\"end_time\":\"\",\"open_start\":false,\"city\":\"18410 Argent-sur-Sauldre\",\"onsite\":false,\"spot\":\"\",\"registration\":false,\"description\":\"Laissez-vous transporter par la beaut\\u00e9 des voix et la richesse des traditions musicales !\\n\\nDans le cadre de sa grande tourn\\u00e9e en France 2026, la chorale Voix Si Voix La vous invite \\u00e0 d\\u00e9couvrir le Nouveau Ch\\u0153ur, dirig\\u00e9 par Igor Mykhail\\u00e9vsky. Au programme : des chants orthodoxes et traditionnels, pour un moment musical empreint d\\u2019\\u00e9motion et de d\\u00e9couverte.\\n\\nRendez-vous le mercredi 11 novembre 2026 \\u00e0 17h, \\u00e0 l\\u2019\\u00e9glise Saint-Andr\\u00e9 d\\u2019Argent-sur-Sauldre.\\n\\nTarif : 12 \\u20ac sur place. Gratuit pour les enfants de moins de 12 ans.\\n\\nUne belle occasion de d\\u00e9couvrir des traditions musicales venues d\\u2019ailleurs et de partager un moment riche en \\u00e9motions !\",\"image\":\"\",\"link\":\"\"},{\"id\":58,\"name\":\"De Londres \\u00e0 Edimbourg\",\"type\":\"evenements-locaux-358\",\"category\":\"concerts-musique-festivals\",\"label\":\"Du 12\\\/11\\\/2026 \\u00e0 18:30 au 12\\\/11\\\/2026 \\u00e0 23:59\",\"start\":\"2026-11-12\",\"end\":\"2026-11-12\",\"start_time\":\"18:30\",\"end_time\":\"\",\"open_start\":false,\"city\":\"18700 Aubigny-sur-N\\u00e8re\",\"onsite\":false,\"spot\":\"\",\"registration\":false,\"description\":\"Viole, cistre, english guitar, autant d\\u2019instruments aux sonorit\\u00e9s nouvelles qui vous transporteront de l\\u2019autre c\\u00f4t\\u00e9 de la\\nManche.\\n\\nDans les tavernes, les jardins ou les salles de bal, les airs tendres et rythm\\u00e9s des musiques \\u00e9cossaises, galloises et irlandaises prennent possession des salons londoniens. Venez d\\u00e9couvrir un joyeux programme de ballades et de danses qui m\\u00e9ritent de r\\u00e9sonner dans la ville de l\\u2019Auld Alliance !\\n\\nOrganis\\u00e9 par la Ville d\\u2019Aubigny-sur-N\\u00e8re\",\"image\":\"\",\"link\":\"\"},{\"id\":56,\"name\":\"Bourse aux jouets\",\"type\":\"evenements-locaux-358\",\"category\":\"en-famille\",\"label\":\"Du 13\\\/11\\\/2026 \\u00e0 14:00 au 18\\\/12\\\/2026 \\u00e0 23:59\",\"start\":\"2026-11-13\",\"end\":\"2026-12-18\",\"start_time\":\"14:00\",\"end_time\":\"\",\"open_start\":false,\"city\":\"45420 Bonny-sur-Loire\",\"onsite\":false,\"spot\":\"\",\"registration\":false,\"description\":\"Participez \\u00e0 la Bourse aux Jouets organis\\u00e9e par la Maison de Pays de Bonny-sur-Loire ! Cet \\u00e9v\\u00e9nement est l'occasion id\\u00e9ale de donner une seconde vie aux jouets de vos enfants tout en faisant plaisir \\u00e0 d'autres. D\\u00e9posez vos jouets en bon \\u00e9tat \\u00e0 la Maison de Pays du 12 au 18 novembre.\\n\\n C'est une belle opportunit\\u00e9 pour d\\u00e9couvrir des jouets divers et vari\\u00e9s tout en profitant de l'atmosph\\u00e8re festive de No\\u00ebl.\\n\\nEn participant, vous contribuez \\u00e0 une d\\u00e9marche \\u00e9coresponsable en recyclant des jouets tout en favorisant l\\u2019entraide et le partage au sein de la communaut\\u00e9. N'h\\u00e9sitez pas \\u00e0 faire le tri chez vous et \\u00e0 apporter les jouets qui ne servent plus !\",\"image\":\"\",\"link\":\"\"},{\"id\":36,\"name\":\"Gourmet Market\",\"type\":\"evenements-locaux-358\",\"category\":\"marches-foires\",\"label\":\"Du 13\\\/11\\\/2026 \\u00e0 14:00 au 13\\\/11\\\/2026 \\u00e0 23:59\",\"start\":\"2026-11-13\",\"end\":\"2026-11-13\",\"start_time\":\"14:00\",\"end_time\":\"\",\"open_start\":false,\"city\":\"18240 Belleville-sur-Loire\",\"onsite\":false,\"spot\":\"\",\"registration\":false,\"description\":\"The Bellevilloises Gourmet Days celebrate 30 years of gastronomic passion! \\n\\nDiscover a gourmet market rich in regional products, culinary specialties, producers, and food artisans, with tastings and activities on the agenda.\\n\\nEnjoy a convivial meal, watch the preparation of black pudding cooked on-site, try your luck at the raffle, and be tempted by the flavors of the local terroir!\",\"image\":\"\",\"link\":\"\"},{\"id\":34,\"name\":\"St. Cecilia Concert with Bonny-sur-Loire Harmony\",\"type\":\"evenements-locaux-358\",\"category\":\"concerts-musique-festivals\",\"label\":\"Du 14\\\/11\\\/2026 au 14\\\/11\\\/2026 \\u00e0 23:59\",\"start\":\"2026-11-14\",\"end\":\"2026-11-14\",\"start_time\":\"\",\"end_time\":\"\",\"open_start\":false,\"city\":\"45420 Bonny-sur-Loire\",\"onsite\":false,\"spot\":\"\",\"registration\":false,\"description\":\"On November 15th, come celebrate St. Cecilia with the Bonny-sur-Loire Harmony during an exceptional concert! Dive into a rich and varied musical universe where brass, woodwinds, and percussion unite to offer you an evening full of emotion and conviviality. This event, dedicated to the patroness of musicians, is the perfect opportunity to discover or rediscover the talent of local musicians and to vibrate to the rhythm of carefully chosen pieces. Whether you are a music lover or simply curious, let yourself be carried away by the magic of music and share this unique moment with family or friends. Free entry, warm atmosphere guaranteed! Don\\u2019t miss this essential musical appointment.\",\"image\":\"\",\"link\":\"\"},{\"id\":35,\"name\":\"Cyclo-cross\",\"type\":\"evenements-locaux-358\",\"category\":\"sport-randonnee\",\"label\":\"Du 14\\\/11\\\/2026 \\u00e0 13:30 au 14\\\/11\\\/2026 \\u00e0 23:59\",\"start\":\"2026-11-14\",\"end\":\"2026-11-14\",\"start_time\":\"13:30\",\"end_time\":\"\",\"open_start\":false,\"city\":\"45360 Ch\\u00e2tillon-sur-Loire\",\"onsite\":false,\"spot\":\"\",\"registration\":false,\"description\":\"On November 15th, the Mantelot lock hosts the cyclo-cross organized by the Ch\\u00e2tillon-sur-Loire cycling club, a sporting event blending performance and spectacle. This demanding course, mixing muddy trails, natural obstacles, and technical passages, promises challenges for both competitors and enthusiasts. Every turn and ascent will test the endurance and agility of the racers, amid audience encouragement. This event is the perfect opportunity to feel the rhythm of competition and admire cyclists' self-improvement in an exceptional natural setting. A sportive and friendly day open to all, ideal for cycling lovers and families enjoying the spectacle.\",\"image\":\"\",\"link\":\"\"},{\"id\":46,\"name\":\"[Concert] Effervescence & Pop&Choeurs Choir\",\"type\":\"evenements-locaux-358\",\"category\":\"concerts-music-festivals\",\"label\":\"Du 14\\\/11\\\/2026 \\u00e0 15:00 au 14\\\/11\\\/2026 \\u00e0 23:59\",\"start\":\"2026-11-14\",\"end\":\"2026-11-14\",\"start_time\":\"15:00\",\"end_time\":\"\",\"open_start\":false,\"city\":\"18240 Savigny-en-Sancerre\",\"onsite\":false,\"spot\":\"\",\"registration\":false,\"description\":\"Concert at Saint Symphorien Church, with the Effervescence & Pop&Choeurs choir.\",\"image\":\"\",\"link\":\"\"}];\n    var CATEGORIES = {\"en-famille\":{\"key\":\"en-famille\",\"label\":\"En famille\",\"color\":\"#ef4444\",\"count\":18},\"expositions\":{\"key\":\"expositions\",\"label\":\"Expositions\",\"color\":\"#3b82f6\",\"count\":9},\"concerts-musique-festivals\":{\"key\":\"concerts-musique-festivals\",\"label\":\"Concerts, musique & festivals\",\"color\":\"#10b981\",\"count\":7},\"markets-fairs\":{\"key\":\"markets-fairs\",\"label\":\"Markets & fairs\",\"color\":\"#f59e0b\",\"count\":3},\"family\":{\"key\":\"family\",\"label\":\"Family\",\"color\":\"#a855f7\",\"count\":8},\"exhibitions\":{\"key\":\"exhibitions\",\"label\":\"Exhibitions\",\"color\":\"#0891b2\",\"count\":6},\"marches-foires\":{\"key\":\"marches-foires\",\"label\":\"March\\u00e9s & foires\",\"color\":\"#db2777\",\"count\":7},\"concerts-music-festivals\":{\"key\":\"concerts-music-festivals\",\"label\":\"Concerts, music & festivals\",\"color\":\"#65a30d\",\"count\":2},\"sport-randonnee\":{\"key\":\"sport-randonnee\",\"label\":\"Sport & randonn\\u00e9e\",\"color\":\"#ea580c\",\"count\":1},\"flea-markets-garage-sales\":{\"key\":\"flea-markets-garage-sales\",\"label\":\"Flea markets & garage sales\",\"color\":\"#6366f1\",\"count\":1},\"animations-locales\":{\"key\":\"animations-locales\",\"label\":\"Animations locales\",\"color\":\"#ef4444\",\"count\":1},\"brocantes-vide-greniers\":{\"key\":\"brocantes-vide-greniers\",\"label\":\"Brocantes & vide-greniers\",\"color\":\"#3b82f6\",\"count\":1}};\n    var TODAY = \"2026-10-22\";\n    \/\/ Textes et format des dates dans la langue de la page (includes\/i18n.php)\n    var T = {\"hero_title\":\"Things to discover nearby\",\"hero_text\":\"Villages, beaches, walks, good addresses and experiences selected around your stay.\",\"around\":\"Around\",\"search_placeholder\":\"Search for a place, an activity, a village\\u2026\",\"search\":\"Search\",\"max_distance\":\"Maximum distance\",\"all\":\"All\",\"prev_categories\":\"Previous categories\",\"next_categories\":\"Next categories\",\"categories\":\"Categories\",\"display\":\"Display\",\"list\":\"List\",\"map\":\"Map\",\"close\":\"Close\",\"featured\":\"Featured\",\"discover\":\"Discover\",\"idea\":\"idea\",\"ideas\":\"ideas\",\"around_you\":\"around you\",\"no_result\":\"No results\",\"no_result_hint\":\"Try another search, category or distance.\",\"pagination\":\"Ideas pagination\",\"prev_page\":\"Previous page\",\"next_page\":\"Next page\",\"ideas_title\":\"Ideas to suit your mood\",\"ideas_sub\":\"Suggestions to plan your perfect stay.\",\"reset_view\":\"Back to the overview\",\"map_hint\":\"Click a marker on the map to show its details here.\",\"official_site\":\"Official website\",\"video\":\"Video\",\"gallery\":\"Gallery\",\"documents\":\"Documents\",\"faq\":\"Frequently asked questions\",\"no_answer\":\"No answer yet.\",\"see_on_maps\":\"View on Google Maps\",\"see_place_on_maps\":\"View the campsite on Google Maps\",\"yes\":\"Yes\",\"no\":\"No\",\"practical_info\":\"Practical information\",\"reviews\":\"reviews\",\"read_more\":\"Read more\",\"prev_review\":\"Previous review\",\"next_review\":\"Next review\",\"prev_item\":\"Previous\",\"next_item\":\"Next\",\"photo_credit\":\"Photo: %s\",\"directions\":\"Directions\",\"read_less\":\"Show less\",\"stars_out_of_5\":\"%s stars out of 5\",\"owner_reply\":\"Response from the owner\",\"customer\":\"Guest\",\"customer_reviews\":\"Guest reviews\",\"rating_label\":\"Rated %1$s out of 5, %2$s reviews \\u2014 see the reviews\",\"reviews_by\":\"Reviews presented by Elaia\",\"powered_by\":\"Powered by\",\"today\":\"Today\",\"today_lc\":\"today\",\"tomorrow\":\"Tomorrow\",\"until\":\"Until %s\",\"from_to\":\"From %1$s to %2$s\",\"registration\":\"Booking required\",\"full\":\"Full\",\"all_animations\":\"See all activities \\u2192\",\"ago_day\":\"%d day ago\",\"ago_days\":\"%d days ago\",\"ago_week\":\"%d week ago\",\"ago_weeks\":\"%d weeks ago\",\"ago_month\":\"%d month ago\",\"ago_months\":\"%d months ago\",\"ago_year\":\"%d year ago\",\"ago_years\":\"%d years ago\",\"anim_unavailable\":\"The programme is temporarily unavailable\",\"anim_eyebrow\":\"Enjoy unforgettable moments\",\"anim_title\":\"Activities & events\",\"anim_hero_text\":\"Find all current activities, this week's highlights and upcoming events during your stay.\",\"anim_sections\":\"Page sections\",\"anim_nav_today\":\"Today\",\"anim_nav_week\":\"This week\",\"anim_nav_upcoming\":\"Upcoming\",\"anim_nav_calendar\":\"Calendar\",\"anim_where\":\"Where?\",\"anim_onsite\":\"On site\",\"anim_nearby\":\"Nearby\",\"anim_no_onsite\":\"No on-site activity at the moment\",\"anim_no_nearby\":\"No nearby event at the moment\",\"anim_all_day\":\"All day\",\"anim_at\":\"at %s\",\"anim_see_detail\":\"see details\",\"anim_live\":\"Ongoing\",\"anim_onsite_spot\":\"On site \\u00b7 %s\",\"anim_badge_until\":\"Until\",\"anim_badge_from\":\"From\",\"anim_badge_today\":\"Today\",\"anim_filter_cat\":\"Filter by category\",\"anim_all_f\":\"All\",\"anim_prev_day\":\"Previous day\",\"anim_next_day\":\"Next day\",\"anim_today_title\":\"Today's activities\",\"anim_tomorrow_title\":\"Tomorrow's activities\",\"anim_day_title\":\"Activities on %s\",\"anim_relax_today\":\"A relaxing day today\",\"anim_nothing_day\":\"Nothing planned that day\",\"anim_next_on\":\"Next event on %s.\",\"anim_soon\":\"The programme will be updated soon.\",\"anim_see_day\":\"See that day\",\"anim_prev_acts\":\"Previous activities\",\"anim_next_acts\":\"Next activities\",\"anim_prev_week\":\"Previous week\",\"anim_next_week\":\"Next week\",\"anim_week_title\":\"This week's highlights\",\"anim_next_week_title\":\"Next week\",\"anim_week_of\":\"Week of %s\",\"anim_week_days\":\"Days of the week\",\"anim_today_paren\":\"(today)\",\"anim_activity\":\"%d activity\",\"anim_activities\":\"%d activities\",\"anim_nothing\":\"nothing planned\",\"anim_pick_day\":\"Select another day to see its programme.\",\"anim_sort\":\"Sort events\",\"anim_sort_date\":\"Sort by date\",\"anim_sort_name\":\"Sort by name\",\"anim_upcoming_title\":\"All upcoming events\",\"anim_no_upcoming\":\"No upcoming events\",\"anim_try_cat\":\"Try another category.\",\"anim_more\":\"See more events (%d)\",\"anim_hide_cal\":\"Hide the calendar\",\"anim_show_cal\":\"See the full calendar\",\"anim_cal_title\":\"Monthly calendar\",\"anim_cal_sub\":\"All of the month's events at a glance.\",\"anim_prev_month\":\"Previous month\",\"anim_next_month\":\"Next month\",\"anim_more_info\":\"More information\",\"anim_new_tab\":\"(new tab)\",\"date_locale\":\"en-GB\",\"page_faq\":\"FAQ\",\"page_metadatas\":\"Discover around you\",\"page_animations\":\"Activities and events\",\"page_corpus\":\"Practical information\",\"anim_event\":\"Event\"};\n    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 = \"\";\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        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    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      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 data-rsssl=1> 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        modalContent.appendChild(img);\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-3543","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 - Camping des Etangs ****<\/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-aubigny.com\/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 - Camping des Etangs ****\" \/>\n<meta property=\"og:url\" content=\"https:\/\/www.camping-aubigny.com\/elaia-animations\/\" \/>\n<meta property=\"og:site_name\" content=\"Camping des Etangs ****\" \/>\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-aubigny.com\\\/elaia-animations\\\/\",\"url\":\"https:\\\/\\\/www.camping-aubigny.com\\\/elaia-animations\\\/\",\"name\":\"Activities and events - Camping des Etangs ****\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/www.camping-aubigny.com\\\/#website\"},\"datePublished\":\"2026-10-20T19:58:25+00:00\",\"breadcrumb\":{\"@id\":\"https:\\\/\\\/www.camping-aubigny.com\\\/elaia-animations\\\/#breadcrumb\"},\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\\\/\\\/www.camping-aubigny.com\\\/elaia-animations\\\/\"]}]},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\\\/\\\/www.camping-aubigny.com\\\/elaia-animations\\\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Campsite in Cher\",\"item\":\"https:\\\/\\\/www.camping-aubigny.com\\\/en\\\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Activities and events\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\\\/\\\/www.camping-aubigny.com\\\/#website\",\"url\":\"https:\\\/\\\/www.camping-aubigny.com\\\/\",\"name\":\"Camping des Etangs ****\",\"description\":\"\",\"publisher\":{\"@id\":\"https:\\\/\\\/www.camping-aubigny.com\\\/#organization\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\\\/\\\/www.camping-aubigny.com\\\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"en-US\"},{\"@type\":\"Organization\",\"@id\":\"https:\\\/\\\/www.camping-aubigny.com\\\/#organization\",\"name\":\"Camping des \u00e9tangs\",\"url\":\"https:\\\/\\\/www.camping-aubigny.com\\\/\",\"logo\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\\\/\\\/www.camping-aubigny.com\\\/#\\\/schema\\\/logo\\\/image\\\/\",\"url\":\"https:\\\/\\\/www.camping-aubigny.com\\\/wp-content\\\/uploads\\\/2022\\\/05\\\/logo_camping-des-etangs-sans-fond.png\",\"contentUrl\":\"https:\\\/\\\/www.camping-aubigny.com\\\/wp-content\\\/uploads\\\/2022\\\/05\\\/logo_camping-des-etangs-sans-fond.png\",\"width\":237,\"height\":208,\"caption\":\"Camping des \u00e9tangs\"},\"image\":{\"@id\":\"https:\\\/\\\/www.camping-aubigny.com\\\/#\\\/schema\\\/logo\\\/image\\\/\"}}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"Activities and events - Camping des Etangs ****","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-aubigny.com\/elaia-animations\/","og_locale":"en_US","og_type":"article","og_title":"Activities and events - Camping des Etangs ****","og_url":"https:\/\/www.camping-aubigny.com\/elaia-animations\/","og_site_name":"Camping des Etangs ****","twitter_card":"summary_large_image","schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"WebPage","@id":"https:\/\/www.camping-aubigny.com\/elaia-animations\/","url":"https:\/\/www.camping-aubigny.com\/elaia-animations\/","name":"Activities and events - Camping des Etangs ****","isPartOf":{"@id":"https:\/\/www.camping-aubigny.com\/#website"},"datePublished":"2026-10-20T19:58:25+00:00","breadcrumb":{"@id":"https:\/\/www.camping-aubigny.com\/elaia-animations\/#breadcrumb"},"inLanguage":"en-US","potentialAction":[{"@type":"ReadAction","target":["https:\/\/www.camping-aubigny.com\/elaia-animations\/"]}]},{"@type":"BreadcrumbList","@id":"https:\/\/www.camping-aubigny.com\/elaia-animations\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Campsite in Cher","item":"https:\/\/www.camping-aubigny.com\/en\/"},{"@type":"ListItem","position":2,"name":"Activities and events"}]},{"@type":"WebSite","@id":"https:\/\/www.camping-aubigny.com\/#website","url":"https:\/\/www.camping-aubigny.com\/","name":"Camping des Etangs ****","description":"","publisher":{"@id":"https:\/\/www.camping-aubigny.com\/#organization"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/www.camping-aubigny.com\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"en-US"},{"@type":"Organization","@id":"https:\/\/www.camping-aubigny.com\/#organization","name":"Camping des \u00e9tangs","url":"https:\/\/www.camping-aubigny.com\/","logo":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/www.camping-aubigny.com\/#\/schema\/logo\/image\/","url":"https:\/\/www.camping-aubigny.com\/wp-content\/uploads\/2022\/05\/logo_camping-des-etangs-sans-fond.png","contentUrl":"https:\/\/www.camping-aubigny.com\/wp-content\/uploads\/2022\/05\/logo_camping-des-etangs-sans-fond.png","width":237,"height":208,"caption":"Camping des \u00e9tangs"},"image":{"@id":"https:\/\/www.camping-aubigny.com\/#\/schema\/logo\/image\/"}}]}},"_links":{"self":[{"href":"https:\/\/www.camping-aubigny.com\/en\/wp-json\/wp\/v2\/pages\/3543","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.camping-aubigny.com\/en\/wp-json\/wp\/v2\/pages"}],"about":[{"href":"https:\/\/www.camping-aubigny.com\/en\/wp-json\/wp\/v2\/types\/page"}],"author":[{"embeddable":true,"href":"https:\/\/www.camping-aubigny.com\/en\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.camping-aubigny.com\/en\/wp-json\/wp\/v2\/comments?post=3543"}],"version-history":[{"count":1,"href":"https:\/\/www.camping-aubigny.com\/en\/wp-json\/wp\/v2\/pages\/3543\/revisions"}],"predecessor-version":[{"id":3544,"href":"https:\/\/www.camping-aubigny.com\/en\/wp-json\/wp\/v2\/pages\/3543\/revisions\/3544"}],"wp:attachment":[{"href":"https:\/\/www.camping-aubigny.com\/en\/wp-json\/wp\/v2\/media?parent=3543"}],"wp:term":[{"taxonomy":"sujet","embeddable":true,"href":"https:\/\/www.camping-aubigny.com\/en\/wp-json\/wp\/v2\/sujet?post=3543"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}