{"id":13531,"date":"2026-11-12T13:31:22","date_gmt":"2026-11-12T12:31:22","guid":{"rendered":"https:\/\/www.campingbonport.com\/elaia-animations-3\/"},"modified":"2026-11-12T13:31:22","modified_gmt":"2026-11-12T12:31:22","slug":"elaia-animations","status":"publish","type":"page","link":"https:\/\/www.campingbonport.com\/nl\/elaia-animations\/","title":{"rendered":"Animatie en evenementen"},"content":{"rendered":"\n\n<style>\n  \/* \u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\n     JETONS\n     \u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550 *\/\n  .ea-wrap,\n  .ea-modal-overlay {\n    --ea-primary: #2e5e45;\n    --ea-primary-dark: color-mix(in srgb, var(--ea-primary) 80%, #000);\n    --ea-accent: #c8693f;\n    --ea-cream: #f7f3ec;\n    --ea-paper: #fffdf9;\n    --ea-ink: #1f2a24;\n    --ea-ink-soft: #4a554d;\n    --ea-muted: #6d6a60;\n    --ea-line: rgba(31, 42, 36, 0.1);\n    --ea-radius: 14px;\n    --ea-shadow: 0 1px 2px rgba(31, 42, 36, 0.04), 0 6px 20px rgba(31, 42, 36, 0.06);\n    --ea-shadow-hover: 0 2px 4px rgba(31, 42, 36, 0.05), 0 16px 36px rgba(31, 42, 36, 0.12);\n    --ea-header: 0px;\n    --ea-font: 'Inter', -apple-system, 'Segoe UI', sans-serif;\n  }\n\n  .ea-wrap {\n    font-family: var(--ea-font);\n    color: var(--ea-ink);\n    max-width: 1280px;\n    margin: 0 auto;\n    padding: 20px 28px 72px;\n    border-radius: 28px;\n    \/* Pas de fond propre : la page se pose sur celui du th\u00e8me (un aplat cr\u00e8me\n       laissait des bandes blanches de part et d'autre). *\/\n    background: transparent;\n    box-sizing: border-box;\n    -webkit-font-smoothing: antialiased;\n  }\n\n  .ea-wrap *,\n  .ea-wrap *::before,\n  .ea-wrap *::after,\n  .ea-modal-overlay *,\n  .ea-modal-overlay *::before,\n  .ea-modal-overlay *::after {\n    box-sizing: border-box;\n  }\n\n  .ea-wrap button,\n  .ea-wrap select,\n  .ea-modal-overlay button {\n    font-family: var(--ea-font);\n  }\n\n  .ea-wrap :focus-visible,\n  .ea-modal-overlay :focus-visible {\n    outline: 3px solid var(--ea-accent);\n    outline-offset: 3px;\n  }\n\n  .ea-icon {\n    display: inline-flex;\n    width: 1em;\n    height: 1em;\n    flex-shrink: 0;\n  }\n\n  .ea-icon svg {\n    width: 100%;\n    height: 100%;\n  }\n\n  .ea-sr {\n    position: absolute !important;\n    width: 1px;\n    height: 1px;\n    overflow: hidden;\n    clip: rect(0 0 0 0);\n    white-space: nowrap;\n  }\n\n  \/* \u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\n     1. BANDEAU\n     \u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550 *\/\n  .ea-hero {\n    position: relative;\n    display: flex;\n    align-items: center;\n    min-height: clamp(240px, 30vh, 320px);\n    overflow: hidden;\n    padding: 36px 48px;\n    border-radius: 22px;\n    background-color: var(--ea-primary);\n    background-image: radial-gradient(120% 90% at 85% 10%, rgba(255, 255, 255, 0.16), transparent 60%);\n    background-size: cover;\n    background-position: center;\n    color: #fff;\n  }\n\n  .ea-hero::before {\n    content: '';\n    position: absolute;\n    inset: 0;\n    background: linear-gradient(90deg, rgba(14, 22, 17, 0.8) 0%, rgba(14, 22, 17, 0.5) 45%, rgba(14, 22, 17, 0.1) 80%);\n  }\n\n  .ea-hero--plain::before {\n    background: linear-gradient(90deg, rgba(0, 0, 0, 0.2), rgba(0, 0, 0, 0));\n  }\n\n  .ea-hero-inner {\n    position: relative;\n    max-width: 560px;\n  }\n\n  .ea-eyebrow {\n    display: inline-block;\n    margin-bottom: 10px;\n    font-size: 11px;\n    font-weight: 700;\n    letter-spacing: 0.18em;\n    text-transform: uppercase;\n    color: #f6d9c4;\n  }\n\n  .ea-hero-title {\n    margin: 0 0 10px !important;\n    color: #fff !important;\n    font-size: clamp(26px, 3.2vw, 40px) !important;\n    line-height: 1.1 !important;\n  }\n\n  .ea-hero-text {\n    margin: 0 !important;\n    color: rgba(255, 255, 255, 0.9) !important;\n    font-size: 15px;\n    line-height: 1.55;\n  }\n\n\n  \/* Sans bandeau : police, taille et couleur du titre restent celles du th\u00e8me. *\/\n  .ea-intro {\n    max-width: 720px;\n    margin: 0 auto;\n    text-align: center;\n  }\n\n  .ea-intro-title {\n    margin: 0 0 8px !important;\n  }\n\n  .ea-intro-text {\n    margin: 0 !important;\n    opacity: 0.85;\n  }\n\n\n  \/* \u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\n     2. NAVIGATION RAPIDE\n     \u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550 *\/\n  \/* Reste \u00e0 sa place : coll\u00e9e en haut, elle s'ajoutait aux en-t\u00eates et barres\n     fixes des th\u00e8mes (logo flottant de Camping Solaire\u2026) et masquait la page. *\/\n  .ea-nav {\n    position: relative;\n    z-index: 2;\n    display: flex;\n    justify-content: center;\n    margin-top: 18px;\n    pointer-events: none;\n  }\n\n  .ea-nav-inner {\n    display: flex;\n    gap: 4px;\n    max-width: 100%;\n    overflow-x: auto;\n    padding: 4px;\n    border: 1px solid var(--ea-line);\n    border-radius: 999px;\n    background: rgba(255, 253, 249, 0.95);\n    backdrop-filter: blur(10px);\n    box-shadow: 0 4px 14px rgba(31, 42, 36, 0.08);\n    scrollbar-width: none;\n    pointer-events: auto;\n  }\n\n  .ea-nav-inner::-webkit-scrollbar {\n    display: none;\n  }\n\n  .ea-nav-links {\n    display: flex;\n    gap: 4px;\n  }\n\n  .ea-nav a {\n    flex-shrink: 0;\n    display: inline-flex;\n    align-items: center;\n    gap: 7px;\n    min-height: 38px;\n    padding: 0 16px;\n    border-radius: 999px;\n    color: var(--ea-ink-soft) !important;\n    font-size: 14px;\n    font-weight: 600;\n    text-decoration: none !important;\n    white-space: nowrap;\n    transition: background 0.2s, color 0.2s;\n  }\n\n  .ea-nav a .ea-icon {\n    font-size: 15px;\n  }\n\n  .ea-nav a:hover {\n    background: rgba(31, 42, 36, 0.06);\n    color: var(--ea-ink) !important;\n  }\n\n  .ea-nav a[aria-current=\"true\"] {\n    background: var(--ea-primary);\n    color: #fff !important;\n  }\n\n  .ea-nav-sep {\n    flex-shrink: 0;\n    align-self: center;\n    width: 1px;\n    height: 22px;\n    margin: 0 4px;\n    background: var(--ea-line);\n  }\n\n  \/* Sur place \/ Aux alentours *\/\n  .ea-scope {\n    display: flex;\n    flex-shrink: 0;\n    gap: 2px;\n    padding: 2px;\n    border-radius: 999px;\n    background: #f1ece3;\n  }\n\n  .ea-scope button {\n    min-height: 34px;\n    padding: 0 14px;\n    border: 0;\n    border-radius: 999px;\n    background: transparent;\n    color: var(--ea-ink-soft);\n    font-size: 13px;\n    font-weight: 600;\n    white-space: nowrap;\n    cursor: pointer;\n  }\n\n  .ea-scope button:hover {\n    color: var(--ea-ink);\n  }\n\n  .ea-scope button:disabled {\n    opacity: 0.4;\n    cursor: not-allowed;\n  }\n\n  .ea-scope button:disabled:hover {\n    color: var(--ea-ink-soft);\n  }\n\n  .ea-scope button[aria-pressed=\"true\"] {\n    background: #fff;\n    color: var(--ea-primary);\n    box-shadow: 0 1px 3px rgba(31, 42, 36, 0.15);\n  }\n\n  \/* \u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\n     SECTIONS\n     \u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550 *\/\n  .ea-section {\n    padding-top: 44px;\n    scroll-margin-top: calc(var(--ea-header) + 64px);\n  }\n\n  .ea-section-head {\n    display: flex;\n    flex-wrap: wrap;\n    align-items: center;\n    justify-content: space-between;\n    gap: 10px 24px;\n    margin-bottom: 16px;\n  }\n\n  .ea-section-title {\n    display: flex;\n    align-items: center;\n    gap: 10px;\n    margin: 0 !important;\n    color: var(--ea-ink) !important;\n    font-size: clamp(21px, 2.2vw, 27px) !important;\n    line-height: 1.2 !important;\n  }\n\n  .ea-section-title .ea-icon {\n    color: var(--ea-accent);\n    font-size: 0.95em;\n  }\n\n  .ea-section-sub {\n    margin: 4px 0 0 !important;\n    color: var(--ea-muted);\n    font-size: 14px;\n  }\n\n  .ea-head-side {\n    display: flex;\n    flex-wrap: wrap;\n    align-items: center;\n    gap: 8px;\n    color: var(--ea-ink);\n    font-size: 14px;\n    font-weight: 500;\n  }\n\n  .ea-round {\n    display: inline-flex;\n    align-items: center;\n    justify-content: center;\n    width: 36px;\n    height: 36px;\n    border: 1px solid var(--ea-line);\n    border-radius: 50%;\n    background: var(--ea-paper);\n    color: var(--ea-ink);\n    font-size: 17px;\n    cursor: pointer;\n    transition: background 0.2s, border-color 0.2s;\n  }\n\n  .ea-round:hover:not(:disabled) {\n    border-color: var(--ea-primary);\n    background: #fff;\n  }\n\n  .ea-round:disabled {\n    opacity: 0.35;\n    cursor: not-allowed;\n  }\n\n  \/* \u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\n     CARTE \u00c9V\u00c9NEMENT (composant r\u00e9utilisable)\n     \u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550 *\/\n  .ea-grid {\n    display: grid;\n    grid-template-columns: repeat(3, minmax(0, 1fr));\n    gap: 16px;\n  }\n\n  .ea-grid--4 {\n    grid-template-columns: repeat(4, minmax(0, 1fr));\n  }\n\n  .ea-card {\n    position: relative;\n    display: flex;\n    flex-direction: column;\n    min-width: 0;\n    overflow: hidden;\n    border: 1px solid rgba(31, 42, 36, 0.06);\n    border-radius: 14px;\n    background: var(--ea-paper);\n    box-shadow: 0 1px 2px rgba(31, 42, 36, 0.04), 0 4px 12px rgba(31, 42, 36, 0.05);\n    cursor: pointer;\n    transition: box-shadow 0.25s ease, transform 0.25s ease;\n  }\n\n  .ea-card:hover {\n    box-shadow: var(--ea-shadow-hover);\n    transform: translateY(-2px);\n  }\n\n  .ea-card--ended {\n    opacity: 0.6;\n  }\n\n  .ea-card-media {\n    position: relative;\n    aspect-ratio: 16 \/ 9;\n    overflow: hidden;\n    background: #ece5d8;\n  }\n\n  .ea-grid--4 .ea-card-media {\n    aspect-ratio: 16 \/ 10;\n  }\n\n  .ea-card-media img {\n    display: block;\n    width: 100%;\n    height: 100%;\n    object-fit: cover;\n    transition: transform 0.5s ease;\n  }\n\n  .ea-card:hover .ea-card-media img {\n    transform: scale(1.04);\n  }\n\n  \/* Image par d\u00e9faut du chatbot (souvent un logo) : enti\u00e8re, sur fond doux *\/\n  .ea-card-media img.ea-img--default,\n  .ea-modal-img.ea-img--default {\n    object-fit: contain;\n    padding: 10%;\n    background: #efe8dc;\n  }\n\n  .ea-card:hover .ea-card-media img.ea-img--default {\n    transform: none;\n  }\n\n  \/* Cr\u00e9dit photo (obligatoire pour les images sous licence CC BY\u2026) *\/\n  .ea-credit {\n    position: absolute;\n    right: 6px;\n    bottom: 6px;\n    z-index: 2;\n    max-width: calc(100% - 12px);\n    padding: 2px 6px;\n    border-radius: 4px;\n    background: rgba(0, 0, 0, 0.55);\n    color: #fff;\n    font-size: 10px;\n    line-height: 1.3;\n    white-space: nowrap;\n    overflow: hidden;\n    text-overflow: ellipsis;\n    pointer-events: none;\n  }\n\n  .ea-modal-media {\n    position: relative;\n  }\n\n  .ea-card-fallback {\n    display: flex;\n    align-items: center;\n    justify-content: center;\n    width: 100%;\n    height: 100%;\n    background: linear-gradient(135deg, var(--ea-cat-bg), #efe8dc);\n    color: var(--ea-cat-fg);\n    font-size: 34px;\n  }\n\n  .ea-live {\n    position: absolute;\n    bottom: 10px;\n    left: 10px;\n    display: inline-flex;\n    align-items: center;\n    gap: 6px;\n    padding: 4px 10px;\n    border-radius: 6px;\n    background: #d9412b;\n    color: #fff;\n    font-size: 12px;\n    font-weight: 700;\n  }\n\n  .ea-live::before {\n    content: '';\n    width: 6px;\n    height: 6px;\n    border-radius: 50%;\n    background: #fff;\n  }\n\n  \/* Badge \u00ab Sur inscription \u00bb (en haut \u00e0 droite de l'image) *\/\n  .ea-reg {\n    position: absolute;\n    top: 10px;\n    right: 10px;\n    display: inline-flex;\n    align-items: center;\n    gap: 5px;\n    padding: 5px 10px;\n    border-radius: 999px;\n    background: #fff;\n    color: var(--ea-ink);\n    font-size: 12px;\n    font-weight: 700;\n    box-shadow: 0 2px 8px rgba(0, 0, 0, 0.18);\n  }\n\n  .ea-reg .ea-icon {\n    color: var(--ea-accent);\n    font-size: 14px;\n  }\n\n  \/* Filtres cat\u00e9gories (sous \u00ab Activit\u00e9s du jour \u00bb, valables pour toute la page) *\/\n  .ea-cats {\n    display: flex;\n    flex-wrap: wrap;\n    gap: 8px;\n    margin: -4px 0 18px;\n  }\n\n  .ea-cat {\n    display: inline-flex;\n    align-items: center;\n    gap: 6px;\n    min-height: 34px;\n    padding: 0 14px;\n    border: 1px solid transparent;\n    border-radius: 999px;\n    background: var(--ea-cat-bg, #fff);\n    color: var(--ea-cat-fg, var(--ea-ink));\n    font-size: 13px;\n    font-weight: 600;\n    cursor: pointer;\n    transition: border-color 0.2s, box-shadow 0.2s;\n  }\n\n  .ea-cat:hover {\n    border-color: currentColor;\n  }\n\n  .ea-cat[aria-pressed=\"true\"] {\n    border-color: currentColor;\n    box-shadow: inset 0 0 0 1px currentColor;\n  }\n\n  .ea-cat--all {\n    background: #fff;\n    color: var(--ea-ink);\n    border-color: var(--ea-line);\n  }\n\n  .ea-cat--all[aria-pressed=\"true\"] {\n    background: var(--ea-primary);\n    border-color: var(--ea-primary);\n    color: #fff;\n    box-shadow: none;\n  }\n\n  \/* Badge de date sur l'image : format unique (libell\u00e9 \/ jour \/ mois), taille fixe *\/\n  .ea-date {\n    position: absolute;\n    top: 10px;\n    left: 10px;\n    display: flex;\n    flex-direction: column;\n    align-items: center;\n    justify-content: center;\n    width: 64px;\n    height: 74px;\n    padding: 4px;\n    border-radius: 10px;\n    background: var(--ea-accent);\n    color: #fff;\n    text-align: center;\n    text-transform: uppercase;\n    box-shadow: 0 3px 8px rgba(0, 0, 0, 0.18);\n  }\n\n  .ea-date-top,\n  .ea-date-month {\n    display: block;\n    max-width: 100%;\n    font-size: 9.5px;\n    font-weight: 700;\n    line-height: 1.2;\n    letter-spacing: 0.04em;\n    white-space: nowrap;\n    overflow: hidden;\n    text-overflow: ellipsis;\n  }\n\n  \/* Couleurs par cas (le texte du badge dit aussi le cas : \u00ab Auj. \u00bb, \u00ab Du \u2026 \u2192 \u00bb, \u00ab Jusqu'au \u00bb) *\/\n  .ea-date--today {\n    background: var(--ea-primary);\n  }\n\n  .ea-date--period {\n    background: #3f5f7f;\n  }\n\n  .ea-date--ongoing {\n    background: #a36a12;\n  }\n\n  \/* Fin de p\u00e9riode, sous le d\u00e9but *\/\n  .ea-date-end {\n    display: block;\n    max-width: 100%;\n    margin-top: 3px;\n    padding-top: 3px;\n    border-top: 1px solid rgba(255, 255, 255, 0.45);\n    font-size: 9.5px;\n    font-weight: 700;\n    line-height: 1.1;\n    letter-spacing: 0.02em;\n    white-space: nowrap;\n    overflow: hidden;\n    text-overflow: ellipsis;\n  }\n\n  .ea-date-top {\n    opacity: 0.9;\n  }\n\n  .ea-date-day {\n    display: block;\n    font-size: 22px;\n    font-weight: 800;\n    line-height: 1.05;\n  }\n\n  .ea-card-body {\n    display: flex;\n    flex: 1;\n    flex-direction: column;\n    gap: 6px;\n    padding: 12px 14px 14px;\n  }\n\n  .ea-card-top {\n    display: flex;\n    flex-wrap: wrap;\n    align-items: center;\n    gap: 6px 10px;\n  }\n\n  .ea-when {\n    display: inline-flex;\n    align-items: center;\n    gap: 5px;\n    color: var(--ea-primary);\n    font-size: 14px;\n    font-weight: 700;\n  }\n\n  .ea-pill {\n    display: inline-flex;\n    align-items: center;\n    padding: 2px 9px;\n    border-radius: 999px;\n    background: var(--ea-cat-bg, #eef0ec);\n    color: var(--ea-cat-fg, #3c463f);\n    font-size: 11px;\n    font-weight: 600;\n  }\n\n  .ea-card-title {\n    margin: 0 !important;\n    color: var(--ea-ink) !important;\n    font-size: 17px !important;\n    font-weight: 600 !important;\n    line-height: 1.3 !important;\n    display: -webkit-box;\n    -webkit-line-clamp: 2;\n    -webkit-box-orient: vertical;\n    overflow: hidden;\n  }\n\n  .ea-grid--4 .ea-card-title {\n    font-size: 16px !important;\n  }\n\n  .ea-place {\n    display: flex;\n    align-items: center;\n    gap: 5px;\n    margin: 0 !important;\n    color: var(--ea-muted);\n    font-size: 13px;\n  }\n\n  .ea-place .ea-icon {\n    color: var(--ea-muted);\n  }\n\n  .ea-card-desc {\n    margin: 0 !important;\n    color: var(--ea-ink-soft);\n    font-size: 13px;\n    line-height: 1.5;\n    display: -webkit-box;\n    -webkit-line-clamp: 2;\n    -webkit-box-orient: vertical;\n    overflow: hidden;\n  }\n\n  .ea-cta {\n    display: inline-flex;\n    align-items: center;\n    align-self: flex-start;\n    gap: 6px;\n    margin-top: auto;\n    padding: 8px 16px;\n    border-radius: 999px;\n    background: color-mix(in srgb, var(--ea-primary) 12%, #fff);\n    color: var(--ea-primary);\n    font-size: 13px;\n    font-weight: 700;\n    transition: background 0.2s, color 0.2s;\n  }\n\n  \/* Bouton coll\u00e9 en bas, avec un peu d'air au-dessus *\/\n  .ea-card-body .ea-cta {\n    margin-top: auto;\n    transform: translateY(4px);\n  }\n\n  .ea-card:hover .ea-cta {\n    background: var(--ea-primary);\n    color: #fff;\n  }\n\n  .ea-cta .ea-icon {\n    transition: transform 0.2s ease;\n  }\n\n  .ea-card:hover .ea-cta .ea-icon {\n    transform: translateX(3px);\n  }\n\n  \/* \u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\n     BOUTONS\n     \u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550 *\/\n  .ea-btn {\n    display: inline-flex;\n    align-items: center;\n    justify-content: center;\n    gap: 7px;\n    min-height: 40px;\n    padding: 0 20px;\n    border: 0;\n    border-radius: 999px;\n    background: var(--ea-primary);\n    color: #fff !important;\n    font-size: 14px;\n    font-weight: 600;\n    text-decoration: none !important;\n    cursor: pointer;\n    transition: background 0.2s, filter 0.2s;\n  }\n\n  .ea-btn:hover {\n    background: var(--ea-primary-dark);\n  }\n\n  \/* Bouton secondaire : capsule terracotta douce *\/\n  .ea-btn--soft {\n    background: #f6e3d6;\n    color: var(--ea-ink) !important;\n  }\n\n  .ea-btn--soft:hover {\n    background: #f1d5c2;\n  }\n\n  \/* Carrousel (Activit\u00e9s du jour) *\/\n  .ea-carousel {\n    position: relative;\n  }\n\n  .ea-carousel-track {\n    display: grid;\n    grid-auto-flow: column;\n    grid-auto-columns: calc((100% - 32px) \/ 3);\n    gap: 16px;\n    overflow-x: auto;\n    scroll-snap-type: x mandatory;\n    scroll-behavior: smooth;\n    scrollbar-width: none;\n    padding: 4px 2px 8px;\n    margin: -4px -2px -8px;\n  }\n\n  .ea-carousel-track::-webkit-scrollbar {\n    display: none;\n  }\n\n  .ea-carousel--4 .ea-carousel-track {\n    grid-auto-columns: calc((100% - 48px) \/ 4);\n  }\n\n  .ea-carousel--4 .ea-card-media {\n    aspect-ratio: 16 \/ 10;\n  }\n\n  .ea-carousel--4 .ea-card-title {\n    font-size: 16px !important;\n  }\n\n  .ea-carousel-track > .ea-card {\n    scroll-snap-align: start;\n  }\n\n  .ea-carousel-btn {\n    position: absolute;\n    top: 38%;\n    z-index: 2;\n    display: inline-flex;\n    align-items: center;\n    justify-content: center;\n    width: 44px;\n    height: 44px;\n    border: 1px solid var(--ea-line);\n    border-radius: 50%;\n    background: var(--ea-paper);\n    color: var(--ea-ink);\n    font-size: 22px;\n    line-height: 1;\n    box-shadow: 0 6px 18px rgba(31, 42, 36, 0.18);\n    cursor: pointer;\n    transition: background 0.2s, color 0.2s;\n  }\n\n  .ea-carousel-btn:hover {\n    background: var(--ea-primary);\n    color: #fff;\n  }\n\n  .ea-carousel-btn[hidden] {\n    display: none;\n  }\n\n  .ea-carousel-btn--prev {\n    left: -18px;\n  }\n\n  .ea-carousel-btn--next {\n    right: -18px;\n  }\n\n  @media (max-width: 1100px) {\n    .ea-carousel--4 .ea-carousel-track {\n      grid-auto-columns: calc((100% - 32px) \/ 3);\n    }\n  }\n\n  @media (max-width: 900px) {\n    .ea-carousel-track,\n    .ea-carousel--4 .ea-carousel-track {\n      grid-auto-columns: calc((100% - 16px) \/ 2);\n    }\n  }\n\n  @media (max-width: 640px) {\n    .ea-carousel-track,\n    .ea-carousel--4 .ea-carousel-track {\n      grid-auto-columns: 85%;\n    }\n\n    .ea-carousel-btn {\n      display: none;\n    }\n  }\n\n  .ea-more {\n    display: flex;\n    justify-content: center;\n    margin-top: 22px;\n  }\n\n  \/* \u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\n     TEMPS FORTS \u2014 barre des jours\n     \u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550 *\/\n  .ea-days {\n    display: grid;\n    grid-template-columns: repeat(7, minmax(0, 1fr));\n    gap: 2px;\n    margin-bottom: 16px;\n    padding: 4px;\n    border-radius: 14px;\n    background: #efe9df;\n  }\n\n  .ea-day {\n    position: relative;\n    display: flex;\n    flex-direction: column;\n    align-items: center;\n    justify-content: center;\n    gap: 1px;\n    min-height: 52px;\n    padding: 6px 4px;\n    border: 0;\n    border-radius: 11px;\n    background: transparent;\n    color: var(--ea-ink);\n    text-align: center;\n    cursor: pointer;\n    transition: background 0.2s;\n  }\n\n  .ea-day:hover {\n    background: rgba(255, 253, 249, 0.7);\n  }\n\n  .ea-day-name {\n    font-size: 14px;\n    font-weight: 600;\n  }\n\n  .ea-day-date {\n    font-size: 12px;\n    color: var(--ea-muted);\n  }\n\n  \/* Petit point : ce jour a des activit\u00e9s (le nombre est dans l'aria-label) *\/\n  .ea-day.has-events::after {\n    content: '';\n    position: absolute;\n    top: 7px;\n    right: 9px;\n    width: 6px;\n    height: 6px;\n    border-radius: 50%;\n    background: var(--ea-accent);\n  }\n\n  .ea-day.is-today .ea-day-name {\n    color: var(--ea-accent);\n  }\n\n  .ea-day[aria-pressed=\"true\"] {\n    background: var(--ea-primary);\n    color: #fff;\n  }\n\n  .ea-day[aria-pressed=\"true\"] .ea-day-name,\n  .ea-day[aria-pressed=\"true\"] .ea-day-date {\n    color: #fff;\n  }\n\n  .ea-day[aria-pressed=\"true\"].has-events::after {\n    background: #fff;\n  }\n\n  \/* \u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\n     \u00c0 VENIR \u2014 listes d\u00e9roulantes\n     \u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550 *\/\n  .ea-select {\n    min-height: 38px;\n    padding: 0 32px 0 14px;\n    border: 1px solid var(--ea-line);\n    border-radius: 10px;\n    background-color: var(--ea-paper);\n    color: var(--ea-ink);\n    font-size: 13px;\n    font-weight: 600;\n    cursor: pointer;\n  }\n\n  \/* \u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\n     6. CALENDRIER (secondaire, repliable)\n     \u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550 *\/\n  .ea-cal-panel[hidden] {\n    display: none;\n  }\n\n  .ea-cal-toolbar {\n    display: flex;\n    align-items: center;\n    justify-content: space-between;\n    gap: 12px;\n    margin-bottom: 16px;\n  }\n\n  .ea-cal-month {\n    margin: 0 !important;\n    font-size: 17px !important;\n    color: var(--ea-ink) !important;\n  }\n\n  .ea-month {\n    overflow: hidden;\n    border-radius: var(--ea-radius);\n    background: var(--ea-paper);\n    box-shadow: var(--ea-shadow);\n  }\n\n  .ea-month-head {\n    display: grid;\n    grid-template-columns: repeat(7, minmax(0, 1fr));\n    border-bottom: 1px solid var(--ea-line);\n  }\n\n  .ea-month-head div {\n    padding: 12px 6px;\n    color: var(--ea-muted);\n    font-size: 12px;\n    font-weight: 700;\n    letter-spacing: 0.08em;\n    text-align: center;\n    text-transform: uppercase;\n  }\n\n  .ea-mrow {\n    display: grid;\n    grid-template-columns: repeat(7, minmax(0, 1fr));\n    grid-template-rows: 34px repeat(3, 26px) 22px;\n    border-bottom: 1px solid var(--ea-line);\n  }\n\n  .ea-mrow:last-child {\n    border-bottom: 0;\n  }\n\n  .ea-mcell {\n    grid-row: 1 \/ -1;\n    padding: 0;\n    border: 0;\n    border-left: 1px solid var(--ea-line);\n    background: transparent;\n    cursor: pointer;\n    transition: background 0.15s;\n  }\n\n  .ea-mcell:first-child {\n    border-left: 0;\n  }\n\n  .ea-mcell:hover {\n    background: rgba(31, 42, 36, 0.03);\n  }\n\n  .ea-mcell--out {\n    background: rgba(31, 42, 36, 0.025);\n  }\n\n  .ea-mcell--selected {\n    background: color-mix(in srgb, var(--ea-primary) 10%, transparent) !important;\n    box-shadow: inset 0 0 0 2px var(--ea-primary);\n  }\n\n  .ea-mnum {\n    grid-row: 1;\n    z-index: 1;\n    justify-self: start;\n    align-self: center;\n    display: inline-flex;\n    align-items: center;\n    justify-content: center;\n    width: 28px;\n    height: 28px;\n    margin-left: 6px;\n    border-radius: 50%;\n    color: var(--ea-ink);\n    font-size: 13px;\n    font-weight: 600;\n    pointer-events: none;\n  }\n\n  .ea-mnum--out {\n    color: #b8b2a6;\n  }\n\n  .ea-mnum--today {\n    background: var(--ea-primary);\n    color: #fff;\n  }\n\n  .ea-mbar {\n    z-index: 1;\n    min-width: 0;\n    margin: 2px 3px;\n    padding: 0 8px;\n    border: 0;\n    border-radius: 6px;\n    background: var(--ea-cat-bg);\n    color: var(--ea-cat-fg);\n    font-size: 12px;\n    font-weight: 600;\n    line-height: 22px;\n    text-align: left;\n    white-space: nowrap;\n    overflow: hidden;\n    text-overflow: ellipsis;\n    cursor: pointer;\n  }\n\n  .ea-mbar:hover {\n    filter: brightness(0.96);\n  }\n\n  .ea-mbar--from-before {\n    border-top-left-radius: 0;\n    border-bottom-left-radius: 0;\n  }\n\n  .ea-mbar--to-after {\n    border-top-right-radius: 0;\n    border-bottom-right-radius: 0;\n  }\n\n  .ea-mbar--ended {\n    opacity: 0.5;\n  }\n\n  .ea-mmore {\n    grid-row: 5;\n    z-index: 1;\n    align-self: center;\n    padding-left: 8px;\n    color: var(--ea-muted);\n    font-size: 12px;\n    font-weight: 600;\n    pointer-events: none;\n  }\n\n  .ea-daypanel {\n    margin-top: 24px;\n  }\n\n  .ea-daypanel-title {\n    margin: 0 0 14px !important;\n    color: var(--ea-ink) !important;\n    font-size: 19px !important;\n  }\n\n  \/* \u2500\u2500\u2500 \u00c9tats vides \u2500\u2500\u2500 *\/\n  .ea-empty {\n    display: flex;\n    flex-direction: column;\n    align-items: center;\n    gap: 6px;\n    padding: 28px 20px;\n    border-radius: var(--ea-radius);\n    background: var(--ea-paper);\n    color: var(--ea-ink-soft);\n    text-align: center;\n    font-size: 14px;\n  }\n\n  .ea-empty .ea-icon {\n    margin-bottom: 4px;\n    color: var(--ea-accent);\n    font-size: 24px;\n  }\n\n  .ea-empty strong {\n    color: var(--ea-ink);\n    font-size: 16px;\n  }\n\n  .ea-empty .ea-btn {\n    margin-top: 14px;\n  }\n\n  \/* \u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\n     MODAL (rattach\u00e9e au <body 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\" style=\"background-image:url(https:\/\/www.grandpicsaintloup-tourisme.fr\/_objects\/tao_suite_agenda\/fma\/photos\/affiche-projet-1-52111-52436.jpg)\">\n    <div class=\"ea-hero-inner\">\n      <span class=\"ea-eyebrow\">Beleef onvergetelijke momenten<\/span>\n      <h1 class=\"ea-hero-title\">Animatie &amp; evenementen<\/h1>\n      <p class=\"ea-hero-text\">Alle activiteiten van het moment, de hoogtepunten van de week en komende evenementen tijdens uw verblijf.<\/p>\n    <\/div>\n  <\/section>\n\n  <!-- 2. Navigation rapide (collante) + filtre sur place \/ aux alentours -->\n  <nav class=\"ea-nav\" aria-label=\"Pagina-onderdelen\">\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>Vandaag<\/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>Deze 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>Binnenkort<\/a>\n              <\/div>\n              <span class=\"ea-nav-sep\" aria-hidden=\"true\"><\/span>\n        <div class=\"ea-scope\" role=\"group\" aria-label=\"Waar?\">\n          <button type=\"button\" data-scope=\"all\" aria-pressed=\"true\">Alles<\/button>\n                    <button type=\"button\" data-scope=\"onsite\" aria-pressed=\"false\" disabled title=\"Momenteel geen activiteit ter plaatse\">Ter plaatse<\/button>\n          <button type=\"button\" data-scope=\"nearby\" aria-pressed=\"false\">In de buurt<\/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  \n  <noscript>\n    <ul>\n              <li><strong>Wekelijkse markt van Aimargues<\/strong> \u2014 Du 01\/01\/2026 \u00e0 08:00 au 31\/12\/2026 \u00e0 23:59 \u2014 30470 Aimargues<\/li>\n              <li><strong>Wekelijkse markt van Junas<\/strong> \u2014 Du 01\/01\/2026 \u00e0 09:00 au 31\/12\/2026 \u00e0 23:59 \u2014 30250 Junas<\/li>\n              <li><strong>Wekelijkse markt van Calvisson<\/strong> \u2014 Du 20\/07\/2026 \u00e0 08:00 au 31\/12\/2026 \u00e0 23:59 \u2014 30420 Calvisson<\/li>\n              <li><strong>Tentoonstelling van Julia Kaulbach<\/strong> \u2014 Du 23\/08\/2026 au 14\/11\/2026 \u00e0 23:59 \u2014 34270 Lauret<\/li>\n              <li><strong>Lou Casa, Barbara et Brel<\/strong> \u2014 Du 12\/11\/2026 \u00e0 20:30 au 12\/11\/2026 \u00e0 23:59 \u2014 34980 Saint-G\u00e9ly-du-Fesc<\/li>\n              <li><strong>HANDBAL: MHB TEGEN DUNKERQUE<\/strong> \u2014 Du 13\/11\/2026 au 13\/11\/2026 \u00e0 23:59 \u2014 34090 Montpellier<\/li>\n              <li><strong>VERY IMPRO PEOPLE - GAZETTE CAF\u00c9<\/strong> \u2014 Du 13\/11\/2026 au 13\/11\/2026 \u00e0 23:59 \u2014 34000 Montpellier<\/li>\n              <li><strong>IJSHOCKEY: VIPERS VS HCMP<\/strong> \u2014 Du 14\/11\/2026 au 14\/11\/2026 \u00e0 23:59 \u2014 34000 Montpellier<\/li>\n              <li><strong>MONTPELLIER BASKET VS SAINT-VALLIER (NM2)<\/strong> \u2014 Du 14\/11\/2026 au 14\/11\/2026 \u00e0 23:59 \u2014 34080 Montpellier<\/li>\n              <li><strong>THEATER \u00abMIRABEAU DE ONVERSCHROKKENE\u00bb<\/strong> \u2014 Du 15\/11\/2026 au 15\/11\/2026 \u00e0 23:59 \u2014 34250 Palavas-les-Flots<\/li>\n              <li><strong>DE KONINGINNEN VAN BURLESQUE<\/strong> \u2014 Du 19\/11\/2026 au 19\/11\/2026 \u00e0 23:59 \u2014 34000 Montpellier<\/li>\n              <li><strong>MET WEINIG BAGAGE<\/strong> \u2014 Du 19\/11\/2026 au 19\/11\/2026 \u00e0 23:59 \u2014 34090 Montpellier<\/li>\n              <li><strong>EOLIENNE LOOP 2026<\/strong> \u2014 Du 21\/11\/2026 au 21\/11\/2026 \u00e0 23:59 \u2014 34830 Clapiers<\/li>\n              <li><strong>BLMA VS LANDERNEAU<\/strong> \u2014 Du 22\/11\/2026 au 22\/11\/2026 \u00e0 23:59 \u2014 34970 Lattes<\/li>\n              <li><strong>Kerstmarkt<\/strong> \u2014 Du 22\/11\/2026 \u00e0 10:00 au 22\/11\/2026 \u00e0 23:59 \u2014 34270 Sainte-Croix-de-Quintillargues<\/li>\n              <li><strong>HET DAK VAN DE WERELD<\/strong> \u2014 Du 27\/11\/2026 au 27\/11\/2026 \u00e0 23:59 \u2014 34090 Montpellier<\/li>\n              <li><strong>BLMA TEGEN CHARNAY<\/strong> \u2014 Du 09\/12\/2026 au 09\/12\/2026 \u00e0 23:59 \u2014 34970 Lattes<\/li>\n              <li><strong>P\u00c9TROLE<\/strong> \u2014 Du 10\/12\/2026 au 10\/12\/2026 \u00e0 23:59 \u2014 34000 Montpellier<\/li>\n              <li><strong>MICHELE LAROQUE &amp; KAD MERAD &quot;L&#039;\u00c2GE B\u00caTE&quot;<\/strong> \u2014 Du 11\/12\/2026 au 11\/12\/2026 \u00e0 23:59 \u2014 34000 Montpellier<\/li>\n              <li><strong>ZWART, JOKSER EN EENOOGIG, HET VERHAAL VAN SAMMY DAVIS<\/strong> \u2014 Du 11\/12\/2026 au 11\/12\/2026 \u00e0 23:59 \u2014 34170 Castelnau-le-Lez<\/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=\"Sluiten\">\u00d7<\/button>\n    <div id=\"ea-modal-content\"><\/div>\n  <\/div>\n<\/div>\n\n<script>\n  (function() {\n    var EVENTS = [{\"id\":4,\"name\":\"Wekelijkse markt van Aimargues\",\"type\":\"evenements-locaux-203\",\"category\":\"markten-beurzen\",\"label\":\"Du 01\\\/01\\\/2026 \\u00e0 08:00 au 31\\\/12\\\/2026 \\u00e0 23:59\",\"start\":\"2026-01-01\",\"end\":\"2026-12-31\",\"start_time\":\"08:00\",\"end_time\":\"\",\"open_start\":false,\"city\":\"30470 Aimargues\",\"onsite\":false,\"spot\":\"\",\"registration\":false,\"description\":\"Streekproductenmarkt en rommelmarkt\",\"image\":\"\",\"credit\":\"\",\"link\":\"\"},{\"id\":12,\"name\":\"Wekelijkse markt van Junas\",\"type\":\"evenements-locaux-203\",\"category\":\"markten-beurzen\",\"label\":\"Du 01\\\/01\\\/2026 \\u00e0 09:00 au 31\\\/12\\\/2026 \\u00e0 23:59\",\"start\":\"2026-01-01\",\"end\":\"2026-12-31\",\"start_time\":\"09:00\",\"end_time\":\"\",\"open_start\":false,\"city\":\"30250 Junas\",\"onsite\":false,\"spot\":\"\",\"registration\":false,\"description\":\"Elke dinsdag. De kleine markt verwelkomt twee lokale producenten in het dorpscentrum.\",\"image\":\"\",\"credit\":\"\",\"link\":\"https:\\\/\\\/www.junas.fr\\\/notre-village\\\/junas-pratique\\\/commerces\\\/joomlannuaire\\\/fiche\\\/14-le-petit-marche-du-mardi\\\/5-commerces.html\"},{\"id\":9,\"name\":\"Wekelijkse markt van Calvisson\",\"type\":\"evenements-locaux-203\",\"category\":\"markten-beurzen\",\"label\":\"Du 20\\\/07\\\/2026 \\u00e0 08:00 au 31\\\/12\\\/2026 \\u00e0 23:59\",\"start\":\"2026-07-20\",\"end\":\"2026-12-31\",\"start_time\":\"08:00\",\"end_time\":\"\",\"open_start\":false,\"city\":\"30420 Calvisson\",\"onsite\":false,\"spot\":\"\",\"registration\":false,\"description\":\"Elke zondag wordt het grote plein van Calvisson het hele jaar door ingenomen door een kleurrijke markt met talrijke standhouders.\",\"image\":\"\",\"credit\":\"\",\"link\":\"http:\\\/\\\/www.calvisson.com\\\/\"},{\"id\":13,\"name\":\"Tentoonstelling van Julia Kaulbach\",\"type\":\"evenements-locaux-203\",\"category\":\"tentoonstellingen\",\"label\":\"Du 23\\\/08\\\/2026 au 14\\\/11\\\/2026 \\u00e0 23:59\",\"start\":\"2026-08-23\",\"end\":\"2026-11-14\",\"start_time\":\"\",\"end_time\":\"\",\"open_start\":false,\"city\":\"34270 Lauret\",\"onsite\":false,\"spot\":\"\",\"registration\":false,\"description\":\"Julia Kaulbach, een Duitse kunstenares die in Sauve woont en werkt, presenteert van 23 augustus tot 14 november 2026 een selectie van haar recente werken in de Auberge du C\\u00e8dre in Lauret. Kom haar ontmoeten tijdens de vernissage op zondag 23 augustus om 17.00 uur voor een gezellig moment en ontdek haar olieverfschilderijen, aquarellen, etsen, linodrukken en werken uit haar nieuwe acrylreeks met de titel \\u00ab Multiverses \\u00bb. In haar werk gaan traditionele technieken samen met een eigentijdse beeldtaal. Veel van haar aquarellen worden rechtstreeks in de landschappen van de C\\u00e9vennes en zelfs in de Auberge gemaakt, terwijl haar grootformaat schilderijen thema\\u2019s verkennen zoals waarneming, transformatie en de onzichtbare banden tussen dingen. Tot snel voor deze mooie ontmoeting.\",\"image\":\"https:\\\/\\\/www.grandpicsaintloup-tourisme.fr\\\/_objects\\\/tao_suite_agenda\\\/fma\\\/photos\\\/affiche-projet-1-52111-52436.jpg\",\"credit\":\"\",\"link\":\"http:\\\/\\\/auberge-du-cedre.com\\\/\"},{\"id\":6,\"name\":\"Lou Casa, Barbara et Brel\",\"type\":\"evenements-locaux-203\",\"category\":\"concerten-muziek-festivals\",\"label\":\"Du 12\\\/11\\\/2026 \\u00e0 20:30 au 12\\\/11\\\/2026 \\u00e0 23:59\",\"start\":\"2026-11-12\",\"end\":\"2026-11-12\",\"start_time\":\"20:30\",\"end_time\":\"\",\"open_start\":false,\"city\":\"34980 Saint-G\\u00e9ly-du-Fesc\",\"onsite\":false,\"spot\":\"\",\"registration\":false,\"description\":\"De liederen van Brel en Barbara gaan met elkaar in gesprek en onthullen een onverwachte eenheid en gevoeligheid, evenals de artistieke en vriendschapsbanden die hen met elkaar verbonden. Lou Casa voegt daar zijn eigen verbondenheid met het publiek aan toe, in een gevoelige en warme uitvoering.\",\"image\":\"https:\\\/\\\/www.grandpicsaintloup-tourisme.fr\\\/_objects\\\/tao_suite_agenda\\\/fma\\\/photos\\\/75027757-1322514097908288-5103157588510375936-n-54384.jpg\",\"credit\":\"Lou Casa\",\"link\":\"https:\\\/\\\/www.helloasso.com\\\/associations\\\/j-ai-rendez-vous-avec-vous\\\/evenements\\\/festival12nov26\"},{\"id\":5,\"name\":\"HANDBAL: MHB TEGEN DUNKERQUE\",\"type\":\"evenements-locaux-203\",\"category\":\"sport-wandelen\",\"label\":\"Du 13\\\/11\\\/2026 au 13\\\/11\\\/2026 \\u00e0 23:59\",\"start\":\"2026-11-13\",\"end\":\"2026-11-13\",\"start_time\":\"\",\"end_time\":\"\",\"open_start\":false,\"city\":\"34090 Montpellier\",\"onsite\":false,\"spot\":\"\",\"registration\":false,\"description\":\"Het FDI stadium in Montpellier ontvangt de wedstrijd MHB \\\/ Dunkerque op 13 november om 20.00 uur in de Daikin StarLigue!\\n\\nKom je favoriete team aanmoedigen!\",\"image\":\"\",\"credit\":\"\",\"link\":\"https:\\\/\\\/www.montpellierhandball.com\\\/fr\\\/venir-au-match\\\/les-matchs-venir\"},{\"id\":8,\"name\":\"VERY IMPRO PEOPLE - GAZETTE CAF\\u00c9\",\"type\":\"evenements-locaux-203\",\"category\":\"shows-cinema\",\"label\":\"Du 13\\\/11\\\/2026 au 13\\\/11\\\/2026 \\u00e0 23:59\",\"start\":\"2026-11-13\",\"end\":\"2026-11-13\",\"start_time\":\"\",\"end_time\":\"\",\"open_start\":false,\"city\":\"34000 Montpellier\",\"onsite\":false,\"spot\":\"\",\"registration\":false,\"description\":\"Drie improvisatieavonden in Gazette Caf\\u00e9\\nIn november nemen de Very Impro People Gazette Caf\\u00e9 over voor drie voorstellingen rond theatrale improvisatie.\\n\\nCabaret, een origineel concept of een lang uitgesponnen ge\\u00efmproviseerd verhaal: elke avond biedt een andere manier om de groep te ontdekken en het onverwachte te delen met de artiesten.\\nOp het programma\\n\\nVrijdag 13 november 2026: Le Cabaret \\u2014 korte, spontane sc\\u00e8nes ge\\u00efnspireerd door suggesties uit het publiek.\\nVrijdag 20 november 2026: Carte Blanche \\u2014 de VIP's verkennen een origineel concept en een andere manier van improviseren.\\nVrijdag 27 november 2026: STORIES \\u2014 een ge\\u00efmproviseerd verhaal, met een wereld en personages die voor de ogen van het publiek worden gecre\\u00eberd.\\n\\nom 20.00 uur\\n\\nPrijs: gratis toegang, uitgang op basis van een vrije bijdrage\\nReserveren: sterk aanbevolen, per e-mail naar vip.impro@gmail.com\",\"image\":\"\",\"credit\":\"\",\"link\":\"\"},{\"id\":10,\"name\":\"IJSHOCKEY: VIPERS VS HCMP\",\"type\":\"evenements-locaux-203\",\"category\":\"sport-wandelen\",\"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\":\"34000 Montpellier\",\"onsite\":false,\"spot\":\"\",\"registration\":false,\"description\":\"De Vipers ontvangen HCMP op 14 november 2026 in de ijsbaan V\\u00e9gapolis.\\nKom uw favoriete team aanmoedigen!\",\"image\":\"\",\"credit\":\"\",\"link\":\"https:\\\/\\\/www.montpellier-vipers.com\\\/\"},{\"id\":3,\"name\":\"MONTPELLIER BASKET VS SAINT-VALLIER (NM2)\",\"type\":\"evenements-locaux-203\",\"category\":\"sport-wandelen\",\"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\":\"34080 Montpellier\",\"onsite\":false,\"spot\":\"\",\"registration\":false,\"description\":\"USA-AVOND\\nKom op zaterdag 14 november om 20.30 uur naar het Palais des Sports Pierre de Coubertin in Montpellier voor een avond in Amerikaanse sfeer!\\n\\nOp het programma: basketbal, entertainment en genoeg lekkers!\\n\\nDe Pompoms van ENSCM, onze cheerleaders van de avond, zijn aanwezig om de sfeer aan te wakkeren met verschillende shows tijdens de wedstrijd.\\nEr zullen ook burgers en hotdogs worden verkocht.\\n\\nTrek voor de gelegenheid je mooiste basketbalshirt aan en dompel je onder in de sfeer van deze USA-avond!\\nWe kijken ernaar uit om jullie in groten getale te verwelkomen om Montpellier te steunen en deze avond met ons te delen!\\n\\nOp reservatie\",\"image\":\"\",\"credit\":\"\",\"link\":\"https:\\\/\\\/www.helloasso.com\\\/associations\\\/montpellier-basket-mosson\\\/evenements\\\/montpellier-basket-mosson-saint-vallier?utm_source=app_ha&utm_campaign=share_campaign_button&utm_medium=ios&utm_\"},{\"id\":15,\"name\":\"THEATER \\u00abMIRABEAU DE ONVERSCHROKKENE\\u00bb\",\"type\":\"evenements-locaux-203\",\"category\":\"spectacles-cinema\",\"label\":\"Du 15\\\/11\\\/2026 au 15\\\/11\\\/2026 \\u00e0 23:59\",\"start\":\"2026-11-15\",\"end\":\"2026-11-15\",\"start_time\":\"\",\"end_time\":\"\",\"open_start\":false,\"city\":\"34250 Palavas-les-Flots\",\"onsite\":false,\"spot\":\"\",\"registration\":false,\"description\":\"door Les Rid O\\u2019Philes\\n\\nTarief: \\u20ac8, gratis voor kinderen jonger dan 14 jaar en abonnement mogelijk\\n\\nChapelle Notre-Dame-de-la-Route\\n\\nInfo en reserveringen: www.billetweb.fr\\\/ridophiles-palavas-les-flots\",\"image\":\"\",\"credit\":\"\",\"link\":\"https:\\\/\\\/www.billetweb.fr\\\/ridophiles-palavas-les-flots\"},{\"id\":18,\"name\":\"DE KONINGINNEN VAN BURLESQUE\",\"type\":\"evenements-locaux-203\",\"category\":\"voorstellingen-film\",\"label\":\"Du 19\\\/11\\\/2026 au 19\\\/11\\\/2026 \\u00e0 23:59\",\"start\":\"2026-11-19\",\"end\":\"2026-11-19\",\"start_time\":\"\",\"end_time\":\"\",\"open_start\":false,\"city\":\"34000 Montpellier\",\"onsite\":false,\"spot\":\"\",\"registration\":false,\"description\":\"Humor en glamour in de puurste traditie van Amerikaanse shows!\\n\\nEen sprankelend cabaret waar u met sterren in uw ogen weer buitenkomt! Onder leiding van LILI CHANTILLY, de beroemde burlesque-stripteasedanseres, begeleid door haar vrolijke groep danseressen! Voor LILI CHANTILLY, gepassioneerd door Hollywood-charme en de verfijnde wereld van de jaren 30, is burlesque-striptease een kunst, een kunst van kostuums, dans en komedie die zij graag met u wil delen!\\n\\nReserveren verplicht\",\"image\":\"\",\"credit\":\"\",\"link\":\"https:\\\/\\\/book.montpellier-tourisme.fr\\\/fr\\\/voir-faire\\\/2868270\\\/th%C3%A9%C3%A2tre-le-point-com%C3%A9die-les-reines-du-burlesque\\\/afficher-les-details?page=2&filter=c%3D58791%2C33858%2C32320%3Bd%3D20220408%7C99991231\"},{\"id\":16,\"name\":\"MET WEINIG BAGAGE\",\"type\":\"evenements-locaux-203\",\"category\":\"voorstellingen-cinema\",\"label\":\"Du 19\\\/11\\\/2026 au 19\\\/11\\\/2026 \\u00e0 23:59\",\"start\":\"2026-11-19\",\"end\":\"2026-11-19\",\"start_time\":\"\",\"end_time\":\"\",\"open_start\":false,\"city\":\"34090 Montpellier\",\"onsite\":false,\"spot\":\"\",\"registration\":false,\"description\":\"Een kroniek van de gebeurtenissen van de Spaanse Burgeroorlog.\\n\\nDeze voorstelling belicht het einde van de Spaanse Burgeroorlog, de ballingschap en vervolgens de \\\"onthaal\\\" en detentie van deze bijna 500.000 vluchtelingen die vlak voor de Tweede Wereldoorlog in verschillende kampen in Zuid-Frankrijk werden opgesloten.\\n\\nWe volgen een kleinzoon die probeert te begrijpen en zijn grootvader die, vanuit pijnlijke herinneringen, zijn retirada en zijn latere leven zal vertellen.\\n\\nMeer dan een verhaal over de retirada, ge\\u00efnspireerd door getuigenissen, roept het de vraag op naar erfgoed, vanuit humanistisch, politiek en historisch oogpunt.\\n\\nDuur: 1u + 30 min gesprek - Vanaf 12 jaar\\nHistorisch\",\"image\":\"\",\"credit\":\"\",\"link\":\"https:\\\/\\\/beauxartstabard.fr\\\/spectacles-adultes\"},{\"id\":1,\"name\":\"EOLIENNE LOOP 2026\",\"type\":\"evenements-locaux-203\",\"category\":\"sport-randonnee\",\"label\":\"Du 21\\\/11\\\/2026 au 21\\\/11\\\/2026 \\u00e0 23:59\",\"start\":\"2026-11-21\",\"end\":\"2026-11-21\",\"start_time\":\"\",\"end_time\":\"\",\"open_start\":false,\"city\":\"34830 Clapiers\",\"onsite\":false,\"spot\":\"\",\"registration\":false,\"description\":\"Georganiseerd door de Coureurs de l\\u2019Eolienne, met medewerking van de Ville de Clapiers, het D\\u00e9partement de l\\u2019H\\u00e9rault en logistieke steun van H\\u00e9rault Sport, biedt de 24e editie van de Foul\\u00e9es de l\\u2019Eolienne twee wedstrijden van 8 km en 14 km, evenals een getimede wandeling van 7 km en een wedstrijd voor minimes en benjamins met vertrek vanaf de avenue Charles de Gaulle.\\n\\nDe inschrijvingskosten bedragen online tot en met vrijdag 20 november 10 euro voor de 8 km en de wandeling en 15 euro voor de 14 km. Ter plaatse komt daar nog 2 euro bij.\\n\\nTijden:\\n11:00 \\u2013 ontvangst \\u2013 afhalen van borstnummers - inschrijvingen\\n13:30 \\u2013 Jeugdwedstrijden\\n14:30 \\u2013 Getimede wandeling\\n15:00 \\u2013 Wedstrijden 8 en 14 km\\n17:00 \\u2013 Prijsuitreiking bij de podiumwagen van H\\u00e9rault Sport\",\"image\":\"\",\"credit\":\"\",\"link\":\"https:\\\/\\\/www.3wsport.com\\\/\"},{\"id\":17,\"name\":\"BLMA VS LANDERNEAU\",\"type\":\"evenements-locaux-203\",\"category\":\"sport-randonnee\",\"label\":\"Du 22\\\/11\\\/2026 au 22\\\/11\\\/2026 \\u00e0 23:59\",\"start\":\"2026-11-22\",\"end\":\"2026-11-22\",\"start_time\":\"\",\"end_time\":\"\",\"open_start\":false,\"city\":\"34970 Lattes\",\"onsite\":false,\"spot\":\"\",\"registration\":false,\"description\":\"Vrouwenbasketbalcompetitie\\nDe BLMA van LATTES neemt het op tegen Landerneau op 22 november 2026 om 15:30 uur in het Palais des Rencontres in Lattes.\\n\\nKom je favoriete team steunen!\",\"image\":\"\",\"credit\":\"\",\"link\":\"https:\\\/\\\/www.blma.fr\\\/\"},{\"id\":11,\"name\":\"Kerstmarkt\",\"type\":\"evenements-locaux-203\",\"category\":\"markten-beurzen\",\"label\":\"Du 22\\\/11\\\/2026 \\u00e0 10:00 au 22\\\/11\\\/2026 \\u00e0 23:59\",\"start\":\"2026-11-22\",\"end\":\"2026-11-22\",\"start_time\":\"10:00\",\"end_time\":\"\",\"open_start\":false,\"city\":\"34270 Sainte-Croix-de-Quintillargues\",\"onsite\":false,\"spot\":\"\",\"registration\":false,\"description\":\"Op 22 november nodigt Sainte-Croix-de-Quintillargues u uit op de Kerstmarkt in Espace Claude Saumade.\\n\\nOntdek tal van standhouders in een feestelijke sfeer: cadeau-idee\\u00ebn, lekkernijen, catering en animatie zullen de dag bepalen, met onder meer kerstliederen van de Magic Christmas Band.\\n\\nEen gezellig samenzijn voor jong en oud in het hart van het dorp!\",\"image\":\"https:\\\/\\\/www.grandpicsaintloup-tourisme.fr\\\/_objects\\\/tao_suite_agenda\\\/fma\\\/photos\\\/flyer-marche-de-noel-2026-54389-54407.png\",\"credit\":\"Mairie Sainte-Croix-de-Quintillargues\",\"link\":\"https:\\\/\\\/mairie-saintecroixdequintillargues.fr\\\/\"},{\"id\":19,\"name\":\"HET DAK VAN DE WERELD\",\"type\":\"evenements-locaux-203\",\"category\":\"voorstellingen-film\",\"label\":\"Du 27\\\/11\\\/2026 au 27\\\/11\\\/2026 \\u00e0 23:59\",\"start\":\"2026-11-27\",\"end\":\"2026-11-27\",\"start_time\":\"\",\"end_time\":\"\",\"open_start\":false,\"city\":\"34090 Montpellier\",\"onsite\":false,\"spot\":\"\",\"registration\":false,\"description\":\"Parijs, 1945. Henry Vernot is op zoek naar zijn broer Antoine, die spoorloos verdwenen is.\\n\\nDe enige manier om Antoine terug te vinden is door de hand te leggen op een schilderij, of beter gezegd op wat zich erin bevindt... Als slachtoffer van een verleden dat hij liever zou vergeten, zal de zoektocht naar zijn broer een beschamende waarheid blootleggen die hij liever geheim had gehouden. Parijs, 1945. Het is het verhaal van Antoine en Henry Vernot.\\n\\nDuur: 1u10 - Vanaf 12 jaar\\nTheaterthriller\",\"image\":\"\",\"credit\":\"\",\"link\":\"https:\\\/\\\/book.montpellier-tourisme.fr\\\/fr\\\/voir-faire\\\/2881196\\\/th%C3%A9%C3%A2tre-beaux-arts-tabard\\\/afficher-les-details?filter=c%3D58791%2C33858%2C32320%3Bd%3D20220408%7C99991231\"},{\"id\":0,\"name\":\"BLMA TEGEN CHARNAY\",\"type\":\"evenements-locaux-203\",\"category\":\"sport-wandelen\",\"label\":\"Du 09\\\/12\\\/2026 au 09\\\/12\\\/2026 \\u00e0 23:59\",\"start\":\"2026-12-09\",\"end\":\"2026-12-09\",\"start_time\":\"\",\"end_time\":\"\",\"open_start\":false,\"city\":\"34970 Lattes\",\"onsite\":false,\"spot\":\"\",\"registration\":false,\"description\":\"Vrouwenbasketbalcompetitie\\nBLMA uit LATTES neemt het op 09 december 2026 om 20.00 uur in het Palais des Rencontres in Lattes op tegen Charnay.\\n\\nKom uw favoriete team aanmoedigen!\",\"image\":\"\",\"credit\":\"\",\"link\":\"https:\\\/\\\/www.blma.fr\\\/\"},{\"id\":2,\"name\":\"P\\u00c9TROLE\",\"type\":\"evenements-locaux-203\",\"category\":\"shows-cinema\",\"label\":\"Du 10\\\/12\\\/2026 au 10\\\/12\\\/2026 \\u00e0 23:59\",\"start\":\"2026-12-10\",\"end\":\"2026-12-10\",\"start_time\":\"\",\"end_time\":\"\",\"open_start\":false,\"city\":\"34000 Montpellier\",\"onsite\":false,\"spot\":\"\",\"registration\":false,\"description\":\"Sylvain Creuzevault stort zich hier op Pasolini\\u2019s explosieve, onvoltooide en fragmentarische laatste roman, geschreven net voor zijn dood en veel later gepubliceerd. Te zien op 10 en 11 december, duur 3u30 met pauze van 20 minuten.\\n\\nIn een magma van informatie en venijnige notities volgen we de mis\\u00e8res van een man verscheurd tussen zijn hoge publieke functies in een voormalige fascistische koolwaterstofmaatschappij en zijn private verlangens naar een seksualiteit buiten de norm. Dit alles speelt zich af tegen de enorme politieke, sociale en artistieke spanning van die tijd, waarin de wereld hals over kop afglijdt naar een weerzinwekkend neoliberalisme, dat in veel opzichten op het onze lijkt, dat van de jaren van lood tussen 1970 en 1980, in Itali\\u00eb en elders. De uitdrukking \\u201cer pal voor gaan\\u201d lijkt hier passend, zo sterk laten de acteurs Pasolini\\u2019s woedende taal klinken en strijden ze ermee...\\n\\nEen hele roman tot het uiterste gedreven, in een profetisch en polemisch visueel gedicht dat het theater en onze voorstellingen op zijn kop zet.\\n\\nDuur 3u30 met pauze van 20 min\\n\\ndo 10 dec 19:00\\nvr 11 dec 19:00\",\"image\":\"\",\"credit\":\"\",\"link\":\"https:\\\/\\\/book.montpellier-tourisme.fr\\\/fr\\\/voir-faire\\\/2888999\\\/th%C3%A9%C3%A2tre-des-13-vents-centre-dramatique-national-montpellie\\\/afficher-les-details\"},{\"id\":7,\"name\":\"MICHELE LAROQUE & KAD MERAD \\\"L'\\u00c2GE B\\u00caTE\\\"\",\"type\":\"evenements-locaux-203\",\"category\":\"shows-cinema\",\"label\":\"Du 11\\\/12\\\/2026 au 11\\\/12\\\/2026 \\u00e0 23:59\",\"start\":\"2026-12-11\",\"end\":\"2026-12-11\",\"start_time\":\"\",\"end_time\":\"\",\"open_start\":false,\"city\":\"34000 Montpellier\",\"onsite\":false,\"spot\":\"\",\"registration\":false,\"description\":\"Benoit en Claire hebben elkaar net leren kennen en willen hun nieuwe verhaal ten volle beleven, zonder grenzen. Rebels en vrij erkennen ze openlijk hun liefde voor seks, alcohol en voetbal: zij zijn de nieuwe zestigers. Ze weigeren zich door hun leeftijd te laten vastzetten. Ondanks hun diep ingesleten gewoonten willen ze blijven leven als jongeren en zich volop uitleven. Welkom in hun \\u201c\\u00e2ge b\\u00eate\\u201d.\\n\\nReservering rolstoelplaats\\njulie@adamconcerts.com\",\"image\":\"\",\"credit\":\"\",\"link\":\"https:\\\/\\\/www.zenithsud-montpellier.com\\\/fr\\\/agenda\\\/theatre-humour\\\/michele-laroque-kad-merad\"},{\"id\":14,\"name\":\"ZWART, JOKSER EN EENOOGIG, HET VERHAAL VAN SAMMY DAVIS\",\"type\":\"evenements-locaux-203\",\"category\":\"spectacles-cinema\",\"label\":\"Du 11\\\/12\\\/2026 au 11\\\/12\\\/2026 \\u00e0 23:59\",\"start\":\"2026-12-11\",\"end\":\"2026-12-11\",\"start_time\":\"\",\"end_time\":\"\",\"open_start\":false,\"city\":\"34170 Castelnau-le-Lez\",\"onsite\":false,\"spot\":\"\",\"registration\":false,\"description\":\"Sammy Davis Jr. is uitzonderlijk en stelt voortdurend de vraag naar identiteit. In een tijd waarin men iedereen doet geloven dat hij of zij zich slechts via \\u00e9\\u00e9n criterium kan defini\\u00ebren, is die houding werkelijk radicaal.\\n\\nVandaag het verhaal van Sammy Davis Jr. vertellen is een noodzaak.\\n\\nIn een wereld waarin nuance vergeten is, maakt hij er een levensles van.\\n\\nZwart, Joods en Eenoogig \\u00abHet verhaal van Sammy Davis Jr.\\u00bb\\n\\nHij is dat kind uit Harlem\\n\\nHij is degene die al vanaf zijn 3e op het podium stond\\n\\nHij is degene die de oorlog heeft meegemaakt\\n\\nHij is degene die JFK aan de macht bracht\\n\\nHij is een vriend van Frank Sinatra en Elvis Presley\\n\\nHij is acteur\\n\\nHij is danser\\n\\nHij is Hollywood\\n\\nHij is zwart, Joods en eenoogig\\n\\nHij is Sammy Davis Jr.\\n\\nVrijdag 11 december 2026 om 20:00 uur\\n\\nMuzikale voorstelling\\nDuur: 1u10\\nVoor iedereen\",\"image\":\"\",\"credit\":\"\",\"link\":\"https:\\\/\\\/lekiasma.vostickets.fr\\\/Billet\\\/FR\\\/representation-LE_KIASMA-35426-0.wb?REFID=DzUcAAAAAAAAAAAAFAA\"}];\n    var CATEGORIES = {\"sport-wandelen\":{\"key\":\"sport-wandelen\",\"label\":\"Sport & wandelen\",\"color\":\"#ef4444\",\"count\":4},\"sport-randonnee\":{\"key\":\"sport-randonnee\",\"label\":\"Sport & randonn\\u00e9e\",\"color\":\"#3b82f6\",\"count\":2},\"shows-cinema\":{\"key\":\"shows-cinema\",\"label\":\"Shows & cinema\",\"color\":\"#10b981\",\"count\":3},\"markten-beurzen\":{\"key\":\"markten-beurzen\",\"label\":\"Markten & beurzen\",\"color\":\"#f59e0b\",\"count\":4},\"concerten-muziek-festivals\":{\"key\":\"concerten-muziek-festivals\",\"label\":\"Concerten, muziek & festivals\",\"color\":\"#a855f7\",\"count\":1},\"tentoonstellingen\":{\"key\":\"tentoonstellingen\",\"label\":\"Tentoonstellingen\",\"color\":\"#0891b2\",\"count\":1},\"spectacles-cinema\":{\"key\":\"spectacles-cinema\",\"label\":\"Spectacles & cin\\u00e9ma\",\"color\":\"#db2777\",\"count\":2},\"voorstellingen-cinema\":{\"key\":\"voorstellingen-cinema\",\"label\":\"Voorstellingen & cinema\",\"color\":\"#65a30d\",\"count\":1},\"voorstellingen-film\":{\"key\":\"voorstellingen-film\",\"label\":\"Voorstellingen & film\",\"color\":\"#ea580c\",\"count\":2}};\n    var TODAY = \"2026-11-12\";\n    \/\/ Textes et format des dates dans la langue de la page (includes\/i18n.php)\n    var T = {\"blog_read_more\":\"Lees het artikel\",\"blog_empty\":\"Nog geen artikelen.\",\"blog_newer\":\"Nieuwere artikelen\",\"blog_older\":\"Oudere artikelen\",\"blog_label\":\"Artikelen\",\"hero_title\":\"Ontdek de omgeving\",\"hero_text\":\"Dorpen, stranden, wandelingen, goede adressen en belevenissen rond uw verblijf.\",\"around\":\"Rond\",\"search_placeholder\":\"Zoek een plek, een activiteit, een dorp\\u2026\",\"search\":\"Zoeken\",\"max_distance\":\"Maximale afstand\",\"all\":\"Alles\",\"prev_categories\":\"Vorige categorie\\u00ebn\",\"next_categories\":\"Volgende categorie\\u00ebn\",\"categories\":\"Categorie\\u00ebn\",\"display\":\"Weergave\",\"list\":\"Lijst\",\"map\":\"Kaart\",\"close\":\"Sluiten\",\"featured\":\"Uitgelicht\",\"discover\":\"Ontdekken\",\"idea\":\"idee\",\"ideas\":\"idee\\u00ebn\",\"around_you\":\"in de buurt\",\"no_result\":\"Geen resultaten\",\"no_result_hint\":\"Probeer een andere zoekopdracht, categorie of afstand.\",\"pagination\":\"Paginering\",\"prev_page\":\"Vorige pagina\",\"next_page\":\"Volgende pagina\",\"ideas_title\":\"Idee\\u00ebn naar uw zin\",\"ideas_sub\":\"Suggesties voor uw ideale verblijf.\",\"reset_view\":\"Terug naar het overzicht\",\"map_hint\":\"Klik op een markering op de kaart om de details hier te zien.\",\"official_site\":\"Offici\\u00eble website\",\"video\":\"Video\",\"gallery\":\"Galerij\",\"documents\":\"Documenten\",\"faq\":\"Veelgestelde vragen\",\"no_answer\":\"Nog geen antwoord.\",\"see_on_maps\":\"Bekijk op Google Maps\",\"see_place_on_maps\":\"Bekijk de camping op Google Maps\",\"yes\":\"Ja\",\"no\":\"Nee\",\"practical_info\":\"Praktische info\",\"reviews\":\"beoordelingen\",\"read_more\":\"Lees meer\",\"prev_review\":\"Vorige recensie\",\"next_review\":\"Volgende recensie\",\"prev_item\":\"Vorige\",\"next_item\":\"Volgende\",\"photo_credit\":\"Foto: %s\",\"directions\":\"Route\",\"read_less\":\"Minder\",\"article_in_this\":\"In dit artikel\",\"article_toc\":\"Inhoud van het artikel\",\"see_original\":\"Automatisch vertaald \\u00b7 Origineel bekijken\",\"see_translation\":\"Vertaling bekijken\",\"stars_out_of_5\":\"%s van de 5 sterren\",\"owner_reply\":\"Reactie van de eigenaar\",\"customer\":\"Gast\",\"customer_reviews\":\"Gastbeoordelingen\",\"rating_label\":\"Beoordeeld met %1$s van de 5, %2$s beoordelingen \\u2014 bekijk de beoordelingen\",\"reviews_by\":\"Beoordelingen gepresenteerd door Elaia\",\"powered_by\":\"Mogelijk gemaakt door\",\"today\":\"Vandaag\",\"today_lc\":\"vandaag\",\"tomorrow\":\"Morgen\",\"until\":\"Tot %s\",\"from_to\":\"Van %1$s tot %2$s\",\"registration\":\"Inschrijving vereist\",\"full\":\"Volgeboekt\",\"all_animations\":\"Alle activiteiten bekijken \\u2192\",\"ago_day\":\"%d dag geleden\",\"ago_days\":\"%d dagen geleden\",\"ago_week\":\"%d week geleden\",\"ago_weeks\":\"%d weken geleden\",\"ago_month\":\"%d maand geleden\",\"ago_months\":\"%d maanden geleden\",\"ago_year\":\"%d jaar geleden\",\"ago_years\":\"%d jaar geleden\",\"anim_unavailable\":\"Het programma is tijdelijk niet beschikbaar\",\"content_unavailable\":\"Deze inhoud is tijdelijk niet beschikbaar\",\"anim_eyebrow\":\"Beleef onvergetelijke momenten\",\"anim_title\":\"Animatie & evenementen\",\"anim_hero_text\":\"Alle activiteiten van het moment, de hoogtepunten van de week en komende evenementen tijdens uw verblijf.\",\"anim_sections\":\"Pagina-onderdelen\",\"anim_nav_today\":\"Vandaag\",\"anim_nav_week\":\"Deze week\",\"anim_nav_upcoming\":\"Binnenkort\",\"anim_nav_calendar\":\"Kalender\",\"anim_where\":\"Waar?\",\"anim_onsite\":\"Ter plaatse\",\"anim_nearby\":\"In de buurt\",\"anim_no_onsite\":\"Momenteel geen activiteit ter plaatse\",\"anim_no_nearby\":\"Momenteel geen evenement in de buurt\",\"anim_all_day\":\"Hele dag\",\"anim_at\":\"om %s\",\"anim_see_detail\":\"details bekijken\",\"anim_live\":\"Bezig\",\"anim_onsite_spot\":\"Ter plaatse \\u00b7 %s\",\"anim_badge_until\":\"Tot\",\"anim_badge_from\":\"Van\",\"anim_badge_today\":\"Vandaag\",\"anim_filter_cat\":\"Filteren op categorie\",\"anim_all_f\":\"Alle\",\"anim_prev_day\":\"Vorige dag\",\"anim_next_day\":\"Volgende dag\",\"anim_today_title\":\"Activiteiten van vandaag\",\"anim_tomorrow_title\":\"Activiteiten van morgen\",\"anim_day_title\":\"Activiteiten op %s\",\"anim_relax_today\":\"Vandaag een rustige dag\",\"anim_nothing_day\":\"Niets gepland op die dag\",\"anim_next_on\":\"Volgende activiteit op %s.\",\"anim_soon\":\"Het programma wordt binnenkort bijgewerkt.\",\"anim_see_day\":\"Die dag bekijken\",\"anim_prev_acts\":\"Vorige activiteiten\",\"anim_next_acts\":\"Volgende activiteiten\",\"anim_prev_week\":\"Vorige week\",\"anim_next_week\":\"Volgende week\",\"anim_week_title\":\"De hoogtepunten van de week\",\"anim_next_week_title\":\"Volgende week\",\"anim_week_of\":\"Week van %s\",\"anim_week_days\":\"Dagen van de week\",\"anim_today_paren\":\"(vandaag)\",\"anim_activity\":\"%d activiteit\",\"anim_activities\":\"%d activiteiten\",\"anim_nothing\":\"niets gepland\",\"anim_pick_day\":\"Kies een andere dag om het programma te zien.\",\"anim_sort\":\"Evenementen sorteren\",\"anim_sort_date\":\"Sorteren op datum\",\"anim_sort_name\":\"Sorteren op naam\",\"anim_upcoming_title\":\"Alle komende evenementen\",\"anim_no_upcoming\":\"Geen komende evenementen\",\"anim_try_cat\":\"Probeer een andere categorie.\",\"anim_more\":\"Meer evenementen (%d)\",\"anim_hide_cal\":\"Kalender verbergen\",\"anim_show_cal\":\"Volledige kalender bekijken\",\"anim_cal_title\":\"Maandkalender\",\"anim_cal_sub\":\"Alle activiteiten van de maand in \\u00e9\\u00e9n oogopslag.\",\"anim_prev_month\":\"Vorige maand\",\"anim_next_month\":\"Volgende maand\",\"anim_more_info\":\"Meer informatie\",\"anim_new_tab\":\"(nieuw tabblad)\",\"date_locale\":\"nl-NL\",\"page_faq\":\"FAQ\",\"page_metadatas\":\"Ontdek de omgeving\",\"page_animations\":\"Animatie en evenementen\",\"page_corpus\":\"Praktische informatie\",\"anim_event\":\"Evenement\"};\n    function tf(key) { var a = [].slice.call(arguments, 1), i = 0; return T[key].replace(\/%(\\d\\$)?[sd]\/g, function (m, pos) { return pos ? a[parseInt(pos, 10) - 1] : a[i++]; }); }\n    \/\/ Image par d\u00e9faut du chatbot, utilis\u00e9e quand une fiche n'a pas d'image\n    var DEFAULT_IMG = \"https:\\\/\\\/elaia-public.s3.fr-par.scw.cloud\\\/chatbot-defaults\\\/A7psMMV4cj7v9YgY8H5BDxDjigpViaqRBj8qr37o.png\";\n\n    var app = document.getElementById('ea-app');\n    if (!app) return;\n\n    var TODAY_MAX = 3; \/\/ cartes \u00ab aujourd'hui \u00bb avant \u00ab Voir les autres \u00bb\n    var UPCOMING_STEP = 8;\n\n    var state = {\n      day: TODAY,\n      todayAll: false,\n      week: null,\n      weekDay: TODAY,\n      cat: 'all',\n      scope: 'all', \/\/ all | onsite | nearby\n      sort: 'date',\n      upcomingLimit: UPCOMING_STEP,\n      calendarOpen: false,\n      month: TODAY.slice(0, 7),\n      selectedDay: null\n    };\n\n    \/\/ \u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\n    \/\/ IC\u00d4NES (SVG statiques)\n    \/\/ \u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\n    var ICONS = {\n      pin: '<svg viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\"><path d=\"M12 21s-7-6.2-7-11.5a7 7 0 0 1 14 0C19 14.8 12 21 12 21z\"\/><circle cx=\"12\" cy=\"9.5\" r=\"2.5\"\/><\/svg>',\n      calendar: '<svg viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\"><rect x=\"3\" y=\"5\" width=\"18\" height=\"16\" rx=\"2\"\/><path d=\"M16 3v4M8 3v4M3 10h18\"\/><\/svg>',\n      arrow: '<svg viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2.2\" stroke-linecap=\"round\" stroke-linejoin=\"round\"><path d=\"M5 12h14M13 6l6 6-6 6\"\/><\/svg>',\n      external: '<svg viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\"><path d=\"M14 5h5v5M19 5l-8 8M18 14v5H5V6h5\"\/><\/svg>',\n      sun: '<svg viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\"><circle cx=\"12\" cy=\"12\" r=\"4\"\/><path d=\"M12 2v2M12 20v2M4.9 4.9l1.4 1.4M17.7 17.7l1.4 1.4M2 12h2M20 12h2M4.9 19.1l1.4-1.4M17.7 6.3l1.4-1.4\"\/><\/svg>',\n      pen: '<svg viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\"><path d=\"M9 11l2 2 4-4\"\/><rect x=\"4\" y=\"3\" width=\"16\" height=\"18\" rx=\"2\"\/><path d=\"M8 7h8\"\/><\/svg>',\n      clock: '<svg viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\"><circle cx=\"12\" cy=\"12\" r=\"9\"\/><path d=\"M12 7v5l3 2\"\/><\/svg>',\n      star: '<svg viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linejoin=\"round\"><path d=\"M12 3l2.8 5.7 6.2.9-4.5 4.4 1.1 6.2L12 17.3 6.4 20.2l1.1-6.2L3 9.6l6.2-.9z\"\/><\/svg>',\n      leaf: '<svg viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\"><path d=\"M5 19c0-8 5-14 15-14 0 10-6 15-14 15\"\/><path d=\"M5 19l7-7\"\/><\/svg>',\n      tent: '<svg viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"1.8\" stroke-linecap=\"round\" stroke-linejoin=\"round\"><path d=\"M12 4L3 20h18L12 4z\"\/><path d=\"M12 4v16M9 20l3-6 3 6\"\/><\/svg>'\n    };\n\n    \/\/ \u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\n    \/\/ CAT\u00c9GORIES \u2014 pastels harmonieux d\u00e9duits du libell\u00e9\n    \/\/ (le libell\u00e9 est toujours affich\u00e9 : l'info ne passe pas que par la couleur)\n    \/\/ \u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\n    var CAT_STYLES = [\n      [\/enfant|kid|junior\/, '#fff1c9', '#6f5200'],\n      [\/famil\/, '#fdf0d5', '#7a4e00'],\n      [\/bien.?etre|yoga|zen|detente|relax|spa\/, '#e3f1e6', '#24613a'],\n      [\/concert|musique|soiree|dj|bal\\b\/, '#ece6fa', '#4b3a8c'],\n      [\/spectacle|theatre|cinema|cirque|magie\/, '#fbe3e1', '#8f2d27'],\n      [\/sport|rando|velo|course|tournoi|petanque|nautique\/, '#dcefeb', '#1f5f55'],\n      [\/expo|musee|culture|patrimoine|visite\/, '#f3e6ef', '#7a2f5c'],\n      [\/march|brocante|vide.?grenier|artisan|terroir|degust\/, '#e8f0dc', '#3f5a1e'],\n      [\/animation|fete|festiv|atelier|jeu\/, '#fbe7d7', '#8e4214']\n    ];\n\n    function norm(s) {\n      return (s || '').toLowerCase().normalize('NFD').replace(\/[\u0300-\u036f]\/g, '');\n    }\n\n    function catStyle(key) {\n      var hay = norm(key + ' ' + (CATEGORIES[key] ? CATEGORIES[key].label : ''));\n      for (var i = 0; i < CAT_STYLES.length; i++) {\n        if (CAT_STYLES[i][0].test(hay)) return { bg: CAT_STYLES[i][1], fg: CAT_STYLES[i][2] };\n      }\n      return { bg: '#eceee8', fg: '#3c463f' };\n    }\n\n    function applyCat(node, key) {\n      var s = catStyle(key);\n      node.style.setProperty('--ea-cat-bg', s.bg);\n      node.style.setProperty('--ea-cat-fg', s.fg);\n    }\n\n    function catLabel(e) {\n      return CATEGORIES[e.category] ? CATEGORIES[e.category].label : '';\n    }\n\n    \/\/ \u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\n    \/\/ DATES \u2014 cha\u00eenes Y-m-d (pas de d\u00e9calage de fuseau)\n    \/\/ \u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\n    function toDate(ymd) {\n      var p = ymd.split('-');\n      return new Date(+p[0], +p[1] - 1, +p[2], 12);\n    }\n\n    function toYmd(d) {\n      return d.getFullYear() + '-' + String(d.getMonth() + 1).padStart(2, '0') + '-' + String(d.getDate()).padStart(2, '0');\n    }\n\n    function addDays(ymd, n) {\n      var d = toDate(ymd);\n      d.setDate(d.getDate() + n);\n      return toYmd(d);\n    }\n\n    function daysBetween(a, b) {\n      return Math.round((toDate(b) - toDate(a)) \/ 86400000);\n    }\n\n    function weekStart(ymd) {\n      var d = toDate(ymd);\n      d.setDate(d.getDate() - (d.getDay() + 6) % 7);\n      return toYmd(d);\n    }\n\n    function fmt(ymd, opts) {\n      return toDate(ymd).toLocaleDateString(T.date_locale, opts);\n    }\n\n    function ucfirst(s) {\n      return s.charAt(0).toUpperCase() + s.slice(1);\n    }\n\n    function shortDate(ymd) {\n      return fmt(ymd, { day: 'numeric', month: 'short' });\n    }\n\n    function byTime(a, b) {\n      return (a.start_time || '').localeCompare(b.start_time || '') || a.name.localeCompare(b.name, T.date_locale);\n    }\n\n    \/** Filtres globaux : sur place \/ aux alentours + cat\u00e9gorie *\/\n    function visible(e) {\n      if (state.scope === 'onsite' && !e.onsite) return false;\n      if (state.scope === 'nearby' && e.onsite) return false;\n      return state.cat === 'all' || e.category === state.cat;\n    }\n\n    function eventsOn(ymd) {\n      return EVENTS.filter(function(e) {\n        return visible(e) && e.start <= ymd && e.end >= ymd;\n      }).sort(byTime);\n    }\n\n    function eventsBetween(from, to) {\n      return EVENTS.filter(function(e) {\n        return visible(e) && e.start <= to && e.end >= from;\n      });\n    }\n\n    \/** Ligne horaire d'une carte vue depuis un jour donn\u00e9 *\/\n    function timeLabel(e, day) {\n      if (e.start === day && e.start_time) return e.start_time + (e.end_time && e.start === e.end ? ' \u2013 ' + e.end_time : '');\n      if (e.start !== e.end || e.open_start) return tf('until', shortDate(e.end));\n      return T.anim_all_day;\n    }\n\n    \/** Ligne date d'une carte \u00ab \u00e0 venir \u00bb *\/\n    function dateLabel(e) {\n      if (e.open_start) return tf('until', shortDate(e.end));\n      if (e.start !== e.end) return tf('from_to', shortDate(e.start), shortDate(e.end));\n      var d = ucfirst(fmt(e.start, { weekday: 'short', day: 'numeric', month: 'short' }));\n      return d + (e.start_time ? ' \u00b7 ' + e.start_time : '');\n    }\n\n    function fullWhenLabel(e) {\n      var opts = { weekday: 'long', day: 'numeric', month: 'long', year: 'numeric' };\n      if (e.open_start) return tf('until', fmt(e.end, opts));\n      var time = e.start_time ? ' ' + tf('anim_at', e.start_time) : '';\n      if (e.start === e.end) return ucfirst(fmt(e.start, opts)) + time + (e.end_time ? ' \u2013 ' + e.end_time : '');\n      return tf('from_to', fmt(e.start, { day: 'numeric', month: 'long' }) + time, fmt(e.end, opts) + (e.end_time ? ' ' + tf('anim_at', e.end_time) : ''));\n    }\n\n    \/\/ \u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\n    \/\/ DOM\n    \/\/ \u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\n    function el(tag, cls, text) {\n      var n = document.createElement(tag);\n      if (cls) n.className = cls;\n      if (text != null) n.textContent = text;\n      return n;\n    }\n\n    function icon(name) {\n      var s = el('span', 'ea-icon');\n      s.setAttribute('aria-hidden', 'true');\n      s.innerHTML = ICONS[name];\n      return s;\n    }\n\n    \/** Image de la fiche \u2192 image par d\u00e9faut du chatbot \u2192 aplat illustr\u00e9 *\/\n    function media(e, cls) {\n      var fallback = function() {\n        var f = el('div', 'ea-card-fallback');\n        f.appendChild(icon('tent'));\n        return f;\n      };\n      if (!e.image && !DEFAULT_IMG) return fallback();\n      var img = el('img', cls);\n      var useDefault = !e.image;\n      img.src = useDefault ? DEFAULT_IMG : e.image;\n      img.alt = e.name;\n      img.loading = 'lazy';\n      img.decoding = 'async';\n      if (useDefault) img.classList.add('ea-img--default');\n      img.onerror = function() {\n        \/\/ Le cr\u00e9dit n'est plus celui de l'image affich\u00e9e\n        var cr = img.parentNode && img.parentNode.querySelector('.ea-credit');\n        if (cr) cr.remove();\n        if (!useDefault && DEFAULT_IMG) {\n          useDefault = true;\n          img.classList.add('ea-img--default');\n          img.src = DEFAULT_IMG;\n        } else if (img.parentNode) {\n          img.replaceWith(fallback());\n        }\n      };\n      return img;\n    }\n\n    \/** Cr\u00e9dit photo en bas \u00e0 droite de l'image (rien sans image propre) *\/\n    function credit(e) {\n      if (!e.image || !e.credit) return null;\n      var txt = \/^(\u00a9|\\(c\\))\/i.test(e.credit) ? e.credit : '\u00a9 ' + e.credit;\n      var c = el('span', 'ea-credit', txt);\n      c.title = txt;\n      return c;\n    }\n\n    function pill(e) {\n      var p = el('span', 'ea-pill', catLabel(e));\n      applyCat(p, e.category);\n      return p;\n    }\n\n    \/**\n     * Carte \u00e9v\u00e9nement (composant unique).\n     * @param {object} e\n     * @param {object} o { day: 'Y-m-d' \u2192 heure du jour | date: true \u2192 dates de l'\u00e9v\u00e9nement }\n     *\/\n    function card(e, o) {\n      o = o || {};\n      var c = el('article', 'ea-card' + (e.end < TODAY ? ' ea-card--ended' : ''));\n      c.tabIndex = 0;\n      c.setAttribute('role', 'button');\n      c.setAttribute('aria-label', e.name + ' \u2014 ' + (o.date ? dateLabel(e) : timeLabel(e, o.day)) + ' \u2014 ' + T.anim_see_detail);\n      applyCat(c, e.category);\n\n      var m = el('div', 'ea-card-media');\n      m.appendChild(media(e));\n      var cr = credit(e);\n      if (cr) m.appendChild(cr);\n      m.appendChild(dateBadge(e));\n      if (o.day === TODAY && e.start < TODAY && e.end >= TODAY) {\n        m.appendChild(el('span', 'ea-live', T.anim_live));\n      }\n      if (e.registration) {\n        var reg = el('span', 'ea-reg');\n        reg.appendChild(icon('pen'));\n        reg.appendChild(document.createTextNode(T.registration));\n        m.appendChild(reg);\n      }\n      c.appendChild(m);\n\n      var b = el('div', 'ea-card-body');\n      var top = el('div', 'ea-card-top');\n      if (!o.date) {\n        var w = el('span', 'ea-when');\n        w.appendChild(icon('clock'));\n        w.appendChild(document.createTextNode(timeLabel(e, o.day)));\n        top.appendChild(w);\n      }\n      if (top.childNodes.length) b.appendChild(top);\n      b.appendChild(el('h3', 'ea-card-title', e.name));\n      var where = placeLabel(e);\n      if (where) {\n        var p = el('p', 'ea-place');\n        p.appendChild(icon(e.onsite ? 'tent' : 'pin'));\n        p.appendChild(document.createTextNode(where));\n        b.appendChild(p);\n      }\n      if (e.description) b.appendChild(el('p', 'ea-card-desc', e.description));\n      var cta = el('span', 'ea-cta', T.discover);\n      cta.appendChild(icon('arrow'));\n      b.appendChild(cta);\n      c.appendChild(b);\n\n      c.addEventListener('click', function() {\n        openModal(e);\n      });\n      c.addEventListener('keydown', function(ev) {\n        if (ev.key === 'Enter' || ev.key === ' ') {\n          ev.preventDefault();\n          openModal(e);\n        }\n      });\n      return c;\n    }\n\n    \/** O\u00f9 : lieu dans l'\u00e9tablissement (sur place) ou ville (aux alentours) *\/\n    function placeLabel(e) {\n      if (e.onsite) return e.spot ? tf('anim_onsite_spot', e.spot) : T.anim_onsite;\n      return e.city;\n    }\n\n    \/**\n     * Badge date sur l'image, toujours sur 3 lignes et de taille fixe :\n     *   un jour     \u2192 LUN \/ 28 \/ SEPT\n     *   jusqu'au    \u2192 JUSQU'AU \/ 18 \/ OCT\n     *   p\u00e9riode     \u2192 25 SEPT \u2192 \/ 7 \/ OCT   (du 25 sept. au 7 oct.)\n     *\/\n    function dateBadge(e) {\n      var month = function(ymd) {\n        return fmt(ymd, { month: 'short' }).replace('.', '');\n      };\n      var top, day, end = '';\n      if (e.open_start) {\n        top = T.anim_badge_until;\n        day = e.end;\n      } else if (e.start !== e.end) {\n        \/\/ P\u00e9riode : le D\u00c9BUT en gros, la fin en petit dessous (\u2192 1 nov)\n        top = T.anim_badge_from;\n        day = e.start;\n        end = '\u2192 ' + toDate(e.end).getDate() + ' ' + month(e.end);\n      } else {\n        top = e.start === TODAY ? T.anim_badge_today : fmt(e.start, { weekday: 'short' }).replace('.', '');\n        day = e.start;\n      }\n      \/\/ Couleur selon le cas : aujourd'hui \/ un jour \u00e0 venir \/ p\u00e9riode \u00e0 venir \/ en cours\n      var kind = (e.start === e.end && !e.open_start) ? (e.start === TODAY ? 'today' : 'day') :\n        ((e.open_start || e.start <= TODAY) ? 'ongoing' : 'period');\n      var d = el('span', 'ea-date ea-date--' + kind);\n      d.setAttribute('aria-hidden', 'true');\n      d.appendChild(el('span', 'ea-date-top', top));\n      d.appendChild(el('span', 'ea-date-day', String(toDate(day).getDate())));\n      d.appendChild(el('span', 'ea-date-month', month(day)));\n      if (end) d.appendChild(el('span', 'ea-date-end', end));\n      return d;\n    }\n\n    function grid(list, o, four) {\n      var g = el('div', 'ea-grid' + (four ? ' ea-grid--4' : ''));\n      list.forEach(function(e) {\n        g.appendChild(card(e, o));\n      });\n      return g;\n    }\n\n    function head(id, iconName, title, sub, side) {\n      var h = el('div', 'ea-section-head');\n      var left = el('div');\n      var t = el('h2', 'ea-section-title');\n      if (iconName) t.appendChild(icon(iconName));\n      t.appendChild(document.createTextNode(title));\n      t.id = id;\n      left.appendChild(t);\n      if (sub) left.appendChild(el('p', 'ea-section-sub', sub));\n      h.appendChild(left);\n      if (side) h.appendChild(side);\n      return h;\n    }\n\n    function round(label, aria, onClick, disabled) {\n      var b = el('button', 'ea-round', label);\n      b.type = 'button';\n      b.setAttribute('aria-label', aria);\n      b.disabled = !!disabled;\n      b.addEventListener('click', onClick);\n      return b;\n    }\n\n    function empty(title, text, action) {\n      var box = el('div', 'ea-empty');\n      box.appendChild(icon('sun'));\n      box.appendChild(el('strong', null, title));\n      if (text) box.appendChild(el('span', null, text));\n      if (action) {\n        var b = el('button', 'ea-btn ea-btn--soft', action.label);\n        b.type = 'button';\n        b.addEventListener('click', action.onClick);\n        box.appendChild(b);\n      }\n      return box;\n    }\n\n    function nextEventDay(after) {\n      var next = null;\n      EVENTS.forEach(function(e) {\n        if (visible(e) && e.start > after && (!next || e.start < next)) next = e.start;\n      });\n      return next;\n    }\n\n    \/** Pastilles de cat\u00e9gories (filtre global de la page) *\/\n    function catFilters() {\n      var box = el('div', 'ea-cats');\n      box.setAttribute('role', 'group');\n      box.setAttribute('aria-label', T.anim_filter_cat);\n      \/\/ Cat\u00e9gories pr\u00e9sentes dans le p\u00e9rim\u00e8tre choisi (sur place \/ alentours)\n      var keys = Object.keys(CATEGORIES).filter(function(k) {\n        return EVENTS.some(function(e) {\n          return e.category === k && e.end >= TODAY &&\n            (state.scope === 'all' || (state.scope === 'onsite') === !!e.onsite);\n        });\n      });\n      if (keys.length < 2) return box;\n      var mk = function(key, label) {\n        var b = el('button', 'ea-cat' + (key === 'all' ? ' ea-cat--all' : ''), label);\n        b.type = 'button';\n        b.setAttribute('aria-pressed', state.cat === key ? 'true' : 'false');\n        if (key !== 'all') applyCat(b, key);\n        b.addEventListener('click', function() {\n          setCat(state.cat === key ? 'all' : key);\n          var again = document.querySelector('.ea-cat[aria-pressed=\"true\"]');\n          if (again) again.focus();\n        });\n        box.appendChild(b);\n      };\n      mk('all', T.anim_all_f);\n      keys.forEach(function(k) {\n        mk(k, CATEGORIES[k].label);\n      });\n      return box;\n    }\n\n    \/\/ \u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\n    \/\/ 3. AUJOURD'HUI\n    \/\/ \u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\n    function renderToday() {\n      var sec = document.getElementById('ea-sec-today');\n      sec.innerHTML = '';\n      var day = state.day;\n\n      var side = el('div', 'ea-head-side');\n      side.appendChild(el('span', null, ucfirst(fmt(day, { weekday: 'long', day: 'numeric', month: 'long' }))));\n      side.appendChild(round('\u2039', T.anim_prev_day, function() {\n        state.day = addDays(state.day, -1);\n        state.todayAll = false;\n        renderToday();\n      }, day <= TODAY));\n      side.appendChild(round('\u203a', T.anim_next_day, function() {\n        state.day = addDays(state.day, 1);\n        state.todayAll = false;\n        renderToday();\n      }));\n\n      \/\/ Titres neutres : la page sert aussi aux h\u00f4tels, mus\u00e9es, offices de tourisme\u2026\n      var title = day === TODAY ? T.anim_today_title :\n        (day === addDays(TODAY, 1) ? T.anim_tomorrow_title : tf('anim_day_title', fmt(day, { weekday: 'long', day: 'numeric', month: 'long' })));\n      sec.appendChild(head('ea-today-title', 'sun', title, null, side));\n      sec.appendChild(catFilters());\n\n      var list = eventsOn(day);\n      if (!list.length) {\n        var next = nextEventDay(day);\n        sec.appendChild(empty(\n          day === TODAY ? T.anim_relax_today : T.anim_nothing_day,\n          next ? tf('anim_next_on', fmt(next, { weekday: 'long', day: 'numeric', month: 'long' })) : T.anim_soon,\n          next ? {\n            label: T.anim_see_day,\n            onClick: function() {\n              state.day = next;\n              renderToday();\n            }\n          } : null));\n        return;\n      }\n\n      sec.appendChild(list.length > TODAY_MAX ? carousel(list, { day: day }) : grid(list, { day: day }));\n    }\n\n    \/**\n     * Carrousel horizontal (3 cartes visibles sur ordinateur, d\u00e9filement au doigt\n     * sur mobile), fl\u00e8ches affich\u00e9es seulement s'il reste des cartes de ce c\u00f4t\u00e9.\n     *\/\n    function carousel(list, o, four) {\n      var wrap = el('div', 'ea-carousel' + (four ? ' ea-carousel--4' : ''));\n      var track = el('div', 'ea-carousel-track');\n      track.setAttribute('role', 'list');\n      list.forEach(function(e) {\n        var c = card(e, o);\n        c.setAttribute('role', 'listitem');\n        track.appendChild(c);\n      });\n      var prev = el('button', 'ea-carousel-btn ea-carousel-btn--prev', '\u2039');\n      var next = el('button', 'ea-carousel-btn ea-carousel-btn--next', '\u203a');\n      prev.type = next.type = 'button';\n      prev.setAttribute('aria-label', T.anim_prev_acts);\n      next.setAttribute('aria-label', T.anim_next_acts);\n      var step = function(dir) {\n        var first = track.firstElementChild;\n        var w = first ? first.getBoundingClientRect().width + 16 : track.clientWidth;\n        track.scrollBy({ left: dir * w * Math.max(1, Math.floor(track.clientWidth \/ w)), behavior: 'smooth' });\n      };\n      prev.addEventListener('click', function() {\n        step(-1);\n      });\n      next.addEventListener('click', function() {\n        step(1);\n      });\n      var update = function() {\n        var max = track.scrollWidth - track.clientWidth;\n        prev.hidden = track.scrollLeft <= 4;\n        next.hidden = track.scrollLeft >= max - 4;\n      };\n      track.addEventListener('scroll', update, { passive: true });\n      window.addEventListener('resize', update);\n      wrap.appendChild(prev);\n      wrap.appendChild(track);\n      wrap.appendChild(next);\n      setTimeout(update, 0);\n      return wrap;\n    }\n\n    \/\/ \u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\n    \/\/ 4. TEMPS FORTS DE LA SEMAINE\n    \/\/ \u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\n    function firstBusyDay(from) {\n      for (var i = 0; i < 7; i++) {\n        var d = addDays(from, i);\n        if (d >= TODAY && eventsOn(d).length) return d;\n      }\n      return null;\n    }\n\n    function renderWeek() {\n      var sec = document.getElementById('ea-sec-week');\n      sec.innerHTML = '';\n      var thisWeek = weekStart(TODAY);\n      var from = state.week || thisWeek;\n      var to = addDays(from, 6);\n      if (state.weekDay < from || state.weekDay > to) state.weekDay = firstBusyDay(from) || from;\n\n      var side = el('div', 'ea-head-side');\n      side.appendChild(el('span', null, tf('from_to', shortDate(from), shortDate(to))));\n      side.appendChild(round('\u2039', T.anim_prev_week, function() {\n        state.week = addDays(from, -7);\n        state.weekDay = state.week === thisWeek ? TODAY : state.week;\n        renderWeek();\n      }, from <= thisWeek));\n      side.appendChild(round('\u203a', T.anim_next_week, function() {\n        state.week = addDays(from, 7);\n        state.weekDay = firstBusyDay(state.week) || state.week;\n        renderWeek();\n      }));\n\n      var title = from === thisWeek ? T.anim_week_title :\n        (from === addDays(thisWeek, 7) ? T.anim_next_week_title : tf('anim_week_of', fmt(from, { day: 'numeric', month: 'long' })));\n      sec.appendChild(head('ea-week-title', 'calendar', title, null, side));\n\n      var days = el('div', 'ea-days');\n      days.setAttribute('role', 'group');\n      days.setAttribute('aria-label', T.anim_week_days);\n      for (var i = 0; i < 7; i++) {\n        (function(day) {\n          var n = eventsOn(day).length;\n          var b = el('button', 'ea-day' + (day === TODAY ? ' is-today' : '') + (n ? ' has-events' : ''));\n          b.type = 'button';\n          b.setAttribute('aria-pressed', day === state.weekDay ? 'true' : 'false');\n          b.setAttribute('aria-label', fmt(day, { weekday: 'long', day: 'numeric', month: 'long' }) + (day === TODAY ? ' ' + T.anim_today_paren : '') + ' : ' + (n ? tf(n > 1 ? 'anim_activities' : 'anim_activity', n) : T.anim_nothing));\n          b.appendChild(el('span', 'ea-day-name', ucfirst(fmt(day, { weekday: 'short' }).replace('.', ''))));\n          b.appendChild(el('span', 'ea-day-date', shortDate(day)));\n          b.addEventListener('click', function() {\n            state.weekDay = day;\n            renderWeek();\n            var btn = document.querySelector('.ea-day[aria-pressed=\"true\"]');\n            if (btn) btn.focus();\n          });\n          days.appendChild(b);\n        })(addDays(from, i));\n      }\n      sec.appendChild(days);\n\n      var list = eventsOn(state.weekDay);\n      if (!list.length) {\n        sec.appendChild(empty(T.anim_nothing_day, T.anim_pick_day));\n        return;\n      }\n      \/\/ Au-del\u00e0 de 4 activit\u00e9s : carrousel (4 cartes visibles) au lieu d'une grille qui s'allonge\n      sec.appendChild(list.length > 4 ? carousel(list, { day: state.weekDay }, true) : grid(list, { day: state.weekDay }, true));\n    }\n\n    \/\/ \u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\n    \/\/ 5. TOUS LES \u00c9V\u00c9NEMENTS \u00c0 VENIR\n    \/\/ \u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\n    \/** Liste d\u00e9roulante accessible (libell\u00e9 masqu\u00e9) *\/\n    function selectBox(label, options, value, onChange) {\n      var wrap = el('label');\n      wrap.appendChild(el('span', 'ea-sr', label));\n      var sel = el('select', 'ea-select');\n      options.forEach(function(o) {\n        var opt = el('option', null, o[1]);\n        opt.value = o[0];\n        opt.selected = value === o[0];\n        sel.appendChild(opt);\n      });\n      sel.addEventListener('change', function() {\n        onChange(sel.value);\n      });\n      wrap.appendChild(sel);\n      return wrap;\n    }\n\n    function renderUpcoming() {\n      var sec = document.getElementById('ea-sec-upcoming');\n      sec.innerHTML = '';\n\n      \/\/ Tri (le filtre cat\u00e9gorie est global, sous \u00ab Activit\u00e9s du jour \u00bb)\n      var side = el('div', 'ea-head-side');\n      side.appendChild(selectBox(T.anim_sort, [\n        ['date', T.anim_sort_date],\n        ['name', T.anim_sort_name]\n      ], state.sort, function(v) {\n        state.sort = v;\n        renderUpcoming();\n        focusUpcoming(0);\n      }));\n      sec.appendChild(head('ea-upcoming-title', 'leaf', T.anim_upcoming_title, null, side));\n\n      var list = EVENTS.filter(function(e) {\n        return visible(e) && e.end >= TODAY;\n      }).sort(function(a, b) {\n        if (state.sort === 'name') return a.name.localeCompare(b.name, T.date_locale);\n        var sa = a.start < TODAY ? TODAY : a.start;\n        var sb = b.start < TODAY ? TODAY : b.start;\n        return sa.localeCompare(sb) || byTime(a, b);\n      });\n\n      if (!list.length) {\n        sec.appendChild(empty(T.anim_no_upcoming, state.cat === 'all' ? T.anim_soon : T.anim_try_cat));\n        return;\n      }\n\n      sec.appendChild(grid(list.slice(0, state.upcomingLimit), { date: true }, true));\n\n      if (list.length > state.upcomingLimit) {\n        var more = el('div', 'ea-more');\n        var b = el('button', 'ea-btn ea-btn--soft', tf('anim_more', list.length - state.upcomingLimit));\n        b.appendChild(icon('arrow'));\n        b.type = 'button';\n        b.addEventListener('click', function() {\n          state.upcomingLimit += UPCOMING_STEP;\n          renderUpcoming();\n        });\n        more.appendChild(b);\n        sec.appendChild(more);\n      }\n    }\n\n    function setCat(key) {\n      state.cat = key;\n      rerenderAll();\n    }\n\n    function setScope(scope) {\n      state.scope = scope;\n      state.cat = 'all';\n      app.querySelectorAll('.ea-scope button').forEach(function(b) {\n        b.setAttribute('aria-pressed', b.getAttribute('data-scope') === scope ? 'true' : 'false');\n      });\n      rerenderAll();\n    }\n\n    function rerenderAll() {\n      state.upcomingLimit = UPCOMING_STEP;\n      state.todayAll = false;\n      renderToday();\n      renderWeek();\n      renderUpcoming();\n      renderCalendar();\n    }\n\n    \/** Apr\u00e8s un re-rendu, garde le focus sur la liste d\u00e9roulante utilis\u00e9e *\/\n    function focusUpcoming(i) {\n      var sel = document.querySelectorAll('#ea-sec-upcoming .ea-select')[i];\n      if (sel) sel.focus();\n    }\n\n    \/\/ \u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\n    \/\/ 6. CALENDRIER DU MOIS (secondaire, repliable)\n    \/\/ \u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\n    var MAX_LANES = 3;\n\n    \/** Place les \u00e9v\u00e9nements d'une semaine en couloirs sans chevauchement *\/\n    function layoutLanes(from, to) {\n      var items = eventsBetween(from, to).map(function(e) {\n        var s = e.start < from ? from : e.start;\n        var t = e.end > to ? to : e.end;\n        return { e: e, col: daysBetween(from, s) + 1, span: daysBetween(s, t) + 1, fromBefore: e.start < from, toAfter: e.end > to };\n      });\n      items.sort(function(a, b) {\n        return (a.col - b.col) || (b.span - a.span) || (a.e.start_time || '').localeCompare(b.e.start_time || '');\n      });\n      var ends = [];\n      items.forEach(function(it) {\n        var lane = 0;\n        while (ends[lane] !== undefined && ends[lane] >= it.col) lane++;\n        ends[lane] = it.col + it.span - 1;\n        it.lane = lane;\n      });\n      return items;\n    }\n\n    function renderCalendar() {\n      var sec = document.getElementById('ea-sec-calendar');\n      if (!sec) return; \/\/ calendrier masqu\u00e9 (r\u00e9glage ou calendrier=\"non\")\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        var mm = el('div', 'ea-modal-media');\n        mm.appendChild(img);\n        var mcr = credit(e);\n        if (mcr) mm.appendChild(mcr);\n        modalContent.appendChild(mm);\n      }\n\n      var body = el('div', 'ea-modal-body');\n      if (catLabel(e)) body.appendChild(pill(e));\n      var t = el('h2', 'ea-modal-title', e.name);\n      t.id = 'ea-modal-title';\n      body.appendChild(t);\n\n      var info = el('div', 'ea-modal-info');\n      var when = el('span');\n      when.appendChild(icon('calendar'));\n      when.appendChild(document.createTextNode(fullWhenLabel(e)));\n      info.appendChild(when);\n      if (placeLabel(e)) {\n        var where = el('span');\n        where.appendChild(icon(e.onsite ? 'tent' : 'pin'));\n        where.appendChild(document.createTextNode(placeLabel(e)));\n        info.appendChild(where);\n      }\n      if (e.registration) {\n        var reg = el('span');\n        reg.appendChild(icon('pen'));\n        reg.appendChild(el('strong', null, T.registration));\n        info.appendChild(reg);\n      }\n      body.appendChild(info);\n\n      if (e.description) body.appendChild(el('p', 'ea-modal-desc', e.description));\n\n      if (e.link) {\n        var a = el('a', 'ea-btn', T.anim_more_info);\n        a.href = e.link;\n        a.target = '_blank';\n        a.rel = 'noopener';\n        a.appendChild(icon('external'));\n        a.appendChild(el('span', 'ea-sr', T.anim_new_tab));\n        body.appendChild(a);\n      }\n      modalContent.appendChild(body);\n\n      modal.hidden = false;\n      document.documentElement.style.overflow = 'hidden';\n      document.getElementById('ea-modal-close').focus();\n    }\n\n    function closeModal() {\n      modal.hidden = true;\n      document.documentElement.style.overflow = '';\n      if (lastFocus && lastFocus.focus) lastFocus.focus();\n    }\n\n    document.getElementById('ea-modal-close').addEventListener('click', closeModal);\n    modal.addEventListener('click', function(ev) {\n      if (ev.target === modal) closeModal();\n    });\n    document.addEventListener('keydown', function(ev) {\n      if (modal.hidden) return;\n      if (ev.key === 'Escape') closeModal();\n      \/\/ Focus gard\u00e9 dans la modal\n      if (ev.key === 'Tab') {\n        var f = modal.querySelectorAll('button, a[href]');\n        if (!f.length) return;\n        var firstF = f[0],\n          lastF = f[f.length - 1];\n        if (ev.shiftKey && document.activeElement === firstF) {\n          ev.preventDefault();\n          lastF.focus();\n        } else if (!ev.shiftKey && document.activeElement === lastF) {\n          ev.preventDefault();\n          firstF.focus();\n        }\n      }\n    });\n\n    \/\/ \u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\n    \/\/ NAVIGATION RAPIDE + SUIVI DE SECTION\n    \/\/ \u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\n    \/**\n     * Hauteur occup\u00e9e en haut de l'\u00e9cran par les barres fixes \/ collantes du site\n     * (barre d'admin, en-t\u00eate, barre de r\u00e9servation\u2026), quelle que soit leur classe :\n     * on sonde le haut de l'\u00e9cran et on empile les barres trouv\u00e9es.\n     *\/\n    function headerOffset() {\n      var bottom = 0;\n      var vw = window.innerWidth,\n        vh = window.innerHeight;\n      var isBar = function(el) {\n        if (!el || el === document.body || el === document.documentElement) return false;\n        if (el.closest('#ea-app, .ea-modal-overlay, .mv-modal-overlay')) return false;\n        var pos = getComputedStyle(el).position;\n        if (pos !== 'fixed' && pos !== 'sticky') return false;\n        var r = el.getBoundingClientRect();\n        \/\/ vraie barre : large, pas trop haute (exclut bulles de chat, boutons flottants, popups)\n        return r.width >= vw * 0.3 && r.height > 0 && r.height < vh * 0.45;\n      };\n      for (var pass = 0; pass < 5; pass++) {\n        var y = bottom + 2,\n          found = 0;\n        if (y >= vh * 0.5) break;\n        [0.15, 0.5, 0.85].forEach(function(fx) {\n          (document.elementsFromPoint(vw * fx, y) || []).forEach(function(el) {\n            for (var n = el; n && n !== document.body; n = n.parentElement) {\n              if (isBar(n)) {\n                var r = n.getBoundingClientRect();\n                if (r.top <= y + 1 && r.bottom > found) found = r.bottom;\n                break;\n              }\n            }\n          });\n        });\n        if (found <= bottom) break;\n        bottom = found;\n      }\n      app.style.setProperty('--ea-header', Math.round(bottom) + 'px');\n      return bottom;\n    }\n\n    var navLinks = Array.prototype.slice.call(app.querySelectorAll('.ea-nav a'));\n\n    function setCurrent(id) {\n      navLinks.forEach(function(a) {\n        a.setAttribute('aria-current', a.getAttribute('href') === '#' + id ? 'true' : 'false');\n      });\n    }\n\n    navLinks.forEach(function(a) {\n      a.addEventListener('click', function(ev) {\n        var target = document.getElementById(a.getAttribute('href').slice(1));\n        if (!target) return;\n        ev.preventDefault();\n        if (a.getAttribute('href') === '#ea-sec-calendar' && !state.calendarOpen) {\n          state.calendarOpen = true;\n          renderCalendar();\n        }\n        setCurrent(target.id);\n        target.scrollIntoView({ behavior: 'smooth', block: 'start' });\n      });\n    });\n\n    if ('IntersectionObserver' in window) {\n      var io = new IntersectionObserver(function(entries) {\n        entries.forEach(function(en) {\n          if (en.isIntersecting) setCurrent(en.target.id);\n        });\n      }, { rootMargin: '-35% 0px -55% 0px' });\n      ['ea-sec-today', 'ea-sec-week', 'ea-sec-upcoming', 'ea-sec-calendar'].forEach(function(id) {\n        var sec = document.getElementById(id);\n        if (sec) io.observe(sec);\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":""},"class_list":["post-13531","page","type-page","status-publish","hentry"],"acf":[],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v28.8 - https:\/\/yoast.com\/product\/yoast-seo-wordpress\/ -->\n<title>Animatie en evenementen - Camping Bon Port<\/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.campingbonport.com\/nl\/elaia-animations\/\" \/>\n<meta property=\"og:locale\" content=\"nl_NL\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Animatie en evenementen - Camping Bon Port\" \/>\n<meta property=\"og:url\" content=\"https:\/\/www.campingbonport.com\/nl\/elaia-animations\/\" \/>\n<meta property=\"og:site_name\" content=\"Camping Bon Port\" \/>\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.campingbonport.com\\\/nl\\\/elaia-animations\\\/\",\"url\":\"https:\\\/\\\/www.campingbonport.com\\\/nl\\\/elaia-animations\\\/\",\"name\":\"Animatie en evenementen - Camping Bon Port\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/www.campingbonport.com\\\/nl\\\/#website\"},\"datePublished\":\"2026-11-12T12:31:22+00:00\",\"breadcrumb\":{\"@id\":\"https:\\\/\\\/www.campingbonport.com\\\/nl\\\/elaia-animations\\\/#breadcrumb\"},\"inLanguage\":\"nl-NL\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\\\/\\\/www.campingbonport.com\\\/nl\\\/elaia-animations\\\/\"]}]},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\\\/\\\/www.campingbonport.com\\\/nl\\\/elaia-animations\\\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Camping Camargue\",\"item\":\"https:\\\/\\\/www.campingbonport.com\\\/nl\\\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Animatie en evenementen\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\\\/\\\/www.campingbonport.com\\\/nl\\\/#website\",\"url\":\"https:\\\/\\\/www.campingbonport.com\\\/nl\\\/\",\"name\":\"Camping Bon Port\",\"description\":\"\",\"publisher\":{\"@id\":\"https:\\\/\\\/www.campingbonport.com\\\/nl\\\/#organization\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\\\/\\\/www.campingbonport.com\\\/nl\\\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"nl-NL\"},{\"@type\":\"Organization\",\"@id\":\"https:\\\/\\\/www.campingbonport.com\\\/nl\\\/#organization\",\"name\":\"Camping Bon Port\",\"url\":\"https:\\\/\\\/www.campingbonport.com\\\/nl\\\/\",\"logo\":{\"@type\":\"ImageObject\",\"inLanguage\":\"nl-NL\",\"@id\":\"https:\\\/\\\/www.campingbonport.com\\\/nl\\\/#\\\/schema\\\/logo\\\/image\\\/\",\"url\":\"https:\\\/\\\/www.campingbonport.com\\\/wp-content\\\/uploads\\\/2021\\\/11\\\/logo-bon-port.jpg\",\"contentUrl\":\"https:\\\/\\\/www.campingbonport.com\\\/wp-content\\\/uploads\\\/2021\\\/11\\\/logo-bon-port.jpg\",\"width\":736,\"height\":917,\"caption\":\"Camping Bon Port\"},\"image\":{\"@id\":\"https:\\\/\\\/www.campingbonport.com\\\/nl\\\/#\\\/schema\\\/logo\\\/image\\\/\"}}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"Animatie en evenementen - Camping Bon Port","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.campingbonport.com\/nl\/elaia-animations\/","og_locale":"nl_NL","og_type":"article","og_title":"Animatie en evenementen - Camping Bon Port","og_url":"https:\/\/www.campingbonport.com\/nl\/elaia-animations\/","og_site_name":"Camping Bon Port","twitter_card":"summary_large_image","schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"WebPage","@id":"https:\/\/www.campingbonport.com\/nl\/elaia-animations\/","url":"https:\/\/www.campingbonport.com\/nl\/elaia-animations\/","name":"Animatie en evenementen - Camping Bon Port","isPartOf":{"@id":"https:\/\/www.campingbonport.com\/nl\/#website"},"datePublished":"2026-11-12T12:31:22+00:00","breadcrumb":{"@id":"https:\/\/www.campingbonport.com\/nl\/elaia-animations\/#breadcrumb"},"inLanguage":"nl-NL","potentialAction":[{"@type":"ReadAction","target":["https:\/\/www.campingbonport.com\/nl\/elaia-animations\/"]}]},{"@type":"BreadcrumbList","@id":"https:\/\/www.campingbonport.com\/nl\/elaia-animations\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Camping Camargue","item":"https:\/\/www.campingbonport.com\/nl\/"},{"@type":"ListItem","position":2,"name":"Animatie en evenementen"}]},{"@type":"WebSite","@id":"https:\/\/www.campingbonport.com\/nl\/#website","url":"https:\/\/www.campingbonport.com\/nl\/","name":"Camping Bon Port","description":"","publisher":{"@id":"https:\/\/www.campingbonport.com\/nl\/#organization"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/www.campingbonport.com\/nl\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"nl-NL"},{"@type":"Organization","@id":"https:\/\/www.campingbonport.com\/nl\/#organization","name":"Camping Bon Port","url":"https:\/\/www.campingbonport.com\/nl\/","logo":{"@type":"ImageObject","inLanguage":"nl-NL","@id":"https:\/\/www.campingbonport.com\/nl\/#\/schema\/logo\/image\/","url":"https:\/\/www.campingbonport.com\/wp-content\/uploads\/2021\/11\/logo-bon-port.jpg","contentUrl":"https:\/\/www.campingbonport.com\/wp-content\/uploads\/2021\/11\/logo-bon-port.jpg","width":736,"height":917,"caption":"Camping Bon Port"},"image":{"@id":"https:\/\/www.campingbonport.com\/nl\/#\/schema\/logo\/image\/"}}]}},"_links":{"self":[{"href":"https:\/\/www.campingbonport.com\/nl\/wp-json\/wp\/v2\/pages\/13531","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.campingbonport.com\/nl\/wp-json\/wp\/v2\/pages"}],"about":[{"href":"https:\/\/www.campingbonport.com\/nl\/wp-json\/wp\/v2\/types\/page"}],"author":[{"embeddable":true,"href":"https:\/\/www.campingbonport.com\/nl\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.campingbonport.com\/nl\/wp-json\/wp\/v2\/comments?post=13531"}],"version-history":[{"count":1,"href":"https:\/\/www.campingbonport.com\/nl\/wp-json\/wp\/v2\/pages\/13531\/revisions"}],"predecessor-version":[{"id":13534,"href":"https:\/\/www.campingbonport.com\/nl\/wp-json\/wp\/v2\/pages\/13531\/revisions\/13534"}],"wp:attachment":[{"href":"https:\/\/www.campingbonport.com\/nl\/wp-json\/wp\/v2\/media?parent=13531"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}