{"id":3968,"date":"2023-10-03T02:44:25","date_gmt":"2023-10-03T06:44:25","guid":{"rendered":"https:\/\/inclusionincanadiansports.ca\/partenaires-communautaires\/"},"modified":"2026-07-14T15:52:57","modified_gmt":"2026-07-14T19:52:57","slug":"partenaires-communautaires","status":"publish","type":"page","link":"https:\/\/inclusionincanadiansports.ca\/fr\/partenaires-communautaires\/","title":{"rendered":"Partenaires communautaires"},"content":{"rendered":"\t\t<div data-elementor-type=\"wp-page\" data-elementor-id=\"3968\" class=\"elementor elementor-3968 elementor-2315\" data-elementor-post-type=\"page\">\n\t\t\t\t<div class=\"elementor-element elementor-element-726522e e-flex e-con-boxed e-con e-parent\" data-id=\"726522e\" data-element_type=\"container\" data-e-type=\"container\" data-settings=\"{&quot;jet_parallax_layout_list&quot;:[{&quot;jet_parallax_layout_image&quot;:{&quot;url&quot;:&quot;&quot;,&quot;id&quot;:&quot;&quot;,&quot;size&quot;:&quot;&quot;},&quot;_id&quot;:&quot;ddc42f2&quot;,&quot;jet_parallax_layout_speed&quot;:{&quot;unit&quot;:&quot;%&quot;,&quot;size&quot;:&quot;50&quot;,&quot;sizes&quot;:[]},&quot;jet_parallax_layout_bg_x&quot;:&quot;50&quot;,&quot;jet_parallax_layout_bg_y&quot;:&quot;50&quot;,&quot;jet_parallax_layout_image_tablet&quot;:{&quot;url&quot;:&quot;&quot;,&quot;id&quot;:&quot;&quot;,&quot;size&quot;:&quot;&quot;},&quot;jet_parallax_layout_image_mobile&quot;:{&quot;url&quot;:&quot;&quot;,&quot;id&quot;:&quot;&quot;,&quot;size&quot;:&quot;&quot;},&quot;jet_parallax_layout_image_laptop&quot;:{&quot;url&quot;:&quot;&quot;,&quot;id&quot;:&quot;&quot;,&quot;size&quot;:&quot;&quot;},&quot;jet_parallax_layout_type&quot;:&quot;scroll&quot;,&quot;jet_parallax_layout_direction&quot;:&quot;1&quot;,&quot;jet_parallax_layout_fx_direction&quot;:null,&quot;jet_parallax_layout_z_index&quot;:&quot;&quot;,&quot;jet_parallax_layout_bg_x_laptop&quot;:&quot;&quot;,&quot;jet_parallax_layout_bg_x_tablet&quot;:&quot;&quot;,&quot;jet_parallax_layout_bg_x_mobile&quot;:&quot;&quot;,&quot;jet_parallax_layout_bg_y_laptop&quot;:&quot;&quot;,&quot;jet_parallax_layout_bg_y_tablet&quot;:&quot;&quot;,&quot;jet_parallax_layout_bg_y_mobile&quot;:&quot;&quot;,&quot;jet_parallax_layout_bg_size&quot;:&quot;auto&quot;,&quot;jet_parallax_layout_bg_size_laptop&quot;:&quot;&quot;,&quot;jet_parallax_layout_bg_size_tablet&quot;:&quot;&quot;,&quot;jet_parallax_layout_bg_size_mobile&quot;:&quot;&quot;,&quot;jet_parallax_layout_animation_prop&quot;:&quot;transform&quot;,&quot;jet_parallax_layout_on&quot;:[&quot;desktop&quot;,&quot;tablet&quot;]}],&quot;background_background&quot;:&quot;classic&quot;}\">\n\t\t\t\t\t<div class=\"e-con-inner\">\n\t\t\t\t<div class=\"elementor-element elementor-element-5062876 elementor-align-center elementor-widget elementor-widget-raven-heading\" data-id=\"5062876\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"raven-heading.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t<div class=\"raven-widget-wrapper\"><h1 class=\"raven-heading raven-heading-h1\"><span class=\"raven-heading-title \">Construire un sport inclusif \u2013 ensemble<\/span><\/h1><\/div>\n\t\t\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-833d17a e-flex e-con-boxed e-con e-parent\" data-id=\"833d17a\" data-element_type=\"container\" data-e-type=\"container\" data-settings=\"{&quot;background_background&quot;:&quot;classic&quot;,&quot;jet_parallax_layout_list&quot;:[]}\">\n\t\t\t\t\t<div class=\"e-con-inner\">\n\t\t\t\t<div class=\"elementor-element elementor-element-80327d3 elementor-widget elementor-widget-text-editor\" data-id=\"80327d3\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t<p>Nos partenaires communautaires sont au c\u0153ur de l&rsquo;impact d&rsquo;IRSC : ils mettent en \u0153uvre des programmes, facilitent l&rsquo;acc\u00e8s et sont les moteurs du changement au niveau local partout au Canada.<\/p><p>Gr\u00e2ce \u00e0 ces partenariats, nous renfor\u00e7ons la participation, \u00e9liminons les obstacles et cr\u00e9ons des environnements sportifs plus \u00e9quitables pour les communaut\u00e9s autochtones, noires et racis\u00e9es.<\/p>\t\t\t\t\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-deb2127 e-flex e-con-boxed e-con e-parent\" data-id=\"deb2127\" data-element_type=\"container\" data-e-type=\"container\" data-settings=\"{&quot;jet_parallax_layout_list&quot;:[]}\">\n\t\t\t\t\t<div class=\"e-con-inner\">\n\t\t\t\t<div class=\"elementor-element elementor-element-c96085f elementor-widget elementor-widget-heading\" data-id=\"c96085f\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"heading.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t<h2 class=\"elementor-heading-title elementor-size-default\">Nos partenaires communautaires<\/h2>\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-c7822f3 elementor-widget elementor-widget-text-editor\" data-id=\"c7822f3\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t<p>D\u00e9couvrez nos partenaires communautaires partout au Canada : Passez la souris ou appuyez sur n&rsquo;importe quelle province.<\/p>\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-94d1ecf elementor-widget elementor-widget-html\" data-id=\"94d1ecf\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"html.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t<!DOCTYPE html>\n<html lang=\"en\">\n<head>\n<meta charset=\"UTF-8\">\n<meta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\">\n<link rel=\"preconnect\" href=\"https:\/\/fonts.googleapis.com\">\n<link rel=\"preconnect\" href=\"https:\/\/fonts.gstatic.com\" crossorigin>\n<link href=\"https:\/\/fonts.googleapis.com\/css2?family=Ubuntu:wght@300;400;500;700&family=Open+Sans:wght@300;400;500;600;700&display=swap\" rel=\"stylesheet\">\n<style>\n  \/* =========================================================\n     ICSN Canada Community Partners Map\n     ========================================================= *\/\n  :root {\n    --bg-panel:       #242428;\n    --province:       #C4141B;\n    --province-hover: #000000;\n    --province-sel:   #C9A419;\n    --province-null:  #cfd2d7;\n    --accent-red:     #C4141B;\n    --accent-gold:    #C9A419;\n    --text-dark:      #1C1C1F;\n    --text-soft:      #E7E7E7;\n    --text-muted:     #8F8F8F;\n    --border-light:   #E7E7E7;\n  }\n\n  .icsn-map-wrap * ,\n  .icsn-map-wrap *::before,\n  .icsn-map-wrap *::after { box-sizing: border-box; }\n\n  .icsn-map-wrap {\n    background: #ffffff;\n    font-family: 'Open Sans', system-ui, sans-serif;\n    color: var(--text-dark);\n    padding: 16px 0;\n    position: relative;\n  }\n\n  .icsn-container {\n    position: relative;\n    max-width: 1180px;\n    margin: 0 auto;\n  }\n\n  \/* \u2500\u2500 MAP LAYOUT \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500 *\/\n  .icsn-map-stage {\n    position: relative;\n    width: 100%;\n    max-width: 1100px;\n    margin: 0 auto;\n    min-height: 240px;\n  }\n  #icsn-svg {\n    width: 100%;\n    height: auto;\n    display: block;\n  }\n  @media (max-width: 620px) {\n    .icsn-map-stage {\n      width: 100vw !important;\n      max-width: 100vw !important;\n      margin-left: calc(50% - 50vw) !important;\n      margin-right: calc(50% - 50vw) !important;\n      padding: 0 8px !important;\n    }\n  }\n  path.prov {\n    fill: var(--province);\n    stroke: #ffffff;\n    stroke-width: 1;\n    cursor: pointer;\n    transition: fill .22s, filter .22s;\n  }\n  path.prov:hover {\n    fill: var(--province-hover);\n    filter: drop-shadow(0 0 10px rgba(0,0,0,.4));\n  }\n  path.prov.is-selected {\n    fill: var(--province-sel);\n    filter: drop-shadow(0 0 10px rgba(201,164,25,.55));\n  }\n  path.prov.is-empty {\n    cursor: default;\n  }\n\n  \/* \u2500\u2500 LOADING \/ ERROR \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500 *\/\n  .icsn-state {\n    position: absolute;\n    inset: 0;\n    display: flex;\n    flex-direction: column;\n    align-items: center;\n    justify-content: center;\n    gap: 14px;\n    background: #ffffff;\n    color: var(--text-muted);\n    font-size: .85rem;\n    font-family: 'Open Sans', sans-serif;\n    font-weight: 500;\n    min-height: 240px;\n  }\n  .icsn-spinner {\n    width: 32px; height: 32px;\n    border: 2px solid var(--border-light);\n    border-top-color: var(--accent-red);\n    border-radius: 50%;\n    animation: icsn-spin 0.9s linear infinite;\n  }\n  @keyframes icsn-spin { to { transform: rotate(360deg); } }\n  .icsn-state.error { color: var(--accent-red); }\n\n  \/* \u2500\u2500 TOOLTIP \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500 *\/\n  #icsn-tooltip {\n    position: absolute;\n    opacity: 0;\n    pointer-events: none;\n    transform: translate(-50%, calc(-100% - 16px));\n    transition: opacity .18s ease, transform .18s ease;\n    background: linear-gradient(150deg, #1f2940, var(--bg-panel));\n    border: 1px solid rgba(201,164,25,.4);\n    border-radius: 12px;\n    padding: 16px 20px 14px;\n    min-width: 180px;\n    max-width: 260px;\n    box-shadow: 0 18px 40px rgba(28,28,31,.28);\n    z-index: 100;\n    text-align: center;\n  }\n  #icsn-tooltip.show {\n    opacity: 1;\n    transform: translate(-50%, calc(-100% - 12px));\n  }\n  #icsn-tooltip.is-touch { pointer-events: auto; }\n  #icsn-tooltip::after {\n    content: \"\";\n    position: absolute;\n    bottom: -6px;\n    left: 50%;\n    transform: translateX(-50%) rotate(45deg);\n    width: 11px; height: 11px;\n    background: var(--bg-panel);\n    border-right: 1px solid rgba(201,164,25,.4);\n    border-bottom: 1px solid rgba(201,164,25,.4);\n  }\n  .tt-close {\n    position: absolute;\n    top: 6px; right: 6px;\n    width: 26px; height: 26px;\n    border-radius: 50%;\n    border: 0;\n    background: rgba(196,20,27,.9);\n    color: #fff;\n    font-size: 14px;\n    font-weight: 700;\n    line-height: 1;\n    cursor: pointer;\n    display: none;\n    align-items: center;\n    justify-content: center;\n    padding: 0;\n    -webkit-tap-highlight-color: transparent;\n    font-family: 'Open Sans', sans-serif;\n  }\n  #icsn-tooltip.is-touch .tt-close { display: flex; }\n  .tt-close:active { transform: scale(.9); }\n  .tt-name {\n    font-family: 'Ubuntu', sans-serif;\n    font-weight: 500;\n    font-size: 1.05rem;\n    letter-spacing: .5px;\n    color: #ffffff;\n    line-height: 1.1;\n    margin-bottom: 10px;\n    padding: 0 22px;\n  }\n  .tt-count {\n    font-family: 'Ubuntu', sans-serif;\n    font-weight: 700;\n    font-size: 2.6rem;\n    color: var(--accent-red);\n    line-height: 1;\n  }\n  .tt-label {\n    font-family: 'Open Sans', sans-serif;\n    font-size: .72rem;\n    font-weight: 600;\n    color: var(--text-soft);\n    opacity: .75;\n    margin-top: 6px;\n  }\n  .tt-cta {\n    font-family: 'Open Sans', sans-serif;\n    font-size: .78rem;\n    font-weight: 700;\n    color: var(--accent-gold);\n    margin-top: 12px;\n    padding-top: 10px;\n    border-top: 1px solid rgba(231,231,231,.12);\n    cursor: pointer;\n  }\n  .tt-cta.is-hidden { display: none; }\n\n  \/* \u2500\u2500 ACTION BUTTON (INTERNATIONAL) \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500 *\/\n  .icsn-actions-row {\n    width: 100%;\n    max-width: 1100px;\n    margin: 28px auto 0;\n    display: flex;\n    justify-content: center;\n    gap: 16px;\n  }\n  @media (max-width: 620px) {\n    .icsn-actions-row {\n      padding: 0 16px;\n    }\n  }\n  .icsn-action-btn {\n    display: inline-flex;\n    align-items: center;\n    gap: 18px;\n    padding: 16px 28px 16px 22px;\n    background: #ffffff;\n    border: 1px solid var(--border-light);\n    border-radius: 14px;\n    cursor: pointer;\n    transition: transform .25s, border-color .25s, box-shadow .25s;\n    font-family: inherit;\n    color: var(--text-dark);\n    flex: 0 1 auto;\n  }\n  @media (max-width: 620px) {\n    .icsn-action-btn { width: 100%; }\n  }\n  .icsn-action-btn:hover {\n    transform: translateY(-2px);\n    border-color: var(--accent-red);\n    box-shadow: 0 12px 28px rgba(196,20,27,.18);\n  }\n  .icsn-action-btn:disabled {\n    cursor: default;\n    opacity: .45;\n  }\n  .icsn-action-btn:disabled:hover {\n    transform: none;\n    border-color: var(--border-light);\n    box-shadow: none;\n  }\n  .action-icon {\n    width: 52px;\n    height: 52px;\n    color: var(--accent-red);\n    flex-shrink: 0;\n  }\n  .action-info {\n    display: flex;\n    flex-direction: column;\n    align-items: flex-start;\n    text-align: left;\n    line-height: 1.1;\n  }\n  .action-name {\n    font-family: 'Ubuntu', sans-serif;\n    font-weight: 500;\n    font-size: 1.15rem;\n    color: var(--text-dark);\n    margin-bottom: 6px;\n  }\n  .action-count-row {\n    display: flex;\n    align-items: baseline;\n    gap: 8px;\n  }\n  .action-count {\n    font-family: 'Ubuntu', sans-serif;\n    font-weight: 700;\n    font-size: 1.9rem;\n    color: var(--accent-red);\n    line-height: 1;\n  }\n  .action-label {\n    font-family: 'Open Sans', sans-serif;\n    font-size: .78rem;\n    font-weight: 600;\n    color: var(--text-muted);\n  }\n\n  \/* \u2500\u2500 POPUP OVERLAY (portaled to body) \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500 *\/\n  #icsn-overlay {\n    display: none;\n    position: fixed !important;\n    top: 0 !important;\n    right: 0 !important;\n    bottom: 0 !important;\n    left: 0 !important;\n    width: 100vw !important;\n    height: 100vh !important;\n    height: 100dvh !important;\n    background: rgba(28, 28, 31, .85);\n    -webkit-backdrop-filter: blur(6px);\n    backdrop-filter: blur(6px);\n    z-index: 2147483647 !important;\n    align-items: center;\n    justify-content: center;\n    padding: 20px;\n    overscroll-behavior: contain;\n    font-family: 'Open Sans', system-ui, sans-serif;\n  }\n  #icsn-overlay.open { display: flex !important; }\n\n  .popup-card {\n    background: linear-gradient(155deg, #1f2940 0%, var(--bg-panel) 100%);\n    border: 1px solid rgba(201,164,25,.22);\n    border-radius: 18px;\n    padding: 38px 36px 32px;\n    width: 100%;\n    max-width: 780px;\n    max-height: calc(100vh - 40px);\n    max-height: calc(100dvh - 40px);\n    display: flex;\n    flex-direction: column;\n    position: relative;\n    box-shadow: 0 32px 80px rgba(0,0,0,.7), 0 0 0 1px rgba(231,231,231,.04);\n    animation: pop-in .28s cubic-bezier(.34,1.56,.64,1);\n    color: #ffffff;\n    font-family: 'Open Sans', sans-serif;\n    overflow: hidden;\n  }\n  @keyframes pop-in {\n    from { transform: scale(.9) translateY(20px); opacity: 0; }\n    to   { transform: scale(1)   translateY(0);    opacity: 1; }\n  }\n  @media (max-width: 620px) {\n    #icsn-overlay { padding: 20px 10px 10px; }\n    .popup-card {\n      padding: 56px 18px 18px;\n      border-radius: 14px;\n      max-height: calc(100vh - 40px);\n      max-height: calc(100dvh - 40px);\n    }\n    .popup-close {\n      top: 14px !important;\n      right: 14px !important;\n    }\n  }\n\n  .popup-close {\n    position: absolute !important;\n    top: 12px !important;\n    right: 12px !important;\n    width: 44px !important;\n    height: 44px !important;\n    min-width: 44px !important;\n    min-height: 44px !important;\n    padding: 0 !important;\n    margin: 0 !important;\n    border-radius: 50% !important;\n    border: 0 !important;\n    background: #C4141B !important;\n    color: #ffffff !important;\n    font-size: 22px !important;\n    line-height: 1 !important;\n    font-weight: 700 !important;\n    text-align: center !important;\n    cursor: pointer !important;\n    display: flex !important;\n    align-items: center !important;\n    justify-content: center !important;\n    visibility: visible !important;\n    opacity: 1 !important;\n    z-index: 10 !important;\n    box-shadow: 0 4px 14px rgba(0,0,0,.5) !important;\n    -webkit-tap-highlight-color: transparent;\n    font-family: 'Open Sans', sans-serif !important;\n  }\n  .popup-close:hover {\n    background: #8f0d13 !important;\n    transform: scale(1.08);\n  }\n  .popup-close:active { transform: scale(.95); }\n\n  .popup-head {\n    flex: 0 0 auto;\n    margin-bottom: 18px;\n    padding-right: 40px;\n  }\n  .popup-eyebrow {\n    display: inline-block;\n    font-family: 'Open Sans', sans-serif;\n    font-size: .72rem;\n    font-weight: 700;\n    letter-spacing: 1px;\n    color: var(--accent-gold);\n    border: 1px solid var(--accent-gold);\n    border-radius: 3px;\n    padding: 3px 9px;\n    margin-bottom: 10px;\n  }\n  .popup-title {\n    font-family: 'Ubuntu', sans-serif;\n    font-weight: 500;\n    font-size: clamp(1.6rem, 4vw, 2.4rem);\n    letter-spacing: .5px;\n    color: #ffffff;\n    line-height: 1.05;\n    margin: 0 0 8px;\n  }\n  .popup-counter {\n    font-family: 'Ubuntu', sans-serif;\n    font-weight: 400;\n    font-size: .95rem;\n    color: var(--text-soft);\n    opacity: .75;\n  }\n  .popup-counter strong {\n    font-weight: 700;\n    color: var(--accent-red);\n    font-size: 1.3rem;\n    margin-right: 4px;\n    opacity: 1;\n  }\n  .popup-divider {\n    flex: 0 0 auto;\n    height: 1px;\n    background: linear-gradient(90deg, rgba(201,164,25,.5), transparent);\n    margin: 0 0 18px;\n  }\n  .popup-grid {\n    flex: 1 1 auto;\n    min-height: 0;\n    display: grid;\n    grid-template-columns: repeat(4, 1fr);\n    gap: 14px;\n    overflow-y: auto;\n    overflow-x: hidden;\n    padding-right: 6px;\n    -webkit-overflow-scrolling: touch;\n    overscroll-behavior: contain;\n  }\n  @media (max-width: 820px) { .popup-grid { grid-template-columns: repeat(3, 1fr); } }\n  @media (max-width: 520px) { .popup-grid { grid-template-columns: repeat(2, 1fr); gap: 10px; } }\n  .popup-grid::-webkit-scrollbar { width: 6px; }\n  .popup-grid::-webkit-scrollbar-track { background: transparent; }\n  .popup-grid::-webkit-scrollbar-thumb { background: rgba(231,231,231,.25); border-radius: 3px; }\n\n  .logo-tile {\n    background: #fff;\n    border-radius: 10px;\n    position: relative;\n    display: block;\n    width: 100%;\n    padding-bottom: 100%;\n    text-decoration: none;\n    transition: transform .22s, box-shadow .22s;\n    overflow: hidden;\n  }\n  .logo-tile:hover {\n    transform: translateY(-3px) scale(1.03);\n    box-shadow: 0 12px 28px rgba(201,164,25,.35);\n  }\n  .logo-tile img {\n    position: absolute !important;\n    top: 10% !important;\n    left: 10% !important;\n    width: 80% !important;\n    height: 80% !important;\n    max-width: 80% !important;\n    max-height: 80% !important;\n    object-fit: contain !important;\n    display: block !important;\n  }\n  .logo-tile .logo-name {\n    position: absolute;\n    left: 0; right: 0; bottom: 0;\n    background: linear-gradient(transparent, rgba(0,0,0,.88));\n    color: #fff;\n    font-family: 'Open Sans', sans-serif;\n    font-size: .72rem;\n    font-weight: 600;\n    padding: 14px 8px 6px;\n    text-align: center;\n    opacity: 0;\n    transition: opacity .22s;\n    pointer-events: none;\n    z-index: 2;\n  }\n  .logo-tile:hover .logo-name { opacity: 1; }\n\n  body.icsn-popup-open { overflow: hidden; }\n<\/style>\n<\/head>\n<body>\n\n<div class=\"icsn-map-wrap\">\n  <div class=\"icsn-container\">\n\n    <!-- MAP -->\n    <div class=\"icsn-map-stage\" id=\"icsn-stage\">\n      <div class=\"icsn-state\" id=\"icsn-loading\">\n        <div class=\"icsn-spinner\"><\/div>\n        <div id=\"icsn-loading-text\">Loading map\u2026<\/div>\n      <\/div>\n      <svg id=\"icsn-svg\" viewBox=\"90 120 800 440\" style=\"display:none\" preserveAspectRatio=\"xMidYMid meet\"><\/svg>\n     <div id=\"icsn-tooltip\" aria-hidden=\"true\">\n        <button class=\"tt-close\" id=\"tt-close\" aria-label=\"Close\" type=\"button\">\u2715<\/button>\n        <div class=\"tt-name\" id=\"tt-name\"><\/div>\n        <div class=\"tt-count\" id=\"tt-count\">0<\/div>\n        <div class=\"tt-label\" id=\"tt-label\">Community Partners<\/div>\n        <div class=\"tt-cta\" id=\"tt-cta\">Read More \u25b8<\/div>\n      <\/div>\n    <\/div>\n\n    <!-- ACTION BUTTON (International only) -->\n    <div class=\"icsn-actions-row\">\n\n      <!-- INTERNATIONAL -->\n      <button class=\"icsn-action-btn\" id=\"icsn-international\" disabled aria-label=\"International partners\">\n        <svg class=\"action-icon\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"1.4\" stroke-linecap=\"round\" stroke-linejoin=\"round\" aria-hidden=\"true\">\n          <circle cx=\"12\" cy=\"12\" r=\"10\"\/>\n          <path d=\"M2 12h20M12 2a15 15 0 010 20M12 2a15 15 0 000 20\"\/>\n        <\/svg>\n        <div class=\"action-info\">\n          <span class=\"action-name\" id=\"btn-international-name\">International<\/span>\n          <span class=\"action-count-row\">\n            <span class=\"action-count\" id=\"international-count\">0<\/span>\n            <span class=\"action-label\" id=\"btn-international-label\">Community Partners<\/span>\n          <\/span>\n        <\/div>\n      <\/button>\n\n    <\/div>\n\n  <\/div>\n<\/div>\n\n<!-- POPUP -->\n<div id=\"icsn-overlay\" role=\"dialog\" aria-modal=\"true\" aria-labelledby=\"pop-name\">\n  <div class=\"popup-card\">\n    <button class=\"popup-close\" id=\"pop-close\" aria-label=\"Close\" type=\"button\">\u2715<\/button>\n    <div class=\"popup-head\">\n      <div class=\"popup-eyebrow\" id=\"pop-eyebrow\">Province<\/div>\n      <h2 class=\"popup-title\" id=\"pop-name\">\u2014<\/h2>\n      <div class=\"popup-counter\"><strong id=\"pop-count\">0<\/strong> <span id=\"pop-label\">Community Partners<\/span><\/div>\n    <\/div>\n    <div class=\"popup-divider\"><\/div>\n    <div class=\"popup-grid\" id=\"pop-grid\"><\/div>\n  <\/div>\n<\/div>\n\n<script src=\"https:\/\/cdnjs.cloudflare.com\/ajax\/libs\/d3\/7.8.5\/d3.min.js\"><\/script>\n<script>\n(function () {\n  'use strict';\n\n  const IS_TOUCH = (('ontouchstart' in window) || navigator.maxTouchPoints > 0);\n\n  \/\/ =========================================================\n  \/\/ LANGUAGE DETECTION\n  \/\/ =========================================================\n  \/\/ Cascade fallback so it never breaks the widget:\n  \/\/   1) <html lang=\"...\"> attribute\n  \/\/   2) URL path starts with \/fr\/\n  \/\/   3) WPML cookie\n  \/\/   4) Default: 'en'\n  \/\/ =========================================================\n  function detectLanguage() {\n    try {\n      var htmlLang = document.documentElement.getAttribute('lang') || '';\n      if (htmlLang.toLowerCase().indexOf('fr') === 0) return 'fr';\n    } catch (e) {}\n\n    try {\n      var path = window.location.pathname || '';\n      if (path === '\/fr' || path.indexOf('\/fr\/') === 0) return 'fr';\n    } catch (e) {}\n\n    try {\n      var cookies = (document.cookie || '').split(';');\n      for (var i = 0; i < cookies.length; i++) {\n        var c = cookies[i].trim();\n        \/\/ WPML uses various cookie names across versions\n        if (c.indexOf('wp-wpml_current_language=fr') === 0) return 'fr';\n        if (c.indexOf('_icl_current_language=fr') === 0) return 'fr';\n      }\n    } catch (e) {}\n\n    return 'en';\n  }\n\n  const LANG = detectLanguage();\n  const IS_FR = (LANG === 'fr');\n\n  \/\/ =========================================================\n  \/\/ LOCALES \u2014 all translatable strings\n  \/\/ =========================================================\n  const LOCALES = {\n    en: {\n      loadingMap:          'Loading map\u2026',\n      unableToLoad:        '\u26a0\ufe0f Unable to load map. Please try again shortly.',\n      communityPartners:   'Community Partners',\n      communityPartner:    'Community Partner',\n      readMore:            'Read More \u25b8',\n      internationalBtn:    'International',\n      worldwideEyebrow:    'Worldwide',\n      provinceEyebrow:     'Province',\n    },\n    fr: {\n      loadingMap:          'Chargement de la carte\u2026',\n      unableToLoad:        '\u26a0\ufe0f Impossible de t\u00e9l\u00e9charger la carte. Veuillez r\u00e9essayer bient\u00f4t.',\n      communityPartners:   'Partenaires communautaires',\n      communityPartner:    'Partenaire communautaire',\n      readMore:            'En savoir plus \u25b8',\n      internationalBtn:    'Internationale',\n      worldwideEyebrow:    '\u00c0 travers le monde',\n      provinceEyebrow:     'Province',\n    }\n  };\n\n  function t(key) {\n    return (LOCALES[LANG] && LOCALES[LANG][key]) || LOCALES.en[key] || '';\n  }\n\n  \/\/ Pluralization helper for \"Community Partner(s)\"\n  function partnersLabel(count) {\n    return count === 1 ? t('communityPartner') : t('communityPartners');\n  }\n\n  \/\/ =========================================================\n  \/\/ PERMALINK LOCALIZATION\n  \/\/ =========================================================\n  \/\/ Transforms \/community-part-logos\/... \u2192 \/fr\/community-part-logos\/...\n  \/\/ Rules:\n  \/\/   - Only applies when LANG === 'fr'\n  \/\/   - Only touches URLs from the ICSN domain\n  \/\/   - Never duplicates \/fr\/ if already present\n  \/\/   - Preserves query strings and anchors\n  \/\/   - Returns original URL on any error\n  \/\/ =========================================================\n  const ICSN_HOST = 'inclusionincanadiansports.ca';\n\n  function localizePermalink(url) {\n    if (!IS_FR || !url) return url;\n    try {\n      \/\/ Only transform URLs on the ICSN domain\n      if (url.indexOf(ICSN_HOST) === -1) return url;\n\n      var u = new URL(url);\n      var path = u.pathname || '\/';\n\n      \/\/ Already localized? Return as-is\n      if (path === '\/fr' || path.indexOf('\/fr\/') === 0) return url;\n\n      \/\/ Insert \/fr at the start of the path\n      u.pathname = '\/fr' + (path.charAt(0) === '\/' ? path : '\/' + path);\n      return u.toString();\n    } catch (e) {\n      \/\/ If anything fails, fall back to original URL \u2014 never break the link\n      return url;\n    }\n  }\n\n  \/\/ =========================================================\n  \/\/ APPLY STATIC LABELS ASAP\n  \/\/ =========================================================\n  \/\/ Localizes the visible-immediately texts (before fetch\/init runs).\n  \/\/ If JS fails or is slow, texts fall back to the EN in the HTML \u2014\n  \/\/ safe default.\n  \/\/ =========================================================\n  function applyStaticLabels() {\n    var loadingText = $('icsn-loading-text');\n    if (loadingText) loadingText.textContent = t('loadingMap');\n\n    var btnName = $('btn-international-name');\n    if (btnName) btnName.textContent = t('internationalBtn');\n\n    var btnLabel = $('btn-international-label');\n    if (btnLabel) btnLabel.textContent = t('communityPartners');\n\n    \/\/ Button aria-label for accessibility\n    var btn = $('icsn-international');\n    if (btn) {\n      btn.setAttribute(\n        'aria-label',\n        IS_FR ? 'Partenaires internationaux' : 'International partners'\n      );\n    }\n  }\n\n  function portalPopup() {\n    const overlay = document.getElementById('icsn-overlay');\n    if (overlay && overlay.parentNode !== document.body) {\n      document.body.appendChild(overlay);\n    }\n  }\n  if (document.readyState === 'loading') {\n    document.addEventListener('DOMContentLoaded', portalPopup);\n  } else {\n    portalPopup();\n  }\n\n  const CONFIG = {\n    WP_BASE: 'https:\/\/inclusionincanadiansports.ca\/wp-json\/wp\/v2',\n    GEOJSON_URL: 'https:\/\/raw.githubusercontent.com\/codeforamerica\/click_that_hood\/master\/public\/data\/canada.geojson',\n    CACHE_KEY: 'icsn_canada_geojson_v1',\n    PER_PAGE: 100,\n    MAX_PAGES: 10,\n  };\n\n  \/\/ Each province has both EN and FR labels\n  const PROVINCE_MAP = {\n    'Alberta':                    { slug: 'alberta',                    label: 'Alberta',                   labelFr: 'Alberta' },\n    'British Columbia':           { slug: 'british-columbia',           label: 'British Columbia',          labelFr: 'Colombie-Britannique' },\n    'Manitoba':                   { slug: 'manitoba',                   label: 'Manitoba',                  labelFr: 'Manitoba' },\n    'New Brunswick':              { slug: 'new-brunswick',              label: 'New Brunswick',             labelFr: 'Nouveau-Brunswick' },\n    'Newfoundland and Labrador':  { slug: 'newfoundland-and-labrador',  label: 'Newfoundland and Labrador', labelFr: 'Terre-Neuve-et-Labrador' },\n    'Northwest Territories':      { slug: 'northwest-territories',      label: 'Northwest Territories',     labelFr: 'Territoires du Nord-Ouest' },\n    'Nova Scotia':                { slug: 'nova-scotia',                label: 'Nova Scotia',               labelFr: 'Nouvelle-\u00c9cosse' },\n    'Nunavut':                    { slug: 'nunavut',                    label: 'Nunavut',                   labelFr: 'Nunavut' },\n    'Ontario':                    { slug: 'ontario',                    label: 'Ontario',                   labelFr: 'Ontario' },\n    'Prince Edward Island':       { slug: 'prince-edward-island',       label: 'Prince Edward Island',      labelFr: '\u00cele-du-Prince-\u00c9douard' },\n    'Quebec':                     { slug: 'quebec',                     label: 'Quebec',                    labelFr: 'Qu\u00e9bec' },\n    'Qu\u00e9bec':                     { slug: 'quebec',                     label: 'Quebec',                    labelFr: 'Qu\u00e9bec' },\n    'Saskatchewan':               { slug: 'saskatchewan',               label: 'Saskatchewan',              labelFr: 'Saskatchewan' },\n    'Yukon':                      { slug: 'yukon',                      label: 'Yukon',                     labelFr: 'Yukon' },\n    'Yukon Territory':            { slug: 'yukon',                      label: 'Yukon',                     labelFr: 'Yukon' },\n  };\n  const CANADIAN_SLUGS = Object.values(PROVINCE_MAP).map(v => v.slug).filter((v,i,a)=>a.indexOf(v)===i);\n\n  const $ = (id) => document.getElementById(id);\n  const state = {\n    byProvince: {},\n    international: [],\n    animatedProvinces: new Set(),\n    currentSelectedSlug: null,\n    savedScrollY: 0,\n    geoFeatures: [],\n  };\n\n  let touchTooltipSlug = null;\n\n  \/\/ Now that $ is defined, apply static labels\n  applyStaticLabels();\n\n  async function loadGeoJSON() {\n    try {\n      const cached = sessionStorage.getItem(CONFIG.CACHE_KEY);\n      if (cached) return JSON.parse(cached);\n    } catch (e) {}\n    const res = await fetch(CONFIG.GEOJSON_URL);\n    if (!res.ok) throw new Error('GeoJSON HTTP ' + res.status);\n    const data = await res.json();\n    try { sessionStorage.setItem(CONFIG.CACHE_KEY, JSON.stringify(data)); } catch(e) {}\n    return data;\n  }\n\n  async function loadProvinces() {\n    const res = await fetch(CONFIG.WP_BASE + '\/province?per_page=20');\n    if (!res.ok) throw new Error('Provinces HTTP ' + res.status);\n    const terms = await res.json();\n    const idToSlug = {};\n    terms.forEach(t => { idToSlug[t.id] = t.slug; });\n    return idToSlug;\n  }\n\n  async function loadAllPartners() {\n    const out = [];\n    for (let page = 1; page <= CONFIG.MAX_PAGES; page++) {\n      const url = `${CONFIG.WP_BASE}\/community-part-logos?per_page=${CONFIG.PER_PAGE}&page=${page}&_fields=id,title,province,acf_fields`;\n      const res = await fetch(url);\n      if (!res.ok) {\n        if (res.status === 400 && page > 1) break;\n        throw new Error('Partners HTTP ' + res.status);\n      }\n      const batch = await res.json();\n      if (!Array.isArray(batch) || batch.length === 0) break;\n      out.push(...batch);\n      if (batch.length < CONFIG.PER_PAGE) break;\n    }\n    return out;\n  }\n\n  function buildGroups(partners, idToSlug) {\n    const byProvince = {};\n    const international = [];\n    CANADIAN_SLUGS.forEach(s => { byProvince[s] = []; });\n\n    partners.forEach(p => {\n      const acf = p.acf_fields;\n      if (!acf || typeof acf !== 'object' || Array.isArray(acf)) return;\n\n      const logoObj = acf.logo;\n      if (!logoObj || typeof logoObj !== 'object' || !logoObj.url) return;\n\n      const record = {\n        id:   p.id,\n        name: decodeEntities(p.title && p.title.rendered ? p.title.rendered : ''),\n        logo: logoObj.medium || logoObj.large || logoObj.url,\n        alt:  (logoObj.alt && logoObj.alt.trim()) || decodeEntities(p.title.rendered || 'Partner'),\n        link: acf.permalink || null,\n      };\n      if (!record.name) return;\n\n      const provIds = Array.isArray(p.province) ? p.province : [];\n      const slugs = provIds.map(id => idToSlug[id]).filter(Boolean);\n      if (slugs.length === 0) return;\n\n      if (slugs.includes('international')) {\n        pushUnique(international, record);\n      }\n      slugs.forEach(s => {\n        if (s === 'international') return;\n        if (byProvince[s]) pushUnique(byProvince[s], record);\n      });\n    });\n\n    return { byProvince, international };\n  }\n\n  function pushUnique(arr, rec) {\n    if (!arr.some(x => x.id === rec.id)) arr.push(rec);\n  }\n\n  function decodeEntities(str) {\n    if (!str) return '';\n    const el = document.createElement('textarea');\n    el.innerHTML = str;\n    return el.value.trim();\n  }\n\n  const PROJ_W = 960, PROJ_H = 620;\n  const projection = d3.geoAzimuthalEqualArea()\n    .rotate([96, -62])\n    .center([0, 0])\n    .scale(720)\n    .translate([PROJ_W \/ 2, PROJ_H \/ 2]);\n  const geoPath = d3.geoPath().projection(projection);\n\n  function slugForFeature(f) {\n    const entry = PROVINCE_MAP[f.properties.name];\n    return entry ? entry.slug : null;\n  }\n\n  function labelForFeature(f) {\n    const entry = PROVINCE_MAP[f.properties.name];\n    if (!entry) return f.properties.name;\n    \/\/ Return FR label when in French mode, EN otherwise\n    return IS_FR ? (entry.labelFr || entry.label) : entry.label;\n  }\n\n  function buildMap(geo) {\n    const svg = d3.select('#icsn-svg');\n    svg.selectAll('path').remove();\n\n    svg.selectAll('path.prov')\n      .data(geo.features)\n      .enter().append('path')\n        .attr('d', geoPath)\n        .attr('class', d => {\n          const slug = slugForFeature(d);\n          const hasData = slug && state.byProvince[slug] && state.byProvince[slug].length > 0;\n          return 'prov' + (hasData ? '' : ' is-empty');\n        })\n        .attr('data-slug', d => slugForFeature(d) || '')\n        .on('mouseenter', onProvMouseEnter)\n        .on('mousemove',  onProvMouseMove)\n        .on('mouseleave', onProvMouseLeave)\n        .on('click',      onProvClick);\n\n    $('icsn-loading').style.display = 'none';\n    $('icsn-svg').style.display = 'block';\n\n    state.geoFeatures = geo.features;\n  }\n\n  \/\/ Helpers to set tooltip mode\n  function setTooltipFull(d, list) {\n    $('tt-name').textContent = labelForFeature(d);\n    $('tt-label').textContent = partnersLabel(list.length);\n    $('tt-cta').textContent = t('readMore');\n    $('tt-cta').classList.remove('is-hidden');\n    $('tt-cta').style.cursor = 'pointer';\n    const slug = slugForFeature(d);\n    const countEl = $('tt-count');\n    if (!state.animatedProvinces.has(slug)) {\n      state.animatedProvinces.add(slug);\n      animateCount(countEl, list.length, 900);\n    } else {\n      countEl.textContent = list.length;\n    }\n  }\n\n  function setTooltipEmpty(d) {\n    $('tt-name').textContent = labelForFeature(d);\n    $('tt-count').textContent = '0';\n    $('tt-label').textContent = t('communityPartners');\n    $('tt-cta').classList.add('is-hidden');\n  }\n\n  function onProvMouseEnter(event, d) {\n    if (IS_TOUCH) return;\n    const slug = slugForFeature(d);\n    if (!slug) return;\n    const list = state.byProvince[slug] || [];\n\n    if (list.length === 0) {\n      setTooltipEmpty(d);\n    } else {\n      setTooltipFull(d, list);\n    }\n\n    positionTooltip(d);\n    $('icsn-tooltip').classList.add('show');\n  }\n\n  function onProvMouseMove(event, d) {\n    if (IS_TOUCH) return;\n    if (!slugForFeature(d)) return;\n    positionTooltip(d);\n  }\n\n  function onProvMouseLeave() {\n    if (IS_TOUCH) return;\n    $('icsn-tooltip').classList.remove('show');\n  }\n\n  function showTooltipTouch(d) {\n    const slug = slugForFeature(d);\n    if (!slug) return;\n    const list = state.byProvince[slug] || [];\n\n    const tip = $('icsn-tooltip');\n    tip.classList.add('is-touch');\n\n    if (list.length === 0) {\n      setTooltipEmpty(d);\n    } else {\n      setTooltipFull(d, list);\n    }\n\n    positionTooltip(d);\n    tip.classList.add('show');\n    touchTooltipSlug = slug;\n  }\n\n  function hideTooltipTouch() {\n    $('icsn-tooltip').classList.remove('show');\n    touchTooltipSlug = null;\n  }\n\n  function positionTooltip(d) {\n    const svgEl = $('icsn-svg');\n    const stage = $('icsn-stage');\n    const rect = svgEl.getBoundingClientRect();\n    const stageRect = stage.getBoundingClientRect();\n\n    const centroid = geoPath.centroid(d);\n    if (isNaN(centroid[0])) return;\n\n    const VB_X = 90, VB_Y = 120, VB_W = 800, VB_H = 440;\n    const scaleX = rect.width \/ VB_W;\n    const scaleY = rect.height \/ VB_H;\n\n    const x = (centroid[0] - VB_X) * scaleX + (rect.left - stageRect.left);\n    const y = (centroid[1] - VB_Y) * scaleY + (rect.top  - stageRect.top);\n\n    const tip = $('icsn-tooltip');\n    tip.style.left = x + 'px';\n    tip.style.top  = y + 'px';\n  }\n\n  function onProvClick(event, d) {\n    const slug = slugForFeature(d);\n    if (!slug) return;\n    const list = state.byProvince[slug] || [];\n\n    \/\/ Empty province: only show tooltip with message, never open the big popup\n    if (list.length === 0) {\n      if (IS_TOUCH) {\n        if (touchTooltipSlug === slug) {\n          hideTooltipTouch();\n        } else {\n          showTooltipTouch(d);\n        }\n      }\n      return;\n    }\n\n    \/\/ Province with partners: normal behaviour\n    if (!IS_TOUCH) {\n      openPopup({ slug, eyebrow: t('provinceEyebrow'), name: labelForFeature(d), list });\n      return;\n    }\n    if (touchTooltipSlug === slug) {\n      hideTooltipTouch();\n      openPopup({ slug, eyebrow: t('provinceEyebrow'), name: labelForFeature(d), list });\n    } else {\n      showTooltipTouch(d);\n    }\n  }\n\n  function lockBodyScroll() {\n    state.savedScrollY = window.scrollY || window.pageYOffset || 0;\n    document.body.classList.add('icsn-popup-open');\n    document.body.style.position = 'fixed';\n    document.body.style.top = '-' + state.savedScrollY + 'px';\n    document.body.style.left = '0';\n    document.body.style.right = '0';\n    document.body.style.width = '100%';\n  }\n\n  function unlockBodyScroll() {\n    document.body.classList.remove('icsn-popup-open');\n    document.body.style.position = '';\n    document.body.style.top = '';\n    document.body.style.left = '';\n    document.body.style.right = '';\n    document.body.style.width = '';\n    window.scrollTo(0, state.savedScrollY);\n  }\n\n  function openPopup(opts) {\n    hideTooltipTouch();\n    $('icsn-tooltip').classList.remove('show');\n\n    if (state.currentSelectedSlug) {\n      d3.select('[data-slug=\"' + state.currentSelectedSlug + '\"]').classed('is-selected', false);\n    }\n    if (opts.slug && opts.slug !== 'international') {\n      d3.select('[data-slug=\"' + opts.slug + '\"]').classed('is-selected', true);\n      state.currentSelectedSlug = opts.slug;\n    } else {\n      state.currentSelectedSlug = null;\n    }\n\n    $('pop-eyebrow').textContent = opts.eyebrow;\n    $('pop-name').textContent    = opts.name;\n    $('pop-count').textContent   = opts.list.length;\n    $('pop-label').textContent   = partnersLabel(opts.list.length);\n\n    const grid = $('pop-grid');\n    grid.innerHTML = '';\n    grid.scrollTop = 0;\n\n    const sorted = opts.list.slice().sort((a,b) => a.name.localeCompare(b.name));\n    sorted.forEach(p => grid.appendChild(buildLogoTile(p)));\n\n    $('icsn-overlay').classList.add('open');\n    lockBodyScroll();\n  }\n\n  function buildLogoTile(p) {\n    \/\/ Localize the permalink so \/fr\/ visitors land on the FR partner page\n    const localizedLink = p.link ? localizePermalink(p.link) : null;\n\n    const tile = document.createElement(localizedLink ? 'a' : 'div');\n    tile.className = 'logo-tile';\n    if (localizedLink) {\n      tile.href = localizedLink;\n      tile.target = '_blank';\n      tile.rel = 'noopener noreferrer';\n    }\n    tile.title = p.name;\n\n    const img = document.createElement('img');\n    img.src = p.logo;\n    img.alt = p.alt || p.name;\n    img.loading = 'lazy';\n    img.onerror = function() {\n      console.warn('[ICSN Map] Logo failed to load:', p.name, p.logo);\n    };\n    tile.appendChild(img);\n\n    const label = document.createElement('span');\n    label.className = 'logo-name';\n    label.textContent = p.name;\n    tile.appendChild(label);\n\n    return tile;\n  }\n\n  function closePopup() {\n    $('icsn-overlay').classList.remove('open');\n    unlockBodyScroll();\n    if (state.currentSelectedSlug) {\n      d3.select('[data-slug=\"' + state.currentSelectedSlug + '\"]').classed('is-selected', false);\n      state.currentSelectedSlug = null;\n    }\n  }\n\n  function setupActionButton(btnId, countId, list, popupOpts) {\n    const btn = $(btnId);\n    const countEl = $(countId);\n    const count = list.length;\n\n    if (count === 0) {\n      btn.disabled = true;\n      countEl.textContent = '0';\n      return;\n    }\n    btn.disabled = false;\n    animateCount(countEl, count, 1100);\n\n    btn.addEventListener('click', () => {\n      openPopup(Object.assign({ list }, popupOpts));\n    });\n  }\n\n  function animateCount(el, target, duration) {\n    if (target <= 0) { el.textContent = '0'; return; }\n    const start = performance.now();\n    const tick = now => {\n      const p = Math.min((now - start) \/ duration, 1);\n      const eased = 1 - Math.pow(1 - p, 3);\n      el.textContent = Math.floor(eased * target);\n      if (p < 1) requestAnimationFrame(tick);\n      else el.textContent = target;\n    };\n    requestAnimationFrame(tick);\n  }\n\n  async function init() {\n    try {\n      const [geo, idToSlug, partners] = await Promise.all([\n        loadGeoJSON(),\n        loadProvinces(),\n        loadAllPartners(),\n      ]);\n      const grouped = buildGroups(partners, idToSlug);\n      state.byProvince    = grouped.byProvince;\n      state.international = grouped.international;\n\n      buildMap(geo);\n\n      setupActionButton('icsn-international', 'international-count', state.international, {\n        slug: 'international',\n        eyebrow: t('worldwideEyebrow'),\n        name: t('internationalBtn'),\n      });\n    } catch (err) {\n      console.error('[ICSN Map]', err);\n      const loading = $('icsn-loading');\n      loading.innerHTML = '';\n      loading.classList.add('error');\n      const msg = document.createElement('div');\n      msg.textContent = t('unableToLoad');\n      loading.appendChild(msg);\n    }\n  }\n\n  function bindPopupEvents() {\n    $('pop-close').addEventListener('click', closePopup);\n    $('icsn-overlay').addEventListener('click', e => {\n      if (e.target === $('icsn-overlay')) closePopup();\n    });\n\n    $('tt-close').addEventListener('click', function(e) {\n      e.stopPropagation();\n      hideTooltipTouch();\n    });\n\n    $('tt-cta').addEventListener('click', function(e) {\n      if (!IS_TOUCH) return;\n      e.stopPropagation();\n      if (!touchTooltipSlug) return;\n      const feat = state.geoFeatures.find(f => slugForFeature(f) === touchTooltipSlug);\n      if (feat) {\n        const slug = touchTooltipSlug;\n        const list = state.byProvince[slug] || [];\n        if (list.length === 0) return;\n        hideTooltipTouch();\n        openPopup({\n          slug,\n          eyebrow: t('provinceEyebrow'),\n          name: labelForFeature(feat),\n          list,\n        });\n      }\n    });\n\n    document.addEventListener('click', function(e) {\n      if (!IS_TOUCH) return;\n      const tip = $('icsn-tooltip');\n      if (!tip.classList.contains('show')) return;\n      if (tip.contains(e.target)) return;\n      if (e.target.closest && e.target.closest('path.prov')) return;\n      hideTooltipTouch();\n    });\n  }\n\n  document.addEventListener('keydown', e => {\n    if ($('icsn-overlay').classList.contains('open')) {\n      if (e.key === 'Escape') closePopup();\n    } else if ($('icsn-tooltip').classList.contains('show')) {\n      if (e.key === 'Escape') hideTooltipTouch();\n    }\n  });\n\n  if (document.readyState === 'loading') {\n    document.addEventListener('DOMContentLoaded', function() {\n      bindPopupEvents();\n      init();\n    });\n  } else {\n    bindPopupEvents();\n    init();\n  }\n})();\n<\/script>\n<\/body>\n<\/html>\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-7737f9f elementor-widget elementor-widget-text-editor\" data-id=\"7737f9f\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t<p>Derni\u00e8re mise \u00e0 jour : juin 2026<\/p>\t\t\t\t\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-0a068f8 e-flex e-con-boxed e-con e-parent\" data-id=\"0a068f8\" data-element_type=\"container\" data-e-type=\"container\" data-settings=\"{&quot;jet_parallax_layout_list&quot;:[]}\">\n\t\t\t\t\t<div class=\"e-con-inner\">\n\t\t\t\t<div class=\"elementor-element elementor-element-9bc0ed7 elementor-widget__width-inherit elementor-widget elementor-widget-heading\" data-id=\"9bc0ed7\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"heading.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t<h2 class=\"elementor-heading-title elementor-size-default\">Qu'est-ce qu'un partenaire communautaire\u2009?<\/h2>\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-76e913c elementor-widget__width-initial elementor-widget-laptop__width-inherit elementor-widget-tablet__width-inherit elementor-widget elementor-widget-text-editor\" data-id=\"76e913c\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\tLes partenaires communautaires sont des organisations qui collaborent directement avec IRSC pour mettre en \u0153uvre des programmes, accompagner les participants et \u00e9largir l&rsquo;acc\u00e8s au sport au sein de leurs communaut\u00e9s.\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-091deba elementor-widget__width-initial elementor-widget-tablet__width-inherit elementor-widget elementor-widget-text-editor\" data-id=\"091deba\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t<p>Ils jouent un r\u00f4le essentiel dans :<\/p><ul><li>La mise en \u0153uvre de programmes tels que Briser les barri\u00e8res et B\u00e2tir des ponts<\/li><li>L&rsquo;implication des communaut\u00e9s mal-desservies<\/li><li>Le soutien au recrutement et \u00e0 la r\u00e9tention des participants<\/li><li>La cr\u00e9ation d&rsquo;un impact concret sur le terrain<\/li><\/ul>\t\t\t\t\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-b31b295 e-con-full e-flex e-con e-parent\" data-id=\"b31b295\" data-element_type=\"container\" data-e-type=\"container\" data-settings=\"{&quot;jet_parallax_layout_list&quot;:[]}\">\n\t\t\t\t<div class=\"elementor-element elementor-element-ad53c13 elementor-arrows-position-inside elementor-widget elementor-widget-image-carousel\" data-id=\"ad53c13\" data-element_type=\"widget\" data-e-type=\"widget\" data-settings=\"{&quot;navigation&quot;:&quot;arrows&quot;,&quot;slides_to_show&quot;:&quot;4&quot;,&quot;slides_to_scroll&quot;:&quot;4&quot;,&quot;autoplay&quot;:&quot;yes&quot;,&quot;pause_on_hover&quot;:&quot;yes&quot;,&quot;pause_on_interaction&quot;:&quot;yes&quot;,&quot;autoplay_speed&quot;:5000,&quot;infinite&quot;:&quot;yes&quot;,&quot;speed&quot;:500}\" data-widget_type=\"image-carousel.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t<div class=\"elementor-image-carousel-wrapper swiper\" role=\"region\" aria-roledescription=\"carousel\" aria-label=\"Image Carousel\" dir=\"ltr\">\n\t\t\t<div class=\"elementor-image-carousel swiper-wrapper\" aria-live=\"off\">\n\t\t\t\t\t\t\t\t<div class=\"swiper-slide\" role=\"group\" aria-roledescription=\"slide\" aria-label=\"1 sur 10\"><figure class=\"swiper-slide-inner\"><img decoding=\"async\" class=\"swiper-slide-image\" src=\"https:\/\/inclusionincanadiansports.ca\/wp-content\/uploads\/2025\/09\/ajax-community-partner-ICSN-Swim-690.jpg\" alt=\"ajax-community-partner-ICSN-Swim-690\" \/><\/figure><\/div><div class=\"swiper-slide\" role=\"group\" aria-roledescription=\"slide\" aria-label=\"2 sur 10\"><figure class=\"swiper-slide-inner\"><img decoding=\"async\" class=\"swiper-slide-image\" src=\"https:\/\/inclusionincanadiansports.ca\/wp-content\/uploads\/2026\/07\/community-partners-sport-for-life-caroussel.webp\" alt=\"community-partners-sport-for-life-caroussel\" \/><\/figure><\/div><div class=\"swiper-slide\" role=\"group\" aria-roledescription=\"slide\" aria-label=\"3 sur 10\"><figure class=\"swiper-slide-inner\"><img decoding=\"async\" class=\"swiper-slide-image\" src=\"https:\/\/inclusionincanadiansports.ca\/wp-content\/uploads\/2025\/10\/community-partners-CSHoF-image.jpg\" alt=\"community-partners-CSHoF-image\" \/><\/figure><\/div><div class=\"swiper-slide\" role=\"group\" aria-roledescription=\"slide\" aria-label=\"4 sur 10\"><figure class=\"swiper-slide-inner\"><img decoding=\"async\" class=\"swiper-slide-image\" src=\"https:\/\/inclusionincanadiansports.ca\/wp-content\/uploads\/2025\/09\/community-partners-CWS-image.jpg\" alt=\"community-partners-CWS-image\" \/><\/figure><\/div><div class=\"swiper-slide\" role=\"group\" aria-roledescription=\"slide\" aria-label=\"5 sur 10\"><figure class=\"swiper-slide-inner\"><img decoding=\"async\" class=\"swiper-slide-image\" src=\"https:\/\/inclusionincanadiansports.ca\/wp-content\/uploads\/2025\/10\/ottawa-basketball-network-image.jpg\" alt=\"ottawa-basketball-network-image\" \/><\/figure><\/div><div class=\"swiper-slide\" role=\"group\" aria-roledescription=\"slide\" aria-label=\"6 sur 10\"><figure class=\"swiper-slide-inner\"><img decoding=\"async\" class=\"swiper-slide-image\" src=\"https:\/\/inclusionincanadiansports.ca\/wp-content\/uploads\/2026\/07\/community-partner-caroussel-rbc-training-ground.webp\" alt=\"community-partner-caroussel-rbc-training-ground\" \/><\/figure><\/div><div class=\"swiper-slide\" role=\"group\" aria-roledescription=\"slide\" aria-label=\"7 sur 10\"><figure class=\"swiper-slide-inner\"><img decoding=\"async\" class=\"swiper-slide-image\" src=\"https:\/\/inclusionincanadiansports.ca\/wp-content\/uploads\/2025\/10\/community-partners-COACH-image.jpg\" alt=\"community-partners-COACH-image\" \/><\/figure><\/div><div class=\"swiper-slide\" role=\"group\" aria-roledescription=\"slide\" aria-label=\"8 sur 10\"><figure class=\"swiper-slide-inner\"><img decoding=\"async\" class=\"swiper-slide-image\" src=\"https:\/\/inclusionincanadiansports.ca\/wp-content\/uploads\/2025\/09\/black-girl-hockey-club-community-partner.jpg\" alt=\"black-girl-hockey-club-community-partner\" \/><\/figure><\/div><div class=\"swiper-slide\" role=\"group\" aria-roledescription=\"slide\" aria-label=\"9 sur 10\"><figure class=\"swiper-slide-inner\"><img decoding=\"async\" class=\"swiper-slide-image\" src=\"https:\/\/inclusionincanadiansports.ca\/wp-content\/uploads\/2025\/10\/Soul-Cap-Image.jpg\" alt=\"Soul-Cap-Image\" \/><\/figure><\/div><div class=\"swiper-slide\" role=\"group\" aria-roledescription=\"slide\" aria-label=\"10 sur 10\"><figure class=\"swiper-slide-inner\"><img decoding=\"async\" class=\"swiper-slide-image\" src=\"https:\/\/inclusionincanadiansports.ca\/wp-content\/uploads\/2026\/06\/fifa-no-discromination.jpg\" alt=\"fifa-no-discromination\" \/><\/figure><\/div>\t\t\t<\/div>\n\t\t\t\t\t\t\t\t\t\t\t\t<div class=\"elementor-swiper-button elementor-swiper-button-prev\" role=\"button\" tabindex=\"0\">\n\t\t\t\t\t\t<svg aria-hidden=\"true\" class=\"e-font-icon-svg e-eicon-chevron-left\" viewBox=\"0 0 1000 1000\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\"><path d=\"M646 125C629 125 613 133 604 142L308 442C296 454 292 471 292 487 292 504 296 521 308 533L604 854C617 867 629 875 646 875 663 875 679 871 692 858 704 846 713 829 713 812 713 796 708 779 692 767L438 487 692 225C700 217 708 204 708 187 708 171 704 154 692 142 675 129 663 125 646 125Z\"><\/path><\/svg>\t\t\t\t\t<\/div>\n\t\t\t\t\t<div class=\"elementor-swiper-button elementor-swiper-button-next\" role=\"button\" tabindex=\"0\">\n\t\t\t\t\t\t<svg aria-hidden=\"true\" class=\"e-font-icon-svg e-eicon-chevron-right\" viewBox=\"0 0 1000 1000\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\"><path d=\"M696 533C708 521 713 504 713 487 713 471 708 454 696 446L400 146C388 133 375 125 354 125 338 125 325 129 313 142 300 154 292 171 292 187 292 204 296 221 308 233L563 492 304 771C292 783 288 800 288 817 288 833 296 850 308 863 321 871 338 875 354 875 371 875 388 867 400 854L696 533Z\"><\/path><\/svg>\t\t\t\t\t<\/div>\n\t\t\t\t\n\t\t\t\t\t\t\t\t\t<\/div>\n\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-cffeb12 e-flex e-con-boxed e-con e-parent\" data-id=\"cffeb12\" data-element_type=\"container\" data-e-type=\"container\" data-settings=\"{&quot;background_background&quot;:&quot;classic&quot;,&quot;jet_parallax_layout_list&quot;:[]}\">\n\t\t\t\t\t<div class=\"e-con-inner\">\n\t\t\t\t<div class=\"elementor-element elementor-element-92e56b8 elementor-widget__width-inherit elementor-widget elementor-widget-heading\" data-id=\"92e56b8\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"heading.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t<h2 class=\"elementor-heading-title elementor-size-default\">Devenez partenaire communautaire<\/h2>\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-cfb7d4f elementor-widget elementor-widget-text-editor\" data-id=\"cfb7d4f\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t<p>Rejoignez un r\u00e9seau en pleine expansion d&rsquo;organisations engag\u00e9es \u00e0 promouvoir l&rsquo;\u00e9quit\u00e9 dans le sport.<\/p>\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-d1f51c4 elementor-align-center elementor-widget elementor-widget-button\" data-id=\"d1f51c4\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"button.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t<div class=\"elementor-button-wrapper\">\n\t\t\t\t\t<a class=\"elementor-button elementor-button-link elementor-size-sm\" href=\"https:\/\/forms.gle\/5f8kbfMTBLeK5TRq7\" target=\"_blank\">\n\t\t\t\t\t\t<span class=\"elementor-button-content-wrapper\">\n\t\t\t\t\t\t\t\t\t<span class=\"elementor-button-text\">Demandez \u00e0 devenir partenaire<\/span>\n\t\t\t\t\t<\/span>\n\t\t\t\t\t<\/a>\n\t\t\t\t<\/div>\n\t\t\t\t\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-5582f91 e-flex e-con-boxed e-con e-parent\" data-id=\"5582f91\" data-element_type=\"container\" data-e-type=\"container\" data-settings=\"{&quot;background_background&quot;:&quot;classic&quot;,&quot;jet_parallax_layout_list&quot;:[]}\">\n\t\t\t\t\t<div class=\"e-con-inner\">\n\t\t\t\t<div class=\"elementor-element elementor-element-56fe8c5 elementor-widget elementor-widget-heading\" data-id=\"56fe8c5\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"heading.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t<h2 class=\"elementor-heading-title elementor-size-default\">Le leadership par le sport #plusensemble<\/h2>\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\t\t<\/div>\n\t\t","protected":false},"excerpt":{"rendered":"<p>Construire un sport inclusif \u2013 ensemble Nos partenaires communautaires sont au c\u0153ur de l&rsquo;impact d&rsquo;IRSC : ils mettent en \u0153uvre des programmes, facilitent l&rsquo;acc\u00e8s et sont les moteurs du changement au niveau local partout au Canada. Gr\u00e2ce \u00e0 ces partenariats, nous renfor\u00e7ons la participation, \u00e9liminons les obstacles et cr\u00e9ons des environnements sportifs plus \u00e9quitables pour [&hellip;]<\/p>\n","protected":false},"author":1,"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-3968","page","type-page","status-publish","hentry"],"acf":[],"_links":{"self":[{"href":"https:\/\/inclusionincanadiansports.ca\/fr\/wp-json\/wp\/v2\/pages\/3968","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/inclusionincanadiansports.ca\/fr\/wp-json\/wp\/v2\/pages"}],"about":[{"href":"https:\/\/inclusionincanadiansports.ca\/fr\/wp-json\/wp\/v2\/types\/page"}],"author":[{"embeddable":true,"href":"https:\/\/inclusionincanadiansports.ca\/fr\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/inclusionincanadiansports.ca\/fr\/wp-json\/wp\/v2\/comments?post=3968"}],"version-history":[{"count":21,"href":"https:\/\/inclusionincanadiansports.ca\/fr\/wp-json\/wp\/v2\/pages\/3968\/revisions"}],"predecessor-version":[{"id":13176,"href":"https:\/\/inclusionincanadiansports.ca\/fr\/wp-json\/wp\/v2\/pages\/3968\/revisions\/13176"}],"wp:attachment":[{"href":"https:\/\/inclusionincanadiansports.ca\/fr\/wp-json\/wp\/v2\/media?parent=3968"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}