{"id":861,"date":"2025-07-09T13:41:52","date_gmt":"2025-07-09T17:41:52","guid":{"rendered":"https:\/\/enpistedev.wpenginepowered.com\/news\/"},"modified":"2025-12-19T16:35:11","modified_gmt":"2025-12-19T21:35:11","slug":"news","status":"publish","type":"page","link":"https:\/\/enpiste.qc.ca\/en\/news\/","title":{"rendered":"News"},"content":{"rendered":"\t\t<div data-elementor-type=\"wp-page\" data-elementor-id=\"861\" class=\"elementor elementor-861 elementor-82\" data-elementor-post-type=\"page\">\n\t\t\t\t<div class=\"elementor-element elementor-element-9892d20 e-flex e-con-boxed e-con e-parent\" data-id=\"9892d20\" data-element_type=\"container\">\n\t\t\t\t\t<div class=\"e-con-inner\">\n\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t<div class=\"elementor-element elementor-element-d0d93ef e-flex e-con-boxed e-con e-parent\" data-id=\"d0d93ef\" data-element_type=\"container\">\n\t\t\t\t\t<div class=\"e-con-inner\">\n\t\t<div class=\"elementor-element elementor-element-1c6256c e-con-full e-flex e-con e-child\" data-id=\"1c6256c\" data-element_type=\"container\" data-settings=\"{&quot;background_background&quot;:&quot;classic&quot;}\">\n\t\t<div class=\"elementor-element elementor-element-2ae6e7c e-con-full e-flex e-con e-child\" data-id=\"2ae6e7c\" data-element_type=\"container\">\n\t\t<div class=\"elementor-element elementor-element-1c63765 e-con-full e-flex e-con e-child\" data-id=\"1c63765\" data-element_type=\"container\">\n\t\t\t\t<div class=\"elementor-element elementor-element-7030e68 elementor-widget elementor-widget-heading\" data-id=\"7030e68\" data-element_type=\"widget\" data-widget_type=\"heading.default\">\n\t\t\t\t\t<h2 class=\"elementor-heading-title elementor-size-default\">News<\/h2>\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-f931312 elementor-widget__width-initial elementor-widget elementor-widget-text-editor\" data-id=\"f931312\" data-element_type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t\t\t\t\t\t<p>Follow the ideas, projects, and voices that are shaping circus arts today.<\/p>\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t<div class=\"elementor-element elementor-element-f94008e e-con-full e-flex e-con e-child\" data-id=\"f94008e\" data-element_type=\"container\">\n\t\t\t\t<div class=\"elementor-element elementor-element-e668c7c elementor-widget elementor-widget-image\" data-id=\"e668c7c\" data-element_type=\"widget\" data-widget_type=\"image.default\">\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<img fetchpriority=\"high\" decoding=\"async\" width=\"800\" height=\"534\" src=\"https:\/\/enpiste.qc.ca\/wp-content\/uploads\/2025\/11\/2025_ProdG_01jpg-1024x683.jpg\" class=\"attachment-large size-large wp-image-4214\" alt=\"\" srcset=\"https:\/\/enpiste.qc.ca\/wp-content\/uploads\/2025\/11\/2025_ProdG_01jpg-1024x683.jpg 1024w, https:\/\/enpiste.qc.ca\/wp-content\/uploads\/2025\/11\/2025_ProdG_01jpg-300x200.jpg 300w, https:\/\/enpiste.qc.ca\/wp-content\/uploads\/2025\/11\/2025_ProdG_01jpg-768x512.jpg 768w, https:\/\/enpiste.qc.ca\/wp-content\/uploads\/2025\/11\/2025_ProdG_01jpg-1536x1024.jpg 1536w, https:\/\/enpiste.qc.ca\/wp-content\/uploads\/2025\/11\/2025_ProdG_01jpg-2048x1365.jpg 2048w\" sizes=\"(max-width: 800px) 100vw, 800px\" \/>\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-9a5db9b elementor-absolute elementor-widget elementor-widget-text-editor\" data-id=\"9a5db9b\" data-element_type=\"widget\" data-settings=\"{&quot;_position&quot;:&quot;absolute&quot;}\" data-widget_type=\"text-editor.default\">\n\t\t\t\t\t\t\t\t\t<p><span data-sheets-root=\"1\">Marjorie Nantel | Prod.G \u00a9 Frank Begin<\/span><\/p>\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t<div class=\"elementor-element elementor-element-f4b07f0 e-flex e-con-boxed e-con e-parent\" data-id=\"f4b07f0\" data-element_type=\"container\">\n\t\t\t\t\t<div class=\"e-con-inner\">\n\t\t\t\t<div class=\"elementor-element elementor-element-0059dfa elementor-widget elementor-widget-shortcode\" data-id=\"0059dfa\" data-element_type=\"widget\" data-widget_type=\"shortcode.default\">\n\t\t\t\t\t\t\t<div class=\"elementor-shortcode\">\t<div class=\"acf-a-la-une-app\" data-cpt=\"posts\" data-lang=\"en\">\n\t\t\t\t\t<h2 class=\"acf-a-la-une-title\">Featured News<\/h2>\n\t\t\t\t<div class=\"acf-a-la-une-grid\"><\/div>\n\t\t<div class=\"acf-a-la-une-swiper swiper\" style=\"display:none;\">\n\t\t\t<div class=\"swiper-wrapper\"><\/div>\n\t\t\t<div class=\"swiper-pagination\"><\/div>\n\t\t<\/div>\n\t<\/div>\n\n\t<link rel=\"stylesheet\" href=\"https:\/\/cdn.jsdelivr.net\/npm\/swiper@11\/swiper-bundle.min.css\" \/>\n\t<script src=\"https:\/\/cdn.jsdelivr.net\/npm\/swiper@11\/swiper-bundle.min.js\"><\/script>\n\n\t<style>\n\t.acf-a-la-une-title {\n\t  color: #D30C8C;\n\t  font-family: \"TikTok Sans\" !important;\n\t  font-size: 32px !important;\n\t  font-style: normal;\n\t  font-weight: 600 !important;\n\t  line-height: 35px;\n\t  margin: 0;\n\t  flex: 0 0 30%;\n\t  min-width: 200px;\n\t  margin-bottom: 30px;\n\t}\n\t\n\t.acf-a-la-une-grid { display: grid; grid-template-columns: repeat(3, 1fr); gap: 20px; margin-bottom: 30px; }\n\t@media screen and (min-width:1024px) {\n\t\t.acf-a-la-une-grid.one-card .acf-img-container { width:40%; height:100%; }\n\t}\n\t.acf-categories { display:flex; flex-wrap:wrap; gap:8px; }\n\t.acf-category { padding:4px 6px; color:#455A64; font-family:\"TikTok Sans\" !important; font-size:10px !important; font-weight:400 !important; line-height:12px; border-radius:100px; white-space:nowrap; background-color:#cfd8dc80; }\n\t.acf-a-la-une-grid.one-card { grid-template-columns:1fr; margin:0 auto 30px; }\n\t.acf-a-la-une-grid.two-cards { grid-template-columns:repeat(2, 1fr); }\n\t.acf-a-la-une-grid.three-cards { grid-template-columns:repeat(3, 1fr); }\n\t@media (max-width:1023px) {\n\t\t.acf-a-la-une-grid.two-cards { grid-template-columns:repeat(2, 1fr); }\n\t\t.acf-a-la-une-grid.one-card { grid-template-columns:1fr; max-width:none; margin:0 0 30px; }\n\t\t.acf-a-la-une-grid.three-cards { grid-template-columns:repeat(2, 1fr); }\n\t}\n\t@media (max-width:767px) {\n\t\t.acf-a-la-une-grid { grid-template-columns:1fr; }\n\t\t.acf-a-la-une-grid.one-card { max-width:none; margin:0 0 30px; }\n\t}\n\t.acf-card-wrapper { display:flex; flex-direction:column; }\n\t.acf-card { height:100%; display:flex; flex-direction:column; border-radius:12px; text-decoration:none; color:inherit; transition:box-shadow .3s; background:#F5F6F7; box-shadow:8px 8px 12px 0 rgba(231,231,233,.6)!important; min-height:200px; }\n\t.acf-card:hover { box-shadow:8px 8px 12px 0 rgba(160,160,167,.5)!important; }\n\t@media (min-width:1024px) {\n\t\t.acf-a-la-une-grid.one-card .acf-card { flex-direction:row; min-height:300px; max-height:350px; }\n\t\t.acf-a-la-une-grid.one-card .acf-img { width:100%!important; height:100%!important; border-radius:12px 0 0 12px!important; object-fit:cover; }\n\t\t.acf-a-la-une-grid.one-card .acf-body { width:50%; padding:24px; justify-content:flex-start; }\n\t\t.acf-a-la-une-grid.one-card .acf-date-title-excerpt { gap:12px; }\n\t\t.acf-a-la-une-grid.one-card .acf-title { font-size:28px!important; line-height:32px; }\n\t\t.acf-a-la-une-grid.one-card .acf-excerpt { font-size:16px!important; line-height:24px; }\n\t}\n\t.acf-img-container { position:relative; width:100%; height:170px; border-radius:12px 12px 0 0; overflow:hidden; }\n\t.acf-img { width:100%; height:100%; object-fit:cover; border-radius:12px 12px 0 0; }\n\t.acf-nom-prenom { position:absolute; bottom:0; left:0; color:#FFF; font-family:\"TikTok Sans\" !important; font-size:10px !important; font-weight:400 !important; line-height:12px; padding:0 0 6px 12px; }\n\t.acf-body { flex:1; display:flex; flex-direction:column; padding:16px; justify-content:space-between; }\n\t.acf-date-title-excerpt { display:flex; flex-direction:column; gap:8px; }\n\t.acf-date { color:#666; font-family:\"TikTok Sans\" !important; font-size:12px !important; font-weight:400 !important; line-height:16px; }\n\t.acf-title { color:#333; font-family:\"TikTok Sans\" !important; font-size:18px !important; font-weight:600 !important; line-height:24px; margin:0; }\n\t.acf-excerpt { color:#666; font-family:\"TikTok Sans\" !important; font-size:14px !important; font-weight:400 !important; line-height:20px; margin:0; }\n\t.acf-a-la-une-swiper { width:100%; overflow:hidden; }\n\t.acf-a-la-une-swiper .swiper-wrapper { display:flex; align-items:stretch; }\n\t.acf-a-la-une-swiper .swiper-slide { height:auto; display:flex; flex-direction:column; }\n\t.acf-a-la-une-swiper.tablet-3 .swiper-slide { width:calc(50% - 10px)!important; flex-shrink:0; }\n\t.acf-a-la-une-swiper.tablet-3 .acf-card-wrapper, .acf-a-la-une-swiper.mobile-2 .acf-card-wrapper, .acf-a-la-une-swiper.mobile-3 .acf-card-wrapper { height:100%; }\n\t.acf-a-la-une-swiper.mobile-2 .swiper-slide, .acf-a-la-une-swiper.mobile-3 .swiper-slide { width:100%!important; flex-shrink:0; }\n\t.acf-a-la-une-swiper .swiper-pagination { position:relative; margin-top:20px; text-align:center; }\n\t.acf-a-la-une-swiper .swiper-pagination-bullet { width:8px; height:8px; background:#CFD8DC; opacity:.5; margin:0 4px; border-radius:50%; cursor:pointer; }\n\t.acf-a-la-une-swiper .swiper-pagination-bullet-active { opacity:1; background:#455A64; }\n\t\n\t\/* Styles sp\u00e9cifiques UNIQUEMENT pour les pages de publications *\/\n\t\/* Ces styles ne s'appliquent que quand les classes .with-image ou .without-image sont pr\u00e9sentes *\/\n\t\n\t\/* Min-height sp\u00e9cifique pour les publications *\/\n\t.acf-a-la-une-app.acf-publications-page .acf-card {\n\t\tmin-height: 200px !important;\n        transition: box-shadow .3s;\n        background: #F5F6F7;\n        box-shadow: 8px 8px 12px 0 rgba(231, 231, 233, .6) !important;\n\t}\n\t\n\t\/* Styles pour la structure des publications - plus sp\u00e9cifiques *\/\n\t.acf-a-la-une-app.acf-publications-page .acf-header-group {\n\t\tdisplay: flex !important;\n\t\tflex-direction: column !important;\n\t\tgap: 0 !important;\n\t\tpadding: 16px 16px 0 16px !important;\n\t}\n\t\n\t.acf-a-la-une-app.acf-publications-page .acf-content-group {\n\t\tdisplay: flex !important;\n\t\tflex-direction: column !important;\n\t\tgap: 8px !important;\n\t\tpadding: 0 16px !important;\n\t}\n\t\n\t.acf-a-la-une-app.acf-publications-page .acf-card .acf-body {\n\t\tpadding: 0 !important;\n\t\tgap: 16px !important;\n\t\tjustify-content: flex-start !important;\n\t\tdisplay: flex !important;\n\t\tflex-direction: column !important;\n\t}\n\n\t.acf-a-la-une-app.acf-publications-page .acf-card .acf-plus-holder {\n\t\tpadding: 0 16px 16px 16px !important;\n\t\tmargin-top: auto !important;\n\t}\n\t\n\t.acf-a-la-une-app.acf-publications-page .acf-img-container {\n\t\theight: 120px !important;\n\t\tborder-radius: 0 !important;\n\t\toverflow: hidden !important;\n\t}\n\t\n\t.acf-a-la-une-app.acf-publications-page .acf-img {\n\t\theight: 120px !important;\n\t\tborder-radius: 0 !important;\n\t\twidth: 100% !important;\n\t\tobject-fit: cover !important;\n\t}\n\t\n\t.acf-a-la-une-app.acf-publications-page .acf-title-publieur-group {\n\t\tdisplay: flex !important;\n\t\tflex-direction: column !important;\n\t\tgap: 0 !important;\n\t}\n\t\n\t.acf-a-la-une-app.acf-publications-page .acf-img-container.acf-no-image {\n\t\tdisplay: none !important;\n\t}\n\t\n\t.acf-a-la-une-app.acf-publications-page .acf-ville-date {\n\t\tdisplay: flex !important;\n\t\tgap: 3px !important;\n\t}\n\t\n\t.acf-a-la-une-app.acf-publications-page .acf-ville {\n\t\tfont-size: 12px !important;\n\t\tcolor: #666 !important;\n\t\tmargin: 0 !important;\n\t}\n\t\n\t.acf-a-la-une-app.acf-publications-page .acf-ville::after {\n\t\tcontent: \", \" !important;\n\t}\n\t\n\t.acf-a-la-une-app.acf-publications-page .acf-title {\n\t\tfont-size: 18px !important;\n\t\tfont-weight: 600 !important;\n\t\tmargin: 0 !important;\n\t\tcolor: #333 !important;\n\t\tline-height: 1.3 !important;\n\t}\n\t\n\t.acf-a-la-une-app.acf-publications-page .acf-date {\n\t\tfont-size: 12px !important;\n\t\tcolor: #666 !important;\n\t\tmargin: 0 !important;\n\t\talign-self: flex-end;\n\t}\n\t\n\t.acf-a-la-une-app.acf-publications-page .acf-excerpt {\n\t\tcolor: #666 !important;\n\t\tfont-size: 14px !important;\n\t\tline-height: 1.4 !important;\n\t\tmargin: 0 !important;\n\t}\n\t\n\t\/* Layouts adaptatifs pour les publications *\/\n\t\n\t\/* Styles de debug supprim\u00e9s - Design final propre *\/\n\t\n\t\/* 1 card avec image : layout horizontal sur desktop\/tablette *\/\n\t.acf-a-la-une-app.acf-publications-page .acf-a-la-une-grid.one-card.with-image .acf-card {\n\t\tflex-direction: row !important;\n\t\tmin-height: 200px !important;\n\t\tmax-height: 350px !important;\n\t\tdisplay: flex !important;\n\t\talign-items: stretch !important;\n\t}\n\t\n\t.acf-a-la-une-app.acf-publications-page .acf-a-la-une-grid.one-card.with-image .acf-img-container {\n\t\tflex: 0 0 40% !important;\n\t\theight: 100% !important;\n\t\tborder-radius: 12px 0 0 12px !important;\n\t\toverflow: hidden !important;\n\t\tposition: relative !important;\n\t}\n\t\n\t.acf-a-la-une-app.acf-publications-page .acf-a-la-une-grid.one-card.with-image .acf-img {\n\t\twidth: 100% !important;\n\t\theight: 100% !important;\n\t\tborder-radius: 12px 0 0 12px !important;\n\t\tobject-fit: cover !important;\n\t}\n\t\n\t.acf-a-la-une-app.acf-publications-page .acf-a-la-une-grid.one-card.with-image .acf-body {\n\t\tflex: 1 !important;\n\t\tpadding: 24px !important;\n\t\tjustify-content: space-between !important;\n\t\tdisplay: flex !important;\n\t\tflex-direction: column !important;\n\t}\n\t\n\t.acf-a-la-une-app.acf-publications-page .acf-a-la-une-grid.one-card.with-image .acf-date-title-excerpt {\n\t\tdisplay: flex !important;\n\t\tflex-direction: column !important;\n\t\tgap: 12px !important;\n\t}\n\t\n\t.acf-a-la-une-app.acf-publications-page .acf-a-la-une-grid.one-card.with-image .acf-title {\n\t\tfont-size: 28px !important;\n\t\tline-height: 32px !important;\n\t\tmargin: 0 !important;\n\t}\n\t\n\t.acf-a-la-une-app.acf-publications-page .acf-a-la-une-grid.one-card.with-image .acf-excerpt {\n\t\tfont-size: 16px !important;\n\t\tline-height: 24px !important;\n\t\tmargin: 0 !important;\n\t}\n\t\n\t\/* 1 card sans image : layout vertical avec hauteur min *\/\n\t.acf-a-la-une-app.acf-publications-page .acf-a-la-une-grid.one-card.without-image .acf-card {\n\t\tmin-height: 200px !important;\n\t}\n\t\n\t.acf-a-la-une-app.acf-publications-page .acf-a-la-une-grid.one-card.without-image .acf-body {\n\t\tpadding: 20px !important;\n\t\theight: 100% !important;\n\t\tjustify-content: space-between !important;\n\t}\n\t\n\t\/* 2+ cards : layout grille standard avec structure comme \"ici\" *\/\n\t.acf-a-la-une-app.acf-publications-page .acf-a-la-une-grid.two-cards {\n\t\tgrid-template-columns: repeat(2, 1fr) !important;\n\t}\n\t\n\t.acf-a-la-une-app.acf-publications-page .acf-a-la-une-grid.three-cards {\n\t\tgrid-template-columns: repeat(3, 1fr) !important;\n\t}\n\t\n\t.acf-a-la-une-app.acf-publications-page .acf-a-la-une-grid.multiple-cards {\n\t\tgrid-template-columns: repeat(3, 1fr) !important;\n\t}\n\t\n\t\/* Styles pour les 2+ cards avec structure comme \"ici\" *\/\n\t.acf-a-la-une-app.acf-publications-page .acf-a-la-une-grid.two-cards .acf-card,\n\t.acf-a-la-une-app.acf-publications-page .acf-a-la-une-grid.three-cards .acf-card,\n\t.acf-a-la-une-app.acf-publications-page .acf-a-la-une-grid.multiple-cards .acf-card {\n\t\tflex-direction: column !important;\n\t\tmin-height: 200px !important;\n\t}\n\t\n\t.acf-a-la-une-app.acf-publications-page .acf-a-la-une-grid.two-cards .acf-img-container,\n\t.acf-a-la-une-app.acf-publications-page .acf-a-la-une-grid.three-cards .acf-img-container,\n\t.acf-a-la-une-app.acf-publications-page .acf-a-la-une-grid.multiple-cards .acf-img-container {\n\t\theight: 120px !important;\n\t\tborder-radius: 0 !important;\n\t\toverflow: hidden !important;\n\t\tposition: relative !important;\n\t}\n\t\n\t.acf-a-la-une-app.acf-publications-page .acf-a-la-une-grid.two-cards .acf-img,\n\t.acf-a-la-une-app.acf-publications-page .acf-a-la-une-grid.three-cards .acf-img,\n\t.acf-a-la-une-app.acf-publications-page .acf-a-la-une-grid.multiple-cards .acf-img {\n\t\twidth: 100% !important;\n\t\theight: 120px !important;\n\t\tborder-radius: 0 !important;\n\t\tobject-fit: cover !important;\n\t}\n\t\n\t.acf-a-la-une-app.acf-publications-page .acf-a-la-une-grid.two-cards .acf-body,\n\t.acf-a-la-une-app.acf-publications-page .acf-a-la-une-grid.three-cards .acf-body,\n\t.acf-a-la-une-app.acf-publications-page .acf-a-la-une-grid.multiple-cards .acf-body {\n\t\tflex: 1 !important;\n\t\tpadding: 0 !important;\n\t\tjustify-content: space-between !important;\n\t\tdisplay: flex !important;\n\t\tflex-direction: column !important;\n\t}\n\t\n\t.acf-a-la-une-app.acf-publications-page .acf-a-la-une-grid.two-cards .acf-header-group,\n\t.acf-a-la-une-app.acf-publications-page .acf-a-la-une-grid.three-cards .acf-header-group,\n\t.acf-a-la-une-app.acf-publications-page .acf-a-la-une-grid.multiple-cards .acf-header-group {\n\t\tpadding: 16px 16px 0 16px !important;\n\t}\n\t\n\t.acf-a-la-une-app.acf-publications-page .acf-a-la-une-grid.two-cards .acf-content-group,\n\t.acf-a-la-une-app.acf-publications-page .acf-a-la-une-grid.three-cards .acf-content-group,\n\t.acf-a-la-une-app.acf-publications-page .acf-a-la-une-grid.multiple-cards .acf-content-group {\n\t\tgap: 8px !important;\n\t\tpadding: 0 16px !important;\n\t}\n\t\n\t.acf-a-la-une-app.acf-publications-page .acf-a-la-une-grid.two-cards .acf-plus-holder,\n\t.acf-a-la-une-app.acf-publications-page .acf-a-la-une-grid.three-cards .acf-plus-holder,\n\t.acf-a-la-une-app.acf-publications-page .acf-a-la-une-grid.multiple-cards .acf-plus-holder {\n\t\tpadding: 0 16px 16px 16px !important;\n\t}\n\t\n\t.acf-a-la-une-app.acf-publications-page .acf-a-la-une-grid.two-cards .acf-title,\n\t.acf-a-la-une-app.acf-publications-page .acf-a-la-une-grid.three-cards .acf-title,\n\t.acf-a-la-une-app.acf-publications-page .acf-a-la-une-grid.multiple-cards .acf-title {\n\t\tfont-size: 22px !important;\n\t\tfont-weight: 600 !important;\n\t\tline-height: 24px !important;\n\t\tmargin: 0 !important;\n\t\tcolor: #333 !important;\n\t}\n\t\n\t.acf-a-la-une-app.acf-publications-page .acf-a-la-une-grid.two-cards .acf-excerpt,\n\t.acf-a-la-une-app.acf-publications-page .acf-a-la-une-grid.three-cards .acf-excerpt,\n\t.acf-a-la-une-app.acf-publications-page .acf-a-la-une-grid.multiple-cards .acf-excerpt {\n\t\tfont-size: 14px !important;\n\t\tfont-weight: 400 !important;\n\t\tline-height: 20px !important;\n\t\tmargin: 0 !important;\n\t\tcolor: #666 !important;\n\t}\n\t\n\t\/* Styles pour le carrousel (swiper) - copie exacte des styles 2+ cards *\/\n\t.acf-a-la-une-app.acf-publications-page .acf-a-la-une-swiper .swiper-slide {\n\t\theight: auto !important;\n\t\tdisplay: flex !important;\n\t\tflex-direction: column !important;\n\t}\n\t\n\t.acf-a-la-une-app.acf-publications-page .acf-a-la-une-swiper .acf-card-wrapper {\n\t\theight: 100% !important;\n\t\tdisplay: flex !important;\n\t\tflex-direction: column !important;\n\t}\n\t\n\t.acf-a-la-une-app.acf-publications-page .acf-a-la-une-swiper .acf-card {\n\t\tflex-direction: column !important;\n\t\tmin-height: 200px !important;\n\t\tdisplay: flex !important;\n\t\tbackground: #F5F6F7 !important;\n\t\tborder-radius: 12px !important;\n\t\toverflow: hidden !important;\n\t\tbox-shadow: 8px 8px 12px 0 rgba(231, 231, 233, .6) !important;\n\t\theight: 100% !important;\n\t}\n\t\n\t.acf-a-la-une-app.acf-publications-page .acf-a-la-une-swiper .acf-img-container {\n\t\theight: 120px !important;\n\t\tborder-radius: 0 !important;\n\t\toverflow: hidden !important;\n\t\tposition: relative !important;\n\t}\n\t\n\t.acf-a-la-une-app.acf-publications-page .acf-a-la-une-swiper .acf-img {\n\t\twidth: 100% !important;\n\t\theight: 120px !important;\n\t\tborder-radius: 0 !important;\n\t\tobject-fit: cover !important;\n\t}\n\t\n\t.acf-a-la-une-app.acf-publications-page .acf-a-la-une-swiper .acf-body {\n\t\tflex: 1 !important;\n\t\tpadding: 0 !important;\n\t\tjustify-content: space-between !important;\n\t\tdisplay: flex !important;\n\t\tflex-direction: column !important;\n\t}\n\t\n\t.acf-a-la-une-app.acf-publications-page .acf-a-la-une-swiper .acf-header-group {\n\t\tpadding: 16px 16px 0 16px !important;\n\t}\n\t\n\t.acf-a-la-une-app.acf-publications-page .acf-a-la-une-swiper .acf-content-group {\n\t\tgap: 8px !important;\n\t\tpadding: 0 16px !important;\n\t}\n\t\n\t.acf-a-la-une-app.acf-publications-page .acf-a-la-une-swiper .acf-plus-holder {\n\t\tpadding: 0 16px 16px 16px !important;\n\t}\n\t\n\t.acf-a-la-une-app.acf-publications-page .acf-a-la-une-swiper .acf-title {\n\t\tfont-size: 22px !important;\n\t\tfont-weight: 600 !important;\n\t\tline-height: 24px !important;\n\t\tmargin: 0 !important;\n\t\tcolor: #333 !important;\n\t}\n\t\n\t.acf-a-la-une-app.acf-publications-page .acf-a-la-une-swiper .acf-excerpt {\n\t\tfont-size: 14px !important;\n\t\tfont-weight: 400 !important;\n\t\tline-height: 20px !important;\n\t\tmargin: 0 !important;\n\t\tcolor: #666 !important;\n\t}\n\t\n\t\/* Styles suppl\u00e9mentaires pour le carrousel - copie des styles 2+ cards *\/\n\t.acf-a-la-une-app.acf-publications-page .acf-a-la-une-swiper .acf-date {\n\t\tfont-size: 12px !important;\n\t\tcolor: #666 !important;\n\t\tmargin: 0 !important;\n\t}\n\t\n\t.acf-a-la-une-app.acf-publications-page .acf-a-la-une-swiper .acf-name-publieur {\n\t\tfont-size: 14px !important;\n\t\tfont-weight: 600 !important;\n\t\tcolor: #333 !important;\n\t\tmargin: 0 !important;\n\t}\n\t\n\t.acf-a-la-une-app.acf-publications-page .acf-a-la-une-swiper .acf-entreprise-role {\n\t\tdisplay: flex !important;\n\t\tgap: 4px !important;\n\t}\n\t\n\t.acf-a-la-une-app.acf-publications-page .acf-a-la-une-swiper .acf-entreprise,\n\t.acf-a-la-une-app.acf-publications-page .acf-a-la-une-swiper .acf-role-publieur {\n\t\tfont-size: 12px !important;\n\t\tcolor: #666 !important;\n\t\tmargin: 0 !important;\n\t}\n\t\n\t.acf-a-la-une-app.acf-publications-page .acf-a-la-une-swiper .acf-ville-date {\n\t\tdisplay: flex !important;\n\t\tgap: 3px !important;\n\t\tmargin: 0 !important;\n\t}\n\t\n\t.acf-a-la-une-app.acf-publications-page .acf-a-la-une-swiper .acf-ville {\n\t\tfont-size: 12px !important;\n\t\tcolor: #666 !important;\n\t\tmargin: 0 !important;\n\t}\n\t\n\t.acf-a-la-une-app.acf-publications-page .acf-a-la-une-swiper .acf-ville::after {\n\t\tcontent: \", \" !important;\n\t}\n\t\n\t.acf-a-la-une-app.acf-publications-page .acf-a-la-une-swiper .acf-categories {\n\t\tdisplay: flex !important;\n\t\tgap: 8px !important;\n\t\tflex-wrap: wrap !important;\n\t\tmargin: 0 !important;\n\t}\n\t\n\t.acf-a-la-une-app.acf-publications-page .acf-a-la-une-swiper .acf-category {\n\t\tfont-size: 12px !important;\n\t\tpadding: 4px 8px !important;\n\t\tbackground-color:#cfd8dc80 !important;\n\t\tborder-radius: 100px !important;\n\t\tcolor: #666 !important;\n\t}\n\t\n\t\/* Styles sp\u00e9cifiques pour forcer l'alignement parfait du carrousel avec la grid *\/\n\t.acf-a-la-une-app.acf-publications-page .acf-a-la-une-swiper .swiper-wrapper {\n\t\talign-items: stretch !important;\n\t}\n\t\n\t.acf-a-la-une-app.acf-publications-page .acf-a-la-une-swiper .swiper-slide {\n\t\theight: auto !important;\n\t\tdisplay: flex !important;\n\t\tflex-direction: column !important;\n\t\talign-items: stretch !important;\n\t}\n\t\n\t\/* S'assurer que les cards du carrousel ont la m\u00eame hauteur *\/\n\t.acf-a-la-une-app.acf-publications-page .acf-a-la-une-swiper .acf-card {\n\t\theight: 100% !important;\n\t\tmin-height: 200px !important;\n\t}\n\t\n\t\/* Forcer les m\u00eames styles que la grid pour tous les \u00e9l\u00e9ments *\/\n\t\n\t.acf-a-la-une-app.acf-publications-page .acf-a-la-une-swiper .acf-name-publieur {\n\t\tfont-size: 14px !important;\n\t\tfont-weight: 600 !important;\n\t\tcolor: #333 !important;\n\t\tmargin: 0 !important;\n\t}\n\t\n\t.acf-a-la-une-app.acf-publications-page .acf-a-la-une-swiper .acf-entreprise-role {\n\t\tdisplay: flex !important;\n\t\tgap: 8px !important;\n\t}\n\t\n\t.acf-a-la-une-app.acf-publications-page .acf-a-la-une-swiper .acf-entreprise,\n\t.acf-a-la-une-app.acf-publications-page .acf-a-la-une-swiper .acf-role-publieur {\n\t\tfont-size: 12px !important;\n\t\tcolor: #666 !important;\n\t\tmargin: 0 !important;\n\t}\n\t\n\t.acf-a-la-une-app.acf-publications-page .acf-a-la-une-swiper .acf-ville-date {\n\t\tdisplay: flex !important;\n\t\tgap: 3px !important;\n\t\tmargin: 0 !important;\n\t}\n\t\n\t.acf-a-la-une-app.acf-publications-page .acf-a-la-une-swiper .acf-ville {\n\t\tfont-size: 12px !important;\n\t\tcolor: #666 !important;\n\t\tmargin: 0 !important;\n\t}\n\t\n\t.acf-a-la-une-app.acf-publications-page .acf-a-la-une-swiper .acf-ville::after {\n\t\tcontent: \", \" !important;\n\t}\n\t\n\t.acf-a-la-une-app.acf-publications-page .acf-a-la-une-swiper .acf-categories {\n\t\tdisplay: flex !important;\n\t\tgap: 8px !important;\n\t\tflex-wrap: wrap !important;\n\t\tmargin: 0 !important;\n\t}\n\t\n\t\n\t\/* Responsive pour les layouts des publications *\/\n\t@media (max-width: 1023px) {\n\t\t\/* 1 card avec image : layout vertical sur tablette *\/\n\t\t.acf-a-la-une-app.acf-publications-page .acf-a-la-une-grid.one-card.with-image .acf-card {\n\t\t\tflex-direction: column !important;\n\t\t}\n\t\t\n\t\t.acf-a-la-une-app.acf-publications-page .acf-a-la-une-grid.one-card.with-image .acf-img-container {\n\t\t\tflex: none !important;\n\t\t\theight: 120px !important;\n\t\t\tborder-radius: 0 !important;\n\t\t}\n\t\t\n\t\t.acf-a-la-une-app.acf-publications-page .acf-a-la-une-grid.one-card.with-image .acf-img {\n\t\t\theight: 120px !important;\n\t\t\tborder-radius: 0 !important;\n\t\t}\n\t\t\n\t\t.acf-a-la-une-app.acf-publications-page .acf-a-la-une-grid.one-card.with-image .acf-body {\n\t\t\tpadding: 16px !important;\n\t\t}\n\t\t\n\t\t\/* 2+ cards sur tablette *\/\n\t\t.acf-a-la-une-app.acf-publications-page .acf-a-la-une-grid.two-cards {\n\t\t\tgrid-template-columns: repeat(2, 1fr) !important;\n\t\t}\n\t\t\n\t\t.acf-a-la-une-app.acf-publications-page .acf-a-la-une-grid.three-cards {\n\t\t\tgrid-template-columns: repeat(2, 1fr) !important;\n\t\t}\n\t\t\n\t\t.acf-a-la-une-app.acf-publications-page .acf-a-la-une-grid.multiple-cards {\n\t\t\tgrid-template-columns: repeat(2, 1fr) !important;\n\t\t}\n\t\t\n\t}\n\t\n\t@media (max-width: 767px) {\n\t\t\/* Tous les layouts sur mobile : 1 colonne *\/\n\t\t.acf-a-la-une-app.acf-publications-page .acf-a-la-une-grid {\n\t\t\tgrid-template-columns: 1fr !important;\n\t\t}\n\t\t\n\t\t\/* Force l'application des styles pour les pages de publications en mobile *\/\n\t\t.acf-a-la-une-app.acf-publications-page .acf-a-la-une-grid .acf-card-wrapper {\n\t\t\twidth: 100% !important;\n\t\t}\n\t\t\n\t\t\/* Styles unifi\u00e9s pour TOUTES les cards en mobile (1, 2, 3+) *\/\n\t\t.acf-a-la-une-app.acf-publications-page .acf-a-la-une-grid .acf-card {\n\t\t\tflex-direction: column !important;\n\t\t\tmin-height: 200px !important;\n\t\t\tdisplay: flex !important;\n\t\t\tbackground: white !important;\n\t\t\tborder-radius: 12px !important;\n\t\t\toverflow: hidden !important;\n\t\t\tbox-shadow: 0 2px 8px rgba(0,0,0,0.1) !important;\n\t\t}\n\t\t\n\t\t.acf-a-la-une-app.acf-publications-page .acf-a-la-une-grid .acf-img-container {\n\t\t\theight: 170px !important;\n\t\t\tborder-radius: 12px 12px 0 0 !important;\n\t\t\toverflow: hidden !important;\n\t\t\tposition: relative !important;\n\t\t}\n\t\t\n\t\t.acf-a-la-une-app.acf-publications-page .acf-a-la-une-grid .acf-img {\n\t\t\twidth: 100% !important;\n\t\t\theight: 100% !important;\n\t\t\tborder-radius: 12px 12px 0 0 !important;\n\t\t\tobject-fit: cover !important;\n\t\t}\n\t\t\n\t\t.acf-a-la-une-app.acf-publications-page .acf-a-la-une-grid .acf-body {\n\t\t\tflex: 1 !important;\n\t\t\tpadding: 0 !important;\n\t\t\tjustify-content: space-between !important;\n\t\t\tdisplay: flex !important;\n\t\t\tflex-direction: column !important;\n\t\t}\n\t\t\n\t\t.acf-a-la-une-app.acf-publications-page .acf-a-la-une-grid .acf-header-group {\n\t\t\tpadding: 0 !important;\n\t\t}\n\t\t\n\t\t.acf-a-la-une-app.acf-publications-page .acf-a-la-une-grid .acf-content-group {\n\t\t\tgap: 8px !important;\n\t\t\tpadding: 0 !important;\n\t\t}\n\t\t\n\t\t.acf-a-la-une-app.acf-publications-page .acf-a-la-une-grid .acf-plus-holder {\n\t\t\tpadding: 0 !important;\n\t\t}\n\t\t\n\t\t.acf-a-la-une-app.acf-publications-page .acf-a-la-une-grid .acf-title {\n\t\t\tfont-size: 22px !important;\n\t\t\tfont-weight: 600 !important;\n\t\t\tline-height: 24px !important;\n\t\t\tmargin: 0 !important;\n\t\t\tcolor: #333 !important;\n\t\t}\n\t\t\n\t\t.acf-a-la-une-app.acf-publications-page .acf-a-la-une-grid .acf-excerpt {\n\t\t\tfont-size: 14px !important;\n\t\t\tfont-weight: 400 !important;\n\t\t\tline-height: 20px !important;\n\t\t\tmargin: 0 !important;\n\t\t\tcolor: #666 !important;\n\t\t}\n\t\t\n\t\t\/* Styles suppl\u00e9mentaires pour le mobile - pages de publications *\/\n\t\t.acf-a-la-une-app.acf-publications-page .acf-a-la-une-grid .acf-date {\n\t\t\tfont-size: 12px !important;\n\t\t\tcolor: #666 !important;\n\t\t\tmargin: 0 !important;\n\t\t}\n\t\t\n\t\t.acf-a-la-une-app.acf-publications-page .acf-a-la-une-grid .acf-name-publieur {\n\t\t\tfont-size: 14px !important;\n\t\t\tfont-weight: 600 !important;\n\t\t\tcolor: #333 !important;\n\t\t\tmargin: 0 !important;\n\t\t}\n\t\t\n\t\t.acf-a-la-une-app.acf-publications-page .acf-a-la-une-grid .acf-entreprise-role {\n\t\t\tdisplay: flex !important;\n\t\t\tgap: 4px !important;\n\t\t}\n\t\t\n\t\t.acf-a-la-une-app.acf-publications-page .acf-a-la-une-grid .acf-entreprise,\n\t\t.acf-a-la-une-app.acf-publications-page .acf-a-la-une-grid .acf-role-publieur {\n\t\t\tfont-size: 12px !important;\n\t\t\tcolor: #666 !important;\n\t\t\tmargin: 0 !important;\n\t\t}\n\t\t\n\t\t.acf-a-la-une-app.acf-publications-page .acf-a-la-une-grid .acf-ville-date {\n\t\t\tdisplay: flex !important;\n\t\t\tgap: 3px !important;\n\t\t\tmargin: 0 !important;\n\t\t}\n\t\t\n\t\t.acf-a-la-une-app.acf-publications-page .acf-a-la-une-grid .acf-ville {\n\t\t\tfont-size: 12px !important;\n\t\t\tcolor: #666 !important;\n\t\t\tmargin: 0 !important;\n\t\t}\n\t\t\n\t\t.acf-a-la-une-app.acf-publications-page .acf-a-la-une-grid .acf-ville::after {\n\t\t\tcontent: \", \" !important;\n\t\t}\n\t\t\n\t\t.acf-a-la-une-app.acf-publications-page .acf-a-la-une-grid .acf-categories {\n\t\t\tdisplay: flex !important;\n\t\t\tgap: 8px !important;\n\t\t\tflex-wrap: wrap !important;\n\t\t\tmargin: 0 !important;\n\t\t}\n\t\t\n\t\t.acf-a-la-une-app.acf-publications-page .acf-a-la-une-grid .acf-category {\n\t\t\tfont-size: 12px !important;\n\t\t\tpadding: 4px 8px !important;\n\t\t\tbackground-color: #f0f0f0 !important;\n\t\t\tborder-radius: 4px !important;\n\t\t\tcolor: #666 !important;\n\t\t}\n\t\t\n\t}\n\t<\/style>\n\n\t<script>\n\tdocument.addEventListener(\"DOMContentLoaded\", function () {\n\t\tdocument.querySelectorAll(\".acf-a-la-une-app\").forEach((app) => {\n\t\t\tconst cpt = app.dataset.cpt;\n\t\t\tconst lang = app.dataset.lang || (window.location.pathname.indexOf('\/en') !== -1 ? 'en' : 'fr');\n\t\t\tconst gridEl = app.querySelector(\".acf-a-la-une-grid\");\n\t\t\tconst swiperContainer = app.querySelector(\".acf-a-la-une-swiper\");\n\t\t\tconst swiperWrapper = swiperContainer.querySelector(\".swiper-wrapper\");\n\t\t\tlet swiper = null;\n\n\t\t\t\/\/ Fonction pour obtenir le message \"aucun r\u00e9sultat\" selon la page\n\t\t\tfunction getNoContentMessage() {\n\t\t\t\tconst path = window.location.pathname;\n\t\t\t\t\n\t\t\t\t\/\/ D\u00e9tection de la page selon l'URL\n\t\t\t\tif (path.includes('\/evenements') || path.includes('\/events')) {\n\t\t\t\t\treturn lang === 'en' ? 'No event found' : 'Aucun \u00e9v\u00e9nement trouv\u00e9';\n\t\t\t\t} else if (path.includes('\/nouvelles') || path.includes('\/news')) {\n\t\t\t\t\treturn lang === 'en' ? 'No news found' : 'Aucune nouvelle trouv\u00e9e';\n\t\t\t\t} else if (path.includes('\/communiques-de-presse') || path.includes('\/press-releases')) {\n\t\t\t\t\treturn lang === 'en' ? 'No press release found' : 'Aucun communiqu\u00e9 de presse trouv\u00e9';\n\t\t\t\t} else if (path.includes('\/rapports') || path.includes('\/reports')) {\n\t\t\t\t\treturn lang === 'en' ? 'No report found' : 'Aucun rapport trouv\u00e9';\n\t\t\t\t} else if (path.includes('\/valorisations') || path.includes('\/valuation')) {\n\t\t\t\t\treturn lang === 'en' ? 'No valuation found' : 'Aucune valorisation trouv\u00e9e';\n\t\t\t\t}\n\t\t\t\t\n\t\t\t\t\/\/ Pas de fallback voulu\n\t\t\t\treturn '';\n\t\t\t}\n\n\t\t\t\/\/ Libell\u00e9s dynamiques\n\t\t\tconst LABELS = {\n\t\t\t\tlearnMore: lang === 'en' ? 'Learn more' : 'En savoir plus',\n\t\t\t\tnoImage:   lang === 'en' ? 'No image'   : 'Aucune image',\n\t\t\t\tnoContent: getNoContentMessage(),\n\t\t\t};\n\n\t\t\t\/\/ Utils\n\t\t\tfunction normalize(str) {\n\t\t\t\treturn (str || \"\").toString().normalize(\"NFD\").replace(\/[\\u0300-\\u036f]\/g, \"\").toLowerCase();\n\t\t\t}\n\n\t\t\t\/\/ Format date selon langue : \"16 avril 2026\" (FR) ou \"April 16 2026\" (EN). Si ville\/info avant : \", \"\n\t\t\tfunction formatDateFull(iso) {\n\t\t\t\tconst d = new Date(iso);\n\t\t\t\tif (lang === 'en') {\n\t\t\t\t\tconst m = d.toLocaleString('en-US', { month: 'long' });\n\t\t\t\t\treturn `${m} ${String(d.getDate()).padStart(2, '0')} ${d.getFullYear()}`;\n\t\t\t\t}\n\t\t\t\treturn d.toLocaleDateString(\"fr-FR\", { day: \"2-digit\", month: \"long\", year: \"numeric\" });\n\t\t\t}\n\n\t\t\t\/\/ R\u00e9cup\u00e9rer cat\u00e9gories (exclut uncategorized id=1\/84)\n\t\t\tfunction getPostCategories(post) {\n\t\t\t\t\/\/ Si _embedded pr\u00e9sent\n\t\t\t\tif (post._embedded && post._embedded['wp:term']) {\n\t\t\t\t\tconst out = [];\n\t\t\t\t\tpost._embedded['wp:term'].forEach(group => {\n\t\t\t\t\t\tgroup.forEach(term => {\n\t\t\t\t\t\t\tif (term.taxonomy === 'category' && term.id !== 1 && term.id !== 84) {\n\t\t\t\t\t\t\t\tout.push(term.name);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t});\n\t\t\t\t\t});\n\t\t\t\t\treturn Promise.resolve(out);\n\t\t\t\t}\n\t\t\t\t\/\/ Fallback: fetch single avec _embed\n\t\t\t\treturn fetch(`\/wp-json\/wp\/v2\/${cpt}\/${post.id}?lang=${lang}&acf_format=standard&_embed=wp:term`)\n\t\t\t\t\t.then(r => r.ok ? r.json() : null)\n\t\t\t\t\t.then(fp => {\n\t\t\t\t\t\tif (!fp || !fp._embedded || !fp._embedded['wp:term']) return [];\n\t\t\t\t\t\tconst out = [];\n\t\t\t\t\t\tfp._embedded['wp:term'].forEach(group => {\n\t\t\t\t\t\t\tgroup.forEach(term => {\n\t\t\t\t\t\t\t\tif (term.taxonomy === 'category' && term.id !== 1 && term.id !== 84) {\n\t\t\t\t\t\t\t\t\tout.push(term.name);\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t});\n\t\t\t\t\t\t});\n\t\t\t\t\t\treturn out;\n\t\t\t\t\t})\n\t\t\t\t\t.catch(() => []);\n\t\t\t}\n\n\/\/ V\u00e9rifier si le post a le tag \"a-la-une\" (id=33) ou \"headlines\" (id=52)\nfunction hasALaUneTag(post) {\n\t\/\/ 1) Champ natif 'tags' si pr\u00e9sent (plus fiable et l\u00e9ger)\n\tif (Array.isArray(post.tags) && post.tags.length) {\n\t\treturn post.tags.includes(33) || post.tags.includes(52);\n\t}\n\t\/\/ 2) Fallback via _embedded wp:term\n\tif (post._embedded && post._embedded['wp:term']) {\n\t\tfor (const group of post._embedded['wp:term']) {\n\t\t\tfor (const term of group) {\n\t\t\t\tif (term.taxonomy === 'post_tag' && (term.id === 33 || term.id === 52)) {\n\t\t\t\t\treturn true;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\treturn false;\n}\n\n\t\t\tfunction getPostVille(post) {\n\t\t\t\tconst acf = post.acf || {};\n\t\t\t\tconst ville = acf.lieu_de_levenement || acf.ville_de_levenement || \"\";\n\t\t\t\tif (!ville) return \"\";\n\t\t\t\tconst clean = ville.endsWith(',') ? ville.slice(0,-1) : ville;\n\t\t\t\treturn clean.trim() ? (clean + (lang === 'en' ? ' ' : ' ')) : \"\";\n\t\t\t}\n\n\t\t\tfunction getPostDate(post) {\n\t\t\t\tif (post.acf && post.acf.date_devenement) {\n\t\t\t\t\tconst raw = post.acf.date_devenement;\n\t\t\t\t\tif (typeof raw === 'string' && raw.match(\/^\\\\d{8}$\/)) {\n\t\t\t\t\t\tconst y = raw.substring(0,4), m = raw.substring(4,6), d = raw.substring(6,8);\n\t\t\t\t\t\tconst dt = new Date(y, m-1, d);\n\t\t\t\t\t\treturn isNaN(dt.getTime()) ? formatDateFull(post.date) : formatDateFull(dt.toISOString());\n\t\t\t\t\t}\n\t\t\t\t\tconst dt = new Date(raw);\n\t\t\t\t\treturn isNaN(dt.getTime()) ? formatDateFull(post.date) : formatDateFull(dt.toISOString());\n\t\t\t\t}\n\t\t\t\treturn formatDateFull(post.date);\n\t\t\t}\n\n\t\t\tfunction getPostNomPrenom(post) {\n\t\t\t\treturn (post.acf && post.acf.nom_prenom) ? post.acf.nom_prenom : \"\";\n\t\t\t}\n\n\t\t\t\/\/ Fonctions pour r\u00e9cup\u00e9rer les champs ACF sp\u00e9cifiques aux publications\n\t\t\tfunction getPostACF(post, fieldName) {\n\t\t\t\treturn (post.acf && post.acf[fieldName]) ? post.acf[fieldName] : \"\";\n\t\t\t}\n\n\t\t\tasync function getPostACFTranslated(post, fieldName) {\n\t\t\t\tif (!post.acf || !post.acf[fieldName]) return \"\";\n\t\t\t\tconst field = post.acf[fieldName];\n\t\t\t\tif (typeof field === 'string') return field;\n\t\t\t\tif (typeof field === 'object' && field[lang]) return field[lang];\n\t\t\t\treturn \"\";\n\t\t\t}\n\n\t\t\tfunction getLang() {\n\t\t\t\treturn lang;\n\t\t\t}\n\n\t\t\tfunction getPostImage(post) {\n\t\t\t\tif (post._embedded && post._embedded[\"wp:featuredmedia\"] && post._embedded[\"wp:featuredmedia\"][0]) {\n\t\t\t\t\tconst media = post._embedded[\"wp:featuredmedia\"][0];\n\t\t\t\t\treturn Promise.resolve(media.source_url || media.guid?.rendered || media.url || \"\");\n\t\t\t\t}\n\t\t\t\tif (post.featured_media) {\n\t\t\t\t\treturn fetch(`\/wp-json\/wp\/v2\/media\/${post.featured_media}?_cb=${Date.now()}`)\n\t\t\t\t\t\t.then(r => r.ok ? r.json() : null)\n\t\t\t\t\t\t.then(m => (m && (m.source_url || \"\")) || \"\")\n\t\t\t\t\t\t.catch(() => \"\");\n\t\t\t\t}\n\t\t\t\treturn Promise.resolve(\"\");\n\t\t\t}\n\n\t\t\tasync function makeCardHTML(p, totalCards = 1) {\n\t\t\t\tconst [img, categories] = await Promise.all([ getPostImage(p), getPostCategories(p) ]);\n\t\t\t\tconst ville = getPostVille(p);\n\t\t\t\tconst dateLabel = getPostDate(p);\n\t\t\t\tconst nomPrenom = getPostNomPrenom(p);\n\n\t\t\t\t\/\/ D\u00e9tecter si c'est une page de publications\n\t\t\t\tconst isPublications = window.location.pathname.includes('\/publications') || \n\t\t\t\t\twindow.location.pathname.includes('\/en\/publications');\n\t\t\t\t\n\t\t\t\t\/\/ R\u00e9cup\u00e9rer les champs ACF sp\u00e9cifiques aux publications\n\t\t\t\tlet namePublieur = '';\n\t\t\t\tlet entreprise = '';\n\t\t\t\tlet roleDuPublieur = '';\n\t\t\t\t\n\t\t\t\tif (isPublications) {\n\t\t\t\t\tconst currentLang = getLang();\n\t\t\t\t\t\n\t\t\t\t\t\/\/ R\u00e9cup\u00e9rer les champs ACF pour les publications (version synchrone)\n\t\t\t\t\tnamePublieur = currentLang === 'en' ? \n\t\t\t\t\t\t(getPostACF(p, 'name-publieur') || getPostACF(p, 'name_publieur') || getPostACF(p, 'nom-publieur') || getPostACF(p, 'nom_publieur')) : \n\t\t\t\t\t\t(getPostACF(p, 'name-publieur') || getPostACF(p, 'name_publieur') || getPostACF(p, 'nom-publieur') || getPostACF(p, 'nom_publieur'));\n\t\t\t\t\t\t\n\t\t\t\t\tentreprise = currentLang === 'en' ? \n\t\t\t\t\t\t(getPostACF(p, 'entreprise') || getPostACF(p, 'company') || getPostACF(p, 'societe')) : \n\t\t\t\t\t\t(getPostACF(p, 'entreprise') || getPostACF(p, 'company') || getPostACF(p, 'societe'));\n\t\t\t\t\t\t\n\t\t\t\t\troleDuPublieur = currentLang === 'en' ? \n\t\t\t\t\t\t(getPostACF(p, 'role-du-publieur') || getPostACF(p, 'role_du_publieur') || getPostACF(p, 'role-publieur') || getPostACF(p, 'role_publieur') || getPostACF(p, 'poste')) : \n\t\t\t\t\t\t(getPostACF(p, 'role-du-publieur') || getPostACF(p, 'role_du_publieur') || getPostACF(p, 'role-publieur') || getPostACF(p, 'role_publieur') || getPostACF(p, 'poste'));\n\t\t\t\t}\n\n\t\t\t\tconst cats = categories.filter(c => {\n\t\t\t\t\tconst t = (c||'').toLowerCase();\n\t\t\t\t\treturn !(t.includes('uncategorized') || t.includes('non cat\u00e9goris\u00e9') || t.includes('non categorise'));\n\t\t\t\t});\n\t\t\t\tconst categoriesHTML = cats.length\n\t\t\t\t\t? `<div style=\"display:flex; gap:8px; flex-wrap:wrap;\" class=\"acf-categories\">${cats.map(cat => `<span class=\"acf-category\">${cat}<\/span>`).join(\"\")}<\/div>`\n\t\t\t\t\t: \"\";\n\n\t\t\t\tconst nomPrenomHTML = nomPrenom ? `<div class=\"acf-nom-prenom\">${nomPrenom}<\/div>` : \"\";\n\t\t\t\t\n\t\t\t\t\/\/ HTML sp\u00e9cifique pour les publications\n\t\t\t\tif (isPublications) {\n\t\t\t\t\t\/\/ HTML des informations publieur\n\t\t\t\t\tconst publieurHTML = namePublieur ? `\n\t\t\t\t\t\t<div class=\"acf-publieur-info\">\n\t\t\t\t\t\t\t<div class=\"acf-name-publieur\">${namePublieur}<\/div>\n\t\t\t\t\t\t\t<div class=\"acf-entreprise-role\">\n\t\t\t\t\t\t\t\t${entreprise ? `<div class=\"acf-entreprise\">${entreprise}<\/div>` : ''}\n\t\t\t\t\t\t\t\t${roleDuPublieur ? `<div class=\"acf-role-publieur\">${roleDuPublieur}<\/div>` : ''}\n\t\t\t\t\t\t\t<\/div>\n\t\t\t\t\t\t<\/div>\n\t\t\t\t\t` : '';\n\t\t\t\t\t\n\t\t\t\t\t\/\/ Gestion de l'excerpt pour les publications\n\t\t\t\t\tlet excerptText = p.excerpt?.rendered || \"\";\n\t\t\t\t\tlet excerptHTML = '';\n\t\t\t\t\t\n\t\t\t\t\t\/\/ V\u00e9rifier si on a un excerpt valide\n\t\t\t\t\tconst tempDiv = document.createElement('div');\n\t\t\t\t\ttempDiv.innerHTML = excerptText;\n\t\t\t\t\tconst cleanText = tempDiv.textContent || tempDiv.innerText || '';\n\t\t\t\t\tconst hasValidExcerpt = cleanText.trim().length > 0;\n\t\t\t\t\t\n\t\t\t\t\tif (hasValidExcerpt) {\n\t\t\t\t\t\t\/\/ Limitation de l'excerpt UNIQUEMENT pour les pages de publications\n\t\t\t\t\t\tif (isPublications) {\n\t\t\t\t\t\t\t\/\/ D\u00e9terminer la limite selon le nombre de cards et la pr\u00e9sence d'image\n\t\t\t\t\t\t\tlet characterLimit = 0;\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\tif (img) {\n\t\t\t\t\t\t\t\t\/\/ Avec image : limiter selon le nombre de cards\n\t\t\t\t\t\t\t\tif (totalCards === 1) {\n\t\t\t\t\t\t\t\t\tcharacterLimit = 206;\n\t\t\t\t\t\t\t\t} else if (totalCards === 2) {\n\t\t\t\t\t\t\t\t\tcharacterLimit = 186;\n\t\t\t\t\t\t\t\t} else if (totalCards === 3) {\n\t\t\t\t\t\t\t\t\tcharacterLimit = 166;\n\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\tcharacterLimit = 166; \/\/ Par d\u00e9faut pour 3+ cards\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\/\/ Sans image : afficher tout l'excerpt\n\t\t\t\t\t\t\t\tcharacterLimit = cleanText.length;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\/\/ Appliquer la limite\n\t\t\t\t\t\t\tif (cleanText.length > characterLimit) {\n\t\t\t\t\t\t\t\texcerptText = cleanText.substring(0, characterLimit) + '...';\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\texcerptText = cleanText;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\/\/ Pour les autres pages : excerpt complet\n\t\t\t\t\t\t\texcerptText = cleanText;\n\t\t\t\t\t\t}\n\t\t\t\t\t\t\n\t\t\t\t\t\texcerptHTML = `<div class=\"acf-excerpt\">${excerptText}<\/div>`;\n\t\t\t\t\t}\n\n\t\t\t\t\t\/\/ Si page publications et PAS d'excerpt, forcer la hauteur 100% sur l'image et son conteneur\n\t\t\t\t\tlet imageContainerStyle = '';\n\t\t\t\t\tlet imgStyle = '';\n\t\t\t\t\tif (isPublications && !hasValidExcerpt && img) {\n\t\t\t\t\t\timageContainerStyle = ' style=\"height:100% !important;\"';\n\t\t\t\t\t\timgStyle = ' style=\"height:100% !important;width:100%;object-fit:cover;\"';\n\t\t\t\t\t}\n\t\t\t\t\t\n\t\t\t\t\t\/\/ Classe pour masquer le conteneur d'image si pas d'image\n\t\t\t\t\tconst imageContainerClass = img ? 'acf-img-container' : 'acf-img-container acf-no-image';\n\t\t\t\t\t\n\t\t\t\t\tconst villeHTML = ville ? `<div class=\"acf-ville\">${ville}<\/div>` : '';\n\t\t\t\t\t\n\t\t\t\t\t\/\/ Structure diff\u00e9rente selon le nombre de cards\n\t\t\t\t\tif (totalCards === 1) {\n\t\t\t\t\t\t\/\/ 1 card : structure sp\u00e9ciale avec titre et publieur group\u00e9s\n\t\t\t\t\t\t\tconst finalHTML = `\n\t\t\t\t\t\t\t<div class=\"acf-card-wrapper\">\n\t\t\t\t\t\t\t\t<div class=\"acf-card\" data-post-id=\"${p.id}\" onclick=\"window.location.href='${p.link}'\">\n\t\t\t\t\t\t\t\t\t\t<div class=\"${imageContainerClass}\"${imageContainerStyle}>\n\t\t\t\t\t\t\t\t\t\t\t${img ? `<img class=\\\"acf-img\\\" src=\\\"${img}\\\" alt=\\\"${p.title?.rendered || ''}\\\"${imgStyle}>` : ''}\n\t\t\t\t\t\t\t\t\t\t${nomPrenomHTML}\n\t\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t\t\t\t\t\t<div class=\"acf-body\">\n\t\t\t\t\t\t\t\t\t\t<div class=\"acf-date-title-excerpt\">\n\t\t\t\t\t\t\t\t\t\t\t<div class=\"acf-date\">${ville ? ville.trim() + ', ' : ''}${dateLabel}<\/div>\n\t\t\t\t\t\t\t\t\t\t\t<div class=\"acf-title-publieur-group\">\n\t\t\t\t\t\t\t\t\t\t\t\t<h3 class=\"acf-title\">${p.title?.rendered || \"\"}<\/h3>\n\t\t\t\t\t\t\t\t\t\t\t\t${publieurHTML}\n\t\t\t\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t\t\t\t\t\t\t\t${categoriesHTML}\n\t\t\t\t\t\t\t\t\t\t\t${excerptHTML}\n\t\t\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t\t\t\t\t\t\t<div class=\"acf-plus\" data-post-id=\"${p.id}\">...<\/div>\n\t\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t\t\t\t<\/div>\n\t\t\t\t\t\t`;\n\t\t\t\t\t\treturn finalHTML;\n\t\t\t\t\t} else {\n\t\t\t\t\t\t\/\/ 2+ cards : structure standard comme dans \"ici\"\n\t\t\t\t\t\t\tconst finalHTML = `\n\t\t\t\t\t\t\t<div class=\"acf-card-wrapper\">\n\t\t\t\t\t\t\t\t<div class=\"acf-card\" data-post-id=\"${p.id}\" onclick=\"window.location.href='${p.link}'\">\n\t\t\t\t\t\t\t\t\t<div class=\"acf-body\">\n\t\t\t\t\t\t\t\t\t\t<div class=\"acf-header-group\">\n\t\t\t\t\t\t\t\t\t\t\t<div class=\"acf-title\">${p.title?.rendered || \"\"}<\/div>\n\t\t\t\t\t\t\t\t\t\t\t${publieurHTML}\n\t\t\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t\t\t\t\t\t\t\t<div class=\"${imageContainerClass}\"${imageContainerStyle}>\n\t\t\t\t\t\t\t\t\t\t\t\t${img ? `<img class=\\\"acf-img\\\" src=\\\"${img}\\\" alt=\\\"${p.title?.rendered || ''}\\\"${imgStyle}>` : ''}\n\t\t\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t\t\t\t\t\t\t<div class=\"acf-content-group\">\n\t\t\t\t\t\t\t\t\t\t\t<div class=\"acf-ville-date\">\n\t\t\t\t\t\t\t\t\t\t\t\t${villeHTML}\n\t\t\t\t\t\t\t\t\t\t\t\t<div class=\"acf-date\">${dateLabel}<\/div>\n\t\t\t\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t\t\t\t\t\t\t\t${categoriesHTML}\n\t\t\t\t\t\t\t\t\t\t\t${excerptHTML}\n\t\t\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t\t\t\t\t\t\t<div class=\"acf-plus-holder\" data-post-id=\"${p.id}\">\n\t\t\t\t\t\t\t\t\t\t\t<div class=\"acf-plus\" data-post-id=\"${p.id}\">...<\/div>\n\t\t\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t\t\t\t<\/div>\n\t\t\t\t\t\t`;\n\t\t\t\t\t\treturn finalHTML;\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\t\/\/ HTML standard pour les autres types de contenu\n\t\t\t\tconst imageHTML = img\n\t\t\t\t\t? `<img decoding=\"async\" class=\"acf-img\" src=\"${img}\" alt=\"\">`\n\t\t\t\t\t: `<div class=\"acf-img-placeholder\" style=\"width: 100%; height: 170px; background: #E0E0E0; display: flex; align-items: center; justify-content: center; border-radius: 12px 12px 0 0; color: #999;\">${LABELS.noImage}<\/div>`;\n\n\t\t\t\treturn `\n\t\t\t\t\t<div class=\"acf-card-wrapper\">\n\t\t\t\t\t\t<a href=\"${p.link}\" class=\"acf-card\">\n\t\t\t\t\t\t\t<div class=\"acf-img-container\">\n\t\t\t\t\t\t\t\t${imageHTML}\n\t\t\t\t\t\t\t\t${nomPrenomHTML}\n\t\t\t\t\t\t\t<\/div>\n\t\t\t\t\t\t\t<div class=\"acf-body\">\n\t\t\t\t\t\t\t\t<div class=\"acf-date-title-excerpt\">\n\t\t\t\t\t\t\t\t\t<div class=\"acf-date\">${ville ? ville.trim() + ', ' : ''}${dateLabel}<\/div>\n\t\t\t\t\t\t\t\t\t${categoriesHTML}\n\t\t\t\t\t\t\t\t\t<h3 class=\"acf-title\">${p.title.rendered}<\/h3>\n\t\t\t\t\t\t\t\t\t<p class=\"acf-excerpt\">${p.excerpt.rendered}<\/p>\n\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t\t\t\t\t<div class=\"acf-plus\" data-post-id=\"${p.id}\">...<\/div>\n\t\t\t\t\t\t\t<\/div>\n\t\t\t\t\t\t<\/a>\n\t\t\t\t\t<\/div>\n\t\t\t\t`;\n\t\t\t}\n\n\t\t\t\/\/ Fetch posts (bilingue, limite, embed, ACF standard) + filtre tag c\u00f4t\u00e9 API\nasync function fetchPosts() {\n\ttry {\n\t\tconst TAG_ID = (lang === 'en') ? 52 : 33; \/\/ EN=headlines(52) \/ FR=a-la-une(33)\n\t\tconst url =\n\t\t\t`\/wp-json\/wp\/v2\/${cpt}` +\n\t\t\t`?lang=${lang}` +\n\t\t\t`&per_page=100` +\n\t\t\t`&acf_format=standard` +\n\t\t\t`&_embed=wp:featuredmedia,wp:term` +\n\t\t\t`&tags=${TAG_ID}` + \/\/ filtre serveur \"\u00e0 la une\"\n\t\t\t`&_fields=id,title,excerpt,link,date,acf,featured_media,_embedded,tags` + \/\/ inclure 'tags'\n\t\t\t`&_cb=${Date.now()}`;\n\n\t\tconst response = await fetch(url, { cache: 'no-store', headers: { 'Cache-Control': 'no-cache' } });\n\t\tif (!response.ok) return [];\n\n\t\tconst posts = await response.json();\n\n\t\t\/\/ Fallback s\u00e9curit\u00e9 au cas o\u00f9 le filtre serveur serait inop\u00e9rant\n\t\tconst aLaUneOnly = posts.filter(p => hasALaUneTag(p));\n\n\t\t\/\/ Exclure les posts dont toutes les cat\u00e9gories sont uncategorized\n\t\treturn aLaUneOnly.filter(p => {\n\t\t\tconst groups = (p._embedded && p._embedded['wp:term']) ? p._embedded['wp:term'] : [];\n\t\t\tlet hasValid = false;\n\t\t\tgroups.forEach(g => g.forEach(t => {\n\t\t\t\tif (t.taxonomy === 'category' && t.id !== 1 && t.id !== 84) hasValid = true;\n\t\t\t}));\n\t\t\treturn hasValid || !groups.length;\n\t\t});\n\t} catch {\n\t\treturn [];\n\t}\n}\n\n\t\t\tfunction destroySwiper() { if (swiper) { swiper.destroy(true,true); swiper = null; } }\n\n\t\t\t\/\/ Version sp\u00e9ciale de hydrateDynamicButtons pour les publications\n\t\t\tasync function hydrateDynamicButtonsForPublications(container) {\n\t\t\t\tconst buttons = container.querySelectorAll('.acf-plus[data-post-id]');\n\t\t\t\t\n\t\t\t\tfor (const btn of buttons) {\n\t\t\t\t\tconst postId = btn.dataset.postId;\n\t\t\t\t\tif (!postId) continue;\n\t\t\t\t\t\n\t\t\t\t\ttry {\n\t\t\t\t\t\tconst fd = new FormData();\n\t\t\t\t\t\tfd.append('action', 'get_button_plus_dynamique');\n\t\t\t\t\t\tfd.append('post_id', postId);\n\t\t\t\t\t\tfd.append('text', '');\n\t\t\t\t\t\tfd.append('custom_class', 'acf-plus');\n\t\t\t\t\t\tfd.append('lang', getLang());\n\t\t\t\t\t\t\n\t\t\t\t\t\tconst resp = await fetch('\/wp-admin\/admin-ajax.php', { \n\t\t\t\t\t\t\tmethod: 'POST', \n\t\t\t\t\t\t\tbody: fd, \n\t\t\t\t\t\t\tcredentials: 'same-origin', \n\t\t\t\t\t\t\tcache: 'no-store', \n\t\t\t\t\t\t\theaders: { 'Cache-Control': 'no-cache' } \n\t\t\t\t\t\t});\n\t\t\t\t\t\t\n\t\t\t\t\t\tif (resp.ok) {\n\t\t\t\t\t\t\tconst plusHTML = await resp.text();\n\t\t\t\t\t\t\tif (plusHTML && plusHTML.trim() !== '' && plusHTML.includes('button-plus-dynamique')) {\n\t\t\t\t\t\t\t\tbtn.outerHTML = plusHTML;\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\/\/ Fallback si pas de r\u00e9ponse valide\n\t\t\t\t\t\t\t\tconst buttonText = getLang() === 'en' ? 'Learn more' : 'En savoir plus';\n\t\t\t\t\t\t\t\tbtn.outerHTML = `\n\t\t\t\t\t\t\t\t\t<div class=\"button-plus-dynamique acf-plus\" data-post-id=\"${postId}\">\n\t\t\t\t\t\t\t\t\t\t<div class=\"plus-icon\">\n\t\t\t\t\t\t\t\t\t\t\t<svg width=\"21\" height=\"22\" viewBox=\"0 0 21 22\" fill=\"none\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\">\n\t\t\t\t\t\t\t\t\t\t\t\t<path d=\"M10.5 1.5V20.5M1 11H20\" stroke=\"#D30C8C\" stroke-width=\"1.56\" stroke-miterlimit=\"10\" stroke-linecap=\"round\"\/>\n\t\t\t\t\t\t\t\t\t\t\t<\/svg>\n\t\t\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t\t\t\t\t\t\t<div class=\"text-arrow\">\n\t\t\t\t\t\t\t\t\t\t\t<span>${buttonText}<\/span>\n\t\t\t\t\t\t\t\t\t\t\t<svg width=\"14\" height=\"13\" viewBox=\"0 0 14 13\" fill=\"none\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\">\n\t\t\t\t\t\t\t\t\t\t\t\t<path d=\"M13.6998 6.80031L8.49413 12.0059C8.41448 12.0856 8.30645 12.1303 8.19381 12.1303C8.08116 12.1303 7.97313 12.0856 7.89348 12.0059C7.81383 11.9263 7.76908 11.8183 7.76908 11.7056C7.76908 11.593 7.81383 11.4849 7.89348 11.4053L12.3743 6.92445L0.585584 6.92445C0.475604 6.92057 0.371424 6.87415 0.294992 6.79497C0.218561 6.71579 0.175845 6.61004 0.175845 6.49999C0.175845 6.38994 0.218561 6.28419 0.294992 6.20501C0.371424 6.12583 0.475605 6.07941 0.585586 6.07553L12.3743 6.07553L7.89348 1.59469C7.81383 1.51504 7.76908 1.40701 7.76908 1.29436C7.76908 1.18172 7.81383 1.07369 7.89348 0.99404C7.97313 0.914389 8.08116 0.869641 8.19381 0.869641C8.30645 0.869641 8.41448 0.914389 8.49413 0.99404L13.6998 6.19967C13.7794 6.27932 13.8242 6.38735 13.8242 6.49999C13.8242 6.61263 13.7794 6.72066 13.6998 6.80031Z\" fill=\"#D30C8C\"\/>\n\t\t\t\t\t\t\t\t\t\t\t<\/svg>\n\t\t\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t\t\t\t\t`;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t} catch (e) {\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tasync function renderGrid(posts) {\n\t\t\t\tswiperContainer.style.display = \"none\";\n\t\t\t\tgridEl.style.display = \"grid\";\n\t\t\t\t\n\t\t\t\tconst totalCards = posts.length;\n\t\t\t\tconst cardsHTML = await Promise.all(posts.map(p => makeCardHTML(p, totalCards)));\n\t\t\t\tconst finalHTML = cardsHTML.join(\"\");\n\t\t\t\t\n\t\t\t\tgridEl.innerHTML = finalHTML;\n\n\t\t\t\tgridEl.className = \"acf-a-la-une-grid\";\n\t\t\t\t\n\t\t\t\t\/\/ Logique sp\u00e9ciale UNIQUEMENT pour les pages de publications\n\t\t\t\tconst isPublications = window.location.pathname.includes('\/publications') || \n\t\t\t\t\twindow.location.pathname.includes('\/en\/publications');\n\t\t\t\t\n\t\t\t\tif (isPublications) {\n\t\t\t\t\t\n\t\t\t\t\t\/\/ Debug du carrousel - essayer plusieurs fois\n\t\t\t\t\tconst debugSwiper = () => {\n\t\t\t\t\t\tconst swiperContainer = app.querySelector('.acf-a-la-une-swiper');\n\t\t\t\t\t\t\n\t\t\t\t\t\tif (swiperContainer) {\n\t\t\t\t\t\t\tconst cards = swiperContainer.querySelectorAll('.acf-card');\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\tif (cards.length > 0) {\n\t\t\t\t\t\t\t\tconst firstCard = cards[0];\n\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\tconst imgContainer = firstCard.querySelector('.acf-img-container');\n\t\t\t\t\t\t\t\tif (imgContainer) {\n\t\t\t\t\t\t\t\t\t\/\/ Image container exists\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\tconst body = firstCard.querySelector('.acf-body');\n\t\t\t\t\t\t\t\tif (body) {\n\t\t\t\t\t\t\t\t\t\/\/ Body exists\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\treturn true;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t\treturn false;\n\t\t\t\t\t};\n\t\t\t\t\t\n\t\t\t\t\t\/\/ Essayer plusieurs fois avec des d\u00e9lais diff\u00e9rents\n\t\t\t\t\tsetTimeout(debugSwiper, 1000);\n\t\t\t\t\tsetTimeout(debugSwiper, 3000);\n\t\t\t\t\tsetTimeout(debugSwiper, 5000);\n\t\t\t\t\t\n\t\t\t\t\t\/\/ Debug suppl\u00e9mentaire pour v\u00e9rifier si le carrousel existe\n\t\t\t\t\tsetTimeout(() => {\n\t\t\t\t\t\tconst allElements = app.querySelectorAll('*');\n\t\t\t\t\t\t\n\t\t\t\t\t\tconst swiperElements = app.querySelectorAll('[class*=\"swiper\"]');\n\t\t\t\t\t\tswiperElements.forEach((el, index) => {\n\t\t\t\t\t\t});\n\t\t\t\t\t\t\n\t\t\t\t\t\tconst cardElements = app.querySelectorAll('.acf-card');\n\t\t\t\t\t\tcardElements.forEach((el, index) => {\n\t\t\t\t\t\t});\n\t\t\t\t\t}, 2000);\n\t\t\t\t\t\n\t\t\t\t\t\/\/ Debug final pour v\u00e9rifier l'\u00e9tat complet\n\t\t\t\t\tsetTimeout(() => {\n\t\t\t\t\t\t\n\t\t\t\t\t\tconst grid = app.querySelector('.acf-a-la-une-grid');\n\t\t\t\t\t\tif (grid) {\n\t\t\t\t\t\t}\n\t\t\t\t\t\t\n\t\t\t\t\t\tconst swiper = app.querySelector('.acf-a-la-une-swiper');\n\t\t\t\t\t\tif (swiper) {\n\t\t\t\t\t\t}\n\t\t\t\t\t}, 4000);\n\t\t\t\t\t\n\t\t\t\t\tconst totalCards = posts.length;\n\t\t\t\t\t\n\t\t\t\t\t\/\/ Debug: v\u00e9rifier les posts et leurs images\n\t\t\t\t\t\n\t\t\t\t\tconst cardsWithImages = posts.filter(p => p.featured_media && p.featured_media > 0).length;\n\t\t\t\t\t\n\t\t\t\t\t\/\/ Debug suppl\u00e9mentaire pour v\u00e9rifier la d\u00e9tection des images\n\t\t\t\t\tconst cardsWithoutImages = totalCards - cardsWithImages;\n\t\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\t\/\/ Ajouter des classes CSS selon le nombre de cards et la pr\u00e9sence d'images\n\t\t\t\t\tif (totalCards === 1 && cardsWithImages === 1) {\n\t\t\t\t\t\t\/\/ 1 card avec image : layout horizontal sur desktop\/tablette, vertical sur mobile\n\t\t\t\t\t\tgridEl.classList.add(\"one-card\", \"with-image\");\n\t\t\t\t\t\t\n\t\t\t\t\t\t\/\/ Les styles CSS s'appliquent automatiquement via les classes\n\t\t\t\t\t} else if (totalCards === 1 && cardsWithoutImages === 1) {\n\t\t\t\t\t\t\/\/ 1 card sans image : layout vertical avec hauteur min\n\t\t\t\t\t\tgridEl.classList.add(\"one-card\", \"without-image\");\n\t\t\t\t\t\t\n\t\t\t\t\t\t\/\/ Appliquer les styles inline pour forcer l'application\n\t\t\t\t\t\tconst card = gridEl.querySelector('.acf-card');\n\t\t\t\t\t\tif (card) {\n\t\t\t\t\t\t\tcard.style.minHeight = '200px';\n\t\t\t\t\t\t}\n\t\t\t\t\t} else if (totalCards === 2) {\n\t\t\t\t\t\t\/\/ 2 cards : layout grille standard\n\t\t\t\t\t\tgridEl.classList.add(\"two-cards\");\n\t\t\t\t\t\tgridEl.style.gridTemplateColumns = 'repeat(2, 1fr)';\n\t\t\t\t\t} else if (totalCards === 3) {\n\t\t\t\t\t\t\/\/ 3 cards : layout grille standard\n\t\t\t\t\t\tgridEl.classList.add(\"three-cards\");\n\t\t\t\t\t\tgridEl.style.gridTemplateColumns = 'repeat(3, 1fr)';\n\t\t\t\t\t} else {\n\t\t\t\t\t\t\/\/ Plus de 3 cards : layout grille standard\n\t\t\t\t\t\tgridEl.classList.add(\"multiple-cards\");\n\t\t\t\t\t\tgridEl.style.gridTemplateColumns = 'repeat(3, 1fr)';\n\t\t\t\t\t}\n\t\t\t\t} else {\n\t\t\t\t\t\/\/ Logique ORIGINALE pour toutes les autres pages (inchang\u00e9e)\n\t\t\t\t\tif (posts.length === 1) gridEl.classList.add(\"one-card\");\n\t\t\t\t\telse if (posts.length === 2) gridEl.classList.add(\"two-cards\");\n\t\t\t\t\telse if (posts.length === 3) gridEl.classList.add(\"three-cards\");\n\t\t\t\t}\n\n\t\t\t\t\/\/ Ex\u00e9cuter hydrateDynamicButtons pour toutes les pages\n\t\t\t\tsetTimeout(() => {\n\t\t\t\t\tif (isPublications) {\n\t\t\t\t\t\t\/\/ Version sp\u00e9ciale pour les publications qui ne remplace pas le contenu\n\t\t\t\t\t\thydrateDynamicButtonsForPublications(gridEl);\n\t\t\t\t\t} else {\n\t\t\t\t\t\thydrateDynamicButtons(gridEl);\n\t\t\t\t\t}\n\t\t\t\t}, 50);\n\t\t\t}\n\n\t\t\tasync function renderSwiper(posts, variantClass) {\n\t\t\t\tgridEl.style.display = \"none\";\n\t\t\t\tgridEl.innerHTML = \"\";\n\t\t\t\tdestroySwiper();\n\t\t\t\tswiperContainer.style.display = \"block\";\n\t\t\t\tswiperContainer.className = \"acf-a-la-une-swiper swiper\";\n\t\t\t\tif (variantClass) swiperContainer.classList.add(variantClass);\n\t\t\t\t\n\t\t\t\t\/\/ V\u00e9rifier si c'est une page de publications\n\t\t\t\tconst isPublications = window.location.pathname.includes('\/publications') || \n\t\t\t\t\twindow.location.pathname.includes('\/en\/publications');\n\n\t\t\t\tconst totalCards = posts.length;\n\t\t\t\tconst cardsHTML = await Promise.all(posts.map(p => makeCardHTML(p, totalCards)));\n\t\t\t\tswiperWrapper.innerHTML = cardsHTML.map(html => `<div class=\"swiper-slide\">${html}<\/div>`).join(\"\");\n\n\t\t\t\tlet config = {\n\t\t\t\t\tloop:false, freeMode:false, slidesPerView:1, spaceBetween:20, speed:500,\n\t\t\t\t\tcenteredSlides:false, centeredSlidesBounds:false, observer:true, observeParents:true,\n\t\t\t\t\tpagination:{ el: swiperContainer.querySelector('.swiper-pagination'), clickable:true, type:'bullets' }\n\t\t\t\t};\n\t\t\t\tif (variantClass === 'tablet-3') { config.slidesPerView = 2; }\n\t\t\t\tif (variantClass === 'mobile-2' || variantClass === 'mobile-3') { config.slidesPerView = 1; }\n\n\t\t\t\tswiper = new Swiper(swiperContainer, config);\n\t\t\t\tsetTimeout(() => {\n\t\t\t\t\tif (swiper) { swiper.update(); swiper.updateSlides(); }\n\t\t\t\t\tsetTimeout(() => hydrateDynamicButtons(swiperContainer), 50);\n\t\t\t\t}, 100);\n\t\t\t}\n\n\t\t\tfunction hydrateDynamicButtons(rootEl) {\n\t\t\t\trootEl.querySelectorAll(\"[data-post-id]\").forEach((container) => {\n\t\t\t\t\tif (container._loaded) return;\n\t\t\t\t\tcontainer._loaded = true;\n\t\t\t\t\tconst postId = container.dataset.postId;\n\t\t\t\t\tconst text = encodeURIComponent(LABELS.learnMore);\n\t\t\t\t\tfetch(\"\/wp-admin\/admin-ajax.php\", {\n\t\t\t\t\t\tmethod: \"POST\",\n\t\t\t\t\t\theaders: { \"Content-Type\": \"application\/x-www-form-urlencoded\" },\n\t\t\t\t\t\tbody: `action=get_button_plus_dynamique&post_id=${postId}&text=${text}&custom_class=acf-button-plus&lang=${lang}`,\n\t\t\t\t\t})\n\t\t\t\t\t\t.then((r) => r.text())\n\t\t\t\t\t\t.then((html) => {\n\t\t\t\t\t\t\t\/\/ V\u00e9rifier si c'est une page de publications\n\t\t\t\t\t\t\tconst isPublications = window.location.pathname.includes('\/publications') || \n\t\t\t\t\t\t\t\twindow.location.pathname.includes('\/en\/publications');\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\tif (isPublications) {\n\t\t\t\t\t\t\t\t\/\/ Pour les publications, remplacer seulement le bouton, pas tout le contenu\n\t\t\t\t\t\t\t\tconst buttonContainer = container.querySelector('.acf-plus, .acf-plus-holder');\n\t\t\t\t\t\t\t\tif (buttonContainer) {\n\t\t\t\t\t\t\t\t\tbuttonContainer.innerHTML = html;\n\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\tcontainer.innerHTML = html;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\/\/ Pour les autres pages, comportement original\n\t\t\t\t\t\t\t\tcontainer.innerHTML = html;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\tconst card = container.closest(\".acf-card\");\n\t\t\t\t\t\t\tconst button = container.querySelector(\".button-plus-dynamique\");\n\t\t\t\t\t\t\tif (card && button) {\n\t\t\t\t\t\t\t\tcard.addEventListener(\"mouseenter\", () => button.classList.add(\"hover\"));\n\t\t\t\t\t\t\t\tcard.addEventListener(\"mouseleave\", () => button.classList.remove(\"hover\"));\n\t\t\t\t\t\t\t\tbutton.style.pointerEvents = \"none\";\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t})\n\t\t\t\t\t\t.catch(() => { \n\t\t\t\t\t\t\tconst isPublications = window.location.pathname.includes('\/publications') || \n\t\t\t\t\t\t\t\twindow.location.pathname.includes('\/en\/publications');\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\tif (isPublications) {\n\t\t\t\t\t\t\t\tconst buttonContainer = container.querySelector('.acf-plus, .acf-plus-holder');\n\t\t\t\t\t\t\t\tif (buttonContainer) {\n\t\t\t\t\t\t\t\t\tbuttonContainer.innerHTML = `<button class=\"fallback-button\">${LABELS.learnMore}<\/button>`;\n\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\tcontainer.innerHTML = `<button class=\"fallback-button\">${LABELS.learnMore}<\/button>`;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\tcontainer.innerHTML = `<button class=\"fallback-button\">${LABELS.learnMore}<\/button>`;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t});\n\t\t\t\t});\n\t\t\t}\n\n\t\t\tasync function decideAndRender(posts) {\n\t\t\t\tconst w = window.innerWidth;\n\t\t\t\tif (w >= 1024) return await renderGrid(posts);\n\t\t\t\tif (w >= 768) return (posts.length <= 2) ? await renderGrid(posts) : await renderSwiper(posts, 'tablet-3');\n\t\t\t\treturn (posts.length === 1) ? await renderGrid(posts) : await renderSwiper(posts, posts.length === 2 ? 'mobile-2' : 'mobile-3');\n\t\t\t}\n\n\t\t\tasync function init() {\n\t\t\t\t\/\/ Ajouter la classe pour les styles sp\u00e9cifiques aux publications d\u00e8s le d\u00e9but\n\t\t\t\tconst isPublications = window.location.pathname.includes('\/publications') || \n\t\t\t\t\twindow.location.pathname.includes('\/en\/publications');\n\t\t\t\t\n\t\t\t\tif (isPublications) {\n\t\t\t\t\tapp.classList.add(\"acf-publications-page\");\n\t\t\t\t}\n\t\t\t\t\n\t\t\t\tconst posts = await fetchPosts();\n\t\t\t\tif (posts.length > 0) { await decideAndRender(posts); }\n\t\t\t\telse { gridEl.innerHTML = LABELS.noContent ? `<p>${LABELS.noContent}<\/p>` : ''; }\n\t\t\t}\n\n\t\t\tlet resizeTimeout;\n\t\t\twindow.addEventListener('resize', () => {\n\t\t\t\tclearTimeout(resizeTimeout);\n\t\t\t\tresizeTimeout = setTimeout(async () => {\n\t\t\t\t\tconst posts = await fetchPosts();\n\t\t\t\t\tif (posts.length > 0) { await decideAndRender(posts); }\n\t\t\t\t}, 250);\n\t\t\t});\n\n\t\t\tinit();\n\t\t});\n\t});\n\t<\/script>\n\t<\/div>\n\t\t\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t<div class=\"elementor-element elementor-element-18ebb30 e-flex e-con-boxed e-con e-parent\" data-id=\"18ebb30\" data-element_type=\"container\">\n\t\t\t\t\t<div class=\"e-con-inner\">\n\t\t\t\t<div class=\"elementor-element elementor-element-1c4ed9e elementor-widget elementor-widget-shortcode\" data-id=\"1c4ed9e\" data-element_type=\"widget\" data-widget_type=\"shortcode.default\">\n\t\t\t\t\t\t\t<div class=\"elementor-shortcode\">\t<div class=\"acf-archive-app acf-nouvelle-best-app\" data-cpt=\"posts\" data-taxonomy=\"categories\" data-filter-text=\"Theme\" data-lang=\"en\" data-nonce=\"bdae65f428\">\n\t\t\n\t\t<!-- Header avec titre + filtres -->\n\t\t<div class=\"acf-archive-header\">\n\t\t\t\t\t\t\t<h2 class=\"acf-archive-title\">Every News<\/h2>\n\t\t\t\t\t\t<div class=\"acf-archive-filters-recherche\">\n\t\t\t\t<div class=\"acf-archive-filters\">\n\t\t\t\t\t<input type=\"text\" class=\"acf-search\" placeholder=\"Search...\">\n\t\t\t\t\t<div class=\"acf-dropdown acf-sujet-dropdown\">\n\t\t\t\t\t\t<div class=\"acf-dropdown-trigger\">\n\t\t\t\t\t\t\t<span class=\"acf-dropdown-text\">Theme<\/span>\n\t\t\t\t\t\t\t<svg class=\"acf-dropdown-arrow\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"11\" height=\"7\" viewBox=\"0 0 11 7\" fill=\"none\">\n\t\t\t\t\t\t\t\t<path d=\"M1 0.857143L5.33333 5.5L10 0.5\" stroke=\"#323332\"\/>\n\t\t\t\t\t\t\t<\/svg>\n\t\t\t\t\t\t<\/div>\n\t\t\t\t\t\t<div class=\"acf-dropdown-menu\">\n\t\t\t\t\t\t\t<div class=\"acf-dropdown-item\" data-value=\"\">\n\t\t\t\t\t\t\t\t<span class=\"acf-dropdown-text\">Theme<\/span>\n\t\t\t\t\t\t\t\t<svg class=\"acf-radio\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"15\" height=\"16\" viewBox=\"0 0 15 16\" fill=\"none\">\n\t\t\t\t\t\t\t\t\t<circle cx=\"7.5\" cy=\"8\" r=\"7\" stroke=\"#323332\"\/>\n\t\t\t\t\t\t\t\t<\/svg>\n\t\t\t\t\t\t\t<\/div>\n\t\t\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t\t\t\t<div class=\"acf-dropdown acf-date-dropdown\">\n\t\t\t\t\t\t<div class=\"acf-dropdown-trigger\">\n\t\t\t\t\t\t\t<span class=\"acf-dropdown-text\">Date<\/span>\n\t\t\t\t\t\t\t<svg class=\"acf-dropdown-arrow\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"11\" height=\"7\" viewBox=\"0 0 11 7\" fill=\"none\">\n\t\t\t\t\t\t\t\t<path d=\"M1 0.857143L5.33333 5.5L10 0.5\" stroke=\"#323332\"\/>\n\t\t\t\t\t\t\t<\/svg>\n\t\t\t\t\t\t<\/div>\n\t\t\t\t\t\t<div class=\"acf-dropdown-menu\">\n\t\t\t\t\t\t\t<!-- Filtres de dates personnalis\u00e9es -->\n\t\t\t\t\t\t\t<div class=\"acf-date-custom\">\n\t\t\t\t\t\t\t\t<div class=\"acf-date-inputs\">\n\t\t\t\t\t\t\t\t\t<div class=\"acf-date-field\">\n\t\t\t\t\t\t\t\t\t\t<label>From<\/label>\n\t\t\t\t\t\t\t\t\t\t<input type=\"date\" class=\"acf-date-from\" value=\"\">\n\t\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t\t\t\t\t\t<span class=\"acf-date-separator\">-<\/span>\n\t\t\t\t\t\t\t\t\t<div class=\"acf-date-field\">\n\t\t\t\t\t\t\t\t\t\t<label>To<\/label>\n\t\t\t\t\t\t\t\t\t\t<input type=\"date\" class=\"acf-date-to\" value=\"\">\n\t\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t\t\t\t<\/div>\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t<!-- Filtres pr\u00e9d\u00e9finis -->\n\t\t\t\t\t\t\t<div class=\"acf-date-presets\">\n\t\t\t\t\t\t\t\t<div class=\"acf-dropdown-item-date\" data-value=\"7\" data-type=\"preset\">\n\t\t\t\t\t\t\t\t\t<span class=\"acf-dropdown-text\">New<\/span>\n\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t\t\t\t\t<div class=\"acf-dropdown-item-date\" data-value=\"30\" data-type=\"preset\">\n\t\t\t\t\t\t\t\t\t<span class=\"acf-dropdown-text\">Last month<\/span>\n\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t\t\t\t\t<div class=\"acf-dropdown-item-date\" data-value=\"364\" data-type=\"preset\">\n\t\t\t\t\t\t\t\t\t<span class=\"acf-dropdown-text\">Last year<\/span>\n\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t\t\t\t<\/div>\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t<!-- Boutons d'action -->\n\t\t\t\t\t\t\t<div class=\"acf-date-actions\">\n\t\t\t\t\t\t\t\t<button class=\"acf-date-apply\">Apply<\/button>\n\t\t\t\t\t\t\t\t<button class=\"acf-date-reset\">Reset<\/button>\n\t\t\t\t\t\t\t<\/div>\n\t\t\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<button class=\"acf-submit\">Search<\/button>\n\t\t\t<\/div>\n\t\t<\/div>\n\n\t\t<!-- R\u00e9sultats -->\n\t\t<div class=\"acf-archive-list\" style=\"display: none;\"><\/div>\n\t\t\n\t\t<!-- Pagination -->\n\t\t<div class=\"acf-pagination\" style=\"display:none;\">\n\t\t\t<button class=\"acf-pagination-btn acf-prev\" disabled>Previous<\/button>\n\t\t\t<div class=\"acf-pagination-numbers\"><\/div>\n\t\t\t<button class=\"acf-pagination-btn acf-next\">Next<\/button>\n\t\t\t<div class=\"acf-pagination-info\"><\/div>\n\t\t<\/div>\n\t<\/div>\n\n\t<style>\n.acf-archive-title {\n  color: #D30C8C;\n  font-family: \"TikTok Sans\" !important;\n  font-size: 32px !important;\n  font-style: normal;\n  font-weight: 600 !important;\n  line-height: 35px;\n  margin: 0;\n  flex: 0 0 30%;\n  min-width: 200px;\n}\n\n.acf-archive-header {\n  display: flex;\n  align-items: center;\n  justify-content: space-between;\n  flex-wrap: wrap;\n  margin-bottom: 30px;\n  gap: 0;\n}\n\n.acf-archive-filters {\n  display: flex;\n  align-items: center;\n  background: #F5F6F7;\n  border-radius: 8px;\n  padding: 8px 12px;\n  gap: 20px;\n  width:100%;\n}\n\n\/* Barre de recherche *\/\n.acf-archive-filters input.acf-search {\n  flex: 1;\n  min-width: 200px;\n  padding: 0 0 0 40px;\n  border: none;\n  border-radius: 25px;\n  font-size: 14px;\n  background: transparent;\n  background-image: url(\"data:image\/svg+xml,%3Csvg xmlns='http:\/\/www.w3.org\/2000\/svg' width='20' height='20' viewBox='0 0 20 20' fill='none'%3E%3Cpath d='M18.9881 18.6236L14.1712 13.8067C15.5448 12.227 16.2514 10.1758 16.1421 8.08528C16.0328 5.9948 15.1161 4.02842 13.5852 2.60065C12.0544 1.17287 10.0289 0.395254 7.93592 0.431707C5.8429 0.46816 3.84579 1.31584 2.36557 2.79605C0.885357 4.27627 0.0376792 6.27338 0.00122609 8.3664C-0.035227 10.4594 0.742392 12.4848 2.17016 14.0157C3.59794 15.5466 5.56432 16.4633 7.6548 16.5726C9.74529 16.6819 11.7966 15.9753 13.3762 14.6017L18.1931 19.4186C18.2997 19.5179 18.4407 19.572 18.5865 19.5694C18.7322 19.5669 18.8712 19.5078 18.9743 19.4048C19.0774 19.3017 19.1364 19.1627 19.139 19.017C19.1415 18.8712 19.0874 18.7302 18.9881 18.6236ZM1.15308 8.52106C1.15308 7.14895 1.55996 5.80766 2.32226 4.66679C3.08456 3.52593 4.16805 2.63673 5.43571 2.11165C6.70338 1.58656 8.09828 1.44918 9.44402 1.71686C10.7898 1.98455 12.0259 2.64528 12.9961 3.61551C13.9664 4.58574 14.6271 5.82188 14.8948 7.16762C15.1625 8.51337 15.0251 9.90827 14.5 11.1759C13.9749 12.4436 13.0857 13.5271 11.9448 14.2894C10.804 15.0517 9.46269 15.4586 8.09058 15.4586C6.25133 15.4563 4.48804 14.7247 3.18749 13.4241C1.88694 12.1236 1.15531 10.3603 1.15308 8.52106Z' fill='black'\/%3E%3C\/svg%3E\");\n  background-repeat: no-repeat;\n  background-position: 12px center;\n  background-size: 16px;\n  margin-right: 0;\n}\n\t\n.acf-archive-filters-recherche {\n\tdisplay: flex;\n\tflex: 0 0 60%;\n\tmargin-left: auto;\n\tgap:16px;\n}\n\n\/* Dropdowns personnalis\u00e9s *\/\n.acf-dropdown {\n  position: relative;\n  flex: 0 0 auto;\n  cursor: pointer;\n}\n\n.acf-date-custom {\n  margin-bottom:16px;\n}\t\n\t\n.acf-dropdown-trigger {\n  display: flex;\n  align-items: center;\n  justify-content: space-between;\n  padding: 0 8px;\n  background: transparent;\n  color: #323332;\n  font-family: \"TikTok Sans\" !important;\n  font-size: 14px !important;\n  font-style: normal;\n  font-weight: 400 !important;\n  line-height: 16px;\n  transition: all 0.2s;\n  gap: 8px;\n  position: relative;\n}\n\n.acf-dropdown-trigger:hover {\n  background-color: transparent;\n}\n\n.acf-dropdown-trigger:hover::after {\n  content: '';\n  position: absolute;\n  bottom: -4px;\n  left: 0;\n  right: 0;\n  height: 1px;\n  background-color: #333;\n  transform: scaleX(1);\n  transition: transform 0.2s ease;\n}\n\n.acf-date-from, .acf-date-to { cursor:pointer; }\n\t\n.acf-dropdown-trigger::after {\n  content: '';\n  position: absolute;\n  bottom: -4px;\n  left: 0;\n  right: 0;\n  height: 1px;\n  background-color: #333;\n  transform: scaleX(0);\n  transition: transform 0.2s ease;\n}\n\n.acf-dropdown.active .acf-dropdown-trigger::after { transform: scaleX(1); }\n\n.acf-dropdown-arrow {\n  transition: transform 0.3s ease;\n  color: #323332;\n  flex-shrink: 0;\n  display: flex;\n  align-items: center;\n  justify-content: center;\n}\n\n.acf-dropdown.active .acf-dropdown-arrow { transform: rotate(180deg); }\n\n.acf-dropdown-menu {\n  position: absolute;\n  top: 100%;\n  right: 0;\n  left: auto;\n  background: #ECEFF1;\n  border-radius: 12px;\n  opacity: 0;\n  visibility: hidden;\n  transform: translateY(-10px);\n  transition: all 0.2s;\n  z-index: 1000;\n  margin-top: 20px;\n  min-width: 250px;\n  padding:16px;\n}\n\n.acf-dropdown.active .acf-dropdown-menu {\n  opacity: 1;\n  visibility: visible;\n  transform: translateY(0);\n  cursor:pointer;\n}\n\n.acf-dropdown-item,\n.acf-dropdown-item-date {\n  display: flex;\n  align-items: center;\n  justify-content: space-between;\n  padding: 12px 16px;\n  cursor: pointer;\n  transition: background-color 0.2s;\n  border-radius: 8px;\n  gap: 12px;\n}\n\t\n.acf-dropdown-item-date {\n  background-color: rgba(211, 12, 140, 0.10);\n}\n.acf-dropdown-item-date:hover,\n.acf-dropdown-item-date.selected {\n  background-color: rgba(211, 12, 140, 0.30);\n}\n\n.acf-dropdown-item:hover { background-color: rgba(211, 12, 140, 0.10); }\n.acf-dropdown-item.selected { background-color: rgba(211, 12, 140, 0.10); }\n\n.acf-dropdown-item .acf-dropdown-text {\n  color: #323332;\n  font-family: \"TikTok Sans\" !important;\n  font-size: 16px !important;\n  font-style: normal;\n  font-weight: 300 !important;\n  line-height: 20px;\n  flex: 1;\n}\n\t\n.acf-dropdown-item-date .acf-dropdown-text {\n  color: #323332;\n  font-family: \"TikTok Sans\" !important;\n  font-size: 16px !important;\n  font-style: normal;\n  font-weight: 300 !important;\n  line-height: 20px;\n  flex: 1;\n  text-align:center;\t\t\n}\n\n.acf-radio { flex-shrink: 0; transition: all 0.2s ease; }\n\n.acf-date-inputs {\n  display: flex;\n  align-items: center;\n  gap: 4px;\n  margin-bottom: 0;\n}\n\n.acf-date-field { display: flex; flex-direction: column; gap: 4px; }\n\n.acf-date-field label {\n  color: #323332;\n  font-family: \"TikTok Sans\" !important;\n  font-size: 14px !important;\n  font-style: normal;\n  font-weight: 400 !important;\n  line-height: 16px;\n}\n\t\n.acf-date-presets {\n  margin-bottom:24px;\n  display:flex;\n  gap: 8px;\n  flex-direction:column;\n}\n\n.acf-date-field input[type=\"date\"] {\n  padding: 10px 12px;\n  border: 1px solid #B0BEC5;\n  border-radius: 4px;\n  color: #323332;\n  font-family: \"TikTok Sans\" !important;\n  font-size: 12px !important;\n  font-style: normal;\n  font-weight: 400 !important;\n  line-height: 14px;\n  background: transparent;\n}\n\n.acf-date-separator {\n  color: #323332;\n  font-size: 18px;\n  font-weight: 500;\n  margin-top: 20px;\n}\n\t\n.acf-date-actions { display: flex; flex-direction: column; gap: 8px; }\n\n.acf-date-apply,\n.acf-date-reset {\n  padding: 12px 16px !important;\n  border: none;\n  border-radius: 8px !important;\n  font-family: \"TikTok Sans\" !important;\n  font-size: 16px !important;\n  font-style: normal;\n  font-weight: 300 !important;\n  line-height: 20px;\n  cursor: pointer;\n  transition: all 0.2s;\n  width: 100%;\n}\n\n.acf-date-apply { background: rgba(211, 12, 140, 0.10); color: #D30C8C; }\n.acf-date-apply:hover { background: rgba(211, 12, 140, 0.30); color: #D30C8C; }\n\n.acf-date-reset { background: rgba(255, 255, 255, 0.55); color: #D30C8C; }\n.acf-date-reset:hover { color:#9B0C68; background-color: rgba(255, 255, 255, 0.95); }\n\n\/* Bouton s\u00e9par\u00e9 du bloc fusionn\u00e9 *\/\n.acf-archive-header .acf-submit {\n\talign-self: center;\n\tpadding: 10px 12px;\n\tborder: none;\n\tborder-radius: 8px;\n\tbackground: rgba(211, 12, 140, 0.10);\n\tcolor:#D30C8C;\n  font-family: \"TikTok Sans\" !important;\n  font-size: 16px !important;\n  font-style: normal;\n  font-weight: 300 !important;\n  line-height: 20px;\n\tcursor: pointer;\n\ttransition: background 0.3s;\n\twhite-space: nowrap;\n\tflex: 0 0 auto;\n}\n.acf-archive-header .acf-submit:hover { background: rgba(211, 12, 140, 0.30); }\n\n\/* Focus states *\/\n.acf-archive-filters input:focus { outline: none; box-shadow: none; }\n\n\/* Cartes *\/\n.acf-archive-list {\n  display: grid;\n  grid-template-columns: repeat(3, 1fr);\n  gap: 20px;\n  margin-bottom: 30px;\n}\n\n\/* Masquer la liste par d\u00e9faut jusqu'\u00e0 ce que le chargement soit termin\u00e9 *\/\n.acf-archive-list:empty {\n  display: none !important;\n}\n\n.acf-card {\n  display: flex;\n  flex-direction: column;\n  border-radius: 12px;\n  text-decoration: none;\n  color: inherit;\n  transition: box-shadow 0.3s;\n  background: #F5F6F7;\n  box-shadow: 8px 8px 12px 0 rgba(231, 231, 233, 0.60) !important;\n  min-height: 415px;\n  cursor: pointer !important;\n}\n.acf-card:hover { box-shadow: 8px 8px 12px 0 rgba(160, 160, 167, 0.50) !important; }\n\n.acf-img-container {\n\tposition: relative;\n\twidth: 100%;\n}\n\t\n.acf-img {\n  width: 100%;\n  height: 170px !important;\n  object-fit: cover;\n  border-radius: 12px 12px 0 0 !important;\n}\n\t\n.acf-nom-prenom {\n    position: absolute;\n    bottom: 6px;\n    left: 12px;\n    color: #FFF;\n    font-family: \"TikTok Sans\" !important;\n    font-size: 10px !important;\n    font-style: normal;\n    font-weight: 400 !important;\n    line-height: 12px;\n    z-index: 2;\n\t}\n\t\n.acf-body {\n  flex: 1;\n  padding:16px;\n  justify-content: space-between;\n  display:flex;\n  flex-direction: column;\n}\n.acf-date-title-excerpt { display:flex; flex-direction:column; gap:8px; }\n\n\/* Styles pour la ville de l'\u00e9v\u00e9nement *\/\n.acf-ville-date {\n\tdisplay: flex;\n\talign-items: center;\n\tgap: 3px;\n\tflex-wrap: wrap;\n}\n.acf-ville {\n\tcolor: #323332;\n\tfont-family: \"TikTok Sans\" !important;\n\tfont-size: 10px !important;\n\tfont-style: normal;\n\tfont-weight: 400 !important;\n\tline-height: 12px;\n\tdisplay: flex;\n\talign-items: center;\n}\n\n.acf-ville::after {\n\tcontent: \", \";\n}\n\n    \/* Styles publications retir\u00e9s *\/\n\n.acf-date {\n  color: #323332;\n  font-family: \"TikTok Sans\" !important;\n  font-size: 10px !important;\n  font-style: normal;\n  font-weight: 400 !important;\n  line-height: 12px;\n}\n.acf-title {\n  color: #323332;\n  font-family: \"TikTok Sans\" !important;\n  font-size: 22px !important;\n  font-style: normal;\n  font-weight: 600 !important;\n  line-height: 24px;\n}\n.acf-excerpt {\n  color: #607D8B;\n  font-family: \"TikTok Sans\" !important;\n  font-size: 14px !important;\n  font-style: normal;\n  font-weight: 300 !important;\n  line-height: 16px;\n}\n.acf-plus { \n\tmargin-top: auto; \n\tmin-height: 37px;\n\tdisplay: flex;\n\talign-items: center;\n}\n\n.acf-plus-tags {\n\tdisplay: flex;\n\tflex-wrap:nowrap;\n\tjustify-content:space-between;\n\talign-items: center;\n}\n\t\t\t   \n\/* Styles pour le bouton plus dynamique dans les cartes *\/\n.button-plus-dynamique {\n\tdisplay: inline-block !important;\n\tcursor: pointer !important;\n\tposition: relative !important;\n\tpointer-events: auto !important;\n\tz-index: 10 !important;\n}\n\n.button-plus-dynamique .plus-icon {\n\tdisplay: inline-flex !important;\n\talign-items: center !important;\n\tjustify-content: center !important;\n\twidth: 37px !important;\n\theight: 37px !important;\n\tbackground-color: #FAE6F3 !important;\n\tborder-radius: 8px !important;\n\ttransition: all 0.3s ease !important;\n}\n\n.button-plus-dynamique .text-arrow {\n\tdisplay: none !important;\n\talign-items: center !important;\n\tgap: 8px !important;\n\tpadding: 8px 12px !important;\n\tbackground-color: rgba(211, 12, 140, 0.10) !important;\n\tborder-radius: 8px !important;\n\tcolor: #D30C8C !important;\n\tfont-family: \"TikTok Sans\", sans-serif !important;\n\tfont-size: 14px !important;\n\tfont-weight: 400 !important;\n\twhite-space: nowrap !important;\n}\n\n\/* Hover direct du bouton *\/\n.button-plus-dynamique:hover .plus-icon {\n\tdisplay: none !important;\n}\n.button-plus-dynamique:hover .text-arrow {\n\tdisplay: inline-flex !important;\n\tbackground-color: rgba(211, 12, 140, 0.30) !important;\n}\n\n\/* HOVER SUR LA CARTE PARENT *\/\n.acf-card:hover .button-plus-dynamique .plus-icon {\n\tdisplay: none !important;\n}\n.acf-card:hover .button-plus-dynamique .text-arrow {\n\tdisplay: inline-flex !important;\n\tbackground-color: rgba(211, 12, 140, 0.30) !important;\n}\n\n\/* Forcer le masquage SEULEMENT des cartes statiques uncategorized dans le contexte de ce shortcode *\/\n.acf-archive-app ~ .acf-card:not([data-post-id]),\n.acf-archive-app ~ .acf-card-wrapper:not([data-post-id]),\n.acf-archive-app ~ .acf-a-la-une-grid:not([data-post-id]),\n.acf-archive-app + .acf-card:not([data-post-id]),\n.acf-archive-app + .acf-card-wrapper:not([data-post-id]),\n.acf-archive-app + .acf-a-la-une-grid:not([data-post-id]) {\n\tdisplay: none !important;\n\tvisibility: hidden !important;\n\topacity: 0 !important;\n\theight: 0 !important;\n\toverflow: hidden !important;\n\tmargin: 0 !important;\n\tpadding: 0 !important;\n}\n\n\/* Pagination *\/\n.acf-pagination { \n\tdisplay: flex; \n\talign-items: center; \n\tjustify-content: center; \n\tgap: 8px; \n\tmargin-top: 40px; \n\tflex-wrap: wrap; \n}\n.acf-pagination-btn { \n\tpadding: 10px 20px !important; \n\tborder: 1px solid #323332; \n\tborder-radius: 8px; \n\tcolor: #323332; \n\tbackground: #fff; \n\tfont-size: 14px !important; \n\tcursor: pointer; \n\ttransition: all .2s; \n\tfont-family: \"TikTok Sans\" !important; \n\tfont-weight: 400 !important;\n}\n.acf-pagination-btn:hover:not(:disabled) { \n\tbackground: #D30C8C; \n\tcolor: #fff; \n\tborder-color: #D30C8C; \n}\n.acf-pagination-btn:disabled { \n\topacity: 0.4; \n\tcursor: not-allowed; \n\tbackground: #fff;\n\tcolor: #9E9E9E;\n\tborder-color: #E0E0E0;\n}\n.acf-pagination-numbers { \n\tdisplay: flex; \n\tgap: 8px; \n\talign-items: center; \n\tflex-wrap: wrap; \n}\n.acf-pagination-number { \n\tmin-width: 40px; \n\twidth: 40px;\n\theight: 40px; \n\tdisplay: flex; \n\talign-items: center; \n\tjustify-content: center; \n\tborder: 1px solid #323332; \n\tborder-radius: 8px; \n\tcolor: #323332; \n\tbackground: #fff; \n\tfont-size: 14px !important; \n\tcursor: pointer; \n\ttransition: all .2s; \n\tfont-family: \"TikTok Sans\" !important; \n\tfont-weight: 400 !important;\n}\n.acf-pagination-number:hover:not(.ellipsis):not(.active) { \n\tbackground: #D30C8C; \n\tcolor: #fff; \n\tborder-color: #D30C8C; \n}\n.acf-pagination-number.active { \n\tbackground: #D30C8C; \n\tcolor: #fff; \n\tborder-color: #D30C8C; \n\tcursor: default; \n\tfont-weight: 500 !important;\n}\n.acf-pagination-number.ellipsis { \n\tborder: none; \n\tcursor: default; \n\tbackground: transparent;\n\tcolor: #323332;\n\tmin-width: auto;\n\twidth: auto;\n\tpadding: 0 4px;\n}\n.acf-pagination-number.ellipsis:hover { \n\tbackground: transparent; \n\tcolor: #323332; \n}\n.acf-pagination-info { \n\tfont-size: 14px !important; \n\tcolor: #607D8B; \n\tfont-family: \"TikTok Sans\" !important; \n\tmargin-left: 12px; \n\tfont-weight: 400 !important;\n}\n@media (max-width: 768px) {\n\t.acf-pagination { gap: 6px; }\n\t.acf-pagination-btn { padding: 8px 16px !important; font-size: 12px !important; }\n\t.acf-pagination-number { min-width: 36px; width: 36px; height: 36px; font-size: 12px !important; }\n\t.acf-pagination-info { font-size: 12px !important; margin-left: 0; width: 100%; text-align: center; margin-top: 12px; }\n}\n\t\n\/* Styles pour les cat\u00e9gories (m\u00eame design que les tags) *\/\n.acf-tags { display: flex; gap: 8px; flex-wrap: wrap; }\n.acf-chip {\n  padding: 4px 6px;\n  color: #455A64;\n  font-family: \"TikTok Sans\" !important;\n  font-size: 10px !important;\n  font-style: normal;\n  font-weight: 400 !important;\n  line-height: 12px;\n  border-radius: 100px;\n  white-space: nowrap;\n  background-color: #CFD8DC;\n}\n\n@media (max-width: 992px) {\n\t.acf-archive-filters-recherche {\n\t\tmargin-left:0;\n\t}\n  .acf-archive-list { grid-template-columns: repeat(2, 1fr); }\n  .acf-archive-header { flex-direction: column; align-items: stretch; gap: 20px; }\n  .acf-archive-title { flex: none; }\n  .acf-archive-filters {width: 85%; }\n  .acf-archive-filters input.acf-search { min-width: 150px; }\n  .acf-dropdown { width: 100px; }\n}\n\n@media (max-width: 768px) {\n  .acf-archive-list { grid-template-columns: 1fr; }\n  .acf-archive-filters { flex-direction: column; gap: 10px; }\n  .acf-archive-filters input.acf-search { min-width: 100%; margin-right: 0; margin-bottom: 5px; }\n  .acf-dropdown { width: 100%; }\n  .acf-archive-header .acf-submit { margin-left: 0; margin-top: 10px; }\n  .acf-date-inputs { gap: 8px; }\n  .acf-date-separator { margin: 0; }\n  .acf-dropdown-menu { right: auto; left: 0; }\n}\n\t<\/style>\n\n\t<script>\n\tdocument.addEventListener(\"DOMContentLoaded\", function () {\n\t\tconst app = document.querySelector('.acf-nouvelle-best-app[data-cpt=\"posts\"]');\n\t\tif (!app) return;\n\n\t\tconst nonce = app.getAttribute('data-nonce');\n\t\tconst listEl = app.querySelector('.acf-archive-list');\n\t\tconst paginationEl = app.querySelector('.acf-pagination');\n\t\tconst searchInput = app.querySelector('.acf-search');\n\t\tconst submitBtn = app.querySelector('.acf-submit');\n\t\tconst prevBtn = app.querySelector('.acf-prev');\n\t\tconst nextBtn = app.querySelector('.acf-next');\n\t\tconst paginationNumbers = app.querySelector('.acf-pagination-numbers');\n\t\tconst paginationInfo = app.querySelector('.acf-pagination-info');\n\n\t\tlet currentPage = 1;\n\t\tlet totalPages = 1;\n\t\tlet totalPosts = 0;\n\t\tlet postsPerPage = 9;\n\t\tlet searchTerm = '';\n\t\tlet themeFilter = '';\n\t\tlet dateFrom = '';\n\t\tlet dateTo = '';\n\t\tlet datePreset = '';\n\n\t\t\/\/ Fonction pour charger les posts\n\t\tfunction loadPosts(page = 1) {\n\t\t\tconst isInitialLoad = page === 1 && currentPage === 1;\n\t\t\t\n\t\t\tconst formData = new FormData();\n\t\t\tformData.append('action', 'fetch_nouvelle_ajax');\n\t\t\tformData.append('nonce', nonce);\n\t\t\tformData.append('page', page);\n\t\t\tformData.append('search', searchTerm);\n\t\t\tformData.append('theme', themeFilter);\n\t\t\tformData.append('date_from', dateFrom);\n\t\t\tformData.append('date_to', dateTo);\n\t\t\tformData.append('date_preset', datePreset);\n\n\t\t\tfetch('https:\/\/enpiste.qc.ca\/wp-admin\/admin-ajax.php', {\n\t\t\t\tmethod: 'POST',\n\t\t\t\tbody: formData\n\t\t\t})\n\t\t\t.then(response => response.json())\n\t\t\t.then(data => {\n\t\t\t\tif (data.success) {\n\t\t\t\t\tconst htmlReceived = data.data.html || '';\n\t\t\t\t\t\n\t\t\t\t\t\/\/ Appliquer le HTML\n\t\t\t\t\tlistEl.innerHTML = htmlReceived;\n\t\t\t\t\tlistEl.style.display = 'grid';\n\t\t\t\t\t\n\t\t\t\t\t\/\/ Mettre \u00e0 jour les valeurs de pagination AVANT d'appeler updatePagination()\n\t\t\t\t\tcurrentPage = parseInt(data.data.current_page) || 1;\n\t\t\t\t\ttotalPages = parseInt(data.data.total_pages) || 1;\n\t\t\t\t\ttotalPosts = parseInt(data.data.total_posts) || 0;\n\t\t\t\t\t\n\t\t\t\t\t\/\/ S'assurer que currentPage ne d\u00e9passe pas totalPages\n\t\t\t\t\tif (currentPage > totalPages && totalPages > 0) {\n\t\t\t\t\t\tcurrentPage = totalPages;\n\t\t\t\t\t}\n\t\t\t\t\t\n\t\t\t\t\tupdatePagination();\n\t\t\t\t\t\n\t\t\t\t\t\/\/ Scroll vers le haut de la section \u00e0 1\/3 du haut de la page lors du changement de page\n\t\t\t\t\tif (!isInitialLoad) {\n\t\t\t\t\t\tconst headerEl = app.querySelector('.acf-archive-header');\n\t\t\t\t\t\tif (headerEl) {\n\t\t\t\t\t\t\tconst headerRect = headerEl.getBoundingClientRect();\n\t\t\t\t\t\t\tconst headerTop = headerRect.top + window.pageYOffset;\n\t\t\t\t\t\t\tconst targetPosition = headerTop - (window.innerHeight \/ 3);\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\twindow.scrollTo({\n\t\t\t\t\t\t\t\ttop: Math.max(0, targetPosition),\n\t\t\t\t\t\t\t\tbehavior: 'smooth'\n\t\t\t\t\t\t\t});\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\t\n\t\t\t\t\t\/\/ Attendre un tick pour le chargement des boutons\n\t\t\t\t\tsetTimeout(() => {\n\t\t\t\t\t\tif (isInitialLoad) {\n\t\t\t\t\t\t\t\/\/ Sauvegarder l'\u00e9tat du chargement initial\n\t\t\t\t\t\t\tconst firstCardDelayed = listEl.querySelector('.acf-card');\n\t\t\t\t\t\t\twindow.__initialLoadState = {\n\t\t\t\t\t\t\t\tlistDisplay: window.getComputedStyle(listEl).display,\n\t\t\t\t\t\t\t\tlistGrid: window.getComputedStyle(listEl).gridTemplateColumns,\n\t\t\t\t\t\t\t\tcardDisplay: firstCardDelayed ? window.getComputedStyle(firstCardDelayed).display : 'N\/A',\n\t\t\t\t\t\t\t\tcardFlexDirection: firstCardDelayed ? window.getComputedStyle(firstCardDelayed).flexDirection : 'N\/A'\n\t\t\t\t\t\t\t};\n\t\t\t\t\t\t}\n\t\t\t\t\t}, 100);\n\t\t\t\t\t\n\t\t\t\t\tloadDynamicButtons();\n\t\t\t\t} else {\n\t\t\t\t\tlistEl.innerHTML = '<p>' + (data.data?.message || 'Erreur lors du chargement') + '<\/p>';\n\t\t\t\t\tlistEl.style.display = 'block';\n\t\t\t\t}\n\t\t\t})\n\t\t\t.catch(error => {\n\t\t\t\tlistEl.innerHTML = '<p>Erreur lors du chargement des donn\u00e9es<\/p>';\n\t\t\t\tlistEl.style.display = 'block';\n\t\t\t});\n\t\t}\n\n\t\t\/\/ Fonction pour charger les boutons dynamiques\n\t\tasync function loadDynamicButtons() {\n\t\t\tconst buttonContainers = listEl.querySelectorAll('.acf-plus[data-post-id]');\n\t\t\tconst isEnglish = app.getAttribute('data-lang') === 'en';\n\t\t\tconst buttonText = isEnglish ? 'Learn more' : 'En savoir plus';\n\t\t\t\n\t\t\tfor (const container of buttonContainers) {\n\t\t\t\tconst postId = container.getAttribute('data-post-id');\n\t\t\t\tif (!postId || container._loaded) {\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\t\t\t\t\n\t\t\t\ttry {\n\t\t\t\t\t\/\/ R\u00e9cup\u00e9rer le permalink depuis la carte\n\t\t\t\t\tconst card = container.closest('.acf-card');\n\t\t\t\t\tlet permalink = '';\n\t\t\t\t\tif (card) {\n\t\t\t\t\t\t\/\/ Chercher un lien dans la carte ou utiliser le data-permalink\n\t\t\t\t\t\tconst cardLink = card.querySelector('a[href]');\n\t\t\t\t\t\tif (cardLink) {\n\t\t\t\t\t\t\tpermalink = cardLink.getAttribute('href');\n\t\t\t\t\t\t} else if (card.dataset.permalink) {\n\t\t\t\t\t\t\tpermalink = card.dataset.permalink;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\t\n\t\t\t\t\tconst formData = new FormData();\n\t\t\t\t\tformData.append('action', 'get_button_plus_dynamique');\n\t\t\t\t\tformData.append('post_id', postId);\n\t\t\t\t\tformData.append('text', buttonText);\n\t\t\t\t\tformData.append('custom_class', 'acf-button-plus');\n\t\t\t\t\tformData.append('lang', isEnglish ? 'en' : 'fr');\n\t\t\t\t\t\n\t\t\t\t\tconst response = await fetch('https:\/\/enpiste.qc.ca\/wp-admin\/admin-ajax.php', {\n\t\t\t\t\t\tmethod: 'POST',\n\t\t\t\t\t\tbody: formData\n\t\t\t\t\t});\n\t\t\t\t\t\n\t\t\t\t\tif (response.ok) {\n\t\t\t\t\t\tconst html = await response.text();\n\t\t\t\t\t\tconst hasButton = html && html.includes('button-plus-dynamique');\n\t\t\t\t\t\t\n\t\t\t\t\t\tif (html && html.trim() !== '' && hasButton) {\n\t\t\t\t\t\t\t\/\/ Si on a un permalink et que le bouton n'a pas d\u00e9j\u00e0 de lien, l'envelopper\n\t\t\t\t\t\t\tif (permalink && !html.includes('<a href')) {\n\t\t\t\t\t\t\t\tcontainer.innerHTML = '<a href=\"' + permalink + '\" style=\"text-decoration: none; color: inherit; display: contents;\">' + html + '<\/a>';\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\tcontainer.innerHTML = html;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\/\/ Sauvegarder les styles du premier bouton pour comparaison\n\t\t\t\t\t\t\tsetTimeout(() => {\n\t\t\t\t\t\t\t\tif (postId === '4860') {\n\t\t\t\t\t\t\t\t\twindow.__firstButtonStyles = {\n\t\t\t\t\t\t\t\t\t\tdisplay: window.getComputedStyle(container).display,\n\t\t\t\t\t\t\t\t\t\tminHeight: window.getComputedStyle(container).minHeight,\n\t\t\t\t\t\t\t\t\t\tmarginTop: window.getComputedStyle(container).marginTop\n\t\t\t\t\t\t\t\t\t};\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}, 50);\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\tcontainer._loaded = true;\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\/\/ Ajouter les \u00e9v\u00e9nements hover sur la carte\n\t\t\t\t\t\t\tconst button = container.querySelector('.button-plus-dynamique');\n\t\t\t\t\t\t\tif (card && button) {\n\t\t\t\t\t\t\t\tcard.addEventListener('mouseenter', () => button.classList.add('hover'));\n\t\t\t\t\t\t\t\tcard.addEventListener('mouseleave', () => button.classList.remove('hover'));\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t} catch (error) {\n\t\t\t\t\t\/\/ Erreur silencieuse\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\t\/\/ Fonction pour mettre \u00e0 jour la pagination\n\t\tfunction updatePagination() {\n\t\t\t\/\/ Vider d'abord tous les boutons existants\n\t\t\tpaginationNumbers.innerHTML = '';\n\t\t\t\n\t\t\t\/\/ Si une seule page ou moins, masquer la pagination\n\t\t\tif (totalPages <= 1) {\n\t\t\t\tpaginationEl.style.display = 'none';\n\t\t\t\tprevBtn.disabled = true;\n\t\t\t\tnextBtn.disabled = true;\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\t\/\/ Afficher la pagination\n\t\t\tpaginationEl.style.display = 'flex';\n\t\t\tprevBtn.disabled = currentPage === 1;\n\t\t\tnextBtn.disabled = currentPage === totalPages;\n\n\t\t\t\/\/ G\u00e9n\u00e9rer les num\u00e9ros de page avec ellipsis\n\t\t\tif (totalPages <= 7) {\n\t\t\t\t\/\/ Si 7 pages ou moins, afficher toutes\n\t\t\t\tfor (let i = 1; i <= totalPages; i++) {\n\t\t\t\t\tcreatePageButton(i);\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\t\/\/ Logique avec ellipsis pour plus de 7 pages\n\t\t\t\tif (currentPage <= 4) {\n\t\t\t\t\t\/\/ Afficher 1, 2, 3, 4, 5, ..., derni\u00e8re\n\t\t\t\t\tcreatePageButton(1);\n\t\t\t\t\tfor (let i = 2; i <= 5; i++) {\n\t\t\t\t\t\tcreatePageButton(i);\n\t\t\t\t\t}\n\t\t\t\t\tcreateEllipsis();\n\t\t\t\t\tcreatePageButton(totalPages);\n\t\t\t\t} else if (currentPage >= totalPages - 3) {\n\t\t\t\t\t\/\/ Afficher 1, ..., avant-derni\u00e8re, derni\u00e8re-2, derni\u00e8re-1, derni\u00e8re\n\t\t\t\t\tcreatePageButton(1);\n\t\t\t\t\tcreateEllipsis();\n\t\t\t\t\tfor (let i = totalPages - 4; i <= totalPages; i++) {\n\t\t\t\t\t\tcreatePageButton(i);\n\t\t\t\t\t}\n\t\t\t\t} else {\n\t\t\t\t\t\/\/ Afficher 1, ..., page-1, page, page+1, ..., derni\u00e8re\n\t\t\t\t\tcreatePageButton(1);\n\t\t\t\t\tcreateEllipsis();\n\t\t\t\t\tfor (let i = currentPage - 1; i <= currentPage + 1; i++) {\n\t\t\t\t\t\tcreatePageButton(i);\n\t\t\t\t\t}\n\t\t\t\t\tcreateEllipsis();\n\t\t\t\t\tcreatePageButton(totalPages);\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t\/\/ Calculer la plage d'\u00e9l\u00e9ments affich\u00e9s\n\t\t\tconst startItem = (currentPage - 1) * postsPerPage + 1;\n\t\t\tconst endItem = Math.min(currentPage * postsPerPage, totalPosts);\n\t\t\t\n\t\t\t\/\/ Info de pagination avec format \"(1-6 sur 697)\"\n\t\t\tconst isEnglish = app.getAttribute('data-lang') === 'en';\n\t\t\tif (isEnglish) {\n\t\t\t\tpaginationInfo.textContent = `Page ${currentPage} of ${totalPages} (${startItem}-${endItem} of ${totalPosts})`;\n\t\t\t} else {\n\t\t\t\tpaginationInfo.textContent = `Page ${currentPage} sur ${totalPages} (${startItem}-${endItem} sur ${totalPosts})`;\n\t\t\t}\n\t\t}\n\n\t\tfunction createPageButton(pageNum) {\n\t\t\tconst pageBtn = document.createElement('button');\n\t\t\tpageBtn.className = 'acf-pagination-number' + (pageNum === currentPage ? ' active' : '');\n\t\t\tpageBtn.textContent = pageNum;\n\t\t\tpageBtn.addEventListener('click', () => {\n\t\t\t\tcurrentPage = pageNum;\n\t\t\t\tloadPosts(pageNum);\n\t\t\t});\n\t\t\tpaginationNumbers.appendChild(pageBtn);\n\t\t}\n\n\t\tfunction createEllipsis() {\n\t\t\tconst ellipsis = document.createElement('span');\n\t\t\tellipsis.className = 'acf-pagination-number ellipsis';\n\t\t\tellipsis.textContent = '...';\n\t\t\tpaginationNumbers.appendChild(ellipsis);\n\t\t}\n\n\t\t\/\/ Fonction pour r\u00e9cup\u00e9rer tous les filtres\n\t\tfunction getAllFilters() {\n\t\t\t\/\/ Recherche\n\t\t\tsearchTerm = searchInput.value.trim();\n\t\t\t\n\t\t\t\/\/ Th\u00e8me\n\t\t\tconst selectedTheme = app.querySelector('.acf-sujet-dropdown .acf-dropdown-item.selected');\n\t\t\tthemeFilter = selectedTheme ? selectedTheme.getAttribute('data-value') || '' : '';\n\t\t\t\n\t\t\t\/\/ Date - Priorit\u00e9 aux dates personnalis\u00e9es si elles sont d\u00e9finies, sinon utiliser le preset\n\t\t\tconst dateFromInput = app.querySelector('.acf-date-from');\n\t\t\tconst dateToInput = app.querySelector('.acf-date-to');\n\t\t\tconst selectedDatePreset = app.querySelector('.acf-dropdown-item-date.selected');\n\t\t\t\n\t\t\tdateFrom = dateFromInput ? dateFromInput.value : '';\n\t\t\tdateTo = dateToInput ? dateToInput.value : '';\n\t\t\t\n\t\t\t\/\/ Si des dates personnalis\u00e9es sont d\u00e9finies, on ignore le preset\n\t\t\tif (dateFrom || dateTo) {\n\t\t\t\tdatePreset = '';\n\t\t\t} else {\n\t\t\t\tdatePreset = selectedDatePreset ? selectedDatePreset.getAttribute('data-value') || '' : '';\n\t\t\t}\n\t\t}\n\n\t\t\/\/ \u00c9v\u00e9nements\n\t\tsubmitBtn.addEventListener('click', () => {\n\t\t\tgetAllFilters();\n\t\t\tcurrentPage = 1;\n\t\t\tloadPosts(1);\n\t\t});\n\n\t\tprevBtn.addEventListener('click', () => {\n\t\t\tif (currentPage > 1) {\n\t\t\t\tcurrentPage--;\n\t\t\t\tloadPosts(currentPage);\n\t\t\t}\n\t\t});\n\n\t\tnextBtn.addEventListener('click', () => {\n\t\t\tif (currentPage < totalPages) {\n\t\t\t\tcurrentPage++;\n\t\t\t\tloadPosts(currentPage);\n\t\t\t}\n\t\t});\n\n\t\t\/\/ Charger les posts au chargement initial\n\t\tloadPosts(1);\n\t});\n\t<\/script>\n\n\t<script>\ndocument.addEventListener(\"DOMContentLoaded\", function () {\n  document.querySelectorAll(\".acf-archive-app\").forEach((app) => {\n    const cpt = app.dataset.cpt;\n    const taxonomy = app.dataset.taxonomy; \/\/ ex: 'categories'\n    const filterText = app.dataset.filterText; \/\/ R\u00e9cup\u00e8re le texte du filtre\n    const apiUrl = `\/wp-json\/wp\/v2\/${cpt}`;\n    const listEl = app.querySelector(\".acf-archive-list\");\n    const searchInput = app.querySelector(\".acf-search\");\n    const sujetDropdown = app.querySelector(\".acf-sujet-dropdown\");\n    const dateDropdown = app.querySelector(\".acf-date-dropdown\");\n    const submitBtn = app.querySelector(\".acf-submit\");\n    const loadMoreContainer = app.querySelector(\".acf-load-more-container\");\n    const loadMoreBtn = app.querySelector(\".acf-load-more\");\n\n    const dateFromInput = app.querySelector(\".acf-date-from\");\n    const dateToInput = app.querySelector(\".acf-date-to\");\n    const dateApplyBtn = app.querySelector(\".acf-date-apply\");\n    const dateResetBtn = app.querySelector(\".acf-date-reset\");\n\n    \/\/ \u00c9tat\n    let selectedSujet = \"\";\n    let selectedDate = \"\";\n    let selectedDateFrom = \"\";\n    let selectedDateTo = \"\";\n    let activeDateFilter = null; \/\/ 'custom' | 'preset' | null\n    let currentPage = 1;\n    let postsPerPage = 9; \/\/ D\u00e9faut desktop\n    let allPosts = [];\n    let filteredPosts = [];\n\n    \/\/ Fonction pour d\u00e9terminer le nombre de posts par page selon la taille d'\u00e9cran\n    function getPostsPerPage() {\n      if (window.innerWidth <= 768) {\n        return 6; \/\/ Mobile\n      } else if (window.innerWidth <= 992) {\n        return 8; \/\/ Tablette\n      } else {\n        return 9; \/\/ Desktop\n      }\n    }\n\n    \/\/ Mettre \u00e0 jour postsPerPage et recalculer l'affichage\n    function updatePostsPerPage() {\n      const newPostsPerPage = getPostsPerPage();\n      if (newPostsPerPage !== postsPerPage) {\n        postsPerPage = newPostsPerPage;\n        currentPage = 1;\n        if (filteredPosts.length > 0) {\n          renderPosts(filteredPosts, false);\n        }\n      }\n    }\n\n    \/\/ Utils\n    function normalize(str) {\n      return (str || \"\")\n        .toString()\n        .normalize(\"NFD\")\n        .replace(\/[\\u0300-\\u036f]\/g, \"\")\n        .toLowerCase();\n    }\n\n    function initDefaultDates() {\n      if (!dateFromInput || !dateToInput) return;\n      const today = new Date();\n      const sevenDaysAgo = new Date(today);\n      sevenDaysAgo.setDate(today.getDate() - 7);\n      dateFromInput.value = sevenDaysAgo.toISOString().split(\"T\")[0];\n      dateToInput.value = today.toISOString().split(\"T\")[0];\n      selectedDateFrom = dateFromInput.value;\n      selectedDateTo = dateToInput.value;\n    }\n\n    \/\/ Format date unifi\u00e9 cards : \"16 avril 2026\" (FR) ou \"April 16 2026\" (EN). Si ville avant : \", \"\n    function formatDateFull(isoDateString) {\n      const d = new Date(isoDateString);\n      return d.toLocaleDateString(\"fr-FR\", {\n        day: \"2-digit\",\n        month: \"long\",\n        year: \"numeric\",\n      });\n    }\n\n    \/\/ Normalise 'categories' -> 'category' (WP core)\n    function normalizeTaxSlug(slug) {\n      return slug === \"categories\" ? \"category\" : slug;\n    }\n\n    \/\/ R\u00e9cup\u00e9ration des cat\u00e9gories via API s\u00e9par\u00e9e\n    async function getPostCategories(post) {\n      if (!post.categories || post.categories.length === 0) return [];\n      \n      try {\n        const categoryPromises = post.categories.map(async (catId) => {\n          if (catId === 1) return null; \/\/ Exclure \"uncategorized\"\n          \n          const response = await fetch(`\/wp-json\/wp\/v2\/categories\/${catId}`);\n          if (response.ok) {\n            const category = await response.json();\n            return category.name;\n          }\n          return null;\n        });\n        \n        const categoryNames = await Promise.all(categoryPromises);\n        return categoryNames.filter(name => name !== null);\n      } catch (error) {\n        return [];\n      }\n    }\n\n    \/\/ R\u00e9cup\u00e9ration de la ville de l'\u00e9v\u00e9nement via ACF\n    function getPostVille(post) {\n      \/\/ V\u00e9rifier les deux noms possibles du champ ACF\n      let ville = post.acf?.lieu_de_levenement || post.acf?.ville_de_levenement;\n      \n      if (ville && typeof ville === 'string') {\n        \/\/ Nettoyer la ville (enlever la virgule finale si pr\u00e9sente)\n        if (ville.endsWith(',')) {\n          ville = ville.slice(0, -1);\n        }\n        \n        \/\/ V\u00e9rifier que la ville n'est pas vide et ajouter un espace\n        if (ville && ville.trim() !== \"\") {\n          return ville.trim() + \" \";\n        }\n      }\n      return \"\";\n    }\n\n    \/\/ R\u00e9cup\u00e9ration de la date de l'\u00e9v\u00e9nement via ACF\n    function getPostDate(post) {\n      \/\/ V\u00e9rifier si le champ ACF \"date_devenement\" existe\n      if (post.acf && post.acf.date_devenement) {\n        \/\/ G\u00e9rer le format YYYYMMDD (ex: 20250212)\n        if (typeof post.acf.date_devenement === 'string' && post.acf.date_devenement.match(\/^\\d{8}$\/)) {\n          const year = post.acf.date_devenement.substring(0, 4);\n          const month = post.acf.date_devenement.substring(4, 6);\n          const day = post.acf.date_devenement.substring(6, 8);\n          const eventDate = new Date(year, month - 1, day);\n          \n          if (!isNaN(eventDate.getTime())) {\n            return formatDateFull(eventDate.toISOString());\n          }\n        }\n        \/\/ Sinon essayer de parser directement\n        else {\n          const eventDate = new Date(post.acf.date_devenement);\n          if (!isNaN(eventDate.getTime())) {\n            return formatDateFull(eventDate.toISOString());\n          }\n        }\n        \n        \/\/ Si la date n'est pas valide, utiliser la date du post\n        return formatDateFull(post.date);\n      }\n      \/\/ Sinon utiliser la date du post\n      return formatDateFull(post.date);\n    }\n\n    \/\/ R\u00e9cup\u00e9ration du nom\/pr\u00e9nom via ACF\n    function getPostNomPrenom(post) {\n      \/\/ V\u00e9rifier si le champ ACF \"nom_prenom\" existe\n      if (post.acf && post.acf.nom_prenom && typeof post.acf.nom_prenom === 'string') {\n        return post.acf.nom_prenom.trim();\n      }\n      return \"\";\n    }\n\n    \/\/ R\u00e9cup\u00e9ration de l'image via ACF ou fallback\n    function getPostImage(post) {\n      \/\/ Si on a un ID d'image mais pas les donn\u00e9es embedded, faire un appel API s\u00e9par\u00e9\n      if (post.featured_media && !post._embedded) {\n        return fetch(`\/wp-json\/wp\/v2\/media\/${post.featured_media}`)\n          .then(r => r.json())\n          .then(media => {\n            if (media.source_url) {\n              return media.source_url;\n            }\n            return \"\";\n          })\n          .catch(err => {\n            return \"\";\n          });\n      }\n      \n      \/\/ Essayer les donn\u00e9es embedded si disponibles\n      if (post._embedded && post._embedded[\"wp:featuredmedia\"] && post._embedded[\"wp:featuredmedia\"][0]) {\n        const media = post._embedded[\"wp:featuredmedia\"][0];\n        \n        if (media.source_url) {\n          return Promise.resolve(media.source_url);\n        }\n        \n        if (media.guid && media.guid.rendered) {\n          return Promise.resolve(media.guid.rendered);\n        }\n        \n        if (media.url) {\n          return Promise.resolve(media.url);\n        }\n      }\n      \n      return Promise.resolve(\"\");\n    }\n\n    \/\/ Recharge le dropdown avec les cat\u00e9gories r\u00e9ellement utilis\u00e9es (version stable)\n    function loadSujetFilter() {\n      if (!sujetDropdown || !taxonomy) return;\n\n      const menu = sujetDropdown.querySelector(\".acf-dropdown-menu\");\n      if (!menu) return;\n\n      \/\/ Option par d\u00e9faut avec le texte dynamique\n      menu.innerHTML = `\n        <div class=\"acf-dropdown-item\" data-value=\"\">\n          <span class=\"acf-dropdown-text\">${filterText}<\/span>\n          <svg class=\"acf-radio\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"15\" height=\"16\" viewBox=\"0 0 15 16\" fill=\"none\">\n            <circle cx=\"7.5\" cy=\"8\" r=\"7\" stroke=\"#323332\"\/>\n          <\/svg>\n        <\/div>\n      `;\n\n      Promise.all([\n        fetch(`\/wp-json\/wp\/v2\/${cpt}?per_page=100&_fields=id,categories`).then((r) => r.json()),\n        fetch(`\/wp-json\/wp\/v2\/${taxonomy}?per_page=100`).then((r) => r.json()),\n      ])\n        .then(([posts, allTerms]) => {\n          const usedCatIds = new Set();\n          (Array.isArray(posts) ? posts : []).forEach((p) => {\n            \/\/ Exclure les posts avec la cat\u00e9gorie \"uncategorized\" (ID: 1)\n            if (Array.isArray(p.categories) && p.categories.includes(1)) {\n              return; \/\/ Skip ce post\n            }\n            \n            if (Array.isArray(p.categories)) {\n              p.categories.forEach((id) => {\n                \/\/ Exclure la cat\u00e9gorie \"uncategorized\" (ID: 1)\n                if (id !== 1) {\n                  usedCatIds.add(id);\n                }\n              });\n            }\n          });\n\n          const filtered = (Array.isArray(allTerms) ? allTerms : []).filter((t) =>\n            usedCatIds.has(t.id) && t.id !== 1 \/\/ Double v\u00e9rification\n          );\n\n          filtered.forEach((term) => {\n            const item = document.createElement(\"div\");\n            item.className = \"acf-dropdown-item\";\n            item.dataset.value = term.id;\n            item.innerHTML = `\n              <span class=\"acf-dropdown-text\">${term.name}<\/span>\n              <svg class=\"acf-radio\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"15\" height=\"16\" viewBox=\"0 0 15 16\" fill=\"none\">\n                <circle cx=\"7.5\" cy=\"8\" r=\"7\" stroke=\"#323332\"\/>\n              <\/svg>\n            `;\n            menu.appendChild(item);\n          });\n\n          \/\/ Re-binder les clics du dropdown\n          initDropdowns();\n        })\n        .catch((err) => {\n          \/\/ Erreur silencieuse\n        });\n    }\n\n    \/\/ Dropdowns\n    function initDropdowns() {\n      [sujetDropdown, dateDropdown].forEach((dropdown) => {\n        if (!dropdown) return;\n        const trigger = dropdown.querySelector(\".acf-dropdown-trigger\");\n        const menu = dropdown.querySelector(\".acf-dropdown-menu\");\n        if (!trigger || !menu) return;\n\n        trigger.removeEventListener(\"click\", trigger._handler);\n        trigger._handler = (e) => {\n          e.stopPropagation();\n          [sujetDropdown, dateDropdown].forEach((d) => {\n            if (d && d !== dropdown) d.classList.remove(\"active\");\n          });\n          dropdown.classList.toggle(\"active\");\n        };\n        trigger.addEventListener(\"click\", trigger._handler);\n\n        if (dropdown.classList.contains(\"acf-date-dropdown\")) {\n          const items = dropdown.querySelectorAll(\".acf-dropdown-item-date\");\n          items.forEach((item) => {\n            item.removeEventListener(\"click\", item._handler);\n            item._handler = (e) => {\n              e.stopPropagation();\n              const value = item.dataset.value || \"\";\n              const text =\n                item.querySelector(\".acf-dropdown-text\")?.textContent || \"\";\n              dropdown\n                .querySelectorAll(\".acf-dropdown-item-date\")\n                .forEach((i) => i.classList.remove(\"selected\"));\n              item.classList.add(\"selected\");\n              selectedDate = value;\n              activeDateFilter = \"preset\";\n              selectedDateFrom = \"\";\n              selectedDateTo = \"\";\n              const label = dropdown.querySelector(\n                \".acf-dropdown-trigger .acf-dropdown-text\"\n              );\n              if (label) label.textContent = text;\n              \/\/ NE PAS appliquer les filtres automatiquement\n            };\n            item.addEventListener(\"click\", item._handler);\n          });\n        } else {\n          const items = dropdown.querySelectorAll(\".acf-dropdown-item\");\n          items.forEach((item) => {\n            item.removeEventListener(\"click\", item._handler);\n            item._handler = (e) => {\n              e.stopPropagation();\n              const value = item.dataset.value || \"\";\n              const text =\n                item.querySelector(\".acf-dropdown-text\")?.textContent || \"\";\n              dropdown\n                .querySelectorAll(\".acf-dropdown-item\")\n                .forEach((i) => i.classList.remove(\"selected\"));\n              item.classList.add(\"selected\");\n              selectedSujet = value;\n              const label = dropdown.querySelector(\n                \".acf-dropdown-trigger .acf-dropdown-text\"\n              );\n              if (label) label.textContent = text;\n              \/\/ NE PAS appliquer les filtres automatiquement\n            };\n            item.addEventListener(\"click\", item._handler);\n          });\n        }\n      });\n\n      document.removeEventListener(\"click\", document._closeHandler);\n      document._closeHandler = (e) => {\n        const inside = [sujetDropdown, dateDropdown].some(\n          (d) => d && d.contains(e.target)\n        );\n        if (!inside)\n          [sujetDropdown, dateDropdown].forEach(\n            (d) => d && d.classList.remove(\"active\")\n          );\n      };\n      document.addEventListener(\"click\", document._closeHandler);\n    }\n\n    \/\/ Dates custom\n    function initDateCustomHandlers() {\n      if (dateFromInput) {\n        dateFromInput.addEventListener(\"change\", (e) => {\n          e.stopPropagation();\n          selectedDateFrom = dateFromInput.value;\n          activeDateFilter = \"custom\";\n          \/\/ NE PAS appliquer les filtres automatiquement\n        });\n      }\n      if (dateToInput) {\n        dateToInput.addEventListener(\"change\", (e) => {\n          e.stopPropagation();\n          selectedDateTo = dateToInput.value;\n          activeDateFilter = \"custom\";\n          \/\/ NE PAS appliquer les filtres automatiquement\n        });\n      }\n      if (dateApplyBtn) {\n        dateApplyBtn.addEventListener(\"click\", (e) => {\n          e.stopPropagation();\n          if (selectedDateFrom && selectedDateTo) {\n            const fromDate = new Date(selectedDateFrom);\n            const toDate = new Date(selectedDateTo);\n            if (fromDate > toDate) {\n              alert(\n                'La date du filtre \"Du\" doit \u00eatre ant\u00e9rieure \u00e0 celle de \"Au\"'\n              );\n              return;\n            }\n            const label = dateDropdown?.querySelector(\n              \".acf-dropdown-trigger .acf-dropdown-text\"\n            );\n            if (label)\n              label.textContent = `${selectedDateFrom} - ${selectedDateTo}`;\n            dateDropdown\n              ?.querySelectorAll(\".acf-dropdown-item-date\")\n              .forEach((i) => i.classList.remove(\"selected\"));\n            selectedDate = \"\";\n            activeDateFilter = \"custom\";\n            \/\/ NE PAS appliquer les filtres automatiquement - seulement mettre \u00e0 jour l'\u00e9tat\n          }\n        });\n      }\n      if (dateResetBtn) {\n        dateResetBtn.addEventListener(\"click\", (e) => {\n          e.stopPropagation();\n          initDefaultDates();\n          selectedDate = \"\";\n          activeDateFilter = null;\n          dateDropdown\n            ?.querySelectorAll(\".acf-dropdown-item-date\")\n            .forEach((i) => i.classList.remove(\"selected\"));\n          const label = dateDropdown?.querySelector(\n            \".acf-dropdown-trigger .acf-dropdown-text\"\n          );\n          if (label) label.textContent = \"Date\";\n          \/\/ NE PAS appliquer les filtres automatiquement\n        });\n      }\n    }\n\n    function filterPosts() {\n      let results = [...allPosts];\n\n      \/\/ Exclure d'abord les posts avec la cat\u00e9gorie \"uncategorized\" (ID: 1)\n      results = results.filter((p) => {\n        if (Array.isArray(p.categories)) {\n          return !p.categories.includes(1); \/\/ Exclure ID 1\n        }\n        return true; \/\/ Si pas de cat\u00e9gories, on garde\n      });\n\n      const q = normalize(searchInput?.value?.trim() || \"\");\n      if (q) {\n        results = results.filter((p) => {\n          const title = normalize(p.title?.rendered || \"\");\n          const excerpt = normalize(p.excerpt?.rendered || \"\");\n          return title.includes(q) || excerpt.includes(q);\n        });\n      }\n\n      \/\/ Filtre \"Sujet\" \u2014 on s'appuie sur p.categories (stable avec l'ancien code)\n      if (selectedSujet) {\n        results = results.filter(\n          (p) =>\n            Array.isArray(p.categories) &&\n            p.categories.includes(parseInt(selectedSujet))\n        );\n      }\n\n      \/\/ Filtres de date\n      if (activeDateFilter === \"preset\" && selectedDate) {\n        const now = new Date();\n        const days = parseInt(selectedDate);\n        results = results.filter(\n          (p) => now - new Date(p.date) < days * 24 * 60 * 60 * 1000\n        );\n      } else if (\n        activeDateFilter === \"custom\" &&\n        selectedDateFrom &&\n        selectedDateTo\n      ) {\n        const fromDate = new Date(selectedDateFrom);\n        const toDate = new Date(selectedDateTo);\n        toDate.setHours(23, 59, 59);\n        results = results.filter((p) => {\n          const d = new Date(p.date);\n          return d >= fromDate && d <= toDate;\n        });\n      }\n\n      filteredPosts = results;\n      return results;\n    }\n\n   async function renderPosts(posts, append = false) {\n  \/\/ Marquer la liste comme \u00e9tant en cours de mise \u00e0 jour\n  if (!append) {\n    listEl.setAttribute('data-updating', 'true');\n  }\n  \n  \/\/ V\u00e9rifier d'abord s'il y a des posts avant de vider la liste\n  if (posts.length === 0) {\n    if (!append) {\n      listEl.innerHTML = `<p>Aucun contenu trouv\u00e9<\/p>`;\n      listEl.removeAttribute('data-updating');\n    }\n    if (loadMoreContainer) loadMoreContainer.style.display = \"none\";\n    return;\n  }\n  \n  const sliceStart = append ? (currentPage - 1) * postsPerPage : 0;\n  const sliceEnd = currentPage * postsPerPage;\n  const toRender = append\n    ? posts.slice(sliceStart, sliceEnd)\n    : posts.slice(0, sliceEnd);\n\n  \/\/ Prot\u00e9ger la liste pendant le await en interceptant les modifications\n  let protectedInnerHTML = listEl.innerHTML;\n  const innerHTMLDescriptor = Object.getOwnPropertyDescriptor(Element.prototype, 'innerHTML');\n  const originalInnerHTMLSetter = innerHTMLDescriptor?.set;\n  const originalInnerHTMLGetter = innerHTMLDescriptor?.get;\n  \n  if (originalInnerHTMLSetter && !append) {\n    \/\/ Sauvegarder le contenu actuel\n    protectedInnerHTML = listEl.innerHTML;\n    \n    \/\/ Intercepter les modifications de innerHTML pendant le await\n    Object.defineProperty(listEl, 'innerHTML', {\n      set: function(value) {\n        if (this.getAttribute('data-updating') === 'true') {\n          \/\/ Ne pas permettre la modification pendant le await\n          return;\n        }\n        originalInnerHTMLSetter.call(this, value);\n      },\n      get: function() {\n        if (this.getAttribute('data-updating') === 'true') {\n          return protectedInnerHTML;\n        }\n        return originalInnerHTMLGetter ? originalInnerHTMLGetter.call(this) : '';\n      },\n      configurable: true\n    });\n  }\n  \n  \/\/ Rendre les cartes de mani\u00e8re asynchrone AVANT de vider la liste\n  const cardsHTML = await Promise.all(toRender.map(async (p) => {\n    const img = await getPostImage(p);\n    const dateLabel = getPostDate(p);\n    const ville = getPostVille(p);\n    const nomPrenom = getPostNomPrenom(p);\n    const categories = await getPostCategories(p);\n\n    \/\/ Gestion de l'image avec fallback\n    let imageHTML = '';\n    if (img) {\n      imageHTML = `<img decoding=\"async\" class=\"acf-img\" src=\"${img}\" alt=\"\">`;\n    } else {\n      \/\/ Fallback si pas d'image\n      imageHTML = `<div class=\"acf-img-placeholder\" style=\"width: 100%; height: 170px; background: #E0E0E0; display: flex; align-items: center; justify-content: center; border-radius: 12px 12px 0 0; color: #999;\">Aucune image<\/div>`;\n    }\n\n    \/\/ G\u00e9n\u00e9rer le HTML des cat\u00e9gories\n    let categoriesHTML = '';\n    if (categories.length > 0) {\n      categoriesHTML = `\n        <div class=\"acf-tags\">\n          ${categories.map(cat => `<span class=\"acf-chip\">${cat}<\/span>`).join('')}\n        <\/div>\n      `;\n    }\n\n    return `\n      <a class=\"acf-card\" href=\"${p.link}\">\n        <div class=\"acf-img-container\">\n          ${imageHTML}\n          ${nomPrenom ? `<div class=\"acf-nom-prenom\">\u00a9 ${nomPrenom}<\/div>` : ''}\n        <\/div>\n        <div class=\"acf-body\">\n          <div class=\"acf-date-title-excerpt\">\n            <div class=\"acf-date\">${ville ? ville.trim() + ', ' : ''}${dateLabel}<\/div>\n            ${categoriesHTML}\n            <div class=\"acf-title\">${p.title?.rendered || \"\"}<\/div>\n            <div class=\"acf-excerpt\">${p.excerpt?.rendered || \"\"}<\/div>\n          <\/div>\n          <div class=\"acf-plus\" data-post-id=\"${p.id}\">Chargement...<\/div>\n        <\/div>\n      <\/a>\n    `;\n  }));\n\n  \/\/ Restaurer le setter\/getter original avant de modifier la liste\n  if (originalInnerHTMLSetter && !append) {\n    Object.defineProperty(listEl, 'innerHTML', {\n      set: originalInnerHTMLSetter,\n      get: originalInnerHTMLGetter,\n      configurable: true\n    });\n  }\n  \n  \/\/ V\u00e9rifier une derni\u00e8re fois si le message est pr\u00e9sent et le nettoyer si n\u00e9cessaire\n  const hasMessageAfter = listEl.innerHTML.includes('Aucun contenu trouv\u00e9');\n  if (hasMessageAfter && posts.length > 0) {\n    listEl.innerHTML = '';\n  }\n  \n  \/\/ Maintenant que les cartes HTML sont pr\u00eates, remplacer le contenu de mani\u00e8re atomique\n  if (append) {\n    listEl.innerHTML += cardsHTML.join(\"\");\n  } else {\n    \/\/ Cr\u00e9er un conteneur temporaire pour \u00e9viter le flash de liste vide\n    const tempContainer = document.createElement('div');\n    tempContainer.innerHTML = cardsHTML.join(\"\");\n    \n    \/\/ Remplacer les enfants de mani\u00e8re atomique en pr\u00e9servant au moins un \u00e9l\u00e9ment\n    const newElements = Array.from(tempContainer.children);\n    const oldElements = Array.from(listEl.children);\n    \n    if (newElements.length > 0) {\n      \/\/ Si on a de nouveaux \u00e9l\u00e9ments, remplacer progressivement pour \u00e9viter une liste vide\n      \/\/ Remplacer d'abord les anciens \u00e9l\u00e9ments par les nouveaux\n      const minLength = Math.min(oldElements.length, newElements.length);\n      for (let i = 0; i < minLength; i++) {\n        oldElements[i].replaceWith(newElements[i]);\n      }\n      \n      \/\/ Si on a plus de nouveaux \u00e9l\u00e9ments, les ajouter\n      if (newElements.length > oldElements.length) {\n        for (let i = oldElements.length; i < newElements.length; i++) {\n          listEl.appendChild(newElements[i]);\n        }\n      }\n      \/\/ Si on a moins de nouveaux \u00e9l\u00e9ments, supprimer les anciens restants\n      else if (oldElements.length > newElements.length) {\n        for (let i = newElements.length; i < oldElements.length; i++) {\n          oldElements[i].remove();\n        }\n      }\n    } else {\n      \/\/ Si pas de nouveaux \u00e9l\u00e9ments, vider la liste (ne devrait pas arriver car on v\u00e9rifie posts.length === 0 avant)\n      listEl.innerHTML = '';\n    }\n    \n    \/\/ Retirer l'attribut de mise \u00e0 jour une fois termin\u00e9\n    listEl.removeAttribute('data-updating');\n  }\n\n  \/\/ Bouton dynamique \"En savoir plus\"\n  setTimeout(() => {\n    listEl.querySelectorAll(\"[data-post-id]\").forEach((container) => {\n      if (container._loaded) return;\n      container._loaded = true;\n      const postId = container.dataset.postId;\n      fetch(\"\/wp-admin\/admin-ajax.php\", {\n        method: \"POST\",\n        headers: { \"Content-Type\": \"application\/x-www-form-urlencoded\" },\n        body: `action=get_button_plus_dynamique&post_id=${postId}&text=${encodeURIComponent(\n          \"En savoir plus\"\n        )}&custom_class=acf-button-plus`,\n      })\n        .then((r) => r.text())\n        .then((html) => {\n          container.innerHTML = html;\n          const card = container.closest(\".acf-card\");\n          const button = container.querySelector(\".button-plus-dynamique\");\n          if (card && button) {\n            card.addEventListener(\"mouseenter\", () =>\n              button.classList.add(\"hover\")\n            );\n            card.addEventListener(\"mouseleave\", () =>\n              button.classList.remove(\"hover\")\n            );\n            \/\/ Emp\u00eache le bouton interne de bloquer le hover global\n            button.style.pointerEvents = \"none\";\n          }\n        })\n        .catch(() => {\n          container.innerHTML =\n            '<button class=\"fallback-button\">En savoir plus<\/button>';\n        });\n    });\n  }, 50);\n\n  \/\/ Bouton \"Voir plus\"\n  if (loadMoreContainer) {\n    if (filteredPosts.length > currentPage * postsPerPage) {\n      loadMoreContainer.style.display = \"block\";\n      if (loadMoreBtn) loadMoreBtn.disabled = false;\n    } else {\n      loadMoreContainer.style.display = \"none\";\n    }\n  }\n}\n\n    function fetchPosts() {\n      listEl.innerHTML = \"Chargement...\";\n      fetch(`${apiUrl}?per_page=100&_fields=id,title,excerpt,link,date,acf,featured_media,categories&_embed=wp:featuredmedia,wp:term`)\n        .then((r) => r.json())\n        .then((posts) => {\n          allPosts = Array.isArray(posts) ? posts : [];\n          currentPage = 1;\n          \n          \/\/ Charger les filtres apr\u00e8s avoir r\u00e9cup\u00e9r\u00e9 les posts\n          loadSujetFilter();\n          \n          \/\/ Afficher tous les posts initialement sans filtrage\n          filteredPosts = allPosts.filter((p) => {\n            if (Array.isArray(p.categories)) {\n              return !p.categories.includes(1); \/\/ Exclure seulement \"uncategorized\"\n            }\n            return true;\n          });\n          renderPosts(filteredPosts, false);\n        })\n        .catch((error) => {\n          listEl.innerHTML = `<p>Erreur de chargement.<\/p>`;\n        });\n    }\n\n    function applyFilters() {\n      currentPage = 1;\n      const filtered = filterPosts();\n      renderPosts(filtered, false);\n    }\n\n    \/\/ Voir plus\n    if (loadMoreBtn) {\n      loadMoreBtn.addEventListener(\"click\", () => {\n        currentPage++;\n        renderPosts(filteredPosts, true);\n      });\n    }\n\n    \/\/ Recherche - NE PAS appliquer automatiquement, seulement sur Enter ou clic bouton\n    if (searchInput) {\n      searchInput.addEventListener(\"keydown\", (e) => {\n        if (e.key === \"Enter\") {\n          e.preventDefault();\n          applyFilters();\n        }\n      });\n      \/\/ Retirer l'event listener \"input\" qui appliquait les filtres automatiquement\n    }\n\n    \/\/ Le bouton \"Rechercher\" applique les filtres\n    if (submitBtn) submitBtn.addEventListener(\"click\", applyFilters);\n\n    \/\/ \u00c9couter le redimensionnement de la fen\u00eatre\n    window.addEventListener(\"resize\", updatePostsPerPage);\n\n    \/\/ Init\n    postsPerPage = getPostsPerPage(); \/\/ Initialiser avec la bonne valeur\n    initDefaultDates();\n    initDateCustomHandlers();\n    initDropdowns();\n    fetchPosts();\n  });\n});\n\t<\/script>\n\t<\/div>\n\t\t\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t","protected":false},"excerpt":{"rendered":"<p>News Follow the ideas, projects, and voices that are shaping circus arts today. Marjorie Nantel | Prod.G \u00a9 Frank Begin<\/p>\n","protected":false},"author":2,"featured_media":0,"parent":0,"menu_order":0,"comment_status":"closed","ping_status":"closed","template":"elementor_header_footer","meta":{"_acf_changed":false,"footnotes":""},"class_list":["post-861","page","type-page","status-publish","hentry"],"acf":[],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v26.7 - https:\/\/yoast.com\/wordpress\/plugins\/seo\/ -->\n<title>News - En Piste<\/title>\n<meta name=\"description\" content=\"News: the latest news from the circus community, calls for projects, events and opportunities for artists and organizations.\" \/>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/enpiste.qc.ca\/en\/news\/\" \/>\n<meta property=\"og:locale\" content=\"en_US\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"News - En Piste\" \/>\n<meta property=\"og:description\" content=\"News: the latest news from the circus community, calls for projects, events and opportunities for artists and organizations.\" \/>\n<meta property=\"og:url\" content=\"https:\/\/enpiste.qc.ca\/en\/news\/\" \/>\n<meta property=\"og:site_name\" content=\"En Piste\" \/>\n<meta property=\"article:publisher\" content=\"https:\/\/www.facebook.com\/EnPiste1\/\" \/>\n<meta property=\"article:modified_time\" content=\"2025-12-19T21:35:11+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/enpiste.qc.ca\/wp-content\/uploads\/2025\/11\/2025_ProdG_01jpg-scaled.jpg\" \/>\n\t<meta property=\"og:image:width\" content=\"2560\" \/>\n\t<meta property=\"og:image:height\" content=\"1707\" \/>\n\t<meta property=\"og:image:type\" content=\"image\/jpeg\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"WebPage\",\"@id\":\"https:\/\/enpiste.qc.ca\/en\/news\/\",\"url\":\"https:\/\/enpiste.qc.ca\/en\/news\/\",\"name\":\"News - En Piste\",\"isPartOf\":{\"@id\":\"https:\/\/enpiste.qc.ca\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\/\/enpiste.qc.ca\/en\/news\/#primaryimage\"},\"image\":{\"@id\":\"https:\/\/enpiste.qc.ca\/en\/news\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/enpiste.qc.ca\/wp-content\/uploads\/2025\/11\/2025_ProdG_01jpg-1024x683.jpg\",\"datePublished\":\"2025-07-09T17:41:52+00:00\",\"dateModified\":\"2025-12-19T21:35:11+00:00\",\"description\":\"News: the latest news from the circus community, calls for projects, events and opportunities for artists and organizations.\",\"breadcrumb\":{\"@id\":\"https:\/\/enpiste.qc.ca\/en\/news\/#breadcrumb\"},\"inLanguage\":\"en-CA\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/enpiste.qc.ca\/en\/news\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"en-CA\",\"@id\":\"https:\/\/enpiste.qc.ca\/en\/news\/#primaryimage\",\"url\":\"https:\/\/enpiste.qc.ca\/wp-content\/uploads\/2025\/11\/2025_ProdG_01jpg-1024x683.jpg\",\"contentUrl\":\"https:\/\/enpiste.qc.ca\/wp-content\/uploads\/2025\/11\/2025_ProdG_01jpg-1024x683.jpg\"},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/enpiste.qc.ca\/en\/news\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\/\/enpiste.qc.ca\/en\/homepage\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"News\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\/\/enpiste.qc.ca\/#website\",\"url\":\"https:\/\/enpiste.qc.ca\/\",\"name\":\"En piste\",\"description\":\"un art vivant, une communaut\u00e9 engag\u00e9e\",\"publisher\":{\"@id\":\"https:\/\/enpiste.qc.ca\/#organization\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\/\/enpiste.qc.ca\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"en-CA\"},{\"@type\":\"Organization\",\"@id\":\"https:\/\/enpiste.qc.ca\/#organization\",\"name\":\"En piste\",\"url\":\"https:\/\/enpiste.qc.ca\/\",\"logo\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-CA\",\"@id\":\"https:\/\/enpiste.qc.ca\/#\/schema\/logo\/image\/\",\"url\":\"https:\/\/enpiste.qc.ca\/wp-content\/uploads\/2025\/10\/Vector.png\",\"contentUrl\":\"https:\/\/enpiste.qc.ca\/wp-content\/uploads\/2025\/10\/Vector.png\",\"width\":337,\"height\":93,\"caption\":\"En piste\"},\"image\":{\"@id\":\"https:\/\/enpiste.qc.ca\/#\/schema\/logo\/image\/\"},\"sameAs\":[\"https:\/\/www.facebook.com\/EnPiste1\/\",\"https:\/\/www.linkedin.com\/in\/en-piste-regroupement-national-des-arts-du-cirque-821171144\/\",\"https:\/\/www.instagram.com\/enpistecirque\/?hl=fr-ca\"]}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"News - En Piste","description":"News: the latest news from the circus community, calls for projects, events and opportunities for artists and organizations.","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/enpiste.qc.ca\/en\/news\/","og_locale":"en_US","og_type":"article","og_title":"News - En Piste","og_description":"News: the latest news from the circus community, calls for projects, events and opportunities for artists and organizations.","og_url":"https:\/\/enpiste.qc.ca\/en\/news\/","og_site_name":"En Piste","article_publisher":"https:\/\/www.facebook.com\/EnPiste1\/","article_modified_time":"2025-12-19T21:35:11+00:00","og_image":[{"width":2560,"height":1707,"url":"https:\/\/enpiste.qc.ca\/wp-content\/uploads\/2025\/11\/2025_ProdG_01jpg-scaled.jpg","type":"image\/jpeg"}],"twitter_card":"summary_large_image","schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"WebPage","@id":"https:\/\/enpiste.qc.ca\/en\/news\/","url":"https:\/\/enpiste.qc.ca\/en\/news\/","name":"News - En Piste","isPartOf":{"@id":"https:\/\/enpiste.qc.ca\/#website"},"primaryImageOfPage":{"@id":"https:\/\/enpiste.qc.ca\/en\/news\/#primaryimage"},"image":{"@id":"https:\/\/enpiste.qc.ca\/en\/news\/#primaryimage"},"thumbnailUrl":"https:\/\/enpiste.qc.ca\/wp-content\/uploads\/2025\/11\/2025_ProdG_01jpg-1024x683.jpg","datePublished":"2025-07-09T17:41:52+00:00","dateModified":"2025-12-19T21:35:11+00:00","description":"News: the latest news from the circus community, calls for projects, events and opportunities for artists and organizations.","breadcrumb":{"@id":"https:\/\/enpiste.qc.ca\/en\/news\/#breadcrumb"},"inLanguage":"en-CA","potentialAction":[{"@type":"ReadAction","target":["https:\/\/enpiste.qc.ca\/en\/news\/"]}]},{"@type":"ImageObject","inLanguage":"en-CA","@id":"https:\/\/enpiste.qc.ca\/en\/news\/#primaryimage","url":"https:\/\/enpiste.qc.ca\/wp-content\/uploads\/2025\/11\/2025_ProdG_01jpg-1024x683.jpg","contentUrl":"https:\/\/enpiste.qc.ca\/wp-content\/uploads\/2025\/11\/2025_ProdG_01jpg-1024x683.jpg"},{"@type":"BreadcrumbList","@id":"https:\/\/enpiste.qc.ca\/en\/news\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/enpiste.qc.ca\/en\/homepage\/"},{"@type":"ListItem","position":2,"name":"News"}]},{"@type":"WebSite","@id":"https:\/\/enpiste.qc.ca\/#website","url":"https:\/\/enpiste.qc.ca\/","name":"En piste","description":"un art vivant, une communaut\u00e9 engag\u00e9e","publisher":{"@id":"https:\/\/enpiste.qc.ca\/#organization"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/enpiste.qc.ca\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"en-CA"},{"@type":"Organization","@id":"https:\/\/enpiste.qc.ca\/#organization","name":"En piste","url":"https:\/\/enpiste.qc.ca\/","logo":{"@type":"ImageObject","inLanguage":"en-CA","@id":"https:\/\/enpiste.qc.ca\/#\/schema\/logo\/image\/","url":"https:\/\/enpiste.qc.ca\/wp-content\/uploads\/2025\/10\/Vector.png","contentUrl":"https:\/\/enpiste.qc.ca\/wp-content\/uploads\/2025\/10\/Vector.png","width":337,"height":93,"caption":"En piste"},"image":{"@id":"https:\/\/enpiste.qc.ca\/#\/schema\/logo\/image\/"},"sameAs":["https:\/\/www.facebook.com\/EnPiste1\/","https:\/\/www.linkedin.com\/in\/en-piste-regroupement-national-des-arts-du-cirque-821171144\/","https:\/\/www.instagram.com\/enpistecirque\/?hl=fr-ca"]}]}},"_links":{"self":[{"href":"https:\/\/enpiste.qc.ca\/en\/wp-json\/wp\/v2\/pages\/861","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/enpiste.qc.ca\/en\/wp-json\/wp\/v2\/pages"}],"about":[{"href":"https:\/\/enpiste.qc.ca\/en\/wp-json\/wp\/v2\/types\/page"}],"author":[{"embeddable":true,"href":"https:\/\/enpiste.qc.ca\/en\/wp-json\/wp\/v2\/users\/2"}],"replies":[{"embeddable":true,"href":"https:\/\/enpiste.qc.ca\/en\/wp-json\/wp\/v2\/comments?post=861"}],"version-history":[{"count":0,"href":"https:\/\/enpiste.qc.ca\/en\/wp-json\/wp\/v2\/pages\/861\/revisions"}],"wp:attachment":[{"href":"https:\/\/enpiste.qc.ca\/en\/wp-json\/wp\/v2\/media?parent=861"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}