{"id":47493,"date":"2026-10-15T14:43:19","date_gmt":"2026-10-15T12:43:19","guid":{"rendered":"https:\/\/www.lespialades.com\/elaia-animations-2\/"},"modified":"2026-10-20T12:13:48","modified_gmt":"2026-10-20T10:13:48","slug":"elaia-animations","status":"publish","type":"page","link":"https:\/\/www.lespialades.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> 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. Sans bandeau (R\u00e9glages > Elaia) : titre et introduction aux couleurs du th\u00e8me -->\n  <div class=\"ea-intro\">\n    <h1 class=\"ea-intro-title\">Animatie &amp; evenementen<\/h1>\n    <p class=\"ea-intro-text\">Alle activiteiten van het moment, de hoogtepunten van de week en komende evenementen tijdens uw verblijf.<\/p>\n  <\/div>\n\n  <!-- 2. Navigation rapide (collante) + filtre sur place \/ aux alentours -->\n  <nav class=\"ea-nav\" aria-label=\"Pagina-onderdelen\">\n    <div class=\"ea-nav-inner\">\n      <div class=\"ea-nav-links\">\n        <a href=\"#ea-sec-today\" aria-current=\"true\"><span class=\"ea-icon\" aria-hidden=\"true\"><svg viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\"><circle cx=\"12\" cy=\"12\" r=\"4\"\/><path d=\"M12 2v2M12 20v2M4.9 4.9l1.4 1.4M17.7 17.7l1.4 1.4M2 12h2M20 12h2M4.9 19.1l1.4-1.4M17.7 6.3l1.4-1.4\"\/><\/svg><\/span>Vandaag<\/a>\n        <a href=\"#ea-sec-week\"><span class=\"ea-icon\" aria-hidden=\"true\"><svg viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\"><rect x=\"3\" y=\"5\" width=\"18\" height=\"16\" rx=\"2\"\/><path d=\"M16 3v4M8 3v4M3 10h18\"\/><\/svg><\/span>Deze week<\/a>\n        <a href=\"#ea-sec-upcoming\"><span class=\"ea-icon\" aria-hidden=\"true\"><svg viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\"><circle cx=\"12\" cy=\"12\" r=\"9\"\/><path d=\"M12 7v5l3 2\"\/><\/svg><\/span>Binnenkort<\/a>\n              <\/div>\n              <span class=\"ea-nav-sep\" aria-hidden=\"true\"><\/span>\n        <div class=\"ea-scope\" role=\"group\" aria-label=\"Waar?\">\n          <button type=\"button\" data-scope=\"all\" aria-pressed=\"true\">Alles<\/button>\n                    <button type=\"button\" data-scope=\"onsite\" aria-pressed=\"false\" disabled title=\"Momenteel geen activiteit ter plaatse\">Ter plaatse<\/button>\n          <button type=\"button\" data-scope=\"nearby\" aria-pressed=\"false\">In de buurt<\/button>\n        <\/div>\n          <\/div>\n  <\/nav>\n\n  <!-- 3 \u2192 6. Sections (rendues en JS) -->\n  <section class=\"ea-section\" id=\"ea-sec-today\" aria-labelledby=\"ea-today-title\"><\/section>\n  <section class=\"ea-section\" id=\"ea-sec-week\" aria-labelledby=\"ea-week-title\"><\/section>\n  <section class=\"ea-section\" id=\"ea-sec-upcoming\" aria-labelledby=\"ea-upcoming-title\"><\/section>\n  \n  <noscript>\n    <ul>\n              <li><strong>Tentoonstelling - Toekomst van het Verleden<\/strong> \u2014 Du 12\/06\/2026 au 31\/01\/2028 \u00e0 23:59 \u2014 24620 Les Eyzies<\/li>\n              <li><strong>Tentoonstelling: &quot;Het hof der verhalen&quot; in de Bibliotheek van Duravel<\/strong> \u2014 Du 26\/10\/2026 \u00e0 09:00 au 06\/12\/2026 \u00e0 23:59 \u2014 46700 Duravel<\/li>\n              <li><strong>Markt in Duravel<\/strong> \u2014 Du 14\/11\/2026 \u00e0 09:00 au 14\/11\/2026 \u00e0 23:59 \u2014 46700 Duravel<\/li>\n              <li><strong>Concert klassieke muziek<\/strong> \u2014 Du 14\/11\/2026 \u00e0 18:30 au 14\/11\/2026 \u00e0 23:59 \u2014 46140 Luzech<\/li>\n              <li><strong>Grote loterij van de brandweer<\/strong> \u2014 Du 14\/11\/2026 \u00e0 19:00 au 14\/11\/2026 \u00e0 23:59 \u2014 24120 Terrasson-Lavilledieu<\/li>\n              <li><strong>Techn&#039;\u00d4 Chai<\/strong> \u2014 Du 14\/11\/2026 \u00e0 19:30 au 14\/11\/2026 \u00e0 23:59 \u2014 46140 Parnac<\/li>\n              <li><strong>Feest van de boom en de tuin<\/strong> \u2014 Du 15\/11\/2026 \u00e0 09:00 au 15\/11\/2026 \u00e0 23:59 \u2014 24540 Monpazier<\/li>\n              <li><strong>Speelgoedbeurs in Martel<\/strong> \u2014 Du 15\/11\/2026 \u00e0 09:00 au 15\/11\/2026 \u00e0 23:59 \u2014 24290 Martel<\/li>\n              <li><strong>Overtollige planten<\/strong> \u2014 Du 15\/11\/2026 \u00e0 10:00 au 15\/11\/2026 \u00e0 23:59 \u2014 24580 Plazac<\/li>\n              <li><strong>Cultureel Centrum: The Wackids<\/strong> \u2014 Du 15\/11\/2026 \u00e0 16:00 au 15\/11\/2026 \u00e0 23:59 \u2014 24200 Sarlat-la-Can\u00e9da<\/li>\n              <li><strong>Concert van Olivier Pons en Helen Lind\u00e9n<\/strong> \u2014 Du 15\/11\/2026 \u00e0 17:00 au 15\/11\/2026 \u00e0 23:59 \u2014 46250 Cazals<\/li>\n              <li><strong>Markt in Saint-Clair<\/strong> \u2014 Du 17\/11\/2026 \u00e0 17:00 au 17\/11\/2026 \u00e0 23:59 \u2014 46300 Saint-Clair<\/li>\n              <li><strong>Schrijfworkshop<\/strong> \u2014 Du 20\/11\/2026 \u00e0 15:00 au 20\/11\/2026 \u00e0 23:59 \u2014 24540 Monpazier<\/li>\n              <li><strong>Speelgoedbeurs in Martel<\/strong> \u2014 Du 21\/11\/2026 \u00e0 09:00 au 22\/11\/2026 \u00e0 23:59 \u2014 46600 Martel<\/li>\n              <li><strong>Ouderschapsworkshop \u2013 Ontdekking van circuskunsten<\/strong> \u2014 Du 21\/11\/2026 \u00e0 10:00 au 21\/11\/2026 \u00e0 23:59 \u2014 24200 Carsac-Aillac<\/li>\n              <li><strong>Maand van de documentairefilm: de epische reis van een egel<\/strong> \u2014 Du 21\/11\/2026 \u00e0 15:00 au 21\/11\/2026 \u00e0 23:59 \u2014 46000 Cahors<\/li>\n              <li><strong>Kinderrommelmarkt (0-16 jaar) Le Bugue<\/strong> \u2014 Du 22\/11\/2026 \u00e0 09:00 au 22\/11\/2026 \u00e0 23:59 \u2014 24260 Le Bugue<\/li>\n              <li><strong>Kerstmarkt in Audrix<\/strong> \u2014 Du 22\/11\/2026 \u00e0 10:00 au 22\/11\/2026 \u00e0 23:59 \u2014 24260 Audrix<\/li>\n              <li><strong>Veemarkt van B\u00e9laye<\/strong> \u2014 Du 22\/11\/2026 \u00e0 10:00 au 22\/11\/2026 \u00e0 23:59 \u2014 46140 B\u00e9laye<\/li>\n              <li><strong>Concert van Isabelle Aubret &quot;Je kunt een vogel niet beletten te zingen&quot; in het cultureel centrum Jean Carmet<\/strong> \u2014 Du 22\/11\/2026 \u00e0 15:00 au 22\/11\/2026 \u00e0 23:59 \u2014 46300 Le Vigan<\/li>\n              <li><strong>Arcades Musiques | Concert van het strijkkwartet LUDWIG<\/strong> \u2014 Du 22\/11\/2026 \u00e0 15:30 au 22\/11\/2026 \u00e0 23:59 \u2014 24480 Le Buisson-de-Cadouin<\/li>\n              <li><strong>documenTerre Filmfestival - Filmdebat &quot;Het wonderlijke verhaal van de vogels: dinosaurussen onder ons&quot;<\/strong> \u2014 Du 26\/11\/2026 \u00e0 21:00 au 26\/11\/2026 \u00e0 23:59 \u2014 24290 Montignac-Lascaux<\/li>\n              <li><strong>Kookworkshop van CIAS PN<\/strong> \u2014 Du 27\/11\/2026 au 27\/11\/2026 \u00e0 23:59 \u2014 24200 Sarlat-la-Can\u00e9da<\/li>\n              <li><strong>documenTerre Filmfestival - Tentoonstelling &quot;De vogels&quot; van tekenaar Troubs<\/strong> \u2014 Du 27\/11\/2026 \u00e0 18:00 au 27\/11\/2026 \u00e0 23:59 \u2014 24290 Montignac-Lascaux<\/li>\n              <li><strong>Openingsavond van het filmfestival documenTerre - Filmgesprek &quot;De mysterieuze reis van kustvogels&quot;<\/strong> \u2014 Du 27\/11\/2026 \u00e0 20:30 au 27\/11\/2026 \u00e0 23:59 \u2014 24290 Montignac-Lascaux<\/li>\n              <li><strong>Concert van DJ Slin<\/strong> \u2014 Du 27\/11\/2026 \u00e0 21:00 au 27\/11\/2026 \u00e0 23:59 \u2014 24260 Le Bugue<\/li>\n              <li><strong>Kerstmarkt in Lanzac<\/strong> \u2014 Du 28\/11\/2026 \u00e0 10:00 au 28\/11\/2026 \u00e0 23:59 \u2014 46200 Lanzac<\/li>\n              <li><strong>Kerstmarkt in Saint-Laurent-la-Vall\u00e9e<\/strong> \u2014 Du 28\/11\/2026 \u00e0 10:00 au 29\/11\/2026 \u00e0 23:59 \u2014 24170 Saint-Laurent-la-Vall\u00e9e<\/li>\n              <li><strong>Boekenbeurs: &quot;Plumes d&#039;ici&quot;<\/strong> \u2014 Du 28\/11\/2026 \u00e0 10:30 au 28\/11\/2026 \u00e0 23:59 \u2014 46140 Luzech<\/li>\n              <li><strong>documenTerre Filmfestival - Filmgesprek &quot;Vogeltaal&quot;<\/strong> \u2014 Du 28\/11\/2026 \u00e0 10:30 au 28\/11\/2026 \u00e0 23:59 \u2014 24290 Montignac-Lascaux<\/li>\n              <li><strong>Manu Lanvin in concert<\/strong> \u2014 Du 28\/11\/2026 \u00e0 20:30 au 28\/11\/2026 \u00e0 23:59 \u2014 46090 Pradines<\/li>\n              <li><strong>Betoverde kerstfestiviteiten bij Ch\u00e2teau de Lantis<\/strong> \u2014 Du 29\/11\/2026 \u00e0 14:00 au 29\/11\/2026 \u00e0 23:59 \u2014 46340 D\u00e9gagnac<\/li>\n              <li><strong>DocumenTerre Filmfestival - Filmdebat &quot;Stofjes van sterren&quot;<\/strong> \u2014 Du 29\/11\/2026 \u00e0 17:00 au 29\/11\/2026 \u00e0 23:59 \u2014 24290 Montignac-Lascaux<\/li>\n              <li><strong>Kerstmarkt en ijsbaan<\/strong> \u2014 Du 02\/12\/2026 au 31\/12\/2026 \u00e0 23:59 \u2014 24200 Sarlat-la-Can\u00e9da<\/li>\n              <li><strong>Kerstmuziekmarkt in Concor\u00e8s<\/strong> \u2014 Du 05\/12\/2026 \u00e0 17:00 au 05\/12\/2026 \u00e0 23:59 \u2014 46310 Concor\u00e8s<\/li>\n              <li><strong>Loto<\/strong> \u2014 Du 05\/12\/2026 \u00e0 20:00 au 05\/12\/2026 \u00e0 23:59 \u2014 46300 Gourdon<\/li>\n              <li><strong>Telethon - Dansdiner in Aubas<\/strong> \u2014 Du 05\/12\/2026 \u00e0 20:00 au 05\/12\/2026 \u00e0 23:59 \u2014 24290 Aubas<\/li>\n              <li><strong>Kerstmarkt in Crayssac<\/strong> \u2014 Du 06\/12\/2026 \u00e0 09:30 au 06\/12\/2026 \u00e0 23:59 \u2014 46150 Crayssac<\/li>\n              <li><strong>Kerstmarkt<\/strong> \u2014 Du 06\/12\/2026 \u00e0 10:00 au 06\/12\/2026 \u00e0 23:59 \u2014 24480 Moli\u00e8res<\/li>\n              <li><strong>Concert - Nicolas Lestoquoy, S\u00e9bastien Llinares, Maitane Seb [S\u00e9choir d&#039;Aillac]<\/strong> \u2014 Du 06\/12\/2026 \u00e0 15:30 au 06\/12\/2026 \u00e0 23:59 \u2014 24200 Carsac-Aillac<\/li>\n              <li><strong>Kerstmarkt van ambachtelijke makers<\/strong> \u2014 Du 11\/12\/2026 \u00e0 10:00 au 13\/12\/2026 \u00e0 23:59 \u2014 46220 Prayssac<\/li>\n              <li><strong>Voorstelling: &quot;Feuilles (Escapades)&quot;, Compagnie KD Danse<\/strong> \u2014 Du 11\/12\/2026 \u00e0 18:00 au 11\/12\/2026 \u00e0 23:59 \u2014 46000 Cahors<\/li>\n              <li><strong>Micro-Folie - Een uitzonderlijke avond rond opera<\/strong> \u2014 Du 11\/12\/2026 \u00e0 20:00 au 11\/12\/2026 \u00e0 23:59 \u2014 46500 Gramat<\/li>\n              <li><strong>Kerst in het Grand Couvent de Gramat<\/strong> \u2014 Du 12\/12\/2026 au 13\/12\/2026 \u00e0 23:59 \u2014 46500 Gramat<\/li>\n              <li><strong>18e truffelbeurs van Cuzance<\/strong> \u2014 Du 12\/12\/2026 \u00e0 08:30 au 12\/12\/2026 \u00e0 23:59 \u2014 46600 Cuzance<\/li>\n              <li><strong>Kerst in Martel<\/strong> \u2014 Du 12\/12\/2026 \u00e0 10:00 au 03\/01\/2027 \u00e0 23:59 \u2014 46600 Martel<\/li>\n              <li><strong>Kerstmarkt<\/strong> \u2014 Du 12\/12\/2026 \u00e0 14:00 au 12\/12\/2026 \u00e0 23:59 \u2014 24540 Monpazier<\/li>\n              <li><strong>Kerstmarkt in Castelfranc<\/strong> \u2014 Du 13\/12\/2026 \u00e0 09:00 au 13\/12\/2026 \u00e0 23:59 \u2014 46140 Castelfranc<\/li>\n              <li><strong>Kerstmarkt in Cazals<\/strong> \u2014 Du 13\/12\/2026 \u00e0 10:00 au 13\/12\/2026 \u00e0 23:59 \u2014 46250 Cazals<\/li>\n              <li><strong>Kerstmarkt van Prayssac<\/strong> \u2014 Du 18\/12\/2026 \u00e0 17:00 au 18\/12\/2026 \u00e0 23:59 \u2014 46220 Prayssac<\/li>\n              <li><strong>Kerstfeest in Souillac<\/strong> \u2014 Du 19\/12\/2026 \u00e0 17:00 au 19\/12\/2026 \u00e0 23:59 \u2014 46200 Souillac<\/li>\n              <li><strong>Kerstrommelmarkt<\/strong> \u2014 Du 20\/12\/2026 \u00e0 08:00 au 20\/12\/2026 \u00e0 23:59 \u2014 46700 Puy-l&#039;\u00c9v\u00eaque<\/li>\n              <li><strong>Kerstbingo van het feestcomit\u00e9 van Costeraste<\/strong> \u2014 Du 20\/12\/2026 \u00e0 14:30 au 20\/12\/2026 \u00e0 23:59 \u2014 46300 Payrignac<\/li>\n              <li><strong>De Galactische Goochelaar [S\u00e9choir d&#039;Aillac]<\/strong> \u2014 Du 20\/12\/2026 \u00e0 16:00 au 20\/12\/2026 \u00e0 23:59 \u2014 24200 Carsac-Aillac<\/li>\n              <li><strong>Bloemenworkshop - Feestelijk tafelstuk<\/strong> \u2014 Du 23\/12\/2026 \u00e0 16:00 au 23\/12\/2026 \u00e0 23:59 \u2014 24260 Le Bugue<\/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\":56,\"name\":\"Tentoonstelling - Toekomst van het Verleden\",\"type\":\"evenements-locaux-341\",\"category\":\"tentoonstellingen\",\"label\":\"Du 12\\\/06\\\/2026 au 31\\\/01\\\/2028 \\u00e0 23:59\",\"start\":\"2026-06-12\",\"end\":\"2028-01-31\",\"start_time\":\"\",\"end_time\":\"\",\"open_start\":false,\"city\":\"24620 Les Eyzies\",\"onsite\":false,\"spot\":\"\",\"registration\":false,\"description\":\"Archeologische schatten van de 21e eeuw na Christus.\\nWat zal er over 2000 jaar van ons overblijven?\\nWat zullen archeologen begrijpen over onze samenleving en levensstijl?\",\"image\":\"https:\\\/\\\/cdt24.media.tourinsoft.eu\\\/upload\\\/12062026-expo-Futur-anterieur-PIP.jpg\",\"credit\":\"PIP, By-NC-ND 4.0\",\"link\":\"\"},{\"id\":53,\"name\":\"Tentoonstelling: \\\"Het hof der verhalen\\\" in de Bibliotheek van Duravel\",\"type\":\"evenements-locaux-341\",\"category\":\"met-het-gezin\",\"label\":\"Du 26\\\/10\\\/2026 \\u00e0 09:00 au 06\\\/12\\\/2026 \\u00e0 23:59\",\"start\":\"2026-10-26\",\"end\":\"2026-12-06\",\"start_time\":\"09:00\",\"end_time\":\"\",\"open_start\":false,\"city\":\"46700 Duravel\",\"onsite\":false,\"spot\":\"\",\"registration\":false,\"description\":\"Interactieve detective-tentoonstelling vanaf 7 jaar.\",\"image\":\"https:\\\/\\\/cdt46.media.tourinsoft.eu\\\/upload\\\/affiche-cour-des-contes.png\",\"credit\":\"\\u00a9dominique nachtergaele\",\"link\":\"\"},{\"id\":18,\"name\":\"Markt in Saint-Germain-du-Bel-Air\",\"type\":\"evenements-locaux-341\",\"category\":\"markten-beurzen\",\"label\":\"Du 13\\\/11\\\/2026 \\u00e0 08:00 au 13\\\/11\\\/2026 \\u00e0 23:59\",\"start\":\"2026-11-13\",\"end\":\"2026-11-13\",\"start_time\":\"08:00\",\"end_time\":\"\",\"open_start\":false,\"city\":\"46300 Saint-Germain-du-Bel-Air\",\"onsite\":false,\"spot\":\"\",\"registration\":false,\"description\":\"De vrijdagafspraak om uw kleine gerechtjes voor het begin van het weekend te bereiden met verse, seizoensgebonden producten.\",\"image\":\"https:\\\/\\\/cdt46.media.tourinsoft.eu\\\/upload\\\/Marche--de-Saint-Germain-du-Bel-Air.jpg\",\"credit\":\"\\u00a9 Michel Sirot\",\"link\":\"\"},{\"id\":43,\"name\":\"Markt van Saint Cirq Souillaguet\",\"type\":\"evenements-locaux-341\",\"category\":\"markten-beurzen\",\"label\":\"Du 13\\\/11\\\/2026 \\u00e0 17:00 au 13\\\/11\\\/2026 \\u00e0 23:59\",\"start\":\"2026-11-13\",\"end\":\"2026-11-13\",\"start_time\":\"17:00\",\"end_time\":\"\",\"open_start\":false,\"city\":\"46300 Saint-Cirq-Souillaguet\",\"onsite\":false,\"spot\":\"\",\"registration\":false,\"description\":\"Op deze kleine markt vindt u biologische groenten en fruit, brood...\",\"image\":\"https:\\\/\\\/cdt46.media.tourinsoft.eu\\\/upload\\\/Legumes---marche---Sven-Hilker-from-Pixabay.jpg\",\"credit\":\"\\u00a9 Sven Hilker from Pixabay\",\"link\":\"\"},{\"id\":51,\"name\":\"Markt in Duravel\",\"type\":\"evenements-locaux-341\",\"category\":\"markten-beurzen\",\"label\":\"Du 14\\\/11\\\/2026 \\u00e0 09:00 au 14\\\/11\\\/2026 \\u00e0 23:59\",\"start\":\"2026-11-14\",\"end\":\"2026-11-14\",\"start_time\":\"09:00\",\"end_time\":\"\",\"open_start\":false,\"city\":\"46700 Duravel\",\"onsite\":false,\"spot\":\"\",\"registration\":false,\"description\":\"Wekelijkse producentenmarkt, 2 tot 3 standhouders.\",\"image\":\"https:\\\/\\\/cdt46.media.tourinsoft.eu\\\/upload\\\/Marche-Duravel.png\",\"credit\":\"\\u00a9OT Lot-Vignoble\",\"link\":\"\"},{\"id\":52,\"name\":\"Concert klassieke muziek\",\"type\":\"evenements-locaux-341\",\"category\":\"concerten-muziek-festivals\",\"label\":\"Du 14\\\/11\\\/2026 \\u00e0 18:30 au 14\\\/11\\\/2026 \\u00e0 23:59\",\"start\":\"2026-11-14\",\"end\":\"2026-11-14\",\"start_time\":\"18:30\",\"end_time\":\"\",\"open_start\":false,\"city\":\"46140 Luzech\",\"onsite\":false,\"spot\":\"\",\"registration\":false,\"description\":\"De vereniging \\u00c9cho de la Luz sluit haar seizoen in schoonheid af met twee uitzonderlijke piano-evenementen. De vereniging \\u00c9cho de la Luz, onder artistieke leiding van pianist en klavecinist Alejandro C\\u00e9spedes Mart\\u00edn, nodigt het publiek uit om het einde van haar muzikale seizoen 2026 te vieren met twee concerten in de zaal Barry in Luzech. Voor deze twee afspraken laten de artiesten een uitzonderlijk instrument klinken: een \\u00c9rard-vleugelpiano uit 1920.\",\"image\":\"https:\\\/\\\/cdt46.media.tourinsoft.eu\\\/upload\\\/Photo-artiste-14-novembre---Miriam-Gomez-Moran.jpg\",\"credit\":\"\\u00a9Echo de la Luz\",\"link\":\"\"},{\"id\":31,\"name\":\"Grote loterij van de brandweer\",\"type\":\"evenements-locaux-341\",\"category\":\"lokale-activiteiten\",\"label\":\"Du 14\\\/11\\\/2026 \\u00e0 19:00 au 14\\\/11\\\/2026 \\u00e0 23:59\",\"start\":\"2026-11-14\",\"end\":\"2026-11-14\",\"start_time\":\"19:00\",\"end_time\":\"\",\"open_start\":false,\"city\":\"24120 Terrasson-Lavilledieu\",\"onsite\":false,\"spot\":\"\",\"registration\":false,\"description\":\"Op zaterdag 14 november nodigen de brandweerlieden van Terrasson-Lavilledieu u uit in de feestzaal voor een grote loterij in het teken van gezelligheid en solidariteit!\\nOp het programma: tal van cadeaus voor jong en oud, een tombola en een quine speciaal voor kinderen onder de 12 jaar.\\nDe deuren openen vanaf 19.00 uur om de deelnemers te ontvangen.\\nTer plaatse zijn ook een drankstand en een eetruimte voorzien, zodat u ten volle van de avond kunt genieten.\\nPrijzen: Volwassenen: \\u20ac10, kinderen onder 12 jaar: \\u20ac5\\nLet op: toegang uitsluitend op vertoon van een toegangskaart (1 kaart per persoon). Kaarten zijn verkrijgbaar bij Extra of Royal Kebab.\\nInlichtingen:  +33 6 52 63 28 99\",\"image\":\"https:\\\/\\\/cdt24.media.tourinsoft.eu\\\/upload\\\/IMG-1731-4.JPG\",\"credit\":\"otvpn, By-NC-ND 4.0\",\"link\":\"\"},{\"id\":42,\"name\":\"Techn'\\u00d4 Chai\",\"type\":\"evenements-locaux-341\",\"category\":\"concerten-muziek-festivals\",\"label\":\"Du 14\\\/11\\\/2026 \\u00e0 19:30 au 14\\\/11\\\/2026 \\u00e0 23:59\",\"start\":\"2026-11-14\",\"end\":\"2026-11-14\",\"start_time\":\"19:30\",\"end_time\":\"\",\"open_start\":false,\"city\":\"46140 Parnac\",\"onsite\":false,\"spot\":\"\",\"registration\":false,\"description\":\"TECHN\\u2019\\u00d4 CHAI keert terug voor een derde editie in Ch\\u00e2teau Saint-Sernin. Driemaal is scheepsrecht... en deze keer tilt TECHN\\u2019\\u00d4 CHAI het niveau nog verder op!Na twee eerste edities keert TECHN\\u2019\\u00d4 CHAI terug met een ambitieus programma en vier dj\\u2019s die klaarstaan om de muren van de kelder te laten trillen. Voor deze nieuwe editie verwelkomt Ch\\u00e2teau Saint-Sernin REN\\u2019ART, een onmisbare vereniging uit de elektronische scene, met Sara_Labb en Gounito, naast Collectif BPM, met Medusa en Raf.Op het programma: vier artiesten, vier werelden en dezelfde drang om het publiek te laten dansen. Tech house met trance- en groovy klanken, Italo-trance en hardgroove volgen elkaar gedurende de nacht op en zorgen voor een zich ontwikkelende muzikale ervaring, tussen sonore ontdekkingen en collectieve energie.\",\"image\":\"https:\\\/\\\/cdt46.media.tourinsoft.eu\\\/upload\\\/Affiche-Techn-O-Chai-page-0001.jpg\",\"credit\":\"\\u00a9Ch\\u00e2teau Saint Sernin\",\"link\":\"https:\\\/\\\/www.billetweb.fr\\\/techn-chai2\"},{\"id\":15,\"name\":\"Feest van de boom en de tuin\",\"type\":\"evenements-locaux-341\",\"category\":\"lokale-evenementen\",\"label\":\"Du 15\\\/11\\\/2026 \\u00e0 09:00 au 15\\\/11\\\/2026 \\u00e0 23:59\",\"start\":\"2026-11-15\",\"end\":\"2026-11-15\",\"start_time\":\"09:00\",\"end_time\":\"\",\"open_start\":false,\"city\":\"24540 Monpazier\",\"onsite\":false,\"spot\":\"\",\"registration\":false,\"description\":\"Verkoop van boompjes, demonstraties en educatieve activiteiten.\",\"image\":\"https:\\\/\\\/cdt24.media.tourinsoft.eu\\\/upload\\\/leonardoiheme-plant-4427146-1920.jpg\",\"credit\":\"@pixabay, By-NC-ND 4.0\",\"link\":\"\"},{\"id\":6,\"name\":\"Speelgoedbeurs in Martel\",\"type\":\"evenements-locaux-341\",\"category\":\"rommelmarkten-tweedehandsmarkten\",\"label\":\"Du 15\\\/11\\\/2026 \\u00e0 09:00 au 15\\\/11\\\/2026 \\u00e0 23:59\",\"start\":\"2026-11-15\",\"end\":\"2026-11-15\",\"start_time\":\"09:00\",\"end_time\":\"\",\"open_start\":false,\"city\":\"24290 Martel\",\"onsite\":false,\"spot\":\"\",\"registration\":false,\"description\":\"Georganiseerd door de oudervereniging ten voordele van de school van Coly Saint Amand.\\n\\nBar, eten en animatie voor jong en oud.\",\"image\":\"https:\\\/\\\/cdt24.media.tourinsoft.eu\\\/upload\\\/15112026-vide-ta-chambre-Coly-Saint-Amand.jpg\",\"credit\":\"\\u00c9cole Saint Amand de Coly, By-NC-ND 4.0\",\"link\":\"\"},{\"id\":24,\"name\":\"Overtollige planten\",\"type\":\"evenements-locaux-341\",\"category\":\"lokale-animaties\",\"label\":\"Du 15\\\/11\\\/2026 \\u00e0 10:00 au 15\\\/11\\\/2026 \\u00e0 23:59\",\"start\":\"2026-11-15\",\"end\":\"2026-11-15\",\"start_time\":\"10:00\",\"end_time\":\"\",\"open_start\":false,\"city\":\"24580 Plazac\",\"onsite\":false,\"spot\":\"\",\"registration\":false,\"description\":\"Kom uw planten, zaden, tuingereedschap en overschotten van de oogst delen en ruilen met plantenliefhebbers, \\nGezamenlijke picknick\",\"image\":\"https:\\\/\\\/cdt24.media.tourinsoft.eu\\\/upload\\\/francesco-gallarotti-Bfdia-aJOvI-unsplash-2.jpg\",\"credit\":\"Francesco Gallarotti d'Unssplash, By-NC-ND 4.0\",\"link\":\"\"},{\"id\":33,\"name\":\"Cultureel Centrum: The Wackids\",\"type\":\"evenements-locaux-341\",\"category\":\"concerten-muziek-festivals\",\"label\":\"Du 15\\\/11\\\/2026 \\u00e0 16:00 au 15\\\/11\\\/2026 \\u00e0 23:59\",\"start\":\"2026-11-15\",\"end\":\"2026-11-15\",\"start_time\":\"16:00\",\"end_time\":\"\",\"open_start\":false,\"city\":\"24200 Sarlat-la-Can\\u00e9da\",\"onsite\":false,\"spot\":\"\",\"registration\":false,\"description\":\"The Wackids is een rockband die de grootste hits van de jaren 2000 herwerkt met kinderinstrumenten, geluidsgadgets en muzikaal speelgoed.\\n\\nVan cultklassiekers tot onmisbare hits wordt elk nummer ingeleid met een anekdote. De artiesten trekken superheldenkostuums aan, in een cartoonachtige wereld, om een show te brengen die Rock'n'Toys, muzikale performance, eigenzinnige humor en een vleugje nostalgie combineert.\\n\\nThe Wackids nemen ons mee aan boord van hun ruimteschip Futur 2000 voor een intergalactische reis door de muzikale cultuur van de 21e eeuw.\\n\\nEen Rock'n'Toys-concert voor volwassenen waarvoor je de kinderen moet meebrengen.\",\"image\":\"https:\\\/\\\/cdt24.media.tourinsoft.eu\\\/upload\\\/The-Wackids.jpeg\",\"credit\":\"Centre Culturel de Sarlat, By-NC-ND 4.0\",\"link\":\"https:\\\/\\\/www.sarlat-centreculturel.fr\\\/evenement\\\/the-wackids\"},{\"id\":20,\"name\":\"Concert van Olivier Pons en Helen Lind\\u00e9n\",\"type\":\"evenements-locaux-341\",\"category\":\"concerten-muziek-festivals\",\"label\":\"Du 15\\\/11\\\/2026 \\u00e0 17:00 au 15\\\/11\\\/2026 \\u00e0 23:59\",\"start\":\"2026-11-15\",\"end\":\"2026-11-15\",\"start_time\":\"17:00\",\"end_time\":\"\",\"open_start\":false,\"city\":\"46250 Cazals\",\"onsite\":false,\"spot\":\"\",\"registration\":false,\"description\":\"De vereniging Musique en Bouriane nodigt u met plezier uit voor het concert van Olivier Pons, violist, en Helen Lind\\u00e9n, celliste, internationaal gerenommeerde musici.\",\"image\":\"https:\\\/\\\/cdt46.media.tourinsoft.eu\\\/upload\\\/Olivier-Pons--Helen-Linden.jpg\",\"credit\":\"Olivier-Pons--Helen-Linden\",\"link\":\"https:\\\/\\\/www.musique-en-bouriane.org\\\/\"},{\"id\":11,\"name\":\"Markt in Saint-Clair\",\"type\":\"evenements-locaux-341\",\"category\":\"markten-beurzen\",\"label\":\"Du 17\\\/11\\\/2026 \\u00e0 17:00 au 17\\\/11\\\/2026 \\u00e0 23:59\",\"start\":\"2026-11-17\",\"end\":\"2026-11-17\",\"start_time\":\"17:00\",\"end_time\":\"\",\"open_start\":false,\"city\":\"46300 Saint-Clair\",\"onsite\":false,\"spot\":\"\",\"registration\":false,\"description\":\"Fruit en groenten van korte keten, brood, seizoensproducten, pizzatruck,...\",\"image\":\"https:\\\/\\\/cdt46.media.tourinsoft.eu\\\/upload\\\/peter-wendt--r5KSMkyoSc-unsplash--1-.jpg\",\"credit\":\"\\u00a9Peter Wendt Unsplash LDD\",\"link\":\"\"},{\"id\":10,\"name\":\"Schrijfworkshop\",\"type\":\"evenements-locaux-341\",\"category\":\"lokale-animaties\",\"label\":\"Du 20\\\/11\\\/2026 \\u00e0 15:00 au 20\\\/11\\\/2026 \\u00e0 23:59\",\"start\":\"2026-11-20\",\"end\":\"2026-11-20\",\"start_time\":\"15:00\",\"end_time\":\"\",\"open_start\":false,\"city\":\"24540 Monpazier\",\"onsite\":false,\"spot\":\"\",\"registration\":false,\"description\":\"Kom uw schrijverskunst ontwikkelen en laat uw idee\\u00ebn de vrije loop tijdens deze gezellige workshop!\\n\\nInschrijving verplicht.\",\"image\":\"https:\\\/\\\/cdt24.media.tourinsoft.eu\\\/upload\\\/pexels-new-year-background-1850177-1920.jpg\",\"credit\":\"@pixabay, By-NC-ND 4.0\",\"link\":\"\"},{\"id\":2,\"name\":\"Speelgoedbeurs in Martel\",\"type\":\"evenements-locaux-341\",\"category\":\"rommelmarkten-tweedehandsmarkten\",\"label\":\"Du 21\\\/11\\\/2026 \\u00e0 09:00 au 22\\\/11\\\/2026 \\u00e0 23:59\",\"start\":\"2026-11-21\",\"end\":\"2026-11-22\",\"start_time\":\"09:00\",\"end_time\":\"\",\"open_start\":false,\"city\":\"46600 Martel\",\"onsite\":false,\"spot\":\"\",\"registration\":false,\"description\":\"De Vereniging voor Kinderen organiseert een beurs voor speelgoed, kinderkleding en babyartikelen (0-16 jaar). Ter plaatse: verkoop van zoete en hartige panini's, cr\\u00eapes en gebak, verkoop van kerstversiering, speldemonstraties, bar. Ten voordele van het jeugdhuis \\\"Les Lutins des 7 tours\\\"\",\"image\":\"https:\\\/\\\/cdt46.media.tourinsoft.eu\\\/upload\\\/anan-ahmed-HOTxUVWr3Vw-unsplash.jpg\",\"credit\":\"Anan Ahmed\",\"link\":\"\"},{\"id\":38,\"name\":\"Ouderschapsworkshop \\u2013 Ontdekking van circuskunsten\",\"type\":\"evenements-locaux-341\",\"category\":\"voor-gezinnen\",\"label\":\"Du 21\\\/11\\\/2026 \\u00e0 10:00 au 21\\\/11\\\/2026 \\u00e0 23:59\",\"start\":\"2026-11-21\",\"end\":\"2026-11-21\",\"start_time\":\"10:00\",\"end_time\":\"\",\"open_start\":false,\"city\":\"24200 Carsac-Aillac\",\"onsite\":false,\"spot\":\"\",\"registration\":false,\"description\":\"Kom een bijzonder moment delen met uw kind rond beweging, het lichaam en circuskunsten! \\nDeze gratis workshop voor ouders biedt een speelse kennismaking met acrobatiek, evenwicht en jongleren, die u samen in een gezellige sfeer kunt beleven. Er zijn twee sessies: zaterdag 7 november 2026 in de ALSH La Tribu in Saint-Geni\\u00e8s en zaterdag 21 november 2026 in de ALSH Saint-Rome in Carsac-Aillac. Van 10.00 tot 11.00 uur voor kinderen van 2 tot 5 jaar en van 11.00 tot 12.00 uur voor kinderen van 6 tot 10 jaar. \\n\\nGratis workshop na inschrijving. \\nInlichtingen: marine.jardel@paysdefenelon.fr of 06 10 91 02 09.\",\"image\":\"https:\\\/\\\/cdt24.media.tourinsoft.eu\\\/upload\\\/atelier-parentalite-.jpg\",\"credit\":\"atelier parentalit\\u00e9, By-NC-ND 4.0\",\"link\":\"\"},{\"id\":3,\"name\":\"Maand van de documentairefilm: de epische reis van een egel\",\"type\":\"evenements-locaux-341\",\"category\":\"concerten-muziek-festivals\",\"label\":\"Du 21\\\/11\\\/2026 \\u00e0 15:00 au 21\\\/11\\\/2026 \\u00e0 23:59\",\"start\":\"2026-11-21\",\"end\":\"2026-11-21\",\"start_time\":\"15:00\",\"end_time\":\"\",\"open_start\":false,\"city\":\"46000 Cahors\",\"onsite\":false,\"spot\":\"\",\"registration\":false,\"description\":\"DE EPISCHE REIS VAN EEN EGEL&nbsp;van Guillaume Poyet&nbsp;Frankrijk \\\/ 2020 \\\/ 50 minutenVandaag bedreigd met uitsterven, ondergaat dit kleine dier van meer dan 60 miljoen jaar oud een ware plattelandsvlucht. Gedwongen om zijn natuurlijke habitat te ontvluchten door onze intensieve landbouwmethoden, migreert de egel naar stedelijke groene ruimtes op zoek naar voedsel. Een roadmovie met een jonge vrouwtjesegel wiens aanpassingsvermogen voortdurend op de proef wordt gesteld. Via de lotgevallen van deze heldin biedt dit dierenverhaal een toegangspoort tot menselijke activiteiten die het milieu be\\u00efnvloeden en onze ecosystemen veranderen.Gevolgd door een ontmoeting met de Lot-delegatie van LPO Occitanie, een vereniging voor milieubescherming.\",\"image\":\"https:\\\/\\\/cdt46.media.tourinsoft.eu\\\/upload\\\/21-11Voyage-epique-du-herisson--Guillaume-Poyet-Camera-Lucida.jpg\",\"credit\":\"\\u00a9 Guillaume Poyet-Camera Lucida\",\"link\":\"https:\\\/\\\/mediatheque.grandcahors.fr\\\/\"},{\"id\":32,\"name\":\"Kinderrommelmarkt (0-16 jaar) Le Bugue\",\"type\":\"evenements-locaux-341\",\"category\":\"rommelmarkten-garageverkopen\",\"label\":\"Du 22\\\/11\\\/2026 \\u00e0 09:00 au 22\\\/11\\\/2026 \\u00e0 23:59\",\"start\":\"2026-11-22\",\"end\":\"2026-11-22\",\"start_time\":\"09:00\",\"end_time\":\"\",\"open_start\":false,\"city\":\"24260 Le Bugue\",\"onsite\":false,\"spot\":\"\",\"registration\":false,\"description\":\"Kinderrommelmarkt voor 0-16 jaar georganiseerd door de vereniging La Souris Jaune.\\n\\nDrankjes en eten ter plaatse\",\"image\":\"https:\\\/\\\/cdt24.media.tourinsoft.eu\\\/upload\\\/22112026-vide-grenier-Le-Bugue.jpg\",\"credit\":\"Association la Souris Jaune, By-NC-ND 4.0\",\"link\":\"\"},{\"id\":1,\"name\":\"Kerstmarkt in Audrix\",\"type\":\"evenements-locaux-341\",\"category\":\"markten-beurzen\",\"label\":\"Du 22\\\/11\\\/2026 \\u00e0 10:00 au 22\\\/11\\\/2026 \\u00e0 23:59\",\"start\":\"2026-11-22\",\"end\":\"2026-11-22\",\"start_time\":\"10:00\",\"end_time\":\"\",\"open_start\":false,\"city\":\"24260 Audrix\",\"onsite\":false,\"spot\":\"\",\"registration\":false,\"description\":\"Georganiseerd door het feestcomit\\u00e9 van Audrix.\\nTentoonstelling van een kerststal.\\nDrankgelegenheid\",\"image\":\"https:\\\/\\\/cdt24.media.tourinsoft.eu\\\/upload\\\/22112026-marche-de-noel-Audrix.jpg\",\"credit\":\"Comit\\u00e9 des f\\u00eates de Audrix, By-NC-ND 4.0\",\"link\":\"\"},{\"id\":37,\"name\":\"Veemarkt van B\\u00e9laye\",\"type\":\"evenements-locaux-341\",\"category\":\"markten-beurzen\",\"label\":\"Du 22\\\/11\\\/2026 \\u00e0 10:00 au 22\\\/11\\\/2026 \\u00e0 23:59\",\"start\":\"2026-11-22\",\"end\":\"2026-11-22\",\"start_time\":\"10:00\",\"end_time\":\"\",\"open_start\":false,\"city\":\"46140 B\\u00e9laye\",\"onsite\":false,\"spot\":\"\",\"registration\":false,\"description\":\"Het feestcomit\\u00e9 van B\\u00e9laye organiseert de veemarkt.\",\"image\":\"https:\\\/\\\/cdt46.media.tourinsoft.eu\\\/upload\\\/856934525-1416442723948243-3426814590733576931-n.jpg\",\"credit\":\"\\u00a9Comit\\u00e9desf\\u00eatesdeB\\u00e9laye\",\"link\":\"\"},{\"id\":46,\"name\":\"Concert van Isabelle Aubret \\\"Je kunt een vogel niet beletten te zingen\\\" in het cultureel centrum Jean Carmet\",\"type\":\"evenements-locaux-341\",\"category\":\"concerten-muziek-festivals\",\"label\":\"Du 22\\\/11\\\/2026 \\u00e0 15:00 au 22\\\/11\\\/2026 \\u00e0 23:59\",\"start\":\"2026-11-22\",\"end\":\"2026-11-22\",\"start_time\":\"15:00\",\"end_time\":\"\",\"open_start\":false,\"city\":\"46300 Le Vigan\",\"onsite\":false,\"spot\":\"\",\"registration\":false,\"description\":\"Isabelle Aubret keert terug op het podium om een nooit eerder vertoonde solovoorstelling te brengen:Een laatste voorstelling, geschreven en geregisseerd door de artieste zelf, waarin zij getuigt van de hoogtepunten uit haar artistieke carri\\u00e8re en uit haar familie- en persoonlijke leven, terwijl zij tijdens de voorstelling een selectie liederen uit haar repertoire vertolkt.\",\"image\":\"https:\\\/\\\/cdt46.media.tourinsoft.eu\\\/upload\\\/Musique-6.jpg\",\"credit\":\"\\u00a9musique\",\"link\":\"\"},{\"id\":0,\"name\":\"Arcades Musiques | Concert van het strijkkwartet LUDWIG\",\"type\":\"evenements-locaux-341\",\"category\":\"concerten-muziek-festivals\",\"label\":\"Du 22\\\/11\\\/2026 \\u00e0 15:30 au 22\\\/11\\\/2026 \\u00e0 23:59\",\"start\":\"2026-11-22\",\"end\":\"2026-11-22\",\"start_time\":\"15:30\",\"end_time\":\"\",\"open_start\":false,\"city\":\"24480 Le Buisson-de-Cadouin\",\"onsite\":false,\"spot\":\"\",\"registration\":false,\"description\":\"De vereniging Arcades Musiques biedt u het hele jaar door concerten met klassieke muziek aan. Op het programma vandaag: werken van Mozart en Schubert.\",\"image\":\"https:\\\/\\\/cdt24.media.tourinsoft.eu\\\/upload\\\/concert-de-musique-classique-arcades-musiques-6.png\",\"credit\":\"Arcades musiques, By-NC-ND 4.0\",\"link\":\"http:\\\/\\\/www.arcadesinfo.com\\\/\"},{\"id\":55,\"name\":\"documenTerre Filmfestival - Filmdebat \\\"Het wonderlijke verhaal van de vogels: dinosaurussen onder ons\\\"\",\"type\":\"evenements-locaux-341\",\"category\":\"concerten-muziek-festivals\",\"label\":\"Du 26\\\/11\\\/2026 \\u00e0 21:00 au 26\\\/11\\\/2026 \\u00e0 23:59\",\"start\":\"2026-11-26\",\"end\":\"2026-11-26\",\"start_time\":\"21:00\",\"end_time\":\"\",\"open_start\":false,\"city\":\"24290 Montignac-Lascaux\",\"onsite\":false,\"spot\":\"\",\"registration\":false,\"description\":\"Van ThomaCirotteau Frankrijk 2026. 90 min. OV. Productie Perene Media\\n\\nSYNOPSIS :\\nHet ongelooflijke verhaal van de vogels begon 220 miljoen jaar geleden, met het verschijnen van de eerste dinosauri\\u00ebrs, waarvan zij vandaag de dag de enige afstammelingen op de planeet zijn. Vogels zijn dus het levende bewijs dat de dinosauri\\u00ebrs niet zijn verdwenen! Er zijn twee keer zoveel vogelsoorten als zoogdiersoorten. Hoe kunnen we dan het succes van hun evolutie verklaren?\",\"image\":\"https:\\\/\\\/cdt24.media.tourinsoft.eu\\\/upload\\\/26112026-Festval-du-film-DocumenTerre-2.png\",\"credit\":\"Cin\\u00e9toile24, By-NC-ND 4.0\",\"link\":\"https:\\\/\\\/www.billetweb.fr\\\/festival-documenterre-2026\"},{\"id\":13,\"name\":\"Kookworkshop van CIAS PN\",\"type\":\"evenements-locaux-341\",\"category\":\"lokale-activiteiten\",\"label\":\"Du 27\\\/11\\\/2026 au 27\\\/11\\\/2026 \\u00e0 23:59\",\"start\":\"2026-11-27\",\"end\":\"2026-11-27\",\"start_time\":\"\",\"end_time\":\"\",\"open_start\":false,\"city\":\"24200 Sarlat-la-Can\\u00e9da\",\"onsite\":false,\"spot\":\"\",\"registration\":false,\"description\":\"Kookworkshops van CIAS: dit sociale project, gestart in 2018, brengt 10 bewoners \\u00e9\\u00e9n vrijdag per maand samen (9.30-13.30 uur) in Le Colombier. \\n\\nOnder begeleiding van een ESF-adviseur richten deze workshops zich op delen, gezondheid en besparen. In 2026 ligt de nadruk op lokaal en vegetarisch koken.\\n\\nKalender 2026:\\n\\n27\\\/02: Therapeutische voorlichting (H\\u00f4p. Sarlat)\\n27\\\/03: Recepten met voorraadkastproducten & tegen verspilling\\n24\\\/04: Therapeutische voorlichting (H\\u00f4p. Sarlat)\\n29\\\/05: Glutenvrij koken\\n26\\\/06: Therapeutische voorlichting (H\\u00f4p. Sarlat)\\n17\\\/07: Mexicaanse streetfood-picknick\\n28\\\/08: Kennismaken met rauwe keuken\\n25\\\/09: Op weg naar Itali\\u00eb\\n23\\\/10: Recepten uit de zee (algen)\\n27\\\/11: Therapeutische voorlichting (H\\u00f4p. Sarlat)\\n\\nGezamenlijke maaltijd en samen opruimen inbegrepen.\",\"image\":\"https:\\\/\\\/cdt24.media.tourinsoft.eu\\\/upload\\\/Atelier-Cuisine-46.jpg\",\"credit\":\"OT Sarlat, By-NC-ND 4.0\",\"link\":\"\"},{\"id\":7,\"name\":\"documenTerre Filmfestival - Tentoonstelling \\\"De vogels\\\" van tekenaar Troubs\",\"type\":\"evenements-locaux-341\",\"category\":\"concerten-muziek-festivals\",\"label\":\"Du 27\\\/11\\\/2026 \\u00e0 18:00 au 27\\\/11\\\/2026 \\u00e0 23:59\",\"start\":\"2026-11-27\",\"end\":\"2026-11-27\",\"start_time\":\"18:00\",\"end_time\":\"\",\"open_start\":false,\"city\":\"24290 Montignac-Lascaux\",\"onsite\":false,\"spot\":\"\",\"registration\":false,\"description\":\"Tekenaar Troubs publiceerde in 2022 bij Futuropolis de strip \\\"De vogels\\\".\\n\\nTroubs begint aan een filosofische en ecologische reis tussen de Dordogne en Beirut, en gaat in gesprek met tortelduiven en zangvogels die hem vertellen over de opwarming van de aarde. In Frankrijk verdwijnen de vogels uit onze plattelandstreken, terwijl in Libanon, ondanks oorlogen en verwoestingen, de natuur zich weet aan te passen en soms zelfs haar rechten terugverovert.\\n\\nTroubs zal zijn strip voorstellen tijdens de openingsavond van het festival.\\nHij zal enkele platen uit zijn strip tentoonstellen in zaal M3 en zal aanwezig zijn voor een signeersessie van zijn strip tijdens de cocktail van de openingsavond.\",\"image\":\"https:\\\/\\\/cdt24.media.tourinsoft.eu\\\/upload\\\/26112026-Festval-du-film-DocumenTerre-2.png\",\"credit\":\"Cin\\u00e9toile24, By-NC-ND 4.0\",\"link\":\"https:\\\/\\\/www.cinetoile24.fr\\\/festival\\\/festival-du-film-documenterre-2026\"},{\"id\":49,\"name\":\"Openingsavond van het filmfestival documenTerre - Filmgesprek \\\"De mysterieuze reis van kustvogels\\\"\",\"type\":\"evenements-locaux-341\",\"category\":\"concerten-muziek-festivals\",\"label\":\"Du 27\\\/11\\\/2026 \\u00e0 20:30 au 27\\\/11\\\/2026 \\u00e0 23:59\",\"start\":\"2026-11-27\",\"end\":\"2026-11-27\",\"start_time\":\"20:30\",\"end_time\":\"\",\"open_start\":false,\"city\":\"24290 Montignac-Lascaux\",\"onsite\":false,\"spot\":\"\",\"registration\":false,\"description\":\"Van Randall Wood. Australi\\u00eb 2022. 60 min. VF\\nZED PRODUCTIONS\\\/ ARTE\\nParc Prijs 2023 tijdens het 39e Festival van M\\u00e9nigoute\\n\\nSYNOPSIS:\\nAan de hand van adembenemende beelden volgt deze film gedurende een jaar de odyssee van drie vogelsoorten, die in staat zijn om negen dagen lang 80 km\\\/u te vliegen zonder te eten, samen met gepassioneerde ornithologen en wetenschappers die zich inzetten om hen te bestuderen en te beschermen. Er is een race tegen de klok begonnen om de geheimen van deze uitzonderlijke atleten te ontrafelen en hen van de ondergang te redden. Dit is een grote milieukwestie, want het voortbestaan van kustvogels, die afhankelijk zijn van kwetsbare ecosystemen, is essentieel voor de toekomst van de planeet.\\n\\nDebat, cocktail aan het einde van de avond rond de verkoop en signeersessie van de boeken van de sprekers\",\"image\":\"https:\\\/\\\/cdt24.media.tourinsoft.eu\\\/upload\\\/26112026-Festval-du-film-DocumenTerre-2.png\",\"credit\":\"Cin\\u00e9toile24, By-NC-ND 4.0\",\"link\":\"https:\\\/\\\/www.billetweb.fr\\\/festival-documenterre-2026\"},{\"id\":8,\"name\":\"Concert van DJ Slin\",\"type\":\"evenements-locaux-341\",\"category\":\"concerten-muziek-festivals\",\"label\":\"Du 27\\\/11\\\/2026 \\u00e0 21:00 au 27\\\/11\\\/2026 \\u00e0 23:59\",\"start\":\"2026-11-27\",\"end\":\"2026-11-27\",\"start_time\":\"21:00\",\"end_time\":\"\",\"open_start\":false,\"city\":\"24260 Le Bugue\",\"onsite\":false,\"spot\":\"\",\"registration\":false,\"description\":\"Slin is een 25-jarige dj uit de P\\u00e9rigord en maakt deel uit van het collectief Vizara.\\nHij interesseert zich voor alle stijlen en past zich in elke situatie aan uw wensen aan! Tussen house, trance, techno en acid, tussen pittige, groovy en melodieuze beats, kan hij net zo goed de sfeer opbouwen tijdens de warming-up als het publiek laten dansen bij de afsluiting.\\n\\nAl \\u10e0\\u10d0\\u10db\\u10d3\\u10d4\\u10dc\\u10d8\\u10db\\u10d4 jaar produceert, mixt en mastert hij ook sounds in uiteenlopende stijlen en BPM's, van tech-house tot acid techno, waarbij hij zich meestal amuseert met samples die min of meer bekend zijn bij het publiek.\",\"image\":\"https:\\\/\\\/cdt24.media.tourinsoft.eu\\\/upload\\\/marcela-laskoski-YrtFlrLo2DQ-unsplash-Marcela-Laskoski-sur-unsplash-2.jpg\",\"credit\":\"Marcela Laskoski sur unsplash, By-NC-ND 4.0\",\"link\":\"\"},{\"id\":44,\"name\":\"Kerstmarkt in Lanzac\",\"type\":\"evenements-locaux-341\",\"category\":\"markten-beurzen\",\"label\":\"Du 28\\\/11\\\/2026 \\u00e0 10:00 au 28\\\/11\\\/2026 \\u00e0 23:59\",\"start\":\"2026-11-28\",\"end\":\"2026-11-28\",\"start_time\":\"10:00\",\"end_time\":\"\",\"open_start\":false,\"city\":\"46200 Lanzac\",\"onsite\":false,\"spot\":\"\",\"registration\":false,\"description\":\"Kom een mooi moment delen in de magische kerstsfeer, voor het eerst in Lanzac! Slenter rond, ontdek en vind leuke idee\\u00ebn voor uw kerstcadeausGeorganiseerd door de vereniging Chorale Esperanza\",\"image\":\"https:\\\/\\\/cdt46.media.tourinsoft.eu\\\/upload\\\/juncala-christmas-market-7616575-1920.jpg\",\"credit\":\"Juncala de Pixabay\",\"link\":\"\"},{\"id\":19,\"name\":\"Kerstmarkt in Saint-Laurent-la-Vall\\u00e9e\",\"type\":\"evenements-locaux-341\",\"category\":\"markten-beurzen\",\"label\":\"Du 28\\\/11\\\/2026 \\u00e0 10:00 au 29\\\/11\\\/2026 \\u00e0 23:59\",\"start\":\"2026-11-28\",\"end\":\"2026-11-29\",\"start_time\":\"10:00\",\"end_time\":\"\",\"open_start\":false,\"city\":\"24170 Saint-Laurent-la-Vall\\u00e9e\",\"onsite\":false,\"spot\":\"\",\"registration\":false,\"description\":\"De vereniging ECLA nodigt u uit voor de 14e editie van haar kerstmarkt. \\nDeze vindt plaats over 2 dagen:\\n- zaterdag 28 november van 14.00 tot 18.00 uur\\n- zondag 29 november van 10.00 tot 18.00 uur\\nOp het programma: kunstenaars, ambachtslieden, makers en lokale producenten.\\nVeel animatie, aanwezigheid van de Kerstman, ponyritjes, ...\\nTer plaatse: gl\\u00fchwein, cr\\u00eapes, wafels.\",\"image\":\"https:\\\/\\\/cdt24.media.tourinsoft.eu\\\/upload\\\/lenahelfinger-christmas-6691610-640.jpg\",\"credit\":\"pixabay, By-NC-ND 4.0\",\"link\":\"\"},{\"id\":34,\"name\":\"Boekenbeurs: \\\"Plumes d'ici\\\"\",\"type\":\"evenements-locaux-341\",\"category\":\"markten-beurzen\",\"label\":\"Du 28\\\/11\\\/2026 \\u00e0 10:30 au 28\\\/11\\\/2026 \\u00e0 23:59\",\"start\":\"2026-11-28\",\"end\":\"2026-11-28\",\"start_time\":\"10:30\",\"end_time\":\"\",\"open_start\":false,\"city\":\"46140 Luzech\",\"onsite\":false,\"spot\":\"\",\"registration\":false,\"description\":\"De gemeente Luzech, de vereniging Lire \\u00e0 Luzech  en de boekhandel \\u00ab le bon Air est dans les livres\\u201d in Albas nodigen u uit voor de vijfde editie van de Boekenbeurs \\u00ab Plumes d\\u2019ici \\u00bb, op zaterdag 28 november van 10.30 tot 18.30 uur.Dit evenement brengt elk jaar auteurs en gepassioneerde lezers samen voor een warme dag in de mediatheek van Luzech en in de musea Armand Vir\\u00e9 &amp; Ichnospace.\",\"image\":\"https:\\\/\\\/cdt46.media.tourinsoft.eu\\\/upload\\\/AFFICHE-SALON-LIVRE-LUZECH-2026-WEB-V2-1280x768-1.jpg\",\"credit\":\"\\u00a9Lire\\u00e0Luzech\",\"link\":\"\"},{\"id\":5,\"name\":\"documenTerre Filmfestival - Filmgesprek \\\"Vogeltaal\\\"\",\"type\":\"evenements-locaux-341\",\"category\":\"concerten-muziek-festivals\",\"label\":\"Du 28\\\/11\\\/2026 \\u00e0 10:30 au 28\\\/11\\\/2026 \\u00e0 23:59\",\"start\":\"2026-11-28\",\"end\":\"2026-11-28\",\"start_time\":\"10:30\",\"end_time\":\"\",\"open_start\":false,\"city\":\"24290 Montignac-Lascaux\",\"onsite\":false,\"spot\":\"\",\"registration\":false,\"description\":\"Van Erik Bullot. Frankrijk 2022. 54 min. OV\\nPrijs voor immaterieel cultureel erfgoed op het festival Cin\\u00e9ma du r\\u00e9el in 2022.\\n \\nSYNOPSIS:\\nVerteld door een vrouwelijke verteller vanuit de toekomst, na de zesde uitsterving, verkent de film de kracht van vertaling, het verlangen naar communicatie tussen mensen en vogels en de pogingen om tot een mogelijke uitwisseling te komen. De film onderzoekt hoe ornithologen, maar ook dichters, kunstenaars en wetenschappers hebben geprobeerd het gezang van vogels te begrijpen, te interpreteren en te vertalen. Via deze verschillende vertaalhandelingen stelt de film subtiel de vraag naar de evolutie van onze ethische en filosofische relatie tot dieren.\\n\\nDebat met\\nVinciane DESPRET, filosoof, festivalmeter\\nFanny RYBAK, bioakoesticus en docent-onderzoeker aan het Instituut voor Neurowetenschappen van de Universit\\u00e9 Paris Saclay\",\"image\":\"https:\\\/\\\/cdt24.media.tourinsoft.eu\\\/upload\\\/26112026-Festval-du-film-DocumenTerre-2.png\",\"credit\":\"Cin\\u00e9toile24, By-NC-ND 4.0\",\"link\":\"https:\\\/\\\/www.billetweb.fr\\\/festival-documenterre-2026\"},{\"id\":27,\"name\":\"Manu Lanvin in concert\",\"type\":\"evenements-locaux-341\",\"category\":\"concerten-muziek-festivals\",\"label\":\"Du 28\\\/11\\\/2026 \\u00e0 20:30 au 28\\\/11\\\/2026 \\u00e0 23:59\",\"start\":\"2026-11-28\",\"end\":\"2026-11-28\",\"start_time\":\"20:30\",\"end_time\":\"\",\"open_start\":false,\"city\":\"46090 Pradines\",\"onsite\":false,\"spot\":\"\",\"registration\":false,\"description\":\"De zaal van La Prade in Pradines en de vereniging Lot of Good Day verwelkomen Manu Lanvin op zaterdag 28 november 2026 voor een avond in het teken van bluesrock.\",\"image\":\"https:\\\/\\\/cdt46.media.tourinsoft.eu\\\/upload\\\/content.png\",\"credit\":\"\\u00a9laprade\",\"link\":\"https:\\\/\\\/billetterie.festik.net\\\/lotofgoodday\\\/product\\\/manu-lanvin-en-concert\\\/\"},{\"id\":29,\"name\":\"Betoverde kerstfestiviteiten bij Ch\\u00e2teau de Lantis\",\"type\":\"evenements-locaux-341\",\"category\":\"markten-beurzen\",\"label\":\"Du 29\\\/11\\\/2026 \\u00e0 14:00 au 29\\\/11\\\/2026 \\u00e0 23:59\",\"start\":\"2026-11-29\",\"end\":\"2026-11-29\",\"start_time\":\"14:00\",\"end_time\":\"\",\"open_start\":false,\"city\":\"46340 D\\u00e9gagnac\",\"onsite\":false,\"spot\":\"\",\"registration\":false,\"description\":\"Kom de &quot;Kerst van de kleine elfjes&quot; ontdekken in Ch\\u00e2teau de Lantis, met een markt van ambacht uit de Quercy voor uw cadeaus, animatie voor jong en oud, kerstliederen... En als u braaf bent geweest, krijgt u zelfs bezoek van de Kerstman! Het kasteel is voor de gelegenheid volledig versierd en verlicht.\",\"image\":\"https:\\\/\\\/cdt46.media.tourinsoft.eu\\\/upload\\\/chateau-de-lantis-neige.jpg\",\"credit\":\"\\u00a9kikidi46\",\"link\":\"https:\\\/\\\/www.chateau-de-lantis.fr\\\/\"},{\"id\":39,\"name\":\"DocumenTerre Filmfestival - Filmdebat \\\"Stofjes van sterren\\\"\",\"type\":\"evenements-locaux-341\",\"category\":\"concerts-music-festivals\",\"label\":\"Du 29\\\/11\\\/2026 \\u00e0 17:00 au 29\\\/11\\\/2026 \\u00e0 23:59\",\"start\":\"2026-11-29\",\"end\":\"2026-11-29\",\"start_time\":\"17:00\",\"end_time\":\"\",\"open_start\":false,\"city\":\"24290 Montignac-Lascaux\",\"onsite\":false,\"spot\":\"\",\"registration\":false,\"description\":\"Van C\\u00e9cile Verstraeten. Frankrijk 2021. 75 min. Franse versie\\n\\nEen po\\u00ebtische en politieke documentaire die de samenlevingsvorm tussen vogels en mensen onderzoekt in de gevangenis, in het ziekenhuis en op het podium, via de sessies dierbemiddeling van Tristan Plot. Als vogelopvoeder geeft hij bemiddelingssessies in de gevangenis en in rusthuizen en cre\\u00ebert hij voorstellingen. Hij laat ons zien hoe de nabijheid van vogels en de uitwisseling met hen po\\u00ebzie brengen en onze percepties, ons gedrag en onze verhouding tot het leven zachtjes veranderen. Er ontstaan banden en ieders plaats onder de levende wezens wordt in vraag gesteld.\\n\\nReservering verplicht\",\"image\":\"https:\\\/\\\/cdt24.media.tourinsoft.eu\\\/upload\\\/Affiche-Des-poussieres-d-etoiles.jpg\",\"credit\":\"Cin\\u00e9toile24, By-NC-ND 4.0\",\"link\":\"https:\\\/\\\/www.billetweb.fr\\\/festival-documenterre-2026\"},{\"id\":4,\"name\":\"Kerstmarkt en ijsbaan\",\"type\":\"evenements-locaux-341\",\"category\":\"markten-beurzen\",\"label\":\"Du 02\\\/12\\\/2026 au 31\\\/12\\\/2026 \\u00e0 23:59\",\"start\":\"2026-12-02\",\"end\":\"2026-12-31\",\"start_time\":\"\",\"end_time\":\"\",\"open_start\":false,\"city\":\"24200 Sarlat-la-Can\\u00e9da\",\"onsite\":false,\"spot\":\"\",\"registration\":false,\"description\":\"De kerstmarkt van Sarlat verwelkomt u van 2 tot 31 december! Verlichting, versieringen, animatie, voorstellingen, markt en ijsbanen brengen de stad tot leven tijdens deze betoverende periode.\\n\\nHet kerstdorp zal de hele ruimte van de Grande Rigaudie innemen, met zijn 3 steegjes!\\nBezoekers, jong en oud, kunnen tal van cadeau-idee\\u00ebn vinden tussen de 70 chalets die dagelijks open zijn van 10.00 tot 20.00 uur en op vrijdag en zaterdag tot 22.00 uur.\\nIn een sfeer van kerstgeuren en -smaken bieden de standhouders ambachtelijke producten, decoratieartikelen, cadeau-idee\\u00ebn en lekkernijen aan om ter plaatse te proeven of mee te nemen.\\n\\nOnderaan de trappen, op Place du 14 Juillet, ontdekken bezoekers opnieuw een magisch kerstdecor: een dennenbos, het huis van de Kerstman, de brievenbus...\",\"image\":\"https:\\\/\\\/cdt24.media.tourinsoft.eu\\\/upload\\\/DAN-9537-3.jpg\",\"credit\":\"DAN COURTICE, By-NC-ND 4.0\",\"link\":\"http:\\\/\\\/www.sarlat-tourisme.com\\\/\"},{\"id\":12,\"name\":\"Kerstmuziekmarkt in Concor\\u00e8s\",\"type\":\"evenements-locaux-341\",\"category\":\"markten-beurzen\",\"label\":\"Du 05\\\/12\\\/2026 \\u00e0 17:00 au 05\\\/12\\\/2026 \\u00e0 23:59\",\"start\":\"2026-12-05\",\"end\":\"2026-12-05\",\"start_time\":\"17:00\",\"end_time\":\"\",\"open_start\":false,\"city\":\"46310 Concor\\u00e8s\",\"onsite\":false,\"spot\":\"\",\"registration\":false,\"description\":\"Alle magie van de kerstmarkten en de voorbereidingen voor de eindejaarsfeesten in Concor\\u00e8s. Deze 9e editie is met zorg samengesteld door de vrijwilligers van de vereniging Festi'C\\u00e9ou, helemaal voor u: aanwezigheid van de Kerstman, ontmoet uw lokale producenten en mooie creaties van Artisans d'art.... Laat u verleiden!\",\"image\":\"https:\\\/\\\/cdt46.media.tourinsoft.eu\\\/upload\\\/Noel---flocon---Gerd-Altmann-from-Pixabay.jpg\",\"credit\":\"\\u00a9 Gerd Altmann from Pixabay\",\"link\":\"\"},{\"id\":41,\"name\":\"Loto\",\"type\":\"evenements-locaux-341\",\"category\":\"lokale-activiteiten\",\"label\":\"Du 05\\\/12\\\/2026 \\u00e0 20:00 au 05\\\/12\\\/2026 \\u00e0 23:59\",\"start\":\"2026-12-05\",\"end\":\"2026-12-05\",\"start_time\":\"20:00\",\"end_time\":\"\",\"open_start\":false,\"city\":\"46300 Gourdon\",\"onsite\":false,\"spot\":\"\",\"registration\":false,\"description\":\"georganiseerd door de judoclub van Gourdon en het Paardensportcentrum van Roquemeyrine\",\"image\":\"https:\\\/\\\/cdt46.media.tourinsoft.eu\\\/upload\\\/russkoe-loto-2676332-1920-2-.jpg\",\"credit\":\"\\u00a9Romi_Lado de Pixabay LDD\",\"link\":\"\"},{\"id\":17,\"name\":\"Telethon - Dansdiner in Aubas\",\"type\":\"evenements-locaux-341\",\"category\":\"lokale-evenementen\",\"label\":\"Du 05\\\/12\\\/2026 \\u00e0 20:00 au 05\\\/12\\\/2026 \\u00e0 23:59\",\"start\":\"2026-12-05\",\"end\":\"2026-12-05\",\"start_time\":\"20:00\",\"end_time\":\"\",\"open_start\":false,\"city\":\"24290 Aubas\",\"onsite\":false,\"spot\":\"\",\"registration\":false,\"description\":\"Kom met velen de Telethon steunen.\\n\\nOp het menu:\\n- Aperitief\\n- Romige pompoensoep met rode linzen\\n- Vis in bladerdeeg\\n- Aubasiaanse couscous met kip\\n- Kaas\\n- Abrikozencakje, slagroomijs\\n- Koffie\\n\\nReserveren verplicht\",\"image\":\"https:\\\/\\\/cdt24.media.tourinsoft.eu\\\/upload\\\/05122026-Telethon-Repas-dansant-Aubas.jpg\",\"credit\":\"Aubas, By-NC-ND 4.0\",\"link\":\"\"},{\"id\":21,\"name\":\"Kerstmarkt in Crayssac\",\"type\":\"evenements-locaux-341\",\"category\":\"markten-beurzen\",\"label\":\"Du 06\\\/12\\\/2026 \\u00e0 09:30 au 06\\\/12\\\/2026 \\u00e0 23:59\",\"start\":\"2026-12-06\",\"end\":\"2026-12-06\",\"start_time\":\"09:30\",\"end_time\":\"\",\"open_start\":false,\"city\":\"46150 Crayssac\",\"onsite\":false,\"spot\":\"\",\"registration\":false,\"description\":\"De kerstmarkt van Crayssac wordt voorbereid en is op zoek naar standhouders, makers, ambachtslieden en producenten om hun creaties en producten te komen presenteren in een gezellige en feestelijke sfeer.Handwerk, originele creaties, decoraties, delicatessen, cadeau-idee\\u00ebn\\u2026 we willen bezoekers een gevarieerde en warme markt aanbieden\\u2026Door de vereniging Ecoute Joue Vis.\",\"image\":\"https:\\\/\\\/cdt46.media.tourinsoft.eu\\\/upload\\\/christmas-market-550323-1280-2.jpg\",\"credit\":\"\\u00a9garten-gg\",\"link\":\"\"},{\"id\":14,\"name\":\"Kerstmarkt\",\"type\":\"evenements-locaux-341\",\"category\":\"lokale-activiteiten\",\"label\":\"Du 06\\\/12\\\/2026 \\u00e0 10:00 au 06\\\/12\\\/2026 \\u00e0 23:59\",\"start\":\"2026-12-06\",\"end\":\"2026-12-06\",\"start_time\":\"10:00\",\"end_time\":\"\",\"open_start\":false,\"city\":\"24480 Moli\\u00e8res\",\"onsite\":false,\"spot\":\"\",\"registration\":false,\"description\":\"Kom de kerstmarkt van Moli\\u00e8res ontdekken!\\n\\nUw aanwezigheid draagt rechtstreeks bij aan het voortbestaan van de verenigingsschool van het dorp.\\nElk jaar biedt de kerstmarkt van Moli\\u00e8res meer dan twintig gevarieerde standhouders en geweldige animaties in het dorp voor het hele gezin.\\n\\nOp zoek naar standhouders \\\/ ambachtslieden binnen of buiten\",\"image\":\"https:\\\/\\\/cdt24.media.tourinsoft.eu\\\/upload\\\/marche-de-noel-molieres.jpg\",\"credit\":\"Ecole Associative les Petits Moli\\u00e8res, By-NC-ND 4.0\",\"link\":\"\"},{\"id\":36,\"name\":\"Concert - Nicolas Lestoquoy, S\\u00e9bastien Llinares, Maitane Seb [S\\u00e9choir d'Aillac]\",\"type\":\"evenements-locaux-341\",\"category\":\"concerten-muziek-festivals\",\"label\":\"Du 06\\\/12\\\/2026 \\u00e0 15:30 au 06\\\/12\\\/2026 \\u00e0 23:59\",\"start\":\"2026-12-06\",\"end\":\"2026-12-06\",\"start_time\":\"15:30\",\"end_time\":\"\",\"open_start\":false,\"city\":\"24200 Carsac-Aillac\",\"onsite\":false,\"spot\":\"\",\"registration\":false,\"description\":\"In het kader van Hors Saison Musicale vindt er uitzonderlijk in de kerk van Carsac-Aillac een concert plaats met Nicolas Lestoquoy en S\\u00e9bastien Llinares op gitaar, begeleid door Ma\\u00eftane Sebastian op cello. Een intieme muzikale ontmoeting in het hart van het erfgoed, om muziek op het platteland tot leven te brengen en een moment van samenzijn met de bewoners te cre\\u00ebren.\\n\\nZondag 6 december om 15.30 uur \\u2013 Gratis toegang.\",\"image\":\"https:\\\/\\\/cdt24.media.tourinsoft.eu\\\/upload\\\/Capture-d-ecran-2026-09-15-111857.png\",\"credit\":\"Concert carsac, By-NC-ND 4.0\",\"link\":\"https:\\\/\\\/www.vostickets.fr\\\/Billet\\\/FR\\\/representation-LE_SECHOIR_AILLAC-36112-0.wb?REFID=CmQFAAAAAAAAAAAAdQA\"},{\"id\":54,\"name\":\"Kerstmarkt van ambachtelijke makers\",\"type\":\"evenements-locaux-341\",\"category\":\"markten-beurzen\",\"label\":\"Du 11\\\/12\\\/2026 \\u00e0 10:00 au 13\\\/12\\\/2026 \\u00e0 23:59\",\"start\":\"2026-12-11\",\"end\":\"2026-12-13\",\"start_time\":\"10:00\",\"end_time\":\"\",\"open_start\":false,\"city\":\"46220 Prayssac\",\"onsite\":false,\"spot\":\"\",\"registration\":false,\"description\":\"De pottenbakster van Maison Rose nodigt u uit om haar kerstmarkt van ambachtelijke makers te ontdekken. Hout, leer, keramiek, planten, glas, schilderkunst, gravure... een tiental makers zullen aanwezig zijn.\",\"image\":\"https:\\\/\\\/cdt46.media.tourinsoft.eu\\\/upload\\\/Maison-rose-2026-A6-page-0001.jpg\",\"credit\":\"\\u00a9Manon Collot\",\"link\":\"\"},{\"id\":30,\"name\":\"Voorstelling: \\\"Feuilles (Escapades)\\\", Compagnie KD Danse\",\"type\":\"evenements-locaux-341\",\"category\":\"voor-het-hele-gezin\",\"label\":\"Du 11\\\/12\\\/2026 \\u00e0 18:00 au 11\\\/12\\\/2026 \\u00e0 23:59\",\"start\":\"2026-12-11\",\"end\":\"2026-12-11\",\"start_time\":\"18:00\",\"end_time\":\"\",\"open_start\":false,\"city\":\"46000 Cahors\",\"onsite\":false,\"spot\":\"\",\"registration\":false,\"description\":\"De verbeelding in beweging brengen met Mondriaan.De verbeelding prikkelen met een lichaam en abstracte vormen. Dat is de uitdaging van dit choreografische stuk, ge\\u00efnspireerd door de wereld van de Nederlandse schilder Piet Mondriaan.Van de vloer tot achteraan het podium doet het decor aan als een doek van de meester: een witte achtergrond doorkruist door zwarte orthogonale lijnen, waarop vormen in primaire kleuren zijn geplaatst of verborgen. Hier volgen we eenvoudigweg de danseres terwijl zij de voorwerpen en kleuren ontdekt. Het \\\"doek\\\" herbergt heel wat verrassingen en onthult geleidelijk een po\\u00ebtische wereld naarmate ze verschijnen en worden gehanteerd.Er is geen verhaal nodig om het kind de eenvoudige vormen en felle kleuren van deze abstracte wereld te laten toe-eigenen, waar alles draait om zuiverheid, contrast en harmonie. Bevrijd van de beperkingen van de weergave van de werkelijkheid kan de verbeelding zich daar vrij ontplooien, zonder opgelegde richting, en al haar rijkdom onthullen.Vanaf 4 jaarVoor deze voorstelling wordt een ouder-kindworkshop aangeboden, samen met de artiesten. Informatie en reservering op 05.65.20.88.60.\\u00a0\",\"image\":\"https:\\\/\\\/cdt46.media.tourinsoft.eu\\\/upload\\\/1434.gif\",\"credit\":\"\\u00a9Kddanse\",\"link\":\"https:\\\/\\\/indiv.themisweb.fr\\\/0060\\\/fChoixSeanceWidget.aspx?idstructure=0060&EventId=1434&request=QcE+w0WHSuDvpkhbpqIkkOwwvOmHMsuBPLtEklOMpUM8m8oahF0+N2NeZPFgM+emQFfPMQEDVr+dmhAUhOLhwQ==&tn=8861&quHash=fc\"},{\"id\":35,\"name\":\"Micro-Folie - Een uitzonderlijke avond rond opera\",\"type\":\"evenements-locaux-341\",\"category\":\"concerten-muziek-festivals\",\"label\":\"Du 11\\\/12\\\/2026 \\u00e0 20:00 au 11\\\/12\\\/2026 \\u00e0 23:59\",\"start\":\"2026-12-11\",\"end\":\"2026-12-11\",\"start_time\":\"20:00\",\"end_time\":\"\",\"open_start\":false,\"city\":\"46500 Gramat\",\"onsite\":false,\"spot\":\"\",\"registration\":false,\"description\":\"Plat\\u00e9e, meesterwerk van Jean-Philippe Rameau, combineert humor, dans en barokopera. Een exuberante en knotsgekke regie van Laurent Pelly. Onder leiding van Marc Minkowski, productie: Julie Fuchs en Lawrence Brownlee in een musicalkomedie die even briljant als burlesk is\",\"image\":\"https:\\\/\\\/cdt46.media.tourinsoft.eu\\\/upload\\\/MICRO-FOLIE-PROJECTION-OPERA.jpg\",\"credit\":\"Micro-folie\",\"link\":\"https:\\\/\\\/bibliotheque.gramat.fr\\\/microfolie\"},{\"id\":23,\"name\":\"Kerst in het Grand Couvent de Gramat\",\"type\":\"evenements-locaux-341\",\"category\":\"markten-beurzen\",\"label\":\"Du 12\\\/12\\\/2026 au 13\\\/12\\\/2026 \\u00e0 23:59\",\"start\":\"2026-12-12\",\"end\":\"2026-12-13\",\"start_time\":\"\",\"end_time\":\"\",\"open_start\":false,\"city\":\"46500 Gramat\",\"onsite\":false,\"spot\":\"\",\"registration\":false,\"description\":\"Grote markten met lokale ambachtslieden in de uitzonderlijke omgeving van het Grand Couvent de Gramat\",\"image\":\"https:\\\/\\\/cdt46.media.tourinsoft.eu\\\/upload\\\/Grand-Couvent-de-Gramat-Lot-Tourisme---C.-Novello-200206-174525.jpg\",\"credit\":\"Lot Tourisme - C. Novello\",\"link\":\"\"},{\"id\":48,\"name\":\"18e truffelbeurs van Cuzance\",\"type\":\"evenements-locaux-341\",\"category\":\"markten-beurzen\",\"label\":\"Du 12\\\/12\\\/2026 \\u00e0 08:30 au 12\\\/12\\\/2026 \\u00e0 23:59\",\"start\":\"2026-12-12\",\"end\":\"2026-12-12\",\"start_time\":\"08:30\",\"end_time\":\"\",\"open_start\":false,\"city\":\"46600 Cuzance\",\"onsite\":false,\"spot\":\"\",\"registration\":false,\"description\":\"De truffelbeurs van Cuzance viert de zwarte diamant van de gastronomie en zet de producenten en de vakkennis van de streek in de kijker. Het publiek ontdekt een truffelmarkt, vergezeld van een gastronomische markt, truffelspecialiteiten bereid door chef St\\u00e9phane Chambon en de leerlingen van de hotelschool van Souillac. Een demonstratie van truffelzoeken in de gemeentelijke truffelgaard, folkloristische animaties en koetsritten maken deze dag volledig gewijd aan truffels en lokale gastronomie compleet.\",\"image\":\"https:\\\/\\\/cdt46.media.tourinsoft.eu\\\/upload\\\/Cauvaldor-Cavage--MalikaTurin-7608.jpg-1200px.JPG\",\"credit\":\"MalikaTurin\",\"link\":\"\"},{\"id\":26,\"name\":\"Kerst in Martel\",\"type\":\"evenements-locaux-341\",\"category\":\"markten-beurzen\",\"label\":\"Du 12\\\/12\\\/2026 \\u00e0 10:00 au 03\\\/01\\\/2027 \\u00e0 23:59\",\"start\":\"2026-12-12\",\"end\":\"2027-01-03\",\"start_time\":\"10:00\",\"end_time\":\"\",\"open_start\":false,\"city\":\"46600 Martel\",\"onsite\":false,\"spot\":\"\",\"registration\":false,\"description\":\"Kerst in Martel vindt plaats van zaterdag 12 december tot zondag 3 januari 2027De ijsbaan onder de hal, de gastronomische hut en de draaimolen op cours des foss\\u00e9s, samen met de decoraties op place Henri ramet, brengen alle betovering van de eindejaarsfeesten\",\"image\":\"https:\\\/\\\/cdt46.media.tourinsoft.eu\\\/upload\\\/roberto-nickson-5PQn41LFsQk-unsplash.jpg\",\"credit\":\"Roberto Nickson\",\"link\":\"\"},{\"id\":9,\"name\":\"Kerstmarkt\",\"type\":\"evenements-locaux-341\",\"category\":\"markten-beurzen\",\"label\":\"Du 12\\\/12\\\/2026 \\u00e0 14:00 au 12\\\/12\\\/2026 \\u00e0 23:59\",\"start\":\"2026-12-12\",\"end\":\"2026-12-12\",\"start_time\":\"14:00\",\"end_time\":\"\",\"open_start\":false,\"city\":\"24540 Monpazier\",\"onsite\":false,\"spot\":\"\",\"registration\":false,\"description\":\"Kom genieten van de kerstmarkt van Monpazier tot 's avonds, met talrijke standhouders, ambachtslieden en verenigingen, en natuurlijk het grote vuurwerk om 21.30 uur!\",\"image\":\"https:\\\/\\\/cdt24.media.tourinsoft.eu\\\/upload\\\/Marche-de-noel-1-2-2.jpg\",\"credit\":\"@m\\u00e9diath\\u00e8que, By-NC-ND 4.0\",\"link\":\"\"},{\"id\":28,\"name\":\"Kerstmarkt in Castelfranc\",\"type\":\"evenements-locaux-341\",\"category\":\"markten-beurzen\",\"label\":\"Du 13\\\/12\\\/2026 \\u00e0 09:00 au 13\\\/12\\\/2026 \\u00e0 23:59\",\"start\":\"2026-12-13\",\"end\":\"2026-12-13\",\"start_time\":\"09:00\",\"end_time\":\"\",\"open_start\":false,\"city\":\"46140 Castelfranc\",\"onsite\":false,\"spot\":\"\",\"registration\":false,\"description\":\"Onder de markthal brengt de markt ambachtslieden, makers en producenten samen. De kerstboom op het centrale plein wordt verlicht. Er wordt een schminkstand voor kinderen aangeboden. De Kerstman komt hen ontmoeten, en een ritje met de koets wordt aangeboden door de Oudervereniging.\",\"image\":\"https:\\\/\\\/cdt46.media.tourinsoft.eu\\\/upload\\\/-RitaE-Pixabay-decorationsdenoel-5.jpg\",\"credit\":\"\\u00a9APE46140\",\"link\":\"\"},{\"id\":45,\"name\":\"Kerstmarkt in Cazals\",\"type\":\"evenements-locaux-341\",\"category\":\"markten-beurzen\",\"label\":\"Du 13\\\/12\\\/2026 \\u00e0 10:00 au 13\\\/12\\\/2026 \\u00e0 23:59\",\"start\":\"2026-12-13\",\"end\":\"2026-12-13\",\"start_time\":\"10:00\",\"end_time\":\"\",\"open_start\":false,\"city\":\"46250 Cazals\",\"onsite\":false,\"spot\":\"\",\"registration\":false,\"description\":\"Het is weer tijd voor de traditionele kerstmarkt. Kom langs de kraampjes slenteren, vind uw kerstcadeaus en geniet van traditionele kerstliederen.\",\"image\":\"https:\\\/\\\/cdt46.media.tourinsoft.eu\\\/upload\\\/deco-Noel-boule---Kerstin-Riemer-Pixabay.jpg\",\"credit\":\"\\u00a9 Kerstin Riemer_Pixabay\",\"link\":\"\"},{\"id\":16,\"name\":\"Kerstmarkt van Prayssac\",\"type\":\"evenements-locaux-341\",\"category\":\"markten-beurzen\",\"label\":\"Du 18\\\/12\\\/2026 \\u00e0 17:00 au 18\\\/12\\\/2026 \\u00e0 23:59\",\"start\":\"2026-12-18\",\"end\":\"2026-12-18\",\"start_time\":\"17:00\",\"end_time\":\"\",\"open_start\":false,\"city\":\"46220 Prayssac\",\"onsite\":false,\"spot\":\"\",\"registration\":false,\"description\":\"De kerstmarkt van de stad Prayssac staat gepland op 18 en 18 december op Place Dutours! Er zijn attracties, goochelaars, de Kerstman in een koets en nog veel meer...\",\"image\":\"https:\\\/\\\/cdt46.media.tourinsoft.eu\\\/upload\\\/th4djgyh24kj3g-i4k3l5u-3ho6p54-----omji3m.png\",\"credit\":\"\\u00a9Comit\\u00e9 des f\\u00eates de Prayssac\",\"link\":\"\"},{\"id\":25,\"name\":\"Kerstfeest in Souillac\",\"type\":\"evenements-locaux-341\",\"category\":\"lokale-animaties\",\"label\":\"Du 19\\\/12\\\/2026 \\u00e0 17:00 au 19\\\/12\\\/2026 \\u00e0 23:59\",\"start\":\"2026-12-19\",\"end\":\"2026-12-19\",\"start_time\":\"17:00\",\"end_time\":\"\",\"open_start\":false,\"city\":\"46200 Souillac\",\"onsite\":false,\"spot\":\"\",\"registration\":false,\"description\":\"Christmas Party, Souillac en Bodega nodigt u uit om Kerstmis te vieren, te genieten van een vieruurtje en een bezoek te brengen aan de Kerstman, gevolgd door een avond met wijn &amp; oesters met muziek van een dj.\",\"image\":\"https:\\\/\\\/cdt46.media.tourinsoft.eu\\\/upload\\\/Noel-Party.JPG\",\"credit\":\"Ville de Souillac\",\"link\":\"\"},{\"id\":40,\"name\":\"Kerstrommelmarkt\",\"type\":\"evenements-locaux-341\",\"category\":\"rommelmarkten-garageverkopen\",\"label\":\"Du 20\\\/12\\\/2026 \\u00e0 08:00 au 20\\\/12\\\/2026 \\u00e0 23:59\",\"start\":\"2026-12-20\",\"end\":\"2026-12-20\",\"start_time\":\"08:00\",\"end_time\":\"\",\"open_start\":false,\"city\":\"46700 Puy-l'\\u00c9v\\u00eaque\",\"onsite\":false,\"spot\":\"\",\"registration\":false,\"description\":\"Kom en vind leuke koopjes!\",\"image\":\"https:\\\/\\\/cdt46.media.tourinsoft.eu\\\/upload\\\/190508-Vide-grenier-a-Castelfranc--L.-Da-Ascencao---Office-de-Tourisme-Cahors---Vallee-du-Lot--44--2.jpg\",\"credit\":\"\\u00a9L. Da Ascen\\u00e7ao - Office de Tourisme Cahors - Vall\\u00e9e du Lot (44)\",\"link\":\"\"},{\"id\":47,\"name\":\"Kerstbingo van het feestcomit\\u00e9 van Costeraste\",\"type\":\"evenements-locaux-341\",\"category\":\"lokale-animatie\",\"label\":\"Du 20\\\/12\\\/2026 \\u00e0 14:30 au 20\\\/12\\\/2026 \\u00e0 23:59\",\"start\":\"2026-12-20\",\"end\":\"2026-12-20\",\"start_time\":\"14:30\",\"end_time\":\"\",\"open_start\":false,\"city\":\"46300 Payrignac\",\"onsite\":false,\"spot\":\"\",\"registration\":false,\"description\":\"Het feestcomit\\u00e9 van Costeraste nodigt u uit voor een gezellig moment: zijn jaarlijkse bingo.\",\"image\":\"https:\\\/\\\/cdt46.media.tourinsoft.eu\\\/upload\\\/loto-generique.jpg\",\"credit\":\"\\u00a9pixabay\",\"link\":\"\"},{\"id\":50,\"name\":\"De Galactische Goochelaar [S\\u00e9choir d'Aillac]\",\"type\":\"evenements-locaux-341\",\"category\":\"voor-het-hele-gezin\",\"label\":\"Du 20\\\/12\\\/2026 \\u00e0 16:00 au 20\\\/12\\\/2026 \\u00e0 23:59\",\"start\":\"2026-12-20\",\"end\":\"2026-12-20\",\"start_time\":\"16:00\",\"end_time\":\"\",\"open_start\":false,\"city\":\"24200 Carsac-Aillac\",\"onsite\":false,\"spot\":\"\",\"registration\":false,\"description\":\"Maak je klaar voor een magische reis met \\u00ab De Galactische Goochelaar \\u00bb van R\\u00e9my Marvely! Samen met Sana de goochelaar en zijn draak L\\u00e9onos ontdekken jong en oud illusies, zwevende voorwerpen en interactieve ervaringen in een grappige en fee\\u00ebrieke voorstelling voor het hele gezin. Na afloop van de voorstelling wordt een vieruurtje aangeboden.\\n\\nZondag 20 december om 16.00 uur \\u2013 Tarief: \\u20ac10 \\u2013 Gratis voor kinderen jonger dan 10 jaar.\",\"image\":\"https:\\\/\\\/cdt24.media.tourinsoft.eu\\\/upload\\\/Capture-d-ecran-2026-09-15-113827.png\",\"credit\":\"Magie carsac aillac, By-NC-ND 4.0\",\"link\":\"https:\\\/\\\/www.vostickets.fr\\\/Billet\\\/FR\\\/representation-LE_SECHOIR_AILLAC-36114-0.wb?REFID=FfcFAAAAAAAAAAAAVgA\"},{\"id\":22,\"name\":\"Bloemenworkshop - Feestelijk tafelstuk\",\"type\":\"evenements-locaux-341\",\"category\":\"lokale-animaties\",\"label\":\"Du 23\\\/12\\\/2026 \\u00e0 16:00 au 23\\\/12\\\/2026 \\u00e0 23:59\",\"start\":\"2026-12-23\",\"end\":\"2026-12-23\",\"start_time\":\"16:00\",\"end_time\":\"\",\"open_start\":false,\"city\":\"24260 Le Bugue\",\"onsite\":false,\"spot\":\"\",\"registration\":false,\"description\":\"Stel het bloemstuk samen dat uw feesttafel laat stralen.\\nToegankelijk voor kinderen vanaf 7 jaar\\n\\nMaterialen inbegrepen. Een smakelijke pauze aangeboden.\\nBeperkt aantal plaatsen. Reserveren verplicht\",\"image\":\"https:\\\/\\\/cdt24.media.tourinsoft.eu\\\/upload\\\/10102026-Affiche-ateliers-boutique-Florivore-Le-Bugue-2.png\",\"credit\":\"Florivore, By-NC-ND 4.0\",\"link\":\"\"}];\n    var CATEGORIES = {\"concerten-muziek-festivals\":{\"key\":\"concerten-muziek-festivals\",\"label\":\"Concerten, muziek & festivals\",\"color\":\"#ef4444\",\"count\":15},\"markten-beurzen\":{\"key\":\"markten-beurzen\",\"label\":\"Markten & beurzen\",\"color\":\"#3b82f6\",\"count\":21},\"rommelmarkten-tweedehandsmarkten\":{\"key\":\"rommelmarkten-tweedehandsmarkten\",\"label\":\"Rommelmarkten & tweedehandsmarkten\",\"color\":\"#10b981\",\"count\":2},\"lokale-animaties\":{\"key\":\"lokale-animaties\",\"label\":\"Lokale animaties\",\"color\":\"#f59e0b\",\"count\":4},\"lokale-activiteiten\":{\"key\":\"lokale-activiteiten\",\"label\":\"Lokale activiteiten\",\"color\":\"#a855f7\",\"count\":4},\"lokale-evenementen\":{\"key\":\"lokale-evenementen\",\"label\":\"Lokale evenementen\",\"color\":\"#0891b2\",\"count\":2},\"voor-het-hele-gezin\":{\"key\":\"voor-het-hele-gezin\",\"label\":\"Voor het hele gezin\",\"color\":\"#db2777\",\"count\":2},\"rommelmarkten-garageverkopen\":{\"key\":\"rommelmarkten-garageverkopen\",\"label\":\"Rommelmarkten & garageverkopen\",\"color\":\"#65a30d\",\"count\":2},\"voor-gezinnen\":{\"key\":\"voor-gezinnen\",\"label\":\"Voor gezinnen\",\"color\":\"#ea580c\",\"count\":1},\"concerts-music-festivals\":{\"key\":\"concerts-music-festivals\",\"label\":\"Concerts, music & festivals\",\"color\":\"#6366f1\",\"count\":1},\"lokale-animatie\":{\"key\":\"lokale-animatie\",\"label\":\"Lokale animatie\",\"color\":\"#ef4444\",\"count\":1},\"met-het-gezin\":{\"key\":\"met-het-gezin\",\"label\":\"Met het gezin\",\"color\":\"#3b82f6\",\"count\":1},\"tentoonstellingen\":{\"key\":\"tentoonstellingen\",\"label\":\"Tentoonstellingen\",\"color\":\"#10b981\",\"count\":1}};\n    var TODAY = \"2026-11-14\";\n    \/\/ Textes et format des dates dans la langue de la page (includes\/i18n.php)\n    var T = {\"blog_read_more\":\"Lees het artikel\",\"blog_empty\":\"Nog geen artikelen.\",\"blog_newer\":\"Nieuwere artikelen\",\"blog_older\":\"Oudere artikelen\",\"blog_label\":\"Artikelen\",\"hero_title\":\"Ontdek de omgeving\",\"hero_text\":\"Dorpen, stranden, wandelingen, goede adressen en belevenissen rond uw verblijf.\",\"around\":\"Rond\",\"search_placeholder\":\"Zoek een plek, een activiteit, een dorp\\u2026\",\"search\":\"Zoeken\",\"max_distance\":\"Maximale afstand\",\"all\":\"Alles\",\"prev_categories\":\"Vorige categorie\\u00ebn\",\"next_categories\":\"Volgende categorie\\u00ebn\",\"categories\":\"Categorie\\u00ebn\",\"display\":\"Weergave\",\"list\":\"Lijst\",\"map\":\"Kaart\",\"close\":\"Sluiten\",\"featured\":\"Uitgelicht\",\"discover\":\"Ontdekken\",\"idea\":\"idee\",\"ideas\":\"idee\\u00ebn\",\"around_you\":\"in de buurt\",\"no_result\":\"Geen resultaten\",\"no_result_hint\":\"Probeer een andere zoekopdracht, categorie of afstand.\",\"pagination\":\"Paginering\",\"prev_page\":\"Vorige pagina\",\"next_page\":\"Volgende pagina\",\"ideas_title\":\"Idee\\u00ebn naar uw zin\",\"ideas_sub\":\"Suggesties voor uw ideale verblijf.\",\"reset_view\":\"Terug naar het overzicht\",\"map_hint\":\"Klik op een markering op de kaart om de details hier te zien.\",\"official_site\":\"Offici\\u00eble website\",\"video\":\"Video\",\"gallery\":\"Galerij\",\"documents\":\"Documenten\",\"faq\":\"Veelgestelde vragen\",\"no_answer\":\"Nog geen antwoord.\",\"see_on_maps\":\"Bekijk op Google Maps\",\"see_place_on_maps\":\"Bekijk de camping op Google Maps\",\"yes\":\"Ja\",\"no\":\"Nee\",\"practical_info\":\"Praktische info\",\"reviews\":\"beoordelingen\",\"read_more\":\"Lees meer\",\"prev_review\":\"Vorige recensie\",\"next_review\":\"Volgende recensie\",\"prev_item\":\"Vorige\",\"next_item\":\"Volgende\",\"photo_credit\":\"Foto: %s\",\"directions\":\"Route\",\"read_less\":\"Minder\",\"article_in_this\":\"In dit artikel\",\"article_toc\":\"Inhoud van het artikel\",\"see_original\":\"Automatisch vertaald \\u00b7 Origineel bekijken\",\"see_translation\":\"Vertaling bekijken\",\"stars_out_of_5\":\"%s van de 5 sterren\",\"owner_reply\":\"Reactie van de eigenaar\",\"customer\":\"Gast\",\"customer_reviews\":\"Gastbeoordelingen\",\"rating_label\":\"Beoordeeld met %1$s van de 5, %2$s beoordelingen \\u2014 bekijk de beoordelingen\",\"reviews_by\":\"Beoordelingen gepresenteerd door Elaia\",\"powered_by\":\"Mogelijk gemaakt door\",\"today\":\"Vandaag\",\"today_lc\":\"vandaag\",\"tomorrow\":\"Morgen\",\"until\":\"Tot %s\",\"from_to\":\"Van %1$s tot %2$s\",\"registration\":\"Inschrijving vereist\",\"full\":\"Volgeboekt\",\"all_animations\":\"Alle activiteiten bekijken \\u2192\",\"ago_day\":\"%d dag geleden\",\"ago_days\":\"%d dagen geleden\",\"ago_week\":\"%d week geleden\",\"ago_weeks\":\"%d weken geleden\",\"ago_month\":\"%d maand geleden\",\"ago_months\":\"%d maanden geleden\",\"ago_year\":\"%d jaar geleden\",\"ago_years\":\"%d jaar geleden\",\"anim_unavailable\":\"Het programma is tijdelijk niet beschikbaar\",\"content_unavailable\":\"Deze inhoud is tijdelijk niet beschikbaar\",\"anim_eyebrow\":\"Beleef onvergetelijke momenten\",\"anim_title\":\"Animatie & evenementen\",\"anim_hero_text\":\"Alle activiteiten van het moment, de hoogtepunten van de week en komende evenementen tijdens uw verblijf.\",\"anim_sections\":\"Pagina-onderdelen\",\"anim_nav_today\":\"Vandaag\",\"anim_nav_week\":\"Deze week\",\"anim_nav_upcoming\":\"Binnenkort\",\"anim_nav_calendar\":\"Kalender\",\"anim_where\":\"Waar?\",\"anim_onsite\":\"Ter plaatse\",\"anim_nearby\":\"In de buurt\",\"anim_no_onsite\":\"Momenteel geen activiteit ter plaatse\",\"anim_no_nearby\":\"Momenteel geen evenement in de buurt\",\"anim_all_day\":\"Hele dag\",\"anim_at\":\"om %s\",\"anim_see_detail\":\"details bekijken\",\"anim_live\":\"Bezig\",\"anim_onsite_spot\":\"Ter plaatse \\u00b7 %s\",\"anim_badge_until\":\"Tot\",\"anim_badge_from\":\"Van\",\"anim_badge_today\":\"Vandaag\",\"anim_filter_cat\":\"Filteren op categorie\",\"anim_all_f\":\"Alle\",\"anim_prev_day\":\"Vorige dag\",\"anim_next_day\":\"Volgende dag\",\"anim_today_title\":\"Activiteiten van vandaag\",\"anim_tomorrow_title\":\"Activiteiten van morgen\",\"anim_day_title\":\"Activiteiten op %s\",\"anim_relax_today\":\"Vandaag een rustige dag\",\"anim_nothing_day\":\"Niets gepland op die dag\",\"anim_next_on\":\"Volgende activiteit op %s.\",\"anim_soon\":\"Het programma wordt binnenkort bijgewerkt.\",\"anim_see_day\":\"Die dag bekijken\",\"anim_prev_acts\":\"Vorige activiteiten\",\"anim_next_acts\":\"Volgende activiteiten\",\"anim_prev_week\":\"Vorige week\",\"anim_next_week\":\"Volgende week\",\"anim_week_title\":\"De hoogtepunten van de week\",\"anim_next_week_title\":\"Volgende week\",\"anim_week_of\":\"Week van %s\",\"anim_week_days\":\"Dagen van de week\",\"anim_today_paren\":\"(vandaag)\",\"anim_activity\":\"%d activiteit\",\"anim_activities\":\"%d activiteiten\",\"anim_nothing\":\"niets gepland\",\"anim_pick_day\":\"Kies een andere dag om het programma te zien.\",\"anim_sort\":\"Evenementen sorteren\",\"anim_sort_date\":\"Sorteren op datum\",\"anim_sort_name\":\"Sorteren op naam\",\"anim_upcoming_title\":\"Alle komende evenementen\",\"anim_no_upcoming\":\"Geen komende evenementen\",\"anim_try_cat\":\"Probeer een andere categorie.\",\"anim_more\":\"Meer evenementen (%d)\",\"anim_hide_cal\":\"Kalender verbergen\",\"anim_show_cal\":\"Volledige kalender bekijken\",\"anim_cal_title\":\"Maandkalender\",\"anim_cal_sub\":\"Alle activiteiten van de maand in \\u00e9\\u00e9n oogopslag.\",\"anim_prev_month\":\"Vorige maand\",\"anim_next_month\":\"Volgende maand\",\"anim_more_info\":\"Meer informatie\",\"anim_new_tab\":\"(nieuw tabblad)\",\"date_locale\":\"nl-NL\",\"page_faq\":\"FAQ\",\"page_metadatas\":\"Ontdek de omgeving\",\"page_animations\":\"Animatie en evenementen\",\"page_corpus\":\"Praktische informatie\",\"anim_event\":\"Evenement\"};\n    function tf(key) { var a = [].slice.call(arguments, 1), i = 0; return T[key].replace(\/%(\\d\\$)?[sd]\/g, function (m, pos) { return pos ? a[parseInt(pos, 10) - 1] : a[i++]; }); }\n    \/\/ Image par d\u00e9faut du chatbot, utilis\u00e9e quand une fiche n'a pas d'image\n    var DEFAULT_IMG = \"https:\\\/\\\/elaia-public.s3.fr-par.scw.cloud\\\/chatbot-defaults\\\/1GRCI2Nxfhw3gn3XEbWpWQFqgosXDilegz6Zefaj.png\";\n\n    var app = document.getElementById('ea-app');\n    if (!app) return;\n\n    var TODAY_MAX = 3; \/\/ cartes \u00ab aujourd'hui \u00bb avant \u00ab Voir les autres \u00bb\n    var UPCOMING_STEP = 8;\n\n    var state = {\n      day: TODAY,\n      todayAll: false,\n      week: null,\n      weekDay: TODAY,\n      cat: 'all',\n      scope: 'all', \/\/ all | onsite | nearby\n      sort: 'date',\n      upcomingLimit: UPCOMING_STEP,\n      calendarOpen: false,\n      month: TODAY.slice(0, 7),\n      selectedDay: null\n    };\n\n    \/\/ \u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\n    \/\/ IC\u00d4NES (SVG statiques)\n    \/\/ \u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\n    var ICONS = {\n      pin: '<svg viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\"><path d=\"M12 21s-7-6.2-7-11.5a7 7 0 0 1 14 0C19 14.8 12 21 12 21z\"\/><circle cx=\"12\" cy=\"9.5\" r=\"2.5\"\/><\/svg>',\n      calendar: '<svg viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\"><rect x=\"3\" y=\"5\" width=\"18\" height=\"16\" rx=\"2\"\/><path d=\"M16 3v4M8 3v4M3 10h18\"\/><\/svg>',\n      arrow: '<svg viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2.2\" stroke-linecap=\"round\" stroke-linejoin=\"round\"><path d=\"M5 12h14M13 6l6 6-6 6\"\/><\/svg>',\n      external: '<svg viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\"><path d=\"M14 5h5v5M19 5l-8 8M18 14v5H5V6h5\"\/><\/svg>',\n      sun: '<svg viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\"><circle cx=\"12\" cy=\"12\" r=\"4\"\/><path d=\"M12 2v2M12 20v2M4.9 4.9l1.4 1.4M17.7 17.7l1.4 1.4M2 12h2M20 12h2M4.9 19.1l1.4-1.4M17.7 6.3l1.4-1.4\"\/><\/svg>',\n      pen: '<svg viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\"><path d=\"M9 11l2 2 4-4\"\/><rect x=\"4\" y=\"3\" width=\"16\" height=\"18\" rx=\"2\"\/><path d=\"M8 7h8\"\/><\/svg>',\n      clock: '<svg viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\"><circle cx=\"12\" cy=\"12\" r=\"9\"\/><path d=\"M12 7v5l3 2\"\/><\/svg>',\n      star: '<svg viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linejoin=\"round\"><path d=\"M12 3l2.8 5.7 6.2.9-4.5 4.4 1.1 6.2L12 17.3 6.4 20.2l1.1-6.2L3 9.6l6.2-.9z\"\/><\/svg>',\n      leaf: '<svg viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\"><path d=\"M5 19c0-8 5-14 15-14 0 10-6 15-14 15\"\/><path d=\"M5 19l7-7\"\/><\/svg>',\n      tent: '<svg viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"1.8\" stroke-linecap=\"round\" stroke-linejoin=\"round\"><path d=\"M12 4L3 20h18L12 4z\"\/><path d=\"M12 4v16M9 20l3-6 3 6\"\/><\/svg>'\n    };\n\n    \/\/ \u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\n    \/\/ CAT\u00c9GORIES \u2014 pastels harmonieux d\u00e9duits du libell\u00e9\n    \/\/ (le libell\u00e9 est toujours affich\u00e9 : l'info ne passe pas que par la couleur)\n    \/\/ \u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\n    var CAT_STYLES = [\n      [\/enfant|kid|junior\/, '#fff1c9', '#6f5200'],\n      [\/famil\/, '#fdf0d5', '#7a4e00'],\n      [\/bien.?etre|yoga|zen|detente|relax|spa\/, '#e3f1e6', '#24613a'],\n      [\/concert|musique|soiree|dj|bal\\b\/, '#ece6fa', '#4b3a8c'],\n      [\/spectacle|theatre|cinema|cirque|magie\/, '#fbe3e1', '#8f2d27'],\n      [\/sport|rando|velo|course|tournoi|petanque|nautique\/, '#dcefeb', '#1f5f55'],\n      [\/expo|musee|culture|patrimoine|visite\/, '#f3e6ef', '#7a2f5c'],\n      [\/march|brocante|vide.?grenier|artisan|terroir|degust\/, '#e8f0dc', '#3f5a1e'],\n      [\/animation|fete|festiv|atelier|jeu\/, '#fbe7d7', '#8e4214']\n    ];\n\n    function norm(s) {\n      return (s || '').toLowerCase().normalize('NFD').replace(\/[\u0300-\u036f]\/g, '');\n    }\n\n    function catStyle(key) {\n      var hay = norm(key + ' ' + (CATEGORIES[key] ? CATEGORIES[key].label : ''));\n      for (var i = 0; i < CAT_STYLES.length; i++) {\n        if (CAT_STYLES[i][0].test(hay)) return { bg: CAT_STYLES[i][1], fg: CAT_STYLES[i][2] };\n      }\n      return { bg: '#eceee8', fg: '#3c463f' };\n    }\n\n    function applyCat(node, key) {\n      var s = catStyle(key);\n      node.style.setProperty('--ea-cat-bg', s.bg);\n      node.style.setProperty('--ea-cat-fg', s.fg);\n    }\n\n    function catLabel(e) {\n      return CATEGORIES[e.category] ? CATEGORIES[e.category].label : '';\n    }\n\n    \/\/ \u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\n    \/\/ DATES \u2014 cha\u00eenes Y-m-d (pas de d\u00e9calage de fuseau)\n    \/\/ \u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\n    function toDate(ymd) {\n      var p = ymd.split('-');\n      return new Date(+p[0], +p[1] - 1, +p[2], 12);\n    }\n\n    function toYmd(d) {\n      return d.getFullYear() + '-' + String(d.getMonth() + 1).padStart(2, '0') + '-' + String(d.getDate()).padStart(2, '0');\n    }\n\n    function addDays(ymd, n) {\n      var d = toDate(ymd);\n      d.setDate(d.getDate() + n);\n      return toYmd(d);\n    }\n\n    function daysBetween(a, b) {\n      return Math.round((toDate(b) - toDate(a)) \/ 86400000);\n    }\n\n    function weekStart(ymd) {\n      var d = toDate(ymd);\n      d.setDate(d.getDate() - (d.getDay() + 6) % 7);\n      return toYmd(d);\n    }\n\n    function fmt(ymd, opts) {\n      return toDate(ymd).toLocaleDateString(T.date_locale, opts);\n    }\n\n    function ucfirst(s) {\n      return s.charAt(0).toUpperCase() + s.slice(1);\n    }\n\n    function shortDate(ymd) {\n      return fmt(ymd, { day: 'numeric', month: 'short' });\n    }\n\n    function byTime(a, b) {\n      return (a.start_time || '').localeCompare(b.start_time || '') || a.name.localeCompare(b.name, T.date_locale);\n    }\n\n    \/** Filtres globaux : sur place \/ aux alentours + cat\u00e9gorie *\/\n    function visible(e) {\n      if (state.scope === 'onsite' && !e.onsite) return false;\n      if (state.scope === 'nearby' && e.onsite) return false;\n      return state.cat === 'all' || e.category === state.cat;\n    }\n\n    function eventsOn(ymd) {\n      return EVENTS.filter(function(e) {\n        return visible(e) && e.start <= ymd && e.end >= ymd;\n      }).sort(byTime);\n    }\n\n    function eventsBetween(from, to) {\n      return EVENTS.filter(function(e) {\n        return visible(e) && e.start <= to && e.end >= from;\n      });\n    }\n\n    \/** Ligne horaire d'une carte vue depuis un jour donn\u00e9 *\/\n    function timeLabel(e, day) {\n      if (e.start === day && e.start_time) return e.start_time + (e.end_time && e.start === e.end ? ' \u2013 ' + e.end_time : '');\n      if (e.start !== e.end || e.open_start) return tf('until', shortDate(e.end));\n      return T.anim_all_day;\n    }\n\n    \/** Ligne date d'une carte \u00ab \u00e0 venir \u00bb *\/\n    function dateLabel(e) {\n      if (e.open_start) return tf('until', shortDate(e.end));\n      if (e.start !== e.end) return tf('from_to', shortDate(e.start), shortDate(e.end));\n      var d = ucfirst(fmt(e.start, { weekday: 'short', day: 'numeric', month: 'short' }));\n      return d + (e.start_time ? ' \u00b7 ' + e.start_time : '');\n    }\n\n    function fullWhenLabel(e) {\n      var opts = { weekday: 'long', day: 'numeric', month: 'long', year: 'numeric' };\n      if (e.open_start) return tf('until', fmt(e.end, opts));\n      var time = e.start_time ? ' ' + tf('anim_at', e.start_time) : '';\n      if (e.start === e.end) return ucfirst(fmt(e.start, opts)) + time + (e.end_time ? ' \u2013 ' + e.end_time : '');\n      return tf('from_to', fmt(e.start, { day: 'numeric', month: 'long' }) + time, fmt(e.end, opts) + (e.end_time ? ' ' + tf('anim_at', e.end_time) : ''));\n    }\n\n    \/\/ \u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\n    \/\/ DOM\n    \/\/ \u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\n    function el(tag, cls, text) {\n      var n = document.createElement(tag);\n      if (cls) n.className = cls;\n      if (text != null) n.textContent = text;\n      return n;\n    }\n\n    function icon(name) {\n      var s = el('span', 'ea-icon');\n      s.setAttribute('aria-hidden', 'true');\n      s.innerHTML = ICONS[name];\n      return s;\n    }\n\n    \/** Image de la fiche \u2192 image par d\u00e9faut du chatbot \u2192 aplat illustr\u00e9 *\/\n    function media(e, cls) {\n      var fallback = function() {\n        var f = el('div', 'ea-card-fallback');\n        f.appendChild(icon('tent'));\n        return f;\n      };\n      if (!e.image && !DEFAULT_IMG) return fallback();\n      var img = el('img', cls);\n      var useDefault = !e.image;\n      img.src = useDefault ? DEFAULT_IMG : e.image;\n      img.alt = e.name;\n      img.loading = 'lazy';\n      img.decoding = 'async';\n      if (useDefault) img.classList.add('ea-img--default');\n      img.onerror = function() {\n        \/\/ Le cr\u00e9dit n'est plus celui de l'image affich\u00e9e\n        var cr = img.parentNode && img.parentNode.querySelector('.ea-credit');\n        if (cr) cr.remove();\n        if (!useDefault && DEFAULT_IMG) {\n          useDefault = true;\n          img.classList.add('ea-img--default');\n          img.src = DEFAULT_IMG;\n        } else if (img.parentNode) {\n          img.replaceWith(fallback());\n        }\n      };\n      return img;\n    }\n\n    \/** Cr\u00e9dit photo en bas \u00e0 droite de l'image (rien sans image propre) *\/\n    function credit(e) {\n      if (!e.image || !e.credit) return null;\n      var txt = \/^(\u00a9|\\(c\\))\/i.test(e.credit) ? e.credit : '\u00a9 ' + e.credit;\n      var c = el('span', 'ea-credit', txt);\n      c.title = txt;\n      return c;\n    }\n\n    function pill(e) {\n      var p = el('span', 'ea-pill', catLabel(e));\n      applyCat(p, e.category);\n      return p;\n    }\n\n    \/**\n     * Carte \u00e9v\u00e9nement (composant unique).\n     * @param {object} e\n     * @param {object} o { day: 'Y-m-d' \u2192 heure du jour | date: true \u2192 dates de l'\u00e9v\u00e9nement }\n     *\/\n    function card(e, o) {\n      o = o || {};\n      var c = el('article', 'ea-card' + (e.end < TODAY ? ' ea-card--ended' : ''));\n      c.tabIndex = 0;\n      c.setAttribute('role', 'button');\n      c.setAttribute('aria-label', e.name + ' \u2014 ' + (o.date ? dateLabel(e) : timeLabel(e, o.day)) + ' \u2014 ' + T.anim_see_detail);\n      applyCat(c, e.category);\n\n      var m = el('div', 'ea-card-media');\n      m.appendChild(media(e));\n      var cr = credit(e);\n      if (cr) m.appendChild(cr);\n      m.appendChild(dateBadge(e));\n      if (o.day === TODAY && e.start < TODAY && e.end >= TODAY) {\n        m.appendChild(el('span', 'ea-live', T.anim_live));\n      }\n      if (e.registration) {\n        var reg = el('span', 'ea-reg');\n        reg.appendChild(icon('pen'));\n        reg.appendChild(document.createTextNode(T.registration));\n        m.appendChild(reg);\n      }\n      c.appendChild(m);\n\n      var b = el('div', 'ea-card-body');\n      var top = el('div', 'ea-card-top');\n      if (!o.date) {\n        var w = el('span', 'ea-when');\n        w.appendChild(icon('clock'));\n        w.appendChild(document.createTextNode(timeLabel(e, o.day)));\n        top.appendChild(w);\n      }\n      if (top.childNodes.length) b.appendChild(top);\n      b.appendChild(el('h3', 'ea-card-title', e.name));\n      var where = placeLabel(e);\n      if (where) {\n        var p = el('p', 'ea-place');\n        p.appendChild(icon(e.onsite ? 'tent' : 'pin'));\n        p.appendChild(document.createTextNode(where));\n        b.appendChild(p);\n      }\n      if (e.description) b.appendChild(el('p', 'ea-card-desc', e.description));\n      var cta = el('span', 'ea-cta', T.discover);\n      cta.appendChild(icon('arrow'));\n      b.appendChild(cta);\n      c.appendChild(b);\n\n      c.addEventListener('click', function() {\n        openModal(e);\n      });\n      c.addEventListener('keydown', function(ev) {\n        if (ev.key === 'Enter' || ev.key === ' ') {\n          ev.preventDefault();\n          openModal(e);\n        }\n      });\n      return c;\n    }\n\n    \/** O\u00f9 : lieu dans l'\u00e9tablissement (sur place) ou ville (aux alentours) *\/\n    function placeLabel(e) {\n      if (e.onsite) return e.spot ? tf('anim_onsite_spot', e.spot) : T.anim_onsite;\n      return e.city;\n    }\n\n    \/**\n     * Badge date sur l'image, toujours sur 3 lignes et de taille fixe :\n     *   un jour     \u2192 LUN \/ 28 \/ SEPT\n     *   jusqu'au    \u2192 JUSQU'AU \/ 18 \/ OCT\n     *   p\u00e9riode     \u2192 25 SEPT \u2192 \/ 7 \/ OCT   (du 25 sept. au 7 oct.)\n     *\/\n    function dateBadge(e) {\n      var month = function(ymd) {\n        return fmt(ymd, { month: 'short' }).replace('.', '');\n      };\n      var top, day, end = '';\n      if (e.open_start) {\n        top = T.anim_badge_until;\n        day = e.end;\n      } else if (e.start !== e.end) {\n        \/\/ P\u00e9riode : le D\u00c9BUT en gros, la fin en petit dessous (\u2192 1 nov)\n        top = T.anim_badge_from;\n        day = e.start;\n        end = '\u2192 ' + toDate(e.end).getDate() + ' ' + month(e.end);\n      } else {\n        top = e.start === TODAY ? T.anim_badge_today : fmt(e.start, { weekday: 'short' }).replace('.', '');\n        day = e.start;\n      }\n      \/\/ Couleur selon le cas : aujourd'hui \/ un jour \u00e0 venir \/ p\u00e9riode \u00e0 venir \/ en cours\n      var kind = (e.start === e.end && !e.open_start) ? (e.start === TODAY ? 'today' : 'day') :\n        ((e.open_start || e.start <= TODAY) ? 'ongoing' : 'period');\n      var d = el('span', 'ea-date ea-date--' + kind);\n      d.setAttribute('aria-hidden', 'true');\n      d.appendChild(el('span', 'ea-date-top', top));\n      d.appendChild(el('span', 'ea-date-day', String(toDate(day).getDate())));\n      d.appendChild(el('span', 'ea-date-month', month(day)));\n      if (end) d.appendChild(el('span', 'ea-date-end', end));\n      return d;\n    }\n\n    function grid(list, o, four) {\n      var g = el('div', 'ea-grid' + (four ? ' ea-grid--4' : ''));\n      list.forEach(function(e) {\n        g.appendChild(card(e, o));\n      });\n      return g;\n    }\n\n    function head(id, iconName, title, sub, side) {\n      var h = el('div', 'ea-section-head');\n      var left = el('div');\n      var t = el('h2', 'ea-section-title');\n      if (iconName) t.appendChild(icon(iconName));\n      t.appendChild(document.createTextNode(title));\n      t.id = id;\n      left.appendChild(t);\n      if (sub) left.appendChild(el('p', 'ea-section-sub', sub));\n      h.appendChild(left);\n      if (side) h.appendChild(side);\n      return h;\n    }\n\n    function round(label, aria, onClick, disabled) {\n      var b = el('button', 'ea-round', label);\n      b.type = 'button';\n      b.setAttribute('aria-label', aria);\n      b.disabled = !!disabled;\n      b.addEventListener('click', onClick);\n      return b;\n    }\n\n    function empty(title, text, action) {\n      var box = el('div', 'ea-empty');\n      box.appendChild(icon('sun'));\n      box.appendChild(el('strong', null, title));\n      if (text) box.appendChild(el('span', null, text));\n      if (action) {\n        var b = el('button', 'ea-btn ea-btn--soft', action.label);\n        b.type = 'button';\n        b.addEventListener('click', action.onClick);\n        box.appendChild(b);\n      }\n      return box;\n    }\n\n    function nextEventDay(after) {\n      var next = null;\n      EVENTS.forEach(function(e) {\n        if (visible(e) && e.start > after && (!next || e.start < next)) next = e.start;\n      });\n      return next;\n    }\n\n    \/** Pastilles de cat\u00e9gories (filtre global de la page) *\/\n    function catFilters() {\n      var box = el('div', 'ea-cats');\n      box.setAttribute('role', 'group');\n      box.setAttribute('aria-label', T.anim_filter_cat);\n      \/\/ Cat\u00e9gories pr\u00e9sentes dans le p\u00e9rim\u00e8tre choisi (sur place \/ alentours)\n      var keys = Object.keys(CATEGORIES).filter(function(k) {\n        return EVENTS.some(function(e) {\n          return e.category === k && e.end >= TODAY &&\n            (state.scope === 'all' || (state.scope === 'onsite') === !!e.onsite);\n        });\n      });\n      if (keys.length < 2) return box;\n      var mk = function(key, label) {\n        var b = el('button', 'ea-cat' + (key === 'all' ? ' ea-cat--all' : ''), label);\n        b.type = 'button';\n        b.setAttribute('aria-pressed', state.cat === key ? 'true' : 'false');\n        if (key !== 'all') applyCat(b, key);\n        b.addEventListener('click', function() {\n          setCat(state.cat === key ? 'all' : key);\n          var again = document.querySelector('.ea-cat[aria-pressed=\"true\"]');\n          if (again) again.focus();\n        });\n        box.appendChild(b);\n      };\n      mk('all', T.anim_all_f);\n      keys.forEach(function(k) {\n        mk(k, CATEGORIES[k].label);\n      });\n      return box;\n    }\n\n    \/\/ \u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\n    \/\/ 3. AUJOURD'HUI\n    \/\/ \u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\n    function renderToday() {\n      var sec = document.getElementById('ea-sec-today');\n      sec.innerHTML = '';\n      var day = state.day;\n\n      var side = el('div', 'ea-head-side');\n      side.appendChild(el('span', null, ucfirst(fmt(day, { weekday: 'long', day: 'numeric', month: 'long' }))));\n      side.appendChild(round('\u2039', T.anim_prev_day, function() {\n        state.day = addDays(state.day, -1);\n        state.todayAll = false;\n        renderToday();\n      }, day <= TODAY));\n      side.appendChild(round('\u203a', T.anim_next_day, function() {\n        state.day = addDays(state.day, 1);\n        state.todayAll = false;\n        renderToday();\n      }));\n\n      \/\/ Titres neutres : la page sert aussi aux h\u00f4tels, mus\u00e9es, offices de tourisme\u2026\n      var title = day === TODAY ? T.anim_today_title :\n        (day === addDays(TODAY, 1) ? T.anim_tomorrow_title : tf('anim_day_title', fmt(day, { weekday: 'long', day: 'numeric', month: 'long' })));\n      sec.appendChild(head('ea-today-title', 'sun', title, null, side));\n      sec.appendChild(catFilters());\n\n      var list = eventsOn(day);\n      if (!list.length) {\n        var next = nextEventDay(day);\n        sec.appendChild(empty(\n          day === TODAY ? T.anim_relax_today : T.anim_nothing_day,\n          next ? tf('anim_next_on', fmt(next, { weekday: 'long', day: 'numeric', month: 'long' })) : T.anim_soon,\n          next ? {\n            label: T.anim_see_day,\n            onClick: function() {\n              state.day = next;\n              renderToday();\n            }\n          } : null));\n        return;\n      }\n\n      sec.appendChild(list.length > TODAY_MAX ? carousel(list, { day: day }) : grid(list, { day: day }));\n    }\n\n    \/**\n     * Carrousel horizontal (3 cartes visibles sur ordinateur, d\u00e9filement au doigt\n     * sur mobile), fl\u00e8ches affich\u00e9es seulement s'il reste des cartes de ce c\u00f4t\u00e9.\n     *\/\n    function carousel(list, o, four) {\n      var wrap = el('div', 'ea-carousel' + (four ? ' ea-carousel--4' : ''));\n      var track = el('div', 'ea-carousel-track');\n      track.setAttribute('role', 'list');\n      list.forEach(function(e) {\n        var c = card(e, o);\n        c.setAttribute('role', 'listitem');\n        track.appendChild(c);\n      });\n      var prev = el('button', 'ea-carousel-btn ea-carousel-btn--prev', '\u2039');\n      var next = el('button', 'ea-carousel-btn ea-carousel-btn--next', '\u203a');\n      prev.type = next.type = 'button';\n      prev.setAttribute('aria-label', T.anim_prev_acts);\n      next.setAttribute('aria-label', T.anim_next_acts);\n      var step = function(dir) {\n        var first = track.firstElementChild;\n        var w = first ? first.getBoundingClientRect().width + 16 : track.clientWidth;\n        track.scrollBy({ left: dir * w * Math.max(1, Math.floor(track.clientWidth \/ w)), behavior: 'smooth' });\n      };\n      prev.addEventListener('click', function() {\n        step(-1);\n      });\n      next.addEventListener('click', function() {\n        step(1);\n      });\n      var update = function() {\n        var max = track.scrollWidth - track.clientWidth;\n        prev.hidden = track.scrollLeft <= 4;\n        next.hidden = track.scrollLeft >= max - 4;\n      };\n      track.addEventListener('scroll', update, { passive: true });\n      window.addEventListener('resize', update);\n      wrap.appendChild(prev);\n      wrap.appendChild(track);\n      wrap.appendChild(next);\n      setTimeout(update, 0);\n      return wrap;\n    }\n\n    \/\/ \u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\n    \/\/ 4. TEMPS FORTS DE LA SEMAINE\n    \/\/ \u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\n    function firstBusyDay(from) {\n      for (var i = 0; i < 7; i++) {\n        var d = addDays(from, i);\n        if (d >= TODAY && eventsOn(d).length) return d;\n      }\n      return null;\n    }\n\n    function renderWeek() {\n      var sec = document.getElementById('ea-sec-week');\n      sec.innerHTML = '';\n      var thisWeek = weekStart(TODAY);\n      var from = state.week || thisWeek;\n      var to = addDays(from, 6);\n      if (state.weekDay < from || state.weekDay > to) state.weekDay = firstBusyDay(from) || from;\n\n      var side = el('div', 'ea-head-side');\n      side.appendChild(el('span', null, tf('from_to', shortDate(from), shortDate(to))));\n      side.appendChild(round('\u2039', T.anim_prev_week, function() {\n        state.week = addDays(from, -7);\n        state.weekDay = state.week === thisWeek ? TODAY : state.week;\n        renderWeek();\n      }, from <= thisWeek));\n      side.appendChild(round('\u203a', T.anim_next_week, function() {\n        state.week = addDays(from, 7);\n        state.weekDay = firstBusyDay(state.week) || state.week;\n        renderWeek();\n      }));\n\n      var title = from === thisWeek ? T.anim_week_title :\n        (from === addDays(thisWeek, 7) ? T.anim_next_week_title : tf('anim_week_of', fmt(from, { day: 'numeric', month: 'long' })));\n      sec.appendChild(head('ea-week-title', 'calendar', title, null, side));\n\n      var days = el('div', 'ea-days');\n      days.setAttribute('role', 'group');\n      days.setAttribute('aria-label', T.anim_week_days);\n      for (var i = 0; i < 7; i++) {\n        (function(day) {\n          var n = eventsOn(day).length;\n          var b = el('button', 'ea-day' + (day === TODAY ? ' is-today' : '') + (n ? ' has-events' : ''));\n          b.type = 'button';\n          b.setAttribute('aria-pressed', day === state.weekDay ? 'true' : 'false');\n          b.setAttribute('aria-label', fmt(day, { weekday: 'long', day: 'numeric', month: 'long' }) + (day === TODAY ? ' ' + T.anim_today_paren : '') + ' : ' + (n ? tf(n > 1 ? 'anim_activities' : 'anim_activity', n) : T.anim_nothing));\n          b.appendChild(el('span', 'ea-day-name', ucfirst(fmt(day, { weekday: 'short' }).replace('.', ''))));\n          b.appendChild(el('span', 'ea-day-date', shortDate(day)));\n          b.addEventListener('click', function() {\n            state.weekDay = day;\n            renderWeek();\n            var btn = document.querySelector('.ea-day[aria-pressed=\"true\"]');\n            if (btn) btn.focus();\n          });\n          days.appendChild(b);\n        })(addDays(from, i));\n      }\n      sec.appendChild(days);\n\n      var list = eventsOn(state.weekDay);\n      if (!list.length) {\n        sec.appendChild(empty(T.anim_nothing_day, T.anim_pick_day));\n        return;\n      }\n      \/\/ Au-del\u00e0 de 4 activit\u00e9s : carrousel (4 cartes visibles) au lieu d'une grille qui s'allonge\n      sec.appendChild(list.length > 4 ? carousel(list, { day: state.weekDay }, true) : grid(list, { day: state.weekDay }, true));\n    }\n\n    \/\/ \u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\n    \/\/ 5. TOUS LES \u00c9V\u00c9NEMENTS \u00c0 VENIR\n    \/\/ \u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\n    \/** Liste d\u00e9roulante accessible (libell\u00e9 masqu\u00e9) *\/\n    function selectBox(label, options, value, onChange) {\n      var wrap = el('label');\n      wrap.appendChild(el('span', 'ea-sr', label));\n      var sel = el('select', 'ea-select');\n      options.forEach(function(o) {\n        var opt = el('option', null, o[1]);\n        opt.value = o[0];\n        opt.selected = value === o[0];\n        sel.appendChild(opt);\n      });\n      sel.addEventListener('change', function() {\n        onChange(sel.value);\n      });\n      wrap.appendChild(sel);\n      return wrap;\n    }\n\n    function renderUpcoming() {\n      var sec = document.getElementById('ea-sec-upcoming');\n      sec.innerHTML = '';\n\n      \/\/ Tri (le filtre cat\u00e9gorie est global, sous \u00ab Activit\u00e9s du jour \u00bb)\n      var side = el('div', 'ea-head-side');\n      side.appendChild(selectBox(T.anim_sort, [\n        ['date', T.anim_sort_date],\n        ['name', T.anim_sort_name]\n      ], state.sort, function(v) {\n        state.sort = v;\n        renderUpcoming();\n        focusUpcoming(0);\n      }));\n      sec.appendChild(head('ea-upcoming-title', 'leaf', T.anim_upcoming_title, null, side));\n\n      var list = EVENTS.filter(function(e) {\n        return visible(e) && e.end >= TODAY;\n      }).sort(function(a, b) {\n        if (state.sort === 'name') return a.name.localeCompare(b.name, T.date_locale);\n        var sa = a.start < TODAY ? TODAY : a.start;\n        var sb = b.start < TODAY ? TODAY : b.start;\n        return sa.localeCompare(sb) || byTime(a, b);\n      });\n\n      if (!list.length) {\n        sec.appendChild(empty(T.anim_no_upcoming, state.cat === 'all' ? T.anim_soon : T.anim_try_cat));\n        return;\n      }\n\n      sec.appendChild(grid(list.slice(0, state.upcomingLimit), { date: true }, true));\n\n      if (list.length > state.upcomingLimit) {\n        var more = el('div', 'ea-more');\n        var b = el('button', 'ea-btn ea-btn--soft', tf('anim_more', list.length - state.upcomingLimit));\n        b.appendChild(icon('arrow'));\n        b.type = 'button';\n        b.addEventListener('click', function() {\n          state.upcomingLimit += UPCOMING_STEP;\n          renderUpcoming();\n        });\n        more.appendChild(b);\n        sec.appendChild(more);\n      }\n    }\n\n    function setCat(key) {\n      state.cat = key;\n      rerenderAll();\n    }\n\n    function setScope(scope) {\n      state.scope = scope;\n      state.cat = 'all';\n      app.querySelectorAll('.ea-scope button').forEach(function(b) {\n        b.setAttribute('aria-pressed', b.getAttribute('data-scope') === scope ? 'true' : 'false');\n      });\n      rerenderAll();\n    }\n\n    function rerenderAll() {\n      state.upcomingLimit = UPCOMING_STEP;\n      state.todayAll = false;\n      renderToday();\n      renderWeek();\n      renderUpcoming();\n      renderCalendar();\n    }\n\n    \/** Apr\u00e8s un re-rendu, garde le focus sur la liste d\u00e9roulante utilis\u00e9e *\/\n    function focusUpcoming(i) {\n      var sel = document.querySelectorAll('#ea-sec-upcoming .ea-select')[i];\n      if (sel) sel.focus();\n    }\n\n    \/\/ \u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\n    \/\/ 6. CALENDRIER DU MOIS (secondaire, repliable)\n    \/\/ \u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\n    var MAX_LANES = 3;\n\n    \/** Place les \u00e9v\u00e9nements d'une semaine en couloirs sans chevauchement *\/\n    function layoutLanes(from, to) {\n      var items = eventsBetween(from, to).map(function(e) {\n        var s = e.start < from ? from : e.start;\n        var t = e.end > to ? to : e.end;\n        return { e: e, col: daysBetween(from, s) + 1, span: daysBetween(s, t) + 1, fromBefore: e.start < from, toAfter: e.end > to };\n      });\n      items.sort(function(a, b) {\n        return (a.col - b.col) || (b.span - a.span) || (a.e.start_time || '').localeCompare(b.e.start_time || '');\n      });\n      var ends = [];\n      items.forEach(function(it) {\n        var lane = 0;\n        while (ends[lane] !== undefined && ends[lane] >= it.col) lane++;\n        ends[lane] = it.col + it.span - 1;\n        it.lane = lane;\n      });\n      return items;\n    }\n\n    function renderCalendar() {\n      var sec = document.getElementById('ea-sec-calendar');\n      if (!sec) return; \/\/ calendrier masqu\u00e9 (r\u00e9glage ou calendrier=\"non\")\n      sec.innerHTML = '';\n\n      var toggle = el('button', 'ea-btn ea-btn--soft', state.calendarOpen ? T.anim_hide_cal : T.anim_show_cal);\n      toggle.appendChild(icon('arrow'));\n      toggle.type = 'button';\n      toggle.setAttribute('aria-expanded', state.calendarOpen ? 'true' : 'false');\n      toggle.setAttribute('aria-controls', 'ea-cal-panel');\n      toggle.addEventListener('click', function() {\n        state.calendarOpen = !state.calendarOpen;\n        renderCalendar();\n        var b = document.querySelector('#ea-sec-calendar [aria-controls=\"ea-cal-panel\"]');\n        if (b) b.focus();\n      });\n      sec.appendChild(head('ea-calendar-title', 'calendar', T.anim_cal_title, T.anim_cal_sub, toggle));\n\n      var panel = el('div', 'ea-cal-panel');\n      panel.id = 'ea-cal-panel';\n      panel.hidden = !state.calendarOpen;\n      sec.appendChild(panel);\n      if (!state.calendarOpen) return;\n\n      var first = state.month + '-01';\n      var firstDate = toDate(first);\n      var lastDay = toYmd(new Date(firstDate.getFullYear(), firstDate.getMonth() + 1, 0, 12));\n      var gridStart = weekStart(first);\n      var gridEnd = addDays(weekStart(lastDay), 6);\n\n      var bar = el('div', 'ea-cal-toolbar');\n      bar.appendChild(el('h3', 'ea-cal-month', ucfirst(fmt(first, { month: 'long', year: 'numeric' }))));\n      var nav = el('div', 'ea-head-side');\n      nav.appendChild(round('\u2039', T.anim_prev_month, function() {\n        state.month = toYmd(new Date(firstDate.getFullYear(), firstDate.getMonth() - 1, 1, 12)).slice(0, 7);\n        state.selectedDay = null;\n        renderCalendar();\n      }));\n      nav.appendChild(round('\u203a', T.anim_next_month, function() {\n        state.month = toYmd(new Date(firstDate.getFullYear(), firstDate.getMonth() + 1, 1, 12)).slice(0, 7);\n        state.selectedDay = null;\n        renderCalendar();\n      }));\n      bar.appendChild(nav);\n      panel.appendChild(bar);\n\n      var month = el('div', 'ea-month');\n      var mh = el('div', 'ea-month-head');\n      \/\/ Lundi \u2192 dimanche, abr\u00e9g\u00e9s dans la langue de la page (5 janv. 2026 = un lundi)\n      [5, 6, 7, 8, 9, 10, 11].map(function(dd) { return ucfirst(fmt('2026-01-' + (dd < 10 ? '0' : '') + dd, { weekday: 'short' }).replace('.', '')); }).forEach(function(d) {\n        mh.appendChild(el('div', null, d));\n      });\n      month.appendChild(mh);\n      for (var ws = gridStart; ws <= gridEnd; ws = addDays(ws, 7)) month.appendChild(monthRow(ws));\n      panel.appendChild(month);\n\n      \/\/ D\u00e9tail uniquement apr\u00e8s un clic sur un jour\n      if (state.selectedDay) {\n        var dp = el('div', 'ea-daypanel');\n        dp.id = 'ea-daypanel';\n        dp.appendChild(el('h3', 'ea-daypanel-title', ucfirst(fmt(state.selectedDay, { weekday: 'long', day: 'numeric', month: 'long' }))));\n        var list = eventsOn(state.selectedDay);\n        dp.appendChild(list.length ? grid(list, { day: state.selectedDay }) : empty(T.anim_nothing_day));\n        panel.appendChild(dp);\n      }\n    }\n\n    function monthRow(from) {\n      var to = addDays(from, 6);\n      var items = layoutLanes(from, to);\n      var row = el('div', 'ea-mrow');\n      var hidden = [0, 0, 0, 0, 0, 0, 0];\n      items.forEach(function(it) {\n        if (it.lane >= MAX_LANES) {\n          for (var d = it.col; d < it.col + it.span; d++) hidden[d - 1]++;\n        }\n      });\n\n      for (var i = 0; i < 7; i++) {\n        (function(day, i) {\n          var inMonth = day.slice(0, 7) === state.month;\n          var cell = el('button', 'ea-mcell' + (inMonth ? '' : ' ea-mcell--out') + (day === state.selectedDay ? ' ea-mcell--selected' : ''));\n          cell.type = 'button';\n          cell.style.gridColumn = String(i + 1);\n          cell.setAttribute('aria-label', fmt(day, { weekday: 'long', day: 'numeric', month: 'long' }) + ' : ' + (function(n) { return n ? tf(n > 1 ? 'anim_activities' : 'anim_activity', n) : T.anim_nothing; })(eventsOn(day).length));\n          cell.addEventListener('click', function() {\n            state.selectedDay = day;\n            if (!inMonth) state.month = day.slice(0, 7);\n            renderCalendar();\n            var dp = document.getElementById('ea-daypanel');\n            if (dp && dp.scrollIntoView) dp.scrollIntoView({ behavior: 'smooth', block: 'nearest' });\n          });\n          row.appendChild(cell);\n\n          var num = el('span', 'ea-mnum' + (inMonth ? '' : ' ea-mnum--out') + (day === TODAY ? ' ea-mnum--today' : ''), String(toDate(day).getDate()));\n          num.style.gridColumn = String(i + 1);\n          row.appendChild(num);\n\n          if (hidden[i]) {\n            var more = el('span', 'ea-mmore', '+' + hidden[i]);\n            more.style.gridColumn = String(i + 1);\n            row.appendChild(more);\n          }\n        })(addDays(from, i), i);\n      }\n\n      items.forEach(function(it) {\n        if (it.lane >= MAX_LANES) return;\n        var e = it.e;\n        var b = el('button', 'ea-mbar' +\n          (it.fromBefore ? ' ea-mbar--from-before' : '') +\n          (it.toAfter ? ' ea-mbar--to-after' : '') +\n          (e.end < TODAY ? ' ea-mbar--ended' : ''), ((!it.fromBefore && e.start_time) ? e.start_time + ' ' : '') + e.name);\n        b.type = 'button';\n        b.title = e.name;\n        applyCat(b, e.category);\n        b.style.gridColumn = it.col + ' \/ span ' + it.span;\n        b.style.gridRow = String(it.lane + 2);\n        b.addEventListener('click', function() {\n          openModal(e);\n        });\n        row.appendChild(b);\n      });\n      return row;\n    }\n\n    \/\/ \u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\n    \/\/ MODAL \u2014 d\u00e9plac\u00e9e dans <body> 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-47493","page","type-page","status-publish","hentry"],"acf":[],"_links":{"self":[{"href":"https:\/\/www.lespialades.com\/nl\/wp-json\/wp\/v2\/pages\/47493","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.lespialades.com\/nl\/wp-json\/wp\/v2\/pages"}],"about":[{"href":"https:\/\/www.lespialades.com\/nl\/wp-json\/wp\/v2\/types\/page"}],"author":[{"embeddable":true,"href":"https:\/\/www.lespialades.com\/nl\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.lespialades.com\/nl\/wp-json\/wp\/v2\/comments?post=47493"}],"version-history":[{"count":1,"href":"https:\/\/www.lespialades.com\/nl\/wp-json\/wp\/v2\/pages\/47493\/revisions"}],"predecessor-version":[{"id":47494,"href":"https:\/\/www.lespialades.com\/nl\/wp-json\/wp\/v2\/pages\/47493\/revisions\/47494"}],"wp:attachment":[{"href":"https:\/\/www.lespialades.com\/nl\/wp-json\/wp\/v2\/media?parent=47493"}],"wp:term":[{"taxonomy":"sujet","embeddable":true,"href":"https:\/\/www.lespialades.com\/nl\/wp-json\/wp\/v2\/sujet?post=47493"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}