{"id":5422,"date":"2026-10-20T12:14:15","date_gmt":"2026-10-20T10:14:15","guid":{"rendered":"https:\/\/parcbellevue.com\/elaia-animations-2\/"},"modified":"2026-10-20T12:14:15","modified_gmt":"2026-10-20T10:14:15","slug":"elaia-animations","status":"publish","type":"page","link":"https:\/\/parcbellevue.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:\/\/parcbellevue.com\/wp-content\/uploads\/2023\/11\/festival-cannes.webp)\">\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\">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>Boerentekoop<\/strong> \u2014 Du 01\/01\/2026 au 31\/12\/2026 \u00e0 23:59 \u2014 06460 Caussols<\/li>\n              <li><strong>Dorpmarkt van Gr\u00e9oli\u00e8res<\/strong> \u2014 Du 01\/01\/2026 au 31\/12\/2026 \u00e0 23:59 \u2014 06620 Greoli\u00e8res<\/li>\n              <li><strong>Golfe-Juan Fruit- en Groentemarkt<\/strong> \u2014 Du 01\/01\/2026 au 31\/12\/2026 \u00e0 23:59 \u2014 06220 Vallauris<\/li>\n              <li><strong>Lokaal viskraam<\/strong> \u2014 Du 01\/01\/2026 au 31\/12\/2026 \u00e0 23:59 \u2014 06220 Vallauris<\/li>\n              <li><strong>March\u00e9 aux v\u00eatements de Vallauris<\/strong> \u2014 Du 01\/01\/2026 au 31\/12\/2026 \u00e0 23:59 \u2014 06220 Vallauris<\/li>\n              <li><strong>Markt in Cabris<\/strong> \u2014 Du 01\/01\/2026 au 31\/12\/2026 \u00e0 23:59 \u2014 06530 Cabris<\/li>\n              <li><strong>Markt in Peymeinade<\/strong> \u2014 Du 01\/01\/2026 au 31\/12\/2026 \u00e0 23:59 \u2014 06530 Peymeinade<\/li>\n              <li><strong>Markt in P\u00e9gomas - Logisplein<\/strong> \u2014 Du 01\/01\/2026 au 31\/12\/2026 \u00e0 23:59 \u2014 06580 P\u00e9gomas<\/li>\n              <li><strong>Markt in Saint-Vallier-de-Thiey<\/strong> \u2014 Du 01\/01\/2026 au 31\/12\/2026 \u00e0 23:59 \u2014 06460 Saint-Vallier-de-Thiey<\/li>\n              <li><strong>Markten in La Roquette-sur-Siagne<\/strong> \u2014 Du 01\/01\/2026 au 31\/12\/2026 \u00e0 23:59 \u2014 06550 La Roquette-sur-Siagne<\/li>\n              <li><strong>Markten in Mouans-Sartoux<\/strong> \u2014 Du 01\/01\/2026 au 31\/12\/2026 \u00e0 23:59 \u2014 06370 Mouans-Sartoux<\/li>\n              <li><strong>Markten in Saint-C\u00e9zaire-sur-Siagne<\/strong> \u2014 Du 01\/01\/2026 au 31\/12\/2026 \u00e0 23:59 \u2014 06530 Saint-C\u00e9zaire-sur-Siagne<\/li>\n              <li><strong>Markten van de Grasse-regio<\/strong> \u2014 Du 01\/01\/2026 au 31\/12\/2026 \u00e0 23:59 \u2014 06130 Grasse<\/li>\n              <li><strong>Vallauris fruit- en groentemarkt<\/strong> \u2014 Du 01\/01\/2026 au 31\/12\/2026 \u00e0 23:59 \u2014 06220 Vallauris<\/li>\n              <li><strong>De Station Markt<\/strong> \u2014 Du 01\/01\/2026 \u00e0 07:00 au 31\/12\/2026 \u00e0 23:59 \u2014 06700 Saint-Laurent-du-Var<\/li>\n              <li><strong>Handelsstad<\/strong> \u2014 Du 01\/01\/2026 \u00e0 07:00 au 31\/12\/2026 \u00e0 23:59 \u2014 06800 Cagnes-sur-Mer<\/li>\n              <li><strong>Proven\u00e7aalse markt van Fr\u00e9jus<\/strong> \u2014 Du 01\/01\/2026 \u00e0 07:00 au 31\/12\/2026 \u00e0 23:59 \u2014 83600 Fr\u00e9jus<\/li>\n              <li><strong>De Brocante Markt<\/strong> \u2014 Du 01\/01\/2026 \u00e0 07:30 au 31\/12\/2026 \u00e0 23:59 \u2014 06600 Antibes<\/li>\n              <li><strong>Antiekmarkt \/ Rommelmarkt<\/strong> \u2014 Du 01\/01\/2026 \u00e0 08:00 au 31\/12\/2026 \u00e0 23:59 \u2014 06560 Valbonne<\/li>\n              <li><strong>Aubar\u00e8de Buurtmarkt<\/strong> \u2014 Du 01\/01\/2026 \u00e0 08:00 au 31\/12\/2026 \u00e0 23:59 \u2014 06110 Le Cannet<\/li>\n              <li><strong>Dorpmarkt<\/strong> \u2014 Du 01\/01\/2026 \u00e0 08:00 au 31\/12\/2026 \u00e0 23:59 \u2014 06270 Villeneuve-Loubet<\/li>\n              <li><strong>Kledingmarkt<\/strong> \u2014 Du 01\/01\/2026 \u00e0 08:00 au 31\/12\/2026 \u00e0 23:59 \u2014 06600 Antibes<\/li>\n              <li><strong>Kleine zaterdagmarkt<\/strong> \u2014 Du 01\/01\/2026 \u00e0 08:00 au 31\/12\/2026 \u00e0 23:59 \u2014 06140 Tourrettes-sur-Loup<\/li>\n              <li><strong>Le Cannet Centrum Markt<\/strong> \u2014 Du 01\/01\/2026 \u00e0 08:00 au 31\/12\/2026 \u00e0 23:59 \u2014 06110 Le Cannet<\/li>\n              <li><strong>Les Matinales du Cours Honor\u00e9 Cresp<\/strong> \u2014 Du 01\/01\/2026 \u00e0 08:00 au 31\/12\/2026 \u00e0 23:59 \u2014 06130 Grasse<\/li>\n              <li><strong>March\u00e9 paysan du Cheiron<\/strong> \u2014 Du 01\/01\/2026 \u00e0 08:00 au 31\/12\/2026 \u00e0 23:59 \u2014 06140 Coursegoules<\/li>\n              <li><strong>Markt op Place de Rocheville<\/strong> \u2014 Du 01\/01\/2026 \u00e0 08:00 au 31\/12\/2026 \u00e0 23:59 \u2014 06110 Le Cannet<\/li>\n              <li><strong>Markt van lokale producenten<\/strong> \u2014 Du 01\/01\/2026 \u00e0 08:00 au 31\/12\/2026 \u00e0 23:59 \u2014 06800 Cagnes-sur-Mer<\/li>\n              <li><strong>Markt voor Italiaanse Smaken<\/strong> \u2014 Du 01\/01\/2026 \u00e0 08:00 au 31\/12\/2026 \u00e0 23:59 \u2014 06620 Le Bar-sur-Loup<\/li>\n              <li><strong>Pre du Lac Markt<\/strong> \u2014 Du 01\/01\/2026 \u00e0 08:00 au 31\/12\/2026 \u00e0 23:59 \u2014 06740 Ch\u00e2teauneuf-Grasse<\/li>\n              <li><strong>Proven\u00e7aalse Markt<\/strong> \u2014 Du 01\/01\/2026 \u00e0 08:00 au 31\/12\/2026 \u00e0 23:59 \u2014 06330 Roquefort-les-Pins<\/li>\n              <li><strong>Proven\u00e7aalse Markt van Valbonne<\/strong> \u2014 Du 01\/01\/2026 \u00e0 08:00 au 31\/12\/2026 \u00e0 23:59 \u2014 06560 Valbonne<\/li>\n              <li><strong>Proven\u00e7aalse markt van Tourrettes-sur-Loup<\/strong> \u2014 Du 01\/01\/2026 \u00e0 08:00 au 31\/12\/2026 \u00e0 23:59 \u2014 06140 Tourrettes-sur-Loup<\/li>\n              <li><strong>Rocheville Voedselmarkt<\/strong> \u2014 Du 01\/01\/2026 \u00e0 08:00 au 31\/12\/2026 \u00e0 23:59 \u2014 06110 Le Cannet<\/li>\n              <li><strong>Stadscentrum Markt<\/strong> \u2014 Du 01\/01\/2026 \u00e0 08:00 au 31\/12\/2026 \u00e0 23:59 \u2014 06800 Cagnes-sur-Mer<\/li>\n              <li><strong>Wekelijkse Markt<\/strong> \u2014 Du 01\/01\/2026 \u00e0 08:00 au 31\/12\/2026 \u00e0 23:59 \u2014 83440 Montauroux<\/li>\n              <li><strong>Wekelijkse Markt<\/strong> \u2014 Du 01\/01\/2026 \u00e0 08:00 au 31\/12\/2026 \u00e0 23:59 \u2014 83600 Bagnols-en-For\u00eat<\/li>\n              <li><strong>Zondagmarkt<\/strong> \u2014 Du 01\/01\/2026 \u00e0 08:00 au 31\/12\/2026 \u00e0 23:59 \u2014 06700 Saint-Laurent-du-Var<\/li>\n              <li><strong>Boeren- en Ambachtenmarkt<\/strong> \u2014 Du 01\/01\/2026 \u00e0 08:30 au 31\/12\/2026 \u00e0 23:59 \u2014 06250 Mougins<\/li>\n              <li><strong>Cros-de-Cagnes Vlooienmarkt<\/strong> \u2014 Du 01\/01\/2026 \u00e0 08:30 au 31\/12\/2026 \u00e0 23:59 \u2014 06800 Cagnes-sur-Mer<\/li>\n              <li><strong>Hippodroommarkt<\/strong> \u2014 Du 01\/01\/2026 \u00e0 08:30 au 31\/12\/2026 \u00e0 23:59 \u2014 06800 Cagnes-sur-Mer<\/li>\n              <li><strong>March\u00e9 hebdomadaire Le Bar-sur-Loup<\/strong> \u2014 Du 01\/01\/2026 \u00e0 08:30 au 31\/12\/2026 \u00e0 23:59 \u2014 06620 Le Bar-sur-Loup<\/li>\n              <li><strong>Visveiling<\/strong> \u2014 Du 01\/01\/2026 \u00e0 08:30 au 31\/12\/2026 \u00e0 23:59 \u2014 06800 Cagnes-sur-Mer<\/li>\n              <li><strong>Buitenmarkt<\/strong> \u2014 Du 01\/01\/2026 \u00e0 09:00 au 31\/12\/2026 \u00e0 23:59 \u2014 06480 La Colle-sur-Loup<\/li>\n              <li><strong>Italiaanse Markt<\/strong> \u2014 Du 01\/01\/2026 \u00e0 09:00 au 31\/12\/2026 \u00e0 23:59 \u2014 06800 Cagnes-sur-Mer<\/li>\n              <li><strong>Italiaanse markt<\/strong> \u2014 Du 01\/01\/2026 \u00e0 09:00 au 31\/12\/2026 \u00e0 23:59 \u2014 06580 P\u00e9gomas<\/li>\n              <li><strong>Italische Markt van Opio<\/strong> \u2014 Du 01\/01\/2026 \u00e0 09:00 au 31\/12\/2026 \u00e0 23:59 \u2014 06650 Opio<\/li>\n              <li><strong>Kleine lokale markt<\/strong> \u2014 Du 01\/01\/2026 \u00e0 09:00 au 31\/12\/2026 \u00e0 23:59 \u2014 06570 Saint-Paul-de-Vence<\/li>\n              <li><strong>Grand Chef Tentoonstelling &quot;Auguste Escoffier, een Humanist&quot;<\/strong> \u2014 Du 09\/01\/2026 au 29\/11\/2026 \u00e0 23:59 \u2014 06270 Villeneuve-Loubet<\/li>\n              <li><strong>Handel en Kunstenaarsmarkt<\/strong> \u2014 Du 18\/01\/2026 \u00e0 10:00 au 20\/12\/2026 \u00e0 23:59 \u2014 06800 Cagnes-sur-Mer<\/li>\n              <li><strong>Tentoonstelling &quot;Aan de waterkant&quot; van Ellsworth Kelly<\/strong> \u2014 Du 27\/06\/2026 \u00e0 10:00 au 15\/11\/2026 \u00e0 23:59 \u2014 06570 Saint-Paul-de-Vence<\/li>\n              <li><strong>Tentoonstelling Pascale Marthine Tayou<\/strong> \u2014 Du 04\/07\/2026 au 23\/11\/2026 \u00e0 23:59 \u2014 06220 Vallauris<\/li>\n              <li><strong>Tweewekelijkse Ambachtelijke Markt<\/strong> \u2014 Du 25\/07\/2026 \u00e0 09:00 au 31\/12\/2026 \u00e0 23:59 \u2014 83440 Tanneron<\/li>\n              <li><strong>Fototentoonstelling van Pablo Picasso door Lucien Clergue<\/strong> \u2014 Du 01\/10\/2026 au 31\/12\/2026 \u00e0 23:59 \u2014 06250 Mougins<\/li>\n              <li><strong>Festival de Cannes \u2013 80e editie<\/strong> \u2014 Du 11\/05\/2027 au 22\/05\/2027<\/li>\n              <li><strong>Les Plages \u00c9lectroniques<\/strong> \u2014 Du 06\/08\/2027 au 08\/08\/2027<\/li>\n              <li><strong>Cannes Yachting Festival<\/strong> \u2014 Du 07\/09\/2027 au 12\/09\/2027<\/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\":28,\"name\":\"Boerentekoop\",\"type\":\"evenements-locaux-348\",\"category\":\"markten-beurzen\",\"label\":\"Du 01\\\/01\\\/2026 au 31\\\/12\\\/2026 \\u00e0 23:59\",\"start\":\"2026-01-01\",\"end\":\"2026-12-31\",\"start_time\":\"\",\"end_time\":\"\",\"open_start\":false,\"city\":\"06460 Caussols\",\"onsite\":false,\"spot\":\"\",\"registration\":false,\"description\":\"Boerentekoop, 56 Deregnaucourt Plein\",\"image\":\"\",\"credit\":\"\",\"link\":\"http:\\\/\\\/www.caussols.fr\\\/\"},{\"id\":18,\"name\":\"Dorpmarkt van Gr\\u00e9oli\\u00e8res\",\"type\":\"evenements-locaux-348\",\"category\":\"markten-beurzen\",\"label\":\"Du 01\\\/01\\\/2026 au 31\\\/12\\\/2026 \\u00e0 23:59\",\"start\":\"2026-01-01\",\"end\":\"2026-12-31\",\"start_time\":\"\",\"end_time\":\"\",\"open_start\":false,\"city\":\"06620 Greoli\\u00e8res\",\"onsite\":false,\"spot\":\"\",\"registration\":false,\"description\":\"Voedselmarkt, lokale producten\",\"image\":\"\",\"credit\":\"\",\"link\":\"\"},{\"id\":30,\"name\":\"Golfe-Juan Fruit- en Groentemarkt\",\"type\":\"evenements-locaux-348\",\"category\":\"markten-beurzen\",\"label\":\"Du 01\\\/01\\\/2026 au 31\\\/12\\\/2026 \\u00e0 23:59\",\"start\":\"2026-01-01\",\"end\":\"2026-12-31\",\"start_time\":\"\",\"end_time\":\"\",\"open_start\":false,\"city\":\"06220 Vallauris\",\"onsite\":false,\"spot\":\"\",\"registration\":false,\"description\":\"Fruit-, bloemen- en groentemarkt\",\"image\":\"\",\"credit\":\"\",\"link\":\"http:\\\/\\\/www.vallaurisgolfejuan-tourisme.fr\\\/\"},{\"id\":59,\"name\":\"Lokaal viskraam\",\"type\":\"evenements-locaux-348\",\"category\":\"markten-beurzen\",\"label\":\"Du 01\\\/01\\\/2026 au 31\\\/12\\\/2026 \\u00e0 23:59\",\"start\":\"2026-01-01\",\"end\":\"2026-12-31\",\"start_time\":\"\",\"end_time\":\"\",\"open_start\":false,\"city\":\"06220 Vallauris\",\"onsite\":false,\"spot\":\"\",\"registration\":false,\"description\":\"Lokaal viskraam\",\"image\":\"\",\"credit\":\"\",\"link\":\"http:\\\/\\\/www.vallaurisgolfejuan-tourisme.fr\\\/\"},{\"id\":56,\"name\":\"March\\u00e9 aux v\\u00eatements de Vallauris\",\"type\":\"evenements-locaux-348\",\"category\":\"marches-foires\",\"label\":\"Du 01\\\/01\\\/2026 au 31\\\/12\\\/2026 \\u00e0 23:59\",\"start\":\"2026-01-01\",\"end\":\"2026-12-31\",\"start_time\":\"\",\"end_time\":\"\",\"open_start\":false,\"city\":\"06220 Vallauris\",\"onsite\":false,\"spot\":\"\",\"registration\":false,\"description\":\"March\\u00e9 aux v\\u00eatements\",\"image\":\"\",\"credit\":\"\",\"link\":\"http:\\\/\\\/www.vallaurisgolfejuan-tourisme.fr\\\/\"},{\"id\":54,\"name\":\"Markt in Cabris\",\"type\":\"evenements-locaux-348\",\"category\":\"markten-beurzen\",\"label\":\"Du 01\\\/01\\\/2026 au 31\\\/12\\\/2026 \\u00e0 23:59\",\"start\":\"2026-01-01\",\"end\":\"2026-12-31\",\"start_time\":\"\",\"end_time\":\"\",\"open_start\":false,\"city\":\"06530 Cabris\",\"onsite\":false,\"spot\":\"\",\"registration\":false,\"description\":\"Voedingsmarkt - Vis\",\"image\":\"\",\"credit\":\"\",\"link\":\"http:\\\/\\\/www.cabris.fr\\\/\"},{\"id\":32,\"name\":\"Markt in Peymeinade\",\"type\":\"evenements-locaux-348\",\"category\":\"markten-beurzen\",\"label\":\"Du 01\\\/01\\\/2026 au 31\\\/12\\\/2026 \\u00e0 23:59\",\"start\":\"2026-01-01\",\"end\":\"2026-12-31\",\"start_time\":\"\",\"end_time\":\"\",\"open_start\":false,\"city\":\"06530 Peymeinade\",\"onsite\":false,\"spot\":\"\",\"registration\":false,\"description\":\"Proven\\u00e7aalse markt\",\"image\":\"\",\"credit\":\"\",\"link\":\"http:\\\/\\\/peymeinade.fr\\\/\"},{\"id\":53,\"name\":\"Markt in P\\u00e9gomas - Logisplein\",\"type\":\"evenements-locaux-348\",\"category\":\"markten-beurzen\",\"label\":\"Du 01\\\/01\\\/2026 au 31\\\/12\\\/2026 \\u00e0 23:59\",\"start\":\"2026-01-01\",\"end\":\"2026-12-31\",\"start_time\":\"\",\"end_time\":\"\",\"open_start\":false,\"city\":\"06580 P\\u00e9gomas\",\"onsite\":false,\"spot\":\"\",\"registration\":false,\"description\":\"Voedingsmarkt - Kleding - Proven\\u00e7aals\",\"image\":\"\",\"credit\":\"\",\"link\":\"http:\\\/\\\/villedepegomas.com\\\/\"},{\"id\":24,\"name\":\"Markt in Saint-Vallier-de-Thiey\",\"type\":\"evenements-locaux-348\",\"category\":\"markten-beurzen\",\"label\":\"Du 01\\\/01\\\/2026 au 31\\\/12\\\/2026 \\u00e0 23:59\",\"start\":\"2026-01-01\",\"end\":\"2026-12-31\",\"start_time\":\"\",\"end_time\":\"\",\"open_start\":false,\"city\":\"06460 Saint-Vallier-de-Thiey\",\"onsite\":false,\"spot\":\"\",\"registration\":false,\"description\":\"Levensmiddelenmarkt - Kleding - Proven\\u00e7aals\",\"image\":\"\",\"credit\":\"\",\"link\":\"https:\\\/\\\/saintvallierdethiey.com\\\/\"},{\"id\":10,\"name\":\"Markten in La Roquette-sur-Siagne\",\"type\":\"evenements-locaux-348\",\"category\":\"markten-beurzen\",\"label\":\"Du 01\\\/01\\\/2026 au 31\\\/12\\\/2026 \\u00e0 23:59\",\"start\":\"2026-01-01\",\"end\":\"2026-12-31\",\"start_time\":\"\",\"end_time\":\"\",\"open_start\":false,\"city\":\"06550 La Roquette-sur-Siagne\",\"onsite\":false,\"spot\":\"\",\"registration\":false,\"description\":\"Voedselmarkt - Lokale producten\",\"image\":\"\",\"credit\":\"\",\"link\":\"http:\\\/\\\/www.laroquettesursiagne.com\\\/\"},{\"id\":39,\"name\":\"Markten in Mouans-Sartoux\",\"type\":\"evenements-locaux-348\",\"category\":\"markten-beurzen\",\"label\":\"Du 01\\\/01\\\/2026 au 31\\\/12\\\/2026 \\u00e0 23:59\",\"start\":\"2026-01-01\",\"end\":\"2026-12-31\",\"start_time\":\"\",\"end_time\":\"\",\"open_start\":false,\"city\":\"06370 Mouans-Sartoux\",\"onsite\":false,\"spot\":\"\",\"registration\":false,\"description\":\"Voedselmarkt - Kleding - Proven\\u00e7aals op dinsdag en donderdag\\nVoedselmarkt - Lokale Producenten op woensdag\",\"image\":\"\",\"credit\":\"\",\"link\":\"http:\\\/\\\/www.mouans-sartoux.fr\\\/\"},{\"id\":46,\"name\":\"Markten in Saint-C\\u00e9zaire-sur-Siagne\",\"type\":\"evenements-locaux-348\",\"category\":\"markten-beurzen\",\"label\":\"Du 01\\\/01\\\/2026 au 31\\\/12\\\/2026 \\u00e0 23:59\",\"start\":\"2026-01-01\",\"end\":\"2026-12-31\",\"start_time\":\"\",\"end_time\":\"\",\"open_start\":false,\"city\":\"06530 Saint-C\\u00e9zaire-sur-Siagne\",\"onsite\":false,\"spot\":\"\",\"registration\":false,\"description\":\"Voedsel- en proven\\u00e7aalse markt\",\"image\":\"\",\"credit\":\"\",\"link\":\"http:\\\/\\\/www.saintcezairesursiagne.fr\\\/\"},{\"id\":16,\"name\":\"Markten van de Grasse-regio\",\"type\":\"evenements-locaux-348\",\"category\":\"markten-beurzen\",\"label\":\"Du 01\\\/01\\\/2026 au 31\\\/12\\\/2026 \\u00e0 23:59\",\"start\":\"2026-01-01\",\"end\":\"2026-12-31\",\"start_time\":\"\",\"end_time\":\"\",\"open_start\":false,\"city\":\"06130 Grasse\",\"onsite\":false,\"spot\":\"\",\"registration\":false,\"description\":\"Maak een wandeling door de markten van de Grasse-regio en proef onze lokale specialiteiten... De regio Grasse waar geuren rijmen met smaken\\u2026\",\"image\":\"\",\"credit\":\"\",\"link\":\"https:\\\/\\\/www.paysdegrassetourisme.fr\\\/\"},{\"id\":13,\"name\":\"Vallauris fruit- en groentemarkt\",\"type\":\"evenements-locaux-348\",\"category\":\"markten-beurzen\",\"label\":\"Du 01\\\/01\\\/2026 au 31\\\/12\\\/2026 \\u00e0 23:59\",\"start\":\"2026-01-01\",\"end\":\"2026-12-31\",\"start_time\":\"\",\"end_time\":\"\",\"open_start\":false,\"city\":\"06220 Vallauris\",\"onsite\":false,\"spot\":\"\",\"registration\":false,\"description\":\"Fruit-, bloem- en groentemarkt\",\"image\":\"\",\"credit\":\"\",\"link\":\"http:\\\/\\\/www.vallaurisgolfejuan-tourisme.fr\\\/\"},{\"id\":29,\"name\":\"De Station Markt\",\"type\":\"evenements-locaux-348\",\"category\":\"markten-beurzen\",\"label\":\"Du 01\\\/01\\\/2026 \\u00e0 07:00 au 31\\\/12\\\/2026 \\u00e0 23:59\",\"start\":\"2026-01-01\",\"end\":\"2026-12-31\",\"start_time\":\"07:00\",\"end_time\":\"\",\"open_start\":false,\"city\":\"06700 Saint-Laurent-du-Var\",\"onsite\":false,\"spot\":\"\",\"registration\":false,\"description\":\"Een kleine lokale markt met regionale producten.\",\"image\":\"\",\"credit\":\"\",\"link\":\"https:\\\/\\\/saintlaurentduvar.fr\\\/mon-quotidien\\\/commerces-et-entreprises\\\/marches-de-plein-vent\\\/\"},{\"id\":4,\"name\":\"Handelsstad\",\"type\":\"evenements-locaux-348\",\"category\":\"markten-beurzen\",\"label\":\"Du 01\\\/01\\\/2026 \\u00e0 07:00 au 31\\\/12\\\/2026 \\u00e0 23:59\",\"start\":\"2026-01-01\",\"end\":\"2026-12-31\",\"start_time\":\"07:00\",\"end_time\":\"\",\"open_start\":false,\"city\":\"06800 Cagnes-sur-Mer\",\"onsite\":false,\"spot\":\"\",\"registration\":false,\"description\":\"Traditionele overdekte markt die handelaren en ambachtslieden samenbrengt in het hart van de voetgangerszone van het stadscentrum: festival van geuren en kleuren elke ochtend.\",\"image\":\"\",\"credit\":\"\",\"link\":\"https:\\\/\\\/www.cagnes-sur-mer.fr\\\/economie\\\/rendez-vous-commerciaux\\\/marches-hebdomadaires\\\/\"},{\"id\":12,\"name\":\"Proven\\u00e7aalse markt van Fr\\u00e9jus\",\"type\":\"evenements-locaux-348\",\"category\":\"markten-beurzen\",\"label\":\"Du 01\\\/01\\\/2026 \\u00e0 07:00 au 31\\\/12\\\/2026 \\u00e0 23:59\",\"start\":\"2026-01-01\",\"end\":\"2026-12-31\",\"start_time\":\"07:00\",\"end_time\":\"\",\"open_start\":false,\"city\":\"83600 Fr\\u00e9jus\",\"onsite\":false,\"spot\":\"\",\"registration\":false,\"description\":\"Ontdek de levendige en kleurrijke Proven\\u00e7aalse markt van Fr\\u00e9jus, waar lokale producten, verleidelijke kruiden en regionale ambachten worden tentoongesteld. Een authentieke sensorische ervaring in het hart van Provence.\",\"image\":\"\",\"credit\":\"\",\"link\":\"\"},{\"id\":44,\"name\":\"De Brocante Markt\",\"type\":\"evenements-locaux-348\",\"category\":\"flohmarkte-garageverkopen\",\"label\":\"Du 01\\\/01\\\/2026 \\u00e0 07:30 au 31\\\/12\\\/2026 \\u00e0 23:59\",\"start\":\"2026-01-01\",\"end\":\"2026-12-31\",\"start_time\":\"07:30\",\"end_time\":\"\",\"open_start\":false,\"city\":\"06600 Antibes\",\"onsite\":false,\"spot\":\"\",\"registration\":false,\"description\":\"Deze rommelmarkt zit vol verrassingen voor iedereen die houdt van kringlopen. Van porselein tot boeken, schilderijen, kristallen tafellinnen en antieke objecten.\",\"image\":\"\",\"credit\":\"\",\"link\":\"\"},{\"id\":31,\"name\":\"Antiekmarkt \\\/ Rommelmarkt\",\"type\":\"evenements-locaux-348\",\"category\":\"braderieen-kringloopwinkels\",\"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\":\"06560 Valbonne\",\"onsite\":false,\"spot\":\"\",\"registration\":false,\"description\":\"Antiek-\\\/Rommelmarkt: eerste zondag van de maand - dorp\\r\\nTijden: 8u-18u\",\"image\":\"\",\"credit\":\"\",\"link\":\"\"},{\"id\":8,\"name\":\"Aubar\\u00e8de Buurtmarkt\",\"type\":\"evenements-locaux-348\",\"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\":\"06110 Le Cannet\",\"onsite\":false,\"spot\":\"\",\"registration\":false,\"description\":\"Biologische voedselmarkt.\",\"image\":\"\",\"credit\":\"\",\"link\":\"https:\\\/\\\/lecannet-tourisme.fr\\\/index.php\"},{\"id\":7,\"name\":\"Dorpmarkt\",\"type\":\"evenements-locaux-348\",\"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\":\"06270 Villeneuve-Loubet\",\"onsite\":false,\"spot\":\"\",\"registration\":false,\"description\":\"Wekelijkse markt: verse producten, voedsel, lokale producten, kleding, cosmetica, accessoires, sieraden, ambachtslieden...\",\"image\":\"\",\"credit\":\"\",\"link\":\"\"},{\"id\":51,\"name\":\"Kledingmarkt\",\"type\":\"evenements-locaux-348\",\"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\":\"06600 Antibes\",\"onsite\":false,\"spot\":\"\",\"registration\":false,\"description\":\"\",\"image\":\"\",\"credit\":\"\",\"link\":\"\"},{\"id\":52,\"name\":\"Kleine zaterdagmarkt\",\"type\":\"evenements-locaux-348\",\"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\":\"06140 Tourrettes-sur-Loup\",\"onsite\":false,\"spot\":\"\",\"registration\":false,\"description\":\"Een kleine markt vindt nu elke zaterdochtend plaats op het Scour\\u00e9dou-plein recht naast de kerk\",\"image\":\"\",\"credit\":\"\",\"link\":\"http:\\\/\\\/www.tourrettessurloup.com\\\/\"},{\"id\":45,\"name\":\"Le Cannet Centrum Markt\",\"type\":\"evenements-locaux-348\",\"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\":\"06110 Le Cannet\",\"onsite\":false,\"spot\":\"\",\"registration\":false,\"description\":\"VAN LEVENSMIDDELEN TOT JEAN JAUR\\u00c8S-MARKT OP DINSDAGOCHTEND\\n\\nVan 8:30 tot 12:30\\n\\nDit plein in het hart van Le Cannet Centrum waar de buurtboogschutters zich elke dag verzamelen.\",\"image\":\"\",\"credit\":\"\",\"link\":\"https:\\\/\\\/lecannet-tourisme.fr\\\/index.php\"},{\"id\":35,\"name\":\"Les Matinales du Cours Honor\\u00e9 Cresp\",\"type\":\"evenements-locaux-348\",\"category\":\"marches-foires\",\"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\":\"06130 Grasse\",\"onsite\":false,\"spot\":\"\",\"registration\":false,\"description\":\"March\\u00e9 gourmand aux senteurs proven\\u00e7ales, march\\u00e9 aux fleurs, aux accessoires, aux bijoux, aux objets de d\\u00e9coration.\",\"image\":\"\",\"credit\":\"\",\"link\":\"\"},{\"id\":57,\"name\":\"March\\u00e9 paysan du Cheiron\",\"type\":\"evenements-locaux-348\",\"category\":\"marches-foires\",\"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\":\"06140 Coursegoules\",\"onsite\":false,\"spot\":\"\",\"registration\":false,\"description\":\"Le march\\u00e9 paysan du Cheiron a lieu tous les jeudis matin sur la Place des Combes \\u00e0 Coursegoules\",\"image\":\"\",\"credit\":\"\",\"link\":\"\"},{\"id\":21,\"name\":\"Markt op Place de Rocheville\",\"type\":\"evenements-locaux-348\",\"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\":\"06110 Le Cannet\",\"onsite\":false,\"spot\":\"\",\"registration\":false,\"description\":\"Deze markt op dit plein heeft een sfeer die kenmerkend is voor een wijk, waarbij de identiteit, volks tradities en levendige sfeer behouden blijven!\",\"image\":\"\",\"credit\":\"\",\"link\":\"https:\\\/\\\/lecannet-tourisme.fr\\\/index.php\"},{\"id\":20,\"name\":\"Markt van lokale producenten\",\"type\":\"evenements-locaux-348\",\"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\":\"06800 Cagnes-sur-Mer\",\"onsite\":false,\"spot\":\"\",\"registration\":false,\"description\":\"Voetgangerszone (Marktstraat, Giacosa-straat), rond de Handelsstad\",\"image\":\"\",\"credit\":\"\",\"link\":\"http:\\\/\\\/www.cagnes-sur-mer.fr\\\/economie\\\/rendez-vous-commerciaux\\\/marches-hebdomadaires\\\/\"},{\"id\":22,\"name\":\"Markt voor Italiaanse Smaken\",\"type\":\"evenements-locaux-348\",\"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\":\"06620 Le Bar-sur-Loup\",\"onsite\":false,\"spot\":\"\",\"registration\":false,\"description\":\"De Italiaanse markt in Le Bar sur Loup vindt elke 3e zaterdag van de maand plaats.\",\"image\":\"\",\"credit\":\"\",\"link\":\"http:\\\/\\\/lebarsurloup.fr\\\/index.php\"},{\"id\":14,\"name\":\"Pre du Lac Markt\",\"type\":\"evenements-locaux-348\",\"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\":\"06740 Ch\\u00e2teauneuf-Grasse\",\"onsite\":false,\"spot\":\"\",\"registration\":false,\"description\":\"De markt van Pre du Lac vindt elke maandag 's ochtends plaats tot 13.00 uur op de parkeerplaats van het Platanenplein.\",\"image\":\"\",\"credit\":\"\",\"link\":\"http:\\\/\\\/www.ville-chateauneuf.fr\\\/\"},{\"id\":38,\"name\":\"Proven\\u00e7aalse Markt\",\"type\":\"evenements-locaux-348\",\"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\":\"06330 Roquefort-les-Pins\",\"onsite\":false,\"spot\":\"\",\"registration\":false,\"description\":\"Wekelijkse markt elke woensdag en zaterdagmorgen onder de hallen in het stadscentrum.\",\"image\":\"\",\"credit\":\"\",\"link\":\"http:\\\/\\\/www.ville-roquefort-les-pins.fr\\\/\"},{\"id\":47,\"name\":\"Proven\\u00e7aalse Markt van Valbonne\",\"type\":\"evenements-locaux-348\",\"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\":\"06560 Valbonne\",\"onsite\":false,\"spot\":\"\",\"registration\":false,\"description\":\"\\uf076\\tProven\\u00e7aalse markt: elke vrijdagochtend \\u2013 dorp \\nTijden: 8.00-13.00\",\"image\":\"\",\"credit\":\"\",\"link\":\"\"},{\"id\":26,\"name\":\"Proven\\u00e7aalse markt van Tourrettes-sur-Loup\",\"type\":\"evenements-locaux-348\",\"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\":\"06140 Tourrettes-sur-Loup\",\"onsite\":false,\"spot\":\"\",\"registration\":false,\"description\":\"Proven\\u00e7aalse markt: elke woensdag ochtend\\nTijden: 8:00-13:30\",\"image\":\"\",\"credit\":\"\",\"link\":\"http:\\\/\\\/www.tourrettessurloup.com\\\/\"},{\"id\":40,\"name\":\"Rocheville Voedselmarkt\",\"type\":\"evenements-locaux-348\",\"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\":\"06110 Le Cannet\",\"onsite\":false,\"spot\":\"\",\"registration\":false,\"description\":\"Elke zaterdagochtend, ontmoet ons op de Rocheville voedselmarkt!\",\"image\":\"\",\"credit\":\"\",\"link\":\"\"},{\"id\":11,\"name\":\"Stadscentrum Markt\",\"type\":\"evenements-locaux-348\",\"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\":\"06800 Cagnes-sur-Mer\",\"onsite\":false,\"spot\":\"\",\"registration\":false,\"description\":\"Verenigde Markt op Cours du 11 Novembre, rue Bellissime, rue des Palmiers en Place de Gaulle\",\"image\":\"\",\"credit\":\"\",\"link\":\"https:\\\/\\\/www.cagnes-sur-mer.fr\\\/economie\\\/rendez-vous-commerciaux\\\/marches-hebdomadaires\\\/\"},{\"id\":3,\"name\":\"Wekelijkse Markt\",\"type\":\"evenements-locaux-348\",\"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\":\"83440 Montauroux\",\"onsite\":false,\"spot\":\"\",\"registration\":false,\"description\":\"Elke week, op dinsdag, organiseert de gemeente een markt in het hart van het oude dorp. Verkopers zetten hun kraampjes op langs de plataanlaan en bieden hun producten aan. Voornamelijk voedingsmarkt.\",\"image\":\"\",\"credit\":\"\",\"link\":\"https:\\\/\\\/www.montauroux.fr\\\/\"},{\"id\":36,\"name\":\"Wekelijkse Markt\",\"type\":\"evenements-locaux-348\",\"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\":\"83600 Bagnols-en-For\\u00eat\",\"onsite\":false,\"spot\":\"\",\"registration\":false,\"description\":\"Kleine markt op de boulevard du Rayol met uitzicht op de omliggende heuvels.\",\"image\":\"\",\"credit\":\"\",\"link\":\"http:\\\/\\\/www.bagnolsenforet.fr\\\/\"},{\"id\":50,\"name\":\"Zondagmarkt\",\"type\":\"evenements-locaux-348\",\"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\":\"06700 Saint-Laurent-du-Var\",\"onsite\":false,\"spot\":\"\",\"registration\":false,\"description\":\"Grote markt met alle producten.\",\"image\":\"\",\"credit\":\"\",\"link\":\"https:\\\/\\\/saintlaurentduvar.fr\\\/mon-quotidien\\\/commerces-et-entreprises\\\/marches-de-plein-vent\\\/\"},{\"id\":37,\"name\":\"Boeren- en Ambachtenmarkt\",\"type\":\"evenements-locaux-348\",\"category\":\"markten-beurzen\",\"label\":\"Du 01\\\/01\\\/2026 \\u00e0 08:30 au 31\\\/12\\\/2026 \\u00e0 23:59\",\"start\":\"2026-01-01\",\"end\":\"2026-12-31\",\"start_time\":\"08:30\",\"end_time\":\"\",\"open_start\":false,\"city\":\"06250 Mougins\",\"onsite\":false,\"spot\":\"\",\"registration\":false,\"description\":\"Elke zaterdag en zondagochtend in Mougins, van 8:30 tot 13:00 uur, ontmoet onze lokale producenten en geniet van verse, kwaliteitsproducten.\",\"image\":\"\",\"credit\":\"\",\"link\":\"https:\\\/\\\/mougins.fr\\\/\"},{\"id\":42,\"name\":\"Cros-de-Cagnes Vlooienmarkt\",\"type\":\"evenements-locaux-348\",\"category\":\"markten-beurzen\",\"label\":\"Du 01\\\/01\\\/2026 \\u00e0 08:30 au 31\\\/12\\\/2026 \\u00e0 23:59\",\"start\":\"2026-01-01\",\"end\":\"2026-12-31\",\"start_time\":\"08:30\",\"end_time\":\"\",\"open_start\":false,\"city\":\"06800 Cagnes-sur-Mer\",\"onsite\":false,\"spot\":\"\",\"registration\":false,\"description\":\"Markt op de Rue des Oliviers en B\\u00e9ranger Plein\",\"image\":\"\",\"credit\":\"\",\"link\":\"https:\\\/\\\/www.cagnes-sur-mer.fr\\\/economie\\\/rendez-vous-commerciaux\\\/marches-hebdomadaires\\\/\"},{\"id\":48,\"name\":\"Hippodroommarkt\",\"type\":\"evenements-locaux-348\",\"category\":\"markten-beurzen\",\"label\":\"Du 01\\\/01\\\/2026 \\u00e0 08:30 au 31\\\/12\\\/2026 \\u00e0 23:59\",\"start\":\"2026-01-01\",\"end\":\"2026-12-31\",\"start_time\":\"08:30\",\"end_time\":\"\",\"open_start\":false,\"city\":\"06800 Cagnes-sur-Mer\",\"onsite\":false,\"spot\":\"\",\"registration\":false,\"description\":\"Markt aan de Kennedy Boulevard.\",\"image\":\"\",\"credit\":\"\",\"link\":\"https:\\\/\\\/www.cagnes-sur-mer.fr\\\/economie\\\/rendez-vous-commerciaux\\\/marches-hebdomadaires\\\/\"},{\"id\":58,\"name\":\"March\\u00e9 hebdomadaire Le Bar-sur-Loup\",\"type\":\"evenements-locaux-348\",\"category\":\"marches-foires\",\"label\":\"Du 01\\\/01\\\/2026 \\u00e0 08:30 au 31\\\/12\\\/2026 \\u00e0 23:59\",\"start\":\"2026-01-01\",\"end\":\"2026-12-31\",\"start_time\":\"08:30\",\"end_time\":\"\",\"open_start\":false,\"city\":\"06620 Le Bar-sur-Loup\",\"onsite\":false,\"spot\":\"\",\"registration\":false,\"description\":\"Le march\\u00e9 hebdomadaire du Bar-sur-Loup se tient tous les mercredis matins, au c\\u0153ur du village (avenue G\\u00e9n\\u00e9ral de Gaulle et square Seytre) : march\\u00e9 alimentaire et divers\",\"image\":\"\",\"credit\":\"\",\"link\":\"http:\\\/\\\/lebarsurloup.fr\\\/index.php\"},{\"id\":5,\"name\":\"Visveiling\",\"type\":\"evenements-locaux-348\",\"category\":\"markten-beurzen\",\"label\":\"Du 01\\\/01\\\/2026 \\u00e0 08:30 au 31\\\/12\\\/2026 \\u00e0 23:59\",\"start\":\"2026-01-01\",\"end\":\"2026-12-31\",\"start_time\":\"08:30\",\"end_time\":\"\",\"open_start\":false,\"city\":\"06800 Cagnes-sur-Mer\",\"onsite\":false,\"spot\":\"\",\"registration\":false,\"description\":\"Directe verkoop aan particulieren aan de beschutte haven van Cros-de-Cagnes.\\r\\nProfiteer van advies van Corinne Costanzia voor het koken volgens de vangst van de dag.\",\"image\":\"\",\"credit\":\"\",\"link\":\"\"},{\"id\":27,\"name\":\"Buitenmarkt\",\"type\":\"evenements-locaux-348\",\"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\":\"06480 La Colle-sur-Loup\",\"onsite\":false,\"spot\":\"\",\"registration\":false,\"description\":\"Een markt buiten met lokale producten elke zaterdag!\",\"image\":\"\",\"credit\":\"\",\"link\":\"\"},{\"id\":49,\"name\":\"Italiaanse Markt\",\"type\":\"evenements-locaux-348\",\"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\":\"06800 Cagnes-sur-Mer\",\"onsite\":false,\"spot\":\"\",\"registration\":false,\"description\":\"Voedselmarkt van Italiaanse producenten, elke 1e zaterdag van de maand.\",\"image\":\"\",\"credit\":\"\",\"link\":\"https:\\\/\\\/www.cagnes-sur-mer.fr\\\/economie\\\/rendez-vous-commerciaux\\\/marches-thematiques\\\/\"},{\"id\":9,\"name\":\"Italiaanse markt\",\"type\":\"evenements-locaux-348\",\"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\":\"06580 P\\u00e9gomas\",\"onsite\":false,\"spot\":\"\",\"registration\":false,\"description\":\"Ontmoet elkaar op de tweede zaterdag van de maand in Jardin des Mimosas voor een culinaire reis naar het hart van Itali\\u00eb!\",\"image\":\"\",\"credit\":\"\",\"link\":\"http:\\\/\\\/villedepegomas.com\\\/\"},{\"id\":55,\"name\":\"Italische Markt van Opio\",\"type\":\"evenements-locaux-348\",\"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\":\"06650 Opio\",\"onsite\":false,\"spot\":\"\",\"registration\":false,\"description\":\"Vanaf 10 mei 2025 zal de gemeente Opio elke tweede zaterdag van de maand een Italiaanse markt organiseren. \\r\\nDe markt begint om 9 uur en eindigt om 17 uur in het Winkelcentrum van Opio.\",\"image\":\"\",\"credit\":\"\",\"link\":\"\"},{\"id\":15,\"name\":\"Kleine lokale markt\",\"type\":\"evenements-locaux-348\",\"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\":\"06570 Saint-Paul-de-Vence\",\"onsite\":false,\"spot\":\"\",\"registration\":false,\"description\":\"Woensdag en vrijdagochtend van 9u tot 14u: ontmoet lokale boeren en ambachtslieden op de kleine markt.\",\"image\":\"\",\"credit\":\"\",\"link\":\"\"},{\"id\":43,\"name\":\"Grand Chef Tentoonstelling \\\"Auguste Escoffier, een Humanist\\\"\",\"type\":\"evenements-locaux-348\",\"category\":\"tentoonstellingen\",\"label\":\"Du 09\\\/01\\\/2026 au 29\\\/11\\\/2026 \\u00e0 23:59\",\"start\":\"2026-01-09\",\"end\":\"2026-11-29\",\"start_time\":\"\",\"end_time\":\"\",\"open_start\":false,\"city\":\"06270 Villeneuve-Loubet\",\"onsite\":false,\"spot\":\"\",\"registration\":false,\"description\":\"Tentoonstelling van 10 januari tot 30 november 2025, gewijd aan de sociale en humanistische betrokkenheid van Chef Auguste Escoffier: talrijke initiatieven op het gebied van overdracht, leren, wederzijdse hulp en verzekering...\",\"image\":\"\",\"credit\":\"\",\"link\":\"\"},{\"id\":17,\"name\":\"Handel en Kunstenaarsmarkt\",\"type\":\"evenements-locaux-348\",\"category\":\"markten-beurzen\",\"label\":\"Du 18\\\/01\\\/2026 \\u00e0 10:00 au 20\\\/12\\\/2026 \\u00e0 23:59\",\"start\":\"2026-01-18\",\"end\":\"2026-12-20\",\"start_time\":\"10:00\",\"end_time\":\"\",\"open_start\":false,\"city\":\"06800 Cagnes-sur-Mer\",\"onsite\":false,\"spot\":\"\",\"registration\":false,\"description\":\"De maandelijkse bijeenkomst van handwerk en kunstwerken: glas schilderen, keramiek, boekenbinden, zepen, beeldhouwen, naaien, illustratie, kant, schilderen, beeldende kunsten.\",\"image\":\"\",\"credit\":\"\",\"link\":\"http:\\\/\\\/www.cagnes-sur-mer.fr\\\/marche-de-lartisanat-dart-et-des-artistes-20-mars-2022\\\/\"},{\"id\":23,\"name\":\"Tentoonstelling Gautier Ferrero\",\"type\":\"evenements-locaux-348\",\"category\":\"tentoonstellingen\",\"label\":\"Du 06\\\/04\\\/2026 au 10\\\/11\\\/2026 \\u00e0 23:59\",\"start\":\"2026-04-06\",\"end\":\"2026-11-10\",\"start_time\":\"\",\"end_time\":\"\",\"open_start\":false,\"city\":\"06140 Vence\",\"onsite\":false,\"spot\":\"\",\"registration\":false,\"description\":\"Het Ch\\u00e2teau Saint-Martin & Spa belicht de werken van kunstenaar Gautier Ferrero.\",\"image\":\"\",\"credit\":\"\",\"link\":\"https:\\\/\\\/www.oetkercollection.com\\\/hotels\\\/chateau-saint-martin\\\/\"},{\"id\":41,\"name\":\"Tentoonstelling \\\"Le temps Courr\\u00e8ges\\\" van Peter Knapp\",\"type\":\"evenements-locaux-348\",\"category\":\"tentoonstellingen\",\"label\":\"Du 14\\\/05\\\/2026 au 08\\\/11\\\/2026 \\u00e0 23:59\",\"start\":\"2026-05-14\",\"end\":\"2026-11-08\",\"start_time\":\"\",\"end_time\":\"\",\"open_start\":false,\"city\":\"06570 Saint-Paul-de-Vence\",\"onsite\":false,\"spot\":\"\",\"registration\":false,\"description\":\"De Maeght Stichting presenteert een uitzonderlijke tentoonstelling gewijd aan de kunstenaar Peter Knapp.\",\"image\":\"\",\"credit\":\"\",\"link\":\"https:\\\/\\\/www.fondation-maeght.com\\\/?lang=fr\"},{\"id\":34,\"name\":\"Tentoonstelling \\\"Aan de waterkant\\\" van Ellsworth Kelly\",\"type\":\"evenements-locaux-348\",\"category\":\"tentoonstellingen\",\"label\":\"Du 27\\\/06\\\/2026 \\u00e0 10:00 au 15\\\/11\\\/2026 \\u00e0 23:59\",\"start\":\"2026-06-27\",\"end\":\"2026-11-15\",\"start_time\":\"10:00\",\"end_time\":\"\",\"open_start\":false,\"city\":\"06570 Saint-Paul-de-Vence\",\"onsite\":false,\"spot\":\"\",\"registration\":false,\"description\":\"De Maeght Stichting presenteert van 27 juni tot 15 november 2026 een grootschalige tentoonstelling gewijd aan de Amerikaanse kunstenaar Ellsworth Kelly.\",\"image\":\"\",\"credit\":\"\",\"link\":\"https:\\\/\\\/www.fondation-maeght.com\\\/\"},{\"id\":6,\"name\":\"Tentoonstelling Pascale Marthine Tayou\",\"type\":\"evenements-locaux-348\",\"category\":\"tentoonstellingen\",\"label\":\"Du 04\\\/07\\\/2026 au 23\\\/11\\\/2026 \\u00e0 23:59\",\"start\":\"2026-07-04\",\"end\":\"2026-11-23\",\"start_time\":\"\",\"end_time\":\"\",\"open_start\":false,\"city\":\"06220 Vallauris\",\"onsite\":false,\"spot\":\"\",\"registration\":false,\"description\":\"Tijdens de zomer van 2026 nodigt het Nasionaal Picasso Museum \\u2013 Oorlog en Vrede de artieste Pascale Marthine Tayou uit om een speciaal voor de kapel van Vallauris ontworpen project te presenteren.\",\"image\":\"\",\"credit\":\"\",\"link\":\"https:\\\/\\\/musees-nationaux-alpesmaritimes.fr\\\/picasso\\\/agenda\\\/evenement\\\/pascale-marthine-tayou\"},{\"id\":33,\"name\":\"Tentoonstelling \\\"Wereldmirages\\\" - De schilderijen van Herv\\u00e9 di Rosa\",\"type\":\"evenements-locaux-348\",\"category\":\"tentoonstellingen\",\"label\":\"Du 17\\\/07\\\/2026 \\u00e0 10:00 au 08\\\/11\\\/2026 \\u00e0 23:59\",\"start\":\"2026-07-17\",\"end\":\"2026-11-08\",\"start_time\":\"10:00\",\"end_time\":\"\",\"open_start\":false,\"city\":\"06400 Cannes\",\"onsite\":false,\"spot\":\"\",\"registration\":false,\"description\":\"Door middel van schilderkunst, beeldhouwkunst, tekening, keramiek of wandtapijt biedt Herv\\u00e9 Di Rosa een kleurrijk, vrij en speels subversief universum.\",\"image\":\"\",\"credit\":\"\",\"link\":\"https:\\\/\\\/www.cannes.com\\\/fr\\\/agenda\\\/annee-2026\\\/juillet\\\/mirages-du-monde-les-peintures-d-herve-di-rosa.html\"},{\"id\":19,\"name\":\"Tweewekelijkse Ambachtelijke Markt\",\"type\":\"evenements-locaux-348\",\"category\":\"markten-beurzen\",\"label\":\"Du 25\\\/07\\\/2026 \\u00e0 09:00 au 31\\\/12\\\/2026 \\u00e0 23:59\",\"start\":\"2026-07-25\",\"end\":\"2026-12-31\",\"start_time\":\"09:00\",\"end_time\":\"\",\"open_start\":false,\"city\":\"83440 Tanneron\",\"onsite\":false,\"spot\":\"\",\"registration\":false,\"description\":\"Nieuw: ambachtelijke markt\",\"image\":\"\",\"credit\":\"\",\"link\":\"http:\\\/\\\/www.communedetanneron.fr\\\/\"},{\"id\":25,\"name\":\"Fototentoonstelling van Pablo Picasso door Lucien Clergue\",\"type\":\"evenements-locaux-348\",\"category\":\"tentoonstellingen\",\"label\":\"Du 01\\\/10\\\/2026 au 31\\\/12\\\/2026 \\u00e0 23:59\",\"start\":\"2026-10-01\",\"end\":\"2026-12-31\",\"start_time\":\"\",\"end_time\":\"\",\"open_start\":false,\"city\":\"06250 Mougins\",\"onsite\":false,\"spot\":\"\",\"registration\":false,\"description\":\"Van 1961 tot 1973 woonde Picasso in Mougins bij Mas Notre-Dame-de-Vie. Hoewel hij behoorlijk teruggetrokken was in deze periode, liet de meester zich fotograferen door zijn vriend en fotograaf Lucien Clergue. Ontdek ontroerende beelden in de kapel Notre-Dame-de-Vie.\",\"image\":\"\",\"credit\":\"\",\"link\":\"\"},{\"id\":0,\"name\":\"Festival de Cannes \\u2013 80e editie\",\"type\":\"evenements-aux-alentours\",\"category\":\"dichtbijgelegen-evenementen\",\"label\":\"Du 11\\\/05\\\/2027 au 22\\\/05\\\/2027\",\"start\":\"2027-05-11\",\"end\":\"2027-05-22\",\"start_time\":\"\",\"end_time\":\"\",\"open_start\":false,\"city\":\"\",\"onsite\":true,\"spot\":\"\",\"registration\":true,\"description\":\"Het Cannes Filmfestival is het grootste internationale film evenement op La Croisette. Het evenement staat vooral bekend om zijn vertoningen, rode loper en uitgebreide mediabelangstelling. Vanaf Parc Bellevue kan het worden gezien als een iconische culturele uitje in Cannes.\",\"image\":\"https:\\\/\\\/parcbellevue.com\\\/wp-content\\\/uploads\\\/2023\\\/11\\\/festival-cannes.webp\",\"credit\":\"\",\"link\":\"\"},{\"id\":1,\"name\":\"Les Plages \\u00c9lectroniques\",\"type\":\"evenements-aux-alentours\",\"category\":\"dichtbijgelegen-evenementen\",\"label\":\"Du 06\\\/08\\\/2027 au 08\\\/08\\\/2027\",\"start\":\"2027-08-06\",\"end\":\"2027-08-08\",\"start_time\":\"\",\"end_time\":\"\",\"open_start\":false,\"city\":\"\",\"onsite\":true,\"spot\":\"\",\"registration\":true,\"description\":\"Les Plages \\u00c9lectroniques is een groot zomermuziek evenement in Cannes, met meerdere dagen concerten en elektronische muziek aan de Middellandse Zee. De sfeer is feestelijk, jong en zeer gericht op het strand en de nacht. Vanuit Parc Bellevue is het evenement een herkenbare muzikale uitje in het zomerseizoen.\",\"image\":\"https:\\\/\\\/elaia-public.s3.fr-par.scw.cloud\\\/metadata_images\\\/image_6acf46e25f96a.png\",\"credit\":\"\",\"link\":\"\"},{\"id\":2,\"name\":\"Cannes Yachting Festival\",\"type\":\"evenements-aux-alentours\",\"category\":\"dichtbijgelegen-evenementen\",\"label\":\"Du 07\\\/09\\\/2027 au 12\\\/09\\\/2027\",\"start\":\"2027-09-07\",\"end\":\"2027-09-12\",\"start_time\":\"\",\"end_time\":\"\",\"open_start\":false,\"city\":\"\",\"onsite\":true,\"spot\":\"\",\"registration\":true,\"description\":\"Het Cannes Yachting Festival is een groot jachthavenbeurs gehouden in Cannes, gewijd aan jachten, zeilboten en maritieme innovaties. Het evenement combineert op het water en aan land exposities, met een professionele en publiekservaring. Zeer geschikt voor zeilliefhebbers en grote schepen.\",\"image\":\"https:\\\/\\\/elaia-public.s3.fr-par.scw.cloud\\\/metadata_images\\\/image_6acf472edd801.png\",\"credit\":\"\",\"link\":\"\"}];\n    var CATEGORIES = {\"dichtbijgelegen-evenementen\":{\"key\":\"dichtbijgelegen-evenementen\",\"label\":\"Dichtbijgelegen evenementen\",\"color\":\"#ef4444\",\"count\":3},\"markten-beurzen\":{\"key\":\"markten-beurzen\",\"label\":\"Markten & Beurzen\",\"color\":\"#3b82f6\",\"count\":44},\"tentoonstellingen\":{\"key\":\"tentoonstellingen\",\"label\":\"Tentoonstellingen\",\"color\":\"#10b981\",\"count\":7},\"braderieen-kringloopwinkels\":{\"key\":\"braderieen-kringloopwinkels\",\"label\":\"Braderie\\u00ebn & Kringloopwinkels\",\"color\":\"#f59e0b\",\"count\":1},\"marches-foires\":{\"key\":\"marches-foires\",\"label\":\"March\\u00e9s & foires\",\"color\":\"#a855f7\",\"count\":4},\"flohmarkte-garageverkopen\":{\"key\":\"flohmarkte-garageverkopen\",\"label\":\"Flohm\\u00e4rkte & Garageverkopen\",\"color\":\"#0891b2\",\"count\":1}};\n    var TODAY = \"2026-11-13\";\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 = \"\";\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":""},"sujet":[],"class_list":["post-5422","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 Parc Bellevue<\/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:\/\/parcbellevue.com\/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 Parc Bellevue\" \/>\n<meta property=\"og:url\" content=\"https:\/\/parcbellevue.com\/elaia-animations\/\" \/>\n<meta property=\"og:site_name\" content=\"Camping Parc Bellevue\" \/>\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:\\\/\\\/parcbellevue.com\\\/elaia-animations\\\/\",\"url\":\"https:\\\/\\\/parcbellevue.com\\\/elaia-animations\\\/\",\"name\":\"Animatie en evenementen - Camping Parc Bellevue\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/parcbellevue.com\\\/#website\"},\"datePublished\":\"2026-10-20T10:14:15+00:00\",\"breadcrumb\":{\"@id\":\"https:\\\/\\\/parcbellevue.com\\\/elaia-animations\\\/#breadcrumb\"},\"inLanguage\":\"nl-NL\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\\\/\\\/parcbellevue.com\\\/elaia-animations\\\/\"]}]},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\\\/\\\/parcbellevue.com\\\/elaia-animations\\\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Camping Cannes\",\"item\":\"https:\\\/\\\/parcbellevue.com\\\/nl\\\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Animatie en evenementen\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\\\/\\\/parcbellevue.com\\\/#website\",\"url\":\"https:\\\/\\\/parcbellevue.com\\\/\",\"name\":\"Camping Parc Bellevue\",\"description\":\"\",\"publisher\":{\"@id\":\"https:\\\/\\\/parcbellevue.com\\\/#organization\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\\\/\\\/parcbellevue.com\\\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"nl-NL\"},{\"@type\":\"Organization\",\"@id\":\"https:\\\/\\\/parcbellevue.com\\\/#organization\",\"name\":\"Camping Parc Bellevue\",\"url\":\"https:\\\/\\\/parcbellevue.com\\\/\",\"logo\":{\"@type\":\"ImageObject\",\"inLanguage\":\"nl-NL\",\"@id\":\"https:\\\/\\\/parcbellevue.com\\\/#\\\/schema\\\/logo\\\/image\\\/\",\"url\":\"https:\\\/\\\/parcbellevue.com\\\/wp-content\\\/uploads\\\/2022\\\/11\\\/cropped-logo-camping-parc-bellevue.png\",\"contentUrl\":\"https:\\\/\\\/parcbellevue.com\\\/wp-content\\\/uploads\\\/2022\\\/11\\\/cropped-logo-camping-parc-bellevue.png\",\"width\":902,\"height\":904,\"caption\":\"Camping Parc Bellevue\"},\"image\":{\"@id\":\"https:\\\/\\\/parcbellevue.com\\\/#\\\/schema\\\/logo\\\/image\\\/\"}}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"Animatie en evenementen - Camping Parc Bellevue","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:\/\/parcbellevue.com\/elaia-animations\/","og_locale":"nl_NL","og_type":"article","og_title":"Animatie en evenementen - Camping Parc Bellevue","og_url":"https:\/\/parcbellevue.com\/elaia-animations\/","og_site_name":"Camping Parc Bellevue","twitter_card":"summary_large_image","schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"WebPage","@id":"https:\/\/parcbellevue.com\/elaia-animations\/","url":"https:\/\/parcbellevue.com\/elaia-animations\/","name":"Animatie en evenementen - Camping Parc Bellevue","isPartOf":{"@id":"https:\/\/parcbellevue.com\/#website"},"datePublished":"2026-10-20T10:14:15+00:00","breadcrumb":{"@id":"https:\/\/parcbellevue.com\/elaia-animations\/#breadcrumb"},"inLanguage":"nl-NL","potentialAction":[{"@type":"ReadAction","target":["https:\/\/parcbellevue.com\/elaia-animations\/"]}]},{"@type":"BreadcrumbList","@id":"https:\/\/parcbellevue.com\/elaia-animations\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Camping Cannes","item":"https:\/\/parcbellevue.com\/nl\/"},{"@type":"ListItem","position":2,"name":"Animatie en evenementen"}]},{"@type":"WebSite","@id":"https:\/\/parcbellevue.com\/#website","url":"https:\/\/parcbellevue.com\/","name":"Camping Parc Bellevue","description":"","publisher":{"@id":"https:\/\/parcbellevue.com\/#organization"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/parcbellevue.com\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"nl-NL"},{"@type":"Organization","@id":"https:\/\/parcbellevue.com\/#organization","name":"Camping Parc Bellevue","url":"https:\/\/parcbellevue.com\/","logo":{"@type":"ImageObject","inLanguage":"nl-NL","@id":"https:\/\/parcbellevue.com\/#\/schema\/logo\/image\/","url":"https:\/\/parcbellevue.com\/wp-content\/uploads\/2022\/11\/cropped-logo-camping-parc-bellevue.png","contentUrl":"https:\/\/parcbellevue.com\/wp-content\/uploads\/2022\/11\/cropped-logo-camping-parc-bellevue.png","width":902,"height":904,"caption":"Camping Parc Bellevue"},"image":{"@id":"https:\/\/parcbellevue.com\/#\/schema\/logo\/image\/"}}]}},"_links":{"self":[{"href":"https:\/\/parcbellevue.com\/nl\/wp-json\/wp\/v2\/pages\/5422","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/parcbellevue.com\/nl\/wp-json\/wp\/v2\/pages"}],"about":[{"href":"https:\/\/parcbellevue.com\/nl\/wp-json\/wp\/v2\/types\/page"}],"author":[{"embeddable":true,"href":"https:\/\/parcbellevue.com\/nl\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/parcbellevue.com\/nl\/wp-json\/wp\/v2\/comments?post=5422"}],"version-history":[{"count":1,"href":"https:\/\/parcbellevue.com\/nl\/wp-json\/wp\/v2\/pages\/5422\/revisions"}],"predecessor-version":[{"id":5423,"href":"https:\/\/parcbellevue.com\/nl\/wp-json\/wp\/v2\/pages\/5422\/revisions\/5423"}],"wp:attachment":[{"href":"https:\/\/parcbellevue.com\/nl\/wp-json\/wp\/v2\/media?parent=5422"}],"wp:term":[{"taxonomy":"sujet","embeddable":true,"href":"https:\/\/parcbellevue.com\/nl\/wp-json\/wp\/v2\/sujet?post=5422"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}